@tapflowio/relay 0.29.0 → 0.30.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 (162) hide show
  1. package/dist/RelayServer.d.ts +6 -0
  2. package/dist/RelayServer.d.ts.map +1 -1
  3. package/dist/RelayServer.js +48 -3
  4. package/dist/RelayServer.js.map +1 -1
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/config.d.ts +14 -0
  10. package/dist/lib/config.d.ts.map +1 -1
  11. package/dist/lib/config.js +98 -0
  12. package/dist/lib/config.js.map +1 -1
  13. package/dist/lib/launchDefaults.d.ts +25 -0
  14. package/dist/lib/launchDefaults.d.ts.map +1 -0
  15. package/dist/lib/launchDefaults.js +41 -0
  16. package/dist/lib/launchDefaults.js.map +1 -0
  17. package/dist/server.js +2 -2
  18. package/dist/server.js.map +1 -1
  19. package/package.json +3 -3
  20. package/public/assets/{AISessionWatch-BSBkpTom.js → AISessionWatch-DxsyhjAy.js} +1 -1
  21. package/public/assets/AISessionWatch-DxsyhjAy.js.br +0 -0
  22. package/public/assets/AISessionWatch-DxsyhjAy.js.gz +0 -0
  23. package/public/assets/{AppCenter-DD_6LQx-.js → AppCenter-CZMTgfBh.js} +1 -1
  24. package/public/assets/AppCenter-CZMTgfBh.js.br +0 -0
  25. package/public/assets/AppCenter-CZMTgfBh.js.gz +0 -0
  26. package/public/assets/{Default-CQ3Ae2mK.js → Default-DCk7wCIg.js} +1 -1
  27. package/public/assets/Default-DCk7wCIg.js.br +0 -0
  28. package/public/assets/Default-DCk7wCIg.js.gz +0 -0
  29. package/public/assets/{Invite-D1uNMm0-.js → Invite-BNgu8qb9.js} +1 -1
  30. package/public/assets/Invite-BNgu8qb9.js.br +0 -0
  31. package/public/assets/Invite-BNgu8qb9.js.gz +0 -0
  32. package/public/assets/{MacResources-D2UeRbKL.js → MacResources-B26lSN5B.js} +1 -1
  33. package/public/assets/MacResources-B26lSN5B.js.br +0 -0
  34. package/public/assets/MacResources-B26lSN5B.js.gz +0 -0
  35. package/public/assets/{QASession-d0eOjXXo.js → QASession-Rin1Ol-2.js} +1 -1
  36. package/public/assets/QASession-Rin1Ol-2.js.br +0 -0
  37. package/public/assets/QASession-Rin1Ol-2.js.gz +0 -0
  38. package/public/assets/{ResetPassword-B-4Uyfwr.js → ResetPassword-CQsALVBn.js} +1 -1
  39. package/public/assets/ResetPassword-CQsALVBn.js.br +0 -0
  40. package/public/assets/ResetPassword-CQsALVBn.js.gz +0 -0
  41. package/public/assets/{RunDetail-C50RjsuM.js → RunDetail-D0JKuXAS.js} +1 -1
  42. package/public/assets/RunDetail-D0JKuXAS.js.br +0 -0
  43. package/public/assets/RunDetail-D0JKuXAS.js.gz +0 -0
  44. package/public/assets/{Runs-A7RcDLgO.js → Runs-DSHpDs0m.js} +1 -1
  45. package/public/assets/Runs-DSHpDs0m.js.br +0 -0
  46. package/public/assets/Runs-DSHpDs0m.js.gz +0 -0
  47. package/public/assets/{Setup-DK6TZbwh.js → Setup-4-HC1rwb.js} +1 -1
  48. package/public/assets/Setup-4-HC1rwb.js.br +0 -0
  49. package/public/assets/Setup-4-HC1rwb.js.gz +0 -0
  50. package/public/assets/{Team-VoGput2p.js → Team-CgJM95TR.js} +1 -1
  51. package/public/assets/Team-CgJM95TR.js.br +0 -0
  52. package/public/assets/Team-CgJM95TR.js.gz +0 -0
  53. package/public/assets/{Tokens-qkcJgunR.js → Tokens-D2wbiDVG.js} +1 -1
  54. package/public/assets/Tokens-D2wbiDVG.js.br +0 -0
  55. package/public/assets/Tokens-D2wbiDVG.js.gz +0 -0
  56. package/public/assets/{aiSession-U7UqgdSb.js → aiSession-DE80E1QU.js} +1 -1
  57. package/public/assets/aiSession-DE80E1QU.js.br +0 -0
  58. package/public/assets/aiSession-DE80E1QU.js.gz +0 -0
  59. package/public/assets/{alert-dialog-C0mRms8g.js → alert-dialog-nxQTqXgk.js} +1 -1
  60. package/public/assets/alert-dialog-nxQTqXgk.js.br +0 -0
  61. package/public/assets/alert-dialog-nxQTqXgk.js.gz +0 -0
  62. package/public/assets/{badge-BjEnOmb0.js → badge-DM1m4CLq.js} +1 -1
  63. package/public/assets/badge-DM1m4CLq.js.br +0 -0
  64. package/public/assets/badge-DM1m4CLq.js.gz +0 -0
  65. package/public/assets/{dialog-Cugbp1C4.js → dialog-CTc84wr4.js} +1 -1
  66. package/public/assets/dialog-CTc84wr4.js.br +0 -0
  67. package/public/assets/dialog-CTc84wr4.js.gz +0 -0
  68. package/public/assets/{field-hint-qmBa0qqN.js → field-hint-xptj_gfn.js} +1 -1
  69. package/public/assets/field-hint-xptj_gfn.js.br +0 -0
  70. package/public/assets/field-hint-xptj_gfn.js.gz +0 -0
  71. package/public/assets/{index-C_3Q51YJ.js → index-2zL1a5_0.js} +3 -3
  72. package/public/assets/index-2zL1a5_0.js.br +0 -0
  73. package/public/assets/index-2zL1a5_0.js.gz +0 -0
  74. package/public/assets/{list-view-CyM0QUaH.js → list-view-BzI8tLvX.js} +1 -1
  75. package/public/assets/list-view-BzI8tLvX.js.br +0 -0
  76. package/public/assets/list-view-BzI8tLvX.js.gz +0 -0
  77. package/public/assets/{pencil-DUZRZB3S.js → pencil-CEWs8Of9.js} +1 -1
  78. package/public/assets/pencil-CEWs8Of9.js.br +0 -0
  79. package/public/assets/pencil-CEWs8Of9.js.gz +0 -0
  80. package/public/assets/{play-Z1L2Eb91.js → play-Dab2J3Tw.js} +1 -1
  81. package/public/assets/play-Dab2J3Tw.js.br +0 -0
  82. package/public/assets/play-Dab2J3Tw.js.gz +0 -0
  83. package/public/assets/{search-input-B0s9mzRt.js → search-input-BK7cFT1m.js} +1 -1
  84. package/public/assets/search-input-BK7cFT1m.js.br +0 -0
  85. package/public/assets/search-input-BK7cFT1m.js.gz +0 -0
  86. package/public/assets/{select-CHbE6M4S.js → select-BH7E2Q0r.js} +1 -1
  87. package/public/assets/select-BH7E2Q0r.js.br +0 -0
  88. package/public/assets/select-BH7E2Q0r.js.gz +0 -0
  89. package/public/assets/{slider-tyb3JvL2.js → slider-B4sPZi8m.js} +1 -1
  90. package/public/assets/slider-B4sPZi8m.js.br +0 -0
  91. package/public/assets/slider-B4sPZi8m.js.gz +0 -0
  92. package/public/assets/{tabs-Bf7ou-eS.js → tabs-CYoB-S2t.js} +1 -1
  93. package/public/assets/tabs-CYoB-S2t.js.br +0 -0
  94. package/public/assets/tabs-CYoB-S2t.js.gz +0 -0
  95. package/public/assets/{tech-label-KAwM5qZ_.js → tech-label-fz5PvoAL.js} +1 -1
  96. package/public/assets/tech-label-fz5PvoAL.js.br +3 -0
  97. package/public/assets/tech-label-fz5PvoAL.js.gz +0 -0
  98. package/public/assets/{trash-HEJmY7DQ.js → trash-CZ-V9h2G.js} +1 -1
  99. package/public/assets/trash-CZ-V9h2G.js.br +0 -0
  100. package/public/assets/trash-CZ-V9h2G.js.gz +0 -0
  101. package/public/assets/{video-DdHH0Q0l.js → video-CilstoqV.js} +1 -1
  102. package/public/assets/video-CilstoqV.js.br +0 -0
  103. package/public/assets/video-CilstoqV.js.gz +0 -0
  104. package/public/index.html +1 -1
  105. package/public/index.html.br +0 -0
  106. package/public/index.html.gz +0 -0
  107. package/public/assets/AISessionWatch-BSBkpTom.js.br +0 -0
  108. package/public/assets/AISessionWatch-BSBkpTom.js.gz +0 -0
  109. package/public/assets/AppCenter-DD_6LQx-.js.br +0 -0
  110. package/public/assets/AppCenter-DD_6LQx-.js.gz +0 -0
  111. package/public/assets/Default-CQ3Ae2mK.js.br +0 -0
  112. package/public/assets/Default-CQ3Ae2mK.js.gz +0 -0
  113. package/public/assets/Invite-D1uNMm0-.js.br +0 -0
  114. package/public/assets/Invite-D1uNMm0-.js.gz +0 -0
  115. package/public/assets/MacResources-D2UeRbKL.js.br +0 -0
  116. package/public/assets/MacResources-D2UeRbKL.js.gz +0 -0
  117. package/public/assets/QASession-d0eOjXXo.js.br +0 -0
  118. package/public/assets/QASession-d0eOjXXo.js.gz +0 -0
  119. package/public/assets/ResetPassword-B-4Uyfwr.js.br +0 -0
  120. package/public/assets/ResetPassword-B-4Uyfwr.js.gz +0 -0
  121. package/public/assets/RunDetail-C50RjsuM.js.br +0 -0
  122. package/public/assets/RunDetail-C50RjsuM.js.gz +0 -0
  123. package/public/assets/Runs-A7RcDLgO.js.br +0 -0
  124. package/public/assets/Runs-A7RcDLgO.js.gz +0 -0
  125. package/public/assets/Setup-DK6TZbwh.js.br +0 -0
  126. package/public/assets/Setup-DK6TZbwh.js.gz +0 -0
  127. package/public/assets/Team-VoGput2p.js.br +0 -0
  128. package/public/assets/Team-VoGput2p.js.gz +0 -0
  129. package/public/assets/Tokens-qkcJgunR.js.br +0 -0
  130. package/public/assets/Tokens-qkcJgunR.js.gz +0 -0
  131. package/public/assets/aiSession-U7UqgdSb.js.br +0 -0
  132. package/public/assets/aiSession-U7UqgdSb.js.gz +0 -0
  133. package/public/assets/alert-dialog-C0mRms8g.js.br +0 -0
  134. package/public/assets/alert-dialog-C0mRms8g.js.gz +0 -0
  135. package/public/assets/badge-BjEnOmb0.js.br +0 -0
  136. package/public/assets/badge-BjEnOmb0.js.gz +0 -0
  137. package/public/assets/dialog-Cugbp1C4.js.br +0 -0
  138. package/public/assets/dialog-Cugbp1C4.js.gz +0 -0
  139. package/public/assets/field-hint-qmBa0qqN.js.br +0 -0
  140. package/public/assets/field-hint-qmBa0qqN.js.gz +0 -0
  141. package/public/assets/index-C_3Q51YJ.js.br +0 -0
  142. package/public/assets/index-C_3Q51YJ.js.gz +0 -0
  143. package/public/assets/list-view-CyM0QUaH.js.br +0 -0
  144. package/public/assets/list-view-CyM0QUaH.js.gz +0 -0
  145. package/public/assets/pencil-DUZRZB3S.js.br +0 -0
  146. package/public/assets/pencil-DUZRZB3S.js.gz +0 -0
  147. package/public/assets/play-Z1L2Eb91.js.br +0 -0
  148. package/public/assets/play-Z1L2Eb91.js.gz +0 -0
  149. package/public/assets/search-input-B0s9mzRt.js.br +0 -0
  150. package/public/assets/search-input-B0s9mzRt.js.gz +0 -0
  151. package/public/assets/select-CHbE6M4S.js.br +0 -0
  152. package/public/assets/select-CHbE6M4S.js.gz +0 -0
  153. package/public/assets/slider-tyb3JvL2.js.br +0 -0
  154. package/public/assets/slider-tyb3JvL2.js.gz +0 -0
  155. package/public/assets/tabs-Bf7ou-eS.js.br +0 -0
  156. package/public/assets/tabs-Bf7ou-eS.js.gz +0 -0
  157. package/public/assets/tech-label-KAwM5qZ_.js.br +0 -0
  158. package/public/assets/tech-label-KAwM5qZ_.js.gz +0 -0
  159. package/public/assets/trash-HEJmY7DQ.js.br +0 -0
  160. package/public/assets/trash-HEJmY7DQ.js.gz +0 -0
  161. package/public/assets/video-DdHH0Q0l.js.br +0 -0
  162. package/public/assets/video-DdHH0Q0l.js.gz +0 -0
