@glasstrace/sdk 1.3.2 → 1.3.4

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.
Files changed (51) hide show
  1. package/README.md +126 -0
  2. package/dist/{chunk-REEU6CNO.js → chunk-3HWBR7XM.js} +3 -3
  3. package/dist/chunk-3HWBR7XM.js.map +1 -0
  4. package/dist/{chunk-XS3BO7RY.js → chunk-BQKPRFLF.js} +3 -3
  5. package/dist/{chunk-GCFOY7T2.js → chunk-E62DL2H4.js} +3 -3
  6. package/dist/{chunk-UFZEISZB.js → chunk-LQKJ27LO.js} +2 -2
  7. package/dist/chunk-LQKJ27LO.js.map +1 -0
  8. package/dist/{chunk-MQHLWSIX.js → chunk-M4ZI7J3N.js} +100 -62
  9. package/dist/{chunk-MQHLWSIX.js.map → chunk-M4ZI7J3N.js.map} +1 -1
  10. package/dist/{chunk-JFR42QG5.js → chunk-QJVAKVQJ.js} +2 -2
  11. package/dist/{chunk-CRM3EYOL.js → chunk-WKOQJCFN.js} +2 -2
  12. package/dist/{chunk-DQGNUENK.js → chunk-XFNK4YEW.js} +58 -16
  13. package/dist/chunk-XFNK4YEW.js.map +1 -0
  14. package/dist/{chunk-3TU62WD6.js → chunk-YG3X7TUI.js} +1 -1
  15. package/dist/chunk-YG3X7TUI.js.map +1 -0
  16. package/dist/cli/init.cjs +51 -13
  17. package/dist/cli/init.cjs.map +1 -1
  18. package/dist/cli/init.js +6 -6
  19. package/dist/cli/mcp-add.cjs +49 -11
  20. package/dist/cli/mcp-add.cjs.map +1 -1
  21. package/dist/cli/mcp-add.js +2 -2
  22. package/dist/cli/uninit.cjs.map +1 -1
  23. package/dist/cli/uninit.js +3 -3
  24. package/dist/cli/validate.cjs +49 -11
  25. package/dist/cli/validate.cjs.map +1 -1
  26. package/dist/cli/validate.js +2 -2
  27. package/dist/edge-entry.cjs +88 -50
  28. package/dist/edge-entry.cjs.map +1 -1
  29. package/dist/edge-entry.js +2 -2
  30. package/dist/index.cjs +151 -70
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.d.cts +19 -0
  33. package/dist/index.d.ts +19 -0
  34. package/dist/index.js +6 -6
  35. package/dist/node-entry.cjs +151 -70
  36. package/dist/node-entry.cjs.map +1 -1
  37. package/dist/node-entry.js +8 -8
  38. package/dist/node-subpath.cjs +49 -11
  39. package/dist/node-subpath.cjs.map +1 -1
  40. package/dist/node-subpath.js +4 -4
  41. package/dist/{source-map-uploader-LACAGKIW.js → source-map-uploader-JAD3XM4F.js} +4 -4
  42. package/package.json +1 -1
  43. package/dist/chunk-3TU62WD6.js.map +0 -1
  44. package/dist/chunk-DQGNUENK.js.map +0 -1
  45. package/dist/chunk-REEU6CNO.js.map +0 -1
  46. package/dist/chunk-UFZEISZB.js.map +0 -1
  47. /package/dist/{chunk-XS3BO7RY.js.map → chunk-BQKPRFLF.js.map} +0 -0
  48. /package/dist/{chunk-GCFOY7T2.js.map → chunk-E62DL2H4.js.map} +0 -0
  49. /package/dist/{chunk-JFR42QG5.js.map → chunk-QJVAKVQJ.js.map} +0 -0
  50. /package/dist/{chunk-CRM3EYOL.js.map → chunk-WKOQJCFN.js.map} +0 -0
  51. /package/dist/{source-map-uploader-LACAGKIW.js.map → source-map-uploader-JAD3XM4F.js.map} +0 -0
