@aaronbassett/midnight-local-devnet 0.1.1 → 0.1.2

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.
@@ -1,77 +1,163 @@
1
1
  import { stdin as input, stdout as output } from 'node:process';
2
2
  import { createInterface } from 'node:readline/promises';
3
3
  import { fundAccount, fundAccountsFromFile } from '../core/funding.js';
4
- import { generateAccounts, writeAccountsFile } from '../core/accounts.js';
4
+ import { generateAccounts, generateAndFundAccounts, writeAccountsFile } from '../core/accounts.js';
5
5
  import { getWalletBalances } from '../core/wallet.js';
6
+ import { checkAllHealth } from '../core/health.js';
7
+ const MENU = `
8
+ [1] Start network
9
+ [2] Stop network
10
+ [3] Restart network
11
+ [4] Network status
12
+ [5] Service logs
13
+ [6] Health check
14
+ [7] Wallet balances
15
+ [8] Fund account by address
16
+ [9] Fund accounts from file
17
+ [10] Generate test accounts
18
+ [0] Exit
19
+ `;
6
20
  export async function startInteractiveMode(manager) {
7
21
  const rli = createInterface({ input, output });
8
22
  console.log('Midnight Local Devnet — Interactive Mode\n');
9
23
  if (manager.getStatus() === 'running') {
10
24
  console.log('Detected running network. Initializing wallet...');
11
25
  await manager.ensureWallet();
12
- console.log('Ready.\n');
26
+ console.log('Ready.');
13
27
  }
14
- else {
15
- console.log('Starting network...');
16
- await manager.start({ pull: false });
17
- console.log('Network ready.\n');
18
- }
19
- const showMenu = () => {
20
- console.log('\nChoose an option:');
21
- console.log(' [1] Fund accounts from config file (NIGHT + DUST)');
22
- console.log(' [2] Fund account by address (NIGHT only)');
23
- console.log(' [3] Generate test accounts');
24
- console.log(' [4] Display master wallet balances');
25
- console.log(' [5] Show network status');
26
- console.log(' [6] Exit');
27
- };
28
28
  let running = true;
29
29
  while (running) {
30
- showMenu();
30
+ console.log(MENU);
31
31
  const choice = await rli.question('> ');
32
32
  try {
33
33
  switch (choice.trim()) {
34
34
  case '1': {
35
- const path = await rli.question('Path to accounts JSON file: ');
36
- const wallet = await manager.ensureWallet();
37
- const results = await fundAccountsFromFile(wallet, path.trim(), manager.config);
38
- console.table(results.map((r) => ({ Name: r.name, Address: r.address, DUST: r.hasDust })));
35
+ console.log('Starting network...');
36
+ const result = await manager.start({ pull: false });
37
+ if (result === 'already-running') {
38
+ console.log('Network is already running.');
39
+ }
40
+ else {
41
+ console.log('Network is ready.');
42
+ }
43
+ const services = await manager.getServices();
44
+ console.table(services.map((s) => ({ Service: s.name, Port: s.port, URL: s.url, Status: s.status })));
39
45
  break;
40
46
  }
41
47
  case '2': {
42
- const addr = await rli.question('Bech32 address: ');
43
- const wallet = await manager.ensureWallet();
44
- await fundAccount(wallet, addr.trim());
45
- console.log('Funded.');
48
+ await manager.stop({ removeVolumes: false });
49
+ console.log('Network stopped.');
46
50
  break;
47
51
  }
48
52
  case '3': {
49
- const countStr = await rli.question('How many accounts? [1]: ');
50
- const count = parseInt(countStr.trim() || '1', 10);
51
- const accounts = await generateAccounts({ format: 'mnemonic', count });
52
- const outPath = await rli.question('Save to file? (path or empty to skip): ');
53
- if (outPath.trim()) {
54
- await writeAccountsFile(outPath.trim(), accounts);
55
- }
56
- console.table(accounts.map((a) => ({ Name: a.name, Mnemonic: a.mnemonic })));
53
+ const volAnswer = await rli.question('Remove volumes for clean restart? [y/N]: ');
54
+ const removeVolumes = volAnswer.trim().toLowerCase() === 'y';
55
+ console.log('Restarting...');
56
+ await manager.restart({ pull: false, removeVolumes });
57
+ console.log('Network restarted and ready.');
57
58
  break;
58
59
  }
59
60
  case '4': {
61
+ try {
62
+ const services = await manager.getServices();
63
+ if (services.length === 0) {
64
+ console.log('Network is not running.');
65
+ }
66
+ else {
67
+ console.table(services.map((s) => ({ Service: s.name, Status: s.status, Port: s.port, URL: s.url })));
68
+ }
69
+ }
70
+ catch {
71
+ console.log('Network is not running.');
72
+ }
73
+ break;
74
+ }
75
+ case '5': {
76
+ const svc = await rli.question('Service (node, indexer, proof-server) or all [all]: ');
77
+ const lines = await rli.question('Number of lines [50]: ');
78
+ const svcName = svc.trim();
79
+ const logs = await manager.getLogs({
80
+ service: svcName || undefined,
81
+ lines: parseInt(lines.trim() || '50', 10),
82
+ });
83
+ console.log(logs);
84
+ break;
85
+ }
86
+ case '6': {
87
+ const health = await checkAllHealth(manager.config);
88
+ console.table({
89
+ Node: { Healthy: health.node.healthy, 'Response (ms)': health.node.responseTime },
90
+ Indexer: { Healthy: health.indexer.healthy, 'Response (ms)': health.indexer.responseTime },
91
+ 'Proof Server': { Healthy: health.proofServer.healthy, 'Response (ms)': health.proofServer.responseTime },
92
+ });
93
+ break;
94
+ }
95
+ case '7': {
60
96
  const wallet = await manager.ensureWallet();
61
97
  const b = await getWalletBalances(wallet);
62
98
  console.table({
63
99
  Unshielded: b.unshielded.toString(),
64
100
  Shielded: b.shielded.toString(),
65
101
  DUST: b.dust.toString(),
102
+ Total: b.total.toString(),
66
103
  });
67
104
  break;
68
105
  }
69
- case '5': {
70
- const services = await manager.getServices();
71
- console.table(services);
106
+ case '8': {
107
+ const addr = await rli.question('Bech32 address: ');
108
+ const amountStr = await rli.question('Amount in NIGHT [50000]: ');
109
+ const wallet = await manager.ensureWallet();
110
+ let amount;
111
+ if (amountStr.trim()) {
112
+ amount = BigInt(amountStr.trim()) * 10n ** 6n;
113
+ }
114
+ const result = await fundAccount(wallet, addr.trim(), amount);
115
+ console.log(`Funded ${result.address} with ${result.amount} NIGHT (tx: ${result.txHash})`);
116
+ break;
117
+ }
118
+ case '9': {
119
+ const filePath = await rli.question('Path to accounts JSON file: ');
120
+ const wallet = await manager.ensureWallet();
121
+ const results = await fundAccountsFromFile(wallet, filePath.trim(), manager.config);
122
+ console.table(results.map((r) => ({
123
+ Name: r.name,
124
+ Address: r.address,
125
+ Amount: r.amount.toString(),
126
+ DUST: r.hasDust ? 'Yes' : 'No',
127
+ })));
128
+ break;
129
+ }
130
+ case '10': {
131
+ const countStr = await rli.question('How many accounts? [1]: ');
132
+ const count = parseInt(countStr.trim() || '1', 10);
133
+ const fundAnswer = await rli.question('Fund from master wallet? [y/N]: ');
134
+ const shouldFund = fundAnswer.trim().toLowerCase() === 'y';
135
+ let accounts;
136
+ if (shouldFund) {
137
+ const wallet = await manager.ensureWallet();
138
+ accounts = await generateAndFundAccounts(wallet, manager.config, {
139
+ format: 'mnemonic',
140
+ count,
141
+ fund: true,
142
+ registerDust: true,
143
+ });
144
+ }
145
+ else {
146
+ accounts = await generateAccounts({ format: 'mnemonic', count });
147
+ }
148
+ const outPath = await rli.question('Save to file? (path or enter to skip): ');
149
+ if (outPath.trim()) {
150
+ await writeAccountsFile(outPath.trim(), accounts);
151
+ console.log(`Accounts written to ${outPath.trim()}`);
152
+ }
153
+ console.table(accounts.map((a) => ({
154
+ Name: a.name,
155
+ Address: a.address || '(not funded)',
156
+ Mnemonic: a.mnemonic ? a.mnemonic.split(' ').slice(0, 3).join(' ') + '...' : 'N/A',
157
+ })));
72
158
  break;
73
159
  }
74
- case '6':
160
+ case '0':
75
161
  running = false;
76
162
  break;
77
163
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -10,7 +10,9 @@ import { setLogger as setWalletLogger } from './core/wallet.js';
10
10
  import { setLogger as setFundingLogger } from './core/funding.js';
11
11
  import { setLogger as setAccountsLogger } from './core/accounts.js';
12
12
  const manager = new NetworkManager();
13
- const logger = createLogger();
13
+ const isInteractive = process.argv.length <= 2 || process.argv[2] === 'interactive';
14
+ // In interactive mode, send logs to stderr so they don't stomp on the readline prompt
15
+ const logger = createLogger('info', isInteractive ? process.stderr : process.stdout);
14
16
  setWalletLogger(logger);
15
17
  setFundingLogger(logger);
16
18
  setAccountsLogger(logger);
@@ -24,25 +26,18 @@ const shutdown = async () => {
24
26
  };
25
27
  process.on('SIGINT', shutdown);
26
28
  process.on('SIGTERM', shutdown);
27
- const program = new Command();
28
- program
29
- .name('midnight-local-devnet')
30
- .description('Manage a local Midnight development network')
31
- .version('0.1.0');
32
- registerNetworkCommands(program, manager);
33
- registerWalletCommands(program, manager);
34
- registerAccountCommands(program, manager);
35
- program
36
- .command('interactive')
37
- .description('Start interactive menu mode')
38
- .action(async () => {
39
- await startInteractiveMode(manager);
40
- });
41
- // No arguments = interactive mode
42
- if (process.argv.length <= 2) {
29
+ if (isInteractive) {
43
30
  startInteractiveMode(manager).catch(console.error);
44
31
  }
45
32
  else {
33
+ const program = new Command();
34
+ program
35
+ .name('midnight-local-devnet')
36
+ .description('Manage a local Midnight development network')
37
+ .version('0.1.1');
38
+ registerNetworkCommands(program, manager);
39
+ registerWalletCommands(program, manager);
40
+ registerAccountCommands(program, manager);
46
41
  program.parse();
47
42
  }
48
43
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;AAErC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AAC9B,eAAe,CAAC,MAAM,CAAC,CAAC;AACxB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAE1B,wDAAwD;AACxD,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;AAErC,8BAA8B;AAC9B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;IAC1B,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEhC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,uBAAuB,CAAC;KAC7B,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1C,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAE1C,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEL,kCAAkC;AAClC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;AAErC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC;AAEpF,sFAAsF;AACtF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrF,eAAe,CAAC,MAAM,CAAC,CAAC;AACxB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAE1B,wDAAwD;AACxD,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;AAErC,8BAA8B;AAC9B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;IAC1B,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEhC,IAAI,aAAa,EAAE,CAAC;IAClB,oBAAoB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;KAAM,CAAC;IACN,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,uBAAuB,CAAC;SAC7B,WAAW,CAAC,6CAA6C,CAAC;SAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE1C,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
@@ -1,2 +1,2 @@
1
1
  import pino from 'pino';
2
- export declare function createLogger(level?: string): pino.Logger;
2
+ export declare function createLogger(level?: string, destination?: NodeJS.WritableStream): pino.Logger;
@@ -1,6 +1,6 @@
1
1
  // src/core/logger.ts
2
2
  import pino from 'pino';
3
- export function createLogger(level = 'info') {
3
+ export function createLogger(level = 'info', destination = process.stdout) {
4
4
  return pino({
5
5
  level,
6
6
  transport: {
@@ -9,6 +9,7 @@ export function createLogger(level = 'info') {
9
9
  colorize: true,
10
10
  translateTime: 'SYS:standard',
11
11
  ignore: 'pid,hostname',
12
+ destination: destination === process.stderr ? 2 : 1,
12
13
  },
13
14
  },
14
15
  });
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,YAAY,CAAC,QAAgB,MAAM;IACjD,OAAO,IAAI,CAAC;QACV,KAAK;QACL,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,cAAc;gBAC7B,MAAM,EAAE,cAAc;aACvB;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,YAAY,CAAC,QAAgB,MAAM,EAAE,cAAqC,OAAO,CAAC,MAAM;IACtG,OAAO,IAAI,CAAC;QACV,KAAK;QACL,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,cAAc;gBAC7B,MAAM,EAAE,cAAc;gBACtB,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACpD;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -12,7 +12,7 @@ services:
12
12
  interval: 10s
13
13
  timeout: 5s
14
14
  retries: 20
15
- start_period: 10s
15
+ start_period: 60s
16
16
 
17
17
  indexer:
18
18
  container_name: 'midnight-indexer'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aaronbassett/midnight-local-devnet",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Local Midnight development network manager — CLI and MCP server",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -27,8 +27,8 @@
27
27
  "node": ">=22.0.0"
28
28
  },
29
29
  "bin": {
30
- "midnight-local-devnet": "./dist/cli.js",
31
- "midnight-devnet-mcp": "./dist/index.js"
30
+ "midnight-local-devnet": "dist/cli.js",
31
+ "midnight-devnet-mcp": "dist/index.js"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "tsc",