@ixo/editor 6.32.1 → 6.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (526) hide show
  1. package/dist/BidConfig-YLGSEIOS.js +154 -0
  2. package/dist/BidConfig-YLGSEIOS.js.map +1 -0
  3. package/dist/BidFlowDetail-TJCJBJZZ.js +365 -0
  4. package/dist/BidFlowDetail-TJCJBJZZ.js.map +1 -0
  5. package/dist/CalendarEventCreateConfig-J2LU6LJO.js +155 -0
  6. package/dist/CalendarEventCreateConfig-J2LU6LJO.js.map +1 -0
  7. package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js +174 -0
  8. package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js.map +1 -0
  9. package/dist/CalendarEventListConfig-GQNNF4ZB.js +116 -0
  10. package/dist/CalendarEventListConfig-GQNNF4ZB.js.map +1 -0
  11. package/dist/CalendarEventListFlowDetail-SSRTOXIX.js +58 -0
  12. package/dist/CalendarEventListFlowDetail-SSRTOXIX.js.map +1 -0
  13. package/dist/CalendarEventUpdateConfig-KACZA6GH.js +133 -0
  14. package/dist/CalendarEventUpdateConfig-KACZA6GH.js.map +1 -0
  15. package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js +155 -0
  16. package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js.map +1 -0
  17. package/dist/ClaimConfig-3HKPGK55.js +200 -0
  18. package/dist/ClaimConfig-3HKPGK55.js.map +1 -0
  19. package/dist/ClaimFlowDetail-UVEQMEI5.js +641 -0
  20. package/dist/ClaimFlowDetail-UVEQMEI5.js.map +1 -0
  21. package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js +149 -0
  22. package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js.map +1 -0
  23. package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js +647 -0
  24. package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js.map +1 -0
  25. package/dist/CollectionUsersConfig-RI2X3YY2.js +271 -0
  26. package/dist/CollectionUsersConfig-RI2X3YY2.js.map +1 -0
  27. package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js +1276 -0
  28. package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js.map +1 -0
  29. package/dist/CredentialStoreConfig-G66AQDGZ.js +75 -0
  30. package/dist/CredentialStoreConfig-G66AQDGZ.js.map +1 -0
  31. package/dist/CredentialStoreFlowDetail-FL7QAM3S.js +99 -0
  32. package/dist/CredentialStoreFlowDetail-FL7QAM3S.js.map +1 -0
  33. package/dist/DesignPodConfig-LJ7H2CZ6.js +8 -0
  34. package/dist/DesignPodConfig-LJ7H2CZ6.js.map +1 -0
  35. package/dist/DesignPodFlowDetail-JHJWGNVY.js +309 -0
  36. package/dist/DesignPodFlowDetail-JHJWGNVY.js.map +1 -0
  37. package/dist/DomainCardPreviewConfig-Q3X5M4WF.js +37 -0
  38. package/dist/DomainCardPreviewConfig-Q3X5M4WF.js.map +1 -0
  39. package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js +131 -0
  40. package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js.map +1 -0
  41. package/dist/DomainIndexerLookupConfig-N4VONQUY.js +41 -0
  42. package/dist/DomainIndexerLookupConfig-N4VONQUY.js.map +1 -0
  43. package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js +70 -0
  44. package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js.map +1 -0
  45. package/dist/DomainSignConfig-XFIXROVK.js +47 -0
  46. package/dist/DomainSignConfig-XFIXROVK.js.map +1 -0
  47. package/dist/DomainSignFlowDetail-BXZ6JBPR.js +206 -0
  48. package/dist/DomainSignFlowDetail-BXZ6JBPR.js.map +1 -0
  49. package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js +101 -0
  50. package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js.map +1 -0
  51. package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js +147 -0
  52. package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js.map +1 -0
  53. package/dist/EmailSendConfig-YEGZ5Q77.js +215 -0
  54. package/dist/EmailSendConfig-YEGZ5Q77.js.map +1 -0
  55. package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js +150 -0
  56. package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js.map +1 -0
  57. package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js +120 -0
  58. package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js.map +1 -0
  59. package/dist/EntitySingleSelectionConfig-DL57KNKM.js +30 -0
  60. package/dist/EntitySingleSelectionConfig-DL57KNKM.js.map +1 -0
  61. package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js +118 -0
  62. package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js.map +1 -0
  63. package/dist/EntityTransferConfig-JVZ3H35B.js +62 -0
  64. package/dist/EntityTransferConfig-JVZ3H35B.js.map +1 -0
  65. package/dist/EntityTransferFlowDetail-XEXM34XB.js +132 -0
  66. package/dist/EntityTransferFlowDetail-XEXM34XB.js.map +1 -0
  67. package/dist/EvalEngineConfig-CHC4IRN3.js +464 -0
  68. package/dist/EvalEngineConfig-CHC4IRN3.js.map +1 -0
  69. package/dist/EvalEngineFlowDetail-PUFRNO4U.js +4291 -0
  70. package/dist/EvalEngineFlowDetail-PUFRNO4U.js.map +1 -0
  71. package/dist/EvaluateBidConfig-OE4CM43G.js +151 -0
  72. package/dist/EvaluateBidConfig-OE4CM43G.js.map +1 -0
  73. package/dist/EvaluateBidFlowDetail-2S2N4YTW.js +564 -0
  74. package/dist/EvaluateBidFlowDetail-2S2N4YTW.js.map +1 -0
  75. package/dist/EvaluateClaimConfig-3D4F5LHU.js +297 -0
  76. package/dist/EvaluateClaimConfig-3D4F5LHU.js.map +1 -0
  77. package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js +2237 -0
  78. package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js.map +1 -0
  79. package/dist/FormSubmitConfig-UFZYMLUN.js +59 -0
  80. package/dist/FormSubmitConfig-UFZYMLUN.js.map +1 -0
  81. package/dist/FormSubmitFlowDetail-IAHDJS6P.js +169 -0
  82. package/dist/FormSubmitFlowDetail-IAHDJS6P.js.map +1 -0
  83. package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js +166 -0
  84. package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js.map +1 -0
  85. package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js +88 -0
  86. package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js.map +1 -0
  87. package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js +88 -0
  88. package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js.map +1 -0
  89. package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js +83 -0
  90. package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js.map +1 -0
  91. package/dist/GovernanceConfigConfig-V3WM4WBP.js +30 -0
  92. package/dist/GovernanceConfigConfig-V3WM4WBP.js.map +1 -0
  93. package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js +267 -0
  94. package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js.map +1 -0
  95. package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js +113 -0
  96. package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js.map +1 -0
  97. package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js +144 -0
  98. package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js.map +1 -0
  99. package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js +72 -0
  100. package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js.map +1 -0
  101. package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js +104 -0
  102. package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js.map +1 -0
  103. package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js +68 -0
  104. package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js.map +1 -0
  105. package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js +78 -0
  106. package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js.map +1 -0
  107. package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js +98 -0
  108. package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js.map +1 -0
  109. package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js +94 -0
  110. package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js.map +1 -0
  111. package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js +96 -0
  112. package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js.map +1 -0
  113. package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js +68 -0
  114. package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js.map +1 -0
  115. package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js +93 -0
  116. package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js.map +1 -0
  117. package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js +84 -0
  118. package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js.map +1 -0
  119. package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js +104 -0
  120. package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js.map +1 -0
  121. package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js +42 -0
  122. package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js.map +1 -0
  123. package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js +240 -0
  124. package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js.map +1 -0
  125. package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js +69 -0
  126. package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js.map +1 -0
  127. package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js +71 -0
  128. package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js.map +1 -0
  129. package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js +130 -0
  130. package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js.map +1 -0
  131. package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js +42 -0
  132. package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js.map +1 -0
  133. package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js +165 -0
  134. package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js.map +1 -0
  135. package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js +123 -0
  136. package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js.map +1 -0
  137. package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js +84 -0
  138. package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js.map +1 -0
  139. package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js +111 -0
  140. package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js.map +1 -0
  141. package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js +66 -0
  142. package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js.map +1 -0
  143. package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js +133 -0
  144. package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js.map +1 -0
  145. package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js +42 -0
  146. package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js.map +1 -0
  147. package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js +182 -0
  148. package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js.map +1 -0
  149. package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js +155 -0
  150. package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js.map +1 -0
  151. package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js +56 -0
  152. package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js.map +1 -0
  153. package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js +117 -0
  154. package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js.map +1 -0
  155. package/dist/HarvestConfig-AIGOGBFR.js +56 -0
  156. package/dist/HarvestConfig-AIGOGBFR.js.map +1 -0
  157. package/dist/HarvestFlowDetail-X3RUH3X3.js +131 -0
  158. package/dist/HarvestFlowDetail-X3RUH3X3.js.map +1 -0
  159. package/dist/HttpRequestConfig-OQEJIIJY.js +194 -0
  160. package/dist/HttpRequestConfig-OQEJIIJY.js.map +1 -0
  161. package/dist/HttpRequestFlowDetail-JVLV533Z.js +116 -0
  162. package/dist/HttpRequestFlowDetail-JVLV533Z.js.map +1 -0
  163. package/dist/IdentityCreateConfig-ZBUOJ6AL.js +94 -0
  164. package/dist/IdentityCreateConfig-ZBUOJ6AL.js.map +1 -0
  165. package/dist/IdentityCreateFlowDetail-WGKO43IH.js +83 -0
  166. package/dist/IdentityCreateFlowDetail-WGKO43IH.js.map +1 -0
  167. package/dist/IidCreateConfig-RRV2DYXI.js +75 -0
  168. package/dist/IidCreateConfig-RRV2DYXI.js.map +1 -0
  169. package/dist/IidCreateFlowDetail-6M32S6XS.js +57 -0
  170. package/dist/IidCreateFlowDetail-6M32S6XS.js.map +1 -0
  171. package/dist/KycVerifyConfig-VCG65K5K.js +65 -0
  172. package/dist/KycVerifyConfig-VCG65K5K.js.map +1 -0
  173. package/dist/KycVerifyFlowDetail-EWOMXSD3.js +421 -0
  174. package/dist/KycVerifyFlowDetail-EWOMXSD3.js.map +1 -0
  175. package/dist/ListDomainFlowsConfig-3JZEPTOJ.js +37 -0
  176. package/dist/ListDomainFlowsConfig-3JZEPTOJ.js.map +1 -0
  177. package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js +257 -0
  178. package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js.map +1 -0
  179. package/dist/LoadBatchesConfig-IMODIWRT.js +38 -0
  180. package/dist/LoadBatchesConfig-IMODIWRT.js.map +1 -0
  181. package/dist/LoadBatchesFlowDetail-GB24T76O.js +101 -0
  182. package/dist/LoadBatchesFlowDetail-GB24T76O.js.map +1 -0
  183. package/dist/MatrixDmConfig-NBII27CS.js +120 -0
  184. package/dist/MatrixDmConfig-NBII27CS.js.map +1 -0
  185. package/dist/MatrixRegisterConfig-N2U4FBYF.js +62 -0
  186. package/dist/MatrixRegisterConfig-N2U4FBYF.js.map +1 -0
  187. package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js +86 -0
  188. package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js.map +1 -0
  189. package/dist/MemberMultiSelectConfig-E7WUB2WD.js +30 -0
  190. package/dist/MemberMultiSelectConfig-E7WUB2WD.js.map +1 -0
  191. package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js +392 -0
  192. package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js.map +1 -0
  193. package/dist/OracleConfig-R7TDTTKN.js +56 -0
  194. package/dist/OracleConfig-R7TDTTKN.js.map +1 -0
  195. package/dist/OracleConfigureOracleConfig-QFF74X3N.js +198 -0
  196. package/dist/OracleConfigureOracleConfig-QFF74X3N.js.map +1 -0
  197. package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js +255 -0
  198. package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js.map +1 -0
  199. package/dist/OracleContractConfig-PHY5L7W2.js +38 -0
  200. package/dist/OracleContractConfig-PHY5L7W2.js.map +1 -0
  201. package/dist/OracleContractFlowDetail-M3PM4AU4.js +78 -0
  202. package/dist/OracleContractFlowDetail-M3PM4AU4.js.map +1 -0
  203. package/dist/OracleDeployConfig-QBG76ATZ.js +10 -0
  204. package/dist/OracleDeployConfig-QBG76ATZ.js.map +1 -0
  205. package/dist/OracleDeployFlowDetail-WKTMD2AD.js +231 -0
  206. package/dist/OracleDeployFlowDetail-WKTMD2AD.js.map +1 -0
  207. package/dist/OracleDeploySetupConfig-75XPGFJQ.js +10 -0
  208. package/dist/OracleDeploySetupConfig-75XPGFJQ.js.map +1 -0
  209. package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js +165 -0
  210. package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js.map +1 -0
  211. package/dist/OracleDeployStartConfig-NA6GZ4VQ.js +10 -0
  212. package/dist/OracleDeployStartConfig-NA6GZ4VQ.js.map +1 -0
  213. package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js +89 -0
  214. package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js.map +1 -0
  215. package/dist/OracleFlowDetail-5JCJK3GH.js +76 -0
  216. package/dist/OracleFlowDetail-5JCJK3GH.js.map +1 -0
  217. package/dist/OraclePromptConfig-YBRESISH.js +39 -0
  218. package/dist/OraclePromptConfig-YBRESISH.js.map +1 -0
  219. package/dist/OraclePromptFlowDetail-O3XNK7HY.js +112 -0
  220. package/dist/OraclePromptFlowDetail-O3XNK7HY.js.map +1 -0
  221. package/dist/OracleStoreConfigConfig-TUZWTJMA.js +134 -0
  222. package/dist/OracleStoreConfigConfig-TUZWTJMA.js.map +1 -0
  223. package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js +99 -0
  224. package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js.map +1 -0
  225. package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js +198 -0
  226. package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js.map +1 -0
  227. package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js +220 -0
  228. package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js.map +1 -0
  229. package/dist/OracleStoreSecretsConfig-PQMF7LFT.js +191 -0
  230. package/dist/OracleStoreSecretsConfig-PQMF7LFT.js.map +1 -0
  231. package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js +197 -0
  232. package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js.map +1 -0
  233. package/dist/ProposalCreateConfig-U5IHZNT7.js +161 -0
  234. package/dist/ProposalCreateConfig-U5IHZNT7.js.map +1 -0
  235. package/dist/ProposalCreateFlowDetail-4VZZPAWH.js +235 -0
  236. package/dist/ProposalCreateFlowDetail-4VZZPAWH.js.map +1 -0
  237. package/dist/ProposalVoteConfig-MH4MU7SL.js +150 -0
  238. package/dist/ProposalVoteConfig-MH4MU7SL.js.map +1 -0
  239. package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js +280 -0
  240. package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js.map +1 -0
  241. package/dist/ProtocolSelectConfig-S5U3P6K7.js +48 -0
  242. package/dist/ProtocolSelectConfig-S5U3P6K7.js.map +1 -0
  243. package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js +116 -0
  244. package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js.map +1 -0
  245. package/dist/RetireConfig-MV37WWZ6.js +59 -0
  246. package/dist/RetireConfig-MV37WWZ6.js.map +1 -0
  247. package/dist/RetireFlowDetail-VZ5O4SXI.js +147 -0
  248. package/dist/RetireFlowDetail-VZ5O4SXI.js.map +1 -0
  249. package/dist/SandboxProvisionConfig-ZGG4IRHM.js +46 -0
  250. package/dist/SandboxProvisionConfig-ZGG4IRHM.js.map +1 -0
  251. package/dist/SandboxProvisionFlowDetail-RUY64INV.js +79 -0
  252. package/dist/SandboxProvisionFlowDetail-RUY64INV.js.map +1 -0
  253. package/dist/WalletFundConfig-CMM3EP3B.js +117 -0
  254. package/dist/WalletFundConfig-CMM3EP3B.js.map +1 -0
  255. package/dist/WalletFundFlowDetail-TXWCZA4K.js +279 -0
  256. package/dist/WalletFundFlowDetail-TXWCZA4K.js.map +1 -0
  257. package/dist/WalletGenerateAndFundConfig-364RSEND.js +10 -0
  258. package/dist/WalletGenerateAndFundConfig-364RSEND.js.map +1 -0
  259. package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js +54 -0
  260. package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js.map +1 -0
  261. package/dist/WalletGenerateConfig-YYLCS65G.js +10 -0
  262. package/dist/WalletGenerateConfig-YYLCS65G.js.map +1 -0
  263. package/dist/WalletGenerateFlowDetail-CQCNDGJA.js +53 -0
  264. package/dist/WalletGenerateFlowDetail-CQCNDGJA.js.map +1 -0
  265. package/dist/XeroContactCreateConfig-OWG5PA3B.js +102 -0
  266. package/dist/XeroContactCreateConfig-OWG5PA3B.js.map +1 -0
  267. package/dist/XeroContactCreateFlowDetail-6MAINCF6.js +127 -0
  268. package/dist/XeroContactCreateFlowDetail-6MAINCF6.js.map +1 -0
  269. package/dist/XeroInvoiceCreateConfig-O74RUSZM.js +403 -0
  270. package/dist/XeroInvoiceCreateConfig-O74RUSZM.js.map +1 -0
  271. package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js +631 -0
  272. package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js.map +1 -0
  273. package/dist/XeroInvoiceListConfig-UR3GONBJ.js +113 -0
  274. package/dist/XeroInvoiceListConfig-UR3GONBJ.js.map +1 -0
  275. package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js +58 -0
  276. package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js.map +1 -0
  277. package/dist/XeroPaymentCreateConfig-RPMAIK6E.js +116 -0
  278. package/dist/XeroPaymentCreateConfig-RPMAIK6E.js.map +1 -0
  279. package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js +573 -0
  280. package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js.map +1 -0
  281. package/dist/action-manifest.json +2091 -393
  282. package/dist/chunk-2GAYKKTL.js +9 -0
  283. package/dist/chunk-2GAYKKTL.js.map +1 -0
  284. package/dist/chunk-2WPEATI7.js +315 -0
  285. package/dist/chunk-2WPEATI7.js.map +1 -0
  286. package/dist/chunk-3O42FYT3.js +3333 -0
  287. package/dist/chunk-3O42FYT3.js.map +1 -0
  288. package/dist/chunk-3TUYY4HK.js +20 -0
  289. package/dist/chunk-3TUYY4HK.js.map +1 -0
  290. package/dist/chunk-3XSLBJYI.js +554 -0
  291. package/dist/chunk-3XSLBJYI.js.map +1 -0
  292. package/dist/chunk-4DGCCXD6.js +710 -0
  293. package/dist/chunk-4DGCCXD6.js.map +1 -0
  294. package/dist/chunk-4NAFQF6V.js +11 -0
  295. package/dist/chunk-4NAFQF6V.js.map +1 -0
  296. package/dist/chunk-4PONO4US.js +799 -0
  297. package/dist/chunk-4PONO4US.js.map +1 -0
  298. package/dist/chunk-4TMOIK5M.js +21 -0
  299. package/dist/chunk-4TMOIK5M.js.map +1 -0
  300. package/dist/chunk-5IH3VC5I.js +102 -0
  301. package/dist/chunk-5IH3VC5I.js.map +1 -0
  302. package/dist/chunk-5NTKDOP6.js +89 -0
  303. package/dist/chunk-5NTKDOP6.js.map +1 -0
  304. package/dist/chunk-5O2SFRGU.js +18 -0
  305. package/dist/chunk-5O2SFRGU.js.map +1 -0
  306. package/dist/chunk-632JLECF.js +55 -0
  307. package/dist/chunk-632JLECF.js.map +1 -0
  308. package/dist/chunk-676HDB7K.js +95 -0
  309. package/dist/chunk-676HDB7K.js.map +1 -0
  310. package/dist/chunk-6ESTNTSH.js +223 -0
  311. package/dist/chunk-6ESTNTSH.js.map +1 -0
  312. package/dist/chunk-6GKJR52N.js +15 -0
  313. package/dist/chunk-6GKJR52N.js.map +1 -0
  314. package/dist/chunk-6L4ZIKYU.js +23 -0
  315. package/dist/chunk-6L4ZIKYU.js.map +1 -0
  316. package/dist/chunk-76YX5R4L.js +11 -0
  317. package/dist/chunk-76YX5R4L.js.map +1 -0
  318. package/dist/chunk-7J3GFMN3.js +32 -0
  319. package/dist/chunk-7J3GFMN3.js.map +1 -0
  320. package/dist/chunk-7LSARC2G.js +102 -0
  321. package/dist/chunk-7LSARC2G.js.map +1 -0
  322. package/dist/chunk-7W7UUUIE.js +609 -0
  323. package/dist/chunk-7W7UUUIE.js.map +1 -0
  324. package/dist/chunk-7ZLW7H37.js +21 -0
  325. package/dist/chunk-7ZLW7H37.js.map +1 -0
  326. package/dist/chunk-AAZHI22G.js +18 -0
  327. package/dist/chunk-AAZHI22G.js.map +1 -0
  328. package/dist/chunk-ACNE455I.js +76 -0
  329. package/dist/chunk-ACNE455I.js.map +1 -0
  330. package/dist/chunk-BKLSSLPZ.js +27 -0
  331. package/dist/chunk-BKLSSLPZ.js.map +1 -0
  332. package/dist/chunk-BZ7UPUTY.js +417 -0
  333. package/dist/chunk-BZ7UPUTY.js.map +1 -0
  334. package/dist/chunk-CGFAICUE.js +28 -0
  335. package/dist/chunk-CGFAICUE.js.map +1 -0
  336. package/dist/chunk-CMCEWQ3C.js +19 -0
  337. package/dist/chunk-CMCEWQ3C.js.map +1 -0
  338. package/dist/chunk-CP4UV436.js +41 -0
  339. package/dist/chunk-CP4UV436.js.map +1 -0
  340. package/dist/chunk-D2CQPNQG.js +27508 -0
  341. package/dist/chunk-D2CQPNQG.js.map +1 -0
  342. package/dist/chunk-DIQRZP7Z.js +51 -0
  343. package/dist/chunk-DIQRZP7Z.js.map +1 -0
  344. package/dist/chunk-EBFFDDAS.js +13 -0
  345. package/dist/chunk-EBFFDDAS.js.map +1 -0
  346. package/dist/chunk-EGVS23DR.js +85 -0
  347. package/dist/chunk-EGVS23DR.js.map +1 -0
  348. package/dist/chunk-EKBQ7K4N.js +15 -0
  349. package/dist/chunk-EKBQ7K4N.js.map +1 -0
  350. package/dist/chunk-EKQCZRAN.js +24 -0
  351. package/dist/chunk-EKQCZRAN.js.map +1 -0
  352. package/dist/chunk-EYKZIZ5J.js +48 -0
  353. package/dist/chunk-EYKZIZ5J.js.map +1 -0
  354. package/dist/{chunk-NEOPTPDF.js → chunk-F4PTFXZH.js} +11554 -22046
  355. package/dist/chunk-F4PTFXZH.js.map +1 -0
  356. package/dist/chunk-FFYZXA75.js +58 -0
  357. package/dist/chunk-FFYZXA75.js.map +1 -0
  358. package/dist/chunk-GFGDHPZ2.js +22 -0
  359. package/dist/chunk-GFGDHPZ2.js.map +1 -0
  360. package/dist/chunk-GR3CDFID.js +18 -0
  361. package/dist/chunk-GR3CDFID.js.map +1 -0
  362. package/dist/chunk-GR4SIU32.js +104 -0
  363. package/dist/chunk-GR4SIU32.js.map +1 -0
  364. package/dist/chunk-H5E46IIS.js +18 -0
  365. package/dist/chunk-H5E46IIS.js.map +1 -0
  366. package/dist/chunk-HFHVAMZL.js +22 -0
  367. package/dist/chunk-HFHVAMZL.js.map +1 -0
  368. package/dist/chunk-HRRI4BLF.js +4456 -0
  369. package/dist/chunk-HRRI4BLF.js.map +1 -0
  370. package/dist/chunk-HT6L7A5M.js +12 -0
  371. package/dist/chunk-HT6L7A5M.js.map +1 -0
  372. package/dist/chunk-I2FPFISM.js +301 -0
  373. package/dist/chunk-I2FPFISM.js.map +1 -0
  374. package/dist/chunk-IADAQJDH.js +28 -0
  375. package/dist/chunk-IADAQJDH.js.map +1 -0
  376. package/dist/chunk-IBOBCMQQ.js +99 -0
  377. package/dist/chunk-IBOBCMQQ.js.map +1 -0
  378. package/dist/chunk-IFWKRCFF.js +56 -0
  379. package/dist/chunk-IFWKRCFF.js.map +1 -0
  380. package/dist/chunk-IH4T7V4C.js +40 -0
  381. package/dist/chunk-IH4T7V4C.js.map +1 -0
  382. package/dist/chunk-IIIZZ4E4.js +1679 -0
  383. package/dist/chunk-IIIZZ4E4.js.map +1 -0
  384. package/dist/chunk-ILSFU3WD.js +83 -0
  385. package/dist/chunk-ILSFU3WD.js.map +1 -0
  386. package/dist/chunk-IX3VBV3L.js +43 -0
  387. package/dist/chunk-IX3VBV3L.js.map +1 -0
  388. package/dist/chunk-JBBFSORW.js +846 -0
  389. package/dist/chunk-JBBFSORW.js.map +1 -0
  390. package/dist/chunk-JIDTNKKL.js +1183 -0
  391. package/dist/chunk-JIDTNKKL.js.map +1 -0
  392. package/dist/chunk-JSPE6NGZ.js +22 -0
  393. package/dist/chunk-JSPE6NGZ.js.map +1 -0
  394. package/dist/chunk-JVROGQ7Q.js +150 -0
  395. package/dist/chunk-JVROGQ7Q.js.map +1 -0
  396. package/dist/chunk-K4WUMWNJ.js +32 -0
  397. package/dist/chunk-K4WUMWNJ.js.map +1 -0
  398. package/dist/chunk-K74XQ4Q5.js +11 -0
  399. package/dist/chunk-K74XQ4Q5.js.map +1 -0
  400. package/dist/chunk-KLLMJ4U3.js +22 -0
  401. package/dist/chunk-KLLMJ4U3.js.map +1 -0
  402. package/dist/chunk-LTKVCJ2E.js +27 -0
  403. package/dist/chunk-LTKVCJ2E.js.map +1 -0
  404. package/dist/chunk-M36DJTFZ.js +34 -0
  405. package/dist/chunk-M36DJTFZ.js.map +1 -0
  406. package/dist/chunk-MHM52LCJ.js +154 -0
  407. package/dist/chunk-MHM52LCJ.js.map +1 -0
  408. package/dist/chunk-MQCDMHRZ.js +59 -0
  409. package/dist/chunk-MQCDMHRZ.js.map +1 -0
  410. package/dist/chunk-N3ORMGAI.js +348 -0
  411. package/dist/chunk-N3ORMGAI.js.map +1 -0
  412. package/dist/chunk-NCSGIRRQ.js +28 -0
  413. package/dist/chunk-NCSGIRRQ.js.map +1 -0
  414. package/dist/chunk-NIXT2SBH.js +1423 -0
  415. package/dist/chunk-NIXT2SBH.js.map +1 -0
  416. package/dist/chunk-NJAII6CO.js +148 -0
  417. package/dist/chunk-NJAII6CO.js.map +1 -0
  418. package/dist/chunk-NKE4TL43.js +92 -0
  419. package/dist/chunk-NKE4TL43.js.map +1 -0
  420. package/dist/chunk-NZ7AXA7B.js +1 -0
  421. package/dist/chunk-NZ7AXA7B.js.map +1 -0
  422. package/dist/chunk-OCAYEGI2.js +26 -0
  423. package/dist/chunk-OCAYEGI2.js.map +1 -0
  424. package/dist/chunk-OMLI45ER.js +90 -0
  425. package/dist/chunk-OMLI45ER.js.map +1 -0
  426. package/dist/chunk-P7OBLJAG.js +88 -0
  427. package/dist/chunk-P7OBLJAG.js.map +1 -0
  428. package/dist/chunk-PAY3CBWL.js +2321 -0
  429. package/dist/chunk-PAY3CBWL.js.map +1 -0
  430. package/dist/chunk-PFF6VY35.js +257 -0
  431. package/dist/chunk-PFF6VY35.js.map +1 -0
  432. package/dist/chunk-PYNDJDWZ.js +1758 -0
  433. package/dist/chunk-PYNDJDWZ.js.map +1 -0
  434. package/dist/chunk-QDQ6UMMN.js +53 -0
  435. package/dist/chunk-QDQ6UMMN.js.map +1 -0
  436. package/dist/chunk-QGT3G2XG.js +24 -0
  437. package/dist/chunk-QGT3G2XG.js.map +1 -0
  438. package/dist/chunk-QZYCJ2GZ.js +55 -0
  439. package/dist/chunk-QZYCJ2GZ.js.map +1 -0
  440. package/dist/chunk-REZ7RFSA.js +124 -0
  441. package/dist/chunk-REZ7RFSA.js.map +1 -0
  442. package/dist/chunk-RRYBAE6E.js +2449 -0
  443. package/dist/chunk-RRYBAE6E.js.map +1 -0
  444. package/dist/chunk-RWUZOB62.js +34 -0
  445. package/dist/chunk-RWUZOB62.js.map +1 -0
  446. package/dist/chunk-SB5UCPZH.js +116 -0
  447. package/dist/chunk-SB5UCPZH.js.map +1 -0
  448. package/dist/chunk-SEJJ7CRI.js +99 -0
  449. package/dist/chunk-SEJJ7CRI.js.map +1 -0
  450. package/dist/chunk-SHBFGRPV.js +45 -0
  451. package/dist/chunk-SHBFGRPV.js.map +1 -0
  452. package/dist/chunk-SOFJ4GC5.js +45 -0
  453. package/dist/chunk-SOFJ4GC5.js.map +1 -0
  454. package/dist/chunk-STH2HPZK.js +44 -0
  455. package/dist/chunk-STH2HPZK.js.map +1 -0
  456. package/dist/chunk-TK3JNKME.js +28 -0
  457. package/dist/chunk-TK3JNKME.js.map +1 -0
  458. package/dist/chunk-TMONHFE3.js +46 -0
  459. package/dist/chunk-TMONHFE3.js.map +1 -0
  460. package/dist/chunk-TR4KO3AG.js +44 -0
  461. package/dist/chunk-TR4KO3AG.js.map +1 -0
  462. package/dist/chunk-TS2LNBF2.js +68 -0
  463. package/dist/chunk-TS2LNBF2.js.map +1 -0
  464. package/dist/chunk-UZUMBFPP.js +26 -0
  465. package/dist/chunk-UZUMBFPP.js.map +1 -0
  466. package/dist/chunk-VRZ5LMOW.js +176 -0
  467. package/dist/chunk-VRZ5LMOW.js.map +1 -0
  468. package/dist/chunk-WLGGY6Z6.js +75 -0
  469. package/dist/chunk-WLGGY6Z6.js.map +1 -0
  470. package/dist/chunk-WO7V6ZNC.js +11 -0
  471. package/dist/chunk-WO7V6ZNC.js.map +1 -0
  472. package/dist/chunk-WXSENSRP.js +64 -0
  473. package/dist/chunk-WXSENSRP.js.map +1 -0
  474. package/dist/chunk-XEKBZ2SA.js +19 -0
  475. package/dist/chunk-XEKBZ2SA.js.map +1 -0
  476. package/dist/chunk-XPBKU3JX.js +61 -0
  477. package/dist/chunk-XPBKU3JX.js.map +1 -0
  478. package/dist/chunk-XRYXBXWH.js +24 -0
  479. package/dist/chunk-XRYXBXWH.js.map +1 -0
  480. package/dist/chunk-XVA7QRVH.js +22 -0
  481. package/dist/chunk-XVA7QRVH.js.map +1 -0
  482. package/dist/chunk-YCTHHBSS.js +37 -0
  483. package/dist/chunk-YCTHHBSS.js.map +1 -0
  484. package/dist/chunk-YHPWD5NE.js +70 -0
  485. package/dist/chunk-YHPWD5NE.js.map +1 -0
  486. package/dist/chunk-YLNEKJQ5.js +126 -0
  487. package/dist/chunk-YLNEKJQ5.js.map +1 -0
  488. package/dist/chunk-YN4CEKCF.js +73 -0
  489. package/dist/chunk-YN4CEKCF.js.map +1 -0
  490. package/dist/chunk-YYNMESIF.js +17 -0
  491. package/dist/chunk-YYNMESIF.js.map +1 -0
  492. package/dist/chunk-Z6PRMCV6.js +1 -0
  493. package/dist/chunk-Z6PRMCV6.js.map +1 -0
  494. package/dist/chunk-ZDNW6VQG.js +11 -0
  495. package/dist/chunk-ZDNW6VQG.js.map +1 -0
  496. package/dist/chunk-ZP4D73DO.js +36 -0
  497. package/dist/chunk-ZP4D73DO.js.map +1 -0
  498. package/dist/chunk-ZUATADUV.js +26 -0
  499. package/dist/chunk-ZUATADUV.js.map +1 -0
  500. package/dist/{connections-1NtNQrsY.d.ts → connections-CEcurtWI.d.ts} +74 -9
  501. package/dist/core/index.cjs +14041 -6973
  502. package/dist/core/index.cjs.map +1 -1
  503. package/dist/core/index.d.ts +422 -138
  504. package/dist/core/index.js +425 -183
  505. package/dist/core/index.js.map +1 -1
  506. package/dist/flow-vnext/index.cjs +2842 -0
  507. package/dist/flow-vnext/index.cjs.map +1 -0
  508. package/dist/flow-vnext/index.d.ts +3 -0
  509. package/dist/flow-vnext/index.js +119 -0
  510. package/dist/flow-vnext/index.js.map +1 -0
  511. package/dist/{graphql-client-Bn0tN049.d.ts → graphql-client-B2tREsx6.d.ts} +3 -1
  512. package/dist/index-b9xxXGFs.d.ts +1230 -0
  513. package/dist/index.d.ts +5 -3
  514. package/dist/index.js +202 -37
  515. package/dist/index.js.map +1 -1
  516. package/dist/legacy-BpgIqaQ5.d.ts +14 -0
  517. package/dist/mantine/index.d.ts +7 -4
  518. package/dist/mantine/index.js +84 -30
  519. package/dist/mantine/index.js.map +1 -1
  520. package/dist/{runtime-BFwvCQDF.d.ts → types-Dqk5MTfW.d.ts} +6096 -5386
  521. package/package.json +12 -2
  522. package/dist/chunk-5JF23UP3.js +0 -59687
  523. package/dist/chunk-5JF23UP3.js.map +0 -1
  524. package/dist/chunk-A4CWC4AG.js +0 -374
  525. package/dist/chunk-A4CWC4AG.js.map +0 -1
  526. package/dist/chunk-NEOPTPDF.js.map +0 -1
