@laceio/sdk 0.1.0 → 0.1.1-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 (408) hide show
  1. package/dist/{Ed25519PublicKey-lvu1s54U.cjs → Address-AMKTo-dA.cjs} +17150 -61
  2. package/dist/{Ed25519PublicKey-CjnuAYRR.js → Address-_c_-9hLC.js} +16955 -264
  3. package/dist/{Bip32Account-r3KAhCgU.js → Bip32Account-CaW1zC9Y.js} +4 -5
  4. package/dist/{Bip32Account-Cz3h0ZUa.cjs → Bip32Account-DOaGmKpv.cjs} +4 -5
  5. package/dist/Cardano-B-gyqBBD.js +311 -0
  6. package/dist/Cardano-BQ_af0Y3.cjs +322 -0
  7. package/dist/Ed25519PublicKey-B3QcR0J2.cjs +88 -0
  8. package/dist/Ed25519PublicKey-DIE19xHg.js +83 -0
  9. package/dist/InMemoryKeyAgent-Bc_xZY-v.cjs +652 -0
  10. package/dist/InMemoryKeyAgent-D8T3vtXy.js +631 -0
  11. package/dist/{PaymentAddress-DhbtuYb7.cjs → PaymentAddress-B4n1KZMx.cjs} +1 -2
  12. package/dist/{PaymentAddress-xSmGUQ-8.js → PaymentAddress-Cml3EA1n.js} +1 -2
  13. package/dist/Percent-Cfuw5YyL.cjs +11 -0
  14. package/dist/Percent-DpvyJ_93.js +5 -0
  15. package/dist/SodiumBip32Ed25519-BaD-kjyx.cjs +380 -0
  16. package/dist/SodiumBip32Ed25519-DCikAMsl.js +363 -0
  17. package/dist/{TransactionBuilder-CeJTNzm-.cjs → TransactionBuilder-BakTJvsJ.cjs} +59 -89
  18. package/dist/{TransactionBuilder-DGNDM4kt.js → TransactionBuilder-D2ErwVWv.js} +5 -71
  19. package/dist/_md-6zV2Cme0.cjs +684 -0
  20. package/dist/_md-gbUqlhqd.js +399 -0
  21. package/dist/_web-crypto-random-bytes-BvzwTYPG.js +197 -0
  22. package/dist/acc-module-NL_8mEHH.cjs +27654 -0
  23. package/dist/acc-module-ur8CkBd1.js +27624 -0
  24. package/dist/account-call-B7cF8ly4.cjs +293 -0
  25. package/dist/account-call-BF4rBcNw.js +3 -0
  26. package/dist/account-call-CoCq3V55.js +252 -0
  27. package/dist/account-call-DFcD257E.cjs +4 -0
  28. package/dist/account-guards-BeKbV9D1.cjs +41 -0
  29. package/dist/account-guards-qnFXuXSE.js +36 -0
  30. package/dist/{activity-type.stable-ClO9j_PH.cjs → activity-type-BPXxdHBP.cjs} +2 -1
  31. package/dist/{activity-type.stable-Ml0SOYv9.js → activity-type-C1geyPsH.js} +2 -1
  32. package/dist/address-OxwXIwbF.js +15502 -0
  33. package/dist/address-book-address-validator-BqYM0Uyp.cjs +41 -0
  34. package/dist/{address-book-address-validator-BhqRfmlL.cjs → address-book-address-validator-CGIcqn5W.cjs} +5 -4
  35. package/dist/{address-book-address-validator-VqIOB8PY.js → address-book-address-validator-FkkYim3z.js} +6 -4
  36. package/dist/address-book-address-validator-RSx2Jozy.js +39 -0
  37. package/dist/address-lECYBd9-.cjs +13043 -0
  38. package/dist/{apply-vkey-witnesses-Ctzk7eye.cjs → apply-vkey-witnesses-1jyczTkw.cjs} +1 -1
  39. package/dist/{apply-vkey-witnesses-Dfo7XfhL.js → apply-vkey-witnesses-Byb40-yJ.js} +1 -1
  40. package/dist/artefact-loader-Cqc9eSkL.cjs +182 -0
  41. package/dist/artefact-loader-D0T2f6F7.js +159 -0
  42. package/dist/auto-dismiss-failure-on-success-BWJceNXd.cjs +37 -0
  43. package/dist/auto-dismiss-failure-on-success-Bpod-v4r.js +31 -0
  44. package/dist/bip32-EPpcFrpH.cjs +3851 -0
  45. package/dist/{bip32ed25519-D2In8WzR.cjs → bip32ed25519-CRiG-Kjg.cjs} +5 -4
  46. package/dist/{bip32ed25519-qsLH_eWO.js → bip32ed25519-E-fCUZNv.js} +6 -4
  47. package/dist/bip39-DZomfqeY.js +9 -0
  48. package/dist/bip39-MAck9iod.cjs +26 -0
  49. package/dist/bitcoin-data-provider-D0OT_Uiu.cjs +26 -0
  50. package/dist/bitcoin-data-provider-LN_8oamW.js +21 -0
  51. package/dist/bitcoin.cjs +48 -0
  52. package/dist/bitcoin.d.ts +29805 -1
  53. package/dist/bitcoin.js +22 -0
  54. package/dist/{blake2b-BGHUWMsV.js → blake2b-BL-eR5G2.js} +6 -4
  55. package/dist/{blake2b-DspUqw68.cjs → blake2b-Iy324FwH.cjs} +5 -4
  56. package/dist/{blockfrost-tx-submit-provider-BUEOmdvc.js → blockfrost-tx-submit-provider-BHDLgOIE.js} +9 -162
  57. package/dist/{blockfrost-tx-submit-provider-B5dWbdrZ.cjs → blockfrost-tx-submit-provider-BxC19smv.cjs} +7 -171
  58. package/dist/{blockingWithLatestFrom-BhaE7pnA.js → blockingWithLatestFrom-FUfZFEUG.js} +1 -1
  59. package/dist/{blockingWithLatestFrom-DkuT3G2a.cjs → blockingWithLatestFrom-bmCPgA3c.cjs} +1 -1
  60. package/dist/bn-BFq5a4dk.cjs +2553 -0
  61. package/dist/{SodiumBip32Ed25519-BEfo1Q9m.js → browser-D5jRKv_L.js} +4 -401
  62. package/dist/bytes.vo-CziaOsba.js +24 -0
  63. package/dist/bytes.vo-hecRu3YZ.cjs +35 -0
  64. package/dist/{cardano-network-id-to-network-type-PXvn1ycQ.cjs → cardano-network-id-to-network-type-BwG_d6QP.cjs} +1 -1
  65. package/dist/{cardano-network-id-to-network-type-DHgKhDAK.js → cardano-network-id-to-network-type-CYJheetp.js} +1 -1
  66. package/dist/{cardano-network-id.vo-CbNNKd-k.cjs → cardano-network-id.vo-C5VuBXT3.cjs} +2 -2
  67. package/dist/{cardano-network-id.vo-CTYe-Oix.js → cardano-network-id.vo-CeLJqmb_.js} +2 -2
  68. package/dist/{cardano-tx-id.vo-BMwemq5x.js → cardano-tx-id.vo-DJ70NC0-.js} +1 -1
  69. package/dist/{cardano-tx-id.vo-NY-gCOWJ.cjs → cardano-tx-id.vo-lnyO9XaW.cjs} +1 -1
  70. package/dist/cardano.cjs +31 -24
  71. package/dist/cardano.d.ts +27602 -8121
  72. package/dist/cardano.js +21 -13
  73. package/dist/client-Bw2foG5E.cjs +808 -0
  74. package/dist/const-BB3MccLt.js +153 -0
  75. package/dist/{const-BErUlcZw.cjs → const-BWBAzOmN.cjs} +1 -1
  76. package/dist/const-CSWmOyzn.cjs +42 -0
  77. package/dist/{const-Dy8Ctnpd.cjs → const-D3mCkwrM.cjs} +5 -5
  78. package/dist/const-DW7z3R5k.js +13 -0
  79. package/dist/{const-DeUA7zYl.js → const-DbuUHSzR.js} +5 -5
  80. package/dist/const-DgBzKfz6.cjs +31995 -0
  81. package/dist/{const-DVW6DGkZ.js → const-xGSNCtwQ.js} +1 -1
  82. package/dist/contract-BsIGhsYa.js +171 -0
  83. package/dist/contract-DD6CGnpB.cjs +189 -0
  84. package/dist/create-add-accounts-2mQA0ST2.js +102 -0
  85. package/dist/create-add-accounts-B6mR2NMn.cjs +114 -0
  86. package/dist/{delegation-tx-builder-CF0VunDW.cjs → delegation-tx-builder-Cp30jtj9.cjs} +9 -8
  87. package/dist/{delegation-tx-builder-C8LQxU2R.js → delegation-tx-builder-DUMikSTg.js} +9 -7
  88. package/dist/{deregistration-tx-builder-DcUXA3Ls.cjs → deregistration-tx-builder-B-ZeY-dR.cjs} +10 -9
  89. package/dist/{deregistration-tx-builder-BOBPP8m_.js → deregistration-tx-builder-CRLrK99U.js} +10 -8
  90. package/dist/device-commitment-hex.vo-BIUYUNz1.cjs +31 -0
  91. package/dist/device-commitment-hex.vo-D9FsYLn7.js +26 -0
  92. package/dist/device-key-BToCoS4D.js +2394 -0
  93. package/dist/device-key-D6euvxFi.cjs +2489 -0
  94. package/dist/device-readers-BHJeNR8I.js +3 -0
  95. package/dist/device-readers-Dw7uTNM5.cjs +167 -0
  96. package/dist/device-readers-b4g2j3QL.js +144 -0
  97. package/dist/device-readers-cxcJcWq5.cjs +7 -0
  98. package/dist/dist-B00GN41m.js +141 -0
  99. package/dist/dist-BA1xnF9O.cjs +4413 -0
  100. package/dist/dist-BmHOXLe8.cjs +3814 -0
  101. package/dist/dist-Br0OVXKt.cjs +535 -0
  102. package/dist/dist-C1JK9C1I.cjs +3452 -0
  103. package/dist/dist-DKEViNEI.cjs +1306 -0
  104. package/dist/dist-Dwqx184a.cjs +43175 -0
  105. package/dist/dist-MJof_Ky1.cjs +145 -0
  106. package/dist/dist-p84sVVJ9.cjs +1394 -0
  107. package/dist/{earn-rewards-tx-builder-BRlTueHS.js → earn-rewards-tx-builder-8G_rouIk.js} +9 -7
  108. package/dist/{earn-rewards-tx-builder-RgO0QUY8.cjs → earn-rewards-tx-builder-cOUNV58E.cjs} +9 -8
  109. package/dist/enc-key-circuits-0Dud78IB.js +13 -0
  110. package/dist/enc-key-circuits-yjPHbuo_.cjs +24 -0
  111. package/dist/english-BZ_ebp2-.cjs +2057 -0
  112. package/dist/envelopes-B3QCzo5p.js +2658 -0
  113. package/dist/envelopes-BdE1xlgz.cjs +2777 -0
  114. package/dist/errors-BA3b8aVu.cjs +584 -0
  115. package/dist/errors-pkQdxW-7.js +392 -0
  116. package/dist/experimental.cjs +6820 -0
  117. package/dist/experimental.d.ts +63552 -0
  118. package/dist/experimental.js +6670 -0
  119. package/dist/fees-6C2uEWFK.js +653 -0
  120. package/dist/fees-DtC71fOx.cjs +820 -0
  121. package/dist/gated-call-BrPjKolT.js +3 -0
  122. package/dist/gated-call-CcsuW9L5.js +691 -0
  123. package/dist/gated-call-DdDrxEq5.cjs +732 -0
  124. package/dist/gated-call-Dk7PazhG.cjs +4 -0
  125. package/dist/grant-rules-B7eDuD5G.cjs +5468 -0
  126. package/dist/grant-rules-qLrKUIR3.js +5217 -0
  127. package/dist/grant-status-CDmZpx32.js +296 -0
  128. package/dist/grant-status-CQtwjLsA.cjs +337 -0
  129. package/dist/grants-Bnb-3Hkv.cjs +16 -0
  130. package/dist/grants-CIb6nOV7.cjs +273 -0
  131. package/dist/grants-CYY0AquW.js +202 -0
  132. package/dist/grants-DOsFSotP.js +4 -0
  133. package/dist/{group-cardano-addresses-by-account-C-1GHUu8.cjs → group-cardano-addresses-by-account-BGOtPV-Y.cjs} +4 -40
  134. package/dist/{group-cardano-addresses-by-account-p4dXmCoj.js → group-cardano-addresses-by-account-TqvESg9x.js} +6 -37
  135. package/dist/{guarded-transaction-signer-DZSGHp1K.js → guarded-transaction-signer-BbVDE9Nn.js} +12 -18
  136. package/dist/{guarded-transaction-signer-BLSezbfV.cjs → guarded-transaction-signer-DTLjAkif.cjs} +26 -26
  137. package/dist/hex-BVtOKJki.cjs +263 -0
  138. package/dist/hex-CGYJPK_Z.js +192 -0
  139. package/dist/http-client-B7_kBTYn.js +155 -0
  140. package/dist/http-client-DYQ_7Rdf.cjs +167 -0
  141. package/dist/identity-DxPhxkZs.js +239 -0
  142. package/dist/identity-y41Yle03.cjs +274 -0
  143. package/dist/in-memory-wallet-integration-5BKiAvPT.js +20861 -0
  144. package/dist/{in-memory-wallet-integration-CUTa68ET.js → in-memory-wallet-integration-BCOqDgbt.js} +10 -107
  145. package/dist/in-memory-wallet-integration-Bi8I9Dso.js +128 -0
  146. package/dist/in-memory-wallet-integration-Bsl2ONua.cjs +239 -0
  147. package/dist/in-memory-wallet-integration-DZ0CAyvY.cjs +20865 -0
  148. package/dist/{in-memory-wallet-integration-Dw_S7amX.cjs → in-memory-wallet-integration-DsFm8gLk.cjs} +21 -112
  149. package/dist/{in-memory-wallet-integration-Z4Bp_DTv.cjs → in-memory-wallet-integration-aW_SF-go.cjs} +8 -5
  150. package/dist/{in-memory-wallet-integration-B6cbAlvD.js → in-memory-wallet-integration-mIEc8EfR.js} +9 -5
  151. package/dist/index.cjs +95 -58
  152. package/dist/index.d.ts +45152 -13448
  153. package/dist/index.js +55 -28
  154. package/dist/{init-CVi8J0zk.cjs → init-5SfWgCYD.cjs} +3 -3
  155. package/dist/{init-Ci7aqWCf2.cjs → init-8NVWbo302.cjs} +2 -2
  156. package/dist/init-B-C7n6u6.js +5 -0
  157. package/dist/{init-BFMWRf-L.js → init-B-ppfGO-.js} +1 -1
  158. package/dist/{init-IiR093Jw.cjs → init-B2OUhY5T.cjs} +2 -2
  159. package/dist/{init-DXnus199.cjs → init-B6Eg_o6G.cjs} +5 -5
  160. package/dist/{init-4hDl5bpr.js → init-BAWMHL1k.js} +2 -2
  161. package/dist/init-BC2CZZOu2.cjs +2002 -0
  162. package/dist/{init-a228hXnS.cjs → init-BF-a2p6E.cjs} +65 -73
  163. package/dist/{init-fFirX8OY.cjs → init-BFxlQAD8.cjs} +1 -1
  164. package/dist/init-BJE1ry0O.js +17 -0
  165. package/dist/{init-BVnI4z2J.js → init-BPKBVOHU.js} +2 -2
  166. package/dist/{init-bdqZBd-o.js → init-BSP_xcpB.js} +2 -2
  167. package/dist/{init-CFNOn3lo.js → init-BSd7mznK.js} +3 -3
  168. package/dist/{init-MjR4swi6.js → init-BUJTT0MN.js} +36 -43
  169. package/dist/init-BUpFzYsD.cjs +143 -0
  170. package/dist/{init-BvpYHyLH.cjs → init-BZ-WyAIL.cjs} +3 -3
  171. package/dist/init-BZdfdLX7.js +422 -0
  172. package/dist/{init-CJeOys1w.cjs → init-B_HWNXMD.cjs} +2 -2
  173. package/dist/init-BbIMt6xU.cjs +6 -0
  174. package/dist/{init-BYdN1aqE.cjs → init-BewG6swt.cjs} +2 -2
  175. package/dist/{init-BX0AZAVH2.js → init-Bilqsbng.js} +2 -2
  176. package/dist/{init-Tpn9VkFu.cjs → init-BpwlQ6wF.cjs} +1 -1
  177. package/dist/{init-D5-P0HXK.js → init-BtQOzUjX.js} +1 -1
  178. package/dist/{init-BvGz3qUd2.js → init-CCTscPaY2.js} +2 -2
  179. package/dist/{init-D4hPipCD.cjs → init-CH0yyBof.cjs} +1 -1
  180. package/dist/init-CaIkrXal.cjs +121 -0
  181. package/dist/init-CkZy4IMf.cjs +107 -0
  182. package/dist/{init-Drr2f_Pr.js → init-CmfcY7SV.js} +1 -1
  183. package/dist/{init-Kf3_OLv6.js → init-CnJAlks_.js} +1 -1
  184. package/dist/{init-Cdjt_z-b.cjs → init-CqqmtAIK.cjs} +4 -4
  185. package/dist/{init-Bb0avZeZ.js → init-Cu2znmIc.js} +5 -5
  186. package/dist/init-Cz5LAizN.js +2001 -0
  187. package/dist/init-D4WM3-Mn.cjs +18 -0
  188. package/dist/init-DMi2FGpf.cjs +424 -0
  189. package/dist/{init-lcaUSOOG.js → init-DPTJohPd.js} +1 -1
  190. package/dist/{init-BTYLMF9F2.cjs → init-DexLSprL2.cjs} +258 -61
  191. package/dist/init-DfKPgD21.js +106 -0
  192. package/dist/init-DgzRsI-C.js +141 -0
  193. package/dist/init-Dj4Cn7-P.js +4789 -0
  194. package/dist/init-DktAnYI0.cjs +2354 -0
  195. package/dist/{init-DFwhgert.cjs → init-DmyuM9Lo.cjs} +1 -1
  196. package/dist/{init-CX_zLXc6.js → init-IBnizp1U.js} +5 -5
  197. package/dist/init-MDKB6tGI2.cjs +4790 -0
  198. package/dist/{init-DbZ5byj42.js → init-TbB38KNt2.js} +258 -60
  199. package/dist/init-X6m_cqDy.js +2353 -0
  200. package/dist/{init-DvVgKCaP2.cjs → init-bzvl1JhF.cjs} +2 -2
  201. package/dist/{init-BgrY29gW.js → init-dsYkC_0B.js} +4 -4
  202. package/dist/{init-B5BsI3DR.cjs → init-kvn5FlPS.cjs} +7 -7
  203. package/dist/init-vfy9DW_E.js +119 -0
  204. package/dist/{init-BE_6Jyc4.js → init-w7xl6LsP.js} +3 -3
  205. package/dist/{init-DEsWVyn5.cjs → init-wgiBUmyW.cjs} +1 -1
  206. package/dist/{is-retriable-error-DWv_ob-f.js → is-retriable-error-CmFR20pe.js} +1 -1
  207. package/dist/{is-retriable-error-Dtb4JGjd.cjs → is-retriable-error-D2yo0_lS.cjs} +1 -1
  208. package/dist/jubjub-authoriser-A2c8vmkN.js +84 -0
  209. package/dist/jubjub-authoriser-D3ZDgzcF.cjs +85 -0
  210. package/dist/key-source-CcLTx8HK.js +2761 -0
  211. package/dist/key-source-D2tTAag-.cjs +806 -0
  212. package/dist/{key-value-store-DTX1quRS.js → key-value-store-DZcNDB3n.js} +1 -1
  213. package/dist/{key-value-store-B-XRIwaM.cjs → key-value-store-Htj4RgMe.cjs} +1 -1
  214. package/dist/keyDerivation-DcKRUCVh.cjs +274 -0
  215. package/dist/keyDerivation-QGesIMbS.js +4077 -0
  216. package/dist/{lace-context-FpU3iG3f.cjs → lace-context-BN0b_ury.cjs} +4 -4
  217. package/dist/{lace-context-BQvvxVLm.js → lace-context-DMRJ87Vg.js} +4 -4
  218. package/dist/lib-BC-62Byh.cjs +2359 -0
  219. package/dist/lib-JYqcAX0c.js +2354 -0
  220. package/dist/midnight-account-id.vo--Vcx34Xk.cjs +10 -0
  221. package/dist/midnight-account-id.vo-BuB8fiVO.js +5 -0
  222. package/dist/midnight-engine-B7D2hbHo.js +5 -0
  223. package/dist/midnight-engine-D5ikN_5F.cjs +6 -0
  224. package/dist/midnight-wallet-BOdFD6SX.cjs +24 -0
  225. package/dist/midnight-wallet-CAqZrNVe.js +18 -0
  226. package/dist/midnight.cjs +1412 -0
  227. package/dist/midnight.d.ts +28609 -0
  228. package/dist/midnight.js +1355 -0
  229. package/dist/modules-cardano-BiL9hoM3.js +996 -0
  230. package/dist/modules-cardano-UeXks3sd.cjs +1109 -0
  231. package/dist/node-relay-BOuvdZvC.cjs +49 -0
  232. package/dist/node-relay-CLtc5n1v.js +48 -0
  233. package/dist/outputs-5qdW8s-f.js +196 -0
  234. package/dist/outputs-BEM1GPMf.cjs +339 -0
  235. package/dist/{SodiumBip32Ed25519-BQUcrQWX.cjs → pbkdf2-B1veireP.cjs} +6 -411
  236. package/dist/pending-operation-CfTUNQVD.cjs +26 -0
  237. package/dist/pending-operation-Ljijb1Uh.js +21 -0
  238. package/dist/providers-1on_fwJO.cjs +364 -0
  239. package/dist/providers-C1MsxfMA.js +341 -0
  240. package/dist/redacted-4SJPqt-G.js +81 -0
  241. package/dist/redacted-DwxIDdIF.cjs +86 -0
  242. package/dist/{reselect-DPML1uFN.cjs → reselect-kP4DaAII.cjs} +1 -1
  243. package/dist/{retry-config-oNtfdyrG.cjs → retry-config-BGv5q5QM.cjs} +1 -1
  244. package/dist/{retry-config-VdbuqBsI.js → retry-config-Bu5Yn5ua.js} +1 -1
  245. package/dist/safe-buffer-CqGpSFCQ.js +43 -0
  246. package/dist/safe-buffer-DbXbwhUQ.cjs +48 -0
  247. package/dist/sdk-1SRu8Ype.cjs +1445 -0
  248. package/dist/sdk-BneJm7ey.js +1249 -0
  249. package/dist/sdk-init-9TG1ZvHF.cjs +3795 -0
  250. package/dist/sdk-init-Ce3mD-8F.js +1047 -0
  251. package/dist/secret-box-CSmRp6Tt.js +3777 -0
  252. package/dist/secret-box-ZfbYwBgS.cjs +6970 -0
  253. package/dist/send-proof-progress-DtAcrMP6.cjs +33 -0
  254. package/dist/send-proof-progress-Dx2cUz1B.js +22 -0
  255. package/dist/sha2-DaRJZOjk.cjs +390 -0
  256. package/dist/sha2-c4sB6peD.js +378 -0
  257. package/dist/side-effects-C3BhLrdP.js +768 -0
  258. package/dist/side-effects-DG0R-KFc.cjs +804 -0
  259. package/dist/sign-bitcoin-transaction-with-seed-C7vq9om8.js +147 -0
  260. package/dist/sign-bitcoin-transaction-with-seed-Ds1dwzan.cjs +158 -0
  261. package/dist/signer--2I6poMD.js +2 -0
  262. package/dist/signer-CX21Ups_.cjs +121 -0
  263. package/dist/signer-Cnn9q9oY.js +92 -0
  264. package/dist/signer-DbSxjk0F.cjs +7 -0
  265. package/dist/signer-factory-B5oFuUZ-.cjs +130 -0
  266. package/dist/signer-factory-BAt8FPNc.cjs +281 -0
  267. package/dist/signer-factory-BGE4nL4k.js +129 -0
  268. package/dist/signer-factory-C4pgsiJi.js +281 -0
  269. package/dist/{signer-factory-DySc1wRX.cjs → signer-factory-D95jQIPV.cjs} +9 -6
  270. package/dist/{signer-factory-D4HrwFPl.js → signer-factory-PrpsGX-8.js} +10 -6
  271. package/dist/{slice-BZTQgYSs.js → slice-B-xJcuT1.js} +4 -4
  272. package/dist/slice-B4QOYaOG.cjs +105 -0
  273. package/dist/{slice-CtIMw2YT.cjs → slice-B9QKuhi0.cjs} +3 -3
  274. package/dist/slice-BKnGkAkd.cjs +9031 -0
  275. package/dist/{slice-Bhwmqn1p.cjs → slice-Bf4enJKZ.cjs} +8 -8
  276. package/dist/{slice-DaNVz7_l.js → slice-ByNWnxKS.js} +8 -8
  277. package/dist/{slice-C2UDQrdt.js → slice-C1zOeseG.js} +449 -355
  278. package/dist/{slice-DFLyKRm5.cjs → slice-C4toRM6A.cjs} +2 -2
  279. package/dist/{slice-Cx4dULDA.cjs → slice-C8YVv4Qn.cjs} +1 -1
  280. package/dist/{slice-jnpOgiSZ.cjs → slice-CaMfviYu.cjs} +3 -3
  281. package/dist/{slice-DFvrwUur.js → slice-CgeRsYRg.js} +6 -6
  282. package/dist/slice-Cwt8jShq.js +9013 -0
  283. package/dist/{slice-zNEspZND.js → slice-D0VzpMbY.js} +2 -2
  284. package/dist/slice-D14F78Ca.js +87 -0
  285. package/dist/{slice-F6A1YKOF.cjs → slice-DLflttAu.cjs} +479 -366
  286. package/dist/{slice-C96EdeY1.js → slice-DcO-iNz2.js} +1 -1
  287. package/dist/{slice-C19quNWM.cjs → slice-DimtxfAT.cjs} +2 -2
  288. package/dist/{slice-KiNoGwD9.js → slice-DlTEqIoI.js} +1 -1
  289. package/dist/{slice-ws8PccRX.js → slice-Dn0WojD7.js} +3 -3
  290. package/dist/{slice-BLSxLmie.cjs → slice-Dongunf7.cjs} +4 -4
  291. package/dist/{slice-B6vPum19.js → slice-DpufJAjJ.js} +2 -2
  292. package/dist/{slice-exhhmucR.cjs → slice-DtitVc9L.cjs} +7 -7
  293. package/dist/{slice-Bjj2t2ut.cjs → slice-WMMMc1Xv.cjs} +2 -2
  294. package/dist/slice-a8VuIqzS.cjs +378 -0
  295. package/dist/slice-bRASyM-m.js +354 -0
  296. package/dist/{slice-CBFrgHSH.js → slice-hNyKbDry.js} +3 -3
  297. package/dist/{InMemoryKeyAgent-pyB2gA-N.cjs → src-BayYMIjw.cjs} +20 -8228
  298. package/dist/{InMemoryKeyAgent-D-3HejxN.js → src-CgINPlSx.js} +29 -4811
  299. package/dist/store-AUlTfcI_.js +37 -0
  300. package/dist/store-C7AneHEY.cjs +66 -0
  301. package/dist/submit-BuBCVi-l.cjs +87 -0
  302. package/dist/submit-D37lxFrK.js +70 -0
  303. package/dist/submit-bitcoin-tx-DFLnhidO.js +983 -0
  304. package/dist/submit-bitcoin-tx-sih2hSfb.cjs +1049 -0
  305. package/dist/{subtractValueQuantities-DfZg6oiG.js → subtractValueQuantities-BuDJVxq6.js} +3 -22
  306. package/dist/{subtractValueQuantities-C8qDTtgH.cjs → subtractValueQuantities-CqR606HV.cjs} +2 -32
  307. package/dist/{sync-operation-utils-BrQyWFS_.cjs → sync-operation-utils--Z_IQfyW.cjs} +0 -66
  308. package/dist/{sync-operation-utils-CAaCGvEN.js → sync-operation-utils-BimBpvI3.js} +1 -37
  309. package/dist/token-color.vo-CItgoOjw.js +26 -0
  310. package/dist/token-color.vo-Ca4hUXfh.cjs +37 -0
  311. package/dist/token-id-mapper-BVau2RXa.js +16 -0
  312. package/dist/token-id-mapper-CSeLzM4o.cjs +18 -0
  313. package/dist/{token-id-mapper-pDaTxpw2.js → token-id-mapper-ClBeIdJR.js} +2 -2
  314. package/dist/{token-id-mapper-DYcd8hhQ.cjs → token-id-mapper-D0wFdbOy.cjs} +2 -2
  315. package/dist/types-BhzypKMS.cjs +15 -0
  316. package/dist/types-DTE1ctDB.js +10 -0
  317. package/dist/types-DXSxXGz0.js +12 -0
  318. package/dist/types-Dls6Z5gV.cjs +23 -0
  319. package/dist/{util-P4PX2muj.cjs → util-D1YlKzrc.cjs} +2 -2
  320. package/dist/{util-CQSJU0wT.js → util-DHxtzUzY.js} +2 -2
  321. package/dist/{utils-Bv4OHT4S.cjs → utils-DYf4iZKX.cjs} +7 -1
  322. package/dist/{utils-DrtzChYN.js → utils-DcnoETEP.js} +2 -2
  323. package/dist/utils-Du0YXRcU.cjs +112 -0
  324. package/dist/utils-fF_rnZe3.js +65 -0
  325. package/dist/v8Signatures-ClGpA8mS.cjs +71 -0
  326. package/dist/{vote-delegation-tx-builder-69gOEkCB.cjs → vote-delegation-tx-builder-BjZxCOd3.cjs} +9 -8
  327. package/dist/{vote-delegation-tx-builder-BRJ_pf-c.js → vote-delegation-tx-builder-DRJwPXkD.js} +9 -7
  328. package/dist/watch-FGE4B_Ge.js +13056 -0
  329. package/dist/watch-imlsRZDp.cjs +52207 -0
  330. package/package.json +95 -3
  331. package/dist/Address-4KjeDt_x.cjs +0 -17269
  332. package/dist/Address-_VPkf7Xh.js +0 -17101
  333. package/dist/account-guards.stable-BKyYPj4z.cjs +0 -10
  334. package/dist/account-guards.stable-BdmQ43vC.js +0 -5
  335. package/dist/init-BR9ZIbED.cjs +0 -378
  336. package/dist/init-B_k1RUN_.cjs +0 -21
  337. package/dist/init-Bs3b5ZQH.js +0 -378
  338. package/dist/init-ChfcrHgG2.cjs +0 -4354
  339. package/dist/init-D1uUMMpG.js +0 -19
  340. package/dist/init-DV1OSZiK.js +0 -4352
  341. package/dist/modules-cardano-BINzpXpk.js +0 -5454
  342. package/dist/modules-cardano-Dt8OwoQb.cjs +0 -5640
  343. package/dist/slice-Caf98m0d2.js +0 -107
  344. package/dist/slice-PM6llajQ2.cjs +0 -125
  345. /package/dist/{BigIntMath-CoJWXt1h.cjs → BigIntMath-CBciEQn2.cjs} +0 -0
  346. /package/dist/{BigIntMath-BWUJOsOW.js → BigIntMath-X3EniYDo.js} +0 -0
  347. /package/dist/{ChainId-sdLmlIRk.cjs → ChainId-CNPSU9nn.cjs} +0 -0
  348. /package/dist/{ChainId-CKbm87yQ.js → ChainId-CeoG8Sov.js} +0 -0
  349. /package/dist/{_polyfill-node.process-4fnlkbBi.cjs → _polyfill-node.process-5UxyjoHG.cjs} +0 -0
  350. /package/dist/{account-id.vo-Xpgnu-av.cjs → account-id.vo-DYZBZQsz.cjs} +0 -0
  351. /package/dist/{account-id.vo-DP0BtOoF.js → account-id.vo-KDTWJ-W5.js} +0 -0
  352. /package/dist/{actions-BNagEO6m.cjs → actions-BnHFVSr_.cjs} +0 -0
  353. /package/dist/{actions-BWTyAr7B.js → actions-Cwj0ApZf.js} +0 -0
  354. /package/dist/{asyncoption-po7-RiA5.cjs → asyncoption-CYcZNBRM.cjs} +0 -0
  355. /package/dist/{asyncoption-CzIVH5Y1.js → asyncoption-DZQGfznq.js} +0 -0
  356. /package/dist/{bignum.vo-DhhZ9HP1.js → bignum.vo-Co6tMH2q.js} +0 -0
  357. /package/dist/{bignum.vo-CpkrIXjH.cjs → bignum.vo-Du-bpvar.cjs} +0 -0
  358. /package/dist/{blockchain-network-id.vo-CbgrAY_K.js → blockchain-network-id.vo-C6Jowh8t.js} +0 -0
  359. /package/dist/{blockchain-network-id.vo-5iC6Kffo.cjs → blockchain-network-id.vo-DEQ14dYj.cjs} +0 -0
  360. /package/dist/{composite-signer-factory-DABpCe1_.js → composite-signer-factory-D9RWY-1V.js} +0 -0
  361. /package/dist/{composite-signer-factory-BizuNPP7.cjs → composite-signer-factory-v4Pxn8bA.cjs} +0 -0
  362. /package/dist/{error-ggOihIfv.cjs → error-B6wj9nPv.cjs} +0 -0
  363. /package/dist/{error-DHKO2iS4.js → error-CvEYL98P.js} +0 -0
  364. /package/dist/{esm-browser-DnXNvpcn.cjs → esm-browser-CZbMeVod.cjs} +0 -0
  365. /package/dist/{esm-browser-BBVQuyQv.js → esm-browser-DpAD_RKv.js} +0 -0
  366. /package/dist/{feature-flag-key.vo-DoGK5Bfh.js → feature-flag-key.vo-9reURsOQ.js} +0 -0
  367. /package/dist/{feature-flag-key.vo-CP1Z9s8e.cjs → feature-flag-key.vo-KTIdnzYX.cjs} +0 -0
  368. /package/dist/{first-state-of-status-Bx4-QQ5m.cjs → first-state-of-status-9ICeDNSa.cjs} +0 -0
  369. /package/dist/{first-state-of-status-D7XzEuSa.js → first-state-of-status-BscbKj_t.js} +0 -0
  370. /package/dist/{init-4319psUJ.cjs → init-BT67pd9x.cjs} +0 -0
  371. /package/dist/{init-AFUM1TSg.js → init-CHk1fvJ2.js} +0 -0
  372. /package/dist/{init-ZX90nEJe2.js → init-DIyNx6DZ.js} +0 -0
  373. /package/dist/{init-CTQ2g6Xt.js → init-DtxxFaCx.js} +0 -0
  374. /package/dist/{init-Dt1Xifg_2.cjs → init-J8QobR93.cjs} +0 -0
  375. /package/dist/{init-BNewLCqw.cjs → init-xzZPlQwB.cjs} +0 -0
  376. /package/dist/{is-redux-persist-state-DxJSsvxB.cjs → is-redux-persist-state-C5luvPEH.cjs} +0 -0
  377. /package/dist/{is-redux-persist-state-Bl2n4VMr.js → is-redux-persist-state-CjcqyCoh.js} +0 -0
  378. /package/dist/{isNotNil-CZxBMfL5.js → isNotNil-Be7gCY0m.js} +0 -0
  379. /package/dist/{isNotNil-C_SO1tcC.cjs → isNotNil-CrYIUFry.cjs} +0 -0
  380. /package/dist/{logging-BvMDKgl0.js → logging-BAMMfn5j.js} +0 -0
  381. /package/dist/{logging-Bh9ikph3.cjs → logging-CbxgIX9V.cjs} +0 -0
  382. /package/dist/{metadatum-B-sxBnSY.cjs → metadatum-BGvFqGPt.cjs} +0 -0
  383. /package/dist/{metadatum-Ego4jVas.js → metadatum-BVocMYy_.js} +0 -0
  384. /package/dist/{repo-slice-BzZQUTj8.cjs → repo-slice-BB_W-6OL.cjs} +0 -0
  385. /package/dist/{repo-slice-vCcQJotS.js → repo-slice-BQlssw9M.js} +0 -0
  386. /package/dist/{reselect-BPkMzw3k.js → reselect-JIgawvPe.js} +0 -0
  387. /package/dist/{serializable-BxFUShKY.js → serializable-F7OtYl8d.js} +0 -0
  388. /package/dist/{serializable-DWgkHhv_.cjs → serializable-n3UoxbZc.cjs} +0 -0
  389. /package/dist/{slice-DY-DNtSi.js → slice-5dGBAz6w.js} +0 -0
  390. /package/dist/{slice-BEFoeqgr.cjs → slice-BzJgg9FS.cjs} +0 -0
  391. /package/dist/{src-CPmX4KUh.cjs → src-CeBNkonz.cjs} +0 -0
  392. /package/dist/{src-XOZXPKxe.js → src-Cv1ifqbe.js} +0 -0
  393. /package/dist/{time-CQPt4FdU.js → time-ByoKevdZ.js} +0 -0
  394. /package/dist/{time-Blvoyh9G.cjs → time-qD7edGU0.cjs} +0 -0
  395. /package/dist/{time.vo-Xln4yGBU.js → time.vo-C17-tYq3.js} +0 -0
  396. /package/dist/{time.vo-rwWwJzmP.cjs → time.vo-TmYE-_Y2.cjs} +0 -0
  397. /package/dist/{toEmpty-CzmoZVLN.cjs → toEmpty-Db6V94Mf.cjs} +0 -0
  398. /package/dist/{toEmpty-DzLd-ZCi.js → toEmpty-Djj-QbpI.js} +0 -0
  399. /package/dist/{token-id.vo-l8fuSpem.cjs → token-id.vo-CZ622zcZ.cjs} +0 -0
  400. /package/dist/{token-id.vo-DMKSaMlc.js → token-id.vo-IDI9C_Qm.js} +0 -0
  401. /package/dist/{types-B61DQoFW.js → types-By-XeXWg.js} +0 -0
  402. /package/dist/{types-CUC-Kcqh.cjs → types-Cn6WlQV6.cjs} +0 -0
  403. /package/dist/{util-BV3iGOrz.cjs → util-Cp1h58uD.cjs} +0 -0
  404. /package/dist/{util-BsQKLorV.js → util-DHppXj7U.js} +0 -0
  405. /package/dist/{util-selector-CKIyoAOz.js → util-selector-BWmHpo92.js} +0 -0
  406. /package/dist/{util-selector-C9H5RsNw.cjs → util-selector-glXkO-jR.cjs} +0 -0
  407. /package/dist/{while-active-CNXeLxre.js → while-active-CDBnUlQA.js} +0 -0
  408. /package/dist/{while-active-BsDWSNrO.cjs → while-active-I2TlHtm7.cjs} +0 -0