@@ -1,4 +1,5 @@
1
1
  import { type GateTiming } from './admission/HostBootGate.js';
2
+ import { type LaunchDefaults } from './lib/config.js';
2
3
  import { type TunnelRuntime } from './lib/publicUrl.js';
3
4
  export declare function isExternalAddress(addr: string): boolean;
4
5
  /** Exported for the re-join test, which pins both edges of this window rather than hardcoding 500 —
@@ -167,6 +168,8 @@ export declare class RelayServer {
167
168
  private warnedTrustedProxyWithoutXff;
168
169
  /** Agent identities already warned about a missing `build-download`. See `warnLegacyInstaller`. */
169
170
  private readonly warnedLegacyInstaller;
171
+ /** `<bundle id>:<what was left out>` already warned about. Bounded by the config's keys, two reasons each. */
172
+ private readonly warnedDroppedDefaults;
170
173
  private readonly buildTickets;
171
174
  private pendingScreenshots;
172
175
  private readonly uiTreeTimeoutMs;
@@ -224,6 +227,7 @@ export declare class RelayServer {
224
227
  evictionGraceMs?: number;
225
228
  tunnel?: TunnelRuntime;
226
229
  tunnelPort?: number;
230
+ launchDefaults?: LaunchDefaults;
227
231
  });
