@waiaas/cli 2.0.0-rc.1

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 (58) hide show
  1. package/bin/waiaas +2 -0
  2. package/dist/commands/init.d.ts +10 -0
  3. package/dist/commands/init.d.ts.map +1 -0
  4. package/dist/commands/init.js +50 -0
  5. package/dist/commands/init.js.map +1 -0
  6. package/dist/commands/mcp-setup.d.ts +24 -0
  7. package/dist/commands/mcp-setup.d.ts.map +1 -0
  8. package/dist/commands/mcp-setup.js +237 -0
  9. package/dist/commands/mcp-setup.js.map +1 -0
  10. package/dist/commands/owner.d.ts +27 -0
  11. package/dist/commands/owner.d.ts.map +1 -0
  12. package/dist/commands/owner.js +145 -0
  13. package/dist/commands/owner.js.map +1 -0
  14. package/dist/commands/quickstart.d.ts +20 -0
  15. package/dist/commands/quickstart.d.ts.map +1 -0
  16. package/dist/commands/quickstart.js +192 -0
  17. package/dist/commands/quickstart.js.map +1 -0
  18. package/dist/commands/start.d.ts +10 -0
  19. package/dist/commands/start.d.ts.map +1 -0
  20. package/dist/commands/start.js +54 -0
  21. package/dist/commands/start.js.map +1 -0
  22. package/dist/commands/status.d.ts +10 -0
  23. package/dist/commands/status.d.ts.map +1 -0
  24. package/dist/commands/status.js +80 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/commands/stop.d.ts +10 -0
  27. package/dist/commands/stop.d.ts.map +1 -0
  28. package/dist/commands/stop.js +68 -0
  29. package/dist/commands/stop.js.map +1 -0
  30. package/dist/commands/upgrade.d.ts +28 -0
  31. package/dist/commands/upgrade.d.ts.map +1 -0
  32. package/dist/commands/upgrade.js +202 -0
  33. package/dist/commands/upgrade.js.map +1 -0
  34. package/dist/commands/wallet.d.ts +21 -0
  35. package/dist/commands/wallet.d.ts.map +1 -0
  36. package/dist/commands/wallet.js +99 -0
  37. package/dist/commands/wallet.js.map +1 -0
  38. package/dist/index.d.ts +24 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +218 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/utils/data-dir.d.ts +12 -0
  43. package/dist/utils/data-dir.d.ts.map +1 -0
  44. package/dist/utils/data-dir.js +18 -0
  45. package/dist/utils/data-dir.js.map +1 -0
  46. package/dist/utils/password.d.ts +10 -0
  47. package/dist/utils/password.d.ts.map +1 -0
  48. package/dist/utils/password.js +58 -0
  49. package/dist/utils/password.js.map +1 -0
  50. package/dist/utils/slug.d.ts +27 -0
  51. package/dist/utils/slug.d.ts.map +1 -0
  52. package/dist/utils/slug.js +53 -0
  53. package/dist/utils/slug.js.map +1 -0
  54. package/dist/utils/update-notify.d.ts +23 -0
  55. package/dist/utils/update-notify.d.ts.map +1 -0
  56. package/dist/utils/update-notify.js +114 -0
  57. package/dist/utils/update-notify.js.map +1 -0
  58. package/package.json +49 -0
