@rhea-finance/cross-chain-aggregation-dex 2.1.8 → 2.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- 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 +1 -1
- package/dist/executors/tron.d.ts +1 -1
- package/dist/executors/tron.js +50 -7
- package/dist/executors/tron.js.map +1 -1
- package/dist/executors/tron.mjs +50 -7
- 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 +71 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +71 -17
- package/dist/index.mjs.map +1 -1
- package/dist/{shared-v1w63b8X.d.mts → shared-D_BnU1oa.d.mts} +11 -0
- package/dist/{shared-v1w63b8X.d.ts → shared-D_BnU1oa.d.ts} +11 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -316,6 +316,15 @@ const quote = await client.quote(quoteRequest);
|
|
|
316
316
|
|
|
317
317
|
`quote()` calls `POST /api/v2/swap/quote`. The frontend can configure the Near Intents wait plus the same-chain and cross-chain route timeouts on every `QuoteRequest`. The SDK sends the defaults shown above when fields are omitted.
|
|
318
318
|
|
|
319
|
+
Pass `excludeDexs` as a top-level string array to exclude routing providers. Use the API's exact lowercase provider identifiers, and pass the same array when refreshing a quote. This also applies to MCA deposit and withdrawal quotes. Omit the field when no exclusions are needed:
|
|
320
|
+
|
|
321
|
+
```ts
|
|
322
|
+
const filteredQuote = await client.quote({
|
|
323
|
+
...quoteRequest,
|
|
324
|
+
excludeDexs: ["lifi", "rango"],
|
|
325
|
+
});
|
|
326
|
+
```
|
|
327
|
+
|
|
319
328
|
Set `confidentiality: "basic"` to use the confidential 1Click route. The SDK preserves it through quote and build, and includes it in automatic or manual report payloads. Omit the field for public swaps:
|
|
320
329
|
|
|
321
330
|
```ts
|
|
@@ -473,6 +482,7 @@ Terminal statuses are `completed`, `failed`, `refunded`, and `expired`.
|
|
|
473
482
|
| `quoteWaitingTimeMs` | `number` | No | Near Intents quote wait in milliseconds. Must be a non-negative integer. Default: `3000`. See [Configure quote timing](#331-configure-quote-timing). |
|
|
474
483
|
| `sameChainTimeoutMs` | `number` | No | Same-chain route quote timeout in milliseconds. Must be a non-negative integer. Default: `500`. |
|
|
475
484
|
| `crossChainTimeoutMs` | `number` | No | Cross-chain route quote timeout in milliseconds. Must be a non-negative integer. Default: `3000`. |
|
|
485
|
+
| `excludeDexs` | `string[]` | No | Routing provider identifiers to exclude, for example `["lifi", "rango"]`. Omit or pass `[]` for no exclusions. |
|
|
476
486
|
| `confidentiality` | `"basic"` | No | Enables the confidential 1Click route and marks the resulting report. Omit for public swaps. |
|
|
477
487
|
| `sender` | `string` | Yes | Sender address on the source chain. |
|
|
478
488
|
| `recipient` | `string` | No | Recipient address on the destination chain. Cross-chain requests should normally provide it explicitly. |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.mjs';
|
|
2
2
|
|
|
3
3
|
interface AptosWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.js';
|
|
2
2
|
|
|
3
3
|
interface AptosWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.mjs';
|
|
2
2
|
|
|
3
3
|
interface BitcoinWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.js';
|
|
2
2
|
|
|
3
3
|
interface BitcoinWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
package/dist/executors/evm.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, a4 as EvmTx, ag as TransactionSubmission, a6 as EvmSigningRequest, a5 as EvmApproval, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, a4 as EvmTx, ag as TransactionSubmission, a6 as EvmSigningRequest, a5 as EvmApproval, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.mjs';
|
|
2
2
|
|
|
3
3
|
interface EvmWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
sendTransaction(tx: EvmTx, options: {
|
package/dist/executors/evm.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, a4 as EvmTx, ag as TransactionSubmission, a6 as EvmSigningRequest, a5 as EvmApproval, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, a4 as EvmTx, ag as TransactionSubmission, a6 as EvmSigningRequest, a5 as EvmApproval, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.js';
|
|
2
2
|
|
|
3
3
|
interface EvmWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
sendTransaction(tx: EvmTx, options: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, N as NearTransaction, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, N as NearTransaction, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.mjs';
|
|
2
2
|
|
|
3
3
|
interface NearWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
package/dist/executors/near.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, N as NearTransaction, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, N as NearTransaction, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.js';
|
|
2
2
|
|
|
3
3
|
interface NearWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, a7 as SolanaMetadata, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, a7 as SolanaMetadata, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.mjs';
|
|
2
2
|
|
|
3
3
|
interface SolanaWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, a7 as SolanaMetadata, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, a7 as SolanaMetadata, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.js';
|
|
2
2
|
|
|
3
3
|
interface SolanaWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
package/dist/executors/sui.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.mjs';
|
|
2
2
|
|
|
3
3
|
interface SuiWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
package/dist/executors/sui.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.js';
|
|
2
2
|
|
|
3
3
|
interface SuiWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, a8 as TronUnsignedTransaction, a9 as TronApproval, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, a8 as TronUnsignedTransaction, a9 as TronApproval, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.mjs';
|
|
2
2
|
|
|
3
3
|
interface TronWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
package/dist/executors/tron.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, a8 as TronUnsignedTransaction, a9 as TronApproval, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, a8 as TronUnsignedTransaction, a9 as TronApproval, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.js';
|
|
2
2
|
|
|
3
3
|
interface TronWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
package/dist/executors/tron.js
CHANGED
|
@@ -160,16 +160,48 @@ async function executeTronTransfer(adapter, execution, context) {
|
|
|
160
160
|
}
|
|
161
161
|
return confirm(adapter, submission, context, "transfer");
|
|
162
162
|
}
|
|
163
|
+
var TRON_TX_FRESH_MS = 15e3;
|
|
163
164
|
async function executeTronTransaction(adapter, execution, context) {
|
|
164
|
-
await executeApprovalIfRequired(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
const didApprove = await executeApprovalIfRequired(
|
|
166
|
+
adapter,
|
|
167
|
+
execution,
|
|
168
|
+
context
|
|
169
|
+
);
|
|
170
|
+
let mainExecution = execution;
|
|
171
|
+
if (didApprove) {
|
|
172
|
+
if (!context.refreshTronExecution) {
|
|
173
|
+
throw invalid(
|
|
174
|
+
"Tron approval requires rebuild via refreshTronExecution before signing the main transaction"
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
mainExecution = await context.refreshTronExecution();
|
|
179
|
+
} catch (error) {
|
|
180
|
+
throw mapExecutorError(
|
|
181
|
+
error,
|
|
182
|
+
adapter,
|
|
183
|
+
"sign",
|
|
184
|
+
"INVALID_TRANSACTION",
|
|
185
|
+
"Failed to rebuild Tron swap after approval"
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
if (mainExecution.kind !== "tron-transaction") {
|
|
189
|
+
throw invalid("Rebuilt Tron execution must be tron-transaction");
|
|
190
|
+
}
|
|
191
|
+
if (mainExecution.approval) {
|
|
192
|
+
throw invalid("Tron approval is still required after rebuild");
|
|
193
|
+
}
|
|
194
|
+
assertTronUnsignedTransaction(mainExecution.transaction, "transaction");
|
|
195
|
+
}
|
|
196
|
+
assertTronTransactionFresh(mainExecution.transaction);
|
|
197
|
+
await requestSignApproval(context, mainExecution.chain, mainExecution.kind, {
|
|
198
|
+
format: mainExecution.format,
|
|
199
|
+
txID: mainExecution.transaction.txID
|
|
168
200
|
});
|
|
169
201
|
let submission;
|
|
170
202
|
try {
|
|
171
203
|
submission = await requireSignAndSend(adapter)({
|
|
172
|
-
transaction:
|
|
204
|
+
transaction: mainExecution.transaction,
|
|
173
205
|
signal: context.signal
|
|
174
206
|
});
|
|
175
207
|
} catch (error) {
|
|
@@ -184,7 +216,7 @@ async function executeTronTransaction(adapter, execution, context) {
|
|
|
184
216
|
return confirm(adapter, submission, context, "transaction");
|
|
185
217
|
}
|
|
186
218
|
async function executeApprovalIfRequired(adapter, execution, context) {
|
|
187
|
-
if (!execution.approval) return;
|
|
219
|
+
if (!execution.approval) return false;
|
|
188
220
|
let approvalRequired;
|
|
189
221
|
try {
|
|
190
222
|
approvalRequired = adapter.isApprovalRequired ? await adapter.isApprovalRequired(execution.approval) : true;
|
|
@@ -197,7 +229,8 @@ async function executeApprovalIfRequired(adapter, execution, context) {
|
|
|
197
229
|
"Failed to determine Tron approval requirement"
|
|
198
230
|
);
|
|
199
231
|
}
|
|
200
|
-
if (!approvalRequired) return;
|
|
232
|
+
if (!approvalRequired) return false;
|
|
233
|
+
assertTronTransactionFresh(execution.approval.transaction);
|
|
201
234
|
context.emit({
|
|
202
235
|
type: "approval-requested",
|
|
203
236
|
executionId: context.executionId
|
|
@@ -223,6 +256,7 @@ async function executeApprovalIfRequired(adapter, execution, context) {
|
|
|
223
256
|
stage: "approve",
|
|
224
257
|
message: "Tron approval transaction failed"
|
|
225
258
|
});
|
|
259
|
+
return true;
|
|
226
260
|
} catch (error) {
|
|
227
261
|
throw mapExecutorError(
|
|
228
262
|
error,
|
|
@@ -251,6 +285,15 @@ function assertTronUnsignedTransaction(transaction, label) {
|
|
|
251
285
|
if (typeof transaction.raw_data !== "object" || transaction.raw_data === null) {
|
|
252
286
|
throw invalid(`Missing Tron ${label}.raw_data`);
|
|
253
287
|
}
|
|
288
|
+
if (typeof transaction.visible !== "boolean") {
|
|
289
|
+
throw invalid(`Missing Tron ${label}.visible`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function assertTronTransactionFresh(transaction) {
|
|
293
|
+
const expiration = Number(transaction.raw_data?.expiration);
|
|
294
|
+
if (!Number.isFinite(expiration) || expiration <= Date.now() + TRON_TX_FRESH_MS) {
|
|
295
|
+
throw invalid("Tron transaction expired; please rebuild the swap.");
|
|
296
|
+
}
|
|
254
297
|
}
|
|
255
298
|
function isNative(execution) {
|
|
256
299
|
const standard = execution.standard?.trim().toLowerCase();
|
|
@@ -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.js","sourcesContent":["import { logSdkCaughtError } from \"./catchLog\";\n\nexport 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 logSdkCaughtError(`asSwapSdkError:${stage}`, error);\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\";\nimport { logSdkCaughtError } from \"../core/catchLog\";\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 logSdkCaughtError(`executor.mapExecutorError:${stage}:${code}`, error);\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\";\nimport { logSdkCaughtError } from \"../../core/catchLog\";\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 logSdkCaughtError(\"executors/tron/index.ts\", 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 logSdkCaughtError(\"executors/tron/index.ts\", 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 logSdkCaughtError(\"executors/tron/index.ts\", 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 logSdkCaughtError(\"executors/tron/index.ts\", 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 logSdkCaughtError(\"executors/tron/index.ts\", 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
|
+
{"version":3,"sources":["../../src/core/errors.ts","../../src/executors/shared.ts","../../src/executors/tron/index.ts"],"names":[],"mappings":"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","file":"tron.js","sourcesContent":["import { logSdkCaughtError } from \"./catchLog\";\n\nexport 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 logSdkCaughtError(`asSwapSdkError:${stage}`, error);\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\";\nimport { logSdkCaughtError } from \"../core/catchLog\";\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 logSdkCaughtError(`executor.mapExecutorError:${stage}:${code}`, error);\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\";\nimport { logSdkCaughtError } from \"../../core/catchLog\";\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 logSdkCaughtError(\"executors/tron/index.ts\", 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\nconst TRON_TX_FRESH_MS = 15_000;\n\nasync function executeTronTransaction(\n adapter: TronWalletAdapter,\n execution: TronTransactionExecution,\n context: ExecutionContext\n): Promise<ChainExecutionResult> {\n const didApprove = await executeApprovalIfRequired(\n adapter,\n execution,\n context\n );\n\n let mainExecution = execution;\n if (didApprove) {\n if (!context.refreshTronExecution) {\n throw invalid(\n \"Tron approval requires rebuild via refreshTronExecution before signing the main transaction\"\n );\n }\n try {\n mainExecution = await context.refreshTronExecution();\n } catch (error) {\n logSdkCaughtError(\"executors/tron/index.ts\", error);\n throw mapExecutorError(\n error,\n adapter,\n \"sign\",\n \"INVALID_TRANSACTION\",\n \"Failed to rebuild Tron swap after approval\"\n );\n }\n if (mainExecution.kind !== \"tron-transaction\") {\n throw invalid(\"Rebuilt Tron execution must be tron-transaction\");\n }\n if (mainExecution.approval) {\n throw invalid(\"Tron approval is still required after rebuild\");\n }\n assertTronUnsignedTransaction(mainExecution.transaction, \"transaction\");\n }\n\n assertTronTransactionFresh(mainExecution.transaction);\n\n await requestSignApproval(context, mainExecution.chain, mainExecution.kind, {\n format: mainExecution.format,\n txID: mainExecution.transaction.txID,\n });\n\n let submission: TransactionSubmission;\n try {\n submission = await requireSignAndSend(adapter)({\n transaction: mainExecution.transaction,\n signal: context.signal,\n });\n } catch (error) {\n logSdkCaughtError(\"executors/tron/index.ts\", 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\n/** @returns true when an approval was submitted and confirmed on-chain */\nasync function executeApprovalIfRequired(\n adapter: TronWalletAdapter,\n execution: TronTransactionExecution,\n context: ExecutionContext\n): Promise<boolean> {\n if (!execution.approval) return false;\n\n let approvalRequired: boolean;\n try {\n approvalRequired = adapter.isApprovalRequired\n ? await adapter.isApprovalRequired(execution.approval)\n : true;\n } catch (error) {\n logSdkCaughtError(\"executors/tron/index.ts\", 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 false;\n\n assertTronTransactionFresh(execution.approval.transaction);\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 return true;\n } catch (error) {\n logSdkCaughtError(\"executors/tron/index.ts\", 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 if (typeof transaction.visible !== \"boolean\") {\n throw invalid(`Missing Tron ${label}.visible`);\n }\n}\n\nfunction assertTronTransactionFresh(\n transaction: TronUnsignedTransaction\n): void {\n const expiration = Number(transaction.raw_data?.expiration);\n if (\n !Number.isFinite(expiration) ||\n expiration <= Date.now() + TRON_TX_FRESH_MS\n ) {\n throw invalid(\"Tron transaction expired; please rebuild the swap.\");\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 logSdkCaughtError(\"executors/tron/index.ts\", 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"]}
|
package/dist/executors/tron.mjs
CHANGED
|
@@ -158,16 +158,48 @@ async function executeTronTransfer(adapter, execution, context) {
|
|
|
158
158
|
}
|
|
159
159
|
return confirm(adapter, submission, context, "transfer");
|
|
160
160
|
}
|
|
161
|
+
var TRON_TX_FRESH_MS = 15e3;
|
|
161
162
|
async function executeTronTransaction(adapter, execution, context) {
|
|
162
|
-
await executeApprovalIfRequired(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
const didApprove = await executeApprovalIfRequired(
|
|
164
|
+
adapter,
|
|
165
|
+
execution,
|
|
166
|
+
context
|
|
167
|
+
);
|
|
168
|
+
let mainExecution = execution;
|
|
169
|
+
if (didApprove) {
|
|
170
|
+
if (!context.refreshTronExecution) {
|
|
171
|
+
throw invalid(
|
|
172
|
+
"Tron approval requires rebuild via refreshTronExecution before signing the main transaction"
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
mainExecution = await context.refreshTronExecution();
|
|
177
|
+
} catch (error) {
|
|
178
|
+
throw mapExecutorError(
|
|
179
|
+
error,
|
|
180
|
+
adapter,
|
|
181
|
+
"sign",
|
|
182
|
+
"INVALID_TRANSACTION",
|
|
183
|
+
"Failed to rebuild Tron swap after approval"
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
if (mainExecution.kind !== "tron-transaction") {
|
|
187
|
+
throw invalid("Rebuilt Tron execution must be tron-transaction");
|
|
188
|
+
}
|
|
189
|
+
if (mainExecution.approval) {
|
|
190
|
+
throw invalid("Tron approval is still required after rebuild");
|
|
191
|
+
}
|
|
192
|
+
assertTronUnsignedTransaction(mainExecution.transaction, "transaction");
|
|
193
|
+
}
|
|
194
|
+
assertTronTransactionFresh(mainExecution.transaction);
|
|
195
|
+
await requestSignApproval(context, mainExecution.chain, mainExecution.kind, {
|
|
196
|
+
format: mainExecution.format,
|
|
197
|
+
txID: mainExecution.transaction.txID
|
|
166
198
|
});
|
|
167
199
|
let submission;
|
|
168
200
|
try {
|
|
169
201
|
submission = await requireSignAndSend(adapter)({
|
|
170
|
-
transaction:
|
|
202
|
+
transaction: mainExecution.transaction,
|
|
171
203
|
signal: context.signal
|
|
172
204
|
});
|
|
173
205
|
} catch (error) {
|
|
@@ -182,7 +214,7 @@ async function executeTronTransaction(adapter, execution, context) {
|
|
|
182
214
|
return confirm(adapter, submission, context, "transaction");
|
|
183
215
|
}
|
|
184
216
|
async function executeApprovalIfRequired(adapter, execution, context) {
|
|
185
|
-
if (!execution.approval) return;
|
|
217
|
+
if (!execution.approval) return false;
|
|
186
218
|
let approvalRequired;
|
|
187
219
|
try {
|
|
188
220
|
approvalRequired = adapter.isApprovalRequired ? await adapter.isApprovalRequired(execution.approval) : true;
|
|
@@ -195,7 +227,8 @@ async function executeApprovalIfRequired(adapter, execution, context) {
|
|
|
195
227
|
"Failed to determine Tron approval requirement"
|
|
196
228
|
);
|
|
197
229
|
}
|
|
198
|
-
if (!approvalRequired) return;
|
|
230
|
+
if (!approvalRequired) return false;
|
|
231
|
+
assertTronTransactionFresh(execution.approval.transaction);
|
|
199
232
|
context.emit({
|
|
200
233
|
type: "approval-requested",
|
|
201
234
|
executionId: context.executionId
|
|
@@ -221,6 +254,7 @@ async function executeApprovalIfRequired(adapter, execution, context) {
|
|
|
221
254
|
stage: "approve",
|
|
222
255
|
message: "Tron approval transaction failed"
|
|
223
256
|
});
|
|
257
|
+
return true;
|
|
224
258
|
} catch (error) {
|
|
225
259
|
throw mapExecutorError(
|
|
226
260
|
error,
|
|
@@ -249,6 +283,15 @@ function assertTronUnsignedTransaction(transaction, label) {
|
|
|
249
283
|
if (typeof transaction.raw_data !== "object" || transaction.raw_data === null) {
|
|
250
284
|
throw invalid(`Missing Tron ${label}.raw_data`);
|
|
251
285
|
}
|
|
286
|
+
if (typeof transaction.visible !== "boolean") {
|
|
287
|
+
throw invalid(`Missing Tron ${label}.visible`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
function assertTronTransactionFresh(transaction) {
|
|
291
|
+
const expiration = Number(transaction.raw_data?.expiration);
|
|
292
|
+
if (!Number.isFinite(expiration) || expiration <= Date.now() + TRON_TX_FRESH_MS) {
|
|
293
|
+
throw invalid("Tron transaction expired; please rebuild the swap.");
|
|
294
|
+
}
|
|
252
295
|
}
|
|
253
296
|
function isNative(execution) {
|
|
254
297
|
const standard = execution.standard?.trim().toLowerCase();
|
|
@@ -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":["import { logSdkCaughtError } from \"./catchLog\";\n\nexport 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 logSdkCaughtError(`asSwapSdkError:${stage}`, error);\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\";\nimport { logSdkCaughtError } from \"../core/catchLog\";\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 logSdkCaughtError(`executor.mapExecutorError:${stage}:${code}`, error);\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\";\nimport { logSdkCaughtError } from \"../../core/catchLog\";\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 logSdkCaughtError(\"executors/tron/index.ts\", 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 logSdkCaughtError(\"executors/tron/index.ts\", 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 logSdkCaughtError(\"executors/tron/index.ts\", 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 logSdkCaughtError(\"executors/tron/index.ts\", 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 logSdkCaughtError(\"executors/tron/index.ts\", 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
|
+
{"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":["import { logSdkCaughtError } from \"./catchLog\";\n\nexport 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 logSdkCaughtError(`asSwapSdkError:${stage}`, error);\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\";\nimport { logSdkCaughtError } from \"../core/catchLog\";\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 logSdkCaughtError(`executor.mapExecutorError:${stage}:${code}`, error);\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\";\nimport { logSdkCaughtError } from \"../../core/catchLog\";\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 logSdkCaughtError(\"executors/tron/index.ts\", 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\nconst TRON_TX_FRESH_MS = 15_000;\n\nasync function executeTronTransaction(\n adapter: TronWalletAdapter,\n execution: TronTransactionExecution,\n context: ExecutionContext\n): Promise<ChainExecutionResult> {\n const didApprove = await executeApprovalIfRequired(\n adapter,\n execution,\n context\n );\n\n let mainExecution = execution;\n if (didApprove) {\n if (!context.refreshTronExecution) {\n throw invalid(\n \"Tron approval requires rebuild via refreshTronExecution before signing the main transaction\"\n );\n }\n try {\n mainExecution = await context.refreshTronExecution();\n } catch (error) {\n logSdkCaughtError(\"executors/tron/index.ts\", error);\n throw mapExecutorError(\n error,\n adapter,\n \"sign\",\n \"INVALID_TRANSACTION\",\n \"Failed to rebuild Tron swap after approval\"\n );\n }\n if (mainExecution.kind !== \"tron-transaction\") {\n throw invalid(\"Rebuilt Tron execution must be tron-transaction\");\n }\n if (mainExecution.approval) {\n throw invalid(\"Tron approval is still required after rebuild\");\n }\n assertTronUnsignedTransaction(mainExecution.transaction, \"transaction\");\n }\n\n assertTronTransactionFresh(mainExecution.transaction);\n\n await requestSignApproval(context, mainExecution.chain, mainExecution.kind, {\n format: mainExecution.format,\n txID: mainExecution.transaction.txID,\n });\n\n let submission: TransactionSubmission;\n try {\n submission = await requireSignAndSend(adapter)({\n transaction: mainExecution.transaction,\n signal: context.signal,\n });\n } catch (error) {\n logSdkCaughtError(\"executors/tron/index.ts\", 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\n/** @returns true when an approval was submitted and confirmed on-chain */\nasync function executeApprovalIfRequired(\n adapter: TronWalletAdapter,\n execution: TronTransactionExecution,\n context: ExecutionContext\n): Promise<boolean> {\n if (!execution.approval) return false;\n\n let approvalRequired: boolean;\n try {\n approvalRequired = adapter.isApprovalRequired\n ? await adapter.isApprovalRequired(execution.approval)\n : true;\n } catch (error) {\n logSdkCaughtError(\"executors/tron/index.ts\", 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 false;\n\n assertTronTransactionFresh(execution.approval.transaction);\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 return true;\n } catch (error) {\n logSdkCaughtError(\"executors/tron/index.ts\", 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 if (typeof transaction.visible !== \"boolean\") {\n throw invalid(`Missing Tron ${label}.visible`);\n }\n}\n\nfunction assertTronTransactionFresh(\n transaction: TronUnsignedTransaction\n): void {\n const expiration = Number(transaction.raw_data?.expiration);\n if (\n !Number.isFinite(expiration) ||\n expiration <= Date.now() + TRON_TX_FRESH_MS\n ) {\n throw invalid(\"Tron transaction expired; please rebuild the swap.\");\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 logSdkCaughtError(\"executors/tron/index.ts\", 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 { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.mjs';
|
|
2
2
|
|
|
3
3
|
interface ZcashWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-
|
|
1
|
+
import { af as ExecutorErrorAdapter, C as ChainRef, ag as TransactionSubmission, T as TransactionConfirmation, w as ChainExecutor } from '../shared-D_BnU1oa.js';
|
|
2
2
|
|
|
3
3
|
interface ZcashWalletAdapter extends ExecutorErrorAdapter {
|
|
4
4
|
getChain(): ChainRef | Promise<ChainRef>;
|