@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.
- package/dist/BidConfig-YLGSEIOS.js +154 -0
- package/dist/BidConfig-YLGSEIOS.js.map +1 -0
- package/dist/BidFlowDetail-U2SX5M7F.js +365 -0
- package/dist/BidFlowDetail-U2SX5M7F.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-I4OQSHAB.js +641 -0
- package/dist/ClaimFlowDetail-I4OQSHAB.js.map +1 -0
- package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js +149 -0
- package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js.map +1 -0
- package/dist/CollectionLifecycleFlowDetail-LQHKB227.js +647 -0
- package/dist/CollectionLifecycleFlowDetail-LQHKB227.js.map +1 -0
- package/dist/CollectionUsersConfig-RI2X3YY2.js +271 -0
- package/dist/CollectionUsersConfig-RI2X3YY2.js.map +1 -0
- package/dist/CollectionUsersFlowDetail-LHXVCCPQ.js +1276 -0
- package/dist/CollectionUsersFlowDetail-LHXVCCPQ.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-2EXGNBYC.js +564 -0
- package/dist/EvaluateBidFlowDetail-2EXGNBYC.js.map +1 -0
- package/dist/EvaluateClaimConfig-3D4F5LHU.js +297 -0
- package/dist/EvaluateClaimConfig-3D4F5LHU.js.map +1 -0
- package/dist/EvaluateClaimFlowDetail-QKHJVEDE.js +2237 -0
- package/dist/EvaluateClaimFlowDetail-QKHJVEDE.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-4TE6UCEB.js +83 -0
- package/dist/IdentityCreateFlowDetail-4TE6UCEB.js.map +1 -0
- package/dist/IidCreateConfig-RRV2DYXI.js +75 -0
- package/dist/IidCreateConfig-RRV2DYXI.js.map +1 -0
- package/dist/IidCreateFlowDetail-HPVZAHVY.js +57 -0
- package/dist/IidCreateFlowDetail-HPVZAHVY.js.map +1 -0
- package/dist/KycVerifyConfig-VCG65K5K.js +65 -0
- package/dist/KycVerifyConfig-VCG65K5K.js.map +1 -0
- package/dist/KycVerifyFlowDetail-FEU43HML.js +421 -0
- package/dist/KycVerifyFlowDetail-FEU43HML.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-MIBXUEKC.js +255 -0
- package/dist/OracleConfigureOracleFlowDetail-MIBXUEKC.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-HQU3UKEB.js +220 -0
- package/dist/OracleStoreSecretsAndConfigFlowDetail-HQU3UKEB.js.map +1 -0
- package/dist/OracleStoreSecretsConfig-PQMF7LFT.js +191 -0
- package/dist/OracleStoreSecretsConfig-PQMF7LFT.js.map +1 -0
- package/dist/OracleStoreSecretsFlowDetail-5RXWQ3KA.js +197 -0
- package/dist/OracleStoreSecretsFlowDetail-5RXWQ3KA.js.map +1 -0
- package/dist/ProposalCreateConfig-U5IHZNT7.js +161 -0
- package/dist/ProposalCreateConfig-U5IHZNT7.js.map +1 -0
- package/dist/ProposalCreateFlowDetail-2FCRCNYV.js +235 -0
- package/dist/ProposalCreateFlowDetail-2FCRCNYV.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-3TUYY4HK.js +20 -0
- package/dist/chunk-3TUYY4HK.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-5E6Z6JJN.js +4456 -0
- package/dist/chunk-5E6Z6JJN.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-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-F5GTFCYV.js +3333 -0
- package/dist/chunk-F5GTFCYV.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-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-JB6ASLUJ.js +315 -0
- package/dist/chunk-JB6ASLUJ.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-MZIBZ5FY.js +554 -0
- package/dist/chunk-MZIBZ5FY.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-XYXDY72K.js +27508 -0
- package/dist/chunk-XYXDY72K.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/hooks/hookedActions/registry.ts","../src/mantine/blocks/hooks/hookedActions/useHookedActions.ts","../src/mantine/context/BlocknoteContext.tsx","../src/mantine/blocks/hooks/hookedActions/utils.ts","../src/mantine/blocks/hooks/hookedActions/actionTypes/sendEmail.ts","../src/mantine/blocks/hooks/hookedActions/actionTypes/addLinkedEntity.ts","../src/mantine/blocks/hooks/hookedActions/actionTypes/sendMatrixDM.ts","../src/mantine/blocks/hooks/hookedActions/actionTypes/index.ts","../src/mantine/blocks/governanceGroup/actions.ts","../src/mantine/blocks/hooks/hookedActions/initialize.ts"],"sourcesContent":["import { HookedActionType, BlockActionDefinition } from './types';\n\n/**\n * Registry of all available hooked action types\n */\nconst hookedActionTypesRegistry: Map<string, HookedActionType> = new Map();\n\n/**\n * Registry of block action definitions (what actions blocks expose and their payloads)\n */\nconst blockActionsRegistry: Map<string, BlockActionDefinition[]> = new Map();\n\n/**\n * Register a hooked action type\n */\nexport function registerHookedActionType(actionType: HookedActionType): void {\n hookedActionTypesRegistry.set(actionType.type, actionType);\n}\n\n/**\n * Get a hooked action type by its type ID\n */\nexport function getHookedActionType(type: string): HookedActionType | undefined {\n return hookedActionTypesRegistry.get(type);\n}\n\n/**\n * Get all registered hooked action types\n */\nexport function getAllHookedActionTypes(): HookedActionType[] {\n return Array.from(hookedActionTypesRegistry.values());\n}\n\n/**\n * Register block action definitions for a block type\n */\nexport function registerBlockActions(blockType: string, actions: BlockActionDefinition[]): void {\n blockActionsRegistry.set(blockType, actions);\n}\n\n/**\n * Get action definitions for a block type\n */\nexport function getBlockActions(blockType: string): BlockActionDefinition[] {\n return blockActionsRegistry.get(blockType) || [];\n}\n\n/**\n * Get a specific action definition for a block type\n */\nexport function getBlockAction(blockType: string, actionId: string): BlockActionDefinition | undefined {\n const actions = blockActionsRegistry.get(blockType);\n return actions?.find((a) => a.actionId === actionId);\n}\n","import { useCallback, useRef, useEffect } from 'react';\nimport { useBlocknoteHandlers, BlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport { getHookedActionType } from './registry';\nimport { parseHookedActionsConfig } from './utils';\nimport type { HookedActionsExecutionResult } from './types';\n\ninterface UseHookedActionsProps {\n block: any;\n editor: any;\n}\n\n/**\n * Hook for executing hooked actions on a block\n *\n * @example\n * ```tsx\n * const { executeHookedActions } = useHookedActions({ block, editor });\n *\n * // After main action completes\n * const result = await handleCreate();\n * executeHookedActions('create', {\n * coreAddress: result.coreAddress,\n * groupAddress: result.groupAddress,\n * transactionHash: result.transactionHash,\n * });\n * ```\n */\nexport function useHookedActions({ block, editor }: UseHookedActionsProps) {\n const handlers = useBlocknoteHandlers();\n\n // Use refs to avoid recreating callbacks when handlers/editor change\n const handlersRef = useRef<BlocknoteHandlers>(handlers);\n const editorRef = useRef(editor);\n const blockRef = useRef(block);\n\n useEffect(() => {\n handlersRef.current = handlers;\n }, [handlers]);\n\n useEffect(() => {\n editorRef.current = editor;\n }, [editor]);\n\n useEffect(() => {\n blockRef.current = block;\n }, [block]);\n\n /**\n * Execute all hooked actions for a given action ID\n * This is fire-and-forget - it doesn't await or throw errors\n */\n const executeHookedActions = useCallback((actionId: string, payload: Record<string, any>): void => {\n const currentBlock = blockRef.current;\n // Parse hooked actions config from block props\n const hookedActionsConfig = parseHookedActionsConfig(currentBlock.props?.hookedActions || '');\n\n const actionsForEvent = hookedActionsConfig[actionId] || [];\n\n if (actionsForEvent.length === 0) {\n return;\n }\n\n // Execute each action (fire and forget)\n actionsForEvent.forEach((actionInstance) => {\n if (!actionInstance.enabled) {\n return;\n }\n\n const actionType = getHookedActionType(actionInstance.type);\n if (!actionType) {\n console.warn(`Unknown hooked action type: ${actionInstance.type}`);\n return;\n }\n\n // Execute without awaiting - fire and forget\n actionType\n .execute(actionInstance, payload, {\n handlers: handlersRef.current,\n editor: editorRef.current,\n sourceBlock: currentBlock,\n })\n .catch((error) => {\n console.error(`Hooked action ${actionInstance.type} failed:`, error);\n });\n });\n }, []);\n\n /**\n * Execute hooked actions and return results (for testing/debugging)\n * Unlike executeHookedActions, this awaits all actions\n */\n const executeHookedActionsWithResults = useCallback(async (actionId: string, payload: Record<string, any>): Promise<HookedActionsExecutionResult> => {\n const currentBlock = blockRef.current;\n const hookedActionsConfig = parseHookedActionsConfig(currentBlock.props?.hookedActions || '');\n\n const actionsForEvent = hookedActionsConfig[actionId] || [];\n const errors: string[] = [];\n let executed = 0;\n\n for (const actionInstance of actionsForEvent) {\n if (!actionInstance.enabled) {\n continue;\n }\n\n const actionType = getHookedActionType(actionInstance.type);\n if (!actionType) {\n errors.push(`Unknown hooked action type: ${actionInstance.type}`);\n continue;\n }\n\n try {\n await actionType.execute(actionInstance, payload, {\n handlers: handlersRef.current,\n editor: editorRef.current,\n sourceBlock: currentBlock,\n });\n executed++;\n } catch (error) {\n errors.push(`${actionInstance.type}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n return { executed, errors };\n }, []);\n\n return {\n executeHookedActions,\n executeHookedActionsWithResults,\n };\n}\n","import type {\n CredentialIssuanceService,\n FundingVerificationService,\n OutcomeCertificateService,\n SourcePreviewResult,\n TopicExecutionContext,\n TopicService,\n YoIdLinkService,\n YomaOpportunityService,\n} from '@/core/lib/actionRegistry/types';\nimport type { TopicActionBridge } from '@/core/lib/topicActions';\nimport { IResourceSet } from '@/core/lib/categorizeResources';\nimport { IconComponent } from '@/core/lib/claims';\nimport { createUcanService, type UcanService } from '@/core/services/ucanService';\nimport { MatrixClient } from 'matrix-js-sdk';\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type { IxoEditorType } from '../../core/types';\nimport { initializeHookedActions } from '../blocks/hooks/hookedActions';\nimport { SelectionActionSection } from '../blocks/list/types';\nimport { ProposalAction, SharedProposalData } from './types';\n\nexport type Addr = string;\nexport type Uint128 = string;\nexport type Timestamp = string;\n\nexport interface Coin {\n denom: string;\n amount: string;\n}\n\n/**\n * Cosmos SDK broadcast result. Returned by handlers that submit on-chain\n * transactions (e.g. `evaluateClaim`). `code === 0` means success — non-zero\n * codes are failures, but in practice handlers throw before returning so the\n * editor only sees successful broadcasts here.\n */\nexport interface BroadcastTxResult {\n code: number;\n transactionHash: string;\n rawLog?: string;\n height?: number;\n txIndex?: number;\n gasWanted?: bigint;\n gasUsed?: bigint;\n}\n\nexport type ITrxMsg = { typeUrl: string; value: unknown };\n\nexport type AddLinkedEntityMessageParams = {\n entityDid?: string;\n linkedEntity: {\n id: string;\n type: string;\n relationship: string;\n service: string;\n };\n signer?: string;\n};\n\nexport type Expiration = { at_height: number } | { at_time: Timestamp } | { never: {} };\n\nexport type Status = 'open' | 'rejected' | 'passed' | 'executed' | 'closed' | 'execution_failed' | 'veto_timelock';\n\nexport interface Threshold {\n absolute_count?: { weight: Uint128 };\n absolute_percentage?: { percentage: string };\n threshold_quorum?: { threshold: string; quorum: string };\n}\nexport interface Votes {\n yes: Uint128;\n no: Uint128;\n abstain: Uint128;\n}\nexport interface CosmosMsgForEmpty {\n [key: string]: any;\n}\nexport interface SingleChoiceProposal {\n allow_revoting: boolean;\n description: string;\n expiration: Expiration;\n min_voting_period?: Expiration | null;\n msgs: CosmosMsgForEmpty[];\n proposer: Addr;\n start_height: number;\n status: Status;\n threshold: Threshold;\n title: string;\n total_power: Uint128;\n votes: Votes;\n}\nexport interface ProposalResponse {\n id: number;\n proposal: SingleChoiceProposal;\n}\n// dao_proposal_single only understands these three vote options — there is no\n// on-chain veto vote for single-choice proposals.\nexport type Vote = 'yes' | 'no' | 'abstain';\nexport interface VoteInfo {\n power: Uint128;\n rationale?: string | null;\n vote: Vote;\n voter: Addr;\n}\nexport interface VoteResponse {\n vote?: VoteInfo | null;\n}\nexport interface User {\n /** Bare blockchain address (bech32) — e.g. ixo1abc… */\n address: string;\n /** Full IXO DID (e.g. did:ixo:ixo1abc…) — required for UCAN signing.\n * Optional for backward-compat; callers that need a DID should fall back\n * to `did:ixo:${address}` when this field is absent. */\n did?: string;\n}\nexport type AwarenessDocActor = {\n name: string;\n did: string;\n src: string | null;\n role?: string;\n votingPower?: string;\n};\n\nexport type IUserMatrixProfile = {\n walletAddress: string;\n displayname: string;\n avatarUrl: string | null;\n did: string;\n verified?: boolean;\n};\n\n// Entity and list data types\nexport interface LinkedResource {\n id: string;\n type: string;\n proof: string;\n right: string;\n encrypted: string;\n mediaType: string;\n description: string;\n serviceEndpoint: string;\n}\n\nexport interface FormattedResource {\n format: keyof IResourceSet | undefined;\n id: string;\n link: string;\n type: string;\n description: string;\n access?: boolean;\n}\n\nexport interface Service {\n id: string;\n type: string;\n serviceEndpoint: string;\n}\nexport interface GQLLinkedResource {\n id: string;\n type: string;\n description: string;\n mediaType: string;\n serviceEndpoint: string;\n proof: string;\n encrypted: string;\n right: string;\n}\nexport interface EntityNode {\n id: string;\n type: string;\n startDate?: string;\n endDate?: string;\n status: number;\n relayerNode: string;\n credentials?: string[];\n entityVerified: boolean;\n metadata: any;\n accounts: any;\n externalId?: string;\n owner?: string;\n context: any;\n controller: string[];\n verificationMethod: any;\n service: Service[];\n authentication: string[];\n assertionMethod: string[];\n keyAgreement: string[];\n capabilityInvocation: string[];\n capabilityDelegation: string[];\n linkedResource: LinkedResource[];\n linkedClaim: any;\n accordedRight: any;\n linkedEntity: any;\n alsoKnownAs: string;\n settings: any;\n profile?: {\n name?: string;\n [key: string]: any;\n };\n iidById: {\n id: string;\n linkedResource: GQLLinkedResource[];\n };\n}\nexport interface EntityResponse {\n id: string;\n context: string;\n relayerNode: string;\n controller: string;\n type: string;\n startDate: string;\n endDate: string;\n metadata: string;\n linkedResource: LinkedResource[];\n settings: Record<string, LinkedResource>;\n service: Service[];\n externalId: string;\n /**\n * Linked entities (e.g. the DAO DAO governance group a pod is governed by).\n * A governance group is `{ type: 'group', relationship: 'governs' }` with the\n * core address encoded in the id as `{entityDid}#{coreAddress}`. Consumed by\n * `useGovernanceCoreAddress` to auto-detect a `qi/governance.*` action's\n * target when no core address is pinned in config. The host's `getEntity`\n * handler must include this in its GraphQL selection for auto-detection to\n * work.\n */\n linkedEntity?: Array<{\n id: string;\n type: string;\n relationship: string;\n service: string;\n }>;\n}\nexport interface Asset {\n did: string;\n alsoKnownAs: string;\n name: string;\n icon: string;\n issuer: string;\n owned: boolean;\n price: number;\n available: boolean;\n currency: string;\n description?: string;\n}\n// Converted example object shapes into proper interfaces\nexport interface POD {\n did: string;\n name: string;\n icon: string;\n members: number;\n isMember: boolean;\n totalProposals: number;\n startDate: string;\n endDate: string;\n description?: string;\n}\nexport interface Request {\n did: string;\n name: string;\n icon: string;\n budget: number;\n isMember: boolean;\n currency: string;\n brand: string;\n totalApplications: number;\n description?: string;\n}\nexport interface Project {\n did: string;\n name: string;\n icon: string;\n description?: string;\n}\nexport interface Dao {\n did: string;\n name: string;\n icon: string;\n description?: string;\n type?: 'dao' | 'pod' | 'group';\n isOwner?: boolean;\n isController?: boolean;\n isMember?: boolean;\n}\n\nexport interface Balance {\n denom: string;\n tokenName: string;\n chainCount: number;\n tokenImage: string;\n /** Balance in DISPLAY units (IXO, not uixo). */\n amount: number;\n usdAmount: number;\n isCoin: boolean;\n isShare: boolean;\n isCredit: boolean;\n /**\n * Decimal places between `denom` and the display unit — uixo → 6, a\n * 0-decimal credit → 0. Optional because older hosts do not send it; a\n * caller that needs to convert a display amount into base units must treat\n * an absent exponent as \"unknown\" and collect base units instead of\n * assuming 6, which would send a token 1,000,000× off.\n */\n exponent?: number;\n /** Raw on-chain balance in base units, unrounded. */\n baseAmount?: string;\n}\n\n/**\n * A wallet other than the signed-in user's that they can spend from, because\n * it granted them a bank-send authorization (a plain cosmos authz grant, or\n * the entity-account grant an IXO domain issues). Spending from one is a\n * `MsgExec` with the user as grantee — no proposal, no second signer.\n */\nexport interface SpendGranter {\n /** The granter — the wallet the tokens would actually leave. */\n address: string;\n /** Human label when the host can resolve one (entity name, DAO name). */\n label?: string;\n /** Denoms the grant caps, with the remaining allowance in base units. Empty means uncapped. */\n spendLimit?: { denom: string; amount: string }[];\n /** ISO timestamp the grant lapses, when it has one. */\n expiration?: string;\n}\nexport interface Oracle {\n did: string;\n name: string;\n icon: string;\n isActive: boolean;\n isInvited: boolean;\n minPoints: number;\n maxPoints: number;\n currency: string;\n brand: string;\n flowsAmount: number;\n description?: string;\n}\nexport interface Proposal {\n did: string;\n name: string;\n icon: string;\n description: string;\n isVotedOn: boolean;\n vote: string | null;\n status: string;\n}\nexport interface Member {\n did: string;\n username: string;\n address: string;\n icon: string;\n percentage: string;\n role: string;\n description?: string;\n}\nexport interface Validator {\n did: string;\n name: string;\n description: string;\n icon: string;\n amount: number;\n currency: string;\n commission: number;\n isStaked: boolean;\n isBonding: boolean;\n isActive: boolean;\n}\nexport interface Investment {\n did: string;\n name: string;\n icon: string;\n brand: string;\n isSubscribed: boolean;\n isOpen: boolean;\n currency: string;\n currentAmount: number;\n maxAmount: number;\n status: string;\n price: number;\n description?: string;\n}\nexport interface Collection {\n did: string;\n name: string;\n brand: string;\n icon: string;\n price: number;\n currency: string;\n totalAssets: number;\n description?: string;\n}\nexport interface TransactionByHash {\n code: number;\n fee: {\n payer: string;\n amount: Array<{ denom: string; amount: string }>;\n granter: string;\n gasLimit: { low: number; high: number; unsigned: boolean };\n };\n hash: string;\n height: number;\n memo: string;\n time: string;\n}\n\nexport interface Transaction {\n id: number;\n transactionHash: string;\n typeUrl: string;\n memo: string;\n time: string;\n from: string;\n to: string | null;\n denoms: string[];\n tokenNames: string[];\n value: Record<string, any>;\n transactionByTransactionHash?: TransactionByHash;\n description?: string;\n}\n\nexport interface DeedSubscription {\n did: string;\n subscriberAddress: string;\n subscriberDid?: string;\n subscriberName?: string;\n subscriberImage?: string;\n subscriptionDate: string;\n status: 'active' | 'inactive' | 'pending';\n metadata?: Record<string, any>;\n actionSections?: SelectionActionSection[];\n}\n\nexport type IAssetsListItem = {\n symbol: string;\n description: string;\n display: string;\n entityId: string;\n assetType: string;\n coinMinimalDenom?: string;\n base: string;\n denomUnits: {\n denom: string;\n exponent: number;\n aliases: string[];\n }[];\n logoURIs: {\n png: string;\n svg: string;\n zlottie: string;\n };\n isStakeCurrency: string;\n isFeeCurrency: string;\n isBondToken: string;\n coingeckoId?: string;\n contractAddress?: string;\n};\n\nexport type IAssetsListRes = {\n chainId: string;\n assets: IAssetsListItem[];\n}[];\n\nexport interface Bid {\n id: string;\n did: string;\n collection: string;\n type: 'bid';\n address: string;\n data: string;\n role: string;\n created: string;\n}\n\nexport interface SubmitBidParams {\n collectionId: string;\n role: EAAgentRoles;\n surveyAnswers: any;\n entityDid?: string;\n}\n\nexport interface QueryBidsParams {\n collectionId: string;\n entityDid?: string;\n pagination?: {\n nextPageToken?: string;\n };\n}\n\nexport interface QueryBidsByDidParams {\n collectionId: string;\n did: string;\n entityDid?: string;\n}\n\nexport interface ApproveBidParams {\n bidId: string;\n collectionId: string;\n did: string;\n entityDid?: string;\n}\n\nexport interface RejectBidParams {\n bidId: string;\n collectionId: string;\n did: string;\n reason: string;\n entityDid?: string;\n}\n\nexport interface BidResponse {\n success: boolean;\n bidId: string;\n}\n\nexport interface QueryBidsResponse {\n data: Bid[];\n nextPageToken?: string;\n}\n\nexport type CollectionRole = 'owner' | 'service_agent' | 'evaluation_agent' | null;\n\nexport enum EAAgentRoles {\n owners = 'PO',\n evaluators = 'EA',\n serviceProviders = 'SA',\n investors = 'IA',\n}\n\nexport enum AgentRole {\n Owner = 'PO', // Collection Controller\n Evaluator = 'EA', // Evaluator\n ServiceProvider = 'SA', // Contributor\n Investor = 'IA', // Investor\n}\n\nexport type CheckUserRoleParams = {\n /** Address to check role for */\n userAddress: string;\n /** Admin account address of the entity */\n adminAddress: string;\n /** Deed DID */\n deedDid: string;\n /** Claim collection IDs to check roles for */\n collectionIds: string[];\n};\n\nexport type ClaimCollectionRole = {\n collectionId: string;\n role: AgentRole;\n};\n\nexport type ClaimCollection = {\n id: string;\n name: string;\n description: string;\n entity: string;\n protocol: EntityNode | null;\n admin: string;\n};\n\nexport type ClaimCollectionResponse = {\n adminAddress: string;\n collections: ClaimCollection[];\n};\n\n/**\n * A verifiableClaim protocol attached to an entity, derived by hydrating the\n * entity's `linkedClaim[]` (each resolves to `entityClaims[].template`). Used by\n * the claim-collection create config so the protocol the user picks is always\n * one actually linked to the chosen entity, not a free-text DID that can drift.\n *\n * `protocolId` is the normalized `template.id` (with any `{id}` placeholder\n * replaced by the entity DID) — the value stored as the collection's `protocol`.\n */\nexport type EntityClaimProtocol = {\n /** Normalized `template.id` — the value persisted as the collection protocol. */\n protocolId: string;\n /** `template.title` — the dropdown label. */\n title: string;\n /** `template.type`, when present. */\n type?: string;\n /** `template.description`, when present. */\n description?: string;\n /** Whether this template is the entity's headline metric. */\n isHeadlineMetric?: boolean;\n /** `false` when the linkedClaim hydrated but carried no template (greyed-out). */\n hasValidClaim: boolean;\n};\n\nexport type EntityClaimProtocolsResponse = {\n protocols: EntityClaimProtocol[];\n};\n\nexport type ClaimStatus = {\n status: string;\n color?: string;\n icon: IconComponent;\n};\n\nexport type Claim = {\n claimId: string;\n collectionId: string;\n agentDid: string;\n agentAddress: string;\n submissionDate: string;\n paymentsStatus: {\n approval: string;\n rejection: string;\n evaluation: string;\n submission: string;\n };\n schemaType: string | null;\n approved?: boolean;\n pending?: boolean;\n rejected?: boolean;\n disputed?: boolean;\n};\n\nexport interface GetClaimsPerCollectionIdParams {\n collectionId: string;\n}\n\nexport interface GetClaimsPerUserAddressParams {\n collectionId: string;\n userAddress: string;\n}\n\n// Domain Card types\nexport interface FAQItem {\n question: string;\n answer: string;\n}\n\nexport interface ContactInfo {\n email: string;\n location: string;\n socialLinks: string[];\n website: string;\n}\n\nexport interface Relationships {\n funders?: string[];\n memberOf?: string[];\n partners?: string[];\n}\n\nexport interface LogoUrl {\n alt: string;\n url: string;\n}\n\nexport interface AdditionalProperties {\n content_hashes?: Record<string, string>;\n content_summaries?: Record<string, string>;\n fetch_errors?: Array<{ error: string; url: string }>;\n last_fetch_date?: string;\n}\n\nexport interface Coordinates {\n type: string;\n coordinates: [number, number];\n}\n\nexport interface DomainCard {\n additional_properties?: AdditionalProperties;\n address?: string;\n alternate_names?: string[];\n area_served?: string;\n categories?: string[];\n contact?: ContactInfo;\n coordinates?: Coordinates;\n credential_type?: string[];\n description?: string;\n entity_type?: string[];\n faq?: FAQItem[];\n id: string;\n image_urls?: Array<Record<string, any>>;\n indexed_at?: string;\n issuer?: string;\n keywords?: string[];\n knows_about?: string[];\n location?: string;\n logo_url?: LogoUrl;\n name: string;\n overview?: string;\n relationships?: Relationships;\n same_as?: string[];\n schema_id?: string;\n summary?: string;\n updated_at?: string;\n url?: string;\n valid_from?: string;\n}\n\n// Extended detail interfaces with actionSections for selection panel\nexport interface AssetDetails extends Asset {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface CollectionDetails extends Collection {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface TransactionDetails extends Transaction {\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface InvestmentDetails extends Investment {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface OracleDetails extends Oracle {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface PODDetails extends POD {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface ProposalDetails extends Proposal {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface RequestDetails extends Request {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface MemberDetails extends Member {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface ValidatorDetails extends Validator {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface LinkedResourceDetails extends LinkedResource {\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface ProjectDetails extends Project {\n type: string;\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface DaoDetails extends Dao {\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface BalanceDetails extends Balance {\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface DeedSubscriptionDetails extends DeedSubscription {\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface ClaimDetails extends Claim {\n image: string;\n actionSections: SelectionActionSection[];\n}\n\nexport interface DAOGroup {\n id: string;\n name: string;\n coreAddress: string;\n /** Name of the domain this group governs, when the host can resolve it. */\n domainName?: string;\n}\n\n/**\n * Restricts getDAOGroups to PODs that can actually execute the block's\n * action: groups holding the collection admin's submit/evaluate claim\n * authorization. Without the filter every membership is returned (bids —\n * applying is how a POD obtains the authorization in the first place).\n */\nexport interface DAOGroupAuthzFilter {\n requiresAuthz: 'submitClaim' | 'evaluateClaim';\n collectionId: string;\n adminAddress?: string;\n}\n\nexport interface BlockRequirements {\n proposal?: {\n coreAddress: string;\n };\n}\nexport interface UnlMapConfig {\n apiKey: string;\n vpmId: string;\n}\n\n// === UDID (Universal Decentralized Identifier) Types ===\n\n/**\n * UDID outcome values matching EvaluationStatus enum\n * PENDING = 0, APPROVED = 1, REJECTED = 2, DISPUTED = 3, INVALIDATED = 4, UNRECOGNIZED = -1\n */\nexport type UdidOutcome = 0 | 1 | 2 | 3 | 4 | -1;\n\n/**\n * Granular step result item for UDID\n */\nexport interface UdidResultItem {\n /** Unique identifier for this result item */\n id: string;\n /** Type of check/step */\n kind: 'compute' | 'fetch' | 'check' | 'validate';\n /** Whether this step passed */\n success: boolean;\n /** Score or value (optional) */\n score?: number;\n /** Output data from this step */\n outputs?: Record<string, any>;\n /** Human-readable message */\n message?: string;\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Signed UDID structure\n */\nexport interface SignedUdid {\n /** Unique identifier for this UDID */\n id: string;\n /** The unsigned UDID payload */\n payload: {\n /** Subject of the evaluation (claim CID) */\n sub: string;\n /** Issuer DID (evaluator) */\n iss: string;\n /** Audience/context (deed DID) */\n aud: string;\n /** Issued at timestamp */\n iat: number;\n /** Expiration timestamp (optional) */\n exp?: number;\n /** Action/capability context */\n act: {\n capabilityCid: string;\n capabilitySchema: string;\n rubricAuthority: string;\n rubricId: string;\n environment: string;\n evaluatorVersion?: string;\n };\n /** Result data */\n res: {\n outcome: number;\n tag: string;\n patch?: Record<string, any>;\n traceCid?: string;\n traceHash?: string;\n items?: UdidResultItem[];\n resultSchema?: string;\n };\n /** Metadata */\n meta: {\n collectionId: string;\n timestamp: string;\n };\n };\n /** Signature of the payload */\n signature: string;\n /** Verification method used for signing */\n verificationMethod: string;\n}\n\n/**\n * Parameters for creating a UDID\n */\nexport interface CreateUdidParams {\n /** CID of the claim being evaluated */\n claimCid: string;\n /** DID of the Deed/Context where this result applies */\n deedDid: string;\n /** Collection ID for the claim */\n collectionId: string;\n\n // Context (act)\n /** CID of the UCAN/capability that authorized this evaluation */\n capabilityCid: string;\n /** Schema of the capability (default: \"ixo-protocol-v1\") */\n capabilitySchema?: string;\n /** DID of the rubric authority (usually the Deed DID) */\n rubricAuthority: string;\n /** Version/ID of the rubric used */\n rubricId: string;\n /** Environment (default: \"production\") */\n environment?: 'production' | 'simulation' | 'testnet';\n /** Version of the evaluator (optional) */\n evaluatorVersion?: string;\n\n // Result (res)\n /** Outcome of the evaluation matching EvaluationStatus enum (0=PENDING, 1=APPROVED, 2=REJECTED, 3=DISPUTED, 4=INVALIDATED, -1=UNRECOGNIZED) */\n outcome: UdidOutcome | number;\n /** Human-readable tag for the outcome */\n tag: string;\n /** State patch to apply to Digital Twin (optional) */\n patch?: Record<string, any>;\n /** CID of the trace/reasoning logs (optional) */\n traceCid?: string;\n /** Hash of the trace for integrity (optional) */\n traceHash?: string;\n /** Granular step results (optional) */\n items?: UdidResultItem[];\n /** Schema for result validation (optional) */\n resultSchema?: string;\n\n // Signing\n /** Type of issuer: entity or user */\n issuerType: 'entity' | 'user';\n /** Entity room ID (required if issuerType is \"entity\") */\n entityRoomId?: string;\n /** PIN for decrypting signing key */\n pin: string;\n /** Expiration time in seconds from now (optional) */\n expiresInSeconds?: number;\n}\n\n/**\n * Response from creating a UDID\n */\nexport interface CreateUdidResponse {\n /** Whether the UDID was created successfully */\n success: boolean;\n /** The signed UDID */\n udid: SignedUdid;\n /** CID of the stored UDID in public storage (IPFS/Matrix) */\n cid: string;\n /** URL to fetch the UDID from public storage */\n url: string;\n /** Transaction hash if submitted on-chain */\n transactionHash?: string;\n}\nexport interface VoteParams {\n proposalId: number;\n rationale?: string;\n vote: Vote;\n proposalContractAddress: string;\n}\nexport interface CreateProposalParams {\n preProposalContractAddress: string;\n title: string;\n description: string;\n actions?: ProposalAction[];\n coreAddress?: string;\n groupContractAddress?: string;\n}\n\n// Bird notification types\nexport type NotificationChannel = 'email' | 'sms' | 'whatsapp' | 'rcs';\n\nexport interface EmailNotificationParams {\n channel: 'email';\n to: string[];\n cc?: string[];\n bcc?: string[];\n subject: string;\n body: string;\n bodyType?: 'text' | 'html';\n from?: string;\n replyTo?: string;\n}\n\nexport interface SmsNotificationParams {\n channel: 'sms';\n to: string[];\n body: string;\n}\n\nexport interface WhatsAppNotificationParams {\n channel: 'whatsapp';\n to: string[];\n body: string;\n templateId?: string;\n templateVariables?: Record<string, string>;\n}\n\nexport type NotificationParams = EmailNotificationParams | SmsNotificationParams | WhatsAppNotificationParams;\n\nexport interface NotificationResponse {\n messageId: string;\n status: 'accepted' | 'rejected';\n timestamp: string;\n}\n\nexport type ListProtocolDeedsWithTemplatesParams = {\n entityDid?: string;\n domainFlowsSubspaceId?: string;\n includeEmpty?: boolean;\n};\n\nexport type ProtocolTemplateSummary = {\n sourceRoomId: string;\n label: string;\n path?: string;\n alreadyImported?: boolean;\n};\n\nexport type ProtocolDeedWithTemplates = {\n protocolDid: string;\n name: string;\n description?: string;\n type?: string;\n owner?: string;\n templates: ProtocolTemplateSummary[];\n importedCount?: number;\n};\n\nexport type ImportProtocolTemplatesToSpaceParams = {\n protocolDid: string;\n entityDid: string;\n targetFlowsSubspaceId: string;\n templates: {\n sourceRoomId: string;\n sourceLabel?: string;\n }[];\n};\n\nexport type ImportProtocolTemplateResult = {\n sourceRoomId: string;\n newRoomId?: string;\n status: 'success' | 'error';\n error?: string;\n};\n\nexport type MatrixPrivacySettings = {\n encrypted: boolean;\n join_rule: 'invite' | 'public' | 'knock' | 'private';\n history_visibility: 'invited' | 'joined' | 'shared' | 'world_readable';\n};\n\nexport type MatrixRoom = {\n roomId: string;\n roomAlias: string;\n roomPrivacySettings: MatrixPrivacySettings;\n};\n\nexport type MatrixSpace = {\n space_id: string;\n space_alias: string;\n privacy: MatrixPrivacySettings;\n rooms: MatrixRoom[];\n};\n\nexport type MatrixSubspace = MatrixSpace;\n\nexport type MatrixSpaceStructure = {\n success: boolean;\n space_id: string;\n space_alias: string;\n privacy: MatrixPrivacySettings;\n rooms: MatrixRoom[];\n subspaces: {\n 'domain pods': MatrixSubspace;\n 'domain pages': MatrixSubspace;\n 'domain flows': MatrixSubspace;\n oracles: MatrixSubspace;\n community: MatrixSubspace;\n };\n};\n\nexport interface WorkspacePage {\n id: string;\n type: string;\n description: string;\n serviceEndpoint: string;\n mediaType: string;\n}\n\n/**\n * Toolkit keys recognised by the integrations layer. Kept as a string literal\n * union so typos surface at compile time; extend as we add more toolkits.\n */\nexport type IntegrationToolkit = 'googlecalendar' | 'xero' | 'gmail' | 'outlook' | 'slack';\n\n/**\n * Normalised connection status returned by the host app. Mirrors Composio's\n * underlying states but the editor never sees or names Composio directly.\n */\nexport type IntegrationConnectionStatus = 'INITIALIZING' | 'ACTIVE' | 'FAILED' | 'EXPIRED';\n\n/**\n * Structured error code for action-level UI decisions. Keep this small and\n * stable — actions branch on it (see gotchas §7).\n */\nexport type IntegrationErrorCode = 'OK' | 'VALIDATION' | 'AUTH_EXPIRED' | 'UPSTREAM_4XX' | 'UPSTREAM_5XX' | 'RATE_LIMIT' | 'UNKNOWN';\n\nexport interface IntegrationConnectionSummary {\n connectedAccountId: string;\n status: IntegrationConnectionStatus;\n /** Human-readable label fetched server-side (e.g. Google email, Xero org name). */\n label?: string;\n createdAt: string;\n}\n\nexport interface IntegrationExecuteResult {\n successful: boolean;\n data?: Record<string, unknown>;\n error?: string;\n code?: IntegrationErrorCode;\n /** Signed receipt for the provider invocation; never contains OAuth material. */\n providerInvocationReceipt?: {\n id: string;\n provider: string;\n issuedAt: string;\n issuer: string;\n invocationDigest: string;\n resultDigest: string;\n signature: string;\n };\n}\n\n/**\n * One tool's input schema. Field names mirror the underlying platform verbatim\n * — the editor renders these as form fields and never translates them.\n *\n * These schemas are HARDCODED + typed in the editor per tool (the 4 toolkits\n * are a fixed, curated set), not fetched: that gives compile-time types, an\n * instant form with no round trip, curation control over which fields show,\n * and a single declarative source the agent-facing action metadata reads from.\n * The worker never serves a schema — it only handles connection + execution.\n */\nexport interface IntegrationToolSchema {\n slug: string;\n name: string;\n description: string;\n parameters: {\n type: 'object';\n required: string[];\n properties: Record<string, { type?: string; title?: string; description?: string; default?: unknown }>;\n };\n}\n\n/**\n * The author's current connection status for a toolkit. Returned by\n * `getIntegration`. Drives the connect/bind UI in template mode. Carries NO\n * input schema — schemas live in the editor (see IntegrationToolSchema).\n */\nexport interface IntegrationManifest {\n toolkit: IntegrationToolkit;\n displayName: string;\n connection: {\n status: IntegrationConnectionStatus | 'NONE';\n connectedAccountId: string | null;\n label: string | null;\n };\n}\n\nexport interface IntegrationsHandlers {\n /** Kick off OAuth — host returns the redirect URL to open in a popup and a pending ca_* id. */\n startConnection: (args: { toolkit: IntegrationToolkit }) => Promise<{ redirectUrl: string; connectedAccountId: string }>;\n\n /** Poll the status of a single connection (typically during the OAuth popup dance). */\n getConnectionStatus: (args: { connectedAccountId: string }) => Promise<{ status: IntegrationConnectionStatus; error?: string }>;\n\n /** List all connections the current entity has for a given toolkit. */\n listConnections: (args: { toolkit: IntegrationToolkit }) => Promise<IntegrationConnectionSummary[]>;\n\n /** Revoke a connection (server-side). Idempotent. */\n disconnect: (args: { connectedAccountId: string }) => Promise<void>;\n\n /** Single entry point for every tool execution. `toolSlug` is the underlying platform's slug. */\n executeTool: (args: { toolSlug: string; connectedAccountId: string; arguments: Record<string, unknown> }) => Promise<IntegrationExecuteResult>;\n\n /** Optional read-tool call used by diff resolvers to populate \"before\" state on update actions. */\n fetchCurrentState?: (args: { toolSlug: string; connectedAccountId: string; arguments: Record<string, unknown> }) => Promise<Record<string, unknown>>;\n\n // ---- Delegated-block surface (composio-worker /v1/integrations/*) --------\n // These power \"author connects once, any runner executes\" blocks. The\n // author's credential never reaches the editor: the worker stores it and\n // hands back an opaque, template-scoped bindingId.\n\n /** Author's connection status for a toolkit (drives the connect/bind UI). */\n getIntegration?: (args: { toolkit: IntegrationToolkit }) => Promise<IntegrationManifest>;\n\n /**\n * Bind a connected account to a template. The worker derives a deterministic,\n * template-scoped bindingId and stores the author's credential server-side.\n * Returns the opaque bindingId (safe to persist in the Y.Doc) + cached label.\n */\n bindIntegration?: (args: { toolkit: IntegrationToolkit; connectedAccountId: string; templateId: string }) => Promise<{ bindingId: string; label: string | null }>;\n\n /**\n * Execute a tool via a stored binding. The runner authenticates as themselves\n * (the host mints a short-lived invocation); the bindingId selects the\n * author's connected account on the worker. The editor never sees the\n * credential or the connectedAccountId.\n */\n executeBinding?: (args: { bindingId: string; toolSlug: string; arguments: Record<string, unknown> }) => Promise<IntegrationExecuteResult>;\n\n /** Revoke a binding (author only). Idempotent. */\n revokeBinding?: (args: { bindingId: string }) => Promise<void>;\n}\n\n// ---------------------------------------------------------------------------\n// Evaluation-engine claim dashboard (eval-dashboard spec §A.1) — the ledger\n// record the `qi/claim.evaluate` block renders. These mirror the engine's\n// GET /v1/claims/:claimId response verbatim: `decision`/`trace` are the\n// authoritative jsonb, untransformed (the UI owns presentation).\n// ---------------------------------------------------------------------------\n\n/** Pipeline row (`claim_ingests`): has the engine picked the claim up yet? */\nexport interface EngineIngest {\n status: 'queued' | 'processed' | 'failed';\n instanceId: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/** One member check's outcome inside a compound gate — identifiers only, never answer values. */\nexport interface EngineGateMember {\n index: number;\n /** The member's own field ref (`$question`), its forEach target, or its compound keyword. */\n ref: string;\n ok: boolean;\n}\n\nexport interface EngineGateOutcome {\n code: string;\n outcome: 'passed' | 'failed' | 'skipped' | 'unevaluated' | 'not_reached';\n /** Present iff the gate's check is compound (linked rules) — recorded pass or fail alike. */\n members?: EngineGateMember[];\n}\n\nexport interface EngineCriterionOutcome {\n code: string;\n scoreBps: number | null;\n pending: boolean;\n capped: boolean;\n}\n\nexport interface EngineDecisionReason {\n code: string;\n reason: string;\n class: string;\n}\n\n/** The engine's authoritative decision jsonb — codes, scores and outcomes only. */\nexport interface EngineDecision {\n status: 'decided' | 'pending_review' | 'unusable';\n verdict: 'approve' | 'partial' | 'reject' | 'review';\n class: string;\n evaluationStatus: number;\n action: string;\n totalBps: number | null;\n gates: EngineGateOutcome[];\n criteria: EngineCriterionOutcome[];\n pendingTasks: string[];\n reasons: EngineDecisionReason[];\n}\n\n/** One frozen ext/AI call record — request, response, attempts, token usage. */\nexport interface EngineTranscript {\n request: { url: string; body: unknown; headers: Record<string, string> };\n response: { status: number; body: unknown } | null;\n attempts: number;\n elapsedMs: number;\n latencyMs?: number;\n genId?: string | null;\n usage?: { promptTokens: number; completionTokens: number; cachedTokens: number; costUsd: number } | null;\n}\n\nexport type EngineExtFact =\n | { status: 'ok'; value: boolean | number; reason: string | null; transcript: EngineTranscript }\n | { status: 'error'; onError: 'review' | 'reject'; detail: string; transcript: EngineTranscript };\n\nexport type EngineAiFact =\n | { status: 'ok'; value: boolean; reason: string | null; failedRules: string[]; score: number; transcript: EngineTranscript }\n | { status: 'error'; onError: 'review' | 'reject'; detail: string; transcript: EngineTranscript };\n\n/** Photo-provenance result a screened AI-check transcript may carry (image lane). */\nexport interface EngineProvenance {\n vendor: string;\n issuer?: string;\n model?: string;\n modelVersion?: string;\n aiGenerated: boolean;\n watermarked: boolean;\n signedAt?: string;\n trusted: boolean;\n failures: string[];\n}\n\n/** The frozen evaluation trace — everything the engine saw or produced. */\nexport interface EngineTrace {\n attachments: Array<{ question: string; name: string; mediaType: string; cid: string | null; size: number | null }>;\n ctx: {\n now: string;\n collection: { startDate: string | null; endDate: string | null };\n claim: { submitter: string | null; submissionDate: string | null };\n };\n derived: Record<string, number | null>;\n ext: Record<string, EngineExtFact>;\n ai: Record<string, EngineAiFact>;\n formProof: { pinned: string; live: string | null; drifted: boolean };\n /** The check settings in effect for the run (§B.2) — why AI did or didn't run. */\n settings?: { allowAiChecks: boolean; allowImageChecks: boolean };\n}\n\n/** The billing receipt (§B.5) — the owner's charges, never the engine's costs. */\nexport interface EngineBilling {\n /** The engine receipt's lines carry usd + the frozen credits figure; the UI shows USD only. */\n base?: { usd: number; credits: number };\n aiChecks?: { count: number; usd: number; credits: number };\n imageChecks?: { count: number; usd: number; credits: number };\n /** The PRICING snapshot in effect when the run was charged. */\n model?: Record<string, number>;\n /** Present on free runs (`no_rubric` / `unusable`) with the reason. */\n free?: string;\n}\n\nexport interface EngineEvaluation {\n collectionId: string;\n rubricId: string | null;\n status: 'decided' | 'pending_review' | 'unusable' | 'no_rubric';\n verdict: 'approve' | 'partial' | 'reject' | 'review' | null;\n verdictClass: string | null;\n action: string | null;\n totalBps: number | null;\n decision: EngineDecision | null;\n explanation: string | null;\n trace: EngineTrace | null;\n revenueUsd: number;\n billing: EngineBilling | null;\n resultDigest: string;\n createdAt: string;\n}\n\n/** Human-review completion row (§A.10) — null until a person has answered. */\nexport interface EngineReview {\n status: 'received' | 'completed' | 'failed';\n reviewerDid: string;\n answers: Record<string, boolean | string>;\n createdAt: string;\n finalVerdict: string | null;\n finalVerdictClass: string | null;\n finalAction: string | null;\n finalTotalBps: number | null;\n finalDecision: EngineDecision | null;\n finalExplanation: string | null;\n finalDigest: string | null;\n completedAt: string | null;\n}\n\n/**\n * The engine's duplicate case for one claim (duplicate-detection spec §6),\n * derived server-side from the frozen `trace.unique` — `reason` is a finished\n * sentence the UI renders VERBATIM, never re-derived here. Null when the run\n * had no duplicate rule (or predates the feature).\n */\nexport interface EngineDuplicate {\n ruleId: string;\n /** Similarity in basis points (0–10000) — `/100` for the percent shown. */\n scoreBps: number;\n band: 'pass' | 'review' | 'reject';\n /** \"Same attachment as claim X (different submitter)\", \"72% similar to claim X\", … */\n reason: string;\n winnerKind: string | null;\n /** The prior claims it matched — `verdict` is theirs, not this claim's. */\n candidates: Array<{ claimId: string; verdict: string | null; sameAgent: boolean }>;\n}\n\n/**\n * What the reader must DO — the one thing every surface routes on (eval-ui\n * humanization design §3.1). Cross-repo contract with eval-engine's\n * `decision-summary.ts`: field names and members are transcribed verbatim,\n * never re-derived here. Deliberately no `canAnswer` member — the review\n * lane's assignee gate is uniform (design §3.5), so a boolean that would\n * always be true for every reader who can see it is not a field.\n */\nexport type Disposition =\n | 'settled' // written on chain (by us or by someone else). Nothing owed.\n | 'engine_signing' // chain row is `queued` — the engine writes it. Nothing owed.\n | 'sign_to_settle' // the engine decided; the OWNER signs on chain\n | 'your_call_on_chain' // §14 hold — we deliberately wrote nothing\n | 'answer_questions' // answerable review — the block resolves it\n | 'decide_yourself' // claim-level review — nothing to answer\n | 'nothing_ran'; // no_rubric / unusable — free run, no judgement\n\n/**\n * The engine's read-time decision projection (design §3.1) — derived\n * server-side from the stored `decision` jsonb + `trace` + the chain row on\n * every read, never a stored column. The UI renders `headline`/`detail`\n * verbatim; it does not compose prose from `decision`/`trace` itself.\n */\nexport interface DecisionSummary {\n /**\n * Sentence case. Never an id, code, or score. Two shapes only: a bare subject, ≤ 4 words\n * (\"Rejected as a duplicate\", \"Needs your answer\"), or a subject ≤ 4 words + the §14\n * disposition suffix \" — your call\" (load-bearing, does NOT count toward the limit — a §14\n * hold must never read as a decision that landed on chain, so it is never shortened).\n */\n headline: string;\n /**\n * At most TWO short sentences, ≤ 140 chars total, second person, no ids. When there are two,\n * the split is deliberate and always the same: what the engine found, then what you do about\n * it — \"All 10 checks passed. Approve it below to write that on chain.\"\n */\n detail: string;\n disposition: Disposition;\n /**\n * True iff this claim still owes SOMEONE a decision — a property of the record, not of the\n * caller (spec §3.1, corrected). `settled`, `engine_signing` and `nothing_ran` are always\n * false. It deliberately does NOT account for a review assigned to a different person: the\n * producer has no caller identity, so it cannot — an earlier version of this comment said it\n * did, which left the rule split three ways (spec, producer, consumer each holding a\n * different version; Important 2, coordinator review round 3).\n *\n * **The consumer narrows it, in exactly one place.** \"An assigned review is that person's\n * queue, and being able to step in is not the same as owing it\" is a client-side judgement,\n * because only the client knows who is looking. That narrowing happens once, in the row\n * view-model (`engineRowViewOf` / `rowViewByClaimId` in `EvaluateClaimFlowDetail.tsx`), and\n * the rail, the \"Owed by you\" filter and its count all read the narrowed value — reading raw\n * `owed` in any of the three puts a claim in the count that shows no rail.\n */\n owed: boolean;\n /** How the chain stands, in the reader's words. Null when there is no chain row yet. */\n chainState: { label: string; written: boolean } | null;\n /** Max 3. Rendered as quiet neutral chips — never coloured, never the signal. */\n facts: Array<{ kind: 'checks' | 'score' | 'match' | 'window' | 'cost'; text: string }>;\n /** Ids pulled OUT of prose so the client can truncate, copy, and link them. */\n refs: Array<{ kind: 'claim'; id: string; label: string }>;\n /** Drives the \"Why this result?\" default state — open only when worth reading. */\n expandByDefault: boolean;\n}\n\n/** GET /v1/claims/:claimId — the full engine record for one claim. */\nexport interface ClaimEvaluationRecord {\n claimId: string;\n ingest: EngineIngest | null;\n evaluation: EngineEvaluation | null;\n review: EngineReview | null;\n /** The duplicate case (§6) — a sibling of `evaluation`, not part of the decision. */\n duplicate?: EngineDuplicate | null;\n /** The full decision summary (design §3.1) — presentation only, derived at read time. */\n summary?: DecisionSummary | null;\n}\n\n/** Typed 403 — the reader lacks evaluate rights; rendered as copy, never a toast. */\nexport interface ClaimEvaluationForbidden {\n forbidden: true;\n}\n\n/** GET /v1/claims?collectionId= item — drives the list view's engine badges. */\nexport interface ClaimEvaluationSummary {\n claimId: string;\n ingestStatus: 'queued' | 'processed' | 'failed';\n evalStatus: string | null;\n verdict: string | null;\n totalBps: number | null;\n evaluatedAt: string | null;\n /**\n * The raw ledger/review columns the list route still returns alongside `summary` — kept on\n * the wire, but no longer read by `EngineBadge`/`engineRowViewOf`, which derive the row's one\n * status word from `summary` exclusively (design §3.1). This comment used to claim the badge\n * read these directly; it never has since the humanization pass (stale comment fixed,\n * coordinator review round 3).\n */\n reviewStatus?: 'received' | 'completed' | 'failed' | null;\n finalVerdict?: string | null;\n finalTotalBps?: number | null;\n /**\n * The duplicate case (§6) — a sibling fact, not read by the row anymore. The separate\n * \"Duplicate 92%\" chip this used to drive is gone (design §4.7): a flagged duplicate now folds\n * into `summary.headline` (\"Duplicate — your call\") like every other disposition. Kept on the\n * wire for `VerdictBlock`'s detail-view use of the equivalent `ClaimEvaluationRecord.duplicate`\n * (a different field on a different response), not this one.\n */\n duplicate?: EngineDuplicate | null;\n /** Reduced projection of the full summary (design §3.2) — one status word without re-deriving anything client-side. */\n summary?: Pick<DecisionSummary, 'headline' | 'disposition' | 'owed' | 'chainState'> | null;\n}\n\n/** One published price card. Prices are per relayer node, so which card applies depends on the collection. */\nexport interface EngineRateCard {\n name?: string;\n /** Base fee per evaluated claim. */\n baseUsd: number;\n /** Top-up per AI rule run per claim. */\n aiRuleUsd: number;\n /** Top-up per photo screened. */\n photoUsd: number;\n /** Top-up per agent-submitted claim. */\n agentClaimUsd?: number;\n}\n\n/**\n * GET /v1/pricing?collectionId= — what a claim actually costs ONE collection's\n * owner (per-claim billing guide §11). `estimate.ownerPaysUsd` is the number\n * that matters: the card MINUS what the collection's own on-chain evaluation\n * payment already credits back, which is why a well-funded collection can owe\n * nothing. `aiRules` is counted off the pinned rubric, so the estimate is real.\n */\nexport interface EnginePricing {\n /** The relayer node the collection's entity sits on — it selects the card. */\n relayerNode: { label: string; isIxo: boolean };\n rateCard: EngineRateCard;\n /** The collection's on-chain evaluation payment — what funds the offset. */\n evaluationPayment: { amount: string; denom: string; usd: number; allowlisted: boolean } | null;\n estimate: { aiRules: number; cardUsd: number; chainCreditUsd: number; ownerPaysUsd: number } | null;\n}\n\nexport interface BlocknoteHandlers {\n getVote: (proposalContractAddress: string, proposalId: string, userAddress: string) => Promise<VoteResponse>;\n getProposal: (proposalContractAddress: string, proposalId: string) => Promise<ProposalResponse>;\n getCurrentUser: () => User;\n /**\n * The Personal Agent (chat) oracle's DID for the active network. This is the\n * ENTITY DID (display, lookup, routing). Use `getOracleAuthDid` instead when\n * you need a UCAN audience. Returns \"\" when the host doesn't expose one.\n */\n getOracleDid?: () => string;\n /**\n * The Personal Agent's signing/auth DID — the value that UCAN delegations\n * targeting the oracle MUST use as their audience. Resolved from the entity\n * DID via the `#orz` linked resource (or returned as-is if the active DID\n * is already a `did:ixo:ixo1…` account DID, e.g. the local-dev override).\n * Async because the resolution may need a blocksync round trip. The result\n * is cached by the host, so repeat calls are cheap.\n */\n getOracleAuthDid?: () => Promise<string>;\n /**\n * Ask the host's Personal Agent chat to fill an open survey. `surveyId` is\n * the id the survey was registered with via `useRegisterOpenSurvey`; the\n * host opens the agent chat and instructs it (hidden prompt) to fill that\n * survey through the `list_open_surveys` / `fill_open_survey` browser\n * tools. The AI-fill button renders only when the host provides this.\n */\n requestAiFill?: (params: { surveyId: string; title?: string }) => void | Promise<void>;\n /**\n * Open the host's Personal Agent chat with a prepared prompt (e.g. \"fill\n * this Design POD phase\"). The Ask-Oxi affordances render only when the\n * host provides this.\n */\n openCompanionPrompt?: (params: { prompt: string; title?: string }) => void | Promise<void>;\n /**\n * Origins whose embeds receive the elevated iframe sandbox\n * (`allow-same-origin allow-downloads`) without the per-block\n * \"Allow authenticated embeds\" switch. Deployment-specific trust anchors\n * belong to the host, not this package; omit (or return []) to grant\n * elevation only via the per-block switch. Exact-origin matches only.\n */\n getTrustedEmbedOrigins?: () => string[];\n getRoomMembers: (roomId: string, mx: MatrixClient) => Promise<AwarenessDocActor[]>;\n getMatrixInfoPerDid: (did: string) => Promise<IUserMatrixProfile>;\n getDaoGroupsIds: () => Promise<string[] | undefined>;\n getDAOGroups: (filter?: DAOGroupAuthzFilter) => Promise<DAOGroup[]>;\n getRelayerDid: () => string | undefined;\n getEntityDid: () => string | undefined;\n getAdminAccountAddress: (deedDid: string) => Promise<string>;\n getOnlyClaimCollections: (deedDid: string) => Promise<ClaimCollection[]>;\n /** May return the transaction hash as proof of the vote landing on-chain. */\n vote: ({ proposalId, rationale, vote, proposalContractAddress }: VoteParams) => Promise<string | void>;\n createProposal: (params: CreateProposalParams) => Promise<string>;\n // ---- Group execution (\"act as the DAO DAO group\") ------------------------\n // A work block (claim / evaluate / bid / collection) run on the group's\n // behalf: the host prepares the SAME chain messages with the group core\n // address as the actor, protobuf-encoded, and the editor wraps them in a\n // governance proposal. See core/lib/actionRegistry/actions/_shared/groupExecution.ts.\n /** Create an on-chain proposal executing pre-encoded stargate messages. */\n createGroupExecutionProposal?: (params: {\n coreAddress: string;\n title: string;\n description: string;\n msgs: Array<{ typeUrl: string; value: string }>;\n }) => Promise<{ proposalId: string; proposalContractAddress: string }>;\n /** Claim submission as the group: full off-chain prep (credential + Matrix\n * upload, done as the current user) + MsgExec-wrapped MsgSubmitClaim with\n * the group as agent. Returns the pre-generated claimId (the Matrix CID). */\n prepareGroupClaimSubmission?: (params: {\n surveyData: any;\n deedDid: string;\n entityDid?: string;\n collectionId: string;\n adminAddress: string;\n pin: string;\n groupAddress: string;\n }) => Promise<{ msgs: Array<{ typeUrl: string; value: string }>; claimId: string }>;\n /** Claim evaluation as the group: MsgExec-wrapped MsgEvaluateClaim with the\n * group as the evaluating agent. */\n prepareGroupClaimEvaluation?: (params: {\n groupAddress: string;\n deedDid: string;\n claimId: string;\n collectionId: string;\n adminAddress: string;\n status: number;\n verificationProof?: string;\n amount?: { denom: string; amount: string };\n }) => Promise<{ msgs: Array<{ typeUrl: string; value: string }> }>;\n /** Agent-application approval as the group: the MsgExec-wrapped\n * MsgGrantEntityAccountAuthz grant messages with the group as the signer. */\n prepareGroupAgentApplicationApproval?: (params: {\n groupAddress: string;\n deedDid: string;\n collectionId: string;\n adminAddress: string;\n role: 'service_agent' | 'evaluation_agent';\n applicantAddress: string;\n agentQuota?: number;\n maxAmounts?: any[];\n }) => Promise<{ msgs: Array<{ typeUrl: string; value: string }> }>;\n /** Collection lifecycle write op as the group (create / updateState /\n * updateDates / updateQuota / updatePayments), MsgExec-wrapped with the\n * group as the authorized executor. For `create`, also returns the\n * entity's existing collection ids (`priorCollectionIds`) so the created\n * one can be resolved by diff after the proposal executes. */\n prepareGroupCollectionLifecycle?: (params: {\n groupAddress: string;\n operation: string;\n params: Record<string, any>;\n }) => Promise<{ msgs: Array<{ typeUrl: string; value: string }>; priorCollectionIds?: string[] }>;\n /** Resolve the collection a group proposal's MsgCreateCollection created:\n * diff the entity's live collections against the prepare-time snapshot.\n * Empty collectionId → not yet indexed, caller should retry. */\n resolveGroupCreatedCollection?: (params: { entityDid: string; protocolDid?: string; priorCollectionIds: string[] }) => Promise<{ collectionId: string }>;\n /** Collection user grant/revoke as the group: MsgExec-wrapped\n * MsgGrantEntityAccountAuthz / revoke with the group as the signer. */\n prepareGroupCollectionUserChange?: (params: {\n groupAddress: string;\n operation: 'add' | 'revoke';\n entityDid: string;\n collectionId: string;\n adminAddress: string;\n role: 'submit' | 'evaluate';\n granteeAddress: string;\n quota?: number;\n maxAmount?: Array<{ denom: string; amount: string }>;\n }) => Promise<{ msgs: Array<{ typeUrl: string; value: string }> }>;\n // Entity handlers\n getEntity: (did: string) => Promise<EntityResponse>;\n getDomainCard: () => Promise<DomainCard>;\n // AI handlers\n askCompanion: (prompt: string) => Promise<void>;\n // Lists data handlers\n getCryptoAssets: () => Promise<IAssetsListItem[]>;\n getAssets: (collectionDid: string, page: number, ownerAddress?: string) => Promise<{ data: Asset[]; totalCount: number }>;\n getDeedSubscriptions: (relayerDid: string, page: number) => Promise<{ data: DeedSubscription[]; totalCount: number }>;\n getCollections: (relayerDid: string, page: number) => Promise<{ data: Collection[]; totalCount: number }>;\n getTransactions: (address: string, page: number) => Promise<{ data: Transaction[]; totalCount: number }>;\n getInvestments: (relayerDid: string, page: number) => Promise<{ data: Investment[]; totalCount: number }>;\n getOracles: (relayerDid: string, page: number) => Promise<{ data: Oracle[]; totalCount: number }>;\n getPODs: (relayerDid: string, page: number, role?: string) => Promise<{ data: POD[]; totalCount: number }>;\n getProposals: (relayerDid: string, page: number) => Promise<{ data: Proposal[]; totalCount: number }>;\n getRequests: (relayerDid: string, page: number) => Promise<{ data: Request[]; totalCount: number }>;\n getDaos: (relayerDid: string, page: number, role?: string) => Promise<{ data: Dao[]; totalCount: number }>;\n getDaoGroups?: (relayerDid: string, page: number, role?: string) => Promise<{ data: Dao[]; totalCount: number }>;\n getProjects: (relayerDid: string, page: number) => Promise<{ data: Project[]; totalCount: number }>;\n getMembers: (address: string, groupCoreAddress: string, withBalance: boolean, page: number) => Promise<{ data: Member[]; totalCount: number }>;\n getDaoMembers: (address: string, groupIds: string[], withBalance: boolean, page: number) => Promise<{ data: Member[]; totalCount: number }>;\n getValidators: (relayerDid: string, page: number) => Promise<{ data: Validator[]; totalCount: number }>;\n executeProposal: (params: { proposalId: number; proposalContractAddress: string }) => Promise<void>;\n getProposalContractAddress: (params: { coreAddress: string }) => Promise<{ proposalContractAddress: string }>;\n getPreProposalContractAddress: (params: { coreAddress: string }) => Promise<{ preProposalContractAddress: string }>;\n getGroupContractAddress: (params: { coreAddress: string }) => Promise<{ groupContractAddress: string }>;\n getBalances: (address: string) => Promise<{ data: Balance[] }>;\n /**\n * Wallets the signed-in user holds a bank-send authorization on, so blocks\n * that move tokens can offer a source other than the user's own wallet\n * without the user having to know the address by heart. Optional: hosts\n * that do not implement it simply get \"my wallet or a pasted address\".\n */\n getSpendGranters?: () => Promise<SpendGranter[]>;\n // Bird notification handler\n sendNotification: (params: NotificationParams) => Promise<NotificationResponse>;\n // Detail handlers for selection panel\n getAssetDetails?: (id: string) => Promise<AssetDetails>;\n getCollectionDetails?: (id: string) => Promise<CollectionDetails>;\n getTransactionDetails?: (id: string) => Promise<TransactionDetails>;\n getTransactionStatus?: (transactionHash: string) => Promise<{\n status: 'not_found' | 'pending' | 'succeeded' | 'failed';\n observedAt: string;\n transactionHash?: string;\n code?: number;\n height?: string;\n }>;\n getInvestmentDetails?: (id: string) => Promise<InvestmentDetails>;\n getOracleDetails?: (id: string) => Promise<OracleDetails>;\n getPODDetails?: (id: string) => Promise<PODDetails>;\n getProposalDetails?: (id: string) => Promise<ProposalDetails>;\n getRequestDetails?: (id: string) => Promise<RequestDetails>;\n getMemberDetails?: (id: string) => Promise<MemberDetails>;\n getValidatorDetails?: (id: string) => Promise<ValidatorDetails>;\n getLinkedResourceDetails?: (id: string) => Promise<LinkedResourceDetails>;\n getDaoMemberDetails?: (id: string) => Promise<MemberDetails>;\n getProjectDetails?: (id: string) => Promise<ProjectDetails>;\n getDaoDetails?: (id: string) => Promise<DaoDetails>;\n getBalanceDetails?: (id: string) => Promise<BalanceDetails>;\n getDeedSubscriptionDetails?: (id: string) => Promise<DeedSubscriptionDetails>;\n getClaimDetails?: (id: string) => Promise<ClaimDetails>;\n // Claim handlers\n /**\n * Resolve a collection's claim form (`#vct`). `proof` and `resourceId`\n * describe the LinkedResource the content was read from — the rubric builder\n * pins them as its form binding (§A.3). Both are OPTIONAL: a host that does\n * not supply them leaves the pin blank, which stays valid (nothing enforces\n * it yet), and `qi/claim.submit` never reads them.\n */\n getDeedSurveyTemplate: (deedDid: string, claimCollectionId?: string) => Promise<{ surveyTemplate: any; claimCollectionId: string; proof?: string; resourceId?: string } | null>;\n submitClaim: (params: { surveyData: any; deedDid: string; collectionId: string; adminAddress: string; pin: string; entityDid?: string }) => Promise<{\n transactionHash: string;\n claimId: string;\n }>;\n requestPin: (config?: { title?: string; description?: string; submitText?: string }) => Promise<string>;\n getClaimCollections: (deedDid: string) => Promise<ClaimCollectionResponse>;\n /**\n * List the verifiableClaim protocols attached to an entity, by hydrating the\n * entity's `linkedClaim[]` to their `entityClaims[].template`. Drives the\n * claim-collection create config's protocol picker so the selected protocol is\n * guaranteed to be linked to the chosen entity (IXO-2429).\n */\n getEntityClaimProtocols: (entityDid: string) => Promise<EntityClaimProtocolsResponse>;\n getClaimsPerCollectionId: (params: GetClaimsPerCollectionIdParams) => Promise<Claim[]>;\n getClaimsPerUserAddress: (params: GetClaimsPerUserAddressParams) => Promise<Claim[]>;\n getClaimData: (collectionId: string, claimId: string, options?: { entityDid?: string }) => Promise<any>;\n /** Chain records for the given claim IDs, in any collection. IDs with no record are absent from the result. */\n getClaimsByIds?: (claimIds: string[]) => Promise<Claim[]>;\n getClaimDisputeDetails?: (claimId: string) => Promise<{\n reason?: string;\n disputeType?: number;\n evaluatorDid?: string;\n disputedAt?: string;\n uri?: string;\n proof?: string;\n } | null>;\n /** Fetch the outcome data captured at evaluation time (patch from the\n * UDID referenced by `verificationProof`) along with the on-chain\n * evaluation record. Used to repopulate the outcome template and surface\n * the actual transferred amount for already-evaluated claims. */\n getClaimEvaluationDetails?: (claimId: string) => Promise<{\n patch?: Record<string, any>;\n evaluatorDid?: string;\n evaluatedAt?: string;\n /** Authoritative on-chain transfer amount(s) from the MsgEvaluateClaim tx. */\n amount?: Coin[];\n /** Optional reason recorded with the evaluation (typically for reject). */\n reason?: string;\n } | null>;\n fetchClaimMedia?: (url: string, options?: { entityDid?: string }) => Promise<Blob>;\n /**\n * Upload a single claim survey file to the claim collection's media store and\n * return a compact reference (never base64). Wired into SurveyJS\n * `onUploadFiles` so claims persist only a link to the file, not its inlined\n * content. The returned `content` is resolved back to a fetchable URL by the\n * evaluation/display side (see `resolveClaimFileRef`).\n */\n uploadClaimFile?: (file: File, collectionId: string, options?: { entityDid?: string }) => Promise<{ content: string }>;\n evaluateClaim: (\n granteeAddress: string,\n did: string,\n payload: {\n claimId: string;\n collectionId: string;\n adminAddress: string;\n status?: number;\n verificationProof: string;\n amount?: Coin;\n }\n ) => Promise<BroadcastTxResult>;\n disputeClaim?: (\n granteeAddress: string,\n did: string,\n payload: {\n subjectId: string;\n disputeType: number;\n reason: string;\n }\n ) => Promise<any>;\n // Bid handlers\n submitBid: (params: SubmitBidParams) => Promise<BidResponse>;\n queryBids: (params: QueryBidsParams) => Promise<QueryBidsResponse>;\n queryBidsByDid: (params: QueryBidsByDidParams) => Promise<{ data: Bid[] }>;\n approveBid: (params: ApproveBidParams) => Promise<BidResponse>;\n rejectBid: (params: RejectBidParams) => Promise<BidResponse>;\n getUserRoles: (params: CheckUserRoleParams) => Promise<ClaimCollectionRole[]>;\n getBidContributorSurveyTemplate: (deedId: string, claimCollectionId?: string) => Promise<{ surveyTemplate: any } | null>;\n getBidEvaluatorSurveyTemplate: (deedId: string, claimCollectionId?: string) => Promise<{ surveyTemplate: any } | null>;\n approveServiceAgentApplication: (params: { adminAddress: string; collectionId: string; agentQuota: number; deedDid: string; currentUserAddress: string }) => Promise<void>;\n approveEvaluatorApplication: (params: {\n adminAddress: string;\n collectionId: string;\n deedDid: string;\n evaluatorAddress: string;\n agentQuota?: number;\n claimIds?: string[];\n maxAmounts?: Coin[];\n }) => Promise<void>;\n publicFileUpload: (file: File) => Promise<{\n encrypted: string;\n cid: string;\n proof: string;\n serviceEndpoint: string;\n url: string;\n mxc: string;\n }>;\n\n // === ENTITY SIGNING HANDLERS ===\n\n /**\n * Check if entity has signing key set up\n */\n checkEntitySigningSetup?: (entityDid: string) => Promise<{\n hasSigningKey: boolean;\n keyId?: string;\n }>;\n\n /**\n * Set up entity signing (generates mnemonic, adds verification method)\n * Requires wallet signature\n */\n setupEntitySigning?: (params: { entityDid: string; entityRoomId: string; pin: string }) => Promise<{\n transactionHash: string;\n keyId: string;\n }>;\n\n /**\n * Check if current user has signing key set up\n */\n checkUserSigningSetup?: () => Promise<{\n hasSigningKey: boolean;\n keyId?: string;\n }>;\n\n // === CAPABILITY SIGNING HANDLERS ===\n\n /**\n * Sign a capability delegation\n * @deprecated Use createDelegation instead for @ixo/ucan CAR format\n */\n signCapability?: (params: {\n /** DID of issuer (entity or user) */\n issuerDid: string;\n /** Whether signing as entity or user */\n issuerType: 'entity' | 'user';\n /** Entity room ID (required if issuerType is 'entity') */\n entityRoomId?: string;\n /** DID of recipient */\n audience: string;\n /** Capabilities to grant */\n capabilities: Array<{\n can: string;\n with: string;\n nb?: Record<string, any>;\n }>;\n /** IDs of parent capabilities (proofs) */\n proofs?: string[];\n /** Expiration timestamp */\n expiration?: number;\n /** PIN to decrypt signing mnemonic */\n pin: string;\n }) => Promise<{\n id: string;\n raw: string;\n signature: string;\n }>;\n\n /**\n * Verify a capability signature against issuer's DID document\n * @deprecated Use validateInvocation instead\n */\n verifyCapabilitySignature?: (params: {\n /** Raw capability JSON */\n capabilityRaw: string;\n /** Expected issuer DID */\n issuerDid: string;\n }) => Promise<{\n valid: boolean;\n error?: string;\n }>;\n\n // === NEW @ixo/ucan HANDLERS ===\n\n /**\n * Create a delegation using @ixo/ucan (CAR format)\n */\n createDelegation?: (params: {\n /** DID of issuer */\n issuerDid: string;\n /** Whether signing as entity or user */\n issuerType: 'entity' | 'user';\n /** Entity room ID (required if issuerType is 'entity') */\n entityRoomId?: string;\n /** DID of recipient */\n audience: string;\n /** Capabilities to grant */\n capabilities: Array<{\n can: string;\n with: string;\n nb?: Record<string, unknown>;\n }>;\n /** CIDs of proof delegations */\n proofs?: string[];\n /** Base64-encoded CAR proof delegations, aligned by index with proofs. */\n proofDelegations?: string[];\n /** Expiration timestamp (milliseconds) */\n expiration?: number;\n /** PIN to decrypt signing mnemonic */\n pin: string;\n }) => Promise<{\n /** Content ID of the delegation */\n cid: string;\n /** Base64-encoded CAR bytes */\n delegation: string;\n }>;\n\n // === EVALUATION-ENGINE ENROLLMENT HANDLERS (qi/eval.register — spec §6) ===\n // New host handlers consumed by the `evalRegister` service (adapters.ts). All\n // signing (delegation mint, store/add, engine invocation) + HTTP live in the\n // host; the editor only orchestrates these calls.\n\n /**\n * Mint the `owner → oracle` enrolment delegation host-side and return its\n * serialized base64-CAR `token` (to deposit into the UCAN Store). The host owns\n * the oracle-DID default (devnet `did:ixo:ixo1fyc0…`), the `issuerType:'user'`\n * signing, medium TTL, and revocability — the editor passes nothing, or only the\n * optional overrides.\n *\n * Both capabilities are REQUIRED: `{ can:'*', with:'ixo:matrix-claims-bot' }`\n * (read the claims) and `{ can:'subscriptions/read', with:'ixo:subscriptions' }`\n * (let the engine resolve the owner's oracle claim collection, the only account\n * a per-claim fee can be billed to). See `EvalRegisterService.mintBotDelegation`.\n */\n mintBotDelegation?: (params: { ttlDays?: number; oracleDid?: string; pin?: string; evalEngineUrl?: string }) => Promise<{ token: string }>;\n\n /**\n * Deposit a delegation CAR into the UCAN Store\n * (`POST {ucanStoreUrl}/api/delegations { token }`), authorized by a\n * self-signed `store/add` invocation the host mints. `ucanStoreUrl` is\n * optional — resolve it from the host's configured network when omitted.\n * Returns the stored delegation's CID.\n */\n depositDelegation?: (params: { token: string; note?: string; ucanStoreUrl?: string }) => Promise<{ cid: string }>;\n\n /**\n * Register a collection with the Evaluation Engine\n * (`POST {evalEngineUrl}/v1/collections/register\n * { collectionId, deedDid, ownerDid, rubricId? }`), authorized by a host-minted\n * UCAN invocation on `ixo:eval-engine`. `evalEngineUrl` is optional — resolve\n * it from the host's configured network when omitted. Idempotent upsert on\n * `collectionId`; returns the engine's registration `id`.\n */\n registerEvalCollection?: (params: {\n collectionId: string;\n deedDid: string;\n ownerDid: string;\n rubricId?: string;\n evalEngineUrl?: string;\n }) => Promise<{ id: string; collectionId?: string }>;\n\n /**\n * Create an invocation using @ixo/ucan (CAR format)\n */\n createInvocation?: (params: {\n /** DID of invoker */\n invokerDid: string;\n /** Whether signing as entity or user */\n invokerType: 'entity' | 'user';\n /** Entity room ID (required if invokerType is 'entity') */\n entityRoomId?: string;\n /** DID of the audience (typically the service worker's did:web).\n * The invocation is addressed to this DID — the worker rejects the\n * invocation if the audience does not match its own DID. */\n audience: string;\n /** Capability to invoke */\n capability: {\n can: string;\n with: string;\n nb?: Record<string, unknown>;\n };\n /** CIDs of proof delegations */\n proofs: string[];\n /** Additional facts/context */\n facts?: Record<string, unknown>;\n /** PIN to decrypt signing mnemonic */\n pin: string;\n }) => Promise<{\n /** Content ID of the invocation */\n cid: string;\n /** Base64-encoded CAR bytes */\n invocation: string;\n }>;\n\n /**\n * Validate an invocation against its proof chain\n * @deprecated Invocation validation should move into the shared UCAN runtime;\n * host apps should implement createInvocation plus the signer-session handlers.\n */\n validateInvocation?: (params: {\n /** Base64-encoded CAR invocation */\n invocation: string;\n /** Base64-encoded CAR delegations (proofs) */\n delegations: string[];\n }) => Promise<{\n valid: boolean;\n error?: string;\n /** Issuer DID if valid */\n issuer?: string;\n /** Validated capability if valid */\n capability?: {\n can: string;\n with: string;\n nb?: Record<string, unknown>;\n };\n }>;\n\n /**\n * Parse a delegation from Base64 CAR format\n */\n parseDelegation?: (\n /** Base64-encoded CAR delegation */\n delegation: string\n ) => Promise<{\n cid: string;\n issuer: string;\n audience: string;\n capabilities: Array<{\n can: string;\n with: string;\n nb?: Record<string, unknown>;\n }>;\n expiration?: number;\n proofs: string[];\n }>;\n\n // === USER/ORACLE LOOKUP HANDLERS ===\n\n /**\n * Search for users by name or DID\n */\n searchUsers?: (query: string) => Promise<\n Array<{\n did: string;\n displayName: string;\n avatarUrl?: string;\n address?: string;\n }>\n >;\n\n /**\n * Get registered oracles for an entity\n */\n getRegisteredOracles?: (entityDid: string) => Promise<\n Array<{\n did: string;\n name: string;\n description?: string;\n capabilities?: string[];\n }>\n >;\n\n /**\n * Get entity info including room ID\n */\n getEntityInfo?: (entityDid: string) => Promise<{\n did: string;\n name: string;\n roomId: string;\n adminAddress: string;\n controllerDid: string;\n }>;\n\n // === DOMAIN CREATION HANDLERS ===\n\n /**\n * Sign a Verifiable Credential using entity or user key.\n * Creates a DataIntegrityProof using eddsa-rdfc-2022 cryptosuite.\n */\n signCredential?: (params: {\n /** DID of issuer (entity or user) */\n issuerDid: string;\n /** Whether signing as entity or user */\n issuerType: 'entity' | 'user';\n /** Entity room ID (required if issuerType is 'entity') */\n entityRoomId?: string;\n /** The unsigned credential to sign */\n credential: {\n '@context': any;\n id: string;\n type: string[];\n issuer: { id: string };\n validFrom: string;\n validUntil: string;\n credentialSchema: { id: string; type: string };\n credentialSubject: any;\n };\n /** PIN to decrypt signing mnemonic */\n pin: string;\n }) => Promise<{\n /** The signed credential with proof attached */\n signedCredential: {\n '@context': any;\n id: string;\n type: string[];\n issuer: { id: string };\n validFrom: string;\n validUntil: string;\n credentialSchema: { id: string; type: string };\n credentialSubject: any;\n proof: {\n type: 'DataIntegrityProof';\n created: string;\n verificationMethod: string;\n cryptosuite: 'eddsa-rdfc-2022';\n proofPurpose: 'assertionMethod';\n proofValue: string;\n };\n };\n }>;\n\n /**\n * Redirect to entity overview page\n */\n redirectToEntityOverview?: (did: string, type: string) => void;\n\n /**\n * Create a new domain entity with the provided linked resources.\n * This is called after the domain card credential has been uploaded.\n */\n createDomain?: (params: {\n /** Entity type from survey (e.g., 'dao', 'protocol') */\n entityType: string;\n /** Entity context entries (e.g., class = selected blueprint DID) */\n context?: Array<{\n key: string;\n val: string;\n }>;\n /** Linked resources to attach to the entity (includes domain card) */\n linkedResource: Array<{\n id: string;\n type: string;\n proof: string;\n right: string;\n encrypted: string;\n mediaType: string;\n description: string;\n serviceEndpoint: string;\n }>;\n /** Linked entities (e.g., governance groups) */\n linkedEntity?: Array<{\n id: string;\n type: string;\n relationship: string;\n service: string;\n }>;\n /** Start date for the entity (from validFrom) */\n startDate?: string;\n /** End date for the entity (from validUntil) */\n endDate?: string;\n }) => Promise<{\n /** The DID of the newly created entity */\n entityDid: string;\n /** Transaction hash */\n transactionHash: string;\n }>;\n\n /**\n * Build a MsgAddLinkedResource transaction message without signing or broadcasting it.\n */\n createAddLinkedResourceMessage?: (params: {\n /** Entity DID to update. Host may default to the current entity context. */\n entityDid?: string;\n /** Linked resource to add when absent. */\n linkedResource: {\n id: string;\n type: string;\n description?: string;\n serviceEndpoint: string;\n proof?: string;\n mediaType?: string;\n encrypted?: string | boolean;\n right?: string;\n };\n /** Optional signer override. Host may default to the connected wallet address. */\n signer?: string;\n }) => Promise<ITrxMsg>;\n\n /**\n * Build a MsgAddLinkedEntity transaction message without signing or broadcasting it.\n */\n createAddLinkedEntityMessage?: (params: AddLinkedEntityMessageParams) => Promise<ITrxMsg>;\n\n /**\n * Sign and broadcast transaction messages built by host-provided message factories.\n */\n executeTransaction?: (params: { messages: ITrxMsg[]; memo?: string }) => Promise<{\n transactionHash?: string;\n code?: number;\n rawLog?: string;\n [key: string]: unknown;\n }>;\n\n // === EMAIL HANDLERS ===\n\n /**\n * List available email templates from Mailgun\n */\n listEmailTemplates?: (params: { limit?: number; page?: string }) => Promise<{\n items: Array<{\n name: string;\n description?: string;\n createdAt: string;\n }>;\n paging?: {\n first: string;\n last: string;\n next?: string;\n previous?: string;\n };\n }>;\n\n /**\n * Get a specific email template with optional active version content\n */\n getEmailTemplate?: (params: { templateName: string; active?: boolean }) => Promise<{\n name: string;\n description?: string;\n version?: {\n tag: string;\n template: string; // HTML content with handlebars\n engine: string;\n active: boolean;\n createdAt: string;\n };\n }>;\n\n /**\n * Send an email using a template\n */\n sendEmail?: (params: {\n to: string;\n subject: string;\n template: string;\n templateVersion?: string;\n variables?: Record<string, any>;\n cc?: string;\n bcc?: string;\n replyTo?: string;\n }) => Promise<{\n id: string;\n message: string;\n }>;\n\n // === MATRIX CREDENTIAL STORAGE ===\n\n /**\n * Store a verifiable credential in Matrix room state.\n * Used by the credential.store action type.\n */\n storeMatrixCredential?: (params: { roomId: string; credentialKey: string; credential: Record<string, any>; cid: string }) => Promise<{ storedAt: string; duplicate: boolean }>;\n\n /** Connected Yoma operating services. Every method returns an externally issued receipt. */\n yomaOperations?: {\n verifyFunding: FundingVerificationService['verify'];\n issueCredential: CredentialIssuanceService['issueAndDeliver'];\n executeOpportunity: YomaOpportunityService['execute'];\n executeYoIdLink: YoIdLinkService['execute'];\n issueOutcomeCertificate: OutcomeCertificateService['issueAndVerify'];\n };\n\n // === RUBRIC EVALUATION HANDLERS ===\n\n /**\n * Get the evaluation template linked resource for a deed\n */\n getEvaluationTemplate?: (\n deedDid: string,\n claimCollectionId?: string\n ) => Promise<{\n surveyTemplate: any;\n claimCollectionId: string;\n } | null>;\n\n /**\n * Get the rubric linked resource for a deed\n */\n getDeedRubric?: (deedDid: string) => Promise<{\n rubric: any;\n claimCollectionId: string;\n } | null>;\n\n /**\n * Fetch the evaluation engine's canonical rubric JSON Schema — a public GET of\n * `/v1/rubric-schema` (rubric-spec §A.12). The rubric builder compiles it with\n * Ajv and validates the rules' shape against it, so the editor can never\n * publish a shape the engine will reject. `evalEngineUrl` is optional — the\n * host resolves it from its configured network when omitted.\n */\n getRubricSchema?: (evalEngineUrl?: string) => Promise<object>;\n\n /**\n * Ask the engine to check a rubric BEFORE it is anchored (eval-engine §C.7).\n * Stronger than `getRubricSchema`'s local Ajv pass: the engine re-parses the\n * envelope, re-binds against the LIVE claim form, and checks the collection's\n * engine settings — the last of which the editor cannot see at all (AI rules\n * on a collection with AI checks off are publishable but never run). The\n * publish step blocks on any error, so the owner never signs an anchor\n * transaction for rules that cannot work. Read-only.\n */\n previewRubric?: (params: {\n collectionId: string;\n rubric: unknown;\n evalEngineUrl?: string;\n /**\n * True only on a user gesture that is ALREADY collecting a PIN (the publish step). The\n * builder re-checks on every edit, so by default the host mints SILENTLY and resolves `null`\n * when the wallet is locked, rather than interrupting authoring with the PIN modal.\n */\n interactive?: boolean;\n /**\n * The engine settings the author INTENDS to enrol with — lets the engine judge AI rules\n * truthfully before the collection is enrolled (the stored row doesn't exist yet, or is stale\n * against the block's unexecuted toggles). Absent = the engine falls back to its stored row.\n */\n settings?: { allowAiChecks: boolean; allowImageChecks: boolean; allowChainEvaluation: boolean };\n }) => Promise<{\n ok: boolean;\n problems: { code: string; severity: 'error' | 'warning'; path: string; message: string }[];\n settings: { allowAiChecks: boolean; allowImageChecks: boolean; allowChainEvaluation: boolean };\n } | null>;\n\n /**\n * Test a single §A.14 external source live for the rubric builder's Test\n * button (rubric-spec §B.5). The host makes the real UCAN-signed HTTP call to\n * `source.audience` with the author's `sampleValues` (one per `send` key) and\n * returns what happened. Optional — the builder disables Test and shows a hint\n * when a host has not wired it.\n */\n testExternalSource?: (params: { source: object; sampleValues?: Record<string, string | number | boolean> }) => Promise<SourcePreviewResult>;\n\n /**\n * Resolve a §A.14 external source's `did:web:` audience from its endpoint, so\n * the rubric builder can auto-fill it instead of asking the author to paste a\n * DID (rubric-spec §B.5). Public host read — no signing, no PIN.\n * `resolved:false` (or no handler) makes the builder reveal a manual audience\n * box; `audience` stays required in the format.\n */\n resolveSourceDid?: (params: { endpoint: string }) => Promise<{ did: string | null; resolved: boolean; error: string | null }>;\n\n /**\n * The protocol entity's existing `#rub` LinkedResource — its on-chain `id`\n * EXACTLY as stored (may be the literal template `{id}#rub`) and `proof`, or\n * `null` when the entity carries none. The publish path reads it to compose a\n * replace-in-place (delete + add in ONE transaction, delete first) — IID has\n * no update, and a bare second add is rejected as a duplicated resource id\n * (x/iid). Throws on a genuine query failure; the publish must then stop.\n */\n getRubricResource?: (params: { protocolDid: string }) => Promise<{ id: string; proof: string } | null>;\n\n /**\n * Evaluate a claim using a rubric via the rubric engine\n */\n evaluateWithRubric?: (params: { rubric: string; claim: Record<string, any> }) => Promise<{\n success: boolean;\n trace?: {\n traceId: string;\n rubricVersion: number;\n rubricName: string | null;\n actor: { type: 'ai' | 'human'; id?: string } | null;\n result: {\n outcome: 'pass' | 'fail' | 'escalated';\n steps: Array<{\n stepId: string;\n kind: 'compute' | 'fetch' | 'check';\n success: boolean;\n outputs?: Record<string, any>;\n message?: string;\n error?: string;\n duration?: number;\n timestamp: string;\n }>;\n executionId: string;\n startTime: string;\n endTime: string;\n totalDuration: number;\n escalatedTo?: string;\n };\n claim: Record<string, any>;\n };\n error?: string;\n }>;\n\n // === EVALUATION-ENGINE DASHBOARD HANDLERS (eval-dashboard spec §A.2/§A.10) ===\n\n /**\n * The engine's full record for one claim (GET /v1/claims/:claimId, signed\n * UCAN like `pinRubric`). Resolves `null` on 404 — the UI's \"engine hasn't\n * seen this claim yet\" state, never an error toast — and `{forbidden: true}`\n * on 403 (the reader lacks evaluate rights on the collection).\n */\n getClaimEvaluation?: (params: { claimId: string; evalEngineUrl?: string }) => Promise<ClaimEvaluationRecord | ClaimEvaluationForbidden | null>;\n\n /**\n * Engine summaries for a collection's claims (GET /v1/claims?collectionId=),\n * merged into the block's list view by claimId for the per-row badges.\n */\n /**\n * `notEnrolled: true` = the collection isn't registered with the engine (a normal state —\n * the block shows its \"try the Evaluation Engine\" promo, never an error).\n */\n listClaimEvaluations?: (params: {\n collectionId: string;\n evalEngineUrl?: string;\n }) => Promise<{ items: ClaimEvaluationSummary[]; nextCursor: string | null; notEnrolled?: boolean }>;\n\n /**\n * Send a human review's answers (POST /v1/claims/:claimId/review, §A.10).\n * All-or-nothing: `answers` must cover exactly the decision's pendingTasks.\n * Idempotent until completed — re-sending the same answers is the recovery\n * path; the host maps 409s to plain copy (\"Someone already reviewed this\n * claim\" / \"This claim's evaluation changed — refresh and look again\").\n */\n submitClaimReview?: (params: { claimId: string; resultDigest: string; answers: Record<string, boolean | string>; evalEngineUrl?: string }) => Promise<\n | { status: 'completing' }\n // 409s are normal results, not throws: \"already reviewed\" / \"evaluation changed — refresh\".\n | { status: 'conflict'; message: string }\n >;\n\n /**\n * The engine's live price for one collection (GET /v1/pricing?collectionId=,\n * per-claim billing guide §11). Public and unauthenticated on the engine, but\n * the block still asks the host rather than fetching a URL itself. Resolves\n * `null` when the engine is unreachable or doesn't know the collection — the\n * pricing surface then falls back to its static card, because a price read\n * must never be the reason someone cannot enrol.\n */\n getEnginePricing?: (params: { collectionId: string; evalEngineUrl?: string }) => Promise<EnginePricing | null>;\n\n /**\n * The signed-in owner's notification email, for PREFILLING the eval.register\n * block's required \"Billing email\" field (engine billing guide §10; owner,\n * 2026-07-30). The host owns where it comes from (the portal reads auth-hub's\n * `GET /api/user/email` with a self-signed user UCAN, session-cached — the\n * endpoint is rate-limited per user). MUST resolve `null` on any failure —\n * signed-out, no email on file, rate-limited — and never throw into a block\n * render; the block then leaves the field empty for the owner to type.\n * Absent handler (an older host) means no prefill, nothing else breaks.\n */\n getNotificationEmail?: () => Promise<string | null>;\n\n // === UDID CREATION HANDLERS ===\n\n /**\n * Create a Universal Decentralized Identifier (UDID) for an evaluation result\n */\n createUdid?: (params: CreateUdidParams) => Promise<CreateUdidResponse>;\n\n // === GOVERNANCE GROUP HANDLERS ===\n\n /**\n * Create a new governance group (categorical, multisig, NFT staking, or token staking).\n * The implementation is provided by the host application.\n */\n createGovernanceGroup?: (params: {\n /** Type of governance group to create */\n groupType: 'categorical' | 'multisig' | 'nftStaking' | 'tokenStaking';\n /** Name of the group */\n name: string;\n /** Optional description */\n description?: string;\n /** Group-type specific configuration from the survey */\n config: Record<string, unknown>;\n }) => Promise<{\n /** The DAO core contract address */\n coreAddress: string;\n /** The voting group contract address */\n groupAddress: string;\n /** Transaction hash */\n transactionHash: string;\n }>;\n\n /**\n * List entities where a given DID holds a specified role (e.g. 'controller').\n * Used by the POD setup flow to list parent organisations the user can nest under.\n */\n getEntitiesByRole?: (params: {\n /** DID of the actor */\n did: string;\n /** Role to filter by (e.g. 'controller', 'admin') */\n role: string;\n }) => Promise<\n Array<{\n did: string;\n name?: string;\n /** IXO entity type string, e.g. 'dao/dao', 'dao/pod', 'protocol/deed' */\n type?: string;\n icon?: string;\n description?: string;\n }>\n >;\n\n /**\n * List IID-backed entities from Blocksync.\n * Used by the POD setup flow to list parent DAOs/PODs controlled by the current user.\n */\n getIids?: (params?: {\n ids?: string[];\n /** Controller DIDs to filter by. */\n controllers?: string[];\n entityTypes?: string[];\n pagination?: {\n page?: number;\n pageSize?: number;\n offset?: number;\n limit?: number;\n };\n fields?: string[];\n }) => Promise<{\n nodes: Array<{\n id: string;\n type: string;\n iid: {\n id?: string;\n controller?: string[];\n alsoKnownAs?: string;\n service?: Service[];\n linkedResource?: LinkedResource[];\n [key: string]: unknown;\n };\n }>;\n totalCount?: number;\n }>;\n\n /**\n * List flow templates available for a given blueprint entity.\n * Used by the POD setup flow to let the user select startup flows.\n */\n getFlowTemplates?: (params: {\n /** Entity DID of the blueprint/protocol */\n entityDid: string;\n }) => Promise<Array<{ did: string; name?: string; description?: string }>>;\n\n /**\n * List protocol deeds and their available flow templates.\n * Used by host apps to browse protocol templates before importing them into a space.\n */\n listProtocolDeedsWithTemplates?: (params?: ListProtocolDeedsWithTemplatesParams) => Promise<{\n protocols: ProtocolDeedWithTemplates[];\n }>;\n\n /**\n * Import selected protocol flow templates into a target flows subspace.\n */\n importProtocolTemplatesToSpace?: (params: ImportProtocolTemplatesToSpaceParams) => Promise<{\n imported: ImportProtocolTemplateResult[];\n }>;\n\n /**\n * Source/create the Matrix space structure for a domain entity.\n * Returns the root space plus standard domain subspaces, including \"domain flows\".\n */\n sourceDomainSpaces?: (params?: { entityDid?: string }) => Promise<MatrixSpaceStructure>;\n\n /**\n * The domain's LIVE channel list (joined, named chat rooms under its main\n * space — a client-side `m.space.child` walk on the host). Preferred by the\n * rubric reviewer picker over flattening `sourceDomainSpaces`, whose `rooms`\n * arrays are the space skeleton rather than the channels.\n */\n listDomainChannels?: (params?: { entityDid?: string }) => Promise<Array<{ roomId: string; name: string }>>;\n\n /**\n * Let the evaluation engine into a review channel, so it can post the claims\n * that need a person. Called the moment the author routes reviews to a channel\n * — the engine can only post where it is a member, and that is part of picking\n * a channel rather than a step the author has to remember. The host owns the\n * chat client and the engine's identity; the block only reports the outcome.\n */\n inviteEvalEngineToChannel?: (params: { roomId: string }) => Promise<{ status: 'invited' | 'already-there' | 'not-configured' }>;\n\n /**\n * Create a Cosmos governance group from explicit members and decision policy.\n * Used by the POD setup flow after domain entity creation.\n */\n createGroup?: (params: {\n /** The entity DID of the newly created domain (to associate the group) */\n entityDid: string;\n /** Members with roles and voting power */\n members: Array<{ did: string; role: string; votingPower: number }>;\n /** Decision policy parameters */\n decisionPolicy: {\n votingPeriod: string;\n quorum: string;\n threshold: string;\n vetoThreshold: string;\n minExecutionDelay: string;\n executor: string;\n };\n /** Optional group name (defaults to entity name) */\n name?: string;\n }) => Promise<{\n /** The group/DAO core contract address */\n groupAddress: string;\n /** Transaction hash */\n transactionHash: string;\n }>;\n\n // === FLOW LINK HANDLERS ===\n\n /**\n * Navigate to a flow link URL\n * @param url - HTTP URL of the target flow or page\n */\n navigateToFlow?: (url: string) => void;\n\n /**\n * Get the status of a flow document\n * @param url - HTTP URL of the flow document\n * @returns Flow status with optional completion timestamp\n */\n getFlowStatus?: (url: string) => Promise<{\n status: 'not_started' | 'in_progress' | 'completed';\n completedAt?: string;\n }>;\n\n /**\n * Get workspace pages from protocol deed entity.\n * The host app automatically determines the network context.\n * @returns Array of workspace pages with type \"Page\" and mediaType \"application/matrix\"\n */\n getWorkspacePages?: () => Promise<WorkspacePage[]>;\n\n // ============================================================================\n // SIGNER SESSION HANDLERS (Handle-based signing)\n // ============================================================================\n\n /** Return a reusable in-memory signer session for this DID, if one exists. */\n getActiveSignerSession?: (params: { did: string }) => Promise<{\n sessionId: string;\n did: string;\n publicKey: string;\n keyId: string;\n expiresAt: number;\n scope: 'session' | 'operation';\n } | null>;\n\n /**\n * Create a new signer session for handle-based signing.\n *\n * This allows the editor to request signing operations without receiving\n * raw key material. The host app manages the session lifecycle and key security.\n *\n * @example\n * ```typescript\n * // Create a session-scoped signer for batch operations\n * const session = await handlers.createSignerSession({\n * did: 'did:ixo:entity:abc123',\n * didType: 'entity',\n * entityRoomId: '!room:matrix.ixo.world',\n * pin: '123456',\n * scope: 'session',\n * ttlSeconds: 300\n * });\n *\n * // Use for multiple signatures without re-entering PIN\n * const sig1 = await handlers.signWithSession({ sessionId: session.sessionId, data: '...' });\n * const sig2 = await handlers.signWithSession({ sessionId: session.sessionId, data: '...' });\n *\n * // Release when done\n * await handlers.releaseSignerSession({ sessionId: session.sessionId });\n * ```\n */\n createSignerSession?: (params: {\n /** DID of the signer (entity or user) */\n did: string;\n /** Whether signing as entity or user */\n didType: 'entity' | 'user';\n /** Entity room ID (required if didType is 'entity') */\n entityRoomId?: string;\n /** PIN to decrypt signing mnemonic */\n pin: string;\n /**\n * Session scope:\n * - 'session': Remains valid for multiple sign operations until TTL or explicit release\n * - 'operation': Automatically invalidated after first sign operation\n */\n scope: 'session' | 'operation';\n /**\n * Time-to-live in seconds (only applicable for 'session' scope)\n * Default: 300 (5 minutes), Maximum: 3600 (1 hour)\n */\n ttlSeconds?: number;\n }) => Promise<{\n /** Opaque session identifier */\n sessionId: string;\n /** DID of the signer */\n did: string;\n /** Public key in multibase format (for verification) */\n publicKey: string;\n /** Key ID (verification method ID) */\n keyId: string;\n /** Unix timestamp when the session expires */\n expiresAt: number;\n /** The scope this session was created with */\n scope: 'session' | 'operation';\n }>;\n\n /**\n * Sign data using an existing signer session.\n *\n * For 'operation' scoped sessions, the session is automatically\n * invalidated after this call succeeds.\n *\n * @throws If session not found, expired, or signing fails\n */\n signWithSession?: (params: {\n /** The session ID returned from createSignerSession */\n sessionId: string;\n /** Data to sign (passed as-is to Ed25519 sign) */\n data: string;\n /** Algorithm hint (currently only Ed25519 supported) */\n algorithm?: 'Ed25519';\n }) => Promise<{\n /** The signature in hex format */\n signature: string;\n /** The algorithm used */\n algorithm: 'Ed25519';\n /** Key ID that was used for signing */\n keyId: string;\n }>;\n\n /**\n * Release a signer session before it expires.\n *\n * This immediately clears the session from host memory, preventing\n * any further signing operations. Idempotent - safe to call on\n * already-expired or released sessions.\n */\n releaseSignerSession?: (params: {\n /** The session ID to release */\n sessionId: string;\n }) => Promise<{\n /** Whether the session was successfully released */\n released: boolean;\n /** Reason if not released (e.g., already expired) */\n reason?: string;\n }>;\n\n /**\n * @deprecated Use createDelegation with createSignerSession/signWithSession/releaseSignerSession.\n */\n createDelegationWithSession?: (params: {\n sessionId: string;\n audience: string;\n capabilities: Array<{\n can: string;\n with: string;\n nb?: Record<string, unknown>;\n }>;\n proofs?: string[];\n expiration?: number;\n }) => Promise<{\n cid: string;\n delegation: string;\n }>;\n\n /**\n * @deprecated Use createInvocation with createSignerSession/signWithSession/releaseSignerSession.\n */\n createInvocationWithSession?: (params: {\n sessionId: string;\n audience: string;\n capability: {\n can: string;\n with: string;\n nb?: Record<string, unknown>;\n };\n proofs: string[];\n facts?: Record<string, unknown>;\n }) => Promise<{\n cid: string;\n invocation: string;\n }>;\n\n // === SKILLS HANDLERS ===\n\n /**\n * Validate an MCP server URL and optionally authenticate with it.\n * Returns the list of tools the server exposes on success.\n */\n validateMcpServer?: (params: { url: string; authType?: 'bearer' | 'api-key' | 'none'; authToken?: string }) => Promise<{\n success: boolean;\n tools?: Array<{ name: string; description?: string }>;\n error?: string;\n }>;\n\n /**\n * Fetch available skills (capsules) from the skills registry\n */\n getNetwork?: () => Promise<string>;\n\n getSkills?: () => Promise<{\n capsules: Array<{\n cid: string;\n name: string;\n description: string;\n license: string;\n compatibility: string;\n allowedTools: string;\n metadata: unknown;\n archiveSize: number;\n createdAt: string;\n }>;\n pagination: {\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n }>;\n\n /**\n * Invoke a named skill with the given payload and return the result.\n */\n invokeSkill?: (skillName: string, payload: Record<string, unknown>) => Promise<unknown>;\n // === DEPLOY HANDLERS ===\n\n deploySetup?: (params: { name: string; config: Record<string, any> }) => Promise<{ setupComplete: boolean; stdout?: string; stderr?: string }>;\n deployStart?: (params: { name: string }) => Promise<{ processId: string; status: string }>;\n\n // === KYC HANDLERS (qi/kyc.verify) ===\n // Thin pass-throughs to the host's KYC server (ComplyCube-backed). The\n // editor NEVER calls the KYC server directly — the server's status is the\n // single source of truth for the verification lifecycle. All five handlers\n // must be provided together for the `kyc` service group to be enabled\n // (see buildServicesFromHandlers).\n\n /**\n * Load the KYC protocol's details form (SurveyJS json) plus the user's\n * current server-side verification state for that protocol.\n * `credentialType` is the vault index key of the credential the protocol\n * issues (e.g. 'kycamllevel1' | 'kycamllevel2'); defaults to level 1.\n */\n kycLoadForm?: (params: { protocolDid: string; credentialType?: string }) => Promise<{\n protocolId: string;\n claimCollectionId?: string;\n deedOfferId?: string;\n surveyJson: Record<string, unknown>;\n hasExistingCredential: boolean;\n /** Non-PII metadata of matching Vault credentials, oldest first. */\n existingCredentials?: Array<{ cid: string; credentialType: string; storedAt?: string; issuerDid?: string }>;\n status: string;\n }>;\n\n /**\n * Submit the details form; the KYC server creates the ComplyCube\n * evaluation and the status moves to `verify`.\n */\n kycInitiate?: (params: { protocolId: string; claimCollectionId?: string; deedOfferId?: string; data: Record<string, unknown> }) => Promise<{ status: string }>;\n\n /** Mint the hosted-webview verification URL (opened in a new browser tab). */\n kycGetVerificationUrl?: (params: { protocolId: string }) => Promise<{ url: string }>;\n\n /** Read the current server-side lifecycle status (polled every 15s while non-terminal). */\n kycGetStatus?: (params: { protocolId: string }) => Promise<{ status: string }>;\n\n /**\n * Save the issued SD-JWT credential to the user's Matrix vault room and\n * move the server status to `complete`. Idempotent per `credentialType`\n * (vault index key, defaults to level 1).\n */\n kycSaveCredential?: (params: { protocolId: string; credentialType?: string; credentialCid?: string }) => Promise<{ credentialCid: string; credentialType: string }>;\n\n // === THIRD-PARTY INTEGRATIONS (Calendar, Xero, ...) ===\n // Thin pass-throughs to the host app's /api/integrations/* routes.\n // The editor never hits the underlying platform directly — the host owns the\n // API key and scopes every call to the current entity's identifier.\n integrations?: IntegrationsHandlers;\n\n /**\n * Bridge callback for the consuming app's analytics pipeline.\n * Editor emits events using this callback so the portal can forward them to its analytics provider\n * (e.g. PostHog) without the editor package taking a dependency on posthog-js.\n */\n onAnalyticsEvent?: (eventName: string, properties?: Record<string, unknown>) => void;\n}\nexport type DocType = 'template' | 'flow';\n\n/**\n * Visualization renderer type for AG-UI integration.\n * This function is called by visualization blocks to render the actual AG-UI component.\n * @param vizType - The type of visualization (e.g., 'lineChart', 'barChart', 'dataTable', etc.)\n * @param config - The configuration object for the visualization\n * @param preferences - Optional user customizations (e.g., { pageSize: 25 }) persisted to the block\n * @param onPreferencesChange - Optional callback to update preferences (persists via CRDT)\n * @returns React node with the rendered visualization, or null if type is not supported\n */\nexport type VisualizationRenderer = (vizType: string, config: object, preferences?: object, onPreferencesChange?: (prefs: object) => void) => React.ReactNode | null;\n\n/**\n * Domain card data structure for rendering domain card previews\n */\nexport interface DomainCardData {\n name?: string;\n summary?: string;\n description?: string;\n entity_type?: string[];\n faq?: Array<{ question: string; answer: string }>;\n logo_url?: { url?: string; alt?: string };\n image_urls?: Array<{ url: string; alt: string }>;\n keywords?: string[];\n valid_from?: string;\n issuer?: string;\n area_served?: string;\n address?: string;\n coordinates?: { type: string; coordinates: [number, number] };\n contact?: { email?: string; website?: string; location?: string; socialLinks?: string[] };\n [key: string]: unknown;\n}\n\n/**\n * Renderer for domain card previews in the qi/domain.card-preview action.\n * The web app provides this renderer to display domain card data with proper styling.\n */\nexport type DomainCardRenderer = (domainCardData: DomainCardData) => React.ReactNode;\n\n/**\n * Dynamic list data returned by the data provider\n */\nexport interface DynamicListData {\n items: any[] | null;\n loading: boolean;\n error: string | null;\n}\n\n/**\n * Function type for getting dynamic list data from context\n */\nexport type DynamicListDataProvider = (listId: string) => DynamicListData;\n\n/**\n * Dynamic list column definition (imported from types for context)\n */\nexport interface DynamicListColumn {\n key: string;\n label: string;\n position?: 'topLeft' | 'bottomLeft' | 'topRight' | 'bottomRight';\n type?: 'string' | 'number' | 'date';\n color?: string;\n}\n\n/**\n * DataSource for dynamic lists\n */\nexport interface DataSource {\n oracleDid: string;\n oracleName?: string;\n query: string;\n toolName?: string;\n params?: Record<string, any>;\n description?: string;\n}\n\n/**\n * Action that can be performed on a dynamic list item\n */\nexport interface DynamicListAction {\n id: string;\n label: string;\n color?: string;\n}\n\n/**\n * Panel renderer type for dynamic list selection panel.\n * This function is called when an item is selected in a dynamic list.\n * If provided, renders custom content. If not provided, shows default key-value view.\n * @param item - The selected item data\n * @param columns - Column definitions from the dynamic list\n * @param dataSource - Data source info (oracle, query, etc.)\n * @returns React node with custom panel content, or null to use default\n */\n/**\n * Render an entire dynamic list.\n *\n * The block used to draw the list itself, which meant the app's status\n * language, formatters and surfaces could never reach it — this package is\n * synced from qi-flows and cannot import them. Handing the whole surface to\n * the host, the way the detail panel already was, is what lets one list\n * render everywhere. Returning null falls back to the block's own compact\n * rendering, which is what a standalone editor gets.\n *\n * @param props - the block's parsed state plus a patch callback for changes\n */\nexport type DynamicListRenderer = (props: {\n listId: string;\n title?: string;\n /** Parsed column definitions as stored on the block. */\n columns: DynamicListColumn[];\n /** Parsed `dataSource` prop, whatever shape it is in. */\n dataSource: unknown;\n /** Rows frozen into the document, if any. */\n snapshot: any[] | null;\n snapshotTimestamp?: string;\n editable: boolean;\n /** Persist a change back to the block's props. */\n onPatch: (patch: { title?: string; columns?: unknown; dataSource?: unknown; snapshot?: unknown; snapshotTimestamp?: string }) => void;\n /**\n * Show this in the editor's own right panel, replacing whatever is there.\n * The host must not open its own column: the editor already has one, and a\n * second appearing beside it is two right-hand columns for one document.\n */\n openItemPanel: (content: React.ReactNode) => void;\n closeItemPanel: () => void;\n}) => React.ReactNode | null;\n\nexport type DynamicListPanelRenderer = (\n item: any,\n columns: DynamicListColumn[],\n dataSource: DataSource | null,\n panelDescription?: string,\n actions?: DynamicListAction[],\n onClose?: () => void\n) => React.ReactNode | null;\n\n/**\n * Translation function injected by the host app (e.g. next-i18next `t`).\n * The editor stays framework-agnostic — when `translate` is not provided,\n * `useTranslate` falls back to `defaultValue ?? key`, so all strings still\n * render in English.\n */\nexport type Translate = (key: string, opts?: { defaultValue?: string; [k: string]: any }) => string;\n\nexport interface TopicActionRuntimeContext {\n topic: TopicExecutionContext;\n bridge: TopicActionBridge;\n executorDid: string;\n flowRevision?: string;\n topicService?: TopicService;\n}\n\nexport interface BlocknoteContextValue {\n editor?: IxoEditorType;\n handlers?: BlocknoteHandlers;\n blockRequirements?: BlockRequirements;\n mapConfig?: UnlMapConfig;\n editable?: boolean;\n docType: DocType;\n /** Current flow schema version (e.g., '0.3', '1.0.0') */\n flowVersion: string;\n sharedProposals: SharedProposalData;\n fetchSharedProposal: (proposalId: string, contractAddress: string, force?: boolean) => Promise<ProposalResponse>;\n invalidateProposal: (proposalId: string) => void;\n subscribeToProposal: (proposalId: string) => ProposalResponse | undefined;\n activeDrawerId: string | null;\n drawerContent: React.ReactNode | null;\n openDrawer: (id: string, content: React.ReactNode) => void;\n closeDrawer: () => void;\n visualizationRenderer?: VisualizationRenderer;\n getDynamicListData?: DynamicListDataProvider;\n dynamicListPanelRenderer?: DynamicListPanelRenderer;\n dynamicListRenderer?: DynamicListRenderer;\n domainCardRenderer?: DomainCardRenderer;\n /** Called when an inline flow-step reference chip is clicked, with the\n * referenced action block's node id. The host opens that step. */\n onFlowStepRefClick?: (nodeId: string) => void;\n connectedUsers?: Array<{ clientId: string; state: any }>;\n awarenessInstance?: any;\n translate?: Translate;\n topicActionRuntime?: TopicActionRuntimeContext;\n}\n\nconst BlocknoteContext = createContext<BlocknoteContextValue>({\n docType: 'flow',\n flowVersion: '0.3',\n sharedProposals: {},\n fetchSharedProposal: async () => {\n throw new Error('BlocknoteContext not initialized');\n },\n invalidateProposal: () => {\n throw new Error('BlocknoteContext not initialized');\n },\n subscribeToProposal: () => undefined,\n activeDrawerId: null,\n drawerContent: null,\n openDrawer: () => {\n throw new Error('BlocknoteContext not initialized');\n },\n closeDrawer: () => {\n throw new Error('BlocknoteContext not initialized');\n },\n});\n\nexport const getHandlersFromEditor = (editor?: IxoEditorType): BlocknoteHandlers | undefined => {\n const editorWithHandlers = editor as\n | (IxoEditorType & {\n handlers?: BlocknoteHandlers;\n _handlers?: BlocknoteHandlers;\n blocknoteHandlers?: BlocknoteHandlers;\n getHandlers?: () => BlocknoteHandlers | undefined;\n getBlocknoteHandlers?: () => BlocknoteHandlers | undefined;\n })\n | undefined;\n\n return (\n editorWithHandlers?.handlers ||\n editorWithHandlers?._handlers ||\n editorWithHandlers?.blocknoteHandlers ||\n editorWithHandlers?.getHandlers?.() ||\n editorWithHandlers?.getBlocknoteHandlers?.()\n );\n};\n\nexport function mergeBlocknoteHandlers(primary?: BlocknoteHandlers, override?: BlocknoteHandlers): BlocknoteHandlers | undefined {\n if (!primary) return override;\n if (!override) return primary;\n const integrations =\n primary.integrations || override.integrations\n ? ({\n ...(primary.integrations || {}),\n ...(override.integrations || {}),\n } as IntegrationsHandlers)\n : undefined;\n\n return {\n ...primary,\n ...override,\n integrations,\n };\n}\n\nexport const BlocknoteProvider: React.FC<{\n children: React.ReactNode;\n editor?: IxoEditorType;\n handlers?: BlocknoteHandlers;\n blockRequirements?: BlockRequirements;\n editable?: boolean;\n visualizationRenderer?: VisualizationRenderer;\n getDynamicListData?: DynamicListDataProvider;\n dynamicListPanelRenderer?: DynamicListPanelRenderer;\n dynamicListRenderer?: DynamicListRenderer;\n domainCardRenderer?: DomainCardRenderer;\n onFlowStepRefClick?: (nodeId: string) => void;\n mapConfig?: UnlMapConfig;\n connectedUsers?: Array<{ clientId: string; state: any }>;\n awarenessInstance?: any;\n translate?: Translate;\n topicActionRuntime?: TopicActionRuntimeContext;\n}> = ({\n children,\n editor,\n handlers,\n blockRequirements,\n editable,\n visualizationRenderer,\n getDynamicListData,\n dynamicListPanelRenderer,\n dynamicListRenderer,\n domainCardRenderer,\n onFlowStepRefClick,\n mapConfig,\n connectedUsers,\n awarenessInstance,\n translate,\n topicActionRuntime,\n}) => {\n const [sharedProposals, setSharedProposals] = useState<SharedProposalData>({});\n const sharedProposalsRef = useRef<SharedProposalData>({});\n const [activeDrawerId, setActiveDrawerId] = useState<string | null>(null);\n const [drawerContent, setDrawerContent] = useState<React.ReactNode | null>(null);\n const editorHandlers = getHandlersFromEditor(editor);\n const effectiveHandlers = useMemo(() => {\n return mergeBlocknoteHandlers(editorHandlers, handlers);\n }, [handlers, editorHandlers]);\n\n // Get document type directly from editor prop (not from CRDT)\n const docType = (editor?.docType as DocType) || 'flow';\n\n // Get flow schema version from CRDT metadata\n const flowVersion = editor?.getFlowMetadata?.()?.schema_version || '0.3';\n\n // Create UcanService when editor and handlers with signing capabilities are available\n const ucanService = useMemo((): UcanService | null => {\n const delegationStore = editor?._ucanDelegationStore;\n const invStore = editor?._invocationStore;\n if (!delegationStore || !invStore || !effectiveHandlers) return null;\n\n const hasSigningHandlers = !!(effectiveHandlers.createSignerSession || (effectiveHandlers as any).getPrivateKey || (effectiveHandlers as any).getMnemonic);\n if (!hasSigningHandlers) return null;\n\n const flowOwnerDid = editor?.getFlowOwnerDid?.() || '';\n const docId = editor?.getFlowMetadata?.()?.doc_id || '';\n const flowUri = docId ? `ixo:flow:${docId}` : '';\n\n return createUcanService({\n delegationStore,\n invocationStore: invStore,\n handlers: {\n getActiveSignerSession: effectiveHandlers.getActiveSignerSession,\n createSignerSession: effectiveHandlers.createSignerSession,\n signWithSession: effectiveHandlers.signWithSession,\n releaseSignerSession: effectiveHandlers.releaseSignerSession,\n getPrivateKey: (effectiveHandlers as any).getPrivateKey,\n getMnemonic: (effectiveHandlers as any).getMnemonic,\n createDelegationWithSession: (effectiveHandlers as any).createDelegationWithSession,\n createInvocationWithSession: (effectiveHandlers as any).createInvocationWithSession,\n },\n flowOwnerDid,\n flowUri,\n });\n }, [editor?._ucanDelegationStore, editor?._invocationStore, effectiveHandlers, editor?.getFlowOwnerDid?.(), editor?.getFlowMetadata?.()?.doc_id]);\n\n // Wire getUcanService on editor so all consumers can access it\n useEffect(() => {\n if (editor) {\n editor.getUcanService = () => ucanService;\n }\n }, [editor, ucanService]);\n\n // Initialize hooked actions system on mount\n useEffect(() => {\n initializeHookedActions();\n }, []);\n\n const analyticsEmittedRef = useRef(false);\n useEffect(() => {\n if (analyticsEmittedRef.current) return;\n if (!effectiveHandlers?.onAnalyticsEvent || !editor) return;\n analyticsEmittedRef.current = true;\n effectiveHandlers.onAnalyticsEvent('editor_session_started', {\n docType,\n editable: !!editable,\n flowVersion,\n });\n }, [effectiveHandlers, editor, docType, editable, flowVersion]);\n\n // Keep ref in sync with state\n useEffect(() => {\n sharedProposalsRef.current = sharedProposals;\n }, [sharedProposals]);\n\n const fetchSharedProposal = useCallback(\n async (proposalId: string, contractAddress: string, force = false): Promise<ProposalResponse> => {\n const cacheKey = `${contractAddress}:${proposalId}`;\n\n // Check cache using ref to get current value\n const cached = sharedProposalsRef.current[cacheKey];\n if (!force && cached && Date.now() - cached.lastFetched < 30000 && !cached.error) {\n return cached.proposal as ProposalResponse;\n }\n\n // Set loading state\n setSharedProposals((prev) => ({\n ...prev,\n [cacheKey]: { ...prev[cacheKey], loading: true },\n }));\n\n try {\n if (!effectiveHandlers) {\n throw new Error('BlocknoteHandlers not provided');\n }\n\n const proposal = await effectiveHandlers.getProposal(contractAddress, proposalId);\n\n setSharedProposals((prev) => ({\n ...prev,\n [cacheKey]: {\n proposal,\n lastFetched: Date.now(),\n loading: false,\n },\n }));\n\n return proposal;\n } catch (error) {\n setSharedProposals((prev) => ({\n ...prev,\n [cacheKey]: {\n ...prev[cacheKey],\n loading: false,\n error: error as Error,\n },\n }));\n throw error;\n }\n },\n [effectiveHandlers]\n ); // Removed sharedProposals from deps to prevent infinite loop\n\n const invalidateProposal = useCallback((proposalId: string) => {\n // Invalidate all entries that match this proposalId (across all contract addresses)\n setSharedProposals((prev) => {\n const updated = { ...prev };\n Object.keys(updated).forEach((key) => {\n if (key.endsWith(`:${proposalId}`)) {\n updated[key] = {\n ...updated[key],\n lastFetched: 0, // Mark as stale\n };\n }\n });\n return updated;\n });\n }, []);\n\n const subscribeToProposal = useCallback(\n (cacheKey: string): ProposalResponse | undefined => {\n return sharedProposals[cacheKey]?.proposal as ProposalResponse | undefined;\n },\n [sharedProposals]\n );\n\n const openDrawer = useCallback((id: string, content: React.ReactNode) => {\n setActiveDrawerId(id);\n setDrawerContent(content);\n }, []);\n\n const closeDrawer = useCallback(() => {\n setActiveDrawerId(null);\n setDrawerContent(null);\n }, []);\n\n return (\n <BlocknoteContext.Provider\n value={{\n editor,\n handlers: effectiveHandlers,\n blockRequirements,\n editable,\n docType,\n flowVersion,\n sharedProposals,\n fetchSharedProposal,\n invalidateProposal,\n subscribeToProposal,\n activeDrawerId,\n drawerContent,\n openDrawer,\n closeDrawer,\n visualizationRenderer,\n getDynamicListData,\n dynamicListPanelRenderer,\n dynamicListRenderer,\n domainCardRenderer,\n onFlowStepRefClick,\n mapConfig,\n connectedUsers,\n awarenessInstance,\n translate,\n topicActionRuntime,\n }}\n >\n {children}\n </BlocknoteContext.Provider>\n );\n};\n\nexport const useBlocknoteContext = () => {\n const context = useContext(BlocknoteContext);\n if (!context) {\n throw new Error('useBlocknoteContext must be used within a BlocknoteProvider');\n }\n return context;\n};\nexport const useBlocknoteHandlers = () => {\n const { handlers } = useBlocknoteContext();\n if (!handlers) {\n throw new Error('BlocknoteHandlers not provided to BlocknoteContext');\n }\n return handlers;\n};\n\n/**\n * Translate function for editor strings. Reads `translate` from\n * `BlocknoteContext`. When the host app hasn't provided one, falls back to\n * `defaultValue ?? key` so the editor still renders something readable.\n *\n * The returned function has a stable identity across renders, so consumers\n * can safely omit it from useEffect/useCallback dependency arrays. Internally\n * it reads the latest `translate` via a ref, so language switches still\n * trigger re-renders through the surrounding context update.\n *\n * Usage:\n * const t = useTranslate();\n * <span>{t('pageTitle.placeholder', { defaultValue: 'New page' })}</span>\n */\nexport const useTranslate = (): Translate => {\n const { translate } = useBlocknoteContext();\n const translateRef = useRef(translate);\n useEffect(() => {\n translateRef.current = translate;\n }, [translate]);\n return useCallback((key, opts) => {\n const fn = translateRef.current;\n if (fn) return fn(key, opts);\n return (opts?.defaultValue as string | undefined) ?? key;\n }, []);\n};\n","import { HookedActionsConfig, HookedActionInstanceConfig } from './types';\n\n/**\n * Parse hooked actions config from a JSON string\n */\nexport function parseHookedActionsConfig(configString: string): HookedActionsConfig {\n if (!configString) return {};\n try {\n return JSON.parse(configString);\n } catch {\n return {};\n }\n}\n\n/**\n * Stringify hooked actions config to JSON\n */\nexport function stringifyHookedActionsConfig(config: HookedActionsConfig): string {\n return JSON.stringify(config);\n}\n\n/**\n * Resolve a util variable like {{util.currentDate}}\n */\nfunction resolveUtilValue(key: string): string | undefined {\n const now = new Date();\n switch (key) {\n case 'currentDate':\n return now.toISOString().split('T')[0];\n case 'currentDateTime':\n return now.toISOString();\n case 'currentTime':\n return now.toTimeString().split(' ')[0];\n default:\n return undefined;\n }\n}\n\n/**\n * Resolve a value that may contain payload or util references\n * Supports: {{payload.fieldName}}, {{payload.nested.field}}, {{util.currentDate}}, or static values\n */\nexport function resolvePayloadValue(template: string, payload: Record<string, any>): string {\n if (!template) return '';\n\n // Check if it's a single reference (payload or util)\n const singleMatch = template.match(/^\\{\\{(payload|util)\\.(.+)\\}\\}$/);\n if (singleMatch) {\n const [, namespace, path] = singleMatch;\n if (namespace === 'util') {\n const value = resolveUtilValue(path);\n return value !== undefined ? value : '';\n }\n const value = getNestedValue(payload, path);\n return value !== undefined ? String(value) : '';\n }\n\n // Replace any inline references (for templates with mixed content)\n return template.replace(/\\{\\{(payload|util)\\.([^}]+)\\}\\}/g, (_, namespace, path) => {\n if (namespace === 'util') {\n const value = resolveUtilValue(path);\n return value !== undefined ? value : '';\n }\n const value = getNestedValue(payload, path);\n return value !== undefined ? String(value) : '';\n });\n}\n\n/**\n * Get a nested value from an object using dot notation\n */\nfunction getNestedValue(obj: Record<string, any>, path: string): any {\n const keys = path.split('.');\n let current = obj;\n\n for (const key of keys) {\n if (current === null || current === undefined) return undefined;\n current = current[key];\n }\n\n return current;\n}\n\n/**\n * Resolve all variable mappings in an action config\n */\nexport function resolveVariableMappings(variableMappings: Record<string, string>, payload: Record<string, any>): Record<string, any> {\n const resolved: Record<string, any> = {};\n\n for (const [key, template] of Object.entries(variableMappings)) {\n resolved[key] = resolvePayloadValue(template, payload);\n }\n\n return resolved;\n}\n\n/**\n * Generate a unique ID for a hooked action instance\n */\nexport function generateHookedActionId(): string {\n return `ha_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Create a new hooked action instance with defaults\n */\nexport function createHookedActionInstance(type: string): HookedActionInstanceConfig {\n return {\n id: generateHookedActionId(),\n type,\n enabled: true,\n config: {},\n variableMappings: {},\n };\n}\n","import { HookedActionType, HookedActionInstanceConfig, HookedActionContext } from '../types';\nimport { resolvePayloadValue, resolveVariableMappings } from '../utils';\n\nexport const sendEmailAction: HookedActionType = {\n type: 'sendEmail',\n label: 'Send Email',\n description: 'Send an email using a Mailgun template',\n configSchema: [\n {\n key: 'templateName',\n label: 'Email Template',\n type: 'templateSelect',\n required: true,\n description: 'Select the Mailgun template to use',\n },\n {\n key: 'to',\n label: 'To Address',\n type: 'string',\n required: true,\n placeholder: '{{payload.recipientEmail}}',\n description: 'Recipient email address (can use payload variables)',\n },\n {\n key: 'subject',\n label: 'Subject',\n type: 'string',\n required: false,\n placeholder: 'Email subject',\n description: 'Email subject line (optional, can use payload variables)',\n },\n ],\n\n execute: async (actionConfig: HookedActionInstanceConfig, payload: Record<string, any>, context: HookedActionContext): Promise<void> => {\n const { handlers } = context;\n const { config, variableMappings } = actionConfig;\n\n if (!handlers.sendEmail) {\n console.warn('sendEmail handler not available');\n return;\n }\n\n if (!config.templateName) {\n console.warn('sendEmail: No template configured');\n return;\n }\n\n // Resolve to, subject from config (may contain payload references)\n const resolvedTo = resolvePayloadValue(config.to || '', payload);\n const resolvedSubject = resolvePayloadValue(config.subject || '', payload);\n\n if (!resolvedTo) {\n console.warn('sendEmail: Missing to address after resolution');\n return;\n }\n\n // Resolve variable mappings for template variables\n const resolvedVariables = resolveVariableMappings(variableMappings, payload);\n\n try {\n await handlers.sendEmail({\n to: resolvedTo,\n subject: resolvedSubject,\n template: config.templateName,\n templateVersion: config.templateVersion,\n variables: resolvedVariables,\n });\n\n console.log('sendEmail: Email sent successfully');\n } catch (error) {\n console.error('sendEmail: Failed to send email', error);\n // Don't throw - hooked actions fail gracefully\n }\n },\n};\n","import { HookedActionType, HookedActionInstanceConfig, HookedActionContext } from '../types';\n\n/**\n * Linked entity data structure stored on target blocks\n */\nexport interface LinkedEntityData {\n sourceBlockId: string;\n type: string;\n coreAddress: string;\n name?: string;\n groupType?: string;\n createdAt: string;\n}\n\n/**\n * Parse existing linked entities from a block's linkedEntities prop\n */\nfunction parseLinkedEntities(entitiesString: string): LinkedEntityData[] {\n if (!entitiesString || entitiesString === '[]') return [];\n try {\n return JSON.parse(entitiesString) as LinkedEntityData[];\n } catch {\n return [];\n }\n}\n\n/**\n * Targets generic `action` blocks running `qi/domain.sign` and writes the\n * linked entity into their `inputs` JSON blob (where `qi/domain.sign` reads\n * `linkedEntities`). Domain signing used to live on a dedicated\n * `domainCreatorSign` block; that block has been replaced by the action-type\n * rewrite and `linkedEntities` is now nested inside `inputs` rather than a\n * top-level prop.\n */\nexport const addLinkedEntityAction: HookedActionType = {\n type: 'addLinkedEntity',\n label: 'Add Linked Entity',\n description: 'Add a linked entity reference to a qi/domain.sign action block (e.g., link governance group to domain signing)',\n configSchema: [\n {\n key: 'targetBlockId',\n label: 'Target Block',\n type: 'blockSelect',\n required: true,\n description: 'The qi/domain.sign action block to add the linked entity to',\n blockTypes: ['action'],\n },\n {\n key: 'entityType',\n label: 'Entity Type',\n type: 'string',\n required: true,\n placeholder: 'governanceGroup',\n description: 'Type identifier for this linked entity',\n },\n ],\n\n execute: async (actionConfig: HookedActionInstanceConfig, payload: Record<string, any>, context: HookedActionContext): Promise<void> => {\n const { editor, sourceBlock } = context;\n const { config } = actionConfig;\n\n const targetBlockId = config.targetBlockId;\n const entityType = config.entityType || 'governanceGroup';\n\n if (!targetBlockId) {\n console.warn('addLinkedEntity: No target block configured');\n return;\n }\n\n const targetBlock = editor.document.find((block: any) => block.id === targetBlockId);\n\n if (!targetBlock) {\n console.warn(`addLinkedEntity: Target block not found: ${targetBlockId}`);\n return;\n }\n\n if (targetBlock.type !== 'action' || targetBlock.props?.actionType !== 'qi/domain.sign') {\n console.warn(`addLinkedEntity: Target block ${targetBlockId} is not a qi/domain.sign action block`);\n return;\n }\n\n const coreAddress = payload.coreAddress;\n if (!coreAddress) {\n console.warn('addLinkedEntity: No coreAddress in payload');\n return;\n }\n\n const linkedEntity: LinkedEntityData = {\n sourceBlockId: sourceBlock.id,\n type: entityType,\n coreAddress,\n name: payload.name || sourceBlock.props?.title,\n groupType: payload.groupType,\n createdAt: new Date().toISOString(),\n };\n\n // qi/domain.sign stores linkedEntities inside its `inputs` JSON blob\n let parsedInputs: Record<string, any> = {};\n try {\n parsedInputs = targetBlock.props?.inputs ? JSON.parse(targetBlock.props.inputs) : {};\n } catch {\n parsedInputs = {};\n }\n\n const existingEntities = parseLinkedEntities(parsedInputs.linkedEntities || '[]');\n const existingIndex = existingEntities.findIndex((e) => e.sourceBlockId === sourceBlock.id);\n\n if (existingIndex >= 0) {\n existingEntities[existingIndex] = linkedEntity;\n } else {\n existingEntities.push(linkedEntity);\n }\n\n parsedInputs.linkedEntities = JSON.stringify(existingEntities);\n\n try {\n editor.updateBlock(targetBlock, {\n props: {\n ...targetBlock.props,\n inputs: JSON.stringify(parsedInputs),\n },\n });\n\n console.log('addLinkedEntity: Linked entity added successfully');\n } catch (error) {\n console.error('addLinkedEntity: Failed to update target block', error);\n }\n },\n};\n","import { HookedActionType, HookedActionInstanceConfig, HookedActionContext } from '../types';\nimport { resolvePayloadValue } from '../utils';\nimport { sendDirectMessage } from '@/core/lib/matrixDm';\n\nexport const sendMatrixDMAction: HookedActionType = {\n type: 'sendMatrixDM',\n label: 'Send Matrix DM',\n description: 'Send a direct message via Matrix to an assigned user or a specified DID',\n configSchema: [\n {\n key: 'targetDid',\n label: 'Target DID',\n type: 'string',\n required: true,\n placeholder: '{{payload.assignedActorDid}}',\n description: 'DID of the recipient (can use payload variables)',\n },\n {\n key: 'message',\n label: 'Message',\n type: 'string',\n required: true,\n placeholder: 'You have a new task to complete',\n description: 'Message body to send (can use payload variables)',\n },\n ],\n\n execute: async (actionConfig: HookedActionInstanceConfig, payload: Record<string, any>, context: HookedActionContext): Promise<void> => {\n const { editor } = context;\n const { config } = actionConfig;\n\n const matrixClient = editor.getMatrixClient?.();\n if (!matrixClient) {\n console.warn('sendMatrixDM: Matrix client not available');\n return;\n }\n\n const resolvedDid = resolvePayloadValue(config.targetDid || '', payload);\n const resolvedMessage = resolvePayloadValue(config.message || '', payload);\n\n if (!resolvedDid) {\n console.warn('sendMatrixDM: Missing target DID after resolution');\n return;\n }\n\n if (!resolvedMessage) {\n console.warn('sendMatrixDM: Missing message after resolution');\n return;\n }\n\n try {\n await sendDirectMessage(matrixClient, resolvedDid, resolvedMessage);\n console.log('sendMatrixDM: DM sent successfully');\n } catch (error) {\n console.error('sendMatrixDM: Failed to send DM', error);\n // Don't throw - hooked actions fail gracefully\n }\n },\n};\n","import { registerHookedActionType } from '../registry';\nimport { sendEmailAction } from './sendEmail';\nimport { addLinkedEntityAction } from './addLinkedEntity';\nimport { sendMatrixDMAction } from './sendMatrixDM';\n\n// Export action types\nexport { sendEmailAction } from './sendEmail';\nexport { addLinkedEntityAction } from './addLinkedEntity';\nexport { sendMatrixDMAction } from './sendMatrixDM';\n\n/**\n * Register all built-in hooked action types\n * Call this at app initialization\n */\nexport function registerBuiltInActionTypes(): void {\n registerHookedActionType(sendEmailAction);\n registerHookedActionType(addLinkedEntityAction);\n registerHookedActionType(sendMatrixDMAction);\n}\n","import { BlockActionDefinition, registerBlockActions } from '@/mantine/blocks/hooks/hookedActions';\n\n/**\n * Action definitions for the governanceGroup block\n */\nexport const governanceGroupActions: BlockActionDefinition[] = [\n {\n actionId: 'create',\n label: 'After Create',\n description: 'Runs after the governance group is successfully created',\n payloadSchema: [\n {\n key: 'coreAddress',\n label: 'Core Address',\n type: 'string',\n description: 'The DAO core contract address',\n },\n {\n key: 'groupAddress',\n label: 'Group Address',\n type: 'string',\n description: 'The voting group contract address',\n },\n {\n key: 'transactionHash',\n label: 'Transaction Hash',\n type: 'string',\n description: 'The blockchain transaction hash',\n },\n {\n key: 'groupType',\n label: 'Group Type',\n type: 'string',\n description: 'Type of governance group (categorical, multisig, nftStaking, tokenStaking)',\n },\n {\n key: 'name',\n label: 'Group Name',\n type: 'string',\n description: 'The name/title of the governance group',\n },\n ],\n },\n];\n\n/**\n * Register governanceGroup block actions with the registry\n */\nexport function registerGovernanceGroupActions(): void {\n registerBlockActions('governanceGroup', governanceGroupActions);\n}\n","import { registerBuiltInActionTypes } from './actionTypes';\nimport { registerGovernanceGroupActions } from '../../governanceGroup/actions';\n\nlet initialized = false;\n\n/**\n * Initialize the hooked actions system.\n * This registers all built-in action types and block action definitions.\n * Should be called once at app startup.\n */\nexport function initializeHookedActions(): void {\n if (initialized) {\n return;\n }\n\n // Register built-in hooked action types (sendEmail, addLinkedEntity)\n registerBuiltInActionTypes();\n\n // Register block action definitions\n registerGovernanceGroupActions();\n\n // Future: register other block actions here\n // registerClaimBlockActions();\n // etc.\n\n initialized = true;\n}\n"],"mappings":"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","names":["useCallback","useRef","useEffect","value","useRef","useEffect","useCallback"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// src/mantine/components/Base/BaseSelect.tsx
|
|
2
|
+
import { Select } from "@mantine/core";
|
|
3
|
+
import React from "react";
|
|
4
|
+
function BaseSelect({ ...props }) {
|
|
5
|
+
return /* @__PURE__ */ React.createElement(Select, { ...props });
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
BaseSelect
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-4NAFQF6V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/components/Base/BaseSelect.tsx"],"sourcesContent":["import { Select, SelectProps } from '@mantine/core';\nimport React from 'react';\n\nexport default function BaseSelect({ ...props }: SelectProps) {\n return <Select {...props} />;\n}\n"],"mappings":";AAAA,SAAS,cAA2B;AACpC,OAAO,WAAW;AAEH,SAAR,WAA4B,EAAE,GAAG,MAAM,GAAgB;AAC5D,SAAO,oCAAC,UAAQ,GAAG,OAAO;AAC5B;","names":[]}
|