@tapflowio/relay 0.17.0 → 0.18.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 (79) hide show
  1. package/dist/RelayServer.d.ts +50 -0
  2. package/dist/RelayServer.d.ts.map +1 -1
  3. package/dist/RelayServer.js +359 -84
  4. package/dist/RelayServer.js.map +1 -1
  5. package/dist/SessionManager.d.ts +43 -6
  6. package/dist/SessionManager.d.ts.map +1 -1
  7. package/dist/SessionManager.js +94 -8
  8. package/dist/SessionManager.js.map +1 -1
  9. package/dist/types.d.ts +5 -10
  10. package/dist/types.d.ts.map +1 -1
  11. package/package.json +5 -3
  12. package/public/assets/{AppCenter-BRmG2FEm.js → AppCenter-B3FO67aw.js} +1 -1
  13. package/public/assets/AppCenter-B3FO67aw.js.br +0 -0
  14. package/public/assets/{Default-DTr0wqds.js → Default-BlNUv5dw.js} +1 -1
  15. package/public/assets/Default-BlNUv5dw.js.br +0 -0
  16. package/public/assets/{Invite-DKsNh2GB.js → Invite-CKYFmy7S.js} +1 -1
  17. package/public/assets/Invite-CKYFmy7S.js.br +0 -0
  18. package/public/assets/{MacResources-CLDdcibL.js → MacResources-BK4VQnFc.js} +1 -1
  19. package/public/assets/MacResources-BK4VQnFc.js.br +0 -0
  20. package/public/assets/{NotFound-BtKq2uv6.js → NotFound-BMmi1paB.js} +1 -1
  21. package/public/assets/NotFound-BMmi1paB.js.br +0 -0
  22. package/public/assets/QASession-CVTlqW3d.js +125 -0
  23. package/public/assets/QASession-CVTlqW3d.js.br +0 -0
  24. package/public/assets/{ResetPassword-gp6hVQrf.js → ResetPassword-VPPBWzSI.js} +1 -1
  25. package/public/assets/ResetPassword-VPPBWzSI.js.br +0 -0
  26. package/public/assets/{Setup-DiG4Nbs7.js → Setup-CRdnCl41.js} +1 -1
  27. package/public/assets/Setup-CRdnCl41.js.br +0 -0
  28. package/public/assets/{Team-D1iwg2vL.js → Team-CBsjuUwh.js} +1 -1
  29. package/public/assets/Team-CBsjuUwh.js.br +0 -0
  30. package/public/assets/{Tokens-DGtE4Xcy.js → Tokens-CU9HB9WD.js} +1 -1
  31. package/public/assets/Tokens-CU9HB9WD.js.br +0 -0
  32. package/public/assets/alert-dialog-DWqGDQTB.js +1 -0
  33. package/public/assets/alert-dialog-DWqGDQTB.js.br +0 -0
  34. package/public/assets/{badge-CavXTq2x.js → badge-OToVq1dK.js} +1 -1
  35. package/public/assets/badge-OToVq1dK.js.br +0 -0
  36. package/public/assets/{build-format-BZV6gt41.js → build-format-B78hbKY9.js} +1 -1
  37. package/public/assets/build-format-B78hbKY9.js.br +3 -0
  38. package/public/assets/dialog-BxC9v2BL.js +11 -0
  39. package/public/assets/dialog-BxC9v2BL.js.br +0 -0
  40. package/public/assets/index-DXjMx9hQ.js +274 -0
  41. package/public/assets/index-DXjMx9hQ.js.br +0 -0
  42. package/public/assets/index-uGJGo6ac.css +1 -0
  43. package/public/assets/index-uGJGo6ac.css.br +0 -0
  44. package/public/assets/{pencil-BGrOEXS6.js → pencil-Cq64I9LV.js} +1 -1
  45. package/public/assets/pencil-Cq64I9LV.js.br +0 -0
  46. package/public/assets/{table-CqOA0Bb1.js → table-CbATN5Pi.js} +1 -1
  47. package/public/assets/table-CbATN5Pi.js.br +0 -0
  48. package/public/assets/tabs-BVumgDA4.js +1 -0
  49. package/public/assets/tabs-BVumgDA4.js.br +0 -0
  50. package/public/assets/{trash-2-CwlFrbEF.js → trash-2-CszwJHEh.js} +1 -1
  51. package/public/assets/trash-2-CszwJHEh.js.br +0 -0
  52. package/public/index.html +2 -2
  53. package/public/index.html.br +0 -0
  54. package/public/assets/AppCenter-BRmG2FEm.js.br +0 -0
  55. package/public/assets/Default-DTr0wqds.js.br +0 -0
  56. package/public/assets/Invite-DKsNh2GB.js.br +0 -0
  57. package/public/assets/MacResources-CLDdcibL.js.br +0 -0
  58. package/public/assets/NotFound-BtKq2uv6.js.br +0 -0
  59. package/public/assets/QASession-B_5aJ67l.js +0 -130
  60. package/public/assets/QASession-B_5aJ67l.js.br +0 -0
  61. package/public/assets/ResetPassword-gp6hVQrf.js.br +0 -0
  62. package/public/assets/Setup-DiG4Nbs7.js.br +0 -0
  63. package/public/assets/Team-D1iwg2vL.js.br +0 -0
  64. package/public/assets/Tokens-DGtE4Xcy.js.br +0 -0
  65. package/public/assets/alert-dialog-CXwkFlF3.js +0 -1
  66. package/public/assets/alert-dialog-CXwkFlF3.js.br +0 -0
  67. package/public/assets/badge-CavXTq2x.js.br +0 -0
  68. package/public/assets/build-format-BZV6gt41.js.br +0 -0
  69. package/public/assets/dialog-JbKwqqS0.js +0 -11
  70. package/public/assets/dialog-JbKwqqS0.js.br +0 -0
  71. package/public/assets/index-CBnxiD7-.js +0 -274
  72. package/public/assets/index-CBnxiD7-.js.br +0 -0
  73. package/public/assets/index-Ctx3_cYz.css +0 -1
  74. package/public/assets/index-Ctx3_cYz.css.br +0 -0
  75. package/public/assets/pencil-BGrOEXS6.js.br +0 -0
  76. package/public/assets/table-CqOA0Bb1.js.br +0 -0
  77. package/public/assets/tabs-BVBbhCFG.js +0 -1
  78. package/public/assets/tabs-BVBbhCFG.js.br +0 -0
  79. package/public/assets/trash-2-CwlFrbEF.js.br +0 -0
