@avalabs/fusion-sdk 0.24.0 → 0.26.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.
Files changed (47) hide show
  1. package/dist/errors.cjs +1 -1
  2. package/dist/errors.cjs.map +1 -1
  3. package/dist/errors.d.cts +18 -1
  4. package/dist/errors.d.ts +18 -1
  5. package/dist/errors.js +1 -1
  6. package/dist/errors.js.map +1 -1
  7. package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.cjs +1 -1
  8. package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.cjs.map +1 -1
  9. package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.js +1 -1
  10. package/dist/transfer-service/avalanche-cct/_handlers/transfer-asset.js.map +1 -1
  11. package/dist/transfer-service/markr/_schema.cjs +1 -1
  12. package/dist/transfer-service/markr/_schema.cjs.map +1 -1
  13. package/dist/transfer-service/markr/_schema.js +1 -1
  14. package/dist/transfer-service/markr/_schema.js.map +1 -1
  15. package/dist/transfer-service/markr/_utils.cjs +1 -1
  16. package/dist/transfer-service/markr/_utils.cjs.map +1 -1
  17. package/dist/transfer-service/markr/_utils.js +1 -1
  18. package/dist/transfer-service/markr/_utils.js.map +1 -1
  19. package/dist/transfer-service/markr/recurring/_api.cjs +1 -1
  20. package/dist/transfer-service/markr/recurring/_api.cjs.map +1 -1
  21. package/dist/transfer-service/markr/recurring/_api.js +1 -1
  22. package/dist/transfer-service/markr/recurring/_api.js.map +1 -1
  23. package/dist/transfer-service/markr/recurring/_chain-info.cjs +1 -1
  24. package/dist/transfer-service/markr/recurring/_chain-info.cjs.map +1 -1
  25. package/dist/transfer-service/markr/recurring/_chain-info.js +1 -1
  26. package/dist/transfer-service/markr/recurring/_chain-info.js.map +1 -1
  27. package/dist/transfer-service/markr/recurring/_eligibility.cjs +1 -1
  28. package/dist/transfer-service/markr/recurring/_eligibility.cjs.map +1 -1
  29. package/dist/transfer-service/markr/recurring/_eligibility.js +1 -1
  30. package/dist/transfer-service/markr/recurring/_eligibility.js.map +1 -1
  31. package/dist/transfer-service/markr/recurring/_namespace.cjs +1 -1
  32. package/dist/transfer-service/markr/recurring/_namespace.cjs.map +1 -1
  33. package/dist/transfer-service/markr/recurring/_namespace.js +1 -1
  34. package/dist/transfer-service/markr/recurring/_namespace.js.map +1 -1
  35. package/dist/transfer-service/markr/recurring/_schema.cjs +1 -1
  36. package/dist/transfer-service/markr/recurring/_schema.cjs.map +1 -1
  37. package/dist/transfer-service/markr/recurring/_schema.js +1 -1
  38. package/dist/transfer-service/markr/recurring/_schema.js.map +1 -1
  39. package/dist/transfer-service/markr/recurring/types.cjs +1 -1
  40. package/dist/transfer-service/markr/recurring/types.cjs.map +1 -1
  41. package/dist/transfer-service/markr/recurring/types.d.cts +32 -23
  42. package/dist/transfer-service/markr/recurring/types.d.ts +32 -23
  43. package/dist/transfer-service/markr/recurring/types.js +1 -1
  44. package/dist/transfer-service/markr/recurring/types.js.map +1 -1
  45. package/dist/types/service.d.cts +1 -1
  46. package/dist/types/service.d.ts +1 -1
  47. package/package.json +3 -3
