@ixo/editor 6.33.0 → 6.35.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 (526) hide show
  1. package/dist/BidConfig-YLGSEIOS.js +154 -0
  2. package/dist/BidConfig-YLGSEIOS.js.map +1 -0
  3. package/dist/BidFlowDetail-U2SX5M7F.js +365 -0
  4. package/dist/BidFlowDetail-U2SX5M7F.js.map +1 -0
  5. package/dist/CalendarEventCreateConfig-J2LU6LJO.js +155 -0
  6. package/dist/CalendarEventCreateConfig-J2LU6LJO.js.map +1 -0
  7. package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js +174 -0
  8. package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js.map +1 -0
  9. package/dist/CalendarEventListConfig-GQNNF4ZB.js +116 -0
  10. package/dist/CalendarEventListConfig-GQNNF4ZB.js.map +1 -0
  11. package/dist/CalendarEventListFlowDetail-SSRTOXIX.js +58 -0
  12. package/dist/CalendarEventListFlowDetail-SSRTOXIX.js.map +1 -0
  13. package/dist/CalendarEventUpdateConfig-KACZA6GH.js +133 -0
  14. package/dist/CalendarEventUpdateConfig-KACZA6GH.js.map +1 -0
  15. package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js +155 -0
  16. package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js.map +1 -0
  17. package/dist/ClaimConfig-3HKPGK55.js +200 -0
  18. package/dist/ClaimConfig-3HKPGK55.js.map +1 -0
  19. package/dist/ClaimFlowDetail-I4OQSHAB.js +641 -0
  20. package/dist/ClaimFlowDetail-I4OQSHAB.js.map +1 -0
  21. package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js +149 -0
  22. package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js.map +1 -0
  23. package/dist/CollectionLifecycleFlowDetail-LQHKB227.js +647 -0
  24. package/dist/CollectionLifecycleFlowDetail-LQHKB227.js.map +1 -0
  25. package/dist/CollectionUsersConfig-RI2X3YY2.js +271 -0
  26. package/dist/CollectionUsersConfig-RI2X3YY2.js.map +1 -0
  27. package/dist/CollectionUsersFlowDetail-LHXVCCPQ.js +1276 -0
  28. package/dist/CollectionUsersFlowDetail-LHXVCCPQ.js.map +1 -0
  29. package/dist/CredentialStoreConfig-G66AQDGZ.js +75 -0
  30. package/dist/CredentialStoreConfig-G66AQDGZ.js.map +1 -0
  31. package/dist/CredentialStoreFlowDetail-FL7QAM3S.js +99 -0
  32. package/dist/CredentialStoreFlowDetail-FL7QAM3S.js.map +1 -0
  33. package/dist/DesignPodConfig-LJ7H2CZ6.js +8 -0
  34. package/dist/DesignPodConfig-LJ7H2CZ6.js.map +1 -0
  35. package/dist/DesignPodFlowDetail-JHJWGNVY.js +309 -0
  36. package/dist/DesignPodFlowDetail-JHJWGNVY.js.map +1 -0
  37. package/dist/DomainCardPreviewConfig-Q3X5M4WF.js +37 -0
  38. package/dist/DomainCardPreviewConfig-Q3X5M4WF.js.map +1 -0
  39. package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js +131 -0
  40. package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js.map +1 -0
  41. package/dist/DomainIndexerLookupConfig-N4VONQUY.js +41 -0
  42. package/dist/DomainIndexerLookupConfig-N4VONQUY.js.map +1 -0
  43. package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js +70 -0
  44. package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js.map +1 -0
  45. package/dist/DomainSignConfig-XFIXROVK.js +47 -0
  46. package/dist/DomainSignConfig-XFIXROVK.js.map +1 -0
  47. package/dist/DomainSignFlowDetail-BXZ6JBPR.js +206 -0
  48. package/dist/DomainSignFlowDetail-BXZ6JBPR.js.map +1 -0
  49. package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js +101 -0
  50. package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js.map +1 -0
  51. package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js +147 -0
  52. package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js.map +1 -0
  53. package/dist/EmailSendConfig-YEGZ5Q77.js +215 -0
  54. package/dist/EmailSendConfig-YEGZ5Q77.js.map +1 -0
  55. package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js +150 -0
  56. package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js.map +1 -0
  57. package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js +120 -0
  58. package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js.map +1 -0
  59. package/dist/EntitySingleSelectionConfig-DL57KNKM.js +30 -0
  60. package/dist/EntitySingleSelectionConfig-DL57KNKM.js.map +1 -0
  61. package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js +118 -0
  62. package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js.map +1 -0
  63. package/dist/EntityTransferConfig-JVZ3H35B.js +62 -0
  64. package/dist/EntityTransferConfig-JVZ3H35B.js.map +1 -0
  65. package/dist/EntityTransferFlowDetail-XEXM34XB.js +132 -0
  66. package/dist/EntityTransferFlowDetail-XEXM34XB.js.map +1 -0
  67. package/dist/EvalEngineConfig-CHC4IRN3.js +464 -0
  68. package/dist/EvalEngineConfig-CHC4IRN3.js.map +1 -0
  69. package/dist/EvalEngineFlowDetail-PUFRNO4U.js +4291 -0
  70. package/dist/EvalEngineFlowDetail-PUFRNO4U.js.map +1 -0
  71. package/dist/EvaluateBidConfig-OE4CM43G.js +151 -0
  72. package/dist/EvaluateBidConfig-OE4CM43G.js.map +1 -0
  73. package/dist/EvaluateBidFlowDetail-2EXGNBYC.js +564 -0
  74. package/dist/EvaluateBidFlowDetail-2EXGNBYC.js.map +1 -0
  75. package/dist/EvaluateClaimConfig-3D4F5LHU.js +297 -0
  76. package/dist/EvaluateClaimConfig-3D4F5LHU.js.map +1 -0
  77. package/dist/EvaluateClaimFlowDetail-QKHJVEDE.js +2237 -0
  78. package/dist/EvaluateClaimFlowDetail-QKHJVEDE.js.map +1 -0
  79. package/dist/FormSubmitConfig-UFZYMLUN.js +59 -0
  80. package/dist/FormSubmitConfig-UFZYMLUN.js.map +1 -0
  81. package/dist/FormSubmitFlowDetail-IAHDJS6P.js +169 -0
  82. package/dist/FormSubmitFlowDetail-IAHDJS6P.js.map +1 -0
  83. package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js +166 -0
  84. package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js.map +1 -0
  85. package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js +88 -0
  86. package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js.map +1 -0
  87. package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js +88 -0
  88. package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js.map +1 -0
  89. package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js +83 -0
  90. package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js.map +1 -0
  91. package/dist/GovernanceConfigConfig-V3WM4WBP.js +30 -0
  92. package/dist/GovernanceConfigConfig-V3WM4WBP.js.map +1 -0
  93. package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js +267 -0
  94. package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js.map +1 -0
  95. package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js +113 -0
  96. package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js.map +1 -0
  97. package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js +144 -0
  98. package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js.map +1 -0
  99. package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js +72 -0
  100. package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js.map +1 -0
  101. package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js +104 -0
  102. package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js.map +1 -0
  103. package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js +68 -0
  104. package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js.map +1 -0
  105. package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js +78 -0
  106. package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js.map +1 -0
  107. package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js +98 -0
  108. package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js.map +1 -0
  109. package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js +94 -0
  110. package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js.map +1 -0
  111. package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js +96 -0
  112. package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js.map +1 -0
  113. package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js +68 -0
  114. package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js.map +1 -0
  115. package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js +93 -0
  116. package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js.map +1 -0
  117. package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js +84 -0
  118. package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js.map +1 -0
  119. package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js +104 -0
  120. package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js.map +1 -0
  121. package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js +42 -0
  122. package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js.map +1 -0
  123. package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js +240 -0
  124. package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js.map +1 -0
  125. package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js +69 -0
  126. package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js.map +1 -0
  127. package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js +71 -0
  128. package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js.map +1 -0
  129. package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js +130 -0
  130. package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js.map +1 -0
  131. package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js +42 -0
  132. package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js.map +1 -0
  133. package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js +165 -0
  134. package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js.map +1 -0
  135. package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js +123 -0
  136. package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js.map +1 -0
  137. package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js +84 -0
  138. package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js.map +1 -0
  139. package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js +111 -0
  140. package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js.map +1 -0
  141. package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js +66 -0
  142. package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js.map +1 -0
  143. package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js +133 -0
  144. package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js.map +1 -0
  145. package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js +42 -0
  146. package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js.map +1 -0
  147. package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js +182 -0
  148. package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js.map +1 -0
  149. package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js +155 -0
  150. package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js.map +1 -0
  151. package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js +56 -0
  152. package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js.map +1 -0
  153. package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js +117 -0
  154. package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js.map +1 -0
  155. package/dist/HarvestConfig-AIGOGBFR.js +56 -0
  156. package/dist/HarvestConfig-AIGOGBFR.js.map +1 -0
  157. package/dist/HarvestFlowDetail-X3RUH3X3.js +131 -0
  158. package/dist/HarvestFlowDetail-X3RUH3X3.js.map +1 -0
  159. package/dist/HttpRequestConfig-OQEJIIJY.js +194 -0
  160. package/dist/HttpRequestConfig-OQEJIIJY.js.map +1 -0
  161. package/dist/HttpRequestFlowDetail-JVLV533Z.js +116 -0
  162. package/dist/HttpRequestFlowDetail-JVLV533Z.js.map +1 -0
  163. package/dist/IdentityCreateConfig-ZBUOJ6AL.js +94 -0
  164. package/dist/IdentityCreateConfig-ZBUOJ6AL.js.map +1 -0
  165. package/dist/IdentityCreateFlowDetail-4TE6UCEB.js +83 -0
  166. package/dist/IdentityCreateFlowDetail-4TE6UCEB.js.map +1 -0
  167. package/dist/IidCreateConfig-RRV2DYXI.js +75 -0
  168. package/dist/IidCreateConfig-RRV2DYXI.js.map +1 -0
  169. package/dist/IidCreateFlowDetail-HPVZAHVY.js +57 -0
  170. package/dist/IidCreateFlowDetail-HPVZAHVY.js.map +1 -0
  171. package/dist/KycVerifyConfig-VCG65K5K.js +65 -0
  172. package/dist/KycVerifyConfig-VCG65K5K.js.map +1 -0
  173. package/dist/KycVerifyFlowDetail-FEU43HML.js +421 -0
  174. package/dist/KycVerifyFlowDetail-FEU43HML.js.map +1 -0
  175. package/dist/ListDomainFlowsConfig-3JZEPTOJ.js +37 -0
  176. package/dist/ListDomainFlowsConfig-3JZEPTOJ.js.map +1 -0
  177. package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js +257 -0
  178. package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js.map +1 -0
  179. package/dist/LoadBatchesConfig-IMODIWRT.js +38 -0
  180. package/dist/LoadBatchesConfig-IMODIWRT.js.map +1 -0
  181. package/dist/LoadBatchesFlowDetail-GB24T76O.js +101 -0
  182. package/dist/LoadBatchesFlowDetail-GB24T76O.js.map +1 -0
  183. package/dist/MatrixDmConfig-NBII27CS.js +120 -0
  184. package/dist/MatrixDmConfig-NBII27CS.js.map +1 -0
  185. package/dist/MatrixRegisterConfig-N2U4FBYF.js +62 -0
  186. package/dist/MatrixRegisterConfig-N2U4FBYF.js.map +1 -0
  187. package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js +86 -0
  188. package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js.map +1 -0
  189. package/dist/MemberMultiSelectConfig-E7WUB2WD.js +30 -0
  190. package/dist/MemberMultiSelectConfig-E7WUB2WD.js.map +1 -0
  191. package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js +392 -0
  192. package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js.map +1 -0
  193. package/dist/OracleConfig-R7TDTTKN.js +56 -0
  194. package/dist/OracleConfig-R7TDTTKN.js.map +1 -0
  195. package/dist/OracleConfigureOracleConfig-QFF74X3N.js +198 -0
  196. package/dist/OracleConfigureOracleConfig-QFF74X3N.js.map +1 -0
  197. package/dist/OracleConfigureOracleFlowDetail-MIBXUEKC.js +255 -0
  198. package/dist/OracleConfigureOracleFlowDetail-MIBXUEKC.js.map +1 -0
  199. package/dist/OracleContractConfig-PHY5L7W2.js +38 -0
  200. package/dist/OracleContractConfig-PHY5L7W2.js.map +1 -0
  201. package/dist/OracleContractFlowDetail-M3PM4AU4.js +78 -0
  202. package/dist/OracleContractFlowDetail-M3PM4AU4.js.map +1 -0
  203. package/dist/OracleDeployConfig-QBG76ATZ.js +10 -0
  204. package/dist/OracleDeployConfig-QBG76ATZ.js.map +1 -0
  205. package/dist/OracleDeployFlowDetail-WKTMD2AD.js +231 -0
  206. package/dist/OracleDeployFlowDetail-WKTMD2AD.js.map +1 -0
  207. package/dist/OracleDeploySetupConfig-75XPGFJQ.js +10 -0
  208. package/dist/OracleDeploySetupConfig-75XPGFJQ.js.map +1 -0
  209. package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js +165 -0
  210. package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js.map +1 -0
  211. package/dist/OracleDeployStartConfig-NA6GZ4VQ.js +10 -0
  212. package/dist/OracleDeployStartConfig-NA6GZ4VQ.js.map +1 -0
  213. package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js +89 -0
  214. package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js.map +1 -0
  215. package/dist/OracleFlowDetail-5JCJK3GH.js +76 -0
  216. package/dist/OracleFlowDetail-5JCJK3GH.js.map +1 -0
  217. package/dist/OraclePromptConfig-YBRESISH.js +39 -0
  218. package/dist/OraclePromptConfig-YBRESISH.js.map +1 -0
  219. package/dist/OraclePromptFlowDetail-O3XNK7HY.js +112 -0
  220. package/dist/OraclePromptFlowDetail-O3XNK7HY.js.map +1 -0
  221. package/dist/OracleStoreConfigConfig-TUZWTJMA.js +134 -0
  222. package/dist/OracleStoreConfigConfig-TUZWTJMA.js.map +1 -0
  223. package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js +99 -0
  224. package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js.map +1 -0
  225. package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js +198 -0
  226. package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js.map +1 -0
  227. package/dist/OracleStoreSecretsAndConfigFlowDetail-HQU3UKEB.js +220 -0
  228. package/dist/OracleStoreSecretsAndConfigFlowDetail-HQU3UKEB.js.map +1 -0
  229. package/dist/OracleStoreSecretsConfig-PQMF7LFT.js +191 -0
  230. package/dist/OracleStoreSecretsConfig-PQMF7LFT.js.map +1 -0
  231. package/dist/OracleStoreSecretsFlowDetail-5RXWQ3KA.js +197 -0
  232. package/dist/OracleStoreSecretsFlowDetail-5RXWQ3KA.js.map +1 -0
  233. package/dist/ProposalCreateConfig-U5IHZNT7.js +161 -0
  234. package/dist/ProposalCreateConfig-U5IHZNT7.js.map +1 -0
  235. package/dist/ProposalCreateFlowDetail-2FCRCNYV.js +235 -0
  236. package/dist/ProposalCreateFlowDetail-2FCRCNYV.js.map +1 -0
  237. package/dist/ProposalVoteConfig-MH4MU7SL.js +150 -0
  238. package/dist/ProposalVoteConfig-MH4MU7SL.js.map +1 -0
  239. package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js +280 -0
  240. package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js.map +1 -0
  241. package/dist/ProtocolSelectConfig-S5U3P6K7.js +48 -0
  242. package/dist/ProtocolSelectConfig-S5U3P6K7.js.map +1 -0
  243. package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js +116 -0
  244. package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js.map +1 -0
  245. package/dist/RetireConfig-MV37WWZ6.js +59 -0
  246. package/dist/RetireConfig-MV37WWZ6.js.map +1 -0
  247. package/dist/RetireFlowDetail-VZ5O4SXI.js +147 -0
  248. package/dist/RetireFlowDetail-VZ5O4SXI.js.map +1 -0
  249. package/dist/SandboxProvisionConfig-ZGG4IRHM.js +46 -0
  250. package/dist/SandboxProvisionConfig-ZGG4IRHM.js.map +1 -0
  251. package/dist/SandboxProvisionFlowDetail-RUY64INV.js +79 -0
  252. package/dist/SandboxProvisionFlowDetail-RUY64INV.js.map +1 -0
  253. package/dist/WalletFundConfig-CMM3EP3B.js +117 -0
  254. package/dist/WalletFundConfig-CMM3EP3B.js.map +1 -0
  255. package/dist/WalletFundFlowDetail-TXWCZA4K.js +279 -0
  256. package/dist/WalletFundFlowDetail-TXWCZA4K.js.map +1 -0
  257. package/dist/WalletGenerateAndFundConfig-364RSEND.js +10 -0
  258. package/dist/WalletGenerateAndFundConfig-364RSEND.js.map +1 -0
  259. package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js +54 -0
  260. package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js.map +1 -0
  261. package/dist/WalletGenerateConfig-YYLCS65G.js +10 -0
  262. package/dist/WalletGenerateConfig-YYLCS65G.js.map +1 -0
  263. package/dist/WalletGenerateFlowDetail-CQCNDGJA.js +53 -0
  264. package/dist/WalletGenerateFlowDetail-CQCNDGJA.js.map +1 -0
  265. package/dist/XeroContactCreateConfig-OWG5PA3B.js +102 -0
  266. package/dist/XeroContactCreateConfig-OWG5PA3B.js.map +1 -0
  267. package/dist/XeroContactCreateFlowDetail-6MAINCF6.js +127 -0
  268. package/dist/XeroContactCreateFlowDetail-6MAINCF6.js.map +1 -0
  269. package/dist/XeroInvoiceCreateConfig-O74RUSZM.js +403 -0
  270. package/dist/XeroInvoiceCreateConfig-O74RUSZM.js.map +1 -0
  271. package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js +631 -0
  272. package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js.map +1 -0
  273. package/dist/XeroInvoiceListConfig-UR3GONBJ.js +113 -0
  274. package/dist/XeroInvoiceListConfig-UR3GONBJ.js.map +1 -0
  275. package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js +58 -0
  276. package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js.map +1 -0
  277. package/dist/XeroPaymentCreateConfig-RPMAIK6E.js +116 -0
  278. package/dist/XeroPaymentCreateConfig-RPMAIK6E.js.map +1 -0
  279. package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js +573 -0
  280. package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js.map +1 -0
  281. package/dist/action-manifest.json +2091 -393
  282. package/dist/chunk-2GAYKKTL.js +9 -0
  283. package/dist/chunk-2GAYKKTL.js.map +1 -0
  284. package/dist/chunk-3TUYY4HK.js +20 -0
  285. package/dist/chunk-3TUYY4HK.js.map +1 -0
  286. package/dist/chunk-4DGCCXD6.js +710 -0
  287. package/dist/chunk-4DGCCXD6.js.map +1 -0
  288. package/dist/chunk-4NAFQF6V.js +11 -0
  289. package/dist/chunk-4NAFQF6V.js.map +1 -0
  290. package/dist/chunk-4PONO4US.js +799 -0
  291. package/dist/chunk-4PONO4US.js.map +1 -0
  292. package/dist/chunk-4TMOIK5M.js +21 -0
  293. package/dist/chunk-4TMOIK5M.js.map +1 -0
  294. package/dist/chunk-5E6Z6JJN.js +4456 -0
  295. package/dist/chunk-5E6Z6JJN.js.map +1 -0
  296. package/dist/chunk-5IH3VC5I.js +102 -0
  297. package/dist/chunk-5IH3VC5I.js.map +1 -0
  298. package/dist/chunk-5NTKDOP6.js +89 -0
  299. package/dist/chunk-5NTKDOP6.js.map +1 -0
  300. package/dist/chunk-5O2SFRGU.js +18 -0
  301. package/dist/chunk-5O2SFRGU.js.map +1 -0
  302. package/dist/chunk-632JLECF.js +55 -0
  303. package/dist/chunk-632JLECF.js.map +1 -0
  304. package/dist/chunk-676HDB7K.js +95 -0
  305. package/dist/chunk-676HDB7K.js.map +1 -0
  306. package/dist/chunk-6ESTNTSH.js +223 -0
  307. package/dist/chunk-6ESTNTSH.js.map +1 -0
  308. package/dist/chunk-6GKJR52N.js +15 -0
  309. package/dist/chunk-6GKJR52N.js.map +1 -0
  310. package/dist/chunk-6L4ZIKYU.js +23 -0
  311. package/dist/chunk-6L4ZIKYU.js.map +1 -0
  312. package/dist/chunk-76YX5R4L.js +11 -0
  313. package/dist/chunk-76YX5R4L.js.map +1 -0
  314. package/dist/chunk-7J3GFMN3.js +32 -0
  315. package/dist/chunk-7J3GFMN3.js.map +1 -0
  316. package/dist/chunk-7LSARC2G.js +102 -0
  317. package/dist/chunk-7LSARC2G.js.map +1 -0
  318. package/dist/chunk-7W7UUUIE.js +609 -0
  319. package/dist/chunk-7W7UUUIE.js.map +1 -0
  320. package/dist/chunk-7ZLW7H37.js +21 -0
  321. package/dist/chunk-7ZLW7H37.js.map +1 -0
  322. package/dist/chunk-AAZHI22G.js +18 -0
  323. package/dist/chunk-AAZHI22G.js.map +1 -0
  324. package/dist/chunk-ACNE455I.js +76 -0
  325. package/dist/chunk-ACNE455I.js.map +1 -0
  326. package/dist/chunk-BKLSSLPZ.js +27 -0
  327. package/dist/chunk-BKLSSLPZ.js.map +1 -0
  328. package/dist/chunk-BZ7UPUTY.js +417 -0
  329. package/dist/chunk-BZ7UPUTY.js.map +1 -0
  330. package/dist/chunk-CGFAICUE.js +28 -0
  331. package/dist/chunk-CGFAICUE.js.map +1 -0
  332. package/dist/chunk-CMCEWQ3C.js +19 -0
  333. package/dist/chunk-CMCEWQ3C.js.map +1 -0
  334. package/dist/chunk-CP4UV436.js +41 -0
  335. package/dist/chunk-CP4UV436.js.map +1 -0
  336. package/dist/chunk-DIQRZP7Z.js +51 -0
  337. package/dist/chunk-DIQRZP7Z.js.map +1 -0
  338. package/dist/chunk-EBFFDDAS.js +13 -0
  339. package/dist/chunk-EBFFDDAS.js.map +1 -0
  340. package/dist/chunk-EGVS23DR.js +85 -0
  341. package/dist/chunk-EGVS23DR.js.map +1 -0
  342. package/dist/chunk-EKBQ7K4N.js +15 -0
  343. package/dist/chunk-EKBQ7K4N.js.map +1 -0
  344. package/dist/chunk-EKQCZRAN.js +24 -0
  345. package/dist/chunk-EKQCZRAN.js.map +1 -0
  346. package/dist/chunk-EYKZIZ5J.js +48 -0
  347. package/dist/chunk-EYKZIZ5J.js.map +1 -0
  348. package/dist/{chunk-NEOPTPDF.js → chunk-F4PTFXZH.js} +11554 -22046
  349. package/dist/chunk-F4PTFXZH.js.map +1 -0
  350. package/dist/chunk-F5GTFCYV.js +3333 -0
  351. package/dist/chunk-F5GTFCYV.js.map +1 -0
  352. package/dist/chunk-FFYZXA75.js +58 -0
  353. package/dist/chunk-FFYZXA75.js.map +1 -0
  354. package/dist/chunk-GFGDHPZ2.js +22 -0
  355. package/dist/chunk-GFGDHPZ2.js.map +1 -0
  356. package/dist/chunk-GR3CDFID.js +18 -0
  357. package/dist/chunk-GR3CDFID.js.map +1 -0
  358. package/dist/chunk-GR4SIU32.js +104 -0
  359. package/dist/chunk-GR4SIU32.js.map +1 -0
  360. package/dist/chunk-H5E46IIS.js +18 -0
  361. package/dist/chunk-H5E46IIS.js.map +1 -0
  362. package/dist/chunk-HFHVAMZL.js +22 -0
  363. package/dist/chunk-HFHVAMZL.js.map +1 -0
  364. package/dist/chunk-HT6L7A5M.js +12 -0
  365. package/dist/chunk-HT6L7A5M.js.map +1 -0
  366. package/dist/chunk-I2FPFISM.js +301 -0
  367. package/dist/chunk-I2FPFISM.js.map +1 -0
  368. package/dist/chunk-IADAQJDH.js +28 -0
  369. package/dist/chunk-IADAQJDH.js.map +1 -0
  370. package/dist/chunk-IBOBCMQQ.js +99 -0
  371. package/dist/chunk-IBOBCMQQ.js.map +1 -0
  372. package/dist/chunk-IFWKRCFF.js +56 -0
  373. package/dist/chunk-IFWKRCFF.js.map +1 -0
  374. package/dist/chunk-IH4T7V4C.js +40 -0
  375. package/dist/chunk-IH4T7V4C.js.map +1 -0
  376. package/dist/chunk-IIIZZ4E4.js +1679 -0
  377. package/dist/chunk-IIIZZ4E4.js.map +1 -0
  378. package/dist/chunk-ILSFU3WD.js +83 -0
  379. package/dist/chunk-ILSFU3WD.js.map +1 -0
  380. package/dist/chunk-IX3VBV3L.js +43 -0
  381. package/dist/chunk-IX3VBV3L.js.map +1 -0
  382. package/dist/chunk-JB6ASLUJ.js +315 -0
  383. package/dist/chunk-JB6ASLUJ.js.map +1 -0
  384. package/dist/chunk-JBBFSORW.js +846 -0
  385. package/dist/chunk-JBBFSORW.js.map +1 -0
  386. package/dist/chunk-JIDTNKKL.js +1183 -0
  387. package/dist/chunk-JIDTNKKL.js.map +1 -0
  388. package/dist/chunk-JSPE6NGZ.js +22 -0
  389. package/dist/chunk-JSPE6NGZ.js.map +1 -0
  390. package/dist/chunk-JVROGQ7Q.js +150 -0
  391. package/dist/chunk-JVROGQ7Q.js.map +1 -0
  392. package/dist/chunk-K4WUMWNJ.js +32 -0
  393. package/dist/chunk-K4WUMWNJ.js.map +1 -0
  394. package/dist/chunk-K74XQ4Q5.js +11 -0
  395. package/dist/chunk-K74XQ4Q5.js.map +1 -0
  396. package/dist/chunk-KLLMJ4U3.js +22 -0
  397. package/dist/chunk-KLLMJ4U3.js.map +1 -0
  398. package/dist/chunk-LTKVCJ2E.js +27 -0
  399. package/dist/chunk-LTKVCJ2E.js.map +1 -0
  400. package/dist/chunk-M36DJTFZ.js +34 -0
  401. package/dist/chunk-M36DJTFZ.js.map +1 -0
  402. package/dist/chunk-MHM52LCJ.js +154 -0
  403. package/dist/chunk-MHM52LCJ.js.map +1 -0
  404. package/dist/chunk-MQCDMHRZ.js +59 -0
  405. package/dist/chunk-MQCDMHRZ.js.map +1 -0
  406. package/dist/chunk-MZIBZ5FY.js +554 -0
  407. package/dist/chunk-MZIBZ5FY.js.map +1 -0
  408. package/dist/chunk-N3ORMGAI.js +348 -0
  409. package/dist/chunk-N3ORMGAI.js.map +1 -0
  410. package/dist/chunk-NCSGIRRQ.js +28 -0
  411. package/dist/chunk-NCSGIRRQ.js.map +1 -0
  412. package/dist/chunk-NIXT2SBH.js +1423 -0
  413. package/dist/chunk-NIXT2SBH.js.map +1 -0
  414. package/dist/chunk-NJAII6CO.js +148 -0
  415. package/dist/chunk-NJAII6CO.js.map +1 -0
  416. package/dist/chunk-NKE4TL43.js +92 -0
  417. package/dist/chunk-NKE4TL43.js.map +1 -0
  418. package/dist/chunk-NZ7AXA7B.js +1 -0
  419. package/dist/chunk-NZ7AXA7B.js.map +1 -0
  420. package/dist/chunk-OCAYEGI2.js +26 -0
  421. package/dist/chunk-OCAYEGI2.js.map +1 -0
  422. package/dist/chunk-OMLI45ER.js +90 -0
  423. package/dist/chunk-OMLI45ER.js.map +1 -0
  424. package/dist/chunk-P7OBLJAG.js +88 -0
  425. package/dist/chunk-P7OBLJAG.js.map +1 -0
  426. package/dist/chunk-PAY3CBWL.js +2321 -0
  427. package/dist/chunk-PAY3CBWL.js.map +1 -0
  428. package/dist/chunk-PFF6VY35.js +257 -0
  429. package/dist/chunk-PFF6VY35.js.map +1 -0
  430. package/dist/chunk-PYNDJDWZ.js +1758 -0
  431. package/dist/chunk-PYNDJDWZ.js.map +1 -0
  432. package/dist/chunk-QDQ6UMMN.js +53 -0
  433. package/dist/chunk-QDQ6UMMN.js.map +1 -0
  434. package/dist/chunk-QGT3G2XG.js +24 -0
  435. package/dist/chunk-QGT3G2XG.js.map +1 -0
  436. package/dist/chunk-QZYCJ2GZ.js +55 -0
  437. package/dist/chunk-QZYCJ2GZ.js.map +1 -0
  438. package/dist/chunk-REZ7RFSA.js +124 -0
  439. package/dist/chunk-REZ7RFSA.js.map +1 -0
  440. package/dist/chunk-RRYBAE6E.js +2449 -0
  441. package/dist/chunk-RRYBAE6E.js.map +1 -0
  442. package/dist/chunk-RWUZOB62.js +34 -0
  443. package/dist/chunk-RWUZOB62.js.map +1 -0
  444. package/dist/chunk-SB5UCPZH.js +116 -0
  445. package/dist/chunk-SB5UCPZH.js.map +1 -0
  446. package/dist/chunk-SEJJ7CRI.js +99 -0
  447. package/dist/chunk-SEJJ7CRI.js.map +1 -0
  448. package/dist/chunk-SHBFGRPV.js +45 -0
  449. package/dist/chunk-SHBFGRPV.js.map +1 -0
  450. package/dist/chunk-SOFJ4GC5.js +45 -0
  451. package/dist/chunk-SOFJ4GC5.js.map +1 -0
  452. package/dist/chunk-STH2HPZK.js +44 -0
  453. package/dist/chunk-STH2HPZK.js.map +1 -0
  454. package/dist/chunk-TK3JNKME.js +28 -0
  455. package/dist/chunk-TK3JNKME.js.map +1 -0
  456. package/dist/chunk-TMONHFE3.js +46 -0
  457. package/dist/chunk-TMONHFE3.js.map +1 -0
  458. package/dist/chunk-TR4KO3AG.js +44 -0
  459. package/dist/chunk-TR4KO3AG.js.map +1 -0
  460. package/dist/chunk-TS2LNBF2.js +68 -0
  461. package/dist/chunk-TS2LNBF2.js.map +1 -0
  462. package/dist/chunk-UZUMBFPP.js +26 -0
  463. package/dist/chunk-UZUMBFPP.js.map +1 -0
  464. package/dist/chunk-VRZ5LMOW.js +176 -0
  465. package/dist/chunk-VRZ5LMOW.js.map +1 -0
  466. package/dist/chunk-WLGGY6Z6.js +75 -0
  467. package/dist/chunk-WLGGY6Z6.js.map +1 -0
  468. package/dist/chunk-WO7V6ZNC.js +11 -0
  469. package/dist/chunk-WO7V6ZNC.js.map +1 -0
  470. package/dist/chunk-WXSENSRP.js +64 -0
  471. package/dist/chunk-WXSENSRP.js.map +1 -0
  472. package/dist/chunk-XEKBZ2SA.js +19 -0
  473. package/dist/chunk-XEKBZ2SA.js.map +1 -0
  474. package/dist/chunk-XPBKU3JX.js +61 -0
  475. package/dist/chunk-XPBKU3JX.js.map +1 -0
  476. package/dist/chunk-XRYXBXWH.js +24 -0
  477. package/dist/chunk-XRYXBXWH.js.map +1 -0
  478. package/dist/chunk-XVA7QRVH.js +22 -0
  479. package/dist/chunk-XVA7QRVH.js.map +1 -0
  480. package/dist/chunk-XYXDY72K.js +27508 -0
  481. package/dist/chunk-XYXDY72K.js.map +1 -0
  482. package/dist/chunk-YCTHHBSS.js +37 -0
  483. package/dist/chunk-YCTHHBSS.js.map +1 -0
  484. package/dist/chunk-YHPWD5NE.js +70 -0
  485. package/dist/chunk-YHPWD5NE.js.map +1 -0
  486. package/dist/chunk-YLNEKJQ5.js +126 -0
  487. package/dist/chunk-YLNEKJQ5.js.map +1 -0
  488. package/dist/chunk-YN4CEKCF.js +73 -0
  489. package/dist/chunk-YN4CEKCF.js.map +1 -0
  490. package/dist/chunk-YYNMESIF.js +17 -0
  491. package/dist/chunk-YYNMESIF.js.map +1 -0
  492. package/dist/chunk-Z6PRMCV6.js +1 -0
  493. package/dist/chunk-Z6PRMCV6.js.map +1 -0
  494. package/dist/chunk-ZDNW6VQG.js +11 -0
  495. package/dist/chunk-ZDNW6VQG.js.map +1 -0
  496. package/dist/chunk-ZP4D73DO.js +36 -0
  497. package/dist/chunk-ZP4D73DO.js.map +1 -0
  498. package/dist/chunk-ZUATADUV.js +26 -0
  499. package/dist/chunk-ZUATADUV.js.map +1 -0
  500. package/dist/{connections-1NtNQrsY.d.ts → connections-CEcurtWI.d.ts} +74 -9
  501. package/dist/core/index.cjs +14041 -6973
  502. package/dist/core/index.cjs.map +1 -1
  503. package/dist/core/index.d.ts +422 -138
  504. package/dist/core/index.js +425 -183
  505. package/dist/core/index.js.map +1 -1
  506. package/dist/flow-vnext/index.cjs +2842 -0
  507. package/dist/flow-vnext/index.cjs.map +1 -0
  508. package/dist/flow-vnext/index.d.ts +3 -0
  509. package/dist/flow-vnext/index.js +119 -0
  510. package/dist/flow-vnext/index.js.map +1 -0
  511. package/dist/{graphql-client-Bn0tN049.d.ts → graphql-client-B2tREsx6.d.ts} +3 -1
  512. package/dist/index-b9xxXGFs.d.ts +1230 -0
  513. package/dist/index.d.ts +5 -3
  514. package/dist/index.js +202 -37
  515. package/dist/index.js.map +1 -1
  516. package/dist/legacy-BpgIqaQ5.d.ts +14 -0
  517. package/dist/mantine/index.d.ts +7 -4
  518. package/dist/mantine/index.js +84 -30
  519. package/dist/mantine/index.js.map +1 -1
  520. package/dist/{runtime-BFwvCQDF.d.ts → types-Dqk5MTfW.d.ts} +6096 -5386
  521. package/package.json +12 -2
  522. package/dist/chunk-A4CWC4AG.js +0 -374
  523. package/dist/chunk-A4CWC4AG.js.map +0 -1
  524. package/dist/chunk-NEOPTPDF.js.map +0 -1
  525. package/dist/chunk-VRCRDKN5.js +0 -59694
  526. package/dist/chunk-VRCRDKN5.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/lib/flowCompiler/draftRepository.ts","../src/core/lib/flowCompiler/participants.ts","../src/core/lib/flowCompiler/publication.ts","../src/core/lib/flowCompiler/draftProposal.ts"],"sourcesContent":["import * as Y from 'yjs';\nimport type { Doc as YDoc } from 'yjs';\nimport { canonicalizeJson, type CanonicalJsonValue } from '../flowEngine/vnext/canonical';\nimport {\n addFlowNode,\n auditFlowProjections,\n readFlowDocument,\n removeFlowNode,\n reorderFlowNodes,\n repairFlowProjections,\n setBlockProps,\n type FlowDocumentRead,\n type FlowProjectionDrift,\n} from './authoring';\n\nexport type FlowDraftCommandOperation =\n | {\n kind: 'add-step';\n nodeId: string;\n blockId: string;\n actionType: string;\n afterNodeId?: string;\n title?: string;\n props?: Record<string, string>;\n }\n | { kind: 'update-step-props'; blockId: string; props: Record<string, string> }\n | { kind: 'remove-step'; nodeId: string }\n | { kind: 'reorder-steps'; order: string[] }\n | { kind: 'set-meta'; values: Record<string, string | number | boolean | null> };\n\nexport interface FlowDraftCommand {\n kind: 'qi.flow.draft-command';\n schemaVersion: '1.0';\n commandId: string;\n expectedRevision: number;\n actorDid: string;\n operation: FlowDraftCommandOperation;\n}\n\nexport interface FlowDraftCommandResult {\n outcome: 'applied' | 'duplicate';\n commandId: string;\n revision: number;\n nodeId?: string;\n blockId?: string;\n}\n\nexport interface FlowDraftSnapshot {\n revision: number;\n document: FlowDocumentRead | null;\n}\n\nexport interface FlowDefinitionDraftRepository {\n read(): FlowDraftSnapshot;\n apply(command: FlowDraftCommand): FlowDraftCommandResult;\n applyBatch(commands: readonly FlowDraftCommand[]): FlowDraftCommandResult[];\n auditProjections(): FlowProjectionDrift[];\n repairProjections(): FlowProjectionDrift[];\n}\n\ninterface StoredDraftCommand {\n fingerprint: string;\n result: FlowDraftCommandResult;\n}\n\nexport class FlowDraftCommandError extends Error {\n constructor(\n readonly code: 'REVISION_CONFLICT' | 'IDEMPOTENCY_CONFLICT' | 'INVALID_COMMAND' | 'REFERENCED_STEP',\n message: string,\n readonly details?: Record<string, unknown>\n ) {\n super(message);\n this.name = 'FlowDraftCommandError';\n }\n}\n\nconst COMMANDS_MAP = 'qi.flow.draftCommands';\nconst DRAFT_CONTROL_MAP = 'qi.flow.draftControl';\nconst LEGACY_COMMAND_REVISION_KEY = 'legacyCommandRevision';\nconst RESERVED_META_KEYS = new Set(['draftRevision', 'draftSchemaVersion', 'draftUpdatedAt']);\n\nfunction currentRevision(yDoc: YDoc): number {\n const meta = yDoc.getMap('qi.flow.meta');\n if (meta.get('draftSchemaVersion') === 1) return Number(meta.get('draftRevision') ?? 0);\n return Number(yDoc.getMap(DRAFT_CONTROL_MAP).get(LEGACY_COMMAND_REVISION_KEY) ?? 0);\n}\n\nfunction fingerprint(command: FlowDraftCommand): string {\n return canonicalizeJson(command as unknown as CanonicalJsonValue);\n}\n\nfunction advanceCommandRevision(yDoc: YDoc): number {\n const meta = yDoc.getMap('qi.flow.meta');\n const next = currentRevision(yDoc) + 1;\n if (meta.get('draftSchemaVersion') !== 1) {\n yDoc.getMap(DRAFT_CONTROL_MAP).set(LEGACY_COMMAND_REVISION_KEY, next);\n return next;\n }\n meta.set('draftRevision', next);\n meta.set('draftUpdatedAt', new Date().toISOString());\n return next;\n}\n\nfunction setMeta(yDoc: YDoc, values: Record<string, string | number | boolean | null>): void {\n const meta = yDoc.getMap('qi.flow.meta');\n for (const [key, value] of Object.entries(values)) {\n if (value === null) meta.delete(key);\n else meta.set(key, value);\n }\n advanceCommandRevision(yDoc);\n}\n\n/** One idempotent mutation waist for Portal, Oracles, and headless authoring. */\nexport function createYjsFlowDefinitionDraftRepository(yDoc: YDoc): FlowDefinitionDraftRepository {\n const repository: FlowDefinitionDraftRepository = {\n read: () => ({ revision: currentRevision(yDoc), document: readFlowDocument(yDoc) }),\n apply: (command) => {\n if (command.kind !== 'qi.flow.draft-command' || command.schemaVersion !== '1.0' || !command.commandId || !command.actorDid) {\n throw new FlowDraftCommandError('INVALID_COMMAND', 'A versioned command id and actor are required');\n }\n if (command.operation.kind === 'set-meta') {\n const reservedKeys = Object.keys(command.operation.values).filter((key) => RESERVED_META_KEYS.has(key));\n if (reservedKeys.length > 0) {\n throw new FlowDraftCommandError('INVALID_COMMAND', `Flow metadata keys are reserved for draft bookkeeping: ${reservedKeys.sort().join(', ')}`, {\n reservedKeys: reservedKeys.sort(),\n });\n }\n }\n const commands = yDoc.getMap<StoredDraftCommand>(COMMANDS_MAP);\n const commandFingerprint = fingerprint(command);\n const existing = commands.get(command.commandId);\n if (existing) {\n if (existing.fingerprint !== commandFingerprint) {\n throw new FlowDraftCommandError('IDEMPOTENCY_CONFLICT', `Draft command ${command.commandId} was reused with different content`);\n }\n return { ...existing.result, outcome: 'duplicate' };\n }\n\n const beforeRevision = currentRevision(yDoc);\n if (command.expectedRevision !== beforeRevision) {\n throw new FlowDraftCommandError('REVISION_CONFLICT', `Expected draft revision ${command.expectedRevision}, found ${beforeRevision}`);\n }\n\n let nodeId: string | undefined;\n let blockId: string | undefined;\n yDoc.transact(() => {\n const operation = command.operation;\n if (operation.kind === 'add-step') {\n const added = addFlowNode(yDoc, {\n type: operation.actionType,\n nodeId: operation.nodeId,\n blockId: operation.blockId,\n afterNodeId: operation.afterNodeId,\n title: operation.title,\n props: operation.props,\n });\n if (!added) throw new FlowDraftCommandError('INVALID_COMMAND', 'Action type or requested Flow step identity is unavailable');\n nodeId = added.nodeId;\n blockId = added.blockId;\n } else if (operation.kind === 'update-step-props') {\n if (!setBlockProps(yDoc, operation.blockId, operation.props)) {\n throw new FlowDraftCommandError('INVALID_COMMAND', `Unknown Flow block: ${operation.blockId}`);\n }\n blockId = operation.blockId;\n } else if (operation.kind === 'remove-step') {\n const removed = removeFlowNode(yDoc, operation.nodeId);\n if (!removed.ok) {\n throw new FlowDraftCommandError('REFERENCED_STEP', `Flow step ${operation.nodeId} is still referenced`, { referencedBy: removed.referencedBy });\n }\n nodeId = operation.nodeId;\n } else if (operation.kind === 'reorder-steps') {\n if (!reorderFlowNodes(yDoc, operation.order)) throw new FlowDraftCommandError('INVALID_COMMAND', 'Step order must be a complete permutation');\n } else {\n setMeta(yDoc, operation.values);\n }\n\n const afterOperationRevision = currentRevision(yDoc);\n if (afterOperationRevision === beforeRevision) advanceCommandRevision(yDoc);\n const result: FlowDraftCommandResult = {\n outcome: 'applied',\n commandId: command.commandId,\n revision: currentRevision(yDoc),\n ...(nodeId ? { nodeId } : {}),\n ...(blockId ? { blockId } : {}),\n };\n commands.set(command.commandId, { fingerprint: commandFingerprint, result });\n });\n\n const stored = commands.get(command.commandId);\n if (!stored) throw new FlowDraftCommandError('INVALID_COMMAND', 'Draft command did not commit');\n return { ...stored.result };\n },\n applyBatch: (commands) => {\n if (commands.length === 0) return [];\n const beforeVector = Y.encodeStateVector(yDoc);\n const stagedDoc = new Y.Doc();\n try {\n Y.applyUpdate(stagedDoc, Y.encodeStateAsUpdate(yDoc));\n const stagedRepository = createYjsFlowDefinitionDraftRepository(stagedDoc);\n const results = commands.map((command) => stagedRepository.apply(command));\n const update = Y.encodeStateAsUpdate(stagedDoc, beforeVector);\n yDoc.transact(() => Y.applyUpdate(yDoc, update), 'flow-draft-command-batch');\n return results;\n } finally {\n stagedDoc.destroy();\n }\n },\n auditProjections: () => auditFlowProjections(yDoc),\n repairProjections: () => repairFlowProjections(yDoc),\n };\n return repository;\n}\n","import * as Y from 'yjs';\nimport type { Doc as YDoc, Map as YMap } from 'yjs';\nimport { isYMapLike } from '../yjsTypes';\n\n/**\n * Top-level Y.Doc map holding the flow's **human** participant roster, keyed by\n * Matrix user id. Deliberately not called \"agents\": everything under\n * `lib/flowAgent/*` means an AI/oracle actor, and the two must not be conflated.\n *\n * This is template *configuration*, not execution state — the roster records who\n * a flow is meant to be run with, at what Matrix power level, and which of the\n * flow's connections (`connections.ts`) each of them needs access to, so that\n * instantiating a template into a room can invite exactly those users and ask\n * for exactly the right grants. It is therefore NOT cleared by\n * `clearRuntimeForTemplateClone` (`flowEngine/runtime.ts`), which only clears\n * observation/execution maps; a clone must carry the roster forward or the\n * instantiated room comes up empty.\n */\nexport const FLOW_PARTICIPANTS_MAP_KEY = 'qi.flow.participants';\n\nexport type FlowParticipant = {\n /** Matrix user id, e.g. `'@alice:matrix.example.org'`. */\n userId: string;\n /** Matrix power level; integer, `0` when unknown. */\n powerLevel: number;\n displayName?: string;\n /** `mxc://` url. */\n avatarUrl?: string;\n /**\n * Toolkit keys (`FlowConnection.toolkit`) this participant needs access to.\n * Absent when the participant needs none.\n */\n requires?: string[];\n /**\n * Block ids of the steps this participant may carry out. Absent when none\n * were chosen — being on the roster is not the same as being allowed to\n * execute: plenty of actors are only there to watch. A step id that no longer\n * exists in the document is ignored.\n */\n steps?: string[];\n /** Epoch ms. Supplied by the caller — this module never calls `Date.now()`. */\n addedAt?: number;\n};\n\n/**\n * Read the participant roster.\n *\n * Normalizes defensively rather than trusting the map: this is read against a\n * live, replicated doc, so an entry can be observed mid-sync, written by an older\n * client, or malformed outright. Anything that is not a `Y.Map` carrying a\n * non-empty `userId` is skipped, and a read never throws.\n *\n * Order is stable across peers — `addedAt` ascending with unstamped entries last,\n * tie-broken by `userId` — so a rendered roster does not reshuffle on every sync.\n */\nexport function readFlowParticipants(yDoc: YDoc): FlowParticipant[] {\n const participants: FlowParticipant[] = [];\n getParticipantsMap(yDoc).forEach((value) => {\n const participant = toParticipant(value);\n if (participant) participants.push(participant);\n });\n\n return participants.sort((a, b) => {\n const aAt = a.addedAt ?? Number.POSITIVE_INFINITY;\n const bAt = b.addedAt ?? Number.POSITIVE_INFINITY;\n if (aAt !== bAt) return aAt < bAt ? -1 : 1;\n return compareUserIds(a.userId, b.userId);\n });\n}\n\n/**\n * Add a participant, or merge into the existing entry for the same `userId`.\n *\n * `addedAt` is write-once: an existing stamp is preserved so a later edit\n * (a power-level bump, a display-name refresh) cannot reorder the roster.\n * Optional string fields are merged — omit one to leave it as it is, pass `''`\n * to clear it; `requires` follows the same rule with `[]` as the clearing value.\n */\nexport function upsertFlowParticipant(yDoc: YDoc, participant: FlowParticipant): void {\n const userId = participant.userId;\n if (typeof userId !== 'string' || userId.length === 0) return;\n\n yDoc.transact(() => {\n const entry = ensureEntry(getParticipantsMap(yDoc), userId);\n entry.set('userId', userId);\n entry.set('powerLevel', toPowerLevel(participant.powerLevel));\n mergeOptionalString(entry, 'displayName', participant.displayName);\n mergeOptionalString(entry, 'avatarUrl', participant.avatarUrl);\n mergeRequirements(entry, participant.requires);\n mergeSteps(entry, participant.steps);\n\n const addedAt = toTimestamp(entry.get('addedAt')) ?? toTimestamp(participant.addedAt);\n if (addedAt !== undefined) entry.set('addedAt', addedAt);\n });\n}\n\n/** Remove a participant. No-op when the roster has no entry for `userId`. */\nexport function removeFlowParticipant(yDoc: YDoc, userId: string): void {\n yDoc.transact(() => {\n const map = getParticipantsMap(yDoc);\n if (map.has(userId)) map.delete(userId);\n });\n}\n\n/**\n * Set an existing participant's power level. No-op when the participant is not on\n * the roster — a power level alone carries no identity, so creating an entry from\n * one would invent a participant nobody added.\n */\nexport function setFlowParticipantPowerLevel(yDoc: YDoc, userId: string, powerLevel: number): void {\n yDoc.transact(() => {\n const entry = getParticipantsMap(yDoc).get(userId);\n if (isYMapLike<unknown>(entry)) entry.set('powerLevel', toPowerLevel(powerLevel));\n });\n}\n\n/**\n * Replace the connections an existing participant needs access to. Pass `[]` to\n * clear them. No-op when the participant is not on the roster, for the same\n * reason as {@link setFlowParticipantPowerLevel}.\n */\nexport function setFlowParticipantRequirements(yDoc: YDoc, userId: string, requires: string[]): void {\n yDoc.transact(() => {\n const entry = getParticipantsMap(yDoc).get(userId);\n if (isYMapLike<unknown>(entry)) mergeRequirements(entry, requires ?? []);\n });\n}\n\n/**\n * Replace the steps an existing participant may carry out. Pass `[]` to take\n * every step away and leave them watching. No-op when the participant is not on\n * the roster, for the same reason as {@link setFlowParticipantPowerLevel}.\n */\nexport function setFlowParticipantSteps(yDoc: YDoc, userId: string, steps: string[]): void {\n yDoc.transact(() => {\n const entry = getParticipantsMap(yDoc).get(userId);\n if (isYMapLike<unknown>(entry)) mergeSteps(entry, steps ?? []);\n });\n}\n\n// ─── Internal helpers ──────────────────────────────────────────────────────────\n\nfunction getParticipantsMap(yDoc: YDoc): YMap<unknown> {\n return yDoc.getMap<unknown>(FLOW_PARTICIPANTS_MAP_KEY);\n}\n\n/** The entry for `userId`, replacing any malformed (non-`Y.Map`) value in place. */\nfunction ensureEntry(map: YMap<unknown>, userId: string): YMap<unknown> {\n const existing = map.get(userId);\n if (isYMapLike<unknown>(existing)) return existing;\n const created = new Y.Map<unknown>();\n map.set(userId, created);\n return created;\n}\n\nfunction toParticipant(value: unknown): FlowParticipant | undefined {\n if (!isYMapLike<unknown>(value)) return undefined;\n\n const userId = value.get('userId');\n if (typeof userId !== 'string' || userId.length === 0) return undefined;\n\n const participant: FlowParticipant = { userId, powerLevel: toPowerLevel(value.get('powerLevel')) };\n\n const displayName = toNonEmptyString(value.get('displayName'));\n if (displayName !== undefined) participant.displayName = displayName;\n\n const avatarUrl = toNonEmptyString(value.get('avatarUrl'));\n if (avatarUrl !== undefined) participant.avatarUrl = avatarUrl;\n\n const requires = toRequirements(value.get('requires'));\n if (requires.length > 0) participant.requires = requires;\n\n const steps = toRequirements(value.get('steps'));\n if (steps.length > 0) participant.steps = steps;\n\n const addedAt = toTimestamp(value.get('addedAt'));\n if (addedAt !== undefined) participant.addedAt = addedAt;\n\n return participant;\n}\n\n/** Absent, non-numeric, or NaN power levels read as `0` — Matrix's default. */\nfunction toPowerLevel(value: unknown): number {\n const numeric = typeof value === 'string' ? Number(value) : value;\n return typeof numeric === 'number' && Number.isFinite(numeric) ? Math.trunc(numeric) : 0;\n}\n\nfunction toTimestamp(value: unknown): number | undefined {\n const numeric = typeof value === 'string' ? Number(value) : value;\n return typeof numeric === 'number' && Number.isFinite(numeric) ? Math.trunc(numeric) : undefined;\n}\n\nfunction toNonEmptyString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/** Non-empty strings only, de-duplicated, in the order they were written. */\nfunction toRequirements(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n const requires: string[] = [];\n for (const entry of value) {\n if (typeof entry !== 'string' || entry.length === 0) continue;\n if (!requires.includes(entry)) requires.push(entry);\n }\n return requires;\n}\n\nfunction mergeOptionalString(entry: YMap<unknown>, key: string, value: string | undefined): void {\n if (value === undefined) return;\n if (value.length === 0) entry.delete(key);\n else entry.set(key, value);\n}\n\n/** Omit to leave the requirements as they are, pass `[]` to clear them. */\nfunction mergeRequirements(entry: YMap<unknown>, value: string[] | undefined): void {\n if (value === undefined) return;\n const requires = toRequirements(value);\n if (requires.length === 0) entry.delete('requires');\n else entry.set('requires', requires);\n}\n\n/** Omit to leave the steps as they are, pass `[]` to clear them. */\nfunction mergeSteps(entry: YMap<unknown>, value: string[] | undefined): void {\n if (value === undefined) return;\n const steps = toRequirements(value);\n if (steps.length === 0) entry.delete('steps');\n else entry.set('steps', steps);\n}\n\nfunction compareUserIds(a: string, b: string): number {\n if (a === b) return 0;\n return a < b ? -1 : 1;\n}\n","import type { Doc as YDoc } from 'yjs';\nimport { canonicalizeJson, deepFreezeJson, type CanonicalJsonValue } from '../flowEngine/vnext/canonical';\nimport {\n signFlowDefinitionRevision,\n type ActionContractRef,\n type DID,\n type FlowDefinitionRef,\n type FlowDefinitionRevisionRepository,\n type FlowDefinitionRevisionSigner,\n type FlowDefinitionRevisionV1,\n type FlowId,\n type FlowJsonObject,\n type FlowRevisionId,\n type FlowStepDefinitionV1,\n type FlowTriggerV1,\n type Sha256Digest,\n} from '../flowEngine/vnext/contracts';\nimport { readFlowDocument } from './authoring';\nimport { readFlowConnections, type FlowConnection } from './connections';\nimport { readFlowParticipants, type FlowParticipant } from './participants';\n\nexport interface PublishFlowDefinitionParams {\n yDoc: YDoc;\n flowId: FlowId;\n revision: FlowRevisionId;\n publishedAt: string;\n publishedBy: DID;\n signer: FlowDefinitionRevisionSigner;\n repository: FlowDefinitionRevisionRepository;\n actionManifestDigest: Sha256Digest;\n actionContracts: Readonly<Record<string, ActionContractRef>>;\n expectedParent?: FlowDefinitionRef;\n source?: { operation: 'republish-legacy' | 'instantiate-template' | 'fork'; ref: string };\n}\n\nexport interface PublishFlowDefinitionResult {\n outcome: 'published' | 'exists';\n ref: FlowDefinitionRef;\n revision: FlowDefinitionRevisionV1;\n}\n\nexport class FlowDefinitionPublicationError extends Error {\n constructor(\n readonly code: 'NOT_VNEXT_DRAFT' | 'EMPTY_FLOW' | 'MISSING_ACTION_CONTRACT' | 'INVALID_CONFIGURATION' | 'INVALID_TRIGGER' | 'PARENT_CONFLICT',\n message: string\n ) {\n super(message);\n this.name = 'FlowDefinitionPublicationError';\n }\n}\n\nfunction parseObject(value: string | undefined, field: string): FlowJsonObject {\n if (!value) return {};\n try {\n const parsed = JSON.parse(value) as unknown;\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) return parsed as FlowJsonObject;\n } catch (error) {\n throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', `Flow step ${field} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', `Flow step ${field} must be a JSON object`);\n}\n\nfunction parseConditions(value: string | undefined): FlowJsonObject[] {\n if (!value) return [];\n const parsed = parseObject(value, 'conditions');\n if (!Array.isArray(parsed.conditions)) throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', 'Flow step conditions must contain an array');\n if (parsed.conditions.some((condition) => !condition || typeof condition !== 'object' || Array.isArray(condition))) {\n throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', 'Every Flow step condition must be a JSON object');\n }\n return parsed.conditions as FlowJsonObject[];\n}\n\nfunction participantRequirement(participant: FlowParticipant): FlowJsonObject {\n return {\n userId: participant.userId,\n powerLevel: participant.powerLevel,\n ...(participant.displayName ? { displayName: participant.displayName } : {}),\n ...(participant.avatarUrl ? { avatarUrl: participant.avatarUrl } : {}),\n ...(participant.requires ? { requires: [...participant.requires] } : {}),\n ...(participant.addedAt !== undefined ? { addedAt: participant.addedAt } : {}),\n };\n}\n\nfunction connectionRequirement(connection: FlowConnection): FlowJsonObject {\n return {\n toolkit: connection.toolkit,\n ...(connection.label ? { label: connection.label } : {}),\n ...(connection.optional ? { optional: true } : {}),\n ...(connection.agent !== undefined ? { agent: connection.agent } : {}),\n requires: [...connection.requires],\n ...(connection.addedAt !== undefined ? { addedAt: connection.addedAt } : {}),\n };\n}\n\nfunction parseTrigger(value: string | undefined, triggerMode: string | undefined): FlowTriggerV1 {\n let trigger: Record<string, unknown> = {};\n if (value) {\n try {\n const parsed = JSON.parse(value) as unknown;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'Flow trigger must be a JSON object');\n }\n trigger = parsed as Record<string, unknown>;\n } catch (error) {\n if (error instanceof FlowDefinitionPublicationError) throw error;\n throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'Flow trigger is not valid JSON');\n }\n }\n const type = String(trigger.type ?? triggerMode ?? 'manual');\n if (type === 'manual') return { kind: 'manual' };\n if (type === 'flow.start') return { kind: 'flow.start' };\n if (type === 'topic.request') {\n if (typeof trigger.requestKind !== 'string' || trigger.requestKind.trim().length === 0) {\n throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'topic.request requires requestKind');\n }\n return { kind: 'topic.request', requestKind: trigger.requestKind };\n }\n if (type === 'block.event') {\n if (typeof trigger.sourceBlockId !== 'string' || typeof trigger.eventName !== 'string') {\n throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'block.event requires sourceBlockId and eventName');\n }\n return { kind: 'step.event', sourceBlockId: trigger.sourceBlockId, eventName: trigger.eventName };\n }\n if (type === 'block.event.all') {\n if (!Array.isArray(trigger.sources)) throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'block.event.all requires sources');\n const sources = trigger.sources.map((source) => {\n if (!source || typeof source !== 'object') throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'Invalid block.event.all source');\n const candidate = source as Record<string, unknown>;\n if (typeof candidate.sourceBlockId !== 'string' || typeof candidate.eventName !== 'string' || typeof candidate.alias !== 'string') {\n throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'Every block.event.all source requires sourceBlockId, eventName, and alias');\n }\n return {\n sourceBlockId: candidate.sourceBlockId,\n eventName: candidate.eventName,\n alias: candidate.alias,\n ...(candidate.optional === true ? { optional: true } : {}),\n };\n });\n return { kind: 'step.event.all', sources };\n }\n if (type === 'schedule') {\n if (typeof trigger.scheduleRef !== 'string' || trigger.scheduleRef.trim().length === 0) {\n throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'schedule requires scheduleRef');\n }\n if (trigger.scheduleRevision !== undefined && (!Number.isInteger(trigger.scheduleRevision) || Number(trigger.scheduleRevision) < 1)) {\n throw new FlowDefinitionPublicationError('INVALID_TRIGGER', 'scheduleRevision must be an integer greater than zero');\n }\n return {\n kind: 'schedule',\n scheduleRef: trigger.scheduleRef,\n ...(typeof trigger.scheduleRevision === 'number' ? { scheduleRevision: trigger.scheduleRevision } : {}),\n };\n }\n throw new FlowDefinitionPublicationError('INVALID_TRIGGER', `Unsupported Flow trigger: ${type}`);\n}\n\nfunction actorFromProps(props: Record<string, string>): FlowJsonObject {\n const actor: FlowJsonObject = {};\n if (props.authorisedActors) {\n let actors: unknown;\n try {\n actors = JSON.parse(props.authorisedActors);\n } catch (error) {\n throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', `Flow step authorisedActors is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n if (!Array.isArray(actors) || actors.some((actorDid) => typeof actorDid !== 'string')) {\n throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', 'Flow step authorisedActors must be an array of DID strings');\n }\n actor.authorisedActors = actors;\n }\n if (props.parentCapability) actor.parentCapability = props.parentCapability;\n return actor;\n}\n\nfunction ttlMsFromProps(props: Record<string, string>): number | undefined {\n const raw = props.ttlMs ?? props.ttl;\n if (!raw) return undefined;\n const numeric = Number(raw);\n if (!Number.isFinite(numeric) || numeric < 0) {\n throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', 'Flow step ttlMs must be a non-negative number');\n }\n return numeric;\n}\n\nfunction isPositiveDuration(value: string): boolean {\n const match = /^P(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?)?$/u.exec(value);\n return Boolean(match && match.slice(1).some((part) => Number(part ?? 0) > 0));\n}\n\nfunction ttlConstraintsFromProps(props: Record<string, string>): FlowStepDefinitionV1['ttl'] | undefined {\n const ttl: NonNullable<FlowStepDefinitionV1['ttl']> = {};\n if (props.ttlAbsoluteDueDate) {\n if (!Number.isFinite(Date.parse(props.ttlAbsoluteDueDate))) {\n throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', 'Flow step ttlAbsoluteDueDate must be a valid ISO 8601 date');\n }\n ttl.absoluteDueDate = props.ttlAbsoluteDueDate;\n }\n for (const [prop, field] of [\n ['ttlFromEnablement', 'fromEnablement'],\n ['ttlFromCommitment', 'fromCommitment'],\n ] as const) {\n const value = props[prop];\n if (!value) continue;\n if (!isPositiveDuration(value)) {\n throw new FlowDefinitionPublicationError('INVALID_CONFIGURATION', `Flow step ${prop} must be a positive ISO 8601 day/hour/minute duration`);\n }\n ttl[field] = value;\n }\n return Object.keys(ttl).length > 0 ? ttl : undefined;\n}\n\nfunction toStep(node: NonNullable<ReturnType<typeof readFlowDocument>>['nodes'][number], action: ActionContractRef): FlowStepDefinitionV1 {\n const ttlMs = ttlMsFromProps(node.props);\n const ttl = ttlConstraintsFromProps(node.props);\n return {\n stepId: node.nodeId,\n blockId: node.blockId,\n title: node.title,\n ...(node.description ? { description: node.description } : {}),\n action,\n resource: node.with,\n configuration: { ...node.props },\n inputs: parseObject(node.props.inputs, 'inputs'),\n trigger: parseTrigger(node.props.trigger, node.props.triggerMode),\n conditions: parseConditions(node.props.conditions),\n actor: actorFromProps(node.props),\n ...(ttlMs !== undefined ? { ttlMs } : {}),\n ...(ttl ? { ttl } : {}),\n };\n}\n\n/** Publish one immutable revision from the canonical typed draft. */\nexport async function publishFlowDefinitionRevision(params: PublishFlowDefinitionParams): Promise<PublishFlowDefinitionResult> {\n const expectedParent = params.expectedParent\n ? deepFreezeJson(JSON.parse(canonicalizeJson(params.expectedParent as unknown as CanonicalJsonValue)) as FlowDefinitionRef)\n : undefined;\n if (params.yDoc.getMap('qi.flow.meta').get('draftSchemaVersion') !== 1) {\n throw new FlowDefinitionPublicationError('NOT_VNEXT_DRAFT', 'Legacy Flow documents must be explicitly republished before vNext publication');\n }\n const document = readFlowDocument(params.yDoc);\n if (!document || document.nodes.length === 0) throw new FlowDefinitionPublicationError('EMPTY_FLOW', 'A Flow definition requires at least one step');\n\n const steps = document.nodes.map((node) => {\n const actionType = node.props.actionType;\n const action = actionType ? params.actionContracts[actionType] : undefined;\n if (!action) throw new FlowDefinitionPublicationError('MISSING_ACTION_CONTRACT', `No pinned Action contract for ${actionType || node.nodeId}`);\n if (action.type !== actionType || action.can !== node.can) {\n throw new FlowDefinitionPublicationError('MISSING_ACTION_CONTRACT', `Pinned Action contract does not match ${actionType} (${node.can})`);\n }\n if (action.manifestDigest !== params.actionManifestDigest) {\n throw new FlowDefinitionPublicationError('MISSING_ACTION_CONTRACT', `Action ${action.type} is not pinned to the publication manifest`);\n }\n return toStep(node, action);\n });\n\n const signed = await signFlowDefinitionRevision(\n {\n kind: 'qi.flow.definition-revision',\n schemaVersion: '1.0',\n ref: { flowId: params.flowId, revision: params.revision },\n ...(expectedParent ? { parent: expectedParent } : {}),\n publishedAt: params.publishedAt,\n publishedBy: params.publishedBy,\n actionManifestDigest: params.actionManifestDigest,\n title: document.meta.title,\n ...(document.meta.goal ? { goal: document.meta.goal } : {}),\n steps,\n participantRequirements: readFlowParticipants(params.yDoc).map(participantRequirement),\n connectionRequirements: readFlowConnections(params.yDoc).map(connectionRequirement),\n ...(params.source ? { source: params.source } : {}),\n },\n params.signer\n );\n const ref: FlowDefinitionRef = { ...signed.ref, digest: signed.integrity.digest.value };\n const outcome = await params.repository.publish(signed, expectedParent);\n if (outcome === 'parent_conflict') throw new FlowDefinitionPublicationError('PARENT_CONFLICT', 'Flow definition head changed before publication');\n return { outcome, ref, revision: signed };\n}\n","import { canonicalizeJson, deepFreezeJson, digestCanonicalJson, type CanonicalJsonValue } from '../flowEngine/vnext/canonical';\nimport type { Sha256Digest } from '../flowEngine/vnext/contracts';\nimport type { FlowDefinitionDraftRepository, FlowDraftCommandOperation, FlowDraftCommandResult } from './draftRepository';\n\nexport interface FlowDraftProposalPayloadV1 {\n kind: 'qi.flow.draft-proposal';\n schemaVersion: '1.0';\n proposalId: string;\n proposedBy: string;\n proposedAt: string;\n baseRevision: number;\n operations: readonly FlowDraftCommandOperation[];\n summary: string;\n}\n\nexport type FlowDraftProposalV1 = FlowDraftProposalPayloadV1 & { proposalDigest: Sha256Digest };\n\nexport interface FlowDraftProposalApprovalV1 {\n kind: 'qi.flow.draft-proposal-approval';\n schemaVersion: '1.0';\n proposalId: string;\n proposalDigest: Sha256Digest;\n approvedBy: string;\n approvedAt: string;\n approvalReference: string;\n}\n\nfunction canonicalSnapshot<T>(value: T): T {\n return deepFreezeJson(JSON.parse(canonicalizeJson(value as unknown as CanonicalJsonValue))) as T;\n}\n\nexport async function createFlowDraftProposal(payload: FlowDraftProposalPayloadV1): Promise<FlowDraftProposalV1> {\n const snapshot = canonicalSnapshot(payload);\n if (!snapshot.proposalId || !snapshot.proposedBy || snapshot.operations.length === 0) throw new Error('Flow draft proposal identity, proposer, and operations are required');\n return deepFreezeJson({ ...snapshot, proposalDigest: (await digestCanonicalJson(snapshot as unknown as CanonicalJsonValue)) as Sha256Digest });\n}\n\n/**\n * Apply a reviewed Oracle proposal only when an external approval binds the\n * exact proposal digest. The Oracle never receives direct Yjs access.\n */\nexport async function applyApprovedFlowDraftProposal(\n repository: FlowDefinitionDraftRepository,\n proposal: FlowDraftProposalV1,\n approval: FlowDraftProposalApprovalV1\n): Promise<FlowDraftCommandResult[]> {\n const proposalSnapshot = canonicalSnapshot(proposal);\n const approvalSnapshot = canonicalSnapshot(approval);\n const { proposalDigest, ...proposalPayload } = proposalSnapshot;\n const actualProposalDigest = (await digestCanonicalJson(proposalPayload as unknown as CanonicalJsonValue)) as Sha256Digest;\n if (\n approvalSnapshot.kind !== 'qi.flow.draft-proposal-approval' ||\n approvalSnapshot.schemaVersion !== '1.0' ||\n approvalSnapshot.proposalId !== proposalSnapshot.proposalId ||\n approvalSnapshot.proposalDigest !== proposalDigest ||\n actualProposalDigest !== proposalDigest ||\n !approvalSnapshot.approvedBy ||\n !approvalSnapshot.approvalReference\n ) {\n throw new Error('Flow draft proposal requires an approval for its exact digest');\n }\n const approvedRevision = repository.read().revision;\n if (approvedRevision !== proposalSnapshot.baseRevision) {\n throw new Error(`Flow draft proposal was approved for revision ${proposalSnapshot.baseRevision}, but the draft is now revision ${approvedRevision}`);\n }\n const commands = proposalSnapshot.operations.map(\n (operation, index) =>\n ({\n kind: 'qi.flow.draft-command',\n schemaVersion: '1.0',\n commandId: `${proposalSnapshot.proposalId}:${index}`,\n expectedRevision: proposalSnapshot.baseRevision + index,\n actorDid: approvalSnapshot.approvedBy,\n operation,\n }) as const\n );\n return repository.applyBatch(commands);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAY,OAAO;AAiEZ,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/C,YACW,MACT,SACS,SACT;AACA,UAAM,OAAO;AAJJ;AAEA;AAGT,SAAK,OAAO;AAAA,EACd;AACF;AAEA,IAAM,eAAe;AACrB,IAAM,oBAAoB;AAC1B,IAAM,8BAA8B;AACpC,IAAM,qBAAqB,oBAAI,IAAI,CAAC,iBAAiB,sBAAsB,gBAAgB,CAAC;AAE5F,SAAS,gBAAgB,MAAoB;AAC3C,QAAM,OAAO,KAAK,OAAO,cAAc;AACvC,MAAI,KAAK,IAAI,oBAAoB,MAAM,EAAG,QAAO,OAAO,KAAK,IAAI,eAAe,KAAK,CAAC;AACtF,SAAO,OAAO,KAAK,OAAO,iBAAiB,EAAE,IAAI,2BAA2B,KAAK,CAAC;AACpF;AAEA,SAAS,YAAY,SAAmC;AACtD,SAAO,iBAAiB,OAAwC;AAClE;AAEA,SAAS,uBAAuB,MAAoB;AAClD,QAAM,OAAO,KAAK,OAAO,cAAc;AACvC,QAAM,OAAO,gBAAgB,IAAI,IAAI;AACrC,MAAI,KAAK,IAAI,oBAAoB,MAAM,GAAG;AACxC,SAAK,OAAO,iBAAiB,EAAE,IAAI,6BAA6B,IAAI;AACpE,WAAO;AAAA,EACT;AACA,OAAK,IAAI,iBAAiB,IAAI;AAC9B,OAAK,IAAI,mBAAkB,oBAAI,KAAK,GAAE,YAAY,CAAC;AACnD,SAAO;AACT;AAEA,SAAS,QAAQ,MAAY,QAAgE;AAC3F,QAAM,OAAO,KAAK,OAAO,cAAc;AACvC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,UAAU,KAAM,MAAK,OAAO,GAAG;AAAA,QAC9B,MAAK,IAAI,KAAK,KAAK;AAAA,EAC1B;AACA,yBAAuB,IAAI;AAC7B;AAGO,SAAS,uCAAuC,MAA2C;AAChG,QAAM,aAA4C;AAAA,IAChD,MAAM,OAAO,EAAE,UAAU,gBAAgB,IAAI,GAAG,UAAU,iBAAiB,IAAI,EAAE;AAAA,IACjF,OAAO,CAAC,YAAY;AAClB,UAAI,QAAQ,SAAS,2BAA2B,QAAQ,kBAAkB,SAAS,CAAC,QAAQ,aAAa,CAAC,QAAQ,UAAU;AAC1H,cAAM,IAAI,sBAAsB,mBAAmB,+CAA+C;AAAA,MACpG;AACA,UAAI,QAAQ,UAAU,SAAS,YAAY;AACzC,cAAM,eAAe,OAAO,KAAK,QAAQ,UAAU,MAAM,EAAE,OAAO,CAAC,QAAQ,mBAAmB,IAAI,GAAG,CAAC;AACtG,YAAI,aAAa,SAAS,GAAG;AAC3B,gBAAM,IAAI,sBAAsB,mBAAmB,0DAA0D,aAAa,KAAK,EAAE,KAAK,IAAI,CAAC,IAAI;AAAA,YAC7I,cAAc,aAAa,KAAK;AAAA,UAClC,CAAC;AAAA,QACH;AAAA,MACF;AACA,YAAM,WAAW,KAAK,OAA2B,YAAY;AAC7D,YAAM,qBAAqB,YAAY,OAAO;AAC9C,YAAM,WAAW,SAAS,IAAI,QAAQ,SAAS;AAC/C,UAAI,UAAU;AACZ,YAAI,SAAS,gBAAgB,oBAAoB;AAC/C,gBAAM,IAAI,sBAAsB,wBAAwB,iBAAiB,QAAQ,SAAS,oCAAoC;AAAA,QAChI;AACA,eAAO,EAAE,GAAG,SAAS,QAAQ,SAAS,YAAY;AAAA,MACpD;AAEA,YAAM,iBAAiB,gBAAgB,IAAI;AAC3C,UAAI,QAAQ,qBAAqB,gBAAgB;AAC/C,cAAM,IAAI,sBAAsB,qBAAqB,2BAA2B,QAAQ,gBAAgB,WAAW,cAAc,EAAE;AAAA,MACrI;AAEA,UAAI;AACJ,UAAI;AACJ,WAAK,SAAS,MAAM;AAClB,cAAM,YAAY,QAAQ;AAC1B,YAAI,UAAU,SAAS,YAAY;AACjC,gBAAM,QAAQ,YAAY,MAAM;AAAA,YAC9B,MAAM,UAAU;AAAA,YAChB,QAAQ,UAAU;AAAA,YAClB,SAAS,UAAU;AAAA,YACnB,aAAa,UAAU;AAAA,YACvB,OAAO,UAAU;AAAA,YACjB,OAAO,UAAU;AAAA,UACnB,CAAC;AACD,cAAI,CAAC,MAAO,OAAM,IAAI,sBAAsB,mBAAmB,4DAA4D;AAC3H,mBAAS,MAAM;AACf,oBAAU,MAAM;AAAA,QAClB,WAAW,UAAU,SAAS,qBAAqB;AACjD,cAAI,CAAC,cAAc,MAAM,UAAU,SAAS,UAAU,KAAK,GAAG;AAC5D,kBAAM,IAAI,sBAAsB,mBAAmB,uBAAuB,UAAU,OAAO,EAAE;AAAA,UAC/F;AACA,oBAAU,UAAU;AAAA,QACtB,WAAW,UAAU,SAAS,eAAe;AAC3C,gBAAM,UAAU,eAAe,MAAM,UAAU,MAAM;AACrD,cAAI,CAAC,QAAQ,IAAI;AACf,kBAAM,IAAI,sBAAsB,mBAAmB,aAAa,UAAU,MAAM,wBAAwB,EAAE,cAAc,QAAQ,aAAa,CAAC;AAAA,UAChJ;AACA,mBAAS,UAAU;AAAA,QACrB,WAAW,UAAU,SAAS,iBAAiB;AAC7C,cAAI,CAAC,iBAAiB,MAAM,UAAU,KAAK,EAAG,OAAM,IAAI,sBAAsB,mBAAmB,2CAA2C;AAAA,QAC9I,OAAO;AACL,kBAAQ,MAAM,UAAU,MAAM;AAAA,QAChC;AAEA,cAAM,yBAAyB,gBAAgB,IAAI;AACnD,YAAI,2BAA2B,eAAgB,wBAAuB,IAAI;AAC1E,cAAM,SAAiC;AAAA,UACrC,SAAS;AAAA,UACT,WAAW,QAAQ;AAAA,UACnB,UAAU,gBAAgB,IAAI;AAAA,UAC9B,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,UAC3B,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC/B;AACA,iBAAS,IAAI,QAAQ,WAAW,EAAE,aAAa,oBAAoB,OAAO,CAAC;AAAA,MAC7E,CAAC;AAED,YAAM,SAAS,SAAS,IAAI,QAAQ,SAAS;AAC7C,UAAI,CAAC,OAAQ,OAAM,IAAI,sBAAsB,mBAAmB,8BAA8B;AAC9F,aAAO,EAAE,GAAG,OAAO,OAAO;AAAA,IAC5B;AAAA,IACA,YAAY,CAAC,aAAa;AACxB,UAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AACnC,YAAM,eAAiB,oBAAkB,IAAI;AAC7C,YAAM,YAAY,IAAM,MAAI;AAC5B,UAAI;AACF,QAAE,cAAY,WAAa,sBAAoB,IAAI,CAAC;AACpD,cAAM,mBAAmB,uCAAuC,SAAS;AACzE,cAAM,UAAU,SAAS,IAAI,CAAC,YAAY,iBAAiB,MAAM,OAAO,CAAC;AACzE,cAAM,SAAW,sBAAoB,WAAW,YAAY;AAC5D,aAAK,SAAS,MAAQ,cAAY,MAAM,MAAM,GAAG,0BAA0B;AAC3E,eAAO;AAAA,MACT,UAAE;AACA,kBAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAAA,IACA,kBAAkB,MAAM,qBAAqB,IAAI;AAAA,IACjD,mBAAmB,MAAM,sBAAsB,IAAI;AAAA,EACrD;AACA,SAAO;AACT;;;ACnNA,YAAYA,QAAO;AAkBZ,IAAM,4BAA4B;AAqClC,SAAS,qBAAqB,MAA+B;AAClE,QAAM,eAAkC,CAAC;AACzC,qBAAmB,IAAI,EAAE,QAAQ,CAAC,UAAU;AAC1C,UAAM,cAAc,cAAc,KAAK;AACvC,QAAI,YAAa,cAAa,KAAK,WAAW;AAAA,EAChD,CAAC;AAED,SAAO,aAAa,KAAK,CAAC,GAAG,MAAM;AACjC,UAAM,MAAM,EAAE,WAAW,OAAO;AAChC,UAAM,MAAM,EAAE,WAAW,OAAO;AAChC,QAAI,QAAQ,IAAK,QAAO,MAAM,MAAM,KAAK;AACzC,WAAO,eAAe,EAAE,QAAQ,EAAE,MAAM;AAAA,EAC1C,CAAC;AACH;AAUO,SAAS,sBAAsB,MAAY,aAAoC;AACpF,QAAM,SAAS,YAAY;AAC3B,MAAI,OAAO,WAAW,YAAY,OAAO,WAAW,EAAG;AAEvD,OAAK,SAAS,MAAM;AAClB,UAAM,QAAQ,YAAY,mBAAmB,IAAI,GAAG,MAAM;AAC1D,UAAM,IAAI,UAAU,MAAM;AAC1B,UAAM,IAAI,cAAc,aAAa,YAAY,UAAU,CAAC;AAC5D,wBAAoB,OAAO,eAAe,YAAY,WAAW;AACjE,wBAAoB,OAAO,aAAa,YAAY,SAAS;AAC7D,sBAAkB,OAAO,YAAY,QAAQ;AAC7C,eAAW,OAAO,YAAY,KAAK;AAEnC,UAAM,UAAU,YAAY,MAAM,IAAI,SAAS,CAAC,KAAK,YAAY,YAAY,OAAO;AACpF,QAAI,YAAY,OAAW,OAAM,IAAI,WAAW,OAAO;AAAA,EACzD,CAAC;AACH;AAGO,SAAS,sBAAsB,MAAY,QAAsB;AACtE,OAAK,SAAS,MAAM;AAClB,UAAM,MAAM,mBAAmB,IAAI;AACnC,QAAI,IAAI,IAAI,MAAM,EAAG,KAAI,OAAO,MAAM;AAAA,EACxC,CAAC;AACH;AAOO,SAAS,6BAA6B,MAAY,QAAgB,YAA0B;AACjG,OAAK,SAAS,MAAM;AAClB,UAAM,QAAQ,mBAAmB,IAAI,EAAE,IAAI,MAAM;AACjD,QAAI,WAAoB,KAAK,EAAG,OAAM,IAAI,cAAc,aAAa,UAAU,CAAC;AAAA,EAClF,CAAC;AACH;AAOO,SAAS,+BAA+B,MAAY,QAAgB,UAA0B;AACnG,OAAK,SAAS,MAAM;AAClB,UAAM,QAAQ,mBAAmB,IAAI,EAAE,IAAI,MAAM;AACjD,QAAI,WAAoB,KAAK,EAAG,mBAAkB,OAAO,YAAY,CAAC,CAAC;AAAA,EACzE,CAAC;AACH;AAOO,SAAS,wBAAwB,MAAY,QAAgB,OAAuB;AACzF,OAAK,SAAS,MAAM;AAClB,UAAM,QAAQ,mBAAmB,IAAI,EAAE,IAAI,MAAM;AACjD,QAAI,WAAoB,KAAK,EAAG,YAAW,OAAO,SAAS,CAAC,CAAC;AAAA,EAC/D,CAAC;AACH;AAIA,SAAS,mBAAmB,MAA2B;AACrD,SAAO,KAAK,OAAgB,yBAAyB;AACvD;AAGA,SAAS,YAAY,KAAoB,QAA+B;AACtE,QAAM,WAAW,IAAI,IAAI,MAAM;AAC/B,MAAI,WAAoB,QAAQ,EAAG,QAAO;AAC1C,QAAM,UAAU,IAAM,OAAa;AACnC,MAAI,IAAI,QAAQ,OAAO;AACvB,SAAO;AACT;AAEA,SAAS,cAAc,OAA6C;AAClE,MAAI,CAAC,WAAoB,KAAK,EAAG,QAAO;AAExC,QAAM,SAAS,MAAM,IAAI,QAAQ;AACjC,MAAI,OAAO,WAAW,YAAY,OAAO,WAAW,EAAG,QAAO;AAE9D,QAAM,cAA+B,EAAE,QAAQ,YAAY,aAAa,MAAM,IAAI,YAAY,CAAC,EAAE;AAEjG,QAAM,cAAc,iBAAiB,MAAM,IAAI,aAAa,CAAC;AAC7D,MAAI,gBAAgB,OAAW,aAAY,cAAc;AAEzD,QAAM,YAAY,iBAAiB,MAAM,IAAI,WAAW,CAAC;AACzD,MAAI,cAAc,OAAW,aAAY,YAAY;AAErD,QAAM,WAAW,eAAe,MAAM,IAAI,UAAU,CAAC;AACrD,MAAI,SAAS,SAAS,EAAG,aAAY,WAAW;AAEhD,QAAM,QAAQ,eAAe,MAAM,IAAI,OAAO,CAAC;AAC/C,MAAI,MAAM,SAAS,EAAG,aAAY,QAAQ;AAE1C,QAAM,UAAU,YAAY,MAAM,IAAI,SAAS,CAAC;AAChD,MAAI,YAAY,OAAW,aAAY,UAAU;AAEjD,SAAO;AACT;AAGA,SAAS,aAAa,OAAwB;AAC5C,QAAM,UAAU,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AAC5D,SAAO,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,IAAI,KAAK,MAAM,OAAO,IAAI;AACzF;AAEA,SAAS,YAAY,OAAoC;AACvD,QAAM,UAAU,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AAC5D,SAAO,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,IAAI,KAAK,MAAM,OAAO,IAAI;AACzF;AAEA,SAAS,iBAAiB,OAAoC;AAC5D,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAGA,SAAS,eAAe,OAA0B;AAChD,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACnC,QAAM,WAAqB,CAAC;AAC5B,aAAW,SAAS,OAAO;AACzB,QAAI,OAAO,UAAU,YAAY,MAAM,WAAW,EAAG;AACrD,QAAI,CAAC,SAAS,SAAS,KAAK,EAAG,UAAS,KAAK,KAAK;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAsB,KAAa,OAAiC;AAC/F,MAAI,UAAU,OAAW;AACzB,MAAI,MAAM,WAAW,EAAG,OAAM,OAAO,GAAG;AAAA,MACnC,OAAM,IAAI,KAAK,KAAK;AAC3B;AAGA,SAAS,kBAAkB,OAAsB,OAAmC;AAClF,MAAI,UAAU,OAAW;AACzB,QAAM,WAAW,eAAe,KAAK;AACrC,MAAI,SAAS,WAAW,EAAG,OAAM,OAAO,UAAU;AAAA,MAC7C,OAAM,IAAI,YAAY,QAAQ;AACrC;AAGA,SAAS,WAAW,OAAsB,OAAmC;AAC3E,MAAI,UAAU,OAAW;AACzB,QAAM,QAAQ,eAAe,KAAK;AAClC,MAAI,MAAM,WAAW,EAAG,OAAM,OAAO,OAAO;AAAA,MACvC,OAAM,IAAI,SAAS,KAAK;AAC/B;AAEA,SAAS,eAAe,GAAW,GAAmB;AACpD,MAAI,MAAM,EAAG,QAAO;AACpB,SAAO,IAAI,IAAI,KAAK;AACtB;;;AC/LO,IAAM,iCAAN,cAA6C,MAAM;AAAA,EACxD,YACW,MACT,SACA;AACA,UAAM,OAAO;AAHJ;AAIT,SAAK,OAAO;AAAA,EACd;AACF;AAEA,SAAS,YAAY,OAA2B,OAA+B;AAC7E,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,QAAI,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,EAAG,QAAO;AAAA,EAC7E,SAAS,OAAO;AACd,UAAM,IAAI,+BAA+B,yBAAyB,aAAa,KAAK,uBAAuB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EACrK;AACA,QAAM,IAAI,+BAA+B,yBAAyB,aAAa,KAAK,wBAAwB;AAC9G;AAEA,SAAS,gBAAgB,OAA6C;AACpE,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,QAAM,SAAS,YAAY,OAAO,YAAY;AAC9C,MAAI,CAAC,MAAM,QAAQ,OAAO,UAAU,EAAG,OAAM,IAAI,+BAA+B,yBAAyB,4CAA4C;AACrJ,MAAI,OAAO,WAAW,KAAK,CAAC,cAAc,CAAC,aAAa,OAAO,cAAc,YAAY,MAAM,QAAQ,SAAS,CAAC,GAAG;AAClH,UAAM,IAAI,+BAA+B,yBAAyB,iDAAiD;AAAA,EACrH;AACA,SAAO,OAAO;AAChB;AAEA,SAAS,uBAAuB,aAA8C;AAC5E,SAAO;AAAA,IACL,QAAQ,YAAY;AAAA,IACpB,YAAY,YAAY;AAAA,IACxB,GAAI,YAAY,cAAc,EAAE,aAAa,YAAY,YAAY,IAAI,CAAC;AAAA,IAC1E,GAAI,YAAY,YAAY,EAAE,WAAW,YAAY,UAAU,IAAI,CAAC;AAAA,IACpE,GAAI,YAAY,WAAW,EAAE,UAAU,CAAC,GAAG,YAAY,QAAQ,EAAE,IAAI,CAAC;AAAA,IACtE,GAAI,YAAY,YAAY,SAAY,EAAE,SAAS,YAAY,QAAQ,IAAI,CAAC;AAAA,EAC9E;AACF;AAEA,SAAS,sBAAsB,YAA4C;AACzE,SAAO;AAAA,IACL,SAAS,WAAW;AAAA,IACpB,GAAI,WAAW,QAAQ,EAAE,OAAO,WAAW,MAAM,IAAI,CAAC;AAAA,IACtD,GAAI,WAAW,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,IAChD,GAAI,WAAW,UAAU,SAAY,EAAE,OAAO,WAAW,MAAM,IAAI,CAAC;AAAA,IACpE,UAAU,CAAC,GAAG,WAAW,QAAQ;AAAA,IACjC,GAAI,WAAW,YAAY,SAAY,EAAE,SAAS,WAAW,QAAQ,IAAI,CAAC;AAAA,EAC5E;AACF;AAEA,SAAS,aAAa,OAA2B,aAAgD;AAC/F,MAAI,UAAmC,CAAC;AACxC,MAAI,OAAO;AACT,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,UAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAClE,cAAM,IAAI,+BAA+B,mBAAmB,oCAAoC;AAAA,MAClG;AACA,gBAAU;AAAA,IACZ,SAAS,OAAO;AACd,UAAI,iBAAiB,+BAAgC,OAAM;AAC3D,YAAM,IAAI,+BAA+B,mBAAmB,gCAAgC;AAAA,IAC9F;AAAA,EACF;AACA,QAAM,OAAO,OAAO,QAAQ,QAAQ,eAAe,QAAQ;AAC3D,MAAI,SAAS,SAAU,QAAO,EAAE,MAAM,SAAS;AAC/C,MAAI,SAAS,aAAc,QAAO,EAAE,MAAM,aAAa;AACvD,MAAI,SAAS,iBAAiB;AAC5B,QAAI,OAAO,QAAQ,gBAAgB,YAAY,QAAQ,YAAY,KAAK,EAAE,WAAW,GAAG;AACtF,YAAM,IAAI,+BAA+B,mBAAmB,oCAAoC;AAAA,IAClG;AACA,WAAO,EAAE,MAAM,iBAAiB,aAAa,QAAQ,YAAY;AAAA,EACnE;AACA,MAAI,SAAS,eAAe;AAC1B,QAAI,OAAO,QAAQ,kBAAkB,YAAY,OAAO,QAAQ,cAAc,UAAU;AACtF,YAAM,IAAI,+BAA+B,mBAAmB,kDAAkD;AAAA,IAChH;AACA,WAAO,EAAE,MAAM,cAAc,eAAe,QAAQ,eAAe,WAAW,QAAQ,UAAU;AAAA,EAClG;AACA,MAAI,SAAS,mBAAmB;AAC9B,QAAI,CAAC,MAAM,QAAQ,QAAQ,OAAO,EAAG,OAAM,IAAI,+BAA+B,mBAAmB,kCAAkC;AACnI,UAAM,UAAU,QAAQ,QAAQ,IAAI,CAAC,WAAW;AAC9C,UAAI,CAAC,UAAU,OAAO,WAAW,SAAU,OAAM,IAAI,+BAA+B,mBAAmB,gCAAgC;AACvI,YAAM,YAAY;AAClB,UAAI,OAAO,UAAU,kBAAkB,YAAY,OAAO,UAAU,cAAc,YAAY,OAAO,UAAU,UAAU,UAAU;AACjI,cAAM,IAAI,+BAA+B,mBAAmB,2EAA2E;AAAA,MACzI;AACA,aAAO;AAAA,QACL,eAAe,UAAU;AAAA,QACzB,WAAW,UAAU;AAAA,QACrB,OAAO,UAAU;AAAA,QACjB,GAAI,UAAU,aAAa,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,MAC1D;AAAA,IACF,CAAC;AACD,WAAO,EAAE,MAAM,kBAAkB,QAAQ;AAAA,EAC3C;AACA,MAAI,SAAS,YAAY;AACvB,QAAI,OAAO,QAAQ,gBAAgB,YAAY,QAAQ,YAAY,KAAK,EAAE,WAAW,GAAG;AACtF,YAAM,IAAI,+BAA+B,mBAAmB,+BAA+B;AAAA,IAC7F;AACA,QAAI,QAAQ,qBAAqB,WAAc,CAAC,OAAO,UAAU,QAAQ,gBAAgB,KAAK,OAAO,QAAQ,gBAAgB,IAAI,IAAI;AACnI,YAAM,IAAI,+BAA+B,mBAAmB,uDAAuD;AAAA,IACrH;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa,QAAQ;AAAA,MACrB,GAAI,OAAO,QAAQ,qBAAqB,WAAW,EAAE,kBAAkB,QAAQ,iBAAiB,IAAI,CAAC;AAAA,IACvG;AAAA,EACF;AACA,QAAM,IAAI,+BAA+B,mBAAmB,6BAA6B,IAAI,EAAE;AACjG;AAEA,SAAS,eAAe,OAA+C;AACrE,QAAM,QAAwB,CAAC;AAC/B,MAAI,MAAM,kBAAkB;AAC1B,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,MAAM,gBAAgB;AAAA,IAC5C,SAAS,OAAO;AACd,YAAM,IAAI,+BAA+B,yBAAyB,iDAAiD,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,IAC7K;AACA,QAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,KAAK,CAAC,aAAa,OAAO,aAAa,QAAQ,GAAG;AACrF,YAAM,IAAI,+BAA+B,yBAAyB,4DAA4D;AAAA,IAChI;AACA,UAAM,mBAAmB;AAAA,EAC3B;AACA,MAAI,MAAM,iBAAkB,OAAM,mBAAmB,MAAM;AAC3D,SAAO;AACT;AAEA,SAAS,eAAe,OAAmD;AACzE,QAAM,MAAM,MAAM,SAAS,MAAM;AACjC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,UAAU,OAAO,GAAG;AAC1B,MAAI,CAAC,OAAO,SAAS,OAAO,KAAK,UAAU,GAAG;AAC5C,UAAM,IAAI,+BAA+B,yBAAyB,+CAA+C;AAAA,EACnH;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAwB;AAClD,QAAM,QAAQ,8CAA8C,KAAK,KAAK;AACtE,SAAO,QAAQ,SAAS,MAAM,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9E;AAEA,SAAS,wBAAwB,OAAwE;AACvG,QAAM,MAAgD,CAAC;AACvD,MAAI,MAAM,oBAAoB;AAC5B,QAAI,CAAC,OAAO,SAAS,KAAK,MAAM,MAAM,kBAAkB,CAAC,GAAG;AAC1D,YAAM,IAAI,+BAA+B,yBAAyB,4DAA4D;AAAA,IAChI;AACA,QAAI,kBAAkB,MAAM;AAAA,EAC9B;AACA,aAAW,CAAC,MAAM,KAAK,KAAK;AAAA,IAC1B,CAAC,qBAAqB,gBAAgB;AAAA,IACtC,CAAC,qBAAqB,gBAAgB;AAAA,EACxC,GAAY;AACV,UAAM,QAAQ,MAAM,IAAI;AACxB,QAAI,CAAC,MAAO;AACZ,QAAI,CAAC,mBAAmB,KAAK,GAAG;AAC9B,YAAM,IAAI,+BAA+B,yBAAyB,aAAa,IAAI,uDAAuD;AAAA,IAC5I;AACA,QAAI,KAAK,IAAI;AAAA,EACf;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,IAAI,MAAM;AAC7C;AAEA,SAAS,OAAO,MAAyE,QAAiD;AACxI,QAAM,QAAQ,eAAe,KAAK,KAAK;AACvC,QAAM,MAAM,wBAAwB,KAAK,KAAK;AAC9C,SAAO;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,SAAS,KAAK;AAAA,IACd,OAAO,KAAK;AAAA,IACZ,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,IAC5D;AAAA,IACA,UAAU,KAAK;AAAA,IACf,eAAe,EAAE,GAAG,KAAK,MAAM;AAAA,IAC/B,QAAQ,YAAY,KAAK,MAAM,QAAQ,QAAQ;AAAA,IAC/C,SAAS,aAAa,KAAK,MAAM,SAAS,KAAK,MAAM,WAAW;AAAA,IAChE,YAAY,gBAAgB,KAAK,MAAM,UAAU;AAAA,IACjD,OAAO,eAAe,KAAK,KAAK;AAAA,IAChC,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,MAAM,EAAE,IAAI,IAAI,CAAC;AAAA,EACvB;AACF;AAGA,eAAsB,8BAA8B,QAA2E;AAC7H,QAAM,iBAAiB,OAAO,iBAC1B,eAAe,KAAK,MAAM,iBAAiB,OAAO,cAA+C,CAAC,CAAsB,IACxH;AACJ,MAAI,OAAO,KAAK,OAAO,cAAc,EAAE,IAAI,oBAAoB,MAAM,GAAG;AACtE,UAAM,IAAI,+BAA+B,mBAAmB,+EAA+E;AAAA,EAC7I;AACA,QAAM,WAAW,iBAAiB,OAAO,IAAI;AAC7C,MAAI,CAAC,YAAY,SAAS,MAAM,WAAW,EAAG,OAAM,IAAI,+BAA+B,cAAc,8CAA8C;AAEnJ,QAAM,QAAQ,SAAS,MAAM,IAAI,CAAC,SAAS;AACzC,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,SAAS,aAAa,OAAO,gBAAgB,UAAU,IAAI;AACjE,QAAI,CAAC,OAAQ,OAAM,IAAI,+BAA+B,2BAA2B,iCAAiC,cAAc,KAAK,MAAM,EAAE;AAC7I,QAAI,OAAO,SAAS,cAAc,OAAO,QAAQ,KAAK,KAAK;AACzD,YAAM,IAAI,+BAA+B,2BAA2B,yCAAyC,UAAU,KAAK,KAAK,GAAG,GAAG;AAAA,IACzI;AACA,QAAI,OAAO,mBAAmB,OAAO,sBAAsB;AACzD,YAAM,IAAI,+BAA+B,2BAA2B,UAAU,OAAO,IAAI,4CAA4C;AAAA,IACvI;AACA,WAAO,OAAO,MAAM,MAAM;AAAA,EAC5B,CAAC;AAED,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,MACE,MAAM;AAAA,MACN,eAAe;AAAA,MACf,KAAK,EAAE,QAAQ,OAAO,QAAQ,UAAU,OAAO,SAAS;AAAA,MACxD,GAAI,iBAAiB,EAAE,QAAQ,eAAe,IAAI,CAAC;AAAA,MACnD,aAAa,OAAO;AAAA,MACpB,aAAa,OAAO;AAAA,MACpB,sBAAsB,OAAO;AAAA,MAC7B,OAAO,SAAS,KAAK;AAAA,MACrB,GAAI,SAAS,KAAK,OAAO,EAAE,MAAM,SAAS,KAAK,KAAK,IAAI,CAAC;AAAA,MACzD;AAAA,MACA,yBAAyB,qBAAqB,OAAO,IAAI,EAAE,IAAI,sBAAsB;AAAA,MACrF,wBAAwB,oBAAoB,OAAO,IAAI,EAAE,IAAI,qBAAqB;AAAA,MAClF,GAAI,OAAO,SAAS,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,IACnD;AAAA,IACA,OAAO;AAAA,EACT;AACA,QAAM,MAAyB,EAAE,GAAG,OAAO,KAAK,QAAQ,OAAO,UAAU,OAAO,MAAM;AACtF,QAAM,UAAU,MAAM,OAAO,WAAW,QAAQ,QAAQ,cAAc;AACtE,MAAI,YAAY,kBAAmB,OAAM,IAAI,+BAA+B,mBAAmB,iDAAiD;AAChJ,SAAO,EAAE,SAAS,KAAK,UAAU,OAAO;AAC1C;;;AC1PA,SAAS,kBAAqB,OAAa;AACzC,SAAO,eAAe,KAAK,MAAM,iBAAiB,KAAsC,CAAC,CAAC;AAC5F;AAEA,eAAsB,wBAAwB,SAAmE;AAC/G,QAAM,WAAW,kBAAkB,OAAO;AAC1C,MAAI,CAAC,SAAS,cAAc,CAAC,SAAS,cAAc,SAAS,WAAW,WAAW,EAAG,OAAM,IAAI,MAAM,qEAAqE;AAC3K,SAAO,eAAe,EAAE,GAAG,UAAU,gBAAiB,MAAM,oBAAoB,QAAyC,EAAmB,CAAC;AAC/I;AAMA,eAAsB,+BACpB,YACA,UACA,UACmC;AACnC,QAAM,mBAAmB,kBAAkB,QAAQ;AACnD,QAAM,mBAAmB,kBAAkB,QAAQ;AACnD,QAAM,EAAE,gBAAgB,GAAG,gBAAgB,IAAI;AAC/C,QAAM,uBAAwB,MAAM,oBAAoB,eAAgD;AACxG,MACE,iBAAiB,SAAS,qCAC1B,iBAAiB,kBAAkB,SACnC,iBAAiB,eAAe,iBAAiB,cACjD,iBAAiB,mBAAmB,kBACpC,yBAAyB,kBACzB,CAAC,iBAAiB,cAClB,CAAC,iBAAiB,mBAClB;AACA,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,QAAM,mBAAmB,WAAW,KAAK,EAAE;AAC3C,MAAI,qBAAqB,iBAAiB,cAAc;AACtD,UAAM,IAAI,MAAM,iDAAiD,iBAAiB,YAAY,mCAAmC,gBAAgB,EAAE;AAAA,EACrJ;AACA,QAAM,WAAW,iBAAiB,WAAW;AAAA,IAC3C,CAAC,WAAW,WACT;AAAA,MACC,MAAM;AAAA,MACN,eAAe;AAAA,MACf,WAAW,GAAG,iBAAiB,UAAU,IAAI,KAAK;AAAA,MAClD,kBAAkB,iBAAiB,eAAe;AAAA,MAClD,UAAU,iBAAiB;AAAA,MAC3B;AAAA,IACF;AAAA,EACJ;AACA,SAAO,WAAW,WAAW,QAAQ;AACvC;","names":["Y"]}
