@glasstrace/sdk 1.15.1 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -11
- package/dist/async-context/index.cjs +21 -2
- package/dist/async-context/index.cjs.map +1 -1
- package/dist/async-context/index.js +2 -2
- package/dist/{capture-error-03qDnC5v.d.cts → capture-error-B0txjNut.d.cts} +2 -2
- package/dist/{capture-error-CAfFUyIU.d.ts → capture-error-Dc01rYNR.d.ts} +2 -2
- package/dist/{chunk-ZIYT2Y4B.js → chunk-BJOZBAP7.js} +3 -3
- package/dist/{chunk-VMK2G6QR.js → chunk-CN5EP25B.js} +2 -2
- package/dist/{chunk-HMEHYSTS.js → chunk-EVX6D2TX.js} +2 -2
- package/dist/{chunk-T4ETJJSK.js → chunk-F2IPBTDJ.js} +133 -11
- package/dist/{chunk-T4ETJJSK.js.map → chunk-F2IPBTDJ.js.map} +1 -1
- package/dist/{chunk-XMD5OYD6.js → chunk-M3QGJUEI.js} +2 -2
- package/dist/{chunk-7LE2O4ZJ.js → chunk-MKT54VEH.js} +55 -6
- package/dist/{chunk-7LE2O4ZJ.js.map → chunk-MKT54VEH.js.map} +1 -1
- package/dist/{chunk-MP3QNDXQ.js → chunk-O7IJP2TQ.js} +2 -2
- package/dist/{chunk-F7A3QXCT.js → chunk-UOAG72NR.js} +2 -2
- package/dist/{chunk-6ST4QV7T.js → chunk-VEQX2YSQ.js} +3 -3
- package/dist/{chunk-LQZRGBN5.js → chunk-YKE6HJLW.js} +2 -2
- package/dist/cli/init.cjs +18 -5
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.js +7 -7
- package/dist/cli/mcp-add.cjs +15 -2
- package/dist/cli/mcp-add.cjs.map +1 -1
- package/dist/cli/mcp-add.js +3 -3
- package/dist/cli/uninit.js +3 -3
- package/dist/cli/upgrade-instructions.cjs +1 -1
- package/dist/cli/upgrade-instructions.js +3 -3
- package/dist/cli/validate.cjs +14 -1
- package/dist/cli/validate.cjs.map +1 -1
- package/dist/cli/validate.js +2 -2
- package/dist/{correlation-id-YcfcqOru.d.ts → correlation-id-B9YYmoZw.d.ts} +1 -1
- package/dist/{correlation-id-CZ2bstzA.d.cts → correlation-id-CelUvw7j.d.cts} +1 -1
- package/dist/edge-entry.cjs +21 -2
- package/dist/edge-entry.cjs.map +1 -1
- package/dist/edge-entry.d.cts +2 -2
- package/dist/edge-entry.d.ts +2 -2
- package/dist/edge-entry.js +4 -4
- package/dist/import-graph-DBLGNjcI.d.cts +238 -0
- package/dist/import-graph-Dka_Fm7j.d.ts +238 -0
- package/dist/index.cjs +203 -12
- package/dist/index.cjs.map +1 -1
- package/dist/{index.d-BQIJ5Dvc.d.cts → index.d-3-cJoY8y.d.cts} +10 -2
- package/dist/{index.d-BQIJ5Dvc.d.ts → index.d-3-cJoY8y.d.ts} +10 -2
- package/dist/index.d.cts +102 -5
- package/dist/index.d.ts +102 -5
- package/dist/index.js +30 -5
- package/dist/index.js.map +1 -1
- package/dist/middleware/index.cjs +21 -2
- package/dist/middleware/index.cjs.map +1 -1
- package/dist/middleware/index.js +2 -2
- package/dist/node-entry.cjs +28 -8
- package/dist/node-entry.cjs.map +1 -1
- package/dist/node-entry.d.cts +4 -4
- package/dist/node-entry.d.ts +4 -4
- package/dist/node-entry.js +7 -7
- package/dist/node-subpath.cjs +27 -1
- package/dist/node-subpath.cjs.map +1 -1
- package/dist/node-subpath.d.cts +51 -235
- package/dist/node-subpath.d.ts +51 -235
- package/dist/node-subpath.js +16 -3
- package/dist/node-subpath.js.map +1 -1
- package/dist/{source-map-uploader-NUONOEJG.js → source-map-uploader-U7SLSKIZ.js} +3 -3
- package/dist/trpc/index.cjs +21 -2
- package/dist/trpc/index.cjs.map +1 -1
- package/dist/trpc/index.js +1 -1
- package/package.json +1 -1
- /package/dist/{chunk-ZIYT2Y4B.js.map → chunk-BJOZBAP7.js.map} +0 -0
- /package/dist/{chunk-VMK2G6QR.js.map → chunk-CN5EP25B.js.map} +0 -0
- /package/dist/{chunk-HMEHYSTS.js.map → chunk-EVX6D2TX.js.map} +0 -0
- /package/dist/{chunk-XMD5OYD6.js.map → chunk-M3QGJUEI.js.map} +0 -0
- /package/dist/{chunk-MP3QNDXQ.js.map → chunk-O7IJP2TQ.js.map} +0 -0
- /package/dist/{chunk-F7A3QXCT.js.map → chunk-UOAG72NR.js.map} +0 -0
- /package/dist/{chunk-6ST4QV7T.js.map → chunk-VEQX2YSQ.js.map} +0 -0
- /package/dist/{chunk-LQZRGBN5.js.map → chunk-YKE6HJLW.js.map} +0 -0
- /package/dist/{source-map-uploader-NUONOEJG.js.map → source-map-uploader-U7SLSKIZ.js.map} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -15338,7 +15338,11 @@ function isSideEffectSemanticFieldKey(key) {
|
|
|
15338
15338
|
key
|
|
15339
15339
|
) || SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN.test(key);
|
|
15340
15340
|
}
|
|
15341
|
-
|
|
15341
|
+
function isSideEffectScalarKey(key) {
|
|
15342
|
+
if (key.length > MAX_SIDE_EFFECT_SEMANTIC_FIELD_KEY_LENGTH) return false;
|
|
15343
|
+
return SIDE_EFFECT_SCALAR_KEY_PATTERN.test(key);
|
|
15344
|
+
}
|
|
15345
|
+
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, SIDE_EFFECT_OPERATION_KINDS, SIDE_EFFECT_SEMANTIC_FIELD_STABLE_CORE_KEYS, SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN, MAX_SIDE_EFFECT_SEMANTIC_FIELD_KEY_LENGTH, SIDE_EFFECT_OMISSION_REASONS, SIDE_EFFECT_SCALAR_KEY_PATTERN, SIDE_EFFECT_SCALAR_PREFIX, MAX_SIDE_EFFECT_SCALARS_PER_OPERATION, SIDE_EFFECT_HASHED_ID_PREFIX, SIDE_EFFECT_HASHED_ID_HEX_LENGTH, SIDE_EFFECT_OPERATION_STATUSES, SIDE_EFFECT_OPERATION_PHASES;
|
|
15342
15346
|
var init_dist = __esm({
|
|
15343
15347
|
"../protocol/dist/index.js"() {
|
|
15344
15348
|
"use strict";
|
|
@@ -15377,7 +15381,20 @@ var init_dist = __esm({
|
|
|
15377
15381
|
* client-side allowlist enforcement layered with the product's
|
|
15378
15382
|
* storage-time filter as defense-in-depth.
|
|
15379
15383
|
*/
|
|
15380
|
-
sideEffectEvidence: external_exports.boolean().optional().default(false)
|
|
15384
|
+
sideEffectEvidence: external_exports.boolean().optional().default(false),
|
|
15385
|
+
/**
|
|
15386
|
+
* Per-account value-fidelity capture posture (server-pushed).
|
|
15387
|
+
*
|
|
15388
|
+
* `strict` (default) is fail-closed: the SDK rejects raw wall-clock
|
|
15389
|
+
* timestamps and unhashed identifiers from the `scalar.*` channel at
|
|
15390
|
+
* emit time. `full` relaxes those rejections so raw magnitudes can be
|
|
15391
|
+
* surfaced — but only in conjunction with an explicit producer opt-in
|
|
15392
|
+
* (so a `full`-configured account still emits strict-shaped scalars
|
|
15393
|
+
* unless the producer also opts in). The operator owns this flag; it
|
|
15394
|
+
* is never derived from producer or request input. Absent on the wire
|
|
15395
|
+
* ⇒ `strict`.
|
|
15396
|
+
*/
|
|
15397
|
+
captureFidelity: external_exports.enum(["strict", "full"]).optional().default("strict")
|
|
15381
15398
|
});
|
|
15382
15399
|
SdkCachedConfigSchema = external_exports.object({
|
|
15383
15400
|
response: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
@@ -15568,7 +15585,13 @@ var init_dist = __esm({
|
|
|
15568
15585
|
SIDE_EFFECT_OMITTED_UNSUPPORTED_KEY: "glasstrace.side_effect.omitted.unsupported_key",
|
|
15569
15586
|
SIDE_EFFECT_OMITTED_VALUE_TOO_LONG: "glasstrace.side_effect.omitted.value_too_long",
|
|
15570
15587
|
SIDE_EFFECT_OMITTED_NOT_EMITTED: "glasstrace.side_effect.omitted.not_emitted",
|
|
15571
|
-
SIDE_EFFECT_OMITTED_CAPTURE_DISABLED: "glasstrace.side_effect.omitted.capture_disabled"
|
|
15588
|
+
SIDE_EFFECT_OMITTED_CAPTURE_DISABLED: "glasstrace.side_effect.omitted.capture_disabled",
|
|
15589
|
+
// Value-fidelity scalar-channel omission reasons. Counts only; the
|
|
15590
|
+
// rejected raw value (timestamp, unhashed id, non-finite number) is
|
|
15591
|
+
// never echoed. Mirror the product omission enum verbatim.
|
|
15592
|
+
SIDE_EFFECT_OMITTED_RAW_TIMESTAMP: "glasstrace.side_effect.omitted.raw_timestamp",
|
|
15593
|
+
SIDE_EFFECT_OMITTED_UNHASHED_ID: "glasstrace.side_effect.omitted.unhashed_id",
|
|
15594
|
+
SIDE_EFFECT_OMITTED_NON_FINITE: "glasstrace.side_effect.omitted.non_finite"
|
|
15572
15595
|
};
|
|
15573
15596
|
DEFAULT_CAPTURE_CONFIG = {
|
|
15574
15597
|
requestBodies: false,
|
|
@@ -15578,7 +15601,8 @@ var init_dist = __esm({
|
|
|
15578
15601
|
importGraph: false,
|
|
15579
15602
|
consoleErrors: false,
|
|
15580
15603
|
errorResponseBodies: false,
|
|
15581
|
-
sideEffectEvidence: false
|
|
15604
|
+
sideEffectEvidence: false,
|
|
15605
|
+
captureFidelity: "strict"
|
|
15582
15606
|
};
|
|
15583
15607
|
MAX_SOURCE_MAP_FILE_PATH_LENGTH = 512;
|
|
15584
15608
|
MAX_SOURCE_MAP_FILE_SIZE = 50 * 1024 * 1024;
|
|
@@ -15784,7 +15808,7 @@ var init_dist = __esm({
|
|
|
15784
15808
|
"status",
|
|
15785
15809
|
"phase"
|
|
15786
15810
|
];
|
|
15787
|
-
SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN = /^[a-z][A-Za-z0-9]*(Class|Count|Kind|Role)$/;
|
|
15811
|
+
SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN = /^[a-z][A-Za-z0-9]*(Class|Count|Kind|Role|Holds)$/;
|
|
15788
15812
|
MAX_SIDE_EFFECT_SEMANTIC_FIELD_KEY_LENGTH = 80;
|
|
15789
15813
|
SIDE_EFFECT_OMISSION_REASONS = [
|
|
15790
15814
|
"pii",
|
|
@@ -15793,8 +15817,28 @@ var init_dist = __esm({
|
|
|
15793
15817
|
"unsupported_key",
|
|
15794
15818
|
"value_too_long",
|
|
15795
15819
|
"not_emitted",
|
|
15796
|
-
"capture_disabled"
|
|
15820
|
+
"capture_disabled",
|
|
15821
|
+
// Value-fidelity scalar channel reasons. A scalar is dropped under
|
|
15822
|
+
// `raw_timestamp` when a wall-clock value (a `Date` instance, or a
|
|
15823
|
+
// numeric epoch on a `*Ms` key) is rejected in favor of a bounded
|
|
15824
|
+
// delta; `unhashed_id` when an `*Id` scalar is not the `gthid_<hex>`
|
|
15825
|
+
// output of `hashId`; `non_finite` when a number is NaN/±Infinity.
|
|
15826
|
+
// (A type-mismatched value — e.g. a date *string* on a numeric key —
|
|
15827
|
+
// is dropped under `raw_payload`, not `raw_timestamp`, since the
|
|
15828
|
+
// scalar channel only carries native numbers/booleans plus `gthid_`
|
|
15829
|
+
// ids.) These mirror the product `SideEffectOmissionReasonSchema`
|
|
15830
|
+
// tuple verbatim (hand-maintained on both sides; see @drift-check
|
|
15831
|
+
// above). `non_finite` is SDK-emit-time only — JSON cannot carry
|
|
15832
|
+
// NaN/Infinity to the wire.
|
|
15833
|
+
"raw_timestamp",
|
|
15834
|
+
"unhashed_id",
|
|
15835
|
+
"non_finite"
|
|
15797
15836
|
];
|
|
15837
|
+
SIDE_EFFECT_SCALAR_KEY_PATTERN = /^[a-z][A-Za-z0-9]*(Ms|Amount|Bytes|Ratio|Id|Value|Flag)$/;
|
|
15838
|
+
SIDE_EFFECT_SCALAR_PREFIX = "glasstrace.side_effect.scalar.";
|
|
15839
|
+
MAX_SIDE_EFFECT_SCALARS_PER_OPERATION = 16;
|
|
15840
|
+
SIDE_EFFECT_HASHED_ID_PREFIX = "gthid_";
|
|
15841
|
+
SIDE_EFFECT_HASHED_ID_HEX_LENGTH = 32;
|
|
15798
15842
|
SIDE_EFFECT_OPERATION_STATUSES = [
|
|
15799
15843
|
"scheduled",
|
|
15800
15844
|
"started",
|
|
@@ -17886,7 +17930,9 @@ __export(src_exports, {
|
|
|
17886
17930
|
getOrCreateAnonKey: () => getOrCreateAnonKey,
|
|
17887
17931
|
getOrigin: () => getOrigin,
|
|
17888
17932
|
getStatus: () => getStatus,
|
|
17933
|
+
invariant: () => invariant,
|
|
17889
17934
|
isAnonymousMode: () => isAnonymousMode,
|
|
17935
|
+
isNullInvariant: () => isNullInvariant,
|
|
17890
17936
|
isProductionDisabled: () => isProductionDisabled,
|
|
17891
17937
|
isReady: () => isReady,
|
|
17892
17938
|
isSideEffectSemanticFieldKey: () => isSideEffectSemanticFieldKey,
|
|
@@ -24090,6 +24136,9 @@ function registerHeartbeatShutdownHook(config2, anonKey, sdkVersion) {
|
|
|
24090
24136
|
});
|
|
24091
24137
|
}
|
|
24092
24138
|
|
|
24139
|
+
// src/side-effect/index.ts
|
|
24140
|
+
init_dist();
|
|
24141
|
+
|
|
24093
24142
|
// src/side-effect/allowlist.ts
|
|
24094
24143
|
init_dist();
|
|
24095
24144
|
var MAX_SIDE_EFFECT_OPERATION_LABEL_LENGTH = 96;
|
|
@@ -24112,6 +24161,7 @@ var TOKEN_REGEX = /^[A-Za-z0-9][A-Za-z0-9_.:-]*$/;
|
|
|
24112
24161
|
var LOCALE_REGEX = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8}){0,3}$/;
|
|
24113
24162
|
var TIMEZONE_REGEX = /^(?:UTC|GMT|[A-Za-z][A-Za-z0-9_+-]*(?:\/[A-Za-z0-9_+-]+){1,3})$/;
|
|
24114
24163
|
var DIGIT_REGEX = /^[0-9]+$/;
|
|
24164
|
+
var BOOL_REGEX = /^(?:true|false)$/;
|
|
24115
24165
|
var URL_SCHEME = /:\/\//;
|
|
24116
24166
|
var URL_SCHEME_RELATIVE = /^\/\//;
|
|
24117
24167
|
var EMAIL_LIKE = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i;
|
|
@@ -24146,6 +24196,9 @@ function passesFieldValidator(key, value) {
|
|
|
24146
24196
|
if (typeof key === "string" && key.endsWith("Count")) {
|
|
24147
24197
|
return DIGIT_REGEX.test(value);
|
|
24148
24198
|
}
|
|
24199
|
+
if (typeof key === "string" && key.endsWith("Holds")) {
|
|
24200
|
+
return BOOL_REGEX.test(value);
|
|
24201
|
+
}
|
|
24149
24202
|
return TOKEN_REGEX.test(value);
|
|
24150
24203
|
}
|
|
24151
24204
|
function checkOperationLabel(value) {
|
|
@@ -24181,6 +24234,59 @@ function checkSemanticFieldValue(key, value) {
|
|
|
24181
24234
|
}
|
|
24182
24235
|
return { accepted: true, value };
|
|
24183
24236
|
}
|
|
24237
|
+
var GTHID_STRICT_REGEX = new RegExp(
|
|
24238
|
+
`^${SIDE_EFFECT_HASHED_ID_PREFIX}[0-9a-f]{${SIDE_EFFECT_HASHED_ID_HEX_LENGTH}}$`
|
|
24239
|
+
);
|
|
24240
|
+
var SCALAR_EPOCH_MS_MIN = 1e12;
|
|
24241
|
+
function isTimestampShapedScalarKey(key) {
|
|
24242
|
+
return key.endsWith("Ms");
|
|
24243
|
+
}
|
|
24244
|
+
function checkScalarField(key, value, mode = "strict") {
|
|
24245
|
+
if (typeof key !== "string" || !isSideEffectScalarKey(key)) {
|
|
24246
|
+
return { accepted: false, reason: "unsupported_key" };
|
|
24247
|
+
}
|
|
24248
|
+
if (value instanceof Date) {
|
|
24249
|
+
return { accepted: false, reason: "raw_timestamp" };
|
|
24250
|
+
}
|
|
24251
|
+
if (key.endsWith("Id")) {
|
|
24252
|
+
if (typeof value !== "string") {
|
|
24253
|
+
return { accepted: false, reason: "unhashed_id" };
|
|
24254
|
+
}
|
|
24255
|
+
if (mode === "strict") {
|
|
24256
|
+
if (!GTHID_STRICT_REGEX.test(value)) {
|
|
24257
|
+
return { accepted: false, reason: "unhashed_id" };
|
|
24258
|
+
}
|
|
24259
|
+
return { accepted: true, value };
|
|
24260
|
+
}
|
|
24261
|
+
if (value.length === 0) {
|
|
24262
|
+
return { accepted: false, reason: "raw_payload" };
|
|
24263
|
+
}
|
|
24264
|
+
const unsafe = detectUnsafePattern(value);
|
|
24265
|
+
if (unsafe) {
|
|
24266
|
+
return { accepted: false, reason: unsafe };
|
|
24267
|
+
}
|
|
24268
|
+
if (value.length > MAX_SIDE_EFFECT_FIELD_VALUE_LENGTH) {
|
|
24269
|
+
return { accepted: false, reason: "value_too_long" };
|
|
24270
|
+
}
|
|
24271
|
+
return { accepted: true, value };
|
|
24272
|
+
}
|
|
24273
|
+
if (key.endsWith("Flag")) {
|
|
24274
|
+
if (typeof value !== "boolean") {
|
|
24275
|
+
return { accepted: false, reason: "raw_payload" };
|
|
24276
|
+
}
|
|
24277
|
+
return { accepted: true, value };
|
|
24278
|
+
}
|
|
24279
|
+
if (typeof value !== "number") {
|
|
24280
|
+
return { accepted: false, reason: "raw_payload" };
|
|
24281
|
+
}
|
|
24282
|
+
if (!Number.isFinite(value)) {
|
|
24283
|
+
return { accepted: false, reason: "non_finite" };
|
|
24284
|
+
}
|
|
24285
|
+
if (mode === "strict" && isTimestampShapedScalarKey(key) && value >= SCALAR_EPOCH_MS_MIN) {
|
|
24286
|
+
return { accepted: false, reason: "raw_timestamp" };
|
|
24287
|
+
}
|
|
24288
|
+
return { accepted: true, value };
|
|
24289
|
+
}
|
|
24184
24290
|
function checkSemanticFieldKey(key) {
|
|
24185
24291
|
return typeof key === "string" && isSideEffectSemanticFieldKey(key);
|
|
24186
24292
|
}
|
|
@@ -24246,7 +24352,10 @@ var OMISSION_ATTRIBUTE_BY_REASON = {
|
|
|
24246
24352
|
unsupported_key: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_UNSUPPORTED_KEY,
|
|
24247
24353
|
value_too_long: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_VALUE_TOO_LONG,
|
|
24248
24354
|
not_emitted: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_NOT_EMITTED,
|
|
24249
|
-
capture_disabled: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_CAPTURE_DISABLED
|
|
24355
|
+
capture_disabled: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_CAPTURE_DISABLED,
|
|
24356
|
+
raw_timestamp: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_RAW_TIMESTAMP,
|
|
24357
|
+
unhashed_id: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_UNHASHED_ID,
|
|
24358
|
+
non_finite: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_NON_FINITE
|
|
24250
24359
|
};
|
|
24251
24360
|
var FIELD_ATTRIBUTE_BY_KEY = {
|
|
24252
24361
|
templateKey: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_FIELD_TEMPLATE_KEY,
|
|
@@ -24305,6 +24414,12 @@ function attachField(span, key, value) {
|
|
|
24305
24414
|
} catch {
|
|
24306
24415
|
}
|
|
24307
24416
|
}
|
|
24417
|
+
function attachScalar(span, key, value) {
|
|
24418
|
+
try {
|
|
24419
|
+
span.setAttribute(`${SIDE_EFFECT_SCALAR_PREFIX}${key}`, value);
|
|
24420
|
+
} catch {
|
|
24421
|
+
}
|
|
24422
|
+
}
|
|
24308
24423
|
function recordOmission(span, reason) {
|
|
24309
24424
|
recordOmissionOnSpan(span, reason);
|
|
24310
24425
|
}
|
|
@@ -24415,6 +24530,7 @@ function runRecordSideEffect(input) {
|
|
|
24415
24530
|
recordOmission(outcome.span, "value_too_long");
|
|
24416
24531
|
return;
|
|
24417
24532
|
}
|
|
24533
|
+
const attachedFieldKeys = /* @__PURE__ */ new Set();
|
|
24418
24534
|
const fields = candidate.fields;
|
|
24419
24535
|
if (fields && typeof fields === "object") {
|
|
24420
24536
|
for (const [rawKey, rawValue] of Object.entries(fields)) {
|
|
@@ -24433,6 +24549,56 @@ function runRecordSideEffect(input) {
|
|
|
24433
24549
|
} catch {
|
|
24434
24550
|
}
|
|
24435
24551
|
attachField(outcome.span, rawKey, valueOutcome.value);
|
|
24552
|
+
attachedFieldKeys.add(rawKey);
|
|
24553
|
+
}
|
|
24554
|
+
}
|
|
24555
|
+
const relations = candidate.relations;
|
|
24556
|
+
if (relations && typeof relations === "object") {
|
|
24557
|
+
for (const [rawKey, rawValue] of Object.entries(relations)) {
|
|
24558
|
+
if (attachedFieldKeys.has(rawKey)) {
|
|
24559
|
+
recordOmission(outcome.span, "unsupported_key");
|
|
24560
|
+
continue;
|
|
24561
|
+
}
|
|
24562
|
+
if (!rawKey.endsWith("Holds") || !checkSemanticFieldKey(rawKey)) {
|
|
24563
|
+
recordOmission(outcome.span, "unsupported_key");
|
|
24564
|
+
continue;
|
|
24565
|
+
}
|
|
24566
|
+
if (typeof rawValue !== "boolean") {
|
|
24567
|
+
recordOmission(outcome.span, "raw_payload");
|
|
24568
|
+
continue;
|
|
24569
|
+
}
|
|
24570
|
+
const valueOutcome = checkSemanticFieldValue(
|
|
24571
|
+
rawKey,
|
|
24572
|
+
rawValue ? "true" : "false"
|
|
24573
|
+
);
|
|
24574
|
+
if (!valueOutcome.accepted) {
|
|
24575
|
+
recordOmission(outcome.span, valueOutcome.reason);
|
|
24576
|
+
continue;
|
|
24577
|
+
}
|
|
24578
|
+
try {
|
|
24579
|
+
maybeWarnMixedCasing(rawKey, valueOutcome.value);
|
|
24580
|
+
maybeWarnPatternKeyProliferation(rawKey);
|
|
24581
|
+
} catch {
|
|
24582
|
+
}
|
|
24583
|
+
attachField(outcome.span, rawKey, valueOutcome.value);
|
|
24584
|
+
attachedFieldKeys.add(rawKey);
|
|
24585
|
+
}
|
|
24586
|
+
}
|
|
24587
|
+
const scalars = candidate.scalars;
|
|
24588
|
+
if (scalars && typeof scalars === "object") {
|
|
24589
|
+
let scalarCount = 0;
|
|
24590
|
+
for (const [rawKey, rawValue] of Object.entries(scalars)) {
|
|
24591
|
+
if (scalarCount >= MAX_SIDE_EFFECT_SCALARS_PER_OPERATION) {
|
|
24592
|
+
recordOmission(outcome.span, "value_too_long");
|
|
24593
|
+
break;
|
|
24594
|
+
}
|
|
24595
|
+
scalarCount += 1;
|
|
24596
|
+
const scalarOutcome = checkScalarField(rawKey, rawValue);
|
|
24597
|
+
if (!scalarOutcome.accepted) {
|
|
24598
|
+
recordOmission(outcome.span, scalarOutcome.reason);
|
|
24599
|
+
continue;
|
|
24600
|
+
}
|
|
24601
|
+
attachScalar(outcome.span, rawKey, scalarOutcome.value);
|
|
24436
24602
|
}
|
|
24437
24603
|
}
|
|
24438
24604
|
}
|
|
@@ -24737,11 +24903,11 @@ function registerGlasstrace(options) {
|
|
|
24737
24903
|
setCoreState(CoreState.REGISTERING);
|
|
24738
24904
|
maybeWarnStaleAgentInstructions({
|
|
24739
24905
|
projectRoot: process.cwd(),
|
|
24740
|
-
sdkVersion: "1.
|
|
24906
|
+
sdkVersion: "1.17.0"
|
|
24741
24907
|
});
|
|
24742
24908
|
startRuntimeStateWriter({
|
|
24743
24909
|
projectRoot: process.cwd(),
|
|
24744
|
-
sdkVersion: "1.
|
|
24910
|
+
sdkVersion: "1.17.0"
|
|
24745
24911
|
});
|
|
24746
24912
|
const config2 = resolveConfig(options);
|
|
24747
24913
|
setSideEffectVerboseFlag(config2.verbose);
|
|
@@ -24909,8 +25075,8 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
|
|
|
24909
25075
|
if (config2.verbose) {
|
|
24910
25076
|
console.info("[glasstrace] Background init firing.");
|
|
24911
25077
|
}
|
|
24912
|
-
const healthReport = collectHealthReport("1.
|
|
24913
|
-
const initResult = await performInit(config2, anonKeyForInit, "1.
|
|
25078
|
+
const healthReport = collectHealthReport("1.17.0");
|
|
25079
|
+
const initResult = await performInit(config2, anonKeyForInit, "1.17.0", healthReport);
|
|
24914
25080
|
if (generation !== registrationGeneration) return;
|
|
24915
25081
|
const currentState = getCoreState();
|
|
24916
25082
|
if (currentState === CoreState.SHUTTING_DOWN || currentState === CoreState.SHUTDOWN) {
|
|
@@ -24933,7 +25099,7 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
|
|
|
24933
25099
|
}
|
|
24934
25100
|
maybeInstallConsoleCapture();
|
|
24935
25101
|
if (didLastInitSucceed()) {
|
|
24936
|
-
startHeartbeat(config2, anonKeyForInit, "1.
|
|
25102
|
+
startHeartbeat(config2, anonKeyForInit, "1.17.0", generation, (newApiKey, accountId) => {
|
|
24937
25103
|
setAuthState(AuthState.CLAIMING);
|
|
24938
25104
|
emitLifecycleEvent("auth:claim_started", { accountId });
|
|
24939
25105
|
setResolvedApiKey(newApiKey);
|
|
@@ -25226,6 +25392,29 @@ function firstToken(value) {
|
|
|
25226
25392
|
return void 0;
|
|
25227
25393
|
}
|
|
25228
25394
|
|
|
25395
|
+
// src/side-effect/invariant.ts
|
|
25396
|
+
function invariant(left, op, right) {
|
|
25397
|
+
switch (op) {
|
|
25398
|
+
case "eq":
|
|
25399
|
+
return left === right;
|
|
25400
|
+
case "neq":
|
|
25401
|
+
return left !== right;
|
|
25402
|
+
case "lt":
|
|
25403
|
+
return left < right;
|
|
25404
|
+
case "lte":
|
|
25405
|
+
return left <= right;
|
|
25406
|
+
case "gt":
|
|
25407
|
+
return left > right;
|
|
25408
|
+
case "gte":
|
|
25409
|
+
return left >= right;
|
|
25410
|
+
}
|
|
25411
|
+
op;
|
|
25412
|
+
return false;
|
|
25413
|
+
}
|
|
25414
|
+
function isNullInvariant(value) {
|
|
25415
|
+
return value === null || value === void 0;
|
|
25416
|
+
}
|
|
25417
|
+
|
|
25229
25418
|
// src/index.ts
|
|
25230
25419
|
init_dist();
|
|
25231
25420
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -25246,7 +25435,9 @@ init_dist();
|
|
|
25246
25435
|
getOrCreateAnonKey,
|
|
25247
25436
|
getOrigin,
|
|
25248
25437
|
getStatus,
|
|
25438
|
+
invariant,
|
|
25249
25439
|
isAnonymousMode,
|
|
25440
|
+
isNullInvariant,
|
|
25250
25441
|
isProductionDisabled,
|
|
25251
25442
|
isReady,
|
|
25252
25443
|
isSideEffectSemanticFieldKey,
|