@safik/fk-plug-controller
Version:
Internet Computer Plug wallet's controller
141 lines (140 loc) • 6.13 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.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;