@laceio/sdk 0.1.1 → 0.1.2-canary.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 (388) hide show
  1. package/dist/{TransactionBuilder-DrB3NVTi.cjs → TransactionBuilder-CCjOn7NA.cjs} +42 -0
  2. package/dist/{TransactionBuilder-V6aLx4SV.js → TransactionBuilder-CIzdw18M.js} +1 -1
  3. package/dist/{_polyfill-buffer-patch-BnPVerlG.cjs → _polyfill-buffer-patch-CM8X7JiY.cjs} +21 -2
  4. package/dist/_polyfill-buffer-patch-yNxN4d5E.js +1467 -0
  5. package/dist/_web-crypto-random-bytes-Bo-GTcRS.js +197 -0
  6. package/dist/acc-module-4iIUv6My.cjs +27654 -0
  7. package/dist/acc-module-Cmj8EsIb.js +27624 -0
  8. package/dist/account-BOQruszJ.js +6 -0
  9. package/dist/account-BUOj4pYJ.cjs +11 -0
  10. package/dist/account-call-7wnopBq0.cjs +5 -0
  11. package/dist/account-call-B9d_2Xwi.js +4 -0
  12. package/dist/account-call-Bd4Rpbvt.cjs +323 -0
  13. package/dist/account-call-C3CkDqEC.js +276 -0
  14. package/dist/account-guards-BtjTGxDZ.cjs +42 -0
  15. package/dist/account-guards-D9Lu5T3W.js +36 -0
  16. package/dist/account-tokens-DvkOFVON.js +16 -0
  17. package/dist/account-tokens-nwcvwLu4.cjs +21 -0
  18. package/dist/{activity-type.stable-BJEfeLxL.cjs → activity-type-Ch6ljxBy.cjs} +2 -1
  19. package/dist/{activity-type.stable-C76_hWd7.js → activity-type-GsJGWs-3.js} +2 -1
  20. package/dist/address-B9ntKL8K.js +13761 -0
  21. package/dist/address-BXp-mY8H.cjs +11270 -0
  22. package/dist/{address-book-address-validator-DIUolI-s.js → address-book-address-validator-0J9XAADH.js} +2 -2
  23. package/dist/address-book-address-validator-DK0dnsRS.cjs +41 -0
  24. package/dist/address-book-address-validator-Di_ywo8M.js +39 -0
  25. package/dist/{address-book-address-validator-DNwQGlOB.cjs → address-book-address-validator-Dte_YQ2L.cjs} +2 -2
  26. package/dist/artefact-loader-BWWYAD7E.cjs +183 -0
  27. package/dist/artefact-loader-Dik4HIfv.js +160 -0
  28. package/dist/auto-dismiss-failure-on-success-C-qoJuid.cjs +37 -0
  29. package/dist/auto-dismiss-failure-on-success-s8MGDEIu.js +31 -0
  30. package/dist/bip32-D6wd_QMn.cjs +3851 -0
  31. package/dist/bitcoin-data-provider-BYPSmuZS.js +21 -0
  32. package/dist/bitcoin-data-provider-w1oEDSU3.cjs +26 -0
  33. package/dist/bitcoin.cjs +45 -0
  34. package/dist/bitcoin.d.ts +29906 -1
  35. package/dist/bitcoin.js +20 -0
  36. package/dist/{blockfrost-tx-submit-provider-DPTrapz-.js → blockfrost-tx-submit-provider-CBWQ0wK9.js} +5 -157
  37. package/dist/{blockfrost-tx-submit-provider-BAIzV5o3.cjs → blockfrost-tx-submit-provider-CLNQ5ycR.cjs} +3 -167
  38. package/dist/bn-d3nSOIf7.cjs +2553 -0
  39. package/dist/browser-B1eMbDwh.js +7468 -0
  40. package/dist/bytes.vo-BB7_4JK6.js +23 -0
  41. package/dist/bytes.vo-BNRquqaO.cjs +34 -0
  42. package/dist/cardano-DfPwhwm-.js +3 -0
  43. package/dist/{cardano-network-id.vo-DSxrFk9S.cjs → cardano-network-id.vo-BEDPn6Li.cjs} +1 -1
  44. package/dist/{cardano-network-id.vo-CK1tNQDg.js → cardano-network-id.vo-Cfpvbod9.js} +1 -1
  45. package/dist/cardano.cjs +22 -18
  46. package/dist/cardano.d.ts +16956 -1716
  47. package/dist/cardano.js +16 -11
  48. package/dist/client-DXBLHk7K.cjs +808 -0
  49. package/dist/codecs-Cswkg7Tm.cjs +4051 -0
  50. package/dist/codecs-Dc1Krpbt.js +3903 -0
  51. package/dist/{const-C84qHkjp.js → const-BJfIK_G-.js} +4 -4
  52. package/dist/const-BhYOdznB.cjs +42 -0
  53. package/dist/const-BsnjG2_Q.cjs +32071 -0
  54. package/dist/const-CUnCl5U0.js +13 -0
  55. package/dist/{const-DXk2tFyv.js → const-CjmfjBP3.js} +1 -1
  56. package/dist/{const-BDEg2Trq.cjs → const-D-eZIS4n.cjs} +4 -4
  57. package/dist/const-D0CbQlo4.js +154 -0
  58. package/dist/{const-BY8B3_0_.cjs → const-iwzZEE_w.cjs} +1 -1
  59. package/dist/contract-1R86jhSw.js +171 -0
  60. package/dist/contract-MKLzYVkW.cjs +189 -0
  61. package/dist/create-add-accounts-Brqk84vF.js +102 -0
  62. package/dist/create-add-accounts-DzXIh7Ot.cjs +114 -0
  63. package/dist/{delegation-tx-builder-CRpLP6jH.cjs → delegation-tx-builder-CCjiakoy.cjs} +6 -6
  64. package/dist/{delegation-tx-builder-CGVqlaFE.js → delegation-tx-builder-DZFjHDS8.js} +5 -5
  65. package/dist/{deregistration-tx-builder-B-CrUyX6.js → deregistration-tx-builder-Bf6xAYp4.js} +5 -5
  66. package/dist/{deregistration-tx-builder-DZGwB4cz.cjs → deregistration-tx-builder-CQP35yex.cjs} +6 -6
  67. package/dist/device-commitment-hex.vo-5wFtQvDS.js +26 -0
  68. package/dist/device-commitment-hex.vo-CT3RmAug.cjs +31 -0
  69. package/dist/device-readers-CUHYoYOH.js +145 -0
  70. package/dist/device-readers-CdxS2btd.cjs +168 -0
  71. package/dist/device-readers-D_JZeNL2.cjs +8 -0
  72. package/dist/device-readers-DwSNCGPP.js +4 -0
  73. package/dist/dist-BMi5ZjEq.cjs +43175 -0
  74. package/dist/dist-BtIq4XFn.cjs +535 -0
  75. package/dist/dist-C3SHC_Ho.cjs +1394 -0
  76. package/dist/dist-CykEjYEX.cjs +3814 -0
  77. package/dist/dist-Dcsxh3be.cjs +3452 -0
  78. package/dist/dist-DqJfSlTd.cjs +4413 -0
  79. package/dist/dist-nTZ70qj7.cjs +1306 -0
  80. package/dist/{earn-rewards-tx-builder-BDbTDZmD.js → earn-rewards-tx-builder-Bsga3yFb.js} +5 -5
  81. package/dist/{earn-rewards-tx-builder-D5sUT5v8.cjs → earn-rewards-tx-builder-GuxofYns.cjs} +6 -6
  82. package/dist/enc-key-circuits-B7BjgUL9.js +13 -0
  83. package/dist/enc-key-circuits-BLrZrBVI.cjs +24 -0
  84. package/dist/english-Byb9M0E_.cjs +2057 -0
  85. package/dist/envelopes-BGoO_v8m.js +1621 -0
  86. package/dist/envelopes-CH25R-DN.cjs +1722 -0
  87. package/dist/errors-BIftM8ZN.cjs +688 -0
  88. package/dist/errors-DSq5wUwt.js +466 -0
  89. package/dist/esm-HBSUQw3w.js +384 -0
  90. package/dist/esm-LZuaZjMf.cjs +389 -0
  91. package/dist/experimental.cjs +7349 -0
  92. package/dist/experimental.d.ts +86273 -0
  93. package/dist/experimental.js +7184 -0
  94. package/dist/gated-call-CDCVZIK-.cjs +5 -0
  95. package/dist/gated-call-D-tT7P_t.js +722 -0
  96. package/dist/gated-call-D_VT2quk.js +4 -0
  97. package/dist/gated-call-DgJm1Mi_.cjs +787 -0
  98. package/dist/grant-circuits-DswmW3nI.cjs +71 -0
  99. package/dist/grant-circuits-Jxb5y1HW.js +42 -0
  100. package/dist/grant-rules-By07_eDi.js +6824 -0
  101. package/dist/grant-rules-BzVTWXS7.cjs +7099 -0
  102. package/dist/grant-spend-B3Md9L0n.js +215 -0
  103. package/dist/grant-spend-oWmzRsjH.cjs +217 -0
  104. package/dist/grant-status-B2y49iIu.js +2688 -0
  105. package/dist/grant-status-DOr3t_u8.cjs +2820 -0
  106. package/dist/grants-2BZ-qEVQ.js +5 -0
  107. package/dist/grants-BPoLSiMt.cjs +18 -0
  108. package/dist/grants-BoI5uwSF.cjs +272 -0
  109. package/dist/grants-CtofFu-e.js +213 -0
  110. package/dist/{group-cardano-addresses-by-account-B533oVXR.cjs → group-cardano-addresses-by-account-Bp0g4wEY.cjs} +3 -39
  111. package/dist/{group-cardano-addresses-by-account-RHKoEskR.js → group-cardano-addresses-by-account-SR8MMrZf.js} +5 -35
  112. package/dist/{guarded-transaction-signer-Bxl6_XNd.cjs → guarded-transaction-signer-MFpPg98D.cjs} +17 -18
  113. package/dist/{guarded-transaction-signer-CpKLj8Kp.js → guarded-transaction-signer-P6Rp1faj.js} +8 -15
  114. package/dist/hex-D9ITYbwt.cjs +263 -0
  115. package/dist/hex-mkXcV3pN.js +191 -0
  116. package/dist/http-client-B3N-TMxu.cjs +167 -0
  117. package/dist/http-client-TRlhDZGh.js +155 -0
  118. package/dist/identity-BMLuufva.cjs +263 -0
  119. package/dist/identity-DII6f-h7.js +233 -0
  120. package/dist/in-memory-wallet-integration-B2xzxORj.cjs +20741 -0
  121. package/dist/in-memory-wallet-integration-CBRiPjLO.js +130 -0
  122. package/dist/in-memory-wallet-integration-CULUB5Tf.cjs +240 -0
  123. package/dist/{in-memory-wallet-integration-D-qn65Kx.js → in-memory-wallet-integration-ChIOirMW.js} +5 -2
  124. package/dist/{in-memory-wallet-integration-Croiuopx.js → in-memory-wallet-integration-CljprQQV.js} +7 -104
  125. package/dist/{in-memory-wallet-integration-DVh9sRXa.cjs → in-memory-wallet-integration-Cm6P8sk6.cjs} +3 -2
  126. package/dist/in-memory-wallet-integration-TM9bBphA.js +20738 -0
  127. package/dist/{in-memory-wallet-integration-CnLYeX4-.cjs → in-memory-wallet-integration-t9I00R_V.cjs} +17 -108
  128. package/dist/index.cjs +84 -47
  129. package/dist/index.d.ts +37496 -10033
  130. package/dist/index.js +52 -24
  131. package/dist/{init-CLHuAMB-.js → init-0zzs9aqU.js} +4 -4
  132. package/dist/{init-U8c9yHYx.cjs → init-5KcGcBb5.cjs} +1 -1
  133. package/dist/init-8v_n8boO.js +1177 -0
  134. package/dist/{init-CigestoM.js → init-B3-1ghyx.js} +2 -2
  135. package/dist/init-B8U3ABhS.cjs +107 -0
  136. package/dist/init-BJn-8_hf.js +141 -0
  137. package/dist/init-BPU3j8sT.cjs +6 -0
  138. package/dist/init-BRzH6xu-2.cjs +2797 -0
  139. package/dist/init-BmzfDaKL.js +1142 -0
  140. package/dist/{init-C-jErzp5.cjs → init-BopV9ed4.cjs} +2 -2
  141. package/dist/init-BpHTq2R5.js +105 -0
  142. package/dist/init-BpSITBfF.js +39 -0
  143. package/dist/{init-DX4WyB0R.cjs → init-BrdVzxei.cjs} +3 -3
  144. package/dist/{init-LfyMo-sS.cjs → init-BwkU0ruo.cjs} +2 -2
  145. package/dist/{init-CB__aLD7.cjs → init-C-G32J12.cjs} +2 -2
  146. package/dist/init-C00gw1zi.js +422 -0
  147. package/dist/{init-TkPq_Ny_.js → init-C2RgrfZe.js} +1 -1
  148. package/dist/{init-DcYY6zMD.js → init-C8URA2OX.js} +1 -1
  149. package/dist/init-CDkRynJa.js +2796 -0
  150. package/dist/{init-Cg9XdAru.js → init-CNM5m7M2.js} +4 -4
  151. package/dist/init-CR7BfztQ.cjs +18 -0
  152. package/dist/{init-CSHwHnfg.cjs → init-CSDpdu0Q.cjs} +2 -2
  153. package/dist/{init-aJHl-7AO.js → init-CX0AMQUn.js} +2 -2
  154. package/dist/{init-FMGDET-9.js → init-CfTbSEKy.js} +259 -60
  155. package/dist/{init-CR6tpw1B.js → init-Cigr_tKx.js} +47 -43
  156. package/dist/init-CuW7rHNA.js +3584 -0
  157. package/dist/{init-CFYsq82V.js → init-CyAY4Lzl.js} +1 -1
  158. package/dist/init-Cz0rz5fU.cjs +3585 -0
  159. package/dist/{init-BKhH6mVR.cjs → init-D6BxBs7e.cjs} +1 -1
  160. package/dist/init-D8OeObDF.cjs +1141 -0
  161. package/dist/init-D9g1HXYf.cjs +40 -0
  162. package/dist/{init-CNLGJJRx.js → init-DA7zmptx.js} +1 -1
  163. package/dist/{init-DkIc5nqF.cjs → init-DFMiP2ZH.cjs} +1 -1
  164. package/dist/{init-zSzCjoor.js → init-DFjT8YvT.js} +4 -4
  165. package/dist/init-DGjXwWs2.cjs +143 -0
  166. package/dist/init-DHrCbpkW.cjs +121 -0
  167. package/dist/{init-B64zCLxG.cjs → init-DUF4ar8P.cjs} +4 -4
  168. package/dist/init-DlqJuHhl.js +119 -0
  169. package/dist/{init-y2Ra0vZP.js → init-Dnsv155v.js} +3 -3
  170. package/dist/init-DrRdf5sZ.cjs +1176 -0
  171. package/dist/init-DuYENxci.js +17 -0
  172. package/dist/{init-D6DBUsD3.cjs → init-Dv3zKj0r.cjs} +4 -4
  173. package/dist/{init-BtzMZ7Pk.cjs → init-Dy-05ktr.cjs} +1 -1
  174. package/dist/{init-BsCBAGWf.cjs → init-EP0CUWNK.cjs} +2 -2
  175. package/dist/{init-BJVU54pI.cjs → init-EhzD7a8i.cjs} +1 -1
  176. package/dist/{init-w9GEs73W.js → init-Fw89ZmrR.js} +2 -2
  177. package/dist/init-GsT2AEa4.cjs +424 -0
  178. package/dist/{init-Rxohwpmu.js → init-NCjgwCZy.js} +2 -2
  179. package/dist/{init-DxUHsN53.cjs → init-NdhG_VrF.cjs} +6 -6
  180. package/dist/{init-DDdhguVC.js → init-SZ01tARX2.js} +2 -2
  181. package/dist/{init-BAJJzBza.js → init-Y3mkB4XS.js} +2 -2
  182. package/dist/init-c4l6r-o-.js +5 -0
  183. package/dist/{init-Dku4b2lG.js → init-kEfUTuG2.js} +1 -1
  184. package/dist/{init-C7IeJwQR.cjs → init-lzHt4Cli.cjs} +256 -59
  185. package/dist/{init-anYu6XB7.cjs → init-rmt7-fQE.cjs} +2 -2
  186. package/dist/{init-C4Bkib9u.cjs → init-zU-_9Gsp.cjs} +67 -65
  187. package/dist/{is-retriable-error-BU0e3hVI.js → is-retriable-error-BUiVJDwH.js} +1 -1
  188. package/dist/{is-retriable-error-CeeuHqDa.cjs → is-retriable-error-Dpt860if.cjs} +1 -1
  189. package/dist/jubjub-authoriser-D7zDXu3V.js +86 -0
  190. package/dist/jubjub-authoriser-Dgu6o3Sv.cjs +87 -0
  191. package/dist/key-source-5oUBFiC7.cjs +583 -0
  192. package/dist/key-source-B08HukZg.js +2550 -0
  193. package/dist/keyDerivation-D3k9XyHg.js +4077 -0
  194. package/dist/keyDerivation-u0nBA93T.cjs +274 -0
  195. package/dist/{lace-context-CZcNHr4M.js → lace-context-BZciB9c7.js} +4 -4
  196. package/dist/{lace-context-fJTDghdp.cjs → lace-context-DgR6vLli.cjs} +4 -4
  197. package/dist/lib--iqvW4O_.js +2354 -0
  198. package/dist/lib-Yk6Upl5D.cjs +2359 -0
  199. package/dist/{libsodium-wrappers-UH0LaOUE.js → libsodium-wrappers-BhbOA8dQ.js} +3 -1647
  200. package/dist/midnight-account-id.vo-0x9X-r3l.cjs +10 -0
  201. package/dist/midnight-account-id.vo-DjCAGcqc.js +5 -0
  202. package/dist/midnight-engine-DpemplKO.js +5 -0
  203. package/dist/midnight-engine-xU1wotne.cjs +6 -0
  204. package/dist/midnight-wallet-DIsAlSn6.js +18 -0
  205. package/dist/midnight-wallet-XTZc2li7.cjs +24 -0
  206. package/dist/midnight.cjs +1408 -0
  207. package/dist/midnight.d.ts +28934 -0
  208. package/dist/midnight.js +1352 -0
  209. package/dist/modules-cardano-B1nDUWqy.js +995 -0
  210. package/dist/modules-cardano-BYeYHrRm.cjs +1108 -0
  211. package/dist/node-relay-DWe1U0w2.cjs +49 -0
  212. package/dist/node-relay-h4i5IlAQ.js +48 -0
  213. package/dist/outputs-Bd2yZVjx.js +720 -0
  214. package/dist/outputs-CJoQBIA2.cjs +990 -0
  215. package/dist/pbkdf2-CIW-oWrm.cjs +1337 -0
  216. package/dist/pending-operation-B0_P78Jo.cjs +26 -0
  217. package/dist/pending-operation-BIS6mpjB.js +21 -0
  218. package/dist/providers-FjhM47BH.cjs +388 -0
  219. package/dist/providers-WtiSuxFu.js +365 -0
  220. package/dist/redacted-BmE2aXqr.js +81 -0
  221. package/dist/redacted-CRZJLS3w.cjs +86 -0
  222. package/dist/{retry-config-DC5IMaH7.cjs → retry-config-BaCfVC1H.cjs} +1 -1
  223. package/dist/{retry-config-BcUmMS--.js → retry-config-Dmgt28wM.js} +1 -1
  224. package/dist/safe-buffer-B_vMqJWU.js +43 -0
  225. package/dist/safe-buffer-DYOwEfHB.cjs +48 -0
  226. package/dist/sdk-Cb-gZnS9.js +1241 -0
  227. package/dist/sdk-DffwmX8b.cjs +1439 -0
  228. package/dist/sdk-init-Bln9rFtn.js +4138 -0
  229. package/dist/sdk-init-CYViTJY_.cjs +3841 -0
  230. package/dist/{seam-cardano-CATqBEyK.js → seam-cardano-B_etH4F4.js} +1 -1
  231. package/dist/{bytes.vo-TgiwogWF.js → secret-box-DUR0ACYz.js} +3 -25
  232. package/dist/{bytes.vo-Ck5u40RA.cjs → secret-box-DrjLZuS1.cjs} +1 -35
  233. package/dist/send-proof-progress-C-ljq1x5.js +30 -0
  234. package/dist/send-proof-progress-vmsaSfbz.cjs +47 -0
  235. package/dist/side-effects-BnqYz7Nl.js +768 -0
  236. package/dist/side-effects-CngaeXi0.cjs +804 -0
  237. package/dist/sign-bitcoin-transaction-with-seed-D4z62-jV.js +147 -0
  238. package/dist/sign-bitcoin-transaction-with-seed-DsLYXnCY.cjs +158 -0
  239. package/dist/signer-3fk8lZtE.cjs +7 -0
  240. package/dist/signer-CsL28DrK.cjs +121 -0
  241. package/dist/signer-DGluibtn.js +92 -0
  242. package/dist/signer-RqB5pu3K.js +2 -0
  243. package/dist/signer-factory-BA7WFJVZ.js +282 -0
  244. package/dist/signer-factory-Cwd6o-lG.cjs +281 -0
  245. package/dist/{signer-factory-9URFliA5.js → signer-factory-DObB55D4.js} +6 -3
  246. package/dist/signer-factory-DhZiE03y.cjs +149 -0
  247. package/dist/{signer-factory-BWGUmnvm.cjs → signer-factory-Ds6G2AZk.cjs} +4 -3
  248. package/dist/signer-factory-hzSRaIw2.js +148 -0
  249. package/dist/{slice-CuHUaPZx.cjs → slice-7G2xxYKJ.cjs} +3 -3
  250. package/dist/{slice-DZmQJNV8.cjs → slice-B4CdYoPu.cjs} +2 -2
  251. package/dist/slice-BPNuHKfw.js +9091 -0
  252. package/dist/{slice-DGcNrbPR.cjs → slice-Bg6HEr3K.cjs} +4 -4
  253. package/dist/{slice-DtaO72qY.cjs → slice-Bs2aMERu.cjs} +3 -3
  254. package/dist/{slice-HeHCv3bl.cjs → slice-C34iOOUH.cjs} +7 -7
  255. package/dist/{slice-Do2R2CYW.cjs → slice-C9TT5KhY.cjs} +6 -6
  256. package/dist/{slice-eIwcwKHI.js → slice-CK07EBCo.js} +4 -4
  257. package/dist/{slice-CnyWevM9.js → slice-CU80pbiu.js} +3 -3
  258. package/dist/{slice-CobanYgn.js → slice-CwyYrh1H.js} +2 -2
  259. package/dist/slice-Czfp6t84.cjs +436 -0
  260. package/dist/{slice-d0p6-xj5.js → slice-D-9aPKG-.js} +6 -6
  261. package/dist/{slice-maaskdUn.js → slice-DBpJ2QGf.js} +6 -6
  262. package/dist/{slice-mxLQ_FeY.cjs → slice-DTZTiJle.cjs} +352 -39
  263. package/dist/{slice-zJ9XVYjZ.js → slice-Da426sf9.js} +1 -1
  264. package/dist/{slice-D11m2EKl.cjs → slice-DayJvMRD.cjs} +1 -1
  265. package/dist/slice-DnBWfA-k.cjs +9109 -0
  266. package/dist/{slice-oqm_r1cS.cjs → slice-DnG-yvpI.cjs} +2 -2
  267. package/dist/{slice-BNu73oBa.js → slice-DyNs7oWp.js} +2 -2
  268. package/dist/{slice-CB4SnzMm.js → slice-GwiiJRoq.js} +3 -3
  269. package/dist/slice-oWnc7YVD.js +412 -0
  270. package/dist/{slice-B2PhoWAg.js → slice-qt0uBExh.js} +325 -37
  271. package/dist/slice-t8Gzj55G2.cjs +106 -0
  272. package/dist/slice-t8Q1cHm-.js +88 -0
  273. package/dist/src-BDzYIksE.cjs +20637 -0
  274. package/dist/src-BFoefPv_.js +20755 -0
  275. package/dist/store-B1Lq3cEf.cjs +66 -0
  276. package/dist/store-DuBG8qh5.js +37 -0
  277. package/dist/submit-Bs77dPn_.cjs +413 -0
  278. package/dist/submit-DOv8Z0Vf.js +336 -0
  279. package/dist/submit-bitcoin-tx-D6oYgH5S.js +983 -0
  280. package/dist/submit-bitcoin-tx-goFuRL7K.cjs +1049 -0
  281. package/dist/{sync-operation-utils-BYXLO80m.js → sync-operation-utils-31iFLExW.js} +2 -38
  282. package/dist/{sync-operation-utils-SdPbwFoD.cjs → sync-operation-utils-COIZ66-I.cjs} +1 -67
  283. package/dist/token-id-mapper-Bnds3xKH.cjs +18 -0
  284. package/dist/{token-id-mapper-DsPAL6Nh.cjs → token-id-mapper-CVyQJUKY.cjs} +2 -2
  285. package/dist/token-id-mapper-CnKHQ8DV.js +16 -0
  286. package/dist/{token-id-mapper-B2ivlLv3.js → token-id-mapper-D29Ggv8h.js} +2 -2
  287. package/dist/tokens-Cevp7rdU.cjs +62 -0
  288. package/dist/tokens-Diw4MLRM.js +44 -0
  289. package/dist/types-B8uiJn-X.js +12 -0
  290. package/dist/types-BHC12eSa.js +33 -0
  291. package/dist/types-CJT6XF2c.js +10 -0
  292. package/dist/types-CLRUYpfe.cjs +23 -0
  293. package/dist/types-Cc3mC8u0.cjs +50 -0
  294. package/dist/types-DWbVZpnF.cjs +15 -0
  295. package/dist/unwrap-provider-result-BZSiwabU.js +32 -0
  296. package/dist/unwrap-provider-result-ZqfBsTkk.cjs +39 -0
  297. package/dist/{util-CGzqQ8IV.cjs → util-Bu4W5lF4.cjs} +1 -1
  298. package/dist/{util-BaLzwa32.js → util-Cp5cZkfK.js} +1 -1
  299. package/dist/{utils-o8aMjfln.js → utils-BfBEUvWA.js} +2 -2
  300. package/dist/utils-DFwzEvbv.js +65 -0
  301. package/dist/{utils-5JvjbqH3.cjs → utils-DsElZgCI.cjs} +7 -1
  302. package/dist/utils-IXxR-Djh.cjs +112 -0
  303. package/dist/v8Signatures-CO_Uloy7.cjs +71 -0
  304. package/dist/{vote-delegation-tx-builder-BpEMSti4.cjs → vote-delegation-tx-builder-BUg1S2Ep.cjs} +6 -6
  305. package/dist/{vote-delegation-tx-builder-CmKv6GoG.js → vote-delegation-tx-builder-C6FiS7zI.js} +5 -5
  306. package/dist/watch-CUEvcP-V.js +21997 -0
  307. package/dist/watch-DMF2s-II.cjs +52281 -0
  308. package/package.json +96 -4
  309. package/dist/account-guards.stable-B1DSSh9D.cjs +0 -10
  310. package/dist/account-guards.stable-JRQ5qx2V.js +0 -5
  311. package/dist/codecs-B7X9pAsK.cjs +0 -1945
  312. package/dist/codecs-CC1Xjntz.js +0 -1882
  313. package/dist/init-Bv53hpLM.js +0 -19
  314. package/dist/init-CRbjI7p1.js +0 -3494
  315. package/dist/init-DAna1KCg.cjs +0 -3495
  316. package/dist/init-DGe47B22.cjs +0 -364
  317. package/dist/init-DMtyvYfC.cjs +0 -21
  318. package/dist/init-TkPDD750.js +0 -363
  319. package/dist/modules-cardano-BDvuL4Xx.js +0 -5248
  320. package/dist/modules-cardano-D2G3De2P.cjs +0 -5432
  321. package/dist/slice-CGVHXHDt.cjs +0 -125
  322. package/dist/slice-DhvF7L6X.js +0 -107
  323. /package/dist/{account-id.vo-LvCBVn5r.cjs → account-id.vo-DwqFjK5u.cjs} +0 -0
  324. /package/dist/{account-id.vo-MYSI7YFm.js → account-id.vo-OPz2v-JZ.js} +0 -0
  325. /package/dist/{actions-DdGbj7c7.cjs → actions-B2BJ4RTy.cjs} +0 -0
  326. /package/dist/{actions-9QSQR-GB.js → actions-iLXdgL5Y.js} +0 -0
  327. /package/dist/{apply-vkey-witnesses-ClZbpk5w.js → apply-vkey-witnesses-BKx3lcs0.js} +0 -0
  328. /package/dist/{apply-vkey-witnesses-CLzVSWxl.cjs → apply-vkey-witnesses-ZnFS0jnJ.cjs} +0 -0
  329. /package/dist/{asyncoption-Cw07zPH7.js → asyncoption-CruEYOBI.js} +0 -0
  330. /package/dist/{asyncoption-DYoGuQfP.cjs → asyncoption-i0VbqVTq.cjs} +0 -0
  331. /package/dist/{bignum.vo-B0rK_PQ1.js → bignum.vo-CEXOIew0.js} +0 -0
  332. /package/dist/{bignum.vo-DsG3kNiZ.cjs → bignum.vo-hx2kuqlA.cjs} +0 -0
  333. /package/dist/{bip32ed25519-1ApqeAZk.cjs → bip32ed25519-B7Yat217.cjs} +0 -0
  334. /package/dist/{bip32ed25519-DetAdGwD.js → bip32ed25519-FQ8qvdcq.js} +0 -0
  335. /package/dist/{blake2b-DOEVc57D.js → blake2b-BiQTw3GC.js} +0 -0
  336. /package/dist/{blake2b-B9tftbvG.cjs → blake2b-DEeVUdKR.cjs} +0 -0
  337. /package/dist/{blockchain-network-id.vo-BXpZhvvQ.cjs → blockchain-network-id.vo-BAKEwGjG.cjs} +0 -0
  338. /package/dist/{blockchain-network-id.vo-DNRkuT5B.js → blockchain-network-id.vo-CiVykuqG.js} +0 -0
  339. /package/dist/{blockingWithLatestFrom-C5wp_uA-.js → blockingWithLatestFrom-Cd8c8EPG.js} +0 -0
  340. /package/dist/{blockingWithLatestFrom-DY8OPg0w.cjs → blockingWithLatestFrom-D8kBPBMX.cjs} +0 -0
  341. /package/dist/{cardano-network-id-to-network-type-CrZfUcyP.js → cardano-network-id-to-network-type-BWwzeEtM.js} +0 -0
  342. /package/dist/{cardano-network-id-to-network-type-BDTF-HmK.cjs → cardano-network-id-to-network-type-C0ufJOyE.cjs} +0 -0
  343. /package/dist/{cardano-tx-id.vo-BPhV-AmZ.cjs → cardano-tx-id.vo-TLjJZHCI.cjs} +0 -0
  344. /package/dist/{cardano-tx-id.vo-DF9NzZXk.js → cardano-tx-id.vo-eVnKuzlm.js} +0 -0
  345. /package/dist/{composite-signer-factory-_46QsNBz.js → composite-signer-factory-CR8YHA1y.js} +0 -0
  346. /package/dist/{composite-signer-factory-BpF1mIYA.cjs → composite-signer-factory-m5cVs9h_.cjs} +0 -0
  347. /package/dist/{error-CNIquqT5.cjs → error-Cb3EnD0u.cjs} +0 -0
  348. /package/dist/{error-BCp9NkPi.js → error-DIZOY2Lw.js} +0 -0
  349. /package/dist/{esm-browser-C93Q-EOI.js → esm-browser-MG97cre9.js} +0 -0
  350. /package/dist/{esm-browser-DTc9IK3D.cjs → esm-browser-bweqfBlL.cjs} +0 -0
  351. /package/dist/{feature-flag-key.vo-ofrB6ZVQ.js → feature-flag-key.vo-DN_-4-sG.js} +0 -0
  352. /package/dist/{feature-flag-key.vo-BPz-ZAp6.cjs → feature-flag-key.vo-RlfHL3hq.cjs} +0 -0
  353. /package/dist/{first-state-of-status-OROkXcRv.cjs → first-state-of-status-CbT7hPa4.cjs} +0 -0
  354. /package/dist/{first-state-of-status-DQnMT3ya.js → first-state-of-status-unPynOuM.js} +0 -0
  355. /package/dist/{init-Es3wHW7D.js → init-829HRYcz.js} +0 -0
  356. /package/dist/{init-CKipPE_c.js → init-A-VyGSNW2.js} +0 -0
  357. /package/dist/{init-DFQQ9dTW.cjs → init-Atisw4x2.cjs} +0 -0
  358. /package/dist/{init-C5CEZ1m0.cjs → init-BFcvPHL-.cjs} +0 -0
  359. /package/dist/{init-IAk_CkGa.cjs → init-BgNobbNq.cjs} +0 -0
  360. /package/dist/{init-cqN3uX2j.js → init-atCFur0v.js} +0 -0
  361. /package/dist/{is-redux-persist-state-CTn3WZVh.cjs → is-redux-persist-state-BCFnSm36.cjs} +0 -0
  362. /package/dist/{is-redux-persist-state-Cxcd0_bM.js → is-redux-persist-state-yBfq0h_E.js} +0 -0
  363. /package/dist/{key-value-store-8cMzeNyG.js → key-value-store--W3SrMaw.js} +0 -0
  364. /package/dist/{key-value-store-DUAepXQf.cjs → key-value-store-C2Xt5Emp.cjs} +0 -0
  365. /package/dist/{repo-slice-WxetRhMY.cjs → repo-slice-7X4AYYVm.cjs} +0 -0
  366. /package/dist/{repo-slice-DwyMhCR1.js → repo-slice-RxFm0zDZ.js} +0 -0
  367. /package/dist/{reselect-CRDqmQY9.cjs → reselect-Bd94u0K-.cjs} +0 -0
  368. /package/dist/{reselect-C06X06oX.js → reselect-CGoLzEPv.js} +0 -0
  369. /package/dist/{serializable-B8GahgE1.js → serializable-BHdKIgk3.js} +0 -0
  370. /package/dist/{serializable-CRdnFaLZ.cjs → serializable-BxHkoPdk.cjs} +0 -0
  371. /package/dist/{slice-D11FHQuQ.cjs → slice-BiRsDKOK.cjs} +0 -0
  372. /package/dist/{slice-Be7hj4Iy.js → slice-Bk0Sv05J.js} +0 -0
  373. /package/dist/{slice-FioKeHtA.cjs → slice-Dqw1ecum.cjs} +0 -0
  374. /package/dist/{slice-B87b52iM.js → slice-obCSLm1x.js} +0 -0
  375. /package/dist/{src-vq1wS9sZ.js → src-BlxEp6Mm.js} +0 -0
  376. /package/dist/{src-BTPIvlDI.cjs → src-Cqp0B2M_.cjs} +0 -0
  377. /package/dist/{time.vo-CQ8pSXz2.cjs → time.vo-D3wWRw9L.cjs} +0 -0
  378. /package/dist/{time.vo-DkYYGYp6.js → time.vo-tNheinXm.js} +0 -0
  379. /package/dist/{toEmpty-CgAl3097.js → toEmpty-8Zax1MPd.js} +0 -0
  380. /package/dist/{toEmpty-DAMmNB5r.cjs → toEmpty-CYAbupM4.cjs} +0 -0
  381. /package/dist/{token-id.vo-ClsroxHO.js → token-id.vo-Bvwhr3ZE.js} +0 -0
  382. /package/dist/{token-id.vo-BxG9TG0O.cjs → token-id.vo-DXv5uS9n.cjs} +0 -0
  383. /package/dist/{util-DxzlYNS5.js → util-C8a4fA9p.js} +0 -0
  384. /package/dist/{util-CmdAhheh.cjs → util-CzeB3hfa.cjs} +0 -0
  385. /package/dist/{util-selector-CcK-GAdE.js → util-selector-BSTsxgne.js} +0 -0
  386. /package/dist/{util-selector-BcAncU4L.cjs → util-selector-BWPH68_l.cjs} +0 -0
  387. /package/dist/{while-active-BpppWuCs.js → while-active-B0lWy_6l.js} +0 -0
  388. /package/dist/{while-active-Dhc2LwOm.cjs → while-active-Dsowp0Fi.cjs} +0 -0
