@debugbundle/shared-types 0.1.7 → 0.1.9

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-rule-suggestions.d.ts","sourceRoot":"","sources":["../src/capture-rule-suggestions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,351 @@
1
+ import { z } from "zod";
2
+ import { CaptureRuleActionSchema, CaptureRuleCreateSchema, CaptureRuleEventTypeSchema } from "./capture-rules.js";
3
+ export const CaptureRuleSuggestionConfidenceSchema = z.enum(["high", "medium", "low"]);
4
+ export const CaptureRuleSuggestionSchema = z.object({
5
+ suggestion_id: z.string().min(1).max(120),
6
+ label: z.string().min(1).max(200),
7
+ recommended_action: CaptureRuleActionSchema,
8
+ confidence: CaptureRuleSuggestionConfidenceSchema,
9
+ reason: z.string().min(1).max(500),
10
+ requires_confirmation: z.boolean(),
11
+ rule: CaptureRuleCreateSchema
12
+ });
13
+ export const CaptureRuleSuggestionsResponseSchema = z.object({
14
+ suggestions: z.array(CaptureRuleSuggestionSchema),
15
+ bundle_status: z.enum(["ready", "pending", "failed"]).optional(),
16
+ bundle_reason: z.string().nullable().optional()
17
+ });
18
+ export const CreateCaptureRuleFromSuggestionSchema = z.object({
19
+ suggestion_id: z.string().min(1).max(120),
20
+ name: z.string().trim().min(1).max(120).optional(),
21
+ description: z.string().trim().max(500).nullable().optional(),
22
+ enabled: z.boolean().optional(),
23
+ expires_at: z.string().datetime().nullable().optional()
24
+ });
25
+ function normalizeHostHeader(value) {
26
+ if (typeof value !== "string") {
27
+ return undefined;
28
+ }
29
+ const trimmed = value.trim().toLowerCase();
30
+ if (trimmed.length === 0) {
31
+ return undefined;
32
+ }
33
+ const withoutPort = trimmed.split(":", 1)[0];
34
+ return withoutPort && withoutPort.length > 0 ? withoutPort : undefined;
35
+ }
36
+ function normalizePath(value) {
37
+ const trimmed = value?.trim();
38
+ if (trimmed === undefined || trimmed.length === 0) {
39
+ return undefined;
40
+ }
41
+ const pathWithoutQueryOrFragment = trimmed.split(/[?#]/, 1)[0] ?? "";
42
+ if (pathWithoutQueryOrFragment.length === 0) {
43
+ return "/";
44
+ }
45
+ return pathWithoutQueryOrFragment.startsWith("/") ? pathWithoutQueryOrFragment : `/${pathWithoutQueryOrFragment}`;
46
+ }
47
+ function normalizeUrl(value) {
48
+ const trimmed = value?.trim();
49
+ if (trimmed === undefined || trimmed.length === 0) {
50
+ return {};
51
+ }
52
+ const relativePath = normalizePath(trimmed);
53
+ if (relativePath !== undefined && trimmed.startsWith("/")) {
54
+ return {
55
+ path: relativePath,
56
+ firstParty: true
57
+ };
58
+ }
59
+ try {
60
+ const parsed = new URL(trimmed);
61
+ if (parsed.protocol === "http:" || parsed.protocol === "https:") {
62
+ const normalizedPath = normalizePath(parsed.pathname);
63
+ return {
64
+ ...(parsed.hostname.length > 0 ? { host: parsed.hostname.toLowerCase() } : {}),
65
+ ...(normalizedPath === undefined ? {} : { path: normalizedPath }),
66
+ };
67
+ }
68
+ }
69
+ catch {
70
+ return {};
71
+ }
72
+ return {};
73
+ }
74
+ function toCaptureRuleEventType(value) {
75
+ if (value === undefined) {
76
+ return undefined;
77
+ }
78
+ const parsed = CaptureRuleEventTypeSchema.safeParse(value);
79
+ return parsed.success ? parsed.data : undefined;
80
+ }
81
+ function readFrontendException(bundle) {
82
+ const exceptions = bundle.context.frontend?.exceptions;
83
+ if (!Array.isArray(exceptions) || exceptions.length === 0) {
84
+ return null;
85
+ }
86
+ const candidate = exceptions[exceptions.length - 1];
87
+ return typeof candidate === "object" && candidate !== null && !Array.isArray(candidate)
88
+ ? candidate
89
+ : null;
90
+ }
91
+ function buildSuggestionEvidence(incident, bundle) {
92
+ const requestHeaders = bundle.context.request?.headers;
93
+ const requestHost = normalizeHostHeader(requestHeaders?.["host"]) ?? normalizeHostHeader(requestHeaders?.["x-forwarded-host"]);
94
+ const requestPath = normalizePath(bundle.context.request?.path);
95
+ const responseStatusCode = typeof bundle.context.response?.status_code === "number" && Number.isInteger(bundle.context.response.status_code)
96
+ ? bundle.context.response.status_code
97
+ : undefined;
98
+ const eventType = toCaptureRuleEventType(bundle.signal.source_event_types[0]);
99
+ const frontendException = readFrontendException(bundle);
100
+ const browserEvent = typeof frontendException?.["browser_event"] === "object" && frontendException["browser_event"] !== null
101
+ ? frontendException["browser_event"]
102
+ : null;
103
+ const browserEventKind = browserEvent?.["kind"] === "window_error" || browserEvent?.["kind"] === "resource_error"
104
+ ? browserEvent["kind"]
105
+ : undefined;
106
+ const target = typeof browserEvent?.["target"] === "object" && browserEvent["target"] !== null
107
+ ? browserEvent["target"]
108
+ : null;
109
+ const sourceUrl = typeof target?.["source_url"] === "string"
110
+ ? target["source_url"]
111
+ : typeof browserEvent?.["file_name"] === "string"
112
+ ? browserEvent["file_name"]
113
+ : undefined;
114
+ const resourceUrl = normalizeUrl(sourceUrl);
115
+ const resourceFirstParty = resourceUrl.firstParty ?? (resourceUrl.host !== undefined && requestHost !== undefined ? resourceUrl.host === requestHost : undefined);
116
+ return {
117
+ ...(requestHost === undefined ? {} : { requestHost }),
118
+ ...(requestPath === undefined ? {} : { requestPath }),
119
+ ...(responseStatusCode === undefined ? {} : { responseStatusCode }),
120
+ ...(eventType === undefined ? {} : { eventType }),
121
+ ...(browserEventKind === undefined ? {} : { browserEventKind }),
122
+ ...(resourceUrl.host === undefined ? {} : { resourceHost: resourceUrl.host }),
123
+ ...(resourceUrl.path === undefined ? {} : { resourcePath: resourceUrl.path }),
124
+ ...(resourceFirstParty === undefined ? {} : { resourceFirstParty }),
125
+ };
126
+ }
127
+ function confidenceRank(value) {
128
+ switch (value) {
129
+ case "high":
130
+ return 3;
131
+ case "medium":
132
+ return 2;
133
+ case "low":
134
+ return 1;
135
+ }
136
+ }
137
+ function createSuggestion(input) {
138
+ return CaptureRuleSuggestionSchema.parse({
139
+ ...input,
140
+ requires_confirmation: input.requires_confirmation ?? false
141
+ });
142
+ }
143
+ export function buildCaptureRuleSuggestions(input) {
144
+ const evidence = buildSuggestionEvidence(input.incident, input.bundle);
145
+ const suggestions = [];
146
+ if (evidence.eventType === "frontend_exception" &&
147
+ evidence.browserEventKind === "resource_error" &&
148
+ evidence.resourceHost !== undefined) {
149
+ if (evidence.resourceFirstParty === false) {
150
+ suggestions.push(createSuggestion({
151
+ suggestion_id: "primary_resource_host_demote",
152
+ label: `Demote resource errors from ${evidence.resourceHost}`,
153
+ recommended_action: "demote",
154
+ confidence: "high",
155
+ reason: "The primary event is an opaque browser resource-load error from a third-party host.",
156
+ rule: {
157
+ name: `Demote resource errors from ${evidence.resourceHost}`,
158
+ description: "Known third-party browser resource-load noise.",
159
+ enabled: true,
160
+ action: "demote",
161
+ matcher: {
162
+ event_types: ["frontend_exception"],
163
+ browser_event_kind: "resource_error",
164
+ resource_url: { host: evidence.resourceHost }
165
+ },
166
+ sample_rate: null,
167
+ sample_event_class: null,
168
+ created_by_user_id: null,
169
+ created_from_incident_id: input.incident.incident_id,
170
+ created_from_event_id: null,
171
+ expires_at: null
172
+ }
173
+ }), createSuggestion({
174
+ suggestion_id: "primary_resource_host_drop",
175
+ label: `Drop resource errors from ${evidence.resourceHost}`,
176
+ recommended_action: "drop",
177
+ confidence: "medium",
178
+ reason: "This third-party resource host appears to be known browser noise and can be dropped entirely if you do not need repeat context.",
179
+ requires_confirmation: true,
180
+ rule: {
181
+ name: `Drop resource errors from ${evidence.resourceHost}`,
182
+ description: "Drop recurring third-party browser resource-load noise.",
183
+ enabled: true,
184
+ action: "drop",
185
+ matcher: {
186
+ event_types: ["frontend_exception"],
187
+ browser_event_kind: "resource_error",
188
+ resource_url: { host: evidence.resourceHost }
189
+ },
190
+ sample_rate: null,
191
+ sample_event_class: null,
192
+ created_by_user_id: null,
193
+ created_from_incident_id: input.incident.incident_id,
194
+ created_from_event_id: null,
195
+ expires_at: null
196
+ }
197
+ }));
198
+ }
199
+ else {
200
+ const resourceMatcher = evidence.resourceHost !== undefined
201
+ ? { host: evidence.resourceHost, ...(evidence.resourcePath === undefined ? {} : { path_equals: evidence.resourcePath }) }
202
+ : evidence.resourcePath === undefined
203
+ ? undefined
204
+ : { path_equals: evidence.resourcePath };
205
+ if (resourceMatcher !== undefined) {
206
+ suggestions.push(createSuggestion({
207
+ suggestion_id: "primary_resource_sample",
208
+ label: evidence.resourcePath !== undefined
209
+ ? `Sample resource errors for ${evidence.resourcePath}`
210
+ : "Sample recurring first-party resource errors",
211
+ recommended_action: "sample",
212
+ confidence: "medium",
213
+ reason: "The primary event is a first-party browser resource-load failure. Sampling keeps incident visibility without letting repeated chunk failures flood the queue.",
214
+ rule: {
215
+ name: evidence.resourcePath !== undefined
216
+ ? `Sample resource errors for ${evidence.resourcePath}`
217
+ : "Sample recurring first-party resource errors",
218
+ description: "Sample recurring first-party browser resource-load failures.",
219
+ enabled: true,
220
+ action: "sample",
221
+ matcher: {
222
+ event_types: ["frontend_exception"],
223
+ browser_event_kind: "resource_error",
224
+ resource_url: resourceMatcher
225
+ },
226
+ sample_rate: 0.25,
227
+ sample_event_class: "preserve",
228
+ created_by_user_id: null,
229
+ created_from_incident_id: input.incident.incident_id,
230
+ created_from_event_id: null,
231
+ expires_at: null
232
+ }
233
+ }));
234
+ }
235
+ }
236
+ }
237
+ if (evidence.eventType === "frontend_exception" &&
238
+ evidence.browserEventKind === "window_error" &&
239
+ evidence.resourceHost !== undefined) {
240
+ suggestions.push(createSuggestion({
241
+ suggestion_id: "primary_window_host_demote",
242
+ label: `Demote window errors from ${evidence.resourceHost}`,
243
+ recommended_action: "demote",
244
+ confidence: "medium",
245
+ reason: "The primary browser exception is opaque but tied to a specific host, so host-level demotion is safer than a broad ignore rule.",
246
+ rule: {
247
+ name: `Demote window errors from ${evidence.resourceHost}`,
248
+ description: "Demote opaque browser window errors tied to a specific host.",
249
+ enabled: true,
250
+ action: "demote",
251
+ matcher: {
252
+ event_types: ["frontend_exception"],
253
+ browser_event_kind: "window_error",
254
+ resource_url: { host: evidence.resourceHost }
255
+ },
256
+ sample_rate: null,
257
+ sample_event_class: null,
258
+ created_by_user_id: null,
259
+ created_from_incident_id: input.incident.incident_id,
260
+ created_from_event_id: null,
261
+ expires_at: null
262
+ }
263
+ }));
264
+ }
265
+ if (evidence.eventType === "request_event" &&
266
+ evidence.requestPath !== undefined &&
267
+ evidence.responseStatusCode !== undefined &&
268
+ evidence.responseStatusCode >= 400 &&
269
+ evidence.responseStatusCode <= 599) {
270
+ suggestions.push(createSuggestion({
271
+ suggestion_id: "primary_request_status_sample",
272
+ label: `Sample ${evidence.responseStatusCode} request events for ${evidence.requestPath}`,
273
+ recommended_action: "sample",
274
+ confidence: input.incident.occurrence_count >= 10 ? "high" : "medium",
275
+ reason: "The incident is driven by repeated request failures on a narrow route, so deterministic sampling reduces incident churn without hiding the pattern entirely.",
276
+ rule: {
277
+ name: `Sample ${evidence.responseStatusCode} request events for ${evidence.requestPath}`,
278
+ description: "Sample repeated request-failure incidents on a narrow route.",
279
+ enabled: true,
280
+ action: "sample",
281
+ matcher: {
282
+ event_types: ["request_event"],
283
+ first_party: true,
284
+ request_url: { path_equals: evidence.requestPath },
285
+ status_codes: [evidence.responseStatusCode]
286
+ },
287
+ sample_rate: 0.25,
288
+ sample_event_class: "preserve",
289
+ created_by_user_id: null,
290
+ created_from_incident_id: input.incident.incident_id,
291
+ created_from_event_id: null,
292
+ expires_at: null
293
+ }
294
+ }));
295
+ }
296
+ suggestions.push(createSuggestion({
297
+ suggestion_id: "exact_fingerprint_demote",
298
+ label: "Demote this exact fingerprint",
299
+ recommended_action: "demote",
300
+ confidence: suggestions.length > 0 ? "low" : "medium",
301
+ reason: "Fingerprint-based demotion is the safest fallback when broader structured evidence is unavailable or ambiguous.",
302
+ requires_confirmation: suggestions.length === 0,
303
+ rule: {
304
+ name: `Demote exact fingerprint ${input.incident.fingerprint}`,
305
+ description: "Demote only this exact grouped fingerprint.",
306
+ enabled: true,
307
+ action: "demote",
308
+ matcher: {
309
+ ...(evidence.eventType === undefined ? {} : { event_types: [evidence.eventType] }),
310
+ fingerprint: {
311
+ version: input.incident.fingerprint_version,
312
+ value: input.incident.fingerprint
313
+ }
314
+ },
315
+ sample_rate: null,
316
+ sample_event_class: null,
317
+ created_by_user_id: null,
318
+ created_from_incident_id: input.incident.incident_id,
319
+ created_from_event_id: null,
320
+ expires_at: null
321
+ }
322
+ }));
323
+ const deduped = new Map();
324
+ for (const suggestion of suggestions) {
325
+ if (!deduped.has(suggestion.suggestion_id)) {
326
+ deduped.set(suggestion.suggestion_id, suggestion);
327
+ }
328
+ }
329
+ return [...deduped.values()].sort((left, right) => {
330
+ const confidenceDifference = confidenceRank(right.confidence) - confidenceRank(left.confidence);
331
+ if (confidenceDifference !== 0) {
332
+ return confidenceDifference;
333
+ }
334
+ const actionRank = (action) => {
335
+ switch (action) {
336
+ case "demote":
337
+ return 3;
338
+ case "sample":
339
+ return 2;
340
+ case "drop":
341
+ return 1;
342
+ }
343
+ };
344
+ const actionDifference = actionRank(right.recommended_action) - actionRank(left.recommended_action);
345
+ if (actionDifference !== 0) {
346
+ return actionDifference;
347
+ }
348
+ return left.suggestion_id.localeCompare(right.suggestion_id);
349
+ });
350
+ }
351
+ //# sourceMappingURL=capture-rule-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-rule-suggestions.js","sourceRoot":"","sources":["../src/capture-rule-suggestions.ts"],"names":[],"mappings":"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"}