@rhea-finance/cross-chain-aggregation-dex 2.1.6 → 2.1.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.
@@ -86,52 +86,168 @@ function isUserRejection(error, adapter) {
86
86
  function createTronExecutor(adapter) {
87
87
  return {
88
88
  ...exposeExecutorSigner("tron", adapter),
89
- kinds: ["tron-transfer"],
89
+ kinds: ["tron-transfer", "tron-transaction"],
90
90
  async validate(execution, context) {
91
91
  throwIfAborted(context.signal, "sign");
92
92
  assertChain(execution.chain, await adapter.getChain());
93
- if (!adapter.isAddress(execution.depositAddress)) {
94
- throw invalid("Invalid Tron deposit address");
95
- }
96
- if (!isNative(execution)) {
97
- if (!execution.tokenAddress || execution.tokenAddress.toLowerCase().startsWith("nep141:") || !adapter.isAddress(execution.tokenAddress)) {
98
- throw invalid("Invalid TRC20 token contract address");
99
- }
93
+ if (execution.kind === "tron-transaction") {
94
+ validateTronTransaction(adapter, execution);
95
+ return;
100
96
  }
97
+ validateTronTransfer(adapter, execution);
101
98
  },
102
99
  async execute(execution, context) {
103
- const native = isNative(execution);
104
- await requestSignApproval(context, execution.chain, execution.kind, {
105
- amount: execution.amount,
106
- depositAddress: execution.depositAddress,
107
- standard: native ? "native" : execution.standard ?? "trc20",
108
- tokenAddress: execution.tokenAddress
109
- });
110
- let submission;
111
- try {
112
- submission = native ? await adapter.sendNativeTransfer({
113
- amount: execution.amount,
114
- depositAddress: execution.depositAddress,
115
- signal: context.signal
116
- }) : await adapter.sendTokenTransfer({
117
- amount: execution.amount,
118
- depositAddress: execution.depositAddress,
119
- tokenAddress: execution.tokenAddress,
120
- signal: context.signal
121
- });
122
- } catch (error) {
123
- throw mapExecutorError(
124
- error,
125
- adapter,
126
- "broadcast",
127
- "BROADCAST_FAILED",
128
- "Failed to broadcast Tron transfer"
129
- );
130
- }
131
- return confirm(adapter, submission, context);
100
+ return execution.kind === "tron-transaction" ? executeTronTransaction(adapter, execution, context) : executeTronTransfer(adapter, execution, context);
132
101
  }
133
102
  };
134
103
  }
104
+ function validateTronTransfer(adapter, execution) {
105
+ if (!adapter.isAddress(execution.depositAddress)) {
106
+ throw invalid("Invalid Tron deposit address");
107
+ }
108
+ if (!isNative(execution)) {
109
+ if (!execution.tokenAddress || execution.tokenAddress.toLowerCase().startsWith("nep141:") || !adapter.isAddress(execution.tokenAddress)) {
110
+ throw invalid("Invalid TRC20 token contract address");
111
+ }
112
+ }
113
+ }
114
+ function validateTronTransaction(adapter, execution) {
115
+ if (!adapter.signAndSendTransaction) {
116
+ throw invalid(
117
+ "Tron wallet adapter must implement signAndSendTransaction for tron-raw-data builds"
118
+ );
119
+ }
120
+ assertTronUnsignedTransaction(execution.transaction, "transaction");
121
+ if (execution.approval) {
122
+ assertTronUnsignedTransaction(
123
+ execution.approval.transaction,
124
+ "approval.transaction"
125
+ );
126
+ }
127
+ }
128
+ async function executeTronTransfer(adapter, execution, context) {
129
+ const native = isNative(execution);
130
+ await requestSignApproval(context, execution.chain, execution.kind, {
131
+ amount: execution.amount,
132
+ depositAddress: execution.depositAddress,
133
+ standard: native ? "native" : execution.standard ?? "trc20",
134
+ tokenAddress: execution.tokenAddress
135
+ });
136
+ let submission;
137
+ try {
138
+ submission = native ? await adapter.sendNativeTransfer({
139
+ amount: execution.amount,
140
+ depositAddress: execution.depositAddress,
141
+ signal: context.signal
142
+ }) : await adapter.sendTokenTransfer({
143
+ amount: execution.amount,
144
+ depositAddress: execution.depositAddress,
145
+ tokenAddress: execution.tokenAddress,
146
+ signal: context.signal
147
+ });
148
+ } catch (error) {
149
+ throw mapExecutorError(
150
+ error,
151
+ adapter,
152
+ "broadcast",
153
+ "BROADCAST_FAILED",
154
+ "Failed to broadcast Tron transfer"
155
+ );
156
+ }
157
+ return confirm(adapter, submission, context, "transfer");
158
+ }
159
+ async function executeTronTransaction(adapter, execution, context) {
160
+ await executeApprovalIfRequired(adapter, execution, context);
161
+ await requestSignApproval(context, execution.chain, execution.kind, {
162
+ format: execution.format,
163
+ txID: execution.transaction.txID
164
+ });
165
+ let submission;
166
+ try {
167
+ submission = await requireSignAndSend(adapter)({
168
+ transaction: execution.transaction,
169
+ signal: context.signal
170
+ });
171
+ } catch (error) {
172
+ throw mapExecutorError(
173
+ error,
174
+ adapter,
175
+ "broadcast",
176
+ "BROADCAST_FAILED",
177
+ "Failed to sign or broadcast Tron transaction"
178
+ );
179
+ }
180
+ return confirm(adapter, submission, context, "transaction");
181
+ }
182
+ async function executeApprovalIfRequired(adapter, execution, context) {
183
+ if (!execution.approval) return;
184
+ let approvalRequired;
185
+ try {
186
+ approvalRequired = adapter.isApprovalRequired ? await adapter.isApprovalRequired(execution.approval) : true;
187
+ } catch (error) {
188
+ throw mapExecutorError(
189
+ error,
190
+ adapter,
191
+ "approve",
192
+ "APPROVAL_FAILED",
193
+ "Failed to determine Tron approval requirement"
194
+ );
195
+ }
196
+ if (!approvalRequired) return;
197
+ context.emit({
198
+ type: "approval-requested",
199
+ executionId: context.executionId
200
+ });
201
+ await requestSignApproval(context, execution.chain, "tron-approval", {
202
+ txID: execution.approval.transaction.txID
203
+ });
204
+ try {
205
+ const submission = await requireSignAndSend(adapter)({
206
+ transaction: execution.approval.transaction,
207
+ signal: context.signal
208
+ });
209
+ context.emit({
210
+ type: "approval-submitted",
211
+ executionId: context.executionId,
212
+ txHash: submission.txHash
213
+ });
214
+ const confirmation = await adapter.waitForTransaction(submission.txHash, {
215
+ signal: context.signal
216
+ });
217
+ assertTransactionConfirmed(confirmation, {
218
+ code: "APPROVAL_FAILED",
219
+ stage: "approve",
220
+ message: "Tron approval transaction failed"
221
+ });
222
+ } catch (error) {
223
+ throw mapExecutorError(
224
+ error,
225
+ adapter,
226
+ "approve",
227
+ "APPROVAL_FAILED",
228
+ "Failed to approve TRC20 token"
229
+ );
230
+ }
231
+ }
232
+ function requireSignAndSend(adapter) {
233
+ if (!adapter.signAndSendTransaction) {
234
+ throw invalid(
235
+ "Tron wallet adapter must implement signAndSendTransaction for tron-raw-data builds"
236
+ );
237
+ }
238
+ return adapter.signAndSendTransaction.bind(adapter);
239
+ }
240
+ function assertTronUnsignedTransaction(transaction, label) {
241
+ if (!transaction.txID?.trim()) {
242
+ throw invalid(`Missing Tron ${label}.txID`);
243
+ }
244
+ if (!transaction.raw_data_hex?.trim()) {
245
+ throw invalid(`Missing Tron ${label}.raw_data_hex`);
246
+ }
247
+ if (typeof transaction.raw_data !== "object" || transaction.raw_data === null) {
248
+ throw invalid(`Missing Tron ${label}.raw_data`);
249
+ }
250
+ }
135
251
  function isNative(execution) {
136
252
  const standard = execution.standard?.trim().toLowerCase();
137
253
  if (standard === "native" || standard === "trx") return true;
@@ -141,7 +257,7 @@ function isNative(execution) {
141
257
  function invalid(message) {
142
258
  return new SwapSdkError("INVALID_TRANSACTION", "sign", message);
143
259
  }
144
- async function confirm(adapter, submission, context) {
260
+ async function confirm(adapter, submission, context, kind) {
145
261
  if (context.waitFor === "submitted") {
146
262
  return {
147
263
  status: "submitted",
@@ -169,7 +285,7 @@ async function confirm(adapter, submission, context) {
169
285
  adapter,
170
286
  "broadcast",
171
287
  "BROADCAST_FAILED",
172
- "Failed while confirming Tron transfer"
288
+ kind === "transfer" ? "Failed while confirming Tron transfer" : "Failed while confirming Tron transaction"
173
289
  );
174
290
  }
175
291
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/errors.ts","../../src/executors/shared.ts","../../src/executors/tron/index.ts"],"names":[],"mappings":"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","file":"tron.mjs","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 {\n SwapSdkError,\n type SwapErrorCode,\n type SwapErrorStage,\n} from \"../core/errors\";\nimport type {\n ChainExecutor,\n ExecutionContext,\n MessageSignOptions,\n} from \"../core/registry\";\nimport type { ChainRef } from \"../types/chain\";\n\nexport interface TransactionSubmission {\n txHash: string;\n raw?: unknown;\n}\n\nexport interface TransactionConfirmation {\n status: \"confirmed\" | \"failed\";\n raw?: unknown;\n}\n\nexport interface ExecutorErrorAdapter {\n isUserRejection?(error: unknown): boolean;\n /** Identity serialized as `mca.signer.identityKey` for MCA quotes. */\n getIdentityKey?(): string | Promise<string>;\n /**\n * Optional offline message signing for flows such as MCA relayer withdraw.\n * Chain transfer executors do not call this during normal swap execution.\n */\n signMessage?(\n message: string,\n options?: MessageSignOptions\n ): Promise<string>;\n}\n\nexport function exposeExecutorSigner(\n signerChain: string,\n adapter: ExecutorErrorAdapter\n): Pick<\n ChainExecutor,\n \"signerChain\" | \"getIdentityKey\" | \"signMessage\"\n> {\n return {\n signerChain,\n ...(adapter.getIdentityKey\n ? { getIdentityKey: () => adapter.getIdentityKey!() }\n : {}),\n ...(adapter.signMessage\n ? {\n signMessage: (\n message: string,\n options?: MessageSignOptions\n ) => adapter.signMessage!(message, options),\n }\n : {}),\n };\n}\n\nexport function throwIfAborted(\n signal: AbortSignal | undefined,\n stage: SwapErrorStage = \"sign\"\n): void {\n if (!signal?.aborted) return;\n throw new SwapSdkError(\"REQUEST_ABORTED\", stage, \"Execution was aborted\", {\n cause: signal.reason,\n });\n}\n\nexport function assertChain(\n expected: ChainRef,\n actual: ChainRef,\n stage: SwapErrorStage = \"sign\"\n): void {\n if (expected === actual) return;\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n stage,\n `Connected chain ${actual} does not match execution chain ${expected}`,\n { details: { expected, actual } }\n );\n}\n\nexport async function requestSignApproval(\n context: ExecutionContext,\n chain: ChainRef,\n kind: string,\n summary: Record<string, unknown>\n): Promise<void> {\n throwIfAborted(context.signal, \"sign\");\n await context.beforeSign?.({ chain, kind, summary });\n throwIfAborted(context.signal, \"sign\");\n}\n\nexport function mapExecutorError(\n error: unknown,\n adapter: ExecutorErrorAdapter,\n stage: SwapErrorStage,\n code: SwapErrorCode,\n message: string\n): SwapSdkError {\n if (error instanceof SwapSdkError) return error;\n if (isUserRejection(error, adapter)) {\n return new SwapSdkError(\"USER_REJECTED\", stage, \"User rejected the request\", {\n cause: error,\n });\n }\n return new SwapSdkError(code, stage, message, { cause: error });\n}\n\nexport function assertTransactionConfirmed(\n confirmation: TransactionConfirmation,\n options: {\n code: SwapErrorCode;\n stage: SwapErrorStage;\n message: string;\n }\n): unknown {\n if (confirmation?.status === \"confirmed\") {\n return confirmation.raw;\n }\n const status =\n confirmation &&\n typeof confirmation === \"object\" &&\n \"status\" in confirmation\n ? String(confirmation.status)\n : \"missing\";\n throw new SwapSdkError(\n options.code,\n options.stage,\n `${options.message}: wallet confirmation status is ${status}`,\n {\n cause:\n confirmation &&\n typeof confirmation === \"object\" &&\n \"raw\" in confirmation\n ? confirmation.raw\n : confirmation,\n details: { confirmationStatus: status },\n }\n );\n}\n\nfunction isUserRejection(\n error: unknown,\n adapter: ExecutorErrorAdapter\n): boolean {\n if (adapter.isUserRejection?.(error)) return true;\n if (typeof error !== \"object\" || error === null) return false;\n const code = \"code\" in error ? error.code : undefined;\n if (code === 4001 || code === \"ACTION_REJECTED\") return true;\n const message =\n \"message\" in error && typeof error.message === \"string\"\n ? error.message.toLowerCase()\n : \"\";\n return /user (rejected|denied)|request rejected|cancelled by user/.test(message);\n}\n","import { SwapSdkError } from \"../../core/errors\";\nimport type {\n ChainExecutionResult,\n ChainExecutor,\n ExecutionContext,\n} from \"../../core/registry\";\nimport type { ChainRef } from \"../../types/chain\";\nimport type { SwapExecution } from \"../../types/execution\";\nimport {\n assertTransactionConfirmed,\n assertChain,\n exposeExecutorSigner,\n mapExecutorError,\n requestSignApproval,\n throwIfAborted,\n type ExecutorErrorAdapter,\n type TransactionConfirmation,\n type TransactionSubmission,\n} from \"../shared\";\n\ntype TronExecution = Extract<SwapExecution, { kind: \"tron-transfer\" }>;\n\nexport interface TronWalletAdapter extends ExecutorErrorAdapter {\n getChain(): ChainRef | Promise<ChainRef>;\n isAddress(address: string): boolean;\n sendNativeTransfer(input: {\n amount: string;\n depositAddress: string;\n signal?: AbortSignal;\n }): Promise<TransactionSubmission>;\n sendTokenTransfer(input: {\n amount: string;\n depositAddress: string;\n tokenAddress: string;\n signal?: AbortSignal;\n }): Promise<TransactionSubmission>;\n waitForTransaction(\n txHash: string,\n options: { signal?: AbortSignal }\n ): Promise<TransactionConfirmation>;\n}\n\nexport function createTronExecutor(\n adapter: TronWalletAdapter\n): ChainExecutor<\"tron-transfer\"> {\n return {\n ...exposeExecutorSigner(\"tron\", adapter),\n kinds: [\"tron-transfer\"],\n\n async validate(execution, context) {\n throwIfAborted(context.signal, \"sign\");\n assertChain(execution.chain, await adapter.getChain());\n if (!adapter.isAddress(execution.depositAddress)) {\n throw invalid(\"Invalid Tron deposit address\");\n }\n if (!isNative(execution)) {\n if (\n !execution.tokenAddress ||\n execution.tokenAddress.toLowerCase().startsWith(\"nep141:\") ||\n !adapter.isAddress(execution.tokenAddress)\n ) {\n throw invalid(\"Invalid TRC20 token contract address\");\n }\n }\n },\n\n async execute(execution, context) {\n const native = isNative(execution);\n await requestSignApproval(context, execution.chain, execution.kind, {\n amount: execution.amount,\n depositAddress: execution.depositAddress,\n standard: native ? \"native\" : execution.standard ?? \"trc20\",\n tokenAddress: execution.tokenAddress,\n });\n let submission: TransactionSubmission;\n try {\n submission = native\n ? await adapter.sendNativeTransfer({\n amount: execution.amount,\n depositAddress: execution.depositAddress,\n signal: context.signal,\n })\n : await adapter.sendTokenTransfer({\n amount: execution.amount,\n depositAddress: execution.depositAddress,\n tokenAddress: execution.tokenAddress!,\n signal: context.signal,\n });\n } catch (error) {\n throw mapExecutorError(\n error,\n adapter,\n \"broadcast\",\n \"BROADCAST_FAILED\",\n \"Failed to broadcast Tron transfer\"\n );\n }\n return confirm(adapter, submission, context);\n },\n };\n}\n\nfunction isNative(execution: TronExecution): boolean {\n const standard = execution.standard?.trim().toLowerCase();\n if (standard === \"native\" || standard === \"trx\") return true;\n if (standard === \"trc20\" || standard === \"token\") return false;\n return !execution.tokenAddress;\n}\n\nfunction invalid(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_TRANSACTION\", \"sign\", message);\n}\n\nasync function confirm(\n adapter: TronWalletAdapter,\n submission: TransactionSubmission,\n context: ExecutionContext\n): Promise<ChainExecutionResult> {\n if (context.waitFor === \"submitted\") {\n return {\n status: \"submitted\",\n txHash: submission.txHash,\n ...(submission.raw !== undefined ? { raw: submission.raw } : {}),\n };\n }\n try {\n const confirmation = await adapter.waitForTransaction(submission.txHash, {\n signal: context.signal,\n });\n const confirmationRaw = assertTransactionConfirmed(confirmation, {\n code: \"BROADCAST_FAILED\",\n stage: \"broadcast\",\n message: \"Tron transaction failed\",\n });\n return {\n status: \"source-confirmed\",\n txHash: submission.txHash,\n raw: confirmationRaw ?? submission.raw,\n };\n } catch (error) {\n throw mapExecutorError(\n error,\n adapter,\n \"broadcast\",\n \"BROADCAST_FAILED\",\n \"Failed while confirming Tron transfer\"\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/core/errors.ts","../../src/executors/shared.ts","../../src/executors/tron/index.ts"],"names":[],"mappings":"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","file":"tron.mjs","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 {\n SwapSdkError,\n type SwapErrorCode,\n type SwapErrorStage,\n} from \"../core/errors\";\nimport type {\n ChainExecutor,\n ExecutionContext,\n MessageSignOptions,\n} from \"../core/registry\";\nimport type { ChainRef } from \"../types/chain\";\n\nexport interface TransactionSubmission {\n txHash: string;\n raw?: unknown;\n}\n\nexport interface TransactionConfirmation {\n status: \"confirmed\" | \"failed\";\n raw?: unknown;\n}\n\nexport interface ExecutorErrorAdapter {\n isUserRejection?(error: unknown): boolean;\n /** Identity serialized as `mca.signer.identityKey` for MCA quotes. */\n getIdentityKey?(): string | Promise<string>;\n /**\n * Optional offline message signing for flows such as MCA relayer withdraw.\n * Chain transfer executors do not call this during normal swap execution.\n */\n signMessage?(\n message: string,\n options?: MessageSignOptions\n ): Promise<string>;\n}\n\nexport function exposeExecutorSigner(\n signerChain: string,\n adapter: ExecutorErrorAdapter\n): Pick<\n ChainExecutor,\n \"signerChain\" | \"getIdentityKey\" | \"signMessage\"\n> {\n return {\n signerChain,\n ...(adapter.getIdentityKey\n ? { getIdentityKey: () => adapter.getIdentityKey!() }\n : {}),\n ...(adapter.signMessage\n ? {\n signMessage: (\n message: string,\n options?: MessageSignOptions\n ) => adapter.signMessage!(message, options),\n }\n : {}),\n };\n}\n\nexport function throwIfAborted(\n signal: AbortSignal | undefined,\n stage: SwapErrorStage = \"sign\"\n): void {\n if (!signal?.aborted) return;\n throw new SwapSdkError(\"REQUEST_ABORTED\", stage, \"Execution was aborted\", {\n cause: signal.reason,\n });\n}\n\nexport function assertChain(\n expected: ChainRef,\n actual: ChainRef,\n stage: SwapErrorStage = \"sign\"\n): void {\n if (expected === actual) return;\n throw new SwapSdkError(\n \"CHAIN_MISMATCH\",\n stage,\n `Connected chain ${actual} does not match execution chain ${expected}`,\n { details: { expected, actual } }\n );\n}\n\nexport async function requestSignApproval(\n context: ExecutionContext,\n chain: ChainRef,\n kind: string,\n summary: Record<string, unknown>\n): Promise<void> {\n throwIfAborted(context.signal, \"sign\");\n await context.beforeSign?.({ chain, kind, summary });\n throwIfAborted(context.signal, \"sign\");\n}\n\nexport function mapExecutorError(\n error: unknown,\n adapter: ExecutorErrorAdapter,\n stage: SwapErrorStage,\n code: SwapErrorCode,\n message: string\n): SwapSdkError {\n if (error instanceof SwapSdkError) return error;\n if (isUserRejection(error, adapter)) {\n return new SwapSdkError(\"USER_REJECTED\", stage, \"User rejected the request\", {\n cause: error,\n });\n }\n return new SwapSdkError(code, stage, message, { cause: error });\n}\n\nexport function assertTransactionConfirmed(\n confirmation: TransactionConfirmation,\n options: {\n code: SwapErrorCode;\n stage: SwapErrorStage;\n message: string;\n }\n): unknown {\n if (confirmation?.status === \"confirmed\") {\n return confirmation.raw;\n }\n const status =\n confirmation &&\n typeof confirmation === \"object\" &&\n \"status\" in confirmation\n ? String(confirmation.status)\n : \"missing\";\n throw new SwapSdkError(\n options.code,\n options.stage,\n `${options.message}: wallet confirmation status is ${status}`,\n {\n cause:\n confirmation &&\n typeof confirmation === \"object\" &&\n \"raw\" in confirmation\n ? confirmation.raw\n : confirmation,\n details: { confirmationStatus: status },\n }\n );\n}\n\nfunction isUserRejection(\n error: unknown,\n adapter: ExecutorErrorAdapter\n): boolean {\n if (adapter.isUserRejection?.(error)) return true;\n if (typeof error !== \"object\" || error === null) return false;\n const code = \"code\" in error ? error.code : undefined;\n if (code === 4001 || code === \"ACTION_REJECTED\") return true;\n const message =\n \"message\" in error && typeof error.message === \"string\"\n ? error.message.toLowerCase()\n : \"\";\n return /user (rejected|denied)|request rejected|cancelled by user/.test(message);\n}\n","import { SwapSdkError } from \"../../core/errors\";\nimport type {\n ChainExecutionResult,\n ChainExecutor,\n ExecutionContext,\n} from \"../../core/registry\";\nimport type { ChainRef } from \"../../types/chain\";\nimport type {\n SwapExecution,\n TronApproval,\n TronUnsignedTransaction,\n} from \"../../types/execution\";\nimport {\n assertTransactionConfirmed,\n assertChain,\n exposeExecutorSigner,\n mapExecutorError,\n requestSignApproval,\n throwIfAborted,\n type ExecutorErrorAdapter,\n type TransactionConfirmation,\n type TransactionSubmission,\n} from \"../shared\";\n\ntype TronTransferExecution = Extract<SwapExecution, { kind: \"tron-transfer\" }>;\ntype TronTransactionExecution = Extract<\n SwapExecution,\n { kind: \"tron-transaction\" }\n>;\n\nexport interface TronWalletAdapter extends ExecutorErrorAdapter {\n getChain(): ChainRef | Promise<ChainRef>;\n isAddress(address: string): boolean;\n sendNativeTransfer(input: {\n amount: string;\n depositAddress: string;\n signal?: AbortSignal;\n }): Promise<TransactionSubmission>;\n sendTokenTransfer(input: {\n amount: string;\n depositAddress: string;\n tokenAddress: string;\n signal?: AbortSignal;\n }): Promise<TransactionSubmission>;\n /** Required for RHEA `tron-raw-data` / TriggerSmartContract builds. */\n signAndSendTransaction?(input: {\n transaction: TronUnsignedTransaction;\n signal?: AbortSignal;\n }): Promise<TransactionSubmission>;\n isApprovalRequired?(approval: TronApproval): boolean | Promise<boolean>;\n waitForTransaction(\n txHash: string,\n options: { signal?: AbortSignal }\n ): Promise<TransactionConfirmation>;\n}\n\nexport function createTronExecutor(\n adapter: TronWalletAdapter\n): ChainExecutor<\"tron-transfer\" | \"tron-transaction\"> {\n return {\n ...exposeExecutorSigner(\"tron\", adapter),\n kinds: [\"tron-transfer\", \"tron-transaction\"],\n\n async validate(execution, context) {\n throwIfAborted(context.signal, \"sign\");\n assertChain(execution.chain, await adapter.getChain());\n if (execution.kind === \"tron-transaction\") {\n validateTronTransaction(adapter, execution);\n return;\n }\n validateTronTransfer(adapter, execution);\n },\n\n async execute(execution, context) {\n return execution.kind === \"tron-transaction\"\n ? executeTronTransaction(adapter, execution, context)\n : executeTronTransfer(adapter, execution, context);\n },\n };\n}\n\nfunction validateTronTransfer(\n adapter: TronWalletAdapter,\n execution: TronTransferExecution\n): void {\n if (!adapter.isAddress(execution.depositAddress)) {\n throw invalid(\"Invalid Tron deposit address\");\n }\n if (!isNative(execution)) {\n if (\n !execution.tokenAddress ||\n execution.tokenAddress.toLowerCase().startsWith(\"nep141:\") ||\n !adapter.isAddress(execution.tokenAddress)\n ) {\n throw invalid(\"Invalid TRC20 token contract address\");\n }\n }\n}\n\nfunction validateTronTransaction(\n adapter: TronWalletAdapter,\n execution: TronTransactionExecution\n): void {\n if (!adapter.signAndSendTransaction) {\n throw invalid(\n \"Tron wallet adapter must implement signAndSendTransaction for tron-raw-data builds\"\n );\n }\n assertTronUnsignedTransaction(execution.transaction, \"transaction\");\n if (execution.approval) {\n assertTronUnsignedTransaction(\n execution.approval.transaction,\n \"approval.transaction\"\n );\n }\n}\n\nasync function executeTronTransfer(\n adapter: TronWalletAdapter,\n execution: TronTransferExecution,\n context: ExecutionContext\n): Promise<ChainExecutionResult> {\n const native = isNative(execution);\n await requestSignApproval(context, execution.chain, execution.kind, {\n amount: execution.amount,\n depositAddress: execution.depositAddress,\n standard: native ? \"native\" : execution.standard ?? \"trc20\",\n tokenAddress: execution.tokenAddress,\n });\n let submission: TransactionSubmission;\n try {\n submission = native\n ? await adapter.sendNativeTransfer({\n amount: execution.amount,\n depositAddress: execution.depositAddress,\n signal: context.signal,\n })\n : await adapter.sendTokenTransfer({\n amount: execution.amount,\n depositAddress: execution.depositAddress,\n tokenAddress: execution.tokenAddress!,\n signal: context.signal,\n });\n } catch (error) {\n throw mapExecutorError(\n error,\n adapter,\n \"broadcast\",\n \"BROADCAST_FAILED\",\n \"Failed to broadcast Tron transfer\"\n );\n }\n return confirm(adapter, submission, context, \"transfer\");\n}\n\nasync function executeTronTransaction(\n adapter: TronWalletAdapter,\n execution: TronTransactionExecution,\n context: ExecutionContext\n): Promise<ChainExecutionResult> {\n await executeApprovalIfRequired(adapter, execution, context);\n\n await requestSignApproval(context, execution.chain, execution.kind, {\n format: execution.format,\n txID: execution.transaction.txID,\n });\n\n let submission: TransactionSubmission;\n try {\n submission = await requireSignAndSend(adapter)({\n transaction: execution.transaction,\n signal: context.signal,\n });\n } catch (error) {\n throw mapExecutorError(\n error,\n adapter,\n \"broadcast\",\n \"BROADCAST_FAILED\",\n \"Failed to sign or broadcast Tron transaction\"\n );\n }\n\n return confirm(adapter, submission, context, \"transaction\");\n}\n\nasync function executeApprovalIfRequired(\n adapter: TronWalletAdapter,\n execution: TronTransactionExecution,\n context: ExecutionContext\n): Promise<void> {\n if (!execution.approval) return;\n\n let approvalRequired: boolean;\n try {\n approvalRequired = adapter.isApprovalRequired\n ? await adapter.isApprovalRequired(execution.approval)\n : true;\n } catch (error) {\n throw mapExecutorError(\n error,\n adapter,\n \"approve\",\n \"APPROVAL_FAILED\",\n \"Failed to determine Tron approval requirement\"\n );\n }\n if (!approvalRequired) return;\n\n context.emit({\n type: \"approval-requested\",\n executionId: context.executionId,\n });\n await requestSignApproval(context, execution.chain, \"tron-approval\", {\n txID: execution.approval.transaction.txID,\n });\n try {\n const submission = await requireSignAndSend(adapter)({\n transaction: execution.approval.transaction,\n signal: context.signal,\n });\n context.emit({\n type: \"approval-submitted\",\n executionId: context.executionId,\n txHash: submission.txHash,\n });\n const confirmation = await adapter.waitForTransaction(submission.txHash, {\n signal: context.signal,\n });\n assertTransactionConfirmed(confirmation, {\n code: \"APPROVAL_FAILED\",\n stage: \"approve\",\n message: \"Tron approval transaction failed\",\n });\n } catch (error) {\n throw mapExecutorError(\n error,\n adapter,\n \"approve\",\n \"APPROVAL_FAILED\",\n \"Failed to approve TRC20 token\"\n );\n }\n}\n\nfunction requireSignAndSend(\n adapter: TronWalletAdapter\n): NonNullable<TronWalletAdapter[\"signAndSendTransaction\"]> {\n if (!adapter.signAndSendTransaction) {\n throw invalid(\n \"Tron wallet adapter must implement signAndSendTransaction for tron-raw-data builds\"\n );\n }\n return adapter.signAndSendTransaction.bind(adapter);\n}\n\nfunction assertTronUnsignedTransaction(\n transaction: TronUnsignedTransaction,\n label: string\n): void {\n if (!transaction.txID?.trim()) {\n throw invalid(`Missing Tron ${label}.txID`);\n }\n if (!transaction.raw_data_hex?.trim()) {\n throw invalid(`Missing Tron ${label}.raw_data_hex`);\n }\n if (\n typeof transaction.raw_data !== \"object\" ||\n transaction.raw_data === null\n ) {\n throw invalid(`Missing Tron ${label}.raw_data`);\n }\n}\n\nfunction isNative(execution: TronTransferExecution): boolean {\n const standard = execution.standard?.trim().toLowerCase();\n if (standard === \"native\" || standard === \"trx\") return true;\n if (standard === \"trc20\" || standard === \"token\") return false;\n return !execution.tokenAddress;\n}\n\nfunction invalid(message: string): SwapSdkError {\n return new SwapSdkError(\"INVALID_TRANSACTION\", \"sign\", message);\n}\n\nasync function confirm(\n adapter: TronWalletAdapter,\n submission: TransactionSubmission,\n context: ExecutionContext,\n kind: \"transfer\" | \"transaction\"\n): Promise<ChainExecutionResult> {\n if (context.waitFor === \"submitted\") {\n return {\n status: \"submitted\",\n txHash: submission.txHash,\n ...(submission.raw !== undefined ? { raw: submission.raw } : {}),\n };\n }\n try {\n const confirmation = await adapter.waitForTransaction(submission.txHash, {\n signal: context.signal,\n });\n const confirmationRaw = assertTransactionConfirmed(confirmation, {\n code: \"BROADCAST_FAILED\",\n stage: \"broadcast\",\n message: \"Tron transaction failed\",\n });\n return {\n status: \"source-confirmed\",\n txHash: submission.txHash,\n raw: confirmationRaw ?? submission.raw,\n };\n } catch (error) {\n throw mapExecutorError(\n error,\n adapter,\n \"broadcast\",\n \"BROADCAST_FAILED\",\n kind === \"transfer\"\n ? \"Failed while confirming Tron transfer\"\n : \"Failed while confirming Tron transaction\"\n );\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { ad as ExecutorErrorAdapter, C as ChainRef, ae as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-DpC8G2U4.mjs';
1
+ import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-v1w63b8X.mjs';
2
2
 
3
3
  interface ZcashWalletAdapter extends ExecutorErrorAdapter {
4
4
  getChain(): ChainRef | Promise<ChainRef>;
@@ -1,4 +1,4 @@
1
- import { ad as ExecutorErrorAdapter, C as ChainRef, ae as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-DpC8G2U4.js';
1
+ import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-v1w63b8X.js';
2
2
 
3
3
  interface ZcashWalletAdapter extends ExecutorErrorAdapter {
4
4
  getChain(): ChainRef | Promise<ChainRef>;
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as SwapQuoteRequestRaw, a as SwapQuoteDataRaw, b as SwapBuildRequestRaw, c as SwapBuildDataRaw, d as SwapOrderSubmitRequestRaw, e as SwapOrderSubmitDataRaw, f as SwapOrderStatusParamsRaw, g as SwapOrderStatusDataRaw, h as SwapReportRequestRaw, i as SwapReportDataRaw, j as SwapHistoryParamsRaw, k as SwapHistoryDataRaw, l as SwapHistoryAuthChallengeRequestRaw, m as SwapHistoryAuthChallengeRaw, n as SwapHistoryAuthVerifyRequestRaw, o as SwapHistoryAuthTokenRaw, p as SwapFromTokensDataRaw, q as SwapCrossChainToTokensDataRaw, Q as QuoteRequest, r as Quote, s as SwapMcaPayloadRaw, W as WaitMode, O as OrderPollingOptions, t as SwapLifecycleEvent, u as SwapExecutionResult, C as ChainRef, A as AssetRef, B as BaseUnitAmount, v as SwapHistoryRecordRaw, w as ChainExecutor, E as ExecutorRegistry, x as SwapBuild, y as ExecuteSwapInput, z as SwapInput, D as OrderReference, F as OrderStatusResult, G as WaitForOrderInput, H as SwapHistoryAuthProofRaw, N as NearTransaction, I as SwapMcaRelayerRequestRaw } from './shared-DpC8G2U4.mjs';
2
- export { ac as BuildContext, _ as ChainExecutionResult, a8 as DepositInfo, a5 as EvmApproval, a6 as EvmSigningRequest, a4 as EvmTx, $ as ExecutionContext, a1 as ExecutorIdentityProvider, a2 as ExecutorMessageSigner, a0 as MessageSignOptions, Y as OrderStatus, ab as RouteSummary, X as SignRequestPreview, a7 as SolanaMetadata, J as SwapApiResponse, K as SwapApiTokenMetaRaw, R as SwapBuildApproveRaw, aa as SwapExecution, U as SwapHistoryWalletChainFamilyRaw, M as SwapMcaSignerPayloadRaw, a9 as SwapReportContext, P as SwapSigningRequestRaw, L as SwapTokenListRowRaw, V as SwapWarning, T as TransactionConfirmation, a3 as assertBaseUnitAmount, Z as normalizeOrderStatus } from './shared-DpC8G2U4.mjs';
1
+ import { S as SwapQuoteRequestRaw, a as SwapQuoteDataRaw, b as SwapBuildRequestRaw, c as SwapBuildDataRaw, d as SwapOrderSubmitRequestRaw, e as SwapOrderSubmitDataRaw, f as SwapOrderStatusParamsRaw, g as SwapOrderStatusDataRaw, h as SwapReportRequestRaw, i as SwapReportDataRaw, j as SwapHistoryParamsRaw, k as SwapHistoryDataRaw, l as SwapHistoryAuthChallengeRequestRaw, m as SwapHistoryAuthChallengeRaw, n as SwapHistoryAuthVerifyRequestRaw, o as SwapHistoryAuthTokenRaw, p as SwapFromTokensDataRaw, q as SwapCrossChainToTokensDataRaw, Q as QuoteRequest, r as Quote, s as SwapMcaPayloadRaw, W as WaitMode, O as OrderPollingOptions, t as SwapLifecycleEvent, u as SwapExecutionResult, C as ChainRef, A as AssetRef, B as BaseUnitAmount, v as SwapHistoryRecordRaw, w as ChainExecutor, E as ExecutorRegistry, x as SwapBuild, y as ExecuteSwapInput, z as SwapInput, D as OrderReference, F as OrderStatusResult, G as WaitForOrderInput, H as SwapHistoryAuthProofRaw, N as NearTransaction, I as SwapMcaRelayerRequestRaw } from './shared-v1w63b8X.mjs';
2
+ export { ae as BuildContext, _ as ChainExecutionResult, aa as DepositInfo, a5 as EvmApproval, a6 as EvmSigningRequest, a4 as EvmTx, $ as ExecutionContext, a1 as ExecutorIdentityProvider, a2 as ExecutorMessageSigner, a0 as MessageSignOptions, Y as OrderStatus, ad as RouteSummary, X as SignRequestPreview, a7 as SolanaMetadata, J as SwapApiResponse, K as SwapApiTokenMetaRaw, R as SwapBuildApproveRaw, ac as SwapExecution, U as SwapHistoryWalletChainFamilyRaw, M as SwapMcaSignerPayloadRaw, ab as SwapReportContext, P as SwapSigningRequestRaw, L as SwapTokenListRowRaw, V as SwapWarning, T as TransactionConfirmation, a9 as TronApproval, a8 as TronUnsignedTransaction, a3 as assertBaseUnitAmount, Z as normalizeOrderStatus } from './shared-v1w63b8X.mjs';
3
3
 
4
4
  type SwapErrorCode = "HTTP_ERROR" | "API_ERROR" | "RATE_LIMITED" | "AUTH_FAILED" | "REQUEST_ABORTED" | "REQUEST_TIMEOUT" | "INVALID_REQUEST" | "INVALID_API_RESPONSE" | "QUOTE_EXPIRED" | "ROUTE_NOT_FOUND" | "EXECUTOR_NOT_FOUND" | "UNSUPPORTED_CHAIN" | "CHAIN_MISMATCH" | "INVALID_TRANSACTION" | "USER_REJECTED" | "INSUFFICIENT_BALANCE" | "APPROVAL_FAILED" | "SIGNING_FAILED" | "BROADCAST_FAILED" | "ORDER_SUBMIT_FAILED" | "ORDER_TIMEOUT" | "REPORT_FAILED";
5
5
  type SwapErrorStage = "quote" | "build" | "approve" | "sign" | "broadcast" | "submit" | "report" | "status" | "tokens" | "history";
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as SwapQuoteRequestRaw, a as SwapQuoteDataRaw, b as SwapBuildRequestRaw, c as SwapBuildDataRaw, d as SwapOrderSubmitRequestRaw, e as SwapOrderSubmitDataRaw, f as SwapOrderStatusParamsRaw, g as SwapOrderStatusDataRaw, h as SwapReportRequestRaw, i as SwapReportDataRaw, j as SwapHistoryParamsRaw, k as SwapHistoryDataRaw, l as SwapHistoryAuthChallengeRequestRaw, m as SwapHistoryAuthChallengeRaw, n as SwapHistoryAuthVerifyRequestRaw, o as SwapHistoryAuthTokenRaw, p as SwapFromTokensDataRaw, q as SwapCrossChainToTokensDataRaw, Q as QuoteRequest, r as Quote, s as SwapMcaPayloadRaw, W as WaitMode, O as OrderPollingOptions, t as SwapLifecycleEvent, u as SwapExecutionResult, C as ChainRef, A as AssetRef, B as BaseUnitAmount, v as SwapHistoryRecordRaw, w as ChainExecutor, E as ExecutorRegistry, x as SwapBuild, y as ExecuteSwapInput, z as SwapInput, D as OrderReference, F as OrderStatusResult, G as WaitForOrderInput, H as SwapHistoryAuthProofRaw, N as NearTransaction, I as SwapMcaRelayerRequestRaw } from './shared-DpC8G2U4.js';
2
- export { ac as BuildContext, _ as ChainExecutionResult, a8 as DepositInfo, a5 as EvmApproval, a6 as EvmSigningRequest, a4 as EvmTx, $ as ExecutionContext, a1 as ExecutorIdentityProvider, a2 as ExecutorMessageSigner, a0 as MessageSignOptions, Y as OrderStatus, ab as RouteSummary, X as SignRequestPreview, a7 as SolanaMetadata, J as SwapApiResponse, K as SwapApiTokenMetaRaw, R as SwapBuildApproveRaw, aa as SwapExecution, U as SwapHistoryWalletChainFamilyRaw, M as SwapMcaSignerPayloadRaw, a9 as SwapReportContext, P as SwapSigningRequestRaw, L as SwapTokenListRowRaw, V as SwapWarning, T as TransactionConfirmation, a3 as assertBaseUnitAmount, Z as normalizeOrderStatus } from './shared-DpC8G2U4.js';
1
+ import { S as SwapQuoteRequestRaw, a as SwapQuoteDataRaw, b as SwapBuildRequestRaw, c as SwapBuildDataRaw, d as SwapOrderSubmitRequestRaw, e as SwapOrderSubmitDataRaw, f as SwapOrderStatusParamsRaw, g as SwapOrderStatusDataRaw, h as SwapReportRequestRaw, i as SwapReportDataRaw, j as SwapHistoryParamsRaw, k as SwapHistoryDataRaw, l as SwapHistoryAuthChallengeRequestRaw, m as SwapHistoryAuthChallengeRaw, n as SwapHistoryAuthVerifyRequestRaw, o as SwapHistoryAuthTokenRaw, p as SwapFromTokensDataRaw, q as SwapCrossChainToTokensDataRaw, Q as QuoteRequest, r as Quote, s as SwapMcaPayloadRaw, W as WaitMode, O as OrderPollingOptions, t as SwapLifecycleEvent, u as SwapExecutionResult, C as ChainRef, A as AssetRef, B as BaseUnitAmount, v as SwapHistoryRecordRaw, w as ChainExecutor, E as ExecutorRegistry, x as SwapBuild, y as ExecuteSwapInput, z as SwapInput, D as OrderReference, F as OrderStatusResult, G as WaitForOrderInput, H as SwapHistoryAuthProofRaw, N as NearTransaction, I as SwapMcaRelayerRequestRaw } from './shared-v1w63b8X.js';
2
+ export { ae as BuildContext, _ as ChainExecutionResult, aa as DepositInfo, a5 as EvmApproval, a6 as EvmSigningRequest, a4 as EvmTx, $ as ExecutionContext, a1 as ExecutorIdentityProvider, a2 as ExecutorMessageSigner, a0 as MessageSignOptions, Y as OrderStatus, ad as RouteSummary, X as SignRequestPreview, a7 as SolanaMetadata, J as SwapApiResponse, K as SwapApiTokenMetaRaw, R as SwapBuildApproveRaw, ac as SwapExecution, U as SwapHistoryWalletChainFamilyRaw, M as SwapMcaSignerPayloadRaw, ab as SwapReportContext, P as SwapSigningRequestRaw, L as SwapTokenListRowRaw, V as SwapWarning, T as TransactionConfirmation, a9 as TronApproval, a8 as TronUnsignedTransaction, a3 as assertBaseUnitAmount, Z as normalizeOrderStatus } from './shared-v1w63b8X.js';
3
3
 
4
4
  type SwapErrorCode = "HTTP_ERROR" | "API_ERROR" | "RATE_LIMITED" | "AUTH_FAILED" | "REQUEST_ABORTED" | "REQUEST_TIMEOUT" | "INVALID_REQUEST" | "INVALID_API_RESPONSE" | "QUOTE_EXPIRED" | "ROUTE_NOT_FOUND" | "EXECUTOR_NOT_FOUND" | "UNSUPPORTED_CHAIN" | "CHAIN_MISMATCH" | "INVALID_TRANSACTION" | "USER_REJECTED" | "INSUFFICIENT_BALANCE" | "APPROVAL_FAILED" | "SIGNING_FAILED" | "BROADCAST_FAILED" | "ORDER_SUBMIT_FAILED" | "ORDER_TIMEOUT" | "REPORT_FAILED";
5
5
  type SwapErrorStage = "quote" | "build" | "approve" | "sign" | "broadcast" | "submit" | "report" | "status" | "tokens" | "history";
package/dist/index.js CHANGED
@@ -655,10 +655,23 @@ var transferBaseSchema = zod.z.object({
655
655
  amount: decimalStringSchema,
656
656
  depositAddress: nonEmptyStringSchema
657
657
  });
658
- var tronTxSchema = transferBaseSchema.extend({
658
+ var tronTransferSchema = transferBaseSchema.extend({
659
659
  tokenAddress: zod.z.string().optional(),
660
660
  standard: zod.z.string().optional()
661
661
  });
662
+ var tronUnsignedTxSchema = zod.z.object({
663
+ txID: nonEmptyStringSchema,
664
+ raw_data: zod.z.record(zod.z.string(), zod.z.unknown()),
665
+ raw_data_hex: nonEmptyStringSchema,
666
+ visible: zod.z.boolean().optional()
667
+ }).passthrough();
668
+ var tronRawDataTxSchema = tronUnsignedTxSchema.extend({
669
+ format: zod.z.string().optional(),
670
+ approveTxID: zod.z.string().optional(),
671
+ approve_raw_data: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
672
+ approve_raw_data_hex: zod.z.string().optional(),
673
+ approveVisible: zod.z.boolean().optional()
674
+ }).passthrough();
662
675
  var bitcoinTxSchema = transferBaseSchema.extend({
663
676
  feeRate: zod.z.number().positive().optional()
664
677
  });
@@ -741,18 +754,8 @@ function normalizeExecution(raw, lane, chain) {
741
754
  transactions: Array.isArray(transactions) ? transactions : [transactions]
742
755
  };
743
756
  }
744
- case "tron": {
745
- const tx = tronTxSchema.parse(raw.tx);
746
- assertKind(tx.kind, ["tron_transfer"]);
747
- return {
748
- kind: "tron-transfer",
749
- chain,
750
- amount: tx.amount,
751
- depositAddress: tx.depositAddress,
752
- ...tx.tokenAddress ? { tokenAddress: tx.tokenAddress } : {},
753
- ...tx.standard ? { standard: tx.standard } : {}
754
- };
755
- }
757
+ case "tron":
758
+ return normalizeTronExecution(raw, chain);
756
759
  case "bitcoin": {
757
760
  const tx = bitcoinTxSchema.parse(raw.tx);
758
761
  assertKind(tx.kind, ["btc_transfer", "utxo_transfer"]);
@@ -824,6 +827,82 @@ function normalizeEvmApproval(raw, chain) {
824
827
  }
825
828
  return void 0;
826
829
  }
830
+ function normalizeTronExecution(raw, chain) {
831
+ if (isTronRawDataTx(raw.tx)) {
832
+ const tx2 = tronRawDataTxSchema.parse(raw.tx);
833
+ const transaction = toTronUnsignedTransaction(tx2);
834
+ const approval = normalizeTronApproval(tx2, raw);
835
+ return {
836
+ kind: "tron-transaction",
837
+ chain,
838
+ format: normalizeTronFormat(tx2.format),
839
+ transaction,
840
+ ...approval ? { approval } : {}
841
+ };
842
+ }
843
+ const tx = tronTransferSchema.parse(raw.tx);
844
+ assertKind(tx.kind, ["tron_transfer"]);
845
+ return {
846
+ kind: "tron-transfer",
847
+ chain,
848
+ amount: tx.amount,
849
+ depositAddress: tx.depositAddress,
850
+ ...tx.tokenAddress ? { tokenAddress: tx.tokenAddress } : {},
851
+ ...tx.standard ? { standard: tx.standard } : {}
852
+ };
853
+ }
854
+ function isTronRawDataTx(value) {
855
+ if (typeof value !== "object" || value === null) return false;
856
+ const format = Reflect.get(value, "format");
857
+ if (typeof format === "string" && format.toLowerCase() === "tron-raw-data") {
858
+ return true;
859
+ }
860
+ return typeof Reflect.get(value, "txID") === "string" && typeof Reflect.get(value, "raw_data_hex") === "string" && typeof Reflect.get(value, "raw_data") === "object" && Reflect.get(value, "raw_data") !== null;
861
+ }
862
+ function normalizeTronFormat(format) {
863
+ const normalized = format?.trim();
864
+ return normalized && normalized.length > 0 ? normalized : "tron-raw-data";
865
+ }
866
+ function toTronUnsignedTransaction(value) {
867
+ const {
868
+ txID,
869
+ raw_data,
870
+ raw_data_hex,
871
+ visible,
872
+ format: _format,
873
+ approveTxID: _approveTxID,
874
+ approve_raw_data: _approveRawData,
875
+ approve_raw_data_hex: _approveRawDataHex,
876
+ approveVisible: _approveVisible,
877
+ approve_payload: _approvePayload,
878
+ approveTxId: _approveTxId,
879
+ ...rest
880
+ } = value;
881
+ return {
882
+ ...rest,
883
+ txID,
884
+ raw_data,
885
+ raw_data_hex,
886
+ ...visible === void 0 ? {} : { visible }
887
+ };
888
+ }
889
+ function normalizeTronApproval(tx, raw) {
890
+ if (typeof tx.approveTxID === "string" && tx.approveTxID.trim() && tx.approve_raw_data && typeof tx.approve_raw_data_hex === "string" && tx.approve_raw_data_hex.trim()) {
891
+ return {
892
+ transaction: {
893
+ txID: tx.approveTxID.trim(),
894
+ raw_data: tx.approve_raw_data,
895
+ raw_data_hex: tx.approve_raw_data_hex.trim(),
896
+ visible: tx.approveVisible ?? false
897
+ }
898
+ };
899
+ }
900
+ if (raw.approve?.tx && isTronRawDataTx(raw.approve.tx)) {
901
+ const approveTx = tronUnsignedTxSchema.parse(raw.approve.tx);
902
+ return { transaction: toTronUnsignedTransaction(approveTx) };
903
+ }
904
+ return void 0;
905
+ }
827
906
  function readErc20ApproveSpender(data) {
828
907
  const normalized = data.toLowerCase();
829
908
  if (!normalized.startsWith("0x095ea7b3") || normalized.length < 10 + 64) {