@lombard.finance/sdk 4.3.2 → 4.4.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 (224) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +6 -6
  4. package/dist/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.d.ts.map +1 -1
  5. package/dist/api-functions/getDepositBtcAddress/getDepositBtcAddress.d.ts.map +1 -1
  6. package/dist/api.cjs +1 -1
  7. package/dist/api.js +29 -29
  8. package/dist/bridge.cjs +1 -1
  9. package/dist/bridge.js +7 -7
  10. package/dist/btc.cjs +1 -1
  11. package/dist/btc.js +10 -10
  12. package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts +7 -4
  13. package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts.map +1 -1
  14. package/dist/chains/btc/actions/deposit/config/index.d.ts +16 -8
  15. package/dist/chains/btc/actions/deposit/config/index.d.ts.map +1 -1
  16. package/dist/chains/btc/actions/deposit/config/solana.d.ts +20 -0
  17. package/dist/chains/btc/actions/deposit/config/solana.d.ts.map +1 -0
  18. package/dist/chains/btc/actions/deposit/config/types.d.ts +4 -3
  19. package/dist/chains/btc/actions/deposit/config/types.d.ts.map +1 -1
  20. package/dist/chains/evm/EvmActions.d.ts +4 -4
  21. package/dist/chains/evm/actions/deposit/config/evm.d.ts +3 -3
  22. package/dist/chains/evm/actions/deposit/config/evm.d.ts.map +1 -1
  23. package/dist/chains/evm/actions/deposit/config/types.d.ts +1 -1
  24. package/dist/chains/evm/actions/deposit/config/types.d.ts.map +1 -1
  25. package/dist/chains/evm/actions/deposit/factory.d.ts +1 -1
  26. package/dist/chains/evm/actions/deposit/types.d.ts +1 -1
  27. package/dist/chains/evm/actions/deposit/types.d.ts.map +1 -1
  28. package/dist/chains/evm/actions/redeem/EvmRedeem.d.ts.map +1 -1
  29. package/dist/chains/evm/actions/unstake/EvmUnstake.d.ts.map +1 -1
  30. package/dist/chains/solana/SolanaActions.d.ts +10 -0
  31. package/dist/chains/solana/SolanaActions.d.ts.map +1 -1
  32. package/dist/chains/solana/actions/index.d.ts +1 -0
  33. package/dist/chains/solana/actions/index.d.ts.map +1 -1
  34. package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts +37 -0
  35. package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts.map +1 -0
  36. package/dist/chains/solana/actions/redeem/config/index.d.ts +8 -0
  37. package/dist/chains/solana/actions/redeem/config/index.d.ts.map +1 -0
  38. package/dist/chains/solana/actions/redeem/config/solana.d.ts +22 -0
  39. package/dist/chains/solana/actions/redeem/config/solana.d.ts.map +1 -0
  40. package/dist/chains/solana/actions/redeem/config/types.d.ts +35 -0
  41. package/dist/chains/solana/actions/redeem/config/types.d.ts.map +1 -0
  42. package/dist/chains/solana/actions/redeem/factory.d.ts +12 -0
  43. package/dist/chains/solana/actions/redeem/factory.d.ts.map +1 -0
  44. package/dist/chains/solana/actions/redeem/index.d.ts +9 -0
  45. package/dist/chains/solana/actions/redeem/index.d.ts.map +1 -0
  46. package/dist/chains/solana/actions/redeem/types.d.ts +52 -0
  47. package/dist/chains/solana/actions/redeem/types.d.ts.map +1 -0
  48. package/dist/chains/solana/utils.d.ts +15 -0
  49. package/dist/chains/solana/utils.d.ts.map +1 -0
  50. package/dist/chunks/BtcActions-BOVJrdTI.cjs +2 -0
  51. package/dist/chunks/BtcActions-BOVJrdTI.cjs.map +1 -0
  52. package/dist/chunks/{BtcActions-k-qs1uO0.js → BtcActions-_a8r3Q7c.js} +457 -414
  53. package/dist/chunks/BtcActions-_a8r3Q7c.js.map +1 -0
  54. package/dist/chunks/{EvmActions-B_dF42So.js → EvmActions-D4vFpbYk.js} +163 -173
  55. package/dist/chunks/EvmActions-D4vFpbYk.js.map +1 -0
  56. package/dist/chunks/EvmActions-VrDbgMDy.cjs +2 -0
  57. package/dist/chunks/EvmActions-VrDbgMDy.cjs.map +1 -0
  58. package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs +2 -0
  59. package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs.map +1 -0
  60. package/dist/chunks/{ReferralsClient-DbFWWtVi.js → ReferralsClient-DvEsA3II.js} +160 -160
  61. package/dist/chunks/ReferralsClient-DvEsA3II.js.map +1 -0
  62. package/dist/chunks/{api-config-CtcP3TVl.js → api-config-Dm6dR85f.js} +6 -6
  63. package/dist/chunks/{api-config-CtcP3TVl.js.map → api-config-Dm6dR85f.js.map} +1 -1
  64. package/dist/chunks/{approveLBTC-CZiZmdcX.cjs → approveLBTC-CUXEC3kw.cjs} +2 -2
  65. package/dist/chunks/{approveLBTC-CZiZmdcX.cjs.map → approveLBTC-CUXEC3kw.cjs.map} +1 -1
  66. package/dist/chunks/approveLBTC-Du2El1tW.js +26 -0
  67. package/dist/chunks/{approveLBTC-B5-ZWqct.js.map → approveLBTC-Du2El1tW.js.map} +1 -1
  68. package/dist/chunks/{array-Cev6kyLJ.js → array-DYttUPf5.js} +7 -7
  69. package/dist/chunks/{array-Cev6kyLJ.js.map → array-DYttUPf5.js.map} +1 -1
  70. package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs → blockchain-identifier-BTPGxLio.cjs} +2 -2
  71. package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs.map → blockchain-identifier-BTPGxLio.cjs.map} +1 -1
  72. package/dist/chunks/{blockchain-identifier-BmadkNtK.js → blockchain-identifier-CTVaEPpY.js} +24 -24
  73. package/dist/chunks/{blockchain-identifier-BmadkNtK.js.map → blockchain-identifier-CTVaEPpY.js.map} +1 -1
  74. package/dist/chunks/{bridge-CTsiodO1.js → bridge-DqGabhIY.js} +13 -13
  75. package/dist/chunks/{bridge-CTsiodO1.js.map → bridge-DqGabhIY.js.map} +1 -1
  76. package/dist/chunks/{bridge-BzRlY9pP.cjs → bridge-dWaKrMKm.cjs} +2 -2
  77. package/dist/chunks/{bridge-BzRlY9pP.cjs.map → bridge-dWaKrMKm.cjs.map} +1 -1
  78. package/dist/chunks/{config-hFKqUyg3.js → config-DghboRx0.js} +10 -10
  79. package/dist/chunks/{config-hFKqUyg3.js.map → config-DghboRx0.js.map} +1 -1
  80. package/dist/chunks/{config-l4ZaZw_g.cjs → config-DmCmanM_.cjs} +2 -2
  81. package/dist/chunks/{config-l4ZaZw_g.cjs.map → config-DmCmanM_.cjs.map} +1 -1
  82. package/dist/chunks/constants-D1FnS2Z8.js +6 -0
  83. package/dist/chunks/constants-D1FnS2Z8.js.map +1 -0
  84. package/dist/chunks/constants-ueShGH9R.cjs +2 -0
  85. package/dist/chunks/constants-ueShGH9R.cjs.map +1 -0
  86. package/dist/chunks/{defi-registry-BIRv_zkp.cjs → defi-registry-DDNavtO1.cjs} +2 -2
  87. package/dist/chunks/{defi-registry-BIRv_zkp.cjs.map → defi-registry-DDNavtO1.cjs.map} +1 -1
  88. package/dist/chunks/{defi-registry-wNFN3qyB.js → defi-registry-DxjjBQTV.js} +13 -13
  89. package/dist/chunks/{defi-registry-wNFN3qyB.js.map → defi-registry-DxjjBQTV.js.map} +1 -1
  90. package/dist/chunks/{depositStatus-DM7fRmbN.js → depositStatus-05_X7FVs.js} +42 -42
  91. package/dist/chunks/{depositStatus-DM7fRmbN.js.map → depositStatus-05_X7FVs.js.map} +1 -1
  92. package/dist/chunks/{depositStatus-C3-EgT2a.cjs → depositStatus-CUjHpXFJ.cjs} +2 -2
  93. package/dist/chunks/{depositStatus-C3-EgT2a.cjs.map → depositStatus-CUjHpXFJ.cjs.map} +1 -1
  94. package/dist/chunks/events-5c8IHjEF.cjs +2 -0
  95. package/dist/chunks/events-5c8IHjEF.cjs.map +1 -0
  96. package/dist/chunks/{events-DdV_xi-2.js → events-rgJZNpHd.js} +414 -303
  97. package/dist/chunks/events-rgJZNpHd.js.map +1 -0
  98. package/dist/chunks/evm-by-btc-address-CZvE15lx.js +39 -0
  99. package/dist/chunks/{evm-by-btc-address-CwLiENtM.js.map → evm-by-btc-address-CZvE15lx.js.map} +1 -1
  100. package/dist/chunks/fee-requirements-CCNsxAvJ.js +14 -0
  101. package/dist/chunks/{fee-requirements-x8-8mpJ7.js.map → fee-requirements-CCNsxAvJ.js.map} +1 -1
  102. package/dist/chunks/get-exchange-ratio-B-xzYND1.js +20 -0
  103. package/dist/chunks/{get-exchange-ratio-NtnkG1kZ.js.map → get-exchange-ratio-B-xzYND1.js.map} +1 -1
  104. package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs → get-exchange-ratio-BEhD4gLB.cjs} +2 -2
  105. package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs.map → get-exchange-ratio-BEhD4gLB.cjs.map} +1 -1
  106. package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs → get-positions-summary-Dh1QPLYO.cjs} +2 -2
  107. package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs.map → get-positions-summary-Dh1QPLYO.cjs.map} +1 -1
  108. package/dist/chunks/{get-positions-summary-B_MmGHLv.js → get-positions-summary-iYshN1RQ.js} +28 -28
  109. package/dist/chunks/{get-positions-summary-B_MmGHLv.js.map → get-positions-summary-iYshN1RQ.js.map} +1 -1
  110. package/dist/chunks/{get-vault-tvl-YAXePAW3.js → get-vault-tvl-Ct_Zkg7C.js} +41 -41
  111. package/dist/chunks/{get-vault-tvl-YAXePAW3.js.map → get-vault-tvl-Ct_Zkg7C.js.map} +1 -1
  112. package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs → get-vault-tvl-D_tQIDAs.cjs} +2 -2
  113. package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs.map → get-vault-tvl-D_tQIDAs.cjs.map} +1 -1
  114. package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs → get-vault-withdrawals-8ALlEiAC.cjs} +2 -2
  115. package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs.map → get-vault-withdrawals-8ALlEiAC.cjs.map} +1 -1
  116. package/dist/chunks/get-vault-withdrawals-jk7Sv4S4.js +161 -0
  117. package/dist/chunks/{get-vault-withdrawals-BrpZlt6s.js.map → get-vault-withdrawals-jk7Sv4S4.js.map} +1 -1
  118. package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs → getSharesByAddress-D8hehnP1.cjs} +2 -2
  119. package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs.map → getSharesByAddress-D8hehnP1.cjs.map} +1 -1
  120. package/dist/chunks/{getSharesByAddress-BiruCDp6.js → getSharesByAddress-_tBaIBsw.js} +38 -38
  121. package/dist/chunks/{getSharesByAddress-BiruCDp6.js.map → getSharesByAddress-_tBaIBsw.js.map} +1 -1
  122. package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs +2 -0
  123. package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs.map +1 -0
  124. package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js +125 -0
  125. package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js.map +1 -0
  126. package/dist/chunks/lbtc-addresses-D8MYCdsx.js +10 -0
  127. package/dist/chunks/{lbtc-addresses-BLRmtR3c.js.map → lbtc-addresses-D8MYCdsx.js.map} +1 -1
  128. package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs → lbtc-addresses-Kil252DX.cjs} +2 -2
  129. package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs.map → lbtc-addresses-Kil252DX.cjs.map} +1 -1
  130. package/dist/chunks/numbers-CclN2Ohk.js +15 -0
  131. package/dist/chunks/{numbers-CM-lcmt4.js.map → numbers-CclN2Ohk.js.map} +1 -1
  132. package/dist/chunks/parameters-C_16L5ft.js +11 -0
  133. package/dist/chunks/{parameters-CDV-6Hk5.js.map → parameters-C_16L5ft.js.map} +1 -1
  134. package/dist/chunks/satoshi-CSoJBXc6.js +19 -0
  135. package/dist/chunks/{satoshi-Ch6y8aYG.js.map → satoshi-CSoJBXc6.js.map} +1 -1
  136. package/dist/chunks/statusConstants-Cri7yswV.cjs +2 -0
  137. package/dist/chunks/statusConstants-Cri7yswV.cjs.map +1 -0
  138. package/dist/chunks/{statusConstants-DFxMrVob.js → statusConstants-Zii1786K.js} +1134 -1113
  139. package/dist/chunks/statusConstants-Zii1786K.js.map +1 -0
  140. package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js → storeNetworkFeeSignature-BODIpq3Y.js} +26 -26
  141. package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js.map → storeNetworkFeeSignature-BODIpq3Y.js.map} +1 -1
  142. package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs → storeNetworkFeeSignature-Buk4091C.cjs} +2 -2
  143. package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs.map → storeNetworkFeeSignature-Buk4091C.cjs.map} +1 -1
  144. package/dist/chunks/time-Sa5gggPG.js +24 -0
  145. package/dist/chunks/{time-QPeEEEnQ.js.map → time-Sa5gggPG.js.map} +1 -1
  146. package/dist/chunks/{token-addresses-FKpA3uc4.js → token-addresses-D0v5cR1j.js} +174 -163
  147. package/dist/chunks/{token-addresses-FKpA3uc4.js.map → token-addresses-D0v5cR1j.js.map} +1 -1
  148. package/dist/chunks/{token-addresses-DRBecUa7.cjs → token-addresses-nzvTOi24.cjs} +2 -2
  149. package/dist/chunks/{token-addresses-DRBecUa7.cjs.map → token-addresses-nzvTOi24.cjs.map} +1 -1
  150. package/dist/chunks/{tokens-D_HeVB5p.cjs → tokens-BkvA0Gp1.cjs} +2 -2
  151. package/dist/chunks/{tokens-D_HeVB5p.cjs.map → tokens-BkvA0Gp1.cjs.map} +1 -1
  152. package/dist/chunks/{tokens-C6qZHzph.js → tokens-DgC1hfkm.js} +18 -18
  153. package/dist/chunks/{tokens-C6qZHzph.js.map → tokens-DgC1hfkm.js.map} +1 -1
  154. package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs → unstakeLBTC-CmoCaGX9.cjs} +2 -2
  155. package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs.map → unstakeLBTC-CmoCaGX9.cjs.map} +1 -1
  156. package/dist/chunks/{unstakeLBTC-DAIR9NO_.js → unstakeLBTC-DtvVbpbU.js} +50 -50
  157. package/dist/chunks/{unstakeLBTC-DAIR9NO_.js.map → unstakeLBTC-DtvVbpbU.js.map} +1 -1
  158. package/dist/chunks/{withdraw-hHueI2p7.js → withdraw-DgjuaUN3.js} +45 -45
  159. package/dist/chunks/{withdraw-hHueI2p7.js.map → withdraw-DgjuaUN3.js.map} +1 -1
  160. package/dist/chunks/{withdraw-C1fMFSwy.cjs → withdraw-i0AueZ_C.cjs} +2 -2
  161. package/dist/chunks/{withdraw-C1fMFSwy.cjs.map → withdraw-i0AueZ_C.cjs.map} +1 -1
  162. package/dist/common/constants.d.ts +1 -0
  163. package/dist/common/constants.d.ts.map +1 -1
  164. package/dist/contracts.cjs +1 -1
  165. package/dist/contracts.js +16 -16
  166. package/dist/core/assets/catalog.d.ts.map +1 -1
  167. package/dist/core.cjs +1 -1
  168. package/dist/core.js +85 -85
  169. package/dist/debug.js +4 -4
  170. package/dist/defi.cjs +1 -1
  171. package/dist/defi.js +10 -10
  172. package/dist/evm.cjs +1 -1
  173. package/dist/evm.js +34 -34
  174. package/dist/index.cjs +1 -1
  175. package/dist/index.d.ts +2 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +287 -283
  178. package/dist/index.js.map +1 -1
  179. package/dist/metrics.cjs +1 -1
  180. package/dist/metrics.js +6 -6
  181. package/dist/stories/arg-types.d.ts +1 -0
  182. package/dist/stories/arg-types.d.ts.map +1 -1
  183. package/dist/tokens/token-addresses.d.ts +2 -2
  184. package/dist/tokens/token-addresses.d.ts.map +1 -1
  185. package/dist/utils/chain.d.ts +7 -0
  186. package/dist/utils/chain.d.ts.map +1 -1
  187. package/dist/utils.cjs +1 -1
  188. package/dist/utils.js +76 -76
  189. package/dist/vaults.cjs +1 -1
  190. package/dist/vaults.js +14 -14
  191. package/package.json +19 -6
  192. package/dist/chunks/BtcActions-XbVRQEcM.cjs +0 -2
  193. package/dist/chunks/BtcActions-XbVRQEcM.cjs.map +0 -1
  194. package/dist/chunks/BtcActions-k-qs1uO0.js.map +0 -1
  195. package/dist/chunks/EvmActions-BVzQ3fLK.cjs +0 -2
  196. package/dist/chunks/EvmActions-BVzQ3fLK.cjs.map +0 -1
  197. package/dist/chunks/EvmActions-B_dF42So.js.map +0 -1
  198. package/dist/chunks/ReferralsClient-BC-1wT1q.cjs +0 -2
  199. package/dist/chunks/ReferralsClient-BC-1wT1q.cjs.map +0 -1
  200. package/dist/chunks/ReferralsClient-DbFWWtVi.js.map +0 -1
  201. package/dist/chunks/approveLBTC-B5-ZWqct.js +0 -26
  202. package/dist/chunks/constants-BBK-JNcY.cjs +0 -2
  203. package/dist/chunks/constants-BBK-JNcY.cjs.map +0 -1
  204. package/dist/chunks/constants-CuT4axsy.js +0 -5
  205. package/dist/chunks/constants-CuT4axsy.js.map +0 -1
  206. package/dist/chunks/events-DdV_xi-2.js.map +0 -1
  207. package/dist/chunks/events-DqIJRzJo.cjs +0 -2
  208. package/dist/chunks/events-DqIJRzJo.cjs.map +0 -1
  209. package/dist/chunks/evm-by-btc-address-CwLiENtM.js +0 -39
  210. package/dist/chunks/fee-requirements-x8-8mpJ7.js +0 -14
  211. package/dist/chunks/get-exchange-ratio-NtnkG1kZ.js +0 -20
  212. package/dist/chunks/get-vault-withdrawals-BrpZlt6s.js +0 -161
  213. package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs +0 -2
  214. package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs.map +0 -1
  215. package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js +0 -120
  216. package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js.map +0 -1
  217. package/dist/chunks/lbtc-addresses-BLRmtR3c.js +0 -10
  218. package/dist/chunks/numbers-CM-lcmt4.js +0 -15
  219. package/dist/chunks/parameters-CDV-6Hk5.js +0 -11
  220. package/dist/chunks/satoshi-Ch6y8aYG.js +0 -19
  221. package/dist/chunks/statusConstants-BLiNBT6s.cjs +0 -2
  222. package/dist/chunks/statusConstants-BLiNBT6s.cjs.map +0 -1
  223. package/dist/chunks/statusConstants-DFxMrVob.js.map +0 -1
  224. package/dist/chunks/time-QPeEEEnQ.js +0 -24