@@ -0,0 +1,720 @@
1
+ import { d as fail, f as ok, i as isLowerCaseHex, n as hexToBytes, o as SUPPORTED_CUSTODY_CONTRACT_VERSIONS, r as isHash28Hex, t as bytesToHex, u as findCustodyLogic } from "./hex-mkXcV3pN.js";
2
+ import { n as custodyGrantAssetId, t as CUSTODY_SLOT_LIMIT } from "./tokens-Diw4MLRM.js";
3
+ import { Cardano, Serialization } from "@laceio/cardano/core";
4
+ //#region ../../packages/lib/cardano-custody/src/codecs/plutus-data.ts
5
+ /** Raised inside the decoders only; `decodeResult` turns it into a result. */
6
+ var MalformedData = class extends Error {
7
+ constructor(path, expected) {
8
+ super(`Expected ${expected} at ${path || "the root"}`);
9
+ this.path = path;
10
+ this.expected = expected;
11
+ }
12
+ };
13
+ /** Runs a throwing decoder and reports a shape mismatch as a typed failure. */
14
+ const decodeResult = (decode) => {
15
+ try {
16
+ return ok(decode());
17
+ } catch (error) {
18
+ if (error instanceof MalformedData) return fail({
19
+ code: "malformed-data",
20
+ path: error.path,
21
+ expected: error.expected
22
+ });
23
+ throw error;
24
+ }
25
+ };
26
+ const fieldPath = (path, field) => `${path}.${field}`;
27
+ const itemPath = (path, index) => `${path}[${index}]`;
28
+ /**
29
+ * A fresh constructor value. Encoders always build new data, never reuse
30
+ * decoded data: the `cbor` cache on decoded values wins over any edit.
31
+ */
32
+ const constr = (index, fields = []) => ({
33
+ constructor: BigInt(index),
34
+ fields: { items: fields }
35
+ });
36
+ const list = (items) => ({ items });
37
+ const bytes = (hex) => hexToBytes(hex);
38
+ /** The constructor index of a value that must be a constructor. */
39
+ const expectConstrIndex = (data, path, what) => {
40
+ if (!Cardano.util.isConstrPlutusData(data)) throw new MalformedData(path, `${what} as a constructor`);
41
+ return data.constructor;
42
+ };
43
+ /** The fields of a constructor with exactly the given index and arity. */
44
+ const expectConstr = (data, { index, arity }, { path, what }) => {
45
+ if (!Cardano.util.isConstrPlutusData(data) || data.constructor !== BigInt(index) || data.fields.items.length !== arity) throw new MalformedData(path, `${what} as constructor ${index} with ${arity} fields`);
46
+ return data.fields.items;
47
+ };
48
+ /**
49
+ * The fields of a constructor with the given index and at least `minArity`
50
+ * fields, for a reader that relies only on a stable leading prefix.
51
+ */
52
+ const expectConstrPrefix = (data, { index, minArity }, { path, what }) => {
53
+ if (!Cardano.util.isConstrPlutusData(data) || data.constructor !== BigInt(index) || data.fields.items.length < minArity) throw new MalformedData(path, `${what} as constructor ${index} with at least ${minArity} fields`);
54
+ return data.fields.items;
55
+ };
56
+ const expectBytes = (data, path, what) => {
57
+ if (!Cardano.util.isPlutusBoundedBytes(data)) throw new MalformedData(path, `${what} as bytes`);
58
+ return bytesToHex(data);
59
+ };
60
+ const expectInt = (data, path, what) => {
61
+ if (!Cardano.util.isPlutusBigInt(data)) throw new MalformedData(path, `${what} as an integer`);
62
+ return data;
63
+ };
64
+ const expectList = (data, path, what) => {
65
+ if (!Cardano.util.isPlutusList(data)) throw new MalformedData(path, `${what} as a list`);
66
+ return data.items;
67
+ };
68
+ /** Refuses a constructor index no alternative of a union claims. */
69
+ const unknownAlternative = (path, what, index) => {
70
+ throw new MalformedData(path, `${what}, not constructor ${index}`);
71
+ };
72
+ //#endregion
73
+ //#region ../../packages/lib/cardano-custody/src/codecs/recipient.ts
74
+ const credentialFrom = (credential) => ({
75
+ type: credential.type,
76
+ hash: credential.hash
77
+ });
78
+ /**
79
+ * The recipient form of a Shelley payment address. Base, enterprise and
80
+ * pointer addresses have one; reward and Byron addresses do not.
81
+ */
82
+ const custodyRecipientFromAddress = (address) => {
83
+ const base = address.asBase();
84
+ if (base) return ok({
85
+ paymentCredential: credentialFrom(base.getPaymentCredential()),
86
+ stakeCredential: {
87
+ kind: "inline",
88
+ credential: credentialFrom(base.getStakeCredential())
89
+ }
90
+ });
91
+ const enterprise = address.asEnterprise();
92
+ if (enterprise) return ok({ paymentCredential: credentialFrom(enterprise.getPaymentCredential()) });
93
+ const pointer = address.asPointer();
94
+ if (pointer) {
95
+ const { slot, txIndex, certIndex } = pointer.getStakePointer();
96
+ return ok({
97
+ paymentCredential: credentialFrom(pointer.getPaymentCredential()),
98
+ stakeCredential: {
99
+ kind: "pointer",
100
+ slot,
101
+ transactionIndex: BigInt(txIndex),
102
+ certificateIndex: BigInt(certIndex)
103
+ }
104
+ });
105
+ }
106
+ return fail({
107
+ code: "unsupported-recipient-address",
108
+ addressType: address.getType()
109
+ });
110
+ };
111
+ const isPointerIndex = (value) => value >= 0n && value <= BigInt(Number.MAX_SAFE_INTEGER);
112
+ /**
113
+ * Whether a recipient names an address Cardano can encode: 28-byte credential
114
+ * hashes and, for a pointer, non-negative indices that fit a pointer address.
115
+ */
116
+ const isRepresentableRecipient = (recipient) => {
117
+ if (!isHash28Hex(recipient.paymentCredential.hash)) return false;
118
+ const stake = recipient.stakeCredential;
119
+ if (!stake) return true;
120
+ if (stake.kind === "inline") return isHash28Hex(stake.credential.hash);
121
+ return stake.slot >= 0n && isPointerIndex(stake.transactionIndex) && isPointerIndex(stake.certificateIndex);
122
+ };
123
+ const toCardanoCredential = (credential) => ({
124
+ type: credential.type,
125
+ hash: credential.hash
126
+ });
127
+ /** The address of a recipient the caller has checked is representable. */
128
+ const addressOfRepresentableRecipient = (recipient, networkId) => {
129
+ const payment = toCardanoCredential(recipient.paymentCredential);
130
+ const stake = recipient.stakeCredential;
131
+ if (!stake) return Cardano.EnterpriseAddress.fromCredentials(networkId, payment).toAddress();
132
+ if (stake.kind === "inline") return Cardano.BaseAddress.fromCredentials(networkId, payment, toCardanoCredential(stake.credential)).toAddress();
133
+ return new Cardano.Address({
134
+ type: payment.type === Cardano.CredentialType.ScriptHash ? Cardano.AddressType.PointerScript : Cardano.AddressType.PointerKey,
135
+ networkId,
136
+ paymentPart: payment,
137
+ pointer: {
138
+ slot: stake.slot,
139
+ txIndex: Cardano.TxIndex(Number(stake.transactionIndex)),
140
+ certIndex: Cardano.CertIndex(Number(stake.certificateIndex))
141
+ }
142
+ });
143
+ };
144
+ /** The address a recipient stands for on the given network. */
145
+ const custodyRecipientToAddress = (recipient, networkId) => isRepresentableRecipient(recipient) ? ok(addressOfRepresentableRecipient(recipient, networkId)) : fail({
146
+ code: "unrepresentable-recipient",
147
+ recipient
148
+ });
149
+ /** A value two recipients share exactly when their Plutus data is equal. */
150
+ const recipientKey = (recipient) => {
151
+ const credentialKey = ({ type, hash }) => `${type}:${hash}`;
152
+ const stake = recipient.stakeCredential;
153
+ const stakeKey = !stake ? "none" : stake.kind === "inline" ? `inline:${credentialKey(stake.credential)}` : `pointer:${stake.slot}:${stake.transactionIndex}:${stake.certificateIndex}`;
154
+ return `${credentialKey(recipient.paymentCredential)}/${stakeKey}`;
155
+ };
156
+ const CREDENTIAL_CONSTRUCTOR = {
157
+ [Cardano.CredentialType.KeyHash]: 0,
158
+ [Cardano.CredentialType.ScriptHash]: 1
159
+ };
160
+ const encodeCredential = (credential) => constr(CREDENTIAL_CONSTRUCTOR[credential.type], [bytes(credential.hash)]);
161
+ const decodeCredential = (data, path) => {
162
+ const index = expectConstrIndex(data, path, "a credential");
163
+ const type = index === 0n ? Cardano.CredentialType.KeyHash : index === 1n ? Cardano.CredentialType.ScriptHash : unknownAlternative(path, "a key or script credential", index);
164
+ const [hash] = expectConstr(data, {
165
+ index: Number(index),
166
+ arity: 1
167
+ }, {
168
+ path,
169
+ what: "a credential"
170
+ });
171
+ return {
172
+ type,
173
+ hash: expectBytes(hash, fieldPath(path, "hash"), "a hash")
174
+ };
175
+ };
176
+ const encodeStakeCredential = (stake) => stake.kind === "inline" ? constr(0, [encodeCredential(stake.credential)]) : constr(1, [
177
+ stake.slot,
178
+ stake.transactionIndex,
179
+ stake.certificateIndex
180
+ ]);
181
+ const decodeStakeCredential = (data, path) => {
182
+ const index = expectConstrIndex(data, path, "a stake credential");
183
+ if (index === 0n) {
184
+ const [credential] = expectConstr(data, {
185
+ index: 0,
186
+ arity: 1
187
+ }, {
188
+ path,
189
+ what: "an inline stake credential"
190
+ });
191
+ return {
192
+ kind: "inline",
193
+ credential: decodeCredential(credential, fieldPath(path, "credential"))
194
+ };
195
+ }
196
+ if (index !== 1n) return unknownAlternative(path, "an inline or pointer stake credential", index);
197
+ const [slot, transactionIndex, certificateIndex] = expectConstr(data, {
198
+ index: 1,
199
+ arity: 3
200
+ }, {
201
+ path,
202
+ what: "a stake pointer"
203
+ });
204
+ return {
205
+ kind: "pointer",
206
+ slot: expectInt(slot, fieldPath(path, "slot"), "a slot"),
207
+ transactionIndex: expectInt(transactionIndex, fieldPath(path, "transactionIndex"), "a transaction index"),
208
+ certificateIndex: expectInt(certificateIndex, fieldPath(path, "certificateIndex"), "a certificate index")
209
+ };
210
+ };
211
+ /** `Address { payment_credential, stake_credential: Option<StakeCredential> }`. */
212
+ const encodeRecipient = (recipient) => constr(0, [encodeCredential(recipient.paymentCredential), recipient.stakeCredential ? constr(0, [encodeStakeCredential(recipient.stakeCredential)]) : constr(1)]);
213
+ const decodeRecipient = (data, path) => {
214
+ const [payment, optionalStake] = expectConstr(data, {
215
+ index: 0,
216
+ arity: 2
217
+ }, {
218
+ path,
219
+ what: "an address"
220
+ });
221
+ const paymentCredential = decodeCredential(payment, fieldPath(path, "paymentCredential"));
222
+ const stakePath = fieldPath(path, "stakeCredential");
223
+ const option = expectConstrIndex(optionalStake, stakePath, "an option");
224
+ if (option === 1n) {
225
+ expectConstr(optionalStake, {
226
+ index: 1,
227
+ arity: 0
228
+ }, {
229
+ path: stakePath,
230
+ what: "None"
231
+ });
232
+ return { paymentCredential };
233
+ }
234
+ if (option !== 0n) return unknownAlternative(stakePath, "Some or None", option);
235
+ const [stake] = expectConstr(optionalStake, {
236
+ index: 0,
237
+ arity: 1
238
+ }, {
239
+ path: stakePath,
240
+ what: "Some"
241
+ });
242
+ return {
243
+ paymentCredential,
244
+ stakeCredential: decodeStakeCredential(stake, stakePath)
245
+ };
246
+ };
247
+ //#endregion
248
+ //#region ../../packages/lib/cardano-custody/src/codecs/account-state.ts
249
+ const encodeAsset = (asset) => constr(0, [bytes(asset.policyId), bytes(asset.assetName)]);
250
+ const decodeAsset = (data, path) => {
251
+ const [policyId, assetName] = expectConstr(data, {
252
+ index: 0,
253
+ arity: 2
254
+ }, {
255
+ path,
256
+ what: "an asset"
257
+ });
258
+ return {
259
+ policyId: expectBytes(policyId, fieldPath(path, "policyId"), "a policy id"),
260
+ assetName: expectBytes(assetName, fieldPath(path, "assetName"), "an asset name")
261
+ };
262
+ };
263
+ /** Fields in declaration order: the lovelace per call cap precedes the lovelace cap. */
264
+ const encodeScope = (scope) => constr(0, [
265
+ encodeAsset(scope.asset),
266
+ scope.perCallCap,
267
+ scope.cap,
268
+ scope.lovelacePerCallCap,
269
+ scope.lovelaceCap,
270
+ scope.expiresAt,
271
+ list(scope.recipients.map(encodeRecipient))
272
+ ]);
273
+ const decodeScope = (data, path) => {
274
+ const [asset, perCallCap, cap, lovelacePerCallCap, lovelaceCap, expiresAt, recipients] = expectConstr(data, {
275
+ index: 0,
276
+ arity: 7
277
+ }, {
278
+ path,
279
+ what: "a scope"
280
+ });
281
+ const recipientsPath = fieldPath(path, "recipients");
282
+ return {
283
+ asset: decodeAsset(asset, fieldPath(path, "asset")),
284
+ perCallCap: expectInt(perCallCap, fieldPath(path, "perCallCap"), "a per call cap"),
285
+ cap: expectInt(cap, fieldPath(path, "cap"), "a cap"),
286
+ lovelacePerCallCap: expectInt(lovelacePerCallCap, fieldPath(path, "lovelacePerCallCap"), "a lovelace per call cap"),
287
+ lovelaceCap: expectInt(lovelaceCap, fieldPath(path, "lovelaceCap"), "a lovelace cap"),
288
+ expiresAt: expectInt(expiresAt, fieldPath(path, "expiresAt"), "an expiry"),
289
+ recipients: expectList(recipients, recipientsPath, "recipients").map((recipient, index) => decodeRecipient(recipient, itemPath(recipientsPath, index)))
290
+ };
291
+ };
292
+ /**
293
+ * The inline datum of a grant UTxO. Always fresh Plutus data, like the state
294
+ * encoder. Throws `InvalidStringError` for a key hash, asset or credential
295
+ * hash that is not hex of whole bytes.
296
+ */
297
+ const encodeCustodyGrant = (grant) => constr(0, [
298
+ grant.slot,
299
+ bytes(grant.grantee),
300
+ grant.generation,
301
+ encodeScope(grant.scope)
302
+ ]);
303
+ /**
304
+ * The grant a grant UTxO datum carries. Accepts exactly the shapes the
305
+ * logic's soft cast accepts and applies no authoring rule;
306
+ * `findCustodyGrantViolations` marks what Lace would not author.
307
+ */
308
+ const decodeCustodyGrant = (data) => decodeResult(() => {
309
+ const [slot, grantee, generation, scope] = expectConstr(data, {
310
+ index: 0,
311
+ arity: 4
312
+ }, {
313
+ path: "",
314
+ what: "a grant"
315
+ });
316
+ return {
317
+ slot: expectInt(slot, "slot", "a slot"),
318
+ grantee: expectBytes(grantee, "grantee", "a grantee key hash"),
319
+ generation: expectInt(generation, "generation", "a generation"),
320
+ scope: decodeScope(scope, "scope")
321
+ };
322
+ });
323
+ /**
324
+ * The control UTxO datum for a state. Always fresh Plutus data, so edits made
325
+ * to a decoded state are never masked by the original encoding.
326
+ *
327
+ * Throws `InvalidStringError` for a logic or device key hash that is not hex
328
+ * of whole bytes, instead of writing other bytes than the state holds. A
329
+ * decoded state, and a state `findCustodyStateViolations` accepts, always
330
+ * encode.
331
+ */
332
+ const encodeCustodyAccountState = (state) => constr(0, [
333
+ bytes(state.logic),
334
+ list(state.devices.map((device) => bytes(device))),
335
+ state.grantGeneration,
336
+ state.nextSlot,
337
+ list([...state.revoked]),
338
+ state.outstanding
339
+ ]);
340
+ const decodeLogic = (data) => expectBytes(data, "logic", "a logic hash");
341
+ const decodeDevices = (data) => expectList(data, "devices", "devices").map((device, index) => expectBytes(device, itemPath("devices", index), "a device key hash"));
342
+ /**
343
+ * The state a control UTxO datum carries. Accepts exactly the shapes the
344
+ * logic's soft cast accepts: canonical constructor indices and exact
345
+ * field counts. It applies no authoring rule, so an on-chain device with an
346
+ * ill-sized hash still decodes; `findCustodyStateViolations` marks it.
347
+ */
348
+ const decodeCustodyAccountState = (data) => decodeResult(() => {
349
+ const [logic, devices, grantGeneration, nextSlot, revoked, outstanding] = expectConstr(data, {
350
+ index: 0,
351
+ arity: 6
352
+ }, {
353
+ path: "",
354
+ what: "an account state"
355
+ });
356
+ return {
357
+ logic: decodeLogic(logic),
358
+ devices: decodeDevices(devices),
359
+ grantGeneration: expectInt(grantGeneration, "grantGeneration", "a grant generation"),
360
+ nextSlot: expectInt(nextSlot, "nextSlot", "a next slot"),
361
+ revoked: expectList(revoked, "revoked", "revoked slots").map((slot, index) => expectInt(slot, itemPath("revoked", index), "a revoked slot")),
362
+ outstanding: expectInt(outstanding, "outstanding", "an outstanding count")
363
+ };
364
+ });
365
+ /**
366
+ * The logic hash a control UTxO datum names in its first field, whatever the
367
+ * field count, as the proxy reads it.
368
+ */
369
+ const decodeCustodyStateLogic = (data) => decodeResult(() => {
370
+ const [logic] = expectConstrPrefix(data, {
371
+ index: 0,
372
+ minArity: 1
373
+ }, {
374
+ path: "",
375
+ what: "an account state"
376
+ });
377
+ return decodeLogic(logic);
378
+ });
379
+ /**
380
+ * The device key hashes of a control UTxO datum, read from its second field
381
+ * whatever the field count, as the stake script reads them. The devices are
382
+ * only as trustworthy as the logic that admitted them, so a reader first
383
+ * checks the logic `decodeCustodyStateLogic` names.
384
+ */
385
+ const decodeCustodyStateDevices = (data) => decodeResult(() => {
386
+ const [, devices] = expectConstrPrefix(data, {
387
+ index: 0,
388
+ minArity: 2
389
+ }, {
390
+ path: "",
391
+ what: "an account state"
392
+ });
393
+ return decodeDevices(devices);
394
+ });
395
+ const MAX_ASSET_NAME_BYTES = 32;
396
+ const POLICY_ID_BYTES = 28;
397
+ const CUSTODY_LOVELACE_ASSET = {
398
+ policyId: "",
399
+ assetName: ""
400
+ };
401
+ const isCustodyLovelaceAsset = (asset) => asset.policyId === "" && asset.assetName === "";
402
+ const isPolicyIdWellFormed = (policyId) => policyId === "" || isLowerCaseHex(policyId, POLICY_ID_BYTES);
403
+ const isAssetNameWellFormed = ({ policyId, assetName }) => isLowerCaseHex(assetName) && assetName.length <= MAX_ASSET_NAME_BYTES * 2 && (policyId !== "" || assetName === "");
404
+ const CAP_FIELDS = [
405
+ "perCallCap",
406
+ "cap",
407
+ "lovelacePerCallCap",
408
+ "lovelaceCap"
409
+ ];
410
+ /** Every rule a grant breaks, in field order; empty for an authorable grant. */
411
+ const findCustodyGrantViolations = (grant) => {
412
+ const { slot, scope } = grant;
413
+ const violations = [];
414
+ if (slot < 0n || slot >= CUSTODY_SLOT_LIMIT) violations.push({
415
+ code: "slot-out-of-range",
416
+ slot
417
+ });
418
+ if (!isHash28Hex(grant.grantee)) violations.push({
419
+ code: "invalid-grantee-key-hash",
420
+ slot
421
+ });
422
+ if (grant.generation < 0n) violations.push({
423
+ code: "negative-generation",
424
+ slot
425
+ });
426
+ if (!isPolicyIdWellFormed(scope.asset.policyId)) violations.push({
427
+ code: "invalid-policy-id",
428
+ slot
429
+ });
430
+ if (!isAssetNameWellFormed(scope.asset)) violations.push({
431
+ code: "invalid-asset-name",
432
+ slot
433
+ });
434
+ for (const field of CAP_FIELDS) if (scope[field] < 0n) violations.push({
435
+ code: "negative-cap",
436
+ field,
437
+ slot
438
+ });
439
+ if (isCustodyLovelaceAsset(scope.asset) && (scope.lovelacePerCallCap !== 0n || scope.lovelaceCap !== 0n)) violations.push({
440
+ code: "lovelace-grant-lovelace-caps",
441
+ slot
442
+ });
443
+ if (scope.expiresAt <= 0n) violations.push({
444
+ code: "non-positive-expiry",
445
+ slot
446
+ });
447
+ if (scope.recipients.length > 8) violations.push({
448
+ code: "recipient-count",
449
+ count: scope.recipients.length,
450
+ slot
451
+ });
452
+ const seenRecipients = /* @__PURE__ */ new Set();
453
+ for (const [recipientIndex, recipient] of scope.recipients.entries()) {
454
+ if (!isRepresentableRecipient(recipient)) violations.push({
455
+ code: "unrepresentable-recipient",
456
+ recipientIndex,
457
+ slot
458
+ });
459
+ const key = recipientKey(recipient);
460
+ if (seenRecipients.has(key)) violations.push({
461
+ code: "duplicate-recipient",
462
+ recipientIndex,
463
+ slot
464
+ });
465
+ seenRecipients.add(key);
466
+ }
467
+ return violations;
468
+ };
469
+ /**
470
+ * Every rule a control state breaks: the contract's well-formedness bounds
471
+ * plus a 28-byte logic hash and 28-byte device key hashes. Apply it to every
472
+ * state Lace builds or approves. An on-chain state may hold an ill-sized
473
+ * device, which can never sign; its violation names it so a device can
474
+ * remove it.
475
+ */
476
+ const findCustodyStateViolations = (state) => {
477
+ const violations = [];
478
+ if (!isHash28Hex(state.logic)) violations.push({
479
+ code: "invalid-logic-hash",
480
+ logic: state.logic
481
+ });
482
+ const deviceCount = state.devices.length;
483
+ if (deviceCount < 1 || deviceCount > 8) violations.push({
484
+ code: "device-count",
485
+ count: deviceCount
486
+ });
487
+ const seenDevices = /* @__PURE__ */ new Set();
488
+ for (const [deviceIndex, device] of state.devices.entries()) {
489
+ if (!isHash28Hex(device)) violations.push({
490
+ code: "invalid-device-key-hash",
491
+ device,
492
+ deviceIndex
493
+ });
494
+ if (seenDevices.has(device)) violations.push({
495
+ code: "duplicate-device",
496
+ device,
497
+ deviceIndex
498
+ });
499
+ seenDevices.add(device);
500
+ }
501
+ if (state.grantGeneration < 0n) violations.push({ code: "negative-grant-generation" });
502
+ if (state.nextSlot < 0n) violations.push({ code: "negative-next-slot" });
503
+ if (state.outstanding < 0n) violations.push({ code: "negative-outstanding" });
504
+ if (state.outstanding > BigInt(16)) violations.push({
505
+ code: "outstanding-count",
506
+ count: state.outstanding
507
+ });
508
+ if (state.revoked.length > 32) violations.push({
509
+ code: "revoked-count",
510
+ count: state.revoked.length
511
+ });
512
+ return violations;
513
+ };
514
+ /**
515
+ * Whether a grant can no longer be used at `now` (POSIX milliseconds): a
516
+ * spend's upper validity bound must not pass `expiresAt`, so a grant is
517
+ * expired from the instant it names. A non-finite `now` is a broken clock,
518
+ * which can never show a grant as usable, so it counts as expired.
519
+ */
520
+ const isCustodyGrantExpired = (grant, now) => !Number.isFinite(now) || grant.scope.expiresAt <= BigInt(Math.floor(now));
521
+ /**
522
+ * Whether a grant is current against a control state, as the contract
523
+ * judges a spend: issued under the state's generation and not revoked by
524
+ * slot. Expiry is the validity range's business.
525
+ */
526
+ const isCustodyGrantCurrent = (grant, state) => grant.generation === state.grantGeneration && !state.revoked.includes(grant.slot);
527
+ //#endregion
528
+ //#region ../../packages/lib/cardano-custody/src/analysis/value.ts
529
+ /** Hex length of a policy id: every asset class on chain has a 28-byte one. */
530
+ const POLICY_ID_HEX_LENGTH = 56;
531
+ const valueDeltaOf = (value) => addValueDeltas([{
532
+ lovelace: value.coins,
533
+ assets: new Map([...value.assets ?? /* @__PURE__ */ new Map()].map(([assetId, quantity]) => [assetId.toLowerCase(), quantity]))
534
+ }]);
535
+ /** The sum of deltas, with zero token quantities dropped. */
536
+ const addValueDeltas = (deltas) => {
537
+ let lovelace = 0n;
538
+ const assets = /* @__PURE__ */ new Map();
539
+ for (const delta of deltas) {
540
+ lovelace += delta.lovelace;
541
+ for (const [assetId, quantity] of delta.assets) {
542
+ const sum = (assets.get(assetId) ?? 0n) + quantity;
543
+ if (sum === 0n) assets.delete(assetId);
544
+ else assets.set(assetId, sum);
545
+ }
546
+ }
547
+ return {
548
+ lovelace,
549
+ assets
550
+ };
551
+ };
552
+ const negateValueDelta = (delta) => ({
553
+ lovelace: -delta.lovelace,
554
+ assets: new Map([...delta.assets].map(([assetId, quantity]) => [assetId, -quantity]))
555
+ });
556
+ /** The policy id of an asset id. */
557
+ const policyIdOf = (assetId) => assetId.slice(0, POLICY_ID_HEX_LENGTH);
558
+ /** The asset name of an asset id, as hex. */
559
+ const assetNameOf = (assetId) => assetId.slice(POLICY_ID_HEX_LENGTH);
560
+ /**
561
+ * Whether an asset id names an asset class. Compared by parts, so an asset
562
+ * whose policy id is not 28 bytes, which no value can hold, matches nothing.
563
+ */
564
+ const isAssetIdOf = (assetId, asset) => asset.policyId.length === POLICY_ID_HEX_LENGTH && policyIdOf(assetId) === asset.policyId && assetNameOf(assetId) === asset.assetName;
565
+ /** The quantity of one asset class: `assets.quantity_of` of the contract. */
566
+ const quantityOfAsset = (delta, asset) => {
567
+ if (isCustodyLovelaceAsset(asset)) return delta.lovelace;
568
+ for (const [assetId, quantity] of delta.assets) if (isAssetIdOf(assetId, asset)) return quantity;
569
+ return 0n;
570
+ };
571
+ //#endregion
572
+ //#region ../../packages/lib/cardano-custody/src/analysis/outputs.ts
573
+ const OTHER = { kind: "other" };
574
+ /** Hex length of a stake script hash: the state NFT name and the prefix of every grant token name. */
575
+ const STAKE_SCRIPT_HASH_HEX_LENGTH = 56;
576
+ const versionOfPayment = (credential) => credential.type === Cardano.CredentialType.ScriptHash ? SUPPORTED_CUSTODY_CONTRACT_VERSIONS.find((version) => version.accountValidatorHash === credential.hash) : void 0;
577
+ /**
578
+ * Whether a script hash is a logic in the catalogue of a supported contract
579
+ * version: one whose rules Lace has reviewed.
580
+ */
581
+ const isKnownCustodyLogic = (scriptHash) => SUPPORTED_CUSTODY_CONTRACT_VERSIONS.some((version) => findCustodyLogic(version, scriptHash).ok);
582
+ /**
583
+ * Classifies an address on any network against every supported custody
584
+ * contract version. It reads the address only: `account` does not prove
585
+ * that the stake script is a custody stake script or that the account
586
+ * exists.
587
+ */
588
+ const classifyCustodyAddress = (address) => {
589
+ const base = address.asBase();
590
+ const payment = (base ?? address.asEnterprise() ?? address.asPointer())?.getPaymentCredential();
591
+ const contractVersion = payment && versionOfPayment(payment);
592
+ if (!contractVersion) return OTHER;
593
+ const stake = base?.getStakeCredential();
594
+ return stake?.type === Cardano.CredentialType.ScriptHash ? {
595
+ kind: "account",
596
+ contractVersion,
597
+ stakeScriptHash: stake.hash
598
+ } : {
599
+ kind: "unspendable",
600
+ contractVersion
601
+ };
602
+ };
603
+ /** A key equal for two addresses exactly when their Plutus data is equal. */
604
+ const plutusAddressKeyOf = (address) => {
605
+ const recipient = custodyRecipientFromAddress(address);
606
+ return recipient.ok ? recipientKey(recipient.value) : void 0;
607
+ };
608
+ const accountPlutusAddressKey = ({ accountValidatorHash, stakeScriptHash }) => recipientKey({
609
+ paymentCredential: {
610
+ type: Cardano.CredentialType.ScriptHash,
611
+ hash: accountValidatorHash
612
+ },
613
+ stakeCredential: {
614
+ kind: "inline",
615
+ credential: {
616
+ type: Cardano.CredentialType.ScriptHash,
617
+ hash: stakeScriptHash
618
+ }
619
+ }
620
+ });
621
+ const stakeCredentialOf = ({ stakeScriptHash }) => ({
622
+ type: Cardano.CredentialType.ScriptHash,
623
+ hash: stakeScriptHash
624
+ });
625
+ const accountAddressOf = (account, networkId) => Cardano.BaseAddress.fromCredentials(networkId, {
626
+ type: Cardano.CredentialType.ScriptHash,
627
+ hash: account.accountValidatorHash
628
+ }, stakeCredentialOf(account)).toAddress().toBech32();
629
+ const accountRewardAccountOf = (account, networkId) => Cardano.RewardAccount.fromCredential(stakeCredentialOf(account), networkId);
630
+ const stateNftAssetIdOf = ({ accountValidatorHash, stakeScriptHash }) => `${accountValidatorHash}${stakeScriptHash}`;
631
+ /**
632
+ * The asset id of the account's grant token for `slot`, or undefined for a
633
+ * slot no grant token name can carry, which the validator cannot name either.
634
+ */
635
+ const grantAssetIdOf = (account, slot) => slot >= 0n && slot < CUSTODY_SLOT_LIMIT ? custodyGrantAssetId(account, slot) : void 0;
636
+ /**
637
+ * The output's datum as the script context sees it. A resolution that
638
+ * carries both an inline datum and its hash, as some providers report an
639
+ * inline datum, keeps the inline datum.
640
+ */
641
+ const datumOf = (txOut) => {
642
+ if (txOut.datum !== void 0) return {
643
+ datumKind: "inline",
644
+ inlineDatum: txOut.datum
645
+ };
646
+ return {
647
+ datumKind: txOut.datumHash === void 0 ? "none" : "hash",
648
+ inlineDatum: void 0
649
+ };
650
+ };
651
+ const viewOfOutput = (txOut) => {
652
+ const address = Cardano.Address.fromString(txOut.address) ?? void 0;
653
+ return {
654
+ txOut,
655
+ address,
656
+ addressClass: address ? classifyCustodyAddress(address) : OTHER,
657
+ plutusAddressKey: address && plutusAddressKeyOf(address),
658
+ value: valueDeltaOf(txOut.value),
659
+ ...datumOf(txOut),
660
+ hasReferenceScript: txOut.scriptReference !== void 0,
661
+ referenceScriptHash: txOut.scriptReference && Serialization.Script.fromCore(txOut.scriptReference).hash()
662
+ };
663
+ };
664
+ /** The account state an output carries as its inline datum, if it decodes. */
665
+ const decodedInlineState = (view) => {
666
+ if (view.inlineDatum === void 0) return void 0;
667
+ const decoded = decodeCustodyAccountState(view.inlineDatum);
668
+ return decoded.ok ? decoded.value : void 0;
669
+ };
670
+ /** The grant an output carries as its inline datum, if it decodes. */
671
+ const decodedInlineGrant = (view) => {
672
+ if (view.inlineDatum === void 0) return void 0;
673
+ const decoded = decodeCustodyGrant(view.inlineDatum);
674
+ return decoded.ok ? decoded.value : void 0;
675
+ };
676
+ /** Whether the output sits at the account address, compared as Plutus data. */
677
+ const isAtAccount = (view, account) => view.plutusAddressKey !== void 0 && view.plutusAddressKey === accountPlutusAddressKey(account);
678
+ /** `holds_state_nft`: exactly one of the account's state NFT. */
679
+ const holdsStateNft = (value, account) => value.assets.get(stateNftAssetIdOf(account)) === 1n;
680
+ /** `holds_only_lovelace_and_state_nft`: the state NFT and no other token. */
681
+ const holdsOnlyLovelaceAndStateNft = (value, account) => value.assets.size === 1 && holdsStateNft(value, account);
682
+ /** `holds_only_lovelace_and_grant_token`: one grant token of `slot` and no other token. */
683
+ const holdsOnlyLovelaceAndGrantToken = (value, account, slot) => {
684
+ const assetId = grantAssetIdOf(account, slot);
685
+ return assetId !== void 0 && value.assets.size === 1 && value.assets.get(assetId) === 1n;
686
+ };
687
+ /** `holds_no_account_token`: no token under the account validator policy, of any account. */
688
+ const holdsNoAccountToken = (value, accountValidatorHash) => ![...value.assets.keys()].some((assetId) => policyIdOf(assetId) === accountValidatorHash);
689
+ /** Whether a value holds a token of the account: its state NFT or one of its grant tokens. */
690
+ const holdsOwnAccountToken = (value, { accountValidatorHash, stakeScriptHash }) => [...value.assets.keys()].some((assetId) => policyIdOf(assetId) === accountValidatorHash && assetNameOf(assetId).startsWith(stakeScriptHash));
691
+ /** `holds_account_token`: at the account address, holding one of its account tokens. */
692
+ const holdsAccountToken = (view, account) => isAtAccount(view, account) && holdsOwnAccountToken(view.value, account);
693
+ /** `is_control_output`: at the account address, holding its state NFT. */
694
+ const isControlOutput = (view, account) => isAtAccount(view, account) && holdsStateNft(view.value, account);
695
+ /**
696
+ * Which kind of account UTxO an output at the account address is: the
697
+ * control UTxO holds the state NFT, a grant UTxO another token of the
698
+ * account, a reserve no account token and a datum, a fund neither.
699
+ */
700
+ const accountUtxoKindOf = (view, account) => {
701
+ if (holdsStateNft(view.value, account)) return "control";
702
+ if (holdsOwnAccountToken(view.value, account)) return "grant";
703
+ return view.datumKind === "none" ? "fund" : "reserve";
704
+ };
705
+ /**
706
+ * Whether an output breaks `tokens_sit_at_their_own_addresses` for one of
707
+ * the account validators: every token under an account validator policy
708
+ * must be a single one at the account address its name's first 28 bytes
709
+ * name.
710
+ */
711
+ const holdsMisplacedAccountToken = (view, accountValidatorHashes) => [...view.value.assets].some(([assetId, quantity]) => {
712
+ const accountValidatorHash = policyIdOf(assetId);
713
+ if (!accountValidatorHashes.includes(accountValidatorHash)) return false;
714
+ return quantity !== 1n || !isAtAccount(view, {
715
+ accountValidatorHash,
716
+ stakeScriptHash: assetNameOf(assetId).slice(0, STAKE_SCRIPT_HASH_HEX_LENGTH)
717
+ });
718
+ });
719
+ //#endregion
720
+ export { isCustodyLovelaceAsset as A, recipientKey as B, policyIdOf as C, findCustodyStateViolations as D, findCustodyGrantViolations as E, encodeCustodyAccountState as F, unknownAlternative as G, decodeResult as H, encodeCustodyGrant as I, addressOfRepresentableRecipient as L, decodeCustodyGrant as M, decodeCustodyStateDevices as N, isCustodyGrantCurrent as O, decodeCustodyStateLogic as P, custodyRecipientFromAddress as R, negateValueDelta as S, CUSTODY_LOVELACE_ASSET as T, expectConstr as U, constr as V, expectConstrIndex as W, stateNftAssetIdOf as _, classifyCustodyAddress as a, assetNameOf as b, grantAssetIdOf as c, holdsNoAccountToken as d, holdsOnlyLovelaceAndGrantToken as f, isKnownCustodyLogic as g, isControlOutput as h, accountUtxoKindOf as i, decodeCustodyAccountState as j, isCustodyGrantExpired as k, holdsAccountToken as l, isAtAccount as m, accountPlutusAddressKey as n, decodedInlineGrant as o, holdsOnlyLovelaceAndStateNft as p, accountRewardAccountOf as r, decodedInlineState as s, accountAddressOf as t, holdsMisplacedAccountToken as u, viewOfOutput as v, quantityOfAsset as w, isAssetIdOf as x, addValueDeltas as y, custodyRecipientToAddress as z };