@vforsh/argus-watcher 0.1.13 → 0.1.15
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/http/routes/netMock.js +3 -0
- package/dist/http/routes/netMock.js.map +1 -1
- 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/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/startWatcherRuntime.d.ts.map +1 -1
- package/dist/startWatcherRuntime.js +14 -2
- package/dist/startWatcherRuntime.js.map +1 -1
- package/package.json +2 -2
package/dist/cdp/keyboard.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DomKeydownEvent } from '@vforsh/argus-core';
|
|
1
2
|
import type { CdpSessionHandle } from './connection.js';
|
|
2
3
|
type KeyDefinition = {
|
|
3
4
|
key: string;
|
|
@@ -10,6 +11,8 @@ type KeyDefinition = {
|
|
|
10
11
|
* Lookup is case-insensitive.
|
|
11
12
|
*/
|
|
12
13
|
export declare const resolveKeyDefinition: (key: string) => KeyDefinition | undefined;
|
|
14
|
+
/** Resolve a physical KeyboardEvent.code to its CDP key definition. */
|
|
15
|
+
export declare const resolveCodeDefinition: (code: string) => KeyDefinition | undefined;
|
|
13
16
|
/**
|
|
14
17
|
* Parse a comma-separated modifier string into a CDP bitmask.
|
|
15
18
|
* Accepts aliases: ctrl/control, meta/cmd/command.
|
|
@@ -17,15 +20,25 @@ export declare const resolveKeyDefinition: (key: string) => KeyDefinition | unde
|
|
|
17
20
|
*/
|
|
18
21
|
export declare const parseModifiers: (input?: string) => number;
|
|
19
22
|
export type DispatchKeydownOptions = {
|
|
20
|
-
key
|
|
23
|
+
key?: string;
|
|
24
|
+
code?: string;
|
|
21
25
|
selector?: string;
|
|
22
26
|
modifiers?: number;
|
|
23
27
|
};
|
|
24
28
|
export type DispatchKeydownResult = {
|
|
25
29
|
key: string;
|
|
30
|
+
code: string;
|
|
26
31
|
modifiers: number;
|
|
27
32
|
focused: boolean;
|
|
33
|
+
event: DomKeydownEvent;
|
|
34
|
+
};
|
|
35
|
+
type ResolveKeyboardEventOptions = {
|
|
36
|
+
key?: string;
|
|
37
|
+
code?: string;
|
|
38
|
+
modifiers?: number;
|
|
28
39
|
};
|
|
40
|
+
/** Resolve user-facing key/code input into the exact event shape sent to Chrome. */
|
|
41
|
+
export declare const resolveKeyboardEvent: (options: ResolveKeyboardEventOptions) => DomKeydownEvent;
|
|
29
42
|
/**
|
|
30
43
|
* Dispatch a keyboard event sequence via CDP Input.dispatchKeyEvent.
|
|
31
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAOvD,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;
|
|
1
|
+
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAOvD,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAkED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,aAAa,GAAG,SAElE,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,aAAa,GAAG,SAEpE,CAAA;AAiBD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,MAoB/C,CAAA;AAMD,MAAM,MAAM,sBAAsB,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,eAAe,CAAA;CACtB,CAAA;AAED,KAAK,2BAA2B,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,GAAI,SAAS,2BAA2B,KAAG,eAqC3E,CAAA;AA0BD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,gBAAgB,EAAE,SAAS,sBAAsB,KAAG,OAAO,CAAC,qBAAqB,CA8C/H,CAAA"}
|
package/dist/cdp/keyboard.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { resolveDomSelectorMatches } from './mouse.js';
|
|
2
|
-
const
|
|
3
|
-
const
|
|
2
|
+
const buildKeyMaps = () => {
|
|
3
|
+
const byKey = new Map();
|
|
4
|
+
const byCode = new Map();
|
|
4
5
|
const put = (lookup, def) => {
|
|
5
|
-
|
|
6
|
+
byKey.set(lookup.toLowerCase(), def);
|
|
7
|
+
byCode.set(def.code.toLowerCase(), def);
|
|
6
8
|
};
|
|
7
9
|
// Letters a-z
|
|
8
10
|
for (let i = 0; i < 26; i++) {
|
|
@@ -43,15 +45,19 @@ const buildKeyMap = () => {
|
|
|
43
45
|
const name = `F${i}`;
|
|
44
46
|
put(name, { key: name, code: name, keyCode: 111 + i });
|
|
45
47
|
}
|
|
46
|
-
return
|
|
48
|
+
return { byKey, byCode };
|
|
47
49
|
};
|
|
48
|
-
const
|
|
50
|
+
const KEY_MAPS = buildKeyMaps();
|
|
49
51
|
/**
|
|
50
52
|
* Resolve a key name to its CDP key definition.
|
|
51
53
|
* Lookup is case-insensitive.
|
|
52
54
|
*/
|
|
53
55
|
export const resolveKeyDefinition = (key) => {
|
|
54
|
-
return
|
|
56
|
+
return KEY_MAPS.byKey.get(key.toLowerCase());
|
|
57
|
+
};
|
|
58
|
+
/** Resolve a physical KeyboardEvent.code to its CDP key definition. */
|
|
59
|
+
export const resolveCodeDefinition = (code) => {
|
|
60
|
+
return KEY_MAPS.byCode.get(code.toLowerCase());
|
|
55
61
|
};
|
|
56
62
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
57
63
|
// Modifier parser
|
|
@@ -90,6 +96,59 @@ export const parseModifiers = (input) => {
|
|
|
90
96
|
}
|
|
91
97
|
return mask;
|
|
92
98
|
};
|
|
99
|
+
/** Resolve user-facing key/code input into the exact event shape sent to Chrome. */
|
|
100
|
+
export const resolveKeyboardEvent = (options) => {
|
|
101
|
+
const modifiers = options.modifiers ?? 0;
|
|
102
|
+
const keyInput = normalizeOptionalString(options.key);
|
|
103
|
+
const codeInput = normalizeOptionalString(options.code);
|
|
104
|
+
if (!keyInput && !codeInput) {
|
|
105
|
+
throw new Error('key or code is required');
|
|
106
|
+
}
|
|
107
|
+
const keyDef = keyInput ? resolveKeyDefinition(keyInput) : undefined;
|
|
108
|
+
const codeDef = codeInput ? resolveCodeDefinition(codeInput) : undefined;
|
|
109
|
+
const baseDef = codeDef ?? keyDef;
|
|
110
|
+
if (!baseDef) {
|
|
111
|
+
if (codeInput && !keyInput) {
|
|
112
|
+
throw new Error(`Unknown code: "${codeInput}"`);
|
|
113
|
+
}
|
|
114
|
+
throw new Error(`Unknown key: "${keyInput}"`);
|
|
115
|
+
}
|
|
116
|
+
const key = resolveEventKey(keyInput, baseDef, modifiers);
|
|
117
|
+
const text = resolveEventText(key, baseDef);
|
|
118
|
+
const event = {
|
|
119
|
+
key,
|
|
120
|
+
code: codeInput ?? baseDef.code,
|
|
121
|
+
keyCode: baseDef.keyCode,
|
|
122
|
+
modifiers,
|
|
123
|
+
altKey: (modifiers & MODIFIER_BITS.alt) !== 0,
|
|
124
|
+
ctrlKey: (modifiers & MODIFIER_BITS.ctrl) !== 0,
|
|
125
|
+
metaKey: (modifiers & MODIFIER_BITS.meta) !== 0,
|
|
126
|
+
shiftKey: (modifiers & MODIFIER_BITS.shift) !== 0,
|
|
127
|
+
};
|
|
128
|
+
if (text !== undefined) {
|
|
129
|
+
event.text = text;
|
|
130
|
+
}
|
|
131
|
+
return event;
|
|
132
|
+
};
|
|
133
|
+
const normalizeOptionalString = (value) => {
|
|
134
|
+
const normalized = value?.trim();
|
|
135
|
+
return normalized ? normalized : undefined;
|
|
136
|
+
};
|
|
137
|
+
const resolveEventKey = (keyInput, def, modifiers) => {
|
|
138
|
+
const semanticKey = keyInput ?? def.key;
|
|
139
|
+
if (isSingleLetter(semanticKey)) {
|
|
140
|
+
return isShift(modifiers) ? semanticKey.toUpperCase() : semanticKey.toLowerCase();
|
|
141
|
+
}
|
|
142
|
+
return semanticKey;
|
|
143
|
+
};
|
|
144
|
+
const resolveEventText = (key, def) => {
|
|
145
|
+
if (key.length === 1) {
|
|
146
|
+
return key;
|
|
147
|
+
}
|
|
148
|
+
return def.text;
|
|
149
|
+
};
|
|
150
|
+
const isSingleLetter = (value) => /^[a-z]$/i.test(value);
|
|
151
|
+
const isShift = (modifiers) => (modifiers & MODIFIER_BITS.shift) !== 0;
|
|
93
152
|
/**
|
|
94
153
|
* Dispatch a keyboard event sequence via CDP Input.dispatchKeyEvent.
|
|
95
154
|
*
|
|
@@ -98,7 +157,8 @@ export const parseModifiers = (input) => {
|
|
|
98
157
|
* 3. Dispatch: printable → keyDown+char+keyUp; non-printable → rawKeyDown+keyUp
|
|
99
158
|
*/
|
|
100
159
|
export const dispatchKeydown = async (session, options) => {
|
|
101
|
-
const {
|
|
160
|
+
const { selector } = options;
|
|
161
|
+
const event = resolveKeyboardEvent(options);
|
|
102
162
|
let focused = false;
|
|
103
163
|
// 1. Focus selector if provided
|
|
104
164
|
if (selector) {
|
|
@@ -115,34 +175,24 @@ export const dispatchKeydown = async (session, options) => {
|
|
|
115
175
|
await session.sendAndWait('DOM.focus', { nodeId });
|
|
116
176
|
focused = true;
|
|
117
177
|
}
|
|
118
|
-
|
|
119
|
-
const def = resolveKeyDefinition(key);
|
|
120
|
-
if (!def) {
|
|
121
|
-
throw new Error(`Unknown key: "${key}"`);
|
|
122
|
-
}
|
|
123
|
-
// Apply shift to text for single-character printable keys
|
|
124
|
-
let text = def.text;
|
|
125
|
-
if (text && text.length === 1 && (modifiers & 8) !== 0) {
|
|
126
|
-
text = text.toUpperCase();
|
|
127
|
-
}
|
|
128
|
-
const isPrintable = text != null && text !== '\r';
|
|
178
|
+
const isPrintable = event.text != null && event.text !== '\r';
|
|
129
179
|
// 3. Dispatch key events
|
|
130
180
|
const baseParams = {
|
|
131
|
-
code:
|
|
132
|
-
key:
|
|
133
|
-
windowsVirtualKeyCode:
|
|
134
|
-
nativeVirtualKeyCode:
|
|
135
|
-
modifiers,
|
|
181
|
+
code: event.code,
|
|
182
|
+
key: event.key,
|
|
183
|
+
windowsVirtualKeyCode: event.keyCode,
|
|
184
|
+
nativeVirtualKeyCode: event.keyCode,
|
|
185
|
+
modifiers: event.modifiers,
|
|
136
186
|
};
|
|
137
187
|
if (isPrintable) {
|
|
138
|
-
await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyDown', text });
|
|
139
|
-
await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'char', text });
|
|
188
|
+
await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyDown', text: event.text });
|
|
189
|
+
await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'char', text: event.text });
|
|
140
190
|
await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyUp' });
|
|
141
191
|
}
|
|
142
192
|
else {
|
|
143
|
-
await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'rawKeyDown', text:
|
|
193
|
+
await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'rawKeyDown', text: event.text });
|
|
144
194
|
await session.sendAndWait('Input.dispatchKeyEvent', { ...baseParams, type: 'keyUp' });
|
|
145
195
|
}
|
|
146
|
-
return { key:
|
|
196
|
+
return { key: event.key, code: event.code, modifiers: event.modifiers, focused, event };
|
|
147
197
|
};
|
|
148
198
|
//# sourceMappingURL=keyboard.js.map
|
package/dist/cdp/keyboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/cdp/keyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,9 @@ function validateAddRequest(body) {
|
|
|
56
56
|
if (payload.times !== undefined && (!Number.isInteger(payload.times) || payload.times < 1)) {
|
|
57
57
|
return 'times must be an integer >= 1';
|
|
58
58
|
}
|
|
59
|
+
if (payload.scope !== undefined && payload.scope !== 'page' && payload.scope !== 'selected') {
|
|
60
|
+
return 'scope must be one of: page, selected';
|
|
61
|
+
}
|
|
59
62
|
return null;
|
|
60
63
|
}
|
|
61
64
|
const validateMatch = (match) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netMock.js","sourceRoot":"","sources":["../../../src/http/routes/netMock.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"netMock.js","sourceRoot":"","sources":["../../../src/http/routes/netMock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postDomKeydown.d.ts","sourceRoot":"","sources":["../../../src/http/routes/postDomKeydown.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"postDomKeydown.d.ts","sourceRoot":"","sources":["../../../src/http/routes/postDomKeydown.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,KAAK,mDA+ChB,CAAA"}
|
|
@@ -6,12 +6,23 @@ export const route = defineJsonRoute({
|
|
|
6
6
|
parseBody: true,
|
|
7
7
|
endpoint: 'dom/keydown',
|
|
8
8
|
validate: (payload) => {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const hasKey = typeof payload.key === 'string' && payload.key.trim() !== '';
|
|
10
|
+
const hasCode = typeof payload.code === 'string' && payload.code.trim() !== '';
|
|
11
|
+
if (payload.key != null && !hasKey) {
|
|
12
|
+
return 'key must be a non-empty string';
|
|
13
|
+
}
|
|
14
|
+
if (payload.code != null && !hasCode) {
|
|
15
|
+
return 'code must be a non-empty string';
|
|
16
|
+
}
|
|
17
|
+
if (!hasKey && !hasCode) {
|
|
18
|
+
return 'key or code is required';
|
|
11
19
|
}
|
|
12
20
|
if (payload.selector != null && (typeof payload.selector !== 'string' || payload.selector.trim() === '')) {
|
|
13
21
|
return 'selector must be a non-empty string';
|
|
14
22
|
}
|
|
23
|
+
if (payload.modifiers != null && typeof payload.modifiers !== 'string') {
|
|
24
|
+
return 'modifiers must be a string';
|
|
25
|
+
}
|
|
15
26
|
try {
|
|
16
27
|
parseModifiers(payload.modifiers);
|
|
17
28
|
}
|
|
@@ -23,10 +34,18 @@ export const route = defineJsonRoute({
|
|
|
23
34
|
handle: async ({ ctx, body: payload }) => {
|
|
24
35
|
const result = await dispatchKeydown(ctx.cdpSession, {
|
|
25
36
|
key: payload.key,
|
|
37
|
+
code: payload.code,
|
|
26
38
|
selector: payload.selector,
|
|
27
39
|
modifiers: parseModifiers(payload.modifiers),
|
|
28
40
|
});
|
|
29
|
-
return {
|
|
41
|
+
return {
|
|
42
|
+
ok: true,
|
|
43
|
+
key: result.key,
|
|
44
|
+
code: result.code,
|
|
45
|
+
modifiers: result.modifiers,
|
|
46
|
+
focused: result.focused,
|
|
47
|
+
event: result.event,
|
|
48
|
+
};
|
|
30
49
|
},
|
|
31
50
|
});
|
|
32
51
|
//# sourceMappingURL=postDomKeydown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postDomKeydown.js","sourceRoot":"","sources":["../../../src/http/routes/postDomKeydown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAwC;IAC3E,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;QACrB,
|
|
1
|
+
{"version":3,"file":"postDomKeydown.js","sourceRoot":"","sources":["../../../src/http/routes/postDomKeydown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAwC;IAC3E,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;QAC3E,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;QAE9E,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,gCAAgC,CAAA;QACxC,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,OAAO,iCAAiC,CAAA;QACzC,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,yBAAyB,CAAA;QACjC,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC1G,OAAO,qCAAqC,CAAA;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACxE,OAAO,4BAA4B,CAAA;QACpC,CAAC;QACD,IAAI,CAAC;YACJ,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAA;QACpE,CAAC;QACD,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE;YACpD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;SAC5C,CAAC,CAAA;QACF,OAAO;YACN,EAAE,EAAE,IAAI;YACR,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;SACnB,CAAA;IACF,CAAC;CACD,CAAC,CAAA"}
|
|
@@ -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,
|