chainlesschain 0.166.62 → 0.166.63

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 (170) hide show
  1. package/README.md +38 -8
  2. package/package.json +3 -1
  3. package/src/assets/web-panel/assets/{AIOps-BqoRiuXE.js → AIOps-CfPrpABR.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-BwBhyFIm.js → ActionButton-Bkv1erki.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DTW03Emb.js → Analytics-fY_7epoU.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-CI-wxMLQ.js → AppLayout-DegaN-aa.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-DVqbM3iE.js → Artifacts-90-UNTVE.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DulhOs16.js → Audit-BRQ1F4sA.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-DnRs67e8.js → BackgroundAgents-Cb85uP7O.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-BFEZo0vX.js → Backup-CrLBSWQK.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-D185sBnp.js → BaseInput-DditUW5B.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-DUvP-2SK.js → Chat-0XozleDQ.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-u9WKQbZb.js → ChatBubbleRenderer-8QXBJvgy.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-D8Zh_18b.js → Checkbox-C2Ck_3ju.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-WdiWRdfC.js → Codegen-Chjw-MS7.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CnSoVpw6.js → Col-B_w8_Oka.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-BJDHgBkw.js → Community-XAqxPnXq.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-uNRdmBaq.js → Compact-BX_3GJ3m.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-_6jRTJa3.js → Compliance-DE3kIC9z.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-D5lnbXR6.js → Cowork-DPBYp1ey.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-D6tuGBVg.js → Cron-D9cknqzn.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-Ce5e9Lbm.js → Crosschain-BzHrGWY9.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-1VVKZ_c1.js → DID-BuD8TkZl.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-DuHcZ13w.js → Dashboard-BbxMuZVK.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BC3EK0wN.js → Dropdown-jq0ki-tE.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-DzLpGs5E.js → EmailListRenderer-RiMvINxT.js} +1 -1
  27. package/src/assets/web-panel/assets/{EvolutionSettings-x2XZHG0Z.js → EvolutionSettings-DE-URi9i.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-nAavV50Y.js → FamilyGuardDashboard-DV3ao62-.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-CCHWVS5J.js → Federation-BF6BmBPg.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-CGod_3Ni.js → FormItemContext-CKTX59j2.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-DIFYQa2f.js → GenericCardRenderer-DZkH-CTs.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-DikM1Nc5.js → Git-B5JYb-w-.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-SzzBXCDX.js → Governance-D3WfDZ6W.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-wVsu9QzM.js → Inference-DoSvfDUk.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-DDpVxfO-.js → KnowledgeGraph-DUDIzN97.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-BnIjS-2Z.js → Logs-JfJerfFD.js} +2 -2
  37. package/src/assets/web-panel/assets/MarkdownRenderer-DXgA7cZm.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-Cj3PLhXV.js → Marketplace-BpVrOM_V.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-DMKO55Kz.js → McpTools-CFnQdiSv.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-wWJl5yJL.js → Memory-Dxv81cNl.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-CJ_VIPgJ.js → MobileBridge-C92eX7PB.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-CiJT5cF8.js → MobileProjects-BUHw7Wox.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-BXmndm9a.js → Mtc-D-G9H4A1.js} +2 -2
  44. package/src/assets/web-panel/assets/{MtcAudit-C3hWIAnz.js → MtcAudit-CAEaEtAz.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-DU4OUQ7u.js → Multisig-Cx_-X9HD.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-CyAwOeU5.js → NLProgramming-DRIKG4Xy.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes--YvcAg13.js → Notes-CmL0vKUv.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-Dyu6dC0D.js → NotificationSettings-D2cQ5aQn.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-Df-0iTO2.js → OrderTableRenderer-CPfd7PNy.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-a9Em4Sgu.js → Organization-EKqO46hz.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-CCQtvcsw.js → Overflow-BOHjBwJo.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P--CaB5e38.js → P2P-Dx4LdCE0.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-CmfHjoJG.js → PdhVaultBrowser-CgCt2xdT.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-BCDjNsXi.js → Permissions-DWjDeO7O.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-ByprqCJd.js → PersonalDataHub-Bx4Od8pG.js} +4 -4
  56. package/src/assets/web-panel/assets/{Pipeline-CZRZq-P0.js → Pipeline-oKxws_Ch.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-CeDay_dV.js → Privacy-Df1HVRKR.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-CgpIfRAZ.js → ProjectInit-BraLwZT4.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-CU8iakEs.js → ProjectSettings-CKru54M0.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-pPM0KRfQ.js → Projects-BEr7cJcS.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-BfpxsZh1.js → Providers-C8v30DU3.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-Dmv3rax1.js → QrScannerModal-CPyNV-O5.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-DBOtB5wd.js → QuickAsk-BLIew7A5.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-C_KnHRvS.js → Recommend-DVjWmsPs.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-OIO9kT7D.js → RemoteSession-B4PNTaEf.js} +3 -3
  66. package/src/assets/web-panel/assets/{Reputation-BCfNIBt3.js → Reputation-D5HOV6oI.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-pnhw7dyj.js → Row-DgCQom2M.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-CLJ1A3FF.js → RssFeed-zvIcGHgz.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-CSQzJ3gj.js → Search-C-KbJP_z.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-CS_mvkaE.js → Security-CasnI-Ld.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-DBqA2Csq.js → Services-CR-pSlFv.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-BjR3_iWH.js → Skeleton-BB5On1b5.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-DwGIXRJS.js → Skills-CC-wdQi-.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-DwiHHJtJ.js → Sla-CPX5QKEu.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-QYN_t0CS.js → SpeechSettings-Bifkl6Zz.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-DcXA1Jp3.js → SyncSettings-CdUVeB-S.js} +2 -2
  77. package/src/assets/web-panel/assets/Tasks-BttwN3fs.js +1 -0
  78. package/src/assets/web-panel/assets/{Templates-C6MTuLXU.js → Templates-CBHNbpQ7.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-DmbdMB2D.js → Tenant-B90lEwSQ.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-DYeXnE4A.js → Terminal-u8KqitsA.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-BrwLhsSE.js → TimelineRenderer-CnEJMkJo.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-C5kKpRWj.js → Tokens-CTM2OOJ_.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-C4Zyg1jj.js → Trigger-Ca8NmmgU.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-D0mrY3kY.js → Trust-CI9GpUj2.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-Bq5NMLLb.js → UkeySign-BlMLGqKK.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-OObS6euz.js → VideoEditing-C8yCZrH0.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-Die77ZAO.js → Wallet-BpuYrz8o.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-DFpqn0WO.js → WebAuthn-DFpNfLG_.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-BgKZiece.js → WorkflowEditor-BWhLoeU4.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-CbWtbRmr.js → chat-Dwo4LC7E.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-Zu_TgmpG.js → colors-DkdGvKBf.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-BqABAwA_.js → compact-item-1gI0lfs3.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-DR6r1ykz.js → createContext-O9iHirtr.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-axBqv361.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-BNnYbjOt.js → hasIn-DY1jo9BQ.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BbHnxChr.js → index-1AnBwAoM.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-P-0rrwu0.js → index-B-kbagPi.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DxloCIDQ.js → index-B0TX-bLV.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-uwS83tsv.js → index-B5l7eb6E.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DuCixW1o.js → index-BDwV_V5g.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BtQDpNFU.js → index-BgHG4f2K.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DEdqCQKQ.js → index-BgVO1aXv.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Ct4xnx2r.js → index-Bl6GfsQZ.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-ys7--3Ab.js → index-BmAK4o9I.js} +1 -1
  105. package/src/assets/web-panel/assets/{index--1t0mcMh.js → index-BsQkwBu2.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BQHn6m4S.js → index-BumRAO-7.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BvQB-LK5.js → index-Bx4MNNMY.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-GrGT2dft.js → index-C4c0XaiT.js} +1 -1
  109. package/src/assets/web-panel/assets/index-CAsOttsq.js +1 -0
  110. package/src/assets/web-panel/assets/{index-BQ1WFS4G.js → index-CBqSTwY9.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CbJgVaoQ.js → index-D8fqsTHW.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-D08ytPR_.js → index-DCqPIE3G.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CkBDWART.js → index-DNnaEzC5.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CSNMSJAt.js → index-DTppQua6.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DiaPl_6F.js → index-DfFzjnA0.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DaKziwj_.js → index-DskEFn8M.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CVgcq0cJ.js → index-DvRvwzc-.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CuYLjMxX.js → index-DwBcFhcc.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CR4uB9Mt.js → index-DwJBbK3Z.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CpmSx_mp.js → index-DwhJqZqM.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-n62j7dTt.js → index-Dx51Am-0.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B9qA3lcI.js → index-E5Ar6dNV.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BCyrVLzm.js → index-ETHEhWvI.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CO9hQ7ri.js → index-KUrBWzIM.js} +1 -1
  125. package/src/assets/web-panel/assets/index-MgEKheCh.js +1 -0
  126. package/src/assets/web-panel/assets/{index-55eCb40A.js → index-YnGvCu0P.js} +3 -3
  127. package/src/assets/web-panel/assets/{index-CYgH1j85.js → index-hRtVittm.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-C912Wlyi.js → index-nXoV4OCZ.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-rS1lj7A9.js → index-qUbrqzvO.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-hZ41pakD.js → index-rIJqtLz-.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CmGll9ri.js → index-rkkMl4Lb.js} +1 -1
  132. package/src/assets/web-panel/assets/{index--vigBXnN.js → index-tXjOuLZm.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-fvl4dSWm.js → index-zLOzCcxM.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-hWckjvz-.js → index-zPpssHXA.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-BEtGYjIT.js → initDefaultProps-Du5HHTVt.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-Cvnft4fL.js → motion-D9mAVPKP.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-CdxE_5Yl.js → move-DPO_sFtt.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-CS0l6IJn.js → mtc-parser-CnezVcXi.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-Bnji87sb.js → omit-DNpYMbet.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-BYdnEgN3.js → pickAttrs-BUFm_slL.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-DYYd524z.js → placementArrow-DvwJtnzY.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-BbIJIkXp.js → responsiveObserve-CUWOh_KI.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-BSvuvfUS.js → slide-bVHCUsdj.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-DeLSt3js.js → statusUtils-FlOzOrxf.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-DpJTPfyI.js → styleChecker-C6CFXutA.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-S7WdFQMU.js → useFlexGapSupport-BNGqO_E0.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CkfCBy52.js → useFs-DyKOrA27.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-CA48p8Gt.js → usePersonalDataHub-DZAqeMAJ.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-C9D1tq_L.js → vnode-Do7fVasi.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-B0TG7YQI.js → zoom-DYkEmOT2.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/data/changelog.json +13 -0
  153. package/src/lib/evolution/evolution-artifact-ports.js +3 -0
  154. package/src/lib/evolution/evolution-deployment-loader.js +125 -9
  155. package/src/lib/evolution/pm-exploration-budget-executor.js +346 -0
  156. package/src/lib/evolution/pm-exploration-business-grader.js +581 -0
  157. package/src/lib/evolution/pm-exploration-evidence-bundle.js +613 -0
  158. package/src/lib/evolution/pm-exploration-execution-host.js +946 -0
  159. package/src/lib/evolution/pm-exploration-ledger-adapter.js +210 -22
  160. package/src/lib/evolution/pm-exploration-provider-settlement-adapter.js +420 -0
  161. package/src/lib/evolution/pm-exploration-receipts.js +626 -0
  162. package/src/lib/evolution/pm-exploration-recovery-snapshot-store.js +521 -0
  163. package/src/lib/evolution/pm-exploration-rounds.js +12 -2
  164. package/src/lib/evolution/pm-exploration-transition-committer.js +541 -0
  165. package/src/lib/evolution/pm-exploration-volcengine-provider.js +724 -0
  166. package/src/assets/web-panel/assets/MarkdownRenderer-3AsRzie6.js +0 -1
  167. package/src/assets/web-panel/assets/Tasks-DwWqvoyB.js +0 -1
  168. package/src/assets/web-panel/assets/devWarning-CmMzSuk5.js +0 -1
  169. package/src/assets/web-panel/assets/index-Dw-oPGSM.js +0 -1
  170. package/src/assets/web-panel/assets/index-OXemaG8f.js +0 -1
@@ -0,0 +1,420 @@
1
+ import { createHash } from "node:crypto";
2
+ import { isPromise, isProxy, isUint8Array } from "node:util/types";
3
+
4
+ import {
5
+ EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA,
6
+ EvolutionArtifactPorts,
7
+ } from "./evolution-artifact-ports.js";
8
+ import {
9
+ EVOLUTION_ARTIFACT_DURABILITY_BINDING_SCHEMA,
10
+ EVOLUTION_ARTIFACT_DURABILITY_RECEIPT_SCHEMA,
11
+ EVOLUTION_ARTIFACT_DURABILITY_RESOLUTION_SCHEMA,
12
+ EVOLUTION_ARTIFACT_DURABILITY_RESOLVE_REQUEST_SCHEMA,
13
+ EVOLUTION_ARTIFACT_DURABILITY_RETAIN_REQUEST_SCHEMA,
14
+ } from "./evolution-ledger-ports.js";
15
+ import {
16
+ PM_EXPLORATION_PROVIDER_PERSISTENCE_SCHEMA,
17
+ verifyPmExplorationVolcengineSettlement,
18
+ } from "./pm-exploration-volcengine-provider.js";
19
+
20
+ export const PM_EXPLORATION_PROVIDER_SETTLEMENT_RECORD_SCHEMA =
21
+ "chainlesschain.pm-exploration-provider-settlement-record/v1";
22
+ export const PM_EXPLORATION_PROVIDER_SETTLEMENT_ADAPTER_SCHEMA =
23
+ "chainlesschain.pm-exploration-provider-settlement-adapter/v1";
24
+ export const PM_EXPLORATION_PROVIDER_SETTLEMENT_CORRUPT_CODE =
25
+ "CC_PM_PROVIDER_SETTLEMENT_CORRUPT";
26
+
27
+ const ARTIFACT_TYPE = "pm-exploration-provider-settlement";
28
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
29
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,255}$/u;
30
+ const DESCRIPTOR_KEYS = new Set([
31
+ "tenantId",
32
+ "artifactTenantId",
33
+ "audience",
34
+ "purpose",
35
+ "durabilityAuthorityId",
36
+ "handlerArtifactDigest",
37
+ ]);
38
+ const AUTHORITY_KEYS = new Set(["id", "retain", "resolve"]);
39
+ const DURABILITY_RECEIPT_KEYS = new Set([
40
+ "schema",
41
+ "authenticated",
42
+ "durable",
43
+ "authorityId",
44
+ "artifactTenantId",
45
+ "digest",
46
+ "purpose",
47
+ "ref",
48
+ "retention",
49
+ "type",
50
+ "receiptDigest",
51
+ ]);
52
+ const DURABILITY_RESOLUTION_KEYS = new Set([
53
+ ...DURABILITY_RECEIPT_KEYS,
54
+ "bytes",
55
+ ]);
56
+ const STORE_PORTS = new WeakMap();
57
+
58
+ function canonical(value) {
59
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
60
+ if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
61
+ return `{${Object.keys(value)
62
+ .sort()
63
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
64
+ .join(",")}}`;
65
+ }
66
+
67
+ function hash(domain, value) {
68
+ return `sha256:${createHash("sha256")
69
+ .update(domain)
70
+ .update("\0")
71
+ .update(canonical(value))
72
+ .digest("hex")}`;
73
+ }
74
+
75
+ function sha256Bytes(value) {
76
+ return `sha256:${createHash("sha256").update(value).digest("hex")}`;
77
+ }
78
+
79
+ function deepFreeze(value, seen = new WeakSet()) {
80
+ if (!value || typeof value !== "object" || seen.has(value)) return value;
81
+ seen.add(value);
82
+ for (const key of Reflect.ownKeys(value)) {
83
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
84
+ if (descriptor && "value" in descriptor) deepFreeze(descriptor.value, seen);
85
+ }
86
+ return Object.freeze(value);
87
+ }
88
+
89
+ function exact(value, keys, label) {
90
+ if (
91
+ !value ||
92
+ typeof value !== "object" ||
93
+ Array.isArray(value) ||
94
+ isProxy(value) ||
95
+ ![Object.prototype, null].includes(Object.getPrototypeOf(value))
96
+ ) {
97
+ throw new TypeError(`${label} must be a plain record`);
98
+ }
99
+ const actual = Reflect.ownKeys(value);
100
+ if (
101
+ actual.length !== keys.size ||
102
+ actual.some((key) => typeof key !== "string" || !keys.has(key))
103
+ ) {
104
+ throw new TypeError(`${label} has an invalid shape`);
105
+ }
106
+ for (const key of actual) {
107
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
108
+ if (!descriptor || !descriptor.enumerable || !("value" in descriptor))
109
+ throw new TypeError(`${label}.${String(key)} must be an own data field`);
110
+ }
111
+ }
112
+
113
+ function identifier(value, label) {
114
+ if (typeof value !== "string" || !ID.test(value))
115
+ throw new TypeError(`${label} is invalid`);
116
+ return value;
117
+ }
118
+
119
+ function digest(value, label) {
120
+ if (typeof value !== "string" || !DIGEST.test(value))
121
+ throw new TypeError(`${label} must be a sha256 digest`);
122
+ return value;
123
+ }
124
+
125
+ function corrupt(message, options) {
126
+ const error = new Error(message, options);
127
+ error.code = PM_EXPLORATION_PROVIDER_SETTLEMENT_CORRUPT_CODE;
128
+ throw error;
129
+ }
130
+
131
+ function normalizeDescriptor(input) {
132
+ exact(input, DESCRIPTOR_KEYS, "PM provider settlement descriptor");
133
+ const core = {
134
+ tenantId: identifier(input.tenantId, "tenantId"),
135
+ artifactTenantId: identifier(input.artifactTenantId, "artifactTenantId"),
136
+ audience: identifier(input.audience, "audience"),
137
+ purpose: identifier(input.purpose, "purpose"),
138
+ durabilityAuthorityId: identifier(
139
+ input.durabilityAuthorityId,
140
+ "durabilityAuthorityId",
141
+ ),
142
+ handlerArtifactDigest: digest(
143
+ input.handlerArtifactDigest,
144
+ "handlerArtifactDigest",
145
+ ),
146
+ };
147
+ return deepFreeze({
148
+ schema: PM_EXPLORATION_PROVIDER_SETTLEMENT_ADAPTER_SCHEMA,
149
+ ...core,
150
+ descriptorDigest: hash(
151
+ PM_EXPLORATION_PROVIDER_SETTLEMENT_ADAPTER_SCHEMA,
152
+ core,
153
+ ),
154
+ });
155
+ }
156
+
157
+ function captureDurabilityAuthority(value) {
158
+ exact(value, AUTHORITY_KEYS, "PM settlement durability authority");
159
+ const retain = Object.getOwnPropertyDescriptor(value, "retain").value;
160
+ const resolve = Object.getOwnPropertyDescriptor(value, "resolve").value;
161
+ if (
162
+ typeof retain !== "function" ||
163
+ typeof resolve !== "function" ||
164
+ isProxy(retain) ||
165
+ isProxy(resolve)
166
+ ) {
167
+ throw new TypeError(
168
+ "PM settlement durability authority requires direct retain and resolve methods",
169
+ );
170
+ }
171
+ return Object.freeze({
172
+ id: identifier(value.id, "PM settlement durability authority id"),
173
+ retain: Object.freeze((request) => Reflect.apply(retain, value, [request])),
174
+ resolve: Object.freeze((request) =>
175
+ Reflect.apply(resolve, value, [request]),
176
+ ),
177
+ });
178
+ }
179
+
180
+ function settlementRecord(descriptor, input) {
181
+ const settlement = verifyPmExplorationVolcengineSettlement(input);
182
+ const core = deepFreeze({
183
+ schema: PM_EXPLORATION_PROVIDER_SETTLEMENT_RECORD_SCHEMA,
184
+ descriptorDigest: descriptor.descriptorDigest,
185
+ settlement,
186
+ });
187
+ return deepFreeze({
188
+ ...core,
189
+ recordDigest: hash(PM_EXPLORATION_PROVIDER_SETTLEMENT_RECORD_SCHEMA, core),
190
+ });
191
+ }
192
+
193
+ function persistenceReceipt(settlementDigest, recordDigest) {
194
+ return deepFreeze({
195
+ schema: PM_EXPLORATION_PROVIDER_PERSISTENCE_SCHEMA,
196
+ settlementDigest,
197
+ persisted: true,
198
+ durable: true,
199
+ recordDigest,
200
+ });
201
+ }
202
+
203
+ function validateDurabilityReceipt(
204
+ value,
205
+ binding,
206
+ authorityId,
207
+ expectedSchema,
208
+ label,
209
+ ) {
210
+ exact(value, DURABILITY_RECEIPT_KEYS, label);
211
+ if (
212
+ value.schema !== expectedSchema ||
213
+ value.authenticated !== true ||
214
+ value.durable !== true ||
215
+ value.authorityId !== authorityId ||
216
+ value.artifactTenantId !== binding.artifactTenantId ||
217
+ value.digest !== binding.digest ||
218
+ value.purpose !== binding.purpose ||
219
+ value.ref !== binding.ref ||
220
+ value.retention !== binding.retention ||
221
+ value.type !== binding.type ||
222
+ !DIGEST.test(value.receiptDigest ?? "")
223
+ ) {
224
+ corrupt(`${label} is not authenticated durable evidence`);
225
+ }
226
+ return value;
227
+ }
228
+
229
+ function safeBytes(value, label) {
230
+ if (
231
+ !value ||
232
+ typeof value !== "object" ||
233
+ isProxy(value) ||
234
+ !(
235
+ (Buffer.isBuffer(value) &&
236
+ Object.getPrototypeOf(value) === Buffer.prototype) ||
237
+ (isUint8Array(value) &&
238
+ Object.getPrototypeOf(value) === Uint8Array.prototype)
239
+ )
240
+ ) {
241
+ corrupt(`${label} bytes are invalid`);
242
+ }
243
+ return Buffer.from(value);
244
+ }
245
+
246
+ export class PmExplorationProviderSettlementAdapter {
247
+ #artifactPut;
248
+ #authority;
249
+
250
+ constructor({ descriptor, artifactPorts, artifactDurabilityAuthority } = {}) {
251
+ this.descriptor = normalizeDescriptor(descriptor);
252
+ if (
253
+ !artifactPorts ||
254
+ typeof artifactPorts !== "object" ||
255
+ isProxy(artifactPorts) ||
256
+ Object.getPrototypeOf(artifactPorts) !== EvolutionArtifactPorts.prototype
257
+ ) {
258
+ throw new TypeError("EvolutionArtifactPorts exact instance is required");
259
+ }
260
+ this.#artifactPut =
261
+ EvolutionArtifactPorts.prototype.putCanonical.bind(artifactPorts);
262
+ this.#authority = captureDurabilityAuthority(artifactDurabilityAuthority);
263
+ if (this.#authority.id !== this.descriptor.durabilityAuthorityId) {
264
+ throw new TypeError(
265
+ "PM settlement durability authority differs from the descriptor",
266
+ );
267
+ }
268
+ STORE_PORTS.set(
269
+ this,
270
+ Object.freeze({
271
+ inspect: () => this.descriptor,
272
+ persistSettlement: (settlement) => this.persistSettlement(settlement),
273
+ verifySettlementPersistence: (settlement, persistence) =>
274
+ this.verifySettlementPersistence(settlement, persistence),
275
+ }),
276
+ );
277
+ Object.freeze(this);
278
+ }
279
+
280
+ #materialize(input) {
281
+ const record = settlementRecord(this.descriptor, input);
282
+ const published = this.#artifactPut(ARTIFACT_TYPE, record, {
283
+ audience: this.descriptor.audience,
284
+ purpose: this.descriptor.purpose,
285
+ retention: "ledger",
286
+ });
287
+ if (
288
+ !published?.ref ||
289
+ published.digest !== published.ref.digest ||
290
+ published.receipt?.persisted !== true ||
291
+ published.receipt.readbackVerified !== true ||
292
+ published.receipt.integrityVerified !== true ||
293
+ published.receipt.retention !== "ledger"
294
+ ) {
295
+ corrupt("PM provider settlement artifact persistence was not confirmed");
296
+ }
297
+ const durableRecord = deepFreeze({
298
+ audience: this.descriptor.audience,
299
+ purpose: this.descriptor.purpose,
300
+ retention: "ledger",
301
+ schema: EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA,
302
+ tenantId: this.descriptor.artifactTenantId,
303
+ type: ARTIFACT_TYPE,
304
+ value: record,
305
+ });
306
+ const bytes = Buffer.from(canonical(durableRecord), "utf8");
307
+ if (sha256Bytes(bytes) !== published.digest) {
308
+ corrupt("PM provider settlement canonical artifact bytes differ");
309
+ }
310
+ const binding = deepFreeze({
311
+ artifactTenantId: this.descriptor.artifactTenantId,
312
+ digest: published.digest,
313
+ purpose: this.descriptor.purpose,
314
+ ref: published.ref.ref,
315
+ retention: "ledger",
316
+ schema: EVOLUTION_ARTIFACT_DURABILITY_BINDING_SCHEMA,
317
+ type: ARTIFACT_TYPE,
318
+ });
319
+ return { binding, bytes, published, record };
320
+ }
321
+
322
+ #resolve(materialized) {
323
+ const result = this.#authority.resolve(
324
+ Object.freeze({
325
+ artifactTenantId: materialized.binding.artifactTenantId,
326
+ digest: materialized.binding.digest,
327
+ purpose: materialized.binding.purpose,
328
+ ref: materialized.binding.ref,
329
+ retention: materialized.binding.retention,
330
+ schema: EVOLUTION_ARTIFACT_DURABILITY_RESOLVE_REQUEST_SCHEMA,
331
+ }),
332
+ );
333
+ if (isPromise(result))
334
+ corrupt("PM provider settlement durability resolve must be synchronous");
335
+ exact(
336
+ result,
337
+ DURABILITY_RESOLUTION_KEYS,
338
+ "PM provider settlement durability resolution",
339
+ );
340
+ validateDurabilityReceipt(
341
+ Object.fromEntries(
342
+ [...DURABILITY_RECEIPT_KEYS].map((key) => [key, result[key]]),
343
+ ),
344
+ materialized.binding,
345
+ this.#authority.id,
346
+ EVOLUTION_ARTIFACT_DURABILITY_RESOLUTION_SCHEMA,
347
+ "PM provider settlement durability resolution",
348
+ );
349
+ const bytes = safeBytes(
350
+ result.bytes,
351
+ "PM provider settlement durability resolution",
352
+ );
353
+ if (!bytes.equals(materialized.bytes))
354
+ corrupt("PM provider settlement durability readback differs");
355
+ }
356
+
357
+ persistSettlement(input) {
358
+ const materialized = this.#materialize(input);
359
+ const retained = this.#authority.retain(
360
+ Object.freeze({
361
+ binding: materialized.binding,
362
+ bytes: Buffer.from(materialized.bytes),
363
+ schema: EVOLUTION_ARTIFACT_DURABILITY_RETAIN_REQUEST_SCHEMA,
364
+ }),
365
+ );
366
+ if (isPromise(retained))
367
+ corrupt("PM provider settlement durability retain must be synchronous");
368
+ validateDurabilityReceipt(
369
+ retained,
370
+ materialized.binding,
371
+ this.#authority.id,
372
+ EVOLUTION_ARTIFACT_DURABILITY_RECEIPT_SCHEMA,
373
+ "PM provider settlement durability receipt",
374
+ );
375
+ this.#resolve(materialized);
376
+ return persistenceReceipt(
377
+ materialized.record.settlement.settlementDigest,
378
+ materialized.published.digest,
379
+ );
380
+ }
381
+
382
+ verifySettlementPersistence(input, persistence) {
383
+ exact(
384
+ persistence,
385
+ new Set([
386
+ "schema",
387
+ "settlementDigest",
388
+ "persisted",
389
+ "durable",
390
+ "recordDigest",
391
+ ]),
392
+ "PM provider settlement persistence",
393
+ );
394
+ const materialized = this.#materialize(input);
395
+ if (
396
+ persistence.schema !== PM_EXPLORATION_PROVIDER_PERSISTENCE_SCHEMA ||
397
+ persistence.settlementDigest !==
398
+ materialized.record.settlement.settlementDigest ||
399
+ persistence.persisted !== true ||
400
+ persistence.durable !== true ||
401
+ persistence.recordDigest !== materialized.published.digest
402
+ ) {
403
+ corrupt("PM provider settlement persistence does not match the artifact");
404
+ }
405
+ this.#resolve(materialized);
406
+ return persistenceReceipt(
407
+ materialized.record.settlement.settlementDigest,
408
+ materialized.published.digest,
409
+ );
410
+ }
411
+ }
412
+
413
+ export function capturePmExplorationProviderSettlementStore(value) {
414
+ const ports = STORE_PORTS.get(value);
415
+ if (!ports)
416
+ throw new TypeError(
417
+ "a real PmExplorationProviderSettlementAdapter is required",
418
+ );
419
+ return ports;
420
+ }