beeline-cli
Version:
A terminal wallet for the Hive blockchain - type, sign, rule the chain
191 lines • 10.4 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.BalanceScreen = BalanceScreen;
const react_1 = __importStar(require("react"));
const ink_1 = require("ink");
const hive_js_1 = require("../../utils/hive.js");
function BalanceScreen({ keyManager, mock = false, node, setCurrentScreen }) {
const [balanceData, setBalanceData] = (0, react_1.useState)(null);
const [isLoading, setIsLoading] = (0, react_1.useState)(true);
const [error, setError] = (0, react_1.useState)(null);
const [autoRefresh, setAutoRefresh] = (0, react_1.useState)(false);
(0, ink_1.useInput)((input, key) => {
if (key.backspace || input === 'q') {
setCurrentScreen('dashboard');
}
else if (input === 'r') {
loadBalance();
}
else if (input === 'a') {
setAutoRefresh(!autoRefresh);
}
else if (input === 't') {
setCurrentScreen('transfer');
}
});
(0, react_1.useEffect)(() => {
loadBalance();
}, [keyManager, mock, node]);
// Auto-refresh every 30 seconds when enabled
(0, react_1.useEffect)(() => {
if (!autoRefresh)
return;
const interval = setInterval(() => {
loadBalance();
}, 30000);
return () => clearInterval(interval);
}, [autoRefresh, keyManager, mock, node]);
const loadBalance = async () => {
setIsLoading(true);
setError(null);
try {
const defaultAccount = keyManager.getDefaultAccount();
if (!defaultAccount) {
setError('No default account set. Please login or import keys first.');
setIsLoading(false);
return;
}
if (mock) {
setBalanceData({
account: defaultAccount,
hive: '1,234.567',
hbd: '89.123',
hp: '5,678.901',
savings_hive: '100.000',
savings_hbd: '250.500',
lastUpdated: new Date(),
nodeUrl: 'api.hive.blog (mock)',
lastBlock: 85234567
});
setIsLoading(false);
return;
}
const hiveClient = new hive_js_1.HiveClient(keyManager, node);
const balances = await hiveClient.getBalance(defaultAccount);
const nodeInfo = await hiveClient.getNodeInfo();
const formatBalance = (amount) => {
const num = parseFloat(amount);
return num.toLocaleString('en-US', { minimumFractionDigits: 3, maximumFractionDigits: 3 });
};
setBalanceData({
account: defaultAccount,
hive: formatBalance(balances.hive),
hbd: formatBalance(balances.hbd),
hp: formatBalance(balances.hp),
savings_hive: formatBalance(balances.savings_hive),
savings_hbd: formatBalance(balances.savings_hbd),
lastUpdated: new Date(),
nodeUrl: nodeInfo.url,
lastBlock: nodeInfo.lastBlockNum
});
setIsLoading(false);
}
catch (err) {
setError(err instanceof Error ? err.message : 'Failed to load balance');
setIsLoading(false);
}
};
if (isLoading) {
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 2, paddingY: 1 },
react_1.default.createElement(ink_1.Text, { color: "cyan" }, "\u280B Loading balance data...")));
}
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 2, paddingY: 1 },
react_1.default.createElement(ink_1.Box, { borderStyle: "single", borderColor: "cyan", paddingX: 1, marginBottom: 1 },
react_1.default.createElement(ink_1.Box, { flexGrow: 1 },
react_1.default.createElement(ink_1.Text, { color: "cyan", bold: true }, "\u2593 WALLET BALANCE \u2593"),
balanceData && (react_1.default.createElement(ink_1.Text, { color: "white" },
' ',
"@",
balanceData.account,
mock && react_1.default.createElement(ink_1.Text, { color: "yellow" }, " (MOCK)")))),
react_1.default.createElement(ink_1.Box, null,
react_1.default.createElement(ink_1.Text, { color: autoRefresh ? 'green' : 'gray' },
"Auto: ",
autoRefresh ? 'ON' : 'OFF'))),
error ? (react_1.default.createElement(ink_1.Box, { borderStyle: "single", borderColor: "red", paddingX: 1, flexGrow: 1 },
react_1.default.createElement(ink_1.Box, { flexDirection: "column", justifyContent: "center", alignItems: "center", flexGrow: 1 },
react_1.default.createElement(ink_1.Text, { color: "red" },
"\u2716 ",
error),
react_1.default.createElement(ink_1.Text, { color: "gray" }, "Press R to retry")))) : balanceData ? (react_1.default.createElement(ink_1.Box, { borderStyle: "single", borderColor: "magenta", paddingX: 1, flexGrow: 1 },
react_1.default.createElement(ink_1.Box, { flexDirection: "column", flexGrow: 1 },
react_1.default.createElement(ink_1.Text, { color: "magenta", bold: true }, "\u2593 MAIN BALANCES \u2593"),
react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginBottom: 2 },
react_1.default.createElement(ink_1.Text, { color: "white" },
react_1.default.createElement(ink_1.Text, { color: "cyan", bold: true }, "HIVE"),
" \u2192 ",
react_1.default.createElement(ink_1.Text, { color: "white" }, balanceData.hive),
" HIVE"),
react_1.default.createElement(ink_1.Text, { color: "white" },
react_1.default.createElement(ink_1.Text, { color: "magenta", bold: true }, "HBD"),
" \u2192 ",
react_1.default.createElement(ink_1.Text, { color: "white" }, balanceData.hbd),
" HBD"),
react_1.default.createElement(ink_1.Text, { color: "white" },
react_1.default.createElement(ink_1.Text, { color: "green", bold: true }, "HP"),
" \u2192 ",
react_1.default.createElement(ink_1.Text, { color: "white" }, balanceData.hp),
" HP")),
react_1.default.createElement(ink_1.Text, { color: "gray", bold: true }, "\u2593 SAVINGS \u2593"),
react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
react_1.default.createElement(ink_1.Text, { color: "white" },
react_1.default.createElement(ink_1.Text, { color: "cyan" }, "\u251C\u2500 HIVE"),
" \u2192 ",
react_1.default.createElement(ink_1.Text, { color: "white" }, balanceData.savings_hive),
" HIVE"),
react_1.default.createElement(ink_1.Text, { color: "white" },
react_1.default.createElement(ink_1.Text, { color: "magenta" }, "\u2514\u2500 HBD"),
" \u2192 ",
react_1.default.createElement(ink_1.Text, { color: "white" }, balanceData.savings_hbd),
" HBD"))))) : null,
balanceData && (react_1.default.createElement(ink_1.Box, { borderStyle: "single", borderColor: "yellow", paddingX: 1, marginTop: 1 },
react_1.default.createElement(ink_1.Box, { flexDirection: "column", flexGrow: 1 },
react_1.default.createElement(ink_1.Text, { color: "yellow", bold: true }, "\u2593 NETWORK STATUS \u2593"),
react_1.default.createElement(ink_1.Text, { color: "white" },
"Node: ",
react_1.default.createElement(ink_1.Text, { color: "cyan" }, balanceData.nodeUrl)),
react_1.default.createElement(ink_1.Text, { color: "white" },
"Block: ",
react_1.default.createElement(ink_1.Text, { color: "green" },
"#",
balanceData.lastBlock.toLocaleString())),
react_1.default.createElement(ink_1.Text, { color: "white" },
"Updated: ",
react_1.default.createElement(ink_1.Text, { color: "gray" }, balanceData.lastUpdated.toLocaleTimeString()))))),
react_1.default.createElement(ink_1.Box, { borderStyle: "single", borderColor: "green", paddingX: 1, marginTop: 1 },
react_1.default.createElement(ink_1.Text, { color: "green", bold: true }, "R: Refresh | A: Auto-refresh | T: Transfer | Q: Back to Dashboard"))));
}
//# sourceMappingURL=BalanceScreen.js.map