@nexart/ai-execution 0.1.0 → 0.2.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.
Files changed (49) hide show
  1. package/README.md +270 -112
  2. package/dist/__tests__/v020.test.d.ts +2 -0
  3. package/dist/__tests__/v020.test.d.ts.map +1 -0
  4. package/dist/__tests__/v020.test.js +408 -0
  5. package/dist/__tests__/v020.test.js.map +1 -0
  6. package/dist/archive.d.ts +4 -0
  7. package/dist/archive.d.ts.map +1 -0
  8. package/dist/archive.js +28 -0
  9. package/dist/archive.js.map +1 -0
  10. package/dist/attest.d.ts +3 -0
  11. package/dist/attest.d.ts.map +1 -0
  12. package/dist/attest.js +42 -0
  13. package/dist/attest.js.map +1 -0
  14. package/dist/certify.d.ts +3 -0
  15. package/dist/certify.d.ts.map +1 -0
  16. package/dist/certify.js +27 -0
  17. package/dist/certify.js.map +1 -0
  18. package/dist/errors.d.ts +10 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +19 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +7 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +6 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/providers/anthropic.d.ts +22 -0
  27. package/dist/providers/anthropic.d.ts.map +1 -0
  28. package/dist/providers/anthropic.js +61 -0
  29. package/dist/providers/anthropic.js.map +1 -0
  30. package/dist/providers/wrap.d.ts +7 -0
  31. package/dist/providers/wrap.d.ts.map +1 -0
  32. package/dist/providers/wrap.js +28 -0
  33. package/dist/providers/wrap.js.map +1 -0
  34. package/dist/run.d.ts +14 -0
  35. package/dist/run.d.ts.map +1 -0
  36. package/dist/run.js +62 -0
  37. package/dist/run.js.map +1 -0
  38. package/dist/snapshot.d.ts.map +1 -1
  39. package/dist/snapshot.js +15 -2
  40. package/dist/snapshot.js.map +1 -1
  41. package/dist/types.d.ts +99 -0
  42. package/dist/types.d.ts.map +1 -1
  43. package/fixtures/golden/golden-001.json +29 -0
  44. package/fixtures/golden/golden-002.json +38 -0
  45. package/fixtures/golden/golden-003.json +36 -0
  46. package/fixtures/golden/golden-004.json +29 -0
  47. package/fixtures/golden/golden-005.json +29 -0
  48. package/fixtures/vectors/vector-002.chain.json +101 -0
  49. package/package.json +13 -3
