@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 @@
1
+ {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/utils/password.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAiBvD"}
@@ -0,0 +1,58 @@
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
+ import { readFileSync } from 'node:fs';
10
+ import { createInterface } from 'node:readline';
11
+ export async function resolvePassword() {
12
+ // 1. Env var
13
+ const envPassword = process.env['WAIAAS_MASTER_PASSWORD'];
14
+ if (envPassword)
15
+ return envPassword;
16
+ // 2. Password file
17
+ const passwordFile = process.env['WAIAAS_MASTER_PASSWORD_FILE'];
18
+ if (passwordFile) {
19
+ const content = readFileSync(passwordFile, 'utf-8').trim();
20
+ if (content.length === 0) {
21
+ throw new Error('WAIAAS_MASTER_PASSWORD_FILE is empty');
22
+ }
23
+ return content;
24
+ }
25
+ // 3. Interactive prompt
26
+ return promptPassword('Master password: ');
27
+ }
28
+ /**
29
+ * Prompt for a password with hidden input.
30
+ */
31
+ function promptPassword(prompt) {
32
+ return new Promise((resolve, reject) => {
33
+ const rl = createInterface({
34
+ input: process.stdin,
35
+ output: process.stdout,
36
+ });
37
+ // Hide input using ANSI escape
38
+ process.stdout.write(prompt);
39
+ process.stdout.write('\x1B[8m'); // hide text
40
+ rl.once('line', (line) => {
41
+ process.stdout.write('\x1B[28m'); // show text again
42
+ process.stdout.write('\n');
43
+ rl.close();
44
+ const password = line.trim();
45
+ if (password.length === 0) {
46
+ reject(new Error('Password cannot be empty'));
47
+ return;
48
+ }
49
+ resolve(password);
50
+ });
51
+ rl.once('error', (err) => {
52
+ process.stdout.write('\x1B[28m');
53
+ rl.close();
54
+ reject(err);
55
+ });
56
+ });
57
+ }
58
+ //# sourceMappingURL=password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/utils/password.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,aAAa;IACb,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC1D,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,mBAAmB;IACnB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAChE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,wBAAwB;IACxB,OAAO,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,GAAG,eAAe,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;QAE7C,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACjC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Slug utilities for wallet name -> config-safe key conversion.
3
+ *
4
+ * Used by `mcp setup` to generate unique MCP server keys
5
+ * like "waiaas-trading-bot" from wallet names.
6
+ */
7
+ /**
8
+ * Convert wallet name to URL/config-safe slug.
9
+ * - lowercase
10
+ * - non-alphanumeric/non-hyphen -> hyphen
11
+ * - collapse consecutive hyphens
12
+ * - trim leading/trailing hyphens
13
+ * - fallback to 'wallet' if result is empty
14
+ */
15
+ export declare function toSlug(name: string): string;
16
+ /**
17
+ * Resolve slug collisions for a list of wallets.
18
+ * Returns Map<walletId, resolvedSlug>.
19
+ *
20
+ * If two or more wallets produce the same slug, append `-{walletId first 8 chars}`.
21
+ * Example: "trading-bot" collides -> "trading-bot-01929abc"
22
+ */
23
+ export declare function resolveSlugCollisions(wallets: Array<{
24
+ id: string;
25
+ name?: string | null;
26
+ }>): Map<string, string>;
27
+ //# sourceMappingURL=slug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO3C;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,GACnD,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBrB"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Slug utilities for wallet name -> config-safe key conversion.
3
+ *
4
+ * Used by `mcp setup` to generate unique MCP server keys
5
+ * like "waiaas-trading-bot" from wallet names.
6
+ */
7
+ /**
8
+ * Convert wallet name to URL/config-safe slug.
9
+ * - lowercase
10
+ * - non-alphanumeric/non-hyphen -> hyphen
11
+ * - collapse consecutive hyphens
12
+ * - trim leading/trailing hyphens
13
+ * - fallback to 'wallet' if result is empty
14
+ */
15
+ export function toSlug(name) {
16
+ const slug = name
17
+ .toLowerCase()
18
+ .replace(/[^a-z0-9-]/g, '-')
19
+ .replace(/-{2,}/g, '-')
20
+ .replace(/^-|-$/g, '');
21
+ return slug || 'wallet';
22
+ }
23
+ /**
24
+ * Resolve slug collisions for a list of wallets.
25
+ * Returns Map<walletId, resolvedSlug>.
26
+ *
27
+ * If two or more wallets produce the same slug, append `-{walletId first 8 chars}`.
28
+ * Example: "trading-bot" collides -> "trading-bot-01929abc"
29
+ */
30
+ export function resolveSlugCollisions(wallets) {
31
+ // Step 1: compute raw slugs
32
+ const entries = wallets.map((w) => ({
33
+ id: w.id,
34
+ slug: toSlug(w.name ?? w.id),
35
+ }));
36
+ // Step 2: detect collisions (count occurrences per slug)
37
+ const slugCounts = new Map();
38
+ for (const e of entries) {
39
+ slugCounts.set(e.slug, (slugCounts.get(e.slug) ?? 0) + 1);
40
+ }
41
+ // Step 3: resolve collisions
42
+ const result = new Map();
43
+ for (const e of entries) {
44
+ if (slugCounts.get(e.slug) > 1) {
45
+ result.set(e.id, `${e.slug}-${e.id.slice(0, 8)}`);
46
+ }
47
+ else {
48
+ result.set(e.id, e.slug);
49
+ }
50
+ }
51
+ return result;
52
+ }
53
+ //# sourceMappingURL=slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,MAAM,IAAI,GAAG,IAAI;SACd,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,OAAO,IAAI,IAAI,QAAQ,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAoD;IAEpD,4BAA4B;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;KAC7B,CAAC,CAAC,CAAC;IAEJ,yDAAyD;IACzD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * CLI upgrade notification utility.
3
+ *
4
+ * Checks the daemon /health endpoint for update availability and displays
5
+ * a notification box on stderr. Uses file-based 24-hour dedup to avoid
6
+ * spamming users on repeated CLI invocations.
7
+ *
8
+ * Design constraints:
9
+ * - MUST NOT write to stdout (pipe safety)
10
+ * - MUST NOT throw (CLI must always work even if notification fails)
11
+ * - MUST NOT block CLI startup (called fire-and-forget)
12
+ */
13
+ export interface UpdateNotifyOpts {
14
+ dataDir: string;
15
+ quiet?: boolean;
16
+ }
17
+ /**
18
+ * Check for available updates and print a notification box to stderr.
19
+ *
20
+ * Safe to call fire-and-forget — all errors are silently swallowed.
21
+ */
22
+ export declare function checkAndNotifyUpdate(opts: UpdateNotifyOpts): Promise<void>;
23
+ //# sourceMappingURL=update-notify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-notify.d.ts","sourceRoot":"","sources":["../../src/utils/update-notify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwChF"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * CLI upgrade notification utility.
3
+ *
4
+ * Checks the daemon /health endpoint for update availability and displays
5
+ * a notification box on stderr. Uses file-based 24-hour dedup to avoid
6
+ * spamming users on repeated CLI invocations.
7
+ *
8
+ * Design constraints:
9
+ * - MUST NOT write to stdout (pipe safety)
10
+ * - MUST NOT throw (CLI must always work even if notification fails)
11
+ * - MUST NOT block CLI startup (called fire-and-forget)
12
+ */
13
+ import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs';
14
+ import { join } from 'node:path';
15
+ /** Default daemon port when config.toml is unavailable. */
16
+ const DEFAULT_PORT = 3100;
17
+ /** Suppress duplicate notifications within this window (ms). */
18
+ const DEDUP_WINDOW_MS = 24 * 60 * 60 * 1000; // 24 hours
19
+ /** Fetch timeout to keep CLI responsive (ms). */
20
+ const FETCH_TIMEOUT_MS = 2000;
21
+ /** Filename used to track last notification time. */
22
+ const LAST_NOTIFY_FILE = '.last-update-notify';
23
+ /**
24
+ * Check for available updates and print a notification box to stderr.
25
+ *
26
+ * Safe to call fire-and-forget — all errors are silently swallowed.
27
+ */
28
+ export async function checkAndNotifyUpdate(opts) {
29
+ try {
30
+ // 1. Suppress if quiet mode
31
+ if (opts.quiet === true || process.env['WAIAAS_NO_UPDATE_NOTIFY'] === '1') {
32
+ return;
33
+ }
34
+ // 2. Resolve port from config.toml
35
+ const port = resolvePort(opts.dataDir);
36
+ // 3. Fetch /health with timeout
37
+ const res = await fetch(`http://127.0.0.1:${port}/health`, {
38
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
39
+ });
40
+ if (!res.ok)
41
+ return;
42
+ const body = (await res.json());
43
+ // 4. Check if update is available
44
+ if (body.updateAvailable !== true)
45
+ return;
46
+ // 5. 24-hour dedup via file mtime
47
+ const notifyPath = join(opts.dataDir, LAST_NOTIFY_FILE);
48
+ if (isWithinDedupWindow(notifyPath))
49
+ return;
50
+ // 6. Touch the dedup file
51
+ writeFileSync(notifyPath, '', 'utf-8');
52
+ // 7. Render notification box to stderr
53
+ const currentVersion = body.version ?? 'unknown';
54
+ const latestVersion = body.latestVersion ?? 'unknown';
55
+ renderNotification(currentVersion, latestVersion);
56
+ }
57
+ catch {
58
+ // Silently ignore all errors — CLI must not break
59
+ }
60
+ }
61
+ /**
62
+ * Check whether the dedup file exists and was modified within the dedup window.
63
+ */
64
+ function isWithinDedupWindow(filePath) {
65
+ try {
66
+ if (!existsSync(filePath))
67
+ return false;
68
+ const stat = statSync(filePath);
69
+ const age = Date.now() - stat.mtimeMs;
70
+ return age < DEDUP_WINDOW_MS;
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ /**
77
+ * Resolve daemon port from config.toml using simple regex (no TOML parser dependency).
78
+ */
79
+ function resolvePort(dataDir) {
80
+ try {
81
+ const configPath = join(dataDir, 'config.toml');
82
+ if (!existsSync(configPath))
83
+ return DEFAULT_PORT;
84
+ const content = readFileSync(configPath, 'utf-8');
85
+ const match = /^\s*port\s*=\s*(\d+)/m.exec(content);
86
+ if (match?.[1]) {
87
+ const port = parseInt(match[1], 10);
88
+ if (port > 0 && port <= 65535)
89
+ return port;
90
+ }
91
+ }
92
+ catch {
93
+ // Ignore config read errors
94
+ }
95
+ return DEFAULT_PORT;
96
+ }
97
+ /**
98
+ * Render an update notification box to stderr.
99
+ */
100
+ function renderNotification(currentVersion, latestVersion) {
101
+ const message = `Update available: ${currentVersion} → ${latestVersion}`;
102
+ const action = 'Run: waiaas upgrade';
103
+ // Calculate box width (account for 3-space padding on each side)
104
+ const contentWidth = Math.max(message.length, action.length);
105
+ const boxWidth = contentWidth + 6; // 3 padding each side
106
+ const top = `\u256D${'─'.repeat(boxWidth)}\u256E`;
107
+ const bottom = `\u2570${'─'.repeat(boxWidth)}\u256F`;
108
+ const empty = `\u2502${' '.repeat(boxWidth)}\u2502`;
109
+ const msgLine = `\u2502 ${message.padEnd(contentWidth)} \u2502`;
110
+ const actLine = `\u2502 ${action.padEnd(contentWidth)} \u2502`;
111
+ const box = `\n${top}\n${empty}\n${msgLine}\n${actLine}\n${empty}\n${bottom}\n`;
112
+ process.stderr.write(box);
113
+ }
114
+ //# sourceMappingURL=update-notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-notify.js","sourceRoot":"","sources":["../../src/utils/update-notify.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@waiaas/cli",
3
+ "version": "2.0.0-rc.1",
4
+ "description": "WAIaaS CLI - command-line interface for managing the wallet daemon",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/minho-yoo/waiaas.git",
10
+ "directory": "packages/cli"
11
+ },
12
+ "homepage": "https://github.com/minho-yoo/waiaas#readme",
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "main": "dist/index.js",
17
+ "bin": {
18
+ "waiaas": "./bin/waiaas"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "bin"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "test": "vitest run",
27
+ "test:unit": "vitest run",
28
+ "test:integration": "[ -d src/__tests__/integration ] && vitest run --dir src/__tests__/integration || true",
29
+ "test:security": "[ -d src/__tests__/security ] && vitest run --dir src/__tests__/security || true",
30
+ "test:chain": "[ -d src/__tests__/chain ] && vitest run --dir src/__tests__/chain || true",
31
+ "test:platform": "[ -d src/__tests__/platform ] && vitest run --dir src/__tests__/platform || true",
32
+ "lint": "eslint src/",
33
+ "typecheck": "tsc --noEmit",
34
+ "clean": "rm -rf dist"
35
+ },
36
+ "dependencies": {
37
+ "@waiaas/core": "workspace:*",
38
+ "@waiaas/daemon": "workspace:*",
39
+ "commander": "^13.0.0",
40
+ "qrcode": "^1.5.4",
41
+ "semver": "^7.7.4"
42
+ },
43
+ "devDependencies": {
44
+ "@hono/node-server": "^1.19.9",
45
+ "@types/qrcode": "^1.5.6",
46
+ "@types/semver": "^7.7.1",
47
+ "argon2": "^0.44.0"
48
+ }
49
+ }