@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.
- package/dist/RelayServer.d.ts +6 -0
- package/dist/RelayServer.d.ts.map +1 -1
- package/dist/RelayServer.js +48 -3
- package/dist/RelayServer.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +98 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/launchDefaults.d.ts +25 -0
- package/dist/lib/launchDefaults.d.ts.map +1 -0
- package/dist/lib/launchDefaults.js +41 -0
- package/dist/lib/launchDefaults.js.map +1 -0
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/package.json +3 -3
- package/public/assets/{AISessionWatch-BSBkpTom.js → AISessionWatch-DxsyhjAy.js} +1 -1
- package/public/assets/AISessionWatch-DxsyhjAy.js.br +0 -0
- package/public/assets/AISessionWatch-DxsyhjAy.js.gz +0 -0
- package/public/assets/{AppCenter-DD_6LQx-.js → AppCenter-CZMTgfBh.js} +1 -1
- package/public/assets/AppCenter-CZMTgfBh.js.br +0 -0
- package/public/assets/AppCenter-CZMTgfBh.js.gz +0 -0
- package/public/assets/{Default-CQ3Ae2mK.js → Default-DCk7wCIg.js} +1 -1
- package/public/assets/Default-DCk7wCIg.js.br +0 -0
- package/public/assets/Default-DCk7wCIg.js.gz +0 -0
- package/public/assets/{Invite-D1uNMm0-.js → Invite-BNgu8qb9.js} +1 -1
- package/public/assets/Invite-BNgu8qb9.js.br +0 -0
- package/public/assets/Invite-BNgu8qb9.js.gz +0 -0
- package/public/assets/{MacResources-D2UeRbKL.js → MacResources-B26lSN5B.js} +1 -1
- package/public/assets/MacResources-B26lSN5B.js.br +0 -0
- package/public/assets/MacResources-B26lSN5B.js.gz +0 -0
- package/public/assets/{QASession-d0eOjXXo.js → QASession-Rin1Ol-2.js} +1 -1
- package/public/assets/QASession-Rin1Ol-2.js.br +0 -0
- package/public/assets/QASession-Rin1Ol-2.js.gz +0 -0
- package/public/assets/{ResetPassword-B-4Uyfwr.js → ResetPassword-CQsALVBn.js} +1 -1
- package/public/assets/ResetPassword-CQsALVBn.js.br +0 -0
- package/public/assets/ResetPassword-CQsALVBn.js.gz +0 -0
- package/public/assets/{RunDetail-C50RjsuM.js → RunDetail-D0JKuXAS.js} +1 -1
- package/public/assets/RunDetail-D0JKuXAS.js.br +0 -0
- package/public/assets/RunDetail-D0JKuXAS.js.gz +0 -0
- package/public/assets/{Runs-A7RcDLgO.js → Runs-DSHpDs0m.js} +1 -1
- package/public/assets/Runs-DSHpDs0m.js.br +0 -0
- package/public/assets/Runs-DSHpDs0m.js.gz +0 -0
- package/public/assets/{Setup-DK6TZbwh.js → Setup-4-HC1rwb.js} +1 -1
- package/public/assets/Setup-4-HC1rwb.js.br +0 -0
- package/public/assets/Setup-4-HC1rwb.js.gz +0 -0
- package/public/assets/{Team-VoGput2p.js → Team-CgJM95TR.js} +1 -1
- package/public/assets/Team-CgJM95TR.js.br +0 -0
- package/public/assets/Team-CgJM95TR.js.gz +0 -0
- package/public/assets/{Tokens-qkcJgunR.js → Tokens-D2wbiDVG.js} +1 -1
- package/public/assets/Tokens-D2wbiDVG.js.br +0 -0
- package/public/assets/Tokens-D2wbiDVG.js.gz +0 -0
- package/public/assets/{aiSession-U7UqgdSb.js → aiSession-DE80E1QU.js} +1 -1
- package/public/assets/aiSession-DE80E1QU.js.br +0 -0
- package/public/assets/aiSession-DE80E1QU.js.gz +0 -0
- package/public/assets/{alert-dialog-C0mRms8g.js → alert-dialog-nxQTqXgk.js} +1 -1
- package/public/assets/alert-dialog-nxQTqXgk.js.br +0 -0
- package/public/assets/alert-dialog-nxQTqXgk.js.gz +0 -0
- package/public/assets/{badge-BjEnOmb0.js → badge-DM1m4CLq.js} +1 -1
- package/public/assets/badge-DM1m4CLq.js.br +0 -0
- package/public/assets/badge-DM1m4CLq.js.gz +0 -0
- package/public/assets/{dialog-Cugbp1C4.js → dialog-CTc84wr4.js} +1 -1
- package/public/assets/dialog-CTc84wr4.js.br +0 -0
- package/public/assets/dialog-CTc84wr4.js.gz +0 -0
- package/public/assets/{field-hint-qmBa0qqN.js → field-hint-xptj_gfn.js} +1 -1
- package/public/assets/field-hint-xptj_gfn.js.br +0 -0
- package/public/assets/field-hint-xptj_gfn.js.gz +0 -0
- package/public/assets/{index-C_3Q51YJ.js → index-2zL1a5_0.js} +3 -3
- package/public/assets/index-2zL1a5_0.js.br +0 -0
- package/public/assets/index-2zL1a5_0.js.gz +0 -0
- package/public/assets/{list-view-CyM0QUaH.js → list-view-BzI8tLvX.js} +1 -1
- package/public/assets/list-view-BzI8tLvX.js.br +0 -0
- package/public/assets/list-view-BzI8tLvX.js.gz +0 -0
- package/public/assets/{pencil-DUZRZB3S.js → pencil-CEWs8Of9.js} +1 -1
- package/public/assets/pencil-CEWs8Of9.js.br +0 -0
- package/public/assets/pencil-CEWs8Of9.js.gz +0 -0
- package/public/assets/{play-Z1L2Eb91.js → play-Dab2J3Tw.js} +1 -1
- package/public/assets/play-Dab2J3Tw.js.br +0 -0
- package/public/assets/play-Dab2J3Tw.js.gz +0 -0
- package/public/assets/{search-input-B0s9mzRt.js → search-input-BK7cFT1m.js} +1 -1
- package/public/assets/search-input-BK7cFT1m.js.br +0 -0
- package/public/assets/search-input-BK7cFT1m.js.gz +0 -0
- package/public/assets/{select-CHbE6M4S.js → select-BH7E2Q0r.js} +1 -1
- package/public/assets/select-BH7E2Q0r.js.br +0 -0
- package/public/assets/select-BH7E2Q0r.js.gz +0 -0
- package/public/assets/{slider-tyb3JvL2.js → slider-B4sPZi8m.js} +1 -1
- package/public/assets/slider-B4sPZi8m.js.br +0 -0
- package/public/assets/slider-B4sPZi8m.js.gz +0 -0
- package/public/assets/{tabs-Bf7ou-eS.js → tabs-CYoB-S2t.js} +1 -1
- package/public/assets/tabs-CYoB-S2t.js.br +0 -0
- package/public/assets/tabs-CYoB-S2t.js.gz +0 -0
- package/public/assets/{tech-label-KAwM5qZ_.js → tech-label-fz5PvoAL.js} +1 -1
- package/public/assets/tech-label-fz5PvoAL.js.br +3 -0
- package/public/assets/tech-label-fz5PvoAL.js.gz +0 -0
- package/public/assets/{trash-HEJmY7DQ.js → trash-CZ-V9h2G.js} +1 -1
- package/public/assets/trash-CZ-V9h2G.js.br +0 -0
- package/public/assets/trash-CZ-V9h2G.js.gz +0 -0
- package/public/assets/{video-DdHH0Q0l.js → video-CilstoqV.js} +1 -1
- package/public/assets/video-CilstoqV.js.br +0 -0
- package/public/assets/video-CilstoqV.js.gz +0 -0
- package/public/index.html +1 -1
- package/public/index.html.br +0 -0
- package/public/index.html.gz +0 -0
- package/public/assets/AISessionWatch-BSBkpTom.js.br +0 -0
- package/public/assets/AISessionWatch-BSBkpTom.js.gz +0 -0
- package/public/assets/AppCenter-DD_6LQx-.js.br +0 -0
- package/public/assets/AppCenter-DD_6LQx-.js.gz +0 -0
- package/public/assets/Default-CQ3Ae2mK.js.br +0 -0
- package/public/assets/Default-CQ3Ae2mK.js.gz +0 -0
- package/public/assets/Invite-D1uNMm0-.js.br +0 -0
- package/public/assets/Invite-D1uNMm0-.js.gz +0 -0
- package/public/assets/MacResources-D2UeRbKL.js.br +0 -0
- package/public/assets/MacResources-D2UeRbKL.js.gz +0 -0
- package/public/assets/QASession-d0eOjXXo.js.br +0 -0
- package/public/assets/QASession-d0eOjXXo.js.gz +0 -0
- package/public/assets/ResetPassword-B-4Uyfwr.js.br +0 -0
- package/public/assets/ResetPassword-B-4Uyfwr.js.gz +0 -0
- package/public/assets/RunDetail-C50RjsuM.js.br +0 -0
- package/public/assets/RunDetail-C50RjsuM.js.gz +0 -0
- package/public/assets/Runs-A7RcDLgO.js.br +0 -0
- package/public/assets/Runs-A7RcDLgO.js.gz +0 -0
- package/public/assets/Setup-DK6TZbwh.js.br +0 -0
- package/public/assets/Setup-DK6TZbwh.js.gz +0 -0
- package/public/assets/Team-VoGput2p.js.br +0 -0
- package/public/assets/Team-VoGput2p.js.gz +0 -0
- package/public/assets/Tokens-qkcJgunR.js.br +0 -0
- package/public/assets/Tokens-qkcJgunR.js.gz +0 -0
- package/public/assets/aiSession-U7UqgdSb.js.br +0 -0
- package/public/assets/aiSession-U7UqgdSb.js.gz +0 -0
- package/public/assets/alert-dialog-C0mRms8g.js.br +0 -0
- package/public/assets/alert-dialog-C0mRms8g.js.gz +0 -0
- package/public/assets/badge-BjEnOmb0.js.br +0 -0
- package/public/assets/badge-BjEnOmb0.js.gz +0 -0
- package/public/assets/dialog-Cugbp1C4.js.br +0 -0
- package/public/assets/dialog-Cugbp1C4.js.gz +0 -0
- package/public/assets/field-hint-qmBa0qqN.js.br +0 -0
- package/public/assets/field-hint-qmBa0qqN.js.gz +0 -0
- package/public/assets/index-C_3Q51YJ.js.br +0 -0
- package/public/assets/index-C_3Q51YJ.js.gz +0 -0
- package/public/assets/list-view-CyM0QUaH.js.br +0 -0
- package/public/assets/list-view-CyM0QUaH.js.gz +0 -0
- package/public/assets/pencil-DUZRZB3S.js.br +0 -0
- package/public/assets/pencil-DUZRZB3S.js.gz +0 -0
- package/public/assets/play-Z1L2Eb91.js.br +0 -0
- package/public/assets/play-Z1L2Eb91.js.gz +0 -0
- package/public/assets/search-input-B0s9mzRt.js.br +0 -0
- package/public/assets/search-input-B0s9mzRt.js.gz +0 -0
- package/public/assets/select-CHbE6M4S.js.br +0 -0
- package/public/assets/select-CHbE6M4S.js.gz +0 -0
- package/public/assets/slider-tyb3JvL2.js.br +0 -0
- package/public/assets/slider-tyb3JvL2.js.gz +0 -0
- package/public/assets/tabs-Bf7ou-eS.js.br +0 -0
- package/public/assets/tabs-Bf7ou-eS.js.gz +0 -0
- package/public/assets/tech-label-KAwM5qZ_.js.br +0 -0
- package/public/assets/tech-label-KAwM5qZ_.js.gz +0 -0
- package/public/assets/trash-HEJmY7DQ.js.br +0 -0
- package/public/assets/trash-HEJmY7DQ.js.gz +0 -0
- package/public/assets/video-DdHH0Q0l.js.br +0 -0
- package/public/assets/video-DdHH0Q0l.js.gz +0 -0
package/dist/RelayServer.d.ts
CHANGED
|
@@ -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":"AAaA,OAAO,EAA8E,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAiBzI,OAAO,EAA4D,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAyBjH,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;AAoFpD;;;;;;;;;;;;;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;AA6CD,qBAAa,WAAW;
|
|
1
|
+
{"version":3,"file":"RelayServer.d.ts","sourceRoot":"","sources":["../src/RelayServer.ts"],"names":[],"mappings":"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"}
|
package/dist/RelayServer.js
CHANGED
|
@@ -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
|
}
|