@tapflowio/relay 0.27.0 → 0.28.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 (266) hide show
  1. package/dist/RelayServer.d.ts +74 -0
  2. package/dist/RelayServer.d.ts.map +1 -1
  3. package/dist/RelayServer.js +482 -43
  4. package/dist/RelayServer.js.map +1 -1
  5. package/dist/SessionManager.d.ts +63 -2
  6. package/dist/SessionManager.d.ts.map +1 -1
  7. package/dist/SessionManager.js +123 -1
  8. package/dist/SessionManager.js.map +1 -1
  9. package/dist/api/apps.d.ts +2 -1
  10. package/dist/api/apps.d.ts.map +1 -1
  11. package/dist/api/apps.js +20 -7
  12. package/dist/api/apps.js.map +1 -1
  13. package/dist/api/builds.d.ts +2 -1
  14. package/dist/api/builds.d.ts.map +1 -1
  15. package/dist/api/builds.js +23 -45
  16. package/dist/api/builds.js.map +1 -1
  17. package/dist/api/comments.d.ts.map +1 -1
  18. package/dist/api/comments.js +5 -7
  19. package/dist/api/comments.js.map +1 -1
  20. package/dist/api/invitations.d.ts.map +1 -1
  21. package/dist/api/invitations.js +3 -0
  22. package/dist/api/invitations.js.map +1 -1
  23. package/dist/api/profile.d.ts.map +1 -1
  24. package/dist/api/profile.js +28 -9
  25. package/dist/api/profile.js.map +1 -1
  26. package/dist/api/recordings.d.ts.map +1 -1
  27. package/dist/api/recordings.js +5 -6
  28. package/dist/api/recordings.js.map +1 -1
  29. package/dist/api/runVideos.d.ts +85 -0
  30. package/dist/api/runVideos.d.ts.map +1 -0
  31. package/dist/api/runVideos.js +494 -0
  32. package/dist/api/runVideos.js.map +1 -0
  33. package/dist/api/runs.d.ts +77 -0
  34. package/dist/api/runs.d.ts.map +1 -0
  35. package/dist/api/runs.js +579 -0
  36. package/dist/api/runs.js.map +1 -0
  37. package/dist/api/settings.d.ts +1 -1
  38. package/dist/api/settings.d.ts.map +1 -1
  39. package/dist/api/settings.js +67 -10
  40. package/dist/api/settings.js.map +1 -1
  41. package/dist/db.d.ts +2 -0
  42. package/dist/db.d.ts.map +1 -1
  43. package/dist/db.js +4 -0
  44. package/dist/db.js.map +1 -1
  45. package/dist/lib/buildDeletion.d.ts +21 -0
  46. package/dist/lib/buildDeletion.d.ts.map +1 -0
  47. package/dist/lib/buildDeletion.js +58 -0
  48. package/dist/lib/buildDeletion.js.map +1 -0
  49. package/dist/lib/clientAddress.d.ts +12 -0
  50. package/dist/lib/clientAddress.d.ts.map +1 -1
  51. package/dist/lib/clientAddress.js +22 -0
  52. package/dist/lib/clientAddress.js.map +1 -1
  53. package/dist/lib/uploads.d.ts +13 -0
  54. package/dist/lib/uploads.d.ts.map +1 -1
  55. package/dist/lib/uploads.js +41 -0
  56. package/dist/lib/uploads.js.map +1 -1
  57. package/dist/lib/watchActions.d.ts +10 -0
  58. package/dist/lib/watchActions.d.ts.map +1 -0
  59. package/dist/lib/watchActions.js +27 -0
  60. package/dist/lib/watchActions.js.map +1 -0
  61. package/dist/middleware/auth.d.ts +1 -0
  62. package/dist/middleware/auth.d.ts.map +1 -1
  63. package/dist/middleware/auth.js +1 -1
  64. package/dist/middleware/auth.js.map +1 -1
  65. package/dist/migrations/015_flow_runs.sql +59 -0
  66. package/dist/migrations/016_flow_run_videos.sql +51 -0
  67. package/dist/router.d.ts +5 -0
  68. package/dist/router.d.ts.map +1 -1
  69. package/dist/router.js +24 -0
  70. package/dist/router.js.map +1 -1
  71. package/package.json +9 -9
  72. package/public/assets/AISessionWatch-Bxew762e.js +36 -0
  73. package/public/assets/AISessionWatch-Bxew762e.js.br +0 -0
  74. package/public/assets/AISessionWatch-Bxew762e.js.gz +0 -0
  75. package/public/assets/AndroidDeviceScreen-C55msKfh.js +35 -0
  76. package/public/assets/AndroidDeviceScreen-C55msKfh.js.br +0 -0
  77. package/public/assets/AndroidDeviceScreen-C55msKfh.js.gz +0 -0
  78. package/public/assets/AppCenter-93hnrrdy.js +26 -0
  79. package/public/assets/AppCenter-93hnrrdy.js.br +0 -0
  80. package/public/assets/AppCenter-93hnrrdy.js.gz +0 -0
  81. package/public/assets/Default-BhgcUKBm.js +6 -0
  82. package/public/assets/Default-BhgcUKBm.js.br +0 -0
  83. package/public/assets/Default-BhgcUKBm.js.gz +0 -0
  84. package/public/assets/Invite-DQBwLaOl.js +1 -0
  85. package/public/assets/Invite-DQBwLaOl.js.br +0 -0
  86. package/public/assets/Invite-DQBwLaOl.js.gz +0 -0
  87. package/public/assets/MacResources-D4LMGxgV.js +1 -0
  88. package/public/assets/MacResources-D4LMGxgV.js.br +0 -0
  89. package/public/assets/MacResources-D4LMGxgV.js.gz +0 -0
  90. package/public/assets/{NotFound-wHOnT2Fl.js → NotFound-DVq_rCKc.js} +1 -1
  91. package/public/assets/NotFound-DVq_rCKc.js.br +0 -0
  92. package/public/assets/NotFound-DVq_rCKc.js.gz +0 -0
  93. package/public/assets/QASession-Dnuq0yrN.js +81 -0
  94. package/public/assets/QASession-Dnuq0yrN.js.br +0 -0
  95. package/public/assets/QASession-Dnuq0yrN.js.gz +0 -0
  96. package/public/assets/ResetPassword-inTbbral.js +1 -0
  97. package/public/assets/ResetPassword-inTbbral.js.br +0 -0
  98. package/public/assets/ResetPassword-inTbbral.js.gz +0 -0
  99. package/public/assets/RunDetail-B3dw8_U0.js +16 -0
  100. package/public/assets/RunDetail-B3dw8_U0.js.br +0 -0
  101. package/public/assets/RunDetail-B3dw8_U0.js.gz +0 -0
  102. package/public/assets/Runs-DqZl9Y6M.js +6 -0
  103. package/public/assets/Runs-DqZl9Y6M.js.br +0 -0
  104. package/public/assets/Runs-DqZl9Y6M.js.gz +0 -0
  105. package/public/assets/Setup-CPa_UWpa.js +1 -0
  106. package/public/assets/Setup-CPa_UWpa.js.br +0 -0
  107. package/public/assets/Setup-CPa_UWpa.js.gz +0 -0
  108. package/public/assets/Team-DZie8W7R.js +6 -0
  109. package/public/assets/Team-DZie8W7R.js.br +0 -0
  110. package/public/assets/Team-DZie8W7R.js.gz +0 -0
  111. package/public/assets/Tokens-u3-uRAwd.js +1 -0
  112. package/public/assets/Tokens-u3-uRAwd.js.br +0 -0
  113. package/public/assets/Tokens-u3-uRAwd.js.gz +0 -0
  114. package/public/assets/WatchedDevice-CpaKHa1x.js +1 -0
  115. package/public/assets/WatchedDevice-CpaKHa1x.js.br +0 -0
  116. package/public/assets/WatchedDevice-CpaKHa1x.js.gz +0 -0
  117. package/public/assets/aiSession-BsmDnyV1.js +31 -0
  118. package/public/assets/aiSession-BsmDnyV1.js.br +0 -0
  119. package/public/assets/aiSession-BsmDnyV1.js.gz +0 -0
  120. package/public/assets/alert-dialog-Bq_Ln5bp.js +1 -0
  121. package/public/assets/alert-dialog-Bq_Ln5bp.js.br +0 -0
  122. package/public/assets/alert-dialog-Bq_Ln5bp.js.gz +0 -0
  123. package/public/assets/{badge-B3vaBVIQ.js → badge-D-bt97WR.js} +1 -1
  124. package/public/assets/badge-D-bt97WR.js.br +0 -0
  125. package/public/assets/badge-D-bt97WR.js.gz +0 -0
  126. package/public/assets/build-format-ofd2iIzf.js +1 -0
  127. package/public/assets/build-format-ofd2iIzf.js.br +0 -0
  128. package/public/assets/build-format-ofd2iIzf.js.gz +0 -0
  129. package/public/assets/dialog-CtzPkg0O.js +1 -0
  130. package/public/assets/dialog-CtzPkg0O.js.br +0 -0
  131. package/public/assets/dialog-CtzPkg0O.js.gz +0 -0
  132. package/public/assets/field-hint-B774BIWK.js +1 -0
  133. package/public/assets/field-hint-B774BIWK.js.br +1 -0
  134. package/public/assets/field-hint-B774BIWK.js.gz +0 -0
  135. package/public/assets/index-D17hSi50.js +1 -0
  136. package/public/assets/index-D17hSi50.js.br +0 -0
  137. package/public/assets/index-D17hSi50.js.gz +0 -0
  138. package/public/assets/index-EPyP3g9A.css +1 -0
  139. package/public/assets/index-EPyP3g9A.css.br +0 -0
  140. package/public/assets/index-EPyP3g9A.css.gz +0 -0
  141. package/public/assets/index-cgl1yEKu.js +223 -0
  142. package/public/assets/index-cgl1yEKu.js.br +0 -0
  143. package/public/assets/index-cgl1yEKu.js.gz +0 -0
  144. package/public/assets/list-view-BcjDCJy5.js +1 -0
  145. package/public/assets/list-view-BcjDCJy5.js.br +0 -0
  146. package/public/assets/list-view-BcjDCJy5.js.gz +0 -0
  147. package/public/assets/{pencil-CycAOoC_.js → pencil-1XSs32nb.js} +2 -2
  148. package/public/assets/pencil-1XSs32nb.js.br +0 -0
  149. package/public/assets/pencil-1XSs32nb.js.gz +0 -0
  150. package/public/assets/play-DCvrorIC.js +6 -0
  151. package/public/assets/play-DCvrorIC.js.br +0 -0
  152. package/public/assets/play-DCvrorIC.js.gz +0 -0
  153. package/public/assets/resource-health-oWJ8hy9X.js +1 -0
  154. package/public/assets/resource-health-oWJ8hy9X.js.br +0 -0
  155. package/public/assets/resource-health-oWJ8hy9X.js.gz +0 -0
  156. package/public/assets/runs-CInQb6v1.js +1 -0
  157. package/public/assets/runs-CInQb6v1.js.br +0 -0
  158. package/public/assets/runs-CInQb6v1.js.gz +0 -0
  159. package/public/assets/search-input-CFWgLcKA.js +6 -0
  160. package/public/assets/search-input-CFWgLcKA.js.br +0 -0
  161. package/public/assets/search-input-CFWgLcKA.js.gz +0 -0
  162. package/public/assets/select-5ZtzWRYG.js +11 -0
  163. package/public/assets/select-5ZtzWRYG.js.br +0 -0
  164. package/public/assets/select-5ZtzWRYG.js.gz +0 -0
  165. package/public/assets/slider-DHuMDXcP.js +1 -0
  166. package/public/assets/slider-DHuMDXcP.js.br +0 -0
  167. package/public/assets/slider-DHuMDXcP.js.gz +0 -0
  168. package/public/assets/tabs-CmgV_sSI.js +1 -0
  169. package/public/assets/tabs-CmgV_sSI.js.br +0 -0
  170. package/public/assets/tabs-CmgV_sSI.js.gz +0 -0
  171. package/public/assets/tech-label-qLodPeUI.js +1 -0
  172. package/public/assets/tech-label-qLodPeUI.js.br +0 -0
  173. package/public/assets/tech-label-qLodPeUI.js.gz +0 -0
  174. package/public/assets/{trash-BXQnOI5U.js → trash-CXjB9oU1.js} +3 -3
  175. package/public/assets/trash-CXjB9oU1.js.br +0 -0
  176. package/public/assets/trash-CXjB9oU1.js.gz +0 -0
  177. package/public/assets/{useFocusAfterSwap-BY3N9f9v.js → useFocusAfterSwap-BdItkQCu.js} +1 -1
  178. package/public/assets/useFocusAfterSwap-BdItkQCu.js.br +0 -0
  179. package/public/assets/useFocusAfterSwap-BdItkQCu.js.gz +0 -0
  180. package/public/assets/useRelay-CES3I1Mt.js +1 -0
  181. package/public/assets/useRelay-CES3I1Mt.js.br +0 -0
  182. package/public/assets/useRelay-CES3I1Mt.js.gz +0 -0
  183. package/public/assets/useShownAfter-By1Yxysz.js +1 -0
  184. package/public/assets/useShownAfter-By1Yxysz.js.br +0 -0
  185. package/public/assets/useShownAfter-By1Yxysz.js.gz +0 -0
  186. package/public/assets/{vendor-charts-BykzUV2D.js → vendor-charts-BE7R_8yA.js} +2 -2
  187. package/public/assets/vendor-charts-BE7R_8yA.js.br +0 -0
  188. package/public/assets/vendor-charts-BE7R_8yA.js.gz +0 -0
  189. package/public/assets/{vendor-react-BlPSzrEe.js → vendor-react-DTSdA8m-.js} +4 -4
  190. package/public/assets/vendor-react-DTSdA8m-.js.br +0 -0
  191. package/public/assets/{vendor-react-BlPSzrEe.js.gz → vendor-react-DTSdA8m-.js.gz} +0 -0
  192. package/public/assets/{vendor-router-B_lVHrKl.js → vendor-router-B1pQim9Z.js} +3 -3
  193. package/public/assets/vendor-router-B1pQim9Z.js.br +0 -0
  194. package/public/assets/vendor-router-B1pQim9Z.js.gz +0 -0
  195. package/public/assets/video-CK2q3-0B.js +6 -0
  196. package/public/assets/video-CK2q3-0B.js.br +0 -0
  197. package/public/assets/video-CK2q3-0B.js.gz +0 -0
  198. package/public/index.html +18 -4
  199. package/public/index.html.br +0 -0
  200. package/public/index.html.gz +0 -0
  201. package/public/assets/AppCenter-BMdYtQbV.js +0 -26
  202. package/public/assets/AppCenter-BMdYtQbV.js.br +0 -0
  203. package/public/assets/AppCenter-BMdYtQbV.js.gz +0 -0
  204. package/public/assets/Default-0DHHVGaN.js +0 -1
  205. package/public/assets/Default-0DHHVGaN.js.br +0 -0
  206. package/public/assets/Default-0DHHVGaN.js.gz +0 -0
  207. package/public/assets/Invite-C0ZB_HiU.js +0 -1
  208. package/public/assets/Invite-C0ZB_HiU.js.br +0 -0
  209. package/public/assets/Invite-C0ZB_HiU.js.gz +0 -0
  210. package/public/assets/MacResources-DmY5pRV2.js +0 -1
  211. package/public/assets/MacResources-DmY5pRV2.js.br +0 -0
  212. package/public/assets/MacResources-DmY5pRV2.js.gz +0 -0
  213. package/public/assets/NotFound-wHOnT2Fl.js.br +0 -0
  214. package/public/assets/NotFound-wHOnT2Fl.js.gz +0 -0
  215. package/public/assets/QASession-2QogWEX7.js +0 -150
  216. package/public/assets/QASession-2QogWEX7.js.br +0 -0
  217. package/public/assets/QASession-2QogWEX7.js.gz +0 -0
  218. package/public/assets/ResetPassword-jNRuertx.js +0 -1
  219. package/public/assets/ResetPassword-jNRuertx.js.br +0 -0
  220. package/public/assets/ResetPassword-jNRuertx.js.gz +0 -0
  221. package/public/assets/Setup-CF_FN9Dt.js +0 -1
  222. package/public/assets/Setup-CF_FN9Dt.js.br +0 -0
  223. package/public/assets/Setup-CF_FN9Dt.js.gz +0 -0
  224. package/public/assets/Team-BbiyOGau.js +0 -6
  225. package/public/assets/Team-BbiyOGau.js.br +0 -0
  226. package/public/assets/Team-BbiyOGau.js.gz +0 -0
  227. package/public/assets/Tokens-CZo4sPTx.js +0 -1
  228. package/public/assets/Tokens-CZo4sPTx.js.br +0 -0
  229. package/public/assets/Tokens-CZo4sPTx.js.gz +0 -0
  230. package/public/assets/alert-dialog-DFz8G_zu.js +0 -1
  231. package/public/assets/alert-dialog-DFz8G_zu.js.br +0 -0
  232. package/public/assets/alert-dialog-DFz8G_zu.js.gz +0 -0
  233. package/public/assets/badge-B3vaBVIQ.js.br +0 -0
  234. package/public/assets/badge-B3vaBVIQ.js.gz +0 -0
  235. package/public/assets/build-format-dbQPU3A4.js +0 -11
  236. package/public/assets/build-format-dbQPU3A4.js.br +0 -0
  237. package/public/assets/build-format-dbQPU3A4.js.gz +0 -0
  238. package/public/assets/dialog-DeBPk-I3.js +0 -11
  239. package/public/assets/dialog-DeBPk-I3.js.br +0 -0
  240. package/public/assets/dialog-DeBPk-I3.js.gz +0 -0
  241. package/public/assets/field-hint-CMKmbVpy.js +0 -1
  242. package/public/assets/field-hint-CMKmbVpy.js.br +0 -0
  243. package/public/assets/field-hint-CMKmbVpy.js.gz +0 -0
  244. package/public/assets/index-B4w4Lh3e.js +0 -218
  245. package/public/assets/index-B4w4Lh3e.js.br +0 -0
  246. package/public/assets/index-B4w4Lh3e.js.gz +0 -0
  247. package/public/assets/index-CDWu0GQL.css +0 -1
  248. package/public/assets/index-CDWu0GQL.css.br +0 -0
  249. package/public/assets/index-CDWu0GQL.css.gz +0 -0
  250. package/public/assets/list-view-BvINA5t4.js +0 -1
  251. package/public/assets/list-view-BvINA5t4.js.br +0 -0
  252. package/public/assets/list-view-BvINA5t4.js.gz +0 -0
  253. package/public/assets/pencil-CycAOoC_.js.br +0 -0
  254. package/public/assets/pencil-CycAOoC_.js.gz +0 -0
  255. package/public/assets/resource-health-C1qSG3MK.js +0 -1
  256. package/public/assets/resource-health-C1qSG3MK.js.br +0 -0
  257. package/public/assets/resource-health-C1qSG3MK.js.gz +0 -0
  258. package/public/assets/trash-BXQnOI5U.js.br +0 -0
  259. package/public/assets/trash-BXQnOI5U.js.gz +0 -0
  260. package/public/assets/useFocusAfterSwap-BY3N9f9v.js.br +0 -0
  261. package/public/assets/useFocusAfterSwap-BY3N9f9v.js.gz +0 -0
  262. package/public/assets/vendor-charts-BykzUV2D.js.br +0 -0
  263. package/public/assets/vendor-charts-BykzUV2D.js.gz +0 -0
  264. package/public/assets/vendor-react-BlPSzrEe.js.br +0 -0
  265. package/public/assets/vendor-router-B_lVHrKl.js.br +0 -0
  266. package/public/assets/vendor-router-B_lVHrKl.js.gz +0 -0
