@petukhovart/agent-view 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +21 -21
- package/LICENSE +21 -21
- package/README.md +38 -13
- package/dist/cdp/network-stream.d.ts +27 -0
- package/dist/cdp/network-stream.d.ts.map +1 -0
- package/dist/cdp/network-stream.js +336 -0
- package/dist/cdp/network-stream.js.map +1 -0
- package/dist/cdp/transport.d.ts.map +1 -1
- package/dist/cdp/transport.js +167 -8
- package/dist/cdp/transport.js.map +1 -1
- package/dist/cdp/types.d.ts +187 -0
- package/dist/cdp/types.d.ts.map +1 -1
- package/dist/cdp/types.js +55 -0
- package/dist/cdp/types.js.map +1 -1
- package/dist/cli/commands/network.d.ts +19 -0
- package/dist/cli/commands/network.d.ts.map +1 -0
- package/dist/cli/commands/network.js +55 -0
- package/dist/cli/commands/network.js.map +1 -0
- package/dist/cli/index.js +23 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +6 -0
- package/dist/config/manager.js.map +1 -1
- package/dist/config/types.d.ts +8 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/inspectors/network/index.d.ts +19 -0
- package/dist/inspectors/network/index.d.ts.map +1 -0
- package/dist/inspectors/network/index.js +169 -0
- package/dist/inspectors/network/index.js.map +1 -0
- package/dist/server/server.d.ts +12 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +191 -17
- package/dist/server/server.js.map +1 -1
- package/package.json +9 -8
- package/skills/verify/SKILL.md +319 -292
- package/skills/verify-recipe/SKILL.md +286 -286
- package/dist/cdp/console-stream.d.ts +0 -35
- package/dist/cdp/console-stream.d.ts.map +0 -1
- package/dist/cdp/console-stream.js +0 -103
- package/dist/cdp/console-stream.js.map +0 -1
- package/dist/inspectors/dom.d.ts +0 -17
- package/dist/inspectors/dom.d.ts.map +0 -1
- package/dist/inspectors/dom.js +0 -131
- package/dist/inspectors/dom.js.map +0 -1
- package/dist/inspectors/scene/pixi.d.ts +0 -3
- package/dist/inspectors/scene/pixi.d.ts.map +0 -1
- package/dist/inspectors/scene/pixi.js +0 -52
- package/dist/inspectors/scene/pixi.js.map +0 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "agent-view",
|
|
3
|
-
"description": "Visual verification CLI for desktop apps (Electron/Tauri/Browser) via Chrome DevTools Protocol. Ships two skills: verify (run DOM, screenshot, eval, watch, console checks against a live app) and verify-recipe (author a reusable verification plan as a .md file).",
|
|
4
|
-
"version": "0.8.2",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"cdp",
|
|
7
|
-
"electron",
|
|
8
|
-
"tauri",
|
|
9
|
-
"desktop",
|
|
10
|
-
"testing",
|
|
11
|
-
"accessibility",
|
|
12
|
-
"screenshot",
|
|
13
|
-
"automation"
|
|
14
|
-
],
|
|
15
|
-
"author": {
|
|
16
|
-
"name": "PetukhovArt"
|
|
17
|
-
},
|
|
18
|
-
"homepage": "https://github.com/PetukhovArt/agent-view",
|
|
19
|
-
"repository": "https://github.com/PetukhovArt/agent-view",
|
|
20
|
-
"license": "MIT"
|
|
21
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "agent-view",
|
|
3
|
+
"description": "Visual verification CLI for desktop apps (Electron/Tauri/Browser) via Chrome DevTools Protocol. Ships two skills: verify (run DOM, screenshot, eval, watch, console checks against a live app) and verify-recipe (author a reusable verification plan as a .md file).",
|
|
4
|
+
"version": "0.8.2",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cdp",
|
|
7
|
+
"electron",
|
|
8
|
+
"tauri",
|
|
9
|
+
"desktop",
|
|
10
|
+
"testing",
|
|
11
|
+
"accessibility",
|
|
12
|
+
"screenshot",
|
|
13
|
+
"automation"
|
|
14
|
+
],
|
|
15
|
+
"author": {
|
|
16
|
+
"name": "PetukhovArt"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/PetukhovArt/agent-view",
|
|
19
|
+
"repository": "https://github.com/PetukhovArt/agent-view",
|
|
20
|
+
"license": "MIT"
|
|
21
|
+
}
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Artem Petukhov
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Artem Petukhov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="https://npmjs.com/package/@petukhovart/agent-view"><img src="https://img.shields.io/npm/v/@petukhovart/agent-view?color=yellow" alt="npm version" /></a>
|
|
9
|
-
<a href="https://npmjs.com/package/@petukhovart/agent-view"><img src="https://img.shields.io/npm/dt/@petukhovart/agent-view?color=blue" alt="npm downloads" /></a>
|
|
10
|
-
<a href="https://npmjs.com/package/@petukhovart/agent-view"><img src="https://img.shields.io/npm/unpacked-size/@petukhovart/agent-view?color=purple&label=size" alt="package size" /></a>
|
|
8
|
+
<a href="https://www.npmjs.com/package/@petukhovart/agent-view"><img src="https://img.shields.io/npm/v/@petukhovart/agent-view?color=yellow" alt="npm version" /></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@petukhovart/agent-view"><img src="https://img.shields.io/npm/dt/@petukhovart/agent-view?color=blue" alt="npm downloads" /></a>
|
|
10
|
+
<a href="https://www.npmjs.com/package/@petukhovart/agent-view"><img src="https://img.shields.io/npm/unpacked-size/@petukhovart/agent-view?color=purple&label=size" alt="package size" /></a>
|
|
11
11
|
<a href="https://github.com/PetukhovArt/agent-view/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/@petukhovart/agent-view?color=green" alt="license" /></a>
|
|
12
12
|
<a href="https://nodejs.org"><img src="https://img.shields.io/node/v/@petukhovart/agent-view" alt="node" /></a>
|
|
13
13
|
<a href="https://github.com/PetukhovArt/agent-view/stargazers"><img src="https://img.shields.io/github/stars/PetukhovArt/agent-view?style=flat&color=orange" alt="github stars" /></a>
|
|
@@ -152,6 +152,7 @@ The daemon is why `dom → click → dom` runs in ~17ms total: one persistent CD
|
|
|
152
152
|
| `eval` | Run JS in the page's main world. Read store/state directly instead of scraping DOM. |
|
|
153
153
|
| `watch` | Stream JSON-patch diffs of any expression. Answers "what changed between click and final state?". |
|
|
154
154
|
| `console` | `console.log` + `Log.entryAdded` per page **and per worker**, with `--follow --until <pattern>`. |
|
|
155
|
+
| `network` | Request/response timeline, headers, timing, bodies, and WebSocket/SSE frames. Filters: `--url`, `--method`, `--status`, `--type`. Captures page-load traffic. |
|
|
155
156
|
| `wait` | Block until an element appears (default 10s). |
|
|
156
157
|
| `scene` | WebGL scene graph (PixiJS today, engine-pluggable). `--compact` and `--diff` mirror `dom`. |
|
|
157
158
|
| `snap` | DOM + scene + optional screenshot in one call. |
|
|
@@ -317,19 +318,23 @@ Full form with all optional fields:
|
|
|
317
318
|
"engine": "pixi"
|
|
318
319
|
},
|
|
319
320
|
"consoleBufferSize": 500,
|
|
320
|
-
"consoleTargets": ["page", "shared_worker", "service_worker"]
|
|
321
|
+
"consoleTargets": ["page", "shared_worker", "service_worker"],
|
|
322
|
+
"captureBody": false,
|
|
323
|
+
"networkBufferSize": 200
|
|
321
324
|
}
|
|
322
325
|
```
|
|
323
326
|
|
|
324
|
-
| Field | Required | Description
|
|
325
|
-
|
|
326
|
-
| `runtime` | yes | `"electron"`, `"tauri"`, or `"browser"`
|
|
327
|
-
| `port` | yes | CDP debugging port
|
|
328
|
-
| `launch` |
|
|
329
|
-
| `webgl.engine` | no | `"pixi"`
|
|
330
|
-
| `allowEval` | no | `true` to enable `agent-view eval` and `watch`. Off by default; opt-in for arbitrary JS execution
|
|
331
|
-
| `consoleBufferSize` | no | Per-target console ring capacity. Default `500`
|
|
332
|
-
| `consoleTargets` | no | Target types `agent-view console` auto-attaches to. Default `["page", "shared_worker", "service_worker"]` |
|
|
327
|
+
| Field | Required | Description |
|
|
328
|
+
|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
329
|
+
| `runtime` | yes | `"electron"`, `"tauri"`, or `"browser"` |
|
|
330
|
+
| `port` | yes | CDP debugging port. Integer in range `1`–`65535` |
|
|
331
|
+
| `launch` | yes | Shell command used by `agent-view launch` to start the app (e.g. `"npm run dev"`). Pass an empty string if you always start the app yourself |
|
|
332
|
+
| `webgl.engine` | no | Scene-graph engine. Currently `"pixi"` ships an adapter; the architecture is pluggable for adding more engines |
|
|
333
|
+
| `allowEval` | no | `true` to enable `agent-view eval` and `watch`. Off by default; opt-in for arbitrary JS execution |
|
|
334
|
+
| `consoleBufferSize` | no | Per-target console ring capacity. Positive integer. Default `500` |
|
|
335
|
+
| `consoleTargets` | no | Target types `agent-view console` auto-attaches to on first call. Any subset of `["page", "iframe", "shared_worker", "service_worker", "worker"]`. Default `["page", "shared_worker", "service_worker"]` |
|
|
336
|
+
| `captureBody` | no | `true` to capture response bodies and request payloads for `agent-view network`. Off by default; opt-in since bodies can carry tokens/PII. WebSocket frame payloads are visible regardless |
|
|
337
|
+
| `networkBufferSize` | no | Per-target network ring capacity. Positive integer. Default `200` (smaller than console — entries are heavier) |
|
|
333
338
|
|
|
334
339
|
---
|
|
335
340
|
|
|
@@ -506,6 +511,26 @@ agent-view console --clear # drop in-memory ring
|
|
|
506
511
|
|
|
507
512
|
Default attached target types: `page`, `shared_worker`, `service_worker`. Override with `consoleTargets` in config.
|
|
508
513
|
|
|
514
|
+
### `network`
|
|
515
|
+
|
|
516
|
+
Lists captured network requests, one compact line each with a short `[req=N]` handle. Expand one with `--req N` for headers, timing, body, or the WebSocket frame log. Surfaces the silent failures DOM and console can't: a 404 that never throws, a CORS block, a missing `Authorization` header, a realtime socket that never receives its message.
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
agent-view network # recent requests, newest at the bottom
|
|
520
|
+
agent-view network --req 3 # expand one: headers, timing, body / WS frames
|
|
521
|
+
agent-view network --status 4xx,5xx,failed # class, exact code (404), or `failed` (no HTTP response — CORS/conn refused)
|
|
522
|
+
agent-view network --method POST # find mutations among reads
|
|
523
|
+
agent-view network --type xhr,fetch # drop document/image/font noise
|
|
524
|
+
agent-view network --url "*/api/users*" # URL substring, or glob with *
|
|
525
|
+
agent-view network --follow --until "/api/save" # stream until a matching request fires
|
|
526
|
+
agent-view network --raw-headers --req 3 # reveal redacted header values
|
|
527
|
+
agent-view network --clear # drop in-memory ring
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
**Eager, not lazy — the one asymmetry with `console`.** `network` capture starts when the app launches, so page-load traffic (initial XHR/fetch, auth handshakes, boot 404s) is usually buffered by the time you call it. `console`, by contrast, attaches on its first call and loses anything emitted earlier. This is deliberate: network's value is front-loaded. The one caveat: a very fast app can fire its first request before capture attaches — if boot traffic looks missing, reload and re-check rather than assuming nothing fired.
|
|
531
|
+
|
|
532
|
+
Sensitive headers (`Authorization`, `Cookie`, `Set-Cookie`, `X-Api-Key`, …) are redacted by default; `--raw-headers` reveals them. Request/response **bodies** stay off until the project owner sets `"captureBody": true` (bodies can carry tokens/PII). WebSocket frame payloads are visible by default — seeing them is the point — capped per frame. `--follow` and `--until` mirror `console`. `--target` / `--window` scope to one target.
|
|
533
|
+
|
|
509
534
|
### `watch`
|
|
510
535
|
|
|
511
536
|
Polls a JS expression and streams JSON-patch (RFC 6902) diffs as it changes. Closes the "what changed between click and final state?" gap that screenshots and DOM dumps can't cover. **Requires `"allowEval": true`** (same gate as `eval`).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RuntimeSession, TargetType } from './types.js';
|
|
2
|
+
import { type NetworkEntry, type NetworkFilter } from './types.js';
|
|
3
|
+
export type StampedNetworkEntry = NetworkEntry & {
|
|
4
|
+
targetId: string;
|
|
5
|
+
targetType: TargetType;
|
|
6
|
+
};
|
|
7
|
+
export declare class NetworkStream {
|
|
8
|
+
private readonly capacity;
|
|
9
|
+
private readonly captureBody;
|
|
10
|
+
private readonly targets;
|
|
11
|
+
private readonly subscribers;
|
|
12
|
+
constructor(opts?: {
|
|
13
|
+
capacity?: number;
|
|
14
|
+
captureBody?: boolean;
|
|
15
|
+
});
|
|
16
|
+
get attachedCount(): number;
|
|
17
|
+
attach(session: RuntimeSession): Promise<void>;
|
|
18
|
+
detach(targetId?: string): void;
|
|
19
|
+
clear(targetId?: string): void;
|
|
20
|
+
subscribe(handler: (entry: StampedNetworkEntry) => void): () => void;
|
|
21
|
+
drain(filter?: NetworkFilter): StampedNetworkEntry[];
|
|
22
|
+
getEntry(targetId: string, requestId: string): StampedNetworkEntry | undefined;
|
|
23
|
+
private notify;
|
|
24
|
+
private upsertEntry;
|
|
25
|
+
private handleEvent;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=network-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-stream.d.ts","sourceRoot":"","sources":["../../src/cdp/network-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAML,KAAK,YAAY,EAEjB,KAAK,aAAa,EAGnB,MAAM,YAAY,CAAA;AAOnB,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAA;AAkB7F,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;gBAElE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO;IAKnE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAY/B,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ9B,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,MAAM,IAAI;IAKpE,KAAK,CAAC,MAAM,GAAE,aAAkB,GAAG,mBAAmB,EAAE;IAmDxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAQ9E,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;CA4MpB"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { NetworkEventKind, NetworkEntryState, NetworkResourceType, WebSocketOpcode, WebSocketDirection, } from './types.js';
|
|
2
|
+
const DEFAULT_CAPACITY = 200;
|
|
3
|
+
const FRAME_RING = 100;
|
|
4
|
+
const PAYLOAD_CAP = 2048;
|
|
5
|
+
const BODY_CAP = 16 * 1024;
|
|
6
|
+
function globToRegex(pattern) {
|
|
7
|
+
const segments = pattern.split('*');
|
|
8
|
+
const escaped = segments.map(s => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
|
|
9
|
+
return new RegExp(escaped.join('.*'), 'i');
|
|
10
|
+
}
|
|
11
|
+
function isBinaryMime(mime) {
|
|
12
|
+
return !mime.startsWith('text/') && !mime.includes('json') && !mime.includes('xml') && !mime.includes('javascript');
|
|
13
|
+
}
|
|
14
|
+
export class NetworkStream {
|
|
15
|
+
capacity;
|
|
16
|
+
captureBody;
|
|
17
|
+
targets = new Map();
|
|
18
|
+
subscribers = new Set();
|
|
19
|
+
constructor(opts = {}) {
|
|
20
|
+
this.capacity = opts.capacity ?? DEFAULT_CAPACITY;
|
|
21
|
+
this.captureBody = opts.captureBody ?? false;
|
|
22
|
+
}
|
|
23
|
+
get attachedCount() {
|
|
24
|
+
return this.targets.size;
|
|
25
|
+
}
|
|
26
|
+
async attach(session) {
|
|
27
|
+
const id = session.target.id;
|
|
28
|
+
if (this.targets.has(id))
|
|
29
|
+
return;
|
|
30
|
+
const entries = new Map();
|
|
31
|
+
const dispose = session.onNetwork((ev) => this.handleEvent(id, entries, session, ev));
|
|
32
|
+
this.targets.set(id, { session, entries, dispose });
|
|
33
|
+
await session.enableNetwork();
|
|
34
|
+
}
|
|
35
|
+
detach(targetId) {
|
|
36
|
+
if (targetId === undefined) {
|
|
37
|
+
for (const t of this.targets.values())
|
|
38
|
+
t.dispose();
|
|
39
|
+
this.targets.clear();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const t = this.targets.get(targetId);
|
|
43
|
+
if (!t)
|
|
44
|
+
return;
|
|
45
|
+
t.dispose();
|
|
46
|
+
this.targets.delete(targetId);
|
|
47
|
+
}
|
|
48
|
+
clear(targetId) {
|
|
49
|
+
if (targetId === undefined) {
|
|
50
|
+
for (const t of this.targets.values())
|
|
51
|
+
t.entries.clear();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.targets.get(targetId)?.entries.clear();
|
|
55
|
+
}
|
|
56
|
+
subscribe(handler) {
|
|
57
|
+
this.subscribers.add(handler);
|
|
58
|
+
return () => this.subscribers.delete(handler);
|
|
59
|
+
}
|
|
60
|
+
drain(filter = {}) {
|
|
61
|
+
const urlRe = filter.url ? (filter.url.includes('*') ? globToRegex(filter.url) : null) : null;
|
|
62
|
+
const hasStatusFilter = (filter.statusClasses !== undefined && filter.statusClasses.size > 0) ||
|
|
63
|
+
(filter.statusCodes !== undefined && filter.statusCodes.size > 0) ||
|
|
64
|
+
filter.includeFailed === true;
|
|
65
|
+
const result = [];
|
|
66
|
+
for (const [id, target] of this.targets) {
|
|
67
|
+
if (filter.targetId && filter.targetId !== id)
|
|
68
|
+
continue;
|
|
69
|
+
for (const entry of target.entries.values()) {
|
|
70
|
+
if (filter.since !== undefined && entry.startTs < filter.since)
|
|
71
|
+
continue;
|
|
72
|
+
if (filter.url) {
|
|
73
|
+
const lowerUrl = entry.url.toLowerCase();
|
|
74
|
+
if (urlRe) {
|
|
75
|
+
if (!urlRe.test(entry.url))
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
if (!lowerUrl.includes(filter.url.toLowerCase()))
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (filter.method) {
|
|
84
|
+
if (!entry.method)
|
|
85
|
+
continue;
|
|
86
|
+
if (!filter.method.has(entry.method.toUpperCase()))
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (hasStatusFilter) {
|
|
90
|
+
const matchesFailed = filter.includeFailed === true && entry.state === NetworkEntryState.Failed;
|
|
91
|
+
let matchesNumeric = false;
|
|
92
|
+
if (entry.status !== undefined) {
|
|
93
|
+
const cls = Math.floor(entry.status / 100);
|
|
94
|
+
const matchesClass = filter.statusClasses ? filter.statusClasses.has(cls) : false;
|
|
95
|
+
const matchesCode = filter.statusCodes ? filter.statusCodes.has(entry.status) : false;
|
|
96
|
+
matchesNumeric = matchesClass || matchesCode;
|
|
97
|
+
}
|
|
98
|
+
if (!matchesFailed && !matchesNumeric)
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (filter.type && !filter.type.has(entry.resourceType))
|
|
102
|
+
continue;
|
|
103
|
+
result.push({ ...entry, targetId: id, targetType: target.session.target.type });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
result.sort((a, b) => a.startTs - b.startTs);
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
getEntry(targetId, requestId) {
|
|
110
|
+
const target = this.targets.get(targetId);
|
|
111
|
+
if (!target)
|
|
112
|
+
return undefined;
|
|
113
|
+
const entry = target.entries.get(requestId);
|
|
114
|
+
if (!entry)
|
|
115
|
+
return undefined;
|
|
116
|
+
return { ...entry, targetId, targetType: target.session.target.type };
|
|
117
|
+
}
|
|
118
|
+
notify(targetId, target, entry) {
|
|
119
|
+
const stamped = { ...entry, targetId, targetType: target.session.target.type };
|
|
120
|
+
for (const sub of this.subscribers) {
|
|
121
|
+
try {
|
|
122
|
+
sub(stamped);
|
|
123
|
+
}
|
|
124
|
+
catch { /* ignore */ }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
upsertEntry(targetId, target, requestId, entry) {
|
|
128
|
+
const isNew = !target.entries.has(requestId);
|
|
129
|
+
target.entries.set(requestId, entry);
|
|
130
|
+
if (isNew && target.entries.size > this.capacity) {
|
|
131
|
+
const firstKey = target.entries.keys().next().value;
|
|
132
|
+
if (firstKey !== undefined)
|
|
133
|
+
target.entries.delete(firstKey);
|
|
134
|
+
}
|
|
135
|
+
this.notify(targetId, target, entry);
|
|
136
|
+
}
|
|
137
|
+
handleEvent(targetId, entries, session, ev) {
|
|
138
|
+
const target = this.targets.get(targetId);
|
|
139
|
+
if (!target)
|
|
140
|
+
return;
|
|
141
|
+
switch (ev.kind) {
|
|
142
|
+
case NetworkEventKind.RequestWillBeSent: {
|
|
143
|
+
const entry = {
|
|
144
|
+
requestId: ev.requestId,
|
|
145
|
+
url: ev.url,
|
|
146
|
+
method: ev.method,
|
|
147
|
+
resourceType: ev.resourceType,
|
|
148
|
+
state: NetworkEntryState.Pending,
|
|
149
|
+
requestHeaders: ev.headers,
|
|
150
|
+
startTs: ev.ts,
|
|
151
|
+
requestBody: this.captureBody ? ev.postData : undefined,
|
|
152
|
+
};
|
|
153
|
+
this.upsertEntry(targetId, target, ev.requestId, entry);
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case NetworkEventKind.ResponseReceived: {
|
|
157
|
+
const existing = entries.get(ev.requestId);
|
|
158
|
+
const entry = existing ?? {
|
|
159
|
+
requestId: ev.requestId,
|
|
160
|
+
url: '',
|
|
161
|
+
resourceType: ev.resourceType,
|
|
162
|
+
state: NetworkEntryState.Pending,
|
|
163
|
+
startTs: ev.ts,
|
|
164
|
+
};
|
|
165
|
+
entry.status = ev.status;
|
|
166
|
+
entry.statusText = ev.statusText;
|
|
167
|
+
entry.responseHeaders = ev.headers;
|
|
168
|
+
entry.mimeType = ev.mimeType;
|
|
169
|
+
entry.ttfbMs = existing ? ev.ts - existing.startTs : 0;
|
|
170
|
+
this.upsertEntry(targetId, target, ev.requestId, entry);
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case NetworkEventKind.LoadingFinished: {
|
|
174
|
+
const existing = entries.get(ev.requestId);
|
|
175
|
+
if (!existing)
|
|
176
|
+
break;
|
|
177
|
+
existing.state = NetworkEntryState.Complete;
|
|
178
|
+
existing.endTs = ev.ts;
|
|
179
|
+
existing.totalMs = ev.ts - existing.startTs;
|
|
180
|
+
existing.encodedDataLength = ev.encodedDataLength;
|
|
181
|
+
this.notify(targetId, target, existing);
|
|
182
|
+
if (this.captureBody) {
|
|
183
|
+
session.getResponseBody(ev.requestId).then(({ body, base64Encoded }) => {
|
|
184
|
+
const mime = existing.mimeType ?? '';
|
|
185
|
+
const binary = base64Encoded || isBinaryMime(mime);
|
|
186
|
+
let networkBody;
|
|
187
|
+
if (binary) {
|
|
188
|
+
const decoded = base64Encoded ? Buffer.from(body, 'base64') : Buffer.from(body);
|
|
189
|
+
networkBody = { text: '', base64: base64Encoded, size: decoded.byteLength, binary: true };
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
const size = Buffer.byteLength(body);
|
|
193
|
+
networkBody = { text: body.slice(0, BODY_CAP), base64: false, size, binary: false };
|
|
194
|
+
}
|
|
195
|
+
existing.responseBody = networkBody;
|
|
196
|
+
this.notify(targetId, target, existing);
|
|
197
|
+
}).catch(() => { });
|
|
198
|
+
}
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case NetworkEventKind.LoadingFailed: {
|
|
202
|
+
const existing = entries.get(ev.requestId);
|
|
203
|
+
if (!existing)
|
|
204
|
+
break;
|
|
205
|
+
existing.state = NetworkEntryState.Failed;
|
|
206
|
+
existing.endTs = ev.ts;
|
|
207
|
+
existing.totalMs = ev.ts - existing.startTs;
|
|
208
|
+
existing.errorText = ev.errorText;
|
|
209
|
+
existing.canceled = ev.canceled;
|
|
210
|
+
this.notify(targetId, target, existing);
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case NetworkEventKind.WebSocketCreated: {
|
|
214
|
+
const entry = {
|
|
215
|
+
requestId: ev.requestId,
|
|
216
|
+
url: ev.url,
|
|
217
|
+
resourceType: NetworkResourceType.WebSocket,
|
|
218
|
+
isWebSocket: true,
|
|
219
|
+
state: NetworkEntryState.Pending,
|
|
220
|
+
startTs: ev.ts,
|
|
221
|
+
frames: [],
|
|
222
|
+
};
|
|
223
|
+
this.upsertEntry(targetId, target, ev.requestId, entry);
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case NetworkEventKind.WebSocketFrameSent:
|
|
227
|
+
case NetworkEventKind.WebSocketFrameReceived: {
|
|
228
|
+
let entry = entries.get(ev.requestId);
|
|
229
|
+
if (!entry) {
|
|
230
|
+
entry = {
|
|
231
|
+
requestId: ev.requestId,
|
|
232
|
+
url: '',
|
|
233
|
+
resourceType: NetworkResourceType.WebSocket,
|
|
234
|
+
isWebSocket: true,
|
|
235
|
+
state: NetworkEntryState.Pending,
|
|
236
|
+
startTs: ev.ts,
|
|
237
|
+
frames: [],
|
|
238
|
+
};
|
|
239
|
+
this.upsertEntry(targetId, target, ev.requestId, entry);
|
|
240
|
+
}
|
|
241
|
+
if (!entry.frames)
|
|
242
|
+
entry.frames = [];
|
|
243
|
+
const direction = ev.kind === NetworkEventKind.WebSocketFrameSent
|
|
244
|
+
? WebSocketDirection.Sent
|
|
245
|
+
: WebSocketDirection.Received;
|
|
246
|
+
const isBinaryFrame = ev.opcode === WebSocketOpcode.Binary;
|
|
247
|
+
const frame = {
|
|
248
|
+
direction,
|
|
249
|
+
opcode: ev.opcode,
|
|
250
|
+
ts: ev.ts,
|
|
251
|
+
size: Buffer.byteLength(ev.payloadData),
|
|
252
|
+
...(isBinaryFrame ? { binary: true } : { payload: ev.payloadData.slice(0, PAYLOAD_CAP) }),
|
|
253
|
+
};
|
|
254
|
+
entry.frames.push(frame);
|
|
255
|
+
if (entry.frames.length > FRAME_RING)
|
|
256
|
+
entry.frames.shift();
|
|
257
|
+
this.notify(targetId, target, entry);
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
case NetworkEventKind.WebSocketFrameError: {
|
|
261
|
+
const entry = entries.get(ev.requestId);
|
|
262
|
+
if (!entry)
|
|
263
|
+
break;
|
|
264
|
+
if (!entry.frames)
|
|
265
|
+
entry.frames = [];
|
|
266
|
+
const frame = {
|
|
267
|
+
direction: WebSocketDirection.Received,
|
|
268
|
+
opcode: WebSocketOpcode.Continuation,
|
|
269
|
+
ts: ev.ts,
|
|
270
|
+
size: 0,
|
|
271
|
+
terminal: 'error',
|
|
272
|
+
errorMessage: ev.errorMessage,
|
|
273
|
+
};
|
|
274
|
+
entry.frames.push(frame);
|
|
275
|
+
if (entry.frames.length > FRAME_RING)
|
|
276
|
+
entry.frames.shift();
|
|
277
|
+
this.notify(targetId, target, entry);
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
case NetworkEventKind.WebSocketClosed: {
|
|
281
|
+
const entry = entries.get(ev.requestId);
|
|
282
|
+
if (!entry)
|
|
283
|
+
break;
|
|
284
|
+
if (!entry.frames)
|
|
285
|
+
entry.frames = [];
|
|
286
|
+
const frame = {
|
|
287
|
+
direction: WebSocketDirection.Received,
|
|
288
|
+
opcode: WebSocketOpcode.Close,
|
|
289
|
+
ts: ev.ts,
|
|
290
|
+
size: 0,
|
|
291
|
+
terminal: 'closed',
|
|
292
|
+
};
|
|
293
|
+
entry.frames.push(frame);
|
|
294
|
+
if (entry.frames.length > FRAME_RING)
|
|
295
|
+
entry.frames.shift();
|
|
296
|
+
entry.state = NetworkEntryState.Complete;
|
|
297
|
+
entry.endTs = ev.ts;
|
|
298
|
+
this.notify(targetId, target, entry);
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
case NetworkEventKind.EventSourceMessageReceived: {
|
|
302
|
+
let entry = entries.get(ev.requestId);
|
|
303
|
+
if (!entry) {
|
|
304
|
+
entry = {
|
|
305
|
+
requestId: ev.requestId,
|
|
306
|
+
url: '',
|
|
307
|
+
resourceType: NetworkResourceType.EventSource,
|
|
308
|
+
isEventSource: true,
|
|
309
|
+
state: NetworkEntryState.Pending,
|
|
310
|
+
startTs: ev.ts,
|
|
311
|
+
frames: [],
|
|
312
|
+
};
|
|
313
|
+
this.upsertEntry(targetId, target, ev.requestId, entry);
|
|
314
|
+
}
|
|
315
|
+
if (!entry.frames)
|
|
316
|
+
entry.frames = [];
|
|
317
|
+
if (!entry.isEventSource)
|
|
318
|
+
entry.isEventSource = true;
|
|
319
|
+
const rawPayload = (ev.eventName ? ev.eventName + ': ' : '') + ev.data;
|
|
320
|
+
const frame = {
|
|
321
|
+
direction: WebSocketDirection.Received,
|
|
322
|
+
opcode: WebSocketOpcode.Text,
|
|
323
|
+
ts: ev.ts,
|
|
324
|
+
size: Buffer.byteLength(ev.data),
|
|
325
|
+
payload: rawPayload.slice(0, PAYLOAD_CAP),
|
|
326
|
+
};
|
|
327
|
+
entry.frames.push(frame);
|
|
328
|
+
if (entry.frames.length > FRAME_RING)
|
|
329
|
+
entry.frames.shift();
|
|
330
|
+
this.notify(targetId, target, entry);
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=network-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-stream.js","sourceRoot":"","sources":["../../src/cdp/network-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/cdp/transport.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/cdp/transport.ts"],"names":[],"mappings":"AAEA,OAAO,EAWL,KAAK,SAAS,EAId,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,EAOjB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAoBhD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAkBpE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAQ9E;AAgWD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAuBhG;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,WAAW,CAAC,CAgOtB"}
|