@bloom-trade/finance-connector
Version:
Is a package entended to be used with multiple web3 and web2 providers to interact with blockchains.
158 lines (157 loc) • 8.3 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProviderConnectorImpl = void 0;
const connector_1 = require("../connector");
const axios_1 = __importStar(require("axios"));
const circle_sdk_1 = require("@circle-fin/circle-sdk");
const utils_1 = require("../../utils");
class ProviderConnectorImpl extends connector_1.ProviderConnector {
getBalance() {
return __awaiter(this, void 0, void 0, function* () {
try {
const balance = [];
const { data: { data: res }, } = yield axios_1.default.get(`${this._baseurl}/balances`, {
headers: {
Authorization: `Bearer ${this._provider.auth.apiKey}`,
},
});
const { data: { data: wallets }, } = yield axios_1.default.get(`${this._baseurl}/businessAccount/wallets/addresses/deposit`, {
headers: {
Authorization: `Bearer ${this._provider.auth.apiKey}`,
},
});
const processedWallets = [];
wallets.forEach((wallet) => {
var _a;
processedWallets.push({
address: wallet.address,
chain: wallet.chain,
balance: ((_a = res.available.find((item) => item.currency === wallet.currency)) === null || _a === void 0 ? void 0 : _a.amount) || '0',
provider: 'circle',
});
});
res.available.forEach((item) => {
balance.push({
asset: item.currency === 'USD' ? 'USDC' : item.currency,
balance: item.amount,
description: 'Available balance',
detail: processedWallets,
});
});
return balance;
}
catch (error) {
if (!(error instanceof axios_1.AxiosError))
throw new Error('Unknown error');
const axiosError = error;
const { response } = axiosError;
throw new Error((response === null || response === void 0 ? void 0 : response.data.message) || 'Unknown error');
}
});
}
getTransactionHistory(filters) {
return __awaiter(this, void 0, void 0, function* () {
let startingDate = 0;
if (filters.from !== 'beginning' &&
filters.from.custodialProviders &&
filters.from.custodialProviders.length > 0) {
const foundProvider = filters.from.custodialProviders.find((provider) => provider.id === 'circle');
if (!foundProvider)
return;
startingDate = foundProvider.date;
}
const circleSDK = new circle_sdk_1.Circle(this._provider.auth.apiKey, this._provider.useTestnet
? circle_sdk_1.CircleEnvironments.sandbox
: circle_sdk_1.CircleEnvironments.production);
const { data: { data: transfers }, } = yield circleSDK.transfers.listTransfers(undefined, undefined, undefined, undefined, (0, utils_1.fDate)(startingDate), (0, utils_1.fDate)(Date.now()));
const declaredCircleAddresses = [];
const { data: { data: wallets }, } = yield circleSDK.wallets.listWallets();
if (wallets && wallets.length > 0) {
for (const wallet of wallets) {
if (!wallet.walletId)
return;
const { data: { data: addresses }, } = yield circleSDK.wallets.listAddresses(wallet.walletId);
if (addresses && addresses.length > 0) {
for (const address of addresses) {
if (!address.address)
continue;
if (declaredCircleAddresses.filter((addr) => address.address === addr.address).length === 0 &&
address.chain)
declaredCircleAddresses.push({
address: address.address,
chains: [address.chain.toLowerCase()],
});
else {
if (!address.chain)
continue;
const index = declaredCircleAddresses.findIndex((addr) => addr.address === address.address);
declaredCircleAddresses[index] = Object.assign(Object.assign({}, declaredCircleAddresses[index]), { chains: [
...declaredCircleAddresses[index].chains,
address.chain.toLowerCase(),
] });
}
}
}
}
}
const transactions = [];
if (transfers && transfers.length > 0) {
transfers.forEach((transfer) => {
if (transfer.amount.currency !== 'USD')
return;
const foundAddress = declaredCircleAddresses.find((address) => address.address === transfer.destination.address);
transactions.push({
asset: 'usdc',
amount: transfer.amount.amount,
from: `circle_${transfer.source.type}_${transfer.source.type === 'blockchain'
? transfer.source.chain.toLowerCase()
: transfer.source.identities
? transfer.source.identities[0].type
: transfer.source.id}`,
status: transfer.status === 'complete' ? 'completed' : transfer.status,
to: transfer.destination.address || transfer.destination.type,
type: foundAddress !== undefined ? 'in' : 'out',
timestamp: transfer.createDate
? (0, utils_1.stringToMilisecondsDate)(transfer.createDate)
: Date.now(),
provider: 'circle',
});
});
}
return transactions;
});
}
}
exports.ProviderConnectorImpl = ProviderConnectorImpl;