@shieldedtech/moth-cli 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 +67 -0
- package/dist/adapters/passphrase.d.ts +2 -0
- package/dist/adapters/passphrase.d.ts.map +1 -0
- package/dist/adapters/passphrase.js +62 -0
- package/dist/adapters/passphrase.js.map +1 -0
- package/dist/base-command.d.ts +155 -0
- package/dist/base-command.d.ts.map +1 -0
- package/dist/base-command.js +497 -0
- package/dist/base-command.js.map +1 -0
- package/dist/commands/airdrop.d.ts +18 -0
- package/dist/commands/airdrop.d.ts.map +1 -0
- package/dist/commands/airdrop.js +36 -0
- package/dist/commands/airdrop.js.map +1 -0
- package/dist/commands/balance.d.ts +18 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +124 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/call.d.ts +26 -0
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +102 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/config.d.ts +22 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +50 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/daemon/call.d.ts +27 -0
- package/dist/commands/daemon/call.d.ts.map +1 -0
- package/dist/commands/daemon/call.js +108 -0
- package/dist/commands/daemon/call.js.map +1 -0
- package/dist/commands/daemon/deploy.d.ts +27 -0
- package/dist/commands/daemon/deploy.d.ts.map +1 -0
- package/dist/commands/daemon/deploy.js +105 -0
- package/dist/commands/daemon/deploy.js.map +1 -0
- package/dist/commands/daemon/dust/deregister.d.ts +19 -0
- package/dist/commands/daemon/dust/deregister.d.ts.map +1 -0
- package/dist/commands/daemon/dust/deregister.js +52 -0
- package/dist/commands/daemon/dust/deregister.js.map +1 -0
- package/dist/commands/daemon/dust/register.d.ts +20 -0
- package/dist/commands/daemon/dust/register.d.ts.map +1 -0
- package/dist/commands/daemon/dust/register.js +60 -0
- package/dist/commands/daemon/dust/register.js.map +1 -0
- package/dist/commands/daemon/key/gen.d.ts +19 -0
- package/dist/commands/daemon/key/gen.d.ts.map +1 -0
- package/dist/commands/daemon/key/gen.js +66 -0
- package/dist/commands/daemon/key/gen.js.map +1 -0
- package/dist/commands/daemon/key/list.d.ts +17 -0
- package/dist/commands/daemon/key/list.d.ts.map +1 -0
- package/dist/commands/daemon/key/list.js +43 -0
- package/dist/commands/daemon/key/list.js.map +1 -0
- package/dist/commands/daemon/key/revoke.d.ts +20 -0
- package/dist/commands/daemon/key/revoke.d.ts.map +1 -0
- package/dist/commands/daemon/key/revoke.js +37 -0
- package/dist/commands/daemon/key/revoke.js.map +1 -0
- package/dist/commands/daemon/maintenance/insert-vk.d.ts +24 -0
- package/dist/commands/daemon/maintenance/insert-vk.d.ts.map +1 -0
- package/dist/commands/daemon/maintenance/insert-vk.js +87 -0
- package/dist/commands/daemon/maintenance/insert-vk.js.map +1 -0
- package/dist/commands/daemon/maintenance/insert-vks-batch.d.ts +24 -0
- package/dist/commands/daemon/maintenance/insert-vks-batch.d.ts.map +1 -0
- package/dist/commands/daemon/maintenance/insert-vks-batch.js +117 -0
- package/dist/commands/daemon/maintenance/insert-vks-batch.js.map +1 -0
- package/dist/commands/daemon/serve.d.ts +23 -0
- package/dist/commands/daemon/serve.d.ts.map +1 -0
- package/dist/commands/daemon/serve.js +289 -0
- package/dist/commands/daemon/serve.js.map +1 -0
- package/dist/commands/daemon/submit-tx.d.ts +22 -0
- package/dist/commands/daemon/submit-tx.d.ts.map +1 -0
- package/dist/commands/daemon/submit-tx.js +89 -0
- package/dist/commands/daemon/submit-tx.js.map +1 -0
- package/dist/commands/daemon/transfer.d.ts +24 -0
- package/dist/commands/daemon/transfer.d.ts.map +1 -0
- package/dist/commands/daemon/transfer.js +135 -0
- package/dist/commands/daemon/transfer.js.map +1 -0
- package/dist/commands/deploy.d.ts +26 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +135 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dust/deregister.d.ts +18 -0
- package/dist/commands/dust/deregister.d.ts.map +1 -0
- package/dist/commands/dust/deregister.js +48 -0
- package/dist/commands/dust/deregister.js.map +1 -0
- package/dist/commands/dust/register.d.ts +21 -0
- package/dist/commands/dust/register.d.ts.map +1 -0
- package/dist/commands/dust/register.js +120 -0
- package/dist/commands/dust/register.js.map +1 -0
- package/dist/commands/dust/status.d.ts +17 -0
- package/dist/commands/dust/status.d.ts.map +1 -0
- package/dist/commands/dust/status.js +47 -0
- package/dist/commands/dust/status.js.map +1 -0
- package/dist/commands/info.d.ts +17 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +37 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/maintenance/insert-vk.d.ts +23 -0
- package/dist/commands/maintenance/insert-vk.d.ts.map +1 -0
- package/dist/commands/maintenance/insert-vk.js +92 -0
- package/dist/commands/maintenance/insert-vk.js.map +1 -0
- package/dist/commands/maintenance/insert-vks-batch.d.ts +23 -0
- package/dist/commands/maintenance/insert-vks-batch.d.ts.map +1 -0
- package/dist/commands/maintenance/insert-vks-batch.js +130 -0
- package/dist/commands/maintenance/insert-vks-batch.js.map +1 -0
- package/dist/commands/mint.d.ts +24 -0
- package/dist/commands/mint.d.ts.map +1 -0
- package/dist/commands/mint.js +116 -0
- package/dist/commands/mint.js.map +1 -0
- package/dist/commands/state.d.ts +20 -0
- package/dist/commands/state.d.ts.map +1 -0
- package/dist/commands/state.js +36 -0
- package/dist/commands/state.js.map +1 -0
- package/dist/commands/transfer/batch.d.ts +21 -0
- package/dist/commands/transfer/batch.d.ts.map +1 -0
- package/dist/commands/transfer/batch.js +71 -0
- package/dist/commands/transfer/batch.js.map +1 -0
- package/dist/commands/transfer.d.ts +24 -0
- package/dist/commands/transfer.d.ts.map +1 -0
- package/dist/commands/transfer.js +123 -0
- package/dist/commands/transfer.js.map +1 -0
- package/dist/commands/tui.d.ts +17 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +18 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/commands/wallet/address.d.ts +25 -0
- package/dist/commands/wallet/address.d.ts.map +1 -0
- package/dist/commands/wallet/address.js +47 -0
- package/dist/commands/wallet/address.js.map +1 -0
- package/dist/commands/wallet/generate.d.ts +20 -0
- package/dist/commands/wallet/generate.d.ts.map +1 -0
- package/dist/commands/wallet/generate.js +75 -0
- package/dist/commands/wallet/generate.js.map +1 -0
- package/dist/commands/wallet/import.d.ts +20 -0
- package/dist/commands/wallet/import.d.ts.map +1 -0
- package/dist/commands/wallet/import.js +85 -0
- package/dist/commands/wallet/import.js.map +1 -0
- package/dist/commands/wallet/list.d.ts +17 -0
- package/dist/commands/wallet/list.d.ts.map +1 -0
- package/dist/commands/wallet/list.js +23 -0
- package/dist/commands/wallet/list.js.map +1 -0
- package/dist/commands/wallet/remove.d.ts +21 -0
- package/dist/commands/wallet/remove.d.ts.map +1 -0
- package/dist/commands/wallet/remove.js +31 -0
- package/dist/commands/wallet/remove.js.map +1 -0
- package/dist/commands/wallet/status.d.ts +18 -0
- package/dist/commands/wallet/status.d.ts.map +1 -0
- package/dist/commands/wallet/status.js +62 -0
- package/dist/commands/wallet/status.js.map +1 -0
- package/dist/commands/wallet/use.d.ts +20 -0
- package/dist/commands/wallet/use.d.ts.map +1 -0
- package/dist/commands/wallet/use.js +19 -0
- package/dist/commands/wallet/use.js.map +1 -0
- package/dist/formatters/index.d.ts +5 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +68 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +53 -0
- package/templates/dapp/api/package.json +21 -0
- package/templates/dapp/api/src/index.ts +2 -0
- package/templates/dapp/api/src/providers.ts +23 -0
- package/templates/dapp/api/src/types.ts +23 -0
- package/templates/dapp/api/tsconfig.json +11 -0
- package/templates/dapp/root/README.md +20 -0
- package/templates/dapp/root/tsconfig.json +15 -0
- package/templates/dapp/ui/index.html +13 -0
- package/templates/dapp/ui/package.json +24 -0
- package/templates/dapp/ui/public/vite.svg +1 -0
- package/templates/dapp/ui/src/App.tsx +36 -0
- package/templates/dapp/ui/src/index.css +29 -0
- package/templates/dapp/ui/src/main.tsx +10 -0
- package/templates/dapp/ui/tsconfig.json +8 -0
- package/templates/dapp/ui/vite.config.ts +14 -0
package/README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# @shieldedtech/moth-cli
|
|
2
|
+
|
|
3
|
+
The `moth` command-line tool — single-command wallet operations for the
|
|
4
|
+
[Midnight Network](https://midnight.network): wallet management, token transfers, contract
|
|
5
|
+
deploy/call, and DUST operations. Built for DApp developers, CI pipelines, and AI coding agents.
|
|
6
|
+
|
|
7
|
+
Part of [Moth](https://github.com/shieldedtech/moth-wallet).
|
|
8
|
+
|
|
9
|
+
> **Experimental — use at your own risk.** This is unaudited software provided AS-IS with no
|
|
10
|
+
> warranty, for development and testing only. Do not use it with real funds on mainnet.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g @shieldedtech/moth-cli
|
|
16
|
+
moth --help
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Or run without installing:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx @shieldedtech/moth-cli --help
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
Every command prompts for missing required inputs in a terminal, and accepts flags/env vars for
|
|
28
|
+
scripting. Global flags include `--network/-n` (default `devnet`), `--wallet/-w`, `--output/-o`
|
|
29
|
+
(`text` or `json`), and `--verbose/-v`.
|
|
30
|
+
|
|
31
|
+
Transaction commands accept `--prover server|wasm` (or `MOTH_PROVER`). Server
|
|
32
|
+
mode uses `--proof-server <url>`; WASM mode proves locally.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Create and fund a wallet
|
|
36
|
+
moth wallet generate --name dev
|
|
37
|
+
moth airdrop
|
|
38
|
+
|
|
39
|
+
# Check balances
|
|
40
|
+
moth balance
|
|
41
|
+
|
|
42
|
+
# Deploy a compiled contract and call a circuit
|
|
43
|
+
moth deploy ./managed/counter --project-dir .
|
|
44
|
+
moth call increment --address <contract-addr>
|
|
45
|
+
|
|
46
|
+
# Launch the interactive terminal dashboard
|
|
47
|
+
moth tui
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Commands
|
|
51
|
+
|
|
52
|
+
| Group | Commands |
|
|
53
|
+
| --- | --- |
|
|
54
|
+
| Wallet | `wallet generate`, `wallet import`, `wallet list`, `wallet use`, `wallet remove` |
|
|
55
|
+
| Tokens | `balance`, `transfer [amount]`, `transfer batch <file>`, `airdrop` |
|
|
56
|
+
| Contracts | `deploy`, `call`, `state`, `mint`, `maintenance insert-vk`, `maintenance insert-vks-batch` |
|
|
57
|
+
| DUST | `dust register`, `dust deregister`, `dust status` |
|
|
58
|
+
| Utility | `info`, `config get/set`, `tui` |
|
|
59
|
+
|
|
60
|
+
## Documentation
|
|
61
|
+
|
|
62
|
+
See the [project README](https://github.com/shieldedtech/moth-wallet#readme) for the full CLI
|
|
63
|
+
reference (every flag, exit codes, network configuration, and CI/agent examples).
|
|
64
|
+
|
|
65
|
+
## License
|
|
66
|
+
|
|
67
|
+
Apache-2.0 — see [LICENSE](https://github.com/shieldedtech/moth-wallet/blob/main/LICENSE).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passphrase.d.ts","sourceRoot":"","sources":["../../src/adapters/passphrase.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,MAAM,SAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { WalletError } from '@shieldedtech/moth-wallet';
|
|
2
|
+
const ENV_VAR = 'MOTH_PASSPHRASE';
|
|
3
|
+
export async function getPassphrase(prompt = 'Passphrase: ') {
|
|
4
|
+
// CI/non-interactive: use environment variable (FR-006)
|
|
5
|
+
// NEVER accept passphrase as CLI argument (SR-001)
|
|
6
|
+
const envPassphrase = process.env[ENV_VAR];
|
|
7
|
+
if (envPassphrase)
|
|
8
|
+
return envPassphrase;
|
|
9
|
+
// Interactive: prompt from terminal with hidden input
|
|
10
|
+
if (!process.stdin.isTTY) {
|
|
11
|
+
throw new WalletError('WALLET_ERROR', `No passphrase provided. Set ${ENV_VAR} environment variable for non-interactive use.`);
|
|
12
|
+
}
|
|
13
|
+
return promptPassphraseHidden(prompt);
|
|
14
|
+
}
|
|
15
|
+
function promptPassphraseHidden(prompt) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
// Write prompt to stderr (keep stdout clean for JSON output)
|
|
18
|
+
process.stderr.write(prompt);
|
|
19
|
+
// Enable raw mode to read characters one at a time without echo
|
|
20
|
+
process.stdin.setRawMode(true);
|
|
21
|
+
process.stdin.resume();
|
|
22
|
+
process.stdin.setEncoding('utf-8');
|
|
23
|
+
let input = '';
|
|
24
|
+
const onData = (char) => {
|
|
25
|
+
const c = char.toString();
|
|
26
|
+
if (c === '\n' || c === '\r' || c === '\u0004') {
|
|
27
|
+
// Enter or Ctrl+D — done
|
|
28
|
+
process.stdin.setRawMode(false);
|
|
29
|
+
process.stdin.pause();
|
|
30
|
+
process.stdin.removeListener('data', onData);
|
|
31
|
+
process.stderr.write('\n');
|
|
32
|
+
if (!input) {
|
|
33
|
+
reject(new WalletError('WALLET_ERROR', 'Passphrase cannot be empty'));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
resolve(input);
|
|
37
|
+
}
|
|
38
|
+
else if (c === '\u0003') {
|
|
39
|
+
// Ctrl+C — abort
|
|
40
|
+
process.stdin.setRawMode(false);
|
|
41
|
+
process.stdin.pause();
|
|
42
|
+
process.stdin.removeListener('data', onData);
|
|
43
|
+
process.stderr.write('\n');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
else if (c === '\u007f' || c === '\b') {
|
|
47
|
+
// Backspace
|
|
48
|
+
if (input.length > 0) {
|
|
49
|
+
input = input.slice(0, -1);
|
|
50
|
+
process.stderr.write('\b \b'); // Erase the asterisk
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (c.charCodeAt(0) >= 32) {
|
|
54
|
+
// Printable character
|
|
55
|
+
input += c;
|
|
56
|
+
process.stderr.write('*'); // Show asterisk for each character
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
process.stdin.on('data', onData);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=passphrase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passphrase.js","sourceRoot":"","sources":["../../src/adapters/passphrase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import type { OutputFormat } from './formatters/index.js';
|
|
3
|
+
import { type WalletErrorCategory, WalletManager, type NetworkConfig, type DaemonClient } from '@shieldedtech/moth-wallet';
|
|
4
|
+
import { FilesystemStorageAdapter } from '@shieldedtech/moth-wallet';
|
|
5
|
+
/**
|
|
6
|
+
* Why a daemon connect failed. Distinguishes the cases the user needs to
|
|
7
|
+
* see different remediation hints for.
|
|
8
|
+
*/
|
|
9
|
+
type DaemonConnectFailure = 'no-tui' | 'stale-socket' | 'tcp-refused' | 'auth-failed' | 'handshake-failed';
|
|
10
|
+
export interface DaemonConnectResult {
|
|
11
|
+
readonly client: DaemonClient | null;
|
|
12
|
+
readonly failure: DaemonConnectFailure | null;
|
|
13
|
+
/** Operator-friendly label of where we tried to connect:
|
|
14
|
+
* `unix:///Users/.../wallet.sock` or `tcp://host:port`. */
|
|
15
|
+
readonly target: string;
|
|
16
|
+
/** Legacy field — Unix socket path when the connect was a Unix
|
|
17
|
+
* attempt, empty string otherwise. Kept so callers reading
|
|
18
|
+
* `.socketPath` keep working. */
|
|
19
|
+
readonly socketPath: string;
|
|
20
|
+
}
|
|
21
|
+
/** Options the daemon-connect helpers accept. Maps 1:1 to the flag
|
|
22
|
+
* set below; pulled out so subcommands can build the options object
|
|
23
|
+
* from their parsed flags without typing it inline. */
|
|
24
|
+
export interface DaemonClientOpts {
|
|
25
|
+
readonly bind?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Flag set every daemon-mode subcommand mixes in. Lets the operator
|
|
29
|
+
* point at either:
|
|
30
|
+
* - the default Unix daemon for `(network, walletName)` (no flags)
|
|
31
|
+
* - a TCP daemon at `--bind host:port`, with the API token supplied
|
|
32
|
+
* ONLY via the `MOTH_DAEMON_TOKEN` environment variable (never a CLI
|
|
33
|
+
* flag — a flag value is readable from the process list)
|
|
34
|
+
*/
|
|
35
|
+
export declare const daemonClientFlags: {
|
|
36
|
+
readonly bind: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
37
|
+
};
|
|
38
|
+
import 'dotenv/config';
|
|
39
|
+
export declare abstract class BaseCommand extends Command {
|
|
40
|
+
static baseFlags: {
|
|
41
|
+
output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
42
|
+
network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
43
|
+
wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
44
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
45
|
+
timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
46
|
+
'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
47
|
+
prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
48
|
+
indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
49
|
+
'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
50
|
+
};
|
|
51
|
+
protected outputFormat: OutputFormat;
|
|
52
|
+
protected verbose: boolean;
|
|
53
|
+
private _storage?;
|
|
54
|
+
private _walletManager?;
|
|
55
|
+
init(): Promise<void>;
|
|
56
|
+
protected get storage(): FilesystemStorageAdapter;
|
|
57
|
+
protected get walletManager(): WalletManager;
|
|
58
|
+
/**
|
|
59
|
+
* Resolve network config with overrides.
|
|
60
|
+
*
|
|
61
|
+
* Precedence (highest to lowest):
|
|
62
|
+
* 1. CLI flags (--indexer, --node-url, --prover, --proof-server)
|
|
63
|
+
* 2. Environment variables (MOTH_INDEXER_URL, MOTH_NODE_URL, MOTH_PROVER, MOTH_PROOF_SERVER_URL)
|
|
64
|
+
* 3. .env file (loaded automatically via dotenv)
|
|
65
|
+
* 4. Persisted config (moth config set indexer-url <url>)
|
|
66
|
+
* 5. Network defaults (devnet, preview, preprod, qanet)
|
|
67
|
+
*/
|
|
68
|
+
protected getNetworkConfig(networkId: string, overrides?: {
|
|
69
|
+
proofServer?: string;
|
|
70
|
+
prover?: string;
|
|
71
|
+
indexer?: string;
|
|
72
|
+
nodeUrl?: string;
|
|
73
|
+
}): Promise<NetworkConfig>;
|
|
74
|
+
/**
|
|
75
|
+
* Helper to extract network overrides from parsed flags.
|
|
76
|
+
*/
|
|
77
|
+
protected getNetworkOverrides(flags: Record<string, unknown>): {
|
|
78
|
+
proofServer: string | undefined;
|
|
79
|
+
prover: string | undefined;
|
|
80
|
+
indexer: string | undefined;
|
|
81
|
+
nodeUrl: string | undefined;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Try to connect to a running TUI daemon for (network, wallet). Returns
|
|
85
|
+
* a DaemonClient or null when no daemon is reachable — the calling
|
|
86
|
+
* command should fall through to its standalone path on null. Callers
|
|
87
|
+
* are responsible for closing the client when done.
|
|
88
|
+
*
|
|
89
|
+
* Failure modes folded to null (so commands can branch with a single
|
|
90
|
+
* truthy check): socket file absent (no TUI), socket present but
|
|
91
|
+
* stale (crashed TUI), protocol-version mismatch.
|
|
92
|
+
*/
|
|
93
|
+
protected tryConnectDaemon(networkId: string, walletName: string, opts?: DaemonClientOpts): Promise<DaemonClient | null>;
|
|
94
|
+
/**
|
|
95
|
+
* Connect with structured diagnostics. Same call as tryConnectDaemon
|
|
96
|
+
* but returns *why* it failed when it did, so commands can render
|
|
97
|
+
* tailored remediation hints. Supports both transports:
|
|
98
|
+
*
|
|
99
|
+
* - default (no `bind`): Unix socket for (network, walletName)
|
|
100
|
+
* - `bind: "host:port"`: TCP, with `token` required
|
|
101
|
+
*
|
|
102
|
+
* Authentication-related failures (refused, bad token) get distinct
|
|
103
|
+
* `failure` codes so the caller's error message can be precise.
|
|
104
|
+
*/
|
|
105
|
+
protected probeDaemon(networkId: string, walletName: string, opts?: DaemonClientOpts): Promise<DaemonConnectResult>;
|
|
106
|
+
/**
|
|
107
|
+
* Connect to the daemon or print a layered, operator-friendly error and
|
|
108
|
+
* exit. Centralizes the "no daemon" messaging so every daemon-aware
|
|
109
|
+
* command produces consistent output. Returns null on failure (after
|
|
110
|
+
* having already called this.outputError and this.exit on the caller's
|
|
111
|
+
* behalf) — caller can early-return.
|
|
112
|
+
*/
|
|
113
|
+
protected connectDaemonOrExit(networkId: string, walletName: string, opts?: DaemonClientOpts): Promise<DaemonClient | null>;
|
|
114
|
+
/**
|
|
115
|
+
* Map a DaemonProtocolError onto the WalletErrorCategory taxonomy the
|
|
116
|
+
* CLI's outputError understands. Lets daemon-aware commands render
|
|
117
|
+
* RPC failures with the right category and a useful prefix rather
|
|
118
|
+
* than dumping every code as a generic WALLET_ERROR.
|
|
119
|
+
*/
|
|
120
|
+
protected renderDaemonError(err: unknown): {
|
|
121
|
+
category: WalletErrorCategory;
|
|
122
|
+
message: string;
|
|
123
|
+
};
|
|
124
|
+
protected resolveWalletName(flags: {
|
|
125
|
+
wallet?: string;
|
|
126
|
+
}): Promise<string>;
|
|
127
|
+
/**
|
|
128
|
+
* SR-003: Prompt for explicit confirmation before transaction submission.
|
|
129
|
+
* Shows transaction details and requires user to type 'yes'.
|
|
130
|
+
* In non-interactive mode, requires --yes flag.
|
|
131
|
+
*/
|
|
132
|
+
protected confirmTransaction(details: Record<string, string>, flags: {
|
|
133
|
+
yes?: boolean;
|
|
134
|
+
}): Promise<void>;
|
|
135
|
+
protected log_verbose(message: string): void;
|
|
136
|
+
protected promptWithDefault(prompt: string, defaultValue: string): Promise<string>;
|
|
137
|
+
protected promptIfMissing(value: string | undefined, prompt: string): Promise<string>;
|
|
138
|
+
/**
|
|
139
|
+
* Check installed @midnight-ntwrk/* package versions against the support matrix.
|
|
140
|
+
* Only runs if `moth config set check-matrix true` has been set.
|
|
141
|
+
* Emits warnings to stderr for mismatches — never blocks execution.
|
|
142
|
+
*/
|
|
143
|
+
protected checkSupportMatrix(): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Scan node_modules for installed @midnight-ntwrk/* package versions.
|
|
146
|
+
*/
|
|
147
|
+
private getInstalledMidnightVersions;
|
|
148
|
+
protected outputSuccess(data: unknown): void;
|
|
149
|
+
protected outputError(category: WalletErrorCategory, message: string, hint?: string): void;
|
|
150
|
+
protected catch(err: Error & {
|
|
151
|
+
exitCode?: number;
|
|
152
|
+
}): Promise<unknown>;
|
|
153
|
+
}
|
|
154
|
+
export {};
|
|
155
|
+
//# sourceMappingURL=base-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":"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"}
|