@safik/fk-plug-controller
Version:
Internet Computer Plug wallet's controller
74 lines (73 loc) • 3.62 kB
JavaScript
;
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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getICPTransactions = exports.MILI_PER_SECOND = void 0;
/* eslint-disable camelcase */
/* eslint-disable @typescript-eslint/camelcase */
const cross_fetch_1 = __importDefault(require("cross-fetch"));
const errors_1 = require("../../../errors");
const constants_1 = require("../constants");
const token_1 = require("../token");
exports.MILI_PER_SECOND = 1000000;
const getTransactionInfo = (accountId, rosettaTransaction) => {
const { operations, metadata: { timestamp }, transaction_identifier: { hash }, } = rosettaTransaction;
const transaction = { details: { status: 'COMPLETED', fee: {} } };
operations.forEach(operation => {
const value = BigInt(operation.amount.value);
const { decimals } = operation.amount.currency;
const amount = (0, token_1.parseBalance)({ value: value.toString(), decimals });
if (operation.type === 'FEE') {
transaction.details.fee.amount = amount;
transaction.details.fee.currency = operation.amount.currency;
return;
}
if (value >= 0)
transaction.details.to = operation.account.address;
if (value <= 0)
transaction.details.from = operation.account.address;
if (transaction.details.status === 'COMPLETED' &&
operation.status !== 'COMPLETED')
transaction.details.status = operation.status;
transaction.type =
transaction.details.to === accountId ? 'RECEIVE' : 'SEND';
transaction.details.amount = amount;
transaction.details.currency = operation.amount.currency;
});
return Object.assign(Object.assign({}, transaction), { caller: transaction.details.from, hash, timestamp: timestamp / exports.MILI_PER_SECOND });
};
const getICPTransactions = (accountId) => __awaiter(void 0, void 0, void 0, function* () {
const response = yield (0, cross_fetch_1.default)(`${constants_1.ROSETTA_URL}/search/transactions`, {
method: 'POST',
body: JSON.stringify({
network_identifier: constants_1.NET_ID,
account_identifier: {
address: accountId,
},
}),
headers: {
'Content-Type': 'application/json',
Accept: '*/*',
},
});
if (!response.ok)
throw Error(`${errors_1.ERRORS.GET_TRANSACTIONS_FAILS} ${response.statusText}`);
const { transactions, total_count } = yield response.json();
const transactionsInfo = transactions.map(({ transaction }) => getTransactionInfo(accountId, transaction));
return {
total: total_count,
transactions: transactionsInfo,
};
});
exports.getICPTransactions = getICPTransactions;
exports.default = {};