@safik/fk-plug-controller
Version:
Internet Computer Plug wallet's controller
77 lines (76 loc) • 4.42 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.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 = {};