@@ -0,0 +1,1423 @@
1
+ import {
2
+ matrixUserIdToDid
3
+ } from "./chunk-TS2LNBF2.js";
4
+
5
+ // src/core/lib/actionRegistry/actions/evalRegister/description.ts
6
+ var REPEAT_SUBMISSIONS_OPTIONS = [
7
+ { value: "normal", label: "Yes, that's normal", sentence: "Repeat submissions from the same person are expected and normal here." },
8
+ { value: "sometimes", label: "Sometimes", sentence: "Repeat submissions from the same person happen but are not the norm." },
9
+ { value: "once", label: "No, only once ever", sentence: "Each claim should be a distinct one-off; repeat submissions are unusual here." }
10
+ ];
11
+ var DIFFERENT_WHEN_OPTIONS = [
12
+ { value: "date", label: "The date", phrase: "the date" },
13
+ { value: "amount", label: "The amount or weight", phrase: "the amount or weight" },
14
+ { value: "place", label: "The place", phrase: "the place" },
15
+ { value: "kind", label: "The type or kind", phrase: "the type or kind" },
16
+ { value: "photos", label: "The photos", phrase: "the photos" }
17
+ ];
18
+ var WHAT_IS_COLLECTED_MAX = 300;
19
+ var DIFFERENT_WHEN_OTHER_MAX = 100;
20
+ function normalizeDifferentWhen(value) {
21
+ if (!Array.isArray(value)) return [];
22
+ return DIFFERENT_WHEN_OPTIONS.filter((option) => value.includes(option.value)).map((option) => option.value);
23
+ }
24
+ function normalizeRepeatSubmissions(value) {
25
+ return REPEAT_SUBMISSIONS_OPTIONS.find((option) => option.value === value)?.value;
26
+ }
27
+ function composeCollectionDescription(answers) {
28
+ const lines = [];
29
+ const whatIsCollected = String(answers.whatIsCollected || "").trim().slice(0, WHAT_IS_COLLECTED_MAX);
30
+ if (whatIsCollected) lines.push(`What is collected: ${whatIsCollected}`);
31
+ const repeat = REPEAT_SUBMISSIONS_OPTIONS.find((option) => option.value === answers.repeatSubmissions);
32
+ if (repeat) lines.push(`Repeat submissions: ${repeat.sentence}`);
33
+ const ticked = normalizeDifferentWhen(answers.differentWhen);
34
+ const differences = DIFFERENT_WHEN_OPTIONS.filter((option) => ticked.includes(option.value)).map((option) => option.phrase);
35
+ const other = String(answers.differentWhenOther || "").trim().slice(0, DIFFERENT_WHEN_OTHER_MAX);
36
+ if (other) differences.push(other);
37
+ if (differences.length) lines.push(`Two claims are different when: any of these differ \u2014 ${differences.join(", ")}.`);
38
+ return lines.length ? lines.join("\n") : void 0;
39
+ }
40
+
41
+ // src/core/lib/actionRegistry/actions/evalRubric/schemaGate.ts
42
+ import Ajv2020 from "ajv/dist/2020.js";
43
+
44
+ // src/core/lib/actionRegistry/actions/evalRubric/types.ts
45
+ var RUBRIC_CTX_TOKENS = [
46
+ "ctx.now",
47
+ "ctx.collection.startDate",
48
+ "ctx.collection.endDate",
49
+ "ctx.claim.submitter",
50
+ "ctx.claim.submitterAddress",
51
+ "ctx.claim.submissionDate",
52
+ "ctx.submitter.priorClaimCount",
53
+ "ctx.submitter.priorApprovedCount",
54
+ "ctx.collection.projectBoundary"
55
+ ];
56
+ var RUBRIC_CONTEXT = {
57
+ ixo: "https://w3id.org/ixo/ns/protocol/",
58
+ "@id": "@type",
59
+ type: "@type",
60
+ "@protected": true
61
+ };
62
+ var RUBRIC_ENVELOPE_TYPE = "ixo:entity#rubric";
63
+ function buildRubricEnvelope(body) {
64
+ return { "@context": RUBRIC_CONTEXT, type: RUBRIC_ENVELOPE_TYPE, rubric: body };
65
+ }
66
+ function parsePublishedRubric(raw) {
67
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return null;
68
+ const wrapped = raw.rubric;
69
+ const candidate = wrapped && typeof wrapped === "object" && !Array.isArray(wrapped) ? wrapped : raw;
70
+ const body = candidate;
71
+ if (!body.claimSchema || typeof body.claimSchema !== "object") return null;
72
+ return migrateRubric({ ...body, "@type": "Rubric" });
73
+ }
74
+ var EMPTY_INPUTS = {
75
+ deedDid: "",
76
+ collectionId: "",
77
+ rubric: null,
78
+ claimSchemaSnapshot: null,
79
+ evalEngineUrl: ""
80
+ };
81
+ function migrateRubric(rubric) {
82
+ const review = rubric.review;
83
+ if (!review) return rubric;
84
+ let next = review;
85
+ if (next.route?.matrixRoom === "collection") {
86
+ const { route: _retired, ...withoutRoute } = next;
87
+ next = withoutRoute;
88
+ }
89
+ const assignTo = next.assignTo;
90
+ if (assignTo && "matrixUserId" in assignTo) {
91
+ const { matrixUserId, assigneeDid, ...rest } = assignTo;
92
+ const nextDid = typeof assigneeDid === "string" && assigneeDid ? assigneeDid : typeof matrixUserId === "string" && matrixUserId ? matrixUserIdToDid(matrixUserId) : void 0;
93
+ next = { ...next, assignTo: { ...rest, ...nextDid ? { assigneeDid: nextDid } : {} } };
94
+ }
95
+ return next === review ? rubric : { ...rubric, review: next };
96
+ }
97
+ function parseEvalRubricInputs(raw) {
98
+ try {
99
+ const parsed = typeof raw === "string" ? JSON.parse(raw || "{}") : raw || {};
100
+ const rubric = parsed.rubric && typeof parsed.rubric === "object" && !Array.isArray(parsed.rubric) ? migrateRubric(parsed.rubric) : null;
101
+ const snapshot = parsed.claimSchemaSnapshot && typeof parsed.claimSchemaSnapshot === "object" && Array.isArray(parsed.claimSchemaSnapshot.fields) ? { fields: parsed.claimSchemaSnapshot.fields, proof: typeof parsed.claimSchemaSnapshot.proof === "string" ? parsed.claimSchemaSnapshot.proof : "" } : null;
102
+ return {
103
+ deedDid: typeof parsed.deedDid === "string" ? parsed.deedDid : "",
104
+ collectionId: typeof parsed.collectionId === "string" ? parsed.collectionId : "",
105
+ rubric,
106
+ claimSchemaSnapshot: snapshot,
107
+ evalEngineUrl: typeof parsed.evalEngineUrl === "string" ? parsed.evalEngineUrl : ""
108
+ };
109
+ } catch {
110
+ return { ...EMPTY_INPUTS };
111
+ }
112
+ }
113
+ function serializeEvalRubricInputs(inputs) {
114
+ return JSON.stringify(inputs);
115
+ }
116
+
117
+ // src/core/lib/actionRegistry/actions/evalRubric/schemaGate.ts
118
+ var compiledValidator = null;
119
+ function resetRubricSchemaCache() {
120
+ compiledValidator = null;
121
+ }
122
+ async function getValidator(fetchSchema, evalEngineUrl) {
123
+ if (compiledValidator) return compiledValidator;
124
+ const schema = await fetchSchema(evalEngineUrl);
125
+ if (!schema || typeof schema !== "object") throw new Error("the rules service returned no schema");
126
+ const validate = new Ajv2020({ allErrors: true, strict: false }).compile(schema);
127
+ compiledValidator = validate;
128
+ return validate;
129
+ }
130
+ async function validateRubricShape(body, fetchSchema, evalEngineUrl) {
131
+ if (typeof fetchSchema !== "function") return { ok: false, reason: "The rules service is not available to check these rules." };
132
+ let validate;
133
+ try {
134
+ validate = await getValidator(fetchSchema, evalEngineUrl);
135
+ } catch (error) {
136
+ return { ok: false, reason: error instanceof Error ? error.message : String(error) };
137
+ }
138
+ if (validate(buildRubricEnvelope(body))) return { ok: true, problems: [] };
139
+ let errors = validate.errors ?? [];
140
+ if (errors.length > 0 && errors.every((error) => error.keyword === "additionalProperties")) {
141
+ resetRubricSchemaCache();
142
+ try {
143
+ validate = await getValidator(fetchSchema, evalEngineUrl);
144
+ } catch (error) {
145
+ return { ok: false, reason: error instanceof Error ? error.message : String(error) };
146
+ }
147
+ if (validate(buildRubricEnvelope(body))) return { ok: true, problems: [] };
148
+ errors = validate.errors ?? [];
149
+ }
150
+ return { ok: true, problems: translateAjvErrors(errors) };
151
+ }
152
+ var SCHEMA_PROBLEM_MESSAGE = "This rule has a setting the rules service will not accept.";
153
+ var SCHEMA_UNKNOWN_KEY_PREFIX = "The rules service doesn\u2019t recognise";
154
+ function unknownKeyMessage(key) {
155
+ return `${SCHEMA_UNKNOWN_KEY_PREFIX} '${key}' \u2014 the rules service may be out of date; refresh and try again.`;
156
+ }
157
+ function translateAjvErrors(errors) {
158
+ const seen = /* @__PURE__ */ new Set();
159
+ const diagnostics = [];
160
+ for (const error of errors) {
161
+ const path = sectionPath(bodyPath(error.instancePath));
162
+ const unknownKey = error.keyword === "additionalProperties" ? String(error.params?.additionalProperty ?? "") : "";
163
+ const dedupeKey = `${path}@@${unknownKey}`;
164
+ if (seen.has(dedupeKey)) continue;
165
+ seen.add(dedupeKey);
166
+ diagnostics.push({ code: "RUB_SCHEMA", severity: "error", message: unknownKey ? unknownKeyMessage(unknownKey) : SCHEMA_PROBLEM_MESSAGE, path });
167
+ }
168
+ return diagnostics;
169
+ }
170
+ function bodyPath(instancePath) {
171
+ if (instancePath === "/rubric") return "";
172
+ return instancePath.startsWith("/rubric/") ? instancePath.slice("/rubric".length) : instancePath;
173
+ }
174
+ var RULE_ROOT = /^(\/gates\/\d+|\/scoring\/criteria\/\d+|\/review\/tasks\/\d+|\/derived\/\d+)/;
175
+ function sectionPath(path) {
176
+ const rule = RULE_ROOT.exec(path);
177
+ if (rule) return rule[1];
178
+ if (path.startsWith("/claimSchema")) {
179
+ if (path.startsWith("/claimSchema/proof")) return "/claimSchema/proof";
180
+ if (path.startsWith("/claimSchema/protocol")) return "/claimSchema/protocol";
181
+ if (path.startsWith("/claimSchema/resource")) return "/claimSchema/resource";
182
+ return "/claimSchema";
183
+ }
184
+ if (path.startsWith("/review/assignTo")) return "/review/assignTo";
185
+ if (path.startsWith("/review")) return "/review";
186
+ if (path.startsWith("/scoring")) return "/scoring";
187
+ if (path.startsWith("/settlement")) return "/settlement";
188
+ if (path.startsWith("/derived")) return "/derived";
189
+ if (path.startsWith("/unique")) return "/unique";
190
+ if (path.startsWith("/frequency")) return "/frequency";
191
+ return "";
192
+ }
193
+
194
+ // src/core/lib/actionRegistry/actions/evalRubric/pathGrammar.ts
195
+ var FORM_SEGMENT = "[A-Za-z0-9_-]+(?::[A-Za-z0-9_-]+)?";
196
+
197
+ // src/core/lib/actionRegistry/actions/evalRubric/fieldCatalog.ts
198
+ var SEGMENT = new RegExp(`^${FORM_SEGMENT}$`);
199
+ var NAME_PATH = new RegExp(`^${FORM_SEGMENT}(?:\\.${FORM_SEGMENT})*$`);
200
+ function scalarKind(type, inputType) {
201
+ switch (type) {
202
+ case "text":
203
+ if (inputType === "number") return "number";
204
+ if (inputType === "date" || inputType === "datetime-local") return "date";
205
+ return "text";
206
+ case "comment":
207
+ return "text";
208
+ case "rating":
209
+ case "slider":
210
+ return "number";
211
+ case "dropdown":
212
+ case "radiogroup":
213
+ return "choice";
214
+ case "checkbox":
215
+ case "tagbox":
216
+ case "ranking":
217
+ return "multichoice";
218
+ case "boolean":
219
+ return "boolean";
220
+ case "file":
221
+ return "file";
222
+ case "signaturepad":
223
+ return "signature";
224
+ case "geopoint":
225
+ return "geo";
226
+ default:
227
+ return void 0;
228
+ }
229
+ }
230
+ function normalizeChoices(raw) {
231
+ if (!Array.isArray(raw)) return [];
232
+ const out = [];
233
+ for (const entry of raw) {
234
+ let value = "";
235
+ let text = "";
236
+ if (typeof entry === "string" || typeof entry === "number") {
237
+ value = String(entry);
238
+ text = String(entry);
239
+ } else if (entry && typeof entry === "object") {
240
+ const obj = entry;
241
+ if (obj.value === void 0 || obj.value === null) continue;
242
+ value = String(obj.value);
243
+ text = obj.text === void 0 || obj.text === null ? value : stripHtml(String(obj.text));
244
+ } else {
245
+ continue;
246
+ }
247
+ out.push({ value, text });
248
+ }
249
+ return out;
250
+ }
251
+ function segmentChoices(raw) {
252
+ return normalizeChoices(raw).filter((choice) => SEGMENT.test(choice.value));
253
+ }
254
+ function innerField(el, path, fallbackKind) {
255
+ const type = typeof el.cellType === "string" && el.cellType ? el.cellType : typeof el.type === "string" ? el.type : "";
256
+ const kind = scalarKind(type, el.inputType) ?? fallbackKind;
257
+ if (!kind) return void 0;
258
+ const choices = kind === "choice" || kind === "multichoice" ? normalizeChoices(el.choices) : void 0;
259
+ return {
260
+ path,
261
+ kind,
262
+ title: titleOf(el),
263
+ isRequired: el.isRequired === true,
264
+ ...choices && choices.length > 0 ? { choices } : {}
265
+ };
266
+ }
267
+ function extractRubricFieldCatalog(surveyTemplate, proof = "") {
268
+ const root = surveyTemplate?.question ?? surveyTemplate;
269
+ if (!root || typeof root !== "object") return { fields: [], proof };
270
+ const fields = [];
271
+ const seen = /* @__PURE__ */ new Set();
272
+ const walk = (elements) => {
273
+ if (!Array.isArray(elements)) return;
274
+ for (const el of elements) {
275
+ if (!el || typeof el !== "object") continue;
276
+ if (el.type === "panel" && Array.isArray(el.elements)) {
277
+ walk(el.elements);
278
+ continue;
279
+ }
280
+ const name = typeof el.name === "string" ? el.name.trim() : "";
281
+ const type = typeof el.type === "string" ? el.type : "";
282
+ if (!name || !NAME_PATH.test(name) || seen.has(name) || type === "html" || type === "expression") continue;
283
+ const field = extractQuestion(el, name, type);
284
+ if (!field) continue;
285
+ seen.add(name);
286
+ fields.push(field);
287
+ }
288
+ };
289
+ if (Array.isArray(root.pages) && root.pages.length > 0) {
290
+ for (const page of root.pages) walk(page.elements);
291
+ }
292
+ walk(root.elements);
293
+ return { fields, proof };
294
+ }
295
+ function extractQuestion(el, name, type) {
296
+ const base = { path: `$${name}`, title: titleOf(el), isRequired: el.isRequired === true };
297
+ if (type === "imagepicker") {
298
+ return { ...base, kind: el.multiSelect === true ? "multichoice" : "choice", choices: normalizeChoices(el.choices) };
299
+ }
300
+ const scalar = scalarKind(type, el.inputType);
301
+ if (scalar) {
302
+ const choices = scalar === "choice" || scalar === "multichoice" ? normalizeChoices(el.choices) : void 0;
303
+ return { ...base, kind: scalar, ...choices && choices.length > 0 ? { choices } : {} };
304
+ }
305
+ switch (type) {
306
+ case "matrix": {
307
+ const rows = segmentChoices(el.rows);
308
+ const choices = normalizeChoices(el.columns);
309
+ const columns = rows.map(
310
+ (row) => ({ path: `$${name}.${row.value}`, kind: "choice", title: `${base.title} \u2014 ${row.text}`, isRequired: base.isRequired, choices })
311
+ );
312
+ return { ...base, kind: "keyed_choice", rows, choices, columns };
313
+ }
314
+ case "matrixdropdown": {
315
+ const rows = segmentChoices(el.rows);
316
+ const columns = [];
317
+ for (const rawCol of Array.isArray(el.columns) ? el.columns : []) {
318
+ const col = rawCol;
319
+ const colName = typeof col?.name === "string" ? col.name.trim() : "";
320
+ if (!colName || !SEGMENT.test(colName)) continue;
321
+ for (const row of rows) {
322
+ const cell = innerField(col, `$${name}.${row.value}.${colName}`, "choice");
323
+ if (cell) columns.push({ ...cell, title: `${base.title} \u2014 ${row.text} / ${titleOf(col) || colName}` });
324
+ }
325
+ }
326
+ return { ...base, kind: "cells", rows, columns };
327
+ }
328
+ case "matrixdynamic": {
329
+ const columns = [];
330
+ for (const rawCol of Array.isArray(el.columns) ? el.columns : []) {
331
+ const col = rawCol;
332
+ const colName = typeof col?.name === "string" ? col.name.trim() : "";
333
+ if (!colName || !SEGMENT.test(colName)) continue;
334
+ const inner = innerField(col, `$${name}[*].${colName}`, "choice");
335
+ if (inner) columns.push(inner);
336
+ }
337
+ return { ...base, kind: "rows", columns };
338
+ }
339
+ case "paneldynamic": {
340
+ const columns = [];
341
+ const walkTemplate = (elements) => {
342
+ if (!Array.isArray(elements)) return;
343
+ for (const child of elements) {
344
+ if (!child || typeof child !== "object") continue;
345
+ if (child.type === "panel" && Array.isArray(child.elements)) {
346
+ walkTemplate(child.elements);
347
+ continue;
348
+ }
349
+ const childName = typeof child.name === "string" ? child.name.trim() : "";
350
+ const childType = typeof child.type === "string" ? child.type : "";
351
+ if (!childName || !SEGMENT.test(childName) || childType === "html" || childType === "expression") continue;
352
+ const inner = innerField(child, `$${name}[*].${childName}`);
353
+ if (inner) columns.push(inner);
354
+ }
355
+ };
356
+ walkTemplate(el.templateElements);
357
+ return { ...base, kind: "rows", columns };
358
+ }
359
+ case "multipletext": {
360
+ const columns = [];
361
+ for (const rawItem of Array.isArray(el.items) ? el.items : []) {
362
+ const item = rawItem;
363
+ const itemName = typeof item?.name === "string" ? item.name.trim() : "";
364
+ if (!itemName || !SEGMENT.test(itemName)) continue;
365
+ columns.push({ path: `$${name}.${itemName}`, kind: "text", title: titleOf(item) || humanize(itemName), isRequired: item.isRequired === true });
366
+ }
367
+ return { ...base, kind: "keyed_text", columns };
368
+ }
369
+ default:
370
+ return void 0;
371
+ }
372
+ }
373
+ function titleOf(el) {
374
+ const title = typeof el.title === "string" ? stripHtml(el.title.trim()) : "";
375
+ return title || humanize(typeof el.name === "string" ? el.name : "");
376
+ }
377
+ function humanize(name) {
378
+ const bare = name.split(".").map((seg) => seg.includes(":") ? seg.split(":").pop() : seg).join(".");
379
+ return bare.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
380
+ }
381
+ function stripHtml(s) {
382
+ return s.replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
383
+ }
384
+
385
+ // src/core/lib/actionRegistry/actions/evalRubric/expression.ts
386
+ var EXPR_FUNCTIONS = {
387
+ min: { minArgs: 2, maxArgs: Infinity },
388
+ max: { minArgs: 2, maxArgs: Infinity },
389
+ clamp: { minArgs: 3, maxArgs: 3 },
390
+ abs: { minArgs: 1, maxArgs: 1 },
391
+ floor: { minArgs: 1, maxArgs: 1 },
392
+ ceil: { minArgs: 1, maxArgs: 1 },
393
+ round: { minArgs: 1, maxArgs: 1 },
394
+ sum: { minArgs: 1, maxArgs: 1 },
395
+ avg: { minArgs: 1, maxArgs: 1 },
396
+ count: { minArgs: 1, maxArgs: 1 },
397
+ countWhere: { minArgs: 3, maxArgs: 3 },
398
+ daysBetween: { minArgs: 2, maxArgs: 2 },
399
+ hoursBetween: { minArgs: 2, maxArgs: 2 },
400
+ yearsBetween: { minArgs: 2, maxArgs: 2 },
401
+ distanceMeters: { minArgs: 2, maxArgs: 2 },
402
+ length: { minArgs: 1, maxArgs: 1 }
403
+ };
404
+ var COUNT_WHERE_OPS = ["==", "!=", ">", ">=", "<", "<="];
405
+ var COUNT_WHERE_ORDERING_OPS = [">", ">=", "<", "<="];
406
+ var ExpressionSyntaxError = class extends Error {
407
+ constructor(message, position) {
408
+ super(`${message} (at offset ${position})`);
409
+ this.position = position;
410
+ this.name = "ExpressionSyntaxError";
411
+ }
412
+ };
413
+ var IDENT = /[A-Za-z_][A-Za-z0-9_]*/y;
414
+ var NUMBER = /(?:\d+\.?\d*|\.\d+)/y;
415
+ var FIELD_REF = new RegExp(`\\$${FORM_SEGMENT}(?:\\.${FORM_SEGMENT}|\\[\\*\\])*`, "y");
416
+ var SIGIL_REF = /~[A-Za-z_][A-Za-z0-9_]*/y;
417
+ var CTX_REF = /ctx(?:\.[A-Za-z][A-Za-z0-9]*)+/y;
418
+ function parseExpression(src) {
419
+ let pos = 0;
420
+ const skipWs = () => {
421
+ while (pos < src.length && /\s/.test(src[pos])) pos++;
422
+ };
423
+ const match = (re) => {
424
+ re.lastIndex = pos;
425
+ const m = re.exec(src);
426
+ if (!m) return void 0;
427
+ pos = re.lastIndex;
428
+ return m[0];
429
+ };
430
+ const fail = (message) => {
431
+ throw new ExpressionSyntaxError(message, pos);
432
+ };
433
+ const parseExpr = () => {
434
+ let left = parseTerm();
435
+ for (; ; ) {
436
+ skipWs();
437
+ const ch = src[pos];
438
+ if (ch !== "+" && ch !== "-") return left;
439
+ pos++;
440
+ left = { kind: "bin", op: ch, left, right: parseTerm() };
441
+ }
442
+ };
443
+ const parseTerm = () => {
444
+ let left = parseFactor();
445
+ for (; ; ) {
446
+ skipWs();
447
+ const ch = src[pos];
448
+ if (ch !== "*" && ch !== "/") return left;
449
+ pos++;
450
+ left = { kind: "bin", op: ch, left, right: parseFactor() };
451
+ }
452
+ };
453
+ const parseFactor = () => {
454
+ skipWs();
455
+ const ch = src[pos];
456
+ if (ch === void 0) return fail("unexpected end of expression");
457
+ if (ch === "-") {
458
+ pos++;
459
+ return { kind: "neg", operand: parseFactor() };
460
+ }
461
+ if (ch === "(") {
462
+ pos++;
463
+ const inner = parseExpr();
464
+ skipWs();
465
+ if (src[pos] !== ")") return fail("expected ')'");
466
+ pos++;
467
+ return inner;
468
+ }
469
+ if (ch === "'" || ch === '"') {
470
+ const quote = ch;
471
+ const start = ++pos;
472
+ while (pos < src.length && src[pos] !== quote) pos++;
473
+ if (pos >= src.length) return fail("unterminated string literal");
474
+ return { kind: "str", value: src.slice(start, pos++) };
475
+ }
476
+ if (ch === "$") {
477
+ const ref = match(FIELD_REF);
478
+ if (!ref) return fail("malformed $field reference");
479
+ return { kind: "ref", ref };
480
+ }
481
+ if (ch === "~") {
482
+ const ref = match(SIGIL_REF);
483
+ if (!ref) return fail("malformed ~-reference");
484
+ return { kind: "ref", ref };
485
+ }
486
+ const numeric = match(NUMBER);
487
+ if (numeric) return { kind: "num", value: Number(numeric) };
488
+ const ctxRef = match(CTX_REF);
489
+ if (ctxRef) return { kind: "ref", ref: ctxRef };
490
+ const ident = match(IDENT);
491
+ if (ident) {
492
+ if (ident === "true" || ident === "false") return { kind: "bool", value: ident === "true" };
493
+ skipWs();
494
+ if (src[pos] !== "(") return fail(`'${ident}' is not a value \u2014 bare identifiers must be function calls`);
495
+ pos++;
496
+ const args = [];
497
+ skipWs();
498
+ if (src[pos] === ")") {
499
+ pos++;
500
+ } else {
501
+ for (; ; ) {
502
+ args.push(parseExpr());
503
+ skipWs();
504
+ if (src[pos] === ",") {
505
+ pos++;
506
+ continue;
507
+ }
508
+ if (src[pos] === ")") {
509
+ pos++;
510
+ break;
511
+ }
512
+ return fail("expected ',' or ')'");
513
+ }
514
+ }
515
+ return { kind: "call", name: ident, args };
516
+ }
517
+ return fail(`unexpected character '${ch}'`);
518
+ };
519
+ const root = parseExpr();
520
+ skipWs();
521
+ if (pos < src.length) fail(`unexpected trailing input '${src.slice(pos)}'`);
522
+ return root;
523
+ }
524
+
525
+ // src/core/lib/actionRegistry/actions/evalRubric/validate.ts
526
+ var RUBRIC_OPERATOR_KINDS = {
527
+ present: "all",
528
+ empty: "all",
529
+ "==": ["text", "number", "date", "choice", "boolean"],
530
+ "!=": ["text", "number", "date", "choice", "boolean"],
531
+ ">": ["number", "date"],
532
+ ">=": ["number", "date"],
533
+ "<": ["number", "date"],
534
+ "<=": ["number", "date"],
535
+ between: ["number", "date"],
536
+ approx: ["number"],
537
+ in: ["text", "number", "choice"],
538
+ notIn: ["text", "number", "choice"],
539
+ matches: ["text"],
540
+ startsWith: ["text"],
541
+ endsWith: ["text"],
542
+ lengthBetween: ["text"],
543
+ contains: ["multichoice"],
544
+ containsAll: ["multichoice"],
545
+ containsAny: ["multichoice"],
546
+ subsetOf: ["multichoice"],
547
+ countBetween: ["multichoice", "rows"],
548
+ isTrue: ["boolean"],
549
+ isFalse: ["boolean"],
550
+ before: ["date"],
551
+ after: ["date"],
552
+ withinWindow: ["date"],
553
+ withinDays: ["date"],
554
+ notInFuture: ["date"],
555
+ mediaTypeIn: ["file", "signature"],
556
+ maxSizeMB: ["file", "signature"],
557
+ withinBoundary: ["geo"],
558
+ withinRadius: ["geo"]
559
+ };
560
+ function operatorsForKind(kind) {
561
+ return Object.keys(RUBRIC_OPERATOR_KINDS).filter((op) => {
562
+ const kinds = RUBRIC_OPERATOR_KINDS[op];
563
+ return kinds === "all" || kinds.includes(kind);
564
+ });
565
+ }
566
+ var GATE_FAILURE_CLASSES = ["refuted", "invalid_evidence", "out_of_authority", "insufficient_evidence", "requires_human_review"];
567
+ var CTX_TOKEN_KIND = {
568
+ "ctx.now": "date",
569
+ "ctx.collection.startDate": "date",
570
+ "ctx.collection.endDate": "date",
571
+ "ctx.claim.submitter": "text",
572
+ "ctx.claim.submitterAddress": "text",
573
+ "ctx.claim.submissionDate": "date",
574
+ "ctx.submitter.priorClaimCount": "number",
575
+ "ctx.submitter.priorApprovedCount": "number",
576
+ "ctx.collection.projectBoundary": "geo"
577
+ };
578
+ var FIELD_REF2 = new RegExp(`^\\$${FORM_SEGMENT}(?:\\.${FORM_SEGMENT}|\\[\\*\\])*$`);
579
+ var ROW_REF = new RegExp(`^\\.${FORM_SEGMENT}$`);
580
+ var FIELD_ROOT = new RegExp(`^\\$${FORM_SEGMENT}`);
581
+ var DERIVED_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
582
+ var EXT_REF = /^ext\.([A-Za-z0-9_-]+)\.(valid|score|reason)$/;
583
+ var AI_REF = /^ai\.([A-Za-z0-9_-]+)\.(valid|reason)$/;
584
+ var SOURCE_NAME = /^[A-Za-z0-9_-]+$/;
585
+ function validateRubric(body, catalog, authoringCatalog) {
586
+ const diags = [];
587
+ const error = (code, message, path) => diags.push({ code, severity: "error", message, path });
588
+ const warn = (code, message, path) => diags.push({ code, severity: "warning", message, path });
589
+ const fieldIndex = indexCatalog(catalog);
590
+ const snapshotIndex = authoringCatalog ? indexCatalog(authoringCatalog) : void 0;
591
+ const derivedNames = new Set((body.derived ?? []).map((d) => d.name));
592
+ const sourcesByName = new Map((body.sources ?? []).map((s) => [s.name, s]));
593
+ const aiChecksByName = new Map((body.aiChecks ?? []).map((c) => [c.name, c]));
594
+ const checkFieldRef = (ref, path) => {
595
+ if (!FIELD_REF2.test(ref)) {
596
+ error("RUB_FIELD_PATH", `malformed field path '${ref}'`, path);
597
+ return void 0;
598
+ }
599
+ const field = fieldIndex.get(ref);
600
+ if (field) {
601
+ const snapshotKind = snapshotIndex?.get(ref)?.kind;
602
+ if (snapshotKind && snapshotKind !== field.kind) {
603
+ error("RUB_SCHEMA_DRIFT", `'${ref}' changed from ${snapshotKind} to ${field.kind} since the rules were authored`, path);
604
+ return void 0;
605
+ }
606
+ return field.kind;
607
+ }
608
+ if (snapshotIndex?.has(ref)) {
609
+ error("RUB_SCHEMA_DRIFT", `'${ref}' no longer exists on the claim form (deleted or renamed since the rules were authored)`, path);
610
+ return void 0;
611
+ }
612
+ const rootName = FIELD_ROOT.exec(ref)?.[0] ?? ref;
613
+ if (ref !== rootName && fieldIndex.has(rootName)) {
614
+ error("RUB_FIELD_PATH", `'${ref}' does not address a row/column of ${rootName}`, path);
615
+ } else {
616
+ error("RUB_FIELD_NOT_IN_SCHEMA", `'${ref}' does not resolve to a question in the bound form`, path);
617
+ }
618
+ return void 0;
619
+ };
620
+ const checkExtRef = (ref, path) => {
621
+ const match = EXT_REF.exec(ref);
622
+ if (!match) {
623
+ error("RUB_EXT_FIELD_INVALID", `'${ref}' is not a valid external-check reference \u2014 use ext.<name>.valid, .score or .reason`, path);
624
+ return void 0;
625
+ }
626
+ const [, name, fieldName] = match;
627
+ const source = sourcesByName.get(name);
628
+ if (!source) {
629
+ error("RUB_EXT_SOURCE_UNKNOWN", `no external check named '${name}' is defined`, path);
630
+ return void 0;
631
+ }
632
+ if (fieldName === "valid" && source.expect !== "boolean") {
633
+ error("RUB_EXT_FIELD_INVALID", `external check '${name}' returns a score, not a yes/no \u2014 read ext.${name}.score`, path);
634
+ return void 0;
635
+ }
636
+ if (fieldName === "score" && source.expect !== "score") {
637
+ error("RUB_EXT_FIELD_INVALID", `external check '${name}' returns a yes/no, not a score \u2014 read ext.${name}.valid`, path);
638
+ return void 0;
639
+ }
640
+ return fieldName === "score" ? "number" : fieldName === "valid" ? "boolean" : "text";
641
+ };
642
+ const checkAiRef = (ref, path) => {
643
+ const match = AI_REF.exec(ref);
644
+ if (!match) {
645
+ error("RUB_AI_FIELD_INVALID", `'${ref}' is not a valid AI-check reference \u2014 use ai.<name>.valid or ai.<name>.reason`, path);
646
+ return void 0;
647
+ }
648
+ const [, name, fieldName] = match;
649
+ if (!aiChecksByName.has(name)) {
650
+ error("RUB_AI_CHECK_UNKNOWN", `no AI check named '${name}' is defined`, path);
651
+ return void 0;
652
+ }
653
+ return fieldName === "valid" ? "boolean" : "text";
654
+ };
655
+ const checkConditionField = (ref, path, forEachTarget) => {
656
+ if (typeof ref !== "string" || ref.length === 0) {
657
+ error("RUB_FIELD_PATH", "condition field must be a reference string", path);
658
+ return void 0;
659
+ }
660
+ if (ref.startsWith("~")) {
661
+ if (!derivedNames.has(ref.slice(1))) {
662
+ error("RUB_UNKNOWN_REF", `derived value '${ref}' is not defined`, path);
663
+ return void 0;
664
+ }
665
+ return "number";
666
+ }
667
+ if (ref.startsWith("ext.")) return checkExtRef(ref, path);
668
+ if (ref.startsWith("ai.")) return checkAiRef(ref, path);
669
+ if (ref.startsWith(".")) {
670
+ if (!forEachTarget) {
671
+ error("RUB_FIELD_PATH", `row-relative ref '${ref}' is only legal inside a forEach`, path);
672
+ return void 0;
673
+ }
674
+ if (!ROW_REF.test(ref)) {
675
+ error("RUB_FIELD_PATH", `malformed row-relative ref '${ref}'`, path);
676
+ return void 0;
677
+ }
678
+ return checkFieldRef(`${forEachTarget}[*]${ref}`, path);
679
+ }
680
+ if (ref.startsWith("$")) return checkFieldRef(ref, path);
681
+ error("RUB_FIELD_PATH", `'${ref}' is not a field reference ($answer, ~derived, or a row-relative .column)`, path);
682
+ return void 0;
683
+ };
684
+ const isRefString = (v) => typeof v === "string" && (v.startsWith("$") || v.startsWith("~") || v.startsWith("ctx.") || v.startsWith("ext.") || v.startsWith("ai."));
685
+ const unwrapLiteral = (v) => {
686
+ if (v !== null && typeof v === "object" && !Array.isArray(v) && "@value" in v) {
687
+ return { literal: v["@value"] };
688
+ }
689
+ return isRefString(v) ? void 0 : { literal: v };
690
+ };
691
+ const checkValueRef = (ref, path) => {
692
+ if (ref.startsWith("$")) {
693
+ if (FIELD_REF2.test(ref) && (fieldIndex.has(ref) || snapshotIndex?.has(ref))) return checkFieldRef(ref, path);
694
+ error("RUB_UNKNOWN_REF", `'${ref}' does not resolve \u2014 wrap a literal that starts with a sigil in {"@value": \u2026}`, path);
695
+ return void 0;
696
+ }
697
+ if (ref.startsWith("~")) {
698
+ if (!derivedNames.has(ref.slice(1))) {
699
+ error("RUB_UNKNOWN_REF", `derived value '${ref}' is not defined`, path);
700
+ return void 0;
701
+ }
702
+ return "number";
703
+ }
704
+ if (ref.startsWith("ext.")) return checkExtRef(ref, path);
705
+ if (ref.startsWith("ai.")) return checkAiRef(ref, path);
706
+ if (RUBRIC_CTX_TOKENS.includes(ref)) return CTX_TOKEN_KIND[ref];
707
+ error("RUB_UNKNOWN_REF", `unknown context token '${ref}'`, path);
708
+ return void 0;
709
+ };
710
+ const isDateString = (v) => typeof v === "string" && !Number.isNaN(Date.parse(v));
711
+ const literalFitsKind = (literal, kind) => {
712
+ switch (kind) {
713
+ case "number":
714
+ return typeof literal === "number";
715
+ case "boolean":
716
+ return typeof literal === "boolean";
717
+ case "date":
718
+ return isDateString(literal);
719
+ default:
720
+ return typeof literal === "string";
721
+ }
722
+ };
723
+ const checkComparable = (value, kind, path) => {
724
+ if (isRefString(value)) {
725
+ const refKind = checkValueRef(value, path);
726
+ if (refKind && refKind !== kind) error("RUB_VALUE_TYPE", `'${value}' is a ${refKind}, expected a ${kind}`, path);
727
+ return;
728
+ }
729
+ const unwrapped = unwrapLiteral(value);
730
+ if (!unwrapped || !literalFitsKind(unwrapped.literal, kind)) {
731
+ error("RUB_VALUE_TYPE", `expected a ${kind} value`, path);
732
+ }
733
+ };
734
+ const checkPair = (value, path, check) => {
735
+ if (!Array.isArray(value) || value.length !== 2) {
736
+ error("RUB_VALUE_TYPE", "expected a [min, max] pair", path);
737
+ return;
738
+ }
739
+ check(value[0], `${path}/0`);
740
+ check(value[1], `${path}/1`);
741
+ };
742
+ const checkInteger = (value, path) => {
743
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 0) error("RUB_VALUE_TYPE", "expected a non-negative integer", path);
744
+ };
745
+ const checkSimpleCondition = (cond, path, forEachTarget) => {
746
+ const kind = checkConditionField(cond.field, `${path}/field`, forEachTarget);
747
+ const legalKinds = RUBRIC_OPERATOR_KINDS[cond.op];
748
+ if (!legalKinds) {
749
+ error("RUB_OPERATOR_TYPE_MISMATCH", `unknown operator '${String(cond.op)}'`, `${path}/op`);
750
+ return;
751
+ }
752
+ if (kind === void 0) return;
753
+ if (legalKinds !== "all" && !legalKinds.includes(kind)) {
754
+ error("RUB_OPERATOR_TYPE_MISMATCH", `'${cond.op}' is not legal for a ${kind} field`, `${path}/op`);
755
+ return;
756
+ }
757
+ const value = cond.value;
758
+ const valuePath = `${path}/value`;
759
+ switch (cond.op) {
760
+ case "present":
761
+ case "empty":
762
+ case "isTrue":
763
+ case "isFalse":
764
+ case "withinWindow":
765
+ case "notInFuture":
766
+ if (value !== void 0) error("RUB_VALUE_TYPE", `'${cond.op}' takes no value`, valuePath);
767
+ break;
768
+ case "==":
769
+ case "!=": {
770
+ if (isRefString(value)) {
771
+ const refKind = checkValueRef(value, valuePath);
772
+ if (refKind && refKind !== kind) error("RUB_VALUE_TYPE", `'${value}' is a ${refKind}, expected a ${kind}`, valuePath);
773
+ break;
774
+ }
775
+ const unwrapped = unwrapLiteral(value);
776
+ if (!unwrapped || !literalFitsKind(unwrapped.literal, kind)) error("RUB_VALUE_TYPE", `expected a ${kind} value`, valuePath);
777
+ break;
778
+ }
779
+ case ">":
780
+ case ">=":
781
+ case "<":
782
+ case "<=":
783
+ checkComparable(value, kind === "date" ? "date" : "number", valuePath);
784
+ break;
785
+ case "between":
786
+ checkPair(value, valuePath, (v, p) => checkComparable(v, kind === "date" ? "date" : "number", p));
787
+ break;
788
+ case "approx":
789
+ checkComparable(value, "number", valuePath);
790
+ if (typeof cond.tolerance !== "number" || cond.tolerance < 0) error("RUB_VALUE_TYPE", "'approx' needs a non-negative numeric tolerance", `${path}/tolerance`);
791
+ break;
792
+ case "in":
793
+ case "notIn":
794
+ case "containsAll":
795
+ case "containsAny":
796
+ case "subsetOf": {
797
+ if (!Array.isArray(value)) {
798
+ error("RUB_VALUE_TYPE", "expected a list of values", valuePath);
799
+ break;
800
+ }
801
+ const elementKind = kind === "number" ? "number" : "text";
802
+ for (const [i, element] of value.entries()) {
803
+ if (isRefString(element)) checkValueRef(element, `${valuePath}/${i}`);
804
+ else if (!literalFitsKind(element, elementKind)) error("RUB_VALUE_TYPE", `list entry must be a ${elementKind === "number" ? "number" : "string"}`, `${valuePath}/${i}`);
805
+ }
806
+ break;
807
+ }
808
+ case "contains": {
809
+ if (isRefString(value)) checkValueRef(value, valuePath);
810
+ else {
811
+ const unwrapped = unwrapLiteral(value);
812
+ if (!unwrapped || typeof unwrapped.literal !== "string" && typeof unwrapped.literal !== "number" && typeof unwrapped.literal !== "boolean") {
813
+ error("RUB_VALUE_TYPE", "'contains' expects a single literal value", valuePath);
814
+ }
815
+ }
816
+ break;
817
+ }
818
+ case "matches": {
819
+ if (typeof value !== "string" || value.length === 0) {
820
+ error("RUB_VALUE_TYPE", "'matches' expects a regex pattern string", valuePath);
821
+ break;
822
+ }
823
+ try {
824
+ new RegExp(value);
825
+ } catch {
826
+ error("RUB_VALUE_TYPE", `'${value}' is not a valid pattern`, valuePath);
827
+ break;
828
+ }
829
+ const unsafeReason = unsafeRegexReason(value);
830
+ if (unsafeReason) error("RUB_REGEX_UNSAFE", `pattern outside the safe subset: ${unsafeReason}`, valuePath);
831
+ break;
832
+ }
833
+ case "startsWith":
834
+ case "endsWith": {
835
+ const unwrapped = unwrapLiteral(value);
836
+ if (!unwrapped || typeof unwrapped.literal !== "string") error("RUB_VALUE_TYPE", `'${cond.op}' expects a string`, valuePath);
837
+ break;
838
+ }
839
+ case "lengthBetween":
840
+ case "countBetween":
841
+ checkPair(value, valuePath, checkInteger);
842
+ break;
843
+ case "before":
844
+ case "after":
845
+ checkComparable(value, "date", valuePath);
846
+ break;
847
+ case "withinDays":
848
+ checkInteger(value, valuePath);
849
+ break;
850
+ case "mediaTypeIn":
851
+ if (!Array.isArray(value) || value.length === 0 || value.some((v) => typeof v !== "string")) {
852
+ error("RUB_VALUE_TYPE", "'mediaTypeIn' expects a list of MIME globs", valuePath);
853
+ }
854
+ break;
855
+ case "maxSizeMB":
856
+ if (typeof value !== "number" || value <= 0) error("RUB_VALUE_TYPE", "'maxSizeMB' expects a positive number", valuePath);
857
+ break;
858
+ case "withinBoundary":
859
+ if (value !== "ctx.collection.projectBoundary") {
860
+ error("RUB_VALUE_TYPE", "'withinBoundary' expects ctx.collection.projectBoundary", valuePath);
861
+ }
862
+ break;
863
+ case "withinRadius": {
864
+ const spec = value;
865
+ if (!spec || typeof spec !== "object" || Array.isArray(spec)) {
866
+ error("RUB_VALUE_TYPE", "'withinRadius' expects { center, meters }", valuePath);
867
+ break;
868
+ }
869
+ if (typeof spec.meters !== "number" || spec.meters <= 0) error("RUB_VALUE_TYPE", "meters must be a positive number", `${valuePath}/meters`);
870
+ if (typeof spec.center === "string") {
871
+ const centerKind = checkValueRef(spec.center, `${valuePath}/center`);
872
+ if (centerKind && centerKind !== "geo") error("RUB_VALUE_TYPE", "center must be a geo answer or {lat, lng}", `${valuePath}/center`);
873
+ } else {
874
+ const center = spec.center;
875
+ if (!center || typeof center.lat !== "number" || typeof center.lng !== "number") {
876
+ error("RUB_VALUE_TYPE", "center must be a geo answer or {lat, lng}", `${valuePath}/center`);
877
+ }
878
+ }
879
+ break;
880
+ }
881
+ }
882
+ };
883
+ const checkCondition = (cond, path, forEachTarget) => {
884
+ if (!cond || typeof cond !== "object") return;
885
+ if ("forEach" in cond && cond.forEach !== void 0) {
886
+ const targetKind = typeof cond.forEach === "string" && cond.forEach.startsWith("$") ? checkFieldRef(cond.forEach, `${path}/forEach`) : void 0;
887
+ if (typeof cond.forEach !== "string" || !cond.forEach.startsWith("$")) {
888
+ error("RUB_FIELD_PATH", "forEach must reference a repeating-rows question", `${path}/forEach`);
889
+ } else if (targetKind && targetKind !== "rows") {
890
+ error("RUB_OPERATOR_TYPE_MISMATCH", `forEach needs a repeating-rows question, '${cond.forEach}' is a ${targetKind}`, `${path}/forEach`);
891
+ }
892
+ if (cond.every) checkCondition(cond.every, `${path}/every`, cond.forEach);
893
+ if (cond.some) checkCondition(cond.some, `${path}/some`, cond.forEach);
894
+ return;
895
+ }
896
+ if ("all" in cond || "any" in cond) {
897
+ const key = "all" in cond ? "all" : "any";
898
+ const members = "all" in cond ? cond.all : cond.any;
899
+ if (!Array.isArray(members) || members.length === 0) {
900
+ error("RUB_SCHEMA", `'${key}' needs at least one check inside it`, `${path}/${key}`);
901
+ return;
902
+ }
903
+ members.forEach((member, i) => checkCondition(member, `${path}/${key}/${i}`, forEachTarget));
904
+ return;
905
+ }
906
+ if ("not" in cond) {
907
+ checkCondition(cond.not, `${path}/not`, forEachTarget);
908
+ return;
909
+ }
910
+ if ("atLeast" in cond || "of" in cond) {
911
+ const { atLeast: n, of: members } = cond;
912
+ if (!Array.isArray(members) || members.length === 0) {
913
+ error("RUB_SCHEMA", `'atLeast' needs a non-empty 'of' list of checks`, `${path}/of`);
914
+ return;
915
+ }
916
+ if (typeof n !== "number" || !Number.isInteger(n) || n < 1) {
917
+ error("RUB_VALUE_TYPE", `'atLeast' must be a whole number, 1 or more \u2014 got ${String(n)}`, `${path}/atLeast`);
918
+ } else if (n > members.length) {
919
+ error("RUB_QUORUM_INVALID", `atLeast ${n} of ${members.length} \u2014 atLeast cannot exceed the number of checks in 'of'`, `${path}/atLeast`);
920
+ }
921
+ members.forEach((member, i) => checkCondition(member, `${path}/of/${i}`, forEachTarget));
922
+ return;
923
+ }
924
+ if ("field" in cond) checkSimpleCondition(cond, path, forEachTarget);
925
+ };
926
+ const checkExpression = (expr, path, earlierDerived) => {
927
+ let root;
928
+ try {
929
+ root = parseExpression(expr);
930
+ } catch (e) {
931
+ error("RUB_EXPR_SYNTAX", e instanceof ExpressionSyntaxError ? e.message : String(e), path);
932
+ return;
933
+ }
934
+ const checkNode = (node, allowLiteral) => {
935
+ switch (node.kind) {
936
+ case "str":
937
+ case "bool":
938
+ if (!allowLiteral) error("RUB_EXPR_SYNTAX", "string and true/false literals are only legal as countWhere's operator or value", path);
939
+ break;
940
+ case "ref": {
941
+ const ref = node.ref;
942
+ if (ref.startsWith("$")) checkFieldRef(ref, path);
943
+ else if (ref.startsWith("~")) {
944
+ const name = ref.slice(1);
945
+ if (earlierDerived.has(name)) break;
946
+ if (derivedNames.has(name)) error("RUB_EXPR_SYNTAX", `'${ref}' must be defined earlier in the derived list (no cycles)`, path);
947
+ else error("RUB_UNKNOWN_REF", `derived value '${ref}' is not defined`, path);
948
+ } else if (!RUBRIC_CTX_TOKENS.includes(ref)) {
949
+ error("RUB_UNKNOWN_REF", `unknown context token '${ref}'`, path);
950
+ }
951
+ break;
952
+ }
953
+ case "call": {
954
+ const signature = EXPR_FUNCTIONS[node.name];
955
+ if (!signature) {
956
+ error("RUB_EXPR_UNKNOWN_FUNC", `'${node.name}' is not in the function library`, path);
957
+ break;
958
+ }
959
+ if (node.args.length < signature.minArgs || node.args.length > signature.maxArgs) {
960
+ error("RUB_EXPR_SYNTAX", `'${node.name}' takes ${signature.minArgs === signature.maxArgs ? signature.minArgs : `${signature.minArgs}+`} argument(s)`, path);
961
+ }
962
+ if (node.name === "sum" || node.name === "avg" || node.name === "count" || node.name === "countWhere") {
963
+ const selector = node.args[0];
964
+ if (!selector || selector.kind !== "ref" || !selector.ref.includes("[*]")) {
965
+ error("RUB_EXPR_SYNTAX", `'${node.name}' needs a $rows[*].column selector`, path);
966
+ }
967
+ }
968
+ if (node.name === "countWhere") {
969
+ const op = node.args[1];
970
+ const value = node.args[2];
971
+ if (!op || op.kind !== "str" || !COUNT_WHERE_OPS.includes(op.value)) {
972
+ error("RUB_EXPR_SYNTAX", `countWhere's operator must be one of ${COUNT_WHERE_OPS.join(" ")}`, path);
973
+ } else if (value) {
974
+ const ordering = COUNT_WHERE_ORDERING_OPS.includes(op.value);
975
+ if (ordering && value.kind !== "num" && value.kind !== "ref") {
976
+ error("RUB_EXPR_SYNTAX", `countWhere's '${op.value}' compares numbers \u2014 only == and != take a true/false or text value`, path);
977
+ }
978
+ }
979
+ }
980
+ node.args.forEach((arg, i) => checkNode(arg, node.name === "countWhere" && (i === 1 || i === 2)));
981
+ break;
982
+ }
983
+ case "bin":
984
+ checkNode(node.left, false);
985
+ checkNode(node.right, false);
986
+ break;
987
+ case "neg":
988
+ checkNode(node.operand, false);
989
+ break;
990
+ default:
991
+ break;
992
+ }
993
+ };
994
+ checkNode(root, false);
995
+ };
996
+ const seenCodes = /* @__PURE__ */ new Map();
997
+ const checkDuplicate = (code, path) => {
998
+ if (typeof code !== "string" || !code) return;
999
+ const first = seenCodes.get(code);
1000
+ if (first) error("RUB_DUPLICATE_CODE", `'${code}' already used at ${first}`, path);
1001
+ else seenCodes.set(code, path);
1002
+ };
1003
+ const earlier = /* @__PURE__ */ new Set();
1004
+ (body.derived ?? []).forEach((derived, i) => {
1005
+ if (typeof derived.name !== "string" || !DERIVED_NAME.test(derived.name)) {
1006
+ error("RUB_EXPR_SYNTAX", `'${String(derived.name)}' is not a valid derived name`, `/derived/${i}/name`);
1007
+ }
1008
+ checkDuplicate(derived.name, `/derived/${i}/name`);
1009
+ if (typeof derived.expr === "string") checkExpression(derived.expr, `/derived/${i}/expr`, earlier);
1010
+ earlier.add(derived.name);
1011
+ });
1012
+ (body.gates ?? []).forEach((gate, i) => {
1013
+ checkDuplicate(gate.code, `/gates/${i}/code`);
1014
+ const klass = gate.class;
1015
+ if (typeof klass !== "string" || !GATE_FAILURE_CLASSES.includes(klass)) {
1016
+ error("RUB_SCHEMA", `reject rule '${gate.code}' is missing the outcome it declares (it must be one of ${GATE_FAILURE_CLASSES.join(", ")})`, `/gates/${i}/class`);
1017
+ }
1018
+ if (gate.appliesWhen) checkCondition(gate.appliesWhen, `/gates/${i}/appliesWhen`);
1019
+ checkCondition(gate.when, `/gates/${i}/when`);
1020
+ });
1021
+ const scoring = body.scoring;
1022
+ const criteria = scoring?.criteria ?? [];
1023
+ const reviewTaskIds = new Set((body.review?.tasks ?? []).map((t) => t.id));
1024
+ if (scoring) {
1025
+ const { approveAt, partialFloor, reviewFloor } = scoring;
1026
+ if (typeof partialFloor === "number" && approveAt <= partialFloor) {
1027
+ error("RUB_THRESHOLD_ORDER", `approveAt (${approveAt}) must be greater than partialFloor (${partialFloor})`, "/scoring");
1028
+ }
1029
+ if (typeof reviewFloor === "number" && approveAt <= reviewFloor) {
1030
+ error("RUB_THRESHOLD_ORDER", `approveAt (${approveAt}) must be greater than reviewFloor (${reviewFloor})`, "/scoring");
1031
+ }
1032
+ if (typeof partialFloor === "number" && typeof reviewFloor === "number" && partialFloor < reviewFloor) {
1033
+ error("RUB_THRESHOLD_ORDER", `partialFloor (${partialFloor}) must be at least reviewFloor (${reviewFloor})`, "/scoring");
1034
+ }
1035
+ const quorum = scoring.quorum;
1036
+ if (quorum && typeof quorum.need === "number" && typeof quorum.of === "number" && quorum.need > quorum.of) {
1037
+ error("RUB_QUORUM_INVALID", `quorum needs ${quorum.need} of ${quorum.of} \u2014 need cannot exceed of`, "/scoring/quorum");
1038
+ }
1039
+ if (scoring.method !== "weighted_average" && criteria.length > 0) {
1040
+ warn("RUB_WEIGHT_IGNORED", `'${scoring.method}' combines rules by min/count and never reads weights \u2014 the stars set on your scored rules have no effect`, "/scoring/method");
1041
+ }
1042
+ criteria.forEach((criterion, i) => {
1043
+ const path = `/scoring/criteria/${i}`;
1044
+ checkDuplicate(criterion.code, `${path}/code`);
1045
+ if (typeof criterion.weight !== "number" || !Number.isInteger(criterion.weight) || criterion.weight < 1 || criterion.weight > 5) {
1046
+ error("RUB_WEIGHT_INVALID", `weight must be an integer 1..5, got ${String(criterion.weight)}`, `${path}/weight`);
1047
+ }
1048
+ if (criterion.appliesWhen) checkCondition(criterion.appliesWhen, `${path}/appliesWhen`);
1049
+ checkScoreNode(criterion, `${path}/score`);
1050
+ });
1051
+ }
1052
+ function checkScoreNode(criterion, path) {
1053
+ const score = criterion.score;
1054
+ if (!score || typeof score !== "object") return;
1055
+ switch (score["@type"]) {
1056
+ case "BooleanScore":
1057
+ checkCondition(score.when, `${path}/when`);
1058
+ break;
1059
+ case "BandsScore":
1060
+ checkNumericValueRef(score.value, `${path}/value`, "BandsScore");
1061
+ (score.bands ?? []).forEach((band, i) => {
1062
+ if ("op" in band) checkNumericAnchor(band.value, `${path}/bands/${i}/value`);
1063
+ });
1064
+ checkBandsReachable(score.bands, `${path}/bands`);
1065
+ break;
1066
+ case "LinearScore":
1067
+ checkNumericValueRef(score.value, `${path}/value`, "LinearScore");
1068
+ checkNumericAnchor(score.zeroAt, `${path}/zeroAt`);
1069
+ checkNumericAnchor(score.fullAt, `${path}/fullAt`);
1070
+ break;
1071
+ case "LevelsScore": {
1072
+ let elseAt = -1;
1073
+ (score.levels ?? []).forEach((level, i) => {
1074
+ if (elseAt >= 0) warn("RUB_UNREACHABLE_BAND", `level shadowed by the catch-all level at index ${elseAt}`, `${path}/levels/${i}`);
1075
+ if ("else" in level && level.else) elseAt = i;
1076
+ else if ("when" in level) checkCondition(level.when, `${path}/levels/${i}/when`);
1077
+ });
1078
+ break;
1079
+ }
1080
+ case "MapScore": {
1081
+ if (typeof score.value === "string" && score.value.startsWith("$")) checkFieldRef(score.value, `${path}/value`);
1082
+ else if (typeof score.value === "string" && score.value.startsWith("~")) checkValueRef(score.value, `${path}/value`);
1083
+ else error("RUB_FIELD_PATH", "MapScore.value must be a $answer or ~derived ref", `${path}/value`);
1084
+ break;
1085
+ }
1086
+ case "DeductionsScore":
1087
+ (score.deduct ?? []).forEach((deduction, i) => {
1088
+ checkDuplicate(deduction.code, `${path}/deduct/${i}/code`);
1089
+ checkCondition(deduction.when, `${path}/deduct/${i}/when`);
1090
+ });
1091
+ break;
1092
+ case "ManualScore":
1093
+ if (typeof score.field === "string" && score.field.startsWith("$")) checkFieldRef(score.field, `${path}/field`);
1094
+ else error("RUB_FIELD_PATH", "ManualScore.field must be a $answer ref", `${path}/field`);
1095
+ if (!reviewTaskIds.has(score.reviewTask)) {
1096
+ error("RUB_REVIEW_TASK_UNMAPPED", `ManualScore names review task '${String(score.reviewTask)}' but no such task exists`, `${path}/reviewTask`);
1097
+ }
1098
+ break;
1099
+ default:
1100
+ break;
1101
+ }
1102
+ }
1103
+ function checkNumericAnchor(value, path) {
1104
+ if (typeof value === "number") return;
1105
+ if (typeof value !== "string" || !value.startsWith("~")) {
1106
+ error("RUB_VALUE_TYPE", `'${String(value)}' is not a number \u2014 an anchor takes a number or a ~calculated value`, path);
1107
+ return;
1108
+ }
1109
+ const kind = checkValueRef(value, path);
1110
+ if (kind && kind !== "number") error("RUB_VALUE_TYPE", `'${value}' is a ${kind}, expected a number`, path);
1111
+ }
1112
+ function checkNumericValueRef(value, path, node) {
1113
+ if (typeof value !== "string" || !(value.startsWith("$") || value.startsWith("~") || value.startsWith("ext."))) {
1114
+ error("RUB_FIELD_PATH", `${node}.value must be a $answer, ~derived, or ext.<name>.score ref`, path);
1115
+ return;
1116
+ }
1117
+ const kind = value.startsWith("$") ? checkFieldRef(value, path) : checkValueRef(value, path);
1118
+ if (kind && kind !== "number") error("RUB_OPERATOR_TYPE_MISMATCH", `${node} needs a number, '${value}' is a ${kind}`, path);
1119
+ }
1120
+ function checkBandsReachable(bands, path) {
1121
+ if (!Array.isArray(bands)) return;
1122
+ let elseAt = -1;
1123
+ bands.forEach((band, i) => {
1124
+ if (elseAt >= 0) {
1125
+ warn("RUB_UNREACHABLE_BAND", `band shadowed by the catch-all band at index ${elseAt}`, `${path}/${i}`);
1126
+ return;
1127
+ }
1128
+ if ("else" in band && band.else) {
1129
+ elseAt = i;
1130
+ return;
1131
+ }
1132
+ for (let j = 0; j < i; j++) {
1133
+ const earlierBand = bands[j];
1134
+ if ("else" in earlierBand) continue;
1135
+ if ("op" in band && bandCovers(earlierBand, band)) {
1136
+ warn("RUB_UNREACHABLE_BAND", `band shadowed by the band at index ${j}`, `${path}/${i}`);
1137
+ break;
1138
+ }
1139
+ }
1140
+ });
1141
+ }
1142
+ (body.review?.tasks ?? []).forEach((task, i) => {
1143
+ const path = `/review/tasks/${i}`;
1144
+ checkDuplicate(task.id, `${path}/id`);
1145
+ (task.show ?? []).forEach((ref, j) => {
1146
+ if (typeof ref === "string" && ref.startsWith("$")) checkFieldRef(ref, `${path}/show/${j}`);
1147
+ else error("RUB_FIELD_PATH", "show entries must be $answer refs", `${path}/show/${j}`);
1148
+ });
1149
+ const map = task.map ?? {};
1150
+ for (const [answer, verdict] of Object.entries(map)) {
1151
+ if (verdict !== "approve" && verdict !== "partial" && verdict !== "reject") {
1152
+ error("RUB_VALUE_TYPE", `answer '${answer}' maps to '${String(verdict)}' \u2014 must be approve | partial | reject`, `${path}/map/${answer}`);
1153
+ }
1154
+ }
1155
+ const required = task.answer?.type === "boolean" ? ["true", "false"] : task.answer?.options ?? [];
1156
+ for (const answer of required) {
1157
+ if (!(answer in map)) error("RUB_REVIEW_ANSWER_UNMAPPED", `answer '${answer}' has no verdict mapping`, `${path}/map`);
1158
+ }
1159
+ });
1160
+ const seenSourceNames = /* @__PURE__ */ new Set();
1161
+ (body.sources ?? []).forEach((source, i) => {
1162
+ const path = `/sources/${i}`;
1163
+ const name = source.name;
1164
+ if (typeof name !== "string" || !SOURCE_NAME.test(name)) {
1165
+ error("RUB_SCHEMA", `external check name '${String(name)}' may use only letters, numbers, dashes and underscores`, `${path}/name`);
1166
+ } else if (seenSourceNames.has(name)) {
1167
+ error("RUB_SCHEMA", `two external checks are named '${name}' \u2014 a name must be unique so ext.${name}.* points at one`, `${path}/name`);
1168
+ } else {
1169
+ seenSourceNames.add(name);
1170
+ }
1171
+ if (typeof source.endpoint !== "string" || !/^https?:\/\//.test(source.endpoint)) {
1172
+ error("RUB_SCHEMA", `external check '${String(name)}' needs a web address starting with http:// or https://`, `${path}/endpoint`);
1173
+ }
1174
+ if (typeof source.audience !== "string" || !/^did:web:/.test(source.audience)) {
1175
+ error("RUB_SCHEMA", `external check '${String(name)}' needs an audience starting with did:web:`, `${path}/audience`);
1176
+ }
1177
+ const send = source.send;
1178
+ if (!send || typeof send !== "object" || Array.isArray(send) || Object.keys(send).length === 0) {
1179
+ error("RUB_SCHEMA", `external check '${String(name)}' must send at least one value`, `${path}/send`);
1180
+ } else {
1181
+ for (const [key, value] of Object.entries(send)) {
1182
+ if (!SOURCE_NAME.test(key)) {
1183
+ error("RUB_SCHEMA", `external check '${String(name)}' has a send key '${key}' that may use only letters, numbers, dashes and underscores`, `${path}/send/${key}`);
1184
+ }
1185
+ if (isRefString(value)) checkValueRef(value, `${path}/send/${key}`);
1186
+ }
1187
+ }
1188
+ });
1189
+ const seenAiNames = /* @__PURE__ */ new Set();
1190
+ (body.aiChecks ?? []).forEach((check, i) => {
1191
+ const path = `/aiChecks/${i}`;
1192
+ const name = check.name;
1193
+ if (typeof name !== "string" || !SOURCE_NAME.test(name)) {
1194
+ error("RUB_SCHEMA", `AI check name '${String(name)}' may use only letters, numbers, dashes and underscores`, `${path}/name`);
1195
+ } else if (seenAiNames.has(name)) {
1196
+ error("RUB_SCHEMA", `two AI checks are named '${name}' \u2014 a name must be unique so ai.${name}.* points at one`, `${path}/name`);
1197
+ } else {
1198
+ seenAiNames.add(name);
1199
+ }
1200
+ const instructions = check.instructions;
1201
+ if (!Array.isArray(instructions) || instructions.filter((rule) => typeof rule === "string" && rule.trim().length > 0).length === 0) {
1202
+ error("RUB_SCHEMA", `AI check '${String(name)}' has nothing to check \u2014 write at least one rule for the AI`, `${path}/instructions`);
1203
+ }
1204
+ const send = check.send;
1205
+ if (!send || typeof send !== "object" || Array.isArray(send) || Object.keys(send).length === 0) {
1206
+ error("RUB_SCHEMA", `AI check '${String(name)}' must send at least one value`, `${path}/send`);
1207
+ } else {
1208
+ for (const [key, value] of Object.entries(send)) {
1209
+ if (!SOURCE_NAME.test(key)) {
1210
+ error("RUB_SCHEMA", `AI check '${String(name)}' has a send key '${key}' that may use only letters, numbers, dashes and underscores`, `${path}/send/${key}`);
1211
+ }
1212
+ if (isRefString(value)) checkValueRef(value, `${path}/send/${key}`);
1213
+ }
1214
+ }
1215
+ });
1216
+ (body.unique?.by ?? []).forEach((entry, i) => {
1217
+ const ref = typeof entry === "string" ? entry : entry?.ref;
1218
+ const path = `/unique/by/${i}`;
1219
+ if (typeof ref !== "string" || ref.length === 0) {
1220
+ error("RUB_FIELD_PATH", "a unique-key entry must be a field reference", path);
1221
+ } else if (ref.startsWith("~")) {
1222
+ error("RUB_UNIQUE_KEY_DERIVED", `calculated value '${ref}' cannot be part of the unique key \u2014 pick answer fields`, path);
1223
+ } else if (ref.startsWith("$")) {
1224
+ checkFieldRef(ref, path);
1225
+ } else {
1226
+ error("RUB_FIELD_PATH", `'${ref}' is not an answer-field reference ($answer)`, path);
1227
+ }
1228
+ });
1229
+ const prorateBy = body.settlement?.onPartial?.prorateBy;
1230
+ if (prorateBy !== void 0 && prorateBy !== "total" && prorateBy !== "none") {
1231
+ if (typeof prorateBy === "string" && (prorateBy.startsWith("$") || prorateBy.startsWith("~"))) {
1232
+ checkValueRef(prorateBy, "/settlement/onPartial/prorateBy");
1233
+ } else {
1234
+ error("RUB_VALUE_TYPE", "prorateBy must be 'total', 'none', or a $answer/~derived fraction", "/settlement/onPartial/prorateBy");
1235
+ }
1236
+ }
1237
+ if ((body.gates ?? []).length === 0 && criteria.length === 0) {
1238
+ error("RUB_NO_RULES", "no rules at all \u2014 this rubric would approve (and charge for) every claim; add at least one rule", "");
1239
+ }
1240
+ return diags;
1241
+ }
1242
+ function indexCatalog(catalog) {
1243
+ const index = /* @__PURE__ */ new Map();
1244
+ const add = (field) => {
1245
+ index.set(field.path, field);
1246
+ field.columns?.forEach(add);
1247
+ };
1248
+ for (const field of catalog.fields ?? []) add(field);
1249
+ return index;
1250
+ }
1251
+ function bandCovers(earlier, later) {
1252
+ if (!("op" in earlier)) return false;
1253
+ const [a, b] = [earlier.value, later.value];
1254
+ if (typeof a !== "number" || typeof b !== "number") return false;
1255
+ switch (earlier.op) {
1256
+ case ">=":
1257
+ return later.op === ">=" || later.op === ">" ? a <= b : later.op === "==" ? b >= a : false;
1258
+ case ">":
1259
+ return later.op === ">" ? a <= b : later.op === ">=" ? a < b : later.op === "==" ? b > a : false;
1260
+ case "<=":
1261
+ return later.op === "<=" || later.op === "<" ? a >= b : later.op === "==" ? b <= a : false;
1262
+ case "<":
1263
+ return later.op === "<" ? a >= b : later.op === "<=" ? a > b : later.op === "==" ? b < a : false;
1264
+ case "==":
1265
+ return later.op === "==" && a === b;
1266
+ default:
1267
+ return false;
1268
+ }
1269
+ }
1270
+ function firstOverlap(a, b) {
1271
+ if (a.wild || b.wild) return true;
1272
+ return a.char === b.char;
1273
+ }
1274
+ function unsafeRegexReason(src) {
1275
+ let pos = 0;
1276
+ const parseAlternation = () => {
1277
+ let unbounded = false;
1278
+ let ambiguous = false;
1279
+ const firsts = [];
1280
+ let first = { wild: true };
1281
+ let atStart = true;
1282
+ for (; ; ) {
1283
+ const seq = parseSequence();
1284
+ if (atStart) {
1285
+ first = seq.first;
1286
+ atStart = false;
1287
+ }
1288
+ unbounded = seq.unbounded || unbounded;
1289
+ ambiguous = seq.ambiguous || ambiguous;
1290
+ firsts.push(seq.first);
1291
+ if (src[pos] === "|") {
1292
+ pos++;
1293
+ continue;
1294
+ }
1295
+ break;
1296
+ }
1297
+ if (firsts.length > 1) {
1298
+ for (let i = 0; i < firsts.length && !ambiguous; i++) {
1299
+ for (let j = i + 1; j < firsts.length; j++) {
1300
+ if (firstOverlap(firsts[i], firsts[j])) {
1301
+ ambiguous = true;
1302
+ break;
1303
+ }
1304
+ }
1305
+ }
1306
+ }
1307
+ return { unbounded, ambiguous, first };
1308
+ };
1309
+ const parseSequence = () => {
1310
+ let unbounded = false;
1311
+ let ambiguous = false;
1312
+ let first = { wild: true };
1313
+ let atStart = true;
1314
+ while (pos < src.length && src[pos] !== "|" && src[pos] !== ")") {
1315
+ const atom = parseAtom();
1316
+ const quantifier = parseQuantifier();
1317
+ if (atStart) {
1318
+ first = quantifier?.nullable ? { wild: true } : atom.first;
1319
+ atStart = false;
1320
+ }
1321
+ if (quantifier?.unbounded) {
1322
+ if (atom.unbounded) throw new Error("unbounded repetition nested inside unbounded repetition");
1323
+ if (atom.ambiguous) throw new Error("a repeated group with overlapping choices can backtrack catastrophically");
1324
+ unbounded = true;
1325
+ }
1326
+ unbounded = unbounded || atom.unbounded;
1327
+ ambiguous = ambiguous || atom.ambiguous;
1328
+ }
1329
+ return { unbounded, ambiguous, first };
1330
+ };
1331
+ const parseAtom = () => {
1332
+ const ch = src[pos];
1333
+ if (ch === "(") {
1334
+ pos++;
1335
+ if (src[pos] === "?") {
1336
+ if (src[pos + 1] === ":") pos += 2;
1337
+ else throw new Error("lookaround and special groups are not allowed");
1338
+ }
1339
+ const inner = parseAlternation();
1340
+ if (src[pos] !== ")") throw new Error("unbalanced group");
1341
+ pos++;
1342
+ return { unbounded: inner.unbounded, ambiguous: inner.ambiguous, first: { wild: true } };
1343
+ }
1344
+ if (ch === "[") {
1345
+ pos++;
1346
+ if (src[pos] === "^") pos++;
1347
+ if (src[pos] === "]") pos++;
1348
+ while (pos < src.length && src[pos] !== "]") {
1349
+ if (src[pos] === "\\") pos++;
1350
+ pos++;
1351
+ }
1352
+ if (src[pos] !== "]") throw new Error("unterminated character class");
1353
+ pos++;
1354
+ return { unbounded: false, ambiguous: false, first: { wild: true } };
1355
+ }
1356
+ if (ch === "\\") {
1357
+ const next = src[pos + 1];
1358
+ if (next === void 0) throw new Error("dangling escape");
1359
+ if (/[1-9]/.test(next)) throw new Error("backreferences are not allowed");
1360
+ if (next === "k") throw new Error("named backreferences are not allowed");
1361
+ pos += 2;
1362
+ return { unbounded: false, ambiguous: false, first: { wild: true } };
1363
+ }
1364
+ if (ch === "*" || ch === "+" || ch === "?") throw new Error("quantifier without a target");
1365
+ pos++;
1366
+ const first = ch === "." || ch === "^" || ch === "$" ? { wild: true } : { wild: false, char: ch };
1367
+ return { unbounded: false, ambiguous: false, first };
1368
+ };
1369
+ const parseQuantifier = () => {
1370
+ const ch = src[pos];
1371
+ if (ch === "*") {
1372
+ pos++;
1373
+ if (src[pos] === "?") pos++;
1374
+ return { unbounded: true, nullable: true };
1375
+ }
1376
+ if (ch === "+") {
1377
+ pos++;
1378
+ if (src[pos] === "?") pos++;
1379
+ return { unbounded: true, nullable: false };
1380
+ }
1381
+ if (ch === "?") {
1382
+ pos++;
1383
+ if (src[pos] === "?") pos++;
1384
+ return { unbounded: false, nullable: true };
1385
+ }
1386
+ if (ch === "{") {
1387
+ const match = /^\{(\d+)(?:(,)(\d+)?)?\}/.exec(src.slice(pos));
1388
+ if (!match) return null;
1389
+ pos += match[0].length;
1390
+ if (src[pos] === "?") pos++;
1391
+ return { unbounded: match[2] === "," && match[3] === void 0, nullable: Number(match[1]) === 0 };
1392
+ }
1393
+ return null;
1394
+ };
1395
+ try {
1396
+ parseAlternation();
1397
+ if (pos < src.length) throw new Error("unbalanced group");
1398
+ return null;
1399
+ } catch (e) {
1400
+ return e instanceof Error ? e.message : String(e);
1401
+ }
1402
+ }
1403
+
1404
+ export {
1405
+ REPEAT_SUBMISSIONS_OPTIONS,
1406
+ DIFFERENT_WHEN_OPTIONS,
1407
+ WHAT_IS_COLLECTED_MAX,
1408
+ DIFFERENT_WHEN_OTHER_MAX,
1409
+ normalizeDifferentWhen,
1410
+ normalizeRepeatSubmissions,
1411
+ composeCollectionDescription,
1412
+ FORM_SEGMENT,
1413
+ extractRubricFieldCatalog,
1414
+ buildRubricEnvelope,
1415
+ parsePublishedRubric,
1416
+ parseEvalRubricInputs,
1417
+ serializeEvalRubricInputs,
1418
+ validateRubricShape,
1419
+ SCHEMA_UNKNOWN_KEY_PREFIX,
1420
+ operatorsForKind,
1421
+ validateRubric
1422
+ };
1423
+ //# sourceMappingURL=chunk-NIXT2SBH.js.map