@rasputin-ai/browser 0.7.1 → 0.8.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.
- package/dist/browser-transport.d.ts +1 -0
- package/dist/browser-transport.d.ts.map +1 -1
- package/dist/index.js +43 -135
- package/dist/public-types.d.ts +8 -0
- package/dist/public-types.d.ts.map +1 -1
- package/dist/rasputin-init.d.ts.map +1 -1
- package/dist/sdk-meta.d.ts +1 -1
- package/dist/vite/index.js +90 -191
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-transport.d.ts","sourceRoot":"","sources":["../src/browser-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAEpE,KAAK,qBAAqB,GAAG,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAQ9C,KAAK,6BAA6B,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAkDF,eAAO,MAAM,sBAAsB,GAAI,SAAS,6BAA6B;qBAwDpD,kBAAkB;8BAIT,aAAa;
|
|
1
|
+
{"version":3,"file":"browser-transport.d.ts","sourceRoot":"","sources":["../src/browser-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAEpE,KAAK,qBAAqB,GAAG,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAQ9C,KAAK,6BAA6B,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAkDF,eAAO,MAAM,sBAAsB,GAAI,SAAS,6BAA6B;qBAwDpD,kBAAkB;8BAIT,aAAa;yBAgPlB,MAAM;;oBAoBnB,6BAA6B;CAoB5C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -27,13 +27,6 @@ var DEFAULT_SENSITIVE_PROPERTY_NAMES = [
|
|
|
27
27
|
"passwd",
|
|
28
28
|
"pwd",
|
|
29
29
|
"passphrase",
|
|
30
|
-
"token",
|
|
31
|
-
"accesstoken",
|
|
32
|
-
"refreshtoken",
|
|
33
|
-
"sessiontoken",
|
|
34
|
-
"authorization",
|
|
35
|
-
"auth",
|
|
36
|
-
"bearer",
|
|
37
30
|
"cookie",
|
|
38
31
|
"cookies",
|
|
39
32
|
"signedcookies",
|
|
@@ -41,77 +34,18 @@ var DEFAULT_SENSITIVE_PROPERTY_NAMES = [
|
|
|
41
34
|
"secret",
|
|
42
35
|
"secrets",
|
|
43
36
|
"clientsecret",
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"credentials",
|
|
48
|
-
"privatekey",
|
|
49
|
-
"privkey",
|
|
50
|
-
"pem",
|
|
51
|
-
"jwt",
|
|
52
|
-
"otp",
|
|
53
|
-
"totp",
|
|
54
|
-
"pin",
|
|
55
|
-
"mfacode",
|
|
56
|
-
"sessionid",
|
|
57
|
-
"sid",
|
|
58
|
-
"databaseurl",
|
|
59
|
-
"connectionstring",
|
|
60
|
-
"dsn",
|
|
61
|
-
"mongouri",
|
|
62
|
-
"redisurl",
|
|
63
|
-
"signingkey",
|
|
64
|
-
"encryptionkey",
|
|
65
|
-
"cvv",
|
|
66
|
-
"cvc",
|
|
67
|
-
"cardnumber",
|
|
68
|
-
"ssn",
|
|
69
|
-
"creditcard",
|
|
70
|
-
"securitycode",
|
|
71
|
-
"twofactorcode",
|
|
72
|
-
"masterkey",
|
|
73
|
-
"servicerolekey",
|
|
74
|
-
"stripekey",
|
|
75
|
-
"rawheaders"
|
|
37
|
+
"authorization",
|
|
38
|
+
"proxyauthorization",
|
|
39
|
+
"bearer"
|
|
76
40
|
];
|
|
77
41
|
var DEFAULT_SENSITIVE_PROPERTY_NAME_SET = new Set(DEFAULT_SENSITIVE_PROPERTY_NAMES);
|
|
78
|
-
var
|
|
42
|
+
var SENSITIVE_SUFFIXES = [
|
|
79
43
|
"password",
|
|
80
44
|
"passwd",
|
|
81
|
-
"pwd",
|
|
82
45
|
"passphrase",
|
|
83
|
-
"
|
|
84
|
-
"secret",
|
|
46
|
+
"pwd",
|
|
85
47
|
"cookie",
|
|
86
|
-
"cookies"
|
|
87
|
-
"authorization",
|
|
88
|
-
"auth",
|
|
89
|
-
"bearer",
|
|
90
|
-
"credential",
|
|
91
|
-
"credentials",
|
|
92
|
-
"jwt",
|
|
93
|
-
"otp",
|
|
94
|
-
"totp",
|
|
95
|
-
"pin",
|
|
96
|
-
"sid",
|
|
97
|
-
"dsn",
|
|
98
|
-
"pem",
|
|
99
|
-
"privkey",
|
|
100
|
-
"cvv",
|
|
101
|
-
"cvc",
|
|
102
|
-
"ssn",
|
|
103
|
-
"secrets"
|
|
104
|
-
]);
|
|
105
|
-
var SENSITIVE_SUFFIXES = [
|
|
106
|
-
"password",
|
|
107
|
-
"passwd",
|
|
108
|
-
"token",
|
|
109
|
-
"secret",
|
|
110
|
-
"apikey",
|
|
111
|
-
"privatekey",
|
|
112
|
-
"credential",
|
|
113
|
-
"credentials",
|
|
114
|
-
"cookie"
|
|
48
|
+
"cookies"
|
|
115
49
|
];
|
|
116
50
|
var compactKey = (key) => {
|
|
117
51
|
let compacted = "";
|
|
@@ -131,34 +65,6 @@ var stripTrailingDigits = (value) => {
|
|
|
131
65
|
}
|
|
132
66
|
return end === 0 ? value : value.slice(0, end);
|
|
133
67
|
};
|
|
134
|
-
var segmentsOf = (key) => {
|
|
135
|
-
const segments = [];
|
|
136
|
-
let current = "";
|
|
137
|
-
for (let index = 0; index < key.length; index++) {
|
|
138
|
-
const char = key[index] ?? "";
|
|
139
|
-
const code = key.charCodeAt(index);
|
|
140
|
-
if (code === 45 || code === 46 || code === 95) {
|
|
141
|
-
if (current) segments.push(current.toLowerCase());
|
|
142
|
-
current = "";
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
if (current && code >= 65 && code <= 90) {
|
|
146
|
-
const prev = current.charCodeAt(current.length - 1);
|
|
147
|
-
const prevIsLower = prev >= 97 && prev <= 122;
|
|
148
|
-
const next = key.charCodeAt(index + 1);
|
|
149
|
-
const nextIsLower = next >= 97 && next <= 122;
|
|
150
|
-
if (prevIsLower || nextIsLower) {
|
|
151
|
-
segments.push(current.toLowerCase());
|
|
152
|
-
current = char;
|
|
153
|
-
continue;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
current += char;
|
|
157
|
-
}
|
|
158
|
-
if (current) segments.push(current.toLowerCase());
|
|
159
|
-
return segments;
|
|
160
|
-
};
|
|
161
|
-
var adjacentPairsSensitive = (left, right) => left === "api" && right === "key" || left === "private" && right === "key" || left === "client" && right === "secret" || left === "set" && right === "cookie" || left === "database" && right === "url" || left === "connection" && right === "string" || left === "mongo" && (right === "uri" || right === "url") || left === "mongodb" && (right === "uri" || right === "url") || left === "redis" && (right === "uri" || right === "url") || left === "postgres" && (right === "uri" || right === "url") || left === "database" && right === "uri" || left === "signing" && right === "key" || left === "master" && right === "key" || left === "stripe" && right === "key" || left === "service" && right === "role" || left === "security" && right === "code" || left === "two" && right === "factor" || left === "encryption" && right === "key" || left === "session" && (right === "id" || right === "key" || right === "token") || left === "card" && right === "number" || left === "mfa" && right === "code";
|
|
162
68
|
var propertyNameIsSensitive = (key) => {
|
|
163
69
|
const compacted = compactKey(key);
|
|
164
70
|
const compactForms = [compacted, stripTrailingDigits(compacted)].filter(
|
|
@@ -169,16 +75,6 @@ var propertyNameIsSensitive = (key) => {
|
|
|
169
75
|
for (const suffix of SENSITIVE_SUFFIXES) {
|
|
170
76
|
if (form.endsWith(suffix)) return true;
|
|
171
77
|
}
|
|
172
|
-
if (form.includes("apikey") || form.includes("xapikey")) return true;
|
|
173
|
-
}
|
|
174
|
-
const segments = segmentsOf(key).map((segment) => stripTrailingDigits(segment) || segment);
|
|
175
|
-
for (const segment of segments) {
|
|
176
|
-
if (SENSITIVE_SEGMENTS.has(segment)) return true;
|
|
177
|
-
}
|
|
178
|
-
for (let index = 0; index < segments.length - 1; index++) {
|
|
179
|
-
const left = segments[index];
|
|
180
|
-
const right = segments[index + 1];
|
|
181
|
-
if (left && right && adjacentPairsSensitive(left, right)) return true;
|
|
182
78
|
}
|
|
183
79
|
return false;
|
|
184
80
|
};
|
|
@@ -204,12 +100,6 @@ var toStackFrame = (frame) => {
|
|
|
204
100
|
};
|
|
205
101
|
var framesToStackFrames = (frames) => frames.slice(0, MAX_STACK_FRAMES).map(toStackFrame).filter((frame) => frame !== null);
|
|
206
102
|
|
|
207
|
-
// ../core/src/suppression/identity-needs-message-template.ts
|
|
208
|
-
var identityNeedsMessageTemplate = (type, code) => {
|
|
209
|
-
if (code != null && code !== "") return false;
|
|
210
|
-
return type === "Error";
|
|
211
|
-
};
|
|
212
|
-
|
|
213
103
|
// ../core/src/suppression/parameterize-message.ts
|
|
214
104
|
var MAX_INPUT_LENGTH = 8192;
|
|
215
105
|
var IPV4 = /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/;
|
|
@@ -266,10 +156,6 @@ var RULES = [
|
|
|
266
156
|
{
|
|
267
157
|
token: "duration",
|
|
268
158
|
pattern: /\b\d+(?:\.\d+)?\s?(?:ns|µs|us|ms|secs?|seconds?|mins?|minutes?|hrs?|hours?|days?)\b/giu
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
token: "id",
|
|
272
|
-
pattern: /\b(?=[a-z0-9]*[a-z])(?=[a-z0-9]*\d)[a-z0-9]{8,}\b/giu
|
|
273
159
|
}
|
|
274
160
|
];
|
|
275
161
|
var normalizeForIdentity = (normalized) => {
|
|
@@ -330,19 +216,22 @@ var frameBurstParts = (frames) => {
|
|
|
330
216
|
const inApp = collapsed.filter((frame) => frame.in_app);
|
|
331
217
|
const selected = (inApp.length > 0 ? inApp : collapsed).slice(0, FRAME_COUNT);
|
|
332
218
|
return selected.map((frame) => {
|
|
333
|
-
const
|
|
219
|
+
const loc = frame.original ?? frame.generated;
|
|
334
220
|
const fn = normalizeFunction(frame.function ?? frame.original?.name);
|
|
335
|
-
return `${file}:${fn}`;
|
|
221
|
+
return `${loc.file}:${fn}:${loc.line ?? ""}:${loc.column ?? ""}`;
|
|
336
222
|
});
|
|
337
223
|
};
|
|
338
|
-
var computeBurstKey = (errorType, message, code, frames) => {
|
|
224
|
+
var computeBurstKey = (errorType, message, code, frames, route, method) => {
|
|
339
225
|
const parts = frameBurstParts(frames);
|
|
340
226
|
const codePart = code ?? "";
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
227
|
+
return [
|
|
228
|
+
errorType,
|
|
229
|
+
codePart,
|
|
230
|
+
method ?? "",
|
|
231
|
+
route ?? "",
|
|
232
|
+
parameterizeMessage(message),
|
|
233
|
+
parts.join("\0")
|
|
234
|
+
].join("\0");
|
|
346
235
|
};
|
|
347
236
|
|
|
348
237
|
// ../core/src/suppression/create-suppression.ts
|
|
@@ -393,9 +282,12 @@ var createSuppression = (options = {}) => {
|
|
|
393
282
|
windowStart: bucket.windowStart,
|
|
394
283
|
windowEndMs,
|
|
395
284
|
lastRelease: bucket.lastRelease,
|
|
285
|
+
lastRoute: bucket.lastRoute,
|
|
286
|
+
lastMethod: bucket.lastMethod,
|
|
396
287
|
lastEnvironment: bucket.lastEnvironment,
|
|
397
288
|
identity: bucket.identity,
|
|
398
|
-
captureRawFrames: bucket.captureRawFrames
|
|
289
|
+
captureRawFrames: bucket.captureRawFrames,
|
|
290
|
+
burstKey: bucket.burstKey
|
|
399
291
|
});
|
|
400
292
|
const toSummary = (draft, identity) => ({
|
|
401
293
|
count: draft.count,
|
|
@@ -403,7 +295,8 @@ var createSuppression = (options = {}) => {
|
|
|
403
295
|
window_end: new Date(draft.windowEndMs).toISOString(),
|
|
404
296
|
release: draft.lastRelease,
|
|
405
297
|
environment: draft.lastEnvironment,
|
|
406
|
-
...identity
|
|
298
|
+
...identity,
|
|
299
|
+
...draft.lastRoute || draft.lastMethod ? { request: { route: draft.lastRoute, method: draft.lastMethod } } : {}
|
|
407
300
|
});
|
|
408
301
|
const flushSuppressed = (bucket, windowEndMs) => {
|
|
409
302
|
if (bucket.suppressed <= 0) return;
|
|
@@ -414,9 +307,17 @@ var createSuppression = (options = {}) => {
|
|
|
414
307
|
const now = input.now ?? Date.now();
|
|
415
308
|
const identity = captureIdentity(input);
|
|
416
309
|
const captureRawFrames = (input.rawFrames ?? []).slice(0, MAX_STACK_FRAMES);
|
|
417
|
-
const burstKey = computeBurstKey(
|
|
310
|
+
const burstKey = computeBurstKey(
|
|
311
|
+
input.errorType,
|
|
312
|
+
input.message,
|
|
313
|
+
input.code,
|
|
314
|
+
input.frames,
|
|
315
|
+
input.route,
|
|
316
|
+
input.method
|
|
317
|
+
);
|
|
418
318
|
const release = input.release;
|
|
419
319
|
const route = input.route ?? null;
|
|
320
|
+
const method = input.method ?? null;
|
|
420
321
|
let bucket = burstBuckets.get(burstKey);
|
|
421
322
|
if (!bucket) {
|
|
422
323
|
bucket = {
|
|
@@ -425,9 +326,11 @@ var createSuppression = (options = {}) => {
|
|
|
425
326
|
windowStart: now,
|
|
426
327
|
lastRelease: release,
|
|
427
328
|
lastRoute: route,
|
|
329
|
+
lastMethod: method,
|
|
428
330
|
lastEnvironment: input.environment,
|
|
429
331
|
identity,
|
|
430
|
-
captureRawFrames
|
|
332
|
+
captureRawFrames,
|
|
333
|
+
burstKey
|
|
431
334
|
};
|
|
432
335
|
burstBuckets.set(burstKey, bucket);
|
|
433
336
|
evictIfNeeded();
|
|
@@ -442,6 +345,7 @@ var createSuppression = (options = {}) => {
|
|
|
442
345
|
bucket.windowStart = now;
|
|
443
346
|
bucket.lastRelease = release;
|
|
444
347
|
bucket.lastRoute = route;
|
|
348
|
+
bucket.lastMethod = method;
|
|
445
349
|
bucket.lastEnvironment = input.environment;
|
|
446
350
|
bucket.identity = identity;
|
|
447
351
|
bucket.captureRawFrames = captureRawFrames;
|
|
@@ -451,6 +355,7 @@ var createSuppression = (options = {}) => {
|
|
|
451
355
|
bucket.sentInWindow += 1;
|
|
452
356
|
bucket.lastRelease = release;
|
|
453
357
|
bucket.lastRoute = route;
|
|
358
|
+
bucket.lastMethod = method;
|
|
454
359
|
bucket.lastEnvironment = input.environment;
|
|
455
360
|
return { action: "send", priority: "repeat" };
|
|
456
361
|
}
|
|
@@ -467,7 +372,8 @@ var createSuppression = (options = {}) => {
|
|
|
467
372
|
}
|
|
468
373
|
return drafts.map((draft) => ({
|
|
469
374
|
summary: toSummary(draft, draft.identity),
|
|
470
|
-
rawFrames: draft.captureRawFrames
|
|
375
|
+
rawFrames: draft.captureRawFrames,
|
|
376
|
+
burstKey: draft.burstKey
|
|
471
377
|
}));
|
|
472
378
|
};
|
|
473
379
|
const takeSummaries = async (now = Date.now(), prepareSummary) => {
|
|
@@ -2978,6 +2884,7 @@ var createBrowserTransport = (options) => {
|
|
|
2978
2884
|
...summaries.length > 0 ? { summaries } : {},
|
|
2979
2885
|
sdk_version: options.sdkVersion,
|
|
2980
2886
|
sdk_name: options.sdkName,
|
|
2887
|
+
scrub_pii: options.scrubPii !== false,
|
|
2981
2888
|
idempotency_key: idempotencyKey
|
|
2982
2889
|
});
|
|
2983
2890
|
const shrinkUnloadBody = (events, summaries, idempotencyKey) => {
|
|
@@ -3444,11 +3351,11 @@ var mapBrowserRuntimeState = (snapshot, buildId) => {
|
|
|
3444
3351
|
|
|
3445
3352
|
// src/sdk-meta.ts
|
|
3446
3353
|
var SDK_NAME = "@rasputin-ai/browser";
|
|
3447
|
-
var SDK_VERSION = "0.
|
|
3354
|
+
var SDK_VERSION = "0.8.0";
|
|
3448
3355
|
|
|
3449
3356
|
// src/rasputin-init.ts
|
|
3450
|
-
var DEFAULT_API_URL = "https://api.rasputinai.dev";
|
|
3451
3357
|
var SLOT = Symbol.for("rasputin.browser.client.v1");
|
|
3358
|
+
var DEFAULT_API_URL = "https://api.rasputinai.dev";
|
|
3452
3359
|
var emptyTransport = () => ({
|
|
3453
3360
|
queued: 0,
|
|
3454
3361
|
enqueued: 0,
|
|
@@ -3626,6 +3533,7 @@ var RasputinInit = (options) => {
|
|
|
3626
3533
|
publicKey: parsed.publicKey,
|
|
3627
3534
|
sdkName: SDK_NAME,
|
|
3628
3535
|
sdkVersion: SDK_VERSION,
|
|
3536
|
+
scrubPii: internal.scrubPII !== false,
|
|
3629
3537
|
enabled: ingestEnabled,
|
|
3630
3538
|
fetch: internal.fetch,
|
|
3631
3539
|
beforeFlush: () => enqueuePendingSummaries()
|
package/dist/public-types.d.ts
CHANGED
|
@@ -46,6 +46,14 @@ export type RasputinBrowserOptions = {
|
|
|
46
46
|
* Observe `window` `error` and `unhandledrejection`. Default true.
|
|
47
47
|
*/
|
|
48
48
|
installGlobalHandlers?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* When `true`, the ingest API also redacts PII such as names, emails, and
|
|
51
|
+
* phone numbers from stored runtime state. Authentication secrets are always
|
|
52
|
+
* redacted. Set to `false` to keep personal data in captured values.
|
|
53
|
+
*
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
scrubPII?: boolean;
|
|
49
57
|
};
|
|
50
58
|
export type RasputinBrowserTransportStats = {
|
|
51
59
|
queued: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-types.d.ts","sourceRoot":"","sources":["../src/public-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACpC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"public-types.d.ts","sourceRoot":"","sources":["../src/public-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rasputin-init.d.ts","sourceRoot":"","sources":["../src/rasputin-init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rasputin-init.d.ts","sourceRoot":"","sources":["../src/rasputin-init.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACX,qBAAqB,EAGrB,sBAAsB,EAGtB,MAAM,gBAAgB,CAAC;AAoKxB;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,sBAAsB,KAAG,qBAsJ9D,CAAC"}
|
package/dist/sdk-meta.d.ts
CHANGED
package/dist/vite/index.js
CHANGED
|
@@ -10,6 +10,64 @@ var compactRuntimeFunctionId = (moduleIndex, planIndex) => `${moduleIndex}.${pla
|
|
|
10
10
|
// ../core/src/create-ingest-event/truncate-ingest-message.ts
|
|
11
11
|
var MAX_MESSAGE_BYTES = 8 * 1024;
|
|
12
12
|
|
|
13
|
+
// ../core/src/derivation/sensitive-property-name.ts
|
|
14
|
+
var DEFAULT_SENSITIVE_PROPERTY_NAMES = [
|
|
15
|
+
"password",
|
|
16
|
+
"passwd",
|
|
17
|
+
"pwd",
|
|
18
|
+
"passphrase",
|
|
19
|
+
"cookie",
|
|
20
|
+
"cookies",
|
|
21
|
+
"signedcookies",
|
|
22
|
+
"setcookie",
|
|
23
|
+
"secret",
|
|
24
|
+
"secrets",
|
|
25
|
+
"clientsecret",
|
|
26
|
+
"authorization",
|
|
27
|
+
"proxyauthorization",
|
|
28
|
+
"bearer"
|
|
29
|
+
];
|
|
30
|
+
var DEFAULT_SENSITIVE_PROPERTY_NAME_SET = new Set(DEFAULT_SENSITIVE_PROPERTY_NAMES);
|
|
31
|
+
var SENSITIVE_SUFFIXES = [
|
|
32
|
+
"password",
|
|
33
|
+
"passwd",
|
|
34
|
+
"passphrase",
|
|
35
|
+
"pwd",
|
|
36
|
+
"cookie",
|
|
37
|
+
"cookies"
|
|
38
|
+
];
|
|
39
|
+
var compactKey = (key) => {
|
|
40
|
+
let compacted = "";
|
|
41
|
+
for (let index = 0; index < key.length; index++) {
|
|
42
|
+
const code = key.charCodeAt(index);
|
|
43
|
+
if (code === 45 || code === 46 || code === 95) continue;
|
|
44
|
+
compacted += code >= 65 && code <= 90 ? String.fromCharCode(code + 32) : key[index];
|
|
45
|
+
}
|
|
46
|
+
return compacted;
|
|
47
|
+
};
|
|
48
|
+
var stripTrailingDigits = (value) => {
|
|
49
|
+
let end = value.length;
|
|
50
|
+
while (end > 0) {
|
|
51
|
+
const code = value.charCodeAt(end - 1);
|
|
52
|
+
if (code < 48 || code > 57) break;
|
|
53
|
+
end--;
|
|
54
|
+
}
|
|
55
|
+
return end === 0 ? value : value.slice(0, end);
|
|
56
|
+
};
|
|
57
|
+
var propertyNameIsSensitive = (key) => {
|
|
58
|
+
const compacted = compactKey(key);
|
|
59
|
+
const compactForms = [compacted, stripTrailingDigits(compacted)].filter(
|
|
60
|
+
(value, index, values) => value.length > 0 && values.indexOf(value) === index
|
|
61
|
+
);
|
|
62
|
+
for (const form of compactForms) {
|
|
63
|
+
if (DEFAULT_SENSITIVE_PROPERTY_NAME_SET.has(form)) return true;
|
|
64
|
+
for (const suffix of SENSITIVE_SUFFIXES) {
|
|
65
|
+
if (form.endsWith(suffix)) return true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
};
|
|
70
|
+
|
|
13
71
|
// ../core/src/source-identity/source-identity.ts
|
|
14
72
|
import { createHash } from "node:crypto";
|
|
15
73
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -610,6 +668,9 @@ function traceSegmentInternal(segments, memo, line, column, bias) {
|
|
|
610
668
|
// ../core/src/resolve-source-maps/resolve-source-maps.ts
|
|
611
669
|
var MAX_MAP_CACHE_BYTES = 8 * 1024 * 1024;
|
|
612
670
|
|
|
671
|
+
// ../core/src/suppression/grouping-ref-cache.ts
|
|
672
|
+
var GROUPING_REF_TTL_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
673
|
+
|
|
613
674
|
// ../core/src/transport/process-shutdown-hooks.ts
|
|
614
675
|
var SIGNAL_EXIT_CODES = { SIGTERM: 143, SIGINT: 130 };
|
|
615
676
|
var RASPUTIN_PROCESS_LISTENER = Symbol.for("rasputin.process.listener.v1");
|
|
@@ -685,168 +746,6 @@ var runtimeStateUnavailable = Symbol.for(
|
|
|
685
746
|
"rasputin.runtime-state.unavailable"
|
|
686
747
|
);
|
|
687
748
|
|
|
688
|
-
// ../core/src/derivation/sensitive-property-name.ts
|
|
689
|
-
var DEFAULT_SENSITIVE_PROPERTY_NAMES = [
|
|
690
|
-
"password",
|
|
691
|
-
"passwd",
|
|
692
|
-
"pwd",
|
|
693
|
-
"passphrase",
|
|
694
|
-
"token",
|
|
695
|
-
"accesstoken",
|
|
696
|
-
"refreshtoken",
|
|
697
|
-
"sessiontoken",
|
|
698
|
-
"authorization",
|
|
699
|
-
"auth",
|
|
700
|
-
"bearer",
|
|
701
|
-
"cookie",
|
|
702
|
-
"cookies",
|
|
703
|
-
"signedcookies",
|
|
704
|
-
"setcookie",
|
|
705
|
-
"secret",
|
|
706
|
-
"secrets",
|
|
707
|
-
"clientsecret",
|
|
708
|
-
"apikey",
|
|
709
|
-
"xapikey",
|
|
710
|
-
"credential",
|
|
711
|
-
"credentials",
|
|
712
|
-
"privatekey",
|
|
713
|
-
"privkey",
|
|
714
|
-
"pem",
|
|
715
|
-
"jwt",
|
|
716
|
-
"otp",
|
|
717
|
-
"totp",
|
|
718
|
-
"pin",
|
|
719
|
-
"mfacode",
|
|
720
|
-
"sessionid",
|
|
721
|
-
"sid",
|
|
722
|
-
"databaseurl",
|
|
723
|
-
"connectionstring",
|
|
724
|
-
"dsn",
|
|
725
|
-
"mongouri",
|
|
726
|
-
"redisurl",
|
|
727
|
-
"signingkey",
|
|
728
|
-
"encryptionkey",
|
|
729
|
-
"cvv",
|
|
730
|
-
"cvc",
|
|
731
|
-
"cardnumber",
|
|
732
|
-
"ssn",
|
|
733
|
-
"creditcard",
|
|
734
|
-
"securitycode",
|
|
735
|
-
"twofactorcode",
|
|
736
|
-
"masterkey",
|
|
737
|
-
"servicerolekey",
|
|
738
|
-
"stripekey",
|
|
739
|
-
"rawheaders"
|
|
740
|
-
];
|
|
741
|
-
var DEFAULT_SENSITIVE_PROPERTY_NAME_SET = new Set(DEFAULT_SENSITIVE_PROPERTY_NAMES);
|
|
742
|
-
var SENSITIVE_SEGMENTS = /* @__PURE__ */ new Set([
|
|
743
|
-
"password",
|
|
744
|
-
"passwd",
|
|
745
|
-
"pwd",
|
|
746
|
-
"passphrase",
|
|
747
|
-
"token",
|
|
748
|
-
"secret",
|
|
749
|
-
"cookie",
|
|
750
|
-
"cookies",
|
|
751
|
-
"authorization",
|
|
752
|
-
"auth",
|
|
753
|
-
"bearer",
|
|
754
|
-
"credential",
|
|
755
|
-
"credentials",
|
|
756
|
-
"jwt",
|
|
757
|
-
"otp",
|
|
758
|
-
"totp",
|
|
759
|
-
"pin",
|
|
760
|
-
"sid",
|
|
761
|
-
"dsn",
|
|
762
|
-
"pem",
|
|
763
|
-
"privkey",
|
|
764
|
-
"cvv",
|
|
765
|
-
"cvc",
|
|
766
|
-
"ssn",
|
|
767
|
-
"secrets"
|
|
768
|
-
]);
|
|
769
|
-
var SENSITIVE_SUFFIXES = [
|
|
770
|
-
"password",
|
|
771
|
-
"passwd",
|
|
772
|
-
"token",
|
|
773
|
-
"secret",
|
|
774
|
-
"apikey",
|
|
775
|
-
"privatekey",
|
|
776
|
-
"credential",
|
|
777
|
-
"credentials",
|
|
778
|
-
"cookie"
|
|
779
|
-
];
|
|
780
|
-
var compactKey = (key) => {
|
|
781
|
-
let compacted = "";
|
|
782
|
-
for (let index = 0; index < key.length; index++) {
|
|
783
|
-
const code = key.charCodeAt(index);
|
|
784
|
-
if (code === 45 || code === 46 || code === 95) continue;
|
|
785
|
-
compacted += code >= 65 && code <= 90 ? String.fromCharCode(code + 32) : key[index];
|
|
786
|
-
}
|
|
787
|
-
return compacted;
|
|
788
|
-
};
|
|
789
|
-
var stripTrailingDigits = (value) => {
|
|
790
|
-
let end = value.length;
|
|
791
|
-
while (end > 0) {
|
|
792
|
-
const code = value.charCodeAt(end - 1);
|
|
793
|
-
if (code < 48 || code > 57) break;
|
|
794
|
-
end--;
|
|
795
|
-
}
|
|
796
|
-
return end === 0 ? value : value.slice(0, end);
|
|
797
|
-
};
|
|
798
|
-
var segmentsOf = (key) => {
|
|
799
|
-
const segments = [];
|
|
800
|
-
let current = "";
|
|
801
|
-
for (let index = 0; index < key.length; index++) {
|
|
802
|
-
const char = key[index] ?? "";
|
|
803
|
-
const code = key.charCodeAt(index);
|
|
804
|
-
if (code === 45 || code === 46 || code === 95) {
|
|
805
|
-
if (current) segments.push(current.toLowerCase());
|
|
806
|
-
current = "";
|
|
807
|
-
continue;
|
|
808
|
-
}
|
|
809
|
-
if (current && code >= 65 && code <= 90) {
|
|
810
|
-
const prev = current.charCodeAt(current.length - 1);
|
|
811
|
-
const prevIsLower = prev >= 97 && prev <= 122;
|
|
812
|
-
const next = key.charCodeAt(index + 1);
|
|
813
|
-
const nextIsLower = next >= 97 && next <= 122;
|
|
814
|
-
if (prevIsLower || nextIsLower) {
|
|
815
|
-
segments.push(current.toLowerCase());
|
|
816
|
-
current = char;
|
|
817
|
-
continue;
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
|
-
current += char;
|
|
821
|
-
}
|
|
822
|
-
if (current) segments.push(current.toLowerCase());
|
|
823
|
-
return segments;
|
|
824
|
-
};
|
|
825
|
-
var adjacentPairsSensitive = (left, right) => left === "api" && right === "key" || left === "private" && right === "key" || left === "client" && right === "secret" || left === "set" && right === "cookie" || left === "database" && right === "url" || left === "connection" && right === "string" || left === "mongo" && (right === "uri" || right === "url") || left === "mongodb" && (right === "uri" || right === "url") || left === "redis" && (right === "uri" || right === "url") || left === "postgres" && (right === "uri" || right === "url") || left === "database" && right === "uri" || left === "signing" && right === "key" || left === "master" && right === "key" || left === "stripe" && right === "key" || left === "service" && right === "role" || left === "security" && right === "code" || left === "two" && right === "factor" || left === "encryption" && right === "key" || left === "session" && (right === "id" || right === "key" || right === "token") || left === "card" && right === "number" || left === "mfa" && right === "code";
|
|
826
|
-
var propertyNameIsSensitive = (key) => {
|
|
827
|
-
const compacted = compactKey(key);
|
|
828
|
-
const compactForms = [compacted, stripTrailingDigits(compacted)].filter(
|
|
829
|
-
(value, index, values) => value.length > 0 && values.indexOf(value) === index
|
|
830
|
-
);
|
|
831
|
-
for (const form of compactForms) {
|
|
832
|
-
if (DEFAULT_SENSITIVE_PROPERTY_NAME_SET.has(form)) return true;
|
|
833
|
-
for (const suffix of SENSITIVE_SUFFIXES) {
|
|
834
|
-
if (form.endsWith(suffix)) return true;
|
|
835
|
-
}
|
|
836
|
-
if (form.includes("apikey") || form.includes("xapikey")) return true;
|
|
837
|
-
}
|
|
838
|
-
const segments = segmentsOf(key).map((segment) => stripTrailingDigits(segment) || segment);
|
|
839
|
-
for (const segment of segments) {
|
|
840
|
-
if (SENSITIVE_SEGMENTS.has(segment)) return true;
|
|
841
|
-
}
|
|
842
|
-
for (let index = 0; index < segments.length - 1; index++) {
|
|
843
|
-
const left = segments[index];
|
|
844
|
-
const right = segments[index + 1];
|
|
845
|
-
if (left && right && adjacentPairsSensitive(left, right)) return true;
|
|
846
|
-
}
|
|
847
|
-
return false;
|
|
848
|
-
};
|
|
849
|
-
|
|
850
749
|
// ../recorder/src/function-plan.ts
|
|
851
750
|
var encodeFunctionPlan = (source) => {
|
|
852
751
|
const locator = sourceLocatorFromFile(source.filePath);
|
|
@@ -2379,6 +2278,35 @@ var JSON_METHOD_CALLEE = "globalThis.__rasputinM";
|
|
|
2379
2278
|
var JSON_AWAIT_CALLEE = "globalThis.__rasputinA";
|
|
2380
2279
|
var JSON_ADOPT_CALLEE = "globalThis.__rasputinP";
|
|
2381
2280
|
var JSON_PRODUCER_GUARD = "globalThis.__rasputinM??=function(r,f){return Reflect.apply(f,r,[].slice.call(arguments,2))};globalThis.__rasputinA??=function(v){return v};globalThis.__rasputinP??=function(p){return p};";
|
|
2281
|
+
var NON_PROVENANCE_ROOTS = /* @__PURE__ */ new Set([
|
|
2282
|
+
"String",
|
|
2283
|
+
"Number",
|
|
2284
|
+
"Boolean",
|
|
2285
|
+
"Object",
|
|
2286
|
+
"Array",
|
|
2287
|
+
"Error",
|
|
2288
|
+
"TypeError",
|
|
2289
|
+
"RangeError",
|
|
2290
|
+
"SyntaxError",
|
|
2291
|
+
"URIError",
|
|
2292
|
+
"EvalError",
|
|
2293
|
+
"ReferenceError",
|
|
2294
|
+
"Symbol",
|
|
2295
|
+
"BigInt",
|
|
2296
|
+
"Math",
|
|
2297
|
+
"JSON",
|
|
2298
|
+
"Date",
|
|
2299
|
+
"Promise",
|
|
2300
|
+
"console",
|
|
2301
|
+
"parseInt",
|
|
2302
|
+
"parseFloat",
|
|
2303
|
+
"isNaN",
|
|
2304
|
+
"isFinite",
|
|
2305
|
+
"encodeURIComponent",
|
|
2306
|
+
"decodeURIComponent",
|
|
2307
|
+
"encodeURI",
|
|
2308
|
+
"decodeURI"
|
|
2309
|
+
]);
|
|
2382
2310
|
var isSimpleReceiver = (expression) => {
|
|
2383
2311
|
const receiver = peel(expression);
|
|
2384
2312
|
return ts10.isIdentifier(receiver) || receiver.kind === ts10.SyntaxKind.ThisKeyword;
|
|
@@ -2459,35 +2387,6 @@ var isReturnedOrBoundCall = (node) => {
|
|
|
2459
2387
|
}
|
|
2460
2388
|
return false;
|
|
2461
2389
|
};
|
|
2462
|
-
var NON_PROVENANCE_ROOTS = /* @__PURE__ */ new Set([
|
|
2463
|
-
"String",
|
|
2464
|
-
"Number",
|
|
2465
|
-
"Boolean",
|
|
2466
|
-
"Object",
|
|
2467
|
-
"Array",
|
|
2468
|
-
"Error",
|
|
2469
|
-
"TypeError",
|
|
2470
|
-
"RangeError",
|
|
2471
|
-
"SyntaxError",
|
|
2472
|
-
"URIError",
|
|
2473
|
-
"EvalError",
|
|
2474
|
-
"ReferenceError",
|
|
2475
|
-
"Symbol",
|
|
2476
|
-
"BigInt",
|
|
2477
|
-
"Math",
|
|
2478
|
-
"JSON",
|
|
2479
|
-
"Date",
|
|
2480
|
-
"Promise",
|
|
2481
|
-
"console",
|
|
2482
|
-
"parseInt",
|
|
2483
|
-
"parseFloat",
|
|
2484
|
-
"isNaN",
|
|
2485
|
-
"isFinite",
|
|
2486
|
-
"encodeURIComponent",
|
|
2487
|
-
"decodeURIComponent",
|
|
2488
|
-
"encodeURI",
|
|
2489
|
-
"decodeURI"
|
|
2490
|
-
]);
|
|
2491
2390
|
var callCanCarryProvenance = (node) => {
|
|
2492
2391
|
const name = methodName(node);
|
|
2493
2392
|
if (name === "json" || name === "parse") return true;
|