@nexart/ai-execution 0.8.0 → 0.9.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/index.cjs CHANGED
@@ -33,6 +33,7 @@ __export(src_exports, {
33
33
  CerAttestationError: () => CerAttestationError,
34
34
  CerVerificationError: () => CerVerificationError,
35
35
  CerVerifyCode: () => CerVerifyCode,
36
+ ReasonCode: () => ReasonCode,
36
37
  RunBuilder: () => RunBuilder,
37
38
  attest: () => attest,
38
39
  attestIfNeeded: () => attestIfNeeded,
@@ -65,6 +66,7 @@ __export(src_exports, {
65
66
  toCanonicalJson: () => toCanonicalJson,
66
67
  validateProfile: () => validateProfile,
67
68
  verify: () => verifyCer,
69
+ verifyAiCerBundleDetailed: () => verifyAiCerBundleDetailed,
68
70
  verifyAief: () => verifyAief,
69
71
  verifyBundleAttestation: () => verifyBundleAttestation,
70
72
  verifyCer: () => verifyCer,
@@ -459,7 +461,7 @@ function certifyDecision(params) {
459
461
  conversationId: params.conversationId,
460
462
  prevStepHash: params.prevStepHash
461
463
  });
462
- return sealCer(snapshot, { meta: params.meta });
464
+ return sealCer(snapshot, { createdAt: params.createdAt, meta: params.meta });
463
465
  }
464
466
 
465
467
  // src/run.ts
@@ -2540,11 +2542,92 @@ async function certifyAndAttestRun(steps, options) {
2540
2542
  finalStepHash: runSummary.finalStepHash
2541
2543
  };
2542
2544
  }
2545
+
2546
+ // src/cerProtocol.ts
2547
+ var ReasonCode = {
2548
+ BUNDLE_HASH_MISMATCH: "BUNDLE_HASH_MISMATCH",
2549
+ NODE_SIGNATURE_INVALID: "NODE_SIGNATURE_INVALID",
2550
+ NODE_SIGNATURE_MISSING: "NODE_SIGNATURE_MISSING",
2551
+ RECEIPT_HASH_MISMATCH: "RECEIPT_HASH_MISMATCH",
2552
+ SCHEMA_VERSION_UNSUPPORTED: "SCHEMA_VERSION_UNSUPPORTED",
2553
+ RECORD_NOT_FOUND: "RECORD_NOT_FOUND",
2554
+ BUNDLE_CORRUPTED: "BUNDLE_CORRUPTED"
2555
+ };
2556
+
2557
+ // src/verifyDetailed.ts
2558
+ function mapCerCodeToReasonCodes(cerCode) {
2559
+ switch (cerCode) {
2560
+ case CerVerifyCode.CERTIFICATE_HASH_MISMATCH:
2561
+ case CerVerifyCode.SNAPSHOT_HASH_MISMATCH:
2562
+ case CerVerifyCode.INPUT_HASH_MISMATCH:
2563
+ case CerVerifyCode.OUTPUT_HASH_MISMATCH:
2564
+ return [ReasonCode.BUNDLE_HASH_MISMATCH];
2565
+ case CerVerifyCode.SCHEMA_ERROR:
2566
+ return [ReasonCode.SCHEMA_VERSION_UNSUPPORTED];
2567
+ case CerVerifyCode.CANONICALIZATION_ERROR:
2568
+ case CerVerifyCode.UNKNOWN_ERROR:
2569
+ case CerVerifyCode.INVALID_SHA256_FORMAT:
2570
+ return [ReasonCode.BUNDLE_CORRUPTED];
2571
+ case CerVerifyCode.ATTESTATION_INVALID_SIGNATURE:
2572
+ case CerVerifyCode.ATTESTATION_KEY_FORMAT_UNSUPPORTED:
2573
+ case CerVerifyCode.ATTESTATION_KEY_NOT_FOUND:
2574
+ return [ReasonCode.NODE_SIGNATURE_INVALID];
2575
+ case CerVerifyCode.ATTESTATION_MISSING:
2576
+ return [ReasonCode.NODE_SIGNATURE_MISSING];
2577
+ default:
2578
+ return [];
2579
+ }
2580
+ }
2581
+ function verifyAiCerBundleDetailed(bundle) {
2582
+ const verifiedAt = (/* @__PURE__ */ new Date()).toISOString();
2583
+ const verifier = "@nexart/ai-execution";
2584
+ if (!bundle || typeof bundle !== "object" || Array.isArray(bundle)) {
2585
+ return {
2586
+ status: "FAILED",
2587
+ checks: { bundleIntegrity: "FAIL", nodeSignature: "SKIPPED", receiptConsistency: "SKIPPED" },
2588
+ reasonCodes: [ReasonCode.BUNDLE_CORRUPTED],
2589
+ certificateHash: "",
2590
+ bundleType: "",
2591
+ verifiedAt,
2592
+ verifier
2593
+ };
2594
+ }
2595
+ const b = bundle;
2596
+ const bundleType = typeof b["bundleType"] === "string" ? b["bundleType"] : "";
2597
+ const certificateHash = typeof b["certificateHash"] === "string" ? b["certificateHash"] : "";
2598
+ if (bundleType !== "cer.ai.execution.v1") {
2599
+ return {
2600
+ status: "FAILED",
2601
+ checks: { bundleIntegrity: "FAIL", nodeSignature: "SKIPPED", receiptConsistency: "SKIPPED" },
2602
+ reasonCodes: [ReasonCode.SCHEMA_VERSION_UNSUPPORTED],
2603
+ certificateHash,
2604
+ bundleType,
2605
+ verifiedAt,
2606
+ verifier
2607
+ };
2608
+ }
2609
+ const cerResult = verifyCer(bundle);
2610
+ const bundleIntegrity = cerResult.ok ? "PASS" : "FAIL";
2611
+ const attestationPresent = hasAttestation(bundle);
2612
+ const nodeSignature = attestationPresent ? "PASS" : "SKIPPED";
2613
+ const receiptConsistency = attestationPresent ? "PASS" : "SKIPPED";
2614
+ const reasonCodes = cerResult.ok ? [] : mapCerCodeToReasonCodes(cerResult.code);
2615
+ return {
2616
+ status: cerResult.ok ? "VERIFIED" : "FAILED",
2617
+ checks: { bundleIntegrity, nodeSignature, receiptConsistency },
2618
+ reasonCodes,
2619
+ certificateHash,
2620
+ bundleType,
2621
+ verifiedAt,
2622
+ verifier
2623
+ };
2624
+ }
2543
2625
  // Annotate the CommonJS export names for ESM import in node:
2544
2626
  0 && (module.exports = {
2545
2627
  CerAttestationError,
2546
2628
  CerVerificationError,
2547
2629
  CerVerifyCode,
2630
+ ReasonCode,
2548
2631
  RunBuilder,
2549
2632
  attest,
2550
2633
  attestIfNeeded,
@@ -2577,6 +2660,7 @@ async function certifyAndAttestRun(steps, options) {
2577
2660
  toCanonicalJson,
2578
2661
  validateProfile,
2579
2662
  verify,
2663
+ verifyAiCerBundleDetailed,
2580
2664
  verifyAief,
2581
2665
  verifyBundleAttestation,
2582
2666
  verifyCer,