@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.
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +6 -6
- package/dist/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.d.ts.map +1 -1
- package/dist/api-functions/getDepositBtcAddress/getDepositBtcAddress.d.ts.map +1 -1
- package/dist/api.cjs +1 -1
- package/dist/api.js +29 -29
- package/dist/bridge.cjs +1 -1
- package/dist/bridge.js +7 -7
- package/dist/btc.cjs +1 -1
- package/dist/btc.js +10 -10
- package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts +7 -4
- package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts.map +1 -1
- package/dist/chains/btc/actions/deposit/config/index.d.ts +16 -8
- package/dist/chains/btc/actions/deposit/config/index.d.ts.map +1 -1
- package/dist/chains/btc/actions/deposit/config/solana.d.ts +20 -0
- package/dist/chains/btc/actions/deposit/config/solana.d.ts.map +1 -0
- package/dist/chains/btc/actions/deposit/config/types.d.ts +4 -3
- package/dist/chains/btc/actions/deposit/config/types.d.ts.map +1 -1
- package/dist/chains/evm/EvmActions.d.ts +4 -4
- package/dist/chains/evm/actions/deposit/config/evm.d.ts +3 -3
- package/dist/chains/evm/actions/deposit/config/evm.d.ts.map +1 -1
- package/dist/chains/evm/actions/deposit/config/types.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/config/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/deposit/factory.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/types.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/redeem/EvmRedeem.d.ts.map +1 -1
- package/dist/chains/evm/actions/unstake/EvmUnstake.d.ts.map +1 -1
- package/dist/chains/solana/SolanaActions.d.ts +10 -0
- package/dist/chains/solana/SolanaActions.d.ts.map +1 -1
- package/dist/chains/solana/actions/index.d.ts +1 -0
- package/dist/chains/solana/actions/index.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts +37 -0
- package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/index.d.ts +8 -0
- package/dist/chains/solana/actions/redeem/config/index.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/solana.d.ts +22 -0
- package/dist/chains/solana/actions/redeem/config/solana.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/types.d.ts +35 -0
- package/dist/chains/solana/actions/redeem/config/types.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/factory.d.ts +12 -0
- package/dist/chains/solana/actions/redeem/factory.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/index.d.ts +9 -0
- package/dist/chains/solana/actions/redeem/index.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/types.d.ts +52 -0
- package/dist/chains/solana/actions/redeem/types.d.ts.map +1 -0
- package/dist/chains/solana/utils.d.ts +15 -0
- package/dist/chains/solana/utils.d.ts.map +1 -0
- package/dist/chunks/BtcActions-BOVJrdTI.cjs +2 -0
- package/dist/chunks/BtcActions-BOVJrdTI.cjs.map +1 -0
- package/dist/chunks/{BtcActions-k-qs1uO0.js → BtcActions-_a8r3Q7c.js} +457 -414
- package/dist/chunks/BtcActions-_a8r3Q7c.js.map +1 -0
- package/dist/chunks/{EvmActions-B_dF42So.js → EvmActions-D4vFpbYk.js} +163 -173
- package/dist/chunks/EvmActions-D4vFpbYk.js.map +1 -0
- package/dist/chunks/EvmActions-VrDbgMDy.cjs +2 -0
- package/dist/chunks/EvmActions-VrDbgMDy.cjs.map +1 -0
- package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs +2 -0
- package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs.map +1 -0
- package/dist/chunks/{ReferralsClient-DbFWWtVi.js → ReferralsClient-DvEsA3II.js} +160 -160
- package/dist/chunks/ReferralsClient-DvEsA3II.js.map +1 -0
- package/dist/chunks/{api-config-CtcP3TVl.js → api-config-Dm6dR85f.js} +6 -6
- package/dist/chunks/{api-config-CtcP3TVl.js.map → api-config-Dm6dR85f.js.map} +1 -1
- package/dist/chunks/{approveLBTC-CZiZmdcX.cjs → approveLBTC-CUXEC3kw.cjs} +2 -2
- package/dist/chunks/{approveLBTC-CZiZmdcX.cjs.map → approveLBTC-CUXEC3kw.cjs.map} +1 -1
- package/dist/chunks/approveLBTC-Du2El1tW.js +26 -0
- package/dist/chunks/{approveLBTC-B5-ZWqct.js.map → approveLBTC-Du2El1tW.js.map} +1 -1
- package/dist/chunks/{array-Cev6kyLJ.js → array-DYttUPf5.js} +7 -7
- package/dist/chunks/{array-Cev6kyLJ.js.map → array-DYttUPf5.js.map} +1 -1
- package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs → blockchain-identifier-BTPGxLio.cjs} +2 -2
- package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs.map → blockchain-identifier-BTPGxLio.cjs.map} +1 -1
- package/dist/chunks/{blockchain-identifier-BmadkNtK.js → blockchain-identifier-CTVaEPpY.js} +24 -24
- package/dist/chunks/{blockchain-identifier-BmadkNtK.js.map → blockchain-identifier-CTVaEPpY.js.map} +1 -1
- package/dist/chunks/{bridge-CTsiodO1.js → bridge-DqGabhIY.js} +13 -13
- package/dist/chunks/{bridge-CTsiodO1.js.map → bridge-DqGabhIY.js.map} +1 -1
- package/dist/chunks/{bridge-BzRlY9pP.cjs → bridge-dWaKrMKm.cjs} +2 -2
- package/dist/chunks/{bridge-BzRlY9pP.cjs.map → bridge-dWaKrMKm.cjs.map} +1 -1
- package/dist/chunks/{config-hFKqUyg3.js → config-DghboRx0.js} +10 -10
- package/dist/chunks/{config-hFKqUyg3.js.map → config-DghboRx0.js.map} +1 -1
- package/dist/chunks/{config-l4ZaZw_g.cjs → config-DmCmanM_.cjs} +2 -2
- package/dist/chunks/{config-l4ZaZw_g.cjs.map → config-DmCmanM_.cjs.map} +1 -1
- package/dist/chunks/constants-D1FnS2Z8.js +6 -0
- package/dist/chunks/constants-D1FnS2Z8.js.map +1 -0
- package/dist/chunks/constants-ueShGH9R.cjs +2 -0
- package/dist/chunks/constants-ueShGH9R.cjs.map +1 -0
- package/dist/chunks/{defi-registry-BIRv_zkp.cjs → defi-registry-DDNavtO1.cjs} +2 -2
- package/dist/chunks/{defi-registry-BIRv_zkp.cjs.map → defi-registry-DDNavtO1.cjs.map} +1 -1
- package/dist/chunks/{defi-registry-wNFN3qyB.js → defi-registry-DxjjBQTV.js} +13 -13
- package/dist/chunks/{defi-registry-wNFN3qyB.js.map → defi-registry-DxjjBQTV.js.map} +1 -1
- package/dist/chunks/{depositStatus-DM7fRmbN.js → depositStatus-05_X7FVs.js} +42 -42
- package/dist/chunks/{depositStatus-DM7fRmbN.js.map → depositStatus-05_X7FVs.js.map} +1 -1
- package/dist/chunks/{depositStatus-C3-EgT2a.cjs → depositStatus-CUjHpXFJ.cjs} +2 -2
- package/dist/chunks/{depositStatus-C3-EgT2a.cjs.map → depositStatus-CUjHpXFJ.cjs.map} +1 -1
- package/dist/chunks/events-5c8IHjEF.cjs +2 -0
- package/dist/chunks/events-5c8IHjEF.cjs.map +1 -0
- package/dist/chunks/{events-DdV_xi-2.js → events-rgJZNpHd.js} +414 -303
- package/dist/chunks/events-rgJZNpHd.js.map +1 -0
- package/dist/chunks/evm-by-btc-address-CZvE15lx.js +39 -0
- package/dist/chunks/{evm-by-btc-address-CwLiENtM.js.map → evm-by-btc-address-CZvE15lx.js.map} +1 -1
- package/dist/chunks/fee-requirements-CCNsxAvJ.js +14 -0
- package/dist/chunks/{fee-requirements-x8-8mpJ7.js.map → fee-requirements-CCNsxAvJ.js.map} +1 -1
- package/dist/chunks/get-exchange-ratio-B-xzYND1.js +20 -0
- package/dist/chunks/{get-exchange-ratio-NtnkG1kZ.js.map → get-exchange-ratio-B-xzYND1.js.map} +1 -1
- package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs → get-exchange-ratio-BEhD4gLB.cjs} +2 -2
- package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs.map → get-exchange-ratio-BEhD4gLB.cjs.map} +1 -1
- package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs → get-positions-summary-Dh1QPLYO.cjs} +2 -2
- package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs.map → get-positions-summary-Dh1QPLYO.cjs.map} +1 -1
- package/dist/chunks/{get-positions-summary-B_MmGHLv.js → get-positions-summary-iYshN1RQ.js} +28 -28
- package/dist/chunks/{get-positions-summary-B_MmGHLv.js.map → get-positions-summary-iYshN1RQ.js.map} +1 -1
- package/dist/chunks/{get-vault-tvl-YAXePAW3.js → get-vault-tvl-Ct_Zkg7C.js} +41 -41
- package/dist/chunks/{get-vault-tvl-YAXePAW3.js.map → get-vault-tvl-Ct_Zkg7C.js.map} +1 -1
- package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs → get-vault-tvl-D_tQIDAs.cjs} +2 -2
- package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs.map → get-vault-tvl-D_tQIDAs.cjs.map} +1 -1
- package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs → get-vault-withdrawals-8ALlEiAC.cjs} +2 -2
- package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs.map → get-vault-withdrawals-8ALlEiAC.cjs.map} +1 -1
- package/dist/chunks/get-vault-withdrawals-jk7Sv4S4.js +161 -0
- package/dist/chunks/{get-vault-withdrawals-BrpZlt6s.js.map → get-vault-withdrawals-jk7Sv4S4.js.map} +1 -1
- package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs → getSharesByAddress-D8hehnP1.cjs} +2 -2
- package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs.map → getSharesByAddress-D8hehnP1.cjs.map} +1 -1
- package/dist/chunks/{getSharesByAddress-BiruCDp6.js → getSharesByAddress-_tBaIBsw.js} +38 -38
- package/dist/chunks/{getSharesByAddress-BiruCDp6.js.map → getSharesByAddress-_tBaIBsw.js.map} +1 -1
- package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs +2 -0
- package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs.map +1 -0
- package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js +125 -0
- package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js.map +1 -0
- package/dist/chunks/lbtc-addresses-D8MYCdsx.js +10 -0
- package/dist/chunks/{lbtc-addresses-BLRmtR3c.js.map → lbtc-addresses-D8MYCdsx.js.map} +1 -1
- package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs → lbtc-addresses-Kil252DX.cjs} +2 -2
- package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs.map → lbtc-addresses-Kil252DX.cjs.map} +1 -1
- package/dist/chunks/numbers-CclN2Ohk.js +15 -0
- package/dist/chunks/{numbers-CM-lcmt4.js.map → numbers-CclN2Ohk.js.map} +1 -1
- package/dist/chunks/parameters-C_16L5ft.js +11 -0
- package/dist/chunks/{parameters-CDV-6Hk5.js.map → parameters-C_16L5ft.js.map} +1 -1
- package/dist/chunks/satoshi-CSoJBXc6.js +19 -0
- package/dist/chunks/{satoshi-Ch6y8aYG.js.map → satoshi-CSoJBXc6.js.map} +1 -1
- package/dist/chunks/statusConstants-Cri7yswV.cjs +2 -0
- package/dist/chunks/statusConstants-Cri7yswV.cjs.map +1 -0
- package/dist/chunks/{statusConstants-DFxMrVob.js → statusConstants-Zii1786K.js} +1134 -1113
- package/dist/chunks/statusConstants-Zii1786K.js.map +1 -0
- package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js → storeNetworkFeeSignature-BODIpq3Y.js} +26 -26
- package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js.map → storeNetworkFeeSignature-BODIpq3Y.js.map} +1 -1
- package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs → storeNetworkFeeSignature-Buk4091C.cjs} +2 -2
- package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs.map → storeNetworkFeeSignature-Buk4091C.cjs.map} +1 -1
- package/dist/chunks/time-Sa5gggPG.js +24 -0
- package/dist/chunks/{time-QPeEEEnQ.js.map → time-Sa5gggPG.js.map} +1 -1
- package/dist/chunks/{token-addresses-FKpA3uc4.js → token-addresses-D0v5cR1j.js} +174 -163
- package/dist/chunks/{token-addresses-FKpA3uc4.js.map → token-addresses-D0v5cR1j.js.map} +1 -1
- package/dist/chunks/{token-addresses-DRBecUa7.cjs → token-addresses-nzvTOi24.cjs} +2 -2
- package/dist/chunks/{token-addresses-DRBecUa7.cjs.map → token-addresses-nzvTOi24.cjs.map} +1 -1
- package/dist/chunks/{tokens-D_HeVB5p.cjs → tokens-BkvA0Gp1.cjs} +2 -2
- package/dist/chunks/{tokens-D_HeVB5p.cjs.map → tokens-BkvA0Gp1.cjs.map} +1 -1
- package/dist/chunks/{tokens-C6qZHzph.js → tokens-DgC1hfkm.js} +18 -18
- package/dist/chunks/{tokens-C6qZHzph.js.map → tokens-DgC1hfkm.js.map} +1 -1
- package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs → unstakeLBTC-CmoCaGX9.cjs} +2 -2
- package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs.map → unstakeLBTC-CmoCaGX9.cjs.map} +1 -1
- package/dist/chunks/{unstakeLBTC-DAIR9NO_.js → unstakeLBTC-DtvVbpbU.js} +50 -50
- package/dist/chunks/{unstakeLBTC-DAIR9NO_.js.map → unstakeLBTC-DtvVbpbU.js.map} +1 -1
- package/dist/chunks/{withdraw-hHueI2p7.js → withdraw-DgjuaUN3.js} +45 -45
- package/dist/chunks/{withdraw-hHueI2p7.js.map → withdraw-DgjuaUN3.js.map} +1 -1
- package/dist/chunks/{withdraw-C1fMFSwy.cjs → withdraw-i0AueZ_C.cjs} +2 -2
- package/dist/chunks/{withdraw-C1fMFSwy.cjs.map → withdraw-i0AueZ_C.cjs.map} +1 -1
- package/dist/common/constants.d.ts +1 -0
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/contracts.cjs +1 -1
- package/dist/contracts.js +16 -16
- package/dist/core/assets/catalog.d.ts.map +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +85 -85
- package/dist/debug.js +4 -4
- package/dist/defi.cjs +1 -1
- package/dist/defi.js +10 -10
- package/dist/evm.cjs +1 -1
- package/dist/evm.js +34 -34
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +287 -283
- package/dist/index.js.map +1 -1
- package/dist/metrics.cjs +1 -1
- package/dist/metrics.js +6 -6
- package/dist/stories/arg-types.d.ts +1 -0
- package/dist/stories/arg-types.d.ts.map +1 -1
- package/dist/tokens/token-addresses.d.ts +2 -2
- package/dist/tokens/token-addresses.d.ts.map +1 -1
- package/dist/utils/chain.d.ts +7 -0
- package/dist/utils/chain.d.ts.map +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +76 -76
- package/dist/vaults.cjs +1 -1
- package/dist/vaults.js +14 -14
- package/package.json +19 -6
- package/dist/chunks/BtcActions-XbVRQEcM.cjs +0 -2
- package/dist/chunks/BtcActions-XbVRQEcM.cjs.map +0 -1
- package/dist/chunks/BtcActions-k-qs1uO0.js.map +0 -1
- package/dist/chunks/EvmActions-BVzQ3fLK.cjs +0 -2
- package/dist/chunks/EvmActions-BVzQ3fLK.cjs.map +0 -1
- package/dist/chunks/EvmActions-B_dF42So.js.map +0 -1
- package/dist/chunks/ReferralsClient-BC-1wT1q.cjs +0 -2
- package/dist/chunks/ReferralsClient-BC-1wT1q.cjs.map +0 -1
- package/dist/chunks/ReferralsClient-DbFWWtVi.js.map +0 -1
- package/dist/chunks/approveLBTC-B5-ZWqct.js +0 -26
- package/dist/chunks/constants-BBK-JNcY.cjs +0 -2
- package/dist/chunks/constants-BBK-JNcY.cjs.map +0 -1
- package/dist/chunks/constants-CuT4axsy.js +0 -5
- package/dist/chunks/constants-CuT4axsy.js.map +0 -1
- package/dist/chunks/events-DdV_xi-2.js.map +0 -1
- package/dist/chunks/events-DqIJRzJo.cjs +0 -2
- package/dist/chunks/events-DqIJRzJo.cjs.map +0 -1
- package/dist/chunks/evm-by-btc-address-CwLiENtM.js +0 -39
- package/dist/chunks/fee-requirements-x8-8mpJ7.js +0 -14
- package/dist/chunks/get-exchange-ratio-NtnkG1kZ.js +0 -20
- package/dist/chunks/get-vault-withdrawals-BrpZlt6s.js +0 -161
- package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs +0 -2
- package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs.map +0 -1
- package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js +0 -120
- package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js.map +0 -1
- package/dist/chunks/lbtc-addresses-BLRmtR3c.js +0 -10
- package/dist/chunks/numbers-CM-lcmt4.js +0 -15
- package/dist/chunks/parameters-CDV-6Hk5.js +0 -11
- package/dist/chunks/satoshi-Ch6y8aYG.js +0 -19
- package/dist/chunks/statusConstants-BLiNBT6s.cjs +0 -2
- package/dist/chunks/statusConstants-BLiNBT6s.cjs.map +0 -1
- package/dist/chunks/statusConstants-DFxMrVob.js.map +0 -1
- package/dist/chunks/time-QPeEEEnQ.js +0 -24
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events-DqIJRzJo.cjs","sources":["../../src/utils/consoleLogger.ts","../../src/utils/http.ts","../../src/client/ApiNamespace.ts","../../src/config/validation.ts","../../src/services/ApiService.ts","../../src/modules/apiModule.ts","../../src/client/createConfig.ts","../../src/chains/solana/actions/unstake/config/btc.ts","../../src/chains/solana/actions/unstake/SolanaUnstake.ts","../../src/chains/solana/SolanaActions.ts","../../src/chains/starknet/actions/unstake/config/btc.ts","../../src/chains/starknet/actions/unstake/StarknetUnstake.ts","../../src/chains/starknet/StarknetActions.ts","../../src/chains/sui/actions/unstake/config/btc.ts","../../src/chains/sui/actions/unstake/SuiUnstake.ts","../../src/chains/sui/SuiActions.ts","../../src/client/AssetNamespace.ts","../../src/client/LombardSDK.ts","../../src/client/createLombardSDK.ts","../../src/config/providers.ts","../../src/shared/events.ts"],"sourcesContent":["/**\n * Console Logger Factory\n *\n * Creates a logger that outputs to the console with configurable log levels.\n * Used when `debug: true` is set in SDK configuration.\n *\n * @module utils/consoleLogger\n */\n\nimport type { Logger } from '../shared/context/types';\n\n/**\n * Log level hierarchy (from most to least verbose)\n */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'none';\n\n/**\n * Options for creating a console logger\n */\nexport interface ConsoleLoggerOptions {\n /**\n * Minimum log level to output\n *\n * - 'debug': All logs (most verbose)\n * - 'info': Info, warnings, and errors\n * - 'warn': Warnings and errors only\n * - 'error': Errors only\n * - 'none': No logs (silent)\n *\n * @default 'debug'\n */\n level?: LogLevel;\n\n /**\n * Prefix for all log messages\n *\n * @default '[Lombard SDK]'\n */\n prefix?: string;\n\n /**\n * Include timestamp in log messages\n *\n * @default false\n */\n timestamp?: boolean;\n}\n\nconst LOG_LEVELS: LogLevel[] = ['debug', 'info', 'warn', 'error', 'none'];\n\n/**\n * Create a console logger with configurable options\n *\n * @param options - Logger configuration options\n * @returns Logger instance that outputs to console\n *\n * @example\n * ```typescript\n * // Basic usage - log everything\n * const logger = createConsoleLogger();\n *\n * // Only warnings and errors\n * const logger = createConsoleLogger({ level: 'warn' });\n *\n * // Custom prefix with timestamp\n * const logger = createConsoleLogger({\n * prefix: '[MyApp SDK]',\n * timestamp: true,\n * });\n * ```\n */\nexport function createConsoleLogger(\n options: ConsoleLoggerOptions = {},\n): Logger {\n const { level = 'debug', prefix = '[Lombard SDK]', timestamp = false } = options;\n\n const minLevelIndex = LOG_LEVELS.indexOf(level);\n\n const shouldLog = (logLevel: LogLevel): boolean => {\n const levelIndex = LOG_LEVELS.indexOf(logLevel);\n return levelIndex >= minLevelIndex && level !== 'none';\n };\n\n const formatMessage = (msg: string): string => {\n if (timestamp) {\n const ts = new Date().toISOString();\n return `${prefix} ${ts} ${msg}`;\n }\n return `${prefix} ${msg}`;\n };\n\n const formatMeta = (meta?: Record<string, unknown>): unknown[] => {\n if (!meta || Object.keys(meta).length === 0) {\n return [];\n }\n return [meta];\n };\n\n return {\n debug(message: string, meta?: Record<string, unknown>): void {\n if (shouldLog('debug')) {\n console.debug(formatMessage(message), ...formatMeta(meta));\n }\n },\n\n info(message: string, meta?: Record<string, unknown>): void {\n if (shouldLog('info')) {\n console.info(formatMessage(message), ...formatMeta(meta));\n }\n },\n\n warn(message: string, meta?: Record<string, unknown>): void {\n if (shouldLog('warn')) {\n console.warn(formatMessage(message), ...formatMeta(meta));\n }\n },\n\n error(message: string, meta?: Record<string, unknown>): void {\n if (shouldLog('error')) {\n console.error(formatMessage(message), ...formatMeta(meta));\n }\n },\n };\n}\n\n/**\n * Create a silent logger (no-op)\n *\n * Useful for testing or when you want to suppress all logs.\n */\nexport function createSilentLogger(): Logger {\n return {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n };\n}\n\n\n","/**\n * HTTP Request Utilities\n *\n * Centralized HTTP request wrapper that:\n * - Adds SDK version headers to all requests\n * - Supports optional logging via Logger interface\n * - Tracks request duration for performance monitoring\n * - Provides consistent error handling\n *\n * @module utils/http\n */\n\nimport axios, { type AxiosRequestConfig, type AxiosResponse } from 'axios';\n\nimport type { Logger } from '../shared/context/types';\nimport { SDK_RUNTIME, SDK_VERSION } from '../version';\n\n/**\n * HTTP request options\n */\nexport interface HttpRequestOptions {\n /** Request URL (full URL or path if baseURL provided) */\n url: string;\n\n /** HTTP method (defaults to GET) */\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n\n /** Base URL for the request */\n baseURL?: string;\n\n /** Query parameters */\n params?: Record<string, unknown>;\n\n /** Request body (for POST/PUT/PATCH) */\n body?: unknown;\n\n /** Additional headers */\n headers?: Record<string, string>;\n\n /** Optional logger for request/response logging */\n logger?: Logger;\n\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n}\n\n/**\n * HTTP response with timing information\n */\nexport interface HttpResponse<T> {\n /** Response data */\n data: T;\n\n /** HTTP status code */\n status: number;\n\n /** Request duration in milliseconds */\n duration: number;\n\n /** Response headers */\n headers: Record<string, string>;\n}\n\n/**\n * SDK headers added to all requests\n *\n * These headers help with:\n * - Backend analytics (tracking SDK version usage)\n * - Debugging (correlating errors with SDK version)\n * - Support (identifying client environment)\n */\nexport function getSdkHeaders(): Record<string, string> {\n return {\n 'X-SDK-Version': SDK_VERSION,\n 'X-SDK-Runtime': SDK_RUNTIME,\n };\n}\n\n/**\n * Make an HTTP request with SDK headers and optional logging\n *\n * @param options - Request options\n * @returns Promise resolving to response with timing data\n *\n * @example\n * ```typescript\n * // Simple GET request\n * const { data, duration } = await httpRequest({\n * url: 'https://api.lombard.finance/deposits',\n * params: { address: '0x...' },\n * });\n *\n * // With logging\n * const { data } = await httpRequest({\n * url: '/api/v1/points',\n * baseURL: 'https://mainnet.prod.lombard.finance',\n * logger: myLogger,\n * });\n * ```\n */\nexport async function httpRequest<T = unknown>(\n options: HttpRequestOptions,\n): Promise<HttpResponse<T>> {\n const {\n url,\n method = 'GET',\n baseURL,\n params,\n body,\n headers = {},\n logger,\n timeout = 30000,\n } = options;\n\n const startTime = performance.now();\n\n // Merge SDK headers with custom headers\n const mergedHeaders = {\n ...getSdkHeaders(),\n 'Content-Type': 'application/json',\n ...headers,\n };\n\n const config: AxiosRequestConfig = {\n url,\n method,\n baseURL,\n params,\n data: body,\n headers: mergedHeaders,\n timeout,\n };\n\n // Log request if logger provided\n if (logger) {\n logger.debug('HTTP Request', {\n method,\n url: baseURL ? `${baseURL}${url}` : url,\n params,\n hasBody: !!body,\n });\n }\n\n try {\n const response: AxiosResponse<T> = await axios(config);\n const duration = performance.now() - startTime;\n\n // Log successful response\n if (logger) {\n logger.debug('HTTP Response', {\n method,\n url: baseURL ? `${baseURL}${url}` : url,\n status: response.status,\n duration: Math.round(duration),\n });\n }\n\n return {\n data: response.data,\n status: response.status,\n duration,\n headers: response.headers as Record<string, string>,\n };\n } catch (error) {\n const duration = performance.now() - startTime;\n\n // Log error\n if (logger) {\n const axiosError = axios.isAxiosError(error) ? error : null;\n logger.error('HTTP Error', {\n method,\n url: baseURL ? `${baseURL}${url}` : url,\n status: axiosError?.response?.status,\n duration: Math.round(duration),\n message: axiosError?.message || String(error),\n });\n }\n\n throw error;\n }\n}\n\n/**\n * Convenience method for GET requests\n */\nexport async function httpGet<T = unknown>(\n url: string,\n options: Omit<HttpRequestOptions, 'url' | 'method' | 'body'> = {},\n): Promise<HttpResponse<T>> {\n return httpRequest<T>({ ...options, url, method: 'GET' });\n}\n\n/**\n * Convenience method for POST requests\n */\nexport async function httpPost<T = unknown>(\n url: string,\n body?: unknown,\n options: Omit<HttpRequestOptions, 'url' | 'method' | 'body'> = {},\n): Promise<HttpResponse<T>> {\n return httpRequest<T>({ ...options, url, method: 'POST', body });\n}\n\n/**\n * Convenience method for PUT requests\n */\nexport async function httpPut<T = unknown>(\n url: string,\n body?: unknown,\n options: Omit<HttpRequestOptions, 'url' | 'method' | 'body'> = {},\n): Promise<HttpResponse<T>> {\n return httpRequest<T>({ ...options, url, method: 'PUT', body });\n}\n\n/**\n * Convenience method for DELETE requests\n */\nexport async function httpDelete<T = unknown>(\n url: string,\n options: Omit<HttpRequestOptions, 'url' | 'method' | 'body'> = {},\n): Promise<HttpResponse<T>> {\n return httpRequest<T>({ ...options, url, method: 'DELETE' });\n}\n\n","/**\n * API Namespace\n *\n * Provides convenient access to Lombard API data-fetching operations,\n * with environment pre-configured from SDK initialization.\n *\n * All API-related read operations are namespaced under `sdk.api.*`\n *\n * @example\n * ```ts\n * const sdk = new LombardSDK({ env: Env.prod, providers: {...} });\n *\n * // Fetch deposits for an address\n * const deposits = await sdk.api.deposits('0x...');\n *\n * // Fetch unstakes with options\n * const unstakes = await sdk.api.unstakes('0x...', { show_redeems: true });\n *\n * // Fetch points (defaults to current season)\n * const points = await sdk.api.points('0x...');\n *\n * // Fetch LBTC exchange rate\n * const rate = await sdk.api.exchangeRatio();\n *\n * // Get existing BTC deposit address\n * const depositAddr = await sdk.api.depositAddress('0x...', ChainId.ethereum);\n * ```\n *\n * @module client/ApiNamespace\n */\n\nimport { DEFAULT_ENV, Env } from '@lombard.finance/sdk-common';\nimport type BigNumber from 'bignumber.js';\n\nimport { getDepositBtcAddress } from '../api-functions/getDepositBtcAddress/getDepositBtcAddress';\nimport {\n type Deposit,\n getDepositsByAddress,\n} from '../api-functions/getDepositsByAddress/getDepositsByAddress';\nimport { getExchangeRatio } from '../api-functions/getLBTCExchangeRate/get-exchange-ratio';\nimport {\n getPointsByAddress,\n type IPointsByAddressSeason1,\n type IPointsByAddressSeason2,\n} from '../api-functions/getPointsByAddress/getPointsByAddress';\nimport {\n getUnstakesByAddress,\n type Unstake,\n} from '../api-functions/getUnstakesByAddress/getUnstakesByAddress';\nimport type { ChainId, SolanaChain, StarknetChainId, SuiChain } from '../common/chains';\nimport type { Token } from '../tokens/token-addresses';\nimport { Vault } from '../vaults/lib/config';\nimport {\n getVaultWithdrawals,\n getVaultWithdrawalsAllChains,\n type VaultWithdrawals\n} from '../vaults/lib/ops/get-vault-withdrawals';\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\n/** Supported API versions (for future v2 migration) */\nexport type ApiVersion = 'v1' | 'v2';\n\n/** Options for fetching unstakes */\nexport interface UnstakeOptions {\n /** Include redeem operations */\n show_redeems?: boolean;\n /** Include unstake operations */\n show_unstakes?: boolean;\n /** Filter for native chain redemptions */\n to_native?: boolean;\n}\n\n/** Options for fetching exchange rate */\nexport interface ExchangeRateOptions {\n /** Chain ID (exchange rate is same for all chains, defaults to Ethereum) */\n chainId?: ChainId;\n /** Amount in satoshis to calculate exchange for */\n amount?: BigNumber.Value;\n}\n\n/** Options for fetching deposit address */\nexport interface DepositAddressOptions {\n /** Partner ID for the deposit address */\n partnerId?: string;\n /** Token type (LBTC, BTCK, BTCb) */\n token?: Token;\n}\n\n/** Destination chain types for deposit address */\nexport type DestinationChain = ChainId | SuiChain | SolanaChain | StarknetChainId;\n\n/** Options for fetching vault withdrawals */\nexport interface VaultWithdrawalsOptions {\n /** Filter by chain ID (if not provided, fetches from all chains) */\n chainId?: ChainId;\n /** Vault key (defaults to Veda) */\n vault?: Vault;\n /** Optional RPC URL override */\n rpcUrl?: string;\n}\n\n/* -------------------------------------------------------------------------- */\n/* ApiNamespace */\n/* -------------------------------------------------------------------------- */\n\n/**\n * API Namespace Class\n *\n * Provides convenient wrappers around Lombard API functions with\n * environment pre-bound from SDK configuration.\n *\n * Designed for easy migration to API v2 when available (January 2025).\n */\nexport class ApiNamespace {\n /**\n * Internal API version flag for future v2 migration.\n * When v2 is ready, we can switch implementations transparently.\n */\n private readonly apiVersion: ApiVersion = 'v1';\n\n constructor(private readonly env: Env = DEFAULT_ENV) {}\n\n /* -------------------------------------------------------------------------- */\n /* Deposits */\n /* -------------------------------------------------------------------------- */\n\n /**\n * Fetch all deposits for an address.\n *\n * Returns deposits from both Direct BTC Deposits and Native Deposits APIs,\n * unified into a single list sorted by block time (newest first).\n *\n * @param address - The EVM/BTC address to fetch deposits for\n * @returns Promise resolving to array of Deposit objects\n *\n * @example\n * ```ts\n * const deposits = await sdk.api.deposits('0x1234...');\n * deposits.forEach(d => {\n * console.log(`${d.amount} BTC deposited at block ${d.blockHeight}`);\n * });\n * ```\n */\n async deposits(address: string): Promise<Deposit[]> {\n // Future: if (this.apiVersion === 'v2') return this.depositsV2(address);\n return getDepositsByAddress({ address, env: this.env });\n }\n\n /* -------------------------------------------------------------------------- */\n /* Unstakes */\n /* -------------------------------------------------------------------------- */\n\n /**\n * Fetch all unstakes/redemptions for an address.\n *\n * Returns unstake records for both direct BTC unstakes and\n * native blockchain redemptions.\n *\n * @param address - The address that initiated the unstakes\n * @param options - Optional filters (show_redeems, show_unstakes, to_native)\n * @returns Promise resolving to array of Unstake objects\n *\n * @example\n * ```ts\n * // Get all unstakes\n * const unstakes = await sdk.api.unstakes('0x1234...');\n *\n * // Get only native chain redemptions\n * const redeems = await sdk.api.unstakes('0x1234...', { to_native: true });\n * ```\n */\n async unstakes(address: string, options?: UnstakeOptions): Promise<Unstake[]> {\n // Future: if (this.apiVersion === 'v2') return this.unstakesV2(address, options);\n return getUnstakesByAddress({ address, env: this.env, options });\n }\n\n /* -------------------------------------------------------------------------- */\n /* Points */\n /* -------------------------------------------------------------------------- */\n\n /**\n * Fetch Lux points for an address (Season 1).\n *\n * @param address - The wallet address\n * @param season - Season number (1)\n * @returns Promise resolving to Season 1 points breakdown\n */\n async points(\n address: string,\n season: 1,\n ): Promise<IPointsByAddressSeason1>;\n\n /**\n * Fetch Lux points for an address (Season 2).\n *\n * @param address - The wallet address\n * @param season - Season number (2)\n * @returns Promise resolving to Season 2 points breakdown\n */\n async points(\n address: string,\n season: 2,\n ): Promise<IPointsByAddressSeason2>;\n\n /**\n * Fetch Lux points for an address (defaults to current season).\n *\n * @param address - The wallet address\n * @param season - Optional season number (defaults to current)\n * @returns Promise resolving to points breakdown\n *\n * @example\n * ```ts\n * // Get current season points\n * const points = await sdk.api.points('0x1234...');\n * console.log(`Total: ${points.totalPoints}, Holding: ${points.holdingPoints}`);\n *\n * // Get Season 1 points\n * const s1 = await sdk.api.points('0x1234...', 1);\n * ```\n */\n async points(\n address: string,\n season?: number,\n ): Promise<IPointsByAddressSeason1 | IPointsByAddressSeason2>;\n\n async points(\n address: string,\n season?: number,\n ): Promise<IPointsByAddressSeason1 | IPointsByAddressSeason2> {\n // Future: if (this.apiVersion === 'v2') return this.pointsV2(address, season);\n return getPointsByAddress({ address, env: this.env, season });\n }\n\n /* -------------------------------------------------------------------------- */\n /* Token Exchange Ratios */\n /* -------------------------------------------------------------------------- */\n\n /**\n * Fetch the current exchange ratios for all supported tokens.\n *\n * Returns Token:BTC and BTC:Token ratios for LBTC and other supported tokens.\n * This is the recommended method for getting exchange rate information.\n *\n * @returns Promise resolving to exchange ratio info for each token\n *\n * @example\n * ```ts\n * const ratios = await sdk.api.exchangeRatio();\n *\n * // Access LBTC ratios\n * const lbtcRatio = ratios.LBTC;\n * console.log(`LBTC:BTC = ${lbtcRatio.tokenBTCRatio}`); // How many LBTC per 1 BTC\n * console.log(`BTC:LBTC = ${lbtcRatio.BTCTokenRatio}`); // How many BTC per 1 LBTC\n * ```\n */\n async exchangeRatio() {\n return getExchangeRatio({ env: this.env });\n }\n\n /* -------------------------------------------------------------------------- */\n /* Deposit Address */\n /* -------------------------------------------------------------------------- */\n\n /**\n * Get an existing BTC deposit address for a recipient.\n *\n * Returns the most recent non-deprecated deposit address for the\n * given recipient address and destination chain.\n *\n * @param address - The destination address where LBTC will be claimed\n * @param chainId - The destination chain\n * @param options - Optional partner ID and token type\n * @returns Promise resolving to the BTC deposit address\n * @throws Error if no deposit address found\n *\n * @example\n * ```ts\n * try {\n * const btcAddr = await sdk.api.depositAddress('0x1234...', ChainId.ethereum);\n * console.log(`Send BTC to: ${btcAddr}`);\n * } catch (e) {\n * console.log('No deposit address found - need to generate one');\n * }\n * ```\n */\n async depositAddress(\n address: string,\n chainId: DestinationChain,\n options?: DepositAddressOptions,\n ): Promise<string> {\n // Future: if (this.apiVersion === 'v2') return this.depositAddressV2(address, chainId, options);\n return getDepositBtcAddress({\n address,\n chainId,\n env: this.env,\n partnerId: options?.partnerId,\n token: options?.token,\n });\n }\n\n /* -------------------------------------------------------------------------- */\n /* Vault Withdrawals */\n /* -------------------------------------------------------------------------- */\n\n /**\n * Fetch all vault withdrawals for an address.\n *\n * Returns withdrawal objects categorized by status (cancelled, expired,\n * fulfilled, open). If chainId is not provided, fetches from all supported chains.\n *\n * @param address - The address to fetch withdrawals for\n * @param options - Optional filters (chainId, vault, rpcUrl)\n * @returns Promise resolving to categorized vault withdrawals\n *\n * @example\n * ```ts\n * // Get all withdrawals from all chains\n * const result = await sdk.api.vaultWithdrawals('0x1234...');\n * console.log(`Open: ${result.open.length}, Fulfilled: ${result.fulfilled.length}`);\n *\n * // Filter by specific chain\n * const ethereumOnly = await sdk.api.vaultWithdrawals('0x1234...', {\n * chainId: ChainId.ethereum,\n * });\n *\n * // Display withdrawal info\n * result.open.forEach(w => {\n * console.log(`Amount: ${w.shareAmount.toFixed()}, Deadline: ${new Date(w.deadline * 1000)}`);\n * });\n * ```\n */\n async vaultWithdrawals(\n address: string,\n options?: VaultWithdrawalsOptions,\n ): Promise<VaultWithdrawals> {\n const account = address as `0x${string}`;\n const vaultKey = options?.vault ?? Vault.Veda;\n\n if (options?.chainId) {\n // Fetch from specific chain\n return getVaultWithdrawals({\n account,\n chainId: options.chainId,\n vaultKey,\n rpcUrl: options.rpcUrl,\n env: this.env,\n });\n }\n\n // Fetch from all chains\n return getVaultWithdrawalsAllChains({\n account,\n vaultKey,\n rpcUrl: options?.rpcUrl,\n });\n }\n\n /* -------------------------------------------------------------------------- */\n /* Utility Methods */\n /* -------------------------------------------------------------------------- */\n\n /**\n * Get the current API version being used.\n *\n * @returns The API version string ('v1' or 'v2')\n */\n getApiVersion(): ApiVersion {\n return this.apiVersion;\n }\n}\n\n","/**\n * Configuration validation and defaults\n *\n * This module provides validation and default application for SDK configuration.\n */\n\nimport { LombardError } from '../shared/errors';\nimport type { CreateConfigOptions, LombardConfig } from './types';\n\n/**\n * Normalized options after validation (before modules/logger are added)\n * @internal\n */\nexport type NormalizedOptions = Omit<LombardConfig, 'modules' | 'logger'>;\n\n/**\n * Validate and apply defaults to SDK options\n *\n * @param options - User-provided SDK options\n * @returns Validated and normalized options (catalog added separately)\n * @throws LombardError if configuration is invalid\n * @internal\n */\nexport function validateAndApplyDefaults(\n options: CreateConfigOptions,\n): NormalizedOptions {\n // Validate environment\n if (!options.env) {\n throw LombardError.missingParameter('env');\n }\n\n // Build normalized options with defaults\n const normalized: NormalizedOptions = {\n env: options.env,\n providers: options.providers || {},\n };\n\n // Add partner config if provided\n if (options.partner) {\n validatePartnerConfig(options.partner);\n normalized.partner = options.partner;\n }\n\n return normalized;\n}\n\n/**\n * Validate partner configuration\n *\n * @param partner - Partner configuration to validate\n * @throws LombardError if configuration is invalid\n */\nfunction validatePartnerConfig(partner: unknown): void {\n if (typeof partner !== 'object' || partner === null) {\n throw LombardError.invalidConfiguration(\n 'Partner configuration must be an object',\n );\n }\n\n const config = partner as { partnerId?: string };\n\n if (!config.partnerId || typeof config.partnerId !== 'string') {\n throw LombardError.missingParameter('partner.partnerId');\n }\n\n if (config.partnerId.trim().length === 0) {\n throw LombardError.invalidConfiguration('Partner ID cannot be empty');\n }\n}\n","/**\n * API Service\n *\n * Provides Lombard backend API operations for internal use by actions.\n * Returns minimal types defined in sdk-common.\n *\n * For public APIs with full types, use the exported functions in api-functions/\n * or the SDK namespace methods.\n *\n * @module services/ApiService\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\nimport type {\n ApiService as IApiService,\n DepositInfo,\n FeeSignatureResult,\n GenerateDepositAddressParams,\n GetDepositAddressParams,\n GetFeeSignatureParams,\n StoreFeeSignatureParams,\n StoreStakeAndBakeParams,\n} from '@lombard.finance/sdk-common';\n\nimport { generateDepositBtcAddress } from '../api-functions/generateDepositBtcAddress/generateDepositBtcAddress';\nimport { getDepositBtcAddress } from '../api-functions/getDepositBtcAddress/getDepositBtcAddress';\nimport { getDepositsByAddress } from '../api-functions/getDepositsByAddress/getDepositsByAddress';\nimport { getNetworkFeeSignature } from '../api-functions/getNetworkFeeSignature/getNetworkFeeSignature';\nimport { storeNetworkFeeSignature } from '../api-functions/storeNetworkFeeSignature/storeNetworkFeeSignature';\nimport { storeStakeAndBakeSignature } from '../api-functions/storeStakeAndBakeSignature/storeStakeAndBakeSignature';\nimport type {\n ChainId,\n SolanaChain,\n StarknetChainId,\n SuiChain,\n} from '../common/chains';\nimport { Token } from '../tokens/token-addresses';\n\ntype DestChainId = ChainId | SolanaChain | SuiChain | StarknetChainId;\n\n/**\n * API Service\n *\n * Implementation of the ApiService interface from sdk-common.\n * Wraps low-level API functions for use by actions.\n *\n * @remarks\n * This service returns minimal types (DepositInfo) suitable for internal use.\n * For full deposit details, use getDepositsByAddress() directly.\n */\nexport class ApiService implements IApiService {\n constructor(private readonly env: Env) {}\n\n /**\n * Generate a new BTC deposit address\n */\n async generateDepositAddress(\n params: GenerateDepositAddressParams,\n ): Promise<string> {\n return generateDepositBtcAddress({\n address: params.address,\n chainId: params.chainId as DestChainId,\n signature: params.signature,\n token: params.token as Token,\n eip712Data: params.eip712Data,\n signatureData: params.signatureData,\n pubKey: params.pubKey,\n env: this.env,\n partnerId: params.partnerId,\n referrerCode: params.referrerCode,\n captchaToken: params.captchaToken,\n });\n }\n\n /**\n * Get existing deposit address for a recipient\n */\n async getDepositAddress(\n params: GetDepositAddressParams,\n ): Promise<string | undefined> {\n try {\n const address = await getDepositBtcAddress({\n address: params.address,\n chainId: params.chainId as DestChainId,\n token: params.token as Token,\n env: this.env,\n partnerId: params.partnerId,\n });\n return address || undefined;\n } catch {\n // No address found\n return undefined;\n }\n }\n\n /**\n * Get deposits for an address\n */\n async getDeposits(address: string): Promise<DepositInfo[]> {\n const deposits = await getDepositsByAddress({\n address,\n env: this.env,\n });\n\n return deposits.map(d => ({\n depositAddress: d.depositAddress ?? '',\n blockHeight: d.blockHeight,\n isClaimed: d.isClaimed,\n txid: d.txHash,\n amount: d.amount?.toString(),\n }));\n }\n\n /**\n * Store network fee signature\n */\n async storeFeeSignature(params: StoreFeeSignatureParams): Promise<void> {\n await storeNetworkFeeSignature({\n address: params.address,\n signature: params.signature,\n typedData: params.typedData,\n env: this.env,\n tokenAddress: params.tokenAddress,\n });\n }\n\n /**\n * Get stored network fee signature\n */\n async getFeeSignature(\n params: GetFeeSignatureParams,\n ): Promise<FeeSignatureResult> {\n return getNetworkFeeSignature({\n address: params.address,\n chainId: params.chainId as ChainId,\n env: this.env,\n tokenAddress: params.tokenAddress,\n });\n }\n\n /**\n * Store stake and bake signature\n */\n async storeStakeAndBakeSignature(\n params: StoreStakeAndBakeParams,\n ): Promise<void> {\n await storeStakeAndBakeSignature({\n signature: params.signature,\n typedData: params.typedData,\n env: this.env,\n });\n }\n}\n","/**\n * API Module\n *\n * Provides Lombard backend API service for internal use by actions.\n * Uses Service-First pattern: module is a thin factory that instantiates the service.\n *\n * Note: This is an internal service for dependency injection into actions.\n * For public APIs, use the SDK namespace methods (e.g., sdk.deposits.getByAddress())\n * which call the underlying functions directly and return rich types.\n *\n * @module modules/apiModule\n */\n\nimport type {\n ApiService as IApiService,\n SdkModule,\n} from '@lombard.finance/sdk-common';\n\nimport { ApiService } from '../services/ApiService';\n\n/**\n * Create API module\n *\n * Internal module that provides ApiService. Automatically included by createLombardSDK().\n *\n * @example\n * ```ts\n * const sdk = await createLombardSDK({\n * env: Env.prod,\n * providers: { evm: () => window.ethereum },\n * });\n * const deposits = await sdk.api.deposits('0x...');\n * ```\n */\nexport function apiModule(): SdkModule<'api', IApiService> {\n return {\n id: 'api',\n register(ctx) {\n return new ApiService(ctx.env);\n },\n };\n}\n\n// Re-export service class and interface type\nexport { ApiService };\nexport type { IApiService as ApiServiceInterface };\nexport type {\n DepositInfo,\n GenerateDepositAddressParams,\n GetDepositAddressParams,\n} from '@lombard.finance/sdk-common';\n","import type { AnyModule, ProviderKey } from '@lombard.finance/sdk-common';\n\nimport type { CreateConfigOptions, LombardConfig } from '../config/types';\nimport { validateAndApplyDefaults } from '../config/validation';\nimport { apiModule } from '../modules/apiModule';\nimport { btcModule } from '../modules/btcModule';\nimport { evmModule } from '../modules/evmModule';\nimport { LombardError } from '../shared/errors';\nimport { createConsoleLogger } from '../utils/consoleLogger';\n\nfunction mergeModules(provided: readonly AnyModule[] | undefined): AnyModule[] {\n const modules = new Map<string, AnyModule>();\n const builtIns: AnyModule[] = [btcModule(), evmModule(), apiModule()];\n for (const mod of builtIns) {\n modules.set(mod.id, mod);\n }\n if (provided) {\n for (const mod of provided) {\n modules.set(mod.id, mod);\n }\n }\n return Array.from(modules.values());\n}\n\nfunction ensureProviders(\n modules: readonly AnyModule[],\n config: Pick<LombardConfig, 'providers'>,\n): void {\n for (const mod of modules) {\n for (const key of mod.requiresProviders ?? []) {\n if (!hasProvider(config, key)) {\n throw LombardError.providerMissing(key, key);\n }\n }\n }\n}\n\nfunction hasProvider(\n config: Pick<LombardConfig, 'providers'>,\n key: ProviderKey,\n): boolean {\n return Boolean(config.providers?.[key]);\n}\n\n/**\n * Create SDK configuration\n *\n * This is a **synchronous** function that validates options and returns\n * a configuration object. The config can be exported from a module and\n * passed around as a plain object.\n *\n * The asset catalog is NOT fetched here - it's fetched asynchronously\n * when createLombardSDK() is called. This keeps config creation simple\n * and predictable.\n *\n * @param options - Configuration options\n * @returns Validated SDK configuration\n *\n * @example\n * ```typescript\n * // lib/lombard.ts - Config is sync, can be exported directly\n * export const config = createConfig({\n * env: Env.prod,\n * providers: { evm: () => window.ethereum },\n * });\n *\n * // Usage - SDK creation is async\n * import { config } from './lib/lombard';\n * const sdk = await createLombardSDK(config);\n * ```\n */\nexport function createConfig(options: CreateConfigOptions): LombardConfig {\n const normalized = validateAndApplyDefaults(options);\n const modules = mergeModules(\n options.modules as readonly AnyModule[] | undefined,\n );\n ensureProviders(modules, normalized);\n\n // Resolve logger: explicit logger > debug mode > undefined\n let logger = options.logger;\n if (!logger && options.debug) {\n logger = createConsoleLogger({ level: 'debug' });\n }\n\n return {\n ...normalized,\n modules,\n logger,\n };\n}\n","/**\n * BTC Destination Configuration for Solana Unstake\n *\n * Handles unstaking LBTC from Solana to BTC on Bitcoin.\n *\n * @module chains/solana/actions/unstake/config/btc\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport { Chain } from '../../../../../core';\nimport { bitcoinAddressSchema } from '../../../../../shared/validation';\nimport type { ChainConfig } from './types';\n\n/**\n * Solana → BTC configuration\n *\n * Burns LBTC on Solana, releases BTC on Bitcoin network.\n */\nexport const solanaToBtcConfig: ChainConfig = {\n chainType: 'solana',\n\n routes: [\n // Production: Solana Mainnet → Bitcoin Mainnet\n {\n sourceChains: [Chain.SOLANA_MAINNET],\n destChain: Chain.BITCOIN_MAINNET,\n envs: [Env.prod],\n },\n // Testnet: Solana Devnet → Bitcoin Signet\n {\n sourceChains: [Chain.SOLANA_DEVNET],\n destChain: Chain.BITCOIN_SIGNET,\n envs: [Env.testnet, Env.stage, Env.dev, Env.ibc],\n },\n ],\n\n recipientSchema: bitcoinAddressSchema,\n};\n\n/**\n * Check if unstake to BTC is supported from this Solana chain\n */\nexport function isBtcUnstakeSupported(sourceChain: Chain, env: Env): boolean {\n return solanaToBtcConfig.routes.some(\n route =>\n route.sourceChains.includes(sourceChain) && route.envs.includes(env),\n );\n}\n","/**\n * Solana Unstake Action\n *\n * Burns LBTC on Solana and releases BTC on Bitcoin.\n *\n * @module chains/solana/actions/unstake/SolanaUnstake\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\nimport { z } from 'zod';\n\nimport { StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { NonEvmUnstakeStatus } from '../../../../shared/constants/statusConstants';\nimport type { SolanaCoreContext } from '../../../../shared/context';\nimport { LombardError } from '../../../../shared/errors';\nimport type { UnstakeEventMap } from '../../../../shared/events';\nimport {\n amountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { toSatoshi } from '../../../../utils/satoshi';\nimport { isBtcUnstakeSupported,solanaToBtcConfig } from './config';\nimport type {\n ISolanaUnstake,\n SolanaUnstakeParams,\n SolanaUnstakePrepareParams,\n} from './types';\n\n/**\n * Map environment to Solana network\n */\nfunction envToSolanaNetwork(env: Env): string {\n switch (env) {\n case 'prod':\n return 'mainnet-beta';\n case 'testnet':\n return 'testnet';\n case 'stage':\n case 'dev':\n case 'ibc':\n default:\n return 'devnet';\n }\n}\n\nexport class SolanaUnstake\n extends BaseAction<UnstakeEventMap, NonEvmUnstakeStatus>\n implements ISolanaUnstake\n{\n private _amount?: string;\n private _recipient?: string;\n private _txHash?: string;\n private readonly env: Env;\n\n constructor(\n private readonly ctx: SolanaCoreContext,\n private readonly params: SolanaUnstakeParams,\n ) {\n super(NonEvmUnstakeStatus.IDLE);\n this.env = ctx.env;\n\n // Validate route is supported\n if (!isBtcUnstakeSupported(params.sourceChain, this.env)) {\n throw LombardError.routeNotFound({\n assetOut: params.assetOut,\n sourceChain: params.sourceChain,\n destChain: params.destChain,\n env: this.env,\n });\n }\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get recipient(): string | undefined {\n return this._recipient;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n async prepare(params: SolanaUnstakePrepareParams): Promise<void> {\n this.assertStatus(NonEvmUnstakeStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params, {\n destChain: this.params.destChain,\n });\n this._amount = validated.amount;\n this._recipient = validated.recipient;\n\n this.emitProgress({\n status: NonEvmUnstakeStatus.READY,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n }, NonEvmUnstakeStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(NonEvmUnstakeStatus.READY, 'execute');\n\n return this.act(async () => {\n const amount = this._amount;\n const recipient = this._recipient;\n\n if (!amount || !recipient) {\n throw LombardError.missingParameter('amount or recipient');\n }\n\n // Emit burning step\n this.emitProgress({\n status: NonEvmUnstakeStatus.READY,\n steps: { burning: StepStatus.PENDING, releasing: StepStatus.IDLE },\n });\n\n // Convert amount to base units (satoshis)\n const amountInSatoshis = toSatoshi(amount).toString();\n const network = envToSolanaNetwork(this.env);\n\n // Call the Solana service to execute unstake\n const { txHash } = await this.ctx.solana.unstake({\n amount: amountInSatoshis,\n btcAddress: recipient,\n network,\n });\n\n this._txHash = txHash;\n\n // Emit completed steps\n this.emitProgress({\n status: NonEvmUnstakeStatus.COMPLETED,\n steps: { burning: StepStatus.COMPLETE, releasing: StepStatus.PENDING },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, NonEvmUnstakeStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n return z.object({\n amount: amountSchema,\n recipient: solanaToBtcConfig.recipientSchema,\n });\n }\n}\n","/**\n * Solana Actions\n *\n * Provides factory methods for Solana operations (unstake).\n *\n * Note: Solana module must be registered before using these actions.\n *\n * @example\n * ```typescript\n * import { solanaActions } from '@lombard.finance/sdk';\n *\n * const solana = solanaActions(config);\n * const unstake = solana.unstake({ ... });\n * ```\n */\n\nimport type { SolanaService } from '@lombard.finance/sdk-common';\n\nimport { PartnerConfiguration } from '../../client/PartnerConfiguration';\nimport type { LombardConfig } from '../../config/types';\nimport { getProviderGetter } from '../../config/types';\nimport { CapabilityRegistry } from '../../modules/CapabilityRegistry';\nimport type { SolanaCoreContext } from '../../shared/context';\nimport { SolanaUnstake } from './actions/unstake/SolanaUnstake';\nimport type {\n ISolanaUnstake,\n SolanaUnstakeParams,\n} from './actions/unstake/types';\n\n/**\n * Create Solana core context from config\n * Only called when an action is invoked (lazy initialization)\n */\nfunction createSolanaCoreContext(config: LombardConfig): SolanaCoreContext {\n const registry = new CapabilityRegistry(config.modules, config);\n const solana = registry.require('solana') as SolanaService;\n\n return {\n env: config.env,\n partner: new PartnerConfiguration(config.partner),\n getProvider: async key => {\n const getter = getProviderGetter(config.providers, key);\n if (!getter) return undefined;\n return getter();\n },\n solana,\n };\n}\n\n/**\n * Solana Actions\n *\n * Actions are lazy-loaded - the solana module is only required when\n * an action is actually called.\n */\nexport class SolanaActions {\n private _ctx: SolanaCoreContext | null = null;\n\n constructor(private readonly config: LombardConfig) {}\n\n private get ctx(): SolanaCoreContext {\n if (!this._ctx) {\n this._ctx = createSolanaCoreContext(this.config);\n }\n return this._ctx;\n }\n\n /**\n * Unstake LBTC → BTC\n *\n * Burns LBTC on Solana and releases BTC on Bitcoin.\n *\n * @throws LombardError if solana module is not registered\n */\n unstake(params: SolanaUnstakeParams): ISolanaUnstake {\n return new SolanaUnstake(this.ctx, params);\n }\n}\n\n/**\n * Create Solana actions from config\n */\nexport function solanaActions(config: LombardConfig): SolanaActions {\n return new SolanaActions(config);\n}\n","/**\n * BTC Destination Configuration for Starknet Unstake\n *\n * Handles unstaking LBTC from Starknet to BTC on Bitcoin.\n *\n * @module chains/starknet/actions/unstake/config/btc\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport { Chain } from '../../../../../core';\nimport { bitcoinAddressSchema } from '../../../../../shared/validation';\nimport type { ChainConfig } from './types';\n\n/**\n * Starknet → BTC configuration\n */\nexport const starknetToBtcConfig: ChainConfig = {\n chainType: 'starknet',\n\n routes: [\n {\n sourceChains: [Chain.STARKNET_MAINNET],\n destChain: Chain.BITCOIN_MAINNET,\n envs: [Env.prod],\n },\n {\n sourceChains: [Chain.STARKNET_SEPOLIA],\n destChain: Chain.BITCOIN_SIGNET,\n envs: [Env.testnet, Env.stage, Env.dev, Env.ibc],\n },\n ],\n\n recipientSchema: bitcoinAddressSchema,\n};\n\n/**\n * Check if unstake to BTC is supported from this Starknet chain\n */\nexport function isBtcUnstakeSupported(sourceChain: Chain, env: Env): boolean {\n return starknetToBtcConfig.routes.some(\n route =>\n route.sourceChains.includes(sourceChain) && route.envs.includes(env),\n );\n}\n","/**\n * Starknet Unstake Action\n *\n * Burns LBTC on Starknet and releases BTC on Bitcoin.\n *\n * @module chains/starknet/actions/unstake/StarknetUnstake\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\nimport { z } from 'zod';\n\nimport { StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { NonEvmUnstakeStatus } from '../../../../shared/constants/statusConstants';\nimport type { StarknetCoreContext } from '../../../../shared/context';\nimport { LombardError } from '../../../../shared/errors';\nimport type { UnstakeEventMap } from '../../../../shared/events';\nimport {\n amountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { isBtcUnstakeSupported,starknetToBtcConfig } from './config';\nimport type {\n IStarknetUnstake,\n StarknetUnstakeParams,\n StarknetUnstakePrepareParams,\n} from './types';\n\nexport class StarknetUnstake\n extends BaseAction<UnstakeEventMap, NonEvmUnstakeStatus>\n implements IStarknetUnstake\n{\n private _amount?: string;\n private _recipient?: string;\n private _txHash?: string;\n private readonly env: Env;\n\n constructor(\n private readonly ctx: StarknetCoreContext,\n private readonly params: StarknetUnstakeParams,\n ) {\n super(NonEvmUnstakeStatus.IDLE);\n this.env = ctx.env;\n\n if (!isBtcUnstakeSupported(params.sourceChain, this.env)) {\n throw LombardError.routeNotFound({\n assetOut: params.assetOut,\n sourceChain: params.sourceChain,\n destChain: params.destChain,\n env: this.env,\n });\n }\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get recipient(): string | undefined {\n return this._recipient;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n async prepare(params: StarknetUnstakePrepareParams): Promise<void> {\n this.assertStatus(NonEvmUnstakeStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params, {\n destChain: this.params.destChain,\n });\n this._amount = validated.amount;\n this._recipient = validated.recipient;\n\n this.emitProgress({\n status: NonEvmUnstakeStatus.READY,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n }, NonEvmUnstakeStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(NonEvmUnstakeStatus.READY, 'execute');\n\n return this.act(async () => {\n const amount = this._amount;\n const recipient = this._recipient;\n\n if (!amount || !recipient) {\n throw LombardError.missingParameter('amount or recipient');\n }\n\n // Emit burning step\n this.emitProgress({\n status: NonEvmUnstakeStatus.READY,\n steps: { burning: StepStatus.PENDING, releasing: StepStatus.IDLE },\n });\n\n // Call the Starknet service to execute unstake\n const { txHash } = await this.ctx.starknet.unstake({\n amount,\n btcAddress: recipient,\n env: this.env,\n });\n\n this._txHash = txHash;\n\n // Emit completed steps\n this.emitProgress({\n status: NonEvmUnstakeStatus.COMPLETED,\n steps: { burning: StepStatus.COMPLETE, releasing: StepStatus.PENDING },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, NonEvmUnstakeStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n return z.object({\n amount: amountSchema,\n recipient: starknetToBtcConfig.recipientSchema,\n });\n }\n}\n","/**\n * Starknet Actions\n *\n * Provides factory methods for Starknet operations (unstake).\n *\n * Note: Starknet module must be registered before using these actions.\n *\n * @example\n * ```typescript\n * import { starknetActions } from '@lombard.finance/sdk';\n *\n * const starknet = starknetActions(config);\n * const unstake = starknet.unstake({ ... });\n * ```\n */\n\nimport type { StarknetService } from '@lombard.finance/sdk-common';\n\nimport { PartnerConfiguration } from '../../client/PartnerConfiguration';\nimport type { LombardConfig } from '../../config/types';\nimport { getProviderGetter } from '../../config/types';\nimport { CapabilityRegistry } from '../../modules/CapabilityRegistry';\nimport type { StarknetCoreContext } from '../../shared/context';\nimport { StarknetUnstake } from './actions/unstake/StarknetUnstake';\nimport type {\n IStarknetUnstake,\n StarknetUnstakeParams,\n} from './actions/unstake/types';\n\n/**\n * Create Starknet core context from config\n * Only called when an action is invoked (lazy initialization)\n */\nfunction createStarknetCoreContext(config: LombardConfig): StarknetCoreContext {\n const registry = new CapabilityRegistry(config.modules, config);\n const starknet = registry.require('starknet') as StarknetService;\n\n return {\n env: config.env,\n partner: new PartnerConfiguration(config.partner),\n getProvider: async key => {\n const getter = getProviderGetter(config.providers, key);\n if (!getter) return undefined;\n return getter();\n },\n starknet,\n };\n}\n\n/**\n * Starknet Actions\n *\n * Actions are lazy-loaded - the starknet module is only required when\n * an action is actually called.\n */\nexport class StarknetActions {\n private _ctx: StarknetCoreContext | null = null;\n\n constructor(private readonly config: LombardConfig) {}\n\n private get ctx(): StarknetCoreContext {\n if (!this._ctx) {\n this._ctx = createStarknetCoreContext(this.config);\n }\n return this._ctx;\n }\n\n /**\n * Unstake LBTC → BTC\n *\n * Burns LBTC on Starknet and releases BTC on Bitcoin.\n *\n * @throws LombardError if starknet module is not registered\n */\n unstake(params: StarknetUnstakeParams): IStarknetUnstake {\n return new StarknetUnstake(this.ctx, params);\n }\n}\n\n/**\n * Create Starknet actions from config\n */\nexport function starknetActions(config: LombardConfig): StarknetActions {\n return new StarknetActions(config);\n}\n","/**\n * BTC Destination Configuration for Sui Unstake\n *\n * Handles unstaking LBTC from Sui to BTC on Bitcoin.\n *\n * @module chains/sui/actions/unstake/config/btc\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport { Chain } from '../../../../../core';\nimport { bitcoinAddressSchema } from '../../../../../shared/validation';\nimport type { ChainConfig } from './types';\n\n/**\n * Sui → BTC configuration\n */\nexport const suiToBtcConfig: ChainConfig = {\n chainType: 'sui',\n\n routes: [\n {\n sourceChains: [Chain.SUI_MAINNET],\n destChain: Chain.BITCOIN_MAINNET,\n envs: [Env.prod],\n },\n {\n sourceChains: [Chain.SUI_TESTNET],\n destChain: Chain.BITCOIN_SIGNET,\n envs: [Env.testnet, Env.stage, Env.dev, Env.ibc],\n },\n ],\n\n recipientSchema: bitcoinAddressSchema,\n};\n\n/**\n * Check if unstake to BTC is supported from this Sui chain\n */\nexport function isBtcUnstakeSupported(sourceChain: Chain, env: Env): boolean {\n return suiToBtcConfig.routes.some(\n route =>\n route.sourceChains.includes(sourceChain) && route.envs.includes(env),\n );\n}\n","/**\n * Sui Unstake Action\n *\n * Burns LBTC on Sui and releases BTC on Bitcoin.\n *\n * @module chains/sui/actions/unstake/SuiUnstake\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\nimport { z } from 'zod';\n\nimport { Chain, StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { NonEvmUnstakeStatus } from '../../../../shared/constants/statusConstants';\nimport type { SuiCoreContext } from '../../../../shared/context';\nimport { LombardError } from '../../../../shared/errors';\nimport type { UnstakeEventMap } from '../../../../shared/events';\nimport {\n amountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { isBtcUnstakeSupported,suiToBtcConfig } from './config';\nimport type {\n ISuiUnstake,\n SuiUnstakeParams,\n SuiUnstakePrepareParams,\n} from './types';\n\n/**\n * Get Sui chain ID from Chain constant\n */\nfunction getSuiChainId(chain: Chain): string {\n switch (chain) {\n case Chain.SUI_MAINNET:\n return 'sui:mainnet';\n case Chain.SUI_TESTNET:\n return 'sui:testnet';\n default:\n return 'sui:testnet';\n }\n}\n\nexport class SuiUnstake\n extends BaseAction<UnstakeEventMap, NonEvmUnstakeStatus>\n implements ISuiUnstake\n{\n private _amount?: string;\n private _recipient?: string;\n private _txHash?: string;\n private readonly env: Env;\n\n constructor(\n private readonly ctx: SuiCoreContext,\n private readonly params: SuiUnstakeParams,\n ) {\n super(NonEvmUnstakeStatus.IDLE);\n this.env = ctx.env;\n\n if (!isBtcUnstakeSupported(params.sourceChain, this.env)) {\n throw LombardError.routeNotFound({\n assetOut: params.assetOut,\n sourceChain: params.sourceChain,\n destChain: params.destChain,\n env: this.env,\n });\n }\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get recipient(): string | undefined {\n return this._recipient;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n async prepare(params: SuiUnstakePrepareParams): Promise<void> {\n this.assertStatus(NonEvmUnstakeStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params, {\n destChain: this.params.destChain,\n });\n this._amount = validated.amount;\n this._recipient = validated.recipient;\n\n this.emitProgress({\n status: NonEvmUnstakeStatus.READY,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n }, NonEvmUnstakeStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(NonEvmUnstakeStatus.READY, 'execute');\n\n return this.act(async () => {\n const amount = this._amount;\n const recipient = this._recipient;\n\n if (!amount || !recipient) {\n throw LombardError.missingParameter('amount or recipient');\n }\n\n // Emit burning step\n this.emitProgress({\n status: NonEvmUnstakeStatus.READY,\n steps: { burning: StepStatus.PENDING, releasing: StepStatus.IDLE },\n });\n\n // Get Sui chain ID from source chain\n const chainId = getSuiChainId(this.params.sourceChain);\n\n // Call the Sui service to execute unstake\n const { txHash } = await this.ctx.sui.unstake({\n amount,\n btcAddress: recipient,\n chainId,\n env: this.env,\n });\n\n this._txHash = txHash;\n\n // Emit completed steps\n this.emitProgress({\n status: NonEvmUnstakeStatus.COMPLETED,\n steps: { burning: StepStatus.COMPLETE, releasing: StepStatus.PENDING },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, NonEvmUnstakeStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n return z.object({\n amount: amountSchema,\n recipient: suiToBtcConfig.recipientSchema,\n });\n }\n}\n","/**\n * Sui Actions\n *\n * Provides factory methods for Sui operations (unstake).\n *\n * Note: Sui module must be registered before using these actions.\n *\n * @example\n * ```typescript\n * import { suiActions } from '@lombard.finance/sdk';\n *\n * const sui = suiActions(config);\n * const unstake = sui.unstake({ ... });\n * ```\n */\n\nimport type { SuiService } from '@lombard.finance/sdk-common';\n\nimport { PartnerConfiguration } from '../../client/PartnerConfiguration';\nimport type { LombardConfig } from '../../config/types';\nimport { getProviderGetter } from '../../config/types';\nimport { CapabilityRegistry } from '../../modules/CapabilityRegistry';\nimport type { SuiCoreContext } from '../../shared/context';\nimport { SuiUnstake } from './actions/unstake/SuiUnstake';\nimport type { ISuiUnstake, SuiUnstakeParams } from './actions/unstake/types';\n\n/**\n * Create Sui core context from config\n * Only called when an action is invoked (lazy initialization)\n */\nfunction createSuiCoreContext(config: LombardConfig): SuiCoreContext {\n const registry = new CapabilityRegistry(config.modules, config);\n const sui = registry.require('sui') as SuiService;\n\n return {\n env: config.env,\n partner: new PartnerConfiguration(config.partner),\n getProvider: async key => {\n const getter = getProviderGetter(config.providers, key);\n if (!getter) return undefined;\n return getter();\n },\n sui,\n };\n}\n\n/**\n * Sui Actions\n *\n * Actions are lazy-loaded - the sui module is only required when\n * an action is actually called.\n */\nexport class SuiActions {\n private _ctx: SuiCoreContext | null = null;\n\n constructor(private readonly config: LombardConfig) {}\n\n private get ctx(): SuiCoreContext {\n if (!this._ctx) {\n this._ctx = createSuiCoreContext(this.config);\n }\n return this._ctx;\n }\n\n /**\n * Unstake LBTC → BTC\n *\n * Burns LBTC on Sui and releases BTC on Bitcoin.\n *\n * @throws LombardError if sui module is not registered\n */\n unstake(params: SuiUnstakeParams): ISuiUnstake {\n return new SuiUnstake(this.ctx, params);\n }\n}\n\n/**\n * Create Sui actions from config\n */\nexport function suiActions(config: LombardConfig): SuiActions {\n return new SuiActions(config);\n}\n","/**\n * Asset Namespace\n *\n * Provides type-safe access to the asset catalog bound to an environment.\n * All asset-related operations are namespaced under `sdk.assets.*`\n *\n * @example\n * ```ts\n * const sdk = createLombardSDK({ env: Env.prod });\n *\n * const address = sdk.assets.getAddress(AssetId.LBTC, Chain.ETHEREUM);\n * const decimals = sdk.assets.getDecimals(AssetId.LBTC);\n * const chains = sdk.assets.getChains(AssetId.LBTC);\n * ```\n */\n\nimport { DEFAULT_ENV, Env } from '@lombard.finance/sdk-common';\n\nimport {\n ASSET_CATALOG,\n type AssetCatalog,\n type AssetId,\n type Chain,\n getAssetAddress,\n getAssetByAddress,\n getAssetChains,\n getAssetDecimals,\n getAssetEnvironments,\n getAssetMetadata,\n getAssetRouter,\n getBridgeAdapter,\n getPublicMarketMaker,\n getSupportedAssets,\n isAssetDeployed,\n usesAssetRouter,\n} from '../core';\n\nexport class AssetNamespace {\n private readonly catalog: AssetCatalog;\n\n constructor(\n private readonly env: Env = DEFAULT_ENV,\n catalog?: AssetCatalog,\n ) {\n this.catalog = catalog ?? ASSET_CATALOG;\n }\n\n /** Get token contract address */\n getAddress(asset: AssetId, chain: Chain): string | undefined {\n return getAssetAddress(asset, this.env, chain, this.catalog);\n }\n\n /** Get token decimals */\n getDecimals(asset: AssetId): number {\n return getAssetDecimals(asset, this.catalog);\n }\n\n /** Get asset metadata (decimals, symbol, name) */\n getMetadata(asset: AssetId) {\n return getAssetMetadata(asset, this.catalog);\n }\n\n /** Check if asset uses an asset router contract */\n usesAssetRouter(asset: AssetId, chain: Chain): boolean {\n return usesAssetRouter(asset, this.env, chain, this.catalog);\n }\n\n /** Get asset router contract address */\n getAssetRouter(asset: AssetId, chain: Chain): string | undefined {\n return getAssetRouter(asset, this.env, chain, this.catalog);\n }\n\n /** Get bridge adapter address */\n getBridgeAdapter(asset: AssetId, chain: Chain): string | undefined {\n return getBridgeAdapter(asset, this.env, chain, this.catalog);\n }\n\n /** Get public market maker address */\n getPublicMarketMaker(asset: AssetId, chain: Chain): string | undefined {\n return getPublicMarketMaker(asset, this.env, chain, this.catalog);\n }\n\n /** Find asset by contract address (reverse lookup) */\n getByAddress(address: string, chain: Chain): AssetId | undefined {\n return getAssetByAddress(address, this.env, chain, this.catalog);\n }\n\n /** Check if asset is deployed on a chain */\n isDeployed(asset: AssetId, chain: Chain): boolean {\n return isAssetDeployed(asset, this.env, chain, this.catalog);\n }\n\n /** Get all chains where asset is deployed */\n getChains(asset: AssetId): Chain[] {\n return getAssetChains(asset, this.env, this.catalog);\n }\n\n /** Get all environments where asset is deployed on a chain */\n getEnvironments(asset: AssetId, chain: Chain): Env[] {\n return getAssetEnvironments(asset, chain, this.catalog);\n }\n\n /** Get all supported assets */\n getSupportedAssets(): AssetId[] {\n return getSupportedAssets(this.catalog);\n }\n\n /** Direct access to the asset catalog */\n getCatalog(): AssetCatalog {\n return this.catalog;\n }\n}\n","/**\n * Main Lombard SDK Class\n *\n * Entry point for all Lombard operations.\n *\n * @module client/LombardSDK\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\n\nimport { BtcActions } from '../chains/btc/BtcActions';\nimport { EvmActions } from '../chains/evm/EvmActions';\nimport { SolanaActions } from '../chains/solana/SolanaActions';\nimport { StarknetActions } from '../chains/starknet/StarknetActions';\nimport { SuiActions } from '../chains/sui/SuiActions';\nimport type {\n AnyProvider,\n BtcProvider,\n EvmProvider,\n SolanaProvider,\n StarknetProvider,\n SuiProvider,\n} from '../config/providers';\nimport type { ProviderGetters, ResolvedLombardConfig } from '../config/types';\nimport { getProviderGetter } from '../config/types';\nimport { CapabilityRegistry } from '../modules/CapabilityRegistry';\nimport { ReferralsClient } from '../referrals/ReferralsClient';\nimport { LombardError, ProviderErrorCode } from '../shared/errors';\nimport { ApiNamespace } from './ApiNamespace';\nimport { AssetNamespace } from './AssetNamespace';\nimport { PartnerConfiguration } from './PartnerConfiguration';\n\ntype ProviderType = keyof ProviderGetters;\ntype ProviderCache = Map<ProviderType, AnyProvider>;\n\n/**\n * Main Lombard SDK\n *\n * Provides access to all chain actions and features.\n *\n * **Important**: Use `createLombardSDK()` to create instances.\n * Direct instantiation is not recommended.\n *\n * @example\n * ```typescript\n * // Recommended: Use the async factory\n * const sdk = await createLombardSDK({\n * env: Env.prod,\n * providers: {\n * evm: (chain) => window.ethereum,\n * },\n * });\n *\n * // Access chain actions\n * const btcStake = sdk.chain.btc.stake({\n * assetOut: AssetId.LBTC,\n * destChain: Chain.ETHEREUM,\n * });\n * ```\n */\nexport class LombardSDK<E extends Env = Env> {\n readonly config: ResolvedLombardConfig;\n readonly env: Env;\n\n /** Partner configuration manager */\n private partnerConfig: PartnerConfiguration;\n\n /** Provider cache */\n private providerCache: ProviderCache = new Map();\n\n /**\n * Chain actions (user-facing API)\n *\n * Access operations for each supported chain:\n * - btc: Bitcoin operations (stake, stakeAndDeploy, deposit)\n * - evm: EVM operations (deposit, stake, unstake, deploy, redeem)\n * - solana: Solana operations (unstake)\n * - sui: Sui operations (unstake)\n * - starknet: Starknet operations (unstake)\n */\n public readonly chain: {\n btc: BtcActions;\n evm: EvmActions;\n solana: SolanaActions;\n sui: SuiActions;\n starknet: StarknetActions;\n };\n\n public readonly assets: AssetNamespace;\n\n /**\n * API namespace for data-fetching operations\n *\n * Provides convenient access to Lombard API read operations:\n * - deposits: Fetch deposit history\n * - unstakes: Fetch unstake/redemption history\n * - points: Fetch Lux points\n * - exchangeRatio: Get exchange ratios for all supported tokens\n * - depositAddress: Get existing BTC deposit address\n */\n public readonly api: ApiNamespace;\n\n /** Feature clients */\n public readonly referrals: ReferralsClient;\n\n /** Capability registry (manages optional module services) */\n public readonly capabilities: CapabilityRegistry;\n\n constructor(config: ResolvedLombardConfig) {\n this.config = config;\n this.env = config.env as E;\n\n // Initialize partner configuration\n this.partnerConfig = new PartnerConfiguration(config.partner);\n\n // Initialize capability registry (config-only, no SDK reference needed)\n this.capabilities = new CapabilityRegistry(\n this.config.modules,\n this.config,\n );\n\n // Initialize chain actions with config (not SDK)\n this.chain = {\n btc: new BtcActions(this.config),\n evm: new EvmActions(this.config),\n solana: new SolanaActions(this.config),\n sui: new SuiActions(this.config),\n starknet: new StarknetActions(this.config),\n };\n\n // Initialize feature clients\n this.referrals = new ReferralsClient(this);\n\n // Initialize asset namespace\n this.assets = new AssetNamespace(this.env);\n\n // Initialize API namespace\n this.api = new ApiNamespace(this.env);\n }\n\n /**\n * Get a provider for a specific chain type\n *\n * Providers are lazily loaded and cached.\n *\n * @param type - Provider type ('evm', 'bitcoin', etc.)\n * @returns Provider instance\n * @throws LombardError if provider not configured\n */\n async getProvider(type: 'evm'): Promise<EvmProvider>;\n async getProvider(type: 'bitcoin'): Promise<BtcProvider>;\n async getProvider(type: 'solana'): Promise<SolanaProvider>;\n async getProvider(type: 'sui'): Promise<SuiProvider>;\n async getProvider(type: 'starknet'): Promise<StarknetProvider>;\n async getProvider(type: ProviderType): Promise<AnyProvider>;\n async getProvider(type: ProviderType): Promise<AnyProvider> {\n const cacheKey = type;\n\n // Check cache first\n if (this.providerCache.has(cacheKey)) {\n return this.providerCache.get(cacheKey) as AnyProvider;\n }\n\n // Get provider getter from config using safe accessor\n const getter = getProviderGetter<AnyProvider>(this.config.providers, type);\n if (!getter) {\n throw LombardError.providerMissing(type, type);\n }\n\n // Call getter to get provider\n const provider = await getter();\n if (!provider) {\n throw new LombardError(\n ProviderErrorCode.PROVIDER_INITIALIZATION_FAILED,\n `Failed to initialize ${type} provider`,\n );\n }\n\n // Cache and return\n this.providerCache.set(cacheKey, provider);\n return provider;\n }\n\n /**\n * Configure partner settings\n *\n * @param config - Partner configuration\n */\n configure(config: Parameters<PartnerConfiguration['update']>[0]): void {\n this.partnerConfig.update(config);\n }\n\n /**\n * Register a custom asset\n *\n * TODO: Implement asset registration\n */\n registerAsset(_asset: unknown): void {\n throw new Error('Not implemented yet');\n }\n\n /**\n * Get partner configuration\n */\n getPartnerConfig(): PartnerConfiguration {\n return this.partnerConfig;\n }\n\n getPartnerId(): string | undefined {\n return this.partnerConfig.getPartnerId();\n }\n}\n","/**\n * Async factory for creating LombardSDK instances\n *\n * This is the primary entry point for the Lombard SDK.\n * It fetches the asset catalog asynchronously and initializes the SDK.\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\n\nimport type {\n CreateConfigOptions,\n LombardConfig,\n ResolvedLombardConfig,\n} from '../config/types';\nimport { ASSET_CATALOG } from '../core/assets/catalog';\nimport type { AssetCatalog } from '../core/assets/types';\nimport { createConfig } from './createConfig';\nimport { LombardSDK } from './LombardSDK';\n\n/**\n * Module-level catalog cache\n *\n * Caches the catalog promise per environment to avoid redundant fetches.\n * Multiple calls to createLombardSDK() with the same env will share\n * the same catalog fetch.\n *\n * @internal\n */\nconst catalogCache = new Map<Env, Promise<AssetCatalog>>();\n\n/**\n * Fetch asset catalog with caching\n *\n * Currently returns bundled catalog immediately.\n * Future: Will fetch from remote S3/CDN with bundled fallback.\n *\n * The catalog is cached per environment - subsequent calls with the\n * same env return the same promise, avoiding duplicate fetches.\n *\n * @internal\n */\nfunction fetchCatalogCached(env: Env): Promise<AssetCatalog> {\n if (!catalogCache.has(env)) {\n // TODO: Implement remote catalog fetching\n // When backend is ready:\n // 1. Fetch from CDN: https://cdn.lombard.finance/catalog/{env}.json\n // 2. Fallback to ASSET_CATALOG on network failure\n // 3. Cache-Control headers will define CDN TTL\n //\n // For now, return bundled catalog immediately (wrapped in Promise)\n catalogCache.set(env, Promise.resolve(ASSET_CATALOG));\n }\n return catalogCache.get(env)!;\n}\n\n/**\n * Create a LombardSDK instance\n *\n * This is an async factory that:\n * 1. Validates configuration (sync)\n * 2. Fetches the asset catalog (async, cached per env)\n * 3. Initializes the SDK with all chain actions\n *\n * The catalog is cached at the module level - multiple SDK instances\n * with the same environment share the same catalog fetch.\n *\n * @param options - SDK configuration options or pre-made LombardConfig\n * @returns Promise resolving to LombardSDK instance\n *\n * @example\n * ```typescript\n * // Option 1: Direct creation (recommended for simple cases)\n * const sdk = await createLombardSDK({\n * env: Env.prod,\n * providers: {\n * evm: () => window.ethereum,\n * bitcoin: () => bitcoinProvider,\n * },\n * });\n *\n * // Option 2: Separate config (recommended for shared config)\n * // lib/lombard.ts\n * export const config = createConfig({\n * env: Env.prod,\n * providers: { evm: () => window.ethereum },\n * });\n *\n * // app.ts\n * import { config } from './lib/lombard';\n * const sdk = await createLombardSDK(config);\n *\n * // Use the SDK\n * const stake = sdk.chain.btc.stake({\n * destChain: Chain.ETHEREUM,\n * assetOut: AssetId.LBTC,\n * });\n * ```\n */\nexport async function createLombardSDK<E extends Env = Env>(\n options: (CreateConfigOptions & { env: E }) | LombardConfig,\n): Promise<LombardSDK<E>> {\n // If already a LombardConfig (validated), use it\n // Otherwise, create config (sync validation)\n const config: LombardConfig =\n 'modules' in options && Array.isArray(options.modules)\n ? (options as LombardConfig)\n : createConfig(options as CreateConfigOptions & { env: E });\n\n // Fetch catalog (async, cached per env)\n const catalog = await fetchCatalogCached(config.env);\n\n // Create resolved config with catalog\n const resolvedConfig: ResolvedLombardConfig = {\n ...config,\n catalog,\n };\n\n return new LombardSDK<E>(resolvedConfig);\n}\n\n/**\n * Clear the catalog cache\n *\n * Useful for testing or forcing a fresh catalog fetch.\n *\n * @internal\n */\nexport function clearCatalogCache(): void {\n catalogCache.clear();\n}\n","export type {\n AnyProvider,\n BtcProvider,\n EvmProvider,\n ProviderKey,\n ProviderMap,\n SolanaProvider,\n StarknetProvider,\n SuiProvider,\n} from '@lombard.finance/sdk-common';\nimport type {\n BtcProvider,\n EvmProvider,\n SolanaProvider,\n StarknetProvider,\n SuiProvider,\n} from '@lombard.finance/sdk-common';\n\n/**\n * Type guard to check if a provider is an EVM provider\n */\nexport function isEvmProvider(provider: unknown): provider is EvmProvider {\n return (\n typeof provider === 'object' &&\n provider !== null &&\n 'request' in provider &&\n typeof (provider as EvmProvider).request === 'function'\n );\n}\n\n/**\n * Type guard to check if a provider is a Bitcoin provider\n */\nexport function isBtcProvider(provider: unknown): provider is BtcProvider {\n return (\n typeof provider === 'object' &&\n provider !== null &&\n 'getAddresses' in provider &&\n typeof (provider as BtcProvider).getAddresses === 'function'\n );\n}\n\n/**\n * Type guard to check if a provider is a Solana provider\n */\nexport function isSolanaProvider(\n provider: unknown,\n): provider is SolanaProvider {\n return (\n typeof provider === 'object' &&\n provider !== null &&\n 'publicKey' in provider &&\n 'signAndSendTransaction' in provider\n );\n}\n\n/**\n * Type guard to check if a provider is a Sui provider\n */\nexport function isSuiProvider(provider: unknown): provider is SuiProvider {\n return (\n typeof provider === 'object' &&\n provider !== null &&\n 'getAddress' in provider &&\n 'signAndExecuteTransactionBlock' in provider\n );\n}\n\n/**\n * Type guard to check if a provider is a Starknet provider\n */\nexport function isStarknetProvider(\n provider: unknown,\n): provider is StarknetProvider {\n return (\n typeof provider === 'object' &&\n provider !== null &&\n 'address' in provider &&\n 'execute' in provider\n );\n}\n","/**\n * Event definitions for all strategy types\n *\n * This module defines strongly-typed events that strategies emit\n * during their execution lifecycle.\n */\n\nimport type { StrategyProgress } from '../core/types';\nimport type { LombardError } from './errors';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Event emitter requires bivariant `any` for type-safe event handler signatures\ntype StrategyEventHandlerMap = Record<string, (...args: any[]) => void>;\n\n/**\n * Stake operation events\n *\n * Emitted by all stake strategies (BTC → LBTC, etc.)\n */\nexport const StakeEvent = {\n /** Progress update with detailed step information */\n Progress: 'progress',\n\n /** Status change (e.g., 'idle' → 'preparing' → 'ready') */\n StatusChange: 'status-change',\n\n /** Operation completed successfully */\n Completed: 'completed',\n\n /** Operation failed */\n Failed: 'failed',\n\n /** Error occurred */\n Error: 'error',\n} as const;\n\nexport type StakeEvent = (typeof StakeEvent)[keyof typeof StakeEvent];\n\n/**\n * Deposit operation events\n *\n * Emitted by all deposit strategies (EVM, etc.)\n */\nexport const DepositEvent = {\n Progress: 'progress',\n StatusChange: 'status-change',\n Completed: 'completed',\n Failed: 'failed',\n Error: 'error',\n} as const;\n\nexport type DepositEvent = (typeof DepositEvent)[keyof typeof DepositEvent];\n\n/**\n * Redeem operation events\n *\n * Emitted by all redeem strategies (cross-chain asset redemptions)\n */\nexport const RedeemEvent = {\n Progress: 'progress',\n StatusChange: 'status-change',\n Completed: 'completed',\n Failed: 'failed',\n Error: 'error',\n} as const;\n\nexport type RedeemEvent = (typeof RedeemEvent)[keyof typeof RedeemEvent];\n\n/**\n * Unstake operation events\n *\n * Emitted by all unstake strategies (LBTC → BTC or BTC.b)\n */\nexport const UnstakeEvent = {\n Progress: 'progress',\n StatusChange: 'status-change',\n Completed: 'completed',\n Failed: 'failed',\n Error: 'error',\n} as const;\n\nexport type UnstakeEvent = (typeof UnstakeEvent)[keyof typeof UnstakeEvent];\n\n/**\n * Deploy operation events\n *\n * Emitted by deploy strategies (deploying L-Assets to DeFi protocols)\n */\nexport const DeployEvent = {\n Progress: 'progress',\n StatusChange: 'status-change',\n Completed: 'completed',\n Failed: 'failed',\n Error: 'error',\n} as const;\n\nexport type DeployEvent = (typeof DeployEvent)[keyof typeof DeployEvent];\n\n/**\n * Withdraw operation events\n *\n * Emitted by withdraw strategies (withdrawing vault shares from DeFi protocols)\n */\nexport const WithdrawEvent = {\n Progress: 'progress',\n StatusChange: 'status-change',\n Completed: 'completed',\n Failed: 'failed',\n Error: 'error',\n} as const;\n\nexport type WithdrawEvent = (typeof WithdrawEvent)[keyof typeof WithdrawEvent];\n\n/**\n * Bridge operation events\n *\n * Emitted by bridge strategies (cross-chain L-Asset transfers)\n */\nexport const BridgeEvent = {\n Progress: 'progress',\n StatusChange: 'status-change',\n Completed: 'completed',\n Failed: 'failed',\n Error: 'error',\n} as const;\n\nexport type BridgeEvent = (typeof BridgeEvent)[keyof typeof BridgeEvent];\n\n/**\n * StakeAndDeploy operation events (\"Stake and Bake\")\n *\n * Emitted by stake-and-deploy strategies (BTC → LBTC → Vault in one operation)\n */\nexport const StakeAndDeployEvent = {\n Progress: 'progress',\n StatusChange: 'status-change',\n Completed: 'completed',\n Failed: 'failed',\n Error: 'error',\n} as const;\n\nexport type StakeAndDeployEvent =\n (typeof StakeAndDeployEvent)[keyof typeof StakeAndDeployEvent];\n\n/**\n * DepositAndDeploy operation events\n *\n * Emitted by deposit-and-deploy strategies (BTC → BTC.b → Vault in one operation)\n * Similar to StakeAndDeploy but produces BTC.b instead of LBTC.\n */\nexport const DepositAndDeployEvent = {\n Progress: 'progress',\n StatusChange: 'status-change',\n Completed: 'completed',\n Failed: 'failed',\n Error: 'error',\n} as const;\n\nexport type DepositAndDeployEvent =\n (typeof DepositAndDeployEvent)[keyof typeof DepositAndDeployEvent];\n\n/**\n * Event handler type mapping for stake operations\n */\nexport interface StakeEventMap extends StrategyEventHandlerMap {\n [StakeEvent.Progress]: (progress: StrategyProgress<string>) => void;\n [StakeEvent.StatusChange]: (status: string) => void;\n [StakeEvent.Completed]: () => void;\n [StakeEvent.Failed]: () => void;\n [StakeEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Event handler type mapping for deposit operations\n */\nexport interface DepositEventMap extends StrategyEventHandlerMap {\n [DepositEvent.Progress]: (progress: StrategyProgress<string>) => void;\n [DepositEvent.StatusChange]: (status: string) => void;\n [DepositEvent.Completed]: () => void;\n [DepositEvent.Failed]: () => void;\n [DepositEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Event handler type mapping for redeem operations\n */\nexport interface RedeemEventMap extends StrategyEventHandlerMap {\n [RedeemEvent.Progress]: (progress: StrategyProgress<string>) => void;\n [RedeemEvent.StatusChange]: (status: string) => void;\n [RedeemEvent.Completed]: () => void;\n [RedeemEvent.Failed]: () => void;\n [RedeemEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Event handler type mapping for unstake operations\n */\nexport interface UnstakeEventMap extends StrategyEventHandlerMap {\n [UnstakeEvent.Progress]: (progress: StrategyProgress<string>) => void;\n [UnstakeEvent.StatusChange]: (status: string) => void;\n [UnstakeEvent.Completed]: () => void;\n [UnstakeEvent.Failed]: () => void;\n [UnstakeEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Event handler type mapping for deploy operations\n */\nexport interface DeployEventMap extends StrategyEventHandlerMap {\n [DeployEvent.Progress]: (progress: StrategyProgress<string>) => void;\n [DeployEvent.StatusChange]: (status: string) => void;\n [DeployEvent.Completed]: () => void;\n [DeployEvent.Failed]: () => void;\n [DeployEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Event handler type mapping for withdraw operations\n */\nexport interface WithdrawEventMap extends StrategyEventHandlerMap {\n [WithdrawEvent.Progress]: (progress: StrategyProgress<string>) => void;\n [WithdrawEvent.StatusChange]: (status: string) => void;\n [WithdrawEvent.Completed]: () => void;\n [WithdrawEvent.Failed]: () => void;\n [WithdrawEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Event handler type mapping for bridge operations\n */\nexport interface BridgeEventMap extends StrategyEventHandlerMap {\n [BridgeEvent.Progress]: (progress: StrategyProgress<string>) => void;\n [BridgeEvent.StatusChange]: (status: string) => void;\n [BridgeEvent.Completed]: () => void;\n [BridgeEvent.Failed]: () => void;\n [BridgeEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Event handler type mapping for stake-and-deploy operations\n */\nexport interface StakeAndDeployEventMap extends StrategyEventHandlerMap {\n [StakeAndDeployEvent.Progress]: (progress: StrategyProgress<string>) => void;\n [StakeAndDeployEvent.StatusChange]: (status: string) => void;\n [StakeAndDeployEvent.Completed]: () => void;\n [StakeAndDeployEvent.Failed]: () => void;\n [StakeAndDeployEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Event handler type mapping for deposit-and-deploy operations\n */\nexport interface DepositAndDeployEventMap extends StrategyEventHandlerMap {\n [DepositAndDeployEvent.Progress]: (\n progress: StrategyProgress<string>,\n ) => void;\n [DepositAndDeployEvent.StatusChange]: (status: string) => void;\n [DepositAndDeployEvent.Completed]: () => void;\n [DepositAndDeployEvent.Failed]: () => void;\n [DepositAndDeployEvent.Error]: (error: LombardError) => void;\n}\n\n/**\n * Generic event map type for any strategy\n */\nexport type StrategyEventMap =\n | StakeEventMap\n | DepositEventMap\n | RedeemEventMap\n | UnstakeEventMap\n | DeployEventMap\n | WithdrawEventMap\n | BridgeEventMap\n | StakeAndDeployEventMap\n | DepositAndDeployEventMap;\n\n/**\n * Generic event type for any strategy\n */\nexport type StrategyEvent =\n | StakeEvent\n | DepositEvent\n | RedeemEvent\n | UnstakeEvent\n | DeployEvent\n | WithdrawEvent\n | BridgeEvent\n | StakeAndDeployEvent\n | DepositAndDeployEvent;\n"],"names":["LOG_LEVELS","createConsoleLogger","options","level","prefix","timestamp","minLevelIndex","shouldLog","logLevel","formatMessage","msg","ts","formatMeta","meta","message","createSilentLogger","getSdkHeaders","SDK_VERSION","SDK_RUNTIME","ApiNamespace","env","DEFAULT_ENV","__publicField","address","getDepositsByAddress","getUnstakesByAddress","season","getPointsByAddress","getExchangeRatio","chainId","getDepositBtcAddress","account","vaultKey","Vault","getVaultWithdrawals","getVaultWithdrawalsAllChains","validateAndApplyDefaults","LombardError","normalized","validatePartnerConfig","partner","config","ApiService","params","generateDepositBtcAddress","d","_a","storeNetworkFeeSignature","getNetworkFeeSignature","storeStakeAndBakeSignature","apiModule","ctx","mergeModules","provided","modules","builtIns","btcModule","evmModule","mod","ensureProviders","key","hasProvider","createConfig","logger","solanaToBtcConfig","Chain","Env","bitcoinAddressSchema","isBtcUnstakeSupported","sourceChain","route","envToSolanaNetwork","SolanaUnstake","BaseAction","NonEvmUnstakeStatus","validated","validatePrepareParams","StepStatus","amount","recipient","amountInSatoshis","toSatoshi","network","txHash","z.object","amountSchema","createSolanaCoreContext","solana","CapabilityRegistry","PartnerConfiguration","getter","getProviderGetter","SolanaActions","solanaActions","starknetToBtcConfig","StarknetUnstake","createStarknetCoreContext","starknet","StarknetActions","starknetActions","suiToBtcConfig","getSuiChainId","chain","SuiUnstake","createSuiCoreContext","sui","SuiActions","suiActions","AssetNamespace","catalog","ASSET_CATALOG","asset","getAssetAddress","getAssetDecimals","getAssetMetadata","usesAssetRouter","getAssetRouter","getBridgeAdapter","getPublicMarketMaker","getAssetByAddress","isAssetDeployed","getAssetChains","getAssetEnvironments","getSupportedAssets","LombardSDK","BtcActions","EvmActions","ReferralsClient","type","cacheKey","provider","ProviderErrorCode","_asset","catalogCache","fetchCatalogCached","createLombardSDK","resolvedConfig","isEvmProvider","isBtcProvider","isSolanaProvider","isSuiProvider","isStarknetProvider","StakeEvent","DepositEvent","RedeemEvent","UnstakeEvent","DeployEvent","BridgeEvent"],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import r from "axios";
|
|
2
|
-
import { g as e } from "./api-config-CtcP3TVl.js";
|
|
3
|
-
const d = async (t, a) => {
|
|
4
|
-
const { baseApiUrl: s } = e(a);
|
|
5
|
-
try {
|
|
6
|
-
const { data: c } = await r.get(
|
|
7
|
-
`${s}/api/v1/debug/btc-script-to-address/${t}`
|
|
8
|
-
);
|
|
9
|
-
return c.btc_address;
|
|
10
|
-
} catch {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
}, i = async (t, a) => {
|
|
14
|
-
const { baseApiUrl: s } = e(a);
|
|
15
|
-
try {
|
|
16
|
-
const { data: c } = await r.get(
|
|
17
|
-
`${s}/api/v1/debug/btc-tx-info/${t}`
|
|
18
|
-
);
|
|
19
|
-
return c;
|
|
20
|
-
} catch {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
}, b = async (t, a) => {
|
|
24
|
-
const { baseApiUrl: s } = e(a);
|
|
25
|
-
try {
|
|
26
|
-
const { data: c } = await r.get(
|
|
27
|
-
`${s}/api/v1/debug/evm-by-btc-address/${t}`
|
|
28
|
-
);
|
|
29
|
-
return c.metadata;
|
|
30
|
-
} catch {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
export {
|
|
35
|
-
i as a,
|
|
36
|
-
b,
|
|
37
|
-
d as f
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=evm-by-btc-address-CwLiENtM.js.map
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import m from "axios";
|
|
2
|
-
import e from "bignumber.js";
|
|
3
|
-
import { g as c } from "./api-config-CtcP3TVl.js";
|
|
4
|
-
import { R as k, o as p } from "./token-addresses-FKpA3uc4.js";
|
|
5
|
-
const g = [p.LBTC];
|
|
6
|
-
async function B({ env: n }) {
|
|
7
|
-
const { baseApiUrl: a } = c(n), i = `${a}/api/v1/ratio`, { data: r } = await m.get(i);
|
|
8
|
-
return r.token_ratio.map((o) => ({
|
|
9
|
-
token: k[o.name],
|
|
10
|
-
tokenBTCRatio: e(o.ratio),
|
|
11
|
-
BTCTokenRatio: e(o.price)
|
|
12
|
-
})).filter((o) => g.includes(o.token)).reduce((o, t) => {
|
|
13
|
-
const { token: f, ...s } = t;
|
|
14
|
-
return o[t.token] = s, o;
|
|
15
|
-
}, {});
|
|
16
|
-
}
|
|
17
|
-
export {
|
|
18
|
-
B as g
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=get-exchange-ratio-NtnkG1kZ.js.map
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import g from "axios";
|
|
2
|
-
import { g as S } from "./api-config-CtcP3TVl.js";
|
|
3
|
-
import { d as U, f as i } from "./tokens-C6qZHzph.js";
|
|
4
|
-
import { u as C, o } from "./array-Cev6kyLJ.js";
|
|
5
|
-
import { e as n } from "./time-QPeEEEnQ.js";
|
|
6
|
-
import { a as T, b as F, c as H, d as W } from "./config-hFKqUyg3.js";
|
|
7
|
-
const B = {
|
|
8
|
-
cancelled_requests: [],
|
|
9
|
-
expired_requests: [],
|
|
10
|
-
fulfilled_requests: [],
|
|
11
|
-
open_requests: []
|
|
12
|
-
}, N = (a) => a ? "Response" in a ? N(a.Response) : {
|
|
13
|
-
cancelled_requests: a.cancelled_requests ?? [],
|
|
14
|
-
expired_requests: a.expired_requests ?? [],
|
|
15
|
-
fulfilled_requests: a.fulfilled_requests ?? [],
|
|
16
|
-
open_requests: a.open_requests ?? []
|
|
17
|
-
} : B;
|
|
18
|
-
async function D({
|
|
19
|
-
account: a,
|
|
20
|
-
chainId: r,
|
|
21
|
-
vaultKey: c = T.Veda,
|
|
22
|
-
rpcUrl: u,
|
|
23
|
-
env: p
|
|
24
|
-
}) {
|
|
25
|
-
const l = H[c];
|
|
26
|
-
if (!l)
|
|
27
|
-
throw new Error(`Unknown vault key: ${c}`);
|
|
28
|
-
if (!F(r))
|
|
29
|
-
throw new Error(
|
|
30
|
-
`Unsupported chain id: ${r}. Please switch to one of the supported chains: ${l.chains.join(", ")}`
|
|
31
|
-
);
|
|
32
|
-
const f = W[r], { bffApiUrl: m } = S(p);
|
|
33
|
-
if (!m)
|
|
34
|
-
throw new Error(
|
|
35
|
-
`Could not determine API endpoint for provided environment: ${p}`
|
|
36
|
-
);
|
|
37
|
-
const h = `${m}/sevenseas-api/withdraw-requests/${f}/${l.vaultContract.address}/${a}`, w = new URLSearchParams({
|
|
38
|
-
historical: "true"
|
|
39
|
-
}), t = `${h}?${w.toString()}`, { data: A } = await g.get(t), q = N(A), _ = q.cancelled_requests ?? [], k = q.expired_requests ?? [], x = q.fulfilled_requests ?? [], R = q.open_requests ?? [], P = C([
|
|
40
|
-
..._.map((e) => n(e.wantToken)),
|
|
41
|
-
...k.map((e) => n(e.wantToken)),
|
|
42
|
-
...x.map((e) => n(e.Request.wantToken)),
|
|
43
|
-
...R.map((e) => n(e.wantToken))
|
|
44
|
-
]), d = {};
|
|
45
|
-
for (const e of P) {
|
|
46
|
-
const s = await U(e, r, u);
|
|
47
|
-
s ? d[e] = {
|
|
48
|
-
address: s.address,
|
|
49
|
-
decimals: s.decimals,
|
|
50
|
-
symbol: s.symbol
|
|
51
|
-
} : d[e] = void 0;
|
|
52
|
-
}
|
|
53
|
-
const $ = _.map((e) => {
|
|
54
|
-
const s = d[n(e.wantToken)];
|
|
55
|
-
return {
|
|
56
|
-
amount: void 0,
|
|
57
|
-
blockNumber: e.blockNumber,
|
|
58
|
-
deadline: e.deadline,
|
|
59
|
-
shareAmount: i(e.amount, l.decimals),
|
|
60
|
-
timestamp: e.timestamp,
|
|
61
|
-
txHash: n(e.transactionHash),
|
|
62
|
-
token: s,
|
|
63
|
-
chainId: r,
|
|
64
|
-
toAddress: a
|
|
65
|
-
};
|
|
66
|
-
}), v = k.map((e) => {
|
|
67
|
-
const s = d[n(e.wantToken)];
|
|
68
|
-
return {
|
|
69
|
-
amount: void 0,
|
|
70
|
-
blockNumber: e.blockNumber,
|
|
71
|
-
deadline: e.deadline,
|
|
72
|
-
shareAmount: i(e.amount, l.decimals),
|
|
73
|
-
timestamp: e.timestamp,
|
|
74
|
-
txHash: n(e.transactionHash),
|
|
75
|
-
token: s,
|
|
76
|
-
chainId: r,
|
|
77
|
-
toAddress: a
|
|
78
|
-
};
|
|
79
|
-
}), E = x.map((e) => {
|
|
80
|
-
const s = d[n(e.Request.wantToken)];
|
|
81
|
-
return {
|
|
82
|
-
amount: i(
|
|
83
|
-
e.Fulfillment.wantAmountReceived,
|
|
84
|
-
(s == null ? void 0 : s.decimals) || 0
|
|
85
|
-
),
|
|
86
|
-
blockNumber: e.Request.blockNumber,
|
|
87
|
-
deadline: e.Request.deadline,
|
|
88
|
-
shareAmount: i(
|
|
89
|
-
e.Fulfillment.offerAmountSpent,
|
|
90
|
-
l.decimals
|
|
91
|
-
),
|
|
92
|
-
timestamp: e.Request.timestamp,
|
|
93
|
-
txHash: n(e.Request.transactionHash),
|
|
94
|
-
token: s,
|
|
95
|
-
fulfilledBlockNumber: e.Fulfillment.blockNumber,
|
|
96
|
-
fulfilledTimestamp: e.Fulfillment.timestamp,
|
|
97
|
-
fulfilledTxHash: n(e.Fulfillment.transactionHash),
|
|
98
|
-
minPrice: i(e.Request.minPrice, (s == null ? void 0 : s.decimals) || 0),
|
|
99
|
-
chainId: r,
|
|
100
|
-
toAddress: a
|
|
101
|
-
};
|
|
102
|
-
}), V = R.map((e) => {
|
|
103
|
-
const s = d[n(e.wantToken)];
|
|
104
|
-
return {
|
|
105
|
-
amount: void 0,
|
|
106
|
-
blockNumber: e.blockNumber,
|
|
107
|
-
deadline: e.deadline,
|
|
108
|
-
shareAmount: i(e.amount, l.decimals),
|
|
109
|
-
timestamp: e.timestamp,
|
|
110
|
-
txHash: n(e.transactionHash),
|
|
111
|
-
token: s,
|
|
112
|
-
minPrice: i(e.minPrice, (s == null ? void 0 : s.decimals) || 0),
|
|
113
|
-
chainId: r,
|
|
114
|
-
toAddress: a
|
|
115
|
-
};
|
|
116
|
-
});
|
|
117
|
-
return {
|
|
118
|
-
cancelled: o($, (e) => e.timestamp, "desc"),
|
|
119
|
-
expired: o(v, (e) => e.timestamp, "desc"),
|
|
120
|
-
fulfilled: o(
|
|
121
|
-
E,
|
|
122
|
-
(e) => e.fulfilledTimestamp || e.timestamp,
|
|
123
|
-
"desc"
|
|
124
|
-
),
|
|
125
|
-
open: o(V, (e) => e.timestamp, "desc")
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
async function G({
|
|
129
|
-
account: a,
|
|
130
|
-
vaultKey: r = T.Veda,
|
|
131
|
-
rpcUrl: c
|
|
132
|
-
}) {
|
|
133
|
-
const u = H[r];
|
|
134
|
-
if (!u)
|
|
135
|
-
throw new Error(`Unknown vault key: ${r}`);
|
|
136
|
-
const p = u.chains.map(
|
|
137
|
-
(t) => D({ account: a, chainId: t, vaultKey: r, rpcUrl: c }).catch((A) => (console.error(`Failed to fetch withdrawals for chain ${t}:`, A), {
|
|
138
|
-
cancelled: [],
|
|
139
|
-
expired: [],
|
|
140
|
-
fulfilled: [],
|
|
141
|
-
open: []
|
|
142
|
-
}))
|
|
143
|
-
), l = await Promise.all(p), f = [], m = [], h = [], w = [];
|
|
144
|
-
for (const t of l)
|
|
145
|
-
f.push(...t.cancelled), m.push(...t.expired), h.push(...t.fulfilled), w.push(...t.open);
|
|
146
|
-
return {
|
|
147
|
-
cancelled: o(f, (t) => t.timestamp, "desc"),
|
|
148
|
-
expired: o(m, (t) => t.timestamp, "desc"),
|
|
149
|
-
fulfilled: o(
|
|
150
|
-
h,
|
|
151
|
-
(t) => t.fulfilledTimestamp || t.timestamp,
|
|
152
|
-
"desc"
|
|
153
|
-
),
|
|
154
|
-
open: o(w, (t) => t.timestamp, "desc")
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
export {
|
|
158
|
-
G as a,
|
|
159
|
-
D as g
|
|
160
|
-
};
|
|
161
|
-
//# sourceMappingURL=get-vault-withdrawals-BrpZlt6s.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const A=require("axios"),w=require("viem"),T=require("./api-config-DkXqqfCK.cjs"),o=require("./blockchain-identifier-BzMQWh-C.cjs"),n=require("./token-addresses-DRBecUa7.cjs"),c=require("./tokens-D_HeVB5p.cjs"),S="sanctioned_address",I="api/v1/address/generate",b="destination address is under sanctions",f=[n.Token.LBTC,n.Token.BTCK,n.Token.BTCb],m=[n.Token.LBTC,n.Token.BTCK,n.Token.BTCb];async function N({address:s,token:t=n.Token.LBTC,chainId:a,signature:d,eip712Data:e,env:i,referrerCode:l,partnerId:C,captchaToken:E,signatureData:h,pubKey:g}){const{baseApiUrl:B}=T.getApiConfig(i),u=o.getChainNameById(a);if(!m.includes(t))throw new Error(`Unsupported token: ${t}`);let k={};if(u===o.BlockchainIdentifier.starknet){if(s=w.pad(s,{size:32}),!g)throw new Error("Missing parameter: pubKey");k={public_key:g}}let p={};try{f.includes(t)&&![o.BlockchainIdentifier.sui,o.BlockchainIdentifier.solana,o.BlockchainIdentifier.starknet].includes(u)&&(p={token_address:(await c.getTokenContractInfo(t,a,i,n.AddressKind.Adapter)).address})}catch(r){if(r instanceof Error&&r instanceof c.TokenContractAddressNotFoundError&&f.includes(t))throw new Error(`Unable to generate BTC deposit address for given token: ${t} in ${a}, reason: ${r.message}`)}const D={to_address:s,to_address_signature:d,to_chain:u,partner_id:C,nonce:0,captcha:E,referrer_code:l,eip_712_data:e,sb_signature_data:h,...p,...k};try{const{data:r}=await A.post(I,D,{baseURL:B});return r.address}catch(r){const _=c.getErrorMessage(r);if(U(_))return S;throw new Error(_)}}function U(s){return s.includes(b)}async function R({userDestinationAddress:s,chainId:t,env:a}){const{baseApiUrl:d}=T.getApiConfig(a);try{const{data:e}=await A.get(`${d}/api/v1/claimer/get-user-stake-and-bake-signature`,{params:{userDestinationAddress:s,chainId:t.toString()}});return{userDestinationAddress:e.user_destination_address,signature:e.signature,expirationDate:e.expiration_date,depositAmount:e.deposit_amount,chainId:e.chain_id,nonce:e.nonce}}catch(e){const i=c.getErrorMessage(e);throw new Error(`Failed to get user stake and bake signature: ${i}`)}}exports.SANCTIONED_ADDRESS=S;exports.generateDepositBtcAddress=N;exports.getUserStakeAndBakeSignature=R;
|
|
2
|
-
//# sourceMappingURL=getUserStakeAndBakeSignature-BxRq2cI1.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getUserStakeAndBakeSignature-BxRq2cI1.cjs","sources":["../../src/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.ts","../../src/api-functions/getUserStakeAndBakeSignature/getUserStakeAndBakeSignature.ts"],"sourcesContent":["import axios from 'axios';\nimport { Address, pad } from 'viem';\n\nimport { getApiConfig } from '../../common/api-config';\nimport {\n BlockchainIdentifier,\n getChainNameById,\n} from '../../common/blockchain-identifier';\nimport type {\n ChainId,\n SolanaChain,\n StarknetChainId,\n SuiChain,\n} from '../../common/chains';\nimport type { IEnvParam } from '../../common/parameters';\nimport { AddressKind, Token } from '../../tokens/token-addresses';\nimport { getTokenContractInfo } from '../../tokens/tokens';\nimport {\n getErrorMessage,\n TokenContractAddressNotFoundError,\n} from '../../utils/err';\n\n/**\n * The address which will be returned if the provided EVM address is sanctioned.\n */\nexport const SANCTIONED_ADDRESS = 'sanctioned_address';\nconst ADDRESS_URL = 'api/v1/address/generate';\nconst SANCTIONS_MESSAGE = 'destination address is under sanctions';\n\ninterface IGenerateNewAddressResponse {\n address: string;\n}\n\nexport interface IGenerateDepositBtcAddressParams extends IEnvParam {\n /**\n * The destination EVM user address where LBTC will be claimed.\n */\n address: string;\n /**\n * The intended destination token, defaults to LBTC.\n */\n token?: Token;\n /**\n * The destination chain ID where LBTC will be claimed.\n */\n chainId: ChainId | SuiChain | SolanaChain | StarknetChainId;\n /**\n * The signature of the address. The signature is generated by signing the address using EVM wallet.\n */\n signature: string;\n /**\n * The typed data object used to generate the signature if using a network fee authorization signature.\n */\n eip712Data?: string;\n /**\n * The captcha token.\n */\n captchaToken?: string;\n /**\n * The referrer code.\n */\n referrerCode?: string;\n /**\n * The referral ID.\n */\n partnerId?: string;\n /**\n * The typed data object used to generate the signature if using a stake and bake feature.\n */\n signatureData?: string;\n\n /** The pubKey required for starknet addresses signatures. */\n pubKey?: string;\n}\n\nconst EXTRA_PARAMS_TOKENS = [Token.LBTC, Token.BTCK, Token.BTCb];\nconst SUPPORTED_TOKENS = [Token.LBTC, Token.BTCK, Token.BTCb];\n\n/**\n * Generates a BTC deposit address.\n *\n * If the provided EVM address is sanctioned, the function will return the `SANCTIONED_ADDRESS`.\n *\n * @param {IGenerateDepositBtcAddressParams} parameters - The parameters for generating the deposit address.\n * @param {string} parameters.address - The destination EVM user address where LBTC will be claimed.\n * @param {ChainId} parameters.chainId - The destination chain ID where LBTC will be claimed.\n * @param {string} parameters.signature - The signature of the address. The signature is generated by signing the address using EVM wallet.\n * @param {string} parameters.eip712Data - The typed data object used to generate the signature if using a network fee authorization signature.\n * @param {string} parameters.captchaToken - The captcha token.\n * @param {string} parameters.referrerCode - The referrer code.\n * @param {string} parameters.partnerId - The partner ID.\n * @param {string} parameters.signatureData - The typed data object used to generate the signature if using a stake and bake feature.\n * @param {Env} parameters.env - The optional environment identifier.\n *\n * @returns {Promise<string>} The generated deposit address.\n */\nexport async function generateDepositBtcAddress({\n address,\n token = Token.LBTC,\n chainId,\n signature,\n eip712Data,\n env,\n referrerCode,\n partnerId,\n captchaToken,\n signatureData,\n pubKey,\n}: IGenerateDepositBtcAddressParams): Promise<string> {\n const { baseApiUrl } = getApiConfig(env);\n const toChain = getChainNameById(chainId);\n\n if (!SUPPORTED_TOKENS.includes(token)) {\n throw new Error(`Unsupported token: ${token}`);\n }\n\n let additionalParams = {};\n if (toChain === BlockchainIdentifier.starknet) {\n address = pad(address as Address, { size: 32 });\n if (!pubKey) {\n throw new Error('Missing parameter: pubKey');\n }\n\n additionalParams = {\n public_key: pubKey,\n };\n }\n\n // TODO: Refactor\n // //primaryType: 'feeApproval', - NETWORK FEE\n // //primaryType: 'Permit', - STAKE AND BAKE\n // type generationFrom =\n // | 'network-fee'\n // | 'stake-and-bake'\n // | 'destination-address';\n\n // let generation: generationFrom = 'destination-address';\n // if (signatureData != null) {\n // try {\n // const typedData = JSON.parse(signatureData);\n // if (typedData?.primaryType === 'feeApproval') {\n // generation = 'network-fee';\n // } else if (typedData?.primaryType === 'Permit') {\n // generation = 'stake-and-bake';\n // }\n // } catch {\n // // NOOP\n // }\n // }\n\n /**\n * The deposit address generation requires additional fields for tokens other\n * than LBTC.\n */\n let tokenDataParams = {};\n try {\n if (\n EXTRA_PARAMS_TOKENS.includes(token) &&\n // FIXME: Refactor in order to pull in all token addresses from all supported networks to the sdk-common package.\n // FIXME: Then remove this clause prior two token model.\n !(\n [\n BlockchainIdentifier.sui,\n BlockchainIdentifier.solana,\n BlockchainIdentifier.starknet,\n ] as BlockchainIdentifier[]\n ).includes(toChain)\n ) {\n const tokenContractInfo = await getTokenContractInfo(\n token,\n chainId as ChainId,\n env,\n AddressKind.Adapter,\n );\n tokenDataParams = {\n token_address: tokenContractInfo.address,\n };\n }\n } catch (err) {\n if (\n err instanceof Error &&\n err instanceof TokenContractAddressNotFoundError &&\n EXTRA_PARAMS_TOKENS.includes(token)\n ) {\n throw new Error(\n `Unable to generate BTC deposit address for given token: ${token} in ${chainId}, reason: ${err.message}`,\n );\n }\n }\n\n // TODO: Refactor\n // const signatureDataRequestParams =\n // generation === 'network-fee'\n // ? {\n // eip_712_data: signatureData,\n // }\n // : generation === 'stake-and-bake'\n // ? { sb_signature_data: signatureData }\n // : {};\n\n const requestParams = {\n to_address: address,\n to_address_signature: signature,\n to_chain: toChain,\n partner_id: partnerId,\n nonce: 0,\n captcha: captchaToken,\n referrer_code: referrerCode,\n eip_712_data: eip712Data,\n sb_signature_data: signatureData,\n ...tokenDataParams,\n ...additionalParams,\n };\n\n try {\n const { data } = await axios.post<IGenerateNewAddressResponse>(\n ADDRESS_URL,\n requestParams,\n { baseURL: baseApiUrl },\n );\n\n return data.address;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n\n if (isSanctioned(errorMsg)) {\n return SANCTIONED_ADDRESS;\n }\n throw new Error(errorMsg);\n }\n}\n\nfunction isSanctioned(errorMsg: string): boolean {\n return errorMsg.includes(SANCTIONS_MESSAGE);\n}\n","import axios from 'axios';\n\nimport { getApiConfig } from '../../common/api-config';\nimport { ChainId } from '../../common/chains';\nimport { IEnvParam } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\n\nexport interface IGetUserStakeAndBakeSignatureParams extends IEnvParam {\n /**\n * User's destination address\n */\n userDestinationAddress: string;\n /**\n * Chain ID\n */\n chainId: ChainId;\n}\n\nexport interface IGetUserStakeAndBakeSignatureResponse {\n /**\n * The user's destination address\n */\n userDestinationAddress: string;\n /**\n * The signature (may be empty if signature exists but not returned)\n */\n signature: string;\n /**\n * The expiration date\n */\n expirationDate: string;\n /**\n * The deposit amount\n */\n depositAmount: string;\n /**\n * The chain ID\n */\n chainId: string;\n /**\n * The nonce (increments with each new signature)\n */\n nonce?: string;\n}\n\ninterface IGetUserStakeAndBakeSignatureAPIResponse {\n user_destination_address: string;\n signature: string;\n expiration_date: string;\n deposit_amount: string;\n chain_id: string;\n nonce?: string;\n}\n\n/**\n * Get user's stake and bake signature from the API\n *\n * @param {IGetUserStakeAndBakeSignatureParams} parameters - Parameters for getting the signature\n * @param {string} parameters.userDestinationAddress - The destination account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {Env} parameters.env - The optional environment identifier.\n *\n * @returns {Promise<IGetUserStakeAndBakeSignatureResponse>} Promise that resolves to the signature response\n */\nexport async function getUserStakeAndBakeSignature({\n userDestinationAddress,\n chainId,\n env,\n}: IGetUserStakeAndBakeSignatureParams): Promise<IGetUserStakeAndBakeSignatureResponse> {\n const { baseApiUrl } = getApiConfig(env);\n\n try {\n const { data } = await axios.get<IGetUserStakeAndBakeSignatureAPIResponse>(\n `${baseApiUrl}/api/v1/claimer/get-user-stake-and-bake-signature`,\n {\n params: {\n userDestinationAddress,\n chainId: chainId.toString(),\n },\n },\n );\n\n return {\n userDestinationAddress: data.user_destination_address,\n signature: data.signature,\n expirationDate: data.expiration_date,\n depositAmount: data.deposit_amount,\n chainId: data.chain_id,\n nonce: data.nonce,\n };\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n throw new Error(\n `Failed to get user stake and bake signature: ${errorMessage}`,\n );\n }\n}\n"],"names":["SANCTIONED_ADDRESS","ADDRESS_URL","SANCTIONS_MESSAGE","EXTRA_PARAMS_TOKENS","Token","SUPPORTED_TOKENS","generateDepositBtcAddress","address","token","chainId","signature","eip712Data","env","referrerCode","partnerId","captchaToken","signatureData","pubKey","baseApiUrl","getApiConfig","toChain","getChainNameById","additionalParams","BlockchainIdentifier","pad","tokenDataParams","getTokenContractInfo","AddressKind","err","TokenContractAddressNotFoundError","requestParams","data","axios","error","errorMsg","getErrorMessage","isSanctioned","getUserStakeAndBakeSignature","userDestinationAddress","errorMessage"],"mappings":"gOAyBaA,EAAqB,qBAC5BC,EAAc,0BACdC,EAAoB,yCAgDpBC,EAAsB,CAACC,EAAAA,MAAM,KAAMA,EAAAA,MAAM,KAAMA,EAAAA,MAAM,IAAI,EACzDC,EAAmB,CAACD,EAAAA,MAAM,KAAMA,EAAAA,MAAM,KAAMA,EAAAA,MAAM,IAAI,EAoB5D,eAAsBE,EAA0B,CAC9C,QAAAC,EACA,MAAAC,EAAQJ,EAAAA,MAAM,KACd,QAAAK,EACA,UAAAC,EACA,WAAAC,EACA,IAAAC,EACA,aAAAC,EACA,UAAAC,EACA,aAAAC,EACA,cAAAC,EACA,OAAAC,CACF,EAAsD,CACpD,KAAM,CAAE,WAAAC,CAAA,EAAeC,EAAAA,aAAaP,CAAG,EACjCQ,EAAUC,EAAAA,iBAAiBZ,CAAO,EAExC,GAAI,CAACJ,EAAiB,SAASG,CAAK,EAClC,MAAM,IAAI,MAAM,sBAAsBA,CAAK,EAAE,EAG/C,IAAIc,EAAmB,CAAA,EACvB,GAAIF,IAAYG,EAAAA,qBAAqB,SAAU,CAE7C,GADAhB,EAAUiB,EAAAA,IAAIjB,EAAoB,CAAE,KAAM,GAAI,EAC1C,CAACU,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7CK,EAAmB,CACjB,WAAYL,CAAA,CAEhB,CA4BA,IAAIQ,EAAkB,CAAA,EACtB,GAAI,CAEAtB,EAAoB,SAASK,CAAK,GAGlC,CACE,CACEe,EAAAA,qBAAqB,IACrBA,EAAAA,qBAAqB,OACrBA,uBAAqB,QAAA,EAEvB,SAASH,CAAO,IAQlBK,EAAkB,CAChB,eAPwB,MAAMC,EAAAA,qBAC9BlB,EACAC,EACAG,EACAe,cAAY,OAAA,GAGqB,OAAA,EAGvC,OAASC,EAAK,CACZ,GACEA,aAAe,OACfA,aAAeC,EAAAA,mCACf1B,EAAoB,SAASK,CAAK,EAElC,MAAM,IAAI,MACR,2DAA2DA,CAAK,OAAOC,CAAO,aAAamB,EAAI,OAAO,EAAA,CAG5G,CAYA,MAAME,EAAgB,CACpB,WAAYvB,EACZ,qBAAsBG,EACtB,SAAUU,EACV,WAAYN,EACZ,MAAO,EACP,QAASC,EACT,cAAeF,EACf,aAAcF,EACd,kBAAmBK,EACnB,GAAGS,EACH,GAAGH,CAAA,EAGL,GAAI,CACF,KAAM,CAAE,KAAAS,CAAA,EAAS,MAAMC,EAAM,KAC3B/B,EACA6B,EACA,CAAE,QAASZ,CAAA,CAAW,EAGxB,OAAOa,EAAK,OACd,OAASE,EAAO,CACd,MAAMC,EAAWC,EAAAA,gBAAgBF,CAAK,EAEtC,GAAIG,EAAaF,CAAQ,EACvB,OAAOlC,EAET,MAAM,IAAI,MAAMkC,CAAQ,CAC1B,CACF,CAEA,SAASE,EAAaF,EAA2B,CAC/C,OAAOA,EAAS,SAAShC,CAAiB,CAC5C,CC1KA,eAAsBmC,EAA6B,CACjD,uBAAAC,EACA,QAAA7B,EACA,IAAAG,CACF,EAAwF,CACtF,KAAM,CAAE,WAAAM,CAAA,EAAeC,EAAAA,aAAaP,CAAG,EAEvC,GAAI,CACF,KAAM,CAAE,KAAAmB,CAAA,EAAS,MAAMC,EAAM,IAC3B,GAAGd,CAAU,oDACb,CACE,OAAQ,CACN,uBAAAoB,EACA,QAAS7B,EAAQ,SAAA,CAAS,CAC5B,CACF,EAGF,MAAO,CACL,uBAAwBsB,EAAK,yBAC7B,UAAWA,EAAK,UAChB,eAAgBA,EAAK,gBACrB,cAAeA,EAAK,eACpB,QAASA,EAAK,SACd,MAAOA,EAAK,KAAA,CAEhB,OAASE,EAAO,CACd,MAAMM,EAAeJ,EAAAA,gBAAgBF,CAAK,EAC1C,MAAM,IAAI,MACR,gDAAgDM,CAAY,EAAA,CAEhE,CACF"}
|