@avalabs/fusion-sdk 0.5.0 → 0.7.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.d.cts +4 -4
- package/dist/mod.d.ts +4 -4
- 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/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-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-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.cjs.map +1 -1
- package/dist/transfer-service/markr/_api.js +1 -1
- package/dist/transfer-service/markr/_api.js.map +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/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/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/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/_handlers/transfer-asset.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/transfer-asset.cjs.map +1 -1
- package/dist/transfer-service/markr/_handlers/transfer-asset.js +1 -1
- package/dist/transfer-service/markr/_handlers/transfer-asset.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 +20 -2
- package/dist/types/service.d.ts +20 -2
- package/dist/types/signer.d.cts +3 -1
- package/dist/types/signer.d.ts +3 -1
- package/dist/types/transfer-manager.d.cts +17 -1
- package/dist/types/transfer-manager.d.ts +17 -1
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_utils.js","names":[],"sources":["../../../src/transfer-service/markr/_utils.ts"],"sourcesContent":["import { ErrorCode, ErrorReason, SdkError } from '../../errors';\nimport { BaseError, decodeErrorResult, type Hex, isHex, toFunctionSelector } from 'viem';\nimport {\n type QuoteResponseData,\n type SupportedChainsResponseItemEvm,\n type SupportedChainsResponseItemSvm,\n type TokenListResponse,\n} from './_schema';\nimport { ERC_ZERO_ADDRESS, SOL_MINT_ADDRESS, ServiceType, TokenType } from '../../constants';\nimport { isSolanaNamespace } from '../../_utils/chain';\nimport { calculateMinimumAmountOut } from '../../_utils/math';\nimport { eip155ChainIdToCaip2 } from '../../utils/caip';\nimport type { Asset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Quote, QuoteFee, QuoteFees, QuoteFeeToken, QuoterProps } from '../../types/quote';\nimport { markrGetInfoChains, markrGetPartnerInfo, markrGetTokenList, type ApiOptions } from './_api';\nimport { isEvmAddress } from '../../utils/evm-address';\nimport { isSolAddress } from '../../utils/sol-address';\n\nexport type SupportedChainsMap = Map<\n Caip2ChainId,\n {\n /** `number` for EVM, `Caip2ChainId` for SVM */\n chainId: number | Caip2ChainId;\n crossChainSwapEnabled: boolean;\n crossChainTargetChainIds: ReadonlySet<Caip2ChainId>;\n swapEnabled: boolean;\n tokenList: boolean;\n }\n>;\n\nexport async function getSupportedChains(\n apiOptions: ApiOptions,\n disableCrossChainSwaps = false,\n): Promise<SupportedChainsMap> {\n const supportedChains: SupportedChainsMap = new Map();\n\n try {\n const chains = await markrGetInfoChains(apiOptions);\n const filteredSupportedChains = chains.filter(\n (chain): chain is SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm => {\n // Only include chains types that we support in the SDK (EVM and Solana for now).\n return chain.chainType === 'evm' || chain.chainType === 'svm';\n },\n );\n\n for (const chain of filteredSupportedChains) {\n const key: Caip2ChainId = typeof chain.chainId === 'number' ? eip155ChainIdToCaip2(chain.chainId) : chain.chainId;\n\n const isCrossChainSwapEnabled =\n chain.enabled_services.includes('cross-chain-quote') && chain.enabled_services.includes('cross-chain-swap');\n const isSwapEnabled = chain.enabled_services.includes('quote') && chain.enabled_services.includes('swap');\n const normalizedLaneChainIds = new Set<Caip2ChainId>();\n\n for (const lane of chain.lanes) {\n const laneChainId = typeof lane === 'number' ? eip155ChainIdToCaip2(lane) : lane;\n\n if (laneChainId !== key) {\n normalizedLaneChainIds.add(laneChainId);\n }\n }\n\n const crossChainSwapEnabled = disableCrossChainSwaps ? false : isCrossChainSwapEnabled;\n const crossChainTargetChainIds = crossChainSwapEnabled ? normalizedLaneChainIds : new Set<Caip2ChainId>();\n\n if (!isSwapEnabled && crossChainTargetChainIds.size === 0) {\n continue;\n }\n\n supportedChains.set(key, {\n chainId: chain.chainId,\n crossChainSwapEnabled,\n crossChainTargetChainIds,\n swapEnabled: isSwapEnabled,\n tokenList: chain.enabled_services.includes('token-list'),\n });\n }\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch supported chains from Markr API.',\n });\n }\n\n return supportedChains;\n}\n\nexport async function getSupportedTokens(\n apiOptions: ApiOptions,\n supportedChains: SupportedChainsMap,\n): Promise<Map<Caip2ChainId, Promise<TokenListResponse>>> {\n // Parallel fetch token lists for all supported chains.\n const supportedTokens: Map<Caip2ChainId, Promise<TokenListResponse>> = new Map();\n\n for (const [caip2ChainId, chainInfo] of supportedChains.entries()) {\n // Only fetch token list for EVM chains that support swaps.\n if (\n typeof chainInfo.chainId === 'number' &&\n chainInfo.tokenList &&\n (chainInfo.crossChainSwapEnabled || chainInfo.swapEnabled)\n ) {\n try {\n const tokenListPromise = markrGetTokenList(apiOptions, chainInfo.chainId);\n supportedTokens.set(caip2ChainId, tokenListPromise);\n } catch {\n // Ignore errors for individual token list fetches.\n // TODO: Logger?\n }\n }\n }\n\n return supportedTokens;\n}\n\n/**\n * Determine if the provided token address represents the native token for its chain.\n *\n * Markr represents EVM native tokens as the zero address and Solana native SOL\n * as the wrapped SOL mint address.\n */\nexport function isTokenAddressNative(address: string): boolean {\n return address === ERC_ZERO_ADDRESS || address === SOL_MINT_ADDRESS;\n}\n\n/**\n * Convert an `Asset` to the address string expected by the Markr API.\n *\n * For NATIVE assets the representation depends on the chain:\n * - EVM chains: `0x0000...0000` (ERC zero address)\n * - Solana chains: `So11111111111111111111111111111111111111112` (wrapped SOL mint)\n *\n * @param asset The asset to convert.\n * @param chainId CAIP-2 chain ID used to disambiguate NATIVE assets across chain types.\n */\nexport function assetToAddressString(asset: Asset, chainId: Caip2ChainId): string {\n if (asset.type === TokenType.NATIVE) {\n if (isSolanaNamespace(chainId)) {\n return SOL_MINT_ADDRESS;\n }\n\n return ERC_ZERO_ADDRESS;\n }\n\n return asset.address;\n}\n\n/**\n * Markr rejects `minAmountOut=0` for non-zero quotes.\n *\n * For very small quotes, integer truncation after slippage can produce `0`.\n * Clamp to `1` in that edge case to satisfy Markr API validation while\n * preserving normal slippage behavior for larger quotes.\n */\nexport function calculateMarkrMinimumAmountOut({\n amountOut,\n assetOut,\n slippageBps,\n}: Pick<Quote, 'amountOut' | 'assetOut' | 'slippageBps'>): bigint {\n const minAmountOut = calculateMinimumAmountOut({ amountOut, assetOut, slippageBps });\n\n if (amountOut > 0n && minAmountOut === 0n) {\n return 1n;\n }\n\n return minAmountOut;\n}\n\nexport function quoteFromMarkrQuoteResponseData(\n data: QuoteResponseData,\n quoterProps: QuoterProps,\n partnerFeeBps: number,\n): Quote {\n const partnerFee: bigint = (data.amountOut * BigInt(partnerFeeBps)) / 10_000n;\n const amountOutAfterFees: bigint = data.amountOut - partnerFee;\n\n const fees: QuoteFees = [\n ...mapMarkrQuoteResponseDataFeesToQuoteFees(data.fees),\n // Add the partner fee as a QuoteFee component for Markr quotes.\n {\n type: 'partner',\n name: 'Core Fee',\n amount: partnerFee,\n chainId: quoterProps.targetChain.chainId,\n token: assetToFeeToken(quoterProps.targetAsset),\n },\n ];\n\n return {\n aggregator: {\n id: data.aggregator.id,\n logoUrl: data.aggregator.logo_url,\n name: data.aggregator.name,\n },\n amountIn: data.amountIn,\n amountOut: amountOutAfterFees,\n assetIn: quoterProps.sourceAsset,\n assetOut: quoterProps.targetAsset,\n expiresAt: data.expiredAt, // Markr returns `expiredAt` as Unix time in seconds; use as-is.\n fees,\n fromAddress: quoterProps.fromAddress,\n /**\n * This gasEstimate is rough or may be missing.\n * Consumers should use TransferManager.estimateGas for a more accurate estimate.\n */\n gasEstimate: data.gasEstimate,\n id: data.uuid,\n partnerFeeBps,\n serviceType: ServiceType.MARKR,\n slippageBps: quoterProps.slippageBps ?? data.recommendedSlippage,\n sourceChain: quoterProps.sourceChain,\n targetChain: quoterProps.targetChain,\n toAddress: quoterProps.toAddress,\n } satisfies Quote;\n}\n\nexport async function getPartnerFeeBps(apiOptions: ApiOptions): Promise<number> {\n try {\n const partnerInfo = await markrGetPartnerInfo(apiOptions);\n return partnerInfo.fee;\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch partner info from Markr API.',\n });\n }\n}\n\nexport function mapMarkrQuoteResponseDataFeesToQuoteFees(markrFees: QuoteResponseData['fees']): QuoteFees {\n if (!markrFees) {\n return [];\n }\n\n const fees: QuoteFee[] = [];\n\n for (const fee of markrFees) {\n const chainId = typeof fee.token.chainId === 'number' ? eip155ChainIdToCaip2(fee.token.chainId) : fee.token.chainId;\n\n let token: QuoteFeeToken | undefined;\n\n if (isTokenAddressNative(fee.token.address)) {\n token = { type: TokenType.NATIVE };\n } else if (isEvmAddress(fee.token.address)) {\n token = { type: TokenType.ERC20, address: fee.token.address };\n } else if (isSolAddress(fee.token.address)) {\n token = { type: TokenType.SPL, address: fee.token.address };\n }\n\n if (!token) {\n // Skip fee if we can't determine token type.\n continue;\n }\n\n fees.push({\n type: fee.type,\n name: fee.name,\n amount: fee.amount,\n chainId,\n token,\n });\n }\n\n return fees;\n}\n\nfunction assetToFeeToken(asset: Asset): QuoteFeeToken {\n if (asset.type === TokenType.NATIVE) {\n return { type: TokenType.NATIVE };\n }\n\n if (asset.type === TokenType.SPL) {\n return { type: TokenType.SPL, address: asset.address };\n }\n\n return { type: TokenType.ERC20, address: asset.address };\n}\n\nexport type MarkrRouterAbi =\n | (typeof import('./_abis/swap-wrapper-abi'))['MARKR_SWAP_WRAPPER_ABI']\n | (typeof import('./_abis/cross-chain-swap-wrapper-abi'))['MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI'];\n\nexport async function getMarkrSwapWrapperAbi(crossChain: boolean): Promise<MarkrRouterAbi> {\n if (crossChain) {\n return (await import('./_abis/cross-chain-swap-wrapper-abi')).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI;\n }\n\n return (await import('./_abis/swap-wrapper-abi')).MARKR_SWAP_WRAPPER_ABI;\n}\n\nexport function extractHexDataFromError(error: unknown): Hex | undefined {\n if (error instanceof BaseError) {\n const directData = (error as { data?: unknown }).data;\n if (isHex(directData)) {\n return directData;\n }\n\n let walkedData: Hex | undefined;\n error.walk((walkedError) => {\n const nestedData = (walkedError as { data?: unknown }).data;\n if (!walkedData && isHex(nestedData)) {\n walkedData = nestedData;\n }\n return false;\n });\n\n if (walkedData) {\n return walkedData;\n }\n\n const causeData = (error as { cause?: { data?: unknown } }).cause?.data;\n if (isHex(causeData)) {\n return causeData;\n }\n }\n\n if (!error || typeof error !== 'object') {\n return undefined;\n }\n\n const genericError = error as {\n data?: unknown;\n error?: { data?: unknown };\n cause?: { data?: unknown };\n response?: { data?: unknown };\n body?: { error?: { data?: unknown } };\n };\n\n if (isHex(genericError.data)) {\n return genericError.data;\n }\n\n if (isHex(genericError.error?.data)) {\n return genericError.error.data;\n }\n\n if (isHex(genericError.cause?.data)) {\n return genericError.cause.data;\n }\n\n if (isHex(genericError.response?.data)) {\n return genericError.response.data;\n }\n\n if (isHex(genericError.body?.error?.data)) {\n return genericError.body.error.data;\n }\n\n return undefined;\n}\n\nexport function decodeMarkrRevertError(abi: MarkrRouterAbi, error: unknown): string | null {\n const revertData = extractHexDataFromError(error);\n\n if (!revertData) {\n return null;\n }\n\n try {\n const decoded = decodeErrorResult({ abi, data: revertData });\n const decodedArgs = decoded.args.length > 0 ? `(${decoded.args.map(String).join(', ')})` : '()';\n\n return `${decoded.errorName}${decodedArgs}`;\n } catch {\n const selector = revertData.slice(0, 10).toLowerCase();\n\n for (const abiItem of abi) {\n if (abiItem.type !== 'error') {\n continue;\n }\n\n const signature = `${abiItem.name}(${abiItem.inputs.map((input) => input.type).join(',')})`;\n if (toFunctionSelector(signature).toLowerCase() === selector) {\n return `${abiItem.name}()`;\n }\n }\n }\n\n return null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_utils.js","names":[],"sources":["../../../src/transfer-service/markr/_utils.ts"],"sourcesContent":["import { ErrorCode, ErrorReason, SdkError } from '../../errors';\nimport { BaseError, decodeErrorResult, type Hex, isHex, toFunctionSelector } from 'viem';\nimport {\n type QuoteResponseData,\n type SupportedChainsResponseItemEvm,\n type SupportedChainsResponseItemSvm,\n type TokenListResponse,\n} from './_schema';\nimport { ERC_ZERO_ADDRESS, SOL_MINT_ADDRESS, ServiceType, TokenType } from '../../constants';\nimport { isSolanaNamespace } from '../../_utils/chain';\nimport { calculateMinimumAmountOut } from '../../_utils/math';\nimport { eip155ChainIdToCaip2 } from '../../utils/caip';\nimport type { Asset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Quote, QuoteFee, QuoteFees, QuoteFeeToken, QuoterProps } from '../../types/quote';\nimport { markrGetInfoChains, markrGetPartnerInfo, markrGetTokenList, type ApiOptions } from './_api';\nimport { isEvmAddress } from '../../utils/evm-address';\nimport { isSolAddress } from '../../utils/sol-address';\n\nexport type SupportedChainsMap = Map<\n Caip2ChainId,\n {\n /** `number` for EVM, `Caip2ChainId` for SVM */\n chainId: number | Caip2ChainId;\n crossChainSwapEnabled: boolean;\n crossChainTargetChainIds: ReadonlySet<Caip2ChainId>;\n swapEnabled: boolean;\n tokenList: boolean;\n }\n>;\n\n/**\n * Checks whether the given source → target chain route is supported by Markr.\n */\nexport function isRouteSupported(\n supportedChains: SupportedChainsMap,\n sourceChainId: Caip2ChainId,\n targetChainId: Caip2ChainId,\n): boolean {\n const sourceChain = supportedChains.get(sourceChainId);\n const targetChain = supportedChains.get(targetChainId);\n\n if (!sourceChain || !targetChain) return false;\n\n if (sourceChainId === targetChainId) {\n return sourceChain.swapEnabled;\n }\n\n return sourceChain.crossChainSwapEnabled && sourceChain.crossChainTargetChainIds.has(targetChainId);\n}\n\nexport async function getSupportedChains(\n apiOptions: ApiOptions,\n disableCrossChainSwaps = false,\n): Promise<SupportedChainsMap> {\n const supportedChains: SupportedChainsMap = new Map();\n\n try {\n const chains = await markrGetInfoChains(apiOptions);\n const filteredSupportedChains = chains.filter(\n (chain): chain is SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm => {\n // Only include chains types that we support in the SDK (EVM and Solana for now).\n return chain.chainType === 'evm' || chain.chainType === 'svm';\n },\n );\n\n for (const chain of filteredSupportedChains) {\n const key: Caip2ChainId = typeof chain.chainId === 'number' ? eip155ChainIdToCaip2(chain.chainId) : chain.chainId;\n\n const isCrossChainSwapEnabled =\n chain.enabled_services.includes('cross-chain-quote') && chain.enabled_services.includes('cross-chain-swap');\n const isSwapEnabled = chain.enabled_services.includes('quote') && chain.enabled_services.includes('swap');\n const normalizedLaneChainIds = new Set<Caip2ChainId>();\n\n for (const lane of chain.lanes) {\n const laneChainId = typeof lane === 'number' ? eip155ChainIdToCaip2(lane) : lane;\n\n if (laneChainId !== key) {\n normalizedLaneChainIds.add(laneChainId);\n }\n }\n\n const crossChainSwapEnabled = disableCrossChainSwaps ? false : isCrossChainSwapEnabled;\n const crossChainTargetChainIds = crossChainSwapEnabled ? normalizedLaneChainIds : new Set<Caip2ChainId>();\n\n if (!isSwapEnabled && crossChainTargetChainIds.size === 0) {\n continue;\n }\n\n supportedChains.set(key, {\n chainId: chain.chainId,\n crossChainSwapEnabled,\n crossChainTargetChainIds,\n swapEnabled: isSwapEnabled,\n tokenList: chain.enabled_services.includes('token-list'),\n });\n }\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch supported chains from Markr API.',\n });\n }\n\n return supportedChains;\n}\n\nexport async function getSupportedTokens(\n apiOptions: ApiOptions,\n supportedChains: SupportedChainsMap,\n): Promise<Map<Caip2ChainId, Promise<TokenListResponse>>> {\n // Parallel fetch token lists for all supported chains.\n const supportedTokens: Map<Caip2ChainId, Promise<TokenListResponse>> = new Map();\n\n for (const [caip2ChainId, chainInfo] of supportedChains.entries()) {\n // Only fetch token list for EVM chains that support swaps.\n if (\n typeof chainInfo.chainId === 'number' &&\n chainInfo.tokenList &&\n (chainInfo.crossChainSwapEnabled || chainInfo.swapEnabled)\n ) {\n try {\n const tokenListPromise = markrGetTokenList(apiOptions, chainInfo.chainId);\n supportedTokens.set(caip2ChainId, tokenListPromise);\n } catch {\n // Ignore errors for individual token list fetches.\n // TODO: Logger?\n }\n }\n }\n\n return supportedTokens;\n}\n\n/**\n * Determine if the provided token address represents the native token for its chain.\n *\n * Markr represents EVM native tokens as the zero address and Solana native SOL\n * as the wrapped SOL mint address.\n */\nexport function isTokenAddressNative(address: string): boolean {\n return address === ERC_ZERO_ADDRESS || address === SOL_MINT_ADDRESS;\n}\n\n/**\n * Convert an `Asset` to the address string expected by the Markr API.\n *\n * For NATIVE assets the representation depends on the chain:\n * - EVM chains: `0x0000...0000` (ERC zero address)\n * - Solana chains: `So11111111111111111111111111111111111111112` (wrapped SOL mint)\n *\n * @param asset The asset to convert.\n * @param chainId CAIP-2 chain ID used to disambiguate NATIVE assets across chain types.\n */\nexport function assetToAddressString(asset: Asset, chainId: Caip2ChainId): string {\n if (asset.type === TokenType.NATIVE) {\n if (isSolanaNamespace(chainId)) {\n return SOL_MINT_ADDRESS;\n }\n\n return ERC_ZERO_ADDRESS;\n }\n\n return asset.address;\n}\n\n/**\n * Markr rejects `minAmountOut=0` for non-zero quotes.\n *\n * For very small quotes, integer truncation after slippage can produce `0`.\n * Clamp to `1` in that edge case to satisfy Markr API validation while\n * preserving normal slippage behavior for larger quotes.\n */\nexport function calculateMarkrMinimumAmountOut({\n amountOut,\n assetOut,\n slippageBps,\n}: Pick<Quote, 'amountOut' | 'assetOut' | 'slippageBps'>): bigint {\n const minAmountOut = calculateMinimumAmountOut({ amountOut, assetOut, slippageBps });\n\n if (amountOut > 0n && minAmountOut === 0n) {\n return 1n;\n }\n\n return minAmountOut;\n}\n\nexport function quoteFromMarkrQuoteResponseData(\n data: QuoteResponseData,\n quoterProps: QuoterProps,\n partnerFeeBps: number,\n): Quote {\n const partnerFee: bigint = (data.amountOut * BigInt(partnerFeeBps)) / 10_000n;\n const amountOutAfterFees: bigint = data.amountOut - partnerFee;\n\n const fees: QuoteFees = [\n ...mapMarkrQuoteResponseDataFeesToQuoteFees(data.fees),\n // Add the partner fee as a QuoteFee component for Markr quotes.\n {\n type: 'partner',\n name: 'Core Fee',\n amount: partnerFee,\n chainId: quoterProps.targetChain.chainId,\n token: assetToFeeToken(quoterProps.targetAsset),\n },\n ];\n\n return {\n aggregator: {\n id: data.aggregator.id,\n logoUrl: data.aggregator.logo_url,\n name: data.aggregator.name,\n },\n amountIn: data.amountIn,\n amountOut: amountOutAfterFees,\n assetIn: quoterProps.sourceAsset,\n assetOut: quoterProps.targetAsset,\n expiresAt: data.expiredAt, // Markr returns `expiredAt` as Unix time in seconds; use as-is.\n fees,\n fromAddress: quoterProps.fromAddress,\n /**\n * This gasEstimate is rough or may be missing.\n * Consumers should use TransferManager.estimateGas for a more accurate estimate.\n */\n gasEstimate: data.gasEstimate,\n id: data.uuid,\n partnerFeeBps,\n serviceType: ServiceType.MARKR,\n slippageBps: quoterProps.slippageBps ?? data.recommendedSlippage,\n sourceChain: quoterProps.sourceChain,\n targetChain: quoterProps.targetChain,\n toAddress: quoterProps.toAddress,\n } satisfies Quote;\n}\n\nexport async function getPartnerFeeBps(apiOptions: ApiOptions): Promise<number> {\n try {\n const partnerInfo = await markrGetPartnerInfo(apiOptions);\n return partnerInfo.fee;\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch partner info from Markr API.',\n });\n }\n}\n\nexport function mapMarkrQuoteResponseDataFeesToQuoteFees(markrFees: QuoteResponseData['fees']): QuoteFees {\n if (!markrFees) {\n return [];\n }\n\n const fees: QuoteFee[] = [];\n\n for (const fee of markrFees) {\n const chainId = typeof fee.token.chainId === 'number' ? eip155ChainIdToCaip2(fee.token.chainId) : fee.token.chainId;\n\n let token: QuoteFeeToken | undefined;\n\n if (isTokenAddressNative(fee.token.address)) {\n token = { type: TokenType.NATIVE };\n } else if (isEvmAddress(fee.token.address)) {\n token = { type: TokenType.ERC20, address: fee.token.address };\n } else if (isSolAddress(fee.token.address)) {\n token = { type: TokenType.SPL, address: fee.token.address };\n }\n\n if (!token) {\n // Skip fee if we can't determine token type.\n continue;\n }\n\n fees.push({\n type: fee.type,\n name: fee.name,\n amount: fee.amount,\n chainId,\n token,\n });\n }\n\n return fees;\n}\n\nfunction assetToFeeToken(asset: Asset): QuoteFeeToken {\n if (asset.type === TokenType.NATIVE) {\n return { type: TokenType.NATIVE };\n }\n\n if (asset.type === TokenType.SPL) {\n return { type: TokenType.SPL, address: asset.address };\n }\n\n return { type: TokenType.ERC20, address: asset.address };\n}\n\nexport type MarkrRouterAbi =\n | (typeof import('./_abis/swap-wrapper-abi'))['MARKR_SWAP_WRAPPER_ABI']\n | (typeof import('./_abis/cross-chain-swap-wrapper-abi'))['MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI'];\n\nexport async function getMarkrSwapWrapperAbi(crossChain: boolean): Promise<MarkrRouterAbi> {\n if (crossChain) {\n return (await import('./_abis/cross-chain-swap-wrapper-abi')).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI;\n }\n\n return (await import('./_abis/swap-wrapper-abi')).MARKR_SWAP_WRAPPER_ABI;\n}\n\nexport function extractHexDataFromError(error: unknown): Hex | undefined {\n if (error instanceof BaseError) {\n const directData = (error as { data?: unknown }).data;\n if (isHex(directData)) {\n return directData;\n }\n\n let walkedData: Hex | undefined;\n error.walk((walkedError) => {\n const nestedData = (walkedError as { data?: unknown }).data;\n if (!walkedData && isHex(nestedData)) {\n walkedData = nestedData;\n }\n return false;\n });\n\n if (walkedData) {\n return walkedData;\n }\n\n const causeData = (error as { cause?: { data?: unknown } }).cause?.data;\n if (isHex(causeData)) {\n return causeData;\n }\n }\n\n if (!error || typeof error !== 'object') {\n return undefined;\n }\n\n const genericError = error as {\n data?: unknown;\n error?: { data?: unknown };\n cause?: { data?: unknown };\n response?: { data?: unknown };\n body?: { error?: { data?: unknown } };\n };\n\n if (isHex(genericError.data)) {\n return genericError.data;\n }\n\n if (isHex(genericError.error?.data)) {\n return genericError.error.data;\n }\n\n if (isHex(genericError.cause?.data)) {\n return genericError.cause.data;\n }\n\n if (isHex(genericError.response?.data)) {\n return genericError.response.data;\n }\n\n if (isHex(genericError.body?.error?.data)) {\n return genericError.body.error.data;\n }\n\n return undefined;\n}\n\nexport function decodeMarkrRevertError(abi: MarkrRouterAbi, error: unknown): string | null {\n const revertData = extractHexDataFromError(error);\n\n if (!revertData) {\n return null;\n }\n\n try {\n const decoded = decodeErrorResult({ abi, data: revertData });\n const decodedArgs = decoded.args.length > 0 ? `(${decoded.args.map(String).join(', ')})` : '()';\n\n return `${decoded.errorName}${decodedArgs}`;\n } catch {\n const selector = revertData.slice(0, 10).toLowerCase();\n\n for (const abiItem of abi) {\n if (abiItem.type !== 'error') {\n continue;\n }\n\n const signature = `${abiItem.name}(${abiItem.inputs.map((input) => input.type).join(',')})`;\n if (toFunctionSelector(signature).toLowerCase() === selector) {\n return `${abiItem.name}()`;\n }\n }\n }\n\n return null;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
exports.DEFAULT_MARKR_API_URL=`https://proxy-api.avax.network/proxy/markr`,exports.SOLANA_POLLING_INTERVAL_MS=2500,exports.SOLANA_REQUIRED_CONFIRMATIONS=32,exports.SOLANA_TX_TIMEOUT_MS=12e4;
|
|
1
|
+
const e={fast:2e3,medium:5e3,slow:3e4,verySlow:18e4},t={fast:6e4,medium:20*6e4,slow:120*6e4},n={apechain:50*6e4,arbitrum:17*6e4,astar:35e3,avalanche:1e3,base:18*6e4,berachain:7e3,bitlayer:6e4,blast:20*6e4,bnbchain:5e3,bob:120*6e4,bsquared:20*6e4,celo:1e3,core:6e4,corn:720*6e4,cronos:1e3,cronoszkevm:1860*6e4,ethereum:15*6e4,fraxtal:30*6e4,gnosis:3*6e4,hashkey:60*6e4,ink:120*6e4,kroma:25*6e4,linea:20*6e4,mantle:28*6e4,metis:120*6e4,mindnetwork:60*6e4,mode:37*6e4,monad:48e3,opmainnet:20*6e4,polygon:17*6e4,polygonzkevm:120*6e4,ronin:1e4,scroll:60*6e4,sei:1e3,shibarium:6e4,solana:1e3,sonic:7e3,soneium:27*6e4,treasure:420*6e4,unichain:24*6e4,wemix:1e3,worldchain:40*6e4,xlayer:60*6e4,zircuit:21*6e4,zksync:20*6e4},r={"eip155:1":`ethereum`,"eip155:10":`opmainnet`,"eip155:25":`cronos`,"eip155:56":`bnbchain`,"eip155:100":`gnosis`,"eip155:137":`polygon`,"eip155:324":`zksync`,"eip155:1101":`polygonzkevm`,"eip155:1116":`core`,"eip155:1329":`sei`,"eip155:196":`xlayer`,"eip155:252":`fraxtal`,"eip155:480":`worldchain`,"eip155:59144":`linea`,"eip155:8453":`base`,"eip155:1088":`metis`,"eip155:2020":`ronin`,"eip155:42220":`celo`,"eip155:43114":`avalanche`,"eip155:48900":`zircuit`,"eip155:5000":`mantle`,"eip155:534352":`scroll`,"eip155:42161":`arbitrum`,"eip155:81457":`blast`,"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp":`solana`},i=[{aliases:[`apechain`],chainKey:`apechain`},{aliases:[`arbitrum`],chainKey:`arbitrum`},{aliases:[`astar`],chainKey:`astar`},{aliases:[`avalanche`],chainKey:`avalanche`},{aliases:[`base`],chainKey:`base`},{aliases:[`berachain`],chainKey:`berachain`},{aliases:[`bitlayer`],chainKey:`bitlayer`},{aliases:[`blast`],chainKey:`blast`},{aliases:[`bnbchain`,`bnbsmartchain`,`binancesmartchain`,`binancechain`],chainKey:`bnbchain`},{aliases:[`bob`],chainKey:`bob`},{aliases:[`b2`,`bsquared`],chainKey:`bsquared`},{aliases:[`celo`],chainKey:`celo`},{aliases:[`core`],chainKey:`core`},{aliases:[`corn`],chainKey:`corn`},{aliases:[`cronoszkevm`],chainKey:`cronoszkevm`},{aliases:[`cronos`],chainKey:`cronos`},{aliases:[`ethereum`],chainKey:`ethereum`},{aliases:[`fraxtal`],chainKey:`fraxtal`},{aliases:[`gnosis`],chainKey:`gnosis`},{aliases:[`hashkey`],chainKey:`hashkey`},{aliases:[`ink`],chainKey:`ink`},{aliases:[`kroma`],chainKey:`kroma`},{aliases:[`linea`],chainKey:`linea`},{aliases:[`mantle`],chainKey:`mantle`},{aliases:[`metis`],chainKey:`metis`},{aliases:[`mindnetwork`],chainKey:`mindnetwork`},{aliases:[`mode`],chainKey:`mode`},{aliases:[`monad`],chainKey:`monad`},{aliases:[`opmainnet`,`optimism`],chainKey:`opmainnet`},{aliases:[`polygonzkevm`],chainKey:`polygonzkevm`},{aliases:[`polygon`],chainKey:`polygon`},{aliases:[`ronin`],chainKey:`ronin`},{aliases:[`scroll`],chainKey:`scroll`},{aliases:[`sei`],chainKey:`sei`},{aliases:[`solana`],chainKey:`solana`},{aliases:[`soneium`],chainKey:`soneium`},{aliases:[`sonic`],chainKey:`sonic`},{aliases:[`shibarium`],chainKey:`shibarium`},{aliases:[`treasure`],chainKey:`treasure`},{aliases:[`unichain`],chainKey:`unichain`},{aliases:[`wemix`],chainKey:`wemix`},{aliases:[`worldchain`],chainKey:`worldchain`},{aliases:[`xlayer`],chainKey:`xlayer`},{aliases:[`zircuit`],chainKey:`zircuit`},{aliases:[`zksync`],chainKey:`zksync`}],a={...Object.fromEntries(Object.entries(r).map(([e,t])=>[e,n[t]]))},o=[...i.map(({aliases:e,chainKey:t})=>({aliases:e,finalityMs:n[t]}))];exports.CROSS_CHAIN_POLLING_INTERVAL_MS=e,exports.DEFAULT_MARKR_API_URL=`https://proxy-api.avax.network/proxy/markr`,exports.FINALITY_MS_BY_CHAIN_ID=a,exports.FINALITY_MS_BY_CHAIN_NAME_ALIAS=o,exports.FINALITY_TIER_MAX_FINALITY_MS=t,exports.SOLANA_POLLING_INTERVAL_MS=2500,exports.SOLANA_REQUIRED_CONFIRMATIONS=32,exports.SOLANA_TX_TIMEOUT_MS=12e4;
|
|
2
2
|
//# sourceMappingURL=constants.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/transfer-service/markr/constants.ts"],"sourcesContent":["export const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr' as const;\n\n// Solana slot time is ~400ms. Polling every 2.5s (~6 slots) balances\n// responsiveness against RPC rate-limits — fast enough to detect finalization\n// promptly, without hammering the endpoint.\nexport const SOLANA_POLLING_INTERVAL_MS = 2_500;\n\n// A Solana blockhash is valid for 150 slots (~60s at 400ms/slot). Validators\n// may hold a transaction for up to ~90s before dropping it. We set a 120s\n// timeout to provide a comfortable buffer above worst-case blockhash expiry,\n// ensuring we don't falsely time out a transaction that is still eligible for\n// inclusion in a block.\nexport const SOLANA_TX_TIMEOUT_MS = 120_000;\n\n// Solana finalizes a block once ≥31 confirmed blocks are built on top of it.\n// `getSignatureStatuses` returns the running `confirmations` count (0 → N),\n// then `null` once the status flips to `finalized`. We use 32 as the\n// required-confirmation target so the progress bar fills smoothly from 0 → 31\n// during polling and snaps to 32 (= done) only when finalization is confirmed.\nexport const SOLANA_REQUIRED_CONFIRMATIONS = 32;\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/transfer-service/markr/constants.ts"],"sourcesContent":["import type { Caip2ChainId } from '../../types/caip';\n\nexport const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr' as const;\n\n/**\n * Cross-chain polling tiers used by Markr transfer tracking.\n *\n * Tier boundaries are selected from known destination/source finality windows\n * so we poll fast-finality chains more aggressively and avoid excessive RPC\n * traffic on slow-finality chains.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const CROSS_CHAIN_POLLING_INTERVAL_MS = {\n fast: 2_000, // 2 seconds\n medium: 5_000, // 5 seconds\n slow: 30_000, // 30 seconds\n verySlow: 180_000, // 3 minutes\n} as const;\n\n/**\n * Upper bounds (in ms) used to map known finality time to a polling tier.\n *\n * Values greater than `slow` are classified as `verySlow`.\n */\nexport const FINALITY_TIER_MAX_FINALITY_MS: Readonly<Record<'fast' | 'medium' | 'slow', number>> = {\n fast: 60_000,\n medium: 20 * 60_000,\n slow: 2 * 60 * 60_000,\n};\n\nconst FINALITY_MS_BY_CHAIN_KEY = {\n apechain: 50 * 60_000,\n arbitrum: 17 * 60_000,\n astar: 35_000,\n avalanche: 1_000,\n base: 18 * 60_000,\n berachain: 7_000,\n bitlayer: 60_000,\n blast: 20 * 60_000,\n bnbchain: 5_000,\n bob: 2 * 60 * 60_000,\n bsquared: 20 * 60_000,\n celo: 1_000,\n core: 60_000,\n corn: 12 * 60 * 60_000,\n cronos: 1_000,\n cronoszkevm: 31 * 60 * 60_000,\n ethereum: 15 * 60_000,\n fraxtal: 30 * 60_000,\n gnosis: 3 * 60_000,\n hashkey: 60 * 60_000,\n ink: 2 * 60 * 60_000,\n kroma: 25 * 60_000,\n linea: 20 * 60_000,\n mantle: 28 * 60_000,\n metis: 2 * 60 * 60_000,\n mindnetwork: 60 * 60_000,\n mode: 37 * 60_000,\n monad: 48_000,\n opmainnet: 20 * 60_000,\n polygon: 17 * 60_000,\n polygonzkevm: 2 * 60 * 60_000,\n ronin: 10_000,\n scroll: 60 * 60_000,\n sei: 1_000,\n shibarium: 60_000,\n solana: 1_000,\n sonic: 7_000,\n soneium: 27 * 60_000,\n treasure: 7 * 60 * 60_000,\n unichain: 24 * 60_000,\n wemix: 1_000,\n worldchain: 40 * 60_000,\n xlayer: 60 * 60_000,\n zircuit: 21 * 60_000,\n zksync: 20 * 60_000,\n} as const;\n\ntype FinalityChainKey = keyof typeof FINALITY_MS_BY_CHAIN_KEY;\n\nconst FINALITY_CHAIN_KEY_BY_CHAIN_ID = {\n 'eip155:1': 'ethereum',\n 'eip155:10': 'opmainnet',\n 'eip155:25': 'cronos',\n 'eip155:56': 'bnbchain',\n 'eip155:100': 'gnosis',\n 'eip155:137': 'polygon',\n 'eip155:324': 'zksync',\n 'eip155:1101': 'polygonzkevm',\n 'eip155:1116': 'core',\n 'eip155:1329': 'sei',\n 'eip155:196': 'xlayer',\n 'eip155:252': 'fraxtal',\n 'eip155:480': 'worldchain',\n 'eip155:59144': 'linea',\n 'eip155:8453': 'base',\n 'eip155:1088': 'metis',\n 'eip155:2020': 'ronin',\n 'eip155:42220': 'celo',\n 'eip155:43114': 'avalanche',\n 'eip155:48900': 'zircuit',\n 'eip155:5000': 'mantle',\n 'eip155:534352': 'scroll',\n 'eip155:42161': 'arbitrum',\n 'eip155:81457': 'blast',\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'solana',\n} as const satisfies Partial<Record<Caip2ChainId, FinalityChainKey>>;\n\nconst FINALITY_CHAIN_NAME_ALIASES = [\n { aliases: ['apechain'], chainKey: 'apechain' },\n { aliases: ['arbitrum'], chainKey: 'arbitrum' },\n { aliases: ['astar'], chainKey: 'astar' },\n { aliases: ['avalanche'], chainKey: 'avalanche' },\n { aliases: ['base'], chainKey: 'base' },\n { aliases: ['berachain'], chainKey: 'berachain' },\n { aliases: ['bitlayer'], chainKey: 'bitlayer' },\n { aliases: ['blast'], chainKey: 'blast' },\n { aliases: ['bnbchain', 'bnbsmartchain', 'binancesmartchain', 'binancechain'], chainKey: 'bnbchain' },\n { aliases: ['bob'], chainKey: 'bob' },\n { aliases: ['b2', 'bsquared'], chainKey: 'bsquared' },\n { aliases: ['celo'], chainKey: 'celo' },\n { aliases: ['core'], chainKey: 'core' },\n { aliases: ['corn'], chainKey: 'corn' },\n { aliases: ['cronoszkevm'], chainKey: 'cronoszkevm' },\n { aliases: ['cronos'], chainKey: 'cronos' },\n { aliases: ['ethereum'], chainKey: 'ethereum' },\n { aliases: ['fraxtal'], chainKey: 'fraxtal' },\n { aliases: ['gnosis'], chainKey: 'gnosis' },\n { aliases: ['hashkey'], chainKey: 'hashkey' },\n { aliases: ['ink'], chainKey: 'ink' },\n { aliases: ['kroma'], chainKey: 'kroma' },\n { aliases: ['linea'], chainKey: 'linea' },\n { aliases: ['mantle'], chainKey: 'mantle' },\n { aliases: ['metis'], chainKey: 'metis' },\n { aliases: ['mindnetwork'], chainKey: 'mindnetwork' },\n { aliases: ['mode'], chainKey: 'mode' },\n { aliases: ['monad'], chainKey: 'monad' },\n { aliases: ['opmainnet', 'optimism'], chainKey: 'opmainnet' },\n { aliases: ['polygonzkevm'], chainKey: 'polygonzkevm' },\n { aliases: ['polygon'], chainKey: 'polygon' },\n { aliases: ['ronin'], chainKey: 'ronin' },\n { aliases: ['scroll'], chainKey: 'scroll' },\n { aliases: ['sei'], chainKey: 'sei' },\n { aliases: ['solana'], chainKey: 'solana' },\n { aliases: ['soneium'], chainKey: 'soneium' },\n { aliases: ['sonic'], chainKey: 'sonic' },\n { aliases: ['shibarium'], chainKey: 'shibarium' },\n { aliases: ['treasure'], chainKey: 'treasure' },\n { aliases: ['unichain'], chainKey: 'unichain' },\n { aliases: ['wemix'], chainKey: 'wemix' },\n { aliases: ['worldchain'], chainKey: 'worldchain' },\n { aliases: ['xlayer'], chainKey: 'xlayer' },\n { aliases: ['zircuit'], chainKey: 'zircuit' },\n { aliases: ['zksync'], chainKey: 'zksync' },\n] as const satisfies ReadonlyArray<{ aliases: readonly string[]; chainKey: FinalityChainKey }>;\n\n/**\n * Known CAIP-2 chain IDs and their approximate CCIP finality times in\n * milliseconds.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_ID: Partial<Record<Caip2ChainId, number>> = {\n ...Object.fromEntries(\n Object.entries(FINALITY_CHAIN_KEY_BY_CHAIN_ID).map(([chainId, chainKey]) => [\n chainId,\n FINALITY_MS_BY_CHAIN_KEY[chainKey],\n ]),\n ),\n};\n\n/**\n * Chain-name aliases and their approximate CCIP finality times in\n * milliseconds.\n *\n * These aliases are used as a fallback when a chain ID is not present in\n * `FINALITY_MS_BY_CHAIN_ID`.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_NAME_ALIAS: ReadonlyArray<{ aliases: readonly string[]; finalityMs: number }> = [\n ...FINALITY_CHAIN_NAME_ALIASES.map(({ aliases, chainKey }) => ({\n aliases,\n finalityMs: FINALITY_MS_BY_CHAIN_KEY[chainKey],\n })),\n];\n\n// Solana slot time is ~400ms. Polling every 2.5s (~6 slots) balances\n// responsiveness against RPC rate-limits — fast enough to detect finalization\n// promptly, without hammering the endpoint.\nexport const SOLANA_POLLING_INTERVAL_MS = 2_500;\n\n// A Solana blockhash is valid for 150 slots (~60s at 400ms/slot). Validators\n// may hold a transaction for up to ~90s before dropping it. We set a 120s\n// timeout to provide a comfortable buffer above worst-case blockhash expiry,\n// ensuring we don't falsely time out a transaction that is still eligible for\n// inclusion in a block.\nexport const SOLANA_TX_TIMEOUT_MS = 120_000;\n\n// Solana finalizes a block once ≥31 confirmed blocks are built on top of it.\n// `getSignatureStatuses` returns the running `confirmations` count (0 → N),\n// then `null` once the status flips to `finalized`. We use 32 as the\n// required-confirmation target so the progress bar fills smoothly from 0 → 31\n// during polling and snaps to 32 (= done) only when finalization is confirmed.\nexport const SOLANA_REQUIRED_CONFIRMATIONS = 32;\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=`https://proxy-api.avax.network/proxy/markr`,t=
|
|
1
|
+
const e=`https://proxy-api.avax.network/proxy/markr`,t={fast:2e3,medium:5e3,slow:3e4,verySlow:18e4},n={fast:6e4,medium:20*6e4,slow:120*6e4},r={apechain:50*6e4,arbitrum:17*6e4,astar:35e3,avalanche:1e3,base:18*6e4,berachain:7e3,bitlayer:6e4,blast:20*6e4,bnbchain:5e3,bob:120*6e4,bsquared:20*6e4,celo:1e3,core:6e4,corn:720*6e4,cronos:1e3,cronoszkevm:1860*6e4,ethereum:15*6e4,fraxtal:30*6e4,gnosis:3*6e4,hashkey:60*6e4,ink:120*6e4,kroma:25*6e4,linea:20*6e4,mantle:28*6e4,metis:120*6e4,mindnetwork:60*6e4,mode:37*6e4,monad:48e3,opmainnet:20*6e4,polygon:17*6e4,polygonzkevm:120*6e4,ronin:1e4,scroll:60*6e4,sei:1e3,shibarium:6e4,solana:1e3,sonic:7e3,soneium:27*6e4,treasure:420*6e4,unichain:24*6e4,wemix:1e3,worldchain:40*6e4,xlayer:60*6e4,zircuit:21*6e4,zksync:20*6e4},i={"eip155:1":`ethereum`,"eip155:10":`opmainnet`,"eip155:25":`cronos`,"eip155:56":`bnbchain`,"eip155:100":`gnosis`,"eip155:137":`polygon`,"eip155:324":`zksync`,"eip155:1101":`polygonzkevm`,"eip155:1116":`core`,"eip155:1329":`sei`,"eip155:196":`xlayer`,"eip155:252":`fraxtal`,"eip155:480":`worldchain`,"eip155:59144":`linea`,"eip155:8453":`base`,"eip155:1088":`metis`,"eip155:2020":`ronin`,"eip155:42220":`celo`,"eip155:43114":`avalanche`,"eip155:48900":`zircuit`,"eip155:5000":`mantle`,"eip155:534352":`scroll`,"eip155:42161":`arbitrum`,"eip155:81457":`blast`,"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp":`solana`},a=[{aliases:[`apechain`],chainKey:`apechain`},{aliases:[`arbitrum`],chainKey:`arbitrum`},{aliases:[`astar`],chainKey:`astar`},{aliases:[`avalanche`],chainKey:`avalanche`},{aliases:[`base`],chainKey:`base`},{aliases:[`berachain`],chainKey:`berachain`},{aliases:[`bitlayer`],chainKey:`bitlayer`},{aliases:[`blast`],chainKey:`blast`},{aliases:[`bnbchain`,`bnbsmartchain`,`binancesmartchain`,`binancechain`],chainKey:`bnbchain`},{aliases:[`bob`],chainKey:`bob`},{aliases:[`b2`,`bsquared`],chainKey:`bsquared`},{aliases:[`celo`],chainKey:`celo`},{aliases:[`core`],chainKey:`core`},{aliases:[`corn`],chainKey:`corn`},{aliases:[`cronoszkevm`],chainKey:`cronoszkevm`},{aliases:[`cronos`],chainKey:`cronos`},{aliases:[`ethereum`],chainKey:`ethereum`},{aliases:[`fraxtal`],chainKey:`fraxtal`},{aliases:[`gnosis`],chainKey:`gnosis`},{aliases:[`hashkey`],chainKey:`hashkey`},{aliases:[`ink`],chainKey:`ink`},{aliases:[`kroma`],chainKey:`kroma`},{aliases:[`linea`],chainKey:`linea`},{aliases:[`mantle`],chainKey:`mantle`},{aliases:[`metis`],chainKey:`metis`},{aliases:[`mindnetwork`],chainKey:`mindnetwork`},{aliases:[`mode`],chainKey:`mode`},{aliases:[`monad`],chainKey:`monad`},{aliases:[`opmainnet`,`optimism`],chainKey:`opmainnet`},{aliases:[`polygonzkevm`],chainKey:`polygonzkevm`},{aliases:[`polygon`],chainKey:`polygon`},{aliases:[`ronin`],chainKey:`ronin`},{aliases:[`scroll`],chainKey:`scroll`},{aliases:[`sei`],chainKey:`sei`},{aliases:[`solana`],chainKey:`solana`},{aliases:[`soneium`],chainKey:`soneium`},{aliases:[`sonic`],chainKey:`sonic`},{aliases:[`shibarium`],chainKey:`shibarium`},{aliases:[`treasure`],chainKey:`treasure`},{aliases:[`unichain`],chainKey:`unichain`},{aliases:[`wemix`],chainKey:`wemix`},{aliases:[`worldchain`],chainKey:`worldchain`},{aliases:[`xlayer`],chainKey:`xlayer`},{aliases:[`zircuit`],chainKey:`zircuit`},{aliases:[`zksync`],chainKey:`zksync`}],o={...Object.fromEntries(Object.entries(i).map(([e,t])=>[e,r[t]]))},s=[...a.map(({aliases:e,chainKey:t})=>({aliases:e,finalityMs:r[t]}))],c=2500,l=12e4,u=32;export{t as CROSS_CHAIN_POLLING_INTERVAL_MS,e as DEFAULT_MARKR_API_URL,o as FINALITY_MS_BY_CHAIN_ID,s as FINALITY_MS_BY_CHAIN_NAME_ALIAS,n as FINALITY_TIER_MAX_FINALITY_MS,c as SOLANA_POLLING_INTERVAL_MS,u as SOLANA_REQUIRED_CONFIRMATIONS,l as SOLANA_TX_TIMEOUT_MS};
|
|
2
2
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/markr/constants.ts"],"sourcesContent":["export const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr' as const;\n\n// Solana slot time is ~400ms. Polling every 2.5s (~6 slots) balances\n// responsiveness against RPC rate-limits — fast enough to detect finalization\n// promptly, without hammering the endpoint.\nexport const SOLANA_POLLING_INTERVAL_MS = 2_500;\n\n// A Solana blockhash is valid for 150 slots (~60s at 400ms/slot). Validators\n// may hold a transaction for up to ~90s before dropping it. We set a 120s\n// timeout to provide a comfortable buffer above worst-case blockhash expiry,\n// ensuring we don't falsely time out a transaction that is still eligible for\n// inclusion in a block.\nexport const SOLANA_TX_TIMEOUT_MS = 120_000;\n\n// Solana finalizes a block once ≥31 confirmed blocks are built on top of it.\n// `getSignatureStatuses` returns the running `confirmations` count (0 → N),\n// then `null` once the status flips to `finalized`. We use 32 as the\n// required-confirmation target so the progress bar fills smoothly from 0 → 31\n// during polling and snaps to 32 (= done) only when finalization is confirmed.\nexport const SOLANA_REQUIRED_CONFIRMATIONS = 32;\n"],"mappings":"AAAA,MAAa,EAAwB,6CAKxB,EAA6B,KAO7B,EAAuB,KAOvB,EAAgC"}
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/markr/constants.ts"],"sourcesContent":["import type { Caip2ChainId } from '../../types/caip';\n\nexport const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr' as const;\n\n/**\n * Cross-chain polling tiers used by Markr transfer tracking.\n *\n * Tier boundaries are selected from known destination/source finality windows\n * so we poll fast-finality chains more aggressively and avoid excessive RPC\n * traffic on slow-finality chains.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const CROSS_CHAIN_POLLING_INTERVAL_MS = {\n fast: 2_000, // 2 seconds\n medium: 5_000, // 5 seconds\n slow: 30_000, // 30 seconds\n verySlow: 180_000, // 3 minutes\n} as const;\n\n/**\n * Upper bounds (in ms) used to map known finality time to a polling tier.\n *\n * Values greater than `slow` are classified as `verySlow`.\n */\nexport const FINALITY_TIER_MAX_FINALITY_MS: Readonly<Record<'fast' | 'medium' | 'slow', number>> = {\n fast: 60_000,\n medium: 20 * 60_000,\n slow: 2 * 60 * 60_000,\n};\n\nconst FINALITY_MS_BY_CHAIN_KEY = {\n apechain: 50 * 60_000,\n arbitrum: 17 * 60_000,\n astar: 35_000,\n avalanche: 1_000,\n base: 18 * 60_000,\n berachain: 7_000,\n bitlayer: 60_000,\n blast: 20 * 60_000,\n bnbchain: 5_000,\n bob: 2 * 60 * 60_000,\n bsquared: 20 * 60_000,\n celo: 1_000,\n core: 60_000,\n corn: 12 * 60 * 60_000,\n cronos: 1_000,\n cronoszkevm: 31 * 60 * 60_000,\n ethereum: 15 * 60_000,\n fraxtal: 30 * 60_000,\n gnosis: 3 * 60_000,\n hashkey: 60 * 60_000,\n ink: 2 * 60 * 60_000,\n kroma: 25 * 60_000,\n linea: 20 * 60_000,\n mantle: 28 * 60_000,\n metis: 2 * 60 * 60_000,\n mindnetwork: 60 * 60_000,\n mode: 37 * 60_000,\n monad: 48_000,\n opmainnet: 20 * 60_000,\n polygon: 17 * 60_000,\n polygonzkevm: 2 * 60 * 60_000,\n ronin: 10_000,\n scroll: 60 * 60_000,\n sei: 1_000,\n shibarium: 60_000,\n solana: 1_000,\n sonic: 7_000,\n soneium: 27 * 60_000,\n treasure: 7 * 60 * 60_000,\n unichain: 24 * 60_000,\n wemix: 1_000,\n worldchain: 40 * 60_000,\n xlayer: 60 * 60_000,\n zircuit: 21 * 60_000,\n zksync: 20 * 60_000,\n} as const;\n\ntype FinalityChainKey = keyof typeof FINALITY_MS_BY_CHAIN_KEY;\n\nconst FINALITY_CHAIN_KEY_BY_CHAIN_ID = {\n 'eip155:1': 'ethereum',\n 'eip155:10': 'opmainnet',\n 'eip155:25': 'cronos',\n 'eip155:56': 'bnbchain',\n 'eip155:100': 'gnosis',\n 'eip155:137': 'polygon',\n 'eip155:324': 'zksync',\n 'eip155:1101': 'polygonzkevm',\n 'eip155:1116': 'core',\n 'eip155:1329': 'sei',\n 'eip155:196': 'xlayer',\n 'eip155:252': 'fraxtal',\n 'eip155:480': 'worldchain',\n 'eip155:59144': 'linea',\n 'eip155:8453': 'base',\n 'eip155:1088': 'metis',\n 'eip155:2020': 'ronin',\n 'eip155:42220': 'celo',\n 'eip155:43114': 'avalanche',\n 'eip155:48900': 'zircuit',\n 'eip155:5000': 'mantle',\n 'eip155:534352': 'scroll',\n 'eip155:42161': 'arbitrum',\n 'eip155:81457': 'blast',\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'solana',\n} as const satisfies Partial<Record<Caip2ChainId, FinalityChainKey>>;\n\nconst FINALITY_CHAIN_NAME_ALIASES = [\n { aliases: ['apechain'], chainKey: 'apechain' },\n { aliases: ['arbitrum'], chainKey: 'arbitrum' },\n { aliases: ['astar'], chainKey: 'astar' },\n { aliases: ['avalanche'], chainKey: 'avalanche' },\n { aliases: ['base'], chainKey: 'base' },\n { aliases: ['berachain'], chainKey: 'berachain' },\n { aliases: ['bitlayer'], chainKey: 'bitlayer' },\n { aliases: ['blast'], chainKey: 'blast' },\n { aliases: ['bnbchain', 'bnbsmartchain', 'binancesmartchain', 'binancechain'], chainKey: 'bnbchain' },\n { aliases: ['bob'], chainKey: 'bob' },\n { aliases: ['b2', 'bsquared'], chainKey: 'bsquared' },\n { aliases: ['celo'], chainKey: 'celo' },\n { aliases: ['core'], chainKey: 'core' },\n { aliases: ['corn'], chainKey: 'corn' },\n { aliases: ['cronoszkevm'], chainKey: 'cronoszkevm' },\n { aliases: ['cronos'], chainKey: 'cronos' },\n { aliases: ['ethereum'], chainKey: 'ethereum' },\n { aliases: ['fraxtal'], chainKey: 'fraxtal' },\n { aliases: ['gnosis'], chainKey: 'gnosis' },\n { aliases: ['hashkey'], chainKey: 'hashkey' },\n { aliases: ['ink'], chainKey: 'ink' },\n { aliases: ['kroma'], chainKey: 'kroma' },\n { aliases: ['linea'], chainKey: 'linea' },\n { aliases: ['mantle'], chainKey: 'mantle' },\n { aliases: ['metis'], chainKey: 'metis' },\n { aliases: ['mindnetwork'], chainKey: 'mindnetwork' },\n { aliases: ['mode'], chainKey: 'mode' },\n { aliases: ['monad'], chainKey: 'monad' },\n { aliases: ['opmainnet', 'optimism'], chainKey: 'opmainnet' },\n { aliases: ['polygonzkevm'], chainKey: 'polygonzkevm' },\n { aliases: ['polygon'], chainKey: 'polygon' },\n { aliases: ['ronin'], chainKey: 'ronin' },\n { aliases: ['scroll'], chainKey: 'scroll' },\n { aliases: ['sei'], chainKey: 'sei' },\n { aliases: ['solana'], chainKey: 'solana' },\n { aliases: ['soneium'], chainKey: 'soneium' },\n { aliases: ['sonic'], chainKey: 'sonic' },\n { aliases: ['shibarium'], chainKey: 'shibarium' },\n { aliases: ['treasure'], chainKey: 'treasure' },\n { aliases: ['unichain'], chainKey: 'unichain' },\n { aliases: ['wemix'], chainKey: 'wemix' },\n { aliases: ['worldchain'], chainKey: 'worldchain' },\n { aliases: ['xlayer'], chainKey: 'xlayer' },\n { aliases: ['zircuit'], chainKey: 'zircuit' },\n { aliases: ['zksync'], chainKey: 'zksync' },\n] as const satisfies ReadonlyArray<{ aliases: readonly string[]; chainKey: FinalityChainKey }>;\n\n/**\n * Known CAIP-2 chain IDs and their approximate CCIP finality times in\n * milliseconds.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_ID: Partial<Record<Caip2ChainId, number>> = {\n ...Object.fromEntries(\n Object.entries(FINALITY_CHAIN_KEY_BY_CHAIN_ID).map(([chainId, chainKey]) => [\n chainId,\n FINALITY_MS_BY_CHAIN_KEY[chainKey],\n ]),\n ),\n};\n\n/**\n * Chain-name aliases and their approximate CCIP finality times in\n * milliseconds.\n *\n * These aliases are used as a fallback when a chain ID is not present in\n * `FINALITY_MS_BY_CHAIN_ID`.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_NAME_ALIAS: ReadonlyArray<{ aliases: readonly string[]; finalityMs: number }> = [\n ...FINALITY_CHAIN_NAME_ALIASES.map(({ aliases, chainKey }) => ({\n aliases,\n finalityMs: FINALITY_MS_BY_CHAIN_KEY[chainKey],\n })),\n];\n\n// Solana slot time is ~400ms. Polling every 2.5s (~6 slots) balances\n// responsiveness against RPC rate-limits — fast enough to detect finalization\n// promptly, without hammering the endpoint.\nexport const SOLANA_POLLING_INTERVAL_MS = 2_500;\n\n// A Solana blockhash is valid for 150 slots (~60s at 400ms/slot). Validators\n// may hold a transaction for up to ~90s before dropping it. We set a 120s\n// timeout to provide a comfortable buffer above worst-case blockhash expiry,\n// ensuring we don't falsely time out a transaction that is still eligible for\n// inclusion in a block.\nexport const SOLANA_TX_TIMEOUT_MS = 120_000;\n\n// Solana finalizes a block once ≥31 confirmed blocks are built on top of it.\n// `getSignatureStatuses` returns the running `confirmations` count (0 → N),\n// then `null` once the status flips to `finalized`. We use 32 as the\n// required-confirmation target so the progress bar fills smoothly from 0 → 31\n// during polling and snaps to 32 (= done) only when finalization is confirmed.\nexport const SOLANA_REQUIRED_CONFIRMATIONS = 32;\n"],"mappings":"AAEA,MAAa,EAAwB,6CAYxB,EAAkC,CAC7C,KAAM,IACN,OAAQ,IACR,KAAM,IACN,SAAU,KACX,CAOY,EAAsF,CACjG,KAAM,IACN,OAAQ,GAAK,IACb,KAAM,IAAS,IAChB,CAEK,EAA2B,CAC/B,SAAU,GAAK,IACf,SAAU,GAAK,IACf,MAAO,KACP,UAAW,IACX,KAAM,GAAK,IACX,UAAW,IACX,SAAU,IACV,MAAO,GAAK,IACZ,SAAU,IACV,IAAK,IAAS,IACd,SAAU,GAAK,IACf,KAAM,IACN,KAAM,IACN,KAAM,IAAU,IAChB,OAAQ,IACR,YAAa,KAAU,IACvB,SAAU,GAAK,IACf,QAAS,GAAK,IACd,OAAQ,EAAI,IACZ,QAAS,GAAK,IACd,IAAK,IAAS,IACd,MAAO,GAAK,IACZ,MAAO,GAAK,IACZ,OAAQ,GAAK,IACb,MAAO,IAAS,IAChB,YAAa,GAAK,IAClB,KAAM,GAAK,IACX,MAAO,KACP,UAAW,GAAK,IAChB,QAAS,GAAK,IACd,aAAc,IAAS,IACvB,MAAO,IACP,OAAQ,GAAK,IACb,IAAK,IACL,UAAW,IACX,OAAQ,IACR,MAAO,IACP,QAAS,GAAK,IACd,SAAU,IAAS,IACnB,SAAU,GAAK,IACf,MAAO,IACP,WAAY,GAAK,IACjB,OAAQ,GAAK,IACb,QAAS,GAAK,IACd,OAAQ,GAAK,IACd,CAIK,EAAiC,CACrC,WAAY,WACZ,YAAa,YACb,YAAa,SACb,YAAa,WACb,aAAc,SACd,aAAc,UACd,aAAc,SACd,cAAe,eACf,cAAe,OACf,cAAe,MACf,aAAc,SACd,aAAc,UACd,aAAc,aACd,eAAgB,QAChB,cAAe,OACf,cAAe,QACf,cAAe,QACf,eAAgB,OAChB,eAAgB,YAChB,eAAgB,UAChB,cAAe,SACf,gBAAiB,SACjB,eAAgB,WAChB,eAAgB,QAChB,0CAA2C,SAC5C,CAEK,EAA8B,CAClC,CAAE,QAAS,CAAC,WAAW,CAAE,SAAU,WAAY,CAC/C,CAAE,QAAS,CAAC,WAAW,CAAE,SAAU,WAAY,CAC/C,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,YAAY,CAAE,SAAU,YAAa,CACjD,CAAE,QAAS,CAAC,OAAO,CAAE,SAAU,OAAQ,CACvC,CAAE,QAAS,CAAC,YAAY,CAAE,SAAU,YAAa,CACjD,CAAE,QAAS,CAAC,WAAW,CAAE,SAAU,WAAY,CAC/C,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,WAAY,gBAAiB,oBAAqB,eAAe,CAAE,SAAU,WAAY,CACrG,CAAE,QAAS,CAAC,MAAM,CAAE,SAAU,MAAO,CACrC,CAAE,QAAS,CAAC,KAAM,WAAW,CAAE,SAAU,WAAY,CACrD,CAAE,QAAS,CAAC,OAAO,CAAE,SAAU,OAAQ,CACvC,CAAE,QAAS,CAAC,OAAO,CAAE,SAAU,OAAQ,CACvC,CAAE,QAAS,CAAC,OAAO,CAAE,SAAU,OAAQ,CACvC,CAAE,QAAS,CAAC,cAAc,CAAE,SAAU,cAAe,CACrD,CAAE,QAAS,CAAC,SAAS,CAAE,SAAU,SAAU,CAC3C,CAAE,QAAS,CAAC,WAAW,CAAE,SAAU,WAAY,CAC/C,CAAE,QAAS,CAAC,UAAU,CAAE,SAAU,UAAW,CAC7C,CAAE,QAAS,CAAC,SAAS,CAAE,SAAU,SAAU,CAC3C,CAAE,QAAS,CAAC,UAAU,CAAE,SAAU,UAAW,CAC7C,CAAE,QAAS,CAAC,MAAM,CAAE,SAAU,MAAO,CACrC,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,SAAS,CAAE,SAAU,SAAU,CAC3C,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,cAAc,CAAE,SAAU,cAAe,CACrD,CAAE,QAAS,CAAC,OAAO,CAAE,SAAU,OAAQ,CACvC,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,YAAa,WAAW,CAAE,SAAU,YAAa,CAC7D,CAAE,QAAS,CAAC,eAAe,CAAE,SAAU,eAAgB,CACvD,CAAE,QAAS,CAAC,UAAU,CAAE,SAAU,UAAW,CAC7C,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,SAAS,CAAE,SAAU,SAAU,CAC3C,CAAE,QAAS,CAAC,MAAM,CAAE,SAAU,MAAO,CACrC,CAAE,QAAS,CAAC,SAAS,CAAE,SAAU,SAAU,CAC3C,CAAE,QAAS,CAAC,UAAU,CAAE,SAAU,UAAW,CAC7C,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,YAAY,CAAE,SAAU,YAAa,CACjD,CAAE,QAAS,CAAC,WAAW,CAAE,SAAU,WAAY,CAC/C,CAAE,QAAS,CAAC,WAAW,CAAE,SAAU,WAAY,CAC/C,CAAE,QAAS,CAAC,QAAQ,CAAE,SAAU,QAAS,CACzC,CAAE,QAAS,CAAC,aAAa,CAAE,SAAU,aAAc,CACnD,CAAE,QAAS,CAAC,SAAS,CAAE,SAAU,SAAU,CAC3C,CAAE,QAAS,CAAC,UAAU,CAAE,SAAU,UAAW,CAC7C,CAAE,QAAS,CAAC,SAAS,CAAE,SAAU,SAAU,CAC5C,CASY,EAAiE,CAC5E,GAAG,OAAO,YACR,OAAO,QAAQ,EAA+B,CAAC,KAAK,CAAC,EAAS,KAAc,CAC1E,EACA,EAAyB,GAC1B,CAAC,CACH,CACF,CAYY,EAAqG,CAChH,GAAG,EAA4B,KAAK,CAAE,UAAS,eAAgB,CAC7D,UACA,WAAY,EAAyB,GACtC,EAAE,CACJ,CAKY,EAA6B,KAO7B,EAAuB,KAOvB,EAAgC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../constants.cjs`),t=require(`./
|
|
1
|
+
const e=require(`../../constants.cjs`),t=require(`./_utils.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(`./constants.cjs`),l=require(`./_handlers/track-transfer.cjs`),u=require(`./_handlers/transfer-asset.cjs`);async function d({apiBaseUrl:d,apiToken:f,appId:p,disableCrossChainSwaps:m,environment:h,evmSigner:g,fetch:_,getTargetChainAssets:v,solanaSigner:y}){let b={apiBaseUrl:new URL(d??c.DEFAULT_MARKR_API_URL),apiToken:f,fetch:_},[x,S]=await Promise.all([t.getPartnerFeeBps(b),t.getSupportedChains(b,m)]),C=await t.getSupportedTokens(b,S),w=n.analyzeSupportFactory({hasSolanaSigner:!!y,supportedChains:S});return{analyzeSupport:w,estimateNativeFee:r.estimateNativeFeeFactory({apiOptions:b,appId:p}),getAssets:i.getAssetsFactory({supportedChains:S,supportedTokens:C}),getBridgeableAssets:a.getBridgeableAssetsFactory({getTargetChainAssets:v,supportedChains:S}),getMinimumTransferAmount:o.getMinimumTransferAmountFactory({analyzeSupport:w,partnerFeeBps:x}),getSupportedChains:async()=>{let e=new Map;for(let[t,{crossChainTargetChainIds:n,swapEnabled:r}]of S.entries()){if(!r&&n.size===0)continue;let i=new Set;r&&i.add(t);for(let e of n)e!==t&&S.has(e)&&i.add(e);i.size>0&&e.set(t,i)}return e},streamQuotes:s.streamQuotesFactory({apiOptions:b,appId:p,partnerFeeBps:x}),trackTransfer:l.trackTransferFactory({apiOptions:b}),transferAsset:u.transferAssetFactory({apiOptions:b,appId:p,environment:h,evmSigner:g,solanaSigner:y}),type:e.ServiceType.MARKR}}exports.createMarkrService=d;
|
|
2
2
|
//# sourceMappingURL=markr-service.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markr-service.cjs","names":["DEFAULT_MARKR_API_URL","getPartnerFeeBps","getSupportedChains","getSupportedTokens","analyzeSupportFactory","estimateNativeFeeFactory","getAssetsFactory","getMinimumTransferAmountFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/markr/markr-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { EvmSigner, SolanaSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\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 { getPartnerFeeBps, getSupportedChains, getSupportedTokens } from './_utils';\nimport { DEFAULT_MARKR_API_URL } from './constants';\nimport type { ApiOptions } from './_api';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface MarkrServiceOptions {\n apiBaseUrl?: string;\n apiToken?: string;\n appId: string;\n disableCrossChainSwaps?: boolean;\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n disableCrossChainSwaps,\n environment,\n evmSigner,\n fetch: customFetch,\n solanaSigner,\n}: MarkrServiceOptions): Promise<TransferService> {\n const apiBaseUrl = new URL(apiBaseUrlString ?? DEFAULT_MARKR_API_URL);\n\n const apiOptions: ApiOptions = {\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n };\n\n // Parallelize fetching.\n const [partnerFeeBps, supportedChains] = await Promise.all([\n getPartnerFeeBps(apiOptions),\n getSupportedChains(apiOptions, disableCrossChainSwaps),\n ]);\n\n const supportedTokens = await getSupportedTokens(apiOptions, supportedChains);\n\n const hasSolanaSigner = Boolean(solanaSigner);\n const analyzeSupport = analyzeSupportFactory({ hasSolanaSigner, supportedChains });\n\n return {\n analyzeSupport,\n estimateNativeFee: estimateNativeFeeFactory({ apiOptions, appId }),\n getAssets: getAssetsFactory({ supportedChains, supportedTokens }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const [sourceChainId, { crossChainTargetChainIds, swapEnabled }] of supportedChains.entries()) {\n if (!swapEnabled && crossChainTargetChainIds.size === 0) {\n // If neither swap nor cross-chain swap is enabled, skip this chain as a source.\n continue;\n }\n\n const supportedTargetChainIds = new Set<Caip2ChainId>();\n\n // Add self as supported target if same-chain swap is enabled.\n if (swapEnabled) {\n supportedTargetChainIds.add(sourceChainId);\n }\n\n for (const chainId of crossChainTargetChainIds) {\n if (chainId !== sourceChainId && supportedChains.has(chainId)) {\n supportedTargetChainIds.add(chainId);\n }\n }\n\n if (supportedTargetChainIds.size > 0) {\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\n }\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory({ apiOptions, appId, partnerFeeBps }),\n trackTransfer: trackTransferFactory({ apiOptions }),\n transferAsset: transferAssetFactory({\n apiOptions,\n appId,\n environment,\n evmSigner,\n solanaSigner,\n }),\n type: ServiceType.MARKR,\n } satisfies TransferService;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"markr-service.cjs","names":["DEFAULT_MARKR_API_URL","getPartnerFeeBps","getSupportedChains","getSupportedTokens","analyzeSupportFactory","estimateNativeFeeFactory","getAssetsFactory","getBridgeableAssetsFactory","getMinimumTransferAmountFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/markr/markr-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { Asset } from '../../types/asset';\nimport type { EvmSigner, SolanaSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\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 { getPartnerFeeBps, getSupportedChains, getSupportedTokens } from './_utils';\nimport { DEFAULT_MARKR_API_URL } from './constants';\nimport type { ApiOptions } from './_api';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface MarkrServiceOptions {\n apiBaseUrl?: string;\n apiToken?: string;\n appId: string;\n disableCrossChainSwaps?: boolean;\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n disableCrossChainSwaps,\n environment,\n evmSigner,\n fetch: customFetch,\n getTargetChainAssets,\n solanaSigner,\n}: MarkrServiceOptions): Promise<TransferService> {\n const apiBaseUrl = new URL(apiBaseUrlString ?? DEFAULT_MARKR_API_URL);\n\n const apiOptions: ApiOptions = {\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n };\n\n // Parallelize fetching.\n const [partnerFeeBps, supportedChains] = await Promise.all([\n getPartnerFeeBps(apiOptions),\n getSupportedChains(apiOptions, disableCrossChainSwaps),\n ]);\n\n const supportedTokens = await getSupportedTokens(apiOptions, supportedChains);\n\n const hasSolanaSigner = Boolean(solanaSigner);\n const analyzeSupport = analyzeSupportFactory({ hasSolanaSigner, supportedChains });\n\n return {\n analyzeSupport,\n estimateNativeFee: estimateNativeFeeFactory({ apiOptions, appId }),\n getAssets: getAssetsFactory({ supportedChains, supportedTokens }),\n getBridgeableAssets: getBridgeableAssetsFactory({ getTargetChainAssets, supportedChains }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const [sourceChainId, { crossChainTargetChainIds, swapEnabled }] of supportedChains.entries()) {\n if (!swapEnabled && crossChainTargetChainIds.size === 0) {\n // If neither swap nor cross-chain swap is enabled, skip this chain as a source.\n continue;\n }\n\n const supportedTargetChainIds = new Set<Caip2ChainId>();\n\n // Add self as supported target if same-chain swap is enabled.\n if (swapEnabled) {\n supportedTargetChainIds.add(sourceChainId);\n }\n\n for (const chainId of crossChainTargetChainIds) {\n if (chainId !== sourceChainId && supportedChains.has(chainId)) {\n supportedTargetChainIds.add(chainId);\n }\n }\n\n if (supportedTargetChainIds.size > 0) {\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\n }\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory({ apiOptions, appId, partnerFeeBps }),\n trackTransfer: trackTransferFactory({ apiOptions }),\n transferAsset: transferAssetFactory({\n apiOptions,\n appId,\n environment,\n evmSigner,\n solanaSigner,\n }),\n type: ServiceType.MARKR,\n } satisfies TransferService;\n}\n"],"mappings":"mdA+BA,eAAsB,EAAmB,CACvC,WAAY,EACZ,WACA,QACA,yBACA,cACA,YACA,MAAO,EACP,uBACA,gBACgD,CAGhD,IAAM,EAAyB,CAC7B,WAHiB,IAAI,IAAI,GAAoBA,EAAAA,sBAAsB,CAInE,WACA,MAAO,EACR,CAGK,CAAC,EAAe,GAAmB,MAAM,QAAQ,IAAI,CACzDC,EAAAA,iBAAiB,EAAW,CAC5BC,EAAAA,mBAAmB,EAAY,EAAuB,CACvD,CAAC,CAEI,EAAkB,MAAMC,EAAAA,mBAAmB,EAAY,EAAgB,CAGvE,EAAiBC,EAAAA,sBAAsB,CAAE,gBADvB,EAAQ,EACgC,kBAAiB,CAAC,CAElF,MAAO,CACL,iBACA,kBAAmBC,EAAAA,yBAAyB,CAAE,aAAY,QAAO,CAAC,CAClE,UAAWC,EAAAA,iBAAiB,CAAE,kBAAiB,kBAAiB,CAAC,CACjE,oBAAqBC,EAAAA,2BAA2B,CAAE,uBAAsB,kBAAiB,CAAC,CAC1F,yBAA0BC,EAAAA,gCAAgC,CACxD,iBACA,gBACD,CAAC,CACF,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,GAAM,CAAC,EAAe,CAAE,2BAA0B,kBAAkB,EAAgB,SAAS,CAAE,CAClG,GAAI,CAAC,GAAe,EAAyB,OAAS,EAEpD,SAGF,IAAM,EAA0B,IAAI,IAGhC,GACF,EAAwB,IAAI,EAAc,CAG5C,IAAK,IAAM,KAAW,EAChB,IAAY,GAAiB,EAAgB,IAAI,EAAQ,EAC3D,EAAwB,IAAI,EAAQ,CAIpC,EAAwB,KAAO,GACjC,EAAmB,IAAI,EAAe,EAAwB,CAIlE,OAAO,GAET,aAAcC,EAAAA,oBAAoB,CAAE,aAAY,QAAO,gBAAe,CAAC,CACvE,cAAeC,EAAAA,qBAAqB,CAAE,aAAY,CAAC,CACnD,cAAeC,EAAAA,qBAAqB,CAClC,aACA,QACA,cACA,YACA,eACD,CAAC,CACF,KAAMC,EAAAA,YAAY,MACnB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ServiceType as e}from"../../constants.js";import{
|
|
1
|
+
import{ServiceType as e}from"../../constants.js";import{getPartnerFeeBps as t,getSupportedChains as n,getSupportedTokens as r}from"./_utils.js";import{analyzeSupportFactory as i}from"./_handlers/analyze-support.js";import{estimateNativeFeeFactory as a}from"./_handlers/estimate-native-fee.js";import{getAssetsFactory as o}from"./_handlers/get-assets.js";import{getBridgeableAssetsFactory as s}from"./_handlers/get-bridgeable-assets.js";import{getMinimumTransferAmountFactory as c}from"./_handlers/get-minimum-transfer-amount.js";import{streamQuotesFactory as l}from"./_handlers/stream-quotes.js";import{DEFAULT_MARKR_API_URL as u}from"./constants.js";import{trackTransferFactory as d}from"./_handlers/track-transfer.js";import{transferAssetFactory as f}from"./_handlers/transfer-asset.js";async function p({apiBaseUrl:p,apiToken:m,appId:h,disableCrossChainSwaps:g,environment:_,evmSigner:v,fetch:y,getTargetChainAssets:b,solanaSigner:x}){let S={apiBaseUrl:new URL(p??u),apiToken:m,fetch:y},[C,w]=await Promise.all([t(S),n(S,g)]),T=await r(S,w),E=i({hasSolanaSigner:!!x,supportedChains:w});return{analyzeSupport:E,estimateNativeFee:a({apiOptions:S,appId:h}),getAssets:o({supportedChains:w,supportedTokens:T}),getBridgeableAssets:s({getTargetChainAssets:b,supportedChains:w}),getMinimumTransferAmount:c({analyzeSupport:E,partnerFeeBps:C}),getSupportedChains:async()=>{let e=new Map;for(let[t,{crossChainTargetChainIds:n,swapEnabled:r}]of w.entries()){if(!r&&n.size===0)continue;let i=new Set;r&&i.add(t);for(let e of n)e!==t&&w.has(e)&&i.add(e);i.size>0&&e.set(t,i)}return e},streamQuotes:l({apiOptions:S,appId:h,partnerFeeBps:C}),trackTransfer:d({apiOptions:S}),transferAsset:f({apiOptions:S,appId:h,environment:_,evmSigner:v,solanaSigner:x}),type:e.MARKR}}export{p as createMarkrService};
|
|
2
2
|
//# sourceMappingURL=markr-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markr-service.js","names":[],"sources":["../../../src/transfer-service/markr/markr-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { EvmSigner, SolanaSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\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 { getPartnerFeeBps, getSupportedChains, getSupportedTokens } from './_utils';\nimport { DEFAULT_MARKR_API_URL } from './constants';\nimport type { ApiOptions } from './_api';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface MarkrServiceOptions {\n apiBaseUrl?: string;\n apiToken?: string;\n appId: string;\n disableCrossChainSwaps?: boolean;\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n disableCrossChainSwaps,\n environment,\n evmSigner,\n fetch: customFetch,\n solanaSigner,\n}: MarkrServiceOptions): Promise<TransferService> {\n const apiBaseUrl = new URL(apiBaseUrlString ?? DEFAULT_MARKR_API_URL);\n\n const apiOptions: ApiOptions = {\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n };\n\n // Parallelize fetching.\n const [partnerFeeBps, supportedChains] = await Promise.all([\n getPartnerFeeBps(apiOptions),\n getSupportedChains(apiOptions, disableCrossChainSwaps),\n ]);\n\n const supportedTokens = await getSupportedTokens(apiOptions, supportedChains);\n\n const hasSolanaSigner = Boolean(solanaSigner);\n const analyzeSupport = analyzeSupportFactory({ hasSolanaSigner, supportedChains });\n\n return {\n analyzeSupport,\n estimateNativeFee: estimateNativeFeeFactory({ apiOptions, appId }),\n getAssets: getAssetsFactory({ supportedChains, supportedTokens }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const [sourceChainId, { crossChainTargetChainIds, swapEnabled }] of supportedChains.entries()) {\n if (!swapEnabled && crossChainTargetChainIds.size === 0) {\n // If neither swap nor cross-chain swap is enabled, skip this chain as a source.\n continue;\n }\n\n const supportedTargetChainIds = new Set<Caip2ChainId>();\n\n // Add self as supported target if same-chain swap is enabled.\n if (swapEnabled) {\n supportedTargetChainIds.add(sourceChainId);\n }\n\n for (const chainId of crossChainTargetChainIds) {\n if (chainId !== sourceChainId && supportedChains.has(chainId)) {\n supportedTargetChainIds.add(chainId);\n }\n }\n\n if (supportedTargetChainIds.size > 0) {\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\n }\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory({ apiOptions, appId, partnerFeeBps }),\n trackTransfer: trackTransferFactory({ apiOptions }),\n transferAsset: transferAssetFactory({\n apiOptions,\n appId,\n environment,\n evmSigner,\n solanaSigner,\n }),\n type: ServiceType.MARKR,\n } satisfies TransferService;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"markr-service.js","names":[],"sources":["../../../src/transfer-service/markr/markr-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { Asset } from '../../types/asset';\nimport type { EvmSigner, SolanaSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\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 { getPartnerFeeBps, getSupportedChains, getSupportedTokens } from './_utils';\nimport { DEFAULT_MARKR_API_URL } from './constants';\nimport type { ApiOptions } from './_api';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface MarkrServiceOptions {\n apiBaseUrl?: string;\n apiToken?: string;\n appId: string;\n disableCrossChainSwaps?: boolean;\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n disableCrossChainSwaps,\n environment,\n evmSigner,\n fetch: customFetch,\n getTargetChainAssets,\n solanaSigner,\n}: MarkrServiceOptions): Promise<TransferService> {\n const apiBaseUrl = new URL(apiBaseUrlString ?? DEFAULT_MARKR_API_URL);\n\n const apiOptions: ApiOptions = {\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n };\n\n // Parallelize fetching.\n const [partnerFeeBps, supportedChains] = await Promise.all([\n getPartnerFeeBps(apiOptions),\n getSupportedChains(apiOptions, disableCrossChainSwaps),\n ]);\n\n const supportedTokens = await getSupportedTokens(apiOptions, supportedChains);\n\n const hasSolanaSigner = Boolean(solanaSigner);\n const analyzeSupport = analyzeSupportFactory({ hasSolanaSigner, supportedChains });\n\n return {\n analyzeSupport,\n estimateNativeFee: estimateNativeFeeFactory({ apiOptions, appId }),\n getAssets: getAssetsFactory({ supportedChains, supportedTokens }),\n getBridgeableAssets: getBridgeableAssetsFactory({ getTargetChainAssets, supportedChains }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const [sourceChainId, { crossChainTargetChainIds, swapEnabled }] of supportedChains.entries()) {\n if (!swapEnabled && crossChainTargetChainIds.size === 0) {\n // If neither swap nor cross-chain swap is enabled, skip this chain as a source.\n continue;\n }\n\n const supportedTargetChainIds = new Set<Caip2ChainId>();\n\n // Add self as supported target if same-chain swap is enabled.\n if (swapEnabled) {\n supportedTargetChainIds.add(sourceChainId);\n }\n\n for (const chainId of crossChainTargetChainIds) {\n if (chainId !== sourceChainId && supportedChains.has(chainId)) {\n supportedTargetChainIds.add(chainId);\n }\n }\n\n if (supportedTargetChainIds.size > 0) {\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\n }\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory({ apiOptions, appId, partnerFeeBps }),\n trackTransfer: trackTransferFactory({ apiOptions }),\n transferAsset: transferAssetFactory({\n apiOptions,\n appId,\n environment,\n evmSigner,\n solanaSigner,\n }),\n type: ServiceType.MARKR,\n } satisfies TransferService;\n}\n"],"mappings":"qxBA+BA,eAAsB,EAAmB,CACvC,WAAY,EACZ,WACA,QACA,yBACA,cACA,YACA,MAAO,EACP,uBACA,gBACgD,CAGhD,IAAM,EAAyB,CAC7B,WAHiB,IAAI,IAAI,GAAoB,EAAsB,CAInE,WACA,MAAO,EACR,CAGK,CAAC,EAAe,GAAmB,MAAM,QAAQ,IAAI,CACzD,EAAiB,EAAW,CAC5B,EAAmB,EAAY,EAAuB,CACvD,CAAC,CAEI,EAAkB,MAAM,EAAmB,EAAY,EAAgB,CAGvE,EAAiB,EAAsB,CAAE,gBADvB,EAAQ,EACgC,kBAAiB,CAAC,CAElF,MAAO,CACL,iBACA,kBAAmB,EAAyB,CAAE,aAAY,QAAO,CAAC,CAClE,UAAW,EAAiB,CAAE,kBAAiB,kBAAiB,CAAC,CACjE,oBAAqB,EAA2B,CAAE,uBAAsB,kBAAiB,CAAC,CAC1F,yBAA0B,EAAgC,CACxD,iBACA,gBACD,CAAC,CACF,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,GAAM,CAAC,EAAe,CAAE,2BAA0B,kBAAkB,EAAgB,SAAS,CAAE,CAClG,GAAI,CAAC,GAAe,EAAyB,OAAS,EAEpD,SAGF,IAAM,EAA0B,IAAI,IAGhC,GACF,EAAwB,IAAI,EAAc,CAG5C,IAAK,IAAM,KAAW,EAChB,IAAY,GAAiB,EAAgB,IAAI,EAAQ,EAC3D,EAAwB,IAAI,EAAQ,CAIpC,EAAwB,KAAO,GACjC,EAAmB,IAAI,EAAe,EAAwB,CAIlE,OAAO,GAET,aAAc,EAAoB,CAAE,aAAY,QAAO,gBAAe,CAAC,CACvE,cAAe,EAAqB,CAAE,aAAY,CAAC,CACnD,cAAe,EAAqB,CAClC,aACA,QACA,cACA,YACA,eACD,CAAC,CACF,KAAM,EAAY,MACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../constants.cjs`);function t({chainConfigs:t}){return async({sourceAsset:n,sourceChainId:r,targetChainId:i})=>{if(r!==i)return[];let a=t.get(r);return a?n.type===e.TokenType.NATIVE?[{...a.wrappedAsset,bridgeProviders:[e.ServiceType.WRAP_UNWRAP]}]:n.type===e.TokenType.ERC20&&n.address.toLowerCase()===a.wrappedAsset.address.toLowerCase()?[{...a.nativeAsset,bridgeProviders:[e.ServiceType.WRAP_UNWRAP]}]:[]:[]}}exports.getBridgeableAssetsFactory=t;
|
|
2
|
+
//# sourceMappingURL=get-bridgeable-assets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-bridgeable-assets.cjs","names":["TokenType","ServiceType"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport type { BridgeableUiAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\n\nexport function getBridgeableAssetsFactory({\n chainConfigs,\n}: {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (sourceChainId !== targetChainId) {\n return [];\n }\n const config = chainConfigs.get(sourceChainId);\n if (!config) {\n return [];\n }\n if (sourceAsset.type === TokenType.NATIVE) {\n return [{ ...config.wrappedAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n if (\n sourceAsset.type === TokenType.ERC20 &&\n sourceAsset.address.toLowerCase() === config.wrappedAsset.address.toLowerCase()\n ) {\n return [{ ...config.nativeAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n return [];\n };\n}\n"],"mappings":"0CAMA,SAAgB,EAA2B,CACzC,gBAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBACqE,CACrE,GAAI,IAAkB,EACpB,MAAO,EAAE,CAEX,IAAM,EAAS,EAAa,IAAI,EAAc,CAa9C,OAZK,EAGD,EAAY,OAASA,EAAAA,UAAU,OAC1B,CAAC,CAAE,GAAG,EAAO,aAAc,gBAAiB,CAACC,EAAAA,YAAY,YAAY,CAAE,CAAC,CAG/E,EAAY,OAASD,EAAAA,UAAU,OAC/B,EAAY,QAAQ,aAAa,GAAK,EAAO,aAAa,QAAQ,aAAa,CAExE,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAACC,EAAAA,YAAY,YAAY,CAAE,CAAC,CAEzE,EAAE,CAXA,EAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ServiceType as e,TokenType as t}from"../../../constants.js";function n({chainConfigs:n}){return async({sourceAsset:r,sourceChainId:i,targetChainId:a})=>{if(i!==a)return[];let o=n.get(i);return o?r.type===t.NATIVE?[{...o.wrappedAsset,bridgeProviders:[e.WRAP_UNWRAP]}]:r.type===t.ERC20&&r.address.toLowerCase()===o.wrappedAsset.address.toLowerCase()?[{...o.nativeAsset,bridgeProviders:[e.WRAP_UNWRAP]}]:[]:[]}}export{n as getBridgeableAssetsFactory};
|
|
2
|
+
//# sourceMappingURL=get-bridgeable-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-bridgeable-assets.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport type { BridgeableUiAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\n\nexport function getBridgeableAssetsFactory({\n chainConfigs,\n}: {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (sourceChainId !== targetChainId) {\n return [];\n }\n const config = chainConfigs.get(sourceChainId);\n if (!config) {\n return [];\n }\n if (sourceAsset.type === TokenType.NATIVE) {\n return [{ ...config.wrappedAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n if (\n sourceAsset.type === TokenType.ERC20 &&\n sourceAsset.address.toLowerCase() === config.wrappedAsset.address.toLowerCase()\n ) {\n return [{ ...config.nativeAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n return [];\n };\n}\n"],"mappings":"mEAMA,SAAgB,EAA2B,CACzC,gBAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBACqE,CACrE,GAAI,IAAkB,EACpB,MAAO,EAAE,CAEX,IAAM,EAAS,EAAa,IAAI,EAAc,CAa9C,OAZK,EAGD,EAAY,OAAS,EAAU,OAC1B,CAAC,CAAE,GAAG,EAAO,aAAc,gBAAiB,CAAC,EAAY,YAAY,CAAE,CAAC,CAG/E,EAAY,OAAS,EAAU,OAC/B,EAAY,QAAQ,aAAa,GAAK,EAAO,aAAa,QAAQ,aAAa,CAExE,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAAC,EAAY,YAAY,CAAE,CAAC,CAEzE,EAAE,CAXA,EAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../constants.cjs`),t=`0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7`,n=`0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,r=`0xd00ae08403B9bbb9124bB305C09058E32C39A48c`,i=`0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14`;function
|
|
1
|
+
const e=require(`../../constants.cjs`),t=`0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7`,n=`0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,r=`0xd00ae08403B9bbb9124bB305C09058E32C39A48c`,i=`0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14`,a=`https://images.ctfassets.net/gcj8jwzm6086/687e413f-7b24-48ff-a490-e61bd741bc8e/b68081167fa0c23d501092de0e767bd7/1-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2.png`;function o(t,n){return{type:e.TokenType.ERC20,name:`Wrapped AVAX`,symbol:`WAVAX`,decimals:18,address:t,logoUri:n}}function s(t,n){return{type:e.TokenType.ERC20,name:`Wrapped Ether`,symbol:`WETH`,decimals:18,address:t,logoUri:n}}const c=new Map([[e.AvalancheChainIds.MAINNET,{chain:e.AVALANCHE_MAINNET_CHAIN,wrappedTokenAddress:t,nativeAsset:e.NATIVE_AVAX,wrappedAsset:o(t,`https://images.ctfassets.net/gcj8jwzm6086/0921c633-a8d2-4de6-b9f3-6508c641c44c/8b92abcbf0f59c9ad3188b0d9e8e3e3b/43114-0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7.png`)}],[e.EthereumChainIds.MAINNET,{chain:e.ETHEREUM_MAINNET_CHAIN,wrappedTokenAddress:n,nativeAsset:e.NATIVE_ETH,wrappedAsset:s(n,a)}]]),l=new Map([[e.AvalancheChainIds.FUJI,{chain:e.AVALANCHE_FUJI_CHAIN,wrappedTokenAddress:r,nativeAsset:e.NATIVE_AVAX,wrappedAsset:o(r,`https://images.ctfassets.net/gcj8jwzm6086/55f2e7e7-d9df-4827-ba2f-44f8ea357457/be31ef169362713370499782332df33d/43113-0xd00ae08403B9bbb9124bB305C09058E32C39A48c.png`)}],[e.EthereumChainIds.SEPOLIA,{chain:e.ETHEREUM_SEPOLIA_CHAIN,wrappedTokenAddress:i,nativeAsset:e.NATIVE_ETH,wrappedAsset:s(i,a)}]]);function u(t){return t===e.Environment.TEST?l:c}exports.WRAP_UNWRAP_QUOTE_TTL_SECONDS=3600,exports.getChainConfigs=u;
|
|
2
2
|
//# sourceMappingURL=constants.cjs.map
|
|
@@ -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";
|
|
@@ -32,6 +32,11 @@ interface GasSettings {
|
|
|
32
32
|
}
|
|
33
33
|
/** Transfer execution input. */
|
|
34
34
|
interface TransferAssetProps {
|
|
35
|
+
/**
|
|
36
|
+
* If true, transfer execution falls back to the legacy non-batch path when `evmSigner.signBatch` fails.
|
|
37
|
+
* If false or omitted, a batch failure is thrown.
|
|
38
|
+
*/
|
|
39
|
+
readonly fallbackToDefaultOnBatchFailure?: boolean;
|
|
35
40
|
readonly quote: Quote;
|
|
36
41
|
readonly gasSettings?: GasSettings;
|
|
37
42
|
readonly onStepChange?: (step: TransferStepDetails) => void;
|
|
@@ -150,6 +155,11 @@ interface EstimateNativeFeeOptions {
|
|
|
150
155
|
maxPriorityFeePerGas?: bigint;
|
|
151
156
|
}>;
|
|
152
157
|
}
|
|
158
|
+
interface GetBridgeableAssetsProps {
|
|
159
|
+
readonly sourceAsset: Asset;
|
|
160
|
+
readonly sourceChainId: Caip2ChainId;
|
|
161
|
+
readonly targetChainId: Caip2ChainId;
|
|
162
|
+
}
|
|
153
163
|
/**
|
|
154
164
|
* Mapping of services supported chains, and their corresponding supported destination chains.
|
|
155
165
|
*/
|
|
@@ -188,6 +198,8 @@ interface TransferService {
|
|
|
188
198
|
cancel: () => void;
|
|
189
199
|
result: Promise<Transfer>;
|
|
190
200
|
};
|
|
201
|
+
/** Return assets receivable on targetChainId for the given source, via this service. */
|
|
202
|
+
getBridgeableAssets(props: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]>;
|
|
191
203
|
/** Execute the quote, emitting `onStepChange` for signature steps. */
|
|
192
204
|
transferAsset(props: TransferAssetProps): Promise<Transfer>;
|
|
193
205
|
/** Concrete discriminator for this service. */
|
|
@@ -218,8 +230,14 @@ type MarkrServiceInitializer = {
|
|
|
218
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.
|
|
219
231
|
*/
|
|
220
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[]>;
|
|
221
239
|
};
|
|
222
240
|
type ServiceInitializer = EvmServiceInitializer | LombardServiceInitializer | MarkrServiceInitializer;
|
|
223
241
|
//#endregion
|
|
224
|
-
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 };
|
|
225
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";
|
|
@@ -32,6 +32,11 @@ interface GasSettings {
|
|
|
32
32
|
}
|
|
33
33
|
/** Transfer execution input. */
|
|
34
34
|
interface TransferAssetProps {
|
|
35
|
+
/**
|
|
36
|
+
* If true, transfer execution falls back to the legacy non-batch path when `evmSigner.signBatch` fails.
|
|
37
|
+
* If false or omitted, a batch failure is thrown.
|
|
38
|
+
*/
|
|
39
|
+
readonly fallbackToDefaultOnBatchFailure?: boolean;
|
|
35
40
|
readonly quote: Quote;
|
|
36
41
|
readonly gasSettings?: GasSettings;
|
|
37
42
|
readonly onStepChange?: (step: TransferStepDetails) => void;
|
|
@@ -150,6 +155,11 @@ interface EstimateNativeFeeOptions {
|
|
|
150
155
|
maxPriorityFeePerGas?: bigint;
|
|
151
156
|
}>;
|
|
152
157
|
}
|
|
158
|
+
interface GetBridgeableAssetsProps {
|
|
159
|
+
readonly sourceAsset: Asset;
|
|
160
|
+
readonly sourceChainId: Caip2ChainId;
|
|
161
|
+
readonly targetChainId: Caip2ChainId;
|
|
162
|
+
}
|
|
153
163
|
/**
|
|
154
164
|
* Mapping of services supported chains, and their corresponding supported destination chains.
|
|
155
165
|
*/
|
|
@@ -188,6 +198,8 @@ interface TransferService {
|
|
|
188
198
|
cancel: () => void;
|
|
189
199
|
result: Promise<Transfer>;
|
|
190
200
|
};
|
|
201
|
+
/** Return assets receivable on targetChainId for the given source, via this service. */
|
|
202
|
+
getBridgeableAssets(props: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]>;
|
|
191
203
|
/** Execute the quote, emitting `onStepChange` for signature steps. */
|
|
192
204
|
transferAsset(props: TransferAssetProps): Promise<Transfer>;
|
|
193
205
|
/** Concrete discriminator for this service. */
|
|
@@ -218,8 +230,14 @@ type MarkrServiceInitializer = {
|
|
|
218
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.
|
|
219
231
|
*/
|
|
220
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[]>;
|
|
221
239
|
};
|
|
222
240
|
type ServiceInitializer = EvmServiceInitializer | LombardServiceInitializer | MarkrServiceInitializer;
|
|
223
241
|
//#endregion
|
|
224
|
-
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 };
|
|
225
243
|
//# sourceMappingURL=service.d.ts.map
|