@avalabs/fusion-sdk 0.0.0-avalanche-evm-bugs-20260313162813
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 +19 -0
- package/dist/mod.d.ts +19 -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/_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 +140 -0
- package/dist/types/quote.d.ts +140 -0
- package/dist/types/service.d.cts +243 -0
- package/dist/types/service.d.ts +243 -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/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":"quoter.js","names":[],"sources":["../../src/quoter/quoter.ts"],"sourcesContent":["import { z } from 'zod';\nimport type {\n Quote,\n QuoterDoneReason,\n QuoterEventHandler,\n QuoterInterface,\n QuoterProps,\n QuotesTuple,\n ServiceQuoteEventHandler,\n} from '../types/quote';\nimport type { TransferService } from '../types/service';\nimport { earliestExpirationForService, isQuoteExpired, pruneExpiredQuotes, sortQuotes, upsertQuote } from './_utils';\nimport {\n QUOTER_DEFAULT_PRUNE_INTERVAL_MS,\n QUOTER_DEFAULT_REFRESH_BUFFER_SECONDS,\n QUOTER_EMPTY_RETRY_BASE_DELAY_MS,\n QUOTER_EMPTY_RETRY_MAX_DELAY_MS,\n} from './constants';\nimport { TokenType } from '../constants';\nimport { isNativeAsset } from '../type-guards';\nimport { isAddressEqual } from 'viem';\n\n/**\n * Function that returns the current UNIX time in seconds.\n * Injected for deterministic testing.\n */\nexport type Clock = () => number;\n\n/**\n * Options for constructing a Quoter instance.\n *\n * These options tune how often quote state is maintained and when services are\n * proactively restarted before quote expiry.\n */\nexport interface QuoterOptions {\n /** Clock function returning current time in seconds (defaults to Date.now()/1000). */\n readonly clock?: Clock;\n /** Interval for pruning expired quotes (milliseconds).\n *\n * @default 1_000\n */\n readonly pruneIntervalMs?: number;\n /**\n * Amount of seconds to pre-buffer a stream restart before the earliest service quote\n * expiration. Helps ensure continuity before actual expiry is reached.\n *\n * @default 5\n */\n readonly refreshBufferSeconds?: number;\n}\n\n/**\n * Quoter orchestrates quote streaming across multiple transfer services and emits a unified event stream.\n *\n * High-level lifecycle:\n * - Idle until first subscriber.\n * - On first subscribe, starts all eligible services.\n * - Collects and ranks active quotes, pruning expired ones over time.\n * - Completes when explicitly unsubscribed (last subscriber), when no service is eligible,\n * or when all eligible services finish without producing any quote (`no-quotes`).\n *\n * Event model:\n * - Service `quote` -> Quoter upserts quote, recomputes best quote, emits `quote`.\n * - Service `error` -> Quoter emits `error` (non-terminal by itself).\n * - Service `done` -> Quoter marks that service attempt as completed and evaluates retry/complete rules.\n *\n * Retry/refresh behavior:\n * - Refresh: services that have active quotes are restarted shortly before the earliest quote expires.\n * - Retry: services that complete with no quote and no error are only retried after the quoter has\n * already observed at least one quote from any service in this session.\n *\n * This design keeps first-pass \"no quotes anywhere\" terminal and fast, while still allowing services\n * like Markr to be retried in sessions where other providers are returning quotes.\n */\nexport class Quoter implements QuoterInterface {\n private readonly clock: Clock;\n private readonly props: QuoterProps;\n private readonly pruneIntervalMs: number;\n private readonly transferServices: readonly TransferService[];\n private readonly refreshBufferSeconds: number;\n\n private quotes: Quote[] = [];\n private subscribers: Set<QuoterEventHandler> = new Set();\n private started = false;\n private done = false;\n private pruneTimerId: ReturnType<typeof setInterval> | null = null;\n private lastBestId: string | null = null;\n private hasReceivedAnyQuote = false;\n\n public readonly id: string = crypto.randomUUID();\n\n /**\n * Per-service runtime state for the active quote session.\n *\n * This tracks whether a service has completed, errored, produced quotes,\n * and any pending timers used for retry/refresh orchestration.\n */\n private serviceState: Map<\n TransferService['type'],\n {\n cancel: () => void;\n done: boolean;\n hasErrored: boolean;\n hasReturnedQuote: boolean;\n retryAttempt: number;\n retryTimer: ReturnType<typeof setTimeout> | null;\n refreshTimer: ReturnType<typeof setTimeout> | null;\n refreshAtSeconds: number | null;\n }\n > = new Map();\n\n /**\n * Create a new Quoter instance.\n *\n * @param props Quoting request parameters shared across all services.\n * @param transferServices Candidate services; eligibility is resolved at `start()` time.\n * @param options Optional runtime tuning for pruning and refresh behavior.\n */\n constructor(props: QuoterProps, transferServices: readonly TransferService[], options: QuoterOptions = {}) {\n this.clock = options.clock ?? (() => Math.floor(Date.now() / 1_000));\n this.props = props;\n this.pruneIntervalMs = options.pruneIntervalMs ?? QUOTER_DEFAULT_PRUNE_INTERVAL_MS;\n this.transferServices = transferServices;\n this.refreshBufferSeconds = options.refreshBufferSeconds ?? QUOTER_DEFAULT_REFRESH_BUFFER_SECONDS;\n }\n\n /**\n * Get the current best quote and all active quotes (sorted by desirability).\n */\n public getQuotes(): QuotesTuple {\n const now = this.clock();\n const active = pruneExpiredQuotes({ quotes: this.quotes, nowSeconds: now });\n const sorted = sortQuotes(active);\n const best = sorted[0] ?? null;\n\n return [best, sorted];\n }\n\n /**\n * Subscribe for quoter events.\n *\n * First subscriber lazily starts orchestration.\n * Last subscriber triggers terminal completion with reason `unsubscribed`.\n *\n * @returns Unsubscribe function (idempotent).\n */\n public subscribe(handler: QuoterEventHandler): () => void {\n this.subscribers.add(handler);\n let unsubscribed = false;\n\n if (!this.started) {\n this.start();\n }\n\n return () => {\n if (unsubscribed) {\n return;\n }\n unsubscribed = true;\n\n const wasLastSubscriber = this.subscribers.size === 1 && this.subscribers.has(handler);\n if (wasLastSubscriber) {\n this.complete('unsubscribed');\n return;\n }\n\n this.subscribers.delete(handler);\n };\n }\n\n // ----- Internal orchestration -----\n\n /**\n * Start a fresh quote session.\n *\n * Resets session-local state, validates basic request viability,\n * starts streams for eligible services, and begins prune ticks.\n */\n private start(): void {\n this.started = true;\n this.done = false;\n this.quotes = [];\n this.lastBestId = null;\n this.hasReceivedAnyQuote = false;\n\n // Same-chain quotes for the *same* asset are not a valid transfer scenario.\n if (isInvalidSameChainQuoteRequest(this.props)) {\n this.complete('no-eligible-services');\n return;\n }\n\n let hasEligibleService = false;\n\n // Start streams for eligible services\n for (const svc of this.transferServices) {\n const eligible = svc.analyzeSupport({\n sourceAsset: this.props.sourceAsset,\n sourceChainId: this.props.sourceChain.chainId,\n targetAsset: this.props.targetAsset,\n targetChainId: this.props.targetChain.chainId,\n });\n\n if (!eligible) continue;\n hasEligibleService = true;\n\n this.startStreamForService(svc);\n }\n\n if (!hasEligibleService) {\n this.complete('no-eligible-services');\n return;\n }\n\n // Start periodic prune\n this.pruneTimerId = setInterval(() => this.onPruneTick(), this.pruneIntervalMs);\n }\n\n /**\n * Stop all streams and timers.\n * Quotes are retained for snapshot access via getQuotes(), though they\n * can still be pruned due to expiration.\n */\n private stop(): void {\n this.started = false;\n\n if (this.pruneTimerId) {\n clearInterval(this.pruneTimerId);\n this.pruneTimerId = null;\n }\n\n for (const [type, state] of this.serviceState) {\n try {\n state.cancel();\n } catch {\n /* ignore */\n }\n\n if (state.refreshTimer) {\n clearTimeout(state.refreshTimer);\n }\n\n if (state.retryTimer) {\n clearTimeout(state.retryTimer);\n }\n\n this.serviceState.set(type, {\n cancel: () => {},\n done: false,\n hasErrored: false,\n hasReturnedQuote: false,\n retryAttempt: 0,\n retryTimer: null,\n refreshTimer: null,\n refreshAtSeconds: null,\n });\n }\n }\n\n /**\n * Begin or restart streaming for a specific service.\n *\n * Any previous stream/timers for that service are canceled before starting a new attempt.\n */\n private startStreamForService(svc: TransferService): void {\n // Clean up any existing stream and refresh timer\n const existing = this.serviceState.get(svc.type);\n\n if (existing) {\n try {\n existing.cancel();\n } catch {\n /* ignore */\n }\n\n if (existing.refreshTimer) clearTimeout(existing.refreshTimer);\n if (existing.retryTimer) clearTimeout(existing.retryTimer);\n }\n\n const handler = this.makeServiceHandler(svc.type);\n const { cancel } = svc.streamQuotes(this.props, handler);\n\n this.serviceState.set(svc.type, {\n cancel,\n done: false,\n hasErrored: false,\n hasReturnedQuote: false,\n retryAttempt: existing?.retryAttempt ?? 0,\n retryTimer: null,\n refreshTimer: null,\n refreshAtSeconds: null,\n });\n }\n\n /**\n * Create the service-scoped event handler consumed by `TransferService.streamQuotes`.\n *\n * The handler enforces service/quote consistency and translates service events into\n * quoter state transitions.\n */\n private makeServiceHandler(serviceType: TransferService['type']): ServiceQuoteEventHandler {\n return (event, ...args) => {\n // Ignore any service events once stopped to prevent post-stop mutations.\n if (!this.started) {\n return;\n }\n if (event === 'quote') {\n const maybeQuote = args[0];\n if (isQuoteValue(maybeQuote)) {\n // Enforce the quote belongs to the emitting service\n if (maybeQuote.serviceType !== serviceType) {\n // Ignore quotes mismatched to service; defensive\n return;\n }\n const state = this.serviceState.get(serviceType);\n if (state) {\n state.hasReturnedQuote = true;\n }\n this.onIncomingQuote(maybeQuote);\n this.scheduleServiceRefresh(serviceType);\n }\n\n return;\n }\n if (event === 'done') {\n this.onServiceDone(serviceType);\n\n return;\n }\n if (event === 'error') {\n const state = this.serviceState.get(serviceType);\n if (state) {\n state.hasErrored = true;\n }\n const maybeErr = args[0];\n if (maybeErr instanceof Error) {\n this.emitError(maybeErr);\n }\n }\n };\n }\n\n /**\n * Handle an incoming quote event.\n *\n * Expired quotes are ignored. Valid quotes are upserted into active state,\n * then sorted/pruned and emitted to subscribers.\n */\n private onIncomingQuote(quote: Quote): void {\n const now = this.clock();\n\n if (isQuoteExpired({ quote, nowSeconds: now })) {\n return;\n }\n\n this.hasReceivedAnyQuote = true;\n\n this.resetRetryForService(quote.serviceType);\n\n this.quotes = sortQuotes(pruneExpiredQuotes({ quotes: upsertQuote(this.quotes, quote), nowSeconds: now }));\n\n // Always emit on every incoming quote\n const best = this.quotes[0];\n if (best) {\n this.lastBestId = best.id;\n this.emitQuote({ bestQuote: best, quote, quotes: this.quotes });\n }\n }\n\n private resetRetryForService(serviceType: TransferService['type']): void {\n const state = this.serviceState.get(serviceType);\n\n if (!state) {\n return;\n }\n\n state.retryAttempt = 0;\n if (state.retryTimer) {\n clearTimeout(state.retryTimer);\n state.retryTimer = null;\n }\n }\n\n /**\n * Schedule a retry attempt for a service using exponential backoff.\n *\n * This is used only for quote-less successful completions once the overall session\n * has already produced at least one quote from some service.\n */\n private scheduleServiceRetry(serviceType: TransferService['type']): void {\n const state = this.serviceState.get(serviceType);\n\n if (!state) {\n return;\n }\n\n if (state.retryTimer) {\n clearTimeout(state.retryTimer);\n state.retryTimer = null;\n }\n\n const delayMs = Math.min(\n QUOTER_EMPTY_RETRY_MAX_DELAY_MS,\n QUOTER_EMPTY_RETRY_BASE_DELAY_MS * 2 ** state.retryAttempt,\n );\n state.retryAttempt += 1;\n\n state.retryTimer = setTimeout(\n () => {\n const current = this.serviceState.get(serviceType);\n if (current) {\n current.retryTimer = null;\n }\n\n if (!this.started) {\n return;\n }\n\n const svc = this.transferServices.find((s) => s.type === serviceType);\n if (svc) {\n this.startStreamForService(svc);\n }\n },\n Math.max(0, delayMs),\n );\n }\n\n /**\n * Handle service completion (`done`).\n *\n * A completion may schedule:\n * - refresh (if the service has active quotes), and/or\n * - retry (quote-less/non-error completion, but only after any quote has existed in session).\n *\n * Then evaluates whether the full quoter can complete with `no-quotes`.\n */\n private onServiceDone(serviceType: TransferService['type']): void {\n const state = this.serviceState.get(serviceType);\n\n if (!state) {\n return;\n }\n\n state.done = true;\n this.scheduleServiceRefresh(serviceType);\n\n if (this.hasReceivedAnyQuote && !state.hasErrored && !state.hasReturnedQuote) {\n this.scheduleServiceRetry(serviceType);\n }\n\n this.maybeCompleteNoQuotes();\n }\n\n /**\n * Complete with `no-quotes` when every eligible service has finished and\n * no quote was ever observed during this session.\n */\n private maybeCompleteNoQuotes(): void {\n if (!this.started || this.done || this.hasReceivedAnyQuote || this.serviceState.size === 0) {\n return;\n }\n\n const allServicesDone = [...this.serviceState.values()].every((state) => state.done);\n\n if (allServicesDone) {\n this.complete('no-quotes');\n }\n }\n\n /**\n * Finalize the quoter session and broadcast terminal reason exactly once.\n */\n private complete(reason: QuoterDoneReason): void {\n if (this.done) {\n return;\n }\n\n this.done = true;\n this.stop();\n\n const handlers = [...this.subscribers];\n this.subscribers.clear();\n\n for (const handler of handlers) {\n handler('done', { reason });\n }\n }\n\n /** Periodic prune tick to evict expired quotes and emit best changes. */\n private onPruneTick(): void {\n const now = this.clock();\n const pruned = pruneExpiredQuotes({ quotes: this.quotes, nowSeconds: now });\n\n if (pruned.length !== this.quotes.length) {\n this.quotes = sortQuotes(pruned);\n const best = this.quotes[0] ?? null;\n const bestId = best ? best.id : null;\n\n if (best && bestId !== this.lastBestId) {\n this.lastBestId = bestId;\n this.emitQuote({ bestQuote: best, quote: best, quotes: this.quotes });\n } else if (!best) {\n this.lastBestId = null;\n }\n }\n\n // Re-evaluate refresh scheduling for all services on prune tick\n for (const svc of this.transferServices) {\n if (this.serviceState.has(svc.type)) {\n this.scheduleServiceRefresh(svc.type);\n }\n }\n }\n\n /** Schedule a refresh (restart) of streaming for the service at its earliest quote expiration. */\n private scheduleServiceRefresh(serviceType: TransferService['type']): void {\n const state = this.serviceState.get(serviceType);\n\n if (!state) return;\n\n const now = this.clock();\n const earliest = earliestExpirationForService({ quotes: this.quotes, serviceType, nowSeconds: now });\n\n if (earliest === null) {\n // No quotes -> clear any pending refresh\n if (state.refreshTimer) {\n clearTimeout(state.refreshTimer);\n state.refreshTimer = null;\n }\n state.refreshAtSeconds = null;\n return;\n }\n\n // Only reschedule if earlier than currently scheduled or no timer\n const targetAt = Math.max(0, earliest - this.refreshBufferSeconds);\n\n // If target time has already passed, do not schedule another refresh here.\n if (targetAt <= now) {\n return;\n }\n\n // Reschedule only when the desired refresh time changes (earlier OR later).\n // We key refresh off the soonest-expiring active quote for this service.\n if (state.refreshAtSeconds === targetAt && state.refreshTimer) {\n return;\n }\n\n if (state.refreshTimer) {\n clearTimeout(state.refreshTimer);\n }\n\n const delayMs = Math.max(0, (targetAt - now) * 1_000);\n state.refreshAtSeconds = targetAt;\n state.refreshTimer = setTimeout(() => {\n // Clear timer/marker before restarting to avoid stale state if restart fails.\n const current = this.serviceState.get(serviceType);\n if (current) {\n current.refreshTimer = null;\n current.refreshAtSeconds = null;\n }\n\n // Restart stream and clear timer/marker\n const svc = this.transferServices.find((s) => s.type === serviceType);\n\n if (svc) {\n this.startStreamForService(svc);\n }\n }, delayMs);\n }\n\n // ----- Emission helpers -----\n /** Emit a quote event to all subscribers. */\n private emitQuote(payload: { bestQuote: Quote; quote: Quote; quotes: readonly Quote[] }): void {\n for (const handler of this.subscribers) {\n handler('quote', payload);\n }\n }\n\n /** Emit an error event to all subscribers. */\n private emitError(error: Error): void {\n for (const handler of this.subscribers) {\n handler('error', error);\n }\n }\n}\n\n/**\n * Zod schema to validate the minimal Quote fields used for runtime gating.\n *\n * This is a simple schema, and is not a fully safe runtime validate for Quote.\n * That isn't necessary here since we only need to verify basic structure before\n * using the quote in internal logic.\n *\n * @internal\n */\nconst QuoteSchema = z.object({\n id: z.string(),\n expiresAt: z.number().int().nonnegative(),\n amountOut: z.bigint().nonnegative(),\n amountIn: z.bigint().nonnegative(),\n serviceType: z.string(),\n});\n\nfunction isInvalidSameChainQuoteRequest(props: QuoterProps): boolean {\n const { sourceAsset, sourceChain, targetAsset, targetChain } = props;\n\n if (sourceChain.chainId !== targetChain.chainId) {\n return false;\n }\n\n // Native -> native on the same chain is a no-op.\n if (isNativeAsset(sourceAsset) && isNativeAsset(targetAsset)) {\n return true;\n }\n\n // If token types differ, it's potentially a swap on the same chain.\n if (sourceAsset.type !== targetAsset.type) {\n return false;\n }\n\n // Same token type and address on the same chain is a no-op.\n if (sourceAsset.type === TokenType.ERC20 && targetAsset.type === TokenType.ERC20) {\n return isAddressEqual(sourceAsset.address, targetAsset.address);\n }\n\n if (sourceAsset.type === TokenType.SPL && targetAsset.type === TokenType.SPL) {\n return sourceAsset.address === targetAsset.address;\n }\n\n return false;\n}\n\nfunction isQuoteValue(value: unknown): value is Quote {\n const result = QuoteSchema.safeParse(value);\n\n return result.success;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./constants.cjs`),t=require(`./errors.cjs`),n=require(`./type-guards.cjs`),r=require(`./quoter/quoter.cjs`),i=require(`./utils/asset-id.cjs`),a=e=>{if(!n.isEnvironment(e))throw new t.ServiceInitializationError(t.ErrorReason.ENVIRONMENT_NOT_SUPPORTED)},o=e=>{if(e.length===0)throw new t.ServiceInitializationError(`No service initializers provided.`);if(e.some(e=>!n.isServiceInitializer(e)))throw new t.ServiceInitializationError(`One or more service initializers are invalid.`);let r=new Set;for(let n of e){if(r.has(n.type))throw new t.ServiceInitializationError(t.ErrorReason.DUPLICATE_SERVICE_INITIALIZATION,`Service type "${n.type}" has been initialized more than once.`);r.add(n.type)}},s=async({environment:n,serviceInitializers:r,fetch:i})=>{let a=new Map,o={},s=(e,n)=>{if(n instanceof t.ServiceInitializationError)return n;let r=n instanceof Error?n.message:String(n);return new t.ServiceInitializationError(t.ErrorReason.UNKNOWN,`Failed to initialize service type "${e}". ${r}`,n)},c=async(e,t)=>{try{let n=await t();a.set(e,n),o[e]={status:`initialized`}}catch(t){o[e]={status:`error`,error:s(e,t)}}};for(let s of r){if(a.has(s.type))throw new t.ServiceInitializationError(t.ErrorReason.DUPLICATE_SERVICE_INITIALIZATION,`Service type "${s.type}" has been initialized more than once.`);switch(s.type){case e.ServiceType.AVALANCHE_EVM:await c(e.ServiceType.AVALANCHE_EVM,async()=>{let{createAvalancheEvmService:e}=await Promise.resolve().then(()=>require(`./transfer-service/avalanche-evm/avalanche-evm-service.cjs`));return await e({environment:n,evmSigner:s.evmSigner,fetch:i})});break;case e.ServiceType.LOMBARD_BTCB_TO_BTC:await c(e.ServiceType.LOMBARD_BTCB_TO_BTC,async()=>{let{createBtcbToBtcService:e}=await Promise.resolve().then(()=>require(`./transfer-service/lombard/btcb-to-btc-service.cjs`));return await e({bitcoinFunctions:s.btcFunctions,environment:n,evmSigner:s.evmSigner,fetch:i})});break;case e.ServiceType.LOMBARD_BTC_TO_BTCB:await c(e.ServiceType.LOMBARD_BTC_TO_BTCB,async()=>{let{createBtcToBtcbService:e}=await Promise.resolve().then(()=>require(`./transfer-service/lombard/btc-to-btcb-service.cjs`));return await e({bitcoinFunctions:s.btcFunctions,btcSigner:s.btcSigner,environment:n,evmSigner:s.evmSigner,fetch:i})});break;case e.ServiceType.MARKR:if(n!==e.Environment.PROD){o[e.ServiceType.MARKR]={status:`unsupported-environment`,message:`Service type "${e.ServiceType.MARKR}" is only supported in production environment.`};break}await c(e.ServiceType.MARKR,async()=>{let{createMarkrService:e}=await Promise.resolve().then(()=>require(`./transfer-service/markr/markr-service.cjs`));return await e({apiBaseUrl:s.markrApiUrl,apiToken:s.markrApiToken,appId:s.markrAppId,disableCrossChainSwaps:s.disableCrossChainSwaps,fetch:i,environment:n,evmSigner:s.evmSigner,getTargetChainAssets:s.getTargetChainAssets,solanaSigner:s.solanaSigner})});break;case e.ServiceType.WRAP_UNWRAP:await c(e.ServiceType.WRAP_UNWRAP,async()=>{let{createWrapUnwrapService:e}=await Promise.resolve().then(()=>require(`./transfer-service/wrap-unwrap/wrap-unwrap-service.cjs`));return await e({environment:n,evmSigner:s.evmSigner,fetch:i})});break;default:break}}return{services:a,status:{environment:n,services:o}}},c=async({environment:e,fetch:n,serviceInitializers:c})=>{a(e),o(c);let{services:l,status:u}=await s({environment:e,serviceInitializers:c,fetch:n});return{id:crypto.randomUUID(),estimateNativeFee:async(e,n)=>{let r=Math.floor(Date.now()/1e3);if(e.expiresAt<=r){let n=r-e.expiresAt;throw new t.InvalidParamsError(t.ErrorReason.QUOTE_EXPIRED,`Quote expired ${n} seconds ago.`)}let i=l.get(e.serviceType);if(!i)throw new t.ServiceUnavailableError(t.ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);return await i.estimateNativeFee(e,n)},getBridgeableAssets:async({sourceAsset:e,sourceChainId:t,targetChainId:n})=>{let r=await Promise.allSettled(Array.from(l.values()).map(r=>r.getBridgeableAssets({sourceAsset:e,sourceChainId:t,targetChainId:n}))),a=new Map;for(let e of r)if(e.status===`fulfilled`)for(let t of e.value){let{bridgeProviders:e,...r}=t,o=i.getAssetId(n,r),s=a.get(o);if(s){let t=[...new Set([...s.bridgeProviders,...e])];a.set(o,{...s,bridgeProviders:t})}else a.set(o,{...r,bridgeProviders:[...e]})}return Array.from(a.values())},getMinimumTransferAmount:async e=>{let t={};for(let n of l.values())if(n.analyzeSupport(e)){let r=await n.getMinimumTransferAmount(e);t[n.type]=r}return Object.keys(t).length>0?t:null},getSupportedChains:async()=>{let e=new Map,t=await Promise.all(Array.from(l.values()).map(e=>e.getSupportedChains()));for(let n of t)for(let[t,r]of n.entries()){let n=e.get(t);n||(n=new Set,e.set(t,n));for(let e of r)n.add(e)}return e},getQuoter:(e,t)=>new r.Quoter(e,Array.from(l.values()),t),status:()=>u,trackTransfer:e=>{let{transfer:n}=e,r=l.get(n.type);if(!r)throw new t.ServiceUnavailableError(t.ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);return r.trackTransfer(e)},transferAsset:async e=>{let{quote:n}=e,r=l.get(n.serviceType);if(!r)throw new t.ServiceUnavailableError(t.ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);return await r.transferAsset(e)}}};exports.createTransferManager=c;
|
|
2
|
+
//# sourceMappingURL=transfer-manager.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer-manager.cjs","names":["isEnvironment","ServiceInitializationError","ErrorReason","isServiceInitializer","ServiceType","Environment","InvalidParamsError","ServiceUnavailableError","getAssetId","Quoter"],"sources":["../src/transfer-manager.ts"],"sourcesContent":["import { Environment, ServiceType } from './constants';\nimport { ErrorReason, InvalidParamsError, ServiceInitializationError, ServiceUnavailableError } from './errors';\nimport type { BridgeableUiAsset } from './types/asset';\nimport { isEnvironment, isServiceInitializer } from './type-guards';\nimport type { MutableGetSupportedChainsResult, ServiceInitializer, TransferService } from './types/service';\nimport type {\n CreateTransferManagerOptions,\n TransferManager,\n TransferManagerStatus,\n TransferManagerStatusServicesRecord,\n} from './types/transfer-manager';\nimport { Quoter } from './quoter/quoter';\nimport { getAssetId } from './utils/asset-id';\nimport type { Caip2ChainId } from './types/caip';\nimport type { Fetch } from './types/utility-types';\n\n/**\n * Validates the provided \"environment\" option.\n *\n * @throws {ServiceInitializationError} If the environment is invalid.\n */\nconst validateEnvironment = (environment: Environment): void => {\n if (!isEnvironment(environment)) {\n throw new ServiceInitializationError(ErrorReason.ENVIRONMENT_NOT_SUPPORTED);\n }\n};\n\n/**\n * Validates the provided \"serviceInitializers\" option.\n *\n * Checks for the following:\n * - At least one service initializer is provided.\n * - All service initializers are valid.\n * - No duplicate service types are initialized.\n *\n * @throws {ServiceInitializationError} If the service initializers are invalid.\n */\nconst validateServiceInitializers = (serviceInitializers: readonly ServiceInitializer[]): void => {\n if (serviceInitializers.length === 0) {\n throw new ServiceInitializationError('No service initializers provided.');\n }\n\n if (serviceInitializers.some((serviceInitializer) => !isServiceInitializer(serviceInitializer))) {\n throw new ServiceInitializationError('One or more service initializers are invalid.');\n }\n\n const serviceInitializerTypes = new Set<ServiceType>();\n for (const initializer of serviceInitializers) {\n if (serviceInitializerTypes.has(initializer.type)) {\n throw new ServiceInitializationError(\n ErrorReason.DUPLICATE_SERVICE_INITIALIZATION,\n `Service type \"${initializer.type}\" has been initialized more than once.`,\n );\n }\n serviceInitializerTypes.add(initializer.type);\n }\n};\n\nconst initializeServices = async ({\n environment,\n serviceInitializers,\n fetch: customFetch,\n}: {\n environment: Environment;\n serviceInitializers: readonly ServiceInitializer[];\n fetch?: Fetch;\n}): Promise<{\n services: Map<ServiceType, TransferService>;\n status: TransferManagerStatus;\n}> => {\n const initializedServicesMap: Map<ServiceType, TransferService> = new Map();\n const serviceStatuses: TransferManagerStatusServicesRecord = {};\n\n const wrapInitializationError = (serviceType: ServiceType, error: unknown): ServiceInitializationError => {\n if (error instanceof ServiceInitializationError) {\n return error;\n }\n\n const details = error instanceof Error ? error.message : String(error);\n\n return new ServiceInitializationError(\n ErrorReason.UNKNOWN,\n `Failed to initialize service type \"${serviceType}\". ${details}`,\n error,\n );\n };\n\n const initializeService = async (\n serviceType: ServiceType,\n initializer: () => Promise<TransferService>,\n ): Promise<void> => {\n try {\n const service = await initializer();\n initializedServicesMap.set(serviceType, service);\n serviceStatuses[serviceType] = { status: 'initialized' };\n } catch (error) {\n const wrappedError = wrapInitializationError(serviceType, error);\n\n serviceStatuses[serviceType] = {\n status: 'error',\n error: wrappedError,\n };\n }\n };\n\n for (const initializer of serviceInitializers) {\n // Error on duplicate initialization attempts.\n if (initializedServicesMap.has(initializer.type)) {\n throw new ServiceInitializationError(\n ErrorReason.DUPLICATE_SERVICE_INITIALIZATION,\n `Service type \"${initializer.type}\" has been initialized more than once.`,\n );\n }\n\n switch (initializer.type) {\n case ServiceType.AVALANCHE_EVM: {\n await initializeService(ServiceType.AVALANCHE_EVM, async () => {\n const { createAvalancheEvmService } = await import('./transfer-service/avalanche-evm/avalanche-evm-service');\n\n return await createAvalancheEvmService({\n environment,\n evmSigner: initializer.evmSigner,\n fetch: customFetch,\n });\n });\n\n break;\n }\n\n case ServiceType.LOMBARD_BTCB_TO_BTC: {\n await initializeService(ServiceType.LOMBARD_BTCB_TO_BTC, async () => {\n const { createBtcbToBtcService } = await import('./transfer-service/lombard/btcb-to-btc-service');\n\n return await createBtcbToBtcService({\n bitcoinFunctions: initializer.btcFunctions,\n environment,\n evmSigner: initializer.evmSigner,\n fetch: customFetch,\n });\n });\n\n break;\n }\n\n case ServiceType.LOMBARD_BTC_TO_BTCB: {\n await initializeService(ServiceType.LOMBARD_BTC_TO_BTCB, async () => {\n const { createBtcToBtcbService } = await import('./transfer-service/lombard/btc-to-btcb-service');\n\n return await createBtcToBtcbService({\n bitcoinFunctions: initializer.btcFunctions,\n btcSigner: initializer.btcSigner,\n environment,\n evmSigner: initializer.evmSigner,\n fetch: customFetch,\n });\n });\n\n break;\n }\n\n case ServiceType.MARKR: {\n if (environment !== Environment.PROD) {\n serviceStatuses[ServiceType.MARKR] = {\n status: 'unsupported-environment',\n message: `Service type \"${ServiceType.MARKR}\" is only supported in production environment.`,\n };\n break;\n }\n\n await initializeService(ServiceType.MARKR, async () => {\n const { createMarkrService } = await import('./transfer-service/markr/markr-service');\n\n return await createMarkrService({\n apiBaseUrl: initializer.markrApiUrl,\n apiToken: initializer.markrApiToken,\n appId: initializer.markrAppId,\n disableCrossChainSwaps: initializer.disableCrossChainSwaps,\n fetch: customFetch,\n environment,\n evmSigner: initializer.evmSigner,\n getTargetChainAssets: initializer.getTargetChainAssets,\n solanaSigner: initializer.solanaSigner,\n });\n });\n\n break;\n }\n\n case ServiceType.WRAP_UNWRAP: {\n await initializeService(ServiceType.WRAP_UNWRAP, async () => {\n const { createWrapUnwrapService } = await import('./transfer-service/wrap-unwrap/wrap-unwrap-service');\n\n return await createWrapUnwrapService({\n environment,\n evmSigner: initializer.evmSigner,\n fetch: customFetch,\n });\n });\n\n break;\n }\n\n default: {\n break;\n }\n }\n }\n\n return {\n services: initializedServicesMap,\n status: {\n environment,\n services: serviceStatuses,\n },\n };\n};\n\n/**\n * Creates a TransferManager instance.\n *\n * @returns {Promise<TransferManager>} The TransferManager instance.\n * @throws {ServiceInitializationError} If the provided options are invalid.\n */\nexport const createTransferManager = async ({\n environment,\n fetch: customFetch,\n serviceInitializers,\n}: CreateTransferManagerOptions): Promise<TransferManager> => {\n // Validate environment.\n validateEnvironment(environment);\n validateServiceInitializers(serviceInitializers);\n\n const { services, status } = await initializeServices({ environment, serviceInitializers, fetch: customFetch });\n\n return {\n id: crypto.randomUUID(),\n estimateNativeFee: async (quote, options) => {\n const now = Math.floor(Date.now() / 1_000);\n\n if (quote.expiresAt <= now) {\n const expiredSecondsAgo = now - quote.expiresAt;\n\n throw new InvalidParamsError(ErrorReason.QUOTE_EXPIRED, `Quote expired ${expiredSecondsAgo} seconds ago.`);\n }\n\n const service = services.get(quote.serviceType);\n\n if (!service) {\n throw new ServiceUnavailableError(ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);\n }\n\n return await service.estimateNativeFee(quote, options);\n },\n getBridgeableAssets: async ({ sourceAsset, sourceChainId, targetChainId }) => {\n const settledResults = await Promise.allSettled(\n Array.from(services.values()).map((service) =>\n service.getBridgeableAssets({ sourceAsset, sourceChainId, targetChainId }),\n ),\n );\n\n const merged = new Map<string, BridgeableUiAsset>();\n\n for (const settled of settledResults) {\n if (settled.status !== 'fulfilled') continue;\n for (const result of settled.value) {\n const { bridgeProviders, ...asset } = result;\n const key = getAssetId(targetChainId, asset);\n\n const existing = merged.get(key);\n if (existing) {\n const combined = [...new Set([...existing.bridgeProviders, ...bridgeProviders])];\n merged.set(key, { ...existing, bridgeProviders: combined });\n } else {\n merged.set(key, { ...asset, bridgeProviders: [...bridgeProviders] });\n }\n }\n }\n\n return Array.from(merged.values());\n },\n getMinimumTransferAmount: async (props) => {\n const serviceMinimums: { [key in ServiceType]?: bigint } = {};\n\n for (const service of services.values()) {\n if (service.analyzeSupport(props)) {\n const serviceMinAmount = await service.getMinimumTransferAmount(props);\n serviceMinimums[service.type] = serviceMinAmount;\n }\n }\n\n return Object.keys(serviceMinimums).length > 0 ? serviceMinimums : null;\n },\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n // Fetch supported chains from all configured services in parallel.\n const serviceResults = await Promise.all(\n Array.from(services.values()).map((service) => service.getSupportedChains()),\n );\n\n // Merge results: union destination sets for identical source chain IDs.\n for (const result of serviceResults) {\n for (const [sourceChainId, targetChainIds] of result.entries()) {\n let mergedTargets = supportedChainsMap.get(sourceChainId);\n if (!mergedTargets) {\n mergedTargets = new Set<Caip2ChainId>();\n supportedChainsMap.set(sourceChainId, mergedTargets);\n }\n\n for (const targetChainId of targetChainIds) {\n mergedTargets.add(targetChainId);\n }\n }\n }\n\n return supportedChainsMap;\n },\n getQuoter: (props, options) => {\n return new Quoter(props, Array.from(services.values()), options);\n },\n status: () => status,\n trackTransfer: (props) => {\n const { transfer } = props;\n const service = services.get(transfer.type);\n\n if (!service) {\n throw new ServiceUnavailableError(ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);\n }\n\n return service.trackTransfer(props);\n },\n transferAsset: async (props) => {\n const { quote } = props;\n const service = services.get(quote.serviceType);\n\n if (!service) {\n throw new ServiceUnavailableError(ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);\n }\n\n return await service.transferAsset(props);\n },\n } satisfies TransferManager;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CreateTransferManagerOptions, TransferManager } from "./types/transfer-manager.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/transfer-manager.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a TransferManager instance.
|
|
6
|
+
*
|
|
7
|
+
* @returns {Promise<TransferManager>} The TransferManager instance.
|
|
8
|
+
* @throws {ServiceInitializationError} If the provided options are invalid.
|
|
9
|
+
*/
|
|
10
|
+
declare const createTransferManager: ({
|
|
11
|
+
environment,
|
|
12
|
+
fetch: customFetch,
|
|
13
|
+
serviceInitializers
|
|
14
|
+
}: CreateTransferManagerOptions) => Promise<TransferManager>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { createTransferManager };
|
|
17
|
+
//# sourceMappingURL=transfer-manager.d.cts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CreateTransferManagerOptions, TransferManager } from "./types/transfer-manager.js";
|
|
2
|
+
|
|
3
|
+
//#region src/transfer-manager.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a TransferManager instance.
|
|
6
|
+
*
|
|
7
|
+
* @returns {Promise<TransferManager>} The TransferManager instance.
|
|
8
|
+
* @throws {ServiceInitializationError} If the provided options are invalid.
|
|
9
|
+
*/
|
|
10
|
+
declare const createTransferManager: ({
|
|
11
|
+
environment,
|
|
12
|
+
fetch: customFetch,
|
|
13
|
+
serviceInitializers
|
|
14
|
+
}: CreateTransferManagerOptions) => Promise<TransferManager>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { createTransferManager };
|
|
17
|
+
//# sourceMappingURL=transfer-manager.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Environment as e,ServiceType as t}from"./constants.js";import{ErrorReason as n,InvalidParamsError as r,ServiceInitializationError as i,ServiceUnavailableError as a}from"./errors.js";import{isEnvironment as o,isServiceInitializer as s}from"./type-guards.js";import{Quoter as c}from"./quoter/quoter.js";import{getAssetId as l}from"./utils/asset-id.js";const u=e=>{if(!o(e))throw new i(n.ENVIRONMENT_NOT_SUPPORTED)},d=e=>{if(e.length===0)throw new i(`No service initializers provided.`);if(e.some(e=>!s(e)))throw new i(`One or more service initializers are invalid.`);let t=new Set;for(let r of e){if(t.has(r.type))throw new i(n.DUPLICATE_SERVICE_INITIALIZATION,`Service type "${r.type}" has been initialized more than once.`);t.add(r.type)}},f=async({environment:r,serviceInitializers:a,fetch:o})=>{let s=new Map,c={},l=(e,t)=>{if(t instanceof i)return t;let r=t instanceof Error?t.message:String(t);return new i(n.UNKNOWN,`Failed to initialize service type "${e}". ${r}`,t)},u=async(e,t)=>{try{let n=await t();s.set(e,n),c[e]={status:`initialized`}}catch(t){c[e]={status:`error`,error:l(e,t)}}};for(let l of a){if(s.has(l.type))throw new i(n.DUPLICATE_SERVICE_INITIALIZATION,`Service type "${l.type}" has been initialized more than once.`);switch(l.type){case t.AVALANCHE_EVM:await u(t.AVALANCHE_EVM,async()=>{let{createAvalancheEvmService:e}=await import(`./transfer-service/avalanche-evm/avalanche-evm-service.js`);return await e({environment:r,evmSigner:l.evmSigner,fetch:o})});break;case t.LOMBARD_BTCB_TO_BTC:await u(t.LOMBARD_BTCB_TO_BTC,async()=>{let{createBtcbToBtcService:e}=await import(`./transfer-service/lombard/btcb-to-btc-service.js`);return await e({bitcoinFunctions:l.btcFunctions,environment:r,evmSigner:l.evmSigner,fetch:o})});break;case t.LOMBARD_BTC_TO_BTCB:await u(t.LOMBARD_BTC_TO_BTCB,async()=>{let{createBtcToBtcbService:e}=await import(`./transfer-service/lombard/btc-to-btcb-service.js`);return await e({bitcoinFunctions:l.btcFunctions,btcSigner:l.btcSigner,environment:r,evmSigner:l.evmSigner,fetch:o})});break;case t.MARKR:if(r!==e.PROD){c[t.MARKR]={status:`unsupported-environment`,message:`Service type "${t.MARKR}" is only supported in production environment.`};break}await u(t.MARKR,async()=>{let{createMarkrService:e}=await import(`./transfer-service/markr/markr-service.js`);return await e({apiBaseUrl:l.markrApiUrl,apiToken:l.markrApiToken,appId:l.markrAppId,disableCrossChainSwaps:l.disableCrossChainSwaps,fetch:o,environment:r,evmSigner:l.evmSigner,getTargetChainAssets:l.getTargetChainAssets,solanaSigner:l.solanaSigner})});break;case t.WRAP_UNWRAP:await u(t.WRAP_UNWRAP,async()=>{let{createWrapUnwrapService:e}=await import(`./transfer-service/wrap-unwrap/wrap-unwrap-service.js`);return await e({environment:r,evmSigner:l.evmSigner,fetch:o})});break;default:break}}return{services:s,status:{environment:r,services:c}}},p=async({environment:e,fetch:t,serviceInitializers:i})=>{u(e),d(i);let{services:o,status:s}=await f({environment:e,serviceInitializers:i,fetch:t});return{id:crypto.randomUUID(),estimateNativeFee:async(e,t)=>{let i=Math.floor(Date.now()/1e3);if(e.expiresAt<=i){let t=i-e.expiresAt;throw new r(n.QUOTE_EXPIRED,`Quote expired ${t} seconds ago.`)}let s=o.get(e.serviceType);if(!s)throw new a(n.SERVICE_TYPE_NOT_CONFIGURED);return await s.estimateNativeFee(e,t)},getBridgeableAssets:async({sourceAsset:e,sourceChainId:t,targetChainId:n})=>{let r=await Promise.allSettled(Array.from(o.values()).map(r=>r.getBridgeableAssets({sourceAsset:e,sourceChainId:t,targetChainId:n}))),i=new Map;for(let e of r)if(e.status===`fulfilled`)for(let t of e.value){let{bridgeProviders:e,...r}=t,a=l(n,r),o=i.get(a);if(o){let t=[...new Set([...o.bridgeProviders,...e])];i.set(a,{...o,bridgeProviders:t})}else i.set(a,{...r,bridgeProviders:[...e]})}return Array.from(i.values())},getMinimumTransferAmount:async e=>{let t={};for(let n of o.values())if(n.analyzeSupport(e)){let r=await n.getMinimumTransferAmount(e);t[n.type]=r}return Object.keys(t).length>0?t:null},getSupportedChains:async()=>{let e=new Map,t=await Promise.all(Array.from(o.values()).map(e=>e.getSupportedChains()));for(let n of t)for(let[t,r]of n.entries()){let n=e.get(t);n||(n=new Set,e.set(t,n));for(let e of r)n.add(e)}return e},getQuoter:(e,t)=>new c(e,Array.from(o.values()),t),status:()=>s,trackTransfer:e=>{let{transfer:t}=e,r=o.get(t.type);if(!r)throw new a(n.SERVICE_TYPE_NOT_CONFIGURED);return r.trackTransfer(e)},transferAsset:async e=>{let{quote:t}=e,r=o.get(t.serviceType);if(!r)throw new a(n.SERVICE_TYPE_NOT_CONFIGURED);return await r.transferAsset(e)}}};export{p as createTransferManager};
|
|
2
|
+
//# sourceMappingURL=transfer-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer-manager.js","names":[],"sources":["../src/transfer-manager.ts"],"sourcesContent":["import { Environment, ServiceType } from './constants';\nimport { ErrorReason, InvalidParamsError, ServiceInitializationError, ServiceUnavailableError } from './errors';\nimport type { BridgeableUiAsset } from './types/asset';\nimport { isEnvironment, isServiceInitializer } from './type-guards';\nimport type { MutableGetSupportedChainsResult, ServiceInitializer, TransferService } from './types/service';\nimport type {\n CreateTransferManagerOptions,\n TransferManager,\n TransferManagerStatus,\n TransferManagerStatusServicesRecord,\n} from './types/transfer-manager';\nimport { Quoter } from './quoter/quoter';\nimport { getAssetId } from './utils/asset-id';\nimport type { Caip2ChainId } from './types/caip';\nimport type { Fetch } from './types/utility-types';\n\n/**\n * Validates the provided \"environment\" option.\n *\n * @throws {ServiceInitializationError} If the environment is invalid.\n */\nconst validateEnvironment = (environment: Environment): void => {\n if (!isEnvironment(environment)) {\n throw new ServiceInitializationError(ErrorReason.ENVIRONMENT_NOT_SUPPORTED);\n }\n};\n\n/**\n * Validates the provided \"serviceInitializers\" option.\n *\n * Checks for the following:\n * - At least one service initializer is provided.\n * - All service initializers are valid.\n * - No duplicate service types are initialized.\n *\n * @throws {ServiceInitializationError} If the service initializers are invalid.\n */\nconst validateServiceInitializers = (serviceInitializers: readonly ServiceInitializer[]): void => {\n if (serviceInitializers.length === 0) {\n throw new ServiceInitializationError('No service initializers provided.');\n }\n\n if (serviceInitializers.some((serviceInitializer) => !isServiceInitializer(serviceInitializer))) {\n throw new ServiceInitializationError('One or more service initializers are invalid.');\n }\n\n const serviceInitializerTypes = new Set<ServiceType>();\n for (const initializer of serviceInitializers) {\n if (serviceInitializerTypes.has(initializer.type)) {\n throw new ServiceInitializationError(\n ErrorReason.DUPLICATE_SERVICE_INITIALIZATION,\n `Service type \"${initializer.type}\" has been initialized more than once.`,\n );\n }\n serviceInitializerTypes.add(initializer.type);\n }\n};\n\nconst initializeServices = async ({\n environment,\n serviceInitializers,\n fetch: customFetch,\n}: {\n environment: Environment;\n serviceInitializers: readonly ServiceInitializer[];\n fetch?: Fetch;\n}): Promise<{\n services: Map<ServiceType, TransferService>;\n status: TransferManagerStatus;\n}> => {\n const initializedServicesMap: Map<ServiceType, TransferService> = new Map();\n const serviceStatuses: TransferManagerStatusServicesRecord = {};\n\n const wrapInitializationError = (serviceType: ServiceType, error: unknown): ServiceInitializationError => {\n if (error instanceof ServiceInitializationError) {\n return error;\n }\n\n const details = error instanceof Error ? error.message : String(error);\n\n return new ServiceInitializationError(\n ErrorReason.UNKNOWN,\n `Failed to initialize service type \"${serviceType}\". ${details}`,\n error,\n );\n };\n\n const initializeService = async (\n serviceType: ServiceType,\n initializer: () => Promise<TransferService>,\n ): Promise<void> => {\n try {\n const service = await initializer();\n initializedServicesMap.set(serviceType, service);\n serviceStatuses[serviceType] = { status: 'initialized' };\n } catch (error) {\n const wrappedError = wrapInitializationError(serviceType, error);\n\n serviceStatuses[serviceType] = {\n status: 'error',\n error: wrappedError,\n };\n }\n };\n\n for (const initializer of serviceInitializers) {\n // Error on duplicate initialization attempts.\n if (initializedServicesMap.has(initializer.type)) {\n throw new ServiceInitializationError(\n ErrorReason.DUPLICATE_SERVICE_INITIALIZATION,\n `Service type \"${initializer.type}\" has been initialized more than once.`,\n );\n }\n\n switch (initializer.type) {\n case ServiceType.AVALANCHE_EVM: {\n await initializeService(ServiceType.AVALANCHE_EVM, async () => {\n const { createAvalancheEvmService } = await import('./transfer-service/avalanche-evm/avalanche-evm-service');\n\n return await createAvalancheEvmService({\n environment,\n evmSigner: initializer.evmSigner,\n fetch: customFetch,\n });\n });\n\n break;\n }\n\n case ServiceType.LOMBARD_BTCB_TO_BTC: {\n await initializeService(ServiceType.LOMBARD_BTCB_TO_BTC, async () => {\n const { createBtcbToBtcService } = await import('./transfer-service/lombard/btcb-to-btc-service');\n\n return await createBtcbToBtcService({\n bitcoinFunctions: initializer.btcFunctions,\n environment,\n evmSigner: initializer.evmSigner,\n fetch: customFetch,\n });\n });\n\n break;\n }\n\n case ServiceType.LOMBARD_BTC_TO_BTCB: {\n await initializeService(ServiceType.LOMBARD_BTC_TO_BTCB, async () => {\n const { createBtcToBtcbService } = await import('./transfer-service/lombard/btc-to-btcb-service');\n\n return await createBtcToBtcbService({\n bitcoinFunctions: initializer.btcFunctions,\n btcSigner: initializer.btcSigner,\n environment,\n evmSigner: initializer.evmSigner,\n fetch: customFetch,\n });\n });\n\n break;\n }\n\n case ServiceType.MARKR: {\n if (environment !== Environment.PROD) {\n serviceStatuses[ServiceType.MARKR] = {\n status: 'unsupported-environment',\n message: `Service type \"${ServiceType.MARKR}\" is only supported in production environment.`,\n };\n break;\n }\n\n await initializeService(ServiceType.MARKR, async () => {\n const { createMarkrService } = await import('./transfer-service/markr/markr-service');\n\n return await createMarkrService({\n apiBaseUrl: initializer.markrApiUrl,\n apiToken: initializer.markrApiToken,\n appId: initializer.markrAppId,\n disableCrossChainSwaps: initializer.disableCrossChainSwaps,\n fetch: customFetch,\n environment,\n evmSigner: initializer.evmSigner,\n getTargetChainAssets: initializer.getTargetChainAssets,\n solanaSigner: initializer.solanaSigner,\n });\n });\n\n break;\n }\n\n case ServiceType.WRAP_UNWRAP: {\n await initializeService(ServiceType.WRAP_UNWRAP, async () => {\n const { createWrapUnwrapService } = await import('./transfer-service/wrap-unwrap/wrap-unwrap-service');\n\n return await createWrapUnwrapService({\n environment,\n evmSigner: initializer.evmSigner,\n fetch: customFetch,\n });\n });\n\n break;\n }\n\n default: {\n break;\n }\n }\n }\n\n return {\n services: initializedServicesMap,\n status: {\n environment,\n services: serviceStatuses,\n },\n };\n};\n\n/**\n * Creates a TransferManager instance.\n *\n * @returns {Promise<TransferManager>} The TransferManager instance.\n * @throws {ServiceInitializationError} If the provided options are invalid.\n */\nexport const createTransferManager = async ({\n environment,\n fetch: customFetch,\n serviceInitializers,\n}: CreateTransferManagerOptions): Promise<TransferManager> => {\n // Validate environment.\n validateEnvironment(environment);\n validateServiceInitializers(serviceInitializers);\n\n const { services, status } = await initializeServices({ environment, serviceInitializers, fetch: customFetch });\n\n return {\n id: crypto.randomUUID(),\n estimateNativeFee: async (quote, options) => {\n const now = Math.floor(Date.now() / 1_000);\n\n if (quote.expiresAt <= now) {\n const expiredSecondsAgo = now - quote.expiresAt;\n\n throw new InvalidParamsError(ErrorReason.QUOTE_EXPIRED, `Quote expired ${expiredSecondsAgo} seconds ago.`);\n }\n\n const service = services.get(quote.serviceType);\n\n if (!service) {\n throw new ServiceUnavailableError(ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);\n }\n\n return await service.estimateNativeFee(quote, options);\n },\n getBridgeableAssets: async ({ sourceAsset, sourceChainId, targetChainId }) => {\n const settledResults = await Promise.allSettled(\n Array.from(services.values()).map((service) =>\n service.getBridgeableAssets({ sourceAsset, sourceChainId, targetChainId }),\n ),\n );\n\n const merged = new Map<string, BridgeableUiAsset>();\n\n for (const settled of settledResults) {\n if (settled.status !== 'fulfilled') continue;\n for (const result of settled.value) {\n const { bridgeProviders, ...asset } = result;\n const key = getAssetId(targetChainId, asset);\n\n const existing = merged.get(key);\n if (existing) {\n const combined = [...new Set([...existing.bridgeProviders, ...bridgeProviders])];\n merged.set(key, { ...existing, bridgeProviders: combined });\n } else {\n merged.set(key, { ...asset, bridgeProviders: [...bridgeProviders] });\n }\n }\n }\n\n return Array.from(merged.values());\n },\n getMinimumTransferAmount: async (props) => {\n const serviceMinimums: { [key in ServiceType]?: bigint } = {};\n\n for (const service of services.values()) {\n if (service.analyzeSupport(props)) {\n const serviceMinAmount = await service.getMinimumTransferAmount(props);\n serviceMinimums[service.type] = serviceMinAmount;\n }\n }\n\n return Object.keys(serviceMinimums).length > 0 ? serviceMinimums : null;\n },\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n // Fetch supported chains from all configured services in parallel.\n const serviceResults = await Promise.all(\n Array.from(services.values()).map((service) => service.getSupportedChains()),\n );\n\n // Merge results: union destination sets for identical source chain IDs.\n for (const result of serviceResults) {\n for (const [sourceChainId, targetChainIds] of result.entries()) {\n let mergedTargets = supportedChainsMap.get(sourceChainId);\n if (!mergedTargets) {\n mergedTargets = new Set<Caip2ChainId>();\n supportedChainsMap.set(sourceChainId, mergedTargets);\n }\n\n for (const targetChainId of targetChainIds) {\n mergedTargets.add(targetChainId);\n }\n }\n }\n\n return supportedChainsMap;\n },\n getQuoter: (props, options) => {\n return new Quoter(props, Array.from(services.values()), options);\n },\n status: () => status,\n trackTransfer: (props) => {\n const { transfer } = props;\n const service = services.get(transfer.type);\n\n if (!service) {\n throw new ServiceUnavailableError(ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);\n }\n\n return service.trackTransfer(props);\n },\n transferAsset: async (props) => {\n const { quote } = props;\n const service = services.get(quote.serviceType);\n\n if (!service) {\n throw new ServiceUnavailableError(ErrorReason.SERVICE_TYPE_NOT_CONFIGURED);\n }\n\n return await service.transferAsset(props);\n },\n } satisfies TransferManager;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=[{constant:!0,inputs:[],name:`name`,outputs:[{name:``,type:`string`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{name:`guy`,type:`address`},{name:`wad`,type:`uint256`}],name:`approve`,outputs:[{name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[],name:`totalSupply`,outputs:[{name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{name:`src`,type:`address`},{name:`dst`,type:`address`},{name:`wad`,type:`uint256`}],name:`transferFrom`,outputs:[{name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[{name:`wad`,type:`uint256`}],name:`withdraw`,outputs:[],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[],name:`decimals`,outputs:[{name:``,type:`uint8`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!0,inputs:[{name:``,type:`address`}],name:`balanceOf`,outputs:[{name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!0,inputs:[],name:`symbol`,outputs:[{name:``,type:`string`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{name:`dst`,type:`address`},{name:`wad`,type:`uint256`}],name:`transfer`,outputs:[{name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[],name:`deposit`,outputs:[],payable:!0,stateMutability:`payable`,type:`function`},{constant:!0,inputs:[{name:``,type:`address`},{name:``,type:`address`}],name:`allowance`,outputs:[{name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{payable:!0,stateMutability:`payable`,type:`fallback`},{anonymous:!1,inputs:[{indexed:!0,name:`src`,type:`address`},{indexed:!0,name:`guy`,type:`address`},{indexed:!1,name:`wad`,type:`uint256`}],name:`Approval`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,name:`src`,type:`address`},{indexed:!0,name:`dst`,type:`address`},{indexed:!1,name:`wad`,type:`uint256`}],name:`Transfer`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,name:`dst`,type:`address`},{indexed:!1,name:`wad`,type:`uint256`}],name:`Deposit`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,name:`src`,type:`address`},{indexed:!1,name:`wad`,type:`uint256`}],name:`Withdrawal`,type:`event`}],t=[{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`src`,type:`address`},{indexed:!0,internalType:`address`,name:`guy`,type:`address`},{indexed:!1,internalType:`uint256`,name:`wad`,type:`uint256`}],name:`Approval`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`dst`,type:`address`},{indexed:!1,internalType:`uint256`,name:`wad`,type:`uint256`}],name:`Deposit`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`src`,type:`address`},{indexed:!0,internalType:`address`,name:`dst`,type:`address`},{indexed:!1,internalType:`uint256`,name:`wad`,type:`uint256`}],name:`Transfer`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`src`,type:`address`},{indexed:!1,internalType:`uint256`,name:`wad`,type:`uint256`}],name:`Withdrawal`,type:`event`},{payable:!0,stateMutability:`payable`,type:`fallback`},{constant:!0,inputs:[{internalType:`address`,name:``,type:`address`},{internalType:`address`,name:``,type:`address`}],name:`allowance`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{internalType:`address`,name:`guy`,type:`address`},{internalType:`uint256`,name:`wad`,type:`uint256`}],name:`approve`,outputs:[{internalType:`bool`,name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[{internalType:`address`,name:``,type:`address`}],name:`balanceOf`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!0,inputs:[],name:`decimals`,outputs:[{internalType:`uint8`,name:``,type:`uint8`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[],name:`deposit`,outputs:[],payable:!0,stateMutability:`payable`,type:`function`},{constant:!0,inputs:[],name:`name`,outputs:[{internalType:`string`,name:``,type:`string`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!0,inputs:[],name:`symbol`,outputs:[{internalType:`string`,name:``,type:`string`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{internalType:`address`,name:`dst`,type:`address`},{internalType:`uint256`,name:`wad`,type:`uint256`}],name:`transfer`,outputs:[{internalType:`bool`,name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[{internalType:`address`,name:`src`,type:`address`},{internalType:`address`,name:`dst`,type:`address`},{internalType:`uint256`,name:`wad`,type:`uint256`}],name:`transferFrom`,outputs:[{internalType:`bool`,name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[{internalType:`uint256`,name:`wad`,type:`uint256`}],name:`withdraw`,outputs:[],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[{internalType:`uint256`,name:`value`,type:`uint256`},{internalType:`uint256`,name:`chain_id`,type:`uint256`}],name:`unwrap`,outputs:[],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[],name:`totalSupply`,outputs:[{name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{internalType:`address`,name:`token`,type:`address`},{internalType:`uint256`,name:`amount`,type:`uint256`}],name:`swap`,outputs:[{internalType:`bool`,name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[{internalType:`address`,name:``,type:`address`}],name:`swapSupply`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`}];exports.WAVAX_ABI=t,exports.WETH_ABI=e;
|
|
2
|
+
//# sourceMappingURL=_abis.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_abis.cjs","names":[],"sources":["../../src/transfer-service/_abis.ts"],"sourcesContent":["export const WETH_ABI = [\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'guy',\n type: 'address',\n },\n {\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'src',\n type: 'address',\n },\n {\n name: 'dst',\n type: 'address',\n },\n {\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'withdraw',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'dst',\n type: 'address',\n },\n {\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [],\n name: 'deposit',\n outputs: [],\n payable: true,\n stateMutability: 'payable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'address',\n },\n {\n name: '',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n payable: true,\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'src',\n type: 'address',\n },\n {\n indexed: true,\n name: 'guy',\n type: 'address',\n },\n {\n indexed: false,\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'src',\n type: 'address',\n },\n {\n indexed: true,\n name: 'dst',\n type: 'address',\n },\n {\n indexed: false,\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'dst',\n type: 'address',\n },\n {\n indexed: false,\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'src',\n type: 'address',\n },\n {\n indexed: false,\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n] as const;\n\nexport const WAVAX_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'src',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'guy',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'dst',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'src',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'dst',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'src',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n {\n payable: true,\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n constant: true,\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'address',\n name: 'guy',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [],\n name: 'deposit',\n outputs: [],\n payable: true,\n stateMutability: 'payable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'address',\n name: 'dst',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'address',\n name: 'src',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'dst',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'withdraw',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'chain_id',\n type: 'uint256',\n },\n ],\n name: 'unwrap',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'swap',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'swapSupply',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n"],"mappings":"AAAA,MAAa,EAAW,CACtB,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,OACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACP,CACD,CACE,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,UACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,cACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACP,CACD,CACE,KAAM,MACN,KAAM,UACP,CACD,CACE,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,QACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,YACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,SACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACP,CACD,CACE,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,UACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,GACN,KAAM,UACP,CACD,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,YACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,QAAS,GACT,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,UACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,aACN,KAAM,QACP,CACF,CAEY,EAAY,CACvB,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,UACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,aACN,KAAM,QACP,CACD,CACE,QAAS,GACT,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,UACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,WACN,QAAS,CACP,CACE,aAAc,QACd,KAAM,GACN,KAAM,QACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,UACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,OACN,QAAS,CACP,CACE,aAAc,SACd,KAAM,GACN,KAAM,SACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,SACN,QAAS,CACP,CACE,aAAc,SACd,KAAM,GACN,KAAM,SACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACF,CACD,KAAM,SACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,cACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,OACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,aACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=[{constant:!0,inputs:[],name:`name`,outputs:[{name:``,type:`string`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{name:`guy`,type:`address`},{name:`wad`,type:`uint256`}],name:`approve`,outputs:[{name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[],name:`totalSupply`,outputs:[{name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{name:`src`,type:`address`},{name:`dst`,type:`address`},{name:`wad`,type:`uint256`}],name:`transferFrom`,outputs:[{name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[{name:`wad`,type:`uint256`}],name:`withdraw`,outputs:[],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[],name:`decimals`,outputs:[{name:``,type:`uint8`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!0,inputs:[{name:``,type:`address`}],name:`balanceOf`,outputs:[{name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!0,inputs:[],name:`symbol`,outputs:[{name:``,type:`string`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{name:`dst`,type:`address`},{name:`wad`,type:`uint256`}],name:`transfer`,outputs:[{name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[],name:`deposit`,outputs:[],payable:!0,stateMutability:`payable`,type:`function`},{constant:!0,inputs:[{name:``,type:`address`},{name:``,type:`address`}],name:`allowance`,outputs:[{name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{payable:!0,stateMutability:`payable`,type:`fallback`},{anonymous:!1,inputs:[{indexed:!0,name:`src`,type:`address`},{indexed:!0,name:`guy`,type:`address`},{indexed:!1,name:`wad`,type:`uint256`}],name:`Approval`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,name:`src`,type:`address`},{indexed:!0,name:`dst`,type:`address`},{indexed:!1,name:`wad`,type:`uint256`}],name:`Transfer`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,name:`dst`,type:`address`},{indexed:!1,name:`wad`,type:`uint256`}],name:`Deposit`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,name:`src`,type:`address`},{indexed:!1,name:`wad`,type:`uint256`}],name:`Withdrawal`,type:`event`}],t=[{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`src`,type:`address`},{indexed:!0,internalType:`address`,name:`guy`,type:`address`},{indexed:!1,internalType:`uint256`,name:`wad`,type:`uint256`}],name:`Approval`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`dst`,type:`address`},{indexed:!1,internalType:`uint256`,name:`wad`,type:`uint256`}],name:`Deposit`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`src`,type:`address`},{indexed:!0,internalType:`address`,name:`dst`,type:`address`},{indexed:!1,internalType:`uint256`,name:`wad`,type:`uint256`}],name:`Transfer`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`src`,type:`address`},{indexed:!1,internalType:`uint256`,name:`wad`,type:`uint256`}],name:`Withdrawal`,type:`event`},{payable:!0,stateMutability:`payable`,type:`fallback`},{constant:!0,inputs:[{internalType:`address`,name:``,type:`address`},{internalType:`address`,name:``,type:`address`}],name:`allowance`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{internalType:`address`,name:`guy`,type:`address`},{internalType:`uint256`,name:`wad`,type:`uint256`}],name:`approve`,outputs:[{internalType:`bool`,name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[{internalType:`address`,name:``,type:`address`}],name:`balanceOf`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!0,inputs:[],name:`decimals`,outputs:[{internalType:`uint8`,name:``,type:`uint8`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[],name:`deposit`,outputs:[],payable:!0,stateMutability:`payable`,type:`function`},{constant:!0,inputs:[],name:`name`,outputs:[{internalType:`string`,name:``,type:`string`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!0,inputs:[],name:`symbol`,outputs:[{internalType:`string`,name:``,type:`string`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{internalType:`address`,name:`dst`,type:`address`},{internalType:`uint256`,name:`wad`,type:`uint256`}],name:`transfer`,outputs:[{internalType:`bool`,name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[{internalType:`address`,name:`src`,type:`address`},{internalType:`address`,name:`dst`,type:`address`},{internalType:`uint256`,name:`wad`,type:`uint256`}],name:`transferFrom`,outputs:[{internalType:`bool`,name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[{internalType:`uint256`,name:`wad`,type:`uint256`}],name:`withdraw`,outputs:[],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!1,inputs:[{internalType:`uint256`,name:`value`,type:`uint256`},{internalType:`uint256`,name:`chain_id`,type:`uint256`}],name:`unwrap`,outputs:[],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[],name:`totalSupply`,outputs:[{name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`},{constant:!1,inputs:[{internalType:`address`,name:`token`,type:`address`},{internalType:`uint256`,name:`amount`,type:`uint256`}],name:`swap`,outputs:[{internalType:`bool`,name:``,type:`bool`}],payable:!1,stateMutability:`nonpayable`,type:`function`},{constant:!0,inputs:[{internalType:`address`,name:``,type:`address`}],name:`swapSupply`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],payable:!1,stateMutability:`view`,type:`function`}];export{t as WAVAX_ABI,e as WETH_ABI};
|
|
2
|
+
//# sourceMappingURL=_abis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_abis.js","names":[],"sources":["../../src/transfer-service/_abis.ts"],"sourcesContent":["export const WETH_ABI = [\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'guy',\n type: 'address',\n },\n {\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'src',\n type: 'address',\n },\n {\n name: 'dst',\n type: 'address',\n },\n {\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'withdraw',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'dst',\n type: 'address',\n },\n {\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [],\n name: 'deposit',\n outputs: [],\n payable: true,\n stateMutability: 'payable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'address',\n },\n {\n name: '',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n payable: true,\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'src',\n type: 'address',\n },\n {\n indexed: true,\n name: 'guy',\n type: 'address',\n },\n {\n indexed: false,\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'src',\n type: 'address',\n },\n {\n indexed: true,\n name: 'dst',\n type: 'address',\n },\n {\n indexed: false,\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'dst',\n type: 'address',\n },\n {\n indexed: false,\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'src',\n type: 'address',\n },\n {\n indexed: false,\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n] as const;\n\nexport const WAVAX_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'src',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'guy',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'dst',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'src',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'dst',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'src',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n {\n payable: true,\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n constant: true,\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'address',\n name: 'guy',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [],\n name: 'deposit',\n outputs: [],\n payable: true,\n stateMutability: 'payable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'address',\n name: 'dst',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'address',\n name: 'src',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'dst',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'uint256',\n name: 'wad',\n type: 'uint256',\n },\n ],\n name: 'withdraw',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'chain_id',\n type: 'uint256',\n },\n ],\n name: 'unwrap',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'swap',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'swapSupply',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n"],"mappings":"AAAA,MAAa,EAAW,CACtB,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,OACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACP,CACD,CACE,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,UACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,cACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACP,CACD,CACE,KAAM,MACN,KAAM,UACP,CACD,CACE,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,QACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,YACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,SACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,UACP,CACD,CACE,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,UACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,GACN,KAAM,UACP,CACD,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,YACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,QAAS,GACT,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,UACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,aACN,KAAM,QACP,CACF,CAEY,EAAY,CACvB,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,UACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,aACN,KAAM,QACP,CACD,CACE,QAAS,GACT,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,UACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,WACN,QAAS,CACP,CACE,aAAc,QACd,KAAM,GACN,KAAM,QACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,UACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,OACN,QAAS,CACP,CACE,aAAc,SACd,KAAM,GACN,KAAM,SACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,SACN,QAAS,CACP,CACE,aAAc,SACd,KAAM,GACN,KAAM,SACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACF,CACD,KAAM,SACN,QAAS,EAAE,CACX,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,EAAE,CACV,KAAM,cACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,OACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,QAAS,GACT,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,SAAU,GACV,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,aACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,QAAS,GACT,gBAAiB,OACjB,KAAM,WACP,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../_utils/chain.cjs`);let t=require(`zod`),n=require(`viem`);const r=t.z.string().refine(n.isHex,{message:`Expected a hex string`}).transform(e=>(0,n.hexToBigInt)(e)),i=t.z.object({maxFeePerGas:r,maxPriorityFeePerGas:r}),a=t.z.object({slow:i,normal:i,fast:i});async function o(e){let t=await e.request({method:`eth_suggestPriceOptions`,params:[]});return a.parse(t)}async function s(t,n,r=`fast`){if(e.isCaip2AvalancheChainId(n.chainId))return(await o(t))[r];let i=await t.estimateFeesPerGas();return{maxFeePerGas:i.maxFeePerGas,maxPriorityFeePerGas:i.maxPriorityFeePerGas??0n}}exports.estimateEvmFeesPerGas=s;
|
|
2
|
+
//# sourceMappingURL=_evm-gas.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_evm-gas.cjs","names":["z","isHex","isCaip2AvalancheChainId"],"sources":["../../src/transfer-service/_evm-gas.ts"],"sourcesContent":["/**\n * @module\n * @internal\n *\n * C-Chain–aware EVM gas price estimation.\n *\n * On Avalanche C-Chain (43114 / 43113) the node exposes a custom RPC method\n * `eth_suggestPriceOptions` that returns pre-bucketed EIP-1559 fee values for\n * `slow`, `normal`, and `fast` urgency tiers.\n *\n * For all other EVM chains the standard `eth_estimateFeesPerGas` path is used\n * and the tier parameter is ignored.\n */\nimport { hexToBigInt, isHex, type Client, type PublicActions } from 'viem';\nimport { z } from 'zod';\nimport { isCaip2AvalancheChainId } from '../_utils/chain';\nimport type { Chain } from '../types/chain';\nimport type { FeeRateTier } from '../types/fee';\n\n// ---------------------------------------------------------------------------\n// Zod schemas – validates the raw `eth_suggestPriceOptions` RPC response\n// ---------------------------------------------------------------------------\n\nconst hexBigIntSchema = z\n .string()\n .refine(isHex, { message: 'Expected a hex string' })\n .transform((val) => hexToBigInt(val as `0x${string}`));\n\nconst gasPriceTierSchema = z.object({\n maxFeePerGas: hexBigIntSchema,\n maxPriorityFeePerGas: hexBigIntSchema,\n});\n\nexport interface SuggestedGasPrices {\n slow: { maxFeePerGas: bigint; maxPriorityFeePerGas: bigint };\n normal: { maxFeePerGas: bigint; maxPriorityFeePerGas: bigint };\n fast: { maxFeePerGas: bigint; maxPriorityFeePerGas: bigint };\n}\n\nconst suggestedPriceOptionsSchema: z.ZodType<SuggestedGasPrices> = z.object({\n slow: gasPriceTierSchema,\n normal: gasPriceTierSchema,\n fast: gasPriceTierSchema,\n});\n\n// ---------------------------------------------------------------------------\n// RPC call\n// ---------------------------------------------------------------------------\n\n/**\n * Calls the Avalanche C-Chain custom RPC method `eth_suggestPriceOptions` and\n * returns zod-validated fee values for each {@link FeeRateTier}.\n *\n * @internal – prefer {@link estimateEvmFeesPerGas} which selects the right\n * strategy automatically.\n */\nexport async function fetchSuggestedGasPrices(client: Pick<Client, 'request'>): Promise<SuggestedGasPrices> {\n const raw: unknown = await client.request({\n method: 'eth_suggestPriceOptions' as string,\n params: [] as unknown[],\n } as never);\n\n return suggestedPriceOptionsSchema.parse(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Public helper\n// ---------------------------------------------------------------------------\n\nexport interface EvmFeeEstimate {\n maxFeePerGas: bigint;\n maxPriorityFeePerGas: bigint;\n}\n\n/**\n * Returns EIP-1559 fee values for the given chain.\n *\n * - **C-Chain (43114 / 43113):** Uses the custom `eth_suggestPriceOptions` RPC\n * method and returns the bucket matching {@link tier} (default `'fast'`).\n * - **All other EVM chains:** Falls back to viem's `estimateFeesPerGas`\n * (i.e. `eth_feeHistory`). The `tier` parameter is ignored.\n */\nexport async function estimateEvmFeesPerGas(\n client: Pick<Client, 'request'> & Pick<PublicActions, 'estimateFeesPerGas'>,\n chain: Chain,\n tier: FeeRateTier = 'fast',\n): Promise<EvmFeeEstimate> {\n if (isCaip2AvalancheChainId(chain.chainId)) {\n const prices = await fetchSuggestedGasPrices(client);\n return prices[tier];\n }\n\n const fees = await client.estimateFeesPerGas();\n return {\n maxFeePerGas: fees.maxFeePerGas,\n maxPriorityFeePerGas: fees.maxPriorityFeePerGas ?? 0n,\n };\n}\n"],"mappings":"2HAuBA,MAAM,EAAkBA,EAAAA,EACrB,QAAQ,CACR,OAAOC,EAAAA,MAAO,CAAE,QAAS,wBAAyB,CAAC,CACnD,UAAW,IAAA,EAAA,EAAA,aAAoB,EAAqB,CAAC,CAElD,EAAqBD,EAAAA,EAAE,OAAO,CAClC,aAAc,EACd,qBAAsB,EACvB,CAAC,CAQI,EAA6DA,EAAAA,EAAE,OAAO,CAC1E,KAAM,EACN,OAAQ,EACR,KAAM,EACP,CAAC,CAaF,eAAsB,EAAwB,EAA8D,CAC1G,IAAM,EAAe,MAAM,EAAO,QAAQ,CACxC,OAAQ,0BACR,OAAQ,EAAE,CACX,CAAU,CAEX,OAAO,EAA4B,MAAM,EAAI,CAoB/C,eAAsB,EACpB,EACA,EACA,EAAoB,OACK,CACzB,GAAIE,EAAAA,wBAAwB,EAAM,QAAQ,CAExC,OADe,MAAM,EAAwB,EAAO,EACtC,GAGhB,IAAM,EAAO,MAAM,EAAO,oBAAoB,CAC9C,MAAO,CACL,aAAc,EAAK,aACnB,qBAAsB,EAAK,sBAAwB,GACpD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isCaip2AvalancheChainId as e}from"../_utils/chain.js";import{z as t}from"zod";import{hexToBigInt as n,isHex as r}from"viem";const i=t.string().refine(r,{message:`Expected a hex string`}).transform(e=>n(e)),a=t.object({maxFeePerGas:i,maxPriorityFeePerGas:i}),o=t.object({slow:a,normal:a,fast:a});async function s(e){let t=await e.request({method:`eth_suggestPriceOptions`,params:[]});return o.parse(t)}async function c(t,n,r=`fast`){if(e(n.chainId))return(await s(t))[r];let i=await t.estimateFeesPerGas();return{maxFeePerGas:i.maxFeePerGas,maxPriorityFeePerGas:i.maxPriorityFeePerGas??0n}}export{c as estimateEvmFeesPerGas};
|
|
2
|
+
//# sourceMappingURL=_evm-gas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_evm-gas.js","names":[],"sources":["../../src/transfer-service/_evm-gas.ts"],"sourcesContent":["/**\n * @module\n * @internal\n *\n * C-Chain–aware EVM gas price estimation.\n *\n * On Avalanche C-Chain (43114 / 43113) the node exposes a custom RPC method\n * `eth_suggestPriceOptions` that returns pre-bucketed EIP-1559 fee values for\n * `slow`, `normal`, and `fast` urgency tiers.\n *\n * For all other EVM chains the standard `eth_estimateFeesPerGas` path is used\n * and the tier parameter is ignored.\n */\nimport { hexToBigInt, isHex, type Client, type PublicActions } from 'viem';\nimport { z } from 'zod';\nimport { isCaip2AvalancheChainId } from '../_utils/chain';\nimport type { Chain } from '../types/chain';\nimport type { FeeRateTier } from '../types/fee';\n\n// ---------------------------------------------------------------------------\n// Zod schemas – validates the raw `eth_suggestPriceOptions` RPC response\n// ---------------------------------------------------------------------------\n\nconst hexBigIntSchema = z\n .string()\n .refine(isHex, { message: 'Expected a hex string' })\n .transform((val) => hexToBigInt(val as `0x${string}`));\n\nconst gasPriceTierSchema = z.object({\n maxFeePerGas: hexBigIntSchema,\n maxPriorityFeePerGas: hexBigIntSchema,\n});\n\nexport interface SuggestedGasPrices {\n slow: { maxFeePerGas: bigint; maxPriorityFeePerGas: bigint };\n normal: { maxFeePerGas: bigint; maxPriorityFeePerGas: bigint };\n fast: { maxFeePerGas: bigint; maxPriorityFeePerGas: bigint };\n}\n\nconst suggestedPriceOptionsSchema: z.ZodType<SuggestedGasPrices> = z.object({\n slow: gasPriceTierSchema,\n normal: gasPriceTierSchema,\n fast: gasPriceTierSchema,\n});\n\n// ---------------------------------------------------------------------------\n// RPC call\n// ---------------------------------------------------------------------------\n\n/**\n * Calls the Avalanche C-Chain custom RPC method `eth_suggestPriceOptions` and\n * returns zod-validated fee values for each {@link FeeRateTier}.\n *\n * @internal – prefer {@link estimateEvmFeesPerGas} which selects the right\n * strategy automatically.\n */\nexport async function fetchSuggestedGasPrices(client: Pick<Client, 'request'>): Promise<SuggestedGasPrices> {\n const raw: unknown = await client.request({\n method: 'eth_suggestPriceOptions' as string,\n params: [] as unknown[],\n } as never);\n\n return suggestedPriceOptionsSchema.parse(raw);\n}\n\n// ---------------------------------------------------------------------------\n// Public helper\n// ---------------------------------------------------------------------------\n\nexport interface EvmFeeEstimate {\n maxFeePerGas: bigint;\n maxPriorityFeePerGas: bigint;\n}\n\n/**\n * Returns EIP-1559 fee values for the given chain.\n *\n * - **C-Chain (43114 / 43113):** Uses the custom `eth_suggestPriceOptions` RPC\n * method and returns the bucket matching {@link tier} (default `'fast'`).\n * - **All other EVM chains:** Falls back to viem's `estimateFeesPerGas`\n * (i.e. `eth_feeHistory`). The `tier` parameter is ignored.\n */\nexport async function estimateEvmFeesPerGas(\n client: Pick<Client, 'request'> & Pick<PublicActions, 'estimateFeesPerGas'>,\n chain: Chain,\n tier: FeeRateTier = 'fast',\n): Promise<EvmFeeEstimate> {\n if (isCaip2AvalancheChainId(chain.chainId)) {\n const prices = await fetchSuggestedGasPrices(client);\n return prices[tier];\n }\n\n const fees = await client.estimateFeesPerGas();\n return {\n maxFeePerGas: fees.maxFeePerGas,\n maxPriorityFeePerGas: fees.maxPriorityFeePerGas ?? 0n,\n };\n}\n"],"mappings":"mIAuBA,MAAM,EAAkB,EACrB,QAAQ,CACR,OAAO,EAAO,CAAE,QAAS,wBAAyB,CAAC,CACnD,UAAW,GAAQ,EAAY,EAAqB,CAAC,CAElD,EAAqB,EAAE,OAAO,CAClC,aAAc,EACd,qBAAsB,EACvB,CAAC,CAQI,EAA6D,EAAE,OAAO,CAC1E,KAAM,EACN,OAAQ,EACR,KAAM,EACP,CAAC,CAaF,eAAsB,EAAwB,EAA8D,CAC1G,IAAM,EAAe,MAAM,EAAO,QAAQ,CACxC,OAAQ,0BACR,OAAQ,EAAE,CACX,CAAU,CAEX,OAAO,EAA4B,MAAM,EAAI,CAoB/C,eAAsB,EACpB,EACA,EACA,EAAoB,OACK,CACzB,GAAI,EAAwB,EAAM,QAAQ,CAExC,OADe,MAAM,EAAwB,EAAO,EACtC,GAGhB,IAAM,EAAO,MAAM,EAAO,oBAAoB,CAC9C,MAAO,CACL,aAAc,EAAK,aACnB,qBAAsB,EAAK,sBAAwB,GACpD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../errors.cjs`),t=require(`./_utils.cjs`);let n=require(`viem`);function r({transfer:r,updateListener:i},a){let o=new AbortController,s=()=>o.abort();if(r.status!==`source-pending`)return{cancel:s,result:Promise.resolve(r)};let c=a??t.getEvmClientForChain({chain:r.sourceChain}),l=structuredClone(r);return{cancel:s,result:(async()=>{if(l.status!==`source-pending`)return l;let{requiredConfirmationCount:r,txHash:a}=l.source;if(!(0,n.isHash)(a)){let t={...l,errorCode:e.ErrorCode.INVALID_PARAMS,errorReason:`Invalid source transaction hash`,failedAtMs:Date.now(),status:`failed`};return i(t),t}try{let n=await t.awaitOrAbort(c.waitForTransactionReceipt({confirmations:Math.max(r,1),hash:a}),o.signal);if(n.status===`aborted`)return l;if(n.value.status===`reverted`){let t={...l,errorCode:e.ErrorCode.TRANSACTION_REVERTED,errorReason:`Source transaction was reverted`,failedAtMs:Date.now(),status:`failed`};return i(t),t}let s={...l,completedAtMs:Date.now(),source:{...l.source,confirmationCount:r},status:`completed`,target:null};return i(s),s}catch{return l}})()}}exports.trackSameChainEvmTransfer=r;
|
|
2
|
+
//# sourceMappingURL=_tracking-utilities.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_tracking-utilities.cjs","names":["getEvmClientForChain","ErrorCode","awaitOrAbort"],"sources":["../../src/transfer-service/_tracking-utilities.ts"],"sourcesContent":["/**\n * @module\n * @internal\n *\n * Shared EVM transfer tracking utilities.\n */\nimport { isHash } from 'viem';\nimport { ErrorCode } from '../errors';\nimport type { TrackTransferProps } from '../types/service';\nimport type { FailedTransfer, Transfer } from '../types/transfer';\nimport { awaitOrAbort, getEvmClientForChain } from './_utils';\n\n/**\n * Track a same-chain EVM transfer by waiting for the transaction receipt.\n * Shared across services that produce same-chain transfers (markr, wrap-unwrap).\n *\n * @param evmClient - Optional pre-built client (for testing); defaults to `getEvmClientForChain`.\n */\nexport function trackSameChainEvmTransfer(\n { transfer, updateListener }: TrackTransferProps,\n evmClient?: ReturnType<typeof getEvmClientForChain>,\n): {\n cancel: () => void;\n result: Promise<Transfer>;\n} {\n const ac = new AbortController();\n const cancel = () => ac.abort();\n\n if (transfer.status !== 'source-pending') {\n return { cancel, result: Promise.resolve(transfer) };\n }\n\n const client = evmClient ?? getEvmClientForChain({ chain: transfer.sourceChain });\n const currentTransfer: Transfer = structuredClone(transfer);\n\n const executeTracking = async (): Promise<Transfer> => {\n if (currentTransfer.status !== 'source-pending') {\n return currentTransfer;\n }\n\n const { requiredConfirmationCount, txHash } = currentTransfer.source;\n\n if (!isHash(txHash)) {\n const failedTransfer: FailedTransfer = {\n ...currentTransfer,\n errorCode: ErrorCode.INVALID_PARAMS,\n errorReason: 'Invalid source transaction hash',\n failedAtMs: Date.now(),\n status: 'failed',\n };\n updateListener(failedTransfer);\n return failedTransfer;\n }\n\n try {\n const receiptResult = await awaitOrAbort(\n client.waitForTransactionReceipt({\n confirmations: Math.max(requiredConfirmationCount, 1),\n hash: txHash,\n }),\n ac.signal,\n );\n\n if (receiptResult.status === 'aborted') {\n return currentTransfer;\n }\n\n if (receiptResult.value.status === 'reverted') {\n const failedTransfer: FailedTransfer = {\n ...currentTransfer,\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Source transaction was reverted',\n failedAtMs: Date.now(),\n status: 'failed',\n };\n updateListener(failedTransfer);\n return failedTransfer;\n }\n\n const completedTransfer: Transfer = {\n ...currentTransfer,\n completedAtMs: Date.now(),\n source: {\n ...currentTransfer.source,\n confirmationCount: requiredConfirmationCount,\n },\n status: 'completed',\n target: null,\n };\n\n updateListener(completedTransfer);\n return completedTransfer;\n } catch {\n return currentTransfer;\n }\n };\n\n return { cancel, result: executeTracking() };\n}\n"],"mappings":"8HAkBA,SAAgB,EACd,CAAE,WAAU,kBACZ,EAIA,CACA,IAAM,EAAK,IAAI,gBACT,MAAe,EAAG,OAAO,CAE/B,GAAI,EAAS,SAAW,iBACtB,MAAO,CAAE,SAAQ,OAAQ,QAAQ,QAAQ,EAAS,CAAE,CAGtD,IAAM,EAAS,GAAaA,EAAAA,qBAAqB,CAAE,MAAO,EAAS,YAAa,CAAC,CAC3E,EAA4B,gBAAgB,EAAS,CAgE3D,MAAO,CAAE,SAAQ,QA9DO,SAA+B,CACrD,GAAI,EAAgB,SAAW,iBAC7B,OAAO,EAGT,GAAM,CAAE,4BAA2B,UAAW,EAAgB,OAE9D,GAAI,EAAA,EAAA,EAAA,QAAQ,EAAO,CAAE,CACnB,IAAM,EAAiC,CACrC,GAAG,EACH,UAAWC,EAAAA,UAAU,eACrB,YAAa,kCACb,WAAY,KAAK,KAAK,CACtB,OAAQ,SACT,CAED,OADA,EAAe,EAAe,CACvB,EAGT,GAAI,CACF,IAAM,EAAgB,MAAMC,EAAAA,aAC1B,EAAO,0BAA0B,CAC/B,cAAe,KAAK,IAAI,EAA2B,EAAE,CACrD,KAAM,EACP,CAAC,CACF,EAAG,OACJ,CAED,GAAI,EAAc,SAAW,UAC3B,OAAO,EAGT,GAAI,EAAc,MAAM,SAAW,WAAY,CAC7C,IAAM,EAAiC,CACrC,GAAG,EACH,UAAWD,EAAAA,UAAU,qBACrB,YAAa,kCACb,WAAY,KAAK,KAAK,CACtB,OAAQ,SACT,CAED,OADA,EAAe,EAAe,CACvB,EAGT,IAAM,EAA8B,CAClC,GAAG,EACH,cAAe,KAAK,KAAK,CACzB,OAAQ,CACN,GAAG,EAAgB,OACnB,kBAAmB,EACpB,CACD,OAAQ,YACR,OAAQ,KACT,CAGD,OADA,EAAe,EAAkB,CAC1B,OACD,CACN,OAAO,MAI+B,CAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e}from"../errors.js";import{awaitOrAbort as t,getEvmClientForChain as n}from"./_utils.js";import{isHash as r}from"viem";function i({transfer:i,updateListener:a},o){let s=new AbortController,c=()=>s.abort();if(i.status!==`source-pending`)return{cancel:c,result:Promise.resolve(i)};let l=o??n({chain:i.sourceChain}),u=structuredClone(i);return{cancel:c,result:(async()=>{if(u.status!==`source-pending`)return u;let{requiredConfirmationCount:n,txHash:i}=u.source;if(!r(i)){let t={...u,errorCode:e.INVALID_PARAMS,errorReason:`Invalid source transaction hash`,failedAtMs:Date.now(),status:`failed`};return a(t),t}try{let r=await t(l.waitForTransactionReceipt({confirmations:Math.max(n,1),hash:i}),s.signal);if(r.status===`aborted`)return u;if(r.value.status===`reverted`){let t={...u,errorCode:e.TRANSACTION_REVERTED,errorReason:`Source transaction was reverted`,failedAtMs:Date.now(),status:`failed`};return a(t),t}let o={...u,completedAtMs:Date.now(),source:{...u.source,confirmationCount:n},status:`completed`,target:null};return a(o),o}catch{return u}})()}}export{i as trackSameChainEvmTransfer};
|
|
2
|
+
//# sourceMappingURL=_tracking-utilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_tracking-utilities.js","names":[],"sources":["../../src/transfer-service/_tracking-utilities.ts"],"sourcesContent":["/**\n * @module\n * @internal\n *\n * Shared EVM transfer tracking utilities.\n */\nimport { isHash } from 'viem';\nimport { ErrorCode } from '../errors';\nimport type { TrackTransferProps } from '../types/service';\nimport type { FailedTransfer, Transfer } from '../types/transfer';\nimport { awaitOrAbort, getEvmClientForChain } from './_utils';\n\n/**\n * Track a same-chain EVM transfer by waiting for the transaction receipt.\n * Shared across services that produce same-chain transfers (markr, wrap-unwrap).\n *\n * @param evmClient - Optional pre-built client (for testing); defaults to `getEvmClientForChain`.\n */\nexport function trackSameChainEvmTransfer(\n { transfer, updateListener }: TrackTransferProps,\n evmClient?: ReturnType<typeof getEvmClientForChain>,\n): {\n cancel: () => void;\n result: Promise<Transfer>;\n} {\n const ac = new AbortController();\n const cancel = () => ac.abort();\n\n if (transfer.status !== 'source-pending') {\n return { cancel, result: Promise.resolve(transfer) };\n }\n\n const client = evmClient ?? getEvmClientForChain({ chain: transfer.sourceChain });\n const currentTransfer: Transfer = structuredClone(transfer);\n\n const executeTracking = async (): Promise<Transfer> => {\n if (currentTransfer.status !== 'source-pending') {\n return currentTransfer;\n }\n\n const { requiredConfirmationCount, txHash } = currentTransfer.source;\n\n if (!isHash(txHash)) {\n const failedTransfer: FailedTransfer = {\n ...currentTransfer,\n errorCode: ErrorCode.INVALID_PARAMS,\n errorReason: 'Invalid source transaction hash',\n failedAtMs: Date.now(),\n status: 'failed',\n };\n updateListener(failedTransfer);\n return failedTransfer;\n }\n\n try {\n const receiptResult = await awaitOrAbort(\n client.waitForTransactionReceipt({\n confirmations: Math.max(requiredConfirmationCount, 1),\n hash: txHash,\n }),\n ac.signal,\n );\n\n if (receiptResult.status === 'aborted') {\n return currentTransfer;\n }\n\n if (receiptResult.value.status === 'reverted') {\n const failedTransfer: FailedTransfer = {\n ...currentTransfer,\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Source transaction was reverted',\n failedAtMs: Date.now(),\n status: 'failed',\n };\n updateListener(failedTransfer);\n return failedTransfer;\n }\n\n const completedTransfer: Transfer = {\n ...currentTransfer,\n completedAtMs: Date.now(),\n source: {\n ...currentTransfer.source,\n confirmationCount: requiredConfirmationCount,\n },\n status: 'completed',\n target: null,\n };\n\n updateListener(completedTransfer);\n return completedTransfer;\n } catch {\n return currentTransfer;\n }\n };\n\n return { cancel, result: executeTracking() };\n}\n"],"mappings":"4IAkBA,SAAgB,EACd,CAAE,WAAU,kBACZ,EAIA,CACA,IAAM,EAAK,IAAI,gBACT,MAAe,EAAG,OAAO,CAE/B,GAAI,EAAS,SAAW,iBACtB,MAAO,CAAE,SAAQ,OAAQ,QAAQ,QAAQ,EAAS,CAAE,CAGtD,IAAM,EAAS,GAAa,EAAqB,CAAE,MAAO,EAAS,YAAa,CAAC,CAC3E,EAA4B,gBAAgB,EAAS,CAgE3D,MAAO,CAAE,SAAQ,QA9DO,SAA+B,CACrD,GAAI,EAAgB,SAAW,iBAC7B,OAAO,EAGT,GAAM,CAAE,4BAA2B,UAAW,EAAgB,OAE9D,GAAI,CAAC,EAAO,EAAO,CAAE,CACnB,IAAM,EAAiC,CACrC,GAAG,EACH,UAAW,EAAU,eACrB,YAAa,kCACb,WAAY,KAAK,KAAK,CACtB,OAAQ,SACT,CAED,OADA,EAAe,EAAe,CACvB,EAGT,GAAI,CACF,IAAM,EAAgB,MAAM,EAC1B,EAAO,0BAA0B,CAC/B,cAAe,KAAK,IAAI,EAA2B,EAAE,CACrD,KAAM,EACP,CAAC,CACF,EAAG,OACJ,CAED,GAAI,EAAc,SAAW,UAC3B,OAAO,EAGT,GAAI,EAAc,MAAM,SAAW,WAAY,CAC7C,IAAM,EAAiC,CACrC,GAAG,EACH,UAAW,EAAU,qBACrB,YAAa,kCACb,WAAY,KAAK,KAAK,CACtB,OAAQ,SACT,CAED,OADA,EAAe,EAAe,CACvB,EAGT,IAAM,EAA8B,CAClC,GAAG,EACH,cAAe,KAAK,KAAK,CACzB,OAAQ,CACN,GAAG,EAAgB,OACnB,kBAAmB,EACpB,CACD,OAAQ,YACR,OAAQ,KACT,CAGD,OADA,EAAe,EAAkB,CAC1B,OACD,CACN,OAAO,MAI+B,CAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t,fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}function t(t,n){return{...e(t,n.environment),status:`source-pending`,source:{confirmationCount:0,requiredConfirmationCount:n.requiredConfirmationCount,startedAtMs:n.startedAtMs,txHash:n.txHash}}}exports.sourcePendingTransferFromQuote=t;
|
|
2
|
+
//# sourceMappingURL=_transfer-utilities.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_transfer-utilities.cjs","names":[],"sources":["../../src/transfer-service/_transfer-utilities.ts"],"sourcesContent":["/**\n * @module\n * @internal\n *\n * Shared helpers for constructing Transfer objects from Quotes.\n */\nimport type { ErrorCode } from '../errors';\nimport type { Quote } from '../types/quote';\nimport type { FailedTransfer, SourcePendingTransfer, TransferBase } from '../types/transfer';\nimport type { Environment } from '../constants';\n\n/** Extract the common TransferBase fields from a Quote. */\nfunction transferBaseFromQuote(quote: Quote, environment: Environment): Omit<TransferBase, 'status'> {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment,\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 type: quote.serviceType,\n };\n}\n\nexport function sourcePendingTransferFromQuote(\n quote: Quote,\n opts: {\n environment: Environment;\n txHash: string;\n startedAtMs: number;\n requiredConfirmationCount: number;\n },\n): SourcePendingTransfer {\n return {\n ...transferBaseFromQuote(quote, opts.environment),\n status: 'source-pending',\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: opts.requiredConfirmationCount,\n startedAtMs: opts.startedAtMs,\n txHash: opts.txHash,\n },\n };\n}\n\n/**\n * Build a `FailedTransfer` from a quote.\n *\n * Centralises the boilerplate that every transfer-service handler repeats\n * when it needs to return a failed transfer before a source tx is recorded.\n */\nexport function failedTransferFromQuote(\n quote: Quote,\n options: {\n environment: Environment;\n errorCode: ErrorCode;\n errorReason: string;\n },\n): FailedTransfer {\n return {\n ...transferBaseFromQuote(quote, options.environment),\n status: 'failed',\n errorCode: options.errorCode,\n errorReason: options.errorReason,\n failedAtMs: Date.now(),\n };\n}\n"],"mappings":"AAYA,SAAS,EAAsB,EAAc,EAAwD,CACnG,MAAO,CACL,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,cACA,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,GAAI,EAAM,GACV,cAAe,EAAM,cACrB,YAAa,EAAM,QACnB,YAAa,EAAM,YACnB,YAAa,EAAM,SACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UACjB,KAAM,EAAM,YACb,CAGH,SAAgB,EACd,EACA,EAMuB,CACvB,MAAO,CACL,GAAG,EAAsB,EAAO,EAAK,YAAY,CACjD,OAAQ,iBACR,OAAQ,CACN,kBAAmB,EACnB,0BAA2B,EAAK,0BAChC,YAAa,EAAK,YAClB,OAAQ,EAAK,OACd,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t,fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}function t(t,n){return{...e(t,n.environment),status:`source-pending`,source:{confirmationCount:0,requiredConfirmationCount:n.requiredConfirmationCount,startedAtMs:n.startedAtMs,txHash:n.txHash}}}export{t as sourcePendingTransferFromQuote};
|
|
2
|
+
//# sourceMappingURL=_transfer-utilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_transfer-utilities.js","names":[],"sources":["../../src/transfer-service/_transfer-utilities.ts"],"sourcesContent":["/**\n * @module\n * @internal\n *\n * Shared helpers for constructing Transfer objects from Quotes.\n */\nimport type { ErrorCode } from '../errors';\nimport type { Quote } from '../types/quote';\nimport type { FailedTransfer, SourcePendingTransfer, TransferBase } from '../types/transfer';\nimport type { Environment } from '../constants';\n\n/** Extract the common TransferBase fields from a Quote. */\nfunction transferBaseFromQuote(quote: Quote, environment: Environment): Omit<TransferBase, 'status'> {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment,\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 type: quote.serviceType,\n };\n}\n\nexport function sourcePendingTransferFromQuote(\n quote: Quote,\n opts: {\n environment: Environment;\n txHash: string;\n startedAtMs: number;\n requiredConfirmationCount: number;\n },\n): SourcePendingTransfer {\n return {\n ...transferBaseFromQuote(quote, opts.environment),\n status: 'source-pending',\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: opts.requiredConfirmationCount,\n startedAtMs: opts.startedAtMs,\n txHash: opts.txHash,\n },\n };\n}\n\n/**\n * Build a `FailedTransfer` from a quote.\n *\n * Centralises the boilerplate that every transfer-service handler repeats\n * when it needs to return a failed transfer before a source tx is recorded.\n */\nexport function failedTransferFromQuote(\n quote: Quote,\n options: {\n environment: Environment;\n errorCode: ErrorCode;\n errorReason: string;\n },\n): FailedTransfer {\n return {\n ...transferBaseFromQuote(quote, options.environment),\n status: 'failed',\n errorCode: options.errorCode,\n errorReason: options.errorReason,\n failedAtMs: Date.now(),\n };\n}\n"],"mappings":"AAYA,SAAS,EAAsB,EAAc,EAAwD,CACnG,MAAO,CACL,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,cACA,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,GAAI,EAAM,GACV,cAAe,EAAM,cACrB,YAAa,EAAM,QACnB,YAAa,EAAM,YACnB,YAAa,EAAM,SACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UACjB,KAAM,EAAM,YACb,CAGH,SAAgB,EACd,EACA,EAMuB,CACvB,MAAO,CACL,GAAG,EAAsB,EAAO,EAAK,YAAY,CACjD,OAAQ,iBACR,OAAQ,CACN,kBAAmB,EACnB,0BAA2B,EAAK,0BAChC,YAAa,EAAK,YAClB,OAAQ,EAAK,OACd,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../errors.cjs`),t=require(`../utils/caip.cjs`);let n=require(`viem`),r=require(`@solana/kit`);function i(n){let{namespace:r,reference:i}=t.splitCaip2ChainId(n.chainId);if(r!==`eip155`)throw new e.InvalidParamsError(`Can not get Viem chain for unsupported chain`,`Unsupported chain namespace: ${r}. Only eip155 chains are supported.`);return{id:Number(i),name:n.chainName,nativeCurrency:{decimals:n.networkToken.decimals,symbol:n.networkToken.symbol,name:n.networkToken.name},rpcUrls:{default:{http:[n.rpcUrl]},public:{http:[n.rpcUrl]}},...n.utilityAddresses?.multicall&&{contracts:{multicall3:{address:n.utilityAddresses.multicall}}}}}function a({chain:e}){return(0,n.createWalletClient)({chain:i(e),transport:(0,n.http)(e.rpcUrl,{batch:!0,retryCount:6,retryDelay:200,timeout:15e3})}).extend(n.publicActions)}function o({chain:e}){return(0,r.createSolanaRpc)(e.rpcUrl)}function s(t,n){if(n===void 0)return t;if(!Number.isInteger(n)||n<0)throw new e.InvalidParamsError(`Invalid feeUnitsMarginBps`,`feeUnitsMarginBps must be a non-negative integer, but got ${n}`);return t*BigInt(1e4+n)/10000n}function c({timeoutMs:e,signal:t}){return new Promise(n=>{let r=!1,i=()=>{r||(r=!0,clearTimeout(o),t.removeEventListener(`abort`,a),n())},a=()=>{i()},o=setTimeout(()=>{i()},e);t.addEventListener(`abort`,a,{once:!0}),t.aborted&&i()})}const l=Symbol(`aborted`);async function u(e,t){let n=await Promise.race([e,new Promise(e=>{t.addEventListener(`abort`,()=>e(l),{once:!0})})]);return n===l||t.aborted?{status:`aborted`}:{status:`ok`,value:n}}function d(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t.environment,errorCode:t.errorCode,errorReason:t.errorReason,failedAtMs:Date.now(),fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,status:`failed`,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}exports.applyFeeUnitsBpsMargin=s,exports.awaitOrAbort=u,exports.getEvmClientForChain=a,exports.getSolanaRpcForChain=o,exports.makeFailedTransferFromQuote=d,exports.waitForTimeoutOrAbort=c;
|
|
2
|
+
//# sourceMappingURL=_utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.cjs","names":["splitCaip2ChainId","InvalidParamsError","publicActions"],"sources":["../../src/transfer-service/_utils.ts"],"sourcesContent":["/**\n * @module\n * @internal\n *\n * Internal utility functions for transfer services.\n */\nimport {\n createSolanaRpc,\n isSolanaError,\n SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED,\n SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY,\n SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR,\n type Rpc,\n type SolanaRpcApi,\n} from '@solana/kit';\nimport {\n createWalletClient,\n http,\n publicActions,\n WaitForTransactionReceiptTimeoutError,\n type Client,\n type HttpTransport,\n type PublicActions,\n type Chain as ViemChain,\n type WalletRpcSchema,\n} from 'viem';\nimport { splitCaip2ChainId } from '../utils/caip';\nimport type { Environment } from '../constants';\nimport { ErrorCode, InvalidParamsError } from '../errors';\nimport type { Chain } from '../types/chain';\nimport type { Quote } from '../types/quote';\nimport type { FailedTransfer } from '../types/transfer';\n\nfunction getViemChain(chain: Chain): ViemChain {\n const { namespace, reference: chainId } = splitCaip2ChainId(chain.chainId);\n\n if (namespace !== 'eip155') {\n throw new InvalidParamsError(\n 'Can not get Viem chain for unsupported chain',\n `Unsupported chain namespace: ${namespace}. Only eip155 chains are supported.`,\n );\n }\n\n return {\n id: Number(chainId),\n name: chain.chainName,\n nativeCurrency: {\n decimals: chain.networkToken.decimals,\n symbol: chain.networkToken.symbol,\n name: chain.networkToken.name,\n },\n rpcUrls: {\n default: {\n http: [chain.rpcUrl],\n },\n public: {\n http: [chain.rpcUrl],\n },\n },\n ...(chain.utilityAddresses?.multicall && {\n contracts: {\n multicall3: {\n address: chain.utilityAddresses.multicall,\n },\n },\n }),\n };\n}\n\nexport function getEvmClientForChain({\n chain,\n}: {\n chain: Chain;\n}): Client<HttpTransport, ViemChain, undefined, WalletRpcSchema, PublicActions> {\n const chainInfo = getViemChain(chain);\n\n const transport = http(chain.rpcUrl, {\n batch: true,\n retryCount: 6,\n retryDelay: 200,\n timeout: 15_000,\n });\n\n const client = createWalletClient({\n chain: chainInfo,\n transport,\n }).extend(publicActions);\n\n return client;\n}\n\nexport function getSolanaRpcForChain({ chain }: { chain: Chain }): Rpc<SolanaRpcApi> {\n return createSolanaRpc(chain.rpcUrl);\n}\n\nexport function applyFeeUnitsBpsMargin(feeUnits: bigint, feeUnitsMarginBps: number | undefined): bigint {\n if (feeUnitsMarginBps === undefined) {\n return feeUnits;\n }\n\n if (!Number.isInteger(feeUnitsMarginBps) || feeUnitsMarginBps < 0) {\n throw new InvalidParamsError(\n 'Invalid feeUnitsMarginBps',\n `feeUnitsMarginBps must be a non-negative integer, but got ${feeUnitsMarginBps}`,\n );\n }\n\n return (feeUnits * BigInt(10_000 + feeUnitsMarginBps)) / 10_000n;\n}\n\nexport function scaleAmount(amount: bigint, multiplier: number, precisionFactor = 1_000_000): bigint {\n // Verify precisionFactor is a positive integer\n if (!Number.isInteger(precisionFactor) || precisionFactor <= 0) {\n throw new Error('precisionFactor must be a positive integer');\n }\n\n return (amount * BigInt(multiplier * precisionFactor)) / BigInt(precisionFactor);\n}\n\n/**\n * Subtracts the partner fee from the given amount.\n *\n * @param amount - The original amount.\n * @param partnerFeeBps - Fee in basis points (1 bps = 0.01%)\n * @returns The amount after subtracting the partner fee.\n *\n * @throws {Error} If partnerFeeBps is not an integer or is out of range.\n */\nexport function subtractPartnerFee(amount: bigint, partnerFeeBps: number): bigint {\n if (!Number.isInteger(partnerFeeBps)) {\n throw new Error('partnerFeeBps must be an integer');\n }\n\n if (partnerFeeBps < 0 || partnerFeeBps > 10_000) {\n throw new Error('partnerFeeBps must be between 0 and 10,000');\n }\n\n return (amount * BigInt(10_000 - partnerFeeBps)) / 10_000n;\n}\n\n/**\n * Calculates the fee percentage given an input amount and a fee amount.\n *\n * @param inputAmount - The original input amount.\n * @param feeAmount - The fee amount to be calculated as a percentage of the input amount.\n * @returns An object containing the fee percentage and the number of decimal places.\n *\n * @throws {Error} If inputAmount is less than or equal to zero, or if feeAmount is negative.\n */\nexport function calculateFeePercentage(\n inputAmount: bigint,\n feeAmount: bigint,\n): { feePercentage: number; feePercentageDecimals: number } {\n if (inputAmount <= 0n) {\n throw new Error('Input amount must be greater than zero');\n }\n\n if (feeAmount < 0n) {\n throw new Error('Fee amount must be >= zero');\n }\n\n if (feeAmount === 0n) {\n return { feePercentage: 0, feePercentageDecimals: 0 };\n }\n\n const MAX_DECIMALS = 18;\n\n for (let decimals = 0; decimals <= MAX_DECIMALS; decimals++) {\n const scale = 10n ** BigInt(decimals);\n const numerator = feeAmount * 100n * scale;\n\n if (numerator % inputAmount === 0n) {\n const value = numerator / inputAmount;\n\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error('feePercentage exceeds Number.MAX_SAFE_INTEGER');\n }\n\n return {\n feePercentage: Number(value),\n feePercentageDecimals: decimals,\n };\n }\n }\n\n // Fallback: highest precision, truncated\n const scale = 10n ** BigInt(MAX_DECIMALS);\n const value = (feeAmount * 100n * scale) / inputAmount;\n\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error('feePercentage exceeds Number.MAX_SAFE_INTEGER');\n }\n\n return {\n feePercentage: Number(value),\n feePercentageDecimals: MAX_DECIMALS,\n };\n}\n\n/**\n * Maps Viem errors to corresponding ErrorCode values.\n *\n * @param error - The error thrown by Viem.\n * @returns The corresponding ErrorCode.\n */\nexport function getErrorCodeForViemError(error: unknown): ErrorCode {\n if (error instanceof WaitForTransactionReceiptTimeoutError) {\n return ErrorCode.TIMEOUT;\n }\n\n return ErrorCode.TRANSACTION_REVERTED;\n}\n\n/**\n * Maps `@solana/kit` errors to SDK ErrorCode values.\n *\n * `@solana/kit` throws typed `SolanaError` instances with numeric codes.\n * We use the `isSolanaError` type guard to match specific codes:\n *\n * - Transport / node-health errors → SERVICE_NOT_AVAILABLE\n * (HTTP transport failures, node-unhealthy JSON-RPC responses)\n *\n * - Block-height exceeded → TIMEOUT\n * (the transaction's blockhash has expired — the 150-slot validity\n * window has passed and the tx can no longer land)\n *\n * - Everything else → UNKNOWN\n * (unexpected JSON-RPC errors, malformed responses, internal errors, etc.)\n */\nexport function getErrorCodeForSolanaRpcError(error: unknown): ErrorCode {\n if (\n isSolanaError(error, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY) ||\n isSolanaError(error, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR)\n ) {\n return ErrorCode.SERVICE_NOT_AVAILABLE;\n }\n\n if (isSolanaError(error, SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED)) {\n return ErrorCode.TIMEOUT;\n }\n\n return ErrorCode.UNKNOWN;\n}\n\n/**\n * Waits for either a timeout to elapse or an abort signal to be triggered.\n *\n * @param timeoutMs - The timeout duration in milliseconds.\n * @param signal - The AbortSignal to listen for abort events.\n *\n * @returns A promise that resolves when either the timeout elapses or the abort signal is triggered.\n */\nexport function waitForTimeoutOrAbort({\n timeoutMs,\n signal,\n}: Readonly<{\n timeoutMs: number;\n signal: AbortSignal;\n}>): Promise<void> {\n return new Promise((resolve) => {\n let settled = false;\n\n const finish = (): void => {\n if (settled) {\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n signal.removeEventListener('abort', onAbort);\n resolve();\n };\n\n const onAbort = (): void => {\n finish();\n };\n\n const timeoutId = setTimeout(() => {\n finish();\n }, timeoutMs);\n\n signal.addEventListener('abort', onAbort, { once: true });\n\n if (signal.aborted) {\n finish();\n }\n });\n}\n\nconst ABORT_TAG: unique symbol = Symbol('aborted');\n\n/**\n * @internal\n *\n * Waits for a promise to resolve or an abort signal to be triggered, whichever comes first.\n *\n * If the promise resolves first, returns an object with status 'ok' and the resolved value.\n * If the abort signal is triggered first, returns an object with status 'aborted'.\n *\n * @param awaitable - The promise to wait for.\n * @param signal - The AbortSignal to listen for abort events.\n * @returns A promise that resolves to an object indicating whether the operation was aborted or completed successfully.\n *\n * @throws Any error thrown by the awaitable promise will be propagated to the caller.\n *\n * @example\n * ```ts\n * const ac = new AbortController();\n * const result = await awaitOrAbort(someAsyncOperation(), ac.signal);\n *\n * if (result.status === 'aborted') {\n * console.log('Operation was aborted');\n * } else {\n * console.log('Operation completed with value:', result.value);\n * }\n * ```\n */\nexport async function awaitOrAbort<T>(\n awaitable: Promise<T>,\n signal: AbortSignal,\n): Promise<{ status: 'aborted' } | { status: 'ok'; value: T }> {\n const maybeAwaitable = await Promise.race([\n awaitable,\n new Promise<typeof ABORT_TAG>((resolve) => {\n signal.addEventListener('abort', () => resolve(ABORT_TAG), { once: true });\n }),\n ]);\n\n if (maybeAwaitable === ABORT_TAG || signal.aborted) {\n return { status: 'aborted' };\n }\n\n return { status: 'ok', value: maybeAwaitable };\n}\n\n/**\n * Build a `FailedTransfer` from a quote.\n *\n * Centralises the boilerplate that every transfer-service handler repeats\n * when it needs to return a failed transfer before a source tx is recorded.\n */\nexport function makeFailedTransferFromQuote(\n quote: Quote,\n options: {\n environment: Environment;\n errorCode: ErrorCode;\n errorReason: string;\n },\n): FailedTransfer {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment: options.environment,\n errorCode: options.errorCode,\n errorReason: options.errorReason,\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 status: 'failed',\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: quote.serviceType,\n };\n}\n"],"mappings":"4JAiCA,SAAS,EAAa,EAAyB,CAC7C,GAAM,CAAE,YAAW,UAAW,GAAYA,EAAAA,kBAAkB,EAAM,QAAQ,CAE1E,GAAI,IAAc,SAChB,MAAM,IAAIC,EAAAA,mBACR,+CACA,gCAAgC,EAAU,qCAC3C,CAGH,MAAO,CACL,GAAI,OAAO,EAAQ,CACnB,KAAM,EAAM,UACZ,eAAgB,CACd,SAAU,EAAM,aAAa,SAC7B,OAAQ,EAAM,aAAa,OAC3B,KAAM,EAAM,aAAa,KAC1B,CACD,QAAS,CACP,QAAS,CACP,KAAM,CAAC,EAAM,OAAO,CACrB,CACD,OAAQ,CACN,KAAM,CAAC,EAAM,OAAO,CACrB,CACF,CACD,GAAI,EAAM,kBAAkB,WAAa,CACvC,UAAW,CACT,WAAY,CACV,QAAS,EAAM,iBAAiB,UACjC,CACF,CACF,CACF,CAGH,SAAgB,EAAqB,CACnC,SAG8E,CAe9E,OAAA,EAAA,EAAA,oBALkC,CAChC,MAVgB,EAAa,EAAM,CAWnC,WAAA,EAAA,EAAA,MATqB,EAAM,OAAQ,CACnC,MAAO,GACP,WAAY,EACZ,WAAY,IACZ,QAAS,KACV,CAAC,CAKD,CAAC,CAAC,OAAOC,EAAAA,cAAc,CAK1B,SAAgB,EAAqB,CAAE,SAA8C,CACnF,OAAA,EAAA,EAAA,iBAAuB,EAAM,OAAO,CAGtC,SAAgB,EAAuB,EAAkB,EAA+C,CACtG,GAAI,IAAsB,IAAA,GACxB,OAAO,EAGT,GAAI,CAAC,OAAO,UAAU,EAAkB,EAAI,EAAoB,EAC9D,MAAM,IAAID,EAAAA,mBACR,4BACA,6DAA6D,IAC9D,CAGH,OAAQ,EAAW,OAAO,IAAS,EAAkB,CAAI,OAiJ3D,SAAgB,EAAsB,CACpC,YACA,UAIiB,CACjB,OAAO,IAAI,QAAS,GAAY,CAC9B,IAAI,EAAU,GAER,MAAqB,CACrB,IAIJ,EAAU,GACV,aAAa,EAAU,CACvB,EAAO,oBAAoB,QAAS,EAAQ,CAC5C,GAAS,GAGL,MAAsB,CAC1B,GAAQ,EAGJ,EAAY,eAAiB,CACjC,GAAQ,EACP,EAAU,CAEb,EAAO,iBAAiB,QAAS,EAAS,CAAE,KAAM,GAAM,CAAC,CAErD,EAAO,SACT,GAAQ,EAEV,CAGJ,MAAM,EAA2B,OAAO,UAAU,CA4BlD,eAAsB,EACpB,EACA,EAC6D,CAC7D,IAAM,EAAiB,MAAM,QAAQ,KAAK,CACxC,EACA,IAAI,QAA2B,GAAY,CACzC,EAAO,iBAAiB,YAAe,EAAQ,EAAU,CAAE,CAAE,KAAM,GAAM,CAAC,EAC1E,CACH,CAAC,CAMF,OAJI,IAAmB,GAAa,EAAO,QAClC,CAAE,OAAQ,UAAW,CAGvB,CAAE,OAAQ,KAAM,MAAO,EAAgB,CAShD,SAAgB,EACd,EACA,EAKgB,CAChB,MAAO,CACL,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,YAAa,EAAQ,YACrB,UAAW,EAAQ,UACnB,YAAa,EAAQ,YACrB,WAAY,KAAK,KAAK,CACtB,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,GAAI,EAAM,GACV,cAAe,EAAM,cACrB,YAAa,EAAM,QACnB,YAAa,EAAM,YACnB,OAAQ,SACR,YAAa,EAAM,SACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UACjB,KAAM,EAAM,YACb"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{InvalidParamsError as e}from"../errors.js";import{splitCaip2ChainId as t}from"../utils/caip.js";import{createWalletClient as n,http as r,publicActions as i}from"viem";import{createSolanaRpc as a}from"@solana/kit";function o(n){let{namespace:r,reference:i}=t(n.chainId);if(r!==`eip155`)throw new e(`Can not get Viem chain for unsupported chain`,`Unsupported chain namespace: ${r}. Only eip155 chains are supported.`);return{id:Number(i),name:n.chainName,nativeCurrency:{decimals:n.networkToken.decimals,symbol:n.networkToken.symbol,name:n.networkToken.name},rpcUrls:{default:{http:[n.rpcUrl]},public:{http:[n.rpcUrl]}},...n.utilityAddresses?.multicall&&{contracts:{multicall3:{address:n.utilityAddresses.multicall}}}}}function s({chain:e}){return n({chain:o(e),transport:r(e.rpcUrl,{batch:!0,retryCount:6,retryDelay:200,timeout:15e3})}).extend(i)}function c({chain:e}){return a(e.rpcUrl)}function l(t,n){if(n===void 0)return t;if(!Number.isInteger(n)||n<0)throw new e(`Invalid feeUnitsMarginBps`,`feeUnitsMarginBps must be a non-negative integer, but got ${n}`);return t*BigInt(1e4+n)/10000n}function u({timeoutMs:e,signal:t}){return new Promise(n=>{let r=!1,i=()=>{r||(r=!0,clearTimeout(o),t.removeEventListener(`abort`,a),n())},a=()=>{i()},o=setTimeout(()=>{i()},e);t.addEventListener(`abort`,a,{once:!0}),t.aborted&&i()})}const d=Symbol(`aborted`);async function f(e,t){let n=await Promise.race([e,new Promise(e=>{t.addEventListener(`abort`,()=>e(d),{once:!0})})]);return n===d||t.aborted?{status:`aborted`}:{status:`ok`,value:n}}function p(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t.environment,errorCode:t.errorCode,errorReason:t.errorReason,failedAtMs:Date.now(),fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,status:`failed`,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}export{l as applyFeeUnitsBpsMargin,f as awaitOrAbort,s as getEvmClientForChain,c as getSolanaRpcForChain,p as makeFailedTransferFromQuote,u as waitForTimeoutOrAbort};
|
|
2
|
+
//# sourceMappingURL=_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.js","names":[],"sources":["../../src/transfer-service/_utils.ts"],"sourcesContent":["/**\n * @module\n * @internal\n *\n * Internal utility functions for transfer services.\n */\nimport {\n createSolanaRpc,\n isSolanaError,\n SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED,\n SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY,\n SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR,\n type Rpc,\n type SolanaRpcApi,\n} from '@solana/kit';\nimport {\n createWalletClient,\n http,\n publicActions,\n WaitForTransactionReceiptTimeoutError,\n type Client,\n type HttpTransport,\n type PublicActions,\n type Chain as ViemChain,\n type WalletRpcSchema,\n} from 'viem';\nimport { splitCaip2ChainId } from '../utils/caip';\nimport type { Environment } from '../constants';\nimport { ErrorCode, InvalidParamsError } from '../errors';\nimport type { Chain } from '../types/chain';\nimport type { Quote } from '../types/quote';\nimport type { FailedTransfer } from '../types/transfer';\n\nfunction getViemChain(chain: Chain): ViemChain {\n const { namespace, reference: chainId } = splitCaip2ChainId(chain.chainId);\n\n if (namespace !== 'eip155') {\n throw new InvalidParamsError(\n 'Can not get Viem chain for unsupported chain',\n `Unsupported chain namespace: ${namespace}. Only eip155 chains are supported.`,\n );\n }\n\n return {\n id: Number(chainId),\n name: chain.chainName,\n nativeCurrency: {\n decimals: chain.networkToken.decimals,\n symbol: chain.networkToken.symbol,\n name: chain.networkToken.name,\n },\n rpcUrls: {\n default: {\n http: [chain.rpcUrl],\n },\n public: {\n http: [chain.rpcUrl],\n },\n },\n ...(chain.utilityAddresses?.multicall && {\n contracts: {\n multicall3: {\n address: chain.utilityAddresses.multicall,\n },\n },\n }),\n };\n}\n\nexport function getEvmClientForChain({\n chain,\n}: {\n chain: Chain;\n}): Client<HttpTransport, ViemChain, undefined, WalletRpcSchema, PublicActions> {\n const chainInfo = getViemChain(chain);\n\n const transport = http(chain.rpcUrl, {\n batch: true,\n retryCount: 6,\n retryDelay: 200,\n timeout: 15_000,\n });\n\n const client = createWalletClient({\n chain: chainInfo,\n transport,\n }).extend(publicActions);\n\n return client;\n}\n\nexport function getSolanaRpcForChain({ chain }: { chain: Chain }): Rpc<SolanaRpcApi> {\n return createSolanaRpc(chain.rpcUrl);\n}\n\nexport function applyFeeUnitsBpsMargin(feeUnits: bigint, feeUnitsMarginBps: number | undefined): bigint {\n if (feeUnitsMarginBps === undefined) {\n return feeUnits;\n }\n\n if (!Number.isInteger(feeUnitsMarginBps) || feeUnitsMarginBps < 0) {\n throw new InvalidParamsError(\n 'Invalid feeUnitsMarginBps',\n `feeUnitsMarginBps must be a non-negative integer, but got ${feeUnitsMarginBps}`,\n );\n }\n\n return (feeUnits * BigInt(10_000 + feeUnitsMarginBps)) / 10_000n;\n}\n\nexport function scaleAmount(amount: bigint, multiplier: number, precisionFactor = 1_000_000): bigint {\n // Verify precisionFactor is a positive integer\n if (!Number.isInteger(precisionFactor) || precisionFactor <= 0) {\n throw new Error('precisionFactor must be a positive integer');\n }\n\n return (amount * BigInt(multiplier * precisionFactor)) / BigInt(precisionFactor);\n}\n\n/**\n * Subtracts the partner fee from the given amount.\n *\n * @param amount - The original amount.\n * @param partnerFeeBps - Fee in basis points (1 bps = 0.01%)\n * @returns The amount after subtracting the partner fee.\n *\n * @throws {Error} If partnerFeeBps is not an integer or is out of range.\n */\nexport function subtractPartnerFee(amount: bigint, partnerFeeBps: number): bigint {\n if (!Number.isInteger(partnerFeeBps)) {\n throw new Error('partnerFeeBps must be an integer');\n }\n\n if (partnerFeeBps < 0 || partnerFeeBps > 10_000) {\n throw new Error('partnerFeeBps must be between 0 and 10,000');\n }\n\n return (amount * BigInt(10_000 - partnerFeeBps)) / 10_000n;\n}\n\n/**\n * Calculates the fee percentage given an input amount and a fee amount.\n *\n * @param inputAmount - The original input amount.\n * @param feeAmount - The fee amount to be calculated as a percentage of the input amount.\n * @returns An object containing the fee percentage and the number of decimal places.\n *\n * @throws {Error} If inputAmount is less than or equal to zero, or if feeAmount is negative.\n */\nexport function calculateFeePercentage(\n inputAmount: bigint,\n feeAmount: bigint,\n): { feePercentage: number; feePercentageDecimals: number } {\n if (inputAmount <= 0n) {\n throw new Error('Input amount must be greater than zero');\n }\n\n if (feeAmount < 0n) {\n throw new Error('Fee amount must be >= zero');\n }\n\n if (feeAmount === 0n) {\n return { feePercentage: 0, feePercentageDecimals: 0 };\n }\n\n const MAX_DECIMALS = 18;\n\n for (let decimals = 0; decimals <= MAX_DECIMALS; decimals++) {\n const scale = 10n ** BigInt(decimals);\n const numerator = feeAmount * 100n * scale;\n\n if (numerator % inputAmount === 0n) {\n const value = numerator / inputAmount;\n\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error('feePercentage exceeds Number.MAX_SAFE_INTEGER');\n }\n\n return {\n feePercentage: Number(value),\n feePercentageDecimals: decimals,\n };\n }\n }\n\n // Fallback: highest precision, truncated\n const scale = 10n ** BigInt(MAX_DECIMALS);\n const value = (feeAmount * 100n * scale) / inputAmount;\n\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error('feePercentage exceeds Number.MAX_SAFE_INTEGER');\n }\n\n return {\n feePercentage: Number(value),\n feePercentageDecimals: MAX_DECIMALS,\n };\n}\n\n/**\n * Maps Viem errors to corresponding ErrorCode values.\n *\n * @param error - The error thrown by Viem.\n * @returns The corresponding ErrorCode.\n */\nexport function getErrorCodeForViemError(error: unknown): ErrorCode {\n if (error instanceof WaitForTransactionReceiptTimeoutError) {\n return ErrorCode.TIMEOUT;\n }\n\n return ErrorCode.TRANSACTION_REVERTED;\n}\n\n/**\n * Maps `@solana/kit` errors to SDK ErrorCode values.\n *\n * `@solana/kit` throws typed `SolanaError` instances with numeric codes.\n * We use the `isSolanaError` type guard to match specific codes:\n *\n * - Transport / node-health errors → SERVICE_NOT_AVAILABLE\n * (HTTP transport failures, node-unhealthy JSON-RPC responses)\n *\n * - Block-height exceeded → TIMEOUT\n * (the transaction's blockhash has expired — the 150-slot validity\n * window has passed and the tx can no longer land)\n *\n * - Everything else → UNKNOWN\n * (unexpected JSON-RPC errors, malformed responses, internal errors, etc.)\n */\nexport function getErrorCodeForSolanaRpcError(error: unknown): ErrorCode {\n if (\n isSolanaError(error, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY) ||\n isSolanaError(error, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR)\n ) {\n return ErrorCode.SERVICE_NOT_AVAILABLE;\n }\n\n if (isSolanaError(error, SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED)) {\n return ErrorCode.TIMEOUT;\n }\n\n return ErrorCode.UNKNOWN;\n}\n\n/**\n * Waits for either a timeout to elapse or an abort signal to be triggered.\n *\n * @param timeoutMs - The timeout duration in milliseconds.\n * @param signal - The AbortSignal to listen for abort events.\n *\n * @returns A promise that resolves when either the timeout elapses or the abort signal is triggered.\n */\nexport function waitForTimeoutOrAbort({\n timeoutMs,\n signal,\n}: Readonly<{\n timeoutMs: number;\n signal: AbortSignal;\n}>): Promise<void> {\n return new Promise((resolve) => {\n let settled = false;\n\n const finish = (): void => {\n if (settled) {\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n signal.removeEventListener('abort', onAbort);\n resolve();\n };\n\n const onAbort = (): void => {\n finish();\n };\n\n const timeoutId = setTimeout(() => {\n finish();\n }, timeoutMs);\n\n signal.addEventListener('abort', onAbort, { once: true });\n\n if (signal.aborted) {\n finish();\n }\n });\n}\n\nconst ABORT_TAG: unique symbol = Symbol('aborted');\n\n/**\n * @internal\n *\n * Waits for a promise to resolve or an abort signal to be triggered, whichever comes first.\n *\n * If the promise resolves first, returns an object with status 'ok' and the resolved value.\n * If the abort signal is triggered first, returns an object with status 'aborted'.\n *\n * @param awaitable - The promise to wait for.\n * @param signal - The AbortSignal to listen for abort events.\n * @returns A promise that resolves to an object indicating whether the operation was aborted or completed successfully.\n *\n * @throws Any error thrown by the awaitable promise will be propagated to the caller.\n *\n * @example\n * ```ts\n * const ac = new AbortController();\n * const result = await awaitOrAbort(someAsyncOperation(), ac.signal);\n *\n * if (result.status === 'aborted') {\n * console.log('Operation was aborted');\n * } else {\n * console.log('Operation completed with value:', result.value);\n * }\n * ```\n */\nexport async function awaitOrAbort<T>(\n awaitable: Promise<T>,\n signal: AbortSignal,\n): Promise<{ status: 'aborted' } | { status: 'ok'; value: T }> {\n const maybeAwaitable = await Promise.race([\n awaitable,\n new Promise<typeof ABORT_TAG>((resolve) => {\n signal.addEventListener('abort', () => resolve(ABORT_TAG), { once: true });\n }),\n ]);\n\n if (maybeAwaitable === ABORT_TAG || signal.aborted) {\n return { status: 'aborted' };\n }\n\n return { status: 'ok', value: maybeAwaitable };\n}\n\n/**\n * Build a `FailedTransfer` from a quote.\n *\n * Centralises the boilerplate that every transfer-service handler repeats\n * when it needs to return a failed transfer before a source tx is recorded.\n */\nexport function makeFailedTransferFromQuote(\n quote: Quote,\n options: {\n environment: Environment;\n errorCode: ErrorCode;\n errorReason: string;\n },\n): FailedTransfer {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment: options.environment,\n errorCode: options.errorCode,\n errorReason: options.errorReason,\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 status: 'failed',\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: quote.serviceType,\n };\n}\n"],"mappings":"4NAiCA,SAAS,EAAa,EAAyB,CAC7C,GAAM,CAAE,YAAW,UAAW,GAAY,EAAkB,EAAM,QAAQ,CAE1E,GAAI,IAAc,SAChB,MAAM,IAAI,EACR,+CACA,gCAAgC,EAAU,qCAC3C,CAGH,MAAO,CACL,GAAI,OAAO,EAAQ,CACnB,KAAM,EAAM,UACZ,eAAgB,CACd,SAAU,EAAM,aAAa,SAC7B,OAAQ,EAAM,aAAa,OAC3B,KAAM,EAAM,aAAa,KAC1B,CACD,QAAS,CACP,QAAS,CACP,KAAM,CAAC,EAAM,OAAO,CACrB,CACD,OAAQ,CACN,KAAM,CAAC,EAAM,OAAO,CACrB,CACF,CACD,GAAI,EAAM,kBAAkB,WAAa,CACvC,UAAW,CACT,WAAY,CACV,QAAS,EAAM,iBAAiB,UACjC,CACF,CACF,CACF,CAGH,SAAgB,EAAqB,CACnC,SAG8E,CAe9E,OALe,EAAmB,CAChC,MAVgB,EAAa,EAAM,CAWnC,UATgB,EAAK,EAAM,OAAQ,CACnC,MAAO,GACP,WAAY,EACZ,WAAY,IACZ,QAAS,KACV,CAAC,CAKD,CAAC,CAAC,OAAO,EAAc,CAK1B,SAAgB,EAAqB,CAAE,SAA8C,CACnF,OAAO,EAAgB,EAAM,OAAO,CAGtC,SAAgB,EAAuB,EAAkB,EAA+C,CACtG,GAAI,IAAsB,IAAA,GACxB,OAAO,EAGT,GAAI,CAAC,OAAO,UAAU,EAAkB,EAAI,EAAoB,EAC9D,MAAM,IAAI,EACR,4BACA,6DAA6D,IAC9D,CAGH,OAAQ,EAAW,OAAO,IAAS,EAAkB,CAAI,OAiJ3D,SAAgB,EAAsB,CACpC,YACA,UAIiB,CACjB,OAAO,IAAI,QAAS,GAAY,CAC9B,IAAI,EAAU,GAER,MAAqB,CACrB,IAIJ,EAAU,GACV,aAAa,EAAU,CACvB,EAAO,oBAAoB,QAAS,EAAQ,CAC5C,GAAS,GAGL,MAAsB,CAC1B,GAAQ,EAGJ,EAAY,eAAiB,CACjC,GAAQ,EACP,EAAU,CAEb,EAAO,iBAAiB,QAAS,EAAS,CAAE,KAAM,GAAM,CAAC,CAErD,EAAO,SACT,GAAQ,EAEV,CAGJ,MAAM,EAA2B,OAAO,UAAU,CA4BlD,eAAsB,EACpB,EACA,EAC6D,CAC7D,IAAM,EAAiB,MAAM,QAAQ,KAAK,CACxC,EACA,IAAI,QAA2B,GAAY,CACzC,EAAO,iBAAiB,YAAe,EAAQ,EAAU,CAAE,CAAE,KAAM,GAAM,CAAC,EAC1E,CACH,CAAC,CAMF,OAJI,IAAmB,GAAa,EAAO,QAClC,CAAE,OAAQ,UAAW,CAGvB,CAAE,OAAQ,KAAM,MAAO,EAAgB,CAShD,SAAgB,EACd,EACA,EAKgB,CAChB,MAAO,CACL,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,YAAa,EAAQ,YACrB,UAAW,EAAQ,UACnB,YAAa,EAAQ,YACrB,WAAY,KAAK,KAAK,CACtB,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,GAAI,EAAM,GACV,cAAe,EAAM,cACrB,YAAa,EAAM,QACnB,YAAa,EAAM,YACnB,OAAQ,SACR,YAAa,EAAM,SACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UACjB,KAAM,EAAM,YACb"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants.cjs`),t=require(`./service-schemas.cjs`);let n=require(`zod`);const r=n.z.enum(e.Blockchain),i=n.z.object({tokenName:n.z.string(),nativeNetwork:r,denomination:n.z.number()}).extend({nativeContractAddress:t.EvmAddressSchema,wrappedContractAddress:t.EvmAddressSchema,wrappedNetwork:r}),a=n.z.object({disableFrontend:n.z.boolean(),addressBlocklist:n.z.array(n.z.string())}),o=a.extend({assets:n.z.record(n.z.string(),i),networks:n.z.partialRecord(r,n.z.union([n.z.number(),n.z.undefined()])),walletAddresses:n.z.partialRecord(r,t.EvmAddressSchema)}),s=n.z.object({minimumConfirmations:n.z.partialRecord(r,n.z.optional(n.z.number()))}),c=n.z.object({minimumFeeAmount:n.z.coerce.bigint().nonnegative(),maximumFeeAmount:n.z.coerce.bigint().nonnegative(),feePercentage:n.z.int().nonnegative(),feePercentageDecimals:n.z.int().nonnegative()}),l=s.extend({unwrapFeeApproximation:n.z.record(n.z.string(),c),wrapFeeApproximation:n.z.record(n.z.string(),c)}),u=n.z.object({critical:o,nonCritical:l}),d=n.z.object({tokenName:n.z.string(),bech32AddressPrefix:n.z.union([n.z.literal(`tb`),n.z.literal(`bc`)]),wrappedContractAddress:t.EvmAddressSchema,wrappedNetwork:r}),f=a.extend({addressBlocklist:n.z.array(n.z.string()),avalancheChainId:n.z.number(),bitcoinAssets:n.z.record(n.z.string(),d),walletAddresses:n.z.object({btc:t.BtcAddressSchema,avalanche:t.EvmAddressSchema})}),p=n.z.object({dustThreshold:n.z.number(),wrapFeeEstimate:n.z.object({minimumFeeAmount:n.z.string(),maximumFeeAmount:n.z.string(),feePercentage:n.z.number(),feePercentageDecimals:n.z.number()}),unwrapFeeEstimate:n.z.object({bridgeToll:n.z.object({minimumFeeAmount:n.z.string(),maximumFeeAmount:n.z.string(),feePercentage:n.z.number(),feePercentageDecimals:n.z.number()}),estimatedTxFee:n.z.object({constAmount:n.z.number(),numeratorPerSat:n.z.number(),denominatorPerSat:n.z.number()})})}),m=n.z.object({wrapFeeAmount:n.z.number(),constUnwrapFeeAmount:n.z.number(),unwrapFeeNumerator:n.z.number(),unwrapFeeDenominator:n.z.number(),dustThreshold:n.z.number()}),h=n.z.object({minimumConfirmations:n.z.number(),minimumOnboardSize:n.z.number(),currentBridgeFeeEstimate:n.z.union([p,m])}),g=n.z.object({networkInfo:n.z.record(n.z.string(),h).nullable()}),_=n.z.object({criticalBitcoin:f,nonCriticalBitcoin:g}),v=n.z.intersection(u,_);exports.DynamicFeeEstimation=c,exports.WardenConfigSchema=v;
|
|
2
|
+
//# sourceMappingURL=_warden-config-schema.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_warden-config-schema.cjs","names":["z","Blockchain","EvmAddressSchema","BtcAddressSchema"],"sources":["../../src/transfer-service/_warden-config-schema.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BtcAddressSchema, EvmAddressSchema } from './service-schemas';\nimport { Blockchain } from '../constants';\n\nconst BlockchainEnum = z.enum(Blockchain);\n\nconst AssetBase = z.object({\n tokenName: z.string(),\n nativeNetwork: BlockchainEnum,\n denomination: z.number(),\n});\n\nconst EthereumAssetConfig = AssetBase.extend({\n nativeContractAddress: EvmAddressSchema,\n wrappedContractAddress: EvmAddressSchema,\n wrappedNetwork: BlockchainEnum,\n});\n\nconst CriticalConfigBase = z.object({\n disableFrontend: z.boolean(),\n addressBlocklist: z.array(z.string()),\n});\n\nconst EthereumCriticalConfig = CriticalConfigBase.extend({\n assets: z.record(z.string(), EthereumAssetConfig), // key is token symbol\n networks: z.partialRecord(BlockchainEnum, z.union([z.number(), z.undefined()])),\n walletAddresses: z.partialRecord(BlockchainEnum, EvmAddressSchema),\n});\n\nconst EthereumNonCriticalConfigBase = z.object({\n minimumConfirmations: z.partialRecord(BlockchainEnum, z.optional(z.number())),\n});\n\nexport const DynamicFeeEstimation: z.ZodType<{\n feePercentage: number;\n feePercentageDecimals: number;\n maximumFeeAmount: bigint;\n minimumFeeAmount: bigint;\n}> = z.object({\n minimumFeeAmount: z.coerce.bigint().nonnegative(),\n maximumFeeAmount: z.coerce.bigint().nonnegative(),\n feePercentage: z.int().nonnegative(),\n feePercentageDecimals: z.int().nonnegative(),\n});\n\nconst EthereumDynamicFeeNonCriticalConfig = EthereumNonCriticalConfigBase.extend({\n unwrapFeeApproximation: z.record(z.string(), DynamicFeeEstimation),\n wrapFeeApproximation: z.record(z.string(), DynamicFeeEstimation),\n});\n\nconst EthereumDynamicFeeConfig = z.object({\n critical: EthereumCriticalConfig,\n nonCritical: EthereumDynamicFeeNonCriticalConfig,\n});\n\nconst BitcoinAssetConfig = z.object({\n tokenName: z.string(),\n bech32AddressPrefix: z.union([z.literal('tb'), z.literal('bc')]),\n wrappedContractAddress: EvmAddressSchema,\n wrappedNetwork: BlockchainEnum,\n});\n\nconst BitcoinCritical = CriticalConfigBase.extend({\n addressBlocklist: z.array(z.string()),\n avalancheChainId: z.number(),\n bitcoinAssets: z.record(z.string(), BitcoinAssetConfig), // key is token symbol\n walletAddresses: z.object({\n btc: BtcAddressSchema,\n avalanche: EvmAddressSchema,\n }),\n});\n\nconst BitcoinCurrentBridgeFeeEstimateDynamic = z.object({\n dustThreshold: z.number(),\n wrapFeeEstimate: z.object({\n minimumFeeAmount: z.string(),\n maximumFeeAmount: z.string(),\n feePercentage: z.number(),\n feePercentageDecimals: z.number(),\n }),\n unwrapFeeEstimate: z.object({\n bridgeToll: z.object({\n minimumFeeAmount: z.string(),\n maximumFeeAmount: z.string(),\n feePercentage: z.number(),\n feePercentageDecimals: z.number(),\n }),\n estimatedTxFee: z.object({\n constAmount: z.number(),\n numeratorPerSat: z.number(),\n denominatorPerSat: z.number(),\n }),\n }),\n});\n\nconst BitcoinCurrentBridgeFeeEstimateStatic = z.object({\n wrapFeeAmount: z.number(),\n constUnwrapFeeAmount: z.number(),\n unwrapFeeNumerator: z.number(),\n unwrapFeeDenominator: z.number(),\n dustThreshold: z.number(),\n});\n\nconst BitcoinNetworkInfo = z.object({\n minimumConfirmations: z.number(),\n minimumOnboardSize: z.number(),\n currentBridgeFeeEstimate: z.union([BitcoinCurrentBridgeFeeEstimateDynamic, BitcoinCurrentBridgeFeeEstimateStatic]),\n});\n\nconst BitcoinNonCritical = z.object({\n networkInfo: z.record(z.string(), BitcoinNetworkInfo).nullable(),\n});\n\n// BitcoinConfig supports both dynamic and static\nconst BitcoinConfig = z.object({\n criticalBitcoin: BitcoinCritical,\n nonCriticalBitcoin: BitcoinNonCritical,\n});\n\n/**\n * The schema for the Warden configuration used by the Fusion SDK services.\n *\n * > [!NOTE]\n * >\n * > The typing for this schema is auto-generated and should not be manually edited.\n * > If changes are made to the schema, the typing must be regenerated.\n * >\n * > You can regenerate the typing by deleting the existing typing and using\n * > VS Code's quick fix feature to generate the new typing.\n * >\n * > This typing is necessary to satisfy the isolatedDeclarations TypeScript compiler option.\n *\n * > [!INFO]\n * >\n * > Warden bridge settings are updated every 15 seconds.\n */\nexport const WardenConfigSchema: z.ZodIntersection<\n z.ZodObject<\n {\n critical: z.ZodObject<\n {\n disableFrontend: z.ZodBoolean;\n addressBlocklist: z.ZodArray<z.ZodString>;\n assets: z.ZodRecord<\n z.ZodString,\n z.ZodObject<\n {\n tokenName: z.ZodString;\n nativeNetwork: z.ZodEnum<typeof Blockchain>;\n denomination: z.ZodNumber;\n nativeContractAddress: z.ZodType<\n `0x${string}`,\n unknown,\n z.core.$ZodTypeInternals<`0x${string}`, unknown>\n >;\n wrappedContractAddress: z.ZodType<\n `0x${string}`,\n unknown,\n z.core.$ZodTypeInternals<`0x${string}`, unknown>\n >;\n wrappedNetwork: z.ZodEnum<typeof Blockchain>;\n },\n z.core.$strip\n >\n >;\n networks: z.ZodRecord<\n z.ZodEnum<typeof Blockchain> & z.core.$partial,\n z.ZodUnion<readonly [z.ZodNumber, z.ZodUndefined]>\n >;\n walletAddresses: z.ZodRecord<\n z.ZodEnum<typeof Blockchain> & z.core.$partial,\n z.ZodType<`0x${string}`, unknown, z.core.$ZodTypeInternals<`0x${string}`, unknown>>\n >;\n },\n z.core.$strip\n >;\n nonCritical: z.ZodObject<\n {\n minimumConfirmations: z.ZodRecord<z.ZodEnum<typeof Blockchain> & z.core.$partial, z.ZodOptional<z.ZodNumber>>;\n unwrapFeeApproximation: z.ZodRecord<\n z.ZodString,\n z.ZodType<\n {\n feePercentage: number;\n feePercentageDecimals: number;\n maximumFeeAmount: bigint;\n minimumFeeAmount: bigint;\n },\n unknown,\n z.core.$ZodTypeInternals<\n {\n feePercentage: number;\n feePercentageDecimals: number;\n maximumFeeAmount: bigint;\n minimumFeeAmount: bigint;\n },\n unknown\n >\n >\n >;\n wrapFeeApproximation: z.ZodRecord<\n z.ZodString,\n z.ZodType<\n {\n feePercentage: number;\n feePercentageDecimals: number;\n maximumFeeAmount: bigint;\n minimumFeeAmount: bigint;\n },\n unknown,\n z.core.$ZodTypeInternals<\n {\n feePercentage: number;\n feePercentageDecimals: number;\n maximumFeeAmount: bigint;\n minimumFeeAmount: bigint;\n },\n unknown\n >\n >\n >;\n },\n z.core.$strip\n >;\n },\n z.core.$strip\n >,\n z.ZodObject<\n {\n criticalBitcoin: z.ZodObject<\n {\n disableFrontend: z.ZodBoolean;\n addressBlocklist: z.ZodArray<z.ZodString>;\n avalancheChainId: z.ZodNumber;\n bitcoinAssets: z.ZodRecord<\n z.ZodString,\n z.ZodObject<\n {\n tokenName: z.ZodString;\n bech32AddressPrefix: z.ZodUnion<readonly [z.ZodLiteral<'tb'>, z.ZodLiteral<'bc'>]>;\n wrappedContractAddress: z.ZodType<\n `0x${string}`,\n unknown,\n z.core.$ZodTypeInternals<`0x${string}`, unknown>\n >;\n wrappedNetwork: z.ZodEnum<typeof Blockchain>;\n },\n z.core.$strip\n >\n >;\n walletAddresses: z.ZodObject<\n {\n btc: z.ZodType<string, unknown, z.core.$ZodTypeInternals<string, unknown>>;\n avalanche: z.ZodType<`0x${string}`, unknown, z.core.$ZodTypeInternals<`0x${string}`, unknown>>;\n },\n z.core.$strip\n >;\n },\n z.core.$strip\n >;\n nonCriticalBitcoin: z.ZodObject<\n {\n networkInfo: z.ZodNullable<\n z.ZodRecord<\n z.ZodString,\n z.ZodObject<\n {\n minimumConfirmations: z.ZodNumber;\n minimumOnboardSize: z.ZodNumber;\n currentBridgeFeeEstimate: z.ZodUnion<\n readonly [\n z.ZodObject<\n {\n dustThreshold: z.ZodNumber;\n wrapFeeEstimate: z.ZodObject<\n {\n minimumFeeAmount: z.ZodString;\n maximumFeeAmount: z.ZodString;\n feePercentage: z.ZodNumber;\n feePercentageDecimals: z.ZodNumber;\n },\n z.core.$strip\n >;\n unwrapFeeEstimate: z.ZodObject<\n {\n bridgeToll: z.ZodObject<\n {\n minimumFeeAmount: z.ZodString;\n maximumFeeAmount: z.ZodString;\n feePercentage: z.ZodNumber;\n feePercentageDecimals: z.ZodNumber;\n },\n z.core.$strip\n >;\n estimatedTxFee: z.ZodObject<\n {\n constAmount: z.ZodNumber;\n numeratorPerSat: z.ZodNumber;\n denominatorPerSat: z.ZodNumber;\n },\n z.core.$strip\n >;\n },\n z.core.$strip\n >;\n },\n z.core.$strip\n >,\n z.ZodObject<\n {\n wrapFeeAmount: z.ZodNumber;\n constUnwrapFeeAmount: z.ZodNumber;\n unwrapFeeNumerator: z.ZodNumber;\n unwrapFeeDenominator: z.ZodNumber;\n dustThreshold: z.ZodNumber;\n },\n z.core.$strip\n >,\n ]\n >;\n },\n z.core.$strip\n >\n >\n >;\n },\n z.core.$strip\n >;\n },\n z.core.$strip\n >\n> = z.intersection(EthereumDynamicFeeConfig, BitcoinConfig);\n"],"mappings":"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"}
|