@glasstrace/sdk 1.3.2 → 1.3.3

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 (49) hide show
  1. package/README.md +38 -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-XNKG4WNQ.js} +30 -14
  13. package/dist/chunk-XNKG4WNQ.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 +123 -68
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.js +6 -6
  33. package/dist/node-entry.cjs +123 -68
  34. package/dist/node-entry.cjs.map +1 -1
  35. package/dist/node-entry.js +8 -8
  36. package/dist/node-subpath.cjs +49 -11
  37. package/dist/node-subpath.cjs.map +1 -1
  38. package/dist/node-subpath.js +4 -4
  39. package/dist/{source-map-uploader-LACAGKIW.js → source-map-uploader-JAD3XM4F.js} +4 -4
  40. package/package.json +1 -1
  41. package/dist/chunk-3TU62WD6.js.map +0 -1
  42. package/dist/chunk-DQGNUENK.js.map +0 -1
  43. package/dist/chunk-REEU6CNO.js.map +0 -1
  44. package/dist/chunk-UFZEISZB.js.map +0 -1
  45. /package/dist/{chunk-XS3BO7RY.js.map → chunk-BQKPRFLF.js.map} +0 -0
  46. /package/dist/{chunk-GCFOY7T2.js.map → chunk-E62DL2H4.js.map} +0 -0
  47. /package/dist/{chunk-JFR42QG5.js.map → chunk-QJVAKVQJ.js.map} +0 -0
  48. /package/dist/{chunk-CRM3EYOL.js.map → chunk-WKOQJCFN.js.map} +0 -0
  49. /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
 
@@ -22523,7 +22578,7 @@ function registerGlasstrace(options) {
22523
22578
  setCoreState(CoreState.REGISTERING);
22524
22579
  startRuntimeStateWriter({
22525
22580
  projectRoot: process.cwd(),
22526
- sdkVersion: "1.3.2"
22581
+ sdkVersion: "1.3.3"
22527
22582
  });
22528
22583
  const config2 = resolveConfig(options);
22529
22584
  if (config2.verbose) {
@@ -22689,8 +22744,8 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
22689
22744
  if (config2.verbose) {
22690
22745
  console.info("[glasstrace] Background init firing.");
22691
22746
  }
22692
- const healthReport = collectHealthReport("1.3.2");
22693
- const initResult = await performInit(config2, anonKeyForInit, "1.3.2", healthReport);
22747
+ const healthReport = collectHealthReport("1.3.3");
22748
+ const initResult = await performInit(config2, anonKeyForInit, "1.3.3", healthReport);
22694
22749
  if (generation !== registrationGeneration) return;
22695
22750
  const currentState = getCoreState();
22696
22751
  if (currentState === CoreState.SHUTTING_DOWN || currentState === CoreState.SHUTDOWN) {
@@ -22713,7 +22768,7 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
22713
22768
  }
22714
22769
  maybeInstallConsoleCapture();
22715
22770
  if (didLastInitSucceed()) {
22716
- startHeartbeat(config2, anonKeyForInit, "1.3.2", generation, (newApiKey, accountId) => {
22771
+ startHeartbeat(config2, anonKeyForInit, "1.3.3", generation, (newApiKey, accountId) => {
22717
22772
  setAuthState(AuthState.CLAIMING);
22718
22773
  emitLifecycleEvent("auth:claim_started", { accountId });
22719
22774
  setResolvedApiKey(newApiKey);
@@ -22875,8 +22930,8 @@ init_dist();
22875
22930
  init_error_nudge();
22876
22931
 
22877
22932
  // 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*$/;
22933
+ var PAREN_FRAME = /^\s*at\s+(?!eval\s+\(eval\s+at\b)(?:[^()]+\s+)?\(([^()\s]+(?:\([A-Za-z0-9_.-]+\)[^()\s]*)*):(\d+):(\d+)\)\s*$/;
22934
+ var BARE_FRAME = /^\s*at\s+(?:async\s+)?([^()\s]+(?:\([A-Za-z0-9_.-]+\)[^()\s]*)*):(\d+):(\d+)\s*$/;
22880
22935
  var INTERNAL_FRAME_PATTERNS = [
22881
22936
  /^node:/,
22882
22937
  /^node:internal\//,