@@ -21,9 +21,12 @@ export declare class RelayServer {
21
21
  private droppers;
22
22
  private idrRequesters;
23
23
  private wsRoles;
24
+ private agentHolds;
25
+ private stopping;
24
26
  private wsExternal;
25
27
  private readonly backpressureBytes;
26
28
  private readonly screenshotTimeoutMs;
29
+ private readonly agentGraceMs;
27
30
  private readonly corsAllowed;
28
31
  private warnedProxyMisconfig;
29
32
  private pendingScreenshots;
@@ -43,6 +46,7 @@ export declare class RelayServer {
43
46
  cert: string;
44
47
  key: string;
45
48
  };
49
+ agentGraceMs?: number;
46
50
  });
47
51
  private registerRoutes;
48
52
  pushLog(msg: string): void;
@@ -60,10 +64,56 @@ export declare class RelayServer {
60
64
  private handleConnection;
61
65
  private route;
62
66
  private handleAgentResources;
67
+ /**
68
+ * Every message the relay *originates* goes through here. The union checks the shape where the
69
+ * literal is written — a mistyped `type`, a missing field or one that does not belong are all
70
+ * compile errors — and the readyState guard replaces the check that was repeated (and sometimes
71
+ * omitted) at each call site.
72
+ *
73
+ * Messages the relay merely *forwards* do not use this: they are re-serialised unchanged, so
74
+ * they keep their inbound type and there is nothing new to check.
75
+ */
76
+ private sendTo;
77
+ /**
78
+ * Settle every in-flight screenshot / UI-tree request belonging to these sessions. Both callers
79
+ * are moments where the agent that was going to answer them no longer exists — it disconnected,
80
+ * or it restarted and its session moved to the new process. Left alone these reject on their own
81
+ * timeout, minutes later, having told the caller nothing in between.
82
+ */
83
+ private rejectPending;
84
+ /**
85
+ * The agent's socket went away. Keep its sessions and wait for that agent to come back, instead
86
+ * of ending them here — a restarting agent registers about a second later, and until #426 stage 3
87
+ * the close always won that race, so a restart cost the tester their place.
88
+ *
89
+ * The sessions stay exactly where they are. They are NOT moved to a holding structure of their
90
+ * own: `getAgentSocketsByIdentity` finds the returning agent's previous socket by walking
91
+ * `sessions` and reading `agentSocket`, so a session parked anywhere else is a session that can
92
+ * never be reclaimed.
93
+ *
94
+ * @returns whether this was an agent socket, matching `evictAgentSocket`'s contract — the close
95
+ * handler uses it to decide whether to keep looking.
96
+ */
97
+ private holdAgentSocket;
98
+ /** Stop waiting on a socket, whether or not anything was reclaimed from it. */
99
+ private releaseHold;
100
+ /**
101
+ * @param cause `'disconnect'` — the socket closed. `'replaced'` — the same agent re-registered
102
+ * and this is its previous socket. Only affects the log line: a restart otherwise reads as a
103
+ * crash followed by a recovery, which is not what happened.
104
+ */
63
105
  private evictAgentSocket;
64
106
  private handleAgentRegister;
65
107
  private handleSessionStart;
108
+ /** Relay looks up file_path from DB and enriches it for the agent.
109
+ *
110
+ * Every exit carries the request's `sessionId`, including the failures. A dashboard viewer holds
111
+ * one session per socket, so an uncorrelated error still lands somewhere sensible — but an MCP
112
+ * caller waits for the reply matching its own sessionId, so anything else is indistinguishable
113
+ * from silence and it waits out the deadline (#445). `Session not found` is app-specific for the
114
+ * same reason: a generic `error` cannot be correlated by construction. */
66
115
  private handleBrowserAppInstall;
116
+ /** Relay looks up bundle_id from DB. Same correlation rules as `handleBrowserAppInstall`. */
67
117
  private handleBrowserAppLaunch;
68
118
  private handleGetScreenshot;
69
119
  private handleGetUITree;
@@ -1 +1 @@
1
- {"version":3,"file":"RelayServer.d.ts","sourceRoot":"","sources":["../src/RelayServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RelayServer.d.ts","sourceRoot":"","sources":["../src/RelayServer.ts"],"names":[],"mappings":"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"}