agentfootprint 6.17.0 → 6.19.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.
@@ -10,7 +10,13 @@
10
10
  * stream.llm_start ↦ push leaf subsegment (model call)
11
11
  * stream.llm_end ↦ close llm subsegment
12
12
  * stream.tool_start ↦ push leaf subsegment (tool call)
13
- * stream.tool_end ↦ close tool subsegment
13
+ * stream.tool_end ↦ close tool subsegment (correlated
14
+ * by toolCallId — parallel-safe)
15
+ * error.fatal ↦ fault on root + close the whole
16
+ * tree (turn_end never arrives)
17
+ *
18
+ * Events are anchored on `meta.runId` (the dispatcher envelope),
19
+ * with a `payload.runId` fallback for hand-built events.
14
20
  *
15
21
  * The result in the X-Ray Trace Map: a hierarchical timeline of every
16
22
  * agent run — turn → iteration → llm-call/tool-call — queryable in
@@ -64,8 +70,8 @@ export function xrayObservability(opts) {
64
70
  const maxBatchSegments = opts.maxBatchSegments ?? 25;
65
71
  const flushIntervalMs = opts.flushIntervalMs ?? 1000;
66
72
  // Per-turn state. agentfootprint events arrive interleaved across
67
- // multiple in-flight turns; we key the active stack by `runId`
68
- // (every event payload carries it after enrichment).
73
+ // multiple in-flight turns; we key the active stack by the run
74
+ // anchor (`meta.runId` see anchorRunId).
69
75
  const activeTurns = new Map();
70
76
  // Outbound segment buffer (flat list of closed segments ready for
71
77
  // PutTraceSegments). Drained by flush() / size-trigger / time-trigger.
@@ -145,8 +151,21 @@ export function xrayObservability(opts) {
145
151
  const seg = popSegment(turnState, expectedName);
146
152
  if (!seg)
147
153
  return;
154
+ finishSegment(turnState, seg, extra);
155
+ }
156
+ /** Seal an already-popped segment and graduate the turn to the
157
+ * outbox once its stack is empty. */
158
+ function finishSegment(turnState, seg, extra) {
159
+ // Idempotent seal — popSegment stamps end_time; segments removed
160
+ // from the stack by identity (toolCallId correlation) arrive raw.
161
+ if (seg.end_time === undefined) {
162
+ seg.end_time = nowSeconds();
163
+ delete seg.in_progress;
164
+ }
148
165
  if (extra?.error)
149
166
  seg.error = true;
167
+ if (extra?.fault)
168
+ seg.fault = true;
150
169
  if (extra?.annotations)
151
170
  seg.annotations = { ...seg.annotations, ...extra.annotations };
152
171
  if (extra?.metadata)
@@ -166,10 +185,24 @@ export function xrayObservability(opts) {
166
185
  }
167
186
  }
168
187
  // ─── Event-to-segment dispatch ─────────────────────────────────────
188
+ /**
189
+ * Resolve the run anchor for an event.
190
+ *
191
+ * Real runtime events are dispatcher envelopes — the run id lives on
192
+ * `event.meta.runId` (built by `bridge/eventMeta.ts`). The legacy
193
+ * `payload.runId` read is kept as a fallback for consumers feeding
194
+ * hand-built events (the pre-fix shape this adapter's own tests
195
+ * used). Without the meta read, NO segment ever opened on a real
196
+ * agent run — the bug the fabricated test shapes masked.
197
+ */
198
+ function anchorRunId(event) {
199
+ const meta = event.meta;
200
+ return meta?.runId ?? event.payload?.runId;
201
+ }
169
202
  function handleEvent(event) {
170
203
  if (stopped)
171
204
  return;
172
- const runId = event.payload?.runId;
205
+ const runId = anchorRunId(event);
173
206
  if (!runId)
174
207
  return; // Events without a turn anchor — skip.
175
208
  switch (event.type) {
@@ -180,6 +213,7 @@ export function xrayObservability(opts) {
180
213
  stack: [],
181
214
  closed: [],
182
215
  sampled,
216
+ toolSegments: new Map(),
183
217
  };
184
218
  activeTurns.set(runId, turnState);
185
219
  if (sampled)
@@ -199,8 +233,13 @@ export function xrayObservability(opts) {
199
233
  }
200
234
  case 'agentfootprint.agent.iteration_start': {
201
235
  const t = activeTurns.get(runId);
202
- if (t?.sampled)
203
- pushSegment(t, `iteration:${event.payload.iteration ?? '?'}`);
236
+ if (t?.sampled) {
237
+ // Runtime shape: `iterIndex` (AgentIterationStartPayload).
238
+ // Legacy fallback `iteration` keeps hand-fed events working.
239
+ const iteration = event.payload.iterIndex ??
240
+ event.payload.iteration;
241
+ pushSegment(t, `iteration:${iteration ?? '?'}`);
242
+ }
204
243
  break;
205
244
  }
206
245
  case 'agentfootprint.agent.iteration_end': {
@@ -232,19 +271,61 @@ export function xrayObservability(opts) {
232
271
  const t = activeTurns.get(runId);
233
272
  if (!t?.sampled)
234
273
  break;
235
- const toolName = event.payload.toolName ?? 'tool';
274
+ const p = event.payload;
275
+ const toolName = p.toolName ?? 'tool';
236
276
  const seg = pushSegment(t, `tool:${toolName}`);
237
277
  seg.annotations = { toolName };
278
+ if (p.toolCallId !== undefined)
279
+ t.toolSegments.set(p.toolCallId, seg);
238
280
  break;
239
281
  }
240
282
  case 'agentfootprint.stream.tool_end': {
241
283
  const t = activeTurns.get(runId);
242
284
  if (!t?.sampled)
243
285
  break;
244
- const toolName = event.payload.toolName;
245
- closeSegment(t, toolName ? `tool:${toolName}` : undefined, {
246
- error: event.payload.error !== undefined,
286
+ const p = event.payload;
287
+ const errored = p.error !== undefined && p.error !== false;
288
+ // Correlate by toolCallId — the only identity ToolEndPayload
289
+ // carries at runtime (it has NO toolName), and parallel tool
290
+ // calls end out of LIFO order. Fallback chain keeps legacy
291
+ // hand-fed events (toolName) working.
292
+ const byId = p.toolCallId === undefined ? undefined : t.toolSegments.get(p.toolCallId);
293
+ if (byId !== undefined && p.toolCallId !== undefined) {
294
+ t.toolSegments.delete(p.toolCallId);
295
+ // Remove from the stack by identity so the LIFO unwind stays clean.
296
+ const idx = t.stack.indexOf(byId);
297
+ if (idx >= 0)
298
+ t.stack.splice(idx, 1);
299
+ finishSegment(t, byId, { error: errored });
300
+ }
301
+ else {
302
+ closeSegment(t, p.toolName !== undefined ? `tool:${p.toolName}` : undefined, {
303
+ error: errored,
304
+ });
305
+ }
306
+ break;
307
+ }
308
+ // A fatal run error: the turn will never see turn_end, so close
309
+ // the segment tree here (fault on the root — X-Ray's marker for
310
+ // unhandled exceptions) instead of leaking it in activeTurns,
311
+ // where the closed segments would never graduate to the outbox.
312
+ case 'agentfootprint.error.fatal': {
313
+ const t = activeTurns.get(runId);
314
+ if (!t)
315
+ break;
316
+ while (t.stack.length > 1)
317
+ closeSegment(t, undefined);
318
+ const p = event.payload;
319
+ // Stage + scope only — error MESSAGES can echo PII.
320
+ const annotations = {
321
+ ...(p.stage !== undefined && { errorStage: p.stage }),
322
+ ...(p.scope !== undefined && { errorScope: p.scope }),
323
+ };
324
+ closeSegment(t, undefined, {
325
+ fault: true,
326
+ ...(Object.keys(annotations).length > 0 && { annotations }),
247
327
  });
328
+ activeTurns.delete(runId);
248
329
  break;
249
330
  }
250
331
  // Other events become annotations on the topmost active segment
@@ -255,11 +336,14 @@ export function xrayObservability(opts) {
255
336
  if (!t?.sampled || !top)
256
337
  break;
257
338
  // Annotate cost ticks specially so they're queryable in
258
- // X-Ray Insights.
339
+ // X-Ray Insights. Runtime shape: `cumulative.estimatedUsd`
340
+ // (CostTickPayload); legacy fallback `cumulativeCostUsd`
341
+ // keeps hand-fed events working.
259
342
  if (event.type === 'agentfootprint.cost.tick') {
260
343
  const p = event.payload;
261
- if (typeof p.cumulativeCostUsd === 'number') {
262
- top.annotations = { ...top.annotations, cumulativeCostUsd: p.cumulativeCostUsd };
344
+ const usd = p.cumulative?.estimatedUsd ?? p.cumulativeCostUsd;
345
+ if (typeof usd === 'number') {
346
+ top.annotations = { ...top.annotations, cumulativeCostUsd: usd };
263
347
  }
264
348
  }
265
349
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"xray.js","sourceRoot":"","sources":["../../../../src/adapters/observability/xray.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xray.js","sourceRoot":"","sources":["../../../../src/adapters/observability/xray.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * canonicalJson — deterministic JSON serialization (`afp-cjson/1`).
3
+ *
4
+ * Pattern: Canonicalization function (RFC 8785 JCS-inspired, JS-native).
5
+ * Role: The byte contract under the tamper-evident audit chain
6
+ * (backlog #20). `AuditRecord.hash` = SHA-256 over the
7
+ * canonical serialization of the record — two parties that
8
+ * serialize the same VALUE must produce the same BYTES, or
9
+ * verification breaks. These rules ARE the contract; bump the
10
+ * identifier (`afp-cjson/2`) for ANY behavioral change.
11
+ *
12
+ * ## Canonicalization rules (`afp-cjson/1`)
13
+ *
14
+ * 1. **Objects** — own enumerable string-keyed properties only, keys
15
+ * sorted lexicographically by UTF-16 code unit (JavaScript's
16
+ * default `Array.prototype.sort()` comparison), serialized
17
+ * `{"k":v,...}` with no whitespace. Symbol keys are ignored.
18
+ * 2. **Arrays** — element order preserved, `[v,...]` no whitespace.
19
+ * 3. **Strings** — `JSON.stringify` escaping (deterministic per the
20
+ * ECMAScript spec: minimal escapes, lowercase `\uXXXX` hex).
21
+ * 4. **Numbers** — finite numbers via `JSON.stringify` (ECMAScript
22
+ * shortest round-trip formatting). `NaN` / `±Infinity` → `null`
23
+ * (JSON.stringify parity). `-0` serializes as `0`.
24
+ * 5. **`null`** → `null`. **`undefined`** — omitted as an object
25
+ * property, `null` as an array element or top-level value
26
+ * (JSON.stringify parity).
27
+ * 6. **Functions / symbols** — omitted as object properties, `null`
28
+ * in arrays (JSON.stringify parity).
29
+ * 7. **`toJSON`** — honored before serialization (so `Date` →
30
+ * ISO-8601 string, exactly like `JSON.stringify`).
31
+ * 8. **`bigint`** → `TypeError` (JSON.stringify parity). Sanitize
32
+ * upstream (the audit bounding layer converts bigint to string).
33
+ * 9. **Cycles** → `TypeError`. Canonicalization is defined over
34
+ * JSON-safe trees; the audit bounding layer breaks cycles first.
35
+ *
36
+ * The domain is "anything `JSON.parse` can produce" (the audit bundle
37
+ * is JSON); for other inputs the behavior mirrors `JSON.stringify`
38
+ * except that object keys are SORTED. Verification re-canonicalizes
39
+ * records that came through `JSON.parse(JSON.stringify(bundle))`, so
40
+ * round-tripping a bundle never changes its hashes.
41
+ *
42
+ * Browser-safe: no Node imports — pure computation.
43
+ */
44
+ /** Identifier of the canonicalization rules implemented by
45
+ * {@link canonicalJson}. Carried on `AuditBundleHeader.canonicalization`
46
+ * so offline verifiers can reject bundles produced under different
47
+ * rules instead of mis-verifying them. */
48
+ export const CANONICAL_JSON_VERSION = 'afp-cjson/1';
49
+ /**
50
+ * Serialize `value` to canonical JSON (see module docs for the exact
51
+ * `afp-cjson/1` rules). Deterministic: equal values (after key
52
+ * reordering) always produce identical strings.
53
+ *
54
+ * @throws TypeError on circular references or bigint values.
55
+ */
56
+ export function canonicalJson(value) {
57
+ const out = serialize(value, new Set());
58
+ // JSON.stringify parity: a top-level undefined/function/symbol would
59
+ // yield `undefined` from JSON.stringify; for a hashing contract an
60
+ // absent serialization is a footgun, so we pin it to `null`.
61
+ return out ?? 'null';
62
+ }
63
+ /**
64
+ * Recursive serializer. Returns `undefined` for values that JSON omits
65
+ * (undefined / function / symbol) — the CALLER decides whether that
66
+ * means "omit the property" (objects) or "null" (arrays / top level).
67
+ */
68
+ function serialize(value, seen) {
69
+ if (value === null)
70
+ return 'null';
71
+ switch (typeof value) {
72
+ case 'string':
73
+ return JSON.stringify(value);
74
+ case 'number':
75
+ // JSON.stringify(NaN | ±Infinity) === 'null'; finite numbers use
76
+ // the ECMAScript shortest round-trip representation.
77
+ return Number.isFinite(value) ? JSON.stringify(value) : 'null';
78
+ case 'boolean':
79
+ return value ? 'true' : 'false';
80
+ case 'bigint':
81
+ throw new TypeError('canonicalJson: bigint is not JSON-serializable (JSON.stringify parity). ' +
82
+ 'Convert to string/number before canonicalizing.');
83
+ case 'undefined':
84
+ case 'function':
85
+ case 'symbol':
86
+ return undefined;
87
+ default:
88
+ break; // object — handled below
89
+ }
90
+ const obj = value;
91
+ // Honor toJSON (Date → ISO string) BEFORE cycle bookkeeping, exactly
92
+ // like JSON.stringify.
93
+ const toJSON = obj.toJSON;
94
+ if (typeof toJSON === 'function') {
95
+ return serialize(toJSON.call(obj), seen);
96
+ }
97
+ if (seen.has(obj)) {
98
+ throw new TypeError('canonicalJson: circular reference — canonicalization requires a tree.');
99
+ }
100
+ seen.add(obj);
101
+ try {
102
+ if (Array.isArray(obj)) {
103
+ const parts = new Array(obj.length);
104
+ for (let i = 0; i < obj.length; i++) {
105
+ parts[i] = serialize(obj[i], seen) ?? 'null';
106
+ }
107
+ return `[${parts.join(',')}]`;
108
+ }
109
+ // Plain object: own enumerable string keys, sorted by UTF-16 code
110
+ // unit (default sort). Properties serializing to undefined are
111
+ // omitted (JSON.stringify parity).
112
+ const keys = Object.keys(obj).sort();
113
+ const parts = [];
114
+ for (const key of keys) {
115
+ const serialized = serialize(obj[key], seen);
116
+ if (serialized !== undefined)
117
+ parts.push(`${JSON.stringify(key)}:${serialized}`);
118
+ }
119
+ return `{${parts.join(',')}}`;
120
+ }
121
+ finally {
122
+ seen.delete(obj);
123
+ }
124
+ }
125
+ //# sourceMappingURL=canonicalJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonicalJson.js","sourceRoot":"","sources":["../../../src/lib/canonicalJson.ts"],"names":[],"mappings":"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"}
@@ -42,4 +42,9 @@ export { agentcoreObservability, } from './adapters/observability/agentcore.js';
42
42
  export { cloudwatchObservability, } from './adapters/observability/cloudwatch.js';
43
43
  export { xrayObservability, } from './adapters/observability/xray.js';
44
44
  export { otelObservability, } from './adapters/observability/otel.js';
45
+ // Tamper-evident audit export (#20) — the one vendor-free strategy in
46
+ // this subpath (its only runtime requirement is `node:crypto`, lazily
47
+ // imported the same way the vendor SDKs are).
48
+ export { auditExport, verifyAuditBundle, AUDIT_BUNDLE_FORMAT, AUDIT_GENESIS_EVENT_TYPE, AUDIT_ZERO_HASH, } from './adapters/observability/audit.js';
49
+ export { canonicalJson, CANONICAL_JSON_VERSION } from './lib/canonicalJson.js';
45
50
  //# sourceMappingURL=observability-providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observability-providers.js","sourceRoot":"","sources":["../../src/observability-providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EACL,sBAAsB,GAEvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,uBAAuB,GAExB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,iBAAiB,GAGlB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,iBAAiB,GAQlB,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"observability-providers.js","sourceRoot":"","sources":["../../src/observability-providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EACL,sBAAsB,GAEvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,uBAAuB,GAExB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,iBAAiB,GAGlB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,iBAAiB,GAQlB,MAAM,kCAAkC,CAAC;AAC1C,sEAAsE;AACtE,sEAAsE;AACtE,8CAA8C;AAC9C,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,GAOhB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * canonicalJson — deterministic JSON serialization (`afp-cjson/1`).
4
+ *
5
+ * Pattern: Canonicalization function (RFC 8785 JCS-inspired, JS-native).
6
+ * Role: The byte contract under the tamper-evident audit chain
7
+ * (backlog #20). `AuditRecord.hash` = SHA-256 over the
8
+ * canonical serialization of the record — two parties that
9
+ * serialize the same VALUE must produce the same BYTES, or
10
+ * verification breaks. These rules ARE the contract; bump the
11
+ * identifier (`afp-cjson/2`) for ANY behavioral change.
12
+ *
13
+ * ## Canonicalization rules (`afp-cjson/1`)
14
+ *
15
+ * 1. **Objects** — own enumerable string-keyed properties only, keys
16
+ * sorted lexicographically by UTF-16 code unit (JavaScript's
17
+ * default `Array.prototype.sort()` comparison), serialized
18
+ * `{"k":v,...}` with no whitespace. Symbol keys are ignored.
19
+ * 2. **Arrays** — element order preserved, `[v,...]` no whitespace.
20
+ * 3. **Strings** — `JSON.stringify` escaping (deterministic per the
21
+ * ECMAScript spec: minimal escapes, lowercase `\uXXXX` hex).
22
+ * 4. **Numbers** — finite numbers via `JSON.stringify` (ECMAScript
23
+ * shortest round-trip formatting). `NaN` / `±Infinity` → `null`
24
+ * (JSON.stringify parity). `-0` serializes as `0`.
25
+ * 5. **`null`** → `null`. **`undefined`** — omitted as an object
26
+ * property, `null` as an array element or top-level value
27
+ * (JSON.stringify parity).
28
+ * 6. **Functions / symbols** — omitted as object properties, `null`
29
+ * in arrays (JSON.stringify parity).
30
+ * 7. **`toJSON`** — honored before serialization (so `Date` →
31
+ * ISO-8601 string, exactly like `JSON.stringify`).
32
+ * 8. **`bigint`** → `TypeError` (JSON.stringify parity). Sanitize
33
+ * upstream (the audit bounding layer converts bigint to string).
34
+ * 9. **Cycles** → `TypeError`. Canonicalization is defined over
35
+ * JSON-safe trees; the audit bounding layer breaks cycles first.
36
+ *
37
+ * The domain is "anything `JSON.parse` can produce" (the audit bundle
38
+ * is JSON); for other inputs the behavior mirrors `JSON.stringify`
39
+ * except that object keys are SORTED. Verification re-canonicalizes
40
+ * records that came through `JSON.parse(JSON.stringify(bundle))`, so
41
+ * round-tripping a bundle never changes its hashes.
42
+ *
43
+ * Browser-safe: no Node imports — pure computation.
44
+ */
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.canonicalJson = exports.CANONICAL_JSON_VERSION = void 0;
47
+ /** Identifier of the canonicalization rules implemented by
48
+ * {@link canonicalJson}. Carried on `AuditBundleHeader.canonicalization`
49
+ * so offline verifiers can reject bundles produced under different
50
+ * rules instead of mis-verifying them. */
51
+ exports.CANONICAL_JSON_VERSION = 'afp-cjson/1';
52
+ /**
53
+ * Serialize `value` to canonical JSON (see module docs for the exact
54
+ * `afp-cjson/1` rules). Deterministic: equal values (after key
55
+ * reordering) always produce identical strings.
56
+ *
57
+ * @throws TypeError on circular references or bigint values.
58
+ */
59
+ function canonicalJson(value) {
60
+ const out = serialize(value, new Set());
61
+ // JSON.stringify parity: a top-level undefined/function/symbol would
62
+ // yield `undefined` from JSON.stringify; for a hashing contract an
63
+ // absent serialization is a footgun, so we pin it to `null`.
64
+ return out ?? 'null';
65
+ }
66
+ exports.canonicalJson = canonicalJson;
67
+ /**
68
+ * Recursive serializer. Returns `undefined` for values that JSON omits
69
+ * (undefined / function / symbol) — the CALLER decides whether that
70
+ * means "omit the property" (objects) or "null" (arrays / top level).
71
+ */
72
+ function serialize(value, seen) {
73
+ if (value === null)
74
+ return 'null';
75
+ switch (typeof value) {
76
+ case 'string':
77
+ return JSON.stringify(value);
78
+ case 'number':
79
+ // JSON.stringify(NaN | ±Infinity) === 'null'; finite numbers use
80
+ // the ECMAScript shortest round-trip representation.
81
+ return Number.isFinite(value) ? JSON.stringify(value) : 'null';
82
+ case 'boolean':
83
+ return value ? 'true' : 'false';
84
+ case 'bigint':
85
+ throw new TypeError('canonicalJson: bigint is not JSON-serializable (JSON.stringify parity). ' +
86
+ 'Convert to string/number before canonicalizing.');
87
+ case 'undefined':
88
+ case 'function':
89
+ case 'symbol':
90
+ return undefined;
91
+ default:
92
+ break; // object — handled below
93
+ }
94
+ const obj = value;
95
+ // Honor toJSON (Date → ISO string) BEFORE cycle bookkeeping, exactly
96
+ // like JSON.stringify.
97
+ const toJSON = obj.toJSON;
98
+ if (typeof toJSON === 'function') {
99
+ return serialize(toJSON.call(obj), seen);
100
+ }
101
+ if (seen.has(obj)) {
102
+ throw new TypeError('canonicalJson: circular reference — canonicalization requires a tree.');
103
+ }
104
+ seen.add(obj);
105
+ try {
106
+ if (Array.isArray(obj)) {
107
+ const parts = new Array(obj.length);
108
+ for (let i = 0; i < obj.length; i++) {
109
+ parts[i] = serialize(obj[i], seen) ?? 'null';
110
+ }
111
+ return `[${parts.join(',')}]`;
112
+ }
113
+ // Plain object: own enumerable string keys, sorted by UTF-16 code
114
+ // unit (default sort). Properties serializing to undefined are
115
+ // omitted (JSON.stringify parity).
116
+ const keys = Object.keys(obj).sort();
117
+ const parts = [];
118
+ for (const key of keys) {
119
+ const serialized = serialize(obj[key], seen);
120
+ if (serialized !== undefined)
121
+ parts.push(`${JSON.stringify(key)}:${serialized}`);
122
+ }
123
+ return `{${parts.join(',')}}`;
124
+ }
125
+ finally {
126
+ seen.delete(obj);
127
+ }
128
+ }
129
+ //# sourceMappingURL=canonicalJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonicalJson.js","sourceRoot":"","sources":["../../src/lib/canonicalJson.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@
40
40
  * demands the native Datadog APM client.
41
41
  */
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.otelObservability = exports.xrayObservability = exports.cloudwatchObservability = exports.agentcoreObservability = void 0;
43
+ exports.CANONICAL_JSON_VERSION = exports.canonicalJson = exports.AUDIT_ZERO_HASH = exports.AUDIT_GENESIS_EVENT_TYPE = exports.AUDIT_BUNDLE_FORMAT = exports.verifyAuditBundle = exports.auditExport = exports.otelObservability = exports.xrayObservability = exports.cloudwatchObservability = exports.agentcoreObservability = void 0;
44
44
  var agentcore_js_1 = require("./adapters/observability/agentcore.js");
45
45
  Object.defineProperty(exports, "agentcoreObservability", { enumerable: true, get: function () { return agentcore_js_1.agentcoreObservability; } });
46
46
  var cloudwatch_js_1 = require("./adapters/observability/cloudwatch.js");
@@ -49,4 +49,16 @@ var xray_js_1 = require("./adapters/observability/xray.js");
49
49
  Object.defineProperty(exports, "xrayObservability", { enumerable: true, get: function () { return xray_js_1.xrayObservability; } });
50
50
  var otel_js_1 = require("./adapters/observability/otel.js");
51
51
  Object.defineProperty(exports, "otelObservability", { enumerable: true, get: function () { return otel_js_1.otelObservability; } });
52
+ // Tamper-evident audit export (#20) — the one vendor-free strategy in
53
+ // this subpath (its only runtime requirement is `node:crypto`, lazily
54
+ // imported the same way the vendor SDKs are).
55
+ var audit_js_1 = require("./adapters/observability/audit.js");
56
+ Object.defineProperty(exports, "auditExport", { enumerable: true, get: function () { return audit_js_1.auditExport; } });
57
+ Object.defineProperty(exports, "verifyAuditBundle", { enumerable: true, get: function () { return audit_js_1.verifyAuditBundle; } });
58
+ Object.defineProperty(exports, "AUDIT_BUNDLE_FORMAT", { enumerable: true, get: function () { return audit_js_1.AUDIT_BUNDLE_FORMAT; } });
59
+ Object.defineProperty(exports, "AUDIT_GENESIS_EVENT_TYPE", { enumerable: true, get: function () { return audit_js_1.AUDIT_GENESIS_EVENT_TYPE; } });
60
+ Object.defineProperty(exports, "AUDIT_ZERO_HASH", { enumerable: true, get: function () { return audit_js_1.AUDIT_ZERO_HASH; } });
61
+ var canonicalJson_js_1 = require("./lib/canonicalJson.js");
62
+ Object.defineProperty(exports, "canonicalJson", { enumerable: true, get: function () { return canonicalJson_js_1.canonicalJson; } });
63
+ Object.defineProperty(exports, "CANONICAL_JSON_VERSION", { enumerable: true, get: function () { return canonicalJson_js_1.CANONICAL_JSON_VERSION; } });
52
64
  //# sourceMappingURL=observability-providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observability-providers.js","sourceRoot":"","sources":["../src/observability-providers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;;;AAEH,sEAG+C;AAF7C,sHAAA,sBAAsB,OAAA;AAGxB,wEAGgD;AAF9C,wHAAA,uBAAuB,OAAA;AAGzB,4DAI0C;AAHxC,4GAAA,iBAAiB,OAAA;AAInB,4DAS0C;AARxC,4GAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"observability-providers.js","sourceRoot":"","sources":["../src/observability-providers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;;;AAEH,sEAG+C;AAF7C,sHAAA,sBAAsB,OAAA;AAGxB,wEAGgD;AAF9C,wHAAA,uBAAuB,OAAA;AAGzB,4DAI0C;AAHxC,4GAAA,iBAAiB,OAAA;AAInB,4DAS0C;AARxC,4GAAA,iBAAiB,OAAA;AASnB,sEAAsE;AACtE,sEAAsE;AACtE,8CAA8C;AAC9C,8DAY2C;AAXzC,uGAAA,WAAW,OAAA;AACX,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,oHAAA,wBAAwB,OAAA;AACxB,2GAAA,eAAe,OAAA;AAQjB,2DAA+E;AAAtE,iHAAA,aAAa,OAAA;AAAE,0HAAA,sBAAsB,OAAA"}