@avalabs/fusion-sdk 0.0.0-additive-fee-allowance-buffer-20260325170134
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/LICENSE +9 -0
- package/README.md +264 -0
- package/dist/_utils/chain.cjs +2 -0
- package/dist/_utils/chain.cjs.map +1 -0
- package/dist/_utils/chain.js +2 -0
- package/dist/_utils/chain.js.map +1 -0
- package/dist/_utils/math.cjs +2 -0
- package/dist/_utils/math.cjs.map +1 -0
- package/dist/_utils/math.js +2 -0
- package/dist/_utils/math.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/constants.cjs +2 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +102 -0
- package/dist/constants.d.ts +102 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +117 -0
- package/dist/errors.d.ts +117 -0
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -0
- package/dist/mod.cjs +1 -0
- package/dist/mod.d.cts +20 -0
- package/dist/mod.d.ts +20 -0
- package/dist/mod.js +1 -0
- package/dist/quoter/_utils.cjs +2 -0
- package/dist/quoter/_utils.cjs.map +1 -0
- package/dist/quoter/_utils.js +2 -0
- package/dist/quoter/_utils.js.map +1 -0
- package/dist/quoter/constants.cjs +2 -0
- package/dist/quoter/constants.cjs.map +1 -0
- package/dist/quoter/constants.js +2 -0
- package/dist/quoter/constants.js.map +1 -0
- package/dist/quoter/quoter.cjs +2 -0
- package/dist/quoter/quoter.cjs.map +1 -0
- package/dist/quoter/quoter.d.cts +31 -0
- package/dist/quoter/quoter.d.ts +34 -0
- package/dist/quoter/quoter.js +2 -0
- package/dist/quoter/quoter.js.map +1 -0
- package/dist/transfer-manager.cjs +2 -0
- package/dist/transfer-manager.cjs.map +1 -0
- package/dist/transfer-manager.d.cts +17 -0
- package/dist/transfer-manager.d.ts +17 -0
- package/dist/transfer-manager.js +2 -0
- package/dist/transfer-manager.js.map +1 -0
- package/dist/transfer-service/_abis.cjs +2 -0
- package/dist/transfer-service/_abis.cjs.map +1 -0
- package/dist/transfer-service/_abis.js +2 -0
- package/dist/transfer-service/_abis.js.map +1 -0
- package/dist/transfer-service/_evm-gas.cjs +2 -0
- package/dist/transfer-service/_evm-gas.cjs.map +1 -0
- package/dist/transfer-service/_evm-gas.js +2 -0
- package/dist/transfer-service/_evm-gas.js.map +1 -0
- package/dist/transfer-service/_tracking-utilities.cjs +2 -0
- package/dist/transfer-service/_tracking-utilities.cjs.map +1 -0
- package/dist/transfer-service/_tracking-utilities.js +2 -0
- package/dist/transfer-service/_tracking-utilities.js.map +1 -0
- package/dist/transfer-service/_transfer-utilities.cjs +2 -0
- package/dist/transfer-service/_transfer-utilities.cjs.map +1 -0
- package/dist/transfer-service/_transfer-utilities.js +2 -0
- package/dist/transfer-service/_transfer-utilities.js.map +1 -0
- package/dist/transfer-service/_utils.cjs +2 -0
- package/dist/transfer-service/_utils.cjs.map +1 -0
- package/dist/transfer-service/_utils.js +2 -0
- package/dist/transfer-service/_utils.js.map +1 -0
- package/dist/transfer-service/_warden-config-schema.cjs +2 -0
- package/dist/transfer-service/_warden-config-schema.cjs.map +1 -0
- package/dist/transfer-service/_warden-config-schema.js +2 -0
- package/dist/transfer-service/_warden-config-schema.js.map +1 -0
- package/dist/transfer-service/_warden-config.cjs +2 -0
- package/dist/transfer-service/_warden-config.cjs.map +1 -0
- package/dist/transfer-service/_warden-config.js +2 -0
- package/dist/transfer-service/_warden-config.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_constants.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_constants.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_constants.js +2 -0
- package/dist/transfer-service/avalanche-evm/_constants.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-assets.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-assets.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-assets.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-assets.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.js +2 -0
- package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/fee.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/fee.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/fee.js +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/fee.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/get-config.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/get-config.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/get-config.js +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/get-config.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/unwrap.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/unwrap.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/unwrap.js +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/unwrap.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/validations.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/validations.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/validations.js +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/validations.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/wrap.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/wrap.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/_utils/wrap.js +2 -0
- package/dist/transfer-service/avalanche-evm/_utils/wrap.js.map +1 -0
- package/dist/transfer-service/avalanche-evm/avalanche-evm-service.cjs +2 -0
- package/dist/transfer-service/avalanche-evm/avalanche-evm-service.cjs.map +1 -0
- package/dist/transfer-service/avalanche-evm/avalanche-evm-service.js +2 -0
- package/dist/transfer-service/avalanche-evm/avalanche-evm-service.js.map +1 -0
- package/dist/transfer-service/fetch-utilities.cjs +4 -0
- package/dist/transfer-service/fetch-utilities.cjs.map +1 -0
- package/dist/transfer-service/fetch-utilities.js +4 -0
- package/dist/transfer-service/fetch-utilities.js.map +1 -0
- package/dist/transfer-service/lombard/_schema.cjs +2 -0
- package/dist/transfer-service/lombard/_schema.cjs.map +1 -0
- package/dist/transfer-service/lombard/_schema.js +2 -0
- package/dist/transfer-service/lombard/_schema.js.map +1 -0
- package/dist/transfer-service/lombard/_utils/asset.cjs +2 -0
- package/dist/transfer-service/lombard/_utils/asset.cjs.map +1 -0
- package/dist/transfer-service/lombard/_utils/asset.js +2 -0
- package/dist/transfer-service/lombard/_utils/asset.js.map +1 -0
- package/dist/transfer-service/lombard/_utils/chain.cjs +2 -0
- package/dist/transfer-service/lombard/_utils/chain.cjs.map +1 -0
- package/dist/transfer-service/lombard/_utils/chain.js +2 -0
- package/dist/transfer-service/lombard/_utils/chain.js.map +1 -0
- package/dist/transfer-service/lombard/_utils/fee.cjs +2 -0
- package/dist/transfer-service/lombard/_utils/fee.cjs.map +1 -0
- package/dist/transfer-service/lombard/_utils/fee.js +2 -0
- package/dist/transfer-service/lombard/_utils/fee.js.map +1 -0
- package/dist/transfer-service/lombard/_utils/metadata.cjs +2 -0
- package/dist/transfer-service/lombard/_utils/metadata.cjs.map +1 -0
- package/dist/transfer-service/lombard/_utils/metadata.js +2 -0
- package/dist/transfer-service/lombard/_utils/metadata.js.map +1 -0
- package/dist/transfer-service/lombard/_utils/utxo.cjs +2 -0
- package/dist/transfer-service/lombard/_utils/utxo.cjs.map +1 -0
- package/dist/transfer-service/lombard/_utils/utxo.js +2 -0
- package/dist/transfer-service/lombard/_utils/utxo.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.js.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb-service.cjs +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb-service.cjs.map +1 -0
- package/dist/transfer-service/lombard/btc-to-btcb-service.js +2 -0
- package/dist/transfer-service/lombard/btc-to-btcb-service.js.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.cjs +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.cjs.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.js +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.js.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.cjs +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.cjs.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.js +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.js.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.cjs +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.cjs.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.js +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.js.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.cjs +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.cjs.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.js +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.js.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc-service.cjs +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc-service.cjs.map +1 -0
- package/dist/transfer-service/lombard/btcb-to-btc-service.js +2 -0
- package/dist/transfer-service/lombard/btcb-to-btc-service.js.map +1 -0
- package/dist/transfer-service/lombard/constants.cjs +2 -0
- package/dist/transfer-service/lombard/constants.cjs.map +1 -0
- package/dist/transfer-service/lombard/constants.js +2 -0
- package/dist/transfer-service/lombard/constants.js.map +1 -0
- package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.cjs +2 -0
- package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.cjs.map +1 -0
- package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.js +2 -0
- package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.js.map +1 -0
- package/dist/transfer-service/markr/_abis/swap-wrapper-abi.cjs +2 -0
- package/dist/transfer-service/markr/_abis/swap-wrapper-abi.cjs.map +1 -0
- package/dist/transfer-service/markr/_abis/swap-wrapper-abi.js +2 -0
- package/dist/transfer-service/markr/_abis/swap-wrapper-abi.js.map +1 -0
- package/dist/transfer-service/markr/_api.cjs +2 -0
- package/dist/transfer-service/markr/_api.cjs.map +1 -0
- package/dist/transfer-service/markr/_api.js +2 -0
- package/dist/transfer-service/markr/_api.js.map +1 -0
- package/dist/transfer-service/markr/_handlers/analyze-support.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/analyze-support.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/analyze-support.js +2 -0
- package/dist/transfer-service/markr/_handlers/analyze-support.js.map +1 -0
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.js +2 -0
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.js.map +1 -0
- package/dist/transfer-service/markr/_handlers/get-assets.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/get-assets.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/get-assets.js +2 -0
- package/dist/transfer-service/markr/_handlers/get-assets.js.map +1 -0
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js +2 -0
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js.map +1 -0
- package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.js +2 -0
- package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.js.map +1 -0
- package/dist/transfer-service/markr/_handlers/stream-quotes.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/stream-quotes.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/stream-quotes.js +2 -0
- package/dist/transfer-service/markr/_handlers/stream-quotes.js.map +1 -0
- package/dist/transfer-service/markr/_handlers/track-transfer.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/track-transfer.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/track-transfer.js +2 -0
- package/dist/transfer-service/markr/_handlers/track-transfer.js.map +1 -0
- package/dist/transfer-service/markr/_handlers/transfer-asset.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/transfer-asset.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/transfer-asset.js +2 -0
- package/dist/transfer-service/markr/_handlers/transfer-asset.js.map +1 -0
- package/dist/transfer-service/markr/_schema.cjs +2 -0
- package/dist/transfer-service/markr/_schema.cjs.map +1 -0
- package/dist/transfer-service/markr/_schema.js +2 -0
- package/dist/transfer-service/markr/_schema.js.map +1 -0
- package/dist/transfer-service/markr/_solana-utils.cjs +2 -0
- package/dist/transfer-service/markr/_solana-utils.cjs.map +1 -0
- package/dist/transfer-service/markr/_solana-utils.js +2 -0
- package/dist/transfer-service/markr/_solana-utils.js.map +1 -0
- package/dist/transfer-service/markr/_type-guards.cjs +2 -0
- package/dist/transfer-service/markr/_type-guards.cjs.map +1 -0
- package/dist/transfer-service/markr/_type-guards.js +2 -0
- package/dist/transfer-service/markr/_type-guards.js.map +1 -0
- package/dist/transfer-service/markr/_utils.cjs +2 -0
- package/dist/transfer-service/markr/_utils.cjs.map +1 -0
- package/dist/transfer-service/markr/_utils.js +2 -0
- package/dist/transfer-service/markr/_utils.js.map +1 -0
- package/dist/transfer-service/markr/constants.cjs +2 -0
- package/dist/transfer-service/markr/constants.cjs.map +1 -0
- package/dist/transfer-service/markr/constants.js +2 -0
- package/dist/transfer-service/markr/constants.js.map +1 -0
- package/dist/transfer-service/markr/markr-service.cjs +2 -0
- package/dist/transfer-service/markr/markr-service.cjs.map +1 -0
- package/dist/transfer-service/markr/markr-service.js +2 -0
- package/dist/transfer-service/markr/markr-service.js.map +1 -0
- package/dist/transfer-service/service-schemas.cjs +2 -0
- package/dist/transfer-service/service-schemas.cjs.map +1 -0
- package/dist/transfer-service/service-schemas.js +2 -0
- package/dist/transfer-service/service-schemas.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_utils.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/_utils.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/_utils.js +2 -0
- package/dist/transfer-service/wrap-unwrap/_utils.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/constants.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/constants.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/constants.js +2 -0
- package/dist/transfer-service/wrap-unwrap/constants.js.map +1 -0
- package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs +2 -0
- package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs.map +1 -0
- package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js +2 -0
- package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js.map +1 -0
- package/dist/type-guards.cjs +2 -0
- package/dist/type-guards.cjs.map +1 -0
- package/dist/type-guards.d.cts +16 -0
- package/dist/type-guards.d.ts +16 -0
- package/dist/type-guards.js +2 -0
- package/dist/type-guards.js.map +1 -0
- package/dist/types/asset.d.cts +66 -0
- package/dist/types/asset.d.ts +66 -0
- package/dist/types/bitcoin.d.cts +66 -0
- package/dist/types/bitcoin.d.ts +66 -0
- package/dist/types/caip.d.cts +30 -0
- package/dist/types/caip.d.ts +30 -0
- package/dist/types/chain.d.cts +17 -0
- package/dist/types/chain.d.ts +17 -0
- package/dist/types/fee.d.cts +13 -0
- package/dist/types/fee.d.ts +13 -0
- package/dist/types/quote.d.cts +165 -0
- package/dist/types/quote.d.ts +165 -0
- package/dist/types/service.d.cts +247 -0
- package/dist/types/service.d.ts +247 -0
- package/dist/types/signer.d.cts +52 -0
- package/dist/types/signer.d.ts +52 -0
- package/dist/types/transfer-manager.d.cts +119 -0
- package/dist/types/transfer-manager.d.ts +119 -0
- package/dist/types/transfer.d.cts +126 -0
- package/dist/types/transfer.d.ts +126 -0
- package/dist/types/utility-types.d.cts +21 -0
- package/dist/types/utility-types.d.ts +21 -0
- package/dist/utils/asset-id.cjs +2 -0
- package/dist/utils/asset-id.cjs.map +1 -0
- package/dist/utils/asset-id.js +2 -0
- package/dist/utils/asset-id.js.map +1 -0
- package/dist/utils/bitcoin-address.cjs +2 -0
- package/dist/utils/bitcoin-address.cjs.map +1 -0
- package/dist/utils/bitcoin-address.js +2 -0
- package/dist/utils/bitcoin-address.js.map +1 -0
- package/dist/utils/caip.cjs +2 -0
- package/dist/utils/caip.cjs.map +1 -0
- package/dist/utils/caip.d.cts +49 -0
- package/dist/utils/caip.d.ts +49 -0
- package/dist/utils/caip.js +2 -0
- package/dist/utils/caip.js.map +1 -0
- package/dist/utils/evm-address.cjs +2 -0
- package/dist/utils/evm-address.cjs.map +1 -0
- package/dist/utils/evm-address.js +2 -0
- package/dist/utils/evm-address.js.map +1 -0
- package/dist/utils/price-impact.cjs +2 -0
- package/dist/utils/price-impact.cjs.map +1 -0
- package/dist/utils/price-impact.d.cts +31 -0
- package/dist/utils/price-impact.d.ts +31 -0
- package/dist/utils/price-impact.js +2 -0
- package/dist/utils/price-impact.js.map +1 -0
- package/dist/utils/quote-fees.cjs +2 -0
- package/dist/utils/quote-fees.cjs.map +1 -0
- package/dist/utils/quote-fees.js +2 -0
- package/dist/utils/quote-fees.js.map +1 -0
- package/dist/utils/sol-address.cjs +2 -0
- package/dist/utils/sol-address.cjs.map +1 -0
- package/dist/utils/sol-address.js +2 -0
- package/dist/utils/sol-address.js.map +1 -0
- package/dist/utils/solana-transaction.d.cts +15 -0
- package/dist/utils/solana-transaction.d.ts +17 -0
- package/dist/utils/transfer-utils.cjs +2 -0
- package/dist/utils/transfer-utils.cjs.map +1 -0
- package/dist/utils/transfer-utils.d.cts +8 -0
- package/dist/utils/transfer-utils.d.ts +8 -0
- package/dist/utils/transfer-utils.js +2 -0
- package/dist/utils/transfer-utils.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee.cjs","names":[],"sources":["../../../../src/transfer-service/lombard/_utils/fee.ts"],"sourcesContent":["import {\n ChainId,\n Env,\n getMinRedeemAmount,\n getMintingFee,\n getRedeemFee,\n toBaseDenomination,\n Token,\n} from '@lombard.finance/sdk';\n\nexport async function getFees(\n token: Token,\n chainId: ChainId,\n env?: Env,\n): Promise<{ minRedeemAmount: bigint; mintingFee: bigint; redeemFee: bigint }> {\n const [mintingFeeValue, redeemFeeValue, minRedeemAmountValue] = await Promise.all([\n getMintingFee({ token, chainId, env }),\n getRedeemFee({ token, chainId, env }),\n getMinRedeemAmount({ token, chainId, env }),\n ]);\n\n return {\n mintingFee: BigInt(toBaseDenomination(mintingFeeValue, 8).toFixed()),\n redeemFee: BigInt(toBaseDenomination(redeemFeeValue, 8).toFixed()),\n minRedeemAmount: BigInt(toBaseDenomination(minRedeemAmountValue, 8).toFixed()),\n };\n}\n"],"mappings":"yFAUA,eAAsB,EACpB,EACA,EACA,EAC6E,CAC7E,GAAM,CAAC,EAAiB,EAAgB,GAAwB,MAAM,QAAQ,IAAI,qBAClE,CAAE,QAAO,UAAS,MAAK,CAAC,oBACzB,CAAE,QAAO,UAAS,MAAK,CAAC,0BAClB,CAAE,QAAO,UAAS,MAAK,CAAC,CAC5C,CAAC,CAEF,MAAO,CACL,WAAY,QAAA,EAAA,EAAA,oBAA0B,EAAiB,EAAE,CAAC,SAAS,CAAC,CACpE,UAAW,QAAA,EAAA,EAAA,oBAA0B,EAAgB,EAAE,CAAC,SAAS,CAAC,CAClE,gBAAiB,QAAA,EAAA,EAAA,oBAA0B,EAAsB,EAAE,CAAC,SAAS,CAAC,CAC/E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ChainId as e,Env as t,Token as n,getMinRedeemAmount as r,getMintingFee as i,getRedeemFee as a,toBaseDenomination as o}from"@lombard.finance/sdk";async function s(e,t,n){let[s,c,l]=await Promise.all([i({token:e,chainId:t,env:n}),a({token:e,chainId:t,env:n}),r({token:e,chainId:t,env:n})]);return{mintingFee:BigInt(o(s,8).toFixed()),redeemFee:BigInt(o(c,8).toFixed()),minRedeemAmount:BigInt(o(l,8).toFixed())}}export{s as getFees};
|
|
2
|
+
//# sourceMappingURL=fee.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee.js","names":[],"sources":["../../../../src/transfer-service/lombard/_utils/fee.ts"],"sourcesContent":["import {\n ChainId,\n Env,\n getMinRedeemAmount,\n getMintingFee,\n getRedeemFee,\n toBaseDenomination,\n Token,\n} from '@lombard.finance/sdk';\n\nexport async function getFees(\n token: Token,\n chainId: ChainId,\n env?: Env,\n): Promise<{ minRedeemAmount: bigint; mintingFee: bigint; redeemFee: bigint }> {\n const [mintingFeeValue, redeemFeeValue, minRedeemAmountValue] = await Promise.all([\n getMintingFee({ token, chainId, env }),\n getRedeemFee({ token, chainId, env }),\n getMinRedeemAmount({ token, chainId, env }),\n ]);\n\n return {\n mintingFee: BigInt(toBaseDenomination(mintingFeeValue, 8).toFixed()),\n redeemFee: BigInt(toBaseDenomination(redeemFeeValue, 8).toFixed()),\n minRedeemAmount: BigInt(toBaseDenomination(minRedeemAmountValue, 8).toFixed()),\n };\n}\n"],"mappings":"wJAUA,eAAsB,EACpB,EACA,EACA,EAC6E,CAC7E,GAAM,CAAC,EAAiB,EAAgB,GAAwB,MAAM,QAAQ,IAAI,CAChF,EAAc,CAAE,QAAO,UAAS,MAAK,CAAC,CACtC,EAAa,CAAE,QAAO,UAAS,MAAK,CAAC,CACrC,EAAmB,CAAE,QAAO,UAAS,MAAK,CAAC,CAC5C,CAAC,CAEF,MAAO,CACL,WAAY,OAAO,EAAmB,EAAiB,EAAE,CAAC,SAAS,CAAC,CACpE,UAAW,OAAO,EAAmB,EAAgB,EAAE,CAAC,SAAS,CAAC,CAClE,gBAAiB,OAAO,EAAmB,EAAsB,EAAE,CAAC,SAAS,CAAC,CAC/E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);let e=require(`@lombard.finance/sdk`);const t=t=>t.notarizationStatus===e.ENotarizationStatus.NOTARIZATION_STATUS_FAILED||t.sessionState===e.ESessionState.SESSION_STATE_EXPIRED,n=(e,t,n)=>({needsNotarizationUpdate:t!==void 0&&e?.notarizationStatus!==t,needsSessionStateUpdate:n!==void 0&&e?.sessionState!==n});exports.getMetadataUpdates=n,exports.isDepositFailed=t;
|
|
2
|
+
//# sourceMappingURL=metadata.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.cjs","names":["ENotarizationStatus","ESessionState"],"sources":["../../../../src/transfer-service/lombard/_utils/metadata.ts"],"sourcesContent":["import { ENotarizationStatus, ESessionState } from '@lombard.finance/sdk';\nimport type { Transfer } from '../../../types/transfer';\n\n/**\n * Type definition for Lombard deposit metadata\n */\nexport interface LombardDepositMetadata extends Record<string, unknown> {\n notarizationStatus?: ENotarizationStatus;\n sessionState?: ESessionState;\n}\n\n/**\n * Helper to check if a deposit has failed\n * @param deposit - An object containing notarizationStatus and/or sessionState\n * @returns True if the deposit has failed or expired\n */\nexport const isDepositFailed = (deposit: {\n notarizationStatus?: ENotarizationStatus;\n sessionState?: ESessionState;\n}): boolean => {\n return (\n deposit.notarizationStatus === ENotarizationStatus.NOTARIZATION_STATUS_FAILED ||\n deposit.sessionState === ESessionState.SESSION_STATE_EXPIRED\n );\n};\n\n/**\n * Helper to check if metadata needs to be updated with new values\n * @param currentMetadata - Current transfer metadata\n * @param newNotarizationStatus - New notarization status\n * @param newSessionState - New session state\n * @returns Object indicating which fields need updating\n */\nexport const getMetadataUpdates = (\n currentMetadata: Transfer['metadata'],\n newNotarizationStatus?: ENotarizationStatus,\n newSessionState?: ESessionState,\n): { needsNotarizationUpdate: boolean; needsSessionStateUpdate: boolean } => {\n const needsNotarizationUpdate =\n newNotarizationStatus !== undefined && currentMetadata?.['notarizationStatus'] !== newNotarizationStatus;\n\n const needsSessionStateUpdate =\n newSessionState !== undefined && currentMetadata?.['sessionState'] !== newSessionState;\n\n return { needsNotarizationUpdate, needsSessionStateUpdate };\n};\n"],"mappings":"yFAgBA,MAAa,EAAmB,GAK5B,EAAQ,qBAAuBA,EAAAA,oBAAoB,4BACnD,EAAQ,eAAiBC,EAAAA,cAAc,sBAW9B,GACX,EACA,EACA,KAQO,CAAE,wBALP,IAA0B,IAAA,IAAa,GAAkB,qBAA0B,EAKnD,wBAFhC,IAAoB,IAAA,IAAa,GAAkB,eAAoB,EAEd"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ENotarizationStatus as e,ESessionState as t}from"@lombard.finance/sdk";const n=n=>n.notarizationStatus===e.NOTARIZATION_STATUS_FAILED||n.sessionState===t.SESSION_STATE_EXPIRED,r=(e,t,n)=>({needsNotarizationUpdate:t!==void 0&&e?.notarizationStatus!==t,needsSessionStateUpdate:n!==void 0&&e?.sessionState!==n});export{r as getMetadataUpdates,n as isDepositFailed};
|
|
2
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","names":[],"sources":["../../../../src/transfer-service/lombard/_utils/metadata.ts"],"sourcesContent":["import { ENotarizationStatus, ESessionState } from '@lombard.finance/sdk';\nimport type { Transfer } from '../../../types/transfer';\n\n/**\n * Type definition for Lombard deposit metadata\n */\nexport interface LombardDepositMetadata extends Record<string, unknown> {\n notarizationStatus?: ENotarizationStatus;\n sessionState?: ESessionState;\n}\n\n/**\n * Helper to check if a deposit has failed\n * @param deposit - An object containing notarizationStatus and/or sessionState\n * @returns True if the deposit has failed or expired\n */\nexport const isDepositFailed = (deposit: {\n notarizationStatus?: ENotarizationStatus;\n sessionState?: ESessionState;\n}): boolean => {\n return (\n deposit.notarizationStatus === ENotarizationStatus.NOTARIZATION_STATUS_FAILED ||\n deposit.sessionState === ESessionState.SESSION_STATE_EXPIRED\n );\n};\n\n/**\n * Helper to check if metadata needs to be updated with new values\n * @param currentMetadata - Current transfer metadata\n * @param newNotarizationStatus - New notarization status\n * @param newSessionState - New session state\n * @returns Object indicating which fields need updating\n */\nexport const getMetadataUpdates = (\n currentMetadata: Transfer['metadata'],\n newNotarizationStatus?: ENotarizationStatus,\n newSessionState?: ESessionState,\n): { needsNotarizationUpdate: boolean; needsSessionStateUpdate: boolean } => {\n const needsNotarizationUpdate =\n newNotarizationStatus !== undefined && currentMetadata?.['notarizationStatus'] !== newNotarizationStatus;\n\n const needsSessionStateUpdate =\n newSessionState !== undefined && currentMetadata?.['sessionState'] !== newSessionState;\n\n return { needsNotarizationUpdate, needsSessionStateUpdate };\n};\n"],"mappings":"8EAgBA,MAAa,EAAmB,GAK5B,EAAQ,qBAAuB,EAAoB,4BACnD,EAAQ,eAAiB,EAAc,sBAW9B,GACX,EACA,EACA,KAQO,CAAE,wBALP,IAA0B,IAAA,IAAa,GAAkB,qBAA0B,EAKnD,wBAFhC,IAAoB,IAAA,IAAa,GAAkB,eAAoB,EAEd"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../errors.cjs`),n=require(`../_schema.cjs`);let r=require(`coinselect`);r=e.__toESM(r);function i(e){let t=[];return e.filter(e=>{let n=e.txHash+e.index.toString();return t.includes(n)?!1:(t.push(n),!0)})}async function a(e,a,o,s,c,l){let{inputs:u,outputs:d,fee:f}=(0,r.default)(i(c),[{address:e,value:Number(o)}],s);if(typeof f!=`number`)throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.UNKNOWN,{details:`Unable to choose utxo properly`});if(!u||!d||!d.length)return{fee:f};let p=await l.getScriptsForUtxos(u),m=n.BitcoinInputUTXOArraySchema.parse(p),h=[d[0]],g=d[1];return g&&h.push({address:a,value:g.value}),{fee:f,inputs:m,outputs:n.BitcoinOutputUTXOArraySchema.parse(h)}}exports.selectUtxos=a;
|
|
2
|
+
//# sourceMappingURL=utxo.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utxo.cjs","names":["SdkError","ErrorReason","ErrorCode","BitcoinInputUTXOArraySchema","BitcoinOutputUTXOArraySchema"],"sources":["../../../../src/transfer-service/lombard/_utils/utxo.ts"],"sourcesContent":["import coinSelect from 'coinselect';\nimport { ErrorCode, ErrorReason, SdkError } from '../../../errors';\nimport type {\n BitcoinInputUTXO,\n BitcoinFunctions,\n BitcoinInputUTXOWithOptionalScript,\n BitcoinOutputUTXO,\n} from '../../../types/bitcoin';\nimport { BitcoinInputUTXOArraySchema, BitcoinOutputUTXOArraySchema } from '../_schema';\n\nfunction filterDuplicateUTXOs<\n InputUtxo extends BitcoinInputUTXO | BitcoinInputUTXOWithOptionalScript = BitcoinInputUTXO,\n>(utxos: InputUtxo[]) {\n const seen: string[] = [];\n return utxos.filter((utxo) => {\n const key = utxo.txHash + utxo.index.toString();\n if (seen.includes(key)) return false;\n seen.push(key);\n return true;\n });\n}\n\n/**\n * Uses coinselect to select the input and output utxos for the given information.\n *\n * @param to Destination address.\n * @param changeAddress Change address.\n * @param amount Amount to send in satoshis.\n * @param feeRate Satoshis per byte.\n * @param sourceUtxos UTXOs to pick from to construct the transaction.\n * @param bitcoinFunctions bitcoinFunctions from initializer\n */\nexport async function selectUtxos(\n to: string,\n changeAddress: string,\n amount: bigint,\n feeRate: number,\n sourceUtxos: BitcoinInputUTXOWithOptionalScript[],\n bitcoinFunctions: BitcoinFunctions,\n): Promise<{ fee: number; inputs?: BitcoinInputUTXO[]; outputs?: BitcoinOutputUTXO[] }> {\n const filtered = filterDuplicateUTXOs(sourceUtxos);\n const targets = [{ address: to, value: Number(amount) }];\n\n /**\n * Note: Each algorithm will add a change output if the input - output - fee\n * value difference is over a dust threshold. This is calculated independently\n * by utils.finalize, irrespective of the algorithm chosen, for the purposes\n * of safety.\n */\n const { inputs, outputs, fee } = coinSelect(filtered, targets, feeRate);\n\n // Should not get here but we need to check the returned value types\n if (typeof fee !== 'number') {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.UNKNOWN, { details: 'Unable to choose utxo properly' });\n }\n\n // If inputs or outputs is not defined then we can not complete this transaction\n if (!inputs || !outputs || !outputs.length) return { fee };\n const inputsWithScript = await bitcoinFunctions.getScriptsForUtxos(inputs);\n\n const validatedInput = BitcoinInputUTXOArraySchema.parse(inputsWithScript);\n\n // Change is only returned if it's above the dust threshold\n // address is missing in change. So assigning it before validation to keep force the address to be required.\n const finalOuts = [outputs[0]];\n const change = outputs[1];\n if (change) {\n finalOuts.push({\n address: changeAddress,\n value: change.value,\n });\n }\n\n const validatedOutput = BitcoinOutputUTXOArraySchema.parse(finalOuts);\n\n return {\n fee,\n inputs: validatedInput,\n outputs: validatedOutput,\n };\n}\n"],"mappings":"mKAUA,SAAS,EAEP,EAAoB,CACpB,IAAM,EAAiB,EAAE,CACzB,OAAO,EAAM,OAAQ,GAAS,CAC5B,IAAM,EAAM,EAAK,OAAS,EAAK,MAAM,UAAU,CAG/C,OAFI,EAAK,SAAS,EAAI,CAAS,IAC/B,EAAK,KAAK,EAAI,CACP,KACP,CAaJ,eAAsB,EACpB,EACA,EACA,EACA,EACA,EACA,EACsF,CAUtF,GAAM,CAAE,SAAQ,UAAS,QAAA,EAAA,EAAA,SATR,EAAqB,EAAY,CAClC,CAAC,CAAE,QAAS,EAAI,MAAO,OAAO,EAAO,CAAE,CAAC,CAQO,EAAQ,CAGvE,GAAI,OAAO,GAAQ,SACjB,MAAM,IAAIA,EAAAA,SAASC,EAAAA,YAAY,QAASC,EAAAA,UAAU,QAAS,CAAE,QAAS,iCAAkC,CAAC,CAI3G,GAAI,CAAC,GAAU,CAAC,GAAW,CAAC,EAAQ,OAAQ,MAAO,CAAE,MAAK,CAC1D,IAAM,EAAmB,MAAM,EAAiB,mBAAmB,EAAO,CAEpE,EAAiBC,EAAAA,4BAA4B,MAAM,EAAiB,CAIpE,EAAY,CAAC,EAAQ,GAAG,CACxB,EAAS,EAAQ,GAUvB,OATI,GACF,EAAU,KAAK,CACb,QAAS,EACT,MAAO,EAAO,MACf,CAAC,CAKG,CACL,MACA,OAAQ,EACR,QALsBC,EAAAA,6BAA6B,MAAM,EAAU,CAMpE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e,ErrorReason as t,SdkError as n}from"../../../errors.js";import{BitcoinInputUTXOArraySchema as r,BitcoinOutputUTXOArraySchema as i}from"../_schema.js";import a from"coinselect";function o(e){let t=[];return e.filter(e=>{let n=e.txHash+e.index.toString();return t.includes(n)?!1:(t.push(n),!0)})}async function s(s,c,l,u,d,f){let{inputs:p,outputs:m,fee:h}=a(o(d),[{address:s,value:Number(l)}],u);if(typeof h!=`number`)throw new n(t.UNKNOWN,e.UNKNOWN,{details:`Unable to choose utxo properly`});if(!p||!m||!m.length)return{fee:h};let g=await f.getScriptsForUtxos(p),_=r.parse(g),v=[m[0]],y=m[1];return y&&v.push({address:c,value:y.value}),{fee:h,inputs:_,outputs:i.parse(v)}}export{s as selectUtxos};
|
|
2
|
+
//# sourceMappingURL=utxo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utxo.js","names":[],"sources":["../../../../src/transfer-service/lombard/_utils/utxo.ts"],"sourcesContent":["import coinSelect from 'coinselect';\nimport { ErrorCode, ErrorReason, SdkError } from '../../../errors';\nimport type {\n BitcoinInputUTXO,\n BitcoinFunctions,\n BitcoinInputUTXOWithOptionalScript,\n BitcoinOutputUTXO,\n} from '../../../types/bitcoin';\nimport { BitcoinInputUTXOArraySchema, BitcoinOutputUTXOArraySchema } from '../_schema';\n\nfunction filterDuplicateUTXOs<\n InputUtxo extends BitcoinInputUTXO | BitcoinInputUTXOWithOptionalScript = BitcoinInputUTXO,\n>(utxos: InputUtxo[]) {\n const seen: string[] = [];\n return utxos.filter((utxo) => {\n const key = utxo.txHash + utxo.index.toString();\n if (seen.includes(key)) return false;\n seen.push(key);\n return true;\n });\n}\n\n/**\n * Uses coinselect to select the input and output utxos for the given information.\n *\n * @param to Destination address.\n * @param changeAddress Change address.\n * @param amount Amount to send in satoshis.\n * @param feeRate Satoshis per byte.\n * @param sourceUtxos UTXOs to pick from to construct the transaction.\n * @param bitcoinFunctions bitcoinFunctions from initializer\n */\nexport async function selectUtxos(\n to: string,\n changeAddress: string,\n amount: bigint,\n feeRate: number,\n sourceUtxos: BitcoinInputUTXOWithOptionalScript[],\n bitcoinFunctions: BitcoinFunctions,\n): Promise<{ fee: number; inputs?: BitcoinInputUTXO[]; outputs?: BitcoinOutputUTXO[] }> {\n const filtered = filterDuplicateUTXOs(sourceUtxos);\n const targets = [{ address: to, value: Number(amount) }];\n\n /**\n * Note: Each algorithm will add a change output if the input - output - fee\n * value difference is over a dust threshold. This is calculated independently\n * by utils.finalize, irrespective of the algorithm chosen, for the purposes\n * of safety.\n */\n const { inputs, outputs, fee } = coinSelect(filtered, targets, feeRate);\n\n // Should not get here but we need to check the returned value types\n if (typeof fee !== 'number') {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.UNKNOWN, { details: 'Unable to choose utxo properly' });\n }\n\n // If inputs or outputs is not defined then we can not complete this transaction\n if (!inputs || !outputs || !outputs.length) return { fee };\n const inputsWithScript = await bitcoinFunctions.getScriptsForUtxos(inputs);\n\n const validatedInput = BitcoinInputUTXOArraySchema.parse(inputsWithScript);\n\n // Change is only returned if it's above the dust threshold\n // address is missing in change. So assigning it before validation to keep force the address to be required.\n const finalOuts = [outputs[0]];\n const change = outputs[1];\n if (change) {\n finalOuts.push({\n address: changeAddress,\n value: change.value,\n });\n }\n\n const validatedOutput = BitcoinOutputUTXOArraySchema.parse(finalOuts);\n\n return {\n fee,\n inputs: validatedInput,\n outputs: validatedOutput,\n };\n}\n"],"mappings":"sMAUA,SAAS,EAEP,EAAoB,CACpB,IAAM,EAAiB,EAAE,CACzB,OAAO,EAAM,OAAQ,GAAS,CAC5B,IAAM,EAAM,EAAK,OAAS,EAAK,MAAM,UAAU,CAG/C,OAFI,EAAK,SAAS,EAAI,CAAS,IAC/B,EAAK,KAAK,EAAI,CACP,KACP,CAaJ,eAAsB,EACpB,EACA,EACA,EACA,EACA,EACA,EACsF,CAUtF,GAAM,CAAE,SAAQ,UAAS,OAAQ,EAThB,EAAqB,EAAY,CAClC,CAAC,CAAE,QAAS,EAAI,MAAO,OAAO,EAAO,CAAE,CAAC,CAQO,EAAQ,CAGvE,GAAI,OAAO,GAAQ,SACjB,MAAM,IAAI,EAAS,EAAY,QAAS,EAAU,QAAS,CAAE,QAAS,iCAAkC,CAAC,CAI3G,GAAI,CAAC,GAAU,CAAC,GAAW,CAAC,EAAQ,OAAQ,MAAO,CAAE,MAAK,CAC1D,IAAM,EAAmB,MAAM,EAAiB,mBAAmB,EAAO,CAEpE,EAAiB,EAA4B,MAAM,EAAiB,CAIpE,EAAY,CAAC,EAAQ,GAAG,CACxB,EAAS,EAAQ,GAUvB,OATI,GACF,EAAU,KAAK,CACb,QAAS,EACT,MAAO,EAAO,MACf,CAAC,CAKG,CACL,MACA,OAAQ,EACR,QALsB,EAA6B,MAAM,EAAU,CAMpE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../constants.cjs`);let t=require(`viem`);function n({config:n}){return({sourceChainId:r,targetChainId:i,sourceAsset:a,targetAsset:o})=>r===n.sourceChain&&i===n.targetChain&&a.type===e.TokenType.NATIVE&&o.type===e.TokenType.ERC20&&(0,t.isAddressEqual)(o.address,n.targetAsset.address)}exports.analyzeSupportFactory=n;
|
|
2
|
+
//# sourceMappingURL=analyze-support.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-support.cjs","names":["TokenType"],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.ts"],"sourcesContent":["import { isAddressEqual } from 'viem';\nimport type { BtcToBtcbConfig } from '../../types';\nimport { TokenType } from '../../../../constants';\nimport type { TransferService } from '../../../../types/service';\n\nexport interface AnalyzeSupportFactoryOptions {\n config: BtcToBtcbConfig;\n}\n\nexport function analyzeSupportFactory({ config }: AnalyzeSupportFactoryOptions): TransferService['analyzeSupport'] {\n return ({ sourceChainId, targetChainId, sourceAsset, targetAsset }) => {\n return (\n sourceChainId === config.sourceChain &&\n targetChainId === config.targetChain &&\n sourceAsset.type === TokenType.NATIVE &&\n targetAsset.type === TokenType.ERC20 &&\n isAddressEqual(targetAsset.address, config.targetAsset.address)\n );\n };\n}\n"],"mappings":"yHASA,SAAgB,EAAsB,CAAE,UAA2E,CACjH,OAAQ,CAAE,gBAAe,gBAAe,cAAa,iBAEjD,IAAkB,EAAO,aACzB,IAAkB,EAAO,aACzB,EAAY,OAASA,EAAAA,UAAU,QAC/B,EAAY,OAASA,EAAAA,UAAU,QAAA,EAAA,EAAA,gBAChB,EAAY,QAAS,EAAO,YAAY,QAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{TokenType as e}from"../../../../constants.js";import{isAddressEqual as t}from"viem";function n({config:n}){return({sourceChainId:r,targetChainId:i,sourceAsset:a,targetAsset:o})=>r===n.sourceChain&&i===n.targetChain&&a.type===e.NATIVE&&o.type===e.ERC20&&t(o.address,n.targetAsset.address)}export{n as analyzeSupportFactory};
|
|
2
|
+
//# sourceMappingURL=analyze-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-support.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.ts"],"sourcesContent":["import { isAddressEqual } from 'viem';\nimport type { BtcToBtcbConfig } from '../../types';\nimport { TokenType } from '../../../../constants';\nimport type { TransferService } from '../../../../types/service';\n\nexport interface AnalyzeSupportFactoryOptions {\n config: BtcToBtcbConfig;\n}\n\nexport function analyzeSupportFactory({ config }: AnalyzeSupportFactoryOptions): TransferService['analyzeSupport'] {\n return ({ sourceChainId, targetChainId, sourceAsset, targetAsset }) => {\n return (\n sourceChainId === config.sourceChain &&\n targetChainId === config.targetChain &&\n sourceAsset.type === TokenType.NATIVE &&\n targetAsset.type === TokenType.ERC20 &&\n isAddressEqual(targetAsset.address, config.targetAsset.address)\n );\n };\n}\n"],"mappings":"2FASA,SAAgB,EAAsB,CAAE,UAA2E,CACjH,OAAQ,CAAE,gBAAe,gBAAe,cAAa,iBAEjD,IAAkB,EAAO,aACzB,IAAkB,EAAO,aACzB,EAAY,OAAS,EAAU,QAC/B,EAAY,OAAS,EAAU,OAC/B,EAAe,EAAY,QAAS,EAAO,YAAY,QAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../../constants.cjs`),t=require(`../../_utils/utxo.cjs`);function n({bitcoinFunctions:n,config:r}){return async({amountIn:i,fromAddress:a,sourceChain:o},s)=>{let c=e.FEE_RATE_TIER_TO_BITCOIN[s?.overrides?.feeRateTier??`fast`],l=r.sourceChain===e.BitcoinChainIds.MAINNET?`bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq`:`tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx`,u=(await n.getFeeRates())[c],{utxos:d}=await n.getUtxoBalance(a,!1),{fee:f}=await t.selectUtxos(l,a,i,u,d,n);return{asset:o.networkToken,totalFee:BigInt(f),totalUpfrontFee:BigInt(f)}}}exports.estimateNativeFeeFactory=n;
|
|
2
|
+
//# sourceMappingURL=estimate-native-fee.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimate-native-fee.cjs","names":["FEE_RATE_TIER_TO_BITCOIN","BitcoinChainIds","selectUtxos"],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.ts"],"sourcesContent":["import type { BtcToBtcbConfig } from '../../types';\nimport { BitcoinChainIds, FEE_RATE_TIER_TO_BITCOIN } from '../../../../constants';\nimport type { BitcoinFunctions } from '../../../../types/bitcoin';\nimport type { TransferService } from '../../../../types/service';\nimport { selectUtxos } from '../../_utils/utxo';\n\n// Placeholder bech32 addresses for fee estimation (address type affects byte length, not the actual value)\nexport const PLACEHOLDER_MAINNET_ADDRESS = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq';\nexport const PLACEHOLDER_TESTNET_ADDRESS = 'tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx';\n\nexport interface EstimateNativeFeeFactoryOptions {\n bitcoinFunctions: BitcoinFunctions;\n config: BtcToBtcbConfig;\n}\n\nexport function estimateNativeFeeFactory({\n bitcoinFunctions,\n config,\n}: EstimateNativeFeeFactoryOptions): TransferService['estimateNativeFee'] {\n return async ({ amountIn, fromAddress, sourceChain }, options) => {\n const bitcoinFeeRateTier = FEE_RATE_TIER_TO_BITCOIN[options?.overrides?.feeRateTier ?? 'fast'];\n\n // Use a placeholder bech32 address for estimation since BTC fees depend on\n // transaction size (byte length), not the actual destination address.\n // The address type (bech32) affects the output script size, but all bech32\n // addresses of the same type have the same size.\n const isMainnet = config.sourceChain === BitcoinChainIds.MAINNET;\n const placeholderAddress = isMainnet ? PLACEHOLDER_MAINNET_ADDRESS : PLACEHOLDER_TESTNET_ADDRESS;\n\n const feeRates = await bitcoinFunctions.getFeeRates();\n const feeRate = feeRates[bitcoinFeeRateTier];\n\n const { utxos } = await bitcoinFunctions.getUtxoBalance(fromAddress, false);\n\n const { fee } = await selectUtxos(placeholderAddress, fromAddress, amountIn, feeRate, utxos, bitcoinFunctions);\n\n return {\n asset: sourceChain.networkToken,\n totalFee: BigInt(fee),\n totalUpfrontFee: BigInt(fee),\n };\n };\n}\n"],"mappings":"gFAeA,SAAgB,EAAyB,CACvC,mBACA,UACwE,CACxE,OAAO,MAAO,CAAE,WAAU,cAAa,eAAe,IAAY,CAChE,IAAM,EAAqBA,EAAAA,yBAAyB,GAAS,WAAW,aAAe,QAOjF,EADY,EAAO,cAAgBC,EAAAA,gBAAgB,QAClB,6CAA8B,6CAG/D,GADW,MAAM,EAAiB,aAAa,EAC5B,GAEnB,CAAE,SAAU,MAAM,EAAiB,eAAe,EAAa,GAAM,CAErE,CAAE,OAAQ,MAAMC,EAAAA,YAAY,EAAoB,EAAa,EAAU,EAAS,EAAO,EAAiB,CAE9G,MAAO,CACL,MAAO,EAAY,aACnB,SAAU,OAAO,EAAI,CACrB,gBAAiB,OAAO,EAAI,CAC7B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{BitcoinChainIds as e,FEE_RATE_TIER_TO_BITCOIN as t}from"../../../../constants.js";import{selectUtxos as n}from"../../_utils/utxo.js";function r({bitcoinFunctions:r,config:i}){return async({amountIn:a,fromAddress:o,sourceChain:s},c)=>{let l=t[c?.overrides?.feeRateTier??`fast`],u=i.sourceChain===e.MAINNET?`bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq`:`tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx`,d=(await r.getFeeRates())[l],{utxos:f}=await r.getUtxoBalance(o,!1),{fee:p}=await n(u,o,a,d,f,r);return{asset:s.networkToken,totalFee:BigInt(p),totalUpfrontFee:BigInt(p)}}}export{r as estimateNativeFeeFactory};
|
|
2
|
+
//# sourceMappingURL=estimate-native-fee.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimate-native-fee.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.ts"],"sourcesContent":["import type { BtcToBtcbConfig } from '../../types';\nimport { BitcoinChainIds, FEE_RATE_TIER_TO_BITCOIN } from '../../../../constants';\nimport type { BitcoinFunctions } from '../../../../types/bitcoin';\nimport type { TransferService } from '../../../../types/service';\nimport { selectUtxos } from '../../_utils/utxo';\n\n// Placeholder bech32 addresses for fee estimation (address type affects byte length, not the actual value)\nexport const PLACEHOLDER_MAINNET_ADDRESS = 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq';\nexport const PLACEHOLDER_TESTNET_ADDRESS = 'tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx';\n\nexport interface EstimateNativeFeeFactoryOptions {\n bitcoinFunctions: BitcoinFunctions;\n config: BtcToBtcbConfig;\n}\n\nexport function estimateNativeFeeFactory({\n bitcoinFunctions,\n config,\n}: EstimateNativeFeeFactoryOptions): TransferService['estimateNativeFee'] {\n return async ({ amountIn, fromAddress, sourceChain }, options) => {\n const bitcoinFeeRateTier = FEE_RATE_TIER_TO_BITCOIN[options?.overrides?.feeRateTier ?? 'fast'];\n\n // Use a placeholder bech32 address for estimation since BTC fees depend on\n // transaction size (byte length), not the actual destination address.\n // The address type (bech32) affects the output script size, but all bech32\n // addresses of the same type have the same size.\n const isMainnet = config.sourceChain === BitcoinChainIds.MAINNET;\n const placeholderAddress = isMainnet ? PLACEHOLDER_MAINNET_ADDRESS : PLACEHOLDER_TESTNET_ADDRESS;\n\n const feeRates = await bitcoinFunctions.getFeeRates();\n const feeRate = feeRates[bitcoinFeeRateTier];\n\n const { utxos } = await bitcoinFunctions.getUtxoBalance(fromAddress, false);\n\n const { fee } = await selectUtxos(placeholderAddress, fromAddress, amountIn, feeRate, utxos, bitcoinFunctions);\n\n return {\n asset: sourceChain.networkToken,\n totalFee: BigInt(fee),\n totalUpfrontFee: BigInt(fee),\n };\n };\n}\n"],"mappings":"4IAeA,SAAgB,EAAyB,CACvC,mBACA,UACwE,CACxE,OAAO,MAAO,CAAE,WAAU,cAAa,eAAe,IAAY,CAChE,IAAM,EAAqB,EAAyB,GAAS,WAAW,aAAe,QAOjF,EADY,EAAO,cAAgB,EAAgB,QAClB,6CAA8B,6CAG/D,GADW,MAAM,EAAiB,aAAa,EAC5B,GAEnB,CAAE,SAAU,MAAM,EAAiB,eAAe,EAAa,GAAM,CAErE,CAAE,OAAQ,MAAM,EAAY,EAAoB,EAAa,EAAU,EAAS,EAAO,EAAiB,CAE9G,MAAO,CACL,MAAO,EAAY,aACnB,SAAU,OAAO,EAAI,CACrB,gBAAiB,OAAO,EAAI,CAC7B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../../constants.cjs`),t=require(`../../constants.cjs`);function n({config:{sourceChain:n,targetAsset:r,targetChain:i}}){return async()=>({[n]:[{...t.BTC_NATIVE_ASSET,destinations:{[i]:{address:r.address,bridgeProviders:[e.ServiceType.LOMBARD_BTC_TO_BTCB]}},swapProviders:[]}]})}exports.getAssetsFactory=n;
|
|
2
|
+
//# sourceMappingURL=get-assets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-assets.cjs","names":["BTC_NATIVE_ASSET","ServiceType"],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.ts"],"sourcesContent":["import type { BtcToBtcbConfig } from '../../types';\nimport { ServiceType } from '../../../../constants';\nimport type { TransferService } from '../../../../types/service';\nimport { BTC_NATIVE_ASSET } from '../../constants';\n\nexport interface GetAssetsFactoryOptions {\n config: BtcToBtcbConfig;\n}\n\nexport function getAssetsFactory({\n config: { sourceChain, targetAsset, targetChain },\n}: GetAssetsFactoryOptions): TransferService['getAssets'] {\n return async () => {\n return {\n [sourceChain]: [\n {\n ...BTC_NATIVE_ASSET,\n destinations: {\n [targetChain]: {\n address: targetAsset.address,\n bridgeProviders: [ServiceType.LOMBARD_BTC_TO_BTCB],\n },\n },\n swapProviders: [],\n },\n ],\n };\n };\n}\n"],"mappings":"8EASA,SAAgB,EAAiB,CAC/B,OAAQ,CAAE,cAAa,cAAa,gBACoB,CACxD,OAAO,UACE,EACJ,GAAc,CACb,CACE,GAAGA,EAAAA,iBACH,aAAc,EACX,GAAc,CACb,QAAS,EAAY,QACrB,gBAAiB,CAACC,EAAAA,YAAY,oBAAoB,CACnD,CACF,CACD,cAAe,EAAE,CAClB,CACF,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ServiceType as e}from"../../../../constants.js";import{BTC_NATIVE_ASSET as t}from"../../constants.js";function n({config:{sourceChain:n,targetAsset:r,targetChain:i}}){return async()=>({[n]:[{...t,destinations:{[i]:{address:r.address,bridgeProviders:[e.LOMBARD_BTC_TO_BTCB]}},swapProviders:[]}]})}export{n as getAssetsFactory};
|
|
2
|
+
//# sourceMappingURL=get-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-assets.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.ts"],"sourcesContent":["import type { BtcToBtcbConfig } from '../../types';\nimport { ServiceType } from '../../../../constants';\nimport type { TransferService } from '../../../../types/service';\nimport { BTC_NATIVE_ASSET } from '../../constants';\n\nexport interface GetAssetsFactoryOptions {\n config: BtcToBtcbConfig;\n}\n\nexport function getAssetsFactory({\n config: { sourceChain, targetAsset, targetChain },\n}: GetAssetsFactoryOptions): TransferService['getAssets'] {\n return async () => {\n return {\n [sourceChain]: [\n {\n ...BTC_NATIVE_ASSET,\n destinations: {\n [targetChain]: {\n address: targetAsset.address,\n bridgeProviders: [ServiceType.LOMBARD_BTC_TO_BTCB],\n },\n },\n swapProviders: [],\n },\n ],\n };\n };\n}\n"],"mappings":"6GASA,SAAgB,EAAiB,CAC/B,OAAQ,CAAE,cAAa,cAAa,gBACoB,CACxD,OAAO,UACE,EACJ,GAAc,CACb,CACE,GAAG,EACH,aAAc,EACX,GAAc,CACb,QAAS,EAAY,QACrB,gBAAiB,CAAC,EAAY,oBAAoB,CACnD,CACF,CACD,cAAe,EAAE,CAClB,CACF,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../../constants.cjs`);function t({config:t}){return async({sourceAsset:n,sourceChainId:r,targetChainId:i})=>r!==t.sourceChain||i!==t.targetChain||n.type!==e.TokenType.NATIVE?[]:[{...t.targetAsset,bridgeProviders:[e.ServiceType.LOMBARD_BTC_TO_BTCB]}]}exports.getBridgeableAssetsFactory=t;
|
|
2
|
+
//# sourceMappingURL=get-bridgeable-assets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-bridgeable-assets.cjs","names":["TokenType","ServiceType"],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../../types/service';\nimport type { BridgeableUiAsset } from '../../../../types/asset';\nimport type { BtcToBtcbConfig } from '../../types';\n\nexport function getBridgeableAssetsFactory({\n config,\n}: {\n config: BtcToBtcbConfig;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (\n sourceChainId !== config.sourceChain ||\n targetChainId !== config.targetChain ||\n sourceAsset.type !== TokenType.NATIVE\n ) {\n return [];\n }\n return [{ ...config.targetAsset, bridgeProviders: [ServiceType.LOMBARD_BTC_TO_BTCB] }];\n };\n}\n"],"mappings":"6CAKA,SAAgB,EAA2B,CACzC,UAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBAGE,IAAkB,EAAO,aACzB,IAAkB,EAAO,aACzB,EAAY,OAASA,EAAAA,UAAU,OAExB,EAAE,CAEJ,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAACC,EAAAA,YAAY,oBAAoB,CAAE,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ServiceType as e,TokenType as t}from"../../../../constants.js";function n({config:n}){return async({sourceAsset:r,sourceChainId:i,targetChainId:a})=>i!==n.sourceChain||a!==n.targetChain||r.type!==t.NATIVE?[]:[{...n.targetAsset,bridgeProviders:[e.LOMBARD_BTC_TO_BTCB]}]}export{n as getBridgeableAssetsFactory};
|
|
2
|
+
//# sourceMappingURL=get-bridgeable-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-bridgeable-assets.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../../types/service';\nimport type { BridgeableUiAsset } from '../../../../types/asset';\nimport type { BtcToBtcbConfig } from '../../types';\n\nexport function getBridgeableAssetsFactory({\n config,\n}: {\n config: BtcToBtcbConfig;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (\n sourceChainId !== config.sourceChain ||\n targetChainId !== config.targetChain ||\n sourceAsset.type !== TokenType.NATIVE\n ) {\n return [];\n }\n return [{ ...config.targetAsset, bridgeProviders: [ServiceType.LOMBARD_BTC_TO_BTCB] }];\n };\n}\n"],"mappings":"sEAKA,SAAgB,EAA2B,CACzC,UAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBAGE,IAAkB,EAAO,aACzB,IAAkB,EAAO,aACzB,EAAY,OAAS,EAAU,OAExB,EAAE,CAEJ,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAAC,EAAY,oBAAoB,CAAE,CAAC"}
|
package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-minimum-transfer-amount.cjs","names":["MIN_DEPOSIT_BTC_AMOUNT_SATOSHI"],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.ts"],"sourcesContent":["import { MIN_DEPOSIT_BTC_AMOUNT_SATOSHI } from '../../constants';\n\nexport function getMinimumTransferAmount(): bigint {\n return MIN_DEPOSIT_BTC_AMOUNT_SATOSHI;\n}\n"],"mappings":"uCAEA,SAAgB,GAAmC,CACjD,OAAOA,EAAAA"}
|
package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-minimum-transfer-amount.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.ts"],"sourcesContent":["import { MIN_DEPOSIT_BTC_AMOUNT_SATOSHI } from '../../constants';\n\nexport function getMinimumTransferAmount(): bigint {\n return MIN_DEPOSIT_BTC_AMOUNT_SATOSHI;\n}\n"],"mappings":"oEAEA,SAAgB,GAAmC,CACjD,OAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../../constants.cjs`),t=require(`../../../../errors.cjs`),n=require(`../../../../utils/bitcoin-address.cjs`),r=require(`../../../../utils/quote-fees.cjs`),i=require(`../../../../utils/evm-address.cjs`),a=require(`./analyze-support.cjs`),o=require(`./get-minimum-transfer-amount.cjs`);function s({config:s}){let c=a.analyzeSupportFactory({config:s});return(a,l)=>{let u=new AbortController,d=()=>{u.abort()};return!c({sourceAsset:a.sourceAsset,sourceChainId:a.sourceChain.chainId,targetAsset:a.targetAsset,targetChainId:a.targetChain.chainId})||!n.isBech32AddressInNetwork(a.fromAddress,s.sourceChain===e.BitcoinChainIds.MAINNET)||!i.isEvmAddress(a.toAddress)?(u.signal.aborted||(l(`error`,new t.InvalidParamsError(t.ErrorReason.INVALID_PARAMS,`Invalid addresses, assets, or chains provided.`)),l(`done`)),{cancel:d}):((async()=>{let n=o.getMinimumTransferAmount();if(a.amount<n){u.signal.aborted||(l(`error`,new t.InvalidParamsError(t.ErrorReason.INVALID_PARAMS,`Transfer amount is below the minimum transfer amount of ${n.toString()}.`)),l(`done`));return}let i={aggregator:{name:`Lombard`,id:`lombard-btc-to-btcb`},amountIn:a.amount,amountOut:a.amount-s.mintingFee,assetIn:a.sourceAsset,assetOut:a.targetAsset,expiresAt:Math.floor(Date.now()/1e3)+60,fees:[{type:`bridge`,fundingModel:`included`,name:`Bridge Fee`,amount:s.mintingFee,chainId:a.sourceChain.chainId,token:r.assetToQuoteFeeToken(a.sourceAsset)}],fromAddress:a.fromAddress,id:crypto.randomUUID(),partnerFeeBps:null,serviceType:e.ServiceType.LOMBARD_BTC_TO_BTCB,slippageBps:a.slippageBps??0,sourceChain:a.sourceChain,targetChain:a.targetChain,toAddress:a.toAddress};u.signal.aborted||(l(`quote`,i),l(`done`))})().catch(e=>{u.signal.aborted||(l(`error`,new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.UNKNOWN,{cause:e,details:`Failed to stream quotes`})),l(`done`))}),{cancel:d})}}exports.streamQuotesFactory=s;
|
|
2
|
+
//# sourceMappingURL=stream-quotes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-quotes.cjs","names":["analyzeSupportFactory","isBech32AddressInNetwork","BitcoinChainIds","isEvmAddress","InvalidParamsError","ErrorReason","getMinimumTransferAmount","assetToQuoteFeeToken","ServiceType","SdkError","ErrorCode"],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.ts"],"sourcesContent":["import { BitcoinChainIds, ServiceType } from '../../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../../errors';\nimport type { Quote } from '../../../../types/quote';\nimport type { TransferService } from '../../../../types/service';\nimport type { Mutable } from '../../../../types/utility-types';\nimport { isBech32AddressInNetwork } from '../../../../utils/bitcoin-address';\nimport { isEvmAddress } from '../../../../utils/evm-address';\nimport { assetToQuoteFeeToken } from '../../../../utils/quote-fees';\nimport type { BtcToBtcbConfig } from '../../types';\nimport { analyzeSupportFactory } from './analyze-support';\nimport { getMinimumTransferAmount } from './get-minimum-transfer-amount';\n\nexport interface StreamQuotesFactoryOptions {\n config: BtcToBtcbConfig;\n}\n\nexport function streamQuotesFactory({ config }: StreamQuotesFactoryOptions): TransferService['streamQuotes'] {\n const analyzeSupport = analyzeSupportFactory({ config });\n\n return (props, handler) => {\n const ac = new AbortController();\n const cancel = () => {\n ac.abort();\n };\n\n const hasValidAssetsAndChains = analyzeSupport({\n sourceAsset: props.sourceAsset,\n sourceChainId: props.sourceChain.chainId,\n targetAsset: props.targetAsset,\n targetChainId: props.targetChain.chainId,\n });\n\n if (\n !hasValidAssetsAndChains ||\n !isBech32AddressInNetwork(props.fromAddress, config.sourceChain === BitcoinChainIds.MAINNET) ||\n !isEvmAddress(props.toAddress)\n ) {\n if (!ac.signal.aborted) {\n handler(\n 'error',\n new InvalidParamsError(ErrorReason.INVALID_PARAMS, 'Invalid addresses, assets, or chains provided.'),\n );\n handler('done');\n }\n\n return { cancel };\n }\n\n (async () => {\n const minimumAmount = getMinimumTransferAmount();\n\n if (props.amount < minimumAmount) {\n if (!ac.signal.aborted) {\n handler(\n 'error',\n new InvalidParamsError(\n ErrorReason.INVALID_PARAMS,\n `Transfer amount is below the minimum transfer amount of ${minimumAmount.toString()}.`,\n ),\n );\n handler('done');\n }\n\n return;\n }\n\n const quote: Mutable<Quote> = {\n aggregator: {\n name: 'Lombard',\n id: 'lombard-btc-to-btcb',\n },\n amountIn: props.amount,\n amountOut: props.amount - config.mintingFee,\n assetIn: props.sourceAsset,\n assetOut: props.targetAsset,\n // Set the expiration time further out since the amountOut isn't expected to change,\n // since the fee is fixed in the config at service initialization.\n expiresAt: Math.floor(Date.now() / 1_000) + 60,\n fees: [\n {\n type: 'bridge',\n fundingModel: 'included',\n name: 'Bridge Fee',\n amount: config.mintingFee,\n chainId: props.sourceChain.chainId,\n token: assetToQuoteFeeToken(props.sourceAsset),\n },\n ],\n fromAddress: props.fromAddress,\n id: crypto.randomUUID(),\n partnerFeeBps: null,\n serviceType: ServiceType.LOMBARD_BTC_TO_BTCB,\n slippageBps: props.slippageBps ?? 0,\n sourceChain: props.sourceChain,\n targetChain: props.targetChain,\n toAddress: props.toAddress,\n };\n\n if (!ac.signal.aborted) {\n handler('quote', quote);\n handler('done');\n }\n })().catch((error) => {\n if (!ac.signal.aborted) {\n handler(\n 'error',\n new SdkError(ErrorReason.UNKNOWN, ErrorCode.UNKNOWN, { cause: error, details: 'Failed to stream quotes' }),\n );\n handler('done');\n }\n });\n\n return {\n cancel,\n };\n };\n}\n"],"mappings":"mTAgBA,SAAgB,EAAoB,CAAE,UAAuE,CAC3G,IAAM,EAAiBA,EAAAA,sBAAsB,CAAE,SAAQ,CAAC,CAExD,OAAQ,EAAO,IAAY,CACzB,IAAM,EAAK,IAAI,gBACT,MAAe,CACnB,EAAG,OAAO,EA0FZ,MA/EE,CAR8B,EAAe,CAC7C,YAAa,EAAM,YACnB,cAAe,EAAM,YAAY,QACjC,YAAa,EAAM,YACnB,cAAe,EAAM,YAAY,QAClC,CAAC,EAIA,CAACC,EAAAA,yBAAyB,EAAM,YAAa,EAAO,cAAgBC,EAAAA,gBAAgB,QAAQ,EAC5F,CAACC,EAAAA,aAAa,EAAM,UAAU,EAEzB,EAAG,OAAO,UACb,EACE,QACA,IAAIC,EAAAA,mBAAmBC,EAAAA,YAAY,eAAgB,iDAAiD,CACrG,CACD,EAAQ,OAAO,EAGV,CAAE,SAAQ,IAGlB,SAAY,CACX,IAAM,EAAgBC,EAAAA,0BAA0B,CAEhD,GAAI,EAAM,OAAS,EAAe,CAC3B,EAAG,OAAO,UACb,EACE,QACA,IAAIF,EAAAA,mBACFC,EAAAA,YAAY,eACZ,2DAA2D,EAAc,UAAU,CAAC,GACrF,CACF,CACD,EAAQ,OAAO,EAGjB,OAGF,IAAM,EAAwB,CAC5B,WAAY,CACV,KAAM,UACN,GAAI,sBACL,CACD,SAAU,EAAM,OAChB,UAAW,EAAM,OAAS,EAAO,WACjC,QAAS,EAAM,YACf,SAAU,EAAM,YAGhB,UAAW,KAAK,MAAM,KAAK,KAAK,CAAG,IAAM,CAAG,GAC5C,KAAM,CACJ,CACE,KAAM,SACN,aAAc,WACd,KAAM,aACN,OAAQ,EAAO,WACf,QAAS,EAAM,YAAY,QAC3B,MAAOE,EAAAA,qBAAqB,EAAM,YAAY,CAC/C,CACF,CACD,YAAa,EAAM,YACnB,GAAI,OAAO,YAAY,CACvB,cAAe,KACf,YAAaC,EAAAA,YAAY,oBACzB,YAAa,EAAM,aAAe,EAClC,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UAClB,CAEI,EAAG,OAAO,UACb,EAAQ,QAAS,EAAM,CACvB,EAAQ,OAAO,KAEf,CAAC,MAAO,GAAU,CACf,EAAG,OAAO,UACb,EACE,QACA,IAAIC,EAAAA,SAASJ,EAAAA,YAAY,QAASK,EAAAA,UAAU,QAAS,CAAE,MAAO,EAAO,QAAS,0BAA2B,CAAC,CAC3G,CACD,EAAQ,OAAO,GAEjB,CAEK,CACL,SACD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{BitcoinChainIds as e,ServiceType as t}from"../../../../constants.js";import{ErrorCode as n,ErrorReason as r,InvalidParamsError as i,SdkError as a}from"../../../../errors.js";import{isBech32AddressInNetwork as o}from"../../../../utils/bitcoin-address.js";import{assetToQuoteFeeToken as s}from"../../../../utils/quote-fees.js";import{isEvmAddress as c}from"../../../../utils/evm-address.js";import{analyzeSupportFactory as l}from"./analyze-support.js";import{getMinimumTransferAmount as u}from"./get-minimum-transfer-amount.js";function d({config:d}){let f=l({config:d});return(l,p)=>{let m=new AbortController,h=()=>{m.abort()};return!f({sourceAsset:l.sourceAsset,sourceChainId:l.sourceChain.chainId,targetAsset:l.targetAsset,targetChainId:l.targetChain.chainId})||!o(l.fromAddress,d.sourceChain===e.MAINNET)||!c(l.toAddress)?(m.signal.aborted||(p(`error`,new i(r.INVALID_PARAMS,`Invalid addresses, assets, or chains provided.`)),p(`done`)),{cancel:h}):((async()=>{let e=u();if(l.amount<e){m.signal.aborted||(p(`error`,new i(r.INVALID_PARAMS,`Transfer amount is below the minimum transfer amount of ${e.toString()}.`)),p(`done`));return}let n={aggregator:{name:`Lombard`,id:`lombard-btc-to-btcb`},amountIn:l.amount,amountOut:l.amount-d.mintingFee,assetIn:l.sourceAsset,assetOut:l.targetAsset,expiresAt:Math.floor(Date.now()/1e3)+60,fees:[{type:`bridge`,fundingModel:`included`,name:`Bridge Fee`,amount:d.mintingFee,chainId:l.sourceChain.chainId,token:s(l.sourceAsset)}],fromAddress:l.fromAddress,id:crypto.randomUUID(),partnerFeeBps:null,serviceType:t.LOMBARD_BTC_TO_BTCB,slippageBps:l.slippageBps??0,sourceChain:l.sourceChain,targetChain:l.targetChain,toAddress:l.toAddress};m.signal.aborted||(p(`quote`,n),p(`done`))})().catch(e=>{m.signal.aborted||(p(`error`,new a(r.UNKNOWN,n.UNKNOWN,{cause:e,details:`Failed to stream quotes`})),p(`done`))}),{cancel:h})}}export{d as streamQuotesFactory};
|
|
2
|
+
//# sourceMappingURL=stream-quotes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-quotes.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.ts"],"sourcesContent":["import { BitcoinChainIds, ServiceType } from '../../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../../errors';\nimport type { Quote } from '../../../../types/quote';\nimport type { TransferService } from '../../../../types/service';\nimport type { Mutable } from '../../../../types/utility-types';\nimport { isBech32AddressInNetwork } from '../../../../utils/bitcoin-address';\nimport { isEvmAddress } from '../../../../utils/evm-address';\nimport { assetToQuoteFeeToken } from '../../../../utils/quote-fees';\nimport type { BtcToBtcbConfig } from '../../types';\nimport { analyzeSupportFactory } from './analyze-support';\nimport { getMinimumTransferAmount } from './get-minimum-transfer-amount';\n\nexport interface StreamQuotesFactoryOptions {\n config: BtcToBtcbConfig;\n}\n\nexport function streamQuotesFactory({ config }: StreamQuotesFactoryOptions): TransferService['streamQuotes'] {\n const analyzeSupport = analyzeSupportFactory({ config });\n\n return (props, handler) => {\n const ac = new AbortController();\n const cancel = () => {\n ac.abort();\n };\n\n const hasValidAssetsAndChains = analyzeSupport({\n sourceAsset: props.sourceAsset,\n sourceChainId: props.sourceChain.chainId,\n targetAsset: props.targetAsset,\n targetChainId: props.targetChain.chainId,\n });\n\n if (\n !hasValidAssetsAndChains ||\n !isBech32AddressInNetwork(props.fromAddress, config.sourceChain === BitcoinChainIds.MAINNET) ||\n !isEvmAddress(props.toAddress)\n ) {\n if (!ac.signal.aborted) {\n handler(\n 'error',\n new InvalidParamsError(ErrorReason.INVALID_PARAMS, 'Invalid addresses, assets, or chains provided.'),\n );\n handler('done');\n }\n\n return { cancel };\n }\n\n (async () => {\n const minimumAmount = getMinimumTransferAmount();\n\n if (props.amount < minimumAmount) {\n if (!ac.signal.aborted) {\n handler(\n 'error',\n new InvalidParamsError(\n ErrorReason.INVALID_PARAMS,\n `Transfer amount is below the minimum transfer amount of ${minimumAmount.toString()}.`,\n ),\n );\n handler('done');\n }\n\n return;\n }\n\n const quote: Mutable<Quote> = {\n aggregator: {\n name: 'Lombard',\n id: 'lombard-btc-to-btcb',\n },\n amountIn: props.amount,\n amountOut: props.amount - config.mintingFee,\n assetIn: props.sourceAsset,\n assetOut: props.targetAsset,\n // Set the expiration time further out since the amountOut isn't expected to change,\n // since the fee is fixed in the config at service initialization.\n expiresAt: Math.floor(Date.now() / 1_000) + 60,\n fees: [\n {\n type: 'bridge',\n fundingModel: 'included',\n name: 'Bridge Fee',\n amount: config.mintingFee,\n chainId: props.sourceChain.chainId,\n token: assetToQuoteFeeToken(props.sourceAsset),\n },\n ],\n fromAddress: props.fromAddress,\n id: crypto.randomUUID(),\n partnerFeeBps: null,\n serviceType: ServiceType.LOMBARD_BTC_TO_BTCB,\n slippageBps: props.slippageBps ?? 0,\n sourceChain: props.sourceChain,\n targetChain: props.targetChain,\n toAddress: props.toAddress,\n };\n\n if (!ac.signal.aborted) {\n handler('quote', quote);\n handler('done');\n }\n })().catch((error) => {\n if (!ac.signal.aborted) {\n handler(\n 'error',\n new SdkError(ErrorReason.UNKNOWN, ErrorCode.UNKNOWN, { cause: error, details: 'Failed to stream quotes' }),\n );\n handler('done');\n }\n });\n\n return {\n cancel,\n };\n };\n}\n"],"mappings":"qhBAgBA,SAAgB,EAAoB,CAAE,UAAuE,CAC3G,IAAM,EAAiB,EAAsB,CAAE,SAAQ,CAAC,CAExD,OAAQ,EAAO,IAAY,CACzB,IAAM,EAAK,IAAI,gBACT,MAAe,CACnB,EAAG,OAAO,EA0FZ,MA/EE,CAR8B,EAAe,CAC7C,YAAa,EAAM,YACnB,cAAe,EAAM,YAAY,QACjC,YAAa,EAAM,YACnB,cAAe,EAAM,YAAY,QAClC,CAAC,EAIA,CAAC,EAAyB,EAAM,YAAa,EAAO,cAAgB,EAAgB,QAAQ,EAC5F,CAAC,EAAa,EAAM,UAAU,EAEzB,EAAG,OAAO,UACb,EACE,QACA,IAAI,EAAmB,EAAY,eAAgB,iDAAiD,CACrG,CACD,EAAQ,OAAO,EAGV,CAAE,SAAQ,IAGlB,SAAY,CACX,IAAM,EAAgB,GAA0B,CAEhD,GAAI,EAAM,OAAS,EAAe,CAC3B,EAAG,OAAO,UACb,EACE,QACA,IAAI,EACF,EAAY,eACZ,2DAA2D,EAAc,UAAU,CAAC,GACrF,CACF,CACD,EAAQ,OAAO,EAGjB,OAGF,IAAM,EAAwB,CAC5B,WAAY,CACV,KAAM,UACN,GAAI,sBACL,CACD,SAAU,EAAM,OAChB,UAAW,EAAM,OAAS,EAAO,WACjC,QAAS,EAAM,YACf,SAAU,EAAM,YAGhB,UAAW,KAAK,MAAM,KAAK,KAAK,CAAG,IAAM,CAAG,GAC5C,KAAM,CACJ,CACE,KAAM,SACN,aAAc,WACd,KAAM,aACN,OAAQ,EAAO,WACf,QAAS,EAAM,YAAY,QAC3B,MAAO,EAAqB,EAAM,YAAY,CAC/C,CACF,CACD,YAAa,EAAM,YACnB,GAAI,OAAO,YAAY,CACvB,cAAe,KACf,YAAa,EAAY,oBACzB,YAAa,EAAM,aAAe,EAClC,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UAClB,CAEI,EAAG,OAAO,UACb,EAAQ,QAAS,EAAM,CACvB,EAAQ,OAAO,KAEf,CAAC,MAAO,GAAU,CACf,EAAG,OAAO,UACb,EACE,QACA,IAAI,EAAS,EAAY,QAAS,EAAU,QAAS,CAAE,MAAO,EAAO,QAAS,0BAA2B,CAAC,CAC3G,CACD,EAAQ,OAAO,GAEjB,CAEK,CACL,SACD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../errors.cjs`),t=require(`../../../_utils.cjs`),n=require(`../../constants.cjs`),r=require(`../../_utils/metadata.cjs`);let i=require(`viem`),a=require(`@lombard.finance/sdk`);function o({bitcoinFunctions:e,config:n}){return({transfer:r,updateListener:i})=>{let a=new AbortController,o=()=>{a.abort()};return r.status===`completed`||r.status===`failed`?{cancel:o,result:Promise.resolve(r)}:{cancel:o,result:(async()=>{let o=structuredClone(r),l=t.getEvmClientForChain({chain:r.targetChain});for(;!a.signal.aborted;){let r=o.status;switch(o.status){case`source-pending`:o=await s({bitcoinFunctions:e,currentTransfer:o,signal:a.signal}),a.signal.aborted||i(o);break;case`source-completed`:case`target-pending`:o=await c({config:n,currentTransfer:o,signal:a.signal,targetClient:l}),a.signal.aborted||i(o);break;default:return o}o.status===r&&await t.waitForTimeoutOrAbort({timeoutMs:3e4,signal:a.signal})}return o})()}}}async function s({bitcoinFunctions:e,currentTransfer:n,signal:r}){try{let i=await t.awaitOrAbort(e.getTransaction(n.source.txHash),r);if(i.status===`aborted`)return n;let{confirmations:a}=i.value;return a<n.source.requiredConfirmationCount?{...n,source:{...n.source,confirmationCount:a}}:{...n,source:{...n.source,confirmationCount:a},status:`source-completed`}}catch{return n}}async function c({config:o,currentTransfer:s,signal:c,targetClient:l}){switch(s.status){case`source-completed`:try{let i=await t.awaitOrAbort((0,a.getDepositsByAddress)({address:s.toAddress,env:o.env}),c);if(i.status===`aborted`)return s;let l=i.value.find(e=>e.txHash.toLowerCase()===s.source.txHash.toLowerCase());if(!l)return s;let{needsNotarizationUpdate:u,needsSessionStateUpdate:d}=r.getMetadataUpdates(s.metadata,l.notarizationStatus,l.sessionState);return u||d?{...s,metadata:{...s.metadata,...u&&{notarizationStatus:l.notarizationStatus},...d&&{sessionState:l.sessionState}}}:r.isDepositFailed(l)?{...s,errorCode:e.ErrorCode.NOTARIZATION_FAILED,errorReason:`Deposit notarization failed`,failedAtMs:Date.now(),status:`failed`}:l.claimTxHash?{...s,status:`target-pending`,target:{confirmationCount:0,requiredConfirmationCount:n.EVM_CONFIRMATION_COUNT,startedAtMs:Date.now(),txHash:l.claimTxHash}}:s}catch{return s}default:{if(!s.target?.txHash)return{...s,errorCode:e.ErrorCode.UNKNOWN,errorReason:`Missing target transaction hash`,failedAtMs:Date.now(),status:`failed`};let{confirmationCount:n,requiredConfirmationCount:r,txHash:a}=s.target;if(!(0,i.isHash)(a))return{...s,errorCode:e.ErrorCode.UNKNOWN,errorReason:`Invalid target transaction hash`,failedAtMs:Date.now(),status:`failed`};try{let i=await t.awaitOrAbort(l.waitForTransactionReceipt({confirmations:Math.min(n+1,r),hash:a}),c);if(i.status===`aborted`)return s;let o=i.value;if(o.status===`reverted`)return{...s,errorCode:e.ErrorCode.TRANSACTION_REVERTED,errorReason:`Target transaction was reverted`,failedAtMs:Date.now(),status:`failed`};let u=await l.getTransactionConfirmations({transactionReceipt:o}).then(e=>Number(e)).catch(()=>n+1);return u<r?{...s,target:{...s.target,confirmationCount:u}}:{...s,completedAtMs:Date.now(),status:`completed`,target:{...s.target,confirmationCount:u}}}catch{return s}}}}exports.trackTransferFactory=o;
|
|
2
|
+
//# sourceMappingURL=track-transfer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-transfer.cjs","names":["getEvmClientForChain","waitForTimeoutOrAbort","awaitOrAbort","getMetadataUpdates","isDepositFailed","ErrorCode","EVM_CONFIRMATION_COUNT"],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.ts"],"sourcesContent":["import { getDepositsByAddress } from '@lombard.finance/sdk';\nimport { ErrorCode } from '../../../../errors';\nimport type { BitcoinFunctions } from '../../../../types/bitcoin';\nimport type { TransferService } from '../../../../types/service';\nimport type {\n CompletedTransfer,\n FailedTransfer,\n SourceCompletedTransfer,\n SourcePendingTransfer,\n TargetPendingTransfer,\n Transfer,\n} from '../../../../types/transfer';\nimport { awaitOrAbort, getEvmClientForChain, waitForTimeoutOrAbort } from '../../../_utils';\nimport type { BtcToBtcbConfig } from '../../types';\nimport { isHash } from 'viem';\nimport { getMetadataUpdates, isDepositFailed } from '../../_utils/metadata';\nimport { EVM_CONFIRMATION_COUNT } from '../../constants';\n\n// Polling interval for BTC deposits (30 seconds - faster than BTC block time since we also poll Lombard API)\nconst DEPOSIT_POLLING_INTERVAL_MS = 1000 * 30;\n\nexport interface TrackTransferFactoryOptions {\n bitcoinFunctions: BitcoinFunctions;\n config: BtcToBtcbConfig;\n}\n\nexport function trackTransferFactory({\n bitcoinFunctions,\n config,\n}: TrackTransferFactoryOptions): TransferService['trackTransfer'] {\n return ({ transfer, updateListener }) => {\n const ac = new AbortController();\n const cancel = () => {\n ac.abort();\n };\n\n if (transfer.status === 'completed' || transfer.status === 'failed') {\n return {\n cancel,\n result: Promise.resolve(transfer),\n };\n }\n\n const executeTracking = async (): Promise<Transfer> => {\n let currentTransfer: Transfer = structuredClone(transfer);\n\n const targetClient = getEvmClientForChain({ chain: transfer.targetChain });\n\n while (!ac.signal.aborted) {\n const statusBeforeTracking = currentTransfer.status;\n\n switch (currentTransfer.status) {\n case 'source-pending': {\n currentTransfer = await _trackSourceTx({\n bitcoinFunctions,\n currentTransfer,\n signal: ac.signal,\n });\n\n if (!ac.signal.aborted) {\n updateListener(currentTransfer);\n }\n\n break;\n }\n case 'source-completed':\n case 'target-pending': {\n currentTransfer = await _trackTargetTx({\n config,\n currentTransfer,\n signal: ac.signal,\n targetClient,\n });\n\n if (!ac.signal.aborted) {\n updateListener(currentTransfer);\n }\n\n break;\n }\n default: {\n return currentTransfer;\n }\n }\n\n const hasStatusChanged = currentTransfer.status !== statusBeforeTracking;\n\n if (!hasStatusChanged) {\n await waitForTimeoutOrAbort({ timeoutMs: DEPOSIT_POLLING_INTERVAL_MS, signal: ac.signal });\n }\n }\n\n return currentTransfer;\n };\n\n return {\n cancel,\n result: executeTracking(),\n };\n };\n}\n\nexport interface TrackBaseParams {\n currentTransfer: Transfer;\n signal: AbortSignal;\n}\n\nexport interface TrackSourceTxParams extends TrackBaseParams {\n bitcoinFunctions: BitcoinFunctions;\n currentTransfer: SourcePendingTransfer;\n}\n\nexport interface TrackTargetTxParams extends TrackBaseParams {\n config: BtcToBtcbConfig;\n currentTransfer: SourceCompletedTransfer | TargetPendingTransfer;\n targetClient: ReturnType<typeof getEvmClientForChain>;\n}\n\nexport async function _trackSourceTx({\n bitcoinFunctions,\n currentTransfer,\n signal,\n}: TrackSourceTxParams): Promise<SourcePendingTransfer | SourceCompletedTransfer | FailedTransfer> {\n try {\n const transactionResult = await awaitOrAbort(\n bitcoinFunctions.getTransaction(currentTransfer.source.txHash),\n signal,\n );\n\n if (transactionResult.status === 'aborted') {\n return currentTransfer;\n }\n\n const { confirmations: confirmationCount } = transactionResult.value;\n\n if (confirmationCount < currentTransfer.source.requiredConfirmationCount) {\n return {\n ...currentTransfer,\n source: {\n ...currentTransfer.source,\n confirmationCount,\n },\n } satisfies SourcePendingTransfer;\n }\n\n return {\n ...currentTransfer,\n source: {\n ...currentTransfer.source,\n confirmationCount,\n },\n status: 'source-completed',\n } satisfies SourceCompletedTransfer;\n } catch {\n return currentTransfer;\n }\n}\n\nexport async function _trackTargetTx({\n config,\n currentTransfer,\n signal,\n targetClient,\n}: TrackTargetTxParams): Promise<SourceCompletedTransfer | TargetPendingTransfer | FailedTransfer | CompletedTransfer> {\n switch (currentTransfer.status) {\n case 'source-completed': {\n try {\n const depositsResult = await awaitOrAbort(\n getDepositsByAddress({ address: currentTransfer.toAddress, env: config.env }),\n signal,\n );\n\n if (depositsResult.status === 'aborted') {\n return currentTransfer;\n }\n\n const transferDeposit = depositsResult.value.find(\n (d) => d.txHash.toLowerCase() === currentTransfer.source.txHash.toLowerCase(),\n );\n\n if (!transferDeposit) {\n // Source Completed but no deposit found yet on target\n return currentTransfer;\n }\n\n const { needsNotarizationUpdate, needsSessionStateUpdate } = getMetadataUpdates(\n currentTransfer.metadata,\n transferDeposit.notarizationStatus,\n transferDeposit.sessionState,\n );\n\n // Update metadata if needed\n if (needsNotarizationUpdate || needsSessionStateUpdate) {\n return {\n ...currentTransfer,\n metadata: {\n ...currentTransfer.metadata,\n ...(needsNotarizationUpdate && { notarizationStatus: transferDeposit.notarizationStatus }),\n ...(needsSessionStateUpdate && { sessionState: transferDeposit.sessionState }),\n },\n } satisfies SourceCompletedTransfer;\n }\n\n if (isDepositFailed(transferDeposit)) {\n return {\n ...currentTransfer,\n errorCode: ErrorCode.NOTARIZATION_FAILED,\n errorReason: 'Deposit notarization failed',\n failedAtMs: Date.now(),\n status: 'failed',\n } satisfies FailedTransfer;\n }\n\n if (!transferDeposit.claimTxHash) {\n return currentTransfer;\n }\n\n return {\n ...currentTransfer,\n status: 'target-pending',\n target: {\n confirmationCount: 0,\n requiredConfirmationCount: EVM_CONFIRMATION_COUNT,\n startedAtMs: Date.now(),\n txHash: transferDeposit.claimTxHash,\n },\n } satisfies TargetPendingTransfer;\n } catch {\n return currentTransfer;\n }\n }\n default: {\n // target-pending\n\n if (!currentTransfer.target?.txHash) {\n // Transfer missing target info, should not reach here\n return {\n ...currentTransfer,\n errorCode: ErrorCode.UNKNOWN,\n errorReason: 'Missing target transaction hash',\n failedAtMs: Date.now(),\n status: 'failed',\n } satisfies FailedTransfer;\n }\n\n const { confirmationCount, requiredConfirmationCount, txHash } = currentTransfer.target;\n\n if (!isHash(txHash)) {\n // Invalid tx hash\n return {\n ...currentTransfer,\n errorCode: ErrorCode.UNKNOWN,\n errorReason: 'Invalid target transaction hash',\n failedAtMs: Date.now(),\n status: 'failed',\n } satisfies FailedTransfer;\n }\n\n try {\n const transactionResult = await awaitOrAbort(\n targetClient.waitForTransactionReceipt({\n confirmations: Math.min(confirmationCount + 1, requiredConfirmationCount),\n hash: txHash,\n }),\n signal,\n );\n\n if (transactionResult.status === 'aborted') {\n return currentTransfer;\n }\n\n const transactionReceipt = transactionResult.value;\n\n if (transactionReceipt.status === 'reverted') {\n return {\n ...currentTransfer,\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Target transaction was reverted',\n failedAtMs: Date.now(),\n status: 'failed',\n } satisfies FailedTransfer;\n }\n\n const newConfirmationCount: number = await targetClient\n .getTransactionConfirmations({\n transactionReceipt,\n })\n .then((count) => Number(count))\n .catch(() => confirmationCount + 1);\n\n // If still not enough confirmations, update the count\n if (newConfirmationCount < requiredConfirmationCount) {\n return {\n ...currentTransfer,\n target: {\n ...currentTransfer.target,\n confirmationCount: newConfirmationCount,\n },\n } satisfies TargetPendingTransfer;\n }\n\n return {\n ...currentTransfer,\n completedAtMs: Date.now(),\n status: 'completed',\n target: {\n ...currentTransfer.target,\n confirmationCount: newConfirmationCount,\n },\n } satisfies CompletedTransfer;\n } catch {\n return currentTransfer;\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e}from"../../../../errors.js";import{awaitOrAbort as t,getEvmClientForChain as n,waitForTimeoutOrAbort as r}from"../../../_utils.js";import{EVM_CONFIRMATION_COUNT as i}from"../../constants.js";import{getMetadataUpdates as a,isDepositFailed as o}from"../../_utils/metadata.js";import{isHash as s}from"viem";import{getDepositsByAddress as c}from"@lombard.finance/sdk";function l({bitcoinFunctions:e,config:t}){return({transfer:i,updateListener:a})=>{let o=new AbortController,s=()=>{o.abort()};return i.status===`completed`||i.status===`failed`?{cancel:s,result:Promise.resolve(i)}:{cancel:s,result:(async()=>{let s=structuredClone(i),c=n({chain:i.targetChain});for(;!o.signal.aborted;){let n=s.status;switch(s.status){case`source-pending`:s=await u({bitcoinFunctions:e,currentTransfer:s,signal:o.signal}),o.signal.aborted||a(s);break;case`source-completed`:case`target-pending`:s=await d({config:t,currentTransfer:s,signal:o.signal,targetClient:c}),o.signal.aborted||a(s);break;default:return s}s.status===n&&await r({timeoutMs:3e4,signal:o.signal})}return s})()}}}async function u({bitcoinFunctions:e,currentTransfer:n,signal:r}){try{let i=await t(e.getTransaction(n.source.txHash),r);if(i.status===`aborted`)return n;let{confirmations:a}=i.value;return a<n.source.requiredConfirmationCount?{...n,source:{...n.source,confirmationCount:a}}:{...n,source:{...n.source,confirmationCount:a},status:`source-completed`}}catch{return n}}async function d({config:n,currentTransfer:r,signal:l,targetClient:u}){switch(r.status){case`source-completed`:try{let s=await t(c({address:r.toAddress,env:n.env}),l);if(s.status===`aborted`)return r;let u=s.value.find(e=>e.txHash.toLowerCase()===r.source.txHash.toLowerCase());if(!u)return r;let{needsNotarizationUpdate:d,needsSessionStateUpdate:f}=a(r.metadata,u.notarizationStatus,u.sessionState);return d||f?{...r,metadata:{...r.metadata,...d&&{notarizationStatus:u.notarizationStatus},...f&&{sessionState:u.sessionState}}}:o(u)?{...r,errorCode:e.NOTARIZATION_FAILED,errorReason:`Deposit notarization failed`,failedAtMs:Date.now(),status:`failed`}:u.claimTxHash?{...r,status:`target-pending`,target:{confirmationCount:0,requiredConfirmationCount:i,startedAtMs:Date.now(),txHash:u.claimTxHash}}:r}catch{return r}default:{if(!r.target?.txHash)return{...r,errorCode:e.UNKNOWN,errorReason:`Missing target transaction hash`,failedAtMs:Date.now(),status:`failed`};let{confirmationCount:n,requiredConfirmationCount:i,txHash:a}=r.target;if(!s(a))return{...r,errorCode:e.UNKNOWN,errorReason:`Invalid target transaction hash`,failedAtMs:Date.now(),status:`failed`};try{let o=await t(u.waitForTransactionReceipt({confirmations:Math.min(n+1,i),hash:a}),l);if(o.status===`aborted`)return r;let s=o.value;if(s.status===`reverted`)return{...r,errorCode:e.TRANSACTION_REVERTED,errorReason:`Target transaction was reverted`,failedAtMs:Date.now(),status:`failed`};let c=await u.getTransactionConfirmations({transactionReceipt:s}).then(e=>Number(e)).catch(()=>n+1);return c<i?{...r,target:{...r.target,confirmationCount:c}}:{...r,completedAtMs:Date.now(),status:`completed`,target:{...r.target,confirmationCount:c}}}catch{return r}}}}export{l as trackTransferFactory};
|
|
2
|
+
//# sourceMappingURL=track-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-transfer.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.ts"],"sourcesContent":["import { getDepositsByAddress } from '@lombard.finance/sdk';\nimport { ErrorCode } from '../../../../errors';\nimport type { BitcoinFunctions } from '../../../../types/bitcoin';\nimport type { TransferService } from '../../../../types/service';\nimport type {\n CompletedTransfer,\n FailedTransfer,\n SourceCompletedTransfer,\n SourcePendingTransfer,\n TargetPendingTransfer,\n Transfer,\n} from '../../../../types/transfer';\nimport { awaitOrAbort, getEvmClientForChain, waitForTimeoutOrAbort } from '../../../_utils';\nimport type { BtcToBtcbConfig } from '../../types';\nimport { isHash } from 'viem';\nimport { getMetadataUpdates, isDepositFailed } from '../../_utils/metadata';\nimport { EVM_CONFIRMATION_COUNT } from '../../constants';\n\n// Polling interval for BTC deposits (30 seconds - faster than BTC block time since we also poll Lombard API)\nconst DEPOSIT_POLLING_INTERVAL_MS = 1000 * 30;\n\nexport interface TrackTransferFactoryOptions {\n bitcoinFunctions: BitcoinFunctions;\n config: BtcToBtcbConfig;\n}\n\nexport function trackTransferFactory({\n bitcoinFunctions,\n config,\n}: TrackTransferFactoryOptions): TransferService['trackTransfer'] {\n return ({ transfer, updateListener }) => {\n const ac = new AbortController();\n const cancel = () => {\n ac.abort();\n };\n\n if (transfer.status === 'completed' || transfer.status === 'failed') {\n return {\n cancel,\n result: Promise.resolve(transfer),\n };\n }\n\n const executeTracking = async (): Promise<Transfer> => {\n let currentTransfer: Transfer = structuredClone(transfer);\n\n const targetClient = getEvmClientForChain({ chain: transfer.targetChain });\n\n while (!ac.signal.aborted) {\n const statusBeforeTracking = currentTransfer.status;\n\n switch (currentTransfer.status) {\n case 'source-pending': {\n currentTransfer = await _trackSourceTx({\n bitcoinFunctions,\n currentTransfer,\n signal: ac.signal,\n });\n\n if (!ac.signal.aborted) {\n updateListener(currentTransfer);\n }\n\n break;\n }\n case 'source-completed':\n case 'target-pending': {\n currentTransfer = await _trackTargetTx({\n config,\n currentTransfer,\n signal: ac.signal,\n targetClient,\n });\n\n if (!ac.signal.aborted) {\n updateListener(currentTransfer);\n }\n\n break;\n }\n default: {\n return currentTransfer;\n }\n }\n\n const hasStatusChanged = currentTransfer.status !== statusBeforeTracking;\n\n if (!hasStatusChanged) {\n await waitForTimeoutOrAbort({ timeoutMs: DEPOSIT_POLLING_INTERVAL_MS, signal: ac.signal });\n }\n }\n\n return currentTransfer;\n };\n\n return {\n cancel,\n result: executeTracking(),\n };\n };\n}\n\nexport interface TrackBaseParams {\n currentTransfer: Transfer;\n signal: AbortSignal;\n}\n\nexport interface TrackSourceTxParams extends TrackBaseParams {\n bitcoinFunctions: BitcoinFunctions;\n currentTransfer: SourcePendingTransfer;\n}\n\nexport interface TrackTargetTxParams extends TrackBaseParams {\n config: BtcToBtcbConfig;\n currentTransfer: SourceCompletedTransfer | TargetPendingTransfer;\n targetClient: ReturnType<typeof getEvmClientForChain>;\n}\n\nexport async function _trackSourceTx({\n bitcoinFunctions,\n currentTransfer,\n signal,\n}: TrackSourceTxParams): Promise<SourcePendingTransfer | SourceCompletedTransfer | FailedTransfer> {\n try {\n const transactionResult = await awaitOrAbort(\n bitcoinFunctions.getTransaction(currentTransfer.source.txHash),\n signal,\n );\n\n if (transactionResult.status === 'aborted') {\n return currentTransfer;\n }\n\n const { confirmations: confirmationCount } = transactionResult.value;\n\n if (confirmationCount < currentTransfer.source.requiredConfirmationCount) {\n return {\n ...currentTransfer,\n source: {\n ...currentTransfer.source,\n confirmationCount,\n },\n } satisfies SourcePendingTransfer;\n }\n\n return {\n ...currentTransfer,\n source: {\n ...currentTransfer.source,\n confirmationCount,\n },\n status: 'source-completed',\n } satisfies SourceCompletedTransfer;\n } catch {\n return currentTransfer;\n }\n}\n\nexport async function _trackTargetTx({\n config,\n currentTransfer,\n signal,\n targetClient,\n}: TrackTargetTxParams): Promise<SourceCompletedTransfer | TargetPendingTransfer | FailedTransfer | CompletedTransfer> {\n switch (currentTransfer.status) {\n case 'source-completed': {\n try {\n const depositsResult = await awaitOrAbort(\n getDepositsByAddress({ address: currentTransfer.toAddress, env: config.env }),\n signal,\n );\n\n if (depositsResult.status === 'aborted') {\n return currentTransfer;\n }\n\n const transferDeposit = depositsResult.value.find(\n (d) => d.txHash.toLowerCase() === currentTransfer.source.txHash.toLowerCase(),\n );\n\n if (!transferDeposit) {\n // Source Completed but no deposit found yet on target\n return currentTransfer;\n }\n\n const { needsNotarizationUpdate, needsSessionStateUpdate } = getMetadataUpdates(\n currentTransfer.metadata,\n transferDeposit.notarizationStatus,\n transferDeposit.sessionState,\n );\n\n // Update metadata if needed\n if (needsNotarizationUpdate || needsSessionStateUpdate) {\n return {\n ...currentTransfer,\n metadata: {\n ...currentTransfer.metadata,\n ...(needsNotarizationUpdate && { notarizationStatus: transferDeposit.notarizationStatus }),\n ...(needsSessionStateUpdate && { sessionState: transferDeposit.sessionState }),\n },\n } satisfies SourceCompletedTransfer;\n }\n\n if (isDepositFailed(transferDeposit)) {\n return {\n ...currentTransfer,\n errorCode: ErrorCode.NOTARIZATION_FAILED,\n errorReason: 'Deposit notarization failed',\n failedAtMs: Date.now(),\n status: 'failed',\n } satisfies FailedTransfer;\n }\n\n if (!transferDeposit.claimTxHash) {\n return currentTransfer;\n }\n\n return {\n ...currentTransfer,\n status: 'target-pending',\n target: {\n confirmationCount: 0,\n requiredConfirmationCount: EVM_CONFIRMATION_COUNT,\n startedAtMs: Date.now(),\n txHash: transferDeposit.claimTxHash,\n },\n } satisfies TargetPendingTransfer;\n } catch {\n return currentTransfer;\n }\n }\n default: {\n // target-pending\n\n if (!currentTransfer.target?.txHash) {\n // Transfer missing target info, should not reach here\n return {\n ...currentTransfer,\n errorCode: ErrorCode.UNKNOWN,\n errorReason: 'Missing target transaction hash',\n failedAtMs: Date.now(),\n status: 'failed',\n } satisfies FailedTransfer;\n }\n\n const { confirmationCount, requiredConfirmationCount, txHash } = currentTransfer.target;\n\n if (!isHash(txHash)) {\n // Invalid tx hash\n return {\n ...currentTransfer,\n errorCode: ErrorCode.UNKNOWN,\n errorReason: 'Invalid target transaction hash',\n failedAtMs: Date.now(),\n status: 'failed',\n } satisfies FailedTransfer;\n }\n\n try {\n const transactionResult = await awaitOrAbort(\n targetClient.waitForTransactionReceipt({\n confirmations: Math.min(confirmationCount + 1, requiredConfirmationCount),\n hash: txHash,\n }),\n signal,\n );\n\n if (transactionResult.status === 'aborted') {\n return currentTransfer;\n }\n\n const transactionReceipt = transactionResult.value;\n\n if (transactionReceipt.status === 'reverted') {\n return {\n ...currentTransfer,\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Target transaction was reverted',\n failedAtMs: Date.now(),\n status: 'failed',\n } satisfies FailedTransfer;\n }\n\n const newConfirmationCount: number = await targetClient\n .getTransactionConfirmations({\n transactionReceipt,\n })\n .then((count) => Number(count))\n .catch(() => confirmationCount + 1);\n\n // If still not enough confirmations, update the count\n if (newConfirmationCount < requiredConfirmationCount) {\n return {\n ...currentTransfer,\n target: {\n ...currentTransfer.target,\n confirmationCount: newConfirmationCount,\n },\n } satisfies TargetPendingTransfer;\n }\n\n return {\n ...currentTransfer,\n completedAtMs: Date.now(),\n status: 'completed',\n target: {\n ...currentTransfer.target,\n confirmationCount: newConfirmationCount,\n },\n } satisfies CompletedTransfer;\n } catch {\n return currentTransfer;\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../constants.cjs`),t=require(`../../../../errors.cjs`),n=require(`../../../../utils/caip.cjs`),r=require(`../../../_utils.cjs`),i=require(`../../../../utils/bitcoin-address.cjs`),a=require(`../../constants.cjs`),o=require(`../../_utils/utxo.cjs`);let s=require(`viem`),c=require(`@lombard.finance/sdk`);function l({bitcoinFunctions:l,btcSigner:u,config:d,evmSigner:f}){return async({quote:p,onStepChange:m})=>{if(!i.isBech32AddressInNetwork(p.fromAddress,d.environment===e.Environment.PROD))throw new t.InvalidParamsError(t.ErrorReason.INCORRECT_ADDRESS_PROVIDED,`Invalid fromAddress was provided. Make sure it is a BTC address from correct environment.`);if(!(0,s.isAddress)(p.toAddress))throw new t.InvalidParamsError(t.ErrorReason.INCORRECT_ADDRESS_PROVIDED,`Invalid toAddress was provided. Must be a valid EVM address.`);let h=p.toAddress,g=n.caip2ToEip155ChainId(p.targetChain.chainId),_;try{_=await(0,c.getDepositBtcAddress)({address:h,chainId:g,partnerId:a.LOMBARD_PARTNER_ID,env:d.env,token:d.targetToken})}catch{}let v=_?1:2,y={currentSignature:1,currentSignatureReason:_?e.TransferSignatureReason.TokensTransfer:e.TransferSignatureReason.AddressOwnership,quote:p,requiredSignatures:v};if(!_){let n=r.getEvmClientForChain({chain:p.targetChain}),i=(0,c.getAddressConfirmationMessage)(g),o=await f.signMessage({message:i,address:h,chainId:g},e=>n.sendRawTransaction({serializedTransaction:e}),y);if(y.currentSignature=2,y.currentSignatureReason=e.TransferSignatureReason.TokensTransfer,_=await(0,c.generateDepositBtcAddress)({address:h,chainId:g,env:d.env,partnerId:a.LOMBARD_PARTNER_ID,signature:o,token:d.targetToken}),_===c.SANCTIONED_ADDRESS)throw new t.InvalidParamsError(t.ErrorReason.ADDRESS_IS_BLOCKED,_)}if(!i.isBech32AddressInNetwork(_,d.environment===e.Environment.PROD))throw new t.InvalidParamsError(t.ErrorReason.INCORRECT_ADDRESS_PROVIDED,`Generated deposit address is invalid`);let{low:b,high:x}=await l.getFeeRates(),S=d.environment===e.Environment.PROD?x:b,{utxos:C}=await l.getUtxoBalance(p.fromAddress,!1),{inputs:w,outputs:T}=await o.selectUtxos(_,p.fromAddress,p.amountIn,S,C,l);if(!w||!T)throw new t.InvalidParamsError(t.ErrorReason.INVALID_PARAMS,`Unable to create transaction. UTXO selection failed.`);let E=Date.now();m?.(y);let D;try{D=await r.getEvmClientForChain({chain:p.targetChain}).getBlockNumber()}catch{return{amountIn:p.amountIn,amountOut:p.amountOut,environment:d.environment,errorCode:t.ErrorCode.UNKNOWN,errorReason:`Unable to fetch target chain block number`,failedAtMs:Date.now(),fees:p.fees,fromAddress:p.fromAddress,id:p.id,partnerFeeBps:p.partnerFeeBps,sourceAsset:p.assetIn,sourceChain:p.sourceChain,targetAsset:p.assetOut,targetChain:p.targetChain,toAddress:p.toAddress,status:`failed`,type:e.ServiceType.LOMBARD_BTC_TO_BTCB}}let O=await u.sign({inputs:w,outputs:T},l.issueRawTx,y);return{amountIn:p.amountIn,amountOut:p.amountOut,environment:d.environment,fees:p.fees,fromAddress:p.fromAddress,id:p.id,partnerFeeBps:p.partnerFeeBps,source:{confirmationCount:0,requiredConfirmationCount:a.BTC_CONFIRMATION_COUNT,startedAtMs:E,txHash:O,targetStartBlockNumber:D},sourceAsset:p.assetIn,sourceChain:p.sourceChain,status:`source-pending`,targetAsset:p.assetOut,targetChain:p.targetChain,toAddress:p.toAddress,type:e.ServiceType.LOMBARD_BTC_TO_BTCB}}}exports.transferAssetFactory=l;
|
|
2
|
+
//# sourceMappingURL=transfer-asset.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer-asset.cjs","names":["isBech32AddressInNetwork","Environment","InvalidParamsError","ErrorReason","caip2ToEip155ChainId","LOMBARD_PARTNER_ID","TransferSignatureReason","getEvmClientForChain","SANCTIONED_ADDRESS","selectUtxos","ErrorCode","ServiceType","BTC_CONFIRMATION_COUNT"],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.ts"],"sourcesContent":["import { isAddress, type Mutable } from 'viem';\nimport { Environment, ServiceType, TransferSignatureReason } from '../../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError } from '../../../../errors';\nimport { caip2ToEip155ChainId } from '../../../../utils/caip';\nimport type { BitcoinFunctions } from '../../../../types/bitcoin';\nimport type { TransferService } from '../../../../types/service';\nimport type { BtcSigner, EvmSignerWithMessage } from '../../../../types/signer';\nimport type { FailedTransfer, SourcePendingTransfer, TransferStepDetails } from '../../../../types/transfer';\nimport { isBech32AddressInNetwork } from '../../../../utils/bitcoin-address';\nimport type { BtcToBtcbConfig } from '../../types';\nimport {\n generateDepositBtcAddress,\n getDepositBtcAddress,\n SANCTIONED_ADDRESS,\n getAddressConfirmationMessage,\n type ChainId,\n} from '@lombard.finance/sdk';\nimport { BTC_CONFIRMATION_COUNT, LOMBARD_PARTNER_ID } from '../../constants';\nimport { getEvmClientForChain } from '../../../_utils';\nimport { selectUtxos } from '../../_utils/utxo';\n\nexport interface TransferAssetFactoryOptions {\n bitcoinFunctions: BitcoinFunctions;\n btcSigner: BtcSigner;\n config: BtcToBtcbConfig;\n evmSigner: EvmSignerWithMessage;\n}\n\nexport function transferAssetFactory({\n bitcoinFunctions,\n btcSigner,\n config,\n evmSigner,\n}: TransferAssetFactoryOptions): TransferService['transferAsset'] {\n return async ({ quote, onStepChange }) => {\n if (!isBech32AddressInNetwork(quote.fromAddress, config.environment === Environment.PROD)) {\n throw new InvalidParamsError(\n ErrorReason.INCORRECT_ADDRESS_PROVIDED,\n 'Invalid fromAddress was provided. Make sure it is a BTC address from correct environment.',\n );\n }\n\n if (!isAddress(quote.toAddress)) {\n throw new InvalidParamsError(\n ErrorReason.INCORRECT_ADDRESS_PROVIDED,\n 'Invalid toAddress was provided. Must be a valid EVM address.',\n );\n }\n\n const targetAddress = quote.toAddress;\n const targetChainId: number = caip2ToEip155ChainId(quote.targetChain.chainId);\n\n let btcDepositAddress: string | undefined;\n\n try {\n btcDepositAddress = await getDepositBtcAddress({\n address: targetAddress,\n chainId: targetChainId as ChainId,\n partnerId: LOMBARD_PARTNER_ID,\n env: config.env,\n token: config.targetToken,\n });\n } catch {\n // Deposit address not found. Generate a new one.\n }\n\n const requiredSignatures: number = btcDepositAddress ? 1 : 2;\n const transferStep: Mutable<TransferStepDetails> = {\n currentSignature: 1,\n currentSignatureReason: btcDepositAddress\n ? TransferSignatureReason.TokensTransfer\n : TransferSignatureReason.AddressOwnership,\n quote,\n requiredSignatures,\n };\n\n // Generate a new deposit address if not existing\n if (!btcDepositAddress) {\n const client = getEvmClientForChain({ chain: quote.targetChain });\n\n // This message MUST match whatever Lombard is using to verify the provided signature.\n const message = getAddressConfirmationMessage(targetChainId);\n const signature = await evmSigner.signMessage(\n { message, address: targetAddress, chainId: targetChainId },\n (signedTxHash) => client.sendRawTransaction({ serializedTransaction: signedTxHash }),\n transferStep,\n );\n\n // Update step for the next signature (tokens transfer)\n transferStep.currentSignature = 2;\n transferStep.currentSignatureReason = TransferSignatureReason.TokensTransfer;\n\n btcDepositAddress = await generateDepositBtcAddress({\n address: targetAddress,\n chainId: targetChainId as ChainId,\n env: config.env,\n partnerId: LOMBARD_PARTNER_ID,\n signature,\n token: config.targetToken,\n });\n\n if (btcDepositAddress === SANCTIONED_ADDRESS) {\n throw new InvalidParamsError(ErrorReason.ADDRESS_IS_BLOCKED, btcDepositAddress);\n }\n }\n\n if (!isBech32AddressInNetwork(btcDepositAddress, config.environment === Environment.PROD)) {\n throw new InvalidParamsError(ErrorReason.INCORRECT_ADDRESS_PROVIDED, 'Generated deposit address is invalid');\n }\n\n const { low, high } = await bitcoinFunctions.getFeeRates();\n const feeRate = config.environment === Environment.PROD ? high : low;\n const { utxos } = await bitcoinFunctions.getUtxoBalance(quote.fromAddress, false);\n\n const { inputs, outputs } = await selectUtxos(\n btcDepositAddress,\n quote.fromAddress,\n quote.amountIn,\n feeRate,\n utxos,\n bitcoinFunctions,\n );\n\n if (!inputs || !outputs) {\n throw new InvalidParamsError(ErrorReason.INVALID_PARAMS, 'Unable to create transaction. UTXO selection failed.');\n }\n\n const startedAtMs = Date.now();\n\n onStepChange?.(transferStep);\n\n let targetStartBlockNumber: bigint;\n\n try {\n const targetClient = getEvmClientForChain({ chain: quote.targetChain });\n targetStartBlockNumber = await targetClient.getBlockNumber();\n } catch {\n // Unable to get the target block number. Can't track from this point.\n\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment: config.environment,\n errorCode: ErrorCode.UNKNOWN,\n errorReason: 'Unable to fetch target chain block number',\n failedAtMs: Date.now(),\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n status: 'failed',\n type: ServiceType.LOMBARD_BTC_TO_BTCB,\n } satisfies FailedTransfer;\n }\n\n const txHash = await btcSigner.sign({ inputs, outputs }, bitcoinFunctions.issueRawTx, transferStep);\n\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment: config.environment,\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: BTC_CONFIRMATION_COUNT,\n startedAtMs,\n txHash,\n targetStartBlockNumber,\n },\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n status: 'source-pending',\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: ServiceType.LOMBARD_BTC_TO_BTCB,\n } satisfies SourcePendingTransfer;\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Environment as e,ServiceType as t,TransferSignatureReason as n}from"../../../../constants.js";import{ErrorCode as r,ErrorReason as i,InvalidParamsError as a}from"../../../../errors.js";import{caip2ToEip155ChainId as o}from"../../../../utils/caip.js";import{getEvmClientForChain as s}from"../../../_utils.js";import{isBech32AddressInNetwork as c}from"../../../../utils/bitcoin-address.js";import{BTC_CONFIRMATION_COUNT as l,LOMBARD_PARTNER_ID as u}from"../../constants.js";import{selectUtxos as d}from"../../_utils/utxo.js";import{isAddress as f}from"viem";import{SANCTIONED_ADDRESS as p,generateDepositBtcAddress as m,getAddressConfirmationMessage as h,getDepositBtcAddress as g}from"@lombard.finance/sdk";function _({bitcoinFunctions:_,btcSigner:v,config:y,evmSigner:b}){return async({quote:x,onStepChange:S})=>{if(!c(x.fromAddress,y.environment===e.PROD))throw new a(i.INCORRECT_ADDRESS_PROVIDED,`Invalid fromAddress was provided. Make sure it is a BTC address from correct environment.`);if(!f(x.toAddress))throw new a(i.INCORRECT_ADDRESS_PROVIDED,`Invalid toAddress was provided. Must be a valid EVM address.`);let C=x.toAddress,w=o(x.targetChain.chainId),T;try{T=await g({address:C,chainId:w,partnerId:u,env:y.env,token:y.targetToken})}catch{}let E=T?1:2,D={currentSignature:1,currentSignatureReason:T?n.TokensTransfer:n.AddressOwnership,quote:x,requiredSignatures:E};if(!T){let e=s({chain:x.targetChain}),t=h(w),r=await b.signMessage({message:t,address:C,chainId:w},t=>e.sendRawTransaction({serializedTransaction:t}),D);if(D.currentSignature=2,D.currentSignatureReason=n.TokensTransfer,T=await m({address:C,chainId:w,env:y.env,partnerId:u,signature:r,token:y.targetToken}),T===p)throw new a(i.ADDRESS_IS_BLOCKED,T)}if(!c(T,y.environment===e.PROD))throw new a(i.INCORRECT_ADDRESS_PROVIDED,`Generated deposit address is invalid`);let{low:O,high:k}=await _.getFeeRates(),A=y.environment===e.PROD?k:O,{utxos:j}=await _.getUtxoBalance(x.fromAddress,!1),{inputs:M,outputs:N}=await d(T,x.fromAddress,x.amountIn,A,j,_);if(!M||!N)throw new a(i.INVALID_PARAMS,`Unable to create transaction. UTXO selection failed.`);let P=Date.now();S?.(D);let F;try{F=await s({chain:x.targetChain}).getBlockNumber()}catch{return{amountIn:x.amountIn,amountOut:x.amountOut,environment:y.environment,errorCode:r.UNKNOWN,errorReason:`Unable to fetch target chain block number`,failedAtMs:Date.now(),fees:x.fees,fromAddress:x.fromAddress,id:x.id,partnerFeeBps:x.partnerFeeBps,sourceAsset:x.assetIn,sourceChain:x.sourceChain,targetAsset:x.assetOut,targetChain:x.targetChain,toAddress:x.toAddress,status:`failed`,type:t.LOMBARD_BTC_TO_BTCB}}let I=await v.sign({inputs:M,outputs:N},_.issueRawTx,D);return{amountIn:x.amountIn,amountOut:x.amountOut,environment:y.environment,fees:x.fees,fromAddress:x.fromAddress,id:x.id,partnerFeeBps:x.partnerFeeBps,source:{confirmationCount:0,requiredConfirmationCount:l,startedAtMs:P,txHash:I,targetStartBlockNumber:F},sourceAsset:x.assetIn,sourceChain:x.sourceChain,status:`source-pending`,targetAsset:x.assetOut,targetChain:x.targetChain,toAddress:x.toAddress,type:t.LOMBARD_BTC_TO_BTCB}}}export{_ as transferAssetFactory};
|
|
2
|
+
//# sourceMappingURL=transfer-asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer-asset.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.ts"],"sourcesContent":["import { isAddress, type Mutable } from 'viem';\nimport { Environment, ServiceType, TransferSignatureReason } from '../../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError } from '../../../../errors';\nimport { caip2ToEip155ChainId } from '../../../../utils/caip';\nimport type { BitcoinFunctions } from '../../../../types/bitcoin';\nimport type { TransferService } from '../../../../types/service';\nimport type { BtcSigner, EvmSignerWithMessage } from '../../../../types/signer';\nimport type { FailedTransfer, SourcePendingTransfer, TransferStepDetails } from '../../../../types/transfer';\nimport { isBech32AddressInNetwork } from '../../../../utils/bitcoin-address';\nimport type { BtcToBtcbConfig } from '../../types';\nimport {\n generateDepositBtcAddress,\n getDepositBtcAddress,\n SANCTIONED_ADDRESS,\n getAddressConfirmationMessage,\n type ChainId,\n} from '@lombard.finance/sdk';\nimport { BTC_CONFIRMATION_COUNT, LOMBARD_PARTNER_ID } from '../../constants';\nimport { getEvmClientForChain } from '../../../_utils';\nimport { selectUtxos } from '../../_utils/utxo';\n\nexport interface TransferAssetFactoryOptions {\n bitcoinFunctions: BitcoinFunctions;\n btcSigner: BtcSigner;\n config: BtcToBtcbConfig;\n evmSigner: EvmSignerWithMessage;\n}\n\nexport function transferAssetFactory({\n bitcoinFunctions,\n btcSigner,\n config,\n evmSigner,\n}: TransferAssetFactoryOptions): TransferService['transferAsset'] {\n return async ({ quote, onStepChange }) => {\n if (!isBech32AddressInNetwork(quote.fromAddress, config.environment === Environment.PROD)) {\n throw new InvalidParamsError(\n ErrorReason.INCORRECT_ADDRESS_PROVIDED,\n 'Invalid fromAddress was provided. Make sure it is a BTC address from correct environment.',\n );\n }\n\n if (!isAddress(quote.toAddress)) {\n throw new InvalidParamsError(\n ErrorReason.INCORRECT_ADDRESS_PROVIDED,\n 'Invalid toAddress was provided. Must be a valid EVM address.',\n );\n }\n\n const targetAddress = quote.toAddress;\n const targetChainId: number = caip2ToEip155ChainId(quote.targetChain.chainId);\n\n let btcDepositAddress: string | undefined;\n\n try {\n btcDepositAddress = await getDepositBtcAddress({\n address: targetAddress,\n chainId: targetChainId as ChainId,\n partnerId: LOMBARD_PARTNER_ID,\n env: config.env,\n token: config.targetToken,\n });\n } catch {\n // Deposit address not found. Generate a new one.\n }\n\n const requiredSignatures: number = btcDepositAddress ? 1 : 2;\n const transferStep: Mutable<TransferStepDetails> = {\n currentSignature: 1,\n currentSignatureReason: btcDepositAddress\n ? TransferSignatureReason.TokensTransfer\n : TransferSignatureReason.AddressOwnership,\n quote,\n requiredSignatures,\n };\n\n // Generate a new deposit address if not existing\n if (!btcDepositAddress) {\n const client = getEvmClientForChain({ chain: quote.targetChain });\n\n // This message MUST match whatever Lombard is using to verify the provided signature.\n const message = getAddressConfirmationMessage(targetChainId);\n const signature = await evmSigner.signMessage(\n { message, address: targetAddress, chainId: targetChainId },\n (signedTxHash) => client.sendRawTransaction({ serializedTransaction: signedTxHash }),\n transferStep,\n );\n\n // Update step for the next signature (tokens transfer)\n transferStep.currentSignature = 2;\n transferStep.currentSignatureReason = TransferSignatureReason.TokensTransfer;\n\n btcDepositAddress = await generateDepositBtcAddress({\n address: targetAddress,\n chainId: targetChainId as ChainId,\n env: config.env,\n partnerId: LOMBARD_PARTNER_ID,\n signature,\n token: config.targetToken,\n });\n\n if (btcDepositAddress === SANCTIONED_ADDRESS) {\n throw new InvalidParamsError(ErrorReason.ADDRESS_IS_BLOCKED, btcDepositAddress);\n }\n }\n\n if (!isBech32AddressInNetwork(btcDepositAddress, config.environment === Environment.PROD)) {\n throw new InvalidParamsError(ErrorReason.INCORRECT_ADDRESS_PROVIDED, 'Generated deposit address is invalid');\n }\n\n const { low, high } = await bitcoinFunctions.getFeeRates();\n const feeRate = config.environment === Environment.PROD ? high : low;\n const { utxos } = await bitcoinFunctions.getUtxoBalance(quote.fromAddress, false);\n\n const { inputs, outputs } = await selectUtxos(\n btcDepositAddress,\n quote.fromAddress,\n quote.amountIn,\n feeRate,\n utxos,\n bitcoinFunctions,\n );\n\n if (!inputs || !outputs) {\n throw new InvalidParamsError(ErrorReason.INVALID_PARAMS, 'Unable to create transaction. UTXO selection failed.');\n }\n\n const startedAtMs = Date.now();\n\n onStepChange?.(transferStep);\n\n let targetStartBlockNumber: bigint;\n\n try {\n const targetClient = getEvmClientForChain({ chain: quote.targetChain });\n targetStartBlockNumber = await targetClient.getBlockNumber();\n } catch {\n // Unable to get the target block number. Can't track from this point.\n\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment: config.environment,\n errorCode: ErrorCode.UNKNOWN,\n errorReason: 'Unable to fetch target chain block number',\n failedAtMs: Date.now(),\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n status: 'failed',\n type: ServiceType.LOMBARD_BTC_TO_BTCB,\n } satisfies FailedTransfer;\n }\n\n const txHash = await btcSigner.sign({ inputs, outputs }, bitcoinFunctions.issueRawTx, transferStep);\n\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment: config.environment,\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: BTC_CONFIRMATION_COUNT,\n startedAtMs,\n txHash,\n targetStartBlockNumber,\n },\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n status: 'source-pending',\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: ServiceType.LOMBARD_BTC_TO_BTCB,\n } satisfies SourcePendingTransfer;\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../utils/caip.cjs`),n=require(`./constants.cjs`),r=require(`./_utils/asset.cjs`),i=require(`./_utils/chain.cjs`),a=require(`./_utils/fee.cjs`),o=require(`./btc-to-btcb/_handlers/get-assets.cjs`),s=require(`./btc-to-btcb/_handlers/analyze-support.cjs`),c=require(`./btc-to-btcb/_handlers/estimate-native-fee.cjs`),l=require(`./btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs`),u=require(`./btc-to-btcb/_handlers/stream-quotes.cjs`),d=require(`./btc-to-btcb/_handlers/track-transfer.cjs`),f=require(`./btc-to-btcb/_handlers/transfer-asset.cjs`),p=require(`./btc-to-btcb/_handlers/get-bridgeable-assets.cjs`);let m=require(`@lombard.finance/sdk`);async function h({bitcoinFunctions:h,btcSigner:g,environment:_,evmSigner:v}){let y=n.ENV_MAP[_],b=y===m.Env.prod?e.BitcoinChainIds.MAINNET:e.BitcoinChainIds.TESTNET,x=y===m.Env.prod?e.AvalancheChainIds.MAINNET:e.AvalancheChainIds.FUJI,S=t.caip2ToEip155ChainId(x),C=m.Token.BTCb;i.assertSupportedChainId(S);let w={environment:_,env:y,sourceChain:b,targetChain:x,targetChainId:S,targetAsset:r.getBTCbAsset(S,y),targetToken:C,mintingFee:(await a.getFees(C,S,y)).mintingFee};return{analyzeSupport:s.analyzeSupportFactory({config:w}),estimateNativeFee:c.estimateNativeFeeFactory({bitcoinFunctions:h,config:w}),getAssets:o.getAssetsFactory({config:w}),getBridgeableAssets:p.getBridgeableAssetsFactory({config:w}),getMinimumTransferAmount:async()=>l.getMinimumTransferAmount(),getSupportedChains:async()=>new Map([[b,new Set([x])]]),streamQuotes:u.streamQuotesFactory({config:w}),trackTransfer:d.trackTransferFactory({bitcoinFunctions:h,config:w}),transferAsset:f.transferAssetFactory({bitcoinFunctions:h,btcSigner:g,config:w,evmSigner:v}),type:e.ServiceType.LOMBARD_BTC_TO_BTCB}}exports.createBtcToBtcbService=h;
|
|
2
|
+
//# sourceMappingURL=btc-to-btcb-service.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"btc-to-btcb-service.cjs","names":["ENV_MAP","Env","BitcoinChainIds","AvalancheChainIds","caip2ToEip155ChainId","Token","getBTCbAsset","getFees","analyzeSupportFactory","estimateNativeFeeFactory","getAssetsFactory","getBridgeableAssetsFactory","getMinimumTransferAmount","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/lombard/btc-to-btcb-service.ts"],"sourcesContent":["import { Env, Token } from '@lombard.finance/sdk';\nimport { AvalancheChainIds, BitcoinChainIds, ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport { caip2ToEip155ChainId } from '../../utils/caip';\nimport type { BitcoinFunctions } from '../../types/bitcoin';\nimport type { TransferService } from '../../types/service';\nimport type { BtcSigner, EvmSignerWithMessage } from '../../types/signer';\nimport { ENV_MAP } from './constants';\nimport { getBTCbAsset } from './_utils/asset';\nimport { assertSupportedChainId } from './_utils/chain';\nimport type { BtcToBtcbConfig } from './types';\nimport { getFees } from './_utils/fee';\nimport { getAssetsFactory } from './btc-to-btcb/_handlers/get-assets';\nimport { analyzeSupportFactory } from './btc-to-btcb/_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './btc-to-btcb/_handlers/estimate-native-fee';\nimport { getMinimumTransferAmount } from './btc-to-btcb/_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './btc-to-btcb/_handlers/stream-quotes';\nimport { trackTransferFactory } from './btc-to-btcb/_handlers/track-transfer';\nimport { transferAssetFactory } from './btc-to-btcb/_handlers/transfer-asset';\nimport { getBridgeableAssetsFactory } from './btc-to-btcb/_handlers/get-bridgeable-assets';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface BtcToBtcbServiceOptions {\n bitcoinFunctions: BitcoinFunctions;\n btcSigner: BtcSigner;\n environment: Environment;\n evmSigner: EvmSignerWithMessage;\n fetch?: Fetch;\n}\n\nexport async function createBtcToBtcbService({\n bitcoinFunctions,\n btcSigner,\n environment,\n evmSigner,\n}: BtcToBtcbServiceOptions): Promise<TransferService> {\n const env = ENV_MAP[environment];\n\n const sourceChain = env === Env.prod ? BitcoinChainIds.MAINNET : BitcoinChainIds.TESTNET;\n const targetChain = env === Env.prod ? AvalancheChainIds.MAINNET : AvalancheChainIds.FUJI;\n const targetChainId = caip2ToEip155ChainId(targetChain);\n const targetToken = Token.BTCb;\n\n assertSupportedChainId(targetChainId);\n\n const targetAsset = getBTCbAsset(targetChainId, env);\n\n const fees = await getFees(targetToken, targetChainId, env);\n\n const config: BtcToBtcbConfig = {\n environment,\n env,\n sourceChain,\n targetChain,\n targetChainId,\n targetAsset,\n targetToken,\n mintingFee: fees.mintingFee,\n };\n\n return {\n analyzeSupport: analyzeSupportFactory({ config }),\n estimateNativeFee: estimateNativeFeeFactory({ bitcoinFunctions, config }),\n getAssets: getAssetsFactory({ config }),\n getBridgeableAssets: getBridgeableAssetsFactory({ config }),\n getMinimumTransferAmount: async () => {\n return getMinimumTransferAmount();\n },\n getSupportedChains: async () => {\n return new Map([[sourceChain, new Set([targetChain])]]);\n },\n streamQuotes: streamQuotesFactory({ config }),\n trackTransfer: trackTransferFactory({ bitcoinFunctions, config }),\n transferAsset: transferAssetFactory({ bitcoinFunctions, btcSigner, config, evmSigner }),\n type: ServiceType.LOMBARD_BTC_TO_BTCB,\n } satisfies TransferService;\n}\n"],"mappings":"+uBA8BA,eAAsB,EAAuB,CAC3C,mBACA,YACA,cACA,aACoD,CACpD,IAAM,EAAMA,EAAAA,QAAQ,GAEd,EAAc,IAAQC,EAAAA,IAAI,KAAOC,EAAAA,gBAAgB,QAAUA,EAAAA,gBAAgB,QAC3E,EAAc,IAAQD,EAAAA,IAAI,KAAOE,EAAAA,kBAAkB,QAAUA,EAAAA,kBAAkB,KAC/E,EAAgBC,EAAAA,qBAAqB,EAAY,CACjD,EAAcC,EAAAA,MAAM,KAE1B,EAAA,uBAAuB,EAAc,CAMrC,IAAM,EAA0B,CAC9B,cACA,MACA,cACA,cACA,gBACA,YAVkBC,EAAAA,aAAa,EAAe,EAAI,CAWlD,cACA,YAVW,MAAMC,EAAAA,QAAQ,EAAa,EAAe,EAAI,EAUxC,WAClB,CAED,MAAO,CACL,eAAgBC,EAAAA,sBAAsB,CAAE,SAAQ,CAAC,CACjD,kBAAmBC,EAAAA,yBAAyB,CAAE,mBAAkB,SAAQ,CAAC,CACzE,UAAWC,EAAAA,iBAAiB,CAAE,SAAQ,CAAC,CACvC,oBAAqBC,EAAAA,2BAA2B,CAAE,SAAQ,CAAC,CAC3D,yBAA0B,SACjBC,EAAAA,0BAA0B,CAEnC,mBAAoB,SACX,IAAI,IAAI,CAAC,CAAC,EAAa,IAAI,IAAI,CAAC,EAAY,CAAC,CAAC,CAAC,CAAC,CAEzD,aAAcC,EAAAA,oBAAoB,CAAE,SAAQ,CAAC,CAC7C,cAAeC,EAAAA,qBAAqB,CAAE,mBAAkB,SAAQ,CAAC,CACjE,cAAeC,EAAAA,qBAAqB,CAAE,mBAAkB,YAAW,SAAQ,YAAW,CAAC,CACvF,KAAMC,EAAAA,YAAY,oBACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AvalancheChainIds as e,BitcoinChainIds as t,ServiceType as n}from"../../constants.js";import{caip2ToEip155ChainId as r}from"../../utils/caip.js";import{ENV_MAP as i}from"./constants.js";import{getBTCbAsset as a}from"./_utils/asset.js";import{assertSupportedChainId as o}from"./_utils/chain.js";import{getFees as s}from"./_utils/fee.js";import{getAssetsFactory as c}from"./btc-to-btcb/_handlers/get-assets.js";import{analyzeSupportFactory as l}from"./btc-to-btcb/_handlers/analyze-support.js";import{estimateNativeFeeFactory as u}from"./btc-to-btcb/_handlers/estimate-native-fee.js";import{getMinimumTransferAmount as d}from"./btc-to-btcb/_handlers/get-minimum-transfer-amount.js";import{streamQuotesFactory as f}from"./btc-to-btcb/_handlers/stream-quotes.js";import{trackTransferFactory as p}from"./btc-to-btcb/_handlers/track-transfer.js";import{transferAssetFactory as m}from"./btc-to-btcb/_handlers/transfer-asset.js";import{getBridgeableAssetsFactory as h}from"./btc-to-btcb/_handlers/get-bridgeable-assets.js";import{Env as g,Token as _}from"@lombard.finance/sdk";async function v({bitcoinFunctions:v,btcSigner:y,environment:b,evmSigner:x}){let S=i[b],C=S===g.prod?t.MAINNET:t.TESTNET,w=S===g.prod?e.MAINNET:e.FUJI,T=r(w),E=_.BTCb;o(T);let D={environment:b,env:S,sourceChain:C,targetChain:w,targetChainId:T,targetAsset:a(T,S),targetToken:E,mintingFee:(await s(E,T,S)).mintingFee};return{analyzeSupport:l({config:D}),estimateNativeFee:u({bitcoinFunctions:v,config:D}),getAssets:c({config:D}),getBridgeableAssets:h({config:D}),getMinimumTransferAmount:async()=>d(),getSupportedChains:async()=>new Map([[C,new Set([w])]]),streamQuotes:f({config:D}),trackTransfer:p({bitcoinFunctions:v,config:D}),transferAsset:m({bitcoinFunctions:v,btcSigner:y,config:D,evmSigner:x}),type:n.LOMBARD_BTC_TO_BTCB}}export{v as createBtcToBtcbService};
|
|
2
|
+
//# sourceMappingURL=btc-to-btcb-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"btc-to-btcb-service.js","names":[],"sources":["../../../src/transfer-service/lombard/btc-to-btcb-service.ts"],"sourcesContent":["import { Env, Token } from '@lombard.finance/sdk';\nimport { AvalancheChainIds, BitcoinChainIds, ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport { caip2ToEip155ChainId } from '../../utils/caip';\nimport type { BitcoinFunctions } from '../../types/bitcoin';\nimport type { TransferService } from '../../types/service';\nimport type { BtcSigner, EvmSignerWithMessage } from '../../types/signer';\nimport { ENV_MAP } from './constants';\nimport { getBTCbAsset } from './_utils/asset';\nimport { assertSupportedChainId } from './_utils/chain';\nimport type { BtcToBtcbConfig } from './types';\nimport { getFees } from './_utils/fee';\nimport { getAssetsFactory } from './btc-to-btcb/_handlers/get-assets';\nimport { analyzeSupportFactory } from './btc-to-btcb/_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './btc-to-btcb/_handlers/estimate-native-fee';\nimport { getMinimumTransferAmount } from './btc-to-btcb/_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './btc-to-btcb/_handlers/stream-quotes';\nimport { trackTransferFactory } from './btc-to-btcb/_handlers/track-transfer';\nimport { transferAssetFactory } from './btc-to-btcb/_handlers/transfer-asset';\nimport { getBridgeableAssetsFactory } from './btc-to-btcb/_handlers/get-bridgeable-assets';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface BtcToBtcbServiceOptions {\n bitcoinFunctions: BitcoinFunctions;\n btcSigner: BtcSigner;\n environment: Environment;\n evmSigner: EvmSignerWithMessage;\n fetch?: Fetch;\n}\n\nexport async function createBtcToBtcbService({\n bitcoinFunctions,\n btcSigner,\n environment,\n evmSigner,\n}: BtcToBtcbServiceOptions): Promise<TransferService> {\n const env = ENV_MAP[environment];\n\n const sourceChain = env === Env.prod ? BitcoinChainIds.MAINNET : BitcoinChainIds.TESTNET;\n const targetChain = env === Env.prod ? AvalancheChainIds.MAINNET : AvalancheChainIds.FUJI;\n const targetChainId = caip2ToEip155ChainId(targetChain);\n const targetToken = Token.BTCb;\n\n assertSupportedChainId(targetChainId);\n\n const targetAsset = getBTCbAsset(targetChainId, env);\n\n const fees = await getFees(targetToken, targetChainId, env);\n\n const config: BtcToBtcbConfig = {\n environment,\n env,\n sourceChain,\n targetChain,\n targetChainId,\n targetAsset,\n targetToken,\n mintingFee: fees.mintingFee,\n };\n\n return {\n analyzeSupport: analyzeSupportFactory({ config }),\n estimateNativeFee: estimateNativeFeeFactory({ bitcoinFunctions, config }),\n getAssets: getAssetsFactory({ config }),\n getBridgeableAssets: getBridgeableAssetsFactory({ config }),\n getMinimumTransferAmount: async () => {\n return getMinimumTransferAmount();\n },\n getSupportedChains: async () => {\n return new Map([[sourceChain, new Set([targetChain])]]);\n },\n streamQuotes: streamQuotesFactory({ config }),\n trackTransfer: trackTransferFactory({ bitcoinFunctions, config }),\n transferAsset: transferAssetFactory({ bitcoinFunctions, btcSigner, config, evmSigner }),\n type: ServiceType.LOMBARD_BTC_TO_BTCB,\n } satisfies TransferService;\n}\n"],"mappings":"ojCA8BA,eAAsB,EAAuB,CAC3C,mBACA,YACA,cACA,aACoD,CACpD,IAAM,EAAM,EAAQ,GAEd,EAAc,IAAQ,EAAI,KAAO,EAAgB,QAAU,EAAgB,QAC3E,EAAc,IAAQ,EAAI,KAAO,EAAkB,QAAU,EAAkB,KAC/E,EAAgB,EAAqB,EAAY,CACjD,EAAc,EAAM,KAE1B,EAAuB,EAAc,CAMrC,IAAM,EAA0B,CAC9B,cACA,MACA,cACA,cACA,gBACA,YAVkB,EAAa,EAAe,EAAI,CAWlD,cACA,YAVW,MAAM,EAAQ,EAAa,EAAe,EAAI,EAUxC,WAClB,CAED,MAAO,CACL,eAAgB,EAAsB,CAAE,SAAQ,CAAC,CACjD,kBAAmB,EAAyB,CAAE,mBAAkB,SAAQ,CAAC,CACzE,UAAW,EAAiB,CAAE,SAAQ,CAAC,CACvC,oBAAqB,EAA2B,CAAE,SAAQ,CAAC,CAC3D,yBAA0B,SACjB,GAA0B,CAEnC,mBAAoB,SACX,IAAI,IAAI,CAAC,CAAC,EAAa,IAAI,IAAI,CAAC,EAAY,CAAC,CAAC,CAAC,CAAC,CAEzD,aAAc,EAAoB,CAAE,SAAQ,CAAC,CAC7C,cAAe,EAAqB,CAAE,mBAAkB,SAAQ,CAAC,CACjE,cAAe,EAAqB,CAAE,mBAAkB,YAAW,SAAQ,YAAW,CAAC,CACvF,KAAM,EAAY,oBACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../constants.cjs`);let t=require(`viem`);function n({config:n}){return({sourceChainId:r,targetChainId:i,sourceAsset:a,targetAsset:o})=>r===n.sourceChain&&i===n.targetChain&&a.type===e.TokenType.ERC20&&o.type===e.TokenType.NATIVE&&(0,t.isAddressEqual)(a.address,n.sourceAsset.address)}exports.analyzeSupportFactory=n;
|
|
2
|
+
//# sourceMappingURL=analyze-support.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-support.cjs","names":["TokenType"],"sources":["../../../../../src/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.ts"],"sourcesContent":["import { isAddressEqual } from 'viem';\nimport type { BtcbToBtcConfig } from '../../types';\nimport { TokenType } from '../../../../constants';\nimport type { TransferService } from '../../../../types/service';\n\nexport interface AnalyzeSupportFactoryOptions {\n config: BtcbToBtcConfig;\n}\n\nexport function analyzeSupportFactory({ config }: AnalyzeSupportFactoryOptions): TransferService['analyzeSupport'] {\n return ({ sourceChainId, targetChainId, sourceAsset, targetAsset }) => {\n return (\n sourceChainId === config.sourceChain &&\n targetChainId === config.targetChain &&\n sourceAsset.type === TokenType.ERC20 &&\n targetAsset.type === TokenType.NATIVE &&\n isAddressEqual(sourceAsset.address, config.sourceAsset.address)\n );\n };\n}\n"],"mappings":"yHASA,SAAgB,EAAsB,CAAE,UAA2E,CACjH,OAAQ,CAAE,gBAAe,gBAAe,cAAa,iBAEjD,IAAkB,EAAO,aACzB,IAAkB,EAAO,aACzB,EAAY,OAASA,EAAAA,UAAU,OAC/B,EAAY,OAASA,EAAAA,UAAU,SAAA,EAAA,EAAA,gBAChB,EAAY,QAAS,EAAO,YAAY,QAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{TokenType as e}from"../../../../constants.js";import{isAddressEqual as t}from"viem";function n({config:n}){return({sourceChainId:r,targetChainId:i,sourceAsset:a,targetAsset:o})=>r===n.sourceChain&&i===n.targetChain&&a.type===e.ERC20&&o.type===e.NATIVE&&t(a.address,n.sourceAsset.address)}export{n as analyzeSupportFactory};
|
|
2
|
+
//# sourceMappingURL=analyze-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-support.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.ts"],"sourcesContent":["import { isAddressEqual } from 'viem';\nimport type { BtcbToBtcConfig } from '../../types';\nimport { TokenType } from '../../../../constants';\nimport type { TransferService } from '../../../../types/service';\n\nexport interface AnalyzeSupportFactoryOptions {\n config: BtcbToBtcConfig;\n}\n\nexport function analyzeSupportFactory({ config }: AnalyzeSupportFactoryOptions): TransferService['analyzeSupport'] {\n return ({ sourceChainId, targetChainId, sourceAsset, targetAsset }) => {\n return (\n sourceChainId === config.sourceChain &&\n targetChainId === config.targetChain &&\n sourceAsset.type === TokenType.ERC20 &&\n targetAsset.type === TokenType.NATIVE &&\n isAddressEqual(sourceAsset.address, config.sourceAsset.address)\n );\n };\n}\n"],"mappings":"2FASA,SAAgB,EAAsB,CAAE,UAA2E,CACjH,OAAQ,CAAE,gBAAe,gBAAe,cAAa,iBAEjD,IAAkB,EAAO,aACzB,IAAkB,EAAO,aACzB,EAAY,OAAS,EAAU,OAC/B,EAAY,OAAS,EAAU,QAC/B,EAAe,EAAY,QAAS,EAAO,YAAY,QAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../errors.cjs`),t=require(`../../../_utils.cjs`),n=require(`../../../_evm-gas.cjs`);let r=require(`viem`);const i=60000n,a=300000n,o=({config:o})=>async({amountIn:s,fromAddress:c,sourceChain:l},u)=>{if(!(0,r.isAddress)(c))throw new e.InvalidParamsError(e.ErrorReason.INVALID_PARAMS,`Invalid fromAddress: ${c}`);let d=t.getEvmClientForChain({chain:l}),f=await d.readContract({address:o.sourceAsset.address,abi:r.erc20Abi,functionName:`allowance`,args:[c,o.adapterAddress]})<s,p=t.applyFeeUnitsBpsMargin(f?i+a:a,u?.feeUnitsMarginBps),m=await n.estimateEvmFeesPerGas(d,l,u?.overrides?.feeRateTier),h=u?.overrides?.maxFeePerGas??m.maxFeePerGas,g=u?.overrides?.maxPriorityFeePerGas??m.maxPriorityFeePerGas,_=p*h;return{asset:l.networkToken,totalFee:_,totalUpfrontFee:_,meta:{approvalFee:f?i*h:void 0,maxFeePerGas:h,maxPriorityFeePerGas:g}}};exports.estimateNativeFeeFactory=o;
|
|
2
|
+
//# sourceMappingURL=estimate-native-fee.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimate-native-fee.cjs","names":["InvalidParamsError","ErrorReason","getEvmClientForChain","erc20Abi","applyFeeUnitsBpsMargin","estimateEvmFeesPerGas"],"sources":["../../../../../src/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.ts"],"sourcesContent":["import { erc20Abi, isAddress } from 'viem';\nimport type { BtcbToBtcConfig } from '../../types';\nimport { ErrorReason, InvalidParamsError } from '../../../../errors';\nimport type { TransferService } from '../../../../types/service';\nimport { applyFeeUnitsBpsMargin, getEvmClientForChain } from '../../../_utils';\nimport { estimateEvmFeesPerGas } from '../../../_evm-gas';\n\n// Hardcoded gas estimates for BTCb redemption on Avalanche.\n// These are approximations used for UI display only - DO NOT use as gasLimit.\n// Based on typical ERC20 approval and AssetRouter.redeemForBtc call costs.\nexport const AVAX_APPROVAL_GAS_ESTIMATE = 60_000n; // Standard ERC20 approval (~55k + buffer)\nexport const AVAX_REDEEM_GAS_ESTIMATE = 300_000n; // AssetRouter.redeemForBtc (~250k + buffer)\n\nexport interface EstimateNativeFeeFactoryOptions {\n config: BtcbToBtcConfig;\n}\n\n/**\n * Estimates gas for BTCb-to-BTC redemption on Avalanche.\n *\n * The redemption consists of up to two transactions:\n * 1. Token spend approval to the adapter contract (if needed)\n * 2. Redeem call via the AssetRouter contract\n *\n * Since the redeem needs the approval to be complete, we can't call estimateGas()\n * on the actual contract. Instead, we use hardcoded estimates.\n */\nexport const estimateNativeFeeFactory = ({\n config,\n}: EstimateNativeFeeFactoryOptions): TransferService['estimateNativeFee'] => {\n return async ({ amountIn, fromAddress, sourceChain }, options) => {\n if (!isAddress(fromAddress)) {\n throw new InvalidParamsError(ErrorReason.INVALID_PARAMS, `Invalid fromAddress: ${fromAddress}`);\n }\n\n const client = getEvmClientForChain({ chain: sourceChain });\n\n // Check if approval is already granted to the adapter\n const allowance = await client.readContract({\n address: config.sourceAsset.address,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [fromAddress, config.adapterAddress],\n });\n\n const needsApproval = allowance < amountIn;\n\n const totalGas = needsApproval ? AVAX_APPROVAL_GAS_ESTIMATE + AVAX_REDEEM_GAS_ESTIMATE : AVAX_REDEEM_GAS_ESTIMATE;\n\n const gasWithMargin = applyFeeUnitsBpsMargin(totalGas, options?.feeUnitsMarginBps);\n\n const fees = await estimateEvmFeesPerGas(client, sourceChain, options?.overrides?.feeRateTier);\n\n const maxFeePerGas = options?.overrides?.maxFeePerGas ?? fees.maxFeePerGas;\n const maxPriorityFeePerGas = options?.overrides?.maxPriorityFeePerGas ?? fees.maxPriorityFeePerGas;\n\n const totalFee = gasWithMargin * maxFeePerGas;\n\n return {\n asset: sourceChain.networkToken,\n totalFee,\n totalUpfrontFee: totalFee,\n meta: {\n approvalFee: needsApproval ? AVAX_APPROVAL_GAS_ESTIMATE * maxFeePerGas : undefined,\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n };\n};\n"],"mappings":"0LAUA,MAAa,EAA6B,OAC7B,EAA2B,QAgB3B,GAA4B,CACvC,YAEO,MAAO,CAAE,WAAU,cAAa,eAAe,IAAY,CAChE,GAAI,EAAA,EAAA,EAAA,WAAW,EAAY,CACzB,MAAM,IAAIA,EAAAA,mBAAmBC,EAAAA,YAAY,eAAgB,wBAAwB,IAAc,CAGjG,IAAM,EAASC,EAAAA,qBAAqB,CAAE,MAAO,EAAa,CAAC,CAUrD,EAPY,MAAM,EAAO,aAAa,CAC1C,QAAS,EAAO,YAAY,QAC5B,IAAKC,EAAAA,SACL,aAAc,YACd,KAAM,CAAC,EAAa,EAAO,eAAe,CAC3C,CAAC,CAEgC,EAI5B,EAAgBC,EAAAA,uBAFL,EAAgB,EAA6B,EAA2B,EAElC,GAAS,kBAAkB,CAE5E,EAAO,MAAMC,EAAAA,sBAAsB,EAAQ,EAAa,GAAS,WAAW,YAAY,CAExF,EAAe,GAAS,WAAW,cAAgB,EAAK,aACxD,EAAuB,GAAS,WAAW,sBAAwB,EAAK,qBAExE,EAAW,EAAgB,EAEjC,MAAO,CACL,MAAO,EAAY,aACnB,WACA,gBAAiB,EACjB,KAAM,CACJ,YAAa,EAAgB,EAA6B,EAAe,IAAA,GACzE,eACA,uBACD,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorReason as e,InvalidParamsError as t}from"../../../../errors.js";import{applyFeeUnitsBpsMargin as n,getEvmClientForChain as r}from"../../../_utils.js";import{estimateEvmFeesPerGas as i}from"../../../_evm-gas.js";import{erc20Abi as a,isAddress as o}from"viem";const s=60000n,c=300000n,l=({config:l})=>async({amountIn:u,fromAddress:d,sourceChain:f},p)=>{if(!o(d))throw new t(e.INVALID_PARAMS,`Invalid fromAddress: ${d}`);let m=r({chain:f}),h=await m.readContract({address:l.sourceAsset.address,abi:a,functionName:`allowance`,args:[d,l.adapterAddress]})<u,g=n(h?s+c:c,p?.feeUnitsMarginBps),_=await i(m,f,p?.overrides?.feeRateTier),v=p?.overrides?.maxFeePerGas??_.maxFeePerGas,y=p?.overrides?.maxPriorityFeePerGas??_.maxPriorityFeePerGas,b=g*v;return{asset:f.networkToken,totalFee:b,totalUpfrontFee:b,meta:{approvalFee:h?s*v:void 0,maxFeePerGas:v,maxPriorityFeePerGas:y}}};export{l as estimateNativeFeeFactory};
|
|
2
|
+
//# sourceMappingURL=estimate-native-fee.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimate-native-fee.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.ts"],"sourcesContent":["import { erc20Abi, isAddress } from 'viem';\nimport type { BtcbToBtcConfig } from '../../types';\nimport { ErrorReason, InvalidParamsError } from '../../../../errors';\nimport type { TransferService } from '../../../../types/service';\nimport { applyFeeUnitsBpsMargin, getEvmClientForChain } from '../../../_utils';\nimport { estimateEvmFeesPerGas } from '../../../_evm-gas';\n\n// Hardcoded gas estimates for BTCb redemption on Avalanche.\n// These are approximations used for UI display only - DO NOT use as gasLimit.\n// Based on typical ERC20 approval and AssetRouter.redeemForBtc call costs.\nexport const AVAX_APPROVAL_GAS_ESTIMATE = 60_000n; // Standard ERC20 approval (~55k + buffer)\nexport const AVAX_REDEEM_GAS_ESTIMATE = 300_000n; // AssetRouter.redeemForBtc (~250k + buffer)\n\nexport interface EstimateNativeFeeFactoryOptions {\n config: BtcbToBtcConfig;\n}\n\n/**\n * Estimates gas for BTCb-to-BTC redemption on Avalanche.\n *\n * The redemption consists of up to two transactions:\n * 1. Token spend approval to the adapter contract (if needed)\n * 2. Redeem call via the AssetRouter contract\n *\n * Since the redeem needs the approval to be complete, we can't call estimateGas()\n * on the actual contract. Instead, we use hardcoded estimates.\n */\nexport const estimateNativeFeeFactory = ({\n config,\n}: EstimateNativeFeeFactoryOptions): TransferService['estimateNativeFee'] => {\n return async ({ amountIn, fromAddress, sourceChain }, options) => {\n if (!isAddress(fromAddress)) {\n throw new InvalidParamsError(ErrorReason.INVALID_PARAMS, `Invalid fromAddress: ${fromAddress}`);\n }\n\n const client = getEvmClientForChain({ chain: sourceChain });\n\n // Check if approval is already granted to the adapter\n const allowance = await client.readContract({\n address: config.sourceAsset.address,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [fromAddress, config.adapterAddress],\n });\n\n const needsApproval = allowance < amountIn;\n\n const totalGas = needsApproval ? AVAX_APPROVAL_GAS_ESTIMATE + AVAX_REDEEM_GAS_ESTIMATE : AVAX_REDEEM_GAS_ESTIMATE;\n\n const gasWithMargin = applyFeeUnitsBpsMargin(totalGas, options?.feeUnitsMarginBps);\n\n const fees = await estimateEvmFeesPerGas(client, sourceChain, options?.overrides?.feeRateTier);\n\n const maxFeePerGas = options?.overrides?.maxFeePerGas ?? fees.maxFeePerGas;\n const maxPriorityFeePerGas = options?.overrides?.maxPriorityFeePerGas ?? fees.maxPriorityFeePerGas;\n\n const totalFee = gasWithMargin * maxFeePerGas;\n\n return {\n asset: sourceChain.networkToken,\n totalFee,\n totalUpfrontFee: totalFee,\n meta: {\n approvalFee: needsApproval ? AVAX_APPROVAL_GAS_ESTIMATE * maxFeePerGas : undefined,\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n };\n};\n"],"mappings":"8QAUA,MAAa,EAA6B,OAC7B,EAA2B,QAgB3B,GAA4B,CACvC,YAEO,MAAO,CAAE,WAAU,cAAa,eAAe,IAAY,CAChE,GAAI,CAAC,EAAU,EAAY,CACzB,MAAM,IAAI,EAAmB,EAAY,eAAgB,wBAAwB,IAAc,CAGjG,IAAM,EAAS,EAAqB,CAAE,MAAO,EAAa,CAAC,CAUrD,EAPY,MAAM,EAAO,aAAa,CAC1C,QAAS,EAAO,YAAY,QAC5B,IAAK,EACL,aAAc,YACd,KAAM,CAAC,EAAa,EAAO,eAAe,CAC3C,CAAC,CAEgC,EAI5B,EAAgB,EAFL,EAAgB,EAA6B,EAA2B,EAElC,GAAS,kBAAkB,CAE5E,EAAO,MAAM,EAAsB,EAAQ,EAAa,GAAS,WAAW,YAAY,CAExF,EAAe,GAAS,WAAW,cAAgB,EAAK,aACxD,EAAuB,GAAS,WAAW,sBAAwB,EAAK,qBAExE,EAAW,EAAgB,EAEjC,MAAO,CACL,MAAO,EAAY,aACnB,WACA,gBAAiB,EACjB,KAAM,CACJ,YAAa,EAAgB,EAA6B,EAAe,IAAA,GACzE,eACA,uBACD,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../../constants.cjs`);function t({config:{sourceAsset:t,sourceChain:n,targetChain:r}}){return async()=>({[n]:[{...t,destinations:{[r]:{address:e.TokenType.NATIVE,bridgeProviders:[e.ServiceType.LOMBARD_BTCB_TO_BTC]}},swapProviders:[]}]})}exports.getAssetsFactory=t;
|
|
2
|
+
//# sourceMappingURL=get-assets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-assets.cjs","names":["TokenType","ServiceType"],"sources":["../../../../../src/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.ts"],"sourcesContent":["import type { BtcbToBtcConfig } from '../../types';\nimport { ServiceType, TokenType } from '../../../../constants';\nimport type { TransferService } from '../../../../types/service';\n\nexport interface GetAssetsFactoryOptions {\n config: BtcbToBtcConfig;\n}\n\nexport function getAssetsFactory({\n config: { sourceAsset, sourceChain, targetChain },\n}: GetAssetsFactoryOptions): TransferService['getAssets'] {\n return async () => {\n return {\n [sourceChain]: [\n {\n ...sourceAsset,\n destinations: {\n [targetChain]: {\n // This service maps to a native token, so we use TokenType.NATIVE as the \"address\"\n address: TokenType.NATIVE,\n bridgeProviders: [ServiceType.LOMBARD_BTCB_TO_BTC],\n },\n },\n swapProviders: [],\n },\n ],\n };\n };\n}\n"],"mappings":"6CAQA,SAAgB,EAAiB,CAC/B,OAAQ,CAAE,cAAa,cAAa,gBACoB,CACxD,OAAO,UACE,EACJ,GAAc,CACb,CACE,GAAG,EACH,aAAc,EACX,GAAc,CAEb,QAASA,EAAAA,UAAU,OACnB,gBAAiB,CAACC,EAAAA,YAAY,oBAAoB,CACnD,CACF,CACD,cAAe,EAAE,CAClB,CACF,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ServiceType as e,TokenType as t}from"../../../../constants.js";function n({config:{sourceAsset:n,sourceChain:r,targetChain:i}}){return async()=>({[r]:[{...n,destinations:{[i]:{address:t.NATIVE,bridgeProviders:[e.LOMBARD_BTCB_TO_BTC]}},swapProviders:[]}]})}export{n as getAssetsFactory};
|
|
2
|
+
//# sourceMappingURL=get-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-assets.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.ts"],"sourcesContent":["import type { BtcbToBtcConfig } from '../../types';\nimport { ServiceType, TokenType } from '../../../../constants';\nimport type { TransferService } from '../../../../types/service';\n\nexport interface GetAssetsFactoryOptions {\n config: BtcbToBtcConfig;\n}\n\nexport function getAssetsFactory({\n config: { sourceAsset, sourceChain, targetChain },\n}: GetAssetsFactoryOptions): TransferService['getAssets'] {\n return async () => {\n return {\n [sourceChain]: [\n {\n ...sourceAsset,\n destinations: {\n [targetChain]: {\n // This service maps to a native token, so we use TokenType.NATIVE as the \"address\"\n address: TokenType.NATIVE,\n bridgeProviders: [ServiceType.LOMBARD_BTCB_TO_BTC],\n },\n },\n swapProviders: [],\n },\n ],\n };\n };\n}\n"],"mappings":"sEAQA,SAAgB,EAAiB,CAC/B,OAAQ,CAAE,cAAa,cAAa,gBACoB,CACxD,OAAO,UACE,EACJ,GAAc,CACb,CACE,GAAG,EACH,aAAc,EACX,GAAc,CAEb,QAAS,EAAU,OACnB,gBAAiB,CAAC,EAAY,oBAAoB,CACnD,CACF,CACD,cAAe,EAAE,CAClB,CACF,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../../constants.cjs`);function t({config:t}){return async({sourceAsset:n,sourceChainId:r,targetChainId:i})=>r!==t.sourceChain||i!==t.targetChain||n.type!==e.TokenType.ERC20||n.address.toLowerCase()!==t.sourceAsset.address.toLowerCase()?[]:[{...t.targetAsset,bridgeProviders:[e.ServiceType.LOMBARD_BTCB_TO_BTC]}]}exports.getBridgeableAssetsFactory=t;
|
|
2
|
+
//# sourceMappingURL=get-bridgeable-assets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-bridgeable-assets.cjs","names":["TokenType","ServiceType"],"sources":["../../../../../src/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../../types/service';\nimport type { BridgeableUiAsset } from '../../../../types/asset';\nimport type { BtcbToBtcConfig } from '../../types';\n\nexport function getBridgeableAssetsFactory({\n config,\n}: {\n config: BtcbToBtcConfig;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (\n sourceChainId !== config.sourceChain ||\n targetChainId !== config.targetChain ||\n sourceAsset.type !== TokenType.ERC20 ||\n sourceAsset.address.toLowerCase() !== config.sourceAsset.address.toLowerCase()\n ) {\n return [];\n }\n return [{ ...config.targetAsset, bridgeProviders: [ServiceType.LOMBARD_BTCB_TO_BTC] }];\n };\n}\n"],"mappings":"6CAKA,SAAgB,EAA2B,CACzC,UAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBAGE,IAAkB,EAAO,aACzB,IAAkB,EAAO,aACzB,EAAY,OAASA,EAAAA,UAAU,OAC/B,EAAY,QAAQ,aAAa,GAAK,EAAO,YAAY,QAAQ,aAAa,CAEvE,EAAE,CAEJ,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAACC,EAAAA,YAAY,oBAAoB,CAAE,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ServiceType as e,TokenType as t}from"../../../../constants.js";function n({config:n}){return async({sourceAsset:r,sourceChainId:i,targetChainId:a})=>i!==n.sourceChain||a!==n.targetChain||r.type!==t.ERC20||r.address.toLowerCase()!==n.sourceAsset.address.toLowerCase()?[]:[{...n.targetAsset,bridgeProviders:[e.LOMBARD_BTCB_TO_BTC]}]}export{n as getBridgeableAssetsFactory};
|
|
2
|
+
//# sourceMappingURL=get-bridgeable-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-bridgeable-assets.js","names":[],"sources":["../../../../../src/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../../types/service';\nimport type { BridgeableUiAsset } from '../../../../types/asset';\nimport type { BtcbToBtcConfig } from '../../types';\n\nexport function getBridgeableAssetsFactory({\n config,\n}: {\n config: BtcbToBtcConfig;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (\n sourceChainId !== config.sourceChain ||\n targetChainId !== config.targetChain ||\n sourceAsset.type !== TokenType.ERC20 ||\n sourceAsset.address.toLowerCase() !== config.sourceAsset.address.toLowerCase()\n ) {\n return [];\n }\n return [{ ...config.targetAsset, bridgeProviders: [ServiceType.LOMBARD_BTCB_TO_BTC] }];\n };\n}\n"],"mappings":"sEAKA,SAAgB,EAA2B,CACzC,UAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBAGE,IAAkB,EAAO,aACzB,IAAkB,EAAO,aACzB,EAAY,OAAS,EAAU,OAC/B,EAAY,QAAQ,aAAa,GAAK,EAAO,YAAY,QAAQ,aAAa,CAEvE,EAAE,CAEJ,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAAC,EAAY,oBAAoB,CAAE,CAAC"}
|