package/dist/errors.cjs CHANGED
@@ -1,2 +1,2 @@
1
- let e=function(e){return e[e.NOT_IMPLEMENTED=5e3]=`NOT_IMPLEMENTED`,e[e.SERVICE_NOT_AVAILABLE=5001]=`SERVICE_NOT_AVAILABLE`,e[e.INITIALIZATION_FAILED=5002]=`INITIALIZATION_FAILED`,e[e.INVALID_PARAMS=5003]=`INVALID_PARAMS`,e[e.TIMEOUT=5004]=`TIMEOUT`,e[e.VIEM_ERROR=5005]=`VIEM_ERROR`,e[e.TRANSACTION_REVERTED=5006]=`TRANSACTION_REVERTED`,e[e.NOTARIZATION_FAILED=5007]=`NOTARIZATION_FAILED`,e[e.SIGNING_FAILED=5008]=`SIGNING_FAILED`,e[e.SOLANA_ERROR=5009]=`SOLANA_ERROR`,e[e.HL_WITHDRAWABLE_DROPPED=5010]=`HL_WITHDRAWABLE_DROPPED`,e[e.HL_UNSUPPORTED_PROTOCOL_VERSION=5011]=`HL_UNSUPPORTED_PROTOCOL_VERSION`,e[e.HL_EXCHANGE_REJECTED=5012]=`HL_EXCHANGE_REJECTED`,e[e.UNKNOWN=5999]=`UNKNOWN`,e}({}),t=function(e){return e.ASSET_NOT_SUPPORTED=`ASSET_NOT_SUPPORTED`,e.CHAIN_NOT_SUPPORTED=`CHAIN_NOT_SUPPORTED`,e.CONFIG_NOT_AVAILABLE=`CONFIG_NOT_AVAILABLE`,e.CONFIRMATION_COUNT_UNKNOWN=`CONFIRMATION_COUNT_UNKNOWN`,e.DUPLICATE_SERVICE_INITIALIZATION=`DUPLICATE_SERVICE_INITIALIZATION`,e.ENVIRONMENT_NOT_SUPPORTED=`ENVIRONMENT_NOT_SUPPORTED`,e.IDENTICAL_CHAINS_PROVIDED=`IDENTICAL_CHAINS_PROVIDED`,e.INCORRECT_ADDRESS_PROVIDED=`INCORRECT_ADDRESS_PROVIDED`,e.INCORRECT_AMOUNT_PROVIDED=`INCORRECT_AMOUNT_PROVIDED`,e.INCORRECT_HASH_PROVIDED=`INCORRECT_HASH_PROVIDED`,e.INCORRECT_PROVIDER_PROVIDED=`INCORRECT_PROVIDER_PROVIDED`,e.INCORRECT_SIGNER_PROVIDED=`INCORRECT_SIGNER_PROVIDED`,e.INCORRECT_TXHASH_PROVIDED=`INCORRECT_TXHASH_PROVIDED`,e.INVALID_PARAMS=`INVALID_PARAMS`,e.SERVICE_TYPE_NOT_CONFIGURED=`SERVICE_TYPE_NOT_CONFIGURED`,e.UNKNOWN=`UNKNOWN`,e.VULNERABLE_TOKEN_APPROVAL_ADDRESS=`VULNERABLE_TOKEN_APPROVAL_ADDRESS`,e.WARDEN_CONFIG_MISMATCH=`WARDEN_CONFIG_MISMATCH`,e.WARDEN_CONFIG_MISSING_NETWORK=`WARDEN_CONFIG_MISSING_NETWORK`,e.ADDRESS_IS_BLOCKED=`ADDRESS_IS_BLOCKED`,e.QUOTE_EXPIRED=`QUOTE_EXPIRED`,e}({});var n=class extends Error{name=`SdkError`;constructor(e,t,n){super(e,{cause:n?.cause}),this.code=t,this.options=n}walk(e){return r(this,e)}};function r(e,t){return t?.(e)?e:e&&typeof e==`object`&&`cause`in e&&e.cause!==void 0?r(e.cause,t):t?null:e}function i(e){return e instanceof n}var a=class extends Error{name=`HttpError`;status;statusText;response;data;constructor(e,t,n){super(e),this.name=`HttpError`,this.status=t.status,this.statusText=t.statusText,this.response=t,this.data=n}};function o(e){return e instanceof a}var s=class extends Error{name=`TimeoutError`;constructor(e=`Request timed out.`){super(e),this.name=`TimeoutError`}};function c(e){return e instanceof s}var l=class extends Error{name=`AbortedError`;constructor(e=`Operation was aborted.`){super(e),this.name=`AbortedError`}};function u(e){return e instanceof l}var d=class extends Error{name=`ResponseValidationError`;issues;rawResponse;constructor(e=`Response validation failed.`,t,n){super(e),this.name=`ResponseValidationError`,this.issues=t,this.rawResponse=n}};function f(e){return e instanceof d}var p=class extends n{name=`ServiceInitializationError`;constructor(n=t.UNKNOWN,r,i){super(n,e.INITIALIZATION_FAILED,{cause:i,details:r})}};function m(e){return e instanceof p}var h=class extends n{name=`ServiceUnavailableError`;constructor(n=t.UNKNOWN,r){super(n,e.SERVICE_NOT_AVAILABLE,{details:r})}};function g(e){return e instanceof h}var _=class extends n{name=`InsufficientFundsError`;insufficientTokenWasNative;constructor({cause:e,details:t,errorCode:n,insufficientTokenWasNative:r}){super(r?`Insufficient native funds to cover the fee.`:`Insufficient token funds to estimate the fee.`,n,{cause:e,details:t}),this.insufficientTokenWasNative=r}};function v(e){return e instanceof _}var y=class extends n{name=`EstimateNativeFeeError`;details;tx;constructor({cause:e,details:t,errorCode:n,message:r=`Failed to estimate native fee for quote.`,tx:i}){super(r,n,{cause:e}),this.details=t,this.tx=i}causedByInsufficientFunds(){return v(this.cause)}};function b(e){return e instanceof y}var x=class extends n{name=`InvalidParamsError`;constructor(n=t.INVALID_PARAMS,r){super(n,e.INVALID_PARAMS,{details:r})}};function S(e){return e instanceof x}var C=class extends n{constructor(){super(`This functionality is not yet implemented.`,e.NOT_IMPLEMENTED)}};exports.AbortedError=l,exports.ErrorCode=e,exports.ErrorReason=t,exports.EstimateNativeFeeError=y,exports.HttpError=a,exports.InsufficientFundsError=_,exports.InvalidParamsError=x,exports.NotImplementedError=C,exports.ResponseValidationError=d,exports.SdkError=n,exports.ServiceInitializationError=p,exports.ServiceUnavailableError=h,exports.TimeoutError=s,exports.isAbortedError=u,exports.isEstimateNativeFeeError=b,exports.isHttpError=o,exports.isInsufficientFundsError=v,exports.isInvalidParamsError=S,exports.isResponseValidationError=f,exports.isSdkError=i,exports.isServiceInitializationError=m,exports.isServiceUnavailableError=g,exports.isTimeoutError=c;
1
+ let e=function(e){return e[e.NOT_IMPLEMENTED=5e3]=`NOT_IMPLEMENTED`,e[e.SERVICE_NOT_AVAILABLE=5001]=`SERVICE_NOT_AVAILABLE`,e[e.INITIALIZATION_FAILED=5002]=`INITIALIZATION_FAILED`,e[e.INVALID_PARAMS=5003]=`INVALID_PARAMS`,e[e.TIMEOUT=5004]=`TIMEOUT`,e[e.VIEM_ERROR=5005]=`VIEM_ERROR`,e[e.TRANSACTION_REVERTED=5006]=`TRANSACTION_REVERTED`,e[e.NOTARIZATION_FAILED=5007]=`NOTARIZATION_FAILED`,e[e.SIGNING_FAILED=5008]=`SIGNING_FAILED`,e[e.SOLANA_ERROR=5009]=`SOLANA_ERROR`,e[e.HL_WITHDRAWABLE_DROPPED=5010]=`HL_WITHDRAWABLE_DROPPED`,e[e.HL_UNSUPPORTED_PROTOCOL_VERSION=5011]=`HL_UNSUPPORTED_PROTOCOL_VERSION`,e[e.HL_EXCHANGE_REJECTED=5012]=`HL_EXCHANGE_REJECTED`,e[e.UNKNOWN=5999]=`UNKNOWN`,e}({}),t=function(e){return e.ASSET_NOT_SUPPORTED=`ASSET_NOT_SUPPORTED`,e.CHAIN_NOT_SUPPORTED=`CHAIN_NOT_SUPPORTED`,e.CONFIG_NOT_AVAILABLE=`CONFIG_NOT_AVAILABLE`,e.CONFIRMATION_COUNT_UNKNOWN=`CONFIRMATION_COUNT_UNKNOWN`,e.DUPLICATE_SERVICE_INITIALIZATION=`DUPLICATE_SERVICE_INITIALIZATION`,e.ENVIRONMENT_NOT_SUPPORTED=`ENVIRONMENT_NOT_SUPPORTED`,e.IDENTICAL_CHAINS_PROVIDED=`IDENTICAL_CHAINS_PROVIDED`,e.INCORRECT_ADDRESS_PROVIDED=`INCORRECT_ADDRESS_PROVIDED`,e.INCORRECT_AMOUNT_PROVIDED=`INCORRECT_AMOUNT_PROVIDED`,e.INCORRECT_HASH_PROVIDED=`INCORRECT_HASH_PROVIDED`,e.INCORRECT_PROVIDER_PROVIDED=`INCORRECT_PROVIDER_PROVIDED`,e.INCORRECT_SIGNER_PROVIDED=`INCORRECT_SIGNER_PROVIDED`,e.INCORRECT_TXHASH_PROVIDED=`INCORRECT_TXHASH_PROVIDED`,e.INVALID_PARAMS=`INVALID_PARAMS`,e.SERVICE_TYPE_NOT_CONFIGURED=`SERVICE_TYPE_NOT_CONFIGURED`,e.UNKNOWN=`UNKNOWN`,e.VULNERABLE_TOKEN_APPROVAL_ADDRESS=`VULNERABLE_TOKEN_APPROVAL_ADDRESS`,e.WARDEN_CONFIG_MISMATCH=`WARDEN_CONFIG_MISMATCH`,e.WARDEN_CONFIG_MISSING_NETWORK=`WARDEN_CONFIG_MISSING_NETWORK`,e.ADDRESS_IS_BLOCKED=`ADDRESS_IS_BLOCKED`,e.QUOTE_EXPIRED=`QUOTE_EXPIRED`,e.NATIVE_WRAP_REVERTED=`NATIVE_WRAP_REVERTED`,e.RECURRING_SWAP_RESPONSE_INCONSISTENT=`RECURRING_SWAP_RESPONSE_INCONSISTENT`,e}({});var n=class extends Error{name=`SdkError`;constructor(e,t,n){super(e,{cause:n?.cause}),this.code=t,this.options=n}walk(e){return r(this,e)}};function r(e,t){return t?.(e)?e:e&&typeof e==`object`&&`cause`in e&&e.cause!==void 0?r(e.cause,t):t?null:e}function i(e){return e instanceof n}var a=class extends Error{name=`HttpError`;status;statusText;response;data;constructor(e,t,n){super(e),this.name=`HttpError`,this.status=t.status,this.statusText=t.statusText,this.response=t,this.data=n}};function o(e){return e instanceof a}var s=class extends Error{name=`TimeoutError`;constructor(e=`Request timed out.`){super(e),this.name=`TimeoutError`}};function c(e){return e instanceof s}var l=class extends Error{name=`AbortedError`;constructor(e=`Operation was aborted.`){super(e),this.name=`AbortedError`}};function u(e){return e instanceof l}var d=class extends Error{name=`ResponseValidationError`;issues;rawResponse;constructor(e=`Response validation failed.`,t,n){super(e),this.name=`ResponseValidationError`,this.issues=t,this.rawResponse=n}};function f(e){return e instanceof d}var p=class extends n{name=`ServiceInitializationError`;constructor(n=t.UNKNOWN,r,i){super(n,e.INITIALIZATION_FAILED,{cause:i,details:r})}};function m(e){return e instanceof p}var h=class extends n{name=`ServiceUnavailableError`;constructor(n=t.UNKNOWN,r){super(n,e.SERVICE_NOT_AVAILABLE,{details:r})}};function g(e){return e instanceof h}var _=class extends n{name=`InsufficientFundsError`;insufficientTokenWasNative;constructor({cause:e,details:t,errorCode:n,insufficientTokenWasNative:r}){super(r?`Insufficient native funds to cover the fee.`:`Insufficient token funds to estimate the fee.`,n,{cause:e,details:t}),this.insufficientTokenWasNative=r}};function v(e){return e instanceof _}var y=class extends n{name=`EstimateNativeFeeError`;details;tx;constructor({cause:e,details:t,errorCode:n,message:r=`Failed to estimate native fee for quote.`,tx:i}){super(r,n,{cause:e}),this.details=t,this.tx=i}causedByInsufficientFunds(){return v(this.cause)}};function b(e){return e instanceof y}var x=class extends n{name=`InvalidParamsError`;constructor(n=t.INVALID_PARAMS,r){super(n,e.INVALID_PARAMS,{details:r})}};function S(e){return e instanceof x}var C=class extends n{constructor(){super(`This functionality is not yet implemented.`,e.NOT_IMPLEMENTED)}};exports.AbortedError=l,exports.ErrorCode=e,exports.ErrorReason=t,exports.EstimateNativeFeeError=y,exports.HttpError=a,exports.InsufficientFundsError=_,exports.InvalidParamsError=x,exports.NotImplementedError=C,exports.ResponseValidationError=d,exports.SdkError=n,exports.ServiceInitializationError=p,exports.ServiceUnavailableError=h,exports.TimeoutError=s,exports.isAbortedError=u,exports.isEstimateNativeFeeError=b,exports.isHttpError=o,exports.isInsufficientFundsError=v,exports.isInvalidParamsError=S,exports.isResponseValidationError=f,exports.isSdkError=i,exports.isServiceInitializationError=m,exports.isServiceUnavailableError=g,exports.isTimeoutError=c;
2
2
  //# sourceMappingURL=errors.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export enum ErrorCode {\n NOT_IMPLEMENTED = 5_000,\n SERVICE_NOT_AVAILABLE = 5_001,\n INITIALIZATION_FAILED = 5_002,\n INVALID_PARAMS = 5_003,\n TIMEOUT = 5_004,\n VIEM_ERROR = 5_005,\n TRANSACTION_REVERTED = 5_006,\n NOTARIZATION_FAILED = 5_007,\n SIGNING_FAILED = 5_008,\n SOLANA_ERROR = 5_009,\n /** Hyperliquid `withdrawable` dropped below the requested amount between authorize and sendAsset. */\n HL_WITHDRAWABLE_DROPPED = 5_010,\n /** Markr's `/swap` returned an `hyperliquid-withdraw` variant whose `protocolVersion` is unknown to this SDK release. */\n HL_UNSUPPORTED_PROTOCOL_VERSION = 5_011,\n /** Hyperliquid `/exchange` returned `{ status: \"err\" }`. */\n HL_EXCHANGE_REJECTED = 5_012,\n UNKNOWN = 5_999,\n}\n\nexport enum ErrorReason {\n /** the provided asset is not supported by the bridge */\n ASSET_NOT_SUPPORTED = 'ASSET_NOT_SUPPORTED',\n /** the provided source or target chain is not supported by the bridge */\n CHAIN_NOT_SUPPORTED = 'CHAIN_NOT_SUPPORTED',\n /** error while fetching or parsing the config */\n CONFIG_NOT_AVAILABLE = 'CONFIG_NOT_AVAILABLE',\n /** required confirmation count of the source or target chain is unknown */\n CONFIRMATION_COUNT_UNKNOWN = 'CONFIRMATION_COUNT_UNKNOWN',\n /** service is being initialized more than once */\n DUPLICATE_SERVICE_INITIALIZATION = 'DUPLICATE_SERVICE_INITIALIZATION',\n /** bridge does not support specified environment */\n ENVIRONMENT_NOT_SUPPORTED = 'ENVIRONMENT_NOT_SUPPORTED',\n /** provided source and target chains are the same */\n IDENTICAL_CHAINS_PROVIDED = 'IDENTICAL_CHAINS_PROVIDED',\n /** the sender or recipient address is incorrect */\n INCORRECT_ADDRESS_PROVIDED = 'INCORRECT_ADDRESS_PROVIDED',\n /** the transfer amount is incorrect (e.g.: lesser than or equal to zero) */\n INCORRECT_AMOUNT_PROVIDED = 'INCORRECT_AMOUNT_PROVIDED',\n /** the transaction is not hex */\n INCORRECT_HASH_PROVIDED = 'INCORRECT_HASH_PROVIDED',\n /** The provided provider is incorrect type (Provider VS BitcoinProvider) */\n INCORRECT_PROVIDER_PROVIDED = 'INCORRECT_PROVIDER_PROVIDED',\n /** The provided signer is incorrect type */\n INCORRECT_SIGNER_PROVIDED = 'INCORRECT_SIGNER_PROVIDED',\n /** the sourceTxHash or targetTxHash is incorrect */\n INCORRECT_TXHASH_PROVIDED = 'INCORRECT_TXHASH_PROVIDED',\n /** generic error with the params */\n INVALID_PARAMS = 'INVALID_PARAMS',\n /** ServiceType requested not available */\n SERVICE_TYPE_NOT_CONFIGURED = 'SERVICE_TYPE_NOT_CONFIGURED',\n /** generic, not specified error */\n UNKNOWN = 'UNKNOWN',\n /** error when the address has token approvals for addresses involved in the multichain incident */\n VULNERABLE_TOKEN_APPROVAL_ADDRESS = 'VULNERABLE_TOKEN_APPROVAL_ADDRESS',\n /** error when warden config was not found or it is over the mismatch threshold */\n WARDEN_CONFIG_MISMATCH = 'WARDEN_CONFIG_MISMATCH',\n /** fetched warden config does not contain network IDs */\n WARDEN_CONFIG_MISSING_NETWORK = 'WARDEN_CONFIG_MISSING_NETWORK',\n /** address is blocked */\n ADDRESS_IS_BLOCKED = 'ADDRESS_IS_BLOCKED',\n /** Quote expired */\n QUOTE_EXPIRED = 'QUOTE_EXPIRED',\n}\n\nexport class SdkError extends Error {\n override name = 'SdkError';\n\n constructor(\n message: string,\n public code: ErrorCode,\n public options?: {\n cause?: unknown;\n details?: string;\n },\n ) {\n super(message, { cause: options?.cause });\n }\n\n walk(): Error;\n walk(fn: (err: unknown) => boolean): Error | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walk(fn?: any): any {\n return walkError(this, fn);\n }\n}\n\nfunction walkError(err: unknown): unknown;\nfunction walkError(err: unknown, fn: (err: unknown) => boolean): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null {\n if (fn?.(err)) {\n return err;\n }\n\n if (err && typeof err === 'object' && 'cause' in err && err.cause !== undefined) {\n return walkError(err.cause, fn);\n }\n\n return fn ? null : err;\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport class HttpError extends Error {\n override name = 'HttpError';\n\n readonly status: number;\n readonly statusText: string;\n readonly response: Response;\n readonly data?: unknown;\n\n constructor(message: string, response: Response, data?: unknown) {\n super(message);\n this.name = 'HttpError';\n this.status = response.status;\n this.statusText = response.statusText;\n this.response = response;\n this.data = data;\n }\n}\n\nexport function isHttpError(error: unknown): error is HttpError {\n return error instanceof HttpError;\n}\n\nexport class TimeoutError extends Error {\n override name = 'TimeoutError';\n\n constructor(message = 'Request timed out.') {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport class AbortedError extends Error {\n override name = 'AbortedError';\n\n constructor(message = 'Operation was aborted.') {\n super(message);\n this.name = 'AbortedError';\n }\n}\n\nexport function isAbortedError(error: unknown): error is AbortedError {\n return error instanceof AbortedError;\n}\n\nexport class ResponseValidationError extends Error {\n override name = 'ResponseValidationError';\n\n readonly issues?: unknown;\n readonly rawResponse?: unknown;\n\n constructor(message = 'Response validation failed.', issues?: unknown, rawResponse?: unknown) {\n super(message);\n this.name = 'ResponseValidationError';\n this.issues = issues;\n this.rawResponse = rawResponse;\n }\n}\n\nexport function isResponseValidationError(error: unknown): error is ResponseValidationError {\n return error instanceof ResponseValidationError;\n}\n\nexport class ServiceInitializationError extends SdkError {\n override name = 'ServiceInitializationError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string, cause?: unknown) {\n super(message, ErrorCode.INITIALIZATION_FAILED, { cause, details });\n }\n}\n\nexport function isServiceInitializationError(error: unknown): error is ServiceInitializationError {\n return error instanceof ServiceInitializationError;\n}\n\nexport class ServiceUnavailableError extends SdkError {\n override name = 'ServiceUnavailableError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string) {\n super(message, ErrorCode.SERVICE_NOT_AVAILABLE, { details });\n }\n}\n\nexport function isServiceUnavailableError(error: unknown): error is ServiceUnavailableError {\n return error instanceof ServiceUnavailableError;\n}\n\nexport class InsufficientFundsError extends SdkError {\n override name = 'InsufficientFundsError';\n public insufficientTokenWasNative: boolean;\n\n constructor({\n cause,\n details,\n errorCode,\n insufficientTokenWasNative,\n }: {\n errorCode: ErrorCode.VIEM_ERROR | ErrorCode.SOLANA_ERROR;\n details?: string;\n cause?: unknown;\n insufficientTokenWasNative: boolean;\n }) {\n super(\n insufficientTokenWasNative\n ? 'Insufficient native funds to cover the fee.'\n : 'Insufficient token funds to estimate the fee.',\n errorCode,\n { cause, details },\n );\n this.insufficientTokenWasNative = insufficientTokenWasNative;\n }\n}\n\nexport function isInsufficientFundsError(error: unknown): error is InsufficientFundsError {\n return error instanceof InsufficientFundsError;\n}\n\nexport interface EstimateNativeFeeErrorDetails {\n /** Human-readable reason from `Error(string)` or `Panic(uint256)`. */\n reason?: string;\n /** Custom error name from the ABI, e.g. `\"SlippageTooHigh\"`. */\n errorName?: string;\n /** Decoded arguments from the custom error. */\n args?: readonly unknown[];\n /** Raw revert data (hex). */\n data?: `0x${string}`;\n}\n\nexport class EstimateNativeFeeError extends SdkError {\n override name = 'EstimateNativeFeeError';\n public details: EstimateNativeFeeErrorDetails | undefined;\n public tx: string | { account: `0x${string}`; to: `0x${string}`; data: `0x${string}`; value?: bigint };\n\n constructor({\n cause,\n details,\n errorCode,\n message = 'Failed to estimate native fee for quote.',\n tx,\n }: {\n cause?: unknown;\n details?: EstimateNativeFeeErrorDetails;\n errorCode: ErrorCode.VIEM_ERROR | ErrorCode.SOLANA_ERROR;\n message?: string;\n tx: string | { account: `0x${string}`; to: `0x${string}`; data: `0x${string}`; value?: bigint };\n }) {\n super(message, errorCode, { cause });\n this.details = details;\n this.tx = tx;\n }\n\n /**\n * Helper method to check if the error was caused by insufficient funds to cover the fee.\n * Note that this is a heuristic based on the error details and may not be 100% accurate in all cases.\n * Use with caution and consider inspecting the error details for more context.\n */\n public causedByInsufficientFunds(): boolean {\n return isInsufficientFundsError(this.cause);\n }\n}\n\nexport function isEstimateNativeFeeError(error: unknown): error is EstimateNativeFeeError {\n return error instanceof EstimateNativeFeeError;\n}\n\nexport class InvalidParamsError extends SdkError {\n override name = 'InvalidParamsError';\n\n constructor(message: string = ErrorReason.INVALID_PARAMS, details?: string) {\n super(message, ErrorCode.INVALID_PARAMS, { details });\n }\n}\n\nexport function isInvalidParamsError(error: unknown): error is InvalidParamsError {\n return error instanceof InvalidParamsError;\n}\n\n/**\n * @internal\n *\n * Error to indicate that a functionality has not yet been implemented.\n * Do not export from entrypoint.\n */\nexport class NotImplementedError extends SdkError {\n constructor() {\n super('This functionality is not yet implemented.', ErrorCode.NOT_IMPLEMENTED);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export enum ErrorCode {\n NOT_IMPLEMENTED = 5_000,\n SERVICE_NOT_AVAILABLE = 5_001,\n INITIALIZATION_FAILED = 5_002,\n INVALID_PARAMS = 5_003,\n TIMEOUT = 5_004,\n VIEM_ERROR = 5_005,\n TRANSACTION_REVERTED = 5_006,\n NOTARIZATION_FAILED = 5_007,\n SIGNING_FAILED = 5_008,\n SOLANA_ERROR = 5_009,\n /** Hyperliquid `withdrawable` dropped below the requested amount between authorize and sendAsset. */\n HL_WITHDRAWABLE_DROPPED = 5_010,\n /** Markr's `/swap` returned an `hyperliquid-withdraw` variant whose `protocolVersion` is unknown to this SDK release. */\n HL_UNSUPPORTED_PROTOCOL_VERSION = 5_011,\n /** Hyperliquid `/exchange` returned `{ status: \"err\" }`. */\n HL_EXCHANGE_REJECTED = 5_012,\n UNKNOWN = 5_999,\n}\n\nexport enum ErrorReason {\n /** the provided asset is not supported by the bridge */\n ASSET_NOT_SUPPORTED = 'ASSET_NOT_SUPPORTED',\n /** the provided source or target chain is not supported by the bridge */\n CHAIN_NOT_SUPPORTED = 'CHAIN_NOT_SUPPORTED',\n /** error while fetching or parsing the config */\n CONFIG_NOT_AVAILABLE = 'CONFIG_NOT_AVAILABLE',\n /** required confirmation count of the source or target chain is unknown */\n CONFIRMATION_COUNT_UNKNOWN = 'CONFIRMATION_COUNT_UNKNOWN',\n /** service is being initialized more than once */\n DUPLICATE_SERVICE_INITIALIZATION = 'DUPLICATE_SERVICE_INITIALIZATION',\n /** bridge does not support specified environment */\n ENVIRONMENT_NOT_SUPPORTED = 'ENVIRONMENT_NOT_SUPPORTED',\n /** provided source and target chains are the same */\n IDENTICAL_CHAINS_PROVIDED = 'IDENTICAL_CHAINS_PROVIDED',\n /** the sender or recipient address is incorrect */\n INCORRECT_ADDRESS_PROVIDED = 'INCORRECT_ADDRESS_PROVIDED',\n /** the transfer amount is incorrect (e.g.: lesser than or equal to zero) */\n INCORRECT_AMOUNT_PROVIDED = 'INCORRECT_AMOUNT_PROVIDED',\n /** the transaction is not hex */\n INCORRECT_HASH_PROVIDED = 'INCORRECT_HASH_PROVIDED',\n /** The provided provider is incorrect type (Provider VS BitcoinProvider) */\n INCORRECT_PROVIDER_PROVIDED = 'INCORRECT_PROVIDER_PROVIDED',\n /** The provided signer is incorrect type */\n INCORRECT_SIGNER_PROVIDED = 'INCORRECT_SIGNER_PROVIDED',\n /** the sourceTxHash or targetTxHash is incorrect */\n INCORRECT_TXHASH_PROVIDED = 'INCORRECT_TXHASH_PROVIDED',\n /** generic error with the params */\n INVALID_PARAMS = 'INVALID_PARAMS',\n /** ServiceType requested not available */\n SERVICE_TYPE_NOT_CONFIGURED = 'SERVICE_TYPE_NOT_CONFIGURED',\n /** generic, not specified error */\n UNKNOWN = 'UNKNOWN',\n /** error when the address has token approvals for addresses involved in the multichain incident */\n VULNERABLE_TOKEN_APPROVAL_ADDRESS = 'VULNERABLE_TOKEN_APPROVAL_ADDRESS',\n /** error when warden config was not found or it is over the mismatch threshold */\n WARDEN_CONFIG_MISMATCH = 'WARDEN_CONFIG_MISMATCH',\n /** fetched warden config does not contain network IDs */\n WARDEN_CONFIG_MISSING_NETWORK = 'WARDEN_CONFIG_MISSING_NETWORK',\n /** address is blocked */\n ADDRESS_IS_BLOCKED = 'ADDRESS_IS_BLOCKED',\n /** Quote expired */\n QUOTE_EXPIRED = 'QUOTE_EXPIRED',\n /**\n * The on-chain `WAVAX.deposit{value}()` transaction the SDK signed as the\n * first leg of a native-input recurring schedule was mined as reverted —\n * the user does not hold the wrapped balance the downstream `createOrder`\n * needs, so the schedule was not created.\n */\n NATIVE_WRAP_REVERTED = 'NATIVE_WRAP_REVERTED',\n /**\n * Markr's `/recurring/swap` response shape did not agree with the cached\n * quote's `tokenIn` — e.g. native input returned without a wrap step, an\n * ERC-20 input returned with one, or `createOrder` is missing entirely.\n * Signing the response as-is would broadcast a mismatched flow (charge\n * native the user didn't authorize, or skip a wrap they needed), so the\n * SDK refuses. See `details` on the thrown `SdkError` for which variant\n * fired.\n */\n RECURRING_SWAP_RESPONSE_INCONSISTENT = 'RECURRING_SWAP_RESPONSE_INCONSISTENT',\n}\n\nexport class SdkError extends Error {\n override name = 'SdkError';\n\n constructor(\n message: string,\n public code: ErrorCode,\n public options?: {\n cause?: unknown;\n details?: string;\n },\n ) {\n super(message, { cause: options?.cause });\n }\n\n walk(): Error;\n walk(fn: (err: unknown) => boolean): Error | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walk(fn?: any): any {\n return walkError(this, fn);\n }\n}\n\nfunction walkError(err: unknown): unknown;\nfunction walkError(err: unknown, fn: (err: unknown) => boolean): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null {\n if (fn?.(err)) {\n return err;\n }\n\n if (err && typeof err === 'object' && 'cause' in err && err.cause !== undefined) {\n return walkError(err.cause, fn);\n }\n\n return fn ? null : err;\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport class HttpError extends Error {\n override name = 'HttpError';\n\n readonly status: number;\n readonly statusText: string;\n readonly response: Response;\n readonly data?: unknown;\n\n constructor(message: string, response: Response, data?: unknown) {\n super(message);\n this.name = 'HttpError';\n this.status = response.status;\n this.statusText = response.statusText;\n this.response = response;\n this.data = data;\n }\n}\n\nexport function isHttpError(error: unknown): error is HttpError {\n return error instanceof HttpError;\n}\n\nexport class TimeoutError extends Error {\n override name = 'TimeoutError';\n\n constructor(message = 'Request timed out.') {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport class AbortedError extends Error {\n override name = 'AbortedError';\n\n constructor(message = 'Operation was aborted.') {\n super(message);\n this.name = 'AbortedError';\n }\n}\n\nexport function isAbortedError(error: unknown): error is AbortedError {\n return error instanceof AbortedError;\n}\n\nexport class ResponseValidationError extends Error {\n override name = 'ResponseValidationError';\n\n readonly issues?: unknown;\n readonly rawResponse?: unknown;\n\n constructor(message = 'Response validation failed.', issues?: unknown, rawResponse?: unknown) {\n super(message);\n this.name = 'ResponseValidationError';\n this.issues = issues;\n this.rawResponse = rawResponse;\n }\n}\n\nexport function isResponseValidationError(error: unknown): error is ResponseValidationError {\n return error instanceof ResponseValidationError;\n}\n\nexport class ServiceInitializationError extends SdkError {\n override name = 'ServiceInitializationError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string, cause?: unknown) {\n super(message, ErrorCode.INITIALIZATION_FAILED, { cause, details });\n }\n}\n\nexport function isServiceInitializationError(error: unknown): error is ServiceInitializationError {\n return error instanceof ServiceInitializationError;\n}\n\nexport class ServiceUnavailableError extends SdkError {\n override name = 'ServiceUnavailableError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string) {\n super(message, ErrorCode.SERVICE_NOT_AVAILABLE, { details });\n }\n}\n\nexport function isServiceUnavailableError(error: unknown): error is ServiceUnavailableError {\n return error instanceof ServiceUnavailableError;\n}\n\nexport class InsufficientFundsError extends SdkError {\n override name = 'InsufficientFundsError';\n public insufficientTokenWasNative: boolean;\n\n constructor({\n cause,\n details,\n errorCode,\n insufficientTokenWasNative,\n }: {\n errorCode: ErrorCode.VIEM_ERROR | ErrorCode.SOLANA_ERROR;\n details?: string;\n cause?: unknown;\n insufficientTokenWasNative: boolean;\n }) {\n super(\n insufficientTokenWasNative\n ? 'Insufficient native funds to cover the fee.'\n : 'Insufficient token funds to estimate the fee.',\n errorCode,\n { cause, details },\n );\n this.insufficientTokenWasNative = insufficientTokenWasNative;\n }\n}\n\nexport function isInsufficientFundsError(error: unknown): error is InsufficientFundsError {\n return error instanceof InsufficientFundsError;\n}\n\nexport interface EstimateNativeFeeErrorDetails {\n /** Human-readable reason from `Error(string)` or `Panic(uint256)`. */\n reason?: string;\n /** Custom error name from the ABI, e.g. `\"SlippageTooHigh\"`. */\n errorName?: string;\n /** Decoded arguments from the custom error. */\n args?: readonly unknown[];\n /** Raw revert data (hex). */\n data?: `0x${string}`;\n}\n\nexport class EstimateNativeFeeError extends SdkError {\n override name = 'EstimateNativeFeeError';\n public details: EstimateNativeFeeErrorDetails | undefined;\n public tx: string | { account: `0x${string}`; to: `0x${string}`; data: `0x${string}`; value?: bigint };\n\n constructor({\n cause,\n details,\n errorCode,\n message = 'Failed to estimate native fee for quote.',\n tx,\n }: {\n cause?: unknown;\n details?: EstimateNativeFeeErrorDetails;\n errorCode: ErrorCode.VIEM_ERROR | ErrorCode.SOLANA_ERROR;\n message?: string;\n tx: string | { account: `0x${string}`; to: `0x${string}`; data: `0x${string}`; value?: bigint };\n }) {\n super(message, errorCode, { cause });\n this.details = details;\n this.tx = tx;\n }\n\n /**\n * Helper method to check if the error was caused by insufficient funds to cover the fee.\n * Note that this is a heuristic based on the error details and may not be 100% accurate in all cases.\n * Use with caution and consider inspecting the error details for more context.\n */\n public causedByInsufficientFunds(): boolean {\n return isInsufficientFundsError(this.cause);\n }\n}\n\nexport function isEstimateNativeFeeError(error: unknown): error is EstimateNativeFeeError {\n return error instanceof EstimateNativeFeeError;\n}\n\nexport class InvalidParamsError extends SdkError {\n override name = 'InvalidParamsError';\n\n constructor(message: string = ErrorReason.INVALID_PARAMS, details?: string) {\n super(message, ErrorCode.INVALID_PARAMS, { details });\n }\n}\n\nexport function isInvalidParamsError(error: unknown): error is InvalidParamsError {\n return error instanceof InvalidParamsError;\n}\n\n/**\n * @internal\n *\n * Error to indicate that a functionality has not yet been implemented.\n * Do not export from entrypoint.\n */\nexport class NotImplementedError extends SdkError {\n constructor() {\n super('This functionality is not yet implemented.', ErrorCode.NOT_IMPLEMENTED);\n }\n}\n"],"mappings":"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"}
package/dist/errors.d.cts CHANGED
@@ -60,7 +60,24 @@ declare enum ErrorReason {
60
60
  /** address is blocked */
61
61
  ADDRESS_IS_BLOCKED = "ADDRESS_IS_BLOCKED",
62
62
  /** Quote expired */
63
- QUOTE_EXPIRED = "QUOTE_EXPIRED"
63
+ QUOTE_EXPIRED = "QUOTE_EXPIRED",
64
+ /**
65
+ * The on-chain `WAVAX.deposit{value}()` transaction the SDK signed as the
66
+ * first leg of a native-input recurring schedule was mined as reverted —
67
+ * the user does not hold the wrapped balance the downstream `createOrder`
68
+ * needs, so the schedule was not created.
69
+ */
70
+ NATIVE_WRAP_REVERTED = "NATIVE_WRAP_REVERTED",
71
+ /**
72
+ * Markr's `/recurring/swap` response shape did not agree with the cached
73
+ * quote's `tokenIn` — e.g. native input returned without a wrap step, an
74
+ * ERC-20 input returned with one, or `createOrder` is missing entirely.
75
+ * Signing the response as-is would broadcast a mismatched flow (charge
76
+ * native the user didn't authorize, or skip a wrap they needed), so the
77
+ * SDK refuses. See `details` on the thrown `SdkError` for which variant
78
+ * fired.
79
+ */
80
+ RECURRING_SWAP_RESPONSE_INCONSISTENT = "RECURRING_SWAP_RESPONSE_INCONSISTENT"
64
81
  }