@@ -2,9 +2,9 @@ import {
2
2
  GlasstraceSpanProcessor,
3
3
  SdkError,
4
4
  captureCorrelationId
5
- } from "./chunk-CRM3EYOL.js";
5
+ } from "./chunk-WKOQJCFN.js";
6
6
  import "./chunk-DQ25VOKK.js";
7
- import "./chunk-MQHLWSIX.js";
7
+ import "./chunk-M4ZI7J3N.js";
8
8
  import "./chunk-NSBPE2FW.js";
9
9
  export {
10
10
  GlasstraceSpanProcessor,
package/dist/index.cjs CHANGED
@@ -14563,7 +14563,7 @@ function deriveSessionId(apiKey, origin, date5, windowIndex) {
14563
14563
  const digest = sha256Hex(input).slice(0, 16);
14564
14564
  return SessionIdSchema.parse(digest);
14565
14565
  }
14566
- var DevApiKeySchema, AnonApiKeySchema, SessionIdSchema, BuildHashSchema, SdkDiagnosticCodeSchema, CaptureConfigSchema, SdkCachedConfigSchema, GlasstraceOptionsSchema, GlasstraceEnvVarsSchema, ImportGraphPayloadSchema, SdkHealthReportSchema, TierLimitsSchema, SdkInitResponseSchema, DiscoveryResponseSchema, SourceMapUploadResponseSchema, PresignedUploadRequestSchema, PresignedUploadResponseSchema, SourceMapManifestRequestSchema, SourceMapManifestResponseSchema, GLASSTRACE_ATTRIBUTE_NAMES, DEFAULT_CAPTURE_CONFIG, K;
14566
+ var DevApiKeySchema, AnonApiKeySchema, SessionIdSchema, BuildHashSchema, SdkDiagnosticCodeSchema, CaptureConfigSchema, SdkCachedConfigSchema, GlasstraceOptionsSchema, GlasstraceEnvVarsSchema, GLASSTRACE_ATTRIBUTE_NAMES, DEFAULT_CAPTURE_CONFIG, MAX_SOURCE_MAP_FILE_PATH_LENGTH, MAX_SOURCE_MAP_FILE_SIZE, MAX_SOURCE_MAP_FILE_COUNT, MAX_PRESIGNED_CLIENT_TOKEN_LENGTH, MAX_PRESIGNED_PATHNAME_LENGTH, ImportGraphPayloadSchema, SdkHealthReportSchema, TierLimitsSchema, SdkInitResponseSchema, DiscoveryResponseSchema, SourceMapUploadResponseSchema, PresignedUploadRequestSchema, PresignedUploadResponseSchema, SourceMapManifestRequestSchema, SourceMapManifestResponseSchema, K;
14567
14567
  var init_dist = __esm({
14568
14568
  "../protocol/dist/index.js"() {
14569
14569
  "use strict";
@@ -14614,6 +14614,59 @@ var init_dist = __esm({
14614
14614
  NODE_ENV: external_exports.string().optional(),
14615
14615
  VERCEL_ENV: external_exports.string().optional()
14616
14616
  });
14617
+ GLASSTRACE_ATTRIBUTE_NAMES = {
14618
+ // Server-side attributes
14619
+ TRACE_TYPE: "glasstrace.trace.type",
14620
+ SESSION_ID: "glasstrace.session.id",
14621
+ CORRELATION_ID: "glasstrace.correlation.id",
14622
+ ENVIRONMENT: "glasstrace.environment",
14623
+ ROUTE: "glasstrace.route",
14624
+ HTTP_METHOD: "glasstrace.http.method",
14625
+ HTTP_STATUS_CODE: "glasstrace.http.status_code",
14626
+ HTTP_DURATION_MS: "glasstrace.http.duration_ms",
14627
+ ERROR_MESSAGE: "glasstrace.error.message",
14628
+ ERROR_CODE: "glasstrace.error.code",
14629
+ ERROR_CATEGORY: "glasstrace.error.category",
14630
+ ERROR_FIELD: "glasstrace.error.field",
14631
+ ORM_PROVIDER: "glasstrace.orm.provider",
14632
+ ORM_MODEL: "glasstrace.orm.model",
14633
+ ORM_OPERATION: "glasstrace.orm.operation",
14634
+ ORM_DURATION_MS: "glasstrace.orm.duration_ms",
14635
+ FETCH_URL: "glasstrace.fetch.url",
14636
+ FETCH_METHOD: "glasstrace.fetch.method",
14637
+ FETCH_STATUS_CODE: "glasstrace.fetch.status_code",
14638
+ FETCH_DURATION_MS: "glasstrace.fetch.duration_ms",
14639
+ FETCH_TARGET: "glasstrace.fetch.target",
14640
+ ENV_REFERENCED: "glasstrace.env.referenced",
14641
+ BUILD_HASH: "glasstrace.build.hash",
14642
+ SOURCE_FILE: "glasstrace.source.file",
14643
+ SOURCE_LINE: "glasstrace.source.line",
14644
+ SOURCE_MAPPED: "glasstrace.source.mapped",
14645
+ TRPC_PROCEDURE: "glasstrace.trpc.procedure",
14646
+ ERROR_RESPONSE_BODY: "glasstrace.error.response_body",
14647
+ NEXT_ACTION_DETECTED: "glasstrace.next.action.detected",
14648
+ // Client-side attributes
14649
+ PLATFORM: "glasstrace.platform",
14650
+ GESTURE_TYPE: "glasstrace.gesture.type",
14651
+ TRIGGER_TYPE: "glasstrace.trigger.type",
14652
+ ELEMENT_FINGERPRINT: "glasstrace.element.fingerprint",
14653
+ ELEMENT_CONFIDENCE: "glasstrace.element.confidence",
14654
+ TAB_ID: "glasstrace.tab.id"
14655
+ };
14656
+ DEFAULT_CAPTURE_CONFIG = {
14657
+ requestBodies: false,
14658
+ queryParamValues: false,
14659
+ envVarValues: false,
14660
+ fullConsoleOutput: false,
14661
+ importGraph: false,
14662
+ consoleErrors: false,
14663
+ errorResponseBodies: false
14664
+ };
14665
+ MAX_SOURCE_MAP_FILE_PATH_LENGTH = 512;
14666
+ MAX_SOURCE_MAP_FILE_SIZE = 50 * 1024 * 1024;
14667
+ MAX_SOURCE_MAP_FILE_COUNT = 100;
14668
+ MAX_PRESIGNED_CLIENT_TOKEN_LENGTH = 2048;
14669
+ MAX_PRESIGNED_PATHNAME_LENGTH = 1024;
14617
14670
  ImportGraphPayloadSchema = external_exports.object({
14618
14671
  buildHash: BuildHashSchema,
14619
14672
  graph: external_exports.record(external_exports.string(), external_exports.array(external_exports.string()))
@@ -14660,35 +14713,68 @@ var init_dist = __esm({
14660
14713
  buildHash: BuildHashSchema,
14661
14714
  files: external_exports.array(
14662
14715
  external_exports.object({
14663
- filePath: external_exports.string().min(1),
14664
- sizeBytes: external_exports.number().int().positive()
14716
+ filePath: external_exports.string().min(1).max(
14717
+ MAX_SOURCE_MAP_FILE_PATH_LENGTH,
14718
+ `filePath length exceeds maximum of ${MAX_SOURCE_MAP_FILE_PATH_LENGTH} characters`
14719
+ ),
14720
+ sizeBytes: external_exports.number().int().positive().max(
14721
+ MAX_SOURCE_MAP_FILE_SIZE,
14722
+ `sizeBytes exceeds maximum of ${MAX_SOURCE_MAP_FILE_SIZE} bytes (${MAX_SOURCE_MAP_FILE_SIZE / (1024 * 1024)} MiB)`
14723
+ )
14665
14724
  })
14666
- ).min(1).max(100)
14725
+ ).min(1).max(
14726
+ MAX_SOURCE_MAP_FILE_COUNT,
14727
+ `files array exceeds maximum of ${MAX_SOURCE_MAP_FILE_COUNT} entries`
14728
+ )
14667
14729
  });
14668
14730
  PresignedUploadResponseSchema = external_exports.object({
14669
14731
  uploadId: external_exports.string().uuid(),
14670
14732
  expiresAt: external_exports.number().int().nonnegative(),
14671
14733
  files: external_exports.array(
14672
14734
  external_exports.object({
14673
- filePath: external_exports.string().min(1),
14674
- clientToken: external_exports.string().min(1),
14675
- pathname: external_exports.string().min(1),
14676
- maxBytes: external_exports.number().int().positive(),
14735
+ filePath: external_exports.string().min(1).max(
14736
+ MAX_SOURCE_MAP_FILE_PATH_LENGTH,
14737
+ `filePath length exceeds maximum of ${MAX_SOURCE_MAP_FILE_PATH_LENGTH} characters`
14738
+ ),
14739
+ clientToken: external_exports.string().min(1).max(
14740
+ MAX_PRESIGNED_CLIENT_TOKEN_LENGTH,
14741
+ `clientToken length exceeds maximum of ${MAX_PRESIGNED_CLIENT_TOKEN_LENGTH} characters`
14742
+ ),
14743
+ pathname: external_exports.string().min(1).max(
14744
+ MAX_PRESIGNED_PATHNAME_LENGTH,
14745
+ `pathname length exceeds maximum of ${MAX_PRESIGNED_PATHNAME_LENGTH} characters`
14746
+ ),
14747
+ maxBytes: external_exports.number().int().positive().max(
14748
+ MAX_SOURCE_MAP_FILE_SIZE,
14749
+ `maxBytes exceeds maximum of ${MAX_SOURCE_MAP_FILE_SIZE} bytes (${MAX_SOURCE_MAP_FILE_SIZE / (1024 * 1024)} MiB)`
14750
+ ),
14677
14751
  /** Vercel Blob access mode — explicit in the contract per DISC-756. */
14678
14752
  access: external_exports.enum(["public"])
14679
14753
  })
14680
- ).min(1).max(100)
14754
+ ).min(1).max(
14755
+ MAX_SOURCE_MAP_FILE_COUNT,
14756
+ `files array exceeds maximum of ${MAX_SOURCE_MAP_FILE_COUNT} entries`
14757
+ )
14681
14758
  });
14682
14759
  SourceMapManifestRequestSchema = external_exports.object({
14683
14760
  uploadId: external_exports.string().uuid(),
14684
14761
  buildHash: BuildHashSchema,
14685
14762
  files: external_exports.array(
14686
14763
  external_exports.object({
14687
- filePath: external_exports.string().min(1),
14688
- sizeBytes: external_exports.number().int().positive(),
14764
+ filePath: external_exports.string().min(1).max(
14765
+ MAX_SOURCE_MAP_FILE_PATH_LENGTH,
14766
+ `filePath length exceeds maximum of ${MAX_SOURCE_MAP_FILE_PATH_LENGTH} characters`
14767
+ ),
14768
+ sizeBytes: external_exports.number().int().positive().max(
14769
+ MAX_SOURCE_MAP_FILE_SIZE,
14770
+ `sizeBytes exceeds maximum of ${MAX_SOURCE_MAP_FILE_SIZE} bytes (${MAX_SOURCE_MAP_FILE_SIZE / (1024 * 1024)} MiB)`
14771
+ ),
14689
14772
  blobUrl: external_exports.string().url()
14690
14773
  })
14691
- ).min(1).max(100)
14774
+ ).min(1).max(
14775
+ MAX_SOURCE_MAP_FILE_COUNT,
14776
+ `files array exceeds maximum of ${MAX_SOURCE_MAP_FILE_COUNT} entries`
14777
+ )
14692
14778
  });
14693
14779
  SourceMapManifestResponseSchema = external_exports.object({
14694
14780
  success: external_exports.literal(true),
@@ -14697,54 +14783,6 @@ var init_dist = __esm({
14697
14783
  totalSizeBytes: external_exports.number().int().nonnegative(),
14698
14784
  activatedAt: external_exports.number().int().positive()
14699
14785
  });
14700
- GLASSTRACE_ATTRIBUTE_NAMES = {
14701
- // Server-side attributes
14702
- TRACE_TYPE: "glasstrace.trace.type",
14703
- SESSION_ID: "glasstrace.session.id",
14704
- CORRELATION_ID: "glasstrace.correlation.id",
14705
- ENVIRONMENT: "glasstrace.environment",
14706
- ROUTE: "glasstrace.route",
14707
- HTTP_METHOD: "glasstrace.http.method",
14708
- HTTP_STATUS_CODE: "glasstrace.http.status_code",
14709
- HTTP_DURATION_MS: "glasstrace.http.duration_ms",
14710
- ERROR_MESSAGE: "glasstrace.error.message",
14711
- ERROR_CODE: "glasstrace.error.code",
14712
- ERROR_CATEGORY: "glasstrace.error.category",
14713
- ERROR_FIELD: "glasstrace.error.field",
14714
- ORM_PROVIDER: "glasstrace.orm.provider",
14715
- ORM_MODEL: "glasstrace.orm.model",
14716
- ORM_OPERATION: "glasstrace.orm.operation",
14717
- ORM_DURATION_MS: "glasstrace.orm.duration_ms",
14718
- FETCH_URL: "glasstrace.fetch.url",
14719
- FETCH_METHOD: "glasstrace.fetch.method",
14720
- FETCH_STATUS_CODE: "glasstrace.fetch.status_code",
14721
- FETCH_DURATION_MS: "glasstrace.fetch.duration_ms",
14722
- FETCH_TARGET: "glasstrace.fetch.target",
14723
- ENV_REFERENCED: "glasstrace.env.referenced",
14724
- BUILD_HASH: "glasstrace.build.hash",
14725
- SOURCE_FILE: "glasstrace.source.file",
14726
- SOURCE_LINE: "glasstrace.source.line",
14727
- SOURCE_MAPPED: "glasstrace.source.mapped",
14728
- TRPC_PROCEDURE: "glasstrace.trpc.procedure",
14729
- ERROR_RESPONSE_BODY: "glasstrace.error.response_body",
14730
- NEXT_ACTION_DETECTED: "glasstrace.next.action.detected",
14731
- // Client-side attributes
14732
- PLATFORM: "glasstrace.platform",
14733
- GESTURE_TYPE: "glasstrace.gesture.type",
14734
- TRIGGER_TYPE: "glasstrace.trigger.type",
14735
- ELEMENT_FINGERPRINT: "glasstrace.element.fingerprint",
14736
- ELEMENT_CONFIDENCE: "glasstrace.element.confidence",
14737
- TAB_ID: "glasstrace.tab.id"
14738
- };
14739
- DEFAULT_CAPTURE_CONFIG = {
14740
- requestBodies: false,
14741
- queryParamValues: false,
14742
- envVarValues: false,
14743
- fullConsoleOutput: false,
14744
- importGraph: false,
14745
- consoleErrors: false,
14746
- errorResponseBodies: false
14747
- };
14748
14786
  K = new Uint32Array([
14749
14787
  1116352408,
14750
14788
  1899447441,
@@ -18356,15 +18394,32 @@ function prepareErrorResponseBody(body) {
18356
18394
  }
18357
18395
 
18358
18396
  // src/build-info.ts
18397
+ init_console_capture();
18359
18398
  var UNSET = "";
18399
+ var SHA_SHAPE = /^[0-9a-f]{7,64}$/i;
18400
+ function redactBuildHash(value) {
18401
+ const sanitize2 = (s) => s.replace(/[\x00-\x1F\x7F]/g, "?");
18402
+ if (value.length <= 12) return sanitize2(value.slice(0, 4)) + "...";
18403
+ return sanitize2(value.slice(0, 8)) + "..." + sanitize2(value.slice(-4));
18404
+ }
18360
18405
  function readBuildHashFromEnv() {
18361
18406
  const raw = process.env.GLASSTRACE_BUILD_HASH;
18362
18407
  if (typeof raw !== "string") return UNSET;
18363
18408
  const trimmed = raw.trim();
18364
- return trimmed.length > 0 ? trimmed : UNSET;
18409
+ if (trimmed.length === 0) return UNSET;
18410
+ if (!SHA_SHAPE.test(trimmed)) {
18411
+ sdkLog(
18412
+ "warn",
18413
+ `[glasstrace] warning: GLASSTRACE_BUILD_HASH=${redactBuildHash(trimmed)} does not match expected SHA shape (7-64 hex characters); source-map enrichment may not work as expected.`
18414
+ );
18415
+ }
18416
+ return trimmed;
18365
18417
  }
18366
- var cachedBuildHash = readBuildHashFromEnv();
18418
+ var cachedBuildHash = null;
18367
18419
  function getBuildHash() {
18420
+ if (cachedBuildHash === null) {
18421
+ cachedBuildHash = readBuildHashFromEnv();
18422
+ }
18368
18423
  return cachedBuildHash === UNSET ? void 0 : cachedBuildHash;
18369
18424
  }
18370
18425
 
@@ -21981,9 +22036,11 @@ This message will not appear once Glasstrace is added to your provider config.`
21981
22036
  }
21982
22037
  function emitGuidanceMessage() {
21983
22038
  const isSentry = detectSentry();
22039
+ const isProduction = typeof process !== "undefined" && process.env?.NODE_ENV === "production";
22040
+ const level = isProduction ? "error" : "warn";
21984
22041
  if (isSentry) {
21985
22042
  sdkLog(
21986
- "warn",
22043
+ level,
21987
22044
  `[glasstrace] An existing OTel TracerProvider is registered but Glasstrace could not auto-attach its span processor.
21988
22045
  Add Glasstrace to your Sentry config:
21989
22046
 
@@ -21996,7 +22053,7 @@ Add Glasstrace to your Sentry config:
21996
22053
  );
21997
22054
  } else {
21998
22055
  sdkLog(
21999
- "warn",
22056
+ level,
22000
22057
  `[glasstrace] An existing OTel TracerProvider is registered but Glasstrace could not auto-attach its span processor.
22001
22058
  Add Glasstrace to your provider configuration:
22002
22059
 
@@ -22123,11 +22180,27 @@ async function runCoexistencePath(existingProvider, config2) {
22123
22180
  setOtelState(OtelState.COEXISTENCE_FAILED);
22124
22181
  emitLifecycleEvent("otel:configured", { state: OtelState.COEXISTENCE_FAILED, scenario: "C/F" });
22125
22182
  emitLifecycleEvent("otel:injection_failed", { reason: "provider internals inaccessible" });
22183
+ emitLifecycleEvent("otel:failed", {
22184
+ category: "auto-attach-returned-null",
22185
+ message: "tryAutoAttachGlasstraceProcessor returned null \u2014 the existing OTel TracerProvider exposed no injection point. Spans are not reaching the Glasstrace exporter. Apply the manual createGlasstraceSpanProcessor() workaround documented in the SDK README.",
22186
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
22187
+ providerClass: readProviderClass(existingProvider)
22188
+ });
22126
22189
  const coreState = getCoreState();
22127
22190
  if (coreState === CoreState.ACTIVE || coreState === CoreState.KEY_RESOLVED) {
22128
22191
  setCoreState(CoreState.ACTIVE_DEGRADED);
22129
22192
  }
22130
22193
  }
22194
+ function readProviderClass(tracerProvider) {
22195
+ try {
22196
+ const proxy = tracerProvider;
22197
+ const delegate = typeof proxy.getDelegate === "function" ? proxy.getDelegate() : tracerProvider;
22198
+ const name = delegate?.constructor?.name;
22199
+ return typeof name === "string" && name.length > 0 ? name : void 0;
22200
+ } catch {
22201
+ return void 0;
22202
+ }
22203
+ }
22131
22204
  async function runRegistrationPath(config2, sessionManager) {
22132
22205
  const exporterUrl = `${config2.endpoint}/v1/traces`;
22133
22206
  const createOtlpExporter = (url2, headers) => new OTLPTraceExporter({ url: url2, headers });
@@ -22430,6 +22503,7 @@ init_console_capture();
22430
22503
  var _projectRoot = null;
22431
22504
  var _sdkVersion = "unknown";
22432
22505
  var _lastScenario;
22506
+ var _lastError;
22433
22507
  var _debounceTimer = null;
22434
22508
  var _started = false;
22435
22509
  function startRuntimeStateWriter(options) {
@@ -22452,6 +22526,10 @@ function startRuntimeStateWriter(options) {
22452
22526
  _lastScenario = scenario;
22453
22527
  debouncedWrite();
22454
22528
  });
22529
+ onLifecycleEvent("otel:failed", (payload) => {
22530
+ _lastError = { ...payload };
22531
+ debouncedWrite();
22532
+ });
22455
22533
  onLifecycleEvent("auth:key_resolved", () => debouncedWrite());
22456
22534
  onLifecycleEvent("auth:claim_started", () => debouncedWrite());
22457
22535
  onLifecycleEvent("auth:claim_completed", () => debouncedWrite());
@@ -22479,6 +22557,9 @@ function writeStateNow() {
22479
22557
  auth: { state: state.auth },
22480
22558
  otel: { state: state.otel, scenario: _lastScenario }
22481
22559
  };
22560
+ if (_lastError) {
22561
+ runtimeState.lastError = _lastError;
22562
+ }
22482
22563
  const dir = (0, import_node_path.join)(_projectRoot, ".glasstrace");
22483
22564
  const filePath = (0, import_node_path.join)(dir, "runtime-state.json");
22484
22565
  (0, import_node_fs.mkdirSync)(dir, { recursive: true, mode: 448 });
@@ -22523,7 +22604,7 @@ function registerGlasstrace(options) {
22523
22604
  setCoreState(CoreState.REGISTERING);
22524
22605
  startRuntimeStateWriter({
22525
22606
  projectRoot: process.cwd(),
22526
- sdkVersion: "1.3.2"
22607
+ sdkVersion: "1.3.4"
22527
22608
  });
22528
22609
  const config2 = resolveConfig(options);
22529
22610
  if (config2.verbose) {
@@ -22689,8 +22770,8 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
22689
22770
  if (config2.verbose) {
22690
22771
  console.info("[glasstrace] Background init firing.");
22691
22772
  }
22692
- const healthReport = collectHealthReport("1.3.2");
22693
- const initResult = await performInit(config2, anonKeyForInit, "1.3.2", healthReport);
22773
+ const healthReport = collectHealthReport("1.3.4");
22774
+ const initResult = await performInit(config2, anonKeyForInit, "1.3.4", healthReport);
22694
22775
  if (generation !== registrationGeneration) return;
22695
22776
  const currentState = getCoreState();
22696
22777
  if (currentState === CoreState.SHUTTING_DOWN || currentState === CoreState.SHUTDOWN) {
@@ -22713,7 +22794,7 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
22713
22794
  }
22714
22795
  maybeInstallConsoleCapture();
22715
22796
  if (didLastInitSucceed()) {
22716
- startHeartbeat(config2, anonKeyForInit, "1.3.2", generation, (newApiKey, accountId) => {
22797
+ startHeartbeat(config2, anonKeyForInit, "1.3.4", generation, (newApiKey, accountId) => {
22717
22798
  setAuthState(AuthState.CLAIMING);
22718
22799
  emitLifecycleEvent("auth:claim_started", { accountId });
22719
22800
  setResolvedApiKey(newApiKey);
@@ -22875,8 +22956,8 @@ init_dist();
22875
22956
  init_error_nudge();
22876
22957
 
22877
22958
  // src/stack-frame.ts
22878
- var PAREN_FRAME = /^\s*at\s+(?:[^()]+\s+)?\(([^()\s]+):(\d+):(\d+)\)\s*$/;
22879
- var BARE_FRAME = /^\s*at\s+(?:async\s+)?([^()\s]+):(\d+):(\d+)\s*$/;
22959
+ var PAREN_FRAME = /^\s*at\s+(?!eval\s+\(eval\s+at\b)(?:[^()]+\s+)?\(([^()\s]+(?:\([A-Za-z0-9_.-]+\)[^()\s]*)*):(\d+):(\d+)\)\s*$/;
22960
+ var BARE_FRAME = /^\s*at\s+(?:async\s+)?([^()\s]+(?:\([A-Za-z0-9_.-]+\)[^()\s]*)*):(\d+):(\d+)\s*$/;
22880
22961
  var INTERNAL_FRAME_PATTERNS = [
22881
22962
  /^node:/,
22882
22963
  /^node:internal\//,