@avalabs/fusion-sdk 0.16.0 → 0.18.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.d.cts +34 -2
- package/dist/constants.d.ts +34 -2
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +6 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/mod.cjs +1 -1
- package/dist/mod.d.cts +8 -6
- package/dist/mod.d.ts +8 -6
- package/dist/mod.js +1 -1
- package/dist/transfer-manager.cjs +1 -1
- package/dist/transfer-manager.cjs.map +1 -1
- package/dist/transfer-manager.js +1 -1
- package/dist/transfer-manager.js.map +1 -1
- package/dist/transfer-service/_evm-gas.cjs +1 -1
- package/dist/transfer-service/_evm-gas.js +1 -1
- package/dist/transfer-service/_utils.cjs +1 -1
- package/dist/transfer-service/_utils.cjs.map +1 -1
- package/dist/transfer-service/_utils.js +1 -1
- package/dist/transfer-service/_utils.js.map +1 -1
- package/dist/transfer-service/avalanche-cct/_handlers/analyze-support.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/analyze-support.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/analyze-support.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/analyze-support.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/estimate-native-fee.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/estimate-native-fee.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/estimate-native-fee.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/estimate-native-fee.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-bridgeable-assets.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-bridgeable-assets.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-bridgeable-assets.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-bridgeable-assets.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-minimum-transfer-amount.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-minimum-transfer-amount.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-minimum-transfer-amount.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-supported-chains.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-supported-chains.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-supported-chains.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/get-supported-chains.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/stream-quotes.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/stream-quotes.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/stream-quotes.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/stream-quotes.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/track-transfer.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/track-transfer.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/track-transfer.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/track-transfer.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.js +2 -0
- package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_type-guards.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_type-guards.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_type-guards.js +2 -0
- package/dist/transfer-service/avalanche-cct/_type-guards.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/addresses.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/addresses.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/addresses.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/addresses.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/fees.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/fees.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/fees.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/fees.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/p-chain.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/p-chain.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/p-chain.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/p-chain.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/polling.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/polling.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/polling.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/polling.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/transactions.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/transactions.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils/transactions.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils/transactions.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/_utils.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/_utils.js +2 -0
- package/dist/transfer-service/avalanche-cct/_utils.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/avalanche-cct-service.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/avalanche-cct-service.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/avalanche-cct-service.js +2 -0
- package/dist/transfer-service/avalanche-cct/avalanche-cct-service.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/constants.cjs +2 -0
- package/dist/transfer-service/avalanche-cct/constants.cjs.map +1 -0
- package/dist/transfer-service/avalanche-cct/constants.js +2 -0
- package/dist/transfer-service/avalanche-cct/constants.js.map +1 -0
- package/dist/transfer-service/avalanche-cct/types.d.cts +33 -0
- package/dist/transfer-service/avalanche-cct/types.d.ts +33 -0
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.js +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/wrap.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/wrap.js +1 -1
- package/dist/transfer-service/fetch-utilities.cjs +1 -1
- package/dist/transfer-service/fetch-utilities.cjs.map +1 -1
- package/dist/transfer-service/fetch-utilities.js +1 -1
- package/dist/transfer-service/fetch-utilities.js.map +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.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/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 +1 -1
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/markr/_handlers/transfer-asset-hyperliquid-withdraw.cjs +2 -0
- package/dist/transfer-service/markr/_handlers/transfer-asset-hyperliquid-withdraw.cjs.map +1 -0
- package/dist/transfer-service/markr/_handlers/transfer-asset-hyperliquid-withdraw.js +2 -0
- package/dist/transfer-service/markr/_handlers/transfer-asset-hyperliquid-withdraw.js.map +1 -0
- 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/_hyperliquid-eip712.cjs +2 -0
- package/dist/transfer-service/markr/_hyperliquid-eip712.cjs.map +1 -0
- package/dist/transfer-service/markr/_hyperliquid-eip712.js +2 -0
- package/dist/transfer-service/markr/_hyperliquid-eip712.js.map +1 -0
- package/dist/transfer-service/markr/_hyperliquid-schema.cjs +2 -0
- package/dist/transfer-service/markr/_hyperliquid-schema.cjs.map +1 -0
- package/dist/transfer-service/markr/_hyperliquid-schema.js +2 -0
- package/dist/transfer-service/markr/_hyperliquid-schema.js.map +1 -0
- package/dist/transfer-service/markr/_hyperliquid.cjs +2 -0
- package/dist/transfer-service/markr/_hyperliquid.cjs.map +1 -0
- package/dist/transfer-service/markr/_hyperliquid.js +2 -0
- package/dist/transfer-service/markr/_hyperliquid.js.map +1 -0
- package/dist/transfer-service/markr/_schema.cjs +1 -1
- package/dist/transfer-service/markr/_schema.cjs.map +1 -1
- package/dist/transfer-service/markr/_schema.js +1 -1
- package/dist/transfer-service/markr/_schema.js.map +1 -1
- package/dist/transfer-service/markr/_type-guards.cjs +1 -1
- package/dist/transfer-service/markr/_type-guards.cjs.map +1 -1
- package/dist/transfer-service/markr/_type-guards.js +1 -1
- package/dist/transfer-service/markr/_type-guards.js.map +1 -1
- package/dist/transfer-service/markr/markr-service.cjs.map +1 -1
- package/dist/transfer-service/markr/markr-service.js.map +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs.map +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js.map +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs +1 -1
- package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js +1 -1
- package/dist/types/asset.d.cts +18 -2
- package/dist/types/asset.d.ts +18 -2
- package/dist/types/service.d.cts +106 -7
- package/dist/types/service.d.ts +106 -7
- package/dist/types/signer.d.cts +37 -1
- package/dist/types/signer.d.ts +37 -1
- package/dist/types/transfer-manager.d.cts +19 -10
- package/dist/types/transfer-manager.d.ts +19 -10
- package/dist/types/utility-types.d.cts +8 -1
- package/dist/types/utility-types.d.ts +8 -1
- package/dist/utils/asset-id.cjs +1 -1
- package/dist/utils/asset-id.cjs.map +1 -1
- package/dist/utils/asset-id.js +1 -1
- package/dist/utils/asset-id.js.map +1 -1
- package/dist/utils/bridgeable-assets.cjs +2 -0
- package/dist/utils/bridgeable-assets.cjs.map +1 -0
- package/dist/utils/bridgeable-assets.d.cts +16 -0
- package/dist/utils/bridgeable-assets.d.ts +16 -0
- package/dist/utils/bridgeable-assets.js +2 -0
- package/dist/utils/bridgeable-assets.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/fees.ts"],"sourcesContent":["import { Common, type Context } from '@avalabs/avalanchejs';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { InvalidParamsError } from '../../../errors';\nimport { fetchSuggestedGasPrices } from '../../_evm-gas';\nimport { applyFeeUnitsBpsMargin } from '../../_utils';\nimport { getEvmClientForChain } from '../../_utils';\nimport { WEI_PER_NANO_AVAX_BIGINT } from '../constants';\nimport { getFeeState } from './p-chain';\n\n/**\n * C-chain atomic export txs always have exactly 1 EVM input + 1 transferable output\n * with fixed-width serialized fields, so the gas cost is constant.\n *\n * Verified empirically against avalanchejs costCorethTx() across varying amounts,\n * nonces, base fees, destination chains, and addresses.\n *\n * The hardcoded byte-size estimate (estimateCChainImportGas) gives 11228 — 2 gas\n * less than the real serialized size. We keep it for import estimation (where input\n * count can vary) but use the exact constant for exports.\n */\nconst C_CHAIN_EXPORT_GAS = 11230n;\n\nconst C_CHAIN_ATOMIC_TX_COST = 10_000n; // in gas\nconst C_CHAIN_SIGNATURE_COST = 1000n; // in gas\nconst C_CHAIN_BASE_TX_SIZE = 78n; // in bytes\nconst C_CHAIN_SINGLE_OWNER_INPUT_SIZE = 90n; // in bytes\nconst C_CHAIN_OUTPUT_SIZE = 60n; // in bytes\nconst C_CHAIN_NUMBER_OUTPUTS = 1n; // C chain imports consolidate inputs to one output\n\nfunction assertPositiveInteger(value: number, name: string): asserts value is number {\n if (!Number.isInteger(value) || value <= 0) {\n throw new InvalidParamsError(`Expected a positive integer greater than 0 for ${name}, but received: ${value}`);\n }\n}\n\n/**\n * Estimates gas for C-chain atomic import txs where the number of inputs can vary.\n * For exports, use the exact C_CHAIN_EXPORT_GAS constant instead.\n */\nexport function estimateCChainImportGas(numberInputs = 1, numberSignatures = 1): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n assertPositiveInteger(numberSignatures, 'numberSignatures');\n\n const baseSize =\n C_CHAIN_BASE_TX_SIZE +\n BigInt(numberInputs) * C_CHAIN_SINGLE_OWNER_INPUT_SIZE +\n C_CHAIN_NUMBER_OUTPUTS * C_CHAIN_OUTPUT_SIZE;\n return baseSize + BigInt(numberSignatures) * C_CHAIN_SIGNATURE_COST + C_CHAIN_ATOMIC_TX_COST;\n}\n\nexport function estimatePChainExportGas(numberInputs: number, weights: Common.Dimensions): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n\n return Common.dimensionsToGas(\n Common.createDimensions({\n bandwidth: 161 * numberInputs + 254,\n dbRead: numberInputs,\n dbWrite: 2 + numberInputs,\n compute: 200 * numberInputs,\n }),\n weights,\n );\n}\n\nexport function estimatePChainImportGas(numberInputs: number, weights: Common.Dimensions): bigint {\n assertPositiveInteger(numberInputs, 'numberInputs');\n\n return Common.dimensionsToGas(\n Common.createDimensions({\n bandwidth: 161 * numberInputs + 174,\n dbRead: numberInputs,\n dbWrite: 1 + numberInputs,\n compute: 200 * numberInputs,\n }),\n weights,\n );\n}\n\n/**\n * Derives CChainBaseFee from a maxFeePerGas value (in wei).\n *\n * Applies a fee units margin in basis points to buffer against base fee increases between\n * estimation and submission, then truncates to a nAVAX boundary so the fee estimation and the\n * transaction builder operate on the same integer.\n *\n * Minimum is 1 nAVAX.\n */\nexport function toCChainBaseFee(maxFeePerGas: bigint, feeUnitsMarginBps: number | undefined): bigint {\n const bufferedWei = applyFeeUnitsBpsMargin(maxFeePerGas, feeUnitsMarginBps);\n\n // Ceil to nAVAX so the fee is never underestimated\n const bufferedBaseFeeNAvax = (bufferedWei + WEI_PER_NANO_AVAX_BIGINT - 1n) / WEI_PER_NANO_AVAX_BIGINT;\n\n if (bufferedBaseFeeNAvax <= 0n) {\n return 1n;\n }\n\n return bufferedBaseFeeNAvax;\n}\n\nexport async function getCChainBaseFeeInNanoAvax(environment: Environment): Promise<bigint> {\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const maxFeePerGas = (await fetchSuggestedGasPrices(cChainClient)).fast.maxFeePerGas;\n\n return toCChainBaseFee(maxFeePerGas, undefined);\n}\n\nexport function getCChainExportFeeInNanoAvax({\n feeUnitsMarginBps,\n maxFeePerGas,\n}: {\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n}): bigint {\n const baseFee = toCChainBaseFee(maxFeePerGas, feeUnitsMarginBps);\n\n return baseFee * C_CHAIN_EXPORT_GAS;\n}\n\nexport function getCChainImportFeeInNanoAvax({\n feeUnitsMarginBps,\n maxFeePerGas,\n numberInputs,\n numberSignatures,\n}: {\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n numberSignatures: number;\n}): bigint {\n const baseFee = toCChainBaseFee(maxFeePerGas, feeUnitsMarginBps);\n\n return baseFee * estimateCChainImportGas(numberInputs, numberSignatures);\n}\n\nexport async function getPChainExportFeeInNanoAvax({\n context,\n environment,\n numberInputs,\n}: {\n context: Context.Context;\n environment: Environment;\n numberInputs: number;\n}): Promise<bigint> {\n const feeState = await getFeeState(environment);\n const { price } = feeState;\n\n return price * estimatePChainExportGas(numberInputs, context.platformFeeConfig.weights);\n}\n\nexport async function getPChainImportFeeInNanoAvax({\n context,\n environment,\n numberInputs,\n}: {\n context: Context.Context;\n environment: Environment;\n numberInputs: number;\n}): Promise<bigint> {\n const feeState = await getFeeState(environment);\n const { price } = feeState;\n\n return price * estimatePChainImportGas(numberInputs, context.platformFeeConfig.weights);\n}\n\nexport function getXChainExportFeeInNanoAvax({ context }: { context: Context.Context }): bigint {\n return context.baseTxFee;\n}\n\nexport function getXChainImportFeeInNanoAvax({ context }: { context: Context.Context }): bigint {\n return context.baseTxFee;\n}\n\nexport async function getExportFeeInNanoAvax(\n chainAlias: AvalancheBlockchainAlias,\n params: {\n context: Context.Context;\n environment: Environment;\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n },\n): Promise<bigint> {\n const { context, environment, feeUnitsMarginBps, maxFeePerGas, numberInputs } = params;\n\n switch (chainAlias) {\n case 'C': {\n return getCChainExportFeeInNanoAvax({ feeUnitsMarginBps, maxFeePerGas });\n }\n\n case 'P': {\n return await getPChainExportFeeInNanoAvax({ context, environment, numberInputs });\n }\n\n case 'X': {\n return getXChainExportFeeInNanoAvax({ context });\n }\n\n default:\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n}\n\nexport async function getImportFeeInNanoAvax(\n chainAlias: AvalancheBlockchainAlias,\n params: {\n context: Context.Context;\n environment: Environment;\n feeUnitsMarginBps: number | undefined;\n maxFeePerGas: bigint;\n numberInputs: number;\n numberSignatures: number;\n },\n): Promise<bigint> {\n const { context, environment, feeUnitsMarginBps, maxFeePerGas, numberInputs, numberSignatures } = params;\n\n switch (chainAlias) {\n case 'C': {\n return getCChainImportFeeInNanoAvax({ feeUnitsMarginBps, maxFeePerGas, numberInputs, numberSignatures });\n }\n\n case 'P': {\n return await getPChainImportFeeInNanoAvax({ context, environment, numberInputs });\n }\n\n case 'X': {\n return getXChainImportFeeInNanoAvax({ context });\n }\n\n default:\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n}\n"],"mappings":"scAkCA,SAAS,EAAsB,EAAe,EAAuC,CACnF,GAAI,CAAC,OAAO,UAAU,EAAM,EAAI,GAAS,EACvC,MAAM,IAAI,EAAmB,kDAAkD,EAAK,kBAAkB,IAAQ,CAQlH,SAAgB,EAAwB,EAAe,EAAG,EAAmB,EAAW,CAQtF,OAPA,EAAsB,EAAc,eAAe,CACnD,EAAsB,EAAkB,mBAAmB,CAGzD,IACA,OAAO,EAAa,CAAG,IACvB,GAAyB,IACT,OAAO,EAAiB,CAAG,MAAyB,OAGxE,SAAgB,EAAwB,EAAsB,EAAoC,CAGhG,OAFA,EAAsB,EAAc,eAAe,CAE5C,EAAO,gBACZ,EAAO,iBAAiB,CACtB,UAAW,IAAM,EAAe,IAChC,OAAQ,EACR,QAAS,EAAI,EACb,QAAS,IAAM,EAChB,CAAC,CACF,EACD,CAGH,SAAgB,EAAwB,EAAsB,EAAoC,CAGhG,OAFA,EAAsB,EAAc,eAAe,CAE5C,EAAO,gBACZ,EAAO,iBAAiB,CACtB,UAAW,IAAM,EAAe,IAChC,OAAQ,EACR,QAAS,EAAI,EACb,QAAS,IAAM,EAChB,CAAC,CACF,EACD,CAYH,SAAgB,EAAgB,EAAsB,EAA+C,CAInG,IAAM,GAHc,EAAuB,EAAc,EAAkB,CAG/B,EAA2B,IAAM,EAM7E,OAJI,GAAwB,GACnB,GAGF,EAGT,eAAsB,EAA2B,EAA2C,CAG1F,IAAM,GAAgB,MAAM,EADP,EAAqB,CAAE,MAD7B,IAAgB,EAAY,KAAO,EAAuB,EACd,CAAC,CACK,EAAE,KAAK,aAExE,OAAO,EAAgB,EAAc,IAAA,GAAU,CAGjD,SAAgB,EAA6B,CAC3C,oBACA,gBAIS,CAGT,OAFgB,EAAgB,EAAc,EAAkB,CAE/C,OAGnB,SAAgB,EAA6B,CAC3C,oBACA,eACA,eACA,oBAMS,CAGT,OAFgB,EAAgB,EAAc,EAAkB,CAE/C,EAAwB,EAAc,EAAiB,CAG1E,eAAsB,EAA6B,CACjD,UACA,cACA,gBAKkB,CAElB,GAAM,CAAE,SADS,MAAM,EAAY,EAAY,CAG/C,OAAO,EAAQ,EAAwB,EAAc,EAAQ,kBAAkB,QAAQ,CAGzF,eAAsB,EAA6B,CACjD,UACA,cACA,gBAKkB,CAElB,GAAM,CAAE,SADS,MAAM,EAAY,EAAY,CAG/C,OAAO,EAAQ,EAAwB,EAAc,EAAQ,kBAAkB,QAAQ,CAGzF,SAAgB,EAA6B,CAAE,WAAiD,CAC9F,OAAO,EAAQ,UAGjB,SAAgB,EAA6B,CAAE,WAAiD,CAC9F,OAAO,EAAQ,UAGjB,eAAsB,EACpB,EACA,EAOiB,CACjB,GAAM,CAAE,UAAS,cAAa,oBAAmB,eAAc,gBAAiB,EAEhF,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAA6B,CAAE,oBAAmB,eAAc,CAAC,CAG1E,IAAK,IACH,OAAO,MAAM,EAA6B,CAAE,UAAS,cAAa,eAAc,CAAC,CAGnF,IAAK,IACH,OAAO,EAA6B,CAAE,UAAS,CAAC,CAGlD,QACE,MAAM,IAAI,EAAmB,4BAA4B,IAAa,EAI5E,eAAsB,EACpB,EACA,EAQiB,CACjB,GAAM,CAAE,UAAS,cAAa,oBAAmB,eAAc,eAAc,oBAAqB,EAElG,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAA6B,CAAE,oBAAmB,eAAc,eAAc,mBAAkB,CAAC,CAG1G,IAAK,IACH,OAAO,MAAM,EAA6B,CAAE,UAAS,cAAa,eAAc,CAAC,CAGnF,IAAK,IACH,OAAO,EAA6B,CAAE,UAAS,CAAC,CAGlD,QACE,MAAM,IAAI,EAAmB,4BAA4B,IAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-chain.cjs","names":["pvm","getAvalancheApiUrl"],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/p-chain.ts"],"sourcesContent":["import { pvm, utils } from '@avalabs/avalanchejs';\nimport { Environment } from '../../../constants';\nimport type { XpAddress } from '../types';\nimport { getAvalancheApiUrl } from '../_utils';\n\nexport async function getFeeState(environment: Environment): Promise<pvm.FeeState> {\n const pvmApi = new pvm.PVMApi(getAvalancheApiUrl(environment));\n\n const feeState = await pvmApi.getFeeState();\n\n return feeState;\n}\n\nexport function getXpAddressBytes(address: XpAddress): Uint8Array {\n const [, addressBytes] = utils.parseBech32(address);\n\n return addressBytes;\n}\n"],"mappings":"0HAKA,eAAsB,EAAY,EAAiD,CAKjF,OAFiB,MAFF,IAAIA,EAAAA,IAAI,OAAOC,EAAAA,mBAAmB,EAAY,CAAC,CAEhC,aAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-chain.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/p-chain.ts"],"sourcesContent":["import { pvm, utils } from '@avalabs/avalanchejs';\nimport { Environment } from '../../../constants';\nimport type { XpAddress } from '../types';\nimport { getAvalancheApiUrl } from '../_utils';\n\nexport async function getFeeState(environment: Environment): Promise<pvm.FeeState> {\n const pvmApi = new pvm.PVMApi(getAvalancheApiUrl(environment));\n\n const feeState = await pvmApi.getFeeState();\n\n return feeState;\n}\n\nexport function getXpAddressBytes(address: XpAddress): Uint8Array {\n const [, addressBytes] = utils.parseBech32(address);\n\n return addressBytes;\n}\n"],"mappings":"6FAKA,eAAsB,EAAY,EAAiD,CAKjF,OAFiB,MAFF,IAAI,EAAI,OAAO,EAAmB,EAAY,CAAC,CAEhC,aAAa"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../../errors.cjs`),t=require(`../_utils.cjs`),n=require(`../../_utils.cjs`);function r(n,r){switch(r){case`C`:return e=>t.getAvalancheProvider(n,r).getAtomicTxStatus(e);case`P`:return e=>t.getAvalancheProvider(n,r).getTxStatus({txID:e});case`X`:return e=>t.getAvalancheProvider(n,r).getTxStatus({txID:e});default:throw new e.InvalidParamsError(`Unsupported chain alias: ${r}`,`Can not get transaction status function for unsupported chain alias.`)}}async function i({chainAlias:t,count:a=13,environment:o,signal:s,txId:c}){if(a<0)return!1;try{let{status:e}=await r(o,t)(c);switch(e){case`Accepted`:case`Committed`:return!0;case`Dropped`:case`Rejected`:return!1;default:break}return await n.wait(1500*1.2**(13-a),s),await i({chainAlias:t,count:a-1,environment:o,signal:s,txId:c})}catch(t){throw new e.SdkError(`Failed to poll transaction status from Avalanche.`,e.ErrorCode.UNKNOWN,{cause:t})}}exports.pollPrimaryNetworkTxStatus=i;
|
|
2
|
+
//# sourceMappingURL=polling.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling.cjs","names":["getAvalancheProvider","InvalidParamsError","wait","SdkError","ErrorCode"],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/polling.ts"],"sourcesContent":["import type { evm, pvm } from '@avalabs/avalanchejs';\nimport type { AvalancheBlockchainAlias, Environment } from '../../../constants';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../../errors';\nimport { wait } from '../../_utils';\nimport { getAvalancheProvider } from '../_utils';\n\nconst POLL_START_COUNT = 13;\nconst BASE_WAIT_PERIOD_MS = 1500;\nconst MULTIPLIER = 1.2;\n\nexport type GetTxStatusFunction<T extends evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse> = (\n txId: string,\n) => Promise<T>;\n\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'C',\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'P',\n): GetTxStatusFunction<pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'X',\n): GetTxStatusFunction<pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse> {\n switch (chainAlias) {\n case 'C': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getAtomicTxStatus(txId);\n }\n case 'P': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getTxStatus({ txID: txId });\n }\n case 'X': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getTxStatus({ txID: txId });\n }\n default: {\n throw new InvalidParamsError(\n `Unsupported chain alias: ${chainAlias}`,\n 'Can not get transaction status function for unsupported chain alias.',\n );\n }\n }\n}\n\nexport async function pollPrimaryNetworkTxStatus({\n chainAlias,\n count = POLL_START_COUNT,\n environment,\n signal,\n txId,\n}: {\n chainAlias: AvalancheBlockchainAlias;\n count?: number;\n environment: Environment;\n signal?: AbortSignal;\n txId: string;\n}): Promise<boolean> {\n if (count < 0) {\n return false;\n }\n\n try {\n const pollFunction = getChainAliasTxStatusFunction(environment, chainAlias);\n\n const { status } = await pollFunction(txId);\n\n switch (status) {\n case 'Accepted':\n case 'Committed': {\n return true;\n }\n\n case 'Dropped':\n case 'Rejected': {\n return false;\n }\n\n default: {\n // Fall through to retry logic.\n break;\n }\n }\n\n const failures = POLL_START_COUNT - count;\n\n const waitPeriod = BASE_WAIT_PERIOD_MS * MULTIPLIER ** failures;\n\n await wait(waitPeriod, signal);\n\n return await pollPrimaryNetworkTxStatus({ chainAlias, count: count - 1, environment, signal, txId });\n } catch (error) {\n throw new SdkError('Failed to poll transaction status from Avalanche.', ErrorCode.UNKNOWN, { cause: error });\n }\n}\n"],"mappings":"gGA8BA,SAAgB,EACd,EACA,EAC8E,CAC9E,OAAQ,EAAR,CACE,IAAK,IACH,MAAQ,IAAiBA,EAAAA,qBAAqB,EAAa,EAAW,CAAC,kBAAkB,EAAK,CAEhG,IAAK,IACH,MAAQ,IAAiBA,EAAAA,qBAAqB,EAAa,EAAW,CAAC,YAAY,CAAE,KAAM,EAAM,CAAC,CAEpG,IAAK,IACH,MAAQ,IAAiBA,EAAAA,qBAAqB,EAAa,EAAW,CAAC,YAAY,CAAE,KAAM,EAAM,CAAC,CAEpG,QACE,MAAM,IAAIC,EAAAA,mBACR,4BAA4B,IAC5B,uEACD,EAKP,eAAsB,EAA2B,CAC/C,aACA,QAAQ,GACR,cACA,SACA,QAOmB,CACnB,GAAI,EAAQ,EACV,MAAO,GAGT,GAAI,CAGF,GAAM,CAAE,UAAW,MAFE,EAA8B,EAAa,EAAW,CAErC,EAAK,CAE3C,OAAQ,EAAR,CACE,IAAK,WACL,IAAK,YACH,MAAO,GAGT,IAAK,UACL,IAAK,WACH,MAAO,GAGT,QAEE,MAUJ,OAFA,MAAMC,EAAAA,KAFa,KAAsB,MAFxB,GAAmB,GAIb,EAAO,CAEvB,MAAM,EAA2B,CAAE,aAAY,MAAO,EAAQ,EAAG,cAAa,SAAQ,OAAM,CAAC,OAC7F,EAAO,CACd,MAAM,IAAIC,EAAAA,SAAS,oDAAqDC,EAAAA,UAAU,QAAS,CAAE,MAAO,EAAO,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e,InvalidParamsError as t,SdkError as n}from"../../../errors.js";import{getAvalancheProvider as r}from"../_utils.js";import{wait as i}from"../../_utils.js";function a(e,n){switch(n){case`C`:return t=>r(e,n).getAtomicTxStatus(t);case`P`:return t=>r(e,n).getTxStatus({txID:t});case`X`:return t=>r(e,n).getTxStatus({txID:t});default:throw new t(`Unsupported chain alias: ${n}`,`Can not get transaction status function for unsupported chain alias.`)}}async function o({chainAlias:t,count:r=13,environment:s,signal:c,txId:l}){if(r<0)return!1;try{let{status:e}=await a(s,t)(l);switch(e){case`Accepted`:case`Committed`:return!0;case`Dropped`:case`Rejected`:return!1;default:break}return await i(1500*1.2**(13-r),c),await o({chainAlias:t,count:r-1,environment:s,signal:c,txId:l})}catch(t){throw new n(`Failed to poll transaction status from Avalanche.`,e.UNKNOWN,{cause:t})}}export{o as pollPrimaryNetworkTxStatus};
|
|
2
|
+
//# sourceMappingURL=polling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/polling.ts"],"sourcesContent":["import type { evm, pvm } from '@avalabs/avalanchejs';\nimport type { AvalancheBlockchainAlias, Environment } from '../../../constants';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../../errors';\nimport { wait } from '../../_utils';\nimport { getAvalancheProvider } from '../_utils';\n\nconst POLL_START_COUNT = 13;\nconst BASE_WAIT_PERIOD_MS = 1500;\nconst MULTIPLIER = 1.2;\n\nexport type GetTxStatusFunction<T extends evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse> = (\n txId: string,\n) => Promise<T>;\n\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'C',\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'P',\n): GetTxStatusFunction<pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: 'X',\n): GetTxStatusFunction<pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse>;\nexport function getChainAliasTxStatusFunction(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): GetTxStatusFunction<evm.GetAtomicTxStatusResponse | pvm.GetTxStatusResponse> {\n switch (chainAlias) {\n case 'C': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getAtomicTxStatus(txId);\n }\n case 'P': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getTxStatus({ txID: txId });\n }\n case 'X': {\n return (txId: string) => getAvalancheProvider(environment, chainAlias).getTxStatus({ txID: txId });\n }\n default: {\n throw new InvalidParamsError(\n `Unsupported chain alias: ${chainAlias}`,\n 'Can not get transaction status function for unsupported chain alias.',\n );\n }\n }\n}\n\nexport async function pollPrimaryNetworkTxStatus({\n chainAlias,\n count = POLL_START_COUNT,\n environment,\n signal,\n txId,\n}: {\n chainAlias: AvalancheBlockchainAlias;\n count?: number;\n environment: Environment;\n signal?: AbortSignal;\n txId: string;\n}): Promise<boolean> {\n if (count < 0) {\n return false;\n }\n\n try {\n const pollFunction = getChainAliasTxStatusFunction(environment, chainAlias);\n\n const { status } = await pollFunction(txId);\n\n switch (status) {\n case 'Accepted':\n case 'Committed': {\n return true;\n }\n\n case 'Dropped':\n case 'Rejected': {\n return false;\n }\n\n default: {\n // Fall through to retry logic.\n break;\n }\n }\n\n const failures = POLL_START_COUNT - count;\n\n const waitPeriod = BASE_WAIT_PERIOD_MS * MULTIPLIER ** failures;\n\n await wait(waitPeriod, signal);\n\n return await pollPrimaryNetworkTxStatus({ chainAlias, count: count - 1, environment, signal, txId });\n } catch (error) {\n throw new SdkError('Failed to poll transaction status from Avalanche.', ErrorCode.UNKNOWN, { cause: error });\n }\n}\n"],"mappings":"gLA8BA,SAAgB,EACd,EACA,EAC8E,CAC9E,OAAQ,EAAR,CACE,IAAK,IACH,MAAQ,IAAiB,EAAqB,EAAa,EAAW,CAAC,kBAAkB,EAAK,CAEhG,IAAK,IACH,MAAQ,IAAiB,EAAqB,EAAa,EAAW,CAAC,YAAY,CAAE,KAAM,EAAM,CAAC,CAEpG,IAAK,IACH,MAAQ,IAAiB,EAAqB,EAAa,EAAW,CAAC,YAAY,CAAE,KAAM,EAAM,CAAC,CAEpG,QACE,MAAM,IAAI,EACR,4BAA4B,IAC5B,uEACD,EAKP,eAAsB,EAA2B,CAC/C,aACA,QAAQ,GACR,cACA,SACA,QAOmB,CACnB,GAAI,EAAQ,EACV,MAAO,GAGT,GAAI,CAGF,GAAM,CAAE,UAAW,MAFE,EAA8B,EAAa,EAAW,CAErC,EAAK,CAE3C,OAAQ,EAAR,CACE,IAAK,WACL,IAAK,YACH,MAAO,GAGT,IAAK,UACL,IAAK,WACH,MAAO,GAGT,QAEE,MAUJ,OAFA,MAAM,EAFa,KAAsB,MAFxB,GAAmB,GAIb,EAAO,CAEvB,MAAM,EAA2B,CAAE,aAAY,MAAO,EAAQ,EAAG,cAAa,SAAQ,OAAM,CAAC,OAC7F,EAAO,CACd,MAAM,IAAI,EAAS,oDAAqD,EAAU,QAAS,CAAE,MAAO,EAAO,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../_utils.cjs`);let t=require(`@avalabs/avalanchejs`);function n({amountInNanoAvax:n,baseFeeInNanoAvax:r,context:i,destinationChainAlias:a,fromAddress:o,nonce:s,toAddress:c}){let l=e.getChainIdFromContext(a,i),u=t.utils.hexToBuffer(o),[,,d]=t.utils.parse(c);return t.evm.newExportTxFromBaseFee(i,r,n,l,u,[d],s)}function r({amountInNanoAvax:n,changeAddress:r,context:i,destinationChainAlias:a,feeState:o,fromAddresses:s,toAddress:c,utxos:l}){let u=e.getChainIdFromContext(a,i),[,,d]=t.utils.parse(c),[,,f]=t.utils.parse(r),p=e.getAddressesAsBuffers(s),m=t.TransferableOutput.fromNative(i.avaxAssetID,n,[d]),h=e.sortUTXOsByAmount(l,!0);return t.pvm.newExportTx({changeAddressesBytes:[f],destinationChainId:u,feeState:o,fromAddressesBytes:p,outputs:[m],utxos:h},i)}function i({amountInNanoAvax:n,changeAddress:r,context:i,destinationChainAlias:a,fromAddresses:o,toAddress:s,utxos:c}){let l=e.getChainIdFromContext(a,i),[,,u]=t.utils.parse(s),[,,d]=t.utils.parse(r),f=e.getAddressesAsBuffers(o),p=t.TransferableOutput.fromNative(i.avaxAssetID,n,[u]),m=e.sortUTXOsByAmount(c,!0);return t.avm.newExportTx(i,l,f,m,[p],{threshold:1,changeAddresses:[d]})}function a(e){switch(e.sourceChainAlias){case`C`:return n(e);case`P`:return r(e);case`X`:return i(e)}}function o({atomicUtxos:n,baseFeeInNanoAvax:r,context:i,fromAddresses:a,sourceChainAlias:o,toAddress:s}){let c=e.getChainIdFromContext(o,i),l=e.getAddressesAsBuffers(a),u=t.utils.hexToBuffer(s);return t.evm.newImportTxFromBaseFee(i,u,l,n,c,r)}function s({atomicUtxos:n,context:r,feeState:i,fromAddresses:a,sourceChainAlias:o,toAddress:s}){let c=e.getChainIdFromContext(o,r),l=e.getAddressesAsBuffers(a),[,,u]=t.utils.parse(s);return t.pvm.newImportTx({fromAddressesBytes:l,feeState:i,sourceChainId:c,toAddressesBytes:[u],utxos:n},r)}function c({atomicUtxos:n,changeAddress:r,context:i,fromAddresses:a,sourceChainAlias:o,toAddress:s}){let c=e.getChainIdFromContext(o,i),l=e.getAddressesAsBuffers(a),[,,u]=t.utils.parse(r),[,,d]=t.utils.parse(s);return t.avm.newImportTx(i,c,n,[d],l,{changeAddresses:[u]})}function l(e){switch(e.destinationChainAlias){case`C`:return o(e);case`P`:return s(e);case`X`:return c(e)}}exports.exportTx=a,exports.importTx=l;
|
|
2
|
+
//# sourceMappingURL=transactions.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.cjs","names":["getChainIdFromContext","utils","evm","getAddressesAsBuffers","TransferableOutput","sortUTXOsByAmount","pvm","avm"],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/transactions.ts"],"sourcesContent":["import {\n avm,\n evm,\n pvm,\n TransferableOutput,\n utils,\n type Context,\n type UnsignedTx,\n type Utxo,\n} from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport type { AvalancheBlockchainAlias } from '../../../constants';\nimport type { XpAddress } from '../types';\nimport { getAddressesAsBuffers, getChainIdFromContext, sortUTXOsByAmount } from '../_utils';\n\ninterface BaseExportTxParams<Alias extends AvalancheBlockchainAlias> {\n amountInNanoAvax: bigint;\n context: Context.Context;\n sourceChainAlias: Alias;\n destinationChainAlias: Exclude<AvalancheBlockchainAlias, Alias>;\n /**\n * The bech32 formatted address of the recipient on the destination chain.\n *\n * Do not use the EVM hex formatted address here for C-Chain. Use the Coreth bech32 formatted address.\n */\n toAddress: XpAddress;\n}\n\nexport interface ExportCChainTxParams extends BaseExportTxParams<'C'> {\n baseFeeInNanoAvax: bigint;\n fromAddress: EvmAddress;\n nonce: bigint;\n}\n\nfunction exportCChainTx({\n amountInNanoAvax,\n baseFeeInNanoAvax,\n context,\n destinationChainAlias,\n fromAddress,\n nonce,\n toAddress,\n}: ExportCChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const fromAddressBuffer = utils.hexToBuffer(fromAddress);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return evm.newExportTxFromBaseFee(\n context,\n baseFeeInNanoAvax,\n amountInNanoAvax,\n destinationChainId,\n fromAddressBuffer,\n [toAddressBytes],\n nonce,\n );\n}\n\nexport interface ExportPChainTxParams extends BaseExportTxParams<'P'> {\n /** P-Chain change address. */\n changeAddress: XpAddress;\n feeState: pvm.FeeState;\n /** List of P-Chain bech32 addresses from user's wallet. */\n fromAddresses: XpAddress[];\n utxos: Utxo[];\n}\n\nfunction exportPChainTx({\n amountInNanoAvax,\n changeAddress,\n context,\n destinationChainAlias,\n feeState,\n fromAddresses,\n toAddress,\n utxos,\n}: ExportPChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const output = TransferableOutput.fromNative(context.avaxAssetID, amountInNanoAvax, [toAddressBytes]);\n const sortedUtxos = sortUTXOsByAmount(utxos, true);\n\n return pvm.newExportTx(\n {\n changeAddressesBytes: [changeAddressBytes],\n destinationChainId,\n feeState,\n fromAddressesBytes,\n outputs: [output],\n utxos: sortedUtxos,\n },\n context,\n );\n}\n\nexport interface ExportXChainTxParams extends BaseExportTxParams<'X'> {\n /** X-Chain change address. */\n changeAddress: XpAddress;\n /** List of X-Chain bech32 addresses from user's wallet. */\n fromAddresses: XpAddress[];\n utxos: Utxo[];\n}\n\nfunction exportXChainTx({\n amountInNanoAvax,\n changeAddress,\n context,\n destinationChainAlias,\n fromAddresses,\n toAddress,\n utxos,\n}: ExportXChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const output = TransferableOutput.fromNative(context.avaxAssetID, amountInNanoAvax, [toAddressBytes]);\n const sortedUtxos = sortUTXOsByAmount(utxos, true);\n\n return avm.newExportTx(context, destinationChainId, fromAddressesBytes, sortedUtxos, [output], {\n threshold: 1,\n changeAddresses: [changeAddressBytes],\n });\n}\n\nexport type ExportTxParams = ExportCChainTxParams | ExportPChainTxParams | ExportXChainTxParams;\n\nexport function exportTx(params: ExportTxParams): UnsignedTx {\n switch (params.sourceChainAlias) {\n case 'C': {\n return exportCChainTx(params);\n }\n\n case 'P': {\n return exportPChainTx(params);\n }\n\n case 'X': {\n return exportXChainTx(params);\n }\n }\n}\n\ninterface BaseImportTxParams<Alias extends AvalancheBlockchainAlias> {\n atomicUtxos: Utxo[];\n context: Context.Context;\n destinationChainAlias: Alias;\n fromAddresses: XpAddress[];\n sourceChainAlias: Exclude<AvalancheBlockchainAlias, Alias>;\n}\n\nexport interface ImportCChainTxParams extends BaseImportTxParams<'C'> {\n baseFeeInNanoAvax: bigint;\n toAddress: EvmAddress;\n}\n\nfunction importCChainTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportCChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const toAddressBytes = utils.hexToBuffer(toAddress);\n\n return evm.newImportTxFromBaseFee(\n context,\n toAddressBytes,\n fromAddressesBytes,\n atomicUtxos,\n sourceChainId,\n baseFeeInNanoAvax,\n );\n}\n\nexport interface ImportPChainTxParams extends BaseImportTxParams<'P'> {\n feeState: pvm.FeeState;\n toAddress: XpAddress;\n}\n\nfunction importPChainTx({\n atomicUtxos,\n context,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportPChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return pvm.newImportTx(\n {\n fromAddressesBytes,\n feeState,\n sourceChainId,\n toAddressesBytes: [toAddressBytes],\n utxos: atomicUtxos,\n },\n context,\n );\n}\n\nexport interface ImportXChainTxParams extends BaseImportTxParams<'X'> {\n changeAddress: XpAddress;\n toAddress: XpAddress;\n}\n\nfunction importXChainTx({\n atomicUtxos,\n changeAddress,\n context,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportXChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return avm.newImportTx(context, sourceChainId, atomicUtxos, [toAddressBytes], fromAddressesBytes, {\n changeAddresses: [changeAddressBytes],\n });\n}\n\nexport type ImportTxParams = ImportCChainTxParams | ImportPChainTxParams | ImportXChainTxParams;\n\nexport function importTx(params: ImportTxParams): UnsignedTx {\n switch (params.destinationChainAlias) {\n case 'C': {\n return importCChainTx(params);\n }\n\n case 'P': {\n return importPChainTx(params);\n }\n\n case 'X': {\n return importXChainTx(params);\n }\n }\n}\n"],"mappings":"0HAkCA,SAAS,EAAe,CACtB,mBACA,oBACA,UACA,wBACA,cACA,QACA,aACmC,CACnC,IAAM,EAAqBA,EAAAA,sBAAsB,EAAuB,EAAQ,CAC1E,EAAoBC,EAAAA,MAAM,YAAY,EAAY,CAClD,GAAK,GAAkBA,EAAAA,MAAM,MAAM,EAAU,CAEnD,OAAOC,EAAAA,IAAI,uBACT,EACA,EACA,EACA,EACA,EACA,CAAC,EAAe,CAChB,EACD,CAYH,SAAS,EAAe,CACtB,mBACA,gBACA,UACA,wBACA,WACA,gBACA,YACA,SACmC,CACnC,IAAM,EAAqBF,EAAAA,sBAAsB,EAAuB,EAAQ,CAC1E,GAAK,GAAkBC,EAAAA,MAAM,MAAM,EAAU,CAE7C,GAAK,GAAsBA,EAAAA,MAAM,MAAM,EAAc,CACrD,EAAqBE,EAAAA,sBAAsB,EAAc,CACzD,EAASC,EAAAA,mBAAmB,WAAW,EAAQ,YAAa,EAAkB,CAAC,EAAe,CAAC,CAC/F,EAAcC,EAAAA,kBAAkB,EAAO,GAAK,CAElD,OAAOC,EAAAA,IAAI,YACT,CACE,qBAAsB,CAAC,EAAmB,CAC1C,qBACA,WACA,qBACA,QAAS,CAAC,EAAO,CACjB,MAAO,EACR,CACD,EACD,CAWH,SAAS,EAAe,CACtB,mBACA,gBACA,UACA,wBACA,gBACA,YACA,SACmC,CACnC,IAAM,EAAqBN,EAAAA,sBAAsB,EAAuB,EAAQ,CAC1E,GAAK,GAAkBC,EAAAA,MAAM,MAAM,EAAU,CAE7C,GAAK,GAAsBA,EAAAA,MAAM,MAAM,EAAc,CACrD,EAAqBE,EAAAA,sBAAsB,EAAc,CACzD,EAASC,EAAAA,mBAAmB,WAAW,EAAQ,YAAa,EAAkB,CAAC,EAAe,CAAC,CAC/F,EAAcC,EAAAA,kBAAkB,EAAO,GAAK,CAElD,OAAOE,EAAAA,IAAI,YAAY,EAAS,EAAoB,EAAoB,EAAa,CAAC,EAAO,CAAE,CAC7F,UAAW,EACX,gBAAiB,CAAC,EAAmB,CACtC,CAAC,CAKJ,SAAgB,EAAS,EAAoC,CAC3D,OAAQ,EAAO,iBAAf,CACE,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,EAkBnC,SAAS,EAAe,CACtB,cACA,oBACA,UACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgBP,EAAAA,sBAAsB,EAAkB,EAAQ,CAChE,EAAqBG,EAAAA,sBAAsB,EAAc,CACzD,EAAiBF,EAAAA,MAAM,YAAY,EAAU,CAEnD,OAAOC,EAAAA,IAAI,uBACT,EACA,EACA,EACA,EACA,EACA,EACD,CAQH,SAAS,EAAe,CACtB,cACA,UACA,WACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgBF,EAAAA,sBAAsB,EAAkB,EAAQ,CAChE,EAAqBG,EAAAA,sBAAsB,EAAc,CACzD,GAAK,GAAkBF,EAAAA,MAAM,MAAM,EAAU,CAEnD,OAAOK,EAAAA,IAAI,YACT,CACE,qBACA,WACA,gBACA,iBAAkB,CAAC,EAAe,CAClC,MAAO,EACR,CACD,EACD,CAQH,SAAS,EAAe,CACtB,cACA,gBACA,UACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgBN,EAAAA,sBAAsB,EAAkB,EAAQ,CAChE,EAAqBG,EAAAA,sBAAsB,EAAc,CACzD,GAAK,GAAsBF,EAAAA,MAAM,MAAM,EAAc,CACrD,GAAK,GAAkBA,EAAAA,MAAM,MAAM,EAAU,CAEnD,OAAOM,EAAAA,IAAI,YAAY,EAAS,EAAe,EAAa,CAAC,EAAe,CAAE,EAAoB,CAChG,gBAAiB,CAAC,EAAmB,CACtC,CAAC,CAKJ,SAAgB,EAAS,EAAoC,CAC3D,OAAQ,EAAO,sBAAf,CACE,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{getAddressesAsBuffers as e,getChainIdFromContext as t,sortUTXOsByAmount as n}from"../_utils.js";import{TransferableOutput as r,avm as i,evm as a,pvm as o,utils as s}from"@avalabs/avalanchejs";function c({amountInNanoAvax:e,baseFeeInNanoAvax:n,context:r,destinationChainAlias:i,fromAddress:o,nonce:c,toAddress:l}){let u=t(i,r),d=s.hexToBuffer(o),[,,f]=s.parse(l);return a.newExportTxFromBaseFee(r,n,e,u,d,[f],c)}function l({amountInNanoAvax:i,changeAddress:a,context:c,destinationChainAlias:l,feeState:u,fromAddresses:d,toAddress:f,utxos:p}){let m=t(l,c),[,,h]=s.parse(f),[,,g]=s.parse(a),_=e(d),v=r.fromNative(c.avaxAssetID,i,[h]),y=n(p,!0);return o.newExportTx({changeAddressesBytes:[g],destinationChainId:m,feeState:u,fromAddressesBytes:_,outputs:[v],utxos:y},c)}function u({amountInNanoAvax:a,changeAddress:o,context:c,destinationChainAlias:l,fromAddresses:u,toAddress:d,utxos:f}){let p=t(l,c),[,,m]=s.parse(d),[,,h]=s.parse(o),g=e(u),_=r.fromNative(c.avaxAssetID,a,[m]),v=n(f,!0);return i.newExportTx(c,p,g,v,[_],{threshold:1,changeAddresses:[h]})}function d(e){switch(e.sourceChainAlias){case`C`:return c(e);case`P`:return l(e);case`X`:return u(e)}}function f({atomicUtxos:n,baseFeeInNanoAvax:r,context:i,fromAddresses:o,sourceChainAlias:c,toAddress:l}){let u=t(c,i),d=e(o),f=s.hexToBuffer(l);return a.newImportTxFromBaseFee(i,f,d,n,u,r)}function p({atomicUtxos:n,context:r,feeState:i,fromAddresses:a,sourceChainAlias:c,toAddress:l}){let u=t(c,r),d=e(a),[,,f]=s.parse(l);return o.newImportTx({fromAddressesBytes:d,feeState:i,sourceChainId:u,toAddressesBytes:[f],utxos:n},r)}function m({atomicUtxos:n,changeAddress:r,context:a,fromAddresses:o,sourceChainAlias:c,toAddress:l}){let u=t(c,a),d=e(o),[,,f]=s.parse(r),[,,p]=s.parse(l);return i.newImportTx(a,u,n,[p],d,{changeAddresses:[f]})}function h(e){switch(e.destinationChainAlias){case`C`:return f(e);case`P`:return p(e);case`X`:return m(e)}}export{d as exportTx,h as importTx};
|
|
2
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_utils/transactions.ts"],"sourcesContent":["import {\n avm,\n evm,\n pvm,\n TransferableOutput,\n utils,\n type Context,\n type UnsignedTx,\n type Utxo,\n} from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport type { AvalancheBlockchainAlias } from '../../../constants';\nimport type { XpAddress } from '../types';\nimport { getAddressesAsBuffers, getChainIdFromContext, sortUTXOsByAmount } from '../_utils';\n\ninterface BaseExportTxParams<Alias extends AvalancheBlockchainAlias> {\n amountInNanoAvax: bigint;\n context: Context.Context;\n sourceChainAlias: Alias;\n destinationChainAlias: Exclude<AvalancheBlockchainAlias, Alias>;\n /**\n * The bech32 formatted address of the recipient on the destination chain.\n *\n * Do not use the EVM hex formatted address here for C-Chain. Use the Coreth bech32 formatted address.\n */\n toAddress: XpAddress;\n}\n\nexport interface ExportCChainTxParams extends BaseExportTxParams<'C'> {\n baseFeeInNanoAvax: bigint;\n fromAddress: EvmAddress;\n nonce: bigint;\n}\n\nfunction exportCChainTx({\n amountInNanoAvax,\n baseFeeInNanoAvax,\n context,\n destinationChainAlias,\n fromAddress,\n nonce,\n toAddress,\n}: ExportCChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const fromAddressBuffer = utils.hexToBuffer(fromAddress);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return evm.newExportTxFromBaseFee(\n context,\n baseFeeInNanoAvax,\n amountInNanoAvax,\n destinationChainId,\n fromAddressBuffer,\n [toAddressBytes],\n nonce,\n );\n}\n\nexport interface ExportPChainTxParams extends BaseExportTxParams<'P'> {\n /** P-Chain change address. */\n changeAddress: XpAddress;\n feeState: pvm.FeeState;\n /** List of P-Chain bech32 addresses from user's wallet. */\n fromAddresses: XpAddress[];\n utxos: Utxo[];\n}\n\nfunction exportPChainTx({\n amountInNanoAvax,\n changeAddress,\n context,\n destinationChainAlias,\n feeState,\n fromAddresses,\n toAddress,\n utxos,\n}: ExportPChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const output = TransferableOutput.fromNative(context.avaxAssetID, amountInNanoAvax, [toAddressBytes]);\n const sortedUtxos = sortUTXOsByAmount(utxos, true);\n\n return pvm.newExportTx(\n {\n changeAddressesBytes: [changeAddressBytes],\n destinationChainId,\n feeState,\n fromAddressesBytes,\n outputs: [output],\n utxos: sortedUtxos,\n },\n context,\n );\n}\n\nexport interface ExportXChainTxParams extends BaseExportTxParams<'X'> {\n /** X-Chain change address. */\n changeAddress: XpAddress;\n /** List of X-Chain bech32 addresses from user's wallet. */\n fromAddresses: XpAddress[];\n utxos: Utxo[];\n}\n\nfunction exportXChainTx({\n amountInNanoAvax,\n changeAddress,\n context,\n destinationChainAlias,\n fromAddresses,\n toAddress,\n utxos,\n}: ExportXChainTxParams): UnsignedTx {\n const destinationChainId = getChainIdFromContext(destinationChainAlias, context);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const output = TransferableOutput.fromNative(context.avaxAssetID, amountInNanoAvax, [toAddressBytes]);\n const sortedUtxos = sortUTXOsByAmount(utxos, true);\n\n return avm.newExportTx(context, destinationChainId, fromAddressesBytes, sortedUtxos, [output], {\n threshold: 1,\n changeAddresses: [changeAddressBytes],\n });\n}\n\nexport type ExportTxParams = ExportCChainTxParams | ExportPChainTxParams | ExportXChainTxParams;\n\nexport function exportTx(params: ExportTxParams): UnsignedTx {\n switch (params.sourceChainAlias) {\n case 'C': {\n return exportCChainTx(params);\n }\n\n case 'P': {\n return exportPChainTx(params);\n }\n\n case 'X': {\n return exportXChainTx(params);\n }\n }\n}\n\ninterface BaseImportTxParams<Alias extends AvalancheBlockchainAlias> {\n atomicUtxos: Utxo[];\n context: Context.Context;\n destinationChainAlias: Alias;\n fromAddresses: XpAddress[];\n sourceChainAlias: Exclude<AvalancheBlockchainAlias, Alias>;\n}\n\nexport interface ImportCChainTxParams extends BaseImportTxParams<'C'> {\n baseFeeInNanoAvax: bigint;\n toAddress: EvmAddress;\n}\n\nfunction importCChainTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportCChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const toAddressBytes = utils.hexToBuffer(toAddress);\n\n return evm.newImportTxFromBaseFee(\n context,\n toAddressBytes,\n fromAddressesBytes,\n atomicUtxos,\n sourceChainId,\n baseFeeInNanoAvax,\n );\n}\n\nexport interface ImportPChainTxParams extends BaseImportTxParams<'P'> {\n feeState: pvm.FeeState;\n toAddress: XpAddress;\n}\n\nfunction importPChainTx({\n atomicUtxos,\n context,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportPChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return pvm.newImportTx(\n {\n fromAddressesBytes,\n feeState,\n sourceChainId,\n toAddressesBytes: [toAddressBytes],\n utxos: atomicUtxos,\n },\n context,\n );\n}\n\nexport interface ImportXChainTxParams extends BaseImportTxParams<'X'> {\n changeAddress: XpAddress;\n toAddress: XpAddress;\n}\n\nfunction importXChainTx({\n atomicUtxos,\n changeAddress,\n context,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n}: ImportXChainTxParams): UnsignedTx {\n const sourceChainId = getChainIdFromContext(sourceChainAlias, context);\n const fromAddressesBytes = getAddressesAsBuffers(fromAddresses);\n const [, , changeAddressBytes] = utils.parse(changeAddress);\n const [, , toAddressBytes] = utils.parse(toAddress);\n\n return avm.newImportTx(context, sourceChainId, atomicUtxos, [toAddressBytes], fromAddressesBytes, {\n changeAddresses: [changeAddressBytes],\n });\n}\n\nexport type ImportTxParams = ImportCChainTxParams | ImportPChainTxParams | ImportXChainTxParams;\n\nexport function importTx(params: ImportTxParams): UnsignedTx {\n switch (params.destinationChainAlias) {\n case 'C': {\n return importCChainTx(params);\n }\n\n case 'P': {\n return importPChainTx(params);\n }\n\n case 'X': {\n return importXChainTx(params);\n }\n }\n}\n"],"mappings":"uMAkCA,SAAS,EAAe,CACtB,mBACA,oBACA,UACA,wBACA,cACA,QACA,aACmC,CACnC,IAAM,EAAqB,EAAsB,EAAuB,EAAQ,CAC1E,EAAoB,EAAM,YAAY,EAAY,CAClD,GAAK,GAAkB,EAAM,MAAM,EAAU,CAEnD,OAAO,EAAI,uBACT,EACA,EACA,EACA,EACA,EACA,CAAC,EAAe,CAChB,EACD,CAYH,SAAS,EAAe,CACtB,mBACA,gBACA,UACA,wBACA,WACA,gBACA,YACA,SACmC,CACnC,IAAM,EAAqB,EAAsB,EAAuB,EAAQ,CAC1E,GAAK,GAAkB,EAAM,MAAM,EAAU,CAE7C,GAAK,GAAsB,EAAM,MAAM,EAAc,CACrD,EAAqB,EAAsB,EAAc,CACzD,EAAS,EAAmB,WAAW,EAAQ,YAAa,EAAkB,CAAC,EAAe,CAAC,CAC/F,EAAc,EAAkB,EAAO,GAAK,CAElD,OAAO,EAAI,YACT,CACE,qBAAsB,CAAC,EAAmB,CAC1C,qBACA,WACA,qBACA,QAAS,CAAC,EAAO,CACjB,MAAO,EACR,CACD,EACD,CAWH,SAAS,EAAe,CACtB,mBACA,gBACA,UACA,wBACA,gBACA,YACA,SACmC,CACnC,IAAM,EAAqB,EAAsB,EAAuB,EAAQ,CAC1E,GAAK,GAAkB,EAAM,MAAM,EAAU,CAE7C,GAAK,GAAsB,EAAM,MAAM,EAAc,CACrD,EAAqB,EAAsB,EAAc,CACzD,EAAS,EAAmB,WAAW,EAAQ,YAAa,EAAkB,CAAC,EAAe,CAAC,CAC/F,EAAc,EAAkB,EAAO,GAAK,CAElD,OAAO,EAAI,YAAY,EAAS,EAAoB,EAAoB,EAAa,CAAC,EAAO,CAAE,CAC7F,UAAW,EACX,gBAAiB,CAAC,EAAmB,CACtC,CAAC,CAKJ,SAAgB,EAAS,EAAoC,CAC3D,OAAQ,EAAO,iBAAf,CACE,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,EAkBnC,SAAS,EAAe,CACtB,cACA,oBACA,UACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgB,EAAsB,EAAkB,EAAQ,CAChE,EAAqB,EAAsB,EAAc,CACzD,EAAiB,EAAM,YAAY,EAAU,CAEnD,OAAO,EAAI,uBACT,EACA,EACA,EACA,EACA,EACA,EACD,CAQH,SAAS,EAAe,CACtB,cACA,UACA,WACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgB,EAAsB,EAAkB,EAAQ,CAChE,EAAqB,EAAsB,EAAc,CACzD,GAAK,GAAkB,EAAM,MAAM,EAAU,CAEnD,OAAO,EAAI,YACT,CACE,qBACA,WACA,gBACA,iBAAkB,CAAC,EAAe,CAClC,MAAO,EACR,CACD,EACD,CAQH,SAAS,EAAe,CACtB,cACA,gBACA,UACA,gBACA,mBACA,aACmC,CACnC,IAAM,EAAgB,EAAsB,EAAkB,EAAQ,CAChE,EAAqB,EAAsB,EAAc,CACzD,GAAK,GAAsB,EAAM,MAAM,EAAc,CACrD,GAAK,GAAkB,EAAM,MAAM,EAAU,CAEnD,OAAO,EAAI,YAAY,EAAS,EAAe,EAAa,CAAC,EAAe,CAAE,EAAoB,CAChG,gBAAiB,CAAC,EAAmB,CACtC,CAAC,CAKJ,SAAgB,EAAS,EAAoC,CAC3D,OAAQ,EAAO,sBAAf,CACE,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO,CAG/B,IAAK,IACH,OAAO,EAAe,EAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../errors.cjs`),n=require(`./constants.cjs`);let r=require(`@avalabs/avalanchejs`),i=require(`es-toolkit`);function a(e,t){try{return e()}catch(e){throw t(e)}}function o({amountIn:e,sourceAsset:{decimals:t},targetAsset:{decimals:n}}){return t<n?e*10n**BigInt(n-t):t>n?e/10n**BigInt(t-n):e}function s(e){return e&&e.replace(n.CHAIN_PREFIXES_REGEX,``)}function c(e,t){let n=t?`fuji`:`avax`;return s(e).startsWith(n)}function l(n,r){let i=r?e.AvalancheFujiBlockchainChainIds:e.AvalancheMainnetBlockchainChainIds;if(n===i.C)return`C`;if(n===i.P)return`P`;if(n===i.X)return`X`;throw new t.InvalidParamsError(`Unsupported Avalanche chainId for ${r?`testnet`:`mainnet`}: ${n}`,`Chain ID ${n} is not supported for ${r?`Fuji`:`Mainnet`}. Supported chain IDs are: ${Object.values(i).join(`, `)}.`)}function u(e){return e===`C`?n.AVALANCHE_C_CHAIN_NATIVE_ASSET:n.AVALANCHE_PX_CHAIN_NATIVE_ASSET}function d(r){switch(r){case e.Environment.TEST:return n.AVALANCHE_API_URIS.fuji;case e.Environment.PROD:return n.AVALANCHE_API_URIS.mainnet;default:throw new t.SdkError(`Unsupported environment for Avalanche CCT service.`,t.ErrorCode.INVALID_PARAMS)}}function f(e){return e*n.WEI_PER_NANO_AVAX_BIGINT}function p(e,n){switch(e){case`C`:return n.cBlockchainID;case`P`:return n.pBlockchainID;case`X`:return n.xBlockchainID;default:throw new t.InvalidParamsError(`Unsupported chain alias: ${e}`)}}function m(e,t){return(0,i.orderBy)(e.map(e=>({utxo:e,...r.utils.getUtxoInfo(e)})),[`amount`],[t?`desc`:`asc`]).map(({utxo:e})=>e)}function h(e){return e.map(e=>r.utils.parse(e)[2])}function g(n){switch(n){case e.Environment.TEST:return!0;case e.Environment.PROD:return!1;default:throw new t.SdkError(`Unsupported environment for Avalanche CCT service.`,t.ErrorCode.INVALID_PARAMS)}}function _(e,n){let i=d(e);switch(n){case`C`:return new r.evm.EVMApi(i);case`P`:return new r.pvm.PVMApi(i);case`X`:return new r.avm.AVMApi(i);default:throw new t.InvalidParamsError(`Unsupported chain alias: ${n}`,`Can not get Avalanche provider for unsupported chain alias.`)}}exports.convertNanoAvaxToWei=f,exports.getAddressesAsBuffers=h,exports.getAvalancheApiUrl=d,exports.getAvalancheProvider=_,exports.getChainAlias=l,exports.getChainIdFromContext=p,exports.getEnvironmentIsTestnet=g,exports.getNativeTokenForChainAlias=u,exports.getOutputAmountForAvalancheCct=o,exports.sortUTXOsByAmount=m,exports.stripAddressPrefix=s,exports.tryOrThrow=a,exports.xpAddressMatchesNetwork=c;
|
|
2
|
+
//# sourceMappingURL=_utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.cjs","names":["CHAIN_PREFIXES_REGEX","AvalancheFujiBlockchainChainIds","AvalancheMainnetBlockchainChainIds","InvalidParamsError","AVALANCHE_C_CHAIN_NATIVE_ASSET","AVALANCHE_PX_CHAIN_NATIVE_ASSET","Environment","AVALANCHE_API_URIS","SdkError","ErrorCode","WEI_PER_NANO_AVAX_BIGINT","utils","evm","pvm","avm"],"sources":["../../../src/transfer-service/avalanche-cct/_utils.ts"],"sourcesContent":["import { avm, evm, pvm, utils, type Context, type Utxo } from '@avalabs/avalanchejs';\nimport { orderBy } from 'es-toolkit';\nimport {\n AvalancheChainIds,\n AvalancheFujiBlockchainChainIds,\n AvalancheMainnetBlockchainChainIds,\n Environment,\n type AvalancheBlockchainAlias,\n} from '../../constants';\nimport type { NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { XpAddress } from './types';\nimport {\n AVALANCHE_API_URIS,\n AVALANCHE_C_CHAIN_NATIVE_ASSET,\n AVALANCHE_PX_CHAIN_NATIVE_ASSET,\n CHAIN_PREFIXES_REGEX,\n WEI_PER_NANO_AVAX_BIGINT,\n} from './constants';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../errors';\n\nexport function tryOrThrow<T>(fn: () => T, errorHandler: (error: unknown) => SdkError): T {\n try {\n return fn();\n } catch (error) {\n throw errorHandler(error);\n }\n}\n\n/**\n * Remaps Avalanche C-Chain CAIP2 chain IDs to their corresponding EIP-155 chain IDs.\n */\nexport function mapAvalancheBlockchainChainIdToEip155ChainId(caip2ChainId: Caip2ChainId): Caip2ChainId {\n switch (caip2ChainId) {\n case 'avax:8aDU0Kqh-5d23op-B-r-4YbQFRbsgF9a': {\n return AvalancheChainIds.MAINNET;\n }\n\n case 'avax:YRLfeDBJpfEqUWe2FYR1OpXsnDDZeKWd': {\n return AvalancheChainIds.FUJI;\n }\n\n default: {\n return caip2ChainId;\n }\n }\n}\n\nexport function getOutputAmountForAvalancheCct({\n amountIn,\n sourceAsset: { decimals: sourceDecimals },\n targetAsset: { decimals: targetDecimals },\n}: {\n amountIn: bigint;\n sourceAsset: NativeAsset;\n targetAsset: NativeAsset;\n}): bigint {\n if (sourceDecimals < targetDecimals) {\n return amountIn * 10n ** BigInt(targetDecimals - sourceDecimals);\n }\n\n if (sourceDecimals > targetDecimals) {\n return amountIn / 10n ** BigInt(sourceDecimals - targetDecimals);\n }\n\n return amountIn;\n}\n\nexport function stripAddressPrefix<T extends string>(address: T): T {\n return address ? (address.replace(CHAIN_PREFIXES_REGEX, '') as T) : address;\n}\n\nexport function xpAddressMatchesNetwork(xpAddress: XpAddress, isTestnet: boolean): boolean {\n const prefix = isTestnet ? 'fuji' : 'avax';\n return stripAddressPrefix(xpAddress).startsWith(prefix);\n}\n\nexport function getChainAlias(chainId: Caip2ChainId, isTestnet: boolean): AvalancheBlockchainAlias {\n const chainIds = isTestnet ? AvalancheFujiBlockchainChainIds : AvalancheMainnetBlockchainChainIds;\n\n if (chainId === chainIds.C) {\n return 'C';\n }\n\n if (chainId === chainIds.P) {\n return 'P';\n }\n\n if (chainId === chainIds.X) {\n return 'X';\n }\n throw new InvalidParamsError(\n `Unsupported Avalanche chainId for ${isTestnet ? 'testnet' : 'mainnet'}: ${chainId}`,\n `Chain ID ${chainId} is not supported for ${\n isTestnet ? 'Fuji' : 'Mainnet'\n }. Supported chain IDs are: ${Object.values(chainIds).join(', ')}.`,\n );\n}\n\nexport function getNativeTokenForChainAlias(chainAlias: AvalancheBlockchainAlias): NativeAsset {\n if (chainAlias === 'C') {\n return AVALANCHE_C_CHAIN_NATIVE_ASSET;\n }\n\n return AVALANCHE_PX_CHAIN_NATIVE_ASSET;\n}\n\nexport function getAvalancheApiUrl(environment: Environment): string {\n switch (environment) {\n case Environment.TEST: {\n return AVALANCHE_API_URIS.fuji;\n }\n\n case Environment.PROD: {\n return AVALANCHE_API_URIS.mainnet;\n }\n\n default: {\n throw new SdkError('Unsupported environment for Avalanche CCT service.', ErrorCode.INVALID_PARAMS);\n }\n }\n}\n\nexport function convertNanoAvaxToWei(nanoAvaxAmount: bigint): bigint {\n return nanoAvaxAmount * WEI_PER_NANO_AVAX_BIGINT;\n}\n\nexport function convertWeiToNanoAvax(weiAmount: bigint): bigint {\n return weiAmount / WEI_PER_NANO_AVAX_BIGINT;\n}\n\nexport function getChainIdFromContext(chainAlias: AvalancheBlockchainAlias, context: Context.Context): string {\n switch (chainAlias) {\n case 'C': {\n return context.cBlockchainID;\n }\n case 'P': {\n return context.pBlockchainID;\n }\n case 'X': {\n return context.xBlockchainID;\n }\n default: {\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n }\n}\n\nexport function sortUTXOsByAmount(utxos: Utxo[], isDescending: boolean): Utxo[] {\n const utxosWithInfo = utxos.map((utxo) => ({\n utxo,\n ...utils.getUtxoInfo(utxo),\n }));\n\n return orderBy(utxosWithInfo, ['amount'], [isDescending ? 'desc' : 'asc']).map(({ utxo }) => utxo);\n}\n\nexport function getAddressesAsBuffers(addresses: string[]): Uint8Array[] {\n return addresses.map((address) => utils.parse(address)[2]);\n}\n\nexport function getEnvironmentIsTestnet(environment: Environment): boolean {\n switch (environment) {\n case Environment.TEST: {\n return true;\n }\n\n case Environment.PROD: {\n return false;\n }\n\n default: {\n throw new SdkError('Unsupported environment for Avalanche CCT service.', ErrorCode.INVALID_PARAMS);\n }\n }\n}\n\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'C'): evm.EVMApi;\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'P'): pvm.PVMApi;\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'X'): avm.AVMApi;\nexport function getAvalancheProvider(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): avm.AVMApi | pvm.PVMApi | evm.EVMApi {\n const baseUrl = getAvalancheApiUrl(environment);\n\n switch (chainAlias) {\n case 'C': {\n return new evm.EVMApi(baseUrl);\n }\n case 'P': {\n return new pvm.PVMApi(baseUrl);\n }\n case 'X': {\n return new avm.AVMApi(baseUrl);\n }\n default: {\n throw new InvalidParamsError(\n `Unsupported chain alias: ${chainAlias}`,\n 'Can not get Avalanche provider for unsupported chain alias.',\n );\n }\n }\n}\n"],"mappings":"gNAqBA,SAAgB,EAAc,EAAa,EAA+C,CACxF,GAAI,CACF,OAAO,GAAI,OACJ,EAAO,CACd,MAAM,EAAa,EAAM,EAuB7B,SAAgB,EAA+B,CAC7C,WACA,YAAa,CAAE,SAAU,GACzB,YAAa,CAAE,SAAU,IAKhB,CAST,OARI,EAAiB,EACZ,EAAW,KAAO,OAAO,EAAiB,EAAe,CAG9D,EAAiB,EACZ,EAAW,KAAO,OAAO,EAAiB,EAAe,CAG3D,EAGT,SAAgB,EAAqC,EAAe,CAClE,OAAO,GAAW,EAAQ,QAAQA,EAAAA,qBAAsB,GAAG,CAG7D,SAAgB,EAAwB,EAAsB,EAA6B,CACzF,IAAM,EAAS,EAAY,OAAS,OACpC,OAAO,EAAmB,EAAU,CAAC,WAAW,EAAO,CAGzD,SAAgB,EAAc,EAAuB,EAA8C,CACjG,IAAM,EAAW,EAAYC,EAAAA,gCAAkCC,EAAAA,mCAE/D,GAAI,IAAY,EAAS,EACvB,MAAO,IAGT,GAAI,IAAY,EAAS,EACvB,MAAO,IAGT,GAAI,IAAY,EAAS,EACvB,MAAO,IAET,MAAM,IAAIC,EAAAA,mBACR,qCAAqC,EAAY,UAAY,UAAU,IAAI,IAC3E,YAAY,EAAQ,wBAClB,EAAY,OAAS,UACtB,6BAA6B,OAAO,OAAO,EAAS,CAAC,KAAK,KAAK,CAAC,GAClE,CAGH,SAAgB,EAA4B,EAAmD,CAK7F,OAJI,IAAe,IACVC,EAAAA,+BAGFC,EAAAA,gCAGT,SAAgB,EAAmB,EAAkC,CACnE,OAAQ,EAAR,CACE,KAAKC,EAAAA,YAAY,KACf,OAAOC,EAAAA,mBAAmB,KAG5B,KAAKD,EAAAA,YAAY,KACf,OAAOC,EAAAA,mBAAmB,QAG5B,QACE,MAAM,IAAIC,EAAAA,SAAS,qDAAsDC,EAAAA,UAAU,eAAe,EAKxG,SAAgB,EAAqB,EAAgC,CACnE,OAAO,EAAiBC,EAAAA,yBAO1B,SAAgB,EAAsB,EAAsC,EAAkC,CAC5G,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAAQ,cAEjB,IAAK,IACH,OAAO,EAAQ,cAEjB,IAAK,IACH,OAAO,EAAQ,cAEjB,QACE,MAAM,IAAIP,EAAAA,mBAAmB,4BAA4B,IAAa,EAK5E,SAAgB,EAAkB,EAAe,EAA+B,CAM9E,OAAA,EAAA,EAAA,SALsB,EAAM,IAAK,IAAU,CACzC,OACA,GAAGQ,EAAAA,MAAM,YAAY,EAAK,CAC3B,EAAE,CAE2B,CAAC,SAAS,CAAE,CAAC,EAAe,OAAS,MAAM,CAAC,CAAC,KAAK,CAAE,UAAW,EAAK,CAGpG,SAAgB,EAAsB,EAAmC,CACvE,OAAO,EAAU,IAAK,GAAYA,EAAAA,MAAM,MAAM,EAAQ,CAAC,GAAG,CAG5D,SAAgB,EAAwB,EAAmC,CACzE,OAAQ,EAAR,CACE,KAAKL,EAAAA,YAAY,KACf,MAAO,GAGT,KAAKA,EAAAA,YAAY,KACf,MAAO,GAGT,QACE,MAAM,IAAIE,EAAAA,SAAS,qDAAsDC,EAAAA,UAAU,eAAe,EAQxG,SAAgB,EACd,EACA,EACsC,CACtC,IAAM,EAAU,EAAmB,EAAY,CAE/C,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,IAAIG,EAAAA,IAAI,OAAO,EAAQ,CAEhC,IAAK,IACH,OAAO,IAAIC,EAAAA,IAAI,OAAO,EAAQ,CAEhC,IAAK,IACH,OAAO,IAAIC,EAAAA,IAAI,OAAO,EAAQ,CAEhC,QACE,MAAM,IAAIX,EAAAA,mBACR,4BAA4B,IAC5B,8DACD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AvalancheFujiBlockchainChainIds as e,AvalancheMainnetBlockchainChainIds as t,Environment as n}from"../../constants.js";import{ErrorCode as r,InvalidParamsError as i,SdkError as a}from"../../errors.js";import{AVALANCHE_API_URIS as o,AVALANCHE_C_CHAIN_NATIVE_ASSET as s,AVALANCHE_PX_CHAIN_NATIVE_ASSET as c,CHAIN_PREFIXES_REGEX as l,WEI_PER_NANO_AVAX_BIGINT as u}from"./constants.js";import{avm as d,evm as f,pvm as p,utils as m}from"@avalabs/avalanchejs";import{orderBy as h}from"es-toolkit";function g(e,t){try{return e()}catch(e){throw t(e)}}function _({amountIn:e,sourceAsset:{decimals:t},targetAsset:{decimals:n}}){return t<n?e*10n**BigInt(n-t):t>n?e/10n**BigInt(t-n):e}function v(e){return e&&e.replace(l,``)}function y(e,t){let n=t?`fuji`:`avax`;return v(e).startsWith(n)}function b(n,r){let a=r?e:t;if(n===a.C)return`C`;if(n===a.P)return`P`;if(n===a.X)return`X`;throw new i(`Unsupported Avalanche chainId for ${r?`testnet`:`mainnet`}: ${n}`,`Chain ID ${n} is not supported for ${r?`Fuji`:`Mainnet`}. Supported chain IDs are: ${Object.values(a).join(`, `)}.`)}function x(e){return e===`C`?s:c}function S(e){switch(e){case n.TEST:return o.fuji;case n.PROD:return o.mainnet;default:throw new a(`Unsupported environment for Avalanche CCT service.`,r.INVALID_PARAMS)}}function C(e){return e*u}function w(e,t){switch(e){case`C`:return t.cBlockchainID;case`P`:return t.pBlockchainID;case`X`:return t.xBlockchainID;default:throw new i(`Unsupported chain alias: ${e}`)}}function T(e,t){return h(e.map(e=>({utxo:e,...m.getUtxoInfo(e)})),[`amount`],[t?`desc`:`asc`]).map(({utxo:e})=>e)}function E(e){return e.map(e=>m.parse(e)[2])}function D(e){switch(e){case n.TEST:return!0;case n.PROD:return!1;default:throw new a(`Unsupported environment for Avalanche CCT service.`,r.INVALID_PARAMS)}}function O(e,t){let n=S(e);switch(t){case`C`:return new f.EVMApi(n);case`P`:return new p.PVMApi(n);case`X`:return new d.AVMApi(n);default:throw new i(`Unsupported chain alias: ${t}`,`Can not get Avalanche provider for unsupported chain alias.`)}}export{C as convertNanoAvaxToWei,E as getAddressesAsBuffers,S as getAvalancheApiUrl,O as getAvalancheProvider,b as getChainAlias,w as getChainIdFromContext,D as getEnvironmentIsTestnet,x as getNativeTokenForChainAlias,_ as getOutputAmountForAvalancheCct,T as sortUTXOsByAmount,v as stripAddressPrefix,g as tryOrThrow,y as xpAddressMatchesNetwork};
|
|
2
|
+
//# sourceMappingURL=_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.js","names":[],"sources":["../../../src/transfer-service/avalanche-cct/_utils.ts"],"sourcesContent":["import { avm, evm, pvm, utils, type Context, type Utxo } from '@avalabs/avalanchejs';\nimport { orderBy } from 'es-toolkit';\nimport {\n AvalancheChainIds,\n AvalancheFujiBlockchainChainIds,\n AvalancheMainnetBlockchainChainIds,\n Environment,\n type AvalancheBlockchainAlias,\n} from '../../constants';\nimport type { NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { XpAddress } from './types';\nimport {\n AVALANCHE_API_URIS,\n AVALANCHE_C_CHAIN_NATIVE_ASSET,\n AVALANCHE_PX_CHAIN_NATIVE_ASSET,\n CHAIN_PREFIXES_REGEX,\n WEI_PER_NANO_AVAX_BIGINT,\n} from './constants';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../errors';\n\nexport function tryOrThrow<T>(fn: () => T, errorHandler: (error: unknown) => SdkError): T {\n try {\n return fn();\n } catch (error) {\n throw errorHandler(error);\n }\n}\n\n/**\n * Remaps Avalanche C-Chain CAIP2 chain IDs to their corresponding EIP-155 chain IDs.\n */\nexport function mapAvalancheBlockchainChainIdToEip155ChainId(caip2ChainId: Caip2ChainId): Caip2ChainId {\n switch (caip2ChainId) {\n case 'avax:8aDU0Kqh-5d23op-B-r-4YbQFRbsgF9a': {\n return AvalancheChainIds.MAINNET;\n }\n\n case 'avax:YRLfeDBJpfEqUWe2FYR1OpXsnDDZeKWd': {\n return AvalancheChainIds.FUJI;\n }\n\n default: {\n return caip2ChainId;\n }\n }\n}\n\nexport function getOutputAmountForAvalancheCct({\n amountIn,\n sourceAsset: { decimals: sourceDecimals },\n targetAsset: { decimals: targetDecimals },\n}: {\n amountIn: bigint;\n sourceAsset: NativeAsset;\n targetAsset: NativeAsset;\n}): bigint {\n if (sourceDecimals < targetDecimals) {\n return amountIn * 10n ** BigInt(targetDecimals - sourceDecimals);\n }\n\n if (sourceDecimals > targetDecimals) {\n return amountIn / 10n ** BigInt(sourceDecimals - targetDecimals);\n }\n\n return amountIn;\n}\n\nexport function stripAddressPrefix<T extends string>(address: T): T {\n return address ? (address.replace(CHAIN_PREFIXES_REGEX, '') as T) : address;\n}\n\nexport function xpAddressMatchesNetwork(xpAddress: XpAddress, isTestnet: boolean): boolean {\n const prefix = isTestnet ? 'fuji' : 'avax';\n return stripAddressPrefix(xpAddress).startsWith(prefix);\n}\n\nexport function getChainAlias(chainId: Caip2ChainId, isTestnet: boolean): AvalancheBlockchainAlias {\n const chainIds = isTestnet ? AvalancheFujiBlockchainChainIds : AvalancheMainnetBlockchainChainIds;\n\n if (chainId === chainIds.C) {\n return 'C';\n }\n\n if (chainId === chainIds.P) {\n return 'P';\n }\n\n if (chainId === chainIds.X) {\n return 'X';\n }\n throw new InvalidParamsError(\n `Unsupported Avalanche chainId for ${isTestnet ? 'testnet' : 'mainnet'}: ${chainId}`,\n `Chain ID ${chainId} is not supported for ${\n isTestnet ? 'Fuji' : 'Mainnet'\n }. Supported chain IDs are: ${Object.values(chainIds).join(', ')}.`,\n );\n}\n\nexport function getNativeTokenForChainAlias(chainAlias: AvalancheBlockchainAlias): NativeAsset {\n if (chainAlias === 'C') {\n return AVALANCHE_C_CHAIN_NATIVE_ASSET;\n }\n\n return AVALANCHE_PX_CHAIN_NATIVE_ASSET;\n}\n\nexport function getAvalancheApiUrl(environment: Environment): string {\n switch (environment) {\n case Environment.TEST: {\n return AVALANCHE_API_URIS.fuji;\n }\n\n case Environment.PROD: {\n return AVALANCHE_API_URIS.mainnet;\n }\n\n default: {\n throw new SdkError('Unsupported environment for Avalanche CCT service.', ErrorCode.INVALID_PARAMS);\n }\n }\n}\n\nexport function convertNanoAvaxToWei(nanoAvaxAmount: bigint): bigint {\n return nanoAvaxAmount * WEI_PER_NANO_AVAX_BIGINT;\n}\n\nexport function convertWeiToNanoAvax(weiAmount: bigint): bigint {\n return weiAmount / WEI_PER_NANO_AVAX_BIGINT;\n}\n\nexport function getChainIdFromContext(chainAlias: AvalancheBlockchainAlias, context: Context.Context): string {\n switch (chainAlias) {\n case 'C': {\n return context.cBlockchainID;\n }\n case 'P': {\n return context.pBlockchainID;\n }\n case 'X': {\n return context.xBlockchainID;\n }\n default: {\n throw new InvalidParamsError(`Unsupported chain alias: ${chainAlias}`);\n }\n }\n}\n\nexport function sortUTXOsByAmount(utxos: Utxo[], isDescending: boolean): Utxo[] {\n const utxosWithInfo = utxos.map((utxo) => ({\n utxo,\n ...utils.getUtxoInfo(utxo),\n }));\n\n return orderBy(utxosWithInfo, ['amount'], [isDescending ? 'desc' : 'asc']).map(({ utxo }) => utxo);\n}\n\nexport function getAddressesAsBuffers(addresses: string[]): Uint8Array[] {\n return addresses.map((address) => utils.parse(address)[2]);\n}\n\nexport function getEnvironmentIsTestnet(environment: Environment): boolean {\n switch (environment) {\n case Environment.TEST: {\n return true;\n }\n\n case Environment.PROD: {\n return false;\n }\n\n default: {\n throw new SdkError('Unsupported environment for Avalanche CCT service.', ErrorCode.INVALID_PARAMS);\n }\n }\n}\n\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'C'): evm.EVMApi;\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'P'): pvm.PVMApi;\nexport function getAvalancheProvider(environment: Environment, chainAlias: 'X'): avm.AVMApi;\nexport function getAvalancheProvider(\n environment: Environment,\n chainAlias: AvalancheBlockchainAlias,\n): avm.AVMApi | pvm.PVMApi | evm.EVMApi {\n const baseUrl = getAvalancheApiUrl(environment);\n\n switch (chainAlias) {\n case 'C': {\n return new evm.EVMApi(baseUrl);\n }\n case 'P': {\n return new pvm.PVMApi(baseUrl);\n }\n case 'X': {\n return new avm.AVMApi(baseUrl);\n }\n default: {\n throw new InvalidParamsError(\n `Unsupported chain alias: ${chainAlias}`,\n 'Can not get Avalanche provider for unsupported chain alias.',\n );\n }\n }\n}\n"],"mappings":"kfAqBA,SAAgB,EAAc,EAAa,EAA+C,CACxF,GAAI,CACF,OAAO,GAAI,OACJ,EAAO,CACd,MAAM,EAAa,EAAM,EAuB7B,SAAgB,EAA+B,CAC7C,WACA,YAAa,CAAE,SAAU,GACzB,YAAa,CAAE,SAAU,IAKhB,CAST,OARI,EAAiB,EACZ,EAAW,KAAO,OAAO,EAAiB,EAAe,CAG9D,EAAiB,EACZ,EAAW,KAAO,OAAO,EAAiB,EAAe,CAG3D,EAGT,SAAgB,EAAqC,EAAe,CAClE,OAAO,GAAW,EAAQ,QAAQ,EAAsB,GAAG,CAG7D,SAAgB,EAAwB,EAAsB,EAA6B,CACzF,IAAM,EAAS,EAAY,OAAS,OACpC,OAAO,EAAmB,EAAU,CAAC,WAAW,EAAO,CAGzD,SAAgB,EAAc,EAAuB,EAA8C,CACjG,IAAM,EAAW,EAAY,EAAkC,EAE/D,GAAI,IAAY,EAAS,EACvB,MAAO,IAGT,GAAI,IAAY,EAAS,EACvB,MAAO,IAGT,GAAI,IAAY,EAAS,EACvB,MAAO,IAET,MAAM,IAAI,EACR,qCAAqC,EAAY,UAAY,UAAU,IAAI,IAC3E,YAAY,EAAQ,wBAClB,EAAY,OAAS,UACtB,6BAA6B,OAAO,OAAO,EAAS,CAAC,KAAK,KAAK,CAAC,GAClE,CAGH,SAAgB,EAA4B,EAAmD,CAK7F,OAJI,IAAe,IACV,EAGF,EAGT,SAAgB,EAAmB,EAAkC,CACnE,OAAQ,EAAR,CACE,KAAK,EAAY,KACf,OAAO,EAAmB,KAG5B,KAAK,EAAY,KACf,OAAO,EAAmB,QAG5B,QACE,MAAM,IAAI,EAAS,qDAAsD,EAAU,eAAe,EAKxG,SAAgB,EAAqB,EAAgC,CACnE,OAAO,EAAiB,EAO1B,SAAgB,EAAsB,EAAsC,EAAkC,CAC5G,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAAQ,cAEjB,IAAK,IACH,OAAO,EAAQ,cAEjB,IAAK,IACH,OAAO,EAAQ,cAEjB,QACE,MAAM,IAAI,EAAmB,4BAA4B,IAAa,EAK5E,SAAgB,EAAkB,EAAe,EAA+B,CAM9E,OAAO,EALe,EAAM,IAAK,IAAU,CACzC,OACA,GAAG,EAAM,YAAY,EAAK,CAC3B,EAAE,CAE2B,CAAC,SAAS,CAAE,CAAC,EAAe,OAAS,MAAM,CAAC,CAAC,KAAK,CAAE,UAAW,EAAK,CAGpG,SAAgB,EAAsB,EAAmC,CACvE,OAAO,EAAU,IAAK,GAAY,EAAM,MAAM,EAAQ,CAAC,GAAG,CAG5D,SAAgB,EAAwB,EAAmC,CACzE,OAAQ,EAAR,CACE,KAAK,EAAY,KACf,MAAO,GAGT,KAAK,EAAY,KACf,MAAO,GAGT,QACE,MAAM,IAAI,EAAS,qDAAsD,EAAU,eAAe,EAQxG,SAAgB,EACd,EACA,EACsC,CACtC,IAAM,EAAU,EAAmB,EAAY,CAE/C,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,IAAI,EAAI,OAAO,EAAQ,CAEhC,IAAK,IACH,OAAO,IAAI,EAAI,OAAO,EAAQ,CAEhC,IAAK,IACH,OAAO,IAAI,EAAI,OAAO,EAAQ,CAEhC,QACE,MAAM,IAAI,EACR,4BAA4B,IAC5B,8DACD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../errors.cjs`),n=require(`./_handlers/analyze-support.cjs`),r=require(`./_handlers/get-bridgeable-assets.cjs`),i=require(`./_handlers/get-minimum-transfer-amount.cjs`),a=require(`./_handlers/get-supported-chains.cjs`),o=require(`./_utils.cjs`),s=require(`./_handlers/stream-quotes.cjs`),c=require(`./_handlers/transfer-asset.cjs`),l=require(`./_handlers/estimate-native-fee.cjs`),u=require(`./_handlers/track-transfer.cjs`);let d=require(`@avalabs/avalanchejs`);async function f({avalancheSendTx:f,environment:p,getCoreEthAddress:m,getAtomicUtxos:h,getUtxos:g,getWalletAddressesForChainAlias:_,getWalletChangeAddressForChainAlias:v}){let y,b;try{y=o.getAvalancheApiUrl(p),b=await d.Context.getContextFromURI(y)}catch(e){throw new t.ServiceInitializationError(`Failed to initialize Avalanche CCT context.`,void 0,e)}return{analyzeSupport:n.analyzeSupportFactory({environment:p}),estimateNativeFee:l.estimateNativeFeeFactory({ajsContext:b,environment:p,getAtomicUtxos:h,getUtxos:g}),getAssets:async()=>{throw new t.NotImplementedError},getBridgeableAssets:r.getBridgeableAssetsFactory({environment:p}),getMinimumTransferAmount:i.getMinimumTransferAmountFactory(),getSupportedChains:a.getSupportedChainsFactory({environment:p}),streamQuotes:s.streamQuotesFactory({environment:p,getAtomicUtxos:h}),trackTransfer:u.trackTransferFactory({environment:p}),transferAsset:c.transferAssetFactory({ajsContext:b,avalancheSendTx:f,environment:p,getCoreEthAddress:m,getAtomicUtxos:h,getUtxos:g,getWalletAddressesForChainAlias:_,getWalletChangeAddressForChainAlias:v}),type:e.ServiceType.AVALANCHE_CCT}}exports.createAvalancheCctService=f;
|
|
2
|
+
//# sourceMappingURL=avalanche-cct-service.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avalanche-cct-service.cjs","names":["getAvalancheApiUrl","Context","ServiceInitializationError","analyzeSupportFactory","estimateNativeFeeFactory","NotImplementedError","getBridgeableAssetsFactory","getMinimumTransferAmountFactory","getSupportedChainsFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/avalanche-cct/avalanche-cct-service.ts"],"sourcesContent":["import { Context } from '@avalabs/avalanchejs';\nimport { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport { NotImplementedError, ServiceInitializationError } from '../../errors';\nimport type { AvalancheSendTxFunction, TransferService } from '../../types/service';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { getSupportedChainsFactory } from './_handlers/get-supported-chains';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n} from './types';\nimport type { Fetch } from '../../types/utility-types';\nimport { getAvalancheApiUrl } from './_utils';\n\nexport interface AvalancheCctServiceOptions {\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n fetch?: Fetch;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport async function createAvalancheCctService({\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: AvalancheCctServiceOptions): Promise<TransferService> {\n let avaxApiUrl: string;\n let ajsContext: Context.Context;\n\n try {\n avaxApiUrl = getAvalancheApiUrl(environment);\n ajsContext = await Context.getContextFromURI(avaxApiUrl);\n } catch (error) {\n throw new ServiceInitializationError('Failed to initialize Avalanche CCT context.', undefined, error);\n }\n\n return {\n analyzeSupport: analyzeSupportFactory({ environment }),\n estimateNativeFee: estimateNativeFeeFactory({ ajsContext, environment, getAtomicUtxos, getUtxos }),\n getAssets: async () => {\n throw new NotImplementedError();\n },\n getBridgeableAssets: getBridgeableAssetsFactory({ environment }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: getSupportedChainsFactory({ environment }),\n streamQuotes: streamQuotesFactory({ environment, getAtomicUtxos }),\n trackTransfer: trackTransferFactory({ environment }),\n transferAsset: transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n type: ServiceType.AVALANCHE_CCT,\n } satisfies TransferService;\n}\n"],"mappings":"ojBAkCA,eAAsB,EAA0B,CAC9C,kBACA,cACA,oBACA,iBACA,WACA,kCACA,uCACuD,CACvD,IAAI,EACA,EAEJ,GAAI,CACF,EAAaA,EAAAA,mBAAmB,EAAY,CAC5C,EAAa,MAAMC,EAAAA,QAAQ,kBAAkB,EAAW,OACjD,EAAO,CACd,MAAM,IAAIC,EAAAA,2BAA2B,8CAA+C,IAAA,GAAW,EAAM,CAGvG,MAAO,CACL,eAAgBC,EAAAA,sBAAsB,CAAE,cAAa,CAAC,CACtD,kBAAmBC,EAAAA,yBAAyB,CAAE,aAAY,cAAa,iBAAgB,WAAU,CAAC,CAClG,UAAW,SAAY,CACrB,MAAM,IAAIC,EAAAA,qBAEZ,oBAAqBC,EAAAA,2BAA2B,CAAE,cAAa,CAAC,CAChE,yBAA0BC,EAAAA,iCAAiC,CAC3D,mBAAoBC,EAAAA,0BAA0B,CAAE,cAAa,CAAC,CAC9D,aAAcC,EAAAA,oBAAoB,CAAE,cAAa,iBAAgB,CAAC,CAClE,cAAeC,EAAAA,qBAAqB,CAAE,cAAa,CAAC,CACpD,cAAeC,EAAAA,qBAAqB,CAClC,aACA,kBACA,cACA,oBACA,iBACA,WACA,kCACA,sCACD,CAAC,CACF,KAAMC,EAAAA,YAAY,cACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ServiceType as e}from"../../constants.js";import{NotImplementedError as t,ServiceInitializationError as n}from"../../errors.js";import{analyzeSupportFactory as r}from"./_handlers/analyze-support.js";import{getBridgeableAssetsFactory as i}from"./_handlers/get-bridgeable-assets.js";import{getMinimumTransferAmountFactory as a}from"./_handlers/get-minimum-transfer-amount.js";import{getSupportedChainsFactory as o}from"./_handlers/get-supported-chains.js";import{getAvalancheApiUrl as s}from"./_utils.js";import{streamQuotesFactory as c}from"./_handlers/stream-quotes.js";import{transferAssetFactory as l}from"./_handlers/transfer-asset.js";import{estimateNativeFeeFactory as u}from"./_handlers/estimate-native-fee.js";import{trackTransferFactory as d}from"./_handlers/track-transfer.js";import{Context as f}from"@avalabs/avalanchejs";async function p({avalancheSendTx:p,environment:m,getCoreEthAddress:h,getAtomicUtxos:g,getUtxos:_,getWalletAddressesForChainAlias:v,getWalletChangeAddressForChainAlias:y}){let b,x;try{b=s(m),x=await f.getContextFromURI(b)}catch(e){throw new n(`Failed to initialize Avalanche CCT context.`,void 0,e)}return{analyzeSupport:r({environment:m}),estimateNativeFee:u({ajsContext:x,environment:m,getAtomicUtxos:g,getUtxos:_}),getAssets:async()=>{throw new t},getBridgeableAssets:i({environment:m}),getMinimumTransferAmount:a(),getSupportedChains:o({environment:m}),streamQuotes:c({environment:m,getAtomicUtxos:g}),trackTransfer:d({environment:m}),transferAsset:l({ajsContext:x,avalancheSendTx:p,environment:m,getCoreEthAddress:h,getAtomicUtxos:g,getUtxos:_,getWalletAddressesForChainAlias:v,getWalletChangeAddressForChainAlias:y}),type:e.AVALANCHE_CCT}}export{p as createAvalancheCctService};
|
|
2
|
+
//# sourceMappingURL=avalanche-cct-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avalanche-cct-service.js","names":[],"sources":["../../../src/transfer-service/avalanche-cct/avalanche-cct-service.ts"],"sourcesContent":["import { Context } from '@avalabs/avalanchejs';\nimport { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport { NotImplementedError, ServiceInitializationError } from '../../errors';\nimport type { AvalancheSendTxFunction, TransferService } from '../../types/service';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { getSupportedChainsFactory } from './_handlers/get-supported-chains';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n} from './types';\nimport type { Fetch } from '../../types/utility-types';\nimport { getAvalancheApiUrl } from './_utils';\n\nexport interface AvalancheCctServiceOptions {\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n fetch?: Fetch;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport async function createAvalancheCctService({\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: AvalancheCctServiceOptions): Promise<TransferService> {\n let avaxApiUrl: string;\n let ajsContext: Context.Context;\n\n try {\n avaxApiUrl = getAvalancheApiUrl(environment);\n ajsContext = await Context.getContextFromURI(avaxApiUrl);\n } catch (error) {\n throw new ServiceInitializationError('Failed to initialize Avalanche CCT context.', undefined, error);\n }\n\n return {\n analyzeSupport: analyzeSupportFactory({ environment }),\n estimateNativeFee: estimateNativeFeeFactory({ ajsContext, environment, getAtomicUtxos, getUtxos }),\n getAssets: async () => {\n throw new NotImplementedError();\n },\n getBridgeableAssets: getBridgeableAssetsFactory({ environment }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: getSupportedChainsFactory({ environment }),\n streamQuotes: streamQuotesFactory({ environment, getAtomicUtxos }),\n trackTransfer: trackTransferFactory({ environment }),\n transferAsset: transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n type: ServiceType.AVALANCHE_CCT,\n } satisfies TransferService;\n}\n"],"mappings":"w0BAkCA,eAAsB,EAA0B,CAC9C,kBACA,cACA,oBACA,iBACA,WACA,kCACA,uCACuD,CACvD,IAAI,EACA,EAEJ,GAAI,CACF,EAAa,EAAmB,EAAY,CAC5C,EAAa,MAAM,EAAQ,kBAAkB,EAAW,OACjD,EAAO,CACd,MAAM,IAAI,EAA2B,8CAA+C,IAAA,GAAW,EAAM,CAGvG,MAAO,CACL,eAAgB,EAAsB,CAAE,cAAa,CAAC,CACtD,kBAAmB,EAAyB,CAAE,aAAY,cAAa,iBAAgB,WAAU,CAAC,CAClG,UAAW,SAAY,CACrB,MAAM,IAAI,GAEZ,oBAAqB,EAA2B,CAAE,cAAa,CAAC,CAChE,yBAA0B,GAAiC,CAC3D,mBAAoB,EAA0B,CAAE,cAAa,CAAC,CAC9D,aAAc,EAAoB,CAAE,cAAa,iBAAgB,CAAC,CAClE,cAAe,EAAqB,CAAE,cAAa,CAAC,CACpD,cAAe,EAAqB,CAClC,aACA,kBACA,cACA,oBACA,iBACA,WACA,kCACA,sCACD,CAAC,CACF,KAAM,EAAY,cACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../constants.cjs`),t={type:e.TokenType.NATIVE,decimals:18,name:`Avalanche`,symbol:`AVAX`},n={type:e.TokenType.NATIVE,decimals:9,name:`Avalanche`,symbol:`AVAX`},r=RegExp(`^(${[`C-`,`P-`,`X-`].join(`|`)})`,`i`),i={fuji:`https://api.avax-test.network`,mainnet:`https://api.avax.network`};exports.AVALANCHE_API_URIS=i,exports.AVALANCHE_C_CHAIN_NATIVE_ASSET=t,exports.AVALANCHE_PX_CHAIN_NATIVE_ASSET=n,exports.CHAIN_PREFIXES_REGEX=r,exports.WEI_PER_NANO_AVAX_BIGINT=1000000000n;
|
|
2
|
+
//# sourceMappingURL=constants.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.cjs","names":["TokenType"],"sources":["../../../src/transfer-service/avalanche-cct/constants.ts"],"sourcesContent":["import { TokenType, type AvalancheBlockchainAlias } from '../../constants';\nimport type { NativeAsset } from '../../types/asset';\n\nexport const AVALANCHE_C_CHAIN_NATIVE_ASSET: NativeAsset = {\n type: TokenType.NATIVE,\n decimals: 18,\n name: 'Avalanche',\n symbol: 'AVAX',\n};\n\nexport const AVALANCHE_PX_CHAIN_NATIVE_ASSET: NativeAsset = {\n type: TokenType.NATIVE,\n decimals: 9,\n name: 'Avalanche',\n symbol: 'AVAX',\n};\n\nexport type ChainPrefix = `${AvalancheBlockchainAlias}-`;\n\nexport const CHAIN_PREFIXES: readonly ChainPrefix[] = ['C-', 'P-', 'X-'] as const;\n\nexport const CHAIN_PREFIXES_REGEX: RegExp = new RegExp(`^(${CHAIN_PREFIXES.join('|')})`, 'i');\n\nexport const AVALANCHE_API_URIS = {\n fuji: 'https://api.avax-test.network',\n mainnet: 'https://api.avax.network',\n} as const;\n\nexport const WEI_PER_NANO_AVAX_BIGINT = 1_000_000_000n;\nexport const NANO_AVAX_DECIMALS = 9;\n"],"mappings":"uCAGa,EAA8C,CACzD,KAAMA,EAAAA,UAAU,OAChB,SAAU,GACV,KAAM,YACN,OAAQ,OACT,CAEY,EAA+C,CAC1D,KAAMA,EAAAA,UAAU,OAChB,SAAU,EACV,KAAM,YACN,OAAQ,OACT,CAMY,EAAmC,OAAO,KAFD,CAAC,KAAM,KAAM,KAAK,CAEG,KAAK,IAAI,CAAC,GAAI,IAAI,CAEhF,EAAqB,CAChC,KAAM,gCACN,QAAS,2BACV"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{TokenType as e}from"../../constants.js";const t={type:e.NATIVE,decimals:18,name:`Avalanche`,symbol:`AVAX`},n={type:e.NATIVE,decimals:9,name:`Avalanche`,symbol:`AVAX`},r=RegExp(`^(${[`C-`,`P-`,`X-`].join(`|`)})`,`i`),i={fuji:`https://api.avax-test.network`,mainnet:`https://api.avax.network`},a=1000000000n;export{i as AVALANCHE_API_URIS,t as AVALANCHE_C_CHAIN_NATIVE_ASSET,n as AVALANCHE_PX_CHAIN_NATIVE_ASSET,r as CHAIN_PREFIXES_REGEX,a as WEI_PER_NANO_AVAX_BIGINT};
|
|
2
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/avalanche-cct/constants.ts"],"sourcesContent":["import { TokenType, type AvalancheBlockchainAlias } from '../../constants';\nimport type { NativeAsset } from '../../types/asset';\n\nexport const AVALANCHE_C_CHAIN_NATIVE_ASSET: NativeAsset = {\n type: TokenType.NATIVE,\n decimals: 18,\n name: 'Avalanche',\n symbol: 'AVAX',\n};\n\nexport const AVALANCHE_PX_CHAIN_NATIVE_ASSET: NativeAsset = {\n type: TokenType.NATIVE,\n decimals: 9,\n name: 'Avalanche',\n symbol: 'AVAX',\n};\n\nexport type ChainPrefix = `${AvalancheBlockchainAlias}-`;\n\nexport const CHAIN_PREFIXES: readonly ChainPrefix[] = ['C-', 'P-', 'X-'] as const;\n\nexport const CHAIN_PREFIXES_REGEX: RegExp = new RegExp(`^(${CHAIN_PREFIXES.join('|')})`, 'i');\n\nexport const AVALANCHE_API_URIS = {\n fuji: 'https://api.avax-test.network',\n mainnet: 'https://api.avax.network',\n} as const;\n\nexport const WEI_PER_NANO_AVAX_BIGINT = 1_000_000_000n;\nexport const NANO_AVAX_DECIMALS = 9;\n"],"mappings":"+CAGA,MAAa,EAA8C,CACzD,KAAM,EAAU,OAChB,SAAU,GACV,KAAM,YACN,OAAQ,OACT,CAEY,EAA+C,CAC1D,KAAM,EAAU,OAChB,SAAU,EACV,KAAM,YACN,OAAQ,OACT,CAMY,EAAmC,OAAO,KAFD,CAAC,KAAM,KAAM,KAAK,CAEG,KAAK,IAAI,CAAC,GAAI,IAAI,CAEhF,EAAqB,CAChC,KAAM,gCACN,QAAS,2BACV,CAEY,EAA2B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AvalancheBlockchainAlias } from "../../constants.cjs";
|
|
2
|
+
import { Address } from "viem";
|
|
3
|
+
import { utils } from "@avalabs/avalanchejs";
|
|
4
|
+
|
|
5
|
+
//#region src/transfer-service/avalanche-cct/types.d.ts
|
|
6
|
+
type UtxoSet = utils.UtxoSet;
|
|
7
|
+
/**
|
|
8
|
+
* Returns a list of atomic UTXOs that have not been imported
|
|
9
|
+
* into the destination chain from the source chain yet.
|
|
10
|
+
*
|
|
11
|
+
* i.e. An export transaction occurred on the source chain, but a
|
|
12
|
+
* corresponding import transaction has not been executed on the destination chain yet.
|
|
13
|
+
*/
|
|
14
|
+
type GetAtomicUtxosCallback = (destinationChain: AvalancheBlockchainAlias, sourceChain: AvalancheBlockchainAlias) => Promise<UtxoSet>;
|
|
15
|
+
/**
|
|
16
|
+
* Returns a list of UTXOs that are available to be used for a transfer on the specified chain.
|
|
17
|
+
*/
|
|
18
|
+
type GetUtxosCallback = (chainAlias: Exclude<AvalancheBlockchainAlias, "C">) => Promise<UtxoSet>;
|
|
19
|
+
/**
|
|
20
|
+
* Given an EVM hex address, returns the corresponding Coreth bech32 address.
|
|
21
|
+
*/
|
|
22
|
+
type GetCoreEthAddressCallback = (evmAddress: Address) => Promise<string> | string;
|
|
23
|
+
/**
|
|
24
|
+
* Given a chain alias, returns a list of addresses that the connected wallet controls on that chain.
|
|
25
|
+
*/
|
|
26
|
+
type GetWalletAddressesForChainAliasCallback = (chainAlias: AvalancheBlockchainAlias) => Promise<string[]> | string[];
|
|
27
|
+
/**
|
|
28
|
+
* Get the address that will receive the "change" after transactions
|
|
29
|
+
*/
|
|
30
|
+
type GetWalletChangeAddressForChainAliasCallback = (chainAlias: AvalancheBlockchainAlias) => Promise<string> | string;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { GetAtomicUtxosCallback, GetCoreEthAddressCallback, GetUtxosCallback, GetWalletAddressesForChainAliasCallback, GetWalletChangeAddressForChainAliasCallback };
|
|
33
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AvalancheBlockchainAlias } from "../../constants.js";
|
|
2
|
+
import { Address } from "viem";
|
|
3
|
+
import { utils } from "@avalabs/avalanchejs";
|
|
4
|
+
|
|
5
|
+
//#region src/transfer-service/avalanche-cct/types.d.ts
|
|
6
|
+
type UtxoSet = utils.UtxoSet;
|
|
7
|
+
/**
|
|
8
|
+
* Returns a list of atomic UTXOs that have not been imported
|
|
9
|
+
* into the destination chain from the source chain yet.
|
|
10
|
+
*
|
|
11
|
+
* i.e. An export transaction occurred on the source chain, but a
|
|
12
|
+
* corresponding import transaction has not been executed on the destination chain yet.
|
|
13
|
+
*/
|
|
14
|
+
type GetAtomicUtxosCallback = (destinationChain: AvalancheBlockchainAlias, sourceChain: AvalancheBlockchainAlias) => Promise<UtxoSet>;
|
|
15
|
+
/**
|
|
16
|
+
* Returns a list of UTXOs that are available to be used for a transfer on the specified chain.
|
|
17
|
+
*/
|
|
18
|
+
type GetUtxosCallback = (chainAlias: Exclude<AvalancheBlockchainAlias, "C">) => Promise<UtxoSet>;
|
|
19
|
+
/**
|
|
20
|
+
* Given an EVM hex address, returns the corresponding Coreth bech32 address.
|
|
21
|
+
*/
|
|
22
|
+
type GetCoreEthAddressCallback = (evmAddress: Address) => Promise<string> | string;
|
|
23
|
+
/**
|
|
24
|
+
* Given a chain alias, returns a list of addresses that the connected wallet controls on that chain.
|
|
25
|
+
*/
|
|
26
|
+
type GetWalletAddressesForChainAliasCallback = (chainAlias: AvalancheBlockchainAlias) => Promise<string[]> | string[];
|
|
27
|
+
/**
|
|
28
|
+
* Get the address that will receive the "change" after transactions
|
|
29
|
+
*/
|
|
30
|
+
type GetWalletChangeAddressForChainAliasCallback = (chainAlias: AvalancheBlockchainAlias) => Promise<string> | string;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { GetAtomicUtxosCallback, GetCoreEthAddressCallback, GetUtxosCallback, GetWalletAddressesForChainAliasCallback, GetWalletChangeAddressForChainAliasCallback };
|
|
33
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../../constants.cjs`),t=require(`../../../utils/asset-id.cjs`);function
|
|
1
|
+
const e=require(`../../../constants.cjs`),t=require(`../../../utils/asset-id.cjs`),n=({assets:e,limit:t,page:n})=>{let r=(n-1)*t,i=e.slice(r,r+t),a=r+i.length<e.length;return{assets:i,meta:{currentPage:n,hasMore:a,...a?{nextPage:n+1}:{}}}};function r({serviceAssets:r}){return async({sourceAsset:i,sourceChainId:a,targetChainId:o,limit:s,page:c})=>{let l=s??100,u=c??1,d=r[a];if(!d)return n({assets:[],limit:l,page:u});let f=t.getAssetId(a,i),p=d.find(e=>t.getAssetId(a,e)===f);if(!p)return n({assets:[],limit:l,page:u});let m=p.destinations[o];if(!m)return n({assets:[],limit:l,page:u});let h=r[o];if(!h)return n({assets:[],limit:l,page:u});let g=h.find(e=>`address`in e&&e.address.toLowerCase()===m.address.toLowerCase());if(!g)return n({assets:[],limit:l,page:u});let _;return _=g.type===`native`?{id:t.getAssetId(o,g),type:g.type,name:g.name,symbol:g.symbol,decimals:g.decimals,...g.logoUri!==void 0&&{logoUri:g.logoUri},bridgeProviders:[e.ServiceType.AVALANCHE_EVM]}:(g.type,{id:t.getAssetId(o,g),type:g.type,name:g.name,symbol:g.symbol,decimals:g.decimals,address:g.address,...g.logoUri!==void 0&&{logoUri:g.logoUri},bridgeProviders:[e.ServiceType.AVALANCHE_EVM]}),n({assets:[_],limit:l,page:u})}}exports.getBridgeableAssetsFactory=r;
|
|
2
2
|
//# sourceMappingURL=get-bridgeable-assets.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-bridgeable-assets.cjs","names":["getAssetId","ServiceType"],"sources":["../../../../src/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { BridgeableUiAsset, ChainAssetMap } from '../../../types/asset';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport { getAssetId } from '../../../utils/asset-id';\n\nexport function getBridgeableAssetsFactory({\n serviceAssets,\n}: {\n serviceAssets: ChainAssetMap;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<
|
|
1
|
+
{"version":3,"file":"get-bridgeable-assets.cjs","names":["getAssetId","ServiceType"],"sources":["../../../../src/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { BridgeableUiAsset, ChainAssetMap } from '../../../types/asset';\nimport type { GetBridgeableAssetsProps, GetBridgeableAssetsResult, TransferService } from '../../../types/service';\nimport { getAssetId } from '../../../utils/asset-id';\n\nconst DEFAULT_PAGE = 1;\nconst DEFAULT_LIMIT = 100;\n\nconst paginateAssets = ({\n assets,\n limit,\n page,\n}: {\n assets: readonly BridgeableUiAsset[];\n limit: number;\n page: number;\n}): GetBridgeableAssetsResult => {\n const startIndex = (page - 1) * limit;\n const pageAssets = assets.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + pageAssets.length < assets.length;\n\n return {\n assets: pageAssets,\n meta: {\n currentPage: page,\n hasMore,\n ...(hasMore ? { nextPage: page + 1 } : {}),\n },\n };\n};\n\nexport function getBridgeableAssetsFactory({\n serviceAssets,\n}: {\n serviceAssets: ChainAssetMap;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n limit,\n page,\n }: GetBridgeableAssetsProps): Promise<GetBridgeableAssetsResult> => {\n const pageLimit = limit ?? DEFAULT_LIMIT;\n const currentPage = page ?? DEFAULT_PAGE;\n\n const sourceChainAssets = serviceAssets[sourceChainId];\n if (!sourceChainAssets) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n const sourceId = getAssetId(sourceChainId, sourceAsset);\n const found = sourceChainAssets.find((a) => getAssetId(sourceChainId, a) === sourceId);\n if (!found) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n const destination = found.destinations[targetChainId];\n if (!destination) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n const targetChainAssets = serviceAssets[targetChainId];\n if (!targetChainAssets) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n const target = targetChainAssets.find(\n (a) => 'address' in a && a.address.toLowerCase() === destination.address.toLowerCase(),\n );\n if (!target) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n let bridgeableAsset: BridgeableUiAsset;\n\n if (target.type === 'native') {\n bridgeableAsset = {\n id: getAssetId(targetChainId, target),\n type: target.type,\n name: target.name,\n symbol: target.symbol,\n decimals: target.decimals,\n ...(target.logoUri !== undefined && { logoUri: target.logoUri }),\n bridgeProviders: [ServiceType.AVALANCHE_EVM],\n };\n } else if (target.type === 'erc20') {\n bridgeableAsset = {\n id: getAssetId(targetChainId, target),\n type: target.type,\n name: target.name,\n symbol: target.symbol,\n decimals: target.decimals,\n address: target.address,\n ...(target.logoUri !== undefined && { logoUri: target.logoUri }),\n bridgeProviders: [ServiceType.AVALANCHE_EVM],\n };\n } else {\n bridgeableAsset = {\n id: getAssetId(targetChainId, target),\n type: target.type,\n name: target.name,\n symbol: target.symbol,\n decimals: target.decimals,\n address: target.address,\n ...(target.logoUri !== undefined && { logoUri: target.logoUri }),\n bridgeProviders: [ServiceType.AVALANCHE_EVM],\n };\n }\n\n return paginateAssets({ assets: [bridgeableAsset], limit: pageLimit, page: currentPage });\n };\n}\n"],"mappings":"mFAQM,GAAkB,CACtB,SACA,QACA,UAK+B,CAC/B,IAAM,GAAc,EAAO,GAAK,EAC1B,EAAa,EAAO,MAAM,EAAY,EAAa,EAAM,CACzD,EAAU,EAAa,EAAW,OAAS,EAAO,OAExD,MAAO,CACL,OAAQ,EACR,KAAM,CACJ,YAAa,EACb,UACA,GAAI,EAAU,CAAE,SAAU,EAAO,EAAG,CAAG,EAAE,CAC1C,CACF,EAGH,SAAgB,EAA2B,CACzC,iBAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,gBACA,QACA,UACkE,CAClE,IAAM,EAAY,GAAS,IACrB,EAAc,GAAQ,EAEtB,EAAoB,EAAc,GACxC,GAAI,CAAC,EAAmB,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAElG,IAAM,EAAWA,EAAAA,WAAW,EAAe,EAAY,CACjD,EAAQ,EAAkB,KAAM,GAAMA,EAAAA,WAAW,EAAe,EAAE,GAAK,EAAS,CACtF,GAAI,CAAC,EAAO,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAEtF,IAAM,EAAc,EAAM,aAAa,GACvC,GAAI,CAAC,EAAa,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAE5F,IAAM,EAAoB,EAAc,GACxC,GAAI,CAAC,EAAmB,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAElG,IAAM,EAAS,EAAkB,KAC9B,GAAM,YAAa,GAAK,EAAE,QAAQ,aAAa,GAAK,EAAY,QAAQ,aAAa,CACvF,CACD,GAAI,CAAC,EAAQ,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAEvF,IAAI,EAoCJ,MAlCA,CAsBE,EAtBE,EAAO,OAAS,SACA,CAChB,GAAIA,EAAAA,WAAW,EAAe,EAAO,CACrC,KAAM,EAAO,KACb,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,SAAU,EAAO,SACjB,GAAI,EAAO,UAAY,IAAA,IAAa,CAAE,QAAS,EAAO,QAAS,CAC/D,gBAAiB,CAACC,EAAAA,YAAY,cAAc,CAC7C,EACQ,EAAO,KACE,CAChB,GAAID,EAAAA,WAAW,EAAe,EAAO,CACrC,KAAM,EAAO,KACb,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,SAAU,EAAO,SACjB,QAAS,EAAO,QAChB,GAAI,EAAO,UAAY,IAAA,IAAa,CAAE,QAAS,EAAO,QAAS,CAC/D,gBAAiB,CAACC,EAAAA,YAAY,cAAc,CAC7C,EAcI,EAAe,CAAE,OAAQ,CAAC,EAAgB,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ServiceType as e}from"../../../constants.js";import{getAssetId as t}from"../../../utils/asset-id.js";
|
|
1
|
+
import{ServiceType as e}from"../../../constants.js";import{getAssetId as t}from"../../../utils/asset-id.js";const n=({assets:e,limit:t,page:n})=>{let r=(n-1)*t,i=e.slice(r,r+t),a=r+i.length<e.length;return{assets:i,meta:{currentPage:n,hasMore:a,...a?{nextPage:n+1}:{}}}};function r({serviceAssets:r}){return async({sourceAsset:i,sourceChainId:a,targetChainId:o,limit:s,page:c})=>{let l=s??100,u=c??1,d=r[a];if(!d)return n({assets:[],limit:l,page:u});let f=t(a,i),p=d.find(e=>t(a,e)===f);if(!p)return n({assets:[],limit:l,page:u});let m=p.destinations[o];if(!m)return n({assets:[],limit:l,page:u});let h=r[o];if(!h)return n({assets:[],limit:l,page:u});let g=h.find(e=>`address`in e&&e.address.toLowerCase()===m.address.toLowerCase());if(!g)return n({assets:[],limit:l,page:u});let _;return _=g.type===`native`?{id:t(o,g),type:g.type,name:g.name,symbol:g.symbol,decimals:g.decimals,...g.logoUri!==void 0&&{logoUri:g.logoUri},bridgeProviders:[e.AVALANCHE_EVM]}:(g.type,{id:t(o,g),type:g.type,name:g.name,symbol:g.symbol,decimals:g.decimals,address:g.address,...g.logoUri!==void 0&&{logoUri:g.logoUri},bridgeProviders:[e.AVALANCHE_EVM]}),n({assets:[_],limit:l,page:u})}}export{r as getBridgeableAssetsFactory};
|
|
2
2
|
//# sourceMappingURL=get-bridgeable-assets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-bridgeable-assets.js","names":[],"sources":["../../../../src/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { BridgeableUiAsset, ChainAssetMap } from '../../../types/asset';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport { getAssetId } from '../../../utils/asset-id';\n\nexport function getBridgeableAssetsFactory({\n serviceAssets,\n}: {\n serviceAssets: ChainAssetMap;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<
|
|
1
|
+
{"version":3,"file":"get-bridgeable-assets.js","names":[],"sources":["../../../../src/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { BridgeableUiAsset, ChainAssetMap } from '../../../types/asset';\nimport type { GetBridgeableAssetsProps, GetBridgeableAssetsResult, TransferService } from '../../../types/service';\nimport { getAssetId } from '../../../utils/asset-id';\n\nconst DEFAULT_PAGE = 1;\nconst DEFAULT_LIMIT = 100;\n\nconst paginateAssets = ({\n assets,\n limit,\n page,\n}: {\n assets: readonly BridgeableUiAsset[];\n limit: number;\n page: number;\n}): GetBridgeableAssetsResult => {\n const startIndex = (page - 1) * limit;\n const pageAssets = assets.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + pageAssets.length < assets.length;\n\n return {\n assets: pageAssets,\n meta: {\n currentPage: page,\n hasMore,\n ...(hasMore ? { nextPage: page + 1 } : {}),\n },\n };\n};\n\nexport function getBridgeableAssetsFactory({\n serviceAssets,\n}: {\n serviceAssets: ChainAssetMap;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n limit,\n page,\n }: GetBridgeableAssetsProps): Promise<GetBridgeableAssetsResult> => {\n const pageLimit = limit ?? DEFAULT_LIMIT;\n const currentPage = page ?? DEFAULT_PAGE;\n\n const sourceChainAssets = serviceAssets[sourceChainId];\n if (!sourceChainAssets) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n const sourceId = getAssetId(sourceChainId, sourceAsset);\n const found = sourceChainAssets.find((a) => getAssetId(sourceChainId, a) === sourceId);\n if (!found) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n const destination = found.destinations[targetChainId];\n if (!destination) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n const targetChainAssets = serviceAssets[targetChainId];\n if (!targetChainAssets) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n const target = targetChainAssets.find(\n (a) => 'address' in a && a.address.toLowerCase() === destination.address.toLowerCase(),\n );\n if (!target) return paginateAssets({ assets: [], limit: pageLimit, page: currentPage });\n\n let bridgeableAsset: BridgeableUiAsset;\n\n if (target.type === 'native') {\n bridgeableAsset = {\n id: getAssetId(targetChainId, target),\n type: target.type,\n name: target.name,\n symbol: target.symbol,\n decimals: target.decimals,\n ...(target.logoUri !== undefined && { logoUri: target.logoUri }),\n bridgeProviders: [ServiceType.AVALANCHE_EVM],\n };\n } else if (target.type === 'erc20') {\n bridgeableAsset = {\n id: getAssetId(targetChainId, target),\n type: target.type,\n name: target.name,\n symbol: target.symbol,\n decimals: target.decimals,\n address: target.address,\n ...(target.logoUri !== undefined && { logoUri: target.logoUri }),\n bridgeProviders: [ServiceType.AVALANCHE_EVM],\n };\n } else {\n bridgeableAsset = {\n id: getAssetId(targetChainId, target),\n type: target.type,\n name: target.name,\n symbol: target.symbol,\n decimals: target.decimals,\n address: target.address,\n ...(target.logoUri !== undefined && { logoUri: target.logoUri }),\n bridgeProviders: [ServiceType.AVALANCHE_EVM],\n };\n }\n\n return paginateAssets({ assets: [bridgeableAsset], limit: pageLimit, page: currentPage });\n };\n}\n"],"mappings":"4GAKA,MAGM,GAAkB,CACtB,SACA,QACA,UAK+B,CAC/B,IAAM,GAAc,EAAO,GAAK,EAC1B,EAAa,EAAO,MAAM,EAAY,EAAa,EAAM,CACzD,EAAU,EAAa,EAAW,OAAS,EAAO,OAExD,MAAO,CACL,OAAQ,EACR,KAAM,CACJ,YAAa,EACb,UACA,GAAI,EAAU,CAAE,SAAU,EAAO,EAAG,CAAG,EAAE,CAC1C,CACF,EAGH,SAAgB,EAA2B,CACzC,iBAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,gBACA,QACA,UACkE,CAClE,IAAM,EAAY,GAAS,IACrB,EAAc,GAAQ,EAEtB,EAAoB,EAAc,GACxC,GAAI,CAAC,EAAmB,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAElG,IAAM,EAAW,EAAW,EAAe,EAAY,CACjD,EAAQ,EAAkB,KAAM,GAAM,EAAW,EAAe,EAAE,GAAK,EAAS,CACtF,GAAI,CAAC,EAAO,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAEtF,IAAM,EAAc,EAAM,aAAa,GACvC,GAAI,CAAC,EAAa,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAE5F,IAAM,EAAoB,EAAc,GACxC,GAAI,CAAC,EAAmB,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAElG,IAAM,EAAS,EAAkB,KAC9B,GAAM,YAAa,GAAK,EAAE,QAAQ,aAAa,GAAK,EAAY,QAAQ,aAAa,CACvF,CACD,GAAI,CAAC,EAAQ,OAAO,EAAe,CAAE,OAAQ,EAAE,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC,CAEvF,IAAI,EAoCJ,MAlCA,CAsBE,EAtBE,EAAO,OAAS,SACA,CAChB,GAAI,EAAW,EAAe,EAAO,CACrC,KAAM,EAAO,KACb,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,SAAU,EAAO,SACjB,GAAI,EAAO,UAAY,IAAA,IAAa,CAAE,QAAS,EAAO,QAAS,CAC/D,gBAAiB,CAAC,EAAY,cAAc,CAC7C,EACQ,EAAO,KACE,CAChB,GAAI,EAAW,EAAe,EAAO,CACrC,KAAM,EAAO,KACb,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,SAAU,EAAO,SACjB,QAAS,EAAO,QAChB,GAAI,EAAO,UAAY,IAAA,IAAa,CAAE,QAAS,EAAO,QAAS,CAC/D,gBAAiB,CAAC,EAAY,cAAc,CAC7C,EAcI,EAAe,CAAE,OAAQ,CAAC,EAAgB,CAAE,MAAO,EAAW,KAAM,EAAa,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../_utils.cjs`),r=require(`../../../_utils/chain.cjs`),i=require(`../_utils/validations.cjs`),a=require(`../_utils/transfer-data.cjs`),o=require(`./get-minimum-transfer-amount.cjs`),s=require(`../_utils/unwrap.cjs`),c=require(`../_utils/wrap.cjs`);let l=require(`viem`);function u({config:u,evmSigner:d,feeEstimationMultiplier:f}){return async({gasSettings:p,onStepChange:m,quote:h})=>{if(!(0,l.isAddress)(h.fromAddress)||!(0,l.isAddress)(h.toAddress))throw new t.InvalidParamsError(t.ErrorReason.INVALID_PARAMS,"`fromAddress` and `toAddress` must be valid EVM addresses.");i.validateTransferAddressesOrThrow(h.fromAddress,h.toAddress),i.validateTransferAddressesNotBlockedOrThrow([h.fromAddress,h.toAddress],u.addressBlocklist),i.validateChainCombinationOrThrow(h.sourceChain.chainId,h.targetChain.chainId);let g=await o.getMinimumTransferAmountFactory({config:u,feeEstimationMultiplier:f})({sourceAsset:h.assetIn,sourceChainId:h.sourceChain.chainId,targetAsset:h.assetOut,targetChainId:h.targetChain.chainId});if(h.amountIn<g)throw new t.InvalidParamsError(t.ErrorReason.INVALID_PARAMS,`Transfer amount is below the minimum transfer amount of ${g.toString()}`);let{ethToAva:_,source:v}=a.getTransferData({assetIn:h.assetIn,sourceChainId:h.sourceChain.chainId,targetChainId:h.targetChain.chainId},u),y=Date.now(),b,x,S=n.getEvmClientForChain({chain:h.targetChain}),C;try{C=await S.getBlockNumber()}catch{}_?[b,x]=await c.transferAssetFromEthToAva({amountIn:h.amountIn,assetIn:h.assetIn,evmConfig:u,fromAddress:h.fromAddress,sign:d.sign,source:v,sourceChain:h.sourceChain,targetChain:h.targetChain,gasSettings:p,onStepChange:m,quote:h}):[b,x]=await s.transferAssetFromAvaToEth({amountIn:h.amountIn,fromAddress:h.fromAddress,sign:d.sign,source:v,sourceChain:h.sourceChain,gasSettings:p,onStepChange:m,quote:h});let w=r.isAvalancheChain(h.sourceChain)?u.minimumConfirmations.avalanche:u.minimumConfirmations.ethereum;return x.status===`reverted`?{amountIn:h.amountIn,amountOut:h.amountOut,environment:u.environment,errorCode:t.ErrorCode.TRANSACTION_REVERTED,failedAtMs:Date.now(),fees:h.fees,fromAddress:h.fromAddress,id:h.id,partnerFeeBps:h.partnerFeeBps,source:{confirmationCount:0,requiredConfirmationCount:w,startedAtMs:y,txHash:b},sourceAsset:h.assetIn,sourceChain:h.sourceChain,status:`failed`,targetAsset:h.assetOut,targetChain:h.targetChain,toAddress:h.toAddress,type:e.ServiceType.AVALANCHE_EVM}:{amountIn:h.amountIn,amountOut:h.amountOut,environment:u.environment,fees:h.fees,fromAddress:h.fromAddress,id:h.id,partnerFeeBps:h.partnerFeeBps,source:{confirmationCount:1,requiredConfirmationCount:w,startedAtMs:y,targetStartBlockNumber:C,txHash:b},sourceAsset:h.assetIn,sourceChain:h.sourceChain,status:`source-pending`,targetAsset:h.assetOut,targetChain:h.targetChain,toAddress:h.toAddress,type:e.ServiceType.AVALANCHE_EVM}}}exports.transferAssetFactory=u;
|
|
2
2
|
//# sourceMappingURL=transfer-asset.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ServiceType as e}from"../../../constants.js";import{ErrorCode as t,ErrorReason as n,InvalidParamsError as r}from"../../../errors.js";import{
|
|
1
|
+
import{ServiceType as e}from"../../../constants.js";import{ErrorCode as t,ErrorReason as n,InvalidParamsError as r}from"../../../errors.js";import{getEvmClientForChain as i}from"../../_utils.js";import{isAvalancheChain as a}from"../../../_utils/chain.js";import{validateChainCombinationOrThrow as o,validateTransferAddressesNotBlockedOrThrow as s,validateTransferAddressesOrThrow as c}from"../_utils/validations.js";import{getTransferData as l}from"../_utils/transfer-data.js";import{getMinimumTransferAmountFactory as u}from"./get-minimum-transfer-amount.js";import{transferAssetFromAvaToEth as d}from"../_utils/unwrap.js";import{transferAssetFromEthToAva as f}from"../_utils/wrap.js";import{isAddress as p}from"viem";function m({config:m,evmSigner:h,feeEstimationMultiplier:g}){return async({gasSettings:_,onStepChange:v,quote:y})=>{if(!p(y.fromAddress)||!p(y.toAddress))throw new r(n.INVALID_PARAMS,"`fromAddress` and `toAddress` must be valid EVM addresses.");c(y.fromAddress,y.toAddress),s([y.fromAddress,y.toAddress],m.addressBlocklist),o(y.sourceChain.chainId,y.targetChain.chainId);let b=await u({config:m,feeEstimationMultiplier:g})({sourceAsset:y.assetIn,sourceChainId:y.sourceChain.chainId,targetAsset:y.assetOut,targetChainId:y.targetChain.chainId});if(y.amountIn<b)throw new r(n.INVALID_PARAMS,`Transfer amount is below the minimum transfer amount of ${b.toString()}`);let{ethToAva:x,source:S}=l({assetIn:y.assetIn,sourceChainId:y.sourceChain.chainId,targetChainId:y.targetChain.chainId},m),C=Date.now(),w,T,E=i({chain:y.targetChain}),D;try{D=await E.getBlockNumber()}catch{}x?[w,T]=await f({amountIn:y.amountIn,assetIn:y.assetIn,evmConfig:m,fromAddress:y.fromAddress,sign:h.sign,source:S,sourceChain:y.sourceChain,targetChain:y.targetChain,gasSettings:_,onStepChange:v,quote:y}):[w,T]=await d({amountIn:y.amountIn,fromAddress:y.fromAddress,sign:h.sign,source:S,sourceChain:y.sourceChain,gasSettings:_,onStepChange:v,quote:y});let O=a(y.sourceChain)?m.minimumConfirmations.avalanche:m.minimumConfirmations.ethereum;return T.status===`reverted`?{amountIn:y.amountIn,amountOut:y.amountOut,environment:m.environment,errorCode:t.TRANSACTION_REVERTED,failedAtMs:Date.now(),fees:y.fees,fromAddress:y.fromAddress,id:y.id,partnerFeeBps:y.partnerFeeBps,source:{confirmationCount:0,requiredConfirmationCount:O,startedAtMs:C,txHash:w},sourceAsset:y.assetIn,sourceChain:y.sourceChain,status:`failed`,targetAsset:y.assetOut,targetChain:y.targetChain,toAddress:y.toAddress,type:e.AVALANCHE_EVM}:{amountIn:y.amountIn,amountOut:y.amountOut,environment:m.environment,fees:y.fees,fromAddress:y.fromAddress,id:y.id,partnerFeeBps:y.partnerFeeBps,source:{confirmationCount:1,requiredConfirmationCount:O,startedAtMs:C,targetStartBlockNumber:D,txHash:w},sourceAsset:y.assetIn,sourceChain:y.sourceChain,status:`source-pending`,targetAsset:y.assetOut,targetChain:y.targetChain,toAddress:y.toAddress,type:e.AVALANCHE_EVM}}}export{m as transferAssetFactory};
|
|
2
2
|
//# sourceMappingURL=transfer-asset.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../../type-guards.cjs`),r=require(`../../../utils/caip.cjs`),i=require(
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../../type-guards.cjs`),r=require(`../../../utils/caip.cjs`),i=require(`../../_utils.cjs`),a=require(`../../../_utils/chain.cjs`),o=require(`../../_abis.cjs`);let s=require(`viem`);async function c({amountIn:e,assetIn:t,evmConfig:r,fromAddress:i,gasSettings:a,onStepChange:o,quote:s,sign:c,source:u,sourceChain:d,targetChain:p}){return n.isNativeAsset(t)?f({amountIn:e,evmConfig:r,fromAddress:i,source:u,sourceChain:d,targetChain:p,quote:s,sign:c,onStepChange:o,gasSettings:a}):l({amountIn:e,evmConfig:r,source:u,sourceChain:d,quote:s,fromAddress:i,sign:c,onStepChange:o,gasSettings:a})}async function l({amountIn:t,evmConfig:n,fromAddress:a,gasSettings:o,onStepChange:c,quote:l,sign:u,source:d,sourceChain:f}){let p=n.walletAddresses.ethereum,m=i.getEvmClientForChain({chain:f}),h={currentSignature:1,currentSignatureReason:e.TransferSignatureReason.TokensTransfer,quote:l,requiredSignatures:1};c?.(h);let g=(0,s.encodeFunctionData)({abi:s.erc20Abi,functionName:`transfer`,args:[p,t]}),_=await u({chainId:r.caip2ToEip155HexChainId(f.chainId),data:g,from:a,to:d.token.address,...o?.maxFeePerGas===void 0?null:{maxFeePerGas:o.maxFeePerGas,maxPriorityFeePerGas:o.maxPriorityFeePerGas}},e=>m.sendRawTransaction({serializedTransaction:e}),h);return[_,await m.waitForTransactionReceipt({hash:_})]}const u={[e.Blockchain.ETHEREUM]:`0x6b7a87899490EcE95443e979cA9485CBE7E71522`,[e.Blockchain.AVALANCHE]:`0x9b17bAADf0f21F03e35249e0e59723F34994F806`};async function d({evmConfig:t,fromAddress:n,sourceChain:r,targetChain:o}){if(!(t.environment===e.Environment.PROD&&a.isMainnetChain(r)&&a.isMainnetChain(o)))return!1;let c=t.nativeTokenConfig.ethereumToken,l=t.nativeTokenConfig.avalancheToken;try{return await i.getEvmClientForChain({chain:r}).readContract({address:c.token.address,abi:s.erc20Abi,functionName:`allowance`,args:[n,u[e.Blockchain.ETHEREUM]]})>0n?!0:await i.getEvmClientForChain({chain:o}).readContract({address:l.token.address,abi:s.erc20Abi,functionName:`allowance`,args:[n,u[e.Blockchain.AVALANCHE]]})>0n}catch{return!1}}async function f({amountIn:n,evmConfig:c,fromAddress:l,gasSettings:u,onStepChange:f,quote:p,sign:m,source:h,sourceChain:g,targetChain:_}){let v=c.walletAddresses.ethereum,y=i.getEvmClientForChain({chain:g});if(!a.isAvalancheChain(_))throw new t.InvalidParamsError(t.ErrorReason.INVALID_PARAMS,`Invalid chain combinations for wrapping native asset`);if(await d({evmConfig:c,fromAddress:l,sourceChain:g,targetChain:_}))throw new t.InvalidParamsError(t.ErrorReason.VULNERABLE_TOKEN_APPROVAL_ADDRESS,`The fromAddress has token approvals for addresses involved in the multichain incident. Please revoke the approvals before proceeding with the transfer.`);let b={currentSignature:1,currentSignatureReason:e.TransferSignatureReason.WrapToken,quote:p,requiredSignatures:2};f?.(b);let x=(0,s.encodeFunctionData)({abi:o.WETH_ABI,functionName:`deposit`}),S=await m({chainId:r.caip2ToEip155HexChainId(g.chainId),data:x,from:l,to:h.token.address,value:n,...u?.maxFeePerGas===void 0?null:{maxFeePerGas:u.maxFeePerGas,maxPriorityFeePerGas:u.maxPriorityFeePerGas}},e=>y.sendRawTransaction({serializedTransaction:e}),b),C=await y.waitForTransactionReceipt({hash:S});if(C.status===`reverted`)return[S,C];let w={currentSignature:2,currentSignatureReason:e.TransferSignatureReason.TokensTransfer,quote:p,requiredSignatures:2};f?.(w);let T=(0,s.encodeFunctionData)({abi:s.erc20Abi,functionName:`transfer`,args:[v,n]}),E=await m({chainId:r.caip2ToEip155HexChainId(g.chainId),data:T,from:l,to:h.token.address,...u?.maxFeePerGas===void 0?null:{maxFeePerGas:u.maxFeePerGas,maxPriorityFeePerGas:u.maxPriorityFeePerGas}},e=>y.sendRawTransaction({serializedTransaction:e}),w);return[E,await y.waitForTransactionReceipt({hash:E})]}exports.transferAssetFromEthToAva=c;
|
|
2
2
|
//# sourceMappingURL=wrap.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Blockchain as e,Environment as t,TransferSignatureReason as n}from"../../../constants.js";import{ErrorReason as r,InvalidParamsError as i}from"../../../errors.js";import{isNativeAsset as a}from"../../../type-guards.js";import{caip2ToEip155HexChainId as o}from"../../../utils/caip.js";import{
|
|
1
|
+
import{Blockchain as e,Environment as t,TransferSignatureReason as n}from"../../../constants.js";import{ErrorReason as r,InvalidParamsError as i}from"../../../errors.js";import{isNativeAsset as a}from"../../../type-guards.js";import{caip2ToEip155HexChainId as o}from"../../../utils/caip.js";import{getEvmClientForChain as s}from"../../_utils.js";import{isAvalancheChain as c,isMainnetChain as l}from"../../../_utils/chain.js";import{WETH_ABI as u}from"../../_abis.js";import{encodeFunctionData as d,erc20Abi as f}from"viem";async function p({amountIn:e,assetIn:t,evmConfig:n,fromAddress:r,gasSettings:i,onStepChange:o,quote:s,sign:c,source:l,sourceChain:u,targetChain:d}){return a(t)?_({amountIn:e,evmConfig:n,fromAddress:r,source:l,sourceChain:u,targetChain:d,quote:s,sign:c,onStepChange:o,gasSettings:i}):m({amountIn:e,evmConfig:n,source:l,sourceChain:u,quote:s,fromAddress:r,sign:c,onStepChange:o,gasSettings:i})}async function m({amountIn:e,evmConfig:t,fromAddress:r,gasSettings:i,onStepChange:a,quote:c,sign:l,source:u,sourceChain:p}){let m=t.walletAddresses.ethereum,h=s({chain:p}),g={currentSignature:1,currentSignatureReason:n.TokensTransfer,quote:c,requiredSignatures:1};a?.(g);let _=d({abi:f,functionName:`transfer`,args:[m,e]}),v=await l({chainId:o(p.chainId),data:_,from:r,to:u.token.address,...i?.maxFeePerGas===void 0?null:{maxFeePerGas:i.maxFeePerGas,maxPriorityFeePerGas:i.maxPriorityFeePerGas}},e=>h.sendRawTransaction({serializedTransaction:e}),g);return[v,await h.waitForTransactionReceipt({hash:v})]}const h={[e.ETHEREUM]:`0x6b7a87899490EcE95443e979cA9485CBE7E71522`,[e.AVALANCHE]:`0x9b17bAADf0f21F03e35249e0e59723F34994F806`};async function g({evmConfig:n,fromAddress:r,sourceChain:i,targetChain:a}){if(!(n.environment===t.PROD&&l(i)&&l(a)))return!1;let o=n.nativeTokenConfig.ethereumToken,c=n.nativeTokenConfig.avalancheToken;try{return await s({chain:i}).readContract({address:o.token.address,abi:f,functionName:`allowance`,args:[r,h[e.ETHEREUM]]})>0n?!0:await s({chain:a}).readContract({address:c.token.address,abi:f,functionName:`allowance`,args:[r,h[e.AVALANCHE]]})>0n}catch{return!1}}async function _({amountIn:e,evmConfig:t,fromAddress:a,gasSettings:l,onStepChange:p,quote:m,sign:h,source:_,sourceChain:v,targetChain:y}){let b=t.walletAddresses.ethereum,x=s({chain:v});if(!c(y))throw new i(r.INVALID_PARAMS,`Invalid chain combinations for wrapping native asset`);if(await g({evmConfig:t,fromAddress:a,sourceChain:v,targetChain:y}))throw new i(r.VULNERABLE_TOKEN_APPROVAL_ADDRESS,`The fromAddress has token approvals for addresses involved in the multichain incident. Please revoke the approvals before proceeding with the transfer.`);let S={currentSignature:1,currentSignatureReason:n.WrapToken,quote:m,requiredSignatures:2};p?.(S);let C=d({abi:u,functionName:`deposit`}),w=await h({chainId:o(v.chainId),data:C,from:a,to:_.token.address,value:e,...l?.maxFeePerGas===void 0?null:{maxFeePerGas:l.maxFeePerGas,maxPriorityFeePerGas:l.maxPriorityFeePerGas}},e=>x.sendRawTransaction({serializedTransaction:e}),S),T=await x.waitForTransactionReceipt({hash:w});if(T.status===`reverted`)return[w,T];let E={currentSignature:2,currentSignatureReason:n.TokensTransfer,quote:m,requiredSignatures:2};p?.(E);let D=d({abi:f,functionName:`transfer`,args:[b,e]}),O=await h({chainId:o(v.chainId),data:D,from:a,to:_.token.address,...l?.maxFeePerGas===void 0?null:{maxFeePerGas:l.maxFeePerGas,maxPriorityFeePerGas:l.maxPriorityFeePerGas}},e=>x.sendRawTransaction({serializedTransaction:e}),E);return[O,await x.waitForTransactionReceipt({hash:O})]}export{p as transferAssetFromEthToAva};
|
|
2
2
|
//# sourceMappingURL=wrap.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e=require(`../errors.cjs`),t=[`GET`,`HEAD`,`OPTIONS`,`TRACE`];
|
|
1
|
+
const e=require(`../errors.cjs`),t=require(`./_utils.cjs`),n=[`GET`,`HEAD`,`OPTIONS`,`TRACE`];function r(e){if(!e)return null;let t=Number(e);if(!Number.isNaN(t)&&t>=0)return Math.floor(t)*1e3;let n=new Date(e).getTime()-Date.now();return Number.isFinite(n)&&n>0?n:null}function i(e,t={}){let n=Math.max(1,Math.floor(t.baseMs??200)),r=Math.max(n,Math.floor(t.maxMs??5e3)),i=Math.min(r,n*2**e);return Math.floor(Math.random()*i)}function a(t,n){let r=(t.init.method??`GET`).toUpperCase();if(!n.includes(r))return!1;if(t.error)return!(t.error instanceof e.AbortedError);let i=t.response?.status??0;return i===408||i===425||i===429||i>=500&&i<=599}function o(t,n){let r=new AbortController,i,a=!1,o=()=>{r.abort(t?.reason??new e.AbortedError)};return t&&(t.aborted?r.abort(t.reason??new e.AbortedError):t.addEventListener(`abort`,o)),n&&n>0&&(i=setTimeout(()=>{a=!0,r.abort(new e.TimeoutError)},n)),{cleanup:()=>{t&&t.removeEventListener(`abort`,o),i&&clearTimeout(i)},signal:r.signal,timedOut:()=>a}}function s(e,t,n,r){return n??(typeof r?.backoff==`function`?r.backoff(t):i(e,r?.backoff))}async function c(e){if((e.headers.get(`content-type`)??``).includes(`application/json`))try{return await e.clone().json()}catch{}try{return await e.clone().text()}catch{}}async function l(i,l={},u={}){let{fetch:d,retries:f=3,retryMethods:p=n,retryOn:m=e=>a(e,p)}=u,h=d??globalThis.fetch,g;for(let n=0;n<=f;n++){let{cleanup:a,signal:d,timedOut:p}=o(u.signal,u.timeoutMs);try{let o=await h(i,{...l,signal:d});if(o.ok)return a(),o;let p={attempt:n,init:l,input:i,response:o};if(!await m(p)||n===f){let t;try{t=await c(o)}catch{}throw a(),new e.HttpError(`HTTP ${o.status} ${o.statusText}`,o,t)}let g=r(o.headers.get(`retry-after`)),_=s(n,p,g,u);a(),await t.wait(_,u.signal);continue}catch(r){a(),g=r;let o=e.isAbortedError(r),c={attempt:n,error:r,init:l,input:i};if(!(!o&&await m(c))||n===f)throw p()?new e.TimeoutError:o?new e.AbortedError(r.message??`Aborted`):r;await t.wait(s(n,c,null,u),u.signal);continue}}throw g??Error(`Unknown fetch error.`)}function u(){let e=null;return t=>{if(t.trim()===``){if(e&&typeof e.data==`string`){let t={data:e.data,event:e.event,id:e.id,retry:e.retry};return e=null,t}return e=null,null}let n=t.indexOf(`:`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n+1):``;switch(i.startsWith(` `)&&(i=i.slice(1)),e??={},r){case`data`:e.data=(e.data?e.data+`
|
|
2
2
|
`:``)+i;break;case`event`:e.event=i;break;case`id`:e.id=i;break;case`retry`:{let t=Number(i);if(Number.isFinite(t)){e.retry=Math.floor(t);break}}}return null}}async function d(t,n={}){let r={Accept:n.accept??`application/json`,...n.headers??{}},i=n.body,a=i!=null,o=(n.method??(a?`POST`:`GET`)).toUpperCase();if(a){let e=n.contentType??`application/json`;r[`Content-Type`]||=e}let s=await l(t,{method:o,headers:r,body:i},n);if(!s.headers.get(`content-type`)?.includes(`application/json`))throw new e.HttpError(`Expected application/json response.`,s,await s.text());return await s.json()}function f(e,t){let n=e.pathname,r=n.endsWith(`/`)&&t.startsWith(`/`)?n+t.slice(1):!n.endsWith(`/`)&&!t.startsWith(`/`)?n+`/`+t:n+t;return new URL(r,e)}async function*p(t,n={}){let r={Accept:n.accept??(n.sse===!1?`*/*`:`text/event-stream`),...n.headers??{}},i=n.body,a=i!=null,o=(n.method??(a?`POST`:`GET`)).toUpperCase();if(a){let e=n.contentType??`application/json`;r[`Content-Type`]||=e}let s=await l(t,{body:i,headers:r,method:o},n);if(!s.body)throw new e.HttpError(`Response body is not a readable stream.`,s);let c=s.body.getReader(),d=new TextDecoder,f=u(),p=``;try{for(;;){let{done:e,value:t}=await c.read();if(e)break;p+=d.decode(t,{stream:!0});let r;for(;(r=p.indexOf(`
|
|
3
3
|
`))>=0;){let e=p.slice(0,r);if(p=p.slice(r+1),n.sse===!1)e.length&&(yield e);else{let t=f(e);t&&(yield t)}}}n.sse===!1&&p.length&&(yield p)}finally{try{c.releaseLock()}catch{}}}exports.combineUrlPathnames=f,exports.fetchEventStream=p,exports.fetchJson=d;
|
|
4
4
|
//# sourceMappingURL=fetch-utilities.cjs.map
|