@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,105 @@
1
+ // Deploy a compiled Compact contract through the running TUI daemon.
2
+ // The CLI sends the artifact path (a TUI-host-local filesystem path);
3
+ // the TUI loads the artifact, optionally imports a witness module,
4
+ // derives keys from its in-memory walletKeys, builds + balances +
5
+ // proves (via the proof server) + signs + submits the deploy
6
+ // transaction. Spending keys never leave the TUI; the CLI sees only
7
+ // the resulting on-chain TransactionResult including the new
8
+ // contract's bech32m address.
9
+ import { Args, Flags } from '@oclif/core';
10
+ import { resolve } from 'node:path';
11
+ import { BaseCommand, daemonClientFlags } from '../../base-command.js';
12
+ export default class DaemonDeploy extends BaseCommand {
13
+ static description = 'Deploy a compiled Compact contract through the running TUI daemon. The TUI does the whole pipeline (load artifact, balance, prove via the proof server, sign, submit); spending keys never leave the TUI. Triggers an L3 confirmation modal showing the artifact, circuit list, and witness path.';
14
+ static args = {
15
+ artifact: Args.string({
16
+ description: 'Path to compiled contract artifact directory (managed/<contract>) on the TUI host',
17
+ required: false,
18
+ }),
19
+ };
20
+ static flags = {
21
+ ...BaseCommand.baseFlags,
22
+ ...daemonClientFlags,
23
+ artifact: Flags.string({
24
+ description: 'Path to compiled contract artifact (alternative to positional arg)',
25
+ }),
26
+ witnesses: Flags.string({
27
+ description: 'Path to witness provider JS file on the TUI host',
28
+ }),
29
+ 'project-dir': Flags.string({
30
+ description: 'Project directory for SDK dependency resolution',
31
+ env: 'MOTH_PROJECT_DIR',
32
+ }),
33
+ args: Flags.string({
34
+ description: 'Constructor arguments as JSON or @file.json (same convention as `deploy --args`; @file resolved on the TUI host)',
35
+ }),
36
+ 'private-state': Flags.string({
37
+ description: 'Initial private state as JSON or @file.json (same convention as `deploy --private-state`; @file resolved on the TUI host)',
38
+ }),
39
+ 'timeout-ms': Flags.integer({
40
+ description: 'Override the RPC timeout (default: 600000 — deploys can take ~minutes to prove)',
41
+ default: 600_000,
42
+ }),
43
+ };
44
+ async run() {
45
+ const { args, flags } = await this.parse(DaemonDeploy);
46
+ this.outputFormat = flags.output ?? 'text';
47
+ this.verbose = flags.verbose;
48
+ const artifactRaw = flags.artifact ?? args.artifact;
49
+ if (!artifactRaw) {
50
+ this.outputError('INVALID_INPUT', 'artifact path required (positional or --artifact)');
51
+ this.exit(2);
52
+ return;
53
+ }
54
+ const walletName = await this.resolveWalletName(flags);
55
+ const network = await this.getNetworkConfig(flags.network, this.getNetworkOverrides(flags));
56
+ const artifactPath = resolve(artifactRaw);
57
+ const witnessesPath = flags.witnesses ? resolve(flags.witnesses) : undefined;
58
+ const projectDir = flags['project-dir'] ? resolve(flags['project-dir']) : undefined;
59
+ const client = await this.connectDaemonOrExit(network.id, walletName, { bind: flags.bind });
60
+ if (!client)
61
+ return;
62
+ try {
63
+ const state = await client.call('getState');
64
+ if (!state.ready) {
65
+ this.outputError('WALLET_ERROR', `TUI is running but the wallet facade for "${walletName}" is still initializing on ${network.id}. Wait for sync and retry.`);
66
+ this.exit(1);
67
+ return;
68
+ }
69
+ this.log_verbose(`Deploying ${artifactPath} via daemon ${client.daemonVersion}`);
70
+ const result = await client.call('deployContract', {
71
+ artifactPath,
72
+ witnessesPath,
73
+ projectDir,
74
+ args: flags.args,
75
+ privateState: flags['private-state'],
76
+ }, { timeoutMs: flags['timeout-ms'] });
77
+ if (this.outputFormat === 'json') {
78
+ this.outputSuccess(result);
79
+ }
80
+ else {
81
+ this.log(`Deployed. Transaction hash: ${result.txHash}`);
82
+ if (result.contractAddress)
83
+ this.log(`Contract address: ${result.contractAddress}`);
84
+ this.log(`Status: ${result.status}`);
85
+ if (result.blockHash)
86
+ this.log(`Block hash: ${result.blockHash}`);
87
+ if (result.blockHeight !== null)
88
+ this.log(`Block height: ${result.blockHeight}`);
89
+ if (result.fees) {
90
+ this.log(`Fees: paid ${result.fees.paid}, estimated ${result.fees.estimated}`);
91
+ }
92
+ }
93
+ }
94
+ catch (err) {
95
+ const { category, message } = this.renderDaemonError(err);
96
+ this.outputError(category, message);
97
+ this.exit(1);
98
+ return;
99
+ }
100
+ finally {
101
+ client.close();
102
+ }
103
+ }
104
+ }
105
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/daemon/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../../base-command.js';
2
+ export default class DaemonDustDeregister extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ 'timeout-ms': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
6
+ bind: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
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
+ }
19
+ //# sourceMappingURL=deregister.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deregister.d.ts","sourceRoot":"","sources":["../../../../src/commands/daemon/dust/deregister.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,WAAW,EAAoB,MAAM,0BAA0B,CAAC;AAMxE,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,WAAW;IAC3D,OAAgB,WAAW,SACsJ;IAEjL,OAAgB,KAAK;;;;;;;;;;;;MAOnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0C3B"}
@@ -0,0 +1,52 @@
1
+ // Deregister the wallet's NIGHT UTXOs from DUST generation through
2
+ // the running TUI daemon. Reverses dustRegister. The TUI handles the
3
+ // full pipeline. Triggers an L3 confirmation modal warning that DUST
4
+ // will stop generating from these UTXOs.
5
+ import { Flags } from '@oclif/core';
6
+ import { BaseCommand, daemonClientFlags } from '../../../base-command.js';
7
+ export default class DaemonDustDeregister extends BaseCommand {
8
+ static description = 'Deregister NIGHT UTXOs from DUST generation via the running TUI daemon. Deregisters every currently-registered NIGHT UTXO. DUST stops generating from these UTXOs afterward.';
9
+ static flags = {
10
+ ...BaseCommand.baseFlags,
11
+ ...daemonClientFlags,
12
+ 'timeout-ms': Flags.integer({
13
+ description: 'Override the RPC timeout (default: 300000)',
14
+ default: 300_000,
15
+ }),
16
+ };
17
+ async run() {
18
+ const { flags } = await this.parse(DaemonDustDeregister);
19
+ this.outputFormat = flags.output ?? 'text';
20
+ this.verbose = flags.verbose;
21
+ const walletName = await this.resolveWalletName(flags);
22
+ const network = await this.getNetworkConfig(flags.network, this.getNetworkOverrides(flags));
23
+ const client = await this.connectDaemonOrExit(network.id, walletName, { bind: flags.bind });
24
+ if (!client)
25
+ return;
26
+ try {
27
+ const state = await client.call('getState');
28
+ if (!state.ready) {
29
+ this.outputError('WALLET_ERROR', `TUI is running but the wallet facade for "${walletName}" is still initializing on ${network.id}. Wait for sync and retry.`);
30
+ this.exit(1);
31
+ return;
32
+ }
33
+ const result = await client.call('dustDeregister', {}, { timeoutMs: flags['timeout-ms'] });
34
+ if (this.outputFormat === 'json') {
35
+ this.outputSuccess(result);
36
+ }
37
+ else {
38
+ this.log(`Deregistered. Transaction id: ${result.txId}`);
39
+ }
40
+ }
41
+ catch (err) {
42
+ const { category, message } = this.renderDaemonError(err);
43
+ this.outputError(category, message);
44
+ this.exit(1);
45
+ return;
46
+ }
47
+ finally {
48
+ client.close();
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=deregister.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deregister.js","sourceRoot":"","sources":["../../../../src/commands/daemon/dust/deregister.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,qEAAqE;AACrE,qEAAqE;AACrE,yCAAyC;AAEzC,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAMxE,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,WAAW;IAC3D,MAAM,CAAU,WAAW,GACzB,8KAA8K,CAAC;IAEjL,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,GAAG,iBAAiB;QACpB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;YAC1B,WAAW,EAAE,4CAA4C;YACzD,OAAO,EAAE,OAAO;SACjB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAmB,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,WAAW,CACd,cAAc,EACd,6CAA6C,UAAU,8BAA8B,OAAO,CAAC,EAAE,4BAA4B,CAC5H,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,gBAAgB,EAChB,EAAE,EACF,EAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,EAAC,CACjC,CAAC;YAEF,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,EAAC,QAAQ,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../../base-command.js';
2
+ export default class DaemonDustRegister extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ receiver: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
+ 'timeout-ms': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
7
+ bind: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
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=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/commands/daemon/dust/register.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,WAAW,EAAoB,MAAM,0BAA0B,CAAC;AAOxE,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,OAAgB,WAAW,SACsJ;IAEjL,OAAgB,KAAK;;;;;;;;;;;;;MAUnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
@@ -0,0 +1,60 @@
1
+ // Register the wallet's NIGHT UTXOs for DUST generation through the
2
+ // running TUI daemon. The TUI handles the full pipeline (select
3
+ // UTXOs, build, sign, submit). Spending keys never leave the TUI.
4
+ // Triggers an L3 confirmation modal showing the wallet, the dust
5
+ // receiver (default: this wallet), and that every unregistered NIGHT
6
+ // UTXO will be registered.
7
+ import { Flags } from '@oclif/core';
8
+ import { BaseCommand, daemonClientFlags } from '../../../base-command.js';
9
+ export default class DaemonDustRegister extends BaseCommand {
10
+ static description = 'Register NIGHT UTXOs for DUST generation via the running TUI daemon. Registers every currently-unregistered NIGHT UTXO. Returns null txId when there\'s nothing to register.';
11
+ static flags = {
12
+ ...BaseCommand.baseFlags,
13
+ ...daemonClientFlags,
14
+ receiver: Flags.string({
15
+ description: 'Dust receiver address (default: this wallet\'s own dust address)',
16
+ }),
17
+ 'timeout-ms': Flags.integer({
18
+ description: 'Override the RPC timeout (default: 300000)',
19
+ default: 300_000,
20
+ }),
21
+ };
22
+ async run() {
23
+ const { flags } = await this.parse(DaemonDustRegister);
24
+ this.outputFormat = flags.output ?? 'text';
25
+ this.verbose = flags.verbose;
26
+ const walletName = await this.resolveWalletName(flags);
27
+ const network = await this.getNetworkConfig(flags.network, this.getNetworkOverrides(flags));
28
+ const client = await this.connectDaemonOrExit(network.id, walletName, { bind: flags.bind });
29
+ if (!client)
30
+ return;
31
+ try {
32
+ const state = await client.call('getState');
33
+ if (!state.ready) {
34
+ this.outputError('WALLET_ERROR', `TUI is running but the wallet facade for "${walletName}" is still initializing on ${network.id}. Wait for sync and retry.`);
35
+ this.exit(1);
36
+ return;
37
+ }
38
+ const result = await client.call('dustRegister', { receiver: flags.receiver }, { timeoutMs: flags['timeout-ms'] });
39
+ if (this.outputFormat === 'json') {
40
+ this.outputSuccess(result);
41
+ }
42
+ else if (result.registered) {
43
+ this.log(`Registered. Transaction id: ${result.txId}`);
44
+ }
45
+ else {
46
+ this.log('No unregistered NIGHT UTXOs — nothing to do.');
47
+ }
48
+ }
49
+ catch (err) {
50
+ const { category, message } = this.renderDaemonError(err);
51
+ this.outputError(category, message);
52
+ this.exit(1);
53
+ return;
54
+ }
55
+ finally {
56
+ client.close();
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../src/commands/daemon/dust/register.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,gEAAgE;AAChE,kEAAkE;AAClE,iEAAiE;AACjE,qEAAqE;AACrE,2BAA2B;AAE3B,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAOxE,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,MAAM,CAAU,WAAW,GACzB,8KAA8K,CAAC;IAEjL,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,GAAG,iBAAiB;QACpB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,WAAW,EAAE,kEAAkE;SAChF,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;YAC1B,WAAW,EAAE,4CAA4C;YACzD,OAAO,EAAE,OAAO;SACjB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAmB,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,WAAW,CACd,cAAc,EACd,6CAA6C,UAAU,8BAA8B,OAAO,CAAC,EAAE,4BAA4B,CAC5H,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,cAAc,EACd,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAC,EAC1B,EAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,EAAC,CACjC,CAAC;YAEF,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,EAAC,QAAQ,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../../base-command.js';
2
+ export default class DaemonKeyGen extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ label: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ scopes: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
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
+ }
19
+ //# sourceMappingURL=gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../../../src/commands/daemon/key/gen.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SACiP;IAE5Q,OAAgB,KAAK;;;;;;;;;;;;MAUnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD3B"}
@@ -0,0 +1,66 @@
1
+ // Generate a new API key for the daemon. The plaintext token
2
+ // `<id>.<secret>` is printed once on stdout and never persisted
3
+ // in recoverable form — capture it now or generate a new key.
4
+ import { Flags } from '@oclif/core';
5
+ import { ApiKeyStore } from '@shieldedtech/moth-wallet';
6
+ import { BaseCommand } from '../../../base-command.js';
7
+ export default class DaemonKeyGen extends BaseCommand {
8
+ static description = 'Generate a new API key for the daemon. The plaintext token is printed once on stdout — capture it now; the daemon stores only a hash and the plaintext cannot be recovered. Required for clients of `moth daemon serve --transport tcp` once stage-2 AuthN is enforced.';
9
+ static flags = {
10
+ ...BaseCommand.baseFlags,
11
+ label: Flags.string({
12
+ description: 'Human label for this key. Surfaces in `moth daemon key list` and in the daemon\'s audit log when the key authenticates.',
13
+ required: true,
14
+ }),
15
+ scopes: Flags.string({
16
+ description: 'Comma-separated scopes for this key. `read` allows `getState`; `write` allows every L3-gated write verb (transfer, deploy, call, dust, maintenance). Use `read,write` for a key with full access (the default), or just `read` for a dashboard/observer key that cannot spend.',
17
+ default: 'write',
18
+ }),
19
+ };
20
+ async run() {
21
+ const { flags } = await this.parse(DaemonKeyGen);
22
+ this.outputFormat = flags.output ?? 'text';
23
+ const scopes = flags.scopes
24
+ .split(',')
25
+ .map((s) => s.trim())
26
+ .filter((s) => s.length > 0);
27
+ const store = new ApiKeyStore();
28
+ let generated;
29
+ try {
30
+ generated = store.generate(flags.label, scopes);
31
+ }
32
+ catch (err) {
33
+ const msg = err instanceof Error ? err.message : String(err);
34
+ this.outputError('INVALID_INPUT', msg);
35
+ this.exit(2);
36
+ return;
37
+ }
38
+ const { record, token } = generated;
39
+ if (this.outputFormat === 'json') {
40
+ // The token is included so machine consumers can capture it
41
+ // programmatically — the daemon never persists it, so there's
42
+ // no way to recover it after this single emission.
43
+ this.outputSuccess({
44
+ id: record.id,
45
+ label: record.label,
46
+ scopes: record.scopes ?? ['write'],
47
+ token,
48
+ createdAt: record.createdAt,
49
+ directory: store.directory,
50
+ });
51
+ return;
52
+ }
53
+ this.log(`API key created: ${record.id} (${record.label})`);
54
+ this.log(`Scopes: ${(record.scopes ?? ['write']).join(', ')}`);
55
+ this.log(`Stored: ${store.directory}/${record.id}.key (mode 0600)`);
56
+ this.log('');
57
+ this.log('Token (capture this — it is shown ONCE):');
58
+ this.log('');
59
+ this.log(` ${token}`);
60
+ this.log('');
61
+ this.log('Usage:');
62
+ this.log(' MOTH_DAEMON_TOKEN=<token> moth wallet status --bind 127.0.0.1:<port>');
63
+ this.log(' connectDaemonTcp(host, port, {token}) # programmatic client');
64
+ }
65
+ }
66
+ //# sourceMappingURL=gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.js","sourceRoot":"","sources":["../../../../src/commands/daemon/key/gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../../base-command.js';
2
+ export default class DaemonKeyList 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/daemon/key/list.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,OAAgB,WAAW,SACsG;IAEjI,OAAgB,KAAK;;;;;;;;;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmC3B"}
@@ -0,0 +1,43 @@
1
+ // List API keys from ~/.moth/api-keys/. Plaintext secrets are
2
+ // never shown — `moth daemon key gen` is the only path that
3
+ // surfaces them, once.
4
+ import { ApiKeyStore } from '@shieldedtech/moth-wallet';
5
+ import { BaseCommand } from '../../../base-command.js';
6
+ export default class DaemonKeyList extends BaseCommand {
7
+ static description = 'List API keys configured for the daemon. Shows id, label, creation time, and revocation status — never the plaintext secret.';
8
+ static flags = {
9
+ ...BaseCommand.baseFlags,
10
+ };
11
+ async run() {
12
+ const { flags } = await this.parse(DaemonKeyList);
13
+ this.outputFormat = flags.output ?? 'text';
14
+ const store = new ApiKeyStore();
15
+ const records = store.list();
16
+ if (this.outputFormat === 'json') {
17
+ this.outputSuccess({
18
+ directory: store.directory,
19
+ keys: records.map((r) => ({
20
+ id: r.id,
21
+ label: r.label,
22
+ scopes: r.scopes ?? ['write'],
23
+ createdAt: r.createdAt,
24
+ revokedAt: r.revokedAt ?? null,
25
+ })),
26
+ });
27
+ return;
28
+ }
29
+ if (records.length === 0) {
30
+ this.log(`No API keys in ${store.directory}.`);
31
+ this.log('Generate one with: moth daemon key gen --label "<purpose>"');
32
+ return;
33
+ }
34
+ this.log(`${records.length} key${records.length === 1 ? '' : 's'} in ${store.directory}:`);
35
+ this.log('');
36
+ for (const r of records.slice().sort((a, b) => a.createdAt.localeCompare(b.createdAt))) {
37
+ const status = r.revokedAt ? `revoked ${r.revokedAt}` : 'active';
38
+ const scopes = (r.scopes ?? ['write']).join('+');
39
+ this.log(` ${r.id} ${r.label.padEnd(30)} ${scopes.padEnd(12)} ${status} (created ${r.createdAt})`);
40
+ }
41
+ }
42
+ }
43
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/daemon/key/list.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,4DAA4D;AAC5D,uBAAuB;AAEvB,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAU,WAAW,GACzB,8HAA8H,CAAC;IAEjI,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;KACzB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAEhE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC;gBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACxB,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;oBAC7B,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI;iBAC/B,CAAC,CAAC;aACJ,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QAC3F,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACvF,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjE,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,cAAc,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../../base-command.js';
2
+ export default class DaemonKeyRevoke extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ id: import("@oclif/core/interfaces").Arg<string, 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=revoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../../../src/commands/daemon/key/revoke.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,OAAgB,WAAW,SACmJ;IAE9K,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B"}
@@ -0,0 +1,37 @@
1
+ // Mark an API key as revoked. The on-disk record is kept (its id
2
+ // still shows up in old audit lines) but the daemon's auth handler
3
+ // refuses to authenticate the key. There is no un-revoke — generate
4
+ // a new key if the operator needs continued access.
5
+ import { Args } from '@oclif/core';
6
+ import { ApiKeyStore } from '@shieldedtech/moth-wallet';
7
+ import { BaseCommand } from '../../../base-command.js';
8
+ export default class DaemonKeyRevoke extends BaseCommand {
9
+ static description = 'Revoke an API key by id. The record stays on disk so old audit entries still reference a real id, but the daemon refuses to authenticate the key from this point forward.';
10
+ static args = {
11
+ id: Args.string({ description: 'API key id (8 hex chars)', required: true }),
12
+ };
13
+ static flags = {
14
+ ...BaseCommand.baseFlags,
15
+ };
16
+ async run() {
17
+ const { args, flags } = await this.parse(DaemonKeyRevoke);
18
+ this.outputFormat = flags.output ?? 'text';
19
+ const store = new ApiKeyStore();
20
+ const updated = store.revoke(args.id);
21
+ if (!updated) {
22
+ this.outputError('INVALID_INPUT', `no API key with id "${args.id}" in ${store.directory}`);
23
+ this.exit(2);
24
+ return;
25
+ }
26
+ if (this.outputFormat === 'json') {
27
+ this.outputSuccess({
28
+ id: updated.id,
29
+ label: updated.label,
30
+ revokedAt: updated.revokedAt,
31
+ });
32
+ return;
33
+ }
34
+ this.log(`Revoked API key ${updated.id} (${updated.label}) at ${updated.revokedAt}.`);
35
+ }
36
+ }
37
+ //# sourceMappingURL=revoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../../../src/commands/daemon/key/revoke.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,mEAAmE;AACnE,oEAAoE;AACpE,oDAAoD;AAEpD,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,MAAM,CAAU,WAAW,GACzB,2KAA2K,CAAC;IAE9K,MAAM,CAAU,IAAI,GAAG;QACrB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KAC3E,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;KACzB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAEhE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,uBAAuB,IAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3F,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC;gBACjB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,KAAK,QAAQ,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;IACxF,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { BaseCommand } from '../../../base-command.js';
2
+ export default class DaemonMaintenanceInsertVk extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ address: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ 'circuit-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ 'vk-file': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ artifact: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'project-dir': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'timeout-ms': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
11
+ bind: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ };
22
+ run(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=insert-vk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-vk.d.ts","sourceRoot":"","sources":["../../../../src/commands/daemon/maintenance/insert-vk.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,WAAW,EAAoB,MAAM,0BAA0B,CAAC;AAWxE,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,WAAW;IAChE,OAAgB,WAAW,SAC2I;IAEtK,OAAgB,KAAK;;;;;;;;;;;;;;;;;MA2BnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuD3B"}