@avalabs/fusion-sdk 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.cjs +1 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/mod.cjs +1 -1
- package/dist/mod.d.cts +3 -3
- package/dist/mod.d.ts +3 -3
- package/dist/mod.js +1 -1
- package/dist/transfer-manager.cjs +1 -1
- package/dist/transfer-manager.cjs.map +1 -1
- package/dist/transfer-manager.js +1 -1
- package/dist/transfer-manager.js.map +1 -1
- 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/_utils/get-config.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/get-config.js +1 -1
- package/dist/transfer-service/avalanche-evm/avalanche-evm-service.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/avalanche-evm-service.cjs.map +1 -1
- package/dist/transfer-service/avalanche-evm/avalanche-evm-service.js +1 -1
- package/dist/transfer-service/avalanche-evm/avalanche-evm-service.js.map +1 -1
- package/dist/transfer-service/lombard/_utils/asset.cjs +1 -1
- package/dist/transfer-service/lombard/_utils/asset.cjs.map +1 -1
- package/dist/transfer-service/lombard/_utils/asset.js +1 -1
- package/dist/transfer-service/lombard/_utils/asset.js.map +1 -1
- 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/stream-quotes.cjs +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb-service.cjs +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb-service.cjs.map +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb-service.js +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb-service.js.map +1 -1
- 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 +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc-service.cjs +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc-service.cjs.map +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc-service.js +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc-service.js.map +1 -1
- package/dist/transfer-service/lombard/constants.cjs +1 -1
- package/dist/transfer-service/lombard/constants.cjs.map +1 -1
- package/dist/transfer-service/lombard/constants.js +1 -1
- package/dist/transfer-service/lombard/constants.js.map +1 -1
- package/dist/transfer-service/markr/_api.cjs +1 -1
- package/dist/transfer-service/markr/_api.js +1 -1
- package/dist/transfer-service/markr/_handlers/analyze-support.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/analyze-support.cjs.map +1 -1
- package/dist/transfer-service/markr/_handlers/analyze-support.js +1 -1
- package/dist/transfer-service/markr/_handlers/analyze-support.js.map +1 -1
- 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/stream-quotes.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/stream-quotes.js +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.cjs.map +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.js.map +1 -1
- package/dist/transfer-service/markr/_schema.cjs +1 -1
- package/dist/transfer-service/markr/_schema.cjs.map +1 -1
- package/dist/transfer-service/markr/_schema.js +1 -1
- package/dist/transfer-service/markr/_schema.js.map +1 -1
- package/dist/transfer-service/markr/_utils.cjs +1 -1
- package/dist/transfer-service/markr/_utils.cjs.map +1 -1
- package/dist/transfer-service/markr/_utils.js +1 -1
- package/dist/transfer-service/markr/_utils.js.map +1 -1
- package/dist/transfer-service/markr/constants.cjs +1 -1
- package/dist/transfer-service/markr/constants.cjs.map +1 -1
- package/dist/transfer-service/markr/constants.js +1 -1
- package/dist/transfer-service/markr/constants.js.map +1 -1
- package/dist/transfer-service/markr/markr-service.cjs +1 -1
- package/dist/transfer-service/markr/markr-service.cjs.map +1 -1
- package/dist/transfer-service/markr/markr-service.js +1 -1
- package/dist/transfer-service/markr/markr-service.js.map +1 -1
- 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/constants.cjs +1 -1
- package/dist/transfer-service/wrap-unwrap/constants.cjs.map +1 -1
- package/dist/transfer-service/wrap-unwrap/constants.js +1 -1
- package/dist/transfer-service/wrap-unwrap/constants.js.map +1 -1
- package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs +1 -1
- package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs.map +1 -1
- package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js +1 -1
- package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js.map +1 -1
- package/dist/types/asset.d.cts +6 -1
- package/dist/types/asset.d.ts +6 -1
- package/dist/types/service.d.cts +15 -2
- package/dist/types/service.d.ts +15 -2
- package/dist/types/transfer-manager.d.cts +10 -6
- package/dist/types/transfer-manager.d.ts +10 -6
- 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/package.json +1 -1
- package/dist/_utils/merge-assets.cjs +0 -2
- package/dist/_utils/merge-assets.cjs.map +0 -1
- package/dist/_utils/merge-assets.js +0 -2
- package/dist/_utils/merge-assets.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","names":["TokenType","AvalancheChainIds","AVALANCHE_MAINNET_CHAIN","NATIVE_AVAX","EthereumChainIds","ETHEREUM_MAINNET_CHAIN","NATIVE_ETH","AVALANCHE_FUJI_CHAIN","ETHEREUM_SEPOLIA_CHAIN","Environment"],"sources":["../../../src/transfer-service/wrap-unwrap/constants.ts"],"sourcesContent":["import type { Address } from 'viem';\nimport {\n AvalancheChainIds,\n Environment,\n EthereumChainIds,\n NATIVE_AVAX,\n NATIVE_ETH,\n TokenType,\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n ETHEREUM_MAINNET_CHAIN,\n ETHEREUM_SEPOLIA_CHAIN,\n} from '../../constants';\nimport type { Erc20Asset, NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Chain } from '../../types/chain';\n\nexport const WRAP_UNWRAP_QUOTE_TTL_SECONDS = 3_600;\n\nexport interface WrapChainConfig {\n readonly chain: Chain;\n readonly wrappedTokenAddress: Address;\n readonly nativeAsset: NativeAsset;\n readonly wrappedAsset: Erc20Asset;\n}\n\n// --- Mainnet addresses ---\n\nconst WAVAX_MAINNET: Address = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7';\nconst WETH_MAINNET: Address = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';\n\n// --- Testnet addresses ---\n\nconst WAVAX_FUJI: Address = '0xd00ae08403B9bbb9124bB305C09058E32C39A48c';\nconst WETH_SEPOLIA: Address = '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14';\n\n// --- Asset helpers ---\n\nfunction wrappedAvax(address: Address): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped AVAX', symbol: 'WAVAX', decimals: 18, address };\n}\n\nfunction wrappedEth(address: Address): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped Ether', symbol: 'WETH', decimals: 18, address };\n}\n\n// --- Per-environment chain configs ---\n\nconst MAINNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.MAINNET,\n {\n chain: AVALANCHE_MAINNET_CHAIN,\n wrappedTokenAddress: WAVAX_MAINNET,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_MAINNET),\n },\n ],\n [\n EthereumChainIds.MAINNET,\n {\n chain: ETHEREUM_MAINNET_CHAIN,\n wrappedTokenAddress: WETH_MAINNET,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_MAINNET),\n },\n ],\n]);\n\nconst TESTNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.FUJI,\n {\n chain: AVALANCHE_FUJI_CHAIN,\n wrappedTokenAddress: WAVAX_FUJI,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_FUJI),\n },\n ],\n [\n EthereumChainIds.SEPOLIA,\n {\n chain: ETHEREUM_SEPOLIA_CHAIN,\n wrappedTokenAddress: WETH_SEPOLIA,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_SEPOLIA),\n },\n ],\n]);\n\nexport function getChainConfigs(environment: Environment): ReadonlyMap<Caip2ChainId, WrapChainConfig> {\n return environment === Environment.TEST ? TESTNET_CONFIGS : MAINNET_CONFIGS;\n}\n"],"mappings":"uCA4BM,EAAyB,6CACzB,EAAwB,6CAIxB,EAAsB,6CACtB,EAAwB,
|
|
1
|
+
{"version":3,"file":"constants.cjs","names":["TokenType","AvalancheChainIds","AVALANCHE_MAINNET_CHAIN","NATIVE_AVAX","EthereumChainIds","ETHEREUM_MAINNET_CHAIN","NATIVE_ETH","AVALANCHE_FUJI_CHAIN","ETHEREUM_SEPOLIA_CHAIN","Environment"],"sources":["../../../src/transfer-service/wrap-unwrap/constants.ts"],"sourcesContent":["import type { Address } from 'viem';\nimport {\n AvalancheChainIds,\n Environment,\n EthereumChainIds,\n NATIVE_AVAX,\n NATIVE_ETH,\n TokenType,\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n ETHEREUM_MAINNET_CHAIN,\n ETHEREUM_SEPOLIA_CHAIN,\n} from '../../constants';\nimport type { Erc20Asset, NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Chain } from '../../types/chain';\n\nexport const WRAP_UNWRAP_QUOTE_TTL_SECONDS = 3_600;\n\nexport interface WrapChainConfig {\n readonly chain: Chain;\n readonly wrappedTokenAddress: Address;\n readonly nativeAsset: NativeAsset;\n readonly wrappedAsset: Erc20Asset;\n}\n\n// --- Mainnet addresses ---\n\nconst WAVAX_MAINNET: Address = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7';\nconst WETH_MAINNET: Address = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';\n\n// --- Testnet addresses ---\n\nconst WAVAX_FUJI: Address = '0xd00ae08403B9bbb9124bB305C09058E32C39A48c';\nconst WETH_SEPOLIA: Address = '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14';\n\n// --- Logo URIs ---\n\nconst WAVAX_MAINNET_LOGO_URI =\n 'https://images.ctfassets.net/gcj8jwzm6086/0921c633-a8d2-4de6-b9f3-6508c641c44c/8b92abcbf0f59c9ad3188b0d9e8e3e3b/43114-0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7.png';\nconst WAVAX_FUJI_LOGO_URI =\n 'https://images.ctfassets.net/gcj8jwzm6086/55f2e7e7-d9df-4827-ba2f-44f8ea357457/be31ef169362713370499782332df33d/43113-0xd00ae08403B9bbb9124bB305C09058E32C39A48c.png';\nconst WETH_LOGO_URI =\n 'https://images.ctfassets.net/gcj8jwzm6086/687e413f-7b24-48ff-a490-e61bd741bc8e/b68081167fa0c23d501092de0e767bd7/1-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2.png';\n\n// --- Asset helpers ---\n\nfunction wrappedAvax(address: Address, logoUri: string): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped AVAX', symbol: 'WAVAX', decimals: 18, address, logoUri };\n}\n\nfunction wrappedEth(address: Address, logoUri: string): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped Ether', symbol: 'WETH', decimals: 18, address, logoUri };\n}\n\n// --- Per-environment chain configs ---\n\nconst MAINNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.MAINNET,\n {\n chain: AVALANCHE_MAINNET_CHAIN,\n wrappedTokenAddress: WAVAX_MAINNET,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_MAINNET, WAVAX_MAINNET_LOGO_URI),\n },\n ],\n [\n EthereumChainIds.MAINNET,\n {\n chain: ETHEREUM_MAINNET_CHAIN,\n wrappedTokenAddress: WETH_MAINNET,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_MAINNET, WETH_LOGO_URI),\n },\n ],\n]);\n\nconst TESTNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.FUJI,\n {\n chain: AVALANCHE_FUJI_CHAIN,\n wrappedTokenAddress: WAVAX_FUJI,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_FUJI, WAVAX_FUJI_LOGO_URI),\n },\n ],\n [\n EthereumChainIds.SEPOLIA,\n {\n chain: ETHEREUM_SEPOLIA_CHAIN,\n wrappedTokenAddress: WETH_SEPOLIA,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_SEPOLIA, WETH_LOGO_URI),\n },\n ],\n]);\n\nexport function getChainConfigs(environment: Environment): ReadonlyMap<Caip2ChainId, WrapChainConfig> {\n return environment === Environment.TEST ? TESTNET_CONFIGS : MAINNET_CONFIGS;\n}\n"],"mappings":"uCA4BM,EAAyB,6CACzB,EAAwB,6CAIxB,EAAsB,6CACtB,EAAwB,6CAQxB,EACJ,mKAIF,SAAS,EAAY,EAAkB,EAA6B,CAClE,MAAO,CAAE,KAAMA,EAAAA,UAAU,MAAO,KAAM,eAAgB,OAAQ,QAAS,SAAU,GAAI,UAAS,UAAS,CAGzG,SAAS,EAAW,EAAkB,EAA6B,CACjE,MAAO,CAAE,KAAMA,EAAAA,UAAU,MAAO,KAAM,gBAAiB,OAAQ,OAAQ,SAAU,GAAI,UAAS,UAAS,CAKzG,MAAM,EAAkB,IAAI,IAAmC,CAC7D,CACEC,EAAAA,kBAAkB,QAClB,CACE,MAAOC,EAAAA,wBACP,oBAAqB,EACrB,YAAaC,EAAAA,YACb,aAAc,EAAY,EAAe,uKAAuB,CACjE,CACF,CACD,CACEC,EAAAA,iBAAiB,QACjB,CACE,MAAOC,EAAAA,uBACP,oBAAqB,EACrB,YAAaC,EAAAA,WACb,aAAc,EAAW,EAAc,EAAc,CACtD,CACF,CACF,CAAC,CAEI,EAAkB,IAAI,IAAmC,CAC7D,CACEL,EAAAA,kBAAkB,KAClB,CACE,MAAOM,EAAAA,qBACP,oBAAqB,EACrB,YAAaJ,EAAAA,YACb,aAAc,EAAY,EAAY,uKAAoB,CAC3D,CACF,CACD,CACEC,EAAAA,iBAAiB,QACjB,CACE,MAAOI,EAAAA,uBACP,oBAAqB,EACrB,YAAaF,EAAAA,WACb,aAAc,EAAW,EAAc,EAAc,CACtD,CACF,CACF,CAAC,CAEF,SAAgB,EAAgB,EAAsE,CACpG,OAAO,IAAgBG,EAAAA,YAAY,KAAO,EAAkB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{AVALANCHE_FUJI_CHAIN as e,AVALANCHE_MAINNET_CHAIN as t,AvalancheChainIds as n,ETHEREUM_MAINNET_CHAIN as r,ETHEREUM_SEPOLIA_CHAIN as i,Environment as a,EthereumChainIds as o,NATIVE_AVAX as s,NATIVE_ETH as c,TokenType as l}from"../../constants.js";const u=3600,d=`0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7`,f=`0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,p=`0xd00ae08403B9bbb9124bB305C09058E32C39A48c`,m=`0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14`;function
|
|
1
|
+
import{AVALANCHE_FUJI_CHAIN as e,AVALANCHE_MAINNET_CHAIN as t,AvalancheChainIds as n,ETHEREUM_MAINNET_CHAIN as r,ETHEREUM_SEPOLIA_CHAIN as i,Environment as a,EthereumChainIds as o,NATIVE_AVAX as s,NATIVE_ETH as c,TokenType as l}from"../../constants.js";const u=3600,d=`0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7`,f=`0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,p=`0xd00ae08403B9bbb9124bB305C09058E32C39A48c`,m=`0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14`,h=`https://images.ctfassets.net/gcj8jwzm6086/687e413f-7b24-48ff-a490-e61bd741bc8e/b68081167fa0c23d501092de0e767bd7/1-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2.png`;function g(e,t){return{type:l.ERC20,name:`Wrapped AVAX`,symbol:`WAVAX`,decimals:18,address:e,logoUri:t}}function _(e,t){return{type:l.ERC20,name:`Wrapped Ether`,symbol:`WETH`,decimals:18,address:e,logoUri:t}}const v=new Map([[n.MAINNET,{chain:t,wrappedTokenAddress:d,nativeAsset:s,wrappedAsset:g(d,`https://images.ctfassets.net/gcj8jwzm6086/0921c633-a8d2-4de6-b9f3-6508c641c44c/8b92abcbf0f59c9ad3188b0d9e8e3e3b/43114-0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7.png`)}],[o.MAINNET,{chain:r,wrappedTokenAddress:f,nativeAsset:c,wrappedAsset:_(f,h)}]]),y=new Map([[n.FUJI,{chain:e,wrappedTokenAddress:p,nativeAsset:s,wrappedAsset:g(p,`https://images.ctfassets.net/gcj8jwzm6086/55f2e7e7-d9df-4827-ba2f-44f8ea357457/be31ef169362713370499782332df33d/43113-0xd00ae08403B9bbb9124bB305C09058E32C39A48c.png`)}],[o.SEPOLIA,{chain:i,wrappedTokenAddress:m,nativeAsset:c,wrappedAsset:_(m,h)}]]);function b(e){return e===a.TEST?y:v}export{u as WRAP_UNWRAP_QUOTE_TTL_SECONDS,b as getChainConfigs};
|
|
2
2
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/wrap-unwrap/constants.ts"],"sourcesContent":["import type { Address } from 'viem';\nimport {\n AvalancheChainIds,\n Environment,\n EthereumChainIds,\n NATIVE_AVAX,\n NATIVE_ETH,\n TokenType,\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n ETHEREUM_MAINNET_CHAIN,\n ETHEREUM_SEPOLIA_CHAIN,\n} from '../../constants';\nimport type { Erc20Asset, NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Chain } from '../../types/chain';\n\nexport const WRAP_UNWRAP_QUOTE_TTL_SECONDS = 3_600;\n\nexport interface WrapChainConfig {\n readonly chain: Chain;\n readonly wrappedTokenAddress: Address;\n readonly nativeAsset: NativeAsset;\n readonly wrappedAsset: Erc20Asset;\n}\n\n// --- Mainnet addresses ---\n\nconst WAVAX_MAINNET: Address = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7';\nconst WETH_MAINNET: Address = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';\n\n// --- Testnet addresses ---\n\nconst WAVAX_FUJI: Address = '0xd00ae08403B9bbb9124bB305C09058E32C39A48c';\nconst WETH_SEPOLIA: Address = '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14';\n\n// --- Asset helpers ---\n\nfunction wrappedAvax(address: Address): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped AVAX', symbol: 'WAVAX', decimals: 18, address };\n}\n\nfunction wrappedEth(address: Address): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped Ether', symbol: 'WETH', decimals: 18, address };\n}\n\n// --- Per-environment chain configs ---\n\nconst MAINNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.MAINNET,\n {\n chain: AVALANCHE_MAINNET_CHAIN,\n wrappedTokenAddress: WAVAX_MAINNET,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_MAINNET),\n },\n ],\n [\n EthereumChainIds.MAINNET,\n {\n chain: ETHEREUM_MAINNET_CHAIN,\n wrappedTokenAddress: WETH_MAINNET,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_MAINNET),\n },\n ],\n]);\n\nconst TESTNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.FUJI,\n {\n chain: AVALANCHE_FUJI_CHAIN,\n wrappedTokenAddress: WAVAX_FUJI,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_FUJI),\n },\n ],\n [\n EthereumChainIds.SEPOLIA,\n {\n chain: ETHEREUM_SEPOLIA_CHAIN,\n wrappedTokenAddress: WETH_SEPOLIA,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_SEPOLIA),\n },\n ],\n]);\n\nexport function getChainConfigs(environment: Environment): ReadonlyMap<Caip2ChainId, WrapChainConfig> {\n return environment === Environment.TEST ? TESTNET_CONFIGS : MAINNET_CONFIGS;\n}\n"],"mappings":"6PAiBA,MAAa,EAAgC,KAWvC,EAAyB,6CACzB,EAAwB,6CAIxB,EAAsB,6CACtB,EAAwB,
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/wrap-unwrap/constants.ts"],"sourcesContent":["import type { Address } from 'viem';\nimport {\n AvalancheChainIds,\n Environment,\n EthereumChainIds,\n NATIVE_AVAX,\n NATIVE_ETH,\n TokenType,\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n ETHEREUM_MAINNET_CHAIN,\n ETHEREUM_SEPOLIA_CHAIN,\n} from '../../constants';\nimport type { Erc20Asset, NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Chain } from '../../types/chain';\n\nexport const WRAP_UNWRAP_QUOTE_TTL_SECONDS = 3_600;\n\nexport interface WrapChainConfig {\n readonly chain: Chain;\n readonly wrappedTokenAddress: Address;\n readonly nativeAsset: NativeAsset;\n readonly wrappedAsset: Erc20Asset;\n}\n\n// --- Mainnet addresses ---\n\nconst WAVAX_MAINNET: Address = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7';\nconst WETH_MAINNET: Address = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';\n\n// --- Testnet addresses ---\n\nconst WAVAX_FUJI: Address = '0xd00ae08403B9bbb9124bB305C09058E32C39A48c';\nconst WETH_SEPOLIA: Address = '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14';\n\n// --- Logo URIs ---\n\nconst WAVAX_MAINNET_LOGO_URI =\n 'https://images.ctfassets.net/gcj8jwzm6086/0921c633-a8d2-4de6-b9f3-6508c641c44c/8b92abcbf0f59c9ad3188b0d9e8e3e3b/43114-0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7.png';\nconst WAVAX_FUJI_LOGO_URI =\n 'https://images.ctfassets.net/gcj8jwzm6086/55f2e7e7-d9df-4827-ba2f-44f8ea357457/be31ef169362713370499782332df33d/43113-0xd00ae08403B9bbb9124bB305C09058E32C39A48c.png';\nconst WETH_LOGO_URI =\n 'https://images.ctfassets.net/gcj8jwzm6086/687e413f-7b24-48ff-a490-e61bd741bc8e/b68081167fa0c23d501092de0e767bd7/1-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2.png';\n\n// --- Asset helpers ---\n\nfunction wrappedAvax(address: Address, logoUri: string): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped AVAX', symbol: 'WAVAX', decimals: 18, address, logoUri };\n}\n\nfunction wrappedEth(address: Address, logoUri: string): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped Ether', symbol: 'WETH', decimals: 18, address, logoUri };\n}\n\n// --- Per-environment chain configs ---\n\nconst MAINNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.MAINNET,\n {\n chain: AVALANCHE_MAINNET_CHAIN,\n wrappedTokenAddress: WAVAX_MAINNET,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_MAINNET, WAVAX_MAINNET_LOGO_URI),\n },\n ],\n [\n EthereumChainIds.MAINNET,\n {\n chain: ETHEREUM_MAINNET_CHAIN,\n wrappedTokenAddress: WETH_MAINNET,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_MAINNET, WETH_LOGO_URI),\n },\n ],\n]);\n\nconst TESTNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.FUJI,\n {\n chain: AVALANCHE_FUJI_CHAIN,\n wrappedTokenAddress: WAVAX_FUJI,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_FUJI, WAVAX_FUJI_LOGO_URI),\n },\n ],\n [\n EthereumChainIds.SEPOLIA,\n {\n chain: ETHEREUM_SEPOLIA_CHAIN,\n wrappedTokenAddress: WETH_SEPOLIA,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_SEPOLIA, WETH_LOGO_URI),\n },\n ],\n]);\n\nexport function getChainConfigs(environment: Environment): ReadonlyMap<Caip2ChainId, WrapChainConfig> {\n return environment === Environment.TEST ? TESTNET_CONFIGS : MAINNET_CONFIGS;\n}\n"],"mappings":"6PAiBA,MAAa,EAAgC,KAWvC,EAAyB,6CACzB,EAAwB,6CAIxB,EAAsB,6CACtB,EAAwB,6CAQxB,EACJ,mKAIF,SAAS,EAAY,EAAkB,EAA6B,CAClE,MAAO,CAAE,KAAM,EAAU,MAAO,KAAM,eAAgB,OAAQ,QAAS,SAAU,GAAI,UAAS,UAAS,CAGzG,SAAS,EAAW,EAAkB,EAA6B,CACjE,MAAO,CAAE,KAAM,EAAU,MAAO,KAAM,gBAAiB,OAAQ,OAAQ,SAAU,GAAI,UAAS,UAAS,CAKzG,MAAM,EAAkB,IAAI,IAAmC,CAC7D,CACE,EAAkB,QAClB,CACE,MAAO,EACP,oBAAqB,EACrB,YAAa,EACb,aAAc,EAAY,EAAe,uKAAuB,CACjE,CACF,CACD,CACE,EAAiB,QACjB,CACE,MAAO,EACP,oBAAqB,EACrB,YAAa,EACb,aAAc,EAAW,EAAc,EAAc,CACtD,CACF,CACF,CAAC,CAEI,EAAkB,IAAI,IAAmC,CAC7D,CACE,EAAkB,KAClB,CACE,MAAO,EACP,oBAAqB,EACrB,YAAa,EACb,aAAc,EAAY,EAAY,uKAAoB,CAC3D,CACF,CACD,CACE,EAAiB,QACjB,CACE,MAAO,EACP,oBAAqB,EACrB,YAAa,EACb,aAAc,EAAW,EAAc,EAAc,CACtD,CACF,CACF,CAAC,CAEF,SAAgB,EAAgB,EAAsE,CACpG,OAAO,IAAgB,EAAY,KAAO,EAAkB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../constants.cjs`),t=require(`./constants.cjs`),n=require(`./_handlers/analyze-support.cjs`),r=require(`./_handlers/estimate-native-fee.cjs`),i=require(`./_handlers/get-assets.cjs`),a=require(`./_handlers/get-minimum-transfer-amount.cjs`),
|
|
1
|
+
const e=require(`../../constants.cjs`),t=require(`./constants.cjs`),n=require(`./_handlers/analyze-support.cjs`),r=require(`./_handlers/estimate-native-fee.cjs`),i=require(`./_handlers/get-assets.cjs`),a=require(`./_handlers/get-bridgeable-assets.cjs`),o=require(`./_handlers/get-minimum-transfer-amount.cjs`),s=require(`./_handlers/stream-quotes.cjs`),c=require(`./_handlers/track-transfer.cjs`),l=require(`./_handlers/transfer-asset.cjs`);async function u({environment:u,evmSigner:d}){let f=t.getChainConfigs(u);return{analyzeSupport:n.analyzeSupportFactory({chainConfigs:f}),estimateNativeFee:r.estimateNativeFeeFactory({chainConfigs:f}),getAssets:i.getAssetsFactory({chainConfigs:f}),getBridgeableAssets:a.getBridgeableAssetsFactory({chainConfigs:f}),getMinimumTransferAmount:o.getMinimumTransferAmountFactory(),getSupportedChains:async()=>{let e=new Map;for(let t of f.keys())e.set(t,new Set([t]));return e},streamQuotes:s.streamQuotesFactory(),trackTransfer:c.trackTransferFactory(),transferAsset:l.transferAssetFactory({chainConfigs:f,environment:u,evmSigner:d}),type:e.ServiceType.WRAP_UNWRAP}}exports.createWrapUnwrapService=u;
|
|
2
2
|
//# sourceMappingURL=wrap-unwrap-service.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap-unwrap-service.cjs","names":["getChainConfigs","analyzeSupportFactory","estimateNativeFeeFactory","getAssetsFactory","getMinimumTransferAmountFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/wrap-unwrap/wrap-unwrap-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { EvmSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { getChainConfigs } from './constants';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface WrapUnwrapServiceOptions {\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n}\n\nexport async function createWrapUnwrapService({\n environment,\n evmSigner,\n}: WrapUnwrapServiceOptions): Promise<TransferService> {\n const chainConfigs = getChainConfigs(environment);\n\n return {\n analyzeSupport: analyzeSupportFactory({ chainConfigs }),\n estimateNativeFee: estimateNativeFeeFactory({ chainConfigs }),\n getAssets: getAssetsFactory({ chainConfigs }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const chainId of chainConfigs.keys()) {\n supportedChainsMap.set(chainId, new Set([chainId]));\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory(),\n trackTransfer: trackTransferFactory(),\n transferAsset: transferAssetFactory({ chainConfigs, environment, evmSigner }),\n type: ServiceType.WRAP_UNWRAP,\n } satisfies TransferService;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"wrap-unwrap-service.cjs","names":["getChainConfigs","analyzeSupportFactory","estimateNativeFeeFactory","getAssetsFactory","getBridgeableAssetsFactory","getMinimumTransferAmountFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/wrap-unwrap/wrap-unwrap-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { EvmSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { getChainConfigs } from './constants';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-assets';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface WrapUnwrapServiceOptions {\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n}\n\nexport async function createWrapUnwrapService({\n environment,\n evmSigner,\n}: WrapUnwrapServiceOptions): Promise<TransferService> {\n const chainConfigs = getChainConfigs(environment);\n\n return {\n analyzeSupport: analyzeSupportFactory({ chainConfigs }),\n estimateNativeFee: estimateNativeFeeFactory({ chainConfigs }),\n getAssets: getAssetsFactory({ chainConfigs }),\n getBridgeableAssets: getBridgeableAssetsFactory({ chainConfigs }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const chainId of chainConfigs.keys()) {\n supportedChainsMap.set(chainId, new Set([chainId]));\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory(),\n trackTransfer: trackTransferFactory(),\n transferAsset: transferAssetFactory({ chainConfigs, environment, evmSigner }),\n type: ServiceType.WRAP_UNWRAP,\n } satisfies TransferService;\n}\n"],"mappings":"ybAqBA,eAAsB,EAAwB,CAC5C,cACA,aACqD,CACrD,IAAM,EAAeA,EAAAA,gBAAgB,EAAY,CAEjD,MAAO,CACL,eAAgBC,EAAAA,sBAAsB,CAAE,eAAc,CAAC,CACvD,kBAAmBC,EAAAA,yBAAyB,CAAE,eAAc,CAAC,CAC7D,UAAWC,EAAAA,iBAAiB,CAAE,eAAc,CAAC,CAC7C,oBAAqBC,EAAAA,2BAA2B,CAAE,eAAc,CAAC,CACjE,yBAA0BC,EAAAA,iCAAiC,CAC3D,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,IAAM,KAAW,EAAa,MAAM,CACvC,EAAmB,IAAI,EAAS,IAAI,IAAI,CAAC,EAAQ,CAAC,CAAC,CAGrD,OAAO,GAET,aAAcC,EAAAA,qBAAqB,CACnC,cAAeC,EAAAA,sBAAsB,CACrC,cAAeC,EAAAA,qBAAqB,CAAE,eAAc,cAAa,YAAW,CAAC,CAC7E,KAAMC,EAAAA,YAAY,YACnB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ServiceType as e}from"../../constants.js";import{getChainConfigs as t}from"./constants.js";import{analyzeSupportFactory as n}from"./_handlers/analyze-support.js";import{estimateNativeFeeFactory as r}from"./_handlers/estimate-native-fee.js";import{getAssetsFactory as i}from"./_handlers/get-assets.js";import{
|
|
1
|
+
import{ServiceType as e}from"../../constants.js";import{getChainConfigs as t}from"./constants.js";import{analyzeSupportFactory as n}from"./_handlers/analyze-support.js";import{estimateNativeFeeFactory as r}from"./_handlers/estimate-native-fee.js";import{getAssetsFactory as i}from"./_handlers/get-assets.js";import{getBridgeableAssetsFactory as a}from"./_handlers/get-bridgeable-assets.js";import{getMinimumTransferAmountFactory as o}from"./_handlers/get-minimum-transfer-amount.js";import{streamQuotesFactory as s}from"./_handlers/stream-quotes.js";import{trackTransferFactory as c}from"./_handlers/track-transfer.js";import{transferAssetFactory as l}from"./_handlers/transfer-asset.js";async function u({environment:u,evmSigner:d}){let f=t(u);return{analyzeSupport:n({chainConfigs:f}),estimateNativeFee:r({chainConfigs:f}),getAssets:i({chainConfigs:f}),getBridgeableAssets:a({chainConfigs:f}),getMinimumTransferAmount:o(),getSupportedChains:async()=>{let e=new Map;for(let t of f.keys())e.set(t,new Set([t]));return e},streamQuotes:s(),trackTransfer:c(),transferAsset:l({chainConfigs:f,environment:u,evmSigner:d}),type:e.WRAP_UNWRAP}}export{u as createWrapUnwrapService};
|
|
2
2
|
//# sourceMappingURL=wrap-unwrap-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap-unwrap-service.js","names":[],"sources":["../../../src/transfer-service/wrap-unwrap/wrap-unwrap-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { EvmSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { getChainConfigs } from './constants';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface WrapUnwrapServiceOptions {\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n}\n\nexport async function createWrapUnwrapService({\n environment,\n evmSigner,\n}: WrapUnwrapServiceOptions): Promise<TransferService> {\n const chainConfigs = getChainConfigs(environment);\n\n return {\n analyzeSupport: analyzeSupportFactory({ chainConfigs }),\n estimateNativeFee: estimateNativeFeeFactory({ chainConfigs }),\n getAssets: getAssetsFactory({ chainConfigs }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const chainId of chainConfigs.keys()) {\n supportedChainsMap.set(chainId, new Set([chainId]));\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory(),\n trackTransfer: trackTransferFactory(),\n transferAsset: transferAssetFactory({ chainConfigs, environment, evmSigner }),\n type: ServiceType.WRAP_UNWRAP,\n } satisfies TransferService;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"wrap-unwrap-service.js","names":[],"sources":["../../../src/transfer-service/wrap-unwrap/wrap-unwrap-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { EvmSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { getChainConfigs } from './constants';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-assets';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface WrapUnwrapServiceOptions {\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n}\n\nexport async function createWrapUnwrapService({\n environment,\n evmSigner,\n}: WrapUnwrapServiceOptions): Promise<TransferService> {\n const chainConfigs = getChainConfigs(environment);\n\n return {\n analyzeSupport: analyzeSupportFactory({ chainConfigs }),\n estimateNativeFee: estimateNativeFeeFactory({ chainConfigs }),\n getAssets: getAssetsFactory({ chainConfigs }),\n getBridgeableAssets: getBridgeableAssetsFactory({ chainConfigs }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const chainId of chainConfigs.keys()) {\n supportedChainsMap.set(chainId, new Set([chainId]));\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory(),\n trackTransfer: trackTransferFactory(),\n transferAsset: transferAssetFactory({ chainConfigs, environment, evmSigner }),\n type: ServiceType.WRAP_UNWRAP,\n } satisfies TransferService;\n}\n"],"mappings":"grBAqBA,eAAsB,EAAwB,CAC5C,cACA,aACqD,CACrD,IAAM,EAAe,EAAgB,EAAY,CAEjD,MAAO,CACL,eAAgB,EAAsB,CAAE,eAAc,CAAC,CACvD,kBAAmB,EAAyB,CAAE,eAAc,CAAC,CAC7D,UAAW,EAAiB,CAAE,eAAc,CAAC,CAC7C,oBAAqB,EAA2B,CAAE,eAAc,CAAC,CACjE,yBAA0B,GAAiC,CAC3D,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,IAAM,KAAW,EAAa,MAAM,CACvC,EAAmB,IAAI,EAAS,IAAI,IAAI,CAAC,EAAQ,CAAC,CAAC,CAGrD,OAAO,GAET,aAAc,GAAqB,CACnC,cAAe,GAAsB,CACrC,cAAe,EAAqB,CAAE,eAAc,cAAa,YAAW,CAAC,CAC7E,KAAM,EAAY,YACnB"}
|
package/dist/types/asset.d.cts
CHANGED
|
@@ -12,6 +12,7 @@ interface AssetBase {
|
|
|
12
12
|
/** Number of decimals for smallest unit. */
|
|
13
13
|
readonly decimals: number;
|
|
14
14
|
readonly type: TokenType;
|
|
15
|
+
readonly logoUri?: string;
|
|
15
16
|
}
|
|
16
17
|
/** ERC-20 token asset. */
|
|
17
18
|
interface Erc20Asset extends AssetBase {
|
|
@@ -56,6 +57,10 @@ type DestinationInfo = Record<string, {
|
|
|
56
57
|
address: string;
|
|
57
58
|
bridgeProviders: ServiceType[];
|
|
58
59
|
}>;
|
|
60
|
+
/** Asset enriched with bridge providers that support it as a destination. */
|
|
61
|
+
type BridgeableUiAsset = Asset & {
|
|
62
|
+
readonly bridgeProviders: readonly ServiceType[];
|
|
63
|
+
};
|
|
59
64
|
//#endregion
|
|
60
|
-
export { Asset, ChainAssetMap, DestinationInfo, Erc20Asset, NativeAsset, SplAsset, TransferableAsset };
|
|
65
|
+
export { Asset, BridgeableUiAsset, ChainAssetMap, DestinationInfo, Erc20Asset, NativeAsset, SplAsset, TransferableAsset };
|
|
61
66
|
//# sourceMappingURL=asset.d.cts.map
|
package/dist/types/asset.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ interface AssetBase {
|
|
|
12
12
|
/** Number of decimals for smallest unit. */
|
|
13
13
|
readonly decimals: number;
|
|
14
14
|
readonly type: TokenType;
|
|
15
|
+
readonly logoUri?: string;
|
|
15
16
|
}
|
|
16
17
|
/** ERC-20 token asset. */
|
|
17
18
|
interface Erc20Asset extends AssetBase {
|
|
@@ -56,6 +57,10 @@ type DestinationInfo = Record<string, {
|
|
|
56
57
|
address: string;
|
|
57
58
|
bridgeProviders: ServiceType[];
|
|
58
59
|
}>;
|
|
60
|
+
/** Asset enriched with bridge providers that support it as a destination. */
|
|
61
|
+
type BridgeableUiAsset = Asset & {
|
|
62
|
+
readonly bridgeProviders: readonly ServiceType[];
|
|
63
|
+
};
|
|
59
64
|
//#endregion
|
|
60
|
-
export { Asset, ChainAssetMap, DestinationInfo, Erc20Asset, NativeAsset, SplAsset, TransferableAsset };
|
|
65
|
+
export { Asset, BridgeableUiAsset, ChainAssetMap, DestinationInfo, Erc20Asset, NativeAsset, SplAsset, TransferableAsset };
|
|
61
66
|
//# sourceMappingURL=asset.d.ts.map
|
package/dist/types/service.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ import { Caip2ChainId } from "./caip.cjs";
|
|
|
2
2
|
import { BitcoinFunctions } from "./bitcoin.cjs";
|
|
3
3
|
import { FeeRateTier } from "./fee.cjs";
|
|
4
4
|
import { EVM_SERVICE_TYPES, ServiceType } from "../constants.cjs";
|
|
5
|
-
import { Asset, ChainAssetMap, NativeAsset } from "./asset.cjs";
|
|
5
|
+
import { Asset, BridgeableUiAsset, ChainAssetMap, NativeAsset } from "./asset.cjs";
|
|
6
6
|
import { Quote, QuoterProps, ServiceQuoteEventHandler } from "./quote.cjs";
|
|
7
7
|
import { Transfer, TransferStepDetails } from "./transfer.cjs";
|
|
8
8
|
import { BtcSigner, EvmSigner, EvmSignerWithMessage, SolanaSigner } from "./signer.cjs";
|
|
@@ -155,6 +155,11 @@ interface EstimateNativeFeeOptions {
|
|
|
155
155
|
maxPriorityFeePerGas?: bigint;
|
|
156
156
|
}>;
|
|
157
157
|
}
|
|
158
|
+
interface GetBridgeableAssetsProps {
|
|
159
|
+
readonly sourceAsset: Asset;
|
|
160
|
+
readonly sourceChainId: Caip2ChainId;
|
|
161
|
+
readonly targetChainId: Caip2ChainId;
|
|
162
|
+
}
|
|
158
163
|
/**
|
|
159
164
|
* Mapping of services supported chains, and their corresponding supported destination chains.
|
|
160
165
|
*/
|
|
@@ -193,6 +198,8 @@ interface TransferService {
|
|
|
193
198
|
cancel: () => void;
|
|
194
199
|
result: Promise<Transfer>;
|
|
195
200
|
};
|
|
201
|
+
/** Return assets receivable on targetChainId for the given source, via this service. */
|
|
202
|
+
getBridgeableAssets(props: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]>;
|
|
196
203
|
/** Execute the quote, emitting `onStepChange` for signature steps. */
|
|
197
204
|
transferAsset(props: TransferAssetProps): Promise<Transfer>;
|
|
198
205
|
/** Concrete discriminator for this service. */
|
|
@@ -223,8 +230,14 @@ type MarkrServiceInitializer = {
|
|
|
223
230
|
* If not provided, the service will still function for EVM chains, but Solana support will be disabled and any quotes requiring Solana will be rejected.
|
|
224
231
|
*/
|
|
225
232
|
solanaSigner?: SolanaSigner;
|
|
233
|
+
/**
|
|
234
|
+
* Returns the assets available to receive on targetChainId via Markr cross-chain swaps.
|
|
235
|
+
* The SDK calls this during getBridgeableAssets.
|
|
236
|
+
* Similar to the bitcoinFunctions pattern, this decouples the SDK from any specific token registry.
|
|
237
|
+
*/
|
|
238
|
+
getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;
|
|
226
239
|
};
|
|
227
240
|
type ServiceInitializer = EvmServiceInitializer | LombardServiceInitializer | MarkrServiceInitializer;
|
|
228
241
|
//#endregion
|
|
229
|
-
export { EstimateNativeFeeOptions, EvmServiceInitializer, GasSettings, GetMinimumTransferAmountProps, GetSupportedChainsResult, LombardServiceInitializer, MarkrServiceInitializer, MutableGetSupportedChainsResult, NativeFeeEstimate, ServiceInitializer, TrackTransferProps, TransferAssetProps, TransferService };
|
|
242
|
+
export { EstimateNativeFeeOptions, EvmServiceInitializer, GasSettings, GetBridgeableAssetsProps, GetMinimumTransferAmountProps, GetSupportedChainsResult, LombardServiceInitializer, MarkrServiceInitializer, MutableGetSupportedChainsResult, NativeFeeEstimate, ServiceInitializer, TrackTransferProps, TransferAssetProps, TransferService };
|
|
230
243
|
//# sourceMappingURL=service.d.cts.map
|
package/dist/types/service.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Caip2ChainId } from "./caip.js";
|
|
|
2
2
|
import { BitcoinFunctions } from "./bitcoin.js";
|
|
3
3
|
import { FeeRateTier } from "./fee.js";
|
|
4
4
|
import { EVM_SERVICE_TYPES, ServiceType } from "../constants.js";
|
|
5
|
-
import { Asset, ChainAssetMap, NativeAsset } from "./asset.js";
|
|
5
|
+
import { Asset, BridgeableUiAsset, ChainAssetMap, NativeAsset } from "./asset.js";
|
|
6
6
|
import { Quote, QuoterProps, ServiceQuoteEventHandler } from "./quote.js";
|
|
7
7
|
import { Transfer, TransferStepDetails } from "./transfer.js";
|
|
8
8
|
import { BtcSigner, EvmSigner, EvmSignerWithMessage, SolanaSigner } from "./signer.js";
|
|
@@ -155,6 +155,11 @@ interface EstimateNativeFeeOptions {
|
|
|
155
155
|
maxPriorityFeePerGas?: bigint;
|
|
156
156
|
}>;
|
|
157
157
|
}
|
|
158
|
+
interface GetBridgeableAssetsProps {
|
|
159
|
+
readonly sourceAsset: Asset;
|
|
160
|
+
readonly sourceChainId: Caip2ChainId;
|
|
161
|
+
readonly targetChainId: Caip2ChainId;
|
|
162
|
+
}
|
|
158
163
|
/**
|
|
159
164
|
* Mapping of services supported chains, and their corresponding supported destination chains.
|
|
160
165
|
*/
|
|
@@ -193,6 +198,8 @@ interface TransferService {
|
|
|
193
198
|
cancel: () => void;
|
|
194
199
|
result: Promise<Transfer>;
|
|
195
200
|
};
|
|
201
|
+
/** Return assets receivable on targetChainId for the given source, via this service. */
|
|
202
|
+
getBridgeableAssets(props: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]>;
|
|
196
203
|
/** Execute the quote, emitting `onStepChange` for signature steps. */
|
|
197
204
|
transferAsset(props: TransferAssetProps): Promise<Transfer>;
|
|
198
205
|
/** Concrete discriminator for this service. */
|
|
@@ -223,8 +230,14 @@ type MarkrServiceInitializer = {
|
|
|
223
230
|
* If not provided, the service will still function for EVM chains, but Solana support will be disabled and any quotes requiring Solana will be rejected.
|
|
224
231
|
*/
|
|
225
232
|
solanaSigner?: SolanaSigner;
|
|
233
|
+
/**
|
|
234
|
+
* Returns the assets available to receive on targetChainId via Markr cross-chain swaps.
|
|
235
|
+
* The SDK calls this during getBridgeableAssets.
|
|
236
|
+
* Similar to the bitcoinFunctions pattern, this decouples the SDK from any specific token registry.
|
|
237
|
+
*/
|
|
238
|
+
getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;
|
|
226
239
|
};
|
|
227
240
|
type ServiceInitializer = EvmServiceInitializer | LombardServiceInitializer | MarkrServiceInitializer;
|
|
228
241
|
//#endregion
|
|
229
|
-
export { EstimateNativeFeeOptions, EvmServiceInitializer, GasSettings, GetMinimumTransferAmountProps, GetSupportedChainsResult, LombardServiceInitializer, MarkrServiceInitializer, MutableGetSupportedChainsResult, NativeFeeEstimate, ServiceInitializer, TrackTransferProps, TransferAssetProps, TransferService };
|
|
242
|
+
export { EstimateNativeFeeOptions, EvmServiceInitializer, GasSettings, GetBridgeableAssetsProps, GetMinimumTransferAmountProps, GetSupportedChainsResult, LombardServiceInitializer, MarkrServiceInitializer, MutableGetSupportedChainsResult, NativeFeeEstimate, ServiceInitializer, TrackTransferProps, TransferAssetProps, TransferService };
|
|
230
243
|
//# sourceMappingURL=service.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Caip2ChainId } from "./caip.cjs";
|
|
2
2
|
import { Environment, ServiceType } from "../constants.cjs";
|
|
3
|
-
import { Asset } from "./asset.cjs";
|
|
3
|
+
import { Asset, BridgeableUiAsset } from "./asset.cjs";
|
|
4
4
|
import { Quote, QuoterInterface, QuoterProps } from "./quote.cjs";
|
|
5
5
|
import { SdkError } from "../errors.cjs";
|
|
6
6
|
import { Transfer } from "./transfer.cjs";
|
|
@@ -55,15 +55,19 @@ interface TransferManager {
|
|
|
55
55
|
/** Estimate the native fee for executing the provided quote. */
|
|
56
56
|
estimateNativeFee(quote: Quote, options?: EstimateNativeFeeOptions): Promise<NativeFeeEstimate>;
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
58
|
+
* Returns all assets possibly receivable on targetChainId for the given source asset,
|
|
59
|
+
* across all configured bridge and swap providers. Assets are enriched with logoUri
|
|
60
|
+
* where available.
|
|
60
61
|
*
|
|
61
|
-
*
|
|
62
|
+
* Note: inclusion in this list does not guarantee a quote will succeed — for some
|
|
63
|
+
* providers (e.g. Markr) routes are discovered at quote time and may not always be
|
|
64
|
+
* available.
|
|
62
65
|
*/
|
|
63
|
-
|
|
66
|
+
getBridgeableAssets(props: {
|
|
64
67
|
sourceAsset: Asset;
|
|
65
68
|
sourceChainId: Caip2ChainId;
|
|
66
|
-
|
|
69
|
+
targetChainId: Caip2ChainId;
|
|
70
|
+
}): Promise<readonly BridgeableUiAsset[]>;
|
|
67
71
|
/**
|
|
68
72
|
* Minimum supported source amount for a given pair.
|
|
69
73
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Caip2ChainId } from "./caip.js";
|
|
2
2
|
import { Environment, ServiceType } from "../constants.js";
|
|
3
|
-
import { Asset } from "./asset.js";
|
|
3
|
+
import { Asset, BridgeableUiAsset } from "./asset.js";
|
|
4
4
|
import { Quote, QuoterInterface, QuoterProps } from "./quote.js";
|
|
5
5
|
import { SdkError } from "../errors.js";
|
|
6
6
|
import { Transfer } from "./transfer.js";
|
|
@@ -55,15 +55,19 @@ interface TransferManager {
|
|
|
55
55
|
/** Estimate the native fee for executing the provided quote. */
|
|
56
56
|
estimateNativeFee(quote: Quote, options?: EstimateNativeFeeOptions): Promise<NativeFeeEstimate>;
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
58
|
+
* Returns all assets possibly receivable on targetChainId for the given source asset,
|
|
59
|
+
* across all configured bridge and swap providers. Assets are enriched with logoUri
|
|
60
|
+
* where available.
|
|
60
61
|
*
|
|
61
|
-
*
|
|
62
|
+
* Note: inclusion in this list does not guarantee a quote will succeed — for some
|
|
63
|
+
* providers (e.g. Markr) routes are discovered at quote time and may not always be
|
|
64
|
+
* available.
|
|
62
65
|
*/
|
|
63
|
-
|
|
66
|
+
getBridgeableAssets(props: {
|
|
64
67
|
sourceAsset: Asset;
|
|
65
68
|
sourceChainId: Caip2ChainId;
|
|
66
|
-
|
|
69
|
+
targetChainId: Caip2ChainId;
|
|
70
|
+
}): Promise<readonly BridgeableUiAsset[]>;
|
|
67
71
|
/**
|
|
68
72
|
* Minimum supported source amount for a given pair.
|
|
69
73
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-id.cjs","names":["TokenType"],"sources":["../../src/utils/asset-id.ts"],"sourcesContent":["import { TokenType } from '../constants';\nimport type { Asset } from '../types/asset';\nimport type { Caip2ChainId } from '../types/caip';\n\n/**\n * Returns a unique string identifier for an asset on a given chain.\n *\n * Format:\n * - Native assets: `{chainId}:native`\n * - Token assets: `{chainId}:{tokenType}:{lowercaseAddress}`\n */\nexport function getAssetId(chainId: Caip2ChainId, asset: Asset): string {\n if (asset.type === TokenType.NATIVE) {\n return `${chainId}:${asset.type}`;\n }\n\n return `${chainId}:${asset.type}:${asset.address.toLowerCase()}`;\n}\n"],"mappings":"oCAWA,SAAgB,EAAW,EAAuB,EAAsB,CAKtE,OAJI,EAAM,OAASA,EAAAA,UAAU,OACpB,GAAG,EAAQ,GAAG,EAAM,OAGtB,GAAG,EAAQ,GAAG,EAAM,KAAK,GAAG,EAAM,QAAQ,aAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-id.js","names":[],"sources":["../../src/utils/asset-id.ts"],"sourcesContent":["import { TokenType } from '../constants';\nimport type { Asset } from '../types/asset';\nimport type { Caip2ChainId } from '../types/caip';\n\n/**\n * Returns a unique string identifier for an asset on a given chain.\n *\n * Format:\n * - Native assets: `{chainId}:native`\n * - Token assets: `{chainId}:{tokenType}:{lowercaseAddress}`\n */\nexport function getAssetId(chainId: Caip2ChainId, asset: Asset): string {\n if (asset.type === TokenType.NATIVE) {\n return `${chainId}:${asset.type}`;\n }\n\n return `${chainId}:${asset.type}:${asset.address.toLowerCase()}`;\n}\n"],"mappings":"4CAWA,SAAgB,EAAW,EAAuB,EAAsB,CAKtE,OAJI,EAAM,OAAS,EAAU,OACpB,GAAG,EAAQ,GAAG,EAAM,OAGtB,GAAG,EAAQ,GAAG,EAAM,KAAK,GAAG,EAAM,QAAQ,aAAa"}
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants.cjs`),t=require(`../errors.cjs`),n=require(`../utils/caip.cjs`),r=require(`../utils/evm-address.cjs`);let i=require(`viem`),a=require(`es-toolkit`);function o(e){return{destinations:Object.fromEntries(Object.entries(e.destinations).map(([e,t])=>[e,{address:t.address,bridgeProviders:[...t.bridgeProviders]}])),swapProviders:[...e.swapProviders]}}function s(e,t){for(let[r,i]of Object.entries(t)){if(!n.isCaip2ChainId(r))continue;let t=e[r];if(t){let n=new Set(t.bridgeProviders);for(let e of i.bridgeProviders)n.add(e);e[r]={address:t.address??i.address,bridgeProviders:Array.from(n)}}else e[r]={address:i.address,bridgeProviders:[...i.bridgeProviders]}}}function c(e,t){let n=new Set(e);for(let e of t)n.add(e);return Array.from(n)}function l(t,n){let r=t[e.TokenType.NATIVE];if(!r){t[e.TokenType.NATIVE]={...n,...o(n)};return}s(r.destinations,n.destinations),r.swapProviders=c(r.swapProviders,n.swapProviders)}function u(e,t){if(!e)return[{...t,...o(t),address:r.formatEvmAddress(t.address)}];let n=e.find(e=>(0,i.isAddressEqual)(e.address,t.address));return n?(s(n.destinations,t.destinations),n.swapProviders=c(n.swapProviders,t.swapProviders),e):(e.push({...t,...o(t)}),e)}function d(e,t){if(!e)return[{...t,...o(t)}];let n=e.find(e=>e.address===t.address);return n?(s(n.destinations,t.destinations),n.swapProviders=c(n.swapProviders,t.swapProviders),e):(e.push({...t,...o(t)}),e)}function f(r){let i={};for(let a of r)for(let[r,o]of Object.entries(a))if(n.isCaip2ChainId(r)){i[r]||(i[r]={});for(let n of o)switch(n.type){case e.TokenType.NATIVE:l(i[r],n);break;case e.TokenType.ERC20:i[r][e.TokenType.ERC20]=u(i[r][e.TokenType.ERC20],n);break;case e.TokenType.SPL:i[r][e.TokenType.SPL]=d(i[r][e.TokenType.SPL],n);break;default:throw new t.SdkError(`Unsupported asset type encountered during merge.`,t.ErrorCode.UNKNOWN,{details:JSON.stringify({asset:n})})}}let o={};for(let t of Object.keys(i)){if(!n.isCaip2ChainId(t))continue;let r=i[t];o[t]=[],r?.[e.TokenType.NATIVE]&&o[t].push(r[e.TokenType.NATIVE]),r?.[e.TokenType.ERC20]&&o[t].push(...(0,a.sortBy)(r[e.TokenType.ERC20],[`symbol`,`name`,`address`])),r?.[e.TokenType.SPL]&&o[t].push(...(0,a.sortBy)(r[e.TokenType.SPL],[`symbol`,`name`,`address`]))}return o}exports.mergeChainAssetMaps=f;
|
|
2
|
-
//# sourceMappingURL=merge-assets.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-assets.cjs","names":["isCaip2ChainId","TokenType","formatEvmAddress","SdkError","ErrorCode"],"sources":["../../src/_utils/merge-assets.ts"],"sourcesContent":["import { sortBy } from 'es-toolkit';\nimport { TokenType, type ServiceType } from '../constants';\nimport { ErrorCode, SdkError } from '../errors';\nimport type { ChainAssetMap, Erc20Asset, NativeAsset, SplAsset } from '../types/asset';\nimport type { Caip2ChainId } from '../types/caip';\nimport type { DeepMutable } from '../types/utility-types';\nimport { isCaip2ChainId } from '../utils/caip';\nimport { isAddressEqual } from 'viem';\nimport { formatEvmAddress } from '../utils/evm-address';\n\n/** @internal */\nexport interface TransferableData {\n destinations: { [chainId: Caip2ChainId]: { address: string; bridgeProviders: ServiceType[] } };\n swapProviders: ServiceType[];\n}\n\n/** @internal */\nexport interface ReadonlyTransferableData {\n destinations: {\n readonly [chainId: Caip2ChainId]: { readonly address: string; readonly bridgeProviders: readonly ServiceType[] };\n };\n swapProviders: readonly ServiceType[];\n}\n\ninterface ChainAssets {\n [TokenType.NATIVE]?: NativeAsset & TransferableData;\n [TokenType.ERC20]?: (Erc20Asset & TransferableData)[];\n [TokenType.SPL]?: (SplAsset & TransferableData)[];\n}\n\ninterface OrganizedChainAssetMap {\n [chainId: Caip2ChainId]: ChainAssets;\n}\n\nfunction cloneTransferableData(data: ReadonlyTransferableData): TransferableData {\n return {\n destinations: Object.fromEntries(\n Object.entries(data.destinations).map(([chainId, info]) => [\n chainId,\n { address: info.address, bridgeProviders: [...info.bridgeProviders] },\n ]),\n ),\n swapProviders: [...data.swapProviders],\n };\n}\n\nfunction mergeDestinations(\n target: TransferableData['destinations'],\n source: ReadonlyTransferableData['destinations'],\n): void {\n for (const [destChainId, info] of Object.entries(source)) {\n if (!isCaip2ChainId(destChainId)) {\n continue;\n }\n\n const existingInfo = target[destChainId];\n if (existingInfo) {\n const merged = new Set(existingInfo.bridgeProviders);\n for (const service of info.bridgeProviders) {\n merged.add(service);\n }\n // Keep existing address; if none, set from source\n const address = existingInfo.address ?? info.address;\n target[destChainId] = { address, bridgeProviders: Array.from(merged) };\n } else {\n target[destChainId] = { address: info.address, bridgeProviders: [...info.bridgeProviders] };\n }\n }\n}\n\nfunction mergeSwapProviders(target: ServiceType[], source: readonly ServiceType[]): ServiceType[] {\n const merged = new Set(target);\n for (const provider of source) {\n merged.add(provider);\n }\n return Array.from(merged);\n}\n\nfunction mergeNative(chainAssets: ChainAssets, asset: NativeAsset & ReadonlyTransferableData): void {\n const existingAsset = chainAssets[TokenType.NATIVE];\n if (!existingAsset) {\n chainAssets[TokenType.NATIVE] = {\n ...asset,\n ...cloneTransferableData(asset),\n };\n return;\n }\n\n mergeDestinations(existingAsset.destinations, asset.destinations);\n existingAsset.swapProviders = mergeSwapProviders(existingAsset.swapProviders, asset.swapProviders);\n}\n\nfunction upsertErc20(\n list: (Erc20Asset & TransferableData)[] | undefined,\n asset: Erc20Asset & ReadonlyTransferableData,\n): (Erc20Asset & TransferableData)[] {\n if (!list) {\n return [\n {\n ...asset,\n ...cloneTransferableData(asset),\n // format address to lowercase for consistency\n address: formatEvmAddress(asset.address),\n },\n ];\n }\n const matchingAsset = list.find((a) => isAddressEqual(a.address, asset.address));\n if (matchingAsset) {\n mergeDestinations(matchingAsset.destinations, asset.destinations);\n matchingAsset.swapProviders = mergeSwapProviders(matchingAsset.swapProviders, asset.swapProviders);\n return list;\n }\n list.push({ ...asset, ...cloneTransferableData(asset) });\n return list;\n}\n\nfunction upsertSpl(\n list: (SplAsset & TransferableData)[] | undefined,\n asset: SplAsset & ReadonlyTransferableData,\n): (SplAsset & TransferableData)[] {\n if (!list) {\n return [{ ...asset, ...cloneTransferableData(asset) }];\n }\n const matchingAsset = list.find((a) => a.address === asset.address);\n if (matchingAsset) {\n mergeDestinations(matchingAsset.destinations, asset.destinations);\n matchingAsset.swapProviders = mergeSwapProviders(matchingAsset.swapProviders, asset.swapProviders);\n return list;\n }\n list.push({ ...asset, ...cloneTransferableData(asset) });\n return list;\n}\n\nexport function mergeChainAssetMaps(chainAssetMaps: readonly ChainAssetMap[]): ChainAssetMap {\n const organizedMap: OrganizedChainAssetMap = {};\n\n for (const assetMap of chainAssetMaps) {\n for (const [chainId, assets] of Object.entries(assetMap)) {\n if (!isCaip2ChainId(chainId)) {\n continue;\n }\n\n if (!organizedMap[chainId]) {\n organizedMap[chainId] = {};\n }\n\n for (const asset of assets) {\n switch (asset.type) {\n case TokenType.NATIVE: {\n mergeNative(organizedMap[chainId], asset);\n break;\n }\n\n case TokenType.ERC20: {\n organizedMap[chainId][TokenType.ERC20] = upsertErc20(organizedMap[chainId][TokenType.ERC20], asset);\n break;\n }\n\n case TokenType.SPL: {\n organizedMap[chainId][TokenType.SPL] = upsertSpl(organizedMap[chainId][TokenType.SPL], asset);\n break;\n }\n\n default: {\n throw new SdkError('Unsupported asset type encountered during merge.', ErrorCode.UNKNOWN, {\n details: JSON.stringify({ asset }),\n });\n }\n }\n }\n }\n }\n\n // Convert organized map back to ChainAssetMap format\n const mergedAssetMap: DeepMutable<ChainAssetMap> = {};\n\n for (const chainId of Object.keys(organizedMap)) {\n if (!isCaip2ChainId(chainId)) {\n continue;\n }\n\n const assetsByType = organizedMap[chainId];\n\n mergedAssetMap[chainId] = [];\n\n // Add native asset if exists\n if (assetsByType?.[TokenType.NATIVE]) {\n mergedAssetMap[chainId].push(assetsByType[TokenType.NATIVE]);\n }\n\n // Add ERC20 assets if exist\n if (assetsByType?.[TokenType.ERC20]) {\n mergedAssetMap[chainId].push(...sortBy(assetsByType[TokenType.ERC20], ['symbol', 'name', 'address']));\n }\n\n // Add SPL assets if exist\n if (assetsByType?.[TokenType.SPL]) {\n mergedAssetMap[chainId].push(...sortBy(assetsByType[TokenType.SPL], ['symbol', 'name', 'address']));\n }\n }\n\n return mergedAssetMap as ChainAssetMap;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{TokenType as e}from"../constants.js";import{ErrorCode as t,SdkError as n}from"../errors.js";import{isCaip2ChainId as r}from"../utils/caip.js";import{formatEvmAddress as i}from"../utils/evm-address.js";import{isAddressEqual as a}from"viem";import{sortBy as o}from"es-toolkit";function s(e){return{destinations:Object.fromEntries(Object.entries(e.destinations).map(([e,t])=>[e,{address:t.address,bridgeProviders:[...t.bridgeProviders]}])),swapProviders:[...e.swapProviders]}}function c(e,t){for(let[n,i]of Object.entries(t)){if(!r(n))continue;let t=e[n];if(t){let r=new Set(t.bridgeProviders);for(let e of i.bridgeProviders)r.add(e);e[n]={address:t.address??i.address,bridgeProviders:Array.from(r)}}else e[n]={address:i.address,bridgeProviders:[...i.bridgeProviders]}}}function l(e,t){let n=new Set(e);for(let e of t)n.add(e);return Array.from(n)}function u(t,n){let r=t[e.NATIVE];if(!r){t[e.NATIVE]={...n,...s(n)};return}c(r.destinations,n.destinations),r.swapProviders=l(r.swapProviders,n.swapProviders)}function d(e,t){if(!e)return[{...t,...s(t),address:i(t.address)}];let n=e.find(e=>a(e.address,t.address));return n?(c(n.destinations,t.destinations),n.swapProviders=l(n.swapProviders,t.swapProviders),e):(e.push({...t,...s(t)}),e)}function f(e,t){if(!e)return[{...t,...s(t)}];let n=e.find(e=>e.address===t.address);return n?(c(n.destinations,t.destinations),n.swapProviders=l(n.swapProviders,t.swapProviders),e):(e.push({...t,...s(t)}),e)}function p(i){let a={};for(let o of i)for(let[i,s]of Object.entries(o))if(r(i)){a[i]||(a[i]={});for(let r of s)switch(r.type){case e.NATIVE:u(a[i],r);break;case e.ERC20:a[i][e.ERC20]=d(a[i][e.ERC20],r);break;case e.SPL:a[i][e.SPL]=f(a[i][e.SPL],r);break;default:throw new n(`Unsupported asset type encountered during merge.`,t.UNKNOWN,{details:JSON.stringify({asset:r})})}}let s={};for(let t of Object.keys(a)){if(!r(t))continue;let n=a[t];s[t]=[],n?.[e.NATIVE]&&s[t].push(n[e.NATIVE]),n?.[e.ERC20]&&s[t].push(...o(n[e.ERC20],[`symbol`,`name`,`address`])),n?.[e.SPL]&&s[t].push(...o(n[e.SPL],[`symbol`,`name`,`address`]))}return s}export{p as mergeChainAssetMaps};
|
|
2
|
-
//# sourceMappingURL=merge-assets.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-assets.js","names":[],"sources":["../../src/_utils/merge-assets.ts"],"sourcesContent":["import { sortBy } from 'es-toolkit';\nimport { TokenType, type ServiceType } from '../constants';\nimport { ErrorCode, SdkError } from '../errors';\nimport type { ChainAssetMap, Erc20Asset, NativeAsset, SplAsset } from '../types/asset';\nimport type { Caip2ChainId } from '../types/caip';\nimport type { DeepMutable } from '../types/utility-types';\nimport { isCaip2ChainId } from '../utils/caip';\nimport { isAddressEqual } from 'viem';\nimport { formatEvmAddress } from '../utils/evm-address';\n\n/** @internal */\nexport interface TransferableData {\n destinations: { [chainId: Caip2ChainId]: { address: string; bridgeProviders: ServiceType[] } };\n swapProviders: ServiceType[];\n}\n\n/** @internal */\nexport interface ReadonlyTransferableData {\n destinations: {\n readonly [chainId: Caip2ChainId]: { readonly address: string; readonly bridgeProviders: readonly ServiceType[] };\n };\n swapProviders: readonly ServiceType[];\n}\n\ninterface ChainAssets {\n [TokenType.NATIVE]?: NativeAsset & TransferableData;\n [TokenType.ERC20]?: (Erc20Asset & TransferableData)[];\n [TokenType.SPL]?: (SplAsset & TransferableData)[];\n}\n\ninterface OrganizedChainAssetMap {\n [chainId: Caip2ChainId]: ChainAssets;\n}\n\nfunction cloneTransferableData(data: ReadonlyTransferableData): TransferableData {\n return {\n destinations: Object.fromEntries(\n Object.entries(data.destinations).map(([chainId, info]) => [\n chainId,\n { address: info.address, bridgeProviders: [...info.bridgeProviders] },\n ]),\n ),\n swapProviders: [...data.swapProviders],\n };\n}\n\nfunction mergeDestinations(\n target: TransferableData['destinations'],\n source: ReadonlyTransferableData['destinations'],\n): void {\n for (const [destChainId, info] of Object.entries(source)) {\n if (!isCaip2ChainId(destChainId)) {\n continue;\n }\n\n const existingInfo = target[destChainId];\n if (existingInfo) {\n const merged = new Set(existingInfo.bridgeProviders);\n for (const service of info.bridgeProviders) {\n merged.add(service);\n }\n // Keep existing address; if none, set from source\n const address = existingInfo.address ?? info.address;\n target[destChainId] = { address, bridgeProviders: Array.from(merged) };\n } else {\n target[destChainId] = { address: info.address, bridgeProviders: [...info.bridgeProviders] };\n }\n }\n}\n\nfunction mergeSwapProviders(target: ServiceType[], source: readonly ServiceType[]): ServiceType[] {\n const merged = new Set(target);\n for (const provider of source) {\n merged.add(provider);\n }\n return Array.from(merged);\n}\n\nfunction mergeNative(chainAssets: ChainAssets, asset: NativeAsset & ReadonlyTransferableData): void {\n const existingAsset = chainAssets[TokenType.NATIVE];\n if (!existingAsset) {\n chainAssets[TokenType.NATIVE] = {\n ...asset,\n ...cloneTransferableData(asset),\n };\n return;\n }\n\n mergeDestinations(existingAsset.destinations, asset.destinations);\n existingAsset.swapProviders = mergeSwapProviders(existingAsset.swapProviders, asset.swapProviders);\n}\n\nfunction upsertErc20(\n list: (Erc20Asset & TransferableData)[] | undefined,\n asset: Erc20Asset & ReadonlyTransferableData,\n): (Erc20Asset & TransferableData)[] {\n if (!list) {\n return [\n {\n ...asset,\n ...cloneTransferableData(asset),\n // format address to lowercase for consistency\n address: formatEvmAddress(asset.address),\n },\n ];\n }\n const matchingAsset = list.find((a) => isAddressEqual(a.address, asset.address));\n if (matchingAsset) {\n mergeDestinations(matchingAsset.destinations, asset.destinations);\n matchingAsset.swapProviders = mergeSwapProviders(matchingAsset.swapProviders, asset.swapProviders);\n return list;\n }\n list.push({ ...asset, ...cloneTransferableData(asset) });\n return list;\n}\n\nfunction upsertSpl(\n list: (SplAsset & TransferableData)[] | undefined,\n asset: SplAsset & ReadonlyTransferableData,\n): (SplAsset & TransferableData)[] {\n if (!list) {\n return [{ ...asset, ...cloneTransferableData(asset) }];\n }\n const matchingAsset = list.find((a) => a.address === asset.address);\n if (matchingAsset) {\n mergeDestinations(matchingAsset.destinations, asset.destinations);\n matchingAsset.swapProviders = mergeSwapProviders(matchingAsset.swapProviders, asset.swapProviders);\n return list;\n }\n list.push({ ...asset, ...cloneTransferableData(asset) });\n return list;\n}\n\nexport function mergeChainAssetMaps(chainAssetMaps: readonly ChainAssetMap[]): ChainAssetMap {\n const organizedMap: OrganizedChainAssetMap = {};\n\n for (const assetMap of chainAssetMaps) {\n for (const [chainId, assets] of Object.entries(assetMap)) {\n if (!isCaip2ChainId(chainId)) {\n continue;\n }\n\n if (!organizedMap[chainId]) {\n organizedMap[chainId] = {};\n }\n\n for (const asset of assets) {\n switch (asset.type) {\n case TokenType.NATIVE: {\n mergeNative(organizedMap[chainId], asset);\n break;\n }\n\n case TokenType.ERC20: {\n organizedMap[chainId][TokenType.ERC20] = upsertErc20(organizedMap[chainId][TokenType.ERC20], asset);\n break;\n }\n\n case TokenType.SPL: {\n organizedMap[chainId][TokenType.SPL] = upsertSpl(organizedMap[chainId][TokenType.SPL], asset);\n break;\n }\n\n default: {\n throw new SdkError('Unsupported asset type encountered during merge.', ErrorCode.UNKNOWN, {\n details: JSON.stringify({ asset }),\n });\n }\n }\n }\n }\n }\n\n // Convert organized map back to ChainAssetMap format\n const mergedAssetMap: DeepMutable<ChainAssetMap> = {};\n\n for (const chainId of Object.keys(organizedMap)) {\n if (!isCaip2ChainId(chainId)) {\n continue;\n }\n\n const assetsByType = organizedMap[chainId];\n\n mergedAssetMap[chainId] = [];\n\n // Add native asset if exists\n if (assetsByType?.[TokenType.NATIVE]) {\n mergedAssetMap[chainId].push(assetsByType[TokenType.NATIVE]);\n }\n\n // Add ERC20 assets if exist\n if (assetsByType?.[TokenType.ERC20]) {\n mergedAssetMap[chainId].push(...sortBy(assetsByType[TokenType.ERC20], ['symbol', 'name', 'address']));\n }\n\n // Add SPL assets if exist\n if (assetsByType?.[TokenType.SPL]) {\n mergedAssetMap[chainId].push(...sortBy(assetsByType[TokenType.SPL], ['symbol', 'name', 'address']));\n }\n }\n\n return mergedAssetMap as ChainAssetMap;\n}\n"],"mappings":"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"}
|