@@ -0,0 +1,348 @@
1
+ // src/core/lib/actionRegistry/manifestV2.schema.ts
2
+ var ACTION_MANIFEST_V2_SCHEMA = {
3
+ $schema: "https://json-schema.org/draft/2020-12/schema",
4
+ $id: "https://ixo.world/schemas/qi/action-manifest-v2.schema.json",
5
+ type: "object",
6
+ additionalProperties: false,
7
+ required: ["manifestVersion", "manifestId", "generatedAt", "package", "issuer", "compatibility", "actions", "primitives", "integrity"],
8
+ properties: {
9
+ manifestVersion: { const: "2.0" },
10
+ manifestId: { type: "string", minLength: 1 },
11
+ generatedAt: {
12
+ type: "string",
13
+ pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$"
14
+ },
15
+ package: {
16
+ type: "object",
17
+ additionalProperties: false,
18
+ required: ["name", "version", "sourceCommit"],
19
+ properties: {
20
+ name: { type: "string", minLength: 1 },
21
+ version: { type: "string", minLength: 1 },
22
+ sourceCommit: { type: "string", minLength: 1 },
23
+ buildId: { type: "string", minLength: 1 },
24
+ distributionUrl: { type: "string", pattern: "^[a-zA-Z][a-zA-Z0-9+.-]*:" }
25
+ }
26
+ },
27
+ issuer: {
28
+ type: "object",
29
+ additionalProperties: false,
30
+ required: ["did", "verificationMethod"],
31
+ properties: {
32
+ did: { type: "string", pattern: "^did:[a-z0-9]+:.+" },
33
+ verificationMethod: { type: "string", pattern: "^did:[a-z0-9]+:.+#.+" }
34
+ }
35
+ },
36
+ compatibility: {
37
+ type: "object",
38
+ additionalProperties: false,
39
+ required: ["engine", "flowSchemaVersions", "features"],
40
+ properties: {
41
+ engine: {
42
+ type: "object",
43
+ additionalProperties: false,
44
+ required: ["versionRange"],
45
+ properties: {
46
+ versionRange: { type: "string", minLength: 1 }
47
+ }
48
+ },
49
+ flowSchemaVersions: {
50
+ type: "array",
51
+ minItems: 1,
52
+ uniqueItems: true,
53
+ items: { type: "string", minLength: 1 }
54
+ },
55
+ features: {
56
+ type: "array",
57
+ minItems: 1,
58
+ uniqueItems: true,
59
+ items: { type: "string", minLength: 1 }
60
+ }
61
+ }
62
+ },
63
+ actions: {
64
+ type: "array",
65
+ items: { $ref: "#/$defs/contract" }
66
+ },
67
+ primitives: {
68
+ type: "array",
69
+ items: { $ref: "#/$defs/contract" }
70
+ },
71
+ integrity: {
72
+ type: "object",
73
+ additionalProperties: false,
74
+ required: ["canonicalization", "digest", "signature"],
75
+ properties: {
76
+ canonicalization: { const: "RFC8785" },
77
+ digest: {
78
+ type: "object",
79
+ additionalProperties: false,
80
+ required: ["algorithm", "value"],
81
+ properties: {
82
+ algorithm: { const: "SHA-256" },
83
+ value: { type: "string", pattern: "^sha256:[0-9a-f]{64}$" }
84
+ }
85
+ },
86
+ signature: {
87
+ type: "object",
88
+ additionalProperties: false,
89
+ required: ["algorithm", "verificationMethod", "value"],
90
+ properties: {
91
+ algorithm: { type: "string", minLength: 1 },
92
+ verificationMethod: { type: "string", pattern: "^did:[a-z0-9]+:.+#.+" },
93
+ value: { type: "string", minLength: 1 }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ },
99
+ $defs: {
100
+ contract: {
101
+ type: "object",
102
+ required: ["type", "contractVersion"],
103
+ properties: {
104
+ type: { type: "string", minLength: 1 },
105
+ contractVersion: { type: "string", minLength: 1 },
106
+ aliases: {
107
+ type: "array",
108
+ uniqueItems: true,
109
+ items: { type: "string", minLength: 1 }
110
+ }
111
+ }
112
+ }
113
+ }
114
+ };
115
+
116
+ // src/core/lib/actionRegistry/manifestV2.ts
117
+ import Ajv2020 from "ajv/dist/2020.js";
118
+ var ActionManifestV2VerificationError = class extends Error {
119
+ constructor(code, message) {
120
+ super(message);
121
+ this.name = "ActionManifestV2VerificationError";
122
+ this.code = code;
123
+ }
124
+ };
125
+ var validateSignedManifest = new Ajv2020({ allErrors: true, strict: false }).compile(ACTION_MANIFEST_V2_SCHEMA);
126
+ var SIGNATURE_DOMAIN = "qi.action-manifest.v2\0";
127
+ function isPlainObject(value) {
128
+ const prototype = Object.getPrototypeOf(value);
129
+ return prototype === Object.prototype || prototype === null;
130
+ }
131
+ function assertValidUnicode(value) {
132
+ for (let index = 0; index < value.length; index += 1) {
133
+ const codeUnit = value.charCodeAt(index);
134
+ if (codeUnit >= 55296 && codeUnit <= 56319) {
135
+ const next = value.charCodeAt(index + 1);
136
+ if (!(next >= 56320 && next <= 57343)) {
137
+ throw new TypeError("Manifest v2 contains an unpaired Unicode surrogate");
138
+ }
139
+ index += 1;
140
+ } else if (codeUnit >= 56320 && codeUnit <= 57343) {
141
+ throw new TypeError("Manifest v2 contains an unpaired Unicode surrogate");
142
+ }
143
+ }
144
+ }
145
+ function canonicalizeManifestV2Payload(payload) {
146
+ const ancestors = /* @__PURE__ */ new Set();
147
+ const serialize = (value) => {
148
+ if (value === null || typeof value === "boolean") {
149
+ return JSON.stringify(value);
150
+ }
151
+ if (typeof value === "string") {
152
+ assertValidUnicode(value);
153
+ return JSON.stringify(value);
154
+ }
155
+ if (typeof value === "number") {
156
+ if (!Number.isFinite(value)) {
157
+ throw new TypeError("Manifest v2 contains a non-finite number");
158
+ }
159
+ return JSON.stringify(value);
160
+ }
161
+ if (typeof value !== "object") {
162
+ throw new TypeError(`Manifest v2 contains a non-JSON value: ${typeof value}`);
163
+ }
164
+ if (ancestors.has(value)) {
165
+ throw new TypeError("Manifest v2 contains a circular reference");
166
+ }
167
+ ancestors.add(value);
168
+ try {
169
+ if (Array.isArray(value)) {
170
+ return `[${value.map((entry) => serialize(entry)).join(",")}]`;
171
+ }
172
+ if (!isPlainObject(value)) {
173
+ throw new TypeError("Manifest v2 contains a non-plain object");
174
+ }
175
+ return `{${Object.keys(value).sort().map((key) => {
176
+ assertValidUnicode(key);
177
+ return `${JSON.stringify(key)}:${serialize(value[key])}`;
178
+ }).join(",")}}`;
179
+ } finally {
180
+ ancestors.delete(value);
181
+ }
182
+ };
183
+ return serialize(payload);
184
+ }
185
+ async function computeActionManifestV2Digest(payload) {
186
+ if (!globalThis.crypto?.subtle) {
187
+ throw new Error("Web Crypto is required to digest an Action Manifest v2 contract");
188
+ }
189
+ const canonicalPayload = canonicalizeManifestV2Payload(payload);
190
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(canonicalPayload));
191
+ const hex = Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
192
+ return `sha256:${hex}`;
193
+ }
194
+ function signatureInput(digest) {
195
+ return new TextEncoder().encode(`${SIGNATURE_DOMAIN}${digest}`);
196
+ }
197
+ function schemaFailure() {
198
+ const details = (validateSignedManifest.errors || []).map((error) => `${error.instancePath || "/"} ${error.message || "is invalid"}`).join("; ");
199
+ return new ActionManifestV2VerificationError("INVALID_MANIFEST", details ? `Action Manifest v2 is invalid: ${details}` : "Action Manifest v2 is invalid");
200
+ }
201
+ function payloadFromSignedManifest(manifest) {
202
+ const { integrity: _integrity, ...payload } = manifest;
203
+ return payload;
204
+ }
205
+ function assertContractIdentities(payload) {
206
+ const contracts = [...payload.actions, ...payload.primitives];
207
+ const canonicalTypes = /* @__PURE__ */ new Set();
208
+ for (const contract of contracts) {
209
+ if (canonicalTypes.has(contract.type)) {
210
+ throw new ActionManifestV2VerificationError("DUPLICATE_CONTRACT_TYPE", `Manifest contains duplicate canonical contract type: ${contract.type}`);
211
+ }
212
+ canonicalTypes.add(contract.type);
213
+ }
214
+ for (const [groupName, group] of [
215
+ ["actions", payload.actions],
216
+ ["primitives", payload.primitives]
217
+ ]) {
218
+ for (let index = 1; index < group.length; index += 1) {
219
+ if (group[index - 1].type > group[index].type) {
220
+ throw new ActionManifestV2VerificationError("UNSORTED_CONTRACTS", `Manifest ${groupName} must be sorted by canonical type`);
221
+ }
222
+ }
223
+ }
224
+ const claimedNames = new Map(Array.from(canonicalTypes, (type) => [type, type]));
225
+ for (const contract of contracts) {
226
+ const aliases = contract.aliases;
227
+ if (!Array.isArray(aliases)) continue;
228
+ for (const alias of aliases) {
229
+ const existingOwner = claimedNames.get(alias);
230
+ if (existingOwner) {
231
+ throw new ActionManifestV2VerificationError("AMBIGUOUS_ALIAS", `Manifest alias ${alias} conflicts with contract ${existingOwner}`);
232
+ }
233
+ claimedNames.set(alias, contract.type);
234
+ }
235
+ }
236
+ }
237
+ function deepFreeze(value) {
238
+ for (const child of Object.values(value)) {
239
+ if (typeof child === "object" && child !== null && !Object.isFrozen(child)) {
240
+ deepFreeze(child);
241
+ }
242
+ }
243
+ return Object.freeze(value);
244
+ }
245
+ async function signActionManifestV2(payload, signer) {
246
+ if (signer.issuerDid !== payload.issuer.did || signer.verificationMethod !== payload.issuer.verificationMethod) {
247
+ throw new ActionManifestV2VerificationError("SIGNER_MISMATCH", "The Manifest v2 signer does not match the declared issuer verification method");
248
+ }
249
+ assertContractIdentities(payload);
250
+ let digest;
251
+ try {
252
+ digest = await computeActionManifestV2Digest(payload);
253
+ } catch (error) {
254
+ throw new ActionManifestV2VerificationError(
255
+ "INVALID_MANIFEST",
256
+ error instanceof Error ? `Action Manifest v2 cannot be canonicalized: ${error.message}` : "Action Manifest v2 cannot be canonicalized"
257
+ );
258
+ }
259
+ const signature = await signer.sign(signatureInput(digest));
260
+ if (!signature) {
261
+ throw new ActionManifestV2VerificationError("INVALID_SIGNATURE", "The Manifest v2 signer returned an empty signature");
262
+ }
263
+ const signed = {
264
+ ...payload,
265
+ integrity: {
266
+ canonicalization: "RFC8785",
267
+ digest: {
268
+ algorithm: "SHA-256",
269
+ value: digest
270
+ },
271
+ signature: {
272
+ algorithm: signer.algorithm,
273
+ verificationMethod: signer.verificationMethod,
274
+ value: signature
275
+ }
276
+ }
277
+ };
278
+ if (!validateSignedManifest(signed)) {
279
+ throw schemaFailure();
280
+ }
281
+ assertContractIdentities(payload);
282
+ return signed;
283
+ }
284
+ async function verifyActionManifestV2(candidate, trustPolicy) {
285
+ if (typeof candidate !== "object" || candidate === null || !("manifestVersion" in candidate) || candidate.manifestVersion !== "2.0") {
286
+ throw new ActionManifestV2VerificationError("UNSUPPORTED_MANIFEST_VERSION", "Only Action Manifest version 2.0 can cross this execution boundary");
287
+ }
288
+ if (!("integrity" in candidate) || typeof candidate.integrity !== "object") {
289
+ throw new ActionManifestV2VerificationError("UNSIGNED_MANIFEST", "A signature and digest are required to load Action Manifest v2 for execution");
290
+ }
291
+ if (!validateSignedManifest(candidate)) {
292
+ throw schemaFailure();
293
+ }
294
+ const manifest = candidate;
295
+ const { issuer, integrity } = manifest;
296
+ assertContractIdentities(manifest);
297
+ if (!trustPolicy.trustedIssuerDids.includes(issuer.did)) {
298
+ throw new ActionManifestV2VerificationError("UNTRUSTED_ISSUER", `Manifest issuer is not trusted: ${issuer.did}`);
299
+ }
300
+ if (trustPolicy.revokedIssuerDids?.includes(issuer.did)) {
301
+ throw new ActionManifestV2VerificationError("REVOKED_ISSUER", `Manifest issuer is revoked: ${issuer.did}`);
302
+ }
303
+ if (integrity.signature.verificationMethod !== issuer.verificationMethod || !integrity.signature.verificationMethod.startsWith(`${issuer.did}#`)) {
304
+ throw new ActionManifestV2VerificationError("VERIFICATION_METHOD_MISMATCH", "The signature verification method does not belong to the declared manifest issuer");
305
+ }
306
+ if (!trustPolicy.allowedSignatureAlgorithms.includes(integrity.signature.algorithm)) {
307
+ throw new ActionManifestV2VerificationError("DISALLOWED_SIGNATURE_ALGORITHM", `Manifest signature algorithm is not allowed: ${integrity.signature.algorithm}`);
308
+ }
309
+ let digest;
310
+ try {
311
+ digest = await computeActionManifestV2Digest(payloadFromSignedManifest(manifest));
312
+ } catch (error) {
313
+ throw new ActionManifestV2VerificationError(
314
+ "INVALID_MANIFEST",
315
+ error instanceof Error ? `Action Manifest v2 cannot be canonicalized: ${error.message}` : "Action Manifest v2 cannot be canonicalized"
316
+ );
317
+ }
318
+ if (digest !== integrity.digest.value) {
319
+ throw new ActionManifestV2VerificationError("DIGEST_MISMATCH", "Manifest payload does not match its signed digest");
320
+ }
321
+ let validSignature = false;
322
+ try {
323
+ validSignature = await trustPolicy.verifySignature({
324
+ issuerDid: issuer.did,
325
+ verificationMethod: integrity.signature.verificationMethod,
326
+ algorithm: integrity.signature.algorithm,
327
+ data: signatureInput(digest),
328
+ signature: integrity.signature.value
329
+ });
330
+ } catch {
331
+ validSignature = false;
332
+ }
333
+ if (!validSignature) {
334
+ throw new ActionManifestV2VerificationError("INVALID_SIGNATURE", "Manifest signature verification failed");
335
+ }
336
+ const trustedSnapshot = JSON.parse(JSON.stringify(manifest));
337
+ return deepFreeze(trustedSnapshot);
338
+ }
339
+
340
+ export {
341
+ ACTION_MANIFEST_V2_SCHEMA,
342
+ ActionManifestV2VerificationError,
343
+ canonicalizeManifestV2Payload,
344
+ computeActionManifestV2Digest,
345
+ signActionManifestV2,
346
+ verifyActionManifestV2
347
+ };
348
+ //# sourceMappingURL=chunk-N3ORMGAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/lib/actionRegistry/manifestV2.schema.ts","../src/core/lib/actionRegistry/manifestV2.ts"],"sourcesContent":["/** JSON Schema 2020-12 for the signed Manifest v2 envelope. */\nexport const ACTION_MANIFEST_V2_SCHEMA = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://ixo.world/schemas/qi/action-manifest-v2.schema.json',\n type: 'object',\n additionalProperties: false,\n required: ['manifestVersion', 'manifestId', 'generatedAt', 'package', 'issuer', 'compatibility', 'actions', 'primitives', 'integrity'],\n properties: {\n manifestVersion: { const: '2.0' },\n manifestId: { type: 'string', minLength: 1 },\n generatedAt: {\n type: 'string',\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d+)?(?:Z|[+-]\\\\d{2}:\\\\d{2})$',\n },\n package: {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'version', 'sourceCommit'],\n properties: {\n name: { type: 'string', minLength: 1 },\n version: { type: 'string', minLength: 1 },\n sourceCommit: { type: 'string', minLength: 1 },\n buildId: { type: 'string', minLength: 1 },\n distributionUrl: { type: 'string', pattern: '^[a-zA-Z][a-zA-Z0-9+.-]*:' },\n },\n },\n issuer: {\n type: 'object',\n additionalProperties: false,\n required: ['did', 'verificationMethod'],\n properties: {\n did: { type: 'string', pattern: '^did:[a-z0-9]+:.+' },\n verificationMethod: { type: 'string', pattern: '^did:[a-z0-9]+:.+#.+' },\n },\n },\n compatibility: {\n type: 'object',\n additionalProperties: false,\n required: ['engine', 'flowSchemaVersions', 'features'],\n properties: {\n engine: {\n type: 'object',\n additionalProperties: false,\n required: ['versionRange'],\n properties: {\n versionRange: { type: 'string', minLength: 1 },\n },\n },\n flowSchemaVersions: {\n type: 'array',\n minItems: 1,\n uniqueItems: true,\n items: { type: 'string', minLength: 1 },\n },\n features: {\n type: 'array',\n minItems: 1,\n uniqueItems: true,\n items: { type: 'string', minLength: 1 },\n },\n },\n },\n actions: {\n type: 'array',\n items: { $ref: '#/$defs/contract' },\n },\n primitives: {\n type: 'array',\n items: { $ref: '#/$defs/contract' },\n },\n integrity: {\n type: 'object',\n additionalProperties: false,\n required: ['canonicalization', 'digest', 'signature'],\n properties: {\n canonicalization: { const: 'RFC8785' },\n digest: {\n type: 'object',\n additionalProperties: false,\n required: ['algorithm', 'value'],\n properties: {\n algorithm: { const: 'SHA-256' },\n value: { type: 'string', pattern: '^sha256:[0-9a-f]{64}$' },\n },\n },\n signature: {\n type: 'object',\n additionalProperties: false,\n required: ['algorithm', 'verificationMethod', 'value'],\n properties: {\n algorithm: { type: 'string', minLength: 1 },\n verificationMethod: { type: 'string', pattern: '^did:[a-z0-9]+:.+#.+' },\n value: { type: 'string', minLength: 1 },\n },\n },\n },\n },\n },\n $defs: {\n contract: {\n type: 'object',\n required: ['type', 'contractVersion'],\n properties: {\n type: { type: 'string', minLength: 1 },\n contractVersion: { type: 'string', minLength: 1 },\n aliases: {\n type: 'array',\n uniqueItems: true,\n items: { type: 'string', minLength: 1 },\n },\n },\n },\n },\n} as const;\n","import Ajv2020 from 'ajv/dist/2020.js';\n\nimport { ACTION_MANIFEST_V2_SCHEMA } from './manifestV2.schema';\n\n/** JSON values accepted by the Manifest v2 portable contract. */\nexport type ManifestV2JsonValue = null | boolean | number | string | ManifestV2JsonValue[] | { [key: string]: ManifestV2JsonValue };\n\nexport interface ActionManifestV2Package {\n name: string;\n version: string;\n sourceCommit: string;\n buildId?: string;\n distributionUrl?: string;\n}\n\nexport interface ActionManifestV2Issuer {\n did: string;\n verificationMethod: string;\n}\n\nexport interface ActionManifestV2Compatibility {\n engine: {\n versionRange: string;\n };\n flowSchemaVersions: string[];\n features: string[];\n}\n\n/**\n * The complete action and primitive groups are introduced by the registry\n * migration. Keeping their extension fields JSON-only prevents executable\n * functions or class instances from crossing this portable boundary.\n */\nexport type ActionManifestV2Action = {\n type: string;\n contractVersion: string;\n aliases?: string[];\n} & Record<string, ManifestV2JsonValue>;\n\nexport type ActionManifestV2Primitive = {\n type: string;\n contractVersion: string;\n aliases?: string[];\n} & Record<string, ManifestV2JsonValue>;\n\n/** The unsigned, portable portion of an Action Manifest v2 envelope. */\nexport interface ActionManifestV2Payload {\n manifestVersion: '2.0';\n manifestId: string;\n generatedAt: string;\n package: ActionManifestV2Package;\n issuer: ActionManifestV2Issuer;\n compatibility: ActionManifestV2Compatibility;\n actions: ActionManifestV2Action[];\n primitives: ActionManifestV2Primitive[];\n}\n\nexport interface ActionManifestV2Integrity {\n canonicalization: 'RFC8785';\n digest: {\n algorithm: 'SHA-256';\n value: `sha256:${string}`;\n };\n signature: {\n algorithm: string;\n verificationMethod: string;\n value: string;\n };\n}\n\nexport type SignedActionManifestV2 = ActionManifestV2Payload & {\n integrity: ActionManifestV2Integrity;\n};\n\ndeclare const verifiedActionManifestV2: unique symbol;\n\ntype DeepReadonly<T> = T extends readonly (infer Item)[] ? readonly DeepReadonly<Item>[] : T extends object ? { readonly [Key in keyof T]: DeepReadonly<T[Key]> } : T;\n\n/** A manifest that crossed the trust-policy boundary successfully. */\nexport type VerifiedActionManifestV2 = DeepReadonly<SignedActionManifestV2> & {\n readonly [verifiedActionManifestV2]: true;\n};\n\nexport interface ActionManifestV2Signer {\n issuerDid: string;\n verificationMethod: string;\n algorithm: string;\n sign(data: Uint8Array): Promise<string>;\n}\n\nexport interface ActionManifestV2SignatureVerificationInput {\n issuerDid: string;\n verificationMethod: string;\n algorithm: string;\n data: Uint8Array;\n signature: string;\n}\n\nexport interface ActionManifestV2TrustPolicy {\n trustedIssuerDids: readonly string[];\n revokedIssuerDids?: readonly string[];\n allowedSignatureAlgorithms: readonly string[];\n verifySignature(input: ActionManifestV2SignatureVerificationInput): Promise<boolean>;\n}\n\nexport type ActionManifestV2VerificationErrorCode =\n | 'INVALID_MANIFEST'\n | 'UNSUPPORTED_MANIFEST_VERSION'\n | 'UNSIGNED_MANIFEST'\n | 'SIGNER_MISMATCH'\n | 'DUPLICATE_CONTRACT_TYPE'\n | 'AMBIGUOUS_ALIAS'\n | 'UNSORTED_CONTRACTS'\n | 'UNTRUSTED_ISSUER'\n | 'REVOKED_ISSUER'\n | 'VERIFICATION_METHOD_MISMATCH'\n | 'DISALLOWED_SIGNATURE_ALGORITHM'\n | 'DIGEST_MISMATCH'\n | 'INVALID_SIGNATURE';\n\nexport class ActionManifestV2VerificationError extends Error {\n readonly code: ActionManifestV2VerificationErrorCode;\n\n constructor(code: ActionManifestV2VerificationErrorCode, message: string) {\n super(message);\n this.name = 'ActionManifestV2VerificationError';\n this.code = code;\n }\n}\n\nconst validateSignedManifest = new Ajv2020({ allErrors: true, strict: false }).compile(ACTION_MANIFEST_V2_SCHEMA);\nconst SIGNATURE_DOMAIN = 'qi.action-manifest.v2\\0';\n\nfunction isPlainObject(value: object): value is Record<string, unknown> {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction assertValidUnicode(value: string): void {\n for (let index = 0; index < value.length; index += 1) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError('Manifest v2 contains an unpaired Unicode surrogate');\n }\n index += 1;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n throw new TypeError('Manifest v2 contains an unpaired Unicode surrogate');\n }\n }\n}\n\n/**\n * Serialize a Manifest v2 payload using the RFC 8785 JSON Canonicalization\n * Scheme. Invalid JSON-domain values are rejected rather than being silently\n * omitted or coerced.\n */\nexport function canonicalizeManifestV2Payload(payload: ActionManifestV2Payload): string {\n const ancestors = new Set<object>();\n\n const serialize = (value: unknown): string => {\n if (value === null || typeof value === 'boolean') {\n return JSON.stringify(value);\n }\n\n if (typeof value === 'string') {\n assertValidUnicode(value);\n return JSON.stringify(value);\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new TypeError('Manifest v2 contains a non-finite number');\n }\n return JSON.stringify(value);\n }\n\n if (typeof value !== 'object') {\n throw new TypeError(`Manifest v2 contains a non-JSON value: ${typeof value}`);\n }\n\n if (ancestors.has(value)) {\n throw new TypeError('Manifest v2 contains a circular reference');\n }\n\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n return `[${value.map((entry) => serialize(entry)).join(',')}]`;\n }\n\n if (!isPlainObject(value)) {\n throw new TypeError('Manifest v2 contains a non-plain object');\n }\n\n return `{${Object.keys(value)\n .sort()\n .map((key) => {\n assertValidUnicode(key);\n return `${JSON.stringify(key)}:${serialize(value[key])}`;\n })\n .join(',')}}`;\n } finally {\n ancestors.delete(value);\n }\n };\n\n return serialize(payload);\n}\n\n/** Compute the content address for the unsigned Manifest v2 payload. */\nexport async function computeActionManifestV2Digest(payload: ActionManifestV2Payload): Promise<string> {\n if (!globalThis.crypto?.subtle) {\n throw new Error('Web Crypto is required to digest an Action Manifest v2 contract');\n }\n\n const canonicalPayload = canonicalizeManifestV2Payload(payload);\n const digest = await globalThis.crypto.subtle.digest('SHA-256', new TextEncoder().encode(canonicalPayload));\n const hex = Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, '0')).join('');\n return `sha256:${hex}`;\n}\n\nfunction signatureInput(digest: string): Uint8Array {\n return new TextEncoder().encode(`${SIGNATURE_DOMAIN}${digest}`);\n}\n\nfunction schemaFailure(): ActionManifestV2VerificationError {\n const details = (validateSignedManifest.errors || []).map((error) => `${error.instancePath || '/'} ${error.message || 'is invalid'}`).join('; ');\n return new ActionManifestV2VerificationError('INVALID_MANIFEST', details ? `Action Manifest v2 is invalid: ${details}` : 'Action Manifest v2 is invalid');\n}\n\nfunction payloadFromSignedManifest(manifest: SignedActionManifestV2): ActionManifestV2Payload {\n const { integrity: _integrity, ...payload } = manifest;\n return payload;\n}\n\nfunction assertContractIdentities(payload: ActionManifestV2Payload): void {\n const contracts = [...payload.actions, ...payload.primitives];\n const canonicalTypes = new Set<string>();\n\n for (const contract of contracts) {\n if (canonicalTypes.has(contract.type)) {\n throw new ActionManifestV2VerificationError('DUPLICATE_CONTRACT_TYPE', `Manifest contains duplicate canonical contract type: ${contract.type}`);\n }\n canonicalTypes.add(contract.type);\n }\n\n for (const [groupName, group] of [\n ['actions', payload.actions],\n ['primitives', payload.primitives],\n ] as const) {\n for (let index = 1; index < group.length; index += 1) {\n if (group[index - 1].type > group[index].type) {\n throw new ActionManifestV2VerificationError('UNSORTED_CONTRACTS', `Manifest ${groupName} must be sorted by canonical type`);\n }\n }\n }\n\n const claimedNames = new Map(Array.from(canonicalTypes, (type) => [type, type]));\n for (const contract of contracts) {\n const aliases = contract.aliases;\n if (!Array.isArray(aliases)) continue;\n\n for (const alias of aliases) {\n const existingOwner = claimedNames.get(alias);\n if (existingOwner) {\n throw new ActionManifestV2VerificationError('AMBIGUOUS_ALIAS', `Manifest alias ${alias} conflicts with contract ${existingOwner}`);\n }\n claimedNames.set(alias, contract.type);\n }\n }\n}\n\nfunction deepFreeze<T extends object>(value: T): DeepReadonly<T> {\n for (const child of Object.values(value)) {\n if (typeof child === 'object' && child !== null && !Object.isFrozen(child)) {\n deepFreeze(child);\n }\n }\n return Object.freeze(value) as DeepReadonly<T>;\n}\n\n/**\n * Sign a portable Manifest v2 payload. The host owns key resolution and the\n * concrete signature algorithm; this module owns canonical bytes and issuer\n * binding.\n */\nexport async function signActionManifestV2(payload: ActionManifestV2Payload, signer: ActionManifestV2Signer): Promise<SignedActionManifestV2> {\n if (signer.issuerDid !== payload.issuer.did || signer.verificationMethod !== payload.issuer.verificationMethod) {\n throw new ActionManifestV2VerificationError('SIGNER_MISMATCH', 'The Manifest v2 signer does not match the declared issuer verification method');\n }\n\n assertContractIdentities(payload);\n let digest: string;\n try {\n digest = await computeActionManifestV2Digest(payload);\n } catch (error) {\n throw new ActionManifestV2VerificationError(\n 'INVALID_MANIFEST',\n error instanceof Error ? `Action Manifest v2 cannot be canonicalized: ${error.message}` : 'Action Manifest v2 cannot be canonicalized'\n );\n }\n const signature = await signer.sign(signatureInput(digest));\n if (!signature) {\n throw new ActionManifestV2VerificationError('INVALID_SIGNATURE', 'The Manifest v2 signer returned an empty signature');\n }\n\n const signed: SignedActionManifestV2 = {\n ...payload,\n integrity: {\n canonicalization: 'RFC8785',\n digest: {\n algorithm: 'SHA-256',\n value: digest as `sha256:${string}`,\n },\n signature: {\n algorithm: signer.algorithm,\n verificationMethod: signer.verificationMethod,\n value: signature,\n },\n },\n };\n\n if (!validateSignedManifest(signed)) {\n throw schemaFailure();\n }\n assertContractIdentities(payload);\n\n return signed;\n}\n\n/**\n * Load a signed manifest across the execution trust boundary. Every failure\n * throws; this API never returns a partially trusted or downgraded contract.\n */\nexport async function verifyActionManifestV2(candidate: unknown, trustPolicy: ActionManifestV2TrustPolicy): Promise<VerifiedActionManifestV2> {\n if (typeof candidate !== 'object' || candidate === null || !('manifestVersion' in candidate) || (candidate as { manifestVersion?: unknown }).manifestVersion !== '2.0') {\n throw new ActionManifestV2VerificationError('UNSUPPORTED_MANIFEST_VERSION', 'Only Action Manifest version 2.0 can cross this execution boundary');\n }\n\n if (!('integrity' in candidate) || typeof (candidate as { integrity?: unknown }).integrity !== 'object') {\n throw new ActionManifestV2VerificationError('UNSIGNED_MANIFEST', 'A signature and digest are required to load Action Manifest v2 for execution');\n }\n\n if (!validateSignedManifest(candidate)) {\n throw schemaFailure();\n }\n\n const manifest = candidate as SignedActionManifestV2;\n const { issuer, integrity } = manifest;\n assertContractIdentities(manifest);\n\n if (!trustPolicy.trustedIssuerDids.includes(issuer.did)) {\n throw new ActionManifestV2VerificationError('UNTRUSTED_ISSUER', `Manifest issuer is not trusted: ${issuer.did}`);\n }\n if (trustPolicy.revokedIssuerDids?.includes(issuer.did)) {\n throw new ActionManifestV2VerificationError('REVOKED_ISSUER', `Manifest issuer is revoked: ${issuer.did}`);\n }\n if (integrity.signature.verificationMethod !== issuer.verificationMethod || !integrity.signature.verificationMethod.startsWith(`${issuer.did}#`)) {\n throw new ActionManifestV2VerificationError('VERIFICATION_METHOD_MISMATCH', 'The signature verification method does not belong to the declared manifest issuer');\n }\n if (!trustPolicy.allowedSignatureAlgorithms.includes(integrity.signature.algorithm)) {\n throw new ActionManifestV2VerificationError('DISALLOWED_SIGNATURE_ALGORITHM', `Manifest signature algorithm is not allowed: ${integrity.signature.algorithm}`);\n }\n\n let digest: string;\n try {\n digest = await computeActionManifestV2Digest(payloadFromSignedManifest(manifest));\n } catch (error) {\n throw new ActionManifestV2VerificationError(\n 'INVALID_MANIFEST',\n error instanceof Error ? `Action Manifest v2 cannot be canonicalized: ${error.message}` : 'Action Manifest v2 cannot be canonicalized'\n );\n }\n if (digest !== integrity.digest.value) {\n throw new ActionManifestV2VerificationError('DIGEST_MISMATCH', 'Manifest payload does not match its signed digest');\n }\n\n let validSignature = false;\n try {\n validSignature = await trustPolicy.verifySignature({\n issuerDid: issuer.did,\n verificationMethod: integrity.signature.verificationMethod,\n algorithm: integrity.signature.algorithm,\n data: signatureInput(digest),\n signature: integrity.signature.value,\n });\n } catch {\n validSignature = false;\n }\n if (!validSignature) {\n throw new ActionManifestV2VerificationError('INVALID_SIGNATURE', 'Manifest signature verification failed');\n }\n\n const trustedSnapshot = JSON.parse(JSON.stringify(manifest)) as SignedActionManifestV2;\n return deepFreeze(trustedSnapshot) as VerifiedActionManifestV2;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,28 @@
1
+ // src/core/lib/yjsTypes.ts
2
+ function getExistingYMap(yDoc, key) {
3
+ if (!yDoc.share.has(key)) return void 0;
4
+ return yDoc.getMap(key);
5
+ }
6
+ function isYMapLike(value) {
7
+ if (!value || typeof value !== "object") return false;
8
+ const candidate = value;
9
+ return typeof candidate.get === "function" && typeof candidate.set === "function" && typeof candidate.has === "function" && typeof candidate.forEach === "function";
10
+ }
11
+ function isYXmlElementLike(value) {
12
+ if (!value || typeof value !== "object") return false;
13
+ const candidate = value;
14
+ return typeof candidate.nodeName === "string" && typeof candidate.getAttribute === "function" && typeof candidate.getAttributes === "function";
15
+ }
16
+ function isYDocLike(value) {
17
+ if (!value || typeof value !== "object") return false;
18
+ const candidate = value;
19
+ return typeof candidate.getMap === "function" && typeof candidate.getXmlFragment === "function" && typeof candidate.transact === "function";
20
+ }
21
+
22
+ export {
23
+ getExistingYMap,
24
+ isYMapLike,
25
+ isYXmlElementLike,
26
+ isYDocLike
27
+ };
28
+ //# sourceMappingURL=chunk-NCSGIRRQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/lib/yjsTypes.ts"],"sourcesContent":["import type * as Y from 'yjs';\n\n/**\n * Resolve an existing top-level Y.Map without creating an absent shared type.\n *\n * A remote update may leave `Doc.share` holding an unspecialized\n * `AbstractType` until `getMap` is called locally. Checking `share.has` first\n * distinguishes that harmless local specialization from creating a brand-new\n * shared map on an otherwise empty document.\n */\nexport function getExistingYMap<T = unknown>(yDoc: Y.Doc, key: string): Y.Map<T> | undefined {\n if (!yDoc.share.has(key)) return undefined;\n return yDoc.getMap<T>(key);\n}\n\n/**\n * Structural Y.Map guard.\n *\n * Yjs is a peer dependency and local multi-repo development can legitimately\n * load two compatible package instances. `instanceof Y.Map` then rejects a\n * real map created by the consumer's instance. Shared-state boundaries use\n * this guard so behavior follows the CRDT shape rather than constructor\n * identity.\n */\nexport function isYMapLike<T = unknown>(value: unknown): value is Y.Map<T> {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as {\n get?: unknown;\n set?: unknown;\n has?: unknown;\n forEach?: unknown;\n };\n return typeof candidate.get === 'function' && typeof candidate.set === 'function' && typeof candidate.has === 'function' && typeof candidate.forEach === 'function';\n}\n\n/**\n * Structural Y.XmlElement guard.\n *\n * `nodeName` is what separates an element from Y.XmlText/Y.XmlHook inside the\n * same fragment, so checking it (plus the attribute API) matches exactly the\n * nodes `instanceof Y.XmlElement` accepted — without tying the answer to which\n * yjs instance constructed the document. A deployed host that loads yjs as CJS\n * while this package's dist loads it as ESM gets two instances of the same\n * version; constructor checks then reject every real element and a populated\n * document reads as empty.\n */\nexport function isYXmlElementLike(value: unknown): value is Y.XmlElement {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as {\n nodeName?: unknown;\n getAttribute?: unknown;\n getAttributes?: unknown;\n };\n return typeof candidate.nodeName === 'string' && typeof candidate.getAttribute === 'function' && typeof candidate.getAttributes === 'function';\n}\n\n/** Structural Y.Array guard — same dual-instance rationale as isYMapLike. */\nexport function isYArrayLike<T = unknown>(value: unknown): value is Y.Array<T> {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as {\n toArray?: unknown;\n push?: unknown;\n length?: unknown;\n };\n return typeof candidate.toArray === 'function' && typeof candidate.push === 'function' && typeof candidate.length === 'number';\n}\n\n/** Structural Y.Doc guard — same dual-instance rationale as isYMapLike. */\nexport function isYDocLike(value: unknown): value is Y.Doc {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as {\n getMap?: unknown;\n getXmlFragment?: unknown;\n transact?: unknown;\n };\n return typeof candidate.getMap === 'function' && typeof candidate.getXmlFragment === 'function' && typeof candidate.transact === 'function';\n}\n"],"mappings":";AAUO,SAAS,gBAA6B,MAAa,KAAmC;AAC3F,MAAI,CAAC,KAAK,MAAM,IAAI,GAAG,EAAG,QAAO;AACjC,SAAO,KAAK,OAAU,GAAG;AAC3B;AAWO,SAAS,WAAwB,OAAmC;AACzE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,YAAY;AAMlB,SAAO,OAAO,UAAU,QAAQ,cAAc,OAAO,UAAU,QAAQ,cAAc,OAAO,UAAU,QAAQ,cAAc,OAAO,UAAU,YAAY;AAC3J;AAaO,SAAS,kBAAkB,OAAuC;AACvE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,YAAY;AAKlB,SAAO,OAAO,UAAU,aAAa,YAAY,OAAO,UAAU,iBAAiB,cAAc,OAAO,UAAU,kBAAkB;AACtI;AAcO,SAAS,WAAW,OAAgC;AACzD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,YAAY;AAKlB,SAAO,OAAO,UAAU,WAAW,cAAc,OAAO,UAAU,mBAAmB,cAAc,OAAO,UAAU,aAAa;AACnI;","names":[]}