@debugbundle/sdk-browser 1.3.1 → 1.4.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 (40) hide show
  1. package/README.md +27 -0
  2. package/dist/analytics-friction.d.ts +8 -0
  3. package/dist/analytics-friction.d.ts.map +1 -0
  4. package/dist/analytics-friction.js +59 -0
  5. package/dist/analytics-friction.js.map +1 -0
  6. package/dist/analytics-normalization.d.ts +17 -0
  7. package/dist/analytics-normalization.d.ts.map +1 -0
  8. package/dist/analytics-normalization.js +276 -0
  9. package/dist/analytics-normalization.js.map +1 -0
  10. package/dist/analytics.d.ts +41 -0
  11. package/dist/analytics.d.ts.map +1 -0
  12. package/dist/analytics.js +410 -0
  13. package/dist/analytics.js.map +1 -0
  14. package/dist/capture-helpers.d.ts +11 -0
  15. package/dist/capture-helpers.d.ts.map +1 -0
  16. package/dist/capture-helpers.js +156 -0
  17. package/dist/capture-helpers.js.map +1 -0
  18. package/dist/event-pipeline.d.ts +13 -0
  19. package/dist/event-pipeline.d.ts.map +1 -0
  20. package/dist/event-pipeline.js +96 -0
  21. package/dist/event-pipeline.js.map +1 -0
  22. package/dist/event-transport.d.ts +31 -0
  23. package/dist/event-transport.d.ts.map +1 -0
  24. package/dist/event-transport.js +217 -0
  25. package/dist/event-transport.js.map +1 -0
  26. package/dist/index.d.ts +10 -31
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +147 -672
  29. package/dist/index.js.map +1 -1
  30. package/dist/probes.d.ts +39 -0
  31. package/dist/probes.d.ts.map +1 -0
  32. package/dist/probes.js +190 -0
  33. package/dist/probes.js.map +1 -0
  34. package/dist/runtime.d.ts +4 -2
  35. package/dist/runtime.d.ts.map +1 -1
  36. package/dist/runtime.js +52 -0
  37. package/dist/runtime.js.map +1 -1
  38. package/dist/types.d.ts +123 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/package.json +3 -3
