appium-ios-remotexpc 2.3.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/build/src/base-plist-service.d.ts +1 -1
  3. package/build/src/base-plist-service.d.ts.map +1 -1
  4. package/build/src/base-socket-service.d.ts +1 -1
  5. package/build/src/base-socket-service.d.ts.map +1 -1
  6. package/build/src/index.d.ts +3 -3
  7. package/build/src/index.d.ts.map +1 -1
  8. package/build/src/index.js +3 -3
  9. package/build/src/index.js.map +1 -1
  10. package/build/src/lib/lockdown/index.d.ts.map +1 -1
  11. package/build/src/lib/lockdown/index.js +3 -13
  12. package/build/src/lib/lockdown/index.js.map +1 -1
  13. package/build/src/lib/plist/plist-parser.js.map +1 -1
  14. package/build/src/lib/plist/plist-service.d.ts +2 -2
  15. package/build/src/lib/plist/plist-service.d.ts.map +1 -1
  16. package/build/src/lib/port-forwarding/connectors.d.ts +3 -4
  17. package/build/src/lib/port-forwarding/connectors.d.ts.map +1 -1
  18. package/build/src/lib/port-forwarding/connectors.js +13 -5
  19. package/build/src/lib/port-forwarding/connectors.js.map +1 -1
  20. package/build/src/lib/remote-xpc/handshake.d.ts +1 -1
  21. package/build/src/lib/remote-xpc/handshake.d.ts.map +1 -1
  22. package/build/src/lib/tunnel/constants.d.ts +2 -0
  23. package/build/src/lib/tunnel/constants.d.ts.map +1 -1
  24. package/build/src/lib/tunnel/constants.js +2 -0
  25. package/build/src/lib/tunnel/constants.js.map +1 -1
  26. package/build/src/lib/tunnel/index.d.ts +2 -10
  27. package/build/src/lib/tunnel/index.d.ts.map +1 -1
  28. package/build/src/lib/tunnel/index.js +2 -55
  29. package/build/src/lib/tunnel/index.js.map +1 -1
  30. package/build/src/lib/tunnel/packet-stream-server.d.ts +15 -0
  31. package/build/src/lib/tunnel/packet-stream-server.d.ts.map +1 -1
  32. package/build/src/lib/tunnel/packet-stream-server.js +46 -3
  33. package/build/src/lib/tunnel/packet-stream-server.js.map +1 -1
  34. package/build/src/lib/tunnel/tunnel-api-client.d.ts +11 -3
  35. package/build/src/lib/tunnel/tunnel-api-client.d.ts.map +1 -1
  36. package/build/src/lib/tunnel/tunnel-api-client.js +40 -19
  37. package/build/src/lib/tunnel/tunnel-api-client.js.map +1 -1
  38. package/build/src/lib/tunnel/tunnel-availability.d.ts +15 -7
  39. package/build/src/lib/tunnel/tunnel-availability.d.ts.map +1 -1
  40. package/build/src/lib/tunnel/tunnel-availability.js +27 -34
  41. package/build/src/lib/tunnel/tunnel-availability.js.map +1 -1
  42. package/build/src/lib/tunnel/tunnel-readiness.d.ts +18 -0
  43. package/build/src/lib/tunnel/tunnel-readiness.d.ts.map +1 -0
  44. package/build/src/lib/tunnel/tunnel-readiness.js +70 -0
  45. package/build/src/lib/tunnel/tunnel-readiness.js.map +1 -0
  46. package/build/src/lib/tunnel/tunnel-registry-server.d.ts +23 -4
  47. package/build/src/lib/tunnel/tunnel-registry-server.d.ts.map +1 -1
  48. package/build/src/lib/tunnel/tunnel-registry-server.js +100 -10
  49. package/build/src/lib/tunnel/tunnel-registry-server.js.map +1 -1
  50. package/build/src/lib/tunnel/tunnel-rsd-discovery.d.ts +10 -0
  51. package/build/src/lib/tunnel/tunnel-rsd-discovery.d.ts.map +1 -0
  52. package/build/src/lib/tunnel/tunnel-rsd-discovery.js +44 -0
  53. package/build/src/lib/tunnel/tunnel-rsd-discovery.js.map +1 -0
  54. package/build/src/lib/tunnel/tunnel-service-resolver.d.ts +24 -0
  55. package/build/src/lib/tunnel/tunnel-service-resolver.d.ts.map +1 -0
  56. package/build/src/lib/tunnel/tunnel-service-resolver.js +65 -0
  57. package/build/src/lib/tunnel/tunnel-service-resolver.js.map +1 -0
  58. package/build/src/lib/types.d.ts +19 -11
  59. package/build/src/lib/types.d.ts.map +1 -1
  60. package/build/src/lib/usbmux/index.d.ts +1 -1
  61. package/build/src/lib/usbmux/index.d.ts.map +1 -1
  62. package/build/src/lib/usbmux/index.js +1 -1
  63. package/build/src/lib/usbmux/index.js.map +1 -1
  64. package/build/src/services/ios/afc/codec.d.ts +1 -1
  65. package/build/src/services/ios/afc/codec.d.ts.map +1 -1
  66. package/build/src/services/ios/afc/codec.js.map +1 -1
  67. package/build/src/services/ios/afc/constants.d.ts.map +1 -1
  68. package/build/src/services/ios/afc/constants.js +2 -3
  69. package/build/src/services/ios/afc/constants.js.map +1 -1
  70. package/build/src/services/ios/afc/demux.d.ts.map +1 -1
  71. package/build/src/services/ios/afc/demux.js +1 -0
  72. package/build/src/services/ios/afc/demux.js.map +1 -1
  73. package/build/src/services/ios/afc/enums.d.ts +16 -1
  74. package/build/src/services/ios/afc/enums.d.ts.map +1 -1
  75. package/build/src/services/ios/afc/enums.js +15 -0
  76. package/build/src/services/ios/afc/enums.js.map +1 -1
  77. package/build/src/services/ios/afc/index.d.ts +6 -8
  78. package/build/src/services/ios/afc/index.d.ts.map +1 -1
  79. package/build/src/services/ios/afc/index.js +19 -15
  80. package/build/src/services/ios/afc/index.js.map +1 -1
  81. package/build/src/services/ios/afc/stream-utils.d.ts.map +1 -1
  82. package/build/src/services/ios/afc/stream-utils.js +34 -20
  83. package/build/src/services/ios/afc/stream-utils.js.map +1 -1
  84. package/build/src/services/ios/base-service.d.ts +6 -11
  85. package/build/src/services/ios/base-service.d.ts.map +1 -1
  86. package/build/src/services/ios/base-service.js +16 -16
  87. package/build/src/services/ios/base-service.js.map +1 -1
  88. package/build/src/services/ios/crash-reports/index.d.ts +3 -9
  89. package/build/src/services/ios/crash-reports/index.d.ts.map +1 -1
  90. package/build/src/services/ios/crash-reports/index.js +8 -13
  91. package/build/src/services/ios/crash-reports/index.js.map +1 -1
  92. package/build/src/services/ios/diagnostic-service/index.d.ts +0 -2
  93. package/build/src/services/ios/diagnostic-service/index.d.ts.map +1 -1
  94. package/build/src/services/ios/diagnostic-service/index.js +1 -10
  95. package/build/src/services/ios/diagnostic-service/index.js.map +1 -1
  96. package/build/src/services/ios/dvt/index.d.ts +1 -1
  97. package/build/src/services/ios/dvt/index.d.ts.map +1 -1
  98. package/build/src/services/ios/dvt/index.js +3 -7
  99. package/build/src/services/ios/dvt/index.js.map +1 -1
  100. package/build/src/services/ios/dvt/instruments/device-info.d.ts +2 -0
  101. package/build/src/services/ios/dvt/instruments/device-info.d.ts.map +1 -1
  102. package/build/src/services/ios/dvt/instruments/device-info.js +15 -2
  103. package/build/src/services/ios/dvt/instruments/device-info.js.map +1 -1
  104. package/build/src/services/ios/house-arrest/index.d.ts +0 -1
  105. package/build/src/services/ios/house-arrest/index.d.ts.map +1 -1
  106. package/build/src/services/ios/house-arrest/index.js +1 -8
  107. package/build/src/services/ios/house-arrest/index.js.map +1 -1
  108. package/build/src/services/ios/installation-proxy/index.d.ts +1 -1
  109. package/build/src/services/ios/installation-proxy/index.d.ts.map +1 -1
  110. package/build/src/services/ios/installation-proxy/index.js +3 -7
  111. package/build/src/services/ios/installation-proxy/index.js.map +1 -1
  112. package/build/src/services/ios/misagent/index.d.ts +1 -2
  113. package/build/src/services/ios/misagent/index.d.ts.map +1 -1
  114. package/build/src/services/ios/misagent/index.js +1 -8
  115. package/build/src/services/ios/misagent/index.js.map +1 -1
  116. package/build/src/services/ios/mobile-config/index.d.ts +1 -3
  117. package/build/src/services/ios/mobile-config/index.d.ts.map +1 -1
  118. package/build/src/services/ios/mobile-config/index.js +1 -11
  119. package/build/src/services/ios/mobile-config/index.js.map +1 -1
  120. package/build/src/services/ios/mobile-image-mounter/index.d.ts +0 -1
  121. package/build/src/services/ios/mobile-image-mounter/index.d.ts.map +1 -1
  122. package/build/src/services/ios/mobile-image-mounter/index.js +1 -7
  123. package/build/src/services/ios/mobile-image-mounter/index.js.map +1 -1
  124. package/build/src/services/ios/notification-proxy/index.d.ts +2 -3
  125. package/build/src/services/ios/notification-proxy/index.d.ts.map +1 -1
  126. package/build/src/services/ios/notification-proxy/index.js +3 -11
  127. package/build/src/services/ios/notification-proxy/index.js.map +1 -1
  128. package/build/src/services/ios/power-assertion/index.d.ts.map +1 -1
  129. package/build/src/services/ios/power-assertion/index.js +2 -6
  130. package/build/src/services/ios/power-assertion/index.js.map +1 -1
  131. package/build/src/services/ios/springboard-service/index.d.ts +1 -3
  132. package/build/src/services/ios/springboard-service/index.d.ts.map +1 -1
  133. package/build/src/services/ios/springboard-service/index.js +1 -11
  134. package/build/src/services/ios/springboard-service/index.js.map +1 -1
  135. package/build/src/services/ios/syslog-service/index.d.ts +3 -2
  136. package/build/src/services/ios/syslog-service/index.d.ts.map +1 -1
  137. package/build/src/services/ios/syslog-service/index.js +7 -5
  138. package/build/src/services/ios/syslog-service/index.js.map +1 -1
  139. package/build/src/services/ios/testmanagerd/index.d.ts +1 -1
  140. package/build/src/services/ios/testmanagerd/index.d.ts.map +1 -1
  141. package/build/src/services/ios/testmanagerd/index.js +3 -7
  142. package/build/src/services/ios/testmanagerd/index.js.map +1 -1
  143. package/build/src/services/ios/webinspector/index.d.ts +1 -1
  144. package/build/src/services/ios/webinspector/index.d.ts.map +1 -1
  145. package/build/src/services/ios/webinspector/index.js +3 -7
  146. package/build/src/services/ios/webinspector/index.js.map +1 -1
  147. package/build/src/services/ios/zipconduit/index.d.ts +2 -2
  148. package/build/src/services/ios/zipconduit/index.d.ts.map +1 -1
  149. package/build/src/services/ios/zipconduit/index.js +6 -4
  150. package/build/src/services/ios/zipconduit/index.js.map +1 -1
  151. package/build/src/services.d.ts +6 -27
  152. package/build/src/services.d.ts.map +1 -1
  153. package/build/src/services.js +67 -199
  154. package/build/src/services.js.map +1 -1
  155. package/package.json +2 -1
  156. package/scripts/start-appletv-tunnel.mjs +103 -53
  157. package/scripts/tunnel-creation.mjs +122 -106
  158. package/src/base-plist-service.ts +1 -1
  159. package/src/base-socket-service.ts +1 -1
  160. package/src/index.ts +11 -3
  161. package/src/lib/lockdown/index.ts +7 -15
  162. package/src/lib/plist/plist-parser.ts +1 -1
  163. package/src/lib/plist/plist-service.ts +2 -2
  164. package/src/lib/port-forwarding/connectors.ts +22 -7
  165. package/src/lib/remote-xpc/handshake.ts +1 -1
  166. package/src/lib/tunnel/constants.ts +3 -0
  167. package/src/lib/tunnel/index.ts +2 -84
  168. package/src/lib/tunnel/packet-stream-server.ts +61 -4
  169. package/src/lib/tunnel/tunnel-api-client.ts +62 -24
  170. package/src/lib/tunnel/tunnel-availability.ts +37 -35
  171. package/src/lib/tunnel/tunnel-readiness.ts +82 -0
  172. package/src/lib/tunnel/tunnel-registry-server.ts +132 -9
  173. package/src/lib/tunnel/tunnel-rsd-discovery.ts +59 -0
  174. package/src/lib/tunnel/tunnel-service-resolver.ts +112 -0
  175. package/src/lib/types.ts +18 -11
  176. package/src/lib/usbmux/index.ts +6 -1
  177. package/src/services/ios/afc/codec.ts +1 -1
  178. package/src/services/ios/afc/constants.ts +2 -3
  179. package/src/services/ios/afc/demux.ts +1 -0
  180. package/src/services/ios/afc/enums.ts +15 -0
  181. package/src/services/ios/afc/index.ts +32 -14
  182. package/src/services/ios/afc/stream-utils.ts +40 -24
  183. package/src/services/ios/base-service.ts +23 -16
  184. package/src/services/ios/crash-reports/index.ts +17 -18
  185. package/src/services/ios/diagnostic-service/index.ts +3 -12
  186. package/src/services/ios/dvt/index.ts +7 -10
  187. package/src/services/ios/dvt/instruments/device-info.ts +27 -2
  188. package/src/services/ios/house-arrest/index.ts +3 -9
  189. package/src/services/ios/installation-proxy/index.ts +9 -11
  190. package/src/services/ios/misagent/index.ts +4 -10
  191. package/src/services/ios/mobile-config/index.ts +4 -16
  192. package/src/services/ios/mobile-image-mounter/index.ts +5 -10
  193. package/src/services/ios/notification-proxy/index.ts +7 -16
  194. package/src/services/ios/power-assertion/index.ts +4 -8
  195. package/src/services/ios/springboard-service/index.ts +4 -17
  196. package/src/services/ios/syslog-service/index.ts +10 -6
  197. package/src/services/ios/testmanagerd/index.ts +7 -10
  198. package/src/services/ios/testmanagerd/xcuitest.ts +1 -1
  199. package/src/services/ios/webinspector/index.ts +6 -9
  200. package/src/services/ios/zipconduit/index.ts +10 -4
  201. package/src/services.ts +86 -269
  202. package/build/src/lib/tunnel/rsd-session-lock.d.ts +0 -9
  203. package/build/src/lib/tunnel/rsd-session-lock.d.ts.map +0 -1
  204. package/build/src/lib/tunnel/rsd-session-lock.js +0 -17
  205. package/build/src/lib/tunnel/rsd-session-lock.js.map +0 -1
  206. package/src/lib/tunnel/rsd-session-lock.ts +0 -23