@@ -59,11 +59,22 @@ export declare class RelayServer {
59
59
  private resourceBuffers;
60
60
  private logBuffer;
61
61
  private recordingsDir;
62
+ private runScreenshotsDir;
63
+ private runVideosDir;
62
64
  private purgeRecordingsTimer;
63
65
  private purgeOldResourcesTimer;
64
66
  private purgeBuildsTimer;
65
67
  private flushResourcesTimer;
66
68
  private heartbeatTimer;
69
+ /** When the last heartbeat sweep ran, by the same clock `isAlive` judges with. */
70
+ private lastSweepAt;
71
+ /** Names agents give at registration, kept apart from the session map so an agent with no sessions
72
+ * can still be named when its socket goes. */
73
+ private agentNames;
74
+ private releaseStallWatch;
75
+ /** Agent sockets whose close was already explained — ended by a sweep, or replaced by the same agent
76
+ * registering again — so the close handler does not log them as a fresh drop. */
77
+ private explainedCloses;
67
78
  /**
68
79
  * When each socket last answered a ping. WeakMap → no manual cleanup on close (GC handles it).
69
80
  *
@@ -98,6 +109,19 @@ export declare class RelayServer {
98
109
  private audioDropHandlers;
99
110
  private droppers;
100
111
  private idrRequesters;
112
+ /**
113
+ * **One keyframe-aware sender per watcher, never the session's.** The sender's `dropping` state lives in
114
+ * its closure, so sharing the holder's would let a slow watcher put the holder into drop-to-keyframe
115
+ * too — every P-frame to the holder discarded until the next IDR because someone else's link is slow.
116
+ * Keyed by socket, then session, because one socket can watch several sessions.
117
+ */
118
+ private watcherDroppers;
119
+ /**
120
+ * Whether this connection may watch: a cookie, or a remote PAT with `view` — decided once at the
121
+ * handshake, from the credential. **Not** an unauthenticated loopback socket: a page in any browser on
122
+ * the relay's Mac reaches loopback without a credential, and watching shows a device's screen.
123
+ */
124
+ private mayWatch;
101
125
  /** Unlike `idrRequesters` these hold a timer, which is why the value is not a bare closure — see
102
126
  * `forgetSessionState`. */
103
127
  private networkStateRequesters;
@@ -133,6 +157,7 @@ export declare class RelayServer {
133
157
  private readonly pendingBootTtlMs;
134
158
  private readonly corsAllowed;
135
159
  private warnedProxyMisconfig;
160
+ private warnedTrustedProxyWithoutXff;
136
161
  /** Agent identities already warned about a missing `build-download`. See `warnLegacyInstaller`. */
137
162
  private readonly warnedLegacyInstaller;
138
163
  private readonly buildTickets;
@@ -212,6 +237,10 @@ export declare class RelayServer {
212
237
  */
213
238
  private warnOrphanedAgentTokens;
214
239
  private runHeartbeat;
240
+ /** A sweep that runs late means this process was held, or the machine slept: the pongs it judges were
241
+ * never read, so its terminations say nothing about the clients. Same clock as `isAlive`. */
242
+ private noteLateSweep;
243
+ private pongAgeSeconds;
215
244
  /**
216
245
  * Injected into the handlers whose write can take access away — member update and removal, token
217
246
  * revocation, a password reset or change — and called after the write commits. The sweep re-derives
@@ -242,6 +271,10 @@ export declare class RelayServer {
242
271
  * negative beats 30 with one every cycle**, because a false negative here does not merely delay: it
243
272
  * hands a live tester's session to whoever asked next.
244
273
  */
274
+ private buildFileDirs;
275
+ /** Open sockets speaking for any of these owner keys. */
276
+ private openSocketsOf;
277
+ private readonly runHolders;
245
278
  private isAlive;
246
279
  updateTlsContext(material: {
247
280
  cert: string;
@@ -302,6 +335,12 @@ export declare class RelayServer {
302
335
  */
303
336
  private networkStateRequester;
304
337
  private remoteAddressOf;
338
+ /**
339
+ * Called on both doors — the WebSocket upgrade and every HTTP request — since `auth/init` and the logs
340
+ * route decide locality on the HTTP side. Not on the tunnel listener, where every request is remote
341
+ * whatever it carries.
342
+ */
343
+ private warnTrustedProxyWithoutXffOnce;
305
344
  private warnProxyMisconfigOnce;
306
345
  private handleConnection;
307
346
  /**
@@ -435,6 +474,41 @@ export declare class RelayServer {
435
474
  * L5d they carried none, and the clients' join waiters matched `sessionId === undefined || sessionId ===
436
475
  * mine` — with no such key the left half was always true, so any refusal resolved any pending join. */
437
476
  private handleSessionStart;
477
+ /**
478
+ * Admit `ws` as a read-only watcher, or say why not. The order of the refusals is the order a viewer
479
+ * can act on them: a connection that may never watch is told so before it learns anything about the
480
+ * session.
481
+ */
482
+ private handleWatchStart;
483
+ /** The keyframe-aware sender for one watcher of one session — see `watcherDroppers`. */
484
+ private watcherDropper;
485
+ private forgetWatcherDropper;
486
+ /**
487
+ * Forward an agent's frame to the session's watchers. **Only the messages that describe the device**
488
+ * call this — chrome, device info, postures, booting, ready — never a reply to something the holder
489
+ * asked. An ack, a clipboard payload or a network state is the holder's, and a watcher shown one would
490
+ * learn what the agent is doing on a channel it was never admitted to.
491
+ */
492
+ private forwardToWatchers;
493
+ /**
494
+ * What the holder just did, as its watchers are told it (A2): only for an input the relay passed on to the agent,
495
+ * so a refused one is never shown. **Built, never forwarded**: the raw `input:type` carries the text typed, and a
496
+ * watcher gets a count.
497
+ */
498
+ private tellWatchersInput;
499
+ private tellWatchersAction;
500
+ /** The relay-originated half of what watchers hear: holder left, agent away, agent rebound. */
501
+ private tellWatchers;
502
+ /** Who to show behind a holder: the signed-in user's email, or `local` for a loopback client with no
503
+ * credential. A label for people only — nothing reads it back. */
504
+ private holderLabel;
505
+ /**
506
+ * The dashboard page that watches a session — **only at an address a teammate's browser can open**, the
507
+ * gate invite links take (`forTeammates`). With no tunnel and no `relay.url` the only base this relay has
508
+ * is localhost, which is wrong for a client on another machine; the field is left out and the client
509
+ * builds the link from the address it dialled, which the person running it can always open.
510
+ */
511
+ private watchUrlField;
438
512
  /** Shut the device down because nobody is watching it any more. The idle timer's payload, hoisted out
439
513
  * of the close handler so the release loop there reads as one line per session. */
440
514
  private idleShutdown;
@@ -1 +1 @@
1
- {"version":3,"file":"RelayServer.d.ts","sourceRoot":"","sources":["../src/RelayServer.ts"],"names":[],"mappings":"AAuBA,OAAO,EAA4D,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAwBjH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQvD;AAGD;;gFAEgF;AAChF,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAC1C;;sGAEsG;AACtG,eAAO,MAAM,iCAAiC,MAAM,CAAA;AAsEpD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACnC,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAUhD;AAQD,eAAO,MAAM,sBAAsB,yEAAyE,CAAA;AAE5G;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKxD;AA0CD,qBAAa,WAAW;IA6KV,OAAO,CAAC,QAAQ,CAAC,OAAO;IA5KpC,OAAO,CAAC,UAAU,CAA4B;IAC9C;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,oBAAoB,CAA8C;IAC1E,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,cAAc,CAA8C;IACpE;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,UAAU,CAAmC;IACrD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,QAAQ,CAA2E;IAC3F,OAAO,CAAC,YAAY,CAAgC;IAEpD,OAAO,CAAC,iBAAiB,CAAgC;IAEzD,OAAO,CAAC,QAAQ,CAAyC;IAEzD,OAAO,CAAC,aAAa,CAAgC;IACrD;gCAC4B;IAC5B,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,OAAO,CAAuD;IACtE;uGACmG;IACnG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+D;IAC5F;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IACvE,wGAAwG;IACxG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8E;IACjH;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,+FAA+F;IAC/F,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwD;IAM5F,OAAO,CAAC,UAAU,CAAsD;IAIxE,OAAO,CAAC,QAAQ,CAAQ;IAGxB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC;6DACyD;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAEzC,OAAO,CAAC,oBAAoB,CAAQ;IACpC,mGAAmG;IACnG,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoB;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IACtD,OAAO,CAAC,kBAAkB,CAKtB;IACJ,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,cAAc,CAKlB;IACJ;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAK/B;IAEJ;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAKzB;gBAEyB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAmEpY,OAAO,CAAC,cAAc;IAiHtB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAO1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCtB,OAAO,CAAC,YAAY;IAyBpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCrB,OAAO;IAIP,wFAAwF;IACxF,aAAa;IAIb;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,YAAY;IAQpB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE7B;IAED,OAAO,CAAC,iBAAiB;IAsCzB,OAAO,CAAC,YAAY;IAMpB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO;IAYf,gBAAgB,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQ/D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,YAAY;IAiBpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,gBAAgB;IAuMxB;;;;;;;;;;OAUG;IACH;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAqElB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,KAAK;IAmbb,OAAO,CAAC,oBAAoB;IAc5B;;;;;;;;OAQG;IACH,OAAO,CAAC,yBAAyB;IAWjC,0GAA0G;IAC1G,OAAO,CAAC,uBAAuB;IAa/B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,MAAM;IAKd;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,OAAO;IAIf,iGAAiG;IACjG,OAAO,CAAC,YAAY;IASpB,oGAAoG;IACpG,OAAO,CAAC,UAAU;IAOlB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,eAAe;IAyCvB,+EAA+E;IAC/E,OAAO,CAAC,WAAW;IAOnB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAsCxB,OAAO,CAAC,mBAAmB;IA4G3B;;;;;;4GAMwG;IACxG,OAAO,CAAC,kBAAkB;IAyI1B;wFACoF;IACpF,OAAO,CAAC,YAAY;IAUpB;;;;;;;;;OASG;IACH,OAAO,CAAC,cAAc;IAYtB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,+BAA+B;IASvC;;;;;;;;;;gFAU4E;IAC5E,OAAO,CAAC,WAAW;IAInB;qGACiG;IACjG,OAAO,CAAC,OAAO;IAIf,2GAA2G;IAC3G,OAAO,CAAC,MAAM;IAId;;;;;;;;;;kDAU8C;IAC9C,OAAO,CAAC,WAAW;IASnB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,WAAW;IAiBnB;;;;uGAImG;IACnG,OAAO,CAAC,cAAc;IActB;;;;;0FAKsF;IACtF,OAAO,CAAC,gBAAgB;IAoCxB;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;;;;iDAM6C;IAC7C,OAAO,CAAC,WAAW;IAanB;;;;;;+EAM2E;IAC3E,OAAO,CAAC,uBAAuB;IA0E/B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,mBAAmB;IAS3B,6FAA6F;IAC7F,OAAO,CAAC,sBAAsB;YAoChB,mBAAmB;YAwDnB,eAAe;IAoD7B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,oBAAoB;YAed,aAAa;IA4C3B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,WAAW;CAkGpB"}
1
+ {"version":3,"file":"RelayServer.d.ts","sourceRoot":"","sources":["../src/RelayServer.ts"],"names":[],"mappings":"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"}