UNPKG

@lifi/sdk

Version:

LI.FI Any-to-Any Cross-Chain-Swap SDK

70 lines 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.revokeTokenApproval = exports.setTokenAllowance = exports.setAllowance = void 0; const viem_1 = require("viem"); const actions_1 = require("viem/actions"); const utils_1 = require("viem/utils"); const isZeroAddress_js_1 = require("../../utils/isZeroAddress.js"); const abi_js_1 = require("./abi.js"); const getAllowance_js_1 = require("./getAllowance.js"); const utils_js_1 = require("./utils.js"); const setAllowance = async (client, tokenAddress, contractAddress, amount, executionOptions, returnPopulatedTransaction) => { const data = (0, viem_1.encodeFunctionData)({ abi: abi_js_1.approveAbi, functionName: 'approve', args: [contractAddress, amount], }); if (returnPopulatedTransaction) { return data; } let transactionRequest = { to: tokenAddress, data, maxPriorityFeePerGas: client.account?.type === 'local' ? await (0, utils_js_1.getMaxPriorityFeePerGas)(client) : undefined, }; if (executionOptions?.updateTransactionRequestHook) { const customizedTransactionRequest = await executionOptions.updateTransactionRequestHook({ requestType: 'approve', ...transactionRequest, }); transactionRequest = { ...transactionRequest, ...customizedTransactionRequest, }; } return (0, utils_1.getAction)(client, actions_1.sendTransaction, 'sendTransaction')({ to: transactionRequest.to, account: client.account, data: transactionRequest.data, gas: transactionRequest.gas, gasPrice: transactionRequest.gasPrice, maxFeePerGas: transactionRequest.maxFeePerGas, maxPriorityFeePerGas: transactionRequest.maxPriorityFeePerGas, }); }; exports.setAllowance = setAllowance; const setTokenAllowance = async ({ walletClient, token, spenderAddress, amount, }) => { if ((0, isZeroAddress_js_1.isZeroAddress)(token.address)) { return; } const approvedAmount = await (0, getAllowance_js_1.getAllowance)(walletClient, token.address, walletClient.account.address, spenderAddress); if (amount > approvedAmount) { const approveTx = await (0, exports.setAllowance)(walletClient, token.address, spenderAddress, amount); return approveTx; } }; exports.setTokenAllowance = setTokenAllowance; const revokeTokenApproval = async ({ walletClient, token, spenderAddress, }) => { if ((0, isZeroAddress_js_1.isZeroAddress)(token.address)) { return; } const approvedAmount = await (0, getAllowance_js_1.getAllowance)(walletClient, token.address, walletClient.account.address, spenderAddress); if (approvedAmount > 0) { const approveTx = await (0, exports.setAllowance)(walletClient, token.address, spenderAddress, 0n); return approveTx; } }; exports.revokeTokenApproval = revokeTokenApproval; //# sourceMappingURL=setAllowance.js.map