@lifi/sdk-provider-ethereum 4.0.0-beta.8 → 4.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/EthereumProvider.js.map +1 -1
- package/dist/cjs/actions/checkPermitSupport.js.map +1 -1
- package/dist/cjs/actions/getAccountCode.js.map +1 -1
- package/dist/cjs/actions/getAllowance.js.map +1 -1
- package/dist/cjs/actions/getEthereumBalance.js.map +1 -1
- package/dist/cjs/actions/getMaxPriorityFeePerGas.js.map +1 -1
- package/dist/cjs/actions/getMulticallAddress.js.map +1 -1
- package/dist/cjs/actions/isBatchingSupported.js.map +1 -1
- package/dist/cjs/actions/isSafeSignature.js.map +1 -1
- package/dist/cjs/actions/isSafeWallet.js.map +1 -1
- package/dist/cjs/actions/resolveENSAddress.js.map +1 -1
- package/dist/cjs/actions/resolveEthereumAddress.js.map +1 -1
- package/dist/cjs/actions/resolveTransactionHash.js.map +1 -1
- package/dist/cjs/actions/resolveUNSAddress.js.map +1 -1
- package/dist/cjs/actions/setAllowance.js.map +1 -1
- package/dist/cjs/actions/waitForBatchTransactionReceipt.js.map +1 -1
- package/dist/cjs/actions/waitForRelayedTransactionReceipt.js.map +1 -1
- package/dist/cjs/actions/waitForSafeTransactionExecution.js.map +1 -1
- package/dist/cjs/actions/waitForTransactionReceipt.js.map +1 -1
- package/dist/cjs/client/publicClient.js.map +1 -1
- package/dist/cjs/client/safeClient.js.map +1 -1
- package/dist/cjs/core/EthereumStepExecutor.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumBatchedSignAndExecuteTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumBatchedWaitForTransactionTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumCheckAllowanceTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumCheckBalanceTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumCheckPermitsTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumNativePermitTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumPrepareTransactionTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumRelayedSignAndExecuteTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumRelayedWaitForTransactionTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumResetAllowanceTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumSetAllowanceTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumSignAndExecuteTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumStandardSignAndExecuteTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumStandardWaitForTransactionTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumWaitForTransactionStatusTask.js.map +1 -1
- package/dist/cjs/core/tasks/EthereumWaitForTransactionTask.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/estimateTransactionRequest.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/getEthereumExecutionStrategy.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/getTxLink.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/getUpdatedStep.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/isPermit2Supported.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/shouldCheckForAllowance.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/signHyperliquidTypedData.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/switchChain.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/updateActionWithReceipt.js.map +1 -1
- package/dist/cjs/errors/parseEthereumErrors.js.map +1 -1
- package/dist/cjs/hyperliquid/agentWallet.js.map +1 -1
- package/dist/cjs/hyperliquid/isHyperliquidAgentStep.js.map +1 -1
- package/dist/cjs/permits/allowanceTransfer.js.map +1 -1
- package/dist/cjs/permits/canAccountUseNativePermits.js.map +1 -1
- package/dist/cjs/permits/domain.js.map +1 -1
- package/dist/cjs/permits/encodeNativePermitData.js.map +1 -1
- package/dist/cjs/permits/encodePermit2Data.js.map +1 -1
- package/dist/cjs/permits/getNativePermit.js.map +1 -1
- package/dist/cjs/permits/getPermitTransferFromValues.js.map +1 -1
- package/dist/cjs/permits/invariant.js.map +1 -1
- package/dist/cjs/permits/isNativePermitValid.js.map +1 -1
- package/dist/cjs/permits/signPermit2Message.js.map +1 -1
- package/dist/cjs/permits/signatureTransfer.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/convertExtendedChain.js.map +1 -1
- package/dist/cjs/utils/getActionWithFallback.js.map +1 -1
- package/dist/cjs/utils/getDomainChainId.js.map +1 -1
- package/dist/cjs/utils/getSafeApiKey.js.map +1 -1
- package/dist/cjs/utils/isContractCallStep.js.map +1 -1
- package/dist/cjs/utils/isExtendedChain.js.map +1 -1
- package/dist/cjs/utils/isGaslessStep.js.map +1 -1
- package/dist/cjs/utils/isRelayerStep.js.map +1 -1
- package/dist/cjs/utils/isZeroAddress.js.map +1 -1
- package/dist/cjs/utils/median.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/EthereumProvider.js.map +1 -1
- package/dist/esm/actions/checkPermitSupport.js.map +1 -1
- package/dist/esm/actions/getAccountCode.js.map +1 -1
- package/dist/esm/actions/getAllowance.js.map +1 -1
- package/dist/esm/actions/getEthereumBalance.js.map +1 -1
- package/dist/esm/actions/getMaxPriorityFeePerGas.js.map +1 -1
- package/dist/esm/actions/getMulticallAddress.js.map +1 -1
- package/dist/esm/actions/isBatchingSupported.js.map +1 -1
- package/dist/esm/actions/isSafeSignature.js.map +1 -1
- package/dist/esm/actions/isSafeWallet.js.map +1 -1
- package/dist/esm/actions/resolveENSAddress.js.map +1 -1
- package/dist/esm/actions/resolveEthereumAddress.js.map +1 -1
- package/dist/esm/actions/resolveTransactionHash.js.map +1 -1
- package/dist/esm/actions/resolveUNSAddress.js.map +1 -1
- package/dist/esm/actions/setAllowance.js.map +1 -1
- package/dist/esm/actions/waitForBatchTransactionReceipt.js.map +1 -1
- package/dist/esm/actions/waitForRelayedTransactionReceipt.js.map +1 -1
- package/dist/esm/actions/waitForSafeTransactionExecution.js.map +1 -1
- package/dist/esm/actions/waitForTransactionReceipt.js.map +1 -1
- package/dist/esm/client/publicClient.js.map +1 -1
- package/dist/esm/client/safeClient.js.map +1 -1
- package/dist/esm/core/EthereumStepExecutor.js.map +1 -1
- package/dist/esm/core/tasks/EthereumBatchedSignAndExecuteTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumBatchedWaitForTransactionTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumCheckAllowanceTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumCheckBalanceTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumCheckPermitsTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumNativePermitTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumPrepareTransactionTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumRelayedSignAndExecuteTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumRelayedWaitForTransactionTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumResetAllowanceTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumSetAllowanceTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumSignAndExecuteTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumStandardSignAndExecuteTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumStandardWaitForTransactionTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumWaitForTransactionStatusTask.js.map +1 -1
- package/dist/esm/core/tasks/EthereumWaitForTransactionTask.js.map +1 -1
- package/dist/esm/core/tasks/helpers/estimateTransactionRequest.js.map +1 -1
- package/dist/esm/core/tasks/helpers/getEthereumExecutionStrategy.js.map +1 -1
- package/dist/esm/core/tasks/helpers/getTxLink.js.map +1 -1
- package/dist/esm/core/tasks/helpers/getUpdatedStep.js.map +1 -1
- package/dist/esm/core/tasks/helpers/isPermit2Supported.js.map +1 -1
- package/dist/esm/core/tasks/helpers/shouldCheckForAllowance.js.map +1 -1
- package/dist/esm/core/tasks/helpers/signHyperliquidTypedData.js.map +1 -1
- package/dist/esm/core/tasks/helpers/switchChain.js.map +1 -1
- package/dist/esm/core/tasks/helpers/updateActionWithReceipt.js.map +1 -1
- package/dist/esm/errors/parseEthereumErrors.js.map +1 -1
- package/dist/esm/hyperliquid/agentWallet.js.map +1 -1
- package/dist/esm/hyperliquid/isHyperliquidAgentStep.js.map +1 -1
- package/dist/esm/permits/allowanceTransfer.js.map +1 -1
- package/dist/esm/permits/canAccountUseNativePermits.js.map +1 -1
- package/dist/esm/permits/domain.js.map +1 -1
- package/dist/esm/permits/encodeNativePermitData.js.map +1 -1
- package/dist/esm/permits/encodePermit2Data.js.map +1 -1
- package/dist/esm/permits/getNativePermit.js.map +1 -1
- package/dist/esm/permits/getPermitTransferFromValues.js.map +1 -1
- package/dist/esm/permits/invariant.js.map +1 -1
- package/dist/esm/permits/isNativePermitValid.js.map +1 -1
- package/dist/esm/permits/signPermit2Message.js.map +1 -1
- package/dist/esm/permits/signatureTransfer.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/convertExtendedChain.js.map +1 -1
- package/dist/esm/utils/getActionWithFallback.js.map +1 -1
- package/dist/esm/utils/getDomainChainId.js.map +1 -1
- package/dist/esm/utils/getSafeApiKey.js.map +1 -1
- package/dist/esm/utils/isContractCallStep.js.map +1 -1
- package/dist/esm/utils/isExtendedChain.js.map +1 -1
- package/dist/esm/utils/isGaslessStep.js.map +1 -1
- package/dist/esm/utils/isRelayerStep.js.map +1 -1
- package/dist/esm/utils/isZeroAddress.js.map +1 -1
- package/dist/esm/utils/median.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/package.json +3 -3
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumProvider.js","names":["ChainType","resolveEthereumAddress","getEthereumBalance","EthereumStepExecutor"],"sources":["../../src/EthereumProvider.ts"],"sourcesContent":["import { ChainType, type StepExecutorOptions } from '@lifi/sdk'\nimport { isAddress } from 'viem'\nimport { getEthereumBalance } from './actions/getEthereumBalance.js'\nimport { resolveEthereumAddress } from './actions/resolveEthereumAddress.js'\nimport { EthereumStepExecutor } from './core/EthereumStepExecutor.js'\nimport type { EthereumProviderOptions, EthereumSDKProvider } from './types.js'\n\nexport function EthereumProvider(\n options?: EthereumProviderOptions\n): EthereumSDKProvider {\n const _options: EthereumProviderOptions = options ?? {}\n return {\n get type() {\n return ChainType.EVM\n },\n get options() {\n return _options\n },\n isAddress,\n resolveAddress: resolveEthereumAddress,\n getBalance: getEthereumBalance,\n getWalletClient: _options.getWalletClient,\n async getStepExecutor(\n options: StepExecutorOptions\n ): Promise<EthereumStepExecutor> {\n if (!_options.getWalletClient) {\n throw new Error('Client is not provided.')\n }\n\n const walletClient = await _options.getWalletClient()\n\n const executor = new EthereumStepExecutor({\n client: walletClient,\n switchChain: _options.switchChain,\n disableMessageSigning: _options.disableMessageSigning,\n routeId: options.routeId,\n executionOptions: {\n ...options.executionOptions,\n },\n })\n\n return executor\n },\n setOptions(options: EthereumProviderOptions) {\n Object.assign(_options, options)\n },\n }\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,iBACd,SACqB;CACrB,MAAM,WAAoC,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"EthereumProvider.js","names":["ChainType","resolveEthereumAddress","getEthereumBalance","EthereumStepExecutor"],"sources":["../../src/EthereumProvider.ts"],"sourcesContent":["import { ChainType, type StepExecutorOptions } from '@lifi/sdk'\nimport { isAddress } from 'viem'\nimport { getEthereumBalance } from './actions/getEthereumBalance.js'\nimport { resolveEthereumAddress } from './actions/resolveEthereumAddress.js'\nimport { EthereumStepExecutor } from './core/EthereumStepExecutor.js'\nimport type { EthereumProviderOptions, EthereumSDKProvider } from './types.js'\n\nexport function EthereumProvider(\n options?: EthereumProviderOptions\n): EthereumSDKProvider {\n const _options: EthereumProviderOptions = options ?? {}\n return {\n get type() {\n return ChainType.EVM\n },\n get options() {\n return _options\n },\n isAddress,\n resolveAddress: resolveEthereumAddress,\n getBalance: getEthereumBalance,\n getWalletClient: _options.getWalletClient,\n async getStepExecutor(\n options: StepExecutorOptions\n ): Promise<EthereumStepExecutor> {\n if (!_options.getWalletClient) {\n throw new Error('Client is not provided.')\n }\n\n const walletClient = await _options.getWalletClient()\n\n const executor = new EthereumStepExecutor({\n client: walletClient,\n switchChain: _options.switchChain,\n disableMessageSigning: _options.disableMessageSigning,\n routeId: options.routeId,\n executionOptions: {\n ...options.executionOptions,\n },\n })\n\n return executor\n },\n setOptions(options: EthereumProviderOptions) {\n Object.assign(_options, options)\n },\n }\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,iBACd,SACqB;CACrB,MAAM,WAAoC,WAAW,EAAE;CACvD,OAAO;EACL,IAAI,OAAO;GACT,OAAOA,UAAAA,UAAU;;EAEnB,IAAI,UAAU;GACZ,OAAO;;EAET,WAAA,KAAA;EACA,gBAAgBC,uCAAAA;EAChB,YAAYC,mCAAAA;EACZ,iBAAiB,SAAS;EAC1B,MAAM,gBACJ,SAC+B;GAC/B,IAAI,CAAC,SAAS,iBACZ,MAAM,IAAI,MAAM,0BAA0B;GAe5C,OAAO,IAVcC,kCAAAA,qBAAqB;IACxC,QAAQ,MAHiB,SAAS,iBAAiB;IAInD,aAAa,SAAS;IACtB,uBAAuB,SAAS;IAChC,SAAS,QAAQ;IACjB,kBAAkB,EAChB,GAAG,QAAQ,kBACZ;IACF,CAEc;;EAEjB,WAAW,SAAkC;GAC3C,OAAO,OAAO,UAAU,QAAQ;;EAEnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkPermitSupport.js","names":["ChainType","getPublicClient","getActionWithFallback","getNativePermit","getAllowance"],"sources":["../../../src/actions/checkPermitSupport.ts"],"sourcesContent":["import { ChainType, type ExtendedChain, type SDKClient } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getPublicClient } from '../client/publicClient.js'\nimport { getNativePermit } from '../permits/getNativePermit.js'\nimport type { EthereumSDKProvider } from '../types.js'\nimport { getActionWithFallback } from '../utils/getActionWithFallback.js'\nimport { getAllowance } from './getAllowance.js'\n\ntype PermitSupport = {\n /** Whether the token supports EIP-2612 native permits */\n nativePermitSupported: boolean\n /** Whether Permit2 is available and has sufficient allowance */\n permit2AllowanceSufficient: boolean\n}\n\n/**\n * Checks what permit types are supported for a token on a specific chain.\n * Checks in order:\n * 1. Native permit (EIP-2612) support\n * 2. Permit2 availability and allowance\n *\n * @param client - The SDK client\n * @param chain - The chain to check permit support on\n * @param tokenAddress - The token address to check\n * @param ownerAddress - The address that would sign the permit\n * @param amount - The amount to check allowance against for Permit2\n * @returns Object indicating which permit types are supported\n */\nexport const checkPermitSupport = async (\n client: SDKClient,\n {\n chain,\n tokenAddress,\n ownerAddress,\n amount,\n }: {\n chain: ExtendedChain\n tokenAddress: Address\n ownerAddress: Address\n amount: bigint\n }\n): Promise<PermitSupport> => {\n const provider = client.getProvider(ChainType.EVM) as\n | EthereumSDKProvider\n | undefined\n let viemClient = await provider?.getWalletClient?.()\n\n if (!viemClient) {\n viemClient = await getPublicClient(client, chain.id)\n }\n\n const nativePermit = await getActionWithFallback(\n client,\n viemClient,\n getNativePermit,\n 'getNativePermit',\n {\n client,\n viemClient,\n chainId: chain.id,\n tokenAddress,\n spenderAddress: chain.permit2Proxy as Address,\n amount,\n }\n )\n\n let permit2Allowance: bigint | undefined\n // Check Permit2 allowance if available on chain\n if (chain.permit2) {\n permit2Allowance = await getAllowance(\n client,\n viemClient,\n tokenAddress,\n ownerAddress,\n chain.permit2 as Address\n )\n }\n\n return {\n nativePermitSupported: !!nativePermit,\n permit2AllowanceSufficient:\n !!permit2Allowance && permit2Allowance >= amount,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,qBAAqB,OAChC,QACA,EACE,OACA,cACA,cACA,aAOyB;CAI3B,IAAI,aAAa,MAHA,OAAO,YAAYA,UAAAA,UAAU,IAGf,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"checkPermitSupport.js","names":["ChainType","getPublicClient","getActionWithFallback","getNativePermit","getAllowance"],"sources":["../../../src/actions/checkPermitSupport.ts"],"sourcesContent":["import { ChainType, type ExtendedChain, type SDKClient } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getPublicClient } from '../client/publicClient.js'\nimport { getNativePermit } from '../permits/getNativePermit.js'\nimport type { EthereumSDKProvider } from '../types.js'\nimport { getActionWithFallback } from '../utils/getActionWithFallback.js'\nimport { getAllowance } from './getAllowance.js'\n\ntype PermitSupport = {\n /** Whether the token supports EIP-2612 native permits */\n nativePermitSupported: boolean\n /** Whether Permit2 is available and has sufficient allowance */\n permit2AllowanceSufficient: boolean\n}\n\n/**\n * Checks what permit types are supported for a token on a specific chain.\n * Checks in order:\n * 1. Native permit (EIP-2612) support\n * 2. Permit2 availability and allowance\n *\n * @param client - The SDK client\n * @param chain - The chain to check permit support on\n * @param tokenAddress - The token address to check\n * @param ownerAddress - The address that would sign the permit\n * @param amount - The amount to check allowance against for Permit2\n * @returns Object indicating which permit types are supported\n */\nexport const checkPermitSupport = async (\n client: SDKClient,\n {\n chain,\n tokenAddress,\n ownerAddress,\n amount,\n }: {\n chain: ExtendedChain\n tokenAddress: Address\n ownerAddress: Address\n amount: bigint\n }\n): Promise<PermitSupport> => {\n const provider = client.getProvider(ChainType.EVM) as\n | EthereumSDKProvider\n | undefined\n let viemClient = await provider?.getWalletClient?.()\n\n if (!viemClient) {\n viemClient = await getPublicClient(client, chain.id)\n }\n\n const nativePermit = await getActionWithFallback(\n client,\n viemClient,\n getNativePermit,\n 'getNativePermit',\n {\n client,\n viemClient,\n chainId: chain.id,\n tokenAddress,\n spenderAddress: chain.permit2Proxy as Address,\n amount,\n }\n )\n\n let permit2Allowance: bigint | undefined\n // Check Permit2 allowance if available on chain\n if (chain.permit2) {\n permit2Allowance = await getAllowance(\n client,\n viemClient,\n tokenAddress,\n ownerAddress,\n chain.permit2 as Address\n )\n }\n\n return {\n nativePermitSupported: !!nativePermit,\n permit2AllowanceSufficient:\n !!permit2Allowance && permit2Allowance >= amount,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,qBAAqB,OAChC,QACA,EACE,OACA,cACA,cACA,aAOyB;CAI3B,IAAI,aAAa,MAHA,OAAO,YAAYA,UAAAA,UAAU,IAGf,EAAE,mBAAmB;CAEpD,IAAI,CAAC,YACH,aAAa,MAAMC,4BAAAA,gBAAgB,QAAQ,MAAM,GAAG;CAGtD,MAAM,eAAe,MAAMC,oCAAAA,sBACzB,QACA,YACAC,gCAAAA,iBACA,mBACA;EACE;EACA;EACA,SAAS,MAAM;EACf;EACA,gBAAgB,MAAM;EACtB;EACD,CACF;CAED,IAAI;CAEJ,IAAI,MAAM,SACR,mBAAmB,MAAMC,6BAAAA,aACvB,QACA,YACA,cACA,cACA,MAAM,QACP;CAGH,OAAO;EACL,uBAAuB,CAAC,CAAC;EACzB,4BACE,CAAC,CAAC,oBAAoB,oBAAoB;EAC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAccountCode.js","names":["getPublicClient","getCode"],"sources":["../../../src/actions/getAccountCode.ts"],"sourcesContent":["import { type SDKClient, withDedupe } from '@lifi/sdk'\nimport type { Address, Hex } from 'viem'\nimport { getCode } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport { getPublicClient } from '../client/publicClient.js'\n\ntype GetAccountCodeParams = {\n client: SDKClient\n chainId: number\n address: Address\n}\n\n/**\n * Shared `eth_getCode` fetcher. Deliberately uncached across executions so\n * a wallet re-delegate / upgrade / un-delegate in another tab is never\n * served stale; `withDedupe` only collapses concurrent in-flight callers.\n *\n * Always queries the SDK's per-chain public client (never the wallet\n * client) so cross-chain steps and post-chain-switch flows read from the\n * chain the step actually executes on.\n *\n * Returns `undefined` on RPC failure. Each caller MUST classify that\n * explicitly (e.g. \"treat as EOA\" vs. \"treat as not-permittable\") — there\n * is no single safe default.\n */\nexport const getAccountCode = ({\n client,\n chainId,\n address,\n}: GetAccountCodeParams): Promise<Hex | undefined> =>\n withDedupe(\n async () => {\n try {\n const publicClient = await getPublicClient(client, chainId)\n return await getAction(publicClient, getCode, 'getCode')({ address })\n } catch {\n return undefined\n }\n },\n { id: `getAccountCode:${chainId}:${address.toLowerCase()}` }\n )\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAyBA,MAAa,kBAAkB,EAC7B,QACA,SACA,eAAA,GAAA,UAAA,YAGE,YAAY;
|
|
1
|
+
{"version":3,"file":"getAccountCode.js","names":["getPublicClient","getCode"],"sources":["../../../src/actions/getAccountCode.ts"],"sourcesContent":["import { type SDKClient, withDedupe } from '@lifi/sdk'\nimport type { Address, Hex } from 'viem'\nimport { getCode } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport { getPublicClient } from '../client/publicClient.js'\n\ntype GetAccountCodeParams = {\n client: SDKClient\n chainId: number\n address: Address\n}\n\n/**\n * Shared `eth_getCode` fetcher. Deliberately uncached across executions so\n * a wallet re-delegate / upgrade / un-delegate in another tab is never\n * served stale; `withDedupe` only collapses concurrent in-flight callers.\n *\n * Always queries the SDK's per-chain public client (never the wallet\n * client) so cross-chain steps and post-chain-switch flows read from the\n * chain the step actually executes on.\n *\n * Returns `undefined` on RPC failure. Each caller MUST classify that\n * explicitly (e.g. \"treat as EOA\" vs. \"treat as not-permittable\") — there\n * is no single safe default.\n */\nexport const getAccountCode = ({\n client,\n chainId,\n address,\n}: GetAccountCodeParams): Promise<Hex | undefined> =>\n withDedupe(\n async () => {\n try {\n const publicClient = await getPublicClient(client, chainId)\n return await getAction(publicClient, getCode, 'getCode')({ address })\n } catch {\n return undefined\n }\n },\n { id: `getAccountCode:${chainId}:${address.toLowerCase()}` }\n )\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAyBA,MAAa,kBAAkB,EAC7B,QACA,SACA,eAAA,GAAA,UAAA,YAGE,YAAY;CACV,IAAI;EAEF,OAAO,OAAA,GAAA,WAAA,WAAgB,MADIA,4BAAAA,gBAAgB,QAAQ,QAAQ,EACtBC,aAAAA,SAAS,UAAU,CAAC,EAAE,SAAS,CAAC;SAC/D;EACN;;GAGJ,EAAE,IAAI,kBAAkB,QAAQ,GAAG,QAAQ,aAAa,IAAI,CAC7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAllowance.js","names":["getActionWithFallback","readContract","allowanceAbi","getMulticallAddress","multicall","isZeroAddress","getPublicClient"],"sources":["../../../src/actions/getAllowance.ts"],"sourcesContent":["import type { BaseToken, ChainId, SDKClient } from '@lifi/sdk'\nimport type { Address, Client } from 'viem'\nimport { multicall, readContract } from 'viem/actions'\nimport { getPublicClient } from '../client/publicClient.js'\nimport type {\n TokenAllowance,\n TokenSpender,\n TokenSpenderAllowance,\n} from '../types.js'\nimport { allowanceAbi } from '../utils/abi.js'\nimport { getActionWithFallback } from '../utils/getActionWithFallback.js'\nimport { isZeroAddress } from '../utils/isZeroAddress.js'\nimport { getMulticallAddress } from './getMulticallAddress.js'\n\nexport const getAllowance = async (\n client: SDKClient,\n viemClient: Client,\n tokenAddress: Address,\n ownerAddress: Address,\n spenderAddress: Address\n): Promise<bigint> => {\n try {\n const approved = await getActionWithFallback(\n client,\n viemClient,\n readContract,\n 'readContract',\n {\n address: tokenAddress as Address,\n abi: allowanceAbi,\n functionName: 'allowance' as const,\n args: [ownerAddress, spenderAddress] as const,\n }\n )\n return approved as bigint\n } catch (_e) {\n return 0n\n }\n}\n\nexport const getAllowanceMulticall = async (\n client: SDKClient,\n viemClient: Client,\n chainId: ChainId,\n tokens: TokenSpender[],\n ownerAddress: Address\n): Promise<TokenSpenderAllowance[]> => {\n if (!tokens.length) {\n return []\n }\n const multicallAddress = await getMulticallAddress(client, chainId)\n if (!multicallAddress) {\n throw new Error(`No multicall address configured for chainId ${chainId}.`)\n }\n const contracts = tokens.map((token) => ({\n address: token.token.address as Address,\n abi: allowanceAbi,\n functionName: 'allowance',\n args: [ownerAddress, token.spenderAddress],\n }))\n\n const results = await getActionWithFallback(\n client,\n viemClient,\n multicall,\n 'multicall',\n {\n contracts,\n multicallAddress: multicallAddress as Address,\n }\n )\n\n if (!results.length) {\n throw new Error(\n `Couldn't load allowance from chainId ${chainId} using multicall.`\n )\n }\n\n return tokens.map(({ token, spenderAddress }, i: number) => ({\n token,\n spenderAddress,\n allowance: results[i].result as bigint,\n }))\n}\n\n/**\n * Get the current allowance for a certain token.\n * @param client - The SDK client\n * @param token - The token that should be checked\n * @param ownerAddress - The owner of the token\n * @param spenderAddress - The spender address that has to be approved\n * @returns Returns allowance\n */\nexport const getTokenAllowance = async (\n client: SDKClient,\n token: BaseToken,\n ownerAddress: Address,\n spenderAddress: Address\n): Promise<bigint | undefined> => {\n // native token don't need approval\n if (isZeroAddress(token.address)) {\n return\n }\n\n const viemClient = await getPublicClient(client, token.chainId)\n\n const approved = await getAllowance(\n client,\n viemClient,\n token.address as Address,\n ownerAddress,\n spenderAddress\n )\n return approved\n}\n\n/**\n * Get the current allowance for a list of token/spender address pairs.\n * @param client - The SDK client\n * @param ownerAddress - The owner of the tokens\n * @param tokens - A list of token and spender address pairs\n * @returns Returns array of tokens and their allowance\n */\nexport const getTokenAllowanceMulticall = async (\n client: SDKClient,\n ownerAddress: Address,\n tokens: TokenSpender[]\n): Promise<TokenAllowance[]> => {\n // filter out native tokens\n const filteredTokens = tokens.filter(\n ({ token }) => !isZeroAddress(token.address)\n )\n\n // group by chain\n const tokenDataByChain: { [chainId: number]: TokenSpender[] } = {}\n for (const data of filteredTokens) {\n if (!tokenDataByChain[data.token.chainId]) {\n tokenDataByChain[data.token.chainId] = []\n }\n tokenDataByChain[data.token.chainId].push(data)\n }\n\n const chainKeys = Object.keys(tokenDataByChain).map(Number.parseInt)\n\n const allowances = (\n await Promise.all(\n chainKeys.map(async (chainId) => {\n const viemClient = await getPublicClient(client, chainId)\n // get allowances for current chain and token list\n return getAllowanceMulticall(\n client,\n viemClient,\n chainId,\n tokenDataByChain[chainId],\n ownerAddress\n )\n })\n )\n ).flat()\n\n return allowances\n}\n"],"mappings":";;;;;;;;AAcA,MAAa,eAAe,OAC1B,QACA,YACA,cACA,cACA,mBACoB;
|
|
1
|
+
{"version":3,"file":"getAllowance.js","names":["getActionWithFallback","readContract","allowanceAbi","getMulticallAddress","multicall","isZeroAddress","getPublicClient"],"sources":["../../../src/actions/getAllowance.ts"],"sourcesContent":["import type { BaseToken, ChainId, SDKClient } from '@lifi/sdk'\nimport type { Address, Client } from 'viem'\nimport { multicall, readContract } from 'viem/actions'\nimport { getPublicClient } from '../client/publicClient.js'\nimport type {\n TokenAllowance,\n TokenSpender,\n TokenSpenderAllowance,\n} from '../types.js'\nimport { allowanceAbi } from '../utils/abi.js'\nimport { getActionWithFallback } from '../utils/getActionWithFallback.js'\nimport { isZeroAddress } from '../utils/isZeroAddress.js'\nimport { getMulticallAddress } from './getMulticallAddress.js'\n\nexport const getAllowance = async (\n client: SDKClient,\n viemClient: Client,\n tokenAddress: Address,\n ownerAddress: Address,\n spenderAddress: Address\n): Promise<bigint> => {\n try {\n const approved = await getActionWithFallback(\n client,\n viemClient,\n readContract,\n 'readContract',\n {\n address: tokenAddress as Address,\n abi: allowanceAbi,\n functionName: 'allowance' as const,\n args: [ownerAddress, spenderAddress] as const,\n }\n )\n return approved as bigint\n } catch (_e) {\n return 0n\n }\n}\n\nexport const getAllowanceMulticall = async (\n client: SDKClient,\n viemClient: Client,\n chainId: ChainId,\n tokens: TokenSpender[],\n ownerAddress: Address\n): Promise<TokenSpenderAllowance[]> => {\n if (!tokens.length) {\n return []\n }\n const multicallAddress = await getMulticallAddress(client, chainId)\n if (!multicallAddress) {\n throw new Error(`No multicall address configured for chainId ${chainId}.`)\n }\n const contracts = tokens.map((token) => ({\n address: token.token.address as Address,\n abi: allowanceAbi,\n functionName: 'allowance',\n args: [ownerAddress, token.spenderAddress],\n }))\n\n const results = await getActionWithFallback(\n client,\n viemClient,\n multicall,\n 'multicall',\n {\n contracts,\n multicallAddress: multicallAddress as Address,\n }\n )\n\n if (!results.length) {\n throw new Error(\n `Couldn't load allowance from chainId ${chainId} using multicall.`\n )\n }\n\n return tokens.map(({ token, spenderAddress }, i: number) => ({\n token,\n spenderAddress,\n allowance: results[i].result as bigint,\n }))\n}\n\n/**\n * Get the current allowance for a certain token.\n * @param client - The SDK client\n * @param token - The token that should be checked\n * @param ownerAddress - The owner of the token\n * @param spenderAddress - The spender address that has to be approved\n * @returns Returns allowance\n */\nexport const getTokenAllowance = async (\n client: SDKClient,\n token: BaseToken,\n ownerAddress: Address,\n spenderAddress: Address\n): Promise<bigint | undefined> => {\n // native token don't need approval\n if (isZeroAddress(token.address)) {\n return\n }\n\n const viemClient = await getPublicClient(client, token.chainId)\n\n const approved = await getAllowance(\n client,\n viemClient,\n token.address as Address,\n ownerAddress,\n spenderAddress\n )\n return approved\n}\n\n/**\n * Get the current allowance for a list of token/spender address pairs.\n * @param client - The SDK client\n * @param ownerAddress - The owner of the tokens\n * @param tokens - A list of token and spender address pairs\n * @returns Returns array of tokens and their allowance\n */\nexport const getTokenAllowanceMulticall = async (\n client: SDKClient,\n ownerAddress: Address,\n tokens: TokenSpender[]\n): Promise<TokenAllowance[]> => {\n // filter out native tokens\n const filteredTokens = tokens.filter(\n ({ token }) => !isZeroAddress(token.address)\n )\n\n // group by chain\n const tokenDataByChain: { [chainId: number]: TokenSpender[] } = {}\n for (const data of filteredTokens) {\n if (!tokenDataByChain[data.token.chainId]) {\n tokenDataByChain[data.token.chainId] = []\n }\n tokenDataByChain[data.token.chainId].push(data)\n }\n\n const chainKeys = Object.keys(tokenDataByChain).map(Number.parseInt)\n\n const allowances = (\n await Promise.all(\n chainKeys.map(async (chainId) => {\n const viemClient = await getPublicClient(client, chainId)\n // get allowances for current chain and token list\n return getAllowanceMulticall(\n client,\n viemClient,\n chainId,\n tokenDataByChain[chainId],\n ownerAddress\n )\n })\n )\n ).flat()\n\n return allowances\n}\n"],"mappings":";;;;;;;;AAcA,MAAa,eAAe,OAC1B,QACA,YACA,cACA,cACA,mBACoB;CACpB,IAAI;EAaF,OAAO,MAZgBA,oCAAAA,sBACrB,QACA,YACAC,aAAAA,cACA,gBACA;GACE,SAAS;GACT,KAAKC,kBAAAA;GACL,cAAc;GACd,MAAM,CAAC,cAAc,eAAe;GACrC,CACF;UAEM,IAAI;EACX,OAAO;;;AAIX,MAAa,wBAAwB,OACnC,QACA,YACA,SACA,QACA,iBACqC;CACrC,IAAI,CAAC,OAAO,QACV,OAAO,EAAE;CAEX,MAAM,mBAAmB,MAAMC,oCAAAA,oBAAoB,QAAQ,QAAQ;CACnE,IAAI,CAAC,kBACH,MAAM,IAAI,MAAM,+CAA+C,QAAQ,GAAG;CAS5E,MAAM,UAAU,MAAMH,oCAAAA,sBACpB,QACA,YACAI,aAAAA,WACA,aACA;EACE,WAbc,OAAO,KAAK,WAAW;GACvC,SAAS,MAAM,MAAM;GACrB,KAAKF,kBAAAA;GACL,cAAc;GACd,MAAM,CAAC,cAAc,MAAM,eAAe;GAC3C,EAQY;EACS;EACnB,CACF;CAED,IAAI,CAAC,QAAQ,QACX,MAAM,IAAI,MACR,wCAAwC,QAAQ,mBACjD;CAGH,OAAO,OAAO,KAAK,EAAE,OAAO,kBAAkB,OAAe;EAC3D;EACA;EACA,WAAW,QAAQ,GAAG;EACvB,EAAE;;;;;;;;;;AAWL,MAAa,oBAAoB,OAC/B,QACA,OACA,cACA,mBACgC;CAEhC,IAAIG,4BAAAA,cAAc,MAAM,QAAQ,EAC9B;CAYF,OAAO,MAPgB,aACrB,QACA,MAJuBC,4BAAAA,gBAAgB,QAAQ,MAAM,QAAQ,EAK7D,MAAM,SACN,cACA,eACD;;;;;;;;;AAWH,MAAa,6BAA6B,OACxC,QACA,cACA,WAC8B;CAE9B,MAAM,iBAAiB,OAAO,QAC3B,EAAE,YAAY,CAACD,4BAAAA,cAAc,MAAM,QAAQ,CAC7C;CAGD,MAAM,mBAA0D,EAAE;CAClE,KAAK,MAAM,QAAQ,gBAAgB;EACjC,IAAI,CAAC,iBAAiB,KAAK,MAAM,UAC/B,iBAAiB,KAAK,MAAM,WAAW,EAAE;EAE3C,iBAAiB,KAAK,MAAM,SAAS,KAAK,KAAK;;CAGjD,MAAM,YAAY,OAAO,KAAK,iBAAiB,CAAC,IAAI,OAAO,SAAS;CAkBpE,QAfE,MAAM,QAAQ,IACZ,UAAU,IAAI,OAAO,YAAY;EAG/B,OAAO,sBACL,QACA,MAJuBC,4BAAAA,gBAAgB,QAAQ,QAAQ,EAKvD,SACA,iBAAiB,UACjB,aACD;GACD,CACH,EACD,MAEe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEthereumBalance.js","names":["getMulticallAddress","getPublicClient","isZeroAddress","getEthBalanceAbi","balanceOfAbi"],"sources":["../../../src/actions/getEthereumBalance.ts"],"sourcesContent":["import type { SDKClient, Token, TokenAmount } from '@lifi/sdk'\nimport type { Address, Client } from 'viem'\nimport {\n getBalance,\n getBlockNumber,\n multicall,\n readContract,\n} from 'viem/actions'\nimport { getPublicClient } from '../client/publicClient.js'\nimport { balanceOfAbi, getEthBalanceAbi } from '../utils/abi.js'\nimport { isZeroAddress } from '../utils/isZeroAddress.js'\nimport { getMulticallAddress } from './getMulticallAddress.js'\n\nexport const getEthereumBalance = async (\n client: SDKClient,\n walletAddress: Address,\n tokens: Token[]\n): Promise<TokenAmount[]> => {\n if (tokens.length === 0) {\n return []\n }\n const { chainId } = tokens[0]\n for (const token of tokens) {\n if (token.chainId !== chainId) {\n console.warn('Requested tokens have to be on the same chain.')\n }\n }\n\n const multicallAddress = await getMulticallAddress(client, chainId)\n\n const viemClient = await getPublicClient(client, chainId)\n if (multicallAddress && tokens.length > 1) {\n return getEVMBalanceMulticall(\n viemClient,\n tokens,\n walletAddress,\n multicallAddress\n )\n }\n return getEthereumBalanceDefault(viemClient, tokens, walletAddress)\n}\n\nconst getEVMBalanceMulticall = async (\n client: Client,\n tokens: Token[],\n walletAddress: string,\n multicallAddress: string\n): Promise<TokenAmount[]> => {\n const contracts = tokens.map((token) => {\n if (isZeroAddress(token.address)) {\n return {\n address: multicallAddress as Address,\n abi: getEthBalanceAbi,\n functionName: 'getEthBalance',\n args: [walletAddress],\n }\n }\n return {\n address: token.address as Address,\n abi: balanceOfAbi,\n functionName: 'balanceOf',\n args: [walletAddress],\n }\n })\n\n const [blockNumber, results] = await Promise.all([\n getBlockNumber(client),\n multicall(client, {\n contracts,\n multicallAddress: multicallAddress as Address,\n }),\n ])\n\n if (!results.length) {\n return []\n }\n\n return tokens.map((token, i: number) => {\n const result = results[i]\n if (result.status !== 'success') {\n // RPC sub-call failed — leave amount undefined so callers can\n // distinguish an unknown balance from a known zero.\n return {\n ...token,\n blockNumber,\n }\n }\n return {\n ...token,\n amount: result.result as bigint,\n blockNumber,\n }\n })\n}\n\nconst getEthereumBalanceDefault = async (\n client: Client,\n tokens: Token[],\n walletAddress: Address\n): Promise<TokenAmount[]> => {\n const queue: Promise<bigint>[] = tokens.map((token) => {\n if (isZeroAddress(token.address)) {\n return getBalance(client, {\n address: walletAddress as Address,\n })\n }\n return readContract(client, {\n address: token.address as Address,\n abi: balanceOfAbi,\n functionName: 'balanceOf',\n args: [walletAddress],\n }) as Promise<bigint>\n })\n\n const [blockNumber, results] = await Promise.all([\n getBlockNumber(client),\n Promise.allSettled(queue),\n ])\n\n const tokenAmounts: TokenAmount[] = tokens.map((token, index) => {\n const result = results[index]\n if (result.status === 'rejected') {\n return {\n ...token,\n blockNumber,\n }\n }\n return {\n ...token,\n amount: result.value,\n blockNumber,\n }\n })\n return tokenAmounts\n}\n"],"mappings":";;;;;;;AAaA,MAAa,qBAAqB,OAChC,QACA,eACA,WAC2B;
|
|
1
|
+
{"version":3,"file":"getEthereumBalance.js","names":["getMulticallAddress","getPublicClient","isZeroAddress","getEthBalanceAbi","balanceOfAbi"],"sources":["../../../src/actions/getEthereumBalance.ts"],"sourcesContent":["import type { SDKClient, Token, TokenAmount } from '@lifi/sdk'\nimport type { Address, Client } from 'viem'\nimport {\n getBalance,\n getBlockNumber,\n multicall,\n readContract,\n} from 'viem/actions'\nimport { getPublicClient } from '../client/publicClient.js'\nimport { balanceOfAbi, getEthBalanceAbi } from '../utils/abi.js'\nimport { isZeroAddress } from '../utils/isZeroAddress.js'\nimport { getMulticallAddress } from './getMulticallAddress.js'\n\nexport const getEthereumBalance = async (\n client: SDKClient,\n walletAddress: Address,\n tokens: Token[]\n): Promise<TokenAmount[]> => {\n if (tokens.length === 0) {\n return []\n }\n const { chainId } = tokens[0]\n for (const token of tokens) {\n if (token.chainId !== chainId) {\n console.warn('Requested tokens have to be on the same chain.')\n }\n }\n\n const multicallAddress = await getMulticallAddress(client, chainId)\n\n const viemClient = await getPublicClient(client, chainId)\n if (multicallAddress && tokens.length > 1) {\n return getEVMBalanceMulticall(\n viemClient,\n tokens,\n walletAddress,\n multicallAddress\n )\n }\n return getEthereumBalanceDefault(viemClient, tokens, walletAddress)\n}\n\nconst getEVMBalanceMulticall = async (\n client: Client,\n tokens: Token[],\n walletAddress: string,\n multicallAddress: string\n): Promise<TokenAmount[]> => {\n const contracts = tokens.map((token) => {\n if (isZeroAddress(token.address)) {\n return {\n address: multicallAddress as Address,\n abi: getEthBalanceAbi,\n functionName: 'getEthBalance',\n args: [walletAddress],\n }\n }\n return {\n address: token.address as Address,\n abi: balanceOfAbi,\n functionName: 'balanceOf',\n args: [walletAddress],\n }\n })\n\n const [blockNumber, results] = await Promise.all([\n getBlockNumber(client),\n multicall(client, {\n contracts,\n multicallAddress: multicallAddress as Address,\n }),\n ])\n\n if (!results.length) {\n return []\n }\n\n return tokens.map((token, i: number) => {\n const result = results[i]\n if (result.status !== 'success') {\n // RPC sub-call failed — leave amount undefined so callers can\n // distinguish an unknown balance from a known zero.\n return {\n ...token,\n blockNumber,\n }\n }\n return {\n ...token,\n amount: result.result as bigint,\n blockNumber,\n }\n })\n}\n\nconst getEthereumBalanceDefault = async (\n client: Client,\n tokens: Token[],\n walletAddress: Address\n): Promise<TokenAmount[]> => {\n const queue: Promise<bigint>[] = tokens.map((token) => {\n if (isZeroAddress(token.address)) {\n return getBalance(client, {\n address: walletAddress as Address,\n })\n }\n return readContract(client, {\n address: token.address as Address,\n abi: balanceOfAbi,\n functionName: 'balanceOf',\n args: [walletAddress],\n }) as Promise<bigint>\n })\n\n const [blockNumber, results] = await Promise.all([\n getBlockNumber(client),\n Promise.allSettled(queue),\n ])\n\n const tokenAmounts: TokenAmount[] = tokens.map((token, index) => {\n const result = results[index]\n if (result.status === 'rejected') {\n return {\n ...token,\n blockNumber,\n }\n }\n return {\n ...token,\n amount: result.value,\n blockNumber,\n }\n })\n return tokenAmounts\n}\n"],"mappings":";;;;;;;AAaA,MAAa,qBAAqB,OAChC,QACA,eACA,WAC2B;CAC3B,IAAI,OAAO,WAAW,GACpB,OAAO,EAAE;CAEX,MAAM,EAAE,YAAY,OAAO;CAC3B,KAAK,MAAM,SAAS,QAClB,IAAI,MAAM,YAAY,SACpB,QAAQ,KAAK,iDAAiD;CAIlE,MAAM,mBAAmB,MAAMA,oCAAAA,oBAAoB,QAAQ,QAAQ;CAEnE,MAAM,aAAa,MAAMC,4BAAAA,gBAAgB,QAAQ,QAAQ;CACzD,IAAI,oBAAoB,OAAO,SAAS,GACtC,OAAO,uBACL,YACA,QACA,eACA,iBACD;CAEH,OAAO,0BAA0B,YAAY,QAAQ,cAAc;;AAGrE,MAAM,yBAAyB,OAC7B,QACA,QACA,eACA,qBAC2B;CAC3B,MAAM,YAAY,OAAO,KAAK,UAAU;EACtC,IAAIC,4BAAAA,cAAc,MAAM,QAAQ,EAC9B,OAAO;GACL,SAAS;GACT,KAAKC,kBAAAA;GACL,cAAc;GACd,MAAM,CAAC,cAAc;GACtB;EAEH,OAAO;GACL,SAAS,MAAM;GACf,KAAKC,kBAAAA;GACL,cAAc;GACd,MAAM,CAAC,cAAc;GACtB;GACD;CAEF,MAAM,CAAC,aAAa,WAAW,MAAM,QAAQ,IAAI,EAAA,GAAA,aAAA,gBAChC,OAAO,GAAA,GAAA,aAAA,WACZ,QAAQ;EAChB;EACkB;EACnB,CAAC,CACH,CAAC;CAEF,IAAI,CAAC,QAAQ,QACX,OAAO,EAAE;CAGX,OAAO,OAAO,KAAK,OAAO,MAAc;EACtC,MAAM,SAAS,QAAQ;EACvB,IAAI,OAAO,WAAW,WAGpB,OAAO;GACL,GAAG;GACH;GACD;EAEH,OAAO;GACL,GAAG;GACH,QAAQ,OAAO;GACf;GACD;GACD;;AAGJ,MAAM,4BAA4B,OAChC,QACA,QACA,kBAC2B;CAC3B,MAAM,QAA2B,OAAO,KAAK,UAAU;EACrD,IAAIF,4BAAAA,cAAc,MAAM,QAAQ,EAC9B,QAAA,GAAA,aAAA,YAAkB,QAAQ,EACxB,SAAS,eACV,CAAC;EAEJ,QAAA,GAAA,aAAA,cAAoB,QAAQ;GAC1B,SAAS,MAAM;GACf,KAAKE,kBAAAA;GACL,cAAc;GACd,MAAM,CAAC,cAAc;GACtB,CAAC;GACF;CAEF,MAAM,CAAC,aAAa,WAAW,MAAM,QAAQ,IAAI,EAAA,GAAA,aAAA,gBAChC,OAAO,EACtB,QAAQ,WAAW,MAAM,CAC1B,CAAC;CAgBF,OAdoC,OAAO,KAAK,OAAO,UAAU;EAC/D,MAAM,SAAS,QAAQ;EACvB,IAAI,OAAO,WAAW,YACpB,OAAO;GACL,GAAG;GACH;GACD;EAEH,OAAO;GACL,GAAG;GACH,QAAQ,OAAO;GACf;GACD;GAEgB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMaxPriorityFeePerGas.js","names":["getActionWithFallback","getBlock","median"],"sources":["../../../src/actions/getMaxPriorityFeePerGas.ts"],"sourcesContent":["import type { SDKClient } from '@lifi/sdk'\nimport type { Client, Transaction } from 'viem'\nimport { getBlock } from 'viem/actions'\nimport { getActionWithFallback } from '../utils/getActionWithFallback.js'\nimport { median } from '../utils/median.js'\n\nexport const getMaxPriorityFeePerGas = async (\n client: SDKClient,\n viemClient: Client\n): Promise<bigint | undefined> => {\n const block = await getActionWithFallback(\n client,\n viemClient,\n getBlock,\n 'getBlock',\n {\n includeTransactions: true,\n }\n )\n\n const maxPriorityFeePerGasList = (block.transactions as Transaction[])\n .filter((tx) => tx.maxPriorityFeePerGas)\n .map((tx) => tx.maxPriorityFeePerGas) as bigint[]\n\n if (!maxPriorityFeePerGasList.length) {\n return\n }\n\n let maxPriorityFeePerGasSum = 0n\n for (const value of maxPriorityFeePerGasList) {\n maxPriorityFeePerGasSum += value\n }\n\n const maxPriorityFeePerGasMedian = median(maxPriorityFeePerGasList) ?? 0n\n\n const maxPriorityFeePerGasAvg =\n maxPriorityFeePerGasSum / BigInt(maxPriorityFeePerGasList.length)\n\n return maxPriorityFeePerGasMedian > maxPriorityFeePerGasAvg\n ? maxPriorityFeePerGasAvg\n : maxPriorityFeePerGasMedian\n}\n"],"mappings":";;;;;AAMA,MAAa,0BAA0B,OACrC,QACA,eACgC;CAWhC,MAAM,4BAA4B,MAVdA,oCAAAA,sBAClB,QACA,YACAC,aAAAA,UACA,YACA,EACE,qBAAqB,MACtB,CACF,EAEuC,aACrC,QAAQ,OAAO,GAAG,qBAAqB,CACvC,KAAK,OAAO,GAAG,qBAAqB;
|
|
1
|
+
{"version":3,"file":"getMaxPriorityFeePerGas.js","names":["getActionWithFallback","getBlock","median"],"sources":["../../../src/actions/getMaxPriorityFeePerGas.ts"],"sourcesContent":["import type { SDKClient } from '@lifi/sdk'\nimport type { Client, Transaction } from 'viem'\nimport { getBlock } from 'viem/actions'\nimport { getActionWithFallback } from '../utils/getActionWithFallback.js'\nimport { median } from '../utils/median.js'\n\nexport const getMaxPriorityFeePerGas = async (\n client: SDKClient,\n viemClient: Client\n): Promise<bigint | undefined> => {\n const block = await getActionWithFallback(\n client,\n viemClient,\n getBlock,\n 'getBlock',\n {\n includeTransactions: true,\n }\n )\n\n const maxPriorityFeePerGasList = (block.transactions as Transaction[])\n .filter((tx) => tx.maxPriorityFeePerGas)\n .map((tx) => tx.maxPriorityFeePerGas) as bigint[]\n\n if (!maxPriorityFeePerGasList.length) {\n return\n }\n\n let maxPriorityFeePerGasSum = 0n\n for (const value of maxPriorityFeePerGasList) {\n maxPriorityFeePerGasSum += value\n }\n\n const maxPriorityFeePerGasMedian = median(maxPriorityFeePerGasList) ?? 0n\n\n const maxPriorityFeePerGasAvg =\n maxPriorityFeePerGasSum / BigInt(maxPriorityFeePerGasList.length)\n\n return maxPriorityFeePerGasMedian > maxPriorityFeePerGasAvg\n ? maxPriorityFeePerGasAvg\n : maxPriorityFeePerGasMedian\n}\n"],"mappings":";;;;;AAMA,MAAa,0BAA0B,OACrC,QACA,eACgC;CAWhC,MAAM,4BAA4B,MAVdA,oCAAAA,sBAClB,QACA,YACAC,aAAAA,UACA,YACA,EACE,qBAAqB,MACtB,CACF,EAEuC,aACrC,QAAQ,OAAO,GAAG,qBAAqB,CACvC,KAAK,OAAO,GAAG,qBAAqB;CAEvC,IAAI,CAAC,yBAAyB,QAC5B;CAGF,IAAI,0BAA0B;CAC9B,KAAK,MAAM,SAAS,0BAClB,2BAA2B;CAG7B,MAAM,6BAA6BC,qBAAAA,OAAO,yBAAyB,IAAI;CAEvE,MAAM,0BACJ,0BAA0B,OAAO,yBAAyB,OAAO;CAEnE,OAAO,6BAA6B,0BAChC,0BACA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMulticallAddress.js","names":["ChainType"],"sources":["../../../src/actions/getMulticallAddress.ts"],"sourcesContent":["import { type ChainId, ChainType, type SDKClient } from '@lifi/sdk'\nimport type { Address } from 'viem'\n\nexport const getMulticallAddress = async (\n client: SDKClient,\n chainId: ChainId\n): Promise<Address | undefined> => {\n const chains = await client.getChains()\n return chains?.find(\n (chain) => chain.id === chainId && chain.chainType === ChainType.EVM\n )?.multicallAddress as Address\n}\n"],"mappings":";;;AAGA,MAAa,sBAAsB,OACjC,QACA,YACiC;
|
|
1
|
+
{"version":3,"file":"getMulticallAddress.js","names":["ChainType"],"sources":["../../../src/actions/getMulticallAddress.ts"],"sourcesContent":["import { type ChainId, ChainType, type SDKClient } from '@lifi/sdk'\nimport type { Address } from 'viem'\n\nexport const getMulticallAddress = async (\n client: SDKClient,\n chainId: ChainId\n): Promise<Address | undefined> => {\n const chains = await client.getChains()\n return chains?.find(\n (chain) => chain.id === chainId && chain.chainType === ChainType.EVM\n )?.multicallAddress as Address\n}\n"],"mappings":";;;AAGA,MAAa,sBAAsB,OACjC,QACA,YACiC;CAEjC,QAAO,MADc,OAAO,WAAW,GACxB,MACZ,UAAU,MAAM,OAAO,WAAW,MAAM,cAAcA,UAAAA,UAAU,IAClE,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isBatchingSupported.js","names":["ChainType","getCapabilities"],"sources":["../../../src/actions/isBatchingSupported.ts"],"sourcesContent":["import { ChainType, type SDKClient, sleep } from '@lifi/sdk'\nimport type { Client } from 'viem'\nimport { getCapabilities } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { EthereumSDKProvider } from '../types.js'\n\nexport async function isBatchingSupported(\n client: SDKClient,\n {\n client: viemClient,\n chainId,\n skipReady = false,\n }: {\n client?: Client\n chainId: number\n skipReady?: boolean\n }\n): Promise<boolean> {\n const _client =\n viemClient ??\n (await (\n client.getProvider(ChainType.EVM) as EthereumSDKProvider\n )?.getWalletClient?.())\n\n if (!_client) {\n throw new Error('WalletClient is not provided.')\n }\n\n try {\n const capabilities = await Promise.race([\n getAction(_client, getCapabilities, 'getCapabilities')({ chainId }),\n sleep(2_000),\n ])\n return (\n capabilities?.atomicBatch?.supported ||\n capabilities?.atomic?.status === 'supported' ||\n (!skipReady && capabilities?.atomic?.status === 'ready') ||\n false\n )\n } catch {\n // If the wallet does not support getCapabilities or the call fails,\n // we assume that atomic batch is not supported\n return false\n }\n}\n"],"mappings":";;;;;AAMA,eAAsB,oBACpB,QACA,EACE,QAAQ,YACR,SACA,YAAY,SAMI;CAClB,MAAM,UACJ,cACC,MACC,OAAO,YAAYA,UAAAA,UAAU,IAAI,EAChC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"isBatchingSupported.js","names":["ChainType","getCapabilities"],"sources":["../../../src/actions/isBatchingSupported.ts"],"sourcesContent":["import { ChainType, type SDKClient, sleep } from '@lifi/sdk'\nimport type { Client } from 'viem'\nimport { getCapabilities } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { EthereumSDKProvider } from '../types.js'\n\nexport async function isBatchingSupported(\n client: SDKClient,\n {\n client: viemClient,\n chainId,\n skipReady = false,\n }: {\n client?: Client\n chainId: number\n skipReady?: boolean\n }\n): Promise<boolean> {\n const _client =\n viemClient ??\n (await (\n client.getProvider(ChainType.EVM) as EthereumSDKProvider\n )?.getWalletClient?.())\n\n if (!_client) {\n throw new Error('WalletClient is not provided.')\n }\n\n try {\n const capabilities = await Promise.race([\n getAction(_client, getCapabilities, 'getCapabilities')({ chainId }),\n sleep(2_000),\n ])\n return (\n capabilities?.atomicBatch?.supported ||\n capabilities?.atomic?.status === 'supported' ||\n (!skipReady && capabilities?.atomic?.status === 'ready') ||\n false\n )\n } catch {\n // If the wallet does not support getCapabilities or the call fails,\n // we assume that atomic batch is not supported\n return false\n }\n}\n"],"mappings":";;;;;AAMA,eAAsB,oBACpB,QACA,EACE,QAAQ,YACR,SACA,YAAY,SAMI;CAClB,MAAM,UACJ,cACC,MACC,OAAO,YAAYA,UAAAA,UAAU,IAAI,EAChC,mBAAmB;CAExB,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,gCAAgC;CAGlD,IAAI;EACF,MAAM,eAAe,MAAM,QAAQ,KAAK,EAAA,GAAA,WAAA,WAC5B,SAASC,aAAAA,iBAAiB,kBAAkB,CAAC,EAAE,SAAS,CAAC,GAAA,GAAA,UAAA,OAC7D,IAAM,CACb,CAAC;EACF,OACE,cAAc,aAAa,aAC3B,cAAc,QAAQ,WAAW,eAChC,CAAC,aAAa,cAAc,QAAQ,WAAW,WAChD;SAEI;EAGN,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isSafeSignature.js","names":["isSafeWallet","getSafeApiKey"],"sources":["../../../src/actions/isSafeSignature.ts"],"sourcesContent":["import type { SDKClient } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getSafeApiKey } from '../utils/getSafeApiKey.js'\nimport { isSafeWallet } from './isSafeWallet.js'\n\nexport interface IsSafeSignatureProps {\n hash: string\n chainId: number\n address?: Address\n}\n\n/**\n * Check if a transaction response is a Safe wallet signature (queued transaction)\n *\n * Safe wallets via Rabby return a signature (65 bytes = 132 chars) instead of\n * a transaction hash (32 bytes = 66 chars) for queued transactions.\n */\nexport async function isSafeSignature(\n client: SDKClient,\n { hash, chainId, address }: IsSafeSignatureProps\n): Promise<boolean> {\n // Signature: 65 bytes = 130 hex chars + 0x prefix = 132 chars\n // Tx hash: 32 bytes = 64 hex chars + 0x prefix = 66 chars\n if (!hash.startsWith('0x') || hash.length <= 66) {\n return false\n }\n\n if (!address) {\n return false\n }\n\n const safeApiKey = getSafeApiKey(client)\n return isSafeWallet({ client, chainId, address, safeApiKey })\n}\n"],"mappings":";;;;;;;;;;AAiBA,eAAsB,gBACpB,QACA,EAAE,MAAM,SAAS,WACC;
|
|
1
|
+
{"version":3,"file":"isSafeSignature.js","names":["isSafeWallet","getSafeApiKey"],"sources":["../../../src/actions/isSafeSignature.ts"],"sourcesContent":["import type { SDKClient } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getSafeApiKey } from '../utils/getSafeApiKey.js'\nimport { isSafeWallet } from './isSafeWallet.js'\n\nexport interface IsSafeSignatureProps {\n hash: string\n chainId: number\n address?: Address\n}\n\n/**\n * Check if a transaction response is a Safe wallet signature (queued transaction)\n *\n * Safe wallets via Rabby return a signature (65 bytes = 132 chars) instead of\n * a transaction hash (32 bytes = 66 chars) for queued transactions.\n */\nexport async function isSafeSignature(\n client: SDKClient,\n { hash, chainId, address }: IsSafeSignatureProps\n): Promise<boolean> {\n // Signature: 65 bytes = 130 hex chars + 0x prefix = 132 chars\n // Tx hash: 32 bytes = 64 hex chars + 0x prefix = 66 chars\n if (!hash.startsWith('0x') || hash.length <= 66) {\n return false\n }\n\n if (!address) {\n return false\n }\n\n const safeApiKey = getSafeApiKey(client)\n return isSafeWallet({ client, chainId, address, safeApiKey })\n}\n"],"mappings":";;;;;;;;;;AAiBA,eAAsB,gBACpB,QACA,EAAE,MAAM,SAAS,WACC;CAGlB,IAAI,CAAC,KAAK,WAAW,KAAK,IAAI,KAAK,UAAU,IAC3C,OAAO;CAGT,IAAI,CAAC,SACH,OAAO;CAIT,OAAOA,6BAAAA,aAAa;EAAE;EAAQ;EAAS;EAAS,YAD7BC,4BAAAA,cAAc,OACyB;EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isSafeWallet.js","names":["LruMap","getAccountCode","isSmartContractWalletCode","getSafeClient"],"sources":["../../../src/actions/isSafeWallet.ts"],"sourcesContent":["import { LruMap, type SDKClient } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getSafeClient } from '../client/safeClient.js'\nimport { getAccountCode } from './getAccountCode.js'\nimport { isSmartContractWalletCode } from './isSmartContractWallet.js'\n\n// Caches the Safe Transaction Service verdict (network round trip). The\n// underlying `eth_getCode` is intentionally uncached — see `getAccountCode`.\nconst safeWalletCache = new LruMap<boolean>(12)\n\ntype IsSafeWalletParams = {\n client: SDKClient\n chainId: number\n address: Address\n safeApiKey?: string\n}\n\n/**\n * Check if an address is a Safe wallet via the Safe Transaction Service,\n * short-circuiting on `eth_getCode` for EOAs (incl. EIP-7702 delegated).\n */\nexport async function isSafeWallet({\n client,\n chainId,\n address,\n safeApiKey,\n}: IsSafeWalletParams): Promise<boolean> {\n if (!address) {\n return false\n }\n const cacheKey = `${chainId}:${address.toLowerCase()}`\n const cached = safeWalletCache.get(cacheKey)\n if (cached !== undefined) {\n return cached\n }\n\n // Defined-and-EOA-shaped (`'0x'` or 7702 designator) → short-circuit. RPC\n // failure (`code === undefined`) falls through to the Safe API as an\n // independent fallback — Safe Transaction Service doesn't depend on the\n // chain RPC, so a flaky chain shouldn't blind us to a real Safe.\n const code = await getAccountCode({ client, chainId, address })\n if (code !== undefined && !isSmartContractWalletCode(code)) {\n safeWalletCache.set(cacheKey, false)\n return false\n }\n\n try {\n await getSafeClient(chainId, safeApiKey).getInfo(address)\n safeWalletCache.set(cacheKey, true)\n return true\n } catch {\n safeWalletCache.set(cacheKey, false)\n return false\n }\n}\n"],"mappings":";;;;;AAQA,MAAM,kBAAkB,yBAAIA,EAAAA,OAAgB,GAAG;;;;;AAa/C,eAAsB,aAAa,EACjC,QACA,SACA,SACA,cACuC;
|
|
1
|
+
{"version":3,"file":"isSafeWallet.js","names":["LruMap","getAccountCode","isSmartContractWalletCode","getSafeClient"],"sources":["../../../src/actions/isSafeWallet.ts"],"sourcesContent":["import { LruMap, type SDKClient } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getSafeClient } from '../client/safeClient.js'\nimport { getAccountCode } from './getAccountCode.js'\nimport { isSmartContractWalletCode } from './isSmartContractWallet.js'\n\n// Caches the Safe Transaction Service verdict (network round trip). The\n// underlying `eth_getCode` is intentionally uncached — see `getAccountCode`.\nconst safeWalletCache = new LruMap<boolean>(12)\n\ntype IsSafeWalletParams = {\n client: SDKClient\n chainId: number\n address: Address\n safeApiKey?: string\n}\n\n/**\n * Check if an address is a Safe wallet via the Safe Transaction Service,\n * short-circuiting on `eth_getCode` for EOAs (incl. EIP-7702 delegated).\n */\nexport async function isSafeWallet({\n client,\n chainId,\n address,\n safeApiKey,\n}: IsSafeWalletParams): Promise<boolean> {\n if (!address) {\n return false\n }\n const cacheKey = `${chainId}:${address.toLowerCase()}`\n const cached = safeWalletCache.get(cacheKey)\n if (cached !== undefined) {\n return cached\n }\n\n // Defined-and-EOA-shaped (`'0x'` or 7702 designator) → short-circuit. RPC\n // failure (`code === undefined`) falls through to the Safe API as an\n // independent fallback — Safe Transaction Service doesn't depend on the\n // chain RPC, so a flaky chain shouldn't blind us to a real Safe.\n const code = await getAccountCode({ client, chainId, address })\n if (code !== undefined && !isSmartContractWalletCode(code)) {\n safeWalletCache.set(cacheKey, false)\n return false\n }\n\n try {\n await getSafeClient(chainId, safeApiKey).getInfo(address)\n safeWalletCache.set(cacheKey, true)\n return true\n } catch {\n safeWalletCache.set(cacheKey, false)\n return false\n }\n}\n"],"mappings":";;;;;AAQA,MAAM,kBAAkB,yBAAIA,EAAAA,OAAgB,GAAG;;;;;AAa/C,eAAsB,aAAa,EACjC,QACA,SACA,SACA,cACuC;CACvC,IAAI,CAAC,SACH,OAAO;CAET,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,aAAa;CACpD,MAAM,SAAS,gBAAgB,IAAI,SAAS;CAC5C,IAAI,WAAW,KAAA,GACb,OAAO;CAOT,MAAM,OAAO,MAAMC,+BAAAA,eAAe;EAAE;EAAQ;EAAS;EAAS,CAAC;CAC/D,IAAI,SAAS,KAAA,KAAa,CAACC,sCAAAA,0BAA0B,KAAK,EAAE;EAC1D,gBAAgB,IAAI,UAAU,MAAM;EACpC,OAAO;;CAGT,IAAI;EACF,MAAMC,0BAAAA,cAAc,SAAS,WAAW,CAAC,QAAQ,QAAQ;EACzD,gBAAgB,IAAI,UAAU,KAAK;EACnC,OAAO;SACD;EACN,gBAAgB,IAAI,UAAU,MAAM;EACpC,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveENSAddress.js","names":["getPublicClient","ChainId"],"sources":["../../../src/actions/resolveENSAddress.ts"],"sourcesContent":["import { ChainId, type SDKClient } from '@lifi/sdk'\nimport { getEnsAddress, normalize } from 'viem/ens'\nimport { getPublicClient } from '../client/publicClient.js'\n\nexport const resolveENSAddress = async (\n client: SDKClient,\n name: string\n): Promise<string | undefined> => {\n try {\n const viemClient = await getPublicClient(client, ChainId.ETH)\n const address = await getEnsAddress(viemClient, {\n name: normalize(name),\n })\n return address as string | undefined\n } catch (_) {\n // ignore\n return\n }\n}\n"],"mappings":";;;;;AAIA,MAAa,oBAAoB,OAC/B,QACA,SACgC;
|
|
1
|
+
{"version":3,"file":"resolveENSAddress.js","names":["getPublicClient","ChainId"],"sources":["../../../src/actions/resolveENSAddress.ts"],"sourcesContent":["import { ChainId, type SDKClient } from '@lifi/sdk'\nimport { getEnsAddress, normalize } from 'viem/ens'\nimport { getPublicClient } from '../client/publicClient.js'\n\nexport const resolveENSAddress = async (\n client: SDKClient,\n name: string\n): Promise<string | undefined> => {\n try {\n const viemClient = await getPublicClient(client, ChainId.ETH)\n const address = await getEnsAddress(viemClient, {\n name: normalize(name),\n })\n return address as string | undefined\n } catch (_) {\n // ignore\n return\n }\n}\n"],"mappings":";;;;;AAIA,MAAa,oBAAoB,OAC/B,QACA,SACgC;CAChC,IAAI;EAKF,OAAO,OAAA,GAAA,SAAA,eAH6B,MADXA,4BAAAA,gBAAgB,QAAQC,UAAAA,QAAQ,IAAI,EACb,EAC9C,OAAA,GAAA,SAAA,WAAgB,KAAK,EACtB,CAAC;UAEK,GAAG;EAEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveEthereumAddress.js","names":["resolveENSAddress","resolveUNSAddress","ChainType"],"sources":["../../../src/actions/resolveEthereumAddress.ts"],"sourcesContent":["import {\n type ChainId,\n ChainType,\n type CoinKey,\n type SDKClient,\n} from '@lifi/sdk'\nimport { resolveENSAddress } from './resolveENSAddress.js'\nimport { resolveUNSAddress } from './resolveUNSAddress.js'\n\nexport async function resolveEthereumAddress(\n name: string,\n client: SDKClient,\n chainId?: ChainId,\n token?: CoinKey\n): Promise<string | undefined> {\n return (\n (await resolveENSAddress(client, name)) ||\n (await resolveUNSAddress(client, name, ChainType.EVM, chainId, token))\n )\n}\n"],"mappings":";;;;;AASA,eAAsB,uBACpB,MACA,QACA,SACA,OAC6B;
|
|
1
|
+
{"version":3,"file":"resolveEthereumAddress.js","names":["resolveENSAddress","resolveUNSAddress","ChainType"],"sources":["../../../src/actions/resolveEthereumAddress.ts"],"sourcesContent":["import {\n type ChainId,\n ChainType,\n type CoinKey,\n type SDKClient,\n} from '@lifi/sdk'\nimport { resolveENSAddress } from './resolveENSAddress.js'\nimport { resolveUNSAddress } from './resolveUNSAddress.js'\n\nexport async function resolveEthereumAddress(\n name: string,\n client: SDKClient,\n chainId?: ChainId,\n token?: CoinKey\n): Promise<string | undefined> {\n return (\n (await resolveENSAddress(client, name)) ||\n (await resolveUNSAddress(client, name, ChainType.EVM, chainId, token))\n )\n}\n"],"mappings":";;;;;AASA,eAAsB,uBACpB,MACA,QACA,SACA,OAC6B;CAC7B,OACG,MAAMA,kCAAAA,kBAAkB,QAAQ,KAAK,IACrC,MAAMC,kCAAAA,kBAAkB,QAAQ,MAAMC,UAAAA,UAAU,KAAK,SAAS,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveTransactionHash.js","names":["isSafeSignature","TransactionError","LiFiErrorCode","waitForSafeTransactionExecution"],"sources":["../../../src/actions/resolveTransactionHash.ts"],"sourcesContent":["import { LiFiErrorCode, type SDKClient, TransactionError } from '@lifi/sdk'\nimport type { Client, Hash } from 'viem'\nimport { isSafeSignature } from './isSafeSignature.js'\nimport { waitForSafeTransactionExecution } from './waitForSafeTransactionExecution.js'\n\nexport const resolveTransactionHash = async (\n client: SDKClient,\n viemClient: Client,\n txHashOrSignature: Hash,\n chainId: number\n): Promise<Hash> => {\n const isSignature = await isSafeSignature(client, {\n hash: txHashOrSignature,\n chainId,\n address: viemClient.account?.address,\n })\n\n if (!isSignature) {\n return txHashOrSignature\n }\n\n const safeAddress = viemClient.account?.address\n if (!safeAddress || !txHashOrSignature) {\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Safe address or signature not available for transaction tracking.'\n )\n }\n\n return await waitForSafeTransactionExecution(client, {\n chainId,\n safeAddress,\n signature: txHashOrSignature,\n pollingInterval: 5_000,\n })\n}\n"],"mappings":";;;;;AAKA,MAAa,yBAAyB,OACpC,QACA,YACA,mBACA,YACkB;
|
|
1
|
+
{"version":3,"file":"resolveTransactionHash.js","names":["isSafeSignature","TransactionError","LiFiErrorCode","waitForSafeTransactionExecution"],"sources":["../../../src/actions/resolveTransactionHash.ts"],"sourcesContent":["import { LiFiErrorCode, type SDKClient, TransactionError } from '@lifi/sdk'\nimport type { Client, Hash } from 'viem'\nimport { isSafeSignature } from './isSafeSignature.js'\nimport { waitForSafeTransactionExecution } from './waitForSafeTransactionExecution.js'\n\nexport const resolveTransactionHash = async (\n client: SDKClient,\n viemClient: Client,\n txHashOrSignature: Hash,\n chainId: number\n): Promise<Hash> => {\n const isSignature = await isSafeSignature(client, {\n hash: txHashOrSignature,\n chainId,\n address: viemClient.account?.address,\n })\n\n if (!isSignature) {\n return txHashOrSignature\n }\n\n const safeAddress = viemClient.account?.address\n if (!safeAddress || !txHashOrSignature) {\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Safe address or signature not available for transaction tracking.'\n )\n }\n\n return await waitForSafeTransactionExecution(client, {\n chainId,\n safeAddress,\n signature: txHashOrSignature,\n pollingInterval: 5_000,\n })\n}\n"],"mappings":";;;;;AAKA,MAAa,yBAAyB,OACpC,QACA,YACA,mBACA,YACkB;CAOlB,IAAI,CAAC,MANqBA,gCAAAA,gBAAgB,QAAQ;EAChD,MAAM;EACN;EACA,SAAS,WAAW,SAAS;EAC9B,CAAC,EAGA,OAAO;CAGT,MAAM,cAAc,WAAW,SAAS;CACxC,IAAI,CAAC,eAAe,CAAC,mBACnB,MAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,oEACD;CAGH,OAAO,MAAMC,gDAAAA,gCAAgC,QAAQ;EACnD;EACA;EACA,WAAW;EACX,iBAAiB;EAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveUNSAddress.js","names":["getPublicClient","ChainId","CHAIN_TYPE_FAMILY_MAP","CHAIN_ID_UNS_CHAIN_MAP","CHAIN_TYPE_UNS_CHAIN_MAP","getUNSProxyAddress","readContract","UNSProxyReaderABI"],"sources":["../../../src/actions/resolveUNSAddress.ts"],"sourcesContent":["import {\n ChainId,\n type ChainType,\n type CoinKey,\n type SDKClient,\n} from '@lifi/sdk'\nimport type { Address, Client } from 'viem'\nimport { readContract } from 'viem/actions'\nimport { namehash } from 'viem/ens'\nimport { getAction, trim } from 'viem/utils'\nimport { getPublicClient } from '../client/publicClient.js'\nimport {\n CHAIN_ID_UNS_CHAIN_MAP,\n CHAIN_TYPE_FAMILY_MAP,\n CHAIN_TYPE_UNS_CHAIN_MAP,\n getUNSProxyAddress,\n UNSProxyReaderABI,\n} from './constants.js'\n\nexport const resolveUNSAddress = async (\n client: SDKClient,\n name: string,\n chainType: ChainType,\n chain?: ChainId,\n token?: CoinKey\n): Promise<string | undefined> => {\n try {\n const L1Client = await getPublicClient(client, ChainId.ETH)\n const L2Client = await getPublicClient(client, ChainId.POL)\n\n const nameHash = namehash(name)\n const keys: string[] = []\n\n // handle token based resolution\n if (chain) {\n const family = CHAIN_TYPE_FAMILY_MAP[chainType]\n const unsChain = CHAIN_ID_UNS_CHAIN_MAP[chain]\n\n if (family) {\n if (token) {\n keys.push(`token.${family}.${unsChain}.${token}.address`)\n }\n if (unsChain) {\n keys.push(`token.${family}.${unsChain}.address`)\n }\n\n keys.push(`token.${family}.address`)\n }\n }\n\n // fallback to chain based resolution\n const unsChainType = CHAIN_TYPE_UNS_CHAIN_MAP[chainType]\n keys.push(`crypto.${unsChainType}.address`)\n\n for (const key of keys) {\n const address =\n (await getUnsAddress(L2Client, { name: nameHash, key })) ||\n (await getUnsAddress(L1Client, { name: nameHash, key }))\n if (address) {\n return address\n }\n }\n return undefined\n } catch {\n return undefined\n }\n}\n\ntype GetUnsAddressParameters = {\n key: string\n name: string\n}\n\ntype GetUnsAddressReturnType = Address | undefined\n\nasync function getUnsAddress(\n client: Client,\n params: GetUnsAddressParameters\n): Promise<GetUnsAddressReturnType> {\n const { name, key } = params\n\n const chainId = client.chain?.id\n if (!chainId) {\n throw new Error('Chain ID not available')\n }\n\n const proxyAddress = getUNSProxyAddress(chainId)\n if (!proxyAddress) {\n throw new Error(`UNS contracts are not deployed on chain ${chainId}`)\n }\n\n const readContractAction = getAction(client, readContract, 'readContract')\n\n const existsReadContractParameters = {\n abi: UNSProxyReaderABI,\n address: proxyAddress,\n functionName: 'exists',\n args: [BigInt(name)],\n } as const\n\n const exists = await readContractAction(existsReadContractParameters)\n\n if (!exists) {\n return undefined\n }\n\n const readContractParameters = {\n abi: UNSProxyReaderABI,\n address: proxyAddress,\n functionName: 'getData',\n args: [[key], BigInt(name)],\n } as const\n\n const res = await readContractAction(readContractParameters)\n const [, , addresses] = res\n\n const address = addresses[0]\n\n if (\n address === '0x' ||\n address === '' ||\n trim(address as Address) === '0x00'\n ) {\n return undefined\n }\n\n return address as Address\n}\n"],"mappings":";;;;;;;;AAmBA,MAAa,oBAAoB,OAC/B,QACA,MACA,WACA,OACA,UACgC;
|
|
1
|
+
{"version":3,"file":"resolveUNSAddress.js","names":["getPublicClient","ChainId","CHAIN_TYPE_FAMILY_MAP","CHAIN_ID_UNS_CHAIN_MAP","CHAIN_TYPE_UNS_CHAIN_MAP","getUNSProxyAddress","readContract","UNSProxyReaderABI"],"sources":["../../../src/actions/resolveUNSAddress.ts"],"sourcesContent":["import {\n ChainId,\n type ChainType,\n type CoinKey,\n type SDKClient,\n} from '@lifi/sdk'\nimport type { Address, Client } from 'viem'\nimport { readContract } from 'viem/actions'\nimport { namehash } from 'viem/ens'\nimport { getAction, trim } from 'viem/utils'\nimport { getPublicClient } from '../client/publicClient.js'\nimport {\n CHAIN_ID_UNS_CHAIN_MAP,\n CHAIN_TYPE_FAMILY_MAP,\n CHAIN_TYPE_UNS_CHAIN_MAP,\n getUNSProxyAddress,\n UNSProxyReaderABI,\n} from './constants.js'\n\nexport const resolveUNSAddress = async (\n client: SDKClient,\n name: string,\n chainType: ChainType,\n chain?: ChainId,\n token?: CoinKey\n): Promise<string | undefined> => {\n try {\n const L1Client = await getPublicClient(client, ChainId.ETH)\n const L2Client = await getPublicClient(client, ChainId.POL)\n\n const nameHash = namehash(name)\n const keys: string[] = []\n\n // handle token based resolution\n if (chain) {\n const family = CHAIN_TYPE_FAMILY_MAP[chainType]\n const unsChain = CHAIN_ID_UNS_CHAIN_MAP[chain]\n\n if (family) {\n if (token) {\n keys.push(`token.${family}.${unsChain}.${token}.address`)\n }\n if (unsChain) {\n keys.push(`token.${family}.${unsChain}.address`)\n }\n\n keys.push(`token.${family}.address`)\n }\n }\n\n // fallback to chain based resolution\n const unsChainType = CHAIN_TYPE_UNS_CHAIN_MAP[chainType]\n keys.push(`crypto.${unsChainType}.address`)\n\n for (const key of keys) {\n const address =\n (await getUnsAddress(L2Client, { name: nameHash, key })) ||\n (await getUnsAddress(L1Client, { name: nameHash, key }))\n if (address) {\n return address\n }\n }\n return undefined\n } catch {\n return undefined\n }\n}\n\ntype GetUnsAddressParameters = {\n key: string\n name: string\n}\n\ntype GetUnsAddressReturnType = Address | undefined\n\nasync function getUnsAddress(\n client: Client,\n params: GetUnsAddressParameters\n): Promise<GetUnsAddressReturnType> {\n const { name, key } = params\n\n const chainId = client.chain?.id\n if (!chainId) {\n throw new Error('Chain ID not available')\n }\n\n const proxyAddress = getUNSProxyAddress(chainId)\n if (!proxyAddress) {\n throw new Error(`UNS contracts are not deployed on chain ${chainId}`)\n }\n\n const readContractAction = getAction(client, readContract, 'readContract')\n\n const existsReadContractParameters = {\n abi: UNSProxyReaderABI,\n address: proxyAddress,\n functionName: 'exists',\n args: [BigInt(name)],\n } as const\n\n const exists = await readContractAction(existsReadContractParameters)\n\n if (!exists) {\n return undefined\n }\n\n const readContractParameters = {\n abi: UNSProxyReaderABI,\n address: proxyAddress,\n functionName: 'getData',\n args: [[key], BigInt(name)],\n } as const\n\n const res = await readContractAction(readContractParameters)\n const [, , addresses] = res\n\n const address = addresses[0]\n\n if (\n address === '0x' ||\n address === '' ||\n trim(address as Address) === '0x00'\n ) {\n return undefined\n }\n\n return address as Address\n}\n"],"mappings":";;;;;;;;AAmBA,MAAa,oBAAoB,OAC/B,QACA,MACA,WACA,OACA,UACgC;CAChC,IAAI;EACF,MAAM,WAAW,MAAMA,4BAAAA,gBAAgB,QAAQC,UAAAA,QAAQ,IAAI;EAC3D,MAAM,WAAW,MAAMD,4BAAAA,gBAAgB,QAAQC,UAAAA,QAAQ,IAAI;EAE3D,MAAM,YAAA,GAAA,SAAA,UAAoB,KAAK;EAC/B,MAAM,OAAiB,EAAE;EAGzB,IAAI,OAAO;GACT,MAAM,SAASC,0BAAAA,sBAAsB;GACrC,MAAM,WAAWC,0BAAAA,uBAAuB;GAExC,IAAI,QAAQ;IACV,IAAI,OACF,KAAK,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,MAAM,UAAU;IAE3D,IAAI,UACF,KAAK,KAAK,SAAS,OAAO,GAAG,SAAS,UAAU;IAGlD,KAAK,KAAK,SAAS,OAAO,UAAU;;;EAKxC,MAAM,eAAeC,0BAAAA,yBAAyB;EAC9C,KAAK,KAAK,UAAU,aAAa,UAAU;EAE3C,KAAK,MAAM,OAAO,MAAM;GACtB,MAAM,UACH,MAAM,cAAc,UAAU;IAAE,MAAM;IAAU;IAAK,CAAC,IACtD,MAAM,cAAc,UAAU;IAAE,MAAM;IAAU;IAAK,CAAC;GACzD,IAAI,SACF,OAAO;;EAGX;SACM;EACN;;;AAWJ,eAAe,cACb,QACA,QACkC;CAClC,MAAM,EAAE,MAAM,QAAQ;CAEtB,MAAM,UAAU,OAAO,OAAO;CAC9B,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,yBAAyB;CAG3C,MAAM,eAAeC,0BAAAA,mBAAmB,QAAQ;CAChD,IAAI,CAAC,cACH,MAAM,IAAI,MAAM,2CAA2C,UAAU;CAGvE,MAAM,sBAAA,GAAA,WAAA,WAA+B,QAAQC,aAAAA,cAAc,eAAe;CAW1E,IAAI,CAAC,MAFgB,mBAAmB;EANtC,KAAKC,0BAAAA;EACL,SAAS;EACT,cAAc;EACd,MAAM,CAAC,OAAO,KAAK,CAAC;EAG8C,CAAC,EAGnE;CAWF,MAAM,KAAK,aAAa,MADN,mBAAmB;EANnC,KAAKA,0BAAAA;EACL,SAAS;EACT,cAAc;EACd,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC;EAG8B,CAAC;CAG5D,MAAM,UAAU,UAAU;CAE1B,IACE,YAAY,QACZ,YAAY,OAAA,GAAA,WAAA,MACP,QAAmB,KAAK,QAE7B;CAGF,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setAllowance.js","names":["approveAbi","getMaxPriorityFeePerGas","sendTransaction","isZeroAddress","getAllowance"],"sources":["../../../src/actions/setAllowance.ts"],"sourcesContent":["import type {\n ExecutionOptions,\n SDKClient,\n TransactionParameters,\n} from '@lifi/sdk'\nimport type {\n Address,\n Client,\n Hash,\n Hex,\n SendTransactionParameters,\n} from 'viem'\nimport { encodeFunctionData } from 'viem'\nimport { sendTransaction } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { ApproveTokenRequest, RevokeApprovalRequest } from '../types.js'\nimport { approveAbi } from '../utils/abi.js'\nimport { isZeroAddress } from '../utils/isZeroAddress.js'\nimport { getAllowance } from './getAllowance.js'\nimport { getMaxPriorityFeePerGas } from './getMaxPriorityFeePerGas.js'\n\nexport const setAllowance = async (\n client: SDKClient,\n viemClient: Client,\n tokenAddress: Address,\n contractAddress: Address,\n amount: bigint,\n executionOptions?: ExecutionOptions,\n returnPopulatedTransaction?: boolean\n): Promise<Hash | Hex> => {\n const data = encodeFunctionData({\n abi: approveAbi,\n functionName: 'approve',\n args: [contractAddress, amount],\n })\n\n if (returnPopulatedTransaction) {\n return data\n }\n\n let transactionRequest: TransactionParameters = {\n to: tokenAddress,\n data,\n maxPriorityFeePerGas:\n viemClient.account?.type === 'local'\n ? await getMaxPriorityFeePerGas(client, viemClient)\n : undefined,\n }\n\n if (executionOptions?.updateTransactionRequestHook) {\n const customizedTransactionRequest: TransactionParameters =\n await executionOptions.updateTransactionRequestHook({\n requestType: 'approve',\n ...transactionRequest,\n })\n\n transactionRequest = {\n ...transactionRequest,\n ...customizedTransactionRequest,\n }\n }\n\n return getAction(\n viemClient,\n sendTransaction,\n 'sendTransaction'\n )({\n to: transactionRequest.to,\n account: viemClient.account!,\n data: transactionRequest.data,\n gas: transactionRequest.gas,\n gasPrice: transactionRequest.gasPrice,\n maxFeePerGas: transactionRequest.maxFeePerGas,\n maxPriorityFeePerGas: transactionRequest.maxPriorityFeePerGas,\n } as SendTransactionParameters)\n}\n\n/**\n * Set approval for a certain token and amount.\n * @param client - The SDK client\n * @param request - The approval request\n * @param request.walletClient - The Viem wallet client used to send the transaction\n * @param request.token - The token for which to set the allowance\n * @param request.spenderAddress - The address of the spender\n * @param request.amount - The amount of tokens to approve\n * @returns Returns Hash or nothing\n */\nexport const setTokenAllowance = async (\n client: SDKClient,\n { walletClient, token, spenderAddress, amount }: ApproveTokenRequest\n): Promise<Hash | void> => {\n // native token don't need approval\n if (isZeroAddress(token.address)) {\n return\n }\n const approvedAmount = await getAllowance(\n client,\n walletClient,\n token.address as Address,\n walletClient.account!.address,\n spenderAddress as Address\n )\n\n if (amount > approvedAmount) {\n const approveTx = await setAllowance(\n client,\n walletClient,\n token.address as Address,\n spenderAddress as Address,\n amount\n )\n\n return approveTx\n }\n}\n\n/**\n * Revoke approval for a certain token.\n * @param client - The SDK client\n * @param request - The revoke request\n * @param request.walletClient - The Viem wallet client used to send the transaction\n * @param request.token - The token for which to revoke the allowance\n * @param request.spenderAddress - The address of the spender\n * @returns Returns Hash or nothing\n */\nexport const revokeTokenApproval = async (\n client: SDKClient,\n { walletClient, token, spenderAddress }: RevokeApprovalRequest\n): Promise<Hash | void> => {\n // native token don't need approval\n if (isZeroAddress(token.address)) {\n return\n }\n const approvedAmount = await getAllowance(\n client,\n walletClient,\n token.address as Address,\n walletClient.account!.address,\n spenderAddress as Address\n )\n if (approvedAmount > 0) {\n const approveTx = await setAllowance(\n client,\n walletClient,\n token.address as Address,\n spenderAddress as Address,\n 0n\n )\n\n return approveTx\n }\n}\n"],"mappings":";;;;;;;;;AAqBA,MAAa,eAAe,OAC1B,QACA,YACA,cACA,iBACA,QACA,kBACA,+BACwB;CACxB,MAAM,QAAA,GAAA,KAAA,oBAA0B;EAC9B,KAAKA,kBAAAA;EACL,cAAc;EACd,MAAM,CAAC,iBAAiB,OAAO;EAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"setAllowance.js","names":["approveAbi","getMaxPriorityFeePerGas","sendTransaction","isZeroAddress","getAllowance"],"sources":["../../../src/actions/setAllowance.ts"],"sourcesContent":["import type {\n ExecutionOptions,\n SDKClient,\n TransactionParameters,\n} from '@lifi/sdk'\nimport type {\n Address,\n Client,\n Hash,\n Hex,\n SendTransactionParameters,\n} from 'viem'\nimport { encodeFunctionData } from 'viem'\nimport { sendTransaction } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { ApproveTokenRequest, RevokeApprovalRequest } from '../types.js'\nimport { approveAbi } from '../utils/abi.js'\nimport { isZeroAddress } from '../utils/isZeroAddress.js'\nimport { getAllowance } from './getAllowance.js'\nimport { getMaxPriorityFeePerGas } from './getMaxPriorityFeePerGas.js'\n\nexport const setAllowance = async (\n client: SDKClient,\n viemClient: Client,\n tokenAddress: Address,\n contractAddress: Address,\n amount: bigint,\n executionOptions?: ExecutionOptions,\n returnPopulatedTransaction?: boolean\n): Promise<Hash | Hex> => {\n const data = encodeFunctionData({\n abi: approveAbi,\n functionName: 'approve',\n args: [contractAddress, amount],\n })\n\n if (returnPopulatedTransaction) {\n return data\n }\n\n let transactionRequest: TransactionParameters = {\n to: tokenAddress,\n data,\n maxPriorityFeePerGas:\n viemClient.account?.type === 'local'\n ? await getMaxPriorityFeePerGas(client, viemClient)\n : undefined,\n }\n\n if (executionOptions?.updateTransactionRequestHook) {\n const customizedTransactionRequest: TransactionParameters =\n await executionOptions.updateTransactionRequestHook({\n requestType: 'approve',\n ...transactionRequest,\n })\n\n transactionRequest = {\n ...transactionRequest,\n ...customizedTransactionRequest,\n }\n }\n\n return getAction(\n viemClient,\n sendTransaction,\n 'sendTransaction'\n )({\n to: transactionRequest.to,\n account: viemClient.account!,\n data: transactionRequest.data,\n gas: transactionRequest.gas,\n gasPrice: transactionRequest.gasPrice,\n maxFeePerGas: transactionRequest.maxFeePerGas,\n maxPriorityFeePerGas: transactionRequest.maxPriorityFeePerGas,\n } as SendTransactionParameters)\n}\n\n/**\n * Set approval for a certain token and amount.\n * @param client - The SDK client\n * @param request - The approval request\n * @param request.walletClient - The Viem wallet client used to send the transaction\n * @param request.token - The token for which to set the allowance\n * @param request.spenderAddress - The address of the spender\n * @param request.amount - The amount of tokens to approve\n * @returns Returns Hash or nothing\n */\nexport const setTokenAllowance = async (\n client: SDKClient,\n { walletClient, token, spenderAddress, amount }: ApproveTokenRequest\n): Promise<Hash | void> => {\n // native token don't need approval\n if (isZeroAddress(token.address)) {\n return\n }\n const approvedAmount = await getAllowance(\n client,\n walletClient,\n token.address as Address,\n walletClient.account!.address,\n spenderAddress as Address\n )\n\n if (amount > approvedAmount) {\n const approveTx = await setAllowance(\n client,\n walletClient,\n token.address as Address,\n spenderAddress as Address,\n amount\n )\n\n return approveTx\n }\n}\n\n/**\n * Revoke approval for a certain token.\n * @param client - The SDK client\n * @param request - The revoke request\n * @param request.walletClient - The Viem wallet client used to send the transaction\n * @param request.token - The token for which to revoke the allowance\n * @param request.spenderAddress - The address of the spender\n * @returns Returns Hash or nothing\n */\nexport const revokeTokenApproval = async (\n client: SDKClient,\n { walletClient, token, spenderAddress }: RevokeApprovalRequest\n): Promise<Hash | void> => {\n // native token don't need approval\n if (isZeroAddress(token.address)) {\n return\n }\n const approvedAmount = await getAllowance(\n client,\n walletClient,\n token.address as Address,\n walletClient.account!.address,\n spenderAddress as Address\n )\n if (approvedAmount > 0) {\n const approveTx = await setAllowance(\n client,\n walletClient,\n token.address as Address,\n spenderAddress as Address,\n 0n\n )\n\n return approveTx\n }\n}\n"],"mappings":";;;;;;;;;AAqBA,MAAa,eAAe,OAC1B,QACA,YACA,cACA,iBACA,QACA,kBACA,+BACwB;CACxB,MAAM,QAAA,GAAA,KAAA,oBAA0B;EAC9B,KAAKA,kBAAAA;EACL,cAAc;EACd,MAAM,CAAC,iBAAiB,OAAO;EAChC,CAAC;CAEF,IAAI,4BACF,OAAO;CAGT,IAAI,qBAA4C;EAC9C,IAAI;EACJ;EACA,sBACE,WAAW,SAAS,SAAS,UACzB,MAAMC,wCAAAA,wBAAwB,QAAQ,WAAW,GACjD,KAAA;EACP;CAED,IAAI,kBAAkB,8BAA8B;EAClD,MAAM,+BACJ,MAAM,iBAAiB,6BAA6B;GAClD,aAAa;GACb,GAAG;GACJ,CAAC;EAEJ,qBAAqB;GACnB,GAAG;GACH,GAAG;GACJ;;CAGH,QAAA,GAAA,WAAA,WACE,YACAC,aAAAA,iBACA,kBACD,CAAC;EACA,IAAI,mBAAmB;EACvB,SAAS,WAAW;EACpB,MAAM,mBAAmB;EACzB,KAAK,mBAAmB;EACxB,UAAU,mBAAmB;EAC7B,cAAc,mBAAmB;EACjC,sBAAsB,mBAAmB;EAC1C,CAA8B;;;;;;;;;;;;AAajC,MAAa,oBAAoB,OAC/B,QACA,EAAE,cAAc,OAAO,gBAAgB,aACd;CAEzB,IAAIC,4BAAAA,cAAc,MAAM,QAAQ,EAC9B;CAUF,IAAI,SAAS,MARgBC,6BAAAA,aAC3B,QACA,cACA,MAAM,SACN,aAAa,QAAS,SACtB,eACD,EAWC,OAAO,MARiB,aACtB,QACA,cACA,MAAM,SACN,gBACA,OACD;;;;;;;;;;;AAeL,MAAa,sBAAsB,OACjC,QACA,EAAE,cAAc,OAAO,qBACE;CAEzB,IAAID,4BAAAA,cAAc,MAAM,QAAQ,EAC9B;CASF,IAAI,MAPyBC,6BAAAA,aAC3B,QACA,cACA,MAAM,SACN,aAAa,QAAS,SACtB,eACD,GACoB,GASnB,OAAO,MARiB,aACtB,QACA,cACA,MAAM,SACN,gBACA,GACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waitForBatchTransactionReceipt.js","names":["waitForCallsStatus","TransactionError","LiFiErrorCode"],"sources":["../../../src/actions/waitForBatchTransactionReceipt.ts"],"sourcesContent":["import { LiFiErrorCode, TransactionError } from '@lifi/sdk'\nimport type { Client, Hash } from 'viem'\nimport { type GetCallsStatusReturnType, waitForCallsStatus } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { WalletCallReceipt } from '../types.js'\n\nexport const waitForBatchTransactionReceipt = async (\n client: Client,\n batchHash: Hash,\n onFailed?: (result: GetCallsStatusReturnType) => void\n): Promise<WalletCallReceipt> => {\n const result = await getAction(\n client,\n waitForCallsStatus,\n 'waitForCallsStatus'\n )({\n id: batchHash,\n timeout: 3_600_000 * 24,\n })\n\n if (result.status === 'success') {\n if (\n !result.receipts?.length ||\n !result.receipts.every((receipt) => receipt.transactionHash) ||\n result.receipts.some((receipt) => receipt.status === 'reverted')\n ) {\n onFailed?.(result)\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Transaction was reverted.'\n )\n }\n const transactionReceipt = result.receipts.at(-1)!\n return transactionReceipt\n }\n if (result.statusCode >= 400 && result.statusCode < 500) {\n onFailed?.(result)\n throw new TransactionError(\n LiFiErrorCode.TransactionCanceled,\n 'Transaction was canceled.'\n )\n }\n onFailed?.(result)\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Transaction failed.'\n )\n}\n"],"mappings":";;;;;AAMA,MAAa,iCAAiC,OAC5C,QACA,WACA,aAC+B;CAC/B,MAAM,SAAS,OAAA,GAAA,WAAA,WACb,QACAA,aAAAA,oBACA,qBACD,CAAC;EACA,IAAI;EACJ,SAAS,OAAY;EACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"waitForBatchTransactionReceipt.js","names":["waitForCallsStatus","TransactionError","LiFiErrorCode"],"sources":["../../../src/actions/waitForBatchTransactionReceipt.ts"],"sourcesContent":["import { LiFiErrorCode, TransactionError } from '@lifi/sdk'\nimport type { Client, Hash } from 'viem'\nimport { type GetCallsStatusReturnType, waitForCallsStatus } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { WalletCallReceipt } from '../types.js'\n\nexport const waitForBatchTransactionReceipt = async (\n client: Client,\n batchHash: Hash,\n onFailed?: (result: GetCallsStatusReturnType) => void\n): Promise<WalletCallReceipt> => {\n const result = await getAction(\n client,\n waitForCallsStatus,\n 'waitForCallsStatus'\n )({\n id: batchHash,\n timeout: 3_600_000 * 24,\n })\n\n if (result.status === 'success') {\n if (\n !result.receipts?.length ||\n !result.receipts.every((receipt) => receipt.transactionHash) ||\n result.receipts.some((receipt) => receipt.status === 'reverted')\n ) {\n onFailed?.(result)\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Transaction was reverted.'\n )\n }\n const transactionReceipt = result.receipts.at(-1)!\n return transactionReceipt\n }\n if (result.statusCode >= 400 && result.statusCode < 500) {\n onFailed?.(result)\n throw new TransactionError(\n LiFiErrorCode.TransactionCanceled,\n 'Transaction was canceled.'\n )\n }\n onFailed?.(result)\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Transaction failed.'\n )\n}\n"],"mappings":";;;;;AAMA,MAAa,iCAAiC,OAC5C,QACA,WACA,aAC+B;CAC/B,MAAM,SAAS,OAAA,GAAA,WAAA,WACb,QACAA,aAAAA,oBACA,qBACD,CAAC;EACA,IAAI;EACJ,SAAS,OAAY;EACtB,CAAC;CAEF,IAAI,OAAO,WAAW,WAAW;EAC/B,IACE,CAAC,OAAO,UAAU,UAClB,CAAC,OAAO,SAAS,OAAO,YAAY,QAAQ,gBAAgB,IAC5D,OAAO,SAAS,MAAM,YAAY,QAAQ,WAAW,WAAW,EAChE;GACA,WAAW,OAAO;GAClB,MAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,4BACD;;EAGH,OAD2B,OAAO,SAAS,GAAG,GACrB;;CAE3B,IAAI,OAAO,cAAc,OAAO,OAAO,aAAa,KAAK;EACvD,WAAW,OAAO;EAClB,MAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,qBACd,4BACD;;CAEH,WAAW,OAAO;CAClB,MAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,mBACd,sBACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waitForRelayedTransactionReceipt.js","names":["TransactionError","LiFiErrorCode"],"sources":["../../../src/actions/waitForRelayedTransactionReceipt.ts"],"sourcesContent":["import type { SDKClient } from '@lifi/sdk'\nimport {\n type ExtendedTransactionInfo,\n type FullStatusData,\n getRelayedTransactionStatus,\n LiFiErrorCode,\n type LiFiStep,\n TransactionError,\n waitForResult,\n} from '@lifi/sdk'\nimport type { Hash } from 'viem'\nimport type { WalletCallReceipt } from '../types.js'\n\nexport const waitForRelayedTransactionReceipt = async (\n client: SDKClient,\n taskId: Hash,\n step: LiFiStep\n): Promise<WalletCallReceipt> => {\n return waitForResult(\n async () => {\n const result = await getRelayedTransactionStatus(client, {\n taskId,\n fromChain: step.action.fromChainId,\n toChain: step.action.toChainId,\n ...(step.tool !== 'custom' && { bridge: step.tool }),\n }).catch((e) => {\n if (process.env.NODE_ENV === 'development') {\n console.debug('Fetching status from relayer failed.', e)\n }\n return undefined\n })\n\n switch (result?.status) {\n case 'PENDING':\n return undefined\n case 'DONE': {\n const sending: ExtendedTransactionInfo | undefined =\n (result?.transactionStatus?.sending as ExtendedTransactionInfo) ||\n ((result as unknown as FullStatusData)\n ?.sending as ExtendedTransactionInfo)\n return {\n status: 'success',\n gasUsed: sending?.gasUsed,\n transactionHash: result?.metadata.txHash || sending?.txHash,\n transactionLink: sending?.txLink,\n } as unknown as WalletCallReceipt\n }\n case 'FAILED':\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Transaction was reverted.'\n )\n default:\n throw new TransactionError(\n LiFiErrorCode.TransactionNotFound,\n 'Transaction not found.'\n )\n }\n },\n 5000,\n 3,\n (_, error) => {\n return !(\n error instanceof TransactionError &&\n error.code === LiFiErrorCode.TransactionFailed\n )\n }\n )\n}\n"],"mappings":";;;AAaA,MAAa,mCAAmC,OAC9C,QACA,QACA,SAC+B;
|
|
1
|
+
{"version":3,"file":"waitForRelayedTransactionReceipt.js","names":["TransactionError","LiFiErrorCode"],"sources":["../../../src/actions/waitForRelayedTransactionReceipt.ts"],"sourcesContent":["import type { SDKClient } from '@lifi/sdk'\nimport {\n type ExtendedTransactionInfo,\n type FullStatusData,\n getRelayedTransactionStatus,\n LiFiErrorCode,\n type LiFiStep,\n TransactionError,\n waitForResult,\n} from '@lifi/sdk'\nimport type { Hash } from 'viem'\nimport type { WalletCallReceipt } from '../types.js'\n\nexport const waitForRelayedTransactionReceipt = async (\n client: SDKClient,\n taskId: Hash,\n step: LiFiStep\n): Promise<WalletCallReceipt> => {\n return waitForResult(\n async () => {\n const result = await getRelayedTransactionStatus(client, {\n taskId,\n fromChain: step.action.fromChainId,\n toChain: step.action.toChainId,\n ...(step.tool !== 'custom' && { bridge: step.tool }),\n }).catch((e) => {\n if (process.env.NODE_ENV === 'development') {\n console.debug('Fetching status from relayer failed.', e)\n }\n return undefined\n })\n\n switch (result?.status) {\n case 'PENDING':\n return undefined\n case 'DONE': {\n const sending: ExtendedTransactionInfo | undefined =\n (result?.transactionStatus?.sending as ExtendedTransactionInfo) ||\n ((result as unknown as FullStatusData)\n ?.sending as ExtendedTransactionInfo)\n return {\n status: 'success',\n gasUsed: sending?.gasUsed,\n transactionHash: result?.metadata.txHash || sending?.txHash,\n transactionLink: sending?.txLink,\n } as unknown as WalletCallReceipt\n }\n case 'FAILED':\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Transaction was reverted.'\n )\n default:\n throw new TransactionError(\n LiFiErrorCode.TransactionNotFound,\n 'Transaction not found.'\n )\n }\n },\n 5000,\n 3,\n (_, error) => {\n return !(\n error instanceof TransactionError &&\n error.code === LiFiErrorCode.TransactionFailed\n )\n }\n )\n}\n"],"mappings":";;;AAaA,MAAa,mCAAmC,OAC9C,QACA,QACA,SAC+B;CAC/B,QAAA,GAAA,UAAA,eACE,YAAY;EACV,MAAM,SAAS,OAAA,GAAA,UAAA,6BAAkC,QAAQ;GACvD;GACA,WAAW,KAAK,OAAO;GACvB,SAAS,KAAK,OAAO;GACrB,GAAI,KAAK,SAAS,YAAY,EAAE,QAAQ,KAAK,MAAM;GACpD,CAAC,CAAC,OAAO,MAAM;GACd,IAAI,QAAQ,IAAI,aAAa,eAC3B,QAAQ,MAAM,wCAAwC,EAAE;IAG1D;EAEF,QAAQ,QAAQ,QAAhB;GACE,KAAK,WACH;GACF,KAAK,QAAQ;IACX,MAAM,UACH,QAAQ,mBAAmB,WAC1B,QACE;IACN,OAAO;KACL,QAAQ;KACR,SAAS,SAAS;KAClB,iBAAiB,QAAQ,SAAS,UAAU,SAAS;KACrD,iBAAiB,SAAS;KAC3B;;GAEH,KAAK,UACH,MAAM,IAAIA,UAAAA,iBACRC,UAAAA,cAAc,mBACd,4BACD;GACH,SACE,MAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,qBACd,yBACD;;IAGP,KACA,IACC,GAAG,UAAU;EACZ,OAAO,EACL,iBAAiBD,UAAAA,oBACjB,MAAM,SAASC,UAAAA,cAAc;GAGlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waitForSafeTransactionExecution.js","names":["getSafeClient","getSafeApiKey","TransactionError","LiFiErrorCode"],"sources":["../../../src/actions/waitForSafeTransactionExecution.ts"],"sourcesContent":["import {\n LiFiErrorCode,\n type SDKClient,\n TransactionError,\n waitForResult,\n} from '@lifi/sdk'\nimport type { Address, Hash } from 'viem'\nimport { getSafeClient } from '../client/safeClient.js'\nimport { getSafeApiKey } from '../utils/getSafeApiKey.js'\n\nexport interface WaitForSafeTransactionExecutionProps {\n chainId: number\n safeAddress: Address\n signature: string\n pollingInterval?: number\n timeout?: number\n}\n\n/**\n * Polls the Safe Transaction Service until the transaction matching the given signature\n * is executed, then resolves with the on-chain transaction hash.\n *\n * @param client - {@link SDKClient}\n * @param props - {@link WaitForSafeTransactionExecutionProps}\n * @returns The on-chain transaction hash once the Safe transaction is executed.\n * @throws {TransactionError} If the transaction fails, is replaced, or polling times out.\n */\nexport async function waitForSafeTransactionExecution(\n client: SDKClient,\n {\n chainId,\n safeAddress,\n signature,\n pollingInterval,\n timeout: timeoutMs,\n }: WaitForSafeTransactionExecutionProps\n): Promise<Hash> {\n const basePollingInterval = pollingInterval ?? 10_000\n const timeout = timeoutMs ?? 3_600_000 * 24 // 24 hours default\n const safeApiKey = getSafeApiKey(client)\n const safeClient = getSafeClient(chainId, safeApiKey)\n let safeTxHash: Hash | undefined\n let originalNonce: number | undefined\n let pollCount = 0\n const normalizedSignature = signature.toLowerCase()\n const startTime = Date.now()\n\n try {\n return await waitForResult<Hash>(\n async () => {\n pollCount++\n\n if (Date.now() - startTime > timeout) {\n throw new Error('Safe transaction polling timed out')\n }\n\n // Resolve signature to safeTxHash\n if (!safeTxHash) {\n const { results } = await safeClient.getTransactions(safeAddress)\n\n const match = results.find((tx) =>\n tx.confirmations?.some(\n (c) => c.signature?.toLowerCase() === normalizedSignature\n )\n )\n if (!match) {\n return undefined\n }\n safeTxHash = match.safeTxHash as Hash\n originalNonce = Number(match.nonce)\n }\n\n // single-tx lookup for execution status\n const tx = await safeClient.getTransaction(safeTxHash)\n\n if (tx.isExecuted) {\n if (!tx.isSuccessful) {\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Safe transaction failed.'\n )\n }\n if (!tx.transactionHash) {\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Safe transaction executed but no transaction hash returned.'\n )\n }\n return tx.transactionHash as Hash\n }\n\n // Check for replacement every 3rd poll\n if (pollCount % 3 === 0) {\n const { results } = await safeClient.getTransactions(safeAddress)\n const replaced = results.find(\n (t) =>\n t.isExecuted &&\n Number(t.nonce) >= originalNonce! &&\n t.safeTxHash !== safeTxHash\n )\n if (replaced) {\n throw new TransactionError(\n LiFiErrorCode.TransactionCanceled,\n 'Safe transaction was replaced by another transaction.'\n )\n }\n }\n\n return undefined\n },\n // Dynamic backoff: 10s → 30s, increasing by 2s each poll\n (poll) => Math.min(basePollingInterval + poll * 2_000, 30_000),\n Number.MAX_SAFE_INTEGER,\n (_attempts, error) => !(error instanceof TransactionError)\n )\n } catch (error) {\n if (error instanceof TransactionError) {\n throw error\n }\n // Timeout or maxRetries exhausted\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Safe transaction timed out waiting for execution.'\n )\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AA2BA,eAAsB,gCACpB,QACA,EACE,SACA,aACA,WACA,iBACA,SAAS,aAEI;CACf,MAAM,sBAAsB,mBAAmB;CAC/C,MAAM,UAAU,aAAa,OAAY;CAEzC,MAAM,aAAaA,0BAAAA,cAAc,SADdC,4BAAAA,cAAc,OACmB,CAAC;CACrD,IAAI;CACJ,IAAI;CACJ,IAAI,YAAY;CAChB,MAAM,sBAAsB,UAAU,aAAa;CACnD,MAAM,YAAY,KAAK,KAAK;
|
|
1
|
+
{"version":3,"file":"waitForSafeTransactionExecution.js","names":["getSafeClient","getSafeApiKey","TransactionError","LiFiErrorCode"],"sources":["../../../src/actions/waitForSafeTransactionExecution.ts"],"sourcesContent":["import {\n LiFiErrorCode,\n type SDKClient,\n TransactionError,\n waitForResult,\n} from '@lifi/sdk'\nimport type { Address, Hash } from 'viem'\nimport { getSafeClient } from '../client/safeClient.js'\nimport { getSafeApiKey } from '../utils/getSafeApiKey.js'\n\nexport interface WaitForSafeTransactionExecutionProps {\n chainId: number\n safeAddress: Address\n signature: string\n pollingInterval?: number\n timeout?: number\n}\n\n/**\n * Polls the Safe Transaction Service until the transaction matching the given signature\n * is executed, then resolves with the on-chain transaction hash.\n *\n * @param client - {@link SDKClient}\n * @param props - {@link WaitForSafeTransactionExecutionProps}\n * @returns The on-chain transaction hash once the Safe transaction is executed.\n * @throws {TransactionError} If the transaction fails, is replaced, or polling times out.\n */\nexport async function waitForSafeTransactionExecution(\n client: SDKClient,\n {\n chainId,\n safeAddress,\n signature,\n pollingInterval,\n timeout: timeoutMs,\n }: WaitForSafeTransactionExecutionProps\n): Promise<Hash> {\n const basePollingInterval = pollingInterval ?? 10_000\n const timeout = timeoutMs ?? 3_600_000 * 24 // 24 hours default\n const safeApiKey = getSafeApiKey(client)\n const safeClient = getSafeClient(chainId, safeApiKey)\n let safeTxHash: Hash | undefined\n let originalNonce: number | undefined\n let pollCount = 0\n const normalizedSignature = signature.toLowerCase()\n const startTime = Date.now()\n\n try {\n return await waitForResult<Hash>(\n async () => {\n pollCount++\n\n if (Date.now() - startTime > timeout) {\n throw new Error('Safe transaction polling timed out')\n }\n\n // Resolve signature to safeTxHash\n if (!safeTxHash) {\n const { results } = await safeClient.getTransactions(safeAddress)\n\n const match = results.find((tx) =>\n tx.confirmations?.some(\n (c) => c.signature?.toLowerCase() === normalizedSignature\n )\n )\n if (!match) {\n return undefined\n }\n safeTxHash = match.safeTxHash as Hash\n originalNonce = Number(match.nonce)\n }\n\n // single-tx lookup for execution status\n const tx = await safeClient.getTransaction(safeTxHash)\n\n if (tx.isExecuted) {\n if (!tx.isSuccessful) {\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Safe transaction failed.'\n )\n }\n if (!tx.transactionHash) {\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Safe transaction executed but no transaction hash returned.'\n )\n }\n return tx.transactionHash as Hash\n }\n\n // Check for replacement every 3rd poll\n if (pollCount % 3 === 0) {\n const { results } = await safeClient.getTransactions(safeAddress)\n const replaced = results.find(\n (t) =>\n t.isExecuted &&\n Number(t.nonce) >= originalNonce! &&\n t.safeTxHash !== safeTxHash\n )\n if (replaced) {\n throw new TransactionError(\n LiFiErrorCode.TransactionCanceled,\n 'Safe transaction was replaced by another transaction.'\n )\n }\n }\n\n return undefined\n },\n // Dynamic backoff: 10s → 30s, increasing by 2s each poll\n (poll) => Math.min(basePollingInterval + poll * 2_000, 30_000),\n Number.MAX_SAFE_INTEGER,\n (_attempts, error) => !(error instanceof TransactionError)\n )\n } catch (error) {\n if (error instanceof TransactionError) {\n throw error\n }\n // Timeout or maxRetries exhausted\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Safe transaction timed out waiting for execution.'\n )\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AA2BA,eAAsB,gCACpB,QACA,EACE,SACA,aACA,WACA,iBACA,SAAS,aAEI;CACf,MAAM,sBAAsB,mBAAmB;CAC/C,MAAM,UAAU,aAAa,OAAY;CAEzC,MAAM,aAAaA,0BAAAA,cAAc,SADdC,4BAAAA,cAAc,OACmB,CAAC;CACrD,IAAI;CACJ,IAAI;CACJ,IAAI,YAAY;CAChB,MAAM,sBAAsB,UAAU,aAAa;CACnD,MAAM,YAAY,KAAK,KAAK;CAE5B,IAAI;EACF,OAAO,OAAA,GAAA,UAAA,eACL,YAAY;GACV;GAEA,IAAI,KAAK,KAAK,GAAG,YAAY,SAC3B,MAAM,IAAI,MAAM,qCAAqC;GAIvD,IAAI,CAAC,YAAY;IACf,MAAM,EAAE,YAAY,MAAM,WAAW,gBAAgB,YAAY;IAEjE,MAAM,QAAQ,QAAQ,MAAM,OAC1B,GAAG,eAAe,MACf,MAAM,EAAE,WAAW,aAAa,KAAK,oBACvC,CACF;IACD,IAAI,CAAC,OACH;IAEF,aAAa,MAAM;IACnB,gBAAgB,OAAO,MAAM,MAAM;;GAIrC,MAAM,KAAK,MAAM,WAAW,eAAe,WAAW;GAEtD,IAAI,GAAG,YAAY;IACjB,IAAI,CAAC,GAAG,cACN,MAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,2BACD;IAEH,IAAI,CAAC,GAAG,iBACN,MAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,mBACd,8DACD;IAEH,OAAO,GAAG;;GAIZ,IAAI,YAAY,MAAM,GAAG;IACvB,MAAM,EAAE,YAAY,MAAM,WAAW,gBAAgB,YAAY;IAOjE,IANiB,QAAQ,MACtB,MACC,EAAE,cACF,OAAO,EAAE,MAAM,IAAI,iBACnB,EAAE,eAAe,WAET,EACV,MAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,qBACd,wDACD;;MAON,SAAS,KAAK,IAAI,sBAAsB,OAAO,KAAO,IAAO,EAC9D,OAAO,mBACN,WAAW,UAAU,EAAE,iBAAiBD,UAAAA,kBAC1C;UACM,OAAO;EACd,IAAI,iBAAiBA,UAAAA,kBACnB,MAAM;EAGR,MAAM,IAAIA,UAAAA,iBACRC,UAAAA,cAAc,mBACd,oDACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waitForTransactionReceipt.js","names":["getPublicClient","TransactionError","LiFiErrorCode"],"sources":["../../../src/actions/waitForTransactionReceipt.ts"],"sourcesContent":["import {\n type ChainId,\n LiFiErrorCode,\n type SDKClient,\n TransactionError,\n} from '@lifi/sdk'\nimport type {\n Chain,\n Client,\n Hash,\n ReplacementReason,\n ReplacementReturnType,\n TransactionReceipt,\n} from 'viem'\nimport { waitForTransactionReceipt as waitForTransactionReceiptInternal } from 'viem/actions'\nimport { getPublicClient } from '../client/publicClient.js'\n\ninterface WaitForTransactionReceiptProps {\n client: Client\n chainId: ChainId\n txHash: Hash\n onReplaced?: (response: ReplacementReturnType<Chain | undefined>) => void\n}\n\nexport async function waitForTransactionReceipt(\n client: SDKClient,\n {\n client: viemClient,\n chainId,\n txHash,\n onReplaced,\n }: WaitForTransactionReceiptProps\n): Promise<TransactionReceipt | undefined> {\n let { transactionReceipt, replacementReason } = await waitForReceipt(\n viemClient,\n txHash,\n onReplaced\n )\n\n if (!transactionReceipt?.status) {\n const publicClient = await getPublicClient(client, chainId)\n const result = await waitForReceipt(publicClient, txHash, onReplaced)\n transactionReceipt = result.transactionReceipt\n replacementReason = result.replacementReason\n }\n\n if (transactionReceipt?.status === 'reverted') {\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Transaction was reverted.'\n )\n }\n // We should only allow repriced transaction to continue the execution.\n // Cancelled and replaced transactions should be treated as failed.\n if (replacementReason === 'cancelled' || replacementReason === 'replaced') {\n throw new TransactionError(\n LiFiErrorCode.TransactionCanceled,\n 'Transaction was canceled or replaced.'\n )\n }\n\n return transactionReceipt\n}\n\nasync function waitForReceipt(\n client: Client,\n txHash: Hash,\n onReplaced?: (response: ReplacementReturnType<Chain | undefined>) => void\n): Promise<{\n transactionReceipt?: TransactionReceipt\n replacementReason?: ReplacementReason\n}> {\n let replacementReason: ReplacementReason | undefined\n let transactionReceipt: TransactionReceipt | undefined\n\n try {\n transactionReceipt = await waitForTransactionReceiptInternal(client, {\n hash: txHash,\n onReplaced: (response) => {\n replacementReason = response.reason\n onReplaced?.(response)\n },\n })\n } catch {\n // We can ignore errors from waitForTransactionReceipt as we have a status check fallback\n }\n\n return { transactionReceipt, replacementReason }\n}\n"],"mappings":";;;;;AAwBA,eAAsB,0BACpB,QACA,EACE,QAAQ,YACR,SACA,QACA,cAEuC;CACzC,IAAI,EAAE,oBAAoB,sBAAsB,MAAM,eACpD,YACA,QACA,WACD;
|
|
1
|
+
{"version":3,"file":"waitForTransactionReceipt.js","names":["getPublicClient","TransactionError","LiFiErrorCode"],"sources":["../../../src/actions/waitForTransactionReceipt.ts"],"sourcesContent":["import {\n type ChainId,\n LiFiErrorCode,\n type SDKClient,\n TransactionError,\n} from '@lifi/sdk'\nimport type {\n Chain,\n Client,\n Hash,\n ReplacementReason,\n ReplacementReturnType,\n TransactionReceipt,\n} from 'viem'\nimport { waitForTransactionReceipt as waitForTransactionReceiptInternal } from 'viem/actions'\nimport { getPublicClient } from '../client/publicClient.js'\n\ninterface WaitForTransactionReceiptProps {\n client: Client\n chainId: ChainId\n txHash: Hash\n onReplaced?: (response: ReplacementReturnType<Chain | undefined>) => void\n}\n\nexport async function waitForTransactionReceipt(\n client: SDKClient,\n {\n client: viemClient,\n chainId,\n txHash,\n onReplaced,\n }: WaitForTransactionReceiptProps\n): Promise<TransactionReceipt | undefined> {\n let { transactionReceipt, replacementReason } = await waitForReceipt(\n viemClient,\n txHash,\n onReplaced\n )\n\n if (!transactionReceipt?.status) {\n const publicClient = await getPublicClient(client, chainId)\n const result = await waitForReceipt(publicClient, txHash, onReplaced)\n transactionReceipt = result.transactionReceipt\n replacementReason = result.replacementReason\n }\n\n if (transactionReceipt?.status === 'reverted') {\n throw new TransactionError(\n LiFiErrorCode.TransactionFailed,\n 'Transaction was reverted.'\n )\n }\n // We should only allow repriced transaction to continue the execution.\n // Cancelled and replaced transactions should be treated as failed.\n if (replacementReason === 'cancelled' || replacementReason === 'replaced') {\n throw new TransactionError(\n LiFiErrorCode.TransactionCanceled,\n 'Transaction was canceled or replaced.'\n )\n }\n\n return transactionReceipt\n}\n\nasync function waitForReceipt(\n client: Client,\n txHash: Hash,\n onReplaced?: (response: ReplacementReturnType<Chain | undefined>) => void\n): Promise<{\n transactionReceipt?: TransactionReceipt\n replacementReason?: ReplacementReason\n}> {\n let replacementReason: ReplacementReason | undefined\n let transactionReceipt: TransactionReceipt | undefined\n\n try {\n transactionReceipt = await waitForTransactionReceiptInternal(client, {\n hash: txHash,\n onReplaced: (response) => {\n replacementReason = response.reason\n onReplaced?.(response)\n },\n })\n } catch {\n // We can ignore errors from waitForTransactionReceipt as we have a status check fallback\n }\n\n return { transactionReceipt, replacementReason }\n}\n"],"mappings":";;;;;AAwBA,eAAsB,0BACpB,QACA,EACE,QAAQ,YACR,SACA,QACA,cAEuC;CACzC,IAAI,EAAE,oBAAoB,sBAAsB,MAAM,eACpD,YACA,QACA,WACD;CAED,IAAI,CAAC,oBAAoB,QAAQ;EAE/B,MAAM,SAAS,MAAM,eAAe,MADTA,4BAAAA,gBAAgB,QAAQ,QAAQ,EACT,QAAQ,WAAW;EACrE,qBAAqB,OAAO;EAC5B,oBAAoB,OAAO;;CAG7B,IAAI,oBAAoB,WAAW,YACjC,MAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,4BACD;CAIH,IAAI,sBAAsB,eAAe,sBAAsB,YAC7D,MAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,qBACd,wCACD;CAGH,OAAO;;AAGT,eAAe,eACb,QACA,QACA,YAIC;CACD,IAAI;CACJ,IAAI;CAEJ,IAAI;EACF,qBAAqB,OAAA,GAAA,aAAA,2BAAwC,QAAQ;GACnE,MAAM;GACN,aAAa,aAAa;IACxB,oBAAoB,SAAS;IAC7B,aAAa,SAAS;;GAEzB,CAAC;SACI;CAIR,OAAO;EAAE;EAAoB;EAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publicClient.js","names":["ChainId","mainnet","UNS_PROXY_READER_ADDRESSES","ChainType"],"sources":["../../../src/client/publicClient.ts"],"sourcesContent":["import { ChainId, ChainType, type SDKClient } from '@lifi/sdk'\nimport type { Client } from 'viem'\nimport { type Address, createClient, fallback, http, webSocket } from 'viem'\nimport { type Chain, mainnet } from 'viem/chains'\nimport { UNS_PROXY_READER_ADDRESSES } from '../actions/constants.js'\nimport type { EthereumSDKProvider } from '../types.js'\n\n// cached providers\nconst publicClients: Record<number, Client> = {}\n\n/**\n * Get an instance of a provider for a specific chain\n * @param client - The SDK client\n * @param chainId - Id of the chain the provider is for\n * @returns The public client for the given chain\n */\nexport const getPublicClient = async (\n client: SDKClient,\n chainId: number\n): Promise<Client> => {\n if (publicClients[chainId]) {\n return publicClients[chainId]\n }\n\n const urls = await client.getRpcUrlsByChainId(chainId)\n const fallbackTransports = urls.map((url) =>\n url.startsWith('wss')\n ? webSocket(url)\n : http(url, {\n batch: {\n batchSize: 64,\n },\n })\n )\n const _chain = await client.getChainById(chainId)\n const chain: Chain = {\n ..._chain,\n ..._chain.metamask,\n name: _chain.metamask.chainName,\n rpcUrls: {\n default: { http: _chain.metamask.rpcUrls },\n public: { http: _chain.metamask.rpcUrls },\n },\n }\n // Add ENS contracts\n if (chain.id === ChainId.ETH) {\n chain.contracts = {\n ...mainnet.contracts,\n ...chain.contracts,\n }\n }\n\n // Add UNS contracts for supported chains\n if (chain.id === ChainId.ETH || chain.id === ChainId.POL) {\n const unsProxyAddress = UNS_PROXY_READER_ADDRESSES[chain.id]\n\n chain.contracts = {\n ...chain.contracts,\n unsProxyReader: { address: unsProxyAddress as Address },\n }\n }\n\n const provider = client.getProvider(ChainType.EVM) as\n | EthereumSDKProvider\n | undefined\n publicClients[chainId] = createClient({\n chain: chain,\n transport: fallback(\n fallbackTransports,\n provider?.options?.fallbackTransportConfig\n ),\n batch: {\n multicall: true,\n },\n })\n\n return publicClients[chainId]\n}\n"],"mappings":";;;;;;AAQA,MAAM,gBAAwC,EAAE;;;;;;;AAQhD,MAAa,kBAAkB,OAC7B,QACA,YACoB;
|
|
1
|
+
{"version":3,"file":"publicClient.js","names":["ChainId","mainnet","UNS_PROXY_READER_ADDRESSES","ChainType"],"sources":["../../../src/client/publicClient.ts"],"sourcesContent":["import { ChainId, ChainType, type SDKClient } from '@lifi/sdk'\nimport type { Client } from 'viem'\nimport { type Address, createClient, fallback, http, webSocket } from 'viem'\nimport { type Chain, mainnet } from 'viem/chains'\nimport { UNS_PROXY_READER_ADDRESSES } from '../actions/constants.js'\nimport type { EthereumSDKProvider } from '../types.js'\n\n// cached providers\nconst publicClients: Record<number, Client> = {}\n\n/**\n * Get an instance of a provider for a specific chain\n * @param client - The SDK client\n * @param chainId - Id of the chain the provider is for\n * @returns The public client for the given chain\n */\nexport const getPublicClient = async (\n client: SDKClient,\n chainId: number\n): Promise<Client> => {\n if (publicClients[chainId]) {\n return publicClients[chainId]\n }\n\n const urls = await client.getRpcUrlsByChainId(chainId)\n const fallbackTransports = urls.map((url) =>\n url.startsWith('wss')\n ? webSocket(url)\n : http(url, {\n batch: {\n batchSize: 64,\n },\n })\n )\n const _chain = await client.getChainById(chainId)\n const chain: Chain = {\n ..._chain,\n ..._chain.metamask,\n name: _chain.metamask.chainName,\n rpcUrls: {\n default: { http: _chain.metamask.rpcUrls },\n public: { http: _chain.metamask.rpcUrls },\n },\n }\n // Add ENS contracts\n if (chain.id === ChainId.ETH) {\n chain.contracts = {\n ...mainnet.contracts,\n ...chain.contracts,\n }\n }\n\n // Add UNS contracts for supported chains\n if (chain.id === ChainId.ETH || chain.id === ChainId.POL) {\n const unsProxyAddress = UNS_PROXY_READER_ADDRESSES[chain.id]\n\n chain.contracts = {\n ...chain.contracts,\n unsProxyReader: { address: unsProxyAddress as Address },\n }\n }\n\n const provider = client.getProvider(ChainType.EVM) as\n | EthereumSDKProvider\n | undefined\n publicClients[chainId] = createClient({\n chain: chain,\n transport: fallback(\n fallbackTransports,\n provider?.options?.fallbackTransportConfig\n ),\n batch: {\n multicall: true,\n },\n })\n\n return publicClients[chainId]\n}\n"],"mappings":";;;;;;AAQA,MAAM,gBAAwC,EAAE;;;;;;;AAQhD,MAAa,kBAAkB,OAC7B,QACA,YACoB;CACpB,IAAI,cAAc,UAChB,OAAO,cAAc;CAIvB,MAAM,sBAAqB,MADR,OAAO,oBAAoB,QAAQ,EACtB,KAAK,QACnC,IAAI,WAAW,MAAM,IAAA,GAAA,KAAA,WACP,IAAI,IAAA,GAAA,KAAA,MACT,KAAK,EACR,OAAO,EACL,WAAW,IACZ,EACF,CAAC,CACP;CACD,MAAM,SAAS,MAAM,OAAO,aAAa,QAAQ;CACjD,MAAM,QAAe;EACnB,GAAG;EACH,GAAG,OAAO;EACV,MAAM,OAAO,SAAS;EACtB,SAAS;GACP,SAAS,EAAE,MAAM,OAAO,SAAS,SAAS;GAC1C,QAAQ,EAAE,MAAM,OAAO,SAAS,SAAS;GAC1C;EACF;CAED,IAAI,MAAM,OAAOA,UAAAA,QAAQ,KACvB,MAAM,YAAY;EAChB,GAAGC,YAAAA,QAAQ;EACX,GAAG,MAAM;EACV;CAIH,IAAI,MAAM,OAAOD,UAAAA,QAAQ,OAAO,MAAM,OAAOA,UAAAA,QAAQ,KAAK;EACxD,MAAM,kBAAkBE,0BAAAA,2BAA2B,MAAM;EAEzD,MAAM,YAAY;GAChB,GAAG,MAAM;GACT,gBAAgB,EAAE,SAAS,iBAA4B;GACxD;;CAMH,cAAc,YAAA,GAAA,KAAA,cAAwB;EAC7B;EACP,YAAA,GAAA,KAAA,UACE,oBANa,OAAO,YAAYC,UAAAA,UAAU,IAOlC,EAAE,SAAS,wBACpB;EACD,OAAO,EACL,WAAW,MACZ;EACF,CAAC;CAEF,OAAO,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeClient.js","names":["LruMap"],"sources":["../../../src/client/safeClient.ts"],"sourcesContent":["import { LruMap } from '@lifi/sdk'\nimport type { Address, Hash } from 'viem'\nimport type {\n SafeInfo,\n SafeMultisigTransaction,\n SafeMultisigTransactionList,\n} from './types.js'\n\nconst SAFE_CLIENT_GATEWAY = 'https://safe-client.safe.global'\n\n// 1 hour TTL for transaction service URLs (rarely change)\nconst TX_SERVICE_URL_CACHE_TTL = 60 * 60 * 1_000\n\ninterface CacheEntry<T> {\n value: T\n expiresAt: number\n}\n\n// Cache for Safe Transaction Service URLs per chain\nconst txServiceUrlCache = new LruMap<CacheEntry<string>>(12)\n\n/**\n * Resolve the Safe Transaction Service URL for a given chain ID\n */\nasync function getTransactionServiceUrl(chainId: number): Promise<string> {\n const cached = txServiceUrlCache.get(chainId.toString())\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value\n }\n\n const response = await fetch(`${SAFE_CLIENT_GATEWAY}/v1/chains/${chainId}`)\n if (!response.ok) {\n throw new Error(\n `Failed to resolve Safe Transaction Service URL for chain ${chainId}: ${response.status}`\n )\n }\n\n const data = (await response.json()) as {\n transactionService: string\n }\n\n const url = data.transactionService\n txServiceUrlCache.set(chainId.toString(), {\n value: url,\n expiresAt: Date.now() + TX_SERVICE_URL_CACHE_TTL,\n })\n return url\n}\n\nasync function request<T>(\n chainId: number,\n path: string,\n apiKey?: string\n): Promise<T> {\n const baseUrl = await getTransactionServiceUrl(chainId)\n const headers: Record<string, string> = {}\n if (apiKey) {\n headers.Authorization = `Bearer ${apiKey}`\n }\n const response = await fetch(`${baseUrl}${path}`, { headers })\n if (!response.ok) {\n throw new Error(\n `Safe Transaction Service request failed: ${response.status} ${response.statusText}`\n )\n }\n return response.json() as Promise<T>\n}\n\nexport interface SafeClientInterface {\n getInfo: (address: Address) => Promise<SafeInfo>\n getTransaction: (safeTxHash: Hash) => Promise<SafeMultisigTransaction>\n getTransactions: (\n safeAddress: Address,\n options?: { executed?: boolean; limit?: number }\n ) => Promise<SafeMultisigTransactionList>\n}\n\nexport const getSafeClient = (\n chainId: number,\n apiKey?: string\n): SafeClientInterface => ({\n getInfo: (address: Address) =>\n request<SafeInfo>(chainId, `/api/v1/safes/${address}/`, apiKey),\n\n getTransaction: (safeTxHash: Hash) =>\n request<SafeMultisigTransaction>(\n chainId,\n `/api/v1/multisig-transactions/${safeTxHash}/`,\n apiKey\n ),\n\n getTransactions: (\n safeAddress: Address,\n options?: { executed?: boolean; limit?: number }\n ) => {\n const params = new URLSearchParams()\n if (options?.executed !== undefined) {\n params.set('executed', String(options.executed))\n }\n if (options?.limit !== undefined) {\n params.set('limit', String(options.limit))\n }\n const qs = params.toString()\n return request<SafeMultisigTransactionList>(\n chainId,\n `/api/v1/safes/${safeAddress}/multisig-transactions/${qs ? `?${qs}` : ''}`,\n apiKey\n )\n },\n})\n\nexport type SafeClient = ReturnType<typeof getSafeClient>\n"],"mappings":";;;AAQA,MAAM,sBAAsB;AAG5B,MAAM,2BAA2B,OAAU;AAQ3C,MAAM,oBAAoB,IAAIA,UAAAA,OAA2B,GAAG;;;;AAK5D,eAAe,yBAAyB,SAAkC;CACxE,MAAM,SAAS,kBAAkB,IAAI,QAAQ,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"safeClient.js","names":["LruMap"],"sources":["../../../src/client/safeClient.ts"],"sourcesContent":["import { LruMap } from '@lifi/sdk'\nimport type { Address, Hash } from 'viem'\nimport type {\n SafeInfo,\n SafeMultisigTransaction,\n SafeMultisigTransactionList,\n} from './types.js'\n\nconst SAFE_CLIENT_GATEWAY = 'https://safe-client.safe.global'\n\n// 1 hour TTL for transaction service URLs (rarely change)\nconst TX_SERVICE_URL_CACHE_TTL = 60 * 60 * 1_000\n\ninterface CacheEntry<T> {\n value: T\n expiresAt: number\n}\n\n// Cache for Safe Transaction Service URLs per chain\nconst txServiceUrlCache = new LruMap<CacheEntry<string>>(12)\n\n/**\n * Resolve the Safe Transaction Service URL for a given chain ID\n */\nasync function getTransactionServiceUrl(chainId: number): Promise<string> {\n const cached = txServiceUrlCache.get(chainId.toString())\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value\n }\n\n const response = await fetch(`${SAFE_CLIENT_GATEWAY}/v1/chains/${chainId}`)\n if (!response.ok) {\n throw new Error(\n `Failed to resolve Safe Transaction Service URL for chain ${chainId}: ${response.status}`\n )\n }\n\n const data = (await response.json()) as {\n transactionService: string\n }\n\n const url = data.transactionService\n txServiceUrlCache.set(chainId.toString(), {\n value: url,\n expiresAt: Date.now() + TX_SERVICE_URL_CACHE_TTL,\n })\n return url\n}\n\nasync function request<T>(\n chainId: number,\n path: string,\n apiKey?: string\n): Promise<T> {\n const baseUrl = await getTransactionServiceUrl(chainId)\n const headers: Record<string, string> = {}\n if (apiKey) {\n headers.Authorization = `Bearer ${apiKey}`\n }\n const response = await fetch(`${baseUrl}${path}`, { headers })\n if (!response.ok) {\n throw new Error(\n `Safe Transaction Service request failed: ${response.status} ${response.statusText}`\n )\n }\n return response.json() as Promise<T>\n}\n\nexport interface SafeClientInterface {\n getInfo: (address: Address) => Promise<SafeInfo>\n getTransaction: (safeTxHash: Hash) => Promise<SafeMultisigTransaction>\n getTransactions: (\n safeAddress: Address,\n options?: { executed?: boolean; limit?: number }\n ) => Promise<SafeMultisigTransactionList>\n}\n\nexport const getSafeClient = (\n chainId: number,\n apiKey?: string\n): SafeClientInterface => ({\n getInfo: (address: Address) =>\n request<SafeInfo>(chainId, `/api/v1/safes/${address}/`, apiKey),\n\n getTransaction: (safeTxHash: Hash) =>\n request<SafeMultisigTransaction>(\n chainId,\n `/api/v1/multisig-transactions/${safeTxHash}/`,\n apiKey\n ),\n\n getTransactions: (\n safeAddress: Address,\n options?: { executed?: boolean; limit?: number }\n ) => {\n const params = new URLSearchParams()\n if (options?.executed !== undefined) {\n params.set('executed', String(options.executed))\n }\n if (options?.limit !== undefined) {\n params.set('limit', String(options.limit))\n }\n const qs = params.toString()\n return request<SafeMultisigTransactionList>(\n chainId,\n `/api/v1/safes/${safeAddress}/multisig-transactions/${qs ? `?${qs}` : ''}`,\n apiKey\n )\n },\n})\n\nexport type SafeClient = ReturnType<typeof getSafeClient>\n"],"mappings":";;;AAQA,MAAM,sBAAsB;AAG5B,MAAM,2BAA2B,OAAU;AAQ3C,MAAM,oBAAoB,IAAIA,UAAAA,OAA2B,GAAG;;;;AAK5D,eAAe,yBAAyB,SAAkC;CACxE,MAAM,SAAS,kBAAkB,IAAI,QAAQ,UAAU,CAAC;CACxD,IAAI,UAAU,OAAO,YAAY,KAAK,KAAK,EACzC,OAAO,OAAO;CAGhB,MAAM,WAAW,MAAM,MAAM,GAAG,oBAAoB,aAAa,UAAU;CAC3E,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,MACR,4DAA4D,QAAQ,IAAI,SAAS,SAClF;CAOH,MAAM,OAAM,MAJQ,SAAS,MAAM,EAIlB;CACjB,kBAAkB,IAAI,QAAQ,UAAU,EAAE;EACxC,OAAO;EACP,WAAW,KAAK,KAAK,GAAG;EACzB,CAAC;CACF,OAAO;;AAGT,eAAe,QACb,SACA,MACA,QACY;CACZ,MAAM,UAAU,MAAM,yBAAyB,QAAQ;CACvD,MAAM,UAAkC,EAAE;CAC1C,IAAI,QACF,QAAQ,gBAAgB,UAAU;CAEpC,MAAM,WAAW,MAAM,MAAM,GAAG,UAAU,QAAQ,EAAE,SAAS,CAAC;CAC9D,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,MACR,4CAA4C,SAAS,OAAO,GAAG,SAAS,aACzE;CAEH,OAAO,SAAS,MAAM;;AAYxB,MAAa,iBACX,SACA,YACyB;CACzB,UAAU,YACR,QAAkB,SAAS,iBAAiB,QAAQ,IAAI,OAAO;CAEjE,iBAAiB,eACf,QACE,SACA,iCAAiC,WAAW,IAC5C,OACD;CAEH,kBACE,aACA,YACG;EACH,MAAM,SAAS,IAAI,iBAAiB;EACpC,IAAI,SAAS,aAAa,KAAA,GACxB,OAAO,IAAI,YAAY,OAAO,QAAQ,SAAS,CAAC;EAElD,IAAI,SAAS,UAAU,KAAA,GACrB,OAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;EAE5C,MAAM,KAAK,OAAO,UAAU;EAC5B,OAAO,QACL,SACA,iBAAiB,YAAY,yBAAyB,KAAK,IAAI,OAAO,MACtE,OACD;;CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumStepExecutor.js","names":["BaseStepExecutor","parseEthereumErrors","switchChain","getAddresses","TransactionError","LiFiErrorCode","isZeroAddress","EthereumCheckPermitsTask","EthereumCheckAllowanceTask","EthereumNativePermitTask","EthereumResetAllowanceTask","EthereumSetAllowanceTask","EthereumCheckBalanceTask","EthereumPrepareTransactionTask","EthereumSignAndExecuteTask","EthereumWaitForTransactionTask","EthereumWaitForTransactionStatusTask","shouldCheckForAllowance","TaskPipeline"],"sources":["../../../src/core/EthereumStepExecutor.ts"],"sourcesContent":["import {\n BaseStepExecutor,\n createDefaultStorage,\n type ExecuteStepRetryError,\n type ExecuteStepRetryParams,\n type ExecutionAction,\n LiFiErrorCode,\n type LiFiStepExtended,\n type SDKClient,\n type SDKError,\n type SDKStorage,\n type StepExecutorBaseContext,\n type StepExecutorOptions,\n TaskPipeline,\n TransactionError,\n} from '@lifi/sdk'\nimport type { Client, GetAddressesReturnType } from 'viem'\nimport { getAddresses } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport { parseEthereumErrors } from '../errors/parseEthereumErrors.js'\nimport type { EthereumStepExecutorContext } from '../types.js'\nimport { isZeroAddress } from '../utils/isZeroAddress.js'\nimport { EthereumCheckAllowanceTask } from './tasks/EthereumCheckAllowanceTask.js'\nimport { EthereumCheckBalanceTask } from './tasks/EthereumCheckBalanceTask.js'\nimport { EthereumCheckPermitsTask } from './tasks/EthereumCheckPermitsTask.js'\nimport { EthereumNativePermitTask } from './tasks/EthereumNativePermitTask.js'\nimport { EthereumPrepareTransactionTask } from './tasks/EthereumPrepareTransactionTask.js'\nimport { EthereumResetAllowanceTask } from './tasks/EthereumResetAllowanceTask.js'\nimport { EthereumSetAllowanceTask } from './tasks/EthereumSetAllowanceTask.js'\nimport { EthereumSignAndExecuteTask } from './tasks/EthereumSignAndExecuteTask.js'\nimport { EthereumWaitForTransactionStatusTask } from './tasks/EthereumWaitForTransactionStatusTask.js'\nimport { EthereumWaitForTransactionTask } from './tasks/EthereumWaitForTransactionTask.js'\nimport { shouldCheckForAllowance } from './tasks/helpers/shouldCheckForAllowance.js'\nimport { switchChain } from './tasks/helpers/switchChain.js'\n\ninterface EthereumStepExecutorOptions extends StepExecutorOptions {\n client: Client\n switchChain?: (chainId: number) => Promise<Client | undefined>\n disableMessageSigning?: boolean\n}\n\nexport class EthereumStepExecutor extends BaseStepExecutor {\n private client: Client\n private switchChain?: (chainId: number) => Promise<Client | undefined>\n private storage?: SDKStorage\n private disableMessageSigning?: boolean\n\n constructor(options: EthereumStepExecutorOptions) {\n super(options)\n this.client = options.client\n this.switchChain = options.switchChain\n this.disableMessageSigning = options.disableMessageSigning\n }\n\n private getStorage = (client: SDKClient): SDKStorage => {\n if (!this.storage) {\n this.storage = client.config.storage ?? createDefaultStorage()\n }\n return this.storage\n }\n\n override parseErrors = (\n error: Error,\n step?: LiFiStepExtended,\n action?: ExecutionAction,\n retryParams?: ExecuteStepRetryParams\n ): Promise<SDKError | ExecuteStepRetryError> =>\n parseEthereumErrors(error, step, action, retryParams)\n\n // Ensure that we are using the right chain and wallet when executing transactions.\n checkClient = async (\n step: LiFiStepExtended,\n targetChainId?: number\n ): Promise<Client | undefined> => {\n const updatedClient = await switchChain(\n this.client,\n targetChainId ?? step.action.fromChainId,\n this.allowUserInteraction,\n this.switchChain\n )\n if (updatedClient) {\n this.client = updatedClient\n }\n\n // Prevent execution of the quote by wallet different from the one which requested the quote\n let accountAddress = this.client.account?.address\n if (!accountAddress) {\n const accountAddresses = (await getAction(\n this.client,\n getAddresses,\n 'getAddresses'\n )(undefined)) as GetAddressesReturnType\n accountAddress = accountAddresses?.[0]\n }\n if (\n accountAddress?.toLowerCase() !== step.action.fromAddress?.toLowerCase()\n ) {\n throw new TransactionError(\n LiFiErrorCode.WalletChangedDuringExecution,\n 'The wallet address that requested the quote does not match the wallet address attempting to sign the transaction.'\n )\n }\n return updatedClient\n }\n\n override createContext = async (\n baseContext: StepExecutorBaseContext\n ): Promise<EthereumStepExecutorContext> => {\n const { step, fromChain } = baseContext\n\n const isFromNativeToken =\n fromChain.nativeToken.address === step.action.fromToken.address &&\n isZeroAddress(step.action.fromToken.address)\n\n // Check if message signing is disabled - useful for smart contract wallets\n // We also disable message signing for custom steps\n const disableMessageSigning =\n !!this.disableMessageSigning || step.type !== 'lifi'\n\n return {\n ...baseContext,\n isFromNativeToken,\n disableMessageSigning,\n ethereumClient: this.client,\n checkClient: this.checkClient,\n getStorage: this.getStorage,\n // Signed typed data for native permits and other messages\n signedTypedData: [],\n // Calls for atomic batch transactions (EIP-5792)\n calls: [],\n }\n }\n\n override createPipeline = (\n context: EthereumStepExecutorContext\n ): TaskPipeline => {\n const { step, isBridgeExecution, isFromNativeToken } = context\n\n const tasks = [\n new EthereumCheckPermitsTask(),\n new EthereumCheckAllowanceTask(),\n new EthereumNativePermitTask(),\n new EthereumResetAllowanceTask(),\n new EthereumSetAllowanceTask(),\n new EthereumCheckBalanceTask(),\n new EthereumPrepareTransactionTask(),\n new EthereumSignAndExecuteTask(),\n new EthereumWaitForTransactionTask(),\n new EthereumWaitForTransactionStatusTask(),\n ]\n\n const doCheckAllowance = shouldCheckForAllowance(\n step,\n isBridgeExecution,\n isFromNativeToken,\n this.statusManager\n )\n\n let taskName: string\n if (doCheckAllowance) {\n taskName = EthereumCheckPermitsTask.name\n } else {\n const swapOrBridgeAction = this.statusManager.findAction(\n step,\n isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'\n )\n taskName =\n swapOrBridgeAction?.txHash || swapOrBridgeAction?.taskId\n ? swapOrBridgeAction?.status === 'DONE'\n ? EthereumWaitForTransactionStatusTask.name\n : EthereumWaitForTransactionTask.name\n : EthereumCheckBalanceTask.name\n }\n\n const firstTaskIndex = tasks.findIndex(\n (task) => task.constructor.name === taskName\n )\n\n const tasksToRun = tasks.slice(firstTaskIndex)\n\n return new TaskPipeline(tasksToRun)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAyCA,IAAa,uBAAb,cAA0CA,UAAAA,iBAAiB;CACzD;CACA;CACA;CACA;CAEA,YAAY,SAAsC;
|
|
1
|
+
{"version":3,"file":"EthereumStepExecutor.js","names":["BaseStepExecutor","parseEthereumErrors","switchChain","getAddresses","TransactionError","LiFiErrorCode","isZeroAddress","EthereumCheckPermitsTask","EthereumCheckAllowanceTask","EthereumNativePermitTask","EthereumResetAllowanceTask","EthereumSetAllowanceTask","EthereumCheckBalanceTask","EthereumPrepareTransactionTask","EthereumSignAndExecuteTask","EthereumWaitForTransactionTask","EthereumWaitForTransactionStatusTask","shouldCheckForAllowance","TaskPipeline"],"sources":["../../../src/core/EthereumStepExecutor.ts"],"sourcesContent":["import {\n BaseStepExecutor,\n createDefaultStorage,\n type ExecuteStepRetryError,\n type ExecuteStepRetryParams,\n type ExecutionAction,\n LiFiErrorCode,\n type LiFiStepExtended,\n type SDKClient,\n type SDKError,\n type SDKStorage,\n type StepExecutorBaseContext,\n type StepExecutorOptions,\n TaskPipeline,\n TransactionError,\n} from '@lifi/sdk'\nimport type { Client, GetAddressesReturnType } from 'viem'\nimport { getAddresses } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport { parseEthereumErrors } from '../errors/parseEthereumErrors.js'\nimport type { EthereumStepExecutorContext } from '../types.js'\nimport { isZeroAddress } from '../utils/isZeroAddress.js'\nimport { EthereumCheckAllowanceTask } from './tasks/EthereumCheckAllowanceTask.js'\nimport { EthereumCheckBalanceTask } from './tasks/EthereumCheckBalanceTask.js'\nimport { EthereumCheckPermitsTask } from './tasks/EthereumCheckPermitsTask.js'\nimport { EthereumNativePermitTask } from './tasks/EthereumNativePermitTask.js'\nimport { EthereumPrepareTransactionTask } from './tasks/EthereumPrepareTransactionTask.js'\nimport { EthereumResetAllowanceTask } from './tasks/EthereumResetAllowanceTask.js'\nimport { EthereumSetAllowanceTask } from './tasks/EthereumSetAllowanceTask.js'\nimport { EthereumSignAndExecuteTask } from './tasks/EthereumSignAndExecuteTask.js'\nimport { EthereumWaitForTransactionStatusTask } from './tasks/EthereumWaitForTransactionStatusTask.js'\nimport { EthereumWaitForTransactionTask } from './tasks/EthereumWaitForTransactionTask.js'\nimport { shouldCheckForAllowance } from './tasks/helpers/shouldCheckForAllowance.js'\nimport { switchChain } from './tasks/helpers/switchChain.js'\n\ninterface EthereumStepExecutorOptions extends StepExecutorOptions {\n client: Client\n switchChain?: (chainId: number) => Promise<Client | undefined>\n disableMessageSigning?: boolean\n}\n\nexport class EthereumStepExecutor extends BaseStepExecutor {\n private client: Client\n private switchChain?: (chainId: number) => Promise<Client | undefined>\n private storage?: SDKStorage\n private disableMessageSigning?: boolean\n\n constructor(options: EthereumStepExecutorOptions) {\n super(options)\n this.client = options.client\n this.switchChain = options.switchChain\n this.disableMessageSigning = options.disableMessageSigning\n }\n\n private getStorage = (client: SDKClient): SDKStorage => {\n if (!this.storage) {\n this.storage = client.config.storage ?? createDefaultStorage()\n }\n return this.storage\n }\n\n override parseErrors = (\n error: Error,\n step?: LiFiStepExtended,\n action?: ExecutionAction,\n retryParams?: ExecuteStepRetryParams\n ): Promise<SDKError | ExecuteStepRetryError> =>\n parseEthereumErrors(error, step, action, retryParams)\n\n // Ensure that we are using the right chain and wallet when executing transactions.\n checkClient = async (\n step: LiFiStepExtended,\n targetChainId?: number\n ): Promise<Client | undefined> => {\n const updatedClient = await switchChain(\n this.client,\n targetChainId ?? step.action.fromChainId,\n this.allowUserInteraction,\n this.switchChain\n )\n if (updatedClient) {\n this.client = updatedClient\n }\n\n // Prevent execution of the quote by wallet different from the one which requested the quote\n let accountAddress = this.client.account?.address\n if (!accountAddress) {\n const accountAddresses = (await getAction(\n this.client,\n getAddresses,\n 'getAddresses'\n )(undefined)) as GetAddressesReturnType\n accountAddress = accountAddresses?.[0]\n }\n if (\n accountAddress?.toLowerCase() !== step.action.fromAddress?.toLowerCase()\n ) {\n throw new TransactionError(\n LiFiErrorCode.WalletChangedDuringExecution,\n 'The wallet address that requested the quote does not match the wallet address attempting to sign the transaction.'\n )\n }\n return updatedClient\n }\n\n override createContext = async (\n baseContext: StepExecutorBaseContext\n ): Promise<EthereumStepExecutorContext> => {\n const { step, fromChain } = baseContext\n\n const isFromNativeToken =\n fromChain.nativeToken.address === step.action.fromToken.address &&\n isZeroAddress(step.action.fromToken.address)\n\n // Check if message signing is disabled - useful for smart contract wallets\n // We also disable message signing for custom steps\n const disableMessageSigning =\n !!this.disableMessageSigning || step.type !== 'lifi'\n\n return {\n ...baseContext,\n isFromNativeToken,\n disableMessageSigning,\n ethereumClient: this.client,\n checkClient: this.checkClient,\n getStorage: this.getStorage,\n // Signed typed data for native permits and other messages\n signedTypedData: [],\n // Calls for atomic batch transactions (EIP-5792)\n calls: [],\n }\n }\n\n override createPipeline = (\n context: EthereumStepExecutorContext\n ): TaskPipeline => {\n const { step, isBridgeExecution, isFromNativeToken } = context\n\n const tasks = [\n new EthereumCheckPermitsTask(),\n new EthereumCheckAllowanceTask(),\n new EthereumNativePermitTask(),\n new EthereumResetAllowanceTask(),\n new EthereumSetAllowanceTask(),\n new EthereumCheckBalanceTask(),\n new EthereumPrepareTransactionTask(),\n new EthereumSignAndExecuteTask(),\n new EthereumWaitForTransactionTask(),\n new EthereumWaitForTransactionStatusTask(),\n ]\n\n const doCheckAllowance = shouldCheckForAllowance(\n step,\n isBridgeExecution,\n isFromNativeToken,\n this.statusManager\n )\n\n let taskName: string\n if (doCheckAllowance) {\n taskName = EthereumCheckPermitsTask.name\n } else {\n const swapOrBridgeAction = this.statusManager.findAction(\n step,\n isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'\n )\n taskName =\n swapOrBridgeAction?.txHash || swapOrBridgeAction?.taskId\n ? swapOrBridgeAction?.status === 'DONE'\n ? EthereumWaitForTransactionStatusTask.name\n : EthereumWaitForTransactionTask.name\n : EthereumCheckBalanceTask.name\n }\n\n const firstTaskIndex = tasks.findIndex(\n (task) => task.constructor.name === taskName\n )\n\n const tasksToRun = tasks.slice(firstTaskIndex)\n\n return new TaskPipeline(tasksToRun)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAyCA,IAAa,uBAAb,cAA0CA,UAAAA,iBAAiB;CACzD;CACA;CACA;CACA;CAEA,YAAY,SAAsC;EAChD,MAAM,QAAQ;EACd,KAAK,SAAS,QAAQ;EACtB,KAAK,cAAc,QAAQ;EAC3B,KAAK,wBAAwB,QAAQ;;CAGvC,cAAsB,WAAkC;EACtD,IAAI,CAAC,KAAK,SACR,KAAK,UAAU,OAAO,OAAO,YAAA,GAAA,UAAA,uBAAiC;EAEhE,OAAO,KAAK;;CAGd,eACE,OACA,MACA,QACA,gBAEAC,mCAAAA,oBAAoB,OAAO,MAAM,QAAQ,YAAY;CAGvD,cAAc,OACZ,MACA,kBACgC;EAChC,MAAM,gBAAgB,MAAMC,uCAAAA,YAC1B,KAAK,QACL,iBAAiB,KAAK,OAAO,aAC7B,KAAK,sBACL,KAAK,YACN;EACD,IAAI,eACF,KAAK,SAAS;EAIhB,IAAI,iBAAiB,KAAK,OAAO,SAAS;EAC1C,IAAI,CAAC,gBAMH,kBAAiB,OAAA,GAAA,WAAA,WAJf,KAAK,QACLC,aAAAA,cACA,eACD,CAAC,KAAA,EAAU,IACwB;EAEtC,IACE,gBAAgB,aAAa,KAAK,KAAK,OAAO,aAAa,aAAa,EAExE,MAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,8BACd,oHACD;EAEH,OAAO;;CAGT,gBAAyB,OACvB,gBACyC;EACzC,MAAM,EAAE,MAAM,cAAc;EAE5B,MAAM,oBACJ,UAAU,YAAY,YAAY,KAAK,OAAO,UAAU,WACxDC,4BAAAA,cAAc,KAAK,OAAO,UAAU,QAAQ;EAI9C,MAAM,wBACJ,CAAC,CAAC,KAAK,yBAAyB,KAAK,SAAS;EAEhD,OAAO;GACL,GAAG;GACH;GACA;GACA,gBAAgB,KAAK;GACrB,aAAa,KAAK;GAClB,YAAY,KAAK;GAEjB,iBAAiB,EAAE;GAEnB,OAAO,EAAE;GACV;;CAGH,kBACE,YACiB;EACjB,MAAM,EAAE,MAAM,mBAAmB,sBAAsB;EAEvD,MAAM,QAAQ;GACZ,IAAIC,4CAAAA,0BAA0B;GAC9B,IAAIC,8CAAAA,4BAA4B;GAChC,IAAIC,4CAAAA,0BAA0B;GAC9B,IAAIC,8CAAAA,4BAA4B;GAChC,IAAIC,4CAAAA,0BAA0B;GAC9B,IAAIC,4CAAAA,0BAA0B;GAC9B,IAAIC,kDAAAA,gCAAgC;GACpC,IAAIC,8CAAAA,4BAA4B;GAChC,IAAIC,kDAAAA,gCAAgC;GACpC,IAAIC,wDAAAA,sCAAsC;GAC3C;EAED,MAAM,mBAAmBC,mDAAAA,wBACvB,MACA,mBACA,mBACA,KAAK,cACN;EAED,IAAI;EACJ,IAAI,kBACF,WAAWV,4CAAAA,yBAAyB;OAC/B;GACL,MAAM,qBAAqB,KAAK,cAAc,WAC5C,MACA,oBAAoB,gBAAgB,OACrC;GACD,WACE,oBAAoB,UAAU,oBAAoB,SAC9C,oBAAoB,WAAW,SAC7BS,wDAAAA,qCAAqC,OACrCD,kDAAAA,+BAA+B,OACjCH,4CAAAA,yBAAyB;;EAGjC,MAAM,iBAAiB,MAAM,WAC1B,SAAS,KAAK,YAAY,SAAS,SACrC;EAID,OAAO,IAAIM,UAAAA,aAFQ,MAAM,MAAM,eAEG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumBatchedSignAndExecuteTask.js","names":["BaseStepExecutionTask","TransactionError","LiFiErrorCode","sendCalls"],"sources":["../../../../src/core/tasks/EthereumBatchedSignAndExecuteTask.ts"],"sourcesContent":["import {\n BaseStepExecutionTask,\n LiFiErrorCode,\n type TaskResult,\n TransactionError,\n} from '@lifi/sdk'\nimport type { Address, Hash, Hex } from 'viem'\nimport { sendCalls } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { Call, EthereumStepExecutorContext } from '../../types.js'\n\nexport class EthereumBatchedSignAndExecuteTask extends BaseStepExecutionTask {\n async run(context: EthereumStepExecutorContext): Promise<TaskResult> {\n const {\n step,\n fromChain,\n statusManager,\n checkClient,\n transactionRequest,\n calls: currentCalls,\n isBridgeExecution,\n } = context\n\n const calls = [...currentCalls]\n\n const action = statusManager.findAction(\n step,\n isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'\n )\n if (!action) {\n throw new TransactionError(\n LiFiErrorCode.TransactionUnprepared,\n 'Unable to prepare transaction. Action not found.'\n )\n }\n\n // Make sure that the chain is still correct\n const updatedClient = await checkClient(step)\n if (!updatedClient) {\n return { status: 'PAUSED' }\n }\n\n if (!transactionRequest) {\n throw new TransactionError(\n LiFiErrorCode.TransactionUnprepared,\n 'Unable to prepare transaction. Transaction request is not found.'\n )\n }\n\n const transferCall: Call = {\n chainId: fromChain.id,\n data: transactionRequest.data as Hex,\n to: transactionRequest.to as Address,\n value: transactionRequest.value,\n }\n\n calls.push(transferCall)\n\n const { id } = await getAction(\n updatedClient,\n sendCalls,\n 'sendCalls'\n )({\n account: updatedClient.account!,\n calls,\n })\n\n statusManager.updateAction(step, action.type, 'PENDING', {\n taskId: id as Hash,\n txType: 'batched',\n signedAt: Date.now(),\n })\n\n return { status: 'COMPLETED', context: { calls } }\n }\n}\n"],"mappings":";;;;;AAWA,IAAa,oCAAb,cAAuDA,UAAAA,sBAAsB;CAC3E,MAAM,IAAI,SAA2D;EACnE,MAAM,EACJ,MACA,WACA,eACA,aACA,oBACA,OAAO,cACP,sBACE;EAEJ,MAAM,QAAQ,CAAC,GAAG,aAAa;EAE/B,MAAM,SAAS,cAAc,WAC3B,MACA,oBAAoB,gBAAgB,OACrC;
|
|
1
|
+
{"version":3,"file":"EthereumBatchedSignAndExecuteTask.js","names":["BaseStepExecutionTask","TransactionError","LiFiErrorCode","sendCalls"],"sources":["../../../../src/core/tasks/EthereumBatchedSignAndExecuteTask.ts"],"sourcesContent":["import {\n BaseStepExecutionTask,\n LiFiErrorCode,\n type TaskResult,\n TransactionError,\n} from '@lifi/sdk'\nimport type { Address, Hash, Hex } from 'viem'\nimport { sendCalls } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { Call, EthereumStepExecutorContext } from '../../types.js'\n\nexport class EthereumBatchedSignAndExecuteTask extends BaseStepExecutionTask {\n async run(context: EthereumStepExecutorContext): Promise<TaskResult> {\n const {\n step,\n fromChain,\n statusManager,\n checkClient,\n transactionRequest,\n calls: currentCalls,\n isBridgeExecution,\n } = context\n\n const calls = [...currentCalls]\n\n const action = statusManager.findAction(\n step,\n isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'\n )\n if (!action) {\n throw new TransactionError(\n LiFiErrorCode.TransactionUnprepared,\n 'Unable to prepare transaction. Action not found.'\n )\n }\n\n // Make sure that the chain is still correct\n const updatedClient = await checkClient(step)\n if (!updatedClient) {\n return { status: 'PAUSED' }\n }\n\n if (!transactionRequest) {\n throw new TransactionError(\n LiFiErrorCode.TransactionUnprepared,\n 'Unable to prepare transaction. Transaction request is not found.'\n )\n }\n\n const transferCall: Call = {\n chainId: fromChain.id,\n data: transactionRequest.data as Hex,\n to: transactionRequest.to as Address,\n value: transactionRequest.value,\n }\n\n calls.push(transferCall)\n\n const { id } = await getAction(\n updatedClient,\n sendCalls,\n 'sendCalls'\n )({\n account: updatedClient.account!,\n calls,\n })\n\n statusManager.updateAction(step, action.type, 'PENDING', {\n taskId: id as Hash,\n txType: 'batched',\n signedAt: Date.now(),\n })\n\n return { status: 'COMPLETED', context: { calls } }\n }\n}\n"],"mappings":";;;;;AAWA,IAAa,oCAAb,cAAuDA,UAAAA,sBAAsB;CAC3E,MAAM,IAAI,SAA2D;EACnE,MAAM,EACJ,MACA,WACA,eACA,aACA,oBACA,OAAO,cACP,sBACE;EAEJ,MAAM,QAAQ,CAAC,GAAG,aAAa;EAE/B,MAAM,SAAS,cAAc,WAC3B,MACA,oBAAoB,gBAAgB,OACrC;EACD,IAAI,CAAC,QACH,MAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,uBACd,mDACD;EAIH,MAAM,gBAAgB,MAAM,YAAY,KAAK;EAC7C,IAAI,CAAC,eACH,OAAO,EAAE,QAAQ,UAAU;EAG7B,IAAI,CAAC,oBACH,MAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,uBACd,mEACD;EAGH,MAAM,eAAqB;GACzB,SAAS,UAAU;GACnB,MAAM,mBAAmB;GACzB,IAAI,mBAAmB;GACvB,OAAO,mBAAmB;GAC3B;EAED,MAAM,KAAK,aAAa;EAExB,MAAM,EAAE,OAAO,OAAA,GAAA,WAAA,WACb,eACAC,aAAAA,WACA,YACD,CAAC;GACA,SAAS,cAAc;GACvB;GACD,CAAC;EAEF,cAAc,aAAa,MAAM,OAAO,MAAM,WAAW;GACvD,QAAQ;GACR,QAAQ;GACR,UAAU,KAAK,KAAK;GACrB,CAAC;EAEF,OAAO;GAAE,QAAQ;GAAa,SAAS,EAAE,OAAO;GAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumBatchedWaitForTransactionTask.js","names":["BaseStepExecutionTask","TransactionError","LiFiErrorCode","waitForBatchTransactionReceipt"],"sources":["../../../../src/core/tasks/EthereumBatchedWaitForTransactionTask.ts"],"sourcesContent":["import {\n BaseStepExecutionTask,\n LiFiErrorCode,\n type TaskResult,\n TransactionError,\n} from '@lifi/sdk'\nimport type { Hash } from 'viem'\nimport { waitForBatchTransactionReceipt } from '../../actions/waitForBatchTransactionReceipt.js'\nimport type {\n EthereumStepExecutorContext,\n WalletCallReceipt,\n} from '../../types.js'\nimport { updateActionWithReceipt } from './helpers/updateActionWithReceipt.js'\n\nexport class EthereumBatchedWaitForTransactionTask extends BaseStepExecutionTask {\n async run(context: EthereumStepExecutorContext): Promise<TaskResult> {\n const { step, statusManager, fromChain, isBridgeExecution, checkClient } =\n context\n\n const action = statusManager.findAction(\n step,\n isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'\n )\n\n if (!action) {\n throw new TransactionError(\n LiFiErrorCode.TransactionUnprepared,\n 'Unable to prepare transaction. Action not found.'\n )\n }\n\n const updatedClient = await checkClient(step)\n if (!updatedClient) {\n return { status: 'PAUSED' }\n }\n\n const transactionReceipt = await waitForBatchTransactionReceipt(\n updatedClient,\n action.taskId as Hash,\n (result) => {\n const receipt = result.receipts?.find((r) => r.status === 'reverted') as\n | WalletCallReceipt\n | undefined\n if (receipt) {\n updateActionWithReceipt(\n statusManager,\n step,\n fromChain,\n receipt,\n action\n )\n }\n }\n )\n\n updateActionWithReceipt(\n statusManager,\n step,\n fromChain,\n transactionReceipt,\n action\n )\n\n if (isBridgeExecution) {\n statusManager.updateAction(step, action.type, 'DONE')\n }\n\n return { status: 'COMPLETED' }\n }\n}\n"],"mappings":";;;;;AAcA,IAAa,wCAAb,cAA2DA,UAAAA,sBAAsB;CAC/E,MAAM,IAAI,SAA2D;EACnE,MAAM,EAAE,MAAM,eAAe,WAAW,mBAAmB,gBACzD;EAEF,MAAM,SAAS,cAAc,WAC3B,MACA,oBAAoB,gBAAgB,OACrC;
|
|
1
|
+
{"version":3,"file":"EthereumBatchedWaitForTransactionTask.js","names":["BaseStepExecutionTask","TransactionError","LiFiErrorCode","waitForBatchTransactionReceipt"],"sources":["../../../../src/core/tasks/EthereumBatchedWaitForTransactionTask.ts"],"sourcesContent":["import {\n BaseStepExecutionTask,\n LiFiErrorCode,\n type TaskResult,\n TransactionError,\n} from '@lifi/sdk'\nimport type { Hash } from 'viem'\nimport { waitForBatchTransactionReceipt } from '../../actions/waitForBatchTransactionReceipt.js'\nimport type {\n EthereumStepExecutorContext,\n WalletCallReceipt,\n} from '../../types.js'\nimport { updateActionWithReceipt } from './helpers/updateActionWithReceipt.js'\n\nexport class EthereumBatchedWaitForTransactionTask extends BaseStepExecutionTask {\n async run(context: EthereumStepExecutorContext): Promise<TaskResult> {\n const { step, statusManager, fromChain, isBridgeExecution, checkClient } =\n context\n\n const action = statusManager.findAction(\n step,\n isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'\n )\n\n if (!action) {\n throw new TransactionError(\n LiFiErrorCode.TransactionUnprepared,\n 'Unable to prepare transaction. Action not found.'\n )\n }\n\n const updatedClient = await checkClient(step)\n if (!updatedClient) {\n return { status: 'PAUSED' }\n }\n\n const transactionReceipt = await waitForBatchTransactionReceipt(\n updatedClient,\n action.taskId as Hash,\n (result) => {\n const receipt = result.receipts?.find((r) => r.status === 'reverted') as\n | WalletCallReceipt\n | undefined\n if (receipt) {\n updateActionWithReceipt(\n statusManager,\n step,\n fromChain,\n receipt,\n action\n )\n }\n }\n )\n\n updateActionWithReceipt(\n statusManager,\n step,\n fromChain,\n transactionReceipt,\n action\n )\n\n if (isBridgeExecution) {\n statusManager.updateAction(step, action.type, 'DONE')\n }\n\n return { status: 'COMPLETED' }\n }\n}\n"],"mappings":";;;;;AAcA,IAAa,wCAAb,cAA2DA,UAAAA,sBAAsB;CAC/E,MAAM,IAAI,SAA2D;EACnE,MAAM,EAAE,MAAM,eAAe,WAAW,mBAAmB,gBACzD;EAEF,MAAM,SAAS,cAAc,WAC3B,MACA,oBAAoB,gBAAgB,OACrC;EAED,IAAI,CAAC,QACH,MAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,uBACd,mDACD;EAGH,MAAM,gBAAgB,MAAM,YAAY,KAAK;EAC7C,IAAI,CAAC,eACH,OAAO,EAAE,QAAQ,UAAU;EAsB7B,mDAAA,wBACE,eACA,MACA,WACA,MAvB+BC,+CAAAA,+BAC/B,eACA,OAAO,SACN,WAAW;GACV,MAAM,UAAU,OAAO,UAAU,MAAM,MAAM,EAAE,WAAW,WAAW;GAGrE,IAAI,SACF,mDAAA,wBACE,eACA,MACA,WACA,SACA,OACD;IAGN,EAOC,OACD;EAED,IAAI,mBACF,cAAc,aAAa,MAAM,OAAO,MAAM,OAAO;EAGvD,OAAO,EAAE,QAAQ,aAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumCheckAllowanceTask.js","names":["BaseStepExecutionTask","getEthereumExecutionStrategy","isPermit2Supported","getAllowance"],"sources":["../../../../src/core/tasks/EthereumCheckAllowanceTask.ts"],"sourcesContent":["import { BaseStepExecutionTask, type TaskResult } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getAllowance } from '../../actions/getAllowance.js'\nimport type { EthereumStepExecutorContext } from '../../types.js'\nimport { getEthereumExecutionStrategy } from './helpers/getEthereumExecutionStrategy.js'\nimport { isPermit2Supported } from './helpers/isPermit2Supported.js'\n\nexport class EthereumCheckAllowanceTask extends BaseStepExecutionTask {\n override async shouldRun(\n context: EthereumStepExecutorContext\n ): Promise<boolean> {\n return !context.hasMatchingPermit\n }\n\n async run(context: EthereumStepExecutorContext): Promise<TaskResult> {\n const {\n step,\n checkClient,\n fromChain,\n client,\n statusManager,\n isFromNativeToken,\n disableMessageSigning,\n } = context\n\n // Start new allowance check\n const action = statusManager.initializeAction({\n step,\n type: 'CHECK_ALLOWANCE',\n chainId: step.action.fromChainId,\n status: 'STARTED',\n })\n\n const executionStrategy = await getEthereumExecutionStrategy(context)\n const permit2Supported = isPermit2Supported(\n step,\n fromChain,\n isFromNativeToken,\n disableMessageSigning,\n executionStrategy\n )\n const spenderAddress = permit2Supported\n ? fromChain.permit2\n : step.estimate.approvalAddress\n\n const fromAmount = BigInt(step.action.fromAmount)\n\n const updatedClient = await checkClient(step)\n if (!updatedClient) {\n return { status: 'PAUSED' }\n }\n\n const allowance = await getAllowance(\n client,\n updatedClient,\n step.action.fromToken.address as Address,\n updatedClient.account!.address,\n spenderAddress as Address\n )\n\n statusManager.updateAction(step, action.type, 'DONE')\n\n return {\n status: 'COMPLETED',\n context: {\n hasAllowance: allowance > 0n,\n hasSufficientAllowance: fromAmount <= allowance,\n executionStrategy,\n },\n }\n }\n}\n"],"mappings":";;;;;;AAOA,IAAa,6BAAb,cAAgDA,UAAAA,sBAAsB;CACpE,MAAe,UACb,SACkB;
|
|
1
|
+
{"version":3,"file":"EthereumCheckAllowanceTask.js","names":["BaseStepExecutionTask","getEthereumExecutionStrategy","isPermit2Supported","getAllowance"],"sources":["../../../../src/core/tasks/EthereumCheckAllowanceTask.ts"],"sourcesContent":["import { BaseStepExecutionTask, type TaskResult } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getAllowance } from '../../actions/getAllowance.js'\nimport type { EthereumStepExecutorContext } from '../../types.js'\nimport { getEthereumExecutionStrategy } from './helpers/getEthereumExecutionStrategy.js'\nimport { isPermit2Supported } from './helpers/isPermit2Supported.js'\n\nexport class EthereumCheckAllowanceTask extends BaseStepExecutionTask {\n override async shouldRun(\n context: EthereumStepExecutorContext\n ): Promise<boolean> {\n return !context.hasMatchingPermit\n }\n\n async run(context: EthereumStepExecutorContext): Promise<TaskResult> {\n const {\n step,\n checkClient,\n fromChain,\n client,\n statusManager,\n isFromNativeToken,\n disableMessageSigning,\n } = context\n\n // Start new allowance check\n const action = statusManager.initializeAction({\n step,\n type: 'CHECK_ALLOWANCE',\n chainId: step.action.fromChainId,\n status: 'STARTED',\n })\n\n const executionStrategy = await getEthereumExecutionStrategy(context)\n const permit2Supported = isPermit2Supported(\n step,\n fromChain,\n isFromNativeToken,\n disableMessageSigning,\n executionStrategy\n )\n const spenderAddress = permit2Supported\n ? fromChain.permit2\n : step.estimate.approvalAddress\n\n const fromAmount = BigInt(step.action.fromAmount)\n\n const updatedClient = await checkClient(step)\n if (!updatedClient) {\n return { status: 'PAUSED' }\n }\n\n const allowance = await getAllowance(\n client,\n updatedClient,\n step.action.fromToken.address as Address,\n updatedClient.account!.address,\n spenderAddress as Address\n )\n\n statusManager.updateAction(step, action.type, 'DONE')\n\n return {\n status: 'COMPLETED',\n context: {\n hasAllowance: allowance > 0n,\n hasSufficientAllowance: fromAmount <= allowance,\n executionStrategy,\n },\n }\n }\n}\n"],"mappings":";;;;;;AAOA,IAAa,6BAAb,cAAgDA,UAAAA,sBAAsB;CACpE,MAAe,UACb,SACkB;EAClB,OAAO,CAAC,QAAQ;;CAGlB,MAAM,IAAI,SAA2D;EACnE,MAAM,EACJ,MACA,aACA,WACA,QACA,eACA,mBACA,0BACE;EAGJ,MAAM,SAAS,cAAc,iBAAiB;GAC5C;GACA,MAAM;GACN,SAAS,KAAK,OAAO;GACrB,QAAQ;GACT,CAAC;EAEF,MAAM,oBAAoB,MAAMC,wDAAAA,6BAA6B,QAAQ;EAQrE,MAAM,iBAPmBC,8CAAAA,mBACvB,MACA,WACA,mBACA,uBACA,kBAEqC,GACnC,UAAU,UACV,KAAK,SAAS;EAElB,MAAM,aAAa,OAAO,KAAK,OAAO,WAAW;EAEjD,MAAM,gBAAgB,MAAM,YAAY,KAAK;EAC7C,IAAI,CAAC,eACH,OAAO,EAAE,QAAQ,UAAU;EAG7B,MAAM,YAAY,MAAMC,6BAAAA,aACtB,QACA,eACA,KAAK,OAAO,UAAU,SACtB,cAAc,QAAS,SACvB,eACD;EAED,cAAc,aAAa,MAAM,OAAO,MAAM,OAAO;EAErD,OAAO;GACL,QAAQ;GACR,SAAS;IACP,cAAc,YAAY;IAC1B,wBAAwB,cAAc;IACtC;IACD;GACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumCheckBalanceTask.js","names":["CheckBalanceTask","isRelayerStep","isSmartContractWalletCode","getAccountCode"],"sources":["../../../../src/core/tasks/EthereumCheckBalanceTask.ts"],"sourcesContent":["import { type CheckBalanceOptions, CheckBalanceTask } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getAccountCode } from '../../actions/getAccountCode.js'\nimport { isSmartContractWalletCode } from '../../actions/isSmartContractWallet.js'\nimport type { EthereumStepExecutorContext } from '../../types.js'\nimport { isRelayerStep } from '../../utils/isRelayerStep.js'\n\n/**\n * Skips the outer-tx gas check for steps where the wallet doesn't fund it:\n * smart-contract wallets (Safe Apps, 4337, 7579, …) where the\n * executor / bundler / paymaster pays, and relayed steps. Source amount\n * and non-included native fees are still verified.\n *\n * Skip-bias is intentional: a wrong skip is caught by the wallet rejecting\n * the tx; a wrong enforce blocks a tx that would have succeeded.\n */\nexport class EthereumCheckBalanceTask extends CheckBalanceTask {\n protected override async getCheckBalanceOptions(\n context: EthereumStepExecutorContext\n ): Promise<CheckBalanceOptions> {\n const { client, step } = context\n\n // Relayer pays gas regardless of wallet shape — answer is fixed, no RPC\n // needed.\n if (isRelayerStep(step)) {\n return { walletPaysGas: false }\n }\n\n // Funding wallet (NOT signer) — for Safe Apps these usually match, but\n // the balance question is about the funder. Compare with\n // `canAccountUseNativePermits`, which uses the signer.\n const fromAddress = step.action.fromAddress as Address | undefined\n if (!fromAddress) {\n return {}\n }\n\n // `step.action.fromChainId` (NOT wallet's connected chain) so cross-\n // chain / post-chain-switch flows query the chain that executes the step.\n const code = await getAccountCode({\n client,\n chainId: step.action.fromChainId,\n address: fromAddress,\n })\n\n // `code === undefined` on RPC failure → falls through to \"treat as EOA\"\n // since `isSmartContractWalletCode(undefined)` is `false` (conservative:\n // strict gas check stays on, today's behavior).\n return { walletPaysGas: !isSmartContractWalletCode(code) }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,IAAa,2BAAb,cAA8CA,UAAAA,iBAAiB;CAC7D,MAAyB,uBACvB,SAC8B;EAC9B,MAAM,EAAE,QAAQ,SAAS;
|
|
1
|
+
{"version":3,"file":"EthereumCheckBalanceTask.js","names":["CheckBalanceTask","isRelayerStep","isSmartContractWalletCode","getAccountCode"],"sources":["../../../../src/core/tasks/EthereumCheckBalanceTask.ts"],"sourcesContent":["import { type CheckBalanceOptions, CheckBalanceTask } from '@lifi/sdk'\nimport type { Address } from 'viem'\nimport { getAccountCode } from '../../actions/getAccountCode.js'\nimport { isSmartContractWalletCode } from '../../actions/isSmartContractWallet.js'\nimport type { EthereumStepExecutorContext } from '../../types.js'\nimport { isRelayerStep } from '../../utils/isRelayerStep.js'\n\n/**\n * Skips the outer-tx gas check for steps where the wallet doesn't fund it:\n * smart-contract wallets (Safe Apps, 4337, 7579, …) where the\n * executor / bundler / paymaster pays, and relayed steps. Source amount\n * and non-included native fees are still verified.\n *\n * Skip-bias is intentional: a wrong skip is caught by the wallet rejecting\n * the tx; a wrong enforce blocks a tx that would have succeeded.\n */\nexport class EthereumCheckBalanceTask extends CheckBalanceTask {\n protected override async getCheckBalanceOptions(\n context: EthereumStepExecutorContext\n ): Promise<CheckBalanceOptions> {\n const { client, step } = context\n\n // Relayer pays gas regardless of wallet shape — answer is fixed, no RPC\n // needed.\n if (isRelayerStep(step)) {\n return { walletPaysGas: false }\n }\n\n // Funding wallet (NOT signer) — for Safe Apps these usually match, but\n // the balance question is about the funder. Compare with\n // `canAccountUseNativePermits`, which uses the signer.\n const fromAddress = step.action.fromAddress as Address | undefined\n if (!fromAddress) {\n return {}\n }\n\n // `step.action.fromChainId` (NOT wallet's connected chain) so cross-\n // chain / post-chain-switch flows query the chain that executes the step.\n const code = await getAccountCode({\n client,\n chainId: step.action.fromChainId,\n address: fromAddress,\n })\n\n // `code === undefined` on RPC failure → falls through to \"treat as EOA\"\n // since `isSmartContractWalletCode(undefined)` is `false` (conservative:\n // strict gas check stays on, today's behavior).\n return { walletPaysGas: !isSmartContractWalletCode(code) }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,IAAa,2BAAb,cAA8CA,UAAAA,iBAAiB;CAC7D,MAAyB,uBACvB,SAC8B;EAC9B,MAAM,EAAE,QAAQ,SAAS;EAIzB,IAAIC,4BAAAA,cAAc,KAAK,EACrB,OAAO,EAAE,eAAe,OAAO;EAMjC,MAAM,cAAc,KAAK,OAAO;EAChC,IAAI,CAAC,aACH,OAAO,EAAE;EAcX,OAAO,EAAE,eAAe,CAACC,sCAAAA,0BAA0B,MAThCC,+BAAAA,eAAe;GAChC;GACA,SAAS,KAAK,OAAO;GACrB,SAAS;GACV,CAAC,CAKsD,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumCheckPermitsTask.js","names":["BaseStepExecutionTask","getDomainChainId","signTypedData"],"sources":["../../../../src/core/tasks/EthereumCheckPermitsTask.ts"],"sourcesContent":["import {\n BaseStepExecutionTask,\n type SignedTypedData,\n type TaskResult,\n} from '@lifi/sdk'\nimport { signTypedData } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { EthereumStepExecutorContext } from '../../types.js'\nimport { getDomainChainId } from '../../utils/getDomainChainId.js'\n\nexport class EthereumCheckPermitsTask extends BaseStepExecutionTask {\n override async shouldRun(\n context: EthereumStepExecutorContext\n ): Promise<boolean> {\n const { step, disableMessageSigning } = context\n\n const permitTypedData = step.typedData?.filter(\n (typedData) => typedData.primaryType === 'Permit'\n )\n\n return !!permitTypedData?.length && !disableMessageSigning\n }\n\n async run(context: EthereumStepExecutorContext): Promise<TaskResult> {\n const {\n step,\n statusManager,\n allowUserInteraction,\n checkClient,\n signedTypedData: currentSignedTypedData,\n } = context\n\n const action = statusManager.initializeAction({\n step,\n type: 'PERMIT',\n chainId: step.action.fromChainId,\n status: 'STARTED',\n })\n\n // First, try to sign all permits in step.typedData\n const permitTypedData =\n step.typedData?.filter(\n (typedData) => typedData.primaryType === 'Permit'\n ) ?? []\n\n const signedTypedData = [...currentSignedTypedData]\n for (const typedData of permitTypedData) {\n statusManager.updateAction(step, action.type, 'ACTION_REQUIRED')\n\n if (!allowUserInteraction) {\n return { status: 'PAUSED' }\n }\n\n const typedDataChainId =\n getDomainChainId(typedData.domain) || step.action.fromChainId\n\n // Switch to the permit's chain if needed\n const permitClient = await checkClient(step, typedDataChainId)\n if (!permitClient) {\n return { status: 'PAUSED' }\n }\n\n const signature = await getAction(\n permitClient,\n signTypedData,\n 'signTypedData'\n )({\n account: permitClient.account!,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n })\n const signedPermit: SignedTypedData = {\n ...typedData,\n signature,\n }\n signedTypedData.push(signedPermit)\n }\n\n // Check if there's a signed permit for the source transaction chain\n const matchingPermit = signedTypedData.find(\n (signedTypedData) =>\n getDomainChainId(signedTypedData.domain) === step.action.fromChainId\n )\n\n statusManager.updateAction(step, action.type, 'DONE')\n\n return {\n status: 'COMPLETED',\n context: { signedTypedData, hasMatchingPermit: !!matchingPermit },\n }\n }\n}\n"],"mappings":";;;;;;AAUA,IAAa,2BAAb,cAA8CA,UAAAA,sBAAsB;CAClE,MAAe,UACb,SACkB;EAClB,MAAM,EAAE,MAAM,0BAA0B;
|
|
1
|
+
{"version":3,"file":"EthereumCheckPermitsTask.js","names":["BaseStepExecutionTask","getDomainChainId","signTypedData"],"sources":["../../../../src/core/tasks/EthereumCheckPermitsTask.ts"],"sourcesContent":["import {\n BaseStepExecutionTask,\n type SignedTypedData,\n type TaskResult,\n} from '@lifi/sdk'\nimport { signTypedData } from 'viem/actions'\nimport { getAction } from 'viem/utils'\nimport type { EthereumStepExecutorContext } from '../../types.js'\nimport { getDomainChainId } from '../../utils/getDomainChainId.js'\n\nexport class EthereumCheckPermitsTask extends BaseStepExecutionTask {\n override async shouldRun(\n context: EthereumStepExecutorContext\n ): Promise<boolean> {\n const { step, disableMessageSigning } = context\n\n const permitTypedData = step.typedData?.filter(\n (typedData) => typedData.primaryType === 'Permit'\n )\n\n return !!permitTypedData?.length && !disableMessageSigning\n }\n\n async run(context: EthereumStepExecutorContext): Promise<TaskResult> {\n const {\n step,\n statusManager,\n allowUserInteraction,\n checkClient,\n signedTypedData: currentSignedTypedData,\n } = context\n\n const action = statusManager.initializeAction({\n step,\n type: 'PERMIT',\n chainId: step.action.fromChainId,\n status: 'STARTED',\n })\n\n // First, try to sign all permits in step.typedData\n const permitTypedData =\n step.typedData?.filter(\n (typedData) => typedData.primaryType === 'Permit'\n ) ?? []\n\n const signedTypedData = [...currentSignedTypedData]\n for (const typedData of permitTypedData) {\n statusManager.updateAction(step, action.type, 'ACTION_REQUIRED')\n\n if (!allowUserInteraction) {\n return { status: 'PAUSED' }\n }\n\n const typedDataChainId =\n getDomainChainId(typedData.domain) || step.action.fromChainId\n\n // Switch to the permit's chain if needed\n const permitClient = await checkClient(step, typedDataChainId)\n if (!permitClient) {\n return { status: 'PAUSED' }\n }\n\n const signature = await getAction(\n permitClient,\n signTypedData,\n 'signTypedData'\n )({\n account: permitClient.account!,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n })\n const signedPermit: SignedTypedData = {\n ...typedData,\n signature,\n }\n signedTypedData.push(signedPermit)\n }\n\n // Check if there's a signed permit for the source transaction chain\n const matchingPermit = signedTypedData.find(\n (signedTypedData) =>\n getDomainChainId(signedTypedData.domain) === step.action.fromChainId\n )\n\n statusManager.updateAction(step, action.type, 'DONE')\n\n return {\n status: 'COMPLETED',\n context: { signedTypedData, hasMatchingPermit: !!matchingPermit },\n }\n }\n}\n"],"mappings":";;;;;;AAUA,IAAa,2BAAb,cAA8CA,UAAAA,sBAAsB;CAClE,MAAe,UACb,SACkB;EAClB,MAAM,EAAE,MAAM,0BAA0B;EAMxC,OAAO,CAAC,EAJgB,KAAK,WAAW,QACrC,cAAc,UAAU,gBAAgB,SAC1C,GAEyB,UAAU,CAAC;;CAGvC,MAAM,IAAI,SAA2D;EACnE,MAAM,EACJ,MACA,eACA,sBACA,aACA,iBAAiB,2BACf;EAEJ,MAAM,SAAS,cAAc,iBAAiB;GAC5C;GACA,MAAM;GACN,SAAS,KAAK,OAAO;GACrB,QAAQ;GACT,CAAC;EAGF,MAAM,kBACJ,KAAK,WAAW,QACb,cAAc,UAAU,gBAAgB,SAC1C,IAAI,EAAE;EAET,MAAM,kBAAkB,CAAC,GAAG,uBAAuB;EACnD,KAAK,MAAM,aAAa,iBAAiB;GACvC,cAAc,aAAa,MAAM,OAAO,MAAM,kBAAkB;GAEhE,IAAI,CAAC,sBACH,OAAO,EAAE,QAAQ,UAAU;GAO7B,MAAM,eAAe,MAAM,YAAY,MAHrCC,+BAAAA,iBAAiB,UAAU,OAAO,IAAI,KAAK,OAAO,YAGU;GAC9D,IAAI,CAAC,cACH,OAAO,EAAE,QAAQ,UAAU;GAG7B,MAAM,YAAY,OAAA,GAAA,WAAA,WAChB,cACAC,aAAAA,eACA,gBACD,CAAC;IACA,SAAS,aAAa;IACtB,QAAQ,UAAU;IAClB,OAAO,UAAU;IACjB,aAAa,UAAU;IACvB,SAAS,UAAU;IACpB,CAAC;GACF,MAAM,eAAgC;IACpC,GAAG;IACH;IACD;GACD,gBAAgB,KAAK,aAAa;;EAIpC,MAAM,iBAAiB,gBAAgB,MACpC,oBACCD,+BAAAA,iBAAiB,gBAAgB,OAAO,KAAK,KAAK,OAAO,YAC5D;EAED,cAAc,aAAa,MAAM,OAAO,MAAM,OAAO;EAErD,OAAO;GACL,QAAQ;GACR,SAAS;IAAE;IAAiB,mBAAmB,CAAC,CAAC;IAAgB;GAClE"}
|