@@ -0,0 +1,408 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { createSnapshot, verifySnapshot } from '../snapshot.js';
4
+ import { sealCer, verifyCer } from '../cer.js';
5
+ import { certifyDecision } from '../certify.js';
6
+ import { RunBuilder } from '../run.js';
7
+ import { exportCer, importCer } from '../archive.js';
8
+ import { wrapProvider } from '../providers/wrap.js';
9
+ import { CerVerificationError, CerAttestationError } from '../errors.js';
10
+ import { readFileSync } from 'node:fs';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { dirname, join } from 'node:path';
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = dirname(__filename);
15
+ const fixturesDir = join(__dirname, '..', '..', 'fixtures');
16
+ function loadJson(path) {
17
+ return JSON.parse(readFileSync(join(fixturesDir, path), 'utf-8'));
18
+ }
19
+ const FIXED_TS = '2026-03-01T00:00:00.000Z';
20
+ const BASE_PARAMS = {
21
+ temperature: 0.7,
22
+ maxTokens: 1024,
23
+ topP: null,
24
+ seed: null,
25
+ };
26
+ describe('backward compatibility: v0.1.0 bundles verify with v0.2.0', () => {
27
+ it('golden-001 (text) verifies', () => {
28
+ const bundle = loadJson('golden/golden-001.json');
29
+ const result = verifyCer(bundle);
30
+ assert.equal(result.ok, true, `errors: ${result.errors.join('; ')}`);
31
+ });
32
+ it('golden-002 (JSON i/o) verifies', () => {
33
+ const bundle = loadJson('golden/golden-002.json');
34
+ const result = verifyCer(bundle);
35
+ assert.equal(result.ok, true, `errors: ${result.errors.join('; ')}`);
36
+ });
37
+ it('golden-003 (with meta) verifies', () => {
38
+ const bundle = loadJson('golden/golden-003.json');
39
+ const result = verifyCer(bundle);
40
+ assert.equal(result.ok, true, `errors: ${result.errors.join('; ')}`);
41
+ });
42
+ it('golden-004 (all optional fields null) verifies', () => {
43
+ const bundle = loadJson('golden/golden-004.json');
44
+ const result = verifyCer(bundle);
45
+ assert.equal(result.ok, true, `errors: ${result.errors.join('; ')}`);
46
+ });
47
+ it('golden-005 (seed+topP set) verifies', () => {
48
+ const bundle = loadJson('golden/golden-005.json');
49
+ const result = verifyCer(bundle);
50
+ assert.equal(result.ok, true, `errors: ${result.errors.join('; ')}`);
51
+ });
52
+ });
53
+ describe('certifyDecision', () => {
54
+ it('produces equivalent output to createSnapshot + sealCer', () => {
55
+ const params = {
56
+ executionId: 'cd-test-001',
57
+ timestamp: FIXED_TS,
58
+ provider: 'openai',
59
+ model: 'gpt-4o',
60
+ prompt: 'Test prompt.',
61
+ input: 'Test input.',
62
+ parameters: BASE_PARAMS,
63
+ output: 'Test output.',
64
+ };
65
+ const snapshot = createSnapshot(params);
66
+ const bundle = sealCer(snapshot);
67
+ const cdBundle = certifyDecision(params);
68
+ assert.equal(cdBundle.bundleType, bundle.bundleType);
69
+ assert.equal(cdBundle.version, bundle.version);
70
+ assert.equal(cdBundle.snapshot.inputHash, bundle.snapshot.inputHash);
71
+ assert.equal(cdBundle.snapshot.outputHash, bundle.snapshot.outputHash);
72
+ assert.equal(cdBundle.snapshot.executionId, bundle.snapshot.executionId);
73
+ });
74
+ it('auto-generates executionId when not provided', () => {
75
+ const bundle = certifyDecision({
76
+ timestamp: FIXED_TS,
77
+ provider: 'openai',
78
+ model: 'gpt-4o',
79
+ prompt: 'p',
80
+ input: 'i',
81
+ parameters: BASE_PARAMS,
82
+ output: 'o',
83
+ });
84
+ assert.ok(bundle.snapshot.executionId.length > 0);
85
+ assert.equal(bundle.bundleType, 'cer.ai.execution.v1');
86
+ });
87
+ it('passes meta through to bundle', () => {
88
+ const bundle = certifyDecision({
89
+ timestamp: FIXED_TS,
90
+ provider: 'openai',
91
+ model: 'gpt-4o',
92
+ prompt: 'p',
93
+ input: 'i',
94
+ parameters: BASE_PARAMS,
95
+ output: 'o',
96
+ meta: { source: 'test', tags: ['cd'] },
97
+ });
98
+ assert.deepStrictEqual(bundle.meta, { source: 'test', tags: ['cd'] });
99
+ });
100
+ it('includes workflow fields in snapshot', () => {
101
+ const bundle = certifyDecision({
102
+ executionId: 'cd-wf-001',
103
+ timestamp: FIXED_TS,
104
+ provider: 'openai',
105
+ model: 'gpt-4o',
106
+ prompt: 'p',
107
+ input: 'i',
108
+ parameters: BASE_PARAMS,
109
+ output: 'o',
110
+ runId: 'run-abc',
111
+ stepId: 'step-0',
112
+ stepIndex: 0,
113
+ workflowId: 'wf-xyz',
114
+ conversationId: 'conv-123',
115
+ prevStepHash: null,
116
+ });
117
+ assert.equal(bundle.snapshot.runId, 'run-abc');
118
+ assert.equal(bundle.snapshot.stepId, 'step-0');
119
+ assert.equal(bundle.snapshot.stepIndex, 0);
120
+ assert.equal(bundle.snapshot.workflowId, 'wf-xyz');
121
+ assert.equal(bundle.snapshot.conversationId, 'conv-123');
122
+ assert.equal(bundle.snapshot.prevStepHash, null);
123
+ });
124
+ });
125
+ describe('RunBuilder', () => {
126
+ const stepBase = {
127
+ provider: 'openai',
128
+ model: 'gpt-4o',
129
+ prompt: 'Step prompt.',
130
+ parameters: BASE_PARAMS,
131
+ };
132
+ it('chains prevStepHash correctly across 3 steps', () => {
133
+ const run = new RunBuilder({ runId: 'run-chain-test', workflowId: 'wf-1' });
134
+ const b0 = run.step({ ...stepBase, input: 'Step 0 input', output: 'Step 0 output', timestamp: FIXED_TS });
135
+ const b1 = run.step({ ...stepBase, input: 'Step 1 input', output: 'Step 1 output', timestamp: FIXED_TS });
136
+ const b2 = run.step({ ...stepBase, input: 'Step 2 input', output: 'Step 2 output', timestamp: FIXED_TS });
137
+ assert.equal(b0.snapshot.prevStepHash, null);
138
+ assert.equal(b1.snapshot.prevStepHash, b0.certificateHash);
139
+ assert.equal(b2.snapshot.prevStepHash, b1.certificateHash);
140
+ });
141
+ it('auto-increments stepIndex', () => {
142
+ const run = new RunBuilder({ runId: 'run-idx-test' });
143
+ const b0 = run.step({ ...stepBase, input: 'a', output: 'b', timestamp: FIXED_TS });
144
+ const b1 = run.step({ ...stepBase, input: 'c', output: 'd', timestamp: FIXED_TS });
145
+ assert.equal(b0.snapshot.stepIndex, 0);
146
+ assert.equal(b1.snapshot.stepIndex, 1);
147
+ });
148
+ it('sets runId on all steps', () => {
149
+ const run = new RunBuilder({ runId: 'run-id-test' });
150
+ const b0 = run.step({ ...stepBase, input: 'x', output: 'y', timestamp: FIXED_TS });
151
+ assert.equal(b0.snapshot.runId, 'run-id-test');
152
+ });
153
+ it('finalize returns correct summary', () => {
154
+ const run = new RunBuilder({ runId: 'run-fin', workflowId: 'wf-fin', conversationId: 'conv-fin' });
155
+ const b0 = run.step({ ...stepBase, input: 'a', output: 'b', timestamp: FIXED_TS });
156
+ const b1 = run.step({ ...stepBase, input: 'c', output: 'd', timestamp: FIXED_TS });
157
+ const summary = run.finalize();
158
+ assert.equal(summary.runId, 'run-fin');
159
+ assert.equal(summary.workflowId, 'wf-fin');
160
+ assert.equal(summary.conversationId, 'conv-fin');
161
+ assert.equal(summary.stepCount, 2);
162
+ assert.equal(summary.steps.length, 2);
163
+ assert.equal(summary.steps[0].stepIndex, 0);
164
+ assert.equal(summary.steps[0].prevStepHash, null);
165
+ assert.equal(summary.steps[1].stepIndex, 1);
166
+ assert.equal(summary.steps[1].prevStepHash, b0.certificateHash);
167
+ assert.equal(summary.finalStepHash, b1.certificateHash);
168
+ });
169
+ it('each step bundle verifies independently', () => {
170
+ const run = new RunBuilder({ runId: 'run-verify' });
171
+ const b0 = run.step({ ...stepBase, input: 'a', output: 'b', timestamp: FIXED_TS });
172
+ const b1 = run.step({ ...stepBase, input: 'c', output: 'd', timestamp: FIXED_TS });
173
+ assert.equal(verifyCer(b0).ok, true);
174
+ assert.equal(verifyCer(b1).ok, true);
175
+ });
176
+ it('generates executionId from runId + stepIndex', () => {
177
+ const run = new RunBuilder({ runId: 'run-eid' });
178
+ const b0 = run.step({ ...stepBase, input: 'a', output: 'b', timestamp: FIXED_TS });
179
+ assert.equal(b0.snapshot.executionId, 'run-eid-step-0');
180
+ });
181
+ });
182
+ describe('exportCer / importCer', () => {
183
+ it('round-trips a valid bundle', () => {
184
+ const snapshot = createSnapshot({
185
+ executionId: 'rt-001',
186
+ timestamp: FIXED_TS,
187
+ provider: 'openai',
188
+ model: 'gpt-4o',
189
+ prompt: 'p',
190
+ input: 'i',
191
+ parameters: BASE_PARAMS,
192
+ output: 'o',
193
+ });
194
+ const bundle = sealCer(snapshot, { createdAt: FIXED_TS });
195
+ const exported = exportCer(bundle);
196
+ const imported = importCer(exported);
197
+ assert.equal(imported.certificateHash, bundle.certificateHash);
198
+ assert.equal(imported.snapshot.inputHash, bundle.snapshot.inputHash);
199
+ assert.equal(imported.snapshot.outputHash, bundle.snapshot.outputHash);
200
+ });
201
+ it('rejects tampered JSON', () => {
202
+ const snapshot = createSnapshot({
203
+ executionId: 'rt-tamper',
204
+ timestamp: FIXED_TS,
205
+ provider: 'openai',
206
+ model: 'gpt-4o',
207
+ prompt: 'p',
208
+ input: 'i',
209
+ parameters: BASE_PARAMS,
210
+ output: 'o',
211
+ });
212
+ const bundle = sealCer(snapshot, { createdAt: FIXED_TS });
213
+ const exported = exportCer(bundle);
214
+ const tampered = exported.replace('"o"', '"tampered"');
215
+ assert.throws(() => importCer(tampered), CerVerificationError);
216
+ });
217
+ it('rejects invalid JSON', () => {
218
+ assert.throws(() => importCer('not json'), CerVerificationError);
219
+ });
220
+ it('rejects wrong bundleType', () => {
221
+ assert.throws(() => importCer('{"bundleType":"wrong"}'), CerVerificationError);
222
+ });
223
+ });
224
+ describe('wrapProvider', () => {
225
+ it('wraps a custom provider', async () => {
226
+ const mockOutput = { text: 'Hello from mock' };
227
+ const wrapped = wrapProvider({
228
+ provider: 'mock-provider',
229
+ callFn: async (_input) => mockOutput,
230
+ extractOutput: (raw) => raw.text,
231
+ });
232
+ const result = await wrapped.execute({
233
+ providerInput: { prompt: 'test' },
234
+ prompt: 'System prompt',
235
+ input: 'User input',
236
+ model: 'mock-v1',
237
+ parameters: BASE_PARAMS,
238
+ });
239
+ assert.equal(result.output, 'Hello from mock');
240
+ assert.equal(result.snapshot.provider, 'mock-provider');
241
+ assert.equal(result.snapshot.model, 'mock-v1');
242
+ assert.equal(result.bundle.bundleType, 'cer.ai.execution.v1');
243
+ assert.equal(verifyCer(result.bundle).ok, true);
244
+ });
245
+ it('uses extractModelVersion when provided', async () => {
246
+ const wrapped = wrapProvider({
247
+ provider: 'versioned',
248
+ callFn: async () => ({ text: 'ok', version: 'v2.1' }),
249
+ extractOutput: (raw) => raw.text,
250
+ extractModelVersion: (raw) => raw.version,
251
+ });
252
+ const result = await wrapped.execute({
253
+ providerInput: {},
254
+ prompt: 'p',
255
+ input: 'i',
256
+ model: 'm',
257
+ parameters: BASE_PARAMS,
258
+ });
259
+ assert.equal(result.snapshot.modelVersion, 'v2.1');
260
+ });
261
+ });
262
+ describe('typed errors', () => {
263
+ it('CerVerificationError has errors array', () => {
264
+ const err = new CerVerificationError(['e1', 'e2']);
265
+ assert.equal(err.name, 'CerVerificationError');
266
+ assert.deepStrictEqual(err.errors, ['e1', 'e2']);
267
+ assert.ok(err.message.includes('e1'));
268
+ assert.ok(err instanceof Error);
269
+ });
270
+ it('CerAttestationError has statusCode and responseBody', () => {
271
+ const err = new CerAttestationError('fail', 401, { error: 'unauthorized' });
272
+ assert.equal(err.name, 'CerAttestationError');
273
+ assert.equal(err.statusCode, 401);
274
+ assert.deepStrictEqual(err.responseBody, { error: 'unauthorized' });
275
+ assert.ok(err instanceof Error);
276
+ });
277
+ });
278
+ describe('snapshot workflow fields', () => {
279
+ it('creates snapshot without workflow fields (backward compat)', () => {
280
+ const snap = createSnapshot({
281
+ executionId: 'no-wf',
282
+ timestamp: FIXED_TS,
283
+ provider: 'openai',
284
+ model: 'gpt-4o',
285
+ prompt: 'p',
286
+ input: 'i',
287
+ parameters: BASE_PARAMS,
288
+ output: 'o',
289
+ });
290
+ assert.equal(snap.runId, undefined);
291
+ assert.equal(snap.stepId, undefined);
292
+ assert.equal(snap.stepIndex, undefined);
293
+ });
294
+ it('creates snapshot with workflow fields', () => {
295
+ const snap = createSnapshot({
296
+ executionId: 'wf-test',
297
+ timestamp: FIXED_TS,
298
+ provider: 'openai',
299
+ model: 'gpt-4o',
300
+ prompt: 'p',
301
+ input: 'i',
302
+ parameters: BASE_PARAMS,
303
+ output: 'o',
304
+ runId: 'run-1',
305
+ stepId: 'step-0',
306
+ stepIndex: 0,
307
+ workflowId: 'wf-1',
308
+ conversationId: 'conv-1',
309
+ prevStepHash: null,
310
+ });
311
+ assert.equal(snap.runId, 'run-1');
312
+ assert.equal(snap.stepId, 'step-0');
313
+ assert.equal(snap.stepIndex, 0);
314
+ assert.equal(snap.workflowId, 'wf-1');
315
+ assert.equal(snap.conversationId, 'conv-1');
316
+ assert.equal(snap.prevStepHash, null);
317
+ });
318
+ it('workflow fields included in certificate hash', () => {
319
+ const params = {
320
+ executionId: 'wf-hash-test',
321
+ timestamp: FIXED_TS,
322
+ provider: 'openai',
323
+ model: 'gpt-4o',
324
+ prompt: 'p',
325
+ input: 'i',
326
+ parameters: BASE_PARAMS,
327
+ output: 'o',
328
+ };
329
+ const snap1 = createSnapshot(params);
330
+ const snap2 = createSnapshot({ ...params, runId: 'run-x', stepIndex: 0 });
331
+ const b1 = sealCer(snap1, { createdAt: FIXED_TS });
332
+ const b2 = sealCer(snap2, { createdAt: FIXED_TS });
333
+ assert.notEqual(b1.certificateHash, b2.certificateHash);
334
+ });
335
+ it('v0.2 snapshot verifies correctly', () => {
336
+ const snap = createSnapshot({
337
+ executionId: 'v02-verify',
338
+ timestamp: FIXED_TS,
339
+ provider: 'openai',
340
+ model: 'gpt-4o',
341
+ prompt: 'p',
342
+ input: 'i',
343
+ parameters: BASE_PARAMS,
344
+ output: 'o',
345
+ runId: 'r',
346
+ stepIndex: 0,
347
+ });
348
+ assert.equal(verifySnapshot(snap).ok, true);
349
+ });
350
+ });
351
+ describe('fixture: vector-002 (3-step chain)', () => {
352
+ const chain = loadJson('vectors/vector-002.chain.json');
353
+ it('has 3 steps', () => {
354
+ assert.equal(chain.length, 3);
355
+ });
356
+ it('each step snapshot verifies', () => {
357
+ for (const entry of chain) {
358
+ const result = verifySnapshot(entry.snapshot);
359
+ assert.equal(result.ok, true, `step ${entry.snapshot.stepIndex} errors: ${result.errors.join('; ')}`);
360
+ }
361
+ });
362
+ it('each step CER hash matches expected', () => {
363
+ for (const entry of chain) {
364
+ const bundle = sealCer(entry.snapshot, { createdAt: entry.cerCreatedAt });
365
+ assert.equal(bundle.certificateHash, entry.expectedCertificateHash, `step ${entry.snapshot.stepIndex} hash mismatch`);
366
+ }
367
+ });
368
+ it('prevStepHash chain is correct', () => {
369
+ assert.equal(chain[0].snapshot.prevStepHash, null);
370
+ assert.equal(chain[1].snapshot.prevStepHash, chain[0].expectedCertificateHash);
371
+ assert.equal(chain[2].snapshot.prevStepHash, chain[1].expectedCertificateHash);
372
+ });
373
+ it('stepIndex is sequential', () => {
374
+ assert.equal(chain[0].snapshot.stepIndex, 0);
375
+ assert.equal(chain[1].snapshot.stepIndex, 1);
376
+ assert.equal(chain[2].snapshot.stepIndex, 2);
377
+ });
378
+ });
379
+ describe('sdkVersion updated to 0.2.0', () => {
380
+ it('new snapshots default to 0.2.0', () => {
381
+ const snap = createSnapshot({
382
+ executionId: 'ver-test',
383
+ timestamp: FIXED_TS,
384
+ provider: 'openai',
385
+ model: 'gpt-4o',
386
+ prompt: 'p',
387
+ input: 'i',
388
+ parameters: BASE_PARAMS,
389
+ output: 'o',
390
+ });
391
+ assert.equal(snap.sdkVersion, '0.2.0');
392
+ });
393
+ it('explicit sdkVersion overrides default', () => {
394
+ const snap = createSnapshot({
395
+ executionId: 'ver-override',
396
+ timestamp: FIXED_TS,
397
+ provider: 'openai',
398
+ model: 'gpt-4o',
399
+ prompt: 'p',
400
+ input: 'i',
401
+ parameters: BASE_PARAMS,
402
+ output: 'o',
403
+ sdkVersion: '0.1.0',
404
+ });
405
+ assert.equal(snap.sdkVersion, '0.1.0');
406
+ });
407
+ });
408
+ //# sourceMappingURL=v020.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v020.test.js","sourceRoot":"","sources":["../../src/__tests__/v020.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CerAiExecutionBundle } from './types.js';
2
+ export declare function exportCer(bundle: CerAiExecutionBundle): string;
3
+ export declare function importCer(json: string): CerAiExecutionBundle;
4
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKvD,wBAAgB,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAE9D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAwB5D"}
@@ -0,0 +1,28 @@
1
+ import { toCanonicalJson } from './canonicalJson.js';
2
+ import { verifyCer } from './cer.js';
3
+ import { CerVerificationError } from './errors.js';
4
+ export function exportCer(bundle) {
5
+ return toCanonicalJson(bundle);
6
+ }
7
+ export function importCer(json) {
8
+ let parsed;
9
+ try {
10
+ parsed = JSON.parse(json);
11
+ }
12
+ catch (err) {
13
+ throw new CerVerificationError([`Invalid JSON: ${err.message}`]);
14
+ }
15
+ const bundle = parsed;
16
+ if (!bundle || typeof bundle !== 'object') {
17
+ throw new CerVerificationError(['Parsed value is not an object']);
18
+ }
19
+ if (bundle.bundleType !== 'cer.ai.execution.v1') {
20
+ throw new CerVerificationError([`Expected bundleType "cer.ai.execution.v1", got "${bundle.bundleType}"`]);
21
+ }
22
+ const result = verifyCer(bundle);
23
+ if (!result.ok) {
24
+ throw new CerVerificationError(result.errors);
25
+ }
26
+ return bundle;
27
+ }
28
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,UAAU,SAAS,CAAC,MAA4B;IACpD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,oBAAoB,CAAC,CAAC,iBAAkB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,MAAM,GAAG,MAA8B,CAAC;IAE9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,oBAAoB,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,KAAK,qBAAqB,EAAE,CAAC;QAChD,MAAM,IAAI,oBAAoB,CAAC,CAAC,mDAAmD,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CerAiExecutionBundle, AttestationResult, AttestOptions } from './types.js';
2
+ export declare function attest(bundle: CerAiExecutionBundle, options: AttestOptions): Promise<AttestationResult>;
3
+ //# sourceMappingURL=attest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attest.d.ts","sourceRoot":"","sources":["../src/attest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGzF,wBAAsB,MAAM,CAC1B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAmD5B"}
package/dist/attest.js ADDED
@@ -0,0 +1,42 @@
1
+ import { CerAttestationError } from './errors.js';
2
+ export async function attest(bundle, options) {
3
+ const url = `${options.nodeUrl.replace(/\/+$/, '')}/api/attest`;
4
+ let response;
5
+ try {
6
+ response = await fetch(url, {
7
+ method: 'POST',
8
+ headers: {
9
+ 'Content-Type': 'application/json',
10
+ 'Authorization': `Bearer ${options.apiKey}`,
11
+ },
12
+ body: JSON.stringify(bundle),
13
+ });
14
+ }
15
+ catch (err) {
16
+ throw new CerAttestationError(`Network error contacting attestation node: ${err.message}`);
17
+ }
18
+ let body;
19
+ try {
20
+ body = await response.json();
21
+ }
22
+ catch {
23
+ const text = await response.text().catch(() => '');
24
+ throw new CerAttestationError(`Attestation node returned non-JSON response (${response.status}): ${text}`, response.status);
25
+ }
26
+ if (!response.ok) {
27
+ const msg = typeof body === 'object' && body !== null && 'error' in body
28
+ ? body.error
29
+ : `HTTP ${response.status}`;
30
+ throw new CerAttestationError(`Attestation failed: ${msg}`, response.status, body);
31
+ }
32
+ const result = body;
33
+ return {
34
+ ok: true,
35
+ attestationId: typeof result.attestationId === 'string' ? result.attestationId : undefined,
36
+ nodeRuntimeHash: typeof result.nodeRuntimeHash === 'string' ? result.nodeRuntimeHash : undefined,
37
+ certificateHash: typeof result.certificateHash === 'string' ? result.certificateHash : undefined,
38
+ protocolVersion: typeof result.protocolVersion === 'string' ? result.protocolVersion : undefined,
39
+ raw: body,
40
+ };
41
+ }
42
+ //# sourceMappingURL=attest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attest.js","sourceRoot":"","sources":["../src/attest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAA4B,EAC5B,OAAsB;IAEtB,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC;IAEhE,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC1B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE;aAC5C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,mBAAmB,CAC3B,8CAA+C,GAAa,CAAC,OAAO,EAAE,CACvE,CAAC;IACJ,CAAC;IAED,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,mBAAmB,CAC3B,gDAAgD,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,EAC3E,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI;YACtE,CAAC,CAAE,IAA0B,CAAC,KAAK;YACnC,CAAC,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,mBAAmB,CAC3B,uBAAuB,GAAG,EAAE,EAC5B,QAAQ,CAAC,MAAM,EACf,IAAI,CACL,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAA+B,CAAC;IAE/C,OAAO;QACL,EAAE,EAAE,IAAI;QACR,aAAa,EAAE,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC1F,eAAe,EAAE,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QAChG,eAAe,EAAE,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QAChG,eAAe,EAAE,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QAChG,GAAG,EAAE,IAAI;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CerAiExecutionBundle, CertifyDecisionParams } from './types.js';
2
+ export declare function certifyDecision(params: CertifyDecisionParams): CerAiExecutionBundle;
3
+ //# sourceMappingURL=certify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certify.d.ts","sourceRoot":"","sources":["../src/certify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAI9E,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,oBAAoB,CAwBnF"}
@@ -0,0 +1,27 @@
1
+ import * as crypto from 'crypto';
2
+ import { createSnapshot } from './snapshot.js';
3
+ import { sealCer } from './cer.js';
4
+ export function certifyDecision(params) {
5
+ const executionId = params.executionId ?? crypto.randomUUID();
6
+ const snapshot = createSnapshot({
7
+ executionId,
8
+ timestamp: params.timestamp,
9
+ provider: params.provider,
10
+ model: params.model,
11
+ modelVersion: params.modelVersion,
12
+ prompt: params.prompt,
13
+ input: params.input,
14
+ parameters: params.parameters,
15
+ output: params.output,
16
+ sdkVersion: params.sdkVersion,
17
+ appId: params.appId,
18
+ runId: params.runId,
19
+ stepId: params.stepId,
20
+ stepIndex: params.stepIndex,
21
+ workflowId: params.workflowId,
22
+ conversationId: params.conversationId,
23
+ prevStepHash: params.prevStepHash,
24
+ });
25
+ return sealCer(snapshot, { meta: params.meta });
26
+ }
27
+ //# sourceMappingURL=certify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certify.js","sourceRoot":"","sources":["../src/certify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IAE9D,MAAM,QAAQ,GAAG,cAAc,CAAC;QAC9B,WAAW;QACX,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare class CerVerificationError extends Error {
2
+ readonly errors: string[];
3
+ constructor(errors: string[]);
4
+ }
5
+ export declare class CerAttestationError extends Error {
6
+ readonly statusCode?: number;
7
+ readonly responseBody?: unknown;
8
+ constructor(message: string, statusCode?: number, responseBody?: unknown);
9
+ }
10
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,MAAM,EAAE,MAAM,EAAE,CAAC;gBAErB,MAAM,EAAE,MAAM,EAAE;CAK7B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpC,SAAgB,YAAY,CAAC,EAAE,OAAO,CAAC;gBAE3B,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO;CAMzE"}
package/dist/errors.js ADDED
@@ -0,0 +1,19 @@
1
+ export class CerVerificationError extends Error {
2
+ errors;
3
+ constructor(errors) {
4
+ super(`CER verification failed: ${errors.join('; ')}`);
5
+ this.name = 'CerVerificationError';
6
+ this.errors = errors;
7
+ }
8
+ }
9
+ export class CerAttestationError extends Error {
10
+ statusCode;
11
+ responseBody;
12
+ constructor(message, statusCode, responseBody) {
13
+ super(message);
14
+ this.name = 'CerAttestationError';
15
+ this.statusCode = statusCode;
16
+ this.responseBody = responseBody;
17
+ }
18
+ }
19
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7B,MAAM,CAAW;IAEjC,YAAY,MAAgB;QAC1B,KAAK,CAAC,4BAA4B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5B,UAAU,CAAU;IACpB,YAAY,CAAW;IAEvC,YAAY,OAAe,EAAE,UAAmB,EAAE,YAAsB;QACtE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,12 @@
1
- export type { AiExecutionSnapshotV1, AiExecutionParameters, CerAiExecutionBundle, CerMeta, VerificationResult, CreateSnapshotParams, } from './types.js';
1
+ export type { AiExecutionSnapshotV1, AiExecutionParameters, CerAiExecutionBundle, CerMeta, VerificationResult, CreateSnapshotParams, AttestationResult, AttestOptions, CertifyDecisionParams, RunBuilderOptions, StepParams, RunSummary, ProviderConfig, WrappedExecutionParams, WrappedExecutionResult, } from './types.js';
2
+ export { CerVerificationError, CerAttestationError } from './errors.js';
2
3
  export { toCanonicalJson } from './canonicalJson.js';
3
4
  export { sha256Hex, hashUtf8, hashCanonicalJson, computeInputHash, computeOutputHash } from './hash.js';
4
5
  export { createSnapshot, verifySnapshot } from './snapshot.js';
5
6
  export { sealCer, verifyCer } from './cer.js';
7
+ export { certifyDecision } from './certify.js';
8
+ export { RunBuilder } from './run.js';
9
+ export { attest } from './attest.js';
10
+ export { exportCer, importCer } from './archive.js';
11
+ export { wrapProvider } from './providers/wrap.js';
6
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACxG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACxG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}