@rhea-finance/cross-chain-aggregation-dex 2.0.6 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -4
- package/dist/index.d.mts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +2 -32
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -32
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/errors.ts","../src/api/ApiClient.ts","../src/core/lifecycle.ts","../src/core/registry.ts","../src/normalizers/chain.ts","../src/normalizers/schemas.ts","../src/normalizers/build.ts","../src/types/chain.ts","../src/normalizers/quote.ts","../src/normalizers/history.ts","../src/normalizers/tokens.ts","../src/mca/collateral.ts","../src/mca/quote.ts","../src/mca/signers.ts","../src/utils/units.ts","../src/mca/withdraw.ts","../src/mca/McaSwapService.ts","../src/client/SwapClient.ts"],"names":["z","ZodError","isRecord","readString","isPlainObject","normalizeDeposit","readRecordString"],"mappings":"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","file":"index.js","sourcesContent":["export type SwapErrorCode =\n | \"HTTP_ERROR\"\n | \"API_ERROR\"\n | \"RATE_LIMITED\"\n | \"AUTH_FAILED\"\n | \"REQUEST_ABORTED\"\n | \"REQUEST_TIMEOUT\"\n | \"INVALID_REQUEST\"\n | \"INVALID_API_RESPONSE\"\n | \"QUOTE_EXPIRED\"\n | \"ROUTE_NOT_FOUND\"\n | \"EXECUTOR_NOT_FOUND\"\n | \"UNSUPPORTED_CHAIN\"\n | \"CHAIN_MISMATCH\"\n | \"INVALID_TRANSACTION\"\n | \"USER_REJECTED\"\n | \"INSUFFICIENT_BALANCE\"\n | \"APPROVAL_FAILED\"\n | \"SIGNING_FAILED\"\n | \"BROADCAST_FAILED\"\n | \"ORDER_SUBMIT_FAILED\"\n | \"ORDER_TIMEOUT\"\n | \"REPORT_FAILED\";\n\nexport type SwapErrorStage =\n | \"quote\"\n | \"build\"\n | \"approve\"\n | \"sign\"\n | \"broadcast\"\n | \"submit\"\n | \"report\"\n | \"status\"\n | \"tokens\"\n | \"history\";\n\nexport interface SwapSdkErrorOptions {\n retryable?: boolean;\n cause?: unknown;\n details?: Record<string, unknown>;\n}\n\nexport class SwapSdkError extends Error {\n readonly name = \"SwapSdkError\";\n\n constructor(\n readonly code: SwapErrorCode,\n readonly stage: SwapErrorStage,\n message: string,\n readonly options: SwapSdkErrorOptions = {}\n ) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n get retryable(): boolean {\n return this.options.retryable ?? false;\n }\n\n get cause(): unknown {\n return this.options.cause;\n }\n\n get details(): Record<string, unknown> | undefined {\n return this.options.details;\n }\n}\n\nexport function asSwapSdkError(\n error: unknown,\n stage: SwapErrorStage\n): SwapSdkError {\n if (error instanceof SwapSdkError) return error;\n\n const message = error instanceof Error ? error.message : String(error);\n return new SwapSdkError(\"API_ERROR\", stage, message, { cause: error });\n}\n","import { SwapSdkError, SwapErrorStage } from \"../core/errors\";\nimport type { SdkLogEntry, SdkLogger } from \"../core/logger\";\nimport {\n SwapApiResponse,\n SwapCrossChainToTokensDataRaw,\n SwapFromTokensDataRaw,\n SwapBuildDataRaw,\n SwapBuildRequestRaw,\n SwapHistoryDataRaw,\n SwapHistoryAuthChallengeRaw,\n SwapHistoryAuthChallengeRequestRaw,\n SwapHistoryAuthTokenRaw,\n SwapHistoryAuthVerifyRequestRaw,\n SwapHistoryParamsRaw,\n SwapOrderStatusDataRaw,\n SwapOrderStatusParamsRaw,\n SwapOrderSubmitDataRaw,\n SwapOrderSubmitRequestRaw,\n SwapQuoteDataRaw,\n SwapQuoteRequestRaw,\n SwapReportDataRaw,\n SwapReportRequestRaw,\n} from \"./rawTypes\";\n\nexport interface ApiClientConfig {\n baseUrl: string;\n apiKey?: string;\n getAccessToken?: () => string | Promise<string>;\n fetch?: typeof globalThis.fetch;\n headers?:\n | Record<string, string>\n | (() => Record<string, string> | Promise<Record<string, string>>);\n timeoutMs?: number;\n retry?: Partial<RetryConfig>;\n logger?: SdkLogger;\n}\n\nexport interface ApiRequestOptions {\n signal?: AbortSignal;\n idempotencyKey?: string;\n}\n\nexport interface RetryConfig {\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n jitter: boolean;\n}\n\ninterface RequestOptions extends ApiRequestOptions {\n method: \"GET\" | \"POST\";\n body?: unknown;\n query?: Record<string, string | number | undefined | null>;\n retryableOperation?: boolean;\n authenticationToken?: string;\n}\n\ninterface NetworkFailureDetails extends Record<string, unknown> {\n method: RequestOptions[\"method\"];\n path: string;\n attempt: number;\n causeName: string;\n causeMessage: string;\n}\n\nconst DEFAULT_RETRY: RetryConfig = {\n maxRetries: 2,\n baseDelayMs: 250,\n maxDelayMs: 2_000,\n jitter: true,\n};\n\nexport class ApiClient {\n private readonly baseUrl: string;\n private readonly fetchImpl: typeof globalThis.fetch;\n\n constructor(private readonly config: ApiClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, \"\");\n const fetchImpl = config.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"Fetch is unavailable; inject fetch when using Node.js 16\"\n );\n }\n this.fetchImpl = fetchImpl.bind(globalThis);\n }\n\n quote(\n body: SwapQuoteRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapQuoteDataRaw> {\n return this.request(\"/api/swap/quote\", \"quote\", {\n ...options,\n method: \"POST\",\n body,\n retryableOperation: true,\n });\n }\n\n build(\n body: SwapBuildRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapBuildDataRaw> {\n return this.request(\"/api/swap/swap\", \"build\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n submitOrder(\n body: SwapOrderSubmitRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapOrderSubmitDataRaw> {\n return this.request(\"/api/swap/order-submit\", \"submit\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n getOrderStatus(\n params: SwapOrderStatusParamsRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapOrderStatusDataRaw> {\n return this.request(\"/api/swap/order-status\", \"status\", {\n ...options,\n method: \"GET\",\n retryableOperation: true,\n query: {\n orderId: params.orderId,\n router: params.router,\n chainId: params.chainId,\n },\n });\n }\n\n report(\n body: SwapReportRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapReportDataRaw> {\n return this.request(\"/api/swap/report\", \"report\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n getHistory(\n params: SwapHistoryParamsRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryDataRaw> {\n return this.request(\"/api/swap/history\", \"history\", {\n ...options,\n method: \"GET\",\n retryableOperation: true,\n query: {\n sender: params.sender,\n mode: params.mode,\n pageNumber: params.pageNumber,\n pageSize: params.pageSize,\n },\n ...(params.mode === \"confidential\" && params.walletToken\n ? { authenticationToken: params.walletToken }\n : {}),\n });\n }\n\n createHistoryAuthChallenge(\n body: SwapHistoryAuthChallengeRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthChallengeRaw> {\n return this.request(\"/api/swap/history/auth/challenge\", \"history\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n verifyHistoryAuthChallenge(\n body: SwapHistoryAuthVerifyRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthTokenRaw> {\n return this.request(\"/api/swap/history/auth/verify\", \"history\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n getFromTokenRows(\n chainId: number,\n options: ApiRequestOptions = {}\n ): Promise<SwapFromTokensDataRaw> {\n return this.request(\"/get_chain_prices\", \"tokens\", {\n ...options,\n method: \"GET\",\n retryableOperation: true,\n query: { chain: chainId },\n });\n }\n\n getCrossChainToTokenRows(\n chainId: number,\n options: ApiRequestOptions = {}\n ): Promise<SwapCrossChainToTokensDataRaw> {\n return this.request(\"/api/swap/supported_to_tokens\", \"tokens\", {\n ...options,\n method: \"GET\",\n retryableOperation: true,\n query: { chain: chainId },\n });\n }\n\n private async request<T>(\n path: string,\n stage: SwapErrorStage,\n options: RequestOptions\n ): Promise<T> {\n const url = this.buildUrl(path, options.query);\n const headers = await this.buildHeaders(\n options.idempotencyKey,\n options.authenticationToken\n );\n const retry = this.retryConfig();\n let attempt = 1;\n\n for (;;) {\n this.log({\n level: \"debug\",\n event: \"api.request\",\n path,\n stage,\n attempt,\n });\n try {\n return await this.requestOnce<T>(url, path, stage, options, headers, attempt);\n } catch (error) {\n const sdkError =\n error instanceof SwapSdkError\n ? error\n : new SwapSdkError(\"HTTP_ERROR\", stage, \"Network request failed\", {\n cause: error,\n retryable: true,\n });\n const canRetry =\n options.retryableOperation === true &&\n sdkError.retryable &&\n sdkError.code !== \"REQUEST_ABORTED\" &&\n attempt <= retry.maxRetries;\n if (!canRetry) throw sdkError;\n\n this.log({\n level: \"warn\",\n event: \"api.retry\",\n path,\n stage,\n attempt,\n code: sdkError.code,\n });\n await waitForRetry(this.retryDelay(attempt, retry), options.signal, stage);\n attempt += 1;\n }\n }\n }\n\n private async requestOnce<T>(\n url: string,\n path: string,\n stage: SwapErrorStage,\n options: RequestOptions,\n headers: Record<string, string>,\n attempt: number\n ): Promise<T> {\n if (options.signal?.aborted) {\n throw new SwapSdkError(\"REQUEST_ABORTED\", stage, \"Request aborted\", {\n cause: options.signal.reason,\n });\n }\n const controller = new AbortController();\n const timeoutMs = this.config.timeoutMs ?? 15_000;\n let timedOut = false;\n const startedAt = Date.now();\n\n const abortFromCaller = () => controller.abort(options.signal?.reason);\n if (options.signal?.aborted) abortFromCaller();\n options.signal?.addEventListener(\"abort\", abortFromCaller, { once: true });\n\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n\n try {\n const response = await this.fetchImpl(url, {\n method: options.method,\n headers,\n body: options.body === undefined ? undefined : JSON.stringify(options.body),\n signal: controller.signal,\n });\n if (controller.signal.aborted) {\n throw new SwapSdkError(\n timedOut ? \"REQUEST_TIMEOUT\" : \"REQUEST_ABORTED\",\n stage,\n timedOut ? `Request timed out after ${timeoutMs}ms` : \"Request aborted\",\n { retryable: timedOut }\n );\n }\n this.log({\n level: \"debug\",\n event: \"api.response\",\n path,\n stage,\n attempt,\n status: response.status,\n durationMs: Date.now() - startedAt,\n });\n const text = await response.text();\n const parsed = this.parseResponse(text, response.status, stage);\n\n if (!response.ok) {\n const message = this.readMessage(parsed) || `HTTP ${response.status}`;\n if (response.status === 401 || response.status === 403) {\n throw new SwapSdkError(\"AUTH_FAILED\", stage, message);\n }\n if (response.status === 429) {\n throw new SwapSdkError(\"RATE_LIMITED\", stage, message, {\n retryable: true,\n });\n }\n throw new SwapSdkError(\"HTTP_ERROR\", stage, message, {\n retryable: response.status >= 500,\n details: { status: response.status },\n });\n }\n\n if (!this.isEnvelope(parsed)) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n stage,\n \"Invalid unified swap API response envelope\"\n );\n }\n\n if (parsed.code !== 0) {\n throw new SwapSdkError(\n \"API_ERROR\",\n stage,\n parsed.msg || `Service returned code ${parsed.code}`,\n { details: { apiCode: parsed.code } }\n );\n }\n\n return parsed.data as T;\n } catch (error) {\n if (error instanceof SwapSdkError) throw error;\n if (controller.signal.aborted) {\n throw new SwapSdkError(\n timedOut ? \"REQUEST_TIMEOUT\" : \"REQUEST_ABORTED\",\n stage,\n timedOut ? `Request timed out after ${timeoutMs}ms` : \"Request aborted\",\n { cause: error, retryable: timedOut }\n );\n }\n const details = networkFailureDetails(\n error,\n options.method,\n path,\n attempt\n );\n console.error(\"SDK network request failed\", {\n ...details,\n stage,\n });\n throw new SwapSdkError(\n \"HTTP_ERROR\",\n stage,\n `Network request failed: ${details.causeName}: ${details.causeMessage}`,\n {\n cause: error,\n retryable: true,\n details,\n }\n );\n } finally {\n clearTimeout(timeout);\n options.signal?.removeEventListener(\"abort\", abortFromCaller);\n }\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | undefined | null>\n ): string {\n if (!query) return `${this.baseUrl}${path}`;\n\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n search.set(key, String(value));\n }\n const suffix = search.toString();\n return suffix ? `${this.baseUrl}${path}?${suffix}` : `${this.baseUrl}${path}`;\n }\n\n private async buildHeaders(\n idempotencyKey?: string,\n authenticationToken?: string\n ): Promise<Record<string, string>> {\n const configured =\n typeof this.config.headers === \"function\"\n ? await this.config.headers()\n : this.config.headers ?? {};\n const token = this.config.getAccessToken\n ? await this.config.getAccessToken()\n : this.config.apiKey;\n\n return {\n \"Content-Type\": \"application/json\",\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n ...(authenticationToken\n ? { Authentication: `Bearer ${authenticationToken}` }\n : {}),\n ...(idempotencyKey ? { \"Idempotency-Key\": idempotencyKey } : {}),\n ...configured,\n };\n }\n\n private retryConfig(): RetryConfig {\n const configured = { ...DEFAULT_RETRY, ...this.config.retry };\n if (\n !Number.isSafeInteger(configured.maxRetries) ||\n configured.maxRetries < 0 ||\n !Number.isFinite(configured.baseDelayMs) ||\n configured.baseDelayMs < 0 ||\n !Number.isFinite(configured.maxDelayMs) ||\n configured.maxDelayMs < configured.baseDelayMs\n ) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"Invalid retry configuration\"\n );\n }\n return configured;\n }\n\n private retryDelay(attempt: number, retry: RetryConfig): number {\n const exponential = Math.min(\n retry.maxDelayMs,\n retry.baseDelayMs * 2 ** (attempt - 1)\n );\n return retry.jitter\n ? Math.min(retry.maxDelayMs, exponential * (0.5 + Math.random()))\n : exponential;\n }\n\n private log(entry: SdkLogEntry): void {\n try {\n this.config.logger?.log(entry);\n } catch {\n // Application logging must never change SDK behavior.\n }\n }\n\n private parseResponse(\n text: string,\n status: number,\n stage: SwapErrorStage\n ): unknown {\n try {\n return text ? JSON.parse(text) : {};\n } catch (error) {\n throw new SwapSdkError(\n status >= 400 ? \"HTTP_ERROR\" : \"INVALID_API_RESPONSE\",\n stage,\n status >= 400 ? `HTTP ${status}` : \"Response is not valid JSON\",\n { cause: error, retryable: status >= 500 }\n );\n }\n }\n\n private isEnvelope(value: unknown): value is SwapApiResponse<unknown> {\n if (typeof value !== \"object\" || value === null) return false;\n if (!(\"code\" in value) || typeof value.code !== \"number\") return false;\n if (!(\"msg\" in value) || typeof value.msg !== \"string\") return false;\n // Successful responses must include `data`. Error envelopes from the\n // service sometimes omit it (only `{ code, msg }`), which is still valid.\n if (value.code === 0 && !(\"data\" in value)) return false;\n return true;\n }\n\n private readMessage(value: unknown): string | undefined {\n if (typeof value !== \"object\" || value === null || !(\"msg\" in value)) {\n return undefined;\n }\n return typeof value.msg === \"string\" && value.msg.trim()\n ? value.msg.trim()\n : undefined;\n }\n}\n\nfunction networkFailureDetails(\n error: unknown,\n method: RequestOptions[\"method\"],\n path: string,\n attempt: number\n): NetworkFailureDetails {\n const causeName =\n error instanceof Error && error.name.trim() ? error.name.trim() : \"Error\";\n const rawMessage =\n error instanceof Error && error.message.trim()\n ? error.message.trim()\n : String(error);\n const causeMessage = rawMessage.replace(\n /\\b(https?:\\/\\/[^\\s?#]+)\\?[^\\s#]*/gi,\n \"$1?[redacted]\"\n );\n\n return {\n method,\n path,\n attempt,\n causeName,\n causeMessage,\n };\n}\n\nfunction waitForRetry(\n delayMs: number,\n signal: AbortSignal | undefined,\n stage: SwapErrorStage\n): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(\n new SwapSdkError(\"REQUEST_ABORTED\", stage, \"Request aborted\", {\n cause: signal.reason,\n })\n );\n return;\n }\n const onAbort = () => {\n clearTimeout(timeout);\n reject(\n new SwapSdkError(\"REQUEST_ABORTED\", stage, \"Request aborted\", {\n cause: signal?.reason,\n })\n );\n };\n const timeout = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import type { SwapOrderStatusDataRaw } from \"../api/rawTypes\";\nimport type { ChainRef } from \"../types/chain\";\nimport type {\n OrderReference,\n SwapBuild,\n} from \"../types/execution\";\nimport type { Quote } from \"../types/quote\";\n\nexport type WaitMode = \"submitted\" | \"source-confirmed\" | \"completed\";\n\nexport interface SwapWarning {\n code: \"REPORT_FAILED\";\n message: string;\n cause?: unknown;\n}\n\nexport interface SignRequestPreview {\n chain: ChainRef;\n kind: string;\n summary: Record<string, unknown>;\n}\n\nexport type OrderStatus =\n | \"pending\"\n | \"processing\"\n | \"completed\"\n | \"failed\"\n | \"refunded\"\n | \"expired\"\n | \"unknown\";\n\nexport type SwapLifecycleEvent =\n | { type: \"build-started\"; executionId: string }\n | { type: \"build-completed\"; executionId: string }\n | { type: \"approval-requested\"; executionId: string }\n | { type: \"approval-submitted\"; executionId: string; txHash: string }\n | { type: \"signing-requested\"; executionId: string }\n | {\n type: \"submitted\";\n executionId: string;\n txHash?: string;\n orderId?: string;\n }\n | { type: \"source-confirmed\"; executionId: string }\n | { type: \"order-status\"; executionId: string; status: OrderStatus }\n | { type: \"completed\"; executionId: string }\n | { type: \"warning\"; executionId: string; warning: SwapWarning }\n | { type: \"failed\"; executionId: string; error: Error };\n\nexport interface SwapExecutionResult {\n executionId: string;\n status:\n | \"submitted\"\n | \"source-confirmed\"\n | \"processing\"\n | \"completed\"\n | \"failed\"\n | \"refunded\"\n | \"expired\";\n router: string;\n txHash?: string;\n txHashes?: string[];\n orderId?: string;\n depositAddress?: string;\n report?: {\n status: \"reported\" | \"failed\" | \"skipped\";\n warning?: SwapWarning;\n };\n raw: unknown;\n}\n\nexport interface OrderPollingOptions {\n /** Delay between order-status requests in milliseconds. Defaults to 5000. */\n intervalMs?: number;\n /** Maximum polling duration in milliseconds. Omit to poll indefinitely. */\n timeoutMs?: number;\n}\n\nexport interface ExecuteSwapInput {\n build: SwapBuild;\n waitFor?: WaitMode;\n orderPolling?: OrderPollingOptions;\n signal?: AbortSignal;\n onEvent?: (event: SwapLifecycleEvent) => void;\n beforeSign?: (preview: SignRequestPreview) => void | Promise<void>;\n}\n\nexport interface SwapInput extends Omit<ExecuteSwapInput, \"build\"> {\n quote: Quote;\n idempotencyKey?: string;\n}\n\nexport interface OrderStatusResult {\n orderId: string;\n router: string;\n status: OrderStatus;\n raw: SwapOrderStatusDataRaw;\n}\n\nexport interface WaitForOrderInput\n extends OrderReference,\n OrderPollingOptions {\n signal?: AbortSignal;\n}\n\nconst ORDER_STATUS_MAP: Record<string, OrderStatus> = {\n PENDING: \"pending\",\n CREATED: \"pending\",\n PROCESSING: \"processing\",\n IN_PROGRESS: \"processing\",\n SUCCESS: \"completed\",\n COMPLETED: \"completed\",\n FILLED: \"completed\",\n FAILED: \"failed\",\n REFUNDED: \"refunded\",\n EXPIRED: \"expired\",\n};\n\nexport function normalizeOrderStatus(\n raw: SwapOrderStatusDataRaw\n): OrderStatus {\n const value = raw.status ?? raw.state;\n if (typeof value !== \"string\") return \"unknown\";\n return ORDER_STATUS_MAP[value.trim().toUpperCase()] ?? \"unknown\";\n}\n","import { SwapSdkError } from \"./errors\";\nimport type {\n SignRequestPreview,\n SwapLifecycleEvent,\n WaitMode,\n} from \"./lifecycle\";\nimport type { SwapExecution } from \"../types/execution\";\n\nexport interface ChainExecutionResult {\n status: \"submitted\" | \"source-confirmed\";\n txHash?: string;\n txHashes?: string[];\n orderId?: string;\n signature?: string;\n signingScheme?: string;\n raw?: unknown;\n}\n\nexport interface ExecutionContext {\n executionId: string;\n signal?: AbortSignal;\n waitFor: WaitMode;\n emit(event: SwapLifecycleEvent): void;\n beforeSign?: (preview: SignRequestPreview) => void | Promise<void>;\n}\n\nexport interface MessageSignOptions {\n signal?: AbortSignal;\n context?: Readonly<Record<string, unknown>>;\n}\n\nexport interface ExecutorIdentityProvider {\n readonly signerChain: string;\n getIdentityKey(): string | Promise<string>;\n signMessage?(\n message: string,\n options?: MessageSignOptions\n ): Promise<string>;\n}\n\nexport interface ExecutorMessageSigner extends ExecutorIdentityProvider {\n signMessage(\n message: string,\n options?: MessageSignOptions\n ): Promise<string>;\n}\n\nexport interface ChainExecutor<\n K extends SwapExecution[\"kind\"] = SwapExecution[\"kind\"],\n> {\n readonly kinds: readonly K[];\n readonly signerChain?: string;\n getIdentityKey?(): string | Promise<string>;\n signMessage?(\n message: string,\n options?: MessageSignOptions\n ): Promise<string>;\n validate(\n execution: Extract<SwapExecution, { kind: K }>,\n context: ExecutionContext\n ): void | Promise<void>;\n execute(\n execution: Extract<SwapExecution, { kind: K }>,\n context: ExecutionContext\n ): Promise<ChainExecutionResult>;\n}\n\nexport class ExecutorRegistry {\n private readonly executors = new Map<\n SwapExecution[\"kind\"],\n ChainExecutor\n >();\n\n constructor(executors: readonly ChainExecutor[] = []) {\n for (const executor of executors) this.register(executor);\n }\n\n register(executor: ChainExecutor, allowOverride = false): void {\n for (const kind of executor.kinds) {\n if (!allowOverride && this.executors.has(kind)) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"build\",\n `Executor already registered for ${kind}`\n );\n }\n this.executors.set(kind, executor);\n }\n }\n\n get<K extends SwapExecution[\"kind\"]>(kind: K): ChainExecutor<K> {\n const executor = this.executors.get(kind);\n if (!executor) {\n throw new SwapSdkError(\n \"EXECUTOR_NOT_FOUND\",\n \"sign\",\n `No executor registered for ${kind}`\n );\n }\n return executor as unknown as ChainExecutor<K>;\n }\n\n getSigner(chain: string, requireSignMessage: true): ExecutorMessageSigner;\n getSigner(\n chain: string,\n requireSignMessage?: false\n ): ExecutorIdentityProvider;\n getSigner(\n chain: string,\n requireSignMessage = false\n ): ExecutorIdentityProvider | ExecutorMessageSigner {\n const executor = Array.from(new Set(this.executors.values())).find(\n (candidate) => candidate.signerChain === chain\n );\n if (!executor) {\n throw new SwapSdkError(\n \"EXECUTOR_NOT_FOUND\",\n \"sign\",\n `No executor registered for signer chain ${chain}`\n );\n }\n if (!executor.getIdentityKey) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n `Executor for signer chain ${chain} must implement getIdentityKey`\n );\n }\n if (requireSignMessage && !executor.signMessage) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n `Executor for signer chain ${chain} must implement signMessage`\n );\n }\n return executor as ExecutorIdentityProvider | ExecutorMessageSigner;\n }\n}\n","import { SwapSdkError } from \"../core/errors\";\nimport type { AssetRef, ChainRef } from \"../types/chain\";\n\nconst CANONICAL_NON_EVM_CHAINS = new Set<ChainRef>([\n \"solana\",\n \"aptos\",\n \"near\",\n \"tron\",\n \"btc\",\n \"zcash\",\n \"sui\",\n]);\n\nconst RAW_API_ALIASES = new Map<string, ChainRef>([\n [\"sol\", \"solana\"],\n [\"501\", \"solana\"],\n [\"637\", \"aptos\"],\n [\"trx\", \"tron\"],\n [\"bitcoin\", \"btc\"],\n [\"zec\", \"zcash\"],\n]);\n\nconst NATIVE_ADDRESSES = new Map<ChainRef, string>([\n [\"solana\", \"So11111111111111111111111111111111111111112\"],\n [\"aptos\", \"0xa\"],\n [\"near\", \"wrap.near\"],\n [\"tron\", \"trx\"],\n [\"btc\", \"btc\"],\n [\"zcash\", \"nep141:zec.omft.near\"],\n [\"sui\", \"0x2::sui::SUI\"],\n]);\n\nconst EVM_ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\nconst DECIMAL_EVM_CHAIN_ID = /^[1-9]\\d*$/;\n\nexport function toApiChain(chain: ChainRef): string {\n if (\n DECIMAL_EVM_CHAIN_ID.test(chain) ||\n CANONICAL_NON_EVM_CHAINS.has(chain)\n ) {\n return chain;\n }\n throw unsupportedChain(chain);\n}\n\nexport function fromApiChain(chain: string): ChainRef {\n const normalized = chain.trim().toLowerCase();\n const alias = RAW_API_ALIASES.get(normalized);\n if (alias) return alias;\n if (CANONICAL_NON_EVM_CHAINS.has(normalized as ChainRef)) {\n return normalized as ChainRef;\n }\n\n if (/^0x[0-9a-f]+$/.test(normalized)) {\n const decimal = BigInt(normalized).toString();\n if (decimal !== \"0\") return decimal as ChainRef;\n }\n if (DECIMAL_EVM_CHAIN_ID.test(normalized)) {\n return BigInt(normalized).toString() as ChainRef;\n }\n\n throw unsupportedChain(chain);\n}\n\nexport function toApiAssetAddress(asset: AssetRef): string {\n const explicit = asset.address.trim();\n if (explicit) return explicit;\n\n if (!asset.isNative) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `Asset address is required for ${asset.chain}`\n );\n }\n\n if (DECIMAL_EVM_CHAIN_ID.test(asset.chain)) return EVM_ZERO_ADDRESS;\n\n const nativeAddress = NATIVE_ADDRESSES.get(asset.chain);\n if (!nativeAddress) {\n throw new SwapSdkError(\n \"UNSUPPORTED_CHAIN\",\n \"quote\",\n `No native asset mapping for ${asset.chain}`\n );\n }\n return nativeAddress;\n}\n\nfunction unsupportedChain(chain: string): SwapSdkError {\n return new SwapSdkError(\n \"UNSUPPORTED_CHAIN\",\n \"quote\",\n `Unsupported chain: ${chain}`\n );\n}\n","import { z } from \"zod\";\n\nexport const decimalStringSchema = z.string().regex(/^(0|[1-9]\\d*)$/);\nexport const nonEmptyStringSchema = z.string().trim().min(1);\nexport const hexDataSchema = z.string().regex(/^0x(?:[0-9a-fA-F]{2})*$/);\nexport const positiveIntegerSchema = z.number().int().positive();\n\nexport const evmChainIdSchema = z.preprocess((value) => {\n if (typeof value !== \"string\") return value;\n const normalized = value.trim();\n if (!/^(?:[1-9]\\d*|0x[0-9a-fA-F]+)$/.test(normalized)) {\n return value;\n }\n try {\n const parsed = BigInt(normalized);\n return parsed <= BigInt(Number.MAX_SAFE_INTEGER)\n ? Number(parsed)\n : value;\n } catch {\n return value;\n }\n}, z.number().int().positive().max(Number.MAX_SAFE_INTEGER));\n\nconst evmQuantitySchema = z\n .string()\n .regex(/^(?:0|[1-9]\\d*|0x[0-9a-fA-F]+)$/)\n .transform((value) =>\n value.startsWith(\"0x\") ? BigInt(value).toString() : value,\n );\n\n/** API may return null for optional EVM quantity fields such as gasLimit. */\nexport const optionalEvmQuantitySchema = z.preprocess(\n (value) => (value === null || value === undefined || value === \"\" ? undefined : value),\n evmQuantitySchema.optional()\n);\n\nexport const evmTxSchema = z.object({\n to: nonEmptyStringSchema,\n data: hexDataSchema,\n value: evmQuantitySchema,\n gasLimit: optionalEvmQuantitySchema,\n gasPrice: optionalEvmQuantitySchema,\n maxFeePerGas: optionalEvmQuantitySchema,\n maxPriorityFeePerGas: optionalEvmQuantitySchema,\n from: nonEmptyStringSchema.optional(),\n chainId: evmChainIdSchema,\n});\n","import { z, ZodError } from \"zod\";\nimport type {\n SwapBuildDataRaw,\n SwapBuildRequestRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport type { ChainRef } from \"../types/chain\";\nimport type {\n DepositInfo,\n EvmApproval,\n OrderReference,\n SwapBuild,\n SwapExecution,\n} from \"../types/execution\";\nimport { fromApiChain } from \"./chain\";\nimport {\n decimalStringSchema,\n evmChainIdSchema,\n evmTxSchema,\n nonEmptyStringSchema,\n} from \"./schemas\";\n\nconst tokenSchema = z.object({\n address: z.string(),\n symbol: z.string(),\n decimals: z.number().int().nonnegative(),\n});\n\nconst commonBuildSchema = z.object({\n isCrossChain: z.boolean(),\n chainType: nonEmptyStringSchema,\n router: nonEmptyStringSchema,\n fromChain: nonEmptyStringSchema,\n toChain: nonEmptyStringSchema,\n tokenIn: tokenSchema,\n tokenOut: tokenSchema,\n amountIn: decimalStringSchema,\n estimatedOut: decimalStringSchema,\n minAmountOut: decimalStringSchema,\n});\n\nconst signingRequestSchema = z.object({\n type: nonEmptyStringSchema,\n router: nonEmptyStringSchema,\n quoteId: nonEmptyStringSchema,\n chainId: evmChainIdSchema,\n signingScheme: z.string().optional(),\n typedData: z.object({\n domain: z.record(z.string(), z.unknown()),\n types: z.record(\n z.string(),\n z.array(z.object({ name: z.string(), type: z.string() }))\n ),\n primaryType: nonEmptyStringSchema,\n message: z.record(z.string(), z.unknown()),\n }),\n submit: z\n .object({\n endpoint: z.string(),\n method: z.string(),\n params: z.record(z.string(), z.string()),\n })\n .optional(),\n});\n\nconst solanaTxSchema = z.object({\n transaction: z.string(),\n format: nonEmptyStringSchema,\n addressLookupTableAddresses: z.array(z.string()).optional(),\n recentBlockhash: z.string().optional(),\n txValidUntil: z.number().optional(),\n transactionSize: z.number().optional(),\n});\n\nconst aptosTxSchema = z.object({\n function: nonEmptyStringSchema,\n type_arguments: z.array(z.string()),\n arguments: z.array(z.unknown()),\n});\n\nconst nearTxSchema = z.object({\n signerId: z.string().optional(),\n receiverId: nonEmptyStringSchema,\n actions: z.array(z.unknown()).min(1),\n});\n\nconst transferBaseSchema = z.object({\n kind: nonEmptyStringSchema,\n chainId: z.string().optional(),\n chain: z.string().optional(),\n amount: decimalStringSchema,\n depositAddress: nonEmptyStringSchema,\n});\n\nconst tronTxSchema = transferBaseSchema.extend({\n tokenAddress: z.string().optional(),\n standard: z.string().optional(),\n});\n\nconst bitcoinTxSchema = transferBaseSchema.extend({\n feeRate: z.number().positive().optional(),\n});\n\nconst zcashTxSchema = transferBaseSchema.extend({\n decimals: z.number().int().nonnegative().optional(),\n});\n\nconst suiTxSchema = transferBaseSchema.extend({\n coinType: nonEmptyStringSchema.refine(\n (value) => !value.toLowerCase().startsWith(\"nep141:\"),\n \"Sui coinType cannot be an OMFT asset id\"\n ),\n});\n\ntype ExecutionLane =\n | \"evm\"\n | \"solana\"\n | \"aptos\"\n | \"near\"\n | \"tron\"\n | \"bitcoin\"\n | \"zcash\"\n | \"sui\";\n\nexport function normalizeBuild(\n raw: SwapBuildDataRaw,\n executionId = createExecutionId(),\n request?: SwapBuildRequestRaw\n): SwapBuild {\n try {\n const common = commonBuildSchema.parse(raw);\n const fromChain = fromApiChain(common.fromChain);\n const toChain = fromApiChain(common.toChain);\n const lane = laneFromChainType(common.chainType, fromChain);\n assertLaneMatchesChain(lane, fromChain);\n const execution = normalizeExecution(raw, lane, fromChain);\n const order = normalizeOrder(raw, execution, request);\n const deposit = normalizeDeposit(raw.deposit);\n\n return {\n executionId,\n ...(raw.signingRequest?.quoteId\n ? { quoteId: raw.signingRequest.quoteId }\n : {}),\n isCrossChain: common.isCrossChain,\n fromChain,\n toChain,\n tokenIn: { chain: fromChain, ...common.tokenIn },\n tokenOut: { chain: toChain, ...common.tokenOut },\n amountIn: common.amountIn,\n estimatedOut: common.estimatedOut,\n minAmountOut: common.minAmountOut,\n router: common.router,\n execution,\n ...(order ? { order } : {}),\n ...(deposit ? { deposit } : {}),\n ...(request ? { request: { ...request } } : {}),\n raw,\n };\n } catch (error) {\n if (error instanceof SwapSdkError) throw error;\n throw invalidBuild(error);\n }\n}\n\nfunction normalizeExecution(\n raw: SwapBuildDataRaw,\n lane: ExecutionLane,\n chain: ChainRef\n): SwapExecution {\n switch (lane) {\n case \"evm\":\n return normalizeEvmExecution(raw, chain);\n case \"solana\": {\n const tx = solanaTxSchema.parse(raw.tx);\n return {\n kind: \"solana-transaction\",\n chain,\n transaction: tx.transaction,\n format: tx.format,\n metadata: {\n ...(tx.addressLookupTableAddresses\n ? { addressLookupTableAddresses: tx.addressLookupTableAddresses }\n : {}),\n ...(tx.recentBlockhash ? { recentBlockhash: tx.recentBlockhash } : {}),\n ...(tx.txValidUntil === undefined\n ? {}\n : { txValidUntil: tx.txValidUntil }),\n ...(tx.transactionSize === undefined\n ? {}\n : { transactionSize: tx.transactionSize }),\n },\n };\n }\n case \"aptos\": {\n const tx = aptosTxSchema.parse(raw.tx);\n return {\n kind: \"aptos-entry-function\",\n chain,\n function: tx.function,\n typeArguments: tx.type_arguments,\n functionArguments: tx.arguments,\n };\n }\n case \"near\": {\n const transactions = z\n .union([nearTxSchema, z.array(nearTxSchema).min(1)])\n .parse(raw.tx);\n return {\n kind: \"near-transaction-batch\",\n chain,\n transactions: Array.isArray(transactions)\n ? transactions\n : [transactions],\n };\n }\n case \"tron\": {\n const tx = tronTxSchema.parse(raw.tx);\n assertKind(tx.kind, [\"tron_transfer\"]);\n return {\n kind: \"tron-transfer\",\n chain,\n amount: tx.amount,\n depositAddress: tx.depositAddress,\n ...(tx.tokenAddress ? { tokenAddress: tx.tokenAddress } : {}),\n ...(tx.standard ? { standard: tx.standard } : {}),\n };\n }\n case \"bitcoin\": {\n const tx = bitcoinTxSchema.parse(raw.tx);\n assertKind(tx.kind, [\"btc_transfer\", \"utxo_transfer\"]);\n return {\n kind: \"bitcoin-transfer\",\n chain,\n amount: tx.amount,\n depositAddress: tx.depositAddress,\n ...(tx.feeRate === undefined ? {} : { feeRate: tx.feeRate }),\n };\n }\n case \"zcash\": {\n const tx = zcashTxSchema.parse(raw.tx);\n assertKind(tx.kind, [\"zcash_transfer\", \"utxo_transfer\"]);\n return {\n kind: \"zcash-transfer\",\n chain,\n amount: tx.amount,\n depositAddress: tx.depositAddress,\n ...(tx.decimals === undefined ? {} : { decimals: tx.decimals }),\n };\n }\n case \"sui\": {\n const candidate =\n typeof raw.tx === \"object\" && raw.tx !== null\n ? {\n ...raw.tx,\n coinType:\n \"coinType\" in raw.tx && raw.tx.coinType\n ? raw.tx.coinType\n : raw.tokenIn.address,\n }\n : raw.tx;\n const tx = suiTxSchema.parse(candidate);\n assertKind(tx.kind, [\"sui_transfer\"]);\n return {\n kind: \"sui-transfer\",\n chain,\n amount: tx.amount,\n depositAddress: tx.depositAddress,\n coinType: tx.coinType,\n };\n }\n }\n}\n\nfunction normalizeEvmExecution(\n raw: SwapBuildDataRaw,\n chain: ChainRef\n): SwapExecution {\n const approval = normalizeEvmApproval(raw, chain);\n if (raw.executionType === \"signature\" || raw.signingRequest) {\n const request = signingRequestSchema.parse(raw.signingRequest);\n assertEvmChainId(chain, request.chainId);\n return {\n kind: \"evm-signature\",\n chain,\n request,\n ...(approval ? { approval } : {}),\n };\n }\n\n const tx = evmTxSchema.parse(raw.tx);\n assertEvmChainId(chain, tx.chainId);\n return {\n kind: \"evm-transaction\",\n chain,\n tx,\n ...(approval ? { approval } : {}),\n };\n}\n\nfunction normalizeEvmApproval(\n raw: SwapBuildDataRaw,\n chain: ChainRef\n): EvmApproval | undefined {\n if (raw.approve) {\n const approveTx = evmTxSchema.parse(raw.approve.tx);\n assertEvmChainId(chain, approveTx.chainId);\n return {\n tx: approveTx,\n spender:\n readErc20ApproveSpender(approveTx.data) ??\n nonEmptyStringSchema.parse(raw.approve.spender),\n };\n }\n return undefined;\n}\n\nfunction readErc20ApproveSpender(data: string): string | undefined {\n const normalized = data.toLowerCase();\n if (\n !normalized.startsWith(\"0x095ea7b3\") ||\n normalized.length < 10 + 64\n ) {\n return undefined;\n }\n const addressWord = normalized.slice(10, 10 + 64);\n if (!/^[0-9a-f]{64}$/.test(addressWord)) return undefined;\n return `0x${addressWord.slice(24)}`;\n}\n\nfunction laneFromChainType(\n chainType: string,\n fromChain: ChainRef\n): ExecutionLane {\n const normalized = chainType.toLowerCase();\n const aliases: Record<string, ExecutionLane> = {\n evm: \"evm\",\n solana: \"solana\",\n sol: \"solana\",\n aptos: \"aptos\",\n near: \"near\",\n tron: \"tron\",\n btc: \"bitcoin\",\n bitcoin: \"bitcoin\",\n zcash: \"zcash\",\n zec: \"zcash\",\n sui: \"sui\",\n };\n if (normalized === \"cross-chain\" || normalized === \"utxo\") {\n return laneFromChain(fromChain);\n }\n const lane = aliases[normalized];\n if (!lane) {\n throw new SwapSdkError(\n \"UNSUPPORTED_CHAIN\",\n \"build\",\n `Unsupported build chainType: ${chainType}`\n );\n }\n return lane;\n}\n\nfunction laneFromChain(chain: ChainRef): ExecutionLane {\n if (/^[1-9]\\d*$/.test(chain)) return \"evm\";\n const lanes: Record<string, ExecutionLane> = {\n solana: \"solana\",\n aptos: \"aptos\",\n near: \"near\",\n tron: \"tron\",\n btc: \"bitcoin\",\n zcash: \"zcash\",\n sui: \"sui\",\n };\n const lane = lanes[chain];\n if (!lane) {\n throw new SwapSdkError(\n \"UNSUPPORTED_CHAIN\",\n \"build\",\n `Unsupported source chain: ${chain}`\n );\n }\n return lane;\n}\n\nfunction assertLaneMatchesChain(lane: ExecutionLane, chain: ChainRef): void {\n const chainLane = laneFromChain(chain);\n if (lane !== chainLane) {\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n \"build\",\n `Build chainType ${lane} does not match source chain ${chain}`\n );\n }\n}\n\nfunction assertEvmChainId(chain: ChainRef, chainId: number): void {\n if (chain !== String(chainId)) {\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n \"build\",\n `EVM transaction chainId ${chainId} does not match ${chain}`\n );\n }\n}\n\nfunction assertKind(actual: string, allowed: string[]): void {\n if (!allowed.includes(actual.toLowerCase())) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n `Unexpected transaction kind: ${actual}`\n );\n }\n}\n\nfunction normalizeOrder(\n raw: SwapBuildDataRaw,\n execution: SwapExecution,\n request?: SwapBuildRequestRaw\n): OrderReference | undefined {\n const depositOrderId = readRecordString(raw.deposit, \"orderId\");\n const router =\n raw.statusRouter ??\n (execution.kind === \"evm-signature\"\n ? execution.request.router\n : undefined) ??\n raw.router;\n const confidentialNearIntentsStatusKey =\n request?.confidentiality === \"basic\" &&\n router.toLowerCase().includes(\"nearintents\")\n ? readRecordString(raw.deposit, \"depositAddress\")\n : undefined;\n const orderId =\n raw.orderId ?? depositOrderId ?? confidentialNearIntentsStatusKey;\n if (!orderId) return undefined;\n\n const chainId =\n execution.kind === \"evm-signature\"\n ? String(execution.request.chainId)\n : execution.kind === \"evm-transaction\"\n ? String(execution.tx.chainId)\n : undefined;\n return { orderId, router, ...(chainId ? { chainId } : {}) };\n}\n\nfunction normalizeDeposit(value: unknown): DepositInfo | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n const depositAddress = readRecordString(value, \"depositAddress\");\n if (!depositAddress) return undefined;\n\n return {\n depositAddress,\n ...(readRecordString(value, \"depositMemo\")\n ? { depositMemo: readRecordString(value, \"depositMemo\") }\n : {}),\n ...(readRecordString(value, \"orderId\")\n ? { orderId: readRecordString(value, \"orderId\") }\n : {}),\n ...(readRecordString(value, \"estimatedOut\")\n ? { estimatedOut: decimalStringSchema.parse(readRecordString(value, \"estimatedOut\")) }\n : {}),\n ...(readRecordString(value, \"minAmountOut\")\n ? { minAmountOut: decimalStringSchema.parse(readRecordString(value, \"minAmountOut\")) }\n : {}),\n ...(typeof Reflect.get(value, \"timeEstimate\") === \"number\" ||\n typeof Reflect.get(value, \"timeEstimate\") === \"string\"\n ? { timeEstimate: Reflect.get(value, \"timeEstimate\") as number | string }\n : {}),\n };\n}\n\nfunction readRecordString(value: unknown, key: string): string | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n const field = Reflect.get(value, key);\n return typeof field === \"string\" && field.trim() ? field.trim() : undefined;\n}\n\nexport function createExecutionId(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n return `swap_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n}\n\nfunction invalidBuild(error: unknown): SwapSdkError {\n return new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n \"Invalid swap build response\",\n {\n cause: error,\n details:\n error instanceof ZodError\n ? {\n issues: error.issues.map((issue) => ({\n path: issue.path.join(\".\"),\n message: issue.message,\n })),\n }\n : undefined,\n }\n );\n}\n","import { SwapSdkError } from \"../core/errors\";\n\nexport type ChainRef =\n | `${number}`\n | \"solana\"\n | \"aptos\"\n | \"near\"\n | \"tron\"\n | \"btc\"\n | \"zcash\"\n | \"sui\";\n\nexport type BaseUnitAmount = string;\n\nexport interface AssetRef {\n chain: ChainRef;\n address: string;\n symbol?: string;\n decimals?: number;\n isNative?: boolean;\n}\n\nconst BASE_UNIT_AMOUNT = /^(0|[1-9]\\d*)$/;\n\nexport function assertBaseUnitAmount(value: string): BaseUnitAmount {\n if (!BASE_UNIT_AMOUNT.test(value)) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `Invalid base-unit amount: ${value}`\n );\n }\n\n return value;\n}\n","import type {\n SwapQuoteDataRaw,\n SwapQuoteRequestRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport { assertBaseUnitAmount } from \"../types/chain\";\nimport type {\n BuildContext,\n Quote,\n QuoteRequest,\n RouteSummary,\n} from \"../types/quote\";\nimport { toApiAssetAddress, toApiChain } from \"./chain\";\n\nconst DEFAULT_QUOTE_WAITING_TIME_MS = 3000;\nconst DEFAULT_SAME_CHAIN_TIMEOUT_MS = 500;\nconst DEFAULT_CROSS_CHAIN_TIMEOUT_MS = 3000;\n\nexport function serializeQuoteRequest(\n request: QuoteRequest\n): SwapQuoteRequestRaw {\n validateQuoteRequest(request);\n\n return {\n ...(request.extensions ?? {}),\n fromChain: toApiChain(request.fromChain),\n toChain: toApiChain(request.toChain),\n tokenIn: toApiAssetAddress(request.tokenIn),\n tokenOut: toApiAssetAddress(request.tokenOut),\n amountIn: request.amountIn,\n slippage: request.slippageBps,\n quoteWaitingTimeMs:\n request.quoteWaitingTimeMs ?? DEFAULT_QUOTE_WAITING_TIME_MS,\n sameChainTimeoutMs:\n request.sameChainTimeoutMs ?? DEFAULT_SAME_CHAIN_TIMEOUT_MS,\n crossChainTimeoutMs:\n request.crossChainTimeoutMs ?? DEFAULT_CROSS_CHAIN_TIMEOUT_MS,\n ...(request.confidentiality\n ? { confidentiality: request.confidentiality }\n : {}),\n sender: request.sender.trim(),\n ...(request.recipient?.trim()\n ? { recipient: request.recipient.trim() }\n : {}),\n } as SwapQuoteRequestRaw;\n}\n\nexport function normalizeQuote(\n request: QuoteRequest,\n raw: SwapQuoteDataRaw,\n receivedAt = Date.now()\n): Quote {\n const bestRoute = normalizeRoute(raw.bestQuote, true);\n if (!bestRoute) {\n throw invalidQuote(\"Quote response does not contain a valid best route\");\n }\n\n const quoteId = readOptionalString(raw.bestQuote.quoteId);\n const apiRequest = { ...serializeQuoteRequest(request) };\n delete apiRequest.quoteWaitingTimeMs;\n delete apiRequest.sameChainTimeoutMs;\n delete apiRequest.crossChainTimeoutMs;\n Object.freeze(apiRequest);\n const buildContext: Readonly<BuildContext> = Object.freeze({\n request: apiRequest,\n router: bestRoute.router,\n ...(bestRoute.market ? { market: bestRoute.market } : {}),\n expectedOut: bestRoute.amountOut,\n minAmountOut: bestRoute.minAmountOut,\n preSwap: raw.bestQuote.preSwap ?? null,\n bridge: raw.bestQuote.bridge ?? null,\n ...(quoteId ? { quoteId } : {}),\n });\n const expiresAt = readTimestamp(\n raw.bestQuote.expiresAt ?? raw.bestQuote.expirationTime\n );\n\n return {\n ...(quoteId ? { id: quoteId } : {}),\n fromChain: request.fromChain,\n toChain: request.toChain,\n tokenIn: { ...request.tokenIn },\n tokenOut: { ...request.tokenOut },\n amountIn: validateResponseAmount(request.amountIn, \"amountIn\"),\n estimatedOut: bestRoute.amountOut,\n minAmountOut: bestRoute.minAmountOut,\n route: bestRoute,\n alternatives: readQuoteAlternatives(raw.allQuotes).flatMap((route) => {\n try {\n const normalized = normalizeRoute(route, false);\n return normalized ? [normalized] : [];\n } catch {\n return [];\n }\n }),\n receivedAt,\n ...(expiresAt === undefined ? {} : { expiresAt }),\n buildContext,\n raw,\n };\n}\n\nfunction readQuoteAlternatives(\n value: unknown\n): Record<string, unknown>[] {\n if (!Array.isArray(value)) return [];\n return value.filter(isRecord);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction validateQuoteRequest(request: QuoteRequest): void {\n assertBaseUnitAmount(request.amountIn);\n if (!Number.isInteger(request.slippageBps) || request.slippageBps < 0) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"slippageBps must be a non-negative integer\"\n );\n }\n if (request.slippageBps > 10_000) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"slippageBps cannot exceed 10000\"\n );\n }\n if (\n request.quoteWaitingTimeMs !== undefined &&\n (!Number.isFinite(request.quoteWaitingTimeMs) ||\n !Number.isInteger(request.quoteWaitingTimeMs) ||\n request.quoteWaitingTimeMs < 0)\n ) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"quoteWaitingTimeMs must be a non-negative integer\"\n );\n }\n validateQuoteTimingParameter(\n request.sameChainTimeoutMs,\n \"sameChainTimeoutMs\"\n );\n validateQuoteTimingParameter(\n request.crossChainTimeoutMs,\n \"crossChainTimeoutMs\"\n );\n if (!request.sender.trim()) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"sender is required\"\n );\n }\n if (request.tokenIn.chain !== request.fromChain) {\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n \"quote\",\n \"tokenIn chain does not match fromChain\"\n );\n }\n if (request.tokenOut.chain !== request.toChain) {\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n \"quote\",\n \"tokenOut chain does not match toChain\"\n );\n }\n}\n\nfunction validateQuoteTimingParameter(\n value: number | undefined,\n field: \"sameChainTimeoutMs\" | \"crossChainTimeoutMs\"\n): void {\n if (\n value !== undefined &&\n (!Number.isFinite(value) || !Number.isInteger(value) || value < 0)\n ) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `${field} must be a non-negative integer`\n );\n }\n}\n\nfunction normalizeRoute(\n raw: Record<string, unknown>,\n required: boolean\n): RouteSummary | undefined {\n const router = readOptionalString(raw.router);\n const amountOutValue = raw.amountOut ?? raw.estimatedOut;\n const amountOut = readOptionalString(amountOutValue);\n const minAmountOut = readOptionalString(raw.minAmountOut) ?? amountOut;\n\n if (!router || !amountOut || !minAmountOut) {\n if (required) throw invalidQuote(\"Quote response is missing route fields\");\n return undefined;\n }\n\n return {\n router,\n ...(readOptionalString(raw.market)\n ? { market: readOptionalString(raw.market) }\n : {}),\n amountOut: validateResponseAmount(amountOut, \"amountOut\"),\n minAmountOut: validateResponseAmount(minAmountOut, \"minAmountOut\"),\n raw,\n };\n}\n\nfunction validateResponseAmount(value: string, field: string): string {\n try {\n return assertBaseUnitAmount(value);\n } catch (error) {\n throw invalidQuote(`Quote response has invalid ${field}`, error);\n }\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction readTimestamp(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && /^\\d+$/.test(value)) return Number(value);\n return undefined;\n}\n\nfunction invalidQuote(message: string, cause?: unknown): SwapSdkError {\n return new SwapSdkError(\"INVALID_API_RESPONSE\", \"quote\", message, {\n cause,\n });\n}\n","import { z } from \"zod\";\nimport type {\n SwapHistoryDataRaw,\n SwapHistoryRecordRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport type { AssetRef, ChainRef } from \"../types/chain\";\nimport type {\n HistoryStatus,\n SwapHistoryItem,\n SwapHistoryPage,\n} from \"../types/history\";\nimport { fromApiChain } from \"./chain\";\nimport { decimalStringSchema } from \"./schemas\";\n\nconst historyRecordSchema = z\n .object({\n id: z.number().int(),\n sender: z.string(),\n recipient: z.unknown().optional(),\n from_hash: z.string(),\n to_hash: z.string().nullable().optional(),\n deposit_address: z.string().optional(),\n from_token: z.string(),\n to_token: z.string(),\n from_chain: z.string(),\n to_chain: z.string(),\n amount_in: decimalStringSchema.optional(),\n estimated_out: decimalStringSchema.optional(),\n actual_out: decimalStringSchema.nullable().optional(),\n router: z.string().optional(),\n status: z.string().optional(),\n swap_id: z.string().nullable().optional(),\n status_response: z.record(z.string(), z.unknown()).optional(),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n })\n .passthrough();\n\nconst historyPageSchema = z.object({\n record_list: z.array(historyRecordSchema),\n page_number: z.number().int().nonnegative(),\n page_size: z.number().int().nonnegative(),\n total_page: z.number().int().nonnegative(),\n total_size: z.number().int().nonnegative(),\n});\n\nconst HISTORY_STATUS_MAP: Record<string, HistoryStatus> = {\n PENDING: \"pending\",\n CREATED: \"pending\",\n PROCESSING: \"processing\",\n IN_PROGRESS: \"processing\",\n SUCCESS: \"completed\",\n COMPLETED: \"completed\",\n FILLED: \"completed\",\n FAILED: \"failed\",\n REFUNDED: \"refunded\",\n EXPIRED: \"expired\",\n};\n\nconst NATIVE_ASSET_IDS: Partial<Record<ChainRef, readonly string[]>> = {\n solana: [\n \"sol\",\n \"So11111111111111111111111111111111111111112\",\n ],\n aptos: [\"0xa\", \"0x1::aptos_coin::AptosCoin\"],\n near: [\"near\", \"wrap.near\"],\n tron: [\"trx\"],\n btc: [\"btc\", \"bitcoin\"],\n zcash: [\"zec\", \"zcash\", \"nep141:zec.omft.near\"],\n sui: [\"0x2::sui::SUI\"],\n};\n\nexport function normalizeHistory(raw: SwapHistoryDataRaw): SwapHistoryPage {\n const parsed = historyPageSchema.safeParse(raw);\n if (!parsed.success) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"history\",\n \"Invalid swap history response\",\n {\n details: {\n issues: parsed.error.issues.map((issue) => ({\n path: issue.path.join(\".\"),\n message: issue.message,\n })),\n },\n }\n );\n }\n\n return {\n items: raw.record_list.map(normalizeHistoryItem),\n page: raw.page_number,\n pageSize: raw.page_size,\n totalPages: raw.total_page,\n totalItems: raw.total_size,\n };\n}\n\nexport function normalizeHistoryStatus(status: unknown): HistoryStatus {\n if (typeof status !== \"string\") return \"unknown\";\n return HISTORY_STATUS_MAP[status.trim().toUpperCase()] ?? \"unknown\";\n}\n\nfunction normalizeHistoryItem(raw: SwapHistoryRecordRaw): SwapHistoryItem {\n const fromChain = fromApiChain(raw.from_chain);\n const toChain = fromApiChain(raw.to_chain);\n const createdAt = normalizeTimestamp(raw.created_at);\n const updatedAt = normalizeTimestamp(raw.updated_at);\n\n return {\n id: String(raw.id),\n sender: raw.sender,\n ...(typeof raw.recipient === \"string\" && raw.recipient\n ? { recipient: raw.recipient }\n : {}),\n fromChain,\n toChain,\n tokenIn: normalizeHistoryAsset(fromChain, raw.from_token),\n tokenOut: normalizeHistoryAsset(toChain, raw.to_token),\n ...(raw.amount_in !== undefined ? { amountIn: raw.amount_in } : {}),\n ...(raw.estimated_out !== undefined\n ? { estimatedOut: raw.estimated_out }\n : {}),\n ...(raw.actual_out !== undefined && raw.actual_out !== null\n ? { actualOut: raw.actual_out }\n : {}),\n ...(raw.from_hash ? { sourceTxHash: raw.from_hash } : {}),\n ...(raw.to_hash ? { destinationTxHash: raw.to_hash } : {}),\n ...(raw.swap_id ? { orderId: raw.swap_id } : {}),\n ...(raw.deposit_address ? { depositAddress: raw.deposit_address } : {}),\n ...(raw.router ? { router: raw.router } : {}),\n status: normalizeHistoryStatus(raw.status),\n ...(createdAt ? { createdAt } : {}),\n ...(updatedAt ? { updatedAt } : {}),\n ...(raw.status_response ? { statusResponse: raw.status_response } : {}),\n raw,\n };\n}\n\nfunction normalizeHistoryAsset(chain: ChainRef, address: string): AssetRef {\n return {\n chain,\n address,\n ...(isNativeAsset(chain, address) ? { isNative: true } : {}),\n };\n}\n\nfunction isNativeAsset(chain: ChainRef, address: string): boolean {\n const normalized = address.trim().toLowerCase();\n if (\n /^[1-9]\\d*$/.test(chain) &&\n (normalized === \"0x0000000000000000000000000000000000000000\" ||\n normalized === \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\")\n ) {\n return true;\n }\n return (NATIVE_ASSET_IDS[chain] ?? []).some(\n (candidate) => candidate.toLowerCase() === normalized\n );\n}\n\nfunction normalizeTimestamp(value: string | undefined): string | undefined {\n if (!value?.trim()) return undefined;\n const trimmed = value.trim();\n const normalized = /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?$/.test(\n trimmed\n )\n ? `${trimmed.replace(\" \", \"T\")}Z`\n : trimmed;\n const date = new Date(normalized);\n return Number.isNaN(date.getTime()) ? undefined : date.toISOString();\n}\n","import type {\n SwapCrossChainToTokensDataRaw,\n SwapFromTokensDataRaw,\n SwapTokenListRowRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport type { ChainRef } from \"../types/chain\";\nimport type { SwapTokenListItem } from \"../types/tokens\";\n\ninterface TokenListChainMetadata {\n chain: ChainRef;\n blockchain: string;\n}\n\nconst TOKEN_LIST_CHAIN_METADATA = new Map<number, TokenListChainMetadata>([\n [1, { chain: \"1\", blockchain: \"eth\" }],\n [10, { chain: \"10\", blockchain: \"op\" }],\n [43114, { chain: \"43114\", blockchain: \"avax\" }],\n [4663, { chain: \"4663\", blockchain: \"robinhood\" }],\n [747474, { chain: \"747474\", blockchain: \"katana\" }],\n [146, { chain: \"146\", blockchain: \"sonic\" }],\n [130, { chain: \"130\", blockchain: \"unichain\" }],\n [1672, { chain: \"1672\", blockchain: \"pharos\" }],\n [4217, { chain: \"4217\", blockchain: \"tempo\" }],\n [56, { chain: \"56\", blockchain: \"bsc\" }],\n [100, { chain: \"100\", blockchain: \"gnosis\" }],\n [137, { chain: \"137\", blockchain: \"pol\" }],\n [143, { chain: \"143\", blockchain: \"monad\" }],\n [196, { chain: \"196\", blockchain: \"xlayer\" }],\n [8453, { chain: \"8453\", blockchain: \"base\" }],\n [9745, { chain: \"9745\", blockchain: \"plasma\" }],\n [42161, { chain: \"42161\", blockchain: \"arb\" }],\n [80094, { chain: \"80094\", blockchain: \"bera\" }],\n [195, { chain: \"tron\", blockchain: \"tron\" }],\n [501, { chain: \"solana\", blockchain: \"sol\" }],\n [784, { chain: \"sui\", blockchain: \"sui\" }],\n [900001, { chain: \"near\", blockchain: \"near\" }],\n [900002, { chain: \"btc\", blockchain: \"btc\" }],\n [900010, { chain: \"zcash\", blockchain: \"zec\" }],\n [900012, { chain: \"aptos\", blockchain: \"aptos\" }],\n]);\n\nexport function normalizeFromTokenList(\n raw: SwapFromTokensDataRaw,\n chainId: number\n): SwapTokenListItem[] {\n if (!isRecord(raw) || Array.isArray(raw)) {\n throw invalidTokenList(\"From-token response data must be an object\");\n }\n return normalizeRows(Object.values(raw), chainId);\n}\n\nexport function normalizeCrossChainToTokenList(\n raw: SwapCrossChainToTokensDataRaw,\n chainId: number\n): SwapTokenListItem[] {\n if (!isRecord(raw) || !Array.isArray(raw.tokens)) {\n throw invalidTokenList(\n \"Cross-chain to-token response data must contain a tokens array\"\n );\n }\n return normalizeRows(raw.tokens, chainId);\n}\n\nfunction normalizeRows(\n rows: unknown[],\n chainId: number\n): SwapTokenListItem[] {\n const tokens = rows\n .map((row) => normalizeRow(row, chainId))\n .filter((token): token is SwapTokenListItem => token !== undefined);\n if (rows.length > 0 && tokens.length === 0) {\n throw invalidTokenList(\"Token-list response contains no valid token rows\");\n }\n return tokens;\n}\n\nfunction normalizeRow(\n value: unknown,\n chainId: number\n): SwapTokenListItem | undefined {\n if (!isRecord(value)) return undefined;\n const row = value as SwapTokenListRowRaw;\n const assetId =\n readString(row.assetId) ??\n readString(row.address) ??\n readString(row.contractAddress) ??\n readString(row.coinType);\n const symbol = readString(row.symbol);\n const decimals = readDecimals(row.decimals);\n if (!assetId || !symbol || decimals === undefined) return undefined;\n\n const metadata = TOKEN_LIST_CHAIN_METADATA.get(chainId);\n const chain = metadata?.chain ?? (String(chainId) as ChainRef);\n const blockchain =\n readString(row.blockchain)?.toLowerCase() ??\n metadata?.blockchain ??\n String(chainId);\n const rawAddress =\n readString(row.contractAddress) ??\n readString(row.address) ??\n readString(row.coinType);\n const isNative = isNativeToken({\n row,\n chain,\n blockchain,\n assetId,\n rawAddress,\n symbol,\n });\n const sources = Array.isArray(row.sources)\n ? row.sources.filter(\n (source): source is string =>\n typeof source === \"string\" && source.trim().length > 0\n )\n : readString(row.platform)\n ? [readString(row.platform)!]\n : [];\n const price =\n typeof row.price === \"string\" || typeof row.price === \"number\"\n ? row.price\n : null;\n const priceUpdatedAt =\n typeof row.updated_at === \"number\" && Number.isFinite(row.updated_at)\n ? row.updated_at\n : null;\n\n return {\n chain,\n address: assetId,\n symbol,\n decimals,\n isNative,\n tokenListChainId: chainId,\n blockchain,\n assetId,\n contractAddress: isNative ? null : rawAddress ?? null,\n coinType: readString(row.coinType) ?? null,\n name: readString(row.name) ?? null,\n logoURI: readString(row.logoURI) ?? null,\n price,\n priceUpdatedAt,\n sources,\n raw: { ...row },\n };\n}\n\nfunction isNativeToken(input: {\n row: SwapTokenListRowRaw;\n chain: ChainRef;\n blockchain: string;\n assetId: string;\n rawAddress?: string;\n symbol: string;\n}): boolean {\n if (input.row.isNative === true) return true;\n const address = (input.rawAddress ?? \"\").toLowerCase();\n const assetId = input.assetId.toLowerCase();\n const coinType = readString(input.row.coinType)?.toLowerCase() ?? \"\";\n\n if (/^[1-9]\\d*$/.test(input.chain)) {\n return (\n address === \"0x0000000000000000000000000000000000000000\" ||\n address === \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\" ||\n ((input.blockchain === \"pol\" || input.blockchain === \"polygon\") &&\n address === \"0x0000000000000000000000000000000000001010\")\n );\n }\n if (input.chain === \"solana\") {\n return (\n address === \"11111111111111111111111111111111\" ||\n assetId === \"nep141:sol.omft.near\"\n );\n }\n if (input.chain === \"tron\") {\n return input.symbol.toUpperCase() === \"TRX\";\n }\n if (input.chain === \"sui\") {\n return address.endsWith(\"::sui::sui\");\n }\n if (input.chain === \"aptos\") {\n if (coinType === \"0x1::aptos_coin::aptoscoin\") return true;\n if (!/^0x[0-9a-f]+$/.test(address)) return false;\n const compactAddress = address.slice(2).replace(/^0+/, \"\") || \"0\";\n return compactAddress === \"a\";\n }\n return false;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim()\n ? value.trim()\n : undefined;\n}\n\nfunction readDecimals(value: unknown): number | undefined {\n const decimals =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\" && value.trim()\n ? Number(value)\n : Number.NaN;\n return Number.isInteger(decimals) && decimals >= 0 ? decimals : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction invalidTokenList(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_API_RESPONSE\", \"tokens\", message);\n}\n","import { SwapSdkError } from \"../core/errors\";\nimport type { McaWithdrawCollateral } from \"./types\";\n\nexport interface ResolveMcaWithdrawPolicyInput {\n /** Requested withdraw amount in Burrow internal decimals. */\n amountBurrow: string;\n /** Current supplied balance for the token in Burrow internal decimals. */\n suppliedBalance: string;\n availableBalance: string;\n /** Human/display withdraw amount, in the same precision as availableBalance. */\n amountIn: string;\n isMax: boolean;\n}\n\ninterface DecimalParts {\n digits: bigint;\n scale: number;\n}\n\nexport function resolveMcaWithdrawPolicy(\n input: ResolveMcaWithdrawPolicyInput\n): McaWithdrawCollateral & { needDecrease: boolean; withdrawAll: boolean } {\n const decreaseCollateral = resolveMcaRequiredCollateralDecrease({\n amountBurrow: input.amountBurrow,\n suppliedBalance: input.suppliedBalance,\n });\n const available = parseDecimal(input.availableBalance, \"availableBalance\");\n const amount = parseDecimal(input.amountIn, \"amountIn\");\n\n return {\n ...decreaseCollateral,\n withdrawAll:\n input.isMax ||\n (available.digits > 0n && isAtLeastWithdrawAllThreshold(amount, available)),\n };\n}\n\nexport interface ResolveMcaRequiredCollateralDecreaseInput {\n amountBurrow: string;\n suppliedBalance: string;\n}\n\n/**\n * Matches Lending Withdraw and multi-chain-lending's 2026-08-20 hotfix:\n * only the part of the requested withdraw that exceeds supplied balance must\n * be removed from collateral.\n */\nexport function resolveMcaRequiredCollateralDecrease(\n input: ResolveMcaRequiredCollateralDecreaseInput\n): Pick<McaWithdrawCollateral, \"needDecrease\" | \"decreaseAmountBurrow\"> & {\n needDecrease: boolean;\n} {\n const amount = parseBurrowDecimal(input.amountBurrow, \"amountBurrow\");\n const supplied = parseBurrowDecimal(\n input.suppliedBalance,\n \"suppliedBalance\"\n );\n const [amountScaled, suppliedScaled] = alignScale(amount, supplied);\n const decreaseScaled =\n amountScaled > suppliedScaled ? amountScaled - suppliedScaled : 0n;\n return resolveParsedMcaDecreaseCollateral({\n digits: decreaseScaled,\n scale: Math.max(amount.scale, supplied.scale),\n });\n}\n\n/**\n * Derive needDecreaseCollateral from an already-computed required decrease and\n * serialize it in canonical, non-exponential decimal form.\n */\nexport function resolveMcaDecreaseCollateral(\n decreaseAmountBurrow: string,\n field = \"decreaseAmountBurrow\"\n): Pick<McaWithdrawCollateral, \"needDecrease\" | \"decreaseAmountBurrow\"> & {\n needDecrease: boolean;\n} {\n const parsed = parseBurrowDecimal(decreaseAmountBurrow, field);\n return resolveParsedMcaDecreaseCollateral(parsed);\n}\n\nfunction resolveParsedMcaDecreaseCollateral(\n parsed: DecimalParts\n): Pick<McaWithdrawCollateral, \"needDecrease\" | \"decreaseAmountBurrow\"> & {\n needDecrease: boolean;\n} {\n const needDecrease = parsed.digits > 0n;\n return {\n needDecrease,\n decreaseAmountBurrow: needDecrease ? formatDecimal(parsed) : \"0\",\n };\n}\n\nfunction isAtLeastWithdrawAllThreshold(\n amount: DecimalParts,\n available: DecimalParts\n): boolean {\n const [amountScaled, availableScaled] = alignScale(amount, available);\n return amountScaled * 1_000_000n >= availableScaled * 999_999n;\n}\n\nfunction alignScale(a: DecimalParts, b: DecimalParts): [bigint, bigint] {\n const scale = Math.max(a.scale, b.scale);\n return [\n a.digits * pow10(scale - a.scale),\n b.digits * pow10(scale - b.scale),\n ];\n}\n\nfunction parseDecimal(value: string, field: string): DecimalParts {\n const trimmed = value.trim();\n if (!/^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/.test(trimmed)) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `${field} must be a non-negative decimal string`\n );\n }\n const [integer = \"0\", fraction = \"\"] = trimmed.split(\".\");\n return {\n digits: BigInt(`${integer}${fraction}`),\n scale: fraction.length,\n };\n}\n\nfunction parseBurrowDecimal(value: string, field: string): DecimalParts {\n const trimmed = value.trim();\n const match = /^(?:([0-9]+)(?:\\.([0-9]*))?|\\.([0-9]+))(?:[eE]([+-]?[0-9]+))?$/.exec(\n trimmed\n );\n if (!match) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `${field} must be a non-negative decimal string`\n );\n }\n\n const integer = match[1] ?? \"0\";\n const fraction = match[2] ?? match[3] ?? \"\";\n const exponent = Number(match[4] ?? \"0\");\n if (!Number.isSafeInteger(exponent) || Math.abs(exponent) > 100_000) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `${field} exponent is out of range`\n );\n }\n\n let digits = BigInt(`${integer}${fraction}` || \"0\");\n let scale = fraction.length - exponent;\n if (scale < 0) {\n digits *= pow10(-scale);\n scale = 0;\n }\n return { digits, scale };\n}\n\nfunction formatDecimal(value: DecimalParts): string {\n if (value.digits === 0n) return \"0\";\n if (value.scale === 0) return value.digits.toString();\n\n const padded = value.digits.toString().padStart(value.scale + 1, \"0\");\n const splitAt = padded.length - value.scale;\n const integer = padded.slice(0, splitAt);\n const fraction = padded.slice(splitAt).replace(/0+$/, \"\");\n return fraction ? `${integer}.${fraction}` : integer;\n}\n\nfunction pow10(exponent: number): bigint {\n return 10n ** BigInt(exponent);\n}\n","import type {\n SwapMcaPayloadRaw,\n SwapQuoteRequestRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport { serializeQuoteRequest } from \"../normalizers/quote\";\nimport type { Quote } from \"../types/quote\";\nimport { resolveMcaDecreaseCollateral } from \"./collateral\";\nimport type {\n McaDepositQuote,\n McaQuote,\n McaQuoteRequest,\n McaSignerIdentity,\n McaWithdrawQuoteRequest,\n} from \"./types\";\n\nexport function serializeMcaQuoteRequest(\n request: McaQuoteRequest,\n signer: McaSignerIdentity\n): SwapQuoteRequestRaw {\n const mcaAccountId = request.mcaAccountId.trim();\n if (!mcaAccountId) {\n throw invalidRequest(\"mcaAccountId is required\");\n }\n if (signer.chain !== request.signerChain) {\n throw invalidRequest(\n `Resolved signer chain ${signer.chain} does not match requested signer chain ${request.signerChain}`\n );\n }\n const identityKey = signer.identityKey.trim();\n if (!identityKey) {\n throw invalidRequest(\"signer identityKey is required\");\n }\n const decreaseCollateral =\n request.flow === \"withdraw\"\n ? resolveMcaDecreaseCollateral(\n request.collateral.decreaseAmountBurrow,\n \"collateral.decreaseAmountBurrow\"\n )\n : undefined;\n\n const mca: SwapMcaPayloadRaw = {\n flow: request.flow,\n mcaAccountId,\n signer: {\n chain: signer.chain,\n identityKey,\n },\n ...(request.flow === \"deposit\"\n ? { useAsCollateral: request.collateral.useAsCollateral }\n : {\n needDecreaseCollateral: decreaseCollateral!.needDecrease,\n decreaseCollateralAmountBurrow:\n decreaseCollateral!.decreaseAmountBurrow,\n ...(request.collateral.withdrawAll ? { withdrawAll: true } : {}),\n }),\n ...(request.recipientMsgSignatures\n ? { recipientMsgSignatures: [...request.recipientMsgSignatures] }\n : {}),\n ...(request.depositSignerProofSignatures\n ? {\n depositSignerProofSignatures: [\n ...request.depositSignerProofSignatures,\n ],\n }\n : {}),\n };\n\n return {\n ...serializeQuoteRequest(request),\n mca,\n };\n}\n\nexport function normalizeMcaQuote(\n request: McaQuoteRequest,\n signer: McaSignerIdentity,\n quote: Quote\n): McaQuote {\n const mca = serializeMcaQuoteRequest(request, signer).mca!;\n const base = {\n ...quote,\n flow: request.flow,\n mcaAccountId: request.mcaAccountId.trim(),\n signer: Object.freeze({\n ...signer,\n identityKey: signer.identityKey.trim(),\n }),\n request,\n mca: Object.freeze({ ...mca }),\n };\n\n if (request.flow === \"deposit\") {\n if (readString(quote.raw.nearDepositTxError)) {\n throw invalidResponse(String(quote.raw.nearDepositTxError));\n }\n return {\n ...base,\n flow: \"deposit\",\n executionMode: \"deposit\",\n request,\n ...(quote.raw.nearDepositTx === undefined\n ? {}\n : { nearDepositTx: quote.raw.nearDepositTx }),\n } satisfies McaDepositQuote;\n }\n\n if (readString(quote.raw.nearMcaWithdrawTxError)) {\n throw invalidResponse(String(quote.raw.nearMcaWithdrawTxError));\n }\n\n const mode = resolveWithdrawMode(request);\n const preview =\n mode === \"withdraw-near\"\n ? quote.raw.nearMcaWithdrawTx ?? quote.raw.mcaWithdrawToIntents\n : quote.raw.mcaWithdrawToIntents;\n if (!isPlainObject(preview)) {\n throw invalidResponse(\n mode === \"withdraw-near\"\n ? \"MCA withdraw quote is missing nearMcaWithdrawTx\"\n : \"MCA withdraw quote is missing mcaWithdrawToIntents\"\n );\n }\n\n return {\n ...base,\n flow: \"withdraw\",\n executionMode: mode,\n request,\n preview,\n };\n}\n\nfunction resolveWithdrawMode(\n request: McaWithdrawQuoteRequest\n): \"withdraw-near\" | \"withdraw-relayer\" {\n if (request.executionPreference === \"near\") return \"withdraw-near\";\n if (request.executionPreference === \"relayer\") return \"withdraw-relayer\";\n\n const recipient = request.recipient?.trim();\n const boundNearAccountId = request.boundNearAccountId?.trim();\n return request.toChain === \"near\" &&\n Boolean(recipient) &&\n recipient === boundNearAccountId\n ? \"withdraw-near\"\n : \"withdraw-relayer\";\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction invalidRequest(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_REQUEST\", \"quote\", message);\n}\n\nfunction invalidResponse(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_API_RESPONSE\", \"quote\", message);\n}\n","import { SwapSdkError } from \"../core/errors\";\nimport type {\n McaSignerChain,\n McaSignerIdentity,\n} from \"./types\";\n\nexport type McaWalletKey =\n | \"EVM\"\n | \"Solana\"\n | \"Bitcoin\"\n | \"Near\"\n | \"Aptos\"\n | \"Sui\"\n | \"Zcash\"\n | \"Tron\";\n\nexport type McaWalletDescriptor = Partial<Record<McaWalletKey, string>>;\n\nexport const DEFAULT_MCA_SIGNER_PRIORITY = [\n \"evm\",\n \"solana\",\n \"btc\",\n \"aptos\",\n \"near\",\n \"zcash\",\n \"sui\",\n \"tron\",\n] as const satisfies readonly McaSignerChain[];\n\nconst WALLET_KEYS: Record<McaSignerChain, McaWalletKey> = {\n evm: \"EVM\",\n solana: \"Solana\",\n btc: \"Bitcoin\",\n near: \"Near\",\n aptos: \"Aptos\",\n sui: \"Sui\",\n zcash: \"Zcash\",\n tron: \"Tron\",\n};\n\nexport function formatMcaWallet(\n chain: McaSignerChain,\n identityKey: string\n): McaWalletDescriptor {\n const identity = identityKey.trim();\n if (!identity) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"sign\",\n \"MCA signer identityKey is required\"\n );\n }\n return {\n [WALLET_KEYS[chain]]:\n chain === \"evm\" ? identity.replace(/^0x/i, \"\") : identity,\n };\n}\n\nexport function selectMcaSigner(\n boundWallets: ReadonlyArray<Readonly<Record<string, unknown>>>,\n connectedSigners: readonly McaSignerIdentity[],\n priority: readonly McaSignerChain[] = DEFAULT_MCA_SIGNER_PRIORITY\n): McaSignerIdentity | undefined {\n for (const chain of priority) {\n const key = WALLET_KEYS[chain];\n const boundValues = boundWallets.flatMap((wallet) => {\n const value = wallet[key];\n return typeof value === \"string\" && value.trim() ? [value.trim()] : [];\n });\n if (boundValues.length === 0) continue;\n\n for (const signer of connectedSigners) {\n if (signer.chain !== chain) continue;\n const candidates = [signer.identityKey, signer.accountId]\n .filter((value): value is string => Boolean(value?.trim()))\n .map((value) => normalizeIdentity(chain, value));\n if (\n boundValues.some((bound) =>\n candidates.includes(normalizeIdentity(chain, bound))\n )\n ) {\n return signer;\n }\n }\n }\n return undefined;\n}\n\nexport function isSameMcaSignerIdentity(\n a: Pick<McaSignerIdentity, \"chain\" | \"identityKey\">,\n b: Pick<McaSignerIdentity, \"chain\" | \"identityKey\">\n): boolean {\n return (\n a.chain === b.chain &&\n normalizeIdentity(a.chain, a.identityKey) ===\n normalizeIdentity(b.chain, b.identityKey)\n );\n}\n\nfunction normalizeIdentity(chain: McaSignerChain, value: string): string {\n const trimmed = value.trim();\n if (chain === \"evm\") return trimmed.replace(/^0x/i, \"\").toLowerCase();\n if (chain === \"sui\" || chain === \"aptos\") return trimmed.toLowerCase();\n return trimmed;\n}\n","import { SwapSdkError } from \"../core/errors\";\nimport { assertBaseUnitAmount, type BaseUnitAmount } from \"../types/chain\";\n\nconst HUMAN_AMOUNT = /^(0|[1-9]\\d*)(?:\\.(\\d+))?$/;\nconst MAX_DECIMALS = 255;\n\nexport function parseUnits(value: string, decimals: number): BaseUnitAmount {\n assertDecimals(decimals);\n const match = HUMAN_AMOUNT.exec(value);\n if (!match) {\n throw invalid(`Invalid human-readable amount: ${value}`);\n }\n const whole = match[1]!;\n const fraction = match[2] ?? \"\";\n if (fraction.length > decimals) {\n throw invalid(\n `Amount has ${fraction.length} fractional digits but token supports ${decimals}`\n );\n }\n const combined = `${whole}${fraction.padEnd(decimals, \"0\")}`;\n return (combined.replace(/^0+(?=\\d)/, \"\") || \"0\") as BaseUnitAmount;\n}\n\nexport function formatUnits(value: BaseUnitAmount, decimals: number): string {\n assertDecimals(decimals);\n const amount = assertBaseUnitAmount(value);\n if (decimals === 0) return amount;\n\n const padded = amount.padStart(decimals + 1, \"0\");\n const whole = padded.slice(0, -decimals);\n const fraction = padded.slice(-decimals).replace(/0+$/, \"\");\n return fraction ? `${whole}.${fraction}` : whole;\n}\n\nfunction assertDecimals(decimals: number): void {\n if (\n !Number.isSafeInteger(decimals) ||\n decimals < 0 ||\n decimals > MAX_DECIMALS\n ) {\n throw invalid(`Invalid token decimals: ${String(decimals)}`);\n }\n}\n\nfunction invalid(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_REQUEST\", \"quote\", message);\n}\n","import type {\n SwapBuildRequestRaw,\n SwapMcaRelayerRequestRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport type { NearTransaction } from \"../types/execution\";\nimport { parseUnits } from \"../utils/units\";\n\nexport function extractMcaWithdrawBusiness(\n preview: unknown\n): Record<string, unknown> | undefined {\n if (!isPlainObject(preview)) return undefined;\n if (isPlainObject(preview.business)) return cloneObject(preview.business);\n return extractPreviewField(preview, \"business\");\n}\n\nexport function extractMcaWithdrawSignerWallet(\n preview: unknown\n): Record<string, unknown> | undefined {\n if (!isPlainObject(preview)) return undefined;\n if (isPlainObject(preview.signer_wallet)) {\n return cloneObject(preview.signer_wallet);\n }\n return extractPreviewField(preview, \"signer_wallet\");\n}\n\nexport interface ExtractMcaWithdrawDepositAddressInput {\n bestQuote?: unknown;\n preview?: unknown;\n snapshotDepositAddress?: string | null;\n storeDepositAddress?: string | null;\n}\n\nexport function extractMcaWithdrawDepositAddress(\n input: ExtractMcaWithdrawDepositAddressInput\n): string {\n return (\n pickString(input.snapshotDepositAddress) ||\n pickString(input.storeDepositAddress) ||\n extractDepositAddressFromObject(input.preview) ||\n extractDepositAddressFromObject(input.bestQuote)\n );\n}\n\nexport interface BuildNearMcaWithdrawTransactionsInput {\n business: Record<string, unknown>;\n signerWallet: Record<string, unknown>;\n signature?: string;\n mcaAccountId: string;\n}\n\nexport function buildNearMcaWithdrawTransactions(\n preview: unknown,\n input: BuildNearMcaWithdrawTransactionsInput\n): NearTransaction[] {\n if (!isPlainObject(preview)) {\n throw invalidPreview(\"MCA withdraw preview must be an object\");\n }\n const fallbackAccount = input.mcaAccountId.trim();\n const executionArgs = {\n business: cloneObject(input.business),\n signer_wallet: cloneObject(input.signerWallet),\n signature: input.signature ?? \"\",\n };\n const transactions = Array.isArray(preview.transactions)\n ? preview.transactions\n : [];\n const mapped = transactions.flatMap((value): NearTransaction[] => {\n if (!isPlainObject(value)) return [];\n const receiverId = pickString(value.contractId) || fallbackAccount;\n if (!receiverId) return [];\n const methodName = pickString(value.methodName) || \"exec\";\n const existingArgs = isPlainObject(value.args)\n ? cloneObject(value.args)\n : {};\n return [\n {\n receiverId,\n actions: [\n {\n type: \"FunctionCall\",\n params: {\n methodName,\n args: { ...existingArgs, ...executionArgs },\n gas: normalizeGas(value.gas),\n deposit: normalizeDeposit(value.deposit),\n },\n },\n ],\n },\n ];\n });\n if (mapped.length > 0) return mapped;\n if (!fallbackAccount) {\n throw invalidPreview(\"MCA withdraw preview is missing mcaAccountId\");\n }\n return [\n {\n receiverId: fallbackAccount,\n actions: [\n {\n type: \"FunctionCall\",\n params: {\n methodName: \"exec\",\n args: executionArgs,\n gas: \"300000000000000\",\n deposit: \"0\",\n },\n },\n ],\n },\n ];\n}\n\nexport interface BuildMcaWithdrawRelayerRequestInput {\n quoteBuild: SwapBuildRequestRaw;\n mcaRelayer: SwapMcaRelayerRequestRaw;\n isCrossChain: boolean;\n depositAddress: string;\n mcaAccountId: string;\n recipientFallback?: string | null;\n}\n\nexport function buildMcaWithdrawRelayerRequest(\n input: BuildMcaWithdrawRelayerRequestInput\n): SwapBuildRequestRaw {\n const mcaAccountId = input.mcaAccountId.trim();\n if (!mcaAccountId) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"build\",\n \"mcaAccountId is required for an MCA relayer request\"\n );\n }\n const recipient =\n pickString(input.quoteBuild.recipient) ||\n pickString(input.recipientFallback);\n return {\n ...input.quoteBuild,\n ...(recipient ? { recipient } : {}),\n mcaRelayer: {\n ...input.mcaRelayer,\n wallet: cloneValue(input.mcaRelayer.wallet),\n business: cloneObject(input.mcaRelayer.business),\n },\n mca: {\n ...(input.quoteBuild.mca ?? {}),\n flow:\n input.quoteBuild.mca?.flow ??\n input.quoteBuild.mca?.mcaFlow ??\n \"withdraw\",\n mcaAccountId,\n },\n deposit_address: input.depositAddress.trim(),\n is_cross_chain: input.isCrossChain,\n tx_type: \"mca-withdraw-relayer\",\n multi_addr: mcaAccountId,\n };\n}\n\nfunction extractPreviewField(\n preview: Record<string, unknown>,\n field: \"business\" | \"signer_wallet\"\n): Record<string, unknown> | undefined {\n const transactions = preview.transactions;\n if (Array.isArray(transactions)) {\n for (const transaction of transactions) {\n if (!isPlainObject(transaction) || !isPlainObject(transaction.args)) {\n continue;\n }\n const value = parseObject(transaction.args[field]);\n if (value) return cloneObject(value);\n }\n }\n\n const actions = preview.actions;\n if (Array.isArray(actions)) {\n for (const action of actions) {\n if (\n !isPlainObject(action) ||\n action.type !== \"FunctionCall\" ||\n !isPlainObject(action.params)\n ) {\n continue;\n }\n const args = parseObject(action.params.args);\n if (!args) continue;\n const value = parseObject(args[field]);\n if (value) return cloneObject(value);\n }\n }\n return undefined;\n}\n\nfunction extractDepositAddressFromObject(value: unknown): string {\n if (!isPlainObject(value)) return \"\";\n const direct = pickString(value.depositAddress) || pickString(value.deposit_address);\n if (direct) return direct;\n if (!isPlainObject(value.deposit)) return \"\";\n return (\n pickString(value.deposit.depositAddress) ||\n pickString(value.deposit.deposit_address)\n );\n}\n\nfunction parseObject(value: unknown): Record<string, unknown> | undefined {\n if (isPlainObject(value)) return value;\n if (typeof value !== \"string\" || !value.trim()) return undefined;\n try {\n const parsed: unknown = JSON.parse(value);\n return isPlainObject(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction pickString(value: unknown): string {\n return typeof value === \"string\" && value.trim() ? value.trim() : \"\";\n}\n\nfunction normalizeGas(value: unknown): string {\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return BigInt(Math.trunc(value)) < 10_000n\n ? (BigInt(Math.trunc(value)) * 1_000_000_000_000n).toString()\n : BigInt(Math.trunc(value)).toString();\n }\n if (typeof value === \"string\" && /^\\d+$/.test(value.trim())) {\n const gas = BigInt(value.trim());\n return gas < 10_000n ? (gas * 1_000_000_000_000n).toString() : gas.toString();\n }\n return \"300000000000000\";\n}\n\nfunction normalizeDeposit(value: unknown): string {\n if (value === undefined || value === null || value === \"\") return \"0\";\n const decimal =\n typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? String(value)\n : typeof value === \"string\"\n ? value.trim()\n : \"\";\n if (!decimal) {\n throw invalidPreview(\"MCA withdraw transaction has an invalid NEAR deposit\");\n }\n try {\n return parseUnits(decimal, 24);\n } catch (error) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n \"MCA withdraw transaction has an invalid NEAR deposit\",\n { cause: error }\n );\n }\n}\n\nfunction cloneObject(\n value: Readonly<Record<string, unknown>>\n): Record<string, unknown> {\n return cloneValue(value) as Record<string, unknown>;\n}\n\nfunction cloneValue<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction invalidPreview(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_API_RESPONSE\", \"build\", message);\n}\n","import type { ApiRequestOptions } from \"../api/ApiClient\";\nimport type {\n SwapReportRequestRaw,\n SwapMcaRelayerRequestRaw,\n} from \"../api/rawTypes\";\nimport type { SwapClient } from \"../client/SwapClient\";\nimport { asSwapSdkError, SwapSdkError } from \"../core/errors\";\nimport type {\n SwapLifecycleEvent,\n SwapWarning,\n} from \"../core/lifecycle\";\nimport type {\n ExecutorIdentityProvider,\n ExecutorMessageSigner,\n} from \"../core/registry\";\nimport { createExecutionId, normalizeBuild } from \"../normalizers/build\";\nimport { normalizeQuote } from \"../normalizers/quote\";\nimport type { SwapBuild } from \"../types/execution\";\nimport type { Quote, QuoteRequest } from \"../types/quote\";\nimport { normalizeMcaQuote, serializeMcaQuoteRequest } from \"./quote\";\nimport { formatMcaWallet, isSameMcaSignerIdentity } from \"./signers\";\nimport type {\n McaQuote,\n McaQuoteRequest,\n McaSignerIdentity,\n McaSwapInput,\n McaSwapResult,\n} from \"./types\";\nimport {\n buildMcaWithdrawRelayerRequest,\n buildNearMcaWithdrawTransactions,\n extractMcaWithdrawBusiness,\n extractMcaWithdrawDepositAddress,\n extractMcaWithdrawSignerWallet,\n} from \"./withdraw\";\n\nexport interface McaSwapServiceConfig {\n now?: () => number;\n maxQuoteAgeMs?: number | null;\n reportMode?: \"auto\" | \"manual\" | \"disabled\";\n onEvent?: (event: SwapLifecycleEvent) => void;\n resolveSignerIdentity(\n chain: McaSignerIdentity[\"chain\"]\n ): ExecutorIdentityProvider;\n resolveMessageSigner(\n chain: McaSignerIdentity[\"chain\"]\n ): ExecutorMessageSigner;\n buildStandardSwap(input: {\n quote: Quote;\n signal?: AbortSignal;\n idempotencyKey?: string;\n }): Promise<SwapBuild>;\n}\n\nexport class McaSwapService {\n private readonly now: () => number;\n private readonly maxQuoteAgeMs: number | null;\n private readonly reportMode: \"auto\" | \"manual\" | \"disabled\";\n private readonly onEvent?: (event: SwapLifecycleEvent) => void;\n private readonly resolveSignerIdentity: McaSwapServiceConfig[\"resolveSignerIdentity\"];\n private readonly resolveMessageSigner: McaSwapServiceConfig[\"resolveMessageSigner\"];\n private readonly buildStandardSwap: McaSwapServiceConfig[\"buildStandardSwap\"];\n private readonly relayerReports = new Map<string, SwapReportRequestRaw>();\n\n constructor(\n private readonly client: SwapClient,\n config: McaSwapServiceConfig\n ) {\n this.now = config.now ?? Date.now;\n this.maxQuoteAgeMs =\n config.maxQuoteAgeMs === undefined ? 30_000 : config.maxQuoteAgeMs;\n this.reportMode = config.reportMode ?? \"auto\";\n this.onEvent = config.onEvent;\n this.resolveSignerIdentity = config.resolveSignerIdentity;\n this.resolveMessageSigner = config.resolveMessageSigner;\n this.buildStandardSwap = config.buildStandardSwap;\n }\n\n async quote(\n request: McaQuoteRequest,\n options: ApiRequestOptions = {}\n ): Promise<McaQuote> {\n const signer = await this.readSignerIdentity(request.signerChain, \"quote\");\n const rawRequest = serializeMcaQuoteRequest(request, signer);\n const raw = await this.client.quoteRaw(rawRequest, options);\n const normalizationRequest: QuoteRequest = {\n ...request,\n extensions: {\n ...(request.extensions ?? {}),\n mca: rawRequest.mca,\n },\n };\n const quote = normalizeQuote(normalizationRequest, raw, this.now());\n return normalizeMcaQuote(request, signer, quote);\n }\n\n async build(input: {\n quote: McaQuote;\n signal?: AbortSignal;\n idempotencyKey?: string;\n }): Promise<SwapBuild> {\n this.assertQuoteFresh(input.quote);\n if (input.quote.executionMode === \"withdraw-relayer\") {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"build\",\n \"MCA relayer withdraw requires a signature and must use swap()\"\n );\n }\n const build =\n input.quote.executionMode === \"deposit\"\n ? await this.buildStandardSwap(input)\n : this.buildNearWithdraw(input.quote);\n return {\n ...build,\n reportContext: {\n ...build.reportContext,\n multiAddr: input.quote.mcaAccountId,\n ...(input.quote.executionMode === \"deposit\"\n ? {\n txType: build.isCrossChain ? \"cross-chain\" : \"same-chain\",\n }\n : {}),\n },\n };\n }\n\n async swap(input: McaSwapInput): Promise<McaSwapResult> {\n this.assertQuoteFresh(input.quote);\n if (input.quote.executionMode === \"withdraw-relayer\") {\n return this.executeRelayerWithdraw({ ...input, quote: input.quote });\n }\n const build = await this.build({\n quote: input.quote,\n signal: input.signal,\n idempotencyKey: input.idempotencyKey,\n });\n const nearStatusKey =\n input.quote.executionMode === \"withdraw-near\" &&\n input.waitFor === \"completed\"\n ? extractMcaWithdrawDepositAddress({\n preview: input.quote.preview,\n bestQuote: input.quote.raw.bestQuote,\n })\n : undefined;\n if (\n input.quote.executionMode === \"withdraw-near\" &&\n input.waitFor === \"completed\" &&\n !nearStatusKey\n ) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"status\",\n \"MCA NEAR withdraw is missing a status deposit address\"\n );\n }\n const result = await this.client.executeSwap({\n build,\n waitFor:\n input.quote.executionMode === \"withdraw-near\" &&\n input.waitFor === \"completed\"\n ? \"source-confirmed\"\n : input.waitFor,\n orderPolling: input.orderPolling,\n signal: input.signal,\n onEvent: input.onEvent,\n });\n if (\n input.quote.executionMode === \"withdraw-near\" &&\n input.waitFor === \"completed\"\n ) {\n const status = await this.client.waitForOrder({\n orderId: nearStatusKey!,\n router: input.quote.route.router,\n ...input.orderPolling,\n signal: input.signal,\n });\n this.emitEvent(\n {\n type: \"order-status\",\n executionId: result.executionId,\n status: status.status,\n },\n input.onEvent\n );\n result.status =\n status.status === \"unknown\" || status.status === \"pending\"\n ? \"processing\"\n : status.status;\n if (status.status === \"completed\") {\n this.emitEvent(\n { type: \"completed\", executionId: result.executionId },\n input.onEvent\n );\n }\n }\n return result;\n }\n\n reportIfManaged(\n result: McaSwapResult\n ): Promise<import(\"../api/rawTypes\").SwapReportDataRaw> | undefined {\n const request = this.relayerReports.get(result.executionId);\n if (!request) return undefined;\n return this.client.reportRaw(request);\n }\n\n private buildNearWithdraw(\n quote: Extract<McaQuote, { executionMode: \"withdraw-near\" }>\n ): SwapBuild {\n const business = extractMcaWithdrawBusiness(quote.preview);\n if (!business) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n \"MCA NEAR withdraw preview is missing business\"\n );\n }\n const recipient = quote.request.recipient?.trim();\n const signerWallet =\n extractMcaWithdrawSignerWallet(quote.preview) ??\n (recipient ? formatMcaWallet(\"near\", recipient) : undefined);\n if (!signerWallet) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"build\",\n \"MCA NEAR withdraw requires a NEAR recipient or signer_wallet\"\n );\n }\n const transactions = buildNearMcaWithdrawTransactions(quote.preview, {\n business,\n signerWallet,\n signature: \"\",\n mcaAccountId: quote.mcaAccountId,\n });\n const request = buildRequestFromQuote(quote);\n const depositAddress = extractMcaWithdrawDepositAddress({\n preview: quote.preview,\n bestQuote: quote.raw.bestQuote,\n });\n const build = normalizeBuild(\n {\n isCrossChain: true,\n chainType: \"near\",\n router: quote.route.router,\n fromChain: request.fromChain,\n toChain: request.toChain,\n tokenIn: {\n address: request.tokenIn,\n symbol: quote.tokenIn.symbol ?? \"\",\n decimals: quote.tokenIn.decimals ?? 0,\n },\n tokenOut: {\n address: request.tokenOut,\n symbol: quote.tokenOut.symbol ?? \"\",\n decimals: quote.tokenOut.decimals ?? 0,\n },\n amountIn: quote.amountIn,\n estimatedOut: quote.estimatedOut,\n minAmountOut: quote.minAmountOut,\n tx: transactions,\n approve: null,\n ...(depositAddress\n ? { deposit: { depositAddress } }\n : {}),\n },\n undefined,\n request\n );\n return {\n ...build,\n reportContext: {\n txType: \"mca-withdraw-near\",\n multiAddr: quote.mcaAccountId,\n ...(depositAddress ? { depositAddress } : {}),\n ...(recipient ? { recipient } : {}),\n isCrossChain: true,\n },\n };\n }\n\n private async executeRelayerWithdraw(\n input: McaSwapInput & {\n quote: Extract<McaQuote, { executionMode: \"withdraw-relayer\" }>;\n }\n ): Promise<McaSwapResult> {\n const executionId = createExecutionId();\n const emit = (event: SwapLifecycleEvent) =>\n this.emitEvent(event, input.onEvent);\n\n try {\n const signer = this.resolveMessageSigner(input.quote.signer.chain);\n const currentSigner = await this.readSignerIdentity(\n input.quote.signer.chain,\n \"sign\",\n signer\n );\n assertSignerMatchesQuote(currentSigner, input.quote.signer);\n const business = extractMcaWithdrawBusiness(input.quote.preview);\n if (!business) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"sign\",\n \"MCA relayer preview is missing business\"\n );\n }\n const message = readString(input.quote.preview.messageToSign);\n if (!message) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"sign\",\n \"MCA relayer preview is missing messageToSign\"\n );\n }\n const depositAddress = extractMcaWithdrawDepositAddress({\n snapshotDepositAddress: readString(input.quote.raw.depositAddress),\n preview: input.quote.preview,\n bestQuote: input.quote.raw.bestQuote,\n });\n if (!depositAddress) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n \"MCA relayer preview is missing a deposit address\"\n );\n }\n\n emit({ type: \"signing-requested\", executionId });\n await input.beforeSign?.({\n chain: currentSigner.chain,\n identityKey: currentSigner.identityKey,\n message,\n business,\n });\n let signature: string;\n try {\n signature = (\n await signer.signMessage(message, {\n signal: input.signal,\n context: {\n flow: \"withdraw\",\n mcaAccountId: input.quote.mcaAccountId,\n business,\n },\n })\n ).trim();\n } catch (error) {\n if (error instanceof SwapSdkError) throw error;\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n \"Failed to sign the MCA relayer message\",\n { cause: error }\n );\n }\n if (!signature) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n \"MCA signer returned an empty signature\"\n );\n }\n\n const mcaRelayer: SwapMcaRelayerRequestRaw = {\n mcaAccountId: input.quote.mcaAccountId,\n wallet: formatMcaWallet(\n currentSigner.chain,\n currentSigner.identityKey\n ),\n business,\n signature,\n };\n const request = buildMcaWithdrawRelayerRequest({\n quoteBuild: buildRequestFromQuote(input.quote),\n mcaRelayer,\n isCrossChain: input.quote.raw.isCrossChain ?? true,\n depositAddress,\n mcaAccountId: input.quote.mcaAccountId,\n recipientFallback: input.quote.request.recipient,\n });\n const raw = await this.client.buildRaw(request, {\n signal: input.signal,\n idempotencyKey: input.idempotencyKey,\n });\n const orderId =\n readString(raw.orderId) ?? readRecordString(raw.deposit, \"orderId\");\n const router = readString(raw.router) ?? input.quote.route.router;\n const submittedDepositAddress =\n readRecordString(raw.deposit, \"depositAddress\") ?? depositAddress;\n if (!orderId || !router) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"submit\",\n \"MCA relayer submission is missing orderId or router\"\n );\n }\n\n const reportRequest: SwapReportRequestRaw = {\n sender: input.quote.request.sender,\n recipient:\n input.quote.request.recipient ?? input.quote.request.sender,\n from_hash: orderId,\n from_token: request.tokenIn,\n to_token: request.tokenOut,\n deposit_address: submittedDepositAddress,\n from_chain: request.fromChain,\n to_chain: request.toChain,\n amount_in: request.amountIn,\n estimated_out: input.quote.estimatedOut,\n router,\n is_cross_chain: true,\n tx_type: \"mca-withdraw-relayer\",\n multi_addr: input.quote.mcaAccountId,\n swapId: orderId,\n ...(request.confidentiality\n ? { confidentiality: request.confidentiality }\n : {}),\n };\n this.relayerReports.set(executionId, reportRequest);\n const result: McaSwapResult = {\n executionId,\n status: \"submitted\",\n router,\n orderId,\n depositAddress: submittedDepositAddress,\n report: { status: \"skipped\" },\n raw,\n };\n emit({ type: \"submitted\", executionId, orderId });\n\n if (this.reportMode === \"auto\") {\n try {\n await this.client.reportRaw(reportRequest, { signal: input.signal });\n result.report = { status: \"reported\" };\n } catch (error) {\n const warning: SwapWarning = {\n code: \"REPORT_FAILED\",\n message: \"MCA withdraw submitted but report failed\",\n cause: error,\n };\n result.report = { status: \"failed\", warning };\n emit({ type: \"warning\", executionId, warning });\n }\n }\n\n if (input.waitFor === \"completed\") {\n const status = await this.client.waitForOrder({\n orderId,\n router,\n ...input.orderPolling,\n signal: input.signal,\n });\n emit({ type: \"order-status\", executionId, status: status.status });\n result.status =\n status.status === \"unknown\" || status.status === \"pending\"\n ? \"processing\"\n : status.status;\n if (status.status === \"completed\") {\n emit({ type: \"completed\", executionId });\n }\n }\n return result;\n } catch (error) {\n const sdkError = asSwapSdkError(error, \"submit\");\n emit({ type: \"failed\", executionId, error: sdkError });\n throw sdkError;\n }\n }\n\n private async readSignerIdentity(\n chain: McaSignerIdentity[\"chain\"],\n stage: \"quote\" | \"sign\",\n provider: ExecutorIdentityProvider = this.resolveSignerIdentity(chain)\n ): Promise<McaSignerIdentity> {\n let identityKey: string;\n try {\n identityKey = (await provider.getIdentityKey()).trim();\n } catch (error) {\n if (error instanceof SwapSdkError) throw error;\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n stage,\n \"Failed to read the MCA signer identity\",\n { cause: error }\n );\n }\n if (!identityKey) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n stage,\n \"MCA executor returned an empty signer identity\"\n );\n }\n return { chain, identityKey };\n }\n\n private emitEvent(\n event: SwapLifecycleEvent,\n local?: (event: SwapLifecycleEvent) => void\n ): void {\n this.onEvent?.(event);\n if (local !== this.onEvent) local?.(event);\n }\n\n private assertQuoteFresh(quote: McaQuote): void {\n const now = this.now();\n const expiredByApi =\n quote.expiresAt !== undefined && now > quote.expiresAt;\n const expiredByAge =\n this.maxQuoteAgeMs !== null &&\n now - quote.receivedAt > Math.max(0, this.maxQuoteAgeMs);\n if (expiredByApi || expiredByAge) {\n throw new SwapSdkError(\n \"QUOTE_EXPIRED\",\n \"build\",\n \"Quote has expired; request a fresh quote\"\n );\n }\n }\n}\n\nfunction buildRequestFromQuote(quote: McaQuote) {\n const context = quote.buildContext;\n return {\n ...context.request,\n router: context.router,\n ...(context.market ? { market: context.market } : {}),\n expectedOut: context.expectedOut,\n minAmountOut: context.minAmountOut,\n preSwap: context.preSwap,\n bridge: context.bridge,\n ...(context.quoteId ? { quoteId: context.quoteId } : {}),\n };\n}\n\nfunction assertSignerMatchesQuote(\n signer: McaSignerIdentity,\n expected: McaSignerIdentity\n): void {\n if (!isSameMcaSignerIdentity(signer, expected)) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n \"MCA signer does not match the signer used for the quote\"\n );\n }\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction readRecordString(\n value: unknown,\n field: string\n): string | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return undefined;\n }\n return readString((value as Record<string, unknown>)[field]);\n}\n","import {\n ApiClient,\n type ApiClientConfig,\n type ApiRequestOptions,\n} from \"../api/ApiClient\";\nimport type {\n SwapBuildDataRaw,\n SwapBuildRequestRaw,\n SwapHistoryDataRaw,\n SwapHistoryAuthChallengeRaw,\n SwapHistoryAuthChallengeRequestRaw,\n SwapHistoryAuthProofRaw,\n SwapHistoryAuthTokenRaw,\n SwapHistoryAuthVerifyRequestRaw,\n SwapHistoryParamsRaw,\n SwapOrderStatusDataRaw,\n SwapOrderSubmitDataRaw,\n SwapQuoteDataRaw,\n SwapQuoteRequestRaw,\n SwapReportDataRaw,\n SwapReportRequestRaw,\n} from \"../api/rawTypes\";\nimport { asSwapSdkError, SwapSdkError } from \"../core/errors\";\nimport {\n normalizeOrderStatus,\n type ExecuteSwapInput,\n type OrderStatusResult,\n type SwapExecutionResult,\n type SwapInput,\n type SwapLifecycleEvent,\n type SwapWarning,\n type WaitForOrderInput,\n} from \"../core/lifecycle\";\nimport { ExecutorRegistry, type ChainExecutor } from \"../core/registry\";\nimport {\n createExecutionId,\n normalizeBuild,\n} from \"../normalizers/build\";\nimport { normalizeQuote, serializeQuoteRequest } from \"../normalizers/quote\";\nimport { normalizeHistory } from \"../normalizers/history\";\nimport {\n normalizeCrossChainToTokenList,\n normalizeFromTokenList,\n} from \"../normalizers/tokens\";\nimport { McaSwapService } from \"../mca/McaSwapService\";\nimport type {\n McaQuote,\n McaQuoteRequest,\n McaSwapInput,\n McaSwapResult,\n} from \"../mca/types\";\nimport type { SwapBuild } from \"../types/execution\";\nimport type { HistoryRequest, SwapHistoryPage } from \"../types/history\";\nimport type { Quote, QuoteRequest } from \"../types/quote\";\nimport type {\n SwapTokenListItem,\n TokenListRequest,\n} from \"../types/tokens\";\n\nexport interface SwapClientConfig extends ApiClientConfig {\n maxQuoteAgeMs?: number | null;\n reportMode?: \"auto\" | \"manual\" | \"disabled\";\n executors?: readonly ChainExecutor[];\n onEvent?: (event: SwapLifecycleEvent) => void;\n now?: () => number;\n /** Token-list cache lifetime in milliseconds. Defaults to 10 minutes; use 0 to disable. */\n tokenListCacheTtlMs?: number;\n}\n\nexport interface BuildSwapInput {\n quote: Quote;\n signal?: AbortSignal;\n idempotencyKey?: string;\n}\n\nexport class SwapClient {\n private readonly managedSwapFlow: McaSwapService;\n protected readonly api: ApiClient;\n protected readonly registry: ExecutorRegistry;\n protected readonly reportMode: \"auto\" | \"manual\" | \"disabled\";\n protected readonly config: SwapClientConfig;\n private readonly now: () => number;\n private readonly inFlight = new Set<string>();\n private readonly reportRequests = new Map<string, SwapReportRequestRaw>();\n private readonly tokenListCache = new Map<\n string,\n { expiresAt: number; tokens: SwapTokenListItem[] }\n >();\n private readonly tokenListInflight = new Map<\n string,\n Promise<SwapTokenListItem[]>\n >();\n\n constructor(config: SwapClientConfig) {\n this.config = config;\n this.api = new ApiClient(config);\n this.registry = new ExecutorRegistry(config.executors ?? []);\n this.reportMode = config.reportMode ?? \"auto\";\n this.now = config.now ?? Date.now;\n this.managedSwapFlow = new McaSwapService(this, {\n now: this.now,\n maxQuoteAgeMs: config.maxQuoteAgeMs,\n reportMode: this.reportMode,\n resolveSignerIdentity: (chain) => this.registry.getSigner(chain),\n resolveMessageSigner: (chain) =>\n this.registry.getSigner(chain, true),\n buildStandardSwap: (input) => this.buildStandardSwap(input),\n ...(config.onEvent ? { onEvent: config.onEvent } : {}),\n });\n }\n\n quoteRaw(\n request: SwapQuoteRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapQuoteDataRaw> {\n return this.api.quote(request, options);\n }\n\n quote(\n request: McaQuoteRequest,\n options?: ApiRequestOptions\n ): Promise<McaQuote>;\n quote(request: QuoteRequest, options?: ApiRequestOptions): Promise<Quote>;\n async quote(\n request: QuoteRequest | McaQuoteRequest,\n options: ApiRequestOptions = {}\n ): Promise<Quote | McaQuote> {\n if (isMcaQuoteRequest(request)) {\n return this.managedSwapFlow.quote(request, options);\n }\n return this.quoteStandard(request, options);\n }\n\n private async quoteStandard(\n request: QuoteRequest,\n options: ApiRequestOptions = {}\n ): Promise<Quote> {\n const rawRequest = serializeQuoteRequest(request);\n\n const raw = await this.api.quote(rawRequest, options);\n return normalizeQuote(request, raw, this.now());\n }\n\n buildRaw(\n request: SwapBuildRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapBuildDataRaw> {\n return this.api.build(request, options);\n }\n\n async getFromTokens(\n request: TokenListRequest,\n options: ApiRequestOptions = {}\n ): Promise<SwapTokenListItem[]> {\n return this.loadTokenList(\"from\", request, options, async () => {\n const raw = await this.api.getFromTokenRows(request.chainId, options);\n return normalizeFromTokenList(raw, request.chainId);\n });\n }\n\n async getCrossChainToTokens(\n request: TokenListRequest,\n options: ApiRequestOptions = {}\n ): Promise<SwapTokenListItem[]> {\n return this.loadTokenList(\"cross-chain-to\", request, options, async () => {\n const raw = await this.api.getCrossChainToTokenRows(\n request.chainId,\n options\n );\n return normalizeCrossChainToTokenList(raw, request.chainId);\n });\n }\n\n private async loadTokenList(\n direction: \"from\" | \"cross-chain-to\",\n request: TokenListRequest,\n options: ApiRequestOptions,\n load: () => Promise<SwapTokenListItem[]>\n ): Promise<SwapTokenListItem[]> {\n if (!Number.isSafeInteger(request.chainId) || request.chainId <= 0) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"tokens\",\n `Token-list chainId must be a positive safe integer: ${String(\n request.chainId\n )}`\n );\n }\n const ttlMs = Math.max(0, this.config.tokenListCacheTtlMs ?? 600_000);\n const key = `${direction}:${request.chainId}`;\n const cached = this.tokenListCache.get(key);\n if (ttlMs > 0 && cached && cached.expiresAt > this.now()) {\n return cloneTokenList(cached.tokens);\n }\n\n const existing = options.signal\n ? undefined\n : this.tokenListInflight.get(key);\n if (existing) return cloneTokenList(await existing);\n\n const pending = load()\n .then((tokens) => {\n if (ttlMs > 0) {\n this.tokenListCache.set(key, {\n expiresAt: this.now() + ttlMs,\n tokens: cloneTokenList(tokens),\n });\n }\n return tokens;\n })\n .finally(() => {\n if (this.tokenListInflight.get(key) === pending) {\n this.tokenListInflight.delete(key);\n }\n });\n if (!options.signal) this.tokenListInflight.set(key, pending);\n return cloneTokenList(await pending);\n }\n\n async buildSwap(input: BuildSwapInput): Promise<SwapBuild> {\n if (isMcaQuote(input.quote)) {\n return this.managedSwapFlow.build({\n quote: input.quote,\n signal: input.signal,\n idempotencyKey: input.idempotencyKey,\n });\n }\n return this.buildStandardSwap(input);\n }\n\n private async buildStandardSwap(input: BuildSwapInput): Promise<SwapBuild> {\n this.assertQuoteFresh(input.quote);\n const executionId = createExecutionId();\n this.emit({ type: \"build-started\", executionId });\n const context = input.quote.buildContext;\n const request: SwapBuildRequestRaw = {\n ...context.request,\n router: context.router,\n ...(context.market ? { market: context.market } : {}),\n expectedOut: context.expectedOut,\n minAmountOut: context.minAmountOut,\n preSwap: context.preSwap,\n bridge: context.bridge,\n ...(context.quoteId ? { quoteId: context.quoteId } : {}),\n };\n const raw = await this.api.build(request, {\n signal: input.signal,\n idempotencyKey: input.idempotencyKey,\n });\n const build = normalizeBuild(raw, executionId, request);\n this.emit({ type: \"build-completed\", executionId });\n return build;\n }\n\n async executeSwap(input: ExecuteSwapInput): Promise<SwapExecutionResult> {\n const { build } = input;\n if (this.inFlight.has(build.executionId)) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"sign\",\n `Execution ${build.executionId} is already in progress`\n );\n }\n\n this.inFlight.add(build.executionId);\n const emit = (event: SwapLifecycleEvent) => {\n this.emit(event);\n if (input.onEvent !== this.config.onEvent) input.onEvent?.(event);\n };\n\n try {\n const executor = this.registry.get(build.execution.kind);\n const context = {\n executionId: build.executionId,\n signal: input.signal,\n waitFor: input.waitFor ?? (\"submitted\" as const),\n emit,\n ...(input.beforeSign ? { beforeSign: input.beforeSign } : {}),\n };\n await executor.validate(build.execution, context);\n emit({ type: \"signing-requested\", executionId: build.executionId });\n const chainResult = await executor.execute(build.execution, context);\n let orderId = chainResult.orderId ?? build.order?.orderId;\n let orderRouter = build.order?.router;\n let orderChainId = build.order?.chainId;\n\n if (chainResult.signature) {\n if (build.execution.kind !== \"evm-signature\") {\n throw new SwapSdkError(\n \"INVALID_TRANSACTION\",\n \"submit\",\n \"Only signature executions can submit signed orders\"\n );\n }\n const submitParams = build.execution.request.submit?.params;\n const submitRouter =\n readNonEmptyString(submitParams?.router) ??\n build.execution.request.router;\n const submitQuoteId =\n readNonEmptyString(submitParams?.quoteId) ??\n build.execution.request.quoteId;\n const signingScheme =\n readNonEmptyString(submitParams?.signingScheme) ??\n chainResult.signingScheme ??\n build.execution.request.signingScheme ??\n \"eip712\";\n const submitted = await this.api.submitOrder(\n {\n router: submitRouter,\n quoteId: submitQuoteId,\n signature: chainResult.signature,\n signingScheme,\n },\n { signal: input.signal }\n );\n orderId = submitted.orderId;\n orderRouter = readNonEmptyString(submitted.router) ?? submitRouter;\n orderChainId = String(\n submitted.chainId ?? build.execution.request.chainId\n );\n }\n\n const result: SwapExecutionResult = {\n executionId: build.executionId,\n status: chainResult.status,\n router: build.router,\n ...(chainResult.txHash ? { txHash: chainResult.txHash } : {}),\n ...(chainResult.txHashes ? { txHashes: chainResult.txHashes } : {}),\n ...(orderId ? { orderId } : {}),\n ...(build.deposit?.depositAddress\n ? { depositAddress: build.deposit.depositAddress }\n : {}),\n report: { status: \"skipped\" },\n raw: chainResult.raw ?? build.raw,\n };\n\n emit({\n type: \"submitted\",\n executionId: build.executionId,\n ...(chainResult.txHash ? { txHash: chainResult.txHash } : {}),\n ...(orderId ? { orderId } : {}),\n });\n if (chainResult.status === \"source-confirmed\") {\n emit({\n type: \"source-confirmed\",\n executionId: build.executionId,\n });\n }\n\n const reportRequest = this.createReportRequest(build, result);\n if (reportRequest) {\n this.reportRequests.set(build.executionId, reportRequest);\n }\n if (this.reportMode === \"auto\" && reportRequest) {\n try {\n await this.api.report(reportRequest, { signal: input.signal });\n result.report = { status: \"reported\" };\n } catch (error) {\n const warning: SwapWarning = {\n code: \"REPORT_FAILED\",\n message: \"Swap submitted but report failed\",\n cause: error,\n };\n result.report = { status: \"failed\", warning };\n emit({ type: \"warning\", executionId: build.executionId, warning });\n }\n }\n\n const waitsForCompletion =\n (input.waitFor ?? \"submitted\") === \"completed\";\n const requiresOrderStatus =\n build.isCrossChain || build.request?.confidentiality === \"basic\";\n if (waitsForCompletion && requiresOrderStatus && !orderId) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"status\",\n \"Swap submitted, but the API did not provide a status key\",\n {\n details: {\n executionId: build.executionId,\n ...(result.txHash ? { txHash: result.txHash } : {}),\n router: orderRouter ?? build.router,\n },\n }\n );\n }\n\n if (waitsForCompletion && orderId) {\n const status = await this.waitForOrder({\n orderId,\n router: orderRouter ?? build.router,\n chainId: orderChainId,\n ...input.orderPolling,\n signal: input.signal,\n });\n result.status =\n status.status === \"unknown\" || status.status === \"pending\"\n ? \"processing\"\n : status.status;\n if (status.status === \"completed\") {\n emit({ type: \"completed\", executionId: build.executionId });\n }\n }\n\n return result;\n } catch (error) {\n const sdkError = asSwapSdkError(error, \"broadcast\");\n emit({ type: \"failed\", executionId: build.executionId, error: sdkError });\n throw sdkError;\n } finally {\n this.inFlight.delete(build.executionId);\n }\n }\n\n swap(input: McaSwapInput): Promise<McaSwapResult>;\n swap(input: SwapInput): Promise<SwapExecutionResult>;\n async swap(\n input: SwapInput | McaSwapInput\n ): Promise<SwapExecutionResult | McaSwapResult> {\n if (isMcaQuote(input.quote)) {\n return this.managedSwapFlow.swap(input as McaSwapInput);\n }\n const regularInput = input as SwapInput;\n const build = await this.buildSwap({\n quote: regularInput.quote,\n signal: regularInput.signal,\n idempotencyKey: regularInput.idempotencyKey,\n });\n return this.executeSwap({\n build,\n waitFor: regularInput.waitFor,\n orderPolling: regularInput.orderPolling,\n signal: regularInput.signal,\n onEvent: regularInput.onEvent,\n beforeSign: regularInput.beforeSign,\n });\n }\n\n async getOrderStatus(\n input: {\n orderId: string;\n router: string;\n chainId?: string;\n signal?: AbortSignal;\n }\n ): Promise<OrderStatusResult> {\n const raw = await this.api.getOrderStatus(\n {\n orderId: input.orderId,\n router: input.router,\n chainId: input.chainId,\n },\n { signal: input.signal }\n );\n return {\n orderId: input.orderId,\n router: input.router,\n status: normalizeOrderStatus(raw),\n raw,\n };\n }\n\n async waitForOrder(input: WaitForOrderInput): Promise<OrderStatusResult> {\n const intervalMs = input.intervalMs ?? 5_000;\n const timeoutMs = input.timeoutMs;\n const startedAt =\n timeoutMs === undefined ? undefined : this.now();\n\n for (;;) {\n if (input.signal?.aborted) {\n throw new SwapSdkError(\n \"REQUEST_ABORTED\",\n \"status\",\n \"Order polling aborted; any submitted transaction is unaffected\"\n );\n }\n const result = await this.getOrderStatus(input);\n if (\n result.status === \"completed\" ||\n result.status === \"failed\" ||\n result.status === \"refunded\" ||\n result.status === \"expired\"\n ) {\n return result;\n }\n if (\n timeoutMs !== undefined &&\n startedAt !== undefined &&\n this.now() - startedAt >= timeoutMs\n ) {\n throw new SwapSdkError(\n \"ORDER_TIMEOUT\",\n \"status\",\n `Order status timed out after ${timeoutMs}ms`,\n { retryable: true }\n );\n }\n await delay(intervalMs, input.signal);\n }\n }\n\n submitOrderRaw(\n request: Parameters<ApiClient[\"submitOrder\"]>[0],\n options: ApiRequestOptions = {}\n ): Promise<SwapOrderSubmitDataRaw> {\n return this.api.submitOrder(request, options);\n }\n\n getOrderStatusRaw(\n request: Parameters<ApiClient[\"getOrderStatus\"]>[0],\n options: ApiRequestOptions = {}\n ): Promise<SwapOrderStatusDataRaw> {\n return this.api.getOrderStatus(request, options);\n }\n\n reportRaw(\n request: SwapReportRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapReportDataRaw> {\n return this.api.report(request, options);\n }\n\n report(result: SwapExecutionResult): Promise<SwapReportDataRaw> {\n const managedReport = this.managedSwapFlow.reportIfManaged(result);\n if (managedReport) return managedReport;\n const request = this.reportRequests.get(result.executionId);\n if (!request) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"report\",\n `No report context for execution ${result.executionId}`\n );\n }\n return this.api.report(request);\n }\n\n retryReport(result: SwapExecutionResult): Promise<SwapReportDataRaw> {\n return this.report(result);\n }\n\n getHistoryRaw(\n params: SwapHistoryParamsRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryDataRaw> {\n return this.api.getHistory(params, options);\n }\n\n createHistoryAuthChallenge(\n request: SwapHistoryAuthChallengeRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthChallengeRaw> {\n return this.api.createHistoryAuthChallenge(request, options);\n }\n\n verifyHistoryAuthChallenge(\n request: SwapHistoryAuthVerifyRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthTokenRaw> {\n return this.api.verifyHistoryAuthChallenge(request, options);\n }\n\n async authorizeConfidentialHistory(\n request: SwapHistoryAuthChallengeRequestRaw,\n signChallenge: (\n challenge: SwapHistoryAuthChallengeRaw\n ) => SwapHistoryAuthProofRaw | Promise<SwapHistoryAuthProofRaw>,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthTokenRaw> {\n const challenge = await this.createHistoryAuthChallenge(request, options);\n assertHistoryChallengeMatchesRequest(challenge, request);\n const proof = await signChallenge(challenge);\n const verifyRequest: SwapHistoryAuthVerifyRequestRaw = {\n challengeId: challenge.challengeId,\n proof,\n };\n const token = await this.verifyHistoryAuthChallenge(verifyRequest, options);\n assertHistoryTokenMatchesChallenge(token, challenge);\n return token;\n }\n\n async getHistory(\n request: HistoryRequest,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryPage> {\n const raw = await this.api.getHistory(\n {\n sender: request.sender,\n ...(request.mode ? { mode: request.mode } : {}),\n ...(request.walletToken ? { walletToken: request.walletToken } : {}),\n ...(request.page !== undefined ? { pageNumber: request.page } : {}),\n ...(request.pageSize !== undefined ? { pageSize: request.pageSize } : {}),\n },\n options\n );\n const page = normalizeHistory(raw);\n if (request.status === undefined) return page;\n\n const statuses = new Set(request.status);\n return {\n ...page,\n items: page.items.filter((item) => statuses.has(item.status)),\n filteredLocally: true,\n };\n }\n\n protected emit(event: SwapLifecycleEvent): void {\n this.config.onEvent?.(event);\n }\n\n private assertQuoteFresh(quote: Quote): void {\n const now = this.now();\n const maxAge =\n this.config.maxQuoteAgeMs === undefined\n ? 30_000\n : this.config.maxQuoteAgeMs;\n const expiredByApi = quote.expiresAt !== undefined && now > quote.expiresAt;\n const expiredByAge =\n maxAge !== null && now - quote.receivedAt > Math.max(0, maxAge);\n if (expiredByApi || expiredByAge) {\n throw new SwapSdkError(\n \"QUOTE_EXPIRED\",\n \"build\",\n \"Quote has expired; request a fresh quote\"\n );\n }\n }\n\n private createReportRequest(\n build: SwapBuild,\n result: SwapExecutionResult\n ): SwapReportRequestRaw | undefined {\n const request = build.request;\n const reportContext = build.reportContext;\n const fromHash =\n reportContext?.fromHash ?? result.txHash ?? result.orderId;\n if (!request || !fromHash) return undefined;\n\n return {\n sender: reportContext?.sender ?? request.sender,\n recipient:\n reportContext?.recipient ?? request.recipient ?? request.sender,\n from_hash: fromHash,\n from_token: request.tokenIn,\n to_token: request.tokenOut,\n deposit_address:\n reportContext?.depositAddress ?? result.depositAddress ?? \"\",\n from_chain: request.fromChain,\n to_chain: request.toChain,\n is_cross_chain:\n reportContext?.isCrossChain ?? build.isCrossChain,\n amount_in: request.amountIn,\n estimated_out: build.estimatedOut,\n router: build.router,\n tx_type:\n reportContext?.txType ??\n (build.isCrossChain ? \"cross-chain\" : \"same-chain\"),\n ...(reportContext?.multiAddr\n ? { multi_addr: reportContext.multiAddr }\n : {}),\n ...(reportContext?.swapId ?? result.orderId\n ? { swapId: reportContext?.swapId ?? result.orderId }\n : {}),\n ...(request.confidentiality\n ? { confidentiality: request.confidentiality }\n : {}),\n };\n }\n}\n\nfunction assertHistoryChallengeMatchesRequest(\n challenge: SwapHistoryAuthChallengeRaw,\n request: SwapHistoryAuthChallengeRequestRaw\n): void {\n const expectedMca = request.mcaAccountId?.trim();\n const principalMatches = expectedMca\n ? challenge.principalType === \"mca\" &&\n challenge.mcaAccountId?.toLowerCase() === expectedMca.toLowerCase()\n : challenge.principalType === \"wallet\" && !challenge.mcaAccountId;\n const identityMatches = request.identityKey\n ? normalizeHistoryIdentity(challenge.chainFamily, challenge.identityKey) ===\n normalizeHistoryIdentity(challenge.chainFamily, request.identityKey)\n : true;\n\n if (\n challenge.chainFamily !== request.chainFamily ||\n challenge.chainId !== request.chainId ||\n normalizeHistoryAddress(challenge.chainFamily, challenge.walletAddress) !==\n normalizeHistoryAddress(request.chainFamily, request.walletAddress) ||\n !identityMatches ||\n !principalMatches ||\n !challenge.queryAddress\n ) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"history\",\n \"Confidential history challenge does not match the requested wallet or MCA\"\n );\n }\n}\n\nfunction assertHistoryTokenMatchesChallenge(\n token: SwapHistoryAuthTokenRaw,\n challenge: SwapHistoryAuthChallengeRaw\n): void {\n const principalMatches =\n token.principalType === challenge.principalType &&\n (challenge.principalType === \"mca\"\n ? token.mcaAccountId?.toLowerCase() ===\n challenge.mcaAccountId?.toLowerCase()\n : !token.mcaAccountId);\n if (!principalMatches || token.queryAddress !== challenge.queryAddress) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"history\",\n \"Confidential history authorization returned a different principal\"\n );\n }\n}\n\nfunction normalizeHistoryAddress(\n chain: SwapHistoryAuthChallengeRaw[\"chainFamily\"],\n value: string\n): string {\n return chain === \"evm\" || chain === \"aptos\" || chain === \"sui\"\n ? value.toLowerCase()\n : value;\n}\n\nfunction normalizeHistoryIdentity(\n chain: SwapHistoryAuthChallengeRaw[\"chainFamily\"],\n value: string\n): string {\n return chain === \"evm\" ||\n chain === \"aptos\" ||\n chain === \"sui\" ||\n chain === \"btc\" ||\n chain === \"zcash\"\n ? value.toLowerCase().replace(/^0x/, \"\")\n : value;\n}\n\nfunction isMcaQuoteRequest(\n request: QuoteRequest | McaQuoteRequest\n): request is McaQuoteRequest {\n if (!(\"flow\" in request) || !(\"mcaAccountId\" in request)) return false;\n const flow = Reflect.get(request, \"flow\");\n const accountId = Reflect.get(request, \"mcaAccountId\");\n return (\n (flow === \"deposit\" || flow === \"withdraw\") &&\n typeof accountId === \"string\" &&\n accountId.trim().length > 0\n );\n}\n\nfunction isMcaQuote(quote: Quote): quote is McaQuote {\n if (!(\"executionMode\" in quote) || !(\"mcaAccountId\" in quote)) {\n return false;\n }\n const mode = Reflect.get(quote, \"executionMode\");\n return (\n mode === \"deposit\" ||\n mode === \"withdraw-near\" ||\n mode === \"withdraw-relayer\"\n );\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction cloneTokenList(tokens: SwapTokenListItem[]): SwapTokenListItem[] {\n return tokens.map((token) => ({\n ...token,\n sources: [...token.sources],\n raw: { ...token.raw },\n }));\n}\n\nfunction delay(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(\n new SwapSdkError(\n \"REQUEST_ABORTED\",\n \"status\",\n \"Order polling aborted; any submitted transaction is unaffected\"\n )\n );\n return;\n }\n const onAbort = () => {\n clearTimeout(timeout);\n reject(\n new SwapSdkError(\n \"REQUEST_ABORTED\",\n \"status\",\n \"Order polling aborted; any submitted transaction is unaffected\"\n )\n );\n };\n const timeout = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, Math.max(0, ms));\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/errors.ts","../src/api/ApiClient.ts","../src/core/lifecycle.ts","../src/core/registry.ts","../src/normalizers/chain.ts","../src/normalizers/schemas.ts","../src/normalizers/build.ts","../src/types/chain.ts","../src/normalizers/quote.ts","../src/normalizers/history.ts","../src/normalizers/tokens.ts","../src/mca/collateral.ts","../src/mca/quote.ts","../src/mca/signers.ts","../src/utils/units.ts","../src/mca/withdraw.ts","../src/mca/McaSwapService.ts","../src/client/SwapClient.ts"],"names":["z","ZodError","isRecord","readString","isPlainObject","normalizeDeposit","readRecordString"],"mappings":"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","file":"index.js","sourcesContent":["export type SwapErrorCode =\n | \"HTTP_ERROR\"\n | \"API_ERROR\"\n | \"RATE_LIMITED\"\n | \"AUTH_FAILED\"\n | \"REQUEST_ABORTED\"\n | \"REQUEST_TIMEOUT\"\n | \"INVALID_REQUEST\"\n | \"INVALID_API_RESPONSE\"\n | \"QUOTE_EXPIRED\"\n | \"ROUTE_NOT_FOUND\"\n | \"EXECUTOR_NOT_FOUND\"\n | \"UNSUPPORTED_CHAIN\"\n | \"CHAIN_MISMATCH\"\n | \"INVALID_TRANSACTION\"\n | \"USER_REJECTED\"\n | \"INSUFFICIENT_BALANCE\"\n | \"APPROVAL_FAILED\"\n | \"SIGNING_FAILED\"\n | \"BROADCAST_FAILED\"\n | \"ORDER_SUBMIT_FAILED\"\n | \"ORDER_TIMEOUT\"\n | \"REPORT_FAILED\";\n\nexport type SwapErrorStage =\n | \"quote\"\n | \"build\"\n | \"approve\"\n | \"sign\"\n | \"broadcast\"\n | \"submit\"\n | \"report\"\n | \"status\"\n | \"tokens\"\n | \"history\";\n\nexport interface SwapSdkErrorOptions {\n retryable?: boolean;\n cause?: unknown;\n details?: Record<string, unknown>;\n}\n\nexport class SwapSdkError extends Error {\n readonly name = \"SwapSdkError\";\n\n constructor(\n readonly code: SwapErrorCode,\n readonly stage: SwapErrorStage,\n message: string,\n readonly options: SwapSdkErrorOptions = {}\n ) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n get retryable(): boolean {\n return this.options.retryable ?? false;\n }\n\n get cause(): unknown {\n return this.options.cause;\n }\n\n get details(): Record<string, unknown> | undefined {\n return this.options.details;\n }\n}\n\nexport function asSwapSdkError(\n error: unknown,\n stage: SwapErrorStage\n): SwapSdkError {\n if (error instanceof SwapSdkError) return error;\n\n const message = error instanceof Error ? error.message : String(error);\n return new SwapSdkError(\"API_ERROR\", stage, message, { cause: error });\n}\n","import { SwapSdkError, SwapErrorStage } from \"../core/errors\";\nimport type { SdkLogEntry, SdkLogger } from \"../core/logger\";\nimport {\n SwapApiResponse,\n SwapCrossChainToTokensDataRaw,\n SwapFromTokensDataRaw,\n SwapBuildDataRaw,\n SwapBuildRequestRaw,\n SwapHistoryDataRaw,\n SwapHistoryAuthChallengeRaw,\n SwapHistoryAuthChallengeRequestRaw,\n SwapHistoryAuthTokenRaw,\n SwapHistoryAuthVerifyRequestRaw,\n SwapHistoryParamsRaw,\n SwapOrderStatusDataRaw,\n SwapOrderStatusParamsRaw,\n SwapOrderSubmitDataRaw,\n SwapOrderSubmitRequestRaw,\n SwapQuoteDataRaw,\n SwapQuoteRequestRaw,\n SwapReportDataRaw,\n SwapReportRequestRaw,\n} from \"./rawTypes\";\n\nexport interface ApiClientConfig {\n baseUrl: string;\n apiKey?: string;\n getAccessToken?: () => string | Promise<string>;\n fetch?: typeof globalThis.fetch;\n headers?:\n | Record<string, string>\n | (() => Record<string, string> | Promise<Record<string, string>>);\n timeoutMs?: number;\n retry?: Partial<RetryConfig>;\n logger?: SdkLogger;\n}\n\nexport interface ApiRequestOptions {\n signal?: AbortSignal;\n idempotencyKey?: string;\n}\n\nexport interface RetryConfig {\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n jitter: boolean;\n}\n\ninterface RequestOptions extends ApiRequestOptions {\n method: \"GET\" | \"POST\";\n body?: unknown;\n query?: Record<string, string | number | undefined | null>;\n retryableOperation?: boolean;\n authenticationToken?: string;\n}\n\ninterface NetworkFailureDetails extends Record<string, unknown> {\n method: RequestOptions[\"method\"];\n path: string;\n attempt: number;\n causeName: string;\n causeMessage: string;\n}\n\nconst DEFAULT_RETRY: RetryConfig = {\n maxRetries: 2,\n baseDelayMs: 250,\n maxDelayMs: 2_000,\n jitter: true,\n};\n\nexport class ApiClient {\n private readonly baseUrl: string;\n private readonly fetchImpl: typeof globalThis.fetch;\n\n constructor(private readonly config: ApiClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, \"\");\n const fetchImpl = config.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"Fetch is unavailable; inject fetch when using Node.js 16\"\n );\n }\n this.fetchImpl = fetchImpl.bind(globalThis);\n }\n\n quote(\n body: SwapQuoteRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapQuoteDataRaw> {\n return this.request(\"/api/v2/swap/quote\", \"quote\", {\n ...options,\n method: \"POST\",\n body,\n retryableOperation: true,\n });\n }\n\n build(\n body: SwapBuildRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapBuildDataRaw> {\n return this.request(\"/api/v2/swap/swap\", \"build\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n submitOrder(\n body: SwapOrderSubmitRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapOrderSubmitDataRaw> {\n return this.request(\"/api/swap/order-submit\", \"submit\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n getOrderStatus(\n params: SwapOrderStatusParamsRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapOrderStatusDataRaw> {\n return this.request(\"/api/swap/order-status\", \"status\", {\n ...options,\n method: \"GET\",\n retryableOperation: true,\n query: {\n orderId: params.orderId,\n router: params.router,\n chainId: params.chainId,\n },\n });\n }\n\n report(\n body: SwapReportRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapReportDataRaw> {\n return this.request(\"/api/swap/report\", \"report\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n getHistory(\n params: SwapHistoryParamsRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryDataRaw> {\n return this.request(\"/api/swap/history\", \"history\", {\n ...options,\n method: \"GET\",\n retryableOperation: true,\n query: {\n sender: params.sender,\n mode: params.mode,\n pageNumber: params.pageNumber,\n pageSize: params.pageSize,\n },\n ...(params.mode === \"confidential\" && params.walletToken\n ? { authenticationToken: params.walletToken }\n : {}),\n });\n }\n\n createHistoryAuthChallenge(\n body: SwapHistoryAuthChallengeRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthChallengeRaw> {\n return this.request(\"/api/swap/history/auth/challenge\", \"history\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n verifyHistoryAuthChallenge(\n body: SwapHistoryAuthVerifyRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthTokenRaw> {\n return this.request(\"/api/swap/history/auth/verify\", \"history\", {\n ...options,\n method: \"POST\",\n body,\n });\n }\n\n getFromTokenRows(\n chainId: number,\n options: ApiRequestOptions = {}\n ): Promise<SwapFromTokensDataRaw> {\n return this.request(\"/get_chain_prices\", \"tokens\", {\n ...options,\n method: \"GET\",\n retryableOperation: true,\n query: { chain: chainId },\n });\n }\n\n getCrossChainToTokenRows(\n chainId: number,\n options: ApiRequestOptions = {}\n ): Promise<SwapCrossChainToTokensDataRaw> {\n return this.request(\"/api/swap/supported_to_tokens\", \"tokens\", {\n ...options,\n method: \"GET\",\n retryableOperation: true,\n query: { chain: chainId },\n });\n }\n\n private async request<T>(\n path: string,\n stage: SwapErrorStage,\n options: RequestOptions\n ): Promise<T> {\n const url = this.buildUrl(path, options.query);\n const headers = await this.buildHeaders(\n options.idempotencyKey,\n options.authenticationToken\n );\n const retry = this.retryConfig();\n let attempt = 1;\n\n for (;;) {\n this.log({\n level: \"debug\",\n event: \"api.request\",\n path,\n stage,\n attempt,\n });\n try {\n return await this.requestOnce<T>(url, path, stage, options, headers, attempt);\n } catch (error) {\n const sdkError =\n error instanceof SwapSdkError\n ? error\n : new SwapSdkError(\"HTTP_ERROR\", stage, \"Network request failed\", {\n cause: error,\n retryable: true,\n });\n const canRetry =\n options.retryableOperation === true &&\n sdkError.retryable &&\n sdkError.code !== \"REQUEST_ABORTED\" &&\n attempt <= retry.maxRetries;\n if (!canRetry) throw sdkError;\n\n this.log({\n level: \"warn\",\n event: \"api.retry\",\n path,\n stage,\n attempt,\n code: sdkError.code,\n });\n await waitForRetry(this.retryDelay(attempt, retry), options.signal, stage);\n attempt += 1;\n }\n }\n }\n\n private async requestOnce<T>(\n url: string,\n path: string,\n stage: SwapErrorStage,\n options: RequestOptions,\n headers: Record<string, string>,\n attempt: number\n ): Promise<T> {\n if (options.signal?.aborted) {\n throw new SwapSdkError(\"REQUEST_ABORTED\", stage, \"Request aborted\", {\n cause: options.signal.reason,\n });\n }\n const controller = new AbortController();\n const timeoutMs = this.config.timeoutMs ?? 15_000;\n let timedOut = false;\n const startedAt = Date.now();\n\n const abortFromCaller = () => controller.abort(options.signal?.reason);\n if (options.signal?.aborted) abortFromCaller();\n options.signal?.addEventListener(\"abort\", abortFromCaller, { once: true });\n\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n\n try {\n const response = await this.fetchImpl(url, {\n method: options.method,\n headers,\n body: options.body === undefined ? undefined : JSON.stringify(options.body),\n signal: controller.signal,\n });\n if (controller.signal.aborted) {\n throw new SwapSdkError(\n timedOut ? \"REQUEST_TIMEOUT\" : \"REQUEST_ABORTED\",\n stage,\n timedOut ? `Request timed out after ${timeoutMs}ms` : \"Request aborted\",\n { retryable: timedOut }\n );\n }\n this.log({\n level: \"debug\",\n event: \"api.response\",\n path,\n stage,\n attempt,\n status: response.status,\n durationMs: Date.now() - startedAt,\n });\n const text = await response.text();\n const parsed = this.parseResponse(text, response.status, stage);\n\n if (!response.ok) {\n const message = this.readMessage(parsed) || `HTTP ${response.status}`;\n if (response.status === 401 || response.status === 403) {\n throw new SwapSdkError(\"AUTH_FAILED\", stage, message);\n }\n if (response.status === 429) {\n throw new SwapSdkError(\"RATE_LIMITED\", stage, message, {\n retryable: true,\n });\n }\n throw new SwapSdkError(\"HTTP_ERROR\", stage, message, {\n retryable: response.status >= 500,\n details: { status: response.status },\n });\n }\n\n if (!this.isEnvelope(parsed)) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n stage,\n \"Invalid unified swap API response envelope\"\n );\n }\n\n if (parsed.code !== 0) {\n throw new SwapSdkError(\n \"API_ERROR\",\n stage,\n parsed.msg || `Service returned code ${parsed.code}`,\n { details: { apiCode: parsed.code } }\n );\n }\n\n return parsed.data as T;\n } catch (error) {\n if (error instanceof SwapSdkError) throw error;\n if (controller.signal.aborted) {\n throw new SwapSdkError(\n timedOut ? \"REQUEST_TIMEOUT\" : \"REQUEST_ABORTED\",\n stage,\n timedOut ? `Request timed out after ${timeoutMs}ms` : \"Request aborted\",\n { cause: error, retryable: timedOut }\n );\n }\n const details = networkFailureDetails(\n error,\n options.method,\n path,\n attempt\n );\n console.error(\"SDK network request failed\", {\n ...details,\n stage,\n });\n throw new SwapSdkError(\n \"HTTP_ERROR\",\n stage,\n `Network request failed: ${details.causeName}: ${details.causeMessage}`,\n {\n cause: error,\n retryable: true,\n details,\n }\n );\n } finally {\n clearTimeout(timeout);\n options.signal?.removeEventListener(\"abort\", abortFromCaller);\n }\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | undefined | null>\n ): string {\n if (!query) return `${this.baseUrl}${path}`;\n\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n search.set(key, String(value));\n }\n const suffix = search.toString();\n return suffix ? `${this.baseUrl}${path}?${suffix}` : `${this.baseUrl}${path}`;\n }\n\n private async buildHeaders(\n idempotencyKey?: string,\n authenticationToken?: string\n ): Promise<Record<string, string>> {\n const configured =\n typeof this.config.headers === \"function\"\n ? await this.config.headers()\n : this.config.headers ?? {};\n const token = this.config.getAccessToken\n ? await this.config.getAccessToken()\n : this.config.apiKey;\n\n return {\n \"Content-Type\": \"application/json\",\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n ...(authenticationToken\n ? { Authentication: `Bearer ${authenticationToken}` }\n : {}),\n ...(idempotencyKey ? { \"Idempotency-Key\": idempotencyKey } : {}),\n ...configured,\n };\n }\n\n private retryConfig(): RetryConfig {\n const configured = { ...DEFAULT_RETRY, ...this.config.retry };\n if (\n !Number.isSafeInteger(configured.maxRetries) ||\n configured.maxRetries < 0 ||\n !Number.isFinite(configured.baseDelayMs) ||\n configured.baseDelayMs < 0 ||\n !Number.isFinite(configured.maxDelayMs) ||\n configured.maxDelayMs < configured.baseDelayMs\n ) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"Invalid retry configuration\"\n );\n }\n return configured;\n }\n\n private retryDelay(attempt: number, retry: RetryConfig): number {\n const exponential = Math.min(\n retry.maxDelayMs,\n retry.baseDelayMs * 2 ** (attempt - 1)\n );\n return retry.jitter\n ? Math.min(retry.maxDelayMs, exponential * (0.5 + Math.random()))\n : exponential;\n }\n\n private log(entry: SdkLogEntry): void {\n try {\n this.config.logger?.log(entry);\n } catch {\n // Application logging must never change SDK behavior.\n }\n }\n\n private parseResponse(\n text: string,\n status: number,\n stage: SwapErrorStage\n ): unknown {\n try {\n return text ? JSON.parse(text) : {};\n } catch (error) {\n throw new SwapSdkError(\n status >= 400 ? \"HTTP_ERROR\" : \"INVALID_API_RESPONSE\",\n stage,\n status >= 400 ? `HTTP ${status}` : \"Response is not valid JSON\",\n { cause: error, retryable: status >= 500 }\n );\n }\n }\n\n private isEnvelope(value: unknown): value is SwapApiResponse<unknown> {\n if (typeof value !== \"object\" || value === null) return false;\n if (!(\"code\" in value) || typeof value.code !== \"number\") return false;\n if (!(\"msg\" in value) || typeof value.msg !== \"string\") return false;\n // Successful responses must include `data`. Error envelopes from the\n // service sometimes omit it (only `{ code, msg }`), which is still valid.\n if (value.code === 0 && !(\"data\" in value)) return false;\n return true;\n }\n\n private readMessage(value: unknown): string | undefined {\n if (typeof value !== \"object\" || value === null || !(\"msg\" in value)) {\n return undefined;\n }\n return typeof value.msg === \"string\" && value.msg.trim()\n ? value.msg.trim()\n : undefined;\n }\n}\n\nfunction networkFailureDetails(\n error: unknown,\n method: RequestOptions[\"method\"],\n path: string,\n attempt: number\n): NetworkFailureDetails {\n const causeName =\n error instanceof Error && error.name.trim() ? error.name.trim() : \"Error\";\n const rawMessage =\n error instanceof Error && error.message.trim()\n ? error.message.trim()\n : String(error);\n const causeMessage = rawMessage.replace(\n /\\b(https?:\\/\\/[^\\s?#]+)\\?[^\\s#]*/gi,\n \"$1?[redacted]\"\n );\n\n return {\n method,\n path,\n attempt,\n causeName,\n causeMessage,\n };\n}\n\nfunction waitForRetry(\n delayMs: number,\n signal: AbortSignal | undefined,\n stage: SwapErrorStage\n): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(\n new SwapSdkError(\"REQUEST_ABORTED\", stage, \"Request aborted\", {\n cause: signal.reason,\n })\n );\n return;\n }\n const onAbort = () => {\n clearTimeout(timeout);\n reject(\n new SwapSdkError(\"REQUEST_ABORTED\", stage, \"Request aborted\", {\n cause: signal?.reason,\n })\n );\n };\n const timeout = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import type { SwapOrderStatusDataRaw } from \"../api/rawTypes\";\nimport type { ChainRef } from \"../types/chain\";\nimport type {\n OrderReference,\n SwapBuild,\n} from \"../types/execution\";\nimport type { Quote } from \"../types/quote\";\n\nexport type WaitMode = \"submitted\" | \"source-confirmed\" | \"completed\";\n\nexport interface SwapWarning {\n code: \"REPORT_FAILED\";\n message: string;\n cause?: unknown;\n}\n\nexport interface SignRequestPreview {\n chain: ChainRef;\n kind: string;\n summary: Record<string, unknown>;\n}\n\nexport type OrderStatus =\n | \"pending\"\n | \"processing\"\n | \"completed\"\n | \"failed\"\n | \"refunded\"\n | \"expired\"\n | \"unknown\";\n\nexport type SwapLifecycleEvent =\n | { type: \"build-started\"; executionId: string }\n | { type: \"build-completed\"; executionId: string }\n | { type: \"approval-requested\"; executionId: string }\n | { type: \"approval-submitted\"; executionId: string; txHash: string }\n | { type: \"signing-requested\"; executionId: string }\n | {\n type: \"submitted\";\n executionId: string;\n txHash?: string;\n orderId?: string;\n }\n | { type: \"source-confirmed\"; executionId: string }\n | { type: \"order-status\"; executionId: string; status: OrderStatus }\n | { type: \"completed\"; executionId: string }\n | { type: \"warning\"; executionId: string; warning: SwapWarning }\n | { type: \"failed\"; executionId: string; error: Error };\n\nexport interface SwapExecutionResult {\n executionId: string;\n status:\n | \"submitted\"\n | \"source-confirmed\"\n | \"processing\"\n | \"completed\"\n | \"failed\"\n | \"refunded\"\n | \"expired\";\n router: string;\n txHash?: string;\n txHashes?: string[];\n orderId?: string;\n depositAddress?: string;\n report?: {\n status: \"reported\" | \"failed\" | \"skipped\";\n warning?: SwapWarning;\n };\n raw: unknown;\n}\n\nexport interface OrderPollingOptions {\n /** Delay between order-status requests in milliseconds. Defaults to 5000. */\n intervalMs?: number;\n /** Maximum polling duration in milliseconds. Omit to poll indefinitely. */\n timeoutMs?: number;\n}\n\nexport interface ExecuteSwapInput {\n build: SwapBuild;\n waitFor?: WaitMode;\n orderPolling?: OrderPollingOptions;\n signal?: AbortSignal;\n onEvent?: (event: SwapLifecycleEvent) => void;\n beforeSign?: (preview: SignRequestPreview) => void | Promise<void>;\n}\n\nexport interface SwapInput extends Omit<ExecuteSwapInput, \"build\"> {\n quote: Quote;\n idempotencyKey?: string;\n}\n\nexport interface OrderStatusResult {\n orderId: string;\n router: string;\n status: OrderStatus;\n raw: SwapOrderStatusDataRaw;\n}\n\nexport interface WaitForOrderInput\n extends OrderReference,\n OrderPollingOptions {\n signal?: AbortSignal;\n}\n\nconst ORDER_STATUS_MAP: Record<string, OrderStatus> = {\n PENDING: \"pending\",\n CREATED: \"pending\",\n PROCESSING: \"processing\",\n IN_PROGRESS: \"processing\",\n SUCCESS: \"completed\",\n COMPLETED: \"completed\",\n FILLED: \"completed\",\n FAILED: \"failed\",\n REFUNDED: \"refunded\",\n EXPIRED: \"expired\",\n};\n\nexport function normalizeOrderStatus(\n raw: SwapOrderStatusDataRaw\n): OrderStatus {\n const value = raw.status ?? raw.state;\n if (typeof value !== \"string\") return \"unknown\";\n return ORDER_STATUS_MAP[value.trim().toUpperCase()] ?? \"unknown\";\n}\n","import { SwapSdkError } from \"./errors\";\nimport type {\n SignRequestPreview,\n SwapLifecycleEvent,\n WaitMode,\n} from \"./lifecycle\";\nimport type { SwapExecution } from \"../types/execution\";\n\nexport interface ChainExecutionResult {\n status: \"submitted\" | \"source-confirmed\";\n txHash?: string;\n txHashes?: string[];\n orderId?: string;\n signature?: string;\n signingScheme?: string;\n raw?: unknown;\n}\n\nexport interface ExecutionContext {\n executionId: string;\n signal?: AbortSignal;\n waitFor: WaitMode;\n emit(event: SwapLifecycleEvent): void;\n beforeSign?: (preview: SignRequestPreview) => void | Promise<void>;\n}\n\nexport interface MessageSignOptions {\n signal?: AbortSignal;\n context?: Readonly<Record<string, unknown>>;\n}\n\nexport interface ExecutorIdentityProvider {\n readonly signerChain: string;\n getIdentityKey(): string | Promise<string>;\n signMessage?(\n message: string,\n options?: MessageSignOptions\n ): Promise<string>;\n}\n\nexport interface ExecutorMessageSigner extends ExecutorIdentityProvider {\n signMessage(\n message: string,\n options?: MessageSignOptions\n ): Promise<string>;\n}\n\nexport interface ChainExecutor<\n K extends SwapExecution[\"kind\"] = SwapExecution[\"kind\"],\n> {\n readonly kinds: readonly K[];\n readonly signerChain?: string;\n getIdentityKey?(): string | Promise<string>;\n signMessage?(\n message: string,\n options?: MessageSignOptions\n ): Promise<string>;\n validate(\n execution: Extract<SwapExecution, { kind: K }>,\n context: ExecutionContext\n ): void | Promise<void>;\n execute(\n execution: Extract<SwapExecution, { kind: K }>,\n context: ExecutionContext\n ): Promise<ChainExecutionResult>;\n}\n\nexport class ExecutorRegistry {\n private readonly executors = new Map<\n SwapExecution[\"kind\"],\n ChainExecutor\n >();\n\n constructor(executors: readonly ChainExecutor[] = []) {\n for (const executor of executors) this.register(executor);\n }\n\n register(executor: ChainExecutor, allowOverride = false): void {\n for (const kind of executor.kinds) {\n if (!allowOverride && this.executors.has(kind)) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"build\",\n `Executor already registered for ${kind}`\n );\n }\n this.executors.set(kind, executor);\n }\n }\n\n get<K extends SwapExecution[\"kind\"]>(kind: K): ChainExecutor<K> {\n const executor = this.executors.get(kind);\n if (!executor) {\n throw new SwapSdkError(\n \"EXECUTOR_NOT_FOUND\",\n \"sign\",\n `No executor registered for ${kind}`\n );\n }\n return executor as unknown as ChainExecutor<K>;\n }\n\n getSigner(chain: string, requireSignMessage: true): ExecutorMessageSigner;\n getSigner(\n chain: string,\n requireSignMessage?: false\n ): ExecutorIdentityProvider;\n getSigner(\n chain: string,\n requireSignMessage = false\n ): ExecutorIdentityProvider | ExecutorMessageSigner {\n const executor = Array.from(new Set(this.executors.values())).find(\n (candidate) => candidate.signerChain === chain\n );\n if (!executor) {\n throw new SwapSdkError(\n \"EXECUTOR_NOT_FOUND\",\n \"sign\",\n `No executor registered for signer chain ${chain}`\n );\n }\n if (!executor.getIdentityKey) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n `Executor for signer chain ${chain} must implement getIdentityKey`\n );\n }\n if (requireSignMessage && !executor.signMessage) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n `Executor for signer chain ${chain} must implement signMessage`\n );\n }\n return executor as ExecutorIdentityProvider | ExecutorMessageSigner;\n }\n}\n","import { SwapSdkError } from \"../core/errors\";\nimport type { AssetRef, ChainRef } from \"../types/chain\";\n\nconst CANONICAL_NON_EVM_CHAINS = new Set<ChainRef>([\n \"solana\",\n \"aptos\",\n \"near\",\n \"tron\",\n \"btc\",\n \"zcash\",\n \"sui\",\n]);\n\nconst RAW_API_ALIASES = new Map<string, ChainRef>([\n [\"sol\", \"solana\"],\n [\"501\", \"solana\"],\n [\"637\", \"aptos\"],\n [\"trx\", \"tron\"],\n [\"bitcoin\", \"btc\"],\n [\"zec\", \"zcash\"],\n]);\n\nconst NATIVE_ADDRESSES = new Map<ChainRef, string>([\n [\"solana\", \"So11111111111111111111111111111111111111112\"],\n [\"aptos\", \"0xa\"],\n [\"near\", \"wrap.near\"],\n [\"tron\", \"trx\"],\n [\"btc\", \"btc\"],\n [\"zcash\", \"nep141:zec.omft.near\"],\n [\"sui\", \"0x2::sui::SUI\"],\n]);\n\nconst EVM_ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\nconst DECIMAL_EVM_CHAIN_ID = /^[1-9]\\d*$/;\n\nexport function toApiChain(chain: ChainRef): string {\n if (\n DECIMAL_EVM_CHAIN_ID.test(chain) ||\n CANONICAL_NON_EVM_CHAINS.has(chain)\n ) {\n return chain;\n }\n throw unsupportedChain(chain);\n}\n\nexport function fromApiChain(chain: string): ChainRef {\n const normalized = chain.trim().toLowerCase();\n const alias = RAW_API_ALIASES.get(normalized);\n if (alias) return alias;\n if (CANONICAL_NON_EVM_CHAINS.has(normalized as ChainRef)) {\n return normalized as ChainRef;\n }\n\n if (/^0x[0-9a-f]+$/.test(normalized)) {\n const decimal = BigInt(normalized).toString();\n if (decimal !== \"0\") return decimal as ChainRef;\n }\n if (DECIMAL_EVM_CHAIN_ID.test(normalized)) {\n return BigInt(normalized).toString() as ChainRef;\n }\n\n throw unsupportedChain(chain);\n}\n\nexport function toApiAssetAddress(asset: AssetRef): string {\n const explicit = asset.address.trim();\n if (explicit) return explicit;\n\n if (!asset.isNative) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `Asset address is required for ${asset.chain}`\n );\n }\n\n if (DECIMAL_EVM_CHAIN_ID.test(asset.chain)) return EVM_ZERO_ADDRESS;\n\n const nativeAddress = NATIVE_ADDRESSES.get(asset.chain);\n if (!nativeAddress) {\n throw new SwapSdkError(\n \"UNSUPPORTED_CHAIN\",\n \"quote\",\n `No native asset mapping for ${asset.chain}`\n );\n }\n return nativeAddress;\n}\n\nfunction unsupportedChain(chain: string): SwapSdkError {\n return new SwapSdkError(\n \"UNSUPPORTED_CHAIN\",\n \"quote\",\n `Unsupported chain: ${chain}`\n );\n}\n","import { z } from \"zod\";\n\nexport const decimalStringSchema = z.string().regex(/^(0|[1-9]\\d*)$/);\nexport const nonEmptyStringSchema = z.string().trim().min(1);\nexport const hexDataSchema = z.string().regex(/^0x(?:[0-9a-fA-F]{2})*$/);\nexport const positiveIntegerSchema = z.number().int().positive();\n\nexport const evmChainIdSchema = z.preprocess((value) => {\n if (typeof value !== \"string\") return value;\n const normalized = value.trim();\n if (!/^(?:[1-9]\\d*|0x[0-9a-fA-F]+)$/.test(normalized)) {\n return value;\n }\n try {\n const parsed = BigInt(normalized);\n return parsed <= BigInt(Number.MAX_SAFE_INTEGER)\n ? Number(parsed)\n : value;\n } catch {\n return value;\n }\n}, z.number().int().positive().max(Number.MAX_SAFE_INTEGER));\n\nconst evmQuantitySchema = z\n .string()\n .regex(/^(?:0|[1-9]\\d*|0x[0-9a-fA-F]+)$/)\n .transform((value) =>\n value.startsWith(\"0x\") ? BigInt(value).toString() : value,\n );\n\n/** API may return null for optional EVM quantity fields such as gasLimit. */\nexport const optionalEvmQuantitySchema = z.preprocess(\n (value) => (value === null || value === undefined || value === \"\" ? undefined : value),\n evmQuantitySchema.optional()\n);\n\nexport const evmTxSchema = z.object({\n to: nonEmptyStringSchema,\n data: hexDataSchema,\n value: evmQuantitySchema,\n gasLimit: optionalEvmQuantitySchema,\n gasPrice: optionalEvmQuantitySchema,\n maxFeePerGas: optionalEvmQuantitySchema,\n maxPriorityFeePerGas: optionalEvmQuantitySchema,\n from: nonEmptyStringSchema.optional(),\n chainId: evmChainIdSchema,\n});\n","import { z, ZodError } from \"zod\";\nimport type {\n SwapBuildDataRaw,\n SwapBuildRequestRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport type { ChainRef } from \"../types/chain\";\nimport type {\n DepositInfo,\n EvmApproval,\n OrderReference,\n SwapBuild,\n SwapExecution,\n} from \"../types/execution\";\nimport { fromApiChain } from \"./chain\";\nimport {\n decimalStringSchema,\n evmChainIdSchema,\n evmTxSchema,\n nonEmptyStringSchema,\n} from \"./schemas\";\n\nconst tokenSchema = z.object({\n address: z.string(),\n symbol: z.string(),\n decimals: z.number().int().nonnegative(),\n});\n\nconst commonBuildSchema = z.object({\n isCrossChain: z.boolean(),\n chainType: nonEmptyStringSchema,\n router: nonEmptyStringSchema,\n fromChain: nonEmptyStringSchema,\n toChain: nonEmptyStringSchema,\n tokenIn: tokenSchema,\n tokenOut: tokenSchema,\n amountIn: decimalStringSchema,\n estimatedOut: decimalStringSchema,\n minAmountOut: decimalStringSchema,\n});\n\nconst signingRequestSchema = z.object({\n type: nonEmptyStringSchema,\n router: nonEmptyStringSchema,\n quoteId: nonEmptyStringSchema,\n chainId: evmChainIdSchema,\n signingScheme: z.string().optional(),\n typedData: z.object({\n domain: z.record(z.string(), z.unknown()),\n types: z.record(\n z.string(),\n z.array(z.object({ name: z.string(), type: z.string() }))\n ),\n primaryType: nonEmptyStringSchema,\n message: z.record(z.string(), z.unknown()),\n }),\n submit: z\n .object({\n endpoint: z.string(),\n method: z.string(),\n params: z.record(z.string(), z.string()),\n })\n .optional(),\n});\n\nconst solanaTxSchema = z.object({\n transaction: z.string(),\n format: nonEmptyStringSchema,\n addressLookupTableAddresses: z.array(z.string()).optional(),\n recentBlockhash: z.string().optional(),\n txValidUntil: z.number().optional(),\n transactionSize: z.number().optional(),\n});\n\nconst aptosTxSchema = z.object({\n function: nonEmptyStringSchema,\n type_arguments: z.array(z.string()),\n arguments: z.array(z.unknown()),\n});\n\nconst nearTxSchema = z.object({\n signerId: z.string().optional(),\n receiverId: nonEmptyStringSchema,\n actions: z.array(z.unknown()).min(1),\n});\n\nconst transferBaseSchema = z.object({\n kind: nonEmptyStringSchema,\n chainId: z.string().optional(),\n chain: z.string().optional(),\n amount: decimalStringSchema,\n depositAddress: nonEmptyStringSchema,\n});\n\nconst tronTxSchema = transferBaseSchema.extend({\n tokenAddress: z.string().optional(),\n standard: z.string().optional(),\n});\n\nconst bitcoinTxSchema = transferBaseSchema.extend({\n feeRate: z.number().positive().optional(),\n});\n\nconst zcashTxSchema = transferBaseSchema.extend({\n decimals: z.number().int().nonnegative().optional(),\n});\n\nconst suiTxSchema = transferBaseSchema.extend({\n coinType: nonEmptyStringSchema.refine(\n (value) => !value.toLowerCase().startsWith(\"nep141:\"),\n \"Sui coinType cannot be an OMFT asset id\"\n ),\n});\n\ntype ExecutionLane =\n | \"evm\"\n | \"solana\"\n | \"aptos\"\n | \"near\"\n | \"tron\"\n | \"bitcoin\"\n | \"zcash\"\n | \"sui\";\n\nexport function normalizeBuild(\n raw: SwapBuildDataRaw,\n executionId = createExecutionId(),\n request?: SwapBuildRequestRaw\n): SwapBuild {\n try {\n const common = commonBuildSchema.parse(raw);\n const fromChain = fromApiChain(common.fromChain);\n const toChain = fromApiChain(common.toChain);\n const lane = laneFromChainType(common.chainType, fromChain);\n assertLaneMatchesChain(lane, fromChain);\n const execution = normalizeExecution(raw, lane, fromChain);\n const order = normalizeOrder(raw, execution, request);\n const deposit = normalizeDeposit(raw.deposit);\n\n return {\n executionId,\n ...(raw.signingRequest?.quoteId\n ? { quoteId: raw.signingRequest.quoteId }\n : {}),\n isCrossChain: common.isCrossChain,\n fromChain,\n toChain,\n tokenIn: { chain: fromChain, ...common.tokenIn },\n tokenOut: { chain: toChain, ...common.tokenOut },\n amountIn: common.amountIn,\n estimatedOut: common.estimatedOut,\n minAmountOut: common.minAmountOut,\n router: common.router,\n execution,\n ...(order ? { order } : {}),\n ...(deposit ? { deposit } : {}),\n ...(request ? { request: { ...request } } : {}),\n raw,\n };\n } catch (error) {\n if (error instanceof SwapSdkError) throw error;\n throw invalidBuild(error);\n }\n}\n\nfunction normalizeExecution(\n raw: SwapBuildDataRaw,\n lane: ExecutionLane,\n chain: ChainRef\n): SwapExecution {\n switch (lane) {\n case \"evm\":\n return normalizeEvmExecution(raw, chain);\n case \"solana\": {\n const tx = solanaTxSchema.parse(raw.tx);\n return {\n kind: \"solana-transaction\",\n chain,\n transaction: tx.transaction,\n format: tx.format,\n metadata: {\n ...(tx.addressLookupTableAddresses\n ? { addressLookupTableAddresses: tx.addressLookupTableAddresses }\n : {}),\n ...(tx.recentBlockhash ? { recentBlockhash: tx.recentBlockhash } : {}),\n ...(tx.txValidUntil === undefined\n ? {}\n : { txValidUntil: tx.txValidUntil }),\n ...(tx.transactionSize === undefined\n ? {}\n : { transactionSize: tx.transactionSize }),\n },\n };\n }\n case \"aptos\": {\n const tx = aptosTxSchema.parse(raw.tx);\n return {\n kind: \"aptos-entry-function\",\n chain,\n function: tx.function,\n typeArguments: tx.type_arguments,\n functionArguments: tx.arguments,\n };\n }\n case \"near\": {\n const transactions = z\n .union([nearTxSchema, z.array(nearTxSchema).min(1)])\n .parse(raw.tx);\n return {\n kind: \"near-transaction-batch\",\n chain,\n transactions: Array.isArray(transactions)\n ? transactions\n : [transactions],\n };\n }\n case \"tron\": {\n const tx = tronTxSchema.parse(raw.tx);\n assertKind(tx.kind, [\"tron_transfer\"]);\n return {\n kind: \"tron-transfer\",\n chain,\n amount: tx.amount,\n depositAddress: tx.depositAddress,\n ...(tx.tokenAddress ? { tokenAddress: tx.tokenAddress } : {}),\n ...(tx.standard ? { standard: tx.standard } : {}),\n };\n }\n case \"bitcoin\": {\n const tx = bitcoinTxSchema.parse(raw.tx);\n assertKind(tx.kind, [\"btc_transfer\", \"utxo_transfer\"]);\n return {\n kind: \"bitcoin-transfer\",\n chain,\n amount: tx.amount,\n depositAddress: tx.depositAddress,\n ...(tx.feeRate === undefined ? {} : { feeRate: tx.feeRate }),\n };\n }\n case \"zcash\": {\n const tx = zcashTxSchema.parse(raw.tx);\n assertKind(tx.kind, [\"zcash_transfer\", \"utxo_transfer\"]);\n return {\n kind: \"zcash-transfer\",\n chain,\n amount: tx.amount,\n depositAddress: tx.depositAddress,\n ...(tx.decimals === undefined ? {} : { decimals: tx.decimals }),\n };\n }\n case \"sui\": {\n const candidate =\n typeof raw.tx === \"object\" && raw.tx !== null\n ? {\n ...raw.tx,\n coinType:\n \"coinType\" in raw.tx && raw.tx.coinType\n ? raw.tx.coinType\n : raw.tokenIn.address,\n }\n : raw.tx;\n const tx = suiTxSchema.parse(candidate);\n assertKind(tx.kind, [\"sui_transfer\"]);\n return {\n kind: \"sui-transfer\",\n chain,\n amount: tx.amount,\n depositAddress: tx.depositAddress,\n coinType: tx.coinType,\n };\n }\n }\n}\n\nfunction normalizeEvmExecution(\n raw: SwapBuildDataRaw,\n chain: ChainRef\n): SwapExecution {\n const approval = normalizeEvmApproval(raw, chain);\n if (raw.executionType === \"signature\" || raw.signingRequest) {\n const request = signingRequestSchema.parse(raw.signingRequest);\n assertEvmChainId(chain, request.chainId);\n return {\n kind: \"evm-signature\",\n chain,\n request,\n ...(approval ? { approval } : {}),\n };\n }\n\n const tx = evmTxSchema.parse(raw.tx);\n assertEvmChainId(chain, tx.chainId);\n return {\n kind: \"evm-transaction\",\n chain,\n tx,\n ...(approval ? { approval } : {}),\n };\n}\n\nfunction normalizeEvmApproval(\n raw: SwapBuildDataRaw,\n chain: ChainRef\n): EvmApproval | undefined {\n if (raw.approve) {\n const approveTx = evmTxSchema.parse(raw.approve.tx);\n assertEvmChainId(chain, approveTx.chainId);\n return {\n tx: approveTx,\n spender:\n readErc20ApproveSpender(approveTx.data) ??\n nonEmptyStringSchema.parse(raw.approve.spender),\n };\n }\n return undefined;\n}\n\nfunction readErc20ApproveSpender(data: string): string | undefined {\n const normalized = data.toLowerCase();\n if (\n !normalized.startsWith(\"0x095ea7b3\") ||\n normalized.length < 10 + 64\n ) {\n return undefined;\n }\n const addressWord = normalized.slice(10, 10 + 64);\n if (!/^[0-9a-f]{64}$/.test(addressWord)) return undefined;\n return `0x${addressWord.slice(24)}`;\n}\n\nfunction laneFromChainType(\n chainType: string,\n fromChain: ChainRef\n): ExecutionLane {\n const normalized = chainType.toLowerCase();\n const aliases: Record<string, ExecutionLane> = {\n evm: \"evm\",\n solana: \"solana\",\n sol: \"solana\",\n aptos: \"aptos\",\n near: \"near\",\n tron: \"tron\",\n btc: \"bitcoin\",\n bitcoin: \"bitcoin\",\n zcash: \"zcash\",\n zec: \"zcash\",\n sui: \"sui\",\n };\n if (normalized === \"cross-chain\" || normalized === \"utxo\") {\n return laneFromChain(fromChain);\n }\n const lane = aliases[normalized];\n if (!lane) {\n throw new SwapSdkError(\n \"UNSUPPORTED_CHAIN\",\n \"build\",\n `Unsupported build chainType: ${chainType}`\n );\n }\n return lane;\n}\n\nfunction laneFromChain(chain: ChainRef): ExecutionLane {\n if (/^[1-9]\\d*$/.test(chain)) return \"evm\";\n const lanes: Record<string, ExecutionLane> = {\n solana: \"solana\",\n aptos: \"aptos\",\n near: \"near\",\n tron: \"tron\",\n btc: \"bitcoin\",\n zcash: \"zcash\",\n sui: \"sui\",\n };\n const lane = lanes[chain];\n if (!lane) {\n throw new SwapSdkError(\n \"UNSUPPORTED_CHAIN\",\n \"build\",\n `Unsupported source chain: ${chain}`\n );\n }\n return lane;\n}\n\nfunction assertLaneMatchesChain(lane: ExecutionLane, chain: ChainRef): void {\n const chainLane = laneFromChain(chain);\n if (lane !== chainLane) {\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n \"build\",\n `Build chainType ${lane} does not match source chain ${chain}`\n );\n }\n}\n\nfunction assertEvmChainId(chain: ChainRef, chainId: number): void {\n if (chain !== String(chainId)) {\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n \"build\",\n `EVM transaction chainId ${chainId} does not match ${chain}`\n );\n }\n}\n\nfunction assertKind(actual: string, allowed: string[]): void {\n if (!allowed.includes(actual.toLowerCase())) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n `Unexpected transaction kind: ${actual}`\n );\n }\n}\n\nfunction normalizeOrder(\n raw: SwapBuildDataRaw,\n execution: SwapExecution,\n request?: SwapBuildRequestRaw\n): OrderReference | undefined {\n const depositOrderId = readRecordString(raw.deposit, \"orderId\");\n const router =\n raw.statusRouter ??\n (execution.kind === \"evm-signature\"\n ? execution.request.router\n : undefined) ??\n raw.router;\n const confidentialNearIntentsStatusKey =\n request?.confidentiality === \"basic\" &&\n router.toLowerCase().includes(\"nearintents\")\n ? readRecordString(raw.deposit, \"depositAddress\")\n : undefined;\n const orderId =\n raw.orderId ?? depositOrderId ?? confidentialNearIntentsStatusKey;\n if (!orderId) return undefined;\n\n const chainId =\n execution.kind === \"evm-signature\"\n ? String(execution.request.chainId)\n : execution.kind === \"evm-transaction\"\n ? String(execution.tx.chainId)\n : undefined;\n return { orderId, router, ...(chainId ? { chainId } : {}) };\n}\n\nfunction normalizeDeposit(value: unknown): DepositInfo | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n const depositAddress = readRecordString(value, \"depositAddress\");\n if (!depositAddress) return undefined;\n\n return {\n depositAddress,\n ...(readRecordString(value, \"depositMemo\")\n ? { depositMemo: readRecordString(value, \"depositMemo\") }\n : {}),\n ...(readRecordString(value, \"orderId\")\n ? { orderId: readRecordString(value, \"orderId\") }\n : {}),\n ...(readRecordString(value, \"estimatedOut\")\n ? { estimatedOut: decimalStringSchema.parse(readRecordString(value, \"estimatedOut\")) }\n : {}),\n ...(readRecordString(value, \"minAmountOut\")\n ? { minAmountOut: decimalStringSchema.parse(readRecordString(value, \"minAmountOut\")) }\n : {}),\n ...(typeof Reflect.get(value, \"timeEstimate\") === \"number\" ||\n typeof Reflect.get(value, \"timeEstimate\") === \"string\"\n ? { timeEstimate: Reflect.get(value, \"timeEstimate\") as number | string }\n : {}),\n };\n}\n\nfunction readRecordString(value: unknown, key: string): string | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n const field = Reflect.get(value, key);\n return typeof field === \"string\" && field.trim() ? field.trim() : undefined;\n}\n\nexport function createExecutionId(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n return `swap_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n}\n\nfunction invalidBuild(error: unknown): SwapSdkError {\n return new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n \"Invalid swap build response\",\n {\n cause: error,\n details:\n error instanceof ZodError\n ? {\n issues: error.issues.map((issue) => ({\n path: issue.path.join(\".\"),\n message: issue.message,\n })),\n }\n : undefined,\n }\n );\n}\n","import { SwapSdkError } from \"../core/errors\";\n\nexport type ChainRef =\n | `${number}`\n | \"solana\"\n | \"aptos\"\n | \"near\"\n | \"tron\"\n | \"btc\"\n | \"zcash\"\n | \"sui\";\n\nexport type BaseUnitAmount = string;\n\nexport interface AssetRef {\n chain: ChainRef;\n address: string;\n symbol?: string;\n decimals?: number;\n isNative?: boolean;\n}\n\nconst BASE_UNIT_AMOUNT = /^(0|[1-9]\\d*)$/;\n\nexport function assertBaseUnitAmount(value: string): BaseUnitAmount {\n if (!BASE_UNIT_AMOUNT.test(value)) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `Invalid base-unit amount: ${value}`\n );\n }\n\n return value;\n}\n","import type {\n SwapQuoteDataRaw,\n SwapQuoteRequestRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport { assertBaseUnitAmount } from \"../types/chain\";\nimport type {\n BuildContext,\n Quote,\n QuoteRequest,\n RouteSummary,\n} from \"../types/quote\";\nimport { toApiAssetAddress, toApiChain } from \"./chain\";\n\nconst DEFAULT_QUOTE_WAITING_TIME_MS = 3000;\nconst DEFAULT_SAME_CHAIN_TIMEOUT_MS = 500;\nconst DEFAULT_CROSS_CHAIN_TIMEOUT_MS = 3000;\n\nexport function serializeQuoteRequest(\n request: QuoteRequest\n): SwapQuoteRequestRaw {\n validateQuoteRequest(request);\n\n return {\n ...(request.extensions ?? {}),\n fromChain: toApiChain(request.fromChain),\n toChain: toApiChain(request.toChain),\n tokenIn: toApiAssetAddress(request.tokenIn),\n tokenOut: toApiAssetAddress(request.tokenOut),\n amountIn: request.amountIn,\n slippage: request.slippageBps,\n quoteWaitingTimeMs:\n request.quoteWaitingTimeMs ?? DEFAULT_QUOTE_WAITING_TIME_MS,\n sameChainTimeoutMs:\n request.sameChainTimeoutMs ?? DEFAULT_SAME_CHAIN_TIMEOUT_MS,\n crossChainTimeoutMs:\n request.crossChainTimeoutMs ?? DEFAULT_CROSS_CHAIN_TIMEOUT_MS,\n ...(request.confidentiality\n ? { confidentiality: request.confidentiality }\n : {}),\n sender: request.sender.trim(),\n ...(request.recipient?.trim()\n ? { recipient: request.recipient.trim() }\n : {}),\n } as SwapQuoteRequestRaw;\n}\n\nexport function normalizeQuote(\n request: QuoteRequest,\n raw: SwapQuoteDataRaw,\n receivedAt = Date.now()\n): Quote {\n const bestRoute = normalizeRoute(raw.bestQuote, true);\n if (!bestRoute) {\n throw invalidQuote(\"Quote response does not contain a valid best route\");\n }\n\n const quoteId = readOptionalString(raw.bestQuote.quoteId);\n const apiRequest = { ...serializeQuoteRequest(request) };\n delete apiRequest.quoteWaitingTimeMs;\n delete apiRequest.sameChainTimeoutMs;\n delete apiRequest.crossChainTimeoutMs;\n Object.freeze(apiRequest);\n const buildContext: Readonly<BuildContext> = Object.freeze({\n request: apiRequest,\n router: bestRoute.router,\n ...(bestRoute.market ? { market: bestRoute.market } : {}),\n expectedOut: bestRoute.amountOut,\n minAmountOut: bestRoute.minAmountOut,\n preSwap: raw.bestQuote.preSwap ?? null,\n bridge: raw.bestQuote.bridge ?? null,\n ...(quoteId ? { quoteId } : {}),\n });\n const expiresAt = readTimestamp(\n raw.bestQuote.expiresAt ?? raw.bestQuote.expirationTime\n );\n\n return {\n ...(quoteId ? { id: quoteId } : {}),\n fromChain: request.fromChain,\n toChain: request.toChain,\n tokenIn: { ...request.tokenIn },\n tokenOut: { ...request.tokenOut },\n amountIn: validateResponseAmount(request.amountIn, \"amountIn\"),\n estimatedOut: bestRoute.amountOut,\n minAmountOut: bestRoute.minAmountOut,\n route: bestRoute,\n alternatives: readQuoteAlternatives(raw.allQuotes).flatMap((route) => {\n try {\n const normalized = normalizeRoute(route, false);\n return normalized ? [normalized] : [];\n } catch {\n return [];\n }\n }),\n receivedAt,\n ...(expiresAt === undefined ? {} : { expiresAt }),\n buildContext,\n raw,\n };\n}\n\nfunction readQuoteAlternatives(\n value: unknown\n): Record<string, unknown>[] {\n if (!Array.isArray(value)) return [];\n return value.filter(isRecord);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction validateQuoteRequest(request: QuoteRequest): void {\n assertBaseUnitAmount(request.amountIn);\n if (!Number.isInteger(request.slippageBps) || request.slippageBps < 0) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"slippageBps must be a non-negative integer\"\n );\n }\n if (request.slippageBps > 10_000) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"slippageBps cannot exceed 10000\"\n );\n }\n if (\n request.quoteWaitingTimeMs !== undefined &&\n (!Number.isFinite(request.quoteWaitingTimeMs) ||\n !Number.isInteger(request.quoteWaitingTimeMs) ||\n request.quoteWaitingTimeMs < 0)\n ) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"quoteWaitingTimeMs must be a non-negative integer\"\n );\n }\n validateQuoteTimingParameter(\n request.sameChainTimeoutMs,\n \"sameChainTimeoutMs\"\n );\n validateQuoteTimingParameter(\n request.crossChainTimeoutMs,\n \"crossChainTimeoutMs\"\n );\n if (!request.sender.trim()) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n \"sender is required\"\n );\n }\n if (request.tokenIn.chain !== request.fromChain) {\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n \"quote\",\n \"tokenIn chain does not match fromChain\"\n );\n }\n if (request.tokenOut.chain !== request.toChain) {\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n \"quote\",\n \"tokenOut chain does not match toChain\"\n );\n }\n}\n\nfunction validateQuoteTimingParameter(\n value: number | undefined,\n field: \"sameChainTimeoutMs\" | \"crossChainTimeoutMs\"\n): void {\n if (\n value !== undefined &&\n (!Number.isFinite(value) || !Number.isInteger(value) || value < 0)\n ) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `${field} must be a non-negative integer`\n );\n }\n}\n\nfunction normalizeRoute(\n raw: Record<string, unknown>,\n required: boolean\n): RouteSummary | undefined {\n const router = readOptionalString(raw.router);\n const amountOutValue = raw.amountOut ?? raw.estimatedOut;\n const amountOut = readOptionalString(amountOutValue);\n const minAmountOut = readOptionalString(raw.minAmountOut) ?? amountOut;\n\n if (!router || !amountOut || !minAmountOut) {\n if (required) throw invalidQuote(\"Quote response is missing route fields\");\n return undefined;\n }\n\n return {\n router,\n ...(readOptionalString(raw.market)\n ? { market: readOptionalString(raw.market) }\n : {}),\n amountOut: validateResponseAmount(amountOut, \"amountOut\"),\n minAmountOut: validateResponseAmount(minAmountOut, \"minAmountOut\"),\n raw,\n };\n}\n\nfunction validateResponseAmount(value: string, field: string): string {\n try {\n return assertBaseUnitAmount(value);\n } catch (error) {\n throw invalidQuote(`Quote response has invalid ${field}`, error);\n }\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction readTimestamp(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && /^\\d+$/.test(value)) return Number(value);\n return undefined;\n}\n\nfunction invalidQuote(message: string, cause?: unknown): SwapSdkError {\n return new SwapSdkError(\"INVALID_API_RESPONSE\", \"quote\", message, {\n cause,\n });\n}\n","import { z } from \"zod\";\nimport type {\n SwapHistoryDataRaw,\n SwapHistoryRecordRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport type { AssetRef, ChainRef } from \"../types/chain\";\nimport type {\n HistoryStatus,\n SwapHistoryItem,\n SwapHistoryPage,\n} from \"../types/history\";\nimport { fromApiChain } from \"./chain\";\nimport { decimalStringSchema } from \"./schemas\";\n\nconst historyRecordSchema = z\n .object({\n id: z.number().int(),\n sender: z.string(),\n recipient: z.unknown().optional(),\n from_hash: z.string(),\n to_hash: z.string().nullable().optional(),\n deposit_address: z.string().optional(),\n from_token: z.string(),\n to_token: z.string(),\n from_chain: z.string(),\n to_chain: z.string(),\n amount_in: decimalStringSchema.optional(),\n estimated_out: decimalStringSchema.optional(),\n actual_out: decimalStringSchema.nullable().optional(),\n router: z.string().optional(),\n status: z.string().optional(),\n swap_id: z.string().nullable().optional(),\n status_response: z.record(z.string(), z.unknown()).optional(),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n })\n .passthrough();\n\nconst historyPageSchema = z.object({\n record_list: z.array(historyRecordSchema),\n page_number: z.number().int().nonnegative(),\n page_size: z.number().int().nonnegative(),\n total_page: z.number().int().nonnegative(),\n total_size: z.number().int().nonnegative(),\n});\n\nconst HISTORY_STATUS_MAP: Record<string, HistoryStatus> = {\n PENDING: \"pending\",\n CREATED: \"pending\",\n PROCESSING: \"processing\",\n IN_PROGRESS: \"processing\",\n SUCCESS: \"completed\",\n COMPLETED: \"completed\",\n FILLED: \"completed\",\n FAILED: \"failed\",\n REFUNDED: \"refunded\",\n EXPIRED: \"expired\",\n};\n\nconst NATIVE_ASSET_IDS: Partial<Record<ChainRef, readonly string[]>> = {\n solana: [\n \"sol\",\n \"So11111111111111111111111111111111111111112\",\n ],\n aptos: [\"0xa\", \"0x1::aptos_coin::AptosCoin\"],\n near: [\"near\", \"wrap.near\"],\n tron: [\"trx\"],\n btc: [\"btc\", \"bitcoin\"],\n zcash: [\"zec\", \"zcash\", \"nep141:zec.omft.near\"],\n sui: [\"0x2::sui::SUI\"],\n};\n\nexport function normalizeHistory(raw: SwapHistoryDataRaw): SwapHistoryPage {\n const parsed = historyPageSchema.safeParse(raw);\n if (!parsed.success) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"history\",\n \"Invalid swap history response\",\n {\n details: {\n issues: parsed.error.issues.map((issue) => ({\n path: issue.path.join(\".\"),\n message: issue.message,\n })),\n },\n }\n );\n }\n\n return {\n items: raw.record_list.map(normalizeHistoryItem),\n page: raw.page_number,\n pageSize: raw.page_size,\n totalPages: raw.total_page,\n totalItems: raw.total_size,\n };\n}\n\nexport function normalizeHistoryStatus(status: unknown): HistoryStatus {\n if (typeof status !== \"string\") return \"unknown\";\n return HISTORY_STATUS_MAP[status.trim().toUpperCase()] ?? \"unknown\";\n}\n\nfunction normalizeHistoryItem(raw: SwapHistoryRecordRaw): SwapHistoryItem {\n const fromChain = fromApiChain(raw.from_chain);\n const toChain = fromApiChain(raw.to_chain);\n const createdAt = normalizeTimestamp(raw.created_at);\n const updatedAt = normalizeTimestamp(raw.updated_at);\n\n return {\n id: String(raw.id),\n sender: raw.sender,\n ...(typeof raw.recipient === \"string\" && raw.recipient\n ? { recipient: raw.recipient }\n : {}),\n fromChain,\n toChain,\n tokenIn: normalizeHistoryAsset(fromChain, raw.from_token),\n tokenOut: normalizeHistoryAsset(toChain, raw.to_token),\n ...(raw.amount_in !== undefined ? { amountIn: raw.amount_in } : {}),\n ...(raw.estimated_out !== undefined\n ? { estimatedOut: raw.estimated_out }\n : {}),\n ...(raw.actual_out !== undefined && raw.actual_out !== null\n ? { actualOut: raw.actual_out }\n : {}),\n ...(raw.from_hash ? { sourceTxHash: raw.from_hash } : {}),\n ...(raw.to_hash ? { destinationTxHash: raw.to_hash } : {}),\n ...(raw.swap_id ? { orderId: raw.swap_id } : {}),\n ...(raw.deposit_address ? { depositAddress: raw.deposit_address } : {}),\n ...(raw.router ? { router: raw.router } : {}),\n status: normalizeHistoryStatus(raw.status),\n ...(createdAt ? { createdAt } : {}),\n ...(updatedAt ? { updatedAt } : {}),\n ...(raw.status_response ? { statusResponse: raw.status_response } : {}),\n raw,\n };\n}\n\nfunction normalizeHistoryAsset(chain: ChainRef, address: string): AssetRef {\n return {\n chain,\n address,\n ...(isNativeAsset(chain, address) ? { isNative: true } : {}),\n };\n}\n\nfunction isNativeAsset(chain: ChainRef, address: string): boolean {\n const normalized = address.trim().toLowerCase();\n if (\n /^[1-9]\\d*$/.test(chain) &&\n (normalized === \"0x0000000000000000000000000000000000000000\" ||\n normalized === \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\")\n ) {\n return true;\n }\n return (NATIVE_ASSET_IDS[chain] ?? []).some(\n (candidate) => candidate.toLowerCase() === normalized\n );\n}\n\nfunction normalizeTimestamp(value: string | undefined): string | undefined {\n if (!value?.trim()) return undefined;\n const trimmed = value.trim();\n const normalized = /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?$/.test(\n trimmed\n )\n ? `${trimmed.replace(\" \", \"T\")}Z`\n : trimmed;\n const date = new Date(normalized);\n return Number.isNaN(date.getTime()) ? undefined : date.toISOString();\n}\n","import type {\n SwapCrossChainToTokensDataRaw,\n SwapFromTokensDataRaw,\n SwapTokenListRowRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport type { ChainRef } from \"../types/chain\";\nimport type { SwapTokenListItem } from \"../types/tokens\";\n\ninterface TokenListChainMetadata {\n chain: ChainRef;\n blockchain: string;\n}\n\nconst TOKEN_LIST_CHAIN_METADATA = new Map<number, TokenListChainMetadata>([\n [1, { chain: \"1\", blockchain: \"eth\" }],\n [10, { chain: \"10\", blockchain: \"op\" }],\n [43114, { chain: \"43114\", blockchain: \"avax\" }],\n [4663, { chain: \"4663\", blockchain: \"robinhood\" }],\n [747474, { chain: \"747474\", blockchain: \"katana\" }],\n [146, { chain: \"146\", blockchain: \"sonic\" }],\n [130, { chain: \"130\", blockchain: \"unichain\" }],\n [1672, { chain: \"1672\", blockchain: \"pharos\" }],\n [4217, { chain: \"4217\", blockchain: \"tempo\" }],\n [56, { chain: \"56\", blockchain: \"bsc\" }],\n [100, { chain: \"100\", blockchain: \"gnosis\" }],\n [137, { chain: \"137\", blockchain: \"pol\" }],\n [143, { chain: \"143\", blockchain: \"monad\" }],\n [196, { chain: \"196\", blockchain: \"xlayer\" }],\n [8453, { chain: \"8453\", blockchain: \"base\" }],\n [9745, { chain: \"9745\", blockchain: \"plasma\" }],\n [42161, { chain: \"42161\", blockchain: \"arb\" }],\n [80094, { chain: \"80094\", blockchain: \"bera\" }],\n [195, { chain: \"tron\", blockchain: \"tron\" }],\n [501, { chain: \"solana\", blockchain: \"sol\" }],\n [784, { chain: \"sui\", blockchain: \"sui\" }],\n [900001, { chain: \"near\", blockchain: \"near\" }],\n [900002, { chain: \"btc\", blockchain: \"btc\" }],\n [900010, { chain: \"zcash\", blockchain: \"zec\" }],\n [900012, { chain: \"aptos\", blockchain: \"aptos\" }],\n]);\n\nexport function normalizeFromTokenList(\n raw: SwapFromTokensDataRaw,\n chainId: number\n): SwapTokenListItem[] {\n if (!isRecord(raw) || Array.isArray(raw)) {\n throw invalidTokenList(\"From-token response data must be an object\");\n }\n return normalizeRows(Object.values(raw), chainId);\n}\n\nexport function normalizeCrossChainToTokenList(\n raw: SwapCrossChainToTokensDataRaw,\n chainId: number\n): SwapTokenListItem[] {\n if (!isRecord(raw) || !Array.isArray(raw.tokens)) {\n throw invalidTokenList(\n \"Cross-chain to-token response data must contain a tokens array\"\n );\n }\n return normalizeRows(raw.tokens, chainId);\n}\n\nfunction normalizeRows(\n rows: unknown[],\n chainId: number\n): SwapTokenListItem[] {\n const tokens = rows\n .map((row) => normalizeRow(row, chainId))\n .filter((token): token is SwapTokenListItem => token !== undefined);\n if (rows.length > 0 && tokens.length === 0) {\n throw invalidTokenList(\"Token-list response contains no valid token rows\");\n }\n return tokens;\n}\n\nfunction normalizeRow(\n value: unknown,\n chainId: number\n): SwapTokenListItem | undefined {\n if (!isRecord(value)) return undefined;\n const row = value as SwapTokenListRowRaw;\n const assetId =\n readString(row.assetId) ??\n readString(row.address) ??\n readString(row.contractAddress) ??\n readString(row.coinType);\n const symbol = readString(row.symbol);\n const decimals = readDecimals(row.decimals);\n if (!assetId || !symbol || decimals === undefined) return undefined;\n\n const metadata = TOKEN_LIST_CHAIN_METADATA.get(chainId);\n const chain = metadata?.chain ?? (String(chainId) as ChainRef);\n const blockchain =\n readString(row.blockchain)?.toLowerCase() ??\n metadata?.blockchain ??\n String(chainId);\n const rawAddress =\n readString(row.contractAddress) ??\n readString(row.address) ??\n readString(row.coinType);\n const isNative = isNativeToken({\n row,\n chain,\n blockchain,\n assetId,\n rawAddress,\n symbol,\n });\n const sources = Array.isArray(row.sources)\n ? row.sources.filter(\n (source): source is string =>\n typeof source === \"string\" && source.trim().length > 0\n )\n : readString(row.platform)\n ? [readString(row.platform)!]\n : [];\n const price =\n typeof row.price === \"string\" || typeof row.price === \"number\"\n ? row.price\n : null;\n const priceUpdatedAt =\n typeof row.updated_at === \"number\" && Number.isFinite(row.updated_at)\n ? row.updated_at\n : null;\n\n return {\n chain,\n address: assetId,\n symbol,\n decimals,\n isNative,\n tokenListChainId: chainId,\n blockchain,\n assetId,\n contractAddress: isNative ? null : rawAddress ?? null,\n coinType: readString(row.coinType) ?? null,\n name: readString(row.name) ?? null,\n logoURI: readString(row.logoURI) ?? null,\n price,\n priceUpdatedAt,\n sources,\n raw: { ...row },\n };\n}\n\nfunction isNativeToken(input: {\n row: SwapTokenListRowRaw;\n chain: ChainRef;\n blockchain: string;\n assetId: string;\n rawAddress?: string;\n symbol: string;\n}): boolean {\n if (input.row.isNative === true) return true;\n const address = (input.rawAddress ?? \"\").toLowerCase();\n const assetId = input.assetId.toLowerCase();\n const coinType = readString(input.row.coinType)?.toLowerCase() ?? \"\";\n\n if (/^[1-9]\\d*$/.test(input.chain)) {\n return (\n address === \"0x0000000000000000000000000000000000000000\" ||\n address === \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\" ||\n ((input.blockchain === \"pol\" || input.blockchain === \"polygon\") &&\n address === \"0x0000000000000000000000000000000000001010\")\n );\n }\n if (input.chain === \"solana\") {\n return (\n address === \"11111111111111111111111111111111\" ||\n assetId === \"nep141:sol.omft.near\"\n );\n }\n if (input.chain === \"tron\") {\n return input.symbol.toUpperCase() === \"TRX\";\n }\n if (input.chain === \"sui\") {\n return address.endsWith(\"::sui::sui\");\n }\n if (input.chain === \"aptos\") {\n if (coinType === \"0x1::aptos_coin::aptoscoin\") return true;\n if (!/^0x[0-9a-f]+$/.test(address)) return false;\n const compactAddress = address.slice(2).replace(/^0+/, \"\") || \"0\";\n return compactAddress === \"a\";\n }\n return false;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim()\n ? value.trim()\n : undefined;\n}\n\nfunction readDecimals(value: unknown): number | undefined {\n const decimals =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\" && value.trim()\n ? Number(value)\n : Number.NaN;\n return Number.isInteger(decimals) && decimals >= 0 ? decimals : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction invalidTokenList(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_API_RESPONSE\", \"tokens\", message);\n}\n","import { SwapSdkError } from \"../core/errors\";\nimport type { McaWithdrawCollateral } from \"./types\";\n\nexport interface ResolveMcaWithdrawPolicyInput {\n /** Requested withdraw amount in Burrow internal decimals. */\n amountBurrow: string;\n /** Current supplied balance for the token in Burrow internal decimals. */\n suppliedBalance: string;\n availableBalance: string;\n /** Human/display withdraw amount, in the same precision as availableBalance. */\n amountIn: string;\n isMax: boolean;\n}\n\ninterface DecimalParts {\n digits: bigint;\n scale: number;\n}\n\nexport function resolveMcaWithdrawPolicy(\n input: ResolveMcaWithdrawPolicyInput\n): McaWithdrawCollateral & { needDecrease: boolean; withdrawAll: boolean } {\n const decreaseCollateral = resolveMcaRequiredCollateralDecrease({\n amountBurrow: input.amountBurrow,\n suppliedBalance: input.suppliedBalance,\n });\n const available = parseDecimal(input.availableBalance, \"availableBalance\");\n const amount = parseDecimal(input.amountIn, \"amountIn\");\n\n return {\n ...decreaseCollateral,\n withdrawAll:\n input.isMax ||\n (available.digits > 0n && isAtLeastWithdrawAllThreshold(amount, available)),\n };\n}\n\nexport interface ResolveMcaRequiredCollateralDecreaseInput {\n amountBurrow: string;\n suppliedBalance: string;\n}\n\n/**\n * Matches Lending Withdraw and multi-chain-lending's 2026-08-20 hotfix:\n * only the part of the requested withdraw that exceeds supplied balance must\n * be removed from collateral.\n */\nexport function resolveMcaRequiredCollateralDecrease(\n input: ResolveMcaRequiredCollateralDecreaseInput\n): Pick<McaWithdrawCollateral, \"needDecrease\" | \"decreaseAmountBurrow\"> & {\n needDecrease: boolean;\n} {\n const amount = parseBurrowDecimal(input.amountBurrow, \"amountBurrow\");\n const supplied = parseBurrowDecimal(\n input.suppliedBalance,\n \"suppliedBalance\"\n );\n const [amountScaled, suppliedScaled] = alignScale(amount, supplied);\n const decreaseScaled =\n amountScaled > suppliedScaled ? amountScaled - suppliedScaled : 0n;\n return resolveParsedMcaDecreaseCollateral({\n digits: decreaseScaled,\n scale: Math.max(amount.scale, supplied.scale),\n });\n}\n\n/**\n * Derive needDecreaseCollateral from an already-computed required decrease and\n * serialize it in canonical, non-exponential decimal form.\n */\nexport function resolveMcaDecreaseCollateral(\n decreaseAmountBurrow: string,\n field = \"decreaseAmountBurrow\"\n): Pick<McaWithdrawCollateral, \"needDecrease\" | \"decreaseAmountBurrow\"> & {\n needDecrease: boolean;\n} {\n const parsed = parseBurrowDecimal(decreaseAmountBurrow, field);\n return resolveParsedMcaDecreaseCollateral(parsed);\n}\n\nfunction resolveParsedMcaDecreaseCollateral(\n parsed: DecimalParts\n): Pick<McaWithdrawCollateral, \"needDecrease\" | \"decreaseAmountBurrow\"> & {\n needDecrease: boolean;\n} {\n const needDecrease = parsed.digits > 0n;\n return {\n needDecrease,\n decreaseAmountBurrow: needDecrease ? formatDecimal(parsed) : \"0\",\n };\n}\n\nfunction isAtLeastWithdrawAllThreshold(\n amount: DecimalParts,\n available: DecimalParts\n): boolean {\n const [amountScaled, availableScaled] = alignScale(amount, available);\n return amountScaled * 1_000_000n >= availableScaled * 999_999n;\n}\n\nfunction alignScale(a: DecimalParts, b: DecimalParts): [bigint, bigint] {\n const scale = Math.max(a.scale, b.scale);\n return [\n a.digits * pow10(scale - a.scale),\n b.digits * pow10(scale - b.scale),\n ];\n}\n\nfunction parseDecimal(value: string, field: string): DecimalParts {\n const trimmed = value.trim();\n if (!/^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/.test(trimmed)) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `${field} must be a non-negative decimal string`\n );\n }\n const [integer = \"0\", fraction = \"\"] = trimmed.split(\".\");\n return {\n digits: BigInt(`${integer}${fraction}`),\n scale: fraction.length,\n };\n}\n\nfunction parseBurrowDecimal(value: string, field: string): DecimalParts {\n const trimmed = value.trim();\n const match = /^(?:([0-9]+)(?:\\.([0-9]*))?|\\.([0-9]+))(?:[eE]([+-]?[0-9]+))?$/.exec(\n trimmed\n );\n if (!match) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `${field} must be a non-negative decimal string`\n );\n }\n\n const integer = match[1] ?? \"0\";\n const fraction = match[2] ?? match[3] ?? \"\";\n const exponent = Number(match[4] ?? \"0\");\n if (!Number.isSafeInteger(exponent) || Math.abs(exponent) > 100_000) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"quote\",\n `${field} exponent is out of range`\n );\n }\n\n let digits = BigInt(`${integer}${fraction}` || \"0\");\n let scale = fraction.length - exponent;\n if (scale < 0) {\n digits *= pow10(-scale);\n scale = 0;\n }\n return { digits, scale };\n}\n\nfunction formatDecimal(value: DecimalParts): string {\n if (value.digits === 0n) return \"0\";\n if (value.scale === 0) return value.digits.toString();\n\n const padded = value.digits.toString().padStart(value.scale + 1, \"0\");\n const splitAt = padded.length - value.scale;\n const integer = padded.slice(0, splitAt);\n const fraction = padded.slice(splitAt).replace(/0+$/, \"\");\n return fraction ? `${integer}.${fraction}` : integer;\n}\n\nfunction pow10(exponent: number): bigint {\n return 10n ** BigInt(exponent);\n}\n","import type {\n SwapMcaPayloadRaw,\n SwapQuoteRequestRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport { serializeQuoteRequest } from \"../normalizers/quote\";\nimport type { Quote } from \"../types/quote\";\nimport { resolveMcaDecreaseCollateral } from \"./collateral\";\nimport type {\n McaDepositQuote,\n McaQuote,\n McaQuoteRequest,\n McaSignerIdentity,\n McaWithdrawQuoteRequest,\n} from \"./types\";\n\nexport function serializeMcaQuoteRequest(\n request: McaQuoteRequest,\n signer: McaSignerIdentity\n): SwapQuoteRequestRaw {\n const mcaAccountId = request.mcaAccountId.trim();\n if (!mcaAccountId) {\n throw invalidRequest(\"mcaAccountId is required\");\n }\n if (signer.chain !== request.signerChain) {\n throw invalidRequest(\n `Resolved signer chain ${signer.chain} does not match requested signer chain ${request.signerChain}`\n );\n }\n const identityKey = signer.identityKey.trim();\n if (!identityKey) {\n throw invalidRequest(\"signer identityKey is required\");\n }\n const decreaseCollateral =\n request.flow === \"withdraw\"\n ? resolveMcaDecreaseCollateral(\n request.collateral.decreaseAmountBurrow,\n \"collateral.decreaseAmountBurrow\"\n )\n : undefined;\n\n const mca: SwapMcaPayloadRaw = {\n flow: request.flow,\n mcaAccountId,\n signer: {\n chain: signer.chain,\n identityKey,\n },\n ...(request.flow === \"deposit\"\n ? { useAsCollateral: request.collateral.useAsCollateral }\n : {\n needDecreaseCollateral: decreaseCollateral!.needDecrease,\n decreaseCollateralAmountBurrow:\n decreaseCollateral!.decreaseAmountBurrow,\n ...(request.collateral.withdrawAll ? { withdrawAll: true } : {}),\n }),\n ...(request.recipientMsgSignatures\n ? { recipientMsgSignatures: [...request.recipientMsgSignatures] }\n : {}),\n ...(request.depositSignerProofSignatures\n ? {\n depositSignerProofSignatures: [\n ...request.depositSignerProofSignatures,\n ],\n }\n : {}),\n };\n\n return {\n ...serializeQuoteRequest(request),\n mca,\n };\n}\n\nexport function normalizeMcaQuote(\n request: McaQuoteRequest,\n signer: McaSignerIdentity,\n quote: Quote\n): McaQuote {\n const mca = serializeMcaQuoteRequest(request, signer).mca!;\n const base = {\n ...quote,\n flow: request.flow,\n mcaAccountId: request.mcaAccountId.trim(),\n signer: Object.freeze({\n ...signer,\n identityKey: signer.identityKey.trim(),\n }),\n request,\n mca: Object.freeze({ ...mca }),\n };\n\n if (request.flow === \"deposit\") {\n if (readString(quote.raw.nearDepositTxError)) {\n throw invalidResponse(String(quote.raw.nearDepositTxError));\n }\n return {\n ...base,\n flow: \"deposit\",\n executionMode: \"deposit\",\n request,\n ...(quote.raw.nearDepositTx === undefined\n ? {}\n : { nearDepositTx: quote.raw.nearDepositTx }),\n } satisfies McaDepositQuote;\n }\n\n if (readString(quote.raw.nearMcaWithdrawTxError)) {\n throw invalidResponse(String(quote.raw.nearMcaWithdrawTxError));\n }\n\n const mode = resolveWithdrawMode(request);\n const preview =\n mode === \"withdraw-near\"\n ? quote.raw.nearMcaWithdrawTx ?? quote.raw.mcaWithdrawToIntents\n : quote.raw.mcaWithdrawToIntents;\n if (!isPlainObject(preview)) {\n throw invalidResponse(\n mode === \"withdraw-near\"\n ? \"MCA withdraw quote is missing nearMcaWithdrawTx\"\n : \"MCA withdraw quote is missing mcaWithdrawToIntents\"\n );\n }\n\n return {\n ...base,\n flow: \"withdraw\",\n executionMode: mode,\n request,\n preview,\n };\n}\n\nfunction resolveWithdrawMode(\n request: McaWithdrawQuoteRequest\n): \"withdraw-near\" | \"withdraw-relayer\" {\n if (request.executionPreference === \"near\") return \"withdraw-near\";\n if (request.executionPreference === \"relayer\") return \"withdraw-relayer\";\n\n const recipient = request.recipient?.trim();\n const boundNearAccountId = request.boundNearAccountId?.trim();\n return request.toChain === \"near\" &&\n Boolean(recipient) &&\n recipient === boundNearAccountId\n ? \"withdraw-near\"\n : \"withdraw-relayer\";\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction invalidRequest(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_REQUEST\", \"quote\", message);\n}\n\nfunction invalidResponse(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_API_RESPONSE\", \"quote\", message);\n}\n","import { SwapSdkError } from \"../core/errors\";\nimport type {\n McaSignerChain,\n McaSignerIdentity,\n} from \"./types\";\n\nexport type McaWalletKey =\n | \"EVM\"\n | \"Solana\"\n | \"Bitcoin\"\n | \"Near\"\n | \"Aptos\"\n | \"Sui\"\n | \"Zcash\"\n | \"Tron\";\n\nexport type McaWalletDescriptor = Partial<Record<McaWalletKey, string>>;\n\nexport const DEFAULT_MCA_SIGNER_PRIORITY = [\n \"evm\",\n \"solana\",\n \"btc\",\n \"aptos\",\n \"near\",\n \"zcash\",\n \"sui\",\n \"tron\",\n] as const satisfies readonly McaSignerChain[];\n\nconst WALLET_KEYS: Record<McaSignerChain, McaWalletKey> = {\n evm: \"EVM\",\n solana: \"Solana\",\n btc: \"Bitcoin\",\n near: \"Near\",\n aptos: \"Aptos\",\n sui: \"Sui\",\n zcash: \"Zcash\",\n tron: \"Tron\",\n};\n\nexport function formatMcaWallet(\n chain: McaSignerChain,\n identityKey: string\n): McaWalletDescriptor {\n const identity = identityKey.trim();\n if (!identity) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"sign\",\n \"MCA signer identityKey is required\"\n );\n }\n return {\n [WALLET_KEYS[chain]]:\n chain === \"evm\" ? identity.replace(/^0x/i, \"\") : identity,\n };\n}\n\nexport function selectMcaSigner(\n boundWallets: ReadonlyArray<Readonly<Record<string, unknown>>>,\n connectedSigners: readonly McaSignerIdentity[],\n priority: readonly McaSignerChain[] = DEFAULT_MCA_SIGNER_PRIORITY\n): McaSignerIdentity | undefined {\n for (const chain of priority) {\n const key = WALLET_KEYS[chain];\n const boundValues = boundWallets.flatMap((wallet) => {\n const value = wallet[key];\n return typeof value === \"string\" && value.trim() ? [value.trim()] : [];\n });\n if (boundValues.length === 0) continue;\n\n for (const signer of connectedSigners) {\n if (signer.chain !== chain) continue;\n const candidates = [signer.identityKey, signer.accountId]\n .filter((value): value is string => Boolean(value?.trim()))\n .map((value) => normalizeIdentity(chain, value));\n if (\n boundValues.some((bound) =>\n candidates.includes(normalizeIdentity(chain, bound))\n )\n ) {\n return signer;\n }\n }\n }\n return undefined;\n}\n\nexport function isSameMcaSignerIdentity(\n a: Pick<McaSignerIdentity, \"chain\" | \"identityKey\">,\n b: Pick<McaSignerIdentity, \"chain\" | \"identityKey\">\n): boolean {\n return (\n a.chain === b.chain &&\n normalizeIdentity(a.chain, a.identityKey) ===\n normalizeIdentity(b.chain, b.identityKey)\n );\n}\n\nfunction normalizeIdentity(chain: McaSignerChain, value: string): string {\n const trimmed = value.trim();\n if (chain === \"evm\") return trimmed.replace(/^0x/i, \"\").toLowerCase();\n if (chain === \"sui\" || chain === \"aptos\") return trimmed.toLowerCase();\n return trimmed;\n}\n","import { SwapSdkError } from \"../core/errors\";\nimport { assertBaseUnitAmount, type BaseUnitAmount } from \"../types/chain\";\n\nconst HUMAN_AMOUNT = /^(0|[1-9]\\d*)(?:\\.(\\d+))?$/;\nconst MAX_DECIMALS = 255;\n\nexport function parseUnits(value: string, decimals: number): BaseUnitAmount {\n assertDecimals(decimals);\n const match = HUMAN_AMOUNT.exec(value);\n if (!match) {\n throw invalid(`Invalid human-readable amount: ${value}`);\n }\n const whole = match[1]!;\n const fraction = match[2] ?? \"\";\n if (fraction.length > decimals) {\n throw invalid(\n `Amount has ${fraction.length} fractional digits but token supports ${decimals}`\n );\n }\n const combined = `${whole}${fraction.padEnd(decimals, \"0\")}`;\n return (combined.replace(/^0+(?=\\d)/, \"\") || \"0\") as BaseUnitAmount;\n}\n\nexport function formatUnits(value: BaseUnitAmount, decimals: number): string {\n assertDecimals(decimals);\n const amount = assertBaseUnitAmount(value);\n if (decimals === 0) return amount;\n\n const padded = amount.padStart(decimals + 1, \"0\");\n const whole = padded.slice(0, -decimals);\n const fraction = padded.slice(-decimals).replace(/0+$/, \"\");\n return fraction ? `${whole}.${fraction}` : whole;\n}\n\nfunction assertDecimals(decimals: number): void {\n if (\n !Number.isSafeInteger(decimals) ||\n decimals < 0 ||\n decimals > MAX_DECIMALS\n ) {\n throw invalid(`Invalid token decimals: ${String(decimals)}`);\n }\n}\n\nfunction invalid(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_REQUEST\", \"quote\", message);\n}\n","import type {\n SwapBuildRequestRaw,\n SwapMcaRelayerRequestRaw,\n} from \"../api/rawTypes\";\nimport { SwapSdkError } from \"../core/errors\";\nimport type { NearTransaction } from \"../types/execution\";\nimport { parseUnits } from \"../utils/units\";\n\nexport function extractMcaWithdrawBusiness(\n preview: unknown\n): Record<string, unknown> | undefined {\n if (!isPlainObject(preview)) return undefined;\n if (isPlainObject(preview.business)) return cloneObject(preview.business);\n return extractPreviewField(preview, \"business\");\n}\n\nexport function extractMcaWithdrawSignerWallet(\n preview: unknown\n): Record<string, unknown> | undefined {\n if (!isPlainObject(preview)) return undefined;\n if (isPlainObject(preview.signer_wallet)) {\n return cloneObject(preview.signer_wallet);\n }\n return extractPreviewField(preview, \"signer_wallet\");\n}\n\nexport interface ExtractMcaWithdrawDepositAddressInput {\n bestQuote?: unknown;\n preview?: unknown;\n snapshotDepositAddress?: string | null;\n storeDepositAddress?: string | null;\n}\n\nexport function extractMcaWithdrawDepositAddress(\n input: ExtractMcaWithdrawDepositAddressInput\n): string {\n return (\n pickString(input.snapshotDepositAddress) ||\n pickString(input.storeDepositAddress) ||\n extractDepositAddressFromObject(input.preview) ||\n extractDepositAddressFromObject(input.bestQuote)\n );\n}\n\nexport interface BuildNearMcaWithdrawTransactionsInput {\n business: Record<string, unknown>;\n signerWallet: Record<string, unknown>;\n signature?: string;\n mcaAccountId: string;\n}\n\nexport function buildNearMcaWithdrawTransactions(\n preview: unknown,\n input: BuildNearMcaWithdrawTransactionsInput\n): NearTransaction[] {\n if (!isPlainObject(preview)) {\n throw invalidPreview(\"MCA withdraw preview must be an object\");\n }\n const fallbackAccount = input.mcaAccountId.trim();\n const executionArgs = {\n business: cloneObject(input.business),\n signer_wallet: cloneObject(input.signerWallet),\n signature: input.signature ?? \"\",\n };\n const transactions = Array.isArray(preview.transactions)\n ? preview.transactions\n : [];\n const mapped = transactions.flatMap((value): NearTransaction[] => {\n if (!isPlainObject(value)) return [];\n const receiverId = pickString(value.contractId) || fallbackAccount;\n if (!receiverId) return [];\n const methodName = pickString(value.methodName) || \"exec\";\n const existingArgs = isPlainObject(value.args)\n ? cloneObject(value.args)\n : {};\n return [\n {\n receiverId,\n actions: [\n {\n type: \"FunctionCall\",\n params: {\n methodName,\n args: { ...existingArgs, ...executionArgs },\n gas: normalizeGas(value.gas),\n deposit: normalizeDeposit(value.deposit),\n },\n },\n ],\n },\n ];\n });\n if (mapped.length > 0) return mapped;\n if (!fallbackAccount) {\n throw invalidPreview(\"MCA withdraw preview is missing mcaAccountId\");\n }\n return [\n {\n receiverId: fallbackAccount,\n actions: [\n {\n type: \"FunctionCall\",\n params: {\n methodName: \"exec\",\n args: executionArgs,\n gas: \"300000000000000\",\n deposit: \"0\",\n },\n },\n ],\n },\n ];\n}\n\nexport interface BuildMcaWithdrawRelayerRequestInput {\n quoteBuild: SwapBuildRequestRaw;\n mcaRelayer: SwapMcaRelayerRequestRaw;\n isCrossChain: boolean;\n depositAddress: string;\n mcaAccountId: string;\n recipientFallback?: string | null;\n}\n\nexport function buildMcaWithdrawRelayerRequest(\n input: BuildMcaWithdrawRelayerRequestInput\n): SwapBuildRequestRaw {\n const mcaAccountId = input.mcaAccountId.trim();\n if (!mcaAccountId) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"build\",\n \"mcaAccountId is required for an MCA relayer request\"\n );\n }\n const recipient =\n pickString(input.quoteBuild.recipient) ||\n pickString(input.recipientFallback);\n return {\n ...input.quoteBuild,\n ...(recipient ? { recipient } : {}),\n mcaRelayer: {\n ...input.mcaRelayer,\n wallet: cloneValue(input.mcaRelayer.wallet),\n business: cloneObject(input.mcaRelayer.business),\n },\n mca: {\n ...(input.quoteBuild.mca ?? {}),\n flow:\n input.quoteBuild.mca?.flow ??\n input.quoteBuild.mca?.mcaFlow ??\n \"withdraw\",\n mcaAccountId,\n },\n deposit_address: input.depositAddress.trim(),\n is_cross_chain: input.isCrossChain,\n tx_type: \"mca-withdraw-relayer\",\n multi_addr: mcaAccountId,\n };\n}\n\nfunction extractPreviewField(\n preview: Record<string, unknown>,\n field: \"business\" | \"signer_wallet\"\n): Record<string, unknown> | undefined {\n const transactions = preview.transactions;\n if (Array.isArray(transactions)) {\n for (const transaction of transactions) {\n if (!isPlainObject(transaction) || !isPlainObject(transaction.args)) {\n continue;\n }\n const value = parseObject(transaction.args[field]);\n if (value) return cloneObject(value);\n }\n }\n\n const actions = preview.actions;\n if (Array.isArray(actions)) {\n for (const action of actions) {\n if (\n !isPlainObject(action) ||\n action.type !== \"FunctionCall\" ||\n !isPlainObject(action.params)\n ) {\n continue;\n }\n const args = parseObject(action.params.args);\n if (!args) continue;\n const value = parseObject(args[field]);\n if (value) return cloneObject(value);\n }\n }\n return undefined;\n}\n\nfunction extractDepositAddressFromObject(value: unknown): string {\n if (!isPlainObject(value)) return \"\";\n const direct = pickString(value.depositAddress) || pickString(value.deposit_address);\n if (direct) return direct;\n if (!isPlainObject(value.deposit)) return \"\";\n return (\n pickString(value.deposit.depositAddress) ||\n pickString(value.deposit.deposit_address)\n );\n}\n\nfunction parseObject(value: unknown): Record<string, unknown> | undefined {\n if (isPlainObject(value)) return value;\n if (typeof value !== \"string\" || !value.trim()) return undefined;\n try {\n const parsed: unknown = JSON.parse(value);\n return isPlainObject(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction pickString(value: unknown): string {\n return typeof value === \"string\" && value.trim() ? value.trim() : \"\";\n}\n\nfunction normalizeGas(value: unknown): string {\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return BigInt(Math.trunc(value)) < 10_000n\n ? (BigInt(Math.trunc(value)) * 1_000_000_000_000n).toString()\n : BigInt(Math.trunc(value)).toString();\n }\n if (typeof value === \"string\" && /^\\d+$/.test(value.trim())) {\n const gas = BigInt(value.trim());\n return gas < 10_000n ? (gas * 1_000_000_000_000n).toString() : gas.toString();\n }\n return \"300000000000000\";\n}\n\nfunction normalizeDeposit(value: unknown): string {\n if (value === undefined || value === null || value === \"\") return \"0\";\n const decimal =\n typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? String(value)\n : typeof value === \"string\"\n ? value.trim()\n : \"\";\n if (!decimal) {\n throw invalidPreview(\"MCA withdraw transaction has an invalid NEAR deposit\");\n }\n try {\n return parseUnits(decimal, 24);\n } catch (error) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n \"MCA withdraw transaction has an invalid NEAR deposit\",\n { cause: error }\n );\n }\n}\n\nfunction cloneObject(\n value: Readonly<Record<string, unknown>>\n): Record<string, unknown> {\n return cloneValue(value) as Record<string, unknown>;\n}\n\nfunction cloneValue<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction invalidPreview(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_API_RESPONSE\", \"build\", message);\n}\n","import type { ApiRequestOptions } from \"../api/ApiClient\";\nimport type {\n SwapReportRequestRaw,\n SwapMcaRelayerRequestRaw,\n} from \"../api/rawTypes\";\nimport type { SwapClient } from \"../client/SwapClient\";\nimport { asSwapSdkError, SwapSdkError } from \"../core/errors\";\nimport type {\n SwapLifecycleEvent,\n SwapWarning,\n} from \"../core/lifecycle\";\nimport type {\n ExecutorIdentityProvider,\n ExecutorMessageSigner,\n} from \"../core/registry\";\nimport { createExecutionId, normalizeBuild } from \"../normalizers/build\";\nimport { normalizeQuote } from \"../normalizers/quote\";\nimport type { SwapBuild } from \"../types/execution\";\nimport type { Quote, QuoteRequest } from \"../types/quote\";\nimport { normalizeMcaQuote, serializeMcaQuoteRequest } from \"./quote\";\nimport { formatMcaWallet, isSameMcaSignerIdentity } from \"./signers\";\nimport type {\n McaQuote,\n McaQuoteRequest,\n McaSignerIdentity,\n McaSwapInput,\n McaSwapResult,\n} from \"./types\";\nimport {\n buildMcaWithdrawRelayerRequest,\n buildNearMcaWithdrawTransactions,\n extractMcaWithdrawBusiness,\n extractMcaWithdrawDepositAddress,\n extractMcaWithdrawSignerWallet,\n} from \"./withdraw\";\n\nexport interface McaSwapServiceConfig {\n now?: () => number;\n reportMode?: \"auto\" | \"manual\" | \"disabled\";\n onEvent?: (event: SwapLifecycleEvent) => void;\n resolveSignerIdentity(\n chain: McaSignerIdentity[\"chain\"]\n ): ExecutorIdentityProvider;\n resolveMessageSigner(\n chain: McaSignerIdentity[\"chain\"]\n ): ExecutorMessageSigner;\n buildStandardSwap(input: {\n quote: Quote;\n signal?: AbortSignal;\n idempotencyKey?: string;\n }): Promise<SwapBuild>;\n}\n\nexport class McaSwapService {\n private readonly now: () => number;\n private readonly reportMode: \"auto\" | \"manual\" | \"disabled\";\n private readonly onEvent?: (event: SwapLifecycleEvent) => void;\n private readonly resolveSignerIdentity: McaSwapServiceConfig[\"resolveSignerIdentity\"];\n private readonly resolveMessageSigner: McaSwapServiceConfig[\"resolveMessageSigner\"];\n private readonly buildStandardSwap: McaSwapServiceConfig[\"buildStandardSwap\"];\n private readonly relayerReports = new Map<string, SwapReportRequestRaw>();\n\n constructor(\n private readonly client: SwapClient,\n config: McaSwapServiceConfig\n ) {\n this.now = config.now ?? Date.now;\n this.reportMode = config.reportMode ?? \"auto\";\n this.onEvent = config.onEvent;\n this.resolveSignerIdentity = config.resolveSignerIdentity;\n this.resolveMessageSigner = config.resolveMessageSigner;\n this.buildStandardSwap = config.buildStandardSwap;\n }\n\n async quote(\n request: McaQuoteRequest,\n options: ApiRequestOptions = {}\n ): Promise<McaQuote> {\n const signer = await this.readSignerIdentity(request.signerChain, \"quote\");\n const rawRequest = serializeMcaQuoteRequest(request, signer);\n const raw = await this.client.quoteRaw(rawRequest, options);\n const normalizationRequest: QuoteRequest = {\n ...request,\n extensions: {\n ...(request.extensions ?? {}),\n mca: rawRequest.mca,\n },\n };\n const quote = normalizeQuote(normalizationRequest, raw, this.now());\n return normalizeMcaQuote(request, signer, quote);\n }\n\n async build(input: {\n quote: McaQuote;\n signal?: AbortSignal;\n idempotencyKey?: string;\n }): Promise<SwapBuild> {\n if (input.quote.executionMode === \"withdraw-relayer\") {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"build\",\n \"MCA relayer withdraw requires a signature and must use swap()\"\n );\n }\n const build =\n input.quote.executionMode === \"deposit\"\n ? await this.buildStandardSwap(input)\n : this.buildNearWithdraw(input.quote);\n return {\n ...build,\n reportContext: {\n ...build.reportContext,\n multiAddr: input.quote.mcaAccountId,\n ...(input.quote.executionMode === \"deposit\"\n ? {\n txType: build.isCrossChain ? \"cross-chain\" : \"same-chain\",\n }\n : {}),\n },\n };\n }\n\n async swap(input: McaSwapInput): Promise<McaSwapResult> {\n if (input.quote.executionMode === \"withdraw-relayer\") {\n return this.executeRelayerWithdraw({ ...input, quote: input.quote });\n }\n const build = await this.build({\n quote: input.quote,\n signal: input.signal,\n idempotencyKey: input.idempotencyKey,\n });\n const nearStatusKey =\n input.quote.executionMode === \"withdraw-near\" &&\n input.waitFor === \"completed\"\n ? extractMcaWithdrawDepositAddress({\n preview: input.quote.preview,\n bestQuote: input.quote.raw.bestQuote,\n })\n : undefined;\n if (\n input.quote.executionMode === \"withdraw-near\" &&\n input.waitFor === \"completed\" &&\n !nearStatusKey\n ) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"status\",\n \"MCA NEAR withdraw is missing a status deposit address\"\n );\n }\n const result = await this.client.executeSwap({\n build,\n waitFor:\n input.quote.executionMode === \"withdraw-near\" &&\n input.waitFor === \"completed\"\n ? \"source-confirmed\"\n : input.waitFor,\n orderPolling: input.orderPolling,\n signal: input.signal,\n onEvent: input.onEvent,\n });\n if (\n input.quote.executionMode === \"withdraw-near\" &&\n input.waitFor === \"completed\"\n ) {\n const status = await this.client.waitForOrder({\n orderId: nearStatusKey!,\n router: input.quote.route.router,\n ...input.orderPolling,\n signal: input.signal,\n });\n this.emitEvent(\n {\n type: \"order-status\",\n executionId: result.executionId,\n status: status.status,\n },\n input.onEvent\n );\n result.status =\n status.status === \"unknown\" || status.status === \"pending\"\n ? \"processing\"\n : status.status;\n if (status.status === \"completed\") {\n this.emitEvent(\n { type: \"completed\", executionId: result.executionId },\n input.onEvent\n );\n }\n }\n return result;\n }\n\n reportIfManaged(\n result: McaSwapResult\n ): Promise<import(\"../api/rawTypes\").SwapReportDataRaw> | undefined {\n const request = this.relayerReports.get(result.executionId);\n if (!request) return undefined;\n return this.client.reportRaw(request);\n }\n\n private buildNearWithdraw(\n quote: Extract<McaQuote, { executionMode: \"withdraw-near\" }>\n ): SwapBuild {\n const business = extractMcaWithdrawBusiness(quote.preview);\n if (!business) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n \"MCA NEAR withdraw preview is missing business\"\n );\n }\n const recipient = quote.request.recipient?.trim();\n const signerWallet =\n extractMcaWithdrawSignerWallet(quote.preview) ??\n (recipient ? formatMcaWallet(\"near\", recipient) : undefined);\n if (!signerWallet) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"build\",\n \"MCA NEAR withdraw requires a NEAR recipient or signer_wallet\"\n );\n }\n const transactions = buildNearMcaWithdrawTransactions(quote.preview, {\n business,\n signerWallet,\n signature: \"\",\n mcaAccountId: quote.mcaAccountId,\n });\n const request = buildRequestFromQuote(quote);\n const depositAddress = extractMcaWithdrawDepositAddress({\n preview: quote.preview,\n bestQuote: quote.raw.bestQuote,\n });\n const build = normalizeBuild(\n {\n isCrossChain: true,\n chainType: \"near\",\n router: quote.route.router,\n fromChain: request.fromChain,\n toChain: request.toChain,\n tokenIn: {\n address: request.tokenIn,\n symbol: quote.tokenIn.symbol ?? \"\",\n decimals: quote.tokenIn.decimals ?? 0,\n },\n tokenOut: {\n address: request.tokenOut,\n symbol: quote.tokenOut.symbol ?? \"\",\n decimals: quote.tokenOut.decimals ?? 0,\n },\n amountIn: quote.amountIn,\n estimatedOut: quote.estimatedOut,\n minAmountOut: quote.minAmountOut,\n tx: transactions,\n approve: null,\n ...(depositAddress\n ? { deposit: { depositAddress } }\n : {}),\n },\n undefined,\n request\n );\n return {\n ...build,\n reportContext: {\n txType: \"mca-withdraw-near\",\n multiAddr: quote.mcaAccountId,\n ...(depositAddress ? { depositAddress } : {}),\n ...(recipient ? { recipient } : {}),\n isCrossChain: true,\n },\n };\n }\n\n private async executeRelayerWithdraw(\n input: McaSwapInput & {\n quote: Extract<McaQuote, { executionMode: \"withdraw-relayer\" }>;\n }\n ): Promise<McaSwapResult> {\n const executionId = createExecutionId();\n const emit = (event: SwapLifecycleEvent) =>\n this.emitEvent(event, input.onEvent);\n\n try {\n const signer = this.resolveMessageSigner(input.quote.signer.chain);\n const currentSigner = await this.readSignerIdentity(\n input.quote.signer.chain,\n \"sign\",\n signer\n );\n assertSignerMatchesQuote(currentSigner, input.quote.signer);\n const business = extractMcaWithdrawBusiness(input.quote.preview);\n if (!business) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"sign\",\n \"MCA relayer preview is missing business\"\n );\n }\n const message = readString(input.quote.preview.messageToSign);\n if (!message) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"sign\",\n \"MCA relayer preview is missing messageToSign\"\n );\n }\n const depositAddress = extractMcaWithdrawDepositAddress({\n snapshotDepositAddress: readString(input.quote.raw.depositAddress),\n preview: input.quote.preview,\n bestQuote: input.quote.raw.bestQuote,\n });\n if (!depositAddress) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"build\",\n \"MCA relayer preview is missing a deposit address\"\n );\n }\n\n emit({ type: \"signing-requested\", executionId });\n await input.beforeSign?.({\n chain: currentSigner.chain,\n identityKey: currentSigner.identityKey,\n message,\n business,\n });\n let signature: string;\n try {\n signature = (\n await signer.signMessage(message, {\n signal: input.signal,\n context: {\n flow: \"withdraw\",\n mcaAccountId: input.quote.mcaAccountId,\n business,\n },\n })\n ).trim();\n } catch (error) {\n if (error instanceof SwapSdkError) throw error;\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n \"Failed to sign the MCA relayer message\",\n { cause: error }\n );\n }\n if (!signature) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n \"MCA signer returned an empty signature\"\n );\n }\n\n const mcaRelayer: SwapMcaRelayerRequestRaw = {\n mcaAccountId: input.quote.mcaAccountId,\n wallet: formatMcaWallet(\n currentSigner.chain,\n currentSigner.identityKey\n ),\n business,\n signature,\n };\n const request = buildMcaWithdrawRelayerRequest({\n quoteBuild: buildRequestFromQuote(input.quote),\n mcaRelayer,\n isCrossChain: input.quote.raw.isCrossChain ?? true,\n depositAddress,\n mcaAccountId: input.quote.mcaAccountId,\n recipientFallback: input.quote.request.recipient,\n });\n const raw = await this.client.buildRaw(request, {\n signal: input.signal,\n idempotencyKey: input.idempotencyKey,\n });\n const orderId =\n readString(raw.orderId) ?? readRecordString(raw.deposit, \"orderId\");\n const router = readString(raw.router) ?? input.quote.route.router;\n const submittedDepositAddress =\n readRecordString(raw.deposit, \"depositAddress\") ?? depositAddress;\n if (!orderId || !router) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"submit\",\n \"MCA relayer submission is missing orderId or router\"\n );\n }\n\n const reportRequest: SwapReportRequestRaw = {\n sender: input.quote.request.sender,\n recipient:\n input.quote.request.recipient ?? input.quote.request.sender,\n from_hash: orderId,\n from_token: request.tokenIn,\n to_token: request.tokenOut,\n deposit_address: submittedDepositAddress,\n from_chain: request.fromChain,\n to_chain: request.toChain,\n amount_in: request.amountIn,\n estimated_out: input.quote.estimatedOut,\n router,\n is_cross_chain: true,\n tx_type: \"mca-withdraw-relayer\",\n multi_addr: input.quote.mcaAccountId,\n swapId: orderId,\n ...(request.confidentiality\n ? { confidentiality: request.confidentiality }\n : {}),\n };\n this.relayerReports.set(executionId, reportRequest);\n const result: McaSwapResult = {\n executionId,\n status: \"submitted\",\n router,\n orderId,\n depositAddress: submittedDepositAddress,\n report: { status: \"skipped\" },\n raw,\n };\n emit({ type: \"submitted\", executionId, orderId });\n\n if (this.reportMode === \"auto\") {\n try {\n await this.client.reportRaw(reportRequest, { signal: input.signal });\n result.report = { status: \"reported\" };\n } catch (error) {\n const warning: SwapWarning = {\n code: \"REPORT_FAILED\",\n message: \"MCA withdraw submitted but report failed\",\n cause: error,\n };\n result.report = { status: \"failed\", warning };\n emit({ type: \"warning\", executionId, warning });\n }\n }\n\n if (input.waitFor === \"completed\") {\n const status = await this.client.waitForOrder({\n orderId,\n router,\n ...input.orderPolling,\n signal: input.signal,\n });\n emit({ type: \"order-status\", executionId, status: status.status });\n result.status =\n status.status === \"unknown\" || status.status === \"pending\"\n ? \"processing\"\n : status.status;\n if (status.status === \"completed\") {\n emit({ type: \"completed\", executionId });\n }\n }\n return result;\n } catch (error) {\n const sdkError = asSwapSdkError(error, \"submit\");\n emit({ type: \"failed\", executionId, error: sdkError });\n throw sdkError;\n }\n }\n\n private async readSignerIdentity(\n chain: McaSignerIdentity[\"chain\"],\n stage: \"quote\" | \"sign\",\n provider: ExecutorIdentityProvider = this.resolveSignerIdentity(chain)\n ): Promise<McaSignerIdentity> {\n let identityKey: string;\n try {\n identityKey = (await provider.getIdentityKey()).trim();\n } catch (error) {\n if (error instanceof SwapSdkError) throw error;\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n stage,\n \"Failed to read the MCA signer identity\",\n { cause: error }\n );\n }\n if (!identityKey) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n stage,\n \"MCA executor returned an empty signer identity\"\n );\n }\n return { chain, identityKey };\n }\n\n private emitEvent(\n event: SwapLifecycleEvent,\n local?: (event: SwapLifecycleEvent) => void\n ): void {\n this.onEvent?.(event);\n if (local !== this.onEvent) local?.(event);\n }\n\n}\n\nfunction buildRequestFromQuote(quote: McaQuote) {\n const context = quote.buildContext;\n return {\n ...context.request,\n router: context.router,\n ...(context.market ? { market: context.market } : {}),\n expectedOut: context.expectedOut,\n minAmountOut: context.minAmountOut,\n preSwap: context.preSwap,\n bridge: context.bridge,\n ...(context.quoteId ? { quoteId: context.quoteId } : {}),\n };\n}\n\nfunction assertSignerMatchesQuote(\n signer: McaSignerIdentity,\n expected: McaSignerIdentity\n): void {\n if (!isSameMcaSignerIdentity(signer, expected)) {\n throw new SwapSdkError(\n \"SIGNING_FAILED\",\n \"sign\",\n \"MCA signer does not match the signer used for the quote\"\n );\n }\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction readRecordString(\n value: unknown,\n field: string\n): string | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return undefined;\n }\n return readString((value as Record<string, unknown>)[field]);\n}\n","import {\n ApiClient,\n type ApiClientConfig,\n type ApiRequestOptions,\n} from \"../api/ApiClient\";\nimport type {\n SwapBuildDataRaw,\n SwapBuildRequestRaw,\n SwapHistoryDataRaw,\n SwapHistoryAuthChallengeRaw,\n SwapHistoryAuthChallengeRequestRaw,\n SwapHistoryAuthProofRaw,\n SwapHistoryAuthTokenRaw,\n SwapHistoryAuthVerifyRequestRaw,\n SwapHistoryParamsRaw,\n SwapOrderStatusDataRaw,\n SwapOrderSubmitDataRaw,\n SwapQuoteDataRaw,\n SwapQuoteRequestRaw,\n SwapReportDataRaw,\n SwapReportRequestRaw,\n} from \"../api/rawTypes\";\nimport { asSwapSdkError, SwapSdkError } from \"../core/errors\";\nimport {\n normalizeOrderStatus,\n type ExecuteSwapInput,\n type OrderStatusResult,\n type SwapExecutionResult,\n type SwapInput,\n type SwapLifecycleEvent,\n type SwapWarning,\n type WaitForOrderInput,\n} from \"../core/lifecycle\";\nimport { ExecutorRegistry, type ChainExecutor } from \"../core/registry\";\nimport {\n createExecutionId,\n normalizeBuild,\n} from \"../normalizers/build\";\nimport { normalizeQuote, serializeQuoteRequest } from \"../normalizers/quote\";\nimport { normalizeHistory } from \"../normalizers/history\";\nimport {\n normalizeCrossChainToTokenList,\n normalizeFromTokenList,\n} from \"../normalizers/tokens\";\nimport { McaSwapService } from \"../mca/McaSwapService\";\nimport type {\n McaQuote,\n McaQuoteRequest,\n McaSwapInput,\n McaSwapResult,\n} from \"../mca/types\";\nimport type { SwapBuild } from \"../types/execution\";\nimport type { HistoryRequest, SwapHistoryPage } from \"../types/history\";\nimport type { Quote, QuoteRequest } from \"../types/quote\";\nimport type {\n SwapTokenListItem,\n TokenListRequest,\n} from \"../types/tokens\";\n\nexport interface SwapClientConfig extends ApiClientConfig {\n reportMode?: \"auto\" | \"manual\" | \"disabled\";\n executors?: readonly ChainExecutor[];\n onEvent?: (event: SwapLifecycleEvent) => void;\n now?: () => number;\n /** Token-list cache lifetime in milliseconds. Defaults to 10 minutes; use 0 to disable. */\n tokenListCacheTtlMs?: number;\n}\n\nexport interface BuildSwapInput {\n quote: Quote;\n signal?: AbortSignal;\n idempotencyKey?: string;\n}\n\nexport class SwapClient {\n private readonly managedSwapFlow: McaSwapService;\n protected readonly api: ApiClient;\n protected readonly registry: ExecutorRegistry;\n protected readonly reportMode: \"auto\" | \"manual\" | \"disabled\";\n protected readonly config: SwapClientConfig;\n private readonly now: () => number;\n private readonly inFlight = new Set<string>();\n private readonly reportRequests = new Map<string, SwapReportRequestRaw>();\n private readonly tokenListCache = new Map<\n string,\n { expiresAt: number; tokens: SwapTokenListItem[] }\n >();\n private readonly tokenListInflight = new Map<\n string,\n Promise<SwapTokenListItem[]>\n >();\n\n constructor(config: SwapClientConfig) {\n this.config = config;\n this.api = new ApiClient(config);\n this.registry = new ExecutorRegistry(config.executors ?? []);\n this.reportMode = config.reportMode ?? \"auto\";\n this.now = config.now ?? Date.now;\n this.managedSwapFlow = new McaSwapService(this, {\n now: this.now,\n reportMode: this.reportMode,\n resolveSignerIdentity: (chain) => this.registry.getSigner(chain),\n resolveMessageSigner: (chain) =>\n this.registry.getSigner(chain, true),\n buildStandardSwap: (input) => this.buildStandardSwap(input),\n ...(config.onEvent ? { onEvent: config.onEvent } : {}),\n });\n }\n\n quoteRaw(\n request: SwapQuoteRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapQuoteDataRaw> {\n return this.api.quote(request, options);\n }\n\n quote(\n request: McaQuoteRequest,\n options?: ApiRequestOptions\n ): Promise<McaQuote>;\n quote(request: QuoteRequest, options?: ApiRequestOptions): Promise<Quote>;\n async quote(\n request: QuoteRequest | McaQuoteRequest,\n options: ApiRequestOptions = {}\n ): Promise<Quote | McaQuote> {\n if (isMcaQuoteRequest(request)) {\n return this.managedSwapFlow.quote(request, options);\n }\n return this.quoteStandard(request, options);\n }\n\n private async quoteStandard(\n request: QuoteRequest,\n options: ApiRequestOptions = {}\n ): Promise<Quote> {\n const rawRequest = serializeQuoteRequest(request);\n\n const raw = await this.api.quote(rawRequest, options);\n return normalizeQuote(request, raw, this.now());\n }\n\n buildRaw(\n request: SwapBuildRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapBuildDataRaw> {\n return this.api.build(request, options);\n }\n\n async getFromTokens(\n request: TokenListRequest,\n options: ApiRequestOptions = {}\n ): Promise<SwapTokenListItem[]> {\n return this.loadTokenList(\"from\", request, options, async () => {\n const raw = await this.api.getFromTokenRows(request.chainId, options);\n return normalizeFromTokenList(raw, request.chainId);\n });\n }\n\n async getCrossChainToTokens(\n request: TokenListRequest,\n options: ApiRequestOptions = {}\n ): Promise<SwapTokenListItem[]> {\n return this.loadTokenList(\"cross-chain-to\", request, options, async () => {\n const raw = await this.api.getCrossChainToTokenRows(\n request.chainId,\n options\n );\n return normalizeCrossChainToTokenList(raw, request.chainId);\n });\n }\n\n private async loadTokenList(\n direction: \"from\" | \"cross-chain-to\",\n request: TokenListRequest,\n options: ApiRequestOptions,\n load: () => Promise<SwapTokenListItem[]>\n ): Promise<SwapTokenListItem[]> {\n if (!Number.isSafeInteger(request.chainId) || request.chainId <= 0) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"tokens\",\n `Token-list chainId must be a positive safe integer: ${String(\n request.chainId\n )}`\n );\n }\n const ttlMs = Math.max(0, this.config.tokenListCacheTtlMs ?? 600_000);\n const key = `${direction}:${request.chainId}`;\n const cached = this.tokenListCache.get(key);\n if (ttlMs > 0 && cached && cached.expiresAt > this.now()) {\n return cloneTokenList(cached.tokens);\n }\n\n const existing = options.signal\n ? undefined\n : this.tokenListInflight.get(key);\n if (existing) return cloneTokenList(await existing);\n\n const pending = load()\n .then((tokens) => {\n if (ttlMs > 0) {\n this.tokenListCache.set(key, {\n expiresAt: this.now() + ttlMs,\n tokens: cloneTokenList(tokens),\n });\n }\n return tokens;\n })\n .finally(() => {\n if (this.tokenListInflight.get(key) === pending) {\n this.tokenListInflight.delete(key);\n }\n });\n if (!options.signal) this.tokenListInflight.set(key, pending);\n return cloneTokenList(await pending);\n }\n\n async buildSwap(input: BuildSwapInput): Promise<SwapBuild> {\n if (isMcaQuote(input.quote)) {\n return this.managedSwapFlow.build({\n quote: input.quote,\n signal: input.signal,\n idempotencyKey: input.idempotencyKey,\n });\n }\n return this.buildStandardSwap(input);\n }\n\n private async buildStandardSwap(input: BuildSwapInput): Promise<SwapBuild> {\n const executionId = createExecutionId();\n this.emit({ type: \"build-started\", executionId });\n const context = input.quote.buildContext;\n const request: SwapBuildRequestRaw = {\n ...context.request,\n router: context.router,\n ...(context.market ? { market: context.market } : {}),\n expectedOut: context.expectedOut,\n minAmountOut: context.minAmountOut,\n preSwap: context.preSwap,\n bridge: context.bridge,\n ...(context.quoteId ? { quoteId: context.quoteId } : {}),\n };\n const raw = await this.api.build(request, {\n signal: input.signal,\n idempotencyKey: input.idempotencyKey,\n });\n const build = normalizeBuild(raw, executionId, request);\n this.emit({ type: \"build-completed\", executionId });\n return build;\n }\n\n async executeSwap(input: ExecuteSwapInput): Promise<SwapExecutionResult> {\n const { build } = input;\n if (this.inFlight.has(build.executionId)) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"sign\",\n `Execution ${build.executionId} is already in progress`\n );\n }\n\n this.inFlight.add(build.executionId);\n const emit = (event: SwapLifecycleEvent) => {\n this.emit(event);\n if (input.onEvent !== this.config.onEvent) input.onEvent?.(event);\n };\n\n try {\n const executor = this.registry.get(build.execution.kind);\n const context = {\n executionId: build.executionId,\n signal: input.signal,\n waitFor: input.waitFor ?? (\"submitted\" as const),\n emit,\n ...(input.beforeSign ? { beforeSign: input.beforeSign } : {}),\n };\n await executor.validate(build.execution, context);\n emit({ type: \"signing-requested\", executionId: build.executionId });\n const chainResult = await executor.execute(build.execution, context);\n let orderId = chainResult.orderId ?? build.order?.orderId;\n let orderRouter = build.order?.router;\n let orderChainId = build.order?.chainId;\n\n if (chainResult.signature) {\n if (build.execution.kind !== \"evm-signature\") {\n throw new SwapSdkError(\n \"INVALID_TRANSACTION\",\n \"submit\",\n \"Only signature executions can submit signed orders\"\n );\n }\n const submitParams = build.execution.request.submit?.params;\n const submitRouter =\n readNonEmptyString(submitParams?.router) ??\n build.execution.request.router;\n const submitQuoteId =\n readNonEmptyString(submitParams?.quoteId) ??\n build.execution.request.quoteId;\n const signingScheme =\n readNonEmptyString(submitParams?.signingScheme) ??\n chainResult.signingScheme ??\n build.execution.request.signingScheme ??\n \"eip712\";\n const submitted = await this.api.submitOrder(\n {\n router: submitRouter,\n quoteId: submitQuoteId,\n signature: chainResult.signature,\n signingScheme,\n },\n { signal: input.signal }\n );\n orderId = submitted.orderId;\n orderRouter = readNonEmptyString(submitted.router) ?? submitRouter;\n orderChainId = String(\n submitted.chainId ?? build.execution.request.chainId\n );\n }\n\n const result: SwapExecutionResult = {\n executionId: build.executionId,\n status: chainResult.status,\n router: build.router,\n ...(chainResult.txHash ? { txHash: chainResult.txHash } : {}),\n ...(chainResult.txHashes ? { txHashes: chainResult.txHashes } : {}),\n ...(orderId ? { orderId } : {}),\n ...(build.deposit?.depositAddress\n ? { depositAddress: build.deposit.depositAddress }\n : {}),\n report: { status: \"skipped\" },\n raw: chainResult.raw ?? build.raw,\n };\n\n emit({\n type: \"submitted\",\n executionId: build.executionId,\n ...(chainResult.txHash ? { txHash: chainResult.txHash } : {}),\n ...(orderId ? { orderId } : {}),\n });\n if (chainResult.status === \"source-confirmed\") {\n emit({\n type: \"source-confirmed\",\n executionId: build.executionId,\n });\n }\n\n const reportRequest = this.createReportRequest(build, result);\n if (reportRequest) {\n this.reportRequests.set(build.executionId, reportRequest);\n }\n if (this.reportMode === \"auto\" && reportRequest) {\n try {\n await this.api.report(reportRequest, { signal: input.signal });\n result.report = { status: \"reported\" };\n } catch (error) {\n const warning: SwapWarning = {\n code: \"REPORT_FAILED\",\n message: \"Swap submitted but report failed\",\n cause: error,\n };\n result.report = { status: \"failed\", warning };\n emit({ type: \"warning\", executionId: build.executionId, warning });\n }\n }\n\n const waitsForCompletion =\n (input.waitFor ?? \"submitted\") === \"completed\";\n const requiresOrderStatus =\n build.isCrossChain || build.request?.confidentiality === \"basic\";\n if (waitsForCompletion && requiresOrderStatus && !orderId) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"status\",\n \"Swap submitted, but the API did not provide a status key\",\n {\n details: {\n executionId: build.executionId,\n ...(result.txHash ? { txHash: result.txHash } : {}),\n router: orderRouter ?? build.router,\n },\n }\n );\n }\n\n if (waitsForCompletion && orderId) {\n const status = await this.waitForOrder({\n orderId,\n router: orderRouter ?? build.router,\n chainId: orderChainId,\n ...input.orderPolling,\n signal: input.signal,\n });\n result.status =\n status.status === \"unknown\" || status.status === \"pending\"\n ? \"processing\"\n : status.status;\n if (status.status === \"completed\") {\n emit({ type: \"completed\", executionId: build.executionId });\n }\n }\n\n return result;\n } catch (error) {\n const sdkError = asSwapSdkError(error, \"broadcast\");\n emit({ type: \"failed\", executionId: build.executionId, error: sdkError });\n throw sdkError;\n } finally {\n this.inFlight.delete(build.executionId);\n }\n }\n\n swap(input: McaSwapInput): Promise<McaSwapResult>;\n swap(input: SwapInput): Promise<SwapExecutionResult>;\n async swap(\n input: SwapInput | McaSwapInput\n ): Promise<SwapExecutionResult | McaSwapResult> {\n if (isMcaQuote(input.quote)) {\n return this.managedSwapFlow.swap(input as McaSwapInput);\n }\n const regularInput = input as SwapInput;\n const build = await this.buildSwap({\n quote: regularInput.quote,\n signal: regularInput.signal,\n idempotencyKey: regularInput.idempotencyKey,\n });\n return this.executeSwap({\n build,\n waitFor: regularInput.waitFor,\n orderPolling: regularInput.orderPolling,\n signal: regularInput.signal,\n onEvent: regularInput.onEvent,\n beforeSign: regularInput.beforeSign,\n });\n }\n\n async getOrderStatus(\n input: {\n orderId: string;\n router: string;\n chainId?: string;\n signal?: AbortSignal;\n }\n ): Promise<OrderStatusResult> {\n const raw = await this.api.getOrderStatus(\n {\n orderId: input.orderId,\n router: input.router,\n chainId: input.chainId,\n },\n { signal: input.signal }\n );\n return {\n orderId: input.orderId,\n router: input.router,\n status: normalizeOrderStatus(raw),\n raw,\n };\n }\n\n async waitForOrder(input: WaitForOrderInput): Promise<OrderStatusResult> {\n const intervalMs = input.intervalMs ?? 5_000;\n const timeoutMs = input.timeoutMs;\n const startedAt =\n timeoutMs === undefined ? undefined : this.now();\n\n for (;;) {\n if (input.signal?.aborted) {\n throw new SwapSdkError(\n \"REQUEST_ABORTED\",\n \"status\",\n \"Order polling aborted; any submitted transaction is unaffected\"\n );\n }\n const result = await this.getOrderStatus(input);\n if (\n result.status === \"completed\" ||\n result.status === \"failed\" ||\n result.status === \"refunded\" ||\n result.status === \"expired\"\n ) {\n return result;\n }\n if (\n timeoutMs !== undefined &&\n startedAt !== undefined &&\n this.now() - startedAt >= timeoutMs\n ) {\n throw new SwapSdkError(\n \"ORDER_TIMEOUT\",\n \"status\",\n `Order status timed out after ${timeoutMs}ms`,\n { retryable: true }\n );\n }\n await delay(intervalMs, input.signal);\n }\n }\n\n submitOrderRaw(\n request: Parameters<ApiClient[\"submitOrder\"]>[0],\n options: ApiRequestOptions = {}\n ): Promise<SwapOrderSubmitDataRaw> {\n return this.api.submitOrder(request, options);\n }\n\n getOrderStatusRaw(\n request: Parameters<ApiClient[\"getOrderStatus\"]>[0],\n options: ApiRequestOptions = {}\n ): Promise<SwapOrderStatusDataRaw> {\n return this.api.getOrderStatus(request, options);\n }\n\n reportRaw(\n request: SwapReportRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapReportDataRaw> {\n return this.api.report(request, options);\n }\n\n report(result: SwapExecutionResult): Promise<SwapReportDataRaw> {\n const managedReport = this.managedSwapFlow.reportIfManaged(result);\n if (managedReport) return managedReport;\n const request = this.reportRequests.get(result.executionId);\n if (!request) {\n throw new SwapSdkError(\n \"INVALID_REQUEST\",\n \"report\",\n `No report context for execution ${result.executionId}`\n );\n }\n return this.api.report(request);\n }\n\n retryReport(result: SwapExecutionResult): Promise<SwapReportDataRaw> {\n return this.report(result);\n }\n\n getHistoryRaw(\n params: SwapHistoryParamsRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryDataRaw> {\n return this.api.getHistory(params, options);\n }\n\n createHistoryAuthChallenge(\n request: SwapHistoryAuthChallengeRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthChallengeRaw> {\n return this.api.createHistoryAuthChallenge(request, options);\n }\n\n verifyHistoryAuthChallenge(\n request: SwapHistoryAuthVerifyRequestRaw,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthTokenRaw> {\n return this.api.verifyHistoryAuthChallenge(request, options);\n }\n\n async authorizeConfidentialHistory(\n request: SwapHistoryAuthChallengeRequestRaw,\n signChallenge: (\n challenge: SwapHistoryAuthChallengeRaw\n ) => SwapHistoryAuthProofRaw | Promise<SwapHistoryAuthProofRaw>,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryAuthTokenRaw> {\n const challenge = await this.createHistoryAuthChallenge(request, options);\n assertHistoryChallengeMatchesRequest(challenge, request);\n const proof = await signChallenge(challenge);\n const verifyRequest: SwapHistoryAuthVerifyRequestRaw = {\n challengeId: challenge.challengeId,\n proof,\n };\n const token = await this.verifyHistoryAuthChallenge(verifyRequest, options);\n assertHistoryTokenMatchesChallenge(token, challenge);\n return token;\n }\n\n async getHistory(\n request: HistoryRequest,\n options: ApiRequestOptions = {}\n ): Promise<SwapHistoryPage> {\n const raw = await this.api.getHistory(\n {\n sender: request.sender,\n ...(request.mode ? { mode: request.mode } : {}),\n ...(request.walletToken ? { walletToken: request.walletToken } : {}),\n ...(request.page !== undefined ? { pageNumber: request.page } : {}),\n ...(request.pageSize !== undefined ? { pageSize: request.pageSize } : {}),\n },\n options\n );\n const page = normalizeHistory(raw);\n if (request.status === undefined) return page;\n\n const statuses = new Set(request.status);\n return {\n ...page,\n items: page.items.filter((item) => statuses.has(item.status)),\n filteredLocally: true,\n };\n }\n\n protected emit(event: SwapLifecycleEvent): void {\n this.config.onEvent?.(event);\n }\n\n private createReportRequest(\n build: SwapBuild,\n result: SwapExecutionResult\n ): SwapReportRequestRaw | undefined {\n const request = build.request;\n const reportContext = build.reportContext;\n const fromHash =\n reportContext?.fromHash ?? result.txHash ?? result.orderId;\n if (!request || !fromHash) return undefined;\n\n return {\n sender: reportContext?.sender ?? request.sender,\n recipient:\n reportContext?.recipient ?? request.recipient ?? request.sender,\n from_hash: fromHash,\n from_token: request.tokenIn,\n to_token: request.tokenOut,\n deposit_address:\n reportContext?.depositAddress ?? result.depositAddress ?? \"\",\n from_chain: request.fromChain,\n to_chain: request.toChain,\n is_cross_chain:\n reportContext?.isCrossChain ?? build.isCrossChain,\n amount_in: request.amountIn,\n estimated_out: build.estimatedOut,\n router: build.router,\n tx_type:\n reportContext?.txType ??\n (build.isCrossChain ? \"cross-chain\" : \"same-chain\"),\n ...(reportContext?.multiAddr\n ? { multi_addr: reportContext.multiAddr }\n : {}),\n ...(reportContext?.swapId ?? result.orderId\n ? { swapId: reportContext?.swapId ?? result.orderId }\n : {}),\n ...(request.confidentiality\n ? { confidentiality: request.confidentiality }\n : {}),\n };\n }\n}\n\nfunction assertHistoryChallengeMatchesRequest(\n challenge: SwapHistoryAuthChallengeRaw,\n request: SwapHistoryAuthChallengeRequestRaw\n): void {\n const expectedMca = request.mcaAccountId?.trim();\n const principalMatches = expectedMca\n ? challenge.principalType === \"mca\" &&\n challenge.mcaAccountId?.toLowerCase() === expectedMca.toLowerCase()\n : challenge.principalType === \"wallet\" && !challenge.mcaAccountId;\n const identityMatches = request.identityKey\n ? normalizeHistoryIdentity(challenge.chainFamily, challenge.identityKey) ===\n normalizeHistoryIdentity(challenge.chainFamily, request.identityKey)\n : true;\n\n if (\n challenge.chainFamily !== request.chainFamily ||\n challenge.chainId !== request.chainId ||\n normalizeHistoryAddress(challenge.chainFamily, challenge.walletAddress) !==\n normalizeHistoryAddress(request.chainFamily, request.walletAddress) ||\n !identityMatches ||\n !principalMatches ||\n !challenge.queryAddress\n ) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"history\",\n \"Confidential history challenge does not match the requested wallet or MCA\"\n );\n }\n}\n\nfunction assertHistoryTokenMatchesChallenge(\n token: SwapHistoryAuthTokenRaw,\n challenge: SwapHistoryAuthChallengeRaw\n): void {\n const principalMatches =\n token.principalType === challenge.principalType &&\n (challenge.principalType === \"mca\"\n ? token.mcaAccountId?.toLowerCase() ===\n challenge.mcaAccountId?.toLowerCase()\n : !token.mcaAccountId);\n if (!principalMatches || token.queryAddress !== challenge.queryAddress) {\n throw new SwapSdkError(\n \"INVALID_API_RESPONSE\",\n \"history\",\n \"Confidential history authorization returned a different principal\"\n );\n }\n}\n\nfunction normalizeHistoryAddress(\n chain: SwapHistoryAuthChallengeRaw[\"chainFamily\"],\n value: string\n): string {\n return chain === \"evm\" || chain === \"aptos\" || chain === \"sui\"\n ? value.toLowerCase()\n : value;\n}\n\nfunction normalizeHistoryIdentity(\n chain: SwapHistoryAuthChallengeRaw[\"chainFamily\"],\n value: string\n): string {\n return chain === \"evm\" ||\n chain === \"aptos\" ||\n chain === \"sui\" ||\n chain === \"btc\" ||\n chain === \"zcash\"\n ? value.toLowerCase().replace(/^0x/, \"\")\n : value;\n}\n\nfunction isMcaQuoteRequest(\n request: QuoteRequest | McaQuoteRequest\n): request is McaQuoteRequest {\n if (!(\"flow\" in request) || !(\"mcaAccountId\" in request)) return false;\n const flow = Reflect.get(request, \"flow\");\n const accountId = Reflect.get(request, \"mcaAccountId\");\n return (\n (flow === \"deposit\" || flow === \"withdraw\") &&\n typeof accountId === \"string\" &&\n accountId.trim().length > 0\n );\n}\n\nfunction isMcaQuote(quote: Quote): quote is McaQuote {\n if (!(\"executionMode\" in quote) || !(\"mcaAccountId\" in quote)) {\n return false;\n }\n const mode = Reflect.get(quote, \"executionMode\");\n return (\n mode === \"deposit\" ||\n mode === \"withdraw-near\" ||\n mode === \"withdraw-relayer\"\n );\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction cloneTokenList(tokens: SwapTokenListItem[]): SwapTokenListItem[] {\n return tokens.map((token) => ({\n ...token,\n sources: [...token.sources],\n raw: { ...token.raw },\n }));\n}\n\nfunction delay(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(\n new SwapSdkError(\n \"REQUEST_ABORTED\",\n \"status\",\n \"Order polling aborted; any submitted transaction is unaffected\"\n )\n );\n return;\n }\n const onAbort = () => {\n clearTimeout(timeout);\n reject(\n new SwapSdkError(\n \"REQUEST_ABORTED\",\n \"status\",\n \"Order polling aborted; any submitted transaction is unaffected\"\n )\n );\n };\n const timeout = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, Math.max(0, ms));\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n"]}
|