@xenon-device-management/xenon 2.16.0 → 2.17.1
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/README.md +2 -2
- package/lib/package.json +2 -3
- package/lib/public/assets/{AnnotationOverlay-2W4JvEyZ.js → AnnotationOverlay-CB8njQvS.js} +1 -1
- package/lib/public/assets/{ApiKeyGate-GmckX_7r.js → ApiKeyGate-B-804QBS.js} +1 -1
- package/lib/public/assets/DeviceMosaicView-BsDvfjR1.js +2 -0
- package/lib/public/assets/{EmptyState-7hETKEWb.js → EmptyState-WzLw1cEV.js} +1 -1
- package/lib/public/assets/{FieldGroup-GOgssFEP.js → FieldGroup-CaQNXgcE.js} +1 -1
- package/lib/public/assets/{FilterMenu-Yvf6RGMd.js → FilterMenu-C9gAiypL.js} +1 -1
- package/lib/public/assets/{Menu-KrPnfdsf.js → Menu-CfTti3rw.js} +1 -1
- package/lib/public/assets/{Modal-C6WjZFeI.js → Modal-BcZUFhDm.js} +1 -1
- package/lib/public/assets/{RecordingPage-CSRIhZEh.js → RecordingPage-B_pbl3UE.js} +1 -1
- package/lib/public/assets/{RecordingsPage-CB8ST3nE.js → RecordingsPage-BkVhplE3.js} +1 -1
- package/lib/public/assets/{SegmentedControl-C9o90KId.js → SegmentedControl-CDLMLNl5.js} +1 -1
- package/lib/public/assets/{SettingCard-CPm3w9l2.js → SettingCard-Lyw5CB1F.js} +1 -1
- package/lib/public/assets/{Table-DwIgERRt.js → Table-CK414bOU.js} +1 -1
- package/lib/public/assets/{activity-DrLbHifn.js → activity-pEyAdE-M.js} +1 -1
- package/lib/public/assets/{ai-settings-DU_Ls06P.js → ai-settings-CIhS7MMq.js} +1 -1
- package/lib/public/assets/{api-keys-CWYdEzJ_.js → api-keys-D2J44Ebv.js} +1 -1
- package/lib/public/assets/{apps-BqNVdln7.js → apps-CCV3RZY8.js} +1 -1
- package/lib/public/assets/{arrow-left-BtB0_Jg_.js → arrow-left-DaEUmERk.js} +1 -1
- package/lib/public/assets/{arrow-right-C8NhdtyN.js → arrow-right-CnRXHXit.js} +1 -1
- package/lib/public/assets/{arrow-up-right-gMg0ffvv.js → arrow-up-right-BGCS7zhi.js} +1 -1
- package/lib/public/assets/{auth-shell-CiYZ3N4M.js → auth-shell-CpW1zsxD.js} +2 -2
- package/lib/public/assets/{builds-page-EaaqDmLN.js → builds-page-B-xdzjMx.js} +1 -1
- package/lib/public/assets/{button-DDau4Axv.js → button-B5QkOVa4.js} +1 -1
- package/lib/public/assets/{calendar-DQ83B1ed.js → calendar-gX_1EKue.js} +1 -1
- package/lib/public/assets/{check-K1ovTQam.js → check-MIM4THvH.js} +1 -1
- package/lib/public/assets/{chevron-right-Biq00pMt.js → chevron-right-BZIp3-9t.js} +1 -1
- package/lib/public/assets/{circle-check-CBv88cH7.js → circle-check-Crt-G_uy.js} +1 -1
- package/lib/public/assets/{circle-x-Bmltailn.js → circle-x-C8GvvXVt.js} +1 -1
- package/lib/public/assets/{clock-BPrld-3h.js → clock-MFKV4qGa.js} +1 -1
- package/lib/public/assets/{copy-t0QB14JI.js → copy-BU-Z7mBK.js} +1 -1
- package/lib/public/assets/device-explorer-D-78Twa0.js +282 -0
- package/lib/public/assets/{download-BroHxNOh.js → download-DIoLCCYv.js} +1 -1
- package/lib/public/assets/{forgot-password-Bjmf49i6.js → forgot-password-vNYlPnia.js} +1 -1
- package/lib/public/assets/{h264Stream-DeD__6wa.js → h264Stream-BLcSplMU.js} +1 -1
- package/lib/public/assets/{index-B0gQkEg0.js → index-BpqyclNY.js} +2 -2
- package/lib/public/assets/{index-B0JeuZbg.js → index-Hl1OL-k_.js} +1 -1
- package/lib/public/assets/{index-72oF89LJ.js → index-QbukVVrl.js} +1 -1
- package/lib/public/assets/{input-DIc4MSC7.js → input-DHH3fHer.js} +1 -1
- package/lib/public/assets/{line-chart-BcWm2vW8.js → line-chart-PdViEphw.js} +1 -1
- package/lib/public/assets/{list-checks-B06IJJad.js → list-checks-DI_heIg9.js} +1 -1
- package/lib/public/assets/{lock-pVLvnN30.js → lock-DVP_dL6J.js} +1 -1
- package/lib/public/assets/{login-CN77vy--.js → login-B8vtTDcr.js} +1 -1
- package/lib/public/assets/{maintenance-settings-CSdzQSkY.js → maintenance-settings-BMa5EfgI.js} +1 -1
- package/lib/public/assets/{monitor-BtrN5IkI.js → monitor-CtzX_RkD.js} +1 -1
- package/lib/public/assets/{mouse-pointer-2-CNsQfo6w.js → mouse-pointer-2-BA09sdS9.js} +1 -1
- package/lib/public/assets/{network-BSfA8ZxG.js → network-B_F9Nox-.js} +1 -1
- package/lib/public/assets/{overview-BfTebCK5.js → overview-kWCYMHMV.js} +1 -1
- package/lib/public/assets/{page-header-D8KUX6Qg.js → page-header-CAbH1O1a.js} +1 -1
- package/lib/public/assets/{play-Cvc8xzic.js → play-sg95hLqA.js} +1 -1
- package/lib/public/assets/{plus-C9Zj84UF.js → plus-BT9mk2gj.js} +1 -1
- package/lib/public/assets/{profile-page-Bi27STgs.js → profile-page-DZOz5Ypc.js} +1 -1
- package/lib/public/assets/{reset-password-CPsOuwSu.js → reset-password-CqeImlEO.js} +1 -1
- package/lib/public/assets/{runbook-page-DEQ-DBOX.js → runbook-page-U_8TSysj.js} +1 -1
- package/lib/public/assets/{select-BWpnhWXj.js → select-Cx4JDzsR.js} +1 -1
- package/lib/public/assets/{selector-detail-redirect-BefSCSpe.js → selector-detail-redirect-DiMRe7DW.js} +1 -1
- package/lib/public/assets/{selector-health-page-MSk96Zz7.js → selector-health-page-CKR5URll.js} +1 -1
- package/lib/public/assets/{session-detail-page-DPyBNef_.js → session-detail-page-DuIVzTW_.js} +1 -1
- package/lib/public/assets/{settings-V6x-cXwy.js → settings-B5fuvgTP.js} +1 -1
- package/lib/public/assets/{stat-tile-Duex-GZD.js → stat-tile-CtHX1dkh.js} +1 -1
- package/lib/public/assets/{tablet-BBcoqBmL.js → tablet-DCGD0GQt.js} +1 -1
- package/lib/public/assets/{teams-ts8p5rEh.js → teams-MzlELlw9.js} +1 -1
- package/lib/public/assets/{trash-2-CZ2ew6AZ.js → trash-2-BIRm2KVs.js} +1 -1
- package/lib/public/assets/{upload-Dv99y_le.js → upload-C-lgyswH.js} +1 -1
- package/lib/public/assets/{use-builds-data-DrYC8JCF.js → use-builds-data-IOydXA8d.js} +1 -1
- package/lib/public/assets/{use-password-reset-mode-C7QkBNkP.js → use-password-reset-mode-CIVXG7Me.js} +1 -1
- package/lib/public/assets/{users-gJ5Y01yo.js → users-hwK5XGIy.js} +1 -1
- package/lib/public/assets/{users-D7tKMESH.js → users-ivNCjeus.js} +1 -1
- package/lib/public/assets/{video-off-CqZVuZGs.js → video-off-DvcIEsdZ.js} +1 -1
- package/lib/public/assets/{webhook-settings-DI5DSW99.js → webhook-settings-DukgCe1u.js} +1 -1
- package/lib/public/assets/{zap-ClcHFxfo.js → zap-BE9gacFj.js} +1 -1
- package/lib/public/index.html +1 -1
- package/lib/schema.json +1 -1
- package/lib/src/app/index.js +2 -0
- package/lib/src/app/openapi/control.yaml +69 -4
- package/lib/src/app/openapi/grid.yaml +102 -0
- package/lib/src/app/routers/control.js +24 -5
- package/lib/src/dashboard/event-manager.js +5 -8
- package/lib/src/device-managers/ios/IOSStreamService.js +147 -18
- package/lib/src/device-utils.js +61 -24
- package/lib/src/gateway/internalCall.js +33 -5
- package/lib/src/gateway/nodeAsk.js +57 -0
- package/lib/src/gateway/nodeSessionDeviceLogs.js +35 -0
- package/lib/src/gateway/sessionGateway.js +9 -4
- package/lib/src/helpers/index.js +9 -6
- package/lib/src/interceptors/CommandInterceptor.js +10 -0
- package/lib/src/plugin.js +4 -1
- package/lib/src/scripts/initialize-database.js +0 -6
- package/lib/src/scripts/run-migrations.js +123 -880
- package/lib/src/services/ServerManager.js +25 -4
- package/lib/src/services/SessionLifecycleService.js +20 -5
- package/lib/src/services/UserService.js +8 -3
- package/lib/src/services/interceptor/CertManager.js +50 -16
- package/lib/src/services/logcat/NodeDeviceLogStore.js +99 -0
- package/lib/src/services/logcat/NodeDeviceLogsCollector.js +164 -0
- package/lib/src/services/logcat/SessionDeviceLogs.js +199 -44
- package/lib/src/services/logcat/nodeDeviceLogs.js +91 -0
- package/lib/src/services/metrics/nodeMetrics.js +20 -49
- package/lib/src/sessions/RemoteSession.js +11 -2
- package/lib/src/sessions/SessionManager.js +28 -1
- package/lib/src/sessions/appiumUmbrella.js +11 -0
- package/lib/src/sessions/sessionMemory.js +11 -2
- package/lib/test/helpers/fake-logcat.js +80 -0
- package/lib/test/helpers/hub-node-pair.js +227 -0
- package/lib/test/unit/UserService.test.js +8 -0
- package/lib/test/unit/boot-device-sync.spec.js +195 -0
- package/lib/test/unit/dashboard-events-device-logs.spec.js +15 -0
- package/lib/test/unit/hub-node-gateway-appium-server.spec.js +21 -0
- package/lib/test/unit/hub-node-iphone-readiness.spec.js +134 -0
- package/lib/test/unit/hub-node-session-device-logs.spec.js +194 -0
- package/lib/test/unit/hub-node-session-metrics.spec.js +24 -192
- package/lib/test/unit/hub-remote-session-heartbeat.spec.js +8 -1
- package/lib/test/unit/install-scripts.spec.js +98 -0
- package/lib/test/unit/interceptor/CertManager.spec.js +89 -0
- package/lib/test/unit/internal-call.spec.js +99 -0
- package/lib/test/unit/internal-calls-session-record.spec.js +312 -0
- package/lib/test/unit/ios-simulator-preview.spec.js +315 -0
- package/lib/test/unit/is-xenon-running.spec.js +10 -0
- package/lib/test/unit/node-device-log-store.spec.js +102 -0
- package/lib/test/unit/node-device-logs-collector.spec.js +343 -0
- package/lib/test/unit/node-gateway-create-appium-server.spec.js +8 -1
- package/lib/test/unit/node-hub-session-owner.spec.js +8 -1
- package/lib/test/unit/node-session-device-logs-route.spec.js +103 -0
- package/lib/test/unit/run-migrations-database.spec.js +57 -424
- package/lib/test/unit/run-migrations.test.js +74 -674
- package/lib/test/unit/session-device-logs-hub-node.spec.js +340 -0
- package/lib/test/unit/session-device-logs-lifecycle.spec.js +137 -0
- package/lib/test/unit/session-device-logs.spec.js +32 -94
- package/lib/test/unit/session-log-indexes.spec.js +15 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -3
- package/schema.json +1 -1
- package/lib/public/assets/DeviceMosaicView-DqODzkyo.js +0 -2
- package/lib/public/assets/device-explorer-BgGZ8AvV.js +0 -282
|
@@ -15,65 +15,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
require("reflect-metadata");
|
|
16
16
|
const chai_1 = require("chai");
|
|
17
17
|
const supertest_1 = __importDefault(require("supertest"));
|
|
18
|
-
const stream_1 = require("stream");
|
|
19
|
-
const LogcatStreamService_1 = require("../../src/device-managers/android/LogcatStreamService");
|
|
20
|
-
const PackageResolver_1 = require("../../src/services/logcat/PackageResolver");
|
|
21
18
|
const SessionDeviceLogs_1 = require("../../src/services/logcat/SessionDeviceLogs");
|
|
22
19
|
const deviceLogBook_1 = require("../../src/services/logcat/deviceLogBook");
|
|
23
20
|
const scratch_database_1 = require("../helpers/scratch-database");
|
|
24
21
|
const selector_health_fixture_1 = require("../helpers/selector-health-fixture");
|
|
25
|
-
const
|
|
22
|
+
const fake_logcat_1 = require("../helpers/fake-logcat");
|
|
26
23
|
// How the Device logs tab reads a line's level for its "Errors only" filter
|
|
27
24
|
// (web log-derive.ts `logLineLevel`, whose own tests hold it to lines in the
|
|
28
25
|
// shape these rows have; the web package can't be imported here).
|
|
29
26
|
const DASHBOARD_THREADTIME = /^\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\.\d+\s+\d+\s+\d+\s+([VDIWEF])\s/;
|
|
30
27
|
const levelOf = (message) => { var _a, _b; return (_b = (_a = DASHBOARD_THREADTIME.exec(message)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : null; };
|
|
31
|
-
/** A threadtime line logged at `at` by this machine's local clock. */
|
|
32
|
-
function lineAt(at, msg, level = 'I', tag = 'Tag', pid = 4127) {
|
|
33
|
-
const t = new Date(at);
|
|
34
|
-
return (`${pad(t.getMonth() + 1)}-${pad(t.getDate())} ${pad(t.getHours())}:${pad(t.getMinutes())}:` +
|
|
35
|
-
`${pad(t.getSeconds())}.${pad(t.getMilliseconds(), 3)} ${pid} ${pid} ${level} ${tag}: ${msg}\n`);
|
|
36
|
-
}
|
|
37
|
-
/** An `adb logcat` child whose output the test writes. */
|
|
38
|
-
function fakeProc() {
|
|
39
|
-
const stdout = new stream_1.PassThrough();
|
|
40
|
-
const handlers = {};
|
|
41
|
-
return {
|
|
42
|
-
stdout,
|
|
43
|
-
killed: false,
|
|
44
|
-
on(ev, cb) {
|
|
45
|
-
(handlers[ev] || (handlers[ev] = [])).push(cb);
|
|
46
|
-
},
|
|
47
|
-
/** The process ends, as when the phone restarts or is unplugged. */
|
|
48
|
-
exit() {
|
|
49
|
-
stdout.end();
|
|
50
|
-
(handlers.close || []).forEach((h) => h());
|
|
51
|
-
},
|
|
52
|
-
kill() {
|
|
53
|
-
this.killed = true;
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/** The real stream service, its `adb logcat` children fake. */
|
|
58
|
-
class FakeLogcatStreams extends LogcatStreamService_1.LogcatStreamService {
|
|
59
|
-
constructor() {
|
|
60
|
-
super(...arguments);
|
|
61
|
-
this.procs = [];
|
|
62
|
-
}
|
|
63
|
-
spawnLogcat() {
|
|
64
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
-
const proc = fakeProc();
|
|
66
|
-
this.procs.push(proc);
|
|
67
|
-
return proc;
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
makeResolver() {
|
|
71
|
-
return new PackageResolver_1.PackageResolver(() => __awaiter(this, void 0, void 0, function* () { return ' PID NAME\n 4127 com.example.app\n'; }));
|
|
72
|
-
}
|
|
73
|
-
get proc() {
|
|
74
|
-
return this.procs[this.procs.length - 1];
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
28
|
class TestDeviceLogs extends SessionDeviceLogs_1.SessionDeviceLogs {
|
|
78
29
|
constructor(logcat) {
|
|
79
30
|
super();
|
|
@@ -115,19 +66,6 @@ const PHONE = {
|
|
|
115
66
|
host: 'http://127.0.0.1:4723',
|
|
116
67
|
nodeId: 'this-server',
|
|
117
68
|
};
|
|
118
|
-
/** Lets readline, the stream's package lookups and the mux deliver what was written. */
|
|
119
|
-
const settle = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
120
|
-
for (let i = 0; i < 5; i++)
|
|
121
|
-
yield new Promise((r) => setImmediate(r));
|
|
122
|
-
});
|
|
123
|
-
const until = (check_1, ...args_1) => __awaiter(void 0, [check_1, ...args_1], void 0, function* (check, ms = 2000) {
|
|
124
|
-
const end = Date.now() + ms;
|
|
125
|
-
while (!check()) {
|
|
126
|
-
if (Date.now() > end)
|
|
127
|
-
throw new Error('timed out');
|
|
128
|
-
yield new Promise((r) => setTimeout(r, 5));
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
69
|
/** The session's Device logs as the session page gets them. */
|
|
132
70
|
function deviceLogs(sessionId) {
|
|
133
71
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -159,7 +97,7 @@ describe("An Android session's Device logs", function () {
|
|
|
159
97
|
has_live_video: false,
|
|
160
98
|
},
|
|
161
99
|
});
|
|
162
|
-
logcat = new FakeLogcatStreams();
|
|
100
|
+
logcat = new fake_logcat_1.FakeLogcatStreams();
|
|
163
101
|
logs = new TestDeviceLogs(logcat);
|
|
164
102
|
}));
|
|
165
103
|
afterEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -171,14 +109,14 @@ describe("An Android session's Device logs", function () {
|
|
|
171
109
|
yield logs.start({ sessionId, device: PHONE, since });
|
|
172
110
|
// History from before the session, as `logcat -T` sends it first.
|
|
173
111
|
for (let i = 0; i < 20; i++)
|
|
174
|
-
logcat.proc.stdout.write(lineAt(since - 600000 + i, `old ${i}`));
|
|
112
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since - 600000 + i, `old ${i}`));
|
|
175
113
|
// 250 lines over the run, a batch between each "command".
|
|
176
114
|
for (let batch = 0; batch < 5; batch++) {
|
|
177
115
|
for (let i = 0; i < 50; i++) {
|
|
178
116
|
const n = batch * 50 + i;
|
|
179
|
-
logcat.proc.stdout.write(lineAt(since + 1000 + n, `line ${n}`));
|
|
117
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since + 1000 + n, `line ${n}`));
|
|
180
118
|
}
|
|
181
|
-
yield settle();
|
|
119
|
+
yield (0, fake_logcat_1.settle)();
|
|
182
120
|
}
|
|
183
121
|
yield logs.stop(sessionId);
|
|
184
122
|
const rows = yield deviceLogs(sessionId);
|
|
@@ -188,11 +126,11 @@ describe("An Android session's Device logs", function () {
|
|
|
188
126
|
const since = Date.now() - 60000;
|
|
189
127
|
yield logs.start({ sessionId, device: PHONE, since });
|
|
190
128
|
const crashAt = since + 30123;
|
|
191
|
-
logcat.proc.stdout.write(lineAt(crashAt - 5, 'Start proc com.example.app', 'I', 'ActivityManager'));
|
|
192
|
-
logcat.proc.stdout.write(lineAt(crashAt, 'FATAL EXCEPTION: main', 'E', 'AndroidRuntime'));
|
|
193
|
-
logcat.proc.stdout.write(lineAt(crashAt, 'Process: com.example.app, PID: 4127', 'E', 'AndroidRuntime'));
|
|
194
|
-
logcat.proc.stdout.write(lineAt(crashAt + 1, 'Sending signal. PID: 4127 SIG: 9', 'I', 'Process'));
|
|
195
|
-
yield settle();
|
|
129
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(crashAt - 5, 'Start proc com.example.app', 'I', 'ActivityManager'));
|
|
130
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(crashAt, 'FATAL EXCEPTION: main', 'E', 'AndroidRuntime'));
|
|
131
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(crashAt, 'Process: com.example.app, PID: 4127', 'E', 'AndroidRuntime'));
|
|
132
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(crashAt + 1, 'Sending signal. PID: 4127 SIG: 9', 'I', 'Process'));
|
|
133
|
+
yield (0, fake_logcat_1.settle)();
|
|
196
134
|
yield logs.stop(sessionId);
|
|
197
135
|
const rows = yield deviceLogs(sessionId);
|
|
198
136
|
(0, chai_1.expect)(rows.map((r) => levelOf(r.message))).to.deep.equal(['I', 'E', 'E', 'I']);
|
|
@@ -210,8 +148,8 @@ describe("An Android session's Device logs", function () {
|
|
|
210
148
|
const at = since + 10000;
|
|
211
149
|
const frames = Array.from({ length: 40 }, (_, i) => `\tat com.example.Frame${i}.run(Frame.java:${i})`);
|
|
212
150
|
for (const frame of frames)
|
|
213
|
-
logcat.proc.stdout.write(lineAt(at, frame, 'E', 'AndroidRuntime'));
|
|
214
|
-
yield settle();
|
|
151
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(at, frame, 'E', 'AndroidRuntime'));
|
|
152
|
+
yield (0, fake_logcat_1.settle)();
|
|
215
153
|
yield logs.stop(sessionId);
|
|
216
154
|
const rows = yield deviceLogs(sessionId);
|
|
217
155
|
(0, chai_1.expect)(rows.map((r) => r.message.replace(/^.*AndroidRuntime: /, ''))).to.deep.equal(frames);
|
|
@@ -224,14 +162,14 @@ describe("An Android session's Device logs", function () {
|
|
|
224
162
|
const since = Date.now() - 60000;
|
|
225
163
|
yield logs.start({ sessionId, device: PHONE, since });
|
|
226
164
|
for (let i = 0; i < SessionDeviceLogs_1.WRITE_BATCH + 10; i++)
|
|
227
|
-
logcat.proc.stdout.write(lineAt(since + i, `line ${i}`));
|
|
228
|
-
yield settle();
|
|
165
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since + i, `line ${i}`));
|
|
166
|
+
yield (0, fake_logcat_1.settle)();
|
|
229
167
|
// A full batch is written while the session runs, without waiting for
|
|
230
168
|
// its end or the interval (a minute here).
|
|
231
169
|
const written = () => scratch.db.log.count({ where: { session_id: sessionId } });
|
|
232
170
|
const end = Date.now() + 2000;
|
|
233
171
|
while ((yield written()) < SessionDeviceLogs_1.WRITE_BATCH && Date.now() < end)
|
|
234
|
-
yield settle();
|
|
172
|
+
yield (0, fake_logcat_1.settle)();
|
|
235
173
|
(0, chai_1.expect)(yield written()).to.be.at.least(SessionDeviceLogs_1.WRITE_BATCH);
|
|
236
174
|
(0, chai_1.expect)(logs.isRecording(sessionId)).to.equal(true);
|
|
237
175
|
yield logs.stop(sessionId);
|
|
@@ -243,18 +181,18 @@ describe("An Android session's Device logs", function () {
|
|
|
243
181
|
const since = Date.now() - 60000;
|
|
244
182
|
yield logs.start({ sessionId, device: PHONE, since });
|
|
245
183
|
const first = logcat.proc;
|
|
246
|
-
first.stdout.write(lineAt(since + 1000, 'before 1'));
|
|
247
|
-
first.stdout.write(lineAt(since + 2000, 'before 2'));
|
|
248
|
-
yield settle();
|
|
184
|
+
first.stdout.write((0, fake_logcat_1.lineAt)(since + 1000, 'before 1'));
|
|
185
|
+
first.stdout.write((0, fake_logcat_1.lineAt)(since + 2000, 'before 2'));
|
|
186
|
+
yield (0, fake_logcat_1.settle)();
|
|
249
187
|
first.exit();
|
|
250
|
-
yield until(() => logcat.procs.length === 2);
|
|
188
|
+
yield (0, fake_logcat_1.until)(() => logcat.procs.length === 2);
|
|
251
189
|
// The new stream starts with history the session already has, then a
|
|
252
190
|
// line of the same millisecond it hadn't seen, then new lines.
|
|
253
|
-
logcat.proc.stdout.write(lineAt(since + 1000, 'before 1'));
|
|
254
|
-
logcat.proc.stdout.write(lineAt(since + 2000, 'before 2'));
|
|
255
|
-
logcat.proc.stdout.write(lineAt(since + 2000, 'also at 2'));
|
|
256
|
-
logcat.proc.stdout.write(lineAt(since + 9000, 'after'));
|
|
257
|
-
yield settle();
|
|
191
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since + 1000, 'before 1'));
|
|
192
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since + 2000, 'before 2'));
|
|
193
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since + 2000, 'also at 2'));
|
|
194
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since + 9000, 'after'));
|
|
195
|
+
yield (0, fake_logcat_1.settle)();
|
|
258
196
|
yield logs.stop(sessionId);
|
|
259
197
|
(0, chai_1.expect)(textOf(yield deviceLogs(sessionId))).to.deep.equal([
|
|
260
198
|
'before 1',
|
|
@@ -271,8 +209,8 @@ describe("An Android session's Device logs", function () {
|
|
|
271
209
|
mux.addClient((r) => viewer.push(r.message), () => true);
|
|
272
210
|
yield logs.start({ sessionId, device: PHONE, since });
|
|
273
211
|
(0, chai_1.expect)(logcat.procs).to.have.length(1);
|
|
274
|
-
logcat.proc.stdout.write(lineAt(since + 1, 'shared'));
|
|
275
|
-
yield settle();
|
|
212
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since + 1, 'shared'));
|
|
213
|
+
yield (0, fake_logcat_1.settle)();
|
|
276
214
|
yield logs.stop(sessionId);
|
|
277
215
|
(0, chai_1.expect)(viewer).to.deep.equal(['shared']);
|
|
278
216
|
(0, chai_1.expect)(logcat.proc.killed).to.equal(false);
|
|
@@ -294,14 +232,14 @@ describe("An Android session's Device logs", function () {
|
|
|
294
232
|
for (let i = 0; i < total; i++) {
|
|
295
233
|
// Past the limit, five lines in six are errors: 2,500 errors, 500 others.
|
|
296
234
|
const level = i >= deviceLogBook_1.DEVICE_LOG_LINE_LIMIT && i % 6 !== 0 ? 'E' : 'D';
|
|
297
|
-
chunk += lineAt(since + 1000 + i, `line ${i}`, level);
|
|
235
|
+
chunk += (0, fake_logcat_1.lineAt)(since + 1000 + i, `line ${i}`, level);
|
|
298
236
|
if (i % 1000 === 999) {
|
|
299
237
|
logcat.proc.stdout.write(chunk);
|
|
300
238
|
chunk = '';
|
|
301
|
-
yield settle();
|
|
239
|
+
yield (0, fake_logcat_1.settle)();
|
|
302
240
|
}
|
|
303
241
|
}
|
|
304
|
-
yield settle();
|
|
242
|
+
yield (0, fake_logcat_1.settle)();
|
|
305
243
|
yield logs.stop(sessionId);
|
|
306
244
|
const rows = yield deviceLogs(sessionId);
|
|
307
245
|
(0, chai_1.expect)(rows).to.have.length(deviceLogBook_1.DEVICE_LOG_LINE_LIMIT + 1 + deviceLogBook_1.DEVICE_LOG_ERROR_LIMIT + 1);
|
|
@@ -324,9 +262,9 @@ describe("An Android session's Device logs", function () {
|
|
|
324
262
|
logs.clock = null;
|
|
325
263
|
const since = Date.now() - 60000;
|
|
326
264
|
yield logs.start({ sessionId, device: PHONE, since });
|
|
327
|
-
logcat.proc.stdout.write(lineAt(since - 600000, 'before'));
|
|
328
|
-
logcat.proc.stdout.write(lineAt(since + 10, 'during'));
|
|
329
|
-
yield settle();
|
|
265
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since - 600000, 'before'));
|
|
266
|
+
logcat.proc.stdout.write((0, fake_logcat_1.lineAt)(since + 10, 'during'));
|
|
267
|
+
yield (0, fake_logcat_1.settle)();
|
|
330
268
|
yield logs.stop(sessionId);
|
|
331
269
|
(0, chai_1.expect)(textOf(yield deviceLogs(sessionId))).to.deep.equal(['during']);
|
|
332
270
|
}));
|
|
@@ -18,6 +18,7 @@ const supertest_1 = __importDefault(require("supertest"));
|
|
|
18
18
|
const typedi_1 = require("typedi");
|
|
19
19
|
const CleanupService_1 = require("../../src/services/CleanupService");
|
|
20
20
|
const SelectorVerificationJob_1 = require("../../src/services/SelectorVerificationJob");
|
|
21
|
+
const SessionDeviceLogs_1 = require("../../src/services/logcat/SessionDeviceLogs");
|
|
21
22
|
const scratch_database_1 = require("../helpers/scratch-database");
|
|
22
23
|
const selector_health_fixture_1 = require("../helpers/selector-health-fixture");
|
|
23
24
|
/** The SQL statements `run` makes. */
|
|
@@ -145,6 +146,20 @@ describe("A session's logs and profiling are read through an index", function ()
|
|
|
145
146
|
(0, chai_1.expect)(scansOf(table, steps), steps.join('\n')).to.deep.equal([]);
|
|
146
147
|
}));
|
|
147
148
|
}
|
|
149
|
+
it("finds a session's newest device log lines without a scan, as a hub resumes after a restart", () => __awaiter(this, void 0, void 0, function* () {
|
|
150
|
+
class Reader extends SessionDeviceLogs_1.SessionDeviceLogs {
|
|
151
|
+
tail(sessionId) {
|
|
152
|
+
return this.storedTail(sessionId);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
let tail = [];
|
|
156
|
+
const steps = yield stepsOn(scratch, 'Log', yield sqlOf(scratch, () => __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
tail = yield new Reader().tail('ix-session');
|
|
158
|
+
})));
|
|
159
|
+
(0, chai_1.expect)(tail.map((l) => l.message)).to.deep.equal(['I/ActivityManager: start']);
|
|
160
|
+
(0, chai_1.expect)(steps, 'no Log statement was captured').to.not.be.empty;
|
|
161
|
+
(0, chai_1.expect)(scansOf('Log', steps), steps.join('\n')).to.deep.equal([]);
|
|
162
|
+
}));
|
|
148
163
|
it("deletes a session's commands, logs and profiling without a scan", () => __awaiter(this, void 0, void 0, function* () {
|
|
149
164
|
const ran = yield sqlOf(scratch, () => typedi_1.Container.get(CleanupService_1.CleanupService).purgeBuild('ix-build', false));
|
|
150
165
|
for (const table of ['SessionLog', 'Log', 'Profiling']) {
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/InternalHttpClient.ts","../src/PluginContext.ts","../src/XenonCapabilityManager.ts","../src/chromeUtils.ts","../src/config.ts","../src/device-utils.ts","../src/index.ts","../src/logger.ts","../src/plugin.ts","../src/prisma.ts","../src/app/apiErrors.ts","../src/app/appiumBasePath.ts","../src/app/dashboardPluginLink.ts","../src/app/index.ts","../src/app/insertBeforeRoutes.ts","../src/app/registerCommandAuth.ts","../src/app/swagger.ts","../src/app/routers/androidH264Config.ts","../src/app/routers/apikeys.ts","../src/app/routers/apps.ts","../src/app/routers/audit.ts","../src/app/routers/auth.ts","../src/app/routers/bug-report.ts","../src/app/routers/build-export.ts","../src/app/routers/capabilities.ts","../src/app/routers/config.ts","../src/app/routers/control.ts","../src/app/routers/dashboard.ts","../src/app/routers/grid.ts","../src/app/routers/interceptor.ts","../src/app/routers/iosStreamPort.ts","../src/app/routers/nodePhoneControl.ts","../src/app/routers/ports.ts","../src/app/routers/processes.ts","../src/app/routers/profile.ts","../src/app/routers/profileIdentity.ts","../src/app/routers/projects.ts","../src/app/routers/recordingRequests.ts","../src/app/routers/recordings.ts","../src/app/routers/reservation.ts","../src/app/routers/sdk-leases.ts","../src/app/routers/sdk-version.ts","../src/app/routers/selector-health.ts","../src/app/routers/sessionInsights.ts","../src/app/routers/streamLeave.ts","../src/app/routers/streamStartConflict.ts","../src/app/routers/streamType.ts","../src/app/routers/teams.ts","../src/app/routers/users.ts","../src/app/routers/webhook.ts","../src/app/ws/h264StreamWs.ts","../src/app/ws/logcatWs.ts","../src/app/ws/nodeSocketRelay.ts","../src/app/ws/upgradeRouter.ts","../src/commands/handle.ts","../src/commands/index.ts","../src/dashboard/asset-manager.ts","../src/dashboard/commandLogFields.ts","../src/dashboard/commands.ts","../src/dashboard/event-manager.ts","../src/dashboard/sessionCommandSummary.ts","../src/dashboard/services/app-service.ts","../src/dashboard/services/failure-analysis-service.ts","../src/dashboard/services/failureCategories.ts","../src/dashboard/services/session-service.ts","../src/data-service/CircuitBreaker.ts","../src/data-service/appleFamily.ts","../src/data-service/config-service.ts","../src/data-service/db.ts","../src/data-service/device-service.ts","../src/data-service/device-store.interface.ts","../src/data-service/device-store.ts","../src/data-service/deviceClaims.ts","../src/data-service/deviceColumns.ts","../src/data-service/deviceFieldOwners.ts","../src/data-service/deviceSettings.ts","../src/data-service/pending-sessions-service.ts","../src/data-service/pluginArgs.ts","../src/data-service/prisma-service.ts","../src/data-service/prisma-store.ts","../src/data-service/queue-service.ts","../src/data-service/web-config-service.ts","../src/device-managers/AndroidDeviceManager.ts","../src/device-managers/ChromeDriverManager.ts","../src/device-managers/HealthMonitorService.ts","../src/device-managers/IOSDeviceManager.ts","../src/device-managers/NodeDevices.ts","../src/device-managers/clipboardErrors.ts","../src/device-managers/deviceIdentity.ts","../src/device-managers/iOSTracker.ts","../src/device-managers/index.ts","../src/device-managers/localDeviceHosts.ts","../src/device-managers/ownDeviceRow.ts","../src/device-managers/shellCommands.ts","../src/device-managers/android/AndroidH264StreamService.ts","../src/device-managers/android/AndroidStreamService.ts","../src/device-managers/android/DeviceLockManager.ts","../src/device-managers/android/H264Multiplexer.ts","../src/device-managers/android/LogcatMultiplexer.ts","../src/device-managers/android/LogcatStreamService.ts","../src/device-managers/android/ScrcpyServerSession.ts","../src/device-managers/android/androidIdentity.ts","../src/device-managers/android/androidStreamReuse.ts","../src/device-managers/android/clipboardBroadcast.ts","../src/device-managers/android/displayState.ts","../src/device-managers/android/h264NalParser.ts","../src/device-managers/android/previewHold.ts","../src/device-managers/android/scrcpyVersion.ts","../src/device-managers/cloud/CapabilityManager.ts","../src/device-managers/cloud/Devices.ts","../src/device-managers/ios/IOSDiscoveryService.ts","../src/device-managers/ios/IOSLogStreamService.ts","../src/device-managers/ios/IOSStreamService.ts","../src/device-managers/ios/IOSTunnels.ts","../src/device-managers/ios/WDAClient.ts","../src/device-managers/ios/appleIdentity.ts","../src/device-managers/ios/goIosBinary.ts","../src/device-managers/ios/iosAppIds.ts","../src/device-managers/ios/iosBattery.ts","../src/device-managers/ios/iosStreamDiagnostics.ts","../src/device-managers/ios/tunnelProcess.ts","../src/device-managers/ios/usbmuxd.ts","../src/enums/Capabilities.ts","../src/enums/Cloud.ts","../src/enums/Platform.ts","../src/enums/SessionType.ts","../src/enums/SocketEvents.ts","../src/gateway/createHandoff.ts","../src/gateway/defaultGateway.ts","../src/gateway/forwardToNode.ts","../src/gateway/healReport.ts","../src/gateway/hubSessionToken.ts","../src/gateway/internalCall.ts","../src/gateway/nodeSessionMetrics.ts","../src/gateway/nodeSessionStatus.ts","../src/gateway/nodeWebDriverUrl.ts","../src/gateway/sessionCreate.ts","../src/gateway/sessionGateway.ts","../src/gateway/sessionLocator.ts","../src/generated/client/default.d.ts","../src/generated/client/default.js","../src/generated/client/edge.d.ts","../src/generated/client/edge.js","../src/generated/client/index-browser.js","../src/generated/client/index.d.ts","../src/generated/client/index.js","../src/generated/client/wasm.d.ts","../src/generated/client/wasm.js","../src/generated/client/runtime/edge-esm.js","../src/generated/client/runtime/edge.js","../src/generated/client/runtime/index-browser.d.ts","../src/generated/client/runtime/index-browser.js","../src/generated/client/runtime/library.d.ts","../src/generated/client/runtime/library.js","../src/generated/client/runtime/react-native.js","../src/generated/client/runtime/wasm.js","../src/helpers/UniversalMjpegProxy.ts","../src/helpers/ffmpegPath.ts","../src/helpers/index.ts","../src/helpers/networkAddresses.ts","../src/helpers/outboundProxy.ts","../src/helpers/singleFlight.ts","../src/interceptors/CommandInterceptor.ts","../src/interceptors/xenonScripts.ts","../src/interfaces/ICloudManager.ts","../src/interfaces/IDevice.ts","../src/interfaces/IDeviceFilterOptions.ts","../src/interfaces/IDeviceManager.ts","../src/interfaces/IOptions.ts","../src/interfaces/IPluginArgs.ts","../src/interfaces/ISessionCapability.ts","../src/logging/sessionContext.ts","../src/middleware/authMiddleware.ts","../src/middleware/commandAuth.ts","../src/middleware/commandCaller.ts","../src/middleware/controlDevice.ts","../src/middleware/csrfMiddleware.ts","../src/middleware/deviceAccessGuard.ts","../src/middleware/deviceTeamGuard.ts","../src/middleware/leaseTokenMiddleware.ts","../src/middleware/loginRateLimiter.ts","../src/middleware/rateLimitMiddleware.ts","../src/middleware/roleGuard.ts","../src/middleware/scopeGuard.ts","../src/middleware/sessionListingFilter.ts","../src/middleware/sessionUpgradeGuard.ts","../src/middleware/verifyCredential.ts","../src/scripts/database-check.ts","../src/scripts/generate-database-migration.ts","../src/scripts/goIosVersion.ts","../src/scripts/initialize-database.ts","../src/scripts/install-go-ios.ts","../src/scripts/run-migrations.ts","../src/services/AICommandService.ts","../src/services/AIService.ts","../src/services/ApiKeyService.ts","../src/services/CircuitBreaker.ts","../src/services/CleanupService.ts","../src/services/DeviceReconciler.ts","../src/services/DisplayStateService.ts","../src/services/EmailService.ts","../src/services/EventBus.ts","../src/services/EventLogService.ts","../src/services/InspectorService.ts","../src/services/InterceptorService.ts","../src/services/MetricsService.ts","../src/services/NetworkConditioningService.ts","../src/services/NotificationService.ts","../src/services/OrphanSweeper.ts","../src/services/PasswordResetService.ts","../src/services/PortAllocator.ts","../src/services/ProcessMetricsService.ts","../src/services/ProcessRegistry.ts","../src/services/RequestLogService.ts","../src/services/ResourceIsolationService.ts","../src/services/SecurityService.ts","../src/services/SelectorStateService.ts","../src/services/SelectorVerificationJob.ts","../src/services/ServerManager.ts","../src/services/SessionHeartbeatService.ts","../src/services/SessionLifecycleService.ts","../src/services/ShutdownCoordinator.ts","../src/services/SocketClient.ts","../src/services/SocketServer.ts","../src/services/TeamService.ts","../src/services/TracingService.ts","../src/services/UserService.ts","../src/services/UserSessionService.ts","../src/services/VideoPipelineService.ts","../src/services/fillMissingScreenSize.ts","../src/services/passwordResetLink.ts","../src/services/passwordResetMode.ts","../src/services/publicUrl.ts","../src/services/sessionTokenGate.ts","../src/services/webhookEvents.ts","../src/services/artifacts/ArtifactStore.ts","../src/services/autowait/AutowaitService.ts","../src/services/autowait/waitFor.ts","../src/services/bug-report/BugReportService.ts","../src/services/bug-report/archive.ts","../src/services/bug-report/har-collector.ts","../src/services/bug-report/manifest.ts","../src/services/bug-report/readme.ts","../src/services/bug-report/types.ts","../src/services/bug-report/video-slice.ts","../src/services/bug-report/window.ts","../src/services/device-access/DeviceTeamResolver.ts","../src/services/device-access/LiveSessionOwners.ts","../src/services/device-access/SessionOwnerResolver.ts","../src/services/device-access/actor.ts","../src/services/device-access/appVisibility.ts","../src/services/device-access/callerTeamIds.ts","../src/services/device-access/deviceAccessPolicy.ts","../src/services/device-access/deviceVisibility.ts","../src/services/device-access/leaseHold.ts","../src/services/device-access/leaseOverride.ts","../src/services/device-access/queueVisibility.ts","../src/services/device-access/sessionVisibility.ts","../src/services/device-access/ticketActorAccess.ts","../src/services/healing/FuzzyXmlHealingProvider.ts","../src/services/healing/HealEtalonService.ts","../src/services/healing/HealedLocatorGenerator.ts","../src/services/healing/HealingMetrics.ts","../src/services/healing/HealingOrchestrator.ts","../src/services/healing/LlmHealingProvider.ts","../src/services/healing/OcrHealingProvider.ts","../src/services/healing/ResilioTreeHealingProvider.ts","../src/services/healing/VisualAiHealingProvider.ts","../src/services/healing/fingerprintIdentity.ts","../src/services/healing/resilioPath.ts","../src/services/healing/types.ts","../src/services/identity/bootstrap.ts","../src/services/identity/identityChanges.ts","../src/services/identity/sessionCleanupCron.ts","../src/services/identity/userAuthorization.ts","../src/services/inspector/verifyLocator.ts","../src/services/interceptor/AndroidProxyAdapter.ts","../src/services/interceptor/CertManager.ts","../src/services/interceptor/HarBuilder.ts","../src/services/interceptor/HostFilter.ts","../src/services/interceptor/MitmProxyHost.ts","../src/services/interceptor/MockEngine.ts","../src/services/interceptor/RequestBuffer.ts","../src/services/interceptor/SessionArchive.ts","../src/services/interceptor/interceptorOptions.ts","../src/services/interceptor/types.ts","../src/services/lease/LeaseOrphanSweeper.ts","../src/services/lease/LeaseService.ts","../src/services/lease/activeLeases.ts","../src/services/lease/buildCapabilityBag.ts","../src/services/lease/leaseSessionCaps.ts","../src/services/lease/leaseToken.ts","../src/services/logcat/PackageResolver.ts","../src/services/logcat/SessionDeviceLogs.ts","../src/services/logcat/deviceLogBook.ts","../src/services/logcat/iosDriverLog.ts","../src/services/logcat/logSource.ts","../src/services/logcat/logcatParse.ts","../src/services/logcat/ostraceParse.ts","../src/services/metrics/AndroidMetricsSampler.ts","../src/services/metrics/IOSMetricsSampler.ts","../src/services/metrics/NodeMetricsCollector.ts","../src/services/metrics/NodeMetricsStore.ts","../src/services/metrics/SessionMetricsService.ts","../src/services/metrics/androidMetrics.ts","../src/services/metrics/iosMetrics.ts","../src/services/metrics/metricsBody.ts","../src/services/metrics/nodeMetrics.ts","../src/services/metrics/types.ts","../src/services/network/AndroidRadios.ts","../src/services/network/PhoneNetworkLedger.ts","../src/services/network/PhoneNetworkRestore.ts","../src/services/network/adbForPhone.ts","../src/services/network/phoneNetworkLock.ts","../src/services/network/xenonProxy.ts","../src/services/ocr/ocrData.ts","../src/services/omni-vision/OmniVisionService.ts","../src/services/omni-vision/VisionAssertionService.ts","../src/services/omni-vision/ocrTextMatch.ts","../src/services/omni-vision/screenScale.ts","../src/services/ports/PortAllocatorClient.ts","../src/services/ports/PortAllocatorService.ts","../src/services/recording/RecordingOrchestrator.ts","../src/services/recording/activeRecordings.ts","../src/services/recording/annotation-render.ts","../src/services/recording/annotationImage.ts","../src/services/recording/busy-precheck.ts","../src/services/recording/concurrency-gate.ts","../src/services/recording/ensureMjpegForRecording.ts","../src/services/recording/manualLock.ts","../src/services/recording/nodeRecordingSource.ts","../src/services/recording/probeDuration.ts","../src/services/recording/proof-bundle.ts","../src/services/recording/recording-store.ts","../src/services/recording/recordingCleanup.ts","../src/services/recording/recordingFiles.ts","../src/services/recording/recordingSummary.ts","../src/services/recording/recordingTiming.ts","../src/services/selector-health/SelectorVisibilityResolver.ts","../src/services/selector-health/access.ts","../src/services/selector-health/healingTrend.ts","../src/services/selector-health/people.ts","../src/services/selector-health/selectorDetail.ts","../src/services/selector-health/selectorKeys.ts","../src/services/selector-health/selectorList.ts","../src/services/selector-health/stateView.ts","../src/services/session/appCapability.ts","../src/services/session/nodeCreateCaps.ts","../src/services/session/sessionCredentials.ts","../src/services/session/sessionIdentity.ts","../src/services/session/shutdownReason.ts","../src/services/session/xenonOptions.ts","../src/services/settings/SelfHealingSwitch.ts","../src/services/settings/aiEngineSettings.ts","../src/services/settings/labSettings.ts","../src/services/telemetry/attributes.ts","../src/services/token/AppDownloadTicketService.ts","../src/services/token/JwtKeyService.ts","../src/services/token/StreamTicketService.ts","../src/services/token/mcpScopes.ts","../src/services/token/mcpTokenTtl.ts","../src/services/token/mintedLifetime.ts","../src/services/token/singleUseLedger.ts","../src/sessions/CloudSession.ts","../src/sessions/LocalSession.ts","../src/sessions/RemoteSession.ts","../src/sessions/SessionManager.ts","../src/sessions/XenonSession.ts","../src/sessions/appiumUmbrella.ts","../src/sessions/sessionMemory.ts","../src/types/CLIArgs.ts","../src/types/CloudArgs.ts","../src/types/CloudSchema.ts","../src/types/DeviceType.ts","../src/types/DeviceUpdate.ts","../src/types/IOSDevice.ts","../src/types/Platform.ts","../src/types/SessionStatus.ts","../src/types/express.d.ts","../src/types/healing.d.ts","../src/types/identity.ts","../src/validators/CapabilityValidator.ts","../test/e2e/e2ehelper.ts","../test/e2e/plugin-harness.ts","../test/e2e/plugin.spec.ts","../test/e2e/startup-verification.spec.ts","../test/e2e/telemetry_verification.spec.ts","../test/e2e/video-recording-test.spec.js","../test/e2e/android/conf.spec.js","../test/e2e/android/conf2.spec.js","../test/e2e/android/conf3.spec.js","../test/e2e/hubnode/forward-request.spec.ts","../test/e2e/hubnode/hubnode.spec.ts","../test/e2e/ios/conf1.spec.js","../test/e2e/ios/conf2.spec.js","../test/helpers/appium-umbrella.ts","../test/helpers/artifact-store.ts","../test/helpers/container-registration.ts","../test/helpers/driver-log.ts","../test/helpers/expressRoutes.ts","../test/helpers/fake-adb.ts","../test/helpers/fake-ai-provider.ts","../test/helpers/fake-device-table.ts","../test/helpers/fake-http-proxy.ts","../test/helpers/loki-stores.ts","../test/helpers/loopbackRequest.ts","../test/helpers/loopbackServer.ts","../test/helpers/otlp-probe.ts","../test/helpers/own-node-id.ts","../test/helpers/page-sources.ts","../test/helpers/scratch-database.ts","../test/helpers/scratch-port-leases.ts","../test/helpers/seedUser.ts","../test/helpers/selector-health-fixture.ts","../test/helpers/test-container.ts","../test/integration/androidDevices.spec.ts","../test/integration/audit-ingest.spec.ts","../test/integration/auth-flow.spec.ts","../test/integration/auth-rate-limit.spec.ts","../test/integration/bug-report-route.spec.ts","../test/integration/cliArgs.js","../test/integration/cross-workflow.spec.ts","../test/integration/forgot-password-rate-limit.spec.ts","../test/integration/forgot-password.spec.ts","../test/integration/healing-events-sessionfilter.spec.ts","../test/integration/legacy-deprecation-headers.spec.ts","../test/integration/migration.spec.ts","../test/integration/node-pair-auth-rest.spec.ts","../test/integration/ports-router.spec.ts","../test/integration/prisma-device-store-add-devices.spec.ts","../test/integration/prisma-device-store-team-filter.spec.ts","../test/integration/profile-tokens.spec.ts","../test/integration/recordings-router.spec.ts","../test/integration/reset-revokes-sessions.spec.ts","../test/integration/role-matrix.spec.ts","../test/integration/sdk-leases-router.spec.ts","../test/integration/sdk-version.spec.ts","../test/integration/selector-health-endpoint.spec.ts","../test/integration/selector-state-flow.spec.ts","../test/integration/team-membership-migration.spec.ts","../test/integration/team-visibility-apps.spec.ts","../test/integration/team-visibility-control.spec.ts","../test/integration/team-visibility-dashboard.spec.ts","../test/integration/team-visibility-grid.spec.ts","../test/integration/team-visibility-leases.spec.ts","../test/integration/team-visibility-recordings.spec.ts","../test/integration/team-visibility-sessions.spec.ts","../test/integration/users-flow.spec.ts","../test/integration/users-lockout.spec.ts","../test/integration/ios/01iOSSimulator.spec.ts","../test/integration/ios/02iOSDevices.spec.ts","../test/setup/scratch-default-database.js","../test/unit/AndroidDeviceManager.spec.ts","../test/unit/ApiKeyService.test.ts","../test/unit/AppDownloadTicketService.spec.ts","../test/unit/ArtifactStore.spec.ts","../test/unit/AutowaitService.spec.ts","../test/unit/CapabilitiesRouter.spec.ts","../test/unit/ChromeDriverManager.spec.js","../test/unit/CleanupService.spec.ts","../test/unit/CommandInterceptor.autowait.spec.ts","../test/unit/DeviceModel.spec.ts","../test/unit/EmailService.test.ts","../test/unit/EventLogService.spec.ts","../test/unit/FuzzyXmlHealingProvider.test.ts","../test/unit/GetAdbOriginal.js","../test/unit/HealingCascade.test.ts","../test/unit/IOSDeviceManager.spec.js","../test/unit/JwtKeyService.spec.ts","../test/unit/McpScopes.spec.ts","../test/unit/OrphanSweeper.test.ts","../test/unit/PasswordResetService.test.ts","../test/unit/PortAllocator.test.ts","../test/unit/ProcessRegistry.test.ts","../test/unit/ProjectsRouter.spec.ts","../test/unit/RemoteIOs.spec.js","../test/unit/ResilioTreeHealingProvider.test.ts","../test/unit/SessionHeartbeatWrite.test.ts","../test/unit/SessionLifecycleCaps.spec.ts","../test/unit/SessionTokenGate.spec.ts","../test/unit/StreamTicketService.spec.ts","../test/unit/TeamService.test.ts","../test/unit/TokenEndpoint.spec.ts","../test/unit/UserService.test.ts","../test/unit/UserSessionService.test.ts","../test/unit/XenonCapabilityManager.spec.ts","../test/unit/access-scopes.spec.ts","../test/unit/active-recordings.spec.ts","../test/unit/aggregate-hotspots-session-scope.spec.ts","../test/unit/aggregate-hotspots-tuple-key.spec.ts","../test/unit/ai-call-time-limit.spec.ts","../test/unit/ai-engine-settings.spec.ts","../test/unit/ai-provider-switch.spec.ts","../test/unit/ai-rate-limit.spec.ts","../test/unit/android-adb-retry.spec.ts","../test/unit/android-clipboard.spec.ts","../test/unit/android-h264-config.spec.ts","../test/unit/android-h264-service.spec.ts","../test/unit/android-h264-viewers.spec.ts","../test/unit/android-identity.spec.ts","../test/unit/android-preview-hold.spec.ts","../test/unit/android-stream-adb-path.spec.ts","../test/unit/android-stream-encoder.spec.ts","../test/unit/android-stream-fast-start.spec.ts","../test/unit/android-stream-release.spec.ts","../test/unit/android-stream-reuse-service.spec.ts","../test/unit/android-stream-reuse.spec.ts","../test/unit/android-stream-stall-eof.spec.ts","../test/unit/annotation-image.spec.ts","../test/unit/annotation-render.spec.ts","../test/unit/api-error-handling.spec.ts","../test/unit/apikeys-router.spec.ts","../test/unit/apple-family.spec.ts","../test/unit/apple-identity.spec.ts","../test/unit/apps-download.spec.ts","../test/unit/apps-team-visibility.spec.ts","../test/unit/auth-disabled-resolution.spec.ts","../test/unit/auth-me-auth-disabled.test.ts","../test/unit/authMiddleware.appTicket.spec.ts","../test/unit/authMiddleware.bearer.spec.ts","../test/unit/authMiddleware.credentialLifetime.spec.ts","../test/unit/authMiddleware.mcpAudience.spec.ts","../test/unit/authMiddleware.streamTicket.spec.ts","../test/unit/authMiddleware.test.ts","../test/unit/boot-go-ios-reap.spec.ts","../test/unit/bootstrap-identity.test.ts","../test/unit/build-export.spec.ts","../test/unit/busy-precheck.spec.ts","../test/unit/cleanup-settings-db.spec.ts","../test/unit/cleanup-settings.spec.ts","../test/unit/cliargs-admin-only.spec.ts","../test/unit/clipboard-route.spec.ts","../test/unit/command-auth-appium-server.spec.ts","../test/unit/command-auth.spec.ts","../test/unit/command-caller.spec.ts","../test/unit/command-log-network-capture.spec.ts","../test/unit/commands.spec.js","../test/unit/composite-geometry.spec.ts","../test/unit/concurrency-gate.spec.ts","../test/unit/config.spec.js","../test/unit/container-registration.spec.ts","../test/unit/control-device-lookup.spec.ts","../test/unit/control-forward-decision.spec.ts","../test/unit/control-honest-answers.spec.ts","../test/unit/control-lookup-failure.spec.ts","../test/unit/create-error-message.spec.ts","../test/unit/create-handoff.spec.ts","../test/unit/dashboard-api-paths.spec.ts","../test/unit/dashboard-commands.spec.ts","../test/unit/dashboard-events-device-logs.spec.ts","../test/unit/dashboard-events-metrics.spec.ts","../test/unit/dashboard-events-team-scope.spec.ts","../test/unit/dashboard-plugin-link.spec.ts","../test/unit/database-check.spec.ts","../test/unit/default-plugin-args.spec.ts","../test/unit/device-access-guard.spec.ts","../test/unit/device-access-lease.spec.ts","../test/unit/device-access-policy.spec.ts","../test/unit/device-allocation-routes.spec.ts","../test/unit/device-columns.spec.ts","../test/unit/device-log-book.spec.ts","../test/unit/device-offline-webhook.spec.ts","../test/unit/device-service.spec.ts","../test/unit/device-setting-columns.spec.ts","../test/unit/device-settings-loki.spec.ts","../test/unit/device-settings-survive.spec.ts","../test/unit/device-store-clear-at-boot.spec.ts","../test/unit/device-sync-lost-update.spec.ts","../test/unit/device-team-guard.spec.ts","../test/unit/device-team-resolver.spec.ts","../test/unit/device-utils.spec.ts","../test/unit/display-state.spec.ts","../test/unit/emulator-boot.spec.ts","../test/unit/enable-dashboard-option.spec.ts","../test/unit/enrich-devices-team-names.test.ts","../test/unit/event-log-session-data.spec.ts","../test/unit/event-manager-regression-hook.spec.ts","../test/unit/extract-access-key-token-pair.test.ts","../test/unit/extract-team-cap.spec.ts","../test/unit/failure-analysis.spec.ts","../test/unit/failure-categories.spec.ts","../test/unit/failure-categorization.spec.ts","../test/unit/ffmpeg-path.spec.ts","../test/unit/fill-missing-screen-size.spec.ts","../test/unit/findAndLockDevice-leasemerge.spec.ts","../test/unit/fingerprint-identity.spec.ts","../test/unit/go-ios-version.spec.ts","../test/unit/grid-admin-only.spec.ts","../test/unit/h264-multiplexer.spec.ts","../test/unit/h264-nal-parser.spec.ts","../test/unit/h264-ws-frame.spec.ts","../test/unit/heal-report.spec.ts","../test/unit/healing-instrumentation.spec.ts","../test/unit/healing-no-cost.spec.ts","../test/unit/healing-state-endpoints.spec.ts","../test/unit/healing-tier-gate.spec.ts","../test/unit/healing-tiers-every-session.spec.ts","../test/unit/healing-trend.spec.ts","../test/unit/health-monitor-own-phones.spec.ts","../test/unit/health-monitor-stream-lookup.spec.ts","../test/unit/helpers.spec.ts","../test/unit/hub-boot-sweep-recovery.spec.ts","../test/unit/hub-create-once.spec.ts","../test/unit/hub-create-session-umbrella.spec.ts","../test/unit/hub-gateway-create-appium-server.spec.ts","../test/unit/hub-node-control-forward.spec.ts","../test/unit/hub-node-gateway-appium-server.spec.ts","../test/unit/hub-node-race.spec.ts","../test/unit/hub-node-same-host.spec.ts","../test/unit/hub-node-session-metrics.spec.ts","../test/unit/hub-register-removal.spec.ts","../test/unit/hub-remote-session-heartbeat.spec.ts","../test/unit/hub-routed-session-recovery.spec.ts","../test/unit/hub-session-token.spec.ts","../test/unit/insert-before-routes.spec.ts","../test/unit/inspector-hierarchy.spec.ts","../test/unit/install-repository-app-team.spec.ts","../test/unit/interceptor-visual-elements.spec.ts","../test/unit/internal-call.spec.ts","../test/unit/ios-discovery-same-host.spec.ts","../test/unit/ios-driver-log.spec.ts","../test/unit/ios-go-ios-tunnel-env.spec.ts","../test/unit/ios-idle-hold.spec.ts","../test/unit/ios-no-network-fallback.spec.ts","../test/unit/ios-simulator-session-readiness.spec.ts","../test/unit/ios-simulator-session-teardown.spec.ts","../test/unit/ios-stream-appium-tunnel.spec.ts","../test/unit/ios-stream-port-leases.spec.ts","../test/unit/ios-stream-port.spec.ts","../test/unit/ios-tunnel-process.spec.ts","../test/unit/ios-tunnels.spec.ts","../test/unit/ios-usbmuxd-missing.spec.ts","../test/unit/ios-wda-status-identity.spec.ts","../test/unit/iosBattery.spec.ts","../test/unit/iosStreamDiagnostics.spec.ts","../test/unit/iphone-ipad-only.spec.ts","../test/unit/is-xenon-running.spec.ts","../test/unit/json-logging-option.spec.ts","../test/unit/lab-settings.spec.ts","../test/unit/lease-held-phone.spec.ts","../test/unit/logcat-multiplexer.spec.ts","../test/unit/logcat-parse.spec.ts","../test/unit/logcat-stream-service.spec.ts","../test/unit/logcat-ws.spec.ts","../test/unit/logger-json-levels.spec.ts","../test/unit/loginRateLimiter.test.ts","../test/unit/loopback-request.spec.ts","../test/unit/manualLock.test.ts","../test/unit/mark-node-busy-loki.spec.ts","../test/unit/max-sessions.spec.ts","../test/unit/mcp-token-ttl.spec.ts","../test/unit/mjpeg-proxy-cache.spec.ts","../test/unit/network-addresses.test.ts","../test/unit/node-create-caps.spec.ts","../test/unit/node-gateway-create-appium-server.spec.ts","../test/unit/node-hub-session-owner.spec.ts","../test/unit/node-metrics-collector.spec.ts","../test/unit/node-metrics-store.spec.ts","../test/unit/node-phone-control.spec.ts","../test/unit/node-recording-relay.spec.ts","../test/unit/node-session-metrics-route.spec.ts","../test/unit/node-socket-relay.spec.ts","../test/unit/normalize-eol.spec.js","../test/unit/observability-example-loki.spec.ts","../test/unit/ocr-healing-tier-real-ocr.spec.ts","../test/unit/ocr-healing-tier.spec.ts","../test/unit/ocr-offline.spec.ts","../test/unit/ocr-text-match.spec.ts","../test/unit/omni-virtual-element-store.spec.ts","../test/unit/omni-vision-analyze-screen.spec.ts","../test/unit/omni-vision-failures.spec.ts","../test/unit/omni-vision-ios-points.spec.ts","../test/unit/omni-vision-tap-text.spec.ts","../test/unit/omni-vision.spec.ts","../test/unit/openapi-coverage.spec.ts","../test/unit/openapi-for-site.spec.ts","../test/unit/ostrace-parse.spec.ts","../test/unit/outbound-proxy.spec.ts","../test/unit/package-engines.spec.ts","../test/unit/package-resolver.spec.ts","../test/unit/partial-config-file.spec.ts","../test/unit/passwordResetMode.test.ts","../test/unit/plugin.spec.ts","../test/unit/port-allocator-os-probe.spec.ts","../test/unit/port-allocator-pairs.spec.ts","../test/unit/port-exhaustion.spec.ts","../test/unit/prisma.spec.ts","../test/unit/probe-duration.spec.ts","../test/unit/profile-router.test.ts","../test/unit/profileIdentity.spec.ts","../test/unit/proof-bundle.spec.ts","../test/unit/proxy-option.spec.ts","../test/unit/queue-requester.spec.ts","../test/unit/queue-team-scope-routes.spec.ts","../test/unit/queue-visibility.spec.ts","../test/unit/rateLimitMiddleware.test.ts","../test/unit/recording-cleanup.spec.ts","../test/unit/recording-downloads-visibility.spec.ts","../test/unit/recording-files.spec.ts","../test/unit/recording-instrumentation.spec.ts","../test/unit/recording-options.spec.ts","../test/unit/recording-orchestrator.spec.ts","../test/unit/recording-requests.spec.ts","../test/unit/recording-source-ended.spec.ts","../test/unit/recording-store.spec.ts","../test/unit/recording-summary.spec.ts","../test/unit/recording-timing.spec.ts","../test/unit/recordings-library-routes.spec.ts","../test/unit/recordings-write-visibility.spec.ts","../test/unit/remote-session-create.spec.ts","../test/unit/remux-to-standard-mp4.spec.ts","../test/unit/reservation-team-visibility.spec.ts","../test/unit/reset-link-address.spec.ts","../test/unit/reset-link.test.ts","../test/unit/resilio-path-healing.spec.ts","../test/unit/roleGuard.test.ts","../test/unit/run-migrations-database.spec.ts","../test/unit/run-migrations-fail-fast.test.ts","../test/unit/run-migrations.test.ts","../test/unit/schema-required-args.spec.ts","../test/unit/scrcpy-server-session.spec.ts","../test/unit/scrcpy-version.spec.ts","../test/unit/screenshot-route.spec.ts","../test/unit/selector-event-model.spec.ts","../test/unit/selector-health-actions.spec.ts","../test/unit/selector-health-detail.spec.ts","../test/unit/selector-health-list.spec.ts","../test/unit/selector-learning-every-session.spec.ts","../test/unit/selector-state-service.spec.ts","../test/unit/selector-verification-clean-build.spec.ts","../test/unit/selector-verification-job.spec.ts","../test/unit/selector-verification-missed-regression.spec.ts","../test/unit/selector-visibility-resolver.spec.ts","../test/unit/self-healing-boot.spec.ts","../test/unit/self-healing-setting.spec.ts","../test/unit/session-app-resolution.spec.ts","../test/unit/session-assets.spec.ts","../test/unit/session-attribution-wiring.spec.ts","../test/unit/session-create-credential-owner.spec.ts","../test/unit/session-create-layer.spec.ts","../test/unit/session-credential-strip.spec.ts","../test/unit/session-credentials.spec.ts","../test/unit/session-device-logs-ios.spec.ts","../test/unit/session-device-logs.spec.ts","../test/unit/session-end-failure-analysis.spec.ts","../test/unit/session-failed-webhook.spec.ts","../test/unit/session-identity.spec.ts","../test/unit/session-list-insights.spec.ts","../test/unit/session-listing-auth.spec.ts","../test/unit/session-locator.spec.ts","../test/unit/session-log-indexes.spec.ts","../test/unit/session-metrics-lifecycle.spec.ts","../test/unit/session-metrics-parse.spec.ts","../test/unit/session-metrics-route.spec.ts","../test/unit/session-metrics-samplers.spec.ts","../test/unit/session-metrics-service.spec.ts","../test/unit/session-node-calls.spec.ts","../test/unit/session-owner-resolver.spec.ts","../test/unit/session-recovery-metrics.spec.ts","../test/unit/session-recovery-routing.spec.ts","../test/unit/session-upgrade-guard.spec.ts","../test/unit/session-visibility.spec.ts","../test/unit/shell-commands.spec.ts","../test/unit/shutdown-drain-remote.spec.ts","../test/unit/shutdown-sync-nets.spec.ts","../test/unit/single-flight.spec.ts","../test/unit/socket-team-scope.integration.spec.ts","../test/unit/socketServer.bearer.spec.ts","../test/unit/socketServer.scopedEmit.spec.ts","../test/unit/socketServer.sessionCookie.spec.ts","../test/unit/stored-session-capabilities.spec.ts","../test/unit/stream-leave-route.spec.ts","../test/unit/stream-leave.spec.ts","../test/unit/stream-own-device-row.spec.ts","../test/unit/stream-start-conflict.spec.ts","../test/unit/stream-start-pipelines.spec.ts","../test/unit/stream-status-type.spec.ts","../test/unit/stream-stop-ownership.spec.ts","../test/unit/stream-stop-recording.spec.ts","../test/unit/stream-ticket-identity.spec.ts","../test/unit/stream-viewer-hangup.spec.ts","../test/unit/stream-watchdog-timers.spec.ts","../test/unit/sync-dir.spec.ts","../test/unit/team-filter.test.ts","../test/unit/token-mint-limits.spec.ts","../test/unit/tracing-export-routing.spec.ts","../test/unit/tracing-service-init.spec.ts","../test/unit/tracing-session-spans.spec.ts","../test/unit/unexpected-shutdown-reason.spec.ts","../test/unit/upgrade-router.spec.ts","../test/unit/upload-install-route.spec.ts","../test/unit/userAuthorization.test.ts","../test/unit/users-router.test.ts","../test/unit/verify-credential.spec.ts","../test/unit/verify-locator.spec.ts","../test/unit/video-pipeline-args.spec.ts","../test/unit/video-pipeline-exit.spec.ts","../test/unit/video-pipeline-outputpath.spec.ts","../test/unit/vision-assertion.spec.ts","../test/unit/wda-cap-injection.spec.ts","../test/unit/wda-client-failures.spec.ts","../test/unit/wda-client-session.spec.ts","../test/unit/wda-client-shell.spec.ts","../test/unit/wda-clipboard-write.spec.ts","../test/unit/web-config-service.spec.ts","../test/unit/webdriver-info-route.spec.ts","../test/unit/webhook-delivery.spec.ts","../test/unit/webhook-payloads.spec.ts","../test/unit/ws-upgrade-routing-appium-server.spec.ts","../test/unit/xenon-execute-scripts.spec.ts","../test/unit/xenon-options.spec.ts","../test/unit/bug-report/archive.spec.ts","../test/unit/bug-report/har-collector.spec.ts","../test/unit/bug-report/manifest.spec.ts","../test/unit/bug-report/readme.spec.ts","../test/unit/bug-report/route.spec.ts","../test/unit/bug-report/service.spec.ts","../test/unit/bug-report/video-slice.spec.ts","../test/unit/bug-report/window.spec.ts","../test/unit/fixtures/device.config.js","../test/unit/fixtures/devices.js","../test/unit/interceptor/AndroidProxyAdapter.spec.ts","../test/unit/interceptor/CertManager.spec.ts","../test/unit/interceptor/HarBuilder.spec.ts","../test/unit/interceptor/HostFilter.spec.ts","../test/unit/interceptor/MitmProxyHost.spec.ts","../test/unit/interceptor/MockEngine.spec.ts","../test/unit/interceptor/RequestBuffer.spec.ts","../test/unit/interceptor/SessionArchive.spec.ts","../test/unit/lease/LeaseOrphanSweeper.spec.ts","../test/unit/lease/LeaseService.spec.ts","../test/unit/lease/allocate-lease-branch.spec.ts","../test/unit/lease/buildCapabilityBag.spec.ts","../test/unit/lease/lease-device-match.spec.ts","../test/unit/lease/lease-override.spec.ts","../test/unit/lease/lease-reap-held-phone.spec.ts","../test/unit/lease/lease-session-ownership.spec.ts","../test/unit/lease/lease-sweeper-expiry.spec.ts","../test/unit/lease/lease-team-visibility.spec.ts","../test/unit/lease/lease-token-log-filter.spec.ts","../test/unit/lease/lease-token-oracle.spec.ts","../test/unit/lease/leaseToken.spec.ts","../test/unit/lease/nodePairAuth.spec.ts","../test/unit/lease/session-lease-proof.spec.ts","../test/unit/phone-network/boot-clean-up.spec.ts","../test/unit/phone-network/interceptor-options.spec.ts","../test/unit/phone-network/interceptor-proxy-restore.spec.ts","../test/unit/phone-network/network-conditioning.spec.ts","../test/unit/phone-network/phone-network-restore.spec.ts","../test/unit/phone-network/session-end-paths.spec.ts","../test/unit/phone-network/session-start.spec.ts","../test/unit/phone-network/xenon-proxy.spec.ts","../test/unit/ports/PortAllocatorService.spec.ts"],"version":"5.9.3"}
|
|
1
|
+
{"root":["../src/InternalHttpClient.ts","../src/PluginContext.ts","../src/XenonCapabilityManager.ts","../src/chromeUtils.ts","../src/config.ts","../src/device-utils.ts","../src/index.ts","../src/logger.ts","../src/plugin.ts","../src/prisma.ts","../src/app/apiErrors.ts","../src/app/appiumBasePath.ts","../src/app/dashboardPluginLink.ts","../src/app/index.ts","../src/app/insertBeforeRoutes.ts","../src/app/registerCommandAuth.ts","../src/app/swagger.ts","../src/app/routers/androidH264Config.ts","../src/app/routers/apikeys.ts","../src/app/routers/apps.ts","../src/app/routers/audit.ts","../src/app/routers/auth.ts","../src/app/routers/bug-report.ts","../src/app/routers/build-export.ts","../src/app/routers/capabilities.ts","../src/app/routers/config.ts","../src/app/routers/control.ts","../src/app/routers/dashboard.ts","../src/app/routers/grid.ts","../src/app/routers/interceptor.ts","../src/app/routers/iosStreamPort.ts","../src/app/routers/nodePhoneControl.ts","../src/app/routers/ports.ts","../src/app/routers/processes.ts","../src/app/routers/profile.ts","../src/app/routers/profileIdentity.ts","../src/app/routers/projects.ts","../src/app/routers/recordingRequests.ts","../src/app/routers/recordings.ts","../src/app/routers/reservation.ts","../src/app/routers/sdk-leases.ts","../src/app/routers/sdk-version.ts","../src/app/routers/selector-health.ts","../src/app/routers/sessionInsights.ts","../src/app/routers/streamLeave.ts","../src/app/routers/streamStartConflict.ts","../src/app/routers/streamType.ts","../src/app/routers/teams.ts","../src/app/routers/users.ts","../src/app/routers/webhook.ts","../src/app/ws/h264StreamWs.ts","../src/app/ws/logcatWs.ts","../src/app/ws/nodeSocketRelay.ts","../src/app/ws/upgradeRouter.ts","../src/commands/handle.ts","../src/commands/index.ts","../src/dashboard/asset-manager.ts","../src/dashboard/commandLogFields.ts","../src/dashboard/commands.ts","../src/dashboard/event-manager.ts","../src/dashboard/sessionCommandSummary.ts","../src/dashboard/services/app-service.ts","../src/dashboard/services/failure-analysis-service.ts","../src/dashboard/services/failureCategories.ts","../src/dashboard/services/session-service.ts","../src/data-service/CircuitBreaker.ts","../src/data-service/appleFamily.ts","../src/data-service/config-service.ts","../src/data-service/db.ts","../src/data-service/device-service.ts","../src/data-service/device-store.interface.ts","../src/data-service/device-store.ts","../src/data-service/deviceClaims.ts","../src/data-service/deviceColumns.ts","../src/data-service/deviceFieldOwners.ts","../src/data-service/deviceSettings.ts","../src/data-service/pending-sessions-service.ts","../src/data-service/pluginArgs.ts","../src/data-service/prisma-service.ts","../src/data-service/prisma-store.ts","../src/data-service/queue-service.ts","../src/data-service/web-config-service.ts","../src/device-managers/AndroidDeviceManager.ts","../src/device-managers/ChromeDriverManager.ts","../src/device-managers/HealthMonitorService.ts","../src/device-managers/IOSDeviceManager.ts","../src/device-managers/NodeDevices.ts","../src/device-managers/clipboardErrors.ts","../src/device-managers/deviceIdentity.ts","../src/device-managers/iOSTracker.ts","../src/device-managers/index.ts","../src/device-managers/localDeviceHosts.ts","../src/device-managers/ownDeviceRow.ts","../src/device-managers/shellCommands.ts","../src/device-managers/android/AndroidH264StreamService.ts","../src/device-managers/android/AndroidStreamService.ts","../src/device-managers/android/DeviceLockManager.ts","../src/device-managers/android/H264Multiplexer.ts","../src/device-managers/android/LogcatMultiplexer.ts","../src/device-managers/android/LogcatStreamService.ts","../src/device-managers/android/ScrcpyServerSession.ts","../src/device-managers/android/androidIdentity.ts","../src/device-managers/android/androidStreamReuse.ts","../src/device-managers/android/clipboardBroadcast.ts","../src/device-managers/android/displayState.ts","../src/device-managers/android/h264NalParser.ts","../src/device-managers/android/previewHold.ts","../src/device-managers/android/scrcpyVersion.ts","../src/device-managers/cloud/CapabilityManager.ts","../src/device-managers/cloud/Devices.ts","../src/device-managers/ios/IOSDiscoveryService.ts","../src/device-managers/ios/IOSLogStreamService.ts","../src/device-managers/ios/IOSStreamService.ts","../src/device-managers/ios/IOSTunnels.ts","../src/device-managers/ios/WDAClient.ts","../src/device-managers/ios/appleIdentity.ts","../src/device-managers/ios/goIosBinary.ts","../src/device-managers/ios/iosAppIds.ts","../src/device-managers/ios/iosBattery.ts","../src/device-managers/ios/iosStreamDiagnostics.ts","../src/device-managers/ios/tunnelProcess.ts","../src/device-managers/ios/usbmuxd.ts","../src/enums/Capabilities.ts","../src/enums/Cloud.ts","../src/enums/Platform.ts","../src/enums/SessionType.ts","../src/enums/SocketEvents.ts","../src/gateway/createHandoff.ts","../src/gateway/defaultGateway.ts","../src/gateway/forwardToNode.ts","../src/gateway/healReport.ts","../src/gateway/hubSessionToken.ts","../src/gateway/internalCall.ts","../src/gateway/nodeAsk.ts","../src/gateway/nodeSessionDeviceLogs.ts","../src/gateway/nodeSessionMetrics.ts","../src/gateway/nodeSessionStatus.ts","../src/gateway/nodeWebDriverUrl.ts","../src/gateway/sessionCreate.ts","../src/gateway/sessionGateway.ts","../src/gateway/sessionLocator.ts","../src/generated/client/default.d.ts","../src/generated/client/default.js","../src/generated/client/edge.d.ts","../src/generated/client/edge.js","../src/generated/client/index-browser.js","../src/generated/client/index.d.ts","../src/generated/client/index.js","../src/generated/client/wasm.d.ts","../src/generated/client/wasm.js","../src/generated/client/runtime/edge-esm.js","../src/generated/client/runtime/edge.js","../src/generated/client/runtime/index-browser.d.ts","../src/generated/client/runtime/index-browser.js","../src/generated/client/runtime/library.d.ts","../src/generated/client/runtime/library.js","../src/generated/client/runtime/react-native.js","../src/generated/client/runtime/wasm.js","../src/helpers/UniversalMjpegProxy.ts","../src/helpers/ffmpegPath.ts","../src/helpers/index.ts","../src/helpers/networkAddresses.ts","../src/helpers/outboundProxy.ts","../src/helpers/singleFlight.ts","../src/interceptors/CommandInterceptor.ts","../src/interceptors/xenonScripts.ts","../src/interfaces/ICloudManager.ts","../src/interfaces/IDevice.ts","../src/interfaces/IDeviceFilterOptions.ts","../src/interfaces/IDeviceManager.ts","../src/interfaces/IOptions.ts","../src/interfaces/IPluginArgs.ts","../src/interfaces/ISessionCapability.ts","../src/logging/sessionContext.ts","../src/middleware/authMiddleware.ts","../src/middleware/commandAuth.ts","../src/middleware/commandCaller.ts","../src/middleware/controlDevice.ts","../src/middleware/csrfMiddleware.ts","../src/middleware/deviceAccessGuard.ts","../src/middleware/deviceTeamGuard.ts","../src/middleware/leaseTokenMiddleware.ts","../src/middleware/loginRateLimiter.ts","../src/middleware/rateLimitMiddleware.ts","../src/middleware/roleGuard.ts","../src/middleware/scopeGuard.ts","../src/middleware/sessionListingFilter.ts","../src/middleware/sessionUpgradeGuard.ts","../src/middleware/verifyCredential.ts","../src/scripts/database-check.ts","../src/scripts/generate-database-migration.ts","../src/scripts/goIosVersion.ts","../src/scripts/initialize-database.ts","../src/scripts/install-go-ios.ts","../src/scripts/run-migrations.ts","../src/services/AICommandService.ts","../src/services/AIService.ts","../src/services/ApiKeyService.ts","../src/services/CircuitBreaker.ts","../src/services/CleanupService.ts","../src/services/DeviceReconciler.ts","../src/services/DisplayStateService.ts","../src/services/EmailService.ts","../src/services/EventBus.ts","../src/services/EventLogService.ts","../src/services/InspectorService.ts","../src/services/InterceptorService.ts","../src/services/MetricsService.ts","../src/services/NetworkConditioningService.ts","../src/services/NotificationService.ts","../src/services/OrphanSweeper.ts","../src/services/PasswordResetService.ts","../src/services/PortAllocator.ts","../src/services/ProcessMetricsService.ts","../src/services/ProcessRegistry.ts","../src/services/RequestLogService.ts","../src/services/ResourceIsolationService.ts","../src/services/SecurityService.ts","../src/services/SelectorStateService.ts","../src/services/SelectorVerificationJob.ts","../src/services/ServerManager.ts","../src/services/SessionHeartbeatService.ts","../src/services/SessionLifecycleService.ts","../src/services/ShutdownCoordinator.ts","../src/services/SocketClient.ts","../src/services/SocketServer.ts","../src/services/TeamService.ts","../src/services/TracingService.ts","../src/services/UserService.ts","../src/services/UserSessionService.ts","../src/services/VideoPipelineService.ts","../src/services/fillMissingScreenSize.ts","../src/services/passwordResetLink.ts","../src/services/passwordResetMode.ts","../src/services/publicUrl.ts","../src/services/sessionTokenGate.ts","../src/services/webhookEvents.ts","../src/services/artifacts/ArtifactStore.ts","../src/services/autowait/AutowaitService.ts","../src/services/autowait/waitFor.ts","../src/services/bug-report/BugReportService.ts","../src/services/bug-report/archive.ts","../src/services/bug-report/har-collector.ts","../src/services/bug-report/manifest.ts","../src/services/bug-report/readme.ts","../src/services/bug-report/types.ts","../src/services/bug-report/video-slice.ts","../src/services/bug-report/window.ts","../src/services/device-access/DeviceTeamResolver.ts","../src/services/device-access/LiveSessionOwners.ts","../src/services/device-access/SessionOwnerResolver.ts","../src/services/device-access/actor.ts","../src/services/device-access/appVisibility.ts","../src/services/device-access/callerTeamIds.ts","../src/services/device-access/deviceAccessPolicy.ts","../src/services/device-access/deviceVisibility.ts","../src/services/device-access/leaseHold.ts","../src/services/device-access/leaseOverride.ts","../src/services/device-access/queueVisibility.ts","../src/services/device-access/sessionVisibility.ts","../src/services/device-access/ticketActorAccess.ts","../src/services/healing/FuzzyXmlHealingProvider.ts","../src/services/healing/HealEtalonService.ts","../src/services/healing/HealedLocatorGenerator.ts","../src/services/healing/HealingMetrics.ts","../src/services/healing/HealingOrchestrator.ts","../src/services/healing/LlmHealingProvider.ts","../src/services/healing/OcrHealingProvider.ts","../src/services/healing/ResilioTreeHealingProvider.ts","../src/services/healing/VisualAiHealingProvider.ts","../src/services/healing/fingerprintIdentity.ts","../src/services/healing/resilioPath.ts","../src/services/healing/types.ts","../src/services/identity/bootstrap.ts","../src/services/identity/identityChanges.ts","../src/services/identity/sessionCleanupCron.ts","../src/services/identity/userAuthorization.ts","../src/services/inspector/verifyLocator.ts","../src/services/interceptor/AndroidProxyAdapter.ts","../src/services/interceptor/CertManager.ts","../src/services/interceptor/HarBuilder.ts","../src/services/interceptor/HostFilter.ts","../src/services/interceptor/MitmProxyHost.ts","../src/services/interceptor/MockEngine.ts","../src/services/interceptor/RequestBuffer.ts","../src/services/interceptor/SessionArchive.ts","../src/services/interceptor/interceptorOptions.ts","../src/services/interceptor/types.ts","../src/services/lease/LeaseOrphanSweeper.ts","../src/services/lease/LeaseService.ts","../src/services/lease/activeLeases.ts","../src/services/lease/buildCapabilityBag.ts","../src/services/lease/leaseSessionCaps.ts","../src/services/lease/leaseToken.ts","../src/services/logcat/NodeDeviceLogStore.ts","../src/services/logcat/NodeDeviceLogsCollector.ts","../src/services/logcat/PackageResolver.ts","../src/services/logcat/SessionDeviceLogs.ts","../src/services/logcat/deviceLogBook.ts","../src/services/logcat/iosDriverLog.ts","../src/services/logcat/logSource.ts","../src/services/logcat/logcatParse.ts","../src/services/logcat/nodeDeviceLogs.ts","../src/services/logcat/ostraceParse.ts","../src/services/metrics/AndroidMetricsSampler.ts","../src/services/metrics/IOSMetricsSampler.ts","../src/services/metrics/NodeMetricsCollector.ts","../src/services/metrics/NodeMetricsStore.ts","../src/services/metrics/SessionMetricsService.ts","../src/services/metrics/androidMetrics.ts","../src/services/metrics/iosMetrics.ts","../src/services/metrics/metricsBody.ts","../src/services/metrics/nodeMetrics.ts","../src/services/metrics/types.ts","../src/services/network/AndroidRadios.ts","../src/services/network/PhoneNetworkLedger.ts","../src/services/network/PhoneNetworkRestore.ts","../src/services/network/adbForPhone.ts","../src/services/network/phoneNetworkLock.ts","../src/services/network/xenonProxy.ts","../src/services/ocr/ocrData.ts","../src/services/omni-vision/OmniVisionService.ts","../src/services/omni-vision/VisionAssertionService.ts","../src/services/omni-vision/ocrTextMatch.ts","../src/services/omni-vision/screenScale.ts","../src/services/ports/PortAllocatorClient.ts","../src/services/ports/PortAllocatorService.ts","../src/services/recording/RecordingOrchestrator.ts","../src/services/recording/activeRecordings.ts","../src/services/recording/annotation-render.ts","../src/services/recording/annotationImage.ts","../src/services/recording/busy-precheck.ts","../src/services/recording/concurrency-gate.ts","../src/services/recording/ensureMjpegForRecording.ts","../src/services/recording/manualLock.ts","../src/services/recording/nodeRecordingSource.ts","../src/services/recording/probeDuration.ts","../src/services/recording/proof-bundle.ts","../src/services/recording/recording-store.ts","../src/services/recording/recordingCleanup.ts","../src/services/recording/recordingFiles.ts","../src/services/recording/recordingSummary.ts","../src/services/recording/recordingTiming.ts","../src/services/selector-health/SelectorVisibilityResolver.ts","../src/services/selector-health/access.ts","../src/services/selector-health/healingTrend.ts","../src/services/selector-health/people.ts","../src/services/selector-health/selectorDetail.ts","../src/services/selector-health/selectorKeys.ts","../src/services/selector-health/selectorList.ts","../src/services/selector-health/stateView.ts","../src/services/session/appCapability.ts","../src/services/session/nodeCreateCaps.ts","../src/services/session/sessionCredentials.ts","../src/services/session/sessionIdentity.ts","../src/services/session/shutdownReason.ts","../src/services/session/xenonOptions.ts","../src/services/settings/SelfHealingSwitch.ts","../src/services/settings/aiEngineSettings.ts","../src/services/settings/labSettings.ts","../src/services/telemetry/attributes.ts","../src/services/token/AppDownloadTicketService.ts","../src/services/token/JwtKeyService.ts","../src/services/token/StreamTicketService.ts","../src/services/token/mcpScopes.ts","../src/services/token/mcpTokenTtl.ts","../src/services/token/mintedLifetime.ts","../src/services/token/singleUseLedger.ts","../src/sessions/CloudSession.ts","../src/sessions/LocalSession.ts","../src/sessions/RemoteSession.ts","../src/sessions/SessionManager.ts","../src/sessions/XenonSession.ts","../src/sessions/appiumUmbrella.ts","../src/sessions/sessionMemory.ts","../src/types/CLIArgs.ts","../src/types/CloudArgs.ts","../src/types/CloudSchema.ts","../src/types/DeviceType.ts","../src/types/DeviceUpdate.ts","../src/types/IOSDevice.ts","../src/types/Platform.ts","../src/types/SessionStatus.ts","../src/types/express.d.ts","../src/types/healing.d.ts","../src/types/identity.ts","../src/validators/CapabilityValidator.ts","../test/e2e/e2ehelper.ts","../test/e2e/plugin-harness.ts","../test/e2e/plugin.spec.ts","../test/e2e/startup-verification.spec.ts","../test/e2e/telemetry_verification.spec.ts","../test/e2e/video-recording-test.spec.js","../test/e2e/android/conf.spec.js","../test/e2e/android/conf2.spec.js","../test/e2e/android/conf3.spec.js","../test/e2e/hubnode/forward-request.spec.ts","../test/e2e/hubnode/hubnode.spec.ts","../test/e2e/ios/conf1.spec.js","../test/e2e/ios/conf2.spec.js","../test/helpers/appium-umbrella.ts","../test/helpers/artifact-store.ts","../test/helpers/container-registration.ts","../test/helpers/driver-log.ts","../test/helpers/expressRoutes.ts","../test/helpers/fake-adb.ts","../test/helpers/fake-ai-provider.ts","../test/helpers/fake-device-table.ts","../test/helpers/fake-http-proxy.ts","../test/helpers/fake-logcat.ts","../test/helpers/hub-node-pair.ts","../test/helpers/loki-stores.ts","../test/helpers/loopbackRequest.ts","../test/helpers/loopbackServer.ts","../test/helpers/otlp-probe.ts","../test/helpers/own-node-id.ts","../test/helpers/page-sources.ts","../test/helpers/scratch-database.ts","../test/helpers/scratch-port-leases.ts","../test/helpers/seedUser.ts","../test/helpers/selector-health-fixture.ts","../test/helpers/test-container.ts","../test/integration/androidDevices.spec.ts","../test/integration/audit-ingest.spec.ts","../test/integration/auth-flow.spec.ts","../test/integration/auth-rate-limit.spec.ts","../test/integration/bug-report-route.spec.ts","../test/integration/cliArgs.js","../test/integration/cross-workflow.spec.ts","../test/integration/forgot-password-rate-limit.spec.ts","../test/integration/forgot-password.spec.ts","../test/integration/healing-events-sessionfilter.spec.ts","../test/integration/legacy-deprecation-headers.spec.ts","../test/integration/migration.spec.ts","../test/integration/node-pair-auth-rest.spec.ts","../test/integration/ports-router.spec.ts","../test/integration/prisma-device-store-add-devices.spec.ts","../test/integration/prisma-device-store-team-filter.spec.ts","../test/integration/profile-tokens.spec.ts","../test/integration/recordings-router.spec.ts","../test/integration/reset-revokes-sessions.spec.ts","../test/integration/role-matrix.spec.ts","../test/integration/sdk-leases-router.spec.ts","../test/integration/sdk-version.spec.ts","../test/integration/selector-health-endpoint.spec.ts","../test/integration/selector-state-flow.spec.ts","../test/integration/team-membership-migration.spec.ts","../test/integration/team-visibility-apps.spec.ts","../test/integration/team-visibility-control.spec.ts","../test/integration/team-visibility-dashboard.spec.ts","../test/integration/team-visibility-grid.spec.ts","../test/integration/team-visibility-leases.spec.ts","../test/integration/team-visibility-recordings.spec.ts","../test/integration/team-visibility-sessions.spec.ts","../test/integration/users-flow.spec.ts","../test/integration/users-lockout.spec.ts","../test/integration/ios/01iOSSimulator.spec.ts","../test/integration/ios/02iOSDevices.spec.ts","../test/setup/scratch-default-database.js","../test/unit/AndroidDeviceManager.spec.ts","../test/unit/ApiKeyService.test.ts","../test/unit/AppDownloadTicketService.spec.ts","../test/unit/ArtifactStore.spec.ts","../test/unit/AutowaitService.spec.ts","../test/unit/CapabilitiesRouter.spec.ts","../test/unit/ChromeDriverManager.spec.js","../test/unit/CleanupService.spec.ts","../test/unit/CommandInterceptor.autowait.spec.ts","../test/unit/DeviceModel.spec.ts","../test/unit/EmailService.test.ts","../test/unit/EventLogService.spec.ts","../test/unit/FuzzyXmlHealingProvider.test.ts","../test/unit/GetAdbOriginal.js","../test/unit/HealingCascade.test.ts","../test/unit/IOSDeviceManager.spec.js","../test/unit/JwtKeyService.spec.ts","../test/unit/McpScopes.spec.ts","../test/unit/OrphanSweeper.test.ts","../test/unit/PasswordResetService.test.ts","../test/unit/PortAllocator.test.ts","../test/unit/ProcessRegistry.test.ts","../test/unit/ProjectsRouter.spec.ts","../test/unit/RemoteIOs.spec.js","../test/unit/ResilioTreeHealingProvider.test.ts","../test/unit/SessionHeartbeatWrite.test.ts","../test/unit/SessionLifecycleCaps.spec.ts","../test/unit/SessionTokenGate.spec.ts","../test/unit/StreamTicketService.spec.ts","../test/unit/TeamService.test.ts","../test/unit/TokenEndpoint.spec.ts","../test/unit/UserService.test.ts","../test/unit/UserSessionService.test.ts","../test/unit/XenonCapabilityManager.spec.ts","../test/unit/access-scopes.spec.ts","../test/unit/active-recordings.spec.ts","../test/unit/aggregate-hotspots-session-scope.spec.ts","../test/unit/aggregate-hotspots-tuple-key.spec.ts","../test/unit/ai-call-time-limit.spec.ts","../test/unit/ai-engine-settings.spec.ts","../test/unit/ai-provider-switch.spec.ts","../test/unit/ai-rate-limit.spec.ts","../test/unit/android-adb-retry.spec.ts","../test/unit/android-clipboard.spec.ts","../test/unit/android-h264-config.spec.ts","../test/unit/android-h264-service.spec.ts","../test/unit/android-h264-viewers.spec.ts","../test/unit/android-identity.spec.ts","../test/unit/android-preview-hold.spec.ts","../test/unit/android-stream-adb-path.spec.ts","../test/unit/android-stream-encoder.spec.ts","../test/unit/android-stream-fast-start.spec.ts","../test/unit/android-stream-release.spec.ts","../test/unit/android-stream-reuse-service.spec.ts","../test/unit/android-stream-reuse.spec.ts","../test/unit/android-stream-stall-eof.spec.ts","../test/unit/annotation-image.spec.ts","../test/unit/annotation-render.spec.ts","../test/unit/api-error-handling.spec.ts","../test/unit/apikeys-router.spec.ts","../test/unit/apple-family.spec.ts","../test/unit/apple-identity.spec.ts","../test/unit/apps-download.spec.ts","../test/unit/apps-team-visibility.spec.ts","../test/unit/auth-disabled-resolution.spec.ts","../test/unit/auth-me-auth-disabled.test.ts","../test/unit/authMiddleware.appTicket.spec.ts","../test/unit/authMiddleware.bearer.spec.ts","../test/unit/authMiddleware.credentialLifetime.spec.ts","../test/unit/authMiddleware.mcpAudience.spec.ts","../test/unit/authMiddleware.streamTicket.spec.ts","../test/unit/authMiddleware.test.ts","../test/unit/boot-device-sync.spec.ts","../test/unit/boot-go-ios-reap.spec.ts","../test/unit/bootstrap-identity.test.ts","../test/unit/build-export.spec.ts","../test/unit/busy-precheck.spec.ts","../test/unit/cleanup-settings-db.spec.ts","../test/unit/cleanup-settings.spec.ts","../test/unit/cliargs-admin-only.spec.ts","../test/unit/clipboard-route.spec.ts","../test/unit/command-auth-appium-server.spec.ts","../test/unit/command-auth.spec.ts","../test/unit/command-caller.spec.ts","../test/unit/command-log-network-capture.spec.ts","../test/unit/commands.spec.js","../test/unit/composite-geometry.spec.ts","../test/unit/concurrency-gate.spec.ts","../test/unit/config.spec.js","../test/unit/container-registration.spec.ts","../test/unit/control-device-lookup.spec.ts","../test/unit/control-forward-decision.spec.ts","../test/unit/control-honest-answers.spec.ts","../test/unit/control-lookup-failure.spec.ts","../test/unit/create-error-message.spec.ts","../test/unit/create-handoff.spec.ts","../test/unit/dashboard-api-paths.spec.ts","../test/unit/dashboard-commands.spec.ts","../test/unit/dashboard-events-device-logs.spec.ts","../test/unit/dashboard-events-metrics.spec.ts","../test/unit/dashboard-events-team-scope.spec.ts","../test/unit/dashboard-plugin-link.spec.ts","../test/unit/database-check.spec.ts","../test/unit/default-plugin-args.spec.ts","../test/unit/device-access-guard.spec.ts","../test/unit/device-access-lease.spec.ts","../test/unit/device-access-policy.spec.ts","../test/unit/device-allocation-routes.spec.ts","../test/unit/device-columns.spec.ts","../test/unit/device-log-book.spec.ts","../test/unit/device-offline-webhook.spec.ts","../test/unit/device-service.spec.ts","../test/unit/device-setting-columns.spec.ts","../test/unit/device-settings-loki.spec.ts","../test/unit/device-settings-survive.spec.ts","../test/unit/device-store-clear-at-boot.spec.ts","../test/unit/device-sync-lost-update.spec.ts","../test/unit/device-team-guard.spec.ts","../test/unit/device-team-resolver.spec.ts","../test/unit/device-utils.spec.ts","../test/unit/display-state.spec.ts","../test/unit/emulator-boot.spec.ts","../test/unit/enable-dashboard-option.spec.ts","../test/unit/enrich-devices-team-names.test.ts","../test/unit/event-log-session-data.spec.ts","../test/unit/event-manager-regression-hook.spec.ts","../test/unit/extract-access-key-token-pair.test.ts","../test/unit/extract-team-cap.spec.ts","../test/unit/failure-analysis.spec.ts","../test/unit/failure-categories.spec.ts","../test/unit/failure-categorization.spec.ts","../test/unit/ffmpeg-path.spec.ts","../test/unit/fill-missing-screen-size.spec.ts","../test/unit/findAndLockDevice-leasemerge.spec.ts","../test/unit/fingerprint-identity.spec.ts","../test/unit/go-ios-version.spec.ts","../test/unit/grid-admin-only.spec.ts","../test/unit/h264-multiplexer.spec.ts","../test/unit/h264-nal-parser.spec.ts","../test/unit/h264-ws-frame.spec.ts","../test/unit/heal-report.spec.ts","../test/unit/healing-instrumentation.spec.ts","../test/unit/healing-no-cost.spec.ts","../test/unit/healing-state-endpoints.spec.ts","../test/unit/healing-tier-gate.spec.ts","../test/unit/healing-tiers-every-session.spec.ts","../test/unit/healing-trend.spec.ts","../test/unit/health-monitor-own-phones.spec.ts","../test/unit/health-monitor-stream-lookup.spec.ts","../test/unit/helpers.spec.ts","../test/unit/hub-boot-sweep-recovery.spec.ts","../test/unit/hub-create-once.spec.ts","../test/unit/hub-create-session-umbrella.spec.ts","../test/unit/hub-gateway-create-appium-server.spec.ts","../test/unit/hub-node-control-forward.spec.ts","../test/unit/hub-node-gateway-appium-server.spec.ts","../test/unit/hub-node-iphone-readiness.spec.ts","../test/unit/hub-node-race.spec.ts","../test/unit/hub-node-same-host.spec.ts","../test/unit/hub-node-session-device-logs.spec.ts","../test/unit/hub-node-session-metrics.spec.ts","../test/unit/hub-register-removal.spec.ts","../test/unit/hub-remote-session-heartbeat.spec.ts","../test/unit/hub-routed-session-recovery.spec.ts","../test/unit/hub-session-token.spec.ts","../test/unit/insert-before-routes.spec.ts","../test/unit/inspector-hierarchy.spec.ts","../test/unit/install-repository-app-team.spec.ts","../test/unit/install-scripts.spec.ts","../test/unit/interceptor-visual-elements.spec.ts","../test/unit/internal-call.spec.ts","../test/unit/internal-calls-session-record.spec.ts","../test/unit/ios-discovery-same-host.spec.ts","../test/unit/ios-driver-log.spec.ts","../test/unit/ios-go-ios-tunnel-env.spec.ts","../test/unit/ios-idle-hold.spec.ts","../test/unit/ios-no-network-fallback.spec.ts","../test/unit/ios-simulator-preview.spec.ts","../test/unit/ios-simulator-session-readiness.spec.ts","../test/unit/ios-simulator-session-teardown.spec.ts","../test/unit/ios-stream-appium-tunnel.spec.ts","../test/unit/ios-stream-port-leases.spec.ts","../test/unit/ios-stream-port.spec.ts","../test/unit/ios-tunnel-process.spec.ts","../test/unit/ios-tunnels.spec.ts","../test/unit/ios-usbmuxd-missing.spec.ts","../test/unit/ios-wda-status-identity.spec.ts","../test/unit/iosBattery.spec.ts","../test/unit/iosStreamDiagnostics.spec.ts","../test/unit/iphone-ipad-only.spec.ts","../test/unit/is-xenon-running.spec.ts","../test/unit/json-logging-option.spec.ts","../test/unit/lab-settings.spec.ts","../test/unit/lease-held-phone.spec.ts","../test/unit/logcat-multiplexer.spec.ts","../test/unit/logcat-parse.spec.ts","../test/unit/logcat-stream-service.spec.ts","../test/unit/logcat-ws.spec.ts","../test/unit/logger-json-levels.spec.ts","../test/unit/loginRateLimiter.test.ts","../test/unit/loopback-request.spec.ts","../test/unit/manualLock.test.ts","../test/unit/mark-node-busy-loki.spec.ts","../test/unit/max-sessions.spec.ts","../test/unit/mcp-token-ttl.spec.ts","../test/unit/mjpeg-proxy-cache.spec.ts","../test/unit/network-addresses.test.ts","../test/unit/node-create-caps.spec.ts","../test/unit/node-device-log-store.spec.ts","../test/unit/node-device-logs-collector.spec.ts","../test/unit/node-gateway-create-appium-server.spec.ts","../test/unit/node-hub-session-owner.spec.ts","../test/unit/node-metrics-collector.spec.ts","../test/unit/node-metrics-store.spec.ts","../test/unit/node-phone-control.spec.ts","../test/unit/node-recording-relay.spec.ts","../test/unit/node-session-device-logs-route.spec.ts","../test/unit/node-session-metrics-route.spec.ts","../test/unit/node-socket-relay.spec.ts","../test/unit/normalize-eol.spec.js","../test/unit/observability-example-loki.spec.ts","../test/unit/ocr-healing-tier-real-ocr.spec.ts","../test/unit/ocr-healing-tier.spec.ts","../test/unit/ocr-offline.spec.ts","../test/unit/ocr-text-match.spec.ts","../test/unit/omni-virtual-element-store.spec.ts","../test/unit/omni-vision-analyze-screen.spec.ts","../test/unit/omni-vision-failures.spec.ts","../test/unit/omni-vision-ios-points.spec.ts","../test/unit/omni-vision-tap-text.spec.ts","../test/unit/omni-vision.spec.ts","../test/unit/openapi-coverage.spec.ts","../test/unit/openapi-for-site.spec.ts","../test/unit/ostrace-parse.spec.ts","../test/unit/outbound-proxy.spec.ts","../test/unit/package-engines.spec.ts","../test/unit/package-resolver.spec.ts","../test/unit/partial-config-file.spec.ts","../test/unit/passwordResetMode.test.ts","../test/unit/plugin.spec.ts","../test/unit/port-allocator-os-probe.spec.ts","../test/unit/port-allocator-pairs.spec.ts","../test/unit/port-exhaustion.spec.ts","../test/unit/prisma.spec.ts","../test/unit/probe-duration.spec.ts","../test/unit/profile-router.test.ts","../test/unit/profileIdentity.spec.ts","../test/unit/proof-bundle.spec.ts","../test/unit/proxy-option.spec.ts","../test/unit/queue-requester.spec.ts","../test/unit/queue-team-scope-routes.spec.ts","../test/unit/queue-visibility.spec.ts","../test/unit/rateLimitMiddleware.test.ts","../test/unit/recording-cleanup.spec.ts","../test/unit/recording-downloads-visibility.spec.ts","../test/unit/recording-files.spec.ts","../test/unit/recording-instrumentation.spec.ts","../test/unit/recording-options.spec.ts","../test/unit/recording-orchestrator.spec.ts","../test/unit/recording-requests.spec.ts","../test/unit/recording-source-ended.spec.ts","../test/unit/recording-store.spec.ts","../test/unit/recording-summary.spec.ts","../test/unit/recording-timing.spec.ts","../test/unit/recordings-library-routes.spec.ts","../test/unit/recordings-write-visibility.spec.ts","../test/unit/remote-session-create.spec.ts","../test/unit/remux-to-standard-mp4.spec.ts","../test/unit/reservation-team-visibility.spec.ts","../test/unit/reset-link-address.spec.ts","../test/unit/reset-link.test.ts","../test/unit/resilio-path-healing.spec.ts","../test/unit/roleGuard.test.ts","../test/unit/run-migrations-database.spec.ts","../test/unit/run-migrations-fail-fast.test.ts","../test/unit/run-migrations.test.ts","../test/unit/schema-required-args.spec.ts","../test/unit/scrcpy-server-session.spec.ts","../test/unit/scrcpy-version.spec.ts","../test/unit/screenshot-route.spec.ts","../test/unit/selector-event-model.spec.ts","../test/unit/selector-health-actions.spec.ts","../test/unit/selector-health-detail.spec.ts","../test/unit/selector-health-list.spec.ts","../test/unit/selector-learning-every-session.spec.ts","../test/unit/selector-state-service.spec.ts","../test/unit/selector-verification-clean-build.spec.ts","../test/unit/selector-verification-job.spec.ts","../test/unit/selector-verification-missed-regression.spec.ts","../test/unit/selector-visibility-resolver.spec.ts","../test/unit/self-healing-boot.spec.ts","../test/unit/self-healing-setting.spec.ts","../test/unit/session-app-resolution.spec.ts","../test/unit/session-assets.spec.ts","../test/unit/session-attribution-wiring.spec.ts","../test/unit/session-create-credential-owner.spec.ts","../test/unit/session-create-layer.spec.ts","../test/unit/session-credential-strip.spec.ts","../test/unit/session-credentials.spec.ts","../test/unit/session-device-logs-hub-node.spec.ts","../test/unit/session-device-logs-ios.spec.ts","../test/unit/session-device-logs-lifecycle.spec.ts","../test/unit/session-device-logs.spec.ts","../test/unit/session-end-failure-analysis.spec.ts","../test/unit/session-failed-webhook.spec.ts","../test/unit/session-identity.spec.ts","../test/unit/session-list-insights.spec.ts","../test/unit/session-listing-auth.spec.ts","../test/unit/session-locator.spec.ts","../test/unit/session-log-indexes.spec.ts","../test/unit/session-metrics-lifecycle.spec.ts","../test/unit/session-metrics-parse.spec.ts","../test/unit/session-metrics-route.spec.ts","../test/unit/session-metrics-samplers.spec.ts","../test/unit/session-metrics-service.spec.ts","../test/unit/session-node-calls.spec.ts","../test/unit/session-owner-resolver.spec.ts","../test/unit/session-recovery-metrics.spec.ts","../test/unit/session-recovery-routing.spec.ts","../test/unit/session-upgrade-guard.spec.ts","../test/unit/session-visibility.spec.ts","../test/unit/shell-commands.spec.ts","../test/unit/shutdown-drain-remote.spec.ts","../test/unit/shutdown-sync-nets.spec.ts","../test/unit/single-flight.spec.ts","../test/unit/socket-team-scope.integration.spec.ts","../test/unit/socketServer.bearer.spec.ts","../test/unit/socketServer.scopedEmit.spec.ts","../test/unit/socketServer.sessionCookie.spec.ts","../test/unit/stored-session-capabilities.spec.ts","../test/unit/stream-leave-route.spec.ts","../test/unit/stream-leave.spec.ts","../test/unit/stream-own-device-row.spec.ts","../test/unit/stream-start-conflict.spec.ts","../test/unit/stream-start-pipelines.spec.ts","../test/unit/stream-status-type.spec.ts","../test/unit/stream-stop-ownership.spec.ts","../test/unit/stream-stop-recording.spec.ts","../test/unit/stream-ticket-identity.spec.ts","../test/unit/stream-viewer-hangup.spec.ts","../test/unit/stream-watchdog-timers.spec.ts","../test/unit/sync-dir.spec.ts","../test/unit/team-filter.test.ts","../test/unit/token-mint-limits.spec.ts","../test/unit/tracing-export-routing.spec.ts","../test/unit/tracing-service-init.spec.ts","../test/unit/tracing-session-spans.spec.ts","../test/unit/unexpected-shutdown-reason.spec.ts","../test/unit/upgrade-router.spec.ts","../test/unit/upload-install-route.spec.ts","../test/unit/userAuthorization.test.ts","../test/unit/users-router.test.ts","../test/unit/verify-credential.spec.ts","../test/unit/verify-locator.spec.ts","../test/unit/video-pipeline-args.spec.ts","../test/unit/video-pipeline-exit.spec.ts","../test/unit/video-pipeline-outputpath.spec.ts","../test/unit/vision-assertion.spec.ts","../test/unit/wda-cap-injection.spec.ts","../test/unit/wda-client-failures.spec.ts","../test/unit/wda-client-session.spec.ts","../test/unit/wda-client-shell.spec.ts","../test/unit/wda-clipboard-write.spec.ts","../test/unit/web-config-service.spec.ts","../test/unit/webdriver-info-route.spec.ts","../test/unit/webhook-delivery.spec.ts","../test/unit/webhook-payloads.spec.ts","../test/unit/ws-upgrade-routing-appium-server.spec.ts","../test/unit/xenon-execute-scripts.spec.ts","../test/unit/xenon-options.spec.ts","../test/unit/bug-report/archive.spec.ts","../test/unit/bug-report/har-collector.spec.ts","../test/unit/bug-report/manifest.spec.ts","../test/unit/bug-report/readme.spec.ts","../test/unit/bug-report/route.spec.ts","../test/unit/bug-report/service.spec.ts","../test/unit/bug-report/video-slice.spec.ts","../test/unit/bug-report/window.spec.ts","../test/unit/fixtures/device.config.js","../test/unit/fixtures/devices.js","../test/unit/interceptor/AndroidProxyAdapter.spec.ts","../test/unit/interceptor/CertManager.spec.ts","../test/unit/interceptor/HarBuilder.spec.ts","../test/unit/interceptor/HostFilter.spec.ts","../test/unit/interceptor/MitmProxyHost.spec.ts","../test/unit/interceptor/MockEngine.spec.ts","../test/unit/interceptor/RequestBuffer.spec.ts","../test/unit/interceptor/SessionArchive.spec.ts","../test/unit/lease/LeaseOrphanSweeper.spec.ts","../test/unit/lease/LeaseService.spec.ts","../test/unit/lease/allocate-lease-branch.spec.ts","../test/unit/lease/buildCapabilityBag.spec.ts","../test/unit/lease/lease-device-match.spec.ts","../test/unit/lease/lease-override.spec.ts","../test/unit/lease/lease-reap-held-phone.spec.ts","../test/unit/lease/lease-session-ownership.spec.ts","../test/unit/lease/lease-sweeper-expiry.spec.ts","../test/unit/lease/lease-team-visibility.spec.ts","../test/unit/lease/lease-token-log-filter.spec.ts","../test/unit/lease/lease-token-oracle.spec.ts","../test/unit/lease/leaseToken.spec.ts","../test/unit/lease/nodePairAuth.spec.ts","../test/unit/lease/session-lease-proof.spec.ts","../test/unit/phone-network/boot-clean-up.spec.ts","../test/unit/phone-network/interceptor-options.spec.ts","../test/unit/phone-network/interceptor-proxy-restore.spec.ts","../test/unit/phone-network/network-conditioning.spec.ts","../test/unit/phone-network/phone-network-restore.spec.ts","../test/unit/phone-network/session-end-paths.spec.ts","../test/unit/phone-network/session-start.spec.ts","../test/unit/phone-network/xenon-proxy.spec.ts","../test/unit/ports/PortAllocatorService.spec.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xenon-device-management/xenon",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.17.1",
|
|
4
4
|
"description": "Xenon - Intelligent Mobile Infrastructure. A self-healing device orchestration platform for Appium.",
|
|
5
5
|
"main": "./lib/src/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"async-lock": "^1.2.8",
|
|
81
81
|
"async-wait-until": "^2.0.12",
|
|
82
82
|
"axios": "^0.27.2",
|
|
83
|
-
"
|
|
83
|
+
"bcryptjs": "^3.0.3",
|
|
84
84
|
"cors": "^2.8.5",
|
|
85
85
|
"download": "^8.0.0",
|
|
86
86
|
"express": "^4.17.3",
|
|
@@ -149,7 +149,6 @@
|
|
|
149
149
|
"@babel/eslint-parser": "^7.23.3",
|
|
150
150
|
"@babel/plugin-transform-class-properties": "^7.23.3",
|
|
151
151
|
"@types/async-lock": "1.4.2",
|
|
152
|
-
"@types/bcrypt": "^5.0.2",
|
|
153
152
|
"@types/bluebird": "^3.5.42",
|
|
154
153
|
"@types/chai": "4.3.10",
|
|
155
154
|
"@types/chai-as-promised": "^7.1.8",
|
package/schema.json
CHANGED
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
"sqlite",
|
|
164
164
|
"postgresql"
|
|
165
165
|
],
|
|
166
|
-
"description": "Has no effect, and is accepted only so older configs still start. Xenon stores its data in SQLite, one database per server, hub or node (see databaseUrl). At startup the database itself decides how its tables are brought up to date: from its migration history if that history matches its tables
|
|
166
|
+
"description": "Has no effect, and is accepted only so older configs still start. Xenon stores its data in SQLite, one database per server, hub or node (see databaseUrl). At startup the database itself decides how its tables are brought up to date: from its migration history if that history matches its tables, otherwise by matching them to this version's schema."
|
|
167
167
|
},
|
|
168
168
|
"databaseUrl": {
|
|
169
169
|
"type": "string",
|