@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
@@ -0,0 +1,75 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { getPassphrase } from '../../adapters/passphrase.js';
4
+ export default class WalletGenerate extends BaseCommand {
5
+ static description = 'Generate a new wallet from a random BIP-39 mnemonic';
6
+ static flags = {
7
+ ...BaseCommand.baseFlags,
8
+ name: Flags.string({ description: 'Wallet name (auto-generated if omitted)' }),
9
+ 'show-mnemonic': Flags.boolean({
10
+ description: 'Include mnemonic in JSON output (use with caution)',
11
+ default: false,
12
+ }),
13
+ };
14
+ async run() {
15
+ const { flags } = await this.parse(WalletGenerate);
16
+ this.outputFormat = flags.output ?? 'text';
17
+ this.verbose = flags.verbose;
18
+ const name = flags.name ?? `wallet-${Date.now().toString(36)}`;
19
+ const passphrase = await getPassphrase('New passphrase: ');
20
+ this.log_verbose(`Generating wallet "${name}"`);
21
+ const info = await this.walletManager.generate(name, passphrase, flags.network);
22
+ if (this.outputFormat === 'json') {
23
+ const output = {
24
+ name: info.name,
25
+ network: info.network,
26
+ addresses: info.addresses,
27
+ };
28
+ // Mnemonic only in JSON if explicitly requested — prevents capture in
29
+ // CI logs, command wrappers, piped output. SR-001 / CWE-200.
30
+ if (flags['show-mnemonic']) {
31
+ output.mnemonic = info.mnemonic;
32
+ }
33
+ this.outputSuccess(output);
34
+ // Always show mnemonic on stderr (not stdout) so it's not captured
35
+ // by JSON consumers but still visible to the human operator.
36
+ if (!flags['show-mnemonic']) {
37
+ process.stderr.write('\nRECOVERY PHRASE (write this down and store it safely):\n');
38
+ process.stderr.write(`\n ${info.mnemonic}\n`);
39
+ process.stderr.write('\nThis phrase will NOT be shown again.\n\n');
40
+ }
41
+ }
42
+ else {
43
+ const a = info.addresses;
44
+ this.log(`Wallet created: ${info.name}`);
45
+ this.log(`Default network: ${info.network}`);
46
+ this.log('');
47
+ this.logAddress('NIGHT receive', 'Share this to receive unshielded NIGHT', a.nightExternal);
48
+ this.logAddress('NIGHT change', 'Internal change address (do not share)', a.nightInternal);
49
+ this.logAddress('DUST', 'DUST registration and fee payments', a.dust);
50
+ this.logAddress('Shielded', 'Zswap viewing key for private transactions', a.zswap);
51
+ this.logAddress('Contract authority', 'Signs contract maintenance operations', a.metadata);
52
+ this.log('');
53
+ // Mnemonic to stderr in text mode too — keeps stdout clean for piping
54
+ // while still showing the phrase to the operator's terminal.
55
+ if (process.stderr.isTTY) {
56
+ process.stderr.write('RECOVERY PHRASE (write this down and store it safely):\n');
57
+ process.stderr.write(`\n ${info.mnemonic}\n`);
58
+ process.stderr.write('\nThis phrase will NOT be shown again.\n');
59
+ }
60
+ else {
61
+ // Non-interactive (CI) — suppress mnemonic entirely unless --show-mnemonic
62
+ process.stderr.write('Recovery phrase generated but not displayed (non-interactive mode).\n');
63
+ process.stderr.write('Use --show-mnemonic to include it in JSON output.\n');
64
+ }
65
+ }
66
+ }
67
+ logAddress(label, description, addr) {
68
+ this.log(` ${label} (${description})`);
69
+ for (const [network, bech32m] of Object.entries(addr.bech32m)) {
70
+ this.log(` ${network.padEnd(8)} ${bech32m}`);
71
+ }
72
+ this.log('');
73
+ }
74
+ }
75
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/wallet/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class WalletImport extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
+ 'seed-hex': import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ private logAddress;
19
+ }
20
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/import.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAA2D;IAEtF,OAAgB,KAAK;;;;;;;;;;;;MAInB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAyE1B,OAAO,CAAC,UAAU;CAOnB"}
@@ -0,0 +1,85 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { getPassphrase } from '../../adapters/passphrase.js';
4
+ export default class WalletImport extends BaseCommand {
5
+ static description = 'Import a wallet from an existing mnemonic or hex seed';
6
+ static flags = {
7
+ ...BaseCommand.baseFlags,
8
+ name: Flags.string({ description: 'Wallet name' }),
9
+ 'seed-hex': Flags.boolean({ description: 'Import from hex seed instead of mnemonic', default: false }),
10
+ };
11
+ async run() {
12
+ const { flags } = await this.parse(WalletImport);
13
+ this.outputFormat = flags.output ?? 'text';
14
+ this.verbose = flags.verbose;
15
+ const name = flags.name ?? `wallet-${Date.now().toString(36)}`;
16
+ const passphrase = await getPassphrase('New passphrase: ');
17
+ let info;
18
+ if (flags['seed-hex']) {
19
+ // Hex seed via stdin pipe or interactive prompt — never as CLI argument.
20
+ // SR-001: seed material MUST NOT appear in process arguments.
21
+ // echo "abcdef..." | moth wallet import --seed-hex --name my-wallet
22
+ let hexSeed;
23
+ if (!process.stdin.isTTY) {
24
+ const chunks = [];
25
+ for await (const chunk of process.stdin) {
26
+ chunks.push(chunk);
27
+ }
28
+ hexSeed = Buffer.concat(chunks).toString('utf-8').trim();
29
+ if (!hexSeed) {
30
+ throw new (await import('@shieldedtech/moth-wallet')).WalletError('INVALID_INPUT', 'No hex seed provided on stdin. Pipe it: echo "$SEED" | moth wallet import --seed-hex');
31
+ }
32
+ }
33
+ else {
34
+ hexSeed = await this.promptIfMissing(undefined, 'Hex seed');
35
+ }
36
+ info = await this.walletManager.importFromSeed(name, hexSeed, passphrase, flags.network);
37
+ }
38
+ else {
39
+ // Mnemonic via stdin pipe or interactive prompt — never as env var or argument.
40
+ // SR-001: mnemonics MUST NOT appear in environment variables or process arguments.
41
+ // echo "word1 word2 ..." | moth wallet import --name ci-wallet
42
+ let mnemonic;
43
+ if (!process.stdin.isTTY) {
44
+ const chunks = [];
45
+ for await (const chunk of process.stdin) {
46
+ chunks.push(chunk);
47
+ }
48
+ mnemonic = Buffer.concat(chunks).toString('utf-8').trim();
49
+ if (!mnemonic) {
50
+ throw new (await import('@shieldedtech/moth-wallet')).WalletError('INVALID_INPUT', 'No mnemonic provided on stdin. Pipe it: echo "$MNEMONIC" | moth wallet import');
51
+ }
52
+ }
53
+ else {
54
+ mnemonic = await this.promptIfMissing(undefined, 'Recovery phrase (24 words)');
55
+ }
56
+ info = await this.walletManager.import(name, mnemonic.trim(), passphrase, flags.network);
57
+ }
58
+ if (this.outputFormat === 'json') {
59
+ this.outputSuccess({
60
+ name: info.name,
61
+ network: info.network,
62
+ addresses: info.addresses,
63
+ });
64
+ }
65
+ else {
66
+ const a = info.addresses;
67
+ this.log(`Wallet imported: ${info.name}`);
68
+ this.log(`Default network: ${info.network}`);
69
+ this.log('');
70
+ this.logAddress('NIGHT receive', 'Share this to receive unshielded NIGHT', a.nightExternal);
71
+ this.logAddress('NIGHT change', 'Internal change address (do not share)', a.nightInternal);
72
+ this.logAddress('DUST', 'DUST registration and fee payments', a.dust);
73
+ this.logAddress('Shielded', 'Zswap viewing key for private transactions', a.zswap);
74
+ this.logAddress('Contract authority', 'Signs contract maintenance operations', a.metadata);
75
+ }
76
+ }
77
+ logAddress(label, description, addr) {
78
+ this.log(` ${label} (${description})`);
79
+ for (const [network, bech32m] of Object.entries(addr.bech32m)) {
80
+ this.log(` ${network.padEnd(8)} ${bech32m}`);
81
+ }
82
+ this.log('');
83
+ }
84
+ }
85
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/wallet/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class WalletList extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,OAAgB,WAAW,SAAiC;IAE5D,OAAgB,KAAK;;;;;;;;;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB3B"}
@@ -0,0 +1,23 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class WalletList extends BaseCommand {
3
+ static description = 'List all configured wallets';
4
+ static flags = {
5
+ ...BaseCommand.baseFlags,
6
+ };
7
+ async run() {
8
+ const { flags } = await this.parse(WalletList);
9
+ this.outputFormat = flags.output ?? 'text';
10
+ const wallets = await this.walletManager.list();
11
+ if (wallets.length === 0) {
12
+ this.log('No wallets configured. Run: moth wallet generate');
13
+ return;
14
+ }
15
+ this.outputSuccess(wallets.map((w) => ({
16
+ name: w.name,
17
+ address: w.address,
18
+ network: w.network,
19
+ active: w.active ? '→' : '',
20
+ })));
21
+ }
22
+ }
23
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/wallet/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAU,WAAW,GAAG,6BAA6B,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;KACzB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAEhE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAEhD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAsE,EAAE,EAAE,CAAC,CAAC;YACvF,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;SAC5B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class WalletRemove extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ };
19
+ run(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/remove.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAAsD;IAEjF,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB3B"}
@@ -0,0 +1,31 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ export default class WalletRemove extends BaseCommand {
4
+ static description = 'Remove a wallet (requires confirmation or --yes)';
5
+ static args = {
6
+ name: Args.string({ description: 'Wallet name', required: false }),
7
+ };
8
+ static flags = {
9
+ ...BaseCommand.baseFlags,
10
+ yes: Flags.boolean({ default: false, description: 'Skip confirmation' }),
11
+ };
12
+ async run() {
13
+ const { args, flags } = await this.parse(WalletRemove);
14
+ this.outputFormat = flags.output ?? 'text';
15
+ const name = await this.promptIfMissing(args.name, 'Wallet name to remove');
16
+ // Require explicit --yes for non-interactive deletion (prevents accidental deletion in CI)
17
+ if (!flags.yes) {
18
+ if (!process.stdin.isTTY) {
19
+ throw new (await import('@shieldedtech/moth-wallet')).WalletError('INVALID_INPUT', 'Non-interactive wallet deletion requires --yes flag');
20
+ }
21
+ const confirm = await this.promptIfMissing(undefined, `Remove wallet "${name}"? (yes/no)`);
22
+ if (confirm.toLowerCase() !== 'yes' && confirm.toLowerCase() !== 'y') {
23
+ this.log('Cancelled.');
24
+ return;
25
+ }
26
+ }
27
+ await this.walletManager.remove(name);
28
+ this.outputSuccess({ removed: name });
29
+ }
30
+ }
31
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/wallet/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAU,WAAW,GAAG,kDAAkD,CAAC;IAEjF,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KACnE,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;KACzE,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAEhE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QAE5E,2FAA2F;QAC3F,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,WAAW,CAC/D,eAAe,EACf,qDAAqD,CACtD,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,kBAAkB,IAAI,aAAa,CAAC,CAAC;YAC3F,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACrE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACvB,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class WalletStatus extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ bind: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/status.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,WAAW,EAAoB,MAAM,uBAAuB,CAAC;AAqBrE,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SACoK;IAE/L,OAAgB,KAAK;;;;;;;;;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuD3B"}
@@ -0,0 +1,62 @@
1
+ // Read wallet state from the running TUI's daemon socket instead of
2
+ // spinning up a parallel sync. Requires the TUI to be running with the
3
+ // target wallet selected on the same network — there's no fallback to
4
+ // in-process sync here because the whole point of this command is to
5
+ // avoid the resync cost.
6
+ import { BaseCommand, daemonClientFlags } from '../../base-command.js';
7
+ export default class WalletStatus extends BaseCommand {
8
+ static description = "Show the running TUI's view of a wallet's sync progress and balances. Talks to the TUI daemon socket — does not start its own sync, so this is fast and won't fight the TUI for the cache.";
9
+ static flags = {
10
+ ...BaseCommand.baseFlags,
11
+ ...daemonClientFlags,
12
+ };
13
+ async run() {
14
+ const { flags } = await this.parse(WalletStatus);
15
+ this.outputFormat = flags.output ?? 'text';
16
+ this.verbose = flags.verbose;
17
+ const walletName = await this.resolveWalletName(flags);
18
+ const network = await this.getNetworkConfig(flags.network, this.getNetworkOverrides(flags));
19
+ const client = await this.connectDaemonOrExit(network.id, walletName, { bind: flags.bind });
20
+ if (!client)
21
+ return;
22
+ try {
23
+ const state = (await client.call('getState')) ?? { ready: false };
24
+ if (this.outputFormat === 'json') {
25
+ this.outputSuccess({ ...state, daemonVersion: client.daemonVersion });
26
+ return;
27
+ }
28
+ // Text mode — human summary.
29
+ this.log(`Wallet: ${state.walletName ?? walletName}`);
30
+ this.log(`Network: ${state.networkId ?? network.id}`);
31
+ this.log(`Daemon: ${client.daemonVersion}`);
32
+ if (!state.ready) {
33
+ this.log('Status: TUI is running but the wallet facade is still initializing. The wallet may be unlocking, syncing, or in onboarding — give it a moment and retry.');
34
+ return;
35
+ }
36
+ const pct = state.syncProgress
37
+ ? Math.round(state.syncProgress.percentage * 100)
38
+ : 0;
39
+ const eta = state.syncProgress?.etaSeconds;
40
+ const etaStr = eta === null || eta === undefined
41
+ ? ''
42
+ : ` (~${Math.max(0, Math.round(eta))}s remaining)`;
43
+ this.log(`Status: ${state.synced ? '● synced' : `○ syncing ${pct}%${etaStr}`}`);
44
+ if (state.balances) {
45
+ this.log('');
46
+ this.log('Balances (raw, SPECK units):');
47
+ const fmtMap = (m) => Object.entries(m)
48
+ .map(([k, v]) => ` ${k.slice(0, 16)}… ${v}`)
49
+ .join('\n') || ' (none)';
50
+ this.log(` shielded:`);
51
+ this.log(fmtMap(state.balances.shielded));
52
+ this.log(` unshielded:`);
53
+ this.log(fmtMap(state.balances.unshielded));
54
+ this.log(` dust: ${state.balances.dust}`);
55
+ }
56
+ }
57
+ finally {
58
+ client.close();
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/wallet/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class WalletUse extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ };
18
+ run(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/use.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,OAAgB,WAAW,SAA0B;IAErD,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ3B"}
@@ -0,0 +1,19 @@
1
+ import { Args } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ export default class WalletUse extends BaseCommand {
4
+ static description = 'Switch active wallet';
5
+ static args = {
6
+ name: Args.string({ description: 'Wallet name', required: false }),
7
+ };
8
+ static flags = {
9
+ ...BaseCommand.baseFlags,
10
+ };
11
+ async run() {
12
+ const { args, flags } = await this.parse(WalletUse);
13
+ this.outputFormat = flags.output ?? 'text';
14
+ const name = await this.promptIfMissing(args.name, 'Wallet name');
15
+ await this.walletManager.setActive(name);
16
+ this.outputSuccess({ active: name });
17
+ }
18
+ }
19
+ //# sourceMappingURL=use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../src/commands/wallet/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAU,WAAW,GAAG,sBAAsB,CAAC;IAErD,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KACnE,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;KACzB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAEhE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAClE,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { WalletErrorCategory } from '@shieldedtech/moth-wallet';
2
+ export type OutputFormat = 'text' | 'json';
3
+ export declare function formatOutput(data: unknown, format: OutputFormat): string;
4
+ export declare function formatError(category: WalletErrorCategory, message: string, format: OutputFormat, hint?: string): string;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAe3C,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAMxE;AA8CD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAUR"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Strip ANSI escape sequences and terminal control characters from a string.
3
+ * Prevents malicious/misconfigured remote endpoints from injecting terminal commands.
4
+ * CWE-117 mitigation.
5
+ */
6
+ function sanitizeTerminal(str) {
7
+ // Strip ANSI CSI sequences (ESC[...X), OSC sequences (ESC]...ST), and raw control chars
8
+ return str
9
+ .replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '') // CSI sequences
10
+ .replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, '') // OSC sequences
11
+ .replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ''); // Control chars (keep \t \n \r)
12
+ }
13
+ export function formatOutput(data, format) {
14
+ if (format === 'json') {
15
+ return JSON.stringify(data, null, 2);
16
+ }
17
+ // Text mode: sanitize terminal control characters from all output
18
+ return sanitizeTerminal(formatText(data));
19
+ }
20
+ function formatText(data) {
21
+ if (data === null || data === undefined)
22
+ return '';
23
+ if (typeof data === 'string')
24
+ return data;
25
+ if (typeof data === 'number' || typeof data === 'boolean')
26
+ return String(data);
27
+ if (Array.isArray(data)) {
28
+ if (data.length === 0)
29
+ return '(empty)';
30
+ // Table format for arrays of objects
31
+ if (typeof data[0] === 'object' && data[0] !== null) {
32
+ return formatTable(data);
33
+ }
34
+ return data.map(String).join('\n');
35
+ }
36
+ if (typeof data === 'object') {
37
+ return formatKeyValue(data);
38
+ }
39
+ return String(data);
40
+ }
41
+ function formatTable(rows) {
42
+ if (rows.length === 0)
43
+ return '';
44
+ const keys = Object.keys(rows[0]);
45
+ const widths = keys.map(k => Math.max(k.length, ...rows.map(r => String(r[k] ?? '').length)));
46
+ const header = keys.map((k, i) => k.padEnd(widths[i])).join(' ');
47
+ const separator = widths.map(w => '-'.repeat(w)).join(' ');
48
+ const body = rows.map(row => keys.map((k, i) => String(row[k] ?? '').padEnd(widths[i])).join(' '));
49
+ return [header, separator, ...body].join('\n');
50
+ }
51
+ function formatKeyValue(obj) {
52
+ const maxKeyLen = Math.max(...Object.keys(obj).map(k => k.length));
53
+ return Object.entries(obj)
54
+ .map(([key, value]) => `${key.padEnd(maxKeyLen)} ${String(value)}`)
55
+ .join('\n');
56
+ }
57
+ export function formatError(category, message, format, hint) {
58
+ if (format === 'json') {
59
+ return JSON.stringify({
60
+ error: { category, message, code: 1 },
61
+ });
62
+ }
63
+ let output = `Error [${category}]: ${sanitizeTerminal(message)}`;
64
+ if (hint)
65
+ output += `\n Hint: ${sanitizeTerminal(hint)}`;
66
+ return output;
67
+ }
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { execute } from '@oclif/core';
3
+ await execute({ dir: import.meta.url });
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC"}