UNPKG

@safik/fk-plug-controller

Version:

Internet Computer Plug wallet's controller

141 lines (140 loc) 6.13 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.requestCacheUpdate = exports.getXTCTransactions = void 0; /* eslint-disable camelcase */ /* eslint-disable no-underscore-dangle */ const axios_1 = __importDefault(require("axios")); const token_1 = require("../token"); const KYASHU_URL = 'https://kyasshu.fleek.co'; const XTC_DECIMALS = 5; const formatTransfer = (principalId, { event }, details) => { if (!('Transfer' in event.kind)) throw Error(); const transaction = { details }; transaction.details.from = event.kind.Transfer.from; // check with @b0xtch how to instance Principal from api answer transaction.details.to = event.kind.Transfer.to; transaction.caller = event.kind.Transfer.from; transaction.type = transaction.details.to === principalId ? 'RECEIVE' : 'SEND'; return transaction; }; const formatBurn = (_principalId, { event }, details) => { if (!('Burn' in event.kind)) throw Error(); const transaction = { details }; transaction.details.from = event.kind.Burn.from; transaction.details.to = event.kind.Burn.to; transaction.caller = event.kind.Burn.from; transaction.type = 'BURN'; return transaction; }; const formatMint = (_principalId, { event }, details) => { if (!('Mint' in event.kind)) throw Error(); const transaction = { details }; transaction.details.from = 'Mint'; transaction.details.to = event.kind.Mint.to; transaction.caller = _principalId; transaction.type = 'MINT'; return transaction; }; const formatCanisterCalled = (_principalId, { event }, details) => { if (!('CanisterCalled' in event.kind)) throw Error(); const transaction = { details }; transaction.details.from = event.kind.CanisterCalled.from; transaction.caller = event.kind.CanisterCalled.from; transaction.details.to = `${event.kind.CanisterCalled.canister}_${event.kind.CanisterCalled.method_name}`; transaction.type = 'CANISTER_CALLED'; return transaction; }; const formatCanisterCreated = (_principalId, { event }, details) => { if (!('CanisterCreated' in event.kind)) throw Error(); const transaction = { details }; transaction.details.from = event.kind.CanisterCreated.from; transaction.caller = event.kind.CanisterCreated.from; transaction.details.to = event.kind.CanisterCreated.canister; transaction.type = 'CANISTER_CREATED'; return transaction; }; const formatXTCTransaction = (principalId, xtcTransaction) => { const transactionEvent = xtcTransaction.event; const transaction = {}; transaction.hash = xtcTransaction.txnId; transaction.timestamp = xtcTransaction.event.timestamp; const details = { amount: (0, token_1.parseBalance)({ value: transactionEvent.cycles.toString(), decimals: XTC_DECIMALS, }), currency: { symbol: 'XTC', decimals: XTC_DECIMALS }, fee: { amount: (0, token_1.parseBalance)({ value: transactionEvent.fee.toString(), decimals: XTC_DECIMALS, }), currency: { symbol: 'XTC', decimals: XTC_DECIMALS }, }, status: 'COMPLETED', }; switch (Object.keys(transactionEvent.kind)[0]) { case 'Transfer': return Object.assign(Object.assign({}, transaction), formatTransfer(principalId, xtcTransaction, details)); case 'Burn': return Object.assign(Object.assign({}, transaction), formatBurn(principalId, xtcTransaction, details)); case 'Mint': return Object.assign(Object.assign({}, transaction), formatMint(principalId, xtcTransaction, details)); case 'CanisterCalled': return Object.assign(Object.assign({}, transaction), formatCanisterCalled(principalId, xtcTransaction, details)); case 'CanisterCreated': return Object.assign(Object.assign({}, transaction), formatCanisterCreated(principalId, xtcTransaction, details)); default: throw Error; } }; const getXTCTransactions = (principalId, txnIds) => __awaiter(void 0, void 0, void 0, function* () { const url = `${KYASHU_URL}/txns/${principalId}${(txnIds === null || txnIds === void 0 ? void 0 : txnIds.length) ? `?txnIds=[${txnIds.join(',')}]` : ''}`; try { const response = yield axios_1.default.get(url); return { total: response.data.length, transactions: response.data.map(transaction => formatXTCTransaction(principalId, transaction)), }; } catch (e) { return { total: 0, transactions: [], }; } }); exports.getXTCTransactions = getXTCTransactions; const requestCacheUpdate = (principalId, txnIds) => __awaiter(void 0, void 0, void 0, function* () { try { const response = yield axios_1.default.post(`${KYASHU_URL}/txn/${principalId}`, { body: { pid: principalId, txnIds: txnIds === null || txnIds === void 0 ? void 0 : txnIds.map(tx => tx.toString()), }, }); return !!response.data; } catch (e) { console.log('kyasshuu error', e); return false; } }); exports.requestCacheUpdate = requestCacheUpdate;