chainlesschain 0.166.38 → 0.166.39
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/package.json +6 -1
- package/scripts/governed-learning-local-attestor-service.mjs +222 -0
- package/scripts/governed-learning-local-attestor-trust-approval-service.mjs +338 -0
- package/scripts/governed-learning-local-attestor-trust-operations-service.mjs +575 -0
- package/scripts/governed-learning-windows-secure-pipe-broker.ps1 +375 -0
- package/src/assets/web-panel/assets/{AIOps-DBbcVPqB.js → AIOps-qWUdiFr5.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-D5vETPOk.js → ActionButton-B_f7go3E.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-WVhas3Fw.js → Analytics-hSGFlSkB.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CSTRI93Q.js → AppLayout-CCYGgj71.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-BZT8FOoE.js → Artifacts-BdS1H9gq.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CT2-Tsby.js → Audit-Cck9IebC.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BWA5LNBe.js → BackgroundAgents-DZzoM_QS.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-B-zEbldA.js → Backup-D8H_QtGu.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BAEwtdNT.js → BaseInput-CTsNF_pu.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BT1-y6t1.js → Chat-CcEiTYY8.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BVijMHeO.js → ChatBubbleRenderer-9BY1DPuc.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-B8IJYZsD.js → Checkbox-BPB9NNJx.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DEt453nL.js → Codegen-CKKMf7jD.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DWuVSmZv.js → Col-DpSSB4Uu.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CcoNuU33.js → Community-CfR6ikoH.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BKtuIYWA.js → Compact-CqnkGGjK.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-bHzxGq3P.js → Compliance-9IzhdVQb.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BY2Kb15t.js → Cowork-eXsgH33N.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DC-j0jvp.js → Cron-DvkzHFRi.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CzEuAHQz.js → Crosschain--az9d9f7.js} +1 -1
- package/src/assets/web-panel/assets/{DID-7QUNq6Fz.js → DID-_Eb4kpnJ.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CT6RiEFl.js → Dashboard-aDVisdXj.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CW8IPY7r.js → Dropdown-oQ54XzS9.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-Zt8WOLuN.js → EmailListRenderer-BUPdMau1.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-B6aymxi7.js → FamilyGuardDashboard-DtQTOCQI.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BiuFrRq0.js → Federation-Cpnb3Moe.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DaiOAkHa.js → FormItemContext-DmsrJkeU.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-D1KbDpXs.js → GenericCardRenderer-CpFDYnh3.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BILl0huA.js → Git-HFG17p7Q.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CLyhrPrh.js → Governance-D5Z5c7N8.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DyNhiIpK.js → Inference-DH159h74.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Bor_ye4m.js → KnowledgeGraph-DuL1pcJD.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-ZDqbu8kg.js → Logs-Gqn8hFsM.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-NHJaejHI.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-DbDi29dH.js → Marketplace-BArcWifg.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DfU8dWbV.js → McpTools-Q1BfBSnd.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-DeAz-2-6.js → Memory-Cz8nRL7N.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-ws3TJXal.js → MobileBridge-CRuxLRJw.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CGwVfeTv.js → MobileProjects-B1CQIAGp.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BtJjJJpl.js → Mtc-CFhXZbPk.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-BNZwipXs.js → MtcAudit-C69LqcZ5.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-9mSOrKWA.js → Multisig-y7yZeTTG.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-gz1lEDED.js → NLProgramming-DgjhoWea.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BeufuOVX.js → Notes-DRc2WTDh.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CbFyi9jZ.js → NotificationSettings-CLPx24yn.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CMSNA4CO.js +1 -0
- package/src/assets/web-panel/assets/{Organization-DKBKNViH.js → Organization-Dm6LIyhZ.js} +2 -2
- package/src/assets/web-panel/assets/{Overflow-CvPfKE1x.js → Overflow-DP4DOYd-.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DjL2q8og.js → P2P-HFwvtFI1.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-D9gPfKRM.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-BUoNho3w.js → Permissions-Bdtxniwh.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-C4Iu2Pic.js → PersonalDataHub-Dgl2AbES.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-BiDrIlwr.js → Pipeline-DpZrzYwK.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BnvU6vGp.js → Privacy-EQ551c0t.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DDzoyhnH.js → ProjectInit-xUSeczsM.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CV6b43H0.js → ProjectSettings-B66Sr_t8.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-B0k1907g.js → Projects-B4zikj95.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DaeuFo-x.js → Providers-DjLbqQPh.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-C03Bll1h.js → QrScannerModal-KVsAQCd_.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Cn9nLaen.js → QuickAsk-C4noJXu8.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BXfkC8Ts.js → Recommend-Cn15clqY.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DNj6D_LI.js → RemoteSession-DdonMFwH.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-DDDIwiUI.js → Reputation-Bqe3NwWN.js} +1 -1
- package/src/assets/web-panel/assets/{Row-JukNm-id.js → Row-CnxBgjkD.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-B1AhzL2z.js → RssFeed-CSRrgZyK.js} +2 -2
- package/src/assets/web-panel/assets/{Search-B5y6_DVm.js → Search-DTUYUfFx.js} +1 -1
- package/src/assets/web-panel/assets/{Security-C2pvv32x.js → Security-BHExHVIm.js} +3 -3
- package/src/assets/web-panel/assets/{Services-DBka7ppY.js → Services-B_IWqPes.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DfPwNTSh.js → Skeleton-C_oAtzmX.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Cs4ntp-l.js → Skills-maJNokSL.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CrUJ0guM.js → Sla-CMM_ZsLH.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BFbokLV1.js → SpeechSettings-D7w_oNwK.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CSnh1o3D.js → SyncSettings-D0Zl3NIr.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-CQZppIPo.js → Tasks-Bs0H0ctR.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BqLeHq7Z.js → Templates-C6T6oCpR.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CkzPA-ri.js → Tenant-ByL-kAYO.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-D5IRhnu6.js → Terminal-6JXNhc3b.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-ICdiYzgz.js → TimelineRenderer-KiuUtCsl.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-89CaZBwe.js → Tokens-C0TWTIER.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-Di251qR1.js → Trigger-DpC5aaJu.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-M4sC3Mv6.js → Trust-lqqflCwv.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BL7EUWxj.js → UkeySign-BYSlVfBc.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BV5Se5il.js → VideoEditing-DX08oo_R.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-IoY13rov.js → Wallet-CcIFPvzL.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DKFPq0uV.js → WebAuthn-D8DfxfVT.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-oizkYeQD.js → WorkflowEditor-Csadpaln.js} +1 -1
- package/src/assets/web-panel/assets/{chat-Du6ZthE5.js → chat-CewHWc_T.js} +1 -1
- package/src/assets/web-panel/assets/{colors-I2ie73HS.js → colors-B8at89r3.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C-02XOOx.js → compact-item-v_gxtF5-.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DgP09zg2.js → createContext-BOwFpJqA.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DenB_kSS.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-kWDasRib.js → hasIn-DjHUzt7E.js} +1 -1
- package/src/assets/web-panel/assets/{index-HH3Zccc0.js → index-1Tfwr_GA.js} +1 -1
- package/src/assets/web-panel/assets/{index-M9mzJo6V.js → index-5qmLo1us.js} +1 -1
- package/src/assets/web-panel/assets/index-B8bNwM9U.js +1 -0
- package/src/assets/web-panel/assets/{index-CDM6OO4D.js → index-BC20EQ7h.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cokjvq67.js → index-BGrmPk8T.js} +1 -1
- package/src/assets/web-panel/assets/{index-5Ll5Fdqb.js → index-BPJ7uL2Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-H_31JkaZ.js → index-BRNyE3Kb.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9HwtJX5.js → index-BVPsegMN.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bpz5RnQy.js → index-B_egGFcR.js} +3 -3
- package/src/assets/web-panel/assets/{index-CjuJ1FYZ.js → index-BdZLA7k9.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cx5dAdFu.js → index-Bk_Te9OR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHSghc3j.js → index-Bz8C8VXx.js} +1 -1
- package/src/assets/web-panel/assets/{index-RwcHDSqP.js → index-C7MHbmwn.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtbMRqD-.js → index-CFL1Hewx.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0EQSoEb.js → index-CV1SgaBd.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3D5NSjS.js → index-CXIPAeAB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZ6bWk4x.js → index-Ca8YZU2B.js} +1 -1
- package/src/assets/web-panel/assets/{index-AtAiEmjM.js → index-Caf9UjhG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKJ-d5F1.js → index-Cb1uNDOv.js} +1 -1
- package/src/assets/web-panel/assets/{index-mF8UmKqp.js → index-CquUCUzS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpOQeTac.js → index-CwHoF-TP.js} +1 -1
- package/src/assets/web-panel/assets/{index-Na5QA1LE.js → index-Cxk0mCoQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUvpjPMv.js → index-D3o-pacB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZcdP3id.js → index-DA3n0Y28.js} +1 -1
- package/src/assets/web-panel/assets/index-DC0cpgIP.js +1 -0
- package/src/assets/web-panel/assets/{index-LLQQqj9B.js → index-DRRK_8Eg.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5LV04FO.js → index-DUMvVGyf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BkcCllZ7.js → index-DdHdbXpy.js} +1 -1
- package/src/assets/web-panel/assets/{index-OYyn8GoU.js → index-Ddw05Myq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgogPjKJ.js → index-Dfrb3Prv.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbHEQTU6.js → index-DiKaYIdo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQCdk4dn.js → index-DmZLZsyC.js} +1 -1
- package/src/assets/web-panel/assets/{index-uHI8QHu4.js → index-FgUrhq_H.js} +1 -1
- package/src/assets/web-panel/assets/{index-I4A_y2Ee.js → index-Khw7wzVk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSlTGxUJ.js → index-San3zacc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYxia8nl.js → index-coOi37of.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkP2DW3a.js → index-hyeBuocp.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ryflob2W.js → index-uk59xr0W.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcVj7YJB.js → index-wjvn8-9F.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BPHGo-UX.js → initDefaultProps-Id2dFdjh.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BBr8JvWc.js → motion-DRxtwxng.js} +1 -1
- package/src/assets/web-panel/assets/{move-CdKWToz7.js → move-BDYvdTb6.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-B8tkkKBs.js → mtc-parser-cz8LGI8Z.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DN4aP33H.js → omit-DHJeh6tH.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CoHRkRJq.js → pickAttrs-XJEQIp7e.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DpGGGAPa.js → placementArrow-AFcf8lEn.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BabRsZo5.js → responsiveObserve-CDEeBxs1.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DJjyrwqK.js → slide-CvbVfi6T.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BaRVkO5S.js → statusUtils-DtCyuEnq.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-HcMYUjTR.js → styleChecker--UgmTsGY.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-c3IBzp2l.js → useFlexGapSupport-D9i1as-Y.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DD7igwyF.js → useFs-CJx3zw01.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-GEF0hhnd.js → usePersonalDataHub-ZsIKYdZv.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-D51u7zqF.js → vnode-B2RGEQG4.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-tXG23Lc9.js → zoom-ob-0px2z.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/evolution-attestor-trust.js +113 -0
- package/src/commands/evolution.js +2 -0
- package/src/commands/learning.js +34 -5
- package/src/data/changelog.json +13 -0
- package/src/lib/evolution/evolution-artifact-ports.js +21 -0
- package/src/lib/evolution/evolution-deployment-loader.js +56 -0
- package/src/lib/evolution/evolution-immutable-ledger-segment-store.js +812 -0
- package/src/lib/evolution/evolution-ledger-file-manifest-catalog.js +218 -0
- package/src/lib/evolution/evolution-ledger-manifest-catalog.js +472 -0
- package/src/lib/evolution/evolution-ledger-manifest-chain.js +997 -0
- package/src/lib/evolution/evolution-ledger-manifest-head-store.js +408 -0
- package/src/lib/evolution/evolution-ledger-manifest-witness-adapter.js +554 -0
- package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +460 -0
- package/src/lib/evolution/governed-skill-synthesis-attestor-ipc-endpoint.js +94 -0
- package/src/lib/evolution/governed-skill-synthesis-attestor-trust-approval-client.js +485 -0
- package/src/lib/evolution/governed-skill-synthesis-attestor-trust-ipc-capability.js +200 -0
- package/src/lib/evolution/governed-skill-synthesis-attestor-trust-ledger.js +1222 -0
- package/src/lib/evolution/governed-skill-synthesis-attestor-trust-operations-cli-host.js +802 -0
- package/src/lib/evolution/governed-skill-synthesis-attestor-trust-operations-client.js +445 -0
- package/src/lib/evolution/governed-skill-synthesis-attestor-trust-operations.js +1082 -0
- package/src/lib/evolution/governed-skill-synthesis-attestor-trust-operator-registry.js +1453 -0
- package/src/lib/evolution/governed-skill-synthesis-candidate-evaluator.js +147 -0
- package/src/lib/evolution/governed-skill-synthesis-cli-host.js +115 -0
- package/src/lib/evolution/governed-skill-synthesis-evaluation-ledger-adapter.js +715 -0
- package/src/lib/evolution/governed-skill-synthesis-external-attestor.js +499 -0
- package/src/lib/evolution/governed-skill-synthesis-model-evaluator.js +514 -0
- package/src/lib/evolution/governed-skill-synthesis-process-attestor-worker.mjs +208 -0
- package/src/lib/evolution/governed-skill-synthesis-process-attestor.js +557 -0
- package/src/lib/evolution/governed-skill-synthesis-process-grader-worker.mjs +143 -0
- package/src/lib/evolution/governed-skill-synthesis-process-grader.js +444 -0
- package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +220 -0
- package/src/lib/evolution/governed-skill-synthesis-windows-secure-pipe-host.js +236 -0
- package/src/lib/hook-audit-store.js +68 -2
- package/src/lib/hooks-v2-runtime.js +52 -26
- package/src/lib/learning/skill-synthesizer.js +66 -5
- package/src/lib/remote-read-loop-guard.js +30 -3
- package/src/assets/web-panel/assets/MarkdownRenderer-DnSfkf98.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CFbhBT44.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-Cv9PLMWJ.js +0 -7
- package/src/assets/web-panel/assets/devWarning-CxKkOIjh.js +0 -1
- package/src/assets/web-panel/assets/index-b5a6l3Uu.js +0 -1
- package/src/assets/web-panel/assets/index-xt-BOyp_.js +0 -1
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import { types as utilTypes } from "node:util";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
captureEvolutionLedgerManifestAuthority,
|
|
5
|
+
verifyEvolutionLedgerManifestHead,
|
|
6
|
+
} from "./evolution-ledger-manifest-chain.js";
|
|
7
|
+
|
|
8
|
+
export const EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_SCHEMA =
|
|
9
|
+
"chainlesschain.evolution-ledger-manifest-head-store/v2";
|
|
10
|
+
export const EVOLUTION_LEDGER_MANIFEST_HEAD_CAS_REQUEST_SCHEMA =
|
|
11
|
+
"chainlesschain.evolution-ledger-manifest-head-cas-request/v2";
|
|
12
|
+
export const EVOLUTION_LEDGER_MANIFEST_HEAD_CAS_RESULT_SCHEMA =
|
|
13
|
+
"chainlesschain.evolution-ledger-manifest-head-cas-result/v2";
|
|
14
|
+
|
|
15
|
+
export const EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE =
|
|
16
|
+
"CC_EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID";
|
|
17
|
+
export const EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE =
|
|
18
|
+
"CC_EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT";
|
|
19
|
+
export const EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_UNAVAILABLE_CODE =
|
|
20
|
+
"CC_EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_UNAVAILABLE";
|
|
21
|
+
export const EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_COMMIT_UNKNOWN_CODE =
|
|
22
|
+
"CC_EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_COMMIT_UNKNOWN";
|
|
23
|
+
|
|
24
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
25
|
+
const STORES = new WeakSet();
|
|
26
|
+
const CONFIG_KEYS = new Set([
|
|
27
|
+
"authority",
|
|
28
|
+
"compareAndSet",
|
|
29
|
+
"descriptor",
|
|
30
|
+
"load",
|
|
31
|
+
]);
|
|
32
|
+
const REQUEST_KEYS = new Set(["expectedHeadDigest", "nextHead"]);
|
|
33
|
+
const CAS_RESULT_KEYS = new Set(["committed", "head", "schema"]);
|
|
34
|
+
const SCOPE_KEYS = new Set([
|
|
35
|
+
"epoch",
|
|
36
|
+
"ledgerId",
|
|
37
|
+
"maximumEventsPerSegment",
|
|
38
|
+
"tenantId",
|
|
39
|
+
]);
|
|
40
|
+
|
|
41
|
+
export class EvolutionLedgerManifestHeadStoreError extends Error {
|
|
42
|
+
constructor(code, message, options = undefined) {
|
|
43
|
+
super(message, options);
|
|
44
|
+
this.name = "EvolutionLedgerManifestHeadStoreError";
|
|
45
|
+
this.code = code;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function failure(code, message, options = undefined) {
|
|
50
|
+
return new EvolutionLedgerManifestHeadStoreError(code, message, options);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function rejectProxy(
|
|
54
|
+
value,
|
|
55
|
+
label,
|
|
56
|
+
code = EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
57
|
+
) {
|
|
58
|
+
if (
|
|
59
|
+
(typeof value === "object" && value !== null) ||
|
|
60
|
+
typeof value === "function"
|
|
61
|
+
) {
|
|
62
|
+
if (utilTypes.isProxy(value))
|
|
63
|
+
throw failure(code, `${label} must not be a Proxy`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function exactRecord(
|
|
68
|
+
value,
|
|
69
|
+
keys,
|
|
70
|
+
label,
|
|
71
|
+
code = EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
72
|
+
) {
|
|
73
|
+
rejectProxy(value, label, code);
|
|
74
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
75
|
+
throw failure(code, `${label} must be a record`);
|
|
76
|
+
}
|
|
77
|
+
const prototype = Object.getPrototypeOf(value);
|
|
78
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
79
|
+
throw failure(code, `${label} must use a plain prototype`);
|
|
80
|
+
}
|
|
81
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
82
|
+
const names = Object.keys(descriptors);
|
|
83
|
+
if (names.length !== keys.size || names.some((name) => !keys.has(name))) {
|
|
84
|
+
throw failure(code, `${label} fields are invalid`);
|
|
85
|
+
}
|
|
86
|
+
for (const name of names) {
|
|
87
|
+
if (!("value" in descriptors[name])) {
|
|
88
|
+
throw failure(code, `${label}.${name} must be an own data property`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return descriptors;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function data(descriptors, key) {
|
|
95
|
+
return descriptors[key].value;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function nullableDigest(value, label, code) {
|
|
99
|
+
if (value === null) return null;
|
|
100
|
+
if (!DIGEST.test(value || ""))
|
|
101
|
+
throw failure(code, `${label} must be sha256-bound or null`);
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function sync(
|
|
106
|
+
value,
|
|
107
|
+
label,
|
|
108
|
+
code = EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_UNAVAILABLE_CODE,
|
|
109
|
+
) {
|
|
110
|
+
rejectProxy(value, label, code);
|
|
111
|
+
if (utilTypes.isPromise(value))
|
|
112
|
+
throw failure(code, `${label} must be synchronous`);
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function scope(value) {
|
|
117
|
+
const fields = exactRecord(
|
|
118
|
+
value,
|
|
119
|
+
SCOPE_KEYS,
|
|
120
|
+
"manifest head store descriptor",
|
|
121
|
+
);
|
|
122
|
+
const maximum = data(fields, "maximumEventsPerSegment");
|
|
123
|
+
if (!Number.isSafeInteger(maximum) || maximum < 1 || maximum > 1024) {
|
|
124
|
+
throw failure(
|
|
125
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
126
|
+
"descriptor.maximumEventsPerSegment is invalid",
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
const output = {};
|
|
130
|
+
for (const key of ["epoch", "ledgerId", "tenantId"]) {
|
|
131
|
+
const valueAtKey = data(fields, key);
|
|
132
|
+
if (
|
|
133
|
+
typeof valueAtKey !== "string" ||
|
|
134
|
+
valueAtKey.trim() !== valueAtKey ||
|
|
135
|
+
valueAtKey.length < 1 ||
|
|
136
|
+
valueAtKey.length > 512 ||
|
|
137
|
+
valueAtKey.includes("\0")
|
|
138
|
+
) {
|
|
139
|
+
throw failure(
|
|
140
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
141
|
+
`descriptor.${key} is invalid`,
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
output[key] = valueAtKey;
|
|
145
|
+
}
|
|
146
|
+
output.maximumEventsPerSegment = maximum;
|
|
147
|
+
return Object.freeze(output);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function verifyHead(authority, descriptor, value, code) {
|
|
151
|
+
try {
|
|
152
|
+
return verifyEvolutionLedgerManifestHead({
|
|
153
|
+
authority,
|
|
154
|
+
descriptor,
|
|
155
|
+
head: value,
|
|
156
|
+
});
|
|
157
|
+
} catch (cause) {
|
|
158
|
+
if (cause?.code === "CC_EVOLUTION_LEDGER_MANIFEST_UNAVAILABLE") {
|
|
159
|
+
throw failure(
|
|
160
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_UNAVAILABLE_CODE,
|
|
161
|
+
"manifest head signature verification is unavailable",
|
|
162
|
+
{ cause },
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
throw failure(code, "manifest head is invalid", { cause });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function request(value, authority, descriptor) {
|
|
170
|
+
const fields = exactRecord(value, REQUEST_KEYS, "manifest head CAS request");
|
|
171
|
+
const expectedHeadDigest = nullableDigest(
|
|
172
|
+
data(fields, "expectedHeadDigest"),
|
|
173
|
+
"expectedHeadDigest",
|
|
174
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
175
|
+
);
|
|
176
|
+
const nextHead = verifyHead(
|
|
177
|
+
authority,
|
|
178
|
+
descriptor,
|
|
179
|
+
data(fields, "nextHead"),
|
|
180
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
181
|
+
);
|
|
182
|
+
if (nextHead.previousHeadDigest !== expectedHeadDigest) {
|
|
183
|
+
throw failure(
|
|
184
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
185
|
+
"next manifest head previousHeadDigest does not match its CAS expectation",
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
return Object.freeze({ expectedHeadDigest, nextHead });
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function result(value, authority, descriptor) {
|
|
192
|
+
const fields = exactRecord(
|
|
193
|
+
value,
|
|
194
|
+
CAS_RESULT_KEYS,
|
|
195
|
+
"manifest head CAS result",
|
|
196
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE,
|
|
197
|
+
);
|
|
198
|
+
if (
|
|
199
|
+
data(fields, "schema") !== EVOLUTION_LEDGER_MANIFEST_HEAD_CAS_RESULT_SCHEMA
|
|
200
|
+
) {
|
|
201
|
+
throw failure(
|
|
202
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE,
|
|
203
|
+
"manifest head CAS result schema is invalid",
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
const committed = data(fields, "committed");
|
|
207
|
+
if (typeof committed !== "boolean") {
|
|
208
|
+
throw failure(
|
|
209
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE,
|
|
210
|
+
"manifest head CAS committed flag is invalid",
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
const rawHead = data(fields, "head");
|
|
214
|
+
const head =
|
|
215
|
+
rawHead === null
|
|
216
|
+
? null
|
|
217
|
+
: verifyHead(
|
|
218
|
+
authority,
|
|
219
|
+
descriptor,
|
|
220
|
+
rawHead,
|
|
221
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE,
|
|
222
|
+
);
|
|
223
|
+
if (committed && head === null) {
|
|
224
|
+
throw failure(
|
|
225
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE,
|
|
226
|
+
"a committed manifest head CAS result must return a head",
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
return Object.freeze({ committed, head });
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function sameHead(left, right) {
|
|
233
|
+
return (left?.headDigest ?? null) === (right?.headDigest ?? null);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export function createEvolutionLedgerManifestHeadStore(options = undefined) {
|
|
237
|
+
const fields = exactRecord(
|
|
238
|
+
options,
|
|
239
|
+
CONFIG_KEYS,
|
|
240
|
+
"manifest head store configuration",
|
|
241
|
+
);
|
|
242
|
+
const descriptor = scope(data(fields, "descriptor"));
|
|
243
|
+
const authority = captureEvolutionLedgerManifestAuthority(
|
|
244
|
+
data(fields, "authority"),
|
|
245
|
+
);
|
|
246
|
+
const load = data(fields, "load");
|
|
247
|
+
const compareAndSet = data(fields, "compareAndSet");
|
|
248
|
+
rejectProxy(load, "manifest head store load");
|
|
249
|
+
rejectProxy(compareAndSet, "manifest head store compareAndSet");
|
|
250
|
+
if (typeof load !== "function" || typeof compareAndSet !== "function") {
|
|
251
|
+
throw failure(
|
|
252
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
253
|
+
"manifest head store requires synchronous load and compareAndSet functions",
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const read = () => {
|
|
258
|
+
let rawHead;
|
|
259
|
+
try {
|
|
260
|
+
rawHead = sync(
|
|
261
|
+
Reflect.apply(load, undefined, [Object.freeze({ ...descriptor })]),
|
|
262
|
+
"manifest head store load result",
|
|
263
|
+
);
|
|
264
|
+
} catch (cause) {
|
|
265
|
+
if (cause instanceof EvolutionLedgerManifestHeadStoreError) throw cause;
|
|
266
|
+
throw failure(
|
|
267
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_UNAVAILABLE_CODE,
|
|
268
|
+
"manifest head store load failed",
|
|
269
|
+
{ cause },
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
return rawHead === null
|
|
273
|
+
? null
|
|
274
|
+
: verifyHead(
|
|
275
|
+
authority,
|
|
276
|
+
descriptor,
|
|
277
|
+
rawHead,
|
|
278
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE,
|
|
279
|
+
);
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
const store = Object.freeze({
|
|
283
|
+
descriptor: Object.freeze({
|
|
284
|
+
...descriptor,
|
|
285
|
+
schema: EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_SCHEMA,
|
|
286
|
+
}),
|
|
287
|
+
read,
|
|
288
|
+
commit(input) {
|
|
289
|
+
const normalized = request(input, authority, descriptor);
|
|
290
|
+
const observed = read();
|
|
291
|
+
if (!sameHead(observed, { headDigest: normalized.expectedHeadDigest })) {
|
|
292
|
+
return Object.freeze({
|
|
293
|
+
committed: false,
|
|
294
|
+
conflict: true,
|
|
295
|
+
head: observed,
|
|
296
|
+
schema: EVOLUTION_LEDGER_MANIFEST_HEAD_CAS_RESULT_SCHEMA,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
let rawResult;
|
|
300
|
+
try {
|
|
301
|
+
rawResult = sync(
|
|
302
|
+
Reflect.apply(compareAndSet, undefined, [
|
|
303
|
+
Object.freeze({
|
|
304
|
+
expectedHeadDigest: normalized.expectedHeadDigest,
|
|
305
|
+
nextHead: normalized.nextHead,
|
|
306
|
+
schema: EVOLUTION_LEDGER_MANIFEST_HEAD_CAS_REQUEST_SCHEMA,
|
|
307
|
+
}),
|
|
308
|
+
]),
|
|
309
|
+
"manifest head store compareAndSet result",
|
|
310
|
+
);
|
|
311
|
+
} catch (cause) {
|
|
312
|
+
throw failure(
|
|
313
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_COMMIT_UNKNOWN_CODE,
|
|
314
|
+
"manifest head CAS acknowledgement was lost; reopen before retrying",
|
|
315
|
+
{ cause },
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
let acknowledgement;
|
|
319
|
+
try {
|
|
320
|
+
acknowledgement = result(rawResult, authority, descriptor);
|
|
321
|
+
} catch (cause) {
|
|
322
|
+
throw failure(
|
|
323
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_COMMIT_UNKNOWN_CODE,
|
|
324
|
+
"manifest head CAS acknowledgement is invalid; reopen before retrying",
|
|
325
|
+
{ cause },
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
if (!acknowledgement.committed) {
|
|
329
|
+
if (sameHead(acknowledgement.head, normalized.nextHead)) {
|
|
330
|
+
throw failure(
|
|
331
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE,
|
|
332
|
+
"manifest head CAS denied a head that it returned as current",
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
return Object.freeze({
|
|
336
|
+
committed: false,
|
|
337
|
+
conflict: true,
|
|
338
|
+
head: acknowledgement.head,
|
|
339
|
+
schema: EVOLUTION_LEDGER_MANIFEST_HEAD_CAS_RESULT_SCHEMA,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
if (!sameHead(acknowledgement.head, normalized.nextHead)) {
|
|
343
|
+
throw failure(
|
|
344
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_CORRUPT_CODE,
|
|
345
|
+
"manifest head CAS acknowledged substituted data",
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
let readback;
|
|
349
|
+
try {
|
|
350
|
+
readback = read();
|
|
351
|
+
} catch (cause) {
|
|
352
|
+
if (cause instanceof EvolutionLedgerManifestHeadStoreError) {
|
|
353
|
+
throw failure(
|
|
354
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_COMMIT_UNKNOWN_CODE,
|
|
355
|
+
"manifest head CAS may be committed; reopen before retrying",
|
|
356
|
+
{ cause },
|
|
357
|
+
);
|
|
358
|
+
}
|
|
359
|
+
throw cause;
|
|
360
|
+
}
|
|
361
|
+
if (!sameHead(readback, normalized.nextHead)) {
|
|
362
|
+
throw failure(
|
|
363
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_COMMIT_UNKNOWN_CODE,
|
|
364
|
+
"manifest head CAS readback differs; reopen before retrying",
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
return Object.freeze({
|
|
368
|
+
committed: true,
|
|
369
|
+
conflict: false,
|
|
370
|
+
head: readback,
|
|
371
|
+
schema: EVOLUTION_LEDGER_MANIFEST_HEAD_CAS_RESULT_SCHEMA,
|
|
372
|
+
});
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
STORES.add(store);
|
|
376
|
+
return store;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
export function captureEvolutionLedgerManifestHeadStore(
|
|
380
|
+
value,
|
|
381
|
+
expected = undefined,
|
|
382
|
+
) {
|
|
383
|
+
if (!STORES.has(value)) {
|
|
384
|
+
throw new TypeError(
|
|
385
|
+
"a branded Evolution Ledger manifest head store is required",
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
if (expected !== undefined) {
|
|
389
|
+
const fields = exactRecord(
|
|
390
|
+
expected,
|
|
391
|
+
new Set(["epoch", "ledgerId", "tenantId"]),
|
|
392
|
+
"expected manifest head store scope",
|
|
393
|
+
);
|
|
394
|
+
for (const field of ["epoch", "ledgerId", "tenantId"]) {
|
|
395
|
+
if (value.descriptor[field] !== data(fields, field)) {
|
|
396
|
+
throw failure(
|
|
397
|
+
EVOLUTION_LEDGER_MANIFEST_HEAD_STORE_INVALID_CODE,
|
|
398
|
+
`manifest head store ${field} scope differs`,
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return value;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
export function isEvolutionLedgerManifestHeadStore(value) {
|
|
407
|
+
return STORES.has(value);
|
|
408
|
+
}
|