@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.
- package/dist/executors/aptos.d.mts +1 -1
- package/dist/executors/aptos.d.ts +1 -1
- package/dist/executors/bitcoin.d.mts +1 -1
- package/dist/executors/bitcoin.d.ts +1 -1
- package/dist/executors/evm.d.mts +1 -1
- package/dist/executors/evm.d.ts +1 -1
- package/dist/executors/near.d.mts +1 -1
- package/dist/executors/near.d.ts +1 -1
- package/dist/executors/solana.d.mts +1 -1
- package/dist/executors/solana.d.ts +1 -1
- package/dist/executors/sui.d.mts +1 -1
- package/dist/executors/sui.d.ts +1 -1
- package/dist/executors/tron.d.mts +8 -2
- package/dist/executors/tron.d.ts +8 -2
- package/dist/executors/tron.js +155 -39
- package/dist/executors/tron.js.map +1 -1
- package/dist/executors/tron.mjs +155 -39
- package/dist/executors/tron.mjs.map +1 -1
- package/dist/executors/zcash.d.mts +1 -1
- package/dist/executors/zcash.d.ts +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +92 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +92 -13
- package/dist/index.mjs.map +1 -1
- package/dist/{shared-DpC8G2U4.d.mts → shared-v1w63b8X.d.mts} +20 -1
- package/dist/{shared-DpC8G2U4.d.ts → shared-v1w63b8X.d.ts} +20 -1
- package/package.json +1 -1
package/dist/executors/tron.mjs
CHANGED
|
@@ -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 (
|
|
94
|
-
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
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-
|
|
2
|
-
export {
|
|
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-
|
|
2
|
-
export {
|
|
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
|
|
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
|
-
|
|
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) {
|