@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.
- package/bin/waiaas +2 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +50 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp-setup.d.ts +24 -0
- package/dist/commands/mcp-setup.d.ts.map +1 -0
- package/dist/commands/mcp-setup.js +237 -0
- package/dist/commands/mcp-setup.js.map +1 -0
- package/dist/commands/owner.d.ts +27 -0
- package/dist/commands/owner.d.ts.map +1 -0
- package/dist/commands/owner.js +145 -0
- package/dist/commands/owner.js.map +1 -0
- package/dist/commands/quickstart.d.ts +20 -0
- package/dist/commands/quickstart.d.ts.map +1 -0
- package/dist/commands/quickstart.js +192 -0
- package/dist/commands/quickstart.js.map +1 -0
- package/dist/commands/start.d.ts +10 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +54 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +10 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +80 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +10 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +68 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/upgrade.d.ts +28 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +202 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/wallet.d.ts +21 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +99 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +218 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/data-dir.d.ts +12 -0
- package/dist/utils/data-dir.d.ts.map +1 -0
- package/dist/utils/data-dir.js +18 -0
- package/dist/utils/data-dir.js.map +1 -0
- package/dist/utils/password.d.ts +10 -0
- package/dist/utils/password.d.ts.map +1 -0
- package/dist/utils/password.js +58 -0
- package/dist/utils/password.js.map +1 -0
- package/dist/utils/slug.d.ts +27 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +53 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/update-notify.d.ts +23 -0
- package/dist/utils/update-notify.d.ts.map +1 -0
- package/dist/utils/update-notify.js +114 -0
- package/dist/utils/update-notify.js.map +1 -0
- package/package.json +49 -0
package/bin/waiaas
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `waiaas init` -- Initialize the WAIaaS data directory.
|
|
3
|
+
*
|
|
4
|
+
* Creates:
|
|
5
|
+
* - Data directory (0o700)
|
|
6
|
+
* - Subdirectories: keystore/, data/, logs/, backups/
|
|
7
|
+
* - Default config.toml (if not exists)
|
|
8
|
+
*/
|
|
9
|
+
export declare function initCommand(dataDir: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `waiaas init` -- Initialize the WAIaaS data directory.
|
|
3
|
+
*
|
|
4
|
+
* Creates:
|
|
5
|
+
* - Data directory (0o700)
|
|
6
|
+
* - Subdirectories: keystore/, data/, logs/, backups/
|
|
7
|
+
* - Default config.toml (if not exists)
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
const DEFAULT_CONFIG = `# WAIaaS Daemon Configuration
|
|
12
|
+
# See documentation for all available options
|
|
13
|
+
|
|
14
|
+
[daemon]
|
|
15
|
+
port = 3100
|
|
16
|
+
hostname = "127.0.0.1"
|
|
17
|
+
|
|
18
|
+
[database]
|
|
19
|
+
path = "data/waiaas.db"
|
|
20
|
+
`;
|
|
21
|
+
export async function initCommand(dataDir) {
|
|
22
|
+
const configPath = join(dataDir, 'config.toml');
|
|
23
|
+
// Check if already initialized
|
|
24
|
+
if (existsSync(dataDir) && existsSync(configPath)) {
|
|
25
|
+
console.log(`Already initialized: ${dataDir}`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Create data directory
|
|
29
|
+
mkdirSync(dataDir, { recursive: true, mode: 0o700 });
|
|
30
|
+
// Create subdirectories
|
|
31
|
+
const subdirs = ['keystore', 'data', 'logs', 'backups'];
|
|
32
|
+
for (const sub of subdirs) {
|
|
33
|
+
const subPath = join(dataDir, sub);
|
|
34
|
+
if (!existsSync(subPath)) {
|
|
35
|
+
mkdirSync(subPath, { recursive: true, mode: 0o700 });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Write default config.toml (skip if already exists)
|
|
39
|
+
if (!existsSync(configPath)) {
|
|
40
|
+
writeFileSync(configPath, DEFAULT_CONFIG, { mode: 0o644 });
|
|
41
|
+
}
|
|
42
|
+
console.log(`Initialized WAIaaS data directory: ${dataDir}`);
|
|
43
|
+
console.log(` config.toml`);
|
|
44
|
+
for (const sub of subdirs) {
|
|
45
|
+
console.log(` ${sub}/`);
|
|
46
|
+
}
|
|
47
|
+
console.log('');
|
|
48
|
+
console.log('Next: waiaas start');
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,cAAc,GAAG;;;;;;;;;CAStB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAEhD,+BAA+B;IAC/B,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAErD,wBAAwB;IACxB,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACxD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,aAAa,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `waiaas mcp setup` -- Set up MCP integration for Claude Desktop.
|
|
3
|
+
*
|
|
4
|
+
* 7-step flow (CLI-02), extended for multi-wallet (CLIP-01..07):
|
|
5
|
+
* 1. Check daemon is running (GET /health)
|
|
6
|
+
* 2. Resolve master password
|
|
7
|
+
* 3. Resolve wallet ID (auto-detect if single wallet, masterAuth)
|
|
8
|
+
* 4. Create session via POST /v1/sessions (masterAuth)
|
|
9
|
+
* 5. Write token to mcp-tokens/<walletId> file (atomic)
|
|
10
|
+
* 6. Output result
|
|
11
|
+
* 7. Print Claude Desktop config.json snippet with WAIAAS_WALLET_ID/NAME
|
|
12
|
+
*
|
|
13
|
+
* --all flag: set up all wallets at once with a combined config snippet.
|
|
14
|
+
*/
|
|
15
|
+
export interface McpSetupOptions {
|
|
16
|
+
dataDir: string;
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
wallet?: string;
|
|
19
|
+
expiresIn?: number;
|
|
20
|
+
masterPassword?: string;
|
|
21
|
+
all?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function mcpSetupCommand(opts: McpSetupOptions): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=mcp-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-setup.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAmGD,wBAAsB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+J1E"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `waiaas mcp setup` -- Set up MCP integration for Claude Desktop.
|
|
3
|
+
*
|
|
4
|
+
* 7-step flow (CLI-02), extended for multi-wallet (CLIP-01..07):
|
|
5
|
+
* 1. Check daemon is running (GET /health)
|
|
6
|
+
* 2. Resolve master password
|
|
7
|
+
* 3. Resolve wallet ID (auto-detect if single wallet, masterAuth)
|
|
8
|
+
* 4. Create session via POST /v1/sessions (masterAuth)
|
|
9
|
+
* 5. Write token to mcp-tokens/<walletId> file (atomic)
|
|
10
|
+
* 6. Output result
|
|
11
|
+
* 7. Print Claude Desktop config.json snippet with WAIAAS_WALLET_ID/NAME
|
|
12
|
+
*
|
|
13
|
+
* --all flag: set up all wallets at once with a combined config snippet.
|
|
14
|
+
*/
|
|
15
|
+
import { writeFile, rename, mkdir } from 'node:fs/promises';
|
|
16
|
+
import { join, dirname } from 'node:path';
|
|
17
|
+
import { resolvePassword } from '../utils/password.js';
|
|
18
|
+
import { toSlug, resolveSlugCollisions } from '../utils/slug.js';
|
|
19
|
+
/** Fetch wallet list from daemon (masterAuth). */
|
|
20
|
+
async function fetchWallets(baseUrl, password) {
|
|
21
|
+
const walletsRes = await fetch(`${baseUrl}/v1/wallets`, {
|
|
22
|
+
headers: {
|
|
23
|
+
'Accept': 'application/json',
|
|
24
|
+
'X-Master-Password': password,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
if (!walletsRes.ok) {
|
|
28
|
+
console.error(`Error: Failed to list wallets (${walletsRes.status})`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const walletsData = await walletsRes.json();
|
|
32
|
+
return walletsData.items ?? [];
|
|
33
|
+
}
|
|
34
|
+
/** Create session for a single wallet and write token file atomically. */
|
|
35
|
+
async function setupWallet(opts) {
|
|
36
|
+
const sessionRes = await fetch(`${opts.baseUrl}/v1/sessions`, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
'X-Master-Password': opts.password,
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify({
|
|
43
|
+
walletId: opts.walletId,
|
|
44
|
+
expiresIn: opts.expiresIn,
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
if (!sessionRes.ok) {
|
|
48
|
+
const body = await sessionRes.json().catch(() => null);
|
|
49
|
+
const msg = body?.['message'] ?? sessionRes.statusText;
|
|
50
|
+
console.error(`Error: Failed to create session (${sessionRes.status}): ${msg}`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const sessionData = await sessionRes.json();
|
|
54
|
+
// Write token to mcp-tokens/<walletId> (atomic: write tmp then rename)
|
|
55
|
+
const tokenPath = join(opts.dataDir, 'mcp-tokens', opts.walletId);
|
|
56
|
+
const tmpPath = `${tokenPath}.tmp`;
|
|
57
|
+
await mkdir(dirname(tokenPath), { recursive: true });
|
|
58
|
+
await writeFile(tmpPath, sessionData.token, 'utf-8');
|
|
59
|
+
await rename(tmpPath, tokenPath);
|
|
60
|
+
return { token: sessionData.token, expiresAt: sessionData.expiresAt };
|
|
61
|
+
}
|
|
62
|
+
/** Build a single mcpServers config entry for a wallet. */
|
|
63
|
+
function buildConfigEntry(opts) {
|
|
64
|
+
const env = {
|
|
65
|
+
WAIAAS_DATA_DIR: opts.dataDir,
|
|
66
|
+
WAIAAS_BASE_URL: opts.baseUrl,
|
|
67
|
+
WAIAAS_WALLET_ID: opts.walletId,
|
|
68
|
+
};
|
|
69
|
+
if (opts.walletName) {
|
|
70
|
+
env['WAIAAS_WALLET_NAME'] = opts.walletName;
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
command: 'npx',
|
|
74
|
+
args: ['@waiaas/mcp'],
|
|
75
|
+
env,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** Print platform-specific Claude Desktop config.json path. */
|
|
79
|
+
function printConfigPath() {
|
|
80
|
+
const platform = process.platform;
|
|
81
|
+
if (platform === 'darwin') {
|
|
82
|
+
console.log('\nConfig location: ~/Library/Application Support/Claude/claude_desktop_config.json');
|
|
83
|
+
}
|
|
84
|
+
else if (platform === 'win32') {
|
|
85
|
+
console.log('\nConfig location: %APPDATA%\\Claude\\claude_desktop_config.json');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log('\nConfig location: ~/.config/Claude/claude_desktop_config.json');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export async function mcpSetupCommand(opts) {
|
|
92
|
+
const baseUrl = (opts.baseUrl ?? 'http://127.0.0.1:3100').replace(/\/+$/, '');
|
|
93
|
+
const expiresIn = opts.expiresIn ?? 86400;
|
|
94
|
+
// Validate: --all and --wallet are mutually exclusive
|
|
95
|
+
if (opts.all && opts.wallet) {
|
|
96
|
+
console.error('Error: Cannot use --all with --wallet');
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
// Step 1: Check daemon is running
|
|
100
|
+
try {
|
|
101
|
+
const healthRes = await fetch(`${baseUrl}/health`, {
|
|
102
|
+
signal: AbortSignal.timeout(5000),
|
|
103
|
+
});
|
|
104
|
+
if (!healthRes.ok) {
|
|
105
|
+
// Daemon is responding but unhealthy -- continue anyway
|
|
106
|
+
console.error(`Warning: daemon returned ${healthRes.status} on health check`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
console.error('Error: Cannot reach WAIaaS daemon.');
|
|
111
|
+
console.error(` Tried: ${baseUrl}/health`);
|
|
112
|
+
console.error(' Make sure the daemon is running: waiaas start');
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
// Step 2: Resolve master password (before wallet list which requires masterAuth)
|
|
116
|
+
const password = opts.masterPassword ?? await resolvePassword();
|
|
117
|
+
// --all: set up all wallets at once
|
|
118
|
+
if (opts.all) {
|
|
119
|
+
const wallets = await fetchWallets(baseUrl, password);
|
|
120
|
+
if (wallets.length === 0) {
|
|
121
|
+
console.error('Error: No wallets found. Run waiaas init first.');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
// Resolve slug collisions
|
|
125
|
+
const slugMap = resolveSlugCollisions(wallets);
|
|
126
|
+
// Set up each wallet
|
|
127
|
+
const mcpServers = {};
|
|
128
|
+
for (const wallet of wallets) {
|
|
129
|
+
const result = await setupWallet({
|
|
130
|
+
baseUrl,
|
|
131
|
+
dataDir: opts.dataDir,
|
|
132
|
+
password,
|
|
133
|
+
walletId: wallet.id,
|
|
134
|
+
expiresIn,
|
|
135
|
+
});
|
|
136
|
+
const slug = slugMap.get(wallet.id);
|
|
137
|
+
console.log(`MCP session created for ${wallet.name ?? wallet.id}!`);
|
|
138
|
+
console.log(` Token file: ${join(opts.dataDir, 'mcp-tokens', wallet.id)}`);
|
|
139
|
+
console.log(` Expires at: ${new Date(result.expiresAt * 1000).toISOString()}`);
|
|
140
|
+
mcpServers[`waiaas-${slug}`] = buildConfigEntry({
|
|
141
|
+
dataDir: opts.dataDir,
|
|
142
|
+
baseUrl,
|
|
143
|
+
walletId: wallet.id,
|
|
144
|
+
walletName: wallet.name,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// Print combined config snippet
|
|
148
|
+
const configSnippet = { mcpServers };
|
|
149
|
+
console.log('\nAdd to your Claude Desktop config.json:');
|
|
150
|
+
console.log(JSON.stringify(configSnippet, null, 2));
|
|
151
|
+
printConfigPath();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Step 3: Resolve wallet ID (single wallet flow)
|
|
155
|
+
let walletId = opts.wallet;
|
|
156
|
+
let walletName;
|
|
157
|
+
if (!walletId) {
|
|
158
|
+
// Auto-detect: fetch wallets list
|
|
159
|
+
try {
|
|
160
|
+
const wallets = await fetchWallets(baseUrl, password);
|
|
161
|
+
if (wallets.length === 0) {
|
|
162
|
+
console.error('Error: No wallets found. Run waiaas init first.');
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
if (wallets.length > 1) {
|
|
166
|
+
console.error('Error: Multiple wallets found. Specify --wallet <id>');
|
|
167
|
+
console.error(' Available wallets:');
|
|
168
|
+
for (const w of wallets) {
|
|
169
|
+
console.error(` ${w.id}${w.name ? ` (${w.name})` : ''}`);
|
|
170
|
+
}
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
walletId = wallets[0].id;
|
|
174
|
+
walletName = wallets[0]?.name ?? undefined;
|
|
175
|
+
console.error(`Auto-detected wallet: ${walletId}`);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
if (err instanceof Error && 'code' in err) {
|
|
179
|
+
// Already handled exit cases above
|
|
180
|
+
throw err;
|
|
181
|
+
}
|
|
182
|
+
console.error('Error: Failed to list wallets');
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// --wallet specified: look up name from wallets list
|
|
188
|
+
try {
|
|
189
|
+
const wallets = await fetchWallets(baseUrl, password);
|
|
190
|
+
const found = wallets.find((w) => w.id === walletId);
|
|
191
|
+
walletName = found?.name ?? undefined;
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Name lookup failure is not fatal -- continue without name
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Step 4 + 5: Create session and write token file
|
|
198
|
+
let result;
|
|
199
|
+
try {
|
|
200
|
+
result = await setupWallet({
|
|
201
|
+
baseUrl,
|
|
202
|
+
dataDir: opts.dataDir,
|
|
203
|
+
password,
|
|
204
|
+
walletId,
|
|
205
|
+
expiresIn,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
if (err instanceof Error && 'code' in err) {
|
|
210
|
+
throw err;
|
|
211
|
+
}
|
|
212
|
+
console.error('Error: Failed to create session');
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
// Step 6: Output result
|
|
216
|
+
const tokenPath = join(opts.dataDir, 'mcp-tokens', walletId);
|
|
217
|
+
console.log('MCP session created successfully!');
|
|
218
|
+
console.log(` Token file: ${tokenPath}`);
|
|
219
|
+
console.log(` Expires at: ${new Date(result.expiresAt * 1000).toISOString()}`);
|
|
220
|
+
console.log(` Wallet: ${walletId}`);
|
|
221
|
+
// Step 7: Print Claude Desktop config.json snippet (CLI-05 + CLIP-02/03)
|
|
222
|
+
const slug = toSlug(walletName ?? walletId);
|
|
223
|
+
const configSnippet = {
|
|
224
|
+
mcpServers: {
|
|
225
|
+
[`waiaas-${slug}`]: buildConfigEntry({
|
|
226
|
+
dataDir: opts.dataDir,
|
|
227
|
+
baseUrl,
|
|
228
|
+
walletId,
|
|
229
|
+
walletName,
|
|
230
|
+
}),
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
console.log('\nAdd to your Claude Desktop config.json:');
|
|
234
|
+
console.log(JSON.stringify(configSnippet, null, 2));
|
|
235
|
+
printConfigPath();
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=mcp-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/commands/mcp-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `waiaas owner` subcommand group:
|
|
3
|
+
* owner connect -- Connect external wallet via WalletConnect QR
|
|
4
|
+
* owner disconnect -- Disconnect WC session
|
|
5
|
+
* owner status -- Show WC session status
|
|
6
|
+
*
|
|
7
|
+
* All commands use masterAuth (X-Master-Password header) for daemon communication.
|
|
8
|
+
*/
|
|
9
|
+
export interface OwnerCommandOptions {
|
|
10
|
+
baseUrl: string;
|
|
11
|
+
password?: string;
|
|
12
|
+
walletId?: string;
|
|
13
|
+
poll?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* `waiaas owner connect` -- Connect external wallet via WalletConnect QR code.
|
|
17
|
+
*/
|
|
18
|
+
export declare function ownerConnectCommand(opts: OwnerCommandOptions): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* `waiaas owner disconnect` -- Disconnect WalletConnect session.
|
|
21
|
+
*/
|
|
22
|
+
export declare function ownerDisconnectCommand(opts: OwnerCommandOptions): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* `waiaas owner status` -- Show WalletConnect session status.
|
|
25
|
+
*/
|
|
26
|
+
export declare function ownerStatusCommand(opts: OwnerCommandOptions): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=owner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../../src/commands/owner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA+GD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDlF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CASrF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBjF"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `waiaas owner` subcommand group:
|
|
3
|
+
* owner connect -- Connect external wallet via WalletConnect QR
|
|
4
|
+
* owner disconnect -- Disconnect WC session
|
|
5
|
+
* owner status -- Show WC session status
|
|
6
|
+
*
|
|
7
|
+
* All commands use masterAuth (X-Master-Password header) for daemon communication.
|
|
8
|
+
*/
|
|
9
|
+
import QRCode from 'qrcode';
|
|
10
|
+
import { resolvePassword } from '../utils/password.js';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve master password from --password flag or env/prompt.
|
|
13
|
+
*/
|
|
14
|
+
async function getMasterPassword(opts) {
|
|
15
|
+
if (opts.password)
|
|
16
|
+
return opts.password;
|
|
17
|
+
return resolvePassword();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Make an authenticated request to the daemon.
|
|
21
|
+
*/
|
|
22
|
+
async function daemonRequest(baseUrl, method, path, password, body) {
|
|
23
|
+
const headers = {
|
|
24
|
+
'Content-Type': 'application/json',
|
|
25
|
+
'X-Master-Password': password,
|
|
26
|
+
};
|
|
27
|
+
const res = await fetch(`${baseUrl}${path}`, {
|
|
28
|
+
method,
|
|
29
|
+
headers,
|
|
30
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
31
|
+
});
|
|
32
|
+
if (!res.ok) {
|
|
33
|
+
const errBody = await res.json().catch(() => null);
|
|
34
|
+
const msg = errBody?.['message'] ?? res.statusText;
|
|
35
|
+
console.error(`Error (${res.status}): ${msg}`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
return (await res.json());
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Select wallet: use --wallet if provided, otherwise auto-detect if only one exists.
|
|
42
|
+
*/
|
|
43
|
+
async function selectWallet(baseUrl, password, walletId) {
|
|
44
|
+
const data = await daemonRequest(baseUrl, 'GET', '/v1/wallets', password);
|
|
45
|
+
if (data.items.length === 0) {
|
|
46
|
+
console.error('Error: No wallets found. Create one first with `waiaas quickstart`.');
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
if (walletId) {
|
|
50
|
+
const found = data.items.find((w) => w.id === walletId || w.name === walletId);
|
|
51
|
+
if (!found) {
|
|
52
|
+
console.error(`Error: Wallet '${walletId}' not found.`);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
return found;
|
|
56
|
+
}
|
|
57
|
+
if (data.items.length > 1) {
|
|
58
|
+
console.error('Error: Multiple wallets found. Use --wallet <id> to specify one.');
|
|
59
|
+
console.error(' Available wallets:');
|
|
60
|
+
for (const w of data.items) {
|
|
61
|
+
console.error(` ${w.id} ${w.name} (${w.chain}/${w.environment})`);
|
|
62
|
+
}
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
return data.items[0];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* `waiaas owner connect` -- Connect external wallet via WalletConnect QR code.
|
|
69
|
+
*/
|
|
70
|
+
export async function ownerConnectCommand(opts) {
|
|
71
|
+
const password = await getMasterPassword(opts);
|
|
72
|
+
const wallet = await selectWallet(opts.baseUrl, password, opts.walletId);
|
|
73
|
+
console.log(`\nInitiating WalletConnect pairing for wallet '${wallet.name}'...`);
|
|
74
|
+
const result = await daemonRequest(opts.baseUrl, 'POST', `/v1/wallets/${wallet.id}/wc/pair`, password);
|
|
75
|
+
// Generate terminal QR code from URI
|
|
76
|
+
const terminalQr = await QRCode.toString(result.uri, { type: 'terminal', small: true });
|
|
77
|
+
console.log('\n' + terminalQr);
|
|
78
|
+
console.log(`URI: ${result.uri}`);
|
|
79
|
+
console.log("\nScan with D'CENT, MetaMask, Phantom, or any WalletConnect-compatible wallet.\n");
|
|
80
|
+
if (!opts.poll)
|
|
81
|
+
return;
|
|
82
|
+
// Poll for connection status
|
|
83
|
+
console.log('Waiting for wallet to connect...');
|
|
84
|
+
const maxPolls = 100; // ~5 minutes at 3s intervals
|
|
85
|
+
for (let i = 0; i < maxPolls; i++) {
|
|
86
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
87
|
+
try {
|
|
88
|
+
const status = await daemonRequest(opts.baseUrl, 'GET', `/v1/wallets/${wallet.id}/wc/pair/status`, password);
|
|
89
|
+
if (status.status === 'connected') {
|
|
90
|
+
const peerName = status.session?.peerName ?? 'Unknown';
|
|
91
|
+
const ownerAddr = status.session?.ownerAddress ?? 'N/A';
|
|
92
|
+
console.log(`\nConnected! Peer: ${peerName}`);
|
|
93
|
+
console.log(` Owner Address: ${ownerAddr}`);
|
|
94
|
+
console.log(` Chain ID: ${status.session?.chainId ?? 'N/A'}`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (status.status === 'expired' || status.status === 'none') {
|
|
98
|
+
console.log('\nPairing expired. Try again.');
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
// Still pending -- continue polling
|
|
102
|
+
process.stdout.write('.');
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Network error -- keep trying
|
|
106
|
+
process.stdout.write('x');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
console.log('\nTimeout: No connection after 5 minutes.');
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* `waiaas owner disconnect` -- Disconnect WalletConnect session.
|
|
114
|
+
*/
|
|
115
|
+
export async function ownerDisconnectCommand(opts) {
|
|
116
|
+
const password = await getMasterPassword(opts);
|
|
117
|
+
const wallet = await selectWallet(opts.baseUrl, password, opts.walletId);
|
|
118
|
+
await daemonRequest(opts.baseUrl, 'DELETE', `/v1/wallets/${wallet.id}/wc/session`, password);
|
|
119
|
+
console.log(`\nWalletConnect session disconnected for wallet '${wallet.name}'.\n`);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* `waiaas owner status` -- Show WalletConnect session status.
|
|
123
|
+
*/
|
|
124
|
+
export async function ownerStatusCommand(opts) {
|
|
125
|
+
const password = await getMasterPassword(opts);
|
|
126
|
+
const wallet = await selectWallet(opts.baseUrl, password, opts.walletId);
|
|
127
|
+
try {
|
|
128
|
+
const session = await daemonRequest(opts.baseUrl, 'GET', `/v1/wallets/${wallet.id}/wc/session`, password);
|
|
129
|
+
console.log('');
|
|
130
|
+
console.log(`WalletConnect Session for '${wallet.name}':`);
|
|
131
|
+
console.log(` Peer: ${session.peerName ?? 'Unknown'}`);
|
|
132
|
+
console.log(` Peer URL: ${session.peerUrl ?? 'N/A'}`);
|
|
133
|
+
console.log(` Owner Address: ${session.ownerAddress}`);
|
|
134
|
+
console.log(` Chain ID: ${session.chainId}`);
|
|
135
|
+
console.log(` Expires: ${new Date(session.expiry * 1000).toISOString()}`);
|
|
136
|
+
console.log(` Created: ${new Date(session.createdAt * 1000).toISOString()}`);
|
|
137
|
+
console.log('');
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// daemonRequest exits on error, so if we get 404 it'll exit there
|
|
141
|
+
// This catch is a safety net
|
|
142
|
+
console.log(`\nNo active WalletConnect session for wallet '${wallet.name}'.\n`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner.js","sourceRoot":"","sources":["../../src/commands/owner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `waiaas quickstart` -- Create Solana + EVM wallets for quick setup.
|
|
3
|
+
*
|
|
4
|
+
* One-command multi-chain environment setup:
|
|
5
|
+
* 1. Check daemon is running (GET /health)
|
|
6
|
+
* 2. Resolve master password
|
|
7
|
+
* 3. Create Solana + EVM wallets with environment mode
|
|
8
|
+
* 4. Fetch available networks for each wallet
|
|
9
|
+
* 5. Create MCP sessions + write token files
|
|
10
|
+
* 6. Output wallet info + MCP config snippet
|
|
11
|
+
*/
|
|
12
|
+
export interface QuickstartOptions {
|
|
13
|
+
dataDir: string;
|
|
14
|
+
baseUrl?: string;
|
|
15
|
+
mode?: 'testnet' | 'mainnet';
|
|
16
|
+
masterPassword?: string;
|
|
17
|
+
expiresIn?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function quickstartCommand(opts: QuickstartOptions): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=quickstart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../../src/commands/quickstart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2FD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2I9E"}
|