@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.
Files changed (173) hide show
  1. package/README.md +67 -0
  2. package/dist/adapters/passphrase.d.ts +2 -0
  3. package/dist/adapters/passphrase.d.ts.map +1 -0
  4. package/dist/adapters/passphrase.js +62 -0
  5. package/dist/adapters/passphrase.js.map +1 -0
  6. package/dist/base-command.d.ts +155 -0
  7. package/dist/base-command.d.ts.map +1 -0
  8. package/dist/base-command.js +497 -0
  9. package/dist/base-command.js.map +1 -0
  10. package/dist/commands/airdrop.d.ts +18 -0
  11. package/dist/commands/airdrop.d.ts.map +1 -0
  12. package/dist/commands/airdrop.js +36 -0
  13. package/dist/commands/airdrop.js.map +1 -0
  14. package/dist/commands/balance.d.ts +18 -0
  15. package/dist/commands/balance.d.ts.map +1 -0
  16. package/dist/commands/balance.js +124 -0
  17. package/dist/commands/balance.js.map +1 -0
  18. package/dist/commands/call.d.ts +26 -0
  19. package/dist/commands/call.d.ts.map +1 -0
  20. package/dist/commands/call.js +102 -0
  21. package/dist/commands/call.js.map +1 -0
  22. package/dist/commands/config.d.ts +22 -0
  23. package/dist/commands/config.d.ts.map +1 -0
  24. package/dist/commands/config.js +50 -0
  25. package/dist/commands/config.js.map +1 -0
  26. package/dist/commands/daemon/call.d.ts +27 -0
  27. package/dist/commands/daemon/call.d.ts.map +1 -0
  28. package/dist/commands/daemon/call.js +108 -0
  29. package/dist/commands/daemon/call.js.map +1 -0
  30. package/dist/commands/daemon/deploy.d.ts +27 -0
  31. package/dist/commands/daemon/deploy.d.ts.map +1 -0
  32. package/dist/commands/daemon/deploy.js +105 -0
  33. package/dist/commands/daemon/deploy.js.map +1 -0
  34. package/dist/commands/daemon/dust/deregister.d.ts +19 -0
  35. package/dist/commands/daemon/dust/deregister.d.ts.map +1 -0
  36. package/dist/commands/daemon/dust/deregister.js +52 -0
  37. package/dist/commands/daemon/dust/deregister.js.map +1 -0
  38. package/dist/commands/daemon/dust/register.d.ts +20 -0
  39. package/dist/commands/daemon/dust/register.d.ts.map +1 -0
  40. package/dist/commands/daemon/dust/register.js +60 -0
  41. package/dist/commands/daemon/dust/register.js.map +1 -0
  42. package/dist/commands/daemon/key/gen.d.ts +19 -0
  43. package/dist/commands/daemon/key/gen.d.ts.map +1 -0
  44. package/dist/commands/daemon/key/gen.js +66 -0
  45. package/dist/commands/daemon/key/gen.js.map +1 -0
  46. package/dist/commands/daemon/key/list.d.ts +17 -0
  47. package/dist/commands/daemon/key/list.d.ts.map +1 -0
  48. package/dist/commands/daemon/key/list.js +43 -0
  49. package/dist/commands/daemon/key/list.js.map +1 -0
  50. package/dist/commands/daemon/key/revoke.d.ts +20 -0
  51. package/dist/commands/daemon/key/revoke.d.ts.map +1 -0
  52. package/dist/commands/daemon/key/revoke.js +37 -0
  53. package/dist/commands/daemon/key/revoke.js.map +1 -0
  54. package/dist/commands/daemon/maintenance/insert-vk.d.ts +24 -0
  55. package/dist/commands/daemon/maintenance/insert-vk.d.ts.map +1 -0
  56. package/dist/commands/daemon/maintenance/insert-vk.js +87 -0
  57. package/dist/commands/daemon/maintenance/insert-vk.js.map +1 -0
  58. package/dist/commands/daemon/maintenance/insert-vks-batch.d.ts +24 -0
  59. package/dist/commands/daemon/maintenance/insert-vks-batch.d.ts.map +1 -0
  60. package/dist/commands/daemon/maintenance/insert-vks-batch.js +117 -0
  61. package/dist/commands/daemon/maintenance/insert-vks-batch.js.map +1 -0
  62. package/dist/commands/daemon/serve.d.ts +23 -0
  63. package/dist/commands/daemon/serve.d.ts.map +1 -0
  64. package/dist/commands/daemon/serve.js +289 -0
  65. package/dist/commands/daemon/serve.js.map +1 -0
  66. package/dist/commands/daemon/submit-tx.d.ts +22 -0
  67. package/dist/commands/daemon/submit-tx.d.ts.map +1 -0
  68. package/dist/commands/daemon/submit-tx.js +89 -0
  69. package/dist/commands/daemon/submit-tx.js.map +1 -0
  70. package/dist/commands/daemon/transfer.d.ts +24 -0
  71. package/dist/commands/daemon/transfer.d.ts.map +1 -0
  72. package/dist/commands/daemon/transfer.js +135 -0
  73. package/dist/commands/daemon/transfer.js.map +1 -0
  74. package/dist/commands/deploy.d.ts +26 -0
  75. package/dist/commands/deploy.d.ts.map +1 -0
  76. package/dist/commands/deploy.js +135 -0
  77. package/dist/commands/deploy.js.map +1 -0
  78. package/dist/commands/dust/deregister.d.ts +18 -0
  79. package/dist/commands/dust/deregister.d.ts.map +1 -0
  80. package/dist/commands/dust/deregister.js +48 -0
  81. package/dist/commands/dust/deregister.js.map +1 -0
  82. package/dist/commands/dust/register.d.ts +21 -0
  83. package/dist/commands/dust/register.d.ts.map +1 -0
  84. package/dist/commands/dust/register.js +120 -0
  85. package/dist/commands/dust/register.js.map +1 -0
  86. package/dist/commands/dust/status.d.ts +17 -0
  87. package/dist/commands/dust/status.d.ts.map +1 -0
  88. package/dist/commands/dust/status.js +47 -0
  89. package/dist/commands/dust/status.js.map +1 -0
  90. package/dist/commands/info.d.ts +17 -0
  91. package/dist/commands/info.d.ts.map +1 -0
  92. package/dist/commands/info.js +37 -0
  93. package/dist/commands/info.js.map +1 -0
  94. package/dist/commands/maintenance/insert-vk.d.ts +23 -0
  95. package/dist/commands/maintenance/insert-vk.d.ts.map +1 -0
  96. package/dist/commands/maintenance/insert-vk.js +92 -0
  97. package/dist/commands/maintenance/insert-vk.js.map +1 -0
  98. package/dist/commands/maintenance/insert-vks-batch.d.ts +23 -0
  99. package/dist/commands/maintenance/insert-vks-batch.d.ts.map +1 -0
  100. package/dist/commands/maintenance/insert-vks-batch.js +130 -0
  101. package/dist/commands/maintenance/insert-vks-batch.js.map +1 -0
  102. package/dist/commands/mint.d.ts +24 -0
  103. package/dist/commands/mint.d.ts.map +1 -0
  104. package/dist/commands/mint.js +116 -0
  105. package/dist/commands/mint.js.map +1 -0
  106. package/dist/commands/state.d.ts +20 -0
  107. package/dist/commands/state.d.ts.map +1 -0
  108. package/dist/commands/state.js +36 -0
  109. package/dist/commands/state.js.map +1 -0
  110. package/dist/commands/transfer/batch.d.ts +21 -0
  111. package/dist/commands/transfer/batch.d.ts.map +1 -0
  112. package/dist/commands/transfer/batch.js +71 -0
  113. package/dist/commands/transfer/batch.js.map +1 -0
  114. package/dist/commands/transfer.d.ts +24 -0
  115. package/dist/commands/transfer.d.ts.map +1 -0
  116. package/dist/commands/transfer.js +123 -0
  117. package/dist/commands/transfer.js.map +1 -0
  118. package/dist/commands/tui.d.ts +17 -0
  119. package/dist/commands/tui.d.ts.map +1 -0
  120. package/dist/commands/tui.js +18 -0
  121. package/dist/commands/tui.js.map +1 -0
  122. package/dist/commands/wallet/address.d.ts +25 -0
  123. package/dist/commands/wallet/address.d.ts.map +1 -0
  124. package/dist/commands/wallet/address.js +47 -0
  125. package/dist/commands/wallet/address.js.map +1 -0
  126. package/dist/commands/wallet/generate.d.ts +20 -0
  127. package/dist/commands/wallet/generate.d.ts.map +1 -0
  128. package/dist/commands/wallet/generate.js +75 -0
  129. package/dist/commands/wallet/generate.js.map +1 -0
  130. package/dist/commands/wallet/import.d.ts +20 -0
  131. package/dist/commands/wallet/import.d.ts.map +1 -0
  132. package/dist/commands/wallet/import.js +85 -0
  133. package/dist/commands/wallet/import.js.map +1 -0
  134. package/dist/commands/wallet/list.d.ts +17 -0
  135. package/dist/commands/wallet/list.d.ts.map +1 -0
  136. package/dist/commands/wallet/list.js +23 -0
  137. package/dist/commands/wallet/list.js.map +1 -0
  138. package/dist/commands/wallet/remove.d.ts +21 -0
  139. package/dist/commands/wallet/remove.d.ts.map +1 -0
  140. package/dist/commands/wallet/remove.js +31 -0
  141. package/dist/commands/wallet/remove.js.map +1 -0
  142. package/dist/commands/wallet/status.d.ts +18 -0
  143. package/dist/commands/wallet/status.d.ts.map +1 -0
  144. package/dist/commands/wallet/status.js +62 -0
  145. package/dist/commands/wallet/status.js.map +1 -0
  146. package/dist/commands/wallet/use.d.ts +20 -0
  147. package/dist/commands/wallet/use.d.ts.map +1 -0
  148. package/dist/commands/wallet/use.js +19 -0
  149. package/dist/commands/wallet/use.js.map +1 -0
  150. package/dist/formatters/index.d.ts +5 -0
  151. package/dist/formatters/index.d.ts.map +1 -0
  152. package/dist/formatters/index.js +68 -0
  153. package/dist/formatters/index.js.map +1 -0
  154. package/dist/index.d.ts +3 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +4 -0
  157. package/dist/index.js.map +1 -0
  158. package/package.json +53 -0
  159. package/templates/dapp/api/package.json +21 -0
  160. package/templates/dapp/api/src/index.ts +2 -0
  161. package/templates/dapp/api/src/providers.ts +23 -0
  162. package/templates/dapp/api/src/types.ts +23 -0
  163. package/templates/dapp/api/tsconfig.json +11 -0
  164. package/templates/dapp/root/README.md +20 -0
  165. package/templates/dapp/root/tsconfig.json +15 -0
  166. package/templates/dapp/ui/index.html +13 -0
  167. package/templates/dapp/ui/package.json +24 -0
  168. package/templates/dapp/ui/public/vite.svg +1 -0
  169. package/templates/dapp/ui/src/App.tsx +36 -0
  170. package/templates/dapp/ui/src/index.css +29 -0
  171. package/templates/dapp/ui/src/main.tsx +10 -0
  172. package/templates/dapp/ui/tsconfig.json +8 -0
  173. 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,2 @@
1
+ export declare function getPassphrase(prompt?: string): Promise<string>;
2
+ //# sourceMappingURL=passphrase.d.ts.map
@@ -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":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAM,GAAG,cAAc;IACzD,wDAAwD;IACxD,mDAAmD;IACnD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,sDAAsD;IACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,WAAW,CACnB,cAAc,EACd,+BAA+B,OAAO,gDAAgD,CACvF,CAAC;IACJ,CAAC;IAED,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,6DAA6D;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE7B,gEAAgE;QAChE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE1B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC/C,yBAAyB;gBACzB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE3B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,WAAW,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC,CAAC;oBACtE,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,iBAAiB;gBACjB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACxC,YAAY;gBACZ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;gBACtD,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjC,sBAAsB;gBACtB,KAAK,IAAI,CAAC,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC;YAChE,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -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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"}