@debugbundle/shared-types 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,495 @@
1
+ import { z } from "zod";
2
+ import { BrowserEventKindSchema, CaptureRuleClientKindSchema, CaptureRuleEventTypeSchema, CaptureRuleFingerprintSchema, CaptureRuleRuntimeSchema, } from "./capture-rule-schemas.js";
3
+ const CaptureRuleEvaluationUrlSchema = z.object({
4
+ host: z.string().min(1).transform((value) => value.toLowerCase()).optional(),
5
+ path: z.string().min(1).transform((value) => (value.startsWith("/") ? value : `/${value}`)),
6
+ });
7
+ export const CaptureRuleEvaluationContextSchema = z.object({
8
+ project_id: z.string().min(1).max(120),
9
+ event_id: z.string().uuid(),
10
+ event_type: CaptureRuleEventTypeSchema,
11
+ service: z.string().min(1).optional(),
12
+ environment: z.string().min(1).optional(),
13
+ runtime: CaptureRuleRuntimeSchema,
14
+ first_party: z.boolean().optional(),
15
+ error_name: z.string().min(1).optional(),
16
+ message: z.string().min(1).optional(),
17
+ browser_event_kind: BrowserEventKindSchema.optional(),
18
+ browser_event_opaque: z.boolean().optional(),
19
+ client_kind: CaptureRuleClientKindSchema.optional(),
20
+ bot_family: z.string().min(1).max(120).optional(),
21
+ resource_url: CaptureRuleEvaluationUrlSchema.optional(),
22
+ request_url: CaptureRuleEvaluationUrlSchema.optional(),
23
+ status_code: z.number().int().min(0).max(599).optional(),
24
+ fingerprint: CaptureRuleFingerprintSchema.optional(),
25
+ });
26
+ function normalizeRuntime(value) {
27
+ switch (value?.trim().toLowerCase()) {
28
+ case "browser":
29
+ return "browser";
30
+ case "node":
31
+ case "nodejs":
32
+ return "node";
33
+ case "python":
34
+ return "python";
35
+ case "php":
36
+ return "php";
37
+ case "java":
38
+ return "java";
39
+ case "go":
40
+ case "golang":
41
+ return "go";
42
+ case "ruby":
43
+ return "ruby";
44
+ default:
45
+ return "unknown";
46
+ }
47
+ }
48
+ function normalizeRoutePath(value) {
49
+ const trimmed = value?.trim();
50
+ if (trimmed === undefined || trimmed.length === 0) {
51
+ return undefined;
52
+ }
53
+ const pathWithoutQueryOrFragment = trimmed.split(/[?#]/, 1)[0] ?? "";
54
+ if (pathWithoutQueryOrFragment.length === 0) {
55
+ return "/";
56
+ }
57
+ return pathWithoutQueryOrFragment.startsWith("/") ? pathWithoutQueryOrFragment : `/${pathWithoutQueryOrFragment}`;
58
+ }
59
+ function normalizeEvaluationUrl(value) {
60
+ const trimmed = value?.trim();
61
+ if (trimmed === undefined || trimmed.length === 0) {
62
+ return {};
63
+ }
64
+ const relativePath = normalizeRoutePath(trimmed);
65
+ if (relativePath !== undefined && trimmed.startsWith("/")) {
66
+ return {
67
+ url: { path: relativePath },
68
+ first_party: true,
69
+ };
70
+ }
71
+ try {
72
+ const parsed = new URL(trimmed);
73
+ if (parsed.protocol === "http:" || parsed.protocol === "https:") {
74
+ return {
75
+ url: {
76
+ host: parsed.hostname.length > 0 ? parsed.hostname.toLowerCase() : undefined,
77
+ path: normalizeRoutePath(parsed.pathname) ?? "/",
78
+ },
79
+ first_party: false,
80
+ };
81
+ }
82
+ }
83
+ catch {
84
+ if (relativePath !== undefined) {
85
+ return {
86
+ url: { path: relativePath },
87
+ first_party: true,
88
+ };
89
+ }
90
+ }
91
+ return {};
92
+ }
93
+ function readString(value) {
94
+ return typeof value === "string" && value.trim().length > 0 ? value : undefined;
95
+ }
96
+ function readNumber(value) {
97
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
98
+ }
99
+ function readRecord(value) {
100
+ return typeof value === "object" && value !== null && !Array.isArray(value)
101
+ ? value
102
+ : undefined;
103
+ }
104
+ function readHeaderValue(headers, name) {
105
+ if (headers === undefined) {
106
+ return undefined;
107
+ }
108
+ const lowerName = name.toLowerCase();
109
+ for (const [key, value] of Object.entries(headers)) {
110
+ if (key.toLowerCase() === lowerName) {
111
+ return readString(value);
112
+ }
113
+ }
114
+ return undefined;
115
+ }
116
+ function readDeviceUserAgent(payload) {
117
+ const device = readRecord(payload["device"]);
118
+ return readString(device?.["user_agent"]);
119
+ }
120
+ export function classifyCaptureRuleClientFromUserAgent(userAgent) {
121
+ if (userAgent === null || userAgent === undefined) {
122
+ return { client_kind: "unknown" };
123
+ }
124
+ const lower = userAgent.toLowerCase();
125
+ const knownBots = [
126
+ { family: "Googlebot", markers: ["googlebot", "adsbot-google", "google-inspectiontool"] },
127
+ { family: "Bingbot", markers: ["bingbot", "msnbot"] },
128
+ { family: "DuckDuckBot", markers: ["duckduckbot"] },
129
+ { family: "Applebot", markers: ["applebot"] },
130
+ { family: "YandexBot", markers: ["yandexbot"] },
131
+ { family: "Baiduspider", markers: ["baiduspider"] },
132
+ { family: "FacebookBot", markers: ["facebookexternalhit", "facebot"] },
133
+ { family: "LinkedInBot", markers: ["linkedinbot"] },
134
+ { family: "TwitterBot", markers: ["twitterbot"] },
135
+ { family: "Slackbot", markers: ["slackbot"] },
136
+ ];
137
+ const knownBot = knownBots.find((entry) => entry.markers.some((marker) => lower.includes(marker)));
138
+ if (knownBot !== undefined) {
139
+ return { client_kind: "bot", bot_family: knownBot.family };
140
+ }
141
+ if (["bot", "crawler", "spider", "slurp"].some((marker) => lower.includes(marker))) {
142
+ return { client_kind: "bot", bot_family: "OtherBot" };
143
+ }
144
+ return { client_kind: "human" };
145
+ }
146
+ function readEventUserAgent(event) {
147
+ const deviceUserAgent = readDeviceUserAgent(event.payload);
148
+ if (deviceUserAgent !== undefined) {
149
+ return deviceUserAgent;
150
+ }
151
+ if (event.event_type === "backend_exception") {
152
+ const request = readRecord(event.payload["request"]);
153
+ return readHeaderValue(readRecord(request?.["headers"]), "user-agent");
154
+ }
155
+ if (event.event_type === "request_event") {
156
+ return readHeaderValue(readRecord(event.payload["headers"]), "user-agent");
157
+ }
158
+ return undefined;
159
+ }
160
+ export function buildCaptureRuleEvaluationContext(input) {
161
+ const context = {
162
+ project_id: input.project_id,
163
+ event_id: input.event.event_id,
164
+ event_type: input.event.event_type,
165
+ service: input.event.service.name,
166
+ environment: input.event.service.environment,
167
+ runtime: normalizeRuntime(input.event.service.runtime),
168
+ ...classifyCaptureRuleClientFromUserAgent(readEventUserAgent(input.event)),
169
+ ...(input.fingerprint === undefined ? {} : { fingerprint: input.fingerprint }),
170
+ };
171
+ switch (input.event.event_type) {
172
+ case "backend_exception": {
173
+ const request = readRecord(input.event.payload["request"]);
174
+ const response = readRecord(input.event.payload["response"]);
175
+ const requestUrl = normalizeEvaluationUrl(readString(request?.["path"]));
176
+ return CaptureRuleEvaluationContextSchema.parse({
177
+ ...context,
178
+ first_party: true,
179
+ error_name: readString(input.event.payload["name"]),
180
+ message: readString(input.event.payload["message"]),
181
+ request_url: requestUrl.url,
182
+ status_code: readNumber(response?.["status_code"]),
183
+ });
184
+ }
185
+ case "request_event": {
186
+ const requestUrl = normalizeEvaluationUrl(readString(input.event.payload["path"]));
187
+ return CaptureRuleEvaluationContextSchema.parse({
188
+ ...context,
189
+ first_party: requestUrl.first_party ?? true,
190
+ request_url: requestUrl.url,
191
+ status_code: readNumber(input.event.payload["response_status"]),
192
+ });
193
+ }
194
+ case "log_event":
195
+ return CaptureRuleEvaluationContextSchema.parse({
196
+ ...context,
197
+ message: readString(input.event.payload["message"]),
198
+ });
199
+ case "frontend_exception": {
200
+ const browserEvent = readRecord(input.event.payload["browser_event"]);
201
+ const target = readRecord(browserEvent?.["target"]);
202
+ const browserEventKind = browserEvent?.["kind"];
203
+ const resourceSource = typeof target?.["source_url"] === "string"
204
+ ? target["source_url"]
205
+ : typeof browserEvent?.["file_name"] === "string"
206
+ ? browserEvent["file_name"]
207
+ : undefined;
208
+ const resourceUrl = normalizeEvaluationUrl(resourceSource);
209
+ return CaptureRuleEvaluationContextSchema.parse({
210
+ ...context,
211
+ ...(resourceUrl.first_party === undefined ? {} : { first_party: resourceUrl.first_party }),
212
+ error_name: readString(input.event.payload["name"]),
213
+ message: readString(input.event.payload["message"]),
214
+ browser_event_kind: browserEventKind === "window_error" || browserEventKind === "resource_error"
215
+ ? browserEventKind
216
+ : undefined,
217
+ browser_event_opaque: typeof browserEvent?.["opaque"] === "boolean" ? browserEvent["opaque"] : undefined,
218
+ resource_url: resourceUrl.url,
219
+ });
220
+ }
221
+ case "frontend_breadcrumb": {
222
+ if (input.event.payload["breadcrumb_type"] !== "network_request") {
223
+ return CaptureRuleEvaluationContextSchema.parse(context);
224
+ }
225
+ const data = readRecord(input.event.payload["data"]);
226
+ const requestUrl = normalizeEvaluationUrl(readString(data?.["url"]));
227
+ return CaptureRuleEvaluationContextSchema.parse({
228
+ ...context,
229
+ ...(requestUrl.first_party === undefined ? {} : { first_party: requestUrl.first_party }),
230
+ request_url: requestUrl.url,
231
+ status_code: readNumber(data?.["status_code"]),
232
+ });
233
+ }
234
+ default:
235
+ return CaptureRuleEvaluationContextSchema.parse(context);
236
+ }
237
+ }
238
+ export function applyCaptureRuleEventClass(input) {
239
+ if (input.capture_rule === null) {
240
+ return input.event_class;
241
+ }
242
+ if (input.capture_rule.outcome === "demote") {
243
+ return "context_signal";
244
+ }
245
+ if (input.capture_rule.action === "sample" && input.capture_rule.sample_event_class === "context") {
246
+ return "context_signal";
247
+ }
248
+ return input.event_class;
249
+ }
250
+ function matchesUrlMatcher(matcher, value) {
251
+ if (matcher === undefined) {
252
+ return true;
253
+ }
254
+ if (value === undefined) {
255
+ return false;
256
+ }
257
+ if (matcher.host !== undefined && value.host !== matcher.host) {
258
+ return false;
259
+ }
260
+ if (matcher.host_suffix !== undefined && (value.host === undefined || !value.host.endsWith(matcher.host_suffix))) {
261
+ return false;
262
+ }
263
+ if (matcher.path_equals !== undefined && value.path !== matcher.path_equals) {
264
+ return false;
265
+ }
266
+ if (matcher.path_prefix !== undefined && !value.path.startsWith(matcher.path_prefix)) {
267
+ return false;
268
+ }
269
+ return true;
270
+ }
271
+ function matchesStatusRange(statusCode, ranges) {
272
+ if (ranges === undefined) {
273
+ return true;
274
+ }
275
+ if (statusCode === undefined) {
276
+ return false;
277
+ }
278
+ return ranges.some((range) => statusCode >= range.start && statusCode <= range.end);
279
+ }
280
+ function matchesStatusCodes(statusCode, statusCodes) {
281
+ if (statusCodes === undefined) {
282
+ return true;
283
+ }
284
+ if (statusCode === undefined) {
285
+ return false;
286
+ }
287
+ return statusCodes.includes(statusCode);
288
+ }
289
+ export function matchesCaptureRule(rule, contextInput) {
290
+ const context = CaptureRuleEvaluationContextSchema.parse(contextInput);
291
+ const matcher = rule.matcher;
292
+ if (matcher.event_types !== undefined && !matcher.event_types.includes(context.event_type)) {
293
+ return false;
294
+ }
295
+ if (matcher.services !== undefined && (context.service === undefined || !matcher.services.includes(context.service))) {
296
+ return false;
297
+ }
298
+ if (matcher.environments !== undefined &&
299
+ (context.environment === undefined || !matcher.environments.includes(context.environment))) {
300
+ return false;
301
+ }
302
+ if (matcher.runtime !== undefined && !matcher.runtime.includes(context.runtime)) {
303
+ return false;
304
+ }
305
+ if (matcher.first_party !== undefined && context.first_party !== matcher.first_party) {
306
+ return false;
307
+ }
308
+ if (matcher.error_name !== undefined && context.error_name !== matcher.error_name) {
309
+ return false;
310
+ }
311
+ if (matcher.message_equals !== undefined && context.message !== matcher.message_equals) {
312
+ return false;
313
+ }
314
+ if (matcher.message_contains !== undefined) {
315
+ if (context.message === undefined || !context.message.includes(matcher.message_contains)) {
316
+ return false;
317
+ }
318
+ }
319
+ if (matcher.browser_event_kind !== undefined && context.browser_event_kind !== matcher.browser_event_kind) {
320
+ return false;
321
+ }
322
+ if (matcher.browser_event_opaque !== undefined && context.browser_event_opaque !== matcher.browser_event_opaque) {
323
+ return false;
324
+ }
325
+ if (matcher.client_kind !== undefined && context.client_kind !== matcher.client_kind) {
326
+ return false;
327
+ }
328
+ if (matcher.bot_family !== undefined && context.bot_family !== matcher.bot_family) {
329
+ return false;
330
+ }
331
+ if (!matchesUrlMatcher(matcher.resource_url, context.resource_url)) {
332
+ return false;
333
+ }
334
+ if (!matchesUrlMatcher(matcher.request_url, context.request_url)) {
335
+ return false;
336
+ }
337
+ if (!matchesStatusCodes(context.status_code, matcher.status_codes)) {
338
+ return false;
339
+ }
340
+ if (!matchesStatusRange(context.status_code, matcher.status_ranges)) {
341
+ return false;
342
+ }
343
+ if (matcher.fingerprint !== undefined) {
344
+ if (context.fingerprint === undefined) {
345
+ return false;
346
+ }
347
+ if (context.fingerprint.version !== matcher.fingerprint.version ||
348
+ context.fingerprint.value !== matcher.fingerprint.value) {
349
+ return false;
350
+ }
351
+ }
352
+ return true;
353
+ }
354
+ export function isCaptureRuleActive(rule, now) {
355
+ if (!rule.enabled) {
356
+ return false;
357
+ }
358
+ if (rule.expires_at === null) {
359
+ return true;
360
+ }
361
+ return Date.parse(rule.expires_at) > Date.parse(now);
362
+ }
363
+ export function getCaptureRuleSpecificityScore(rule) {
364
+ const matcher = rule.matcher;
365
+ let score = 0;
366
+ if (matcher.fingerprint !== undefined) {
367
+ score += 1000;
368
+ }
369
+ if (matcher.resource_url?.host !== undefined) {
370
+ score += 250;
371
+ }
372
+ if (matcher.request_url?.host !== undefined) {
373
+ score += 250;
374
+ }
375
+ if (matcher.resource_url?.path_equals !== undefined || matcher.request_url?.path_equals !== undefined) {
376
+ score += 200;
377
+ }
378
+ if (matcher.status_codes !== undefined) {
379
+ score += 150;
380
+ }
381
+ if (matcher.browser_event_kind !== undefined) {
382
+ score += 100;
383
+ }
384
+ if (matcher.browser_event_opaque !== undefined) {
385
+ score += 100;
386
+ }
387
+ if (matcher.resource_url?.host_suffix !== undefined || matcher.request_url?.host_suffix !== undefined) {
388
+ score += 90;
389
+ }
390
+ if (matcher.resource_url?.path_prefix !== undefined || matcher.request_url?.path_prefix !== undefined) {
391
+ score += 80;
392
+ }
393
+ if (matcher.error_name !== undefined) {
394
+ score += 70;
395
+ }
396
+ if (matcher.message_equals !== undefined) {
397
+ score += 60;
398
+ }
399
+ if (matcher.message_contains !== undefined) {
400
+ score += 50;
401
+ }
402
+ if (matcher.bot_family !== undefined) {
403
+ score += 45;
404
+ }
405
+ if (matcher.first_party !== undefined) {
406
+ score += 40;
407
+ }
408
+ if (matcher.client_kind !== undefined) {
409
+ score += 35;
410
+ }
411
+ if (matcher.services !== undefined) {
412
+ score += 30;
413
+ }
414
+ if (matcher.environments !== undefined) {
415
+ score += 20;
416
+ }
417
+ if (matcher.runtime !== undefined) {
418
+ score += 10;
419
+ }
420
+ if (matcher.event_types !== undefined) {
421
+ score += 5;
422
+ }
423
+ return score;
424
+ }
425
+ function compareCaptureRules(left, right) {
426
+ const specificityDifference = getCaptureRuleSpecificityScore(right) - getCaptureRuleSpecificityScore(left);
427
+ if (specificityDifference !== 0) {
428
+ return specificityDifference;
429
+ }
430
+ const updatedDifference = Date.parse(right.updated_at) - Date.parse(left.updated_at);
431
+ if (updatedDifference !== 0) {
432
+ return updatedDifference;
433
+ }
434
+ return left.id.localeCompare(right.id);
435
+ }
436
+ function stableUnitFloat(seed) {
437
+ let hash = 2166136261;
438
+ for (let index = 0; index < seed.length; index += 1) {
439
+ hash ^= seed.charCodeAt(index);
440
+ hash = Math.imul(hash, 16777619);
441
+ }
442
+ return (hash >>> 0) / 0x100000000;
443
+ }
444
+ export function shouldSampleCaptureRuleEvent(input) {
445
+ if (input.sample_rate <= 0) {
446
+ return false;
447
+ }
448
+ if (input.sample_rate >= 1) {
449
+ return true;
450
+ }
451
+ const seed = `${input.project_id}:${input.rule_id}:${input.event_id}`;
452
+ return stableUnitFloat(seed) < input.sample_rate;
453
+ }
454
+ export function evaluateCaptureRules(rules, contextInput, now) {
455
+ const context = CaptureRuleEvaluationContextSchema.parse(contextInput);
456
+ const activeRules = rules.filter((rule) => isCaptureRuleActive(rule, now)).sort(compareCaptureRules);
457
+ for (const rule of activeRules) {
458
+ if (!matchesCaptureRule(rule, context)) {
459
+ continue;
460
+ }
461
+ if (rule.action === "demote") {
462
+ return {
463
+ rule_id: rule.id,
464
+ action: "demote",
465
+ outcome: "demote",
466
+ sample_rate: null,
467
+ sample_event_class: null,
468
+ };
469
+ }
470
+ if (rule.action === "drop") {
471
+ return {
472
+ rule_id: rule.id,
473
+ action: "drop",
474
+ outcome: "drop",
475
+ sample_rate: null,
476
+ sample_event_class: null,
477
+ };
478
+ }
479
+ const sampledIn = shouldSampleCaptureRuleEvent({
480
+ project_id: context.project_id,
481
+ rule_id: rule.id,
482
+ event_id: context.event_id,
483
+ sample_rate: rule.sample_rate ?? 0,
484
+ });
485
+ return {
486
+ rule_id: rule.id,
487
+ action: "sample",
488
+ outcome: sampledIn ? "sampled_in" : "sampled_out",
489
+ sample_rate: rule.sample_rate,
490
+ sample_event_class: rule.sample_event_class,
491
+ };
492
+ }
493
+ return null;
494
+ }
495
+ //# sourceMappingURL=capture-rule-evaluation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-rule-evaluation.js","sourceRoot":"","sources":["../src/capture-rule-evaluation.ts"],"names":[],"mappings":"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"}