@@ -1 +0,0 @@
1
- {"version":3,"file":"statusConstants-BLiNBT6s.cjs","sources":["../../src/version.ts","../../src/shared/errors.ts","../../src/core/chains/types.ts","../../src/core/chains/catalog.ts","../../src/core/chains/utils.ts","../../src/core/assets/catalog.ts","../../src/core/assets/utils.ts","../../src/client/PartnerConfiguration.ts","../../src/config/types.ts","../../src/modules/CapabilityRegistry.ts","../../src/shared/context/ContextBuilder.ts","../../src/core/types.ts","../../../../node_modules/zod/v3/helpers/util.js","../../../../node_modules/zod/v3/ZodError.js","../../../../node_modules/zod/v3/locales/en.js","../../../../node_modules/zod/v3/errors.js","../../../../node_modules/zod/v3/helpers/parseUtil.js","../../../../node_modules/zod/v3/helpers/errorUtil.js","../../../../node_modules/zod/v3/types.js","../../src/shared/monitoring/createEventEmitter.ts","../../src/shared/actions/BaseAction.ts","../../src/shared/validation/index.ts","../../src/shared/constants/statusConstants.ts"],"sourcesContent":["/**\n * SDK Version and Metadata\n *\n * Provides SDK version information for:\n * - HTTP request headers (X-SDK-Version)\n * - Error context for debugging\n * - User-agent identification\n *\n * The SDK_VERSION is injected at build time by Vite's `define` config.\n * In development/tests, it falls back to 'development'.\n *\n * @module version\n */\n\n/**\n * SDK version string\n *\n * Injected at build time from package.json via Vite define.\n * Format: semver (e.g., \"3.7.4\")\n *\n * @example\n * ```typescript\n * import { SDK_VERSION } from '@lombard.finance/sdk';\n * console.log(`Using Lombard SDK v${SDK_VERSION}`);\n * ```\n */\ndeclare const __SDK_VERSION__: string;\nexport const SDK_VERSION: string =\n typeof __SDK_VERSION__ !== 'undefined' ? __SDK_VERSION__ : 'development';\n\n/**\n * SDK package name\n *\n * The npm package name for the SDK.\n */\nexport const SDK_NAME = '@lombard.finance/sdk';\n\n/**\n * SDK runtime environment\n *\n * Detects whether running in browser, Node.js, or unknown environment.\n */\nexport const SDK_RUNTIME: 'browser' | 'node' | 'unknown' = (() => {\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'browser';\n }\n if (\n typeof process !== 'undefined' &&\n process.versions &&\n process.versions.node\n ) {\n return 'node';\n }\n return 'unknown';\n})();\n\n","/**\n * Error handling for the Lombard SDK\n *\n * This module defines a comprehensive error system with:\n * - Type-safe error codes\n * - Rich metadata support\n * - Factory methods for common errors\n * - JSON serialization for logging\n * - SDK version for debugging\n * - Sentry-compatible context extraction\n */\n\nimport { SDK_VERSION } from '../version';\n\n/**\n * General error codes\n */\nexport enum ErrorCode {\n UNKNOWN_ERROR = 'unknown-error',\n INVALID_CONFIGURATION = 'invalid-configuration',\n OPERATION_TIMEOUT = 'operation-timeout',\n OPERATION_CANCELLED = 'operation-cancelled',\n}\n\n/**\n * Provider-related error codes\n */\nexport enum ProviderErrorCode {\n PROVIDER_MISSING = 'provider-missing',\n PROVIDER_INITIALIZATION_FAILED = 'provider-initialization-failed',\n PROVIDER_CALL_FAILED = 'provider-call-failed',\n SIGNER_MISSING = 'signer-missing',\n USER_REJECTED = 'user-rejected',\n NETWORK_MISMATCH = 'network-mismatch',\n}\n\n/**\n * Registry-related error codes\n */\nexport enum RegistryErrorCode {\n ROUTE_NOT_FOUND = 'route-not-found',\n INVALID_ROUTE_DEFINITION = 'invalid-route-definition',\n UNSUPPORTED_CHAIN = 'unsupported-chain',\n UNSUPPORTED_ASSET = 'unsupported-asset',\n INCOMPATIBLE_ROUTE = 'incompatible-route',\n ENVIRONMENT_MISMATCH = 'environment-mismatch',\n}\n\n/**\n * Validation error codes\n */\nexport enum ValidationErrorCode {\n INVALID_ADDRESS = 'invalid-address',\n INVALID_AMOUNT = 'invalid-amount',\n AMOUNT_TOO_SMALL = 'amount-too-small',\n AMOUNT_TOO_LARGE = 'amount-too-large',\n INSUFFICIENT_BALANCE = 'insufficient-balance',\n INVALID_PARAMETER = 'invalid-parameter',\n MISSING_REQUIRED_PARAMETER = 'missing-required-parameter',\n INVALID_CHAIN = 'invalid-chain',\n INVALID_STATE = 'invalid-state',\n INVALID_ASSET = 'invalid-asset',\n}\n\n/**\n * Contract interaction error codes\n */\nexport enum ContractErrorCode {\n CONTRACT_CALL_FAILED = 'contract-call-failed',\n TRANSACTION_FAILED = 'transaction-failed',\n TRANSACTION_REVERTED = 'transaction-reverted',\n APPROVAL_FAILED = 'approval-failed',\n INSUFFICIENT_ALLOWANCE = 'insufficient-allowance',\n GAS_ESTIMATION_FAILED = 'gas-estimation-failed',\n}\n\n/**\n * Vault withdraw error codes\n */\nexport enum WithdrawErrorCode {\n INSUFFICIENT_SHARES = 'withdraw-insufficient-shares',\n INVALID_AMOUNT = 'withdraw-invalid-amount',\n NO_PENDING_WITHDRAWAL = 'withdraw-no-pending',\n WITHDRAWAL_ALREADY_FULFILLED = 'withdraw-already-fulfilled',\n WITHDRAWAL_EXPIRED = 'withdraw-expired',\n WITHDRAWAL_NOT_FOUND = 'withdraw-not-found',\n PROTOCOL_NOT_SUPPORTED = 'withdraw-protocol-not-supported',\n INSUFFICIENT_LIQUIDITY = 'withdraw-insufficient-liquidity',\n}\n\n/**\n * Union type of all error codes\n */\nexport type AnyErrorCode =\n | ErrorCode\n | ProviderErrorCode\n | RegistryErrorCode\n | ValidationErrorCode\n | ContractErrorCode\n | WithdrawErrorCode;\n\n/**\n * Lombard SDK Error class\n *\n * Custom error class that extends Error with additional properties:\n * - Machine-readable error code\n * - Rich metadata for debugging\n * - JSON serialization support\n *\n * @example\n * ```typescript\n * throw new LombardError(\n * ProviderErrorCode.PROVIDER_MISSING,\n * 'EVM provider not configured',\n * { chain: 'ethereum', requiredProvider: 'evm' }\n * );\n * ```\n */\nexport class LombardError extends Error {\n /** Machine-readable error code */\n public readonly code: AnyErrorCode;\n\n /** Additional metadata for debugging */\n public readonly metadata?: Record<string, unknown>;\n\n /** SDK version when error occurred (for debugging) */\n public readonly sdkVersion: string = SDK_VERSION;\n\n /** Timestamp when error occurred */\n public readonly timestamp: string = new Date().toISOString();\n\n constructor(\n code: AnyErrorCode,\n message: string,\n metadata?: Record<string, unknown>,\n ) {\n super(message);\n this.name = 'LombardError';\n this.code = code;\n this.metadata = metadata;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, LombardError);\n }\n }\n\n /**\n * Serialize error to JSON for logging\n *\n * Includes all context needed for debugging: code, message, metadata,\n * SDK version, timestamp, and stack trace.\n *\n * @example\n * ```typescript\n * try {\n * await action.execute();\n * } catch (error) {\n * if (error instanceof LombardError) {\n * console.log(JSON.stringify(error.toJSON(), null, 2));\n * }\n * }\n * ```\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n sdkVersion: this.sdkVersion,\n timestamp: this.timestamp,\n ...(this.metadata && { metadata: this.metadata }),\n ...(this.stack && { stack: this.stack }),\n };\n }\n\n /**\n * Get Sentry-compatible context for error reporting\n *\n * Returns an object suitable for Sentry's `extra` or `contexts` fields.\n *\n * @example\n * ```typescript\n * try {\n * await action.execute();\n * } catch (error) {\n * if (error instanceof LombardError) {\n * Sentry.captureException(error, {\n * contexts: { lombard: error.toSentryContext() },\n * });\n * }\n * }\n * ```\n */\n toSentryContext(): Record<string, unknown> {\n return {\n 'sdk.version': this.sdkVersion,\n 'error.code': this.code,\n 'error.timestamp': this.timestamp,\n ...this.metadata,\n };\n }\n\n /**\n * Factory: Invalid configuration error\n */\n static invalidConfiguration(message: string): LombardError {\n return new LombardError(ErrorCode.INVALID_CONFIGURATION, message);\n }\n\n /**\n * Factory: Provider missing error\n */\n static providerMissing(chain: string, providerType: string): LombardError {\n return new LombardError(\n ProviderErrorCode.PROVIDER_MISSING,\n `${providerType} provider not configured for chain ${chain}. Please provide a provider via SDK initialization.`,\n { chain, providerType },\n );\n }\n\n static moduleMissing(moduleId: string): LombardError {\n return new LombardError(\n ValidationErrorCode.INVALID_PARAMETER,\n `Module \"${moduleId}\" is not registered. Install and register the corresponding package via createConfig({ modules: [...] }).`,\n { moduleId },\n );\n }\n\n /**\n * Factory: Provider call failed error\n */\n static providerCallFailed(\n method: string,\n cause: Error | string,\n ): LombardError {\n const causeMessage = cause instanceof Error ? cause.message : cause;\n return new LombardError(\n ProviderErrorCode.PROVIDER_CALL_FAILED,\n `Provider method ${method} failed: ${causeMessage}`,\n { method, cause: causeMessage },\n );\n }\n\n /**\n * Factory: User rejected transaction\n */\n static userRejected(operation: string): LombardError {\n return new LombardError(\n ProviderErrorCode.USER_REJECTED,\n `User rejected ${operation}. Please try again and approve the transaction in your wallet.`,\n { operation },\n );\n }\n\n /**\n * Factory: Route not found in registry\n */\n static routeNotFound(params: Record<string, unknown>): LombardError {\n return new LombardError(\n RegistryErrorCode.ROUTE_NOT_FOUND,\n 'No route found matching the provided parameters. Please verify the asset and chain combination is supported.',\n params,\n );\n }\n\n /**\n * Factory: Invalid route definition\n */\n static invalidRouteDefinition(reason: string): LombardError {\n return new LombardError(\n RegistryErrorCode.INVALID_ROUTE_DEFINITION,\n `Invalid route definition: ${reason}`,\n { reason },\n );\n }\n\n /**\n * Factory: Unsupported chain\n */\n static unsupportedChain(chain: string): LombardError {\n return new LombardError(\n RegistryErrorCode.UNSUPPORTED_CHAIN,\n `Chain ${chain} is not supported in the current environment.`,\n { chain },\n );\n }\n\n /**\n * Factory: Invalid parameter\n */\n static invalidParameter(parameter: string, reason: string): LombardError {\n return new LombardError(ValidationErrorCode.INVALID_PARAMETER, reason, {\n parameter,\n });\n }\n\n /**\n * Factory: Invalid address\n */\n static invalidAddress(address: string, chain?: string): LombardError {\n return new LombardError(\n ValidationErrorCode.INVALID_ADDRESS,\n `Invalid address format: ${address}${chain ? ` for chain ${chain}` : ''}`,\n { address, chain },\n );\n }\n\n /**\n * Factory: Invalid amount\n */\n static invalidAmount(reason: string): LombardError {\n return new LombardError(ValidationErrorCode.INVALID_AMOUNT, reason, {\n reason,\n });\n }\n\n /**\n * Factory: Amount too small\n */\n static amountTooSmall(\n amount: string,\n minimum: string,\n asset: string,\n ): LombardError {\n return new LombardError(\n ValidationErrorCode.AMOUNT_TOO_SMALL,\n `Amount ${amount} is below minimum ${minimum} ${asset}`,\n { amount, minimum, asset },\n );\n }\n\n /**\n * Factory: Insufficient balance\n */\n static insufficientBalance(\n required: string,\n available: string,\n asset: string,\n ): LombardError {\n return new LombardError(\n ValidationErrorCode.INSUFFICIENT_BALANCE,\n `Insufficient ${asset} balance. Required: ${required}, Available: ${available}`,\n { required, available, asset },\n );\n }\n\n /**\n * Factory: Missing required parameter\n */\n static missingParameter(parameterName: string): LombardError {\n return new LombardError(\n ValidationErrorCode.MISSING_REQUIRED_PARAMETER,\n `Required parameter \"${parameterName}\" is missing`,\n { parameterName },\n );\n }\n\n /**\n * Factory: Transaction failed\n */\n static transactionFailed(txHash: string, reason: string): LombardError {\n return new LombardError(\n ContractErrorCode.TRANSACTION_FAILED,\n `Transaction failed: ${reason}`,\n { txHash, reason },\n );\n }\n\n /**\n * Factory: Transaction reverted\n */\n static transactionReverted(\n txHash: string,\n revertReason?: string,\n ): LombardError {\n return new LombardError(\n ContractErrorCode.TRANSACTION_REVERTED,\n `Transaction reverted${revertReason ? `: ${revertReason}` : ''}`,\n { txHash, revertReason },\n );\n }\n\n /**\n * Factory: Approval failed\n */\n static approvalFailed(token: string, spender: string): LombardError {\n return new LombardError(\n ContractErrorCode.APPROVAL_FAILED,\n `Failed to approve ${token} for spender ${spender}`,\n { token, spender },\n );\n }\n}\n\n/**\n * Type guard to check if an error is a LombardError\n */\nexport function isLombardError(error: unknown): error is LombardError {\n return error instanceof LombardError;\n}\n\n/**\n * Helper to wrap unknown errors as LombardError\n */\nexport function wrapError(error: unknown): LombardError {\n if (isLombardError(error)) {\n return error;\n }\n\n if (error instanceof Error) {\n return new LombardError(ErrorCode.UNKNOWN_ERROR, error.message, {\n originalError: error.stack,\n });\n }\n\n return new LombardError(ErrorCode.UNKNOWN_ERROR, String(error), {\n originalValue: error,\n });\n}\n","/**\n * Chain Types\n *\n * Type definitions and constants for chains.\n *\n * @module core/chains/types\n */\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Chain Prefixes (CAIP-2 namespaces)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * CAIP-2 namespace prefixes for chain identification.\n *\n * Official namespaces (registered with ChainAgnostic):\n * - EIP155: EVM-compatible chains\n * - BIP122: Bitcoin and Bitcoin-derived chains (uses genesis block hash as reference)\n * - SOLANA: Solana blockchain\n * - STARKNET: Starknet L2\n *\n * Unofficial namespaces (not yet registered, used for internal identification):\n * - SUI: Sui blockchain (proposal pending)\n * - ZCASH, RIPPLE, DOGECOIN, HYPERLIQUID: Internal use only\n *\n * @see https://chainagnostic.org/CAIPs/caip-2\n * @see https://namespaces.chainagnostic.org\n */\nexport const CHAIN_PREFIXES = {\n // Official CAIP-2 namespaces\n BIP122: 'bip122',\n EIP155: 'eip155',\n SOLANA: 'solana',\n STARKNET: 'starknet',\n\n // Unofficial namespaces (internal use)\n SUI: 'sui',\n ZCASH: 'zcash',\n RIPPLE: 'ripple',\n DOGECOIN: 'dogecoin',\n HYPERLIQUID: 'hyperliquid',\n} as const;\n\n/** CAIP-2 separator between namespace and reference */\nexport const CAIP2_SEPARATOR = ':' as const;\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Chain Constants\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** Helper to construct CAIP-2 identifier */\nconst caip2 = (prefix: string, reference: string | number) =>\n `${prefix}${CAIP2_SEPARATOR}${reference}` as const;\n\n/**\n * Canonical chain identifiers using CAIP-2 format.\n */\nexport const Chain = {\n // Bitcoin chains (BIP122: first 32 chars of genesis block hash in little-endian)\n BITCOIN_MAINNET: caip2(\n CHAIN_PREFIXES.BIP122,\n '000000000019d6689c085ae165831e93',\n ),\n BITCOIN_SIGNET: caip2(\n CHAIN_PREFIXES.BIP122,\n '00000008819873e925422c1ff0f99f7c',\n ),\n\n // EVM chains (EIP155: numeric chain ID)\n ETHEREUM: caip2(CHAIN_PREFIXES.EIP155, 1),\n BASE: caip2(CHAIN_PREFIXES.EIP155, 8453),\n BASE_SEPOLIA: caip2(CHAIN_PREFIXES.EIP155, 84532),\n OPTIMISM: caip2(CHAIN_PREFIXES.EIP155, 10),\n POLYGON: caip2(CHAIN_PREFIXES.EIP155, 137),\n BSC: caip2(CHAIN_PREFIXES.EIP155, 56),\n BSC_TESTNET: caip2(CHAIN_PREFIXES.EIP155, 97),\n AVALANCHE: caip2(CHAIN_PREFIXES.EIP155, 43114),\n AVALANCHE_FUJI: caip2(CHAIN_PREFIXES.EIP155, 43113),\n BERACHAIN: caip2(CHAIN_PREFIXES.EIP155, 80094),\n BERACHAIN_BARTIO: caip2(CHAIN_PREFIXES.EIP155, 80084),\n BOB: caip2(CHAIN_PREFIXES.EIP155, 60808),\n CORN: caip2(CHAIN_PREFIXES.EIP155, 21000000),\n ETHERLINK: caip2(CHAIN_PREFIXES.EIP155, 42793),\n KATANA: caip2(CHAIN_PREFIXES.EIP155, 747474),\n MORPH: caip2(CHAIN_PREFIXES.EIP155, 2818),\n SONIC: caip2(CHAIN_PREFIXES.EIP155, 146),\n SONIC_TESTNET: caip2(CHAIN_PREFIXES.EIP155, 57054),\n SONIC_BLAZE_TESTNET: caip2(CHAIN_PREFIXES.EIP155, 57054), // Alias\n SWELL: caip2(CHAIN_PREFIXES.EIP155, 1923),\n TAC: caip2(CHAIN_PREFIXES.EIP155, 239),\n SEPOLIA: caip2(CHAIN_PREFIXES.EIP155, 11155111),\n HOLESKY: caip2(CHAIN_PREFIXES.EIP155, 17000),\n MEGAETH: caip2(CHAIN_PREFIXES.EIP155, 4326),\n MONAD: caip2(CHAIN_PREFIXES.EIP155, 143),\n STABLE: caip2(CHAIN_PREFIXES.EIP155, 988),\n\n // Solana chains (first 32 chars of genesis hash)\n SOLANA_MAINNET: caip2(\n CHAIN_PREFIXES.SOLANA,\n '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n ),\n SOLANA_DEVNET: caip2(\n CHAIN_PREFIXES.SOLANA,\n 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n ),\n SOLANA_TESTNET: caip2(\n CHAIN_PREFIXES.SOLANA,\n '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n ),\n\n // Sui chains (unofficial namespace, using cluster names)\n SUI_MAINNET: caip2(CHAIN_PREFIXES.SUI, 'mainnet'),\n SUI_TESTNET: caip2(CHAIN_PREFIXES.SUI, 'testnet'),\n SUI_DEVNET: caip2(CHAIN_PREFIXES.SUI, 'devnet'),\n\n // Starknet chains (uses network identifiers)\n STARKNET_MAINNET: caip2(CHAIN_PREFIXES.STARKNET, 'SN_MAIN'),\n STARKNET_SEPOLIA: caip2(CHAIN_PREFIXES.STARKNET, 'SN_SEPOLIA'),\n\n // Zcash (unofficial namespace)\n ZCASH_MAINNET: caip2(CHAIN_PREFIXES.ZCASH, 'mainnet'),\n ZCASH_TESTNET: caip2(CHAIN_PREFIXES.ZCASH, 'testnet'),\n\n // Ripple (unofficial namespace)\n RIPPLE_MAINNET: caip2(CHAIN_PREFIXES.RIPPLE, 'mainnet'),\n RIPPLE_TESTNET: caip2(CHAIN_PREFIXES.RIPPLE, 'testnet'),\n\n // Dogecoin (unofficial namespace)\n DOGECOIN_MAINNET: caip2(CHAIN_PREFIXES.DOGECOIN, 'mainnet'),\n DOGECOIN_TESTNET: caip2(CHAIN_PREFIXES.DOGECOIN, 'testnet'),\n\n // Custodial (unofficial namespace)\n HYPERLIQUID: caip2(CHAIN_PREFIXES.HYPERLIQUID, 'mainnet'),\n} as const;\n\nexport type Chain = (typeof Chain)[keyof typeof Chain];\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Metadata Types\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport type ChainType =\n | 'bitcoin'\n | 'evm'\n | 'solana'\n | 'sui'\n | 'starknet'\n | 'zcash'\n | 'ripple'\n | 'dogecoin'\n | 'hyperliquid';\n\nexport interface ChainMetadata {\n /** Human-readable chain name */\n name: string;\n /** Chain type/ecosystem */\n type: ChainType;\n /** Whether this is a testnet/devnet */\n isTestnet: boolean;\n /** Block explorer URL */\n explorerUrl?: string;\n /** Native currency symbol */\n nativeCurrency?: string;\n /** UI badge variant */\n badgeVariant:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info';\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Type Utilities\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** Convert Chain value to its key name */\nexport function chainValueToKey(value: string): string {\n return (\n Object.keys(Chain).find(\n key => Chain[key as keyof typeof Chain] === value,\n ) ?? ''\n );\n}\n\n/** Type guard to check if a value is a valid Chain */\nexport function isChain(value: unknown): value is Chain {\n return (\n typeof value === 'string' && Object.values(Chain).includes(value as Chain)\n );\n}\n","/**\n * Chain Catalog\n *\n * Complete metadata for all chains.\n *\n * @module core/chains/catalog\n */\n\nimport { Chain, ChainMetadata } from './types';\n\n/**\n * Chain catalog with metadata for all chains.\n * TypeScript will error if any Chain is missing.\n */\nexport const CHAIN_CATALOG: Record<Chain, ChainMetadata> = {\n // ─────────────────────────────────────────────────────────────────────────\n // Bitcoin\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.BITCOIN_MAINNET]: {\n name: 'Bitcoin',\n type: 'bitcoin',\n isTestnet: false,\n explorerUrl: 'https://mempool.space',\n nativeCurrency: 'BTC',\n badgeVariant: 'warning',\n },\n [Chain.BITCOIN_SIGNET]: {\n name: 'Bitcoin Signet',\n type: 'bitcoin',\n isTestnet: true,\n explorerUrl: 'https://mempool.space/signet',\n nativeCurrency: 'BTC',\n badgeVariant: 'warning',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // EVM Mainnets\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.ETHEREUM]: {\n name: 'Ethereum',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://etherscan.io',\n nativeCurrency: 'ETH',\n badgeVariant: 'info',\n },\n [Chain.BASE]: {\n name: 'Base',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://basescan.org',\n nativeCurrency: 'ETH',\n badgeVariant: 'info',\n },\n [Chain.OPTIMISM]: {\n name: 'Optimism',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://optimistic.etherscan.io',\n nativeCurrency: 'ETH',\n badgeVariant: 'info',\n },\n [Chain.POLYGON]: {\n name: 'Polygon',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://polygonscan.com',\n nativeCurrency: 'MATIC',\n badgeVariant: 'info',\n },\n [Chain.BSC]: {\n name: 'BNB Chain',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://bscscan.com',\n nativeCurrency: 'BNB',\n badgeVariant: 'info',\n },\n [Chain.AVALANCHE]: {\n name: 'Avalanche',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://snowtrace.io',\n nativeCurrency: 'AVAX',\n badgeVariant: 'info',\n },\n [Chain.BERACHAIN]: {\n name: 'Berachain',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://beratrail.io',\n nativeCurrency: 'BERA',\n badgeVariant: 'info',\n },\n [Chain.BOB]: {\n name: 'BOB',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://explorer.gobob.xyz',\n nativeCurrency: 'ETH',\n badgeVariant: 'info',\n },\n [Chain.CORN]: {\n name: 'Corn',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://cornscan.io',\n nativeCurrency: 'BTCN',\n badgeVariant: 'info',\n },\n [Chain.ETHERLINK]: {\n name: 'Etherlink',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://explorer.etherlink.com',\n nativeCurrency: 'XTZ',\n badgeVariant: 'info',\n },\n [Chain.KATANA]: {\n name: 'Katana',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://explorer.katanarpc.com',\n nativeCurrency: 'BTC.b',\n badgeVariant: 'info',\n },\n [Chain.MORPH]: {\n name: 'Morph',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://explorer.morphl2.io',\n nativeCurrency: 'ETH',\n badgeVariant: 'info',\n },\n [Chain.SONIC]: {\n name: 'Sonic',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://sonicscan.org',\n nativeCurrency: 'S',\n badgeVariant: 'info',\n },\n [Chain.SWELL]: {\n name: 'Swell',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://explorer.swellnetwork.io',\n nativeCurrency: 'ETH',\n badgeVariant: 'info',\n },\n [Chain.TAC]: {\n name: 'TAC',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://explorer.tac.build',\n nativeCurrency: 'TAC',\n badgeVariant: 'info',\n },\n [Chain.MEGAETH]: {\n name: 'MegaETH',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://megaeth.blockscout.com',\n nativeCurrency: 'ETH',\n badgeVariant: 'info',\n },\n [Chain.MONAD]: {\n name: 'Monad',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://monadvision.com',\n nativeCurrency: 'MONAD',\n badgeVariant: 'info',\n },\n [Chain.STABLE]: {\n name: 'Stable',\n type: 'evm',\n isTestnet: false,\n explorerUrl: 'https://stablescan.xyz',\n nativeCurrency: 'USD',\n badgeVariant: 'info',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // EVM Testnets\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.BASE_SEPOLIA]: {\n name: 'Base Sepolia',\n type: 'evm',\n isTestnet: true,\n explorerUrl: 'https://sepolia.basescan.org',\n nativeCurrency: 'ETH',\n badgeVariant: 'secondary',\n },\n [Chain.BSC_TESTNET]: {\n name: 'BNB Testnet',\n type: 'evm',\n isTestnet: true,\n explorerUrl: 'https://testnet.bscscan.com',\n nativeCurrency: 'BNB',\n badgeVariant: 'secondary',\n },\n [Chain.AVALANCHE_FUJI]: {\n name: 'Avalanche Fuji',\n type: 'evm',\n isTestnet: true,\n explorerUrl: 'https://testnet.snowtrace.io',\n nativeCurrency: 'AVAX',\n badgeVariant: 'secondary',\n },\n [Chain.BERACHAIN_BARTIO]: {\n name: 'Berachain Bartio',\n type: 'evm',\n isTestnet: true,\n explorerUrl: 'https://bartio.beratrail.io',\n nativeCurrency: 'BERA',\n badgeVariant: 'secondary',\n },\n // Note: SONIC_TESTNET and SONIC_BLAZE_TESTNET are the same chain (eip155:57054)\n [Chain.SONIC_TESTNET]: {\n name: 'Sonic Blaze Testnet',\n type: 'evm',\n isTestnet: true,\n explorerUrl: 'https://testnet.sonicscan.org',\n nativeCurrency: 'S',\n badgeVariant: 'secondary',\n },\n [Chain.SEPOLIA]: {\n name: 'Sepolia',\n type: 'evm',\n isTestnet: true,\n explorerUrl: 'https://sepolia.etherscan.io',\n nativeCurrency: 'ETH',\n badgeVariant: 'secondary',\n },\n [Chain.HOLESKY]: {\n name: 'Holesky',\n type: 'evm',\n isTestnet: true,\n explorerUrl: 'https://holesky.etherscan.io',\n nativeCurrency: 'ETH',\n badgeVariant: 'secondary',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // Solana\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.SOLANA_MAINNET]: {\n name: 'Solana',\n type: 'solana',\n isTestnet: false,\n explorerUrl: 'https://solscan.io',\n nativeCurrency: 'SOL',\n badgeVariant: 'success',\n },\n [Chain.SOLANA_DEVNET]: {\n name: 'Solana Devnet',\n type: 'solana',\n isTestnet: true,\n explorerUrl: 'https://solscan.io?cluster=devnet',\n nativeCurrency: 'SOL',\n badgeVariant: 'secondary',\n },\n [Chain.SOLANA_TESTNET]: {\n name: 'Solana Testnet',\n type: 'solana',\n isTestnet: true,\n explorerUrl: 'https://solscan.io?cluster=testnet',\n nativeCurrency: 'SOL',\n badgeVariant: 'secondary',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // Sui\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.SUI_MAINNET]: {\n name: 'Sui',\n type: 'sui',\n isTestnet: false,\n explorerUrl: 'https://suiscan.xyz',\n nativeCurrency: 'SUI',\n badgeVariant: 'info',\n },\n [Chain.SUI_TESTNET]: {\n name: 'Sui Testnet',\n type: 'sui',\n isTestnet: true,\n explorerUrl: 'https://suiscan.xyz/testnet',\n nativeCurrency: 'SUI',\n badgeVariant: 'secondary',\n },\n [Chain.SUI_DEVNET]: {\n name: 'Sui Devnet',\n type: 'sui',\n isTestnet: true,\n explorerUrl: 'https://suiscan.xyz/devnet',\n nativeCurrency: 'SUI',\n badgeVariant: 'secondary',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // Starknet\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.STARKNET_MAINNET]: {\n name: 'Starknet',\n type: 'starknet',\n isTestnet: false,\n explorerUrl: 'https://starkscan.co',\n nativeCurrency: 'ETH',\n badgeVariant: 'info',\n },\n [Chain.STARKNET_SEPOLIA]: {\n name: 'Starknet Sepolia',\n type: 'starknet',\n isTestnet: true,\n explorerUrl: 'https://sepolia.starkscan.co',\n nativeCurrency: 'ETH',\n badgeVariant: 'secondary',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // Zcash\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.ZCASH_MAINNET]: {\n name: 'Zcash',\n type: 'zcash',\n isTestnet: false,\n explorerUrl: 'https://zcashblockexplorer.com',\n nativeCurrency: 'ZEC',\n badgeVariant: 'warning',\n },\n [Chain.ZCASH_TESTNET]: {\n name: 'Zcash Testnet',\n type: 'zcash',\n isTestnet: true,\n nativeCurrency: 'ZEC',\n badgeVariant: 'secondary',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // Ripple\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.RIPPLE_MAINNET]: {\n name: 'XRP Ledger',\n type: 'ripple',\n isTestnet: false,\n explorerUrl: 'https://xrpscan.com',\n nativeCurrency: 'XRP',\n badgeVariant: 'secondary',\n },\n [Chain.RIPPLE_TESTNET]: {\n name: 'XRP Testnet',\n type: 'ripple',\n isTestnet: true,\n nativeCurrency: 'XRP',\n badgeVariant: 'secondary',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // Dogecoin\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.DOGECOIN_MAINNET]: {\n name: 'Dogecoin',\n type: 'dogecoin',\n isTestnet: false,\n explorerUrl: 'https://dogechain.info',\n nativeCurrency: 'DOGE',\n badgeVariant: 'warning',\n },\n [Chain.DOGECOIN_TESTNET]: {\n name: 'Dogecoin Testnet',\n type: 'dogecoin',\n isTestnet: true,\n nativeCurrency: 'DOGE',\n badgeVariant: 'secondary',\n },\n\n // ─────────────────────────────────────────────────────────────────────────\n // Other\n // ─────────────────────────────────────────────────────────────────────────\n [Chain.HYPERLIQUID]: {\n name: 'Hyperliquid',\n type: 'hyperliquid',\n isTestnet: false,\n nativeCurrency: 'USDC',\n badgeVariant: 'secondary',\n },\n};\n","/**\n * Chain Query Functions\n *\n * Utility functions for querying the chain catalog.\n *\n * @module core/chains/utils\n */\n\nimport {\n ChainId,\n isSolanaChain,\n isSuiChain,\n isValidChain,\n SOLANA_DEVNET_CHAIN,\n SOLANA_MAINNET_CHAIN,\n SOLANA_TESTNET_CHAIN,\n SolanaChain,\n STARKNET_MAINNET_CHAIN,\n STARKNET_SEPOLIA_CHAIN,\n StarknetChainId,\n SuiChain,\n} from '../../common/chains';\nimport { LombardError, ValidationErrorCode } from '../../shared/errors';\nimport { CHAIN_CATALOG } from './catalog';\nimport {\n CAIP2_SEPARATOR,\n Chain,\n CHAIN_PREFIXES,\n ChainMetadata,\n ChainType,\n isChain,\n} from './types';\n\n/**\n * Maps CAIP-2 Solana genesis hash references to legacy SolanaChain constants.\n * \n * CAIP-2 uses the first 32 chars of the genesis block hash as the reference,\n * while the legacy system uses network names like 'mainnet-beta', 'devnet', 'testnet'.\n * \n * Genesis hashes:\n * - Mainnet: 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp (full hash starts with 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc65hiGPAejCtx5...)\n * - Devnet: EtWTRABZaYq6iMfeYKouRu166VU2xqa1 (full hash starts with EtWTRABZaYq6iMfeYKouRu166VU2xqa1dT5ZqE8CjGWRXc...)\n * - Testnet: 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z (full hash starts with 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zUEzxnuRbtRMp8...)\n */\nconst SOLANA_GENESIS_TO_CHAIN: Record<string, SolanaChain> = {\n '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': SOLANA_MAINNET_CHAIN,\n 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1': SOLANA_DEVNET_CHAIN,\n '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z': SOLANA_TESTNET_CHAIN,\n};\n\n/**\n * Maps CAIP-2 Starknet network names to Starknet hex chain IDs.\n *\n * CAIP-2 uses human-readable network names (SN_MAIN, SN_SEPOLIA) as the reference,\n * while Starknet SDK expects hex-encoded chain IDs.\n *\n * Mapping:\n * - SN_MAIN → 0x534e5f4d41494e (hex of \"SN_MAIN\")\n * - SN_SEPOLIA → 0x534e5f5345504f4c4941 (hex of \"SN_SEPOLIA\")\n */\nconst STARKNET_NETWORK_TO_CHAIN_ID: Record<string, StarknetChainId> = {\n SN_MAIN: STARKNET_MAINNET_CHAIN,\n SN_SEPOLIA: STARKNET_SEPOLIA_CHAIN,\n};\n\n/**\n * Converts a CAIP-2 Starknet network name to its hex chain ID.\n *\n * @param network - The network name from CAIP-2 (e.g., \"SN_SEPOLIA\")\n * @returns The Starknet hex chain ID, or undefined if not found\n */\nfunction starknetNetworkToChainId(network: string): StarknetChainId | undefined {\n return STARKNET_NETWORK_TO_CHAIN_ID[network];\n}\n\n/** Get chain metadata */\nexport function getChainMetadata(chain: Chain): ChainMetadata {\n return CHAIN_CATALOG[chain];\n}\n\n/** Get the human-readable name for a chain */\nexport function getChainName(chain: Chain): string {\n return CHAIN_CATALOG[chain].name;\n}\n\n/** Get chain type */\nexport function getChainType(chain: Chain): ChainType {\n return CHAIN_CATALOG[chain].type;\n}\n\n/** Check if a chain is a testnet */\nexport function isTestnet(chain: Chain): boolean {\n return CHAIN_CATALOG[chain].isTestnet;\n}\n\n/** Check if a chain is a mainnet */\nexport function isMainnet(chain: Chain): boolean {\n return !CHAIN_CATALOG[chain].isTestnet;\n}\n\n/** Check if a chain is an EVM chain */\nexport function isEvmChain(chain: Chain): boolean {\n return CHAIN_CATALOG[chain].type === 'evm';\n}\n\n/** Get block explorer URL for an address */\nexport function getExplorerAddressUrl(\n chain: Chain,\n address: string,\n): string | undefined {\n const { explorerUrl } = CHAIN_CATALOG[chain];\n if (!explorerUrl) return undefined;\n return `${explorerUrl}/address/${address}`;\n}\n\n/** Get block explorer URL for a transaction */\nexport function getExplorerTxUrl(\n chain: Chain,\n txHash: string,\n): string | undefined {\n const { explorerUrl } = CHAIN_CATALOG[chain];\n if (!explorerUrl) return undefined;\n return `${explorerUrl}/tx/${txHash}`;\n}\n\n/** Get all mainnet chains */\nexport function getMainnetChains(): Chain[] {\n return (Object.keys(CHAIN_CATALOG) as Chain[]).filter(\n chain => !CHAIN_CATALOG[chain].isTestnet,\n );\n}\n\n/** Get all testnet chains */\nexport function getTestnetChains(): Chain[] {\n return (Object.keys(CHAIN_CATALOG) as Chain[]).filter(\n chain => CHAIN_CATALOG[chain].isTestnet,\n );\n}\n\n/** Get all chains of a specific type */\nexport function getChainsByType(type: ChainType): Chain[] {\n return (Object.keys(CHAIN_CATALOG) as Chain[]).filter(\n chain => CHAIN_CATALOG[chain].type === type,\n );\n}\n\n/** Helper to get prefix with separator */\nconst withSeparator = (prefix: string) => `${prefix}${CAIP2_SEPARATOR}`;\n\n/** Parse a CAIP-2 chain identifier into its native chain representation */\nexport function parseChainIdentifier(\n chain: Chain,\n): ChainId | SuiChain | SolanaChain | StarknetChainId {\n const evmPrefix = withSeparator(CHAIN_PREFIXES.EIP155);\n if (chain.startsWith(evmPrefix)) {\n const chainId = Number.parseInt(chain.slice(evmPrefix.length), 10);\n if (isValidChain(chainId)) return chainId;\n throw new LombardError(\n ValidationErrorCode.INVALID_CHAIN,\n `Invalid EVM chain: ${chain}`,\n );\n }\n\n const solanaPrefix = withSeparator(CHAIN_PREFIXES.SOLANA);\n if (chain.startsWith(solanaPrefix)) {\n const reference = chain.slice(solanaPrefix.length);\n \n // First check if it's already in legacy format (e.g., 'mainnet-beta', 'devnet')\n const legacyChain = `solana:${reference}`;\n if (isSolanaChain(legacyChain)) return legacyChain as SolanaChain;\n \n // Otherwise, map CAIP-2 genesis hash to legacy format\n const mappedChain = SOLANA_GENESIS_TO_CHAIN[reference];\n if (mappedChain) return mappedChain;\n \n throw new LombardError(\n ValidationErrorCode.INVALID_CHAIN,\n `Invalid Solana chain: ${chain}`,\n );\n }\n\n const suiPrefix = withSeparator(CHAIN_PREFIXES.SUI);\n if (chain.startsWith(suiPrefix)) {\n // isSuiChain expects the full chain ID (e.g., 'sui:testnet'), not just the network part\n if (isSuiChain(chain)) return chain as SuiChain;\n throw new LombardError(\n ValidationErrorCode.INVALID_CHAIN,\n `Invalid Sui chain: ${chain}`,\n );\n }\n\n const starknetPrefix = withSeparator(CHAIN_PREFIXES.STARKNET);\n if (chain.startsWith(starknetPrefix)) {\n const network = chain.slice(starknetPrefix.length);\n // Map CAIP-2 network names to Starknet hex chain IDs\n const starknetChainId = starknetNetworkToChainId(network);\n if (starknetChainId) return starknetChainId;\n throw new LombardError(\n ValidationErrorCode.INVALID_CHAIN,\n `Invalid Starknet chain: ${chain}`,\n );\n }\n\n throw new LombardError(\n ValidationErrorCode.INVALID_CHAIN,\n `Invalid chain: ${chain}`,\n );\n}\n\n/**\n * Convert an EVM ChainId (number) to a Chain (CAIP-2 string).\n *\n * @param chainId - Numeric EVM chain ID\n * @returns CAIP-2 chain identifier\n *\n * @example\n * ```typescript\n * evmChainIdToChain(1) // \"eip155:1\" (Ethereum)\n * evmChainIdToChain(43114) // \"eip155:43114\" (Avalanche)\n * ```\n */\nexport function evmChainIdToChain(chainId: ChainId): Chain {\n return `${CHAIN_PREFIXES.EIP155}${CAIP2_SEPARATOR}${chainId}` as Chain;\n}\n\n/** @deprecated Use getChainMetadata instead */\nexport interface ChainTypeMetadata {\n type: string;\n label: string;\n variant: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';\n}\n\n/** @deprecated Use getChainMetadata instead */\nexport function getChainTypeMetadata(chain: Chain | string): ChainTypeMetadata {\n if (isChain(chain)) {\n const meta = CHAIN_CATALOG[chain];\n return {\n type: meta.type,\n label: meta.type.toUpperCase(),\n variant: meta.badgeVariant,\n };\n }\n const prefix = chain.split(':')[0];\n return { type: prefix, label: prefix.toUpperCase(), variant: 'secondary' };\n}\n","/**\n * Asset Catalog\n *\n * Central registry of all assets and their deployments.\n * JSON-serializable for S3 hosting.\n *\n * @module core/assets/catalog\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport { featureConfig } from '../../common/feature-config';\nimport { Chain } from '../chains';\nimport { AssetCatalog, AssetId } from './types';\n\nexport const ASSET_CATALOG: AssetCatalog = {\n version: '1.0.0',\n\n assets: {\n // ═══════════════════════════════════════════════════════════════════════\n // LBTC - Lombard BTC\n // ═══════════════════════════════════════════════════════════════════════\n [AssetId.LBTC]: {\n decimals: 8,\n symbol: 'LBTC',\n name: 'Lombard BTC',\n deployments: [\n // Production\n {\n env: Env.prod,\n chain: Chain.ETHEREUM,\n address: '0x8236a87084f8b84306f72007f36f2618a5634494',\n },\n {\n env: Env.prod,\n chains: [\n Chain.BASE,\n Chain.BSC,\n Chain.BERACHAIN,\n Chain.CORN, // Supported for EVM Deploy (Veda), not for BTC Stake\n ...(featureConfig.isEtherlinkEnabled ? [Chain.ETHERLINK] : []),\n Chain.KATANA,\n Chain.MORPH,\n Chain.SONIC,\n Chain.SWELL,\n Chain.TAC,\n ...(featureConfig.isMonadEnabled ? [Chain.MONAD] : []),\n Chain.STABLE,\n ],\n address: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n },\n {\n env: Env.prod,\n chain: Chain.BOB,\n address: '0xA45d4121b3D47719FF57a947A9d961539Ba33204',\n },\n {\n env: Env.prod,\n chain: Chain.SOLANA_MAINNET,\n address: 'LomP48F7bLbKyMRHHsDVt7wuHaUQvQnVVspjcbfuAek',\n },\n {\n env: Env.prod,\n chain: Chain.SUI_MAINNET,\n address:\n '0x3e8e9423d80e1774a7ca128fccd8bf5f1f7753be658c5e645929037f7c819040',\n },\n {\n env: Env.prod,\n chain: Chain.STARKNET_MAINNET,\n address:\n '0x036834a40984312f7f7de8d31e3f6305b325389eaeea5b1c0664b2fb936461a4',\n assetRouter:\n '0x05b1886d0f844ab930fc0ee066f1655a873437f15a5d2c41ee3e884fd5299976',\n },\n\n // Testnet\n {\n env: Env.testnet,\n chain: Chain.SEPOLIA,\n address: '0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30',\n },\n {\n env: Env.testnet,\n chains: [\n Chain.AVALANCHE_FUJI,\n Chain.BASE_SEPOLIA,\n Chain.BSC_TESTNET,\n ],\n address: '0x107Fc7d90484534704dD2A9e24c7BD45DB4dD1B5',\n },\n {\n env: Env.testnet,\n chain: Chain.SOLANA_TESTNET,\n address: '79cscM6J9Af24TGGWcXyDf56fDLoodkyXdVy4R9aZ6C6',\n },\n {\n env: Env.testnet,\n chain: Chain.SUI_TESTNET,\n address:\n '0x50454d0b0fbad1288a6ab74f2e8ce0905a3317870673ab7787ebcf6f322b45fa',\n },\n {\n env: Env.testnet,\n chain: Chain.STARKNET_SEPOLIA,\n address:\n '0x00456a829ab75ba5e97534dc70d7fc617cfda244f8dcda47b11624de67c6e70c',\n assetRouter:\n '0x063b7b5c8b114ebd5b9602fbd5d0ffd2cc3a598f1d91c6904cc0997cd8fea760',\n },\n\n // Stage\n // Note: Avalanche Fuji is only supported on testnet (Gastald), not stage\n {\n env: Env.stage,\n chains: [\n Chain.BASE_SEPOLIA,\n Chain.BSC_TESTNET,\n Chain.SEPOLIA,\n ],\n address: '0x731eFa688F3679688cf60A3993b8658138953ED6',\n },\n {\n env: Env.stage,\n chain: Chain.SOLANA_DEVNET,\n address: 'HEY7PCJe3GB27UWdopuYb1xDbB5SNtTcYPxRjntvfBSA',\n },\n {\n env: Env.stage,\n chain: Chain.SUI_TESTNET,\n address:\n '0x2d66430a27565b912f21be970e5ae1e8c0359f0b518c3235b751c75976791ce0',\n },\n {\n env: Env.stage,\n chain: Chain.STARKNET_SEPOLIA,\n address:\n '0x00b442f5420860e937a99659326e81a97e07bfd538b3cee65b90029c9da38a5f',\n assetRouter:\n '0x01d27f156092746d0d7cd9d9deec5e937f27c3c7c1c28365e9e5efac459880b3',\n },\n\n // Dev\n {\n env: Env.dev,\n chain: Chain.SEPOLIA,\n address: '0x93283b6B889C591893dB0dc93baD71656D5d8923',\n },\n {\n env: Env.dev,\n chains: [\n Chain.AVALANCHE_FUJI,\n Chain.BASE_SEPOLIA,\n Chain.BERACHAIN_BARTIO,\n Chain.BSC_TESTNET,\n ],\n address: '0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30',\n },\n {\n env: Env.dev,\n chain: Chain.STARKNET_SEPOLIA,\n address:\n '0x0723de0c550b7bfbb5051dade72966d71a08bef952c0197462a5244497eb57c1',\n assetRouter:\n '0x04838a05c798dc57e01e85526979841c84f1f3c732a525cff53adb3e8bee3d24',\n },\n ],\n },\n\n // ═══════════════════════════════════════════════════════════════════════\n // BTC.b - Lombard's Native BTC Wrapper\n // ═══════════════════════════════════════════════════════════════════════\n [AssetId.BTCb]: {\n decimals: 8,\n symbol: 'BTC.b',\n name: 'BTC.b',\n deployments: [\n // Production\n {\n env: Env.prod,\n chains: [\n Chain.KATANA,\n Chain.MEGAETH,\n ...(featureConfig.isMonadEnabled ? [Chain.MONAD] : []),\n Chain.STABLE,\n ],\n address: '0xB0F70C0bD6FD87dbEb7C10dC692a2a6106817072',\n },\n {\n env: Env.prod,\n chain: Chain.AVALANCHE,\n address: '0x152b9d0FdC40C096757F570A51E494bd4b943E50',\n bridgeAdapter: '0x85D1D52e11290F174444d21C2a167bEDBE36e4d2',\n },\n\n // Testnet\n {\n env: Env.testnet,\n chain: Chain.SEPOLIA,\n address: '0x20eA7b8ABb4B583788F1DFC738C709a2d9675681',\n },\n {\n env: Env.testnet,\n chain: Chain.AVALANCHE_FUJI,\n address: '0x7FbdC44BfEBDe80C970ba622B678daB36cee31f6',\n bridgeAdapter: '0x0A65C37d07c32E5eA8ea40495b7f249cdE26935e',\n },\n\n // Stage\n // Note: Avalanche Fuji is only supported on testnet (Gastald), not stage\n {\n env: Env.stage,\n chain: Chain.SEPOLIA,\n address: '0x600e4006278EB11FA1691cA0FE6C5fcfC4992d58',\n },\n\n // Dev\n {\n env: Env.dev,\n chain: Chain.SEPOLIA,\n address: '0x195219A262423d209E126BD21cf4F4F9AA796927',\n },\n {\n env: Env.dev,\n chain: Chain.BSC_TESTNET,\n address: '0xea3F66E5f2928dB9673103BfA01a2153A57a8050',\n },\n {\n env: Env.dev,\n chain: Chain.AVALANCHE_FUJI,\n address: '0x7FbdC44BfEBDe80C970ba622B678daB36cee31f6',\n bridgeAdapter: '0x0A65C37d07c32E5eA8ea40495b7f249cdE26935e',\n },\n\n // IBC\n {\n env: Env.ibc,\n chain: Chain.AVALANCHE_FUJI,\n address: '0x71ba2b8dc58e7ca1b6d81a60729e31aefa37ae02',\n bridgeAdapter: '0x1391f9AC408cf13214DDB71d359002658eaF9ebb',\n },\n ],\n },\n\n // ═══════════════════════════════════════════════════════════════════════\n // BTCBinance (BTCB) - Binance-Peg BTCB\n // ═══════════════════════════════════════════════════════════════════════\n [AssetId.BTCBinance]: {\n decimals: 18,\n symbol: 'BTCB',\n name: 'Binance-Peg BTCB',\n deployments: [\n {\n env: Env.prod,\n chain: Chain.BSC,\n address: '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c',\n publicMarketMaker: '0xE4ff44a615dF38e37cdF475833c1d57774CC9D4A',\n },\n {\n env: Env.testnet,\n chain: Chain.BSC_TESTNET,\n address: '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c',\n publicMarketMaker: '0x63749Acfc2527A8406E8BC8c93A80f29FDD75e27',\n },\n {\n env: Env.stage,\n chain: Chain.BSC_TESTNET,\n address: '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c',\n publicMarketMaker: '0x440362b55D4a255EBA3c27C650d2dC1a91Db85bA',\n },\n {\n env: Env.dev,\n chain: Chain.BSC_TESTNET,\n address: '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c',\n publicMarketMaker: '0x440362b55D4a255EBA3c27C650d2dC1a91Db85bA',\n },\n ],\n },\n\n // ═══════════════════════════════════════════════════════════════════════\n // cbBTC - Coinbase Wrapped BTC\n // ═══════════════════════════════════════════════════════════════════════\n [AssetId.cbBTC]: {\n decimals: 8,\n symbol: 'cbBTC',\n name: 'Coinbase Wrapped BTC',\n deployments: [\n {\n env: Env.prod,\n chains: [Chain.ETHEREUM, Chain.BASE],\n address: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf',\n publicMarketMaker: '0x92c01FC0F59857c6E920EdFf1139904b2Bb74c7c',\n },\n ],\n },\n\n // ═══════════════════════════════════════════════════════════════════════\n // eBTC\n // ═══════════════════════════════════════════════════════════════════════\n [AssetId.eBTC]: {\n decimals: 8,\n symbol: 'eBTC',\n deployments: [\n {\n env: Env.prod,\n chain: Chain.ETHEREUM,\n address: '0x657e8c867d8b37dcc18fa4caead9c45eb088c642',\n },\n ],\n },\n\n // ═══════════════════════════════════════════════════════════════════════\n // WBTC - Wrapped BTC\n // ═══════════════════════════════════════════════════════════════════════\n [AssetId.WBTC]: {\n decimals: 8,\n symbol: 'WBTC',\n deployments: [\n {\n env: Env.prod,\n chain: Chain.ETHEREUM,\n address: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',\n },\n ],\n },\n\n // ═══════════════════════════════════════════════════════════════════════\n // wBTCN - Wrapped BTCN on Corn\n // ═══════════════════════════════════════════════════════════════════════\n [AssetId.WBTCN]: {\n decimals: 8,\n symbol: 'wBTCN',\n deployments: [\n {\n env: Env.prod,\n chain: Chain.CORN,\n address: '0xda5dDd7270381A7C2717aD10D1c0ecB19e3CDFb2',\n },\n ],\n },\n },\n};\n","/**\n * Asset Query Functions\n *\n * Simple utility functions for querying the asset catalog.\n *\n * @module core/assets/utils\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\n\nimport { type Chain, isEvmChain } from '../chains';\nimport { ASSET_CATALOG } from './catalog';\nimport type { AssetCatalog, AssetId, Deployment } from './types';\n\nconst DEFAULT_DECIMALS = 8;\n\n/** Find a deployment matching asset, env, and chain */\nfunction findDeployment(\n catalog: AssetCatalog,\n asset: AssetId,\n env: Env,\n chain: Chain,\n): Deployment | undefined {\n const entry = catalog.assets[asset];\n if (!entry) return undefined;\n return entry.deployments.find(\n d => d.env === env && (d.chain === chain || d.chains?.includes(chain)),\n );\n}\n\n/** Get token address for a specific asset on a chain */\nexport function getAssetAddress(\n asset: AssetId,\n env: Env,\n chain: Chain,\n catalog: AssetCatalog = ASSET_CATALOG,\n): string | undefined {\n return findDeployment(catalog, asset, env, chain)?.address;\n}\n\n/** Get token decimals for an asset */\nexport function getAssetDecimals(\n asset: AssetId,\n catalog: AssetCatalog = ASSET_CATALOG,\n): number {\n return catalog.assets[asset]?.decimals ?? DEFAULT_DECIMALS;\n}\n\n/** Get asset router contract address */\nexport function getAssetRouter(\n asset: AssetId,\n env: Env,\n chain: Chain,\n catalog: AssetCatalog = ASSET_CATALOG,\n): string | undefined {\n return findDeployment(catalog, asset, env, chain)?.assetRouter;\n}\n\n/** Check if an asset uses an asset router contract */\nexport function usesAssetRouter(\n asset: AssetId,\n env: Env,\n chain: Chain,\n catalog: AssetCatalog = ASSET_CATALOG,\n): boolean {\n return !!findDeployment(catalog, asset, env, chain)?.assetRouter;\n}\n\n/** Get bridge adapter address */\nexport function getBridgeAdapter(\n asset: AssetId,\n env: Env,\n chain: Chain,\n catalog: AssetCatalog = ASSET_CATALOG,\n): string | undefined {\n return findDeployment(catalog, asset, env, chain)?.bridgeAdapter;\n}\n\n/** Get public market maker address */\nexport function getPublicMarketMaker(\n asset: AssetId,\n env: Env,\n chain: Chain,\n catalog: AssetCatalog = ASSET_CATALOG,\n): string | undefined {\n return findDeployment(catalog, asset, env, chain)?.publicMarketMaker;\n}\n\n/** Check if an asset is deployed on a specific chain */\nexport function isAssetDeployed(\n asset: AssetId,\n env: Env,\n chain: Chain,\n catalog: AssetCatalog = ASSET_CATALOG,\n): boolean {\n return !!findDeployment(catalog, asset, env, chain);\n}\n\n/** Find asset by contract address (reverse lookup) */\nexport function getAssetByAddress(\n address: string,\n env: Env,\n chain: Chain,\n catalog: AssetCatalog = ASSET_CATALOG,\n): AssetId | undefined {\n const normalized = address.toLowerCase();\n\n for (const [assetId, entry] of Object.entries(catalog.assets)) {\n if (!entry) continue;\n const deployment = entry.deployments.find(\n d =>\n d.env === env &&\n (d.chain === chain || d.chains?.includes(chain)) &&\n d.address.toLowerCase() === normalized,\n );\n if (deployment) return assetId as AssetId;\n }\n return undefined;\n}\n\n/** Get all chains where an asset is deployed in a specific environment */\nexport function getAssetChains(\n asset: AssetId,\n env: Env,\n catalog: AssetCatalog = ASSET_CATALOG,\n): Chain[] {\n const entry = catalog.assets[asset];\n if (!entry) return [];\n\n const chains: Chain[] = [];\n for (const d of entry.deployments) {\n if (d.env !== env) continue;\n if (d.chain) chains.push(d.chain);\n if (d.chains) chains.push(...d.chains);\n }\n return chains;\n}\n\n/** Get all environments where an asset is deployed on a specific chain */\nexport function getAssetEnvironments(\n asset: AssetId,\n chain: Chain,\n catalog: AssetCatalog = ASSET_CATALOG,\n): Env[] {\n const entry = catalog.assets[asset];\n if (!entry) return [];\n\n const envs = new Set<Env>();\n for (const d of entry.deployments) {\n if (d.chain === chain || d.chains?.includes(chain)) {\n envs.add(d.env);\n }\n }\n return Array.from(envs);\n}\n\n/** Get all supported assets */\nexport function getSupportedAssets(\n catalog: AssetCatalog = ASSET_CATALOG,\n): AssetId[] {\n return Object.keys(catalog.assets) as AssetId[];\n}\n\n/**\n * Get all chains where an asset is deployed across ALL environments\n *\n * Useful for action configs that need to know all possible destination chains.\n * Deduplicates chains that appear in multiple environments.\n */\nexport function getAllAssetChains(\n asset: AssetId,\n catalog: AssetCatalog = ASSET_CATALOG,\n): Chain[] {\n const entry = catalog.assets[asset];\n if (!entry) return [];\n\n const chainSet = new Set<Chain>();\n for (const d of entry.deployments) {\n if (d.chain) chainSet.add(d.chain);\n if (d.chains) d.chains.forEach(c => chainSet.add(c));\n }\n return Array.from(chainSet);\n}\n\n/**\n * Get chains for specific environments\n *\n * @param asset - Asset ID\n * @param envs - Array of environments to include\n * @returns Deduplicated array of chains\n */\nexport function getAssetChainsForEnvs(\n asset: AssetId,\n envs: Env[],\n catalog: AssetCatalog = ASSET_CATALOG,\n): Chain[] {\n const entry = catalog.assets[asset];\n if (!entry) return [];\n\n const chainSet = new Set<Chain>();\n for (const d of entry.deployments) {\n if (!envs.includes(d.env)) continue;\n if (d.chain) chainSet.add(d.chain);\n if (d.chains) d.chains.forEach(c => chainSet.add(c));\n }\n return Array.from(chainSet);\n}\n\n/** Get asset metadata (decimals, symbol, name) */\nexport function getAssetMetadata(\n asset: AssetId,\n catalog: AssetCatalog = ASSET_CATALOG,\n): { decimals: number; symbol: string; name?: string } | undefined {\n const entry = catalog.assets[asset];\n if (!entry) return undefined;\n return { decimals: entry.decimals, symbol: entry.symbol, name: entry.name };\n}\n\n/**\n * Get EVM chains where an asset is deployed for specific environments\n *\n * Filters chains by type 'evm' from the catalog.\n *\n * @param asset - Asset ID\n * @param envs - Array of environments to include\n * @returns Array of EVM chains where asset is deployed\n */\nexport function getEvmAssetChains(\n asset: AssetId,\n envs: Env[],\n catalog: AssetCatalog = ASSET_CATALOG,\n): Chain[] {\n\n return getAssetChainsForEnvs(asset, envs, catalog).filter(chain =>\n isEvmChain(chain),\n );\n}\n\n/**\n * Get chains where multiple assets are ALL deployed (intersection)\n *\n * Useful for finding chains that support both LBTC and BTCb for same-chain unstake.\n *\n * @param assets - Array of Asset IDs that must all be present\n * @param envs - Array of environments to include\n * @returns Array of chains where ALL assets are deployed\n */\nexport function getChainsWithAllAssets(\n assets: AssetId[],\n envs: Env[],\n catalog: AssetCatalog = ASSET_CATALOG,\n): Chain[] {\n if (assets.length === 0) return [];\n\n // Get chains for first asset\n const firstAssetChains = new Set(getAssetChainsForEnvs(assets[0], envs, catalog));\n\n // Intersect with chains for remaining assets\n for (let i = 1; i < assets.length; i++) {\n const assetChains = new Set(getAssetChainsForEnvs(assets[i], envs, catalog));\n for (const chain of firstAssetChains) {\n if (!assetChains.has(chain)) {\n firstAssetChains.delete(chain);\n }\n }\n }\n\n return Array.from(firstAssetChains);\n}\n\n/**\n * Get EVM chains where multiple assets are ALL deployed\n *\n * @param assets - Array of Asset IDs that must all be present\n * @param envs - Array of environments to include\n * @returns Array of EVM chains where ALL assets are deployed\n */\nexport function getEvmChainsWithAllAssets(\n assets: AssetId[],\n envs: Env[],\n catalog: AssetCatalog = ASSET_CATALOG,\n): Chain[] {\n\n return getChainsWithAllAssets(assets, envs, catalog).filter(chain =>\n isEvmChain(chain),\n );\n}\n","/**\n * Partner configuration management\n *\n * This module handles partner-specific configuration.\n */\n\nimport type { PartnerConfig } from '../config/types';\n\n/**\n * Partner configuration manager\n *\n * Manages partner-specific settings.\n */\nexport class PartnerConfiguration {\n private config: PartnerConfig | undefined;\n\n constructor(config?: PartnerConfig) {\n this.config = config;\n }\n\n /**\n * Get partner ID\n */\n getPartnerId(): string | undefined {\n return this.config?.partnerId;\n }\n\n /**\n * Check if partner is configured\n */\n isConfigured(): boolean {\n return this.config !== undefined;\n }\n\n /**\n * Update partner configuration\n *\n * @param config - New partner configuration\n */\n update(config: PartnerConfig): void {\n this.config = config;\n }\n\n /**\n * Clear partner configuration\n */\n clear(): void {\n this.config = undefined;\n }\n}\n","/**\n * Configuration types for the Lombard SDK\n *\n * This module defines the types for SDK configuration, including\n * provider getters, partner configuration, and custom asset registration.\n */\n\nimport type { AnyModule, Env } from '@lombard.finance/sdk-common';\n\nimport type { AssetId, Chain } from '../core';\nimport type { Logger } from '../shared/context/types';\nimport type {\n BtcProvider,\n EvmProvider,\n SolanaProvider,\n StarknetProvider,\n SuiProvider,\n} from './providers';\n\n/**\n * Provider getter function\n *\n * A function that returns a provider instance for a specific chain.\n * This allows lazy loading of providers only when needed.\n *\n * @param chain - Optional chain identifier (for multi-chain providers like EVM)\n * @returns Provider instance or promise of provider instance\n */\nexport type ProviderGetter<TProvider> = (\n chain?: Chain,\n) => TProvider | Promise<TProvider>;\n\nexport interface ProviderGetters {\n evm?: ProviderGetter<EvmProvider>;\n bitcoin?: ProviderGetter<BtcProvider>;\n solana?: ProviderGetter<SolanaProvider>;\n sui?: ProviderGetter<SuiProvider>;\n starknet?: ProviderGetter<StarknetProvider>;\n}\n\n/**\n * Get provider getter from config by key\n *\n * Uses explicit property access to avoid security concerns with dynamic keys.\n * This pattern is required by static analysis tools (Codacy/Semgrep) to prevent\n * potential object injection vulnerabilities.\n *\n * @param providers - Provider getters configuration\n * @param key - Provider key to retrieve\n * @returns Provider getter function or undefined if not configured\n */\nexport function getProviderGetter<T = unknown>(\n providers: ProviderGetters,\n key: string,\n): ProviderGetter<T> | undefined {\n let getter: ProviderGetter<unknown> | undefined;\n switch (key) {\n case 'evm':\n getter = providers.evm;\n break;\n case 'bitcoin':\n getter = providers.bitcoin;\n break;\n case 'solana':\n getter = providers.solana;\n break;\n case 'sui':\n getter = providers.sui;\n break;\n case 'starknet':\n getter = providers.starknet;\n break;\n default:\n getter = undefined;\n }\n return getter as ProviderGetter<T> | undefined;\n}\n\n/**\n * SDK configuration options\n *\n * Options passed to createConfig(). `modules` is optional; built-ins are\n * registered automatically if not provided.\n *\n * @example\n * ```typescript\n * // Config is synchronous - can be exported directly\n * export const config = createConfig({\n * env: Env.prod,\n * providers: { evm: () => window.ethereum },\n * debug: true, // Enable console logging\n * });\n *\n * // SDK creation is async (fetches catalog)\n * const sdk = await createLombardSDK(config);\n * ```\n */\nexport interface CreateConfigOptions {\n /** Environment (prod, testnet, stage, dev) */\n env: Env;\n\n /** Wallet provider getters for each chain */\n providers?: ProviderGetters;\n\n /** Optional modules to register */\n modules?: readonly AnyModule[];\n\n /** Partner configuration */\n partner?: PartnerConfig;\n\n /**\n * Optional logger for SDK operations\n *\n * Provide your own logger to integrate with your logging infrastructure\n * (e.g., Sentry, DataDog, custom logging).\n *\n * @example\n * ```typescript\n * logger: {\n * error: (msg, meta) => Sentry.captureMessage(msg, { extra: meta }),\n * warn: console.warn,\n * info: console.info,\n * debug: () => {}, // Suppress debug logs\n * }\n * ```\n */\n logger?: Logger;\n\n /**\n * Enable debug mode\n *\n * When true, creates a console logger that outputs all SDK operations.\n * Useful for development and debugging.\n *\n * Note: If both `logger` and `debug` are provided, `logger` takes precedence.\n *\n * @default false\n */\n debug?: boolean;\n}\n\n/**\n * Validated SDK configuration\n *\n * Configuration object returned by createConfig(). This is a plain,\n * synchronous object that can be exported from a module and passed around.\n *\n * The asset catalog is NOT included here - it's fetched asynchronously\n * when createLombardSDK() is called.\n */\nexport interface LombardConfig {\n env: Env;\n providers: ProviderGetters;\n modules: readonly AnyModule[];\n partner?: PartnerConfig;\n logger?: Logger;\n}\n\n/**\n * Resolved SDK configuration (internal)\n *\n * Extended config with the asset catalog, used internally by LombardSDK.\n * Users don't interact with this type directly.\n *\n * @internal\n */\nexport interface ResolvedLombardConfig extends LombardConfig {\n /**\n * Asset catalog (fetched during SDK initialization)\n *\n * Contains all asset deployments, chain configs, and addresses.\n * This is fetched asynchronously during createLombardSDK() to allow\n * for dynamic updates without SDK releases.\n */\n catalog: import('../core/assets/types').AssetCatalog;\n}\n\nexport type LombardSDKOptions = CreateConfigOptions;\n\n/**\n * Partner configuration\n *\n * Configuration for partners integrating the SDK.\n */\nexport interface PartnerConfig {\n /** Unique partner identifier */\n partnerId: string;\n}\n\n/**\n * Custom asset registration\n *\n * Allows partners to register custom assets (e.g., SPL tokens).\n */\nexport interface CustomAsset {\n /** Asset type */\n type: 'spl' | 'erc20' | 'native';\n\n /** Contract address (for token assets) */\n address?: string;\n\n /** Asset symbol */\n symbol: string;\n\n /** Number of decimals */\n decimals: number;\n\n /** L-Asset symbol (how it will be named in Lombard) */\n lAssetSymbol: string;\n\n /** Chain where the asset exists */\n chain?: Chain;\n\n /** Optional: Asset ID mapping */\n assetId?: AssetId;\n}\n","/**\n * Capability Registry\n *\n * Manages optional module services and provides dependency injection for actions.\n * Works exclusively with LombardConfig, never requiring the full SDK instance.\n *\n * @module modules/CapabilityRegistry\n */\n\nimport type {\n AnyModule,\n ModuleId,\n ProviderFor,\n ProviderKey,\n RegisterContext,\n SdkModule,\n ServiceOf,\n SharedToken,\n} from '@lombard.finance/sdk-common';\n\nimport type { LombardConfig } from '../config/types';\nimport { getProviderGetter } from '../config/types';\nimport { LombardError } from '../shared/errors';\n\n/**\n * Capability Registry\n *\n * Manages optional module services (BTC, EVM, API, Solana, Sui, Starknet, etc.)\n * and provides lazy loading with descriptive error messages.\n *\n * Services are internal implementations for action DI.\n * Public APIs should call underlying functions directly for rich types.\n *\n * @example\n * ```typescript\n * const registry = new CapabilityRegistry(config.modules, config);\n * const btcService = registry.require('btc');\n * const solanaService = registry.optional('solana'); // null if not installed\n * ```\n */\nexport class CapabilityRegistry<\n TModules extends readonly AnyModule[] = readonly AnyModule[],\n> {\n private readonly modules = new Map<string, AnyModule>();\n private readonly services = new Map<string, unknown>();\n private readonly shared = new Map<SharedToken<unknown>, unknown>();\n\n constructor(\n modules: readonly AnyModule[],\n private readonly config: LombardConfig,\n ) {\n modules.forEach(mod => this.modules.set(mod.id, mod));\n }\n\n /**\n * Require a module service\n *\n * Throws LombardError.moduleMissing if module not installed.\n *\n * @param id - Module identifier\n * @returns Module service\n */\n require<TId extends ModuleId<TModules[number]>>(\n id: TId,\n ): ServiceOf<TModules[number] & SdkModule<TId, unknown>, TId> {\n const mod = this.modules.get(id as string);\n if (!mod) {\n throw LombardError.moduleMissing(id as string);\n }\n if (!this.services.has(mod.id)) {\n this.services.set(mod.id, mod.register(this.createContext()));\n }\n return this.services.get(mod.id) as ServiceOf<\n TModules[number] & SdkModule<TId, unknown>,\n TId\n >;\n }\n\n /**\n * Optionally get a module service\n *\n * Returns null if module not installed (no error thrown).\n *\n * @param id - Module identifier\n * @returns Module service or null\n */\n optional<TId extends ModuleId<TModules[number]>>(\n id: TId,\n ): ServiceOf<TModules[number] & SdkModule<TId, unknown>, TId> | null {\n const mod = this.modules.get(id as string);\n if (!mod) {\n return null;\n }\n if (!this.services.has(mod.id)) {\n this.services.set(mod.id, mod.register(this.createContext()));\n }\n return this.services.get(mod.id) as ServiceOf<\n TModules[number] & SdkModule<TId, unknown>,\n TId\n >;\n }\n\n /**\n * Create registration context for modules\n *\n * Provides modules with access to config-based services.\n */\n private createContext(): RegisterContext {\n return {\n env: this.config.env,\n getProvider: async <TKey extends ProviderKey>(key: TKey) => {\n const getter = getProviderGetter(this.config.providers, key);\n if (!getter) {\n return undefined as unknown as ProviderFor<TKey>;\n }\n return (await getter()) as ProviderFor<TKey>;\n },\n getShared: <T>(token: SharedToken<T>) =>\n this.shared.get(token as SharedToken<unknown>) as T | undefined,\n setShared: <T>(token: SharedToken<T>, value: T) => {\n this.shared.set(token as SharedToken<unknown>, value);\n },\n };\n }\n}\n","/**\n * Context Builder\n *\n * Builds lightweight action contexts from LombardConfig.\n * Contexts are passed to actions instead of the full SDK instance,\n * improving testability and reducing coupling.\n *\n * NOTE: All context creation now works from config only.\n * The SDK class should pass this.config when creating actions.\n *\n * @module shared/context/ContextBuilder\n */\n\nimport type {\n ApiService,\n BtcService,\n EvmService,\n ProviderKey,\n} from '@lombard.finance/sdk-common';\n\nimport { PartnerConfiguration } from '../../client/PartnerConfiguration';\n// Note: EvmService is imported for createEvmCoreContext\nimport type { LombardConfig } from '../../config/types';\nimport { getProviderGetter } from '../../config/types';\nimport { CapabilityRegistry } from '../../modules/CapabilityRegistry';\nimport type {\n BtcCoreContext,\n CoreContext,\n EvmCoreContext,\n ProviderResolver,\n} from './types';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Provider Resolution\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Create a provider resolver from config\n */\nfunction createProviderResolver(config: LombardConfig): ProviderResolver {\n return async key => {\n const getter = getProviderGetter(config.providers, key as ProviderKey);\n if (!getter) {\n return undefined;\n }\n return getter();\n };\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Capability Registry Cache\n// ═══════════════════════════════════════════════════════════════════════════\n\n// Cache capability registries by config to avoid recreating them\nconst registryCache = new WeakMap<LombardConfig, CapabilityRegistry>();\n\n/**\n * Get or create capability registry from config\n * @internal\n */\nfunction getCapabilityRegistry(config: LombardConfig): CapabilityRegistry {\n let registry = registryCache.get(config);\n if (!registry) {\n registry = new CapabilityRegistry(config.modules, config);\n registryCache.set(config, registry);\n }\n return registry;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Context Factories\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Create core context from config\n * @internal\n */\nfunction createCoreContext(config: LombardConfig): CoreContext {\n return {\n env: config.env,\n partner: new PartnerConfiguration(config.partner),\n getProvider: createProviderResolver(config),\n logger: undefined,\n };\n}\n\n/**\n * Create BTC core context from config\n *\n * Used by BtcActions and BTC factory functions.\n *\n * @example\n * ```typescript\n * // In BtcActions\n * constructor(config: LombardConfig) {\n * this.ctx = createBtcCoreContext(config);\n * }\n *\n * // Or directly for factory functions\n * const stake = btcStake(config, params);\n * ```\n */\nexport function createBtcCoreContext(config: LombardConfig): BtcCoreContext {\n const baseContext = createCoreContext(config);\n const registry = getCapabilityRegistry(config);\n\n // Type assertions needed because registry doesn't know module types at compile time\n const btc = registry.require('btc') as BtcService;\n const api = registry.require('api') as ApiService;\n\n return {\n ...baseContext,\n btc,\n api,\n capabilities: registry,\n };\n}\n\n/**\n * Create EVM core context from config\n *\n * Used by EvmActions and EVM factory functions.\n */\nexport function createEvmCoreContext(config: LombardConfig): EvmCoreContext {\n const baseContext = createCoreContext(config);\n const registry = getCapabilityRegistry(config);\n\n // Type assertion needed because registry doesn't know module types at compile time\n const evm = registry.require('evm') as EvmService;\n\n return {\n ...baseContext,\n evm,\n };\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Legacy Exports (for backward compatibility during migration)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * @deprecated Use createBtcCoreContext(config) instead\n */\nexport const createBtcCoreContextFromConfig = createBtcCoreContext;\n\n/**\n * @deprecated Use createEvmCoreContext(config) instead\n */\nexport const createEvmCoreContextFromConfig = createEvmCoreContext;\n","/**\n * Core Types\n *\n * Common types used across the Lombard SDK.\n *\n * @module core/types\n */\n\nimport type { AssetId } from './assets';\nimport type { Chain } from './chains';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Strategy Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Common strategy statuses across all operation types\n */\nexport const StrategyStatus = {\n IDLE: 'idle',\n PREPARING: 'preparing',\n READY: 'ready',\n EXECUTING: 'executing',\n COMPLETED: 'completed',\n FAILED: 'failed',\n} as const;\n\nexport type StrategyStatus =\n (typeof StrategyStatus)[keyof typeof StrategyStatus];\n\n/**\n * Step status for progress tracking\n */\nexport const StepStatus = {\n IDLE: 'idle',\n PENDING: 'pending',\n COMPLETE: 'complete',\n FAILED: 'failed',\n} as const;\n\nexport type StepStatus = (typeof StepStatus)[keyof typeof StepStatus];\n\n/**\n * Progress information for strategy execution\n */\nexport interface StrategyProgress<TStatus extends string> {\n /** Current strategy status */\n status: TStatus;\n\n /** Individual step statuses (keys vary by strategy) */\n steps: Record<string, StepStatus>;\n\n /** Optional: Current confirmations for blockchain transactions */\n confirmations?: number;\n\n /** Optional: Required confirmations for completion */\n requiredConfirmations?: number;\n\n /** Optional: Additional metadata specific to the strategy */\n metadata?: Record<string, unknown>;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Route Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Route parameters for registry lookups\n */\nexport interface RouteParams {\n /** Input asset (optional for some operations like deposits) */\n assetIn?: AssetId;\n\n /** Output asset */\n assetOut: AssetId;\n\n /** Source blockchain (optional for some operations) */\n sourceChain?: Chain;\n\n /** Destination blockchain */\n destChain: Chain;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Deploy Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Deploy protocol identifiers\n *\n * Re-exported from defi-registry.ts which is the single source of truth.\n * Use DefiProtocol.Veda ('veda') or DefiProtocol.Silo ('silo').\n */\nexport {\n type DefiProtocol,\n DefiProtocol as DeployProtocol,\n} from '../defi/defi-registry';\n\n/**\n * Deploy configuration for stake-and-deploy operations\n */\nexport interface DeployConfig {\n /** Target protocol (use DeployProtocol.Veda or DeployProtocol.Silo) */\n protocol: string;\n\n /** Optional: Amount to deploy (partial deployment) */\n amount?: bigint;\n\n /** Optional: Slippage tolerance in basis points (e.g., 50 = 0.5%) */\n slippage?: number;\n\n /** Optional: Deadline timestamp for the deployment transaction */\n deadline?: number;\n\n /** Optional: Protocol-specific options */\n options?: Record<string, unknown>;\n}\n\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","/**\n * Strongly-typed event emitter factory\n *\n * Creates lightweight event emitters with full TypeScript type safety.\n * Unlike EventEmitter3, this implementation:\n * - Is specifically tailored for strategy events\n * - Has minimal overhead\n * - Provides perfect type inference\n * - Handles errors gracefully\n */\n\n/**\n * Event handler function type\n */\nexport type EventHandler<TArgs extends unknown[] = unknown[]> = (\n ...args: TArgs\n) => void;\n\n/**\n * Event emitter interface\n */\nexport interface EventEmitter<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Event emitter requires bivariant `any` for generic event handler constraint\n TEventMap extends Record<string, EventHandler<any>>,\n> {\n /**\n * Register an event handler\n *\n * @param event - Event name\n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n on<TEvent extends keyof TEventMap>(\n event: TEvent,\n handler: TEventMap[TEvent],\n ): () => void;\n\n /**\n * Emit an event to all registered handlers\n *\n * @param event - Event name\n * @param data - Event data (if any)\n */\n emit<TEvent extends keyof TEventMap>(\n event: TEvent,\n ...args: Parameters<TEventMap[TEvent]>\n ): void;\n\n /**\n * Remove a specific event handler\n *\n * @param event - Event name\n * @param handler - Handler function to remove\n */\n off<TEvent extends keyof TEventMap>(\n event: TEvent,\n handler: TEventMap[TEvent],\n ): void;\n\n /**\n * Clear all event handlers\n */\n clear(): void;\n}\n\n/**\n * Create a strongly-typed event emitter\n *\n * @returns Event emitter instance\n *\n * @example\n * ```typescript\n * const emitter = createEventEmitter<DepositEventMap>();\n *\n * // Register handler\n * const unsubscribe = emitter.on(DepositEvent.Progress, (progress) => {\n * console.log(progress.status);\n * });\n *\n * // Emit event\n * emitter.emit(DepositEvent.Progress, { status: 'ready', steps: {} });\n *\n * // Unsubscribe\n * unsubscribe();\n * ```\n */\nexport function createEventEmitter<\n TEventMap extends Record<string, EventHandler>,\n>(): EventEmitter<TEventMap> {\n // Store handlers in a Map for efficient lookup\n const handlers = new Map<keyof TEventMap, Set<EventHandler>>();\n\n return {\n on<TEvent extends keyof TEventMap>(\n event: TEvent,\n handler: TEventMap[TEvent],\n ): () => void {\n // Get or create handler set for this event\n let eventHandlers = handlers.get(event);\n if (!eventHandlers) {\n eventHandlers = new Set();\n handlers.set(event, eventHandlers);\n }\n\n // Add handler\n eventHandlers.add(handler as EventHandler);\n\n // Return unsubscribe function\n return () => {\n eventHandlers?.delete(handler as EventHandler);\n // Clean up empty sets\n if (eventHandlers && eventHandlers.size === 0) {\n handlers.delete(event);\n }\n };\n },\n\n emit<TEvent extends keyof TEventMap>(\n event: TEvent,\n ...args: Parameters<TEventMap[TEvent]>\n ): void {\n const eventHandlers = handlers.get(event);\n if (!eventHandlers || eventHandlers.size === 0) {\n return;\n }\n\n // Call all handlers for this event\n // Wrap in try-catch to prevent one handler from breaking others\n for (const handler of eventHandlers) {\n try {\n handler(...args);\n } catch (error) {\n // Log error but don't throw - one handler failing shouldn't break others\n console.error(\n `Error in event handler for \"${String(event)}\":`,\n error,\n );\n }\n }\n },\n\n off<TEvent extends keyof TEventMap>(\n event: TEvent,\n handler: TEventMap[TEvent],\n ): void {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.delete(handler as EventHandler);\n // Clean up empty sets\n if (eventHandlers.size === 0) {\n handlers.delete(event);\n }\n }\n },\n\n clear(): void {\n handlers.clear();\n },\n };\n}\n","/**\n * Base Action Class\n *\n * Abstract base class for all action implementations.\n * Provides:\n * - Event emission capabilities\n * - Status and error tracking (separated concerns)\n * - Type-safe event handlers\n * - Error handling utilities\n *\n * ## Error Design\n *\n * Status and error are orthogonal concerns:\n * - `status` = \"What step are you at?\" (IDLE, PREPARING, READY, etc.)\n * - `error` = \"Did something go wrong?\" (Error | null)\n * - `isFailed` = Derived from `error !== null`\n *\n * When an error occurs:\n * 1. Status stays at the step where error occurred (preserves context)\n * 2. Error is stored and accessible via `error` property\n * 3. `isFailed` returns true\n * 4. Events are emitted for listeners\n *\n * This allows easy retry - just call the method again since status\n * is already at the correct step.\n *\n * @module shared/actions/BaseAction\n */\n\nimport type { StrategyProgress } from '../../core/types';\nimport type { Logger } from '../context/types';\nimport { LombardError, ValidationErrorCode, wrapError } from '../errors';\nimport {\n createEventEmitter,\n type EventEmitter,\n type EventHandler,\n} from '../monitoring/createEventEmitter';\n\n/**\n * Log metadata for structured logging\n */\nexport interface LogMeta {\n /** Action name (e.g., 'BtcStake', 'EvmUnstake') */\n action?: string;\n /** Current step (e.g., 'prepare', 'authorize', 'execute') */\n step?: string;\n /** Current status */\n status?: string;\n /** Operation duration in milliseconds */\n duration?: number;\n /** Error code if applicable */\n errorCode?: string;\n /** Chain identifier */\n chain?: string;\n /** Any additional context */\n [key: string]: unknown;\n}\n\n/**\n * Monitorable action interface\n *\n * All actions expose this interface for consistent progress tracking.\n *\n * ## Orthogonal Concerns\n * - `status` - Which step in the flow (IDLE, NEEDS_AUTH, READY, etc.)\n * - `isLoading` - Is an async operation in progress\n * - `error` / `isFailed` - Did an error occur\n */\nexport interface MonitorableAction {\n /** Current status of the action (step in the flow) */\n readonly status: string;\n\n /** Whether an async operation is in progress */\n readonly isLoading: boolean;\n\n /** Error that occurred (if any) - null means no error */\n readonly error: LombardError | null;\n\n /** Whether the action has failed (derived from error !== null) */\n readonly isFailed: boolean;\n\n /**\n * Register an event handler\n *\n * @param event - Event to listen for\n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n on<TEvent extends string>(\n event: TEvent,\n handler: (...args: unknown[]) => void,\n ): () => void;\n}\n\n/**\n * Base action abstract class\n *\n * Provides event emission and error handling infrastructure for all actions.\n *\n * ## Error Handling Design\n *\n * Status and error are separate concerns:\n * - On error, status stays at current step (so you know WHERE it failed)\n * - Error is stored and `isFailed` returns true\n * - Retry by calling the same method again\n *\n * @example\n * ```typescript\n * class MyAction extends BaseAction<MyEventMap, MyStatus> {\n * async execute() {\n * this.assertStatus('idle', 'execute');\n * return this.act(\n * async () => {\n * // ... do work ...\n * // isLoading is true during execution\n * this.emitCompleted();\n * },\n * 'completed', // Success status\n * );\n * }\n * }\n * ```\n */\nexport abstract class BaseAction<\n TEventMap extends Record<string, EventHandler<unknown[]>>,\n TStatus extends string,\n> implements MonitorableAction\n{\n /** Event emitter for this action */\n protected readonly eventEmitter: EventEmitter<TEventMap>;\n\n /** Current status (step in the flow) */\n private _status: TStatus;\n\n /** Tracked error - null means no error */\n protected _error: LombardError | null = null;\n\n /** Loading state - true when an async operation is in progress */\n private _isLoading: boolean = false;\n\n /** Optional logger for debugging and monitoring */\n protected readonly logger?: Logger;\n\n /** Operation timing for performance monitoring */\n private _timing: Map<string, number> = new Map();\n\n constructor(initialStatus: TStatus, logger?: Logger) {\n this.eventEmitter = createEventEmitter<TEventMap>();\n this._status = initialStatus;\n this.logger = logger;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Logging\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Log a message with context\n *\n * Automatically includes action name and current status.\n * No-op if logger is not configured.\n *\n * Uses explicit switch to avoid dynamic property access (security best practice).\n */\n protected log(\n level: 'debug' | 'info' | 'warn' | 'error',\n message: string,\n meta?: LogMeta,\n ): void {\n if (!this.logger) return;\n\n const enrichedMeta: LogMeta = {\n action: this.constructor.name,\n status: this._status,\n ...meta,\n };\n\n // Explicit method calls to avoid unsafe-dynamic-method security warning\n switch (level) {\n case 'debug':\n this.logger.debug(message, enrichedMeta);\n break;\n case 'info':\n this.logger.info(message, enrichedMeta);\n break;\n case 'warn':\n this.logger.warn(message, enrichedMeta);\n break;\n case 'error':\n this.logger.error(message, enrichedMeta);\n break;\n }\n }\n\n /**\n * Get timing for an operation\n */\n public getTiming(operation: string): number | undefined {\n return this._timing.get(operation);\n }\n\n /**\n * Get all operation timings\n */\n public getAllTimings(): Record<string, number> {\n return Object.fromEntries(this._timing);\n }\n\n /**\n * Record timing for an operation\n */\n protected recordTiming(operation: string, duration: number): void {\n this._timing.set(operation, duration);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Public Getters\n // ─────────────────────────────────────────────────────────────────────────\n\n /** Current action status (which step in the flow) */\n get status(): TStatus {\n return this._status;\n }\n\n /** Error that occurred (if any) - null means no error */\n get error(): LombardError | null {\n return this._error;\n }\n\n /** Whether the action has failed (derived from error !== null) */\n get isFailed(): boolean {\n return this._error !== null;\n }\n\n /** Whether an async operation is in progress */\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Status Management\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Update the action status and emit status-change event\n */\n protected updateStatus(status: TStatus): void {\n this._status = status;\n this.emitStatusChange(status);\n }\n\n /**\n * Assert the action is in an expected status\n *\n * @param expected - Single status or array of allowed statuses\n * @param action - Name of the action being performed (for error message)\n * @throws LombardError if current status is not in expected list\n */\n protected assertStatus(expected: TStatus | TStatus[], action: string): void {\n const allowed = Array.isArray(expected) ? expected : [expected];\n if (!allowed.includes(this._status)) {\n throw new LombardError(\n ValidationErrorCode.INVALID_STATE,\n `Cannot ${action} while status is ${this._status}, allowed: ${allowed.join(', ')}`,\n );\n }\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Error Handling\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Clear any previous error\n *\n * Call this at the start of retry attempts to reset error state.\n */\n protected clearError(): void {\n this._error = null;\n }\n\n /**\n * Handle action failure\n *\n * Stores error, emits events, and throws.\n * Status is NOT changed - it stays at the step where the error occurred.\n * This allows callers to know exactly where the failure happened.\n *\n * @param error - The error that occurred\n * @throws The wrapped LombardError\n */\n protected handleFailure(error: unknown): never {\n this._error = error instanceof LombardError ? error : wrapError(error);\n this.emitError(this._error);\n this.emitFailed();\n throw this._error;\n }\n\n /**\n * Set loading state and emit event\n */\n protected setLoading(loading: boolean): void {\n this._isLoading = loading;\n this.emitLoading(loading);\n }\n\n /**\n * Perform an async operation with automatic state management\n *\n * This is the primary method for wrapping async operations in actions.\n * Handles loading state, errors, and status transitions automatically.\n *\n * ## Automatic Behaviors\n *\n * - **isLoading**: Set to true before operation, false after (success or failure)\n * - **error**: Cleared on start, set on failure\n * - **status**: Optionally transitions to `successStatus` on success\n *\n * ## Design Philosophy: Orthogonal Concerns\n *\n * Status, loading, and error are independent:\n * - `status` = \"What step are you at?\" (IDLE, NEEDS_AUTH, READY, etc.)\n * - `isLoading` = \"Is an operation in progress?\" (true/false)\n * - `error` = \"Did something go wrong?\" (Error | null)\n *\n * No transitional statuses (PREPARING, AUTHORIZING, etc.) needed!\n * The UI can derive the display state:\n * - IDLE + isLoading → \"Preparing...\"\n * - NEEDS_AUTH + isLoading → \"Authorizing...\"\n * - READY + isLoading → \"Generating...\"\n *\n * @param fn - Async function to execute\n * @param successStatus - Status to transition to on success (optional)\n * @returns Result of the operation\n *\n * @example Simple operation (no status change)\n * ```typescript\n * async execute() {\n * return this.act(async () => {\n * return this.depositAddress;\n * });\n * }\n * ```\n *\n * @example Operation with status transition\n * ```typescript\n * async authorize(): Promise<void> {\n * this.assertStatus([Status.NEEDS_AUTH, Status.READY], 'authorize');\n * if (this.status === Status.READY) return;\n *\n * return this.act(\n * async () => {\n * const result = await this.signTransaction();\n * this.authState.signature = result.signature;\n * },\n * Status.READY\n * );\n * }\n * ```\n *\n * @example Flow visualization\n * ```\n * Success flow:\n * status: NEEDS_AUTH -> NEEDS_AUTH -> READY\n * isLoading: false -> true -> false\n *\n * Failure flow:\n * status: NEEDS_AUTH -> NEEDS_AUTH (unchanged!)\n * isLoading: false -> true -> false\n * error: null -> \"User rejected\"\n * ```\n */\n protected async act<T>(\n fn: () => Promise<T>,\n successStatus?: TStatus,\n ): Promise<T> {\n const startTime = performance.now();\n const operationName = successStatus ?? 'operation';\n\n this.log('debug', `Starting ${operationName}`, { step: String(operationName) });\n this.clearError();\n this.setLoading(true);\n\n try {\n const result = await fn();\n const duration = performance.now() - startTime;\n\n this.recordTiming(String(operationName), duration);\n this.log('info', `Completed ${operationName}`, {\n step: String(operationName),\n duration: Math.round(duration),\n });\n\n if (successStatus !== undefined) {\n this.updateStatus(successStatus);\n }\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n const lombError = error instanceof LombardError ? error : wrapError(error);\n\n this.recordTiming(String(operationName), duration);\n this.log('error', `Failed ${operationName}`, {\n step: String(operationName),\n duration: Math.round(duration),\n errorCode: lombError.code,\n errorMessage: lombError.message,\n });\n\n return this.handleFailure(error);\n } finally {\n this.setLoading(false);\n }\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Event Handlers\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Register an event handler\n *\n * @param event - Event to listen for\n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n on<TEvent extends keyof TEventMap>(\n event: TEvent,\n handler: TEventMap[TEvent],\n ): () => void {\n return this.eventEmitter.on(event, handler);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Event Emission\n // ─────────────────────────────────────────────────────────────────────────\n\n /** Emit a progress update */\n protected emitProgress(progress: StrategyProgress<TStatus>): void {\n (\n this.eventEmitter as unknown as EventEmitter<\n Record<'progress', EventHandler<[StrategyProgress<TStatus>]>>\n >\n ).emit('progress', progress);\n }\n\n /** Emit a status change */\n protected emitStatusChange(status: TStatus): void {\n (\n this.eventEmitter as unknown as EventEmitter<\n Record<'status-change', EventHandler<[TStatus]>>\n >\n ).emit('status-change', status);\n }\n\n /** Emit completion event */\n protected emitCompleted(): void {\n (\n this.eventEmitter as unknown as EventEmitter<\n Record<'completed', EventHandler<[]>>\n >\n ).emit('completed');\n }\n\n /** Emit failed event */\n protected emitFailed(): void {\n (\n this.eventEmitter as unknown as EventEmitter<\n Record<'failed', EventHandler<[]>>\n >\n ).emit('failed');\n }\n\n /** Emit error event */\n protected emitError(error: LombardError): void {\n (\n this.eventEmitter as unknown as EventEmitter<\n Record<'error', EventHandler<[LombardError]>>\n >\n ).emit('error', error);\n }\n\n /** Emit loading state change */\n protected emitLoading(isLoading: boolean): void {\n (\n this.eventEmitter as unknown as EventEmitter<\n Record<'loading', EventHandler<[boolean]>>\n >\n ).emit('loading', isLoading);\n }\n\n /** Clear all event listeners */\n protected clearListeners(): void {\n this.eventEmitter.clear();\n }\n}\n","/**\n * Validation Schemas\n *\n * Centralized Zod schemas for validating SDK inputs.\n * These provide type-safe, declarative validation with clear error messages.\n *\n * @module shared/validation\n */\n\nimport * as bitcoin from 'bitcoinjs-lib';\nimport { z } from 'zod';\n\nimport { MIN_STAKE_AMOUNT_BTC } from '../../common/constants';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Address Validation Helpers\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Validate a Bitcoin address using bitcoinjs-lib\n * This validates the checksum for all address types:\n * - Legacy P2PKH (1..., m..., n...)\n * - P2SH (3..., 2...)\n * - SegWit bech32 (bc1q..., tb1q...)\n * - Taproot bech32m (bc1p..., tb1p...)\n *\n * @param address - The address to validate\n * @returns true if valid, false otherwise\n */\nexport function isValidBitcoinAddress(address: string): boolean {\n if (!address || typeof address !== 'string') {\n return false;\n }\n\n // Bech32/Bech32m addresses (bc1..., tb1...)\n if (address.startsWith('bc1') || address.startsWith('tb1')) {\n try {\n bitcoin.address.fromBech32(address);\n return true;\n } catch {\n return false;\n }\n }\n\n // Legacy and P2SH addresses (base58check)\n try {\n bitcoin.address.fromBase58Check(address);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate a Solana address (base58 with proper structure)\n * Solana addresses are ed25519 public keys encoded in base58\n *\n * Note: Unlike Bitcoin, Solana addresses don't have a built-in checksum.\n * We validate that the address decodes to exactly 32 bytes.\n *\n * @param address - The address to validate\n * @returns true if valid, false otherwise\n */\nexport function isValidSolanaAddress(address: string): boolean {\n // Base58 character set (no 0, O, I, l)\n const base58Regex = /^[1-9A-HJ-NP-Za-km-z]+$/;\n\n if (!address || typeof address !== 'string') {\n return false;\n }\n\n if (!base58Regex.test(address)) {\n return false;\n }\n\n // Solana addresses are exactly 32 bytes when decoded\n // In base58, this results in 32-44 characters\n if (address.length < 32 || address.length > 44) {\n return false;\n }\n\n // Validate the base58 decoding produces exactly 32 bytes\n try {\n const decoded = decodeBase58(address);\n return decoded.length === 32;\n } catch {\n return false;\n }\n}\n\n/**\n * Base58 decoder for validation purposes\n * Based on the Bitcoin/Solana base58 alphabet\n */\nfunction decodeBase58(str: string): Uint8Array {\n const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n const ALPHABET_MAP: Record<string, number> = {};\n for (let i = 0; i < ALPHABET.length; i++) {\n ALPHABET_MAP[ALPHABET[i]] = i;\n }\n\n if (str.length === 0) {\n return new Uint8Array(0);\n }\n\n // Count leading zeros (represented by '1' in base58)\n let leadingZeros = 0;\n for (let i = 0; i < str.length && str[i] === '1'; i++) {\n leadingZeros++;\n }\n\n // Decode the rest\n const size = Math.ceil((str.length * Math.log(58)) / Math.log(256));\n const bytes = new Uint8Array(size);\n\n for (let i = leadingZeros; i < str.length; i++) {\n const value = ALPHABET_MAP[str[i]];\n if (value === undefined) {\n throw new Error(`Invalid base58 character: ${str[i]}`);\n }\n\n let carry = value;\n for (let j = size - 1; j >= 0; j--) {\n carry += 58 * bytes[j];\n bytes[j] = carry % 256;\n carry = Math.floor(carry / 256);\n }\n }\n\n // Find first non-zero byte\n let firstNonZero = 0;\n while (firstNonZero < bytes.length && bytes[firstNonZero] === 0) {\n firstNonZero++;\n }\n\n // Combine leading zeros with decoded bytes\n const result = new Uint8Array(leadingZeros + (bytes.length - firstNonZero));\n result.fill(0, 0, leadingZeros);\n result.set(bytes.subarray(firstNonZero), leadingZeros);\n\n return result;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Amount Schemas\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Create an amount schema with configurable minimum\n *\n * @param minAmount - Minimum amount in human-readable format (e.g., 0.0002)\n * @returns Zod schema for amount validation\n */\nexport function createAmountSchema(minAmount?: number) {\n const baseSchema = z\n .string({ message: 'Amount is required' })\n .min(1, 'Amount is required')\n .refine(val => val !== '0', {\n message: 'Amount must be greater than 0',\n })\n .refine(\n val => {\n const num = Number.parseFloat(val);\n return !Number.isNaN(num) && num > 0;\n },\n { message: 'Invalid amount format' },\n );\n\n if (minAmount !== undefined && minAmount > 0) {\n return baseSchema.refine(\n val => {\n const num = Number.parseFloat(val);\n return num >= minAmount;\n },\n { message: `Amount must be at least ${minAmount}` },\n );\n }\n\n return baseSchema;\n}\n\n/**\n * Amount validation (human-readable string, e.g., \"0.1\")\n *\n * Validates:\n * - Non-empty string\n * - Not \"0\"\n * - Parses to positive number\n *\n * Used for both BTC and EVM amounts.\n */\nexport const amountSchema = createAmountSchema();\n\n/**\n * BTC stake amount schema with minimum 0.0002 BTC\n */\nexport const btcStakeAmountSchema = createAmountSchema(MIN_STAKE_AMOUNT_BTC);\n\n/** @deprecated Use amountSchema instead */\nexport const btcAmountSchema = amountSchema;\n\n/** Alias for EVM operations */\nexport const evmAmountSchema = amountSchema;\n\n/**\n * Satoshi amount validation (bigint or number)\n */\nexport const satoshiAmountSchema = z\n .union([z.bigint(), z.number()])\n .refine(val => val > 0, { message: 'Amount must be greater than 0' });\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Address Schemas\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * EVM address validation (0x + 40 hex chars)\n */\nexport const evmAddressSchema = z\n .string({ message: 'Address is required' })\n .regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid EVM address format');\n\n/**\n * Solana address validation (base58, exactly 32 bytes when decoded)\n * Uses proper base58 decoding to verify the address structure\n */\nexport const solanaAddressSchema = z\n .string({ message: 'Address is required' })\n .refine(isValidSolanaAddress, { message: 'Invalid Solana address format' });\n\n/**\n * Sui address validation (0x + 64 hex chars)\n */\nexport const suiAddressSchema = z\n .string({ message: 'Address is required' })\n .regex(/^0x[a-fA-F0-9]{64}$/, 'Invalid Sui address format');\n\n/**\n * Starknet address validation (0x + 1-64 hex chars)\n */\nexport const starknetAddressSchema = z\n .string({ message: 'Address is required' })\n .regex(/^0x[a-fA-F0-9]{1,64}$/, 'Invalid Starknet address format');\n\n/**\n * Bitcoin address validation with proper checksum verification\n * Uses bitcoinjs-lib to validate all address formats:\n * - Legacy P2PKH (1..., m..., n...)\n * - P2SH (3..., 2...)\n * - SegWit bech32 (bc1q..., tb1q...)\n * - Taproot bech32m (bc1p..., tb1p...)\n */\nexport const bitcoinAddressSchema = z\n .string({ message: 'Address is required' })\n .refine(isValidBitcoinAddress, { message: 'Invalid Bitcoin address format' });\n\n/**\n * Map of chain type to address schema\n */\nexport const addressSchemasByChainType = {\n evm: evmAddressSchema,\n solana: solanaAddressSchema,\n sui: suiAddressSchema,\n starknet: starknetAddressSchema,\n bitcoin: bitcoinAddressSchema,\n} as const;\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Common Schemas\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Referral code validation (optional string)\n */\nexport const referralCodeSchema = z.string().optional();\n\n/**\n * Transaction hash validation (0x + 64 hex chars)\n */\nexport const txHashSchema = z\n .string()\n .regex(/^0x[a-fA-F0-9]{64}$/, 'Invalid transaction hash');\n\n// ═══════════════════════════════════════════════════════════════════════════\n// BTC Stake Schemas\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * BTC Stake prepare params schema (base - recipient validated separately per chain)\n */\nexport const btcStakePrepareBaseSchema = z.object({\n amount: btcStakeAmountSchema,\n recipient: z\n .string({ message: 'Recipient is required' })\n .min(1, 'Recipient is required'),\n referralCode: referralCodeSchema,\n});\n\n/**\n * Create a prepare schema with chain-specific address validation\n */\nexport function createBtcStakePrepareSchema(addressSchema: z.ZodString) {\n return z.object({\n amount: btcStakeAmountSchema,\n recipient: addressSchema,\n referralCode: referralCodeSchema,\n });\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Type Exports\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport type Amount = z.infer<typeof amountSchema>;\n/** @deprecated Use Amount instead */\nexport type BtcAmount = Amount;\nexport type EvmAddress = z.infer<typeof evmAddressSchema>;\nexport type SolanaAddress = z.infer<typeof solanaAddressSchema>;\nexport type SuiAddress = z.infer<typeof suiAddressSchema>;\nexport type StarknetAddress = z.infer<typeof starknetAddressSchema>;\nexport type BitcoinAddress = z.infer<typeof bitcoinAddressSchema>;\nexport type BtcStakePrepareParams = z.infer<typeof btcStakePrepareBaseSchema>;\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Validation Helpers\n// ═══════════════════════════════════════════════════════════════════════════\n\nimport type { Chain } from '../../core';\nimport { LombardError } from '../errors';\n\n/**\n * Validation error handler configuration\n */\nexport interface ValidationErrorConfig {\n /** Chain for address validation errors (optional) */\n destChain?: Chain;\n}\n\n/**\n * Validate prepare params with standard error handling\n *\n * This helper provides consistent Zod validation with LombardError mapping:\n * - 'amount' field → LombardError.invalidAmount()\n * - 'recipient' field → LombardError.invalidAddress()\n * - Other fields → LombardError.invalidParameter()\n *\n * @example\n * ```typescript\n * private validatePrepareParams(params: PrepareParams) {\n * return validatePrepareParams(this.prepareSchema, params, {\n * destChain: this.params.destChain,\n * });\n * }\n * ```\n */\nexport function validatePrepareParams<T>(\n schema: z.ZodSchema<T>,\n params: unknown,\n config: ValidationErrorConfig = {},\n): T {\n const result = schema.safeParse(params);\n\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n const path = firstIssue?.path[0];\n const message = firstIssue?.message ?? 'Invalid parameter';\n\n if (path === 'amount') {\n throw LombardError.invalidAmount(message);\n }\n if (path === 'recipient') {\n throw LombardError.invalidAddress(\n (params as Record<string, unknown>)?.recipient as string,\n config.destChain,\n );\n }\n throw LombardError.invalidParameter(String(path), message);\n }\n\n return result.data;\n}\n\n/**\n * Validate and parse input, throwing error on failure\n */\nexport function validateOrThrow<T>(\n schema: z.ZodSchema<T>,\n data: unknown,\n errorFactory: (message: string) => Error,\n): T {\n const result = schema.safeParse(data);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n throw errorFactory(firstIssue?.message ?? 'Validation failed');\n }\n return result.data;\n}\n\n/**\n * Validate input, returning result object\n */\nexport function validate<T>(\n schema: z.ZodSchema<T>,\n data: unknown,\n): { success: true; data: T } | { success: false; error: z.ZodError } {\n const result = schema.safeParse(data);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, error: result.error };\n}\n","/**\n * Status constants for all action types\n *\n * These constants replace magic strings throughout the codebase\n * and provide type-safe status values.\n *\n * ## Error Design\n *\n * Note: There is NO 'failed' status. Error handling is separate from status:\n * - `status` = \"What step are you at?\" (flow position)\n * - `error` = \"Did something go wrong?\" (Error | null)\n * - `isFailed` = Derived from `error !== null`\n *\n * When an error occurs, status stays at the step where it happened.\n * This allows:\n * 1. Knowing WHERE the error occurred (status tells you)\n * 2. Easy retry - just call the method again\n * 3. Simpler state machine - status only flows forward\n */\n\n// ═══════════════════════════════════════════════════════════════════════════\n// BTC Actions - Unified Status\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Unified BTC Action Status\n *\n * Single source of truth for all BTC action statuses.\n * All BTC actions (Stake, Deposit, StakeAndDeploy, DepositAndDeploy) use this.\n *\n * Status represents \"what step are you at\" - no transitional statuses.\n * Use `isLoading` for operation-in-progress state.\n *\n * ## Flow Examples\n *\n * **BtcStake/BtcDeposit (to Ethereum):**\n * IDLE → NEEDS_FEE_AUTHORIZATION → READY → ADDRESS_READY\n *\n * **BtcStake/BtcDeposit (to non-Ethereum):**\n * IDLE → NEEDS_ADDRESS_CONFIRMATION → READY → ADDRESS_READY\n *\n * **BtcStakeAndDeploy/BtcDepositAndDeploy:**\n * IDLE → NEEDS_DEPLOY_AUTHORIZATION → READY → ADDRESS_READY\n */\nexport const BtcActionStatus = {\n /** Initial state - ready for prepare() */\n IDLE: 'idle',\n\n // Authorization states (mutually exclusive - action uses one based on config)\n /** User needs to sign fee authorization (EVM stake/deposit to Ethereum) */\n NEEDS_FEE_AUTHORIZATION: 'needs_fee_authorization',\n /** User needs to confirm destination address (non-Ethereum destinations) */\n NEEDS_ADDRESS_CONFIRMATION: 'needs_address_confirmation',\n /** User needs to sign vault deploy authorization (stake-and-deploy, deposit-and-deploy) */\n NEEDS_DEPLOY_AUTHORIZATION: 'needs_deploy_authorization',\n\n /** Authorization complete - ready to generate address */\n READY: 'ready',\n\n /** Deposit address generated - awaiting BTC deposit */\n ADDRESS_READY: 'address_ready',\n} as const;\n\nexport type BtcActionStatus =\n (typeof BtcActionStatus)[keyof typeof BtcActionStatus];\n\n/**\n * EVM operation statuses (Deposit, Stake, Deploy, Unstake, Redeem)\n *\n * Simplified - use isLoading for operation-in-progress.\n *\n * ## Flow Examples\n *\n * **EVM Unstake (LBTC → BTC.b on Ethereum/Sepolia):**\n * IDLE → NEEDS_FEE_AUTHORIZATION → READY → COMPLETED\n *\n * **EVM Unstake (LBTC → BTC.b on Base/BSC - subsidized):**\n * IDLE → READY → COMPLETED\n *\n * **EVM Redeem (BTC.b → BTC on Ethereum/Sepolia):**\n * IDLE → NEEDS_FEE_AUTHORIZATION → READY → COMPLETED\n */\nexport const EvmOperationStatus = {\n IDLE: 'idle',\n /** User needs to sign fee authorization (Ethereum/Sepolia only) */\n NEEDS_FEE_AUTHORIZATION: 'needs_fee_authorization',\n /** User needs to approve token spending */\n NEEDS_APPROVAL: 'needs-approval',\n READY: 'ready',\n CONFIRMING: 'confirming',\n COMPLETED: 'completed',\n} as const;\n\nexport type EvmOperationStatus =\n (typeof EvmOperationStatus)[keyof typeof EvmOperationStatus];\n\n/**\n * Solana/Sui/Starknet Unstake operation statuses\n */\nexport const NonEvmUnstakeStatus = {\n IDLE: 'idle',\n READY: 'ready',\n CONFIRMING: 'confirming',\n COMPLETED: 'completed',\n} as const;\n\nexport type NonEvmUnstakeStatus =\n (typeof NonEvmUnstakeStatus)[keyof typeof NonEvmUnstakeStatus];\n"],"names":["SDK_VERSION","SDK_NAME","SDK_RUNTIME","ErrorCode","ProviderErrorCode","RegistryErrorCode","ValidationErrorCode","ContractErrorCode","WithdrawErrorCode","LombardError","code","message","metadata","__publicField","chain","providerType","moduleId","method","cause","causeMessage","operation","params","reason","parameter","address","amount","minimum","asset","required","available","parameterName","txHash","revertReason","token","spender","isLombardError","error","wrapError","CHAIN_PREFIXES","CAIP2_SEPARATOR","caip2","prefix","reference","Chain","chainValueToKey","value","key","isChain","CHAIN_CATALOG","SOLANA_GENESIS_TO_CHAIN","SOLANA_MAINNET_CHAIN","SOLANA_DEVNET_CHAIN","SOLANA_TESTNET_CHAIN","STARKNET_NETWORK_TO_CHAIN_ID","STARKNET_MAINNET_CHAIN","STARKNET_SEPOLIA_CHAIN","starknetNetworkToChainId","network","getChainMetadata","getChainName","getChainType","isTestnet","isMainnet","isEvmChain","withSeparator","parseChainIdentifier","evmPrefix","chainId","isValidChain","solanaPrefix","legacyChain","isSolanaChain","mappedChain","suiPrefix","isSuiChain","starknetPrefix","starknetChainId","evmChainIdToChain","ASSET_CATALOG","AssetId","Env","DEFAULT_DECIMALS","findDeployment","catalog","env","entry","d","_a","getAssetAddress","getAssetDecimals","getAssetRouter","usesAssetRouter","getBridgeAdapter","getPublicMarketMaker","isAssetDeployed","getAssetByAddress","normalized","assetId","getAssetChains","chains","getAssetEnvironments","envs","getSupportedAssets","getAllAssetChains","chainSet","c","getAssetChainsForEnvs","getAssetMetadata","getEvmAssetChains","getChainsWithAllAssets","assets","firstAssetChains","i","assetChains","getEvmChainsWithAllAssets","PartnerConfiguration","config","getProviderGetter","providers","getter","CapabilityRegistry","modules","mod","id","createProviderResolver","registryCache","getCapabilityRegistry","registry","createCoreContext","createBtcCoreContext","baseContext","btc","api","createEvmCoreContext","evm","StrategyStatus","StepStatus","util","_","assertIs","_arg","assertNever","_x","items","obj","item","validKeys","k","filtered","e","object","keys","arr","checker","val","joinValues","array","separator","objectUtil","first","second","ZodParsedType","getParsedType","data","ZodIssueCode","ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","curr","el","formErrors","firstEl","errorMap","_ctx","overrideErrorMap","defaultErrorMap","getErrorMap","makeIssue","path","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","m","map","addIssueToContext","ctx","overrideMap","x","ParseStatus","status","results","arrayValue","s","INVALID","pairs","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","ParseInputLazyPath","parent","handleResult","result","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","input","err","_b","maybeAsyncResult","check","getIssueProperties","setError","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","args","secondsRegexSource","secondsQuantifier","timeRegex","datetimeRegex","regex","opts","isValidIP","ip","version","isValidJWT","jwt","alg","header","base64","decoded","isValidCidr","ZodString","tooBig","tooSmall","validation","options","minLength","maxLength","len","ch","min","max","floatSafeRemainder","step","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","kind","inclusive","ZodBigInt","ZodBoolean","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shape","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","defaultError","augmentation","merging","index","mask","newField","createZodEnum","handleResults","unionErrors","childCtx","dirty","types","mergeValues","a","b","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","merged","left","right","itemIndex","rest","schemas","ZodMap","keyType","valueType","finalMap","ZodSet","finalizeSet","elements","parsedSet","element","minSize","maxSize","size","ZodLazy","ZodLiteral","values","ZodEnum","expectedValues","enumValues","newDef","opt","ZodNativeEnum","nativeEnumValues","promisified","effect","checkCtx","arg","processed","executeRefinement","acc","inner","base","preprocess","type","newCtx","ZodNaN","inResult","freeze","stringType","numberType","bigIntType","objectType","unionType","createEventEmitter","handlers","event","handler","eventHandlers","BaseAction","initialStatus","logger","level","meta","enrichedMeta","duration","expected","action","allowed","loading","fn","successStatus","startTime","operationName","lombError","progress","isLoading","isValidBitcoinAddress","bitcoin","isValidSolanaAddress","base58Regex","decodeBase58","str","ALPHABET","ALPHABET_MAP","leadingZeros","bytes","carry","j","firstNonZero","createAmountSchema","minAmount","baseSchema","z.string","num","amountSchema","btcStakeAmountSchema","MIN_STAKE_AMOUNT_BTC","evmAmountSchema","z.union","z.bigint","z.number","evmAddressSchema","solanaAddressSchema","suiAddressSchema","starknetAddressSchema","bitcoinAddressSchema","referralCodeSchema","z.object","validatePrepareParams","firstIssue","BtcActionStatus","EvmOperationStatus","NonEvmUnstakeStatus"],"mappings":"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","x_google_ignoreList":[12,13,14,15,16,17,18]}