tailscale_tun_auto.js 1.2 KB

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