tailscale_tun_auto.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import {State, init} from "./tailscale_tun.js";
  2. export { State };
  3. export async function autoConf({loginUrlCb, dnsIp, stateUpdateCb, netmapUpdateCb, controlUrl, authKey, ipMap}) {
  4. const { tcpSocket, udpSocket, parseIP, dumpIP, resolve, up, down, login, logout, listeners } = await init();
  5. const settings = {
  6. controlUrl: controlUrl,
  7. dnsIp: dnsIp,
  8. authKey: authKey,
  9. exitNodeIp: undefined,
  10. wantsRunning: true,
  11. ipMap: ipMap,
  12. };
  13. listeners.onstateupdate = (state) => {
  14. stateUpdateCb(state);
  15. switch(state)
  16. {
  17. case State.NeedsLogin:
  18. {
  19. login();
  20. break;
  21. }
  22. case State.Running:
  23. {
  24. break;
  25. }
  26. case State.Starting:
  27. {
  28. break;
  29. }
  30. case State.Stopped:
  31. {
  32. break;
  33. }
  34. case State.NoState:
  35. {
  36. up(settings);
  37. break;
  38. }
  39. default:
  40. {
  41. console.log(state);
  42. break;
  43. }
  44. }
  45. };
  46. listeners.onloginurl = (login) => {
  47. console.log("login url:",login);
  48. loginUrlCb(login);
  49. };
  50. listeners.onnetmap = (map) => {
  51. netmapUpdateCb(map);
  52. if (!settings.exitNodeIp) {
  53. for (let p of map.peers) {
  54. if (p.online && p.exitNode) {
  55. settings.exitNodeIp = p.addresses[0];
  56. settings.dnsIp = settings.dnsIp || "8.8.8.8";
  57. up(settings);
  58. break;
  59. }
  60. }
  61. }
  62. };
  63. return {
  64. tcpSocket,
  65. udpSocket,
  66. parseIP,
  67. dumpIP,
  68. resolve,
  69. up: async () => {
  70. await up(settings);
  71. },
  72. }
  73. }