tailscale_tun_auto.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import {State, init} from "./tailscale_tun.js";
  2. export async function autoConf({loginUrlCb, stateUpdateCb, netmapUpdateCb, controlUrl, authKey}) {
  3. const { tcpSocket, udpSocket, 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. tcpSocket,
  62. udpSocket,
  63. parseIP,
  64. resolve,
  65. up: async () => {
  66. await up(settings);
  67. },
  68. }
  69. }