@sun-protocol/sun-sdk-protocols 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/dist/chunk-5XDX5563.js +99 -0
- package/dist/chunk-5XDX5563.js.map +1 -0
- package/dist/chunk-C2YCVBPI.js +212 -0
- package/dist/chunk-C2YCVBPI.js.map +1 -0
- package/dist/chunk-ECCGOXNA.js +1317 -0
- package/dist/chunk-ECCGOXNA.js.map +1 -0
- package/dist/chunk-HD2S3Q7L.js +746 -0
- package/dist/chunk-HD2S3Q7L.js.map +1 -0
- package/dist/chunk-L5TZCDPH.js +561 -0
- package/dist/chunk-L5TZCDPH.js.map +1 -0
- package/dist/chunk-OM4OW4KB.js +224 -0
- package/dist/chunk-OM4OW4KB.js.map +1 -0
- package/dist/chunk-PEGREDLT.js +935 -0
- package/dist/chunk-PEGREDLT.js.map +1 -0
- package/dist/chunk-TSHXXRH2.js +103 -0
- package/dist/chunk-TSHXXRH2.js.map +1 -0
- package/dist/chunk-VFVKMC4H.js +521 -0
- package/dist/chunk-VFVKMC4H.js.map +1 -0
- package/dist/chunk-YMGZDXI4.js +1209 -0
- package/dist/chunk-YMGZDXI4.js.map +1 -0
- package/dist/common-8VQQ0FSU.d.cts +146 -0
- package/dist/common-8VQQ0FSU.d.ts +146 -0
- package/dist/execute-BNKh6dT6.d.cts +187 -0
- package/dist/execute-CVhcKZxF.d.ts +187 -0
- package/dist/index.cjs +5619 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +139 -0
- package/dist/index.d.ts +139 -0
- package/dist/index.js +200 -0
- package/dist/index.js.map +1 -0
- package/dist/intents-BSXq1HvW.d.cts +200 -0
- package/dist/intents-CwOttD75.d.ts +200 -0
- package/dist/liquidity/index.cjs +2441 -0
- package/dist/liquidity/index.cjs.map +1 -0
- package/dist/liquidity/index.d.cts +83 -0
- package/dist/liquidity/index.d.ts +83 -0
- package/dist/liquidity/index.js +32 -0
- package/dist/liquidity/index.js.map +1 -0
- package/dist/positions/index.cjs +1544 -0
- package/dist/positions/index.cjs.map +1 -0
- package/dist/positions/index.d.cts +159 -0
- package/dist/positions/index.d.ts +159 -0
- package/dist/positions/index.js +25 -0
- package/dist/positions/index.js.map +1 -0
- package/dist/pump/index.cjs +1178 -0
- package/dist/pump/index.cjs.map +1 -0
- package/dist/pump/index.d.cts +16 -0
- package/dist/pump/index.d.ts +16 -0
- package/dist/pump/index.js +29 -0
- package/dist/pump/index.js.map +1 -0
- package/dist/swap/index.cjs +2259 -0
- package/dist/swap/index.cjs.map +1 -0
- package/dist/swap/index.d.cts +33 -0
- package/dist/swap/index.d.ts +33 -0
- package/dist/swap/index.js +61 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/types-BTPdCC7k.d.cts +160 -0
- package/dist/types-BfrouFmO.d.ts +160 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/swap/index.ts","../../src/context.ts","../../src/execute-http-action.ts","../../src/execute-plan.ts","../../src/errors.ts","../../src/swap/router-execute.ts","../../src/internal/router-action.ts","../../src/internal/universal-router-adapter.ts","../../src/internal/tokens.ts","../../src/common.ts","../../src/swap/fee-limit.ts","../../src/usdt-transfer.ts","../../src/swap/plan.ts","../../src/approval/permit2.ts","../../src/internal/permit2-adapter.ts","../../src/approval/plan.ts","../../src/approval/check.ts","../../src/approval/classic.ts","../../src/swap/tokens.ts","../../src/swap/intents.ts","../../src/internal/intents.ts","../../src/swap/quote.ts","../../src/swap/workflow.ts","../../src/swap/router.ts","../../src/internal/v2-swap-action.ts","../../src/swap/v2-execute.ts","../../src/swap/psm.ts","../../src/internal/reads.ts","../../src/swap/v2.ts"],"sourcesContent":["export {\n createSwapRouterClient,\n SwapRouterClient,\n} from './router.js'\nexport {\n createRouterSwapExecutor,\n materializeUniversalRouterAction,\n} from './router-execute.js'\nexport { createV2SwapExecutor } from './v2-execute.js'\nexport { planRouterSwap } from './plan.js'\nexport {\n createPsmClient,\n createPsmSwapClient,\n planPsmSwap,\n PsmSwapClient,\n quotePsmSwap,\n readPsm,\n} from './psm.js'\nexport {\n createV2Client,\n createV2SwapClient,\n V2SwapClient,\n} from './v2.js'\nexport {\n quoteRouterSwap,\n quoteSwap,\n} from './quote.js'\nexport {\n PSM_PROTOCOL_ID,\n UNIVERSAL_ROUTER_PROTOCOL_ID,\n WTRX_PROTOCOL_ID,\n} from './intents.js'\nexport {\n detectWtrxSwap,\n isNativeTrxToken,\n isWrappedTrxToken,\n normalizeRouterToken,\n normalizeV2TrxPairPath,\n} from './tokens.js'\nexport type {\n RouterSwapQuote,\n PsmApprovalMode,\n PsmContractOverrides,\n PsmQuote,\n PsmReadInput,\n PsmSnapshot,\n PsmSwapClientShape,\n PsmSwapDirection,\n PsmSwapInput,\n PsmSwapMode,\n PsmSwapQuote,\n SwapNamespace,\n SwapPlanOptions,\n SwapQuote,\n SwapQuoteAmounts,\n SwapQuoteInput,\n SwapQuoteKind,\n RouterRouteType,\n SwapRouterClientShape,\n SwapRouterExecuteInput,\n SwapRouterPlanInput,\n SwapTransactionOptions,\n WtrxSwapAction,\n WtrxSwapQuote,\n WtrxSwapRoute,\n V2SwapClientShape,\n V2SwapDirection,\n V2SwapMode,\n V2SwapQuote,\n V2SwapQuoteInput,\n} from './types.js'\nexport type { ApprovalMode } from '../types/options.js'\nexport type { TransactionPlan } from '../types/plan.js'\n","import {\n RouterApiClient,\n SunPumpApiClient,\n defaultFetch,\n defaultJsonParser,\n getServerTime,\n type FetchLike,\n type JsonParser,\n} from '@sun-protocol/sun-sdk-api'\nimport {\n getChainConfig,\n getNetworkEndpoints,\n type ChainConfig,\n type NetworkEndpoints,\n} from '@sun-protocol/sun-sdk-chains'\nimport {\n SDKError,\n assertTronAddress,\n type Network,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport { createRuntime, type Runtime, type WalletAdapter } from '@sun-protocol/sun-sdk-runtime'\nimport { executeHttpAction } from './execute-http-action.js'\nimport type { TransactionPlanExecutor } from './execute-plan.js'\nimport type {\n ProtocolAdapterDependencies,\n ContractOverrides,\n ProtocolContractName,\n SunSDKCreateOptions,\n} from './types/options.js'\n\nexport interface ProtocolsContext {\n readonly network: Network\n readonly chain: ChainConfig\n readonly endpoints: NetworkEndpoints\n readonly runtime?: Runtime\n readonly fetchImpl: FetchLike\n readonly jsonParser?: JsonParser\n readonly routerApi: RouterApiClient\n readonly sunPumpApi?: SunPumpApiClient\n readonly adapters: ProtocolAdapterDependencies\n readonly now: () => number\n readonly getTransactionTime: () => Promise<number>\n readonly idFactory: () => string\n}\n\nfunction createDefaultIdFactory(): () => string {\n let nextPlanId = 0\n return () => {\n nextPlanId += 1\n return `sun-plan-${nextPlanId}`\n }\n}\n\n/**\n * Creates the public context used by staged transaction orchestration.\n *\n * Keep this available to consumers that render and execute TransactionPlan\n * actions one step at a time instead of using a client's execute() shortcut.\n */\nexport function createProtocolsContext(options: SunSDKCreateOptions): ProtocolsContext {\n if (options.runtime && (options.tronClient || options.wallet || options.getWallet || options.onSubmitted)) {\n throw new SDKError(\n 'SDK_INVALID_ARGUMENT',\n 'Use either runtime or tronClient/wallet/onSubmitted when creating a protocol client',\n )\n }\n if (options.wallet && !options.tronClient) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'wallet requires a tronClient')\n }\n if (options.getWallet && !options.tronClient) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'getWallet requires a tronClient')\n }\n if (options.wallet && options.getWallet) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Use either wallet or getWallet when creating a protocol client')\n }\n\n const runtime = options.runtime ?? (options.tronClient\n ? createRuntime({\n network: options.network,\n tronClient: options.tronClient,\n ...(options.wallet ? { wallet: options.wallet } : {}),\n ...(options.getWallet ? { getWallet: options.getWallet } : {}),\n ...(options.onSubmitted ? { onSubmitted: options.onSubmitted } : {}),\n })\n : undefined)\n\n if (runtime && runtime.network !== options.network) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Protocols runtime network mismatch', {\n sdkNetwork: options.network,\n runtimeNetwork: runtime.network,\n })\n }\n\n const chain = getChainConfig(options.network)\n const endpoints = { ...getNetworkEndpoints(options.network), ...options.endpoints }\n const fetchImpl = options.fetchImpl ?? defaultFetch\n const jsonParser = options.jsonParser ?? defaultJsonParser\n const now = options.now ?? Date.now\n const getTransactionTime = options.getTransactionTime ?? (() => getServerTime(endpoints.time, fetchImpl, jsonParser))\n const sunPumpApi = options.clients?.sunPumpApi ??\n (endpoints.sunPump\n ? new SunPumpApiClient({ baseUrl: endpoints.sunPump, fetchImpl, jsonParser })\n : undefined)\n\n return {\n network: options.network,\n chain,\n endpoints,\n ...(runtime ? { runtime } : {}),\n fetchImpl,\n jsonParser,\n routerApi: options.clients?.routerApi ?? new RouterApiClient({ fetchImpl, jsonParser }),\n ...(sunPumpApi ? { sunPumpApi } : {}),\n adapters: options.adapters ?? {},\n now,\n getTransactionTime: async () => {\n try {\n const timestamp = await getTransactionTime()\n if (Number.isSafeInteger(timestamp) && timestamp > 0) return timestamp\n } catch {\n // Preserve the local-time fallback, sampled after the request fails.\n }\n return now()\n },\n idFactory: options.idFactory ?? createDefaultIdFactory(),\n }\n}\n\nexport function requireRuntime(context: ProtocolsContext, operation: string): Runtime {\n if (!context.runtime) {\n throw new SDKError('SDK_RUNTIME_ERROR', `${operation} requires a runtime`, {\n operation,\n network: context.network,\n })\n }\n return context.runtime\n}\n\nexport function resolveProtocolContract(\n context: ProtocolsContext,\n overrides: ContractOverrides | undefined,\n name: ProtocolContractName,\n): TronAddress {\n const configured = context.chain.contracts as Partial<Record<ProtocolContractName, TronAddress>>\n const address = overrides?.[name] ?? configured[name]\n if (!address) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `No configured address for ${name}`, { name })\n }\n return assertTronAddress(address, name)\n}\n\nexport async function requireWalletAddress(\n context: ProtocolsContext,\n operation: string,\n): Promise<TronAddress> {\n return (await requireWalletSnapshot(context, operation)).address\n}\n\nexport interface ProtocolWalletSnapshot {\n readonly wallet: WalletAdapter\n readonly address: TronAddress\n}\n\n/** Resolves one wallet adapter for the current plan boundary. */\nexport async function requireWalletSnapshot(\n context: ProtocolsContext,\n operation: string,\n): Promise<ProtocolWalletSnapshot> {\n const runtime = requireRuntime(context, operation)\n const wallet = await runtime.requireWallet(operation)\n return {\n wallet,\n address: assertTronAddress(await wallet.getAddress(), 'wallet address'),\n }\n}\n\n/** Creates the base public executor for staged TransactionPlan execution. */\nexport function createContextExecutor(context: ProtocolsContext): TransactionPlanExecutor {\n const runtime = context.runtime\n let walletPromise: ReturnType<Runtime['requireWallet']> | undefined\n const requireExecutionWallet = () => {\n walletPromise ??= runtime?.requireWallet('transaction plan execution')\n if (!walletPromise) {\n return Promise.reject(new SDKError('SDK_RUNTIME_ERROR', 'Transaction plan execution requires a runtime'))\n }\n return walletPromise\n }\n return {\n network: context.network,\n ...(runtime\n ? {\n getAddress: async () => {\n const wallet = await requireExecutionWallet()\n return assertTronAddress(await wallet.getAddress(), 'wallet address')\n },\n sendAction: async (action: Parameters<Runtime['sendAction']>[0]) => {\n const wallet = await requireExecutionWallet()\n return runtime.sendAction(action, { wallet })\n },\n ...(runtime.waitForTransactionReceipt\n ? { waitForTransactionReceipt: runtime.waitForTransactionReceipt.bind(runtime) }\n : {}),\n signTypedData: async (payload: Parameters<Runtime['signTypedData']>[0]) => {\n const wallet = await requireExecutionWallet()\n return runtime.signTypedData(payload, { wallet })\n },\n }\n : {}),\n executeHttpAction: (action) => executeHttpAction(action, context.fetchImpl, context.jsonParser),\n }\n}\n","import {\n defaultJsonParser,\n requestJson,\n type FetchLike,\n type JsonParser,\n} from '@sun-protocol/sun-sdk-api'\nimport {\n SDKError,\n type HttpRequestAction,\n type TransactionAction,\n} from '@sun-protocol/sun-sdk-core'\n\nexport async function executeHttpAction(\n action: TransactionAction,\n fetchImpl: FetchLike,\n jsonParser: JsonParser = defaultJsonParser,\n): Promise<unknown> {\n if (action.type !== 'http-request' || action.execute !== 'api') {\n throw new SDKError('SDK_INVALID_ARGUMENT', `Action ${action.id} is not an HTTP action`, {\n actionId: action.id,\n actionType: action.type,\n })\n }\n\n const request = (action as HttpRequestAction).request\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...request.headers,\n }\n let body: BodyInit | undefined\n if (request.body !== undefined) {\n if (typeof request.body === 'string') {\n body = request.body\n } else {\n body = JSON.stringify(request.body)\n if (!headers['Content-Type']) headers['Content-Type'] = 'application/json'\n }\n }\n\n return requestJson(request.url, {\n service: 'Protocols HTTP action',\n fetchImpl,\n jsonParser,\n init: {\n method: request.method,\n headers,\n ...(body !== undefined ? { body } : {}),\n },\n })\n}\n","import {\n SDKError,\n type ContractCallAction,\n type DeferredContractCallAction,\n type Network,\n type TransactionAction,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport type { TypedDataPayload } from '@sun-protocol/sun-sdk-runtime'\nimport type { Runtime } from '@sun-protocol/sun-sdk-runtime'\nimport {\n normalizeProtocolError,\n withExecutionContext,\n} from './errors.js'\nimport type { ExecutedActionResult, TransactionPlan, TransactionPlanExecutionResult } from './types/plan.js'\n\nexport interface TransactionPlanExecutor {\n readonly network?: Network\n getAddress?(): Promise<TronAddress>\n sendAction?: Runtime['sendAction']\n waitForTransactionReceipt?: NonNullable<Runtime['waitForTransactionReceipt']>\n signTypedData?: Runtime['signTypedData']\n executeHttpAction?(action: TransactionAction): Promise<unknown>\n materializeAction?(\n action: DeferredContractCallAction,\n completedActions: readonly ExecutedActionResult[],\n ): Promise<ContractCallAction>\n}\n\n/** Executes one plan action without retaining any client-side execution state. */\nexport async function executePlanAction(\n action: TransactionAction,\n executor: TransactionPlanExecutor,\n completedActions: readonly ExecutedActionResult[] = [],\n): Promise<ExecutedActionResult> {\n try {\n if (action.waitForReceipt && !executor.waitForTransactionReceipt) {\n throw new SDKError(\n 'SDK_RUNTIME_ERROR',\n `Action ${action.id} requires transaction receipt waiting capability`,\n { actionId: action.id, finality: action.waitForReceipt },\n )\n }\n\n if (action.execute === 'runtime') {\n let actionToSend: ContractCallAction\n let materializedAction: ContractCallAction | undefined\n\n if (action.type === 'deferred-contract-call') {\n if (!executor.materializeAction) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Action ${action.id} requires a deferred action materializer`)\n }\n const resolvedAction = await executor.materializeAction(action, completedActions)\n materializedAction = {\n ...resolvedAction,\n id: action.id,\n ...(action.intent === undefined ? {} : { intent: action.intent }),\n }\n actionToSend = materializedAction\n } else if (action.type === 'contract-call' || action.type === 'approve') {\n actionToSend = action\n } else {\n throw new SDKError(\n 'SDK_RUNTIME_ERROR',\n `Runtime action ${action.id} materialized to unsupported type: ${action.type}`,\n )\n }\n\n if (!executor.sendAction) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Action ${action.id} requires a runtime executor`)\n }\n const result = await executor.sendAction(actionToSend)\n const receipt = action.waitForReceipt && executor.waitForTransactionReceipt\n ? await executor.waitForTransactionReceipt(result.txid, { finality: action.waitForReceipt })\n : undefined\n if (receipt && !receipt.success) {\n throw new SDKError('SDK_CONTRACT_ERROR', `Transaction ${result.txid} failed`, {\n actionId: action.id,\n txid: result.txid,\n receipt,\n })\n }\n return {\n action,\n result,\n txid: result.txid,\n ...(receipt ? { receipt } : {}),\n ...(materializedAction ? { materializedAction } : {}),\n }\n }\n\n if (action.execute === 'wallet-signature') {\n if (!action.typedData) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `Action ${action.id} is missing typedData`)\n }\n if (!executor.signTypedData) {\n throw new SDKError('SDK_WALLET_CAPABILITY_ERROR', `Action ${action.id} requires typed-data signing`)\n }\n const signature = await executor.signTypedData(action.typedData as TypedDataPayload)\n return { action, result: signature }\n }\n\n if (action.execute === 'api') {\n if (!executor.executeHttpAction) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Action ${action.id} requires an API executor`)\n }\n return { action, result: await executor.executeHttpAction(action) }\n }\n\n throw new SDKError('SDK_RUNTIME_ERROR', 'Unsupported action executor')\n } catch (error) {\n const normalized = normalizeProtocolError(\n error,\n action.execute === 'api' ? 'SDK_API_ERROR' : 'SDK_RUNTIME_ERROR',\n `Failed to execute action ${action.id}`,\n )\n throw withExecutionContext(normalized, {\n actionId: action.id,\n completedActionIds: completedActions.map((result) => result.action.id),\n })\n }\n}\n\nexport async function executeTransactionPlan(\n plan: TransactionPlan,\n executor: TransactionPlanExecutor,\n): Promise<TransactionPlanExecutionResult> {\n if (executor.network && executor.network !== plan.network) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Plan and executor network mismatch', {\n planNetwork: plan.network,\n executorNetwork: executor.network,\n })\n }\n if (plan.owner) {\n if (!executor.getAddress) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Plan ${plan.id} requires a wallet address`, {\n planId: plan.id,\n owner: plan.owner,\n })\n }\n const actualAddress = await executor.getAddress()\n if (actualAddress !== plan.owner) {\n throw new SDKError(\n 'SDK_WALLET_ACCOUNT_MISMATCH',\n 'Transaction plan was created for a different wallet',\n {\n planId: plan.id,\n expectedAddress: plan.owner,\n actualAddress,\n },\n )\n }\n }\n\n const orderedActions = [...plan.approvals, ...plan.transactions]\n const receiptAction = orderedActions.find((action) => action.waitForReceipt !== undefined)\n if (receiptAction && !executor.waitForTransactionReceipt) {\n throw new SDKError(\n 'SDK_RUNTIME_ERROR',\n `Action ${receiptAction.id} requires transaction receipt waiting capability`,\n { planId: plan.id, actionId: receiptAction.id, finality: receiptAction.waitForReceipt },\n )\n }\n const actionResults: ExecutedActionResult[] = []\n const txids: string[] = []\n let finalResult: TransactionPlanExecutionResult['finalResult']\n\n for (const action of orderedActions) {\n const actionResult = await executePlanAction(action, executor, actionResults)\n actionResults.push(actionResult)\n\n if (action.execute === 'runtime') {\n if (!actionResult.txid) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Runtime action ${action.id} did not return a transaction id`)\n }\n txids.push(actionResult.txid)\n const raw = typeof actionResult.result === 'object' && actionResult.result !== null\n ? (actionResult.result as { raw?: unknown }).raw\n : undefined\n finalResult = { type: 'transaction', txid: actionResult.txid, raw }\n continue\n }\n\n if (action.execute === 'wallet-signature') {\n finalResult = { type: 'signature', signature: actionResult.result as string }\n continue\n }\n\n finalResult = { type: 'api', data: actionResult.result }\n }\n\n return {\n plan,\n actions: actionResults,\n txids,\n finalResult,\n }\n}\n\nexport function isTransactionPlan(input: unknown): input is TransactionPlan {\n if (typeof input !== 'object' || input === null) return false\n const candidate = input as Partial<TransactionPlan>\n return Array.isArray(candidate.approvals) && Array.isArray(candidate.transactions)\n}\n\n/** Executes only a plan's final transactions and preserves the caller's original plan. */\nexport async function executePlanTransactions(\n plan: TransactionPlan,\n executor: TransactionPlanExecutor,\n): Promise<TransactionPlanExecutionResult> {\n const result = await executeTransactionPlan(\n { ...plan, approvals: [] },\n executor,\n )\n return { ...result, plan }\n}\n","import {\n SDKError,\n} from '@sun-protocol/sun-sdk-core'\n\nfunction isWalletRejection(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false\n const candidate = error as { code?: unknown; message?: unknown }\n return candidate.code === 4001 ||\n (typeof candidate.message === 'string' && /reject|denied|cancel/i.test(candidate.message))\n}\n\nexport function normalizeProtocolError(\n error: unknown,\n fallbackCode: string,\n message: string,\n context: Record<string, unknown> = {},\n): SDKError<string> {\n if (error instanceof SDKError) return error as SDKError<string>\n const code = isWalletRejection(error) ? 'SDK_WALLET_REJECTED' : fallbackCode\n return new SDKError(code, message, { ...context, cause: error })\n}\n\nexport function withExecutionContext(\n error: SDKError<string>,\n context: {\n readonly actionId: string\n readonly completedActionIds: readonly string[]\n },\n): SDKError<string> {\n return new SDKError<string>(error.code, error.message, {\n ...error.context,\n actionId: context.actionId,\n completedActionIds: context.completedActionIds,\n cause: error,\n })\n}\n","import {\n SDKError,\n type DeferredContractCallAction,\n} from '@sun-protocol/sun-sdk-core'\nimport { createContextExecutor, type ProtocolsContext } from '../context.js'\nimport type { TransactionPlanExecutor } from '../execute-plan.js'\nimport {\n UNIVERSAL_ROUTER_MATERIALIZATION_KIND,\n type UniversalRouterMaterializationData,\n} from '../internal/router-action.js'\nimport { buildUniversalRouterSwapAction } from '../internal/universal-router-adapter.js'\nimport { resolveTransactionDeadline } from '../common.js'\nimport type { ExecutedActionResult } from '../types/plan.js'\nimport type { SwapTransactionOptions } from './types.js'\nimport { assertUsdtTransfer } from '../usdt-transfer.js'\n\nfunction signatureFromResults(\n actionId: string | undefined,\n completed: readonly ExecutedActionResult[],\n): string | undefined {\n if (!actionId) return undefined\n const result = completed.find((item) => item.action.id === actionId)?.result\n return typeof result === 'string' ? (result.startsWith('0x') ? result : `0x${result}`) : undefined\n}\n\n/** Materializes the final Router transaction from a caller-provided Permit2 signature. */\nasync function materializeUniversalRouterActionWithSignature(\n context: ProtocolsContext,\n action: DeferredContractCallAction,\n permitSignature?: string,\n) {\n if (action.materialization.kind !== UNIVERSAL_ROUTER_MATERIALIZATION_KIND) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Unsupported deferred action kind: ${action.materialization.kind}`)\n }\n const data = action.materialization.data as unknown as UniversalRouterMaterializationData\n\n if (data.network !== context.network) {\n throw new SDKError('SDK_USDT_TRANSFER_UNKNOWN', 'Network changed; rebuild the swap plan', { reason: 'CHECK_FAILED' })\n }\n\n if (data.signatureActionId && !permitSignature) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Router swap requires the planned Permit2 signature', {\n actionId: action.id,\n signatureActionId: data.signatureActionId,\n })\n }\n if (data.signatureActionId && !data.permitSingle) {\n throw new SDKError('SDK_RUNTIME_ERROR', 'Router swap plan is missing Permit2 permit data', {\n actionId: action.id,\n signatureActionId: data.signatureActionId,\n })\n }\n\n const normalizedSignature = permitSignature\n ? (permitSignature.startsWith('0x') ? permitSignature : `0x${permitSignature}`)\n : undefined\n const permit = normalizedSignature && data.permitSingle\n ? { ...(data.permitSingle as Record<string, unknown>), signature: normalizedSignature as `0x${string}` }\n : undefined\n\n return buildUniversalRouterSwapAction({\n network: context.network,\n chain: context.chain,\n route: data.route,\n slippageBips: BigInt(data.slippageBips),\n deadline: await resolveTransactionDeadline(context, data.transactionValidForSeconds),\n ...(data.recipient ? { recipient: data.recipient } : {}),\n ...(permit ? { permit: permit as never } : {}),\n ...(data.feeLimit !== undefined ? { feeLimit: data.feeLimit } : {}),\n })\n}\n\n/**\n * Materializes a deferred Universal Router action with results collected by a\n * staged UI, including a Permit2 signature produced by an earlier action.\n */\nexport async function materializeUniversalRouterAction(\n context: ProtocolsContext,\n action: DeferredContractCallAction,\n completedActions: readonly ExecutedActionResult[],\n) {\n const data = action.materialization.data as unknown as UniversalRouterMaterializationData\n const signature = signatureFromResults(data.signatureActionId, completedActions)\n return materializeUniversalRouterActionWithSignature(context, action, signature)\n}\n\n/** Creates an executor for Router plans, including approvals and WTRX actions. */\nexport function createRouterSwapExecutor(\n context: ProtocolsContext,\n options?: SwapTransactionOptions,\n): TransactionPlanExecutor {\n const executor = createContextExecutor(context)\n return {\n ...executor,\n sendAction: async (action) => {\n if (action.target === context.chain.contracts.universalRouter || action.intent?.scope.protocol === 'universal-router' && action.intent.kind === 'swap') {\n await assertUsdtTransfer(context, action)\n }\n if (!executor.sendAction) throw new SDKError('SDK_RUNTIME_ERROR', 'Swap execution requires a runtime')\n return executor.sendAction(action)\n },\n materializeAction: (action, completed) => options\n ? materializeUniversalRouterActionWithSignature(context, action, options.permitSignature)\n : materializeUniversalRouterAction(context, action, completed),\n }\n}\n","import {\n createDeferredContractCallAction,\n type DeferredContractCallAction,\n type Network,\n type TransactionIntent,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport type { RouterRoute } from '@sun-protocol/sun-sdk-api'\n\nexport const UNIVERSAL_ROUTER_MATERIALIZATION_KIND = 'universal-router-swap'\n\ntype JsonPrimitive = string | number | boolean | null\ntype JsonValue = JsonPrimitive | JsonObject | JsonValue[]\ninterface JsonObject {\n readonly [key: string]: JsonValue\n}\n\nexport interface UniversalRouterMaterializationData {\n readonly network: Network\n readonly route: RouterRoute\n readonly slippageBips: string\n readonly transactionValidForSeconds: number\n readonly recipient?: TronAddress\n readonly signatureActionId?: string\n readonly permitSingle?: JsonObject\n readonly feeLimit?: number\n}\n\nfunction toJsonValue(value: unknown): JsonValue {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value\n }\n\n if (Array.isArray(value)) {\n return value.map(toJsonValue)\n }\n\n if (typeof value === 'object') {\n const objectValue = value as Record<string, unknown>\n const result: Record<string, JsonValue> = {}\n for (const [key, entry] of Object.entries(objectValue)) {\n if (entry !== undefined) {\n result[key] = toJsonValue(entry)\n }\n }\n return result\n }\n\n throw new TypeError(`Value is not JSON-serializable: ${typeof value}`)\n}\n\nfunction toJsonObject(value: unknown): JsonObject {\n const normalized = toJsonValue(value)\n if (normalized === null || Array.isArray(normalized) || typeof normalized !== 'object') {\n throw new TypeError('Value is not a JSON object')\n }\n return normalized\n}\n\nexport function createUniversalRouterDeferredAction(input: {\n readonly id: string\n readonly data: UniversalRouterMaterializationData\n readonly intent?: TransactionIntent\n}): DeferredContractCallAction {\n return createDeferredContractCallAction({\n id: input.id,\n materialization: {\n kind: UNIVERSAL_ROUTER_MATERIALIZATION_KIND,\n data: toJsonObject(input.data),\n },\n ...(input.intent !== undefined ? { intent: input.intent } : {}),\n })\n}\n","import type { RouterRoute } from '@sun-protocol/sun-sdk-api'\nimport type { ChainConfig } from '@sun-protocol/sun-sdk-chains'\nimport {\n SDKError,\n createContractCallAction,\n type ContractCallAction,\n type Network,\n} from '@sun-protocol/sun-sdk-core'\nimport {\n Address,\n TradePlanner,\n parseRouteAPIResponse,\n PoolType,\n PoolVersion,\n type Permit2Signature,\n type RouteData,\n} from '@sun-protocol/universal-router-sdk'\nimport type { TronAddress } from '@sun-protocol/sun-sdk-core'\nimport { computeV3PoolAddress } from '@sun-protocol/sun-sdk-sunswap-v3'\nimport { normalizeTronAddress } from './tokens.js'\nimport type { TransferSource, UsdtTransferContext } from '../usdt-transfer.js'\nimport { normalizeFeeLimit } from '../common.js'\nimport { DEFAULT_UNIVERSAL_ROUTER_SWAP_FEE_LIMIT } from '../swap/fee-limit.js'\n\nexport interface BuildUniversalRouterSwapActionInput {\n readonly network: Network\n readonly chain: ChainConfig\n readonly route: RouterRoute\n readonly slippageBips: bigint\n readonly deadline: string\n readonly recipient?: TronAddress\n readonly permit?: Permit2Signature\n readonly feeLimit?: number\n}\n\nfunction requireString(route: RouterRoute, key: keyof RouteData): string {\n const value = route[key]\n if (typeof value !== 'string') {\n throw new SDKError('SDK_INVALID_ARGUMENT', `Router route is missing ${String(key)}`, { key, route })\n }\n return value\n}\n\nfunction requireStringArray(route: RouterRoute, key: keyof RouteData): string[] {\n const value = route[key]\n if (!Array.isArray(value) || !value.every((item) => typeof item === 'string')) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `Router route is missing ${String(key)}`, { key, route })\n }\n return value\n}\n\nfunction normalizePoolKey(poolKey: unknown): RouteData['poolKeys'][number] {\n if (poolKey === null || poolKey === undefined) {\n return null\n }\n if (typeof poolKey !== 'object') {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Router route poolKey must be an object or null', { poolKey })\n }\n\n const value = poolKey as Record<string, unknown>\n const token0 = value.token0 ?? value.currency0\n const token1 = value.token1 ?? value.currency1\n if (\n typeof token0 !== 'string' ||\n typeof token1 !== 'string' ||\n typeof value.hooks !== 'string' ||\n typeof value.fee !== 'number' ||\n typeof value.parameters !== 'string'\n ) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Router route poolKey has invalid fields', { poolKey })\n }\n\n return {\n token0,\n token1,\n hooks: value.hooks,\n fee: value.fee,\n parameters: value.parameters,\n }\n}\n\nfunction normalizeRouteData(route: RouterRoute): RouteData {\n const poolKeysRaw = route.poolKeys\n if (!Array.isArray(poolKeysRaw)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Router route is missing poolKeys', { route })\n }\n\n return {\n amountIn: requireString(route, 'amountIn'),\n amountInRaw: requireString(route, 'amountInRaw'),\n amountOut: requireString(route, 'amountOut'),\n amountOutRaw: requireString(route, 'amountOutRaw'),\n amountOutMinimum: typeof route.amountOutMinimum === 'string' ? route.amountOutMinimum : '0',\n amountOutMinimumRaw: typeof route.amountOutMinimumRaw === 'string' ? route.amountOutMinimumRaw : '0',\n inUsd: typeof route.inUsd === 'string' ? route.inUsd : '0',\n outUsd: typeof route.outUsd === 'string' ? route.outUsd : '0',\n impact: typeof route.impact === 'string' ? route.impact : '0',\n fee: typeof route.fee === 'string' ? route.fee : '0',\n containsUnverifiedHook: route.containsUnverifiedHook === true,\n tokens: requireStringArray(route, 'tokens'),\n symbols: requireStringArray(route, 'symbols'),\n poolFees: requireStringArray(route, 'poolFees'),\n poolVersions: requireStringArray(route, 'poolVersions'),\n poolKeys: poolKeysRaw.map(normalizePoolKey),\n stepAmountsOut: requireStringArray(route, 'stepAmountsOut'),\n ...(typeof route.amountInReferralBips === 'number' ? { amountInReferralBips: route.amountInReferralBips } : {}),\n ...(typeof route.amountOutReferralBips === 'number' ? { amountOutReferralBips: route.amountOutReferralBips } : {}),\n }\n}\n\nfunction routeStartsWithNativeTrx(chain: ChainConfig, route: RouteData): boolean {\n return route.tokens[0] === chain.contracts.trx\n}\n\nexport function buildUniversalRouterSwapAction(input: BuildUniversalRouterSwapActionInput): ContractCallAction {\n const routeData = normalizeRouteData(input.route)\n const hops = routeData.poolVersions.length\n if (hops === 0 || routeData.tokens.length !== hops + 1 || routeData.poolFees.length < hops ||\n routeData.poolVersions.some((version) => !Object.values(PoolVersion).includes(version as PoolVersion))) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Router route has inconsistent hop data')\n }\n routeData.tokens = routeData.tokens.map((token) => normalizeTronAddress(token))\n const swapTradeRoute = parseRouteAPIResponse(routeData, input.network === 'nile', {\n slippageBips: input.slippageBips,\n })\n if (input.recipient) {\n swapTradeRoute.recipient = new Address(input.recipient)\n }\n const tradePlanner = new TradePlanner([swapTradeRoute], false, {\n permitOptions: input.permit\n ? { permitEnabled: true, permit: input.permit }\n : { permitEnabled: false },\n })\n\n tradePlanner.encode()\n\n const usdtAddress = input.chain.contracts.usdt\n const sources = new Map<string, TransferSource>()\n swapTradeRoute.pools.forEach((pool, index) => {\n if (pool.type !== PoolType.V3 || routeData.tokens[index + 1] !== usdtAddress) return\n const address = computeV3PoolAddress({\n network: input.network,\n tokenA: routeData.tokens[index]!,\n tokenB: usdtAddress,\n fee: pool.fee,\n factory: input.chain.contracts.sunswapV3Factory,\n wrappedNative: input.chain.contracts.wtrx,\n })\n sources.set(address, { address, role: 'v3-pool' })\n })\n const usdtTransfer: UsdtTransferContext = {\n network: input.network, transfersUsdt: sources.size > 0, sources: [...sources.values()],\n }\n\n return createContractCallAction({\n id: 'universal-router-swap',\n target: input.chain.contracts.universalRouter,\n functionSelector: 'execute(bytes,bytes[],uint256)',\n parameters: [\n { type: 'bytes', value: tradePlanner.commands },\n { type: 'bytes[]', value: tradePlanner.inputs },\n { type: 'uint256', value: input.deadline },\n ],\n ...(routeStartsWithNativeTrx(input.chain, routeData) ? { callValue: BigInt(routeData.amountInRaw) } : {}),\n feeLimit: normalizeFeeLimit(input.feeLimit, DEFAULT_UNIVERSAL_ROUTER_SWAP_FEE_LIMIT),\n metadata: { usdtTransfer },\n })\n}\n","import { getWrappedNativeAddress } from '@sun-protocol/sun-sdk-chains'\nimport {\n Percent,\n SDKError,\n TRON_ZERO_ADDRESS,\n Token,\n assertTronAddress,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport {\n evmHexToTronAddress as evmHexToTronAddressV2,\n tronAddressToEvmHex,\n} from '@sun-protocol/sun-sdk-sunswap-v2'\nimport type { ProtocolsContext } from '../context.js'\nimport type { SlippageInput } from '../types/common.js'\n\nconst PERCENT_PATTERN = /^(\\d+)(?:\\.(\\d+))?%$/\n\nexport type ProtocolTokenKind = 'native' | 'token'\n\nexport interface ProtocolToken {\n readonly kind: ProtocolTokenKind\n readonly input: string\n readonly contractAddress: TronAddress\n readonly wrappedContractAddress: TronAddress\n readonly token: Token\n}\n\nexport function isNativeTrxInput(context: ProtocolsContext, token: string): boolean {\n return token.toUpperCase() === 'TRX' || token === context.chain.contracts.trx\n}\n\nexport function evmHexToTronAddress(address: string, label = 'address'): TronAddress {\n const normalized = address.startsWith('0x') ? address.toLowerCase() : `0x${address.toLowerCase()}`\n return evmHexToTronAddressV2(normalized, label)\n}\n\nexport function tronAddressToEvmAddress(address: TronAddress | string, label = 'address'): `0x${string}` {\n return `0x${tronAddressToEvmHex(assertTronAddress(address, label))}`\n}\n\n/** Canonical address for comparing configured tokens with decoded contract results. */\nexport function normalizeTronAddress(address: string, label = 'address'): TronAddress {\n if (/^41[0-9a-fA-F]{40}$/.test(address)) return evmHexToTronAddress(`0x${address.slice(2)}`, label)\n if (/^0x[0-9a-fA-F]{40}$/.test(address)) return evmHexToTronAddress(address, label)\n return evmHexToTronAddress(tronAddressToEvmAddress(address, label), label)\n}\n\nexport function normalizeProtocolToken(\n context: ProtocolsContext,\n token: string,\n label: string,\n metadata: { readonly decimals?: number; readonly symbol?: string; readonly name?: string } = {},\n): ProtocolToken {\n const wrappedContractAddress = getWrappedNativeAddress(context.network)\n const kind: ProtocolTokenKind = isNativeTrxInput(context, token) ? 'native' : 'token'\n const contractAddress = kind === 'native' ? TRON_ZERO_ADDRESS : assertTronAddress(token, label)\n const mathAddress = kind === 'native' ? wrappedContractAddress : contractAddress\n const evmAddress = `0x${tronAddressToEvmHex(mathAddress)}`.toLowerCase()\n\n return {\n kind,\n input: token,\n contractAddress,\n wrappedContractAddress,\n token: new Token(\n context.chain.uniswapChainId,\n evmAddress,\n metadata.decimals ?? 6,\n metadata.symbol,\n metadata.name,\n true,\n ),\n }\n}\n\nfunction parseLiquidityPercentageInput(value: SlippageInput | Percent, label: string): Percent {\n if (value instanceof Percent) return value\n\n const match = PERCENT_PATTERN.exec(value)\n if (!match) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${label} must be a percentage string`, {\n label,\n percentage: value,\n })\n }\n\n const whole = match[1] ?? '0'\n const fraction = match[2] ?? ''\n const scale = 10n ** BigInt(fraction.length)\n const percentageUnits = BigInt(whole) * scale + BigInt(fraction || '0')\n return new Percent(percentageUnits.toString(), (100n * scale).toString())\n}\n\nexport function normalizeLiquidityPercentage(value: SlippageInput | Percent, label: string): Percent {\n const percent = parseLiquidityPercentageInput(value, label)\n if (percent.equalTo(0)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${label} must be greater than 0%`, {\n label,\n percentage: percent.toSignificant(),\n })\n }\n if (percent.greaterThan(1)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${label} must be at most 100%`, {\n label,\n percentage: percent.toSignificant(),\n })\n }\n return percent\n}\n","import {\n Percent,\n SDKError,\n assertTronAddress,\n type BigintIsh,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport type { ProtocolsContext } from './context.js'\nimport { requireWalletAddress } from './context.js'\nimport type {\n PlanTimingOptions,\n SlippageInput,\n} from './types/common.js'\n\nconst PERCENT_PATTERN = /^(\\d+)(?:\\.(\\d+))?%$/\nconst BASE_UNIT_PATTERN = /^\\d+$/\n\nexport function parseSlippage(value: SlippageInput): Percent {\n if (value instanceof Percent) {\n validateSlippage(value)\n return value\n }\n\n const match = PERCENT_PATTERN.exec(value)\n if (!match) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Slippage must be a percentage string', {\n slippage: value,\n })\n }\n\n const whole = match[1] ?? '0'\n const fraction = match[2] ?? ''\n const scale = 10n ** BigInt(fraction.length)\n const percentageUnits = BigInt(whole) * scale + BigInt(fraction || '0')\n const percent = new Percent(percentageUnits.toString(), (100n * scale).toString())\n validateSlippage(percent)\n return percent\n}\n\nexport function validateSlippage(value: Percent): void {\n if (value.lessThan(0) || value.greaterThan(1)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Slippage must be between 0% and 100%', {\n slippage: value.toSignificant(),\n })\n }\n}\n\nexport function slippageToBips(value: SlippageInput): number {\n const percent = parseSlippage(value)\n const numerator = BigInt(percent.numerator.toString()) * 10_000n\n const denominator = BigInt(percent.denominator.toString())\n if (numerator % denominator !== 0n) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Slippage must resolve to a whole basis point', {\n slippage: typeof value === 'string' ? value : value.toSignificant(),\n })\n }\n return Number(numerator / denominator)\n}\n\nexport function applySlippageMin(expected: bigint, slippageBips: number): bigint {\n return (expected * BigInt(10_000 - slippageBips)) / 10_000n\n}\n\nexport function applySlippageMax(expected: bigint, slippageBips: number): bigint {\n const numerator = expected * BigInt(10_000 + slippageBips)\n return (numerator + 9_999n) / 10_000n\n}\n\nexport function normalizeBaseUnitAmount(\n value: BigintIsh,\n label = 'amount',\n options: { allowZero?: boolean } = {},\n): string {\n if (typeof value === 'number' && !Number.isSafeInteger(value)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${label} must be a safe integer`, {\n label,\n value,\n })\n }\n const text = value.toString()\n if (!BASE_UNIT_PATTERN.test(text)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${label} must be an unsigned base-unit integer`, {\n label,\n value: text,\n })\n }\n\n const amount = BigInt(text)\n if (options.allowZero ? amount < 0n : amount <= 0n) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${label} must be ${options.allowZero ? 'non-negative' : 'positive'}`, {\n label,\n value: text,\n })\n }\n return amount.toString()\n}\n\nexport function normalizeDeadline(\n context: ProtocolsContext,\n options: PlanTimingOptions = {},\n): string {\n if (options.deadline !== undefined) {\n return normalizeBaseUnitAmount(options.deadline, 'deadline')\n }\n\n const ttlSeconds = options.ttlSeconds ?? 1_200\n if (!Number.isSafeInteger(ttlSeconds) || ttlSeconds <= 0) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'ttlSeconds must be a positive safe integer', {\n ttlSeconds,\n })\n }\n\n return (BigInt(Math.floor(context.now() / 1_000)) + BigInt(ttlSeconds)).toString()\n}\n\nexport function normalizeTransactionValidForSeconds(value: number | undefined): number {\n const transactionValidForSeconds = value ?? 1_200\n if (!Number.isSafeInteger(transactionValidForSeconds) || transactionValidForSeconds <= 0) {\n throw new SDKError(\n 'SDK_INVALID_ARGUMENT',\n 'transactionValidForSeconds must be a positive safe integer',\n { transactionValidForSeconds },\n )\n }\n return transactionValidForSeconds\n}\n\nexport function normalizeFeeLimit(value: number | undefined, defaultValue: number): number {\n const feeLimit = value ?? defaultValue\n if (!Number.isSafeInteger(feeLimit) || feeLimit <= 0) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'feeLimit must be a positive safe integer in sun', {\n feeLimit,\n })\n }\n return feeLimit\n}\n\nexport async function resolveTransactionDeadline(\n context: ProtocolsContext,\n transactionValidForSeconds: number,\n): Promise<string> {\n const nowSeconds = BigInt(Math.ceil(await context.getTransactionTime() / 1_000))\n return (nowSeconds + BigInt(transactionValidForSeconds)).toString()\n}\n\nexport async function normalizeRecipient(\n context: ProtocolsContext,\n recipient: TronAddress | string | undefined,\n operation: string,\n walletAddress?: TronAddress,\n): Promise<TronAddress> {\n if (recipient !== undefined) return assertTronAddress(recipient, 'recipient')\n if (walletAddress !== undefined) return walletAddress\n return requireWalletAddress(context, operation)\n}\n\nexport function nextPlanId(context: ProtocolsContext, prefix: string): string {\n return `${prefix}-${context.idFactory()}`\n}\n","export const DEFAULT_WTRX_SWAP_FEE_LIMIT = 1_000_000_000\nexport const DEFAULT_UNIVERSAL_ROUTER_SWAP_FEE_LIMIT = 500_000_000\nexport const DEFAULT_PSM_SWAP_FEE_LIMIT = 250_000_000\nexport const DEFAULT_PSM_APPROVAL_FEE_LIMIT = 1_000_000_000\n","import { SDKError, type ContractCallAction, type Network, type TronAddress } from '@sun-protocol/sun-sdk-core'\nimport type { ContractRead } from '@sun-protocol/sun-sdk-runtime'\nimport type { ProtocolsContext } from './context.js'\nimport { normalizeTronAddress } from './internal/tokens.js'\n\nexport interface UsdtReader {\n paused(): Promise<boolean>\n isBlackListed(address: string): Promise<boolean>\n}\n\nexport interface TransferSource {\n readonly address: string\n readonly role: 'v3-pool' | 'position-manager'\n}\n\nexport type UsdtTransferValidationResult =\n | { readonly status: 'allowed' }\n | { readonly status: 'blocked'; readonly reason: 'USDT_PAUSED' }\n | { readonly status: 'blocked'; readonly reason: 'USDT_SOURCE_BLACKLISTED'; readonly sources: readonly TransferSource[] }\n | { readonly status: 'unknown'; readonly reason: 'MISSING_TRANSFER_SOURCE' | 'CHECK_FAILED' }\n\n/** Applies the USDT paused/blacklist check. Unknown results never authorize submission. */\nexport async function usdtValidateTransfer(input: {\n readonly reader: UsdtReader\n readonly transfersUsdt: boolean\n readonly sources: readonly TransferSource[]\n}): Promise<UsdtTransferValidationResult> {\n if (input.transfersUsdt === false) return { status: 'allowed' }\n if (input.transfersUsdt !== true) return { status: 'unknown', reason: 'CHECK_FAILED' }\n if (input.sources.length === 0) return { status: 'unknown', reason: 'MISSING_TRANSFER_SOURCE' }\n\n try {\n const paused = await input.reader.paused()\n if (typeof paused !== 'boolean') throw new Error('Invalid paused result')\n if (paused) return { status: 'blocked', reason: 'USDT_PAUSED' }\n\n const sources = new Map<string, TransferSource>()\n for (const source of input.sources) {\n const address = normalizeTronAddress(source.address)\n sources.set(address, { ...source, address })\n }\n const checks = await Promise.all([...sources.values()].map(async (source) => {\n const blacklisted = await input.reader.isBlackListed(source.address)\n if (typeof blacklisted !== 'boolean') throw new Error('Invalid blacklist result')\n return { source, blacklisted }\n }))\n const blocked = checks.filter((check) => check.blacklisted).map((check) => check.source)\n return blocked.length > 0\n ? { status: 'blocked', reason: 'USDT_SOURCE_BLACKLISTED', sources: blocked }\n : { status: 'allowed' }\n } catch {\n return { status: 'unknown', reason: 'CHECK_FAILED' }\n }\n}\n\n/** Static facts about an SDK-built action; never stores a previous check result. */\nexport interface UsdtTransferContext {\n readonly network: Network\n readonly transfersUsdt: boolean\n readonly sources: readonly TransferSource[]\n}\n\nfunction parseTransferContext(context: ProtocolsContext, action: ContractCallAction): UsdtTransferContext {\n const data = action.metadata?.usdtTransfer as Partial<UsdtTransferContext> | undefined\n if (!data) throw new Error('Missing USDT transfer context')\n if (data.network !== context.network ||\n typeof data.transfersUsdt !== 'boolean' || !Array.isArray(data.sources)) {\n throw new Error('Invalid USDT transfer context; rebuild the plan')\n }\n const sources = data.sources.map((source: TransferSource) => {\n if (!source || typeof source.address !== 'string' ||\n (source.role !== 'v3-pool' && source.role !== 'position-manager')) {\n throw new Error('Invalid USDT transfer source')\n }\n const address = normalizeTronAddress(source.address)\n if (source.role === 'position-manager' && address !== normalizeTronAddress(action.target)) {\n throw new Error('USDT sweep source does not match the position manager')\n }\n return { address, role: source.role }\n })\n if (!data.transfersUsdt && sources.length > 0) throw new Error('Unexpected USDT sources')\n return { network: context.network, transfersUsdt: data.transfersUsdt, sources }\n}\n\nfunction boolRead(target: TronAddress, name: 'paused' | 'isBlackListed', address?: string): ContractRead {\n return {\n target,\n functionSelector: name === 'paused' ? 'paused()' : 'isBlackListed(address)',\n parameters: address === undefined ? [] : [{ type: 'address', value: address }],\n abiFunction: {\n type: 'function', name, stateMutability: 'view',\n inputs: name === 'paused' ? [] : [{ name: '_user', type: 'address' }],\n outputs: [{ name: '', type: 'bool' }],\n },\n }\n}\n\n/** Internal execution guard, shared by the two protocol-specific executors. */\nexport async function assertUsdtTransfer(context: ProtocolsContext, action: ContractCallAction): Promise<void> {\n let result: UsdtTransferValidationResult\n if (!action.metadata?.usdtTransfer) {\n result = { status: 'unknown', reason: 'MISSING_TRANSFER_SOURCE' }\n } else {\n try {\n const data = parseTransferContext(context, action)\n if (data.transfersUsdt && !data.sources.some((source) => source.role === 'v3-pool')) {\n result = { status: 'unknown', reason: 'MISSING_TRANSFER_SOURCE' }\n } else {\n const read = (name: 'paused' | 'isBlackListed', address?: string) => {\n if (!context.runtime) throw new Error('USDT transfer validation requires a runtime')\n return context.runtime.readContract<boolean>(boolRead(context.chain.contracts.usdt, name, address))\n }\n result = await usdtValidateTransfer({\n ...data,\n reader: { paused: () => read('paused'), isBlackListed: (address) => read('isBlackListed', address) },\n })\n }\n } catch {\n result = { status: 'unknown', reason: 'CHECK_FAILED' }\n }\n }\n if (result.status === 'allowed') return\n throw new SDKError(\n result.status === 'blocked' ? 'SDK_USDT_TRANSFER_BLOCKED' : 'SDK_USDT_TRANSFER_UNKNOWN',\n result.status === 'blocked' ? 'USDT transfer is currently restricted' : 'Unable to verify USDT transfer status',\n { ...result, usdtAddress: context.chain.contracts.usdt, actionId: action.id },\n )\n}\n","import {\n SDKError,\n assertTronAddress,\n createContractCallAction,\n formatUnits,\n type TransactionAction,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport {\n nextPlanId,\n normalizeFeeLimit,\n normalizeRecipient,\n normalizeTransactionValidForSeconds,\n slippageToBips,\n} from '../common.js'\nimport { requireWalletSnapshot, type ProtocolsContext } from '../context.js'\nimport { planRouterPermit2Authorization } from '../approval/permit2.js'\nimport { createUniversalRouterDeferredAction } from '../internal/router-action.js'\nimport type { TransactionPlan } from '../types/plan.js'\nimport type {\n RouterSwapQuote,\n SwapRouterPlanInput,\n WtrxSwapQuote,\n WtrxSwapRoute,\n} from './types.js'\nimport { isNativeTrxToken } from './tokens.js'\nimport {\n DEFAULT_UNIVERSAL_ROUTER_SWAP_FEE_LIMIT,\n DEFAULT_WTRX_SWAP_FEE_LIMIT,\n} from './fee-limit.js'\nimport {\n attachApprovalIntent,\n routerRouteSymbols,\n swapIntentScope,\n UNIVERSAL_ROUTER_PROTOCOL_ID,\n WTRX_PROTOCOL_ID,\n} from './intents.js'\n\nfunction stringifyRoute(route: unknown): string | undefined {\n try {\n return JSON.stringify(route)\n } catch {\n return undefined\n }\n}\n\nfunction findSelectedRouteIndex(quote: RouterSwapQuote, route: SwapRouterPlanInput['route']): number {\n const serializedRoute = stringifyRoute(route)\n return quote.routes.findIndex((candidate) => {\n if (candidate === route) return true\n if (serializedRoute === undefined) return false\n return stringifyRoute(candidate) === serializedRoute\n })\n}\n\nfunction isWtrxRoute(route: unknown): route is WtrxSwapRoute {\n return typeof route === 'object' &&\n route !== null &&\n ((route as { type?: unknown }).type === 'WTRX_WRAP' || (route as { type?: unknown }).type === 'WTRX_UNWRAP')\n}\n\nexport function buildWtrxSwapPlan(\n context: ProtocolsContext,\n quote: WtrxSwapQuote,\n route: WtrxSwapRoute,\n owner: TronAddress,\n feeLimit?: number,\n): TransactionPlan {\n if (stringifyRoute(route) !== stringifyRoute(quote.route)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Selected WTRX route must come from the quote', {\n quoteRoute: quote.route,\n route,\n })\n }\n\n const resolvedFeeLimit = normalizeFeeLimit(feeLimit, DEFAULT_WTRX_SWAP_FEE_LIMIT)\n const intent = {\n kind: quote.action,\n scope: swapIntentScope(WTRX_PROTOCOL_ID, quote.action),\n amount: formatUnits(BigInt(quote.amountIn), context.chain.nativeCurrency.decimals),\n } as const\n const transaction = quote.action === 'wrap'\n ? createContractCallAction({\n id: `${nextPlanId(context, 'swap-wtrx')}-wrap`,\n target: context.chain.contracts.wtrx,\n functionSelector: 'deposit()',\n parameters: [],\n callValue: BigInt(quote.amountIn),\n feeLimit: resolvedFeeLimit,\n intent,\n })\n : createContractCallAction({\n id: `${nextPlanId(context, 'swap-wtrx')}-unwrap`,\n target: context.chain.contracts.wtrx,\n functionSelector: 'withdraw(uint256)',\n parameters: [{ type: 'uint256', value: quote.amountIn }],\n feeLimit: resolvedFeeLimit,\n intent,\n })\n\n return {\n id: nextPlanId(context, 'swap-wtrx'),\n kind: 'swap',\n network: context.network,\n owner,\n summary: {\n title: quote.action === 'wrap' ? 'Wrap TRX' : 'Unwrap WTRX',\n lines: [`Amount ${quote.amountIn}`],\n },\n approvals: [],\n transactions: [transaction],\n metadata: {\n protocol: 'wtrx',\n action: quote.action,\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n tokenIn: quote.tokenIn,\n tokenOut: quote.tokenOut,\n feeLimit: resolvedFeeLimit,\n },\n }\n}\n\nexport async function planRouterSwap(\n context: ProtocolsContext,\n input: SwapRouterPlanInput,\n): Promise<TransactionPlan> {\n const { wallet, address: owner } = await requireWalletSnapshot(context, 'Router swap plan')\n if (input.quote.kind === 'wtrx') {\n if (!isWtrxRoute(input.route)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'WTRX swap planning requires a WTRX route')\n }\n return buildWtrxSwapPlan(context, input.quote, input.route, owner, input.feeLimit)\n }\n\n const selectedRouteIndex = findSelectedRouteIndex(input.quote, input.route)\n if (selectedRouteIndex < 0) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Selected route must come from quote.routes', {\n routeCount: input.quote.routes.length,\n tokenIn: input.quote.tokenIn,\n tokenOut: input.quote.tokenOut,\n amountIn: input.quote.amountIn,\n })\n }\n const selectedRoute = input.quote.routes[selectedRouteIndex]\n if (!selectedRoute) {\n throw new SDKError('SDK_RUNTIME_ERROR', 'Selected router route could not be resolved after validation', {\n selectedRouteIndex,\n routeCount: input.quote.routes.length,\n })\n }\n const symbols = routerRouteSymbols(selectedRoute)\n const intentScope = swapIntentScope(UNIVERSAL_ROUTER_PROTOCOL_ID)\n\n const recipient = await normalizeRecipient(context, input.recipient, 'Router swap recipient', owner)\n const transactionValidForSeconds = normalizeTransactionValidForSeconds(input.transactionValidForSeconds)\n const slippageBips = slippageToBips(input.slippage ?? '0.5%')\n const feeLimit = normalizeFeeLimit(input.feeLimit, DEFAULT_UNIVERSAL_ROUTER_SWAP_FEE_LIMIT)\n\n const tokenIn = input.quote.tokenIn\n const approvals: TransactionAction[] = []\n let signatureActionId: string | undefined\n let permitSingle: unknown\n\n if (!isNativeTrxToken(context, tokenIn)) {\n const authorization = await planRouterPermit2Authorization(context, {\n owner,\n token: assertTronAddress(tokenIn, 'tokenIn'),\n amount: input.quote.amountIn,\n approval: input.approval ?? 'auto',\n approveAmountType: 'max',\n walletCapabilities: wallet.capabilities,\n })\n approvals.push(...attachApprovalIntent(authorization.actions, intentScope, symbols.from))\n signatureActionId = authorization.signatureActionId\n permitSingle = authorization.permitSingle\n }\n\n const transaction = createUniversalRouterDeferredAction({\n id: `${nextPlanId(context, 'swap-router')}-execute`,\n data: {\n network: context.network,\n route: selectedRoute,\n slippageBips: slippageBips.toString(),\n transactionValidForSeconds,\n recipient,\n feeLimit,\n ...(signatureActionId ? { signatureActionId } : {}),\n ...(permitSingle ? { permitSingle: permitSingle as never } : {}),\n },\n intent: {\n kind: 'swap',\n scope: intentScope,\n from: { value: selectedRoute.amountIn, symbol: symbols.from },\n to: { value: selectedRoute.amountOut, symbol: symbols.to },\n ...(input.recipient === undefined ? {} : { recipient }),\n },\n })\n\n return {\n id: nextPlanId(context, 'swap-router'),\n kind: 'swap',\n network: context.network,\n owner,\n summary: {\n title: 'Swap with Universal Router',\n lines: [`Spend ${selectedRoute.amountIn}`, `Expected output ${selectedRoute.amountOut}`],\n },\n approvals,\n transactions: [transaction],\n metadata: {\n protocol: 'universal-router',\n selectedRouteIndex,\n tokenIn: input.quote.tokenIn,\n tokenOut: input.quote.tokenOut,\n amountIn: selectedRoute.amountInRaw,\n amountOut: selectedRoute.amountOutRaw,\n amountInFormatted: selectedRoute.amountIn,\n amountOutFormatted: selectedRoute.amountOut,\n slippageBips,\n recipient,\n transactionValidForSeconds,\n feeLimit,\n },\n }\n}\n","import {\n SDKError,\n assertTronAddress,\n createTypedDataSignatureAction,\n type TransactionAction,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport type { WalletCapabilities } from '@sun-protocol/sun-sdk-runtime'\nimport { nextPlanId, normalizeDeadline } from '../common.js'\nimport { requireRuntime, type ProtocolsContext } from '../context.js'\nimport {\n buildPermit2AllowanceRead,\n buildPermit2HelperRead,\n buildPermit2ApproveAction,\n buildPermit2TypedData,\n normalizePermit2Allowance,\n normalizePermit2HelperResult,\n} from '../internal/permit2-adapter.js'\nimport type { ApprovalMode } from '../types/options.js'\nimport { planApproval } from './plan.js'\n\nexport interface RouterPermit2AuthorizationInput {\n readonly owner: TronAddress\n readonly token: TronAddress\n readonly spender?: TronAddress\n readonly amount: string\n readonly approval: ApprovalMode\n readonly ttlSeconds?: number\n readonly deadline?: string | number | bigint\n readonly walletCapabilities?: WalletCapabilities\n /** Shared allowance mode for the ERC20 and Permit2 approval steps. Defaults to the requested amount. */\n readonly approveAmountType?: 'exact' | 'max'\n}\n\nexport interface RouterPermit2AuthorizationPlan {\n readonly actions: readonly TransactionAction[]\n readonly signatureActionId?: string\n readonly permitSingle?: unknown\n readonly mode: 'none' | 'typed-data' | 'on-chain' | 'already-approved'\n}\n\nasync function hasTypedDataCapability(\n context: ProtocolsContext,\n capabilities: WalletCapabilities | undefined,\n): Promise<boolean> {\n if (capabilities) return capabilities.signTypedData\n return (await context.runtime?.getWallet())?.capabilities.signTypedData === true\n}\n\nfunction normalizePlanDeadlineValue(value: string | number | bigint): string | number {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\nconst MAX_UINT160 = '1461501637330902918203684832716283019655932542975'\n\nexport async function planRouterPermit2Authorization(\n context: ProtocolsContext,\n input: RouterPermit2AuthorizationInput,\n): Promise<RouterPermit2AuthorizationPlan> {\n if (input.approval === 'none') {\n return { actions: [], mode: 'none' }\n }\n\n const helper = context.chain.contracts.permit2Helper\n if (!helper) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `Permit2Helper is not configured for ${context.network}`, {\n network: context.network,\n contract: 'permit2Helper',\n })\n }\n const runtime = requireRuntime(context, 'Router Permit2 authorization')\n const actions: TransactionAction[] = []\n const token = assertTronAddress(input.token, 'token')\n const spender = input.spender\n ? assertTronAddress(input.spender, 'spender')\n : context.chain.contracts.universalRouter\n\n const tokenApproval = await planApproval(context, {\n asset: { type: 'token', token },\n owner: input.owner,\n spender: context.chain.contracts.permit2,\n amount: input.amount,\n }, {\n mode: 'auto',\n amount: input.approveAmountType ?? 'exact',\n })\n actions.push(...tokenApproval.actions)\n\n const approved = normalizePermit2HelperResult(await runtime.readContract(buildPermit2HelperRead({\n helper,\n permit2: context.chain.contracts.permit2,\n owner: input.owner,\n token,\n spender,\n amount: input.amount,\n })))\n const permit2Amount = input.approveAmountType === 'max'\n ? MAX_UINT160\n : input.amount\n\n if (approved) {\n return { actions, mode: 'already-approved' }\n }\n\n const expiration = normalizeDeadline(context, {\n ttlSeconds: input.ttlSeconds ?? 30 * 24 * 60 * 60,\n ...(input.deadline !== undefined\n ? { deadline: normalizePlanDeadlineValue(input.deadline) }\n : {}),\n }).toString()\n const sigDeadline = normalizeDeadline(context, { ttlSeconds: 3_600 }).toString()\n\n if (\n (input.approval === 'auto' || input.approval === 'permit2') &&\n await hasTypedDataCapability(context, input.walletCapabilities)\n ) {\n // Only signature construction needs the nonce; approval validity comes from the helper.\n const allowance = normalizePermit2Allowance(await runtime.readContract(buildPermit2AllowanceRead({\n permit2: context.chain.contracts.permit2,\n owner: input.owner,\n token,\n spender,\n })))\n const typedData = buildPermit2TypedData({\n network: context.network,\n permit2: context.chain.contracts.permit2,\n owner: input.owner,\n token,\n spender,\n amount: permit2Amount,\n expiration,\n sigDeadline,\n nonce: allowance.nonce.toString(),\n })\n const signatureActionId = `${nextPlanId(context, 'permit2')}-signature`\n actions.push(createTypedDataSignatureAction({\n id: signatureActionId,\n typedData,\n }))\n return {\n actions,\n signatureActionId,\n permitSingle: typedData.message,\n mode: 'typed-data',\n }\n }\n\n if (input.approval === 'permit2' || input.approval === 'auto' || input.approval === 'approve') {\n actions.push(buildPermit2ApproveAction({\n id: `${nextPlanId(context, 'permit2')}-approve`,\n permit2: context.chain.contracts.permit2,\n token,\n spender,\n amount: permit2Amount,\n expiration,\n }))\n return { actions, mode: 'on-chain' }\n }\n\n throw new SDKError(\n 'SDK_INVALID_ARGUMENT',\n 'Unsupported approval mode for Router Permit2 authorization',\n { approval: input.approval },\n )\n}\n","import {\n SDKError,\n createContractCallAction,\n type ContractCallAction,\n type Network,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport type { TypedDataPayload, ContractRead } from '@sun-protocol/sun-sdk-runtime'\nimport { PERMIT_TYPES, toEvmHex } from '@sun-protocol/permit2-sdk'\n\nconst PERMIT2_TYPED_DATA_CHAIN_IDS: Record<Network, number> = {\n mainnet: 728126428,\n nile: 3448148188,\n}\n\nexport interface Permit2Allowance {\n readonly amount: bigint\n readonly expiration: bigint\n readonly nonce: bigint\n}\n\n/** The helper evaluates allowance amount and expiration against chain state/time. */\nexport function buildPermit2HelperRead(input: {\n readonly helper: TronAddress\n readonly permit2: TronAddress\n readonly owner: TronAddress\n readonly token: TronAddress\n readonly spender: TronAddress\n readonly amount: string\n}): ContractRead {\n return {\n target: input.helper,\n functionSelector: 'checkPermit2Allowance(address,address,address,address,uint256)',\n parameters: [\n { type: 'address', value: input.permit2 },\n { type: 'address', value: input.token },\n { type: 'address', value: input.owner },\n { type: 'address', value: input.spender },\n { type: 'uint256', value: input.amount },\n ],\n outputs: [{ type: 'bool', name: 'approved' }],\n }\n}\n\nexport function normalizePermit2HelperResult(result: unknown): boolean {\n if (typeof result === 'boolean') return result\n if (Array.isArray(result) && result.length === 1 && typeof result[0] === 'boolean') return result[0]\n throw new SDKError('SDK_CONTRACT_ERROR', 'Invalid Permit2Helper approval result', { result })\n}\n\nexport function buildPermit2AllowanceRead(input: {\n readonly permit2: TronAddress\n readonly owner: TronAddress\n readonly token: TronAddress\n readonly spender: TronAddress\n}): ContractRead {\n return {\n target: input.permit2,\n functionSelector: 'allowance(address,address,address)',\n parameters: [\n { type: 'address', value: input.owner },\n { type: 'address', value: input.token },\n { type: 'address', value: input.spender },\n ],\n outputs: [\n { type: 'uint160', name: 'amount' },\n { type: 'uint48', name: 'expiration' },\n { type: 'uint48', name: 'nonce' },\n ],\n }\n}\n\nfunction bigintFrom(value: unknown, label: string): bigint {\n if (typeof value === 'bigint') return value\n if (typeof value === 'number' && Number.isSafeInteger(value)) return BigInt(value)\n if (typeof value === 'string' && /^[0-9]+$/.test(value)) return BigInt(value)\n throw new SDKError('SDK_CONTRACT_ERROR', `Invalid Permit2 allowance ${label}`, { value })\n}\n\nexport function normalizePermit2Allowance(result: unknown): Permit2Allowance {\n if (Array.isArray(result)) {\n return {\n amount: bigintFrom(result[0], 'amount'),\n expiration: bigintFrom(result[1], 'expiration'),\n nonce: bigintFrom(result[2], 'nonce'),\n }\n }\n\n if (typeof result === 'object' && result !== null) {\n const value = result as Record<string, unknown>\n return {\n amount: bigintFrom(value.amount ?? value[0], 'amount'),\n expiration: bigintFrom(value.expiration ?? value[1], 'expiration'),\n nonce: bigintFrom(value.nonce ?? value[2], 'nonce'),\n }\n }\n\n throw new SDKError('SDK_CONTRACT_ERROR', 'Invalid Permit2 allowance result', { result })\n}\n\nexport interface Permit2TypedDataInput {\n readonly network: Network\n readonly permit2: TronAddress\n readonly owner: TronAddress\n readonly token: TronAddress\n readonly spender: TronAddress\n readonly amount: string\n readonly expiration: string\n readonly sigDeadline: string\n readonly nonce: string\n}\n\nexport function buildPermit2TypedData(input: Permit2TypedDataInput): TypedDataPayload {\n return {\n primaryType: 'PermitSingle',\n domain: {\n name: 'Permit2',\n chainId: PERMIT2_TYPED_DATA_CHAIN_IDS[input.network],\n verifyingContract: toEvmHex(input.permit2),\n },\n types: PERMIT_TYPES,\n message: {\n details: {\n token: toEvmHex(input.token),\n amount: input.amount,\n expiration: input.expiration,\n nonce: input.nonce,\n },\n spender: toEvmHex(input.spender),\n sigDeadline: input.sigDeadline,\n },\n }\n}\n\nexport function buildPermit2ApproveAction(input: {\n readonly id: string\n readonly permit2: TronAddress\n readonly token: TronAddress\n readonly spender: TronAddress\n readonly amount: string\n readonly expiration: string\n}): ContractCallAction {\n return createContractCallAction({\n id: input.id,\n target: input.permit2,\n functionSelector: 'approve(address,address,uint160,uint48)',\n waitForReceipt: 'included',\n parameters: [\n { type: 'address', value: input.token },\n { type: 'address', value: input.spender },\n { type: 'uint160', value: input.amount },\n { type: 'uint48', value: input.expiration },\n ],\n })\n}\n","import { SDKError } from '@sun-protocol/sun-sdk-core'\nimport { normalizeBaseUnitAmount } from '../common.js'\nimport {\n requireRuntime,\n type ProtocolsContext,\n} from '../context.js'\nimport { checkClassicAllowance } from './check.js'\nimport { buildClassicApproveAction } from './classic.js'\nimport type {\n ApprovalPlanOptions,\n ApprovalPlanResult,\n ApprovalRequirement,\n} from './types.js'\n\n/** Plans a token approval without signing or broadcasting it. */\nexport async function planApproval(\n context: ProtocolsContext,\n requirement: ApprovalRequirement,\n options: ApprovalPlanOptions = {},\n): Promise<ApprovalPlanResult> {\n const mode = options.mode ?? 'auto'\n normalizeBaseUnitAmount(requirement.amount, 'approval amount')\n\n if (requirement.asset.type === 'native') {\n return {\n mode,\n requirement,\n allowance: requirement.amount,\n sufficient: true,\n actions: [],\n }\n }\n\n if (mode === 'none') {\n return { mode, requirement, actions: [] }\n }\n\n if (mode === 'permit2') {\n throw new SDKError(\n 'SDK_WALLET_CAPABILITY_ERROR',\n 'Permit2 approval is unavailable until a Permit2 adapter is configured',\n { mode, token: requirement.asset.token },\n )\n }\n\n const runtime = requireRuntime(context, 'Token allowance check')\n const check = await checkClassicAllowance(runtime, requirement)\n if (check.sufficient) {\n return {\n mode,\n requirement,\n allowance: check.allowance,\n sufficient: true,\n actions: [],\n }\n }\n\n const action = buildClassicApproveAction(requirement, options)\n return {\n mode,\n requirement,\n allowance: check.allowance,\n sufficient: false,\n actions: action ? [action] : [],\n }\n}\n","import type { Runtime } from '@sun-protocol/sun-sdk-runtime'\nimport type { ApprovalRequirement } from './types.js'\n\nexport async function readClassicAllowance(\n runtime: Runtime,\n requirement: ApprovalRequirement,\n): Promise<string> {\n if (requirement.asset.type === 'native') return '0'\n const result = await runtime.readContract<string | number | bigint>({\n target: requirement.asset.token,\n functionSelector: 'allowance(address,address)',\n parameters: [\n { type: 'address', value: requirement.owner },\n { type: 'address', value: requirement.spender },\n ],\n outputs: [{ type: 'uint256', name: 'allowance' }],\n })\n return BigInt(result).toString()\n}\n\nexport async function checkClassicAllowance(\n runtime: Runtime,\n requirement: ApprovalRequirement,\n): Promise<{ allowance: string; sufficient: boolean }> {\n if (requirement.asset.type === 'native') {\n return { allowance: requirement.amount, sufficient: true }\n }\n const allowance = await readClassicAllowance(runtime, requirement)\n return {\n allowance,\n sufficient: BigInt(allowance) >= BigInt(requirement.amount),\n }\n}\n","import {\n MaxUint256,\n createApproveAction,\n type ContractCallAction,\n} from '@sun-protocol/sun-sdk-core'\nimport type {\n ApprovalPlanOptions,\n ApprovalRequirement,\n} from './types.js'\n\nexport function buildClassicApproveAction(\n requirement: ApprovalRequirement,\n options: Pick<ApprovalPlanOptions, 'amount' | 'feeLimit'> = {},\n): ContractCallAction | undefined {\n if (requirement.asset.type === 'native') return undefined\n return createApproveAction({\n id: `approve-${requirement.asset.token}-${requirement.spender}`,\n target: requirement.asset.token,\n spender: requirement.spender,\n amount: options.amount === 'exact'\n ? requirement.amount\n : MaxUint256.toString(),\n ...(options.feeLimit !== undefined ? { feeLimit: options.feeLimit } : {}),\n })\n}\n","import { SDKError, assertTronAddress, type TronAddress } from '@sun-protocol/sun-sdk-core'\nimport { normalizeBaseUnitAmount } from '../common.js'\nimport type { ProtocolsContext } from '../context.js'\nimport type {\n V2SwapDirection,\n WtrxSwapAction,\n WtrxSwapQuote,\n} from './types.js'\n\nexport interface V2PathInfo {\n readonly direction: V2SwapDirection\n readonly path: readonly TronAddress[]\n readonly token: TronAddress\n}\n\nexport function isNativeTrxToken(context: ProtocolsContext, token: string): boolean {\n return token.toUpperCase() === 'TRX' || token === context.chain.contracts.trx\n}\n\nexport function normalizeRouterToken(context: ProtocolsContext, token: string): string {\n return isNativeTrxToken(context, token) ? context.chain.contracts.trx : assertTronAddress(token, 'token')\n}\n\nexport function normalizeV2TrxPairPath(\n context: ProtocolsContext,\n input: { readonly tokenIn: string; readonly tokenOut: string },\n): V2PathInfo {\n const tokenInIsTrx = isNativeTrxToken(context, input.tokenIn)\n const tokenOutIsTrx = isNativeTrxToken(context, input.tokenOut)\n if (tokenInIsTrx === tokenOutIsTrx) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'V2 swap currently supports exactly one TRX side', {\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n })\n }\n\n const token = assertTronAddress(tokenInIsTrx ? input.tokenOut : input.tokenIn, 'token')\n return tokenInIsTrx\n ? { direction: 'trx-to-token', token, path: [context.chain.contracts.wtrx, token] }\n : { direction: 'token-to-trx', token, path: [token, context.chain.contracts.wtrx] }\n}\n\nfunction normalizeV2PathToken(context: ProtocolsContext, token: string, label: string): TronAddress {\n if (isNativeTrxToken(context, token) || token === context.chain.contracts.wtrx) {\n return context.chain.contracts.wtrx\n }\n return assertTronAddress(token, label)\n}\n\nexport function isWrappedTrxToken(context: ProtocolsContext, token: string): boolean {\n return token === context.chain.contracts.wtrx\n}\n\nexport function detectWtrxSwap(\n context: ProtocolsContext,\n input: { readonly tokenIn: string; readonly tokenOut: string; readonly amountIn: string },\n): WtrxSwapQuote | undefined {\n const amountIn = normalizeBaseUnitAmount(input.amountIn, 'amountIn')\n const tokenInIsTrx = isNativeTrxToken(context, input.tokenIn)\n const tokenOutIsTrx = isNativeTrxToken(context, input.tokenOut)\n const tokenInIsWtrx = isWrappedTrxToken(context, input.tokenIn)\n const tokenOutIsWtrx = isWrappedTrxToken(context, input.tokenOut)\n\n let action: WtrxSwapAction | undefined\n if (tokenInIsTrx && tokenOutIsWtrx) action = 'wrap'\n if (tokenInIsWtrx && tokenOutIsTrx) action = 'unwrap'\n if (!action) return undefined\n\n return {\n kind: 'wtrx',\n source: 'wtrx',\n action,\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n amountIn,\n amountOut: amountIn,\n route: {\n type: action === 'wrap' ? 'WTRX_WRAP' : 'WTRX_UNWRAP',\n amountIn,\n amountOut: amountIn,\n },\n }\n}\n\nexport function normalizeV2SwapPath(\n context: ProtocolsContext,\n input: { readonly tokenIn: string; readonly tokenOut: string; readonly path?: readonly string[] },\n): V2PathInfo {\n const tokenInIsTrx = isNativeTrxToken(context, input.tokenIn)\n const tokenOutIsTrx = isNativeTrxToken(context, input.tokenOut)\n const tokenInIsWtrx = isWrappedTrxToken(context, input.tokenIn)\n const tokenOutIsWtrx = isWrappedTrxToken(context, input.tokenOut)\n if ((tokenInIsTrx && (tokenOutIsTrx || tokenOutIsWtrx)) || (tokenInIsWtrx && tokenOutIsTrx)) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'V2 swap does not handle TRX wrap or unwrap', {\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n })\n }\n\n const inputToken = normalizeV2PathToken(context, input.tokenIn, 'tokenIn')\n const outputToken = normalizeV2PathToken(context, input.tokenOut, 'tokenOut')\n const path = (input.path ?? [input.tokenIn, input.tokenOut]).map((token, index) =>\n normalizeV2PathToken(context, token, `path[${index}]`),\n )\n const originalPath = input.path ?? [input.tokenIn, input.tokenOut]\n\n if (inputToken === outputToken) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'V2 swap tokenIn and tokenOut must differ', {\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n })\n }\n\n if (path.length < 2 || path[0] !== inputToken || path[path.length - 1] !== outputToken) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'V2 swap path must start with tokenIn and end with tokenOut', {\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n path: originalPath,\n })\n }\n\n if (path.some((token, index) => index > 0 && token === path[index - 1])) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'V2 swap path must not contain duplicate adjacent tokens', {\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n path: originalPath,\n })\n }\n\n const direction: V2SwapDirection = tokenInIsTrx\n ? 'trx-to-token'\n : tokenOutIsTrx\n ? 'token-to-trx'\n : 'token-to-token'\n\n return { direction, token: tokenInIsTrx ? outputToken : inputToken, path }\n}\n","import type { RouterRoute } from '@sun-protocol/sun-sdk-api'\nimport {\n SDKError,\n type TransactionIntentScope,\n} from '@sun-protocol/sun-sdk-core'\n\nexport { attachApprovalIntent } from '../internal/intents.js'\n\nexport const UNIVERSAL_ROUTER_PROTOCOL_ID = 'universal-router'\nexport const PSM_PROTOCOL_ID = 'psm'\nexport const WTRX_PROTOCOL_ID = 'wtrx'\n\nexport function swapIntentScope(\n protocol: string,\n operation?: string,\n): TransactionIntentScope<'swap'> {\n return {\n domain: 'swap',\n protocol,\n ...(operation === undefined ? {} : { operation }),\n }\n}\n\nexport function routerRouteSymbols(route: RouterRoute): {\n readonly from: string\n readonly to: string\n} {\n const symbols = route.symbols\n if (\n !Array.isArray(symbols) ||\n symbols.length < 2 ||\n symbols.some((symbol) => typeof symbol !== 'string' || symbol.length === 0)\n ) {\n throw new SDKError('SDK_API_ERROR', 'Selected Router route is missing token symbols')\n }\n\n return {\n from: symbols[0] as string,\n to: symbols[symbols.length - 1] as string,\n }\n}\n","import type {\n TransactionAction,\n TransactionIntent,\n TransactionIntentScope,\n} from '@sun-protocol/sun-sdk-core'\n\nexport function attachApprovalIntent(\n actions: readonly TransactionAction[],\n scope: TransactionIntentScope,\n tokenSymbol: string,\n): readonly TransactionAction[] {\n const intent: TransactionIntent = { kind: 'approve', scope, tokenSymbol }\n return actions.map((action) => action.execute === 'runtime'\n ? { ...action, intent }\n : action)\n}\n","import { SDKError } from '@sun-protocol/sun-sdk-core'\nimport type { RouterRoute } from '@sun-protocol/sun-sdk-api'\nimport { normalizeBaseUnitAmount } from '../common.js'\nimport type { ProtocolsContext } from '../context.js'\nimport {\n detectWtrxSwap,\n normalizeRouterToken,\n} from './tokens.js'\nimport type {\n RouterSwapQuote,\n SwapQuote,\n SwapQuoteInput,\n} from './types.js'\n\nfunction requireRoutes(response: { readonly code: number; readonly message?: string; readonly data: unknown }): never | readonly unknown[] {\n if (response.code !== 0) {\n throw new SDKError('SDK_NO_ROUTE', response.message ?? 'Router API returned no route', {\n code: response.code,\n message: response.message,\n })\n }\n if (!Array.isArray(response.data) || response.data.length === 0) {\n throw new SDKError('SDK_NO_ROUTE', 'Router API returned no route', {\n code: response.code,\n })\n }\n return response.data\n}\n\nfunction normalizeRouteTypeList(input: SwapQuoteInput): string | undefined {\n if (input.routerRouteTypes !== undefined && input.typeList !== undefined) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'Use routerRouteTypes or typeList, not both', {\n routerRouteTypes: input.routerRouteTypes,\n typeList: input.typeList,\n })\n }\n return input.routerRouteTypes !== undefined ? input.routerRouteTypes.join(',') : input.typeList\n}\n\ntype RequiredRouterAmountField = 'amountIn' | 'amountInRaw' | 'amountOut' | 'amountOutRaw'\n\nfunction requireRouterAmountString(\n route: Record<string, unknown>,\n field: RequiredRouterAmountField,\n routeIndex: number,\n): string {\n const value = route[field]\n if (typeof value !== 'string' || value.length === 0) {\n throw new SDKError('SDK_API_ERROR', `Router route has invalid ${field}`, {\n routeIndex,\n field,\n value,\n })\n }\n return value\n}\n\nfunction normalizeRouterRawAmount(\n value: string,\n field: 'amountInRaw' | 'amountOutRaw',\n routeIndex: number,\n): string {\n try {\n return normalizeBaseUnitAmount(value, `Router route ${field}`)\n } catch {\n throw new SDKError('SDK_API_ERROR', `Router route has invalid ${field}`, {\n routeIndex,\n field,\n value,\n })\n }\n}\n\nfunction validateRouterRoute(\n route: unknown,\n routeIndex: number,\n requestedAmountIn: string,\n): RouterRoute {\n if (typeof route !== 'object' || route === null || Array.isArray(route)) {\n throw new SDKError('SDK_API_ERROR', 'Router route must be an object', {\n routeIndex,\n route,\n })\n }\n\n const routeRecord = route as Record<string, unknown>\n const amountIn = requireRouterAmountString(routeRecord, 'amountIn', routeIndex)\n const amountOut = requireRouterAmountString(routeRecord, 'amountOut', routeIndex)\n const amountInRaw = normalizeRouterRawAmount(\n requireRouterAmountString(routeRecord, 'amountInRaw', routeIndex),\n 'amountInRaw',\n routeIndex,\n )\n const amountOutRaw = normalizeRouterRawAmount(\n requireRouterAmountString(routeRecord, 'amountOutRaw', routeIndex),\n 'amountOutRaw',\n routeIndex,\n )\n\n if (amountInRaw !== requestedAmountIn) {\n throw new SDKError('SDK_API_ERROR', 'Router route input amount does not match the request', {\n routeIndex,\n requestedAmountIn,\n routeAmountInRaw: amountInRaw,\n })\n }\n\n return {\n ...routeRecord,\n amountIn,\n amountInRaw,\n amountOut,\n amountOutRaw,\n }\n}\n\nexport async function quoteRouterSwap(context: ProtocolsContext, input: SwapQuoteInput): Promise<SwapQuote> {\n const wtrxQuote = detectWtrxSwap(context, input)\n if (wtrxQuote) return wtrxQuote\n\n const amountIn = normalizeBaseUnitAmount(input.amountIn, 'amountIn')\n const typeList = normalizeRouteTypeList(input)\n const routerEndpoint = context.endpoints.router\n if (!routerEndpoint) {\n throw new SDKError('SDK_UNSUPPORTED_NETWORK', 'Router API endpoint is not configured for this network', {\n network: context.network,\n })\n }\n const routesResponse = await context.routerApi.getRoutes(routerEndpoint, {\n fromToken: normalizeRouterToken(context, input.tokenIn),\n toToken: normalizeRouterToken(context, input.tokenOut),\n amountIn,\n ...(typeList !== undefined ? { typeList } : {}),\n ...(input.includeUnverifiedV4Hook !== undefined\n ? { includeUnverifiedV4Hook: input.includeUnverifiedV4Hook }\n : {}),\n })\n const routes: RouterSwapQuote['routes'] = requireRoutes(routesResponse).map((route, routeIndex) =>\n validateRouterRoute(route, routeIndex, amountIn))\n const bestRoute = routes[0]\n if (!bestRoute) {\n throw new SDKError('SDK_NO_ROUTE', 'Router API returned no route')\n }\n\n return {\n kind: 'router',\n source: 'router',\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n amountIn: bestRoute.amountInRaw,\n amountOut: bestRoute.amountOutRaw,\n amountInFormatted: bestRoute.amountIn,\n amountOutFormatted: bestRoute.amountOut,\n routes,\n bestRoute,\n }\n}\n\n/** @deprecated Use `quoteRouterSwap` for the explicit Router API. */\nexport const quoteSwap = quoteRouterSwap\n","import { SDKError } from '@sun-protocol/sun-sdk-core'\nimport type { TransactionPlan } from '../types/plan.js'\n\nexport function assertSwapPlan(\n plan: TransactionPlan,\n protocols: readonly string[],\n clientName: string,\n): void {\n const protocol = plan.metadata.protocol\n if (\n plan.kind !== 'swap' ||\n typeof protocol !== 'string' ||\n !protocols.includes(protocol) ||\n plan.transactions.length === 0\n ) {\n throw new SDKError('SDK_INVALID_ARGUMENT', `Expected a ${clientName} swap plan`, {\n planId: plan.id,\n kind: plan.kind,\n protocol,\n transactionCount: plan.transactions.length,\n })\n }\n}\n","import type { TransactionAction } from '@sun-protocol/sun-sdk-core'\nimport { createProtocolsContext, type ProtocolsContext } from '../context.js'\nimport {\n executePlanAction,\n executePlanTransactions,\n executeTransactionPlan,\n isTransactionPlan,\n} from '../execute-plan.js'\nimport type { ProtocolClientOptions } from '../types/options.js'\nimport type {\n ExecutedActionResult,\n TransactionPlan,\n TransactionPlanExecutionResult,\n} from '../types/plan.js'\nimport { createRouterSwapExecutor } from './router-execute.js'\nimport { planRouterSwap } from './plan.js'\nimport { quoteRouterSwap } from './quote.js'\nimport type {\n SwapQuote,\n SwapQuoteInput,\n SwapRouterClientShape,\n SwapRouterExecuteInput,\n SwapRouterPlanInput,\n SwapTransactionOptions,\n} from './types.js'\nimport {\n assertSwapPlan,\n} from './workflow.js'\n\n/** Router client for both all-in-one and staged TransactionPlan workflows. */\nexport class SwapRouterClient implements SwapRouterClientShape {\n constructor(private readonly context: ProtocolsContext) {}\n\n quote(input: SwapQuoteInput): Promise<SwapQuote> {\n return quoteRouterSwap(this.context, input)\n }\n\n plan(input: SwapRouterPlanInput): Promise<TransactionPlan> {\n return planRouterSwap(this.context, input)\n }\n\n executeAction(action: TransactionAction): Promise<ExecutedActionResult> {\n return executePlanAction(action, createRouterSwapExecutor(this.context))\n }\n\n async submit(\n plan: TransactionPlan,\n options: SwapTransactionOptions = {},\n ): Promise<TransactionPlanExecutionResult> {\n assertSwapPlan(plan, ['universal-router', 'wtrx'], 'Router')\n return executePlanTransactions(\n plan,\n createRouterSwapExecutor(this.context, options),\n )\n }\n\n async execute(\n input: SwapRouterExecuteInput | TransactionPlan,\n ): Promise<TransactionPlanExecutionResult> {\n const plan = isTransactionPlan(input)\n ? input\n : await planRouterSwap(this.context, input)\n assertSwapPlan(plan, ['universal-router', 'wtrx'], 'Router')\n return executeTransactionPlan(plan, createRouterSwapExecutor(this.context))\n }\n}\n\nexport function createSwapRouterClient(options: ProtocolClientOptions): SwapRouterClient {\n return new SwapRouterClient(createProtocolsContext(options))\n}\n","import {\n buildV2SwapEthForExactTokensAction,\n buildV2SwapExactEthForTokensAction,\n buildV2SwapExactTokensForEthAction,\n buildV2SwapExactTokensForTokensAction,\n buildV2SwapTokensForExactEthAction,\n buildV2SwapTokensForExactTokensAction,\n} from '@sun-protocol/sun-sdk-sunswap-v2'\nimport {\n SDKError,\n createDeferredContractCallAction,\n type ContractCallAction,\n type DeferredContractCallAction,\n type JsonObject,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport { resolveTransactionDeadline } from '../common.js'\nimport type { ProtocolsContext } from '../context.js'\n\nexport const V2_SWAP_MATERIALIZATION_KIND = 'sunswap-v2-swap'\n\nexport type V2SwapOperation =\n | 'swap-exact-eth-for-tokens'\n | 'swap-eth-for-exact-tokens'\n | 'swap-exact-tokens-for-eth'\n | 'swap-exact-tokens-for-tokens'\n | 'swap-tokens-for-exact-eth'\n | 'swap-tokens-for-exact-tokens'\n\nexport interface V2SwapMaterializationData {\n readonly operation: V2SwapOperation\n readonly path: readonly TronAddress[]\n readonly recipient: TronAddress\n readonly transactionValidForSeconds: number\n readonly amountIn?: string\n readonly amountOut?: string\n readonly amountOutMin?: string\n readonly amountInMax?: string\n}\n\nfunction requireAmount(data: V2SwapMaterializationData, key: 'amountIn' | 'amountOut' | 'amountOutMin' | 'amountInMax'): string {\n const value = data[key]\n if (value === undefined) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Deferred V2 swap is missing ${key}`, {\n operation: data.operation,\n key,\n })\n }\n return value\n}\n\nexport function createDeferredV2SwapAction(input: {\n readonly data: V2SwapMaterializationData\n}): DeferredContractCallAction {\n return createDeferredContractCallAction({\n id: `sunswap-v2-${input.data.operation}`,\n materialization: {\n kind: V2_SWAP_MATERIALIZATION_KIND,\n data: input.data as unknown as JsonObject,\n },\n })\n}\n\nexport async function materializeV2SwapAction(\n context: ProtocolsContext,\n action: DeferredContractCallAction,\n): Promise<ContractCallAction> {\n if (action.materialization.kind !== V2_SWAP_MATERIALIZATION_KIND) {\n throw new SDKError('SDK_RUNTIME_ERROR', `Unsupported deferred action kind: ${action.materialization.kind}`)\n }\n\n const data = action.materialization.data as unknown as V2SwapMaterializationData\n const options = {\n network: context.network,\n id: action.id,\n path: data.path,\n recipient: data.recipient,\n deadline: await resolveTransactionDeadline(context, data.transactionValidForSeconds),\n }\n\n switch (data.operation) {\n case 'swap-exact-eth-for-tokens':\n return buildV2SwapExactEthForTokensAction({\n ...options,\n amountIn: requireAmount(data, 'amountIn'),\n amountOutMin: requireAmount(data, 'amountOutMin'),\n })\n case 'swap-eth-for-exact-tokens':\n return buildV2SwapEthForExactTokensAction({\n ...options,\n amountOut: requireAmount(data, 'amountOut'),\n amountInMax: requireAmount(data, 'amountInMax'),\n })\n case 'swap-exact-tokens-for-eth':\n return buildV2SwapExactTokensForEthAction({\n ...options,\n amountIn: requireAmount(data, 'amountIn'),\n amountOutMin: requireAmount(data, 'amountOutMin'),\n })\n case 'swap-exact-tokens-for-tokens':\n return buildV2SwapExactTokensForTokensAction({\n ...options,\n amountIn: requireAmount(data, 'amountIn'),\n amountOutMin: requireAmount(data, 'amountOutMin'),\n })\n case 'swap-tokens-for-exact-eth':\n return buildV2SwapTokensForExactEthAction({\n ...options,\n amountOut: requireAmount(data, 'amountOut'),\n amountInMax: requireAmount(data, 'amountInMax'),\n })\n case 'swap-tokens-for-exact-tokens':\n return buildV2SwapTokensForExactTokensAction({\n ...options,\n amountOut: requireAmount(data, 'amountOut'),\n amountInMax: requireAmount(data, 'amountInMax'),\n })\n }\n}\n","import { createContextExecutor, type ProtocolsContext } from '../context.js'\nimport type { TransactionPlanExecutor } from '../execute-plan.js'\nimport { materializeV2SwapAction } from '../internal/v2-swap-action.js'\n\n/** Creates an executor for standalone V2 swaps. */\nexport function createV2SwapExecutor(context: ProtocolsContext): TransactionPlanExecutor {\n return {\n ...createContextExecutor(context),\n materializeAction: (action) => materializeV2SwapAction(context, action),\n }\n}\n","import {\n buildPsmBuyGemAction,\n buildPsmInfoRead,\n buildPsmSellGemAction,\n createPsmSnapshot,\n normalizePsmInfoResult,\n quotePsm,\n type PsmSnapshot,\n type PsmSwapDirection,\n type PsmSwapMode,\n} from '@sun-protocol/sun-sdk-psm'\nimport {\n SDKError,\n assertTronAddress,\n formatUnits,\n type TransactionAction,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport { planApproval } from '../approval/plan.js'\nimport { nextPlanId, normalizeBaseUnitAmount, normalizeFeeLimit } from '../common.js'\nimport {\n createProtocolsContext,\n createContextExecutor,\n requireWalletSnapshot,\n resolveProtocolContract,\n type ProtocolsContext,\n} from '../context.js'\nimport {\n executePlanAction,\n executePlanTransactions,\n executeTransactionPlan,\n isTransactionPlan,\n} from '../execute-plan.js'\nimport { readRequiredContract } from '../internal/reads.js'\nimport type {\n ExecutedActionResult,\n TransactionPlan,\n TransactionPlanExecutionResult,\n} from '../types/plan.js'\nimport type { ProtocolClientOptions } from '../types/options.js'\nimport type {\n PsmApprovalMode,\n PsmContractOverrides,\n PsmReadInput,\n PsmSwapClientShape,\n PsmSwapInput,\n PsmSwapQuote,\n} from './types.js'\nimport {\n DEFAULT_PSM_APPROVAL_FEE_LIMIT,\n DEFAULT_PSM_SWAP_FEE_LIMIT,\n} from './fee-limit.js'\nimport {\n assertSwapPlan,\n} from './workflow.js'\nimport {\n attachApprovalIntent,\n PSM_PROTOCOL_ID,\n swapIntentScope,\n} from './intents.js'\n\ninterface ResolvedPsmContracts {\n readonly psmUsdt: TronAddress\n readonly psmUsdd: TronAddress\n readonly psm: TronAddress\n readonly psmGemJoin: TronAddress\n readonly psmInfoReader: TronAddress\n}\n\ninterface NormalizedPsmQuoteInput {\n readonly mode: PsmSwapMode\n readonly direction: PsmSwapDirection\n readonly specifiedAmount: string\n readonly tokenIn: TronAddress\n readonly tokenOut: TronAddress\n}\n\nfunction normalizePsmApprovalMode(value: unknown): PsmApprovalMode {\n if (value === undefined) return 'auto'\n if (value === 'auto' || value === 'approve' || value === 'none') return value\n throw new SDKError('SDK_INVALID_ARGUMENT', 'unsupported PSM approval mode', {\n approval: value,\n })\n}\n\nfunction resolvePsmContracts(\n context: ProtocolsContext,\n overrides: PsmContractOverrides | undefined,\n): ResolvedPsmContracts {\n return {\n psmUsdt: resolveProtocolContract(context, overrides, 'psmUsdt'),\n psmUsdd: resolveProtocolContract(context, overrides, 'psmUsdd'),\n psm: resolveProtocolContract(context, overrides, 'psm'),\n psmGemJoin: resolveProtocolContract(context, overrides, 'psmGemJoin'),\n psmInfoReader: resolveProtocolContract(context, overrides, 'psmInfoReader'),\n }\n}\n\nfunction invalidAmountShape(mode: PsmSwapMode): never {\n throw new SDKError(\n 'SDK_INVALID_ARGUMENT',\n mode === 'exact-in'\n ? 'exact-in PSM swap requires only amountIn'\n : 'exact-out PSM swap requires only amountOut',\n { mode },\n )\n}\n\nfunction normalizeSpecifiedAmount(value: unknown, label: string): string {\n if (typeof value !== 'string') {\n throw new SDKError('SDK_INVALID_ARGUMENT', `${label} must be a string`, {\n [label]: value,\n })\n }\n return normalizeBaseUnitAmount(value, label)\n}\n\nfunction normalizeQuoteInput(\n context: ProtocolsContext,\n input: PsmSwapInput,\n): NormalizedPsmQuoteInput {\n const mode = input.mode ?? 'exact-in'\n let specifiedAmount: string\n if (mode === 'exact-in') {\n if (input.amountIn === undefined || input.amountOut !== undefined) return invalidAmountShape(mode)\n specifiedAmount = normalizeSpecifiedAmount(input.amountIn, 'amountIn')\n } else if (mode === 'exact-out') {\n if (input.amountOut === undefined || input.amountIn !== undefined) return invalidAmountShape(mode)\n specifiedAmount = normalizeSpecifiedAmount(input.amountOut, 'amountOut')\n } else {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'unsupported PSM quote mode', { mode })\n }\n\n const tokenIn = assertTronAddress(input.tokenIn, 'tokenIn')\n const tokenOut = assertTronAddress(input.tokenOut, 'tokenOut')\n const { psmUsdt, psmUsdd } = resolvePsmContracts(context, input.contracts)\n\n let direction: PsmSwapDirection\n if (tokenIn === psmUsdt && tokenOut === psmUsdd) {\n direction = 'usdt-to-usdd'\n } else if (tokenIn === psmUsdd && tokenOut === psmUsdt) {\n direction = 'usdd-to-usdt'\n } else {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'PSM swap only supports its configured USDT/USDD pair', {\n tokenIn,\n tokenOut,\n psmUsdt,\n psmUsdd,\n })\n }\n\n return { mode, direction, specifiedAmount, tokenIn, tokenOut }\n}\n\nexport async function readPsm(\n context: ProtocolsContext,\n input: PsmReadInput = {},\n): Promise<PsmSnapshot> {\n const contracts = resolvePsmContracts(context, input.contracts)\n const result = await readRequiredContract<unknown>(\n context,\n buildPsmInfoRead({\n network: context.network,\n psm: contracts.psm,\n infoReader: contracts.psmInfoReader,\n }),\n 'PSM info read',\n )\n return createPsmSnapshot(normalizePsmInfoResult(result))\n}\n\nexport async function quotePsmSwap(\n context: ProtocolsContext,\n input: PsmSwapInput,\n): Promise<PsmSwapQuote> {\n const normalized = normalizeQuoteInput(context, input)\n const snapshot = await readPsm(context, input)\n return {\n ...quotePsm({\n mode: normalized.mode,\n direction: normalized.direction,\n specifiedAmount: normalized.specifiedAmount,\n snapshot,\n }),\n kind: 'psm',\n source: 'psm',\n tokenIn: normalized.tokenIn,\n tokenOut: normalized.tokenOut,\n }\n}\n\nexport async function planPsmSwap(\n context: ProtocolsContext,\n input: PsmSwapInput,\n): Promise<TransactionPlan> {\n const { address: owner } = await requireWalletSnapshot(context, 'PSM swap plan')\n const feeLimit = normalizeFeeLimit(input.feeLimit, DEFAULT_PSM_SWAP_FEE_LIMIT)\n const quote = await quotePsmSwap(context, input)\n const recipient = input.recipient !== undefined\n ? assertTronAddress(input.recipient, 'PSM recipient')\n : owner\n const contracts = resolvePsmContracts(context, input.contracts)\n const tokenIn = quote.direction === 'usdt-to-usdd'\n ? contracts.psmUsdt\n : contracts.psmUsdd\n const spender = quote.direction === 'usdt-to-usdd'\n ? contracts.psmGemJoin\n : contracts.psm\n const approvalMode = normalizePsmApprovalMode(input.approval)\n const approval = await planApproval(context, {\n asset: { type: 'token', token: tokenIn },\n owner,\n spender,\n amount: quote.amountIn,\n }, {\n mode: approvalMode,\n amount: 'max',\n feeLimit: DEFAULT_PSM_APPROVAL_FEE_LIMIT,\n })\n const inputSymbol = quote.direction === 'usdt-to-usdd' ? 'USDT' : 'USDD'\n const outputSymbol = quote.direction === 'usdt-to-usdd' ? 'USDD' : 'USDT'\n const inputDecimals = quote.direction === 'usdt-to-usdd' ? 6 : 18\n const outputDecimals = quote.direction === 'usdt-to-usdd' ? 18 : 6\n const intentScope = swapIntentScope(PSM_PROTOCOL_ID, quote.direction)\n const planId = nextPlanId(context, 'swap-psm')\n const actionOptions = {\n network: context.network,\n psm: contracts.psm,\n recipient,\n gemAmount: quote.gemAmount,\n feeLimit,\n id: `${planId}-swap`,\n }\n const transactionAction = quote.direction === 'usdt-to-usdd'\n ? buildPsmSellGemAction(actionOptions)\n : buildPsmBuyGemAction(actionOptions)\n const transaction = {\n ...transactionAction,\n intent: {\n kind: 'swap',\n scope: intentScope,\n from: { value: formatUnits(BigInt(quote.amountIn), inputDecimals), symbol: inputSymbol },\n to: { value: formatUnits(BigInt(quote.amountOut), outputDecimals), symbol: outputSymbol },\n ...(input.recipient === undefined ? {} : { recipient }),\n },\n } as const\n\n return {\n id: planId,\n kind: 'swap',\n network: context.network,\n owner,\n summary: {\n title: 'Swap with PSM',\n lines: [\n `Spend ${quote.amountIn} token units`,\n `Receive ${quote.amountOut} token units`,\n ],\n },\n approvals: attachApprovalIntent(approval.actions, intentScope, inputSymbol),\n transactions: [transaction],\n metadata: {\n protocol: 'psm',\n mode: quote.mode,\n direction: quote.direction,\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n specifiedAmount: quote.specifiedAmount,\n gemAmount: quote.gemAmount,\n feeAmount: quote.feeAmount,\n feeRate: quote.feeRate,\n availableAmountOut: quote.availableAmountOut,\n owner,\n recipient,\n spender,\n approvalMode,\n },\n }\n}\n\nexport class PsmSwapClient implements PsmSwapClientShape {\n constructor(private readonly context: ProtocolsContext) {}\n\n read(input: PsmReadInput = {}): Promise<PsmSnapshot> {\n return readPsm(this.context, input)\n }\n\n quote(input: PsmSwapInput): Promise<PsmSwapQuote> {\n return quotePsmSwap(this.context, input)\n }\n\n plan(input: PsmSwapInput): Promise<TransactionPlan> {\n return planPsmSwap(this.context, input)\n }\n\n executeAction(action: TransactionAction): Promise<ExecutedActionResult> {\n return executePlanAction(action, createContextExecutor(this.context))\n }\n\n submit(plan: TransactionPlan): Promise<TransactionPlanExecutionResult> {\n assertSwapPlan(plan, ['psm'], 'PSM')\n return executePlanTransactions(plan, createContextExecutor(this.context))\n }\n\n async execute(\n input: PsmSwapInput | TransactionPlan,\n ): Promise<TransactionPlanExecutionResult> {\n const plan = isTransactionPlan(input)\n ? input\n : await planPsmSwap(this.context, input)\n assertSwapPlan(plan, ['psm'], 'PSM')\n return executeTransactionPlan(plan, createContextExecutor(this.context))\n }\n}\n\nexport function createPsmSwapClient(context: ProtocolsContext): PsmSwapClient {\n return new PsmSwapClient(context)\n}\n\nexport function createPsmClient(options: ProtocolClientOptions): PsmSwapClient {\n return createPsmSwapClient(createProtocolsContext(options))\n}\n","import { SDKError } from '@sun-protocol/sun-sdk-core'\nimport type { ContractRead, MulticallResult } from '@sun-protocol/sun-sdk-runtime'\nimport {\n requireRuntime,\n type ProtocolsContext,\n} from '../context.js'\n\nexport async function readRequiredContract<T>(\n context: ProtocolsContext,\n call: ContractRead,\n operation: string,\n): Promise<T> {\n const runtime = requireRuntime(context, operation)\n const value = await runtime.readContract<T>(call)\n if (value === undefined || value === null) {\n throw new SDKError('SDK_CONTRACT_ERROR', `${operation} returned an empty result`, { call })\n }\n return value\n}\n\nexport async function readMulticallRequired<T>(\n context: ProtocolsContext,\n calls: readonly ContractRead[],\n operation: string,\n): Promise<readonly T[]> {\n const runtime = requireRuntime(context, operation)\n const results = await runtime.multicall<T>(calls)\n return results.map((result: MulticallResult<T>, index: number) => {\n if (!result.success || result.value === undefined) {\n throw new SDKError('SDK_CONTRACT_ERROR', `${operation} multicall item failed`, {\n index,\n call: calls[index],\n error: result.error,\n })\n }\n return result.value\n })\n}\n","import {\n buildV2RouterAllowedTradingPairRead,\n buildV2RouterAmountsInRead,\n buildV2RouterAmountsOutRead,\n normalizeV2AmountsResult,\n} from '@sun-protocol/sun-sdk-sunswap-v2'\nimport {\n SDKError,\n assertTronAddress,\n type TransactionAction,\n} from '@sun-protocol/sun-sdk-core'\nimport {\n applySlippageMax,\n applySlippageMin,\n nextPlanId,\n normalizeBaseUnitAmount,\n normalizeRecipient,\n normalizeTransactionValidForSeconds,\n slippageToBips,\n} from '../common.js'\nimport {\n createProtocolsContext,\n requireRuntime,\n requireWalletSnapshot,\n type ProtocolsContext,\n} from '../context.js'\nimport {\n executePlanAction,\n executePlanTransactions,\n executeTransactionPlan,\n isTransactionPlan,\n} from '../execute-plan.js'\nimport { createDeferredV2SwapAction } from '../internal/v2-swap-action.js'\nimport { planApproval } from '../approval/plan.js'\nimport type {\n ExecutedActionResult,\n TransactionPlan,\n TransactionPlanExecutionResult,\n} from '../types/plan.js'\nimport type { ProtocolClientOptions } from '../types/options.js'\nimport { normalizeV2SwapPath } from './tokens.js'\nimport type {\n V2SwapClientShape,\n V2SwapMode,\n V2SwapQuote,\n V2SwapQuoteInput,\n} from './types.js'\nimport { createV2SwapExecutor } from './v2-execute.js'\nimport {\n assertSwapPlan,\n} from './workflow.js'\n\nfunction normalizeV2Mode(input: V2SwapQuoteInput): V2SwapMode {\n const mode = input.mode ?? 'exact-in'\n if (mode === 'exact-in') {\n normalizeBaseUnitAmount(input.amountIn ?? '', 'amountIn')\n if (input.amountOut !== undefined) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'exact-in V2 swap does not accept amountOut')\n }\n return mode\n }\n\n normalizeBaseUnitAmount(input.amountOut ?? '', 'amountOut')\n if (input.amountIn !== undefined) {\n throw new SDKError('SDK_INVALID_ARGUMENT', 'exact-out V2 swap does not accept amountIn')\n }\n return mode\n}\n\nfunction requireAmount(amounts: readonly string[], index: number, operation: string): string {\n const amount = amounts[index]\n if (amount === undefined) {\n throw new SDKError('SDK_CONTRACT_ERROR', 'V2 router returned an incomplete amount path', {\n operation,\n amounts,\n })\n }\n return amount\n}\n\nfunction requireAmountPath(amounts: readonly string[], path: readonly string[], operation: string): void {\n if (amounts.length !== path.length) {\n throw new SDKError('SDK_CONTRACT_ERROR', 'V2 router returned an incomplete amount path', {\n operation,\n amounts,\n path,\n })\n }\n}\n\nfunction normalizeAllowedTradingPairResult(result: unknown): boolean {\n if (typeof result === 'boolean') return result\n if (Array.isArray(result) && typeof result[0] === 'boolean') return result[0]\n return Boolean(result)\n}\n\nasync function assertV2PathAllowed(context: ProtocolsContext, path: readonly string[]): Promise<void> {\n const runtime = requireRuntime(context, 'V2 allowed trading pair check')\n for (let index = 0; index < path.length - 1; index += 1) {\n const tokenA = assertTronAddress(path[index] ?? '', `path[${index}]`)\n const tokenB = assertTronAddress(path[index + 1] ?? '', `path[${index + 1}]`)\n const allowed = normalizeAllowedTradingPairResult(await runtime.readContract(buildV2RouterAllowedTradingPairRead({\n network: context.network,\n tokenA,\n tokenB,\n })))\n\n if (!allowed) {\n throw new SDKError('SDK_NO_ROUTE', 'SunSwap V2 router does not allow this trading pair', {\n operation: 'v2-allowed-trading-pair-check',\n blockedPair: [tokenA, tokenB],\n path,\n })\n }\n }\n}\n\nasync function quoteV2Swap(context: ProtocolsContext, input: V2SwapQuoteInput): Promise<V2SwapQuote> {\n const runtime = requireRuntime(context, 'V2 swap quote')\n const mode = normalizeV2Mode(input)\n const pathInfo = normalizeV2SwapPath(context, input)\n await assertV2PathAllowed(context, pathInfo.path)\n\n if (mode === 'exact-in') {\n const amountIn = normalizeBaseUnitAmount(input.amountIn ?? '', 'amountIn')\n const amounts = normalizeV2AmountsResult(await runtime.readContract(buildV2RouterAmountsOutRead({\n network: context.network,\n amountIn,\n path: pathInfo.path,\n })))\n requireAmountPath(amounts, pathInfo.path, 'v2-exact-in-quote')\n return {\n kind: 'v2',\n source: 'v2',\n mode,\n direction: pathInfo.direction,\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n amountIn,\n amountOut: requireAmount(amounts, amounts.length - 1, 'v2-exact-in-quote'),\n path: pathInfo.path,\n }\n }\n\n const amountOut = normalizeBaseUnitAmount(input.amountOut ?? '', 'amountOut')\n const amounts = normalizeV2AmountsResult(await runtime.readContract(buildV2RouterAmountsInRead({\n network: context.network,\n amountOut,\n path: pathInfo.path,\n })))\n requireAmountPath(amounts, pathInfo.path, 'v2-exact-out-quote')\n return {\n kind: 'v2',\n source: 'v2',\n mode,\n direction: pathInfo.direction,\n tokenIn: input.tokenIn,\n tokenOut: input.tokenOut,\n amountIn: requireAmount(amounts, 0, 'v2-exact-out-quote'),\n amountOut,\n path: pathInfo.path,\n }\n}\n\nasync function planV2Swap(context: ProtocolsContext, input: V2SwapQuoteInput): Promise<TransactionPlan> {\n const { address: owner } = await requireWalletSnapshot(context, 'V2 swap plan')\n const quote = await quoteV2Swap(context, input)\n const recipient = await normalizeRecipient(context, input.recipient, 'V2 swap recipient', owner)\n const transactionValidForSeconds = normalizeTransactionValidForSeconds(input.transactionValidForSeconds)\n const slippageBips = slippageToBips(input.slippage ?? '0.5%')\n const approvals: TransactionAction[] = []\n\n if (quote.mode === 'exact-in' && quote.direction === 'trx-to-token') {\n const minAmountOut = applySlippageMin(BigInt(quote.amountOut), slippageBips).toString()\n const transaction = createDeferredV2SwapAction({\n data: {\n operation: 'swap-exact-eth-for-tokens',\n amountIn: quote.amountIn,\n amountOutMin: minAmountOut,\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n },\n })\n return {\n id: nextPlanId(context, 'swap-v2'),\n kind: 'swap',\n network: context.network,\n owner,\n summary: {\n title: 'Swap with SunSwap V2',\n lines: [`Spend ${quote.amountIn} sun`, `Receive at least ${minAmountOut} token units`],\n },\n approvals,\n transactions: [transaction],\n metadata: {\n protocol: 'sunswap-v2',\n mode: quote.mode,\n direction: quote.direction,\n amountIn: quote.amountIn,\n quotedAmountOut: quote.amountOut,\n minAmountOut,\n slippageBips,\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n },\n }\n }\n\n if (quote.mode === 'exact-out' && quote.direction === 'trx-to-token') {\n const maxAmountIn = applySlippageMax(BigInt(quote.amountIn), slippageBips).toString()\n const transaction = createDeferredV2SwapAction({\n data: {\n operation: 'swap-eth-for-exact-tokens',\n amountOut: quote.amountOut,\n amountInMax: maxAmountIn,\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n },\n })\n return {\n id: nextPlanId(context, 'swap-v2'),\n kind: 'swap',\n network: context.network,\n owner,\n summary: {\n title: 'Swap with SunSwap V2',\n lines: [`Spend at most ${maxAmountIn} sun`, `Receive ${quote.amountOut} token units`],\n },\n approvals,\n transactions: [transaction],\n metadata: {\n protocol: 'sunswap-v2',\n mode: quote.mode,\n direction: quote.direction,\n amountOut: quote.amountOut,\n quotedAmountIn: quote.amountIn,\n maxAmountIn,\n slippageBips,\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n },\n }\n }\n\n const tokenInputAmount = quote.mode === 'exact-in'\n ? quote.amountIn\n : applySlippageMax(BigInt(quote.amountIn), slippageBips).toString()\n const approval = await planApproval(context, {\n asset: { type: 'token', token: assertTronAddress(input.tokenIn, 'tokenIn') },\n owner,\n spender: context.chain.contracts.sunswapV2Router,\n amount: tokenInputAmount,\n }, {\n mode: input.approval ?? 'auto',\n amount: 'exact',\n })\n approvals.push(...approval.actions)\n\n if (quote.mode === 'exact-in') {\n const minAmountOut = applySlippageMin(BigInt(quote.amountOut), slippageBips).toString()\n const transaction = quote.direction === 'token-to-trx'\n ? createDeferredV2SwapAction({\n data: {\n operation: 'swap-exact-tokens-for-eth',\n amountIn: quote.amountIn,\n amountOutMin: minAmountOut,\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n },\n })\n : createDeferredV2SwapAction({\n data: {\n operation: 'swap-exact-tokens-for-tokens',\n amountIn: quote.amountIn,\n amountOutMin: minAmountOut,\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n },\n })\n return {\n id: nextPlanId(context, 'swap-v2'),\n kind: 'swap',\n network: context.network,\n owner,\n summary: {\n title: 'Swap with SunSwap V2',\n lines: [\n `Sell ${quote.amountIn} token units`,\n `Receive at least ${minAmountOut} ${quote.direction === 'token-to-trx' ? 'sun' : 'token units'}`,\n ],\n },\n approvals,\n transactions: [transaction],\n metadata: {\n protocol: 'sunswap-v2',\n mode: quote.mode,\n direction: quote.direction,\n amountIn: quote.amountIn,\n quotedAmountOut: quote.amountOut,\n minAmountOut,\n slippageBips,\n approvalMode: input.approval ?? 'auto',\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n owner,\n spender: context.chain.contracts.sunswapV2Router,\n },\n }\n }\n\n const maxAmountIn = tokenInputAmount\n const transaction = quote.direction === 'token-to-trx'\n ? createDeferredV2SwapAction({\n data: {\n operation: 'swap-tokens-for-exact-eth',\n amountOut: quote.amountOut,\n amountInMax: maxAmountIn,\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n },\n })\n : createDeferredV2SwapAction({\n data: {\n operation: 'swap-tokens-for-exact-tokens',\n amountOut: quote.amountOut,\n amountInMax: maxAmountIn,\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n },\n })\n return {\n id: nextPlanId(context, 'swap-v2'),\n kind: 'swap',\n network: context.network,\n owner,\n summary: {\n title: 'Swap with SunSwap V2',\n lines: [\n `Spend at most ${maxAmountIn} token units`,\n `Receive ${quote.amountOut} ${quote.direction === 'token-to-trx' ? 'sun' : 'token units'}`,\n ],\n },\n approvals,\n transactions: [transaction],\n metadata: {\n protocol: 'sunswap-v2',\n mode: quote.mode,\n direction: quote.direction,\n amountOut: quote.amountOut,\n quotedAmountIn: quote.amountIn,\n maxAmountIn,\n slippageBips,\n approvalMode: input.approval ?? 'auto',\n path: quote.path,\n recipient,\n transactionValidForSeconds,\n owner,\n spender: context.chain.contracts.sunswapV2Router,\n },\n }\n}\n\nexport class V2SwapClient implements V2SwapClientShape {\n constructor(private readonly context: ProtocolsContext) {}\n\n quote(_input: V2SwapQuoteInput): Promise<V2SwapQuote> {\n return quoteV2Swap(this.context, _input)\n }\n\n plan(input: V2SwapQuoteInput): Promise<TransactionPlan> {\n return planV2Swap(this.context, input)\n }\n\n executeAction(action: TransactionAction): Promise<ExecutedActionResult> {\n return executePlanAction(action, createV2SwapExecutor(this.context))\n }\n\n submit(plan: TransactionPlan): Promise<TransactionPlanExecutionResult> {\n assertSwapPlan(plan, ['sunswap-v2'], 'SunSwap V2')\n return executePlanTransactions(plan, createV2SwapExecutor(this.context))\n }\n\n async execute(\n input: V2SwapQuoteInput | TransactionPlan,\n ): Promise<TransactionPlanExecutionResult> {\n const plan = isTransactionPlan(input)\n ? input\n : await planV2Swap(this.context, input)\n assertSwapPlan(plan, ['sunswap-v2'], 'SunSwap V2')\n return executeTransactionPlan(plan, createV2SwapExecutor(this.context))\n }\n}\n\nexport function createV2SwapClient(context: ProtocolsContext): V2SwapClient {\n return new V2SwapClient(context)\n}\n\nexport function createV2Client(options: ProtocolClientOptions): V2SwapClient {\n return createV2SwapClient(createProtocolsContext(options))\n}\n"],"mappings":"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","names":["import_sun_sdk_api","import_sun_sdk_core","nextPlanId","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_chains","import_sun_sdk_core","evmHexToTronAddressV2","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_sunswap_v2","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_core","import_sun_sdk_sunswap_v2","import_sun_sdk_core","requireAmount","amounts","transaction","maxAmountIn"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { S as SwapQuoteInput, a as SwapQuote, W as WtrxSwapQuote, V as V2SwapDirection } from '../intents-BSXq1HvW.cjs';
|
|
2
|
+
export { P as PSM_PROTOCOL_ID, b as PsmApprovalMode, c as PsmContractOverrides, d as PsmReadInput, e as PsmSwapClient, f as PsmSwapClientShape, g as PsmSwapInput, h as PsmSwapQuote, R as RouterRouteType, i as RouterSwapQuote, j as SwapNamespace, k as SwapPlanOptions, l as SwapQuoteAmounts, m as SwapQuoteKind, n as SwapRouterClient, o as SwapRouterClientShape, p as SwapRouterExecuteInput, q as SwapRouterPlanInput, r as SwapTransactionOptions, U as UNIVERSAL_ROUTER_PROTOCOL_ID, s as V2SwapClient, t as V2SwapClientShape, u as V2SwapMode, v as V2SwapQuote, w as V2SwapQuoteInput, x as WTRX_PROTOCOL_ID, y as WtrxSwapAction, z as WtrxSwapRoute, A as createPsmClient, B as createPsmSwapClient, C as createRouterSwapExecutor, D as createSwapRouterClient, E as createV2Client, F as createV2SwapClient, G as createV2SwapExecutor, H as materializeUniversalRouterAction, I as planPsmSwap, J as planRouterSwap, K as quotePsmSwap, L as readPsm } from '../intents-BSXq1HvW.cjs';
|
|
3
|
+
import { P as ProtocolsContext } from '../common-8VQQ0FSU.cjs';
|
|
4
|
+
export { A as ApprovalMode, T as TransactionPlan } from '../common-8VQQ0FSU.cjs';
|
|
5
|
+
import { TronAddress } from '@sun-protocol/sun-sdk-core';
|
|
6
|
+
export { PsmQuote, PsmSnapshot, PsmSwapDirection, PsmSwapMode } from '@sun-protocol/sun-sdk-psm';
|
|
7
|
+
import '@sun-protocol/sun-sdk-api';
|
|
8
|
+
import '@sun-protocol/sun-sdk-chains';
|
|
9
|
+
import '@sun-protocol/sun-sdk-runtime';
|
|
10
|
+
|
|
11
|
+
declare function quoteRouterSwap(context: ProtocolsContext, input: SwapQuoteInput): Promise<SwapQuote>;
|
|
12
|
+
/** @deprecated Use `quoteRouterSwap` for the explicit Router API. */
|
|
13
|
+
declare const quoteSwap: typeof quoteRouterSwap;
|
|
14
|
+
|
|
15
|
+
interface V2PathInfo {
|
|
16
|
+
readonly direction: V2SwapDirection;
|
|
17
|
+
readonly path: readonly TronAddress[];
|
|
18
|
+
readonly token: TronAddress;
|
|
19
|
+
}
|
|
20
|
+
declare function isNativeTrxToken(context: ProtocolsContext, token: string): boolean;
|
|
21
|
+
declare function normalizeRouterToken(context: ProtocolsContext, token: string): string;
|
|
22
|
+
declare function normalizeV2TrxPairPath(context: ProtocolsContext, input: {
|
|
23
|
+
readonly tokenIn: string;
|
|
24
|
+
readonly tokenOut: string;
|
|
25
|
+
}): V2PathInfo;
|
|
26
|
+
declare function isWrappedTrxToken(context: ProtocolsContext, token: string): boolean;
|
|
27
|
+
declare function detectWtrxSwap(context: ProtocolsContext, input: {
|
|
28
|
+
readonly tokenIn: string;
|
|
29
|
+
readonly tokenOut: string;
|
|
30
|
+
readonly amountIn: string;
|
|
31
|
+
}): WtrxSwapQuote | undefined;
|
|
32
|
+
|
|
33
|
+
export { SwapQuote, SwapQuoteInput, V2SwapDirection, WtrxSwapQuote, detectWtrxSwap, isNativeTrxToken, isWrappedTrxToken, normalizeRouterToken, normalizeV2TrxPairPath, quoteRouterSwap, quoteSwap };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { S as SwapQuoteInput, a as SwapQuote, W as WtrxSwapQuote, V as V2SwapDirection } from '../intents-CwOttD75.js';
|
|
2
|
+
export { P as PSM_PROTOCOL_ID, b as PsmApprovalMode, c as PsmContractOverrides, d as PsmReadInput, e as PsmSwapClient, f as PsmSwapClientShape, g as PsmSwapInput, h as PsmSwapQuote, R as RouterRouteType, i as RouterSwapQuote, j as SwapNamespace, k as SwapPlanOptions, l as SwapQuoteAmounts, m as SwapQuoteKind, n as SwapRouterClient, o as SwapRouterClientShape, p as SwapRouterExecuteInput, q as SwapRouterPlanInput, r as SwapTransactionOptions, U as UNIVERSAL_ROUTER_PROTOCOL_ID, s as V2SwapClient, t as V2SwapClientShape, u as V2SwapMode, v as V2SwapQuote, w as V2SwapQuoteInput, x as WTRX_PROTOCOL_ID, y as WtrxSwapAction, z as WtrxSwapRoute, A as createPsmClient, B as createPsmSwapClient, C as createRouterSwapExecutor, D as createSwapRouterClient, E as createV2Client, F as createV2SwapClient, G as createV2SwapExecutor, H as materializeUniversalRouterAction, I as planPsmSwap, J as planRouterSwap, K as quotePsmSwap, L as readPsm } from '../intents-CwOttD75.js';
|
|
3
|
+
import { P as ProtocolsContext } from '../common-8VQQ0FSU.js';
|
|
4
|
+
export { A as ApprovalMode, T as TransactionPlan } from '../common-8VQQ0FSU.js';
|
|
5
|
+
import { TronAddress } from '@sun-protocol/sun-sdk-core';
|
|
6
|
+
export { PsmQuote, PsmSnapshot, PsmSwapDirection, PsmSwapMode } from '@sun-protocol/sun-sdk-psm';
|
|
7
|
+
import '@sun-protocol/sun-sdk-api';
|
|
8
|
+
import '@sun-protocol/sun-sdk-chains';
|
|
9
|
+
import '@sun-protocol/sun-sdk-runtime';
|
|
10
|
+
|
|
11
|
+
declare function quoteRouterSwap(context: ProtocolsContext, input: SwapQuoteInput): Promise<SwapQuote>;
|
|
12
|
+
/** @deprecated Use `quoteRouterSwap` for the explicit Router API. */
|
|
13
|
+
declare const quoteSwap: typeof quoteRouterSwap;
|
|
14
|
+
|
|
15
|
+
interface V2PathInfo {
|
|
16
|
+
readonly direction: V2SwapDirection;
|
|
17
|
+
readonly path: readonly TronAddress[];
|
|
18
|
+
readonly token: TronAddress;
|
|
19
|
+
}
|
|
20
|
+
declare function isNativeTrxToken(context: ProtocolsContext, token: string): boolean;
|
|
21
|
+
declare function normalizeRouterToken(context: ProtocolsContext, token: string): string;
|
|
22
|
+
declare function normalizeV2TrxPairPath(context: ProtocolsContext, input: {
|
|
23
|
+
readonly tokenIn: string;
|
|
24
|
+
readonly tokenOut: string;
|
|
25
|
+
}): V2PathInfo;
|
|
26
|
+
declare function isWrappedTrxToken(context: ProtocolsContext, token: string): boolean;
|
|
27
|
+
declare function detectWtrxSwap(context: ProtocolsContext, input: {
|
|
28
|
+
readonly tokenIn: string;
|
|
29
|
+
readonly tokenOut: string;
|
|
30
|
+
readonly amountIn: string;
|
|
31
|
+
}): WtrxSwapQuote | undefined;
|
|
32
|
+
|
|
33
|
+
export { SwapQuote, SwapQuoteInput, V2SwapDirection, WtrxSwapQuote, detectWtrxSwap, isNativeTrxToken, isWrappedTrxToken, normalizeRouterToken, normalizeV2TrxPairPath, quoteRouterSwap, quoteSwap };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PSM_PROTOCOL_ID,
|
|
3
|
+
PsmSwapClient,
|
|
4
|
+
SwapRouterClient,
|
|
5
|
+
UNIVERSAL_ROUTER_PROTOCOL_ID,
|
|
6
|
+
V2SwapClient,
|
|
7
|
+
WTRX_PROTOCOL_ID,
|
|
8
|
+
createPsmClient,
|
|
9
|
+
createPsmSwapClient,
|
|
10
|
+
createRouterSwapExecutor,
|
|
11
|
+
createSwapRouterClient,
|
|
12
|
+
createV2Client,
|
|
13
|
+
createV2SwapClient,
|
|
14
|
+
detectWtrxSwap,
|
|
15
|
+
isNativeTrxToken,
|
|
16
|
+
isWrappedTrxToken,
|
|
17
|
+
materializeUniversalRouterAction,
|
|
18
|
+
normalizeRouterToken,
|
|
19
|
+
normalizeV2TrxPairPath,
|
|
20
|
+
planPsmSwap,
|
|
21
|
+
planRouterSwap,
|
|
22
|
+
quotePsmSwap,
|
|
23
|
+
quoteRouterSwap,
|
|
24
|
+
quoteSwap,
|
|
25
|
+
readPsm
|
|
26
|
+
} from "../chunk-ECCGOXNA.js";
|
|
27
|
+
import "../chunk-OM4OW4KB.js";
|
|
28
|
+
import "../chunk-5XDX5563.js";
|
|
29
|
+
import "../chunk-C2YCVBPI.js";
|
|
30
|
+
import {
|
|
31
|
+
createV2SwapExecutor
|
|
32
|
+
} from "../chunk-TSHXXRH2.js";
|
|
33
|
+
import "../chunk-VFVKMC4H.js";
|
|
34
|
+
export {
|
|
35
|
+
PSM_PROTOCOL_ID,
|
|
36
|
+
PsmSwapClient,
|
|
37
|
+
SwapRouterClient,
|
|
38
|
+
UNIVERSAL_ROUTER_PROTOCOL_ID,
|
|
39
|
+
V2SwapClient,
|
|
40
|
+
WTRX_PROTOCOL_ID,
|
|
41
|
+
createPsmClient,
|
|
42
|
+
createPsmSwapClient,
|
|
43
|
+
createRouterSwapExecutor,
|
|
44
|
+
createSwapRouterClient,
|
|
45
|
+
createV2Client,
|
|
46
|
+
createV2SwapClient,
|
|
47
|
+
createV2SwapExecutor,
|
|
48
|
+
detectWtrxSwap,
|
|
49
|
+
isNativeTrxToken,
|
|
50
|
+
isWrappedTrxToken,
|
|
51
|
+
materializeUniversalRouterAction,
|
|
52
|
+
normalizeRouterToken,
|
|
53
|
+
normalizeV2TrxPairPath,
|
|
54
|
+
planPsmSwap,
|
|
55
|
+
planRouterSwap,
|
|
56
|
+
quotePsmSwap,
|
|
57
|
+
quoteRouterSwap,
|
|
58
|
+
quoteSwap,
|
|
59
|
+
readPsm
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|