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.
- package/dist/adapters/observability/audit.js +559 -0
- package/dist/adapters/observability/audit.js.map +1 -0
- package/dist/adapters/observability/xray.js +97 -13
- package/dist/adapters/observability/xray.js.map +1 -1
- package/dist/esm/adapters/observability/audit.js +554 -0
- package/dist/esm/adapters/observability/audit.js.map +1 -0
- package/dist/esm/adapters/observability/xray.js +97 -13
- package/dist/esm/adapters/observability/xray.js.map +1 -1
- package/dist/esm/lib/canonicalJson.js +125 -0
- package/dist/esm/lib/canonicalJson.js.map +1 -0
- package/dist/esm/observability-providers.js +5 -0
- package/dist/esm/observability-providers.js.map +1 -1
- package/dist/lib/canonicalJson.js +129 -0
- package/dist/lib/canonicalJson.js.map +1 -0
- package/dist/observability-providers.js +13 -1
- package/dist/observability-providers.js.map +1 -1
- package/dist/types/adapters/observability/audit.d.ts +255 -0
- package/dist/types/adapters/observability/audit.d.ts.map +1 -0
- package/dist/types/adapters/observability/xray.d.ts +7 -1
- package/dist/types/adapters/observability/xray.d.ts.map +1 -1
- package/dist/types/lib/canonicalJson.d.ts +57 -0
- package/dist/types/lib/canonicalJson.d.ts.map +1 -0
- package/dist/types/observability-providers.d.ts +2 -0
- package/dist/types/observability-providers.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -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
|
|
68
|
-
// (
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
262
|
-
|
|
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"}
|