UNPKG

@safik/fk-plug-controller

Version:

Internet Computer Plug wallet's controller

77 lines (76 loc) 4.42 kB
"use strict"; 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.getCapTransactions = void 0; /* eslint-disable camelcase */ /* eslint-disable no-underscore-dangle */ const axios_1 = __importDefault(require("axios")); const principal_1 = require("@dfinity/principal"); const fk_cap_js_1 = require("@safik/fk-cap-js"); const dab_1 = require("../../dab"); const KYASHU_URL = 'https://kyasshu.fleek.co'; const parsePrincipal = pidObj => (pidObj === null || pidObj === void 0 ? void 0 : pidObj._isPrincipal) ? principal_1.Principal.fromUint8Array(new Uint8Array(Object.values(pidObj._arr))).toString() : pidObj; const getTransactionCanister = (contract) => { var _a; return (_a = contract === null || contract === void 0 ? void 0 : contract.split('#')) === null || _a === void 0 ? void 0 : _a[1]; }; const formatTransaction = (transaction, sk, contractId) => { var _a, _b, _c, _d; return ({ hash: sk, timestamp: transaction.time, type: transaction.operation, details: Object.assign(Object.assign({}, transaction.details), { canisterId: getTransactionCanister(contractId), tokenId: ((_a = transaction.details) === null || _a === void 0 ? void 0 : _a.token_id) || ((_b = transaction.details) === null || _b === void 0 ? void 0 : _b.token) || '', to: parsePrincipal((_c = transaction === null || transaction === void 0 ? void 0 : transaction.details) === null || _c === void 0 ? void 0 : _c.to), from: parsePrincipal((_d = transaction === null || transaction === void 0 ? void 0 : transaction.details) === null || _d === void 0 ? void 0 : _d.from) }), caller: parsePrincipal(transaction.caller) || '', }); }; const getCapTransactions = (principalId, lastEvaluatedKey) => __awaiter(void 0, void 0, void 0, function* () { const url = `${KYASHU_URL}/cap/user/txns/${principalId}${lastEvaluatedKey ? `?LastEvaluatedKey=${lastEvaluatedKey}` : ''}`; try { const response = yield axios_1.default.get(url); const canisterIds = [ ...new Set(response.data.Items.map(item => getTransactionCanister(item.contractId))), ].filter(value => value); const dabInfo = yield Promise.all(canisterIds.map((canisterId) => __awaiter(void 0, void 0, void 0, function* () { let canisterInfo = { canisterId }; try { const fetchedCanisterInfo = yield (0, dab_1.getCanisterInfo)(canisterId); canisterInfo = Object.assign({ canisterId }, fetchedCanisterInfo); } catch (error) { /* eslint-disable-next-line */ console.error("DAB error: ", error); } return canisterInfo; }))); const canistersInfo = dabInfo.reduce((acum, info) => (Object.assign(Object.assign({}, acum), { [info.canisterId]: info })), {}); const transactions = response.data.Items.map(item => { const canisterId = getTransactionCanister(item.contractId); const formattedTx = formatTransaction((0, fk_cap_js_1.prettifyCapTransactions)(item.event), item.sk, item.contractId); return Object.assign(Object.assign({}, formattedTx), { canisterInfo: canisterId ? canistersInfo[canisterId] : undefined }); }); return { total: response.data.Count, lastEvaluatedKey: response.data.LastEvaluatedKey, transactions, }; } catch (e) { return { total: 0, transactions: [], }; } }); exports.getCapTransactions = getCapTransactions; exports.default = {};