UNPKG

@aarc-dev/core-viem

Version:

986 lines 46.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AarcCore = void 0; const Constants_1 = require("./utils/Constants"); const CoreTypes_1 = require("./utils/CoreTypes"); const Helper_1 = require("./utils/Helper"); const Logger_1 = require("./utils/Logger"); const Permit2BatchTransfer_abi_1 = require("./utils/abis/Permit2BatchTransfer.abi"); const utils_1 = require("./utils"); const viem_1 = require("viem"); class AarcCore { constructor(apiKey, isDebug = false) { this.getRequestStatus = async (requestId) => { const url = `${Constants_1.POST_EXECUTION_SCHEDULE_TRANSACTION_STATUS_ENDPOINT}/${requestId}`; const apiKey = this.apiKey; const response = await fetch(url, { method: "GET", headers: { "x-api-key": apiKey, Accept: "application/json", "Content-Type": "application/json", }, }); const res = await response.json(); console.debug(res); return res.data; }; this.apiKey = apiKey; Logger_1.Logger.isDebug = isDebug; } async executeMigrationGasless(executeMigrationGaslessDto) { // const response: MigrationResponse[] = []; let exResultSet, executionResultSet = []; try { const { senderSigner, receiverAddress, chainId, account } = executeMigrationGaslessDto; let { transferTokenDetails } = executeMigrationGaslessDto; const [owner] = await senderSigner.getAddresses(); const requestBody = { chainId: chainId.toString(), owner, receiverAddress, tokensList: transferTokenDetails !== null && transferTokenDetails !== void 0 ? transferTokenDetails : [], }; const gaslessResponse = await (0, Helper_1.generateGaslessCallData)(requestBody, this.apiKey); Logger_1.Logger.log(JSON.stringify(gaslessResponse)); const resultSet = gaslessResponse.data; for (let index = 0; index < resultSet.length; index++) { const element = resultSet[index]; if (element.code === 200) { if (element.txType === CoreTypes_1.PERMIT_TX_TYPES.PERMIT) { // Sign the EIP-712 message const eip712Struct = element.eip712Struct; const { domain, types, value } = eip712Struct; domain.version = "1"; // @ts-ignore const permitTransferFrom = types.PermitTransferFrom; // @ts-ignore delete types.PermitTransferFrom; types.Permit = permitTransferFrom; const signature = await account.signTypedData({ domain, primaryType: "Permit", types, message: value, }); const dataSet = JSON.parse(element.data); dataSet.signature = signature; element.data = JSON.stringify(dataSet); } else if (element.txType === CoreTypes_1.PERMIT_TX_TYPES.PERMIT2_SINGLE) { const eip712Struct = element.eip712Struct; const { domain, types, value } = eip712Struct; domain.version = "1"; // @ts-ignore const permitTransferFrom = types.PermitTransferFrom; // @ts-ignore delete types.PermitTransferFrom; types.Permit = permitTransferFrom; const signature = await account.signTypedData({ domain, types, primaryType: "Permit", message: value, }); const dataSet = JSON.parse(element.data); dataSet.signature = signature; element.data = JSON.stringify(dataSet); } else if (element.txType === CoreTypes_1.PERMIT_TX_TYPES.PERMIT2_BATCH) { const eip712Struct = element.eip712Struct; const { domain, types, value } = eip712Struct; // @ts-ignore const permitTransferFrom = types.PermitBatchTransferFrom; // @ts-ignore delete types.PermitTransferFrom; types.Permit = permitTransferFrom; const signature = await account.signTypedData({ domain, primaryType: "Permit", types, message: value, }); const dataSet = JSON.parse(element.data); dataSet.signature = signature; element.data = JSON.stringify(dataSet); } else { let trx; const valueToSend = (BigInt(element.amount) / BigInt(100)) * BigInt(80); if (!element.message.includes("Insufficient")) { trx = await senderSigner.sendTransaction({ chain: senderSigner.chain, account, to: `0x${element.target.split("0x")[1]}`, value: element.txType === CoreTypes_1.PERMIT_TX_TYPES.NATIVE ? valueToSend : BigInt(0), data: `0x${element.data.split("0x")[1]}`, }); executionResultSet.push({ tokenInfo: [ { tokenAddress: element.tokenAddress[0], amount: BigInt(element.amount), }, ], type: element.txType, taskId: "", status: element.message.includes("Insufficient") ? element.message : "transfer success", txHash: trx ? typeof trx === "string" ? trx : "" : "", }); } } } } const finalResultSet = resultSet.filter((list) => list.code === 200); const errorResultSet = resultSet.filter((list) => list.code === 400); for (let index = 0; index < errorResultSet.length; index++) { const element = errorResultSet[index]; executionResultSet.push({ tokenInfo: [ { tokenAddress: element.tokenAddress[0], amount: BigInt(element.amount), }, ], type: element.txType, taskId: "", status: element.message, txHash: "", }); } exResultSet = await (0, Helper_1.executeGaslessCallData)(chainId.toString(), finalResultSet, this.apiKey); } catch (error) { // Handle any errors that occur during the migration process Logger_1.Logger.error("Migration Error:", error); throw error; } Logger_1.Logger.log(JSON.stringify(executionResultSet)); return executionResultSet.concat(exResultSet); } /** * @description this function will return balances of ERC-20, ERC-721 and native tokens * @param balancesDto * @returns */ async fetchBalances(eoaAddress, chainId, fetchBalancesOnly = true, tokenAddresses) { return (0, Helper_1.fetchBalances)(this.apiKey, chainId, eoaAddress, fetchBalancesOnly, tokenAddresses); } /** * @description this function will return balances of ERC-20, ERC-721 and native tokens * if given destinationToken then it will return amount required to convert to that token * @param eoaAddress wallet address * @param destinationToken token details to get balances * @returns */ async fetchMultiChainBalances(eoaAddress, destinationToken) { return await (0, Helper_1.getMultiChainBalances)(this.apiKey, eoaAddress, destinationToken); } async fetchTokenPrice(tokenSymbol, tokenAddress, tokenChainId) { return await (0, Helper_1.getTokenPrice)(this.apiKey, tokenSymbol, tokenAddress, tokenChainId); } async isTokenSupported(chainId, tokenAddress) { return await (0, Helper_1.IsTokenSupported)(this.apiKey, chainId, tokenAddress); } async getSupportedTokens(chainId) { return await (0, Helper_1.GetSupportedTokens)(this.apiKey, chainId); } async getSupportedChains() { return await (0, Helper_1.GetSupportedChains)(this.apiKey); } async executeMigration(executeMigrationNonGaslessDto) { var _a; const { senderSigner, receiverAddress, chainId, account } = executeMigrationNonGaslessDto; let { transferTokenDetails } = executeMigrationNonGaslessDto; let executionResultSet = []; const [owner] = await senderSigner.getAddresses(); const requestBody = { chainId: chainId.toString(), owner, receiverAddress, tokensList: transferTokenDetails !== null && transferTokenDetails !== void 0 ? transferTokenDetails : [], }; const nonGaslessResponse = await (0, Helper_1.generateNonGaslessCallData)(requestBody, this.apiKey); const trxList = nonGaslessResponse.data; if (trxList) { for (let index = 0; index < trxList.length; index++) { const element = trxList[index]; if (element.code === 400) { executionResultSet.push({ tokenInfo: [ { tokenAddress: element.tokenAddress[0], amount: BigInt(element.amount), }, ], type: element.txType, taskId: "", status: element.message, txHash: "", }); } if (element.txType === CoreTypes_1.PERMIT_TX_TYPES.PERMIT2_BATCH) { const eip712Struct = element.eip712Struct; const { domain, types, value } = eip712Struct; const dataSet = JSON.parse(element.data); domain.version = "1"; // @ts-ignore const permitTransferFrom = types.PermitBatchTransferFrom; // @ts-ignore delete types.PermitTransferFrom; types.Permit = permitTransferFrom; const signature = await account.signTypedData({ domain, primaryType: "Permit", types, message: value, }); let tokenInfo = []; dataSet.permitBatchTransferFrom.permitted.map((token) => tokenInfo.push({ tokenAddress: token.token, amount: BigInt(token.amount), })); try { const permit2BatchContract = (0, viem_1.getContract)({ address: Constants_1.PERMIT2_CONTRACT_ADDRESS, abi: Permit2BatchTransfer_abi_1.PERMIT2_BATCH_TRANSFER_ABI, client: { wallet: senderSigner }, }); const trx = await permit2BatchContract.write.permitTransferFrom(dataSet.permitBatchTransferFrom, dataSet.tokenPermissions, dataSet.owner, signature); executionResultSet.push({ tokenInfo, type: element.txType, taskId: "", status: "transaction sent", txHash: trx ? typeof trx === "string" ? trx : "" : "", }); } catch (error) { executionResultSet.push({ tokenInfo, type: element.txType, taskId: "", status: error.toString(), txHash: "", }); } } else { let trx; const valueToSend = (BigInt(element.amount) / BigInt(100)) * BigInt(80); if (element.code === 200) { try { trx = await senderSigner.sendTransaction({ chain: senderSigner.chain, account, to: `0x${element.target.split("0x")[1]}`, value: element.txType === CoreTypes_1.PERMIT_TX_TYPES.NATIVE ? valueToSend : BigInt(0), data: `0x${element.data.split("0x")[1]}`, }); executionResultSet.push({ tokenInfo: [ { tokenAddress: element.tokenAddress[0], amount: BigInt(element.amount), }, ], type: element.txType, taskId: "", status: element.message.includes("Insufficient") ? element.message : "transfer success", txHash: trx ? typeof trx === "string" ? trx : "" : "", }); } catch (error) { executionResultSet.push({ tokenInfo: [ { tokenAddress: element.tokenAddress[0], amount: BigInt(element.amount), }, ], type: element.txType, taskId: "", status: (_a = error.toString()) !== null && _a !== void 0 ? _a : "transfer failed", txHash: "", }); } } } } } return executionResultSet; } async performDeposit(depositDto) { var _a, _b; let callDataResultSet = []; const { senderSigner, ...depositCallDataDto } = depositDto; const { account } = depositDto; let networkId = await senderSigner.getChainId(); if (networkId && networkId !== depositDto.fromChainId) { throw new Error("Invalid signer, conflicting chainId"); } const depositResponse = await (0, Helper_1.generateDepositCallData)(depositCallDataDto, this.apiKey); const approvalTxs = depositResponse.data.approvalTxs; const executionTxs = depositResponse.data.executionTxs; for (let index = 0; index < approvalTxs.length; index++) { const element = approvalTxs[index]; let trx; try { trx = await senderSigner.sendTransaction({ chain: senderSigner.chain, account, to: `0x${element.approvalTokenAddress.split("0x")[1]}`, data: `0x${element.callData.split("0x")[1]}`, value: BigInt(0), gasLimit: (_a = element.gasLimit) !== null && _a !== void 0 ? _a : undefined, }); callDataResultSet.push({ tokenInfo: [ { tokenAddress: element.approvalTokenAddress, amount: BigInt(element.minimumApprovalAmount), }, ], type: CoreTypes_1.PERMIT_TX_TYPES.ERC20_APPROVAL, taskId: "", status: "Tx Sent", txHash: trx, }); } catch (error) { throw new Error(error); } } for (let index = 0; index < executionTxs.length; index++) { const element = executionTxs[index]; let trx; try { trx = await senderSigner.sendTransaction({ chain: senderSigner.chain, account, to: `0x${element.txTarget.split("0x")[1]}`, data: element.txData ? `0x${element.txData.split("0x")[1]}` : "0x", value: BigInt(element.value), gasLimit: (_b = element.gasLimit) !== null && _b !== void 0 ? _b : undefined, }); callDataResultSet.push({ tokenInfo: [ { tokenAddress: depositDto.fromTokenAddress, amount: BigInt(depositDto.fromAmount), }, ], type: CoreTypes_1.PERMIT_TX_TYPES.DEPOSIT, taskId: "", status: "Tx Sent", txHash: trx ? (typeof trx === "string" ? trx : "") : "", }); } catch (error) { Logger_1.Logger.error("Error:", error); callDataResultSet.push({ tokenInfo: [ { tokenAddress: depositDto.fromTokenAddress, amount: BigInt(depositDto.fromAmount), }, ], type: CoreTypes_1.PERMIT_TX_TYPES.DEPOSIT, taskId: "", status: error.toString(), txHash: "", }); } } return callDataResultSet; } async performCheckout(depositDto) { var _a, _b; let callDataResultSet = []; const { senderSigner, account } = depositDto; let networkId = await senderSigner.getChainId(); if (networkId && networkId !== depositDto.fromChainId) { throw new Error("Invalid signer, conflicting chainId"); } const checkoutResponse = await (0, Helper_1.generateCheckoutCallData)(depositDto, this.apiKey); const approvalTxs = checkoutResponse.data.approvalTxs; const executionTxs = checkoutResponse.data.executionTxs; for (let index = 0; index < approvalTxs.length; index++) { const element = approvalTxs[index]; let trx; try { trx = await senderSigner.sendTransaction({ chain: senderSigner.chain, account, to: `0x${element.approvalTokenAddress.split("0x")[1]}`, data: `0x${element.callData.split("0x")[1]}`, value: BigInt(0), gasLimit: (_a = element.gasLimit) !== null && _a !== void 0 ? _a : undefined, }); callDataResultSet.push({ tokenInfo: [ { tokenAddress: element.approvalTokenAddress, amount: BigInt(element.minimumApprovalAmount), }, ], type: CoreTypes_1.PERMIT_TX_TYPES.ERC20_APPROVAL, taskId: "", status: "Tx Sent", txHash: trx, }); } catch (error) { throw new Error(error); } } for (let index = 0; index < executionTxs.length; index++) { const element = executionTxs[index]; let trx; try { trx = await senderSigner.sendTransaction({ chain: senderSigner.chain, account, to: `0x${element.txTarget.split("0x")[1]}`, data: element.txData ? `0x${element.txData.split("0x")[1]}` : "0x", value: BigInt(element.value), gasLimit: (_b = element.gasLimit) !== null && _b !== void 0 ? _b : undefined, }); callDataResultSet.push({ tokenInfo: [ { tokenAddress: depositDto.fromTokenAddress, amount: BigInt(depositDto.toAmount), }, ], type: CoreTypes_1.PERMIT_TX_TYPES.CHECKOUT, taskId: "", status: "Tx Sent", txHash: trx ? (typeof trx === "string" ? trx : "") : "", }); } catch (error) { Logger_1.Logger.error("Error:", error); callDataResultSet.push({ tokenInfo: [ { tokenAddress: depositDto.fromTokenAddress, amount: BigInt(depositDto.toAmount), }, ], type: CoreTypes_1.PERMIT_TX_TYPES.CHECKOUT, taskId: "", status: error.toString(), txHash: "", }); } } return callDataResultSet; } async getDepositRoute(depositRouteDto) { try { const routes = await (0, Helper_1.generateDepositCallData)(depositRouteDto, this.apiKey); return routes; } catch (error) { throw new Error(error); } } async getCheckoutRoute(checkoutRouteDto) { try { const route = await (0, Helper_1.generateCheckoutCallData)(checkoutRouteDto, this.apiKey); return route; } catch (error) { throw new Error(error); } } async executeMigrationForward(executeMigrationForwardDto) { const response = []; let resultSet = []; let callDataResultSet = []; try { const { senderSigner, receiverAddress, chainId, account } = executeMigrationForwardDto; let { transferTokenDetails } = executeMigrationForwardDto; const [owner] = await senderSigner.getAddresses(); const requestBody = { chainId: chainId.toString(), owner, receiverAddress, tokensList: transferTokenDetails, }; const forwardCallResponse = await (0, Helper_1.generateForwardCallData)(requestBody, this.apiKey); Logger_1.Logger.log(JSON.stringify(forwardCallResponse)); const forwardTrxList = forwardCallResponse.forwardCallDataResponse; if (forwardTrxList) { for (let index = 0; index < forwardTrxList.length; index++) { const element = forwardTrxList[index]; if (element.txType === CoreTypes_1.PERMIT_TX_TYPES.PERMIT) { // Sign the EIP-712 message const eip712Struct = element.eip712Struct; const { domain, types, value } = eip712Struct; // @ts-ignore const permitTransferFrom = types.PermitTransferFrom; // @ts-ignore delete types.PermitTransferFrom; types.Permit = permitTransferFrom; const signature = await account.signTypedData({ domain, primaryType: "Permit", types, message: value, }); const dataSet = JSON.parse(element.data); dataSet.signature = signature; element.data = JSON.stringify(dataSet); } else if (element.txType === CoreTypes_1.PERMIT_TX_TYPES.PERMIT2_BATCH) { const eip712Struct = element.eip712Struct; const { domain, types, value } = eip712Struct; // @ts-ignore const permitTransferFrom = types.PermitBatchTransferFrom; // @ts-ignore delete types.PermitTransferFrom; types.Permit = permitTransferFrom; const signature = await account.signTypedData({ domain, primaryType: "Permit", types, message: value, }); const dataSet = JSON.parse(element.data); dataSet.signature = signature; element.data = JSON.stringify(dataSet); } } try { const finalForwardTrxList = forwardTrxList.filter((list) => list.code === 200); const errorResultSet = forwardTrxList.filter((list) => list.code === 400); for (let index = 0; index < errorResultSet.length; index++) { const element = errorResultSet[index]; callDataResultSet.push({ tokenInfo: [ { tokenAddress: element.tokenAddress[0], amount: BigInt(element.amount), }, ], type: element.txType, taskId: "", status: element.message, txHash: "", }); } resultSet = await (0, Helper_1.executeForwardCallData)(chainId.toString(), { forwardCallDataResponse: finalForwardTrxList, txIndexes: forwardCallResponse.txIndexes, }, this.apiKey); } catch (error) { Logger_1.Logger.error("Error:", error); } } Logger_1.Logger.log(JSON.stringify(response)); return callDataResultSet.concat(resultSet); } catch (error) { // Handle any errors that occur during the migration process Logger_1.Logger.error("Migration Error:", error); throw error; } } async getTransactionStatus(taskId) { return (0, Helper_1.GetTransactionStatus)(taskId); } async generateDepositOnrampUrl(onrampData) { var _a; try { onrampData.exchangeScreenTitle = (_a = onrampData.exchangeScreenTitle) === null || _a === void 0 ? void 0 : _a.replace(/ /g, "%20"); if (onrampData.chainId in utils_1.OnrampDepositChains) { const url = `${Constants_1.ONRAMP_BASE_URL}?env=${CoreTypes_1.OnRampEnv.PRODUCTION}&mode=${CoreTypes_1.OnRampMode.DEPOSIT}&network=${utils_1.OnrampDepositChains[onrampData.chainId]}&walletAddress=${onrampData.walletAddress}&exchangeScreenTitle=${onrampData.exchangeScreenTitle}&aarcApiKey=${this.apiKey}&customerId=${onrampData.customerId}&cryptoCurrencyList=${onrampData.cryptoCurrencyList}&networks=${onrampData.networks}&defaultNetwork=${onrampData.defaultNetwork}&cryptoTokenData=${JSON.stringify(onrampData.cryptoTokenData)}&fiatAmount=${onrampData.fiatAmount}&fiatCurrencyCode=${onrampData.fiatCurrencyCode}&countryCode=${onrampData.countryCode}`; return url; } else { throw new Error("Unsupported chainId"); } } catch (error) { Logger_1.Logger.error("Generate onramp url error: ", error); throw error; } } async generateCheckoutOnrampUrl(onrampData) { var _a; try { onrampData.exchangeScreenTitle = (_a = onrampData.exchangeScreenTitle) === null || _a === void 0 ? void 0 : _a.replace(/ /g, "%20"); var env; var network; if (onrampData.chainId in utils_1.OnrampMainnetCheckoutChains) { env = CoreTypes_1.OnRampEnv.PRODUCTION; network = utils_1.OnrampMainnetCheckoutChains[onrampData.chainId]; } else if (onrampData.chainId in utils_1.OnrampTestnetCheckoutChains) { env = CoreTypes_1.OnRampEnv.STAGING; network = utils_1.OnrampTestnetCheckoutChains[onrampData.chainId]; } else { throw new Error("Unsupported chainId"); } const url = `${Constants_1.ONRAMP_BASE_URL}?env=${env}&mode=${CoreTypes_1.OnRampMode.CHECKOUT}&network=${network}&walletAddress=${onrampData.walletAddress}&estimatedGasLimit=${onrampData.estimatedGasLimit}&smartContractAddress=${onrampData.smartContractAddress}&sourceTokenData=${JSON.stringify(onrampData.sourceTokenData)}&calldata=${onrampData.callData}&cryptoCurrencyData=${JSON.stringify(onrampData.cryptoCurrencyData)}&aarcApiKey=${this.apiKey}&customerId=${onrampData.customerId}`; return url; } catch (error) { Logger_1.Logger.error("Generate onramp url error: ", error); throw error; } } async generateMoonpayOnrampUrl(onrampData) { try { const url = `${Constants_1.ONRAMP_BASE_URL}?aarcApiKey=${this.apiKey}&walletAddress=${onrampData.walletAddress}&fiatCurrencyCode=${onrampData.fiatCurrencyCode}&fiatAmount=${onrampData.fiatAmount}&defaultCryptoCurrencyCode=${onrampData.defaultCryptoCurrencyCode}&cryptoTokenData=${JSON.stringify(onrampData.cryptoTokenData || {})}&network=${onrampData.network}&paymentMethod=${onrampData.paymentMethod}&platform=moonpay`; return url; } catch (error) { Logger_1.Logger.error("Generate onramp url error: ", error); throw error; } } async generateKadoOnrampUrl(onrampData) { try { const url = `${Constants_1.ONRAMP_BASE_URL}?aarcApiKey=${this.apiKey}&payAmount=${onrampData.onPayAmount}&onToAddress=${onrampData.onToAddress}&onRevCurrency=${onrampData.onRevCurrency}&network=${onrampData.network}&cryptoList=${encodeURIComponent(onrampData.cryptoList.join(","))}&networkList=${encodeURIComponent(onrampData.networkList.join(","))}&userRef=${(onrampData === null || onrampData === void 0 ? void 0 : onrampData.userRef) || ""}&platform=kado`; return url; } catch (error) { Logger_1.Logger.error("Generate Kado onramp url error: ", error); throw error; } } async getDepositAddress({ toAmount, provider, gasLimit, slippage, routeType, fromAmount, userOpHash, fromChainId, fromAddress, transferOut, transferType, targetCalldata, userOperations, fromTokenAddress, destinationChainId, destinationRecipient, destinationTokenAddress, dappId, userId, refundAddress, }) { var _a; if (transferType === CoreTypes_1.TransferType.WALLET) { if (!fromChainId || !fromTokenAddress) { throw new Error('fromChainId, fromTokenAddress are required for transferType "wallet"'); } } if (transferType === CoreTypes_1.TransferType.DEX || transferType === CoreTypes_1.TransferType.ONRAMP || transferType === CoreTypes_1.TransferType.CEX) { if (!provider) { throw new Error('provider is required for transferType "dex", "onramp", or "cex"'); } } const payloadParams = { destinationChainId, destinationTokenAddress, destinationRecipient, transferType, }; if (routeType) payloadParams.routeType = routeType; if (toAmount) payloadParams.toAmount = toAmount.toString(); if (fromAmount) payloadParams.fromAmount = fromAmount.toString(); if (provider) payloadParams.provider = provider; if (fromChainId) payloadParams.fromChainId = fromChainId; if (fromTokenAddress) payloadParams.fromTokenAddress = fromTokenAddress; if (fromAddress) payloadParams.fromAddress = fromAddress; if (refundAddress) payloadParams.refundAddress = refundAddress; if (dappId) payloadParams.dappId = dappId; if (userId) payloadParams.userId = userId; if (slippage) { const slippageValue = parseFloat(slippage); if (slippageValue < 0.005) { payloadParams.slippage = "0.005"; } else if (slippageValue > 1) { payloadParams.slippage = "1"; } else { payloadParams.slippage = slippage; } } if (targetCalldata) payloadParams.targetCalldata = targetCalldata; if (gasLimit) payloadParams.gasLimit = gasLimit; if (userOpHash) payloadParams.userOpHash = userOpHash; if (userOperations) { payloadParams.userOperations = JSON.stringify(userOperations); } const url = Constants_1.DEPOSIT_ADDRESS_ENDPOINT; let queryString = new URLSearchParams(payloadParams).toString(); if (transferOut) queryString += `&transferOut[]=${transferOut.tokenAddress},${transferOut.recipientAddress}`; const endPoint = `${url}?${queryString}`; const response = await fetch(endPoint, { method: "GET", headers: { "x-api-key": this.apiKey, Accept: "application/json", "Content-Type": "application/json", }, }); const res = await response.json(); res.data.amount = (_a = res.data.amount) !== null && _a !== void 0 ? _a : res.data.amounnt; // Handle possible typo in response const depositAddressData = { ...res.data }; return depositAddressData; } /** * @description Get deposit address for routing requests with toAmount * @param routingRequestDto * @returns RoutingRequestResponseDto */ async getRoutingRequestDepositAddress(routingRequestDto) { const payloadParams = { destinationChainId: routingRequestDto.destinationChainId, destinationTokenAddress: routingRequestDto.destinationTokenAddress, toAmount: routingRequestDto.toAmount, destinationRecipient: routingRequestDto.destinationRecipient, transferType: routingRequestDto.transferType, userId: routingRequestDto.userId, dappId: routingRequestDto.dappId, }; if (routingRequestDto.provider) payloadParams.provider = routingRequestDto.provider; if (routingRequestDto.routeType) payloadParams.routeType = routingRequestDto.routeType; if (routingRequestDto.fromChainId) payloadParams.fromChainId = routingRequestDto.fromChainId; if (routingRequestDto.fromTokenAddress) payloadParams.fromTokenAddress = routingRequestDto.fromTokenAddress; if (routingRequestDto.fromAddress) payloadParams.fromAddress = routingRequestDto.fromAddress; if (routingRequestDto.refundAddress) payloadParams.refundAddress = routingRequestDto.refundAddress; if (routingRequestDto.slippage) { const slippageValue = parseFloat(routingRequestDto.slippage); if (slippageValue < 0.005) { payloadParams.slippage = "0.005"; } else if (slippageValue > 1) { payloadParams.slippage = "1"; } else { payloadParams.slippage = routingRequestDto.slippage; } } if (routingRequestDto.targetCalldata) payloadParams.targetCalldata = routingRequestDto.targetCalldata; if (routingRequestDto.calldataABI) payloadParams.calldataABI = routingRequestDto.calldataABI; if (routingRequestDto.calldataParams) payloadParams.calldataParams = routingRequestDto.calldataParams; if (routingRequestDto.gasLimit) payloadParams.gasLimit = routingRequestDto.gasLimit; const url = Constants_1.ROUTING_REQUEST_DEPOSIT_ADDRESS_ENDPOINT; const queryString = new URLSearchParams(payloadParams).toString(); const endPoint = `${url}?${queryString}`; const response = await fetch(endPoint, { method: "GET", headers: { "x-api-key": this.apiKey, Accept: "application/json", "Content-Type": "application/json", }, }); const res = await response.json(); return res.data; } /** * @description Get deposit address for routing requests with fromAmount * @param routingRequestDto * @returns RoutingRequestResponseDtoFromAmount */ async getRoutingRequestDepositAddressFromAmount(routingRequestDto) { const payloadParams = { transferType: routingRequestDto.transferType, userId: routingRequestDto.userId, dappId: routingRequestDto.dappId, }; if (routingRequestDto.destinationChainId) payloadParams.destinationChainId = routingRequestDto.destinationChainId; if (routingRequestDto.destinationTokenAddress) payloadParams.destinationTokenAddress = routingRequestDto.destinationTokenAddress; if (routingRequestDto.fromAmount) payloadParams.fromAmount = routingRequestDto.fromAmount; if (routingRequestDto.toAmount) payloadParams.toAmount = routingRequestDto.toAmount; if (routingRequestDto.destinationRecipient) payloadParams.destinationRecipient = routingRequestDto.destinationRecipient; if (routingRequestDto.provider) payloadParams.provider = routingRequestDto.provider; if (routingRequestDto.routeType) payloadParams.routeType = routingRequestDto.routeType; if (routingRequestDto.fromChainId) payloadParams.fromChainId = routingRequestDto.fromChainId; if (routingRequestDto.fromTokenAddress) payloadParams.fromTokenAddress = routingRequestDto.fromTokenAddress; if (routingRequestDto.fromAddress) payloadParams.fromAddress = routingRequestDto.fromAddress; if (routingRequestDto.refundAddress) payloadParams.refundAddress = routingRequestDto.refundAddress; if (routingRequestDto.slippage) { const slippageValue = parseFloat(routingRequestDto.slippage); if (slippageValue < 0.005) { payloadParams.slippage = "0.005"; } else if (slippageValue > 1) { payloadParams.slippage = "1"; } else { payloadParams.slippage = routingRequestDto.slippage; } } if (routingRequestDto.calldataABI) payloadParams.calldataABI = routingRequestDto.calldataABI; if (routingRequestDto.calldataParams) payloadParams.calldataParams = routingRequestDto.calldataParams; if (routingRequestDto.gasLimit) payloadParams.gasLimit = routingRequestDto.gasLimit; const url = Constants_1.ROUTING_REQUEST_DEPOSIT_ADDRESS_ENDPOINT; const queryString = new URLSearchParams(payloadParams).toString(); const endPoint = `${url}?${queryString}`; const response = await fetch(endPoint, { method: "GET", headers: { "x-api-key": this.apiKey, Accept: "application/json", "Content-Type": "application/json", }, }); const res = await response.json(); return res.data; } async postExecuteToAddress({ depositData, trxHash, }) { const url = Constants_1.POST_EXECUTION_SCHEDULE_TRANSACTION_ENDPOINT; const data = { requestId: depositData.requestId, chainId: depositData.onChainID, transactionHash: trxHash, amount: "", tokenAddress: depositData.depositTokenAddress, }; if ("depositTokenAmount" in depositData) data.amount = depositData.depositTokenAmount; else if ("amount" in depositData) data.amount = depositData.amount; const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": this.apiKey, }, body: JSON.stringify(data), }); console.debug("Transaction response: ", response); } /** * @description Get QR code deposit address for simple deposit requests * @param qrCodeDepositAddressDto * @returns QrCodeDepositAddressResponse */ async getQrCodeDepositAddress(qrCodeDepositAddressDto) { const payloadParams = { destinationChainId: qrCodeDepositAddressDto.destinationChainId, destinationTokenAddress: qrCodeDepositAddressDto.destinationTokenAddress, destinationRecipient: qrCodeDepositAddressDto.destinationRecipient, userId: qrCodeDepositAddressDto.userId, dappId: qrCodeDepositAddressDto.dappId, }; if (qrCodeDepositAddressDto.fromChainId) payloadParams.fromChainId = qrCodeDepositAddressDto.fromChainId; if (qrCodeDepositAddressDto.fromTokenAddress) payloadParams.fromTokenAddress = qrCodeDepositAddressDto.fromTokenAddress; if (qrCodeDepositAddressDto.fromAddress) payloadParams.fromAddress = qrCodeDepositAddressDto.fromAddress; if (qrCodeDepositAddressDto.refundAddress) payloadParams.refundAddress = qrCodeDepositAddressDto.refundAddress; if (qrCodeDepositAddressDto.fromAmount) payloadParams.fromAmount = qrCodeDepositAddressDto.fromAmount; if (qrCodeDepositAddressDto.calldataABI) payloadParams.calldataABI = qrCodeDepositAddressDto.calldataABI; if (qrCodeDepositAddressDto.calldataParams) payloadParams.calldataParams = qrCodeDepositAddressDto.calldataParams; if (qrCodeDepositAddressDto.gasLimit) payloadParams.gasLimit = qrCodeDepositAddressDto.gasLimit; const url = Constants_1.QR_CODE_DEPOSIT_ADDRESS_ENDPOINT; const queryString = new URLSearchParams(payloadParams).toString(); const endPoint = `${url}?${queryString}`; const response = await fetch(endPoint, { method: "GET", headers: { "x-api-key": this.apiKey, Accept: "application/json", "Content-Type": "application/json", }, }); const res = await response.json(); return res.data; } /** * @description Activate deposit address for QR flow * @param depositAddressActivationDto * @returns DepositAddressActivationResponse */ async activateDepositAddress(depositAddressActivationDto) { const url = Constants_1.DEPOSIT_ADDRESS_ACTIVATION_ENDPOINT; // Always send tokenAddress, even if empty string const body = {}; if (depositAddressActivationDto.requestId) body.requestId = depositAddressActivationDto.requestId; if (depositAddressActivationDto.depositAddress) body.depositAddress = depositAddressActivationDto.depositAddress; if (depositAddressActivationDto.chainId) body.chainId = depositAddressActivationDto.chainId; if (depositAddressActivationDto.tokenAddress) body.tokenAddress = depositAddressActivationDto.tokenAddress; const response = await fetch(url, { method: "POST", headers: { "x-api-key": this.apiKey, Accept: "application/json", "Content-Type": "application/json", }, body: JSON.stringify(body), }); const res = await response.json(); return res; } } exports.AarcCore = AarcCore; exports.default = AarcCore; //# sourceMappingURL=AarcCore.js.map