@avalabs/fusion-sdk 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mod.cjs +1 -1
- package/dist/mod.d.cts +2 -2
- package/dist/mod.d.ts +2 -2
- package/dist/mod.js +1 -1
- package/dist/transfer-manager.cjs +1 -1
- package/dist/transfer-manager.cjs.map +1 -1
- package/dist/transfer-manager.js +1 -1
- package/dist/transfer-manager.js.map +1 -1
- package/dist/transfer-service/_tracking-utilities.cjs +1 -1
- package/dist/transfer-service/_tracking-utilities.cjs.map +1 -1
- package/dist/transfer-service/_tracking-utilities.js +1 -1
- package/dist/transfer-service/_tracking-utilities.js.map +1 -1
- package/dist/transfer-service/_utils.cjs +1 -1
- package/dist/transfer-service/_utils.cjs.map +1 -1
- package/dist/transfer-service/_utils.js +1 -1
- package/dist/transfer-service/_utils.js.map +1 -1
- package/dist/transfer-service/_warden-config-schema.cjs.map +1 -1
- package/dist/transfer-service/_warden-config-schema.js.map +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs.map +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js.map +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/get-config.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/get-config.js +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs.map +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js +1 -1
- package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js.map +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs.map +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js.map +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs.map +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js.map +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs.map +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.js +1 -1
- package/dist/transfer-service/markr/_handlers/estimate-native-fee.js.map +1 -1
- package/dist/transfer-service/markr/_handlers/stream-quotes.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/stream-quotes.js +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.cjs +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.cjs.map +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.js +1 -1
- package/dist/transfer-service/markr/_handlers/track-transfer.js.map +1 -1
- package/dist/transfer-service/markr/_schema.cjs +1 -1
- package/dist/transfer-service/markr/_schema.cjs.map +1 -1
- package/dist/transfer-service/markr/_schema.js +1 -1
- package/dist/transfer-service/markr/_schema.js.map +1 -1
- package/dist/transfer-service/markr/_utils.cjs +1 -1
- package/dist/transfer-service/markr/_utils.js +1 -1
- package/dist/types/transfer-manager.d.cts +0 -12
- package/dist/types/transfer-manager.d.ts +0 -12
- package/dist/types/transfer.d.cts +24 -5
- package/dist/types/transfer.d.ts +24 -5
- package/dist/utils/transfer-utils.cjs +1 -1
- package/dist/utils/transfer-utils.cjs.map +1 -1
- package/dist/utils/transfer-utils.js +1 -1
- package/dist/utils/transfer-utils.js.map +1 -1
- package/package.json +3 -3
- package/dist/_utils/merge-assets.cjs +0 -2
- package/dist/_utils/merge-assets.cjs.map +0 -1
- package/dist/_utils/merge-assets.js +0 -2
- package/dist/_utils/merge-assets.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../utils/caip.cjs`),t=require(`../service-schemas.cjs`);let n=require(`zod`);const r=n.z.string().refine(t=>e.isCaip2ChainId(t),{message:`Invalid CAIP-2 chain ID`}).transform(e=>e),i=n.z.object({chainId:n.z.union([n.z.number(),n.z.string()]),chainType:n.z.string(),enabled_services:n.z.array(n.z.enum([`cross-chain-swap`,`cross-chain-quote`,`quote`,`swap`,`token-list`])),logo_url:n.z.url(),name:n.z.string(),lanes:n.z.array(n.z.union([n.z.coerce.number().int().nonnegative(),r]))}),a=i.extend({chainId:n.z.coerce.number().int().nonnegative(),chainType:n.z.literal(`evm`),router:t.EvmAddressSchema.optional(),wrapped_token:t.EvmAddressSchema.optional()}),o=i.extend({chainId:n.z.string().refine(t=>e.isCaip2ChainId(t)&&t.startsWith(`solana:`),{error:`Is not a valid Solana CAIP-2 ID`}).transform(e=>e),chainType:n.z.literal(`svm`)}),s=n.z.array(n.z.union([a,o,i.refine(e=>e.chainType!==`evm`&&e.chainType!==`svm`,`Known chain types must match their expected schema`)])),c=n.z.array(n.z.object({address:t.EvmAddressSchema,decimals:n.z.number().int().nonnegative().max(18),logo_url:n.z.url(),name:n.z.string(),symbol:n.z.string()})),l=n.z.union([n.z.object({aggregator:n.z.object({id:n.z.string(),logo_url:n.z.url(),name:n.z.string()}),amountIn:n.z.coerce.bigint().nonnegative(),amountOut:n.z.coerce.bigint().nonnegative(),chainId:n.z.union([n.z.number().int().nonnegative(),r]),expiredAt:n.z.number().int().nonnegative(),fees:n.z.array(n.z.object({type:n.z.enum([`protocol`,`gas`,`bridge`,`slippage`,`swap`,`other`]),name:n.z.string(),amount:n.z.coerce.bigint().nonnegative(),token:n.z.object({chainId:n.z.union([n.z.number().int().nonnegative(),r]),address:n.z.union([t.EvmAddressSchema,t.SolAddressSchema])})})).optional(),gasEstimate:n.z.coerce.bigint().nonnegative().optional(),recommendedSlippage:n.z.number().int().nonnegative(),tokenIn:n.z.union([t.EvmAddressSchema,t.SolAddressSchema]),tokenInDecimals:n.z.number().int().nonnegative().max(18),tokenOut:n.z.union([t.EvmAddressSchema,t.SolAddressSchema]),tokenOutDecimals:n.z.number().int().nonnegative().max(18),uuid:n.z.uuid()}),n.z.object({done:n.z.literal(!0)})]),u=n.z.object({data:t.HexSchema,to:t.EvmAddressSchema,value:n.z.coerce.bigint().nonnegative()}),d=n.z.object({chainType:n.z.literal(`svm`),swapTransaction:n.z.base64()}),f=n.z.union([u,d]),p=n.z.object({fee:n.z.int().nonnegative(),name:n.z.string()}),m=/[zZ]|[+-]\d{2}:?\d{2}$/,h=n.z.iso.datetime({local:!0}).refine(e=>{let t=m.test(e)?e:e+`Z`;return n.z.iso.datetime().safeParse(t).success},{error:`Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)`}).transform(e=>m.test(e)?e:e+`Z`),g=n.z.object({messageId:n.z.string().nullable(),status:n.z.enum([`pending`,`committed`,`pending_execution`,`completed`,`failed`,`unknown`]),description:n.z.string(),sourceChain:n.z.object({name:n.z.string(),transactionHash:n.z.union([t.HashSchema,t.SolSignatureSchema]),timestamp:h,finalized:h.or(n.z.boolean()).nullable()}),destinationChain:n.z.object({name:n.z.string().nullable(),transactionHash:n.z.union([t.HashSchema,t.SolSignatureSchema]).nullable(),bridgeHash:n.z.union([t.HashSchema,t.SolSignatureSchema]).nullable().optional(),timestamp:h.nullable(),finalized:h.nullable()}),progress:n.z.object({committed:n.z.boolean(),commitTimestamp:h.nullable().optional(),executed:n.z.boolean()}),fees:n.z.object({token:n.z.union([t.EvmAddressSchema,t.SolAddressSchema]).nullable(),amount:n.z.coerce.bigint().nonnegative().nullable()}),transferredTokens:n.z.array(n.z.object({token:n.z.union([t.EvmAddressSchema,t.SolAddressSchema]),amount:n.z.coerce.bigint().nonnegative()})),debug:n.z.looseObject({messageId:n.z.string(),status:n.z.string(),destinationChain:n.z.string(),destinationTxHash:n.z.string(),relayTxHash:n.z.string(),retryCount:n.z.number().int().nonnegative(),lastRetryAt:n.z.iso.datetime(),sourceChain:n.z.string(),sourceTxHash:n.z.string(),createdAt:n.z.iso.datetime()}).nullable().optional()}),_=n.z.object({address:t.EvmAddressSchema});exports.CrossChainStatusResponseSchema=g,exports.PartnerInfoResponseSchema=p,exports.QuoteResponseSchema=l,exports.SpenderAddressResponseSchema=_,exports.SupportedChainsResponseSchema=s,exports.SwapResponseSchema=f,exports.TokenListResponseSchema=c;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../utils/caip.cjs`),t=require(`../service-schemas.cjs`);let n=require(`zod`);const r=n.z.string().refine(t=>e.isCaip2ChainId(t),{message:`Invalid CAIP-2 chain ID`}).transform(e=>e),i=n.z.object({chainId:n.z.union([n.z.number(),n.z.string()]),chainType:n.z.string(),enabled_services:n.z.array(n.z.enum([`cross-chain-swap`,`cross-chain-quote`,`quote`,`swap`,`token-list`])),logo_url:n.z.url(),name:n.z.string(),lanes:n.z.array(n.z.union([n.z.coerce.number().int().nonnegative(),r]))}),a=i.extend({chainId:n.z.coerce.number().int().nonnegative(),chainType:n.z.literal(`evm`),router:t.EvmAddressSchema.optional(),wrapped_token:t.EvmAddressSchema.optional()}),o=i.extend({chainId:n.z.string().refine(t=>e.isCaip2ChainId(t)&&t.startsWith(`solana:`),{error:`Is not a valid Solana CAIP-2 ID`}).transform(e=>e),chainType:n.z.literal(`svm`)}),s=n.z.array(n.z.union([a,o,i.refine(e=>e.chainType!==`evm`&&e.chainType!==`svm`,`Known chain types must match their expected schema`)])),c=n.z.array(n.z.object({address:t.EvmAddressSchema,decimals:n.z.number().int().nonnegative().max(18),logo_url:n.z.url(),name:n.z.string(),symbol:n.z.string()})),l=n.z.union([n.z.object({aggregator:n.z.object({id:n.z.string(),logo_url:n.z.url(),name:n.z.string()}),amountIn:n.z.coerce.bigint().nonnegative(),amountOut:n.z.coerce.bigint().nonnegative(),chainId:n.z.union([n.z.number().int().nonnegative(),r]),expiredAt:n.z.number().int().nonnegative(),fees:n.z.array(n.z.object({type:n.z.enum([`protocol`,`gas`,`bridge`,`slippage`,`swap`,`other`]),name:n.z.string(),amount:n.z.coerce.bigint().nonnegative(),token:n.z.object({chainId:n.z.union([n.z.number().int().nonnegative(),r]),address:n.z.union([t.EvmAddressSchema,t.SolAddressSchema])})})).optional(),gasEstimate:n.z.coerce.bigint().nonnegative().optional(),recommendedSlippage:n.z.number().int().nonnegative(),tokenIn:n.z.union([t.EvmAddressSchema,t.SolAddressSchema]),tokenInDecimals:n.z.number().int().nonnegative().max(18),tokenOut:n.z.union([t.EvmAddressSchema,t.SolAddressSchema]),tokenOutDecimals:n.z.number().int().nonnegative().max(18),uuid:n.z.uuid()}),n.z.object({done:n.z.literal(!0)})]),u=n.z.object({data:t.HexSchema,to:t.EvmAddressSchema,value:n.z.coerce.bigint().nonnegative()}),d=n.z.object({chainType:n.z.literal(`svm`),swapTransaction:n.z.base64()}),f=n.z.union([u,d]),p=n.z.object({fee:n.z.int().nonnegative(),name:n.z.string()}),m=/[zZ]|[+-]\d{2}:?\d{2}$/,h=n.z.iso.datetime({local:!0}).refine(e=>{let t=m.test(e)?e:e+`Z`;return n.z.iso.datetime().safeParse(t).success},{error:`Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)`}).transform(e=>m.test(e)?e:e+`Z`),g=n.z.object({messageId:n.z.string().nullable(),status:n.z.enum([`pending`,`committed`,`pending_execution`,`completed`,`failed`,`refunded`,`unknown`]),description:n.z.string(),sourceChain:n.z.object({name:n.z.string(),transactionHash:n.z.union([t.HashSchema,t.SolSignatureSchema]),timestamp:h,finalized:h.or(n.z.boolean()).nullable()}),destinationChain:n.z.object({name:n.z.string().nullable(),transactionHash:n.z.union([t.HashSchema,t.SolSignatureSchema]).nullable(),bridgeHash:n.z.union([t.HashSchema,t.SolSignatureSchema]).nullable().optional(),timestamp:h.nullable(),finalized:h.nullable()}),progress:n.z.object({committed:n.z.boolean(),commitTimestamp:h.nullable().optional(),executed:n.z.boolean()}),fees:n.z.object({token:n.z.union([t.EvmAddressSchema,t.SolAddressSchema]).nullable(),amount:n.z.coerce.bigint().nonnegative().nullable()}),transferredTokens:n.z.array(n.z.object({token:n.z.union([t.EvmAddressSchema,t.SolAddressSchema]),amount:n.z.coerce.bigint().nonnegative()})),debug:n.z.looseObject({messageId:n.z.string(),status:n.z.string(),destinationChain:n.z.string(),destinationTxHash:n.z.string(),relayTxHash:n.z.string(),retryCount:n.z.number().int().nonnegative(),lastRetryAt:n.z.iso.datetime(),sourceChain:n.z.string(),sourceTxHash:n.z.string(),createdAt:n.z.iso.datetime()}).partial().nullable().optional()}),_=n.z.object({address:t.EvmAddressSchema});exports.CrossChainStatusResponseSchema=g,exports.PartnerInfoResponseSchema=p,exports.QuoteResponseSchema=l,exports.SpenderAddressResponseSchema=_,exports.SupportedChainsResponseSchema=s,exports.SwapResponseSchema=f,exports.TokenListResponseSchema=c;
|
|
2
2
|
//# sourceMappingURL=_schema.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_schema.cjs","names":["z","isCaip2ChainId","EvmAddressSchema","SolAddressSchema","HexSchema","HashSchema","SolSignatureSchema"],"sources":["../../../src/transfer-service/markr/_schema.ts"],"sourcesContent":["import type { Signature, Address as SolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport type { Address as EvmAddress, Hash } from 'viem';\nimport { EvmAddressSchema, HashSchema, HexSchema, SolAddressSchema, SolSignatureSchema } from '../service-schemas';\nimport { isCaip2ChainId } from '../../utils/caip';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Hex } from '../../types/signer';\n\ninterface SupportedChainsResponseItemBase {\n chainId: number | string;\n chainType: string;\n /** Available services on the chain. Each service has specific functionality */\n enabled_services: Array<'cross-chain-swap' | 'cross-chain-quote' | 'quote' | 'swap' | 'token-list'>;\n /** Chain logo URL */\n logo_url: string;\n /** Chain display name */\n name: string;\n /**\n * List of chain IDs that this chain can swap to via cross-chain aggregators.\n *\n * Empty array means no cross-chain routes available.\n */\n lanes: ReadonlyArray<number | Caip2ChainId>;\n}\n\nexport interface SupportedChainsResponseItemEvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: number;\n /** Chain virtual machine type */\n chainType: 'evm';\n /** Router contract address */\n router?: EvmAddress;\n /** Native token wrapped contract address */\n wrapped_token?: EvmAddress;\n}\n\nexport interface SupportedChainsResponseItemSvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: Caip2ChainId;\n /** Chain virtual machine type */\n chainType: 'svm';\n}\n\nexport type SupportedChainsResponse = Array<\n SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm | SupportedChainsResponseItemBase\n>;\n\nexport const Caip2ChainIdSchema: z.ZodType<Caip2ChainId> = z\n .string()\n .refine((value) => isCaip2ChainId(value), {\n message: 'Invalid CAIP-2 chain ID',\n })\n .transform((value) => value as Caip2ChainId);\n\nconst SupportedChainsResponseItemBaseSchema = z.object({\n chainId: z.union([z.number(), z.string()]),\n chainType: z.string(),\n enabled_services: z.array(z.enum(['cross-chain-swap', 'cross-chain-quote', 'quote', 'swap', 'token-list'])),\n logo_url: z.url(),\n name: z.string(),\n lanes: z.array(z.union([z.coerce.number().int().nonnegative(), Caip2ChainIdSchema])),\n});\n\nconst SupportedChainsResponseItemEvmSchema: z.ZodType<SupportedChainsResponseItemEvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z.coerce.number().int().nonnegative(),\n chainType: z.literal('evm'),\n router: EvmAddressSchema.optional(),\n wrapped_token: EvmAddressSchema.optional(),\n });\n\nconst SupportedChainsResponseItemSvmSchema: z.ZodType<SupportedChainsResponseItemSvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z\n .string()\n .refine((value) => isCaip2ChainId(value) && value.startsWith('solana:'), {\n error: 'Is not a valid Solana CAIP-2 ID',\n })\n .transform((value) => value as Caip2ChainId),\n chainType: z.literal('svm'),\n });\n\n/**\n * Schema for the response from Markr's /info/chains endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1info~1chains/get\n */\nexport const SupportedChainsResponseSchema: z.ZodType<SupportedChainsResponse> = z.array(\n z.union([\n SupportedChainsResponseItemEvmSchema,\n SupportedChainsResponseItemSvmSchema,\n SupportedChainsResponseItemBaseSchema.refine(\n (item) => item.chainType !== 'evm' && item.chainType !== 'svm',\n 'Known chain types must match their expected schema',\n ),\n ]),\n);\n\nexport type TokenListResponse = Array<{\n address: EvmAddress;\n decimals: number;\n logo_url: string;\n name: string;\n symbol: string;\n}>;\n\n/**\n * Schema for the response Markr's /tokens/{chainId}/list endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1tokens~1%7BchainId%7D~1list/get\n */\nexport const TokenListResponseSchema: z.ZodType<TokenListResponse> = z.array(\n z.object({\n address: EvmAddressSchema,\n decimals: z.number().int().nonnegative().max(18),\n logo_url: z.url(),\n name: z.string(),\n symbol: z.string(),\n }),\n);\n\nexport interface QuoteResponseData {\n aggregator: {\n id: string;\n logo_url: string;\n name: string;\n };\n amountIn: bigint;\n amountOut: bigint;\n /** Chain identifier (number for EVM chains, CAIP-2 ID for SVM chains) */\n chainId: number | Caip2ChainId;\n expiredAt: number;\n /**\n * Fee breakdown for cross-chain bridge transactions.\n *\n * Only included in quotes from cross-chain aggregators (DeBridge, LiFi).\n */\n fees?: ReadonlyArray<{\n type: 'protocol' | 'gas' | 'bridge' | 'slippage' | 'swap' | 'other';\n /** Human-readable fee name */\n name: string;\n /** Fee amount in token's smallest unit */\n amount: bigint;\n /** Token the fee is deducted from */\n token: {\n /** Chain ID where fee is deducted */\n chainId: number | Caip2ChainId;\n /** Token address (EVM hex or Solana base58) */\n address: EvmAddress | SolAddress;\n };\n }>;\n gasEstimate?: bigint;\n recommendedSlippage: number;\n /** Input token address (EVM hex or Solana base58) */\n tokenIn: EvmAddress | SolAddress;\n tokenInDecimals: number;\n /** Output token address (EVM hex or Solana base58) */\n tokenOut: EvmAddress | SolAddress;\n tokenOutDecimals: number;\n uuid: string;\n}\n\nexport interface QuoteResponseDataDone {\n done: true;\n}\n\nexport type QuoteResponse = QuoteResponseData | QuoteResponseDataDone;\n\n/**\n * Schema for the response from Markr's /quote endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1quote/post\n */\nexport const QuoteResponseSchema: z.ZodType<QuoteResponse> = z.union([\n z.object({\n aggregator: z.object({\n id: z.string(),\n logo_url: z.url(),\n name: z.string(),\n }),\n amountIn: z.coerce.bigint().nonnegative(),\n amountOut: z.coerce.bigint().nonnegative(),\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n /**\n * Unix time in seconds when the quote expires.\n */\n expiredAt: z.number().int().nonnegative(),\n fees: z\n .array(\n z.object({\n type: z.enum(['protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.coerce.bigint().nonnegative(),\n token: z.object({\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n address: z.union([EvmAddressSchema, SolAddressSchema]),\n }),\n }),\n )\n .optional(),\n /**\n * Estimated gas for the swap transaction.\n * Markr estimates already include a buffer.\n *\n * The API docs do not specify this field as optional, but in practice it can be missing.\n */\n gasEstimate: z.coerce.bigint().nonnegative().optional(),\n /** Recommended slippage in basis points. */\n recommendedSlippage: z.number().int().nonnegative(),\n tokenIn: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenInDecimals: z.number().int().nonnegative().max(18),\n tokenOut: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenOutDecimals: z.number().int().nonnegative().max(18),\n uuid: z.uuid(),\n }),\n z.object({\n done: z.literal(true),\n }),\n]);\n\n/**\n * Response type for Markr's /swap endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1swap/post\n */\nexport interface WrappedSwapTransactionResponse {\n data: Hex;\n to: EvmAddress;\n value: bigint;\n}\n\nexport const WrappedSwapTransactionResponseSchema: z.ZodType<WrappedSwapTransactionResponse> = z.object({\n data: HexSchema,\n to: EvmAddressSchema,\n value: z.coerce.bigint().nonnegative(),\n});\n\n/**\n * Solana swap transaction (returned for SVM chains).\n */\nexport interface SolanaSwapTransactionResponse {\n /** Chain type identifier */\n chainType: 'svm';\n /** Base64-encoded Solana transaction to be signed and sent by the client */\n swapTransaction: string;\n}\n\nexport const SolanaSwapTransactionResponseSchema: z.ZodType<SolanaSwapTransactionResponse> = z.object({\n chainType: z.literal('svm'),\n swapTransaction: z.base64(),\n});\n\nexport type SwapResponse = WrappedSwapTransactionResponse | SolanaSwapTransactionResponse;\n\nexport const SwapResponseSchema: z.ZodType<SwapResponse> = z.union([\n WrappedSwapTransactionResponseSchema,\n SolanaSwapTransactionResponseSchema,\n]);\n\nexport interface PartnerInfoResponse {\n /**\n * The partner fee in basis points collected on each swap.\n */\n fee: number;\n name: string;\n}\n\nexport const PartnerInfoResponseSchema: z.ZodType<PartnerInfoResponse> = z.object({\n fee: z.int().nonnegative(),\n name: z.string(),\n});\n\n/**\n * If the destination token is USDC, the flow is:\n * - pending -> committed -> completed\n *\n * If the destination token is not USDC, the flow is:\n * - pending -> committed -> pending_execution -> completed\n *\n * If the transaction fails at any point, the status will be 'failed'.\n */\nexport type CrossChainStatus =\n | /** Transaction submitted to CCIP */\n 'pending'\n /** Message committed, awaiting execution on destination chain */\n | 'committed'\n /** Message received on destination, swap pending execution by relayer */\n | 'pending_execution'\n /** Message executed successfully on destination chain */\n | 'completed'\n /** Execution failed */\n | 'failed'\n /** Unknown state */\n | 'unknown';\n\nexport interface CrossChainStatusResponse {\n /** CCIP message ID */\n messageId: string | null;\n /** Current status of the cross-chain transaction. */\n status: CrossChainStatus;\n /** Human-readable status description */\n description: string;\n /** Source chain information */\n sourceChain: {\n /** Source chain network name */\n name: string;\n /** Source chain transaction hash */\n transactionHash: Hash | Signature;\n /** Transaction timestamp on source chain (ISO 8601) */\n timestamp: string;\n /** When the source transaction was finalized (ISO 8601) */\n finalized: string | boolean | null;\n };\n /** Destination chain information */\n destinationChain: {\n /** Destination chain network name */\n name: string | null;\n /**\n * Destination chain tx hash.\n *\n * - For direct transfers (USDC -> USDC): The CCIP bridge transaction hash.\n * - For successful swaps: The actual swap transaction hash from the relayer.\n * - For pending swaps: null (swap not yet executed).\n */\n transactionHash: Hash | Signature | null;\n /**\n * CCIP bridge tx hash (only present for swaps, not direct transfers).\n *\n * This is the transaction that delivered USDC to the destination chain via CCIP.\n * The `transactionHash` field contains the subsequent swap transaction.\n */\n bridgeHash?: Hash | Signature | null;\n /** Transaction timestamp on destination chain (null if not yet executed) (ISO 8601) */\n timestamp: string | null;\n /** When the destination transaction was finalized (null if not yet executed) (ISO 8601) */\n finalized: string | null;\n };\n /** Transaction progress information */\n progress: {\n /** Whether the message has been committed on destination chain */\n committed: boolean;\n /** When the message was committed (null if not committed) (ISO 8601) */\n commitTimestamp?: string | null;\n /** Whether the message has been executed on destination chain */\n executed: boolean;\n };\n /** Fee information */\n fees: {\n /** Fee token address */\n token: EvmAddress | SolAddress | null;\n /** Fee amount in wei */\n amount: bigint | null;\n };\n /** Tokens transferred in this cross-chain transaction */\n transferredTokens: ReadonlyArray<{\n /** Token address */\n token: EvmAddress | SolAddress;\n /** Token amount */\n amount: bigint;\n }>;\n /**\n * Debug information from Markr transaction API (only present for swaps that have been executed).\n *\n * Contains detailed information about the relayer execution, retry attempts, and transaction details.\n */\n debug?: {\n /** CCIP message ID */\n messageId: string;\n /** Execution status from relayer */\n status: string;\n /** Destination chain name */\n destinationChain: string;\n /** Destination swap transaction hash */\n destinationTxHash: string;\n /** Relay transaction hash */\n relayTxHash: string;\n /** Number of retry attempts */\n retryCount: number;\n /** Timestamp of last retry attempt (ISO 8601) */\n lastRetryAt: string;\n /** Source chain name */\n sourceChain: string;\n /** Source transaction hash */\n sourceTxHash: string;\n /** When the record was created (ISO 8601) */\n createdAt: string;\n } | null;\n}\n\nconst ISO_8601_TIMEZONE_DESIGNATOR_REGEX = /[zZ]|[+-]\\d{2}:?\\d{2}$/;\n\n// Markr API returns ISO-8601 datetime strings that are sometimes missing a timezone designator (\"local\" ISO).\n// We assume these are meant to be UTC and append 'Z' if missing, then validate as strict ISO-8601 with timezone.\nconst datetime = z.iso\n .datetime({ local: true })\n .refine(\n (value) => {\n // Accept at least local ISO format\n // If missing timezone, treat as UTC\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n const isoString = hasTimezone ? value : value + 'Z';\n // Validate as strict ISO-8601 with timezone\n return z.iso.datetime().safeParse(isoString).success;\n },\n {\n error: 'Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)',\n },\n )\n .transform((value) => {\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n return hasTimezone ? value : value + 'Z';\n });\n\nexport const CrossChainStatusResponseSchema: z.ZodType<CrossChainStatusResponse> = z.object({\n messageId: z.string().nullable(),\n status: z.enum(['pending', 'committed', 'pending_execution', 'completed', 'failed', 'unknown']),\n description: z.string(),\n sourceChain: z.object({\n name: z.string(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]),\n timestamp: datetime,\n finalized: datetime.or(z.boolean()).nullable(),\n }),\n destinationChain: z.object({\n name: z.string().nullable(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]).nullable(),\n bridgeHash: z.union([HashSchema, SolSignatureSchema]).nullable().optional(),\n timestamp: datetime.nullable(),\n finalized: datetime.nullable(),\n }),\n progress: z.object({\n committed: z.boolean(),\n commitTimestamp: datetime.nullable().optional(),\n executed: z.boolean(),\n }),\n fees: z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]).nullable(),\n amount: z.coerce.bigint().nonnegative().nullable(),\n }),\n transferredTokens: z.array(\n z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]),\n amount: z.coerce.bigint().nonnegative(),\n }),\n ),\n debug: z\n .looseObject({\n messageId: z.string(),\n status: z.string(),\n destinationChain: z.string(),\n destinationTxHash: z.string(),\n relayTxHash: z.string(),\n retryCount: z.number().int().nonnegative(),\n lastRetryAt: z.iso.datetime(),\n sourceChain: z.string(),\n sourceTxHash: z.string(),\n createdAt: z.iso.datetime(),\n })\n .nullable()\n .optional(),\n});\n\nexport interface SpenderAddressResponse {\n address: EvmAddress;\n}\n\nexport const SpenderAddressResponseSchema: z.ZodType<SpenderAddressResponse> = z.object({\n address: EvmAddressSchema,\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_schema.cjs","names":["z","isCaip2ChainId","EvmAddressSchema","SolAddressSchema","HexSchema","HashSchema","SolSignatureSchema"],"sources":["../../../src/transfer-service/markr/_schema.ts"],"sourcesContent":["import type { Signature, Address as SolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport type { Address as EvmAddress, Hash } from 'viem';\nimport { EvmAddressSchema, HashSchema, HexSchema, SolAddressSchema, SolSignatureSchema } from '../service-schemas';\nimport { isCaip2ChainId } from '../../utils/caip';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Hex } from '../../types/signer';\n\ninterface SupportedChainsResponseItemBase {\n chainId: number | string;\n chainType: string;\n /** Available services on the chain. Each service has specific functionality */\n enabled_services: Array<'cross-chain-swap' | 'cross-chain-quote' | 'quote' | 'swap' | 'token-list'>;\n /** Chain logo URL */\n logo_url: string;\n /** Chain display name */\n name: string;\n /**\n * List of chain IDs that this chain can swap to via cross-chain aggregators.\n *\n * Empty array means no cross-chain routes available.\n */\n lanes: ReadonlyArray<number | Caip2ChainId>;\n}\n\nexport interface SupportedChainsResponseItemEvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: number;\n /** Chain virtual machine type */\n chainType: 'evm';\n /** Router contract address */\n router?: EvmAddress;\n /** Native token wrapped contract address */\n wrapped_token?: EvmAddress;\n}\n\nexport interface SupportedChainsResponseItemSvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: Caip2ChainId;\n /** Chain virtual machine type */\n chainType: 'svm';\n}\n\nexport type SupportedChainsResponse = Array<\n SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm | SupportedChainsResponseItemBase\n>;\n\nexport const Caip2ChainIdSchema: z.ZodType<Caip2ChainId> = z\n .string()\n .refine((value) => isCaip2ChainId(value), {\n message: 'Invalid CAIP-2 chain ID',\n })\n .transform((value) => value as Caip2ChainId);\n\nconst SupportedChainsResponseItemBaseSchema = z.object({\n chainId: z.union([z.number(), z.string()]),\n chainType: z.string(),\n enabled_services: z.array(z.enum(['cross-chain-swap', 'cross-chain-quote', 'quote', 'swap', 'token-list'])),\n logo_url: z.url(),\n name: z.string(),\n lanes: z.array(z.union([z.coerce.number().int().nonnegative(), Caip2ChainIdSchema])),\n});\n\nconst SupportedChainsResponseItemEvmSchema: z.ZodType<SupportedChainsResponseItemEvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z.coerce.number().int().nonnegative(),\n chainType: z.literal('evm'),\n router: EvmAddressSchema.optional(),\n wrapped_token: EvmAddressSchema.optional(),\n });\n\nconst SupportedChainsResponseItemSvmSchema: z.ZodType<SupportedChainsResponseItemSvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z\n .string()\n .refine((value) => isCaip2ChainId(value) && value.startsWith('solana:'), {\n error: 'Is not a valid Solana CAIP-2 ID',\n })\n .transform((value) => value as Caip2ChainId),\n chainType: z.literal('svm'),\n });\n\n/**\n * Schema for the response from Markr's /info/chains endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1info~1chains/get\n */\nexport const SupportedChainsResponseSchema: z.ZodType<SupportedChainsResponse> = z.array(\n z.union([\n SupportedChainsResponseItemEvmSchema,\n SupportedChainsResponseItemSvmSchema,\n SupportedChainsResponseItemBaseSchema.refine(\n (item) => item.chainType !== 'evm' && item.chainType !== 'svm',\n 'Known chain types must match their expected schema',\n ),\n ]),\n);\n\nexport type TokenListResponse = Array<{\n address: EvmAddress;\n decimals: number;\n logo_url: string;\n name: string;\n symbol: string;\n}>;\n\n/**\n * Schema for the response Markr's /tokens/{chainId}/list endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1tokens~1%7BchainId%7D~1list/get\n */\nexport const TokenListResponseSchema: z.ZodType<TokenListResponse> = z.array(\n z.object({\n address: EvmAddressSchema,\n decimals: z.number().int().nonnegative().max(18),\n logo_url: z.url(),\n name: z.string(),\n symbol: z.string(),\n }),\n);\n\nexport interface QuoteResponseData {\n aggregator: {\n id: string;\n logo_url: string;\n name: string;\n };\n amountIn: bigint;\n amountOut: bigint;\n /** Chain identifier (number for EVM chains, CAIP-2 ID for SVM chains) */\n chainId: number | Caip2ChainId;\n expiredAt: number;\n /**\n * Fee breakdown for cross-chain bridge transactions.\n *\n * Only included in quotes from cross-chain aggregators (DeBridge, LiFi).\n */\n fees?: ReadonlyArray<{\n type: 'protocol' | 'gas' | 'bridge' | 'slippage' | 'swap' | 'other';\n /** Human-readable fee name */\n name: string;\n /** Fee amount in token's smallest unit */\n amount: bigint;\n /** Token the fee is deducted from */\n token: {\n /** Chain ID where fee is deducted */\n chainId: number | Caip2ChainId;\n /** Token address (EVM hex or Solana base58) */\n address: EvmAddress | SolAddress;\n };\n }>;\n gasEstimate?: bigint;\n recommendedSlippage: number;\n /** Input token address (EVM hex or Solana base58) */\n tokenIn: EvmAddress | SolAddress;\n tokenInDecimals: number;\n /** Output token address (EVM hex or Solana base58) */\n tokenOut: EvmAddress | SolAddress;\n tokenOutDecimals: number;\n uuid: string;\n}\n\nexport interface QuoteResponseDataDone {\n done: true;\n}\n\nexport type QuoteResponse = QuoteResponseData | QuoteResponseDataDone;\n\n/**\n * Schema for the response from Markr's /quote endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1quote/post\n */\nexport const QuoteResponseSchema: z.ZodType<QuoteResponse> = z.union([\n z.object({\n aggregator: z.object({\n id: z.string(),\n logo_url: z.url(),\n name: z.string(),\n }),\n amountIn: z.coerce.bigint().nonnegative(),\n amountOut: z.coerce.bigint().nonnegative(),\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n /**\n * Unix time in seconds when the quote expires.\n */\n expiredAt: z.number().int().nonnegative(),\n fees: z\n .array(\n z.object({\n type: z.enum(['protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.coerce.bigint().nonnegative(),\n token: z.object({\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n address: z.union([EvmAddressSchema, SolAddressSchema]),\n }),\n }),\n )\n .optional(),\n /**\n * Estimated gas for the swap transaction.\n * Markr estimates already include a buffer.\n *\n * The API docs do not specify this field as optional, but in practice it can be missing.\n */\n gasEstimate: z.coerce.bigint().nonnegative().optional(),\n /** Recommended slippage in basis points. */\n recommendedSlippage: z.number().int().nonnegative(),\n tokenIn: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenInDecimals: z.number().int().nonnegative().max(18),\n tokenOut: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenOutDecimals: z.number().int().nonnegative().max(18),\n uuid: z.uuid(),\n }),\n z.object({\n done: z.literal(true),\n }),\n]);\n\n/**\n * Response type for Markr's /swap endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1swap/post\n */\nexport interface WrappedSwapTransactionResponse {\n data: Hex;\n to: EvmAddress;\n value: bigint;\n}\n\nexport const WrappedSwapTransactionResponseSchema: z.ZodType<WrappedSwapTransactionResponse> = z.object({\n data: HexSchema,\n to: EvmAddressSchema,\n value: z.coerce.bigint().nonnegative(),\n});\n\n/**\n * Solana swap transaction (returned for SVM chains).\n */\nexport interface SolanaSwapTransactionResponse {\n /** Chain type identifier */\n chainType: 'svm';\n /** Base64-encoded Solana transaction to be signed and sent by the client */\n swapTransaction: string;\n}\n\nexport const SolanaSwapTransactionResponseSchema: z.ZodType<SolanaSwapTransactionResponse> = z.object({\n chainType: z.literal('svm'),\n swapTransaction: z.base64(),\n});\n\nexport type SwapResponse = WrappedSwapTransactionResponse | SolanaSwapTransactionResponse;\n\nexport const SwapResponseSchema: z.ZodType<SwapResponse> = z.union([\n WrappedSwapTransactionResponseSchema,\n SolanaSwapTransactionResponseSchema,\n]);\n\nexport interface PartnerInfoResponse {\n /**\n * The partner fee in basis points collected on each swap.\n */\n fee: number;\n name: string;\n}\n\nexport const PartnerInfoResponseSchema: z.ZodType<PartnerInfoResponse> = z.object({\n fee: z.int().nonnegative(),\n name: z.string(),\n});\n\n/**\n * If the destination token is USDC, the flow is:\n * - pending -> committed -> completed\n *\n * If the destination token is not USDC, the flow is:\n * - pending -> committed -> pending_execution -> completed\n *\n * If the transaction fails at any point, the status will be 'failed'.\n */\nexport type CrossChainStatus =\n | /** Transaction submitted to CCIP */\n 'pending'\n /** Message committed, awaiting execution on destination chain */\n | 'committed'\n /** Message received on destination, swap pending execution by relayer */\n | 'pending_execution'\n /** Message executed successfully on destination chain */\n | 'completed'\n /** Swap expired, and funds were refunded (CCIP only) */\n | 'refunded'\n /** Execution failed */\n | 'failed'\n /** Unknown state */\n | 'unknown';\n\nexport interface CrossChainStatusResponse {\n /**\n * Cross-chain transaction identifier.\n *\n * For CCIP: The CCIP message ID.\n * For DeBridge: The DeBridge order ID.\n */\n messageId: string | null;\n /** Current status of the cross-chain transaction. */\n status: CrossChainStatus;\n /** Human-readable status description */\n description: string;\n /** Source chain information */\n sourceChain: {\n /** Source chain network name */\n name: string;\n /** Source chain transaction hash */\n transactionHash: Hash | Signature;\n /** Transaction timestamp on source chain (ISO 8601) */\n timestamp: string;\n /** When the source transaction was finalized (ISO 8601) */\n finalized: string | boolean | null;\n };\n /** Destination chain information */\n destinationChain: {\n /** Destination chain network name */\n name: string | null;\n /**\n * Destination chain tx hash.\n *\n * - For direct transfers (USDC -> USDC): The CCIP bridge transaction hash.\n * - For successful swaps: The actual swap transaction hash from the relayer.\n * - For pending swaps: null (swap not yet executed).\n */\n transactionHash: Hash | Signature | null;\n /**\n * CCIP bridge tx hash (only present for swaps, not direct transfers).\n *\n * This is the transaction that delivered USDC to the destination chain via CCIP.\n * The `transactionHash` field contains the subsequent swap transaction.\n */\n bridgeHash?: Hash | Signature | null;\n /** Transaction timestamp on destination chain (null if not yet executed) (ISO 8601) */\n timestamp: string | null;\n /** When the destination transaction was finalized (null if not yet executed) (ISO 8601) */\n finalized: string | null;\n };\n /** Transaction progress information */\n progress: {\n /** Whether the message has been committed on destination chain */\n committed: boolean;\n /** When the message was committed (null if not committed) (ISO 8601) */\n commitTimestamp?: string | null;\n /** Whether the message has been executed on destination chain */\n executed: boolean;\n };\n /** Fee information */\n fees: {\n /** Fee token address */\n token: EvmAddress | SolAddress | null;\n /** Fee amount in wei */\n amount: bigint | null;\n };\n /** Tokens transferred in this cross-chain transaction */\n transferredTokens: ReadonlyArray<{\n /** Token address */\n token: EvmAddress | SolAddress;\n /** Token amount */\n amount: bigint;\n }>;\n /**\n * Debug information from Markr transaction API (only present for swaps that have been executed).\n *\n * Contains detailed information about the relayer execution, retry attempts, and transaction details.\n */\n debug?: Partial<{\n /** CCIP message ID */\n messageId: string;\n /** Execution status from relayer */\n status: string;\n /** Destination chain name */\n destinationChain: string;\n /** Destination swap transaction hash */\n destinationTxHash: string;\n /** Relay transaction hash */\n relayTxHash: string;\n /** Number of retry attempts */\n retryCount: number;\n /** Timestamp of last retry attempt (ISO 8601) */\n lastRetryAt: string;\n /** Source chain name */\n sourceChain: string;\n /** Source transaction hash */\n sourceTxHash: string;\n /** When the record was created (ISO 8601) */\n createdAt: string;\n }> | null;\n}\n\nconst ISO_8601_TIMEZONE_DESIGNATOR_REGEX = /[zZ]|[+-]\\d{2}:?\\d{2}$/;\n\n// Markr API returns ISO-8601 datetime strings that are sometimes missing a timezone designator (\"local\" ISO).\n// We assume these are meant to be UTC and append 'Z' if missing, then validate as strict ISO-8601 with timezone.\nconst datetime = z.iso\n .datetime({ local: true })\n .refine(\n (value) => {\n // Accept at least local ISO format\n // If missing timezone, treat as UTC\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n const isoString = hasTimezone ? value : value + 'Z';\n // Validate as strict ISO-8601 with timezone\n return z.iso.datetime().safeParse(isoString).success;\n },\n {\n error: 'Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)',\n },\n )\n .transform((value) => {\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n return hasTimezone ? value : value + 'Z';\n });\n\nexport const CrossChainStatusResponseSchema: z.ZodType<CrossChainStatusResponse> = z.object({\n messageId: z.string().nullable(),\n status: z.enum(['pending', 'committed', 'pending_execution', 'completed', 'failed', 'refunded', 'unknown']),\n description: z.string(),\n sourceChain: z.object({\n name: z.string(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]),\n timestamp: datetime,\n finalized: datetime.or(z.boolean()).nullable(),\n }),\n destinationChain: z.object({\n name: z.string().nullable(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]).nullable(),\n bridgeHash: z.union([HashSchema, SolSignatureSchema]).nullable().optional(),\n timestamp: datetime.nullable(),\n finalized: datetime.nullable(),\n }),\n progress: z.object({\n committed: z.boolean(),\n commitTimestamp: datetime.nullable().optional(),\n executed: z.boolean(),\n }),\n fees: z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]).nullable(),\n amount: z.coerce.bigint().nonnegative().nullable(),\n }),\n transferredTokens: z.array(\n z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]),\n amount: z.coerce.bigint().nonnegative(),\n }),\n ),\n debug: z\n .looseObject({\n messageId: z.string(),\n status: z.string(),\n destinationChain: z.string(),\n destinationTxHash: z.string(),\n relayTxHash: z.string(),\n retryCount: z.number().int().nonnegative(),\n lastRetryAt: z.iso.datetime(),\n sourceChain: z.string(),\n sourceTxHash: z.string(),\n createdAt: z.iso.datetime(),\n })\n .partial()\n .nullable()\n .optional(),\n});\n\nexport interface SpenderAddressResponse {\n address: EvmAddress;\n}\n\nexport const SpenderAddressResponseSchema: z.ZodType<SpenderAddressResponse> = z.object({\n address: EvmAddressSchema,\n});\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{isCaip2ChainId as e}from"../../utils/caip.js";import{EvmAddressSchema as t,HashSchema as n,HexSchema as r,SolAddressSchema as i,SolSignatureSchema as a}from"../service-schemas.js";import{z as o}from"zod";const s=o.string().refine(t=>e(t),{message:`Invalid CAIP-2 chain ID`}).transform(e=>e),c=o.object({chainId:o.union([o.number(),o.string()]),chainType:o.string(),enabled_services:o.array(o.enum([`cross-chain-swap`,`cross-chain-quote`,`quote`,`swap`,`token-list`])),logo_url:o.url(),name:o.string(),lanes:o.array(o.union([o.coerce.number().int().nonnegative(),s]))}),l=c.extend({chainId:o.coerce.number().int().nonnegative(),chainType:o.literal(`evm`),router:t.optional(),wrapped_token:t.optional()}),u=c.extend({chainId:o.string().refine(t=>e(t)&&t.startsWith(`solana:`),{error:`Is not a valid Solana CAIP-2 ID`}).transform(e=>e),chainType:o.literal(`svm`)}),d=o.array(o.union([l,u,c.refine(e=>e.chainType!==`evm`&&e.chainType!==`svm`,`Known chain types must match their expected schema`)])),f=o.array(o.object({address:t,decimals:o.number().int().nonnegative().max(18),logo_url:o.url(),name:o.string(),symbol:o.string()})),p=o.union([o.object({aggregator:o.object({id:o.string(),logo_url:o.url(),name:o.string()}),amountIn:o.coerce.bigint().nonnegative(),amountOut:o.coerce.bigint().nonnegative(),chainId:o.union([o.number().int().nonnegative(),s]),expiredAt:o.number().int().nonnegative(),fees:o.array(o.object({type:o.enum([`protocol`,`gas`,`bridge`,`slippage`,`swap`,`other`]),name:o.string(),amount:o.coerce.bigint().nonnegative(),token:o.object({chainId:o.union([o.number().int().nonnegative(),s]),address:o.union([t,i])})})).optional(),gasEstimate:o.coerce.bigint().nonnegative().optional(),recommendedSlippage:o.number().int().nonnegative(),tokenIn:o.union([t,i]),tokenInDecimals:o.number().int().nonnegative().max(18),tokenOut:o.union([t,i]),tokenOutDecimals:o.number().int().nonnegative().max(18),uuid:o.uuid()}),o.object({done:o.literal(!0)})]),m=o.object({data:r,to:t,value:o.coerce.bigint().nonnegative()}),h=o.object({chainType:o.literal(`svm`),swapTransaction:o.base64()}),g=o.union([m,h]),_=o.object({fee:o.int().nonnegative(),name:o.string()}),v=/[zZ]|[+-]\d{2}:?\d{2}$/,y=o.iso.datetime({local:!0}).refine(e=>{let t=v.test(e)?e:e+`Z`;return o.iso.datetime().safeParse(t).success},{error:`Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)`}).transform(e=>v.test(e)?e:e+`Z`),b=o.object({messageId:o.string().nullable(),status:o.enum([`pending`,`committed`,`pending_execution`,`completed`,`failed`,`unknown`]),description:o.string(),sourceChain:o.object({name:o.string(),transactionHash:o.union([n,a]),timestamp:y,finalized:y.or(o.boolean()).nullable()}),destinationChain:o.object({name:o.string().nullable(),transactionHash:o.union([n,a]).nullable(),bridgeHash:o.union([n,a]).nullable().optional(),timestamp:y.nullable(),finalized:y.nullable()}),progress:o.object({committed:o.boolean(),commitTimestamp:y.nullable().optional(),executed:o.boolean()}),fees:o.object({token:o.union([t,i]).nullable(),amount:o.coerce.bigint().nonnegative().nullable()}),transferredTokens:o.array(o.object({token:o.union([t,i]),amount:o.coerce.bigint().nonnegative()})),debug:o.looseObject({messageId:o.string(),status:o.string(),destinationChain:o.string(),destinationTxHash:o.string(),relayTxHash:o.string(),retryCount:o.number().int().nonnegative(),lastRetryAt:o.iso.datetime(),sourceChain:o.string(),sourceTxHash:o.string(),createdAt:o.iso.datetime()}).nullable().optional()}),x=o.object({address:t});export{b as CrossChainStatusResponseSchema,_ as PartnerInfoResponseSchema,p as QuoteResponseSchema,x as SpenderAddressResponseSchema,d as SupportedChainsResponseSchema,g as SwapResponseSchema,f as TokenListResponseSchema};
|
|
1
|
+
import{isCaip2ChainId as e}from"../../utils/caip.js";import{EvmAddressSchema as t,HashSchema as n,HexSchema as r,SolAddressSchema as i,SolSignatureSchema as a}from"../service-schemas.js";import{z as o}from"zod";const s=o.string().refine(t=>e(t),{message:`Invalid CAIP-2 chain ID`}).transform(e=>e),c=o.object({chainId:o.union([o.number(),o.string()]),chainType:o.string(),enabled_services:o.array(o.enum([`cross-chain-swap`,`cross-chain-quote`,`quote`,`swap`,`token-list`])),logo_url:o.url(),name:o.string(),lanes:o.array(o.union([o.coerce.number().int().nonnegative(),s]))}),l=c.extend({chainId:o.coerce.number().int().nonnegative(),chainType:o.literal(`evm`),router:t.optional(),wrapped_token:t.optional()}),u=c.extend({chainId:o.string().refine(t=>e(t)&&t.startsWith(`solana:`),{error:`Is not a valid Solana CAIP-2 ID`}).transform(e=>e),chainType:o.literal(`svm`)}),d=o.array(o.union([l,u,c.refine(e=>e.chainType!==`evm`&&e.chainType!==`svm`,`Known chain types must match their expected schema`)])),f=o.array(o.object({address:t,decimals:o.number().int().nonnegative().max(18),logo_url:o.url(),name:o.string(),symbol:o.string()})),p=o.union([o.object({aggregator:o.object({id:o.string(),logo_url:o.url(),name:o.string()}),amountIn:o.coerce.bigint().nonnegative(),amountOut:o.coerce.bigint().nonnegative(),chainId:o.union([o.number().int().nonnegative(),s]),expiredAt:o.number().int().nonnegative(),fees:o.array(o.object({type:o.enum([`protocol`,`gas`,`bridge`,`slippage`,`swap`,`other`]),name:o.string(),amount:o.coerce.bigint().nonnegative(),token:o.object({chainId:o.union([o.number().int().nonnegative(),s]),address:o.union([t,i])})})).optional(),gasEstimate:o.coerce.bigint().nonnegative().optional(),recommendedSlippage:o.number().int().nonnegative(),tokenIn:o.union([t,i]),tokenInDecimals:o.number().int().nonnegative().max(18),tokenOut:o.union([t,i]),tokenOutDecimals:o.number().int().nonnegative().max(18),uuid:o.uuid()}),o.object({done:o.literal(!0)})]),m=o.object({data:r,to:t,value:o.coerce.bigint().nonnegative()}),h=o.object({chainType:o.literal(`svm`),swapTransaction:o.base64()}),g=o.union([m,h]),_=o.object({fee:o.int().nonnegative(),name:o.string()}),v=/[zZ]|[+-]\d{2}:?\d{2}$/,y=o.iso.datetime({local:!0}).refine(e=>{let t=v.test(e)?e:e+`Z`;return o.iso.datetime().safeParse(t).success},{error:`Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)`}).transform(e=>v.test(e)?e:e+`Z`),b=o.object({messageId:o.string().nullable(),status:o.enum([`pending`,`committed`,`pending_execution`,`completed`,`failed`,`refunded`,`unknown`]),description:o.string(),sourceChain:o.object({name:o.string(),transactionHash:o.union([n,a]),timestamp:y,finalized:y.or(o.boolean()).nullable()}),destinationChain:o.object({name:o.string().nullable(),transactionHash:o.union([n,a]).nullable(),bridgeHash:o.union([n,a]).nullable().optional(),timestamp:y.nullable(),finalized:y.nullable()}),progress:o.object({committed:o.boolean(),commitTimestamp:y.nullable().optional(),executed:o.boolean()}),fees:o.object({token:o.union([t,i]).nullable(),amount:o.coerce.bigint().nonnegative().nullable()}),transferredTokens:o.array(o.object({token:o.union([t,i]),amount:o.coerce.bigint().nonnegative()})),debug:o.looseObject({messageId:o.string(),status:o.string(),destinationChain:o.string(),destinationTxHash:o.string(),relayTxHash:o.string(),retryCount:o.number().int().nonnegative(),lastRetryAt:o.iso.datetime(),sourceChain:o.string(),sourceTxHash:o.string(),createdAt:o.iso.datetime()}).partial().nullable().optional()}),x=o.object({address:t});export{b as CrossChainStatusResponseSchema,_ as PartnerInfoResponseSchema,p as QuoteResponseSchema,x as SpenderAddressResponseSchema,d as SupportedChainsResponseSchema,g as SwapResponseSchema,f as TokenListResponseSchema};
|
|
2
2
|
//# sourceMappingURL=_schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_schema.js","names":[],"sources":["../../../src/transfer-service/markr/_schema.ts"],"sourcesContent":["import type { Signature, Address as SolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport type { Address as EvmAddress, Hash } from 'viem';\nimport { EvmAddressSchema, HashSchema, HexSchema, SolAddressSchema, SolSignatureSchema } from '../service-schemas';\nimport { isCaip2ChainId } from '../../utils/caip';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Hex } from '../../types/signer';\n\ninterface SupportedChainsResponseItemBase {\n chainId: number | string;\n chainType: string;\n /** Available services on the chain. Each service has specific functionality */\n enabled_services: Array<'cross-chain-swap' | 'cross-chain-quote' | 'quote' | 'swap' | 'token-list'>;\n /** Chain logo URL */\n logo_url: string;\n /** Chain display name */\n name: string;\n /**\n * List of chain IDs that this chain can swap to via cross-chain aggregators.\n *\n * Empty array means no cross-chain routes available.\n */\n lanes: ReadonlyArray<number | Caip2ChainId>;\n}\n\nexport interface SupportedChainsResponseItemEvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: number;\n /** Chain virtual machine type */\n chainType: 'evm';\n /** Router contract address */\n router?: EvmAddress;\n /** Native token wrapped contract address */\n wrapped_token?: EvmAddress;\n}\n\nexport interface SupportedChainsResponseItemSvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: Caip2ChainId;\n /** Chain virtual machine type */\n chainType: 'svm';\n}\n\nexport type SupportedChainsResponse = Array<\n SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm | SupportedChainsResponseItemBase\n>;\n\nexport const Caip2ChainIdSchema: z.ZodType<Caip2ChainId> = z\n .string()\n .refine((value) => isCaip2ChainId(value), {\n message: 'Invalid CAIP-2 chain ID',\n })\n .transform((value) => value as Caip2ChainId);\n\nconst SupportedChainsResponseItemBaseSchema = z.object({\n chainId: z.union([z.number(), z.string()]),\n chainType: z.string(),\n enabled_services: z.array(z.enum(['cross-chain-swap', 'cross-chain-quote', 'quote', 'swap', 'token-list'])),\n logo_url: z.url(),\n name: z.string(),\n lanes: z.array(z.union([z.coerce.number().int().nonnegative(), Caip2ChainIdSchema])),\n});\n\nconst SupportedChainsResponseItemEvmSchema: z.ZodType<SupportedChainsResponseItemEvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z.coerce.number().int().nonnegative(),\n chainType: z.literal('evm'),\n router: EvmAddressSchema.optional(),\n wrapped_token: EvmAddressSchema.optional(),\n });\n\nconst SupportedChainsResponseItemSvmSchema: z.ZodType<SupportedChainsResponseItemSvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z\n .string()\n .refine((value) => isCaip2ChainId(value) && value.startsWith('solana:'), {\n error: 'Is not a valid Solana CAIP-2 ID',\n })\n .transform((value) => value as Caip2ChainId),\n chainType: z.literal('svm'),\n });\n\n/**\n * Schema for the response from Markr's /info/chains endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1info~1chains/get\n */\nexport const SupportedChainsResponseSchema: z.ZodType<SupportedChainsResponse> = z.array(\n z.union([\n SupportedChainsResponseItemEvmSchema,\n SupportedChainsResponseItemSvmSchema,\n SupportedChainsResponseItemBaseSchema.refine(\n (item) => item.chainType !== 'evm' && item.chainType !== 'svm',\n 'Known chain types must match their expected schema',\n ),\n ]),\n);\n\nexport type TokenListResponse = Array<{\n address: EvmAddress;\n decimals: number;\n logo_url: string;\n name: string;\n symbol: string;\n}>;\n\n/**\n * Schema for the response Markr's /tokens/{chainId}/list endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1tokens~1%7BchainId%7D~1list/get\n */\nexport const TokenListResponseSchema: z.ZodType<TokenListResponse> = z.array(\n z.object({\n address: EvmAddressSchema,\n decimals: z.number().int().nonnegative().max(18),\n logo_url: z.url(),\n name: z.string(),\n symbol: z.string(),\n }),\n);\n\nexport interface QuoteResponseData {\n aggregator: {\n id: string;\n logo_url: string;\n name: string;\n };\n amountIn: bigint;\n amountOut: bigint;\n /** Chain identifier (number for EVM chains, CAIP-2 ID for SVM chains) */\n chainId: number | Caip2ChainId;\n expiredAt: number;\n /**\n * Fee breakdown for cross-chain bridge transactions.\n *\n * Only included in quotes from cross-chain aggregators (DeBridge, LiFi).\n */\n fees?: ReadonlyArray<{\n type: 'protocol' | 'gas' | 'bridge' | 'slippage' | 'swap' | 'other';\n /** Human-readable fee name */\n name: string;\n /** Fee amount in token's smallest unit */\n amount: bigint;\n /** Token the fee is deducted from */\n token: {\n /** Chain ID where fee is deducted */\n chainId: number | Caip2ChainId;\n /** Token address (EVM hex or Solana base58) */\n address: EvmAddress | SolAddress;\n };\n }>;\n gasEstimate?: bigint;\n recommendedSlippage: number;\n /** Input token address (EVM hex or Solana base58) */\n tokenIn: EvmAddress | SolAddress;\n tokenInDecimals: number;\n /** Output token address (EVM hex or Solana base58) */\n tokenOut: EvmAddress | SolAddress;\n tokenOutDecimals: number;\n uuid: string;\n}\n\nexport interface QuoteResponseDataDone {\n done: true;\n}\n\nexport type QuoteResponse = QuoteResponseData | QuoteResponseDataDone;\n\n/**\n * Schema for the response from Markr's /quote endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1quote/post\n */\nexport const QuoteResponseSchema: z.ZodType<QuoteResponse> = z.union([\n z.object({\n aggregator: z.object({\n id: z.string(),\n logo_url: z.url(),\n name: z.string(),\n }),\n amountIn: z.coerce.bigint().nonnegative(),\n amountOut: z.coerce.bigint().nonnegative(),\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n /**\n * Unix time in seconds when the quote expires.\n */\n expiredAt: z.number().int().nonnegative(),\n fees: z\n .array(\n z.object({\n type: z.enum(['protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.coerce.bigint().nonnegative(),\n token: z.object({\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n address: z.union([EvmAddressSchema, SolAddressSchema]),\n }),\n }),\n )\n .optional(),\n /**\n * Estimated gas for the swap transaction.\n * Markr estimates already include a buffer.\n *\n * The API docs do not specify this field as optional, but in practice it can be missing.\n */\n gasEstimate: z.coerce.bigint().nonnegative().optional(),\n /** Recommended slippage in basis points. */\n recommendedSlippage: z.number().int().nonnegative(),\n tokenIn: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenInDecimals: z.number().int().nonnegative().max(18),\n tokenOut: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenOutDecimals: z.number().int().nonnegative().max(18),\n uuid: z.uuid(),\n }),\n z.object({\n done: z.literal(true),\n }),\n]);\n\n/**\n * Response type for Markr's /swap endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1swap/post\n */\nexport interface WrappedSwapTransactionResponse {\n data: Hex;\n to: EvmAddress;\n value: bigint;\n}\n\nexport const WrappedSwapTransactionResponseSchema: z.ZodType<WrappedSwapTransactionResponse> = z.object({\n data: HexSchema,\n to: EvmAddressSchema,\n value: z.coerce.bigint().nonnegative(),\n});\n\n/**\n * Solana swap transaction (returned for SVM chains).\n */\nexport interface SolanaSwapTransactionResponse {\n /** Chain type identifier */\n chainType: 'svm';\n /** Base64-encoded Solana transaction to be signed and sent by the client */\n swapTransaction: string;\n}\n\nexport const SolanaSwapTransactionResponseSchema: z.ZodType<SolanaSwapTransactionResponse> = z.object({\n chainType: z.literal('svm'),\n swapTransaction: z.base64(),\n});\n\nexport type SwapResponse = WrappedSwapTransactionResponse | SolanaSwapTransactionResponse;\n\nexport const SwapResponseSchema: z.ZodType<SwapResponse> = z.union([\n WrappedSwapTransactionResponseSchema,\n SolanaSwapTransactionResponseSchema,\n]);\n\nexport interface PartnerInfoResponse {\n /**\n * The partner fee in basis points collected on each swap.\n */\n fee: number;\n name: string;\n}\n\nexport const PartnerInfoResponseSchema: z.ZodType<PartnerInfoResponse> = z.object({\n fee: z.int().nonnegative(),\n name: z.string(),\n});\n\n/**\n * If the destination token is USDC, the flow is:\n * - pending -> committed -> completed\n *\n * If the destination token is not USDC, the flow is:\n * - pending -> committed -> pending_execution -> completed\n *\n * If the transaction fails at any point, the status will be 'failed'.\n */\nexport type CrossChainStatus =\n | /** Transaction submitted to CCIP */\n 'pending'\n /** Message committed, awaiting execution on destination chain */\n | 'committed'\n /** Message received on destination, swap pending execution by relayer */\n | 'pending_execution'\n /** Message executed successfully on destination chain */\n | 'completed'\n /** Execution failed */\n | 'failed'\n /** Unknown state */\n | 'unknown';\n\nexport interface CrossChainStatusResponse {\n /** CCIP message ID */\n messageId: string | null;\n /** Current status of the cross-chain transaction. */\n status: CrossChainStatus;\n /** Human-readable status description */\n description: string;\n /** Source chain information */\n sourceChain: {\n /** Source chain network name */\n name: string;\n /** Source chain transaction hash */\n transactionHash: Hash | Signature;\n /** Transaction timestamp on source chain (ISO 8601) */\n timestamp: string;\n /** When the source transaction was finalized (ISO 8601) */\n finalized: string | boolean | null;\n };\n /** Destination chain information */\n destinationChain: {\n /** Destination chain network name */\n name: string | null;\n /**\n * Destination chain tx hash.\n *\n * - For direct transfers (USDC -> USDC): The CCIP bridge transaction hash.\n * - For successful swaps: The actual swap transaction hash from the relayer.\n * - For pending swaps: null (swap not yet executed).\n */\n transactionHash: Hash | Signature | null;\n /**\n * CCIP bridge tx hash (only present for swaps, not direct transfers).\n *\n * This is the transaction that delivered USDC to the destination chain via CCIP.\n * The `transactionHash` field contains the subsequent swap transaction.\n */\n bridgeHash?: Hash | Signature | null;\n /** Transaction timestamp on destination chain (null if not yet executed) (ISO 8601) */\n timestamp: string | null;\n /** When the destination transaction was finalized (null if not yet executed) (ISO 8601) */\n finalized: string | null;\n };\n /** Transaction progress information */\n progress: {\n /** Whether the message has been committed on destination chain */\n committed: boolean;\n /** When the message was committed (null if not committed) (ISO 8601) */\n commitTimestamp?: string | null;\n /** Whether the message has been executed on destination chain */\n executed: boolean;\n };\n /** Fee information */\n fees: {\n /** Fee token address */\n token: EvmAddress | SolAddress | null;\n /** Fee amount in wei */\n amount: bigint | null;\n };\n /** Tokens transferred in this cross-chain transaction */\n transferredTokens: ReadonlyArray<{\n /** Token address */\n token: EvmAddress | SolAddress;\n /** Token amount */\n amount: bigint;\n }>;\n /**\n * Debug information from Markr transaction API (only present for swaps that have been executed).\n *\n * Contains detailed information about the relayer execution, retry attempts, and transaction details.\n */\n debug?: {\n /** CCIP message ID */\n messageId: string;\n /** Execution status from relayer */\n status: string;\n /** Destination chain name */\n destinationChain: string;\n /** Destination swap transaction hash */\n destinationTxHash: string;\n /** Relay transaction hash */\n relayTxHash: string;\n /** Number of retry attempts */\n retryCount: number;\n /** Timestamp of last retry attempt (ISO 8601) */\n lastRetryAt: string;\n /** Source chain name */\n sourceChain: string;\n /** Source transaction hash */\n sourceTxHash: string;\n /** When the record was created (ISO 8601) */\n createdAt: string;\n } | null;\n}\n\nconst ISO_8601_TIMEZONE_DESIGNATOR_REGEX = /[zZ]|[+-]\\d{2}:?\\d{2}$/;\n\n// Markr API returns ISO-8601 datetime strings that are sometimes missing a timezone designator (\"local\" ISO).\n// We assume these are meant to be UTC and append 'Z' if missing, then validate as strict ISO-8601 with timezone.\nconst datetime = z.iso\n .datetime({ local: true })\n .refine(\n (value) => {\n // Accept at least local ISO format\n // If missing timezone, treat as UTC\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n const isoString = hasTimezone ? value : value + 'Z';\n // Validate as strict ISO-8601 with timezone\n return z.iso.datetime().safeParse(isoString).success;\n },\n {\n error: 'Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)',\n },\n )\n .transform((value) => {\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n return hasTimezone ? value : value + 'Z';\n });\n\nexport const CrossChainStatusResponseSchema: z.ZodType<CrossChainStatusResponse> = z.object({\n messageId: z.string().nullable(),\n status: z.enum(['pending', 'committed', 'pending_execution', 'completed', 'failed', 'unknown']),\n description: z.string(),\n sourceChain: z.object({\n name: z.string(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]),\n timestamp: datetime,\n finalized: datetime.or(z.boolean()).nullable(),\n }),\n destinationChain: z.object({\n name: z.string().nullable(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]).nullable(),\n bridgeHash: z.union([HashSchema, SolSignatureSchema]).nullable().optional(),\n timestamp: datetime.nullable(),\n finalized: datetime.nullable(),\n }),\n progress: z.object({\n committed: z.boolean(),\n commitTimestamp: datetime.nullable().optional(),\n executed: z.boolean(),\n }),\n fees: z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]).nullable(),\n amount: z.coerce.bigint().nonnegative().nullable(),\n }),\n transferredTokens: z.array(\n z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]),\n amount: z.coerce.bigint().nonnegative(),\n }),\n ),\n debug: z\n .looseObject({\n messageId: z.string(),\n status: z.string(),\n destinationChain: z.string(),\n destinationTxHash: z.string(),\n relayTxHash: z.string(),\n retryCount: z.number().int().nonnegative(),\n lastRetryAt: z.iso.datetime(),\n sourceChain: z.string(),\n sourceTxHash: z.string(),\n createdAt: z.iso.datetime(),\n })\n .nullable()\n .optional(),\n});\n\nexport interface SpenderAddressResponse {\n address: EvmAddress;\n}\n\nexport const SpenderAddressResponseSchema: z.ZodType<SpenderAddressResponse> = z.object({\n address: EvmAddressSchema,\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_schema.js","names":[],"sources":["../../../src/transfer-service/markr/_schema.ts"],"sourcesContent":["import type { Signature, Address as SolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport type { Address as EvmAddress, Hash } from 'viem';\nimport { EvmAddressSchema, HashSchema, HexSchema, SolAddressSchema, SolSignatureSchema } from '../service-schemas';\nimport { isCaip2ChainId } from '../../utils/caip';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Hex } from '../../types/signer';\n\ninterface SupportedChainsResponseItemBase {\n chainId: number | string;\n chainType: string;\n /** Available services on the chain. Each service has specific functionality */\n enabled_services: Array<'cross-chain-swap' | 'cross-chain-quote' | 'quote' | 'swap' | 'token-list'>;\n /** Chain logo URL */\n logo_url: string;\n /** Chain display name */\n name: string;\n /**\n * List of chain IDs that this chain can swap to via cross-chain aggregators.\n *\n * Empty array means no cross-chain routes available.\n */\n lanes: ReadonlyArray<number | Caip2ChainId>;\n}\n\nexport interface SupportedChainsResponseItemEvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: number;\n /** Chain virtual machine type */\n chainType: 'evm';\n /** Router contract address */\n router?: EvmAddress;\n /** Native token wrapped contract address */\n wrapped_token?: EvmAddress;\n}\n\nexport interface SupportedChainsResponseItemSvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: Caip2ChainId;\n /** Chain virtual machine type */\n chainType: 'svm';\n}\n\nexport type SupportedChainsResponse = Array<\n SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm | SupportedChainsResponseItemBase\n>;\n\nexport const Caip2ChainIdSchema: z.ZodType<Caip2ChainId> = z\n .string()\n .refine((value) => isCaip2ChainId(value), {\n message: 'Invalid CAIP-2 chain ID',\n })\n .transform((value) => value as Caip2ChainId);\n\nconst SupportedChainsResponseItemBaseSchema = z.object({\n chainId: z.union([z.number(), z.string()]),\n chainType: z.string(),\n enabled_services: z.array(z.enum(['cross-chain-swap', 'cross-chain-quote', 'quote', 'swap', 'token-list'])),\n logo_url: z.url(),\n name: z.string(),\n lanes: z.array(z.union([z.coerce.number().int().nonnegative(), Caip2ChainIdSchema])),\n});\n\nconst SupportedChainsResponseItemEvmSchema: z.ZodType<SupportedChainsResponseItemEvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z.coerce.number().int().nonnegative(),\n chainType: z.literal('evm'),\n router: EvmAddressSchema.optional(),\n wrapped_token: EvmAddressSchema.optional(),\n });\n\nconst SupportedChainsResponseItemSvmSchema: z.ZodType<SupportedChainsResponseItemSvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z\n .string()\n .refine((value) => isCaip2ChainId(value) && value.startsWith('solana:'), {\n error: 'Is not a valid Solana CAIP-2 ID',\n })\n .transform((value) => value as Caip2ChainId),\n chainType: z.literal('svm'),\n });\n\n/**\n * Schema for the response from Markr's /info/chains endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1info~1chains/get\n */\nexport const SupportedChainsResponseSchema: z.ZodType<SupportedChainsResponse> = z.array(\n z.union([\n SupportedChainsResponseItemEvmSchema,\n SupportedChainsResponseItemSvmSchema,\n SupportedChainsResponseItemBaseSchema.refine(\n (item) => item.chainType !== 'evm' && item.chainType !== 'svm',\n 'Known chain types must match their expected schema',\n ),\n ]),\n);\n\nexport type TokenListResponse = Array<{\n address: EvmAddress;\n decimals: number;\n logo_url: string;\n name: string;\n symbol: string;\n}>;\n\n/**\n * Schema for the response Markr's /tokens/{chainId}/list endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1tokens~1%7BchainId%7D~1list/get\n */\nexport const TokenListResponseSchema: z.ZodType<TokenListResponse> = z.array(\n z.object({\n address: EvmAddressSchema,\n decimals: z.number().int().nonnegative().max(18),\n logo_url: z.url(),\n name: z.string(),\n symbol: z.string(),\n }),\n);\n\nexport interface QuoteResponseData {\n aggregator: {\n id: string;\n logo_url: string;\n name: string;\n };\n amountIn: bigint;\n amountOut: bigint;\n /** Chain identifier (number for EVM chains, CAIP-2 ID for SVM chains) */\n chainId: number | Caip2ChainId;\n expiredAt: number;\n /**\n * Fee breakdown for cross-chain bridge transactions.\n *\n * Only included in quotes from cross-chain aggregators (DeBridge, LiFi).\n */\n fees?: ReadonlyArray<{\n type: 'protocol' | 'gas' | 'bridge' | 'slippage' | 'swap' | 'other';\n /** Human-readable fee name */\n name: string;\n /** Fee amount in token's smallest unit */\n amount: bigint;\n /** Token the fee is deducted from */\n token: {\n /** Chain ID where fee is deducted */\n chainId: number | Caip2ChainId;\n /** Token address (EVM hex or Solana base58) */\n address: EvmAddress | SolAddress;\n };\n }>;\n gasEstimate?: bigint;\n recommendedSlippage: number;\n /** Input token address (EVM hex or Solana base58) */\n tokenIn: EvmAddress | SolAddress;\n tokenInDecimals: number;\n /** Output token address (EVM hex or Solana base58) */\n tokenOut: EvmAddress | SolAddress;\n tokenOutDecimals: number;\n uuid: string;\n}\n\nexport interface QuoteResponseDataDone {\n done: true;\n}\n\nexport type QuoteResponse = QuoteResponseData | QuoteResponseDataDone;\n\n/**\n * Schema for the response from Markr's /quote endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1quote/post\n */\nexport const QuoteResponseSchema: z.ZodType<QuoteResponse> = z.union([\n z.object({\n aggregator: z.object({\n id: z.string(),\n logo_url: z.url(),\n name: z.string(),\n }),\n amountIn: z.coerce.bigint().nonnegative(),\n amountOut: z.coerce.bigint().nonnegative(),\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n /**\n * Unix time in seconds when the quote expires.\n */\n expiredAt: z.number().int().nonnegative(),\n fees: z\n .array(\n z.object({\n type: z.enum(['protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.coerce.bigint().nonnegative(),\n token: z.object({\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n address: z.union([EvmAddressSchema, SolAddressSchema]),\n }),\n }),\n )\n .optional(),\n /**\n * Estimated gas for the swap transaction.\n * Markr estimates already include a buffer.\n *\n * The API docs do not specify this field as optional, but in practice it can be missing.\n */\n gasEstimate: z.coerce.bigint().nonnegative().optional(),\n /** Recommended slippage in basis points. */\n recommendedSlippage: z.number().int().nonnegative(),\n tokenIn: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenInDecimals: z.number().int().nonnegative().max(18),\n tokenOut: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenOutDecimals: z.number().int().nonnegative().max(18),\n uuid: z.uuid(),\n }),\n z.object({\n done: z.literal(true),\n }),\n]);\n\n/**\n * Response type for Markr's /swap endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1swap/post\n */\nexport interface WrappedSwapTransactionResponse {\n data: Hex;\n to: EvmAddress;\n value: bigint;\n}\n\nexport const WrappedSwapTransactionResponseSchema: z.ZodType<WrappedSwapTransactionResponse> = z.object({\n data: HexSchema,\n to: EvmAddressSchema,\n value: z.coerce.bigint().nonnegative(),\n});\n\n/**\n * Solana swap transaction (returned for SVM chains).\n */\nexport interface SolanaSwapTransactionResponse {\n /** Chain type identifier */\n chainType: 'svm';\n /** Base64-encoded Solana transaction to be signed and sent by the client */\n swapTransaction: string;\n}\n\nexport const SolanaSwapTransactionResponseSchema: z.ZodType<SolanaSwapTransactionResponse> = z.object({\n chainType: z.literal('svm'),\n swapTransaction: z.base64(),\n});\n\nexport type SwapResponse = WrappedSwapTransactionResponse | SolanaSwapTransactionResponse;\n\nexport const SwapResponseSchema: z.ZodType<SwapResponse> = z.union([\n WrappedSwapTransactionResponseSchema,\n SolanaSwapTransactionResponseSchema,\n]);\n\nexport interface PartnerInfoResponse {\n /**\n * The partner fee in basis points collected on each swap.\n */\n fee: number;\n name: string;\n}\n\nexport const PartnerInfoResponseSchema: z.ZodType<PartnerInfoResponse> = z.object({\n fee: z.int().nonnegative(),\n name: z.string(),\n});\n\n/**\n * If the destination token is USDC, the flow is:\n * - pending -> committed -> completed\n *\n * If the destination token is not USDC, the flow is:\n * - pending -> committed -> pending_execution -> completed\n *\n * If the transaction fails at any point, the status will be 'failed'.\n */\nexport type CrossChainStatus =\n | /** Transaction submitted to CCIP */\n 'pending'\n /** Message committed, awaiting execution on destination chain */\n | 'committed'\n /** Message received on destination, swap pending execution by relayer */\n | 'pending_execution'\n /** Message executed successfully on destination chain */\n | 'completed'\n /** Swap expired, and funds were refunded (CCIP only) */\n | 'refunded'\n /** Execution failed */\n | 'failed'\n /** Unknown state */\n | 'unknown';\n\nexport interface CrossChainStatusResponse {\n /**\n * Cross-chain transaction identifier.\n *\n * For CCIP: The CCIP message ID.\n * For DeBridge: The DeBridge order ID.\n */\n messageId: string | null;\n /** Current status of the cross-chain transaction. */\n status: CrossChainStatus;\n /** Human-readable status description */\n description: string;\n /** Source chain information */\n sourceChain: {\n /** Source chain network name */\n name: string;\n /** Source chain transaction hash */\n transactionHash: Hash | Signature;\n /** Transaction timestamp on source chain (ISO 8601) */\n timestamp: string;\n /** When the source transaction was finalized (ISO 8601) */\n finalized: string | boolean | null;\n };\n /** Destination chain information */\n destinationChain: {\n /** Destination chain network name */\n name: string | null;\n /**\n * Destination chain tx hash.\n *\n * - For direct transfers (USDC -> USDC): The CCIP bridge transaction hash.\n * - For successful swaps: The actual swap transaction hash from the relayer.\n * - For pending swaps: null (swap not yet executed).\n */\n transactionHash: Hash | Signature | null;\n /**\n * CCIP bridge tx hash (only present for swaps, not direct transfers).\n *\n * This is the transaction that delivered USDC to the destination chain via CCIP.\n * The `transactionHash` field contains the subsequent swap transaction.\n */\n bridgeHash?: Hash | Signature | null;\n /** Transaction timestamp on destination chain (null if not yet executed) (ISO 8601) */\n timestamp: string | null;\n /** When the destination transaction was finalized (null if not yet executed) (ISO 8601) */\n finalized: string | null;\n };\n /** Transaction progress information */\n progress: {\n /** Whether the message has been committed on destination chain */\n committed: boolean;\n /** When the message was committed (null if not committed) (ISO 8601) */\n commitTimestamp?: string | null;\n /** Whether the message has been executed on destination chain */\n executed: boolean;\n };\n /** Fee information */\n fees: {\n /** Fee token address */\n token: EvmAddress | SolAddress | null;\n /** Fee amount in wei */\n amount: bigint | null;\n };\n /** Tokens transferred in this cross-chain transaction */\n transferredTokens: ReadonlyArray<{\n /** Token address */\n token: EvmAddress | SolAddress;\n /** Token amount */\n amount: bigint;\n }>;\n /**\n * Debug information from Markr transaction API (only present for swaps that have been executed).\n *\n * Contains detailed information about the relayer execution, retry attempts, and transaction details.\n */\n debug?: Partial<{\n /** CCIP message ID */\n messageId: string;\n /** Execution status from relayer */\n status: string;\n /** Destination chain name */\n destinationChain: string;\n /** Destination swap transaction hash */\n destinationTxHash: string;\n /** Relay transaction hash */\n relayTxHash: string;\n /** Number of retry attempts */\n retryCount: number;\n /** Timestamp of last retry attempt (ISO 8601) */\n lastRetryAt: string;\n /** Source chain name */\n sourceChain: string;\n /** Source transaction hash */\n sourceTxHash: string;\n /** When the record was created (ISO 8601) */\n createdAt: string;\n }> | null;\n}\n\nconst ISO_8601_TIMEZONE_DESIGNATOR_REGEX = /[zZ]|[+-]\\d{2}:?\\d{2}$/;\n\n// Markr API returns ISO-8601 datetime strings that are sometimes missing a timezone designator (\"local\" ISO).\n// We assume these are meant to be UTC and append 'Z' if missing, then validate as strict ISO-8601 with timezone.\nconst datetime = z.iso\n .datetime({ local: true })\n .refine(\n (value) => {\n // Accept at least local ISO format\n // If missing timezone, treat as UTC\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n const isoString = hasTimezone ? value : value + 'Z';\n // Validate as strict ISO-8601 with timezone\n return z.iso.datetime().safeParse(isoString).success;\n },\n {\n error: 'Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)',\n },\n )\n .transform((value) => {\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n return hasTimezone ? value : value + 'Z';\n });\n\nexport const CrossChainStatusResponseSchema: z.ZodType<CrossChainStatusResponse> = z.object({\n messageId: z.string().nullable(),\n status: z.enum(['pending', 'committed', 'pending_execution', 'completed', 'failed', 'refunded', 'unknown']),\n description: z.string(),\n sourceChain: z.object({\n name: z.string(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]),\n timestamp: datetime,\n finalized: datetime.or(z.boolean()).nullable(),\n }),\n destinationChain: z.object({\n name: z.string().nullable(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]).nullable(),\n bridgeHash: z.union([HashSchema, SolSignatureSchema]).nullable().optional(),\n timestamp: datetime.nullable(),\n finalized: datetime.nullable(),\n }),\n progress: z.object({\n committed: z.boolean(),\n commitTimestamp: datetime.nullable().optional(),\n executed: z.boolean(),\n }),\n fees: z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]).nullable(),\n amount: z.coerce.bigint().nonnegative().nullable(),\n }),\n transferredTokens: z.array(\n z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]),\n amount: z.coerce.bigint().nonnegative(),\n }),\n ),\n debug: z\n .looseObject({\n messageId: z.string(),\n status: z.string(),\n destinationChain: z.string(),\n destinationTxHash: z.string(),\n relayTxHash: z.string(),\n retryCount: z.number().int().nonnegative(),\n lastRetryAt: z.iso.datetime(),\n sourceChain: z.string(),\n sourceTxHash: z.string(),\n createdAt: z.iso.datetime(),\n })\n .partial()\n .nullable()\n .optional(),\n});\n\nexport interface SpenderAddressResponse {\n address: EvmAddress;\n}\n\nexport const SpenderAddressResponseSchema: z.ZodType<SpenderAddressResponse> = z.object({\n address: EvmAddressSchema,\n});\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../errors.cjs`),n=require(`../../utils/caip.cjs`),r=require(`../../
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../errors.cjs`),n=require(`../../utils/caip.cjs`),r=require(`../../_utils/chain.cjs`),i=require(`../../utils/evm-address.cjs`),a=require(`../../_utils/math.cjs`),o=require(`./_api.cjs`),s=require(`../../utils/sol-address.cjs`);let c=require(`viem`);function l(e,t,n){let r=e.get(t),i=e.get(n);return!r||!i?!1:t===n?r.swapEnabled:r.crossChainSwapEnabled&&r.crossChainTargetChainIds.has(n)}async function u(e,r=!1){let i=new Map;try{let t=(await o.markrGetInfoChains(e)).filter(e=>e.chainType===`evm`||e.chainType===`svm`);for(let e of t){let t=typeof e.chainId==`number`?n.eip155ChainIdToCaip2(e.chainId):e.chainId,a=e.enabled_services.includes(`cross-chain-quote`)&&e.enabled_services.includes(`cross-chain-swap`),o=e.enabled_services.includes(`quote`)&&e.enabled_services.includes(`swap`),s=new Set;for(let r of e.lanes){let e=typeof r==`number`?n.eip155ChainIdToCaip2(r):r;e!==t&&s.add(e)}let c=r?!1:a,l=c?s:new Set;!o&&l.size===0||i.set(t,{chainId:e.chainId,crossChainSwapEnabled:c,crossChainTargetChainIds:l,swapEnabled:o,tokenList:e.enabled_services.includes(`token-list`)})}}catch(e){throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch supported chains from Markr API.`})}return i}async function d(e,t){let n=new Map;for(let[r,i]of t.entries())if(typeof i.chainId==`number`&&i.tokenList&&(i.crossChainSwapEnabled||i.swapEnabled))try{let t=o.markrGetTokenList(e,i.chainId);n.set(r,t)}catch{}return n}function f(t){return t===e.ERC_ZERO_ADDRESS||t===e.SOL_MINT_ADDRESS}function p(t,n){return t.type===e.TokenType.NATIVE?r.isSolanaNamespace(n)?e.SOL_MINT_ADDRESS:e.ERC_ZERO_ADDRESS:t.address}function m({amountOut:e,assetOut:t,slippageBps:n}){let r=a.calculateMinimumAmountOut({amountOut:e,assetOut:t,slippageBps:n});return e>0n&&r===0n?1n:r}function h(t,n,r){let i=t.amountOut*BigInt(r)/10000n,a=t.amountOut-i,o=[..._(t.fees),{type:`partner`,name:`Core Fee`,amount:i,chainId:n.targetChain.chainId,token:v(n.targetAsset)}];return{aggregator:{id:t.aggregator.id,logoUrl:t.aggregator.logo_url,name:t.aggregator.name},amountIn:t.amountIn,amountOut:a,assetIn:n.sourceAsset,assetOut:n.targetAsset,expiresAt:t.expiredAt,fees:o,fromAddress:n.fromAddress,gasEstimate:t.gasEstimate,id:t.uuid,partnerFeeBps:r,serviceType:e.ServiceType.MARKR,slippageBps:n.slippageBps??t.recommendedSlippage,sourceChain:n.sourceChain,targetChain:n.targetChain,toAddress:n.toAddress}}async function g(e){try{return(await o.markrGetPartnerInfo(e)).fee}catch(e){throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch partner info from Markr API.`})}}function _(t){if(!t)return[];let r=[];for(let a of t){let t=typeof a.token.chainId==`number`?n.eip155ChainIdToCaip2(a.token.chainId):a.token.chainId,o;f(a.token.address)?o={type:e.TokenType.NATIVE}:i.isEvmAddress(a.token.address)?o={type:e.TokenType.ERC20,address:a.token.address}:s.isSolAddress(a.token.address)&&(o={type:e.TokenType.SPL,address:a.token.address}),o&&r.push({type:a.type,name:a.name,amount:a.amount,chainId:t,token:o})}return r}function v(t){return t.type===e.TokenType.NATIVE?{type:e.TokenType.NATIVE}:t.type===e.TokenType.SPL?{type:e.TokenType.SPL,address:t.address}:{type:e.TokenType.ERC20,address:t.address}}async function y(e){return e?(await Promise.resolve().then(()=>require(`./_abis/cross-chain-swap-wrapper-abi.cjs`))).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI:(await Promise.resolve().then(()=>require(`./_abis/swap-wrapper-abi.cjs`))).MARKR_SWAP_WRAPPER_ABI}function b(e){if(e instanceof c.BaseError){let t=e.data;if((0,c.isHex)(t))return t;let n;if(e.walk(e=>{let t=e.data;return!n&&(0,c.isHex)(t)&&(n=t),!1}),n)return n;let r=e.cause?.data;if((0,c.isHex)(r))return r}if(!e||typeof e!=`object`)return;let t=e;if((0,c.isHex)(t.data))return t.data;if((0,c.isHex)(t.error?.data))return t.error.data;if((0,c.isHex)(t.cause?.data))return t.cause.data;if((0,c.isHex)(t.response?.data))return t.response.data;if((0,c.isHex)(t.body?.error?.data))return t.body.error.data}function x(e,t){let n=b(t);if(!n)return null;try{let t=(0,c.decodeErrorResult)({abi:e,data:n}),r=t.args.length>0?`(${t.args.map(String).join(`, `)})`:`()`;return`${t.errorName}${r}`}catch{let t=n.slice(0,10).toLowerCase();for(let n of e)if(n.type===`error`&&(0,c.toFunctionSelector)(`${n.name}(${n.inputs.map(e=>e.type).join(`,`)})`).toLowerCase()===t)return`${n.name}()`}return null}exports.assetToAddressString=p,exports.calculateMarkrMinimumAmountOut=m,exports.decodeMarkrRevertError=x,exports.getMarkrSwapWrapperAbi=y,exports.getPartnerFeeBps=g,exports.getSupportedChains=u,exports.getSupportedTokens=d,exports.isRouteSupported=l,exports.isTokenAddressNative=f,exports.quoteFromMarkrQuoteResponseData=h;
|
|
2
2
|
//# sourceMappingURL=_utils.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ERC_ZERO_ADDRESS as e,SOL_MINT_ADDRESS as t,ServiceType as n,TokenType as r}from"../../constants.js";import{ErrorCode as i,ErrorReason as a,SdkError as o}from"../../errors.js";import{eip155ChainIdToCaip2 as s}from"../../utils/caip.js";import{
|
|
1
|
+
import{ERC_ZERO_ADDRESS as e,SOL_MINT_ADDRESS as t,ServiceType as n,TokenType as r}from"../../constants.js";import{ErrorCode as i,ErrorReason as a,SdkError as o}from"../../errors.js";import{eip155ChainIdToCaip2 as s}from"../../utils/caip.js";import{isSolanaNamespace as c}from"../../_utils/chain.js";import{isEvmAddress as l}from"../../utils/evm-address.js";import{calculateMinimumAmountOut as u}from"../../_utils/math.js";import{markrGetInfoChains as d,markrGetPartnerInfo as f,markrGetTokenList as p}from"./_api.js";import{isSolAddress as m}from"../../utils/sol-address.js";import{BaseError as h,decodeErrorResult as g,isHex as _,toFunctionSelector as v}from"viem";function y(e,t,n){let r=e.get(t),i=e.get(n);return!r||!i?!1:t===n?r.swapEnabled:r.crossChainSwapEnabled&&r.crossChainTargetChainIds.has(n)}async function b(e,t=!1){let n=new Map;try{let r=(await d(e)).filter(e=>e.chainType===`evm`||e.chainType===`svm`);for(let e of r){let r=typeof e.chainId==`number`?s(e.chainId):e.chainId,i=e.enabled_services.includes(`cross-chain-quote`)&&e.enabled_services.includes(`cross-chain-swap`),a=e.enabled_services.includes(`quote`)&&e.enabled_services.includes(`swap`),o=new Set;for(let t of e.lanes){let e=typeof t==`number`?s(t):t;e!==r&&o.add(e)}let c=t?!1:i,l=c?o:new Set;!a&&l.size===0||n.set(r,{chainId:e.chainId,crossChainSwapEnabled:c,crossChainTargetChainIds:l,swapEnabled:a,tokenList:e.enabled_services.includes(`token-list`)})}}catch(e){throw new o(a.UNKNOWN,i.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch supported chains from Markr API.`})}return n}async function x(e,t){let n=new Map;for(let[r,i]of t.entries())if(typeof i.chainId==`number`&&i.tokenList&&(i.crossChainSwapEnabled||i.swapEnabled))try{let t=p(e,i.chainId);n.set(r,t)}catch{}return n}function S(n){return n===e||n===t}function C(n,i){return n.type===r.NATIVE?c(i)?t:e:n.address}function w({amountOut:e,assetOut:t,slippageBps:n}){let r=u({amountOut:e,assetOut:t,slippageBps:n});return e>0n&&r===0n?1n:r}function T(e,t,r){let i=e.amountOut*BigInt(r)/10000n,a=e.amountOut-i,o=[...D(e.fees),{type:`partner`,name:`Core Fee`,amount:i,chainId:t.targetChain.chainId,token:O(t.targetAsset)}];return{aggregator:{id:e.aggregator.id,logoUrl:e.aggregator.logo_url,name:e.aggregator.name},amountIn:e.amountIn,amountOut:a,assetIn:t.sourceAsset,assetOut:t.targetAsset,expiresAt:e.expiredAt,fees:o,fromAddress:t.fromAddress,gasEstimate:e.gasEstimate,id:e.uuid,partnerFeeBps:r,serviceType:n.MARKR,slippageBps:t.slippageBps??e.recommendedSlippage,sourceChain:t.sourceChain,targetChain:t.targetChain,toAddress:t.toAddress}}async function E(e){try{return(await f(e)).fee}catch(e){throw new o(a.UNKNOWN,i.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch partner info from Markr API.`})}}function D(e){if(!e)return[];let t=[];for(let n of e){let e=typeof n.token.chainId==`number`?s(n.token.chainId):n.token.chainId,i;S(n.token.address)?i={type:r.NATIVE}:l(n.token.address)?i={type:r.ERC20,address:n.token.address}:m(n.token.address)&&(i={type:r.SPL,address:n.token.address}),i&&t.push({type:n.type,name:n.name,amount:n.amount,chainId:e,token:i})}return t}function O(e){return e.type===r.NATIVE?{type:r.NATIVE}:e.type===r.SPL?{type:r.SPL,address:e.address}:{type:r.ERC20,address:e.address}}async function k(e){return e?(await import(`./_abis/cross-chain-swap-wrapper-abi.js`)).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI:(await import(`./_abis/swap-wrapper-abi.js`)).MARKR_SWAP_WRAPPER_ABI}function A(e){if(e instanceof h){let t=e.data;if(_(t))return t;let n;if(e.walk(e=>{let t=e.data;return!n&&_(t)&&(n=t),!1}),n)return n;let r=e.cause?.data;if(_(r))return r}if(!e||typeof e!=`object`)return;let t=e;if(_(t.data))return t.data;if(_(t.error?.data))return t.error.data;if(_(t.cause?.data))return t.cause.data;if(_(t.response?.data))return t.response.data;if(_(t.body?.error?.data))return t.body.error.data}function j(e,t){let n=A(t);if(!n)return null;try{let t=g({abi:e,data:n}),r=t.args.length>0?`(${t.args.map(String).join(`, `)})`:`()`;return`${t.errorName}${r}`}catch{let t=n.slice(0,10).toLowerCase();for(let n of e)if(n.type===`error`&&v(`${n.name}(${n.inputs.map(e=>e.type).join(`,`)})`).toLowerCase()===t)return`${n.name}()`}return null}export{C as assetToAddressString,w as calculateMarkrMinimumAmountOut,j as decodeMarkrRevertError,k as getMarkrSwapWrapperAbi,E as getPartnerFeeBps,b as getSupportedChains,x as getSupportedTokens,y as isRouteSupported,S as isTokenAddressNative,T as quoteFromMarkrQuoteResponseData};
|
|
2
2
|
//# sourceMappingURL=_utils.js.map
|
|
@@ -55,18 +55,6 @@ interface TransferManager {
|
|
|
55
55
|
/** Estimate the native fee for executing the provided quote. */
|
|
56
56
|
estimateNativeFee(quote: Quote, options?: EstimateNativeFeeOptions): Promise<NativeFeeEstimate>;
|
|
57
57
|
/**
|
|
58
|
-
* Given a source asset and chain, provides a mapping of supported destination chains to their
|
|
59
|
-
* corresponding bridged asset via the underlying services.
|
|
60
|
-
*
|
|
61
|
-
* If there is no supported bridge for the given source asset and chain, returns null.
|
|
62
|
-
*
|
|
63
|
-
* @deprecated Use `getBridgeableAssets` instead.
|
|
64
|
-
*/
|
|
65
|
-
getAssetBridgeMap(props: {
|
|
66
|
-
sourceAsset: Asset;
|
|
67
|
-
sourceChainId: Caip2ChainId;
|
|
68
|
-
}): Promise<AssetBridgeMap | null>;
|
|
69
|
-
/**
|
|
70
58
|
* Returns all assets possibly receivable on targetChainId for the given source asset,
|
|
71
59
|
* across all configured bridge and swap providers. Assets are enriched with logoUri
|
|
72
60
|
* where available.
|
|
@@ -55,18 +55,6 @@ interface TransferManager {
|
|
|
55
55
|
/** Estimate the native fee for executing the provided quote. */
|
|
56
56
|
estimateNativeFee(quote: Quote, options?: EstimateNativeFeeOptions): Promise<NativeFeeEstimate>;
|
|
57
57
|
/**
|
|
58
|
-
* Given a source asset and chain, provides a mapping of supported destination chains to their
|
|
59
|
-
* corresponding bridged asset via the underlying services.
|
|
60
|
-
*
|
|
61
|
-
* If there is no supported bridge for the given source asset and chain, returns null.
|
|
62
|
-
*
|
|
63
|
-
* @deprecated Use `getBridgeableAssets` instead.
|
|
64
|
-
*/
|
|
65
|
-
getAssetBridgeMap(props: {
|
|
66
|
-
sourceAsset: Asset;
|
|
67
|
-
sourceChainId: Caip2ChainId;
|
|
68
|
-
}): Promise<AssetBridgeMap | null>;
|
|
69
|
-
/**
|
|
70
58
|
* Returns all assets possibly receivable on targetChainId for the given source asset,
|
|
71
59
|
* across all configured bridge and swap providers. Assets are enriched with logoUri
|
|
72
60
|
* where available.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Caip2ChainId } from "./caip.cjs";
|
|
1
2
|
import { Chain } from "./chain.cjs";
|
|
2
3
|
import { Environment, ServiceType, TransferSignatureReason } from "../constants.cjs";
|
|
3
4
|
import { Asset } from "./asset.cjs";
|
|
@@ -19,7 +20,7 @@ interface TransferStepDetails {
|
|
|
19
20
|
/**
|
|
20
21
|
* Unified transfer lifecycle states (bridge and swap).
|
|
21
22
|
*/
|
|
22
|
-
type TransferStatus = "created" | "source-pending" | "source-completed" | "target-pending" | "completed" | "failed";
|
|
23
|
+
type TransferStatus = "created" | "source-pending" | "source-completed" | "target-pending" | "refunded" | "completed" | "failed";
|
|
23
24
|
/** Common fields for any transfer (bridge or swap). */
|
|
24
25
|
interface TransferBase {
|
|
25
26
|
/** The original source asset amount (smallest unit). */
|
|
@@ -80,9 +81,27 @@ interface SourceCompletedTransfer<SourceTxHash extends string = string> extends
|
|
|
80
81
|
readonly status: "source-completed";
|
|
81
82
|
readonly source: TransferSourceProgress<SourceTxHash>;
|
|
82
83
|
}
|
|
83
|
-
interface TargetPendingTransfer<TargetTxHash extends string = string> extends TransferBase {
|
|
84
|
+
interface TargetPendingTransfer<SourceTxHash extends string = string, TargetTxHash extends string = string> extends TransferBase {
|
|
84
85
|
readonly status: "target-pending";
|
|
85
|
-
readonly source: TransferSourceProgress
|
|
86
|
+
readonly source: TransferSourceProgress<SourceTxHash>;
|
|
87
|
+
readonly target: TransferTargetProgress<TargetTxHash> | null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Indicates that the cross-chain swap failed to fully complete (execute) on
|
|
91
|
+
* the destination chain, and that a refund transaction has been issued.
|
|
92
|
+
*
|
|
93
|
+
* This is a "terminal" status (like "completed" or "failed") that indicates no further state changes will occur.
|
|
94
|
+
*/
|
|
95
|
+
interface RefundedTransfer<SourceTxHash extends string = string, TargetTxHash extends string = string> extends TransferBase {
|
|
96
|
+
readonly status: "refunded";
|
|
97
|
+
readonly refund: Readonly<{
|
|
98
|
+
/** The amount refunded (smallest unit) of refund asset. */amount: bigint; /** The asset the refund is issued in */
|
|
99
|
+
asset: Asset | null; /** Chain ID where the refund is issued */
|
|
100
|
+
chainId: Caip2ChainId; /** Transaction hash of the refund */
|
|
101
|
+
txHash: SourceTxHash | TargetTxHash | null; /** Timestamp when the refund was issued */
|
|
102
|
+
timestampMs: number;
|
|
103
|
+
}>;
|
|
104
|
+
readonly source: TransferSourceProgress<SourceTxHash>;
|
|
86
105
|
readonly target: TransferTargetProgress<TargetTxHash> | null;
|
|
87
106
|
}
|
|
88
107
|
interface CompletedTransfer<SourceTxHash extends string = string, TargetTxHash extends string = string> extends TransferBase {
|
|
@@ -101,7 +120,7 @@ interface FailedTransfer<SourceTxHash extends string = string, TargetTxHash exte
|
|
|
101
120
|
readonly target?: TransferTargetProgress<TargetTxHash> | null;
|
|
102
121
|
}
|
|
103
122
|
/** Discriminated union for runtime tracking. */
|
|
104
|
-
type Transfer<SourceTxHash extends string = string, TargetTxHash extends string = string> = SourcePendingTransfer<SourceTxHash> | SourceCompletedTransfer<SourceTxHash> | TargetPendingTransfer<TargetTxHash> | CompletedTransfer<SourceTxHash, TargetTxHash> | FailedTransfer<SourceTxHash, TargetTxHash>;
|
|
123
|
+
type Transfer<SourceTxHash extends string = string, TargetTxHash extends string = string> = SourcePendingTransfer<SourceTxHash> | SourceCompletedTransfer<SourceTxHash> | TargetPendingTransfer<SourceTxHash, TargetTxHash> | RefundedTransfer<SourceTxHash, TargetTxHash> | CompletedTransfer<SourceTxHash, TargetTxHash> | FailedTransfer<SourceTxHash, TargetTxHash>;
|
|
105
124
|
//#endregion
|
|
106
|
-
export { CompletedTransfer, FailedTransfer, SourceCompletedTransfer, SourcePendingTransfer, TargetPendingTransfer, Transfer, TransferBase, TransferSourceProgress, TransferStatus, TransferStepDetails, TransferTargetProgress };
|
|
125
|
+
export { CompletedTransfer, FailedTransfer, RefundedTransfer, SourceCompletedTransfer, SourcePendingTransfer, TargetPendingTransfer, Transfer, TransferBase, TransferSourceProgress, TransferStatus, TransferStepDetails, TransferTargetProgress };
|
|
107
126
|
//# sourceMappingURL=transfer.d.cts.map
|
package/dist/types/transfer.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Caip2ChainId } from "./caip.js";
|
|
1
2
|
import { Chain } from "./chain.js";
|
|
2
3
|
import { Environment, ServiceType, TransferSignatureReason } from "../constants.js";
|
|
3
4
|
import { Asset } from "./asset.js";
|
|
@@ -19,7 +20,7 @@ interface TransferStepDetails {
|
|
|
19
20
|
/**
|
|
20
21
|
* Unified transfer lifecycle states (bridge and swap).
|
|
21
22
|
*/
|
|
22
|
-
type TransferStatus = "created" | "source-pending" | "source-completed" | "target-pending" | "completed" | "failed";
|
|
23
|
+
type TransferStatus = "created" | "source-pending" | "source-completed" | "target-pending" | "refunded" | "completed" | "failed";
|
|
23
24
|
/** Common fields for any transfer (bridge or swap). */
|
|
24
25
|
interface TransferBase {
|
|
25
26
|
/** The original source asset amount (smallest unit). */
|
|
@@ -80,9 +81,27 @@ interface SourceCompletedTransfer<SourceTxHash extends string = string> extends
|
|
|
80
81
|
readonly status: "source-completed";
|
|
81
82
|
readonly source: TransferSourceProgress<SourceTxHash>;
|
|
82
83
|
}
|
|
83
|
-
interface TargetPendingTransfer<TargetTxHash extends string = string> extends TransferBase {
|
|
84
|
+
interface TargetPendingTransfer<SourceTxHash extends string = string, TargetTxHash extends string = string> extends TransferBase {
|
|
84
85
|
readonly status: "target-pending";
|
|
85
|
-
readonly source: TransferSourceProgress
|
|
86
|
+
readonly source: TransferSourceProgress<SourceTxHash>;
|
|
87
|
+
readonly target: TransferTargetProgress<TargetTxHash> | null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Indicates that the cross-chain swap failed to fully complete (execute) on
|
|
91
|
+
* the destination chain, and that a refund transaction has been issued.
|
|
92
|
+
*
|
|
93
|
+
* This is a "terminal" status (like "completed" or "failed") that indicates no further state changes will occur.
|
|
94
|
+
*/
|
|
95
|
+
interface RefundedTransfer<SourceTxHash extends string = string, TargetTxHash extends string = string> extends TransferBase {
|
|
96
|
+
readonly status: "refunded";
|
|
97
|
+
readonly refund: Readonly<{
|
|
98
|
+
/** The amount refunded (smallest unit) of refund asset. */amount: bigint; /** The asset the refund is issued in */
|
|
99
|
+
asset: Asset | null; /** Chain ID where the refund is issued */
|
|
100
|
+
chainId: Caip2ChainId; /** Transaction hash of the refund */
|
|
101
|
+
txHash: SourceTxHash | TargetTxHash | null; /** Timestamp when the refund was issued */
|
|
102
|
+
timestampMs: number;
|
|
103
|
+
}>;
|
|
104
|
+
readonly source: TransferSourceProgress<SourceTxHash>;
|
|
86
105
|
readonly target: TransferTargetProgress<TargetTxHash> | null;
|
|
87
106
|
}
|
|
88
107
|
interface CompletedTransfer<SourceTxHash extends string = string, TargetTxHash extends string = string> extends TransferBase {
|
|
@@ -101,7 +120,7 @@ interface FailedTransfer<SourceTxHash extends string = string, TargetTxHash exte
|
|
|
101
120
|
readonly target?: TransferTargetProgress<TargetTxHash> | null;
|
|
102
121
|
}
|
|
103
122
|
/** Discriminated union for runtime tracking. */
|
|
104
|
-
type Transfer<SourceTxHash extends string = string, TargetTxHash extends string = string> = SourcePendingTransfer<SourceTxHash> | SourceCompletedTransfer<SourceTxHash> | TargetPendingTransfer<TargetTxHash> | CompletedTransfer<SourceTxHash, TargetTxHash> | FailedTransfer<SourceTxHash, TargetTxHash>;
|
|
123
|
+
type Transfer<SourceTxHash extends string = string, TargetTxHash extends string = string> = SourcePendingTransfer<SourceTxHash> | SourceCompletedTransfer<SourceTxHash> | TargetPendingTransfer<SourceTxHash, TargetTxHash> | RefundedTransfer<SourceTxHash, TargetTxHash> | CompletedTransfer<SourceTxHash, TargetTxHash> | FailedTransfer<SourceTxHash, TargetTxHash>;
|
|
105
124
|
//#endregion
|
|
106
|
-
export { CompletedTransfer, FailedTransfer, SourceCompletedTransfer, SourcePendingTransfer, TargetPendingTransfer, Transfer, TransferBase, TransferSourceProgress, TransferStatus, TransferStepDetails, TransferTargetProgress };
|
|
125
|
+
export { CompletedTransfer, FailedTransfer, RefundedTransfer, SourceCompletedTransfer, SourcePendingTransfer, TargetPendingTransfer, Transfer, TransferBase, TransferSourceProgress, TransferStatus, TransferStepDetails, TransferTargetProgress };
|
|
107
126
|
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants.cjs`);let t=require(`zod`);const n=`__type`,r=`bigint`,i=`value`;function a(e){return JSON.stringify(e,(e,t)=>typeof t==`bigint`?{[n]:r,[i]:t.toString()}:t)}function o(e){let t=JSON.parse(e,(e,t)=>t&&typeof t==`object`&&t[n]===r&&typeof t[i]==`string`?BigInt(t[i]):t),a=p.safeParse(t);if(!a.success)throw Error(`Failed to parse transfer: ${a.error.message}`);return a.data}const s=t.z.object({name:t.z.string(),symbol:t.z.string(),decimals:t.z.int().nonnegative(),type:t.z.enum(e.TokenType)}),c=s.extend({type:t.z.literal(e.TokenType.NATIVE)}),l=s.extend({type:t.z.literal(e.TokenType.ERC20),address:t.z.string()}),u=s.extend({type:t.z.literal(e.TokenType.SPL),address:t.z.string()}),d=t.z.discriminatedUnion(`type`,[c,l,u]),f=t.z.object({chainId:t.z.string(),chainName:t.z.string(),networkToken:c,rpcUrl:t.z.string(),utilityAddresses:t.z.object({multicall:t.z.string()}).optional()}),p=t.z.object({amountIn:t.z.bigint().nonnegative(),amountOut:t.z.bigint().nonnegative(),completedAtMs:t.z.int().nonnegative().optional(),environment:t.z.enum(e.Environment),errorCode:t.z.number().optional(),errorReason:t.z.string().optional(),failedAtMs:t.z.int().nonnegative().optional(),fees:t.z.array(t.z.object({type:t.z.enum([`partner`,`protocol`,`gas`,`bridge`,`slippage`,`swap`,`other`]),name:t.z.string(),amount:t.z.bigint().nonnegative(),chainId:t.z.string(),token:t.z.discriminatedUnion(`type`,[t.z.object({type:t.z.literal(e.TokenType.NATIVE)}),t.z.object({type:t.z.literal(e.TokenType.ERC20),address:t.z.string()}),t.z.object({type:t.z.literal(e.TokenType.SPL),address:t.z.string()})])})),fromAddress:t.z.string(),id:t.z.string(),metadata:t.z.record(t.z.string(),t.z.unknown()).optional(),partnerFeeBps:t.z.int().nonnegative().nullable(),source:t.z.object({confirmationCount:t.z.int().nonnegative(),requiredConfirmationCount:t.z.int().nonnegative(),startedAtMs:t.z.int().nonnegative(),targetStartBlockNumber:t.z.bigint().nonnegative().optional(),txHash:t.z.string()}).optional(),target:t.z.object({confirmationCount:t.z.int().nonnegative(),requiredConfirmationCount:t.z.int().nonnegative(),startedAtMs:t.z.int().nonnegative(),txHash:t.z.string().optional()}).nullable().optional(),sourceAsset:d,sourceChain:f,status:t.z.enum([`created`,`source-pending`,`source-completed`,`target-pending`,`completed`,`failed`]),targetAsset:d,targetChain:f,toAddress:t.z.string(),type:t.z.enum(e.ServiceType)});exports.parseTransfer=o,exports.stringifyTransfer=a;
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants.cjs`);let t=require(`zod`);const n=`__type`,r=`bigint`,i=`value`;function a(e){return JSON.stringify(e,(e,t)=>typeof t==`bigint`?{[n]:r,[i]:t.toString()}:t)}function o(e){let t=JSON.parse(e,(e,t)=>t&&typeof t==`object`&&t[n]===r&&typeof t[i]==`string`?BigInt(t[i]):t),a=p.safeParse(t);if(!a.success)throw Error(`Failed to parse transfer: ${a.error.message}`);return a.data}const s=t.z.object({name:t.z.string(),symbol:t.z.string(),decimals:t.z.int().nonnegative(),type:t.z.enum(e.TokenType)}),c=s.extend({type:t.z.literal(e.TokenType.NATIVE)}),l=s.extend({type:t.z.literal(e.TokenType.ERC20),address:t.z.string()}),u=s.extend({type:t.z.literal(e.TokenType.SPL),address:t.z.string()}),d=t.z.discriminatedUnion(`type`,[c,l,u]),f=t.z.object({chainId:t.z.string(),chainName:t.z.string(),networkToken:c,rpcUrl:t.z.string(),utilityAddresses:t.z.object({multicall:t.z.string()}).optional()}),p=t.z.object({amountIn:t.z.bigint().nonnegative(),amountOut:t.z.bigint().nonnegative(),completedAtMs:t.z.int().nonnegative().optional(),environment:t.z.enum(e.Environment),errorCode:t.z.number().optional(),errorReason:t.z.string().optional(),failedAtMs:t.z.int().nonnegative().optional(),fees:t.z.array(t.z.object({type:t.z.enum([`partner`,`protocol`,`gas`,`bridge`,`slippage`,`swap`,`other`]),name:t.z.string(),amount:t.z.bigint().nonnegative(),chainId:t.z.string(),token:t.z.discriminatedUnion(`type`,[t.z.object({type:t.z.literal(e.TokenType.NATIVE)}),t.z.object({type:t.z.literal(e.TokenType.ERC20),address:t.z.string()}),t.z.object({type:t.z.literal(e.TokenType.SPL),address:t.z.string()})])})),fromAddress:t.z.string(),id:t.z.string(),metadata:t.z.record(t.z.string(),t.z.unknown()).optional(),partnerFeeBps:t.z.int().nonnegative().nullable(),refund:t.z.object({amount:t.z.bigint().nonnegative(),asset:d.nullable(),chainId:t.z.string(),txHash:t.z.string().nullable(),timestampMs:t.z.int().nonnegative()}).optional(),source:t.z.object({confirmationCount:t.z.int().nonnegative(),requiredConfirmationCount:t.z.int().nonnegative(),startedAtMs:t.z.int().nonnegative(),targetStartBlockNumber:t.z.bigint().nonnegative().optional(),txHash:t.z.string()}).optional(),target:t.z.object({confirmationCount:t.z.int().nonnegative(),requiredConfirmationCount:t.z.int().nonnegative(),startedAtMs:t.z.int().nonnegative(),txHash:t.z.string().optional()}).nullable().optional(),sourceAsset:d,sourceChain:f,status:t.z.enum([`created`,`source-pending`,`source-completed`,`target-pending`,`refunded`,`completed`,`failed`]),targetAsset:d,targetChain:f,toAddress:t.z.string(),type:t.z.enum(e.ServiceType)});exports.parseTransfer=o,exports.stringifyTransfer=a;
|
|
2
2
|
//# sourceMappingURL=transfer-utils.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer-utils.cjs","names":["z","TokenType","Environment","ServiceType"],"sources":["../../src/utils/transfer-utils.ts"],"sourcesContent":["import { z } from 'zod';\nimport { Environment, ServiceType, TokenType } from '../constants';\nimport type { Transfer } from '../types/transfer';\n\nconst STRINGIFY_TYPE_TAG = '__type';\nconst BIGINT_TYPE = 'bigint';\nconst STRINGIFY_VALUE = 'value';\n\nexport function stringifyTransfer(transfer: Transfer): string {\n return JSON.stringify(transfer, (_key, value) => {\n if (typeof value === 'bigint') {\n return { [STRINGIFY_TYPE_TAG]: BIGINT_TYPE, [STRINGIFY_VALUE]: value.toString() };\n }\n\n return value;\n });\n}\n\nexport function parseTransfer(transferString: string): Transfer {\n const rawJSON = JSON.parse(transferString, (_key, value) => {\n if (\n value &&\n typeof value === 'object' &&\n value[STRINGIFY_TYPE_TAG] === BIGINT_TYPE &&\n typeof value[STRINGIFY_VALUE] === 'string'\n ) {\n return BigInt(value[STRINGIFY_VALUE]);\n }\n\n return value;\n });\n\n const parsed = LooseTransferSchema.safeParse(rawJSON);\n\n if (!parsed.success) {\n throw new Error(`Failed to parse transfer: ${parsed.error.message}`);\n }\n\n return parsed.data as Transfer;\n}\n\nconst AssetBaseSchema = z.object({\n name: z.string(),\n symbol: z.string(),\n decimals: z.int().nonnegative(),\n type: z.enum(TokenType),\n});\n\nconst NativeAssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.NATIVE),\n});\n\nconst LooseErc20AssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.ERC20),\n address: z.string(),\n});\n\nconst LooseSplAssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.SPL),\n address: z.string(),\n});\n\nconst LooseAssetSchema = z.discriminatedUnion('type', [NativeAssetSchema, LooseErc20AssetSchema, LooseSplAssetSchema]);\n\nconst ChainSchema = z.object({\n chainId: z.string(),\n chainName: z.string(),\n networkToken: NativeAssetSchema,\n rpcUrl: z.string(),\n utilityAddresses: z\n .object({\n multicall: z.string(),\n })\n .optional(),\n});\n\nconst LooseTransferSchema = z.object({\n amountIn: z.bigint().nonnegative(),\n amountOut: z.bigint().nonnegative(),\n completedAtMs: z.int().nonnegative().optional(),\n environment: z.enum(Environment),\n errorCode: z.number().optional(),\n errorReason: z.string().optional(),\n failedAtMs: z.int().nonnegative().optional(),\n fees: z.array(\n z.object({\n type: z.enum(['partner', 'protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.bigint().nonnegative(),\n chainId: z.string(),\n token: z.discriminatedUnion('type', [\n z.object({\n type: z.literal(TokenType.NATIVE),\n }),\n z.object({\n type: z.literal(TokenType.ERC20),\n address: z.string(),\n }),\n z.object({\n type: z.literal(TokenType.SPL),\n address: z.string(),\n }),\n ]),\n }),\n ),\n fromAddress: z.string(),\n id: z.string(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n partnerFeeBps: z.int().nonnegative().nullable(),\n source: z\n .object({\n confirmationCount: z.int().nonnegative(),\n requiredConfirmationCount: z.int().nonnegative(),\n startedAtMs: z.int().nonnegative(),\n targetStartBlockNumber: z.bigint().nonnegative().optional(),\n txHash: z.string(),\n })\n .optional(),\n target: z\n .object({\n confirmationCount: z.int().nonnegative(),\n requiredConfirmationCount: z.int().nonnegative(),\n startedAtMs: z.int().nonnegative(),\n txHash: z.string().optional(),\n })\n .nullable()\n .optional(),\n sourceAsset: LooseAssetSchema,\n sourceChain: ChainSchema,\n status: z.enum(['created'
|
|
1
|
+
{"version":3,"file":"transfer-utils.cjs","names":["z","TokenType","Environment","ServiceType"],"sources":["../../src/utils/transfer-utils.ts"],"sourcesContent":["import { z } from 'zod';\nimport { Environment, ServiceType, TokenType } from '../constants';\nimport type { Transfer } from '../types/transfer';\n\nconst STRINGIFY_TYPE_TAG = '__type';\nconst BIGINT_TYPE = 'bigint';\nconst STRINGIFY_VALUE = 'value';\n\nexport function stringifyTransfer(transfer: Transfer): string {\n return JSON.stringify(transfer, (_key, value) => {\n if (typeof value === 'bigint') {\n return { [STRINGIFY_TYPE_TAG]: BIGINT_TYPE, [STRINGIFY_VALUE]: value.toString() };\n }\n\n return value;\n });\n}\n\nexport function parseTransfer(transferString: string): Transfer {\n const rawJSON = JSON.parse(transferString, (_key, value) => {\n if (\n value &&\n typeof value === 'object' &&\n value[STRINGIFY_TYPE_TAG] === BIGINT_TYPE &&\n typeof value[STRINGIFY_VALUE] === 'string'\n ) {\n return BigInt(value[STRINGIFY_VALUE]);\n }\n\n return value;\n });\n\n const parsed = LooseTransferSchema.safeParse(rawJSON);\n\n if (!parsed.success) {\n throw new Error(`Failed to parse transfer: ${parsed.error.message}`);\n }\n\n return parsed.data as Transfer;\n}\n\nconst AssetBaseSchema = z.object({\n name: z.string(),\n symbol: z.string(),\n decimals: z.int().nonnegative(),\n type: z.enum(TokenType),\n});\n\nconst NativeAssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.NATIVE),\n});\n\nconst LooseErc20AssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.ERC20),\n address: z.string(),\n});\n\nconst LooseSplAssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.SPL),\n address: z.string(),\n});\n\nconst LooseAssetSchema = z.discriminatedUnion('type', [NativeAssetSchema, LooseErc20AssetSchema, LooseSplAssetSchema]);\n\nconst ChainSchema = z.object({\n chainId: z.string(),\n chainName: z.string(),\n networkToken: NativeAssetSchema,\n rpcUrl: z.string(),\n utilityAddresses: z\n .object({\n multicall: z.string(),\n })\n .optional(),\n});\n\nconst LooseTransferSchema = z.object({\n amountIn: z.bigint().nonnegative(),\n amountOut: z.bigint().nonnegative(),\n completedAtMs: z.int().nonnegative().optional(),\n environment: z.enum(Environment),\n errorCode: z.number().optional(),\n errorReason: z.string().optional(),\n failedAtMs: z.int().nonnegative().optional(),\n fees: z.array(\n z.object({\n type: z.enum(['partner', 'protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.bigint().nonnegative(),\n chainId: z.string(),\n token: z.discriminatedUnion('type', [\n z.object({\n type: z.literal(TokenType.NATIVE),\n }),\n z.object({\n type: z.literal(TokenType.ERC20),\n address: z.string(),\n }),\n z.object({\n type: z.literal(TokenType.SPL),\n address: z.string(),\n }),\n ]),\n }),\n ),\n fromAddress: z.string(),\n id: z.string(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n partnerFeeBps: z.int().nonnegative().nullable(),\n refund: z\n .object({\n amount: z.bigint().nonnegative(),\n asset: LooseAssetSchema.nullable(),\n chainId: z.string(),\n txHash: z.string().nullable(),\n timestampMs: z.int().nonnegative(),\n })\n .optional(),\n source: z\n .object({\n confirmationCount: z.int().nonnegative(),\n requiredConfirmationCount: z.int().nonnegative(),\n startedAtMs: z.int().nonnegative(),\n targetStartBlockNumber: z.bigint().nonnegative().optional(),\n txHash: z.string(),\n })\n .optional(),\n target: z\n .object({\n confirmationCount: z.int().nonnegative(),\n requiredConfirmationCount: z.int().nonnegative(),\n startedAtMs: z.int().nonnegative(),\n txHash: z.string().optional(),\n })\n .nullable()\n .optional(),\n sourceAsset: LooseAssetSchema,\n sourceChain: ChainSchema,\n status: z.enum([\n 'created',\n 'source-pending',\n 'source-completed',\n 'target-pending',\n 'refunded',\n 'completed',\n 'failed',\n ]),\n targetAsset: LooseAssetSchema,\n targetChain: ChainSchema,\n toAddress: z.string(),\n type: z.enum(ServiceType),\n});\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Environment as e,ServiceType as t,TokenType as n}from"../constants.js";import{z as r}from"zod";const i=`__type`,a=`bigint`,o=`value`;function s(e){return JSON.stringify(e,(e,t)=>typeof t==`bigint`?{[i]:a,[o]:t.toString()}:t)}function c(e){let t=JSON.parse(e,(e,t)=>t&&typeof t==`object`&&t[i]===a&&typeof t[o]==`string`?BigInt(t[o]):t),n=h.safeParse(t);if(!n.success)throw Error(`Failed to parse transfer: ${n.error.message}`);return n.data}const l=r.object({name:r.string(),symbol:r.string(),decimals:r.int().nonnegative(),type:r.enum(n)}),u=l.extend({type:r.literal(n.NATIVE)}),d=l.extend({type:r.literal(n.ERC20),address:r.string()}),f=l.extend({type:r.literal(n.SPL),address:r.string()}),p=r.discriminatedUnion(`type`,[u,d,f]),m=r.object({chainId:r.string(),chainName:r.string(),networkToken:u,rpcUrl:r.string(),utilityAddresses:r.object({multicall:r.string()}).optional()}),h=r.object({amountIn:r.bigint().nonnegative(),amountOut:r.bigint().nonnegative(),completedAtMs:r.int().nonnegative().optional(),environment:r.enum(e),errorCode:r.number().optional(),errorReason:r.string().optional(),failedAtMs:r.int().nonnegative().optional(),fees:r.array(r.object({type:r.enum([`partner`,`protocol`,`gas`,`bridge`,`slippage`,`swap`,`other`]),name:r.string(),amount:r.bigint().nonnegative(),chainId:r.string(),token:r.discriminatedUnion(`type`,[r.object({type:r.literal(n.NATIVE)}),r.object({type:r.literal(n.ERC20),address:r.string()}),r.object({type:r.literal(n.SPL),address:r.string()})])})),fromAddress:r.string(),id:r.string(),metadata:r.record(r.string(),r.unknown()).optional(),partnerFeeBps:r.int().nonnegative().nullable(),source:r.object({confirmationCount:r.int().nonnegative(),requiredConfirmationCount:r.int().nonnegative(),startedAtMs:r.int().nonnegative(),targetStartBlockNumber:r.bigint().nonnegative().optional(),txHash:r.string()}).optional(),target:r.object({confirmationCount:r.int().nonnegative(),requiredConfirmationCount:r.int().nonnegative(),startedAtMs:r.int().nonnegative(),txHash:r.string().optional()}).nullable().optional(),sourceAsset:p,sourceChain:m,status:r.enum([`created`,`source-pending`,`source-completed`,`target-pending`,`completed`,`failed`]),targetAsset:p,targetChain:m,toAddress:r.string(),type:r.enum(t)});export{c as parseTransfer,s as stringifyTransfer};
|
|
1
|
+
import{Environment as e,ServiceType as t,TokenType as n}from"../constants.js";import{z as r}from"zod";const i=`__type`,a=`bigint`,o=`value`;function s(e){return JSON.stringify(e,(e,t)=>typeof t==`bigint`?{[i]:a,[o]:t.toString()}:t)}function c(e){let t=JSON.parse(e,(e,t)=>t&&typeof t==`object`&&t[i]===a&&typeof t[o]==`string`?BigInt(t[o]):t),n=h.safeParse(t);if(!n.success)throw Error(`Failed to parse transfer: ${n.error.message}`);return n.data}const l=r.object({name:r.string(),symbol:r.string(),decimals:r.int().nonnegative(),type:r.enum(n)}),u=l.extend({type:r.literal(n.NATIVE)}),d=l.extend({type:r.literal(n.ERC20),address:r.string()}),f=l.extend({type:r.literal(n.SPL),address:r.string()}),p=r.discriminatedUnion(`type`,[u,d,f]),m=r.object({chainId:r.string(),chainName:r.string(),networkToken:u,rpcUrl:r.string(),utilityAddresses:r.object({multicall:r.string()}).optional()}),h=r.object({amountIn:r.bigint().nonnegative(),amountOut:r.bigint().nonnegative(),completedAtMs:r.int().nonnegative().optional(),environment:r.enum(e),errorCode:r.number().optional(),errorReason:r.string().optional(),failedAtMs:r.int().nonnegative().optional(),fees:r.array(r.object({type:r.enum([`partner`,`protocol`,`gas`,`bridge`,`slippage`,`swap`,`other`]),name:r.string(),amount:r.bigint().nonnegative(),chainId:r.string(),token:r.discriminatedUnion(`type`,[r.object({type:r.literal(n.NATIVE)}),r.object({type:r.literal(n.ERC20),address:r.string()}),r.object({type:r.literal(n.SPL),address:r.string()})])})),fromAddress:r.string(),id:r.string(),metadata:r.record(r.string(),r.unknown()).optional(),partnerFeeBps:r.int().nonnegative().nullable(),refund:r.object({amount:r.bigint().nonnegative(),asset:p.nullable(),chainId:r.string(),txHash:r.string().nullable(),timestampMs:r.int().nonnegative()}).optional(),source:r.object({confirmationCount:r.int().nonnegative(),requiredConfirmationCount:r.int().nonnegative(),startedAtMs:r.int().nonnegative(),targetStartBlockNumber:r.bigint().nonnegative().optional(),txHash:r.string()}).optional(),target:r.object({confirmationCount:r.int().nonnegative(),requiredConfirmationCount:r.int().nonnegative(),startedAtMs:r.int().nonnegative(),txHash:r.string().optional()}).nullable().optional(),sourceAsset:p,sourceChain:m,status:r.enum([`created`,`source-pending`,`source-completed`,`target-pending`,`refunded`,`completed`,`failed`]),targetAsset:p,targetChain:m,toAddress:r.string(),type:r.enum(t)});export{c as parseTransfer,s as stringifyTransfer};
|
|
2
2
|
//# sourceMappingURL=transfer-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer-utils.js","names":[],"sources":["../../src/utils/transfer-utils.ts"],"sourcesContent":["import { z } from 'zod';\nimport { Environment, ServiceType, TokenType } from '../constants';\nimport type { Transfer } from '../types/transfer';\n\nconst STRINGIFY_TYPE_TAG = '__type';\nconst BIGINT_TYPE = 'bigint';\nconst STRINGIFY_VALUE = 'value';\n\nexport function stringifyTransfer(transfer: Transfer): string {\n return JSON.stringify(transfer, (_key, value) => {\n if (typeof value === 'bigint') {\n return { [STRINGIFY_TYPE_TAG]: BIGINT_TYPE, [STRINGIFY_VALUE]: value.toString() };\n }\n\n return value;\n });\n}\n\nexport function parseTransfer(transferString: string): Transfer {\n const rawJSON = JSON.parse(transferString, (_key, value) => {\n if (\n value &&\n typeof value === 'object' &&\n value[STRINGIFY_TYPE_TAG] === BIGINT_TYPE &&\n typeof value[STRINGIFY_VALUE] === 'string'\n ) {\n return BigInt(value[STRINGIFY_VALUE]);\n }\n\n return value;\n });\n\n const parsed = LooseTransferSchema.safeParse(rawJSON);\n\n if (!parsed.success) {\n throw new Error(`Failed to parse transfer: ${parsed.error.message}`);\n }\n\n return parsed.data as Transfer;\n}\n\nconst AssetBaseSchema = z.object({\n name: z.string(),\n symbol: z.string(),\n decimals: z.int().nonnegative(),\n type: z.enum(TokenType),\n});\n\nconst NativeAssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.NATIVE),\n});\n\nconst LooseErc20AssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.ERC20),\n address: z.string(),\n});\n\nconst LooseSplAssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.SPL),\n address: z.string(),\n});\n\nconst LooseAssetSchema = z.discriminatedUnion('type', [NativeAssetSchema, LooseErc20AssetSchema, LooseSplAssetSchema]);\n\nconst ChainSchema = z.object({\n chainId: z.string(),\n chainName: z.string(),\n networkToken: NativeAssetSchema,\n rpcUrl: z.string(),\n utilityAddresses: z\n .object({\n multicall: z.string(),\n })\n .optional(),\n});\n\nconst LooseTransferSchema = z.object({\n amountIn: z.bigint().nonnegative(),\n amountOut: z.bigint().nonnegative(),\n completedAtMs: z.int().nonnegative().optional(),\n environment: z.enum(Environment),\n errorCode: z.number().optional(),\n errorReason: z.string().optional(),\n failedAtMs: z.int().nonnegative().optional(),\n fees: z.array(\n z.object({\n type: z.enum(['partner', 'protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.bigint().nonnegative(),\n chainId: z.string(),\n token: z.discriminatedUnion('type', [\n z.object({\n type: z.literal(TokenType.NATIVE),\n }),\n z.object({\n type: z.literal(TokenType.ERC20),\n address: z.string(),\n }),\n z.object({\n type: z.literal(TokenType.SPL),\n address: z.string(),\n }),\n ]),\n }),\n ),\n fromAddress: z.string(),\n id: z.string(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n partnerFeeBps: z.int().nonnegative().nullable(),\n source: z\n .object({\n confirmationCount: z.int().nonnegative(),\n requiredConfirmationCount: z.int().nonnegative(),\n startedAtMs: z.int().nonnegative(),\n targetStartBlockNumber: z.bigint().nonnegative().optional(),\n txHash: z.string(),\n })\n .optional(),\n target: z\n .object({\n confirmationCount: z.int().nonnegative(),\n requiredConfirmationCount: z.int().nonnegative(),\n startedAtMs: z.int().nonnegative(),\n txHash: z.string().optional(),\n })\n .nullable()\n .optional(),\n sourceAsset: LooseAssetSchema,\n sourceChain: ChainSchema,\n status: z.enum(['created'
|
|
1
|
+
{"version":3,"file":"transfer-utils.js","names":[],"sources":["../../src/utils/transfer-utils.ts"],"sourcesContent":["import { z } from 'zod';\nimport { Environment, ServiceType, TokenType } from '../constants';\nimport type { Transfer } from '../types/transfer';\n\nconst STRINGIFY_TYPE_TAG = '__type';\nconst BIGINT_TYPE = 'bigint';\nconst STRINGIFY_VALUE = 'value';\n\nexport function stringifyTransfer(transfer: Transfer): string {\n return JSON.stringify(transfer, (_key, value) => {\n if (typeof value === 'bigint') {\n return { [STRINGIFY_TYPE_TAG]: BIGINT_TYPE, [STRINGIFY_VALUE]: value.toString() };\n }\n\n return value;\n });\n}\n\nexport function parseTransfer(transferString: string): Transfer {\n const rawJSON = JSON.parse(transferString, (_key, value) => {\n if (\n value &&\n typeof value === 'object' &&\n value[STRINGIFY_TYPE_TAG] === BIGINT_TYPE &&\n typeof value[STRINGIFY_VALUE] === 'string'\n ) {\n return BigInt(value[STRINGIFY_VALUE]);\n }\n\n return value;\n });\n\n const parsed = LooseTransferSchema.safeParse(rawJSON);\n\n if (!parsed.success) {\n throw new Error(`Failed to parse transfer: ${parsed.error.message}`);\n }\n\n return parsed.data as Transfer;\n}\n\nconst AssetBaseSchema = z.object({\n name: z.string(),\n symbol: z.string(),\n decimals: z.int().nonnegative(),\n type: z.enum(TokenType),\n});\n\nconst NativeAssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.NATIVE),\n});\n\nconst LooseErc20AssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.ERC20),\n address: z.string(),\n});\n\nconst LooseSplAssetSchema = AssetBaseSchema.extend({\n type: z.literal(TokenType.SPL),\n address: z.string(),\n});\n\nconst LooseAssetSchema = z.discriminatedUnion('type', [NativeAssetSchema, LooseErc20AssetSchema, LooseSplAssetSchema]);\n\nconst ChainSchema = z.object({\n chainId: z.string(),\n chainName: z.string(),\n networkToken: NativeAssetSchema,\n rpcUrl: z.string(),\n utilityAddresses: z\n .object({\n multicall: z.string(),\n })\n .optional(),\n});\n\nconst LooseTransferSchema = z.object({\n amountIn: z.bigint().nonnegative(),\n amountOut: z.bigint().nonnegative(),\n completedAtMs: z.int().nonnegative().optional(),\n environment: z.enum(Environment),\n errorCode: z.number().optional(),\n errorReason: z.string().optional(),\n failedAtMs: z.int().nonnegative().optional(),\n fees: z.array(\n z.object({\n type: z.enum(['partner', 'protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.bigint().nonnegative(),\n chainId: z.string(),\n token: z.discriminatedUnion('type', [\n z.object({\n type: z.literal(TokenType.NATIVE),\n }),\n z.object({\n type: z.literal(TokenType.ERC20),\n address: z.string(),\n }),\n z.object({\n type: z.literal(TokenType.SPL),\n address: z.string(),\n }),\n ]),\n }),\n ),\n fromAddress: z.string(),\n id: z.string(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n partnerFeeBps: z.int().nonnegative().nullable(),\n refund: z\n .object({\n amount: z.bigint().nonnegative(),\n asset: LooseAssetSchema.nullable(),\n chainId: z.string(),\n txHash: z.string().nullable(),\n timestampMs: z.int().nonnegative(),\n })\n .optional(),\n source: z\n .object({\n confirmationCount: z.int().nonnegative(),\n requiredConfirmationCount: z.int().nonnegative(),\n startedAtMs: z.int().nonnegative(),\n targetStartBlockNumber: z.bigint().nonnegative().optional(),\n txHash: z.string(),\n })\n .optional(),\n target: z\n .object({\n confirmationCount: z.int().nonnegative(),\n requiredConfirmationCount: z.int().nonnegative(),\n startedAtMs: z.int().nonnegative(),\n txHash: z.string().optional(),\n })\n .nullable()\n .optional(),\n sourceAsset: LooseAssetSchema,\n sourceChain: ChainSchema,\n status: z.enum([\n 'created',\n 'source-pending',\n 'source-completed',\n 'target-pending',\n 'refunded',\n 'completed',\n 'failed',\n ]),\n targetAsset: LooseAssetSchema,\n targetChain: ChainSchema,\n toAddress: z.string(),\n type: z.enum(ServiceType),\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@avalabs/fusion-sdk",
|
|
3
3
|
"license": "Limited Ecosystem License",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.9.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/mod.cjs",
|
|
7
7
|
"module": "./dist/mod.js",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"vitest": "4.0.6",
|
|
48
48
|
"tsdown": "0.20.3",
|
|
49
49
|
"zod": "4.1.12",
|
|
50
|
-
"
|
|
51
|
-
"
|
|
50
|
+
"eslint-config-custom": "0.1.0",
|
|
51
|
+
"@internal/tsdown-config": "0.0.1"
|
|
52
52
|
},
|
|
53
53
|
"sideEffects": false,
|
|
54
54
|
"scripts": {
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants.cjs`),t=require(`../errors.cjs`),n=require(`../utils/caip.cjs`),r=require(`../utils/evm-address.cjs`);let i=require(`viem`),a=require(`es-toolkit`);function o(e){return{destinations:Object.fromEntries(Object.entries(e.destinations).map(([e,t])=>[e,{address:t.address,bridgeProviders:[...t.bridgeProviders]}])),swapProviders:[...e.swapProviders]}}function s(e,t){for(let[r,i]of Object.entries(t)){if(!n.isCaip2ChainId(r))continue;let t=e[r];if(t){let n=new Set(t.bridgeProviders);for(let e of i.bridgeProviders)n.add(e);e[r]={address:t.address??i.address,bridgeProviders:Array.from(n)}}else e[r]={address:i.address,bridgeProviders:[...i.bridgeProviders]}}}function c(e,t){let n=new Set(e);for(let e of t)n.add(e);return Array.from(n)}function l(t,n){let r=t[e.TokenType.NATIVE];if(!r){t[e.TokenType.NATIVE]={...n,...o(n)};return}s(r.destinations,n.destinations),r.swapProviders=c(r.swapProviders,n.swapProviders)}function u(e,t){if(!e)return[{...t,...o(t),address:r.formatEvmAddress(t.address)}];let n=e.find(e=>(0,i.isAddressEqual)(e.address,t.address));return n?(s(n.destinations,t.destinations),n.swapProviders=c(n.swapProviders,t.swapProviders),e):(e.push({...t,...o(t)}),e)}function d(e,t){if(!e)return[{...t,...o(t)}];let n=e.find(e=>e.address===t.address);return n?(s(n.destinations,t.destinations),n.swapProviders=c(n.swapProviders,t.swapProviders),e):(e.push({...t,...o(t)}),e)}function f(r){let i={};for(let a of r)for(let[r,o]of Object.entries(a))if(n.isCaip2ChainId(r)){i[r]||(i[r]={});for(let n of o)switch(n.type){case e.TokenType.NATIVE:l(i[r],n);break;case e.TokenType.ERC20:i[r][e.TokenType.ERC20]=u(i[r][e.TokenType.ERC20],n);break;case e.TokenType.SPL:i[r][e.TokenType.SPL]=d(i[r][e.TokenType.SPL],n);break;default:throw new t.SdkError(`Unsupported asset type encountered during merge.`,t.ErrorCode.UNKNOWN,{details:JSON.stringify({asset:n})})}}let o={};for(let t of Object.keys(i)){if(!n.isCaip2ChainId(t))continue;let r=i[t];o[t]=[],r?.[e.TokenType.NATIVE]&&o[t].push(r[e.TokenType.NATIVE]),r?.[e.TokenType.ERC20]&&o[t].push(...(0,a.sortBy)(r[e.TokenType.ERC20],[`symbol`,`name`,`address`])),r?.[e.TokenType.SPL]&&o[t].push(...(0,a.sortBy)(r[e.TokenType.SPL],[`symbol`,`name`,`address`]))}return o}exports.mergeChainAssetMaps=f;
|
|
2
|
-
//# sourceMappingURL=merge-assets.cjs.map
|