228
232
  private registerRoutes;
229
233
  pushLog(msg: string): void;
@@ -233,6 +237,8 @@ export declare class RelayServer {
233
237
  address(): string | import("net").AddressInfo | null;
234
238
  /** The tunnel listener's address, or null when this relay was given no `tunnelPort`. */
235
239
  tunnelAddress(): string | import("net").AddressInfo | null;
240
+ private warnDroppedDefaults;
241
+ private warnUnmatchedLaunchDefaults;
236
242
  /**
237
243
  * Migration 014 normalizes stored addresses but leaves alone any two that normalize to the same one —
238
244
  * rewriting them would break `UNIQUE(email)` and the migration with it. Each still signs in by its
@@ -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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"}
@@ -13,6 +13,7 @@ import { classifyBoot } from './admission/classifyBoot.js';
13
13
  import { hostKeyOf } from './admission/hostKey.js';
14
14
  import { chooseLease } from './admission/leaseChoice.js';
15
15
  import { directionOf, parseInbound, readyFacts } from '@tapflowio/protocol/validate';
16
+ import { compactLaunchOptions, launchOptionsProblem } from '@tapflowio/protocol/launch';
16
17
  import { Router, json } from './router.js';
17
18
  import { requireViewAuth, requireAuth, getAuth, verifyPat, touchPat, findPat, findUser } from './middleware/auth.js';
18
19
  import { AGENT_SCOPE, VIEW_SCOPE, WS_ACCESS_CHANGED_REASON, WS_AGENT_OWNER_REASON, WS_SCOPE_REASON, classifyConnection, isAffectedBy, revalidatePrincipal } from './lib/connectionAuth.js';
@@ -23,6 +24,7 @@ import { resolveCorsHeaders } from './lib/cors.js';
23
24
  import { isCsrfBlocked } from './lib/csrf.js';
24
25
  import { pickLanAddress, runningInContainer } from './lib/lanAddress.js';
25
26
  import { config, getJwtSecret } from './lib/config.js';
27
+ import { mergeLaunch, unmatchedLaunchKeys } from './lib/launchDefaults.js';
26
28
  import { forTeammates, resolveAgentRelayUrl, resolvePublicBaseUrl } from './lib/publicUrl.js';
27
29
  import { createTrailingRequester, systemTimerScheduler } from './lib/trailingRequester.js';
28
30
  import { getDb } from './db.js';
@@ -348,6 +350,8 @@ export class RelayServer {
348
350
  warnedTrustedProxyWithoutXff = false;
349
351
  /** Agent identities already warned about a missing `build-download`. See `warnLegacyInstaller`. */
350
352
  warnedLegacyInstaller = new Set();
353
+ /** `<bundle id>:<what was left out>` already warned about. Bounded by the config's keys, two reasons each. */
354
+ warnedDroppedDefaults = new Set();
351
355
  buildTickets = new BuildTicketStore();
352
356
  pendingScreenshots = new Map();
353
357
  uiTreeTimeoutMs;
@@ -597,6 +601,7 @@ export class RelayServer {
597
601
  getJwtSecret();
598
602
  this.warnOrphanedAgentTokens();
599
603
  this.warnDuplicateEmails();
604
+ this.warnUnmatchedLaunchDefaults();
600
605
  purgeExpiredRecordings(this.recordingsDir);
601
606
  this.purgeRecordingsTimer = setInterval(() => purgeExpiredRecordings(this.recordingsDir), 24 * 60 * 60 * 1000);
602
607
  this.purgeRecordingsTimer.unref();
@@ -737,6 +742,25 @@ export class RelayServer {
737
742
  tunnelAddress() {
738
743
  return this.tunnelServer?.address() ?? null;
739
744
  }
745
+ // Once per app and reason: an app shared by iOS and Android with an env default would otherwise warn on every
746
+ // Android launch.
747
+ warnDroppedDefaults(bundleId, dropped) {
748
+ const key = `${bundleId}:${dropped}`;
749
+ if (this.warnedDroppedDefaults.has(key))
750
+ return;
751
+ this.warnedDroppedDefaults.add(key);
752
+ logger.warn(dropped === 'all'
753
+ ? `${bundleId}: launched without its launch defaults — the device's tapflow agent is too old to pass them`
754
+ : `${bundleId}: launched without its env defaults — the device's tapflow agent cannot set an app's environment (Android, or an older agent)`);
755
+ }
756
+ warnUnmatchedLaunchDefaults() {
757
+ const keys = this.options.launchDefaults?.keys();
758
+ if (!keys)
759
+ return;
760
+ const uploaded = getDb().prepare('SELECT DISTINCT bundle_id FROM builds WHERE bundle_id IS NOT NULL').all().map((r) => r.bundle_id);
761
+ for (const warning of unmatchedLaunchKeys(keys, uploaded))
762
+ logger.warn(warning);
763
+ }
740
764
  /**
741
765
  * Migration 014 normalizes stored addresses but leaves alone any two that normalize to the same one —
742
766
  * rewriting them would break `UNIQUE(email)` and the migration with it. Each still signs in by its
@@ -1532,7 +1556,7 @@ export class RelayServer {
1532
1556
  this.sendTo(ws, {
1533
1557
  type: 'agents:listed',
1534
1558
  sessions: this.sessions.list(this.ownerOf(ws), (holder) => this.isAlive(holder), (group) => this.macAdmission(group)),
1535
- features: ['device-lease'],
1559
+ features: ['device-lease', 'launch-options'],
1536
1560
  });
1537
1561
  break;
1538
1562
  }
@@ -3498,7 +3522,7 @@ export class RelayServer {
3498
3522
  // fifth: a throw out of `getDb().prepare(…).get(…)` — SQLITE_BUSY, a closed db, I/O — unwinds to the
3499
3523
  // message-loop catch and answers nothing at all. Pre-existing and unchanged here, but "every exit
3500
3524
  // carries the request's id" would be false.
3501
- const fail = (message) => this.sendTo(ws, { type: 'app:launch-error', sessionId, requestId, message });
3525
+ const fail = (message, reason) => this.sendTo(ws, { type: 'app:launch-error', sessionId, requestId, message, ...(reason ? { reason } : {}) });
3502
3526
  const session = this.sessions.get(sessionId);
3503
3527
  if (!session)
3504
3528
  return fail('Session not found');
@@ -3517,13 +3541,34 @@ export class RelayServer {
3517
3541
  return fail('Bundle ID not available for this build');
3518
3542
  if (session.agentSocket.readyState !== WebSocket.OPEN)
3519
3543
  return fail('agent offline');
3544
+ // The door checked the shape; this is the same rule every producer applies, answered with the key and the reason.
3545
+ const problem = launchOptionsProblem({ arguments: msg.arguments, env: msg.env });
3546
+ if (problem)
3547
+ return fail(problem);
3548
+ const caller = compactLaunchOptions({ arguments: msg.arguments, env: msg.env });
3549
+ // An agent that predates the options ignores both fields and launches without them, then answers done.
3550
+ if (caller && !hasCapability(session.agentCapabilities, 'launch-options')) {
3551
+ return fail('This device\'s tapflow agent is too old to pass launch arguments. Update tapflow on the Mac running it', 'agent-outdated');
3552
+ }
3553
+ // `Object.hasOwn` is not needed: a Map holds only what the config named, whatever the uploaded id is called.
3554
+ const merged = mergeLaunch(this.options.launchDefaults?.get(build.bundle_id), caller, {
3555
+ options: hasCapability(session.agentCapabilities, 'launch-options'),
3556
+ env: hasCapability(session.agentCapabilities, 'launch-env'),
3557
+ });
3558
+ if (merged.dropped)
3559
+ this.warnDroppedDefaults(build.bundle_id, merged.dropped);
3560
+ // Each side passed on its own; together they can exceed the limits.
3561
+ const together = merged.options && caller ? launchOptionsProblem(merged.options) : null;
3562
+ if (together)
3563
+ return fail(`${together}, counting this app's launch defaults in tapflow.config.json`);
3564
+ const options = merged.options;
3520
3565
  // See `handleBrowserAppInstall` — the correlator rides across the rebuild, and only a test says the
3521
3566
  // value is the request's.
3522
3567
  this.sendTo(session.agentSocket, {
3523
3568
  type: 'app:launch',
3524
3569
  sessionId,
3525
3570
  requestId,
3526
- payload: { bundleId: build.bundle_id },
3571
+ payload: { bundleId: build.bundle_id, ...options, ...(merged.defaultsOnly ? { defaultsOnly: true } : {}) },
3527
3572
  });
3528
3573
  this.tellWatchersAction(sessionId, { kind: 'launch' });
3529
3574
  }