@avalabs/fusion-sdk 0.7.0 → 0.9.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/mod.cjs +1 -1
- package/dist/mod.d.cts +2 -2
- package/dist/mod.d.ts +2 -2
- 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/_tracking-utilities.cjs +1 -1
- package/dist/transfer-service/_tracking-utilities.cjs.map +1 -1
- package/dist/transfer-service/_tracking-utilities.js +1 -1
- package/dist/transfer-service/_tracking-utilities.js.map +1 -1
- package/dist/transfer-service/_utils.cjs +1 -1
- package/dist/transfer-service/_utils.cjs.map +1 -1
- package/dist/transfer-service/_utils.js +1 -1
- package/dist/transfer-service/_utils.js.map +1 -1
- package/dist/transfer-service/_warden-config-schema.cjs.map +1 -1
- package/dist/transfer-service/_warden-config-schema.js.map +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs.map +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js.map +1 -1
- 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/_utils/transfer-data.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs.map +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js.map +1 -1
- 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/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs.map +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js.map +1 -1
- 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/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs.map +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js.map +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs.map +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.js +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.js.map +1 -1
- 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.js +1 -1
- package/dist/types/transfer-manager.d.cts +0 -12
- package/dist/types/transfer-manager.d.ts +0 -12
- package/dist/types/transfer.d.cts +24 -5
- package/dist/types/transfer.d.ts +24 -5
- package/dist/utils/transfer-utils.cjs +1 -1
- package/dist/utils/transfer-utils.cjs.map +1 -1
- package/dist/utils/transfer-utils.js +1 -1
- package/dist/utils/transfer-utils.js.map +1 -1
- package/package.json +3 -3
- 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 +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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"}
|