execbro 2.12.3 → 2.13.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 +15 -1
- package/build/__tests__/unit/autoReconnectOptOut.test.js +3 -0
- package/build/__tests__/unit/autoReconnectOptOut.test.js.map +1 -1
- package/build/__tests__/unit/cdpCommand.test.d.ts +2 -0
- package/build/__tests__/unit/cdpCommand.test.d.ts.map +1 -0
- package/build/__tests__/unit/cdpCommand.test.js +84 -0
- package/build/__tests__/unit/cdpCommand.test.js.map +1 -0
- package/build/__tests__/unit/chromium.test.d.ts +2 -0
- package/build/__tests__/unit/chromium.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromium.test.js +118 -0
- package/build/__tests__/unit/chromium.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDevice.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDevice.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDevice.test.js +115 -0
- package/build/__tests__/unit/chromiumDevice.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDialogAnswer.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDialogAnswer.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDialogAnswer.test.js +71 -0
- package/build/__tests__/unit/chromiumDialogAnswer.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDialogRaces.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDialogRaces.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDialogRaces.test.js +100 -0
- package/build/__tests__/unit/chromiumDialogRaces.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDialogs.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDialogs.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDialogs.test.js +167 -0
- package/build/__tests__/unit/chromiumDialogs.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDiscovery.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDiscovery.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDiscovery.test.js +302 -0
- package/build/__tests__/unit/chromiumDiscovery.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDom.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDom.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDom.test.js +119 -0
- package/build/__tests__/unit/chromiumDom.test.js.map +1 -0
- package/build/__tests__/unit/chromiumGate.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumGate.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumGate.test.js +149 -0
- package/build/__tests__/unit/chromiumGate.test.js.map +1 -0
- package/build/__tests__/unit/chromiumInput.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumInput.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumInput.test.js +113 -0
- package/build/__tests__/unit/chromiumInput.test.js.map +1 -0
- package/build/__tests__/unit/chromiumKeys.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumKeys.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumKeys.test.js +26 -0
- package/build/__tests__/unit/chromiumKeys.test.js.map +1 -0
- package/build/__tests__/unit/chromiumScreen.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumScreen.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumScreen.test.js +390 -0
- package/build/__tests__/unit/chromiumScreen.test.js.map +1 -0
- package/build/__tests__/unit/chromiumStaleTarget.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumStaleTarget.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumStaleTarget.test.js +26 -0
- package/build/__tests__/unit/chromiumStaleTarget.test.js.map +1 -0
- package/build/__tests__/unit/connectionGaps.test.d.ts +2 -0
- package/build/__tests__/unit/connectionGaps.test.d.ts.map +1 -0
- package/build/__tests__/unit/connectionGaps.test.js +14 -0
- package/build/__tests__/unit/connectionGaps.test.js.map +1 -0
- package/build/__tests__/unit/contextPreambleGlobals.test.d.ts +2 -0
- package/build/__tests__/unit/contextPreambleGlobals.test.d.ts.map +1 -0
- package/build/__tests__/unit/contextPreambleGlobals.test.js +25 -0
- package/build/__tests__/unit/contextPreambleGlobals.test.js.map +1 -0
- package/build/__tests__/unit/deviceResolver.test.js +9 -0
- package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
- package/build/__tests__/unit/electronLaunch.test.d.ts +2 -0
- package/build/__tests__/unit/electronLaunch.test.d.ts.map +1 -0
- package/build/__tests__/unit/electronLaunch.test.js +165 -0
- package/build/__tests__/unit/electronLaunch.test.js.map +1 -0
- package/build/__tests__/unit/fiberRoots.test.d.ts +2 -0
- package/build/__tests__/unit/fiberRoots.test.d.ts.map +1 -0
- package/build/__tests__/unit/fiberRoots.test.js +95 -0
- package/build/__tests__/unit/fiberRoots.test.js.map +1 -0
- package/build/__tests__/unit/fiberRootsDrift.test.d.ts +2 -0
- package/build/__tests__/unit/fiberRootsDrift.test.d.ts.map +1 -0
- package/build/__tests__/unit/fiberRootsDrift.test.js +23 -0
- package/build/__tests__/unit/fiberRootsDrift.test.js.map +1 -0
- package/build/__tests__/unit/hostAddress.test.d.ts +2 -0
- package/build/__tests__/unit/hostAddress.test.d.ts.map +1 -0
- package/build/__tests__/unit/hostAddress.test.js +38 -0
- package/build/__tests__/unit/hostAddress.test.js.map +1 -0
- package/build/__tests__/unit/measureComponent.test.js +1 -1
- package/build/__tests__/unit/measureComponent.test.js.map +1 -1
- package/build/__tests__/unit/networkInterceptorFetchMock.test.d.ts +2 -0
- package/build/__tests__/unit/networkInterceptorFetchMock.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkInterceptorFetchMock.test.js +90 -0
- package/build/__tests__/unit/networkInterceptorFetchMock.test.js.map +1 -0
- package/build/__tests__/unit/networkMockTool.test.js +12 -1
- package/build/__tests__/unit/networkMockTool.test.js.map +1 -1
- package/build/__tests__/unit/pressKeyMobile.test.d.ts +2 -0
- package/build/__tests__/unit/pressKeyMobile.test.d.ts.map +1 -0
- package/build/__tests__/unit/pressKeyMobile.test.js +63 -0
- package/build/__tests__/unit/pressKeyMobile.test.js.map +1 -0
- package/build/__tests__/unit/reloadAppAutoConnect.test.js +4 -1
- package/build/__tests__/unit/reloadAppAutoConnect.test.js.map +1 -1
- package/build/__tests__/unit/tapAndroidSerial.test.js +16 -0
- package/build/__tests__/unit/tapAndroidSerial.test.js.map +1 -1
- package/build/core/android.d.ts +10 -0
- package/build/core/android.d.ts.map +1 -1
- package/build/core/android.js +17 -0
- package/build/core/android.js.map +1 -1
- package/build/core/appContext.d.ts.map +1 -1
- package/build/core/appContext.js +11 -13
- package/build/core/appContext.js.map +1 -1
- package/build/core/appDetection.d.ts.map +1 -1
- package/build/core/appDetection.js +7 -4
- package/build/core/appDetection.js.map +1 -1
- package/build/core/cdpCommand.d.ts +4 -0
- package/build/core/cdpCommand.d.ts.map +1 -0
- package/build/core/cdpCommand.js +58 -0
- package/build/core/cdpCommand.js.map +1 -0
- package/build/core/chromium.d.ts +157 -0
- package/build/core/chromium.d.ts.map +1 -0
- package/build/core/chromium.js +480 -0
- package/build/core/chromium.js.map +1 -0
- package/build/core/chromiumCapabilities.d.ts +11 -0
- package/build/core/chromiumCapabilities.d.ts.map +1 -0
- package/build/core/chromiumCapabilities.js +35 -0
- package/build/core/chromiumCapabilities.js.map +1 -0
- package/build/core/chromiumDialogAnswer.d.ts +11 -0
- package/build/core/chromiumDialogAnswer.d.ts.map +1 -0
- package/build/core/chromiumDialogAnswer.js +61 -0
- package/build/core/chromiumDialogAnswer.js.map +1 -0
- package/build/core/chromiumDialogs.d.ts +46 -0
- package/build/core/chromiumDialogs.d.ts.map +1 -0
- package/build/core/chromiumDialogs.js +88 -0
- package/build/core/chromiumDialogs.js.map +1 -0
- package/build/core/chromiumScreen.d.ts +97 -0
- package/build/core/chromiumScreen.d.ts.map +1 -0
- package/build/core/chromiumScreen.js +498 -0
- package/build/core/chromiumScreen.js.map +1 -0
- package/build/core/componentSearch.d.ts.map +1 -1
- package/build/core/componentSearch.js +7 -26
- package/build/core/componentSearch.js.map +1 -1
- package/build/core/componentSource.d.ts.map +1 -1
- package/build/core/componentSource.js +3 -11
- package/build/core/componentSource.js.map +1 -1
- package/build/core/componentTree.d.ts.map +1 -1
- package/build/core/componentTree.js +4 -18
- package/build/core/componentTree.js.map +1 -1
- package/build/core/connection.d.ts +13 -0
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +99 -18
- package/build/core/connection.js.map +1 -1
- package/build/core/connectionState.d.ts +2 -1
- package/build/core/connectionState.d.ts.map +1 -1
- package/build/core/connectionState.js +3 -0
- package/build/core/connectionState.js.map +1 -1
- package/build/core/deviceResolver.d.ts.map +1 -1
- package/build/core/deviceResolver.js +8 -5
- package/build/core/deviceResolver.js.map +1 -1
- package/build/core/electronLaunch.d.ts +25 -0
- package/build/core/electronLaunch.d.ts.map +1 -0
- package/build/core/electronLaunch.js +113 -0
- package/build/core/electronLaunch.js.map +1 -0
- package/build/core/errors.d.ts +1 -1
- package/build/core/errors.d.ts.map +1 -1
- package/build/core/errors.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +9 -6
- package/build/core/guides.js.map +1 -1
- package/build/core/hostAddress.d.ts +6 -0
- package/build/core/hostAddress.d.ts.map +1 -0
- package/build/core/hostAddress.js +32 -0
- package/build/core/hostAddress.js.map +1 -0
- package/build/core/injected/fiberRoots.d.ts +2 -0
- package/build/core/injected/fiberRoots.d.ts.map +1 -0
- package/build/core/injected/fiberRoots.js +60 -0
- package/build/core/injected/fiberRoots.js.map +1 -0
- package/build/core/inputTarget.d.ts.map +1 -1
- package/build/core/inputTarget.js +4 -9
- package/build/core/inputTarget.js.map +1 -1
- package/build/core/inspector.d.ts.map +1 -1
- package/build/core/inspector.js +6 -22
- package/build/core/inspector.js.map +1 -1
- package/build/core/ios.d.ts +12 -0
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +32 -0
- package/build/core/ios.js.map +1 -1
- package/build/core/jsExecute.d.ts.map +1 -1
- package/build/core/jsExecute.js +20 -1
- package/build/core/jsExecute.js.map +1 -1
- package/build/core/measureComponent.d.ts.map +1 -1
- package/build/core/measureComponent.js +4 -8
- package/build/core/measureComponent.js.map +1 -1
- package/build/core/metro.d.ts +20 -1
- package/build/core/metro.d.ts.map +1 -1
- package/build/core/metro.js +146 -9
- package/build/core/metro.js.map +1 -1
- package/build/core/mockRules.d.ts +1 -0
- package/build/core/mockRules.d.ts.map +1 -1
- package/build/core/mockRules.js +8 -0
- package/build/core/mockRules.js.map +1 -1
- package/build/core/nativeLogs.js +1 -1
- package/build/core/nativeLogs.js.map +1 -1
- package/build/core/navigation.d.ts.map +1 -1
- package/build/core/navigation.js +4 -18
- package/build/core/navigation.js.map +1 -1
- package/build/core/networkInterceptor.d.ts +2 -2
- package/build/core/networkInterceptor.d.ts.map +1 -1
- package/build/core/networkInterceptor.js +90 -3
- package/build/core/networkInterceptor.js.map +1 -1
- package/build/core/pressables.d.ts.map +1 -1
- package/build/core/pressables.js +6 -13
- package/build/core/pressables.js.map +1 -1
- package/build/core/redux.d.ts.map +1 -1
- package/build/core/redux.js +6 -10
- package/build/core/redux.js.map +1 -1
- package/build/core/register.d.ts.map +1 -1
- package/build/core/register.js +5 -2
- package/build/core/register.js.map +1 -1
- package/build/core/rnGlobalsBootstrap.d.ts.map +1 -1
- package/build/core/rnGlobalsBootstrap.js +3 -1
- package/build/core/rnGlobalsBootstrap.js.map +1 -1
- package/build/core/screenLayout.d.ts.map +1 -1
- package/build/core/screenLayout.js +4 -13
- package/build/core/screenLayout.js.map +1 -1
- package/build/core/screenStaleness.d.ts.map +1 -1
- package/build/core/screenStaleness.js +2 -0
- package/build/core/screenStaleness.js.map +1 -1
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +4 -11
- package/build/core/screenState.js.map +1 -1
- package/build/core/swipeDiagnosis.d.ts.map +1 -1
- package/build/core/swipeDiagnosis.js +3 -10
- package/build/core/swipeDiagnosis.js.map +1 -1
- package/build/core/textEntry.d.ts +1 -1
- package/build/core/textEntry.d.ts.map +1 -1
- package/build/core/types.d.ts +4 -2
- package/build/core/types.d.ts.map +1 -1
- package/build/pro/chromiumKeys.d.ts +19 -0
- package/build/pro/chromiumKeys.d.ts.map +1 -0
- package/build/pro/chromiumKeys.js +68 -0
- package/build/pro/chromiumKeys.js.map +1 -0
- package/build/pro/chromiumSwipe.d.ts +35 -0
- package/build/pro/chromiumSwipe.d.ts.map +1 -0
- package/build/pro/chromiumSwipe.js +105 -0
- package/build/pro/chromiumSwipe.js.map +1 -0
- package/build/pro/chromiumTap.d.ts +12 -0
- package/build/pro/chromiumTap.d.ts.map +1 -0
- package/build/pro/chromiumTap.js +155 -0
- package/build/pro/chromiumTap.js.map +1 -0
- package/build/pro/tap.d.ts +1 -0
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +7 -1
- package/build/pro/tap.js.map +1 -1
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +31 -3
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/connectionTools.d.ts.map +1 -1
- package/build/tools/connectionTools.js +66 -28
- package/build/tools/connectionTools.js.map +1 -1
- package/build/tools/deviceTools.d.ts.map +1 -1
- package/build/tools/deviceTools.js +42 -1
- package/build/tools/deviceTools.js.map +1 -1
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +132 -7
- package/build/tools/interactionTools.js.map +1 -1
- package/build/tools/networkTools.d.ts.map +1 -1
- package/build/tools/networkTools.js +20 -5
- package/build/tools/networkTools.js.map +1 -1
- package/build/tools/screenshotTools.d.ts.map +1 -1
- package/build/tools/screenshotTools.js +452 -373
- package/build/tools/screenshotTools.js.map +1 -1
- package/package.json +1 -1
- package/tools.json +27 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentSource.js","sourceRoot":"","sources":["../../src/core/componentSource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"componentSource.js","sourceRoot":"","sources":["../../src/core/componentSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentTree.d.ts","sourceRoot":"","sources":["../../src/core/componentTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"componentTree.d.ts","sourceRoot":"","sources":["../../src/core/componentTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA8DlD,wBAAsB,gBAAgB,CAClC,OAAO,GAAE;IACL,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACjB,GACP,OAAO,CAAC,eAAe,CAAC,CA+O1B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { executeInApp } from "./jsExecute.js";
|
|
2
2
|
import { VISIBILITY_HELPERS_JS } from "./injected/visibility.js";
|
|
3
|
+
import { FIBER_ROOTS_JS } from "./injected/fiberRoots.js";
|
|
3
4
|
function formatTreeCompact(node, indent = 0) {
|
|
4
5
|
const prefix = " ".repeat(indent);
|
|
5
6
|
let result = `${prefix}${node.component}`;
|
|
@@ -39,24 +40,9 @@ export async function getComponentTree(options = {}) {
|
|
|
39
40
|
const expression = `
|
|
40
41
|
(function() {
|
|
41
42
|
const hook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
let roots = [];
|
|
46
|
-
if (hook.getFiberRoots) {
|
|
47
|
-
roots = [...(hook.getFiberRoots(1) || [])];
|
|
48
|
-
}
|
|
49
|
-
if (roots.length === 0 && hook.renderers) {
|
|
50
|
-
// Try all renderers
|
|
51
|
-
for (const [id] of hook.renderers) {
|
|
52
|
-
const r = hook.getFiberRoots ? [...(hook.getFiberRoots(id) || [])] : [];
|
|
53
|
-
if (r.length > 0) {
|
|
54
|
-
roots = r;
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (roots.length === 0) return { error: 'No fiber roots found. The app may not have rendered yet.' };
|
|
43
|
+
${FIBER_ROOTS_JS}
|
|
44
|
+
const roots = __eb_fiberRoots(false);
|
|
45
|
+
if (roots.length === 0) return { error: __eb_noRootsReason() };
|
|
60
46
|
|
|
61
47
|
const maxDepth = ${maxDepth};
|
|
62
48
|
const includeProps = ${includeProps};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentTree.js","sourceRoot":"","sources":["../../src/core/componentTree.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"componentTree.js","sourceRoot":"","sources":["../../src/core/componentTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,19 @@ export type DeviceResolution = {
|
|
|
40
40
|
export declare function failureKindForResolution(resolution: DeviceResolution): FailureKind | undefined;
|
|
41
41
|
export declare function describeDeviceResolution(resolution: DeviceResolution): string;
|
|
42
42
|
export declare function resolveConnectedAppByDevice(device?: string): DeviceResolution;
|
|
43
|
+
export declare function peekTargetPlatform(toolName: string, device: unknown): ConnectedApp["platform"] | undefined;
|
|
44
|
+
export declare function chromiumAppFor(toolName: string, device?: string): ConnectedApp | null;
|
|
45
|
+
export declare function chromiumWindowGone(listed: number, attempts: number): boolean;
|
|
46
|
+
export declare function staleTargetMessage(device: DeviceInfo): string;
|
|
47
|
+
export declare function dialogGateFor(toolName: string, device: unknown): {
|
|
48
|
+
content: [{
|
|
49
|
+
type: "text";
|
|
50
|
+
text: string;
|
|
51
|
+
}];
|
|
52
|
+
isError: true;
|
|
53
|
+
_errorMessage: string;
|
|
54
|
+
_failureKind: "js_dialog_open";
|
|
55
|
+
} | null;
|
|
43
56
|
export declare function getConnectedAppByDevice(device?: string): ConnectedApp | null;
|
|
44
57
|
export declare function hasConnectedApp(): boolean;
|
|
45
58
|
export declare function runQuickHealthCheck(app: ConnectedApp): Promise<boolean>;
|
|
@@ -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,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,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
|
@@ -6,13 +6,15 @@ import { serializeRules } from "./mockRules.js";
|
|
|
6
6
|
import { findSimulatorByName } from "./ios.js";
|
|
7
7
|
import { captureStack } from "./logStack.js";
|
|
8
8
|
import { resolveAdbSerialForDeviceName } from "./android.js";
|
|
9
|
-
import { fetchDevices, selectMainDevice, scanMetroPorts } from "./metro.js";
|
|
9
|
+
import { fetchDevices, selectMainDevice, scanMetroPorts, isChromiumTarget, pickReconnectTarget, pinChromiumName } from "./metro.js";
|
|
10
10
|
import { probeCdpAlive } from "./probe.js";
|
|
11
11
|
import { UserInputError } from "./errors.js";
|
|
12
12
|
import { scheduleAppDetection } from "./appDetection.js";
|
|
13
13
|
import { markConnectionEstablished } from "./jsExecute.js";
|
|
14
14
|
import { startSdkMirrorPoller, stopSdkMirrorPoller } from "./sdkMirrorPoller.js";
|
|
15
|
-
import {
|
|
15
|
+
import { rememberHostAddresses, hostAddressChangeHint } from "./hostAddress.js";
|
|
16
|
+
import { noteDialogOpened, noteDialogClosed, openDialog, dialogGate, formatDialog, DIALOG_BLOCKED_TOOLS } from "./chromiumDialogs.js";
|
|
17
|
+
import { DEFAULT_RECONNECTION_CONFIG, MIN_STABLE_CONNECTION_MS, initConnectionState, updateConnectionState, getConnectionState, recordConnectionGap, closeConnectionGap, saveConnectionMetadata, clearConnectionMetadata, clearConnectionState, getConnectionMetadata, saveReconnectionTimer, cancelReconnectionTimer, shouldTerminateForMissedPong, calculateBackoffDelay, initContextHealth, markContextHealthy, markContextStale, getContextHealth, updateContextHealth, formatDuration, recordConnectionEvent, } from "./connectionState.js";
|
|
16
18
|
const connectionLocks = new Set();
|
|
17
19
|
const lastTargetIdByDevice = new Map();
|
|
18
20
|
const devicesSeenThisSession = new Map();
|
|
@@ -532,6 +534,17 @@ export function handleCDPMessage(message, device, ws) {
|
|
|
532
534
|
return;
|
|
533
535
|
}
|
|
534
536
|
const method = message.method;
|
|
537
|
+
if (method === "Page.javascriptDialogOpening" || method === "Page.javascriptDialogClosed") {
|
|
538
|
+
const dws = ws ?? connectedApps.get(findAppKeyForDevice(device) ?? "")?.ws;
|
|
539
|
+
if (dws) {
|
|
540
|
+
const p = message.params;
|
|
541
|
+
if (method === "Page.javascriptDialogOpening")
|
|
542
|
+
noteDialogOpened(dws, p);
|
|
543
|
+
else
|
|
544
|
+
noteDialogClosed(dws, p);
|
|
545
|
+
}
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
535
548
|
if (method === "Runtime.consoleAPICalled") {
|
|
536
549
|
const params = message.params;
|
|
537
550
|
const type = params.type || "log";
|
|
@@ -663,7 +676,7 @@ export function handleCDPMessage(message, device, ws) {
|
|
|
663
676
|
console.error(`[execbro] Context created: ${params.context.id}`);
|
|
664
677
|
const ctxApp = connectedApps.get(appKey);
|
|
665
678
|
if (ctxApp?.ws?.readyState === WebSocket.OPEN) {
|
|
666
|
-
injectNetworkInterceptor(ctxApp.ws);
|
|
679
|
+
injectNetworkInterceptor(ctxApp.ws, ctxApp.platform === "chromium");
|
|
667
680
|
sendNetSuppressionFlag(ctxApp.ws, ctxApp.sdkPresent === true);
|
|
668
681
|
pushMockRules(ctxApp.ws, serializeRules(device.deviceName || device.title || "unknown"));
|
|
669
682
|
const nEnableId = sendNetworkEnable(ctxApp.ws);
|
|
@@ -705,7 +718,7 @@ export async function connectToDevice(device, port, options = {}) {
|
|
|
705
718
|
}
|
|
706
719
|
});
|
|
707
720
|
if (isAlive) {
|
|
708
|
-
resolve(`Already connected to ${device.title}`);
|
|
721
|
+
resolve(`Already connected to ${device.deviceName || device.title}`);
|
|
709
722
|
return;
|
|
710
723
|
}
|
|
711
724
|
console.error(`[execbro] Existing connection to ${device.title} failed liveness check (no pong), reconnecting`);
|
|
@@ -824,11 +837,12 @@ export async function connectToDevice(device, port, options = {}) {
|
|
|
824
837
|
else {
|
|
825
838
|
clearConnectionMetadata(appKey);
|
|
826
839
|
}
|
|
827
|
-
resolve(
|
|
840
|
+
resolve(staleTargetMessage(device));
|
|
828
841
|
return;
|
|
829
842
|
}
|
|
830
843
|
connectionLocks.delete(appKey);
|
|
831
|
-
|
|
844
|
+
device.deviceName = pinChromiumName(device);
|
|
845
|
+
connectedApps.set(appKey, { ws, deviceInfo: device, port, platform: isChromiumTarget(device) ? "chromium" : "android" });
|
|
832
846
|
recordDeviceSeen(device.deviceName || device.title);
|
|
833
847
|
markConnectionEstablished();
|
|
834
848
|
const bufferKey = device.deviceName || device.title || "unknown";
|
|
@@ -847,12 +861,14 @@ export async function connectToDevice(device, port, options = {}) {
|
|
|
847
861
|
initContextHealth(appKey);
|
|
848
862
|
console.error(`[execbro] Reconnected to ${device.title}`);
|
|
849
863
|
recordConnectionEvent("reconnect-success", appKey, device.title);
|
|
864
|
+
rememberHostAddresses();
|
|
850
865
|
}
|
|
851
866
|
else {
|
|
852
867
|
initConnectionState(appKey);
|
|
853
868
|
initContextHealth(appKey);
|
|
854
869
|
console.error(`[execbro] Connected to ${device.title}`);
|
|
855
870
|
recordConnectionEvent("connect-success", appKey, device.title);
|
|
871
|
+
rememberHostAddresses();
|
|
856
872
|
}
|
|
857
873
|
ws.send(JSON.stringify({
|
|
858
874
|
id: getNextMessageId(),
|
|
@@ -862,14 +878,17 @@ export async function connectToDevice(device, port, options = {}) {
|
|
|
862
878
|
id: getNextMessageId(),
|
|
863
879
|
method: "Log.enable"
|
|
864
880
|
}));
|
|
865
|
-
|
|
881
|
+
if (isChromiumTarget(device)) {
|
|
882
|
+
ws.send(JSON.stringify({ id: getNextMessageId(), method: "Page.enable" }));
|
|
883
|
+
}
|
|
884
|
+
injectNetworkInterceptor(ws, isChromiumTarget(device));
|
|
866
885
|
pushMockRules(ws, serializeRules(device.deviceName || device.title || "unknown"));
|
|
867
886
|
void import("./routeHistory.js")
|
|
868
887
|
.then((m) => m.installRouteHistory(device.deviceName))
|
|
869
888
|
.catch(() => { });
|
|
870
889
|
const networkEnableId = sendNetworkEnable(ws);
|
|
871
890
|
pendingNetworkEnableIds.add(networkEnableId);
|
|
872
|
-
if (device.deviceName) {
|
|
891
|
+
if (device.deviceName && !isChromiumTarget(device)) {
|
|
873
892
|
const [simulatorUdid, adbSerial] = await Promise.all([
|
|
874
893
|
findSimulatorByName(device.deviceName).catch(() => null),
|
|
875
894
|
resolveAdbSerialForDeviceName(device.deviceName).catch(() => null)
|
|
@@ -924,7 +943,9 @@ export async function connectToDevice(device, port, options = {}) {
|
|
|
924
943
|
catch {
|
|
925
944
|
}
|
|
926
945
|
});
|
|
927
|
-
resolve(
|
|
946
|
+
resolve(isChromiumTarget(device)
|
|
947
|
+
? `Connected to ${device.deviceName} (chromium, ${device.url ?? "no url"}). Note: execbro injected an XHR/fetch interceptor into this page; other CDP clients inspecting it will observe the patched network layer.`
|
|
948
|
+
: `Connected to ${device.title} (${device.deviceName})`);
|
|
928
949
|
}
|
|
929
950
|
catch (error) {
|
|
930
951
|
connectionLocks.delete(appKey);
|
|
@@ -952,7 +973,8 @@ function scheduleReconnection(appKey, config = DEFAULT_RECONNECTION_CONFIG) {
|
|
|
952
973
|
if (attempts >= config.maxAttempts) {
|
|
953
974
|
console.error(`[execbro] Max reconnection attempts (${config.maxAttempts}) reached for ${appKey}`);
|
|
954
975
|
updateConnectionState(appKey, { status: "disconnected" });
|
|
955
|
-
|
|
976
|
+
const addressHint = hostAddressChangeHint(meta?.port);
|
|
977
|
+
recordConnectionEvent("max-attempts-reached", appKey, deviceTitle, `${config.maxAttempts} attempts exhausted${addressHint ? `\n${addressHint}` : ""}`);
|
|
956
978
|
return;
|
|
957
979
|
}
|
|
958
980
|
const delay = calculateBackoffDelay(attempts, config);
|
|
@@ -986,8 +1008,14 @@ async function attemptReconnection(appKey, config = DEFAULT_RECONNECTION_CONFIG)
|
|
|
986
1008
|
}
|
|
987
1009
|
try {
|
|
988
1010
|
const devices = await fetchDevices(metadata.port);
|
|
989
|
-
const device = devices
|
|
990
|
-
|
|
1011
|
+
const device = pickReconnectTarget(devices, metadata.deviceInfo);
|
|
1012
|
+
if (!device && isChromiumTarget(metadata.deviceInfo) && chromiumWindowGone(devices.length, getConnectionState(appKey)?.reconnectionAttempts ?? 0)) {
|
|
1013
|
+
console.error(`[execbro] Window closed: ${appKey}`);
|
|
1014
|
+
recordConnectionEvent("window-closed", appKey, deviceTitle, "target no longer listed");
|
|
1015
|
+
clearConnectionState(appKey);
|
|
1016
|
+
clearConnectionMetadata(appKey);
|
|
1017
|
+
return false;
|
|
1018
|
+
}
|
|
991
1019
|
if (!device) {
|
|
992
1020
|
console.error(`[execbro] Device no longer available for ${appKey}`);
|
|
993
1021
|
recordConnectionEvent("reconnect-failed", appKey, deviceTitle, "device no longer advertised by Metro");
|
|
@@ -1013,14 +1041,18 @@ export function getConnectedApps() {
|
|
|
1013
1041
|
}));
|
|
1014
1042
|
}
|
|
1015
1043
|
export function getFirstConnectedApp() {
|
|
1044
|
+
let chromium = null;
|
|
1016
1045
|
for (const [key, app] of connectedApps.entries()) {
|
|
1017
1046
|
if (app.ws.readyState === WebSocket.OPEN) {
|
|
1018
|
-
|
|
1047
|
+
if (app.platform !== "chromium")
|
|
1048
|
+
return app;
|
|
1049
|
+
chromium ??= app;
|
|
1050
|
+
continue;
|
|
1019
1051
|
}
|
|
1020
1052
|
console.error(`[execbro] Cleaning up stale connection in getFirstConnectedApp: ${key} (state: ${getWebSocketStateName(app.ws.readyState)})`);
|
|
1021
1053
|
connectedApps.delete(key);
|
|
1022
1054
|
}
|
|
1023
|
-
return
|
|
1055
|
+
return chromium;
|
|
1024
1056
|
}
|
|
1025
1057
|
export function getConnectedAppBySimulatorUdid(udid) {
|
|
1026
1058
|
for (const [key, app] of connectedApps.entries()) {
|
|
@@ -1165,6 +1197,13 @@ export function resolveConnectedAppByDevice(device) {
|
|
|
1165
1197
|
matches.push(app);
|
|
1166
1198
|
}
|
|
1167
1199
|
}
|
|
1200
|
+
if (matches.length === 0) {
|
|
1201
|
+
for (const app of openApps) {
|
|
1202
|
+
const url = normalizeDeviceId(app.deviceInfo.url);
|
|
1203
|
+
if (url && url.includes(normDevice))
|
|
1204
|
+
matches.push(app);
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1168
1207
|
const exact = matches.find(a => deviceLabel(a).toLowerCase() === lowerDevice);
|
|
1169
1208
|
if (exact)
|
|
1170
1209
|
return { kind: "ok", app: exact };
|
|
@@ -1174,6 +1213,40 @@ export function resolveConnectedAppByDevice(device) {
|
|
|
1174
1213
|
return { kind: "ambiguous", device, matches };
|
|
1175
1214
|
return { kind: "none", device, connected: openApps };
|
|
1176
1215
|
}
|
|
1216
|
+
export function peekTargetPlatform(toolName, device) {
|
|
1217
|
+
if (typeof device === "string" && device.length > 0) {
|
|
1218
|
+
const resolved = resolveConnectedAppByDevice(device);
|
|
1219
|
+
return resolved.kind === "ok" ? resolved.app.platform : undefined;
|
|
1220
|
+
}
|
|
1221
|
+
if (toolName.startsWith("ios_") || toolName.startsWith("android_"))
|
|
1222
|
+
return undefined;
|
|
1223
|
+
return getFirstConnectedApp()?.platform;
|
|
1224
|
+
}
|
|
1225
|
+
export function chromiumAppFor(toolName, device) {
|
|
1226
|
+
if (peekTargetPlatform(toolName, device) !== "chromium")
|
|
1227
|
+
return null;
|
|
1228
|
+
return device ? getConnectedAppByDevice(device) : getFirstConnectedApp();
|
|
1229
|
+
}
|
|
1230
|
+
export function chromiumWindowGone(listed, attempts) {
|
|
1231
|
+
return listed > 0 || attempts >= 2;
|
|
1232
|
+
}
|
|
1233
|
+
export function staleTargetMessage(device) {
|
|
1234
|
+
const name = device.deviceName || device.title;
|
|
1235
|
+
return isChromiumTarget(device)
|
|
1236
|
+
? `Skipped ${name} (stale CDP target — the page does not answer. A JavaScript dialog (alert / confirm / prompt) may be open in the window: close it with the window's own buttons, then scan again)`
|
|
1237
|
+
: `Skipped ${name} (stale CDP target — no response from JS context)`;
|
|
1238
|
+
}
|
|
1239
|
+
export function dialogGateFor(toolName, device) {
|
|
1240
|
+
if (!DIALOG_BLOCKED_TOOLS.has(toolName))
|
|
1241
|
+
return null;
|
|
1242
|
+
try {
|
|
1243
|
+
const app = chromiumAppFor(toolName, typeof device === "string" ? device : undefined);
|
|
1244
|
+
return app ? dialogGate(toolName, openDialog(app.ws)) : null;
|
|
1245
|
+
}
|
|
1246
|
+
catch {
|
|
1247
|
+
return null;
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1177
1250
|
export function getConnectedAppByDevice(device) {
|
|
1178
1251
|
const resolution = resolveConnectedAppByDevice(device);
|
|
1179
1252
|
if (resolution.kind === "ok")
|
|
@@ -1264,6 +1337,8 @@ export async function verifyLogPipeline(app) {
|
|
|
1264
1337
|
try {
|
|
1265
1338
|
app.ws.send(JSON.stringify({ id: getNextMessageId(), method: "Runtime.enable" }));
|
|
1266
1339
|
app.ws.send(JSON.stringify({ id: getNextMessageId(), method: "Log.enable" }));
|
|
1340
|
+
if (app.platform === "chromium")
|
|
1341
|
+
app.ws.send(JSON.stringify({ id: getNextMessageId(), method: "Page.enable" }));
|
|
1267
1342
|
}
|
|
1268
1343
|
catch {
|
|
1269
1344
|
}
|
|
@@ -1354,7 +1429,7 @@ export async function ensureConnection(options = {}) {
|
|
|
1354
1429
|
wasReconnected: false,
|
|
1355
1430
|
healthCheckPassed: false,
|
|
1356
1431
|
connectionInfos: [],
|
|
1357
|
-
error: `No debuggable devices found on port ${targetPort}. Make sure the app is running.`,
|
|
1432
|
+
error: hostAddressChangeHint(targetPort) ?? `No debuggable devices found on port ${targetPort}. Make sure the app is running.`,
|
|
1358
1433
|
failureKind: "no_debuggable_devices",
|
|
1359
1434
|
};
|
|
1360
1435
|
}
|
|
@@ -1368,7 +1443,7 @@ export async function ensureConnection(options = {}) {
|
|
|
1368
1443
|
wasReconnected: false,
|
|
1369
1444
|
healthCheckPassed: false,
|
|
1370
1445
|
connectionInfos: [],
|
|
1371
|
-
error: `${connectResult}. The CDP page advertised by Metro is no longer responsive — restart the React Native app, then retry.`,
|
|
1446
|
+
error: isChromiumTarget(mainDevice) ? connectResult : `${connectResult}. The CDP page advertised by Metro is no longer responsive — restart the React Native app, then retry.`,
|
|
1372
1447
|
};
|
|
1373
1448
|
}
|
|
1374
1449
|
for (let i = 0; i < 5 && openApps.length === 0; i++) {
|
|
@@ -1410,6 +1485,11 @@ export async function ensureConnection(options = {}) {
|
|
|
1410
1485
|
for (const candidate of openApps) {
|
|
1411
1486
|
let app = candidate;
|
|
1412
1487
|
let healthy = true;
|
|
1488
|
+
const dialog = app.platform === "chromium" ? openDialog(app.ws) : null;
|
|
1489
|
+
if (dialog) {
|
|
1490
|
+
perApp.push({ app, healthy: false, dialog: formatDialog(dialog) });
|
|
1491
|
+
continue;
|
|
1492
|
+
}
|
|
1413
1493
|
if (healthCheck) {
|
|
1414
1494
|
healthy = await runQuickHealthCheck(app);
|
|
1415
1495
|
if (!healthy && !wasReconnected) {
|
|
@@ -1424,7 +1504,7 @@ export async function ensureConnection(options = {}) {
|
|
|
1424
1504
|
catch { }
|
|
1425
1505
|
connectedApps.delete(appKey);
|
|
1426
1506
|
const devices = await fetchDevices(appPort);
|
|
1427
|
-
const mainDevice =
|
|
1507
|
+
const mainDevice = pickReconnectTarget(devices, app.deviceInfo);
|
|
1428
1508
|
if (mainDevice) {
|
|
1429
1509
|
try {
|
|
1430
1510
|
await connectToDevice(mainDevice, appPort);
|
|
@@ -1452,7 +1532,7 @@ export async function ensureConnection(options = {}) {
|
|
|
1452
1532
|
}
|
|
1453
1533
|
perApp.push({ app, healthy });
|
|
1454
1534
|
}
|
|
1455
|
-
const connectionInfos = perApp.map(({ app, healthy }) => {
|
|
1535
|
+
const connectionInfos = perApp.map(({ app, healthy, dialog }) => {
|
|
1456
1536
|
const appKey = `${app.port}-${app.deviceInfo.id}`;
|
|
1457
1537
|
const connectionState = getConnectionState(appKey);
|
|
1458
1538
|
const contextHealth = getContextHealth(appKey);
|
|
@@ -1468,6 +1548,7 @@ export async function ensureConnection(options = {}) {
|
|
|
1468
1548
|
uptime,
|
|
1469
1549
|
contextId: contextHealth?.contextId ?? null,
|
|
1470
1550
|
healthCheckPassed: healthy,
|
|
1551
|
+
...(dialog && { dialog }),
|
|
1471
1552
|
};
|
|
1472
1553
|
});
|
|
1473
1554
|
const anyOpen = perApp.some(r => r.app.ws.readyState === WebSocket.OPEN);
|