@lifi/sdk-provider-ethereum 4.0.0-beta.7 → 4.0.0-beta.8
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.d.ts +30 -0
- package/dist/cjs/actions/getAccountCode.js +30 -0
- package/dist/cjs/actions/getAccountCode.js.map +1 -0
- 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/isSafeSignature.d.ts +2 -4
- package/dist/cjs/actions/isSafeSignature.js +2 -2
- package/dist/cjs/actions/isSafeSignature.js.map +1 -1
- package/dist/cjs/actions/isSafeWallet.d.ts +6 -4
- package/dist/cjs/actions/isSafeWallet.js +16 -13
- package/dist/cjs/actions/isSafeWallet.js.map +1 -1
- package/dist/cjs/actions/isSmartContractWallet.d.ts +10 -0
- package/dist/cjs/actions/isSmartContractWallet.js +13 -0
- package/dist/cjs/actions/isSmartContractWallet.js.map +1 -0
- package/dist/cjs/actions/resolveENSAddress.js.map +1 -1
- package/dist/cjs/actions/resolveTransactionHash.js +0 -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/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 +3 -2
- package/dist/cjs/core/EthereumStepExecutor.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.d.ts +19 -0
- package/dist/cjs/core/tasks/EthereumCheckBalanceTask.js +32 -0
- package/dist/cjs/core/tasks/EthereumCheckBalanceTask.js.map +1 -0
- 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/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/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/helpers/getEthereumExecutionStrategy.js.map +1 -1
- package/dist/cjs/core/tasks/helpers/getUpdatedStep.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/errors/parseEthereumErrors.js.map +1 -1
- package/dist/cjs/hyperliquid/agentWallet.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/permits/canAccountUseNativePermits.d.ts +14 -0
- package/dist/cjs/permits/canAccountUseNativePermits.js +25 -0
- package/dist/cjs/permits/canAccountUseNativePermits.js.map +1 -0
- package/dist/cjs/permits/encodeNativePermitData.js.map +1 -1
- package/dist/cjs/permits/encodePermit2Data.js.map +1 -1
- package/dist/cjs/permits/getNativePermit.js +2 -22
- package/dist/cjs/permits/getNativePermit.js.map +1 -1
- package/dist/cjs/permits/isNativePermitValid.js.map +1 -1
- package/dist/cjs/types.d.ts +0 -4
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/getActionWithFallback.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.d.ts +30 -0
- package/dist/esm/actions/getAccountCode.d.ts.map +1 -0
- package/dist/esm/actions/getAccountCode.js +29 -0
- package/dist/esm/actions/getAccountCode.js.map +1 -0
- 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/isSafeSignature.d.ts +2 -4
- package/dist/esm/actions/isSafeSignature.d.ts.map +1 -1
- package/dist/esm/actions/isSafeSignature.js +2 -2
- package/dist/esm/actions/isSafeSignature.js.map +1 -1
- package/dist/esm/actions/isSafeWallet.d.ts +6 -4
- package/dist/esm/actions/isSafeWallet.d.ts.map +1 -1
- package/dist/esm/actions/isSafeWallet.js +15 -11
- package/dist/esm/actions/isSafeWallet.js.map +1 -1
- package/dist/esm/actions/isSmartContractWallet.d.ts +10 -0
- package/dist/esm/actions/isSmartContractWallet.d.ts.map +1 -0
- package/dist/esm/actions/isSmartContractWallet.js +12 -0
- package/dist/esm/actions/isSmartContractWallet.js.map +1 -0
- package/dist/esm/actions/resolveENSAddress.js.map +1 -1
- package/dist/esm/actions/resolveTransactionHash.js +0 -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/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 +4 -3
- package/dist/esm/core/EthereumStepExecutor.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.d.ts +19 -0
- package/dist/esm/core/tasks/EthereumCheckBalanceTask.d.ts.map +1 -0
- package/dist/esm/core/tasks/EthereumCheckBalanceTask.js +31 -0
- package/dist/esm/core/tasks/EthereumCheckBalanceTask.js.map +1 -0
- 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/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/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/helpers/getEthereumExecutionStrategy.js.map +1 -1
- package/dist/esm/core/tasks/helpers/getUpdatedStep.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/errors/parseEthereumErrors.js.map +1 -1
- package/dist/esm/hyperliquid/agentWallet.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/permits/canAccountUseNativePermits.d.ts +14 -0
- package/dist/esm/permits/canAccountUseNativePermits.d.ts.map +1 -0
- package/dist/esm/permits/canAccountUseNativePermits.js +24 -0
- package/dist/esm/permits/canAccountUseNativePermits.js.map +1 -0
- package/dist/esm/permits/encodeNativePermitData.js.map +1 -1
- package/dist/esm/permits/encodePermit2Data.js.map +1 -1
- package/dist/esm/permits/getNativePermit.d.ts.map +1 -1
- package/dist/esm/permits/getNativePermit.js +2 -22
- package/dist/esm/permits/getNativePermit.js.map +1 -1
- package/dist/esm/permits/isNativePermitValid.js.map +1 -1
- package/dist/esm/types.d.ts +0 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/getActionWithFallback.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/actions/getAccountCode.ts +41 -0
- package/src/actions/isSafeSignature.ts +3 -4
- package/src/actions/isSafeWallet.ts +21 -20
- package/src/actions/isSmartContractWallet.ts +9 -0
- package/src/actions/resolveTransactionHash.ts +0 -1
- package/src/core/EthereumStepExecutor.ts +3 -3
- package/src/core/tasks/EthereumCheckBalanceTask.ts +50 -0
- package/src/permits/canAccountUseNativePermits.ts +31 -0
- package/src/permits/getNativePermit.ts +2 -46
- package/src/types.ts +0 -4
- 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;AACvD,QAAO;EACL,IAAI,OAAO;AACT,UAAOA,UAAAA,UAAU;;EAEnB,IAAI,UAAU;AACZ,UAAO;;EAET,WAAA,KAAA;EACA,gBAAgBC,uCAAAA;EAChB,YAAYC,mCAAAA;EACZ,iBAAiB,SAAS;EAC1B,MAAM,gBACJ,SAC+B;AAC/B,OAAI,CAAC,SAAS,gBACZ,OAAM,IAAI,MAAM,0BAA0B;AAe5C,
|
|
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;AACvD,QAAO;EACL,IAAI,OAAO;AACT,UAAOA,UAAAA,UAAU;;EAEnB,IAAI,UAAU;AACZ,UAAO;;EAET,WAAA,KAAA;EACA,gBAAgBC,uCAAAA;EAChB,YAAYC,mCAAAA;EACZ,iBAAiB,SAAS;EAC1B,MAAM,gBACJ,SAC+B;AAC/B,OAAI,CAAC,SAAS,gBACZ,OAAM,IAAI,MAAM,0BAA0B;AAe5C,UAAO,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;AAC3C,UAAO,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,
|
|
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;AAEpD,KAAI,CAAC,WACH,cAAa,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;AAEJ,KAAI,MAAM,QACR,oBAAmB,MAAMC,6BAAAA,aACvB,QACA,YACA,cACA,cACA,MAAM,QACP;AAGH,QAAO;EACL,uBAAuB,CAAC,CAAC;EACzB,4BACE,CAAC,CAAC,oBAAoB,oBAAoB;EAC7C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SDKClient } from "@lifi/sdk";
|
|
2
|
+
import { Address, Hex } from "viem";
|
|
3
|
+
|
|
4
|
+
//#region src/actions/getAccountCode.d.ts
|
|
5
|
+
type GetAccountCodeParams = {
|
|
6
|
+
client: SDKClient;
|
|
7
|
+
chainId: number;
|
|
8
|
+
address: Address;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Shared `eth_getCode` fetcher. Deliberately uncached across executions so
|
|
12
|
+
* a wallet re-delegate / upgrade / un-delegate in another tab is never
|
|
13
|
+
* served stale; `withDedupe` only collapses concurrent in-flight callers.
|
|
14
|
+
*
|
|
15
|
+
* Always queries the SDK's per-chain public client (never the wallet
|
|
16
|
+
* client) so cross-chain steps and post-chain-switch flows read from the
|
|
17
|
+
* chain the step actually executes on.
|
|
18
|
+
*
|
|
19
|
+
* Returns `undefined` on RPC failure. Each caller MUST classify that
|
|
20
|
+
* explicitly (e.g. "treat as EOA" vs. "treat as not-permittable") — there
|
|
21
|
+
* is no single safe default.
|
|
22
|
+
*/
|
|
23
|
+
declare const getAccountCode: ({
|
|
24
|
+
client,
|
|
25
|
+
chainId,
|
|
26
|
+
address
|
|
27
|
+
}: GetAccountCodeParams) => Promise<Hex | undefined>;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { getAccountCode };
|
|
30
|
+
//# sourceMappingURL=getAccountCode.d.ts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_client_publicClient = require("../client/publicClient.js");
|
|
3
|
+
let _lifi_sdk = require("@lifi/sdk");
|
|
4
|
+
let viem_actions = require("viem/actions");
|
|
5
|
+
let viem_utils = require("viem/utils");
|
|
6
|
+
//#region src/actions/getAccountCode.ts
|
|
7
|
+
/**
|
|
8
|
+
* Shared `eth_getCode` fetcher. Deliberately uncached across executions so
|
|
9
|
+
* a wallet re-delegate / upgrade / un-delegate in another tab is never
|
|
10
|
+
* served stale; `withDedupe` only collapses concurrent in-flight callers.
|
|
11
|
+
*
|
|
12
|
+
* Always queries the SDK's per-chain public client (never the wallet
|
|
13
|
+
* client) so cross-chain steps and post-chain-switch flows read from the
|
|
14
|
+
* chain the step actually executes on.
|
|
15
|
+
*
|
|
16
|
+
* Returns `undefined` on RPC failure. Each caller MUST classify that
|
|
17
|
+
* explicitly (e.g. "treat as EOA" vs. "treat as not-permittable") — there
|
|
18
|
+
* is no single safe default.
|
|
19
|
+
*/
|
|
20
|
+
const getAccountCode = ({ client, chainId, address }) => (0, _lifi_sdk.withDedupe)(async () => {
|
|
21
|
+
try {
|
|
22
|
+
return await (0, viem_utils.getAction)(await require_client_publicClient.getPublicClient(client, chainId), viem_actions.getCode, "getCode")({ address });
|
|
23
|
+
} catch {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
}, { id: `getAccountCode:${chainId}:${address.toLowerCase()}` });
|
|
27
|
+
//#endregion
|
|
28
|
+
exports.getAccountCode = getAccountCode;
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=getAccountCode.js.map
|
|
@@ -0,0 +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;AACV,KAAI;AAEF,SAAO,OAAA,GAAA,WAAA,WAAgB,MADIA,4BAAAA,gBAAgB,QAAQ,QAAQ,EACtBC,aAAAA,SAAS,UAAU,CAAC,EAAE,SAAS,CAAC;SAC/D;AACN;;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;AACpB,KAAI;AAaF,
|
|
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;AACpB,KAAI;AAaF,SAAO,MAZgBA,oCAAAA,sBACrB,QACA,YACAC,aAAAA,cACA,gBACA;GACE,SAAS;GACT,KAAKC,kBAAAA;GACL,cAAc;GACd,MAAM,CAAC,cAAc,eAAe;GACrC,CACF;UAEM,IAAI;AACX,SAAO;;;AAIX,MAAa,wBAAwB,OACnC,QACA,YACA,SACA,QACA,iBACqC;AACrC,KAAI,CAAC,OAAO,OACV,QAAO,EAAE;CAEX,MAAM,mBAAmB,MAAMC,oCAAAA,oBAAoB,QAAQ,QAAQ;AACnE,KAAI,CAAC,iBACH,OAAM,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;AAED,KAAI,CAAC,QAAQ,OACX,OAAM,IAAI,MACR,wCAAwC,QAAQ,mBACjD;AAGH,QAAO,OAAO,KAAK,EAAE,OAAO,kBAAkB,OAAe;EAC3D;EACA;EACA,WAAW,QAAQ,GAAG;EACvB,EAAE;;;;;;;;;;AAWL,MAAa,oBAAoB,OAC/B,QACA,OACA,cACA,mBACgC;AAEhC,KAAIG,4BAAAA,cAAc,MAAM,QAAQ,CAC9B;AAYF,QAAO,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;AAClE,MAAK,MAAM,QAAQ,gBAAgB;AACjC,MAAI,CAAC,iBAAiB,KAAK,MAAM,SAC/B,kBAAiB,KAAK,MAAM,WAAW,EAAE;AAE3C,mBAAiB,KAAK,MAAM,SAAS,KAAK,KAAK;;CAGjD,MAAM,YAAY,OAAO,KAAK,iBAAiB,CAAC,IAAI,OAAO,SAAS;AAkBpE,SAfE,MAAM,QAAQ,IACZ,UAAU,IAAI,OAAO,YAAY;AAG/B,SAAO,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;AAC3B,KAAI,OAAO,WAAW,EACpB,QAAO,EAAE;CAEX,MAAM,EAAE,YAAY,OAAO;AAC3B,MAAK,MAAM,SAAS,OAClB,KAAI,MAAM,YAAY,QACpB,SAAQ,KAAK,iDAAiD;CAIlE,MAAM,mBAAmB,MAAMA,oCAAAA,oBAAoB,QAAQ,QAAQ;CAEnE,MAAM,aAAa,MAAMC,4BAAAA,gBAAgB,QAAQ,QAAQ;AACzD,KAAI,oBAAoB,OAAO,SAAS,EACtC,QAAO,uBACL,YACA,QACA,eACA,iBACD;AAEH,QAAO,0BAA0B,YAAY,QAAQ,cAAc;;AAGrE,MAAM,yBAAyB,OAC7B,QACA,QACA,eACA,qBAC2B;CAC3B,MAAM,YAAY,OAAO,KAAK,UAAU;AACtC,MAAIC,4BAAAA,cAAc,MAAM,QAAQ,CAC9B,QAAO;GACL,SAAS;GACT,KAAKC,kBAAAA;GACL,cAAc;GACd,MAAM,CAAC,cAAc;GACtB;AAEH,SAAO;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;AAEF,KAAI,CAAC,QAAQ,OACX,QAAO,EAAE;AAGX,QAAO,OAAO,KAAK,OAAO,MAAc;EACtC,MAAM,SAAS,QAAQ;AACvB,MAAI,OAAO,WAAW,UAGpB,QAAO;GACL,GAAG;GACH;GACD;AAEH,SAAO;GACL,GAAG;GACH,QAAQ,OAAO;GACf;GACD;GACD;;AAGJ,MAAM,4BAA4B,OAChC,QACA,QACA,kBAC2B;CAC3B,MAAM,QAA2B,OAAO,KAAK,UAAU;AACrD,MAAIF,4BAAAA,cAAc,MAAM,QAAQ,CAC9B,SAAA,GAAA,aAAA,YAAkB,QAAQ,EACxB,SAAS,eACV,CAAC;AAEJ,UAAA,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;AAgBF,QAdoC,OAAO,KAAK,OAAO,UAAU;EAC/D,MAAM,SAAS,QAAQ;AACvB,MAAI,OAAO,WAAW,WACpB,QAAO;GACL,GAAG;GACH;GACD;AAEH,SAAO;GACL,GAAG;GACH,QAAQ,OAAO;GACf;GACD;
|
|
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;AAC3B,KAAI,OAAO,WAAW,EACpB,QAAO,EAAE;CAEX,MAAM,EAAE,YAAY,OAAO;AAC3B,MAAK,MAAM,SAAS,OAClB,KAAI,MAAM,YAAY,QACpB,SAAQ,KAAK,iDAAiD;CAIlE,MAAM,mBAAmB,MAAMA,oCAAAA,oBAAoB,QAAQ,QAAQ;CAEnE,MAAM,aAAa,MAAMC,4BAAAA,gBAAgB,QAAQ,QAAQ;AACzD,KAAI,oBAAoB,OAAO,SAAS,EACtC,QAAO,uBACL,YACA,QACA,eACA,iBACD;AAEH,QAAO,0BAA0B,YAAY,QAAQ,cAAc;;AAGrE,MAAM,yBAAyB,OAC7B,QACA,QACA,eACA,qBAC2B;CAC3B,MAAM,YAAY,OAAO,KAAK,UAAU;AACtC,MAAIC,4BAAAA,cAAc,MAAM,QAAQ,CAC9B,QAAO;GACL,SAAS;GACT,KAAKC,kBAAAA;GACL,cAAc;GACd,MAAM,CAAC,cAAc;GACtB;AAEH,SAAO;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;AAEF,KAAI,CAAC,QAAQ,OACX,QAAO,EAAE;AAGX,QAAO,OAAO,KAAK,OAAO,MAAc;EACtC,MAAM,SAAS,QAAQ;AACvB,MAAI,OAAO,WAAW,UAGpB,QAAO;GACL,GAAG;GACH;GACD;AAEH,SAAO;GACL,GAAG;GACH,QAAQ,OAAO;GACf;GACD;GACD;;AAGJ,MAAM,4BAA4B,OAChC,QACA,QACA,kBAC2B;CAC3B,MAAM,QAA2B,OAAO,KAAK,UAAU;AACrD,MAAIF,4BAAAA,cAAc,MAAM,QAAQ,CAC9B,SAAA,GAAA,aAAA,YAAkB,QAAQ,EACxB,SAAS,eACV,CAAC;AAEJ,UAAA,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;AAgBF,QAdoC,OAAO,KAAK,OAAO,UAAU;EAC/D,MAAM,SAAS,QAAQ;AACvB,MAAI,OAAO,WAAW,WACpB,QAAO;GACL,GAAG;GACH;GACD;AAEH,SAAO;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,
|
|
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;AAEvC,KAAI,CAAC,yBAAyB,OAC5B;CAGF,IAAI,0BAA0B;AAC9B,MAAK,MAAM,SAAS,yBAClB,4BAA2B;CAG7B,MAAM,6BAA6BC,qBAAAA,OAAO,yBAAyB,IAAI;CAEvE,MAAM,0BACJ,0BAA0B,OAAO,yBAAyB,OAAO;AAEnE,QAAO,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;AAEjC,
|
|
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;AAEjC,SAAO,MADc,OAAO,WAAW,GACxB,MACZ,UAAU,MAAM,OAAO,WAAW,MAAM,cAAcA,UAAAA,UAAU,IAClE,EAAE"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { SDKClient } from "@lifi/sdk";
|
|
2
|
-
import { Address
|
|
2
|
+
import { Address } from "viem";
|
|
3
3
|
|
|
4
4
|
//#region src/actions/isSafeSignature.d.ts
|
|
5
5
|
interface IsSafeSignatureProps {
|
|
6
6
|
hash: string;
|
|
7
7
|
chainId: number;
|
|
8
8
|
address?: Address;
|
|
9
|
-
viemClient?: Client;
|
|
10
9
|
}
|
|
11
10
|
/**
|
|
12
11
|
* Check if a transaction response is a Safe wallet signature (queued transaction)
|
|
@@ -17,8 +16,7 @@ interface IsSafeSignatureProps {
|
|
|
17
16
|
declare function isSafeSignature(client: SDKClient, {
|
|
18
17
|
hash,
|
|
19
18
|
chainId,
|
|
20
|
-
address
|
|
21
|
-
viemClient
|
|
19
|
+
address
|
|
22
20
|
}: IsSafeSignatureProps): Promise<boolean>;
|
|
23
21
|
//#endregion
|
|
24
22
|
export { IsSafeSignatureProps, isSafeSignature };
|
|
@@ -8,13 +8,13 @@ const require_actions_isSafeWallet = require("./isSafeWallet.js");
|
|
|
8
8
|
* Safe wallets via Rabby return a signature (65 bytes = 132 chars) instead of
|
|
9
9
|
* a transaction hash (32 bytes = 66 chars) for queued transactions.
|
|
10
10
|
*/
|
|
11
|
-
async function isSafeSignature(client, { hash, chainId, address
|
|
11
|
+
async function isSafeSignature(client, { hash, chainId, address }) {
|
|
12
12
|
if (!hash.startsWith("0x") || hash.length <= 66) return false;
|
|
13
13
|
if (!address) return false;
|
|
14
14
|
return require_actions_isSafeWallet.isSafeWallet({
|
|
15
|
+
client,
|
|
15
16
|
chainId,
|
|
16
17
|
address,
|
|
17
|
-
viemClient,
|
|
18
18
|
safeApiKey: require_utils_getSafeApiKey.getSafeApiKey(client)
|
|
19
19
|
});
|
|
20
20
|
}
|
|
@@ -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
|
|
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;AAGlB,KAAI,CAAC,KAAK,WAAW,KAAK,IAAI,KAAK,UAAU,GAC3C,QAAO;AAGT,KAAI,CAAC,QACH,QAAO;AAIT,QAAOA,6BAAAA,aAAa;EAAE;EAAQ;EAAS;EAAS,YAD7BC,4BAAAA,cAAc,OACyB;EAAE,CAAC"}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SDKClient } from "@lifi/sdk";
|
|
2
|
+
import { Address } from "viem";
|
|
2
3
|
|
|
3
4
|
//#region src/actions/isSafeWallet.d.ts
|
|
4
5
|
type IsSafeWalletParams = {
|
|
6
|
+
client: SDKClient;
|
|
5
7
|
chainId: number;
|
|
6
8
|
address: Address;
|
|
7
|
-
viemClient?: Client;
|
|
8
9
|
safeApiKey?: string;
|
|
9
10
|
};
|
|
10
11
|
/**
|
|
11
|
-
* Check if an address is a Safe wallet
|
|
12
|
+
* Check if an address is a Safe wallet via the Safe Transaction Service,
|
|
13
|
+
* short-circuiting on `eth_getCode` for EOAs (incl. EIP-7702 delegated).
|
|
12
14
|
*/
|
|
13
15
|
declare function isSafeWallet({
|
|
16
|
+
client,
|
|
14
17
|
chainId,
|
|
15
18
|
address,
|
|
16
|
-
viemClient,
|
|
17
19
|
safeApiKey
|
|
18
20
|
}: IsSafeWalletParams): Promise<boolean>;
|
|
19
21
|
//#endregion
|
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_actions_getAccountCode = require("./getAccountCode.js");
|
|
3
|
+
const require_actions_isSmartContractWallet = require("./isSmartContractWallet.js");
|
|
2
4
|
const require_client_safeClient = require("../client/safeClient.js");
|
|
3
|
-
let _lifi_sdk = require("@lifi/sdk");
|
|
4
|
-
let viem_actions = require("viem/actions");
|
|
5
|
-
let viem_utils = require("viem/utils");
|
|
6
5
|
//#region src/actions/isSafeWallet.ts
|
|
7
|
-
const safeWalletCache = new
|
|
6
|
+
const safeWalletCache = new (require("@lifi/sdk")).LruMap(12);
|
|
8
7
|
/**
|
|
9
|
-
* Check if an address is a Safe wallet
|
|
8
|
+
* Check if an address is a Safe wallet via the Safe Transaction Service,
|
|
9
|
+
* short-circuiting on `eth_getCode` for EOAs (incl. EIP-7702 delegated).
|
|
10
10
|
*/
|
|
11
|
-
async function isSafeWallet({ chainId, address,
|
|
11
|
+
async function isSafeWallet({ client, chainId, address, safeApiKey }) {
|
|
12
|
+
if (!address) return false;
|
|
12
13
|
const cacheKey = `${chainId}:${address.toLowerCase()}`;
|
|
13
14
|
const cached = safeWalletCache.get(cacheKey);
|
|
14
15
|
if (cached !== void 0) return cached;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
const code = await require_actions_getAccountCode.getAccountCode({
|
|
17
|
+
client,
|
|
18
|
+
chainId,
|
|
19
|
+
address
|
|
20
|
+
});
|
|
21
|
+
if (code !== void 0 && !require_actions_isSmartContractWallet.isSmartContractWalletCode(code)) {
|
|
22
|
+
safeWalletCache.set(cacheKey, false);
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
22
25
|
try {
|
|
23
26
|
await require_client_safeClient.getSafeClient(chainId, safeApiKey).getInfo(address);
|
|
24
27
|
safeWalletCache.set(cacheKey, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isSafeWallet.js","names":["LruMap","
|
|
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;AACvC,KAAI,CAAC,QACH,QAAO;CAET,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,aAAa;CACpD,MAAM,SAAS,gBAAgB,IAAI,SAAS;AAC5C,KAAI,WAAW,KAAA,EACb,QAAO;CAOT,MAAM,OAAO,MAAMC,+BAAAA,eAAe;EAAE;EAAQ;EAAS;EAAS,CAAC;AAC/D,KAAI,SAAS,KAAA,KAAa,CAACC,sCAAAA,0BAA0B,KAAK,EAAE;AAC1D,kBAAgB,IAAI,UAAU,MAAM;AACpC,SAAO;;AAGT,KAAI;AACF,QAAMC,0BAAAA,cAAc,SAAS,WAAW,CAAC,QAAQ,QAAQ;AACzD,kBAAgB,IAAI,UAAU,KAAK;AACnC,SAAO;SACD;AACN,kBAAgB,IAAI,UAAU,MAAM;AACpC,SAAO"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/actions/isSmartContractWallet.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* True iff the code is a smart-contract wallet (Safe, ERC-4337, ERC-7579,
|
|
4
|
+
* custom). Plain EOAs and EIP-7702 delegated EOAs (which still pay their
|
|
5
|
+
* own gas / can sign ECDSA) return false.
|
|
6
|
+
*/
|
|
7
|
+
declare const isSmartContractWalletCode: (code?: string) => boolean;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { isSmartContractWalletCode };
|
|
10
|
+
//# sourceMappingURL=isSmartContractWallet.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_permits_isDelegationDesignatorCode = require("../permits/isDelegationDesignatorCode.js");
|
|
3
|
+
//#region src/actions/isSmartContractWallet.ts
|
|
4
|
+
/**
|
|
5
|
+
* True iff the code is a smart-contract wallet (Safe, ERC-4337, ERC-7579,
|
|
6
|
+
* custom). Plain EOAs and EIP-7702 delegated EOAs (which still pay their
|
|
7
|
+
* own gas / can sign ECDSA) return false.
|
|
8
|
+
*/
|
|
9
|
+
const isSmartContractWalletCode = (code) => !!code && code !== "0x" && !require_permits_isDelegationDesignatorCode.isDelegationDesignatorCode(code);
|
|
10
|
+
//#endregion
|
|
11
|
+
exports.isSmartContractWalletCode = isSmartContractWalletCode;
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=isSmartContractWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isSmartContractWallet.js","names":["isDelegationDesignatorCode"],"sources":["../../../src/actions/isSmartContractWallet.ts"],"sourcesContent":["import { isDelegationDesignatorCode } from '../permits/isDelegationDesignatorCode.js'\n\n/**\n * True iff the code is a smart-contract wallet (Safe, ERC-4337, ERC-7579,\n * custom). Plain EOAs and EIP-7702 delegated EOAs (which still pay their\n * own gas / can sign ECDSA) return false.\n */\nexport const isSmartContractWalletCode = (code?: string): boolean =>\n !!code && code !== '0x' && !isDelegationDesignatorCode(code)\n"],"mappings":";;;;;;;;AAOA,MAAa,6BAA6B,SACxC,CAAC,CAAC,QAAQ,SAAS,QAAQ,CAACA,2CAAAA,2BAA2B,KAAK"}
|
|
@@ -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;AAChC,KAAI;AAKF,
|
|
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;AAChC,KAAI;AAKF,SAAO,OAAA,GAAA,SAAA,eAH6B,MADXA,4BAAAA,gBAAgB,QAAQC,UAAAA,QAAQ,IAAI,EACb,EAC9C,OAAA,GAAA,SAAA,WAAgB,KAAK,EACtB,CAAC;UAEK,GAAG;AAEV"}
|
|
@@ -5,7 +5,6 @@ let _lifi_sdk = require("@lifi/sdk");
|
|
|
5
5
|
//#region src/actions/resolveTransactionHash.ts
|
|
6
6
|
const resolveTransactionHash = async (client, viemClient, txHashOrSignature, chainId) => {
|
|
7
7
|
if (!await require_actions_isSafeSignature.isSafeSignature(client, {
|
|
8
|
-
viemClient,
|
|
9
8
|
hash: txHashOrSignature,
|
|
10
9
|
chainId,
|
|
11
10
|
address: viemClient.account?.address
|
|
@@ -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
|
|
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;AAOlB,KAAI,CAAC,MANqBA,gCAAAA,gBAAgB,QAAQ;EAChD,MAAM;EACN;EACA,SAAS,WAAW,SAAS;EAC9B,CAAC,CAGA,QAAO;CAGT,MAAM,cAAc,WAAW,SAAS;AACxC,KAAI,CAAC,eAAe,CAAC,kBACnB,OAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,oEACD;AAGH,QAAO,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;AAChC,KAAI;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;AAGzB,MAAI,OAAO;GACT,MAAM,SAASC,0BAAAA,sBAAsB;GACrC,MAAM,WAAWC,0BAAAA,uBAAuB;AAExC,OAAI,QAAQ;AACV,QAAI,MACF,MAAK,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,MAAM,UAAU;AAE3D,QAAI,SACF,MAAK,KAAK,SAAS,OAAO,GAAG,SAAS,UAAU;AAGlD,SAAK,KAAK,SAAS,OAAO,UAAU;;;EAKxC,MAAM,eAAeC,0BAAAA,yBAAyB;AAC9C,OAAK,KAAK,UAAU,aAAa,UAAU;AAE3C,OAAK,MAAM,OAAO,MAAM;GACtB,MAAM,UACH,MAAM,cAAc,UAAU;IAAE,MAAM;IAAU;IAAK,CAAC,IACtD,MAAM,cAAc,UAAU;IAAE,MAAM;IAAU;IAAK,CAAC;AACzD,OAAI,QACF,QAAO;;AAGX;SACM;AACN;;;AAWJ,eAAe,cACb,QACA,QACkC;CAClC,MAAM,EAAE,MAAM,QAAQ;CAEtB,MAAM,UAAU,OAAO,OAAO;AAC9B,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,yBAAyB;CAG3C,MAAM,eAAeC,0BAAAA,mBAAmB,QAAQ;AAChD,KAAI,CAAC,aACH,OAAM,IAAI,MAAM,2CAA2C,UAAU;CAGvE,MAAM,sBAAA,GAAA,WAAA,WAA+B,QAAQC,aAAAA,cAAc,eAAe;AAW1E,KAAI,
|
|
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;AAChC,KAAI;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;AAGzB,MAAI,OAAO;GACT,MAAM,SAASC,0BAAAA,sBAAsB;GACrC,MAAM,WAAWC,0BAAAA,uBAAuB;AAExC,OAAI,QAAQ;AACV,QAAI,MACF,MAAK,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,MAAM,UAAU;AAE3D,QAAI,SACF,MAAK,KAAK,SAAS,OAAO,GAAG,SAAS,UAAU;AAGlD,SAAK,KAAK,SAAS,OAAO,UAAU;;;EAKxC,MAAM,eAAeC,0BAAAA,yBAAyB;AAC9C,OAAK,KAAK,UAAU,aAAa,UAAU;AAE3C,OAAK,MAAM,OAAO,MAAM;GACtB,MAAM,UACH,MAAM,cAAc,UAAU;IAAE,MAAM;IAAU;IAAK,CAAC,IACtD,MAAM,cAAc,UAAU;IAAE,MAAM;IAAU;IAAK,CAAC;AACzD,OAAI,QACF,QAAO;;AAGX;SACM;AACN;;;AAWJ,eAAe,cACb,QACA,QACkC;CAClC,MAAM,EAAE,MAAM,QAAQ;CAEtB,MAAM,UAAU,OAAO,OAAO;AAC9B,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,yBAAyB;CAG3C,MAAM,eAAeC,0BAAAA,mBAAmB,QAAQ;AAChD,KAAI,CAAC,aACH,OAAM,IAAI,MAAM,2CAA2C,UAAU;CAGvE,MAAM,sBAAA,GAAA,WAAA,WAA+B,QAAQC,aAAAA,cAAc,eAAe;AAW1E,KAAI,CAAC,MAFgB,mBAAmB;EANtC,KAAKC,0BAAAA;EACL,SAAS;EACT,cAAc;EACd,MAAM,CAAC,OAAO,KAAK,CAAC;EAG8C,CAAC,CAGnE;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;AAE1B,KACE,YAAY,QACZ,YAAY,OAAA,GAAA,WAAA,MACP,QAAmB,KAAK,OAE7B;AAGF,QAAO"}
|
|
@@ -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;AAEF,KAAI,2BACF,QAAO;CAGT,IAAI,qBAA4C;EAC9C,IAAI;EACJ;EACA,sBACE,WAAW,SAAS,SAAS,UACzB,MAAMC,wCAAAA,wBAAwB,QAAQ,WAAW,GACjD,KAAA;EACP;AAED,KAAI,kBAAkB,8BAA8B;EAClD,MAAM,+BACJ,MAAM,iBAAiB,6BAA6B;GAClD,aAAa;GACb,GAAG;GACJ,CAAC;AAEJ,uBAAqB;GACnB,GAAG;GACH,GAAG;GACJ;;AAGH,SAAA,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;AAEzB,KAAIC,4BAAAA,cAAc,MAAM,QAAQ,CAC9B;AAUF,KAAI,
|
|
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;AAEF,KAAI,2BACF,QAAO;CAGT,IAAI,qBAA4C;EAC9C,IAAI;EACJ;EACA,sBACE,WAAW,SAAS,SAAS,UACzB,MAAMC,wCAAAA,wBAAwB,QAAQ,WAAW,GACjD,KAAA;EACP;AAED,KAAI,kBAAkB,8BAA8B;EAClD,MAAM,+BACJ,MAAM,iBAAiB,6BAA6B;GAClD,aAAa;GACb,GAAG;GACJ,CAAC;AAEJ,uBAAqB;GACnB,GAAG;GACH,GAAG;GACJ;;AAGH,SAAA,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;AAEzB,KAAIC,4BAAAA,cAAc,MAAM,QAAQ,CAC9B;AAUF,KAAI,SAAS,MARgBC,6BAAAA,aAC3B,QACA,cACA,MAAM,SACN,aAAa,QAAS,SACtB,eACD,CAWC,QAAO,MARiB,aACtB,QACA,cACA,MAAM,SACN,gBACA,OACD;;;;;;;;;;;AAeL,MAAa,sBAAsB,OACjC,QACA,EAAE,cAAc,OAAO,qBACE;AAEzB,KAAID,4BAAAA,cAAc,MAAM,QAAQ,CAC9B;AASF,KAAI,MAPyBC,6BAAAA,aAC3B,QACA,cACA,MAAM,SACN,aAAa,QAAS,SACtB,eACD,GACoB,EASnB,QAAO,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;AAEF,KAAI,OAAO,WAAW,WAAW;AAC/B,MACE,CAAC,OAAO,UAAU,UAClB,CAAC,OAAO,SAAS,OAAO,YAAY,QAAQ,gBAAgB,IAC5D,OAAO,SAAS,MAAM,YAAY,QAAQ,WAAW,WAAW,EAChE;AACA,cAAW,OAAO;AAClB,SAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,4BACD;;AAGH,SAD2B,OAAO,SAAS,GAAG,
|
|
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;AAEF,KAAI,OAAO,WAAW,WAAW;AAC/B,MACE,CAAC,OAAO,UAAU,UAClB,CAAC,OAAO,SAAS,OAAO,YAAY,QAAQ,gBAAgB,IAC5D,OAAO,SAAS,MAAM,YAAY,QAAQ,WAAW,WAAW,EAChE;AACA,cAAW,OAAO;AAClB,SAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,4BACD;;AAGH,SAD2B,OAAO,SAAS,GAAG,GACrB;;AAE3B,KAAI,OAAO,cAAc,OAAO,OAAO,aAAa,KAAK;AACvD,aAAW,OAAO;AAClB,QAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,qBACd,4BACD;;AAEH,YAAW,OAAO;AAClB,OAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,mBACd,sBACD"}
|
|
@@ -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,
|
|
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;AAE5B,KAAI;AACF,SAAO,OAAA,GAAA,UAAA,eACL,YAAY;AACV;AAEA,OAAI,KAAK,KAAK,GAAG,YAAY,QAC3B,OAAM,IAAI,MAAM,qCAAqC;AAIvD,OAAI,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;AACD,QAAI,CAAC,MACH;AAEF,iBAAa,MAAM;AACnB,oBAAgB,OAAO,MAAM,MAAM;;GAIrC,MAAM,KAAK,MAAM,WAAW,eAAe,WAAW;AAEtD,OAAI,GAAG,YAAY;AACjB,QAAI,CAAC,GAAG,aACN,OAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,2BACD;AAEH,QAAI,CAAC,GAAG,gBACN,OAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,mBACd,8DACD;AAEH,WAAO,GAAG;;AAIZ,OAAI,YAAY,MAAM,GAAG;IACvB,MAAM,EAAE,YAAY,MAAM,WAAW,gBAAgB,YAAY;AAOjE,QANiB,QAAQ,MACtB,MACC,EAAE,cACF,OAAO,EAAE,MAAM,IAAI,iBACnB,EAAE,eAAe,WAET,CACV,OAAM,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;AACd,MAAI,iBAAiBA,UAAAA,iBACnB,OAAM;AAGR,QAAM,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;AAED,KAAI,CAAC,oBAAoB,QAAQ;EAE/B,MAAM,SAAS,MAAM,
|
|
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;AAED,KAAI,CAAC,oBAAoB,QAAQ;EAE/B,MAAM,SAAS,MAAM,eAAe,MADTA,4BAAAA,gBAAgB,QAAQ,QAAQ,EACT,QAAQ,WAAW;AACrE,uBAAqB,OAAO;AAC5B,sBAAoB,OAAO;;AAG7B,KAAI,oBAAoB,WAAW,WACjC,OAAM,IAAIC,UAAAA,iBACRC,UAAAA,cAAc,mBACd,4BACD;AAIH,KAAI,sBAAsB,eAAe,sBAAsB,WAC7D,OAAM,IAAID,UAAAA,iBACRC,UAAAA,cAAc,qBACd,wCACD;AAGH,QAAO;;AAGT,eAAe,eACb,QACA,QACA,YAIC;CACD,IAAI;CACJ,IAAI;AAEJ,KAAI;AACF,uBAAqB,OAAA,GAAA,aAAA,2BAAwC,QAAQ;GACnE,MAAM;GACN,aAAa,aAAa;AACxB,wBAAoB,SAAS;AAC7B,iBAAa,SAAS;;GAEzB,CAAC;SACI;AAIR,QAAO;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;AACpB,KAAI,cAAc,SAChB,QAAO,cAAc;CAIvB,MAAM,
|
|
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;AACpB,KAAI,cAAc,SAChB,QAAO,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;AAED,KAAI,MAAM,OAAOA,UAAAA,QAAQ,IACvB,OAAM,YAAY;EAChB,GAAGC,YAAAA,QAAQ;EACX,GAAG,MAAM;EACV;AAIH,KAAI,MAAM,OAAOD,UAAAA,QAAQ,OAAO,MAAM,OAAOA,UAAAA,QAAQ,KAAK;EACxD,MAAM,kBAAkBE,0BAAAA,2BAA2B,MAAM;AAEzD,QAAM,YAAY;GAChB,GAAG,MAAM;GACT,gBAAgB,EAAE,SAAS,iBAA4B;GACxD;;AAMH,eAAc,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;AAEF,QAAO,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;AACxD,KAAI,UAAU,OAAO,YAAY,KAAK,KAAK,CACzC,QAAO,OAAO;CAGhB,MAAM,WAAW,MAAM,MAAM,GAAG,oBAAoB,aAAa,UAAU;AAC3E,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,4DAA4D,QAAQ,IAAI,SAAS,SAClF;CAOH,MAAM,
|
|
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;AACxD,KAAI,UAAU,OAAO,YAAY,KAAK,KAAK,CACzC,QAAO,OAAO;CAGhB,MAAM,WAAW,MAAM,MAAM,GAAG,oBAAoB,aAAa,UAAU;AAC3E,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,4DAA4D,QAAQ,IAAI,SAAS,SAClF;CAOH,MAAM,OAAM,MAJQ,SAAS,MAAM,EAIlB;AACjB,mBAAkB,IAAI,QAAQ,UAAU,EAAE;EACxC,OAAO;EACP,WAAW,KAAK,KAAK,GAAG;EACzB,CAAC;AACF,QAAO;;AAGT,eAAe,QACb,SACA,MACA,QACY;CACZ,MAAM,UAAU,MAAM,yBAAyB,QAAQ;CACvD,MAAM,UAAkC,EAAE;AAC1C,KAAI,OACF,SAAQ,gBAAgB,UAAU;CAEpC,MAAM,WAAW,MAAM,MAAM,GAAG,UAAU,QAAQ,EAAE,SAAS,CAAC;AAC9D,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,4CAA4C,SAAS,OAAO,GAAG,SAAS,aACzE;AAEH,QAAO,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;AACpC,MAAI,SAAS,aAAa,KAAA,EACxB,QAAO,IAAI,YAAY,OAAO,QAAQ,SAAS,CAAC;AAElD,MAAI,SAAS,UAAU,KAAA,EACrB,QAAO,IAAI,SAAS,OAAO,QAAQ,MAAM,CAAC;EAE5C,MAAM,KAAK,OAAO,UAAU;AAC5B,SAAO,QACL,SACA,iBAAiB,YAAY,yBAAyB,KAAK,IAAI,OAAO,MACtE,OACD;;CAEJ"}
|
|
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_utils_isZeroAddress = require("../utils/isZeroAddress.js");
|
|
3
3
|
const require_errors_parseEthereumErrors = require("../errors/parseEthereumErrors.js");
|
|
4
4
|
const require_core_tasks_EthereumCheckAllowanceTask = require("./tasks/EthereumCheckAllowanceTask.js");
|
|
5
|
+
const require_core_tasks_EthereumCheckBalanceTask = require("./tasks/EthereumCheckBalanceTask.js");
|
|
5
6
|
const require_core_tasks_EthereumCheckPermitsTask = require("./tasks/EthereumCheckPermitsTask.js");
|
|
6
7
|
const require_core_tasks_EthereumNativePermitTask = require("./tasks/EthereumNativePermitTask.js");
|
|
7
8
|
const require_core_tasks_EthereumPrepareTransactionTask = require("./tasks/EthereumPrepareTransactionTask.js");
|
|
@@ -63,7 +64,7 @@ var EthereumStepExecutor = class extends _lifi_sdk.BaseStepExecutor {
|
|
|
63
64
|
new require_core_tasks_EthereumNativePermitTask.EthereumNativePermitTask(),
|
|
64
65
|
new require_core_tasks_EthereumResetAllowanceTask.EthereumResetAllowanceTask(),
|
|
65
66
|
new require_core_tasks_EthereumSetAllowanceTask.EthereumSetAllowanceTask(),
|
|
66
|
-
new
|
|
67
|
+
new require_core_tasks_EthereumCheckBalanceTask.EthereumCheckBalanceTask(),
|
|
67
68
|
new require_core_tasks_EthereumPrepareTransactionTask.EthereumPrepareTransactionTask(),
|
|
68
69
|
new require_core_tasks_EthereumSignAndExecuteTask.EthereumSignAndExecuteTask(),
|
|
69
70
|
new require_core_tasks_EthereumWaitForTransactionTask.EthereumWaitForTransactionTask(),
|
|
@@ -74,7 +75,7 @@ var EthereumStepExecutor = class extends _lifi_sdk.BaseStepExecutor {
|
|
|
74
75
|
if (doCheckAllowance) taskName = require_core_tasks_EthereumCheckPermitsTask.EthereumCheckPermitsTask.name;
|
|
75
76
|
else {
|
|
76
77
|
const swapOrBridgeAction = this.statusManager.findAction(step, isBridgeExecution ? "CROSS_CHAIN" : "SWAP");
|
|
77
|
-
taskName = swapOrBridgeAction?.txHash || swapOrBridgeAction?.taskId ? swapOrBridgeAction?.status === "DONE" ? require_core_tasks_EthereumWaitForTransactionStatusTask.EthereumWaitForTransactionStatusTask.name : require_core_tasks_EthereumWaitForTransactionTask.EthereumWaitForTransactionTask.name :
|
|
78
|
+
taskName = swapOrBridgeAction?.txHash || swapOrBridgeAction?.taskId ? swapOrBridgeAction?.status === "DONE" ? require_core_tasks_EthereumWaitForTransactionStatusTask.EthereumWaitForTransactionStatusTask.name : require_core_tasks_EthereumWaitForTransactionTask.EthereumWaitForTransactionTask.name : require_core_tasks_EthereumCheckBalanceTask.EthereumCheckBalanceTask.name;
|
|
78
79
|
}
|
|
79
80
|
const firstTaskIndex = tasks.findIndex((task) => task.constructor.name === taskName);
|
|
80
81
|
return new _lifi_sdk.TaskPipeline(tasks.slice(firstTaskIndex));
|