@vforsh/argus-watcher 0.1.12 → 0.1.14
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/keyboard.d.ts +14 -1
- package/dist/cdp/keyboard.d.ts.map +1 -1
- package/dist/cdp/keyboard.js +77 -27
- package/dist/cdp/keyboard.js.map +1 -1
- package/dist/cdp/mouse.d.ts +19 -3
- package/dist/cdp/mouse.d.ts.map +1 -1
- package/dist/cdp/mouse.js +57 -9
- package/dist/cdp/mouse.js.map +1 -1
- package/dist/cdp/pageIndicator.d.ts +5 -0
- package/dist/cdp/pageIndicator.d.ts.map +1 -1
- package/dist/cdp/pageIndicator.js +21 -5
- package/dist/cdp/pageIndicator.js.map +1 -1
- package/dist/cdp/pageIndicatorScript.d.ts +4 -3
- package/dist/cdp/pageIndicatorScript.d.ts.map +1 -1
- package/dist/cdp/pageIndicatorScript.js +61 -7
- package/dist/cdp/pageIndicatorScript.js.map +1 -1
- package/dist/cdp/recording.d.ts +15 -0
- package/dist/cdp/recording.d.ts.map +1 -0
- package/dist/cdp/recording.js +389 -0
- package/dist/cdp/recording.js.map +1 -0
- package/dist/cdp/screenshot.d.ts.map +1 -1
- package/dist/cdp/screenshot.js +2 -133
- package/dist/cdp/screenshot.js.map +1 -1
- package/dist/cdp/visualCapture.d.ts +38 -0
- package/dist/cdp/visualCapture.d.ts.map +1 -0
- package/dist/cdp/visualCapture.js +156 -0
- package/dist/cdp/visualCapture.js.map +1 -0
- package/dist/events.d.ts +1 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/http/routes/getExtensionDiagnostics.d.ts +2 -0
- package/dist/http/routes/getExtensionDiagnostics.d.ts.map +1 -0
- package/dist/http/routes/getExtensionDiagnostics.js +16 -0
- package/dist/http/routes/getExtensionDiagnostics.js.map +1 -0
- package/dist/http/routes/index.d.ts.map +1 -1
- package/dist/http/routes/index.js +6 -0
- package/dist/http/routes/index.js.map +1 -1
- package/dist/http/routes/netMock.js +3 -0
- package/dist/http/routes/netMock.js.map +1 -1
- package/dist/http/routes/postAttach.d.ts.map +1 -1
- package/dist/http/routes/postAttach.js +6 -3
- package/dist/http/routes/postAttach.js.map +1 -1
- package/dist/http/routes/postDetach.d.ts.map +1 -1
- package/dist/http/routes/postDetach.js +6 -3
- package/dist/http/routes/postDetach.js.map +1 -1
- package/dist/http/routes/postDomClick.d.ts.map +1 -1
- package/dist/http/routes/postDomClick.js +12 -20
- package/dist/http/routes/postDomClick.js.map +1 -1
- package/dist/http/routes/postDomDrag.d.ts +2 -0
- package/dist/http/routes/postDomDrag.d.ts.map +1 -0
- package/dist/http/routes/postDomDrag.js +54 -0
- package/dist/http/routes/postDomDrag.js.map +1 -0
- package/dist/http/routes/postDomKeydown.d.ts.map +1 -1
- package/dist/http/routes/postDomKeydown.js +22 -3
- package/dist/http/routes/postDomKeydown.js.map +1 -1
- package/dist/http/routes/postRecord.d.ts +3 -0
- package/dist/http/routes/postRecord.d.ts.map +1 -0
- package/dist/http/routes/postRecord.js +88 -0
- package/dist/http/routes/postRecord.js.map +1 -0
- package/dist/http/server.d.ts +3 -1
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js.map +1 -1
- package/dist/native-messaging/control-session-manager.d.ts +24 -4
- package/dist/native-messaging/control-session-manager.d.ts.map +1 -1
- package/dist/native-messaging/control-session-manager.js +69 -23
- package/dist/native-messaging/control-session-manager.js.map +1 -1
- package/dist/native-messaging/types.d.ts +62 -3
- package/dist/native-messaging/types.d.ts.map +1 -1
- package/dist/net/NetMockController.d.ts +6 -4
- package/dist/net/NetMockController.d.ts.map +1 -1
- package/dist/net/NetMockController.js +37 -100
- package/dist/net/NetMockController.js.map +1 -1
- package/dist/net/NetMockInterception.d.ts +45 -0
- package/dist/net/NetMockInterception.d.ts.map +1 -0
- package/dist/net/NetMockInterception.js +144 -0
- package/dist/net/NetMockInterception.js.map +1 -0
- package/dist/runtime/watcherServices.d.ts +3 -0
- package/dist/runtime/watcherServices.d.ts.map +1 -1
- package/dist/runtime/watcherServices.js +12 -0
- package/dist/runtime/watcherServices.js.map +1 -1
- package/dist/sources/extension-control-source.d.ts.map +1 -1
- package/dist/sources/extension-control-source.js +25 -4
- package/dist/sources/extension-control-source.js.map +1 -1
- package/dist/sources/extension-source.d.ts.map +1 -1
- package/dist/sources/extension-source.js +16 -3
- package/dist/sources/extension-source.js.map +1 -1
- package/dist/sources/types.d.ts +7 -3
- package/dist/sources/types.d.ts.map +1 -1
- package/dist/startWatcherRuntime.d.ts.map +1 -1
- package/dist/startWatcherRuntime.js +21 -3
- package/dist/startWatcherRuntime.js.map +1 -1
- package/package.json +1 -1
|
@@ -42,8 +42,24 @@ export type CookieQueryResponseMessage = {
|
|
|
42
42
|
};
|
|
43
43
|
export type ListTabsResponseMessage = {
|
|
44
44
|
type: 'list_tabs_response';
|
|
45
|
+
requestId: number;
|
|
45
46
|
tabs: TabInfo[];
|
|
46
47
|
};
|
|
48
|
+
export type TabActionResponseMessage = {
|
|
49
|
+
type: 'tab_action_response';
|
|
50
|
+
requestId: number;
|
|
51
|
+
ok: boolean;
|
|
52
|
+
tab?: TabInfo;
|
|
53
|
+
watcherId?: string;
|
|
54
|
+
error?: {
|
|
55
|
+
message: string;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export type ControlStatusResponseMessage = {
|
|
59
|
+
type: 'control_status_response';
|
|
60
|
+
requestId: number;
|
|
61
|
+
diagnostics: ControlDiagnostics;
|
|
62
|
+
};
|
|
47
63
|
export type TargetSelectedMessage = {
|
|
48
64
|
type: 'target_selected';
|
|
49
65
|
tabId: number;
|
|
@@ -67,6 +83,10 @@ export type TargetInfoMessage = {
|
|
|
67
83
|
attachedAt: number;
|
|
68
84
|
targetReady?: boolean | null;
|
|
69
85
|
};
|
|
86
|
+
export type InitTabWatcherMessage = {
|
|
87
|
+
type: 'init_tab_watcher';
|
|
88
|
+
watcherId?: string;
|
|
89
|
+
};
|
|
70
90
|
export type TabInfo = {
|
|
71
91
|
tabId: number;
|
|
72
92
|
url: string;
|
|
@@ -75,6 +95,37 @@ export type TabInfo = {
|
|
|
75
95
|
attached: boolean;
|
|
76
96
|
watcherId?: string;
|
|
77
97
|
};
|
|
98
|
+
export type ControlDiagnostics = {
|
|
99
|
+
extensionId: string | null;
|
|
100
|
+
extensionVersion: string | null;
|
|
101
|
+
control: {
|
|
102
|
+
connected: boolean;
|
|
103
|
+
watcherId: string | null;
|
|
104
|
+
watcherHost: string | null;
|
|
105
|
+
watcherPort: number | null;
|
|
106
|
+
pid: number | null;
|
|
107
|
+
lastMessageAt: number | null;
|
|
108
|
+
};
|
|
109
|
+
tabWatchers: Array<{
|
|
110
|
+
tabId: number;
|
|
111
|
+
connected: boolean;
|
|
112
|
+
watcherId: string | null;
|
|
113
|
+
watcherHost: string | null;
|
|
114
|
+
watcherPort: number | null;
|
|
115
|
+
pid: number | null;
|
|
116
|
+
targetId: string | null;
|
|
117
|
+
targetTitle: string | null;
|
|
118
|
+
targetUrl: string | null;
|
|
119
|
+
targetReady: boolean | null;
|
|
120
|
+
lastMessageAt: number | null;
|
|
121
|
+
}>;
|
|
122
|
+
recentEvents: Array<{
|
|
123
|
+
ts: number;
|
|
124
|
+
level: 'info' | 'error';
|
|
125
|
+
source: 'popup' | 'bridge' | 'debugger';
|
|
126
|
+
message: string;
|
|
127
|
+
}>;
|
|
128
|
+
};
|
|
78
129
|
export type FrameSnapshot = {
|
|
79
130
|
frameId: string;
|
|
80
131
|
parentFrameId: string | null;
|
|
@@ -94,18 +145,21 @@ export type NativeCookie = {
|
|
|
94
145
|
sameSite: string | null;
|
|
95
146
|
};
|
|
96
147
|
export type ExtensionToHost = TabAttachedMessage | TabDetachedMessage | CdpEventMessage | CdpResponseMessage | CookieQueryResponseMessage | TargetSelectedMessage;
|
|
97
|
-
export type ExtensionToControlHost = ListTabsResponseMessage;
|
|
98
|
-
export type ExtensionToTabHost = ExtensionToHost;
|
|
148
|
+
export type ExtensionToControlHost = ListTabsResponseMessage | TabActionResponseMessage | ControlStatusResponseMessage;
|
|
149
|
+
export type ExtensionToTabHost = ExtensionToHost | InitTabWatcherMessage;
|
|
99
150
|
export type AttachTabMessage = {
|
|
100
151
|
type: 'attach_tab';
|
|
101
152
|
tabId: number;
|
|
102
153
|
};
|
|
103
154
|
export type AttachTabWatcherMessage = {
|
|
104
155
|
type: 'attach_tab_watcher';
|
|
156
|
+
requestId: number;
|
|
105
157
|
tabId: number;
|
|
158
|
+
watcherId?: string;
|
|
106
159
|
};
|
|
107
160
|
export type DetachTabWatcherMessage = {
|
|
108
161
|
type: 'detach_tab_watcher';
|
|
162
|
+
requestId: number;
|
|
109
163
|
tabId: number;
|
|
110
164
|
};
|
|
111
165
|
export type DetachTabMessage = {
|
|
@@ -122,11 +176,16 @@ export type CdpCommandMessage = {
|
|
|
122
176
|
};
|
|
123
177
|
export type ListTabsMessage = {
|
|
124
178
|
type: 'list_tabs';
|
|
179
|
+
requestId: number;
|
|
125
180
|
filter?: {
|
|
126
181
|
url?: string;
|
|
127
182
|
title?: string;
|
|
128
183
|
};
|
|
129
184
|
};
|
|
185
|
+
export type ControlStatusMessage = {
|
|
186
|
+
type: 'control_status';
|
|
187
|
+
requestId: number;
|
|
188
|
+
};
|
|
130
189
|
export type EnableDomainMessage = {
|
|
131
190
|
type: 'enable_domain';
|
|
132
191
|
tabId: number;
|
|
@@ -140,7 +199,7 @@ export type CookieQueryMessage = {
|
|
|
140
199
|
url?: string;
|
|
141
200
|
};
|
|
142
201
|
export type HostToExtension = AttachTabMessage | DetachTabMessage | CdpCommandMessage | CookieQueryMessage | EnableDomainMessage | HostInfoMessage | HostReadyMessage | TargetInfoMessage;
|
|
143
|
-
export type ControlHostToExtension = AttachTabWatcherMessage | DetachTabWatcherMessage | ListTabsMessage | HostInfoMessage | HostReadyMessage;
|
|
202
|
+
export type ControlHostToExtension = AttachTabWatcherMessage | DetachTabWatcherMessage | ListTabsMessage | ControlStatusMessage | HostInfoMessage | HostReadyMessage;
|
|
144
203
|
export type TabHostToExtension = HostToExtension;
|
|
145
204
|
export type PendingRequest = {
|
|
146
205
|
requestId: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native-messaging/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native-messaging/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { NetMockAddRequest, NetMockAddResponse, NetMockClearResponse, NetMockRemoveResponse, NetMockStatusResponse } from '@vforsh/argus-core';
|
|
2
|
-
import type
|
|
2
|
+
import { type NetMockInterceptionBinding } from './NetMockInterception.js';
|
|
3
3
|
/**
|
|
4
4
|
* Watcher-side network mocking via the CDP `Fetch` domain.
|
|
5
5
|
*
|
|
@@ -9,8 +9,8 @@ import type { CdpSessionHandle } from '../cdp/connection.js';
|
|
|
9
9
|
* rule is removed, so an idle watcher adds zero request latency.
|
|
10
10
|
*/
|
|
11
11
|
export type NetMockController = {
|
|
12
|
-
/** Subscribe to `Fetch.requestPaused`
|
|
13
|
-
bind: (
|
|
12
|
+
/** Subscribe to `Fetch.requestPaused` and provide page/selected target routing. Call once at startup. */
|
|
13
|
+
bind: (binding: NetMockInterceptionBinding) => void;
|
|
14
14
|
getStatus: (ctx: {
|
|
15
15
|
attached: boolean;
|
|
16
16
|
}) => NetMockStatusResponse;
|
|
@@ -18,7 +18,9 @@ export type NetMockController = {
|
|
|
18
18
|
removeRule: (id: number) => Promise<NetMockRemoveResponse>;
|
|
19
19
|
clearRules: () => Promise<NetMockClearResponse>;
|
|
20
20
|
/** Re-arm interception on a freshly attached target when rules exist. */
|
|
21
|
-
onAttach: (
|
|
21
|
+
onAttach: () => Promise<void>;
|
|
22
|
+
/** Move selected-scope interception when iframe selection changes. */
|
|
23
|
+
onTargetChanged: () => Promise<void>;
|
|
22
24
|
/** Mark interception as inactive after the target detached. */
|
|
23
25
|
onDetach: () => void;
|
|
24
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetMockController.d.ts","sourceRoot":"","sources":["../../src/net/NetMockController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EAEpB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"NetMockController.d.ts","sourceRoot":"","sources":["../../src/net/NetMockController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EAEpB,qBAAqB,EAGrB,qBAAqB,EACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAuB,KAAK,0BAA0B,EAA6B,MAAM,0BAA0B,CAAA;AAS1H;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,yGAAyG;IACzG,IAAI,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,CAAA;IACnD,SAAS,EAAE,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,KAAK,qBAAqB,CAAA;IAChE,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACrF,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC1D,UAAU,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC/C,yEAAyE;IACzE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,sEAAsE;IACtE,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,uBAAuB,QAAO,iBA2J1C,CAAA"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
+
import { NetMockInterception } from './NetMockInterception.js';
|
|
1
2
|
export const createNetMockController = () => {
|
|
2
|
-
let session = null;
|
|
3
|
-
let bound = false;
|
|
4
|
-
let enabled = false;
|
|
5
3
|
let lastError = null;
|
|
6
4
|
let nextRuleId = 1;
|
|
7
5
|
const rules = [];
|
|
8
|
-
const hasActiveRules = () => rules.some(isRuleActive);
|
|
9
6
|
const recordError = (error) => {
|
|
10
7
|
lastError = { message: error instanceof Error ? error.message : String(error) };
|
|
11
8
|
const code = error?.code;
|
|
@@ -13,59 +10,16 @@ export const createNetMockController = () => {
|
|
|
13
10
|
lastError.code = code;
|
|
14
11
|
}
|
|
15
12
|
};
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
try {
|
|
22
|
-
await session.sendAndWait('Fetch.enable', { patterns: [{ urlPattern: '*', requestStage: 'Request' }] });
|
|
23
|
-
enabled = true;
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
enabled = false;
|
|
28
|
-
recordError(error);
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
const disableInterception = async () => {
|
|
33
|
-
if (!enabled) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
enabled = false;
|
|
37
|
-
if (!session || !session.isAttached()) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
await session.sendAndWait('Fetch.disable');
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
recordError(error);
|
|
45
|
-
}
|
|
13
|
+
const interception = new NetMockInterception((request) => void handleRequestPaused(request), recordError);
|
|
14
|
+
const bind = (binding) => {
|
|
15
|
+
interception.bind(binding);
|
|
16
|
+
void interception.reconcile(getActiveScopes(rules));
|
|
46
17
|
};
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
bound = true;
|
|
53
|
-
nextSession.onEvent('Fetch.requestPaused', (params) => {
|
|
54
|
-
void handleRequestPaused(params);
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
const handleRequestPaused = async (params) => {
|
|
58
|
-
const paused = params;
|
|
59
|
-
const requestId = paused?.requestId;
|
|
60
|
-
if (typeof requestId !== 'string' || requestId === '') {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const url = paused.request?.url ?? '';
|
|
64
|
-
const method = paused.request?.method ?? 'GET';
|
|
65
|
-
const resourceType = paused.resourceType ?? '';
|
|
66
|
-
const rule = rules.find((candidate) => ruleMatches(candidate, url, method, resourceType));
|
|
18
|
+
const handleRequestPaused = async (paused) => {
|
|
19
|
+
const rule = rules.find((candidate) => interception.matchesScope(candidate.scope ?? 'page', paused) &&
|
|
20
|
+
ruleMatches(candidate, paused.url, paused.method, paused.resourceType));
|
|
67
21
|
if (!rule) {
|
|
68
|
-
await sendAction('Fetch.continueRequest', { requestId });
|
|
22
|
+
await sendAction(paused, 'Fetch.continueRequest', { requestId: paused.requestId });
|
|
69
23
|
return;
|
|
70
24
|
}
|
|
71
25
|
rule.hits += 1;
|
|
@@ -74,60 +28,47 @@ export const createNetMockController = () => {
|
|
|
74
28
|
}
|
|
75
29
|
const action = rule.action;
|
|
76
30
|
if (action.kind === 'block') {
|
|
77
|
-
await sendAction('Fetch.failRequest', { requestId, errorReason: 'BlockedByClient' });
|
|
31
|
+
await sendAction(paused, 'Fetch.failRequest', { requestId: paused.requestId, errorReason: 'BlockedByClient' });
|
|
78
32
|
return;
|
|
79
33
|
}
|
|
80
34
|
if (action.kind === 'fail') {
|
|
81
|
-
await sendAction('Fetch.failRequest', { requestId, errorReason: action.reason });
|
|
35
|
+
await sendAction(paused, 'Fetch.failRequest', { requestId: paused.requestId, errorReason: action.reason });
|
|
82
36
|
return;
|
|
83
37
|
}
|
|
84
38
|
if (action.kind === 'fulfill') {
|
|
85
|
-
const fulfillParams = { requestId, responseCode: action.status };
|
|
39
|
+
const fulfillParams = { requestId: paused.requestId, responseCode: action.status };
|
|
86
40
|
if (action.headers && action.headers.length > 0) {
|
|
87
41
|
fulfillParams.responseHeaders = action.headers;
|
|
88
42
|
}
|
|
89
43
|
if (action.bodyBase64 != null) {
|
|
90
44
|
fulfillParams.body = action.bodyBase64;
|
|
91
45
|
}
|
|
92
|
-
await sendAction('Fetch.fulfillRequest', fulfillParams);
|
|
46
|
+
await sendAction(paused, 'Fetch.fulfillRequest', fulfillParams);
|
|
93
47
|
return;
|
|
94
48
|
}
|
|
95
49
|
// action.kind === 'continue'
|
|
96
|
-
const continueParams = { requestId };
|
|
50
|
+
const continueParams = { requestId: paused.requestId };
|
|
97
51
|
if (action.rewriteHost) {
|
|
98
|
-
const rewritten = rewriteUrlHost(url, action.rewriteHost);
|
|
52
|
+
const rewritten = rewriteUrlHost(paused.url, action.rewriteHost);
|
|
99
53
|
if (rewritten) {
|
|
100
54
|
continueParams.url = rewritten;
|
|
101
55
|
}
|
|
102
56
|
}
|
|
103
57
|
if (action.setHeaders && action.setHeaders.length > 0) {
|
|
104
|
-
continueParams.headers = mergeHeaders(paused.
|
|
58
|
+
continueParams.headers = mergeHeaders(paused.headers, action.setHeaders);
|
|
105
59
|
}
|
|
106
|
-
await sendAction('Fetch.continueRequest', continueParams);
|
|
60
|
+
await sendAction(paused, 'Fetch.continueRequest', continueParams);
|
|
107
61
|
};
|
|
108
62
|
/**
|
|
109
63
|
* Resolve a paused request. Failures are expected when the request was
|
|
110
64
|
* canceled mid-flight (navigation, tab close) — those are swallowed so a
|
|
111
65
|
* noisy page cannot poison `lastError`.
|
|
112
66
|
*/
|
|
113
|
-
const sendAction = async (cdpMethod, params) =>
|
|
114
|
-
if (!session || !session.isAttached()) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
try {
|
|
118
|
-
await session.sendAndWait(cdpMethod, params);
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
if (isBenignInterceptionError(error)) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
recordError(error);
|
|
125
|
-
}
|
|
126
|
-
};
|
|
67
|
+
const sendAction = async (request, cdpMethod, params) => interception.sendRequestCommand(request, cdpMethod, params);
|
|
127
68
|
const getStatus = (ctx) => ({
|
|
128
69
|
ok: true,
|
|
129
70
|
attached: ctx.attached,
|
|
130
|
-
enabled,
|
|
71
|
+
enabled: interception.enabled,
|
|
131
72
|
rules: rules.map(toPublicRule),
|
|
132
73
|
lastError,
|
|
133
74
|
});
|
|
@@ -135,6 +76,7 @@ export const createNetMockController = () => {
|
|
|
135
76
|
lastError = null;
|
|
136
77
|
const rule = {
|
|
137
78
|
id: nextRuleId++,
|
|
79
|
+
scope: input.scope ?? 'page',
|
|
138
80
|
match: input.match,
|
|
139
81
|
action: input.action,
|
|
140
82
|
delayMs: input.delayMs,
|
|
@@ -147,7 +89,7 @@ export const createNetMockController = () => {
|
|
|
147
89
|
if (!attached) {
|
|
148
90
|
return { ok: true, attached: false, enabled: false, rule: toPublicRule(rule) };
|
|
149
91
|
}
|
|
150
|
-
const applied =
|
|
92
|
+
const applied = await interception.reconcile(getActiveScopes(rules));
|
|
151
93
|
return {
|
|
152
94
|
ok: true,
|
|
153
95
|
attached: true,
|
|
@@ -163,32 +105,34 @@ export const createNetMockController = () => {
|
|
|
163
105
|
rules.splice(index, 1);
|
|
164
106
|
}
|
|
165
107
|
if (rules.length === 0) {
|
|
166
|
-
await
|
|
108
|
+
await interception.reconcile(new Set());
|
|
167
109
|
}
|
|
168
|
-
|
|
110
|
+
else {
|
|
111
|
+
await interception.reconcile(getActiveScopes(rules));
|
|
112
|
+
}
|
|
113
|
+
return { ok: true, removed, enabled: interception.enabled };
|
|
169
114
|
};
|
|
170
115
|
const clearRules = async () => {
|
|
171
116
|
const removed = rules.length;
|
|
172
117
|
rules.length = 0;
|
|
173
|
-
await
|
|
174
|
-
return { ok: true, removed, enabled };
|
|
118
|
+
await interception.reconcile(new Set());
|
|
119
|
+
return { ok: true, removed, enabled: interception.enabled };
|
|
175
120
|
};
|
|
176
|
-
const onAttach = async (
|
|
177
|
-
|
|
178
|
-
enabled = false;
|
|
179
|
-
if (!hasActiveRules()) {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
const applied = await enableInterception();
|
|
121
|
+
const onAttach = async () => {
|
|
122
|
+
const applied = await interception.reconcile(getActiveScopes(rules), true);
|
|
183
123
|
if (!applied && lastError) {
|
|
184
124
|
console.warn(`[NetMock] Failed to re-enable interception on attach: ${lastError.message}`);
|
|
185
125
|
}
|
|
186
126
|
};
|
|
127
|
+
const onTargetChanged = async () => {
|
|
128
|
+
await interception.reconcile(getActiveScopes(rules));
|
|
129
|
+
};
|
|
187
130
|
const onDetach = () => {
|
|
188
|
-
|
|
131
|
+
interception.onDetach();
|
|
189
132
|
};
|
|
190
|
-
return { bind, getStatus, addRule, removeRule, clearRules, onAttach, onDetach };
|
|
133
|
+
return { bind, getStatus, addRule, removeRule, clearRules, onAttach, onTargetChanged, onDetach };
|
|
191
134
|
};
|
|
135
|
+
const getActiveScopes = (rules) => new Set(rules.filter(isRuleActive).map((rule) => rule.scope ?? 'page'));
|
|
192
136
|
const isRuleActive = (rule) => rule.times == null || rule.hits < rule.times;
|
|
193
137
|
const ruleMatches = (rule, url, method, resourceType) => {
|
|
194
138
|
if (!isRuleActive(rule)) {
|
|
@@ -243,16 +187,9 @@ const mergeHeaders = (original, overrides) => {
|
|
|
243
187
|
}
|
|
244
188
|
return [...merged.values()];
|
|
245
189
|
};
|
|
246
|
-
const isBenignInterceptionError = (error) => {
|
|
247
|
-
const code = error?.code;
|
|
248
|
-
if (code === 'cdp_not_attached') {
|
|
249
|
-
return true;
|
|
250
|
-
}
|
|
251
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
252
|
-
return message.includes('Invalid InterceptionId') || message.includes('Inspected target navigated or closed');
|
|
253
|
-
};
|
|
254
190
|
const toPublicRule = (rule) => ({
|
|
255
191
|
id: rule.id,
|
|
192
|
+
scope: rule.scope ?? 'page',
|
|
256
193
|
match: rule.match,
|
|
257
194
|
action: rule.action,
|
|
258
195
|
delayMs: rule.delayMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetMockController.js","sourceRoot":"","sources":["../../src/net/NetMockController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NetMockController.js","sourceRoot":"","sources":["../../src/net/NetMockController.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,mBAAmB,EAA8D,MAAM,0BAA0B,CAAA;AAgC1H,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAsB,EAAE;IAC9D,IAAI,SAAS,GAAwB,IAAI,CAAA;IACzC,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,MAAM,KAAK,GAAmB,EAAE,CAAA;IAEhC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAQ,EAAE;QAC5C,SAAS,GAAG,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;QAC/E,MAAM,IAAI,GAAI,KAA4B,EAAE,IAAI,CAAA;QAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,SAAS,CAAC,IAAI,GAAG,IAAI,CAAA;QACtB,CAAC;IACF,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,mBAAmB,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAA;IAEzG,MAAM,IAAI,GAAG,CAAC,OAAmC,EAAQ,EAAE;QAC1D,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1B,KAAK,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;IACpD,CAAC,CAAA;IAED,MAAM,mBAAmB,GAAG,KAAK,EAAE,MAA4B,EAAiB,EAAE;QACjF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACtB,CAAC,SAAS,EAAE,EAAE,CACb,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,EAAE,MAAM,CAAC;YAC5D,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CACvE,CAAA;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,UAAU,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;YAClF,OAAM;QACP,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;QAEd,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,UAAU,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAA;YAC9G,OAAM;QACP,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,UAAU,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAC1G,OAAM;QACP,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,aAAa,GAA4B,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;YAC3G,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjD,aAAa,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAA;YAC/C,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBAC/B,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAA;YACvC,CAAC;YACD,MAAM,UAAU,CAAC,MAAM,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAA;YAC/D,OAAM;QACP,CAAC;QAED,6BAA6B;QAC7B,MAAM,cAAc,GAA4B,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAA;QAC/E,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YAChE,IAAI,SAAS,EAAE,CAAC;gBACf,cAAc,CAAC,GAAG,GAAG,SAAS,CAAA;YAC/B,CAAC;QACF,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,cAAc,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,UAAU,CAAC,MAAM,EAAE,uBAAuB,EAAE,cAAc,CAAC,CAAA;IAClE,CAAC,CAAA;IAED;;;;OAIG;IACH,MAAM,UAAU,GAAG,KAAK,EAAE,OAA6B,EAAE,SAAiB,EAAE,MAA+B,EAAiB,EAAE,CAC7H,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAE5D,MAAM,SAAS,GAAG,CAAC,GAA0B,EAAyB,EAAE,CAAC,CAAC;QACzE,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;QAC9B,SAAS;KACT,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,KAAK,EAAE,KAAwB,EAAE,QAAiB,EAA+B,EAAE;QAClG,SAAS,GAAG,IAAI,CAAA;QAChB,MAAM,IAAI,GAAiB;YAC1B,EAAE,EAAE,UAAU,EAAE;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,MAAM;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;SAC5C,CAAA;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAA;QAC/E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;QACpE,OAAO;YACN,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;YACxB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SACjC,CAAA;IACF,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,EAAE,EAAU,EAAkC,EAAE;QACvE,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACvD,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,CAAA;QAC1B,IAAI,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACvB,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACP,MAAM,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;QACrD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAAA;IAC5D,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,IAAmC,EAAE;QAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAA;QAC5B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAChB,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;QACvC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAAA;IAC5D,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;QAC1C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;QAC1E,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,yDAAyD,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;QAC3F,CAAC;IACF,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,KAAK,IAAmB,EAAE;QACjD,MAAM,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;IACrD,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC3B,YAAY,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC,CAAA;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA;AACjG,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,KAAqB,EAAqB,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAA;AAE7I,MAAM,YAAY,GAAG,CAAC,IAAkB,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;AAElG,MAAM,WAAW,GAAG,CAAC,IAAkB,EAAE,GAAW,EAAE,MAAc,EAAE,YAAoB,EAAW,EAAE;IACtG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAA;IACb,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QACnF,OAAO,KAAK,CAAA;IACb,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QACrG,OAAO,KAAK,CAAA;IACb,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC/B,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAU,EAAE;IACrD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAA;IACnE,MAAM,MAAM,GAAG,UAAU;SACvB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;SAC1D,IAAI,CAAC,IAAI,CAAC,CAAA;IACZ,OAAO,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,wFAAwF;AACxF,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,WAAmB,EAAiB,EAAE;IAC7E,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3B,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAA;YACnC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC9B,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACvB,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,IAAI,GAAG,WAAW,CAAA;QACvB,CAAC;QACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;IACtB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC,CAAA;AAED,2FAA2F;AAC3F,MAAM,YAAY,GAAG,CAAC,QAAgC,EAAE,SAA0B,EAAmB,EAAE;IACtG,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,IAAkB,EAAe,EAAE,CAAC,CAAC;IAC1D,EAAE,EAAE,IAAI,CAAC,EAAE;IACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;IAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,MAAM,EAAE,IAAI,CAAC,MAAM;IACnB,OAAO,EAAE,IAAI,CAAC,OAAO;IACrB,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,SAAS,EAAE,IAAI,CAAC,SAAS;CACzB,CAAC,CAAA;AAEF,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { NetMockScope } from '@vforsh/argus-core';
|
|
2
|
+
import type { CdpSessionHandle } from '../cdp/connection.js';
|
|
3
|
+
/** CDP routing information for the target currently selected by the watcher. */
|
|
4
|
+
export type NetMockSelectedTarget = {
|
|
5
|
+
frameId: string | null;
|
|
6
|
+
topFrameId: string | null;
|
|
7
|
+
sessionId: string | null;
|
|
8
|
+
};
|
|
9
|
+
/** Normalized `Fetch.requestPaused` event with the originating CDP session. */
|
|
10
|
+
export type NetMockPausedRequest = {
|
|
11
|
+
requestId: string;
|
|
12
|
+
url: string;
|
|
13
|
+
method: string;
|
|
14
|
+
resourceType: string;
|
|
15
|
+
frameId: string | null;
|
|
16
|
+
sessionId: string | null;
|
|
17
|
+
headers: Record<string, string>;
|
|
18
|
+
};
|
|
19
|
+
/** Stable CDP session and dynamic selected-target lookup used by interception. */
|
|
20
|
+
export type NetMockInterceptionBinding = {
|
|
21
|
+
/** Stable top-level session; child-target commands are routed with explicit CDP session ids. */
|
|
22
|
+
pageSession: CdpSessionHandle;
|
|
23
|
+
/** Resolves the currently selected target each time so `selected` rules follow iframe selection. */
|
|
24
|
+
getSelectedTarget: () => NetMockSelectedTarget | null;
|
|
25
|
+
};
|
|
26
|
+
/** Owns Fetch-domain lifecycle across the top-level page and the currently selected iframe target. */
|
|
27
|
+
export declare class NetMockInterception {
|
|
28
|
+
private readonly onPaused;
|
|
29
|
+
private readonly onError;
|
|
30
|
+
private binding;
|
|
31
|
+
private bound;
|
|
32
|
+
private readonly enabledTargets;
|
|
33
|
+
private reconcileTail;
|
|
34
|
+
constructor(onPaused: (request: NetMockPausedRequest) => void, onError: (error: unknown) => void);
|
|
35
|
+
bind(binding: NetMockInterceptionBinding): void;
|
|
36
|
+
get enabled(): boolean;
|
|
37
|
+
matchesScope(scope: NetMockScope, request: NetMockPausedRequest): boolean;
|
|
38
|
+
sendRequestCommand(request: NetMockPausedRequest, method: string, params: Record<string, unknown>): Promise<void>;
|
|
39
|
+
reconcile(scopes: ReadonlySet<NetMockScope>, reset?: boolean): Promise<boolean>;
|
|
40
|
+
private applyReconcile;
|
|
41
|
+
onDetach(): void;
|
|
42
|
+
private getDesiredTargets;
|
|
43
|
+
private sendCommand;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=NetMockInterception.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetMockInterception.d.ts","sourceRoot":"","sources":["../../src/net/NetMockInterception.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE1E,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG;IACnC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,+EAA+E;AAC/E,MAAM,MAAM,oBAAoB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B,CAAA;AAED,kFAAkF;AAClF,MAAM,MAAM,0BAA0B,GAAG;IACxC,gGAAgG;IAChG,WAAW,EAAE,gBAAgB,CAAA;IAC7B,oGAAoG;IACpG,iBAAiB,EAAE,MAAM,qBAAqB,GAAG,IAAI,CAAA;CACrD,CAAA;AAoBD,sGAAsG;AACtG,qBAAa,mBAAmB;IAO9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPzB,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwC;IACvE,OAAO,CAAC,aAAa,CAAmC;gBAGtC,QAAQ,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,EACjD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IAG5C,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAetD,IAAW,OAAO,IAAI,OAAO,CAE5B;IAEM,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO;IAkBnE,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvH,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;YAYtE,cAAc;IAiCrB,QAAQ,IAAI,IAAI;IAIvB,OAAO,CAAC,iBAAiB;YAeX,WAAW;CAgBzB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
const PAGE_TARGET = { key: 'page', sessionId: null };
|
|
2
|
+
/** Owns Fetch-domain lifecycle across the top-level page and the currently selected iframe target. */
|
|
3
|
+
export class NetMockInterception {
|
|
4
|
+
onPaused;
|
|
5
|
+
onError;
|
|
6
|
+
binding = null;
|
|
7
|
+
bound = false;
|
|
8
|
+
enabledTargets = new Map();
|
|
9
|
+
reconcileTail = Promise.resolve();
|
|
10
|
+
constructor(onPaused, onError) {
|
|
11
|
+
this.onPaused = onPaused;
|
|
12
|
+
this.onError = onError;
|
|
13
|
+
}
|
|
14
|
+
bind(binding) {
|
|
15
|
+
this.binding = binding;
|
|
16
|
+
if (this.bound) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
this.bound = true;
|
|
20
|
+
binding.pageSession.onEvent('Fetch.requestPaused', (params, meta) => {
|
|
21
|
+
const request = parsePausedRequest(params, meta);
|
|
22
|
+
if (request) {
|
|
23
|
+
this.onPaused(request);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
get enabled() {
|
|
28
|
+
return this.enabledTargets.size > 0;
|
|
29
|
+
}
|
|
30
|
+
matchesScope(scope, request) {
|
|
31
|
+
if (scope === 'page') {
|
|
32
|
+
return request.sessionId === null;
|
|
33
|
+
}
|
|
34
|
+
const selected = this.binding?.getSelectedTarget() ?? null;
|
|
35
|
+
if (selected?.sessionId) {
|
|
36
|
+
return request.sessionId === selected.sessionId;
|
|
37
|
+
}
|
|
38
|
+
if (request.sessionId !== null) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const selectedFrameId = selected?.frameId ?? null;
|
|
42
|
+
const selectedIsChildFrame = selectedFrameId !== null && selectedFrameId !== selected?.topFrameId;
|
|
43
|
+
return !selectedIsChildFrame || request.frameId === selectedFrameId;
|
|
44
|
+
}
|
|
45
|
+
async sendRequestCommand(request, method, params) {
|
|
46
|
+
await this.sendCommand({ key: request.sessionId ? `session:${request.sessionId}` : 'page', sessionId: request.sessionId }, method, params);
|
|
47
|
+
}
|
|
48
|
+
reconcile(scopes, reset = false) {
|
|
49
|
+
const requestedScopes = new Set(scopes);
|
|
50
|
+
const operation = this.reconcileTail.then(() => this.applyReconcile(requestedScopes, reset));
|
|
51
|
+
// Target-change events can arrive while CDP commands are in flight. Keep
|
|
52
|
+
// lifecycle mutations ordered so an older iframe cannot remain enabled.
|
|
53
|
+
this.reconcileTail = operation.then(() => undefined, () => undefined);
|
|
54
|
+
return operation;
|
|
55
|
+
}
|
|
56
|
+
async applyReconcile(scopes, reset) {
|
|
57
|
+
if (reset) {
|
|
58
|
+
// A fresh underlying attachment invalidates old session ids; there is nothing useful to disable.
|
|
59
|
+
this.enabledTargets.clear();
|
|
60
|
+
}
|
|
61
|
+
const session = this.binding?.pageSession;
|
|
62
|
+
if (!session?.isAttached()) {
|
|
63
|
+
this.enabledTargets.clear();
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
const desiredTargets = this.getDesiredTargets(scopes);
|
|
67
|
+
for (const [key, target] of this.enabledTargets) {
|
|
68
|
+
if (!desiredTargets.has(key)) {
|
|
69
|
+
await this.sendCommand(target, 'Fetch.disable');
|
|
70
|
+
this.enabledTargets.delete(key);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
for (const [key, target] of desiredTargets) {
|
|
74
|
+
if (this.enabledTargets.has(key)) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const enabled = await this.sendCommand(target, 'Fetch.enable', { patterns: [{ urlPattern: '*', requestStage: 'Request' }] });
|
|
78
|
+
if (enabled) {
|
|
79
|
+
this.enabledTargets.set(key, target);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return this.enabled;
|
|
83
|
+
}
|
|
84
|
+
onDetach() {
|
|
85
|
+
this.enabledTargets.clear();
|
|
86
|
+
}
|
|
87
|
+
getDesiredTargets(scopes) {
|
|
88
|
+
const targets = new Map();
|
|
89
|
+
if (scopes.has('page')) {
|
|
90
|
+
targets.set(PAGE_TARGET.key, PAGE_TARGET);
|
|
91
|
+
}
|
|
92
|
+
if (!scopes.has('selected')) {
|
|
93
|
+
return targets;
|
|
94
|
+
}
|
|
95
|
+
const sessionId = this.binding?.getSelectedTarget()?.sessionId ?? null;
|
|
96
|
+
const selectedTarget = sessionId ? { key: `session:${sessionId}`, sessionId } : PAGE_TARGET;
|
|
97
|
+
targets.set(selectedTarget.key, selectedTarget);
|
|
98
|
+
return targets;
|
|
99
|
+
}
|
|
100
|
+
async sendCommand(target, method, params = {}) {
|
|
101
|
+
const session = this.binding?.pageSession;
|
|
102
|
+
if (!session?.isAttached()) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
await session.sendAndWait(method, params, target.sessionId ? { sessionId: target.sessionId } : undefined);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (!isBenignInterceptionError(error)) {
|
|
111
|
+
this.onError(error);
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const parsePausedRequest = (params, meta) => {
|
|
118
|
+
const paused = params;
|
|
119
|
+
const requestId = paused?.requestId;
|
|
120
|
+
if (typeof requestId !== 'string' || requestId === '') {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
requestId,
|
|
125
|
+
url: paused.request?.url ?? '',
|
|
126
|
+
method: paused.request?.method ?? 'GET',
|
|
127
|
+
resourceType: paused.resourceType ?? '',
|
|
128
|
+
frameId: paused.frameId ?? null,
|
|
129
|
+
sessionId: meta.sessionId ?? null,
|
|
130
|
+
headers: paused.request?.headers ?? {},
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
const isBenignInterceptionError = (error) => {
|
|
134
|
+
const code = error?.code;
|
|
135
|
+
if (code === 'cdp_not_attached') {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
139
|
+
return (message.includes('Invalid InterceptionId') ||
|
|
140
|
+
message.includes('Inspected target navigated or closed') ||
|
|
141
|
+
message.includes('Session with given id not found') ||
|
|
142
|
+
message.includes('No target with given id'));
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=NetMockInterception.js.map
|