@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.
Files changed (160) hide show
  1. package/NOTICE +5 -0
  2. package/dist/actions/actions.d.ts +1 -1
  3. package/dist/actions/actions.d.ts.map +1 -1
  4. package/dist/actions/actions.js +37 -19
  5. package/dist/actions/actions.js.map +1 -1
  6. package/dist/commands/commands.d.ts +2 -0
  7. package/dist/commands/commands.d.ts.map +1 -1
  8. package/dist/commands/commands.js +20 -6
  9. package/dist/commands/commands.js.map +1 -1
  10. package/dist/dom/a11y.d.ts +17 -6
  11. package/dist/dom/a11y.d.ts.map +1 -1
  12. package/dist/dom/a11y.js +68 -32
  13. package/dist/dom/a11y.js.map +1 -1
  14. package/dist/dom/auto-anchor.d.ts +10 -10
  15. package/dist/dom/auto-anchor.js +10 -10
  16. package/dist/dom/blind-spots.d.ts +14 -0
  17. package/dist/dom/blind-spots.d.ts.map +1 -0
  18. package/dist/dom/blind-spots.js +30 -0
  19. package/dist/dom/blind-spots.js.map +1 -0
  20. package/dist/dom/chart.d.ts +93 -0
  21. package/dist/dom/chart.d.ts.map +1 -0
  22. package/dist/dom/chart.js +119 -0
  23. package/dist/dom/chart.js.map +1 -0
  24. package/dist/dom/dom-ignore.d.ts.map +1 -1
  25. package/dist/dom/dom-ignore.js +7 -2
  26. package/dist/dom/dom-ignore.js.map +1 -1
  27. package/dist/dom/query.d.ts +17 -4
  28. package/dist/dom/query.d.ts.map +1 -1
  29. package/dist/dom/query.js +185 -30
  30. package/dist/dom/query.js.map +1 -1
  31. package/dist/dom/refs.d.ts +25 -2
  32. package/dist/dom/refs.d.ts.map +1 -1
  33. package/dist/dom/refs.js +78 -3
  34. package/dist/dom/refs.js.map +1 -1
  35. package/dist/dom/snapshot.d.ts +6 -0
  36. package/dist/dom/snapshot.d.ts.map +1 -1
  37. package/dist/dom/snapshot.js +6 -1
  38. package/dist/dom/snapshot.js.map +1 -1
  39. package/dist/dom/source.d.ts +40 -0
  40. package/dist/dom/source.d.ts.map +1 -0
  41. package/dist/dom/source.js +59 -0
  42. package/dist/dom/source.js.map +1 -0
  43. package/dist/dom/theme.js +2 -2
  44. package/dist/dom/theme.js.map +1 -1
  45. package/dist/index.d.ts +6 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +9 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/observers/blind-spots.d.ts +19 -0
  50. package/dist/observers/blind-spots.d.ts.map +1 -0
  51. package/dist/observers/blind-spots.js +89 -0
  52. package/dist/observers/blind-spots.js.map +1 -0
  53. package/dist/observers/console.d.ts.map +1 -1
  54. package/dist/observers/console.js +39 -6
  55. package/dist/observers/console.js.map +1 -1
  56. package/dist/observers/dom.d.ts.map +1 -1
  57. package/dist/observers/dom.js +68 -9
  58. package/dist/observers/dom.js.map +1 -1
  59. package/dist/observers/focus.d.ts +10 -0
  60. package/dist/observers/focus.d.ts.map +1 -0
  61. package/dist/observers/focus.js +49 -0
  62. package/dist/observers/focus.js.map +1 -0
  63. package/dist/observers/network-body.d.ts +19 -0
  64. package/dist/observers/network-body.d.ts.map +1 -0
  65. package/dist/observers/network-body.js +143 -0
  66. package/dist/observers/network-body.js.map +1 -0
  67. package/dist/observers/network-redact.d.ts +8 -0
  68. package/dist/observers/network-redact.d.ts.map +1 -0
  69. package/dist/observers/network-redact.js +66 -0
  70. package/dist/observers/network-redact.js.map +1 -0
  71. package/dist/observers/network.d.ts +13 -6
  72. package/dist/observers/network.d.ts.map +1 -1
  73. package/dist/observers/network.js +288 -162
  74. package/dist/observers/network.js.map +1 -1
  75. package/dist/observers/route.d.ts.map +1 -1
  76. package/dist/observers/route.js +15 -9
  77. package/dist/observers/route.js.map +1 -1
  78. package/dist/observers/scroll.d.ts.map +1 -1
  79. package/dist/observers/scroll.js +35 -8
  80. package/dist/observers/scroll.js.map +1 -1
  81. package/dist/observers/state.d.ts +20 -0
  82. package/dist/observers/state.d.ts.map +1 -0
  83. package/dist/observers/state.js +87 -0
  84. package/dist/observers/state.js.map +1 -0
  85. package/dist/observers/storage.d.ts +9 -0
  86. package/dist/observers/storage.d.ts.map +1 -1
  87. package/dist/observers/storage.js +105 -3
  88. package/dist/observers/storage.js.map +1 -1
  89. package/dist/observers/types.d.ts +15 -0
  90. package/dist/observers/types.d.ts.map +1 -1
  91. package/dist/observers/types.js +29 -1
  92. package/dist/observers/types.js.map +1 -1
  93. package/dist/patching/capture-method.d.ts +27 -0
  94. package/dist/patching/capture-method.d.ts.map +1 -0
  95. package/dist/patching/capture-method.js +37 -0
  96. package/dist/patching/capture-method.js.map +1 -0
  97. package/dist/presenter/presenter-config.d.ts +3 -3
  98. package/dist/presenter/presenter-config.d.ts.map +1 -1
  99. package/dist/presenter/presenter-config.js +3 -3
  100. package/dist/presenter/presenter-config.js.map +1 -1
  101. package/dist/presenter/presenter-controls.d.ts +1 -1
  102. package/dist/presenter/presenter-controls.d.ts.map +1 -1
  103. package/dist/presenter/presenter-controls.js +3 -3
  104. package/dist/presenter/presenter-controls.js.map +1 -1
  105. package/dist/presenter/presenter-glow.d.ts +1 -1
  106. package/dist/presenter/presenter-glow.js +1 -1
  107. package/dist/presenter/presenter-styles.d.ts +1 -1
  108. package/dist/presenter/presenter-styles.d.ts.map +1 -1
  109. package/dist/presenter/presenter-styles.js +12 -3
  110. package/dist/presenter/presenter-styles.js.map +1 -1
  111. package/dist/presenter/presenter.d.ts +4 -4
  112. package/dist/presenter/presenter.d.ts.map +1 -1
  113. package/dist/presenter/presenter.js +5 -5
  114. package/dist/presenter/presenter.js.map +1 -1
  115. package/dist/recorder/recorder.d.ts +8 -8
  116. package/dist/recorder/recorder.d.ts.map +1 -1
  117. package/dist/recorder/recorder.js +9 -9
  118. package/dist/recorder/recorder.js.map +1 -1
  119. package/dist/registry/capabilities.d.ts +2 -2
  120. package/dist/registry/capabilities.d.ts.map +1 -1
  121. package/dist/registry/capabilities.js +1 -1
  122. package/dist/registry/capabilities.js.map +1 -1
  123. package/dist/registry/domains.d.ts +1 -1
  124. package/dist/registry/domains.js +1 -1
  125. package/dist/registry/emitter.d.ts +2 -2
  126. package/dist/registry/emitter.js +2 -2
  127. package/dist/registry/store-adapters.d.ts +128 -0
  128. package/dist/registry/store-adapters.d.ts.map +1 -0
  129. package/dist/registry/store-adapters.js +135 -0
  130. package/dist/registry/store-adapters.js.map +1 -0
  131. package/dist/registry/stores.d.ts +38 -2
  132. package/dist/registry/stores.d.ts.map +1 -1
  133. package/dist/registry/stores.js +110 -8
  134. package/dist/registry/stores.js.map +1 -1
  135. package/dist/reticle.d.ts +22 -3
  136. package/dist/reticle.d.ts.map +1 -1
  137. package/dist/reticle.js +81 -14
  138. package/dist/reticle.js.map +1 -1
  139. package/dist/review/annotator.js +1 -1
  140. package/dist/review/annotator.js.map +1 -1
  141. package/dist/review/mark-anchor.d.ts.map +1 -1
  142. package/dist/review/mark-anchor.js +1 -21
  143. package/dist/review/mark-anchor.js.map +1 -1
  144. package/dist/security/serialization.d.ts +29 -3
  145. package/dist/security/serialization.d.ts.map +1 -1
  146. package/dist/security/serialization.js +169 -28
  147. package/dist/security/serialization.js.map +1 -1
  148. package/dist/timers/clock.d.ts +13 -0
  149. package/dist/timers/clock.d.ts.map +1 -1
  150. package/dist/timers/clock.js +76 -6
  151. package/dist/timers/clock.js.map +1 -1
  152. package/dist/timers/native-console.d.ts +2 -0
  153. package/dist/timers/native-console.d.ts.map +1 -0
  154. package/dist/timers/native-console.js +10 -0
  155. package/dist/timers/native-console.js.map +1 -0
  156. package/dist/transport/transport.d.ts +1 -1
  157. package/dist/transport/transport.d.ts.map +1 -1
  158. package/dist/transport/transport.js +43 -4
  159. package/dist/transport/transport.js.map +1 -1
  160. package/package.json +7 -3
