@ixo/editor 6.33.0 → 6.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BidConfig-YLGSEIOS.js +154 -0
- package/dist/BidConfig-YLGSEIOS.js.map +1 -0
- package/dist/BidFlowDetail-TJCJBJZZ.js +365 -0
- package/dist/BidFlowDetail-TJCJBJZZ.js.map +1 -0
- package/dist/CalendarEventCreateConfig-J2LU6LJO.js +155 -0
- package/dist/CalendarEventCreateConfig-J2LU6LJO.js.map +1 -0
- package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js +174 -0
- package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js.map +1 -0
- package/dist/CalendarEventListConfig-GQNNF4ZB.js +116 -0
- package/dist/CalendarEventListConfig-GQNNF4ZB.js.map +1 -0
- package/dist/CalendarEventListFlowDetail-SSRTOXIX.js +58 -0
- package/dist/CalendarEventListFlowDetail-SSRTOXIX.js.map +1 -0
- package/dist/CalendarEventUpdateConfig-KACZA6GH.js +133 -0
- package/dist/CalendarEventUpdateConfig-KACZA6GH.js.map +1 -0
- package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js +155 -0
- package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js.map +1 -0
- package/dist/ClaimConfig-3HKPGK55.js +200 -0
- package/dist/ClaimConfig-3HKPGK55.js.map +1 -0
- package/dist/ClaimFlowDetail-UVEQMEI5.js +641 -0
- package/dist/ClaimFlowDetail-UVEQMEI5.js.map +1 -0
- package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js +149 -0
- package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js.map +1 -0
- package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js +647 -0
- package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js.map +1 -0
- package/dist/CollectionUsersConfig-RI2X3YY2.js +271 -0
- package/dist/CollectionUsersConfig-RI2X3YY2.js.map +1 -0
- package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js +1276 -0
- package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js.map +1 -0
- package/dist/CredentialStoreConfig-G66AQDGZ.js +75 -0
- package/dist/CredentialStoreConfig-G66AQDGZ.js.map +1 -0
- package/dist/CredentialStoreFlowDetail-FL7QAM3S.js +99 -0
- package/dist/CredentialStoreFlowDetail-FL7QAM3S.js.map +1 -0
- package/dist/DesignPodConfig-LJ7H2CZ6.js +8 -0
- package/dist/DesignPodConfig-LJ7H2CZ6.js.map +1 -0
- package/dist/DesignPodFlowDetail-JHJWGNVY.js +309 -0
- package/dist/DesignPodFlowDetail-JHJWGNVY.js.map +1 -0
- package/dist/DomainCardPreviewConfig-Q3X5M4WF.js +37 -0
- package/dist/DomainCardPreviewConfig-Q3X5M4WF.js.map +1 -0
- package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js +131 -0
- package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js.map +1 -0
- package/dist/DomainIndexerLookupConfig-N4VONQUY.js +41 -0
- package/dist/DomainIndexerLookupConfig-N4VONQUY.js.map +1 -0
- package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js +70 -0
- package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js.map +1 -0
- package/dist/DomainSignConfig-XFIXROVK.js +47 -0
- package/dist/DomainSignConfig-XFIXROVK.js.map +1 -0
- package/dist/DomainSignFlowDetail-BXZ6JBPR.js +206 -0
- package/dist/DomainSignFlowDetail-BXZ6JBPR.js.map +1 -0
- package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js +101 -0
- package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js.map +1 -0
- package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js +147 -0
- package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js.map +1 -0
- package/dist/EmailSendConfig-YEGZ5Q77.js +215 -0
- package/dist/EmailSendConfig-YEGZ5Q77.js.map +1 -0
- package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js +150 -0
- package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js.map +1 -0
- package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js +120 -0
- package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js.map +1 -0
- package/dist/EntitySingleSelectionConfig-DL57KNKM.js +30 -0
- package/dist/EntitySingleSelectionConfig-DL57KNKM.js.map +1 -0
- package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js +118 -0
- package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js.map +1 -0
- package/dist/EntityTransferConfig-JVZ3H35B.js +62 -0
- package/dist/EntityTransferConfig-JVZ3H35B.js.map +1 -0
- package/dist/EntityTransferFlowDetail-XEXM34XB.js +132 -0
- package/dist/EntityTransferFlowDetail-XEXM34XB.js.map +1 -0
- package/dist/EvalEngineConfig-CHC4IRN3.js +464 -0
- package/dist/EvalEngineConfig-CHC4IRN3.js.map +1 -0
- package/dist/EvalEngineFlowDetail-PUFRNO4U.js +4291 -0
- package/dist/EvalEngineFlowDetail-PUFRNO4U.js.map +1 -0
- package/dist/EvaluateBidConfig-OE4CM43G.js +151 -0
- package/dist/EvaluateBidConfig-OE4CM43G.js.map +1 -0
- package/dist/EvaluateBidFlowDetail-2S2N4YTW.js +564 -0
- package/dist/EvaluateBidFlowDetail-2S2N4YTW.js.map +1 -0
- package/dist/EvaluateClaimConfig-3D4F5LHU.js +297 -0
- package/dist/EvaluateClaimConfig-3D4F5LHU.js.map +1 -0
- package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js +2237 -0
- package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js.map +1 -0
- package/dist/FormSubmitConfig-UFZYMLUN.js +59 -0
- package/dist/FormSubmitConfig-UFZYMLUN.js.map +1 -0
- package/dist/FormSubmitFlowDetail-IAHDJS6P.js +169 -0
- package/dist/FormSubmitFlowDetail-IAHDJS6P.js.map +1 -0
- package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js +166 -0
- package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js.map +1 -0
- package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js +88 -0
- package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js.map +1 -0
- package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js +88 -0
- package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js.map +1 -0
- package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js +83 -0
- package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js.map +1 -0
- package/dist/GovernanceConfigConfig-V3WM4WBP.js +30 -0
- package/dist/GovernanceConfigConfig-V3WM4WBP.js.map +1 -0
- package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js +267 -0
- package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js.map +1 -0
- package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js +113 -0
- package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js.map +1 -0
- package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js +144 -0
- package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js.map +1 -0
- package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js +72 -0
- package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js.map +1 -0
- package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js +104 -0
- package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js.map +1 -0
- package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js +68 -0
- package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js.map +1 -0
- package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js +78 -0
- package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js.map +1 -0
- package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js +98 -0
- package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js.map +1 -0
- package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js +94 -0
- package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js.map +1 -0
- package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js +96 -0
- package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js.map +1 -0
- package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js +68 -0
- package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js.map +1 -0
- package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js +93 -0
- package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js.map +1 -0
- package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js +84 -0
- package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js.map +1 -0
- package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js +104 -0
- package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js.map +1 -0
- package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js +42 -0
- package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js.map +1 -0
- package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js +240 -0
- package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js.map +1 -0
- package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js +69 -0
- package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js.map +1 -0
- package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js +71 -0
- package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js.map +1 -0
- package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js +130 -0
- package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js.map +1 -0
- package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js +42 -0
- package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js.map +1 -0
- package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js +165 -0
- package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js.map +1 -0
- package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js +123 -0
- package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js.map +1 -0
- package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js +84 -0
- package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js.map +1 -0
- package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js +111 -0
- package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js.map +1 -0
- package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js +66 -0
- package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js.map +1 -0
- package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js +133 -0
- package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js.map +1 -0
- package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js +42 -0
- package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js.map +1 -0
- package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js +182 -0
- package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js.map +1 -0
- package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js +155 -0
- package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js.map +1 -0
- package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js +56 -0
- package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js.map +1 -0
- package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js +117 -0
- package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js.map +1 -0
- package/dist/HarvestConfig-AIGOGBFR.js +56 -0
- package/dist/HarvestConfig-AIGOGBFR.js.map +1 -0
- package/dist/HarvestFlowDetail-X3RUH3X3.js +131 -0
- package/dist/HarvestFlowDetail-X3RUH3X3.js.map +1 -0
- package/dist/HttpRequestConfig-OQEJIIJY.js +194 -0
- package/dist/HttpRequestConfig-OQEJIIJY.js.map +1 -0
- package/dist/HttpRequestFlowDetail-JVLV533Z.js +116 -0
- package/dist/HttpRequestFlowDetail-JVLV533Z.js.map +1 -0
- package/dist/IdentityCreateConfig-ZBUOJ6AL.js +94 -0
- package/dist/IdentityCreateConfig-ZBUOJ6AL.js.map +1 -0
- package/dist/IdentityCreateFlowDetail-WGKO43IH.js +83 -0
- package/dist/IdentityCreateFlowDetail-WGKO43IH.js.map +1 -0
- package/dist/IidCreateConfig-RRV2DYXI.js +75 -0
- package/dist/IidCreateConfig-RRV2DYXI.js.map +1 -0
- package/dist/IidCreateFlowDetail-6M32S6XS.js +57 -0
- package/dist/IidCreateFlowDetail-6M32S6XS.js.map +1 -0
- package/dist/KycVerifyConfig-VCG65K5K.js +65 -0
- package/dist/KycVerifyConfig-VCG65K5K.js.map +1 -0
- package/dist/KycVerifyFlowDetail-EWOMXSD3.js +421 -0
- package/dist/KycVerifyFlowDetail-EWOMXSD3.js.map +1 -0
- package/dist/ListDomainFlowsConfig-3JZEPTOJ.js +37 -0
- package/dist/ListDomainFlowsConfig-3JZEPTOJ.js.map +1 -0
- package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js +257 -0
- package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js.map +1 -0
- package/dist/LoadBatchesConfig-IMODIWRT.js +38 -0
- package/dist/LoadBatchesConfig-IMODIWRT.js.map +1 -0
- package/dist/LoadBatchesFlowDetail-GB24T76O.js +101 -0
- package/dist/LoadBatchesFlowDetail-GB24T76O.js.map +1 -0
- package/dist/MatrixDmConfig-NBII27CS.js +120 -0
- package/dist/MatrixDmConfig-NBII27CS.js.map +1 -0
- package/dist/MatrixRegisterConfig-N2U4FBYF.js +62 -0
- package/dist/MatrixRegisterConfig-N2U4FBYF.js.map +1 -0
- package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js +86 -0
- package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js.map +1 -0
- package/dist/MemberMultiSelectConfig-E7WUB2WD.js +30 -0
- package/dist/MemberMultiSelectConfig-E7WUB2WD.js.map +1 -0
- package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js +392 -0
- package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js.map +1 -0
- package/dist/OracleConfig-R7TDTTKN.js +56 -0
- package/dist/OracleConfig-R7TDTTKN.js.map +1 -0
- package/dist/OracleConfigureOracleConfig-QFF74X3N.js +198 -0
- package/dist/OracleConfigureOracleConfig-QFF74X3N.js.map +1 -0
- package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js +255 -0
- package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js.map +1 -0
- package/dist/OracleContractConfig-PHY5L7W2.js +38 -0
- package/dist/OracleContractConfig-PHY5L7W2.js.map +1 -0
- package/dist/OracleContractFlowDetail-M3PM4AU4.js +78 -0
- package/dist/OracleContractFlowDetail-M3PM4AU4.js.map +1 -0
- package/dist/OracleDeployConfig-QBG76ATZ.js +10 -0
- package/dist/OracleDeployConfig-QBG76ATZ.js.map +1 -0
- package/dist/OracleDeployFlowDetail-WKTMD2AD.js +231 -0
- package/dist/OracleDeployFlowDetail-WKTMD2AD.js.map +1 -0
- package/dist/OracleDeploySetupConfig-75XPGFJQ.js +10 -0
- package/dist/OracleDeploySetupConfig-75XPGFJQ.js.map +1 -0
- package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js +165 -0
- package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js.map +1 -0
- package/dist/OracleDeployStartConfig-NA6GZ4VQ.js +10 -0
- package/dist/OracleDeployStartConfig-NA6GZ4VQ.js.map +1 -0
- package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js +89 -0
- package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js.map +1 -0
- package/dist/OracleFlowDetail-5JCJK3GH.js +76 -0
- package/dist/OracleFlowDetail-5JCJK3GH.js.map +1 -0
- package/dist/OraclePromptConfig-YBRESISH.js +39 -0
- package/dist/OraclePromptConfig-YBRESISH.js.map +1 -0
- package/dist/OraclePromptFlowDetail-O3XNK7HY.js +112 -0
- package/dist/OraclePromptFlowDetail-O3XNK7HY.js.map +1 -0
- package/dist/OracleStoreConfigConfig-TUZWTJMA.js +134 -0
- package/dist/OracleStoreConfigConfig-TUZWTJMA.js.map +1 -0
- package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js +99 -0
- package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js.map +1 -0
- package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js +198 -0
- package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js.map +1 -0
- package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js +220 -0
- package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js.map +1 -0
- package/dist/OracleStoreSecretsConfig-PQMF7LFT.js +191 -0
- package/dist/OracleStoreSecretsConfig-PQMF7LFT.js.map +1 -0
- package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js +197 -0
- package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js.map +1 -0
- package/dist/ProposalCreateConfig-U5IHZNT7.js +161 -0
- package/dist/ProposalCreateConfig-U5IHZNT7.js.map +1 -0
- package/dist/ProposalCreateFlowDetail-4VZZPAWH.js +235 -0
- package/dist/ProposalCreateFlowDetail-4VZZPAWH.js.map +1 -0
- package/dist/ProposalVoteConfig-MH4MU7SL.js +150 -0
- package/dist/ProposalVoteConfig-MH4MU7SL.js.map +1 -0
- package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js +280 -0
- package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js.map +1 -0
- package/dist/ProtocolSelectConfig-S5U3P6K7.js +48 -0
- package/dist/ProtocolSelectConfig-S5U3P6K7.js.map +1 -0
- package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js +116 -0
- package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js.map +1 -0
- package/dist/RetireConfig-MV37WWZ6.js +59 -0
- package/dist/RetireConfig-MV37WWZ6.js.map +1 -0
- package/dist/RetireFlowDetail-VZ5O4SXI.js +147 -0
- package/dist/RetireFlowDetail-VZ5O4SXI.js.map +1 -0
- package/dist/SandboxProvisionConfig-ZGG4IRHM.js +46 -0
- package/dist/SandboxProvisionConfig-ZGG4IRHM.js.map +1 -0
- package/dist/SandboxProvisionFlowDetail-RUY64INV.js +79 -0
- package/dist/SandboxProvisionFlowDetail-RUY64INV.js.map +1 -0
- package/dist/WalletFundConfig-CMM3EP3B.js +117 -0
- package/dist/WalletFundConfig-CMM3EP3B.js.map +1 -0
- package/dist/WalletFundFlowDetail-TXWCZA4K.js +279 -0
- package/dist/WalletFundFlowDetail-TXWCZA4K.js.map +1 -0
- package/dist/WalletGenerateAndFundConfig-364RSEND.js +10 -0
- package/dist/WalletGenerateAndFundConfig-364RSEND.js.map +1 -0
- package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js +54 -0
- package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js.map +1 -0
- package/dist/WalletGenerateConfig-YYLCS65G.js +10 -0
- package/dist/WalletGenerateConfig-YYLCS65G.js.map +1 -0
- package/dist/WalletGenerateFlowDetail-CQCNDGJA.js +53 -0
- package/dist/WalletGenerateFlowDetail-CQCNDGJA.js.map +1 -0
- package/dist/XeroContactCreateConfig-OWG5PA3B.js +102 -0
- package/dist/XeroContactCreateConfig-OWG5PA3B.js.map +1 -0
- package/dist/XeroContactCreateFlowDetail-6MAINCF6.js +127 -0
- package/dist/XeroContactCreateFlowDetail-6MAINCF6.js.map +1 -0
- package/dist/XeroInvoiceCreateConfig-O74RUSZM.js +403 -0
- package/dist/XeroInvoiceCreateConfig-O74RUSZM.js.map +1 -0
- package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js +631 -0
- package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js.map +1 -0
- package/dist/XeroInvoiceListConfig-UR3GONBJ.js +113 -0
- package/dist/XeroInvoiceListConfig-UR3GONBJ.js.map +1 -0
- package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js +58 -0
- package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js.map +1 -0
- package/dist/XeroPaymentCreateConfig-RPMAIK6E.js +116 -0
- package/dist/XeroPaymentCreateConfig-RPMAIK6E.js.map +1 -0
- package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js +573 -0
- package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js.map +1 -0
- package/dist/action-manifest.json +2091 -393
- package/dist/chunk-2GAYKKTL.js +9 -0
- package/dist/chunk-2GAYKKTL.js.map +1 -0
- package/dist/chunk-2WPEATI7.js +315 -0
- package/dist/chunk-2WPEATI7.js.map +1 -0
- package/dist/chunk-3O42FYT3.js +3333 -0
- package/dist/chunk-3O42FYT3.js.map +1 -0
- package/dist/chunk-3TUYY4HK.js +20 -0
- package/dist/chunk-3TUYY4HK.js.map +1 -0
- package/dist/chunk-3XSLBJYI.js +554 -0
- package/dist/chunk-3XSLBJYI.js.map +1 -0
- package/dist/chunk-4DGCCXD6.js +710 -0
- package/dist/chunk-4DGCCXD6.js.map +1 -0
- package/dist/chunk-4NAFQF6V.js +11 -0
- package/dist/chunk-4NAFQF6V.js.map +1 -0
- package/dist/chunk-4PONO4US.js +799 -0
- package/dist/chunk-4PONO4US.js.map +1 -0
- package/dist/chunk-4TMOIK5M.js +21 -0
- package/dist/chunk-4TMOIK5M.js.map +1 -0
- package/dist/chunk-5IH3VC5I.js +102 -0
- package/dist/chunk-5IH3VC5I.js.map +1 -0
- package/dist/chunk-5NTKDOP6.js +89 -0
- package/dist/chunk-5NTKDOP6.js.map +1 -0
- package/dist/chunk-5O2SFRGU.js +18 -0
- package/dist/chunk-5O2SFRGU.js.map +1 -0
- package/dist/chunk-632JLECF.js +55 -0
- package/dist/chunk-632JLECF.js.map +1 -0
- package/dist/chunk-676HDB7K.js +95 -0
- package/dist/chunk-676HDB7K.js.map +1 -0
- package/dist/chunk-6ESTNTSH.js +223 -0
- package/dist/chunk-6ESTNTSH.js.map +1 -0
- package/dist/chunk-6GKJR52N.js +15 -0
- package/dist/chunk-6GKJR52N.js.map +1 -0
- package/dist/chunk-6L4ZIKYU.js +23 -0
- package/dist/chunk-6L4ZIKYU.js.map +1 -0
- package/dist/chunk-76YX5R4L.js +11 -0
- package/dist/chunk-76YX5R4L.js.map +1 -0
- package/dist/chunk-7J3GFMN3.js +32 -0
- package/dist/chunk-7J3GFMN3.js.map +1 -0
- package/dist/chunk-7LSARC2G.js +102 -0
- package/dist/chunk-7LSARC2G.js.map +1 -0
- package/dist/chunk-7W7UUUIE.js +609 -0
- package/dist/chunk-7W7UUUIE.js.map +1 -0
- package/dist/chunk-7ZLW7H37.js +21 -0
- package/dist/chunk-7ZLW7H37.js.map +1 -0
- package/dist/chunk-AAZHI22G.js +18 -0
- package/dist/chunk-AAZHI22G.js.map +1 -0
- package/dist/chunk-ACNE455I.js +76 -0
- package/dist/chunk-ACNE455I.js.map +1 -0
- package/dist/chunk-BKLSSLPZ.js +27 -0
- package/dist/chunk-BKLSSLPZ.js.map +1 -0
- package/dist/chunk-BZ7UPUTY.js +417 -0
- package/dist/chunk-BZ7UPUTY.js.map +1 -0
- package/dist/chunk-CGFAICUE.js +28 -0
- package/dist/chunk-CGFAICUE.js.map +1 -0
- package/dist/chunk-CMCEWQ3C.js +19 -0
- package/dist/chunk-CMCEWQ3C.js.map +1 -0
- package/dist/chunk-CP4UV436.js +41 -0
- package/dist/chunk-CP4UV436.js.map +1 -0
- package/dist/chunk-D2CQPNQG.js +27508 -0
- package/dist/chunk-D2CQPNQG.js.map +1 -0
- package/dist/chunk-DIQRZP7Z.js +51 -0
- package/dist/chunk-DIQRZP7Z.js.map +1 -0
- package/dist/chunk-EBFFDDAS.js +13 -0
- package/dist/chunk-EBFFDDAS.js.map +1 -0
- package/dist/chunk-EGVS23DR.js +85 -0
- package/dist/chunk-EGVS23DR.js.map +1 -0
- package/dist/chunk-EKBQ7K4N.js +15 -0
- package/dist/chunk-EKBQ7K4N.js.map +1 -0
- package/dist/chunk-EKQCZRAN.js +24 -0
- package/dist/chunk-EKQCZRAN.js.map +1 -0
- package/dist/chunk-EYKZIZ5J.js +48 -0
- package/dist/chunk-EYKZIZ5J.js.map +1 -0
- package/dist/{chunk-NEOPTPDF.js → chunk-F4PTFXZH.js} +11554 -22046
- package/dist/chunk-F4PTFXZH.js.map +1 -0
- package/dist/chunk-FFYZXA75.js +58 -0
- package/dist/chunk-FFYZXA75.js.map +1 -0
- package/dist/chunk-GFGDHPZ2.js +22 -0
- package/dist/chunk-GFGDHPZ2.js.map +1 -0
- package/dist/chunk-GR3CDFID.js +18 -0
- package/dist/chunk-GR3CDFID.js.map +1 -0
- package/dist/chunk-GR4SIU32.js +104 -0
- package/dist/chunk-GR4SIU32.js.map +1 -0
- package/dist/chunk-H5E46IIS.js +18 -0
- package/dist/chunk-H5E46IIS.js.map +1 -0
- package/dist/chunk-HFHVAMZL.js +22 -0
- package/dist/chunk-HFHVAMZL.js.map +1 -0
- package/dist/chunk-HRRI4BLF.js +4456 -0
- package/dist/chunk-HRRI4BLF.js.map +1 -0
- package/dist/chunk-HT6L7A5M.js +12 -0
- package/dist/chunk-HT6L7A5M.js.map +1 -0
- package/dist/chunk-I2FPFISM.js +301 -0
- package/dist/chunk-I2FPFISM.js.map +1 -0
- package/dist/chunk-IADAQJDH.js +28 -0
- package/dist/chunk-IADAQJDH.js.map +1 -0
- package/dist/chunk-IBOBCMQQ.js +99 -0
- package/dist/chunk-IBOBCMQQ.js.map +1 -0
- package/dist/chunk-IFWKRCFF.js +56 -0
- package/dist/chunk-IFWKRCFF.js.map +1 -0
- package/dist/chunk-IH4T7V4C.js +40 -0
- package/dist/chunk-IH4T7V4C.js.map +1 -0
- package/dist/chunk-IIIZZ4E4.js +1679 -0
- package/dist/chunk-IIIZZ4E4.js.map +1 -0
- package/dist/chunk-ILSFU3WD.js +83 -0
- package/dist/chunk-ILSFU3WD.js.map +1 -0
- package/dist/chunk-IX3VBV3L.js +43 -0
- package/dist/chunk-IX3VBV3L.js.map +1 -0
- package/dist/chunk-JBBFSORW.js +846 -0
- package/dist/chunk-JBBFSORW.js.map +1 -0
- package/dist/chunk-JIDTNKKL.js +1183 -0
- package/dist/chunk-JIDTNKKL.js.map +1 -0
- package/dist/chunk-JSPE6NGZ.js +22 -0
- package/dist/chunk-JSPE6NGZ.js.map +1 -0
- package/dist/chunk-JVROGQ7Q.js +150 -0
- package/dist/chunk-JVROGQ7Q.js.map +1 -0
- package/dist/chunk-K4WUMWNJ.js +32 -0
- package/dist/chunk-K4WUMWNJ.js.map +1 -0
- package/dist/chunk-K74XQ4Q5.js +11 -0
- package/dist/chunk-K74XQ4Q5.js.map +1 -0
- package/dist/chunk-KLLMJ4U3.js +22 -0
- package/dist/chunk-KLLMJ4U3.js.map +1 -0
- package/dist/chunk-LTKVCJ2E.js +27 -0
- package/dist/chunk-LTKVCJ2E.js.map +1 -0
- package/dist/chunk-M36DJTFZ.js +34 -0
- package/dist/chunk-M36DJTFZ.js.map +1 -0
- package/dist/chunk-MHM52LCJ.js +154 -0
- package/dist/chunk-MHM52LCJ.js.map +1 -0
- package/dist/chunk-MQCDMHRZ.js +59 -0
- package/dist/chunk-MQCDMHRZ.js.map +1 -0
- package/dist/chunk-N3ORMGAI.js +348 -0
- package/dist/chunk-N3ORMGAI.js.map +1 -0
- package/dist/chunk-NCSGIRRQ.js +28 -0
- package/dist/chunk-NCSGIRRQ.js.map +1 -0
- package/dist/chunk-NIXT2SBH.js +1423 -0
- package/dist/chunk-NIXT2SBH.js.map +1 -0
- package/dist/chunk-NJAII6CO.js +148 -0
- package/dist/chunk-NJAII6CO.js.map +1 -0
- package/dist/chunk-NKE4TL43.js +92 -0
- package/dist/chunk-NKE4TL43.js.map +1 -0
- package/dist/chunk-NZ7AXA7B.js +1 -0
- package/dist/chunk-NZ7AXA7B.js.map +1 -0
- package/dist/chunk-OCAYEGI2.js +26 -0
- package/dist/chunk-OCAYEGI2.js.map +1 -0
- package/dist/chunk-OMLI45ER.js +90 -0
- package/dist/chunk-OMLI45ER.js.map +1 -0
- package/dist/chunk-P7OBLJAG.js +88 -0
- package/dist/chunk-P7OBLJAG.js.map +1 -0
- package/dist/chunk-PAY3CBWL.js +2321 -0
- package/dist/chunk-PAY3CBWL.js.map +1 -0
- package/dist/chunk-PFF6VY35.js +257 -0
- package/dist/chunk-PFF6VY35.js.map +1 -0
- package/dist/chunk-PYNDJDWZ.js +1758 -0
- package/dist/chunk-PYNDJDWZ.js.map +1 -0
- package/dist/chunk-QDQ6UMMN.js +53 -0
- package/dist/chunk-QDQ6UMMN.js.map +1 -0
- package/dist/chunk-QGT3G2XG.js +24 -0
- package/dist/chunk-QGT3G2XG.js.map +1 -0
- package/dist/chunk-QZYCJ2GZ.js +55 -0
- package/dist/chunk-QZYCJ2GZ.js.map +1 -0
- package/dist/chunk-REZ7RFSA.js +124 -0
- package/dist/chunk-REZ7RFSA.js.map +1 -0
- package/dist/chunk-RRYBAE6E.js +2449 -0
- package/dist/chunk-RRYBAE6E.js.map +1 -0
- package/dist/chunk-RWUZOB62.js +34 -0
- package/dist/chunk-RWUZOB62.js.map +1 -0
- package/dist/chunk-SB5UCPZH.js +116 -0
- package/dist/chunk-SB5UCPZH.js.map +1 -0
- package/dist/chunk-SEJJ7CRI.js +99 -0
- package/dist/chunk-SEJJ7CRI.js.map +1 -0
- package/dist/chunk-SHBFGRPV.js +45 -0
- package/dist/chunk-SHBFGRPV.js.map +1 -0
- package/dist/chunk-SOFJ4GC5.js +45 -0
- package/dist/chunk-SOFJ4GC5.js.map +1 -0
- package/dist/chunk-STH2HPZK.js +44 -0
- package/dist/chunk-STH2HPZK.js.map +1 -0
- package/dist/chunk-TK3JNKME.js +28 -0
- package/dist/chunk-TK3JNKME.js.map +1 -0
- package/dist/chunk-TMONHFE3.js +46 -0
- package/dist/chunk-TMONHFE3.js.map +1 -0
- package/dist/chunk-TR4KO3AG.js +44 -0
- package/dist/chunk-TR4KO3AG.js.map +1 -0
- package/dist/chunk-TS2LNBF2.js +68 -0
- package/dist/chunk-TS2LNBF2.js.map +1 -0
- package/dist/chunk-UZUMBFPP.js +26 -0
- package/dist/chunk-UZUMBFPP.js.map +1 -0
- package/dist/chunk-VRZ5LMOW.js +176 -0
- package/dist/chunk-VRZ5LMOW.js.map +1 -0
- package/dist/chunk-WLGGY6Z6.js +75 -0
- package/dist/chunk-WLGGY6Z6.js.map +1 -0
- package/dist/chunk-WO7V6ZNC.js +11 -0
- package/dist/chunk-WO7V6ZNC.js.map +1 -0
- package/dist/chunk-WXSENSRP.js +64 -0
- package/dist/chunk-WXSENSRP.js.map +1 -0
- package/dist/chunk-XEKBZ2SA.js +19 -0
- package/dist/chunk-XEKBZ2SA.js.map +1 -0
- package/dist/chunk-XPBKU3JX.js +61 -0
- package/dist/chunk-XPBKU3JX.js.map +1 -0
- package/dist/chunk-XRYXBXWH.js +24 -0
- package/dist/chunk-XRYXBXWH.js.map +1 -0
- package/dist/chunk-XVA7QRVH.js +22 -0
- package/dist/chunk-XVA7QRVH.js.map +1 -0
- package/dist/chunk-YCTHHBSS.js +37 -0
- package/dist/chunk-YCTHHBSS.js.map +1 -0
- package/dist/chunk-YHPWD5NE.js +70 -0
- package/dist/chunk-YHPWD5NE.js.map +1 -0
- package/dist/chunk-YLNEKJQ5.js +126 -0
- package/dist/chunk-YLNEKJQ5.js.map +1 -0
- package/dist/chunk-YN4CEKCF.js +73 -0
- package/dist/chunk-YN4CEKCF.js.map +1 -0
- package/dist/chunk-YYNMESIF.js +17 -0
- package/dist/chunk-YYNMESIF.js.map +1 -0
- package/dist/chunk-Z6PRMCV6.js +1 -0
- package/dist/chunk-Z6PRMCV6.js.map +1 -0
- package/dist/chunk-ZDNW6VQG.js +11 -0
- package/dist/chunk-ZDNW6VQG.js.map +1 -0
- package/dist/chunk-ZP4D73DO.js +36 -0
- package/dist/chunk-ZP4D73DO.js.map +1 -0
- package/dist/chunk-ZUATADUV.js +26 -0
- package/dist/chunk-ZUATADUV.js.map +1 -0
- package/dist/{connections-1NtNQrsY.d.ts → connections-CEcurtWI.d.ts} +74 -9
- package/dist/core/index.cjs +14041 -6973
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +422 -138
- package/dist/core/index.js +425 -183
- package/dist/core/index.js.map +1 -1
- package/dist/flow-vnext/index.cjs +2842 -0
- package/dist/flow-vnext/index.cjs.map +1 -0
- package/dist/flow-vnext/index.d.ts +3 -0
- package/dist/flow-vnext/index.js +119 -0
- package/dist/flow-vnext/index.js.map +1 -0
- package/dist/{graphql-client-Bn0tN049.d.ts → graphql-client-B2tREsx6.d.ts} +3 -1
- package/dist/index-b9xxXGFs.d.ts +1230 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +202 -37
- package/dist/index.js.map +1 -1
- package/dist/legacy-BpgIqaQ5.d.ts +14 -0
- package/dist/mantine/index.d.ts +7 -4
- package/dist/mantine/index.js +84 -30
- package/dist/mantine/index.js.map +1 -1
- package/dist/{runtime-BFwvCQDF.d.ts → types-Dqk5MTfW.d.ts} +6096 -5386
- package/package.json +12 -2
- package/dist/chunk-A4CWC4AG.js +0 -374
- package/dist/chunk-A4CWC4AG.js.map +0 -1
- package/dist/chunk-NEOPTPDF.js.map +0 -1
- package/dist/chunk-VRCRDKN5.js +0 -59694
- package/dist/chunk-VRCRDKN5.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/evalRegister/types.ts","../src/mantine/blocks/action/actionTypes/evalEngine/types.ts","../src/mantine/blocks/action/actionTypes/evalRegister/grantCaps.ts"],"sourcesContent":["/**\n * Template-mode config shape for the single `qi/eval.register` block (\"Enable\n * Evaluation Engine\"). Like `qi/collection.users`, the primary fields only\n * identify the collection context — bound from a Claim Collection block (trigger)\n * or picked manually, never hand-typed engine internals:\n *\n * - `deedDid` — the entity (deed) DID the collection belongs to.\n * - `collectionId` — the claim collection to enroll.\n *\n * The three questions about what the collection collects (`whatIsCollected`,\n * `repeatSubmissions`, `differentWhen`/`differentWhenOther`) are stored RAW here, one field\n * per answer, and composed into the engine's ONE opaque `description` string at run time —\n * see `core/lib/actionRegistry/actions/evalRegister/description.ts` for the wording, the\n * composition, and why the composed string is never persisted or parsed back.\n *\n * The remaining fields are OPTIONAL power-user overrides (Advanced). Blank means\n * \"use the host defaults\" (resolved from the configured network host-side):\n *\n * - `oracleDid` — override the evaluation engine DID (delegation audience).\n * - `evalEngineUrl` — override the engine base URL.\n * - `ucanStoreUrl` — override the UCAN Store base URL.\n * - `rubricId` — optional rubric id passed to the engine at registration.\n *\n * The three engine settings (eval-dashboard spec §B.1/§B.3, \"Checks & pricing\")\n * are plain booleans that default ON: a block nobody has opened yet enrols with\n * the full check lane and on-chain decisions, which is what an owner enabling\n * the engine almost always wants. Only an EXPLICIT `false` — what the serializer\n * writes the moment the owner flips a toggle off — turns one off, so an opt-out\n * survives the round trip and is never re-defaulted back on.\n * `allowImageChecks` only means anything when `allowAiChecks` is on — the UI\n * nests + disables the toggle accordingly.\n * `allowChainEvaluation` gates the engine's on-chain `MsgEvaluateClaim` write\n * (§D.3): off means the engine records its decision and writes nothing. Left at\n * its default it also means enrolment signs the evaluate-authz grant, which\n * needs the entity admin account (`adminAddress`).\n *\n * This block is the ONLY declarer of these settings — the engine treats a\n * register with no `settings` as \"no opinion\" and leaves the stored values\n * alone, so `qi/eval.rubric`'s pin can never reset them.\n *\n * `evaluateMaxAmount` is the payout ceiling on the ONE on-chain grant enrolment\n * signs (evaluator rights, only when `allowChainEvaluation` is on), in base units\n * and in the denoms the owner picked — see `grantCaps.ts` for the conversion and\n * why an empty cap is not \"unlimited\".\n */\n\nimport type { CollectionCoin } from '@/core/lib/actionRegistry/types';\nimport {\n normalizeDifferentWhen,\n normalizeRepeatSubmissions,\n DIFFERENT_WHEN_OTHER_MAX,\n WHAT_IS_COLLECTED_MAX,\n type DifferentWhen,\n type RepeatSubmissions,\n} from '@/core/lib/actionRegistry/actions/evalRegister/description';\n\nexport interface EvalRegisterActionInputs {\n deedDid: string;\n collectionId: string;\n /**\n * Owner-typed collection name, shown on the engine's billing emails and\n * notices as `Name (collection 913)`. Optional — blank enrolls fine and the\n * notices fall back to `Claim collection 913`. The engine caps it at 120.\n */\n displayName?: string;\n /**\n * Where the engine sends this collection's billing notices (out-of-funds /\n * resumed). REQUIRED at enrolment (owner, 2026-07-30) — enforced by the\n * action before the PIN, not here: the config stays permissive so a\n * half-configured block round-trips without loss. Prefilled from the\n * owner's account via the host's `getNotificationEmail`; blank only when\n * that fetch failed and the owner has not typed one yet.\n */\n notifyEmail?: string;\n /**\n * The owner's three answers about what this collection collects (Q1/Q2/Q3 — see\n * `evalRegister/description.ts`). Stored RAW, one field each, exactly like every other\n * config field: the string they compose into for the engine is one-way and deliberately\n * opaque, so it is never persisted here and never parsed back out. Every one is optional —\n * a block where nobody answered sends no `description` at all.\n */\n whatIsCollected?: string;\n repeatSubmissions?: RepeatSubmissions;\n differentWhen?: DifferentWhen[];\n differentWhenOther?: string;\n allowAiChecks: boolean;\n allowImageChecks: boolean;\n allowChainEvaluation: boolean;\n /** Approve on chain even when the approval pays nothing. Opt-IN, unlike the three above. */\n allowZeroPayoutApprovals: boolean;\n /** Base-unit payout cap on the evaluate grant — denoms chosen by the owner (grantCaps.ts). */\n evaluateMaxAmount: CollectionCoin[];\n oracleDid?: string;\n evalEngineUrl?: string;\n ucanStoreUrl?: string;\n rubricId?: string;\n}\n\n/** Coins survive the round trip only if they carry a denom and a positive amount. */\nfunction coinArray(value: unknown): CollectionCoin[] {\n if (!Array.isArray(value)) return [];\n return value\n .filter((coin): coin is CollectionCoin => typeof coin?.denom === 'string' && !!coin.denom && Number(coin?.amount) > 0)\n .map((coin) => ({ denom: coin.denom, amount: String(coin.amount) }));\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value : undefined;\n}\n\n/** The engine settings a block carries before anyone configures it (see header). */\nconst DEFAULT_ENGINE_SETTINGS = {\n allowAiChecks: true,\n allowImageChecks: true,\n allowChainEvaluation: true,\n // The one setting that defaults OFF: turning it on lets a zero-payout approval land irreversibly\n // on chain, so it has to be a thing the owner chose, never a thing a default chose for them.\n allowZeroPayoutApprovals: false,\n} as const;\n\nexport function parseEvalRegisterActionInputs(json: string): EvalRegisterActionInputs {\n try {\n const parsed = typeof json === 'string' ? (json ? JSON.parse(json) : {}) : json || {};\n // `!== false`, not `=== true`: absent means \"never configured\" and takes the\n // ON default; only the explicit `false` the serializer persists turns it off.\n const allowAiChecks = parsed?.allowAiChecks !== false;\n return {\n deedDid: typeof parsed?.deedDid === 'string' ? parsed.deedDid : '',\n collectionId: typeof parsed?.collectionId === 'string' ? parsed.collectionId : '',\n displayName: optionalString(parsed?.displayName),\n notifyEmail: optionalString(parsed?.notifyEmail),\n whatIsCollected: optionalString(parsed?.whatIsCollected),\n // Unknown choices are dropped, not carried: only this version's options can ever reach\n // the composed sentence.\n repeatSubmissions: normalizeRepeatSubmissions(parsed?.repeatSubmissions),\n differentWhen: normalizeDifferentWhen(parsed?.differentWhen),\n differentWhenOther: optionalString(parsed?.differentWhenOther),\n allowAiChecks,\n // Image detection lives inside the AI lane — never true without it.\n allowImageChecks: allowAiChecks && parsed?.allowImageChecks !== false,\n allowChainEvaluation: parsed?.allowChainEvaluation !== false,\n // `=== true` here, deliberately unlike the three above: absent must read OFF, because absent\n // means \"never configured\" and no owner has consented to a zero payout landing on chain.\n allowZeroPayoutApprovals: parsed?.allowZeroPayoutApprovals === true,\n evaluateMaxAmount: coinArray(parsed?.evaluateMaxAmount),\n oracleDid: optionalString(parsed?.oracleDid),\n evalEngineUrl: optionalString(parsed?.evalEngineUrl),\n ucanStoreUrl: optionalString(parsed?.ucanStoreUrl),\n rubricId: optionalString(parsed?.rubricId),\n };\n } catch {\n // Unreadable blob is treated exactly like an absent one.\n return {\n deedDid: '',\n collectionId: '',\n ...DEFAULT_ENGINE_SETTINGS,\n evaluateMaxAmount: [],\n };\n }\n}\n\nexport function serializeEvalRegisterActionInputs(inputs: EvalRegisterActionInputs): string {\n // Drop blank optional overrides so the persisted blob only carries set values\n // (and the run() step falls back to host defaults for the rest). The check\n // settings are booleans and serialize EXPLICITLY — a dropped `false` would be\n // indistinguishable from \"never configured\" in the persisted blob, and since\n // that reads back as the ON default, the owner's opt-out would silently undo\n // itself on the next load.\n const blob: Record<string, string | boolean | string[] | CollectionCoin[]> = {\n deedDid: inputs.deedDid,\n collectionId: inputs.collectionId,\n allowAiChecks: inputs.allowAiChecks === true,\n allowImageChecks: inputs.allowAiChecks === true && inputs.allowImageChecks === true,\n allowChainEvaluation: inputs.allowChainEvaluation === true,\n allowZeroPayoutApprovals: inputs.allowZeroPayoutApprovals === true,\n };\n // The cap is only carried when something is actually capped — an empty array\n // and \"never configured\" mean the same thing to `run()` (no custom payout).\n const evaluateMaxAmount = coinArray(inputs.evaluateMaxAmount);\n if (evaluateMaxAmount.length) blob.evaluateMaxAmount = evaluateMaxAmount;\n if (inputs.displayName?.trim()) blob.displayName = inputs.displayName.trim().slice(0, 120);\n if (inputs.notifyEmail?.trim()) blob.notifyEmail = inputs.notifyEmail.trim();\n // The three collection questions: blank/unticked is \"unanswered\", so nothing is persisted for\n // it — that is what lets `run()` tell \"no opinion\" from an answer the owner cleared. Capped\n // here as well as in the UI so the composed string can never approach the engine's 1000.\n if (inputs.whatIsCollected?.trim()) blob.whatIsCollected = inputs.whatIsCollected.trim().slice(0, WHAT_IS_COLLECTED_MAX);\n const repeatSubmissions = normalizeRepeatSubmissions(inputs.repeatSubmissions);\n if (repeatSubmissions) blob.repeatSubmissions = repeatSubmissions;\n const differentWhen = normalizeDifferentWhen(inputs.differentWhen);\n if (differentWhen.length) blob.differentWhen = differentWhen;\n if (inputs.differentWhenOther?.trim()) blob.differentWhenOther = inputs.differentWhenOther.trim().slice(0, DIFFERENT_WHEN_OTHER_MAX);\n if (inputs.oracleDid?.trim()) blob.oracleDid = inputs.oracleDid.trim();\n if (inputs.evalEngineUrl?.trim()) blob.evalEngineUrl = inputs.evalEngineUrl.trim();\n if (inputs.ucanStoreUrl?.trim()) blob.ucanStoreUrl = inputs.ucanStoreUrl.trim();\n if (inputs.rubricId?.trim()) blob.rubricId = inputs.rubricId.trim();\n return JSON.stringify(blob);\n}\n","/**\n * Persisted-inputs shape for the merged `qi/eval.engine` block (\"Evaluation\n * Engine\") — the single flow block that replaces authoring `qi/eval.register`\n * (\"Enable Evaluation Engine\") and `qi/eval.rubric` (\"Claim Approval Rules\")\n * as two separate steps. One block, one blob in `block.props.inputs`, so a\n * flow author configures collection enrolment AND the rubric document in one\n * place instead of wiring two blocks together by hand.\n *\n * This is the UNION of the two legacy blocks' inputs, minus `rubricId`: the\n * register block's `rubricId` is a manual override for pinning an\n * already-published rubric id at enrolment time, but the merged block always\n * publishes its OWN rubric in the same run and produces that id itself — a\n * persisted override here would be meaningless (nothing else could have set\n * it) and could only ever fight the run's own output. So it is excluded from\n * this shape entirely and from both `parse`/`serialize` below.\n *\n * `parse`/`serialize` deliberately DELEGATE to the two legacy modules rather\n * than re-reading the JSON: `evalRegister/types.ts`'s parser owns non-obvious\n * boolean-default rules (absent means \"never configured\" and defaults ON;\n * `allowImageChecks` can never be true without `allowAiChecks`), and\n * `evalRubric/types.ts`'s parser owns `migrateRubric`, the one-time self-heal\n * for rubrics persisted before two field renames. Re-implementing either\n * ruleset here would silently drop it the next time the legacy module\n * changes. Both legacy parsers already read only their own keys out of\n * whatever JSON blob they're given and ignore the rest — that tolerance is\n * exactly what makes ONE merged blob safe to hand to both.\n */\n\nimport type { RubricBody, RubricFieldCatalog } from '@/core/lib/actionRegistry/actions/evalRubric/types';\nimport { parseEvalRubricInputs } from '@/core/lib/actionRegistry/actions/evalRubric/types';\nimport type { DifferentWhen, RepeatSubmissions } from '@/core/lib/actionRegistry/actions/evalRegister/description';\nimport type { EvalRegisterRuntimeInputs } from '@/core/lib/actionRegistry/actions/evalRegister/types';\nimport type { CollectionCoin } from '@/core/lib/actionRegistry/types';\nimport { parseEvalRegisterActionInputs, serializeEvalRegisterActionInputs } from '../evalRegister/types';\n\n/**\n * The merged block's persisted shape: every `EvalRegisterActionInputs` field\n * except `rubricId` (see module comment), plus the rubric document fields\n * from `EvalRubricActionInputs` (`rubric`, `claimSchemaSnapshot`) so the block\n * can author and publish the rubric in the same step as enrolment.\n */\nexport interface EvalEngineActionInputs {\n deedDid: string;\n collectionId: string;\n displayName?: string;\n notifyEmail?: string;\n /** The three raw answers about what this collection collects — composed into `description` by run(). */\n whatIsCollected?: string;\n repeatSubmissions?: RepeatSubmissions;\n differentWhen?: DifferentWhen[];\n differentWhenOther?: string;\n allowAiChecks: boolean;\n allowImageChecks: boolean;\n allowChainEvaluation: boolean;\n /** Approve on chain even when the approval pays nothing. Opt-IN, unlike the three above. */\n allowZeroPayoutApprovals: boolean;\n evaluateMaxAmount: CollectionCoin[];\n oracleDid?: string;\n evalEngineUrl?: string;\n ucanStoreUrl?: string;\n /** The rubric body (§A.2 `rubric`, minus `@id`) — envelope + `@id` are computed at publish. */\n rubric: RubricBody | null;\n /** The field catalog the rules were authored against (§B.4). */\n claimSchemaSnapshot: RubricFieldCatalog | null;\n}\n\n/**\n * Runtime-only inputs this block hands the executor at signing time — the\n * register block's set, plus the two rules fields.\n *\n * The rules are runtime inputs and not \"just\" persisted config because runtime\n * inputs are merged LAST over the saved blob (`actionExecutor.ts`\n * `buildActionRunInputs`), which makes them the one channel that cannot be\n * beaten by a stale read of `block.props.inputs` — see the call site in\n * `EvalEngineFlowDetail`'s `execute`. Both stay OPTIONAL: the register lane\n * (`qi/eval.register`) sends neither, and `EvalRegisterRuntimeInputs` itself is\n * left untouched so nothing outside this block inherits a rules field.\n */\nexport type EvalEngineRuntimeInputs = EvalRegisterRuntimeInputs & {\n rubric?: RubricBody;\n claimSchemaSnapshot?: RubricFieldCatalog;\n};\n\n/**\n * Delegates to both legacy parsers against the SAME blob — each reads only\n * its own keys, so calling both is safe and gets their non-obvious behaviour\n * for free: the register parser's absent-means-ON boolean defaults and the\n * AI-off-forces-image-off rule, and the rubric parser's `migrateRubric`\n * self-heal for documents persisted before its two field renames.\n *\n * `rubricId` is dropped from the register half — see module comment; this\n * block never reads a manual override, only ever produces the id at run time.\n */\nexport function parseEvalEngineInputs(json: string): EvalEngineActionInputs {\n const { rubricId: _producedByRun, ...register } = parseEvalRegisterActionInputs(json);\n const { rubric, claimSchemaSnapshot } = parseEvalRubricInputs(json);\n return { ...register, rubric, claimSchemaSnapshot };\n}\n\n/**\n * Reuses `serializeEvalRegisterActionInputs` for the register half so its\n * blank-optional dropping and EXPLICIT boolean serialization (a dropped\n * `false` would read back as the ON default and silently undo an owner's\n * opt-out) stay in exactly one place, then folds in the two rubric fields.\n *\n * `rubricId` is forced `undefined` on the way in so it can never round-trip\n * through this block — see module comment.\n */\nexport function serializeEvalEngineInputs(inputs: EvalEngineActionInputs): string {\n const { rubric, claimSchemaSnapshot, ...register } = inputs;\n const blob = JSON.parse(serializeEvalRegisterActionInputs({ ...register, rubricId: undefined }));\n return JSON.stringify({ ...blob, rubric, claimSchemaSnapshot });\n}\n","/**\n * The payout ceiling on the evaluate grant `qi/eval.register` signs — the ONE\n * place this block converts between what the owner types and what the chain\n * stores.\n *\n * `EvaluateClaimConstraints.maxCustomAmount` is the most the engine may pay out\n * when it approves a claim (§D.3). An EMPTY cap is not \"unlimited\" — the chain\n * measures `MsgEvaluateClaim.amount` against it, so an empty cap rejects every\n * evaluation that carries coins.\n *\n * The owner picks the denom(s); this module never assumes one. Amounts are typed\n * in whole tokens and stored in BASE (micro) units, because the consumer grant\n * handlers apply no conversion of their own (`collectionGrant.ts` toCoins) —\n * same contract as `qi/collection.users`' evaluator caps.\n */\n\nimport { DECIMALS, IXO_DENOM, USDC_DENOM } from '@/core/constants';\nimport type { CollectionCoin } from '@/core/lib/actionRegistry/types';\n\nexport { IXO_DENOM, USDC_DENOM };\n\n/** What the config UI holds: whole-token amounts per denom, '' = not capped. */\nexport type GrantCapValues = { ixo: string; usdc: string };\n\nexport const EMPTY_GRANT_CAP: GrantCapValues = { ixo: '', usdc: '' };\n\n/** Whole tokens → base units. Non-positive/garbage reads as \"no cap\" ('0'). */\nexport function toBaseUnits(displayAmount: string): string {\n const trimmed = String(displayAmount ?? '').trim();\n const n = Number(trimmed);\n if (!Number.isFinite(n) || n <= 0) return '0';\n const [intPart = '', fracRaw = ''] = trimmed.split('.');\n const frac = fracRaw.slice(0, DECIMALS).padEnd(DECIMALS, '0');\n return `${intPart}${frac}`.replace(/^0+/, '') || '0';\n}\n\n/** Inverse of `toBaseUnits`, for display. */\nexport function fromBaseUnits(baseAmount: string | number): string {\n const n = Number(baseAmount);\n if (!Number.isFinite(n)) return String(baseAmount ?? '');\n return String(n / 10 ** DECIMALS);\n}\n\n/** UI values → the base-unit coins the grant carries. Zero amounts drop out. */\nexport function buildCapCoins(values: GrantCapValues): CollectionCoin[] {\n return [\n { denom: IXO_DENOM, amount: values.ixo },\n { denom: USDC_DENOM, amount: values.usdc },\n ]\n .filter((coin) => Number(coin.amount) > 0)\n .map((coin) => ({ denom: coin.denom, amount: toBaseUnits(coin.amount) }));\n}\n\n/** Stored coins → UI values (the round trip that repopulates the config). */\nexport function capValuesFromCoins(coins: CollectionCoin[] | undefined): GrantCapValues {\n if (!Array.isArray(coins)) return EMPTY_GRANT_CAP;\n const find = (denom: string) => coins.find((c) => c?.denom === denom)?.amount;\n const ixo = find(IXO_DENOM);\n const usdc = find(USDC_DENOM);\n return {\n ixo: ixo ? fromBaseUnits(ixo) : '',\n usdc: usdc ? fromBaseUnits(usdc) : '',\n };\n}\n\n/** \"1000 IXO · 500 USDC\", or a plain-words fallback when nothing is capped. */\nexport function formatCapCoins(coins: CollectionCoin[] | undefined, emptyLabel: string): string {\n if (!Array.isArray(coins) || coins.length === 0) return emptyLabel;\n return coins.map((coin) => `${fromBaseUnits(coin.amount)} ${coin.denom === IXO_DENOM ? 'IXO' : coin.denom === USDC_DENOM ? 'USDC' : coin.denom}`).join(' · ');\n}\n\n/** Coins only when at least one denom is capped — the grant call wants undefined, not []. */\nexport function capCoinsOrUndefined(coins: CollectionCoin[] | undefined): CollectionCoin[] | undefined {\n return Array.isArray(coins) && coins.length > 0 ? coins : undefined;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// src/mantine/utils/claimStatus.ts
|
|
2
|
+
var STATUS_META = {
|
|
3
|
+
pending: { label: "Pending", color: "yellow", isTerminal: false },
|
|
4
|
+
approved: { label: "Approved", color: "green", isTerminal: true },
|
|
5
|
+
rejected: { label: "Rejected", color: "red", isTerminal: true },
|
|
6
|
+
disputed: { label: "Disputed", color: "orange", isTerminal: false },
|
|
7
|
+
invalidated: { label: "Invalidated", color: "gray", isTerminal: true },
|
|
8
|
+
unknown: { label: "Unknown", color: "gray", isTerminal: false }
|
|
9
|
+
};
|
|
10
|
+
function asStatusInfo(key) {
|
|
11
|
+
return { key, ...STATUS_META[key] };
|
|
12
|
+
}
|
|
13
|
+
function parseEnumStatus(value) {
|
|
14
|
+
const numeric = typeof value === "number" ? value : Number(value);
|
|
15
|
+
if (!Number.isFinite(numeric)) return null;
|
|
16
|
+
switch (numeric) {
|
|
17
|
+
case 0:
|
|
18
|
+
return "pending";
|
|
19
|
+
case 1:
|
|
20
|
+
return "approved";
|
|
21
|
+
case 2:
|
|
22
|
+
return "rejected";
|
|
23
|
+
case 3:
|
|
24
|
+
return "disputed";
|
|
25
|
+
case 4:
|
|
26
|
+
return "invalidated";
|
|
27
|
+
case -1:
|
|
28
|
+
return "unknown";
|
|
29
|
+
default:
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function parseStringStatus(value) {
|
|
34
|
+
const normalized = String(value || "").trim().toLowerCase();
|
|
35
|
+
switch (normalized) {
|
|
36
|
+
case "pending":
|
|
37
|
+
return "pending";
|
|
38
|
+
case "approved":
|
|
39
|
+
return "approved";
|
|
40
|
+
case "rejected":
|
|
41
|
+
return "rejected";
|
|
42
|
+
case "disputed":
|
|
43
|
+
return "disputed";
|
|
44
|
+
case "invalidated":
|
|
45
|
+
return "invalidated";
|
|
46
|
+
case "unknown":
|
|
47
|
+
return "unknown";
|
|
48
|
+
default:
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function getClaimStatusInfo(claim) {
|
|
53
|
+
const evaluationStatusKey = parseEnumStatus(claim?.evaluationByClaimId?.status);
|
|
54
|
+
if (evaluationStatusKey && evaluationStatusKey !== "pending") {
|
|
55
|
+
return asStatusInfo(evaluationStatusKey);
|
|
56
|
+
}
|
|
57
|
+
if (claim?.disputeBySubjectId) {
|
|
58
|
+
return asStatusInfo("disputed");
|
|
59
|
+
}
|
|
60
|
+
if (evaluationStatusKey) {
|
|
61
|
+
return asStatusInfo(evaluationStatusKey);
|
|
62
|
+
}
|
|
63
|
+
const directEnumStatusKey = parseEnumStatus(claim?.status);
|
|
64
|
+
if (directEnumStatusKey) {
|
|
65
|
+
return asStatusInfo(directEnumStatusKey);
|
|
66
|
+
}
|
|
67
|
+
const directStringStatusKey = parseStringStatus(claim?.status);
|
|
68
|
+
if (directStringStatusKey) {
|
|
69
|
+
return asStatusInfo(directStringStatusKey);
|
|
70
|
+
}
|
|
71
|
+
const paymentsStatus = claim?.paymentsStatus;
|
|
72
|
+
if (paymentsStatus?.approval === "PAID") {
|
|
73
|
+
return asStatusInfo("approved");
|
|
74
|
+
}
|
|
75
|
+
if (paymentsStatus?.rejection === "PAID") {
|
|
76
|
+
return asStatusInfo("rejected");
|
|
77
|
+
}
|
|
78
|
+
if (paymentsStatus?.evaluation === "PAID" || paymentsStatus?.submission === "PAID") {
|
|
79
|
+
return asStatusInfo("pending");
|
|
80
|
+
}
|
|
81
|
+
return asStatusInfo("pending");
|
|
82
|
+
}
|
|
83
|
+
function isClaimEvaluated(claim) {
|
|
84
|
+
const status = getClaimStatusInfo(claim);
|
|
85
|
+
return status.key === "approved" || status.key === "rejected" || status.key === "invalidated" || status.key === "disputed";
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export {
|
|
89
|
+
getClaimStatusInfo,
|
|
90
|
+
isClaimEvaluated
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=chunk-NKE4TL43.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/utils/claimStatus.ts"],"sourcesContent":["import type { Claim } from '@/mantine/context/BlocknoteContext';\n\nexport type ClaimStatusKey = 'pending' | 'approved' | 'rejected' | 'disputed' | 'invalidated' | 'unknown';\n\nexport type ClaimStatusInfo = {\n key: ClaimStatusKey;\n label: string;\n color: string;\n isTerminal: boolean;\n};\n\ntype ClaimWithEvaluation = Claim & {\n status?: string | number | null;\n evaluationByClaimId?: {\n status?: string | number | null;\n } | null;\n disputeBySubjectId?: {\n type?: number;\n data?: { uri?: string; type?: string; proof?: string; encrypted?: boolean };\n } | null;\n};\n\nconst STATUS_META: Record<ClaimStatusKey, Omit<ClaimStatusInfo, 'key'>> = {\n pending: { label: 'Pending', color: 'yellow', isTerminal: false },\n approved: { label: 'Approved', color: 'green', isTerminal: true },\n rejected: { label: 'Rejected', color: 'red', isTerminal: true },\n disputed: { label: 'Disputed', color: 'orange', isTerminal: false },\n invalidated: { label: 'Invalidated', color: 'gray', isTerminal: true },\n unknown: { label: 'Unknown', color: 'gray', isTerminal: false },\n};\n\nfunction asStatusInfo(key: ClaimStatusKey): ClaimStatusInfo {\n return { key, ...STATUS_META[key] };\n}\n\nfunction parseEnumStatus(value: unknown): ClaimStatusKey | null {\n const numeric = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numeric)) return null;\n\n switch (numeric) {\n case 0:\n return 'pending';\n case 1:\n return 'approved';\n case 2:\n return 'rejected';\n case 3:\n return 'disputed';\n case 4:\n return 'invalidated';\n case -1:\n return 'unknown';\n default:\n return null;\n }\n}\n\nfunction parseStringStatus(value: unknown): ClaimStatusKey | null {\n const normalized = String(value || '')\n .trim()\n .toLowerCase();\n\n switch (normalized) {\n case 'pending':\n return 'pending';\n case 'approved':\n return 'approved';\n case 'rejected':\n return 'rejected';\n case 'disputed':\n return 'disputed';\n case 'invalidated':\n return 'invalidated';\n case 'unknown':\n return 'unknown';\n default:\n return null;\n }\n}\n\nexport function getClaimStatusInfo(claim: ClaimWithEvaluation): ClaimStatusInfo {\n // Terminal evaluation (approved/rejected/invalidated) wins over any dispute record,\n // since the dispute row stays on chain even after a later evaluator decision.\n const evaluationStatusKey = parseEnumStatus(claim?.evaluationByClaimId?.status);\n if (evaluationStatusKey && evaluationStatusKey !== 'pending') {\n return asStatusInfo(evaluationStatusKey);\n }\n\n if (claim?.disputeBySubjectId) {\n return asStatusInfo('disputed');\n }\n\n if (evaluationStatusKey) {\n return asStatusInfo(evaluationStatusKey);\n }\n\n const directEnumStatusKey = parseEnumStatus(claim?.status);\n if (directEnumStatusKey) {\n return asStatusInfo(directEnumStatusKey);\n }\n\n const directStringStatusKey = parseStringStatus(claim?.status);\n if (directStringStatusKey) {\n return asStatusInfo(directStringStatusKey);\n }\n\n const paymentsStatus = claim?.paymentsStatus as any;\n if (paymentsStatus?.approval === 'PAID') {\n return asStatusInfo('approved');\n }\n if (paymentsStatus?.rejection === 'PAID') {\n return asStatusInfo('rejected');\n }\n if (paymentsStatus?.evaluation === 'PAID' || paymentsStatus?.submission === 'PAID') {\n return asStatusInfo('pending');\n }\n\n return asStatusInfo('pending');\n}\n\nexport function isClaimEvaluated(claim: ClaimWithEvaluation): boolean {\n const status = getClaimStatusInfo(claim);\n return status.key === 'approved' || status.key === 'rejected' || status.key === 'invalidated' || status.key === 'disputed';\n}\n"],"mappings":";AAsBA,IAAM,cAAoE;AAAA,EACxE,SAAS,EAAE,OAAO,WAAW,OAAO,UAAU,YAAY,MAAM;AAAA,EAChE,UAAU,EAAE,OAAO,YAAY,OAAO,SAAS,YAAY,KAAK;AAAA,EAChE,UAAU,EAAE,OAAO,YAAY,OAAO,OAAO,YAAY,KAAK;AAAA,EAC9D,UAAU,EAAE,OAAO,YAAY,OAAO,UAAU,YAAY,MAAM;AAAA,EAClE,aAAa,EAAE,OAAO,eAAe,OAAO,QAAQ,YAAY,KAAK;AAAA,EACrE,SAAS,EAAE,OAAO,WAAW,OAAO,QAAQ,YAAY,MAAM;AAChE;AAEA,SAAS,aAAa,KAAsC;AAC1D,SAAO,EAAE,KAAK,GAAG,YAAY,GAAG,EAAE;AACpC;AAEA,SAAS,gBAAgB,OAAuC;AAC9D,QAAM,UAAU,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAChE,MAAI,CAAC,OAAO,SAAS,OAAO,EAAG,QAAO;AAEtC,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,kBAAkB,OAAuC;AAChE,QAAM,aAAa,OAAO,SAAS,EAAE,EAClC,KAAK,EACL,YAAY;AAEf,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,mBAAmB,OAA6C;AAG9E,QAAM,sBAAsB,gBAAgB,OAAO,qBAAqB,MAAM;AAC9E,MAAI,uBAAuB,wBAAwB,WAAW;AAC5D,WAAO,aAAa,mBAAmB;AAAA,EACzC;AAEA,MAAI,OAAO,oBAAoB;AAC7B,WAAO,aAAa,UAAU;AAAA,EAChC;AAEA,MAAI,qBAAqB;AACvB,WAAO,aAAa,mBAAmB;AAAA,EACzC;AAEA,QAAM,sBAAsB,gBAAgB,OAAO,MAAM;AACzD,MAAI,qBAAqB;AACvB,WAAO,aAAa,mBAAmB;AAAA,EACzC;AAEA,QAAM,wBAAwB,kBAAkB,OAAO,MAAM;AAC7D,MAAI,uBAAuB;AACzB,WAAO,aAAa,qBAAqB;AAAA,EAC3C;AAEA,QAAM,iBAAiB,OAAO;AAC9B,MAAI,gBAAgB,aAAa,QAAQ;AACvC,WAAO,aAAa,UAAU;AAAA,EAChC;AACA,MAAI,gBAAgB,cAAc,QAAQ;AACxC,WAAO,aAAa,UAAU;AAAA,EAChC;AACA,MAAI,gBAAgB,eAAe,UAAU,gBAAgB,eAAe,QAAQ;AAClF,WAAO,aAAa,SAAS;AAAA,EAC/B;AAEA,SAAO,aAAa,SAAS;AAC/B;AAEO,SAAS,iBAAiB,OAAqC;AACpE,QAAM,SAAS,mBAAmB,KAAK;AACvC,SAAO,OAAO,QAAQ,cAAc,OAAO,QAAQ,cAAc,OAAO,QAAQ,iBAAiB,OAAO,QAAQ;AAClH;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-NZ7AXA7B.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// src/mantine/blocks/action/actionTypes/governance/settingsProposal/types.ts
|
|
2
|
+
var DEFAULT_SETTINGS = {
|
|
3
|
+
votingPeriodHours: 48,
|
|
4
|
+
quorumPercent: 33,
|
|
5
|
+
thresholdPercent: 50,
|
|
6
|
+
allowRevoting: true
|
|
7
|
+
};
|
|
8
|
+
var DEFAULT_INPUTS = { coreAddress: "" };
|
|
9
|
+
function parseGovernanceSettingsProposalInputs(json) {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = typeof json === "string" ? JSON.parse(json) : json;
|
|
12
|
+
return { coreAddress: parsed?.coreAddress || "" };
|
|
13
|
+
} catch {
|
|
14
|
+
return { ...DEFAULT_INPUTS };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function serializeGovernanceSettingsProposalInputs(inputs) {
|
|
18
|
+
return JSON.stringify(inputs);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
DEFAULT_SETTINGS,
|
|
23
|
+
parseGovernanceSettingsProposalInputs,
|
|
24
|
+
serializeGovernanceSettingsProposalInputs
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=chunk-OCAYEGI2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/governance/settingsProposal/types.ts"],"sourcesContent":["/** Shared types for the governance settings-proposal action type UI. */\n\n/**\n * Template-mode config persisted on `block.props.inputs`.\n *\n * TODO(governance): like the member-proposal config, the only thing captured\n * today is the DAO core address (empty → resolve from the current entity at\n * run time). Future: prefill defaults from the group's current voting config,\n * lock individual fields, title/description templating.\n */\nexport interface GovernanceSettingsProposalInputs {\n /** DAO core contract address. Empty → derive from current entity in flow mode. */\n coreAddress: string;\n}\n\n/**\n * Runtime inputs the flow detail sends to the executor when the user signs.\n * Percentages are 0–100; the voting period is in hours.\n *\n * There is intentionally NO veto threshold here: the deployed\n * dao_proposal_single contract has no veto config, so the core action ignores\n * any `vetoThresholdPercent` and the UI must not offer one.\n */\nexport interface GovernanceSettingsProposalRuntimeInputs {\n coreAddress: string;\n votingPeriodHours: number;\n quorumPercent: number;\n thresholdPercent: number;\n allowRevoting: boolean;\n title?: string;\n description?: string;\n}\n\n/** Defaults mirror the GovernanceComposerStep reference (48h, 33.4%, 50%). */\nexport const DEFAULT_SETTINGS = {\n votingPeriodHours: 48,\n quorumPercent: 33,\n thresholdPercent: 50,\n allowRevoting: true,\n};\n\nconst DEFAULT_INPUTS: GovernanceSettingsProposalInputs = { coreAddress: '' };\n\nexport function parseGovernanceSettingsProposalInputs(json: string): GovernanceSettingsProposalInputs {\n try {\n const parsed = typeof json === 'string' ? JSON.parse(json) : json;\n return { coreAddress: parsed?.coreAddress || '' };\n } catch {\n return { ...DEFAULT_INPUTS };\n }\n}\n\nexport function serializeGovernanceSettingsProposalInputs(inputs: GovernanceSettingsProposalInputs): string {\n return JSON.stringify(inputs);\n}\n"],"mappings":";AAkCO,IAAM,mBAAmB;AAAA,EAC9B,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,eAAe;AACjB;AAEA,IAAM,iBAAmD,EAAE,aAAa,GAAG;AAEpE,SAAS,sCAAsC,MAAgD;AACpG,MAAI;AACF,UAAM,SAAS,OAAO,SAAS,WAAW,KAAK,MAAM,IAAI,IAAI;AAC7D,WAAO,EAAE,aAAa,QAAQ,eAAe,GAAG;AAAA,EAClD,QAAQ;AACN,WAAO,EAAE,GAAG,eAAe;AAAA,EAC7B;AACF;AAEO,SAAS,0CAA0C,QAAkD;AAC1G,SAAO,KAAK,UAAU,MAAM;AAC9B;","names":[]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// src/mantine/blocks/action/actionTypes/_shared/media/resolveClaimFileRef.ts
|
|
2
|
+
var IPFS_GATEWAY = "https://ipfs.gateway.ixo.world/ipfs/";
|
|
3
|
+
var CID_REGEX = /(baf[a-z0-9]{20,})/i;
|
|
4
|
+
function extractCid(source) {
|
|
5
|
+
const m = source.match(CID_REGEX);
|
|
6
|
+
return m ? m[1] : null;
|
|
7
|
+
}
|
|
8
|
+
function resolveClaimFileRef(raw) {
|
|
9
|
+
if (raw == null) return null;
|
|
10
|
+
if (typeof raw === "string") {
|
|
11
|
+
const trimmed = raw.trim();
|
|
12
|
+
if (!trimmed) return null;
|
|
13
|
+
if (/^https?:/i.test(trimmed)) return trimmed;
|
|
14
|
+
if (trimmed.startsWith("data:")) return trimmed;
|
|
15
|
+
if (/^ipfs:/i.test(trimmed)) {
|
|
16
|
+
const cid = extractCid(trimmed.replace(/^ipfs:\/*/i, ""));
|
|
17
|
+
return cid ? `${IPFS_GATEWAY}${cid}` : null;
|
|
18
|
+
}
|
|
19
|
+
if (trimmed.startsWith("{")) {
|
|
20
|
+
try {
|
|
21
|
+
return resolveClaimFileRef(JSON.parse(trimmed));
|
|
22
|
+
} catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (/^did:/i.test(trimmed)) {
|
|
27
|
+
const cid = extractCid(trimmed);
|
|
28
|
+
return cid ? `${IPFS_GATEWAY}${cid}` : null;
|
|
29
|
+
}
|
|
30
|
+
if (/^baf[a-z0-9]/i.test(trimmed) && trimmed.length < 200 && !trimmed.includes(" ")) {
|
|
31
|
+
const cid = extractCid(trimmed);
|
|
32
|
+
return cid ? `${IPFS_GATEWAY}${cid}` : null;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
if (typeof raw === "object") {
|
|
37
|
+
const obj = raw;
|
|
38
|
+
if (typeof obj.serviceEndpoint === "string" && /^https?:/i.test(obj.serviceEndpoint)) {
|
|
39
|
+
return obj.serviceEndpoint;
|
|
40
|
+
}
|
|
41
|
+
if (typeof obj.proof === "string") {
|
|
42
|
+
const cid = extractCid(obj.proof);
|
|
43
|
+
if (cid) return `${IPFS_GATEWAY}${cid}`;
|
|
44
|
+
}
|
|
45
|
+
if (typeof obj.id === "string") {
|
|
46
|
+
const hashIdx = obj.id.indexOf("#");
|
|
47
|
+
const tail = hashIdx >= 0 ? obj.id.slice(hashIdx + 1) : obj.id;
|
|
48
|
+
const cid = extractCid(tail);
|
|
49
|
+
if (cid) return `${IPFS_GATEWAY}${cid}`;
|
|
50
|
+
}
|
|
51
|
+
if (typeof obj.content === "string") {
|
|
52
|
+
return resolveClaimFileRef(obj.content);
|
|
53
|
+
}
|
|
54
|
+
if (typeof obj.url === "string" && /^https?:/i.test(obj.url)) {
|
|
55
|
+
return obj.url;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
function isFileLike(value) {
|
|
61
|
+
if (Array.isArray(value)) {
|
|
62
|
+
return value.length > 0 && value.every((v) => v && typeof v === "object" && typeof v.content === "string");
|
|
63
|
+
}
|
|
64
|
+
return !!value && typeof value === "object" && typeof value.content === "string";
|
|
65
|
+
}
|
|
66
|
+
function resolveOneFileEntry(entry) {
|
|
67
|
+
const resolved = resolveClaimFileRef(entry.content);
|
|
68
|
+
if (resolved && resolved !== entry.content) {
|
|
69
|
+
return { ...entry, content: resolved };
|
|
70
|
+
}
|
|
71
|
+
return entry;
|
|
72
|
+
}
|
|
73
|
+
function resolveFilesInCredentialSubject(subject) {
|
|
74
|
+
if (!subject || typeof subject !== "object") return subject;
|
|
75
|
+
const out = Array.isArray(subject) ? [...subject] : { ...subject };
|
|
76
|
+
for (const [key, value] of Object.entries(subject)) {
|
|
77
|
+
if (isFileLike(value)) {
|
|
78
|
+
out[key] = Array.isArray(value) ? value.map((v) => resolveOneFileEntry(v)) : resolveOneFileEntry(value);
|
|
79
|
+
} else if (value && typeof value === "object") {
|
|
80
|
+
out[key] = resolveFilesInCredentialSubject(value);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export {
|
|
87
|
+
resolveClaimFileRef,
|
|
88
|
+
resolveFilesInCredentialSubject
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=chunk-OMLI45ER.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/_shared/media/resolveClaimFileRef.ts"],"sourcesContent":["export const IPFS_GATEWAY = 'https://ipfs.gateway.ixo.world/ipfs/';\nconst CID_REGEX = /(baf[a-z0-9]{20,})/i;\n\nfunction extractCid(source: string): string | null {\n const m = source.match(CID_REGEX);\n return m ? m[1] : null;\n}\n\n/**\n * Resolves any form of claim/credential file reference to a fetchable HTTPS URL.\n * Handles:\n * - http(s) URLs (returned as-is)\n * - data: URLs (returned as-is)\n * - ipfs:<CID>\n * - bare CIDs (baf...)\n * - did:...#CID references\n * - JSON-stringified linked resources like {\"id\":\"{id}#<CID>\"}\n * - objects with serviceEndpoint / proof / id / content / url\n * Returns null if the reference cannot be resolved.\n */\nexport function resolveClaimFileRef(raw: unknown): string | null {\n if (raw == null) return null;\n\n if (typeof raw === 'string') {\n const trimmed = raw.trim();\n if (!trimmed) return null;\n\n if (/^https?:/i.test(trimmed)) return trimmed;\n if (trimmed.startsWith('data:')) return trimmed;\n\n if (/^ipfs:/i.test(trimmed)) {\n const cid = extractCid(trimmed.replace(/^ipfs:\\/*/i, ''));\n return cid ? `${IPFS_GATEWAY}${cid}` : null;\n }\n\n if (trimmed.startsWith('{')) {\n try {\n return resolveClaimFileRef(JSON.parse(trimmed));\n } catch {\n return null;\n }\n }\n\n if (/^did:/i.test(trimmed)) {\n const cid = extractCid(trimmed);\n return cid ? `${IPFS_GATEWAY}${cid}` : null;\n }\n\n if (/^baf[a-z0-9]/i.test(trimmed) && trimmed.length < 200 && !trimmed.includes(' ')) {\n const cid = extractCid(trimmed);\n return cid ? `${IPFS_GATEWAY}${cid}` : null;\n }\n\n return null;\n }\n\n if (typeof raw === 'object') {\n const obj = raw as Record<string, any>;\n\n if (typeof obj.serviceEndpoint === 'string' && /^https?:/i.test(obj.serviceEndpoint)) {\n return obj.serviceEndpoint;\n }\n\n if (typeof obj.proof === 'string') {\n const cid = extractCid(obj.proof);\n if (cid) return `${IPFS_GATEWAY}${cid}`;\n }\n\n if (typeof obj.id === 'string') {\n const hashIdx = obj.id.indexOf('#');\n const tail = hashIdx >= 0 ? obj.id.slice(hashIdx + 1) : obj.id;\n const cid = extractCid(tail);\n if (cid) return `${IPFS_GATEWAY}${cid}`;\n }\n\n if (typeof obj.content === 'string') {\n return resolveClaimFileRef(obj.content);\n }\n\n if (typeof obj.url === 'string' && /^https?:/i.test(obj.url)) {\n return obj.url;\n }\n }\n\n return null;\n}\n\n/**\n * Detects a SurveyJS-style file value: either an array of `{name,type,content}`\n * objects, or a single such object. Returns true if the value carries files\n * whose `content` we should try to resolve.\n */\nfunction isFileLike(value: unknown): boolean {\n if (Array.isArray(value)) {\n return value.length > 0 && value.every((v) => v && typeof v === 'object' && typeof (v as any).content === 'string');\n }\n return !!value && typeof value === 'object' && typeof (value as any).content === 'string';\n}\n\nfunction resolveOneFileEntry<T extends { content: string }>(entry: T): T {\n const resolved = resolveClaimFileRef(entry.content);\n if (resolved && resolved !== entry.content) {\n return { ...entry, content: resolved };\n }\n return entry;\n}\n\n/**\n * Walks a claim credentialSubject and rewrites every file-like value so the\n * `content` field becomes a fetchable URL. Leaves non-file values untouched.\n * Returns a new object — does not mutate the input.\n *\n * The walk recurses through plain containers, because a `paneldynamic` question\n * nests its answers one level down: `{ 'ixo:ServiceDelivery': [{ 'schema:startDate',\n * 'ixo:evidenceType_attendanceRegister': [file] }] }`. A top-level-only pass leaves\n * those files holding their raw `{\"serviceEndpoint\":…}` JSON, which SurveyJS then\n * renders as a broken `<img>` — no fetch is ever attempted.\n */\nexport function resolveFilesInCredentialSubject<T extends Record<string, any>>(subject: T): T {\n if (!subject || typeof subject !== 'object') return subject;\n const out: Record<string, any> = Array.isArray(subject) ? [...subject] : { ...subject };\n\n for (const [key, value] of Object.entries(subject)) {\n if (isFileLike(value)) {\n out[key] = Array.isArray(value) ? value.map((v) => resolveOneFileEntry(v)) : resolveOneFileEntry(value);\n } else if (value && typeof value === 'object') {\n out[key] = resolveFilesInCredentialSubject(value as Record<string, any>);\n }\n }\n\n return out as T;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// src/mantine/blocks/action/hooks/useActionExecution.ts
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
function useActionExecution(params) {
|
|
4
|
+
const { executeAction, runtime, updateRuntime, isDisabled, inputsReady, resolvedInputs, hasProof, logTag, failureMessage, actorDid } = params;
|
|
5
|
+
const isRunning = runtime.state === "running";
|
|
6
|
+
const isCompleted = runtime.state === "completed" && hasProof;
|
|
7
|
+
const isStale = runtime.state === "completed" && !hasProof;
|
|
8
|
+
const isFailed = runtime.state === "failed";
|
|
9
|
+
const needsVerification = runtime.state === "needs_verification";
|
|
10
|
+
const retainedOutput = runtime.output;
|
|
11
|
+
const errorMessage = runtime.error?.message || null;
|
|
12
|
+
const handleExecute = useCallback(async () => {
|
|
13
|
+
console.log(`[${logTag}] handleExecute called`, { isDisabled, state: runtime.state, inputsReady });
|
|
14
|
+
if (isDisabled || isRunning) {
|
|
15
|
+
console.log(`[${logTag}] handleExecute early-return`, { reason: isDisabled ? "isDisabled" : "already running" });
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (needsVerification) {
|
|
19
|
+
console.warn(`[${logTag}] refusing to execute a block that needs verification`);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!executeAction) {
|
|
23
|
+
updateRuntime({ state: "failed", error: { message: "Shared action executor is unavailable", at: Date.now() } });
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!inputsReady) {
|
|
27
|
+
console.warn(`[${logTag}] inputs not ready, refusing to execute`, resolvedInputs);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
console.log(`[${logTag}] starting execution`);
|
|
31
|
+
try {
|
|
32
|
+
const outcome = await executeAction({ runtimeInputs: resolvedInputs });
|
|
33
|
+
console.log(`[${logTag}] executor outcome`, { success: outcome.success, stage: outcome.stage, error: outcome.error, payload: outcome.output });
|
|
34
|
+
if (outcome.completionState === "needs_verification") {
|
|
35
|
+
console.warn(`[${logTag}] ran without provable proof \u2014 routed to needs_verification`, { payload: outcome.output });
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (!outcome.success) {
|
|
39
|
+
throw new Error(outcome.error || failureMessage || "Action execution failed");
|
|
40
|
+
}
|
|
41
|
+
console.log(`[${logTag}] success`, { payload: outcome.output });
|
|
42
|
+
} catch (err) {
|
|
43
|
+
const message = err instanceof Error ? err.message : failureMessage || "Action execution failed";
|
|
44
|
+
console.error(`[${logTag}] execution failed`, { message, err });
|
|
45
|
+
updateRuntime({ state: "failed", error: { message, at: Date.now() } });
|
|
46
|
+
}
|
|
47
|
+
}, [executeAction, isDisabled, isRunning, needsVerification, inputsReady, resolvedInputs, runtime.state, updateRuntime, logTag, failureMessage]);
|
|
48
|
+
const handleRetry = useCallback(() => {
|
|
49
|
+
console.log(`[${logTag}] handleRetry: clearing runtime to idle`);
|
|
50
|
+
updateRuntime({ state: "idle", error: void 0, output: {} });
|
|
51
|
+
}, [updateRuntime, logTag]);
|
|
52
|
+
const handleConfirmVerified = useCallback(() => {
|
|
53
|
+
console.log(`[${logTag}] handleConfirmVerified: human confirms the side effect happened`);
|
|
54
|
+
updateRuntime({
|
|
55
|
+
state: "completed",
|
|
56
|
+
manuallyVerified: true,
|
|
57
|
+
manuallyVerifiedByDid: actorDid,
|
|
58
|
+
manuallyVerifiedAt: Date.now(),
|
|
59
|
+
error: void 0
|
|
60
|
+
});
|
|
61
|
+
}, [updateRuntime, logTag, actorDid]);
|
|
62
|
+
const handleRejectVerification = handleRetry;
|
|
63
|
+
const handleManualRun = useCallback(() => {
|
|
64
|
+
handleRetry();
|
|
65
|
+
setTimeout(() => {
|
|
66
|
+
void handleExecute();
|
|
67
|
+
}, 0);
|
|
68
|
+
}, [handleRetry, handleExecute]);
|
|
69
|
+
return {
|
|
70
|
+
isRunning,
|
|
71
|
+
isCompleted,
|
|
72
|
+
isStale,
|
|
73
|
+
isFailed,
|
|
74
|
+
needsVerification,
|
|
75
|
+
retainedOutput,
|
|
76
|
+
errorMessage,
|
|
77
|
+
handleExecute,
|
|
78
|
+
handleRetry,
|
|
79
|
+
handleManualRun,
|
|
80
|
+
handleConfirmVerified,
|
|
81
|
+
handleRejectVerification
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export {
|
|
86
|
+
useActionExecution
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=chunk-P7OBLJAG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/hooks/useActionExecution.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport type { FlowNodeRuntimeState } from '@/core/types';\nimport type { ExecuteActionBlockResult } from '@/core/lib/flowEngine';\n\nexport interface ActionExecutionParams {\n /** Shared executor adapter from ActionTypeFlowProps. */\n executeAction?: (params?: { runtimeInputs?: Record<string, any>; pendingInvocationId?: string; pin?: string; handlers?: unknown }) => Promise<ExecuteActionBlockResult>;\n runtime: FlowNodeRuntimeState;\n updateRuntime: (updates: Partial<FlowNodeRuntimeState>) => void;\n isDisabled: boolean;\n inputsReady: boolean;\n resolvedInputs: Record<string, any>;\n /**\n * Proof-of-execution predicate over runtime.output for UI display and\n * stale-state detection (the kernel enforces the real guard — see\n * ActionDefinition.proof).\n */\n hasProof: boolean;\n /** Log prefix per the CLAUDE.md convention, e.g. 'iid.create'. */\n logTag: string;\n /** Failure message fallback shown when the executor throws without one. */\n failureMessage?: string;\n /** Actor DID stamped onto a manual verification, for the audit trail. */\n actorDid?: string;\n}\n\nexport interface ActionExecutionResult {\n isRunning: boolean;\n /** Completed AND carrying proof. */\n isCompleted: boolean;\n /** Completed WITHOUT proof — stale state from an earlier run; surface loudly. */\n isStale: boolean;\n isFailed: boolean;\n /**\n * A side-effecting action ran but couldn't prove it did (NodeState\n * 'needs_verification'). The effect MAY have happened — never auto-retry.\n * Show the retained payload and let a human confirm or reject. See H1.\n */\n needsVerification: boolean;\n /** Retained handler payload from the unproven run — the evidence to inspect. */\n retainedOutput: Record<string, any> | undefined;\n errorMessage: string | null;\n /** Guarded execute: no-ops while disabled/running, refuses without inputs. */\n handleExecute: () => Promise<void>;\n /** Clear runtime back to idle. */\n handleRetry: () => void;\n /** Reset then execute once the reset has propagated. */\n handleManualRun: () => void;\n /**\n * Human confirms the side effect really happened: moves the block to\n * `completed` with a manual-verification marker (audit-trailed). Use only\n * from the `needsVerification` UI.\n */\n handleConfirmVerified: () => void;\n /**\n * Human confirms the side effect did NOT happen: clears to idle so it is safe\n * to run again. Alias of `handleRetry`, named for the verification UI.\n */\n handleRejectVerification: () => void;\n}\n\n/**\n * The shared FlowDetail execution skeleton: all lifecycle state derived\n * from `runtime` on every render (never mirrored into React state — see\n * CLAUDE.md, \"Hard rule: never mirror runtime to local React state\"),\n * plus the guarded execute / retry / manual-run handlers.\n */\nexport function useActionExecution(params: ActionExecutionParams): ActionExecutionResult {\n const { executeAction, runtime, updateRuntime, isDisabled, inputsReady, resolvedInputs, hasProof, logTag, failureMessage, actorDid } = params;\n\n const isRunning = runtime.state === 'running';\n const isCompleted = runtime.state === 'completed' && hasProof;\n const isStale = runtime.state === 'completed' && !hasProof;\n const isFailed = runtime.state === 'failed';\n const needsVerification = runtime.state === 'needs_verification';\n const retainedOutput = runtime.output;\n const errorMessage = runtime.error?.message || null;\n\n const handleExecute = useCallback(async () => {\n console.log(`[${logTag}] handleExecute called`, { isDisabled, state: runtime.state, inputsReady });\n\n if (isDisabled || isRunning) {\n console.log(`[${logTag}] handleExecute early-return`, { reason: isDisabled ? 'isDisabled' : 'already running' });\n return;\n }\n\n // A block awaiting verification must never be re-run implicitly — the side\n // effect may already have happened. The human resolves it via\n // handleConfirmVerified / handleRejectVerification. See H1.\n if (needsVerification) {\n console.warn(`[${logTag}] refusing to execute a block that needs verification`);\n return;\n }\n\n if (!executeAction) {\n updateRuntime({ state: 'failed', error: { message: 'Shared action executor is unavailable', at: Date.now() } });\n return;\n }\n\n if (!inputsReady) {\n console.warn(`[${logTag}] inputs not ready, refusing to execute`, resolvedInputs);\n return;\n }\n\n console.log(`[${logTag}] starting execution`);\n\n try {\n const outcome = await executeAction({ runtimeInputs: resolvedInputs });\n\n console.log(`[${logTag}] executor outcome`, { success: outcome.success, stage: outcome.stage, error: outcome.error, payload: outcome.output });\n\n // The kernel already wrote `needs_verification` (a side-effecting action\n // that ran but couldn't prove it) and RETAINED the payload. Do NOT throw\n // into the catch below — that would clobber it back to `failed` and lose\n // the distinction that stops the dangerous auto-retry. See H1.\n if (outcome.completionState === 'needs_verification') {\n console.warn(`[${logTag}] ran without provable proof — routed to needs_verification`, { payload: outcome.output });\n return;\n }\n\n if (!outcome.success) {\n throw new Error(outcome.error || failureMessage || 'Action execution failed');\n }\n\n // Proof-of-execution is enforced centrally by executeActionBlock\n // (PROOF_MISSING) — a proofless success never reaches this point.\n console.log(`[${logTag}] success`, { payload: outcome.output });\n } catch (err) {\n const message = err instanceof Error ? err.message : failureMessage || 'Action execution failed';\n console.error(`[${logTag}] execution failed`, { message, err });\n updateRuntime({ state: 'failed', error: { message, at: Date.now() } });\n }\n }, [executeAction, isDisabled, isRunning, needsVerification, inputsReady, resolvedInputs, runtime.state, updateRuntime, logTag, failureMessage]);\n\n const handleRetry = useCallback(() => {\n console.log(`[${logTag}] handleRetry: clearing runtime to idle`);\n updateRuntime({ state: 'idle', error: undefined, output: {} });\n }, [updateRuntime, logTag]);\n\n const handleConfirmVerified = useCallback(() => {\n console.log(`[${logTag}] handleConfirmVerified: human confirms the side effect happened`);\n updateRuntime({\n state: 'completed',\n manuallyVerified: true,\n manuallyVerifiedByDid: actorDid,\n manuallyVerifiedAt: Date.now(),\n error: undefined,\n });\n }, [updateRuntime, logTag, actorDid]);\n\n // Rejecting = the side effect did NOT happen, so a clean re-run is safe.\n const handleRejectVerification = handleRetry;\n\n const handleManualRun = useCallback(() => {\n handleRetry();\n // Defer so the runtime reset propagates through the Y.Map observer\n // before the execute guard reads runtime.state.\n setTimeout(() => {\n void handleExecute();\n }, 0);\n }, [handleRetry, handleExecute]);\n\n return {\n isRunning,\n isCompleted,\n isStale,\n isFailed,\n needsVerification,\n retainedOutput,\n errorMessage,\n handleExecute,\n handleRetry,\n handleManualRun,\n handleConfirmVerified,\n handleRejectVerification,\n };\n}\n"],"mappings":"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","names":[]}
|