execbro 2.7.0 → 2.8.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/build/__tests__/unit/deviceResolver.test.js +2 -0
- package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
- package/build/__tests__/unit/deviceResolverStaleRetry.test.js +1 -0
- package/build/__tests__/unit/deviceResolverStaleRetry.test.js.map +1 -1
- package/build/__tests__/unit/feedbackRepoSlug.test.d.ts +2 -0
- package/build/__tests__/unit/feedbackRepoSlug.test.d.ts.map +1 -0
- package/build/__tests__/unit/feedbackRepoSlug.test.js +34 -0
- package/build/__tests__/unit/feedbackRepoSlug.test.js.map +1 -0
- package/build/__tests__/unit/fingerprint.test.js +34 -1
- package/build/__tests__/unit/fingerprint.test.js.map +1 -1
- package/build/__tests__/unit/getLogsNativeSource.test.js +7 -0
- package/build/__tests__/unit/getLogsNativeSource.test.js.map +1 -1
- package/build/__tests__/unit/hidTypeVerify.test.d.ts +2 -0
- package/build/__tests__/unit/hidTypeVerify.test.d.ts.map +1 -0
- package/build/__tests__/unit/hidTypeVerify.test.js +89 -0
- package/build/__tests__/unit/hidTypeVerify.test.js.map +1 -0
- package/build/__tests__/unit/iosKeyboardLayout.test.d.ts +2 -0
- package/build/__tests__/unit/iosKeyboardLayout.test.d.ts.map +1 -0
- package/build/__tests__/unit/iosKeyboardLayout.test.js +63 -0
- package/build/__tests__/unit/iosKeyboardLayout.test.js.map +1 -0
- package/build/__tests__/unit/jsonProjection.test.d.ts +2 -0
- package/build/__tests__/unit/jsonProjection.test.d.ts.map +1 -0
- package/build/__tests__/unit/jsonProjection.test.js +148 -0
- package/build/__tests__/unit/jsonProjection.test.js.map +1 -0
- package/build/__tests__/unit/logEvents.test.js +10 -1
- package/build/__tests__/unit/logEvents.test.js.map +1 -1
- package/build/__tests__/unit/logOwnership.test.js +58 -0
- package/build/__tests__/unit/logOwnership.test.js.map +1 -1
- package/build/__tests__/unit/logSourceIos.test.js +13 -3
- package/build/__tests__/unit/logSourceIos.test.js.map +1 -1
- package/build/__tests__/unit/measureComponentResolution.test.d.ts +2 -0
- package/build/__tests__/unit/measureComponentResolution.test.d.ts.map +1 -0
- package/build/__tests__/unit/measureComponentResolution.test.js +111 -0
- package/build/__tests__/unit/measureComponentResolution.test.js.map +1 -0
- package/build/__tests__/unit/metroIdentity.test.d.ts +2 -0
- package/build/__tests__/unit/metroIdentity.test.d.ts.map +1 -0
- package/build/__tests__/unit/metroIdentity.test.js +41 -0
- package/build/__tests__/unit/metroIdentity.test.js.map +1 -0
- package/build/__tests__/unit/nativeLogs.test.js +93 -2
- package/build/__tests__/unit/nativeLogs.test.js.map +1 -1
- package/build/__tests__/unit/netSuppressionFlag.test.d.ts +2 -0
- package/build/__tests__/unit/netSuppressionFlag.test.d.ts.map +1 -0
- package/build/__tests__/unit/netSuppressionFlag.test.js +61 -0
- package/build/__tests__/unit/netSuppressionFlag.test.js.map +1 -0
- package/build/__tests__/unit/requestDetailsProjection.test.d.ts +2 -0
- package/build/__tests__/unit/requestDetailsProjection.test.d.ts.map +1 -0
- package/build/__tests__/unit/requestDetailsProjection.test.js +69 -0
- package/build/__tests__/unit/requestDetailsProjection.test.js.map +1 -0
- package/build/__tests__/unit/screenState.test.js +63 -2
- package/build/__tests__/unit/screenState.test.js.map +1 -1
- package/build/__tests__/unit/sdkMirrorPoller.test.js +26 -0
- package/build/__tests__/unit/sdkMirrorPoller.test.js.map +1 -1
- package/build/__tests__/unit/sdkPackageName.test.d.ts +2 -0
- package/build/__tests__/unit/sdkPackageName.test.d.ts.map +1 -0
- package/build/__tests__/unit/sdkPackageName.test.js +35 -0
- package/build/__tests__/unit/sdkPackageName.test.js.map +1 -0
- package/build/__tests__/unit/swipeDiagnosis.test.d.ts +2 -0
- package/build/__tests__/unit/swipeDiagnosis.test.d.ts.map +1 -0
- package/build/__tests__/unit/swipeDiagnosis.test.js +47 -0
- package/build/__tests__/unit/swipeDiagnosis.test.js.map +1 -0
- package/build/__tests__/unit/swipeDirection.test.js +30 -0
- package/build/__tests__/unit/swipeDirection.test.js.map +1 -1
- package/build/__tests__/unit/toolDescriptions.test.js +15 -0
- package/build/__tests__/unit/toolDescriptions.test.js.map +1 -1
- package/build/__tests__/unit/typedTextVerify.test.d.ts +2 -0
- package/build/__tests__/unit/typedTextVerify.test.d.ts.map +1 -0
- package/build/__tests__/unit/typedTextVerify.test.js +133 -0
- package/build/__tests__/unit/typedTextVerify.test.js.map +1 -0
- package/build/core/androidForeground.d.ts +4 -0
- package/build/core/androidForeground.d.ts.map +1 -0
- package/build/core/androidForeground.js +34 -0
- package/build/core/androidForeground.js.map +1 -0
- package/build/core/androidSystemBars.d.ts +1 -1
- package/build/core/androidSystemBars.d.ts.map +1 -1
- package/build/core/androidSystemBars.js +2 -2
- package/build/core/androidSystemBars.js.map +1 -1
- package/build/core/connection.d.ts +6 -0
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +63 -14
- package/build/core/connection.js.map +1 -1
- package/build/core/debugGlobals.js +1 -1
- package/build/core/deviceResolver.d.ts.map +1 -1
- package/build/core/deviceResolver.js +7 -1
- package/build/core/deviceResolver.js.map +1 -1
- package/build/core/feedback.d.ts +2 -0
- package/build/core/feedback.d.ts.map +1 -1
- package/build/core/feedback.js +21 -2
- package/build/core/feedback.js.map +1 -1
- package/build/core/fingerprint.d.ts +1 -0
- package/build/core/fingerprint.d.ts.map +1 -1
- package/build/core/fingerprint.js +48 -6
- package/build/core/fingerprint.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +6 -0
- package/build/core/guides.js.map +1 -1
- package/build/core/hidTypeVerify.d.ts +28 -0
- package/build/core/hidTypeVerify.d.ts.map +1 -0
- package/build/core/hidTypeVerify.js +76 -0
- package/build/core/hidTypeVerify.js.map +1 -0
- package/build/core/index.d.ts +1 -1
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +1 -1
- package/build/core/index.js.map +1 -1
- package/build/core/inputTarget.d.ts +1 -0
- package/build/core/inputTarget.d.ts.map +1 -1
- package/build/core/inputTarget.js +1 -0
- package/build/core/inputTarget.js.map +1 -1
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +1 -1
- package/build/core/ios.js.map +1 -1
- package/build/core/iosKeyboardLayout.d.ts +11 -0
- package/build/core/iosKeyboardLayout.d.ts.map +1 -0
- package/build/core/iosKeyboardLayout.js +55 -0
- package/build/core/iosKeyboardLayout.js.map +1 -0
- package/build/core/jsonProjection.d.ts +18 -0
- package/build/core/jsonProjection.d.ts.map +1 -0
- package/build/core/jsonProjection.js +249 -0
- package/build/core/jsonProjection.js.map +1 -0
- package/build/core/license.d.ts.map +1 -1
- package/build/core/license.js +2 -1
- package/build/core/license.js.map +1 -1
- package/build/core/logEvents.d.ts +3 -0
- package/build/core/logEvents.d.ts.map +1 -1
- package/build/core/logEvents.js +1 -0
- package/build/core/logEvents.js.map +1 -1
- package/build/core/logOwnership.d.ts +1 -1
- package/build/core/logOwnership.d.ts.map +1 -1
- package/build/core/logOwnership.js +3 -0
- package/build/core/logOwnership.js.map +1 -1
- package/build/core/logSourceIos.d.ts.map +1 -1
- package/build/core/logSourceIos.js +8 -2
- package/build/core/logSourceIos.js.map +1 -1
- package/build/core/measureComponent.d.ts.map +1 -1
- package/build/core/measureComponent.js +45 -11
- package/build/core/measureComponent.js.map +1 -1
- package/build/core/metroIdentity.d.ts +8 -0
- package/build/core/metroIdentity.d.ts.map +1 -0
- package/build/core/metroIdentity.js +65 -0
- package/build/core/metroIdentity.js.map +1 -0
- package/build/core/nativeLogs.d.ts +6 -0
- package/build/core/nativeLogs.d.ts.map +1 -1
- package/build/core/nativeLogs.js +42 -13
- package/build/core/nativeLogs.js.map +1 -1
- package/build/core/network.d.ts +2 -0
- package/build/core/network.d.ts.map +1 -1
- package/build/core/network.js +24 -11
- package/build/core/network.js.map +1 -1
- package/build/core/register.d.ts.map +1 -1
- package/build/core/register.js +25 -23
- package/build/core/register.js.map +1 -1
- package/build/core/rnGlobalsBootstrap.js +1 -1
- package/build/core/screenSpaceDevice.d.ts +5 -0
- package/build/core/screenSpaceDevice.d.ts.map +1 -1
- package/build/core/screenSpaceDevice.js +18 -0
- package/build/core/screenSpaceDevice.js.map +1 -1
- package/build/core/screenState.d.ts +8 -0
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +245 -32
- package/build/core/screenState.js.map +1 -1
- package/build/core/sdkMirrorPoller.d.ts.map +1 -1
- package/build/core/sdkMirrorPoller.js +2 -1
- package/build/core/sdkMirrorPoller.js.map +1 -1
- package/build/core/swipeDiagnosis.d.ts +17 -0
- package/build/core/swipeDiagnosis.d.ts.map +1 -0
- package/build/core/swipeDiagnosis.js +179 -0
- package/build/core/swipeDiagnosis.js.map +1 -0
- package/build/core/typedTextVerify.d.ts +18 -0
- package/build/core/typedTextVerify.d.ts.map +1 -0
- package/build/core/typedTextVerify.js +88 -0
- package/build/core/typedTextVerify.js.map +1 -0
- package/build/index.js +15 -0
- package/build/index.js.map +1 -1
- package/build/pro/tap.d.ts +6 -1
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +12 -3
- package/build/pro/tap.js.map +1 -1
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +12 -4
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/connectionTools.d.ts.map +1 -1
- package/build/tools/connectionTools.js +18 -0
- package/build/tools/connectionTools.js.map +1 -1
- package/build/tools/executionTools.d.ts.map +1 -1
- package/build/tools/executionTools.js +22 -6
- package/build/tools/executionTools.js.map +1 -1
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +68 -23
- package/build/tools/interactionTools.js.map +1 -1
- package/build/tools/logTools.d.ts.map +1 -1
- package/build/tools/logTools.js +9 -6
- package/build/tools/logTools.js.map +1 -1
- package/build/tools/networkTools.d.ts.map +1 -1
- package/build/tools/networkTools.js +18 -13
- package/build/tools/networkTools.js.map +1 -1
- package/build/tools/reduxTools.d.ts.map +1 -1
- package/build/tools/reduxTools.js +23 -4
- package/build/tools/reduxTools.js.map +1 -1
- package/build/tools/requestTools.d.ts.map +1 -1
- package/build/tools/requestTools.js +4 -3
- package/build/tools/requestTools.js.map +1 -1
- package/package.json +1 -1
- package/tools.json +7 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { describe, it, expect } from "@jest/globals";
|
|
2
|
+
import { readFileSync, readdirSync, statSync } from "fs";
|
|
3
|
+
import { join, dirname } from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
const SRC = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
6
|
+
const OLD_SDK = ["react-native", "ai-devtools", "sdk"].join("-");
|
|
7
|
+
const OLD_REPO = ["igorzheludkov/react-native", "ai-devtools"].join("-");
|
|
8
|
+
function sourceFiles(dir) {
|
|
9
|
+
return readdirSync(dir).flatMap((entry) => {
|
|
10
|
+
const path = join(dir, entry);
|
|
11
|
+
if (statSync(path).isDirectory()) {
|
|
12
|
+
return entry === "__tests__" || entry === "pro" ? [] : sourceFiles(path);
|
|
13
|
+
}
|
|
14
|
+
return path.endsWith(".ts") ? [path] : [];
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const hits = sourceFiles(SRC).flatMap((path) => readFileSync(path, "utf-8")
|
|
18
|
+
.split("\n")
|
|
19
|
+
.map((line, i) => ({ path, line: i + 1, text: line }))
|
|
20
|
+
.filter((entry) => entry.text.includes(OLD_SDK) || entry.text.includes(OLD_REPO)));
|
|
21
|
+
describe("pre-rename names do not leak into shipped strings", () => {
|
|
22
|
+
it("actually scans source (the surviving 'formerly' mentions are found)", () => {
|
|
23
|
+
expect(hits.length).toBeGreaterThan(0);
|
|
24
|
+
expect(hits.every((h) => h.text.includes("formerly"))).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
it("names no repo slug from before the execbro rename", () => {
|
|
27
|
+
const repoHits = hits.filter((h) => h.text.includes(OLD_REPO));
|
|
28
|
+
expect(repoHits.map((h) => `${h.path}:${h.line}`)).toEqual([]);
|
|
29
|
+
});
|
|
30
|
+
it("names the SDK package only as a 'formerly' aid to recognition", () => {
|
|
31
|
+
const bare = hits.filter((h) => h.text.includes(OLD_SDK) && !h.text.includes("formerly"));
|
|
32
|
+
expect(bare.map((h) => `${h.path}:${h.line}`)).toEqual([]);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=sdkPackageName.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdkPackageName.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/sdkPackageName.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipeDiagnosis.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/swipeDiagnosis.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { describe, it, expect } from "@jest/globals";
|
|
2
|
+
import { explainNoOpSwipe } from "../../core/swipeDiagnosis.js";
|
|
3
|
+
const start = { x: 400, y: 900 };
|
|
4
|
+
function probe(over = {}) {
|
|
5
|
+
return { found: true, horizontal: false, offset: 500, maxOffset: 4820, component: "FlatList", ...over };
|
|
6
|
+
}
|
|
7
|
+
describe("explainNoOpSwipe", () => {
|
|
8
|
+
it("says the gesture missed every scrollable surface, with the coordinates", () => {
|
|
9
|
+
const out = explainNoOpSwipe({ found: false }, start);
|
|
10
|
+
expect(out).toContain("no scroll view found under (400, 900)");
|
|
11
|
+
expect(out).not.toContain("end-of-scroll");
|
|
12
|
+
});
|
|
13
|
+
it("reports already-at-top with the offset", () => {
|
|
14
|
+
const out = explainNoOpSwipe(probe({ offset: 0 }), start);
|
|
15
|
+
expect(out).toContain("offset unchanged at 0");
|
|
16
|
+
expect(out).toContain("already at the top");
|
|
17
|
+
});
|
|
18
|
+
it("treats a subpixel offset as the top", () => {
|
|
19
|
+
expect(explainNoOpSwipe(probe({ offset: 1 }), start)).toContain("already at the top");
|
|
20
|
+
});
|
|
21
|
+
it("reports already-at-end with the offset and its maximum", () => {
|
|
22
|
+
const out = explainNoOpSwipe(probe({ offset: 4820, maxOffset: 4820 }), start);
|
|
23
|
+
expect(out).toContain("offset unchanged at 4820 (max)");
|
|
24
|
+
expect(out).toContain("already at the end");
|
|
25
|
+
});
|
|
26
|
+
it("reports a non-scrollable surface separately from an exhausted one", () => {
|
|
27
|
+
const out = explainNoOpSwipe(probe({ offset: 0, maxOffset: 0 }), start);
|
|
28
|
+
expect(out).toContain("not scrollable");
|
|
29
|
+
expect(out).not.toContain("already at the end");
|
|
30
|
+
});
|
|
31
|
+
it("names the axis mismatch when the gesture crosses the surface's axis", () => {
|
|
32
|
+
const out = explainNoOpSwipe(probe(), start, { dx: -400, dy: 0 });
|
|
33
|
+
expect(out).toContain("wrong axis");
|
|
34
|
+
expect(out).toContain("up/down");
|
|
35
|
+
});
|
|
36
|
+
it("does not cry axis mismatch when the axes agree", () => {
|
|
37
|
+
const out = explainNoOpSwipe(probe({ offset: 0 }), start, { dx: 0, dy: -600 });
|
|
38
|
+
expect(out).not.toContain("wrong axis");
|
|
39
|
+
expect(out).toContain("already at the top");
|
|
40
|
+
});
|
|
41
|
+
it("falls through to 'did not reach it' only when mid-scroll on the right axis", () => {
|
|
42
|
+
const out = explainNoOpSwipe(probe({ offset: 1648, maxOffset: 30036 }), start, { dx: 0, dy: -600 });
|
|
43
|
+
expect(out).toContain("offset unchanged at 1648 of 30036");
|
|
44
|
+
expect(out).toContain("did not reach it");
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=swipeDiagnosis.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipeDiagnosis.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/swipeDiagnosis.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,4 +64,34 @@ describe("computeSwipeFromDirection — odd distance and one-sided clamp", () =>
|
|
|
64
64
|
expect(r.endY).toBeGreaterThanOrEqual(lo);
|
|
65
65
|
});
|
|
66
66
|
});
|
|
67
|
+
describe("computeSwipeFromDirection — system-bar safe band", () => {
|
|
68
|
+
const band = { top: 140, bottom: 150 };
|
|
69
|
+
it("keeps a vertical gesture clear of the bottom strip when the band is stricter", () => {
|
|
70
|
+
const r = computeSwipeFromDirection("up", 500, 400, 600, band);
|
|
71
|
+
expect(r.startY).toBeLessThanOrEqual(600 - band.bottom);
|
|
72
|
+
expect(r.endY).toBeGreaterThanOrEqual(band.top);
|
|
73
|
+
});
|
|
74
|
+
it("keeps the 10% margin when it is the stricter of the two", () => {
|
|
75
|
+
const withBand = computeSwipeFromDirection("up", 5000, W, H, band);
|
|
76
|
+
const without = computeSwipeFromDirection("up", 5000, W, H);
|
|
77
|
+
expect(withBand.startY).toBe(without.startY);
|
|
78
|
+
expect(withBand.endY).toBe(without.endY);
|
|
79
|
+
});
|
|
80
|
+
it("clamps a distance large enough to push past the strip", () => {
|
|
81
|
+
const r = computeSwipeFromDirection("up", 100000, W, H, band);
|
|
82
|
+
expect(r.startY).toBeLessThanOrEqual(H - band.bottom);
|
|
83
|
+
expect(r.startY).toBeGreaterThan(r.endY);
|
|
84
|
+
});
|
|
85
|
+
it("leaves horizontal gestures alone — the band is a vertical constraint", () => {
|
|
86
|
+
const withBand = computeSwipeFromDirection("left", 400, W, H, band);
|
|
87
|
+
const without = computeSwipeFromDirection("left", 400, W, H);
|
|
88
|
+
expect(withBand).toEqual(without);
|
|
89
|
+
});
|
|
90
|
+
it("falls back to the plain margin when the band would swallow the axis", () => {
|
|
91
|
+
const r = computeSwipeFromDirection("up", 200, 400, 300, { top: 200, bottom: 200 });
|
|
92
|
+
expect(r.startY).toBeGreaterThan(r.endY);
|
|
93
|
+
expect(r.startY).toBeLessThanOrEqual(300);
|
|
94
|
+
expect(r.endY).toBeGreaterThanOrEqual(0);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
67
97
|
//# sourceMappingURL=swipeDirection.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swipeDirection.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/swipeDirection.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"swipeDirection.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/swipeDirection.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -102,4 +102,19 @@ describe("Tool descriptions (registration enforcement)", () => {
|
|
|
102
102
|
expect(totalBytes).toBeLessThan(500_000);
|
|
103
103
|
});
|
|
104
104
|
});
|
|
105
|
+
describe("request tools describe their real auth resolution", () => {
|
|
106
|
+
const byName = new Map(Array.from(toolRegistry.entries()).map(([name, { config }]) => [
|
|
107
|
+
name,
|
|
108
|
+
String(config?.description ?? ""),
|
|
109
|
+
]));
|
|
110
|
+
it("app_request documents the captured-request fallback it implements", () => {
|
|
111
|
+
expect(byName.get("app_request")).toMatch(/captured request/i);
|
|
112
|
+
});
|
|
113
|
+
it("app_request says cookie auth needs no token resolution at all", () => {
|
|
114
|
+
expect(byName.get("app_request")).toMatch(/cookie/i);
|
|
115
|
+
});
|
|
116
|
+
it("network_replay says cookies ride along with the captured credentials", () => {
|
|
117
|
+
expect(byName.get("network_replay")).toMatch(/cookie/i);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
105
120
|
//# sourceMappingURL=toolDescriptions.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolDescriptions.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/toolDescriptions.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolDescriptions.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/toolDescriptions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedTextVerify.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/typedTextVerify.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { describe, expect, it } from "@jest/globals";
|
|
2
|
+
import { matchTypedText, scriptOf, verdictForTypedText } from "../../core/typedTextVerify.js";
|
|
3
|
+
describe("field-applied formatting vs. a real remap (device-found)", () => {
|
|
4
|
+
it("verifies text the field capitalized itself", () => {
|
|
5
|
+
const v = verdictForTypedText({
|
|
6
|
+
sent: "abc",
|
|
7
|
+
expected: "abc",
|
|
8
|
+
landed: "Abc",
|
|
9
|
+
nonLatinKeyboards: ["uk_UA (Ukrainian)"]
|
|
10
|
+
});
|
|
11
|
+
expect(v.status).toBe("verified");
|
|
12
|
+
expect(v.message).toContain("its own formatting");
|
|
13
|
+
});
|
|
14
|
+
it("verifies an append when the prior text could not be known", () => {
|
|
15
|
+
const v = verdictForTypedText({
|
|
16
|
+
sent: "envcheck@example.com",
|
|
17
|
+
expected: "Searchenvcheck@example.com",
|
|
18
|
+
landed: "Envcheck@example.com",
|
|
19
|
+
nonLatinKeyboards: []
|
|
20
|
+
});
|
|
21
|
+
expect(v.status).toBe("verified");
|
|
22
|
+
});
|
|
23
|
+
it("still fails the Cyrillic remap that motivated the check", () => {
|
|
24
|
+
const v = verdictForTypedText({
|
|
25
|
+
sent: "envcheck@example.com",
|
|
26
|
+
expected: "envcheck@example.com",
|
|
27
|
+
landed: 'envchус"учфьздуюсщь',
|
|
28
|
+
nonLatinKeyboards: ["uk_UA (Ukrainian)"]
|
|
29
|
+
});
|
|
30
|
+
expect(v.status).toBe("mismatch");
|
|
31
|
+
expect(v.message).toContain("Cyrillic");
|
|
32
|
+
expect(v.message).toContain("uk_UA (Ukrainian)");
|
|
33
|
+
});
|
|
34
|
+
it("still fails when nothing was typed and the placeholder remains", () => {
|
|
35
|
+
const v = verdictForTypedText({
|
|
36
|
+
sent: "abc",
|
|
37
|
+
expected: "Searchabc",
|
|
38
|
+
landed: "Search",
|
|
39
|
+
nonLatinKeyboards: []
|
|
40
|
+
});
|
|
41
|
+
expect(v.status).toBe("mismatch");
|
|
42
|
+
});
|
|
43
|
+
it("still fails a truncated write", () => {
|
|
44
|
+
expect(matchTypedText("envcheck@exa", "envcheck@example.com", "envcheck@example.com")).toBe("none");
|
|
45
|
+
});
|
|
46
|
+
it("does not treat an empty send as proof of anything", () => {
|
|
47
|
+
expect(matchTypedText("Search", "Search", "")).toBe("exact");
|
|
48
|
+
expect(matchTypedText("anything else", "Search", "")).toBe("none");
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("scriptOf", () => {
|
|
52
|
+
it("returns null for plain ASCII", () => {
|
|
53
|
+
expect(scriptOf("envcheck@example.com")).toBeNull();
|
|
54
|
+
});
|
|
55
|
+
it("names the script that actually arrived", () => {
|
|
56
|
+
expect(scriptOf("учфьздуюсщь")).toBe("Cyrillic");
|
|
57
|
+
expect(scriptOf("שלום")).toBe("Hebrew");
|
|
58
|
+
expect(scriptOf("δοκιμή")).toBe("Greek");
|
|
59
|
+
expect(scriptOf("مرحبا")).toBe("Arabic");
|
|
60
|
+
expect(scriptOf("テスト")).toBe("Japanese");
|
|
61
|
+
});
|
|
62
|
+
it("names the script even when only part of the text was remapped", () => {
|
|
63
|
+
expect(scriptOf("envchусл\"учфьздуюсщь")).toBe("Cyrillic");
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe("verdictForTypedText", () => {
|
|
67
|
+
it("confirms only when the field really holds the expected text", () => {
|
|
68
|
+
const v = verdictForTypedText({
|
|
69
|
+
sent: "hello",
|
|
70
|
+
expected: "hello",
|
|
71
|
+
landed: "hello",
|
|
72
|
+
nonLatinKeyboards: []
|
|
73
|
+
});
|
|
74
|
+
expect(v.status).toBe("verified");
|
|
75
|
+
expect(v.message).toContain('"hello"');
|
|
76
|
+
});
|
|
77
|
+
it("reports a layout remap as a mismatch, naming the script and the fix", () => {
|
|
78
|
+
const v = verdictForTypedText({
|
|
79
|
+
sent: "envcheck@example.com",
|
|
80
|
+
expected: "envcheck@example.com",
|
|
81
|
+
landed: "Ким Русь»учфьздуюсщь",
|
|
82
|
+
nonLatinKeyboards: ["uk_UA (Ukrainian)", "he_IL (Hebrew)"]
|
|
83
|
+
});
|
|
84
|
+
expect(v.status).toBe("mismatch");
|
|
85
|
+
expect(v.message).toContain("did NOT land");
|
|
86
|
+
expect(v.message).toContain("Cyrillic");
|
|
87
|
+
expect(v.message).toContain("uk_UA (Ukrainian)");
|
|
88
|
+
expect(v.message).toContain("input_text");
|
|
89
|
+
expect(v.message).not.toMatch(/^Typed text/);
|
|
90
|
+
});
|
|
91
|
+
it("reports a plain ASCII mismatch without inventing a layout cause", () => {
|
|
92
|
+
const v = verdictForTypedText({
|
|
93
|
+
sent: "CASEB",
|
|
94
|
+
expected: "CASEB",
|
|
95
|
+
landed: "CSEBA",
|
|
96
|
+
nonLatinKeyboards: []
|
|
97
|
+
});
|
|
98
|
+
expect(v.status).toBe("mismatch");
|
|
99
|
+
expect(v.message).not.toContain("keyboard layout");
|
|
100
|
+
});
|
|
101
|
+
it("does not claim success when the field could not be read", () => {
|
|
102
|
+
const v = verdictForTypedText({
|
|
103
|
+
sent: "hello",
|
|
104
|
+
expected: "hello",
|
|
105
|
+
landed: null,
|
|
106
|
+
readError: "axe describe-ui failed",
|
|
107
|
+
nonLatinKeyboards: []
|
|
108
|
+
});
|
|
109
|
+
expect(v.status).toBe("unverified");
|
|
110
|
+
expect(v.message).toContain("NOT verified");
|
|
111
|
+
expect(v.message).toContain("axe describe-ui failed");
|
|
112
|
+
});
|
|
113
|
+
it("warns about non-Latin keyboards even when the read-back failed", () => {
|
|
114
|
+
const v = verdictForTypedText({
|
|
115
|
+
sent: "hello",
|
|
116
|
+
expected: "hello",
|
|
117
|
+
landed: null,
|
|
118
|
+
nonLatinKeyboards: ["uk_UA (Ukrainian)"]
|
|
119
|
+
});
|
|
120
|
+
expect(v.status).toBe("unverified");
|
|
121
|
+
expect(v.message).toContain("uk_UA (Ukrainian)");
|
|
122
|
+
});
|
|
123
|
+
it("treats an append onto existing text as expected, not as corruption", () => {
|
|
124
|
+
const v = verdictForTypedText({
|
|
125
|
+
sent: "world",
|
|
126
|
+
expected: "hello world",
|
|
127
|
+
landed: "hello world",
|
|
128
|
+
nonLatinKeyboards: []
|
|
129
|
+
});
|
|
130
|
+
expect(v.status).toBe("verified");
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=typedTextVerify.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedTextVerify.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/typedTextVerify.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function androidForegroundPackage(deviceId?: string): Promise<string | null>;
|
|
2
|
+
export declare function parseForegroundPackage(dump: string): string | null;
|
|
3
|
+
export declare function foregroundLossWarning(expectedPackage: string | null | undefined, actualPackage: string | null): string | null;
|
|
4
|
+
//# sourceMappingURL=androidForeground.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"androidForeground.d.ts","sourceRoot":"","sources":["../../src/core/androidForeground.ts"],"names":[],"mappings":"AAeA,wBAAsB,wBAAwB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxF;AAWD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASlE;AAUD,wBAAgB,qBAAqB,CACjC,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,GAC7B,MAAM,GAAG,IAAI,CASf"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { execFileAsync } from "./exec.js";
|
|
2
|
+
export async function androidForegroundPackage(deviceId) {
|
|
3
|
+
const deviceArgs = deviceId ? ["-s", deviceId] : [];
|
|
4
|
+
try {
|
|
5
|
+
const { stdout } = await execFileAsync("adb", [...deviceArgs, "shell", "dumpsys window | grep -m2 mCurrentFocus"], { timeout: 5000 });
|
|
6
|
+
return parseForegroundPackage(stdout);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function parseForegroundPackage(dump) {
|
|
13
|
+
if (!dump)
|
|
14
|
+
return null;
|
|
15
|
+
for (const line of dump.split("\n")) {
|
|
16
|
+
if (line.indexOf("mCurrentFocus") === -1)
|
|
17
|
+
continue;
|
|
18
|
+
const m = line.match(/([A-Za-z][A-Za-z0-9_]*(?:\.[A-Za-z0-9_]+)+)\//);
|
|
19
|
+
if (m)
|
|
20
|
+
return m[1];
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
export function foregroundLossWarning(expectedPackage, actualPackage) {
|
|
25
|
+
if (!expectedPackage || !actualPackage)
|
|
26
|
+
return null;
|
|
27
|
+
if (actualPackage === expectedPackage)
|
|
28
|
+
return null;
|
|
29
|
+
return (`⚠️ APP LEFT THE FOREGROUND — the focused package is now "${actualPackage}", not "${expectedPackage}". ` +
|
|
30
|
+
`The gesture was probably claimed by the system (the home-gesture strip at the bottom edge does this). ` +
|
|
31
|
+
`Any screenshot taken now shows another app, and coordinates captured before this gesture are no longer valid — ` +
|
|
32
|
+
`do NOT tap them. Bring the app back with android_launch_app, then re-read the screen.`);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=androidForeground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"androidForeground.js","sourceRoot":"","sources":["../../src/core/androidForeground.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAe1C,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAiB;IAC5D,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,IAAI,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAClC,KAAK,EACL,CAAC,GAAG,UAAU,EAAE,OAAO,EAAE,yCAAyC,CAAC,EACnE,EAAE,OAAO,EAAE,IAAI,EAAE,CACpB,CAAC;QACF,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAWD,MAAM,UAAU,sBAAsB,CAAC,IAAY;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAAE,SAAS;QAEnD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACtE,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAUD,MAAM,UAAU,qBAAqB,CACjC,eAA0C,EAC1C,aAA4B;IAE5B,IAAI,CAAC,eAAe,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,aAAa,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,CACH,4DAA4D,aAAa,WAAW,eAAe,KAAK;QACxG,wGAAwG;QACxG,iHAAiH;QACjH,uFAAuF,CAC1F,CAAC;AACN,CAAC"}
|
|
@@ -3,5 +3,5 @@ export interface SystemBarInsets {
|
|
|
3
3
|
top: number;
|
|
4
4
|
bottom: number;
|
|
5
5
|
}
|
|
6
|
-
export declare function androidSystemBarInsets(deviceId?: string): Promise<SystemBarInsets | null>;
|
|
6
|
+
export declare function androidSystemBarInsets(deviceId?: string, marginPx?: number): Promise<SystemBarInsets | null>;
|
|
7
7
|
//# sourceMappingURL=androidSystemBars.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"androidSystemBars.d.ts","sourceRoot":"","sources":["../../src/core/androidSystemBars.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,WAAW,eAAe;IAE5B,GAAG,EAAE,MAAM,CAAC;IAEZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAkBD,wBAAsB,sBAAsB,CACxC,QAAQ,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"androidSystemBars.d.ts","sourceRoot":"","sources":["../../src/core/androidSystemBars.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,WAAW,eAAe;IAE5B,GAAG,EAAE,MAAM,CAAC;IAEZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAkBD,wBAAsB,sBAAsB,CACxC,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAiC,GAC5C,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqCjC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execFileAsync } from "./exec.js";
|
|
2
2
|
export const SYSTEM_GESTURE_MARGIN_PX = 64;
|
|
3
|
-
export async function androidSystemBarInsets(deviceId) {
|
|
3
|
+
export async function androidSystemBarInsets(deviceId, marginPx = SYSTEM_GESTURE_MARGIN_PX) {
|
|
4
4
|
const deviceArgs = deviceId ? ["-s", deviceId] : [];
|
|
5
5
|
try {
|
|
6
6
|
const { stdout } = await execFileAsync("adb", [...deviceArgs, "shell", "dumpsys window | grep -E 'InsetsSource.*(statusBars|navigationBars)'"], { timeout: 10000 });
|
|
@@ -12,7 +12,7 @@ export async function androidSystemBarInsets(deviceId) {
|
|
|
12
12
|
return null;
|
|
13
13
|
if (top === 0 && bottom === 0)
|
|
14
14
|
return null;
|
|
15
|
-
return { top: top +
|
|
15
|
+
return { top: top + marginPx, bottom: bottom + marginPx };
|
|
16
16
|
}
|
|
17
17
|
catch {
|
|
18
18
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"androidSystemBars.js","sourceRoot":"","sources":["../../src/core/androidSystemBars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAM1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAyB3C,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,QAAiB;
|
|
1
|
+
{"version":3,"file":"androidSystemBars.js","sourceRoot":"","sources":["../../src/core/androidSystemBars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAM1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAyB3C,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,QAAiB,EACjB,WAAmB,wBAAwB;IAE3C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,IAAI,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAClC,KAAK,EACL,CAAC,GAAG,UAAU,EAAE,OAAO,EAAE,sEAAsE,CAAC,EAChG,EAAE,OAAO,EAAE,KAAK,EAAE,CACrB,CAAC;QAIF,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAE9E,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACnE,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAe3C,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import WebSocket from "ws";
|
|
2
2
|
import { DeviceInfo, RemoteObject, ConnectedApp, ConnectOptions, EnsureConnectionResult, ConnectionCheckResult } from "./types.js";
|
|
3
|
+
export declare function recordDeviceSeen(name: string | null | undefined): void;
|
|
4
|
+
export declare function findDisconnectedDeviceName(device: string): {
|
|
5
|
+
name: string;
|
|
6
|
+
lastSeenAt: number;
|
|
7
|
+
} | null;
|
|
8
|
+
export declare function resetDevicesSeenThisSession(): void;
|
|
3
9
|
export declare function suppressReconnection(): void;
|
|
4
10
|
export declare function suppressReconnectionForKey(appKey: string): void;
|
|
5
11
|
export declare function clearReconnectionSuppression(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/core/connection.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAoB,YAAY,EAAkB,cAAc,EAAsB,sBAAsB,EAAmB,qBAAqB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/core/connection.ts"],"names":[],"mappings":"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"}
|
package/build/core/connection.js
CHANGED
|
@@ -15,6 +15,26 @@ import { startSdkMirrorPoller, stopSdkMirrorPoller } from "./sdkMirrorPoller.js"
|
|
|
15
15
|
import { DEFAULT_RECONNECTION_CONFIG, MIN_STABLE_CONNECTION_MS, initConnectionState, updateConnectionState, getConnectionState, recordConnectionGap, closeConnectionGap, saveConnectionMetadata, clearConnectionMetadata, getConnectionMetadata, saveReconnectionTimer, cancelReconnectionTimer, calculateBackoffDelay, initContextHealth, markContextHealthy, markContextStale, getContextHealth, updateContextHealth, formatDuration, recordConnectionEvent, } from "./connectionState.js";
|
|
16
16
|
const connectionLocks = new Set();
|
|
17
17
|
const lastTargetIdByDevice = new Map();
|
|
18
|
+
const devicesSeenThisSession = new Map();
|
|
19
|
+
export function recordDeviceSeen(name) {
|
|
20
|
+
const key = (name || "").trim();
|
|
21
|
+
if (key)
|
|
22
|
+
devicesSeenThisSession.set(key, Date.now());
|
|
23
|
+
}
|
|
24
|
+
export function findDisconnectedDeviceName(device) {
|
|
25
|
+
const needle = normalizeDeviceId(device);
|
|
26
|
+
if (!needle)
|
|
27
|
+
return null;
|
|
28
|
+
for (const [name, lastSeenAt] of devicesSeenThisSession.entries()) {
|
|
29
|
+
const norm = normalizeDeviceId(name);
|
|
30
|
+
if (norm.includes(needle) || needle.includes(norm))
|
|
31
|
+
return { name, lastSeenAt };
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
export function resetDevicesSeenThisSession() {
|
|
36
|
+
devicesSeenThisSession.clear();
|
|
37
|
+
}
|
|
18
38
|
const pendingNetworkEnableIds = new Set();
|
|
19
39
|
const pendingSdkProbeIds = new Map();
|
|
20
40
|
const SDK_PROBE_INITIAL_DELAY_MS = 200;
|
|
@@ -69,6 +89,22 @@ function scheduleFastSdkReprobe(ws, appKey) {
|
|
|
69
89
|
ws.once("close", () => clearTimeout(t));
|
|
70
90
|
}
|
|
71
91
|
}
|
|
92
|
+
function sendNetSuppressionFlag(ws, disabled) {
|
|
93
|
+
if (ws.readyState !== WebSocket.OPEN)
|
|
94
|
+
return;
|
|
95
|
+
try {
|
|
96
|
+
ws.send(JSON.stringify({
|
|
97
|
+
id: getNextMessageId(),
|
|
98
|
+
method: "Runtime.evaluate",
|
|
99
|
+
params: {
|
|
100
|
+
expression: `globalThis.__RN_NET_DISABLED__ = ${disabled ? "true" : "false"}`,
|
|
101
|
+
returnByValue: true
|
|
102
|
+
}
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
}
|
|
107
|
+
}
|
|
72
108
|
const reconnectionSuppressed = new Set();
|
|
73
109
|
export function suppressReconnection() {
|
|
74
110
|
for (const key of connectedApps.keys()) {
|
|
@@ -464,20 +500,7 @@ export function handleCDPMessage(message, device, ws) {
|
|
|
464
500
|
app.sdkPresent = nextPresent;
|
|
465
501
|
if (nextPresent !== wasPresent) {
|
|
466
502
|
console.error(`[execbro] SDK ${present ? "detected" : "no longer detected"} on ${app.deviceInfo.title}; CDP/JS-interceptor buffer writes ${present ? "suppressed" : "restored"}`);
|
|
467
|
-
|
|
468
|
-
try {
|
|
469
|
-
app.ws.send(JSON.stringify({
|
|
470
|
-
id: getNextMessageId(),
|
|
471
|
-
method: "Runtime.evaluate",
|
|
472
|
-
params: {
|
|
473
|
-
expression: `globalThis.__RN_NET_DISABLED__ = ${present ? "true" : "false"}`,
|
|
474
|
-
returnByValue: true
|
|
475
|
-
}
|
|
476
|
-
}));
|
|
477
|
-
}
|
|
478
|
-
catch {
|
|
479
|
-
}
|
|
480
|
-
}
|
|
503
|
+
sendNetSuppressionFlag(app.ws, nextPresent);
|
|
481
504
|
}
|
|
482
505
|
}
|
|
483
506
|
return;
|
|
@@ -634,6 +657,7 @@ export function handleCDPMessage(message, device, ws) {
|
|
|
634
657
|
const ctxApp = connectedApps.get(appKey);
|
|
635
658
|
if (ctxApp?.ws?.readyState === WebSocket.OPEN) {
|
|
636
659
|
injectNetworkInterceptor(ctxApp.ws);
|
|
660
|
+
sendNetSuppressionFlag(ctxApp.ws, ctxApp.sdkPresent === true);
|
|
637
661
|
pushMockRules(ctxApp.ws, serializeRules(device.deviceName || device.title || "unknown"));
|
|
638
662
|
const nEnableId = sendNetworkEnable(ctxApp.ws);
|
|
639
663
|
pendingNetworkEnableIds.add(nEnableId);
|
|
@@ -790,6 +814,7 @@ export async function connectToDevice(device, port, options = {}) {
|
|
|
790
814
|
}
|
|
791
815
|
connectionLocks.delete(appKey);
|
|
792
816
|
connectedApps.set(appKey, { ws, deviceInfo: device, port, platform: "android" });
|
|
817
|
+
recordDeviceSeen(device.deviceName || device.title);
|
|
793
818
|
markConnectionEstablished();
|
|
794
819
|
const bufferKey = device.deviceName || device.title || "unknown";
|
|
795
820
|
const previousTargetId = lastTargetIdByDevice.get(bufferKey);
|
|
@@ -1032,6 +1057,17 @@ function guessRequestedPlatform(device) {
|
|
|
1032
1057
|
function deviceLabel(app) {
|
|
1033
1058
|
return app.deviceInfo.deviceName || app.deviceInfo.title || "";
|
|
1034
1059
|
}
|
|
1060
|
+
function formatAgo(ms) {
|
|
1061
|
+
if (!Number.isFinite(ms) || ms < 0)
|
|
1062
|
+
return "just now";
|
|
1063
|
+
const s = Math.round(ms / 1000);
|
|
1064
|
+
if (s < 60)
|
|
1065
|
+
return `${s}s ago`;
|
|
1066
|
+
const m = Math.round(s / 60);
|
|
1067
|
+
if (m < 60)
|
|
1068
|
+
return `${m}m ago`;
|
|
1069
|
+
return `${Math.round(m / 60)}h ago`;
|
|
1070
|
+
}
|
|
1035
1071
|
export function describeDeviceResolution(resolution) {
|
|
1036
1072
|
if (resolution.kind === "ok")
|
|
1037
1073
|
return "";
|
|
@@ -1043,6 +1079,19 @@ export function describeDeviceResolution(resolution) {
|
|
|
1043
1079
|
if (!device) {
|
|
1044
1080
|
return "No apps connected. Run scan_metro to discover and connect to Metro servers.";
|
|
1045
1081
|
}
|
|
1082
|
+
const dropped = findDisconnectedDeviceName(device);
|
|
1083
|
+
if (dropped) {
|
|
1084
|
+
const ago = formatAgo(Date.now() - dropped.lastSeenAt);
|
|
1085
|
+
const others = connected.length > 0
|
|
1086
|
+
? ` Still connected: ${connected.map(a => `"${deviceLabel(a)}"`).join(", ")}.`
|
|
1087
|
+
: " No devices are connected right now.";
|
|
1088
|
+
return [
|
|
1089
|
+
`Device "${dropped.name}" DISCONNECTED — it was attached earlier in this session (last seen ${ago})`,
|
|
1090
|
+
`and no longer is. The name is correct; the device dropped off.${others}`,
|
|
1091
|
+
`Run scan_metro to re-attach. If that finds nothing, the emulator/simulator or the app itself has exited —`,
|
|
1092
|
+
`check list_devices, then relaunch the app.`
|
|
1093
|
+
].join(" ");
|
|
1094
|
+
}
|
|
1046
1095
|
if (connected.length === 0) {
|
|
1047
1096
|
return `No connected device matches "${device}". No devices are currently connected — run scan_metro to discover and connect to Metro servers.`;
|
|
1048
1097
|
}
|