@reticlehq/browser 2.1.0 → 2.2.1
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/NOTICE +5 -0
- package/dist/actions/actions.d.ts +1 -1
- package/dist/actions/actions.d.ts.map +1 -1
- package/dist/actions/actions.js +37 -19
- package/dist/actions/actions.js.map +1 -1
- package/dist/commands/commands.d.ts +2 -0
- package/dist/commands/commands.d.ts.map +1 -1
- package/dist/commands/commands.js +20 -6
- package/dist/commands/commands.js.map +1 -1
- package/dist/dom/a11y.d.ts +17 -6
- package/dist/dom/a11y.d.ts.map +1 -1
- package/dist/dom/a11y.js +68 -32
- package/dist/dom/a11y.js.map +1 -1
- package/dist/dom/auto-anchor.d.ts +10 -10
- package/dist/dom/auto-anchor.js +10 -10
- package/dist/dom/blind-spots.d.ts +14 -0
- package/dist/dom/blind-spots.d.ts.map +1 -0
- package/dist/dom/blind-spots.js +30 -0
- package/dist/dom/blind-spots.js.map +1 -0
- package/dist/dom/chart.d.ts +93 -0
- package/dist/dom/chart.d.ts.map +1 -0
- package/dist/dom/chart.js +119 -0
- package/dist/dom/chart.js.map +1 -0
- package/dist/dom/dom-ignore.d.ts.map +1 -1
- package/dist/dom/dom-ignore.js +7 -2
- package/dist/dom/dom-ignore.js.map +1 -1
- package/dist/dom/query.d.ts +17 -4
- package/dist/dom/query.d.ts.map +1 -1
- package/dist/dom/query.js +185 -30
- package/dist/dom/query.js.map +1 -1
- package/dist/dom/refs.d.ts +25 -2
- package/dist/dom/refs.d.ts.map +1 -1
- package/dist/dom/refs.js +78 -3
- package/dist/dom/refs.js.map +1 -1
- package/dist/dom/snapshot.d.ts +6 -0
- package/dist/dom/snapshot.d.ts.map +1 -1
- package/dist/dom/snapshot.js +6 -1
- package/dist/dom/snapshot.js.map +1 -1
- package/dist/dom/source.d.ts +40 -0
- package/dist/dom/source.d.ts.map +1 -0
- package/dist/dom/source.js +59 -0
- package/dist/dom/source.js.map +1 -0
- package/dist/dom/theme.js +2 -2
- package/dist/dom/theme.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/observers/blind-spots.d.ts +19 -0
- package/dist/observers/blind-spots.d.ts.map +1 -0
- package/dist/observers/blind-spots.js +89 -0
- package/dist/observers/blind-spots.js.map +1 -0
- package/dist/observers/console.d.ts.map +1 -1
- package/dist/observers/console.js +39 -6
- package/dist/observers/console.js.map +1 -1
- package/dist/observers/dom.d.ts.map +1 -1
- package/dist/observers/dom.js +68 -9
- package/dist/observers/dom.js.map +1 -1
- package/dist/observers/focus.d.ts +10 -0
- package/dist/observers/focus.d.ts.map +1 -0
- package/dist/observers/focus.js +49 -0
- package/dist/observers/focus.js.map +1 -0
- package/dist/observers/network-body.d.ts +19 -0
- package/dist/observers/network-body.d.ts.map +1 -0
- package/dist/observers/network-body.js +143 -0
- package/dist/observers/network-body.js.map +1 -0
- package/dist/observers/network-redact.d.ts +8 -0
- package/dist/observers/network-redact.d.ts.map +1 -0
- package/dist/observers/network-redact.js +66 -0
- package/dist/observers/network-redact.js.map +1 -0
- package/dist/observers/network.d.ts +13 -6
- package/dist/observers/network.d.ts.map +1 -1
- package/dist/observers/network.js +288 -162
- package/dist/observers/network.js.map +1 -1
- package/dist/observers/route.d.ts.map +1 -1
- package/dist/observers/route.js +15 -9
- package/dist/observers/route.js.map +1 -1
- package/dist/observers/scroll.d.ts.map +1 -1
- package/dist/observers/scroll.js +35 -8
- package/dist/observers/scroll.js.map +1 -1
- package/dist/observers/state.d.ts +20 -0
- package/dist/observers/state.d.ts.map +1 -0
- package/dist/observers/state.js +87 -0
- package/dist/observers/state.js.map +1 -0
- package/dist/observers/storage.d.ts +9 -0
- package/dist/observers/storage.d.ts.map +1 -1
- package/dist/observers/storage.js +105 -3
- package/dist/observers/storage.js.map +1 -1
- package/dist/observers/types.d.ts +15 -0
- package/dist/observers/types.d.ts.map +1 -1
- package/dist/observers/types.js +29 -1
- package/dist/observers/types.js.map +1 -1
- package/dist/patching/capture-method.d.ts +27 -0
- package/dist/patching/capture-method.d.ts.map +1 -0
- package/dist/patching/capture-method.js +37 -0
- package/dist/patching/capture-method.js.map +1 -0
- package/dist/presenter/presenter-config.d.ts +3 -3
- package/dist/presenter/presenter-config.d.ts.map +1 -1
- package/dist/presenter/presenter-config.js +3 -3
- package/dist/presenter/presenter-config.js.map +1 -1
- package/dist/presenter/presenter-controls.d.ts +1 -1
- package/dist/presenter/presenter-controls.d.ts.map +1 -1
- package/dist/presenter/presenter-controls.js +3 -3
- package/dist/presenter/presenter-controls.js.map +1 -1
- package/dist/presenter/presenter-glow.d.ts +1 -1
- package/dist/presenter/presenter-glow.js +1 -1
- package/dist/presenter/presenter-styles.d.ts +1 -1
- package/dist/presenter/presenter-styles.d.ts.map +1 -1
- package/dist/presenter/presenter-styles.js +12 -3
- package/dist/presenter/presenter-styles.js.map +1 -1
- package/dist/presenter/presenter.d.ts +4 -4
- package/dist/presenter/presenter.d.ts.map +1 -1
- package/dist/presenter/presenter.js +5 -5
- package/dist/presenter/presenter.js.map +1 -1
- package/dist/recorder/recorder.d.ts +8 -8
- package/dist/recorder/recorder.d.ts.map +1 -1
- package/dist/recorder/recorder.js +9 -9
- package/dist/recorder/recorder.js.map +1 -1
- package/dist/registry/capabilities.d.ts +2 -2
- package/dist/registry/capabilities.d.ts.map +1 -1
- package/dist/registry/capabilities.js +1 -1
- package/dist/registry/capabilities.js.map +1 -1
- package/dist/registry/domains.d.ts +1 -1
- package/dist/registry/domains.js +1 -1
- package/dist/registry/emitter.d.ts +2 -2
- package/dist/registry/emitter.js +2 -2
- package/dist/registry/store-adapters.d.ts +128 -0
- package/dist/registry/store-adapters.d.ts.map +1 -0
- package/dist/registry/store-adapters.js +135 -0
- package/dist/registry/store-adapters.js.map +1 -0
- package/dist/registry/stores.d.ts +38 -2
- package/dist/registry/stores.d.ts.map +1 -1
- package/dist/registry/stores.js +110 -8
- package/dist/registry/stores.js.map +1 -1
- package/dist/reticle.d.ts +22 -3
- package/dist/reticle.d.ts.map +1 -1
- package/dist/reticle.js +81 -14
- package/dist/reticle.js.map +1 -1
- package/dist/review/annotator.js +1 -1
- package/dist/review/annotator.js.map +1 -1
- package/dist/review/mark-anchor.d.ts.map +1 -1
- package/dist/review/mark-anchor.js +1 -21
- package/dist/review/mark-anchor.js.map +1 -1
- package/dist/security/serialization.d.ts +29 -3
- package/dist/security/serialization.d.ts.map +1 -1
- package/dist/security/serialization.js +169 -28
- package/dist/security/serialization.js.map +1 -1
- package/dist/timers/clock.d.ts +13 -0
- package/dist/timers/clock.d.ts.map +1 -1
- package/dist/timers/clock.js +76 -6
- package/dist/timers/clock.js.map +1 -1
- package/dist/timers/native-console.d.ts +2 -0
- package/dist/timers/native-console.d.ts.map +1 -0
- package/dist/timers/native-console.js +10 -0
- package/dist/timers/native-console.js.map +1 -0
- package/dist/transport/transport.d.ts +1 -1
- package/dist/transport/transport.d.ts.map +1 -1
- package/dist/transport/transport.js +43 -4
- package/dist/transport/transport.js.map +1 -1
- package/package.json +7 -3
|
@@ -1,61 +1,10 @@
|
|
|
1
|
-
import { EventType,
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const MAX_BODY_CHARS = 8192;
|
|
9
|
-
/** Only text-like bodies are worth capturing; binary (images/fonts/octet-stream) is skipped. */
|
|
10
|
-
const CAPTURABLE_CONTENT = /application\/json|text\/|application\/xml|x-www-form-urlencoded|graphql/i;
|
|
11
|
-
function isCapturableType(contentType) {
|
|
12
|
-
return contentType !== null && CAPTURABLE_CONTENT.test(contentType);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* An `Authorization: Bearer …` / `Basic …` credential. The token side requires credential shape — 16+
|
|
16
|
-
* chars AND at least one digit or symbol — so ordinary prose ("Basic subscription includes…", "Bearer
|
|
17
|
-
* capacity exceeded") is NOT mangled, only actual opaque tokens are.
|
|
18
|
-
*/
|
|
19
|
-
const AUTH_SCHEME_TOKEN = /\b(Bearer|Basic)\s+(?=[A-Za-z0-9._~+/=-]{16,})(?=[A-Za-z0-9._~+/=-]*[\d._~+/=-])[A-Za-z0-9._~+/=-]+/gi;
|
|
20
|
-
/**
|
|
21
|
-
* Redact credentials in ANY text body (form-urlencoded, text/plain, xml, or JSON that failed to parse).
|
|
22
|
-
* sanitizeForTransport only redacts KEYS inside a parsed object, so a `password=secret` form post or a
|
|
23
|
-
* `Bearer <token>` string would otherwise ship verbatim. Redacts the value of any `key=value` / `key: value`
|
|
24
|
-
* pair whose key is sensitive, plus credential-shaped auth-scheme tokens.
|
|
25
|
-
*/
|
|
26
|
-
function redactText(text) {
|
|
27
|
-
return (text
|
|
28
|
-
// Auth-scheme tokens FIRST: `Authorization: Bearer <token>` — the key/value rule below would
|
|
29
|
-
// otherwise consume just "Bearer" as Authorization's value (it stops at whitespace) and leave the
|
|
30
|
-
// token behind, so the scheme rule must run before it.
|
|
31
|
-
.replace(AUTH_SCHEME_TOKEN, (_m, scheme) => `${scheme} ${REDACTED_VALUE}`)
|
|
32
|
-
.replace(/([A-Za-z0-9_.-]+)(\s*[=:]\s*"?)([^&\s,;"}]+)/g, (match, key, sep) => isSensitiveKey(key) ? `${key}${sep}${REDACTED_VALUE}` : match));
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Redact + cap a body for the agent transcript. JSON is parsed and run through the same
|
|
36
|
-
* sanitizeForTransport redaction used for state (sensitive keys -> [REDACTED]); every other text body
|
|
37
|
-
* (and JSON that didn't parse) goes through redactText so form/plain-text credentials can't leak.
|
|
38
|
-
* Returns the (possibly truncated) body plus whether it was cut.
|
|
39
|
-
*/
|
|
40
|
-
function projectBody(text, contentType) {
|
|
41
|
-
let out;
|
|
42
|
-
if (contentType !== null && /json|graphql/i.test(contentType)) {
|
|
43
|
-
try {
|
|
44
|
-
out = safeStringify(sanitizeForTransport(JSON.parse(text)));
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
out = redactText(text); // looked like JSON but wasn't — still redact key/value + auth tokens
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
out = redactText(text);
|
|
52
|
-
}
|
|
53
|
-
// Key-based redaction can't see a secret sitting in a VALUE under a benign key — scan the projected
|
|
54
|
-
// text for high-confidence secret shapes (JWTs, provider keys) as a backstop, JSON or not.
|
|
55
|
-
out = scrubKnownSecrets(out);
|
|
56
|
-
const truncated = out.length > MAX_BODY_CHARS;
|
|
57
|
-
return { body: truncated ? out.slice(0, MAX_BODY_CHARS) : out, truncated };
|
|
58
|
-
}
|
|
1
|
+
import { BlindSpotKind, EventType, RETICLE_WS_PATH, StreamTransport, StreamDirection, } from '@reticlehq/core';
|
|
2
|
+
import { captureMethod } from '../patching/capture-method.js';
|
|
3
|
+
import { isCapturableType, projectBody, withBodyDeadline } from './network-body.js';
|
|
4
|
+
import { redactUrl } from './network-redact.js';
|
|
5
|
+
// Redaction moved to its own cohesive module (network.ts is at its line cap); re-exported so callers
|
|
6
|
+
// and the existing test suite keep importing it from here.
|
|
7
|
+
export { redactUrl };
|
|
59
8
|
/** The byte size of a binary frame (ArrayBuffer / Blob / typed-array view), or undefined if unknown. */
|
|
60
9
|
function binaryFrameBytes(data) {
|
|
61
10
|
if (data instanceof ArrayBuffer)
|
|
@@ -67,7 +16,7 @@ function binaryFrameBytes(data) {
|
|
|
67
16
|
return undefined;
|
|
68
17
|
}
|
|
69
18
|
/** Project one SSE/WebSocket frame: byte size + shape; the (capped, redacted) payload only when body
|
|
70
|
-
*
|
|
19
|
+
* capture is on and it is a string frame. Binary frames report their byte size, not just a bare type. */
|
|
71
20
|
function frameFields(data, captureBodies) {
|
|
72
21
|
if (typeof data !== 'string') {
|
|
73
22
|
const bytes = binaryFrameBytes(data);
|
|
@@ -110,67 +59,6 @@ function projectRequestBody(body, captureBodies) {
|
|
|
110
59
|
const { body: out, truncated } = projectBody(text, contentType);
|
|
111
60
|
return truncated ? { requestBody: out, requestBodyTruncated: true } : { requestBody: out };
|
|
112
61
|
}
|
|
113
|
-
/** A path segment name that is typically followed by a single-use secret token in the NEXT segment. */
|
|
114
|
-
const SENSITIVE_PATH_SEGMENT = /^(reset|verify|verification|confirm|activate|invite|magic|magiclink|token|key|oauth|unsubscribe|password)$/i;
|
|
115
|
-
/** Only mask a following segment that looks token-like — short ids/words (`reset/form`) are left alone. */
|
|
116
|
-
const PATH_TOKEN_MIN_LENGTH = 12;
|
|
117
|
-
/**
|
|
118
|
-
* Redact credential-bearing values so they don't leak into the agent transcript / flow / run
|
|
119
|
-
* artifacts: query params (`?access_token=…`, signed-URL keys) via the shared `isSensitiveKey` regex,
|
|
120
|
-
* AND path-embedded tokens (`/reset/<token>`, `/invite/<token>`) that live in the path, not the query.
|
|
121
|
-
* The hash is preserved and the URL is returned byte-for-byte when nothing matched.
|
|
122
|
-
*/
|
|
123
|
-
export function redactUrl(raw) {
|
|
124
|
-
const hashStart = raw.indexOf('#');
|
|
125
|
-
const hash = hashStart === -1 ? '' : raw.slice(hashStart);
|
|
126
|
-
const beforeHash = hashStart === -1 ? raw : raw.slice(0, hashStart);
|
|
127
|
-
const queryStart = beforeHash.indexOf('?');
|
|
128
|
-
const pathPart = queryStart === -1 ? beforeHash : beforeHash.slice(0, queryStart);
|
|
129
|
-
const query = queryStart === -1 ? '' : beforeHash.slice(queryStart + 1);
|
|
130
|
-
let changed = false;
|
|
131
|
-
// Credentials in the authority (`scheme://user:pass@host`) never belong in a transcript.
|
|
132
|
-
let authority = pathPart;
|
|
133
|
-
const userinfo = /^([a-z][a-z0-9+.-]*:\/\/)[^/@]+@/i.exec(pathPart);
|
|
134
|
-
if (userinfo !== null) {
|
|
135
|
-
authority = `${userinfo[1] ?? ''}${REDACTED_VALUE}@${pathPart.slice(userinfo[0].length)}`;
|
|
136
|
-
changed = true;
|
|
137
|
-
}
|
|
138
|
-
let newQuery = query;
|
|
139
|
-
if (query !== '') {
|
|
140
|
-
const params = new URLSearchParams(query);
|
|
141
|
-
for (const key of [...params.keys()]) {
|
|
142
|
-
if (isSensitiveKey(key)) {
|
|
143
|
-
params.set(key, REDACTED_VALUE);
|
|
144
|
-
changed = true;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
newQuery = params.toString();
|
|
148
|
-
}
|
|
149
|
-
const segments = authority.split('/');
|
|
150
|
-
for (let i = 0; i + 1 < segments.length; i++) {
|
|
151
|
-
const name = segments[i];
|
|
152
|
-
const next = segments[i + 1];
|
|
153
|
-
if (name !== undefined &&
|
|
154
|
-
next !== undefined &&
|
|
155
|
-
next.length >= PATH_TOKEN_MIN_LENGTH &&
|
|
156
|
-
SENSITIVE_PATH_SEGMENT.test(name)) {
|
|
157
|
-
segments[i + 1] = REDACTED_VALUE;
|
|
158
|
-
changed = true;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
// OAuth implicit flow puts the access_token in the FRAGMENT (`#access_token=…`), and hash-routers carry
|
|
162
|
-
// `?token=…` in the hash — redact sensitive params there too, leaving plain anchors (`#section`) alone.
|
|
163
|
-
let newHash = hash;
|
|
164
|
-
if (hash.length > 1) {
|
|
165
|
-
newHash = hash.replace(/([A-Za-z0-9_.-]+)=([^&\s]+)/g, (m, key) => isSensitiveKey(key) ? `${key}=${REDACTED_VALUE}` : m);
|
|
166
|
-
if (newHash !== hash)
|
|
167
|
-
changed = true;
|
|
168
|
-
}
|
|
169
|
-
if (!changed)
|
|
170
|
-
return raw;
|
|
171
|
-
const queryOut = queryStart === -1 ? '' : `?${newQuery}`;
|
|
172
|
-
return `${segments.join('/')}${queryOut}${newHash}`;
|
|
173
|
-
}
|
|
174
62
|
/**
|
|
175
63
|
* Response metadata that needs no body capture: HTTP status text, content-type, and byte size (from
|
|
176
64
|
* content-length when the server sent it). Lets an agent tell an HTML error page served as 200 from
|
|
@@ -202,13 +90,125 @@ function methodOf(input, init) {
|
|
|
202
90
|
return input.method.toUpperCase();
|
|
203
91
|
return 'GET';
|
|
204
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* The first app-code frame that fired a request — the in-page answer to a CDP initiator, as file:line.
|
|
95
|
+
* Captured from a fresh Error.stack at call time, skipping Reticle's own wrapper frames. Feeds the
|
|
96
|
+
* causal chain (which code path made this request). Capped; undefined when no stack is available.
|
|
97
|
+
* ponytail: one stack unwind per request — cheap next to fetch itself; revisit only if a profiler flags it.
|
|
98
|
+
*/
|
|
99
|
+
/**
|
|
100
|
+
* Frames to skip: Reticle's own wrappers + engine-internal frames with no app source location.
|
|
101
|
+
* Anchored to Reticle's actual module paths (`@reticlehq/…`, the SDK's own `.ts` files) — a bare
|
|
102
|
+
* `reticle` alternative matched ANY app whose bundle URL merely contained the word (including this
|
|
103
|
+
* repo's own dogfood fixtures served under `/reticle/`), silently dropping their initiatorStack.
|
|
104
|
+
*/
|
|
105
|
+
const NON_APP_FRAME = /@reticlehq|reticle\.ts|network\.ts|transport\.ts|<anonymous>|new Promise|node:internal/i;
|
|
106
|
+
/** Pure: the first real app-code frame in a stack string, capped. Exported for unit testing. */
|
|
107
|
+
export function firstAppFrame(stack) {
|
|
108
|
+
if (stack === undefined)
|
|
109
|
+
return undefined;
|
|
110
|
+
for (const line of stack.split('\n').slice(1)) {
|
|
111
|
+
if (NON_APP_FRAME.test(line))
|
|
112
|
+
continue;
|
|
113
|
+
const trimmed = line.trim();
|
|
114
|
+
if (trimmed.length === 0)
|
|
115
|
+
continue;
|
|
116
|
+
return trimmed.slice(0, 300);
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
function initiatorFrame() {
|
|
121
|
+
return firstAppFrame(new Error().stack);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Pure: derive TTFB + transfer size from a PerformanceResourceTiming entry. TTFB = responseStart -
|
|
125
|
+
* requestStart; cross-origin responses zero those (Timing-Allow-Origin), so we omit rather than report a
|
|
126
|
+
* bogus 0. Exported for unit testing (jsdom doesn't post real resource entries).
|
|
127
|
+
*/
|
|
128
|
+
export function extractTiming(entry) {
|
|
129
|
+
if (entry === undefined)
|
|
130
|
+
return {};
|
|
131
|
+
const timing = {};
|
|
132
|
+
if (entry.responseStart > 0 && entry.requestStart > 0) {
|
|
133
|
+
timing.ttfbMs = Math.round(entry.responseStart - entry.requestStart);
|
|
134
|
+
}
|
|
135
|
+
if (entry.transferSize > 0)
|
|
136
|
+
timing.transferSize = entry.transferSize;
|
|
137
|
+
return timing;
|
|
138
|
+
}
|
|
139
|
+
/** Best-effort lookup of the most-recent resource-timing entry for a URL. */
|
|
140
|
+
function resourceTiming(rawUrl) {
|
|
141
|
+
try {
|
|
142
|
+
const entries = performance.getEntriesByName(rawUrl, 'resource');
|
|
143
|
+
return extractTiming(entries[entries.length - 1]);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return {};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
205
149
|
/** Patch fetch + XMLHttpRequest to emit net.request events. Fully reversible. */
|
|
150
|
+
/**
|
|
151
|
+
* True for Reticle's OWN bridge connection, which must never be instrumented.
|
|
152
|
+
*
|
|
153
|
+
* The transport resolves `WebSocket` at call time, so a reconnect after instrumentation constructs a
|
|
154
|
+
* PATCHED socket. From then on emitting an event calls transport.send -> the patched send emits a
|
|
155
|
+
* NET_STREAM event -> which calls transport.send again, until the stack blows and the page is dead.
|
|
156
|
+
* Keyed on the bridge PATH rather than the host: an app's own socket on the same origin must still be
|
|
157
|
+
* observed, otherwise this guard would blind the stream category it exists to protect.
|
|
158
|
+
*/
|
|
159
|
+
function isBridgeSocket(url) {
|
|
160
|
+
try {
|
|
161
|
+
return new URL(url, location.href).pathname === RETICLE_WS_PATH;
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return url.includes(RETICLE_WS_PATH);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Whether a function is the platform's own fetch rather than someone's wrapper.
|
|
169
|
+
*
|
|
170
|
+
* `Function.prototype.toString` on a built-in yields "[native code]"; a JS wrapper yields its source.
|
|
171
|
+
* Called off the prototype deliberately, so a wrapper cannot hide behind its own `toString`.
|
|
172
|
+
*
|
|
173
|
+
* Two known limits, both stated in tests rather than left to be discovered:
|
|
174
|
+
* - a BOUND wrapper (`window.fetch = mine.bind(x)`) also reports "[native code]", so it is missed.
|
|
175
|
+
* Nothing in the platform separates the two.
|
|
176
|
+
* - a POLYFILLED fetch reads as wrapped and IS reported — correctly, since a polyfill is a layer we
|
|
177
|
+
* cannot see through, though it will look like a false positive to anyone triaging it.
|
|
178
|
+
*
|
|
179
|
+
* Both failure modes are safe: we under-report on the first and over-report on the second, and
|
|
180
|
+
* over-reporting a coverage caveat is the direction this library errs in everywhere else.
|
|
181
|
+
*/
|
|
182
|
+
function isNativeFetch(fn) {
|
|
183
|
+
try {
|
|
184
|
+
return Function.prototype.toString.call(fn).includes('native code');
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** Wrappers this module installed, so a re-install does not report itself as a foreign wrapper. */
|
|
191
|
+
const OURS = new WeakSet();
|
|
206
192
|
export function installNetwork(emit, opts = {}) {
|
|
207
193
|
const captureBodies = opts.captureBodies === true;
|
|
208
194
|
// Keep the true original for teardown identity, plus a window-bound copy to invoke
|
|
209
195
|
// (fetch throws "Illegal invocation" if called with the wrong `this`).
|
|
210
196
|
const origFetch = window.fetch;
|
|
211
197
|
const callFetch = origFetch.bind(window);
|
|
198
|
+
// Declare it if we are not the first to wrap fetch.
|
|
199
|
+
//
|
|
200
|
+
// Wrappers chain outermost-first, and we record `init.body` when OUR wrapper runs — so anything
|
|
201
|
+
// installed EARLIER sits below us and mutates the request after we have read it. That is a real
|
|
202
|
+
// blind spot (an auth/analytics interceptor started before connect(), a polyfill, a service worker
|
|
203
|
+
// is worse still) and it is not fixable from in here: there is no "patch last" primitive, and
|
|
204
|
+
// racing for outermost loses to whatever loads after us.
|
|
205
|
+
//
|
|
206
|
+
// So it is reported rather than hidden, on the same contract as the cross-origin-iframe sensor —
|
|
207
|
+
// say what we cannot see, so a green verdict never implies we saw it. `isOurs` keeps a re-install
|
|
208
|
+
// from blaming the app for our own wrapper.
|
|
209
|
+
if (!isNativeFetch(origFetch) && !OURS.has(origFetch)) {
|
|
210
|
+
emit(EventType.BLIND_SPOT, { kind: BlindSpotKind.WRAPPED_NETWORK, count: 1 });
|
|
211
|
+
}
|
|
212
212
|
// Correlation id so a NET_PENDING (emitted at request START) can be matched to its
|
|
213
213
|
// NET_REQUEST completion. A request that never completes leaves an unmatched NET_PENDING —
|
|
214
214
|
// that is how a hung/in-flight request becomes observable (it never resolves, so the old
|
|
@@ -219,37 +219,82 @@ export function installNetwork(emit, opts = {}) {
|
|
|
219
219
|
const id = nextId();
|
|
220
220
|
const start = performance.now();
|
|
221
221
|
const method = methodOf(input, init);
|
|
222
|
-
const
|
|
223
|
-
|
|
222
|
+
const rawUrl = urlOf(input);
|
|
223
|
+
const url = redactUrl(rawUrl);
|
|
224
|
+
const initiatorStack = initiatorFrame();
|
|
225
|
+
const initiatorFields = initiatorStack === undefined ? {} : { initiatorStack };
|
|
226
|
+
emit(EventType.NET_PENDING, { id, method, url, initiator: 'fetch', ...initiatorFields });
|
|
224
227
|
try {
|
|
225
228
|
const res = await callFetch(input, init);
|
|
229
|
+
// The app's fetch resolves HERE — at headers — like a native fetch. durationMs is measured to
|
|
230
|
+
// headers-received, so it stays honest whether or not we read the body.
|
|
231
|
+
const headersAt = performance.now();
|
|
226
232
|
const contentType = res.headers.get('content-type');
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
233
|
+
const emitRequest = (responseBodyFields) => {
|
|
234
|
+
emit(EventType.NET_REQUEST, {
|
|
235
|
+
id,
|
|
236
|
+
method,
|
|
237
|
+
url,
|
|
238
|
+
status: res.status,
|
|
239
|
+
ok: res.ok,
|
|
240
|
+
durationMs: Math.round(headersAt - start),
|
|
241
|
+
initiator: 'fetch',
|
|
242
|
+
...initiatorFields,
|
|
243
|
+
...resourceTiming(rawUrl),
|
|
244
|
+
...netResponseMeta(res.statusText, contentType, res.headers.get('content-length')),
|
|
245
|
+
...projectRequestBody(init?.body, captureBodies),
|
|
246
|
+
...responseBodyFields,
|
|
247
|
+
});
|
|
248
|
+
};
|
|
230
249
|
if (captureBodies && isCapturableType(contentType)) {
|
|
250
|
+
// ONLY the body read can make the app wait (a chunked response with no content-length can be
|
|
251
|
+
// arbitrarily long). Clone synchronously so the app's stream is untouched, then read + emit from
|
|
252
|
+
// a DETACHED promise — the app already has res, so our bounded read is invisible to it. Without
|
|
253
|
+
// body capture (the DEFAULT) we emit synchronously below, exactly as before: no latency, no
|
|
254
|
+
// deferral, NET_REQUEST in order.
|
|
255
|
+
//
|
|
256
|
+
// Tradeoff, opt-in path only: under captureBodies the NET_REQUEST for THIS call lands after the
|
|
257
|
+
// bounded body read (≤ the deadline), so it can arrive out of order vs a later request's
|
|
258
|
+
// NET_PENDING, and a BARE `assert { net, count }` fired the instant the app's fetch resolves may
|
|
259
|
+
// see the count not-yet-incremented. Use `wait_for` for count/settle assertions when body
|
|
260
|
+
// capture is on (it already polls until the event lands). The default path has neither caveat.
|
|
261
|
+
let clone;
|
|
231
262
|
try {
|
|
232
|
-
|
|
233
|
-
responseBodyFields = truncated
|
|
234
|
-
? { responseBody: body, responseBodyTruncated: true }
|
|
235
|
-
: { responseBody: body };
|
|
263
|
+
clone = res.clone();
|
|
236
264
|
}
|
|
237
265
|
catch {
|
|
238
|
-
/*
|
|
266
|
+
/* already consumed/locked — emit the envelope with no body */
|
|
239
267
|
}
|
|
268
|
+
// The whole IIFE is guarded: emit is the SDK's already-try/catch'd sink today, but a detached
|
|
269
|
+
// promise must never be able to surface an unhandledrejection into the host page even if a
|
|
270
|
+
// future caller passes a throwing emit. A body we can't read is simply dropped.
|
|
271
|
+
void (async () => {
|
|
272
|
+
let responseBodyFields = {};
|
|
273
|
+
if (clone !== undefined) {
|
|
274
|
+
try {
|
|
275
|
+
const text = await withBodyDeadline(clone.text());
|
|
276
|
+
if (text !== undefined) {
|
|
277
|
+
const { body, truncated } = projectBody(text, contentType);
|
|
278
|
+
responseBodyFields = truncated
|
|
279
|
+
? { responseBody: body, responseBodyTruncated: true }
|
|
280
|
+
: { responseBody: body };
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
/* body not readable — skip, keep the envelope */
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
emitRequest(responseBodyFields);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
/* observation is best-effort; never reject into the page */
|
|
292
|
+
}
|
|
293
|
+
})().catch(() => undefined);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
emitRequest({});
|
|
240
297
|
}
|
|
241
|
-
emit(EventType.NET_REQUEST, {
|
|
242
|
-
id,
|
|
243
|
-
method,
|
|
244
|
-
url,
|
|
245
|
-
status: res.status,
|
|
246
|
-
ok: res.ok,
|
|
247
|
-
durationMs: Math.round(performance.now() - start),
|
|
248
|
-
initiator: 'fetch',
|
|
249
|
-
...netResponseMeta(res.statusText, contentType, res.headers.get('content-length')),
|
|
250
|
-
...projectRequestBody(init?.body, captureBodies),
|
|
251
|
-
...responseBodyFields,
|
|
252
|
-
});
|
|
253
298
|
return res;
|
|
254
299
|
}
|
|
255
300
|
catch (error) {
|
|
@@ -262,28 +307,32 @@ export function installNetwork(emit, opts = {}) {
|
|
|
262
307
|
error: error instanceof Error ? error.message : String(error),
|
|
263
308
|
durationMs: Math.round(performance.now() - start),
|
|
264
309
|
initiator: 'fetch',
|
|
310
|
+
...initiatorFields,
|
|
265
311
|
});
|
|
266
312
|
throw error;
|
|
267
313
|
}
|
|
268
314
|
};
|
|
315
|
+
// Remember it, so a later install recognises our own wrapper instead of reporting the app.
|
|
316
|
+
OURS.add(window.fetch);
|
|
317
|
+
const patchedFetch = window.fetch;
|
|
269
318
|
const meta = new WeakMap();
|
|
270
319
|
const proto = XMLHttpRequest.prototype;
|
|
271
|
-
|
|
272
|
-
const
|
|
273
|
-
const origSend = proto.send;
|
|
274
|
-
/* eslint-enable @typescript-eslint/unbound-method */
|
|
320
|
+
const origOpen = captureMethod(proto, 'open');
|
|
321
|
+
const origSend = captureMethod(proto, 'send');
|
|
275
322
|
const callOpen = origOpen;
|
|
276
323
|
proto.open = function (method, url, ...rest) {
|
|
277
324
|
meta.set(this, {
|
|
278
325
|
id: nextId(),
|
|
279
326
|
method: method.toUpperCase(),
|
|
280
327
|
url: redactUrl(String(url)),
|
|
328
|
+
rawUrl: String(url),
|
|
281
329
|
start: 0,
|
|
282
330
|
});
|
|
283
331
|
callOpen.call(this, method, url, ...rest);
|
|
284
332
|
};
|
|
285
|
-
|
|
286
|
-
//
|
|
333
|
+
const patchedOpen = captureMethod(proto, 'open');
|
|
334
|
+
// A reused XHR calls send repeatedly; attach the completion listener ONCE per instance and read the
|
|
335
|
+
// request identity from `meta` at fire time. Adding a fresh closure each send would leave stale
|
|
287
336
|
// listeners that re-fire on later completions, emitting duplicate, mislabeled events.
|
|
288
337
|
const listenerAttached = new WeakSet();
|
|
289
338
|
proto.send = function (body) {
|
|
@@ -291,7 +340,15 @@ export function installNetwork(emit, opts = {}) {
|
|
|
291
340
|
if (m !== undefined) {
|
|
292
341
|
m.start = performance.now();
|
|
293
342
|
m.reqBody = body ?? null;
|
|
294
|
-
|
|
343
|
+
m.initiatorStack = initiatorFrame(); // the app's xhr.send call site
|
|
344
|
+
const initiatorFields = m.initiatorStack === undefined ? {} : { initiatorStack: m.initiatorStack };
|
|
345
|
+
emit(EventType.NET_PENDING, {
|
|
346
|
+
id: m.id,
|
|
347
|
+
method: m.method,
|
|
348
|
+
url: m.url,
|
|
349
|
+
initiator: 'xhr',
|
|
350
|
+
...initiatorFields,
|
|
351
|
+
});
|
|
295
352
|
if (!listenerAttached.has(this)) {
|
|
296
353
|
listenerAttached.add(this);
|
|
297
354
|
this.addEventListener('loadend', () => {
|
|
@@ -321,6 +378,8 @@ export function installNetwork(emit, opts = {}) {
|
|
|
321
378
|
ok: this.status >= 200 && this.status < 400,
|
|
322
379
|
durationMs: Math.round(performance.now() - cur.start),
|
|
323
380
|
initiator: 'xhr',
|
|
381
|
+
...(cur.initiatorStack === undefined ? {} : { initiatorStack: cur.initiatorStack }),
|
|
382
|
+
...resourceTiming(cur.rawUrl),
|
|
324
383
|
...netResponseMeta(this.statusText, xhrContentType, this.getResponseHeader('content-length')),
|
|
325
384
|
...projectRequestBody(cur.reqBody, captureBodies),
|
|
326
385
|
...responseBodyFields,
|
|
@@ -330,59 +389,126 @@ export function installNetwork(emit, opts = {}) {
|
|
|
330
389
|
}
|
|
331
390
|
origSend.call(this, body ?? null);
|
|
332
391
|
};
|
|
392
|
+
const patchedSend = captureMethod(proto, 'send');
|
|
333
393
|
// SSE + WebSocket frame capture — gated behind body capture, since a chatty stream is the
|
|
334
394
|
// high-volume case. Subclass the native constructors so the app's own usage is unchanged.
|
|
335
395
|
const origEventSource = window.EventSource;
|
|
336
396
|
const origWebSocket = window.WebSocket;
|
|
397
|
+
let patchedEventSource;
|
|
398
|
+
let patchedWebSocket;
|
|
337
399
|
if (captureBodies && typeof origEventSource === 'function') {
|
|
338
400
|
window.EventSource = class extends origEventSource {
|
|
339
401
|
constructor(u, init) {
|
|
340
402
|
super(u, init);
|
|
341
403
|
const url = redactUrl(String(u));
|
|
342
|
-
emit(EventType.NET_STREAM, {
|
|
404
|
+
emit(EventType.NET_STREAM, {
|
|
405
|
+
transport: StreamTransport.SSE,
|
|
406
|
+
direction: StreamDirection.OPEN,
|
|
407
|
+
url,
|
|
408
|
+
});
|
|
343
409
|
this.addEventListener('message', (ev) => {
|
|
344
410
|
emit(EventType.NET_STREAM, {
|
|
345
|
-
transport:
|
|
346
|
-
direction:
|
|
411
|
+
transport: StreamTransport.SSE,
|
|
412
|
+
direction: StreamDirection.IN,
|
|
347
413
|
url,
|
|
348
414
|
...frameFields(ev.data, captureBodies),
|
|
349
415
|
});
|
|
350
416
|
});
|
|
351
417
|
}
|
|
352
418
|
};
|
|
419
|
+
patchedEventSource = window.EventSource;
|
|
353
420
|
}
|
|
354
421
|
if (captureBodies && typeof origWebSocket === 'function') {
|
|
355
422
|
window.WebSocket = class extends origWebSocket {
|
|
423
|
+
/** Reticle's own bridge socket is never observed — see isBridgeSocket. */
|
|
424
|
+
#isBridge;
|
|
356
425
|
constructor(u, protocols) {
|
|
357
426
|
super(u, protocols);
|
|
427
|
+
this.#isBridge = isBridgeSocket(String(u));
|
|
428
|
+
if (this.#isBridge)
|
|
429
|
+
return;
|
|
358
430
|
const url = redactUrl(String(u));
|
|
359
|
-
emit(EventType.NET_STREAM, {
|
|
431
|
+
emit(EventType.NET_STREAM, {
|
|
432
|
+
transport: StreamTransport.WS,
|
|
433
|
+
direction: StreamDirection.OPEN,
|
|
434
|
+
url,
|
|
435
|
+
});
|
|
360
436
|
this.addEventListener('message', (ev) => {
|
|
361
437
|
emit(EventType.NET_STREAM, {
|
|
362
|
-
transport:
|
|
363
|
-
direction:
|
|
438
|
+
transport: StreamTransport.WS,
|
|
439
|
+
direction: StreamDirection.IN,
|
|
364
440
|
url,
|
|
365
441
|
...frameFields(ev.data, captureBodies),
|
|
366
442
|
});
|
|
367
443
|
});
|
|
368
444
|
}
|
|
369
445
|
send(data) {
|
|
446
|
+
if (this.#isBridge) {
|
|
447
|
+
super.send(data);
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
370
450
|
emit(EventType.NET_STREAM, {
|
|
371
|
-
transport:
|
|
372
|
-
direction:
|
|
451
|
+
transport: StreamTransport.WS,
|
|
452
|
+
direction: StreamDirection.OUT,
|
|
373
453
|
url: redactUrl(this.url),
|
|
374
454
|
...frameFields(data, captureBodies),
|
|
375
455
|
});
|
|
376
456
|
super.send(data);
|
|
377
457
|
}
|
|
378
458
|
};
|
|
459
|
+
patchedWebSocket = window.WebSocket;
|
|
460
|
+
}
|
|
461
|
+
// navigator.sendBeacon — fire-and-forget analytics/telemetry, invisible to fetch/XHR wrapping. A page
|
|
462
|
+
// that beacons a "checkout completed" event should show it. Patch the instance's prototype (via
|
|
463
|
+
// getPrototypeOf, robust whether or not the Navigator global exists); the descriptor read avoids an
|
|
464
|
+
// unbound-method access; the send is synchronous so we emit one completed NET_REQUEST with its result.
|
|
465
|
+
const navProto = (typeof navigator !== 'undefined' ? Object.getPrototypeOf(navigator) : null);
|
|
466
|
+
const origBeacon = (navProto === null ? undefined : Object.getOwnPropertyDescriptor(navProto, 'sendBeacon')?.value);
|
|
467
|
+
let patchedBeacon;
|
|
468
|
+
if (navProto !== null && origBeacon !== undefined) {
|
|
469
|
+
patchedBeacon = function (url, data) {
|
|
470
|
+
const id = nextId();
|
|
471
|
+
const redacted = redactUrl(String(url));
|
|
472
|
+
const initiatorStack = initiatorFrame();
|
|
473
|
+
const sent = origBeacon.call(this, url, data);
|
|
474
|
+
// sendBeacon returns whether the payload was QUEUED, not an HTTP result — the response never
|
|
475
|
+
// surfaces to JS. Fabricating status 200 lied to an agent asserting on status. Report status 0
|
|
476
|
+
// (no HTTP response observed) and carry the real signal in `queued`.
|
|
477
|
+
emit(EventType.NET_REQUEST, {
|
|
478
|
+
id,
|
|
479
|
+
method: 'POST',
|
|
480
|
+
url: redacted,
|
|
481
|
+
status: 0,
|
|
482
|
+
ok: sent,
|
|
483
|
+
queued: sent,
|
|
484
|
+
durationMs: 0,
|
|
485
|
+
initiator: 'beacon',
|
|
486
|
+
...(initiatorStack === undefined ? {} : { initiatorStack }),
|
|
487
|
+
});
|
|
488
|
+
return sent;
|
|
489
|
+
};
|
|
490
|
+
navProto.sendBeacon = patchedBeacon;
|
|
379
491
|
}
|
|
380
492
|
return () => {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
window.
|
|
493
|
+
// Restore each slot ONLY if it still holds OUR wrapper. Between connect() and disconnect() the app
|
|
494
|
+
// (or Sentry/analytics/a router) may have wrapped fetch/XHR/EventSource/WebSocket/sendBeacon ON TOP
|
|
495
|
+
// of ours; blindly writing the original back would silently uninstall their instrumentation — the
|
|
496
|
+
// dev-only SDK breaking the app it only meant to observe.
|
|
497
|
+
if (window.fetch === patchedFetch)
|
|
498
|
+
window.fetch = origFetch;
|
|
499
|
+
if (captureMethod(proto, 'open') === patchedOpen)
|
|
500
|
+
proto.open = origOpen;
|
|
501
|
+
if (captureMethod(proto, 'send') === patchedSend)
|
|
502
|
+
proto.send = origSend;
|
|
503
|
+
if (patchedEventSource !== undefined && window.EventSource === patchedEventSource) {
|
|
504
|
+
window.EventSource = origEventSource;
|
|
505
|
+
}
|
|
506
|
+
if (patchedWebSocket !== undefined && window.WebSocket === patchedWebSocket) {
|
|
507
|
+
window.WebSocket = origWebSocket;
|
|
508
|
+
}
|
|
509
|
+
if (navProto !== null && origBeacon !== undefined && navProto.sendBeacon === patchedBeacon) {
|
|
510
|
+
navProto.sendBeacon = origBeacon;
|
|
511
|
+
}
|
|
386
512
|
};
|
|
387
513
|
}
|
|
388
514
|
//# sourceMappingURL=network.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/observers/network.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/observers/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/observers/route.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/observers/route.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAYjD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAsDjD"}
|