@@ -0,0 +1,202 @@
1
+ /**
2
+ * `waiaas upgrade` -- Upgrade WAIaaS to the latest version.
3
+ *
4
+ * Supports four modes:
5
+ * --check Check for available updates without upgrading
6
+ * --rollback Restore from the latest pre-upgrade backup
7
+ * --to <ver> Upgrade to a specific version
8
+ * (default) 7-step upgrade sequence:
9
+ * 1. Version check
10
+ * 2. Stop daemon
11
+ * 3. Create backup
12
+ * 4. Update package
13
+ * 5. Database migrations (deferred to daemon start)
14
+ * 6. Verify installation
15
+ * 7. Restart daemon
16
+ */
17
+ import { existsSync, readFileSync } from 'node:fs';
18
+ import { execSync } from 'node:child_process';
19
+ import { createRequire } from 'node:module';
20
+ import { join } from 'node:path';
21
+ import semver from 'semver';
22
+ import { BackupService } from '@waiaas/daemon';
23
+ const require = createRequire(import.meta.url);
24
+ const { version: CURRENT_VERSION } = require('../../package.json');
25
+ const NPM_REGISTRY_URL = 'https://registry.npmjs.org/@waiaas/cli';
26
+ const FETCH_TIMEOUT_MS = 5000;
27
+ /**
28
+ * Execute the upgrade command based on the provided options.
29
+ */
30
+ export async function upgradeCommand(opts) {
31
+ if (opts.check) {
32
+ return checkMode();
33
+ }
34
+ if (opts.rollback) {
35
+ return rollbackMode(opts.dataDir);
36
+ }
37
+ return upgradeMode(opts);
38
+ }
39
+ /**
40
+ * --check mode: Query npm registry and report update availability.
41
+ */
42
+ async function checkMode() {
43
+ const latest = await fetchLatestVersion();
44
+ if (!latest) {
45
+ console.error('Failed to check for updates. Please try again later.');
46
+ process.exit(1);
47
+ return;
48
+ }
49
+ if (semver.gt(latest, CURRENT_VERSION)) {
50
+ console.log(`Update available: ${CURRENT_VERSION} \u2192 ${latest}`);
51
+ console.log('Run: waiaas upgrade');
52
+ }
53
+ else {
54
+ console.log(`Already up to date (${CURRENT_VERSION})`);
55
+ }
56
+ }
57
+ /**
58
+ * --rollback mode: Restore from the latest backup.
59
+ */
60
+ function rollbackMode(dataDir) {
61
+ try {
62
+ const backupService = new BackupService(dataDir);
63
+ const backupDir = backupService.restoreLatest();
64
+ console.log(`Restored from backup: ${backupDir}`);
65
+ }
66
+ catch (err) {
67
+ console.error(`Rollback failed: ${err.message}`);
68
+ process.exit(1);
69
+ }
70
+ }
71
+ /**
72
+ * Default mode: Execute the 7-step upgrade sequence.
73
+ */
74
+ async function upgradeMode(opts) {
75
+ // Step 1: Version check
76
+ let targetVersion;
77
+ if (opts.to) {
78
+ if (!semver.valid(opts.to)) {
79
+ console.error(`Invalid version: ${opts.to}`);
80
+ process.exit(1);
81
+ return;
82
+ }
83
+ targetVersion = opts.to;
84
+ }
85
+ else {
86
+ const latest = await fetchLatestVersion();
87
+ if (!latest) {
88
+ console.error('Failed to check for updates. Please try again later.');
89
+ process.exit(1);
90
+ return;
91
+ }
92
+ targetVersion = latest;
93
+ }
94
+ if (targetVersion === CURRENT_VERSION) {
95
+ console.log(`Already up to date (${CURRENT_VERSION})`);
96
+ return;
97
+ }
98
+ console.log(`[1/7] Version check: ${CURRENT_VERSION} \u2192 ${targetVersion}`);
99
+ // Step 2: Stop daemon
100
+ console.log('[2/7] Stopping daemon...');
101
+ stopDaemonIfRunning(opts.dataDir);
102
+ // Step 3: Backup
103
+ console.log('[3/7] Creating backup...');
104
+ const backupService = new BackupService(opts.dataDir);
105
+ try {
106
+ const backupDir = backupService.createBackup(CURRENT_VERSION);
107
+ console.log(` Backup created: ${backupDir}`);
108
+ }
109
+ catch (err) {
110
+ console.error(`Backup failed: ${err.message}`);
111
+ console.error('Upgrade aborted. No changes were made.');
112
+ process.exit(1);
113
+ return;
114
+ }
115
+ // Step 4: Update package
116
+ console.log(`[4/7] Updating to ${targetVersion}...`);
117
+ try {
118
+ execSync(`npm install -g @waiaas/cli@${targetVersion}`, { stdio: 'inherit' });
119
+ }
120
+ catch {
121
+ console.error('Package update failed.');
122
+ console.error('Run: waiaas upgrade --rollback');
123
+ process.exit(1);
124
+ return;
125
+ }
126
+ // Step 5: Database migrations
127
+ console.log('[5/7] Running database migrations...');
128
+ console.log(' Migrations will run on next daemon start');
129
+ // Step 6: Verify installation
130
+ console.log('[6/7] Verifying installation...');
131
+ try {
132
+ const output = execSync('waiaas --version', { stdio: 'pipe' }).toString().trim();
133
+ // Commander outputs the version string directly (e.g. "1.8.0")
134
+ const installedVersion = output.replace(/^v/, '');
135
+ if (installedVersion !== targetVersion) {
136
+ console.warn(` Warning: Expected ${targetVersion}, found ${installedVersion}`);
137
+ }
138
+ }
139
+ catch {
140
+ console.warn(' Warning: Could not verify installed version');
141
+ }
142
+ // Step 7: Restart daemon
143
+ if (opts.noStart) {
144
+ console.log('[7/7] Skipping daemon restart (--no-start)');
145
+ }
146
+ else {
147
+ console.log('[7/7] Restarting daemon...');
148
+ try {
149
+ execSync('waiaas start', { stdio: 'inherit' });
150
+ }
151
+ catch {
152
+ console.error('Failed to restart daemon. Start it manually: waiaas start');
153
+ }
154
+ }
155
+ console.log(`\nUpgrade complete: ${CURRENT_VERSION} \u2192 ${targetVersion}`);
156
+ }
157
+ /**
158
+ * Fetch the latest version from the npm registry.
159
+ */
160
+ async function fetchLatestVersion() {
161
+ try {
162
+ const res = await fetch(NPM_REGISTRY_URL, {
163
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
164
+ headers: {
165
+ 'User-Agent': `waiaas/${CURRENT_VERSION}`,
166
+ Accept: 'application/json',
167
+ },
168
+ });
169
+ if (!res.ok)
170
+ return null;
171
+ const data = (await res.json());
172
+ const latest = data?.['dist-tags']?.latest;
173
+ if (!latest || !semver.valid(latest))
174
+ return null;
175
+ return latest;
176
+ }
177
+ catch {
178
+ return null;
179
+ }
180
+ }
181
+ /**
182
+ * Stop daemon if running by reading PID file and sending SIGTERM.
183
+ */
184
+ function stopDaemonIfRunning(dataDir) {
185
+ const pidPath = join(dataDir, 'daemon.pid');
186
+ if (!existsSync(pidPath)) {
187
+ console.log(' Daemon not running, skipping');
188
+ return;
189
+ }
190
+ try {
191
+ const pid = parseInt(readFileSync(pidPath, 'utf-8').trim(), 10);
192
+ // Check if process is alive
193
+ process.kill(pid, 0);
194
+ // Send SIGTERM
195
+ process.kill(pid, 'SIGTERM');
196
+ console.log(` Sent SIGTERM to PID ${pid}`);
197
+ }
198
+ catch {
199
+ console.log(' Daemon not running, skipping');
200
+ }
201
+ }
202
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `waiaas wallet` subcommand group:
3
+ * wallet info -- Show wallet details
4
+ * wallet set-default-network <network> -- Change default network
5
+ *
6
+ * Both commands use masterAuth (X-Master-Password header) for daemon communication.
7
+ */
8
+ export interface WalletCommandOptions {
9
+ baseUrl: string;
10
+ password?: string;
11
+ walletId?: string;
12
+ }
13
+ /**
14
+ * `waiaas wallet info` -- Show wallet details including address and networks.
15
+ */
16
+ export declare function walletInfoCommand(opts: WalletCommandOptions): Promise<void>;
17
+ /**
18
+ * `waiaas wallet set-default-network <network>` -- Change default network.
19
+ */
20
+ export declare function walletSetDefaultNetworkCommand(opts: WalletCommandOptions, network: string): Promise<void>;
21
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4GD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBjF;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * `waiaas wallet` subcommand group:
3
+ * wallet info -- Show wallet details
4
+ * wallet set-default-network <network> -- Change default network
5
+ *
6
+ * Both commands use masterAuth (X-Master-Password header) for daemon communication.
7
+ */
8
+ import { resolvePassword } from '../utils/password.js';
9
+ /**
10
+ * Resolve master password from --password flag or env/prompt.
11
+ */
12
+ async function getMasterPassword(opts) {
13
+ if (opts.password)
14
+ return opts.password;
15
+ return resolvePassword();
16
+ }
17
+ /**
18
+ * Make an authenticated request to the daemon.
19
+ */
20
+ async function daemonRequest(baseUrl, method, path, password, body) {
21
+ const headers = {
22
+ 'Content-Type': 'application/json',
23
+ 'X-Master-Password': password,
24
+ };
25
+ const res = await fetch(`${baseUrl}${path}`, {
26
+ method,
27
+ headers,
28
+ body: body !== undefined ? JSON.stringify(body) : undefined,
29
+ });
30
+ if (!res.ok) {
31
+ const errBody = await res.json().catch(() => null);
32
+ const msg = errBody?.['message'] ?? res.statusText;
33
+ console.error(`Error (${res.status}): ${msg}`);
34
+ process.exit(1);
35
+ }
36
+ return (await res.json());
37
+ }
38
+ /**
39
+ * Select wallet: use --wallet if provided, otherwise auto-detect if only one exists.
40
+ */
41
+ async function selectWallet(baseUrl, password, walletId) {
42
+ const data = await daemonRequest(baseUrl, 'GET', '/v1/wallets', password);
43
+ if (data.items.length === 0) {
44
+ console.error('Error: No wallets found. Create one first with `waiaas quickstart`.');
45
+ process.exit(1);
46
+ }
47
+ if (walletId) {
48
+ const found = data.items.find((w) => w.id === walletId || w.name === walletId);
49
+ if (!found) {
50
+ console.error(`Error: Wallet '${walletId}' not found.`);
51
+ process.exit(1);
52
+ }
53
+ return found;
54
+ }
55
+ if (data.items.length > 1) {
56
+ console.error('Error: Multiple wallets found. Use --wallet <id> to specify one.');
57
+ console.error(' Available wallets:');
58
+ for (const w of data.items) {
59
+ console.error(` ${w.id} ${w.name} (${w.chain}/${w.environment})`);
60
+ }
61
+ process.exit(1);
62
+ }
63
+ return data.items[0];
64
+ }
65
+ /**
66
+ * `waiaas wallet info` -- Show wallet details including address and networks.
67
+ */
68
+ export async function walletInfoCommand(opts) {
69
+ const password = await getMasterPassword(opts);
70
+ const wallet = await selectWallet(opts.baseUrl, password, opts.walletId);
71
+ // Fetch available networks
72
+ const networks = await daemonRequest(opts.baseUrl, 'GET', `/v1/wallets/${wallet.id}/networks`, password);
73
+ const defaultNet = networks.availableNetworks.find((n) => n.isDefault)?.network ?? wallet.network;
74
+ const available = networks.availableNetworks.map((n) => n.network).join(', ') || 'none';
75
+ console.log('');
76
+ console.log(`Wallet: ${wallet.name}`);
77
+ console.log(` ID: ${wallet.id}`);
78
+ console.log(` Chain: ${wallet.chain}`);
79
+ console.log(` Environment: ${wallet.environment}`);
80
+ console.log(` Address: ${wallet.publicKey}`);
81
+ console.log(` Default Network: ${defaultNet}`);
82
+ console.log(` Available: ${available}`);
83
+ console.log(` Status: ${wallet.status}`);
84
+ console.log('');
85
+ }
86
+ /**
87
+ * `waiaas wallet set-default-network <network>` -- Change default network.
88
+ */
89
+ export async function walletSetDefaultNetworkCommand(opts, network) {
90
+ const password = await getMasterPassword(opts);
91
+ const wallet = await selectWallet(opts.baseUrl, password, opts.walletId);
92
+ const result = await daemonRequest(opts.baseUrl, 'PUT', `/v1/wallets/${wallet.id}/default-network`, password, { network });
93
+ console.log('');
94
+ console.log(`Default network changed for wallet '${wallet.name}':`);
95
+ console.log(` Previous: ${result.previousNetwork ?? '(none)'}`);
96
+ console.log(` Current: ${result.defaultNetwork}`);
97
+ console.log('');
98
+ }
99
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * WAIaaS CLI entry point.
3
+ *
4
+ * Commands:
5
+ * init -- Initialize WAIaaS data directory
6
+ * start -- Start the WAIaaS daemon
7
+ * stop -- Stop the WAIaaS daemon
8
+ * status -- Check WAIaaS daemon status
9
+ * quickstart -- Create Solana + EVM wallets for quick setup
10
+ * wallet info -- Show wallet details
11
+ * wallet set-default-network <net> -- Change default network
12
+ * owner connect -- Connect external wallet via WalletConnect QR
13
+ * owner disconnect -- Disconnect WalletConnect session
14
+ * owner status -- Show WalletConnect session status
15
+ * mcp setup -- Set up MCP integration for Claude Desktop
16
+ * upgrade -- Upgrade WAIaaS to the latest version
17
+ * upgrade --check -- Check for available updates
18
+ * upgrade --to <version> -- Upgrade to a specific version
19
+ * upgrade --rollback -- Restore from the latest backup
20
+ *
21
+ * All commands accept --data-dir <path> (default: ~/.waiaas/)
22
+ */
23
+ export {};
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
package/dist/index.js ADDED
@@ -0,0 +1,218 @@
1
+ /**
2
+ * WAIaaS CLI entry point.
3
+ *
4
+ * Commands:
5
+ * init -- Initialize WAIaaS data directory
6
+ * start -- Start the WAIaaS daemon
7
+ * stop -- Stop the WAIaaS daemon
8
+ * status -- Check WAIaaS daemon status
9
+ * quickstart -- Create Solana + EVM wallets for quick setup
10
+ * wallet info -- Show wallet details
11
+ * wallet set-default-network <net> -- Change default network
12
+ * owner connect -- Connect external wallet via WalletConnect QR
13
+ * owner disconnect -- Disconnect WalletConnect session
14
+ * owner status -- Show WalletConnect session status
15
+ * mcp setup -- Set up MCP integration for Claude Desktop
16
+ * upgrade -- Upgrade WAIaaS to the latest version
17
+ * upgrade --check -- Check for available updates
18
+ * upgrade --to <version> -- Upgrade to a specific version
19
+ * upgrade --rollback -- Restore from the latest backup
20
+ *
21
+ * All commands accept --data-dir <path> (default: ~/.waiaas/)
22
+ */
23
+ import { Command } from 'commander';
24
+ import { initCommand } from './commands/init.js';
25
+ import { startCommand } from './commands/start.js';
26
+ import { stopCommand } from './commands/stop.js';
27
+ import { statusCommand } from './commands/status.js';
28
+ import { mcpSetupCommand } from './commands/mcp-setup.js';
29
+ import { quickstartCommand } from './commands/quickstart.js';
30
+ import { walletInfoCommand, walletSetDefaultNetworkCommand } from './commands/wallet.js';
31
+ import { ownerConnectCommand, ownerDisconnectCommand, ownerStatusCommand } from './commands/owner.js';
32
+ import { upgradeCommand } from './commands/upgrade.js';
33
+ import { resolveDataDir } from './utils/data-dir.js';
34
+ import { checkAndNotifyUpdate } from './utils/update-notify.js';
35
+ const program = new Command();
36
+ program
37
+ .name('waiaas')
38
+ .description('WAIaaS - AI Agent Wallet-as-a-Service')
39
+ .version('0.0.0');
40
+ program
41
+ .command('init')
42
+ .description('Initialize WAIaaS data directory')
43
+ .option('--data-dir <path>', 'Data directory path')
44
+ .action(async (opts) => {
45
+ const dataDir = resolveDataDir(opts);
46
+ await initCommand(dataDir);
47
+ });
48
+ program
49
+ .command('start')
50
+ .description('Start the WAIaaS daemon')
51
+ .option('--data-dir <path>', 'Data directory path')
52
+ .action(async (opts) => {
53
+ const dataDir = resolveDataDir(opts);
54
+ await startCommand(dataDir);
55
+ });
56
+ program
57
+ .command('stop')
58
+ .description('Stop the WAIaaS daemon')
59
+ .option('--data-dir <path>', 'Data directory path')
60
+ .action(async (opts) => {
61
+ const dataDir = resolveDataDir(opts);
62
+ await stopCommand(dataDir);
63
+ });
64
+ program
65
+ .command('status')
66
+ .description('Check WAIaaS daemon status')
67
+ .option('--data-dir <path>', 'Data directory path')
68
+ .action(async (opts) => {
69
+ const dataDir = resolveDataDir(opts);
70
+ await statusCommand(dataDir);
71
+ });
72
+ program
73
+ .command('quickstart')
74
+ .description('Create Solana + EVM wallets for quick setup')
75
+ .option('--data-dir <path>', 'Data directory path')
76
+ .option('--base-url <url>', 'Daemon base URL', 'http://127.0.0.1:3100')
77
+ .option('--mode <mode>', 'Environment mode: testnet or mainnet', 'testnet')
78
+ .option('--expires-in <seconds>', 'Session expiration in seconds', '86400')
79
+ .option('--password <password>', 'Master password')
80
+ .action(async (opts) => {
81
+ const dataDir = resolveDataDir(opts);
82
+ const mode = opts.mode ?? 'testnet';
83
+ if (mode !== 'testnet' && mode !== 'mainnet') {
84
+ console.error("Error: --mode must be 'testnet' or 'mainnet'");
85
+ process.exit(1);
86
+ }
87
+ await quickstartCommand({
88
+ dataDir,
89
+ baseUrl: opts.baseUrl,
90
+ mode: mode,
91
+ expiresIn: parseInt(opts.expiresIn ?? '86400', 10),
92
+ masterPassword: opts.password,
93
+ });
94
+ });
95
+ // Wallet subcommand group
96
+ const wallet = program.command('wallet').description('Wallet management commands');
97
+ wallet
98
+ .command('info')
99
+ .description('Show wallet details')
100
+ .option('--base-url <url>', 'Daemon base URL', 'http://127.0.0.1:3100')
101
+ .option('--wallet <id>', 'Wallet ID or name (auto-detected if only one)')
102
+ .option('--password <password>', 'Master password')
103
+ .action(async (opts) => {
104
+ await walletInfoCommand({
105
+ baseUrl: opts.baseUrl ?? 'http://127.0.0.1:3100',
106
+ password: opts.password,
107
+ walletId: opts.wallet,
108
+ });
109
+ });
110
+ wallet
111
+ .command('set-default-network')
112
+ .description('Change wallet default network')
113
+ .argument('<network>', 'Network to set as default (e.g., polygon-amoy)')
114
+ .option('--base-url <url>', 'Daemon base URL', 'http://127.0.0.1:3100')
115
+ .option('--wallet <id>', 'Wallet ID or name (auto-detected if only one)')
116
+ .option('--password <password>', 'Master password')
117
+ .action(async (network, opts) => {
118
+ await walletSetDefaultNetworkCommand({
119
+ baseUrl: opts.baseUrl ?? 'http://127.0.0.1:3100',
120
+ password: opts.password,
121
+ walletId: opts.wallet,
122
+ }, network);
123
+ });
124
+ // Owner subcommand group
125
+ const owner = program.command('owner').description('Owner wallet connection commands');
126
+ owner
127
+ .command('connect')
128
+ .description('Connect external wallet via WalletConnect QR code')
129
+ .option('--base-url <url>', 'Daemon base URL', 'http://127.0.0.1:3100')
130
+ .option('--wallet <id>', 'Wallet ID or name (auto-detected if only one)')
131
+ .option('--password <password>', 'Master password')
132
+ .option('--poll', 'Wait for wallet to connect')
133
+ .action(async (opts) => {
134
+ await ownerConnectCommand({
135
+ baseUrl: opts.baseUrl ?? 'http://127.0.0.1:3100',
136
+ password: opts.password,
137
+ walletId: opts.wallet,
138
+ poll: opts.poll ?? false,
139
+ });
140
+ });
141
+ owner
142
+ .command('disconnect')
143
+ .description('Disconnect WalletConnect session')
144
+ .option('--base-url <url>', 'Daemon base URL', 'http://127.0.0.1:3100')
145
+ .option('--wallet <id>', 'Wallet ID or name (auto-detected if only one)')
146
+ .option('--password <password>', 'Master password')
147
+ .action(async (opts) => {
148
+ await ownerDisconnectCommand({
149
+ baseUrl: opts.baseUrl ?? 'http://127.0.0.1:3100',
150
+ password: opts.password,
151
+ walletId: opts.wallet,
152
+ });
153
+ });
154
+ owner
155
+ .command('status')
156
+ .description('Show WalletConnect session status')
157
+ .option('--base-url <url>', 'Daemon base URL', 'http://127.0.0.1:3100')
158
+ .option('--wallet <id>', 'Wallet ID or name (auto-detected if only one)')
159
+ .option('--password <password>', 'Master password')
160
+ .action(async (opts) => {
161
+ await ownerStatusCommand({
162
+ baseUrl: opts.baseUrl ?? 'http://127.0.0.1:3100',
163
+ password: opts.password,
164
+ walletId: opts.wallet,
165
+ });
166
+ });
167
+ // MCP subcommand group
168
+ const mcp = program.command('mcp').description('MCP integration commands');
169
+ mcp
170
+ .command('setup')
171
+ .description('Set up MCP integration for Claude Desktop')
172
+ .option('--data-dir <path>', 'Data directory path')
173
+ .option('--base-url <url>', 'Daemon base URL', 'http://127.0.0.1:3100')
174
+ .option('--wallet <id>', 'Wallet ID (auto-detected if only one)')
175
+ .option('--all', 'Set up all wallets at once')
176
+ .option('--expires-in <seconds>', 'Session expiration in seconds', '86400')
177
+ .option('--password <password>', 'Master password')
178
+ .action(async (opts) => {
179
+ const dataDir = resolveDataDir(opts);
180
+ await mcpSetupCommand({
181
+ dataDir,
182
+ baseUrl: opts.baseUrl,
183
+ wallet: opts.wallet,
184
+ all: opts.all ?? false,
185
+ expiresIn: parseInt(opts.expiresIn ?? '86400', 10),
186
+ masterPassword: opts.password,
187
+ });
188
+ });
189
+ program
190
+ .command('upgrade')
191
+ .description('Upgrade WAIaaS to the latest version')
192
+ .option('--data-dir <path>', 'Data directory path')
193
+ .option('--check', 'Check for updates without upgrading')
194
+ .option('--to <version>', 'Upgrade to a specific version')
195
+ .option('--rollback', 'Restore from the latest backup')
196
+ .option('--no-start', 'Skip daemon restart after upgrade')
197
+ .action(async (opts) => {
198
+ const dataDir = resolveDataDir(opts);
199
+ await upgradeCommand({
200
+ dataDir,
201
+ check: opts.check,
202
+ to: opts.to,
203
+ rollback: opts.rollback,
204
+ noStart: opts.start === false, // commander: --no-start → start=false
205
+ });
206
+ });
207
+ // Pre-parse --quiet and --data-dir from argv (program.opts() is empty before parseAsync)
208
+ const hasQuiet = process.argv.includes('--quiet');
209
+ const dataDirIdx = process.argv.indexOf('--data-dir');
210
+ const dataDirArg = dataDirIdx >= 0 ? process.argv[dataDirIdx + 1] : undefined;
211
+ const effectiveDataDir = resolveDataDir({ dataDir: dataDirArg });
212
+ // Fire-and-forget: do not await, do not block CLI startup
213
+ checkAndNotifyUpdate({ dataDir: effectiveDataDir, quiet: hasQuiet }).catch(() => { });
214
+ program.parseAsync(process.argv).catch((err) => {
215
+ console.error(err.message);
216
+ process.exit(1);
217
+ });
218
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Resolve the WAIaaS data directory.
3
+ *
4
+ * Priority:
5
+ * 1. --data-dir CLI option
6
+ * 2. WAIAAS_DATA_DIR environment variable
7
+ * 3. Default: ~/.waiaas/
8
+ */
9
+ export declare function resolveDataDir(opts?: {
10
+ dataDir?: string;
11
+ }): string;
12
+ //# sourceMappingURL=data-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-dir.d.ts","sourceRoot":"","sources":["../../src/utils/data-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAIlE"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Resolve the WAIaaS data directory.
3
+ *
4
+ * Priority:
5
+ * 1. --data-dir CLI option
6
+ * 2. WAIAAS_DATA_DIR environment variable
7
+ * 3. Default: ~/.waiaas/
8
+ */
9
+ import { homedir } from 'node:os';
10
+ import { join } from 'node:path';
11
+ export function resolveDataDir(opts) {
12
+ if (opts?.dataDir)
13
+ return opts.dataDir;
14
+ if (process.env['WAIAAS_DATA_DIR'])
15
+ return process.env['WAIAAS_DATA_DIR'];
16
+ return join(homedir(), '.waiaas');
17
+ }
18
+ //# sourceMappingURL=data-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-dir.js","sourceRoot":"","sources":["../../src/utils/data-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,cAAc,CAAC,IAA2B;IACxD,IAAI,IAAI,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Resolve the master password for the WAIaaS daemon.
3
+ *
4
+ * Priority:
5
+ * 1. WAIAAS_MASTER_PASSWORD environment variable
6
+ * 2. WAIAAS_MASTER_PASSWORD_FILE (read file content, trim)
7
+ * 3. Interactive prompt (stdin)
8
+ */
9
+ export declare function resolvePassword(): Promise<string>;
10
+ //# sourceMappingURL=password.d.ts.map