@rasputin-ai/core 0.7.0 → 0.7.2-beta.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.
- package/README.md +3 -3
- package/dist/create-client/create-client.d.ts.map +1 -1
- package/dist/derivation/rasputin-redacted.d.ts +3 -0
- package/dist/derivation/rasputin-redacted.d.ts.map +1 -0
- package/dist/derivation/redact-env-secret-values.d.ts +10 -0
- package/dist/derivation/redact-env-secret-values.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +388 -180
- package/dist/instrumentation-manifest/upload-instrumentation-manifest.d.ts.map +1 -1
- package/dist/sdk-meta.d.ts +1 -1
- package/dist/sdk-meta.d.ts.map +1 -1
- package/dist/transport/encode-json-request-body.d.ts +5 -0
- package/dist/transport/encode-json-request-body.d.ts.map +1 -0
- package/dist/transport/node-http-fetch.d.ts.map +1 -1
- package/dist/transport/send-batch.d.ts +4 -0
- package/dist/transport/send-batch.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
# Rasputin AI SDK — Core
|
|
2
|
-
|
|
3
|
-
Low-level error capture, stack parsing, source maps, and ingest transport. Most applications should use [@rasputin-ai/node](https://www.npmjs.com/package/@rasputin-ai/node), [@rasputin-ai/elysia](https://www.npmjs.com/package/@rasputin-ai/elysia), or [@rasputin-ai/browser](https://www.npmjs.com/package/@rasputin-ai/browser) instead.
|
|
1
|
+
# Rasputin AI SDK — Core
|
|
2
|
+
|
|
3
|
+
Low-level error capture, stack parsing, source maps, and ingest transport. Most applications should use [@rasputin-ai/node](https://www.npmjs.com/package/@rasputin-ai/node), [@rasputin-ai/elysia](https://www.npmjs.com/package/@rasputin-ai/elysia), or [@rasputin-ai/browser](https://www.npmjs.com/package/@rasputin-ai/browser) instead.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-client.d.ts","sourceRoot":"","sources":["../../src/create-client/create-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-client.d.ts","sourceRoot":"","sources":["../../src/create-client/create-client.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAwBhG,kFAAkF;AAClF,eAAO,MAAM,sBAAsB,YAGlC,CAAC;AAaF;;;GAGG;AACH,eAAO,MAAM,YAAY,GACxB,SAAS,eAAe,EACxB,QAAO,iBAAsB,KAC3B,cAoKF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rasputin-redacted.d.ts","sourceRoot":"","sources":["../../src/derivation/rasputin-redacted.ts"],"names":[],"mappings":"AAAA,oIAAoI;AACpI,eAAO,MAAM,iBAAiB,EAAG,qBAA8B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type EnvSecretMatcher = {
|
|
2
|
+
redact: (text: string) => string;
|
|
3
|
+
needleCount: number;
|
|
4
|
+
};
|
|
5
|
+
export declare const MAX_ENV_SECRET_NEEDLE_LENGTH = 512;
|
|
6
|
+
export declare const collectEnvSecretValues: (env?: NodeJS.ProcessEnv) => string[];
|
|
7
|
+
export declare const createExactSecretMatcher: (secrets: readonly string[]) => EnvSecretMatcher;
|
|
8
|
+
export declare const createEnvSecretMatcher: (env?: NodeJS.ProcessEnv) => EnvSecretMatcher;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=redact-env-secret-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact-env-secret-values.d.ts","sourceRoot":"","sources":["../../src/derivation/redact-env-secret-values.ts"],"names":[],"mappings":"AAOA,KAAK,gBAAgB,GAAG;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAsHhD,eAAO,MAAM,sBAAsB,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,MAAM,EA4CnF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,SAAS,SAAS,MAAM,EAAE,KAAG,gBAgCrE,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,gBAM7E,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,9 @@ export { createIngestEvent } from './create-ingest-event/create-ingest-event';
|
|
|
10
10
|
export type { RequestContext } from './create-ingest-event/create-ingest-event-types';
|
|
11
11
|
export type { RuntimeAwaitedEvent, RuntimeCaptureCoverage, RuntimeCaptureProfile, RuntimeExecutionEvent, RuntimeExecutionKind, RuntimeExecutionMetadata, RuntimeExecutionRecorderMetrics, RuntimeExecutionRequest, RuntimeExecutionState, RuntimeExpressionObservedEvent, RuntimeFunctionCallsSuppressedEvent, RuntimeFunctionEnterEvent, RuntimeFunctionExitEvent, RuntimeFunctionThrowEvent, RuntimeHistoryLink, RuntimeProvenance, RuntimeStateSizeTruncation, RuntimeThrowLocation, } from './create-ingest-event/runtime-execution-state-types';
|
|
12
12
|
export { hashInstrumentationManifest } from './derivation/hash-instrumentation-manifest';
|
|
13
|
+
export { RASPUTIN_REDACTED } from './derivation/rasputin-redacted';
|
|
13
14
|
export { isRasputinTaggedValue, RASPUTIN_WIRE_TAG, type RasputinTaggedValue, rasputinOmitted, rasputinRedacted, rasputinTagKind, rasputinTruncated, rasputinUnavailable, rasputinUnknown, } from './derivation/rasputin-wire-tag';
|
|
15
|
+
export { createEnvSecretMatcher, MAX_ENV_SECRET_NEEDLE_LENGTH, } from './derivation/redact-env-secret-values';
|
|
14
16
|
export { defaultSensitivePropertyNames, propertyNameIsSensitive, } from './derivation/sensitive-property-name';
|
|
15
17
|
export type { InstrumentationArgIdentifier, InstrumentationManifestCallSite, InstrumentationManifestContent, InstrumentationManifestDestructure, InstrumentationManifestFunction, InstrumentationParamBinding, InstrumentationSkipReason, SourceVerification, SourceVerificationIssue, } from './instrumentation-manifest/instrumentation-manifest-types';
|
|
16
18
|
export { INSTRUMENTATION_MANIFEST_SCHEMA_VERSION } from './instrumentation-manifest/instrumentation-manifest-types';
|
|
@@ -30,5 +32,6 @@ export { resetSourceIdentityCache, runtimeFunctionId, sourceDisplayPath, sourceL
|
|
|
30
32
|
export { createSuppression } from './suppression/create-suppression';
|
|
31
33
|
export type { CreateSuppressionOptions, IngestSummary, PrepareSummaryFrames, SummaryIdentity, SuppressionDecideInput, SuppressionDecideResult, } from './suppression/suppression-types';
|
|
32
34
|
export { createTransport } from './transport/create-transport';
|
|
35
|
+
export { encodeJsonRequestBody } from './transport/encode-json-request-body';
|
|
33
36
|
export type { CreateTransportOptions, Transport, TransportPriority, TransportStats, } from './transport/transport-types';
|
|
34
37
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,YAAY,EACX,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,eAAe,GACf,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,YAAY,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACtF,YAAY,EACX,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,+BAA+B,EAC/B,uBAAuB,EACvB,qBAAqB,EACrB,8BAA8B,EAC9B,mCAAmC,EACnC,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,GACpB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,GACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,sBAAsB,EACtB,4BAA4B,GAC5B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACN,6BAA6B,EAC7B,uBAAuB,GACvB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACX,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,EAC9B,kCAAkC,EAClC,+BAA+B,EAC/B,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,GACvB,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,uCAAuC,EAAE,MAAM,2DAA2D,CAAC;AACpH,OAAO,EAAE,6BAA6B,EAAE,MAAM,4DAA4D,CAAC;AAC3G,YAAY,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACN,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,YAAY,EACX,aAAa,EACb,uBAAuB,GACvB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACX,yBAAyB,EACzB,aAAa,EACb,cAAc,GACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,YAAY,EACX,wBAAwB,EACxB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,uBAAuB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,YAAY,EACX,sBAAsB,EACtB,SAAS,EACT,iBAAiB,EACjB,cAAc,GACd,MAAM,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,10 +14,18 @@ var writeBody = (req, body) => {
|
|
|
14
14
|
req.end();
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
|
-
if (typeof body === "string"
|
|
17
|
+
if (typeof body === "string") {
|
|
18
18
|
req.end(body);
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
|
+
if (ArrayBuffer.isView(body)) {
|
|
22
|
+
req.end(Buffer.from(body.buffer, body.byteOffset, body.byteLength));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (body instanceof ArrayBuffer) {
|
|
26
|
+
req.end(Buffer.from(body));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
21
29
|
req.end();
|
|
22
30
|
};
|
|
23
31
|
var createNodeHttpFetch = (unrefSockets = false) => (input, init) => new Promise((resolve4, reject) => {
|
|
@@ -353,6 +361,356 @@ var finalizeResolution = (resolution, stackFrames) => {
|
|
|
353
361
|
return "exact";
|
|
354
362
|
};
|
|
355
363
|
|
|
364
|
+
// src/derivation/rasputin-redacted.ts
|
|
365
|
+
var RASPUTIN_REDACTED = "[RASPUTIN_REDACTED]";
|
|
366
|
+
|
|
367
|
+
// src/derivation/sensitive-property-name.ts
|
|
368
|
+
var DEFAULT_SENSITIVE_PROPERTY_NAMES = [
|
|
369
|
+
"password",
|
|
370
|
+
"passwd",
|
|
371
|
+
"pwd",
|
|
372
|
+
"passphrase",
|
|
373
|
+
"token",
|
|
374
|
+
"accesstoken",
|
|
375
|
+
"refreshtoken",
|
|
376
|
+
"sessiontoken",
|
|
377
|
+
"authorization",
|
|
378
|
+
"auth",
|
|
379
|
+
"bearer",
|
|
380
|
+
"cookie",
|
|
381
|
+
"cookies",
|
|
382
|
+
"signedcookies",
|
|
383
|
+
"setcookie",
|
|
384
|
+
"secret",
|
|
385
|
+
"secrets",
|
|
386
|
+
"clientsecret",
|
|
387
|
+
"apikey",
|
|
388
|
+
"xapikey",
|
|
389
|
+
"credential",
|
|
390
|
+
"credentials",
|
|
391
|
+
"privatekey",
|
|
392
|
+
"privkey",
|
|
393
|
+
"pem",
|
|
394
|
+
"jwt",
|
|
395
|
+
"otp",
|
|
396
|
+
"totp",
|
|
397
|
+
"pin",
|
|
398
|
+
"mfacode",
|
|
399
|
+
"sessionid",
|
|
400
|
+
"sid",
|
|
401
|
+
"databaseurl",
|
|
402
|
+
"connectionstring",
|
|
403
|
+
"dsn",
|
|
404
|
+
"mongouri",
|
|
405
|
+
"redisurl",
|
|
406
|
+
"signingkey",
|
|
407
|
+
"encryptionkey",
|
|
408
|
+
"cvv",
|
|
409
|
+
"cvc",
|
|
410
|
+
"cardnumber",
|
|
411
|
+
"ssn",
|
|
412
|
+
"creditcard",
|
|
413
|
+
"securitycode",
|
|
414
|
+
"twofactorcode",
|
|
415
|
+
"masterkey",
|
|
416
|
+
"servicerolekey",
|
|
417
|
+
"stripekey",
|
|
418
|
+
"rawheaders"
|
|
419
|
+
];
|
|
420
|
+
var DEFAULT_SENSITIVE_PROPERTY_NAME_SET = new Set(DEFAULT_SENSITIVE_PROPERTY_NAMES);
|
|
421
|
+
var SENSITIVE_SEGMENTS = /* @__PURE__ */ new Set([
|
|
422
|
+
"password",
|
|
423
|
+
"passwd",
|
|
424
|
+
"pwd",
|
|
425
|
+
"passphrase",
|
|
426
|
+
"token",
|
|
427
|
+
"secret",
|
|
428
|
+
"cookie",
|
|
429
|
+
"cookies",
|
|
430
|
+
"authorization",
|
|
431
|
+
"auth",
|
|
432
|
+
"bearer",
|
|
433
|
+
"credential",
|
|
434
|
+
"credentials",
|
|
435
|
+
"jwt",
|
|
436
|
+
"otp",
|
|
437
|
+
"totp",
|
|
438
|
+
"pin",
|
|
439
|
+
"sid",
|
|
440
|
+
"dsn",
|
|
441
|
+
"pem",
|
|
442
|
+
"privkey",
|
|
443
|
+
"cvv",
|
|
444
|
+
"cvc",
|
|
445
|
+
"ssn",
|
|
446
|
+
"secrets"
|
|
447
|
+
]);
|
|
448
|
+
var SENSITIVE_SUFFIXES = [
|
|
449
|
+
"password",
|
|
450
|
+
"passwd",
|
|
451
|
+
"token",
|
|
452
|
+
"secret",
|
|
453
|
+
"apikey",
|
|
454
|
+
"privatekey",
|
|
455
|
+
"credential",
|
|
456
|
+
"credentials",
|
|
457
|
+
"cookie"
|
|
458
|
+
];
|
|
459
|
+
var compactKey = (key) => {
|
|
460
|
+
let compacted = "";
|
|
461
|
+
for (let index = 0; index < key.length; index++) {
|
|
462
|
+
const code = key.charCodeAt(index);
|
|
463
|
+
if (code === 45 || code === 46 || code === 95) continue;
|
|
464
|
+
compacted += code >= 65 && code <= 90 ? String.fromCharCode(code + 32) : key[index];
|
|
465
|
+
}
|
|
466
|
+
return compacted;
|
|
467
|
+
};
|
|
468
|
+
var stripTrailingDigits = (value) => {
|
|
469
|
+
let end = value.length;
|
|
470
|
+
while (end > 0) {
|
|
471
|
+
const code = value.charCodeAt(end - 1);
|
|
472
|
+
if (code < 48 || code > 57) break;
|
|
473
|
+
end--;
|
|
474
|
+
}
|
|
475
|
+
return end === 0 ? value : value.slice(0, end);
|
|
476
|
+
};
|
|
477
|
+
var segmentsOf = (key) => {
|
|
478
|
+
const segments = [];
|
|
479
|
+
let current = "";
|
|
480
|
+
for (let index = 0; index < key.length; index++) {
|
|
481
|
+
const char = key[index] ?? "";
|
|
482
|
+
const code = key.charCodeAt(index);
|
|
483
|
+
if (code === 45 || code === 46 || code === 95) {
|
|
484
|
+
if (current) segments.push(current.toLowerCase());
|
|
485
|
+
current = "";
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
if (current && code >= 65 && code <= 90) {
|
|
489
|
+
const prev = current.charCodeAt(current.length - 1);
|
|
490
|
+
const prevIsLower = prev >= 97 && prev <= 122;
|
|
491
|
+
const next = key.charCodeAt(index + 1);
|
|
492
|
+
const nextIsLower = next >= 97 && next <= 122;
|
|
493
|
+
if (prevIsLower || nextIsLower) {
|
|
494
|
+
segments.push(current.toLowerCase());
|
|
495
|
+
current = char;
|
|
496
|
+
continue;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
current += char;
|
|
500
|
+
}
|
|
501
|
+
if (current) segments.push(current.toLowerCase());
|
|
502
|
+
return segments;
|
|
503
|
+
};
|
|
504
|
+
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";
|
|
505
|
+
var defaultSensitivePropertyNames = () => DEFAULT_SENSITIVE_PROPERTY_NAME_SET;
|
|
506
|
+
var propertyNameIsSensitive = (key) => {
|
|
507
|
+
const compacted = compactKey(key);
|
|
508
|
+
const compactForms = [compacted, stripTrailingDigits(compacted)].filter(
|
|
509
|
+
(value, index, values) => value.length > 0 && values.indexOf(value) === index
|
|
510
|
+
);
|
|
511
|
+
for (const form of compactForms) {
|
|
512
|
+
if (DEFAULT_SENSITIVE_PROPERTY_NAME_SET.has(form)) return true;
|
|
513
|
+
for (const suffix of SENSITIVE_SUFFIXES) {
|
|
514
|
+
if (form.endsWith(suffix)) return true;
|
|
515
|
+
}
|
|
516
|
+
if (form.includes("apikey") || form.includes("xapikey")) return true;
|
|
517
|
+
}
|
|
518
|
+
const segments = segmentsOf(key).map((segment) => stripTrailingDigits(segment) || segment);
|
|
519
|
+
for (const segment of segments) {
|
|
520
|
+
if (SENSITIVE_SEGMENTS.has(segment)) return true;
|
|
521
|
+
}
|
|
522
|
+
for (let index = 0; index < segments.length - 1; index++) {
|
|
523
|
+
const left = segments[index];
|
|
524
|
+
const right = segments[index + 1];
|
|
525
|
+
if (left && right && adjacentPairsSensitive(left, right)) return true;
|
|
526
|
+
}
|
|
527
|
+
return false;
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
// src/derivation/redact-env-secret-values.ts
|
|
531
|
+
var MIN_ENV_SECRET_LENGTH = 6;
|
|
532
|
+
var MAX_ENV_SECRET_NEEDLE_LENGTH = 512;
|
|
533
|
+
var COMMON_CONFIG_VALUES = /* @__PURE__ */ new Set([
|
|
534
|
+
"enabled",
|
|
535
|
+
"disabled",
|
|
536
|
+
"production",
|
|
537
|
+
"development",
|
|
538
|
+
"staging",
|
|
539
|
+
"testing",
|
|
540
|
+
"localhost",
|
|
541
|
+
"undefined"
|
|
542
|
+
]);
|
|
543
|
+
var identityMatcher = {
|
|
544
|
+
redact: (text) => text,
|
|
545
|
+
needleCount: 0
|
|
546
|
+
};
|
|
547
|
+
var envKeyLooksSensitive = (key) => propertyNameIsSensitive(key) || key.replace(/[-._]/g, "").toLowerCase().includes("accesskey");
|
|
548
|
+
var isCollectableSecretValue = (value) => value.length >= MIN_ENV_SECRET_LENGTH && !COMMON_CONFIG_VALUES.has(value.toLowerCase());
|
|
549
|
+
var looksLikeUrl = (value) => {
|
|
550
|
+
const schemeEnd = value.indexOf("://");
|
|
551
|
+
return schemeEnd > 0 && schemeEnd < 32;
|
|
552
|
+
};
|
|
553
|
+
var urlUserinfo = (value) => {
|
|
554
|
+
const schemeEnd = value.indexOf("://");
|
|
555
|
+
if (schemeEnd <= 0) return void 0;
|
|
556
|
+
const rest = value.slice(schemeEnd + 3);
|
|
557
|
+
let authorityEnd = rest.length;
|
|
558
|
+
for (const marker of ["/", "?", "#"]) {
|
|
559
|
+
const at = rest.indexOf(marker);
|
|
560
|
+
if (at >= 0 && at < authorityEnd) authorityEnd = at;
|
|
561
|
+
}
|
|
562
|
+
const authority = rest.slice(0, authorityEnd);
|
|
563
|
+
const userinfoEnd = authority.lastIndexOf("@");
|
|
564
|
+
if (userinfoEnd < 0) return void 0;
|
|
565
|
+
const userinfo = authority.slice(0, userinfoEnd);
|
|
566
|
+
if (!userinfo) return void 0;
|
|
567
|
+
const colon = userinfo.indexOf(":");
|
|
568
|
+
const encodedPassword = colon < 0 ? "" : userinfo.slice(colon + 1);
|
|
569
|
+
if (!encodedPassword) return void 0;
|
|
570
|
+
let password = encodedPassword;
|
|
571
|
+
try {
|
|
572
|
+
password = decodeURIComponent(encodedPassword.replace(/\+/g, " "));
|
|
573
|
+
} catch {
|
|
574
|
+
password = encodedPassword;
|
|
575
|
+
}
|
|
576
|
+
return { password, encodedPassword, userinfo };
|
|
577
|
+
};
|
|
578
|
+
var querySecretValues = (value) => {
|
|
579
|
+
const queryAt = value.indexOf("?");
|
|
580
|
+
if (queryAt < 0) return [];
|
|
581
|
+
const hashAt = value.indexOf("#", queryAt + 1);
|
|
582
|
+
const query = hashAt < 0 ? value.slice(queryAt + 1) : value.slice(queryAt + 1, hashAt);
|
|
583
|
+
if (!query.includes("=")) return [];
|
|
584
|
+
const found = [];
|
|
585
|
+
const parts = query.split("&");
|
|
586
|
+
for (let index = 0; index < parts.length; index++) {
|
|
587
|
+
const part = parts[index];
|
|
588
|
+
if (!part) continue;
|
|
589
|
+
const equals = part.indexOf("=");
|
|
590
|
+
if (equals <= 0) continue;
|
|
591
|
+
const rawKey = part.slice(0, equals);
|
|
592
|
+
let key = rawKey;
|
|
593
|
+
try {
|
|
594
|
+
key = decodeURIComponent(rawKey.replace(/\+/g, " "));
|
|
595
|
+
} catch {
|
|
596
|
+
key = rawKey;
|
|
597
|
+
}
|
|
598
|
+
if (!propertyNameIsSensitive(key) && !propertyNameIsSensitive(rawKey)) continue;
|
|
599
|
+
const rawValue = part.slice(equals + 1);
|
|
600
|
+
if (!rawValue) continue;
|
|
601
|
+
found.push(rawValue);
|
|
602
|
+
try {
|
|
603
|
+
const decoded = decodeURIComponent(rawValue.replace(/\+/g, " "));
|
|
604
|
+
if (decoded !== rawValue) found.push(decoded);
|
|
605
|
+
} catch {
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
return found;
|
|
609
|
+
};
|
|
610
|
+
var addNeedle = (needles, value) => {
|
|
611
|
+
if (value.length < MIN_ENV_SECRET_LENGTH) return;
|
|
612
|
+
needles.add(
|
|
613
|
+
value.length > MAX_ENV_SECRET_NEEDLE_LENGTH ? value.slice(0, MAX_ENV_SECRET_NEEDLE_LENGTH) : value
|
|
614
|
+
);
|
|
615
|
+
};
|
|
616
|
+
var addWithRepresentations = (needles, value) => {
|
|
617
|
+
addNeedle(needles, value);
|
|
618
|
+
if (value.length > MAX_ENV_SECRET_NEEDLE_LENGTH) return;
|
|
619
|
+
try {
|
|
620
|
+
const encoded = encodeURIComponent(value);
|
|
621
|
+
if (encoded !== value) addNeedle(needles, encoded);
|
|
622
|
+
const plus = encoded.replace(/%20/g, "+");
|
|
623
|
+
if (plus !== encoded) addNeedle(needles, plus);
|
|
624
|
+
} catch {
|
|
625
|
+
}
|
|
626
|
+
try {
|
|
627
|
+
const jsonEscaped = JSON.stringify(value).slice(1, -1);
|
|
628
|
+
if (jsonEscaped !== value) addNeedle(needles, jsonEscaped);
|
|
629
|
+
} catch {
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
var collectEnvSecretValues = (env = process.env) => {
|
|
633
|
+
const needles = /* @__PURE__ */ new Set();
|
|
634
|
+
let keys;
|
|
635
|
+
try {
|
|
636
|
+
keys = Object.keys(env);
|
|
637
|
+
} catch {
|
|
638
|
+
return [];
|
|
639
|
+
}
|
|
640
|
+
for (let index = 0; index < keys.length; index++) {
|
|
641
|
+
const key = keys[index];
|
|
642
|
+
if (!key || key === "PWD") continue;
|
|
643
|
+
let value;
|
|
644
|
+
try {
|
|
645
|
+
value = env[key];
|
|
646
|
+
} catch {
|
|
647
|
+
continue;
|
|
648
|
+
}
|
|
649
|
+
if (typeof value !== "string" || value.length === 0) continue;
|
|
650
|
+
try {
|
|
651
|
+
const userinfo = urlUserinfo(value);
|
|
652
|
+
if (userinfo) {
|
|
653
|
+
addWithRepresentations(needles, userinfo.password);
|
|
654
|
+
if (userinfo.encodedPassword !== userinfo.password) {
|
|
655
|
+
addWithRepresentations(needles, userinfo.encodedPassword);
|
|
656
|
+
}
|
|
657
|
+
if (userinfo.userinfo.length >= MIN_ENV_SECRET_LENGTH) {
|
|
658
|
+
addWithRepresentations(needles, userinfo.userinfo);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
const queryValues = querySecretValues(value);
|
|
662
|
+
for (let queryIndex = 0; queryIndex < queryValues.length; queryIndex++) {
|
|
663
|
+
const part = queryValues[queryIndex];
|
|
664
|
+
if (part) addWithRepresentations(needles, part);
|
|
665
|
+
}
|
|
666
|
+
if (!envKeyLooksSensitive(key) || !isCollectableSecretValue(value)) continue;
|
|
667
|
+
if (looksLikeUrl(value) && !userinfo && queryValues.length === 0) continue;
|
|
668
|
+
addWithRepresentations(needles, value);
|
|
669
|
+
} catch {
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
return [...needles];
|
|
673
|
+
};
|
|
674
|
+
var createExactSecretMatcher = (secrets) => {
|
|
675
|
+
const unique = [];
|
|
676
|
+
const exact = /* @__PURE__ */ new Set();
|
|
677
|
+
for (let index = 0; index < secrets.length; index++) {
|
|
678
|
+
const secret = secrets[index];
|
|
679
|
+
if (!secret || secret.length < MIN_ENV_SECRET_LENGTH || exact.has(secret)) continue;
|
|
680
|
+
exact.add(secret);
|
|
681
|
+
unique.push(secret);
|
|
682
|
+
}
|
|
683
|
+
if (unique.length === 0) return identityMatcher;
|
|
684
|
+
unique.sort((left, right) => right.length - left.length);
|
|
685
|
+
const minLen = unique[unique.length - 1]?.length ?? MIN_ENV_SECRET_LENGTH;
|
|
686
|
+
return {
|
|
687
|
+
needleCount: unique.length,
|
|
688
|
+
redact(text) {
|
|
689
|
+
try {
|
|
690
|
+
if (text.length < minLen) return text;
|
|
691
|
+
if (exact.has(text)) return RASPUTIN_REDACTED;
|
|
692
|
+
let result = text;
|
|
693
|
+
for (let index = 0; index < unique.length; index++) {
|
|
694
|
+
const needle = unique[index];
|
|
695
|
+
if (!needle || result.length < needle.length) continue;
|
|
696
|
+
if (result.indexOf(needle) === -1) continue;
|
|
697
|
+
result = result.replaceAll(needle, RASPUTIN_REDACTED);
|
|
698
|
+
}
|
|
699
|
+
return result;
|
|
700
|
+
} catch {
|
|
701
|
+
return text;
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
};
|
|
705
|
+
};
|
|
706
|
+
var createEnvSecretMatcher = (env = process.env) => {
|
|
707
|
+
try {
|
|
708
|
+
return createExactSecretMatcher(collectEnvSecretValues(env));
|
|
709
|
+
} catch {
|
|
710
|
+
return identityMatcher;
|
|
711
|
+
}
|
|
712
|
+
};
|
|
713
|
+
|
|
356
714
|
// src/normalize-frames/normalize-frames.ts
|
|
357
715
|
import { isAbsolute as isAbsolute2, resolve as resolve2 } from "node:path";
|
|
358
716
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
@@ -800,7 +1158,7 @@ var resolveSourceMaps = async (frames) => {
|
|
|
800
1158
|
|
|
801
1159
|
// src/sdk-meta.ts
|
|
802
1160
|
var SDK_NAME = "@rasputin-ai/core";
|
|
803
|
-
var SDK_VERSION = "0.7.
|
|
1161
|
+
var SDK_VERSION = "0.7.2-beta.1";
|
|
804
1162
|
|
|
805
1163
|
// src/suppression/identity-needs-message-template.ts
|
|
806
1164
|
var identityNeedsMessageTemplate = (type, code) => {
|
|
@@ -1155,8 +1513,21 @@ var registerProcessShutdownHooks = (participant) => {
|
|
|
1155
1513
|
};
|
|
1156
1514
|
};
|
|
1157
1515
|
|
|
1158
|
-
// src/transport/
|
|
1516
|
+
// src/transport/encode-json-request-body.ts
|
|
1159
1517
|
import { gzipSync } from "node:zlib";
|
|
1518
|
+
var GZIP_JSON_THRESHOLD_BYTES = 10 * 1024;
|
|
1519
|
+
var encodeJsonRequestBody = (payload, gzipThresholdBytes = GZIP_JSON_THRESHOLD_BYTES) => {
|
|
1520
|
+
const json = JSON.stringify(payload);
|
|
1521
|
+
if (Buffer.byteLength(json, "utf8") < gzipThresholdBytes) {
|
|
1522
|
+
return { body: json, gzip: false };
|
|
1523
|
+
}
|
|
1524
|
+
const compressed = gzipSync(json);
|
|
1525
|
+
const body = new Uint8Array(compressed.byteLength);
|
|
1526
|
+
body.set(compressed);
|
|
1527
|
+
return { body, gzip: true };
|
|
1528
|
+
};
|
|
1529
|
+
|
|
1530
|
+
// src/transport/send-batch.ts
|
|
1160
1531
|
var sleep = (ms, signal) => new Promise((resolve4) => {
|
|
1161
1532
|
if (ms <= 0 || signal?.aborted) {
|
|
1162
1533
|
resolve4();
|
|
@@ -1237,21 +1608,13 @@ var sendBatch = async (options) => {
|
|
|
1237
1608
|
return { signal: controller.signal, cancel: () => clearTimeout(timer) };
|
|
1238
1609
|
};
|
|
1239
1610
|
const requestTimeoutMs = options.requestTimeoutMs ?? 5e3;
|
|
1240
|
-
const
|
|
1241
|
-
const jsonBytes = Buffer.byteLength(json, "utf8");
|
|
1611
|
+
const { body, gzip } = encodeJsonRequestBody(payload, options.gzipThresholdBytes);
|
|
1242
1612
|
const headers = {
|
|
1243
1613
|
Authorization: `Bearer ${options.projectApiKey}`,
|
|
1244
1614
|
"Content-Type": "application/json",
|
|
1245
1615
|
Accept: "application/json"
|
|
1246
1616
|
};
|
|
1247
|
-
|
|
1248
|
-
if (jsonBytes >= options.gzipThresholdBytes) {
|
|
1249
|
-
const compressed = gzipSync(json);
|
|
1250
|
-
const bytes = new Uint8Array(compressed.byteLength);
|
|
1251
|
-
bytes.set(compressed);
|
|
1252
|
-
body = bytes;
|
|
1253
|
-
headers["Content-Encoding"] = "gzip";
|
|
1254
|
-
}
|
|
1617
|
+
if (gzip) headers["Content-Encoding"] = "gzip";
|
|
1255
1618
|
for (let attempt = 0; attempt <= options.maxRetries; attempt++) {
|
|
1256
1619
|
if (options.signal?.aborted) return result("failed", "aborted");
|
|
1257
1620
|
attempts++;
|
|
@@ -1924,6 +2287,7 @@ var createClient = (options, hooks = {}) => {
|
|
|
1924
2287
|
const activation = resolveClientActivation(options);
|
|
1925
2288
|
if (!activation.enabled) return noopClient();
|
|
1926
2289
|
const { ingestToken, projectApiKey, apiUrl, release } = activation;
|
|
2290
|
+
const redactEnvSecrets = createEnvSecretMatcher().redact;
|
|
1927
2291
|
const environment = options.environment;
|
|
1928
2292
|
const { ingestUrl, deployUrl } = resolveEndpointUrls(apiUrl);
|
|
1929
2293
|
const repoRoot = resolveRepoRoot(options);
|
|
@@ -1995,6 +2359,7 @@ var createClient = (options, hooks = {}) => {
|
|
|
1995
2359
|
resolution: "none",
|
|
1996
2360
|
request: context?.request
|
|
1997
2361
|
});
|
|
2362
|
+
event.message = redactEnvSecrets(event.message);
|
|
1998
2363
|
const decision = suppression.decide({
|
|
1999
2364
|
errorType: event.type,
|
|
2000
2365
|
message: event.message,
|
|
@@ -2126,169 +2491,6 @@ var isRasputinTaggedValue = (value) => {
|
|
|
2126
2491
|
};
|
|
2127
2492
|
var rasputinTagKind = (value) => isRasputinTaggedValue(value) ? value[1] : void 0;
|
|
2128
2493
|
|
|
2129
|
-
// src/derivation/sensitive-property-name.ts
|
|
2130
|
-
var DEFAULT_SENSITIVE_PROPERTY_NAMES = [
|
|
2131
|
-
"password",
|
|
2132
|
-
"passwd",
|
|
2133
|
-
"pwd",
|
|
2134
|
-
"passphrase",
|
|
2135
|
-
"token",
|
|
2136
|
-
"accesstoken",
|
|
2137
|
-
"refreshtoken",
|
|
2138
|
-
"sessiontoken",
|
|
2139
|
-
"authorization",
|
|
2140
|
-
"auth",
|
|
2141
|
-
"bearer",
|
|
2142
|
-
"cookie",
|
|
2143
|
-
"cookies",
|
|
2144
|
-
"signedcookies",
|
|
2145
|
-
"setcookie",
|
|
2146
|
-
"secret",
|
|
2147
|
-
"secrets",
|
|
2148
|
-
"clientsecret",
|
|
2149
|
-
"apikey",
|
|
2150
|
-
"xapikey",
|
|
2151
|
-
"credential",
|
|
2152
|
-
"credentials",
|
|
2153
|
-
"privatekey",
|
|
2154
|
-
"privkey",
|
|
2155
|
-
"pem",
|
|
2156
|
-
"jwt",
|
|
2157
|
-
"otp",
|
|
2158
|
-
"totp",
|
|
2159
|
-
"pin",
|
|
2160
|
-
"mfacode",
|
|
2161
|
-
"sessionid",
|
|
2162
|
-
"sid",
|
|
2163
|
-
"databaseurl",
|
|
2164
|
-
"connectionstring",
|
|
2165
|
-
"dsn",
|
|
2166
|
-
"mongouri",
|
|
2167
|
-
"redisurl",
|
|
2168
|
-
"signingkey",
|
|
2169
|
-
"encryptionkey",
|
|
2170
|
-
"cvv",
|
|
2171
|
-
"cvc",
|
|
2172
|
-
"cardnumber",
|
|
2173
|
-
"ssn",
|
|
2174
|
-
"creditcard",
|
|
2175
|
-
"securitycode",
|
|
2176
|
-
"twofactorcode",
|
|
2177
|
-
"masterkey",
|
|
2178
|
-
"servicerolekey",
|
|
2179
|
-
"stripekey",
|
|
2180
|
-
"rawheaders"
|
|
2181
|
-
];
|
|
2182
|
-
var DEFAULT_SENSITIVE_PROPERTY_NAME_SET = new Set(DEFAULT_SENSITIVE_PROPERTY_NAMES);
|
|
2183
|
-
var SENSITIVE_SEGMENTS = /* @__PURE__ */ new Set([
|
|
2184
|
-
"password",
|
|
2185
|
-
"passwd",
|
|
2186
|
-
"pwd",
|
|
2187
|
-
"passphrase",
|
|
2188
|
-
"token",
|
|
2189
|
-
"secret",
|
|
2190
|
-
"cookie",
|
|
2191
|
-
"cookies",
|
|
2192
|
-
"authorization",
|
|
2193
|
-
"auth",
|
|
2194
|
-
"bearer",
|
|
2195
|
-
"credential",
|
|
2196
|
-
"credentials",
|
|
2197
|
-
"jwt",
|
|
2198
|
-
"otp",
|
|
2199
|
-
"totp",
|
|
2200
|
-
"pin",
|
|
2201
|
-
"sid",
|
|
2202
|
-
"dsn",
|
|
2203
|
-
"pem",
|
|
2204
|
-
"privkey",
|
|
2205
|
-
"cvv",
|
|
2206
|
-
"cvc",
|
|
2207
|
-
"ssn",
|
|
2208
|
-
"secrets"
|
|
2209
|
-
]);
|
|
2210
|
-
var SENSITIVE_SUFFIXES = [
|
|
2211
|
-
"password",
|
|
2212
|
-
"passwd",
|
|
2213
|
-
"token",
|
|
2214
|
-
"secret",
|
|
2215
|
-
"apikey",
|
|
2216
|
-
"privatekey",
|
|
2217
|
-
"credential",
|
|
2218
|
-
"credentials",
|
|
2219
|
-
"cookie"
|
|
2220
|
-
];
|
|
2221
|
-
var compactKey = (key) => {
|
|
2222
|
-
let compacted = "";
|
|
2223
|
-
for (let index = 0; index < key.length; index++) {
|
|
2224
|
-
const code = key.charCodeAt(index);
|
|
2225
|
-
if (code === 45 || code === 46 || code === 95) continue;
|
|
2226
|
-
compacted += code >= 65 && code <= 90 ? String.fromCharCode(code + 32) : key[index];
|
|
2227
|
-
}
|
|
2228
|
-
return compacted;
|
|
2229
|
-
};
|
|
2230
|
-
var stripTrailingDigits = (value) => {
|
|
2231
|
-
let end = value.length;
|
|
2232
|
-
while (end > 0) {
|
|
2233
|
-
const code = value.charCodeAt(end - 1);
|
|
2234
|
-
if (code < 48 || code > 57) break;
|
|
2235
|
-
end--;
|
|
2236
|
-
}
|
|
2237
|
-
return end === 0 ? value : value.slice(0, end);
|
|
2238
|
-
};
|
|
2239
|
-
var segmentsOf = (key) => {
|
|
2240
|
-
const segments = [];
|
|
2241
|
-
let current = "";
|
|
2242
|
-
for (let index = 0; index < key.length; index++) {
|
|
2243
|
-
const char = key[index] ?? "";
|
|
2244
|
-
const code = key.charCodeAt(index);
|
|
2245
|
-
if (code === 45 || code === 46 || code === 95) {
|
|
2246
|
-
if (current) segments.push(current.toLowerCase());
|
|
2247
|
-
current = "";
|
|
2248
|
-
continue;
|
|
2249
|
-
}
|
|
2250
|
-
if (current && code >= 65 && code <= 90) {
|
|
2251
|
-
const prev = current.charCodeAt(current.length - 1);
|
|
2252
|
-
const prevIsLower = prev >= 97 && prev <= 122;
|
|
2253
|
-
const next = key.charCodeAt(index + 1);
|
|
2254
|
-
const nextIsLower = next >= 97 && next <= 122;
|
|
2255
|
-
if (prevIsLower || nextIsLower) {
|
|
2256
|
-
segments.push(current.toLowerCase());
|
|
2257
|
-
current = char;
|
|
2258
|
-
continue;
|
|
2259
|
-
}
|
|
2260
|
-
}
|
|
2261
|
-
current += char;
|
|
2262
|
-
}
|
|
2263
|
-
if (current) segments.push(current.toLowerCase());
|
|
2264
|
-
return segments;
|
|
2265
|
-
};
|
|
2266
|
-
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";
|
|
2267
|
-
var defaultSensitivePropertyNames = () => DEFAULT_SENSITIVE_PROPERTY_NAME_SET;
|
|
2268
|
-
var propertyNameIsSensitive = (key) => {
|
|
2269
|
-
const compacted = compactKey(key);
|
|
2270
|
-
const compactForms = [compacted, stripTrailingDigits(compacted)].filter(
|
|
2271
|
-
(value, index, values) => value.length > 0 && values.indexOf(value) === index
|
|
2272
|
-
);
|
|
2273
|
-
for (const form of compactForms) {
|
|
2274
|
-
if (DEFAULT_SENSITIVE_PROPERTY_NAME_SET.has(form)) return true;
|
|
2275
|
-
for (const suffix of SENSITIVE_SUFFIXES) {
|
|
2276
|
-
if (form.endsWith(suffix)) return true;
|
|
2277
|
-
}
|
|
2278
|
-
if (form.includes("apikey") || form.includes("xapikey")) return true;
|
|
2279
|
-
}
|
|
2280
|
-
const segments = segmentsOf(key).map((segment) => stripTrailingDigits(segment) || segment);
|
|
2281
|
-
for (const segment of segments) {
|
|
2282
|
-
if (SENSITIVE_SEGMENTS.has(segment)) return true;
|
|
2283
|
-
}
|
|
2284
|
-
for (let index = 0; index < segments.length - 1; index++) {
|
|
2285
|
-
const left = segments[index];
|
|
2286
|
-
const right = segments[index + 1];
|
|
2287
|
-
if (left && right && adjacentPairsSensitive(left, right)) return true;
|
|
2288
|
-
}
|
|
2289
|
-
return false;
|
|
2290
|
-
};
|
|
2291
|
-
|
|
2292
2494
|
// src/instrumentation-manifest/instrumentation-manifest-types.ts
|
|
2293
2495
|
var INSTRUMENTATION_MANIFEST_SCHEMA_VERSION = 3;
|
|
2294
2496
|
|
|
@@ -2298,19 +2500,21 @@ var uploadInstrumentationManifest = async (options) => {
|
|
|
2298
2500
|
if (!release) return { ok: false };
|
|
2299
2501
|
const fetchFn = options.fetch ?? defaultIngestFetch();
|
|
2300
2502
|
try {
|
|
2503
|
+
const encoded = encodeJsonRequestBody({ release, manifest: options.manifest });
|
|
2301
2504
|
const response = await fetchFn(options.url, {
|
|
2302
2505
|
method: "POST",
|
|
2303
2506
|
headers: {
|
|
2304
2507
|
Authorization: `Bearer ${options.projectApiKey}`,
|
|
2305
2508
|
"Content-Type": "application/json",
|
|
2306
|
-
Accept: "application/json"
|
|
2509
|
+
Accept: "application/json",
|
|
2510
|
+
...encoded.gzip ? { "Content-Encoding": "gzip" } : {}
|
|
2307
2511
|
},
|
|
2308
|
-
body:
|
|
2512
|
+
body: encoded.body,
|
|
2309
2513
|
...options.signal ? { signal: options.signal } : {}
|
|
2310
2514
|
});
|
|
2311
2515
|
if (!response.ok) return { ok: false };
|
|
2312
|
-
const
|
|
2313
|
-
const verification =
|
|
2516
|
+
const payload = await response.json();
|
|
2517
|
+
const verification = payload.payload?.verification;
|
|
2314
2518
|
return verification ? { ok: true, verification } : { ok: false };
|
|
2315
2519
|
} catch {
|
|
2316
2520
|
return { ok: false };
|
|
@@ -2318,13 +2522,17 @@ var uploadInstrumentationManifest = async (options) => {
|
|
|
2318
2522
|
};
|
|
2319
2523
|
export {
|
|
2320
2524
|
INSTRUMENTATION_MANIFEST_SCHEMA_VERSION,
|
|
2525
|
+
MAX_ENV_SECRET_NEEDLE_LENGTH,
|
|
2526
|
+
RASPUTIN_REDACTED,
|
|
2321
2527
|
RASPUTIN_WIRE_TAG,
|
|
2322
2528
|
announceDeploy,
|
|
2323
2529
|
createClient,
|
|
2530
|
+
createEnvSecretMatcher,
|
|
2324
2531
|
createIngestEvent,
|
|
2325
2532
|
createSuppression,
|
|
2326
2533
|
createTransport,
|
|
2327
2534
|
defaultSensitivePropertyNames,
|
|
2535
|
+
encodeJsonRequestBody,
|
|
2328
2536
|
foldSyntheticFrames,
|
|
2329
2537
|
hashInstrumentationManifest,
|
|
2330
2538
|
isClientEnabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-instrumentation-manifest.d.ts","sourceRoot":"","sources":["../../src/instrumentation-manifest/upload-instrumentation-manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upload-instrumentation-manifest.d.ts","sourceRoot":"","sources":["../../src/instrumentation-manifest/upload-instrumentation-manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EACX,8BAA8B,EAC9B,kBAAkB,EAClB,MAAM,kCAAkC,CAAC;AAE1C,KAAK,oCAAoC,GAAG;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,8BAA8B,CAAC;IACzC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,GACzC,SAAS,oCAAoC,KAC3C,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,kBAAkB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CA2BxE,CAAC"}
|
package/dist/sdk-meta.d.ts
CHANGED
package/dist/sdk-meta.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-meta.d.ts","sourceRoot":"","sources":["../src/sdk-meta.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,eAAO,MAAM,QAAQ,sBAAsB,CAAC;AAC5C,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"sdk-meta.d.ts","sourceRoot":"","sources":["../src/sdk-meta.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,eAAO,MAAM,QAAQ,sBAAsB,CAAC;AAC5C,eAAO,MAAM,WAAW,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode-json-request-body.d.ts","sourceRoot":"","sources":["../../src/transport/encode-json-request-body.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,GACjC,SAAS,OAAO,EAChB,2BAA8C,KAC5C;IAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAUzD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-http-fetch.d.ts","sourceRoot":"","sources":["../../src/transport/node-http-fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"node-http-fetch.d.ts","sourceRoot":"","sources":["../../src/transport/node-http-fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAuGxD,eAAO,MAAM,kBAAkB,GAAI,UAAU;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,cACtB,CAAC"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Posts one ingest batch with gzip, retries, and abort. Isolated from the queue so tests can cover
|
|
3
|
+
* HTTP failure kinds without standing up the full transport lifecycle.
|
|
4
|
+
*/
|
|
1
5
|
import type { IngestEvent } from '../create-ingest-event/create-ingest-event-types';
|
|
2
6
|
import type { IngestSummary } from '../suppression/suppression-types';
|
|
3
7
|
import type { TransportFetch } from './transport-types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-batch.d.ts","sourceRoot":"","sources":["../../src/transport/send-batch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"send-batch.d.ts","sourceRoot":"","sources":["../../src/transport/send-batch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,KAAK,gBAAgB,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC7B,SAAS,GACT,eAAe,GACf,cAAc,GACd,cAAc,GACd,oBAAoB,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AA6DF,iGAAiG;AACjG,eAAO,MAAM,SAAS,GAAU,SAAS,gBAAgB,KAAG,OAAO,CAAC,eAAe,CAsGlF,CAAC"}
|