@aarc-dev/core-viem
Version:
986 lines • 46.7 kB
JavaScript
"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