@shieldedtech/moth-tui 0.2.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/README.md +65 -0
- package/dist/app.d.ts +7 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +474 -0
- package/dist/app.js.map +1 -0
- package/dist/components/BackHint.d.ts +5 -0
- package/dist/components/BackHint.d.ts.map +1 -0
- package/dist/components/BackHint.js +6 -0
- package/dist/components/BackHint.js.map +1 -0
- package/dist/components/BalanceTable.d.ts +9 -0
- package/dist/components/BalanceTable.d.ts.map +1 -0
- package/dist/components/BalanceTable.js +8 -0
- package/dist/components/BalanceTable.js.map +1 -0
- package/dist/components/ConfirmationModal.d.ts +8 -0
- package/dist/components/ConfirmationModal.d.ts.map +1 -0
- package/dist/components/ConfirmationModal.js +33 -0
- package/dist/components/ConfirmationModal.js.map +1 -0
- package/dist/components/HelpFooter.d.ts +16 -0
- package/dist/components/HelpFooter.d.ts.map +1 -0
- package/dist/components/HelpFooter.js +7 -0
- package/dist/components/HelpFooter.js.map +1 -0
- package/dist/components/Loader.d.ts +5 -0
- package/dist/components/Loader.d.ts.map +1 -0
- package/dist/components/Loader.js +7 -0
- package/dist/components/Loader.js.map +1 -0
- package/dist/components/SectionHeader.d.ts +19 -0
- package/dist/components/SectionHeader.d.ts.map +1 -0
- package/dist/components/SectionHeader.js +11 -0
- package/dist/components/SectionHeader.js.map +1 -0
- package/dist/components/Select.d.ts +35 -0
- package/dist/components/Select.d.ts.map +1 -0
- package/dist/components/Select.js +49 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/TxStatus.d.ts +8 -0
- package/dist/components/TxStatus.d.ts.map +1 -0
- package/dist/components/TxStatus.js +22 -0
- package/dist/components/TxStatus.js.map +1 -0
- package/dist/hooks/useBalance.d.ts +19 -0
- package/dist/hooks/useBalance.d.ts.map +1 -0
- package/dist/hooks/useBalance.js +119 -0
- package/dist/hooks/useBalance.js.map +1 -0
- package/dist/hooks/useChainStatus.d.ts +13 -0
- package/dist/hooks/useChainStatus.d.ts.map +1 -0
- package/dist/hooks/useChainStatus.js +97 -0
- package/dist/hooks/useChainStatus.js.map +1 -0
- package/dist/hooks/useDaemonHost.d.ts +30 -0
- package/dist/hooks/useDaemonHost.d.ts.map +1 -0
- package/dist/hooks/useDaemonHost.js +122 -0
- package/dist/hooks/useDaemonHost.js.map +1 -0
- package/dist/hooks/useLogs.d.ts +11 -0
- package/dist/hooks/useLogs.d.ts.map +1 -0
- package/dist/hooks/useLogs.js +44 -0
- package/dist/hooks/useLogs.js.map +1 -0
- package/dist/hooks/useNetwork.d.ts +14 -0
- package/dist/hooks/useNetwork.d.ts.map +1 -0
- package/dist/hooks/useNetwork.js +100 -0
- package/dist/hooks/useNetwork.js.map +1 -0
- package/dist/hooks/useWallet.d.ts +29 -0
- package/dist/hooks/useWallet.d.ts.map +1 -0
- package/dist/hooks/useWallet.js +135 -0
- package/dist/hooks/useWallet.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/navigation/index.d.ts +3 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +2 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/types.d.ts +84 -0
- package/dist/navigation/types.d.ts.map +1 -0
- package/dist/navigation/types.js +3 -0
- package/dist/navigation/types.js.map +1 -0
- package/dist/navigation/useStackNavigator.d.ts +3 -0
- package/dist/navigation/useStackNavigator.d.ts.map +1 -0
- package/dist/navigation/useStackNavigator.js +20 -0
- package/dist/navigation/useStackNavigator.js.map +1 -0
- package/dist/persistent-log.d.ts +5 -0
- package/dist/persistent-log.d.ts.map +1 -0
- package/dist/persistent-log.js +55 -0
- package/dist/persistent-log.js.map +1 -0
- package/dist/screens/contract.d.ts +8 -0
- package/dist/screens/contract.d.ts.map +1 -0
- package/dist/screens/contract.js +104 -0
- package/dist/screens/contract.js.map +1 -0
- package/dist/screens/dashboard/DashboardHub.d.ts +35 -0
- package/dist/screens/dashboard/DashboardHub.d.ts.map +1 -0
- package/dist/screens/dashboard/DashboardHub.js +67 -0
- package/dist/screens/dashboard/DashboardHub.js.map +1 -0
- package/dist/screens/dashboard/StateView.d.ts +24 -0
- package/dist/screens/dashboard/StateView.d.ts.map +1 -0
- package/dist/screens/dashboard/StateView.js +79 -0
- package/dist/screens/dashboard/StateView.js.map +1 -0
- package/dist/screens/dashboard/index.d.ts +3 -0
- package/dist/screens/dashboard/index.d.ts.map +1 -0
- package/dist/screens/dashboard/index.js +3 -0
- package/dist/screens/dashboard/index.js.map +1 -0
- package/dist/screens/deploy.d.ts +8 -0
- package/dist/screens/deploy.d.ts.map +1 -0
- package/dist/screens/deploy.js +125 -0
- package/dist/screens/deploy.js.map +1 -0
- package/dist/screens/dust.d.ts +21 -0
- package/dist/screens/dust.d.ts.map +1 -0
- package/dist/screens/dust.js +289 -0
- package/dist/screens/dust.js.map +1 -0
- package/dist/screens/keys.d.ts +21 -0
- package/dist/screens/keys.d.ts.map +1 -0
- package/dist/screens/keys.js +126 -0
- package/dist/screens/keys.js.map +1 -0
- package/dist/screens/logs.d.ts +10 -0
- package/dist/screens/logs.d.ts.map +1 -0
- package/dist/screens/logs.js +62 -0
- package/dist/screens/logs.js.map +1 -0
- package/dist/screens/mint.d.ts +13 -0
- package/dist/screens/mint.d.ts.map +1 -0
- package/dist/screens/mint.js +151 -0
- package/dist/screens/mint.js.map +1 -0
- package/dist/screens/network.d.ts +12 -0
- package/dist/screens/network.d.ts.map +1 -0
- package/dist/screens/network.js +117 -0
- package/dist/screens/network.js.map +1 -0
- package/dist/screens/onboarding/InitializingScreen.d.ts +10 -0
- package/dist/screens/onboarding/InitializingScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/InitializingScreen.js +7 -0
- package/dist/screens/onboarding/InitializingScreen.js.map +1 -0
- package/dist/screens/onboarding/MnemonicDisplayScreen.d.ts +9 -0
- package/dist/screens/onboarding/MnemonicDisplayScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/MnemonicDisplayScreen.js +23 -0
- package/dist/screens/onboarding/MnemonicDisplayScreen.js.map +1 -0
- package/dist/screens/onboarding/NameScreen.d.ts +9 -0
- package/dist/screens/onboarding/NameScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/NameScreen.js +32 -0
- package/dist/screens/onboarding/NameScreen.js.map +1 -0
- package/dist/screens/onboarding/NetworkSelectScreen.d.ts +9 -0
- package/dist/screens/onboarding/NetworkSelectScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/NetworkSelectScreen.js +20 -0
- package/dist/screens/onboarding/NetworkSelectScreen.js.map +1 -0
- package/dist/screens/onboarding/OnboardingHost.d.ts +15 -0
- package/dist/screens/onboarding/OnboardingHost.d.ts.map +1 -0
- package/dist/screens/onboarding/OnboardingHost.js +42 -0
- package/dist/screens/onboarding/OnboardingHost.js.map +1 -0
- package/dist/screens/onboarding/PassphraseScreen.d.ts +9 -0
- package/dist/screens/onboarding/PassphraseScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/PassphraseScreen.js +46 -0
- package/dist/screens/onboarding/PassphraseScreen.js.map +1 -0
- package/dist/screens/onboarding/SeedEntryScreen.d.ts +9 -0
- package/dist/screens/onboarding/SeedEntryScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/SeedEntryScreen.js +49 -0
- package/dist/screens/onboarding/SeedEntryScreen.js.map +1 -0
- package/dist/screens/onboarding/SeedSourceScreen.d.ts +9 -0
- package/dist/screens/onboarding/SeedSourceScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/SeedSourceScreen.js +22 -0
- package/dist/screens/onboarding/SeedSourceScreen.js.map +1 -0
- package/dist/screens/onboarding/UnlockScreen.d.ts +9 -0
- package/dist/screens/onboarding/UnlockScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/UnlockScreen.js +29 -0
- package/dist/screens/onboarding/UnlockScreen.js.map +1 -0
- package/dist/screens/onboarding/WalletSelectScreen.d.ts +9 -0
- package/dist/screens/onboarding/WalletSelectScreen.d.ts.map +1 -0
- package/dist/screens/onboarding/WalletSelectScreen.js +30 -0
- package/dist/screens/onboarding/WalletSelectScreen.js.map +1 -0
- package/dist/screens/onboarding/index.d.ts +2 -0
- package/dist/screens/onboarding/index.d.ts.map +1 -0
- package/dist/screens/onboarding/index.js +2 -0
- package/dist/screens/onboarding/index.js.map +1 -0
- package/dist/screens/send.d.ts +12 -0
- package/dist/screens/send.d.ts.map +1 -0
- package/dist/screens/send.js +187 -0
- package/dist/screens/send.js.map +1 -0
- package/dist/settings.d.ts +16 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +23 -0
- package/dist/settings.js.map +1 -0
- package/dist/types.d.ts +30 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/balance.d.ts +48 -0
- package/dist/utils/balance.d.ts.map +1 -0
- package/dist/utils/balance.js +61 -0
- package/dist/utils/balance.js.map +1 -0
- package/dist/utils/display.d.ts +3 -0
- package/dist/utils/display.d.ts.map +1 -0
- package/dist/utils/display.js +17 -0
- package/dist/utils/display.js.map +1 -0
- package/dist/utils/sync.d.ts +7 -0
- package/dist/utils/sync.d.ts.map +1 -0
- package/dist/utils/sync.js +11 -0
- package/dist/utils/sync.js.map +1 -0
- package/dist/utils/synced-wallet-stub.d.ts +3 -0
- package/dist/utils/synced-wallet-stub.d.ts.map +1 -0
- package/dist/utils/synced-wallet-stub.js +35 -0
- package/dist/utils/synced-wallet-stub.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import TextInput from 'ink-text-input';
|
|
5
|
+
import { TxStatus } from '../components/TxStatus.js';
|
|
6
|
+
import { SectionHeader } from '../components/SectionHeader.js';
|
|
7
|
+
import { HelpFooter } from '../components/HelpFooter.js';
|
|
8
|
+
const ROWS = ['artifact', 'witnesses', 'projectDir', 'deploy'];
|
|
9
|
+
const LABELS = {
|
|
10
|
+
artifact: 'Artifact',
|
|
11
|
+
witnesses: 'Witnesses',
|
|
12
|
+
projectDir: 'Project',
|
|
13
|
+
deploy: '',
|
|
14
|
+
};
|
|
15
|
+
const PLACEHOLDERS = {
|
|
16
|
+
artifact: './compiled/my-contract',
|
|
17
|
+
witnesses: '(optional)',
|
|
18
|
+
projectDir: '(for SDK deps, blank = auto)',
|
|
19
|
+
};
|
|
20
|
+
export function Deploy({ onDeploy, onBack }) {
|
|
21
|
+
const [highlighted, setHighlighted] = useState(0);
|
|
22
|
+
const [editField, setEditField] = useState(null);
|
|
23
|
+
const [editValue, setEditValue] = useState('');
|
|
24
|
+
const [artifactPath, setArtifactPath] = useState('');
|
|
25
|
+
const [witnessPath, setWitnessPath] = useState('');
|
|
26
|
+
const [projectDir, setProjectDir] = useState('');
|
|
27
|
+
const [progress, setProgress] = useState({ status: 'idle', message: '' });
|
|
28
|
+
const [contractAddress, setContractAddress] = useState('');
|
|
29
|
+
const [error, setError] = useState('');
|
|
30
|
+
const busy = progress.status === 'building' || progress.status === 'proving' || progress.status === 'submitting';
|
|
31
|
+
useInput((_input, key) => {
|
|
32
|
+
if (key.escape) {
|
|
33
|
+
if (editField) {
|
|
34
|
+
setEditField(null);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (busy)
|
|
38
|
+
return;
|
|
39
|
+
onBack();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (editField || busy)
|
|
43
|
+
return;
|
|
44
|
+
if (key.upArrow) {
|
|
45
|
+
setHighlighted(i => (i <= 0 ? ROWS.length - 1 : i - 1));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (key.downArrow) {
|
|
49
|
+
setHighlighted(i => (i >= ROWS.length - 1 ? 0 : i + 1));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (key.return) {
|
|
53
|
+
const row = ROWS[highlighted];
|
|
54
|
+
setError('');
|
|
55
|
+
if (row === 'deploy') {
|
|
56
|
+
submit();
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const current = row === 'artifact' ? artifactPath
|
|
60
|
+
: row === 'witnesses' ? witnessPath
|
|
61
|
+
: projectDir;
|
|
62
|
+
setEditValue(current);
|
|
63
|
+
setEditField(row);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
const saveEdit = () => {
|
|
68
|
+
const v = editValue.trim();
|
|
69
|
+
if (editField === 'artifact')
|
|
70
|
+
setArtifactPath(v);
|
|
71
|
+
else if (editField === 'witnesses')
|
|
72
|
+
setWitnessPath(v);
|
|
73
|
+
else if (editField === 'projectDir')
|
|
74
|
+
setProjectDir(v);
|
|
75
|
+
setEditField(null);
|
|
76
|
+
};
|
|
77
|
+
const submit = async () => {
|
|
78
|
+
if (!artifactPath.trim()) {
|
|
79
|
+
setError('Artifact path is required');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
setContractAddress('');
|
|
83
|
+
setProgress({ status: 'proving', message: 'Deploying (this may take a few minutes)...' });
|
|
84
|
+
try {
|
|
85
|
+
const address = await onDeploy(artifactPath.trim(), witnessPath.trim() || undefined, projectDir.trim() || undefined);
|
|
86
|
+
setContractAddress(address);
|
|
87
|
+
setProgress({ status: 'done', message: `Deployed at ${address}` });
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
setProgress({ status: 'error', message: String(err) });
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const hints = () => {
|
|
94
|
+
if (editField) {
|
|
95
|
+
return [
|
|
96
|
+
{ key: 'Enter', label: 'save' },
|
|
97
|
+
{ key: 'ESC', label: 'cancel' },
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
if (busy)
|
|
101
|
+
return [];
|
|
102
|
+
const out = [{ key: '↑/↓', label: 'select' }];
|
|
103
|
+
const row = ROWS[highlighted];
|
|
104
|
+
if (row === 'deploy')
|
|
105
|
+
out.push({ key: 'Enter', label: 'deploy' });
|
|
106
|
+
else
|
|
107
|
+
out.push({ key: 'Enter', label: 'edit' });
|
|
108
|
+
out.push({ key: 'ESC', label: 'back' });
|
|
109
|
+
return out;
|
|
110
|
+
};
|
|
111
|
+
const labelWidth = 11;
|
|
112
|
+
const renderRow = (row, content) => {
|
|
113
|
+
const idx = ROWS.indexOf(row);
|
|
114
|
+
const isHi = idx === highlighted;
|
|
115
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: isHi ? 'cyan' : undefined, bold: isHi, children: [isHi ? '› ' : ' ', LABELS[row].padEnd(labelWidth)] }), content] }));
|
|
116
|
+
};
|
|
117
|
+
const renderEditableRow = (row, value, emptyDisplay) => {
|
|
118
|
+
if (editField === row) {
|
|
119
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { bold: true, color: "cyan", children: ['› ', LABELS[row].padEnd(labelWidth)] }), _jsx(TextInput, { value: editValue, onChange: setEditValue, onSubmit: saveEdit, placeholder: PLACEHOLDERS[row] })] }));
|
|
120
|
+
}
|
|
121
|
+
return renderRow(row, value ? _jsx(Text, { children: value }) : emptyDisplay);
|
|
122
|
+
};
|
|
123
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(SectionHeader, { title: "Deploy Contract" }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { flexDirection: "column", children: [renderEditableRow('artifact', artifactPath, _jsx(Text, { dimColor: true, italic: true, children: "(required)" })), renderEditableRow('witnesses', witnessPath, _jsx(Text, { dimColor: true, italic: true, children: "(none)" })), renderEditableRow('projectDir', projectDir, _jsx(Text, { dimColor: true, italic: true, children: "(auto)" })), renderRow('deploy', _jsx(Text, { color: highlighted === ROWS.indexOf('deploy') ? 'cyan' : 'green', bold: true, children: "[ Deploy ]" }))] }), progress.status !== 'idle' && (_jsx(Box, { marginTop: 1, children: _jsx(TxStatus, { progress: progress }) })), contractAddress && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "green", children: "Contract deployed:" }), _jsx(Text, { children: contractAddress })] })), error && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: error }) }), _jsx(HelpFooter, { hints: hints() })] })] }));
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/screens/deploy.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type NightUtxo } from '@shieldedtech/moth-wallet';
|
|
3
|
+
export type DustActionResult = {
|
|
4
|
+
success: true;
|
|
5
|
+
txId: string;
|
|
6
|
+
} | {
|
|
7
|
+
success: false;
|
|
8
|
+
error: string;
|
|
9
|
+
};
|
|
10
|
+
interface DustProps {
|
|
11
|
+
dustAddress: string;
|
|
12
|
+
synced: boolean;
|
|
13
|
+
syncStatus: string;
|
|
14
|
+
loadUtxos: () => Promise<NightUtxo[]>;
|
|
15
|
+
onRegister: (utxos: NightUtxo[], receiver?: string) => Promise<DustActionResult>;
|
|
16
|
+
onDeregister: (utxos: NightUtxo[]) => Promise<DustActionResult>;
|
|
17
|
+
onBack: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function Dust({ dustAddress, synced, syncStatus, loadUtxos, onRegister, onDeregister, onBack }: DustProps): React.JSX.Element;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=dust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dust.d.ts","sourceRoot":"","sources":["../../src/screens/dust.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI9F,MAAM,MAAM,gBAAgB,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG,UAAU,SAAS;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtC,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjF,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChE,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAkBD,wBAAgB,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,qBAma/G"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// DUST screen — register / deregister NIGHT UTXOs for dust generation.
|
|
3
|
+
// Multi-step flow ported from midnight-wallet-cli. See NOTICE for attribution.
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { Box, Text, useInput } from 'ink';
|
|
6
|
+
import TextInput from 'ink-text-input';
|
|
7
|
+
import Spinner from 'ink-spinner';
|
|
8
|
+
import { formatNight, decodeBech32mAddress } from '@shieldedtech/moth-wallet';
|
|
9
|
+
import { SectionHeader } from '../components/SectionHeader.js';
|
|
10
|
+
import { HelpFooter } from '../components/HelpFooter.js';
|
|
11
|
+
const ACTIONS = [
|
|
12
|
+
{ id: 'register', label: 'Register', description: 'enable dust generation on NIGHT UTXOs' },
|
|
13
|
+
{ id: 'deregister', label: 'Deregister', description: 'stop dust generation on NIGHT UTXOs' },
|
|
14
|
+
];
|
|
15
|
+
export function Dust({ dustAddress, synced, syncStatus, loadUtxos, onRegister, onDeregister, onBack }) {
|
|
16
|
+
const [mode, setMode] = useState({ kind: 'action' });
|
|
17
|
+
const [actionIndex, setActionIndex] = useState(0);
|
|
18
|
+
const [cursor, setCursor] = useState(0);
|
|
19
|
+
const [selected, setSelected] = useState(new Set());
|
|
20
|
+
const [useDefault, setUseDefault] = useState(true);
|
|
21
|
+
const [customAddress, setCustomAddress] = useState('');
|
|
22
|
+
const [addressError, setAddressError] = useState();
|
|
23
|
+
const [loadError, setLoadError] = useState();
|
|
24
|
+
// Reset selection state when entering a new selection step
|
|
25
|
+
const beginSelect = (action, eligible) => {
|
|
26
|
+
setCursor(0);
|
|
27
|
+
setSelected(new Set());
|
|
28
|
+
setMode({ kind: 'select', action, eligible });
|
|
29
|
+
};
|
|
30
|
+
const startAction = async (action) => {
|
|
31
|
+
setLoadError(undefined);
|
|
32
|
+
setMode({ kind: 'loading', action });
|
|
33
|
+
try {
|
|
34
|
+
const all = await loadUtxos();
|
|
35
|
+
const eligible = action === 'register'
|
|
36
|
+
? all.filter(u => !u.registered)
|
|
37
|
+
: all.filter(u => u.registered);
|
|
38
|
+
beginSelect(action, eligible);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
setLoadError(err instanceof Error ? err.message : String(err));
|
|
42
|
+
setMode({ kind: 'action' });
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
useInput((input, key) => {
|
|
46
|
+
// ESC handling per mode
|
|
47
|
+
if (key.escape) {
|
|
48
|
+
switch (mode.kind) {
|
|
49
|
+
case 'action':
|
|
50
|
+
case 'loading':
|
|
51
|
+
onBack();
|
|
52
|
+
return;
|
|
53
|
+
case 'select':
|
|
54
|
+
setMode({ kind: 'action' });
|
|
55
|
+
return;
|
|
56
|
+
case 'address':
|
|
57
|
+
startAction('register');
|
|
58
|
+
return;
|
|
59
|
+
case 'confirm':
|
|
60
|
+
if (mode.action === 'register') {
|
|
61
|
+
setMode({ kind: 'address', selected: mode.selected });
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
startAction('deregister');
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
case 'processing':
|
|
68
|
+
return; // ignore ESC while submitting
|
|
69
|
+
case 'result':
|
|
70
|
+
onBack();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (mode.kind === 'action') {
|
|
75
|
+
if (!synced)
|
|
76
|
+
return; // gate input until wallet is synced
|
|
77
|
+
if (key.upArrow) {
|
|
78
|
+
setActionIndex(i => (i <= 0 ? ACTIONS.length - 1 : i - 1));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (key.downArrow) {
|
|
82
|
+
setActionIndex(i => (i >= ACTIONS.length - 1 ? 0 : i + 1));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (key.return) {
|
|
86
|
+
startAction(ACTIONS[actionIndex].id);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (mode.kind === 'select') {
|
|
92
|
+
const { eligible } = mode;
|
|
93
|
+
if (eligible.length === 0) {
|
|
94
|
+
return; // empty state — only ESC works
|
|
95
|
+
}
|
|
96
|
+
const hasSelectAll = eligible.length > 1;
|
|
97
|
+
const total = hasSelectAll ? eligible.length + 1 : eligible.length;
|
|
98
|
+
if (key.upArrow) {
|
|
99
|
+
setCursor(c => (c <= 0 ? total - 1 : c - 1));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (key.downArrow) {
|
|
103
|
+
setCursor(c => (c >= total - 1 ? 0 : c + 1));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (input === ' ') {
|
|
107
|
+
if (hasSelectAll && cursor === 0) {
|
|
108
|
+
if (selected.size === eligible.length)
|
|
109
|
+
setSelected(new Set());
|
|
110
|
+
else
|
|
111
|
+
setSelected(new Set(eligible.map((_, i) => i)));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const idx = hasSelectAll ? cursor - 1 : cursor;
|
|
115
|
+
setSelected(prev => {
|
|
116
|
+
const next = new Set(prev);
|
|
117
|
+
if (next.has(idx))
|
|
118
|
+
next.delete(idx);
|
|
119
|
+
else
|
|
120
|
+
next.add(idx);
|
|
121
|
+
return next;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (key.return) {
|
|
127
|
+
if (selected.size === 0)
|
|
128
|
+
return;
|
|
129
|
+
const chosen = eligible.filter((_, i) => selected.has(i));
|
|
130
|
+
if (mode.action === 'register') {
|
|
131
|
+
setUseDefault(true);
|
|
132
|
+
setCustomAddress('');
|
|
133
|
+
setAddressError(undefined);
|
|
134
|
+
setMode({ kind: 'address', selected: chosen });
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
setMode({ kind: 'confirm', action: 'deregister', selected: chosen });
|
|
138
|
+
}
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (mode.kind === 'address') {
|
|
144
|
+
if (input === 'c' && useDefault) {
|
|
145
|
+
setUseDefault(false);
|
|
146
|
+
setCustomAddress('');
|
|
147
|
+
setAddressError(undefined);
|
|
148
|
+
}
|
|
149
|
+
else if (input === 'd' && !useDefault) {
|
|
150
|
+
setUseDefault(true);
|
|
151
|
+
setAddressError(undefined);
|
|
152
|
+
}
|
|
153
|
+
else if (useDefault && key.return) {
|
|
154
|
+
setMode({ kind: 'confirm', action: 'register', selected: mode.selected });
|
|
155
|
+
}
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (mode.kind === 'confirm') {
|
|
159
|
+
if (key.return)
|
|
160
|
+
submit();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (mode.kind === 'result') {
|
|
164
|
+
// Any non-escape key returns to action menu so the user can do another op
|
|
165
|
+
setMode({ kind: 'action' });
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
const submitCustomAddress = (value) => {
|
|
170
|
+
const trimmed = value.trim();
|
|
171
|
+
if (!trimmed) {
|
|
172
|
+
setAddressError('Address is required');
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const decoded = decodeBech32mAddress(trimmed);
|
|
177
|
+
if (decoded.type !== 'dust') {
|
|
178
|
+
setAddressError(`Expected dust address (mn_dust...), got ${decoded.type}`);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
setAddressError(err instanceof Error ? err.message : 'Invalid dust address');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (mode.kind === 'address') {
|
|
187
|
+
setMode({ kind: 'confirm', action: 'register', selected: mode.selected, receiver: trimmed });
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
const submit = async () => {
|
|
191
|
+
if (mode.kind !== 'confirm')
|
|
192
|
+
return;
|
|
193
|
+
const { action, selected: chosen, receiver } = mode;
|
|
194
|
+
setMode({ kind: 'processing', action, stage: 'Building transaction...' });
|
|
195
|
+
const result = action === 'register'
|
|
196
|
+
? await onRegister(chosen, receiver)
|
|
197
|
+
: await onDeregister(chosen);
|
|
198
|
+
setMode({ kind: 'result', action, result });
|
|
199
|
+
};
|
|
200
|
+
// Render helpers ----------------------------------------------------------
|
|
201
|
+
const renderAction = () => {
|
|
202
|
+
if (!synced) {
|
|
203
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Spinner, { type: "dots" }), _jsx(Text, { color: "yellow", children: " Waiting for wallet sync..." })] }), syncStatus && _jsxs(Text, { dimColor: true, children: [" ", syncStatus] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Dust registration requires a fully synced wallet." }) })] }));
|
|
204
|
+
}
|
|
205
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "What would you like to do?" }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: ACTIONS.map((a, i) => {
|
|
206
|
+
const isHi = i === actionIndex;
|
|
207
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: isHi ? 'cyan' : undefined, bold: isHi, children: [isHi ? '› ' : ' ', a.label.padEnd(12)] }), _jsx(Text, { dimColor: true, children: a.description })] }, a.id));
|
|
208
|
+
}) }), loadError && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: loadError }) })] }));
|
|
209
|
+
};
|
|
210
|
+
const renderLoading = (m) => (_jsxs(Box, { children: [_jsx(Spinner, { type: "dots" }), _jsxs(Text, { children: [" Loading NIGHT UTXOs to ", m.action, "..."] })] }));
|
|
211
|
+
const renderSelect = (m) => {
|
|
212
|
+
const { eligible, action } = m;
|
|
213
|
+
if (eligible.length === 0) {
|
|
214
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "yellow", children: action === 'register'
|
|
215
|
+
? 'No unregistered NIGHT UTXOs available.'
|
|
216
|
+
: 'No registered NIGHT UTXOs available.' }), _jsx(Text, { dimColor: true, children: action === 'register'
|
|
217
|
+
? 'All your NIGHT UTXOs are already registered for dust generation.'
|
|
218
|
+
: 'You have no NIGHT UTXOs registered for dust generation.' })] }));
|
|
219
|
+
}
|
|
220
|
+
const hasSelectAll = eligible.length > 1;
|
|
221
|
+
const allSelected = selected.size === eligible.length;
|
|
222
|
+
const totalValue = Array.from(selected).reduce((sum, i) => sum + eligible[i].value, 0n);
|
|
223
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["Select NIGHT UTXOs to ", action, ":"] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [hasSelectAll && (_jsxs(Box, { children: [_jsx(Text, { color: cursor === 0 ? 'cyan' : undefined, children: cursor === 0 ? '› ' : ' ' }), _jsxs(Text, { children: [allSelected ? '[x]' : '[ ]', " "] }), _jsx(Text, { bold: true, children: "Select all" }), _jsxs(Text, { dimColor: true, children: [" (", eligible.length, " UTXOs)"] })] })), eligible.map((u, i) => {
|
|
224
|
+
const itemIndex = hasSelectAll ? i + 1 : i;
|
|
225
|
+
const isCursor = cursor === itemIndex;
|
|
226
|
+
const isSelected = selected.has(i);
|
|
227
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: isCursor ? 'cyan' : undefined, children: isCursor ? '› ' : ' ' }), _jsxs(Text, { children: [isSelected ? '[x]' : '[ ]', " "] }), _jsxs(Text, { children: ["UTXO ", i + 1, ": "] }), _jsx(Text, { bold: true, children: formatNight(u.value) }), _jsx(Text, { dimColor: true, children: " NIGHT" })] }, i));
|
|
228
|
+
})] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Selected: " }), _jsx(Text, { bold: true, color: selected.size > 0 ? 'green' : undefined, children: selected.size }), _jsxs(Text, { dimColor: true, children: [" UTXO", selected.size !== 1 ? 's' : ''] }), selected.size > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: " (" }), _jsx(Text, { bold: true, children: formatNight(totalValue) }), _jsx(Text, { dimColor: true, children: " NIGHT)" })] }))] })] }));
|
|
229
|
+
};
|
|
230
|
+
const renderAddress = () => (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Dust receiver address" }), useDefault ? (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Using this wallet's dust address:" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", children: dustAddress }) })] })) : (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Custom dust address:" }), _jsx(TextInput, { value: customAddress, onChange: (v) => { setCustomAddress(v); setAddressError(undefined); }, onSubmit: submitCustomAddress, placeholder: "mn_dust..." }), addressError && _jsx(Text, { color: "red", children: addressError })] }))] }));
|
|
231
|
+
const renderConfirm = (m) => {
|
|
232
|
+
const totalValue = m.selected.reduce((sum, u) => sum + u.value, 0n);
|
|
233
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, color: "yellow", children: ["Confirm Dust ", m.action === 'register' ? 'Registration' : 'Deregistration'] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", marginLeft: 2, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "UTXOs: " }), _jsx(Text, { bold: true, children: m.selected.length })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Total NIGHT value: " }), _jsx(Text, { bold: true, children: formatNight(totalValue) }), _jsx(Text, { dimColor: true, children: " NIGHT" })] }), m.action === 'register' && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Dust receiver:" }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: "green", children: m.receiver ?? dustAddress }) })] })), m.action === 'deregister' && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "These UTXOs will stop generating dust rewards." }) }))] })] }));
|
|
234
|
+
};
|
|
235
|
+
const renderProcessing = (m) => (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Spinner, { type: "dots" }), _jsxs(Text, { children: [" ", m.action === 'register' ? 'Registering' : 'Deregistering', " NIGHT UTXOs..."] })] }), _jsxs(Text, { dimColor: true, children: [" ", m.stage] })] }));
|
|
236
|
+
const renderResult = (m) => (_jsx(Box, { flexDirection: "column", children: m.result.success ? (_jsxs(_Fragment, { children: [_jsxs(Text, { bold: true, color: "green", children: ["\u2713 ", m.action === 'register' ? 'Registration' : 'Deregistration', " submitted"] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Transaction ID:" }) }), _jsx(Text, { children: m.result.txId })] })) : (_jsxs(_Fragment, { children: [_jsxs(Text, { bold: true, color: "red", children: ["\u2717 ", m.action === 'register' ? 'Registration' : 'Deregistration', " failed"] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: m.result.error }) })] })) }));
|
|
237
|
+
const hints = () => {
|
|
238
|
+
switch (mode.kind) {
|
|
239
|
+
case 'action':
|
|
240
|
+
if (!synced)
|
|
241
|
+
return [{ key: 'ESC', label: 'back' }];
|
|
242
|
+
return [
|
|
243
|
+
{ key: '↑/↓', label: 'select' },
|
|
244
|
+
{ key: 'Enter', label: 'continue' },
|
|
245
|
+
{ key: 'ESC', label: 'back' },
|
|
246
|
+
];
|
|
247
|
+
case 'loading':
|
|
248
|
+
return [{ key: 'ESC', label: 'cancel' }];
|
|
249
|
+
case 'select': {
|
|
250
|
+
if (mode.eligible.length === 0)
|
|
251
|
+
return [{ key: 'ESC', label: 'back' }];
|
|
252
|
+
const out = [
|
|
253
|
+
{ key: '↑/↓', label: 'move' },
|
|
254
|
+
{ key: 'Space', label: 'toggle' },
|
|
255
|
+
];
|
|
256
|
+
if (selected.size > 0)
|
|
257
|
+
out.push({ key: 'Enter', label: 'continue' });
|
|
258
|
+
out.push({ key: 'ESC', label: 'back' });
|
|
259
|
+
return out;
|
|
260
|
+
}
|
|
261
|
+
case 'address':
|
|
262
|
+
return useDefault
|
|
263
|
+
? [
|
|
264
|
+
{ key: 'Enter', label: 'use default' },
|
|
265
|
+
{ key: 'c', label: 'custom address' },
|
|
266
|
+
{ key: 'ESC', label: 'back' },
|
|
267
|
+
]
|
|
268
|
+
: [
|
|
269
|
+
{ key: 'Enter', label: 'submit' },
|
|
270
|
+
{ key: 'd', label: 'use default' },
|
|
271
|
+
{ key: 'ESC', label: 'back' },
|
|
272
|
+
];
|
|
273
|
+
case 'confirm':
|
|
274
|
+
return [
|
|
275
|
+
{ key: 'Enter', label: 'confirm' },
|
|
276
|
+
{ key: 'ESC', label: 'back' },
|
|
277
|
+
];
|
|
278
|
+
case 'processing':
|
|
279
|
+
return [];
|
|
280
|
+
case 'result':
|
|
281
|
+
return [
|
|
282
|
+
{ key: 'Enter', label: 'continue' },
|
|
283
|
+
{ key: 'ESC', label: 'back' },
|
|
284
|
+
];
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(SectionHeader, { title: "Dust" }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [mode.kind === 'action' && renderAction(), mode.kind === 'loading' && renderLoading(mode), mode.kind === 'select' && renderSelect(mode), mode.kind === 'address' && renderAddress(), mode.kind === 'confirm' && renderConfirm(mode), mode.kind === 'processing' && renderProcessing(mode), mode.kind === 'result' && renderResult(mode), _jsx(HelpFooter, { hints: hints() })] })] }));
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=dust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dust.js","sourceRoot":"","sources":["../../src/screens/dust.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { WalletInfo } from '@shieldedtech/moth-wallet';
|
|
3
|
+
interface KeysProps {
|
|
4
|
+
wallets: WalletInfo[];
|
|
5
|
+
isUnlocked: (name: string) => boolean;
|
|
6
|
+
getAddresses: (name: string) => {
|
|
7
|
+
unshielded: string;
|
|
8
|
+
shielded: string;
|
|
9
|
+
dust: string;
|
|
10
|
+
} | null;
|
|
11
|
+
onUnlock: (name: string, passphrase: string) => Promise<void>;
|
|
12
|
+
onLock: (name: string) => void;
|
|
13
|
+
onSwitch: (name: string) => Promise<void>;
|
|
14
|
+
onRemove: (name: string) => Promise<void>;
|
|
15
|
+
onClearCache: (name: string) => void;
|
|
16
|
+
onCreateNew: () => void;
|
|
17
|
+
onBack: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function Keys({ wallets, isUnlocked, getAddresses, onUnlock, onLock, onSwitch, onRemove, onClearCache, onCreateNew, onBack, }: KeysProps): React.JSX.Element;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/screens/keys.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,UAAU,SAAS;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9F,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAID,wBAAgB,IAAI,CAAC,EACnB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAC3G,EAAE,SAAS,qBA6JX"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import TextInput from 'ink-text-input';
|
|
5
|
+
import { SectionHeader } from '../components/SectionHeader.js';
|
|
6
|
+
import { HelpFooter } from '../components/HelpFooter.js';
|
|
7
|
+
export function Keys({ wallets, isUnlocked, getAddresses, onUnlock, onLock, onSwitch, onRemove, onClearCache, onCreateNew, onBack, }) {
|
|
8
|
+
const [mode, setMode] = useState('list');
|
|
9
|
+
const createIndex = wallets.length;
|
|
10
|
+
const itemCount = wallets.length + 1;
|
|
11
|
+
const [highlighted, setHighlighted] = useState(() => {
|
|
12
|
+
const active = wallets.findIndex(w => w.active);
|
|
13
|
+
return active >= 0 ? active : 0;
|
|
14
|
+
});
|
|
15
|
+
const [unlockTarget, setUnlockTarget] = useState('');
|
|
16
|
+
const [unlockPass, setUnlockPass] = useState('');
|
|
17
|
+
const [message, setMessage] = useState('');
|
|
18
|
+
const [error, setError] = useState('');
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (highlighted >= itemCount) {
|
|
21
|
+
setHighlighted(Math.max(0, itemCount - 1));
|
|
22
|
+
}
|
|
23
|
+
}, [itemCount, highlighted]);
|
|
24
|
+
const hints = () => {
|
|
25
|
+
const out = [{ key: '↑/↓', label: 'select' }];
|
|
26
|
+
if (highlighted === createIndex) {
|
|
27
|
+
out.push({ key: 'Enter', label: 'create' });
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const w = wallets[highlighted];
|
|
31
|
+
if (w) {
|
|
32
|
+
if (isUnlocked(w.name)) {
|
|
33
|
+
out.push({ key: 'Enter', label: 'switch' });
|
|
34
|
+
out.push({ key: 'l', label: 'lock' });
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
out.push({ key: 'Enter', label: 'unlock' });
|
|
38
|
+
}
|
|
39
|
+
out.push({ key: 'd', label: 'delete' });
|
|
40
|
+
out.push({ key: 'c', label: 'clear cache' });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
out.push({ key: 'ESC', label: 'back' });
|
|
44
|
+
return out;
|
|
45
|
+
};
|
|
46
|
+
useInput((input, key) => {
|
|
47
|
+
if (key.escape) {
|
|
48
|
+
if (mode !== 'list') {
|
|
49
|
+
setMode('list');
|
|
50
|
+
setError('');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
onBack();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (mode !== 'list')
|
|
57
|
+
return;
|
|
58
|
+
if (key.upArrow) {
|
|
59
|
+
setHighlighted(i => (i <= 0 ? itemCount - 1 : i - 1));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (key.downArrow) {
|
|
63
|
+
setHighlighted(i => (i >= itemCount - 1 ? 0 : i + 1));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (highlighted === createIndex) {
|
|
67
|
+
if (key.return) {
|
|
68
|
+
onCreateNew();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const w = wallets[highlighted];
|
|
74
|
+
if (!w)
|
|
75
|
+
return;
|
|
76
|
+
if (key.return) {
|
|
77
|
+
if (isUnlocked(w.name)) {
|
|
78
|
+
onSwitch(w.name).then(() => setMessage(`Switched to ${w.name}`));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
setUnlockTarget(w.name);
|
|
82
|
+
setUnlockPass('');
|
|
83
|
+
setError('');
|
|
84
|
+
setMode('unlock');
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (input === 'l') {
|
|
89
|
+
if (isUnlocked(w.name)) {
|
|
90
|
+
onLock(w.name);
|
|
91
|
+
setMessage(`Locked ${w.name}`);
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (input === 'd') {
|
|
96
|
+
onRemove(w.name).then(() => setMessage(`Removed ${w.name}`));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (input === 'c') {
|
|
100
|
+
onClearCache(w.name);
|
|
101
|
+
setMessage(`Sync cache cleared for ${w.name}`);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
if (mode === 'unlock') {
|
|
106
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(SectionHeader, { title: `Unlock Wallet · ${unlockTarget}` }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { children: [_jsx(Text, { children: "Passphrase: " }), _jsx(TextInput, { value: unlockPass, onChange: setUnlockPass, mask: "*", onSubmit: async () => {
|
|
107
|
+
try {
|
|
108
|
+
await onUnlock(unlockTarget, unlockPass);
|
|
109
|
+
setMessage(`Unlocked ${unlockTarget}`);
|
|
110
|
+
setMode('list');
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
setError('Wrong passphrase or corrupted keystore');
|
|
114
|
+
}
|
|
115
|
+
}, placeholder: "********" })] }), error && _jsx(Text, { color: "red", children: error }), _jsx(HelpFooter, { hints: [{ key: 'ESC', label: 'cancel' }] })] })] }));
|
|
116
|
+
}
|
|
117
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(SectionHeader, { title: "Wallet Keys" }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { flexDirection: "column", children: [wallets.map((w, i) => {
|
|
118
|
+
const unlocked = isUnlocked(w.name);
|
|
119
|
+
const addrs = unlocked ? getAddresses(w.name) : null;
|
|
120
|
+
const isHi = i === highlighted;
|
|
121
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: addrs ? 1 : 0, children: [_jsx(Box, { children: _jsxs(Text, { color: isHi ? 'cyan' : (w.active ? 'cyan' : undefined), bold: isHi, children: [isHi ? '› ' : ' ', w.name.padEnd(20), unlocked
|
|
122
|
+
? _jsx(Text, { color: "green", children: " unlocked" })
|
|
123
|
+
: _jsx(Text, { color: "red", children: " locked" }), w.active && ' ← active'] }) }), addrs && (_jsxs(Box, { flexDirection: "column", paddingLeft: 4, children: [_jsxs(Text, { dimColor: true, children: ["unshielded ", addrs.unshielded] }), _jsxs(Text, { dimColor: true, children: ["shielded ", addrs.shielded] }), _jsxs(Text, { dimColor: true, children: ["dust ", addrs.dust] })] }))] }, w.name));
|
|
124
|
+
}), _jsx(Box, { marginTop: wallets.length > 0 ? 1 : 0, children: _jsxs(Text, { color: highlighted === createIndex ? 'cyan' : 'green', bold: highlighted === createIndex, children: [highlighted === createIndex ? '› ' : ' ', "+ Create new wallet"] }) })] }), message && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", children: message }) }), error && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: error }) }), _jsx(HelpFooter, { hints: hints() })] })] }));
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=keys.js.map
|