@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":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export enum ErrorCode {\n NOT_IMPLEMENTED = 5_000,\n SERVICE_NOT_AVAILABLE = 5_001,\n INITIALIZATION_FAILED = 5_002,\n INVALID_PARAMS = 5_003,\n TIMEOUT = 5_004,\n VIEM_ERROR = 5_005,\n TRANSACTION_REVERTED = 5_006,\n NOTARIZATION_FAILED = 5_007,\n SIGNING_FAILED = 5_008,\n SOLANA_ERROR = 5_009,\n UNKNOWN = 5_999,\n}\n\nexport enum ErrorReason {\n /** the provided asset is not supported by the bridge */\n ASSET_NOT_SUPPORTED = 'ASSET_NOT_SUPPORTED',\n /** the provided source or target chain is not supported by the bridge */\n CHAIN_NOT_SUPPORTED = 'CHAIN_NOT_SUPPORTED',\n /** error while fetching or parsing the config */\n CONFIG_NOT_AVAILABLE = 'CONFIG_NOT_AVAILABLE',\n /** required confirmation count of the source or target chain is unknown */\n CONFIRMATION_COUNT_UNKNOWN = 'CONFIRMATION_COUNT_UNKNOWN',\n /** service is being initialized more than once */\n DUPLICATE_SERVICE_INITIALIZATION = 'DUPLICATE_SERVICE_INITIALIZATION',\n /** bridge does not support specified environment */\n ENVIRONMENT_NOT_SUPPORTED = 'ENVIRONMENT_NOT_SUPPORTED',\n /** provided source and target chains are the same */\n IDENTICAL_CHAINS_PROVIDED = 'IDENTICAL_CHAINS_PROVIDED',\n /** the sender or recipient address is incorrect */\n INCORRECT_ADDRESS_PROVIDED = 'INCORRECT_ADDRESS_PROVIDED',\n /** the transfer amount is incorrect (e.g.: lesser than or equal to zero) */\n INCORRECT_AMOUNT_PROVIDED = 'INCORRECT_AMOUNT_PROVIDED',\n /** the transaction is not hex */\n INCORRECT_HASH_PROVIDED = 'INCORRECT_HASH_PROVIDED',\n /** The provided provider is incorrect type (Provider VS BitcoinProvider) */\n INCORRECT_PROVIDER_PROVIDED = 'INCORRECT_PROVIDER_PROVIDED',\n /** The provided signer is incorrect type */\n INCORRECT_SIGNER_PROVIDED = 'INCORRECT_SIGNER_PROVIDED',\n /** the sourceTxHash or targetTxHash is incorrect */\n INCORRECT_TXHASH_PROVIDED = 'INCORRECT_TXHASH_PROVIDED',\n /** generic error with the params */\n INVALID_PARAMS = 'INVALID_PARAMS',\n /** ServiceType requested not available */\n SERVICE_TYPE_NOT_CONFIGURED = 'SERVICE_TYPE_NOT_CONFIGURED',\n /** generic, not specified error */\n UNKNOWN = 'UNKNOWN',\n /** error when the address has token approvals for addresses involved in the multichain incident */\n VULNERABLE_TOKEN_APPROVAL_ADDRESS = 'VULNERABLE_TOKEN_APPROVAL_ADDRESS',\n /** error when warden config was not found or it is over the mismatch threshold */\n WARDEN_CONFIG_MISMATCH = 'WARDEN_CONFIG_MISMATCH',\n /** fetched warden config does not contain network IDs */\n WARDEN_CONFIG_MISSING_NETWORK = 'WARDEN_CONFIG_MISSING_NETWORK',\n /** address is blocked */\n ADDRESS_IS_BLOCKED = 'ADDRESS_IS_BLOCKED',\n /** Quote expired */\n QUOTE_EXPIRED = 'QUOTE_EXPIRED',\n}\n\nexport class SdkError extends Error {\n override name = 'SdkError';\n\n constructor(\n message: string,\n public code: ErrorCode,\n public options?: {\n cause?: unknown;\n details?: string;\n },\n ) {\n super(message, { cause: options?.cause });\n }\n\n walk(): Error;\n walk(fn: (err: unknown) => boolean): Error | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walk(fn?: any): any {\n return walkError(this, fn);\n }\n}\n\nfunction walkError(err: unknown): unknown;\nfunction walkError(err: unknown, fn: (err: unknown) => boolean): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null {\n if (fn?.(err)) {\n return err;\n }\n\n if (err && typeof err === 'object' && 'cause' in err && err.cause !== undefined) {\n return walkError(err.cause, fn);\n }\n\n return fn ? null : err;\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport class HttpError extends Error {\n override name = 'HttpError';\n\n readonly status: number;\n readonly statusText: string;\n readonly response: Response;\n readonly data?: unknown;\n\n constructor(message: string, response: Response, data?: unknown) {\n super(message);\n this.name = 'HttpError';\n this.status = response.status;\n this.statusText = response.statusText;\n this.response = response;\n this.data = data;\n }\n}\n\nexport function isHttpError(error: unknown): error is HttpError {\n return error instanceof HttpError;\n}\n\nexport class TimeoutError extends Error {\n override name = 'TimeoutError';\n\n constructor(message = 'Request timed out.') {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport class AbortedError extends Error {\n override name = 'AbortedError';\n\n constructor(message = 'Operation was aborted.') {\n super(message);\n this.name = 'AbortedError';\n }\n}\n\nexport function isAbortedError(error: unknown): error is AbortedError {\n return error instanceof AbortedError;\n}\n\nexport class ResponseValidationError extends Error {\n override name = 'ResponseValidationError';\n\n readonly issues?: unknown;\n readonly rawResponse?: unknown;\n\n constructor(message = 'Response validation failed.', issues?: unknown, rawResponse?: unknown) {\n super(message);\n this.name = 'ResponseValidationError';\n this.issues = issues;\n this.rawResponse = rawResponse;\n }\n}\n\nexport function isResponseValidationError(error: unknown): error is ResponseValidationError {\n return error instanceof ResponseValidationError;\n}\n\nexport class ServiceInitializationError extends SdkError {\n override name = 'ServiceInitializationError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string, cause?: unknown) {\n super(message, ErrorCode.INITIALIZATION_FAILED, { cause, details });\n }\n}\n\nexport function isServiceInitializationError(error: unknown): error is ServiceInitializationError {\n return error instanceof ServiceInitializationError;\n}\n\nexport class ServiceUnavailableError extends SdkError {\n override name = 'ServiceUnavailableError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string) {\n super(message, ErrorCode.SERVICE_NOT_AVAILABLE, { details });\n }\n}\n\nexport function isServiceUnavailableError(error: unknown): error is ServiceUnavailableError {\n return error instanceof ServiceUnavailableError;\n}\n\nexport class InvalidParamsError extends SdkError {\n override name = 'InvalidParamsError';\n\n constructor(message: string = ErrorReason.INVALID_PARAMS, details?: string) {\n super(message, ErrorCode.INVALID_PARAMS, { details });\n }\n}\n\nexport function isInvalidParamsError(error: unknown): error is InvalidParamsError {\n return error instanceof InvalidParamsError;\n}\n\n/**\n * @internal\n *\n * Error to indicate that a functionality has not yet been implemented.\n * Do not export from entrypoint.\n */\nexport class NotImplementedError extends SdkError {\n constructor() {\n super('This functionality is not yet implemented.', ErrorCode.NOT_IMPLEMENTED);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
//#region src/errors.d.ts
|
|
2
|
+
declare enum ErrorCode {
|
|
3
|
+
NOT_IMPLEMENTED = 5e3,
|
|
4
|
+
SERVICE_NOT_AVAILABLE = 5001,
|
|
5
|
+
INITIALIZATION_FAILED = 5002,
|
|
6
|
+
INVALID_PARAMS = 5003,
|
|
7
|
+
TIMEOUT = 5004,
|
|
8
|
+
VIEM_ERROR = 5005,
|
|
9
|
+
TRANSACTION_REVERTED = 5006,
|
|
10
|
+
NOTARIZATION_FAILED = 5007,
|
|
11
|
+
SIGNING_FAILED = 5008,
|
|
12
|
+
SOLANA_ERROR = 5009,
|
|
13
|
+
UNKNOWN = 5999
|
|
14
|
+
}
|
|
15
|
+
declare enum ErrorReason {
|
|
16
|
+
/** the provided asset is not supported by the bridge */
|
|
17
|
+
ASSET_NOT_SUPPORTED = "ASSET_NOT_SUPPORTED",
|
|
18
|
+
/** the provided source or target chain is not supported by the bridge */
|
|
19
|
+
CHAIN_NOT_SUPPORTED = "CHAIN_NOT_SUPPORTED",
|
|
20
|
+
/** error while fetching or parsing the config */
|
|
21
|
+
CONFIG_NOT_AVAILABLE = "CONFIG_NOT_AVAILABLE",
|
|
22
|
+
/** required confirmation count of the source or target chain is unknown */
|
|
23
|
+
CONFIRMATION_COUNT_UNKNOWN = "CONFIRMATION_COUNT_UNKNOWN",
|
|
24
|
+
/** service is being initialized more than once */
|
|
25
|
+
DUPLICATE_SERVICE_INITIALIZATION = "DUPLICATE_SERVICE_INITIALIZATION",
|
|
26
|
+
/** bridge does not support specified environment */
|
|
27
|
+
ENVIRONMENT_NOT_SUPPORTED = "ENVIRONMENT_NOT_SUPPORTED",
|
|
28
|
+
/** provided source and target chains are the same */
|
|
29
|
+
IDENTICAL_CHAINS_PROVIDED = "IDENTICAL_CHAINS_PROVIDED",
|
|
30
|
+
/** the sender or recipient address is incorrect */
|
|
31
|
+
INCORRECT_ADDRESS_PROVIDED = "INCORRECT_ADDRESS_PROVIDED",
|
|
32
|
+
/** the transfer amount is incorrect (e.g.: lesser than or equal to zero) */
|
|
33
|
+
INCORRECT_AMOUNT_PROVIDED = "INCORRECT_AMOUNT_PROVIDED",
|
|
34
|
+
/** the transaction is not hex */
|
|
35
|
+
INCORRECT_HASH_PROVIDED = "INCORRECT_HASH_PROVIDED",
|
|
36
|
+
/** The provided provider is incorrect type (Provider VS BitcoinProvider) */
|
|
37
|
+
INCORRECT_PROVIDER_PROVIDED = "INCORRECT_PROVIDER_PROVIDED",
|
|
38
|
+
/** The provided signer is incorrect type */
|
|
39
|
+
INCORRECT_SIGNER_PROVIDED = "INCORRECT_SIGNER_PROVIDED",
|
|
40
|
+
/** the sourceTxHash or targetTxHash is incorrect */
|
|
41
|
+
INCORRECT_TXHASH_PROVIDED = "INCORRECT_TXHASH_PROVIDED",
|
|
42
|
+
/** generic error with the params */
|
|
43
|
+
INVALID_PARAMS = "INVALID_PARAMS",
|
|
44
|
+
/** ServiceType requested not available */
|
|
45
|
+
SERVICE_TYPE_NOT_CONFIGURED = "SERVICE_TYPE_NOT_CONFIGURED",
|
|
46
|
+
/** generic, not specified error */
|
|
47
|
+
UNKNOWN = "UNKNOWN",
|
|
48
|
+
/** error when the address has token approvals for addresses involved in the multichain incident */
|
|
49
|
+
VULNERABLE_TOKEN_APPROVAL_ADDRESS = "VULNERABLE_TOKEN_APPROVAL_ADDRESS",
|
|
50
|
+
/** error when warden config was not found or it is over the mismatch threshold */
|
|
51
|
+
WARDEN_CONFIG_MISMATCH = "WARDEN_CONFIG_MISMATCH",
|
|
52
|
+
/** fetched warden config does not contain network IDs */
|
|
53
|
+
WARDEN_CONFIG_MISSING_NETWORK = "WARDEN_CONFIG_MISSING_NETWORK",
|
|
54
|
+
/** address is blocked */
|
|
55
|
+
ADDRESS_IS_BLOCKED = "ADDRESS_IS_BLOCKED",
|
|
56
|
+
/** Quote expired */
|
|
57
|
+
QUOTE_EXPIRED = "QUOTE_EXPIRED"
|
|
58
|
+
}
|
|
59
|
+
declare class SdkError extends Error {
|
|
60
|
+
code: ErrorCode;
|
|
61
|
+
options?: {
|
|
62
|
+
cause?: unknown;
|
|
63
|
+
details?: string;
|
|
64
|
+
} | undefined;
|
|
65
|
+
name: string;
|
|
66
|
+
constructor(message: string, code: ErrorCode, options?: {
|
|
67
|
+
cause?: unknown;
|
|
68
|
+
details?: string;
|
|
69
|
+
} | undefined);
|
|
70
|
+
walk(): Error;
|
|
71
|
+
walk(fn: (err: unknown) => boolean): Error | null;
|
|
72
|
+
}
|
|
73
|
+
declare function isSdkError(error: unknown): error is SdkError;
|
|
74
|
+
declare class HttpError extends Error {
|
|
75
|
+
name: string;
|
|
76
|
+
readonly status: number;
|
|
77
|
+
readonly statusText: string;
|
|
78
|
+
readonly response: Response;
|
|
79
|
+
readonly data?: unknown;
|
|
80
|
+
constructor(message: string, response: Response, data?: unknown);
|
|
81
|
+
}
|
|
82
|
+
declare function isHttpError(error: unknown): error is HttpError;
|
|
83
|
+
declare class TimeoutError extends Error {
|
|
84
|
+
name: string;
|
|
85
|
+
constructor(message?: string);
|
|
86
|
+
}
|
|
87
|
+
declare function isTimeoutError(error: unknown): error is TimeoutError;
|
|
88
|
+
declare class AbortedError extends Error {
|
|
89
|
+
name: string;
|
|
90
|
+
constructor(message?: string);
|
|
91
|
+
}
|
|
92
|
+
declare function isAbortedError(error: unknown): error is AbortedError;
|
|
93
|
+
declare class ResponseValidationError extends Error {
|
|
94
|
+
name: string;
|
|
95
|
+
readonly issues?: unknown;
|
|
96
|
+
readonly rawResponse?: unknown;
|
|
97
|
+
constructor(message?: string, issues?: unknown, rawResponse?: unknown);
|
|
98
|
+
}
|
|
99
|
+
declare function isResponseValidationError(error: unknown): error is ResponseValidationError;
|
|
100
|
+
declare class ServiceInitializationError extends SdkError {
|
|
101
|
+
name: string;
|
|
102
|
+
constructor(message?: string, details?: string, cause?: unknown);
|
|
103
|
+
}
|
|
104
|
+
declare function isServiceInitializationError(error: unknown): error is ServiceInitializationError;
|
|
105
|
+
declare class ServiceUnavailableError extends SdkError {
|
|
106
|
+
name: string;
|
|
107
|
+
constructor(message?: string, details?: string);
|
|
108
|
+
}
|
|
109
|
+
declare function isServiceUnavailableError(error: unknown): error is ServiceUnavailableError;
|
|
110
|
+
declare class InvalidParamsError extends SdkError {
|
|
111
|
+
name: string;
|
|
112
|
+
constructor(message?: string, details?: string);
|
|
113
|
+
}
|
|
114
|
+
declare function isInvalidParamsError(error: unknown): error is InvalidParamsError;
|
|
115
|
+
//#endregion
|
|
116
|
+
export { AbortedError, ErrorCode, ErrorReason, HttpError, InvalidParamsError, ResponseValidationError, SdkError, ServiceInitializationError, ServiceUnavailableError, TimeoutError, isAbortedError, isHttpError, isInvalidParamsError, isResponseValidationError, isSdkError, isServiceInitializationError, isServiceUnavailableError, isTimeoutError };
|
|
117
|
+
//# sourceMappingURL=errors.d.cts.map
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
//#region src/errors.d.ts
|
|
2
|
+
declare enum ErrorCode {
|
|
3
|
+
NOT_IMPLEMENTED = 5e3,
|
|
4
|
+
SERVICE_NOT_AVAILABLE = 5001,
|
|
5
|
+
INITIALIZATION_FAILED = 5002,
|
|
6
|
+
INVALID_PARAMS = 5003,
|
|
7
|
+
TIMEOUT = 5004,
|
|
8
|
+
VIEM_ERROR = 5005,
|
|
9
|
+
TRANSACTION_REVERTED = 5006,
|
|
10
|
+
NOTARIZATION_FAILED = 5007,
|
|
11
|
+
SIGNING_FAILED = 5008,
|
|
12
|
+
SOLANA_ERROR = 5009,
|
|
13
|
+
UNKNOWN = 5999
|
|
14
|
+
}
|
|
15
|
+
declare enum ErrorReason {
|
|
16
|
+
/** the provided asset is not supported by the bridge */
|
|
17
|
+
ASSET_NOT_SUPPORTED = "ASSET_NOT_SUPPORTED",
|
|
18
|
+
/** the provided source or target chain is not supported by the bridge */
|
|
19
|
+
CHAIN_NOT_SUPPORTED = "CHAIN_NOT_SUPPORTED",
|
|
20
|
+
/** error while fetching or parsing the config */
|
|
21
|
+
CONFIG_NOT_AVAILABLE = "CONFIG_NOT_AVAILABLE",
|
|
22
|
+
/** required confirmation count of the source or target chain is unknown */
|
|
23
|
+
CONFIRMATION_COUNT_UNKNOWN = "CONFIRMATION_COUNT_UNKNOWN",
|
|
24
|
+
/** service is being initialized more than once */
|
|
25
|
+
DUPLICATE_SERVICE_INITIALIZATION = "DUPLICATE_SERVICE_INITIALIZATION",
|
|
26
|
+
/** bridge does not support specified environment */
|
|
27
|
+
ENVIRONMENT_NOT_SUPPORTED = "ENVIRONMENT_NOT_SUPPORTED",
|
|
28
|
+
/** provided source and target chains are the same */
|
|
29
|
+
IDENTICAL_CHAINS_PROVIDED = "IDENTICAL_CHAINS_PROVIDED",
|
|
30
|
+
/** the sender or recipient address is incorrect */
|
|
31
|
+
INCORRECT_ADDRESS_PROVIDED = "INCORRECT_ADDRESS_PROVIDED",
|
|
32
|
+
/** the transfer amount is incorrect (e.g.: lesser than or equal to zero) */
|
|
33
|
+
INCORRECT_AMOUNT_PROVIDED = "INCORRECT_AMOUNT_PROVIDED",
|
|
34
|
+
/** the transaction is not hex */
|
|
35
|
+
INCORRECT_HASH_PROVIDED = "INCORRECT_HASH_PROVIDED",
|
|
36
|
+
/** The provided provider is incorrect type (Provider VS BitcoinProvider) */
|
|
37
|
+
INCORRECT_PROVIDER_PROVIDED = "INCORRECT_PROVIDER_PROVIDED",
|
|
38
|
+
/** The provided signer is incorrect type */
|
|
39
|
+
INCORRECT_SIGNER_PROVIDED = "INCORRECT_SIGNER_PROVIDED",
|
|
40
|
+
/** the sourceTxHash or targetTxHash is incorrect */
|
|
41
|
+
INCORRECT_TXHASH_PROVIDED = "INCORRECT_TXHASH_PROVIDED",
|
|
42
|
+
/** generic error with the params */
|
|
43
|
+
INVALID_PARAMS = "INVALID_PARAMS",
|
|
44
|
+
/** ServiceType requested not available */
|
|
45
|
+
SERVICE_TYPE_NOT_CONFIGURED = "SERVICE_TYPE_NOT_CONFIGURED",
|
|
46
|
+
/** generic, not specified error */
|
|
47
|
+
UNKNOWN = "UNKNOWN",
|
|
48
|
+
/** error when the address has token approvals for addresses involved in the multichain incident */
|
|
49
|
+
VULNERABLE_TOKEN_APPROVAL_ADDRESS = "VULNERABLE_TOKEN_APPROVAL_ADDRESS",
|
|
50
|
+
/** error when warden config was not found or it is over the mismatch threshold */
|
|
51
|
+
WARDEN_CONFIG_MISMATCH = "WARDEN_CONFIG_MISMATCH",
|
|
52
|
+
/** fetched warden config does not contain network IDs */
|
|
53
|
+
WARDEN_CONFIG_MISSING_NETWORK = "WARDEN_CONFIG_MISSING_NETWORK",
|
|
54
|
+
/** address is blocked */
|
|
55
|
+
ADDRESS_IS_BLOCKED = "ADDRESS_IS_BLOCKED",
|
|
56
|
+
/** Quote expired */
|
|
57
|
+
QUOTE_EXPIRED = "QUOTE_EXPIRED"
|
|
58
|
+
}
|
|
59
|
+
declare class SdkError extends Error {
|
|
60
|
+
code: ErrorCode;
|
|
61
|
+
options?: {
|
|
62
|
+
cause?: unknown;
|
|
63
|
+
details?: string;
|
|
64
|
+
} | undefined;
|
|
65
|
+
name: string;
|
|
66
|
+
constructor(message: string, code: ErrorCode, options?: {
|
|
67
|
+
cause?: unknown;
|
|
68
|
+
details?: string;
|
|
69
|
+
} | undefined);
|
|
70
|
+
walk(): Error;
|
|
71
|
+
walk(fn: (err: unknown) => boolean): Error | null;
|
|
72
|
+
}
|
|
73
|
+
declare function isSdkError(error: unknown): error is SdkError;
|
|
74
|
+
declare class HttpError extends Error {
|
|
75
|
+
name: string;
|
|
76
|
+
readonly status: number;
|
|
77
|
+
readonly statusText: string;
|
|
78
|
+
readonly response: Response;
|
|
79
|
+
readonly data?: unknown;
|
|
80
|
+
constructor(message: string, response: Response, data?: unknown);
|
|
81
|
+
}
|
|
82
|
+
declare function isHttpError(error: unknown): error is HttpError;
|
|
83
|
+
declare class TimeoutError extends Error {
|
|
84
|
+
name: string;
|
|
85
|
+
constructor(message?: string);
|
|
86
|
+
}
|
|
87
|
+
declare function isTimeoutError(error: unknown): error is TimeoutError;
|
|
88
|
+
declare class AbortedError extends Error {
|
|
89
|
+
name: string;
|
|
90
|
+
constructor(message?: string);
|
|
91
|
+
}
|
|
92
|
+
declare function isAbortedError(error: unknown): error is AbortedError;
|
|
93
|
+
declare class ResponseValidationError extends Error {
|
|
94
|
+
name: string;
|
|
95
|
+
readonly issues?: unknown;
|
|
96
|
+
readonly rawResponse?: unknown;
|
|
97
|
+
constructor(message?: string, issues?: unknown, rawResponse?: unknown);
|
|
98
|
+
}
|
|
99
|
+
declare function isResponseValidationError(error: unknown): error is ResponseValidationError;
|
|
100
|
+
declare class ServiceInitializationError extends SdkError {
|
|
101
|
+
name: string;
|
|
102
|
+
constructor(message?: string, details?: string, cause?: unknown);
|
|
103
|
+
}
|
|
104
|
+
declare function isServiceInitializationError(error: unknown): error is ServiceInitializationError;
|
|
105
|
+
declare class ServiceUnavailableError extends SdkError {
|
|
106
|
+
name: string;
|
|
107
|
+
constructor(message?: string, details?: string);
|
|
108
|
+
}
|
|
109
|
+
declare function isServiceUnavailableError(error: unknown): error is ServiceUnavailableError;
|
|
110
|
+
declare class InvalidParamsError extends SdkError {
|
|
111
|
+
name: string;
|
|
112
|
+
constructor(message?: string, details?: string);
|
|
113
|
+
}
|
|
114
|
+
declare function isInvalidParamsError(error: unknown): error is InvalidParamsError;
|
|
115
|
+
//#endregion
|
|
116
|
+
export { AbortedError, ErrorCode, ErrorReason, HttpError, InvalidParamsError, ResponseValidationError, SdkError, ServiceInitializationError, ServiceUnavailableError, TimeoutError, isAbortedError, isHttpError, isInvalidParamsError, isResponseValidationError, isSdkError, isServiceInitializationError, isServiceUnavailableError, isTimeoutError };
|
|
117
|
+
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=function(e){return e[e.NOT_IMPLEMENTED=5e3]=`NOT_IMPLEMENTED`,e[e.SERVICE_NOT_AVAILABLE=5001]=`SERVICE_NOT_AVAILABLE`,e[e.INITIALIZATION_FAILED=5002]=`INITIALIZATION_FAILED`,e[e.INVALID_PARAMS=5003]=`INVALID_PARAMS`,e[e.TIMEOUT=5004]=`TIMEOUT`,e[e.VIEM_ERROR=5005]=`VIEM_ERROR`,e[e.TRANSACTION_REVERTED=5006]=`TRANSACTION_REVERTED`,e[e.NOTARIZATION_FAILED=5007]=`NOTARIZATION_FAILED`,e[e.SIGNING_FAILED=5008]=`SIGNING_FAILED`,e[e.SOLANA_ERROR=5009]=`SOLANA_ERROR`,e[e.UNKNOWN=5999]=`UNKNOWN`,e}({}),t=function(e){return e.ASSET_NOT_SUPPORTED=`ASSET_NOT_SUPPORTED`,e.CHAIN_NOT_SUPPORTED=`CHAIN_NOT_SUPPORTED`,e.CONFIG_NOT_AVAILABLE=`CONFIG_NOT_AVAILABLE`,e.CONFIRMATION_COUNT_UNKNOWN=`CONFIRMATION_COUNT_UNKNOWN`,e.DUPLICATE_SERVICE_INITIALIZATION=`DUPLICATE_SERVICE_INITIALIZATION`,e.ENVIRONMENT_NOT_SUPPORTED=`ENVIRONMENT_NOT_SUPPORTED`,e.IDENTICAL_CHAINS_PROVIDED=`IDENTICAL_CHAINS_PROVIDED`,e.INCORRECT_ADDRESS_PROVIDED=`INCORRECT_ADDRESS_PROVIDED`,e.INCORRECT_AMOUNT_PROVIDED=`INCORRECT_AMOUNT_PROVIDED`,e.INCORRECT_HASH_PROVIDED=`INCORRECT_HASH_PROVIDED`,e.INCORRECT_PROVIDER_PROVIDED=`INCORRECT_PROVIDER_PROVIDED`,e.INCORRECT_SIGNER_PROVIDED=`INCORRECT_SIGNER_PROVIDED`,e.INCORRECT_TXHASH_PROVIDED=`INCORRECT_TXHASH_PROVIDED`,e.INVALID_PARAMS=`INVALID_PARAMS`,e.SERVICE_TYPE_NOT_CONFIGURED=`SERVICE_TYPE_NOT_CONFIGURED`,e.UNKNOWN=`UNKNOWN`,e.VULNERABLE_TOKEN_APPROVAL_ADDRESS=`VULNERABLE_TOKEN_APPROVAL_ADDRESS`,e.WARDEN_CONFIG_MISMATCH=`WARDEN_CONFIG_MISMATCH`,e.WARDEN_CONFIG_MISSING_NETWORK=`WARDEN_CONFIG_MISSING_NETWORK`,e.ADDRESS_IS_BLOCKED=`ADDRESS_IS_BLOCKED`,e.QUOTE_EXPIRED=`QUOTE_EXPIRED`,e}({});var n=class extends Error{name=`SdkError`;constructor(e,t,n){super(e,{cause:n?.cause}),this.code=t,this.options=n}walk(e){return r(this,e)}};function r(e,t){return t?.(e)?e:e&&typeof e==`object`&&`cause`in e&&e.cause!==void 0?r(e.cause,t):t?null:e}function i(e){return e instanceof n}var a=class extends Error{name=`HttpError`;status;statusText;response;data;constructor(e,t,n){super(e),this.name=`HttpError`,this.status=t.status,this.statusText=t.statusText,this.response=t,this.data=n}};function o(e){return e instanceof a}var s=class extends Error{name=`TimeoutError`;constructor(e=`Request timed out.`){super(e),this.name=`TimeoutError`}};function c(e){return e instanceof s}var l=class extends Error{name=`AbortedError`;constructor(e=`Operation was aborted.`){super(e),this.name=`AbortedError`}};function u(e){return e instanceof l}var d=class extends Error{name=`ResponseValidationError`;issues;rawResponse;constructor(e=`Response validation failed.`,t,n){super(e),this.name=`ResponseValidationError`,this.issues=t,this.rawResponse=n}};function f(e){return e instanceof d}var p=class extends n{name=`ServiceInitializationError`;constructor(n=t.UNKNOWN,r,i){super(n,e.INITIALIZATION_FAILED,{cause:i,details:r})}};function m(e){return e instanceof p}var h=class extends n{name=`ServiceUnavailableError`;constructor(n=t.UNKNOWN,r){super(n,e.SERVICE_NOT_AVAILABLE,{details:r})}};function g(e){return e instanceof h}var _=class extends n{name=`InvalidParamsError`;constructor(n=t.INVALID_PARAMS,r){super(n,e.INVALID_PARAMS,{details:r})}};function v(e){return e instanceof _}export{l as AbortedError,e as ErrorCode,t as ErrorReason,a as HttpError,_ as InvalidParamsError,d as ResponseValidationError,n as SdkError,p as ServiceInitializationError,h as ServiceUnavailableError,s as TimeoutError,u as isAbortedError,o as isHttpError,v as isInvalidParamsError,f as isResponseValidationError,i as isSdkError,m as isServiceInitializationError,g as isServiceUnavailableError,c as isTimeoutError};
|
|
2
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export enum ErrorCode {\n NOT_IMPLEMENTED = 5_000,\n SERVICE_NOT_AVAILABLE = 5_001,\n INITIALIZATION_FAILED = 5_002,\n INVALID_PARAMS = 5_003,\n TIMEOUT = 5_004,\n VIEM_ERROR = 5_005,\n TRANSACTION_REVERTED = 5_006,\n NOTARIZATION_FAILED = 5_007,\n SIGNING_FAILED = 5_008,\n SOLANA_ERROR = 5_009,\n UNKNOWN = 5_999,\n}\n\nexport enum ErrorReason {\n /** the provided asset is not supported by the bridge */\n ASSET_NOT_SUPPORTED = 'ASSET_NOT_SUPPORTED',\n /** the provided source or target chain is not supported by the bridge */\n CHAIN_NOT_SUPPORTED = 'CHAIN_NOT_SUPPORTED',\n /** error while fetching or parsing the config */\n CONFIG_NOT_AVAILABLE = 'CONFIG_NOT_AVAILABLE',\n /** required confirmation count of the source or target chain is unknown */\n CONFIRMATION_COUNT_UNKNOWN = 'CONFIRMATION_COUNT_UNKNOWN',\n /** service is being initialized more than once */\n DUPLICATE_SERVICE_INITIALIZATION = 'DUPLICATE_SERVICE_INITIALIZATION',\n /** bridge does not support specified environment */\n ENVIRONMENT_NOT_SUPPORTED = 'ENVIRONMENT_NOT_SUPPORTED',\n /** provided source and target chains are the same */\n IDENTICAL_CHAINS_PROVIDED = 'IDENTICAL_CHAINS_PROVIDED',\n /** the sender or recipient address is incorrect */\n INCORRECT_ADDRESS_PROVIDED = 'INCORRECT_ADDRESS_PROVIDED',\n /** the transfer amount is incorrect (e.g.: lesser than or equal to zero) */\n INCORRECT_AMOUNT_PROVIDED = 'INCORRECT_AMOUNT_PROVIDED',\n /** the transaction is not hex */\n INCORRECT_HASH_PROVIDED = 'INCORRECT_HASH_PROVIDED',\n /** The provided provider is incorrect type (Provider VS BitcoinProvider) */\n INCORRECT_PROVIDER_PROVIDED = 'INCORRECT_PROVIDER_PROVIDED',\n /** The provided signer is incorrect type */\n INCORRECT_SIGNER_PROVIDED = 'INCORRECT_SIGNER_PROVIDED',\n /** the sourceTxHash or targetTxHash is incorrect */\n INCORRECT_TXHASH_PROVIDED = 'INCORRECT_TXHASH_PROVIDED',\n /** generic error with the params */\n INVALID_PARAMS = 'INVALID_PARAMS',\n /** ServiceType requested not available */\n SERVICE_TYPE_NOT_CONFIGURED = 'SERVICE_TYPE_NOT_CONFIGURED',\n /** generic, not specified error */\n UNKNOWN = 'UNKNOWN',\n /** error when the address has token approvals for addresses involved in the multichain incident */\n VULNERABLE_TOKEN_APPROVAL_ADDRESS = 'VULNERABLE_TOKEN_APPROVAL_ADDRESS',\n /** error when warden config was not found or it is over the mismatch threshold */\n WARDEN_CONFIG_MISMATCH = 'WARDEN_CONFIG_MISMATCH',\n /** fetched warden config does not contain network IDs */\n WARDEN_CONFIG_MISSING_NETWORK = 'WARDEN_CONFIG_MISSING_NETWORK',\n /** address is blocked */\n ADDRESS_IS_BLOCKED = 'ADDRESS_IS_BLOCKED',\n /** Quote expired */\n QUOTE_EXPIRED = 'QUOTE_EXPIRED',\n}\n\nexport class SdkError extends Error {\n override name = 'SdkError';\n\n constructor(\n message: string,\n public code: ErrorCode,\n public options?: {\n cause?: unknown;\n details?: string;\n },\n ) {\n super(message, { cause: options?.cause });\n }\n\n walk(): Error;\n walk(fn: (err: unknown) => boolean): Error | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walk(fn?: any): any {\n return walkError(this, fn);\n }\n}\n\nfunction walkError(err: unknown): unknown;\nfunction walkError(err: unknown, fn: (err: unknown) => boolean): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null {\n if (fn?.(err)) {\n return err;\n }\n\n if (err && typeof err === 'object' && 'cause' in err && err.cause !== undefined) {\n return walkError(err.cause, fn);\n }\n\n return fn ? null : err;\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport class HttpError extends Error {\n override name = 'HttpError';\n\n readonly status: number;\n readonly statusText: string;\n readonly response: Response;\n readonly data?: unknown;\n\n constructor(message: string, response: Response, data?: unknown) {\n super(message);\n this.name = 'HttpError';\n this.status = response.status;\n this.statusText = response.statusText;\n this.response = response;\n this.data = data;\n }\n}\n\nexport function isHttpError(error: unknown): error is HttpError {\n return error instanceof HttpError;\n}\n\nexport class TimeoutError extends Error {\n override name = 'TimeoutError';\n\n constructor(message = 'Request timed out.') {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport class AbortedError extends Error {\n override name = 'AbortedError';\n\n constructor(message = 'Operation was aborted.') {\n super(message);\n this.name = 'AbortedError';\n }\n}\n\nexport function isAbortedError(error: unknown): error is AbortedError {\n return error instanceof AbortedError;\n}\n\nexport class ResponseValidationError extends Error {\n override name = 'ResponseValidationError';\n\n readonly issues?: unknown;\n readonly rawResponse?: unknown;\n\n constructor(message = 'Response validation failed.', issues?: unknown, rawResponse?: unknown) {\n super(message);\n this.name = 'ResponseValidationError';\n this.issues = issues;\n this.rawResponse = rawResponse;\n }\n}\n\nexport function isResponseValidationError(error: unknown): error is ResponseValidationError {\n return error instanceof ResponseValidationError;\n}\n\nexport class ServiceInitializationError extends SdkError {\n override name = 'ServiceInitializationError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string, cause?: unknown) {\n super(message, ErrorCode.INITIALIZATION_FAILED, { cause, details });\n }\n}\n\nexport function isServiceInitializationError(error: unknown): error is ServiceInitializationError {\n return error instanceof ServiceInitializationError;\n}\n\nexport class ServiceUnavailableError extends SdkError {\n override name = 'ServiceUnavailableError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string) {\n super(message, ErrorCode.SERVICE_NOT_AVAILABLE, { details });\n }\n}\n\nexport function isServiceUnavailableError(error: unknown): error is ServiceUnavailableError {\n return error instanceof ServiceUnavailableError;\n}\n\nexport class InvalidParamsError extends SdkError {\n override name = 'InvalidParamsError';\n\n constructor(message: string = ErrorReason.INVALID_PARAMS, details?: string) {\n super(message, ErrorCode.INVALID_PARAMS, { details });\n }\n}\n\nexport function isInvalidParamsError(error: unknown): error is InvalidParamsError {\n return error instanceof InvalidParamsError;\n}\n\n/**\n * @internal\n *\n * Error to indicate that a functionality has not yet been implemented.\n * Do not export from entrypoint.\n */\nexport class NotImplementedError extends SdkError {\n constructor() {\n super('This functionality is not yet implemented.', ErrorCode.NOT_IMPLEMENTED);\n }\n}\n"],"mappings":"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"}
|
package/dist/mod.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./constants.cjs`),t=require(`./errors.cjs`),n=require(`./type-guards.cjs`),r=require(`./transfer-manager.cjs`),i=require(`./utils/caip.cjs`),a=require(`./utils/transfer-utils.cjs`);exports.AVALANCHE_FUJI_CHAIN=e.AVALANCHE_FUJI_CHAIN,exports.AVALANCHE_MAINNET_CHAIN=e.AVALANCHE_MAINNET_CHAIN,exports.AbortedError=t.AbortedError,exports.AvalancheChainIds=e.AvalancheChainIds,exports.BITCOIN_MAINNET_CHAIN=e.BITCOIN_MAINNET_CHAIN,exports.BITCOIN_TESTNET_CHAIN=e.BITCOIN_TESTNET_CHAIN,exports.BTC_SERVICE_TYPES=e.BTC_SERVICE_TYPES,exports.BitcoinChainIds=e.BitcoinChainIds,exports.Blockchain=e.Blockchain,exports.ERC_ZERO_ADDRESS=e.ERC_ZERO_ADDRESS,exports.ETHEREUM_MAINNET_CHAIN=e.ETHEREUM_MAINNET_CHAIN,exports.ETHEREUM_SEPOLIA_CHAIN=e.ETHEREUM_SEPOLIA_CHAIN,exports.EVM_SERVICE_TYPES=e.EVM_SERVICE_TYPES,exports.Environment=e.Environment,exports.ErrorCode=t.ErrorCode,exports.ErrorReason=t.ErrorReason,exports.EthereumChainIds=e.EthereumChainIds,exports.EvmChainId=e.EvmChainId,exports.FEE_RATE_TIER_TO_BITCOIN=e.FEE_RATE_TIER_TO_BITCOIN,exports.HttpError=t.HttpError,exports.InvalidParamsError=t.InvalidParamsError,exports.NATIVE_AVAX=e.NATIVE_AVAX,exports.NATIVE_ETH=e.NATIVE_ETH,exports.ResponseValidationError=t.ResponseValidationError,exports.SOLANA_DEVNET_CHAIN=e.SOLANA_DEVNET_CHAIN,exports.SOLANA_MAINNET_CHAIN=e.SOLANA_MAINNET_CHAIN,exports.SOL_MINT_ADDRESS=e.SOL_MINT_ADDRESS,exports.SdkError=t.SdkError,exports.ServiceInitializationError=t.ServiceInitializationError,exports.ServiceType=e.ServiceType,exports.ServiceUnavailableError=t.ServiceUnavailableError,exports.SolanaChainIds=e.SolanaChainIds,exports.TimeoutError=t.TimeoutError,exports.TokenType=e.TokenType,exports.TransferSignatureReason=e.TransferSignatureReason,exports.caip2ToEip155ChainId=i.caip2ToEip155ChainId,exports.caip2ToEip155HexChainId=i.caip2ToEip155HexChainId,exports.createTransferManager=r.createTransferManager,exports.eip155ChainIdToCaip2=i.eip155ChainIdToCaip2,exports.isAbortedError=t.isAbortedError,exports.isCaip2ChainId=i.isCaip2ChainId,exports.isEnvironment=n.isEnvironment,exports.isErc20Asset=n.isErc20Asset,exports.isEvmBridgeInitializer=n.isEvmBridgeInitializer,exports.isHttpError=t.isHttpError,exports.isInvalidParamsError=t.isInvalidParamsError,exports.isLombardServiceInitializer=n.isLombardServiceInitializer,exports.isMarkrServiceInitializer=n.isMarkrServiceInitializer,exports.isNativeAsset=n.isNativeAsset,exports.isResponseValidationError=t.isResponseValidationError,exports.isSdkError=t.isSdkError,exports.isServiceInitializationError=t.isServiceInitializationError,exports.isServiceInitializer=n.isServiceInitializer,exports.isServiceUnavailableError=t.isServiceUnavailableError,exports.isSplAsset=n.isSplAsset,exports.isTimeoutError=t.isTimeoutError,exports.parseTransfer=a.parseTransfer,exports.splitCaip2ChainId=i.splitCaip2ChainId,exports.stringifyTransfer=a.stringifyTransfer;
|
package/dist/mod.d.cts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Caip10AccountId, Caip2ChainId } from "./types/caip.cjs";
|
|
2
|
+
import { BitcoinFeeRateTier, BitcoinFunctions, BitcoinInputUTXO, BitcoinInputUTXOWithOptionalScript, BitcoinOutputUTXO, BitcoinTx } from "./types/bitcoin.cjs";
|
|
3
|
+
import { Chain } from "./types/chain.cjs";
|
|
4
|
+
import { FeeRateTier } from "./types/fee.cjs";
|
|
5
|
+
import { AVALANCHE_FUJI_CHAIN, AVALANCHE_MAINNET_CHAIN, AvalancheChainIds, BITCOIN_MAINNET_CHAIN, BITCOIN_TESTNET_CHAIN, BTC_SERVICE_TYPES, BitcoinChainIds, Blockchain, ERC_ZERO_ADDRESS, ETHEREUM_MAINNET_CHAIN, ETHEREUM_SEPOLIA_CHAIN, EVM_SERVICE_TYPES, Environment, EthereumChainIds, EvmChainId, FEE_RATE_TIER_TO_BITCOIN, NATIVE_AVAX, NATIVE_ETH, SOLANA_DEVNET_CHAIN, SOLANA_MAINNET_CHAIN, SOL_MINT_ADDRESS, ServiceType, SolanaChainIds, TokenType, TransferSignatureReason } from "./constants.cjs";
|
|
6
|
+
import { Asset, BridgeableUiAsset, ChainAssetMap, DestinationInfo, Erc20Asset, NativeAsset, SplAsset, TransferableAsset } from "./types/asset.cjs";
|
|
7
|
+
import { Quote, QuoteFee, QuoteFeeToken, QuoteFeeType, QuoteFees, QuoterDoneReason, QuoterEventArgs, QuoterEventHandler, QuoterInterface, QuoterProps, QuotesTuple, ServiceQuoteEventArgs, ServiceQuoteEventHandler } from "./types/quote.cjs";
|
|
8
|
+
import { AbortedError, ErrorCode, ErrorReason, HttpError, InvalidParamsError, ResponseValidationError, SdkError, ServiceInitializationError, ServiceUnavailableError, TimeoutError, isAbortedError, isHttpError, isInvalidParamsError, isResponseValidationError, isSdkError, isServiceInitializationError, isServiceUnavailableError, isTimeoutError } from "./errors.cjs";
|
|
9
|
+
import { CompletedTransfer, FailedTransfer, RefundedTransfer, SourceCompletedTransfer, SourcePendingTransfer, TargetPendingTransfer, Transfer, TransferBase, TransferSourceProgress, TransferStatus, TransferStepDetails, TransferTargetProgress } from "./types/transfer.cjs";
|
|
10
|
+
import { SolanaSendOptions, SolanaTransactionParams } from "./utils/solana-transaction.cjs";
|
|
11
|
+
import { BtcDispatch, BtcSign, BtcSigner, BtcTransactionRequest, EvmDispatch, EvmSign, EvmSignBatch, EvmSignMessage, EvmSigner, EvmSignerWithMessage, EvmTransactionRequest, Hex, SolanaSign, SolanaSigner } from "./types/signer.cjs";
|
|
12
|
+
import { ArrayElement, DeepMutable, Fetch, Mutable } from "./types/utility-types.cjs";
|
|
13
|
+
import { EstimateNativeFeeOptions, EvmServiceInitializer, GasSettings, GetBridgeableAssetsProps, GetMinimumTransferAmountProps, GetSupportedChainsResult, LombardServiceInitializer, MarkrServiceInitializer, MutableGetSupportedChainsResult, NativeFeeEstimate, ServiceInitializer, TrackTransferProps, TransferAssetProps, TransferService } from "./types/service.cjs";
|
|
14
|
+
import { AssetBridgeMap, CreateTransferManagerOptions, ServiceStatus, ServiceStatusBaseRecord, ServiceStatusErrorRecord, ServiceStatusInitializedRecord, ServiceStatusRecord, ServiceStatusUnsupportedEnvironmentRecord, TransferManager, TransferManagerStatus, TransferManagerStatusServicesRecord } from "./types/transfer-manager.cjs";
|
|
15
|
+
import { isEnvironment, isErc20Asset, isEvmBridgeInitializer, isLombardServiceInitializer, isMarkrServiceInitializer, isNativeAsset, isServiceInitializer, isSplAsset } from "./type-guards.cjs";
|
|
16
|
+
import { createTransferManager } from "./transfer-manager.cjs";
|
|
17
|
+
import { caip2ToEip155ChainId, caip2ToEip155HexChainId, eip155ChainIdToCaip2, isCaip2ChainId, splitCaip2ChainId } from "./utils/caip.cjs";
|
|
18
|
+
import { parseTransfer, stringifyTransfer } from "./utils/transfer-utils.cjs";
|
|
19
|
+
export { AVALANCHE_FUJI_CHAIN, AVALANCHE_MAINNET_CHAIN, AbortedError, ArrayElement, Asset, AssetBridgeMap, AvalancheChainIds, BITCOIN_MAINNET_CHAIN, BITCOIN_TESTNET_CHAIN, BTC_SERVICE_TYPES, BitcoinChainIds, BitcoinFeeRateTier, BitcoinFunctions, BitcoinInputUTXO, BitcoinInputUTXOWithOptionalScript, BitcoinOutputUTXO, BitcoinTx, Blockchain, BridgeableUiAsset, BtcDispatch, BtcSign, BtcSigner, BtcTransactionRequest, Caip10AccountId, Caip2ChainId, Chain, ChainAssetMap, CompletedTransfer, CreateTransferManagerOptions, DeepMutable, DestinationInfo, ERC_ZERO_ADDRESS, ETHEREUM_MAINNET_CHAIN, ETHEREUM_SEPOLIA_CHAIN, EVM_SERVICE_TYPES, Environment, Erc20Asset, ErrorCode, ErrorReason, EstimateNativeFeeOptions, EthereumChainIds, EvmChainId, EvmDispatch, EvmServiceInitializer, EvmSign, EvmSignBatch, EvmSignMessage, EvmSigner, EvmSignerWithMessage, EvmTransactionRequest, FEE_RATE_TIER_TO_BITCOIN, FailedTransfer, FeeRateTier, Fetch, GasSettings, GetBridgeableAssetsProps, GetMinimumTransferAmountProps, GetSupportedChainsResult, Hex, HttpError, InvalidParamsError, LombardServiceInitializer, MarkrServiceInitializer, Mutable, MutableGetSupportedChainsResult, NATIVE_AVAX, NATIVE_ETH, NativeAsset, NativeFeeEstimate, Quote, QuoteFee, QuoteFeeToken, QuoteFeeType, QuoteFees, QuoterDoneReason, QuoterEventArgs, QuoterEventHandler, QuoterInterface, QuoterProps, QuotesTuple, RefundedTransfer, ResponseValidationError, SOLANA_DEVNET_CHAIN, SOLANA_MAINNET_CHAIN, SOL_MINT_ADDRESS, SdkError, ServiceInitializationError, ServiceInitializer, ServiceQuoteEventArgs, ServiceQuoteEventHandler, ServiceStatus, ServiceStatusBaseRecord, ServiceStatusErrorRecord, ServiceStatusInitializedRecord, ServiceStatusRecord, ServiceStatusUnsupportedEnvironmentRecord, ServiceType, ServiceUnavailableError, SolanaChainIds, SolanaSendOptions, SolanaSign, SolanaSigner, SolanaTransactionParams, SourceCompletedTransfer, SourcePendingTransfer, SplAsset, TargetPendingTransfer, TimeoutError, TokenType, TrackTransferProps, Transfer, TransferAssetProps, TransferBase, TransferManager, TransferManagerStatus, TransferManagerStatusServicesRecord, TransferService, TransferSignatureReason, TransferSourceProgress, TransferStatus, TransferStepDetails, TransferTargetProgress, TransferableAsset, caip2ToEip155ChainId, caip2ToEip155HexChainId, createTransferManager, eip155ChainIdToCaip2, isAbortedError, isCaip2ChainId, isEnvironment, isErc20Asset, isEvmBridgeInitializer, isHttpError, isInvalidParamsError, isLombardServiceInitializer, isMarkrServiceInitializer, isNativeAsset, isResponseValidationError, isSdkError, isServiceInitializationError, isServiceInitializer, isServiceUnavailableError, isSplAsset, isTimeoutError, parseTransfer, splitCaip2ChainId, stringifyTransfer };
|
package/dist/mod.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Caip10AccountId, Caip2ChainId } from "./types/caip.js";
|
|
2
|
+
import { BitcoinFeeRateTier, BitcoinFunctions, BitcoinInputUTXO, BitcoinInputUTXOWithOptionalScript, BitcoinOutputUTXO, BitcoinTx } from "./types/bitcoin.js";
|
|
3
|
+
import { Chain } from "./types/chain.js";
|
|
4
|
+
import { FeeRateTier } from "./types/fee.js";
|
|
5
|
+
import { AVALANCHE_FUJI_CHAIN, AVALANCHE_MAINNET_CHAIN, AvalancheChainIds, BITCOIN_MAINNET_CHAIN, BITCOIN_TESTNET_CHAIN, BTC_SERVICE_TYPES, BitcoinChainIds, Blockchain, ERC_ZERO_ADDRESS, ETHEREUM_MAINNET_CHAIN, ETHEREUM_SEPOLIA_CHAIN, EVM_SERVICE_TYPES, Environment, EthereumChainIds, EvmChainId, FEE_RATE_TIER_TO_BITCOIN, NATIVE_AVAX, NATIVE_ETH, SOLANA_DEVNET_CHAIN, SOLANA_MAINNET_CHAIN, SOL_MINT_ADDRESS, ServiceType, SolanaChainIds, TokenType, TransferSignatureReason } from "./constants.js";
|
|
6
|
+
import { Asset, BridgeableUiAsset, ChainAssetMap, DestinationInfo, Erc20Asset, NativeAsset, SplAsset, TransferableAsset } from "./types/asset.js";
|
|
7
|
+
import { Quote, QuoteFee, QuoteFeeToken, QuoteFeeType, QuoteFees, QuoterDoneReason, QuoterEventArgs, QuoterEventHandler, QuoterInterface, QuoterProps, QuotesTuple, ServiceQuoteEventArgs, ServiceQuoteEventHandler } from "./types/quote.js";
|
|
8
|
+
import { AbortedError, ErrorCode, ErrorReason, HttpError, InvalidParamsError, ResponseValidationError, SdkError, ServiceInitializationError, ServiceUnavailableError, TimeoutError, isAbortedError, isHttpError, isInvalidParamsError, isResponseValidationError, isSdkError, isServiceInitializationError, isServiceUnavailableError, isTimeoutError } from "./errors.js";
|
|
9
|
+
import { CompletedTransfer, FailedTransfer, RefundedTransfer, SourceCompletedTransfer, SourcePendingTransfer, TargetPendingTransfer, Transfer, TransferBase, TransferSourceProgress, TransferStatus, TransferStepDetails, TransferTargetProgress } from "./types/transfer.js";
|
|
10
|
+
import { SolanaSendOptions, SolanaTransactionParams } from "./utils/solana-transaction.js";
|
|
11
|
+
import { BtcDispatch, BtcSign, BtcSigner, BtcTransactionRequest, EvmDispatch, EvmSign, EvmSignBatch, EvmSignMessage, EvmSigner, EvmSignerWithMessage, EvmTransactionRequest, Hex, SolanaSign, SolanaSigner } from "./types/signer.js";
|
|
12
|
+
import { ArrayElement, DeepMutable, Fetch, Mutable } from "./types/utility-types.js";
|
|
13
|
+
import { EstimateNativeFeeOptions, EvmServiceInitializer, GasSettings, GetBridgeableAssetsProps, GetMinimumTransferAmountProps, GetSupportedChainsResult, LombardServiceInitializer, MarkrServiceInitializer, MutableGetSupportedChainsResult, NativeFeeEstimate, ServiceInitializer, TrackTransferProps, TransferAssetProps, TransferService } from "./types/service.js";
|
|
14
|
+
import { AssetBridgeMap, CreateTransferManagerOptions, ServiceStatus, ServiceStatusBaseRecord, ServiceStatusErrorRecord, ServiceStatusInitializedRecord, ServiceStatusRecord, ServiceStatusUnsupportedEnvironmentRecord, TransferManager, TransferManagerStatus, TransferManagerStatusServicesRecord } from "./types/transfer-manager.js";
|
|
15
|
+
import { isEnvironment, isErc20Asset, isEvmBridgeInitializer, isLombardServiceInitializer, isMarkrServiceInitializer, isNativeAsset, isServiceInitializer, isSplAsset } from "./type-guards.js";
|
|
16
|
+
import { createTransferManager } from "./transfer-manager.js";
|
|
17
|
+
import { caip2ToEip155ChainId, caip2ToEip155HexChainId, eip155ChainIdToCaip2, isCaip2ChainId, splitCaip2ChainId } from "./utils/caip.js";
|
|
18
|
+
import { parseTransfer, stringifyTransfer } from "./utils/transfer-utils.js";
|
|
19
|
+
export { AVALANCHE_FUJI_CHAIN, AVALANCHE_MAINNET_CHAIN, AbortedError, ArrayElement, Asset, AssetBridgeMap, AvalancheChainIds, BITCOIN_MAINNET_CHAIN, BITCOIN_TESTNET_CHAIN, BTC_SERVICE_TYPES, BitcoinChainIds, BitcoinFeeRateTier, BitcoinFunctions, BitcoinInputUTXO, BitcoinInputUTXOWithOptionalScript, BitcoinOutputUTXO, BitcoinTx, Blockchain, BridgeableUiAsset, BtcDispatch, BtcSign, BtcSigner, BtcTransactionRequest, Caip10AccountId, Caip2ChainId, Chain, ChainAssetMap, CompletedTransfer, CreateTransferManagerOptions, DeepMutable, DestinationInfo, ERC_ZERO_ADDRESS, ETHEREUM_MAINNET_CHAIN, ETHEREUM_SEPOLIA_CHAIN, EVM_SERVICE_TYPES, Environment, Erc20Asset, ErrorCode, ErrorReason, EstimateNativeFeeOptions, EthereumChainIds, EvmChainId, EvmDispatch, EvmServiceInitializer, EvmSign, EvmSignBatch, EvmSignMessage, EvmSigner, EvmSignerWithMessage, EvmTransactionRequest, FEE_RATE_TIER_TO_BITCOIN, FailedTransfer, FeeRateTier, Fetch, GasSettings, GetBridgeableAssetsProps, GetMinimumTransferAmountProps, GetSupportedChainsResult, Hex, HttpError, InvalidParamsError, LombardServiceInitializer, MarkrServiceInitializer, Mutable, MutableGetSupportedChainsResult, NATIVE_AVAX, NATIVE_ETH, NativeAsset, NativeFeeEstimate, Quote, QuoteFee, QuoteFeeToken, QuoteFeeType, QuoteFees, QuoterDoneReason, QuoterEventArgs, QuoterEventHandler, QuoterInterface, QuoterProps, QuotesTuple, RefundedTransfer, ResponseValidationError, SOLANA_DEVNET_CHAIN, SOLANA_MAINNET_CHAIN, SOL_MINT_ADDRESS, SdkError, ServiceInitializationError, ServiceInitializer, ServiceQuoteEventArgs, ServiceQuoteEventHandler, ServiceStatus, ServiceStatusBaseRecord, ServiceStatusErrorRecord, ServiceStatusInitializedRecord, ServiceStatusRecord, ServiceStatusUnsupportedEnvironmentRecord, ServiceType, ServiceUnavailableError, SolanaChainIds, SolanaSendOptions, SolanaSign, SolanaSigner, SolanaTransactionParams, SourceCompletedTransfer, SourcePendingTransfer, SplAsset, TargetPendingTransfer, TimeoutError, TokenType, TrackTransferProps, Transfer, TransferAssetProps, TransferBase, TransferManager, TransferManagerStatus, TransferManagerStatusServicesRecord, TransferService, TransferSignatureReason, TransferSourceProgress, TransferStatus, TransferStepDetails, TransferTargetProgress, TransferableAsset, caip2ToEip155ChainId, caip2ToEip155HexChainId, createTransferManager, eip155ChainIdToCaip2, isAbortedError, isCaip2ChainId, isEnvironment, isErc20Asset, isEvmBridgeInitializer, isHttpError, isInvalidParamsError, isLombardServiceInitializer, isMarkrServiceInitializer, isNativeAsset, isResponseValidationError, isSdkError, isServiceInitializationError, isServiceInitializer, isServiceUnavailableError, isSplAsset, isTimeoutError, parseTransfer, splitCaip2ChainId, stringifyTransfer };
|
package/dist/mod.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{AVALANCHE_FUJI_CHAIN as e,AVALANCHE_MAINNET_CHAIN as t,AvalancheChainIds as n,BITCOIN_MAINNET_CHAIN as r,BITCOIN_TESTNET_CHAIN as i,BTC_SERVICE_TYPES as a,BitcoinChainIds as o,Blockchain as s,ERC_ZERO_ADDRESS as c,ETHEREUM_MAINNET_CHAIN as l,ETHEREUM_SEPOLIA_CHAIN as u,EVM_SERVICE_TYPES as d,Environment as f,EthereumChainIds as p,EvmChainId as m,FEE_RATE_TIER_TO_BITCOIN as h,NATIVE_AVAX as g,NATIVE_ETH as _,SOLANA_DEVNET_CHAIN as v,SOLANA_MAINNET_CHAIN as y,SOL_MINT_ADDRESS as b,ServiceType as x,SolanaChainIds as S,TokenType as C,TransferSignatureReason as w}from"./constants.js";import{AbortedError as T,ErrorCode as E,ErrorReason as D,HttpError as O,InvalidParamsError as k,ResponseValidationError as A,SdkError as j,ServiceInitializationError as M,ServiceUnavailableError as N,TimeoutError as P,isAbortedError as F,isHttpError as I,isInvalidParamsError as L,isResponseValidationError as R,isSdkError as z,isServiceInitializationError as B,isServiceUnavailableError as V,isTimeoutError as H}from"./errors.js";import{isEnvironment as U,isErc20Asset as W,isEvmBridgeInitializer as G,isLombardServiceInitializer as K,isMarkrServiceInitializer as q,isNativeAsset as J,isServiceInitializer as Y,isSplAsset as X}from"./type-guards.js";import{createTransferManager as Z}from"./transfer-manager.js";import{caip2ToEip155ChainId as Q,caip2ToEip155HexChainId as $,eip155ChainIdToCaip2 as ee,isCaip2ChainId as te,splitCaip2ChainId as ne}from"./utils/caip.js";import{parseTransfer as re,stringifyTransfer as ie}from"./utils/transfer-utils.js";export{e as AVALANCHE_FUJI_CHAIN,t as AVALANCHE_MAINNET_CHAIN,T as AbortedError,n as AvalancheChainIds,r as BITCOIN_MAINNET_CHAIN,i as BITCOIN_TESTNET_CHAIN,a as BTC_SERVICE_TYPES,o as BitcoinChainIds,s as Blockchain,c as ERC_ZERO_ADDRESS,l as ETHEREUM_MAINNET_CHAIN,u as ETHEREUM_SEPOLIA_CHAIN,d as EVM_SERVICE_TYPES,f as Environment,E as ErrorCode,D as ErrorReason,p as EthereumChainIds,m as EvmChainId,h as FEE_RATE_TIER_TO_BITCOIN,O as HttpError,k as InvalidParamsError,g as NATIVE_AVAX,_ as NATIVE_ETH,A as ResponseValidationError,v as SOLANA_DEVNET_CHAIN,y as SOLANA_MAINNET_CHAIN,b as SOL_MINT_ADDRESS,j as SdkError,M as ServiceInitializationError,x as ServiceType,N as ServiceUnavailableError,S as SolanaChainIds,P as TimeoutError,C as TokenType,w as TransferSignatureReason,Q as caip2ToEip155ChainId,$ as caip2ToEip155HexChainId,Z as createTransferManager,ee as eip155ChainIdToCaip2,F as isAbortedError,te as isCaip2ChainId,U as isEnvironment,W as isErc20Asset,G as isEvmBridgeInitializer,I as isHttpError,L as isInvalidParamsError,K as isLombardServiceInitializer,q as isMarkrServiceInitializer,J as isNativeAsset,R as isResponseValidationError,z as isSdkError,B as isServiceInitializationError,Y as isServiceInitializer,V as isServiceUnavailableError,X as isSplAsset,H as isTimeoutError,re as parseTransfer,ne as splitCaip2ChainId,ie as stringifyTransfer};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e({quote:e,nowSeconds:t,evictBufferSeconds:n=0}){return e.expiresAt<=t+n}function t(e,t){return e.amountOut===t.amountOut?e.expiresAt===t.expiresAt?e.id<t.id?-1:e.id>t.id?1:0:e.expiresAt>t.expiresAt?-1:1:e.amountOut>t.amountOut?-1:1}function n({quotes:t,nowSeconds:n,evictBufferSeconds:r=0}){return t.filter(t=>!e({quote:t,nowSeconds:n,evictBufferSeconds:r}))}function r(e,t){let n=e.findIndex(e=>e.id===t.id);if(n===-1){let n=e.findIndex(e=>e.serviceType===t.serviceType&&e.aggregator.id===t.aggregator.id);if(n>=0){let r=e.slice();return r[n]=t,r}return[...e,t]}let r=e.slice();return r[n]=t,r}function i(e){let n=e.slice();return n.sort(t),n}function a({quotes:t,serviceType:n,nowSeconds:r}){let i=null;for(let a of t)a.serviceType===n&&(e({quote:a,nowSeconds:r})||(i===null||a.expiresAt<i)&&(i=a.expiresAt));return i}exports.earliestExpirationForService=a,exports.isQuoteExpired=e,exports.pruneExpiredQuotes=n,exports.sortQuotes=i,exports.upsertQuote=r;
|
|
2
|
+
//# sourceMappingURL=_utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.cjs","names":[],"sources":["../../src/quoter/_utils.ts"],"sourcesContent":["/**\n * @internal\n *\n * Utility functions for the Quoter.\n * Internal only; not exposed publicly.\n */\n\nimport type { Quote } from '../types/quote';\nimport type { TransferService } from '../types/service';\n\n/**\n * Determine whether a quote has expired at the provided time.\n */\nexport function isQuoteExpired({\n quote,\n nowSeconds,\n evictBufferSeconds = 0,\n}: {\n quote: Quote;\n /** Current unix time in seconds. */\n nowSeconds: number;\n /** Amount of time to buffer \"now\" to early evict quote. */\n evictBufferSeconds?: number;\n}): boolean {\n return quote.expiresAt <= nowSeconds + evictBufferSeconds;\n}\n\n/**\n * Compare two quotes by desirability.\n * Sort order: amountOut desc, expiresAt desc, id asc (for stability).\n * Returns negative if a should come before b.\n */\nexport function compareQuotes(a: Quote, b: Quote): number {\n if (a.amountOut !== b.amountOut) {\n return a.amountOut > b.amountOut ? -1 : 1;\n }\n if (a.expiresAt !== b.expiresAt) {\n return a.expiresAt > b.expiresAt ? -1 : 1;\n }\n return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n}\n\n/**\n * Return a new array without expired quotes.\n */\nexport function pruneExpiredQuotes({\n quotes,\n nowSeconds,\n evictBufferSeconds = 0,\n}: {\n quotes: readonly Quote[];\n nowSeconds: number;\n evictBufferSeconds?: number;\n}): Quote[] {\n return quotes.filter((q) => !isQuoteExpired({ quote: q, nowSeconds, evictBufferSeconds }));\n}\n\n/**\n * Insert or replace a quote by its id.\n *\n * If no id match is found, attempts to replace an existing quote from the same\n * service type and aggregator id. If still no match, appends the incoming quote.\n */\nexport function upsertQuote(quotes: readonly Quote[], incoming: Quote): Quote[] {\n const idx = quotes.findIndex((q) => q.id === incoming.id);\n if (idx === -1) {\n // No id match, check for existing quote from same service and aggregator id.\n const existingAggIdx = quotes.findIndex(\n (q) => q.serviceType === incoming.serviceType && q.aggregator.id === incoming.aggregator.id,\n );\n\n if (existingAggIdx >= 0) {\n const next = quotes.slice();\n next[existingAggIdx] = incoming;\n\n return next;\n }\n\n // No match, append.\n return [...quotes, incoming];\n }\n const next = quotes.slice();\n next[idx] = incoming;\n return next;\n}\n\n/**\n * Return a new, deterministically sorted array of quotes.\n */\nexport function sortQuotes(quotes: readonly Quote[]): Quote[] {\n const next = quotes.slice();\n next.sort(compareQuotes);\n return next;\n}\n\n/**\n * Select the current best (most desirable) quote, excluding expired items.\n */\nexport function selectBestQuote(quotes: readonly Quote[], nowSeconds: number): Quote | null {\n const active = pruneExpiredQuotes({ quotes, nowSeconds });\n if (active.length === 0) return null;\n\n return sortQuotes(active)[0] ?? null;\n}\n\n/**\n * Compute the earliest expiration timestamp (in seconds) for quotes belonging\n * to a specific service type. Returns null if no active quotes for the service.\n */\nexport function earliestExpirationForService({\n quotes,\n serviceType,\n nowSeconds,\n}: {\n quotes: readonly Quote[];\n serviceType: TransferService['type'];\n nowSeconds: number;\n}): number | null {\n let earliest: number | null = null;\n for (const q of quotes) {\n if (q.serviceType !== serviceType) continue;\n if (isQuoteExpired({ quote: q, nowSeconds })) continue;\n if (earliest === null || q.expiresAt < earliest) {\n earliest = q.expiresAt;\n }\n }\n return earliest;\n}\n"],"mappings":"AAaA,SAAgB,EAAe,CAC7B,QACA,aACA,qBAAqB,GAOX,CACV,OAAO,EAAM,WAAa,EAAa,EAQzC,SAAgB,EAAc,EAAU,EAAkB,CAOxD,OANI,EAAE,YAAc,EAAE,UAGlB,EAAE,YAAc,EAAE,UAGf,EAAE,GAAK,EAAE,GAAK,GAAK,EAAE,GAAK,EAAE,GAAK,EAAI,EAFnC,EAAE,UAAY,EAAE,UAAY,GAAK,EAHjC,EAAE,UAAY,EAAE,UAAY,GAAK,EAW5C,SAAgB,EAAmB,CACjC,SACA,aACA,qBAAqB,GAKX,CACV,OAAO,EAAO,OAAQ,GAAM,CAAC,EAAe,CAAE,MAAO,EAAG,aAAY,qBAAoB,CAAC,CAAC,CAS5F,SAAgB,EAAY,EAA0B,EAA0B,CAC9E,IAAM,EAAM,EAAO,UAAW,GAAM,EAAE,KAAO,EAAS,GAAG,CACzD,GAAI,IAAQ,GAAI,CAEd,IAAM,EAAiB,EAAO,UAC3B,GAAM,EAAE,cAAgB,EAAS,aAAe,EAAE,WAAW,KAAO,EAAS,WAAW,GAC1F,CAED,GAAI,GAAkB,EAAG,CACvB,IAAM,EAAO,EAAO,OAAO,CAG3B,MAFA,GAAK,GAAkB,EAEhB,EAIT,MAAO,CAAC,GAAG,EAAQ,EAAS,CAE9B,IAAM,EAAO,EAAO,OAAO,CAE3B,MADA,GAAK,GAAO,EACL,EAMT,SAAgB,EAAW,EAAmC,CAC5D,IAAM,EAAO,EAAO,OAAO,CAE3B,OADA,EAAK,KAAK,EAAc,CACjB,EAiBT,SAAgB,EAA6B,CAC3C,SACA,cACA,cAKgB,CAChB,IAAI,EAA0B,KAC9B,IAAK,IAAM,KAAK,EACV,EAAE,cAAgB,IAClB,EAAe,CAAE,MAAO,EAAG,aAAY,CAAC,GACxC,IAAa,MAAQ,EAAE,UAAY,KACrC,EAAW,EAAE,YAGjB,OAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e({quote:e,nowSeconds:t,evictBufferSeconds:n=0}){return e.expiresAt<=t+n}function t(e,t){return e.amountOut===t.amountOut?e.expiresAt===t.expiresAt?e.id<t.id?-1:e.id>t.id?1:0:e.expiresAt>t.expiresAt?-1:1:e.amountOut>t.amountOut?-1:1}function n({quotes:t,nowSeconds:n,evictBufferSeconds:r=0}){return t.filter(t=>!e({quote:t,nowSeconds:n,evictBufferSeconds:r}))}function r(e,t){let n=e.findIndex(e=>e.id===t.id);if(n===-1){let n=e.findIndex(e=>e.serviceType===t.serviceType&&e.aggregator.id===t.aggregator.id);if(n>=0){let r=e.slice();return r[n]=t,r}return[...e,t]}let r=e.slice();return r[n]=t,r}function i(e){let n=e.slice();return n.sort(t),n}function a({quotes:t,serviceType:n,nowSeconds:r}){let i=null;for(let a of t)a.serviceType===n&&(e({quote:a,nowSeconds:r})||(i===null||a.expiresAt<i)&&(i=a.expiresAt));return i}export{a as earliestExpirationForService,e as isQuoteExpired,n as pruneExpiredQuotes,i as sortQuotes,r as upsertQuote};
|
|
2
|
+
//# sourceMappingURL=_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.js","names":[],"sources":["../../src/quoter/_utils.ts"],"sourcesContent":["/**\n * @internal\n *\n * Utility functions for the Quoter.\n * Internal only; not exposed publicly.\n */\n\nimport type { Quote } from '../types/quote';\nimport type { TransferService } from '../types/service';\n\n/**\n * Determine whether a quote has expired at the provided time.\n */\nexport function isQuoteExpired({\n quote,\n nowSeconds,\n evictBufferSeconds = 0,\n}: {\n quote: Quote;\n /** Current unix time in seconds. */\n nowSeconds: number;\n /** Amount of time to buffer \"now\" to early evict quote. */\n evictBufferSeconds?: number;\n}): boolean {\n return quote.expiresAt <= nowSeconds + evictBufferSeconds;\n}\n\n/**\n * Compare two quotes by desirability.\n * Sort order: amountOut desc, expiresAt desc, id asc (for stability).\n * Returns negative if a should come before b.\n */\nexport function compareQuotes(a: Quote, b: Quote): number {\n if (a.amountOut !== b.amountOut) {\n return a.amountOut > b.amountOut ? -1 : 1;\n }\n if (a.expiresAt !== b.expiresAt) {\n return a.expiresAt > b.expiresAt ? -1 : 1;\n }\n return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n}\n\n/**\n * Return a new array without expired quotes.\n */\nexport function pruneExpiredQuotes({\n quotes,\n nowSeconds,\n evictBufferSeconds = 0,\n}: {\n quotes: readonly Quote[];\n nowSeconds: number;\n evictBufferSeconds?: number;\n}): Quote[] {\n return quotes.filter((q) => !isQuoteExpired({ quote: q, nowSeconds, evictBufferSeconds }));\n}\n\n/**\n * Insert or replace a quote by its id.\n *\n * If no id match is found, attempts to replace an existing quote from the same\n * service type and aggregator id. If still no match, appends the incoming quote.\n */\nexport function upsertQuote(quotes: readonly Quote[], incoming: Quote): Quote[] {\n const idx = quotes.findIndex((q) => q.id === incoming.id);\n if (idx === -1) {\n // No id match, check for existing quote from same service and aggregator id.\n const existingAggIdx = quotes.findIndex(\n (q) => q.serviceType === incoming.serviceType && q.aggregator.id === incoming.aggregator.id,\n );\n\n if (existingAggIdx >= 0) {\n const next = quotes.slice();\n next[existingAggIdx] = incoming;\n\n return next;\n }\n\n // No match, append.\n return [...quotes, incoming];\n }\n const next = quotes.slice();\n next[idx] = incoming;\n return next;\n}\n\n/**\n * Return a new, deterministically sorted array of quotes.\n */\nexport function sortQuotes(quotes: readonly Quote[]): Quote[] {\n const next = quotes.slice();\n next.sort(compareQuotes);\n return next;\n}\n\n/**\n * Select the current best (most desirable) quote, excluding expired items.\n */\nexport function selectBestQuote(quotes: readonly Quote[], nowSeconds: number): Quote | null {\n const active = pruneExpiredQuotes({ quotes, nowSeconds });\n if (active.length === 0) return null;\n\n return sortQuotes(active)[0] ?? null;\n}\n\n/**\n * Compute the earliest expiration timestamp (in seconds) for quotes belonging\n * to a specific service type. Returns null if no active quotes for the service.\n */\nexport function earliestExpirationForService({\n quotes,\n serviceType,\n nowSeconds,\n}: {\n quotes: readonly Quote[];\n serviceType: TransferService['type'];\n nowSeconds: number;\n}): number | null {\n let earliest: number | null = null;\n for (const q of quotes) {\n if (q.serviceType !== serviceType) continue;\n if (isQuoteExpired({ quote: q, nowSeconds })) continue;\n if (earliest === null || q.expiresAt < earliest) {\n earliest = q.expiresAt;\n }\n }\n return earliest;\n}\n"],"mappings":"AAaA,SAAgB,EAAe,CAC7B,QACA,aACA,qBAAqB,GAOX,CACV,OAAO,EAAM,WAAa,EAAa,EAQzC,SAAgB,EAAc,EAAU,EAAkB,CAOxD,OANI,EAAE,YAAc,EAAE,UAGlB,EAAE,YAAc,EAAE,UAGf,EAAE,GAAK,EAAE,GAAK,GAAK,EAAE,GAAK,EAAE,GAAK,EAAI,EAFnC,EAAE,UAAY,EAAE,UAAY,GAAK,EAHjC,EAAE,UAAY,EAAE,UAAY,GAAK,EAW5C,SAAgB,EAAmB,CACjC,SACA,aACA,qBAAqB,GAKX,CACV,OAAO,EAAO,OAAQ,GAAM,CAAC,EAAe,CAAE,MAAO,EAAG,aAAY,qBAAoB,CAAC,CAAC,CAS5F,SAAgB,EAAY,EAA0B,EAA0B,CAC9E,IAAM,EAAM,EAAO,UAAW,GAAM,EAAE,KAAO,EAAS,GAAG,CACzD,GAAI,IAAQ,GAAI,CAEd,IAAM,EAAiB,EAAO,UAC3B,GAAM,EAAE,cAAgB,EAAS,aAAe,EAAE,WAAW,KAAO,EAAS,WAAW,GAC1F,CAED,GAAI,GAAkB,EAAG,CACvB,IAAM,EAAO,EAAO,OAAO,CAG3B,MAFA,GAAK,GAAkB,EAEhB,EAIT,MAAO,CAAC,GAAG,EAAQ,EAAS,CAE9B,IAAM,EAAO,EAAO,OAAO,CAE3B,MADA,GAAK,GAAO,EACL,EAMT,SAAgB,EAAW,EAAmC,CAC5D,IAAM,EAAO,EAAO,OAAO,CAE3B,OADA,EAAK,KAAK,EAAc,CACjB,EAiBT,SAAgB,EAA6B,CAC3C,SACA,cACA,cAKgB,CAChB,IAAI,EAA0B,KAC9B,IAAK,IAAM,KAAK,EACV,EAAE,cAAgB,IAClB,EAAe,CAAE,MAAO,EAAG,aAAY,CAAC,GACxC,IAAa,MAAQ,EAAE,UAAY,KACrC,EAAW,EAAE,YAGjB,OAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.cjs","names":[],"sources":["../../src/quoter/constants.ts"],"sourcesContent":["/** Default Quoter prune time (in milliseconds). */\nexport const QUOTER_DEFAULT_PRUNE_INTERVAL_MS = 1_000;\n/** Default Quoter refresh buffer (in seconds). */\nexport const QUOTER_DEFAULT_REFRESH_BUFFER_SECONDS = 5;\n/** Base retry delay for completed streams with no quotes (milliseconds). */\nexport const QUOTER_EMPTY_RETRY_BASE_DELAY_MS = 1_000;\n/** Max retry delay for completed streams with no quotes (milliseconds). */\nexport const QUOTER_EMPTY_RETRY_MAX_DELAY_MS = 30_000;\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../src/quoter/constants.ts"],"sourcesContent":["/** Default Quoter prune time (in milliseconds). */\nexport const QUOTER_DEFAULT_PRUNE_INTERVAL_MS = 1_000;\n/** Default Quoter refresh buffer (in seconds). */\nexport const QUOTER_DEFAULT_REFRESH_BUFFER_SECONDS = 5;\n/** Base retry delay for completed streams with no quotes (milliseconds). */\nexport const QUOTER_EMPTY_RETRY_BASE_DELAY_MS = 1_000;\n/** Max retry delay for completed streams with no quotes (milliseconds). */\nexport const QUOTER_EMPTY_RETRY_MAX_DELAY_MS = 30_000;\n"],"mappings":"AACA,MAAa,EAAmC,IAEnC,EAAwC,EAExC,EAAmC,IAEnC,EAAkC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants.cjs`),t=require(`../type-guards.cjs`),n=require(`./_utils.cjs`),r=require(`./constants.cjs`);let i=require(`zod`),a=require(`viem`);var o=class{clock;props;pruneIntervalMs;transferServices;refreshBufferSeconds;quotes=[];subscribers=new Set;started=!1;done=!1;pruneTimerId=null;lastBestId=null;hasReceivedAnyQuote=!1;id=crypto.randomUUID();serviceState=new Map;constructor(e,t,n={}){this.clock=n.clock??(()=>Math.floor(Date.now()/1e3)),this.props=e,this.pruneIntervalMs=n.pruneIntervalMs??r.QUOTER_DEFAULT_PRUNE_INTERVAL_MS,this.transferServices=t,this.refreshBufferSeconds=n.refreshBufferSeconds??r.QUOTER_DEFAULT_REFRESH_BUFFER_SECONDS}getQuotes(){let e=this.clock(),t=n.sortQuotes(n.pruneExpiredQuotes({quotes:this.quotes,nowSeconds:e}));return[t[0]??null,t]}subscribe(e){this.subscribers.add(e);let t=!1;return this.started||this.start(),()=>{if(!t){if(t=!0,this.subscribers.size===1&&this.subscribers.has(e)){this.complete(`unsubscribed`);return}this.subscribers.delete(e)}}}start(){if(this.started=!0,this.done=!1,this.quotes=[],this.lastBestId=null,this.hasReceivedAnyQuote=!1,c(this.props)){this.complete(`no-eligible-services`);return}let e=!1;for(let t of this.transferServices)t.analyzeSupport({sourceAsset:this.props.sourceAsset,sourceChainId:this.props.sourceChain.chainId,targetAsset:this.props.targetAsset,targetChainId:this.props.targetChain.chainId})&&(e=!0,this.startStreamForService(t));if(!e){this.complete(`no-eligible-services`);return}this.pruneTimerId=setInterval(()=>this.onPruneTick(),this.pruneIntervalMs)}stop(){this.started=!1,this.pruneTimerId&&=(clearInterval(this.pruneTimerId),null);for(let[e,t]of this.serviceState){try{t.cancel()}catch{}t.refreshTimer&&clearTimeout(t.refreshTimer),t.retryTimer&&clearTimeout(t.retryTimer),this.serviceState.set(e,{cancel:()=>{},done:!1,hasErrored:!1,hasReturnedQuote:!1,retryAttempt:0,retryTimer:null,refreshTimer:null,refreshAtSeconds:null})}}startStreamForService(e){let t=this.serviceState.get(e.type);if(t){try{t.cancel()}catch{}t.refreshTimer&&clearTimeout(t.refreshTimer),t.retryTimer&&clearTimeout(t.retryTimer)}let n=this.makeServiceHandler(e.type),{cancel:r}=e.streamQuotes(this.props,n);this.serviceState.set(e.type,{cancel:r,done:!1,hasErrored:!1,hasReturnedQuote:!1,retryAttempt:t?.retryAttempt??0,retryTimer:null,refreshTimer:null,refreshAtSeconds:null})}makeServiceHandler(e){return(t,...n)=>{if(this.started){if(t===`quote`){let t=n[0];if(l(t)){if(t.serviceType!==e)return;let n=this.serviceState.get(e);n&&(n.hasReturnedQuote=!0),this.onIncomingQuote(t),this.scheduleServiceRefresh(e)}return}if(t===`done`){this.onServiceDone(e);return}if(t===`error`){let t=this.serviceState.get(e);t&&(t.hasErrored=!0);let r=n[0];r instanceof Error&&this.emitError(r)}}}}onIncomingQuote(e){let t=this.clock();if(n.isQuoteExpired({quote:e,nowSeconds:t}))return;this.hasReceivedAnyQuote=!0,this.resetRetryForService(e.serviceType),this.quotes=n.sortQuotes(n.pruneExpiredQuotes({quotes:n.upsertQuote(this.quotes,e),nowSeconds:t}));let r=this.quotes[0];r&&(this.lastBestId=r.id,this.emitQuote({bestQuote:r,quote:e,quotes:this.quotes}))}resetRetryForService(e){let t=this.serviceState.get(e);t&&(t.retryAttempt=0,t.retryTimer&&=(clearTimeout(t.retryTimer),null))}scheduleServiceRetry(e){let t=this.serviceState.get(e);if(!t)return;t.retryTimer&&=(clearTimeout(t.retryTimer),null);let n=Math.min(r.QUOTER_EMPTY_RETRY_MAX_DELAY_MS,r.QUOTER_EMPTY_RETRY_BASE_DELAY_MS*2**t.retryAttempt);t.retryAttempt+=1,t.retryTimer=setTimeout(()=>{let t=this.serviceState.get(e);if(t&&(t.retryTimer=null),!this.started)return;let n=this.transferServices.find(t=>t.type===e);n&&this.startStreamForService(n)},Math.max(0,n))}onServiceDone(e){let t=this.serviceState.get(e);t&&(t.done=!0,this.scheduleServiceRefresh(e),this.hasReceivedAnyQuote&&!t.hasErrored&&!t.hasReturnedQuote&&this.scheduleServiceRetry(e),this.maybeCompleteNoQuotes())}maybeCompleteNoQuotes(){!this.started||this.done||this.hasReceivedAnyQuote||this.serviceState.size===0||[...this.serviceState.values()].every(e=>e.done)&&this.complete(`no-quotes`)}complete(e){if(this.done)return;this.done=!0,this.stop();let t=[...this.subscribers];this.subscribers.clear();for(let n of t)n(`done`,{reason:e})}onPruneTick(){let e=this.clock(),t=n.pruneExpiredQuotes({quotes:this.quotes,nowSeconds:e});if(t.length!==this.quotes.length){this.quotes=n.sortQuotes(t);let e=this.quotes[0]??null,r=e?e.id:null;e&&r!==this.lastBestId?(this.lastBestId=r,this.emitQuote({bestQuote:e,quote:e,quotes:this.quotes})):e||(this.lastBestId=null)}for(let e of this.transferServices)this.serviceState.has(e.type)&&this.scheduleServiceRefresh(e.type)}scheduleServiceRefresh(e){let t=this.serviceState.get(e);if(!t)return;let r=this.clock(),i=n.earliestExpirationForService({quotes:this.quotes,serviceType:e,nowSeconds:r});if(i===null){t.refreshTimer&&=(clearTimeout(t.refreshTimer),null),t.refreshAtSeconds=null;return}let a=Math.max(0,i-this.refreshBufferSeconds);if(a<=r||t.refreshAtSeconds===a&&t.refreshTimer)return;t.refreshTimer&&clearTimeout(t.refreshTimer);let o=Math.max(0,(a-r)*1e3);t.refreshAtSeconds=a,t.refreshTimer=setTimeout(()=>{let t=this.serviceState.get(e);t&&(t.refreshTimer=null,t.refreshAtSeconds=null);let n=this.transferServices.find(t=>t.type===e);n&&this.startStreamForService(n)},o)}emitQuote(e){for(let t of this.subscribers)t(`quote`,e)}emitError(e){for(let t of this.subscribers)t(`error`,e)}};const s=i.z.object({id:i.z.string(),expiresAt:i.z.number().int().nonnegative(),amountOut:i.z.bigint().nonnegative(),amountIn:i.z.bigint().nonnegative(),serviceType:i.z.string()});function c(n){let{sourceAsset:r,sourceChain:i,targetAsset:o,targetChain:s}=n;return i.chainId===s.chainId?t.isNativeAsset(r)&&t.isNativeAsset(o)?!0:r.type===o.type?r.type===e.TokenType.ERC20&&o.type===e.TokenType.ERC20?(0,a.isAddressEqual)(r.address,o.address):r.type===e.TokenType.SPL&&o.type===e.TokenType.SPL?r.address===o.address:!1:!1:!1}function l(e){return s.safeParse(e).success}exports.Quoter=o;
|
|
2
|
+
//# sourceMappingURL=quoter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quoter.cjs","names":["QUOTER_DEFAULT_PRUNE_INTERVAL_MS","QUOTER_DEFAULT_REFRESH_BUFFER_SECONDS","sortQuotes","pruneExpiredQuotes","isQuoteExpired","upsertQuote","QUOTER_EMPTY_RETRY_MAX_DELAY_MS","QUOTER_EMPTY_RETRY_BASE_DELAY_MS","earliestExpirationForService","z","isNativeAsset","TokenType"],"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,31 @@
|
|
|
1
|
+
//#region src/quoter/quoter.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Function that returns the current UNIX time in seconds.
|
|
4
|
+
* Injected for deterministic testing.
|
|
5
|
+
*/
|
|
6
|
+
type Clock = () => number;
|
|
7
|
+
/**
|
|
8
|
+
* Options for constructing a Quoter instance.
|
|
9
|
+
*
|
|
10
|
+
* These options tune how often quote state is maintained and when services are
|
|
11
|
+
* proactively restarted before quote expiry.
|
|
12
|
+
*/
|
|
13
|
+
interface QuoterOptions {
|
|
14
|
+
/** Clock function returning current time in seconds (defaults to Date.now()/1000). */
|
|
15
|
+
readonly clock?: Clock;
|
|
16
|
+
/** Interval for pruning expired quotes (milliseconds).
|
|
17
|
+
*
|
|
18
|
+
* @default 1_000
|
|
19
|
+
*/
|
|
20
|
+
readonly pruneIntervalMs?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Amount of seconds to pre-buffer a stream restart before the earliest service quote
|
|
23
|
+
* expiration. Helps ensure continuity before actual expiry is reached.
|
|
24
|
+
*
|
|
25
|
+
* @default 5
|
|
26
|
+
*/
|
|
27
|
+
readonly refreshBufferSeconds?: number;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { QuoterOptions };
|
|
31
|
+
//# sourceMappingURL=quoter.d.cts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import "../types/quote.js";
|
|
2
|
+
import "../types/service.js";
|
|
3
|
+
|
|
4
|
+
//#region src/quoter/quoter.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Function that returns the current UNIX time in seconds.
|
|
7
|
+
* Injected for deterministic testing.
|
|
8
|
+
*/
|
|
9
|
+
type Clock = () => number;
|
|
10
|
+
/**
|
|
11
|
+
* Options for constructing a Quoter instance.
|
|
12
|
+
*
|
|
13
|
+
* These options tune how often quote state is maintained and when services are
|
|
14
|
+
* proactively restarted before quote expiry.
|
|
15
|
+
*/
|
|
16
|
+
interface QuoterOptions {
|
|
17
|
+
/** Clock function returning current time in seconds (defaults to Date.now()/1000). */
|
|
18
|
+
readonly clock?: Clock;
|
|
19
|
+
/** Interval for pruning expired quotes (milliseconds).
|
|
20
|
+
*
|
|
21
|
+
* @default 1_000
|
|
22
|
+
*/
|
|
23
|
+
readonly pruneIntervalMs?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Amount of seconds to pre-buffer a stream restart before the earliest service quote
|
|
26
|
+
* expiration. Helps ensure continuity before actual expiry is reached.
|
|
27
|
+
*
|
|
28
|
+
* @default 5
|
|
29
|
+
*/
|
|
30
|
+
readonly refreshBufferSeconds?: number;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { QuoterOptions };
|
|
34
|
+
//# sourceMappingURL=quoter.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{TokenType as e}from"../constants.js";import{isNativeAsset as t}from"../type-guards.js";import{earliestExpirationForService as n,isQuoteExpired as r,pruneExpiredQuotes as i,sortQuotes as a,upsertQuote as o}from"./_utils.js";import{QUOTER_DEFAULT_PRUNE_INTERVAL_MS as s,QUOTER_DEFAULT_REFRESH_BUFFER_SECONDS as c,QUOTER_EMPTY_RETRY_BASE_DELAY_MS as l,QUOTER_EMPTY_RETRY_MAX_DELAY_MS as u}from"./constants.js";import{z as d}from"zod";import{isAddressEqual as f}from"viem";var p=class{clock;props;pruneIntervalMs;transferServices;refreshBufferSeconds;quotes=[];subscribers=new Set;started=!1;done=!1;pruneTimerId=null;lastBestId=null;hasReceivedAnyQuote=!1;id=crypto.randomUUID();serviceState=new Map;constructor(e,t,n={}){this.clock=n.clock??(()=>Math.floor(Date.now()/1e3)),this.props=e,this.pruneIntervalMs=n.pruneIntervalMs??s,this.transferServices=t,this.refreshBufferSeconds=n.refreshBufferSeconds??c}getQuotes(){let e=this.clock(),t=a(i({quotes:this.quotes,nowSeconds:e}));return[t[0]??null,t]}subscribe(e){this.subscribers.add(e);let t=!1;return this.started||this.start(),()=>{if(!t){if(t=!0,this.subscribers.size===1&&this.subscribers.has(e)){this.complete(`unsubscribed`);return}this.subscribers.delete(e)}}}start(){if(this.started=!0,this.done=!1,this.quotes=[],this.lastBestId=null,this.hasReceivedAnyQuote=!1,h(this.props)){this.complete(`no-eligible-services`);return}let e=!1;for(let t of this.transferServices)t.analyzeSupport({sourceAsset:this.props.sourceAsset,sourceChainId:this.props.sourceChain.chainId,targetAsset:this.props.targetAsset,targetChainId:this.props.targetChain.chainId})&&(e=!0,this.startStreamForService(t));if(!e){this.complete(`no-eligible-services`);return}this.pruneTimerId=setInterval(()=>this.onPruneTick(),this.pruneIntervalMs)}stop(){this.started=!1,this.pruneTimerId&&=(clearInterval(this.pruneTimerId),null);for(let[e,t]of this.serviceState){try{t.cancel()}catch{}t.refreshTimer&&clearTimeout(t.refreshTimer),t.retryTimer&&clearTimeout(t.retryTimer),this.serviceState.set(e,{cancel:()=>{},done:!1,hasErrored:!1,hasReturnedQuote:!1,retryAttempt:0,retryTimer:null,refreshTimer:null,refreshAtSeconds:null})}}startStreamForService(e){let t=this.serviceState.get(e.type);if(t){try{t.cancel()}catch{}t.refreshTimer&&clearTimeout(t.refreshTimer),t.retryTimer&&clearTimeout(t.retryTimer)}let n=this.makeServiceHandler(e.type),{cancel:r}=e.streamQuotes(this.props,n);this.serviceState.set(e.type,{cancel:r,done:!1,hasErrored:!1,hasReturnedQuote:!1,retryAttempt:t?.retryAttempt??0,retryTimer:null,refreshTimer:null,refreshAtSeconds:null})}makeServiceHandler(e){return(t,...n)=>{if(this.started){if(t===`quote`){let t=n[0];if(g(t)){if(t.serviceType!==e)return;let n=this.serviceState.get(e);n&&(n.hasReturnedQuote=!0),this.onIncomingQuote(t),this.scheduleServiceRefresh(e)}return}if(t===`done`){this.onServiceDone(e);return}if(t===`error`){let t=this.serviceState.get(e);t&&(t.hasErrored=!0);let r=n[0];r instanceof Error&&this.emitError(r)}}}}onIncomingQuote(e){let t=this.clock();if(r({quote:e,nowSeconds:t}))return;this.hasReceivedAnyQuote=!0,this.resetRetryForService(e.serviceType),this.quotes=a(i({quotes:o(this.quotes,e),nowSeconds:t}));let n=this.quotes[0];n&&(this.lastBestId=n.id,this.emitQuote({bestQuote:n,quote:e,quotes:this.quotes}))}resetRetryForService(e){let t=this.serviceState.get(e);t&&(t.retryAttempt=0,t.retryTimer&&=(clearTimeout(t.retryTimer),null))}scheduleServiceRetry(e){let t=this.serviceState.get(e);if(!t)return;t.retryTimer&&=(clearTimeout(t.retryTimer),null);let n=Math.min(u,l*2**t.retryAttempt);t.retryAttempt+=1,t.retryTimer=setTimeout(()=>{let t=this.serviceState.get(e);if(t&&(t.retryTimer=null),!this.started)return;let n=this.transferServices.find(t=>t.type===e);n&&this.startStreamForService(n)},Math.max(0,n))}onServiceDone(e){let t=this.serviceState.get(e);t&&(t.done=!0,this.scheduleServiceRefresh(e),this.hasReceivedAnyQuote&&!t.hasErrored&&!t.hasReturnedQuote&&this.scheduleServiceRetry(e),this.maybeCompleteNoQuotes())}maybeCompleteNoQuotes(){!this.started||this.done||this.hasReceivedAnyQuote||this.serviceState.size===0||[...this.serviceState.values()].every(e=>e.done)&&this.complete(`no-quotes`)}complete(e){if(this.done)return;this.done=!0,this.stop();let t=[...this.subscribers];this.subscribers.clear();for(let n of t)n(`done`,{reason:e})}onPruneTick(){let e=this.clock(),t=i({quotes:this.quotes,nowSeconds:e});if(t.length!==this.quotes.length){this.quotes=a(t);let e=this.quotes[0]??null,n=e?e.id:null;e&&n!==this.lastBestId?(this.lastBestId=n,this.emitQuote({bestQuote:e,quote:e,quotes:this.quotes})):e||(this.lastBestId=null)}for(let e of this.transferServices)this.serviceState.has(e.type)&&this.scheduleServiceRefresh(e.type)}scheduleServiceRefresh(e){let t=this.serviceState.get(e);if(!t)return;let r=this.clock(),i=n({quotes:this.quotes,serviceType:e,nowSeconds:r});if(i===null){t.refreshTimer&&=(clearTimeout(t.refreshTimer),null),t.refreshAtSeconds=null;return}let a=Math.max(0,i-this.refreshBufferSeconds);if(a<=r||t.refreshAtSeconds===a&&t.refreshTimer)return;t.refreshTimer&&clearTimeout(t.refreshTimer);let o=Math.max(0,(a-r)*1e3);t.refreshAtSeconds=a,t.refreshTimer=setTimeout(()=>{let t=this.serviceState.get(e);t&&(t.refreshTimer=null,t.refreshAtSeconds=null);let n=this.transferServices.find(t=>t.type===e);n&&this.startStreamForService(n)},o)}emitQuote(e){for(let t of this.subscribers)t(`quote`,e)}emitError(e){for(let t of this.subscribers)t(`error`,e)}};const m=d.object({id:d.string(),expiresAt:d.number().int().nonnegative(),amountOut:d.bigint().nonnegative(),amountIn:d.bigint().nonnegative(),serviceType:d.string()});function h(n){let{sourceAsset:r,sourceChain:i,targetAsset:a,targetChain:o}=n;return i.chainId===o.chainId?t(r)&&t(a)?!0:r.type===a.type?r.type===e.ERC20&&a.type===e.ERC20?f(r.address,a.address):r.type===e.SPL&&a.type===e.SPL?r.address===a.address:!1:!1:!1}function g(e){return m.safeParse(e).success}export{p as Quoter};
|
|
2
|
+
//# sourceMappingURL=quoter.js.map
|