@@ -0,0 +1,410 @@
1
+ import { createBrowserTraceId, normalizeSampleRate } from "./runtime.js";
2
+ import { BrowserAnalyticsFrictionTracker } from "./analytics-friction.js";
3
+ import { buildAnalyticsDimensions, getAnalyticsProjectTokenFields, getStructuralActionKey, isDeadClickCandidate, normalizeAnalyticsPrivacyMode, normalizeAnalyticsRoute, normalizeAnalyticsSignal, omitBuiltInAnalyticsDimensions, removeStoredAnalyticsVisitor, resolveStandardAnalyticsVisitor, sanitizeAnalyticsCustomDimensions } from "./analytics-normalization.js";
4
+ import { SDK_NAME, SDK_VERSION } from "./types.js";
5
+ const ANALYTICS_EVENT_SCHEMA_VERSION = "2026-07-analytics-01";
6
+ const HASH_PATTERN = /^sha256:[a-f0-9]{64}$/i;
7
+ const MAX_PENDING_STANDARD_EVENTS = 16;
8
+ export class BrowserAnalyticsController {
9
+ host;
10
+ active = null;
11
+ lastRoute = null;
12
+ sessionSummaryCaptured = false;
13
+ frictionTracker = new BrowserAnalyticsFrictionTracker();
14
+ constructor(host) {
15
+ this.host = host;
16
+ }
17
+ api = {
18
+ setConsent: (value) => {
19
+ if (this.active !== null) {
20
+ this.active.consentGranted = value;
21
+ this.active.consentExplicitlySet = true;
22
+ if (!value) {
23
+ this.clearStandardVisitor(this.active);
24
+ }
25
+ else if (this.active.captureReady) {
26
+ void this.initializeStandardVisitor(this.active);
27
+ }
28
+ }
29
+ },
30
+ pageView: (input = {}) => {
31
+ this.captureWhenReady(() => this.capturePageView(input, "page_view"));
32
+ },
33
+ track: (name, dimensions = {}) => {
34
+ this.captureWhenReady(() => this.captureSignal("action", { action_key: name }, dimensions));
35
+ },
36
+ funnel: (name, step, dimensions = {}) => {
37
+ this.captureWhenReady(() => this.captureSignal("funnel_step", { funnel_key: name, step_key: step }, dimensions));
38
+ },
39
+ convert: (name, dimensions = {}) => {
40
+ this.captureWhenReady(() => this.captureSignal("conversion", { conversion_key: name }, dimensions));
41
+ },
42
+ marker: (name, dimensions = {}) => {
43
+ this.captureWhenReady(() => this.captureSignal("journey_marker", { marker_key: name }, dimensions));
44
+ },
45
+ setContext: (dimensions) => {
46
+ this.captureWhenReady(() => this.setContext(dimensions));
47
+ },
48
+ setUserHash: (hash) => {
49
+ this.captureWhenReady(() => {
50
+ if (this.active === null) {
51
+ return;
52
+ }
53
+ this.active.userIdHash =
54
+ this.active.privacyMode !== "strict" && typeof hash === "string" && HASH_PATTERN.test(hash)
55
+ ? hash.toLowerCase()
56
+ : null;
57
+ });
58
+ }
59
+ };
60
+ configure(config, options = {}) {
61
+ this.sessionSummaryCaptured = false;
62
+ const enabled = config?.enabled === true;
63
+ if (!enabled) {
64
+ this.active = null;
65
+ this.lastRoute = null;
66
+ return;
67
+ }
68
+ const sampleRate = normalizeSampleRate(config?.sampleRate, 1);
69
+ if (sampleRate <= 0 || Math.random() > sampleRate) {
70
+ this.active = null;
71
+ this.lastRoute = null;
72
+ return;
73
+ }
74
+ const privacyMode = normalizeAnalyticsPrivacyMode(config?.privacyMode);
75
+ const consentRequired = config?.consentRequired === true;
76
+ this.active = {
77
+ enabled,
78
+ privacyMode,
79
+ consentRequired,
80
+ consentGranted: !consentRequired,
81
+ consentExplicitlySet: false,
82
+ trackPageViews: config?.trackPageViews !== false,
83
+ trackRouteChanges: config?.trackRouteChanges !== false,
84
+ trackSessions: config?.trackSessions !== false,
85
+ trackReferrers: config?.trackReferrers !== false,
86
+ captureActions: true,
87
+ trackActions: config?.trackActions === true,
88
+ trackFrictionSignals: config?.trackFrictionSignals !== false,
89
+ sampleRate,
90
+ sessionId: this.host.getSessionId(),
91
+ sessionStartedAtMs: Date.now(),
92
+ sessionPageviews: 0,
93
+ captureReady: options.deferCapture !== true,
94
+ pendingCaptures: [],
95
+ visitorIdHash: null,
96
+ visitorStorageKey: null,
97
+ visitorInitializationPending: false,
98
+ pendingEvents: [],
99
+ userIdHash: null,
100
+ context: {}
101
+ };
102
+ this.lastRoute = null;
103
+ this.frictionTracker.reset();
104
+ if (this.active.captureReady) {
105
+ void this.initializeStandardVisitor(this.active);
106
+ }
107
+ }
108
+ markCaptureReady() {
109
+ const active = this.active;
110
+ if (active === null || active.captureReady) {
111
+ return;
112
+ }
113
+ active.captureReady = true;
114
+ void this.initializeStandardVisitor(active);
115
+ const pendingCaptures = active.pendingCaptures;
116
+ active.pendingCaptures = [];
117
+ this.captureSessionStart();
118
+ this.captureInitialPageView();
119
+ for (const capture of pendingCaptures) {
120
+ capture();
121
+ }
122
+ }
123
+ reset() {
124
+ this.active = null;
125
+ this.lastRoute = null;
126
+ this.sessionSummaryCaptured = false;
127
+ this.frictionTracker.reset();
128
+ }
129
+ captureSessionStart() {
130
+ if (this.active?.trackSessions !== true) {
131
+ return;
132
+ }
133
+ this.enqueue("session_start", {}, null, {});
134
+ }
135
+ captureSessionSummary() {
136
+ if (this.active?.trackSessions !== true || this.sessionSummaryCaptured) {
137
+ return;
138
+ }
139
+ if (this.enqueue("session_summary", {}, this.lastRoute, {})) {
140
+ this.sessionSummaryCaptured = true;
141
+ }
142
+ }
143
+ prepareForUnload() {
144
+ const active = this.active;
145
+ if (active?.visitorInitializationPending === true) {
146
+ active.visitorInitializationPending = false;
147
+ this.flushPendingEvents(active);
148
+ }
149
+ }
150
+ captureInitialPageView() {
151
+ if (this.active?.trackPageViews !== true) {
152
+ return;
153
+ }
154
+ this.capturePageView({}, "page_view");
155
+ }
156
+ captureRouteChange(path) {
157
+ this.captureWhenReady(() => {
158
+ if (this.active?.trackRouteChanges === true) {
159
+ this.capturePageView({ path }, "route_change");
160
+ }
161
+ });
162
+ }
163
+ applyRemoteSettings(remote) {
164
+ const active = this.active;
165
+ if (active === null) {
166
+ return;
167
+ }
168
+ active.enabled = active.enabled && remote.enabled;
169
+ if (remote.privacyMode === "strict") {
170
+ active.privacyMode = "strict";
171
+ active.userIdHash = null;
172
+ this.clearStandardVisitor(active);
173
+ }
174
+ active.consentRequired = active.consentRequired || remote.consentRequired;
175
+ if (active.consentRequired && !active.consentExplicitlySet) {
176
+ active.consentGranted = false;
177
+ this.clearStandardVisitor(active);
178
+ }
179
+ active.trackPageViews = active.trackPageViews && remote.capturePageViews;
180
+ active.trackRouteChanges = active.trackRouteChanges && remote.captureRouteChanges;
181
+ active.captureActions = active.captureActions && remote.captureActions;
182
+ active.trackActions = active.trackActions && remote.captureActions;
183
+ active.trackFrictionSignals = active.trackFrictionSignals && remote.captureFrictionSignals;
184
+ if (!active.enabled) {
185
+ this.clearStandardVisitor(active);
186
+ }
187
+ }
188
+ shouldCaptureStructuralActions() {
189
+ return this.active?.enabled === true && this.active.trackActions && this.active.captureActions && this.active.consentGranted;
190
+ }
191
+ shouldCaptureFrictionSignals() {
192
+ return this.active?.enabled === true && this.active.trackFrictionSignals && this.active.consentGranted;
193
+ }
194
+ captureStructuralAction(target) {
195
+ if (!this.shouldCaptureStructuralActions()) {
196
+ return;
197
+ }
198
+ const actionKey = getStructuralActionKey(target);
199
+ if (actionKey === null) {
200
+ return;
201
+ }
202
+ this.captureWhenReady(() => {
203
+ if (this.shouldCaptureStructuralActions()) {
204
+ this.enqueue("action", { action_key: actionKey }, this.lastRoute, {});
205
+ }
206
+ });
207
+ }
208
+ captureFrictionClick(target, targetIdentity) {
209
+ if (!this.shouldCaptureFrictionSignals() || targetIdentity === null || typeof targetIdentity !== "object") {
210
+ return;
211
+ }
212
+ this.captureWhenReady(() => {
213
+ if (!this.shouldCaptureFrictionSignals()) {
214
+ return;
215
+ }
216
+ const markerKey = this.frictionTracker.recordClick(targetIdentity, getStructuralActionKey(target) !== null, isDeadClickCandidate(target), Date.now());
217
+ if (markerKey !== null) {
218
+ this.enqueue("journey_marker", { marker_key: markerKey }, this.lastRoute, {});
219
+ }
220
+ });
221
+ }
222
+ capturePageView(input, kind) {
223
+ const route = normalizeAnalyticsRoute(input.path ?? this.host.getCurrentRoute(), input.title ?? null);
224
+ if (route === null) {
225
+ return;
226
+ }
227
+ const previousRoute = kind === "route_change" ? this.lastRoute : null;
228
+ if (this.enqueue(kind, {}, route, {}, previousRoute)) {
229
+ this.lastRoute = route;
230
+ if (this.active !== null) {
231
+ this.active.sessionPageviews += 1;
232
+ }
233
+ if (kind === "route_change") {
234
+ this.captureBacktrackFriction(previousRoute, route);
235
+ }
236
+ }
237
+ }
238
+ captureBacktrackFriction(previousRoute, route) {
239
+ if (!this.shouldCaptureFrictionSignals() || previousRoute === null || route === null) {
240
+ return;
241
+ }
242
+ const fromPath = previousRoute.normalized_path;
243
+ const toPath = route.normalized_path;
244
+ if (fromPath === null || toPath === null || fromPath === toPath) {
245
+ return;
246
+ }
247
+ const markerKey = this.frictionTracker.recordRouteTransition(fromPath, toPath, Date.now());
248
+ if (markerKey !== null) {
249
+ this.enqueue("journey_marker", { marker_key: markerKey }, route, {});
250
+ }
251
+ }
252
+ captureSignal(kind, signal, dimensions) {
253
+ if (kind === "action" && this.active?.captureActions !== true) {
254
+ return;
255
+ }
256
+ const normalizedSignal = normalizeAnalyticsSignal(signal);
257
+ if ((kind === "action" && normalizedSignal.action_key === null) ||
258
+ (kind === "funnel_step" && (normalizedSignal.funnel_key === null || normalizedSignal.step_key === null)) ||
259
+ (kind === "conversion" && normalizedSignal.conversion_key === null) ||
260
+ (kind === "journey_marker" && normalizedSignal.marker_key === null)) {
261
+ return;
262
+ }
263
+ this.enqueue(kind, normalizedSignal, kind === "journey_marker" ? this.lastRoute : null, sanitizeAnalyticsCustomDimensions(dimensions));
264
+ }
265
+ enqueue(kind, signal, route, dimensions, previousRoute = null) {
266
+ const sdkConfig = this.host.getConfig();
267
+ const active = this.active;
268
+ if (sdkConfig === null || active === null || !active.enabled || !active.consentGranted) {
269
+ return false;
270
+ }
271
+ const mergedDimensions = {
272
+ ...active.context,
273
+ ...dimensions
274
+ };
275
+ const event = {
276
+ schema_version: ANALYTICS_EVENT_SCHEMA_VERSION,
277
+ event_id: createBrowserTraceId(),
278
+ event_type: "analytics_event",
279
+ ...getAnalyticsProjectTokenFields(sdkConfig),
280
+ sdk_name: SDK_NAME,
281
+ sdk_version: SDK_VERSION,
282
+ service: {
283
+ name: sdkConfig.service,
284
+ runtime: "browser",
285
+ framework: null,
286
+ environment: sdkConfig.environment
287
+ },
288
+ occurred_at: new Date().toISOString(),
289
+ correlation: {
290
+ session_id: active.sessionId,
291
+ visitor_id_hash: active.visitorIdHash,
292
+ user_id_hash: active.userIdHash,
293
+ trace_id: null,
294
+ deploy_id: null
295
+ },
296
+ payload: {
297
+ kind,
298
+ privacy: {
299
+ mode: active.privacyMode,
300
+ consent_granted: active.consentGranted
301
+ },
302
+ ...(kind === "session_summary"
303
+ ? {
304
+ session: {
305
+ duration_ms: Math.min(86_400_000, Math.max(0, Date.now() - active.sessionStartedAtMs)),
306
+ pageviews: active.sessionPageviews
307
+ }
308
+ }
309
+ : {}),
310
+ signal: normalizeAnalyticsSignal(signal),
311
+ route,
312
+ ...(previousRoute !== null ? { previous_route: previousRoute } : {}),
313
+ dimensions: buildAnalyticsDimensions(this.host.getDeviceInfo(), active.trackReferrers, mergedDimensions),
314
+ custom_dimensions: omitBuiltInAnalyticsDimensions(mergedDimensions)
315
+ }
316
+ };
317
+ if (active.visitorInitializationPending) {
318
+ if (active.pendingEvents.length < MAX_PENDING_STANDARD_EVENTS) {
319
+ active.pendingEvents.push(event);
320
+ }
321
+ return true;
322
+ }
323
+ this.host.enqueue(event);
324
+ return true;
325
+ }
326
+ async initializeStandardVisitor(active) {
327
+ if (active.privacyMode !== "standard" ||
328
+ !active.enabled ||
329
+ !active.consentGranted ||
330
+ active.visitorIdHash !== null ||
331
+ active.visitorInitializationPending) {
332
+ return;
333
+ }
334
+ const projectToken = this.host.getConfig()?.projectToken;
335
+ if (projectToken === null || projectToken === undefined) {
336
+ return;
337
+ }
338
+ active.visitorInitializationPending = true;
339
+ try {
340
+ const visitor = await resolveStandardAnalyticsVisitor(projectToken);
341
+ if (visitor === null) {
342
+ return;
343
+ }
344
+ active.visitorStorageKey = visitor.storageKey;
345
+ if (this.active !== active || active.privacyMode !== "standard" || !active.consentGranted) {
346
+ removeStoredAnalyticsVisitor(visitor.storageKey);
347
+ return;
348
+ }
349
+ if (this.active === active && active.privacyMode === "standard" && active.consentGranted) {
350
+ active.visitorIdHash = visitor.visitorIdHash;
351
+ }
352
+ }
353
+ catch {
354
+ // Browser storage and crypto APIs are optional; analytics falls back to session-only.
355
+ }
356
+ finally {
357
+ if (this.active === active) {
358
+ active.visitorInitializationPending = false;
359
+ this.flushPendingEvents(active);
360
+ }
361
+ }
362
+ }
363
+ clearStandardVisitor(active) {
364
+ if (active.visitorStorageKey !== null) {
365
+ removeStoredAnalyticsVisitor(active.visitorStorageKey);
366
+ }
367
+ active.visitorIdHash = null;
368
+ active.pendingEvents = [];
369
+ }
370
+ flushPendingEvents(active) {
371
+ const pendingEvents = active.pendingEvents;
372
+ active.pendingEvents = [];
373
+ if (!active.enabled || !active.consentGranted) {
374
+ return;
375
+ }
376
+ for (const event of pendingEvents) {
377
+ event.correlation.visitor_id_hash = active.visitorIdHash;
378
+ this.host.enqueue(event);
379
+ }
380
+ }
381
+ setContext(dimensions) {
382
+ const active = this.active;
383
+ if (active === null) {
384
+ return;
385
+ }
386
+ const authState = dimensions["auth_state"];
387
+ const sanitized = sanitizeAnalyticsCustomDimensions(dimensions);
388
+ if (authState === "anonymous" || authState === "authenticated" || authState === "unknown") {
389
+ sanitized["auth_state"] = authState;
390
+ }
391
+ active.context = {
392
+ ...active.context,
393
+ ...sanitized
394
+ };
395
+ }
396
+ captureWhenReady(capture) {
397
+ const active = this.active;
398
+ if (active === null) {
399
+ return;
400
+ }
401
+ if (active.captureReady) {
402
+ capture();
403
+ return;
404
+ }
405
+ if (active.pendingCaptures.length < MAX_PENDING_STANDARD_EVENTS) {
406
+ active.pendingCaptures.push(capture);
407
+ }
408
+ }
409
+ }
410
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ActiveConfig, BrowserCapturePreset, BrowserCaptureRequestEvents, BrowserRejectionReasonContext, BrowserRemoteProbeState } from "./types.js";
2
+ export declare function createInitialRemoteProbeState(): BrowserRemoteProbeState;
3
+ export declare function normalizeUnhandledRejectionReason(reason: unknown): {
4
+ error: unknown;
5
+ rejectionReason: BrowserRejectionReasonContext;
6
+ };
7
+ export declare function isImmediateRequestIncidentStatus(statusCode: number, preset: BrowserCapturePreset, immediateClientErrorStatuses?: readonly number[], requestPath?: string, httpMethod?: string, immediateClientErrorPathRules?: BrowserRemoteProbeState["immediateClientErrorPathRules"]): boolean;
8
+ export declare function shouldCaptureRequestStatus(statusCode: number, preset: BrowserCapturePreset, policy: BrowserCaptureRequestEvents, immediateClientErrorStatuses?: readonly number[], requestPath?: string, httpMethod?: string, immediateClientErrorPathRules?: BrowserRemoteProbeState["immediateClientErrorPathRules"]): boolean;
9
+ export declare function shouldCaptureBrowserNetworkRequest(config: ActiveConfig | null, url: string, statusCode: number, durationMs: number): boolean;
10
+ export declare function shouldCaptureFailedBrowserNetworkRequest(config: ActiveConfig | null, url: string, durationMs: number): boolean;
11
+ //# sourceMappingURL=capture-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-helpers.d.ts","sourceRoot":"","sources":["../src/capture-helpers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,2BAA2B,EAE3B,6BAA6B,EAC7B,uBAAuB,EACxB,MAAM,YAAY,CAAC;AASpB,wBAAgB,6BAA6B,IAAI,uBAAuB,CAWvE;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,OAAO,GAAG;IAClE,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,6BAA6B,CAAC;CAChD,CAmDA;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oBAAoB,EAC5B,4BAA4B,GAAE,SAAS,MAAM,EAAO,EACpD,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,6BAA6B,GAAE,uBAAuB,CAAC,+BAA+B,CAAM,GAC3F,OAAO,CAcT;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,2BAA2B,EACnC,4BAA4B,GAAE,SAAS,MAAM,EAAO,EACpD,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,6BAA6B,GAAE,uBAAuB,CAAC,+BAA+B,CAAM,GAC3F,OAAO,CAeT;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAMT;AAED,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAET"}
@@ -0,0 +1,156 @@
1
+ import { getLocationSource, matchesBrowserPattern, matchesStatusCodeFilter, normalizeUnknownRecord } from "./runtime.js";
2
+ const DEFAULT_REQUEST_FAILURE_PRESET = "balanced";
3
+ const DEFAULT_REQUEST_CAPTURE_EVENTS = "failures_only";
4
+ const DEFAULT_IMMEDIATE_CLIENT_ERROR_STATUSES = [];
5
+ const MAX_REJECTION_REASON_PREVIEW_LENGTH = 500;
6
+ const BALANCED_IMMEDIATE_REQUEST_STATUSES = new Set([408, 423, 424, 425, 429]);
7
+ const INVESTIGATIVE_IMMEDIATE_REQUEST_STATUSES = new Set([...BALANCED_IMMEDIATE_REQUEST_STATUSES, 409]);
8
+ export function createInitialRemoteProbeState() {
9
+ return {
10
+ probesEnabled: false,
11
+ remoteProbesEnabled: false,
12
+ directives: [],
13
+ triggerTokenKey: null,
14
+ requestFailurePreset: DEFAULT_REQUEST_FAILURE_PRESET,
15
+ requestCaptureEvents: DEFAULT_REQUEST_CAPTURE_EVENTS,
16
+ immediateClientErrorStatuses: [...DEFAULT_IMMEDIATE_CLIENT_ERROR_STATUSES],
17
+ immediateClientErrorPathRules: []
18
+ };
19
+ }
20
+ export function normalizeUnhandledRejectionReason(reason) {
21
+ if (reason instanceof Error) {
22
+ return {
23
+ error: reason,
24
+ rejectionReason: {
25
+ kind: "error",
26
+ name: reason.name || "Error",
27
+ message: truncateRejectionReasonPreview(reason.message || "Unknown rejection error")
28
+ }
29
+ };
30
+ }
31
+ if (typeof reason === "string") {
32
+ const preview = truncateRejectionReasonPreview(reason.length > 0 ? reason : "[empty string]");
33
+ return {
34
+ error: new Error(reason.length > 0 ? reason : "Unhandled promise rejection"),
35
+ rejectionReason: { kind: "string", preview }
36
+ };
37
+ }
38
+ if (reason === null) {
39
+ return {
40
+ error: new Error("Unhandled promise rejection: null"),
41
+ rejectionReason: { kind: "null", preview: "null" }
42
+ };
43
+ }
44
+ if (reason === undefined) {
45
+ return {
46
+ error: new Error("Unhandled promise rejection: undefined"),
47
+ rejectionReason: { kind: "undefined", preview: "undefined" }
48
+ };
49
+ }
50
+ const record = normalizeUnknownRecord(reason);
51
+ const name = readReasonStringField(record, "name");
52
+ const message = readReasonStringField(record, "message");
53
+ const constructorName = typeof reason === "object" && reason !== null && "constructor" in reason
54
+ ? reason.constructor?.name
55
+ : undefined;
56
+ const preview = typeof constructorName === "string" && constructorName.length > 0 ? constructorName : "object";
57
+ return {
58
+ error: new Error(message ?? "Unhandled promise rejection"),
59
+ rejectionReason: {
60
+ kind: "object",
61
+ ...(name === undefined ? {} : { name }),
62
+ ...(message === undefined ? {} : { message }),
63
+ preview
64
+ }
65
+ };
66
+ }
67
+ export function isImmediateRequestIncidentStatus(statusCode, preset, immediateClientErrorStatuses = [], requestPath, httpMethod, immediateClientErrorPathRules = []) {
68
+ if (!Number.isFinite(statusCode)) {
69
+ return false;
70
+ }
71
+ if (statusCode >= 500 || immediateClientErrorStatuses.includes(statusCode)) {
72
+ return true;
73
+ }
74
+ if (matchesImmediateClientErrorPathRule(statusCode, requestPath, httpMethod, immediateClientErrorPathRules)) {
75
+ return true;
76
+ }
77
+ if (preset === "investigative") {
78
+ return INVESTIGATIVE_IMMEDIATE_REQUEST_STATUSES.has(statusCode);
79
+ }
80
+ return preset === "balanced" && BALANCED_IMMEDIATE_REQUEST_STATUSES.has(statusCode);
81
+ }
82
+ export function shouldCaptureRequestStatus(statusCode, preset, policy, immediateClientErrorStatuses = [], requestPath, httpMethod, immediateClientErrorPathRules = []) {
83
+ if (isImmediateRequestIncidentStatus(statusCode, preset, immediateClientErrorStatuses, requestPath, httpMethod, immediateClientErrorPathRules)) {
84
+ return true;
85
+ }
86
+ if (policy === "all") {
87
+ return Number.isFinite(statusCode) && statusCode >= 400;
88
+ }
89
+ return policy === "failures_only" && statusCode >= 500;
90
+ }
91
+ export function shouldCaptureBrowserNetworkRequest(config, url, statusCode, durationMs) {
92
+ if (config === null || !matchesNetworkFilter(config, url, durationMs)) {
93
+ return false;
94
+ }
95
+ return matchesStatusCodeFilter(statusCode, config.networkFilter.statusCodes);
96
+ }
97
+ export function shouldCaptureFailedBrowserNetworkRequest(config, url, durationMs) {
98
+ return config !== null && matchesNetworkFilter(config, url, durationMs);
99
+ }
100
+ function matchesNetworkFilter(config, url, durationMs) {
101
+ const filter = config.networkFilter;
102
+ if (filter.urlPatterns.length > 0 && !filter.urlPatterns.some((pattern) => matchesBrowserPattern(url, pattern))) {
103
+ return false;
104
+ }
105
+ if (filter.urlDenyPatterns.some((pattern) => matchesBrowserPattern(url, pattern))) {
106
+ return false;
107
+ }
108
+ return filter.minResponseTime === null || durationMs >= filter.minResponseTime;
109
+ }
110
+ function truncateRejectionReasonPreview(value) {
111
+ return value.length > MAX_REJECTION_REASON_PREVIEW_LENGTH
112
+ ? `${value.slice(0, MAX_REJECTION_REASON_PREVIEW_LENGTH)}[truncated]`
113
+ : value;
114
+ }
115
+ function readReasonStringField(record, key) {
116
+ const value = record[key];
117
+ return typeof value === "string" && value.trim().length > 0
118
+ ? truncateRejectionReasonPreview(value.trim())
119
+ : undefined;
120
+ }
121
+ function matchesImmediateClientErrorPathRule(statusCode, requestPath, httpMethod, rules) {
122
+ if (statusCode < 400 || statusCode > 499 || requestPath === undefined) {
123
+ return false;
124
+ }
125
+ const normalizedPath = normalizeRequestPath(requestPath);
126
+ const normalizedMethod = typeof httpMethod === "string" ? httpMethod.toUpperCase() : null;
127
+ return rules.some((rule) => {
128
+ if (rule.statusCode !== statusCode) {
129
+ return false;
130
+ }
131
+ if (rule.methods.length > 0 && (normalizedMethod === null || !rule.methods.includes(normalizedMethod))) {
132
+ return false;
133
+ }
134
+ if (rule.pathPattern.endsWith("*")) {
135
+ return normalizedPath.startsWith(rule.pathPattern.slice(0, -1));
136
+ }
137
+ return normalizedPath === rule.pathPattern;
138
+ });
139
+ }
140
+ function normalizeRequestPath(value) {
141
+ try {
142
+ return new URL(value, getLocationSource()?.href ?? "https://debugbundle.local").pathname || "/";
143
+ }
144
+ catch {
145
+ const queryIndex = value.indexOf("?");
146
+ const fragmentIndex = value.indexOf("#");
147
+ const end = queryIndex === -1
148
+ ? (fragmentIndex === -1 ? value.length : fragmentIndex)
149
+ : fragmentIndex === -1
150
+ ? queryIndex
151
+ : Math.min(queryIndex, fragmentIndex);
152
+ const path = value.slice(0, end);
153
+ return path.startsWith("/") && path.length > 0 ? path : "/";
154
+ }
155
+ }
156
+ //# sourceMappingURL=capture-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-helpers.js","sourceRoot":"","sources":["../src/capture-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,cAAc,CAAC;AAUtB,MAAM,8BAA8B,GAAyB,UAAU,CAAC;AACxE,MAAM,8BAA8B,GAAgC,eAAe,CAAC;AACpF,MAAM,uCAAuC,GAAa,EAAE,CAAC;AAC7D,MAAM,mCAAmC,GAAG,GAAG,CAAC;AAChD,MAAM,mCAAmC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/E,MAAM,wCAAwC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,mCAAmC,EAAE,GAAG,CAAC,CAAC,CAAC;AAExG,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,aAAa,EAAE,KAAK;QACpB,mBAAmB,EAAE,KAAK;QAC1B,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,8BAA8B;QACpD,oBAAoB,EAAE,8BAA8B;QACpD,4BAA4B,EAAE,CAAC,GAAG,uCAAuC,CAAC;QAC1E,6BAA6B,EAAE,EAAE;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,MAAe;IAI/D,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;QAC5B,OAAO;YACL,KAAK,EAAE,MAAM;YACb,eAAe,EAAE;gBACf,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,OAAO;gBAC5B,OAAO,EAAE,8BAA8B,CAAC,MAAM,CAAC,OAAO,IAAI,yBAAyB,CAAC;aACrF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,8BAA8B,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC9F,OAAO;YACL,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC;YAC5E,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;SAC7C,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;YACL,KAAK,EAAE,IAAI,KAAK,CAAC,mCAAmC,CAAC;YACrD,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;SACnD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;YACL,KAAK,EAAE,IAAI,KAAK,CAAC,wCAAwC,CAAC;YAC1D,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;SAC7D,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,aAAa,IAAI,MAAM;QAC9F,CAAC,CAAE,MAA+C,CAAC,WAAW,EAAE,IAAI;QACpE,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE/G,OAAO;QACL,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,6BAA6B,CAAC;QAC1D,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;YAC7C,OAAO;SACR;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,UAAkB,EAClB,MAA4B,EAC5B,+BAAkD,EAAE,EACpD,WAAoB,EACpB,UAAmB,EACnB,gCAA0F,EAAE;IAE5F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,UAAU,IAAI,GAAG,IAAI,4BAA4B,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,mCAAmC,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,6BAA6B,CAAC,EAAE,CAAC;QAC5G,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,wCAAwC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,KAAK,UAAU,IAAI,mCAAmC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,UAAkB,EAClB,MAA4B,EAC5B,MAAmC,EACnC,+BAAkD,EAAE,EACpD,WAAoB,EACpB,UAAmB,EACnB,gCAA0F,EAAE;IAE5F,IAAI,gCAAgC,CAClC,UAAU,EACV,MAAM,EACN,4BAA4B,EAC5B,WAAW,EACX,UAAU,EACV,6BAA6B,CAC9B,EAAE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,KAAK,eAAe,IAAI,UAAU,IAAI,GAAG,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,MAA2B,EAC3B,GAAW,EACX,UAAkB,EAClB,UAAkB;IAElB,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,uBAAuB,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,MAA2B,EAC3B,GAAW,EACX,UAAkB;IAElB,OAAO,MAAM,KAAK,IAAI,IAAI,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAoB,EAAE,GAAW,EAAE,UAAkB;IACjF,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IACpC,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QAChH,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,eAAe,KAAK,IAAI,IAAI,UAAU,IAAI,MAAM,CAAC,eAAe,CAAC;AACjF,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAa;IACnD,OAAO,KAAK,CAAC,MAAM,GAAG,mCAAmC;QACvD,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,mCAAmC,CAAC,aAAa;QACrE,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA+B,EAAE,GAAW;IACzE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACzD,CAAC,CAAC,8BAA8B,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,mCAAmC,CAC1C,UAAkB,EAClB,WAA+B,EAC/B,UAA8B,EAC9B,KAA+D;IAE/D,IAAI,UAAU,GAAG,GAAG,IAAI,UAAU,GAAG,GAAG,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAqC,CAAC,CAAC,EAAE,CAAC;YAC5H,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,cAAc,KAAK,IAAI,CAAC,WAAW,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,IAAI,IAAI,2BAA2B,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC;IAClG,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,UAAU,KAAK,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;YACvD,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC;gBACpB,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { EventEnvelope } from "@debugbundle/shared-types";
2
+ import type { ActiveConfig, BrowserBreadcrumb } from "./types.js";
3
+ export declare function applyBrowserCaptureRules(input: {
4
+ config: ActiveConfig | null;
5
+ event: EventEnvelope;
6
+ currentRoute: string | null;
7
+ now: string;
8
+ }): {
9
+ event: EventEnvelope | null;
10
+ breadcrumb: BrowserBreadcrumb | null;
11
+ };
12
+ export declare function buildBrowserSuppressionKey(event: EventEnvelope): string | null;
13
+ //# sourceMappingURL=event-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-pipeline.d.ts","sourceRoot":"","sources":["../src/event-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAsC,MAAM,YAAY,CAAC;AAEtG,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb,GAAG;IAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAE,CA4CxE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CA4B9E"}