@@ -1,61 +1,10 @@
1
- import { EventType, REDACTED_VALUE } from '@reticlehq/core';
2
- import { isSensitiveKey, sanitizeForTransport, safeStringify, scrubKnownSecrets, } from '../security/serialization.js';
3
- /**
4
- * Per-body character cap. Bodies ride the same ring buffer as the DOM/route/console timeline, so an
5
- * uncapped body could evict the whole behavioral history; the small cap keeps a few large responses
6
- * from starving the timeline (the separate-budget concern in the scalability audit).
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
- * capture is on and it is a string frame. Binary frames report their byte size, not just a bare type. */
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 url = redactUrl(urlOf(input));
223
- emit(EventType.NET_PENDING, { id, method, url, initiator: 'fetch' });
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
- // Read a CLONE so the app's response stream stays untouched. Dev-only opt-in; only text-like
228
- // bodies; a read failure never breaks the observation.
229
- let responseBodyFields = {};
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
- const { body, truncated } = projectBody(await res.clone().text(), contentType);
233
- responseBodyFields = truncated
234
- ? { responseBody: body, responseBodyTruncated: true }
235
- : { responseBody: body };
263
+ clone = res.clone();
236
264
  }
237
265
  catch {
238
- /* body not readable (already locked/consumed) — skip, keep the envelope */
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
- /* eslint-disable @typescript-eslint/unbound-method -- captured to re-invoke via .call(this) */
272
- const origOpen = proto.open;
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
- // A reused XHR calls send() repeatedly; attach the completion listener ONCE per instance and read the
286
- // request identity from `meta` at fire time. Adding a fresh closure each send() would leave stale
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
- emit(EventType.NET_PENDING, { id: m.id, method: m.method, url: m.url, initiator: 'xhr' });
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, { transport: 'sse', direction: 'open', url });
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: 'sse',
346
- direction: 'in',
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, { transport: 'ws', direction: 'open', url });
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: 'ws',
363
- direction: 'in',
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: 'ws',
372
- direction: 'out',
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
- window.fetch = origFetch;
382
- proto.open = origOpen;
383
- proto.send = origSend;
384
- window.EventSource = origEventSource;
385
- window.WebSocket = origWebSocket;
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;AAWjD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAmDjD"}
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"}