@descryy/runtime-browser 0.4.7 → 0.5.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/dist/browser-network-collector.d.ts +17 -0
- package/dist/browser-network-collector.d.ts.map +1 -1
- package/dist/browser-network-collector.js +45 -5
- package/dist/browser-network-collector.js.map +1 -1
- package/dist/browser-recording-collector.d.ts +120 -0
- package/dist/browser-recording-collector.d.ts.map +1 -0
- package/dist/browser-recording-collector.js +372 -0
- package/dist/browser-recording-collector.js.map +1 -0
- package/dist/browser-session.d.ts +69 -0
- package/dist/browser-session.d.ts.map +1 -1
- package/dist/browser-session.js +146 -1
- package/dist/browser-session.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
|
@@ -96,6 +96,7 @@
|
|
|
96
96
|
* is unmeasured and explicitly out of scope for this change, same as the
|
|
97
97
|
* RT-PENDING note that proved this gap already said.
|
|
98
98
|
*/
|
|
99
|
+
import type { Response } from "playwright-core";
|
|
99
100
|
import type { Collector } from "@descryy/runtime-contracts";
|
|
100
101
|
import type { StackTraceParser } from "@descryy/runtime-backend-observation";
|
|
101
102
|
import type { BrowserSession } from "./browser-session.ts";
|
|
@@ -125,5 +126,21 @@ export interface BrowserNetworkCollectorOptions {
|
|
|
125
126
|
*/
|
|
126
127
|
readonly stackTraceParser?: StackTraceParser;
|
|
127
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* RT-261: `response.text()` used to be read whole regardless of size -- a
|
|
131
|
+
* multi-hundred-MB JSON export landed in Descry's own memory in one shot.
|
|
132
|
+
* Starting value, not a measurement.
|
|
133
|
+
*/
|
|
134
|
+
export declare const MAX_RESPONSE_BODY_BYTES: number;
|
|
135
|
+
export interface CapturedResponseBody {
|
|
136
|
+
/** The body text, or a bounded prefix of it when it exceeded the cap; null when not captured at all (wrong content-type, cap exceeded before any read, or the read itself failed). */
|
|
137
|
+
readonly body: string | null;
|
|
138
|
+
/** True when the real body was larger than `MAX_RESPONSE_BODY_BYTES` -- whether or not `body` still carries a truncated prefix of it. */
|
|
139
|
+
readonly bodyTruncated: boolean;
|
|
140
|
+
/** The real size in bytes, when known -- from `content-length` (never-read case) or measured after reading; null when neither is available. */
|
|
141
|
+
readonly bodyByteLength: number | null;
|
|
142
|
+
}
|
|
143
|
+
/** Exported for direct unit testing (RT-261) -- exercising the cap does not need a real browser response, just something shaped like one. */
|
|
144
|
+
export declare function captureResponseBody(response: Response, headers: Readonly<Record<string, string>>): Promise<CapturedResponseBody>;
|
|
128
145
|
export declare function createBrowserNetworkCollector(options: BrowserNetworkCollectorOptions): Collector;
|
|
129
146
|
//# sourceMappingURL=browser-network-collector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-network-collector.d.ts","sourceRoot":"","sources":["../src/browser-network-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGG;
|
|
1
|
+
{"version":3,"file":"browser-network-collector.d.ts","sourceRoot":"","sources":["../src/browser-network-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGG;AAEH,OAAO,KAAK,EAAW,QAAQ,EAAoC,MAAM,iBAAiB,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAqG,MAAM,4BAA4B,CAAC;AAE/J,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAyED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAa,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,sLAAsL;IACtL,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yIAAyI;IACzI,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,+IAA+I;IAC/I,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAWD,6IAA6I;AAC7I,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuBtI;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,SAAS,CAknBhG"}
|
|
@@ -110,7 +110,9 @@ const CAPABILITIES = {
|
|
|
110
110
|
consoleObservation: notThisCollectorsJob("console/page-error observation"),
|
|
111
111
|
networkObservation: {
|
|
112
112
|
availability: "degraded",
|
|
113
|
-
reason: "response bodies are captured for JSON/text content types only
|
|
113
|
+
reason: "response bodies are captured for JSON/text content types only, up to 256 KB (RT-261) -- a larger body is either never read " +
|
|
114
|
+
"(content-length announced it) or read and cut afterward (content-length was absent/understated), and either way the real size " +
|
|
115
|
+
"is still recorded (bodyByteLength) and the cut disclosed (bodyTruncated). Binary, streamed, or already-consumed bodies are not available. " +
|
|
114
116
|
"WebSocket connections (RT-225) are observed for connection attempt, connection failure and close, but not per-message frame " +
|
|
115
117
|
"traffic (framesent/framereceived, not captured), and a close cannot be told apart as normal vs. abnormal -- Playwright's public " +
|
|
116
118
|
"WebSocket API exposes no close code or reason, measured directly rather than assumed. EventSource/SSE traffic is ordinary browser " +
|
|
@@ -162,11 +164,43 @@ const CAPABILITIES_WITH_STACKS = {
|
|
|
162
164
|
},
|
|
163
165
|
};
|
|
164
166
|
const BODY_CAPTURABLE_CONTENT_TYPE = /^(application\/json|text\/)/i;
|
|
165
|
-
|
|
167
|
+
/**
|
|
168
|
+
* RT-261: `response.text()` used to be read whole regardless of size -- a
|
|
169
|
+
* multi-hundred-MB JSON export landed in Descry's own memory in one shot.
|
|
170
|
+
* Starting value, not a measurement.
|
|
171
|
+
*/
|
|
172
|
+
export const MAX_RESPONSE_BODY_BYTES = 256 * 1024;
|
|
173
|
+
const NOT_CAPTURED = { body: null, bodyTruncated: false, bodyByteLength: null };
|
|
174
|
+
function parseContentLength(headers) {
|
|
175
|
+
const raw = headers["content-length"];
|
|
176
|
+
if (raw === undefined)
|
|
177
|
+
return null;
|
|
178
|
+
const parsed = Number.parseInt(raw, 10);
|
|
179
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : null;
|
|
180
|
+
}
|
|
181
|
+
/** Exported for direct unit testing (RT-261) -- exercising the cap does not need a real browser response, just something shaped like one. */
|
|
182
|
+
export async function captureResponseBody(response, headers) {
|
|
166
183
|
const contentType = headers["content-type"] ?? "";
|
|
167
184
|
if (!BODY_CAPTURABLE_CONTENT_TYPE.test(contentType))
|
|
168
|
-
return
|
|
169
|
-
|
|
185
|
+
return NOT_CAPTURED;
|
|
186
|
+
// content-length lets a huge body be skipped WITHOUT reading it at all --
|
|
187
|
+
// the whole point of the cap. Playwright still has to buffer the response
|
|
188
|
+
// internally to serve .text(), but this collector's own memory never sees it.
|
|
189
|
+
const declaredLength = parseContentLength(headers);
|
|
190
|
+
if (declaredLength !== null && declaredLength > MAX_RESPONSE_BODY_BYTES) {
|
|
191
|
+
return { body: null, bodyTruncated: true, bodyByteLength: declaredLength };
|
|
192
|
+
}
|
|
193
|
+
const text = await response.text().catch(() => null);
|
|
194
|
+
if (text === null)
|
|
195
|
+
return NOT_CAPTURED;
|
|
196
|
+
const byteLength = Buffer.byteLength(text, "utf8");
|
|
197
|
+
if (byteLength <= MAX_RESPONSE_BODY_BYTES) {
|
|
198
|
+
return { body: text, bodyTruncated: false, bodyByteLength: byteLength };
|
|
199
|
+
}
|
|
200
|
+
// content-length was absent or understated -- cut here instead, after the
|
|
201
|
+
// fact, and disclose the real measured size rather than the claimed one.
|
|
202
|
+
const kept = Buffer.from(text, "utf8").subarray(0, MAX_RESPONSE_BODY_BYTES).toString("utf8");
|
|
203
|
+
return { body: kept, bodyTruncated: true, bodyByteLength: byteLength };
|
|
170
204
|
}
|
|
171
205
|
export function createBrowserNetworkCollector(options) {
|
|
172
206
|
const { session } = options;
|
|
@@ -412,7 +446,7 @@ export function createBrowserNetworkCollector(options) {
|
|
|
412
446
|
requestId: fromResponse.requestId !== null ? "response-headers" : fromRequest.requestId !== null ? "request-headers" : null,
|
|
413
447
|
};
|
|
414
448
|
const status = response.status();
|
|
415
|
-
const body = await captureResponseBody(response, headers);
|
|
449
|
+
const { body, bodyTruncated, bodyByteLength } = await captureResponseBody(response, headers);
|
|
416
450
|
const basePayload = {
|
|
417
451
|
status,
|
|
418
452
|
// B3: a real response arrived, so this is "answered" regardless of
|
|
@@ -424,6 +458,12 @@ export function createBrowserNetworkCollector(options) {
|
|
|
424
458
|
url: response.url(),
|
|
425
459
|
headers,
|
|
426
460
|
body,
|
|
461
|
+
// RT-261: additive. `body` may now be null or a truncated prefix
|
|
462
|
+
// because the real body exceeded MAX_RESPONSE_BODY_BYTES --
|
|
463
|
+
// bodyTruncated/bodyByteLength say so rather than leaving a null/short
|
|
464
|
+
// body indistinguishable from "the response really was empty/short".
|
|
465
|
+
bodyTruncated,
|
|
466
|
+
bodyByteLength,
|
|
427
467
|
timing: request.timing(),
|
|
428
468
|
browserSessionId: session.sessionId,
|
|
429
469
|
correlationOrigin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-network-collector.js","sourceRoot":"","sources":["../src/browser-network-collector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-network-collector.js","sourceRoot":"","sources":["../src/browser-network-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recording: turns a HUMAN's own interactions with an already-open page into
|
|
3
|
+
* an ordered, timestamped stream a host can hand straight to a scenario
|
|
4
|
+
* builder -- the descry-core follow-up this package owes
|
|
5
|
+
* (`documents/decisions-inbox/DEC-NEXT-browser-recording-primitive.md`,
|
|
6
|
+
* `descry-core`'s `packages/mcp/src/browser/driver.ts`:
|
|
7
|
+
* `BrowserPageSession.startRecording`/`stopRecording`). Nothing here writes
|
|
8
|
+
* anything or drives the page itself -- the opposite direction from
|
|
9
|
+
* `BrowserActionCollector`, which *commands* the page and reports what it
|
|
10
|
+
* did. This collector only listens.
|
|
11
|
+
*
|
|
12
|
+
* Four kinds of interaction, matching the port's own `BrowserActionKind`
|
|
13
|
+
* vocabulary so the host can forward a captured event as a
|
|
14
|
+
* `PerformedTarget`/`PerformedStep` with no translation of the action name
|
|
15
|
+
* itself:
|
|
16
|
+
* - `click`, on the same interactive-element set `playwright-driver.ts`'s
|
|
17
|
+
* own `INTERACTIVE` constant already uses for a snapshot
|
|
18
|
+
* (`a, button, input, select, textarea, [role], [onclick], summary`) --
|
|
19
|
+
* clicking a checkbox or radio is captured here, not by the `change`
|
|
20
|
+
* listener below (see that listener's own comment on why).
|
|
21
|
+
* - `fill`, for a text field's value once it is COMMITTED -- the native
|
|
22
|
+
* `change` event, which a text `<input>`/`<textarea>` fires on blur only
|
|
23
|
+
* when its value actually changed since focus. Not `input`: capturing
|
|
24
|
+
* every keystroke would record a value no scenario replay wants (a
|
|
25
|
+
* partially-typed string), and `fill`, not `type`, because a recording
|
|
26
|
+
* only ever knows a field's final value, never the keystroke sequence
|
|
27
|
+
* that produced it -- the same distinction `browser-action-collector.ts`
|
|
28
|
+
* draws between its two text verbs, resolved here the only way it can be.
|
|
29
|
+
* - `select`, for a `<select>`'s `change` event -- its own branch, not the
|
|
30
|
+
* text-field one, because "a chooser's value changed" and "a field's text
|
|
31
|
+
* was committed" are different facts (mirrors `BrowserActionCollector
|
|
32
|
+
* .select()`).
|
|
33
|
+
* - `navigate`, for a real top-level (main-frame) navigation, observed
|
|
34
|
+
* directly off Playwright's own `framenavigated` rather than through the
|
|
35
|
+
* page-side script -- the frame that navigated *is* the fact, and asking
|
|
36
|
+
* the page to report its own navigation would miss the first instant of
|
|
37
|
+
* the new document.
|
|
38
|
+
*
|
|
39
|
+
* **Passwords never leave the page.** A field this collector's page-side
|
|
40
|
+
* script recognises as a password field (`type="password"`, or
|
|
41
|
+
* `autocomplete="current-password"`/`"new-password"`) reports `secret: true`
|
|
42
|
+
* and never reads `.value` into the payload it sends across the binding at
|
|
43
|
+
* all -- not captured-then-redacted, never captured. `text` on the resulting
|
|
44
|
+
* `RecordedInteraction` is `null` whenever `secret` is `true`; assembling the
|
|
45
|
+
* actual `${credential:NAME}` placeholder is the host's job
|
|
46
|
+
* (`recordedSecretCredentialName`/`recordedSecretPlaceholder`,
|
|
47
|
+
* `descry-core`'s `driver.ts`) because only the host knows this session's
|
|
48
|
+
* running count of secrets recorded so far -- the ordinal that keeps two
|
|
49
|
+
* distinct password fields from colliding onto the same credential name.
|
|
50
|
+
*
|
|
51
|
+
* **Selector preference** reuses the identical tiered rule
|
|
52
|
+
* `playwright-driver.ts`'s own `computeSelector` already applies for a
|
|
53
|
+
* snapshot element: a `data-testid`/`data-test` hook first, then a
|
|
54
|
+
* non-generated `id`, then a named form control, then an
|
|
55
|
+
* aria-labelled-and-roled element, then a bounded structural path anchored at
|
|
56
|
+
* the nearest ancestor carrying one of the above -- each tier accepted only
|
|
57
|
+
* when it is unique in the element's own root (`document`, or the open
|
|
58
|
+
* shadow root it lives in). It is restated here, not imported, for the same
|
|
59
|
+
* reason `driver.ts` restates `PerformedTarget` rather than importing a
|
|
60
|
+
* scenario type: the string below is serialised into the page verbatim
|
|
61
|
+
* (`page.addInitScript`/`page.evaluate`), and a page-side script cannot
|
|
62
|
+
* import a Node module.
|
|
63
|
+
*
|
|
64
|
+
* **Listener lifecycle.** `page.exposeFunction` and `page.addInitScript` are
|
|
65
|
+
* each installed at most once per collector instance (lazily, on the first
|
|
66
|
+
* `start()`) -- Playwright refuses a second `exposeFunction` under the same
|
|
67
|
+
* name, and a second `addInitScript` would double-register the in-page
|
|
68
|
+
* listeners on every navigation after that. Because `addInitScript` "doesn't
|
|
69
|
+
* reach an already-loaded document" (the same contract every other probe in
|
|
70
|
+
* this package documents -- `frontend-initiator-capture.ts`,
|
|
71
|
+
* `identity-grounding`'s probes), `start()` ALSO runs the identical
|
|
72
|
+
* installer directly via `page.evaluate` against whatever document is
|
|
73
|
+
* current right now, idempotently (a `window` marker skips a second
|
|
74
|
+
* install), so a recording that starts mid-session on an already-open page
|
|
75
|
+
* is not silently missing its first document's events.
|
|
76
|
+
*
|
|
77
|
+
* A capturing session can therefore be started and stopped more than once
|
|
78
|
+
* without re-installing anything: `start()`/`stop()` do not attach or detach
|
|
79
|
+
* the page-side listeners themselves (Playwright exposes no way to
|
|
80
|
+
* un-expose a function or un-register an init script), they gate a
|
|
81
|
+
* `capturing` flag the Node-side binding handler checks before pushing to
|
|
82
|
+
* the buffer -- the identical "an unattached listener produces nothing"
|
|
83
|
+
* discipline `descry-core`'s fake driver already documents for its own
|
|
84
|
+
* `recordHuman*` methods. The one exception is the `framenavigated`
|
|
85
|
+
* listener, which genuinely is `page.on`/`page.off` in `start()`/`stop()`,
|
|
86
|
+
* matching `BrowserConsoleCollector`'s own precedent, because Playwright
|
|
87
|
+
* offers a real way to detach it.
|
|
88
|
+
*/
|
|
89
|
+
import type { BrowserSession } from "./browser-session.ts";
|
|
90
|
+
/** The element actually acted on -- role, accessible name, a selector when one is addressable. Mirrors the port's own `PerformedTarget` field-for-field so a host can forward this unmodified. */
|
|
91
|
+
export interface RecordedTarget {
|
|
92
|
+
readonly role: string;
|
|
93
|
+
readonly name: string;
|
|
94
|
+
/** Null when no candidate was unique in this element's own root -- the same "no guessed selector" rule every other selector computation in this repo follows. */
|
|
95
|
+
readonly selector: string | null;
|
|
96
|
+
}
|
|
97
|
+
/** One human-driven interaction, in the order it was observed. */
|
|
98
|
+
export interface RecordedInteraction {
|
|
99
|
+
readonly action: "click" | "fill" | "select" | "navigate";
|
|
100
|
+
/** The element acted on. Null for `navigate`, which acts on the page, not an element. */
|
|
101
|
+
readonly target: RecordedTarget | null;
|
|
102
|
+
/** Where a `navigate` went. Null for every other action. */
|
|
103
|
+
readonly url: string | null;
|
|
104
|
+
/** The committed value, for `fill`/`select`. Null for `click`/`navigate`, and ALWAYS null when `secret` is true -- see this module's header. */
|
|
105
|
+
readonly text: string | null;
|
|
106
|
+
/** True only for a `fill` whose source field this collector's page-side script recognised as a password field. When true, `text` is null and was never populated from the field's real value in the first place. */
|
|
107
|
+
readonly secret: boolean;
|
|
108
|
+
readonly at: string;
|
|
109
|
+
}
|
|
110
|
+
export interface BrowserRecordingCollectorOptions {
|
|
111
|
+
readonly session: BrowserSession;
|
|
112
|
+
}
|
|
113
|
+
export interface BrowserRecordingCollector {
|
|
114
|
+
/** Starts (or resumes) capturing. Throws if the session's page has already crashed or closed, or if this collector is already capturing -- call `stop()` first. */
|
|
115
|
+
start(): Promise<void>;
|
|
116
|
+
/** Stops capturing and returns every interaction captured since `start()`, in order. Throws if this collector is not currently capturing. */
|
|
117
|
+
stop(): Promise<readonly RecordedInteraction[]>;
|
|
118
|
+
}
|
|
119
|
+
export declare function createBrowserRecordingCollector(options: BrowserRecordingCollectorOptions): BrowserRecordingCollector;
|
|
120
|
+
//# sourceMappingURL=browser-recording-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-recording-collector.d.ts","sourceRoot":"","sources":["../src/browser-recording-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,kMAAkM;AAClM,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iKAAiK;IACjK,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC1D,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gJAAgJ;IAChJ,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oNAAoN;IACpN,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,mKAAmK;IACnK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,6IAA6I;IAC7I,IAAI,IAAI,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;CACjD;AAqOD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,gCAAgC,GAAG,yBAAyB,CAuEpH"}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recording: turns a HUMAN's own interactions with an already-open page into
|
|
3
|
+
* an ordered, timestamped stream a host can hand straight to a scenario
|
|
4
|
+
* builder -- the descry-core follow-up this package owes
|
|
5
|
+
* (`documents/decisions-inbox/DEC-NEXT-browser-recording-primitive.md`,
|
|
6
|
+
* `descry-core`'s `packages/mcp/src/browser/driver.ts`:
|
|
7
|
+
* `BrowserPageSession.startRecording`/`stopRecording`). Nothing here writes
|
|
8
|
+
* anything or drives the page itself -- the opposite direction from
|
|
9
|
+
* `BrowserActionCollector`, which *commands* the page and reports what it
|
|
10
|
+
* did. This collector only listens.
|
|
11
|
+
*
|
|
12
|
+
* Four kinds of interaction, matching the port's own `BrowserActionKind`
|
|
13
|
+
* vocabulary so the host can forward a captured event as a
|
|
14
|
+
* `PerformedTarget`/`PerformedStep` with no translation of the action name
|
|
15
|
+
* itself:
|
|
16
|
+
* - `click`, on the same interactive-element set `playwright-driver.ts`'s
|
|
17
|
+
* own `INTERACTIVE` constant already uses for a snapshot
|
|
18
|
+
* (`a, button, input, select, textarea, [role], [onclick], summary`) --
|
|
19
|
+
* clicking a checkbox or radio is captured here, not by the `change`
|
|
20
|
+
* listener below (see that listener's own comment on why).
|
|
21
|
+
* - `fill`, for a text field's value once it is COMMITTED -- the native
|
|
22
|
+
* `change` event, which a text `<input>`/`<textarea>` fires on blur only
|
|
23
|
+
* when its value actually changed since focus. Not `input`: capturing
|
|
24
|
+
* every keystroke would record a value no scenario replay wants (a
|
|
25
|
+
* partially-typed string), and `fill`, not `type`, because a recording
|
|
26
|
+
* only ever knows a field's final value, never the keystroke sequence
|
|
27
|
+
* that produced it -- the same distinction `browser-action-collector.ts`
|
|
28
|
+
* draws between its two text verbs, resolved here the only way it can be.
|
|
29
|
+
* - `select`, for a `<select>`'s `change` event -- its own branch, not the
|
|
30
|
+
* text-field one, because "a chooser's value changed" and "a field's text
|
|
31
|
+
* was committed" are different facts (mirrors `BrowserActionCollector
|
|
32
|
+
* .select()`).
|
|
33
|
+
* - `navigate`, for a real top-level (main-frame) navigation, observed
|
|
34
|
+
* directly off Playwright's own `framenavigated` rather than through the
|
|
35
|
+
* page-side script -- the frame that navigated *is* the fact, and asking
|
|
36
|
+
* the page to report its own navigation would miss the first instant of
|
|
37
|
+
* the new document.
|
|
38
|
+
*
|
|
39
|
+
* **Passwords never leave the page.** A field this collector's page-side
|
|
40
|
+
* script recognises as a password field (`type="password"`, or
|
|
41
|
+
* `autocomplete="current-password"`/`"new-password"`) reports `secret: true`
|
|
42
|
+
* and never reads `.value` into the payload it sends across the binding at
|
|
43
|
+
* all -- not captured-then-redacted, never captured. `text` on the resulting
|
|
44
|
+
* `RecordedInteraction` is `null` whenever `secret` is `true`; assembling the
|
|
45
|
+
* actual `${credential:NAME}` placeholder is the host's job
|
|
46
|
+
* (`recordedSecretCredentialName`/`recordedSecretPlaceholder`,
|
|
47
|
+
* `descry-core`'s `driver.ts`) because only the host knows this session's
|
|
48
|
+
* running count of secrets recorded so far -- the ordinal that keeps two
|
|
49
|
+
* distinct password fields from colliding onto the same credential name.
|
|
50
|
+
*
|
|
51
|
+
* **Selector preference** reuses the identical tiered rule
|
|
52
|
+
* `playwright-driver.ts`'s own `computeSelector` already applies for a
|
|
53
|
+
* snapshot element: a `data-testid`/`data-test` hook first, then a
|
|
54
|
+
* non-generated `id`, then a named form control, then an
|
|
55
|
+
* aria-labelled-and-roled element, then a bounded structural path anchored at
|
|
56
|
+
* the nearest ancestor carrying one of the above -- each tier accepted only
|
|
57
|
+
* when it is unique in the element's own root (`document`, or the open
|
|
58
|
+
* shadow root it lives in). It is restated here, not imported, for the same
|
|
59
|
+
* reason `driver.ts` restates `PerformedTarget` rather than importing a
|
|
60
|
+
* scenario type: the string below is serialised into the page verbatim
|
|
61
|
+
* (`page.addInitScript`/`page.evaluate`), and a page-side script cannot
|
|
62
|
+
* import a Node module.
|
|
63
|
+
*
|
|
64
|
+
* **Listener lifecycle.** `page.exposeFunction` and `page.addInitScript` are
|
|
65
|
+
* each installed at most once per collector instance (lazily, on the first
|
|
66
|
+
* `start()`) -- Playwright refuses a second `exposeFunction` under the same
|
|
67
|
+
* name, and a second `addInitScript` would double-register the in-page
|
|
68
|
+
* listeners on every navigation after that. Because `addInitScript` "doesn't
|
|
69
|
+
* reach an already-loaded document" (the same contract every other probe in
|
|
70
|
+
* this package documents -- `frontend-initiator-capture.ts`,
|
|
71
|
+
* `identity-grounding`'s probes), `start()` ALSO runs the identical
|
|
72
|
+
* installer directly via `page.evaluate` against whatever document is
|
|
73
|
+
* current right now, idempotently (a `window` marker skips a second
|
|
74
|
+
* install), so a recording that starts mid-session on an already-open page
|
|
75
|
+
* is not silently missing its first document's events.
|
|
76
|
+
*
|
|
77
|
+
* A capturing session can therefore be started and stopped more than once
|
|
78
|
+
* without re-installing anything: `start()`/`stop()` do not attach or detach
|
|
79
|
+
* the page-side listeners themselves (Playwright exposes no way to
|
|
80
|
+
* un-expose a function or un-register an init script), they gate a
|
|
81
|
+
* `capturing` flag the Node-side binding handler checks before pushing to
|
|
82
|
+
* the buffer -- the identical "an unattached listener produces nothing"
|
|
83
|
+
* discipline `descry-core`'s fake driver already documents for its own
|
|
84
|
+
* `recordHuman*` methods. The one exception is the `framenavigated`
|
|
85
|
+
* listener, which genuinely is `page.on`/`page.off` in `start()`/`stop()`,
|
|
86
|
+
* matching `BrowserConsoleCollector`'s own precedent, because Playwright
|
|
87
|
+
* offers a real way to detach it.
|
|
88
|
+
*/
|
|
89
|
+
const RECORDING_BINDING_NAME = "__descryRecordInteraction";
|
|
90
|
+
/** The same interactive-element set `playwright-driver.ts`'s `INTERACTIVE` constant already scopes a snapshot to -- kept identical so a click this collector captures is always one a snapshot-based replay could also have resolved. */
|
|
91
|
+
const INTERACTIVE_SELECTOR = "a, button, input, select, textarea, [role], [onclick], summary";
|
|
92
|
+
/**
|
|
93
|
+
* Serialised and run inside the page (`page.addInitScript`/`page.evaluate`)
|
|
94
|
+
* -- closes over nothing in this module. Idempotent: re-running it against a
|
|
95
|
+
* document that already has the listeners installed (the `window` marker)
|
|
96
|
+
* is a deliberate no-op, so calling it once via `addInitScript`'s
|
|
97
|
+
* registration and once more directly via `page.evaluate` at `start()` time
|
|
98
|
+
* (for the document already open when recording starts) never double-fires
|
|
99
|
+
* an event.
|
|
100
|
+
*/
|
|
101
|
+
function installerScriptSource() {
|
|
102
|
+
return `(() => {
|
|
103
|
+
const MARKER = "__descryRecordingInstalled";
|
|
104
|
+
if (window[MARKER] === true) return;
|
|
105
|
+
const bind = window[${JSON.stringify(RECORDING_BINDING_NAME)}];
|
|
106
|
+
if (typeof bind !== "function") return;
|
|
107
|
+
window[MARKER] = true;
|
|
108
|
+
|
|
109
|
+
const GENERATED_ID = /[0-9a-f]{8}|:r[0-9a-z]+:|^\\s*$/i;
|
|
110
|
+
const FORM_CONTROLS = ["input", "select", "textarea", "button"];
|
|
111
|
+
const TEXT_INPUT_TYPES = ["", "text", "email", "tel", "url", "search", "number", "password"];
|
|
112
|
+
|
|
113
|
+
function escapeAttrValue(value) {
|
|
114
|
+
return value.replace(/\\\\/g, "\\\\\\\\").replace(/"/g, '\\\\"');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function rootOf(el) {
|
|
118
|
+
return typeof el.getRootNode === "function" ? el.getRootNode() : el.ownerDocument;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function isUnique(root, candidate) {
|
|
122
|
+
try {
|
|
123
|
+
return root.querySelectorAll(candidate).length === 1;
|
|
124
|
+
} catch (e) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function stableHookSelector(node) {
|
|
130
|
+
const testId = node.getAttribute("data-testid");
|
|
131
|
+
if (testId && testId.trim() !== "") return '[data-testid="' + escapeAttrValue(testId) + '"]';
|
|
132
|
+
const testAttr = node.getAttribute("data-test");
|
|
133
|
+
if (testAttr && testAttr.trim() !== "") return '[data-test="' + escapeAttrValue(testAttr) + '"]';
|
|
134
|
+
const id = node.getAttribute("id");
|
|
135
|
+
if (id && !GENERATED_ID.test(id)) return '[id="' + escapeAttrValue(id) + '"]';
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function nthOfTypeSegment(node, parent) {
|
|
140
|
+
const tag = node.tagName.toLowerCase();
|
|
141
|
+
const siblings = parent.querySelectorAll(":scope > " + tag);
|
|
142
|
+
if (siblings.length <= 1) return tag;
|
|
143
|
+
for (let i = 0; i < siblings.length; i += 1) {
|
|
144
|
+
if (siblings[i] === node) return tag + ":nth-of-type(" + (i + 1) + ")";
|
|
145
|
+
}
|
|
146
|
+
return tag;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function structuralPath(target, root) {
|
|
150
|
+
const segments = [];
|
|
151
|
+
let node = target;
|
|
152
|
+
for (let depth = 0; depth < 6; depth += 1) {
|
|
153
|
+
const parent = node.parentElement;
|
|
154
|
+
if (!parent) return null;
|
|
155
|
+
segments.unshift(nthOfTypeSegment(node, parent));
|
|
156
|
+
const hook = stableHookSelector(parent);
|
|
157
|
+
if (hook) {
|
|
158
|
+
const candidate = hook + " > " + segments.join(" > ");
|
|
159
|
+
return isUnique(root, candidate) ? candidate : null;
|
|
160
|
+
}
|
|
161
|
+
node = parent;
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function computeSelector(target) {
|
|
167
|
+
const root = rootOf(target);
|
|
168
|
+
const testId = target.getAttribute("data-testid");
|
|
169
|
+
if (testId && testId.trim() !== "") {
|
|
170
|
+
const candidate = '[data-testid="' + escapeAttrValue(testId) + '"]';
|
|
171
|
+
if (isUnique(root, candidate)) return candidate;
|
|
172
|
+
}
|
|
173
|
+
const testAttr = target.getAttribute("data-test");
|
|
174
|
+
if (testAttr && testAttr.trim() !== "") {
|
|
175
|
+
const candidate = '[data-test="' + escapeAttrValue(testAttr) + '"]';
|
|
176
|
+
if (isUnique(root, candidate)) return candidate;
|
|
177
|
+
}
|
|
178
|
+
const id = target.getAttribute("id");
|
|
179
|
+
if (id && !GENERATED_ID.test(id)) {
|
|
180
|
+
const candidate = '[id="' + escapeAttrValue(id) + '"]';
|
|
181
|
+
if (isUnique(root, candidate)) return candidate;
|
|
182
|
+
}
|
|
183
|
+
const tag = target.tagName.toLowerCase();
|
|
184
|
+
const name = target.getAttribute("name");
|
|
185
|
+
if (name && name.trim() !== "" && FORM_CONTROLS.indexOf(tag) !== -1) {
|
|
186
|
+
const candidate = tag + '[name="' + escapeAttrValue(name) + '"]';
|
|
187
|
+
if (isUnique(root, candidate)) return candidate;
|
|
188
|
+
}
|
|
189
|
+
const explicitRole = target.getAttribute("role");
|
|
190
|
+
const ariaLabel = target.getAttribute("aria-label");
|
|
191
|
+
if (explicitRole && ariaLabel && ariaLabel.trim() !== "") {
|
|
192
|
+
const candidate = '[role="' + escapeAttrValue(explicitRole) + '"][aria-label="' + escapeAttrValue(ariaLabel) + '"]';
|
|
193
|
+
if (isUnique(root, candidate)) return candidate;
|
|
194
|
+
}
|
|
195
|
+
return structuralPath(target, root);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function derivedRole(el) {
|
|
199
|
+
const tag = el.tagName.toLowerCase();
|
|
200
|
+
const explicit = el.getAttribute("role");
|
|
201
|
+
if (explicit) return explicit;
|
|
202
|
+
const type = (el.getAttribute("type") || "").toLowerCase();
|
|
203
|
+
if (tag === "a") return "link";
|
|
204
|
+
if (tag === "button") return "button";
|
|
205
|
+
if (tag === "textarea") return "textbox";
|
|
206
|
+
if (tag === "summary") return "button";
|
|
207
|
+
if (tag === "select") {
|
|
208
|
+
const multiple = el.getAttribute("multiple") !== null;
|
|
209
|
+
const size = Number(el.getAttribute("size") || "1");
|
|
210
|
+
return multiple || size > 1 ? "listbox" : "combobox";
|
|
211
|
+
}
|
|
212
|
+
if (tag !== "input") return tag;
|
|
213
|
+
switch (type) {
|
|
214
|
+
case "button":
|
|
215
|
+
case "submit":
|
|
216
|
+
case "reset":
|
|
217
|
+
case "image":
|
|
218
|
+
return "button";
|
|
219
|
+
case "checkbox":
|
|
220
|
+
return "checkbox";
|
|
221
|
+
case "radio":
|
|
222
|
+
return "radio";
|
|
223
|
+
case "range":
|
|
224
|
+
return "slider";
|
|
225
|
+
case "number":
|
|
226
|
+
return "spinbutton";
|
|
227
|
+
case "search":
|
|
228
|
+
return "searchbox";
|
|
229
|
+
default:
|
|
230
|
+
return "textbox";
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function derivedName(el) {
|
|
235
|
+
const tag = el.tagName.toLowerCase();
|
|
236
|
+
const type = (el.getAttribute("type") || "").toLowerCase();
|
|
237
|
+
const aria = el.getAttribute("aria-label");
|
|
238
|
+
if (aria && aria.trim() !== "") return aria;
|
|
239
|
+
if (tag !== "select") {
|
|
240
|
+
const inner = (el.innerText || "").trim();
|
|
241
|
+
if (inner !== "") return inner;
|
|
242
|
+
const text = (el.textContent || "").trim();
|
|
243
|
+
if (text !== "") return text;
|
|
244
|
+
}
|
|
245
|
+
if (tag === "input" && (type === "button" || type === "submit" || type === "reset")) {
|
|
246
|
+
const value = el.getAttribute("value");
|
|
247
|
+
if (value && value.trim() !== "") return value.trim();
|
|
248
|
+
}
|
|
249
|
+
return el.getAttribute("placeholder") || el.getAttribute("title") || el.getAttribute("name") || "";
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function isPasswordField(el) {
|
|
253
|
+
if (el.tagName.toLowerCase() !== "input") return false;
|
|
254
|
+
const type = (el.getAttribute("type") || "").toLowerCase();
|
|
255
|
+
if (type === "password") return true;
|
|
256
|
+
const autocomplete = (el.getAttribute("autocomplete") || "").toLowerCase();
|
|
257
|
+
return autocomplete === "current-password" || autocomplete === "new-password";
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function describeTarget(el) {
|
|
261
|
+
return { role: derivedRole(el), name: derivedName(el).slice(0, 200), selector: computeSelector(el) };
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
document.addEventListener(
|
|
265
|
+
"click",
|
|
266
|
+
function (ev) {
|
|
267
|
+
const el = ev.target && typeof ev.target.closest === "function" ? ev.target.closest(${JSON.stringify(INTERACTIVE_SELECTOR)}) : null;
|
|
268
|
+
if (!el) return;
|
|
269
|
+
const described = describeTarget(el);
|
|
270
|
+
bind({ action: "click", role: described.role, name: described.name, selector: described.selector, value: null, secret: false }).catch(function () {});
|
|
271
|
+
},
|
|
272
|
+
true,
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
document.addEventListener(
|
|
276
|
+
"change",
|
|
277
|
+
function (ev) {
|
|
278
|
+
const el = ev.target;
|
|
279
|
+
if (!el || !el.tagName) return;
|
|
280
|
+
const tag = el.tagName.toLowerCase();
|
|
281
|
+
if (tag === "select") {
|
|
282
|
+
const described = describeTarget(el);
|
|
283
|
+
const value = el.multiple ? Array.prototype.map.call(el.selectedOptions, function (o) { return o.value; }).join(",") : el.value;
|
|
284
|
+
bind({ action: "select", role: described.role, name: described.name, selector: described.selector, value: value, secret: false }).catch(function () {});
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (tag === "input" || tag === "textarea") {
|
|
288
|
+
const type = (el.getAttribute("type") || "").toLowerCase();
|
|
289
|
+
// Only a text-shaped control's committed value is a "fill" -- a checkbox/radio's
|
|
290
|
+
// own change is a state toggle, not a value entered, and is already reported by
|
|
291
|
+
// the click listener above (the click that toggled it matches INTERACTIVE too).
|
|
292
|
+
if (tag === "input" && TEXT_INPUT_TYPES.indexOf(type) === -1) return;
|
|
293
|
+
const secret = isPasswordField(el);
|
|
294
|
+
const described = describeTarget(el);
|
|
295
|
+
// The whole point: a password field's real value is never read into this payload at all.
|
|
296
|
+
bind({ action: "fill", role: described.role, name: described.name, selector: described.selector, value: secret ? null : el.value, secret: secret }).catch(function () {});
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
true,
|
|
300
|
+
);
|
|
301
|
+
})();`;
|
|
302
|
+
}
|
|
303
|
+
export function createBrowserRecordingCollector(options) {
|
|
304
|
+
const { session } = options;
|
|
305
|
+
const page = session.page;
|
|
306
|
+
let capturing = false;
|
|
307
|
+
let buffer = [];
|
|
308
|
+
let bindingInstalled = false;
|
|
309
|
+
function onRecordedInteraction(payload) {
|
|
310
|
+
if (!capturing)
|
|
311
|
+
return; // an unattached listener producing nothing -- see this module's header.
|
|
312
|
+
buffer.push({
|
|
313
|
+
action: payload.action,
|
|
314
|
+
target: { role: payload.role, name: payload.name, selector: payload.selector },
|
|
315
|
+
url: null,
|
|
316
|
+
text: payload.secret ? null : payload.value,
|
|
317
|
+
secret: payload.secret,
|
|
318
|
+
at: new Date().toISOString(),
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
function onFrameNavigated(frame) {
|
|
322
|
+
if (!capturing)
|
|
323
|
+
return;
|
|
324
|
+
if (frame !== page.mainFrame())
|
|
325
|
+
return; // "top-level" -- an iframe's own navigation is not this session's page moving.
|
|
326
|
+
buffer.push({ action: "navigate", target: null, url: frame.url(), text: null, secret: false, at: new Date().toISOString() });
|
|
327
|
+
}
|
|
328
|
+
async function ensureInstalled() {
|
|
329
|
+
if (!bindingInstalled) {
|
|
330
|
+
// Playwright refuses a second `exposeFunction` under the same name and would
|
|
331
|
+
// double-register in-page listeners on a second `addInitScript` -- both installed
|
|
332
|
+
// at most once per collector instance, ever.
|
|
333
|
+
await page.exposeFunction(RECORDING_BINDING_NAME, onRecordedInteraction);
|
|
334
|
+
await page.addInitScript({ content: installerScriptSource() });
|
|
335
|
+
bindingInstalled = true;
|
|
336
|
+
}
|
|
337
|
+
// `addInitScript` only reaches documents navigated to AFTER it is registered -- this
|
|
338
|
+
// session may already be sitting on a page when recording starts, so the identical,
|
|
339
|
+
// idempotent installer also runs directly against whatever document is current now.
|
|
340
|
+
await page.evaluate(installerScriptSource()).catch(() => {
|
|
341
|
+
// No accessible document to evaluate against right now (e.g. mid-navigation). Not
|
|
342
|
+
// fatal: `addInitScript` still covers every document from here forward, so a
|
|
343
|
+
// human's first observable interaction is only missed if it happens in the exact
|
|
344
|
+
// instant no document is present to click or type into.
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
async start() {
|
|
349
|
+
if (!session.isUsable()) {
|
|
350
|
+
throw new Error(`browser session ${session.sessionId}: the page has already crashed or closed.`);
|
|
351
|
+
}
|
|
352
|
+
if (capturing) {
|
|
353
|
+
throw new Error(`browser session ${session.sessionId}: already recording. Call stop() before starting again.`);
|
|
354
|
+
}
|
|
355
|
+
await ensureInstalled();
|
|
356
|
+
buffer = [];
|
|
357
|
+
capturing = true;
|
|
358
|
+
page.on("framenavigated", onFrameNavigated);
|
|
359
|
+
},
|
|
360
|
+
async stop() {
|
|
361
|
+
if (!capturing) {
|
|
362
|
+
throw new Error(`browser session ${session.sessionId}: not currently recording. Call start() first.`);
|
|
363
|
+
}
|
|
364
|
+
page.off("framenavigated", onFrameNavigated);
|
|
365
|
+
capturing = false;
|
|
366
|
+
const captured = buffer;
|
|
367
|
+
buffer = [];
|
|
368
|
+
return captured;
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=browser-recording-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-recording-collector.js","sourceRoot":"","sources":["../src/browser-recording-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -232,4 +232,73 @@ export declare class BrowserUnavailableError extends Error {
|
|
|
232
232
|
*/
|
|
233
233
|
export declare function launchBrowserSessionOrRefuse(options?: BrowserSessionOptions): Promise<BrowserSessionLaunch>;
|
|
234
234
|
export declare function launchBrowserSession(options?: BrowserSessionOptions): Promise<BrowserSession>;
|
|
235
|
+
/**
|
|
236
|
+
* RT-264 — browser reuse. Build A's own lane (`documents/plans/product-improvement`,
|
|
237
|
+
* lane 5) named the cost this replaces: every `browser_start_session` used to pay a
|
|
238
|
+
* fresh `chromium.launch()` (measured, on other Chromium-launching paths in this
|
|
239
|
+
* codebase, as the dominant cost over a warm context) even though most of what a
|
|
240
|
+
* session needs — its own cookies, storage, cache and page — lives at the *context*
|
|
241
|
+
* level, not the *browser* level. One `SharedBrowserManager` launches Chromium once,
|
|
242
|
+
* lazily, and hands every `acquireSession()` caller a fresh `BrowserContext` off that
|
|
243
|
+
* one process, exactly as isolated from every other live context as before (Playwright
|
|
244
|
+
* contexts don't share cookies/storage/cache with one another — see the isolation test
|
|
245
|
+
* this ships alongside, `browser-session-reuse.test.ts`).
|
|
246
|
+
*
|
|
247
|
+
* **Isolation verified, not yet wired.** The isolation test (Build B step 7) has run:
|
|
248
|
+
* green against this manager, red against a mutation sharing one context. It is still
|
|
249
|
+
* not the live path for `browser_start_session` in `@descryy/mcp`'s
|
|
250
|
+
* `playwright-driver.ts`, and its speed/memory benefit is unmeasured (RT-264).
|
|
251
|
+
*
|
|
252
|
+
* What this manager owns, precisely:
|
|
253
|
+
* - Lazy launch: the shared `Browser` does not exist until the first `acquireSession()`.
|
|
254
|
+
* - Reuse: every later call gets a fresh context+page off the same `Browser`, via
|
|
255
|
+
* `createSessionFromBrowser` — the identical context-construction code the
|
|
256
|
+
* solo-launch path above uses, so reuse changes nothing about how a context is
|
|
257
|
+
* built, seeded or torn down at the context level.
|
|
258
|
+
* - Context-only close: a session's own `close()` (returned as part of `BrowserSession`)
|
|
259
|
+
* closes its context and releases its slot; it never touches the shared `Browser`.
|
|
260
|
+
* - Crash/disconnect: a `disconnected` event on the shared `Browser` nulls out this
|
|
261
|
+
* manager's held reference. The *next* `acquireSession()` notices the browser is gone
|
|
262
|
+
* and relaunches, reporting `relaunchedBrowser: true` so the caller can disclose it
|
|
263
|
+
* (rule 7) — a live session already holding a context on the dead browser is not
|
|
264
|
+
* rescued; it fails on its own next call, the same as any other browser crash.
|
|
265
|
+
* - Idle shutdown: once `liveSessionCount()` returns to zero, an idle timer starts; the
|
|
266
|
+
* shared browser is closed if it is still at zero when the timer fires. Any
|
|
267
|
+
* `acquireSession()` in between cancels the timer.
|
|
268
|
+
*/
|
|
269
|
+
export declare const SHARED_BROWSER_IDLE_TIMEOUT_MS: number;
|
|
270
|
+
export interface SharedBrowserAcquireResult {
|
|
271
|
+
readonly launched: true;
|
|
272
|
+
readonly session: BrowserSession;
|
|
273
|
+
/**
|
|
274
|
+
* True exactly when this call had to (re)launch the shared browser process itself —
|
|
275
|
+
* first use ever, or after a prior crash/disconnect — rather than hand out a context
|
|
276
|
+
* in one already running. A caller (`playwright-driver.ts`) should disclose this the
|
|
277
|
+
* same way it discloses any other honest-degradation fact (rule 7): it is the signal
|
|
278
|
+
* that this particular open paid the full launch cost anyway.
|
|
279
|
+
*/
|
|
280
|
+
readonly relaunchedBrowser: boolean;
|
|
281
|
+
}
|
|
282
|
+
export type SharedBrowserAcquireOutcome = SharedBrowserAcquireResult | ({
|
|
283
|
+
readonly launched: false;
|
|
284
|
+
} & ChromiumUnavailable);
|
|
285
|
+
export interface SharedBrowserManager {
|
|
286
|
+
/**
|
|
287
|
+
* Lazily launches the one shared Chromium process on first call; every later call
|
|
288
|
+
* reuses it and hands back a fresh context + page. Concurrent calls while the
|
|
289
|
+
* browser is still launching share that one launch rather than racing two.
|
|
290
|
+
*/
|
|
291
|
+
acquireSession(options?: BrowserSessionOptions): Promise<SharedBrowserAcquireOutcome>;
|
|
292
|
+
/** Contexts acquired via this manager and not yet closed. */
|
|
293
|
+
liveSessionCount(): number;
|
|
294
|
+
/**
|
|
295
|
+
* Closes the shared browser now, regardless of live session count. Test/shutdown use
|
|
296
|
+
* only — a session still holding a context on it is not asked to close first; its own
|
|
297
|
+
* next call simply fails, same as any other browser crash.
|
|
298
|
+
*/
|
|
299
|
+
dispose(): Promise<void>;
|
|
300
|
+
}
|
|
301
|
+
/** See the module doc above this constant — NOT SHIPPABLE until the isolation test
|
|
302
|
+
* (`browser-session-reuse.test.ts`) has actually been run and is green. */
|
|
303
|
+
export declare function createSharedBrowserManager(idleTimeoutMs?: number): SharedBrowserManager;
|
|
235
304
|
//# sourceMappingURL=browser-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../src/browser-session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../src/browser-session.ts"],"names":[],"mappings":"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"}
|
package/dist/browser-session.js
CHANGED
|
@@ -72,6 +72,24 @@ export async function launchBrowserSession(options = {}) {
|
|
|
72
72
|
}
|
|
73
73
|
async function launchWithExecutable(options, executablePath) {
|
|
74
74
|
const browser = await chromium.launch({ headless: options.headless ?? true, executablePath });
|
|
75
|
+
return createSessionFromBrowser(browser, options, async () => {
|
|
76
|
+
await browser.close();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The context/page half of a session's launch, factored out of
|
|
81
|
+
* `launchWithExecutable` (RT-264) so the fresh-browser-per-session path above and the
|
|
82
|
+
* shared-browser path below (`createSharedBrowserManager`) run the exact same context
|
|
83
|
+
* creation, auth seeding, video wiring and crash tracking -- reuse changes *which*
|
|
84
|
+
* `Browser` a context comes from and what happens when the context closes, never how
|
|
85
|
+
* the context itself is built.
|
|
86
|
+
*
|
|
87
|
+
* `afterContextClosed` is that seam: the solo path closes the browser along with its
|
|
88
|
+
* one context (old behaviour, unchanged); the shared path instead releases this
|
|
89
|
+
* context's slot back to the manager and leaves the browser running for the next
|
|
90
|
+
* caller.
|
|
91
|
+
*/
|
|
92
|
+
async function createSessionFromBrowser(browser, options, afterContextClosed) {
|
|
75
93
|
const sessionId = randomUUID();
|
|
76
94
|
// session-scoped temp dir, never caller-supplied (see BrowserConfiguration.recordVideo).
|
|
77
95
|
// created before newContext(): Playwright's recordVideo.dir must exist and be known at context-creation time.
|
|
@@ -121,7 +139,7 @@ async function launchWithExecutable(options, executablePath) {
|
|
|
121
139
|
isUsable: () => !crashed && !page.isClosed(),
|
|
122
140
|
async close() {
|
|
123
141
|
await context.close();
|
|
124
|
-
await
|
|
142
|
+
await afterContextClosed();
|
|
125
143
|
},
|
|
126
144
|
async saveStorageState(path) {
|
|
127
145
|
if (page.isClosed()) {
|
|
@@ -256,4 +274,131 @@ function originOf(url) {
|
|
|
256
274
|
function lowerCased(headers) {
|
|
257
275
|
return Object.fromEntries(Object.entries(headers).map(([name, value]) => [name.toLowerCase(), value]));
|
|
258
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* RT-264 — browser reuse. Build A's own lane (`documents/plans/product-improvement`,
|
|
279
|
+
* lane 5) named the cost this replaces: every `browser_start_session` used to pay a
|
|
280
|
+
* fresh `chromium.launch()` (measured, on other Chromium-launching paths in this
|
|
281
|
+
* codebase, as the dominant cost over a warm context) even though most of what a
|
|
282
|
+
* session needs — its own cookies, storage, cache and page — lives at the *context*
|
|
283
|
+
* level, not the *browser* level. One `SharedBrowserManager` launches Chromium once,
|
|
284
|
+
* lazily, and hands every `acquireSession()` caller a fresh `BrowserContext` off that
|
|
285
|
+
* one process, exactly as isolated from every other live context as before (Playwright
|
|
286
|
+
* contexts don't share cookies/storage/cache with one another — see the isolation test
|
|
287
|
+
* this ships alongside, `browser-session-reuse.test.ts`).
|
|
288
|
+
*
|
|
289
|
+
* **Isolation verified, not yet wired.** The isolation test (Build B step 7) has run:
|
|
290
|
+
* green against this manager, red against a mutation sharing one context. It is still
|
|
291
|
+
* not the live path for `browser_start_session` in `@descryy/mcp`'s
|
|
292
|
+
* `playwright-driver.ts`, and its speed/memory benefit is unmeasured (RT-264).
|
|
293
|
+
*
|
|
294
|
+
* What this manager owns, precisely:
|
|
295
|
+
* - Lazy launch: the shared `Browser` does not exist until the first `acquireSession()`.
|
|
296
|
+
* - Reuse: every later call gets a fresh context+page off the same `Browser`, via
|
|
297
|
+
* `createSessionFromBrowser` — the identical context-construction code the
|
|
298
|
+
* solo-launch path above uses, so reuse changes nothing about how a context is
|
|
299
|
+
* built, seeded or torn down at the context level.
|
|
300
|
+
* - Context-only close: a session's own `close()` (returned as part of `BrowserSession`)
|
|
301
|
+
* closes its context and releases its slot; it never touches the shared `Browser`.
|
|
302
|
+
* - Crash/disconnect: a `disconnected` event on the shared `Browser` nulls out this
|
|
303
|
+
* manager's held reference. The *next* `acquireSession()` notices the browser is gone
|
|
304
|
+
* and relaunches, reporting `relaunchedBrowser: true` so the caller can disclose it
|
|
305
|
+
* (rule 7) — a live session already holding a context on the dead browser is not
|
|
306
|
+
* rescued; it fails on its own next call, the same as any other browser crash.
|
|
307
|
+
* - Idle shutdown: once `liveSessionCount()` returns to zero, an idle timer starts; the
|
|
308
|
+
* shared browser is closed if it is still at zero when the timer fires. Any
|
|
309
|
+
* `acquireSession()` in between cancels the timer.
|
|
310
|
+
*/
|
|
311
|
+
export const SHARED_BROWSER_IDLE_TIMEOUT_MS = 5 * 60 * 1000; // starting value, not a measurement -- see RT-264. Chosen to match
|
|
312
|
+
/** See the module doc above this constant — NOT SHIPPABLE until the isolation test
|
|
313
|
+
* (`browser-session-reuse.test.ts`) has actually been run and is green. */
|
|
314
|
+
export function createSharedBrowserManager(idleTimeoutMs = SHARED_BROWSER_IDLE_TIMEOUT_MS) {
|
|
315
|
+
let browser = null;
|
|
316
|
+
let launchInFlight = null;
|
|
317
|
+
let liveCount = 0;
|
|
318
|
+
let idleTimer = null;
|
|
319
|
+
function cancelIdleTimer() {
|
|
320
|
+
if (idleTimer !== null) {
|
|
321
|
+
clearTimeout(idleTimer);
|
|
322
|
+
idleTimer = null;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function armIdleTimerIfIdle() {
|
|
326
|
+
cancelIdleTimer();
|
|
327
|
+
idleTimer = setTimeout(() => {
|
|
328
|
+
// Re-checked at fire time, not assumed from when the timer was armed -- an
|
|
329
|
+
// acquireSession() in between already cancelled this timer via
|
|
330
|
+
// cancelIdleTimer(), so reaching here with liveCount still 0 means the
|
|
331
|
+
// browser really has sat idle for the whole window.
|
|
332
|
+
if (liveCount === 0 && browser !== null) {
|
|
333
|
+
const toClose = browser;
|
|
334
|
+
browser = null;
|
|
335
|
+
void toClose.close().catch(() => { });
|
|
336
|
+
}
|
|
337
|
+
}, idleTimeoutMs);
|
|
338
|
+
}
|
|
339
|
+
async function ensureBrowser() {
|
|
340
|
+
if (browser !== null)
|
|
341
|
+
return { ok: true, browser, relaunched: false };
|
|
342
|
+
if (launchInFlight === null) {
|
|
343
|
+
launchInFlight = (async () => {
|
|
344
|
+
const chromiumBinary = resolveChromiumExecutable();
|
|
345
|
+
if (!chromiumBinary.available) {
|
|
346
|
+
const { available: _available, ...unavailable } = chromiumBinary;
|
|
347
|
+
return { ok: false, ...unavailable };
|
|
348
|
+
}
|
|
349
|
+
const launched = await chromium.launch({ headless: true, executablePath: chromiumBinary.executablePath });
|
|
350
|
+
// The shared browser process itself dying (not one page/context) -- noticed
|
|
351
|
+
// here so the NEXT acquireSession() relaunches rather than resolving a dead
|
|
352
|
+
// handle. Nulling `browser` (guarded by identity, in case a relaunch has
|
|
353
|
+
// already replaced it by the time this fires) is the only action taken; a
|
|
354
|
+
// live session already holding a context on it is left to fail on its own
|
|
355
|
+
// next call.
|
|
356
|
+
launched.on("disconnected", () => {
|
|
357
|
+
if (browser === launched)
|
|
358
|
+
browser = null;
|
|
359
|
+
});
|
|
360
|
+
return { ok: true, browser: launched };
|
|
361
|
+
})();
|
|
362
|
+
}
|
|
363
|
+
const result = await launchInFlight;
|
|
364
|
+
launchInFlight = null;
|
|
365
|
+
if (!result.ok)
|
|
366
|
+
return result;
|
|
367
|
+
const relaunched = browser === null;
|
|
368
|
+
browser = result.browser;
|
|
369
|
+
return { ok: true, browser: result.browser, relaunched };
|
|
370
|
+
}
|
|
371
|
+
return {
|
|
372
|
+
async acquireSession(options = {}) {
|
|
373
|
+
cancelIdleTimer();
|
|
374
|
+
const ensured = await ensureBrowser();
|
|
375
|
+
if (!ensured.ok) {
|
|
376
|
+
return {
|
|
377
|
+
launched: false,
|
|
378
|
+
refusal: ensured.refusal,
|
|
379
|
+
message: ensured.message,
|
|
380
|
+
remedy: ensured.remedy,
|
|
381
|
+
expectedExecutablePath: ensured.expectedExecutablePath,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
liveCount += 1;
|
|
385
|
+
const session = await createSessionFromBrowser(ensured.browser, options, async () => {
|
|
386
|
+
liveCount = Math.max(0, liveCount - 1);
|
|
387
|
+
if (liveCount === 0)
|
|
388
|
+
armIdleTimerIfIdle();
|
|
389
|
+
});
|
|
390
|
+
return { launched: true, session, relaunchedBrowser: ensured.relaunched };
|
|
391
|
+
},
|
|
392
|
+
liveSessionCount: () => liveCount,
|
|
393
|
+
async dispose() {
|
|
394
|
+
cancelIdleTimer();
|
|
395
|
+
liveCount = 0;
|
|
396
|
+
if (browser !== null) {
|
|
397
|
+
const toClose = browser;
|
|
398
|
+
browser = null;
|
|
399
|
+
await toClose.close().catch(() => { });
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
};
|
|
403
|
+
}
|
|
259
404
|
//# sourceMappingURL=browser-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../src/browser-session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../src/browser-session.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
export type { BrowserSessionOptions, BrowserSession, BrowserSessionAuth, SeededCookie, StorageStateSeed, StorageStateInjectionResult, ChromiumUnavailable, ChromiumAvailability, BrowserSessionLaunch, } from "./browser-session.ts";
|
|
2
|
-
export { launchBrowserSession, launchBrowserSessionOrRefuse, resolveChromiumExecutable, BrowserUnavailableError, CHROMIUM_INSTALL_REMEDY, } from "./browser-session.ts";
|
|
1
|
+
export type { BrowserSessionOptions, BrowserSession, BrowserSessionAuth, SeededCookie, StorageStateSeed, StorageStateInjectionResult, ChromiumUnavailable, ChromiumAvailability, BrowserSessionLaunch, SharedBrowserAcquireResult, SharedBrowserAcquireOutcome, SharedBrowserManager, } from "./browser-session.ts";
|
|
2
|
+
export { launchBrowserSession, launchBrowserSessionOrRefuse, resolveChromiumExecutable, BrowserUnavailableError, CHROMIUM_INSTALL_REMEDY, createSharedBrowserManager, SHARED_BROWSER_IDLE_TIMEOUT_MS, } from "./browser-session.ts";
|
|
3
3
|
export type { DomElementSnapshot } from "./dom-evidence.ts";
|
|
4
4
|
export { captureElementSnapshot } from "./dom-evidence.ts";
|
|
5
5
|
export type { BrowserActionCollectorOptions, BrowserActionCollector, WaitForOptions } from "./browser-action-collector.ts";
|
|
6
6
|
export { createBrowserActionCollector } from "./browser-action-collector.ts";
|
|
7
|
+
export type { BrowserRecordingCollectorOptions, BrowserRecordingCollector, RecordedTarget, RecordedInteraction, } from "./browser-recording-collector.ts";
|
|
8
|
+
export { createBrowserRecordingCollector } from "./browser-recording-collector.ts";
|
|
7
9
|
export type { BrowserConsoleCollectorOptions } from "./browser-console-collector.ts";
|
|
8
10
|
export { createBrowserConsoleCollector } from "./browser-console-collector.ts";
|
|
9
|
-
export type { BrowserNetworkCollectorOptions } from "./browser-network-collector.ts";
|
|
10
|
-
export { createBrowserNetworkCollector } from "./browser-network-collector.ts";
|
|
11
|
+
export type { BrowserNetworkCollectorOptions, CapturedResponseBody } from "./browser-network-collector.ts";
|
|
12
|
+
export { createBrowserNetworkCollector, captureResponseBody, MAX_RESPONSE_BODY_BYTES } from "./browser-network-collector.ts";
|
|
11
13
|
export type { HeaderCorrelationIds } from "./network-correlation.ts";
|
|
12
14
|
export { extractHeaderCorrelationIds } from "./network-correlation.ts";
|
|
13
15
|
export type { ScriptUrlRewrite, SourceRootResolver } from "./script-url-mapping.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EAIvB,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,YAAY,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3H,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E,YAAY,EACV,gCAAgC,EAChC,yBAAyB,EACzB,cAAc,EACd,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAEnF,YAAY,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAE/E,YAAY,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3G,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE7H,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
export { launchBrowserSession, launchBrowserSessionOrRefuse, resolveChromiumExecutable, BrowserUnavailableError, CHROMIUM_INSTALL_REMEDY,
|
|
1
|
+
export { launchBrowserSession, launchBrowserSessionOrRefuse, resolveChromiumExecutable, BrowserUnavailableError, CHROMIUM_INSTALL_REMEDY,
|
|
2
|
+
// RT-264: browser reuse. NOT SHIPPABLE -- see browser-session.ts's own doc on
|
|
3
|
+
// createSharedBrowserManager. Exported so its isolation test can import it, and so a
|
|
4
|
+
// release note can point at exactly this symbol as "written, unrun, not wired in."
|
|
5
|
+
createSharedBrowserManager, SHARED_BROWSER_IDLE_TIMEOUT_MS, } from "./browser-session.js";
|
|
2
6
|
export { captureElementSnapshot } from "./dom-evidence.js";
|
|
3
7
|
export { createBrowserActionCollector } from "./browser-action-collector.js";
|
|
8
|
+
export { createBrowserRecordingCollector } from "./browser-recording-collector.js";
|
|
4
9
|
export { createBrowserConsoleCollector } from "./browser-console-collector.js";
|
|
5
|
-
export { createBrowserNetworkCollector } from "./browser-network-collector.js";
|
|
10
|
+
export { createBrowserNetworkCollector, captureResponseBody, MAX_RESPONSE_BODY_BYTES } from "./browser-network-collector.js";
|
|
6
11
|
export { extractHeaderCorrelationIds } from "./network-correlation.js";
|
|
7
12
|
export { rewriteScriptUrls } from "./script-url-mapping.js";
|
|
8
13
|
export { INITIATOR_HEADER_NAME, stripInitiatorWrapperFrame } from "./frontend-initiator-capture.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB;AACvB,8EAA8E;AAC9E,qFAAqF;AACrF,mFAAmF;AACnF,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAQ7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAGnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAG7H,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descryy/runtime-browser",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Browser runtime: launch, isolated context, navigation, click/type/wait, DOM inspection, screenshots, console/page-error/network capture, all through the Collector contract (plan §7/§8). See documents/decisions-inbox/PROPOSAL-B-playwright-for-browser-runtime.md for the Playwright-vs-CDP call. BrowserSession.injectStorageState (0.4.5) is the mid-session counterpart to the launch-time auth seed -- lands cookies/localStorage into a session that is already open, for a scenario's sign-in step.",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
"registry": "https://registry.npmjs.org",
|
|
26
26
|
"access": "public"
|
|
27
27
|
},
|
|
28
|
-
"scripts": {
|
|
29
|
-
"build": "tsc -b"
|
|
30
|
-
},
|
|
31
28
|
"dependencies": {
|
|
32
29
|
"@descryy/runtime-contracts": "0.3.3",
|
|
33
30
|
"@descryy/runtime-backend-observation": "0.3.6",
|
|
34
31
|
"playwright-core": "^1.62.1",
|
|
35
|
-
"@descryy/runtime-adapter-typescript": "0.3.
|
|
32
|
+
"@descryy/runtime-adapter-typescript": "0.3.8"
|
|
36
33
|
},
|
|
37
34
|
"devDependencies": {
|
|
38
|
-
"@descryy/runtime-controller": "0.3.
|
|
35
|
+
"@descryy/runtime-controller": "0.3.9",
|
|
39
36
|
"@descryy/runtime-evidence-store": "0.4.2"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsc -b"
|
|
40
40
|
}
|
|
41
|
-
}
|
|
41
|
+
}
|