@aaronbassett/midnight-local-devnet 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/dashboard/html.js +483 -48
- package/dist/cli/dashboard/html.js.map +1 -1
- package/dist/cli/dashboard/lib/proof-server-api.js +5 -3
- package/dist/cli/dashboard/lib/proof-server-api.js.map +1 -1
- package/dist/cli/dashboard/server.js +119 -1
- package/dist/cli/dashboard/server.js.map +1 -1
- package/dist/cli/dashboard/state-collector.d.ts +8 -0
- package/dist/cli/dashboard/state-collector.js +14 -7
- package/dist/cli/dashboard/state-collector.js.map +1 -1
- package/dist/core/health.js +1 -1
- package/dist/core/health.js.map +1 -1
- package/package.json +1 -1
|
@@ -126,7 +126,6 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
126
126
|
border: 1px solid var(--mn-border);
|
|
127
127
|
border-radius: 12px;
|
|
128
128
|
position: relative;
|
|
129
|
-
overflow: hidden;
|
|
130
129
|
}
|
|
131
130
|
|
|
132
131
|
.header::before {
|
|
@@ -138,6 +137,8 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
138
137
|
height: 300px;
|
|
139
138
|
background: radial-gradient(circle, rgba(59, 59, 255, 0.12) 0%, transparent 70%);
|
|
140
139
|
pointer-events: none;
|
|
140
|
+
border-radius: inherit;
|
|
141
|
+
clip-path: inset(0 0 0 0 round 12px);
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
.header-left {
|
|
@@ -681,6 +682,95 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
681
682
|
margin-top: 20px;
|
|
682
683
|
}
|
|
683
684
|
|
|
685
|
+
.modal-textarea {
|
|
686
|
+
width: 100%;
|
|
687
|
+
padding: 10px 12px;
|
|
688
|
+
background: var(--mn-bg);
|
|
689
|
+
border: 1px solid var(--mn-border);
|
|
690
|
+
border-radius: 8px;
|
|
691
|
+
color: var(--mn-text);
|
|
692
|
+
font-size: 13px;
|
|
693
|
+
resize: vertical;
|
|
694
|
+
min-height: 60px;
|
|
695
|
+
box-sizing: border-box;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
.modal-textarea:focus {
|
|
699
|
+
outline: none;
|
|
700
|
+
border-color: var(--mn-accent);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.mnemonic-display {
|
|
704
|
+
padding: 14px;
|
|
705
|
+
background: var(--mn-bg);
|
|
706
|
+
border: 1px solid var(--mn-border);
|
|
707
|
+
border-radius: 8px;
|
|
708
|
+
font-family: 'JetBrains Mono', monospace;
|
|
709
|
+
font-size: 13px;
|
|
710
|
+
line-height: 1.8;
|
|
711
|
+
color: var(--mn-text);
|
|
712
|
+
word-spacing: 6px;
|
|
713
|
+
user-select: all;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
.mnemonic-warning {
|
|
717
|
+
display: flex;
|
|
718
|
+
align-items: flex-start;
|
|
719
|
+
gap: 8px;
|
|
720
|
+
padding: 10px 12px;
|
|
721
|
+
background: rgba(234, 179, 8, 0.08);
|
|
722
|
+
border: 1px solid rgba(234, 179, 8, 0.25);
|
|
723
|
+
border-radius: 8px;
|
|
724
|
+
font-size: 12px;
|
|
725
|
+
color: var(--mn-warning);
|
|
726
|
+
margin-bottom: 14px;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
.file-drop-zone {
|
|
730
|
+
position: relative;
|
|
731
|
+
border: 2px dashed var(--mn-border);
|
|
732
|
+
border-radius: 8px;
|
|
733
|
+
padding: 24px;
|
|
734
|
+
text-align: center;
|
|
735
|
+
cursor: pointer;
|
|
736
|
+
transition: border-color 0.15s, background 0.15s;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
.file-drop-zone:hover {
|
|
740
|
+
border-color: var(--mn-accent);
|
|
741
|
+
background: rgba(59, 59, 255, 0.04);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
.file-drop-zone input[type="file"] {
|
|
745
|
+
position: absolute;
|
|
746
|
+
inset: 0;
|
|
747
|
+
opacity: 0;
|
|
748
|
+
cursor: pointer;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
.file-preview-table {
|
|
752
|
+
width: 100%;
|
|
753
|
+
font-size: 12px;
|
|
754
|
+
border-collapse: collapse;
|
|
755
|
+
margin-top: 10px;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
.file-preview-table th,
|
|
759
|
+
.file-preview-table td {
|
|
760
|
+
text-align: left;
|
|
761
|
+
padding: 6px 8px;
|
|
762
|
+
border-bottom: 1px solid var(--mn-border);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.file-preview-table th {
|
|
766
|
+
color: var(--mn-text-muted);
|
|
767
|
+
font-weight: 500;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
.file-preview-table td.mono {
|
|
771
|
+
font-family: 'JetBrains Mono', monospace;
|
|
772
|
+
}
|
|
773
|
+
|
|
684
774
|
/* --- Wallet Selector Dropdown --- */
|
|
685
775
|
.wallet-selector {
|
|
686
776
|
display: flex;
|
|
@@ -1030,6 +1120,9 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1030
1120
|
plus: html\`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14"/><path d="M12 5v14"/></svg>\`,
|
|
1031
1121
|
x: html\`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>\`,
|
|
1032
1122
|
settings: html\`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>\`,
|
|
1123
|
+
refresh: html\`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/></svg>\`,
|
|
1124
|
+
upload: html\`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" x2="12" y1="3" y2="15"/></svg>\`,
|
|
1125
|
+
key: html\`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4"/><path d="m21 2-9.3 9.3"/><circle cx="7.5" cy="15.5" r="5.5"/></svg>\`,
|
|
1033
1126
|
};
|
|
1034
1127
|
|
|
1035
1128
|
// --- WebSocket URL (injected at generation time) ---
|
|
@@ -1093,6 +1186,7 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1093
1186
|
networkStatus: 'unknown',
|
|
1094
1187
|
walletSyncStatus: 'idle',
|
|
1095
1188
|
serverTime: '',
|
|
1189
|
+
walletBalances: {},
|
|
1096
1190
|
};
|
|
1097
1191
|
|
|
1098
1192
|
// --- Toast component ---
|
|
@@ -1351,8 +1445,31 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1351
1445
|
localStorage.setItem(WALLETS_KEY, JSON.stringify(wallets));
|
|
1352
1446
|
}
|
|
1353
1447
|
|
|
1448
|
+
// --- localStorage helpers for wallet mnemonics (keyed by address) ---
|
|
1449
|
+
const MNEMONICS_KEY = 'mn-mnemonics';
|
|
1450
|
+
|
|
1451
|
+
function loadMnemonics() {
|
|
1452
|
+
try {
|
|
1453
|
+
const raw = localStorage.getItem(MNEMONICS_KEY);
|
|
1454
|
+
if (raw) return JSON.parse(raw);
|
|
1455
|
+
} catch (e) { /* ignore */ }
|
|
1456
|
+
return {};
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1459
|
+
function saveMnemonic(address, mnemonic) {
|
|
1460
|
+
const all = loadMnemonics();
|
|
1461
|
+
all[address] = mnemonic;
|
|
1462
|
+
localStorage.setItem(MNEMONICS_KEY, JSON.stringify(all));
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1465
|
+
function removeMnemonic(address) {
|
|
1466
|
+
const all = loadMnemonics();
|
|
1467
|
+
delete all[address];
|
|
1468
|
+
localStorage.setItem(MNEMONICS_KEY, JSON.stringify(all));
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1354
1471
|
// --- ImportWalletModal ---
|
|
1355
|
-
function ImportWalletModal({ onClose, onImport, sendMessage, deriveResult }) {
|
|
1472
|
+
function ImportWalletModal({ onClose, onImport, sendMessage, deriveResult, deriveAccountsResult }) {
|
|
1356
1473
|
const [tab, setTab] = useState('mnemonic');
|
|
1357
1474
|
const [mnemonic, setMnemonic] = useState('');
|
|
1358
1475
|
const [address, setAddress] = useState('');
|
|
@@ -1360,6 +1477,12 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1360
1477
|
const [deriving, setDeriving] = useState(false);
|
|
1361
1478
|
const [derivedAddress, setDerivedAddress] = useState(null);
|
|
1362
1479
|
|
|
1480
|
+
// File import state
|
|
1481
|
+
const [fileAccounts, setFileAccounts] = useState(null);
|
|
1482
|
+
const [fileError, setFileError] = useState(null);
|
|
1483
|
+
const [derivingFile, setDerivingFile] = useState(false);
|
|
1484
|
+
const [fileResults, setFileResults] = useState(null);
|
|
1485
|
+
|
|
1363
1486
|
// Watch for derive-result coming in
|
|
1364
1487
|
useEffect(() => {
|
|
1365
1488
|
if (deriveResult && deriving) {
|
|
@@ -1368,6 +1491,14 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1368
1491
|
}
|
|
1369
1492
|
}, [deriveResult, deriving]);
|
|
1370
1493
|
|
|
1494
|
+
// Watch for derive-accounts-result
|
|
1495
|
+
useEffect(() => {
|
|
1496
|
+
if (deriveAccountsResult && derivingFile) {
|
|
1497
|
+
setFileResults(deriveAccountsResult);
|
|
1498
|
+
setDerivingFile(false);
|
|
1499
|
+
}
|
|
1500
|
+
}, [deriveAccountsResult, derivingFile]);
|
|
1501
|
+
|
|
1371
1502
|
const handleDerive = useCallback(() => {
|
|
1372
1503
|
if (!mnemonic.trim()) return;
|
|
1373
1504
|
setDeriving(true);
|
|
@@ -1375,6 +1506,63 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1375
1506
|
sendMessage({ type: 'command', action: 'derive-address', mnemonic: mnemonic.trim() });
|
|
1376
1507
|
}, [mnemonic, sendMessage]);
|
|
1377
1508
|
|
|
1509
|
+
const handleFileSelect = useCallback((e) => {
|
|
1510
|
+
const file = e.target.files[0];
|
|
1511
|
+
if (!file) return;
|
|
1512
|
+
setFileError(null);
|
|
1513
|
+
setFileResults(null);
|
|
1514
|
+
const reader = new FileReader();
|
|
1515
|
+
reader.onload = (ev) => {
|
|
1516
|
+
try {
|
|
1517
|
+
const data = JSON.parse(ev.target.result);
|
|
1518
|
+
if (!data.accounts || !Array.isArray(data.accounts)) {
|
|
1519
|
+
setFileError('Invalid format: expected { "accounts": [...] }');
|
|
1520
|
+
return;
|
|
1521
|
+
}
|
|
1522
|
+
const withMnemonic = data.accounts.filter(a => a.mnemonic);
|
|
1523
|
+
if (withMnemonic.length === 0) {
|
|
1524
|
+
setFileError('No accounts with mnemonic phrases found');
|
|
1525
|
+
return;
|
|
1526
|
+
}
|
|
1527
|
+
setFileAccounts(withMnemonic);
|
|
1528
|
+
} catch (err) {
|
|
1529
|
+
setFileError('Failed to parse JSON: ' + err.message);
|
|
1530
|
+
}
|
|
1531
|
+
};
|
|
1532
|
+
reader.readAsText(file);
|
|
1533
|
+
}, []);
|
|
1534
|
+
|
|
1535
|
+
const handleDeriveFile = useCallback(() => {
|
|
1536
|
+
if (!fileAccounts) return;
|
|
1537
|
+
setDerivingFile(true);
|
|
1538
|
+
setFileResults(null);
|
|
1539
|
+
sendMessage({
|
|
1540
|
+
type: 'command',
|
|
1541
|
+
action: 'derive-accounts',
|
|
1542
|
+
accounts: fileAccounts.map(a => ({ name: a.name, mnemonic: a.mnemonic })),
|
|
1543
|
+
});
|
|
1544
|
+
}, [fileAccounts, sendMessage]);
|
|
1545
|
+
|
|
1546
|
+
const handleImportFile = useCallback(() => {
|
|
1547
|
+
if (!fileResults || !fileAccounts) return;
|
|
1548
|
+
for (let i = 0; i < fileResults.length; i++) {
|
|
1549
|
+
const account = fileResults[i];
|
|
1550
|
+
onImport({
|
|
1551
|
+
id: crypto.randomUUID(),
|
|
1552
|
+
publicKey: account.address,
|
|
1553
|
+
displayName: account.name || 'Imported Wallet',
|
|
1554
|
+
hasMnemonic: true,
|
|
1555
|
+
});
|
|
1556
|
+
// Store mnemonic and register with server for balance tracking
|
|
1557
|
+
const mnemonicStr = fileAccounts[i] && fileAccounts[i].mnemonic;
|
|
1558
|
+
if (mnemonicStr) {
|
|
1559
|
+
saveMnemonic(account.address, mnemonicStr);
|
|
1560
|
+
sendMessage({ type: 'command', action: 'register-wallet', mnemonic: mnemonicStr });
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
onClose();
|
|
1564
|
+
}, [fileResults, fileAccounts, onImport, onClose, sendMessage]);
|
|
1565
|
+
|
|
1378
1566
|
const handleImport = useCallback(() => {
|
|
1379
1567
|
if (tab === 'mnemonic') {
|
|
1380
1568
|
if (!derivedAddress) return;
|
|
@@ -1384,6 +1572,9 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1384
1572
|
displayName: displayName.trim() || 'Imported Wallet',
|
|
1385
1573
|
hasMnemonic: true,
|
|
1386
1574
|
});
|
|
1575
|
+
// Store mnemonic locally and register with server for balance tracking
|
|
1576
|
+
saveMnemonic(derivedAddress, mnemonic.trim());
|
|
1577
|
+
sendMessage({ type: 'command', action: 'register-wallet', mnemonic: mnemonic.trim() });
|
|
1387
1578
|
} else {
|
|
1388
1579
|
if (!address.trim()) return;
|
|
1389
1580
|
onImport({
|
|
@@ -1393,7 +1584,7 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1393
1584
|
});
|
|
1394
1585
|
}
|
|
1395
1586
|
onClose();
|
|
1396
|
-
}, [tab, derivedAddress, address, displayName, onImport, onClose]);
|
|
1587
|
+
}, [tab, derivedAddress, address, displayName, mnemonic, onImport, onClose, sendMessage]);
|
|
1397
1588
|
|
|
1398
1589
|
return html\`
|
|
1399
1590
|
<div class="modal-overlay" onClick=\${(e) => { if (e.target === e.currentTarget) onClose(); }}>
|
|
@@ -1403,10 +1594,73 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1403
1594
|
<button class="modal-close" onClick=\${onClose}>\${icons.x}</button>
|
|
1404
1595
|
</div>
|
|
1405
1596
|
<div class="modal-tabs">
|
|
1597
|
+
<button class="modal-tab \${tab === 'file' ? 'active' : ''}" onClick=\${() => setTab('file')}>File</button>
|
|
1406
1598
|
<button class="modal-tab \${tab === 'mnemonic' ? 'active' : ''}" onClick=\${() => { setTab('mnemonic'); setDerivedAddress(null); }}>Mnemonic</button>
|
|
1407
1599
|
<button class="modal-tab \${tab === 'address' ? 'active' : ''}" onClick=\${() => setTab('address')}>Address</button>
|
|
1408
1600
|
</div>
|
|
1409
|
-
\${tab === '
|
|
1601
|
+
\${tab === 'file' ? html\`
|
|
1602
|
+
<div class="modal-field">
|
|
1603
|
+
<label class="modal-label">accounts.json File</label>
|
|
1604
|
+
<div class="file-drop-zone">
|
|
1605
|
+
<input type="file" accept=".json,application/json" onChange=\${handleFileSelect} />
|
|
1606
|
+
<div style="color: var(--mn-text-muted); font-size: 13px;">
|
|
1607
|
+
\${icons.upload} Click to select accounts.json
|
|
1608
|
+
</div>
|
|
1609
|
+
</div>
|
|
1610
|
+
</div>
|
|
1611
|
+
\${fileError ? html\`
|
|
1612
|
+
<div style="color: var(--mn-error); font-size: 12px; margin-bottom: 10px;">\${fileError}</div>
|
|
1613
|
+
\` : null}
|
|
1614
|
+
\${fileAccounts && !fileResults ? html\`
|
|
1615
|
+
<div style="margin-bottom: 14px;">
|
|
1616
|
+
<div style="font-size: 12px; color: var(--mn-text-muted); margin-bottom: 8px;">
|
|
1617
|
+
Found \${fileAccounts.length} account\${fileAccounts.length !== 1 ? 's' : ''} with mnemonics
|
|
1618
|
+
</div>
|
|
1619
|
+
<table class="file-preview-table">
|
|
1620
|
+
<thead><tr><th>Name</th><th>Mnemonic</th></tr></thead>
|
|
1621
|
+
<tbody>
|
|
1622
|
+
\${fileAccounts.map(a => html\`
|
|
1623
|
+
<tr>
|
|
1624
|
+
<td>\${a.name}</td>
|
|
1625
|
+
<td class="mono" style="color: var(--mn-text-muted);">\${a.mnemonic.split(' ').slice(0, 3).join(' ')}...</td>
|
|
1626
|
+
</tr>
|
|
1627
|
+
\`)}
|
|
1628
|
+
</tbody>
|
|
1629
|
+
</table>
|
|
1630
|
+
<div style="margin-top: 12px;">
|
|
1631
|
+
<button class="btn btn-primary" onClick=\${handleDeriveFile} disabled=\${derivingFile}>
|
|
1632
|
+
\${derivingFile ? html\`<span class="btn-spinner"></span> Deriving...
|
|
1633
|
+
\` : 'Derive Addresses'}
|
|
1634
|
+
</button>
|
|
1635
|
+
</div>
|
|
1636
|
+
</div>
|
|
1637
|
+
\` : null}
|
|
1638
|
+
\${fileResults ? html\`
|
|
1639
|
+
<div style="margin-bottom: 14px;">
|
|
1640
|
+
<div style="font-size: 12px; color: var(--mn-success); margin-bottom: 8px;">
|
|
1641
|
+
Derived \${fileResults.length} address\${fileResults.length !== 1 ? 'es' : ''}
|
|
1642
|
+
</div>
|
|
1643
|
+
<table class="file-preview-table">
|
|
1644
|
+
<thead><tr><th>Name</th><th>Address</th></tr></thead>
|
|
1645
|
+
<tbody>
|
|
1646
|
+
\${fileResults.map(a => html\`
|
|
1647
|
+
<tr>
|
|
1648
|
+
<td>\${a.name}</td>
|
|
1649
|
+
<td class="mono">\${truncateAddress(a.address)}</td>
|
|
1650
|
+
</tr>
|
|
1651
|
+
\`)}
|
|
1652
|
+
</tbody>
|
|
1653
|
+
</table>
|
|
1654
|
+
</div>
|
|
1655
|
+
\` : null}
|
|
1656
|
+
<div class="modal-actions">
|
|
1657
|
+
<button class="btn" onClick=\${onClose}>Cancel</button>
|
|
1658
|
+
<button class="btn btn-primary" onClick=\${handleImportFile}
|
|
1659
|
+
disabled=\${!fileResults}>
|
|
1660
|
+
Import \${fileResults ? fileResults.length : ''} Wallet\${fileResults && fileResults.length !== 1 ? 's' : ''}
|
|
1661
|
+
</button>
|
|
1662
|
+
</div>
|
|
1663
|
+
\` : tab === 'mnemonic' ? html\`
|
|
1410
1664
|
<div class="modal-field">
|
|
1411
1665
|
<label class="modal-label">Mnemonic Phrase</label>
|
|
1412
1666
|
<input class="modal-input mono" type="text" placeholder="Enter mnemonic words..."
|
|
@@ -1422,32 +1676,133 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1422
1676
|
</div>
|
|
1423
1677
|
\` : null}
|
|
1424
1678
|
</div>
|
|
1679
|
+
<div class="modal-field">
|
|
1680
|
+
<label class="modal-label">Display Name (optional)</label>
|
|
1681
|
+
<input class="modal-input" type="text" placeholder="e.g. My Wallet"
|
|
1682
|
+
value=\${displayName} onInput=\${e => setDisplayName(e.target.value)} />
|
|
1683
|
+
</div>
|
|
1684
|
+
<div class="modal-actions">
|
|
1685
|
+
<button class="btn" onClick=\${onClose}>Cancel</button>
|
|
1686
|
+
<button class="btn btn-primary" onClick=\${handleImport}
|
|
1687
|
+
disabled=\${!derivedAddress}>
|
|
1688
|
+
Import
|
|
1689
|
+
</button>
|
|
1690
|
+
</div>
|
|
1425
1691
|
\` : html\`
|
|
1426
1692
|
<div class="modal-field">
|
|
1427
1693
|
<label class="modal-label">Public Key / Address</label>
|
|
1428
1694
|
<input class="modal-input mono" type="text" placeholder="Paste public key..."
|
|
1429
1695
|
value=\${address} onInput=\${e => setAddress(e.target.value)} />
|
|
1430
1696
|
</div>
|
|
1697
|
+
<div class="modal-field">
|
|
1698
|
+
<label class="modal-label">Display Name (optional)</label>
|
|
1699
|
+
<input class="modal-input" type="text" placeholder="e.g. My Wallet"
|
|
1700
|
+
value=\${displayName} onInput=\${e => setDisplayName(e.target.value)} />
|
|
1701
|
+
</div>
|
|
1702
|
+
<div class="modal-actions">
|
|
1703
|
+
<button class="btn" onClick=\${onClose}>Cancel</button>
|
|
1704
|
+
<button class="btn btn-primary" onClick=\${handleImport}
|
|
1705
|
+
disabled=\${!address.trim()}>
|
|
1706
|
+
Import
|
|
1707
|
+
</button>
|
|
1708
|
+
</div>
|
|
1431
1709
|
\`}
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1710
|
+
</div>
|
|
1711
|
+
</div>
|
|
1712
|
+
\`;
|
|
1713
|
+
}
|
|
1714
|
+
|
|
1715
|
+
// --- GenerateWalletModal ---
|
|
1716
|
+
function GenerateWalletModal({ onClose, onImport, sendMessage, generateResult }) {
|
|
1717
|
+
const [generating, setGenerating] = useState(false);
|
|
1718
|
+
const [result, setResult] = useState(null);
|
|
1719
|
+
const [copied, setCopied] = useState(false);
|
|
1720
|
+
|
|
1721
|
+
useEffect(() => {
|
|
1722
|
+
if (generateResult && generating) {
|
|
1723
|
+
setResult(generateResult);
|
|
1724
|
+
setGenerating(false);
|
|
1725
|
+
}
|
|
1726
|
+
}, [generateResult, generating]);
|
|
1727
|
+
|
|
1728
|
+
const handleGenerate = useCallback(() => {
|
|
1729
|
+
setGenerating(true);
|
|
1730
|
+
setResult(null);
|
|
1731
|
+
setCopied(false);
|
|
1732
|
+
sendMessage({ type: 'command', action: 'generate-wallet' });
|
|
1733
|
+
}, [sendMessage]);
|
|
1734
|
+
|
|
1735
|
+
// Generate on mount
|
|
1736
|
+
useEffect(() => { handleGenerate(); }, []);
|
|
1737
|
+
|
|
1738
|
+
const handleCopy = useCallback(() => {
|
|
1739
|
+
if (!result) return;
|
|
1740
|
+
navigator.clipboard.writeText(result.mnemonic).then(() => {
|
|
1741
|
+
setCopied(true);
|
|
1742
|
+
setTimeout(() => setCopied(false), 2000);
|
|
1743
|
+
}).catch(() => {});
|
|
1744
|
+
}, [result]);
|
|
1745
|
+
|
|
1746
|
+
const handleAdd = useCallback(() => {
|
|
1747
|
+
if (!result) return;
|
|
1748
|
+
onImport({
|
|
1749
|
+
id: crypto.randomUUID(),
|
|
1750
|
+
publicKey: result.address,
|
|
1751
|
+
displayName: 'Generated Wallet',
|
|
1752
|
+
hasMnemonic: true,
|
|
1753
|
+
});
|
|
1754
|
+
// Store mnemonic locally and register with server for balance tracking
|
|
1755
|
+
saveMnemonic(result.address, result.mnemonic);
|
|
1756
|
+
sendMessage({ type: 'command', action: 'register-wallet', mnemonic: result.mnemonic });
|
|
1757
|
+
onClose();
|
|
1758
|
+
}, [result, onImport, onClose, sendMessage]);
|
|
1759
|
+
|
|
1760
|
+
return html\`
|
|
1761
|
+
<div class="modal-overlay" onClick=\${(e) => { if (e.target === e.currentTarget) onClose(); }}>
|
|
1762
|
+
<div class="modal-dialog">
|
|
1763
|
+
<div class="modal-header">
|
|
1764
|
+
<span class="modal-title">Generate Wallet</span>
|
|
1765
|
+
<button class="modal-close" onClick=\${onClose}>\${icons.x}</button>
|
|
1443
1766
|
</div>
|
|
1767
|
+
\${generating ? html\`
|
|
1768
|
+
<div style="text-align: center; padding: 24px 0;">
|
|
1769
|
+
<span class="btn-spinner" style="width: 20px; height: 20px;"></span>
|
|
1770
|
+
<div style="margin-top: 10px; color: var(--mn-text-muted); font-size: 13px;">Generating wallet...</div>
|
|
1771
|
+
</div>
|
|
1772
|
+
\` : result ? html\`
|
|
1773
|
+
<div class="mnemonic-warning">
|
|
1774
|
+
<span style="font-size: 16px; flex-shrink: 0;">!</span>
|
|
1775
|
+
<span>Save this mnemonic phrase securely. It will not be shown again and cannot be recovered.</span>
|
|
1776
|
+
</div>
|
|
1777
|
+
<div class="modal-field">
|
|
1778
|
+
<label class="modal-label">Mnemonic Phrase</label>
|
|
1779
|
+
<div class="mnemonic-display">\${result.mnemonic}</div>
|
|
1780
|
+
</div>
|
|
1781
|
+
<div class="modal-field">
|
|
1782
|
+
<label class="modal-label">Derived Address</label>
|
|
1783
|
+
<div style="font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--mn-success); word-break: break-all;">
|
|
1784
|
+
\${result.address}
|
|
1785
|
+
</div>
|
|
1786
|
+
</div>
|
|
1787
|
+
<div class="modal-actions" style="justify-content: space-between;">
|
|
1788
|
+
<div style="display: flex; gap: 8px;">
|
|
1789
|
+
<button class="btn" onClick=\${handleCopy}>
|
|
1790
|
+
\${icons.copy} \${copied ? 'Copied!' : 'Copy Mnemonic'}
|
|
1791
|
+
</button>
|
|
1792
|
+
<button class="btn" onClick=\${handleGenerate}>
|
|
1793
|
+
\${icons.refresh} New
|
|
1794
|
+
</button>
|
|
1795
|
+
</div>
|
|
1796
|
+
<button class="btn btn-primary" onClick=\${handleAdd}>Add to Wallets</button>
|
|
1797
|
+
</div>
|
|
1798
|
+
\` : null}
|
|
1444
1799
|
</div>
|
|
1445
1800
|
</div>
|
|
1446
1801
|
\`;
|
|
1447
1802
|
}
|
|
1448
1803
|
|
|
1449
1804
|
// --- WalletCard ---
|
|
1450
|
-
function WalletCard({ wallet, walletSyncStatus, sendMessage, onOpenImportModal, importHandlerRef }) {
|
|
1805
|
+
function WalletCard({ wallet, walletSyncStatus, walletBalances, sendMessage, onOpenImportModal, onOpenGenerateModal, importHandlerRef }) {
|
|
1451
1806
|
// Load wallets from localStorage, ensuring master wallet is always first
|
|
1452
1807
|
const [wallets, setWallets] = useState(() => {
|
|
1453
1808
|
const stored = loadWallets();
|
|
@@ -1461,6 +1816,17 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1461
1816
|
return stored;
|
|
1462
1817
|
});
|
|
1463
1818
|
|
|
1819
|
+
// Re-register mnemonic wallets with server on mount (e.g. after reconnect)
|
|
1820
|
+
const registeredRef = useRef(false);
|
|
1821
|
+
useEffect(() => {
|
|
1822
|
+
if (registeredRef.current) return;
|
|
1823
|
+
registeredRef.current = true;
|
|
1824
|
+
const mnemonics = loadMnemonics();
|
|
1825
|
+
for (const [, mn] of Object.entries(mnemonics)) {
|
|
1826
|
+
sendMessage({ type: 'command', action: 'register-wallet', mnemonic: mn });
|
|
1827
|
+
}
|
|
1828
|
+
}, [sendMessage]);
|
|
1829
|
+
|
|
1464
1830
|
const [selectedId, setSelectedId] = useState('master');
|
|
1465
1831
|
const [editingId, setEditingId] = useState(null);
|
|
1466
1832
|
const [editName, setEditName] = useState('');
|
|
@@ -1514,14 +1880,20 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1514
1880
|
}, [editingId, editName]);
|
|
1515
1881
|
|
|
1516
1882
|
const handleDelete = useCallback((id) => {
|
|
1883
|
+
const toDelete = wallets.find(w => w.id === id);
|
|
1517
1884
|
setWallets(prev => {
|
|
1518
1885
|
const updated = prev.filter(w => w.id !== id);
|
|
1519
1886
|
saveWallets(updated);
|
|
1520
1887
|
return updated;
|
|
1521
1888
|
});
|
|
1889
|
+
// Unregister wallet context and remove stored mnemonic
|
|
1890
|
+
if (toDelete && toDelete.publicKey) {
|
|
1891
|
+
removeMnemonic(toDelete.publicKey);
|
|
1892
|
+
sendMessage({ type: 'command', action: 'unregister-wallet', address: toDelete.publicKey });
|
|
1893
|
+
}
|
|
1522
1894
|
setDeletingId(null);
|
|
1523
1895
|
if (selectedId === id) setSelectedId('master');
|
|
1524
|
-
}, [selectedId]);
|
|
1896
|
+
}, [selectedId, wallets, sendMessage]);
|
|
1525
1897
|
|
|
1526
1898
|
const handleCopy = useCallback((text) => {
|
|
1527
1899
|
navigator.clipboard.writeText(text).then(() => {
|
|
@@ -1574,9 +1946,18 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1574
1946
|
</button>
|
|
1575
1947
|
\` : null}
|
|
1576
1948
|
</div>
|
|
1577
|
-
<
|
|
1578
|
-
|
|
1579
|
-
|
|
1949
|
+
<div style="display: flex; gap: 6px;">
|
|
1950
|
+
<button class="btn" onClick=\${() => sendMessage({ type: 'command', action: 'sync-wallet' })}
|
|
1951
|
+
disabled=\${walletSyncStatus === 'syncing'} title="Sync wallet balances">
|
|
1952
|
+
\${icons.refresh} Sync
|
|
1953
|
+
</button>
|
|
1954
|
+
<button class="btn" onClick=\${onOpenGenerateModal} title="Generate new wallet">
|
|
1955
|
+
\${icons.key} Generate
|
|
1956
|
+
</button>
|
|
1957
|
+
<button class="btn" onClick=\${onOpenImportModal} title="Import wallet">
|
|
1958
|
+
\${icons.plus} Import
|
|
1959
|
+
</button>
|
|
1960
|
+
</div>
|
|
1580
1961
|
</div>
|
|
1581
1962
|
|
|
1582
1963
|
\${deletingId ? html\`
|
|
@@ -1601,33 +1982,71 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1601
1982
|
\` : null}
|
|
1602
1983
|
</div>
|
|
1603
1984
|
</div>
|
|
1604
|
-
\${
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1985
|
+
\${(() => {
|
|
1986
|
+
if (isMaster && walletSyncStatus === 'syncing') {
|
|
1987
|
+
return html\`
|
|
1988
|
+
<div class="balance-item" style="grid-column: 1 / -1; text-align: center;">
|
|
1989
|
+
<div class="sync-indicator" style="justify-content: center;">
|
|
1990
|
+
<span class="sync-spinner"></span>
|
|
1991
|
+
Syncing balances...
|
|
1992
|
+
</div>
|
|
1993
|
+
</div>
|
|
1994
|
+
\`;
|
|
1995
|
+
}
|
|
1996
|
+
if (showBalances) {
|
|
1997
|
+
return html\`
|
|
1998
|
+
<div class="balance-item">
|
|
1999
|
+
<div class="balance-value">\${formatBalance(wallet.unshielded)}</div>
|
|
2000
|
+
<div class="balance-label">NIGHT (Unshielded)</div>
|
|
2001
|
+
</div>
|
|
2002
|
+
<div class="balance-item">
|
|
2003
|
+
<div class="balance-value">\${formatBalance(wallet.shielded)}</div>
|
|
2004
|
+
<div class="balance-label">NIGHT (Shielded)</div>
|
|
2005
|
+
</div>
|
|
2006
|
+
<div class="balance-item">
|
|
2007
|
+
<div class="balance-value">\${formatBalance(wallet.dust)}</div>
|
|
2008
|
+
<div class="balance-label">DUST</div>
|
|
2009
|
+
</div>
|
|
2010
|
+
\`;
|
|
2011
|
+
}
|
|
2012
|
+
if (!isMaster && selectedWallet) {
|
|
2013
|
+
const wb = walletBalances && walletBalances[selectedWallet.publicKey];
|
|
2014
|
+
if (wb && wb.connected) {
|
|
2015
|
+
return html\`
|
|
2016
|
+
<div class="balance-item">
|
|
2017
|
+
<div class="balance-value">\${formatBalance(wb.unshielded)}</div>
|
|
2018
|
+
<div class="balance-label">NIGHT (Unshielded)</div>
|
|
2019
|
+
</div>
|
|
2020
|
+
<div class="balance-item">
|
|
2021
|
+
<div class="balance-value">\${formatBalance(wb.shielded)}</div>
|
|
2022
|
+
<div class="balance-label">NIGHT (Shielded)</div>
|
|
2023
|
+
</div>
|
|
2024
|
+
<div class="balance-item">
|
|
2025
|
+
<div class="balance-value">\${formatBalance(wb.dust)}</div>
|
|
2026
|
+
<div class="balance-label">DUST</div>
|
|
2027
|
+
</div>
|
|
2028
|
+
\`;
|
|
2029
|
+
}
|
|
2030
|
+
if (wb && !wb.connected) {
|
|
2031
|
+
return html\`
|
|
2032
|
+
<div class="balance-item" style="grid-column: 1 / -1; text-align: center;">
|
|
2033
|
+
<div class="sync-indicator" style="justify-content: center;">
|
|
2034
|
+
<span class="sync-spinner"></span>
|
|
2035
|
+
Initializing wallet...
|
|
2036
|
+
</div>
|
|
2037
|
+
</div>
|
|
2038
|
+
\`;
|
|
2039
|
+
}
|
|
2040
|
+
return html\`
|
|
2041
|
+
<div class="balance-item" style="grid-column: 1 / -1; text-align: center;">
|
|
2042
|
+
<div style="font-size: 13px; color: var(--mn-text-muted); padding: 8px 0;">
|
|
2043
|
+
Address only — balances not available
|
|
2044
|
+
</div>
|
|
2045
|
+
</div>
|
|
2046
|
+
\`;
|
|
2047
|
+
}
|
|
2048
|
+
return null;
|
|
2049
|
+
})()}
|
|
1631
2050
|
</div>
|
|
1632
2051
|
</div>
|
|
1633
2052
|
|
|
@@ -1787,7 +2206,10 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1787
2206
|
}, []);
|
|
1788
2207
|
|
|
1789
2208
|
const [deriveResult, setDeriveResult] = useState(null);
|
|
2209
|
+
const [deriveAccountsResult, setDeriveAccountsResult] = useState(null);
|
|
2210
|
+
const [generateResult, setGenerateResult] = useState(null);
|
|
1790
2211
|
const [showImportModal, setShowImportModal] = useState(false);
|
|
2212
|
+
const [showGenerateModal, setShowGenerateModal] = useState(false);
|
|
1791
2213
|
const importHandlerRef = useRef(null);
|
|
1792
2214
|
|
|
1793
2215
|
useEffect(() => {
|
|
@@ -1811,6 +2233,10 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1811
2233
|
addToast(msg.message || (msg.success ? 'Command succeeded' : 'Command failed'), msg.success ? 'success' : 'error');
|
|
1812
2234
|
} else if (msg.type === 'derive-result') {
|
|
1813
2235
|
setDeriveResult(msg.address || null);
|
|
2236
|
+
} else if (msg.type === 'derive-accounts-result') {
|
|
2237
|
+
setDeriveAccountsResult(msg.accounts || null);
|
|
2238
|
+
} else if (msg.type === 'generate-result') {
|
|
2239
|
+
setGenerateResult(msg);
|
|
1814
2240
|
}
|
|
1815
2241
|
} catch (e) {
|
|
1816
2242
|
// ignore malformed messages
|
|
@@ -1853,7 +2279,7 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1853
2279
|
<\${ProofServerCard} proofServer=\${state.proofServer} health=\${state.health.proofServer} serverTime=\${state.serverTime} />
|
|
1854
2280
|
</div>
|
|
1855
2281
|
<div class="cards-grid">
|
|
1856
|
-
<\${WalletCard} wallet=\${state.wallet} walletSyncStatus=\${state.walletSyncStatus} sendMessage=\${sendMessage} onOpenImportModal=\${() => { setDeriveResult(null); setShowImportModal(true); }} importHandlerRef=\${importHandlerRef} />
|
|
2282
|
+
<\${WalletCard} wallet=\${state.wallet} walletSyncStatus=\${state.walletSyncStatus} walletBalances=\${state.walletBalances} sendMessage=\${sendMessage} onOpenImportModal=\${() => { setDeriveResult(null); setDeriveAccountsResult(null); setShowImportModal(true); }} onOpenGenerateModal=\${() => { setGenerateResult(null); setShowGenerateModal(true); }} importHandlerRef=\${importHandlerRef} />
|
|
1857
2283
|
</div>
|
|
1858
2284
|
<div class="cards-grid">
|
|
1859
2285
|
<\${ResponseChart} health=\${state.health} />
|
|
@@ -1865,6 +2291,15 @@ export function generateDashboardHtml({ wsUrl }) {
|
|
|
1865
2291
|
onImport=\${(w) => importHandlerRef.current && importHandlerRef.current(w)}
|
|
1866
2292
|
sendMessage=\${sendMessage}
|
|
1867
2293
|
deriveResult=\${deriveResult}
|
|
2294
|
+
deriveAccountsResult=\${deriveAccountsResult}
|
|
2295
|
+
/>
|
|
2296
|
+
\` : null}
|
|
2297
|
+
\${showGenerateModal ? html\`
|
|
2298
|
+
<\${GenerateWalletModal}
|
|
2299
|
+
onClose=\${() => setShowGenerateModal(false)}
|
|
2300
|
+
onImport=\${(w) => importHandlerRef.current && importHandlerRef.current(w)}
|
|
2301
|
+
sendMessage=\${sendMessage}
|
|
2302
|
+
generateResult=\${generateResult}
|
|
1868
2303
|
/>
|
|
1869
2304
|
\` : null}
|
|
1870
2305
|
\`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/cli/dashboard/html.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACzB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EAAE,KAAK,EAAqB;IAChE,OAAO
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/cli/dashboard/html.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACzB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EAAE,KAAK,EAAqB;IAChE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA8lCY,gBAAgB,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgqCpC,CAAC;AACT,CAAC"}
|
|
@@ -35,10 +35,12 @@ export async function fetchProofServerReady(baseUrl) {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
export async function fetchProofVersions(baseUrl) {
|
|
38
|
-
const text = await fetchText(`${baseUrl}/proof-versions`);
|
|
39
|
-
if (!text)
|
|
40
|
-
return null;
|
|
41
38
|
try {
|
|
39
|
+
const response = await fetch(`${baseUrl}/proof-versions`, { signal: AbortSignal.timeout(5000) });
|
|
40
|
+
// Accept any response that has a body (server may return non-200)
|
|
41
|
+
const text = await response.text();
|
|
42
|
+
if (!text)
|
|
43
|
+
return null;
|
|
42
44
|
return JSON.parse(text);
|
|
43
45
|
}
|
|
44
46
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof-server-api.js","sourceRoot":"","sources":["../../../../src/cli/dashboard/lib/proof-server-api.ts"],"names":[],"mappings":"AAaA,KAAK,UAAU,SAAS,CAAI,GAAW;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAO,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,SAAS,CAAoB,GAAG,OAAO,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAe;IAC3D,OAAO,SAAS,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxF,kCAAkC;QAClC,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAsB,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,MAAM,
|
|
1
|
+
{"version":3,"file":"proof-server-api.js","sourceRoot":"","sources":["../../../../src/cli/dashboard/lib/proof-server-api.ts"],"names":[],"mappings":"AAaA,KAAK,UAAU,SAAS,CAAI,GAAW;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAO,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,SAAS,CAAoB,GAAG,OAAO,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAe;IAC3D,OAAO,SAAS,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxF,kCAAkC;QAClC,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAsB,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,iBAAiB,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,kEAAkE;QAClE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { Hono } from 'hono';
|
|
|
2
2
|
import { WebSocketServer } from 'ws';
|
|
3
3
|
import { StateCollector } from './state-collector.js';
|
|
4
4
|
import { generateDashboardHtml } from './html.js';
|
|
5
|
-
import { getWalletBalances, getWalletAddress, deriveAddressFromMnemonic } from '../../core/wallet.js';
|
|
5
|
+
import { getWalletBalances, getWalletAddress, deriveAddressFromMnemonic, generateNewMnemonic, initWalletFromMnemonic, closeWallet } from '../../core/wallet.js';
|
|
6
6
|
export function createDashboardApp(opts) {
|
|
7
7
|
const { config, manager, port } = opts;
|
|
8
8
|
const app = new Hono();
|
|
@@ -24,6 +24,9 @@ export function createDashboardApp(opts) {
|
|
|
24
24
|
let walletSyncStatus = 'idle';
|
|
25
25
|
let walletSyncPromise = null;
|
|
26
26
|
let masterWalletAddress = null;
|
|
27
|
+
let lastStateJson = null;
|
|
28
|
+
// ---------- Registered wallet contexts (non-master wallets) ----------
|
|
29
|
+
const registeredWallets = new Map();
|
|
27
30
|
// ---------- GET / — serve dashboard HTML ----------
|
|
28
31
|
app.get('/', (c) => {
|
|
29
32
|
const html = generateDashboardHtml({ wsUrl: `ws://localhost:${port}/ws` });
|
|
@@ -34,6 +37,10 @@ export function createDashboardApp(opts) {
|
|
|
34
37
|
const wss = new WebSocketServer({ server, path: '/ws' });
|
|
35
38
|
wss.on('connection', (ws) => {
|
|
36
39
|
clients.add(ws);
|
|
40
|
+
// Send current state immediately so the client doesn't wait for the next tick
|
|
41
|
+
if (lastStateJson && ws.readyState === ws.OPEN) {
|
|
42
|
+
ws.send(lastStateJson);
|
|
43
|
+
}
|
|
37
44
|
ws.on('close', () => {
|
|
38
45
|
clients.delete(ws);
|
|
39
46
|
});
|
|
@@ -85,6 +92,87 @@ export function createDashboardApp(opts) {
|
|
|
85
92
|
}
|
|
86
93
|
return;
|
|
87
94
|
}
|
|
95
|
+
else if (action === 'generate-wallet') {
|
|
96
|
+
try {
|
|
97
|
+
const mnemonic = generateNewMnemonic();
|
|
98
|
+
const address = deriveAddressFromMnemonic(mnemonic, config.networkId);
|
|
99
|
+
sendToClient(ws, { type: 'generate-result', mnemonic, address });
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
103
|
+
sendToClient(ws, { type: 'result', action, success: false, error });
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
else if (action === 'derive-accounts') {
|
|
108
|
+
const accounts = msg.accounts;
|
|
109
|
+
if (!accounts || !Array.isArray(accounts)) {
|
|
110
|
+
sendToClient(ws, { type: 'result', action, success: false, error: 'Missing accounts array' });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const results = accounts.map((a) => ({
|
|
115
|
+
name: a.name,
|
|
116
|
+
address: deriveAddressFromMnemonic(a.mnemonic, config.networkId),
|
|
117
|
+
hasMnemonic: true,
|
|
118
|
+
}));
|
|
119
|
+
sendToClient(ws, { type: 'derive-accounts-result', accounts: results });
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
123
|
+
sendToClient(ws, { type: 'result', action, success: false, error });
|
|
124
|
+
}
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
else if (action === 'register-wallet') {
|
|
128
|
+
const mnemonic = msg.mnemonic;
|
|
129
|
+
if (!mnemonic) {
|
|
130
|
+
sendToClient(ws, { type: 'result', action, success: false, error: 'Missing mnemonic' });
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const address = deriveAddressFromMnemonic(mnemonic, config.networkId);
|
|
135
|
+
// Deduplicate by address
|
|
136
|
+
if (!registeredWallets.has(address)) {
|
|
137
|
+
registeredWallets.set(address, { mnemonic, ctx: null, initializing: true });
|
|
138
|
+
// Initialize wallet context in background
|
|
139
|
+
initWalletFromMnemonic(mnemonic, config).then((ctx) => {
|
|
140
|
+
const entry = registeredWallets.get(address);
|
|
141
|
+
if (entry) {
|
|
142
|
+
entry.ctx = ctx;
|
|
143
|
+
entry.initializing = false;
|
|
144
|
+
}
|
|
145
|
+
}).catch(() => {
|
|
146
|
+
const entry = registeredWallets.get(address);
|
|
147
|
+
if (entry) {
|
|
148
|
+
entry.initializing = false;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
sendToClient(ws, { type: 'register-result', address, success: true });
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
156
|
+
sendToClient(ws, { type: 'result', action, success: false, error });
|
|
157
|
+
}
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
else if (action === 'unregister-wallet') {
|
|
161
|
+
const address = msg.address;
|
|
162
|
+
if (!address) {
|
|
163
|
+
sendToClient(ws, { type: 'result', action, success: false, error: 'Missing address' });
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const entry = registeredWallets.get(address);
|
|
167
|
+
if (entry) {
|
|
168
|
+
if (entry.ctx) {
|
|
169
|
+
closeWallet(entry.ctx).catch(() => { });
|
|
170
|
+
}
|
|
171
|
+
registeredWallets.delete(address);
|
|
172
|
+
}
|
|
173
|
+
sendToClient(ws, { type: 'result', action, success: true });
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
88
176
|
else if (action === 'set-polling') {
|
|
89
177
|
const { service, interval } = msg;
|
|
90
178
|
if (!service || !validServices.has(service) || typeof interval !== 'number' || interval < 1000) {
|
|
@@ -187,14 +275,37 @@ export function createDashboardApp(opts) {
|
|
|
187
275
|
};
|
|
188
276
|
}
|
|
189
277
|
}
|
|
278
|
+
// Collect balances from registered (non-master) wallets
|
|
279
|
+
const walletBalances = {};
|
|
280
|
+
for (const [address, entry] of registeredWallets) {
|
|
281
|
+
if (entry.ctx && !entry.initializing) {
|
|
282
|
+
try {
|
|
283
|
+
const bal = await getWalletBalances(entry.ctx);
|
|
284
|
+
walletBalances[address] = {
|
|
285
|
+
unshielded: bal.unshielded.toString(),
|
|
286
|
+
shielded: bal.shielded.toString(),
|
|
287
|
+
dust: bal.dust.toString(),
|
|
288
|
+
connected: true,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
walletBalances[address] = { unshielded: '0', shielded: '0', dust: '0', connected: true };
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
walletBalances[address] = { unshielded: '0', shielded: '0', dust: '0', connected: false };
|
|
297
|
+
}
|
|
298
|
+
}
|
|
190
299
|
const state = await collector.collect({
|
|
191
300
|
walletInfo,
|
|
192
301
|
networkStatus: manager.getStatus(),
|
|
193
302
|
polling,
|
|
194
303
|
walletSyncStatus,
|
|
304
|
+
walletBalances,
|
|
195
305
|
});
|
|
196
306
|
// JSON.stringify with bigint-safe replacer (just in case)
|
|
197
307
|
const json = JSON.stringify({ type: 'state', data: state }, (_key, value) => typeof value === 'bigint' ? value.toString() : value);
|
|
308
|
+
lastStateJson = json;
|
|
198
309
|
broadcastRaw(json);
|
|
199
310
|
}
|
|
200
311
|
catch {
|
|
@@ -218,6 +329,13 @@ export function createDashboardApp(opts) {
|
|
|
218
329
|
ws.close();
|
|
219
330
|
}
|
|
220
331
|
clients.clear();
|
|
332
|
+
// Close all registered wallet contexts
|
|
333
|
+
for (const [, entry] of registeredWallets) {
|
|
334
|
+
if (entry.ctx) {
|
|
335
|
+
closeWallet(entry.ctx).catch(() => { });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
registeredWallets.clear();
|
|
221
339
|
}
|
|
222
340
|
return {
|
|
223
341
|
app,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/dashboard/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/dashboard/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import type { NetworkConfig, ServiceStatus } from '../../core/types.js';
|
|
2
2
|
import type { ParsedLogLine } from './lib/log-parser.js';
|
|
3
3
|
export type WalletSyncStatus = 'idle' | 'syncing' | 'synced' | 'error';
|
|
4
|
+
export interface WalletBalanceInfo {
|
|
5
|
+
unshielded: string;
|
|
6
|
+
shielded: string;
|
|
7
|
+
dust: string;
|
|
8
|
+
connected: boolean;
|
|
9
|
+
}
|
|
4
10
|
export interface CollectOptions {
|
|
5
11
|
walletInfo?: WalletInfo;
|
|
6
12
|
networkStatus?: string;
|
|
7
13
|
polling?: PollingConfig;
|
|
8
14
|
walletSyncStatus?: WalletSyncStatus;
|
|
15
|
+
walletBalances?: Record<string, WalletBalanceInfo>;
|
|
9
16
|
}
|
|
10
17
|
export interface DashboardState {
|
|
11
18
|
serverTime: string;
|
|
@@ -56,6 +63,7 @@ export interface DashboardState {
|
|
|
56
63
|
containers: ServiceStatus[];
|
|
57
64
|
logs: ParsedLogLine[];
|
|
58
65
|
networkStatus: string;
|
|
66
|
+
walletBalances: Record<string, WalletBalanceInfo>;
|
|
59
67
|
}
|
|
60
68
|
export interface PollingConfig {
|
|
61
69
|
node?: boolean;
|
|
@@ -40,7 +40,7 @@ export class StateCollector {
|
|
|
40
40
|
this.config = config;
|
|
41
41
|
}
|
|
42
42
|
async collect(opts) {
|
|
43
|
-
const { walletInfo, networkStatus, polling, walletSyncStatus } = opts ?? {};
|
|
43
|
+
const { walletInfo, networkStatus, polling, walletSyncStatus, walletBalances } = opts ?? {};
|
|
44
44
|
// When polling is undefined, all sections are fetched (backward compatible)
|
|
45
45
|
const fetchNode = polling?.node !== false;
|
|
46
46
|
const fetchIndexer = polling?.indexer !== false;
|
|
@@ -55,7 +55,9 @@ export class StateCollector {
|
|
|
55
55
|
fetchNode ? safeCall(() => fetchSystemVersion(this.config.node), null) : Promise.resolve(null),
|
|
56
56
|
fetchNode ? safeCall(() => fetchSystemHealth(this.config.node), null) : Promise.resolve(null),
|
|
57
57
|
fetchNode ? safeCall(() => fetchBestBlockHeader(this.config.node), null) : Promise.resolve(null),
|
|
58
|
-
|
|
58
|
+
// Version info changes rarely — fetch alongside proof versions (10 min interval)
|
|
59
|
+
fetchProofVer ? safeCall(() => fetchProofServerVersion(this.config.proofServer), null) : Promise.resolve(null),
|
|
60
|
+
// Ready/jobs status needs frequent polling (5s interval)
|
|
59
61
|
fetchProofServer ? safeCall(() => fetchProofServerReady(this.config.proofServer), null) : Promise.resolve(null),
|
|
60
62
|
fetchProofVer ? safeCall(() => fetchProofVersions(this.config.proofServer), null) : Promise.resolve(null),
|
|
61
63
|
fetchDocker ? safeCall(() => composePs(), []) : Promise.resolve(null),
|
|
@@ -97,19 +99,23 @@ export class StateCollector {
|
|
|
97
99
|
};
|
|
98
100
|
}
|
|
99
101
|
// --- Proof server section ---
|
|
102
|
+
// /ready is polled frequently (proofServer flag, 5s default)
|
|
100
103
|
if (fetchProofServer) {
|
|
101
104
|
this.cachedProofServer = {
|
|
102
|
-
|
|
105
|
+
...this.cachedProofServer,
|
|
103
106
|
ready: proofReady?.status === 'ok',
|
|
104
107
|
jobsProcessing: proofReady?.jobsProcessing ?? null,
|
|
105
108
|
jobsPending: proofReady?.jobsPending ?? null,
|
|
106
109
|
jobCapacity: proofReady?.jobCapacity ?? null,
|
|
107
|
-
proofVersions: fetchProofVer ? proofVersions : this.cachedProofServer.proofVersions,
|
|
108
110
|
};
|
|
109
111
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
this.cachedProofServer = {
|
|
112
|
+
// /version and /proof-versions are fetched infrequently (proofVersions flag, 10 min default)
|
|
113
|
+
if (fetchProofVer) {
|
|
114
|
+
this.cachedProofServer = {
|
|
115
|
+
...this.cachedProofServer,
|
|
116
|
+
version: proofVersion,
|
|
117
|
+
proofVersions,
|
|
118
|
+
};
|
|
113
119
|
}
|
|
114
120
|
// --- Health section ---
|
|
115
121
|
if (fetchHealth) {
|
|
@@ -165,6 +171,7 @@ export class StateCollector {
|
|
|
165
171
|
containers: [...this.cachedContainers],
|
|
166
172
|
logs: [...this.cachedLogs],
|
|
167
173
|
networkStatus: networkStatus ?? 'unknown',
|
|
174
|
+
walletBalances: walletBalances ?? {},
|
|
168
175
|
};
|
|
169
176
|
}
|
|
170
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-collector.js","sourceRoot":"","sources":["../../../src/cli/dashboard/state-collector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"state-collector.js","sourceRoot":"","sources":["../../../src/cli/dashboard/state-collector.ts"],"names":[],"mappings":"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"}
|
package/dist/core/health.js
CHANGED
|
@@ -22,7 +22,7 @@ export async function checkAllHealth(config) {
|
|
|
22
22
|
const [node, indexer, proofServer] = await Promise.all([
|
|
23
23
|
checkEndpoint(`${cfg.node}/health`),
|
|
24
24
|
checkEndpoint(`${indexerOrigin}/ready`),
|
|
25
|
-
checkEndpoint(`${cfg.proofServer}/
|
|
25
|
+
checkEndpoint(`${cfg.proofServer}/health`),
|
|
26
26
|
]);
|
|
27
27
|
return {
|
|
28
28
|
node,
|
package/dist/core/health.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgB5C,KAAK,UAAU,aAAa,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,EAAE;YACpB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SACjC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAChC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsB;IACzD,MAAM,GAAG,GAAG,MAAM,IAAI,aAAa,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,aAAa,CAAC,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC;QACnC,aAAa,CAAC,GAAG,aAAa,QAAQ,CAAC;QACvC,aAAa,CAAC,GAAG,GAAG,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgB5C,KAAK,UAAU,aAAa,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,EAAE;YACpB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SACjC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAChC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsB;IACzD,MAAM,GAAG,GAAG,MAAM,IAAI,aAAa,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,aAAa,CAAC,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC;QACnC,aAAa,CAAC,GAAG,aAAa,QAAQ,CAAC;QACvC,aAAa,CAAC,GAAG,GAAG,CAAC,WAAW,SAAS,CAAC;KAC3C,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;QACJ,OAAO;QACP,WAAW;QACX,UAAU,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO;KACnE,CAAC;AACJ,CAAC"}
|