65
82
  declare class SdkError extends Error {
66
83
  code: ErrorCode;
package/dist/errors.d.ts CHANGED
@@ -60,7 +60,24 @@ declare enum ErrorReason {
60
60
  /** address is blocked */
61
61
  ADDRESS_IS_BLOCKED = "ADDRESS_IS_BLOCKED",
62
62
  /** Quote expired */
63
- QUOTE_EXPIRED = "QUOTE_EXPIRED"
63
+ QUOTE_EXPIRED = "QUOTE_EXPIRED",
64
+ /**
65
+ * The on-chain `WAVAX.deposit{value}()` transaction the SDK signed as the
66
+ * first leg of a native-input recurring schedule was mined as reverted —
67
+ * the user does not hold the wrapped balance the downstream `createOrder`
68
+ * needs, so the schedule was not created.
69
+ */
70
+ NATIVE_WRAP_REVERTED = "NATIVE_WRAP_REVERTED",
71
+ /**
72
+ * Markr's `/recurring/swap` response shape did not agree with the cached
73
+ * quote's `tokenIn` — e.g. native input returned without a wrap step, an
74
+ * ERC-20 input returned with one, or `createOrder` is missing entirely.
75
+ * Signing the response as-is would broadcast a mismatched flow (charge
76
+ * native the user didn't authorize, or skip a wrap they needed), so the
77
+ * SDK refuses. See `details` on the thrown `SdkError` for which variant
78
+ * fired.
79
+ */
80
+ RECURRING_SWAP_RESPONSE_INCONSISTENT = "RECURRING_SWAP_RESPONSE_INCONSISTENT"
64
81
  }
65
82
  declare class SdkError extends Error {
66
83
  code: ErrorCode;
package/dist/errors.js CHANGED
@@ -1,2 +1,2 @@
1
- let e=function(e){return e[e.NOT_IMPLEMENTED=5e3]=`NOT_IMPLEMENTED`,e[e.SERVICE_NOT_AVAILABLE=5001]=`SERVICE_NOT_AVAILABLE`,e[e.INITIALIZATION_FAILED=5002]=`INITIALIZATION_FAILED`,e[e.INVALID_PARAMS=5003]=`INVALID_PARAMS`,e[e.TIMEOUT=5004]=`TIMEOUT`,e[e.VIEM_ERROR=5005]=`VIEM_ERROR`,e[e.TRANSACTION_REVERTED=5006]=`TRANSACTION_REVERTED`,e[e.NOTARIZATION_FAILED=5007]=`NOTARIZATION_FAILED`,e[e.SIGNING_FAILED=5008]=`SIGNING_FAILED`,e[e.SOLANA_ERROR=5009]=`SOLANA_ERROR`,e[e.HL_WITHDRAWABLE_DROPPED=5010]=`HL_WITHDRAWABLE_DROPPED`,e[e.HL_UNSUPPORTED_PROTOCOL_VERSION=5011]=`HL_UNSUPPORTED_PROTOCOL_VERSION`,e[e.HL_EXCHANGE_REJECTED=5012]=`HL_EXCHANGE_REJECTED`,e[e.UNKNOWN=5999]=`UNKNOWN`,e}({}),t=function(e){return e.ASSET_NOT_SUPPORTED=`ASSET_NOT_SUPPORTED`,e.CHAIN_NOT_SUPPORTED=`CHAIN_NOT_SUPPORTED`,e.CONFIG_NOT_AVAILABLE=`CONFIG_NOT_AVAILABLE`,e.CONFIRMATION_COUNT_UNKNOWN=`CONFIRMATION_COUNT_UNKNOWN`,e.DUPLICATE_SERVICE_INITIALIZATION=`DUPLICATE_SERVICE_INITIALIZATION`,e.ENVIRONMENT_NOT_SUPPORTED=`ENVIRONMENT_NOT_SUPPORTED`,e.IDENTICAL_CHAINS_PROVIDED=`IDENTICAL_CHAINS_PROVIDED`,e.INCORRECT_ADDRESS_PROVIDED=`INCORRECT_ADDRESS_PROVIDED`,e.INCORRECT_AMOUNT_PROVIDED=`INCORRECT_AMOUNT_PROVIDED`,e.INCORRECT_HASH_PROVIDED=`INCORRECT_HASH_PROVIDED`,e.INCORRECT_PROVIDER_PROVIDED=`INCORRECT_PROVIDER_PROVIDED`,e.INCORRECT_SIGNER_PROVIDED=`INCORRECT_SIGNER_PROVIDED`,e.INCORRECT_TXHASH_PROVIDED=`INCORRECT_TXHASH_PROVIDED`,e.INVALID_PARAMS=`INVALID_PARAMS`,e.SERVICE_TYPE_NOT_CONFIGURED=`SERVICE_TYPE_NOT_CONFIGURED`,e.UNKNOWN=`UNKNOWN`,e.VULNERABLE_TOKEN_APPROVAL_ADDRESS=`VULNERABLE_TOKEN_APPROVAL_ADDRESS`,e.WARDEN_CONFIG_MISMATCH=`WARDEN_CONFIG_MISMATCH`,e.WARDEN_CONFIG_MISSING_NETWORK=`WARDEN_CONFIG_MISSING_NETWORK`,e.ADDRESS_IS_BLOCKED=`ADDRESS_IS_BLOCKED`,e.QUOTE_EXPIRED=`QUOTE_EXPIRED`,e}({});var n=class extends Error{name=`SdkError`;constructor(e,t,n){super(e,{cause:n?.cause}),this.code=t,this.options=n}walk(e){return r(this,e)}};function r(e,t){return t?.(e)?e:e&&typeof e==`object`&&`cause`in e&&e.cause!==void 0?r(e.cause,t):t?null:e}function i(e){return e instanceof n}var a=class extends Error{name=`HttpError`;status;statusText;response;data;constructor(e,t,n){super(e),this.name=`HttpError`,this.status=t.status,this.statusText=t.statusText,this.response=t,this.data=n}};function o(e){return e instanceof a}var s=class extends Error{name=`TimeoutError`;constructor(e=`Request timed out.`){super(e),this.name=`TimeoutError`}};function c(e){return e instanceof s}var l=class extends Error{name=`AbortedError`;constructor(e=`Operation was aborted.`){super(e),this.name=`AbortedError`}};function u(e){return e instanceof l}var d=class extends Error{name=`ResponseValidationError`;issues;rawResponse;constructor(e=`Response validation failed.`,t,n){super(e),this.name=`ResponseValidationError`,this.issues=t,this.rawResponse=n}};function f(e){return e instanceof d}var p=class extends n{name=`ServiceInitializationError`;constructor(n=t.UNKNOWN,r,i){super(n,e.INITIALIZATION_FAILED,{cause:i,details:r})}};function m(e){return e instanceof p}var h=class extends n{name=`ServiceUnavailableError`;constructor(n=t.UNKNOWN,r){super(n,e.SERVICE_NOT_AVAILABLE,{details:r})}};function g(e){return e instanceof h}var _=class extends n{name=`InsufficientFundsError`;insufficientTokenWasNative;constructor({cause:e,details:t,errorCode:n,insufficientTokenWasNative:r}){super(r?`Insufficient native funds to cover the fee.`:`Insufficient token funds to estimate the fee.`,n,{cause:e,details:t}),this.insufficientTokenWasNative=r}};function v(e){return e instanceof _}var y=class extends n{name=`EstimateNativeFeeError`;details;tx;constructor({cause:e,details:t,errorCode:n,message:r=`Failed to estimate native fee for quote.`,tx:i}){super(r,n,{cause:e}),this.details=t,this.tx=i}causedByInsufficientFunds(){return v(this.cause)}};function b(e){return e instanceof y}var x=class extends n{name=`InvalidParamsError`;constructor(n=t.INVALID_PARAMS,r){super(n,e.INVALID_PARAMS,{details:r})}};function S(e){return e instanceof x}var C=class extends n{constructor(){super(`This functionality is not yet implemented.`,e.NOT_IMPLEMENTED)}};export{l as AbortedError,e as ErrorCode,t as ErrorReason,y as EstimateNativeFeeError,a as HttpError,_ as InsufficientFundsError,x as InvalidParamsError,C as NotImplementedError,d as ResponseValidationError,n as SdkError,p as ServiceInitializationError,h as ServiceUnavailableError,s as TimeoutError,u as isAbortedError,b as isEstimateNativeFeeError,o as isHttpError,v as isInsufficientFundsError,S as isInvalidParamsError,f as isResponseValidationError,i as isSdkError,m as isServiceInitializationError,g as isServiceUnavailableError,c as isTimeoutError};
1
+ let e=function(e){return e[e.NOT_IMPLEMENTED=5e3]=`NOT_IMPLEMENTED`,e[e.SERVICE_NOT_AVAILABLE=5001]=`SERVICE_NOT_AVAILABLE`,e[e.INITIALIZATION_FAILED=5002]=`INITIALIZATION_FAILED`,e[e.INVALID_PARAMS=5003]=`INVALID_PARAMS`,e[e.TIMEOUT=5004]=`TIMEOUT`,e[e.VIEM_ERROR=5005]=`VIEM_ERROR`,e[e.TRANSACTION_REVERTED=5006]=`TRANSACTION_REVERTED`,e[e.NOTARIZATION_FAILED=5007]=`NOTARIZATION_FAILED`,e[e.SIGNING_FAILED=5008]=`SIGNING_FAILED`,e[e.SOLANA_ERROR=5009]=`SOLANA_ERROR`,e[e.HL_WITHDRAWABLE_DROPPED=5010]=`HL_WITHDRAWABLE_DROPPED`,e[e.HL_UNSUPPORTED_PROTOCOL_VERSION=5011]=`HL_UNSUPPORTED_PROTOCOL_VERSION`,e[e.HL_EXCHANGE_REJECTED=5012]=`HL_EXCHANGE_REJECTED`,e[e.UNKNOWN=5999]=`UNKNOWN`,e}({}),t=function(e){return e.ASSET_NOT_SUPPORTED=`ASSET_NOT_SUPPORTED`,e.CHAIN_NOT_SUPPORTED=`CHAIN_NOT_SUPPORTED`,e.CONFIG_NOT_AVAILABLE=`CONFIG_NOT_AVAILABLE`,e.CONFIRMATION_COUNT_UNKNOWN=`CONFIRMATION_COUNT_UNKNOWN`,e.DUPLICATE_SERVICE_INITIALIZATION=`DUPLICATE_SERVICE_INITIALIZATION`,e.ENVIRONMENT_NOT_SUPPORTED=`ENVIRONMENT_NOT_SUPPORTED`,e.IDENTICAL_CHAINS_PROVIDED=`IDENTICAL_CHAINS_PROVIDED`,e.INCORRECT_ADDRESS_PROVIDED=`INCORRECT_ADDRESS_PROVIDED`,e.INCORRECT_AMOUNT_PROVIDED=`INCORRECT_AMOUNT_PROVIDED`,e.INCORRECT_HASH_PROVIDED=`INCORRECT_HASH_PROVIDED`,e.INCORRECT_PROVIDER_PROVIDED=`INCORRECT_PROVIDER_PROVIDED`,e.INCORRECT_SIGNER_PROVIDED=`INCORRECT_SIGNER_PROVIDED`,e.INCORRECT_TXHASH_PROVIDED=`INCORRECT_TXHASH_PROVIDED`,e.INVALID_PARAMS=`INVALID_PARAMS`,e.SERVICE_TYPE_NOT_CONFIGURED=`SERVICE_TYPE_NOT_CONFIGURED`,e.UNKNOWN=`UNKNOWN`,e.VULNERABLE_TOKEN_APPROVAL_ADDRESS=`VULNERABLE_TOKEN_APPROVAL_ADDRESS`,e.WARDEN_CONFIG_MISMATCH=`WARDEN_CONFIG_MISMATCH`,e.WARDEN_CONFIG_MISSING_NETWORK=`WARDEN_CONFIG_MISSING_NETWORK`,e.ADDRESS_IS_BLOCKED=`ADDRESS_IS_BLOCKED`,e.QUOTE_EXPIRED=`QUOTE_EXPIRED`,e.NATIVE_WRAP_REVERTED=`NATIVE_WRAP_REVERTED`,e.RECURRING_SWAP_RESPONSE_INCONSISTENT=`RECURRING_SWAP_RESPONSE_INCONSISTENT`,e}({});var n=class extends Error{name=`SdkError`;constructor(e,t,n){super(e,{cause:n?.cause}),this.code=t,this.options=n}walk(e){return r(this,e)}};function r(e,t){return t?.(e)?e:e&&typeof e==`object`&&`cause`in e&&e.cause!==void 0?r(e.cause,t):t?null:e}function i(e){return e instanceof n}var a=class extends Error{name=`HttpError`;status;statusText;response;data;constructor(e,t,n){super(e),this.name=`HttpError`,this.status=t.status,this.statusText=t.statusText,this.response=t,this.data=n}};function o(e){return e instanceof a}var s=class extends Error{name=`TimeoutError`;constructor(e=`Request timed out.`){super(e),this.name=`TimeoutError`}};function c(e){return e instanceof s}var l=class extends Error{name=`AbortedError`;constructor(e=`Operation was aborted.`){super(e),this.name=`AbortedError`}};function u(e){return e instanceof l}var d=class extends Error{name=`ResponseValidationError`;issues;rawResponse;constructor(e=`Response validation failed.`,t,n){super(e),this.name=`ResponseValidationError`,this.issues=t,this.rawResponse=n}};function f(e){return e instanceof d}var p=class extends n{name=`ServiceInitializationError`;constructor(n=t.UNKNOWN,r,i){super(n,e.INITIALIZATION_FAILED,{cause:i,details:r})}};function m(e){return e instanceof p}var h=class extends n{name=`ServiceUnavailableError`;constructor(n=t.UNKNOWN,r){super(n,e.SERVICE_NOT_AVAILABLE,{details:r})}};function g(e){return e instanceof h}var _=class extends n{name=`InsufficientFundsError`;insufficientTokenWasNative;constructor({cause:e,details:t,errorCode:n,insufficientTokenWasNative:r}){super(r?`Insufficient native funds to cover the fee.`:`Insufficient token funds to estimate the fee.`,n,{cause:e,details:t}),this.insufficientTokenWasNative=r}};function v(e){return e instanceof _}var y=class extends n{name=`EstimateNativeFeeError`;details;tx;constructor({cause:e,details:t,errorCode:n,message:r=`Failed to estimate native fee for quote.`,tx:i}){super(r,n,{cause:e}),this.details=t,this.tx=i}causedByInsufficientFunds(){return v(this.cause)}};function b(e){return e instanceof y}var x=class extends n{name=`InvalidParamsError`;constructor(n=t.INVALID_PARAMS,r){super(n,e.INVALID_PARAMS,{details:r})}};function S(e){return e instanceof x}var C=class extends n{constructor(){super(`This functionality is not yet implemented.`,e.NOT_IMPLEMENTED)}};export{l as AbortedError,e as ErrorCode,t as ErrorReason,y as EstimateNativeFeeError,a as HttpError,_ as InsufficientFundsError,x as InvalidParamsError,C as NotImplementedError,d as ResponseValidationError,n as SdkError,p as ServiceInitializationError,h as ServiceUnavailableError,s as TimeoutError,u as isAbortedError,b as isEstimateNativeFeeError,o as isHttpError,v as isInsufficientFundsError,S as isInvalidParamsError,f as isResponseValidationError,i as isSdkError,m as isServiceInitializationError,g as isServiceUnavailableError,c as isTimeoutError};
2
2
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export enum ErrorCode {\n NOT_IMPLEMENTED = 5_000,\n SERVICE_NOT_AVAILABLE = 5_001,\n INITIALIZATION_FAILED = 5_002,\n INVALID_PARAMS = 5_003,\n TIMEOUT = 5_004,\n VIEM_ERROR = 5_005,\n TRANSACTION_REVERTED = 5_006,\n NOTARIZATION_FAILED = 5_007,\n SIGNING_FAILED = 5_008,\n SOLANA_ERROR = 5_009,\n /** Hyperliquid `withdrawable` dropped below the requested amount between authorize and sendAsset. */\n HL_WITHDRAWABLE_DROPPED = 5_010,\n /** Markr's `/swap` returned an `hyperliquid-withdraw` variant whose `protocolVersion` is unknown to this SDK release. */\n HL_UNSUPPORTED_PROTOCOL_VERSION = 5_011,\n /** Hyperliquid `/exchange` returned `{ status: \"err\" }`. */\n HL_EXCHANGE_REJECTED = 5_012,\n UNKNOWN = 5_999,\n}\n\nexport enum ErrorReason {\n /** the provided asset is not supported by the bridge */\n ASSET_NOT_SUPPORTED = 'ASSET_NOT_SUPPORTED',\n /** the provided source or target chain is not supported by the bridge */\n CHAIN_NOT_SUPPORTED = 'CHAIN_NOT_SUPPORTED',\n /** error while fetching or parsing the config */\n CONFIG_NOT_AVAILABLE = 'CONFIG_NOT_AVAILABLE',\n /** required confirmation count of the source or target chain is unknown */\n CONFIRMATION_COUNT_UNKNOWN = 'CONFIRMATION_COUNT_UNKNOWN',\n /** service is being initialized more than once */\n DUPLICATE_SERVICE_INITIALIZATION = 'DUPLICATE_SERVICE_INITIALIZATION',\n /** bridge does not support specified environment */\n ENVIRONMENT_NOT_SUPPORTED = 'ENVIRONMENT_NOT_SUPPORTED',\n /** provided source and target chains are the same */\n IDENTICAL_CHAINS_PROVIDED = 'IDENTICAL_CHAINS_PROVIDED',\n /** the sender or recipient address is incorrect */\n INCORRECT_ADDRESS_PROVIDED = 'INCORRECT_ADDRESS_PROVIDED',\n /** the transfer amount is incorrect (e.g.: lesser than or equal to zero) */\n INCORRECT_AMOUNT_PROVIDED = 'INCORRECT_AMOUNT_PROVIDED',\n /** the transaction is not hex */\n INCORRECT_HASH_PROVIDED = 'INCORRECT_HASH_PROVIDED',\n /** The provided provider is incorrect type (Provider VS BitcoinProvider) */\n INCORRECT_PROVIDER_PROVIDED = 'INCORRECT_PROVIDER_PROVIDED',\n /** The provided signer is incorrect type */\n INCORRECT_SIGNER_PROVIDED = 'INCORRECT_SIGNER_PROVIDED',\n /** the sourceTxHash or targetTxHash is incorrect */\n INCORRECT_TXHASH_PROVIDED = 'INCORRECT_TXHASH_PROVIDED',\n /** generic error with the params */\n INVALID_PARAMS = 'INVALID_PARAMS',\n /** ServiceType requested not available */\n SERVICE_TYPE_NOT_CONFIGURED = 'SERVICE_TYPE_NOT_CONFIGURED',\n /** generic, not specified error */\n UNKNOWN = 'UNKNOWN',\n /** error when the address has token approvals for addresses involved in the multichain incident */\n VULNERABLE_TOKEN_APPROVAL_ADDRESS = 'VULNERABLE_TOKEN_APPROVAL_ADDRESS',\n /** error when warden config was not found or it is over the mismatch threshold */\n WARDEN_CONFIG_MISMATCH = 'WARDEN_CONFIG_MISMATCH',\n /** fetched warden config does not contain network IDs */\n WARDEN_CONFIG_MISSING_NETWORK = 'WARDEN_CONFIG_MISSING_NETWORK',\n /** address is blocked */\n ADDRESS_IS_BLOCKED = 'ADDRESS_IS_BLOCKED',\n /** Quote expired */\n QUOTE_EXPIRED = 'QUOTE_EXPIRED',\n}\n\nexport class SdkError extends Error {\n override name = 'SdkError';\n\n constructor(\n message: string,\n public code: ErrorCode,\n public options?: {\n cause?: unknown;\n details?: string;\n },\n ) {\n super(message, { cause: options?.cause });\n }\n\n walk(): Error;\n walk(fn: (err: unknown) => boolean): Error | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walk(fn?: any): any {\n return walkError(this, fn);\n }\n}\n\nfunction walkError(err: unknown): unknown;\nfunction walkError(err: unknown, fn: (err: unknown) => boolean): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null {\n if (fn?.(err)) {\n return err;\n }\n\n if (err && typeof err === 'object' && 'cause' in err && err.cause !== undefined) {\n return walkError(err.cause, fn);\n }\n\n return fn ? null : err;\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport class HttpError extends Error {\n override name = 'HttpError';\n\n readonly status: number;\n readonly statusText: string;\n readonly response: Response;\n readonly data?: unknown;\n\n constructor(message: string, response: Response, data?: unknown) {\n super(message);\n this.name = 'HttpError';\n this.status = response.status;\n this.statusText = response.statusText;\n this.response = response;\n this.data = data;\n }\n}\n\nexport function isHttpError(error: unknown): error is HttpError {\n return error instanceof HttpError;\n}\n\nexport class TimeoutError extends Error {\n override name = 'TimeoutError';\n\n constructor(message = 'Request timed out.') {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport class AbortedError extends Error {\n override name = 'AbortedError';\n\n constructor(message = 'Operation was aborted.') {\n super(message);\n this.name = 'AbortedError';\n }\n}\n\nexport function isAbortedError(error: unknown): error is AbortedError {\n return error instanceof AbortedError;\n}\n\nexport class ResponseValidationError extends Error {\n override name = 'ResponseValidationError';\n\n readonly issues?: unknown;\n readonly rawResponse?: unknown;\n\n constructor(message = 'Response validation failed.', issues?: unknown, rawResponse?: unknown) {\n super(message);\n this.name = 'ResponseValidationError';\n this.issues = issues;\n this.rawResponse = rawResponse;\n }\n}\n\nexport function isResponseValidationError(error: unknown): error is ResponseValidationError {\n return error instanceof ResponseValidationError;\n}\n\nexport class ServiceInitializationError extends SdkError {\n override name = 'ServiceInitializationError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string, cause?: unknown) {\n super(message, ErrorCode.INITIALIZATION_FAILED, { cause, details });\n }\n}\n\nexport function isServiceInitializationError(error: unknown): error is ServiceInitializationError {\n return error instanceof ServiceInitializationError;\n}\n\nexport class ServiceUnavailableError extends SdkError {\n override name = 'ServiceUnavailableError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string) {\n super(message, ErrorCode.SERVICE_NOT_AVAILABLE, { details });\n }\n}\n\nexport function isServiceUnavailableError(error: unknown): error is ServiceUnavailableError {\n return error instanceof ServiceUnavailableError;\n}\n\nexport class InsufficientFundsError extends SdkError {\n override name = 'InsufficientFundsError';\n public insufficientTokenWasNative: boolean;\n\n constructor({\n cause,\n details,\n errorCode,\n insufficientTokenWasNative,\n }: {\n errorCode: ErrorCode.VIEM_ERROR | ErrorCode.SOLANA_ERROR;\n details?: string;\n cause?: unknown;\n insufficientTokenWasNative: boolean;\n }) {\n super(\n insufficientTokenWasNative\n ? 'Insufficient native funds to cover the fee.'\n : 'Insufficient token funds to estimate the fee.',\n errorCode,\n { cause, details },\n );\n this.insufficientTokenWasNative = insufficientTokenWasNative;\n }\n}\n\nexport function isInsufficientFundsError(error: unknown): error is InsufficientFundsError {\n return error instanceof InsufficientFundsError;\n}\n\nexport interface EstimateNativeFeeErrorDetails {\n /** Human-readable reason from `Error(string)` or `Panic(uint256)`. */\n reason?: string;\n /** Custom error name from the ABI, e.g. `\"SlippageTooHigh\"`. */\n errorName?: string;\n /** Decoded arguments from the custom error. */\n args?: readonly unknown[];\n /** Raw revert data (hex). */\n data?: `0x${string}`;\n}\n\nexport class EstimateNativeFeeError extends SdkError {\n override name = 'EstimateNativeFeeError';\n public details: EstimateNativeFeeErrorDetails | undefined;\n public tx: string | { account: `0x${string}`; to: `0x${string}`; data: `0x${string}`; value?: bigint };\n\n constructor({\n cause,\n details,\n errorCode,\n message = 'Failed to estimate native fee for quote.',\n tx,\n }: {\n cause?: unknown;\n details?: EstimateNativeFeeErrorDetails;\n errorCode: ErrorCode.VIEM_ERROR | ErrorCode.SOLANA_ERROR;\n message?: string;\n tx: string | { account: `0x${string}`; to: `0x${string}`; data: `0x${string}`; value?: bigint };\n }) {\n super(message, errorCode, { cause });\n this.details = details;\n this.tx = tx;\n }\n\n /**\n * Helper method to check if the error was caused by insufficient funds to cover the fee.\n * Note that this is a heuristic based on the error details and may not be 100% accurate in all cases.\n * Use with caution and consider inspecting the error details for more context.\n */\n public causedByInsufficientFunds(): boolean {\n return isInsufficientFundsError(this.cause);\n }\n}\n\nexport function isEstimateNativeFeeError(error: unknown): error is EstimateNativeFeeError {\n return error instanceof EstimateNativeFeeError;\n}\n\nexport class InvalidParamsError extends SdkError {\n override name = 'InvalidParamsError';\n\n constructor(message: string = ErrorReason.INVALID_PARAMS, details?: string) {\n super(message, ErrorCode.INVALID_PARAMS, { details });\n }\n}\n\nexport function isInvalidParamsError(error: unknown): error is InvalidParamsError {\n return error instanceof InvalidParamsError;\n}\n\n/**\n * @internal\n *\n * Error to indicate that a functionality has not yet been implemented.\n * Do not export from entrypoint.\n */\nexport class NotImplementedError extends SdkError {\n constructor() {\n super('This functionality is not yet implemented.', ErrorCode.NOT_IMPLEMENTED);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export enum ErrorCode {\n NOT_IMPLEMENTED = 5_000,\n SERVICE_NOT_AVAILABLE = 5_001,\n INITIALIZATION_FAILED = 5_002,\n INVALID_PARAMS = 5_003,\n TIMEOUT = 5_004,\n VIEM_ERROR = 5_005,\n TRANSACTION_REVERTED = 5_006,\n NOTARIZATION_FAILED = 5_007,\n SIGNING_FAILED = 5_008,\n SOLANA_ERROR = 5_009,\n /** Hyperliquid `withdrawable` dropped below the requested amount between authorize and sendAsset. */\n HL_WITHDRAWABLE_DROPPED = 5_010,\n /** Markr's `/swap` returned an `hyperliquid-withdraw` variant whose `protocolVersion` is unknown to this SDK release. */\n HL_UNSUPPORTED_PROTOCOL_VERSION = 5_011,\n /** Hyperliquid `/exchange` returned `{ status: \"err\" }`. */\n HL_EXCHANGE_REJECTED = 5_012,\n UNKNOWN = 5_999,\n}\n\nexport enum ErrorReason {\n /** the provided asset is not supported by the bridge */\n ASSET_NOT_SUPPORTED = 'ASSET_NOT_SUPPORTED',\n /** the provided source or target chain is not supported by the bridge */\n CHAIN_NOT_SUPPORTED = 'CHAIN_NOT_SUPPORTED',\n /** error while fetching or parsing the config */\n CONFIG_NOT_AVAILABLE = 'CONFIG_NOT_AVAILABLE',\n /** required confirmation count of the source or target chain is unknown */\n CONFIRMATION_COUNT_UNKNOWN = 'CONFIRMATION_COUNT_UNKNOWN',\n /** service is being initialized more than once */\n DUPLICATE_SERVICE_INITIALIZATION = 'DUPLICATE_SERVICE_INITIALIZATION',\n /** bridge does not support specified environment */\n ENVIRONMENT_NOT_SUPPORTED = 'ENVIRONMENT_NOT_SUPPORTED',\n /** provided source and target chains are the same */\n IDENTICAL_CHAINS_PROVIDED = 'IDENTICAL_CHAINS_PROVIDED',\n /** the sender or recipient address is incorrect */\n INCORRECT_ADDRESS_PROVIDED = 'INCORRECT_ADDRESS_PROVIDED',\n /** the transfer amount is incorrect (e.g.: lesser than or equal to zero) */\n INCORRECT_AMOUNT_PROVIDED = 'INCORRECT_AMOUNT_PROVIDED',\n /** the transaction is not hex */\n INCORRECT_HASH_PROVIDED = 'INCORRECT_HASH_PROVIDED',\n /** The provided provider is incorrect type (Provider VS BitcoinProvider) */\n INCORRECT_PROVIDER_PROVIDED = 'INCORRECT_PROVIDER_PROVIDED',\n /** The provided signer is incorrect type */\n INCORRECT_SIGNER_PROVIDED = 'INCORRECT_SIGNER_PROVIDED',\n /** the sourceTxHash or targetTxHash is incorrect */\n INCORRECT_TXHASH_PROVIDED = 'INCORRECT_TXHASH_PROVIDED',\n /** generic error with the params */\n INVALID_PARAMS = 'INVALID_PARAMS',\n /** ServiceType requested not available */\n SERVICE_TYPE_NOT_CONFIGURED = 'SERVICE_TYPE_NOT_CONFIGURED',\n /** generic, not specified error */\n UNKNOWN = 'UNKNOWN',\n /** error when the address has token approvals for addresses involved in the multichain incident */\n VULNERABLE_TOKEN_APPROVAL_ADDRESS = 'VULNERABLE_TOKEN_APPROVAL_ADDRESS',\n /** error when warden config was not found or it is over the mismatch threshold */\n WARDEN_CONFIG_MISMATCH = 'WARDEN_CONFIG_MISMATCH',\n /** fetched warden config does not contain network IDs */\n WARDEN_CONFIG_MISSING_NETWORK = 'WARDEN_CONFIG_MISSING_NETWORK',\n /** address is blocked */\n ADDRESS_IS_BLOCKED = 'ADDRESS_IS_BLOCKED',\n /** Quote expired */\n QUOTE_EXPIRED = 'QUOTE_EXPIRED',\n /**\n * The on-chain `WAVAX.deposit{value}()` transaction the SDK signed as the\n * first leg of a native-input recurring schedule was mined as reverted —\n * the user does not hold the wrapped balance the downstream `createOrder`\n * needs, so the schedule was not created.\n */\n NATIVE_WRAP_REVERTED = 'NATIVE_WRAP_REVERTED',\n /**\n * Markr's `/recurring/swap` response shape did not agree with the cached\n * quote's `tokenIn` — e.g. native input returned without a wrap step, an\n * ERC-20 input returned with one, or `createOrder` is missing entirely.\n * Signing the response as-is would broadcast a mismatched flow (charge\n * native the user didn't authorize, or skip a wrap they needed), so the\n * SDK refuses. See `details` on the thrown `SdkError` for which variant\n * fired.\n */\n RECURRING_SWAP_RESPONSE_INCONSISTENT = 'RECURRING_SWAP_RESPONSE_INCONSISTENT',\n}\n\nexport class SdkError extends Error {\n override name = 'SdkError';\n\n constructor(\n message: string,\n public code: ErrorCode,\n public options?: {\n cause?: unknown;\n details?: string;\n },\n ) {\n super(message, { cause: options?.cause });\n }\n\n walk(): Error;\n walk(fn: (err: unknown) => boolean): Error | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walk(fn?: any): any {\n return walkError(this, fn);\n }\n}\n\nfunction walkError(err: unknown): unknown;\nfunction walkError(err: unknown, fn: (err: unknown) => boolean): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null;\nfunction walkError(err: unknown, fn?: ((err: unknown) => boolean) | undefined): unknown | null {\n if (fn?.(err)) {\n return err;\n }\n\n if (err && typeof err === 'object' && 'cause' in err && err.cause !== undefined) {\n return walkError(err.cause, fn);\n }\n\n return fn ? null : err;\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport class HttpError extends Error {\n override name = 'HttpError';\n\n readonly status: number;\n readonly statusText: string;\n readonly response: Response;\n readonly data?: unknown;\n\n constructor(message: string, response: Response, data?: unknown) {\n super(message);\n this.name = 'HttpError';\n this.status = response.status;\n this.statusText = response.statusText;\n this.response = response;\n this.data = data;\n }\n}\n\nexport function isHttpError(error: unknown): error is HttpError {\n return error instanceof HttpError;\n}\n\nexport class TimeoutError extends Error {\n override name = 'TimeoutError';\n\n constructor(message = 'Request timed out.') {\n super(message);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport class AbortedError extends Error {\n override name = 'AbortedError';\n\n constructor(message = 'Operation was aborted.') {\n super(message);\n this.name = 'AbortedError';\n }\n}\n\nexport function isAbortedError(error: unknown): error is AbortedError {\n return error instanceof AbortedError;\n}\n\nexport class ResponseValidationError extends Error {\n override name = 'ResponseValidationError';\n\n readonly issues?: unknown;\n readonly rawResponse?: unknown;\n\n constructor(message = 'Response validation failed.', issues?: unknown, rawResponse?: unknown) {\n super(message);\n this.name = 'ResponseValidationError';\n this.issues = issues;\n this.rawResponse = rawResponse;\n }\n}\n\nexport function isResponseValidationError(error: unknown): error is ResponseValidationError {\n return error instanceof ResponseValidationError;\n}\n\nexport class ServiceInitializationError extends SdkError {\n override name = 'ServiceInitializationError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string, cause?: unknown) {\n super(message, ErrorCode.INITIALIZATION_FAILED, { cause, details });\n }\n}\n\nexport function isServiceInitializationError(error: unknown): error is ServiceInitializationError {\n return error instanceof ServiceInitializationError;\n}\n\nexport class ServiceUnavailableError extends SdkError {\n override name = 'ServiceUnavailableError';\n\n constructor(message: string = ErrorReason.UNKNOWN, details?: string) {\n super(message, ErrorCode.SERVICE_NOT_AVAILABLE, { details });\n }\n}\n\nexport function isServiceUnavailableError(error: unknown): error is ServiceUnavailableError {\n return error instanceof ServiceUnavailableError;\n}\n\nexport class InsufficientFundsError extends SdkError {\n override name = 'InsufficientFundsError';\n public insufficientTokenWasNative: boolean;\n\n constructor({\n cause,\n details,\n errorCode,\n insufficientTokenWasNative,\n }: {\n errorCode: ErrorCode.VIEM_ERROR | ErrorCode.SOLANA_ERROR;\n details?: string;\n cause?: unknown;\n insufficientTokenWasNative: boolean;\n }) {\n super(\n insufficientTokenWasNative\n ? 'Insufficient native funds to cover the fee.'\n : 'Insufficient token funds to estimate the fee.',\n errorCode,\n { cause, details },\n );\n this.insufficientTokenWasNative = insufficientTokenWasNative;\n }\n}\n\nexport function isInsufficientFundsError(error: unknown): error is InsufficientFundsError {\n return error instanceof InsufficientFundsError;\n}\n\nexport interface EstimateNativeFeeErrorDetails {\n /** Human-readable reason from `Error(string)` or `Panic(uint256)`. */\n reason?: string;\n /** Custom error name from the ABI, e.g. `\"SlippageTooHigh\"`. */\n errorName?: string;\n /** Decoded arguments from the custom error. */\n args?: readonly unknown[];\n /** Raw revert data (hex). */\n data?: `0x${string}`;\n}\n\nexport class EstimateNativeFeeError extends SdkError {\n override name = 'EstimateNativeFeeError';\n public details: EstimateNativeFeeErrorDetails | undefined;\n public tx: string | { account: `0x${string}`; to: `0x${string}`; data: `0x${string}`; value?: bigint };\n\n constructor({\n cause,\n details,\n errorCode,\n message = 'Failed to estimate native fee for quote.',\n tx,\n }: {\n cause?: unknown;\n details?: EstimateNativeFeeErrorDetails;\n errorCode: ErrorCode.VIEM_ERROR | ErrorCode.SOLANA_ERROR;\n message?: string;\n tx: string | { account: `0x${string}`; to: `0x${string}`; data: `0x${string}`; value?: bigint };\n }) {\n super(message, errorCode, { cause });\n this.details = details;\n this.tx = tx;\n }\n\n /**\n * Helper method to check if the error was caused by insufficient funds to cover the fee.\n * Note that this is a heuristic based on the error details and may not be 100% accurate in all cases.\n * Use with caution and consider inspecting the error details for more context.\n */\n public causedByInsufficientFunds(): boolean {\n return isInsufficientFundsError(this.cause);\n }\n}\n\nexport function isEstimateNativeFeeError(error: unknown): error is EstimateNativeFeeError {\n return error instanceof EstimateNativeFeeError;\n}\n\nexport class InvalidParamsError extends SdkError {\n override name = 'InvalidParamsError';\n\n constructor(message: string = ErrorReason.INVALID_PARAMS, details?: string) {\n super(message, ErrorCode.INVALID_PARAMS, { details });\n }\n}\n\nexport function isInvalidParamsError(error: unknown): error is InvalidParamsError {\n return error instanceof InvalidParamsError;\n}\n\n/**\n * @internal\n *\n * Error to indicate that a functionality has not yet been implemented.\n * Do not export from entrypoint.\n */\nexport class NotImplementedError extends SdkError {\n constructor() {\n super('This functionality is not yet implemented.', ErrorCode.NOT_IMPLEMENTED);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../_utils.cjs`),r=require(`../constants.cjs`),i=require(`../_utils.cjs`),a=require(`../../_transfer-utilities.cjs`),o=require(`../_utils/p-chain.cjs`),s=require(`../_utils/polling.cjs`),c=require(`../_utils/transactions.cjs`),l=require(`../_utils/fees.cjs`),u=require(`../_utils/addresses.cjs`);function d({ajsContext:n,avalancheSendTx:r,environment:o,getCoreEthAddress:c,getAtomicUtxos:l,getUtxos:d,getWalletAddressesForChainAlias:m,getWalletChangeAddressForChainAlias:_}){return async({onStepChange:v,quote:y})=>{if(y.serviceType!==e.ServiceType.AVALANCHE_CCT)throw new t.SdkError(t.ErrorReason.INCORRECT_PROVIDER_PROVIDED,t.ErrorCode.INVALID_PARAMS);let b=i.getEnvironmentIsTestnet(o),x=i.getChainAlias(y.sourceChain.chainId,b),S=i.getChainAlias(y.targetChain.chainId,b),C=u.getExportFromAddressEvm(y.fromAddress,x),w=x===`C`?void 0:u.assertXpAddress(y.fromAddress),T=await u.getExportToAddress({destinationChainAlias:S,getCoreEthAddress:c,quoteToAddress:y.toAddress}),E=u.getImportToAddress(y.toAddress,S),D=S===`C`?T:u.assertXpAddress(y.toAddress),O=y.amountIn>0n,k=O?2:1,A=Date.now(),j=f(y,o),M;if(O){v?.({currentSignature:1,currentSignatureReason:e.TransferSignatureReason.AvalancheCrossChainExport,quote:y,requiredSignatures:k});let c=await i.tryOrThrow(()=>h({ajsContext:n,environment:o,getUtxos:d,getWalletAddressesForChainAlias:m,getWalletChangeAddressForChainAlias:_,quoteAmountIn:y.amountIn,sourceChainAlias:x,destinationChainAlias:S,fromAddress:C,requiredFromAddress:w,toAddress:T}),e=>new t.SdkError(`Failed to build Avalanche export transaction.`,t.ErrorCode.UNKNOWN,{cause:e}));M=await i.tryOrThrow(()=>r({baseFeeInNanoAvax:c.baseFeeInNanoAvax,chainAlias:x,txType:`export`,unsignedTx:c.unsignedTx}),e=>new t.SdkError(`Failed to sign/send Avalanche export transaction.`,t.ErrorCode.SIGNING_FAILED,{cause:e}));let l;try{l=await s.pollPrimaryNetworkTxStatus({chainAlias:x,environment:o,txId:M})}catch{return a.sourcePendingTransferFromQuote(y,{environment:o,requiredConfirmationCount:1,startedAtMs:A,txHash:M})}if(!l)return p({errorCode:t.ErrorCode.TRANSACTION_REVERTED,errorReason:`Export transaction was not accepted by Avalanche.`,sourceStartedAtMs:A,sourceTxHash:M,transferBase:j})}let N=await i.tryOrThrow(async()=>(await l(S,x)).getUTXOs(),e=>new t.SdkError(`Failed to fetch Avalanche atomic UTXOs.`,t.ErrorCode.UNKNOWN,{cause:e}));if(N.length===0)return p({errorCode:t.ErrorCode.INVALID_PARAMS,errorReason:`No atomic UTXOs available to import for this route.`,sourceStartedAtMs:A,sourceTxHash:M,transferBase:j});v?.({currentSignature:O?2:1,currentSignatureReason:e.TransferSignatureReason.AvalancheCrossChainImport,quote:y,requiredSignatures:k});let P=await i.tryOrThrow(()=>g({ajsContext:n,atomicUtxos:N,destinationChainAlias:S,environment:o,getWalletAddressesForChainAlias:m,getWalletChangeAddressForChainAlias:_,sourceChainAlias:x,requiredFromAddress:D,toAddress:E}),e=>new t.SdkError(`Failed to build Avalanche import transaction.`,t.ErrorCode.UNKNOWN,{cause:e})),F=await i.tryOrThrow(()=>r({baseFeeInNanoAvax:P.baseFeeInNanoAvax,chainAlias:S,txType:`import`,unsignedTx:P.unsignedTx}),e=>new t.SdkError(`Failed to sign/send Avalanche import transaction.`,t.ErrorCode.SIGNING_FAILED,{cause:e}));return{...j,source:{confirmationCount:M?1:0,requiredConfirmationCount:1,startedAtMs:A,txHash:M??F},status:`target-pending`,target:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:Date.now(),txHash:F}}}}function f(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t,fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}function p({errorCode:e,errorReason:t,sourceStartedAtMs:n,sourceTxHash:r,transferBase:i}){return{...i,errorCode:e,errorReason:t,failedAtMs:Date.now(),...r?{source:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:n,txHash:r}}:{},status:`failed`}}function m(e,t){return e===`C`?t/r.WEI_PER_NANO_AVAX_BIGINT:t}async function h({ajsContext:r,destinationChainAlias:i,environment:a,fromAddress:s,getUtxos:d,getWalletAddressesForChainAlias:f,getWalletChangeAddressForChainAlias:p,quoteAmountIn:h,requiredFromAddress:g,sourceChainAlias:_,toAddress:v}){let y=m(_,h);switch(_){case`C`:{if(i===`C`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);if(!s)throw new t.InvalidParamsError(`fromAddress must be an EVM address when exporting from C-Chain.`);let o=n.getEvmClientForChain({chain:a===e.Environment.TEST?e.AVALANCHE_FUJI_CHAIN:e.AVALANCHE_MAINNET_CHAIN}),[u,d]=await Promise.all([o.getTransactionCount({address:s}),l.getCChainBaseFeeInNanoAvax(a)]);return{baseFeeInNanoAvax:d,unsignedTx:c.exportTx({amountInNanoAvax:y,baseFeeInNanoAvax:d,context:r,destinationChainAlias:i,fromAddress:s,nonce:BigInt(u),sourceChainAlias:_,toAddress:v})}}case`P`:{if(i===`P`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[e,n,s,l]=await Promise.all([u.getWalletChangeAddress({chainAlias:_,getWalletChangeAddressForChainAlias:p}),o.getFeeState(a),u.getWalletFromAddresses({chainAlias:_,getWalletAddressesForChainAlias:f,requiredAddress:g}),d(`P`)]);return{baseFeeInNanoAvax:n.price,unsignedTx:c.exportTx({amountInNanoAvax:y,changeAddress:e,context:r,destinationChainAlias:i,feeState:n,fromAddresses:s,sourceChainAlias:_,toAddress:v,utxos:l.getUTXOs()})}}case`X`:{if(i===`X`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[e,n,a]=await Promise.all([u.getWalletChangeAddress({chainAlias:_,getWalletChangeAddressForChainAlias:p}),u.getWalletFromAddresses({chainAlias:_,getWalletAddressesForChainAlias:f,requiredAddress:g}),d(`X`)]);return{baseFeeInNanoAvax:r.baseTxFee,unsignedTx:c.exportTx({amountInNanoAvax:y,changeAddress:e,context:r,destinationChainAlias:i,fromAddresses:n,sourceChainAlias:_,toAddress:v,utxos:a.getUTXOs()})}}}}async function g({ajsContext:e,atomicUtxos:n,destinationChainAlias:r,environment:i,getWalletAddressesForChainAlias:a,getWalletChangeAddressForChainAlias:s,requiredFromAddress:d,sourceChainAlias:f,toAddress:p}){switch(r){case`C`:{if(f===`C`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[o,s]=await Promise.all([l.getCChainBaseFeeInNanoAvax(i),u.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:a,requiredAddress:d})]);return{baseFeeInNanoAvax:o,unsignedTx:c.importTx({atomicUtxos:n,baseFeeInNanoAvax:o,context:e,destinationChainAlias:r,fromAddresses:s,sourceChainAlias:f,toAddress:u.getImportToAddress(p,`C`)})}}case`P`:{if(f===`P`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[s,l]=await Promise.all([o.getFeeState(i),u.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:a,requiredAddress:d})]);return{baseFeeInNanoAvax:s.price,unsignedTx:c.importTx({atomicUtxos:n,context:e,destinationChainAlias:r,feeState:s,fromAddresses:l,sourceChainAlias:f,toAddress:u.getImportToAddress(p,`P`)})}}case`X`:{if(f===`X`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[i,o]=await Promise.all([u.getWalletChangeAddress({chainAlias:r,getWalletChangeAddressForChainAlias:s}),u.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:a,requiredAddress:d})]);return{baseFeeInNanoAvax:e.baseTxFee,unsignedTx:c.importTx({atomicUtxos:n,changeAddress:i,context:e,destinationChainAlias:r,fromAddresses:o,sourceChainAlias:f,toAddress:u.getImportToAddress(p,`X`)})}}}}exports.transferAssetFactory=d;
1
+ const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../_utils.cjs`),r=require(`../constants.cjs`),i=require(`../_utils.cjs`),a=require(`../../_transfer-utilities.cjs`),o=require(`../_utils/p-chain.cjs`),s=require(`../_utils/polling.cjs`),c=require(`../_utils/transactions.cjs`),l=require(`../_utils/fees.cjs`),u=require(`../_utils/addresses.cjs`);function d({ajsContext:n,avalancheSendTx:r,environment:o,getCoreEthAddress:c,getAtomicUtxos:l,getUtxos:d,getWalletAddressesForChainAlias:m,getWalletChangeAddressForChainAlias:_}){return async({onStepChange:v,quote:y})=>{if(y.serviceType!==e.ServiceType.AVALANCHE_CCT)throw new t.SdkError(t.ErrorReason.INCORRECT_PROVIDER_PROVIDED,t.ErrorCode.INVALID_PARAMS);let b=i.getEnvironmentIsTestnet(o),x=i.getChainAlias(y.sourceChain.chainId,b),S=i.getChainAlias(y.targetChain.chainId,b),C=u.getExportFromAddressEvm(y.fromAddress,x),w=x===`C`?void 0:u.assertXpAddress(y.fromAddress),T=await u.getExportToAddress({destinationChainAlias:S,getCoreEthAddress:c,quoteToAddress:y.toAddress}),E=u.getImportToAddress(y.toAddress,S),D=S===`C`?T:u.assertXpAddress(y.toAddress),O=y.amountIn>0n,k=O?2:1,A=Date.now(),j=f(y,o),M;if(O){let c={currentSignature:1,currentSignatureReason:e.TransferSignatureReason.AvalancheCrossChainExport,quote:y,requiredSignatures:k};v?.(c);let l=await i.tryOrThrow(()=>h({ajsContext:n,environment:o,getUtxos:d,getWalletAddressesForChainAlias:m,getWalletChangeAddressForChainAlias:_,quoteAmountIn:y.amountIn,sourceChainAlias:x,destinationChainAlias:S,fromAddress:C,requiredFromAddress:w,toAddress:T}),e=>new t.SdkError(`Failed to build Avalanche export transaction.`,t.ErrorCode.UNKNOWN,{cause:e}));M=await i.tryOrThrow(()=>r({baseFeeInNanoAvax:l.baseFeeInNanoAvax,chainAlias:x,txType:`export`,unsignedTx:l.unsignedTx},c),e=>new t.SdkError(`Failed to sign/send Avalanche export transaction.`,t.ErrorCode.SIGNING_FAILED,{cause:e}));let u;try{u=await s.pollPrimaryNetworkTxStatus({chainAlias:x,environment:o,txId:M})}catch{return a.sourcePendingTransferFromQuote(y,{environment:o,requiredConfirmationCount:1,startedAtMs:A,txHash:M})}if(!u)return p({errorCode:t.ErrorCode.TRANSACTION_REVERTED,errorReason:`Export transaction was not accepted by Avalanche.`,sourceStartedAtMs:A,sourceTxHash:M,transferBase:j})}let N=await i.tryOrThrow(async()=>(await l(S,x)).getUTXOs(),e=>new t.SdkError(`Failed to fetch Avalanche atomic UTXOs.`,t.ErrorCode.UNKNOWN,{cause:e}));if(N.length===0)return p({errorCode:t.ErrorCode.INVALID_PARAMS,errorReason:`No atomic UTXOs available to import for this route.`,sourceStartedAtMs:A,sourceTxHash:M,transferBase:j});let P={currentSignature:O?2:1,currentSignatureReason:e.TransferSignatureReason.AvalancheCrossChainImport,quote:y,requiredSignatures:k};v?.(P);let F=await i.tryOrThrow(()=>g({ajsContext:n,atomicUtxos:N,destinationChainAlias:S,environment:o,getWalletAddressesForChainAlias:m,getWalletChangeAddressForChainAlias:_,sourceChainAlias:x,requiredFromAddress:D,toAddress:E}),e=>new t.SdkError(`Failed to build Avalanche import transaction.`,t.ErrorCode.UNKNOWN,{cause:e})),I=await i.tryOrThrow(()=>r({baseFeeInNanoAvax:F.baseFeeInNanoAvax,chainAlias:S,txType:`import`,unsignedTx:F.unsignedTx},P),e=>new t.SdkError(`Failed to sign/send Avalanche import transaction.`,t.ErrorCode.SIGNING_FAILED,{cause:e}));return{...j,source:{confirmationCount:M?1:0,requiredConfirmationCount:1,startedAtMs:A,txHash:M??I},status:`target-pending`,target:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:Date.now(),txHash:I}}}}function f(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t,fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}function p({errorCode:e,errorReason:t,sourceStartedAtMs:n,sourceTxHash:r,transferBase:i}){return{...i,errorCode:e,errorReason:t,failedAtMs:Date.now(),...r?{source:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:n,txHash:r}}:{},status:`failed`}}function m(e,t){return e===`C`?t/r.WEI_PER_NANO_AVAX_BIGINT:t}async function h({ajsContext:r,destinationChainAlias:i,environment:a,fromAddress:s,getUtxos:d,getWalletAddressesForChainAlias:f,getWalletChangeAddressForChainAlias:p,quoteAmountIn:h,requiredFromAddress:g,sourceChainAlias:_,toAddress:v}){let y=m(_,h);switch(_){case`C`:{if(i===`C`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);if(!s)throw new t.InvalidParamsError(`fromAddress must be an EVM address when exporting from C-Chain.`);let o=n.getEvmClientForChain({chain:a===e.Environment.TEST?e.AVALANCHE_FUJI_CHAIN:e.AVALANCHE_MAINNET_CHAIN}),[u,d]=await Promise.all([o.getTransactionCount({address:s}),l.getCChainBaseFeeInNanoAvax(a)]);return{baseFeeInNanoAvax:d,unsignedTx:c.exportTx({amountInNanoAvax:y,baseFeeInNanoAvax:d,context:r,destinationChainAlias:i,fromAddress:s,nonce:BigInt(u),sourceChainAlias:_,toAddress:v})}}case`P`:{if(i===`P`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[e,n,s,l]=await Promise.all([u.getWalletChangeAddress({chainAlias:_,getWalletChangeAddressForChainAlias:p}),o.getFeeState(a),u.getWalletFromAddresses({chainAlias:_,getWalletAddressesForChainAlias:f,requiredAddress:g}),d(`P`)]);return{baseFeeInNanoAvax:n.price,unsignedTx:c.exportTx({amountInNanoAvax:y,changeAddress:e,context:r,destinationChainAlias:i,feeState:n,fromAddresses:s,sourceChainAlias:_,toAddress:v,utxos:l.getUTXOs()})}}case`X`:{if(i===`X`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[e,n,a]=await Promise.all([u.getWalletChangeAddress({chainAlias:_,getWalletChangeAddressForChainAlias:p}),u.getWalletFromAddresses({chainAlias:_,getWalletAddressesForChainAlias:f,requiredAddress:g}),d(`X`)]);return{baseFeeInNanoAvax:r.baseTxFee,unsignedTx:c.exportTx({amountInNanoAvax:y,changeAddress:e,context:r,destinationChainAlias:i,fromAddresses:n,sourceChainAlias:_,toAddress:v,utxos:a.getUTXOs()})}}}}async function g({ajsContext:e,atomicUtxos:n,destinationChainAlias:r,environment:i,getWalletAddressesForChainAlias:a,getWalletChangeAddressForChainAlias:s,requiredFromAddress:d,sourceChainAlias:f,toAddress:p}){switch(r){case`C`:{if(f===`C`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[o,s]=await Promise.all([l.getCChainBaseFeeInNanoAvax(i),u.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:a,requiredAddress:d})]);return{baseFeeInNanoAvax:o,unsignedTx:c.importTx({atomicUtxos:n,baseFeeInNanoAvax:o,context:e,destinationChainAlias:r,fromAddresses:s,sourceChainAlias:f,toAddress:u.getImportToAddress(p,`C`)})}}case`P`:{if(f===`P`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[s,l]=await Promise.all([o.getFeeState(i),u.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:a,requiredAddress:d})]);return{baseFeeInNanoAvax:s.price,unsignedTx:c.importTx({atomicUtxos:n,context:e,destinationChainAlias:r,feeState:s,fromAddresses:l,sourceChainAlias:f,toAddress:u.getImportToAddress(p,`P`)})}}case`X`:{if(f===`X`)throw new t.InvalidParamsError(`Source and destination chain aliases must be different.`);let[i,o]=await Promise.all([u.getWalletChangeAddress({chainAlias:r,getWalletChangeAddressForChainAlias:s}),u.getWalletFromAddresses({chainAlias:r,getWalletAddressesForChainAlias:a,requiredAddress:d})]);return{baseFeeInNanoAvax:e.baseTxFee,unsignedTx:c.importTx({atomicUtxos:n,changeAddress:i,context:e,destinationChainAlias:r,fromAddresses:o,sourceChainAlias:f,toAddress:u.getImportToAddress(p,`X`)})}}}}exports.transferAssetFactory=d;
2
2
  //# sourceMappingURL=transfer-asset.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"transfer-asset.cjs","names":["ServiceType","SdkError","ErrorReason","ErrorCode","getEnvironmentIsTestnet","getChainAlias","getExportFromAddressEvm","assertXpAddress","getExportToAddress","getImportToAddress","TransferSignatureReason","tryOrThrow","pollPrimaryNetworkTxStatus","sourcePendingTransferFromQuote","WEI_PER_NANO_AVAX_BIGINT","InvalidParamsError","getEvmClientForChain","Environment","AVALANCHE_FUJI_CHAIN","AVALANCHE_MAINNET_CHAIN","getCChainBaseFeeInNanoAvax","exportTx","getWalletChangeAddress","getFeeState","getWalletFromAddresses","importTx"],"sources":["../../../../src/transfer-service/avalanche-cct/_handlers/transfer-asset.ts"],"sourcesContent":["import type { Context, Utxo } from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n ServiceType,\n TransferSignatureReason,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../errors';\nimport { sourcePendingTransferFromQuote } from '../../_transfer-utilities';\nimport { getEvmClientForChain } from '../../_utils';\nimport type { AvalancheSendTxFunction, TransferService } from '../../../types/service';\nimport type { FailedTransfer, TargetPendingTransfer, TransferBase } from '../../../types/transfer';\nimport { getFeeState } from '../_utils/p-chain';\nimport { pollPrimaryNetworkTxStatus } from '../_utils/polling';\nimport { exportTx, importTx } from '../_utils/transactions';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n XpAddress,\n} from '../types';\nimport { getChainAlias, getEnvironmentIsTestnet, tryOrThrow } from '../_utils';\nimport { getCChainBaseFeeInNanoAvax } from '../_utils/fees';\nimport { WEI_PER_NANO_AVAX_BIGINT } from '../constants';\nimport {\n assertXpAddress,\n getExportFromAddressEvm,\n getExportToAddress,\n getImportToAddress,\n getWalletChangeAddress,\n getWalletFromAddresses,\n} from '../_utils/addresses';\n\ntype BuiltTx = {\n baseFeeInNanoAvax: bigint;\n unsignedTx: Parameters<AvalancheSendTxFunction>[0]['unsignedTx'];\n};\n\nexport interface TransferAssetFactoryOptions {\n ajsContext: Context.Context;\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport function transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: TransferAssetFactoryOptions): TransferService['transferAsset'] {\n return async ({ onStepChange, quote }) => {\n if (quote.serviceType !== ServiceType.AVALANCHE_CCT) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const isTestnet = getEnvironmentIsTestnet(environment);\n const sourceChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.sourceChain.chainId, isTestnet);\n const destinationChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.targetChain.chainId, isTestnet);\n const exportFromAddressEvm = getExportFromAddressEvm(quote.fromAddress, sourceChainAlias);\n const exportRequiredFromAddress = sourceChainAlias === 'C' ? undefined : assertXpAddress(quote.fromAddress);\n const exportToAddress = await getExportToAddress({\n destinationChainAlias,\n getCoreEthAddress,\n quoteToAddress: quote.toAddress,\n });\n const importToAddress = getImportToAddress(quote.toAddress, destinationChainAlias);\n const importRequiredFromAddress =\n destinationChainAlias === 'C' ? exportToAddress : assertXpAddress(quote.toAddress);\n\n const hasExport = quote.amountIn > 0n;\n const requiredSignatures = hasExport ? 2 : 1;\n const startedAtMs = Date.now();\n const transferBase = getTransferBase(quote, environment);\n\n let exportTxId: string | undefined;\n\n if (hasExport) {\n onStepChange?.({\n currentSignature: 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainExport,\n quote,\n requiredSignatures,\n });\n\n const builtExportTx = await tryOrThrow(\n () =>\n buildExportTx({\n ajsContext,\n environment,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn: quote.amountIn,\n sourceChainAlias,\n destinationChainAlias,\n fromAddress: exportFromAddressEvm,\n requiredFromAddress: exportRequiredFromAddress,\n toAddress: exportToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche export transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n exportTxId = await tryOrThrow(\n () =>\n avalancheSendTx({\n baseFeeInNanoAvax: builtExportTx.baseFeeInNanoAvax,\n chainAlias: sourceChainAlias,\n txType: 'export',\n unsignedTx: builtExportTx.unsignedTx,\n }),\n (error) =>\n new SdkError('Failed to sign/send Avalanche export transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n let didExportSucceed: boolean;\n try {\n didExportSucceed = await pollPrimaryNetworkTxStatus({\n chainAlias: sourceChainAlias,\n environment,\n txId: exportTxId,\n });\n } catch {\n return sourcePendingTransferFromQuote(quote, {\n environment,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId,\n });\n }\n\n if (!didExportSucceed) {\n return buildFailedTransfer({\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Export transaction was not accepted by Avalanche.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n }\n\n const atomicUtxos = await tryOrThrow(\n async () => (await getAtomicUtxos(destinationChainAlias, sourceChainAlias)).getUTXOs(),\n (error) => new SdkError('Failed to fetch Avalanche atomic UTXOs.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n if (atomicUtxos.length === 0) {\n return buildFailedTransfer({\n errorCode: ErrorCode.INVALID_PARAMS,\n errorReason: 'No atomic UTXOs available to import for this route.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n\n onStepChange?.({\n currentSignature: hasExport ? 2 : 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainImport,\n quote,\n requiredSignatures,\n });\n\n const builtImportTx = await tryOrThrow(\n () =>\n buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n sourceChainAlias,\n requiredFromAddress: importRequiredFromAddress,\n toAddress: importToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche import transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n const importTxId = await tryOrThrow(\n () =>\n avalancheSendTx({\n baseFeeInNanoAvax: builtImportTx.baseFeeInNanoAvax,\n chainAlias: destinationChainAlias,\n txType: 'import',\n unsignedTx: builtImportTx.unsignedTx,\n }),\n (error) =>\n new SdkError('Failed to sign/send Avalanche import transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n return {\n ...transferBase,\n source: {\n confirmationCount: exportTxId ? 1 : 0,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId ?? importTxId,\n },\n status: 'target-pending',\n target: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: Date.now(),\n txHash: importTxId,\n },\n } satisfies TargetPendingTransfer;\n };\n}\n\nfunction getTransferBase(\n quote: Parameters<TransferService['transferAsset']>[0]['quote'],\n environment: Environment,\n): Omit<TransferBase, 'status'> {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment,\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: quote.serviceType,\n };\n}\n\nfunction buildFailedTransfer({\n errorCode,\n errorReason,\n sourceStartedAtMs,\n sourceTxHash,\n transferBase,\n}: {\n errorCode: ErrorCode;\n errorReason: string;\n sourceStartedAtMs: number;\n sourceTxHash?: string;\n transferBase: Omit<TransferBase, 'status'>;\n}): FailedTransfer {\n return {\n ...transferBase,\n errorCode,\n errorReason,\n failedAtMs: Date.now(),\n ...(sourceTxHash\n ? {\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: sourceStartedAtMs,\n txHash: sourceTxHash,\n },\n }\n : {}),\n status: 'failed',\n };\n}\n\nfunction getExportAmountInNanoAvax(sourceChainAlias: AvalancheBlockchainAlias, quoteAmountIn: bigint): bigint {\n return sourceChainAlias === 'C' ? quoteAmountIn / WEI_PER_NANO_AVAX_BIGINT : quoteAmountIn;\n}\n\nasync function buildExportTx({\n ajsContext,\n destinationChainAlias,\n environment,\n fromAddress,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n fromAddress: EvmAddress | null;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n quoteAmountIn: bigint;\n requiredFromAddress?: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: XpAddress;\n}): Promise<BuiltTx> {\n const amountInNanoAvax = getExportAmountInNanoAvax(sourceChainAlias, quoteAmountIn);\n\n switch (sourceChainAlias) {\n case 'C': {\n if (destinationChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n if (!fromAddress) {\n throw new InvalidParamsError('fromAddress must be an EVM address when exporting from C-Chain.');\n }\n\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const [nonce, baseFeeInNanoAvax] = await Promise.all([\n cChainClient.getTransactionCount({\n address: fromAddress,\n }),\n getCChainBaseFeeInNanoAvax(environment),\n ]);\n\n return {\n baseFeeInNanoAvax,\n unsignedTx: exportTx({\n amountInNanoAvax,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddress,\n nonce: BigInt(nonce),\n sourceChainAlias,\n toAddress,\n }),\n };\n }\n\n case 'P': {\n if (destinationChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, feeState, fromAddresses, pUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('P'),\n ]);\n\n return {\n baseFeeInNanoAvax: feeState.price,\n unsignedTx: exportTx({\n amountInNanoAvax,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: pUtxoSet.getUTXOs(),\n }),\n };\n }\n\n case 'X': {\n if (destinationChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses, xUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('X'),\n ]);\n\n return {\n baseFeeInNanoAvax: ajsContext.baseTxFee,\n unsignedTx: exportTx({\n amountInNanoAvax,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: xUtxoSet.getUTXOs(),\n }),\n };\n }\n }\n}\n\nasync function buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n atomicUtxos: Utxo[];\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n requiredFromAddress: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: string;\n}): Promise<BuiltTx> {\n switch (destinationChainAlias) {\n case 'C': {\n if (sourceChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [baseFeeInNanoAvax, fromAddresses] = await Promise.all([\n getCChainBaseFeeInNanoAvax(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax,\n unsignedTx: importTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'C'),\n }),\n };\n }\n\n case 'P': {\n if (sourceChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [feeState, fromAddresses] = await Promise.all([\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax: feeState.price,\n unsignedTx: importTx({\n atomicUtxos,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'P'),\n }),\n };\n }\n\n case 'X': {\n if (sourceChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: destinationChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax: ajsContext.baseTxFee,\n unsignedTx: importTx({\n atomicUtxos,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'X'),\n }),\n };\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"transfer-asset.cjs","names":["ServiceType","SdkError","ErrorReason","ErrorCode","getEnvironmentIsTestnet","getChainAlias","getExportFromAddressEvm","assertXpAddress","getExportToAddress","getImportToAddress","TransferSignatureReason","tryOrThrow","pollPrimaryNetworkTxStatus","sourcePendingTransferFromQuote","WEI_PER_NANO_AVAX_BIGINT","InvalidParamsError","getEvmClientForChain","Environment","AVALANCHE_FUJI_CHAIN","AVALANCHE_MAINNET_CHAIN","getCChainBaseFeeInNanoAvax","exportTx","getWalletChangeAddress","getFeeState","getWalletFromAddresses","importTx"],"sources":["../../../../src/transfer-service/avalanche-cct/_handlers/transfer-asset.ts"],"sourcesContent":["import type { Context, Utxo } from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n ServiceType,\n TransferSignatureReason,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../errors';\nimport { sourcePendingTransferFromQuote } from '../../_transfer-utilities';\nimport { getEvmClientForChain } from '../../_utils';\nimport type { AvalancheSendTxFunction, TransferService } from '../../../types/service';\nimport type { FailedTransfer, TargetPendingTransfer, TransferBase, TransferStepDetails } from '../../../types/transfer';\nimport { getFeeState } from '../_utils/p-chain';\nimport { pollPrimaryNetworkTxStatus } from '../_utils/polling';\nimport { exportTx, importTx } from '../_utils/transactions';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n XpAddress,\n} from '../types';\nimport { getChainAlias, getEnvironmentIsTestnet, tryOrThrow } from '../_utils';\nimport { getCChainBaseFeeInNanoAvax } from '../_utils/fees';\nimport { WEI_PER_NANO_AVAX_BIGINT } from '../constants';\nimport {\n assertXpAddress,\n getExportFromAddressEvm,\n getExportToAddress,\n getImportToAddress,\n getWalletChangeAddress,\n getWalletFromAddresses,\n} from '../_utils/addresses';\n\ntype BuiltTx = {\n baseFeeInNanoAvax: bigint;\n unsignedTx: Parameters<AvalancheSendTxFunction>[0]['unsignedTx'];\n};\n\nexport interface TransferAssetFactoryOptions {\n ajsContext: Context.Context;\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport function transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: TransferAssetFactoryOptions): TransferService['transferAsset'] {\n return async ({ onStepChange, quote }) => {\n if (quote.serviceType !== ServiceType.AVALANCHE_CCT) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const isTestnet = getEnvironmentIsTestnet(environment);\n const sourceChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.sourceChain.chainId, isTestnet);\n const destinationChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.targetChain.chainId, isTestnet);\n const exportFromAddressEvm = getExportFromAddressEvm(quote.fromAddress, sourceChainAlias);\n const exportRequiredFromAddress = sourceChainAlias === 'C' ? undefined : assertXpAddress(quote.fromAddress);\n const exportToAddress = await getExportToAddress({\n destinationChainAlias,\n getCoreEthAddress,\n quoteToAddress: quote.toAddress,\n });\n const importToAddress = getImportToAddress(quote.toAddress, destinationChainAlias);\n const importRequiredFromAddress =\n destinationChainAlias === 'C' ? exportToAddress : assertXpAddress(quote.toAddress);\n\n const hasExport = quote.amountIn > 0n;\n const requiredSignatures = hasExport ? 2 : 1;\n const startedAtMs = Date.now();\n const transferBase = getTransferBase(quote, environment);\n\n let exportTxId: string | undefined;\n\n if (hasExport) {\n const exportStep: TransferStepDetails = {\n currentSignature: 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainExport,\n quote,\n requiredSignatures,\n };\n\n onStepChange?.(exportStep);\n\n const builtExportTx = await tryOrThrow(\n () =>\n buildExportTx({\n ajsContext,\n environment,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn: quote.amountIn,\n sourceChainAlias,\n destinationChainAlias,\n fromAddress: exportFromAddressEvm,\n requiredFromAddress: exportRequiredFromAddress,\n toAddress: exportToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche export transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n exportTxId = await tryOrThrow(\n () =>\n avalancheSendTx(\n {\n baseFeeInNanoAvax: builtExportTx.baseFeeInNanoAvax,\n chainAlias: sourceChainAlias,\n txType: 'export',\n unsignedTx: builtExportTx.unsignedTx,\n },\n exportStep,\n ),\n (error) =>\n new SdkError('Failed to sign/send Avalanche export transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n let didExportSucceed: boolean;\n try {\n didExportSucceed = await pollPrimaryNetworkTxStatus({\n chainAlias: sourceChainAlias,\n environment,\n txId: exportTxId,\n });\n } catch {\n return sourcePendingTransferFromQuote(quote, {\n environment,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId,\n });\n }\n\n if (!didExportSucceed) {\n return buildFailedTransfer({\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Export transaction was not accepted by Avalanche.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n }\n\n const atomicUtxos = await tryOrThrow(\n async () => (await getAtomicUtxos(destinationChainAlias, sourceChainAlias)).getUTXOs(),\n (error) => new SdkError('Failed to fetch Avalanche atomic UTXOs.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n if (atomicUtxos.length === 0) {\n return buildFailedTransfer({\n errorCode: ErrorCode.INVALID_PARAMS,\n errorReason: 'No atomic UTXOs available to import for this route.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n\n const importStep: TransferStepDetails = {\n currentSignature: hasExport ? 2 : 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainImport,\n quote,\n requiredSignatures,\n };\n\n onStepChange?.(importStep);\n\n const builtImportTx = await tryOrThrow(\n () =>\n buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n sourceChainAlias,\n requiredFromAddress: importRequiredFromAddress,\n toAddress: importToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche import transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n const importTxId = await tryOrThrow(\n () =>\n avalancheSendTx(\n {\n baseFeeInNanoAvax: builtImportTx.baseFeeInNanoAvax,\n chainAlias: destinationChainAlias,\n txType: 'import',\n unsignedTx: builtImportTx.unsignedTx,\n },\n importStep,\n ),\n (error) =>\n new SdkError('Failed to sign/send Avalanche import transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n return {\n ...transferBase,\n source: {\n confirmationCount: exportTxId ? 1 : 0,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId ?? importTxId,\n },\n status: 'target-pending',\n target: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: Date.now(),\n txHash: importTxId,\n },\n } satisfies TargetPendingTransfer;\n };\n}\n\nfunction getTransferBase(\n quote: Parameters<TransferService['transferAsset']>[0]['quote'],\n environment: Environment,\n): Omit<TransferBase, 'status'> {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment,\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: quote.serviceType,\n };\n}\n\nfunction buildFailedTransfer({\n errorCode,\n errorReason,\n sourceStartedAtMs,\n sourceTxHash,\n transferBase,\n}: {\n errorCode: ErrorCode;\n errorReason: string;\n sourceStartedAtMs: number;\n sourceTxHash?: string;\n transferBase: Omit<TransferBase, 'status'>;\n}): FailedTransfer {\n return {\n ...transferBase,\n errorCode,\n errorReason,\n failedAtMs: Date.now(),\n ...(sourceTxHash\n ? {\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: sourceStartedAtMs,\n txHash: sourceTxHash,\n },\n }\n : {}),\n status: 'failed',\n };\n}\n\nfunction getExportAmountInNanoAvax(sourceChainAlias: AvalancheBlockchainAlias, quoteAmountIn: bigint): bigint {\n return sourceChainAlias === 'C' ? quoteAmountIn / WEI_PER_NANO_AVAX_BIGINT : quoteAmountIn;\n}\n\nasync function buildExportTx({\n ajsContext,\n destinationChainAlias,\n environment,\n fromAddress,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n fromAddress: EvmAddress | null;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n quoteAmountIn: bigint;\n requiredFromAddress?: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: XpAddress;\n}): Promise<BuiltTx> {\n const amountInNanoAvax = getExportAmountInNanoAvax(sourceChainAlias, quoteAmountIn);\n\n switch (sourceChainAlias) {\n case 'C': {\n if (destinationChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n if (!fromAddress) {\n throw new InvalidParamsError('fromAddress must be an EVM address when exporting from C-Chain.');\n }\n\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const [nonce, baseFeeInNanoAvax] = await Promise.all([\n cChainClient.getTransactionCount({\n address: fromAddress,\n }),\n getCChainBaseFeeInNanoAvax(environment),\n ]);\n\n return {\n baseFeeInNanoAvax,\n unsignedTx: exportTx({\n amountInNanoAvax,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddress,\n nonce: BigInt(nonce),\n sourceChainAlias,\n toAddress,\n }),\n };\n }\n\n case 'P': {\n if (destinationChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, feeState, fromAddresses, pUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('P'),\n ]);\n\n return {\n baseFeeInNanoAvax: feeState.price,\n unsignedTx: exportTx({\n amountInNanoAvax,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: pUtxoSet.getUTXOs(),\n }),\n };\n }\n\n case 'X': {\n if (destinationChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses, xUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('X'),\n ]);\n\n return {\n baseFeeInNanoAvax: ajsContext.baseTxFee,\n unsignedTx: exportTx({\n amountInNanoAvax,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: xUtxoSet.getUTXOs(),\n }),\n };\n }\n }\n}\n\nasync function buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n atomicUtxos: Utxo[];\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n requiredFromAddress: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: string;\n}): Promise<BuiltTx> {\n switch (destinationChainAlias) {\n case 'C': {\n if (sourceChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [baseFeeInNanoAvax, fromAddresses] = await Promise.all([\n getCChainBaseFeeInNanoAvax(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax,\n unsignedTx: importTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'C'),\n }),\n };\n }\n\n case 'P': {\n if (sourceChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [feeState, fromAddresses] = await Promise.all([\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax: feeState.price,\n unsignedTx: importTx({\n atomicUtxos,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'P'),\n }),\n };\n }\n\n case 'X': {\n if (sourceChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: destinationChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax: ajsContext.baseTxFee,\n unsignedTx: importTx({\n atomicUtxos,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'X'),\n }),\n };\n }\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{AVALANCHE_FUJI_CHAIN as e,AVALANCHE_MAINNET_CHAIN as t,Environment as n,ServiceType as r,TransferSignatureReason as i}from"../../../constants.js";import{ErrorCode as a,ErrorReason as o,InvalidParamsError as s,SdkError as c}from"../../../errors.js";import{getEvmClientForChain as l}from"../../_utils.js";import{WEI_PER_NANO_AVAX_BIGINT as u}from"../constants.js";import{getChainAlias as d,getEnvironmentIsTestnet as f,tryOrThrow as p}from"../_utils.js";import{sourcePendingTransferFromQuote as m}from"../../_transfer-utilities.js";import{getFeeState as h}from"../_utils/p-chain.js";import{pollPrimaryNetworkTxStatus as g}from"../_utils/polling.js";import{exportTx as _,importTx as v}from"../_utils/transactions.js";import{getCChainBaseFeeInNanoAvax as y}from"../_utils/fees.js";import{assertXpAddress as b,getExportFromAddressEvm as x,getExportToAddress as S,getImportToAddress as C,getWalletChangeAddress as w,getWalletFromAddresses as T}from"../_utils/addresses.js";function E({ajsContext:e,avalancheSendTx:t,environment:n,getCoreEthAddress:s,getAtomicUtxos:l,getUtxos:u,getWalletAddressesForChainAlias:h,getWalletChangeAddressForChainAlias:_}){return async({onStepChange:v,quote:y})=>{if(y.serviceType!==r.AVALANCHE_CCT)throw new c(o.INCORRECT_PROVIDER_PROVIDED,a.INVALID_PARAMS);let w=f(n),T=d(y.sourceChain.chainId,w),E=d(y.targetChain.chainId,w),k=x(y.fromAddress,T),M=T===`C`?void 0:b(y.fromAddress),N=await S({destinationChainAlias:E,getCoreEthAddress:s,quoteToAddress:y.toAddress}),P=C(y.toAddress,E),F=E===`C`?N:b(y.toAddress),I=y.amountIn>0n,L=I?2:1,R=Date.now(),z=D(y,n),B;if(I){v?.({currentSignature:1,currentSignatureReason:i.AvalancheCrossChainExport,quote:y,requiredSignatures:L});let r=await p(()=>A({ajsContext:e,environment:n,getUtxos:u,getWalletAddressesForChainAlias:h,getWalletChangeAddressForChainAlias:_,quoteAmountIn:y.amountIn,sourceChainAlias:T,destinationChainAlias:E,fromAddress:k,requiredFromAddress:M,toAddress:N}),e=>new c(`Failed to build Avalanche export transaction.`,a.UNKNOWN,{cause:e}));B=await p(()=>t({baseFeeInNanoAvax:r.baseFeeInNanoAvax,chainAlias:T,txType:`export`,unsignedTx:r.unsignedTx}),e=>new c(`Failed to sign/send Avalanche export transaction.`,a.SIGNING_FAILED,{cause:e}));let o;try{o=await g({chainAlias:T,environment:n,txId:B})}catch{return m(y,{environment:n,requiredConfirmationCount:1,startedAtMs:R,txHash:B})}if(!o)return O({errorCode:a.TRANSACTION_REVERTED,errorReason:`Export transaction was not accepted by Avalanche.`,sourceStartedAtMs:R,sourceTxHash:B,transferBase:z})}let V=await p(async()=>(await l(E,T)).getUTXOs(),e=>new c(`Failed to fetch Avalanche atomic UTXOs.`,a.UNKNOWN,{cause:e}));if(V.length===0)return O({errorCode:a.INVALID_PARAMS,errorReason:`No atomic UTXOs available to import for this route.`,sourceStartedAtMs:R,sourceTxHash:B,transferBase:z});v?.({currentSignature:I?2:1,currentSignatureReason:i.AvalancheCrossChainImport,quote:y,requiredSignatures:L});let H=await p(()=>j({ajsContext:e,atomicUtxos:V,destinationChainAlias:E,environment:n,getWalletAddressesForChainAlias:h,getWalletChangeAddressForChainAlias:_,sourceChainAlias:T,requiredFromAddress:F,toAddress:P}),e=>new c(`Failed to build Avalanche import transaction.`,a.UNKNOWN,{cause:e})),U=await p(()=>t({baseFeeInNanoAvax:H.baseFeeInNanoAvax,chainAlias:E,txType:`import`,unsignedTx:H.unsignedTx}),e=>new c(`Failed to sign/send Avalanche import transaction.`,a.SIGNING_FAILED,{cause:e}));return{...z,source:{confirmationCount:B?1:0,requiredConfirmationCount:1,startedAtMs:R,txHash:B??U},status:`target-pending`,target:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:Date.now(),txHash:U}}}}function D(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t,fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}function O({errorCode:e,errorReason:t,sourceStartedAtMs:n,sourceTxHash:r,transferBase:i}){return{...i,errorCode:e,errorReason:t,failedAtMs:Date.now(),...r?{source:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:n,txHash:r}}:{},status:`failed`}}function k(e,t){return e===`C`?t/u:t}async function A({ajsContext:r,destinationChainAlias:i,environment:a,fromAddress:o,getUtxos:c,getWalletAddressesForChainAlias:u,getWalletChangeAddressForChainAlias:d,quoteAmountIn:f,requiredFromAddress:p,sourceChainAlias:m,toAddress:g}){let v=k(m,f);switch(m){case`C`:{if(i===`C`)throw new s(`Source and destination chain aliases must be different.`);if(!o)throw new s(`fromAddress must be an EVM address when exporting from C-Chain.`);let c=l({chain:a===n.TEST?e:t}),[u,d]=await Promise.all([c.getTransactionCount({address:o}),y(a)]);return{baseFeeInNanoAvax:d,unsignedTx:_({amountInNanoAvax:v,baseFeeInNanoAvax:d,context:r,destinationChainAlias:i,fromAddress:o,nonce:BigInt(u),sourceChainAlias:m,toAddress:g})}}case`P`:{if(i===`P`)throw new s(`Source and destination chain aliases must be different.`);let[e,t,n,o]=await Promise.all([w({chainAlias:m,getWalletChangeAddressForChainAlias:d}),h(a),T({chainAlias:m,getWalletAddressesForChainAlias:u,requiredAddress:p}),c(`P`)]);return{baseFeeInNanoAvax:t.price,unsignedTx:_({amountInNanoAvax:v,changeAddress:e,context:r,destinationChainAlias:i,feeState:t,fromAddresses:n,sourceChainAlias:m,toAddress:g,utxos:o.getUTXOs()})}}case`X`:{if(i===`X`)throw new s(`Source and destination chain aliases must be different.`);let[e,t,n]=await Promise.all([w({chainAlias:m,getWalletChangeAddressForChainAlias:d}),T({chainAlias:m,getWalletAddressesForChainAlias:u,requiredAddress:p}),c(`X`)]);return{baseFeeInNanoAvax:r.baseTxFee,unsignedTx:_({amountInNanoAvax:v,changeAddress:e,context:r,destinationChainAlias:i,fromAddresses:t,sourceChainAlias:m,toAddress:g,utxos:n.getUTXOs()})}}}}async function j({ajsContext:e,atomicUtxos:t,destinationChainAlias:n,environment:r,getWalletAddressesForChainAlias:i,getWalletChangeAddressForChainAlias:a,requiredFromAddress:o,sourceChainAlias:c,toAddress:l}){switch(n){case`C`:{if(c===`C`)throw new s(`Source and destination chain aliases must be different.`);let[a,u]=await Promise.all([y(r),T({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return{baseFeeInNanoAvax:a,unsignedTx:v({atomicUtxos:t,baseFeeInNanoAvax:a,context:e,destinationChainAlias:n,fromAddresses:u,sourceChainAlias:c,toAddress:C(l,`C`)})}}case`P`:{if(c===`P`)throw new s(`Source and destination chain aliases must be different.`);let[a,u]=await Promise.all([h(r),T({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return{baseFeeInNanoAvax:a.price,unsignedTx:v({atomicUtxos:t,context:e,destinationChainAlias:n,feeState:a,fromAddresses:u,sourceChainAlias:c,toAddress:C(l,`P`)})}}case`X`:{if(c===`X`)throw new s(`Source and destination chain aliases must be different.`);let[r,u]=await Promise.all([w({chainAlias:n,getWalletChangeAddressForChainAlias:a}),T({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return{baseFeeInNanoAvax:e.baseTxFee,unsignedTx:v({atomicUtxos:t,changeAddress:r,context:e,destinationChainAlias:n,fromAddresses:u,sourceChainAlias:c,toAddress:C(l,`X`)})}}}}export{E as transferAssetFactory};
1
+ import{AVALANCHE_FUJI_CHAIN as e,AVALANCHE_MAINNET_CHAIN as t,Environment as n,ServiceType as r,TransferSignatureReason as i}from"../../../constants.js";import{ErrorCode as a,ErrorReason as o,InvalidParamsError as s,SdkError as c}from"../../../errors.js";import{getEvmClientForChain as l}from"../../_utils.js";import{WEI_PER_NANO_AVAX_BIGINT as u}from"../constants.js";import{getChainAlias as d,getEnvironmentIsTestnet as f,tryOrThrow as p}from"../_utils.js";import{sourcePendingTransferFromQuote as m}from"../../_transfer-utilities.js";import{getFeeState as h}from"../_utils/p-chain.js";import{pollPrimaryNetworkTxStatus as g}from"../_utils/polling.js";import{exportTx as _,importTx as v}from"../_utils/transactions.js";import{getCChainBaseFeeInNanoAvax as y}from"../_utils/fees.js";import{assertXpAddress as b,getExportFromAddressEvm as x,getExportToAddress as S,getImportToAddress as C,getWalletChangeAddress as w,getWalletFromAddresses as T}from"../_utils/addresses.js";function E({ajsContext:e,avalancheSendTx:t,environment:n,getCoreEthAddress:s,getAtomicUtxos:l,getUtxos:u,getWalletAddressesForChainAlias:h,getWalletChangeAddressForChainAlias:_}){return async({onStepChange:v,quote:y})=>{if(y.serviceType!==r.AVALANCHE_CCT)throw new c(o.INCORRECT_PROVIDER_PROVIDED,a.INVALID_PARAMS);let w=f(n),T=d(y.sourceChain.chainId,w),E=d(y.targetChain.chainId,w),k=x(y.fromAddress,T),M=T===`C`?void 0:b(y.fromAddress),N=await S({destinationChainAlias:E,getCoreEthAddress:s,quoteToAddress:y.toAddress}),P=C(y.toAddress,E),F=E===`C`?N:b(y.toAddress),I=y.amountIn>0n,L=I?2:1,R=Date.now(),z=D(y,n),B;if(I){let r={currentSignature:1,currentSignatureReason:i.AvalancheCrossChainExport,quote:y,requiredSignatures:L};v?.(r);let o=await p(()=>A({ajsContext:e,environment:n,getUtxos:u,getWalletAddressesForChainAlias:h,getWalletChangeAddressForChainAlias:_,quoteAmountIn:y.amountIn,sourceChainAlias:T,destinationChainAlias:E,fromAddress:k,requiredFromAddress:M,toAddress:N}),e=>new c(`Failed to build Avalanche export transaction.`,a.UNKNOWN,{cause:e}));B=await p(()=>t({baseFeeInNanoAvax:o.baseFeeInNanoAvax,chainAlias:T,txType:`export`,unsignedTx:o.unsignedTx},r),e=>new c(`Failed to sign/send Avalanche export transaction.`,a.SIGNING_FAILED,{cause:e}));let s;try{s=await g({chainAlias:T,environment:n,txId:B})}catch{return m(y,{environment:n,requiredConfirmationCount:1,startedAtMs:R,txHash:B})}if(!s)return O({errorCode:a.TRANSACTION_REVERTED,errorReason:`Export transaction was not accepted by Avalanche.`,sourceStartedAtMs:R,sourceTxHash:B,transferBase:z})}let V=await p(async()=>(await l(E,T)).getUTXOs(),e=>new c(`Failed to fetch Avalanche atomic UTXOs.`,a.UNKNOWN,{cause:e}));if(V.length===0)return O({errorCode:a.INVALID_PARAMS,errorReason:`No atomic UTXOs available to import for this route.`,sourceStartedAtMs:R,sourceTxHash:B,transferBase:z});let H={currentSignature:I?2:1,currentSignatureReason:i.AvalancheCrossChainImport,quote:y,requiredSignatures:L};v?.(H);let U=await p(()=>j({ajsContext:e,atomicUtxos:V,destinationChainAlias:E,environment:n,getWalletAddressesForChainAlias:h,getWalletChangeAddressForChainAlias:_,sourceChainAlias:T,requiredFromAddress:F,toAddress:P}),e=>new c(`Failed to build Avalanche import transaction.`,a.UNKNOWN,{cause:e})),W=await p(()=>t({baseFeeInNanoAvax:U.baseFeeInNanoAvax,chainAlias:E,txType:`import`,unsignedTx:U.unsignedTx},H),e=>new c(`Failed to sign/send Avalanche import transaction.`,a.SIGNING_FAILED,{cause:e}));return{...z,source:{confirmationCount:B?1:0,requiredConfirmationCount:1,startedAtMs:R,txHash:B??W},status:`target-pending`,target:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:Date.now(),txHash:W}}}}function D(e,t){return{amountIn:e.amountIn,amountOut:e.amountOut,environment:t,fees:e.fees,fromAddress:e.fromAddress,id:e.id,partnerFeeBps:e.partnerFeeBps,sourceAsset:e.assetIn,sourceChain:e.sourceChain,targetAsset:e.assetOut,targetChain:e.targetChain,toAddress:e.toAddress,type:e.serviceType}}function O({errorCode:e,errorReason:t,sourceStartedAtMs:n,sourceTxHash:r,transferBase:i}){return{...i,errorCode:e,errorReason:t,failedAtMs:Date.now(),...r?{source:{confirmationCount:0,requiredConfirmationCount:1,startedAtMs:n,txHash:r}}:{},status:`failed`}}function k(e,t){return e===`C`?t/u:t}async function A({ajsContext:r,destinationChainAlias:i,environment:a,fromAddress:o,getUtxos:c,getWalletAddressesForChainAlias:u,getWalletChangeAddressForChainAlias:d,quoteAmountIn:f,requiredFromAddress:p,sourceChainAlias:m,toAddress:g}){let v=k(m,f);switch(m){case`C`:{if(i===`C`)throw new s(`Source and destination chain aliases must be different.`);if(!o)throw new s(`fromAddress must be an EVM address when exporting from C-Chain.`);let c=l({chain:a===n.TEST?e:t}),[u,d]=await Promise.all([c.getTransactionCount({address:o}),y(a)]);return{baseFeeInNanoAvax:d,unsignedTx:_({amountInNanoAvax:v,baseFeeInNanoAvax:d,context:r,destinationChainAlias:i,fromAddress:o,nonce:BigInt(u),sourceChainAlias:m,toAddress:g})}}case`P`:{if(i===`P`)throw new s(`Source and destination chain aliases must be different.`);let[e,t,n,o]=await Promise.all([w({chainAlias:m,getWalletChangeAddressForChainAlias:d}),h(a),T({chainAlias:m,getWalletAddressesForChainAlias:u,requiredAddress:p}),c(`P`)]);return{baseFeeInNanoAvax:t.price,unsignedTx:_({amountInNanoAvax:v,changeAddress:e,context:r,destinationChainAlias:i,feeState:t,fromAddresses:n,sourceChainAlias:m,toAddress:g,utxos:o.getUTXOs()})}}case`X`:{if(i===`X`)throw new s(`Source and destination chain aliases must be different.`);let[e,t,n]=await Promise.all([w({chainAlias:m,getWalletChangeAddressForChainAlias:d}),T({chainAlias:m,getWalletAddressesForChainAlias:u,requiredAddress:p}),c(`X`)]);return{baseFeeInNanoAvax:r.baseTxFee,unsignedTx:_({amountInNanoAvax:v,changeAddress:e,context:r,destinationChainAlias:i,fromAddresses:t,sourceChainAlias:m,toAddress:g,utxos:n.getUTXOs()})}}}}async function j({ajsContext:e,atomicUtxos:t,destinationChainAlias:n,environment:r,getWalletAddressesForChainAlias:i,getWalletChangeAddressForChainAlias:a,requiredFromAddress:o,sourceChainAlias:c,toAddress:l}){switch(n){case`C`:{if(c===`C`)throw new s(`Source and destination chain aliases must be different.`);let[a,u]=await Promise.all([y(r),T({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return{baseFeeInNanoAvax:a,unsignedTx:v({atomicUtxos:t,baseFeeInNanoAvax:a,context:e,destinationChainAlias:n,fromAddresses:u,sourceChainAlias:c,toAddress:C(l,`C`)})}}case`P`:{if(c===`P`)throw new s(`Source and destination chain aliases must be different.`);let[a,u]=await Promise.all([h(r),T({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return{baseFeeInNanoAvax:a.price,unsignedTx:v({atomicUtxos:t,context:e,destinationChainAlias:n,feeState:a,fromAddresses:u,sourceChainAlias:c,toAddress:C(l,`P`)})}}case`X`:{if(c===`X`)throw new s(`Source and destination chain aliases must be different.`);let[r,u]=await Promise.all([w({chainAlias:n,getWalletChangeAddressForChainAlias:a}),T({chainAlias:n,getWalletAddressesForChainAlias:i,requiredAddress:o})]);return{baseFeeInNanoAvax:e.baseTxFee,unsignedTx:v({atomicUtxos:t,changeAddress:r,context:e,destinationChainAlias:n,fromAddresses:u,sourceChainAlias:c,toAddress:C(l,`X`)})}}}}export{E as transferAssetFactory};
2
2
  //# sourceMappingURL=transfer-asset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transfer-asset.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_handlers/transfer-asset.ts"],"sourcesContent":["import type { Context, Utxo } from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n ServiceType,\n TransferSignatureReason,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../errors';\nimport { sourcePendingTransferFromQuote } from '../../_transfer-utilities';\nimport { getEvmClientForChain } from '../../_utils';\nimport type { AvalancheSendTxFunction, TransferService } from '../../../types/service';\nimport type { FailedTransfer, TargetPendingTransfer, TransferBase } from '../../../types/transfer';\nimport { getFeeState } from '../_utils/p-chain';\nimport { pollPrimaryNetworkTxStatus } from '../_utils/polling';\nimport { exportTx, importTx } from '../_utils/transactions';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n XpAddress,\n} from '../types';\nimport { getChainAlias, getEnvironmentIsTestnet, tryOrThrow } from '../_utils';\nimport { getCChainBaseFeeInNanoAvax } from '../_utils/fees';\nimport { WEI_PER_NANO_AVAX_BIGINT } from '../constants';\nimport {\n assertXpAddress,\n getExportFromAddressEvm,\n getExportToAddress,\n getImportToAddress,\n getWalletChangeAddress,\n getWalletFromAddresses,\n} from '../_utils/addresses';\n\ntype BuiltTx = {\n baseFeeInNanoAvax: bigint;\n unsignedTx: Parameters<AvalancheSendTxFunction>[0]['unsignedTx'];\n};\n\nexport interface TransferAssetFactoryOptions {\n ajsContext: Context.Context;\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport function transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: TransferAssetFactoryOptions): TransferService['transferAsset'] {\n return async ({ onStepChange, quote }) => {\n if (quote.serviceType !== ServiceType.AVALANCHE_CCT) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const isTestnet = getEnvironmentIsTestnet(environment);\n const sourceChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.sourceChain.chainId, isTestnet);\n const destinationChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.targetChain.chainId, isTestnet);\n const exportFromAddressEvm = getExportFromAddressEvm(quote.fromAddress, sourceChainAlias);\n const exportRequiredFromAddress = sourceChainAlias === 'C' ? undefined : assertXpAddress(quote.fromAddress);\n const exportToAddress = await getExportToAddress({\n destinationChainAlias,\n getCoreEthAddress,\n quoteToAddress: quote.toAddress,\n });\n const importToAddress = getImportToAddress(quote.toAddress, destinationChainAlias);\n const importRequiredFromAddress =\n destinationChainAlias === 'C' ? exportToAddress : assertXpAddress(quote.toAddress);\n\n const hasExport = quote.amountIn > 0n;\n const requiredSignatures = hasExport ? 2 : 1;\n const startedAtMs = Date.now();\n const transferBase = getTransferBase(quote, environment);\n\n let exportTxId: string | undefined;\n\n if (hasExport) {\n onStepChange?.({\n currentSignature: 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainExport,\n quote,\n requiredSignatures,\n });\n\n const builtExportTx = await tryOrThrow(\n () =>\n buildExportTx({\n ajsContext,\n environment,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn: quote.amountIn,\n sourceChainAlias,\n destinationChainAlias,\n fromAddress: exportFromAddressEvm,\n requiredFromAddress: exportRequiredFromAddress,\n toAddress: exportToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche export transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n exportTxId = await tryOrThrow(\n () =>\n avalancheSendTx({\n baseFeeInNanoAvax: builtExportTx.baseFeeInNanoAvax,\n chainAlias: sourceChainAlias,\n txType: 'export',\n unsignedTx: builtExportTx.unsignedTx,\n }),\n (error) =>\n new SdkError('Failed to sign/send Avalanche export transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n let didExportSucceed: boolean;\n try {\n didExportSucceed = await pollPrimaryNetworkTxStatus({\n chainAlias: sourceChainAlias,\n environment,\n txId: exportTxId,\n });\n } catch {\n return sourcePendingTransferFromQuote(quote, {\n environment,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId,\n });\n }\n\n if (!didExportSucceed) {\n return buildFailedTransfer({\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Export transaction was not accepted by Avalanche.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n }\n\n const atomicUtxos = await tryOrThrow(\n async () => (await getAtomicUtxos(destinationChainAlias, sourceChainAlias)).getUTXOs(),\n (error) => new SdkError('Failed to fetch Avalanche atomic UTXOs.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n if (atomicUtxos.length === 0) {\n return buildFailedTransfer({\n errorCode: ErrorCode.INVALID_PARAMS,\n errorReason: 'No atomic UTXOs available to import for this route.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n\n onStepChange?.({\n currentSignature: hasExport ? 2 : 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainImport,\n quote,\n requiredSignatures,\n });\n\n const builtImportTx = await tryOrThrow(\n () =>\n buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n sourceChainAlias,\n requiredFromAddress: importRequiredFromAddress,\n toAddress: importToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche import transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n const importTxId = await tryOrThrow(\n () =>\n avalancheSendTx({\n baseFeeInNanoAvax: builtImportTx.baseFeeInNanoAvax,\n chainAlias: destinationChainAlias,\n txType: 'import',\n unsignedTx: builtImportTx.unsignedTx,\n }),\n (error) =>\n new SdkError('Failed to sign/send Avalanche import transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n return {\n ...transferBase,\n source: {\n confirmationCount: exportTxId ? 1 : 0,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId ?? importTxId,\n },\n status: 'target-pending',\n target: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: Date.now(),\n txHash: importTxId,\n },\n } satisfies TargetPendingTransfer;\n };\n}\n\nfunction getTransferBase(\n quote: Parameters<TransferService['transferAsset']>[0]['quote'],\n environment: Environment,\n): Omit<TransferBase, 'status'> {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment,\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: quote.serviceType,\n };\n}\n\nfunction buildFailedTransfer({\n errorCode,\n errorReason,\n sourceStartedAtMs,\n sourceTxHash,\n transferBase,\n}: {\n errorCode: ErrorCode;\n errorReason: string;\n sourceStartedAtMs: number;\n sourceTxHash?: string;\n transferBase: Omit<TransferBase, 'status'>;\n}): FailedTransfer {\n return {\n ...transferBase,\n errorCode,\n errorReason,\n failedAtMs: Date.now(),\n ...(sourceTxHash\n ? {\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: sourceStartedAtMs,\n txHash: sourceTxHash,\n },\n }\n : {}),\n status: 'failed',\n };\n}\n\nfunction getExportAmountInNanoAvax(sourceChainAlias: AvalancheBlockchainAlias, quoteAmountIn: bigint): bigint {\n return sourceChainAlias === 'C' ? quoteAmountIn / WEI_PER_NANO_AVAX_BIGINT : quoteAmountIn;\n}\n\nasync function buildExportTx({\n ajsContext,\n destinationChainAlias,\n environment,\n fromAddress,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n fromAddress: EvmAddress | null;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n quoteAmountIn: bigint;\n requiredFromAddress?: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: XpAddress;\n}): Promise<BuiltTx> {\n const amountInNanoAvax = getExportAmountInNanoAvax(sourceChainAlias, quoteAmountIn);\n\n switch (sourceChainAlias) {\n case 'C': {\n if (destinationChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n if (!fromAddress) {\n throw new InvalidParamsError('fromAddress must be an EVM address when exporting from C-Chain.');\n }\n\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const [nonce, baseFeeInNanoAvax] = await Promise.all([\n cChainClient.getTransactionCount({\n address: fromAddress,\n }),\n getCChainBaseFeeInNanoAvax(environment),\n ]);\n\n return {\n baseFeeInNanoAvax,\n unsignedTx: exportTx({\n amountInNanoAvax,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddress,\n nonce: BigInt(nonce),\n sourceChainAlias,\n toAddress,\n }),\n };\n }\n\n case 'P': {\n if (destinationChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, feeState, fromAddresses, pUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('P'),\n ]);\n\n return {\n baseFeeInNanoAvax: feeState.price,\n unsignedTx: exportTx({\n amountInNanoAvax,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: pUtxoSet.getUTXOs(),\n }),\n };\n }\n\n case 'X': {\n if (destinationChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses, xUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('X'),\n ]);\n\n return {\n baseFeeInNanoAvax: ajsContext.baseTxFee,\n unsignedTx: exportTx({\n amountInNanoAvax,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: xUtxoSet.getUTXOs(),\n }),\n };\n }\n }\n}\n\nasync function buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n atomicUtxos: Utxo[];\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n requiredFromAddress: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: string;\n}): Promise<BuiltTx> {\n switch (destinationChainAlias) {\n case 'C': {\n if (sourceChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [baseFeeInNanoAvax, fromAddresses] = await Promise.all([\n getCChainBaseFeeInNanoAvax(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax,\n unsignedTx: importTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'C'),\n }),\n };\n }\n\n case 'P': {\n if (sourceChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [feeState, fromAddresses] = await Promise.all([\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax: feeState.price,\n unsignedTx: importTx({\n atomicUtxos,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'P'),\n }),\n };\n }\n\n case 'X': {\n if (sourceChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: destinationChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax: ajsContext.baseTxFee,\n unsignedTx: importTx({\n atomicUtxos,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'X'),\n }),\n };\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"transfer-asset.js","names":[],"sources":["../../../../src/transfer-service/avalanche-cct/_handlers/transfer-asset.ts"],"sourcesContent":["import type { Context, Utxo } from '@avalabs/avalanchejs';\nimport type { Address as EvmAddress } from 'viem';\nimport {\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n Environment,\n ServiceType,\n TransferSignatureReason,\n type AvalancheBlockchainAlias,\n} from '../../../constants';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../errors';\nimport { sourcePendingTransferFromQuote } from '../../_transfer-utilities';\nimport { getEvmClientForChain } from '../../_utils';\nimport type { AvalancheSendTxFunction, TransferService } from '../../../types/service';\nimport type { FailedTransfer, TargetPendingTransfer, TransferBase, TransferStepDetails } from '../../../types/transfer';\nimport { getFeeState } from '../_utils/p-chain';\nimport { pollPrimaryNetworkTxStatus } from '../_utils/polling';\nimport { exportTx, importTx } from '../_utils/transactions';\nimport type {\n GetAtomicUtxosCallback,\n GetCoreEthAddressCallback,\n GetUtxosCallback,\n GetWalletAddressesForChainAliasCallback,\n GetWalletChangeAddressForChainAliasCallback,\n XpAddress,\n} from '../types';\nimport { getChainAlias, getEnvironmentIsTestnet, tryOrThrow } from '../_utils';\nimport { getCChainBaseFeeInNanoAvax } from '../_utils/fees';\nimport { WEI_PER_NANO_AVAX_BIGINT } from '../constants';\nimport {\n assertXpAddress,\n getExportFromAddressEvm,\n getExportToAddress,\n getImportToAddress,\n getWalletChangeAddress,\n getWalletFromAddresses,\n} from '../_utils/addresses';\n\ntype BuiltTx = {\n baseFeeInNanoAvax: bigint;\n unsignedTx: Parameters<AvalancheSendTxFunction>[0]['unsignedTx'];\n};\n\nexport interface TransferAssetFactoryOptions {\n ajsContext: Context.Context;\n avalancheSendTx: AvalancheSendTxFunction;\n environment: Environment;\n getCoreEthAddress: GetCoreEthAddressCallback;\n getAtomicUtxos: GetAtomicUtxosCallback;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n}\n\nexport function transferAssetFactory({\n ajsContext,\n avalancheSendTx,\n environment,\n getCoreEthAddress,\n getAtomicUtxos,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n}: TransferAssetFactoryOptions): TransferService['transferAsset'] {\n return async ({ onStepChange, quote }) => {\n if (quote.serviceType !== ServiceType.AVALANCHE_CCT) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const isTestnet = getEnvironmentIsTestnet(environment);\n const sourceChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.sourceChain.chainId, isTestnet);\n const destinationChainAlias: AvalancheBlockchainAlias = getChainAlias(quote.targetChain.chainId, isTestnet);\n const exportFromAddressEvm = getExportFromAddressEvm(quote.fromAddress, sourceChainAlias);\n const exportRequiredFromAddress = sourceChainAlias === 'C' ? undefined : assertXpAddress(quote.fromAddress);\n const exportToAddress = await getExportToAddress({\n destinationChainAlias,\n getCoreEthAddress,\n quoteToAddress: quote.toAddress,\n });\n const importToAddress = getImportToAddress(quote.toAddress, destinationChainAlias);\n const importRequiredFromAddress =\n destinationChainAlias === 'C' ? exportToAddress : assertXpAddress(quote.toAddress);\n\n const hasExport = quote.amountIn > 0n;\n const requiredSignatures = hasExport ? 2 : 1;\n const startedAtMs = Date.now();\n const transferBase = getTransferBase(quote, environment);\n\n let exportTxId: string | undefined;\n\n if (hasExport) {\n const exportStep: TransferStepDetails = {\n currentSignature: 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainExport,\n quote,\n requiredSignatures,\n };\n\n onStepChange?.(exportStep);\n\n const builtExportTx = await tryOrThrow(\n () =>\n buildExportTx({\n ajsContext,\n environment,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn: quote.amountIn,\n sourceChainAlias,\n destinationChainAlias,\n fromAddress: exportFromAddressEvm,\n requiredFromAddress: exportRequiredFromAddress,\n toAddress: exportToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche export transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n exportTxId = await tryOrThrow(\n () =>\n avalancheSendTx(\n {\n baseFeeInNanoAvax: builtExportTx.baseFeeInNanoAvax,\n chainAlias: sourceChainAlias,\n txType: 'export',\n unsignedTx: builtExportTx.unsignedTx,\n },\n exportStep,\n ),\n (error) =>\n new SdkError('Failed to sign/send Avalanche export transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n let didExportSucceed: boolean;\n try {\n didExportSucceed = await pollPrimaryNetworkTxStatus({\n chainAlias: sourceChainAlias,\n environment,\n txId: exportTxId,\n });\n } catch {\n return sourcePendingTransferFromQuote(quote, {\n environment,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId,\n });\n }\n\n if (!didExportSucceed) {\n return buildFailedTransfer({\n errorCode: ErrorCode.TRANSACTION_REVERTED,\n errorReason: 'Export transaction was not accepted by Avalanche.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n }\n\n const atomicUtxos = await tryOrThrow(\n async () => (await getAtomicUtxos(destinationChainAlias, sourceChainAlias)).getUTXOs(),\n (error) => new SdkError('Failed to fetch Avalanche atomic UTXOs.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n if (atomicUtxos.length === 0) {\n return buildFailedTransfer({\n errorCode: ErrorCode.INVALID_PARAMS,\n errorReason: 'No atomic UTXOs available to import for this route.',\n sourceStartedAtMs: startedAtMs,\n sourceTxHash: exportTxId,\n transferBase,\n });\n }\n\n const importStep: TransferStepDetails = {\n currentSignature: hasExport ? 2 : 1,\n currentSignatureReason: TransferSignatureReason.AvalancheCrossChainImport,\n quote,\n requiredSignatures,\n };\n\n onStepChange?.(importStep);\n\n const builtImportTx = await tryOrThrow(\n () =>\n buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n sourceChainAlias,\n requiredFromAddress: importRequiredFromAddress,\n toAddress: importToAddress,\n }),\n (error) => new SdkError('Failed to build Avalanche import transaction.', ErrorCode.UNKNOWN, { cause: error }),\n );\n\n const importTxId = await tryOrThrow(\n () =>\n avalancheSendTx(\n {\n baseFeeInNanoAvax: builtImportTx.baseFeeInNanoAvax,\n chainAlias: destinationChainAlias,\n txType: 'import',\n unsignedTx: builtImportTx.unsignedTx,\n },\n importStep,\n ),\n (error) =>\n new SdkError('Failed to sign/send Avalanche import transaction.', ErrorCode.SIGNING_FAILED, {\n cause: error,\n }),\n );\n\n return {\n ...transferBase,\n source: {\n confirmationCount: exportTxId ? 1 : 0,\n requiredConfirmationCount: 1,\n startedAtMs,\n txHash: exportTxId ?? importTxId,\n },\n status: 'target-pending',\n target: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: Date.now(),\n txHash: importTxId,\n },\n } satisfies TargetPendingTransfer;\n };\n}\n\nfunction getTransferBase(\n quote: Parameters<TransferService['transferAsset']>[0]['quote'],\n environment: Environment,\n): Omit<TransferBase, 'status'> {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n environment,\n fees: quote.fees,\n fromAddress: quote.fromAddress,\n id: quote.id,\n partnerFeeBps: quote.partnerFeeBps,\n sourceAsset: quote.assetIn,\n sourceChain: quote.sourceChain,\n targetAsset: quote.assetOut,\n targetChain: quote.targetChain,\n toAddress: quote.toAddress,\n type: quote.serviceType,\n };\n}\n\nfunction buildFailedTransfer({\n errorCode,\n errorReason,\n sourceStartedAtMs,\n sourceTxHash,\n transferBase,\n}: {\n errorCode: ErrorCode;\n errorReason: string;\n sourceStartedAtMs: number;\n sourceTxHash?: string;\n transferBase: Omit<TransferBase, 'status'>;\n}): FailedTransfer {\n return {\n ...transferBase,\n errorCode,\n errorReason,\n failedAtMs: Date.now(),\n ...(sourceTxHash\n ? {\n source: {\n confirmationCount: 0,\n requiredConfirmationCount: 1,\n startedAtMs: sourceStartedAtMs,\n txHash: sourceTxHash,\n },\n }\n : {}),\n status: 'failed',\n };\n}\n\nfunction getExportAmountInNanoAvax(sourceChainAlias: AvalancheBlockchainAlias, quoteAmountIn: bigint): bigint {\n return sourceChainAlias === 'C' ? quoteAmountIn / WEI_PER_NANO_AVAX_BIGINT : quoteAmountIn;\n}\n\nasync function buildExportTx({\n ajsContext,\n destinationChainAlias,\n environment,\n fromAddress,\n getUtxos,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n quoteAmountIn,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n fromAddress: EvmAddress | null;\n getUtxos: GetUtxosCallback;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n quoteAmountIn: bigint;\n requiredFromAddress?: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: XpAddress;\n}): Promise<BuiltTx> {\n const amountInNanoAvax = getExportAmountInNanoAvax(sourceChainAlias, quoteAmountIn);\n\n switch (sourceChainAlias) {\n case 'C': {\n if (destinationChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n if (!fromAddress) {\n throw new InvalidParamsError('fromAddress must be an EVM address when exporting from C-Chain.');\n }\n\n const cChain = environment === Environment.TEST ? AVALANCHE_FUJI_CHAIN : AVALANCHE_MAINNET_CHAIN;\n const cChainClient = getEvmClientForChain({ chain: cChain });\n const [nonce, baseFeeInNanoAvax] = await Promise.all([\n cChainClient.getTransactionCount({\n address: fromAddress,\n }),\n getCChainBaseFeeInNanoAvax(environment),\n ]);\n\n return {\n baseFeeInNanoAvax,\n unsignedTx: exportTx({\n amountInNanoAvax,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddress,\n nonce: BigInt(nonce),\n sourceChainAlias,\n toAddress,\n }),\n };\n }\n\n case 'P': {\n if (destinationChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, feeState, fromAddresses, pUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('P'),\n ]);\n\n return {\n baseFeeInNanoAvax: feeState.price,\n unsignedTx: exportTx({\n amountInNanoAvax,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: pUtxoSet.getUTXOs(),\n }),\n };\n }\n\n case 'X': {\n if (destinationChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses, xUtxoSet] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: sourceChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: sourceChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n getUtxos('X'),\n ]);\n\n return {\n baseFeeInNanoAvax: ajsContext.baseTxFee,\n unsignedTx: exportTx({\n amountInNanoAvax,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress,\n utxos: xUtxoSet.getUTXOs(),\n }),\n };\n }\n }\n}\n\nasync function buildImportTx({\n ajsContext,\n atomicUtxos,\n destinationChainAlias,\n environment,\n getWalletAddressesForChainAlias,\n getWalletChangeAddressForChainAlias,\n requiredFromAddress,\n sourceChainAlias,\n toAddress,\n}: {\n ajsContext: Context.Context;\n atomicUtxos: Utxo[];\n destinationChainAlias: AvalancheBlockchainAlias;\n environment: Environment;\n getWalletAddressesForChainAlias: GetWalletAddressesForChainAliasCallback;\n getWalletChangeAddressForChainAlias: GetWalletChangeAddressForChainAliasCallback;\n requiredFromAddress: XpAddress;\n sourceChainAlias: AvalancheBlockchainAlias;\n toAddress: string;\n}): Promise<BuiltTx> {\n switch (destinationChainAlias) {\n case 'C': {\n if (sourceChainAlias === 'C') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [baseFeeInNanoAvax, fromAddresses] = await Promise.all([\n getCChainBaseFeeInNanoAvax(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax,\n unsignedTx: importTx({\n atomicUtxos,\n baseFeeInNanoAvax,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'C'),\n }),\n };\n }\n\n case 'P': {\n if (sourceChainAlias === 'P') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [feeState, fromAddresses] = await Promise.all([\n getFeeState(environment),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax: feeState.price,\n unsignedTx: importTx({\n atomicUtxos,\n context: ajsContext,\n destinationChainAlias,\n feeState,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'P'),\n }),\n };\n }\n\n case 'X': {\n if (sourceChainAlias === 'X') {\n throw new InvalidParamsError('Source and destination chain aliases must be different.');\n }\n\n const [changeAddress, fromAddresses] = await Promise.all([\n getWalletChangeAddress({\n chainAlias: destinationChainAlias,\n getWalletChangeAddressForChainAlias,\n }),\n getWalletFromAddresses({\n chainAlias: destinationChainAlias,\n getWalletAddressesForChainAlias,\n requiredAddress: requiredFromAddress,\n }),\n ]);\n\n return {\n baseFeeInNanoAvax: ajsContext.baseTxFee,\n unsignedTx: importTx({\n atomicUtxos,\n changeAddress,\n context: ajsContext,\n destinationChainAlias,\n fromAddresses,\n sourceChainAlias,\n toAddress: getImportToAddress(toAddress, 'X'),\n }),\n };\n }\n }\n}\n"],"mappings":"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"}
@@ -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(),recurring:n.z.object({minFrequencySeconds:n.z.number().int().nonnegative(),supportedTokens:n.z.array(n.z.object({address:t.EvmAddressSchema,minimumAmount:n.z.string().regex(/^\d+$/,`minimumAmount must be a decimal string`)}))}).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([t.EvmAddressSchema,t.SolAddressSchema,t.HyperliquidAddressSchema]),u=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`,`relay`]),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:l}),extra:n.z.union([n.z.boolean(),n.z.record(n.z.string(),n.z.unknown())]).optional()})).optional(),gasEstimate:n.z.coerce.bigint().nonnegative().optional(),recommendedSlippage:n.z.number().int().nonnegative(),tokenIn:l,tokenInDecimals:n.z.number().int().nonnegative().max(18),tokenOut:l,tokenOutDecimals:n.z.number().int().nonnegative().max(18),uuid:n.z.uuid()}),n.z.object({done:n.z.literal(!0)})]),d=n.z.object({data:t.HexSchema,to:t.EvmAddressSchema,value:n.z.coerce.bigint().nonnegative(),from:t.EvmAddressSchema.optional()}),f=n.z.object({chainType:n.z.literal(`svm`),swapTransaction:n.z.base64()}),p=n.z.object({hyperliquidChain:n.z.string().min(1),destination:t.EvmAddressSchema,sourceDex:n.z.string(),destinationDex:n.z.string(),token:n.z.string().min(1),amount:n.z.string().regex(/^\d+(\.\d+)?$/,`amount must be a positive decimal string`),fromSubAccount:n.z.string()}),m=n.z.object({signatureKind:n.z.literal(`eip712`),domain:n.z.object({name:n.z.string().min(1),version:n.z.string().min(1),chainId:n.z.number().int().nonnegative(),verifyingContract:t.EvmAddressSchema}),types:n.z.record(n.z.string(),n.z.array(n.z.object({name:n.z.string(),type:n.z.string()}))),primaryType:n.z.string().min(1),value:n.z.object({wallet:t.EvmAddressSchema,chainId:n.z.string().min(1),id:t.HashSchema,nonce:n.z.number().int().nonnegative()}).loose()}),h=n.z.object({endpoint:n.z.string().min(1),method:n.z.string().min(1),body:n.z.object({type:n.z.string().min(1),id:t.HashSchema,nonce:n.z.number().int().nonnegative(),wallet:t.EvmAddressSchema,walletChainId:n.z.number().int().nonnegative(),signatureChainId:n.z.number().int().nonnegative()}).loose()}),g=n.z.object({type:n.z.literal(`hyperliquid-withdraw`),protocolVersion:n.z.number().int().positive(),nonce:n.z.string().regex(/^\d+$/,`nonce must be a decimal string`),id:t.HashSchema,requestId:t.HashSchema,parameters:p,sign:m.optional(),authorize:h.optional()}),_=n.z.union([d,f,g]),v=n.z.unknown().refine(e=>!(typeof e==`object`&&e&&`error`in e&&typeof e.error==`string`),{message:`Markr /authorize returned an error envelope despite 2xx status.`}),y=n.z.object({fee:n.z.int().nonnegative(),name:n.z.string()}),b=/[zZ]|[+-]\d{2}:?\d{2}$/,x=n.z.iso.datetime({local:!0}).refine(e=>{let t=b.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=>b.test(e)?e:`${e}Z`),S=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:x,finalized:x.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:x.nullable(),finalized:x.nullable()}),progress:n.z.object({committed:n.z.boolean(),commitTimestamp:x.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()}).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()}),C=n.z.object({address:t.EvmAddressSchema});exports.CrossChainStatusResponseSchema=S,exports.MarkrAuthorizeResponseSchema=v,exports.PartnerInfoResponseSchema=y,exports.QuoteResponseSchema=u,exports.SpenderAddressResponseSchema=C,exports.SupportedChainsResponseSchema=s,exports.SwapResponseSchema=_,exports.TokenListResponseSchema=c,exports.WrappedSwapTransactionResponseSchema=d;
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(),recurring:n.z.object({minFrequencySeconds:n.z.number().int().nonnegative()}).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([t.EvmAddressSchema,t.SolAddressSchema,t.HyperliquidAddressSchema]),u=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`,`relay`]),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:l}),extra:n.z.union([n.z.boolean(),n.z.record(n.z.string(),n.z.unknown())]).optional()})).optional(),gasEstimate:n.z.coerce.bigint().nonnegative().optional(),recommendedSlippage:n.z.number().int().nonnegative(),tokenIn:l,tokenInDecimals:n.z.number().int().nonnegative().max(18),tokenOut:l,tokenOutDecimals:n.z.number().int().nonnegative().max(18),uuid:n.z.uuid()}),n.z.object({done:n.z.literal(!0)})]),d=n.z.object({data:t.HexSchema,to:t.EvmAddressSchema,value:n.z.coerce.bigint().nonnegative(),from:t.EvmAddressSchema.optional()}),f=n.z.object({chainType:n.z.literal(`svm`),swapTransaction:n.z.base64()}),p=n.z.object({hyperliquidChain:n.z.string().min(1),destination:t.EvmAddressSchema,sourceDex:n.z.string(),destinationDex:n.z.string(),token:n.z.string().min(1),amount:n.z.string().regex(/^\d+(\.\d+)?$/,`amount must be a positive decimal string`),fromSubAccount:n.z.string()}),m=n.z.object({signatureKind:n.z.literal(`eip712`),domain:n.z.object({name:n.z.string().min(1),version:n.z.string().min(1),chainId:n.z.number().int().nonnegative(),verifyingContract:t.EvmAddressSchema}),types:n.z.record(n.z.string(),n.z.array(n.z.object({name:n.z.string(),type:n.z.string()}))),primaryType:n.z.string().min(1),value:n.z.object({wallet:t.EvmAddressSchema,chainId:n.z.string().min(1),id:t.HashSchema,nonce:n.z.number().int().nonnegative()}).loose()}),h=n.z.object({endpoint:n.z.string().min(1),method:n.z.string().min(1),body:n.z.object({type:n.z.string().min(1),id:t.HashSchema,nonce:n.z.number().int().nonnegative(),wallet:t.EvmAddressSchema,walletChainId:n.z.number().int().nonnegative(),signatureChainId:n.z.number().int().nonnegative()}).loose()}),g=n.z.object({type:n.z.literal(`hyperliquid-withdraw`),protocolVersion:n.z.number().int().positive(),nonce:n.z.string().regex(/^\d+$/,`nonce must be a decimal string`),id:t.HashSchema,requestId:t.HashSchema,parameters:p,sign:m.optional(),authorize:h.optional()}),_=n.z.union([d,f,g]),v=n.z.unknown().refine(e=>!(typeof e==`object`&&e&&`error`in e&&typeof e.error==`string`),{message:`Markr /authorize returned an error envelope despite 2xx status.`}),y=n.z.object({fee:n.z.int().nonnegative(),name:n.z.string()}),b=/[zZ]|[+-]\d{2}:?\d{2}$/,x=n.z.iso.datetime({local:!0}).refine(e=>{let t=b.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=>b.test(e)?e:`${e}Z`),S=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:x,finalized:x.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:x.nullable(),finalized:x.nullable()}),progress:n.z.object({committed:n.z.boolean(),commitTimestamp:x.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()}).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()}),C=n.z.object({address:t.EvmAddressSchema});exports.CrossChainStatusResponseSchema=S,exports.MarkrAuthorizeResponseSchema=v,exports.PartnerInfoResponseSchema=y,exports.QuoteResponseSchema=u,exports.SpenderAddressResponseSchema=C,exports.SupportedChainsResponseSchema=s,exports.SwapResponseSchema=_,exports.TokenListResponseSchema=c,exports.WrappedSwapTransactionResponseSchema=d;
2
2
  //# sourceMappingURL=_schema.cjs.map