execbro 2.6.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/build/__tests__/helpers/mock-harness.d.ts +35 -0
- package/build/__tests__/helpers/mock-harness.d.ts.map +1 -0
- package/build/__tests__/helpers/mock-harness.js +83 -0
- package/build/__tests__/helpers/mock-harness.js.map +1 -0
- package/build/__tests__/unit/androidEmulatorAvds.test.js +2 -1
- package/build/__tests__/unit/androidEmulatorAvds.test.js.map +1 -1
- package/build/__tests__/unit/buildToken.test.js +20 -3
- package/build/__tests__/unit/buildToken.test.js.map +1 -1
- package/build/__tests__/unit/commandInjection.test.d.ts +2 -0
- package/build/__tests__/unit/commandInjection.test.d.ts.map +1 -0
- package/build/__tests__/unit/commandInjection.test.js +55 -0
- package/build/__tests__/unit/commandInjection.test.js.map +1 -0
- package/build/__tests__/unit/errorCategorization.test.js +14 -0
- package/build/__tests__/unit/errorCategorization.test.js.map +1 -1
- package/build/__tests__/unit/fingerprint.test.js +2 -2
- package/build/__tests__/unit/fingerprint.test.js.map +1 -1
- package/build/__tests__/unit/inputTarget.test.js +46 -0
- package/build/__tests__/unit/inputTarget.test.js.map +1 -1
- package/build/__tests__/unit/logSourceAndroid.test.js +5 -5
- package/build/__tests__/unit/logSourceAndroid.test.js.map +1 -1
- package/build/__tests__/unit/logSourceIos.test.js +10 -6
- package/build/__tests__/unit/logSourceIos.test.js.map +1 -1
- package/build/__tests__/unit/logStack.test.d.ts +2 -0
- package/build/__tests__/unit/logStack.test.d.ts.map +1 -0
- package/build/__tests__/unit/logStack.test.js +86 -0
- package/build/__tests__/unit/logStack.test.js.map +1 -0
- package/build/__tests__/unit/logSymbolication.test.d.ts +2 -0
- package/build/__tests__/unit/logSymbolication.test.d.ts.map +1 -0
- package/build/__tests__/unit/logSymbolication.test.js +215 -0
- package/build/__tests__/unit/logSymbolication.test.js.map +1 -0
- package/build/__tests__/unit/mockRulePush.test.d.ts +2 -0
- package/build/__tests__/unit/mockRulePush.test.d.ts.map +1 -0
- package/build/__tests__/unit/mockRulePush.test.js +65 -0
- package/build/__tests__/unit/mockRulePush.test.js.map +1 -0
- package/build/__tests__/unit/mockRules.test.d.ts +2 -0
- package/build/__tests__/unit/mockRules.test.d.ts.map +1 -0
- package/build/__tests__/unit/mockRules.test.js +111 -0
- package/build/__tests__/unit/mockRules.test.js.map +1 -0
- package/build/__tests__/unit/nativeLogs.test.js +8 -2
- package/build/__tests__/unit/nativeLogs.test.js.map +1 -1
- package/build/__tests__/unit/netInfoPatch.test.d.ts +2 -0
- package/build/__tests__/unit/netInfoPatch.test.d.ts.map +1 -0
- package/build/__tests__/unit/netInfoPatch.test.js +46 -0
- package/build/__tests__/unit/netInfoPatch.test.js.map +1 -0
- package/build/__tests__/unit/networkInterceptorXhr.test.d.ts +2 -0
- package/build/__tests__/unit/networkInterceptorXhr.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkInterceptorXhr.test.js +440 -0
- package/build/__tests__/unit/networkInterceptorXhr.test.js.map +1 -0
- package/build/__tests__/unit/networkMock.test.d.ts +2 -0
- package/build/__tests__/unit/networkMock.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkMock.test.js +183 -0
- package/build/__tests__/unit/networkMock.test.js.map +1 -0
- package/build/__tests__/unit/networkMockRender.test.d.ts +2 -0
- package/build/__tests__/unit/networkMockRender.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkMockRender.test.js +131 -0
- package/build/__tests__/unit/networkMockRender.test.js.map +1 -0
- package/build/__tests__/unit/networkMockTamper.test.d.ts +2 -0
- package/build/__tests__/unit/networkMockTamper.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkMockTamper.test.js +162 -0
- package/build/__tests__/unit/networkMockTamper.test.js.map +1 -0
- package/build/__tests__/unit/networkMockTool.test.d.ts +2 -0
- package/build/__tests__/unit/networkMockTool.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkMockTool.test.js +69 -0
- package/build/__tests__/unit/networkMockTool.test.js.map +1 -0
- package/build/__tests__/unit/networkReplay.test.d.ts +2 -0
- package/build/__tests__/unit/networkReplay.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkReplay.test.js +86 -0
- package/build/__tests__/unit/networkReplay.test.js.map +1 -0
- package/build/__tests__/unit/serialQueue.test.d.ts +2 -0
- package/build/__tests__/unit/serialQueue.test.d.ts.map +1 -0
- package/build/__tests__/unit/serialQueue.test.js +77 -0
- package/build/__tests__/unit/serialQueue.test.js.map +1 -0
- package/build/__tests__/unit/symbolicate.test.js +36 -0
- package/build/__tests__/unit/symbolicate.test.js.map +1 -1
- package/build/__tests__/unit/tap.test.js +0 -48
- package/build/__tests__/unit/tap.test.js.map +1 -1
- package/build/__tests__/unit/textEntry.test.js +53 -0
- package/build/__tests__/unit/textEntry.test.js.map +1 -1
- package/build/__tests__/unit/toolArgInjection.test.d.ts +2 -0
- package/build/__tests__/unit/toolArgInjection.test.d.ts.map +1 -0
- package/build/__tests__/unit/toolArgInjection.test.js +86 -0
- package/build/__tests__/unit/toolArgInjection.test.js.map +1 -0
- package/build/core/android.d.ts.map +1 -1
- package/build/core/android.js +54 -111
- package/build/core/android.js.map +1 -1
- package/build/core/androidSystemBars.d.ts.map +1 -1
- package/build/core/androidSystemBars.js +3 -3
- package/build/core/androidSystemBars.js.map +1 -1
- package/build/core/appRequest.d.ts +1 -0
- package/build/core/appRequest.d.ts.map +1 -1
- package/build/core/appRequest.js +5 -2
- package/build/core/appRequest.js.map +1 -1
- package/build/core/buildInfo.d.ts +3 -0
- package/build/core/buildInfo.d.ts.map +1 -0
- package/build/core/buildInfo.js +6 -0
- package/build/core/buildInfo.js.map +1 -0
- package/build/core/componentSource.d.ts.map +1 -1
- package/build/core/componentSource.js +1 -1
- package/build/core/componentSource.js.map +1 -1
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +15 -5
- package/build/core/connection.js.map +1 -1
- package/build/core/exec.d.ts +5 -0
- package/build/core/exec.d.ts.map +1 -1
- package/build/core/exec.js +34 -1
- package/build/core/exec.js.map +1 -1
- package/build/core/fingerprint.d.ts.map +1 -1
- package/build/core/fingerprint.js +3 -3
- package/build/core/fingerprint.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +21 -1
- package/build/core/guides.js.map +1 -1
- package/build/core/inputTarget.d.ts.map +1 -1
- package/build/core/inputTarget.js +42 -2
- package/build/core/inputTarget.js.map +1 -1
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +14 -17
- package/build/core/ios.js.map +1 -1
- package/build/core/jsLogEvents.d.ts.map +1 -1
- package/build/core/jsLogEvents.js +1 -0
- package/build/core/jsLogEvents.js.map +1 -1
- package/build/core/keyboardRaise.d.ts.map +1 -1
- package/build/core/keyboardRaise.js +3 -3
- package/build/core/keyboardRaise.js.map +1 -1
- package/build/core/logEventFormat.d.ts +2 -0
- package/build/core/logEventFormat.d.ts.map +1 -1
- package/build/core/logEventFormat.js +6 -1
- package/build/core/logEventFormat.js.map +1 -1
- package/build/core/logEvents.d.ts +2 -1
- package/build/core/logEvents.d.ts.map +1 -1
- package/build/core/logEvents.js.map +1 -1
- package/build/core/logSourceAndroid.d.ts +1 -1
- package/build/core/logSourceAndroid.d.ts.map +1 -1
- package/build/core/logSourceAndroid.js +9 -9
- package/build/core/logSourceAndroid.js.map +1 -1
- package/build/core/logSourceIos.d.ts +1 -1
- package/build/core/logSourceIos.d.ts.map +1 -1
- package/build/core/logSourceIos.js +9 -9
- package/build/core/logSourceIos.js.map +1 -1
- package/build/core/logStack.d.ts +6 -0
- package/build/core/logStack.d.ts.map +1 -0
- package/build/core/logStack.js +44 -0
- package/build/core/logStack.js.map +1 -0
- package/build/core/logSymbolication.d.ts +11 -0
- package/build/core/logSymbolication.d.ts.map +1 -0
- package/build/core/logSymbolication.js +91 -0
- package/build/core/logSymbolication.js.map +1 -0
- package/build/core/mockRules.d.ts +30 -0
- package/build/core/mockRules.d.ts.map +1 -0
- package/build/core/mockRules.js +200 -0
- package/build/core/mockRules.js.map +1 -0
- package/build/core/nativeInputValue.js +6 -6
- package/build/core/nativeInputValue.js.map +1 -1
- package/build/core/nativeLogs.js +2 -2
- package/build/core/nativeLogs.js.map +1 -1
- package/build/core/netInfoPatch.d.ts +5 -0
- package/build/core/netInfoPatch.d.ts.map +1 -0
- package/build/core/netInfoPatch.js +88 -0
- package/build/core/netInfoPatch.js.map +1 -0
- package/build/core/network.d.ts.map +1 -1
- package/build/core/network.js +9 -0
- package/build/core/network.js.map +1 -1
- package/build/core/networkInterceptor.d.ts +6 -0
- package/build/core/networkInterceptor.d.ts.map +1 -1
- package/build/core/networkInterceptor.js +660 -13
- package/build/core/networkInterceptor.js.map +1 -1
- package/build/core/replay.d.ts +14 -0
- package/build/core/replay.d.ts.map +1 -0
- package/build/core/replay.js +14 -0
- package/build/core/replay.js.map +1 -0
- package/build/core/serialQueue.d.ts +6 -0
- package/build/core/serialQueue.d.ts.map +1 -0
- package/build/core/serialQueue.js +18 -0
- package/build/core/serialQueue.js.map +1 -0
- package/build/core/symbolicate.d.ts +2 -2
- package/build/core/symbolicate.d.ts.map +1 -1
- package/build/core/symbolicate.js +2 -2
- package/build/core/symbolicate.js.map +1 -1
- package/build/core/telemetry.d.ts.map +1 -1
- package/build/core/telemetry.js +5 -3
- package/build/core/telemetry.js.map +1 -1
- package/build/core/textEntry.d.ts +2 -0
- package/build/core/textEntry.d.ts.map +1 -1
- package/build/core/textEntry.js +30 -3
- package/build/core/textEntry.js.map +1 -1
- package/build/core/types.d.ts +11 -0
- package/build/core/types.d.ts.map +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +55 -9
- package/build/index.js.map +1 -1
- package/build/tools/deviceTools.d.ts.map +1 -1
- package/build/tools/deviceTools.js +4 -1
- package/build/tools/deviceTools.js.map +1 -1
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +6 -3
- package/build/tools/interactionTools.js.map +1 -1
- package/build/tools/logTools.d.ts.map +1 -1
- package/build/tools/logTools.js +16 -3
- package/build/tools/logTools.js.map +1 -1
- package/build/tools/networkTools.d.ts.map +1 -1
- package/build/tools/networkTools.js +196 -4
- package/build/tools/networkTools.js.map +1 -1
- package/build/tools/requestTools.d.ts.map +1 -1
- package/build/tools/requestTools.js +93 -26
- package/build/tools/requestTools.js.map +1 -1
- package/package.json +3 -3
- package/tools.json +36 -1
- package/build/__tests__/helpers/fake-cdp-server.d.ts +0 -53
- package/build/__tests__/helpers/fake-cdp-server.d.ts.map +0 -1
- package/build/__tests__/helpers/fake-cdp-server.js +0 -116
- package/build/__tests__/helpers/fake-cdp-server.js.map +0 -1
- package/build/__tests__/helpers/tap-test-helpers.d.ts +0 -13
- package/build/__tests__/helpers/tap-test-helpers.d.ts.map +0 -1
- package/build/__tests__/helpers/tap-test-helpers.js +0 -103
- package/build/__tests__/helpers/tap-test-helpers.js.map +0 -1
- package/build/__tests__/integration/auto-reconnect.test.d.ts +0 -2
- package/build/__tests__/integration/auto-reconnect.test.d.ts.map +0 -1
- package/build/__tests__/integration/auto-reconnect.test.js +0 -108
- package/build/__tests__/integration/auto-reconnect.test.js.map +0 -1
- package/build/__tests__/integration/connection-health.test.d.ts +0 -2
- package/build/__tests__/integration/connection-health.test.d.ts.map +0 -1
- package/build/__tests__/integration/connection-health.test.js +0 -155
- package/build/__tests__/integration/connection-health.test.js.map +0 -1
- package/build/__tests__/integration/execute-in-app.test.d.ts +0 -2
- package/build/__tests__/integration/execute-in-app.test.d.ts.map +0 -1
- package/build/__tests__/integration/execute-in-app.test.js +0 -114
- package/build/__tests__/integration/execute-in-app.test.js.map +0 -1
- package/build/__tests__/integration/native-logs.test.d.ts +0 -2
- package/build/__tests__/integration/native-logs.test.d.ts.map +0 -1
- package/build/__tests__/integration/native-logs.test.js +0 -34
- package/build/__tests__/integration/native-logs.test.js.map +0 -1
- package/build/__tests__/integration/per-call-timeout.test.d.ts +0 -2
- package/build/__tests__/integration/per-call-timeout.test.d.ts.map +0 -1
- package/build/__tests__/integration/per-call-timeout.test.js +0 -99
- package/build/__tests__/integration/per-call-timeout.test.js.map +0 -1
- package/build/__tests__/integration/socket-close-midflight.test.d.ts +0 -2
- package/build/__tests__/integration/socket-close-midflight.test.d.ts.map +0 -1
- package/build/__tests__/integration/socket-close-midflight.test.js +0 -96
- package/build/__tests__/integration/socket-close-midflight.test.js.map +0 -1
- package/build/__tests__/integration/stale-target-probe.test.d.ts +0 -2
- package/build/__tests__/integration/stale-target-probe.test.d.ts.map +0 -1
- package/build/__tests__/integration/stale-target-probe.test.js +0 -70
- package/build/__tests__/integration/stale-target-probe.test.js.map +0 -1
- package/build/__tests__/integration/tap-strategies.test.d.ts +0 -2
- package/build/__tests__/integration/tap-strategies.test.d.ts.map +0 -1
- package/build/__tests__/integration/tap-strategies.test.js +0 -296
- package/build/__tests__/integration/tap-strategies.test.js.map +0 -1
- package/build/__tests__/integration/text-input.test.d.ts +0 -2
- package/build/__tests__/integration/text-input.test.d.ts.map +0 -1
- package/build/__tests__/integration/text-input.test.js +0 -142
- package/build/__tests__/integration/text-input.test.js.map +0 -1
- package/build/__tests__/integration/tools.test.d.ts +0 -2
- package/build/__tests__/integration/tools.test.d.ts.map +0 -1
- package/build/__tests__/integration/tools.test.js +0 -221
- package/build/__tests__/integration/tools.test.js.map +0 -1
|
@@ -4,7 +4,7 @@ export declare function buildLogShowCommand(opts: {
|
|
|
4
4
|
processName?: string;
|
|
5
5
|
sinceTs?: Date;
|
|
6
6
|
minMessageType?: "error" | "fault";
|
|
7
|
-
}): string;
|
|
7
|
+
}): string[];
|
|
8
8
|
export declare function parseLogShowNdjson(stdout: string): RawLogLine[];
|
|
9
9
|
export declare function fetchIosLines(opts: {
|
|
10
10
|
udid: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logSourceIos.d.ts","sourceRoot":"","sources":["../../src/core/logSourceIos.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkC7D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IAEf,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CACtC,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"logSourceIos.d.ts","sourceRoot":"","sources":["../../src/core/logSourceIos.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkC7D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IAEf,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CACtC,GAAG,MAAM,EAAE,CAuBX;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CA+B/D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAQxB;AAUD,wBAAsB,qBAAqB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B;AAGD,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFileAsync, withCancelableTimeout } from "./exec.js";
|
|
2
2
|
const MAX_BUFFER = 32 * 1024 * 1024;
|
|
3
3
|
const FETCH_TIMEOUT_MS = 8000;
|
|
4
4
|
const MESSAGE_TYPE = {
|
|
@@ -24,17 +24,17 @@ export function buildLogShowCommand(opts) {
|
|
|
24
24
|
else if (opts.minMessageType === "error") {
|
|
25
25
|
predicates.push("(messageType == error OR messageType == fault)");
|
|
26
26
|
}
|
|
27
|
-
const parts = [
|
|
27
|
+
const parts = ["simctl", "spawn", opts.udid, "log", "show", "--style", "ndjson"];
|
|
28
28
|
if (opts.sinceTs) {
|
|
29
|
-
parts.push(
|
|
29
|
+
parts.push("--start", localStamp(opts.sinceTs));
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
|
-
parts.push("--last 30m");
|
|
32
|
+
parts.push("--last", "30m");
|
|
33
33
|
}
|
|
34
34
|
if (predicates.length > 0) {
|
|
35
|
-
parts.push(
|
|
35
|
+
parts.push("--predicate", predicates.join(" AND "));
|
|
36
36
|
}
|
|
37
|
-
return parts
|
|
37
|
+
return parts;
|
|
38
38
|
}
|
|
39
39
|
export function parseLogShowNdjson(stdout) {
|
|
40
40
|
const out = [];
|
|
@@ -69,8 +69,8 @@ export function parseLogShowNdjson(stdout) {
|
|
|
69
69
|
return out;
|
|
70
70
|
}
|
|
71
71
|
export async function fetchIosLines(opts) {
|
|
72
|
-
const
|
|
73
|
-
const { stdout } = await withCancelableTimeout((signal) =>
|
|
72
|
+
const args = buildLogShowCommand(opts);
|
|
73
|
+
const { stdout } = await withCancelableTimeout((signal) => execFileAsync("xcrun", args, { signal, maxBuffer: MAX_BUFFER }), FETCH_TIMEOUT_MS, `log show (${opts.udid})`);
|
|
74
74
|
return parseLogShowNdjson(stdout);
|
|
75
75
|
}
|
|
76
76
|
const processNameCache = new Map();
|
|
@@ -80,7 +80,7 @@ export async function resolveIosProcessName(udid, bundleId, signal) {
|
|
|
80
80
|
if (cached)
|
|
81
81
|
return cached;
|
|
82
82
|
try {
|
|
83
|
-
const { stdout } = await
|
|
83
|
+
const { stdout } = await execFileAsync("xcrun", ["simctl", "get_app_container", udid, bundleId, "app"], { signal });
|
|
84
84
|
const name = stdout.trim().split("/").pop()?.replace(/\.app$/, "");
|
|
85
85
|
if (name)
|
|
86
86
|
processNameCache.set(key, name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logSourceIos.js","sourceRoot":"","sources":["../../src/core/logSourceIos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"logSourceIos.js","sourceRoot":"","sources":["../../src/core/logSourceIos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CDPStackFrame, LogEntry } from "./types.js";
|
|
2
|
+
import { StackFrame } from "./symbolicate.js";
|
|
3
|
+
export declare const MAX_STORED_FRAMES = 12;
|
|
4
|
+
export declare function captureStack(level: LogEntry["level"], stackTrace: unknown): CDPStackFrame[] | undefined;
|
|
5
|
+
export declare function toStackFrames(frames: readonly CDPStackFrame[]): StackFrame[];
|
|
6
|
+
//# sourceMappingURL=logStack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logStack.d.ts","sourceRoot":"","sources":["../../src/core/logStack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA0B9C,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAOpC,wBAAgB,YAAY,CACxB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxB,UAAU,EAAE,OAAO,GACpB,aAAa,EAAE,GAAG,SAAS,CAuB7B;AAiBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,UAAU,EAAE,CAY5E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const STACK_LEVELS = new Set(["warn", "error", "fatal"]);
|
|
2
|
+
export const MAX_STORED_FRAMES = 12;
|
|
3
|
+
export function captureStack(level, stackTrace) {
|
|
4
|
+
if (!STACK_LEVELS.has(level))
|
|
5
|
+
return undefined;
|
|
6
|
+
if (!stackTrace || typeof stackTrace !== "object")
|
|
7
|
+
return undefined;
|
|
8
|
+
const callFrames = stackTrace.callFrames;
|
|
9
|
+
if (!Array.isArray(callFrames) || callFrames.length === 0)
|
|
10
|
+
return undefined;
|
|
11
|
+
const out = [];
|
|
12
|
+
for (const raw of callFrames) {
|
|
13
|
+
if (out.length >= MAX_STORED_FRAMES)
|
|
14
|
+
break;
|
|
15
|
+
if (!raw || typeof raw !== "object")
|
|
16
|
+
continue;
|
|
17
|
+
const f = raw;
|
|
18
|
+
if (typeof f.lineNumber !== "number" || typeof f.columnNumber !== "number")
|
|
19
|
+
continue;
|
|
20
|
+
out.push({
|
|
21
|
+
functionName: typeof f.functionName === "string" ? f.functionName : undefined,
|
|
22
|
+
scriptId: typeof f.scriptId === "string" ? f.scriptId : undefined,
|
|
23
|
+
url: typeof f.url === "string" && f.url.length > 0 ? f.url : undefined,
|
|
24
|
+
lineNumber: f.lineNumber,
|
|
25
|
+
columnNumber: f.columnNumber,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return out.length > 0 ? out : undefined;
|
|
29
|
+
}
|
|
30
|
+
export function toStackFrames(frames) {
|
|
31
|
+
const out = [];
|
|
32
|
+
for (const f of frames) {
|
|
33
|
+
if (!f.url)
|
|
34
|
+
continue;
|
|
35
|
+
out.push({
|
|
36
|
+
file: f.url,
|
|
37
|
+
lineNumber: f.lineNumber + 1,
|
|
38
|
+
column: f.columnNumber + 1,
|
|
39
|
+
methodName: f.functionName && f.functionName.length > 0 ? f.functionName : null,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=logStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logStack.js","sourceRoot":"","sources":["../../src/core/logStack.ts"],"names":[],"mappings":"AAoBA,MAAM,YAAY,GAAmC,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAOzF,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAOpC,MAAM,UAAU,YAAY,CACxB,KAAwB,EACxB,UAAmB;IAEnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEpE,MAAM,UAAU,GAAI,UAAuC,CAAC,UAAU,CAAC;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5E,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,MAAM,IAAI,iBAAiB;YAAE,MAAM;QAC3C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,CAAC,GAAG,GAA8B,CAAC;QACzC,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;YAAE,SAAS;QACrF,GAAG,CAAC,IAAI,CAAC;YACL,YAAY,EAAE,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;YAC7E,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACjE,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YACtE,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,YAAY,EAAE,CAAC,CAAC,YAAY;SAC/B,CAAC,CAAC;IACP,CAAC;IAED,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAiBD,MAAM,UAAU,aAAa,CAAC,MAAgC;IAC1D,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,GAAG;YAAE,SAAS;QACrB,GAAG,CAAC,IAAI,CAAC;YACL,IAAI,EAAE,CAAC,CAAC,GAAG;YACX,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC;YAC5B,MAAM,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC;YAC1B,UAAU,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;SAClF,CAAC,CAAC;IACP,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LogEvent } from "./logEvents.js";
|
|
2
|
+
import { type SymbolicatedFrame } from "./symbolicate.js";
|
|
3
|
+
export declare const READ_FRAME_BUDGET = 20;
|
|
4
|
+
export interface ResolvedStacks {
|
|
5
|
+
byEventId: Map<string, SymbolicatedFrame>;
|
|
6
|
+
overBudget: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function formatFrame(frame: SymbolicatedFrame): string;
|
|
9
|
+
export declare function resolveListStacks(events: readonly LogEvent[], budget?: number): Promise<ResolvedStacks>;
|
|
10
|
+
export declare function resolveFullStack(event: LogEvent): Promise<string[]>;
|
|
11
|
+
//# sourceMappingURL=logSymbolication.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logSymbolication.d.ts","sourceRoot":"","sources":["../../src/core/logSymbolication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAIH,KAAK,iBAAiB,EACzB,MAAM,kBAAkB,CAAC;AAe1B,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAKpC,MAAM,WAAW,cAAc;IAE3B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAE1C,UAAU,EAAE,MAAM,CAAC;CACtB;AASD,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAG5D;AAMD,wBAAsB,iBAAiB,CACnC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,MAAM,SAAoB,GAC3B,OAAO,CAAC,cAAc,CAAC,CAyDzB;AAMD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBzE"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { toStackFrames } from "./logStack.js";
|
|
2
|
+
import { firstUserFrame, symbolicateFrames, } from "./symbolicate.js";
|
|
3
|
+
export const READ_FRAME_BUDGET = 20;
|
|
4
|
+
const LIST_LEVELS = new Set(["error", "fatal"]);
|
|
5
|
+
const EMPTY = { byEventId: new Map(), overBudget: 0 };
|
|
6
|
+
function frameKey(f) {
|
|
7
|
+
return `${f.file}|${f.lineNumber}|${f.column}`;
|
|
8
|
+
}
|
|
9
|
+
export function formatFrame(frame) {
|
|
10
|
+
const where = `${frame.file}:${frame.lineNumber}:${frame.column}`;
|
|
11
|
+
return frame.methodName ? `${where} in ${frame.methodName}` : where;
|
|
12
|
+
}
|
|
13
|
+
export async function resolveListStacks(events, budget = READ_FRAME_BUDGET) {
|
|
14
|
+
const candidates = events.filter((e) => e.source === "js" && LIST_LEVELS.has(e.level) && e.stackTrace?.length);
|
|
15
|
+
if (candidates.length === 0)
|
|
16
|
+
return EMPTY;
|
|
17
|
+
const uniqueFrames = [];
|
|
18
|
+
const indexByKey = new Map();
|
|
19
|
+
const perEvent = [];
|
|
20
|
+
let overBudget = 0;
|
|
21
|
+
for (const event of candidates) {
|
|
22
|
+
const frames = toStackFrames(event.stackTrace ?? []);
|
|
23
|
+
if (frames.length === 0)
|
|
24
|
+
continue;
|
|
25
|
+
const indexes = [];
|
|
26
|
+
let truncated = false;
|
|
27
|
+
for (const frame of frames) {
|
|
28
|
+
const key = frameKey(frame);
|
|
29
|
+
let idx = indexByKey.get(key);
|
|
30
|
+
if (idx === undefined) {
|
|
31
|
+
if (uniqueFrames.length >= budget) {
|
|
32
|
+
truncated = true;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
idx = uniqueFrames.length;
|
|
36
|
+
indexByKey.set(key, idx);
|
|
37
|
+
uniqueFrames.push(frame);
|
|
38
|
+
}
|
|
39
|
+
indexes.push(idx);
|
|
40
|
+
}
|
|
41
|
+
if (truncated && indexes.length === 0)
|
|
42
|
+
overBudget++;
|
|
43
|
+
if (indexes.length > 0)
|
|
44
|
+
perEvent.push({ id: event.id, indexes });
|
|
45
|
+
}
|
|
46
|
+
if (uniqueFrames.length === 0)
|
|
47
|
+
return { byEventId: new Map(), overBudget };
|
|
48
|
+
let resolved;
|
|
49
|
+
try {
|
|
50
|
+
resolved = await symbolicateFrames(uniqueFrames);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return { byEventId: new Map(), overBudget };
|
|
54
|
+
}
|
|
55
|
+
if (resolved === null)
|
|
56
|
+
return { byEventId: new Map(), overBudget };
|
|
57
|
+
const byEventId = new Map();
|
|
58
|
+
for (const { id, indexes } of perEvent) {
|
|
59
|
+
const slice = indexes.map((i) => resolved[i] ?? null);
|
|
60
|
+
const first = firstUserFrame(slice);
|
|
61
|
+
if (first)
|
|
62
|
+
byEventId.set(id, first);
|
|
63
|
+
}
|
|
64
|
+
return { byEventId, overBudget };
|
|
65
|
+
}
|
|
66
|
+
export async function resolveFullStack(event) {
|
|
67
|
+
const frames = toStackFrames(event.stackTrace ?? []);
|
|
68
|
+
if (frames.length === 0)
|
|
69
|
+
return [];
|
|
70
|
+
let resolved;
|
|
71
|
+
try {
|
|
72
|
+
resolved = await symbolicateFrames(frames);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
if (resolved === null)
|
|
78
|
+
return [];
|
|
79
|
+
const lines = [];
|
|
80
|
+
resolved.forEach((frame, i) => {
|
|
81
|
+
if (frame) {
|
|
82
|
+
lines.push(` ${frame.collapse ? "·" : "→"} ${formatFrame(frame)}`);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const raw = frames[i];
|
|
86
|
+
lines.push(` ? ${raw.methodName ?? "<anonymous>"} (unresolved)`);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
return lines;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=logSymbolication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logSymbolication.js","sourceRoot":"","sources":["../../src/core/logSymbolication.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface MockRule {
|
|
2
|
+
id: string;
|
|
3
|
+
url: string;
|
|
4
|
+
method?: string;
|
|
5
|
+
mode: "replace" | "tamper";
|
|
6
|
+
times?: number;
|
|
7
|
+
delayMs?: number;
|
|
8
|
+
status?: number;
|
|
9
|
+
headers?: Record<string, string>;
|
|
10
|
+
body?: string;
|
|
11
|
+
networkError?: string;
|
|
12
|
+
set?: Record<string, unknown>;
|
|
13
|
+
remove?: string[];
|
|
14
|
+
bodyReplace?: string;
|
|
15
|
+
source?: "mock" | "condition";
|
|
16
|
+
hits: number;
|
|
17
|
+
}
|
|
18
|
+
export type MockRuleInput = Omit<MockRule, "id" | "hits">;
|
|
19
|
+
export declare function __resetMockRules(): void;
|
|
20
|
+
export declare function validateUrlPattern(pattern: string): void;
|
|
21
|
+
export declare function addRule(device: string, input: MockRuleInput): MockRule;
|
|
22
|
+
export declare function removeRule(device: string, id: string): boolean;
|
|
23
|
+
export declare function clearRules(device?: string): number;
|
|
24
|
+
export declare function clearConditionRules(device: string): number;
|
|
25
|
+
export declare function listRules(device: string): MockRule[];
|
|
26
|
+
export declare function recordHit(device: string, id: string): void;
|
|
27
|
+
export declare function serializeRules(device: string): string;
|
|
28
|
+
export declare function formatRuleList(device: string): string;
|
|
29
|
+
export declare function activeMockBanner(device?: string): string;
|
|
30
|
+
//# sourceMappingURL=mockRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockRules.d.ts","sourceRoot":"","sources":["../../src/core/mockRules.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAOrB,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAE9B,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;AAkB1D,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAwFD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAmDxD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,QAAQ,CAOtE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAO9D;AAED,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAYlD;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAEpD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAG1D;AAOD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrD;AASD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAerD;AAUD,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBxD"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { UserInputError } from "./errors.js";
|
|
2
|
+
const rulesByDevice = new Map();
|
|
3
|
+
let nextId = 1;
|
|
4
|
+
const MAX_PATTERN_LENGTH = 200;
|
|
5
|
+
const PROBE_INPUT_LENGTH = 22;
|
|
6
|
+
const PROBE_BUDGET_MS = 20;
|
|
7
|
+
export function __resetMockRules() {
|
|
8
|
+
rulesByDevice.clear();
|
|
9
|
+
nextId = 1;
|
|
10
|
+
}
|
|
11
|
+
function isRegexPattern(pattern) {
|
|
12
|
+
return (pattern.length > 1 &&
|
|
13
|
+
pattern.charAt(0) === "/" &&
|
|
14
|
+
pattern.charAt(pattern.length - 1) === "/");
|
|
15
|
+
}
|
|
16
|
+
function bodyCanRepeatOrBranch(body) {
|
|
17
|
+
let inClass = false;
|
|
18
|
+
for (let i = 0; i < body.length; i++) {
|
|
19
|
+
const c = body[i];
|
|
20
|
+
if (c === "\\") {
|
|
21
|
+
i++;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (inClass) {
|
|
25
|
+
if (c === "]")
|
|
26
|
+
inClass = false;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (c === "[") {
|
|
30
|
+
inClass = true;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (c === "*" || c === "+" || c === "|")
|
|
34
|
+
return true;
|
|
35
|
+
if (c === "{" && /^\{\d+,\}/.test(body.slice(i)))
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
function hasRiskyNesting(pattern) {
|
|
41
|
+
const openStack = [];
|
|
42
|
+
let inClass = false;
|
|
43
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
44
|
+
const c = pattern[i];
|
|
45
|
+
if (c === "\\") {
|
|
46
|
+
i++;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (inClass) {
|
|
50
|
+
if (c === "]")
|
|
51
|
+
inClass = false;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (c === "[") {
|
|
55
|
+
inClass = true;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (c === "(") {
|
|
59
|
+
openStack.push(i);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (c === ")") {
|
|
63
|
+
const open = openStack.pop();
|
|
64
|
+
if (open === undefined)
|
|
65
|
+
continue;
|
|
66
|
+
const rest = pattern.slice(i + 1);
|
|
67
|
+
const quantified = rest.charAt(0) === "*" ||
|
|
68
|
+
rest.charAt(0) === "+" ||
|
|
69
|
+
/^\{\d+,\}/.test(rest);
|
|
70
|
+
if (!quantified)
|
|
71
|
+
continue;
|
|
72
|
+
if (bodyCanRepeatOrBranch(pattern.slice(open + 1, i)))
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
export function validateUrlPattern(pattern) {
|
|
79
|
+
if (!isRegexPattern(pattern))
|
|
80
|
+
return;
|
|
81
|
+
const source = pattern.slice(1, -1);
|
|
82
|
+
if (source.length > MAX_PATTERN_LENGTH) {
|
|
83
|
+
throw new UserInputError(`Regex pattern is too long (${source.length} chars, max ${MAX_PATTERN_LENGTH}). ` +
|
|
84
|
+
`It runs inside the app's JS thread on every request. Use a shorter pattern, ` +
|
|
85
|
+
`or a plain substring (no surrounding slashes) for a literal match.`, "mock_pattern_too_long");
|
|
86
|
+
}
|
|
87
|
+
let re;
|
|
88
|
+
try {
|
|
89
|
+
re = new RegExp(source);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
throw new UserInputError(`Regex pattern "${pattern}" does not compile: ${err instanceof Error ? err.message : String(err)}. ` +
|
|
93
|
+
`Omit the surrounding slashes if you meant a literal substring.`, "mock_pattern_invalid");
|
|
94
|
+
}
|
|
95
|
+
if (hasRiskyNesting(source)) {
|
|
96
|
+
throw new UserInputError(`Regex pattern "${pattern}" has a nested quantifier (e.g. (a+)+, (.*)*, (a|aa)+) and can ` +
|
|
97
|
+
`backtrack catastrophically. It would run in the app's JS thread and freeze it. ` +
|
|
98
|
+
`Rewrite it without the nesting, or use a plain substring.`, "mock_pattern_backtracking");
|
|
99
|
+
}
|
|
100
|
+
const probe = "a".repeat(PROBE_INPUT_LENGTH) + "!";
|
|
101
|
+
const start = Date.now();
|
|
102
|
+
try {
|
|
103
|
+
re.test(probe);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const elapsed = Date.now() - start;
|
|
109
|
+
if (elapsed > PROBE_BUDGET_MS) {
|
|
110
|
+
throw new UserInputError(`Regex pattern "${pattern}" is too slow (${elapsed}ms on a ${probe.length}-character probe) — ` +
|
|
111
|
+
`it backtracks and would freeze the app's JS thread. Rewrite it or use a plain substring.`, "mock_pattern_slow");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export function addRule(device, input) {
|
|
115
|
+
validateUrlPattern(input.url);
|
|
116
|
+
const rule = { ...input, id: `m${nextId++}`, hits: 0 };
|
|
117
|
+
const list = rulesByDevice.get(device) ?? [];
|
|
118
|
+
list.push(rule);
|
|
119
|
+
rulesByDevice.set(device, list);
|
|
120
|
+
return rule;
|
|
121
|
+
}
|
|
122
|
+
export function removeRule(device, id) {
|
|
123
|
+
const list = rulesByDevice.get(device);
|
|
124
|
+
if (!list)
|
|
125
|
+
return false;
|
|
126
|
+
const i = list.findIndex((r) => r.id === id);
|
|
127
|
+
if (i === -1)
|
|
128
|
+
return false;
|
|
129
|
+
list.splice(i, 1);
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
export function clearRules(device) {
|
|
133
|
+
if (device === undefined) {
|
|
134
|
+
let n = 0;
|
|
135
|
+
for (const list of rulesByDevice.values())
|
|
136
|
+
n += list.length;
|
|
137
|
+
rulesByDevice.clear();
|
|
138
|
+
return n;
|
|
139
|
+
}
|
|
140
|
+
const list = rulesByDevice.get(device);
|
|
141
|
+
if (!list)
|
|
142
|
+
return 0;
|
|
143
|
+
const n = list.length;
|
|
144
|
+
rulesByDevice.delete(device);
|
|
145
|
+
return n;
|
|
146
|
+
}
|
|
147
|
+
export function clearConditionRules(device) {
|
|
148
|
+
const list = rulesByDevice.get(device);
|
|
149
|
+
if (!list)
|
|
150
|
+
return 0;
|
|
151
|
+
const kept = list.filter((r) => r.source !== "condition");
|
|
152
|
+
const removed = list.length - kept.length;
|
|
153
|
+
rulesByDevice.set(device, kept);
|
|
154
|
+
return removed;
|
|
155
|
+
}
|
|
156
|
+
export function listRules(device) {
|
|
157
|
+
return rulesByDevice.get(device) ?? [];
|
|
158
|
+
}
|
|
159
|
+
export function recordHit(device, id) {
|
|
160
|
+
const rule = rulesByDevice.get(device)?.find((r) => r.id === id);
|
|
161
|
+
if (rule)
|
|
162
|
+
rule.hits++;
|
|
163
|
+
}
|
|
164
|
+
export function serializeRules(device) {
|
|
165
|
+
const wire = listRules(device).map(({ hits: _hits, source: _source, ...rest }) => rest);
|
|
166
|
+
return JSON.stringify(wire);
|
|
167
|
+
}
|
|
168
|
+
export function formatRuleList(device) {
|
|
169
|
+
const rules = listRules(device);
|
|
170
|
+
if (rules.length === 0)
|
|
171
|
+
return "No mock rules active.";
|
|
172
|
+
const lines = rules.map((r) => {
|
|
173
|
+
const status = r.status ? ` ${r.status}` : "";
|
|
174
|
+
const times = r.times ? ` (times:${r.times}${r.hits >= r.times ? ", spent" : ""})` : "";
|
|
175
|
+
const owner = r.source === "condition" ? " [owned by network_condition]" : "";
|
|
176
|
+
return `[${r.id}] ${r.method ?? "ANY"} ${r.url || "<any url>"} -> ${r.mode}${status}${times} hits=${r.hits}${owner}`;
|
|
177
|
+
});
|
|
178
|
+
return (lines.join("\n") +
|
|
179
|
+
"\n\nRules match in this order; a rule with hits=0 may be shadowed by one above it.");
|
|
180
|
+
}
|
|
181
|
+
export function activeMockBanner(device) {
|
|
182
|
+
if (device !== undefined) {
|
|
183
|
+
const n = listRules(device).length;
|
|
184
|
+
if (n === 0)
|
|
185
|
+
return "";
|
|
186
|
+
return `\n\n[${n} mock rule(s) active on ${device} — network_mock({action:"list"}) to inspect, {action:"clear"} to remove]`;
|
|
187
|
+
}
|
|
188
|
+
const parts = [];
|
|
189
|
+
let total = 0;
|
|
190
|
+
for (const [name, list] of rulesByDevice.entries()) {
|
|
191
|
+
if (list.length === 0)
|
|
192
|
+
continue;
|
|
193
|
+
total += list.length;
|
|
194
|
+
parts.push(`${list.length} on ${name}`);
|
|
195
|
+
}
|
|
196
|
+
if (total === 0)
|
|
197
|
+
return "";
|
|
198
|
+
return `\n\n[${total} mock rule(s) active (${parts.join(", ")}) — responses below may be altered. network_mock({action:"list"}) to inspect, {action:"clear"} to remove]`;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=mockRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockRules.js","sourceRoot":"","sources":["../../src/core/mockRules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFileAsync } from "./exec.js";
|
|
2
2
|
function parseIosFields(json) {
|
|
3
3
|
const out = [];
|
|
4
4
|
let tree;
|
|
@@ -56,14 +56,14 @@ export const readNativeFields = async (platform, deviceId) => {
|
|
|
56
56
|
if (platform === "ios") {
|
|
57
57
|
if (!deviceId)
|
|
58
58
|
return { fields: [], error: "no simulator UDID" };
|
|
59
|
-
const { stdout } = await
|
|
59
|
+
const { stdout } = await execFileAsync("axe", ["describe-ui", "--udid", deviceId], { timeout: 20_000 });
|
|
60
60
|
return { fields: parseIosFields(stdout) };
|
|
61
61
|
}
|
|
62
|
-
const target = deviceId ?
|
|
62
|
+
const target = deviceId ? ["-s", deviceId] : [];
|
|
63
63
|
const path = "/sdcard/execbro-ui.xml";
|
|
64
|
-
await
|
|
65
|
-
const dump = await
|
|
66
|
-
const { stdout } = await
|
|
64
|
+
await execFileAsync("adb", [...target, "shell", `rm -f ${path}`], { timeout: 10_000 }).catch(() => undefined);
|
|
65
|
+
const dump = await execFileAsync("adb", [...target, "shell", `uiautomator dump ${path}`], { timeout: 20_000 });
|
|
66
|
+
const { stdout } = await execFileAsync("adb", [...target, "shell", `cat ${path}`], { timeout: 20_000 });
|
|
67
67
|
if (!stdout.includes("<node")) {
|
|
68
68
|
const why = `${dump.stdout} ${dump.stderr}`.trim().replace(/\s+/g, " ").slice(0, 160);
|
|
69
69
|
return { fields: [], error: `uiautomator dump produced no hierarchy${why ? `: ${why}` : ""}` };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeInputValue.js","sourceRoot":"","sources":["../../src/core/nativeInputValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"nativeInputValue.js","sourceRoot":"","sources":["../../src/core/nativeInputValue.ts"],"names":[],"mappings":"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"}
|
package/build/core/nativeLogs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { connectedApps } from "./state.js";
|
|
2
2
|
import { listDevices, recordDevice } from "./projectMemory.js";
|
|
3
3
|
import { listAllDevices } from "./deviceDiscovery.js";
|
|
4
|
-
import {
|
|
4
|
+
import { execFileAsync } from "./exec.js";
|
|
5
5
|
import { getNativeLogBuffer, } from "./logEvents.js";
|
|
6
6
|
import { isOwned } from "./logOwnership.js";
|
|
7
7
|
import { groupIntoEvents } from "./logGrouping.js";
|
|
@@ -40,7 +40,7 @@ async function matchAndroidAppBySerial(serial, apps) {
|
|
|
40
40
|
if (candidates.length === 0)
|
|
41
41
|
return undefined;
|
|
42
42
|
try {
|
|
43
|
-
const { stdout } = await
|
|
43
|
+
const { stdout } = await execFileAsync("adb", ["-s", serial, "shell", "getprop ro.product.model"]);
|
|
44
44
|
const model = stdout.trim();
|
|
45
45
|
if (!model)
|
|
46
46
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeLogs.js","sourceRoot":"","sources":["../../src/core/nativeLogs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"nativeLogs.js","sourceRoot":"","sources":["../../src/core/nativeLogs.ts"],"names":[],"mappings":"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"}
|