@@ -1 +1 @@
1
- {"version":3,"file":"packet-stream-server.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/packet-stream-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3C;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAKtC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,cAAc,CAA+B;gBAExB,IAAI,EAAE,MAAM;IAIzC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAe9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;YACW,eAAe;IAwB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,aAAa;CAItB"}
1
+ {"version":3,"file":"packet-stream-server.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/packet-stream-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,KAAK,mBAAmB,GAAG,IAAI,CAC7B,YAAY,EACZ,mBAAmB,GAAG,sBAAsB,CAC7C,CAAC;AAEF;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAOtC,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,gBAAgB,CAAS;gBAEJ,IAAI,EAAE,MAAM;IAIzC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAO7C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B;;;OAGG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;YACW,eAAe;IAwB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,aAAa;CAItB"}
@@ -11,10 +11,21 @@ export class PacketStreamServer extends EventEmitter {
11
11
  server = null;
12
12
  clients = new Set();
13
13
  packetConsumer = null;
14
+ tunnel = null;
15
+ attachedToTunnel = false;
14
16
  constructor(port) {
15
17
  super();
16
18
  this.port = port;
17
19
  }
20
+ /**
21
+ * Bind the tunnel whose packet consumer is attached only while TCP clients are connected.
22
+ */
23
+ bindTunnel(tunnel) {
24
+ this.tunnel = tunnel;
25
+ if (this.clients.size > 0) {
26
+ this.attachToTunnel();
27
+ }
28
+ }
18
29
  /**
19
30
  * Start the packet stream server
20
31
  * @throws {Error} If server is already started
@@ -27,7 +38,6 @@ export class PacketStreamServer extends EventEmitter {
27
38
  this.handleClientConnection(client);
28
39
  });
29
40
  const server = this.server;
30
- this.packetConsumer = this.createPacketConsumer();
31
41
  await new Promise((resolve, reject) => {
32
42
  server.once('error', reject);
33
43
  server.listen(this.port, resolve);
@@ -35,6 +45,7 @@ export class PacketStreamServer extends EventEmitter {
35
45
  log.info(`Packet stream server listening on port ${this.port}`);
36
46
  }
37
47
  async stop() {
48
+ this.detachFromTunnel();
38
49
  for (const client of this.clients) {
39
50
  client.destroy();
40
51
  }
@@ -48,6 +59,10 @@ export class PacketStreamServer extends EventEmitter {
48
59
  this.server = null;
49
60
  }
50
61
  }
62
+ /**
63
+ * Returns the packet consumer used when attached to a tunnel.
64
+ * Prefer {@link bindTunnel} for lifecycle management.
65
+ */
51
66
  getPacketConsumer() {
52
67
  return this.packetConsumer;
53
68
  }
@@ -57,15 +72,43 @@ export class PacketStreamServer extends EventEmitter {
57
72
  handleClientConnection(client) {
58
73
  log.info(`Client connected from ${client.remoteAddress}`);
59
74
  this.clients.add(client);
75
+ if (this.clients.size === 1) {
76
+ this.attachToTunnel();
77
+ }
78
+ const onClientGone = () => {
79
+ this.clients.delete(client);
80
+ if (this.clients.size === 0) {
81
+ this.detachFromTunnel();
82
+ }
83
+ };
60
84
  client.on('close', () => {
61
85
  log.info(`Client disconnected from ${client.remoteAddress}`);
62
- this.clients.delete(client);
86
+ onClientGone();
63
87
  });
64
88
  client.on('error', (err) => {
65
89
  log.error(`Client error: ${err}`);
66
- this.clients.delete(client);
90
+ onClientGone();
67
91
  });
68
92
  }
93
+ attachToTunnel() {
94
+ if (this.attachedToTunnel || !this.tunnel) {
95
+ return;
96
+ }
97
+ if (!this.packetConsumer) {
98
+ this.packetConsumer = this.createPacketConsumer();
99
+ }
100
+ this.tunnel.addPacketConsumer(this.packetConsumer);
101
+ this.attachedToTunnel = true;
102
+ log.debug('Attached packet consumer to tunnel');
103
+ }
104
+ detachFromTunnel() {
105
+ if (!this.attachedToTunnel || !this.tunnel || !this.packetConsumer) {
106
+ return;
107
+ }
108
+ this.tunnel.removePacketConsumer(this.packetConsumer);
109
+ this.attachedToTunnel = false;
110
+ log.debug('Detached packet consumer from tunnel');
111
+ }
69
112
  /**
70
113
  * Create packet consumer that broadcasts packets to all connected clients
71
114
  */
@@ -1 +1 @@
1
- {"version":3,"file":"packet-stream-server.js","sourceRoot":"","sources":["../../../../src/lib/tunnel/packet-stream-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packet-stream-server.js","sourceRoot":"","sources":["../../../../src/lib/tunnel/packet-stream-server.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
1
  import type { TunnelRegistry, TunnelRegistryEntry } from '../types.js';
2
+ export interface GetTunnelByUdidOptions {
3
+ /** Long-poll budget for GET /tunnels/:udid?waitMs= (0 or omitted = immediate). */
4
+ waitMs?: number;
5
+ }
2
6
  export interface TunnelApiClientOptions {
3
7
  /** When true, methods throw on fetch/API errors instead of returning fallback values. Default false. */
4
8
  strict?: boolean;
@@ -42,11 +46,15 @@ export declare class TunnelApiClient {
42
46
  */
43
47
  fetchRegistry(): Promise<TunnelRegistry>;
44
48
  /**
45
- * Get a specific tunnel by UDID
49
+ * Get a specific tunnel by UDID.
46
50
  * @param udid - Device UDID
47
- * @returns Tunnel registry entry or null if not found
51
+ * @param options.waitMs - When > 0, long-poll until the tunnel is ready or timeout (408).
52
+ */
53
+ getTunnelByUdid(udid: string, options?: GetTunnelByUdidOptions): Promise<TunnelRegistryEntry | null>;
54
+ /**
55
+ * Ask tunnel-creation to re-run RSD discover-and-close and return the updated entry.
48
56
  */
49
- getTunnelByUdid(udid: string): Promise<TunnelRegistryEntry | null>;
57
+ refreshServiceCatalog(udid: string): Promise<TunnelRegistryEntry | null>;
50
58
  /**
51
59
  * Get tunnel by device ID
52
60
  * @param deviceId - Device ID
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-api-client.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-api-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAevE,MAAM,WAAW,sBAAsB;IACrC,wGAAwG;IACxG,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC;;;;OAIG;gBACS,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B;IAMpE;;;OAGG;IACH,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC;IAiB9C;;;;OAIG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAuBxE;;;;OAIG;IACG,mBAAmB,CACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA0BtC;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAUrD;;;;OAIG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAUxD;;;;OAIG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAcvE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU9C;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBhE;;;;OAIG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBlD;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,eAAe;YAQT,gBAAgB;CA8B/B"}
1
+ {"version":3,"file":"tunnel-api-client.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-api-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAgBvE,MAAM,WAAW,sBAAsB;IACrC,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,wGAAwG;IACxG,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC;;;;OAIG;gBACS,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B;IAMpE;;;OAGG;IACH,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC;IAe9C;;;;OAIG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA2BtC;;OAEG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA0BtC;;;;OAIG;IACG,mBAAmB,CACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAwBtC;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAUrD;;;;OAIG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAUxD;;;;OAIG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAcvE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU9C;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBhE;;;;OAIG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBlD;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,eAAe;YAQT,gBAAgB;CA+B/B"}
@@ -10,6 +10,7 @@ const EMPTY_REGISTRY = {
10
10
  },
11
11
  };
12
12
  const DEFAULT_TIMEOUT_MS = 10_000;
13
+ const WAIT_REQUEST_BUFFER_MS = 1_000;
13
14
  /**
14
15
  * API client for tunnel registry operations
15
16
  * This client handles communication with the API server for tunnel data
@@ -43,7 +44,7 @@ export class TunnelApiClient {
43
44
  try {
44
45
  const response = await this.fetchWithTimeout(this.apiBaseUrl);
45
46
  if (!response.ok) {
46
- throw new TunnelAvailabilityError(`Failed to fetch tunnel registry from API: HTTP ${response.status}`);
47
+ throw new TunnelAvailabilityError(`HTTP ${response.status}`);
47
48
  }
48
49
  return (await response.json());
49
50
  }
@@ -53,18 +54,23 @@ export class TunnelApiClient {
53
54
  }
54
55
  }
55
56
  /**
56
- * Get a specific tunnel by UDID
57
+ * Get a specific tunnel by UDID.
57
58
  * @param udid - Device UDID
58
- * @returns Tunnel registry entry or null if not found
59
+ * @param options.waitMs - When > 0, long-poll until the tunnel is ready or timeout (408).
59
60
  */
60
- async getTunnelByUdid(udid) {
61
+ async getTunnelByUdid(udid, options = {}) {
62
+ const waitMs = options.waitMs ?? 0;
63
+ const url = waitMs > 0
64
+ ? `${this.apiBaseUrl}/${udid}?waitMs=${waitMs}`
65
+ : `${this.apiBaseUrl}/${udid}`;
66
+ const timeoutMs = waitMs > 0 ? waitMs + WAIT_REQUEST_BUFFER_MS : this.timeoutMs;
61
67
  try {
62
- const response = await this.fetchWithTimeout(`${this.apiBaseUrl}/${udid}`);
63
- if (response.status === 404) {
68
+ const response = await this.fetchWithTimeout(url, undefined, timeoutMs);
69
+ if (response.status === 404 || response.status === 408) {
64
70
  return null;
65
71
  }
66
72
  if (!response.ok) {
67
- throw new TunnelAvailabilityError(`Failed to fetch tunnel for UDID ${udid}: HTTP ${response.status}`);
73
+ throw new TunnelAvailabilityError(`HTTP ${response.status}`);
68
74
  }
69
75
  return (await response.json());
70
76
  }
@@ -73,6 +79,25 @@ export class TunnelApiClient {
73
79
  return null;
74
80
  }
75
81
  }
82
+ /**
83
+ * Ask tunnel-creation to re-run RSD discover-and-close and return the updated entry.
84
+ */
85
+ async refreshServiceCatalog(udid) {
86
+ try {
87
+ const response = await this.fetchWithTimeout(`${this.apiBaseUrl}/${udid}/refresh-services`, { method: 'POST' }, this.timeoutMs + DEFAULT_TIMEOUT_MS);
88
+ if (response.status === 404) {
89
+ return null;
90
+ }
91
+ if (!response.ok) {
92
+ throw new TunnelAvailabilityError(`HTTP ${response.status}`);
93
+ }
94
+ return (await response.json());
95
+ }
96
+ catch (error) {
97
+ this.handleFetchError(`Failed to refresh service catalog for UDID ${udid}`, error);
98
+ return null;
99
+ }
100
+ }
76
101
  /**
77
102
  * Get tunnel by device ID
78
103
  * @param deviceId - Device ID
@@ -85,7 +110,7 @@ export class TunnelApiClient {
85
110
  return null;
86
111
  }
87
112
  if (!response.ok) {
88
- throw new TunnelAvailabilityError(`Failed to fetch tunnel for device ID ${deviceId}: HTTP ${response.status}`);
113
+ throw new TunnelAvailabilityError(`HTTP ${response.status}`);
89
114
  }
90
115
  return (await response.json());
91
116
  }
@@ -203,15 +228,11 @@ export class TunnelApiClient {
203
228
  * Otherwise logs and returns.
204
229
  */
205
230
  handleFetchError(messagePrefix, error, logLevel = 'warn') {
206
- if (error instanceof TunnelAvailabilityError) {
207
- if (this.strict) {
208
- throw error;
209
- }
210
- this.logFetchFailure(error.message, logLevel);
211
- return;
212
- }
213
231
  const detail = error instanceof Error ? error.message : String(error);
214
- const message = `${messagePrefix}: ${detail}`;
232
+ const prefixed = `${messagePrefix}: ${detail}`;
233
+ const message = detail === messagePrefix || detail.startsWith(`${messagePrefix}:`)
234
+ ? detail
235
+ : prefixed;
215
236
  if (this.strict) {
216
237
  throw new TunnelAvailabilityError(message, { cause: error });
217
238
  }
@@ -225,9 +246,9 @@ export class TunnelApiClient {
225
246
  log.warn(message);
226
247
  }
227
248
  }
228
- async fetchWithTimeout(url, init) {
249
+ async fetchWithTimeout(url, init, timeoutMs = this.timeoutMs) {
229
250
  const controller = new AbortController();
230
- const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
251
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
231
252
  try {
232
253
  const response = await fetch(url, {
233
254
  ...init,
@@ -240,7 +261,7 @@ export class TunnelApiClient {
240
261
  throw error;
241
262
  }
242
263
  if (error instanceof Error && error.name === 'AbortError') {
243
- throw new TunnelAvailabilityError(`Tunnel registry request timed out after ${this.timeoutMs}ms`, { cause: error });
264
+ throw new TunnelAvailabilityError(`Tunnel registry request timed out after ${timeoutMs}ms`, { cause: error });
244
265
  }
245
266
  throw new TunnelAvailabilityError(`Tunnel registry request failed for ${url}`, { cause: error });
246
267
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-api-client.js","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tunnel-api-client.js","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-api-client.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,27 @@
1
+ import type { TunnelRegistryEntry } from '../types.js';
1
2
  import { TunnelAvailabilityError } from './errors.js';
2
- import { type TunnelEndpoint } from './tunnel-api-client.js';
3
+ import { TunnelApiClient, type TunnelEndpoint } from './tunnel-api-client.js';
3
4
  export { TunnelAvailabilityError };
5
+ export interface GetTunnelForDeviceOptions {
6
+ /** Long-poll budget passed to GET /tunnels/:udid?waitMs= (0 = immediate). */
7
+ waitMs?: number;
8
+ }
4
9
  /**
5
10
  * Resolve tunnel registry metadata for a device (host, RSD port, packet stream).
6
- * Strongbox port, TCP probe, then a single `GET /remotexpc/tunnels/{udid}`.
7
11
  * @throws {TunnelAvailabilityError} When registry or tunnel for the UDID is unavailable.
8
12
  */
9
- export declare function getTunnelForDevice(udid: string): Promise<TunnelEndpoint>;
13
+ export declare function getTunnelForDevice(udid: string, options?: GetTunnelForDeviceOptions): Promise<TunnelEndpoint>;
10
14
  /**
11
15
  * Returns the list of device UDIDs currently in the tunnel registry.
12
- * Used to include tunnel-only devices (e.g. Apple TV over WiFi)
13
- * in the "connected devices" list for session validation.
14
- *
15
- * @returns UDIDs when the registry is reachable (possibly empty).
16
16
  * @throws {TunnelAvailabilityError} When the registry port is missing or unreachable.
17
17
  */
18
18
  export declare function getAvailableDevices(): Promise<string[]>;
19
+ /**
20
+ * Strict registry client for internal catalog resolution (service resolver).
21
+ */
22
+ export declare function createValidatedStrictRegistryClient(): Promise<TunnelApiClient>;
23
+ /** Map a registry entry to a flat tunnel endpoint. */
24
+ export declare function mapEntryToEndpoint(entry: TunnelRegistryEntry): TunnelEndpoint;
25
+ /** Whether a registry entry has a non-empty discovered RSD service catalog. */
26
+ export declare function isTunnelEntryReady(entry: TunnelRegistryEntry): boolean;
19
27
  //# sourceMappingURL=tunnel-availability.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-availability.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-availability.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAInC;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG7D"}
1
+ {"version":3,"file":"tunnel-availability.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-availability.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,eAAe,EAEf,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAInC,MAAM,WAAW,yBAAyB;IACxC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,cAAc,CAAC,CAYzB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG7D;AAED;;GAEG;AACH,wBAAsB,mCAAmC,IAAI,OAAO,CAAC,eAAe,CAAC,CAOpF;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAO7E;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAMtE"}
@@ -8,12 +8,12 @@ export { TunnelAvailabilityError };
8
8
  const TUNNEL_REGISTRY_PORT = 'tunnelRegistryPort';
9
9
  /**
10
10
  * Resolve tunnel registry metadata for a device (host, RSD port, packet stream).
11
- * Strongbox port, TCP probe, then a single `GET /remotexpc/tunnels/{udid}`.
12
11
  * @throws {TunnelAvailabilityError} When registry or tunnel for the UDID is unavailable.
13
12
  */
14
- export async function getTunnelForDevice(udid) {
13
+ export async function getTunnelForDevice(udid, options = {}) {
15
14
  const client = await createValidatedStrictRegistryClient();
16
- const entry = await client.getTunnelByUdid(udid);
15
+ const waitMs = options.waitMs ?? 0;
16
+ const entry = await client.getTunnelByUdid(udid, { waitMs });
17
17
  if (!entry) {
18
18
  throw new TunnelAvailabilityError(`No tunnel found for device ${udid}. Please run the tunnel creation script first`);
19
19
  }
@@ -21,10 +21,6 @@ export async function getTunnelForDevice(udid) {
21
21
  }
22
22
  /**
23
23
  * Returns the list of device UDIDs currently in the tunnel registry.
24
- * Used to include tunnel-only devices (e.g. Apple TV over WiFi)
25
- * in the "connected devices" list for session validation.
26
- *
27
- * @returns UDIDs when the registry is reachable (possibly empty).
28
24
  * @throws {TunnelAvailabilityError} When the registry port is missing or unreachable.
29
25
  */
30
26
  export async function getAvailableDevices() {
@@ -32,9 +28,31 @@ export async function getAvailableDevices() {
32
28
  return await client.getAvailableDevices();
33
29
  }
34
30
  /**
35
- * Read the tunnel registry HTTP port from strongbox.
36
- * @throws {TunnelAvailabilityError} When the port was never stored or is not a valid TCP port.
31
+ * Strict registry client for internal catalog resolution (service resolver).
37
32
  */
33
+ export async function createValidatedStrictRegistryClient() {
34
+ const port = await readTunnelRegistryPort();
35
+ await assertRegistryPortAcceptingConnections(port);
36
+ return createTunnelRegistryClient(port, {
37
+ strict: true,
38
+ timeoutMs: TUNNEL_REGISTRY_HTTP_TIMEOUT_MS,
39
+ });
40
+ }
41
+ /** Map a registry entry to a flat tunnel endpoint. */
42
+ export function mapEntryToEndpoint(entry) {
43
+ return {
44
+ host: entry.address,
45
+ port: entry.rsdPort,
46
+ udid: entry.udid,
47
+ packetStreamPort: entry.packetStreamPort,
48
+ };
49
+ }
50
+ /** Whether a registry entry has a non-empty discovered RSD service catalog. */
51
+ export function isTunnelEntryReady(entry) {
52
+ return (entry.services !== undefined &&
53
+ typeof entry.services === 'object' &&
54
+ Object.keys(entry.services).length > 0);
55
+ }
38
56
  async function readTunnelRegistryPort() {
39
57
  const box = strongbox(TUNNEL_CONTAINER_NAME);
40
58
  const item = new BaseItem(TUNNEL_REGISTRY_PORT, box);
@@ -50,10 +68,6 @@ async function readTunnelRegistryPort() {
50
68
  }
51
69
  return port;
52
70
  }
53
- /**
54
- * Verify the registry HTTP server is accepting TCP connections on localhost.
55
- * @throws {TunnelAvailabilityError} When the port is closed or the probe times out.
56
- */
57
71
  async function assertRegistryPortAcceptingConnections(port) {
58
72
  const registryAddress = `${TUNNEL_REGISTRY_HOST}:${port}`;
59
73
  const unreachableMessage = `Tunnel registry at ${registryAddress} is not reachable. Please run the tunnel creation script first`;
@@ -86,28 +100,7 @@ async function assertRegistryPortAcceptingConnections(port) {
86
100
  });
87
101
  });
88
102
  }
89
- /** Map a registry entry to a flat tunnel endpoint for RSD connect. */
90
- function mapEntryToEndpoint(entry) {
91
- return {
92
- host: entry.address,
93
- port: entry.rsdPort,
94
- udid: entry.udid,
95
- packetStreamPort: entry.packetStreamPort,
96
- };
97
- }
98
- /**
99
- * Build a strict tunnel registry API client (caller supplies port via base URL).
100
- */
101
103
  function createTunnelRegistryClient(port, options = {}) {
102
104
  return new TunnelApiClient(`http://${TUNNEL_REGISTRY_HOST}:${port}${TUNNEL_REGISTRY_API_BASE_PATH}`, options);
103
105
  }
104
- /** Strongbox port, TCP probe, then a strict registry client with the lookup timeout. */
105
- async function createValidatedStrictRegistryClient() {
106
- const port = await readTunnelRegistryPort();
107
- await assertRegistryPortAcceptingConnections(port);
108
- return createTunnelRegistryClient(port, {
109
- strict: true,
110
- timeoutMs: TUNNEL_REGISTRY_HTTP_TIMEOUT_MS,
111
- });
112
- }
113
106
  //# sourceMappingURL=tunnel-availability.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-availability.js","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-availability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tunnel-availability.js","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-availability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { TunnelRegistryEntry } from '../types.js';
2
+ /**
3
+ * In-process readiness coordination for long-poll GET /tunnels/:udid?waitMs=.
4
+ * Lives in the tunnel-creation / registry server process only.
5
+ */
6
+ export declare class TunnelReadinessCoordinator {
7
+ private waitersByUdid;
8
+ /** Clear readiness; new waiters block until the next {@link resolveReady}. */
9
+ markPending(udid: string): void;
10
+ /**
11
+ * Wait until {@link resolveReady} for `udid`, or reject after `waitMs`.
12
+ */
13
+ waitForReady(udid: string, waitMs: number): Promise<TunnelRegistryEntry>;
14
+ /** Unblock all waiters for `udid` with the published registry entry. */
15
+ resolveReady(udid: string, entry: TunnelRegistryEntry): void;
16
+ private removeWaiter;
17
+ }
18
+ //# sourceMappingURL=tunnel-readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-readiness.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQvD;;;GAGG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,aAAa,CAA+B;IAEpD,8EAA8E;IAC9E,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY/B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyBxE,wEAAwE;IACxE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAY5D,OAAO,CAAC,YAAY;CAYrB"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * In-process readiness coordination for long-poll GET /tunnels/:udid?waitMs=.
3
+ * Lives in the tunnel-creation / registry server process only.
4
+ */
5
+ export class TunnelReadinessCoordinator {
6
+ waitersByUdid = new Map();
7
+ /** Clear readiness; new waiters block until the next {@link resolveReady}. */
8
+ markPending(udid) {
9
+ const waiters = this.waitersByUdid.get(udid);
10
+ if (!waiters?.length) {
11
+ return;
12
+ }
13
+ for (const waiter of waiters) {
14
+ clearTimeout(waiter.timer);
15
+ waiter.reject(new Error(`Tunnel ${udid} is not ready`));
16
+ }
17
+ this.waitersByUdid.delete(udid);
18
+ }
19
+ /**
20
+ * Wait until {@link resolveReady} for `udid`, or reject after `waitMs`.
21
+ */
22
+ waitForReady(udid, waitMs) {
23
+ return new Promise((resolve, reject) => {
24
+ const timer = setTimeout(() => {
25
+ this.removeWaiter(udid, waiter);
26
+ reject(new Error('NOT_READY'));
27
+ }, waitMs);
28
+ const waiter = {
29
+ resolve: (entry) => {
30
+ clearTimeout(timer);
31
+ resolve(entry);
32
+ },
33
+ reject: (error) => {
34
+ clearTimeout(timer);
35
+ reject(error);
36
+ },
37
+ timer,
38
+ };
39
+ const list = this.waitersByUdid.get(udid) ?? [];
40
+ list.push(waiter);
41
+ this.waitersByUdid.set(udid, list);
42
+ });
43
+ }
44
+ /** Unblock all waiters for `udid` with the published registry entry. */
45
+ resolveReady(udid, entry) {
46
+ const waiters = this.waitersByUdid.get(udid);
47
+ if (!waiters?.length) {
48
+ return;
49
+ }
50
+ this.waitersByUdid.delete(udid);
51
+ for (const waiter of waiters) {
52
+ clearTimeout(waiter.timer);
53
+ waiter.resolve(entry);
54
+ }
55
+ }
56
+ removeWaiter(udid, target) {
57
+ const waiters = this.waitersByUdid.get(udid);
58
+ if (!waiters) {
59
+ return;
60
+ }
61
+ const next = waiters.filter((w) => w !== target);
62
+ if (next.length) {
63
+ this.waitersByUdid.set(udid, next);
64
+ }
65
+ else {
66
+ this.waitersByUdid.delete(udid);
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=tunnel-readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-readiness.js","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-readiness.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
- import type { TunnelRegistry } from '../types.js';
1
+ import type { TunnelRegistry, TunnelRegistryEntry } from '../types.js';
2
+ import { TunnelReadinessCoordinator } from './tunnel-readiness.js';
2
3
  export declare const DEFAULT_TUNNEL_REGISTRY_PORT = 42314;
4
+ export interface TunnelRegistryServerOptions {
5
+ readiness?: TunnelReadinessCoordinator;
6
+ /**
7
+ * Re-run RSD discover-and-close for `udid` and return the updated registry entry.
8
+ * Wired by tunnel-creation; required for POST refresh-services.
9
+ */
10
+ refreshServices?: (udid: string, entry: TunnelRegistryEntry) => Promise<TunnelRegistryEntry>;
11
+ }
3
12
  /**
4
13
  * Tunnel Registry Server - provides API endpoints for tunnel registry operations
5
14
  */
@@ -14,7 +23,16 @@ export declare class TunnelRegistryServer {
14
23
  * @param port - Port to listen on
15
24
  */
16
25
  private readonly dispatchRoute;
17
- constructor(tunnelsInfo: TunnelRegistry | undefined, port: number);
26
+ private readonly readiness;
27
+ private readonly refreshServices?;
28
+ constructor(tunnelsInfo: TunnelRegistry | undefined, port: number, options?: TunnelRegistryServerOptions);
29
+ /** Live registry object (mutated in place by tunnel-creation). */
30
+ getRegistry(): TunnelRegistry;
31
+ /** Publish a fully discovered tunnel entry and unblock long-poll waiters. */
32
+ upsertReadyEntry(udid: string, entry: TunnelRegistryEntry): void;
33
+ /** Remove a tunnel and mark readiness pending (e.g. upstream TLS death). */
34
+ removeTunnelEntry(udid: string): void;
35
+ markTunnelPending(udid: string): void;
18
36
  /**
19
37
  * Get tunnels from registry
20
38
  */
@@ -48,9 +66,10 @@ export declare class TunnelRegistryServer {
48
66
  */
49
67
  private getRegistryMetadata;
50
68
  /**
51
- * Handler for getting a tunnel by UDID
69
+ * Handler for getting a tunnel by UDID (optional ?waitMs= long-poll).
52
70
  */
53
71
  private getTunnelByUdid;
72
+ private refreshTunnelServices;
54
73
  /**
55
74
  * Handler for getting a tunnel by device ID
56
75
  */
@@ -74,5 +93,5 @@ export declare class TunnelRegistryServer {
74
93
  * @param port - Port to listen on
75
94
  * @returns The started TunnelRegistryServer instance
76
95
  */
77
- export declare function startTunnelRegistryServer(tunnelInfos: TunnelRegistry | undefined, port?: number): Promise<TunnelRegistryServer>;
96
+ export declare function startTunnelRegistryServer(tunnelInfos: TunnelRegistry | undefined, port?: number, options?: TunnelRegistryServerOptions): Promise<TunnelRegistryServer>;
78
97
  //# sourceMappingURL=tunnel-registry-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-registry-server.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-registry-server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,aAAa,CAAC;AASvE,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAQlD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,cAAc,CAAC;IACpC,OAAO,CAAC,QAAQ,CAOd;IAEF;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;gBAEU,WAAW,EAAE,cAAc,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM;IAKjE;;OAEG;IACH,OAAO,KAAK,OAAO,GAElB;IAED;;OAEG;IACH,OAAO,KAAK,QAAQ,GAOnB;IAED;;OAEG;IACH,OAAO,KAAK,YAAY,GAKvB;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,aAAa;IAY3B;;OAEG;YACW,mBAAmB;IAYjC;;OAEG;YACW,eAAe;IAwB7B;;OAEG;YACW,mBAAmB;IAgCjC;;OAEG;YACW,YAAY;IAqD1B;;OAEG;YACW,YAAY;IAoB1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAwCjC;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,cAAc,GAAG,SAAS,EACvC,IAAI,GAAE,MAAqC,GAC1C,OAAO,CAAC,oBAAoB,CAAC,CAY/B"}
1
+ {"version":3,"file":"tunnel-registry-server.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/tunnel-registry-server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAQnE,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAKlD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC;;;OAGG;IACH,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,mBAAmB,KACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnC;AAKD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,cAAc,CAAC;IACpC,OAAO,CAAC,QAAQ,CAOd;IAEF;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IAEF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAiD;gBAGhF,WAAW,EAAE,cAAc,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,2BAAgC;IAQ3C,kEAAkE;IAClE,WAAW,IAAI,cAAc;IAI7B,6EAA6E;IAC7E,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAQhE,4EAA4E;IAC5E,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,OAAO,KAAK,OAAO,GAElB;IAED;;OAEG;IACH,OAAO,KAAK,QAAQ,GAOnB;IAED;;OAEG;IACH,OAAO,KAAK,YAAY,GAKvB;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,aAAa;IAY3B;;OAEG;YACW,mBAAmB;IAYjC;;OAEG;YACW,eAAe;YAwCf,qBAAqB;IAgCnC;;OAEG;YACW,mBAAmB;IAgCjC;;OAEG;YACW,YAAY;IAqD1B;;OAEG;YACW,YAAY;IAoB1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAgDjC;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,cAAc,GAAG,SAAS,EACvC,IAAI,GAAE,MAAqC,EAC3C,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,oBAAoB,CAAC,CAY/B"}