@vforsh/argus-watcher 0.1.7 → 0.1.9
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/dist/.tsbuildinfo +1 -1
- package/dist/cdp/dom/selector.d.ts +10 -0
- package/dist/cdp/dom/selector.d.ts.map +1 -1
- package/dist/cdp/dom/selector.js +12 -0
- package/dist/cdp/dom/selector.js.map +1 -1
- package/dist/cdp/mouse.d.ts.map +1 -1
- package/dist/cdp/mouse.js +2 -11
- package/dist/cdp/mouse.js.map +1 -1
- package/dist/cdp/pageIndicator.d.ts +1 -1
- package/dist/cdp/pageIndicator.d.ts.map +1 -1
- package/dist/cdp/text-filter.js.map +1 -1
- package/dist/cdp/watcher.d.ts +3 -21
- package/dist/cdp/watcher.d.ts.map +1 -1
- package/dist/cdp/watcher.js +2 -278
- package/dist/cdp/watcher.js.map +1 -1
- package/dist/cdp/watcherEvents.d.ts +18 -0
- package/dist/cdp/watcherEvents.d.ts.map +1 -0
- package/dist/cdp/watcherEvents.js +169 -0
- package/dist/cdp/watcherEvents.js.map +1 -0
- package/dist/cdp/watcherTargets.d.ts +18 -0
- package/dist/cdp/watcherTargets.d.ts.map +1 -0
- package/dist/cdp/watcherTargets.js +95 -0
- package/dist/cdp/watcherTargets.js.map +1 -0
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +3 -77
- package/dist/http/router.js.map +1 -1
- package/dist/http/routes/domSelectorRoute.d.ts +16 -0
- package/dist/http/routes/domSelectorRoute.d.ts.map +1 -0
- package/dist/http/routes/domSelectorRoute.js +31 -0
- package/dist/http/routes/domSelectorRoute.js.map +1 -0
- package/dist/http/routes/index.d.ts +9 -0
- package/dist/http/routes/index.d.ts.map +1 -0
- package/dist/http/routes/index.js +78 -0
- package/dist/http/routes/index.js.map +1 -0
- package/dist/http/routes/postDomClick.d.ts.map +1 -1
- package/dist/http/routes/postDomClick.js +11 -21
- package/dist/http/routes/postDomClick.js.map +1 -1
- package/dist/http/routes/postDomFill.d.ts.map +1 -1
- package/dist/http/routes/postDomFill.js +9 -23
- package/dist/http/routes/postDomFill.js.map +1 -1
- package/dist/http/routes/postDomFocus.d.ts.map +1 -1
- package/dist/http/routes/postDomFocus.js +6 -17
- package/dist/http/routes/postDomFocus.js.map +1 -1
- package/dist/http/routes/postDomHover.d.ts.map +1 -1
- package/dist/http/routes/postDomHover.js +6 -17
- package/dist/http/routes/postDomHover.js.map +1 -1
- package/dist/http/routes/postDomInfo.d.ts.map +1 -1
- package/dist/http/routes/postDomInfo.js +6 -18
- package/dist/http/routes/postDomInfo.js.map +1 -1
- package/dist/http/routes/postDomRemove.d.ts.map +1 -1
- package/dist/http/routes/postDomRemove.js +6 -17
- package/dist/http/routes/postDomRemove.js.map +1 -1
- package/dist/http/routes/postDomScroll.d.ts.map +1 -1
- package/dist/http/routes/postDomScroll.js +2 -7
- package/dist/http/routes/postDomScroll.js.map +1 -1
- package/dist/http/routes/postDomScrollTo.d.ts.map +1 -1
- package/dist/http/routes/postDomScrollTo.js +2 -7
- package/dist/http/routes/postDomScrollTo.js.map +1 -1
- package/dist/http/routes/postDomSetFile.d.ts.map +1 -1
- package/dist/http/routes/postDomSetFile.js +9 -23
- package/dist/http/routes/postDomSetFile.js.map +1 -1
- package/dist/http/routes/postDomTree.d.ts.map +1 -1
- package/dist/http/routes/postDomTree.js +6 -18
- package/dist/http/routes/postDomTree.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -396
- package/dist/index.js.map +1 -1
- package/dist/runtime/watcherInject.d.ts +15 -0
- package/dist/runtime/watcherInject.d.ts.map +1 -0
- package/dist/runtime/watcherInject.js +21 -0
- package/dist/runtime/watcherInject.js.map +1 -0
- package/dist/runtime/watcherServices.d.ts +32 -0
- package/dist/runtime/watcherServices.d.ts.map +1 -0
- package/dist/runtime/watcherServices.js +64 -0
- package/dist/runtime/watcherServices.js.map +1 -0
- package/dist/runtime/watcherSetup.d.ts +35 -0
- package/dist/runtime/watcherSetup.d.ts.map +1 -0
- package/dist/runtime/watcherSetup.js +96 -0
- package/dist/runtime/watcherSetup.js.map +1 -0
- package/dist/sources/extension-delegating-session.d.ts +21 -0
- package/dist/sources/extension-delegating-session.d.ts.map +1 -0
- package/dist/sources/extension-delegating-session.js +62 -0
- package/dist/sources/extension-delegating-session.js.map +1 -0
- package/dist/sources/extension-frame-runtime.d.ts +11 -0
- package/dist/sources/extension-frame-runtime.d.ts.map +1 -0
- package/dist/sources/extension-frame-runtime.js +129 -0
- package/dist/sources/extension-frame-runtime.js.map +1 -0
- package/dist/sources/extension-session-events.d.ts +21 -0
- package/dist/sources/extension-session-events.d.ts.map +1 -0
- package/dist/sources/extension-session-events.js +103 -0
- package/dist/sources/extension-session-events.js.map +1 -0
- package/dist/sources/extension-source.d.ts +0 -4
- package/dist/sources/extension-source.d.ts.map +1 -1
- package/dist/sources/extension-source.js +39 -285
- package/dist/sources/extension-source.js.map +1 -1
- package/dist/startWatcherRuntime.d.ts +6 -0
- package/dist/startWatcherRuntime.d.ts.map +1 -0
- package/dist/startWatcherRuntime.js +251 -0
- package/dist/startWatcherRuntime.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import Emittery from 'emittery';
|
|
4
|
+
import { LogBuffer } from '../buffer/LogBuffer.js';
|
|
5
|
+
import { NetBuffer } from '../buffer/NetBuffer.js';
|
|
6
|
+
import { WatcherFileLogger } from '../fileLogs/WatcherFileLogger.js';
|
|
7
|
+
import { buildIgnoreMatcher } from '../cdp/ignoreList.js';
|
|
8
|
+
import { createCdpSessionHandle } from '../cdp/connection.js';
|
|
9
|
+
import { createEmulationController } from '../emulation/EmulationController.js';
|
|
10
|
+
import { createThrottleController } from '../throttle/ThrottleController.js';
|
|
11
|
+
export const normalizeWatcherSetup = (options, watcherId) => {
|
|
12
|
+
const sourceMode = options.source ?? 'cdp';
|
|
13
|
+
const host = options.host ?? '127.0.0.1';
|
|
14
|
+
const port = options.port ?? 0;
|
|
15
|
+
const chrome = options.chrome ?? { host: '127.0.0.1', port: 9222 };
|
|
16
|
+
const bufferSize = options.bufferSize ?? 50_000;
|
|
17
|
+
const startedAt = Date.now();
|
|
18
|
+
const ignoreMatcher = buildIgnoreMatcher(options.ignoreList);
|
|
19
|
+
const stripUrlPrefixes = options.location?.stripUrlPrefixes;
|
|
20
|
+
const artifactsBaseDir = resolveArtifactsBaseDir(options.artifacts?.base, watcherId);
|
|
21
|
+
const logsEnabled = options.artifacts?.logs?.enabled === true;
|
|
22
|
+
const logsDir = path.join(artifactsBaseDir, 'logs');
|
|
23
|
+
const includeTimestamps = options.artifacts?.logs?.includeTimestamps ?? false;
|
|
24
|
+
const maxFiles = resolveMaxFiles(options.artifacts?.logs?.maxFiles);
|
|
25
|
+
const netEnabled = options.net?.enabled === true;
|
|
26
|
+
const pageConsoleLogging = options.pageConsoleLogging ?? 'minimal';
|
|
27
|
+
const events = new Emittery();
|
|
28
|
+
const buffer = new LogBuffer(bufferSize);
|
|
29
|
+
const netBuffer = netEnabled ? new NetBuffer(bufferSize) : null;
|
|
30
|
+
const fileLogger = logsEnabled
|
|
31
|
+
? new WatcherFileLogger({
|
|
32
|
+
watcherId,
|
|
33
|
+
startedAt,
|
|
34
|
+
logsDir,
|
|
35
|
+
chrome: sourceMode === 'cdp' ? chrome : undefined,
|
|
36
|
+
match: options.match,
|
|
37
|
+
maxFiles,
|
|
38
|
+
includeTimestamps,
|
|
39
|
+
buildFilename: options.artifacts?.logs?.buildFilename,
|
|
40
|
+
})
|
|
41
|
+
: null;
|
|
42
|
+
const record = {
|
|
43
|
+
id: watcherId,
|
|
44
|
+
host,
|
|
45
|
+
port,
|
|
46
|
+
pid: process.pid,
|
|
47
|
+
cwd: process.cwd(),
|
|
48
|
+
startedAt,
|
|
49
|
+
updatedAt: Date.now(),
|
|
50
|
+
match: sourceMode === 'cdp' ? options.match : undefined,
|
|
51
|
+
chrome: sourceMode === 'cdp' ? chrome : undefined,
|
|
52
|
+
includeTimestamps,
|
|
53
|
+
source: sourceMode,
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
sourceMode,
|
|
57
|
+
host,
|
|
58
|
+
port,
|
|
59
|
+
chrome,
|
|
60
|
+
watcherId,
|
|
61
|
+
startedAt,
|
|
62
|
+
artifactsBaseDir,
|
|
63
|
+
includeTimestamps,
|
|
64
|
+
netEnabled,
|
|
65
|
+
pageConsoleLogging,
|
|
66
|
+
ignoreMatcher,
|
|
67
|
+
stripUrlPrefixes,
|
|
68
|
+
events,
|
|
69
|
+
buffer,
|
|
70
|
+
netBuffer,
|
|
71
|
+
record,
|
|
72
|
+
fileLogger,
|
|
73
|
+
sessionHandle: createCdpSessionHandle(),
|
|
74
|
+
emulationController: createEmulationController(),
|
|
75
|
+
throttleController: createThrottleController(),
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
const resolveArtifactsBaseDir = (base, watcherId) => {
|
|
79
|
+
if (base !== undefined && base !== null) {
|
|
80
|
+
if (typeof base !== 'string' || base.trim() === '') {
|
|
81
|
+
throw new Error('artifacts.base must be a non-empty string when provided');
|
|
82
|
+
}
|
|
83
|
+
return path.resolve(base);
|
|
84
|
+
}
|
|
85
|
+
return path.join(os.tmpdir(), 'argus', watcherId);
|
|
86
|
+
};
|
|
87
|
+
const resolveMaxFiles = (maxFiles) => {
|
|
88
|
+
if (maxFiles === undefined) {
|
|
89
|
+
return 5;
|
|
90
|
+
}
|
|
91
|
+
if (!Number.isInteger(maxFiles) || maxFiles < 1) {
|
|
92
|
+
throw new Error('artifacts.logs.maxFiles must be an integer >= 1');
|
|
93
|
+
}
|
|
94
|
+
return maxFiles;
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=watcherSetup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcherSetup.js","sourceRoot":"","sources":["../../src/runtime/watcherSetup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ExtensionSession } from '../native-messaging/session-manager.js';
|
|
2
|
+
import type { CdpSessionHandle, CdpTargetContext } from '../cdp/connection.js';
|
|
3
|
+
export type DelegatingSessionController = {
|
|
4
|
+
rebind: () => void;
|
|
5
|
+
dispose: () => void;
|
|
6
|
+
};
|
|
7
|
+
type CreateDelegatingSessionOptions = {
|
|
8
|
+
getCurrentSession: () => ExtensionSession | null;
|
|
9
|
+
requireCurrentSession: () => ExtensionSession;
|
|
10
|
+
getTargetContext: () => CdpTargetContext;
|
|
11
|
+
mapParams?: (method: string, params?: Record<string, unknown>) => Record<string, unknown> | undefined;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Keep a stable session handle while the underlying extension tab attachment changes over time.
|
|
15
|
+
*/
|
|
16
|
+
export declare const createDelegatingSession: (options: CreateDelegatingSessionOptions) => {
|
|
17
|
+
session: CdpSessionHandle;
|
|
18
|
+
controller: DelegatingSessionController;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=extension-delegating-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-delegating-session.d.ts","sourceRoot":"","sources":["../../src/sources/extension-delegating-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAS9E,MAAM,MAAM,2BAA2B,GAAG;IACzC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AAED,KAAK,8BAA8B,GAAG;IACrC,iBAAiB,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAA;IAChD,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;IAC7C,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;IACxC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CACrG,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,GACnC,SAAS,8BAA8B,KACrC;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,2BAA2B,CAAA;CAsDtE,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep a stable session handle while the underlying extension tab attachment changes over time.
|
|
3
|
+
*/
|
|
4
|
+
export const createDelegatingSession = (options) => {
|
|
5
|
+
const subscriptions = new Set();
|
|
6
|
+
const rebindSubscriptions = () => {
|
|
7
|
+
// Delegating sessions are created before a tab may be attached, so event listeners
|
|
8
|
+
// must follow the active extension session instead of binding once and going stale.
|
|
9
|
+
for (const subscription of subscriptions) {
|
|
10
|
+
subscription.unbind();
|
|
11
|
+
const currentSession = options.getCurrentSession();
|
|
12
|
+
if (!currentSession) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
subscription.off = currentSession.handle.onEvent(subscription.method, subscription.handler);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const disposeSubscriptions = () => {
|
|
19
|
+
for (const subscription of subscriptions) {
|
|
20
|
+
subscription.unbind();
|
|
21
|
+
}
|
|
22
|
+
subscriptions.clear();
|
|
23
|
+
};
|
|
24
|
+
const controller = {
|
|
25
|
+
rebind: rebindSubscriptions,
|
|
26
|
+
dispose: disposeSubscriptions,
|
|
27
|
+
};
|
|
28
|
+
const session = {
|
|
29
|
+
isAttached: () => options.getCurrentSession()?.handle.isAttached() ?? false,
|
|
30
|
+
sendAndWait: async (method, params, commandOptions) => {
|
|
31
|
+
const currentSession = options.requireCurrentSession();
|
|
32
|
+
const targetContext = options.getTargetContext();
|
|
33
|
+
const nextParams = options.mapParams ? options.mapParams(method, params) : params;
|
|
34
|
+
const nextOptions = targetContext.kind === 'frame' && targetContext.sessionId
|
|
35
|
+
? { ...(commandOptions ?? {}), sessionId: targetContext.sessionId }
|
|
36
|
+
: commandOptions;
|
|
37
|
+
return currentSession.handle.sendAndWait(method, nextParams, nextOptions);
|
|
38
|
+
},
|
|
39
|
+
onEvent: (method, handler) => {
|
|
40
|
+
const subscription = createDelegatingEventSubscription(method, handler);
|
|
41
|
+
subscriptions.add(subscription);
|
|
42
|
+
controller.rebind();
|
|
43
|
+
return () => {
|
|
44
|
+
subscription.unbind();
|
|
45
|
+
subscriptions.delete(subscription);
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
getTargetContext: options.getTargetContext,
|
|
49
|
+
};
|
|
50
|
+
controller.rebind();
|
|
51
|
+
return { session, controller };
|
|
52
|
+
};
|
|
53
|
+
const createDelegatingEventSubscription = (method, handler) => ({
|
|
54
|
+
method,
|
|
55
|
+
handler,
|
|
56
|
+
off: null,
|
|
57
|
+
unbind() {
|
|
58
|
+
this.off?.();
|
|
59
|
+
this.off = null;
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=extension-delegating-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-delegating-session.js","sourceRoot":"","sources":["../../src/sources/extension-delegating-session.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACtC,OAAuC,EACkC,EAAE;IAC3E,MAAM,aAAa,GAAG,IAAI,GAAG,EAA+B,CAAA;IAC5D,MAAM,mBAAmB,GAAG,GAAS,EAAE;QACtC,mFAAmF;QACnF,oFAAoF;QACpF,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YAC1C,YAAY,CAAC,MAAM,EAAE,CAAA;YACrB,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAA;YAClD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,SAAQ;YACT,CAAC;YACD,YAAY,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;QAC5F,CAAC;IACF,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,GAAS,EAAE;QACvC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YAC1C,YAAY,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC;QACD,aAAa,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,UAAU,GAAgC;QAC/C,MAAM,EAAE,mBAAmB;QAC3B,OAAO,EAAE,oBAAoB;KAC7B,CAAA;IAED,MAAM,OAAO,GAAqB;QACjC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK;QAC3E,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE;YACrD,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAA;YACtD,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAA;YAChD,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YACjF,MAAM,WAAW,GAChB,aAAa,CAAC,IAAI,KAAK,OAAO,IAAI,aAAa,CAAC,SAAS;gBACxD,CAAC,CAAC,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE;gBACnE,CAAC,CAAC,cAAc,CAAA;YAClB,OAAO,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAA;QAC1E,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC5B,MAAM,YAAY,GAAG,iCAAiC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YACvE,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAC/B,UAAU,CAAC,MAAM,EAAE,CAAA;YAEnB,OAAO,GAAG,EAAE;gBACX,YAAY,CAAC,MAAM,EAAE,CAAA;gBACrB,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YACnC,CAAC,CAAA;QACF,CAAC;QACD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC1C,CAAA;IAED,UAAU,CAAC,MAAM,EAAE,CAAA;IACnB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;AAC/B,CAAC,CAAA;AAED,MAAM,iCAAiC,GAAG,CAAC,MAAc,EAAE,OAAmD,EAA+B,EAAE,CAAC,CAAC;IAChJ,MAAM;IACN,OAAO;IACP,GAAG,EAAE,IAAI;IACT,MAAM;QACL,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QACZ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAA;IAChB,CAAC;CACD,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ExtensionSession } from '../native-messaging/session-manager.js';
|
|
2
|
+
import type { CdpSourceTarget } from './types.js';
|
|
3
|
+
import { type ExtensionFrameState } from './extension-frame-state.js';
|
|
4
|
+
export declare const seedExtensionFrameState: (session: ExtensionSession, state: ExtensionFrameState) => ExtensionFrameState;
|
|
5
|
+
export declare const getSelectedExtensionTarget: (session: ExtensionSession, state: ExtensionFrameState | undefined) => CdpSourceTarget;
|
|
6
|
+
export declare const setRequestedTargetSelection: (state: ExtensionFrameState, frameId: string | null) => void;
|
|
7
|
+
export declare const reconcileExtensionTargetSelection: (session: ExtensionSession, state: ExtensionFrameState, onTargetChanged: () => void) => boolean;
|
|
8
|
+
export declare const refreshExtensionFrameTree: (session: ExtensionSession, state: ExtensionFrameState, refreshFrameTitle: (frameId: string) => Promise<void>) => Promise<void>;
|
|
9
|
+
export declare const removeExtensionFrame: (state: ExtensionFrameState, frameId: string) => void;
|
|
10
|
+
export declare const refreshExtensionFrameTitle: (session: ExtensionSession, state: ExtensionFrameState, frameId: string, onActiveFrameUpdated: () => void, contextId?: number) => Promise<void>;
|
|
11
|
+
//# sourceMappingURL=extension-frame-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-frame-runtime.d.ts","sourceRoot":"","sources":["../../src/sources/extension-frame-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAON,KAAK,mBAAmB,EACxB,MAAM,4BAA4B,CAAA;AAEnC,eAAO,MAAM,uBAAuB,GAAI,SAAS,gBAAgB,EAAE,OAAO,mBAAmB,KAAG,mBAiB/F,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,SAAS,gBAAgB,EAAE,OAAO,mBAAmB,GAAG,SAAS,KAAG,eAW9G,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAI,OAAO,mBAAmB,EAAE,SAAS,MAAM,GAAG,IAAI,KAAG,IAKhG,CAAA;AAED,eAAO,MAAM,iCAAiC,GAAI,SAAS,gBAAgB,EAAE,OAAO,mBAAmB,EAAE,iBAAiB,MAAM,IAAI,KAAG,OAkBtI,CAAA;AAED,eAAO,MAAM,yBAAyB,GACrC,SAAS,gBAAgB,EACzB,OAAO,mBAAmB,EAC1B,mBAAmB,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,KACnD,OAAO,CAAC,IAAI,CAId,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,OAAO,mBAAmB,EAAE,SAAS,MAAM,KAAG,IAmBlF,CAAA;AAED,eAAO,MAAM,0BAA0B,GACtC,SAAS,gBAAgB,EACzB,OAAO,mBAAmB,EAC1B,SAAS,MAAM,EACf,sBAAsB,MAAM,IAAI,EAChC,YAAY,MAAM,KAChB,OAAO,CAAC,IAAI,CA2Cd,CAAA"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { buildPageTarget, collectFrameTree, createRequestedFrameHint, frameToTarget, resolveRequestedTarget, } from './extension-frame-state.js';
|
|
2
|
+
export const seedExtensionFrameState = (session, state) => {
|
|
3
|
+
if (state.frames.size > 0 || session.frames.length === 0) {
|
|
4
|
+
return state;
|
|
5
|
+
}
|
|
6
|
+
state.topFrameId = session.topFrameId;
|
|
7
|
+
for (const frame of session.frames) {
|
|
8
|
+
state.frames.set(frame.frameId, {
|
|
9
|
+
frameId: frame.frameId,
|
|
10
|
+
parentFrameId: frame.parentFrameId,
|
|
11
|
+
url: frame.url,
|
|
12
|
+
title: frame.title,
|
|
13
|
+
sessionId: frame.sessionId,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return state;
|
|
17
|
+
};
|
|
18
|
+
export const getSelectedExtensionTarget = (session, state) => {
|
|
19
|
+
if (!state?.activeFrameId) {
|
|
20
|
+
return buildPageTarget(session, { attached: true });
|
|
21
|
+
}
|
|
22
|
+
const frame = state.frames.get(state.activeFrameId);
|
|
23
|
+
if (!frame) {
|
|
24
|
+
return buildPageTarget(session, { attached: true });
|
|
25
|
+
}
|
|
26
|
+
return frameToTarget(session.tabId, frame, { attached: true, faviconUrl: session.faviconUrl, topFrameId: state.topFrameId });
|
|
27
|
+
};
|
|
28
|
+
export const setRequestedTargetSelection = (state, frameId) => {
|
|
29
|
+
const frame = frameId ? state.frames.get(frameId) : null;
|
|
30
|
+
state.requestedFrameId = frameId;
|
|
31
|
+
state.requestedFrameHint = createRequestedFrameHint(frame);
|
|
32
|
+
state.requestedFrameDetached = false;
|
|
33
|
+
};
|
|
34
|
+
export const reconcileExtensionTargetSelection = (session, state, onTargetChanged) => {
|
|
35
|
+
const resolution = resolveRequestedTarget(state);
|
|
36
|
+
if (resolution.kind === 'page') {
|
|
37
|
+
state.requestedFrameDetached = false;
|
|
38
|
+
return activatePageTarget(state, onTargetChanged);
|
|
39
|
+
}
|
|
40
|
+
if (resolution.kind === 'pending') {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
state.requestedFrameDetached = false;
|
|
44
|
+
if (state.activeFrameId === resolution.frameId) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return activateFrameTarget(state, resolution.frameId, onTargetChanged);
|
|
48
|
+
};
|
|
49
|
+
export const refreshExtensionFrameTree = async (session, state, refreshFrameTitle) => {
|
|
50
|
+
const frameTree = (await session.handle.sendAndWait('Page.getFrameTree'));
|
|
51
|
+
collectFrameTree(frameTree.frameTree, state);
|
|
52
|
+
await Promise.all([...state.executionContexts.keys()].map((frameId) => refreshFrameTitle(frameId)));
|
|
53
|
+
};
|
|
54
|
+
export const removeExtensionFrame = (state, frameId) => {
|
|
55
|
+
const childIds = [...state.frames.values()].filter((frame) => frame.parentFrameId === frameId).map((frame) => frame.frameId);
|
|
56
|
+
for (const childId of childIds) {
|
|
57
|
+
removeExtensionFrame(state, childId);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Keep the user's requested iframe selection across reload/navigation detaches.
|
|
61
|
+
* Frame ids are ephemeral, so the stored frame hint lets selection survive a fresh id after reload.
|
|
62
|
+
*/
|
|
63
|
+
if (state.activeFrameId === frameId) {
|
|
64
|
+
state.requestedFrameDetached = state.requestedFrameId === frameId;
|
|
65
|
+
state.activeFrameId = null;
|
|
66
|
+
state.activeAttachedAt = null;
|
|
67
|
+
}
|
|
68
|
+
state.frames.delete(frameId);
|
|
69
|
+
state.executionContexts.delete(frameId);
|
|
70
|
+
state.pendingTitleLoads.delete(frameId);
|
|
71
|
+
};
|
|
72
|
+
export const refreshExtensionFrameTitle = async (session, state, frameId, onActiveFrameUpdated, contextId) => {
|
|
73
|
+
if (frameId === state.topFrameId || state.pendingTitleLoads.has(frameId)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const executionContextId = contextId ?? state.executionContexts.get(frameId);
|
|
77
|
+
if (executionContextId == null) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const frame = state.frames.get(frameId);
|
|
81
|
+
if (!frame) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
state.pendingTitleLoads.add(frameId);
|
|
85
|
+
try {
|
|
86
|
+
const evaluated = (await session.handle.sendAndWait('Runtime.evaluate', {
|
|
87
|
+
expression: 'document.title',
|
|
88
|
+
contextId: executionContextId,
|
|
89
|
+
returnByValue: true,
|
|
90
|
+
silent: true,
|
|
91
|
+
}, frame.sessionId ? { sessionId: frame.sessionId } : undefined));
|
|
92
|
+
const title = typeof evaluated.result?.value === 'string' ? evaluated.result.value.trim() : '';
|
|
93
|
+
const latestFrame = state.frames.get(frameId);
|
|
94
|
+
if (!latestFrame) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
latestFrame.title = title || null;
|
|
98
|
+
if (state.activeFrameId === frameId) {
|
|
99
|
+
onActiveFrameUpdated();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Ignore transient frame-title lookup failures during navigation/bootstrap.
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
state.pendingTitleLoads.delete(frameId);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const activatePageTarget = (state, onTargetChanged) => {
|
|
110
|
+
if (state.activeFrameId == null) {
|
|
111
|
+
if (state.activeAttachedAt == null) {
|
|
112
|
+
state.activeAttachedAt = Date.now();
|
|
113
|
+
onTargetChanged();
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
state.activeFrameId = null;
|
|
119
|
+
state.activeAttachedAt = Date.now();
|
|
120
|
+
onTargetChanged();
|
|
121
|
+
return true;
|
|
122
|
+
};
|
|
123
|
+
const activateFrameTarget = (state, frameId, onTargetChanged) => {
|
|
124
|
+
state.activeFrameId = frameId;
|
|
125
|
+
state.activeAttachedAt = Date.now();
|
|
126
|
+
onTargetChanged();
|
|
127
|
+
return true;
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=extension-frame-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-frame-runtime.js","sourceRoot":"","sources":["../../src/sources/extension-frame-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ExtensionSession } from '../native-messaging/session-manager.js';
|
|
2
|
+
import type { CdpSourceEvents } from './types.js';
|
|
3
|
+
import { type ExtensionFrameState } from './extension-frame-state.js';
|
|
4
|
+
type RegisterExtensionSessionEventsOptions = {
|
|
5
|
+
session: ExtensionSession;
|
|
6
|
+
events: CdpSourceEvents;
|
|
7
|
+
ignoreMatcher?: ((url: string) => boolean) | null;
|
|
8
|
+
stripUrlPrefixes?: string[];
|
|
9
|
+
getOrCreateFrameState: (tabId: number) => ExtensionFrameState;
|
|
10
|
+
reconcileTargetSelection: (session: ExtensionSession) => boolean;
|
|
11
|
+
removeFrame: (tabId: number, frameId: string) => void;
|
|
12
|
+
refreshFrameTitle: (session: ExtensionSession, frameId: string, contextId?: number) => Promise<void>;
|
|
13
|
+
emitTargetChanged: (session: ExtensionSession) => void;
|
|
14
|
+
setCurrentSession: (session: ExtensionSession) => void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Subscribe to extension-backed CDP events and funnel them back through the shared frame-state helpers.
|
|
18
|
+
*/
|
|
19
|
+
export declare const registerExtensionSessionEventHandlers: ({ session, events, ignoreMatcher, stripUrlPrefixes, getOrCreateFrameState, reconcileTargetSelection, removeFrame, refreshFrameTitle, emitTargetChanged, setCurrentSession, }: RegisterExtensionSessionEventsOptions) => void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=extension-session-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-session-events.d.ts","sourceRoot":"","sources":["../../src/sources/extension-session-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAqC,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAGxG,KAAK,qCAAqC,GAAG;IAC5C,OAAO,EAAE,gBAAgB,CAAA;IACzB,MAAM,EAAE,eAAe,CAAA;IACvB,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAA;IACjD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,mBAAmB,CAAA;IAC7D,wBAAwB,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAA;IAChE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACrD,iBAAiB,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpG,iBAAiB,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACtD,iBAAiB,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAA;CACtD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qCAAqC,GAAI,8KAWnD,qCAAqC,KAAG,IA2G1C,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { parseExecutionContext, parseFrame } from './extension-frame-state.js';
|
|
2
|
+
import { toConsoleEvent, toExceptionEvent } from './extension-log-events.js';
|
|
3
|
+
/**
|
|
4
|
+
* Subscribe to extension-backed CDP events and funnel them back through the shared frame-state helpers.
|
|
5
|
+
*/
|
|
6
|
+
export const registerExtensionSessionEventHandlers = ({ session, events, ignoreMatcher, stripUrlPrefixes, getOrCreateFrameState, reconcileTargetSelection, removeFrame, refreshFrameTitle, emitTargetChanged, setCurrentSession, }) => {
|
|
7
|
+
session.handle.onEvent('Runtime.executionContextCreated', (params, meta) => {
|
|
8
|
+
const context = parseExecutionContext(params);
|
|
9
|
+
if (!context?.isDefault || !context.frameId) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const state = getOrCreateFrameState(session.tabId);
|
|
13
|
+
state.executionContexts.set(context.frameId, context.id);
|
|
14
|
+
const frame = state.frames.get(context.frameId);
|
|
15
|
+
if (frame) {
|
|
16
|
+
frame.sessionId = meta.sessionId ?? null;
|
|
17
|
+
}
|
|
18
|
+
void refreshFrameTitle(session, context.frameId, context.id);
|
|
19
|
+
reconcileTargetSelection(session);
|
|
20
|
+
});
|
|
21
|
+
session.handle.onEvent('Runtime.executionContextsCleared', () => {
|
|
22
|
+
const state = getOrCreateFrameState(session.tabId);
|
|
23
|
+
state.executionContexts.clear();
|
|
24
|
+
state.pendingTitleLoads.clear();
|
|
25
|
+
});
|
|
26
|
+
session.handle.onEvent('Runtime.executionContextDestroyed', (params) => {
|
|
27
|
+
const record = params;
|
|
28
|
+
if (record.executionContextId == null) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const state = getOrCreateFrameState(session.tabId);
|
|
32
|
+
for (const [frameId, contextId] of state.executionContexts.entries()) {
|
|
33
|
+
if (contextId === record.executionContextId) {
|
|
34
|
+
state.executionContexts.delete(frameId);
|
|
35
|
+
state.pendingTitleLoads.delete(frameId);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
session.handle.onEvent('Page.frameNavigated', (params, meta) => {
|
|
40
|
+
const frame = parseFrame(params);
|
|
41
|
+
if (!frame) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const state = getOrCreateFrameState(session.tabId);
|
|
45
|
+
state.frames.set(frame.frameId, frame);
|
|
46
|
+
frame.sessionId = meta.sessionId ?? null;
|
|
47
|
+
if (!frame.parentFrameId) {
|
|
48
|
+
if (!meta.sessionId) {
|
|
49
|
+
state.topFrameId = frame.frameId;
|
|
50
|
+
session.url = frame.url;
|
|
51
|
+
}
|
|
52
|
+
else if (state.topFrameId == null) {
|
|
53
|
+
state.topFrameId = frame.parentFrameId;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (state.executionContexts.has(frame.frameId)) {
|
|
57
|
+
void refreshFrameTitle(session, frame.frameId);
|
|
58
|
+
}
|
|
59
|
+
setCurrentSession(session);
|
|
60
|
+
if (!frame.parentFrameId && !meta.sessionId) {
|
|
61
|
+
events.onPageNavigation?.({ url: frame.url, title: session.title ?? null });
|
|
62
|
+
}
|
|
63
|
+
if (reconcileTargetSelection(session)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if ((!frame.parentFrameId && state.activeFrameId == null) || state.activeFrameId === frame.frameId) {
|
|
67
|
+
emitTargetChanged(session);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
session.handle.onEvent('Page.frameAttached', (params, meta) => {
|
|
71
|
+
const record = params;
|
|
72
|
+
if (!record.frameId) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const state = getOrCreateFrameState(session.tabId);
|
|
76
|
+
state.frames.set(record.frameId, {
|
|
77
|
+
frameId: record.frameId,
|
|
78
|
+
parentFrameId: record.parentFrameId ?? state.topFrameId ?? null,
|
|
79
|
+
url: '',
|
|
80
|
+
title: null,
|
|
81
|
+
sessionId: meta.sessionId ?? null,
|
|
82
|
+
});
|
|
83
|
+
reconcileTargetSelection(session);
|
|
84
|
+
});
|
|
85
|
+
session.handle.onEvent('Page.frameDetached', (params) => {
|
|
86
|
+
const record = params;
|
|
87
|
+
if (!record.frameId) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
removeFrame(session.tabId, record.frameId);
|
|
91
|
+
reconcileTargetSelection(session);
|
|
92
|
+
});
|
|
93
|
+
session.handle.onEvent('Page.domContentEventFired', () => {
|
|
94
|
+
events.onPageLoad?.();
|
|
95
|
+
});
|
|
96
|
+
session.handle.onEvent('Runtime.consoleAPICalled', (params) => {
|
|
97
|
+
events.onLog(toConsoleEvent(params, session, { ignoreMatcher, stripUrlPrefixes }));
|
|
98
|
+
});
|
|
99
|
+
session.handle.onEvent('Runtime.exceptionThrown', (params) => {
|
|
100
|
+
events.onLog(toExceptionEvent(params, session, { ignoreMatcher, stripUrlPrefixes }));
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=extension-session-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-session-events.js","sourceRoot":"","sources":["../../src/sources/extension-session-events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAA4B,MAAM,4BAA4B,CAAA;AACxG,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAe5E;;GAEG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,EACrD,OAAO,EACP,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GACsB,EAAQ,EAAE;IACjD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QAC1E,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7C,OAAM;QACP,CAAC;QACD,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClD,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;QACxD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/C,IAAI,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAA;QACzC,CAAC;QACD,KAAK,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;QAC5D,wBAAwB,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC/D,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClD,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;QAC/B,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,mCAAmC,EAAE,CAAC,MAAM,EAAE,EAAE;QACtE,MAAM,MAAM,GAAG,MAAyC,CAAA;QACxD,IAAI,MAAM,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;YACvC,OAAM;QACP,CAAC;QAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClD,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;YACtE,IAAI,SAAS,KAAK,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC7C,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBACvC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACxC,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAM;QACP,CAAC;QAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACtC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAA;QACxC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAA;gBAChC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;YACxB,CAAC;iBAAM,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBACrC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,CAAA;YACvC,CAAC;QACF,CAAC;aAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,KAAK,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAC/C,CAAC;QACD,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAE1B,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAA;QAC5E,CAAC;QAED,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAM;QACP,CAAC;QAED,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YACpG,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC3B,CAAC;IACF,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAsD,CAAA;QACrE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,OAAM;QACP,CAAC;QACD,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI;YAC/D,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;SACjC,CAAC,CAAA;QACF,wBAAwB,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,MAA8B,CAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,OAAM;QACP,CAAC;QACD,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC1C,wBAAwB,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC5D,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;IACrF,CAAC,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extension source for CDP access via Chrome extension Native Messaging.
|
|
3
|
-
* Wraps SessionManager and provides a unified source interface.
|
|
4
|
-
*/
|
|
5
1
|
import type { CdpSourceHandle, CdpSourceBaseOptions } from './types.js';
|
|
6
2
|
export type ExtensionSourceOptions = CdpSourceBaseOptions;
|
|
7
3
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-source.d.ts","sourceRoot":"","sources":["../../src/sources/extension-source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension-source.d.ts","sourceRoot":"","sources":["../../src/sources/extension-source.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAmB,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAuBxF,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAA;AAEzD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,sBAAsB,KAAG,eAiVvE,CAAA"}
|