@vforsh/argus-watcher 0.1.2 → 0.1.4
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 +67 -14
- package/dist/.tsbuildinfo +1 -1
- package/dist/artifacts.d.ts +13 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +27 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/buffer/LogBuffer.d.ts +8 -3
- package/dist/buffer/LogBuffer.d.ts.map +1 -1
- package/dist/buffer/LogBuffer.js +9 -1
- package/dist/buffer/LogBuffer.js.map +1 -1
- package/dist/buffer/NetBuffer.d.ts +29 -0
- package/dist/buffer/NetBuffer.d.ts.map +1 -0
- package/dist/buffer/NetBuffer.js +85 -0
- package/dist/buffer/NetBuffer.js.map +1 -0
- package/dist/cdp/accessibility.d.ts +18 -0
- package/dist/cdp/accessibility.d.ts.map +1 -0
- package/dist/cdp/accessibility.js +300 -0
- package/dist/cdp/accessibility.js.map +1 -0
- package/dist/cdp/connection.d.ts +39 -0
- package/dist/cdp/connection.d.ts.map +1 -0
- package/dist/cdp/connection.js +131 -0
- package/dist/cdp/connection.js.map +1 -0
- package/dist/cdp/dom/fill.d.ts +22 -0
- package/dist/cdp/dom/fill.d.ts.map +1 -0
- package/dist/cdp/dom/fill.js +59 -0
- package/dist/cdp/dom/fill.js.map +1 -0
- package/dist/cdp/dom/info.d.ts +14 -0
- package/dist/cdp/dom/info.d.ts.map +1 -0
- package/dist/cdp/dom/info.js +52 -0
- package/dist/cdp/dom/info.js.map +1 -0
- package/dist/cdp/dom/insert.d.ts +19 -0
- package/dist/cdp/dom/insert.d.ts.map +1 -0
- package/dist/cdp/dom/insert.js +30 -0
- package/dist/cdp/dom/insert.js.map +1 -0
- package/dist/cdp/dom/modify.d.ts +50 -0
- package/dist/cdp/dom/modify.d.ts.map +1 -0
- package/dist/cdp/dom/modify.js +100 -0
- package/dist/cdp/dom/modify.js.map +1 -0
- package/dist/cdp/dom/remove.d.ts +17 -0
- package/dist/cdp/dom/remove.d.ts.map +1 -0
- package/dist/cdp/dom/remove.js +27 -0
- package/dist/cdp/dom/remove.js.map +1 -0
- package/dist/cdp/dom/selector.d.ts +19 -0
- package/dist/cdp/dom/selector.d.ts.map +1 -0
- package/dist/cdp/dom/selector.js +86 -0
- package/dist/cdp/dom/selector.js.map +1 -0
- package/dist/cdp/dom/setFile.d.ts +21 -0
- package/dist/cdp/dom/setFile.d.ts.map +1 -0
- package/dist/cdp/dom/setFile.js +25 -0
- package/dist/cdp/dom/setFile.js.map +1 -0
- package/dist/cdp/dom/submit.d.ts +15 -0
- package/dist/cdp/dom/submit.d.ts.map +1 -0
- package/dist/cdp/dom/submit.js +130 -0
- package/dist/cdp/dom/submit.js.map +1 -0
- package/dist/cdp/dom/tree.d.ts +16 -0
- package/dist/cdp/dom/tree.d.ts.map +1 -0
- package/dist/cdp/dom/tree.js +100 -0
- package/dist/cdp/dom/tree.js.map +1 -0
- package/dist/cdp/dom/types.d.ts +15 -0
- package/dist/cdp/dom/types.d.ts.map +1 -0
- package/dist/cdp/dom/types.js +2 -0
- package/dist/cdp/dom/types.js.map +1 -0
- package/dist/cdp/dom.d.ts +15 -0
- package/dist/cdp/dom.d.ts.map +1 -0
- package/dist/cdp/dom.js +9 -0
- package/dist/cdp/dom.js.map +1 -0
- package/dist/cdp/editor.d.ts +23 -0
- package/dist/cdp/editor.d.ts.map +1 -0
- package/dist/cdp/editor.js +266 -0
- package/dist/cdp/editor.js.map +1 -0
- package/dist/cdp/emulation.d.ts +16 -0
- package/dist/cdp/emulation.d.ts.map +1 -0
- package/dist/cdp/emulation.js +40 -0
- package/dist/cdp/emulation.js.map +1 -0
- package/dist/cdp/eval.d.ts +11 -0
- package/dist/cdp/eval.d.ts.map +1 -0
- package/dist/cdp/eval.js +79 -0
- package/dist/cdp/eval.js.map +1 -0
- package/dist/cdp/keyboard.d.ts +38 -0
- package/dist/cdp/keyboard.d.ts.map +1 -0
- package/dist/cdp/keyboard.js +148 -0
- package/dist/cdp/keyboard.js.map +1 -0
- package/dist/cdp/mouse.d.ts +49 -0
- package/dist/cdp/mouse.d.ts.map +1 -0
- package/dist/cdp/mouse.js +203 -0
- package/dist/cdp/mouse.js.map +1 -0
- package/dist/cdp/networkCapture.d.ts +11 -0
- package/dist/cdp/networkCapture.d.ts.map +1 -0
- package/dist/cdp/networkCapture.js +99 -0
- package/dist/cdp/networkCapture.js.map +1 -0
- package/dist/cdp/pageIndicator.d.ts +41 -0
- package/dist/cdp/pageIndicator.d.ts.map +1 -0
- package/dist/cdp/pageIndicator.js +395 -0
- package/dist/cdp/pageIndicator.js.map +1 -0
- package/dist/cdp/redaction.d.ts +3 -0
- package/dist/cdp/redaction.d.ts.map +1 -0
- package/dist/cdp/redaction.js +35 -0
- package/dist/cdp/redaction.js.map +1 -0
- package/dist/cdp/remoteObject.d.ts +6 -0
- package/dist/cdp/remoteObject.d.ts.map +1 -0
- package/dist/cdp/remoteObject.js +94 -0
- package/dist/cdp/remoteObject.js.map +1 -0
- package/dist/cdp/screenshot.d.ts +10 -0
- package/dist/cdp/screenshot.d.ts.map +1 -0
- package/dist/cdp/screenshot.js +83 -0
- package/dist/cdp/screenshot.js.map +1 -0
- package/dist/cdp/storageLocal.d.ts +8 -0
- package/dist/cdp/storageLocal.d.ts.map +1 -0
- package/dist/cdp/storageLocal.js +70 -0
- package/dist/cdp/storageLocal.js.map +1 -0
- package/dist/cdp/text-filter.d.ts +6 -0
- package/dist/cdp/text-filter.d.ts.map +1 -0
- package/dist/cdp/text-filter.js +36 -0
- package/dist/cdp/text-filter.js.map +1 -0
- package/dist/cdp/throttle.d.ts +6 -0
- package/dist/cdp/throttle.d.ts.map +1 -0
- package/dist/cdp/throttle.js +9 -0
- package/dist/cdp/throttle.js.map +1 -0
- package/dist/cdp/tracing.d.ts +15 -0
- package/dist/cdp/tracing.d.ts.map +1 -0
- package/dist/cdp/tracing.js +159 -0
- package/dist/cdp/tracing.js.map +1 -0
- package/dist/cdp/watcher.d.ts +17 -2
- package/dist/cdp/watcher.d.ts.map +1 -1
- package/dist/cdp/watcher.js +124 -175
- package/dist/cdp/watcher.js.map +1 -1
- package/dist/emulation/EmulationController.d.ts +12 -0
- package/dist/emulation/EmulationController.d.ts.map +1 -0
- package/dist/emulation/EmulationController.js +83 -0
- package/dist/emulation/EmulationController.js.map +1 -0
- package/dist/events.d.ts +86 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -0
- package/dist/fileLogs/WatcherFileLogger.d.ts +5 -2
- package/dist/fileLogs/WatcherFileLogger.d.ts.map +1 -1
- package/dist/fileLogs/WatcherFileLogger.js +30 -12
- package/dist/fileLogs/WatcherFileLogger.js.map +1 -1
- package/dist/http/httpUtils.d.ts +25 -0
- package/dist/http/httpUtils.d.ts.map +1 -0
- package/dist/http/httpUtils.js +170 -0
- package/dist/http/httpUtils.js.map +1 -0
- package/dist/http/router.d.ts +5 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +85 -0
- package/dist/http/router.js.map +1 -0
- package/dist/http/routes/getEmulation.d.ts +3 -0
- package/dist/http/routes/getEmulation.d.ts.map +1 -0
- package/dist/http/routes/getEmulation.js +8 -0
- package/dist/http/routes/getEmulation.js.map +1 -0
- package/dist/http/routes/getLogs.d.ts +3 -0
- package/dist/http/routes/getLogs.d.ts.map +1 -0
- package/dist/http/routes/getLogs.js +28 -0
- package/dist/http/routes/getLogs.js.map +1 -0
- package/dist/http/routes/getNet.d.ts +3 -0
- package/dist/http/routes/getNet.d.ts.map +1 -0
- package/dist/http/routes/getNet.js +17 -0
- package/dist/http/routes/getNet.js.map +1 -0
- package/dist/http/routes/getNetTail.d.ts +3 -0
- package/dist/http/routes/getNetTail.d.ts.map +1 -0
- package/dist/http/routes/getNetTail.js +18 -0
- package/dist/http/routes/getNetTail.js.map +1 -0
- package/dist/http/routes/getStatus.d.ts +3 -0
- package/dist/http/routes/getStatus.d.ts.map +1 -0
- package/dist/http/routes/getStatus.js +21 -0
- package/dist/http/routes/getStatus.js.map +1 -0
- package/dist/http/routes/getTail.d.ts +3 -0
- package/dist/http/routes/getTail.d.ts.map +1 -0
- package/dist/http/routes/getTail.js +28 -0
- package/dist/http/routes/getTail.js.map +1 -0
- package/dist/http/routes/getTargets.d.ts +3 -0
- package/dist/http/routes/getTargets.d.ts.map +1 -0
- package/dist/http/routes/getTargets.js +16 -0
- package/dist/http/routes/getTargets.js.map +1 -0
- package/dist/http/routes/getThrottle.d.ts +3 -0
- package/dist/http/routes/getThrottle.d.ts.map +1 -0
- package/dist/http/routes/getThrottle.js +8 -0
- package/dist/http/routes/getThrottle.js.map +1 -0
- package/dist/http/routes/postAttach.d.ts +3 -0
- package/dist/http/routes/postAttach.d.ts.map +1 -0
- package/dist/http/routes/postAttach.js +24 -0
- package/dist/http/routes/postAttach.js.map +1 -0
- package/dist/http/routes/postCodeEdit.d.ts +3 -0
- package/dist/http/routes/postCodeEdit.d.ts.map +1 -0
- package/dist/http/routes/postCodeEdit.js +32 -0
- package/dist/http/routes/postCodeEdit.js.map +1 -0
- package/dist/http/routes/postCodeGrep.d.ts +3 -0
- package/dist/http/routes/postCodeGrep.d.ts.map +1 -0
- package/dist/http/routes/postCodeGrep.js +26 -0
- package/dist/http/routes/postCodeGrep.js.map +1 -0
- package/dist/http/routes/postCodeList.d.ts +3 -0
- package/dist/http/routes/postCodeList.d.ts.map +1 -0
- package/dist/http/routes/postCodeList.js +20 -0
- package/dist/http/routes/postCodeList.js.map +1 -0
- package/dist/http/routes/postCodeRead.d.ts +3 -0
- package/dist/http/routes/postCodeRead.d.ts.map +1 -0
- package/dist/http/routes/postCodeRead.js +30 -0
- package/dist/http/routes/postCodeRead.js.map +1 -0
- package/dist/http/routes/postDetach.d.ts +3 -0
- package/dist/http/routes/postDetach.d.ts.map +1 -0
- package/dist/http/routes/postDetach.js +24 -0
- package/dist/http/routes/postDetach.js.map +1 -0
- package/dist/http/routes/postDomAdd.d.ts +7 -0
- package/dist/http/routes/postDomAdd.d.ts.map +1 -0
- package/dist/http/routes/postDomAdd.js +97 -0
- package/dist/http/routes/postDomAdd.js.map +1 -0
- package/dist/http/routes/postDomClick.d.ts +3 -0
- package/dist/http/routes/postDomClick.d.ts.map +1 -0
- package/dist/http/routes/postDomClick.js +85 -0
- package/dist/http/routes/postDomClick.js.map +1 -0
- package/dist/http/routes/postDomFill.d.ts +3 -0
- package/dist/http/routes/postDomFill.d.ts.map +1 -0
- package/dist/http/routes/postDomFill.js +58 -0
- package/dist/http/routes/postDomFill.js.map +1 -0
- package/dist/http/routes/postDomFocus.d.ts +3 -0
- package/dist/http/routes/postDomFocus.d.ts.map +1 -0
- package/dist/http/routes/postDomFocus.js +40 -0
- package/dist/http/routes/postDomFocus.js.map +1 -0
- package/dist/http/routes/postDomHover.d.ts +3 -0
- package/dist/http/routes/postDomHover.d.ts.map +1 -0
- package/dist/http/routes/postDomHover.js +40 -0
- package/dist/http/routes/postDomHover.js.map +1 -0
- package/dist/http/routes/postDomInfo.d.ts +3 -0
- package/dist/http/routes/postDomInfo.d.ts.map +1 -0
- package/dist/http/routes/postDomInfo.js +40 -0
- package/dist/http/routes/postDomInfo.js.map +1 -0
- package/dist/http/routes/postDomKeydown.d.ts +3 -0
- package/dist/http/routes/postDomKeydown.d.ts.map +1 -0
- package/dist/http/routes/postDomKeydown.js +36 -0
- package/dist/http/routes/postDomKeydown.js.map +1 -0
- package/dist/http/routes/postDomModify.d.ts +3 -0
- package/dist/http/routes/postDomModify.d.ts.map +1 -0
- package/dist/http/routes/postDomModify.js +45 -0
- package/dist/http/routes/postDomModify.js.map +1 -0
- package/dist/http/routes/postDomRemove.d.ts +3 -0
- package/dist/http/routes/postDomRemove.d.ts.map +1 -0
- package/dist/http/routes/postDomRemove.js +39 -0
- package/dist/http/routes/postDomRemove.js.map +1 -0
- package/dist/http/routes/postDomScroll.d.ts +3 -0
- package/dist/http/routes/postDomScroll.d.ts.map +1 -0
- package/dist/http/routes/postDomScroll.js +75 -0
- package/dist/http/routes/postDomScroll.js.map +1 -0
- package/dist/http/routes/postDomScrollTo.d.ts +3 -0
- package/dist/http/routes/postDomScrollTo.d.ts.map +1 -0
- package/dist/http/routes/postDomScrollTo.js +69 -0
- package/dist/http/routes/postDomScrollTo.js.map +1 -0
- package/dist/http/routes/postDomSetFile.d.ts +3 -0
- package/dist/http/routes/postDomSetFile.d.ts.map +1 -0
- package/dist/http/routes/postDomSetFile.js +58 -0
- package/dist/http/routes/postDomSetFile.js.map +1 -0
- package/dist/http/routes/postDomSubmit.d.ts +3 -0
- package/dist/http/routes/postDomSubmit.d.ts.map +1 -0
- package/dist/http/routes/postDomSubmit.js +49 -0
- package/dist/http/routes/postDomSubmit.js.map +1 -0
- package/dist/http/routes/postDomTree.d.ts +3 -0
- package/dist/http/routes/postDomTree.d.ts.map +1 -0
- package/dist/http/routes/postDomTree.js +41 -0
- package/dist/http/routes/postDomTree.js.map +1 -0
- package/dist/http/routes/postEmulation.d.ts +3 -0
- package/dist/http/routes/postEmulation.d.ts.map +1 -0
- package/dist/http/routes/postEmulation.js +70 -0
- package/dist/http/routes/postEmulation.js.map +1 -0
- package/dist/http/routes/postEval.d.ts +3 -0
- package/dist/http/routes/postEval.d.ts.map +1 -0
- package/dist/http/routes/postEval.js +27 -0
- package/dist/http/routes/postEval.js.map +1 -0
- package/dist/http/routes/postReload.d.ts +3 -0
- package/dist/http/routes/postReload.d.ts.map +1 -0
- package/dist/http/routes/postReload.js +20 -0
- package/dist/http/routes/postReload.js.map +1 -0
- package/dist/http/routes/postScreenshot.d.ts +3 -0
- package/dist/http/routes/postScreenshot.d.ts.map +1 -0
- package/dist/http/routes/postScreenshot.js +17 -0
- package/dist/http/routes/postScreenshot.js.map +1 -0
- package/dist/http/routes/postShutdown.d.ts +3 -0
- package/dist/http/routes/postShutdown.d.ts.map +1 -0
- package/dist/http/routes/postShutdown.js +13 -0
- package/dist/http/routes/postShutdown.js.map +1 -0
- package/dist/http/routes/postSnapshot.d.ts +3 -0
- package/dist/http/routes/postSnapshot.d.ts.map +1 -0
- package/dist/http/routes/postSnapshot.js +28 -0
- package/dist/http/routes/postSnapshot.js.map +1 -0
- package/dist/http/routes/postStorageLocal.d.ts +3 -0
- package/dist/http/routes/postStorageLocal.d.ts.map +1 -0
- package/dist/http/routes/postStorageLocal.js +31 -0
- package/dist/http/routes/postStorageLocal.js.map +1 -0
- package/dist/http/routes/postThrottle.d.ts +3 -0
- package/dist/http/routes/postThrottle.d.ts.map +1 -0
- package/dist/http/routes/postThrottle.js +38 -0
- package/dist/http/routes/postThrottle.js.map +1 -0
- package/dist/http/routes/postTraceStart.d.ts +3 -0
- package/dist/http/routes/postTraceStart.d.ts.map +1 -0
- package/dist/http/routes/postTraceStart.js +17 -0
- package/dist/http/routes/postTraceStart.js.map +1 -0
- package/dist/http/routes/postTraceStop.d.ts +3 -0
- package/dist/http/routes/postTraceStop.d.ts.map +1 -0
- package/dist/http/routes/postTraceStop.js +17 -0
- package/dist/http/routes/postTraceStop.js.map +1 -0
- package/dist/http/routes/types.d.ts +9 -0
- package/dist/http/routes/types.d.ts.map +1 -0
- package/dist/http/routes/types.js +10 -0
- package/dist/http/routes/types.js.map +1 -0
- package/dist/http/server.d.ts +42 -1
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +3 -82
- package/dist/http/server.js.map +1 -1
- package/dist/index.d.ts +117 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +349 -44
- package/dist/index.js.map +1 -1
- package/dist/native-messaging/messaging.d.ts +18 -0
- package/dist/native-messaging/messaging.d.ts.map +1 -0
- package/dist/native-messaging/messaging.js +94 -0
- package/dist/native-messaging/messaging.js.map +1 -0
- package/dist/native-messaging/session-manager.d.ts +108 -0
- package/dist/native-messaging/session-manager.d.ts.map +1 -0
- package/dist/native-messaging/session-manager.js +267 -0
- package/dist/native-messaging/session-manager.js.map +1 -0
- package/dist/native-messaging/types.d.ts +112 -0
- package/dist/native-messaging/types.d.ts.map +1 -0
- package/dist/native-messaging/types.js +6 -0
- package/dist/native-messaging/types.js.map +1 -0
- package/dist/registry/registry.d.ts +9 -2
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +53 -9
- package/dist/registry/registry.js.map +1 -1
- package/dist/scripts/install-host.d.ts +10 -0
- package/dist/scripts/install-host.d.ts.map +1 -0
- package/dist/scripts/install-host.js +189 -0
- package/dist/scripts/install-host.js.map +1 -0
- package/dist/sources/cdp-source.d.ts +24 -0
- package/dist/sources/cdp-source.d.ts.map +1 -0
- package/dist/sources/cdp-source.js +49 -0
- package/dist/sources/cdp-source.js.map +1 -0
- package/dist/sources/extension-frame-state.d.ts +64 -0
- package/dist/sources/extension-frame-state.d.ts.map +1 -0
- package/dist/sources/extension-frame-state.js +117 -0
- package/dist/sources/extension-frame-state.js.map +1 -0
- package/dist/sources/extension-log-events.d.ts +15 -0
- package/dist/sources/extension-log-events.d.ts.map +1 -0
- package/dist/sources/extension-log-events.js +101 -0
- package/dist/sources/extension-log-events.js.map +1 -0
- package/dist/sources/extension-source.d.ts +15 -0
- package/dist/sources/extension-source.d.ts.map +1 -0
- package/dist/sources/extension-source.js +487 -0
- package/dist/sources/extension-source.js.map +1 -0
- package/dist/sources/types.d.ts +109 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +7 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/throttle/ThrottleController.d.ts +12 -0
- package/dist/throttle/ThrottleController.d.ts.map +1 -0
- package/dist/throttle/ThrottleController.js +67 -0
- package/dist/throttle/ThrottleController.js.map +1 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogBuffer.js","sourceRoot":"","sources":["../../src/buffer/LogBuffer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LogBuffer.js","sourceRoot":"","sources":["../../src/buffer/LogBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { NetworkRequestSummary } from '@vforsh/argus-core';
|
|
2
|
+
export type NetFilters = {
|
|
3
|
+
grep?: string;
|
|
4
|
+
sinceTs?: number;
|
|
5
|
+
};
|
|
6
|
+
/** In-memory ring buffer for network request summaries with long-poll waiters. */
|
|
7
|
+
export declare class NetBuffer {
|
|
8
|
+
private readonly maxSize;
|
|
9
|
+
private events;
|
|
10
|
+
private nextId;
|
|
11
|
+
private waiters;
|
|
12
|
+
constructor(maxSize: number);
|
|
13
|
+
/** Add a network summary and return the stored entry with id. */
|
|
14
|
+
add(event: Omit<NetworkRequestSummary, 'id'>): NetworkRequestSummary;
|
|
15
|
+
/** List events after the given id, respecting filters and limit. */
|
|
16
|
+
listAfter(after: number, filters: NetFilters, limit: number): NetworkRequestSummary[];
|
|
17
|
+
/** Wait for events after an id or timeout. */
|
|
18
|
+
waitForAfter(after: number, filters: NetFilters, limit: number, timeoutMs: number): Promise<NetworkRequestSummary[]>;
|
|
19
|
+
/** Get buffer size and id boundaries. */
|
|
20
|
+
getStats(): {
|
|
21
|
+
size: number;
|
|
22
|
+
count: number;
|
|
23
|
+
minId: number | null;
|
|
24
|
+
maxId: number | null;
|
|
25
|
+
};
|
|
26
|
+
private trim;
|
|
27
|
+
private flushWaiters;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=NetBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetBuffer.d.ts","sourceRoot":"","sources":["../../src/buffer/NetBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAUD,kFAAkF;AAClF,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,MAAM;IAI3B,iEAAiE;IACjE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,GAAG,qBAAqB;IAQpE,oEAAoE;IACpE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,EAAE;IAKrF,8CAA8C;IAC9C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAgBpH,yCAAyC;IACzC,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAavF,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,YAAY;CAiBpB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/** In-memory ring buffer for network request summaries with long-poll waiters. */
|
|
2
|
+
export class NetBuffer {
|
|
3
|
+
maxSize;
|
|
4
|
+
events = [];
|
|
5
|
+
nextId = 1;
|
|
6
|
+
waiters = [];
|
|
7
|
+
constructor(maxSize) {
|
|
8
|
+
this.maxSize = maxSize;
|
|
9
|
+
}
|
|
10
|
+
/** Add a network summary and return the stored entry with id. */
|
|
11
|
+
add(event) {
|
|
12
|
+
const entry = { ...event, id: this.nextId++ };
|
|
13
|
+
this.events.push(entry);
|
|
14
|
+
this.trim();
|
|
15
|
+
this.flushWaiters();
|
|
16
|
+
return entry;
|
|
17
|
+
}
|
|
18
|
+
/** List events after the given id, respecting filters and limit. */
|
|
19
|
+
listAfter(after, filters, limit) {
|
|
20
|
+
const filtered = this.events.filter((event) => event.id > after && matchesFilters(event, filters));
|
|
21
|
+
return filtered.slice(0, limit);
|
|
22
|
+
}
|
|
23
|
+
/** Wait for events after an id or timeout. */
|
|
24
|
+
waitForAfter(after, filters, limit, timeoutMs) {
|
|
25
|
+
const immediate = this.listAfter(after, filters, limit);
|
|
26
|
+
if (immediate.length > 0) {
|
|
27
|
+
return Promise.resolve(immediate);
|
|
28
|
+
}
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
const timer = setTimeout(() => {
|
|
31
|
+
this.waiters = this.waiters.filter((waiter) => waiter.timer !== timer);
|
|
32
|
+
resolve([]);
|
|
33
|
+
}, timeoutMs);
|
|
34
|
+
this.waiters.push({ after, filters, limit, resolve, timer });
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Get buffer size and id boundaries. */
|
|
38
|
+
getStats() {
|
|
39
|
+
if (this.events.length === 0) {
|
|
40
|
+
return { size: this.maxSize, count: 0, minId: null, maxId: null };
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
size: this.maxSize,
|
|
44
|
+
count: this.events.length,
|
|
45
|
+
minId: this.events[0]?.id ?? null,
|
|
46
|
+
maxId: this.events[this.events.length - 1]?.id ?? null,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
trim() {
|
|
50
|
+
if (this.events.length <= this.maxSize) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.events = this.events.slice(this.events.length - this.maxSize);
|
|
54
|
+
}
|
|
55
|
+
flushWaiters() {
|
|
56
|
+
if (this.waiters.length === 0) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const remaining = [];
|
|
60
|
+
for (const waiter of this.waiters) {
|
|
61
|
+
const events = this.listAfter(waiter.after, waiter.filters, waiter.limit);
|
|
62
|
+
if (events.length > 0) {
|
|
63
|
+
clearTimeout(waiter.timer);
|
|
64
|
+
waiter.resolve(events);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
remaining.push(waiter);
|
|
68
|
+
}
|
|
69
|
+
this.waiters = remaining;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const matchesFilters = (event, filters) => {
|
|
73
|
+
if (filters.sinceTs && event.ts < filters.sinceTs) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
if (filters.grep) {
|
|
77
|
+
const haystack = event.url.toLowerCase();
|
|
78
|
+
const needle = filters.grep.toLowerCase();
|
|
79
|
+
if (!haystack.includes(needle)) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=NetBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetBuffer.js","sourceRoot":"","sources":["../../src/buffer/NetBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SnapshotResponse } from '@vforsh/argus-core';
|
|
2
|
+
import type { CdpSessionHandle } from './connection.js';
|
|
3
|
+
export type FetchSnapshotOptions = {
|
|
4
|
+
selector?: string;
|
|
5
|
+
depth?: number;
|
|
6
|
+
interactive?: boolean;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Fetch an accessibility tree snapshot.
|
|
10
|
+
*
|
|
11
|
+
* 1. Enable Accessibility domain
|
|
12
|
+
* 2. Optionally resolve a CSS selector to scope the tree
|
|
13
|
+
* 3. Fetch the AX tree via CDP
|
|
14
|
+
* 4. Reconstruct flat array into nested tree
|
|
15
|
+
* 5. Apply filters (skip ignored, flatten generic, interactive-only, depth)
|
|
16
|
+
*/
|
|
17
|
+
export declare const fetchAccessibilitySnapshot: (session: CdpSessionHandle, options: FetchSnapshotOptions) => Promise<SnapshotResponse>;
|
|
18
|
+
//# sourceMappingURL=accessibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/cdp/accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAoCvD,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AA6ED;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,GAAU,SAAS,gBAAgB,EAAE,SAAS,oBAAoB,KAAG,OAAO,CAAC,gBAAgB,CAmEnI,CAAA"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Constants
|
|
3
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
+
const INTERACTIVE_ROLES = new Set([
|
|
5
|
+
'button',
|
|
6
|
+
'checkbox',
|
|
7
|
+
'combobox',
|
|
8
|
+
'link',
|
|
9
|
+
'listbox',
|
|
10
|
+
'menuitem',
|
|
11
|
+
'menuitemcheckbox',
|
|
12
|
+
'menuitemradio',
|
|
13
|
+
'option',
|
|
14
|
+
'radio',
|
|
15
|
+
'searchbox',
|
|
16
|
+
'slider',
|
|
17
|
+
'spinbutton',
|
|
18
|
+
'switch',
|
|
19
|
+
'tab',
|
|
20
|
+
'textbox',
|
|
21
|
+
'treeitem',
|
|
22
|
+
]);
|
|
23
|
+
/** Structural containers with no semantic meaning — flatten them away. */
|
|
24
|
+
const GENERIC_ROLES = new Set(['generic', 'none', 'presentation']);
|
|
25
|
+
/** Landmark and structural roles preserved as context in interactive mode. */
|
|
26
|
+
const LANDMARK_ROLES = new Set([
|
|
27
|
+
'banner',
|
|
28
|
+
'complementary',
|
|
29
|
+
'contentinfo',
|
|
30
|
+
'form',
|
|
31
|
+
'main',
|
|
32
|
+
'navigation',
|
|
33
|
+
'region',
|
|
34
|
+
'search',
|
|
35
|
+
'dialog',
|
|
36
|
+
'alertdialog',
|
|
37
|
+
'heading',
|
|
38
|
+
'group',
|
|
39
|
+
'list',
|
|
40
|
+
'toolbar',
|
|
41
|
+
'menu',
|
|
42
|
+
'menubar',
|
|
43
|
+
'tablist',
|
|
44
|
+
'tree',
|
|
45
|
+
'treegrid',
|
|
46
|
+
'grid',
|
|
47
|
+
'table',
|
|
48
|
+
]);
|
|
49
|
+
/** Properties worth surfacing in the output. */
|
|
50
|
+
const RELEVANT_PROPERTIES = new Set([
|
|
51
|
+
'checked',
|
|
52
|
+
'disabled',
|
|
53
|
+
'expanded',
|
|
54
|
+
'focused',
|
|
55
|
+
'level',
|
|
56
|
+
'required',
|
|
57
|
+
'selected',
|
|
58
|
+
'readonly',
|
|
59
|
+
'pressed',
|
|
60
|
+
'valuemin',
|
|
61
|
+
'valuemax',
|
|
62
|
+
'valuetext',
|
|
63
|
+
'autocomplete',
|
|
64
|
+
'multiselectable',
|
|
65
|
+
'orientation',
|
|
66
|
+
]);
|
|
67
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
68
|
+
// Public API
|
|
69
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
70
|
+
/**
|
|
71
|
+
* Fetch an accessibility tree snapshot.
|
|
72
|
+
*
|
|
73
|
+
* 1. Enable Accessibility domain
|
|
74
|
+
* 2. Optionally resolve a CSS selector to scope the tree
|
|
75
|
+
* 3. Fetch the AX tree via CDP
|
|
76
|
+
* 4. Reconstruct flat array into nested tree
|
|
77
|
+
* 5. Apply filters (skip ignored, flatten generic, interactive-only, depth)
|
|
78
|
+
*/
|
|
79
|
+
export const fetchAccessibilitySnapshot = async (session, options) => {
|
|
80
|
+
await session.sendAndWait('Accessibility.enable');
|
|
81
|
+
// Always fetch the full tree — getPartialAXTree with fetchRelatives:false
|
|
82
|
+
// returns only a single node without descendants, which is not useful.
|
|
83
|
+
const axResult = (await session.sendAndWait('Accessibility.getFullAXTree'));
|
|
84
|
+
let nodes = axResult.nodes ?? [];
|
|
85
|
+
// If a CSS selector is provided, scope to that DOM subtree.
|
|
86
|
+
// Since the AX tree structure doesn't always mirror DOM containment
|
|
87
|
+
// (e.g. forms without aria-label are invisible, their children parent up),
|
|
88
|
+
// we collect all backendDOMNodeIds within the DOM subtree and filter AX nodes by those.
|
|
89
|
+
if (options.selector) {
|
|
90
|
+
// Use Runtime.evaluate to get all backendNodeIds in the subtree efficiently
|
|
91
|
+
const resolveResult = (await session.sendAndWait('Runtime.evaluate', {
|
|
92
|
+
expression: `document.querySelector(${JSON.stringify(options.selector)})`,
|
|
93
|
+
returnByValue: false,
|
|
94
|
+
}));
|
|
95
|
+
if (!resolveResult.result?.objectId || resolveResult.result.subtype === 'null') {
|
|
96
|
+
throw new Error(`No element found for selector: ${options.selector}`);
|
|
97
|
+
}
|
|
98
|
+
// Enable DOM and load the document tree so requestNode/querySelectorAll work.
|
|
99
|
+
await session.sendAndWait('DOM.enable');
|
|
100
|
+
await session.sendAndWait('DOM.getDocument', { depth: -1 });
|
|
101
|
+
const domNode = (await session.sendAndWait('DOM.requestNode', {
|
|
102
|
+
objectId: resolveResult.result.objectId,
|
|
103
|
+
}));
|
|
104
|
+
if (!domNode.nodeId) {
|
|
105
|
+
throw new Error('Unable to resolve DOM node');
|
|
106
|
+
}
|
|
107
|
+
const allDescendants = (await session.sendAndWait('DOM.querySelectorAll', {
|
|
108
|
+
nodeId: domNode.nodeId,
|
|
109
|
+
selector: '*',
|
|
110
|
+
}));
|
|
111
|
+
const descendantNodeIds = allDescendants.nodeIds ?? [];
|
|
112
|
+
// Collect backendNodeIds for root + all descendants
|
|
113
|
+
const backendIds = new Set();
|
|
114
|
+
const allDomNodeIds = [domNode.nodeId, ...descendantNodeIds];
|
|
115
|
+
for (const nid of allDomNodeIds) {
|
|
116
|
+
const desc = (await session.sendAndWait('DOM.describeNode', { nodeId: nid, depth: 0 }));
|
|
117
|
+
if (desc.node?.backendNodeId != null) {
|
|
118
|
+
backendIds.add(desc.node.backendNodeId);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Filter AX nodes: keep those with matching backendDOMNodeId
|
|
122
|
+
// Plus all their AX descendants (for text nodes etc. that don't have backendDOMNodeId)
|
|
123
|
+
nodes = filterByDomSubtree(nodes, backendIds);
|
|
124
|
+
}
|
|
125
|
+
const totalNodes = nodes.length;
|
|
126
|
+
const roots = buildTree(nodes, {
|
|
127
|
+
depth: options.depth,
|
|
128
|
+
interactive: options.interactive ?? false,
|
|
129
|
+
});
|
|
130
|
+
const returnedNodes = countNodes(roots);
|
|
131
|
+
return { ok: true, roots, totalNodes, returnedNodes };
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Reconstruct the flat CDP AXNode array into a nested AXTreeNode tree.
|
|
135
|
+
*
|
|
136
|
+
* 1. Index all nodes by nodeId into a Map.
|
|
137
|
+
* 2. Find root nodes (parentId absent or not in map).
|
|
138
|
+
* 3. Recursively build tree with filtering.
|
|
139
|
+
*/
|
|
140
|
+
const buildTree = (cdpNodes, options) => {
|
|
141
|
+
const nodeMap = new Map();
|
|
142
|
+
for (const node of cdpNodes) {
|
|
143
|
+
nodeMap.set(node.nodeId, node);
|
|
144
|
+
}
|
|
145
|
+
const rootIds = [];
|
|
146
|
+
for (const node of cdpNodes) {
|
|
147
|
+
if (!node.parentId || !nodeMap.has(node.parentId)) {
|
|
148
|
+
rootIds.push(node.nodeId);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const results = [];
|
|
152
|
+
for (const rootId of rootIds) {
|
|
153
|
+
results.push(...convertNode(nodeMap, rootId, 0, options));
|
|
154
|
+
}
|
|
155
|
+
return results;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Convert a single CdpAXNode to AXTreeNode(s).
|
|
159
|
+
* Returns an array because ignored/generic nodes get flattened (children become siblings).
|
|
160
|
+
*/
|
|
161
|
+
const convertNode = (nodeMap, nodeId, currentDepth, options) => {
|
|
162
|
+
const cdpNode = nodeMap.get(nodeId);
|
|
163
|
+
if (!cdpNode) {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
const role = extractStringValue(cdpNode.role) ?? 'unknown';
|
|
167
|
+
const name = extractStringValue(cdpNode.name) ?? '';
|
|
168
|
+
// Recurse into children first (needed for interactive filtering)
|
|
169
|
+
const childIds = cdpNode.childIds ?? [];
|
|
170
|
+
const depthExceeded = options.depth != null && currentDepth >= options.depth;
|
|
171
|
+
const childResults = [];
|
|
172
|
+
if (!depthExceeded) {
|
|
173
|
+
for (const childId of childIds) {
|
|
174
|
+
childResults.push(...convertNode(nodeMap, childId, currentDepth + 1, options));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Skip ignored nodes — pass through children
|
|
178
|
+
if (cdpNode.ignored) {
|
|
179
|
+
return childResults;
|
|
180
|
+
}
|
|
181
|
+
// Flatten generic container nodes with no name — pass through children
|
|
182
|
+
if (GENERIC_ROLES.has(role) && !name) {
|
|
183
|
+
return childResults;
|
|
184
|
+
}
|
|
185
|
+
// Skip InlineTextBox nodes — Chrome rendering detail, always repeat parent StaticText
|
|
186
|
+
if (role === 'InlineTextBox') {
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
// Build the output node
|
|
190
|
+
const result = { role, name };
|
|
191
|
+
const value = extractStringValue(cdpNode.value);
|
|
192
|
+
if (value != null && value !== '') {
|
|
193
|
+
result.value = value;
|
|
194
|
+
}
|
|
195
|
+
const properties = extractProperties(cdpNode.properties);
|
|
196
|
+
if (properties && Object.keys(properties).length > 0) {
|
|
197
|
+
result.properties = properties;
|
|
198
|
+
}
|
|
199
|
+
if (childResults.length > 0) {
|
|
200
|
+
result.children = childResults;
|
|
201
|
+
}
|
|
202
|
+
// Interactive-only filter: keep node if it is interactive or has interactive descendants
|
|
203
|
+
if (options.interactive) {
|
|
204
|
+
const isInteractive = INTERACTIVE_ROLES.has(role);
|
|
205
|
+
const hasInteractiveDescendant = childResults.length > 0;
|
|
206
|
+
if (!isInteractive && !hasInteractiveDescendant) {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
// Non-interactive node with interactive descendants — keep as context only if meaningful
|
|
210
|
+
if (!isInteractive && !name && !LANDMARK_ROLES.has(role)) {
|
|
211
|
+
return childResults;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return [result];
|
|
215
|
+
};
|
|
216
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
217
|
+
// Helpers
|
|
218
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
219
|
+
const extractStringValue = (axValue) => {
|
|
220
|
+
if (!axValue || axValue.value == null) {
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
return String(axValue.value);
|
|
224
|
+
};
|
|
225
|
+
const extractProperties = (properties) => {
|
|
226
|
+
if (!properties || properties.length === 0) {
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
const result = {};
|
|
230
|
+
for (const prop of properties) {
|
|
231
|
+
if (!RELEVANT_PROPERTIES.has(prop.name)) {
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const val = prop.value?.value;
|
|
235
|
+
if (val == null) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (typeof val === 'boolean' || typeof val === 'number' || typeof val === 'string') {
|
|
239
|
+
// Skip false/default values to reduce noise
|
|
240
|
+
if (typeof val === 'boolean' && !val) {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
result[prop.name] = val;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* Filter AX nodes to those whose backendDOMNodeId is in the given set,
|
|
250
|
+
* plus their AX children (which may not have backendDOMNodeId, e.g. StaticText).
|
|
251
|
+
* Rewires parentId so the topmost matching nodes become roots.
|
|
252
|
+
*/
|
|
253
|
+
const filterByDomSubtree = (allNodes, backendIds) => {
|
|
254
|
+
const nodeMap = new Map();
|
|
255
|
+
for (const node of allNodes) {
|
|
256
|
+
nodeMap.set(node.nodeId, node);
|
|
257
|
+
}
|
|
258
|
+
// Start with AX nodes that directly match a DOM backendNodeId
|
|
259
|
+
const matchedAxIds = new Set();
|
|
260
|
+
for (const node of allNodes) {
|
|
261
|
+
if (node.backendDOMNodeId != null && backendIds.has(node.backendDOMNodeId)) {
|
|
262
|
+
matchedAxIds.add(node.nodeId);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// BFS: also include all AX descendants of matched nodes
|
|
266
|
+
const finalIds = new Set(matchedAxIds);
|
|
267
|
+
const queue = [...matchedAxIds];
|
|
268
|
+
while (queue.length > 0) {
|
|
269
|
+
const id = queue.shift();
|
|
270
|
+
const node = nodeMap.get(id);
|
|
271
|
+
if (node?.childIds) {
|
|
272
|
+
for (const childId of node.childIds) {
|
|
273
|
+
if (!finalIds.has(childId)) {
|
|
274
|
+
finalIds.add(childId);
|
|
275
|
+
queue.push(childId);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Filter and rewire: nodes whose parent is not in the set become roots
|
|
281
|
+
return allNodes
|
|
282
|
+
.filter((n) => finalIds.has(n.nodeId))
|
|
283
|
+
.map((n) => {
|
|
284
|
+
if (n.parentId && !finalIds.has(n.parentId)) {
|
|
285
|
+
return { ...n, parentId: undefined };
|
|
286
|
+
}
|
|
287
|
+
return n;
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
const countNodes = (nodes) => {
|
|
291
|
+
let count = 0;
|
|
292
|
+
for (const node of nodes) {
|
|
293
|
+
count++;
|
|
294
|
+
if (node.children) {
|
|
295
|
+
count += countNodes(node.children);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return count;
|
|
299
|
+
};
|
|
300
|
+
//# sourceMappingURL=accessibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/cdp/accessibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type CdpEventMeta = {
|
|
2
|
+
sessionId?: string | null;
|
|
3
|
+
};
|
|
4
|
+
export type CdpEventHandler = (params: unknown, meta: CdpEventMeta) => void;
|
|
5
|
+
export type CdpSendOptions = {
|
|
6
|
+
/** Optional timeout for this CDP command (ms). */
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
/** Optional child protocol session within the current root target. */
|
|
9
|
+
sessionId?: string;
|
|
10
|
+
};
|
|
11
|
+
export type CdpTargetContext = {
|
|
12
|
+
kind: 'page';
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'frame';
|
|
15
|
+
frameId: string;
|
|
16
|
+
executionContextId: number | null;
|
|
17
|
+
sessionId?: string | null;
|
|
18
|
+
};
|
|
19
|
+
export type CdpSessionHandle = {
|
|
20
|
+
isAttached: () => boolean;
|
|
21
|
+
sendAndWait: (method: string, params?: Record<string, unknown>, options?: CdpSendOptions) => Promise<unknown>;
|
|
22
|
+
onEvent: (method: string, handler: CdpEventHandler) => () => void;
|
|
23
|
+
/** Active target context for commands that need frame-aware behavior. */
|
|
24
|
+
getTargetContext?: () => CdpTargetContext;
|
|
25
|
+
};
|
|
26
|
+
type CdpConnection = {
|
|
27
|
+
sendAndWait: (method: string, params?: Record<string, unknown>, options?: CdpSendOptions) => Promise<unknown>;
|
|
28
|
+
handleMessage: (data: unknown) => void;
|
|
29
|
+
close: (reason?: string) => void;
|
|
30
|
+
};
|
|
31
|
+
export type CdpSessionController = {
|
|
32
|
+
session: CdpSessionHandle;
|
|
33
|
+
attach: (socket: WebSocket) => CdpConnection;
|
|
34
|
+
detach: (reason?: string) => void;
|
|
35
|
+
};
|
|
36
|
+
export declare const createCdpSessionHandle: () => CdpSessionController;
|
|
37
|
+
export declare const createCdpNotAttachedError: () => Error;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/cdp/connection.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC5B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACA,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAEJ,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,MAAM,OAAO,CAAA;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7G,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,KAAK,MAAM,IAAI,CAAA;IACjE,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,gBAAgB,CAAA;CACzC,CAAA;AAQD,KAAK,aAAa,GAAG;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7G,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC,CAAA;AAID,MAAM,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,gBAAgB,CAAA;IACzB,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,aAAa,CAAA;IAC5C,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC,CAAA;AAED,eAAO,MAAM,sBAAsB,QAAO,oBA6HzC,CAAA;AAED,eAAO,MAAM,yBAAyB,QAAO,KAI5C,CAAA"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
let nextId = 1;
|
|
2
|
+
export const createCdpSessionHandle = () => {
|
|
3
|
+
let connection = null;
|
|
4
|
+
const handlers = new Map();
|
|
5
|
+
const session = {
|
|
6
|
+
isAttached: () => Boolean(connection),
|
|
7
|
+
sendAndWait: async (method, params, options) => {
|
|
8
|
+
if (!connection) {
|
|
9
|
+
throw createCdpNotAttachedError();
|
|
10
|
+
}
|
|
11
|
+
return connection.sendAndWait(method, params, options);
|
|
12
|
+
},
|
|
13
|
+
onEvent: (method, handler) => {
|
|
14
|
+
let bucket = handlers.get(method);
|
|
15
|
+
if (!bucket) {
|
|
16
|
+
bucket = new Set();
|
|
17
|
+
handlers.set(method, bucket);
|
|
18
|
+
}
|
|
19
|
+
bucket.add(handler);
|
|
20
|
+
return () => {
|
|
21
|
+
bucket?.delete(handler);
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
const attach = (socket) => {
|
|
26
|
+
const pendingRequests = new Map();
|
|
27
|
+
const sendAndWait = async (method, params, options) => {
|
|
28
|
+
const id = nextId++;
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
const pending = { resolve, reject };
|
|
31
|
+
if (options?.timeoutMs) {
|
|
32
|
+
pending.timer = setTimeout(() => {
|
|
33
|
+
pendingRequests.delete(id);
|
|
34
|
+
reject(new Error(`CDP request timed out after ${options.timeoutMs}ms`));
|
|
35
|
+
}, options.timeoutMs);
|
|
36
|
+
}
|
|
37
|
+
pendingRequests.set(id, pending);
|
|
38
|
+
try {
|
|
39
|
+
socket.send(JSON.stringify({ id, method, params }));
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
pendingRequests.delete(id);
|
|
43
|
+
if (pending.timer) {
|
|
44
|
+
clearTimeout(pending.timer);
|
|
45
|
+
}
|
|
46
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
const handleMessage = (data) => {
|
|
51
|
+
const message = parseMessage(data);
|
|
52
|
+
if (!message || typeof message !== 'object') {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const payload = message;
|
|
56
|
+
if (payload.id != null) {
|
|
57
|
+
const pending = pendingRequests.get(payload.id);
|
|
58
|
+
if (!pending) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
pendingRequests.delete(payload.id);
|
|
62
|
+
if (pending.timer) {
|
|
63
|
+
clearTimeout(pending.timer);
|
|
64
|
+
}
|
|
65
|
+
if (payload.error) {
|
|
66
|
+
pending.reject(new Error(payload.error.message ?? 'CDP request failed'));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
pending.resolve(payload.result);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (payload.method) {
|
|
73
|
+
const bucket = handlers.get(payload.method);
|
|
74
|
+
if (!bucket || bucket.size === 0) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
for (const handler of bucket) {
|
|
78
|
+
try {
|
|
79
|
+
handler(payload.params, { sessionId: null });
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Ignore handler errors to keep dispatch resilient.
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const close = (reason) => {
|
|
88
|
+
for (const pending of pendingRequests.values()) {
|
|
89
|
+
pending.reject(new Error(reason ?? 'CDP connection closed'));
|
|
90
|
+
if (pending.timer) {
|
|
91
|
+
clearTimeout(pending.timer);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
pendingRequests.clear();
|
|
95
|
+
};
|
|
96
|
+
const nextConnection = {
|
|
97
|
+
sendAndWait,
|
|
98
|
+
handleMessage,
|
|
99
|
+
close,
|
|
100
|
+
};
|
|
101
|
+
connection = nextConnection;
|
|
102
|
+
return nextConnection;
|
|
103
|
+
};
|
|
104
|
+
const detach = (reason) => {
|
|
105
|
+
if (connection) {
|
|
106
|
+
connection.close(reason);
|
|
107
|
+
}
|
|
108
|
+
connection = null;
|
|
109
|
+
};
|
|
110
|
+
return { session, attach, detach };
|
|
111
|
+
};
|
|
112
|
+
export const createCdpNotAttachedError = () => {
|
|
113
|
+
const error = new Error('Watcher not attached to a CDP target');
|
|
114
|
+
error.code = 'cdp_not_attached';
|
|
115
|
+
return error;
|
|
116
|
+
};
|
|
117
|
+
const parseMessage = (data) => {
|
|
118
|
+
if (typeof data === 'string') {
|
|
119
|
+
try {
|
|
120
|
+
return JSON.parse(data);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (data instanceof ArrayBuffer) {
|
|
127
|
+
return parseMessage(new TextDecoder().decode(data));
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=connection.js.map
|