@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 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":"AAmBA,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,cAkKF,CAAC"}
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,3 @@
1
+ /** Wire/runtime placeholder when a captured value was hidden. Keep in sync with `packages/~core/constants/rasputin-redacted.ts`. */
2
+ export declare const RASPUTIN_REDACTED: "[RASPUTIN_REDACTED]";
3
+ //# sourceMappingURL=rasputin-redacted.d.ts.map
@@ -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
@@ -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":"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"}
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" || body instanceof Uint8Array) {
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.0";
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/send-batch.ts
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 json = JSON.stringify(payload);
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
- let body = json;
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: JSON.stringify({ release, manifest: options.manifest }),
2512
+ body: encoded.body,
2309
2513
  ...options.signal ? { signal: options.signal } : {}
2310
2514
  });
2311
2515
  if (!response.ok) return { ok: false };
2312
- const body = await response.json();
2313
- const verification = body.payload?.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":"AACA,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,CAyBxE,CAAC"}
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"}
@@ -1,4 +1,4 @@
1
1
  /** Generated by scripts/generate-sdk-meta.ts — do not edit. */
2
2
  export declare const SDK_NAME = "@rasputin-ai/core";
3
- export declare const SDK_VERSION = "0.7.0";
3
+ export declare const SDK_VERSION = "0.7.2-beta.1";
4
4
  //# sourceMappingURL=sdk-meta.d.ts.map
@@ -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,UAAU,CAAC"}
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,5 @@
1
+ export declare const encodeJsonRequestBody: (payload: unknown, gzipThresholdBytes?: number) => {
2
+ body: string | Uint8Array<ArrayBuffer>;
3
+ gzip: boolean;
4
+ };
5
+ //# sourceMappingURL=encode-json-request-body.d.ts.map
@@ -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;AA+FxD,eAAO,MAAM,kBAAkB,GAAI,UAAU;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,cACtB,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":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,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,CAiHlF,CAAC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rasputin-ai/core",
3
- "version": "0.7.0",
3
+ "version": "0.7.2-beta.1",
4
4
  "description": "Core error capture, stack parsing, and ingest transport for Rasputin AI.",
5
5
  "type": "module",
6
6
  "exports": {