@@ -0,0 +1,2002 @@
1
+ const require_chunk = require("./chunk-9hOWP6kD.cjs");
2
+ const require_errors = require("./errors-lg3enbYs.cjs");
3
+ require("./_polyfill-buffer-patch-BycQkEkK.cjs");
4
+ require("./dist-MJof_Ky1.cjs");
5
+ const require_Address = require("./Address-AMKTo-dA.cjs");
6
+ const require_isNotNil = require("./isNotNil-CrYIUFry.cjs");
7
+ const require_SodiumBip32Ed25519 = require("./SodiumBip32Ed25519-BaD-kjyx.cjs");
8
+ require("./pbkdf2-B1veireP.cjs");
9
+ require("./safe-buffer-DbXbwhUQ.cjs");
10
+ const require_PaymentAddress = require("./PaymentAddress-B4n1KZMx.cjs");
11
+ const require_types = require("./types-Cn6WlQV6.cjs");
12
+ const require_blockfrost_tx_submit_provider = require("./blockfrost-tx-submit-provider-BxC19smv.cjs");
13
+ const require_util = require("./util-D1YlKzrc.cjs");
14
+ const require_time_vo = require("./time.vo-TmYE-_Y2.cjs");
15
+ const require_bignum_vo = require("./bignum.vo-Du-bpvar.cjs");
16
+ const require_asyncoption = require("./asyncoption-CYcZNBRM.cjs");
17
+ const require_token_id_vo = require("./token-id.vo-CZ622zcZ.cjs");
18
+ const require_const = require("./const-D3mCkwrM.cjs");
19
+ const require_cardano_network_id_to_network_type = require("./cardano-network-id-to-network-type-BwG_d6QP.cjs");
20
+ const require_error = require("./error-B6wj9nPv.cjs");
21
+ const require_http_client = require("./http-client-DYQ_7Rdf.cjs");
22
+ const require_lib$1 = require("./lib-BC-62Byh.cjs");
23
+ let rxjs = require("rxjs");
24
+ let lodash_omit_js = require("lodash/omit.js");
25
+ lodash_omit_js = require_chunk.__toESM(lodash_omit_js);
26
+ let lodash_memoize = require("lodash/memoize.js");
27
+ lodash_memoize = require_chunk.__toESM(lodash_memoize);
28
+ //#region ../../node_modules/@biglup/is-cid/dist/esm/index.js
29
+ var __defProp = Object.defineProperty;
30
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value
35
+ }) : obj[key] = value;
36
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
37
+ new Uint8Array(0);
38
+ function equals(aa, bb) {
39
+ if (aa === bb) return true;
40
+ if (aa.byteLength !== bb.byteLength) return false;
41
+ for (let ii = 0; ii < aa.byteLength; ii++) if (aa[ii] !== bb[ii]) return false;
42
+ return true;
43
+ }
44
+ function coerce(o) {
45
+ if (o instanceof Uint8Array && o.constructor.name === "Uint8Array") return o;
46
+ if (o instanceof ArrayBuffer) return new Uint8Array(o);
47
+ if (ArrayBuffer.isView(o)) return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);
48
+ throw new Error("Unknown type, must be binary type");
49
+ }
50
+ function base(ALPHABET, name) {
51
+ if (ALPHABET.length >= 255) throw new TypeError("Alphabet too long");
52
+ var BASE_MAP = new Uint8Array(256);
53
+ for (var j = 0; j < BASE_MAP.length; j++) BASE_MAP[j] = 255;
54
+ for (var i = 0; i < ALPHABET.length; i++) {
55
+ var x = ALPHABET.charAt(i);
56
+ var xc = x.charCodeAt(0);
57
+ if (BASE_MAP[xc] !== 255) throw new TypeError(x + " is ambiguous");
58
+ BASE_MAP[xc] = i;
59
+ }
60
+ var BASE = ALPHABET.length;
61
+ var LEADER = ALPHABET.charAt(0);
62
+ var FACTOR = Math.log(BASE) / Math.log(256);
63
+ var iFACTOR = Math.log(256) / Math.log(BASE);
64
+ function encode3(source) {
65
+ if (source instanceof Uint8Array);
66
+ else if (ArrayBuffer.isView(source)) source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
67
+ else if (Array.isArray(source)) source = Uint8Array.from(source);
68
+ if (!(source instanceof Uint8Array)) throw new TypeError("Expected Uint8Array");
69
+ if (source.length === 0) return "";
70
+ var zeroes = 0;
71
+ var length2 = 0;
72
+ var pbegin = 0;
73
+ var pend = source.length;
74
+ while (pbegin !== pend && source[pbegin] === 0) {
75
+ pbegin++;
76
+ zeroes++;
77
+ }
78
+ var size = (pend - pbegin) * iFACTOR + 1 >>> 0;
79
+ var b58 = new Uint8Array(size);
80
+ while (pbegin !== pend) {
81
+ var carry = source[pbegin];
82
+ var i2 = 0;
83
+ for (var it1 = size - 1; (carry !== 0 || i2 < length2) && it1 !== -1; it1--, i2++) {
84
+ carry += 256 * b58[it1] >>> 0;
85
+ b58[it1] = carry % BASE >>> 0;
86
+ carry = carry / BASE >>> 0;
87
+ }
88
+ if (carry !== 0) throw new Error("Non-zero carry");
89
+ length2 = i2;
90
+ pbegin++;
91
+ }
92
+ var it2 = size - length2;
93
+ while (it2 !== size && b58[it2] === 0) it2++;
94
+ var str = LEADER.repeat(zeroes);
95
+ for (; it2 < size; ++it2) str += ALPHABET.charAt(b58[it2]);
96
+ return str;
97
+ }
98
+ function decodeUnsafe(source) {
99
+ if (typeof source !== "string") throw new TypeError("Expected String");
100
+ if (source.length === 0) return new Uint8Array();
101
+ var psz = 0;
102
+ if (source[psz] === " ") return;
103
+ var zeroes = 0;
104
+ var length2 = 0;
105
+ while (source[psz] === LEADER) {
106
+ zeroes++;
107
+ psz++;
108
+ }
109
+ var size = (source.length - psz) * FACTOR + 1 >>> 0;
110
+ var b256 = new Uint8Array(size);
111
+ while (source[psz]) {
112
+ var carry = BASE_MAP[source.charCodeAt(psz)];
113
+ if (carry === 255) return;
114
+ var i2 = 0;
115
+ for (var it3 = size - 1; (carry !== 0 || i2 < length2) && it3 !== -1; it3--, i2++) {
116
+ carry += BASE * b256[it3] >>> 0;
117
+ b256[it3] = carry % 256 >>> 0;
118
+ carry = carry / 256 >>> 0;
119
+ }
120
+ if (carry !== 0) throw new Error("Non-zero carry");
121
+ length2 = i2;
122
+ psz++;
123
+ }
124
+ if (source[psz] === " ") return;
125
+ var it4 = size - length2;
126
+ while (it4 !== size && b256[it4] === 0) it4++;
127
+ var vch = new Uint8Array(zeroes + (size - it4));
128
+ var j2 = zeroes;
129
+ while (it4 !== size) vch[j2++] = b256[it4++];
130
+ return vch;
131
+ }
132
+ function decode5(string) {
133
+ var buffer = decodeUnsafe(string);
134
+ if (buffer) return buffer;
135
+ throw new Error(`Non-${name} character`);
136
+ }
137
+ return {
138
+ encode: encode3,
139
+ decodeUnsafe,
140
+ decode: decode5
141
+ };
142
+ }
143
+ var base_x_default = base;
144
+ var Encoder = class {
145
+ constructor(name, prefix, baseEncode) {
146
+ __publicField(this, "name");
147
+ __publicField(this, "prefix");
148
+ __publicField(this, "baseEncode");
149
+ this.name = name;
150
+ this.prefix = prefix;
151
+ this.baseEncode = baseEncode;
152
+ }
153
+ encode(bytes) {
154
+ if (bytes instanceof Uint8Array) return `${this.prefix}${this.baseEncode(bytes)}`;
155
+ else throw Error("Unknown type, must be binary type");
156
+ }
157
+ };
158
+ var Decoder = class {
159
+ constructor(name, prefix, baseDecode) {
160
+ __publicField(this, "name");
161
+ __publicField(this, "prefix");
162
+ __publicField(this, "baseDecode");
163
+ __publicField(this, "prefixCodePoint");
164
+ this.name = name;
165
+ this.prefix = prefix;
166
+ if (prefix.codePointAt(0) === void 0) throw new Error("Invalid prefix character");
167
+ this.prefixCodePoint = prefix.codePointAt(0);
168
+ this.baseDecode = baseDecode;
169
+ }
170
+ decode(text) {
171
+ if (typeof text === "string") {
172
+ if (text.codePointAt(0) !== this.prefixCodePoint) throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);
173
+ return this.baseDecode(text.slice(this.prefix.length));
174
+ } else throw Error("Can only multibase decode strings");
175
+ }
176
+ or(decoder) {
177
+ return or(this, decoder);
178
+ }
179
+ };
180
+ var ComposedDecoder = class {
181
+ constructor(decoders) {
182
+ __publicField(this, "decoders");
183
+ this.decoders = decoders;
184
+ }
185
+ or(decoder) {
186
+ return or(this, decoder);
187
+ }
188
+ decode(input) {
189
+ const prefix = input[0];
190
+ const decoder = this.decoders[prefix];
191
+ if (decoder != null) return decoder.decode(input);
192
+ else throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`);
193
+ }
194
+ };
195
+ function or(left, right) {
196
+ return new ComposedDecoder({
197
+ ...left.decoders ?? { [left.prefix]: left },
198
+ ...right.decoders ?? { [right.prefix]: right }
199
+ });
200
+ }
201
+ var Codec = class {
202
+ constructor(name, prefix, baseEncode, baseDecode) {
203
+ __publicField(this, "name");
204
+ __publicField(this, "prefix");
205
+ __publicField(this, "baseEncode");
206
+ __publicField(this, "baseDecode");
207
+ __publicField(this, "encoder");
208
+ __publicField(this, "decoder");
209
+ this.name = name;
210
+ this.prefix = prefix;
211
+ this.baseEncode = baseEncode;
212
+ this.baseDecode = baseDecode;
213
+ this.encoder = new Encoder(name, prefix, baseEncode);
214
+ this.decoder = new Decoder(name, prefix, baseDecode);
215
+ }
216
+ encode(input) {
217
+ return this.encoder.encode(input);
218
+ }
219
+ decode(input) {
220
+ return this.decoder.decode(input);
221
+ }
222
+ };
223
+ function from$10({ name, prefix, encode: encode3, decode: decode5 }) {
224
+ return new Codec(name, prefix, encode3, decode5);
225
+ }
226
+ function baseX({ name, prefix, alphabet }) {
227
+ const { encode: encode3, decode: decode5 } = base_x_default(alphabet, name);
228
+ return from$10({
229
+ prefix,
230
+ name,
231
+ encode: encode3,
232
+ decode: (text) => coerce(decode5(text))
233
+ });
234
+ }
235
+ function decode(string, alphabet, bitsPerChar, name) {
236
+ const codes = {};
237
+ for (let i = 0; i < alphabet.length; ++i) codes[alphabet[i]] = i;
238
+ let end = string.length;
239
+ while (string[end - 1] === "=") --end;
240
+ const out = new Uint8Array(end * bitsPerChar / 8 | 0);
241
+ let bits = 0;
242
+ let buffer = 0;
243
+ let written = 0;
244
+ for (let i = 0; i < end; ++i) {
245
+ const value = codes[string[i]];
246
+ if (value === void 0) throw new SyntaxError(`Non-${name} character`);
247
+ buffer = buffer << bitsPerChar | value;
248
+ bits += bitsPerChar;
249
+ if (bits >= 8) {
250
+ bits -= 8;
251
+ out[written++] = 255 & buffer >> bits;
252
+ }
253
+ }
254
+ if (bits >= bitsPerChar || (255 & buffer << 8 - bits) !== 0) throw new SyntaxError("Unexpected end of data");
255
+ return out;
256
+ }
257
+ function encode(data, alphabet, bitsPerChar) {
258
+ const pad = alphabet[alphabet.length - 1] === "=";
259
+ const mask = (1 << bitsPerChar) - 1;
260
+ let out = "";
261
+ let bits = 0;
262
+ let buffer = 0;
263
+ for (let i = 0; i < data.length; ++i) {
264
+ buffer = buffer << 8 | data[i];
265
+ bits += 8;
266
+ while (bits > bitsPerChar) {
267
+ bits -= bitsPerChar;
268
+ out += alphabet[mask & buffer >> bits];
269
+ }
270
+ }
271
+ if (bits !== 0) out += alphabet[mask & buffer << bitsPerChar - bits];
272
+ if (pad) while ((out.length * bitsPerChar & 7) !== 0) out += "=";
273
+ return out;
274
+ }
275
+ function rfc4648({ name, prefix, bitsPerChar, alphabet }) {
276
+ return from$10({
277
+ prefix,
278
+ name,
279
+ encode(input) {
280
+ return encode(input, alphabet, bitsPerChar);
281
+ },
282
+ decode(input) {
283
+ return decode(input, alphabet, bitsPerChar, name);
284
+ }
285
+ });
286
+ }
287
+ var base32 = rfc4648({
288
+ prefix: "b",
289
+ name: "base32",
290
+ alphabet: "abcdefghijklmnopqrstuvwxyz234567",
291
+ bitsPerChar: 5
292
+ });
293
+ rfc4648({
294
+ prefix: "B",
295
+ name: "base32upper",
296
+ alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",
297
+ bitsPerChar: 5
298
+ });
299
+ rfc4648({
300
+ prefix: "c",
301
+ name: "base32pad",
302
+ alphabet: "abcdefghijklmnopqrstuvwxyz234567=",
303
+ bitsPerChar: 5
304
+ });
305
+ rfc4648({
306
+ prefix: "C",
307
+ name: "base32padupper",
308
+ alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",
309
+ bitsPerChar: 5
310
+ });
311
+ rfc4648({
312
+ prefix: "v",
313
+ name: "base32hex",
314
+ alphabet: "0123456789abcdefghijklmnopqrstuv",
315
+ bitsPerChar: 5
316
+ });
317
+ rfc4648({
318
+ prefix: "V",
319
+ name: "base32hexupper",
320
+ alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV",
321
+ bitsPerChar: 5
322
+ });
323
+ rfc4648({
324
+ prefix: "t",
325
+ name: "base32hexpad",
326
+ alphabet: "0123456789abcdefghijklmnopqrstuv=",
327
+ bitsPerChar: 5
328
+ });
329
+ rfc4648({
330
+ prefix: "T",
331
+ name: "base32hexpadupper",
332
+ alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV=",
333
+ bitsPerChar: 5
334
+ });
335
+ rfc4648({
336
+ prefix: "h",
337
+ name: "base32z",
338
+ alphabet: "ybndrfg8ejkmcpqxot1uwisza345h769",
339
+ bitsPerChar: 5
340
+ });
341
+ var base58btc = baseX({
342
+ name: "base58btc",
343
+ prefix: "z",
344
+ alphabet: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
345
+ });
346
+ baseX({
347
+ name: "base58flickr",
348
+ prefix: "Z",
349
+ alphabet: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
350
+ });
351
+ var encode_1 = encode2;
352
+ var MSB = 128;
353
+ var MSBALL = -128;
354
+ var INT = Math.pow(2, 31);
355
+ function encode2(num, out, offset) {
356
+ out = out || [];
357
+ offset = offset || 0;
358
+ var oldOffset = offset;
359
+ while (num >= INT) {
360
+ out[offset++] = num & 255 | MSB;
361
+ num /= 128;
362
+ }
363
+ while (num & MSBALL) {
364
+ out[offset++] = num & 255 | MSB;
365
+ num >>>= 7;
366
+ }
367
+ out[offset] = num | 0;
368
+ encode2.bytes = offset - oldOffset + 1;
369
+ return out;
370
+ }
371
+ var decode2 = read;
372
+ var MSB$1 = 128;
373
+ var REST$1 = 127;
374
+ function read(buf, offset) {
375
+ var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;
376
+ do {
377
+ if (counter >= l) {
378
+ read.bytes = 0;
379
+ throw new RangeError("Could not decode varint");
380
+ }
381
+ b = buf[counter++];
382
+ res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);
383
+ shift += 7;
384
+ } while (b >= MSB$1);
385
+ read.bytes = counter - offset;
386
+ return res;
387
+ }
388
+ var N1 = Math.pow(2, 7);
389
+ var N2 = Math.pow(2, 14);
390
+ var N3 = Math.pow(2, 21);
391
+ var N4 = Math.pow(2, 28);
392
+ var N5 = Math.pow(2, 35);
393
+ var N6 = Math.pow(2, 42);
394
+ var N7 = Math.pow(2, 49);
395
+ var N8 = Math.pow(2, 56);
396
+ var N9 = Math.pow(2, 63);
397
+ var length = function(value) {
398
+ return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;
399
+ };
400
+ var varint_default = {
401
+ encode: encode_1,
402
+ decode: decode2,
403
+ encodingLength: length
404
+ };
405
+ function decode3(data, offset = 0) {
406
+ return [varint_default.decode(data, offset), varint_default.decode.bytes];
407
+ }
408
+ function encodeTo(int, target, offset = 0) {
409
+ varint_default.encode(int, target, offset);
410
+ return target;
411
+ }
412
+ function encodingLength(int) {
413
+ return varint_default.encodingLength(int);
414
+ }
415
+ function create(code, digest) {
416
+ const size = digest.byteLength;
417
+ const sizeOffset = encodingLength(code);
418
+ const digestOffset = sizeOffset + encodingLength(size);
419
+ const bytes = new Uint8Array(digestOffset + size);
420
+ encodeTo(code, bytes, 0);
421
+ encodeTo(size, bytes, sizeOffset);
422
+ bytes.set(digest, digestOffset);
423
+ return new Digest(code, size, digest, bytes);
424
+ }
425
+ function decode4(multihash) {
426
+ const bytes = coerce(multihash);
427
+ const [code, sizeOffset] = decode3(bytes);
428
+ const [size, digestOffset] = decode3(bytes.subarray(sizeOffset));
429
+ const digest = bytes.subarray(sizeOffset + digestOffset);
430
+ if (digest.byteLength !== size) throw new Error("Incorrect length");
431
+ return new Digest(code, size, digest, bytes);
432
+ }
433
+ function equals2(a, b) {
434
+ if (a === b) return true;
435
+ else {
436
+ const data = b;
437
+ return a.code === data.code && a.size === data.size && data.bytes instanceof Uint8Array && equals(a.bytes, data.bytes);
438
+ }
439
+ }
440
+ var Digest = class {
441
+ /**
442
+ * Creates a multihash digest.
443
+ */
444
+ constructor(code, size, digest, bytes) {
445
+ __publicField(this, "code");
446
+ __publicField(this, "size");
447
+ __publicField(this, "digest");
448
+ __publicField(this, "bytes");
449
+ this.code = code;
450
+ this.size = size;
451
+ this.digest = digest;
452
+ this.bytes = bytes;
453
+ }
454
+ };
455
+ function format(link, base2) {
456
+ const { bytes, version } = link;
457
+ switch (version) {
458
+ case 0: return toStringV0(bytes, baseCache(link), base2 ?? base58btc.encoder);
459
+ default: return toStringV1(bytes, baseCache(link), base2 ?? base32.encoder);
460
+ }
461
+ }
462
+ var cache = /* @__PURE__ */ new WeakMap();
463
+ function baseCache(cid) {
464
+ const baseCache2 = cache.get(cid);
465
+ if (baseCache2 == null) {
466
+ const baseCache3 = /* @__PURE__ */ new Map();
467
+ cache.set(cid, baseCache3);
468
+ return baseCache3;
469
+ }
470
+ return baseCache2;
471
+ }
472
+ var _a;
473
+ var CID = class _CID {
474
+ /**
475
+ * @param version - Version of the CID
476
+ * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv
477
+ * @param multihash - (Multi)hash of the of the content.
478
+ */
479
+ constructor(version, code, multihash, bytes) {
480
+ __publicField(this, "code");
481
+ __publicField(this, "version");
482
+ __publicField(this, "multihash");
483
+ __publicField(this, "bytes");
484
+ __publicField(this, "/");
485
+ __publicField(this, _a, "CID");
486
+ this.code = code;
487
+ this.version = version;
488
+ this.multihash = multihash;
489
+ this.bytes = bytes;
490
+ this["/"] = bytes;
491
+ }
492
+ /**
493
+ * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`
494
+ * please either use `CID.asCID(cid)` or switch to new signalling mechanism
495
+ *
496
+ * @deprecated
497
+ */
498
+ get asCID() {
499
+ return this;
500
+ }
501
+ get byteOffset() {
502
+ return this.bytes.byteOffset;
503
+ }
504
+ get byteLength() {
505
+ return this.bytes.byteLength;
506
+ }
507
+ toV0() {
508
+ switch (this.version) {
509
+ case 0: return this;
510
+ case 1: {
511
+ const { code, multihash } = this;
512
+ if (code !== DAG_PB_CODE) throw new Error("Cannot convert a non dag-pb CID to CIDv0");
513
+ if (multihash.code !== SHA_256_CODE) throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");
514
+ return _CID.createV0(multihash);
515
+ }
516
+ default: throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`);
517
+ }
518
+ }
519
+ toV1() {
520
+ switch (this.version) {
521
+ case 0: {
522
+ const { code, digest } = this.multihash;
523
+ const multihash = create(code, digest);
524
+ return _CID.createV1(this.code, multihash);
525
+ }
526
+ case 1: return this;
527
+ default: throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`);
528
+ }
529
+ }
530
+ equals(other) {
531
+ return _CID.equals(this, other);
532
+ }
533
+ static equals(self, other) {
534
+ const unknown = other;
535
+ return unknown != null && self.code === unknown.code && self.version === unknown.version && equals2(self.multihash, unknown.multihash);
536
+ }
537
+ toString(base2) {
538
+ return format(this, base2);
539
+ }
540
+ toJSON() {
541
+ return { "/": format(this) };
542
+ }
543
+ link() {
544
+ return this;
545
+ }
546
+ [(_a = Symbol.toStringTag, Symbol.for("nodejs.util.inspect.custom"))]() {
547
+ return `CID(${this.toString()})`;
548
+ }
549
+ /**
550
+ * Takes any input `value` and returns a `CID` instance if it was
551
+ * a `CID` otherwise returns `null`. If `value` is instanceof `CID`
552
+ * it will return value back. If `value` is not instance of this CID
553
+ * class, but is compatible CID it will return new instance of this
554
+ * `CID` class. Otherwise returns null.
555
+ *
556
+ * This allows two different incompatible versions of CID library to
557
+ * co-exist and interop as long as binary interface is compatible.
558
+ */
559
+ static asCID(input) {
560
+ if (input == null) return null;
561
+ const value = input;
562
+ if (value instanceof _CID) return value;
563
+ else if (value["/"] != null && value["/"] === value.bytes || value.asCID === value) {
564
+ const { version, code, multihash, bytes } = value;
565
+ return new _CID(version, code, multihash, bytes ?? encodeCID(version, code, multihash.bytes));
566
+ } else if (value[cidSymbol] === true) {
567
+ const { version, multihash, code } = value;
568
+ const digest = decode4(multihash);
569
+ return _CID.create(version, code, digest);
570
+ } else return null;
571
+ }
572
+ /**
573
+ * @param version - Version of the CID
574
+ * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv
575
+ * @param digest - (Multi)hash of the of the content.
576
+ */
577
+ static create(version, code, digest) {
578
+ if (typeof code !== "number") throw new Error("String codecs are no longer supported");
579
+ if (!(digest.bytes instanceof Uint8Array)) throw new Error("Invalid digest");
580
+ switch (version) {
581
+ case 0: if (code !== DAG_PB_CODE) throw new Error(`Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`);
582
+ else return new _CID(version, code, digest, digest.bytes);
583
+ case 1: return new _CID(version, code, digest, encodeCID(version, code, digest.bytes));
584
+ default: throw new Error("Invalid version");
585
+ }
586
+ }
587
+ /**
588
+ * Simplified version of `create` for CIDv0.
589
+ */
590
+ static createV0(digest) {
591
+ return _CID.create(0, DAG_PB_CODE, digest);
592
+ }
593
+ /**
594
+ * Simplified version of `create` for CIDv1.
595
+ *
596
+ * @param code - Content encoding format code.
597
+ * @param digest - Multihash of the content.
598
+ */
599
+ static createV1(code, digest) {
600
+ return _CID.create(1, code, digest);
601
+ }
602
+ /**
603
+ * Decoded a CID from its binary representation. The byte array must contain
604
+ * only the CID with no additional bytes.
605
+ *
606
+ * An error will be thrown if the bytes provided do not contain a valid
607
+ * binary representation of a CID.
608
+ */
609
+ static decode(bytes) {
610
+ const [cid, remainder] = _CID.decodeFirst(bytes);
611
+ if (remainder.length !== 0) throw new Error("Incorrect length");
612
+ return cid;
613
+ }
614
+ /**
615
+ * Decoded a CID from its binary representation at the beginning of a byte
616
+ * array.
617
+ *
618
+ * Returns an array with the first element containing the CID and the second
619
+ * element containing the remainder of the original byte array. The remainder
620
+ * will be a zero-length byte array if the provided bytes only contained a
621
+ * binary CID representation.
622
+ */
623
+ static decodeFirst(bytes) {
624
+ const specs = _CID.inspectBytes(bytes);
625
+ const prefixSize = specs.size - specs.multihashSize;
626
+ const multihashBytes = coerce(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));
627
+ if (multihashBytes.byteLength !== specs.multihashSize) throw new Error("Incorrect length");
628
+ const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);
629
+ const digest = new Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);
630
+ return [specs.version === 0 ? _CID.createV0(digest) : _CID.createV1(specs.codec, digest), bytes.subarray(specs.size)];
631
+ }
632
+ /**
633
+ * Inspect the initial bytes of a CID to determine its properties.
634
+ *
635
+ * Involves decoding up to 4 varints. Typically this will require only 4 to 6
636
+ * bytes but for larger multicodec code values and larger multihash digest
637
+ * lengths these varints can be quite large. It is recommended that at least
638
+ * 10 bytes be made available in the `initialBytes` argument for a complete
639
+ * inspection.
640
+ */
641
+ static inspectBytes(initialBytes) {
642
+ let offset = 0;
643
+ const next = () => {
644
+ const [i, length2] = decode3(initialBytes.subarray(offset));
645
+ offset += length2;
646
+ return i;
647
+ };
648
+ let version = next();
649
+ let codec = DAG_PB_CODE;
650
+ if (version === 18) {
651
+ version = 0;
652
+ offset = 0;
653
+ } else codec = next();
654
+ if (version !== 0 && version !== 1) throw new RangeError(`Invalid CID version ${version}`);
655
+ const prefixSize = offset;
656
+ const multihashCode = next();
657
+ const digestSize = next();
658
+ const size = offset + digestSize;
659
+ const multihashSize = size - prefixSize;
660
+ return {
661
+ version,
662
+ codec,
663
+ multihashCode,
664
+ digestSize,
665
+ multihashSize,
666
+ size
667
+ };
668
+ }
669
+ /**
670
+ * Takes cid in a string representation and creates an instance. If `base`
671
+ * decoder is not provided will use a default from the configuration. It will
672
+ * throw an error if encoding of the CID is not compatible with supplied (or
673
+ * a default decoder).
674
+ */
675
+ static parse(source, base2) {
676
+ const [prefix, bytes] = parseCIDtoBytes(source, base2);
677
+ const cid = _CID.decode(bytes);
678
+ if (cid.version === 0 && source[0] !== "Q") throw Error("Version 0 CID string must not include multibase prefix");
679
+ baseCache(cid).set(prefix, source);
680
+ return cid;
681
+ }
682
+ };
683
+ function parseCIDtoBytes(source, base2) {
684
+ switch (source[0]) {
685
+ case "Q": {
686
+ const decoder = base2 ?? base58btc;
687
+ return [base58btc.prefix, decoder.decode(`${base58btc.prefix}${source}`)];
688
+ }
689
+ case base58btc.prefix: {
690
+ const decoder = base2 ?? base58btc;
691
+ return [base58btc.prefix, decoder.decode(source)];
692
+ }
693
+ case base32.prefix: {
694
+ const decoder = base2 ?? base32;
695
+ return [base32.prefix, decoder.decode(source)];
696
+ }
697
+ default:
698
+ if (base2 == null) throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");
699
+ return [source[0], base2.decode(source)];
700
+ }
701
+ }
702
+ function toStringV0(bytes, cache2, base2) {
703
+ const { prefix } = base2;
704
+ if (prefix !== base58btc.prefix) throw Error(`Cannot string encode V0 in ${base2.name} encoding`);
705
+ const cid = cache2.get(prefix);
706
+ if (cid == null) {
707
+ const cid2 = base2.encode(bytes).slice(1);
708
+ cache2.set(prefix, cid2);
709
+ return cid2;
710
+ } else return cid;
711
+ }
712
+ function toStringV1(bytes, cache2, base2) {
713
+ const { prefix } = base2;
714
+ const cid = cache2.get(prefix);
715
+ if (cid == null) {
716
+ const cid2 = base2.encode(bytes);
717
+ cache2.set(prefix, cid2);
718
+ return cid2;
719
+ } else return cid;
720
+ }
721
+ var DAG_PB_CODE = 112;
722
+ var SHA_256_CODE = 18;
723
+ function encodeCID(version, code, multihash) {
724
+ const codeOffset = encodingLength(version);
725
+ const hashOffset = codeOffset + encodingLength(code);
726
+ const bytes = new Uint8Array(hashOffset + multihash.byteLength);
727
+ encodeTo(version, bytes, 0);
728
+ encodeTo(code, bytes, codeOffset);
729
+ bytes.set(multihash, hashOffset);
730
+ return bytes;
731
+ }
732
+ var cidSymbol = Symbol.for("@ipld/js-cid/CID");
733
+ var isString = (input) => typeof input === "string";
734
+ var isValid = (hash) => {
735
+ try {
736
+ if (isString(hash)) return Boolean(CID.parse(hash));
737
+ return Boolean(CID.asCID(hash));
738
+ } catch {
739
+ return false;
740
+ }
741
+ };
742
+ //#endregion
743
+ //#region ../../node_modules/@cardano-sdk/core/dist/esm/Asset/NftMetadata/types.js
744
+ const looksLikeIpfsUrlWithoutProtocol = (uri) => {
745
+ const [cid] = uri.split("/");
746
+ if (!cid) return false;
747
+ return isValid(cid);
748
+ };
749
+ const Uri = (uri) => {
750
+ if (/^[a-z]+:\/\/.+/.test(uri)) return uri;
751
+ if (uri.startsWith("data:")) return uri;
752
+ if (looksLikeIpfsUrlWithoutProtocol(uri)) return `ipfs://${uri}`;
753
+ throw new require_errors.InvalidStringError("Expected Uri to start with \"[protocol]:\", where protocol is usually \"https\", \"ipfs\" or \"data\"");
754
+ };
755
+ const ImageMediaType = (mediaType) => {
756
+ if (/^image\/.+$/.test(mediaType)) return mediaType;
757
+ throw new require_errors.InvalidStringError("Expected media type to be \"image/*\"");
758
+ };
759
+ const MediaType = (mediaType) => {
760
+ if (/^[a-z]+\/.+$/.test(mediaType)) return mediaType;
761
+ throw new require_errors.InvalidStringError("Expected media type to be \"*/*\"");
762
+ };
763
+ //#endregion
764
+ //#region ../../packages/lib/vendor/node_modules/@cardano-sdk/key-management/dist/esm/types.js
765
+ var CardanoKeyConst;
766
+ (function(CardanoKeyConst) {
767
+ CardanoKeyConst[CardanoKeyConst["PURPOSE"] = 1852] = "PURPOSE";
768
+ CardanoKeyConst[CardanoKeyConst["COIN_TYPE"] = 1815] = "COIN_TYPE";
769
+ })(CardanoKeyConst || (CardanoKeyConst = {}));
770
+ var Cip1852PathLevelIndexes;
771
+ (function(Cip1852PathLevelIndexes) {
772
+ Cip1852PathLevelIndexes[Cip1852PathLevelIndexes["PURPOSE"] = 0] = "PURPOSE";
773
+ Cip1852PathLevelIndexes[Cip1852PathLevelIndexes["COIN_TYPE"] = 1] = "COIN_TYPE";
774
+ Cip1852PathLevelIndexes[Cip1852PathLevelIndexes["ACCOUNT"] = 2] = "ACCOUNT";
775
+ Cip1852PathLevelIndexes[Cip1852PathLevelIndexes["ROLE"] = 3] = "ROLE";
776
+ Cip1852PathLevelIndexes[Cip1852PathLevelIndexes["INDEX"] = 4] = "INDEX";
777
+ })(Cip1852PathLevelIndexes || (Cip1852PathLevelIndexes = {}));
778
+ var KeyAgentType;
779
+ (function(KeyAgentType) {
780
+ KeyAgentType["InMemory"] = "InMemory";
781
+ KeyAgentType["Ledger"] = "Ledger";
782
+ KeyAgentType["Trezor"] = "Trezor";
783
+ })(KeyAgentType || (KeyAgentType = {}));
784
+ var KeyRole;
785
+ (function(KeyRole) {
786
+ KeyRole[KeyRole["External"] = 0] = "External";
787
+ KeyRole[KeyRole["Internal"] = 1] = "Internal";
788
+ KeyRole[KeyRole["Stake"] = 2] = "Stake";
789
+ KeyRole[KeyRole["DRep"] = 3] = "DRep";
790
+ })(KeyRole || (KeyRole = {}));
791
+ var KeyPurpose;
792
+ (function(KeyPurpose) {
793
+ KeyPurpose[KeyPurpose["STANDARD"] = require_types.HD_WALLET_CIP_ID] = "STANDARD";
794
+ KeyPurpose[KeyPurpose["MULTI_SIG"] = require_types.MULTISIG_CIP_ID] = "MULTI_SIG";
795
+ })(KeyPurpose || (KeyPurpose = {}));
796
+ var AddressType;
797
+ (function(AddressType) {
798
+ AddressType[AddressType["Internal"] = 1] = "Internal";
799
+ AddressType[AddressType["External"] = 0] = "External";
800
+ })(AddressType || (AddressType = {}));
801
+ var DeviceType;
802
+ (function(DeviceType) {
803
+ DeviceType["Ledger"] = "Ledger";
804
+ })(DeviceType || (DeviceType = {}));
805
+ var CommunicationType;
806
+ (function(CommunicationType) {
807
+ CommunicationType["Web"] = "web";
808
+ CommunicationType["Node"] = "node";
809
+ })(CommunicationType || (CommunicationType = {}));
810
+ //#endregion
811
+ //#region ../../packages/lib/vendor/node_modules/@cardano-sdk/key-management/dist/esm/Bip32Account.js
812
+ var __classPrivateFieldSet = function(receiver, state, value, kind, f) {
813
+ if (kind === "m") throw new TypeError("Private method is not writable");
814
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
815
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
816
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
817
+ };
818
+ var __classPrivateFieldGet = function(receiver, state, kind, f) {
819
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
820
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
821
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
822
+ };
823
+ var _Bip32Account_bip32Ed25519, _Bip32Account_blake2b;
824
+ var Bip32Account = class Bip32Account {
825
+ constructor({ extendedAccountPublicKey, chainId, accountIndex }, dependencies) {
826
+ _Bip32Account_bip32Ed25519.set(this, void 0);
827
+ _Bip32Account_blake2b.set(this, void 0);
828
+ this.extendedAccountPublicKeyHex = extendedAccountPublicKey;
829
+ __classPrivateFieldSet(this, _Bip32Account_bip32Ed25519, dependencies.bip32Ed25519, "f");
830
+ __classPrivateFieldSet(this, _Bip32Account_blake2b, dependencies.blake2b, "f");
831
+ this.chainId = chainId;
832
+ this.accountIndex = accountIndex;
833
+ }
834
+ async derivePublicKey(derivationPath) {
835
+ const extendedKey = await __classPrivateFieldGet(this, _Bip32Account_bip32Ed25519, "f").derivePublicKeyAsync(this.extendedAccountPublicKeyHex, [derivationPath.role, derivationPath.index]);
836
+ return require_Address.Ed25519PublicKeyHex.fromBip32PublicKey(extendedKey);
837
+ }
838
+ async deriveAddress(paymentKeyDerivationPath, stakeKeyDerivationIndex) {
839
+ const stakeKeyDerivationPath = {
840
+ index: stakeKeyDerivationIndex,
841
+ role: KeyRole.Stake
842
+ };
843
+ const derivedPublicPaymentKey = await this.derivePublicKey({
844
+ index: paymentKeyDerivationPath.index,
845
+ role: Number(paymentKeyDerivationPath.type)
846
+ });
847
+ const derivedPublicPaymentKeyHash = await __classPrivateFieldGet(this, _Bip32Account_blake2b, "f").hashAsync(derivedPublicPaymentKey, 28);
848
+ const publicStakeKey = await this.derivePublicKey(stakeKeyDerivationPath);
849
+ const stakeCredential = {
850
+ hash: await __classPrivateFieldGet(this, _Bip32Account_blake2b, "f").hashAsync(publicStakeKey, 28),
851
+ type: require_Address.CredentialType.KeyHash
852
+ };
853
+ const address = require_Address.BaseAddress.fromCredentials(this.chainId.networkId, {
854
+ hash: derivedPublicPaymentKeyHash,
855
+ type: require_Address.CredentialType.KeyHash
856
+ }, stakeCredential).toAddress();
857
+ const rewardAccount = require_Address.RewardAddress.fromCredentials(this.chainId.networkId, stakeCredential).toAddress();
858
+ return {
859
+ accountIndex: this.accountIndex,
860
+ address: require_PaymentAddress.PaymentAddress(address.toBech32()),
861
+ networkId: this.chainId.networkId,
862
+ rewardAccount: require_Address.RewardAccount(rewardAccount.toBech32()),
863
+ stakeKeyDerivationPath,
864
+ ...paymentKeyDerivationPath
865
+ };
866
+ }
867
+ static async createDefaultDependencies() {
868
+ return {
869
+ bip32Ed25519: await require_SodiumBip32Ed25519.SodiumBip32Ed25519.create(),
870
+ blake2b: require_Address.blake2b
871
+ };
872
+ }
873
+ static async fromAsyncKeyAgent(keyAgent, dependencies) {
874
+ dependencies ||= await Bip32Account.createDefaultDependencies();
875
+ return new Bip32Account({
876
+ accountIndex: await keyAgent.getAccountIndex(),
877
+ chainId: await keyAgent.getChainId(),
878
+ extendedAccountPublicKey: await keyAgent.getExtendedAccountPublicKey()
879
+ }, dependencies);
880
+ }
881
+ };
882
+ _Bip32Account_bip32Ed25519 = /* @__PURE__ */ new WeakMap(), _Bip32Account_blake2b = /* @__PURE__ */ new WeakMap();
883
+ //#endregion
884
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-asset-provider.ts
885
+ var BlockfrostAssetProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
886
+ constructor(client, logger) {
887
+ super(client, logger);
888
+ }
889
+ async getAsset({ assetId, extraData }) {
890
+ try {
891
+ const response = await this.request(`assets/${assetId.toString()}`);
892
+ const name = require_Address.AssetId.getAssetName(assetId);
893
+ const policyId = require_Address.PolicyId(response.policy_id);
894
+ const quantity = BigInt(response.quantity);
895
+ return {
896
+ assetId,
897
+ fingerprint: require_Address.AssetFingerprint(response.fingerprint),
898
+ name,
899
+ nftMetadata: extraData?.nftMetadata ? this.mapNftMetadata(response) : null,
900
+ policyId,
901
+ quantity,
902
+ supply: quantity,
903
+ tokenMetadata: extraData?.tokenMetadata ? this.mapTokenMetadata(assetId, response) : null
904
+ };
905
+ } catch (error) {
906
+ this.logger.error("getAsset failed", assetId, extraData);
907
+ throw require_error.toProviderError(error);
908
+ }
909
+ }
910
+ mapNftMetadata(asset) {
911
+ const image = this.metadatumToString(asset.onchain_metadata?.image || asset.metadata?.logo);
912
+ const name = asset.onchain_metadata?.name || asset.metadata?.name;
913
+ if (!image || !name) return null;
914
+ try {
915
+ return {
916
+ description: this.metadatumToString(asset.onchain_metadata?.description || asset.metadata?.description),
917
+ files: Array.isArray(asset.onchain_metadata?.files) ? asset.onchain_metadata.files.map((file) => {
918
+ const mediaType = file.mediaType;
919
+ const fileName = file.name;
920
+ const source = this.metadatumToString(file.src);
921
+ if (!source || !mediaType) return null;
922
+ try {
923
+ return {
924
+ mediaType: MediaType(mediaType),
925
+ name: fileName,
926
+ otherProperties: this.mapFileMetadataOtherProperties(file),
927
+ src: Uri(source)
928
+ };
929
+ } catch (error) {
930
+ this.logger.warn("Failed to parse onchain_metadata file", file, error);
931
+ return null;
932
+ }
933
+ }).filter(require_isNotNil.isNotNil) : void 0,
934
+ image: Uri(image),
935
+ mediaType: asset.onchain_metadata?.mediaType ? ImageMediaType(asset.onchain_metadata.mediaType) : void 0,
936
+ name,
937
+ otherProperties: this.mapNftMetadataOtherProperties(asset.onchain_metadata),
938
+ version: this.mapNftMetadataVersion(asset.onchain_metadata)
939
+ };
940
+ } catch (error) {
941
+ this.logger.warn("Failed to parse nft metadata", asset, error);
942
+ return null;
943
+ }
944
+ }
945
+ asString = (metadatum) => typeof metadatum === "string" ? metadatum : void 0;
946
+ metadatumToString(metadatum) {
947
+ let stringMetadatum;
948
+ if (Array.isArray(metadatum)) stringMetadatum = metadatum.map((metadata) => this.asString(metadata)).filter(require_isNotNil.isNotNil).join("");
949
+ else stringMetadatum = this.asString(metadatum);
950
+ return stringMetadatum;
951
+ }
952
+ objToMetadatum(object) {
953
+ if (typeof object === "string") return object;
954
+ if (typeof object === "number") return BigInt(object);
955
+ if (typeof object === "object") {
956
+ if (object === null) return "";
957
+ if (Array.isArray(object)) return object.map((item) => this.objToMetadatum(item));
958
+ return new Map(Object.entries(object).map(([key, value]) => [key, this.objToMetadatum(value)]));
959
+ }
960
+ return "";
961
+ }
962
+ mapNftMetadataVersion(metadata) {
963
+ return typeof metadata?.version === "string" ? metadata.version : "1.0";
964
+ }
965
+ mapFileMetadataOtherProperties(metadata) {
966
+ return this.mapOtherProperties(metadata, [
967
+ "name",
968
+ "mediaType",
969
+ "src"
970
+ ]);
971
+ }
972
+ mapNftMetadataOtherProperties(metadata) {
973
+ return this.mapOtherProperties(metadata, [
974
+ "name",
975
+ "image",
976
+ "description",
977
+ "mediaType",
978
+ "files",
979
+ "version"
980
+ ]);
981
+ }
982
+ mapOtherProperties(metadata, mainProperties) {
983
+ if (!metadata) return;
984
+ const otherProperties = Object.entries((0, lodash_omit_js.default)(metadata, mainProperties));
985
+ if (otherProperties.length === 0) return;
986
+ return new Map(otherProperties.map(([key, value]) => [key, this.objToMetadatum(value)]));
987
+ }
988
+ mapTokenMetadata(assetId, asset) {
989
+ return {
990
+ assetId,
991
+ decimals: asset.metadata?.decimals || void 0,
992
+ desc: this.metadatumToString(asset.metadata?.description || asset.onchain_metadata?.description),
993
+ icon: this.metadatumToString(asset.metadata?.logo || asset.onchain_metadata?.image),
994
+ name: asset.metadata?.name || asset.onchain_metadata?.name,
995
+ ticker: asset.metadata?.ticker || void 0,
996
+ url: asset.metadata?.url || void 0,
997
+ version: "1.0"
998
+ };
999
+ }
1000
+ };
1001
+ //#endregion
1002
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-address-discovery.ts
1003
+ /**
1004
+ * How far we search for stake keys before concluding there are no more stake credentials.
1005
+ */
1006
+ const STAKE_KEY_GAP = 5;
1007
+ /**
1008
+ * How far we search for payment addresses under a single stake key
1009
+ * before concluding that no more addresses exist (or that they are “franken”).
1010
+ */
1011
+ const PAYMENT_CREDENTIAL_GAP = 100;
1012
+ /**
1013
+ * Safety cap for thorough discovery. The thorough predicate continues past
1014
+ * the gap when the Blockfrost-returned address set still has unmatched
1015
+ * entries; this bound ensures the loop cannot run forever when an unmatched
1016
+ * entry is structurally undiscoverable (true "franken" cases).
1017
+ */
1018
+ const HARD_UPPER_BOUND = 1e4;
1019
+ /**
1020
+ * Fetch size for Blockfrost addresses per page.
1021
+ */
1022
+ const BLOCKFROST_PAGE_SIZE = 100;
1023
+ /**
1024
+ * Derive the reward account (stake address) at a given stakeIndex.
1025
+ */
1026
+ const deriveRewardAccount = async (account, stakeIndex) => {
1027
+ return require_util.CardanoRewardAccount((await account.deriveAddress({
1028
+ type: require_types.AddressType.External,
1029
+ index: 0
1030
+ }, stakeIndex)).rewardAccount);
1031
+ };
1032
+ /**
1033
+ * Derive a payment address at a given (payment) index + address type (internal/external).
1034
+ */
1035
+ const derivePaymentAddress = async (account, paymentIndex, stakeIndex, isInternal) => {
1036
+ const type = isInternal ? require_types.AddressType.Internal : require_types.AddressType.External;
1037
+ return account.deriveAddress({
1038
+ type,
1039
+ index: paymentIndex
1040
+ }, stakeIndex);
1041
+ };
1042
+ const compareAddresses = (a, b) => {
1043
+ const indexDiff = a.index - b.index;
1044
+ if (indexDiff !== 0) return indexDiff;
1045
+ if (a.stakeKeyDerivationPath && b.stakeKeyDerivationPath) return a.stakeKeyDerivationPath.index - b.stakeKeyDerivationPath.index;
1046
+ return 0;
1047
+ };
1048
+ /**
1049
+ * Example BlockfrostAddressDiscovery class that:
1050
+ * - Paginates all addresses from each reward account
1051
+ * - Derives addresses sequentially and checks if they match
1052
+ * - Uses a gap-based approach for both stake keys AND payment addresses
1053
+ * - Logs leftover addresses as unknown
1054
+ */
1055
+ var BlockfrostAddressDiscovery = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1056
+ constructor(client, logger) {
1057
+ super(client, logger);
1058
+ }
1059
+ /**
1060
+ * @returns Observable that emits all discovered addresses one by one. Completes on first error.
1061
+ */
1062
+ discover(manager, options = {}) {
1063
+ const isThorough = options.thorough ?? false;
1064
+ this.logger.debug(`Discovering addresses using Blockfrost (thorough=${isThorough})...`);
1065
+ return (0, rxjs.forkJoin)({
1066
+ firstAddress: (0, rxjs.from)(manager.deriveAddress({
1067
+ index: 0,
1068
+ type: require_types.AddressType.External
1069
+ }, 0)),
1070
+ discovered: this.#discoverAddresses(manager, isThorough).pipe((0, rxjs.toArray)())
1071
+ }).pipe((0, rxjs.mergeMap)(({ firstAddress, discovered }) => (0, rxjs.from)([firstAddress, ...discovered])), (0, rxjs.distinct)(({ address }) => address), (0, rxjs.map)(require_asyncoption.Ok), (0, rxjs.catchError)((error) => (0, rxjs.of)(require_asyncoption.Err(error instanceof require_errors.ProviderError ? error : new require_errors.ProviderError(require_errors.ProviderFailure.Unknown, error)))));
1072
+ }
1073
+ /**
1074
+ * Main discovery logic:
1075
+ * 1. Stake key gap: we keep deriving stake keys until we have
1076
+ * STAKE_KEY_GAP consecutive stake keys that yield zero discovered addresses.
1077
+ * 2. Payment credential gap: for each stake key, we stop deriving
1078
+ * payment addresses once we have PAYMENT_CREDENTIAL_GAP consecutive misses.
1079
+ * In thorough mode, termination additionally requires the Blockfrost
1080
+ * address set to be drained (bounded by HARD_UPPER_BOUND).
1081
+ */
1082
+ #discoverAddresses(account, thorough) {
1083
+ return new rxjs.Observable((subscriber) => {
1084
+ let isUnsubscribed = false;
1085
+ (async () => {
1086
+ let stakeIndex = 0;
1087
+ let stakeGapCount = 0;
1088
+ try {
1089
+ while (stakeGapCount < STAKE_KEY_GAP) {
1090
+ if (isUnsubscribed) break;
1091
+ this.logger.debug(`Deriving reward account for stake index ${stakeIndex}...`);
1092
+ const rewardAccount = await deriveRewardAccount(account, stakeIndex);
1093
+ this.logger.debug(`Fetching addresses for stake credential ${rewardAccount}...`);
1094
+ const allAddressesForStake = await this.#fetchAllAddressesForAccount(rewardAccount);
1095
+ if (allAddressesForStake.length === 0) {
1096
+ stakeGapCount++;
1097
+ stakeIndex++;
1098
+ continue;
1099
+ }
1100
+ stakeGapCount = 0;
1101
+ const { discovered, unknown } = await this.#discoverAddressesForStakeKey(account, stakeIndex, allAddressesForStake, thorough);
1102
+ for (const address of discovered.sort(compareAddresses)) subscriber.next(address);
1103
+ if (unknown.length > 0) this.logger.warn(`The following addresses under stakeIndex ${stakeIndex} were not matched:`, unknown);
1104
+ ++stakeIndex;
1105
+ }
1106
+ subscriber.complete();
1107
+ } catch (error) {
1108
+ subscriber.error(error);
1109
+ }
1110
+ })();
1111
+ return () => {
1112
+ isUnsubscribed = true;
1113
+ };
1114
+ });
1115
+ }
1116
+ /**
1117
+ * Discover addresses under a single stake key.
1118
+ *
1119
+ * Standard mode (thorough=false): stop once we hit PAYMENT_CREDENTIAL_GAP
1120
+ * consecutive misses. Matches the BIP-44 gap-limit convention.
1121
+ *
1122
+ * Thorough mode (thorough=true): also require the Blockfrost address set to
1123
+ * be drained before stopping, so high-index entries past the gap can still
1124
+ * be discovered. Bounded by HARD_UPPER_BOUND to guarantee termination when
1125
+ * an entry is structurally undiscoverable.
1126
+ *
1127
+ * @returns Array of discovered (matched) addresses + leftover “unknown/franken” addresses
1128
+ */
1129
+ async #discoverAddressesForStakeKey(account, stakeIndex, allAddressesForStake, thorough) {
1130
+ const discovered = [];
1131
+ const uniqueAddressesForStake = new Set(allAddressesForStake);
1132
+ let gapCount = 0;
1133
+ let paymentIndex = 0;
1134
+ while (true) {
1135
+ const hasHitGap = gapCount >= PAYMENT_CREDENTIAL_GAP;
1136
+ if (thorough ? hasHitGap && uniqueAddressesForStake.size === 0 || paymentIndex >= HARD_UPPER_BOUND : hasHitGap) {
1137
+ this.logger.debug(`Stopping payment discovery for stakeIndex ${stakeIndex} at paymentIndex ${paymentIndex} (gap=${gapCount}, remaining=${uniqueAddressesForStake.size}, thorough=${thorough}).`);
1138
+ break;
1139
+ }
1140
+ const externalAddr = await derivePaymentAddress(account, paymentIndex, stakeIndex, false);
1141
+ const hasExternalInSet = uniqueAddressesForStake.has(externalAddr.address);
1142
+ const internalAddr = await derivePaymentAddress(account, paymentIndex, stakeIndex, true);
1143
+ const hasInternalInSet = uniqueAddressesForStake.has(internalAddr.address);
1144
+ if (hasExternalInSet) {
1145
+ discovered.push({
1146
+ ...externalAddr,
1147
+ stakeKeyDerivationPath: {
1148
+ index: stakeIndex,
1149
+ role: require_types.KeyRole.Stake
1150
+ }
1151
+ });
1152
+ uniqueAddressesForStake.delete(externalAddr.address);
1153
+ }
1154
+ if (hasInternalInSet) {
1155
+ discovered.push({
1156
+ ...internalAddr,
1157
+ stakeKeyDerivationPath: {
1158
+ index: stakeIndex,
1159
+ role: require_types.KeyRole.Stake
1160
+ }
1161
+ });
1162
+ uniqueAddressesForStake.delete(internalAddr.address);
1163
+ }
1164
+ if (!hasExternalInSet && !hasInternalInSet) gapCount++;
1165
+ else gapCount = 0;
1166
+ ++paymentIndex;
1167
+ }
1168
+ return {
1169
+ discovered,
1170
+ unknown: [...uniqueAddressesForStake]
1171
+ };
1172
+ }
1173
+ /**
1174
+ * Fetch all addresses associated with a reward account from Blockfrost,
1175
+ * handling pagination until the response has fewer than BLOCKFROST_PAGE_SIZE items.
1176
+ */
1177
+ async #fetchAllAddressesForAccount(rewardAccount) {
1178
+ const allAddresses = [];
1179
+ let page = 1;
1180
+ this.logger.debug(`Fetching addresses for stake ${rewardAccount} (paginated)...`);
1181
+ while (true) try {
1182
+ const response = await this.request(`accounts/${rewardAccount}/addresses?count=${BLOCKFROST_PAGE_SIZE}&page=${page}`);
1183
+ if (!response || response.length === 0) break;
1184
+ for (const entry of response) allAddresses.push(entry.address);
1185
+ if (response.length < BLOCKFROST_PAGE_SIZE) break;
1186
+ ++page;
1187
+ } catch (error) {
1188
+ if (require_error.isNotFoundError(error)) {
1189
+ this.logger.debug(`No addresses found for stake ${rewardAccount}. 404 from Blockfrost.`);
1190
+ break;
1191
+ }
1192
+ this.logger.error(`Error fetching addresses for stake ${rewardAccount}:`, error);
1193
+ throw error;
1194
+ }
1195
+ this.logger.debug(`Fetched ${allAddresses.length} addresses for stake ${rewardAccount}`);
1196
+ return allAddresses;
1197
+ }
1198
+ };
1199
+ //#endregion
1200
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-tokens-provider.ts
1201
+ const amountToRawToken = (amount) => ({
1202
+ available: require_bignum_vo.BigNumber(BigInt(amount.quantity)),
1203
+ pending: require_bignum_vo.BigNumber(0n),
1204
+ tokenId: require_token_id_vo.TokenId(amount.unit)
1205
+ });
1206
+ var BlockfrostTokensProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1207
+ getTokens(props) {
1208
+ return (0, rxjs.from)(this.request(`addresses/${props.address}`).then(({ amount }) => require_asyncoption.Ok(amount.map(amountToRawToken))).catch((error) => {
1209
+ if (require_error.isNotFoundError(error)) return require_asyncoption.Ok([]);
1210
+ return require_asyncoption.Err(error);
1211
+ }));
1212
+ }
1213
+ };
1214
+ //#endregion
1215
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-activity-provider.ts
1216
+ /**
1217
+ * Provider responsible for fetching transaction history and details.
1218
+ */
1219
+ var BlockfrostActivityProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1220
+ #txProvider;
1221
+ constructor(client, logger, txProvider = new require_blockfrost_tx_submit_provider.BlockfrostTxProvider(client, logger)) {
1222
+ super(client, logger);
1223
+ this.#txProvider = txProvider;
1224
+ }
1225
+ /**
1226
+ * Fetches the transaction history for a Cardano address.
1227
+ *
1228
+ * @param address - Cardano payment address to fetch transaction history for
1229
+ * @param numberOfItems - How many history items should be fetched (order: newer → older)
1230
+ * @param startAtBlock - At which block (inclusive) should it start
1231
+ * @param startAtIndex - At which index (inclusive) should it start
1232
+ * @returns Observable with Result containing the history items or an error
1233
+ */
1234
+ getAddressTransactionHistory({ address, numberOfItems, startAtBlock, startAtIndex, endAtBlock, endAtIndex, order = "desc" }) {
1235
+ const fromIndexParameter = startAtIndex !== void 0 ? `:${startAtIndex}` : "";
1236
+ const toIndexParameter = endAtIndex !== void 0 ? `:${endAtIndex}` : "";
1237
+ const optionalFromParameter = startAtBlock !== void 0 ? `&to=${startAtBlock}${fromIndexParameter}` : "";
1238
+ const optionalToParameter = endAtBlock !== void 0 ? `&from=${endAtBlock}${toIndexParameter}` : "";
1239
+ return (0, rxjs.from)(this.request(`addresses/${address}/transactions?count=${numberOfItems}&order=${order}${optionalFromParameter}${optionalToParameter}`)).pipe((0, rxjs.map)((addressTxHistory) => require_asyncoption.Ok(addressTxHistory.map((item) => ({
1240
+ txId: require_Address.TransactionId(item.tx_hash),
1241
+ txIndex: require_Address.TxIndex(item.tx_index),
1242
+ blockNumber: require_Address.BlockNo(item.block_height),
1243
+ blockTime: require_time_vo.Timestamp(item.block_time * 1e3)
1244
+ })))), (0, rxjs.catchError)((error) => {
1245
+ if (require_error.isNotFoundError(error)) return (0, rxjs.of)(require_asyncoption.Ok([]));
1246
+ return (0, rxjs.of)(require_asyncoption.Err(error));
1247
+ }));
1248
+ }
1249
+ /**
1250
+ * Fetches transaction details, cbor and utxos to build a Cardano.HydratedTx
1251
+ * which is returned inside a tuple together with the tx details which holds
1252
+ * additional info not stored in the HydratedTx.
1253
+ *
1254
+ * @param txId - Cardano.TransactionId
1255
+ */
1256
+ getTransactionDetails(txId) {
1257
+ return (0, rxjs.forkJoin)([
1258
+ (0, rxjs.from)(this.#txProvider.getTransaction(txId)),
1259
+ this.#fetchTxFromCbor(txId),
1260
+ this.#fetchUtxos(txId)
1261
+ ]).pipe((0, rxjs.map)(([txDetails, blockfrostTxCBOR, blockFrostUtxos]) => {
1262
+ const { inputs, outputs, collaterals } = require_blockfrost_tx_submit_provider.BlockfrostToCardanoSDK.transactionUtxos(blockFrostUtxos, blockfrostTxCBOR);
1263
+ const inputSource = txDetails.valid_contract ? require_Address.InputSource.inputs : require_Address.InputSource.collaterals;
1264
+ const body = {
1265
+ ...inputSource === require_Address.InputSource.collaterals ? {
1266
+ collateralReturn: outputs.length > 0 ? outputs[0] : void 0,
1267
+ collaterals: inputs,
1268
+ fee: BigInt(0),
1269
+ inputs: [],
1270
+ outputs: [],
1271
+ totalCollateral: blockfrostTxCBOR.body.fee
1272
+ } : {
1273
+ collateralReturn: blockfrostTxCBOR.body.collateralReturn ?? void 0,
1274
+ collaterals,
1275
+ fee: blockfrostTxCBOR.body.fee,
1276
+ inputs,
1277
+ outputs
1278
+ },
1279
+ certificates: blockfrostTxCBOR.body.certificates ?? [],
1280
+ donation: blockfrostTxCBOR.body.donation,
1281
+ mint: blockfrostTxCBOR.body.mint ? new Map([...blockfrostTxCBOR.body.mint].sort()) : void 0,
1282
+ proposalProcedures: blockfrostTxCBOR.body.proposalProcedures,
1283
+ validityInterval: blockfrostTxCBOR.body.validityInterval ? blockfrostTxCBOR.body.validityInterval : {
1284
+ invalidBefore: void 0,
1285
+ invalidHereafter: void 0
1286
+ },
1287
+ votingProcedures: blockfrostTxCBOR.body.votingProcedures,
1288
+ withdrawals: blockfrostTxCBOR.body.withdrawals
1289
+ };
1290
+ return require_asyncoption.Ok({
1291
+ auxiliaryData: blockfrostTxCBOR.auxiliaryData,
1292
+ blockHeader: {
1293
+ blockNo: require_Address.BlockNo(txDetails.block_height),
1294
+ hash: require_Address.BlockId(txDetails.block),
1295
+ slot: require_Address.Slot(txDetails.slot)
1296
+ },
1297
+ body,
1298
+ id: txId,
1299
+ index: txDetails.index,
1300
+ inputSource,
1301
+ txSize: 0,
1302
+ witness: blockfrostTxCBOR.witness,
1303
+ blockTime: txDetails.block_time
1304
+ });
1305
+ }), (0, rxjs.catchError)((error) => (0, rxjs.of)(require_asyncoption.Err(error))));
1306
+ }
1307
+ #fetchTxFromCbor(txId) {
1308
+ return (0, rxjs.from)(this.request(`txs/${txId}/cbor`)).pipe((0, rxjs.map)(({ cbor }) => require_Address.Transaction.fromCbor(require_Address.TxCBOR(cbor)).toCore()));
1309
+ }
1310
+ #fetchUtxos(txId) {
1311
+ return (0, rxjs.from)(this.request(`txs/${txId}/utxos`));
1312
+ }
1313
+ };
1314
+ //#endregion
1315
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-input-resolver-provider.ts
1316
+ /**
1317
+ * A resolver class to fetch and resolve transaction inputs using Blockfrost API.
1318
+ */
1319
+ var BlockfrostInputResolverProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1320
+ /**
1321
+ * Constructs a new BlockfrostInputResolverProvider.
1322
+ *
1323
+ * @param client - The Blockfrost client instance to interact with the Blockfrost API.
1324
+ * @param logger - The logger instance to log messages to.
1325
+ */
1326
+ constructor(client, logger) {
1327
+ super(client, logger);
1328
+ }
1329
+ /**
1330
+ * Resolves a transaction input (`Cardano.TxIn`) to its corresponding output (`Cardano.TxOut`).
1331
+ *
1332
+ * @param input - The transaction input to resolve, including its transaction ID and index.
1333
+ * @returns A promise that resolves to the corresponding `Cardano.TxOut` if found, or `null` if not.
1334
+ */
1335
+ async resolveInput(input) {
1336
+ this.logger.debug(`Resolving input ${input.txId}#${input.index}`);
1337
+ const out = await this.fetchTxOut(input);
1338
+ if (!out) return null;
1339
+ return out;
1340
+ }
1341
+ /**
1342
+ * Fetches and caches the transaction output (`Cardano.TxOut`) for a given transaction input (`Cardano.TxIn`).
1343
+ *
1344
+ * @param txIn - The transaction input to fetch and cache the output for.
1345
+ * @returns A promise that resolves to the corresponding `Cardano.TxOut` if found, or `null` if not.
1346
+ */
1347
+ async fetchTxOut(txIn) {
1348
+ let response;
1349
+ try {
1350
+ response = await this.request(`txs/${txIn.txId}/utxos`);
1351
+ } catch (error) {
1352
+ this.logger.error(`Failed to fetch transaction ${txIn.txId}`, error);
1353
+ if (require_error.isNotFoundError(error)) return null;
1354
+ throw error;
1355
+ }
1356
+ for (const blockfrostUTxO of response.outputs) {
1357
+ if (blockfrostUTxO.output_index !== txIn.index) continue;
1358
+ const coreTxOut = require_blockfrost_tx_submit_provider.BlockfrostToCardanoSDK.txOut(blockfrostUTxO);
1359
+ this.logger.debug(`Resolved input ${txIn.txId}#${txIn.index} from Blockfrost`);
1360
+ return coreTxOut;
1361
+ }
1362
+ this.logger.error(`Failed to resolve input ${txIn.txId}#${txIn.index}`);
1363
+ return null;
1364
+ }
1365
+ };
1366
+ //#endregion
1367
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-stake-pool-provider.ts
1368
+ var BlockfrostStakePoolProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1369
+ constructor(client, logger) {
1370
+ super(client, logger);
1371
+ }
1372
+ async getMetadata(poolId) {
1373
+ try {
1374
+ const metadata = await this.request(`pools/${poolId}/metadata`);
1375
+ return Object.keys(metadata).length ? metadata : null;
1376
+ } catch (error) {
1377
+ if (error instanceof require_errors.ProviderError) {
1378
+ if (error.reason === require_errors.ProviderFailure.NotFound) return null;
1379
+ throw error;
1380
+ }
1381
+ throw require_error.toProviderError(error);
1382
+ }
1383
+ }
1384
+ async getNetworkData() {
1385
+ try {
1386
+ const [genesis, params, network, retiring] = await Promise.all([
1387
+ this.request("genesis"),
1388
+ this.request("epochs/latest/parameters"),
1389
+ this.request("network"),
1390
+ this.paginatedRequests({
1391
+ endpoint: "pools/retiring",
1392
+ pageSize: 100
1393
+ })
1394
+ ]);
1395
+ return {
1396
+ activeSlotsCoefficient: genesis.active_slots_coefficient,
1397
+ desiredNumberOfPools: params.n_opt,
1398
+ epochLength: genesis.epoch_length,
1399
+ liveStake: Number(network.stake.live),
1400
+ maxLovelaceSupply: Number(network.supply.max),
1401
+ monetaryExpansion: params.rho,
1402
+ poolInfluence: params.a0,
1403
+ reserves: Number(network.supply.reserves),
1404
+ retiringPools: retiring.map((pool) => pool.pool_id),
1405
+ slotLength: genesis.slot_length,
1406
+ timestamp: 0,
1407
+ treasuryCut: params.tau
1408
+ };
1409
+ } catch (error) {
1410
+ throw require_error.toProviderError(error);
1411
+ }
1412
+ }
1413
+ async getStakePool(poolId) {
1414
+ try {
1415
+ return await this.request(`pools/${poolId}`);
1416
+ } catch (error) {
1417
+ if (error instanceof require_errors.ProviderError) {
1418
+ if (error.reason === require_errors.ProviderFailure.NotFound) return null;
1419
+ throw error;
1420
+ }
1421
+ throw require_error.toProviderError(error);
1422
+ }
1423
+ }
1424
+ async getStakePools() {
1425
+ try {
1426
+ return await this.paginatedRequests({
1427
+ endpoint: "pools/extended",
1428
+ pageSize: 100
1429
+ });
1430
+ } catch (error) {
1431
+ throw require_error.toProviderError(error);
1432
+ }
1433
+ }
1434
+ };
1435
+ //#endregion
1436
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-rewards-provider.ts
1437
+ /**
1438
+ * Blockfrost returns 404 from the `accounts/*` endpoints for a stake address
1439
+ * that has never appeared on-chain. That is a normal state for a fresh
1440
+ * account, not an error: it means "never registered, nothing staked, no
1441
+ * rewards".
1442
+ */
1443
+ const NEVER_ACTIVE_REWARD_ACCOUNT_INFO = {
1444
+ isActive: false,
1445
+ isRegistered: false,
1446
+ rewardsSum: require_bignum_vo.BigNumber(0n),
1447
+ withdrawableAmount: require_bignum_vo.BigNumber(0n),
1448
+ controlledAmount: require_bignum_vo.BigNumber(0n)
1449
+ };
1450
+ var BlockfrostRewardsProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1451
+ constructor(client, logger) {
1452
+ super(client, logger);
1453
+ }
1454
+ /**
1455
+ * Fetches the total rewards balance for a given reward account.
1456
+ *
1457
+ * @param rewardAccount - CardanoRewardAccount to fetch the balance for
1458
+ * @param epochs - Optional range of epochs to filter the rewards
1459
+ * @returns Observable with Result containing the rewards or an error
1460
+ */
1461
+ getAccountRewards({ rewardAccount }) {
1462
+ return (0, rxjs.defer)(async () => this.paginatedRequests({
1463
+ endpoint: `accounts/${rewardAccount}/rewards?order=desc`,
1464
+ pageSize: 100
1465
+ })).pipe((0, rxjs.map)((rewards) => require_asyncoption.Ok(rewards.map((reward) => ({
1466
+ epoch: require_Address.EpochNo(reward.epoch),
1467
+ rewards: require_bignum_vo.BigNumber(BigInt(reward.amount)),
1468
+ poolId: require_Address.PoolId(reward.pool_id)
1469
+ })))), (0, rxjs.catchError)((error) => {
1470
+ if (require_error.isNotFoundError(error)) return (0, rxjs.of)(require_asyncoption.Ok([]));
1471
+ return (0, rxjs.of)(require_asyncoption.Err(error));
1472
+ }));
1473
+ }
1474
+ /**
1475
+ * Fetches stake account information for a given reward account.
1476
+ *
1477
+ * @param rewardAccount - CardanoRewardAccount to fetch info for
1478
+ * @returns Observable with Result containing RewardAccountInfo or an error
1479
+ */
1480
+ getRewardAccountInfo({ rewardAccount }) {
1481
+ return (0, rxjs.from)(this.request(`accounts/${rewardAccount}`).then((account) => require_asyncoption.Ok({
1482
+ isActive: account.active,
1483
+ isRegistered: account.registered ?? account.active,
1484
+ ...account.pool_id && { poolId: require_Address.PoolId(account.pool_id) },
1485
+ ...account.drep_id && { drepId: account.drep_id },
1486
+ rewardsSum: require_bignum_vo.BigNumber(BigInt(account.rewards_sum)),
1487
+ withdrawableAmount: require_bignum_vo.BigNumber(BigInt(account.withdrawable_amount)),
1488
+ controlledAmount: require_bignum_vo.BigNumber(BigInt(account.controlled_amount))
1489
+ })).catch((error) => {
1490
+ if (require_error.isNotFoundError(error)) return require_asyncoption.Ok(NEVER_ACTIVE_REWARD_ACCOUNT_INFO);
1491
+ return require_asyncoption.Err(error);
1492
+ }));
1493
+ }
1494
+ };
1495
+ //#endregion
1496
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-delegations-provider.ts
1497
+ var BlockfrostDelegationsProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1498
+ constructor(client, logger) {
1499
+ super(client, logger);
1500
+ }
1501
+ /**
1502
+ * Fetches all delegation history for a given reward account.
1503
+ *
1504
+ * @param rewardAccount - CardanoRewardAccount to fetch the delegations for
1505
+ * @returns Observable with Result containing all delegations or an error
1506
+ */
1507
+ getAccountDelegations({ rewardAccount }) {
1508
+ return (0, rxjs.from)(this.paginatedRequests({
1509
+ endpoint: `accounts/${rewardAccount}/delegations?order=desc`,
1510
+ pageSize: 100
1511
+ })).pipe((0, rxjs.map)((delegations) => require_asyncoption.Ok(delegations.map((delegation) => ({
1512
+ activeEpoch: require_Address.EpochNo(delegation.active_epoch),
1513
+ txHash: require_Address.TransactionId(delegation.tx_hash),
1514
+ amount: require_bignum_vo.BigNumber(BigInt(delegation.amount)),
1515
+ poolId: require_Address.PoolId(delegation.pool_id)
1516
+ })))), (0, rxjs.catchError)((error) => (0, rxjs.of)(require_asyncoption.Err(error))));
1517
+ }
1518
+ };
1519
+ //#endregion
1520
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-governance-provider.ts
1521
+ const PAGE_SIZE = 100;
1522
+ const jsonLdString = (value) => {
1523
+ if (typeof value === "string") return value;
1524
+ if (typeof value === "object" && value !== null && "@value" in value) {
1525
+ const inner = value["@value"];
1526
+ return typeof inner === "string" ? inner : void 0;
1527
+ }
1528
+ };
1529
+ const getMetadataBody = (jsonMetadata) => {
1530
+ if (typeof jsonMetadata !== "object" || jsonMetadata === null) return void 0;
1531
+ const body = jsonMetadata.body;
1532
+ if (typeof body !== "object" || body === null) return void 0;
1533
+ return body;
1534
+ };
1535
+ const extractReferences = (references) => {
1536
+ if (!Array.isArray(references)) return void 0;
1537
+ const parsed = references.flatMap((reference) => {
1538
+ if (typeof reference !== "object" || reference === null) return [];
1539
+ const { uri, label } = reference;
1540
+ const uriValue = jsonLdString(uri);
1541
+ if (uriValue === void 0) return [];
1542
+ const labelValue = jsonLdString(label);
1543
+ return [{
1544
+ uri: uriValue,
1545
+ ...labelValue !== void 0 && { label: labelValue }
1546
+ }];
1547
+ });
1548
+ return parsed.length > 0 ? parsed : void 0;
1549
+ };
1550
+ const extractMetadata = (envelope, body) => {
1551
+ const metadata = {};
1552
+ if (typeof envelope?.url === "string") metadata.metadataUrl = envelope.url;
1553
+ if (typeof envelope?.hash === "string") metadata.metadataHash = envelope.hash;
1554
+ const assign = (key, value) => {
1555
+ const parsed = jsonLdString(value);
1556
+ if (parsed !== void 0) metadata[key] = parsed;
1557
+ };
1558
+ if (body) {
1559
+ assign("imageUrl", (typeof body.image === "object" && body.image !== null ? body.image : void 0)?.contentUrl);
1560
+ assign("bio", body.bio);
1561
+ assign("email", body.email);
1562
+ assign("objectives", body.objectives);
1563
+ assign("motivations", body.motivations);
1564
+ assign("qualifications", body.qualifications);
1565
+ assign("paymentAddress", body.paymentAddress);
1566
+ const references = extractReferences(body.references);
1567
+ if (references) metadata.references = references;
1568
+ }
1569
+ return Object.keys(metadata).length > 0 ? metadata : void 0;
1570
+ };
1571
+ const toDRepSummary = (item) => {
1572
+ const credential = {
1573
+ hash: require_Address.Hash28ByteBase16(item.hex.length === 58 ? item.hex.slice(2) : item.hex),
1574
+ type: item.has_script ? require_Address.CredentialType.ScriptHash : require_Address.CredentialType.KeyHash
1575
+ };
1576
+ const body = getMetadataBody(item.metadata?.json_metadata);
1577
+ return {
1578
+ drepId: require_PaymentAddress.DRepID(item.drep_id),
1579
+ cip105DrepId: require_PaymentAddress.DRepID.cip105FromCredential(credential),
1580
+ hex: item.hex,
1581
+ isActive: !item.retired && !item.expired,
1582
+ retired: item.retired,
1583
+ expired: item.expired,
1584
+ amount: item.amount,
1585
+ hasScript: item.has_script,
1586
+ name: jsonLdString(body?.givenName),
1587
+ metadata: extractMetadata(item.metadata, body)
1588
+ };
1589
+ };
1590
+ var BlockfrostGovernanceProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1591
+ constructor(client, logger) {
1592
+ super(client, logger);
1593
+ }
1594
+ getDReps() {
1595
+ const fetchPage = (page) => (0, rxjs.from)(this.request(`governance/dreps?page=${page}&count=${PAGE_SIZE}`));
1596
+ return fetchPage(1).pipe((0, rxjs.expand)((items, index) => items.length === PAGE_SIZE ? fetchPage(index + 2) : rxjs.EMPTY), (0, rxjs.reduce)((accumulated, items) => [...accumulated, ...items], []), (0, rxjs.map)((all) => require_asyncoption.Ok(all.filter((d) => d.drep_id.startsWith("drep1")).map((item) => toDRepSummary(item)))), (0, rxjs.catchError)((error) => (0, rxjs.of)(require_asyncoption.Err(error))));
1597
+ }
1598
+ };
1599
+ //#endregion
1600
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-registrations-provider.ts
1601
+ var BlockfrostRegistrationsProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1602
+ constructor(client, logger) {
1603
+ super(client, logger);
1604
+ }
1605
+ /**
1606
+ * Fetches all registration history for a given reward account.
1607
+ *
1608
+ * @param rewardAccount - CardanoRewardAccount to fetch the registrations for
1609
+ * @returns Observable with Result containing all registrations or an error
1610
+ */
1611
+ getAccountRegistrations({ rewardAccount }) {
1612
+ return (0, rxjs.from)(this.paginatedRequests({
1613
+ endpoint: `accounts/${rewardAccount}/registrations?order=desc`,
1614
+ pageSize: 100
1615
+ })).pipe((0, rxjs.map)((registrations) => require_asyncoption.Ok(registrations.map((registration) => ({
1616
+ txHash: require_Address.TransactionId(registration.tx_hash),
1617
+ action: registration.action
1618
+ })))), (0, rxjs.catchError)((error) => (0, rxjs.of)(require_asyncoption.Err(error))));
1619
+ }
1620
+ };
1621
+ //#endregion
1622
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-withdrawals-provider.ts
1623
+ var BlockfrostWithdrawalsProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1624
+ constructor(client, logger) {
1625
+ super(client, logger);
1626
+ }
1627
+ /**
1628
+ * Fetches all withdrawal history for a given reward account.
1629
+ *
1630
+ * @param rewardAccount - CardanoRewardAccount to fetch the withdrawals for
1631
+ * @returns Observable with Result containing all withdrawals or an error
1632
+ */
1633
+ getAccountWithdrawals({ rewardAccount }) {
1634
+ return (0, rxjs.from)(this.paginatedRequests({
1635
+ endpoint: `accounts/${rewardAccount}/withdrawals?order=desc`,
1636
+ pageSize: 100
1637
+ })).pipe((0, rxjs.map)((withdrawals) => require_asyncoption.Ok(withdrawals.map((withdrawal) => ({
1638
+ txHash: require_Address.TransactionId(withdrawal.tx_hash),
1639
+ amount: require_bignum_vo.BigNumber(BigInt(withdrawal.amount))
1640
+ })))), (0, rxjs.catchError)((error) => (0, rxjs.of)(require_asyncoption.Err(error))));
1641
+ }
1642
+ };
1643
+ //#endregion
1644
+ //#region ../../packages/lib/cardano-provider-core/src/provider/blockfrost-tx-evaluation-provider.ts
1645
+ const REDEEMER_PURPOSE_BY_NAME = {
1646
+ spend: require_Address.RedeemerPurpose.spend,
1647
+ mint: require_Address.RedeemerPurpose.mint,
1648
+ certificate: require_Address.RedeemerPurpose.certificate,
1649
+ publish: require_Address.RedeemerPurpose.certificate,
1650
+ withdrawal: require_Address.RedeemerPurpose.withdrawal,
1651
+ withdraw: require_Address.RedeemerPurpose.withdrawal,
1652
+ vote: require_Address.RedeemerPurpose.vote,
1653
+ propose: require_Address.RedeemerPurpose.propose
1654
+ };
1655
+ const toExUnits = (budget) => {
1656
+ if (typeof budget !== "object" || budget === null) return void 0;
1657
+ const { memory, steps, cpu } = budget;
1658
+ const stepsValue = typeof steps === "number" ? steps : typeof cpu === "number" ? cpu : void 0;
1659
+ if (typeof memory !== "number" || stepsValue === void 0) return void 0;
1660
+ return {
1661
+ memory,
1662
+ steps: stepsValue
1663
+ };
1664
+ };
1665
+ /** `"<purpose>:<index>"` (v5) or a `{ purpose, index }` object (v6). */
1666
+ const toRedeemerRef = (validator) => {
1667
+ const { name, index } = typeof validator === "string" ? {
1668
+ name: validator.split(":")[0],
1669
+ index: Number(validator.split(":")[1] ?? "0")
1670
+ } : {
1671
+ name: validator?.purpose,
1672
+ index: validator?.index ?? 0
1673
+ };
1674
+ const purpose = REDEEMER_PURPOSE_BY_NAME[name?.toLowerCase() ?? ""];
1675
+ if (!purpose || !Number.isInteger(index)) return void 0;
1676
+ return {
1677
+ purpose,
1678
+ index
1679
+ };
1680
+ };
1681
+ const fromEvaluationResult = (evaluationResult) => Object.entries(evaluationResult).flatMap(([key, value]) => {
1682
+ const ref = toRedeemerRef(key);
1683
+ const budget = toExUnits(value);
1684
+ return ref && budget ? [{
1685
+ ...ref,
1686
+ budget
1687
+ }] : [];
1688
+ });
1689
+ const fromEvaluationEntries = (entries) => entries.flatMap((entry) => {
1690
+ const ref = toRedeemerRef(entry.validator);
1691
+ const budget = toExUnits(entry.budget ?? entry.ex_units);
1692
+ return ref && budget ? [{
1693
+ ...ref,
1694
+ budget
1695
+ }] : [];
1696
+ });
1697
+ /**
1698
+ * An empty list only for a collection that was itself empty. A NON-EMPTY
1699
+ * collection none of whose entries parsed is a dialect this parser does not
1700
+ * know, not a transaction without redeemers — reporting it as `[]` would spend
1701
+ * the contract's "no redeemers" answer on the drift this dual parser exists to
1702
+ * surface.
1703
+ */
1704
+ const parsedOrUnrecognised = (sourceCount, parsed) => sourceCount > 0 && parsed.length === 0 ? void 0 : parsed;
1705
+ /**
1706
+ * Both dialects, unwrapped from the optional `result` envelope. `undefined`
1707
+ * distinguishes "this is not an evaluation" (a fault, an `EvaluationFailure`,
1708
+ * an unknown shape, a known envelope carrying only unreadable entries) from a
1709
+ * transaction that carries no redeemers, which legitimately evaluates to an
1710
+ * empty list.
1711
+ */
1712
+ const parseEvaluation = (data) => {
1713
+ const body = typeof data === "object" && data !== null && "result" in data ? data.result : data;
1714
+ if (Array.isArray(body)) {
1715
+ const entries = body;
1716
+ return parsedOrUnrecognised(entries.length, fromEvaluationEntries(entries));
1717
+ }
1718
+ if (typeof body === "object" && body !== null) {
1719
+ const { EvaluationResult: evaluationResult } = body;
1720
+ if (typeof evaluationResult === "object" && evaluationResult !== null) {
1721
+ const result = evaluationResult;
1722
+ return parsedOrUnrecognised(Object.keys(result).length, fromEvaluationResult(result));
1723
+ }
1724
+ }
1725
+ };
1726
+ /** Truncated so a multi-kilobyte script trace cannot flood the log or the error. */
1727
+ const describeUnusableResponse = (data) => {
1728
+ try {
1729
+ return JSON.stringify(data)?.slice(0, 500) ?? "undefined";
1730
+ } catch {
1731
+ return String(data);
1732
+ }
1733
+ };
1734
+ var BlockfrostTxEvaluationProvider = class extends require_blockfrost_tx_submit_provider.BlockfrostProvider {
1735
+ constructor(client, logger) {
1736
+ super(client, logger);
1737
+ }
1738
+ /**
1739
+ * Evaluate a transaction's per-redeemer execution units.
1740
+ *
1741
+ * @param tx - transaction CBOR (unsigned is fine)
1742
+ * @returns Observable with the per-redeemer budgets, or an error when the
1743
+ * network declined to evaluate (script failure, provider fault, HTTP error).
1744
+ */
1745
+ evaluateTx({ tx }) {
1746
+ return (0, rxjs.from)(this.request("utils/txs/evaluate", {
1747
+ body: tx,
1748
+ headers: { "Content-Type": "application/cbor" },
1749
+ method: "POST"
1750
+ }).then((data) => {
1751
+ const evaluated = parseEvaluation(data);
1752
+ if (evaluated) return require_asyncoption.Ok(evaluated);
1753
+ const detail = describeUnusableResponse(data);
1754
+ this.logger.warn("evaluateTx: no evaluation in response", detail);
1755
+ return require_asyncoption.Err(new require_errors.ProviderError(require_errors.ProviderFailure.InvalidResponse, void 0, detail));
1756
+ }).catch((error) => require_asyncoption.Err(error)));
1757
+ }
1758
+ };
1759
+ //#endregion
1760
+ //#region ../../packages/lib/cardano-provider-core/src/util.ts
1761
+ const serializeMetadatum = ((value, stringifyComposite = false) => {
1762
+ if (typeof value === "string") return value;
1763
+ if (typeof value === "bigint") return value.toString();
1764
+ if (Array.isArray(value)) {
1765
+ const serializedItems = value.map((item) => serializeMetadatum(item));
1766
+ return stringifyComposite ? JSON.stringify(serializedItems) : serializedItems;
1767
+ }
1768
+ if (value instanceof Map) {
1769
+ const serializedEntries = Object.fromEntries([...value.entries()].map(([key, nestedValue]) => [metadatumKeyToString(key), serializeMetadatum(nestedValue)]));
1770
+ return stringifyComposite ? JSON.stringify(serializedEntries) : serializedEntries;
1771
+ }
1772
+ if (value instanceof Uint8Array) try {
1773
+ return new TextDecoder("utf-8", { fatal: true }).decode(value);
1774
+ } catch {
1775
+ return `[Invalid UTF-8: ${value.length} bytes]`;
1776
+ }
1777
+ return String(value);
1778
+ });
1779
+ const metadatumKeyToString = (value) => serializeMetadatum(value, true);
1780
+ const metadatumToSerializableValue = (value) => serializeMetadatum(value);
1781
+ const mapToRecord = (map) => [...map?.entries() || []].map(([key, value]) => [key, metadatumToSerializableValue(value)]).reduce((result, [key, value]) => {
1782
+ result[key] = value;
1783
+ return result;
1784
+ }, {});
1785
+ const mergeDefinedProperties = (properties) => {
1786
+ const definedProperties = properties.filter((property) => property[1] !== void 0);
1787
+ if (definedProperties.length === 0) return;
1788
+ return Object.fromEntries(definedProperties);
1789
+ };
1790
+ const toContractTokenMetadata = (assetInfo) => ({
1791
+ blockchainSpecific: {
1792
+ metadataSchemaVersion: 1,
1793
+ updatedAt: require_time_vo.Timestamp.now(),
1794
+ policyId: assetInfo.policyId.toString(),
1795
+ files: assetInfo.nftMetadata?.files?.map((file) => ({
1796
+ mediaType: file.mediaType,
1797
+ src: file.src,
1798
+ name: file.name,
1799
+ additionalProperties: mapToRecord(file.otherProperties)
1800
+ }))
1801
+ },
1802
+ decimals: assetInfo.tokenMetadata?.decimals || 0,
1803
+ additionalProperties: mergeDefinedProperties([["description", assetInfo.nftMetadata?.description], ...Object.entries(mapToRecord(assetInfo.nftMetadata?.otherProperties) ?? {})]),
1804
+ image: assetInfo.nftMetadata?.image || assetInfo.tokenMetadata?.icon,
1805
+ isNft: assetInfo.supply === 1n,
1806
+ name: assetInfo.nftMetadata?.name || assetInfo.tokenMetadata?.name || assetInfo.fingerprint,
1807
+ ticker: assetInfo.tokenMetadata?.ticker
1808
+ });
1809
+ /** Base lovelace metadata; ticker and image are set per-network in Blockfrost dependencies. */
1810
+ const LOVELACE_METADATA = {
1811
+ decimals: 6,
1812
+ name: "Cardano",
1813
+ ticker: "ADA",
1814
+ blockchainSpecific: {
1815
+ metadataSchemaVersion: 1,
1816
+ updatedAt: require_time_vo.Timestamp.now()
1817
+ }
1818
+ };
1819
+ //#endregion
1820
+ //#region ../../packages/lib/cardano-provider-core/src/blockfrost-config.ts
1821
+ var import_lib = /* @__PURE__ */ require_chunk.__toESM(require_lib$1.require_lib());
1822
+ const computeBlockfrostConfigIdentifier = ({ clientConfig: { baseUrl, projectId } }) => `${baseUrl}-${projectId}`;
1823
+ const getBlockfrostClient = (0, lodash_memoize.default)(({ clientConfig, rateLimiterConfig }) => {
1824
+ const rateLimiter = new import_lib.default({
1825
+ reservoir: rateLimiterConfig.size,
1826
+ reservoirIncreaseAmount: rateLimiterConfig.increaseAmount,
1827
+ reservoirIncreaseInterval: rateLimiterConfig.increaseInterval,
1828
+ reservoirIncreaseMaximum: rateLimiterConfig.size
1829
+ });
1830
+ return new require_http_client.HttpClient({
1831
+ baseUrl: require_http_client.buildUrl(["api", clientConfig.apiVersion], clientConfig.baseUrl),
1832
+ requestInit: { headers: { ...clientConfig.projectId && { project_id: clientConfig.projectId } } }
1833
+ }, { rateLimiter });
1834
+ }, computeBlockfrostConfigIdentifier);
1835
+ const Blockchains = {
1836
+ Cardano: "data:image/png;base64,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",
1837
+ Bitcoin: "data:image/png;base64,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"
1838
+ };
1839
+ //#endregion
1840
+ //#region ../../packages/module/cardano-provider-blockfrost/src/store/dependencies.ts
1841
+ const getNetworkInfoProvider = (0, lodash_memoize.default)((config, logger) => {
1842
+ return new require_blockfrost_tx_submit_provider.BlockfrostNetworkInfoProvider(getBlockfrostClient(config), logger);
1843
+ }, computeBlockfrostConfigIdentifier);
1844
+ const getAssetProvider = (0, lodash_memoize.default)((config, logger) => {
1845
+ return new BlockfrostAssetProvider(getBlockfrostClient(config), logger);
1846
+ }, computeBlockfrostConfigIdentifier);
1847
+ const getAddressDiscoveryProvider = (0, lodash_memoize.default)((config, logger) => {
1848
+ return new BlockfrostAddressDiscovery(getBlockfrostClient(config), logger);
1849
+ }, computeBlockfrostConfigIdentifier);
1850
+ const getInputResolverProvider = (0, lodash_memoize.default)((config, logger) => {
1851
+ return new BlockfrostInputResolverProvider(getBlockfrostClient(config), logger);
1852
+ }, computeBlockfrostConfigIdentifier);
1853
+ const getTokensProvider = (0, lodash_memoize.default)((config, logger) => {
1854
+ return new BlockfrostTokensProvider(getBlockfrostClient(config), logger);
1855
+ }, computeBlockfrostConfigIdentifier);
1856
+ const getAccountActivityProvider = (0, lodash_memoize.default)((config, logger) => {
1857
+ return new BlockfrostActivityProvider(getBlockfrostClient(config), logger);
1858
+ }, computeBlockfrostConfigIdentifier);
1859
+ const getAccountRewardsProvider = (0, lodash_memoize.default)((config, logger) => {
1860
+ return new BlockfrostRewardsProvider(getBlockfrostClient(config), logger);
1861
+ }, computeBlockfrostConfigIdentifier);
1862
+ const getAccountDelegationsProvider = (0, lodash_memoize.default)((config, logger) => {
1863
+ return new BlockfrostDelegationsProvider(getBlockfrostClient(config), logger);
1864
+ }, computeBlockfrostConfigIdentifier);
1865
+ const getAccountRegistrationsProvider = (0, lodash_memoize.default)((config, logger) => {
1866
+ return new BlockfrostRegistrationsProvider(getBlockfrostClient(config), logger);
1867
+ }, computeBlockfrostConfigIdentifier);
1868
+ const getAccountWithdrawalsProvider = (0, lodash_memoize.default)((config, logger) => {
1869
+ return new BlockfrostWithdrawalsProvider(getBlockfrostClient(config), logger);
1870
+ }, computeBlockfrostConfigIdentifier);
1871
+ const getStakePoolProvider = (0, lodash_memoize.default)((config, logger) => {
1872
+ return new BlockfrostStakePoolProvider(getBlockfrostClient(config), logger);
1873
+ }, computeBlockfrostConfigIdentifier);
1874
+ const getUtxoProvider = (0, lodash_memoize.default)((config, logger) => {
1875
+ return new require_blockfrost_tx_submit_provider.BlockfrostUtxoProvider(getBlockfrostClient(config), logger);
1876
+ }, computeBlockfrostConfigIdentifier);
1877
+ const getTxSubmitProvider = (0, lodash_memoize.default)((config, logger) => {
1878
+ return new require_blockfrost_tx_submit_provider.BlockfrostTxSubmitProvider(getBlockfrostClient(config), logger);
1879
+ }, computeBlockfrostConfigIdentifier);
1880
+ const getTxEvaluationProvider = (0, lodash_memoize.default)((config, logger) => {
1881
+ return new BlockfrostTxEvaluationProvider(getBlockfrostClient(config), logger);
1882
+ }, computeBlockfrostConfigIdentifier);
1883
+ const getGovernanceProvider = (0, lodash_memoize.default)((config, logger) => {
1884
+ return new BlockfrostGovernanceProvider(getBlockfrostClient(config), logger);
1885
+ }, computeBlockfrostConfigIdentifier);
1886
+ const getBlockfrostConfig = (context, configs) => {
1887
+ const config = configs[context.chainId.networkMagic];
1888
+ if (!config) throw new Error(`Assertion failed: no blockfrost config found (${context.chainId.networkMagic}`);
1889
+ return config;
1890
+ };
1891
+ const initializeDependencies = async ({ runtime: { config: { cardanoProvider: { blockfrostConfigs } } }, loadModules }, { logger }) => {
1892
+ const bip32Ed25519 = (await loadModules("addons.bip32Ed25519"))[0];
1893
+ const dependencies = {
1894
+ blake2b: (await loadModules("addons.blake2b"))[0],
1895
+ bip32Ed25519
1896
+ };
1897
+ return {
1898
+ cardanoProvider: {
1899
+ getTip: (context) => {
1900
+ return (0, rxjs.from)(getNetworkInfoProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).ledgerTip().then(require_asyncoption.Ok).catch(require_asyncoption.Err));
1901
+ },
1902
+ getProtocolParameters: (context) => {
1903
+ const provider = getNetworkInfoProvider(getBlockfrostConfig(context, blockfrostConfigs), logger);
1904
+ return (0, rxjs.defer)(async () => provider.protocolParameters().then(require_asyncoption.Ok).catch(require_asyncoption.Err));
1905
+ },
1906
+ getEraSummaries: (context) => {
1907
+ const provider = getNetworkInfoProvider(getBlockfrostConfig(context, blockfrostConfigs), logger);
1908
+ return (0, rxjs.defer)(async () => provider.eraSummaries().then(require_asyncoption.Ok).catch(require_asyncoption.Err));
1909
+ },
1910
+ discoverAddresses: ({ xpub, accountIndex, thorough }, context) => {
1911
+ const provider = getAddressDiscoveryProvider(getBlockfrostConfig(context, blockfrostConfigs), logger);
1912
+ const account = new Bip32Account({
1913
+ extendedAccountPublicKey: xpub,
1914
+ chainId: context.chainId,
1915
+ accountIndex
1916
+ }, dependencies);
1917
+ return provider.discover(account, { thorough }).pipe((0, rxjs.map)((result) => result.map((address) => require_util.toContractAddress(address, context.chainId.networkMagic))));
1918
+ },
1919
+ getTokenMetadata: ({ tokenId }, context) => {
1920
+ if (tokenId === require_const.LOVELACE_TOKEN_ID) {
1921
+ const ticker = require_cardano_network_id_to_network_type.getAdaTokenTickerByNetwork(require_cardano_network_id_to_network_type.cardanoNetworkMagicToNetworkType(context.chainId.networkMagic));
1922
+ return (0, rxjs.of)(require_asyncoption.Ok({
1923
+ ...LOVELACE_METADATA,
1924
+ ticker,
1925
+ image: Blockchains.Cardano
1926
+ }));
1927
+ }
1928
+ const provider = getAssetProvider(getBlockfrostConfig(context, blockfrostConfigs), logger);
1929
+ const assetId = require_Address.AssetId(tokenId);
1930
+ return (0, rxjs.defer)(async () => provider.getAsset({
1931
+ assetId,
1932
+ extraData: {
1933
+ nftMetadata: true,
1934
+ tokenMetadata: true
1935
+ }
1936
+ }).then((assetInfo) => require_asyncoption.Ok(toContractTokenMetadata(assetInfo))).catch(require_asyncoption.Err));
1937
+ },
1938
+ getTokens: (props, context) => {
1939
+ return getTokensProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getTokens(props);
1940
+ },
1941
+ getAccountRewards: (props, context) => {
1942
+ return getAccountRewardsProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getAccountRewards(props);
1943
+ },
1944
+ getAccountDelegations: (props, context) => {
1945
+ return getAccountDelegationsProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getAccountDelegations(props);
1946
+ },
1947
+ getAccountRegistrations: (props, context) => {
1948
+ return getAccountRegistrationsProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getAccountRegistrations(props);
1949
+ },
1950
+ getAccountWithdrawals: (props, context) => {
1951
+ return getAccountWithdrawalsProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getAccountWithdrawals(props);
1952
+ },
1953
+ getRewardAccountInfo: (props, context) => {
1954
+ return getAccountRewardsProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getRewardAccountInfo(props);
1955
+ },
1956
+ getAccountUtxos: (props, context) => {
1957
+ return getUtxoProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getAccountUtxos(props);
1958
+ },
1959
+ getUtxosAtAddress: (props, context) => {
1960
+ return getUtxoProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getUtxosAtAddress(props);
1961
+ },
1962
+ getAddressTransactionHistory: (props, context) => {
1963
+ return getAccountActivityProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getAddressTransactionHistory(props);
1964
+ },
1965
+ getTransactionDetails: (txId, context) => {
1966
+ return getAccountActivityProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getTransactionDetails(txId);
1967
+ },
1968
+ resolveInput: (txIn, context) => {
1969
+ const provider = getInputResolverProvider(getBlockfrostConfig(context, blockfrostConfigs), logger);
1970
+ return (0, rxjs.defer)(async () => provider.resolveInput(txIn).then(require_asyncoption.Ok).catch(require_asyncoption.Err));
1971
+ },
1972
+ submitTx: (props, context) => {
1973
+ return (0, rxjs.from)(getTxSubmitProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).submitTx(props).then((id) => require_asyncoption.Ok(require_Address.TransactionId(id))).catch(require_asyncoption.Err));
1974
+ },
1975
+ evaluateTx: (props, context) => {
1976
+ return getTxEvaluationProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).evaluateTx(props);
1977
+ },
1978
+ getDReps: (context) => {
1979
+ return getGovernanceProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getDReps();
1980
+ }
1981
+ },
1982
+ cardanoStakePoolsProvider: {
1983
+ getMetadata: (poolId, context) => {
1984
+ return (0, rxjs.from)(getStakePoolProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getMetadata(poolId).then(require_asyncoption.Ok).catch(require_asyncoption.Err));
1985
+ },
1986
+ getNetworkData: (context) => {
1987
+ return (0, rxjs.from)(getStakePoolProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getNetworkData().then(require_asyncoption.Ok).catch(require_asyncoption.Err));
1988
+ },
1989
+ getStakePool: (poolId, context) => {
1990
+ return (0, rxjs.from)(getStakePoolProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getStakePool(poolId).then(require_asyncoption.Ok).catch(require_asyncoption.Err));
1991
+ },
1992
+ getStakePools: (context) => {
1993
+ return (0, rxjs.from)(getStakePoolProvider(getBlockfrostConfig(context, blockfrostConfigs), logger).getStakePools().then(require_asyncoption.Ok).catch(require_asyncoption.Err));
1994
+ }
1995
+ }
1996
+ };
1997
+ };
1998
+ //#endregion
1999
+ //#region ../../packages/module/cardano-provider-blockfrost/src/store/init.ts
2000
+ const redux = async (props, dependencies) => ({ sideEffectDependencies: await initializeDependencies(props, dependencies) });
2001
+ //#endregion
2002
+ exports.default = redux;