coolhand-cli 0.1.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 (83) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +119 -0
  3. package/dist/auth/callback-server.d.ts +13 -0
  4. package/dist/auth/callback-server.d.ts.map +1 -0
  5. package/dist/auth/callback-server.js +133 -0
  6. package/dist/auth/callback-server.js.map +1 -0
  7. package/dist/auth/open-browser.d.ts +8 -0
  8. package/dist/auth/open-browser.d.ts.map +1 -0
  9. package/dist/auth/open-browser.js +31 -0
  10. package/dist/auth/open-browser.js.map +1 -0
  11. package/dist/auth/state.d.ts +3 -0
  12. package/dist/auth/state.d.ts.map +1 -0
  13. package/dist/auth/state.js +16 -0
  14. package/dist/auth/state.js.map +1 -0
  15. package/dist/auth/success-page.d.ts +3 -0
  16. package/dist/auth/success-page.d.ts.map +1 -0
  17. package/dist/auth/success-page.js +176 -0
  18. package/dist/auth/success-page.js.map +1 -0
  19. package/dist/bin.d.ts +3 -0
  20. package/dist/bin.d.ts.map +1 -0
  21. package/dist/bin.js +14 -0
  22. package/dist/bin.js.map +1 -0
  23. package/dist/cli.d.ts +9 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +187 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/commands/accounts.d.ts +3 -0
  28. package/dist/commands/accounts.d.ts.map +1 -0
  29. package/dist/commands/accounts.js +59 -0
  30. package/dist/commands/accounts.js.map +1 -0
  31. package/dist/commands/clients.d.ts +3 -0
  32. package/dist/commands/clients.d.ts.map +1 -0
  33. package/dist/commands/clients.js +59 -0
  34. package/dist/commands/clients.js.map +1 -0
  35. package/dist/commands/login.d.ts +3 -0
  36. package/dist/commands/login.d.ts.map +1 -0
  37. package/dist/commands/login.js +119 -0
  38. package/dist/commands/login.js.map +1 -0
  39. package/dist/commands/logout.d.ts +3 -0
  40. package/dist/commands/logout.d.ts.map +1 -0
  41. package/dist/commands/logout.js +39 -0
  42. package/dist/commands/logout.js.map +1 -0
  43. package/dist/commands/status.d.ts +5 -0
  44. package/dist/commands/status.d.ts.map +1 -0
  45. package/dist/commands/status.js +37 -0
  46. package/dist/commands/status.js.map +1 -0
  47. package/dist/commands/whoami.d.ts +3 -0
  48. package/dist/commands/whoami.d.ts.map +1 -0
  49. package/dist/commands/whoami.js +20 -0
  50. package/dist/commands/whoami.js.map +1 -0
  51. package/dist/config.d.ts +11 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +127 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/env-file.d.ts +12 -0
  56. package/dist/env-file.d.ts.map +1 -0
  57. package/dist/env-file.js +62 -0
  58. package/dist/env-file.js.map +1 -0
  59. package/dist/errors.d.ts +13 -0
  60. package/dist/errors.d.ts.map +1 -0
  61. package/dist/errors.js +16 -0
  62. package/dist/errors.js.map +1 -0
  63. package/dist/index.d.ts +7 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +6 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/logger.d.ts +8 -0
  68. package/dist/logger.d.ts.map +1 -0
  69. package/dist/logger.js +29 -0
  70. package/dist/logger.js.map +1 -0
  71. package/dist/mask.d.ts +7 -0
  72. package/dist/mask.d.ts.map +1 -0
  73. package/dist/mask.js +12 -0
  74. package/dist/mask.js.map +1 -0
  75. package/dist/types.d.ts +52 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +3 -0
  78. package/dist/types.js.map +1 -0
  79. package/dist/version.d.ts +11 -0
  80. package/dist/version.d.ts.map +1 -0
  81. package/dist/version.js +11 -0
  82. package/dist/version.js.map +1 -0
  83. package/package.json +74 -0
@@ -0,0 +1,176 @@
1
+ /**
2
+ * The HTML the local callback listener returns to the browser after a
3
+ * successful token capture. Pure inline CSS, no external assets, no JS.
4
+ * Color palette mirrors coolhandlabs.com (shadcn dark mode HSL values).
5
+ */
6
+ const BASE_STYLES = `
7
+ * { box-sizing: border-box; margin: 0; padding: 0; }
8
+ html, body { height: 100%; }
9
+ body {
10
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
11
+ "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
12
+ background: hsl(222.2 84% 4.9%);
13
+ color: hsl(210 40% 98%);
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ min-height: 100vh;
18
+ padding: 24px;
19
+ line-height: 1.5;
20
+ -webkit-font-smoothing: antialiased;
21
+ -moz-osx-font-smoothing: grayscale;
22
+ }
23
+ .wrap { width: 100%; max-width: 440px; }
24
+ .brand {
25
+ text-align: center;
26
+ margin-bottom: 32px;
27
+ }
28
+ .brand-logo {
29
+ height: 157px;
30
+ width: auto;
31
+ max-width: 100%;
32
+ display: inline-block;
33
+ }
34
+ .brand-text {
35
+ display: none;
36
+ font-size: 13px;
37
+ font-weight: 600;
38
+ letter-spacing: 0.15em;
39
+ text-transform: uppercase;
40
+ color: hsl(215 20.2% 65.1%);
41
+ align-items: center;
42
+ justify-content: center;
43
+ }
44
+ .brand-dot {
45
+ display: inline-block;
46
+ width: 8px;
47
+ height: 8px;
48
+ border-radius: 50%;
49
+ background: hsl(217.2 91.2% 59.8%);
50
+ margin-right: 8px;
51
+ vertical-align: middle;
52
+ transform: translateY(-1px);
53
+ }
54
+ .card {
55
+ background: hsl(222.2 84% 4.9%);
56
+ border: 1px solid hsl(217.2 32.6% 17.5%);
57
+ border-radius: 12px;
58
+ padding: 40px 32px 32px;
59
+ text-align: center;
60
+ box-shadow: 0 24px 48px -16px rgba(0, 0, 0, 0.5);
61
+ }
62
+ .icon-wrap {
63
+ width: 64px;
64
+ height: 64px;
65
+ border-radius: 50%;
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ margin: 0 auto 20px;
70
+ }
71
+ .icon-svg { width: 32px; height: 32px; }
72
+ h1 {
73
+ font-size: 20px;
74
+ font-weight: 600;
75
+ color: hsl(210 40% 98%);
76
+ margin-bottom: 8px;
77
+ letter-spacing: -0.01em;
78
+ }
79
+ p {
80
+ color: hsl(215 20.2% 65.1%);
81
+ font-size: 14px;
82
+ }
83
+ p + p { margin-top: 12px; }
84
+ .foot {
85
+ text-align: center;
86
+ margin-top: 24px;
87
+ font-size: 12px;
88
+ color: hsl(215 20.2% 65.1%);
89
+ }
90
+ `;
91
+ const BRAND_BLOCK = `
92
+ <div class="brand">
93
+ <img src="https://coolhandlabs.com/coolhand-logo.png" alt="Coolhand"
94
+ class="brand-logo"
95
+ onerror="this.style.display='none'; this.nextElementSibling.style.display='inline-flex';">
96
+ <span class="brand-text"><span class="brand-dot"></span>coolhand</span>
97
+ </div>
98
+ `;
99
+ const SUCCESS_BODY = `
100
+ ${BRAND_BLOCK}
101
+ <div class="card">
102
+ <div class="icon-wrap" style="background: hsl(217.2 91.2% 59.8% / 0.12);">
103
+ <svg class="icon-svg" viewBox="0 0 24 24" fill="none"
104
+ stroke="hsl(217.2 91.2% 59.8%)" stroke-width="2.5"
105
+ stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
106
+ <polyline points="20 6 9 17 4 12"></polyline>
107
+ </svg>
108
+ </div>
109
+ <h1>Token captured</h1>
110
+ <p>You can close this tab and return to your terminal.</p>
111
+ </div>
112
+ <p class="foot">coolhand-cli received your API token securely.</p>
113
+ `;
114
+ export const SUCCESS_HTML = `<!doctype html>
115
+ <html lang="en">
116
+ <head>
117
+ <meta charset="utf-8">
118
+ <title>Coolhand — Token captured</title>
119
+ <meta name="viewport" content="width=device-width,initial-scale=1">
120
+ <meta name="color-scheme" content="dark">
121
+ <meta name="robots" content="noindex">
122
+ <style>${BASE_STYLES}</style>
123
+ </head>
124
+ <body>
125
+ <main class="wrap">${SUCCESS_BODY}</main>
126
+ </body>
127
+ </html>
128
+ `;
129
+ export function errorHtml(message) {
130
+ const safe = message.replace(/[&<>"']/g, (ch) => {
131
+ switch (ch) {
132
+ case '&':
133
+ return '&amp;';
134
+ case '<':
135
+ return '&lt;';
136
+ case '>':
137
+ return '&gt;';
138
+ case '"':
139
+ return '&quot;';
140
+ default:
141
+ return '&#39;';
142
+ }
143
+ });
144
+ const body = `
145
+ ${BRAND_BLOCK}
146
+ <div class="card">
147
+ <div class="icon-wrap" style="background: hsl(0 62.8% 30.6% / 0.15);">
148
+ <svg class="icon-svg" viewBox="0 0 24 24" fill="none"
149
+ stroke="hsl(0 84% 60%)" stroke-width="2.5"
150
+ stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
151
+ <line x1="18" y1="6" x2="6" y2="18"></line>
152
+ <line x1="6" y1="6" x2="18" y2="18"></line>
153
+ </svg>
154
+ </div>
155
+ <h1>Request rejected</h1>
156
+ <p>${safe}</p>
157
+ <p>Return to your terminal for details.</p>
158
+ </div>
159
+ `;
160
+ return `<!doctype html>
161
+ <html lang="en">
162
+ <head>
163
+ <meta charset="utf-8">
164
+ <title>Coolhand — Request rejected</title>
165
+ <meta name="viewport" content="width=device-width,initial-scale=1">
166
+ <meta name="color-scheme" content="dark">
167
+ <meta name="robots" content="noindex">
168
+ <style>${BASE_STYLES}</style>
169
+ </head>
170
+ <body>
171
+ <main class="wrap">${body}</main>
172
+ </body>
173
+ </html>
174
+ `;
175
+ }
176
+ //# sourceMappingURL=success-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"success-page.js","sourceRoot":"","sources":["../../src/auth/success-page.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoFnB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;CAOnB,CAAC;AAEF,MAAM,YAAY,GAAG;IACjB,WAAW;;;;;;;;;;;;;CAad,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;WAQjB,WAAW;;;uBAGC,YAAY;;;CAGlC,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,GAAG;gBACN,OAAO,OAAO,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,MAAM,CAAC;YAChB,KAAK,GAAG;gBACN,OAAO,MAAM,CAAC;YAChB,KAAK,GAAG;gBACN,OAAO,QAAQ,CAAC;YAClB;gBACE,OAAO,OAAO,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG;MACT,WAAW;;;;;;;;;;;WAWN,IAAI;;;GAGZ,CAAC;IACF,OAAO;;;;;;;;WAQE,WAAW;;;uBAGC,IAAI;;;CAG1B,CAAC;AACF,CAAC"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import { run } from './cli.js';
3
+ import { ExitCode } from './errors.js';
4
+ import { logger, redact } from './logger.js';
5
+ run(process.argv.slice(2))
6
+ .then((code) => {
7
+ process.exit(code);
8
+ })
9
+ .catch((err) => {
10
+ const message = err instanceof Error ? err.message : String(err);
11
+ logger.info(`Unexpected error: ${redact(message)}`);
12
+ process.exit(ExitCode.INTERNAL);
13
+ });
14
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE7C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IACb,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ interface ParsedArgs {
2
+ command: string;
3
+ positional: string[];
4
+ flags: Record<string, string | boolean>;
5
+ }
6
+ export declare function parseArgs(argv: string[]): ParsedArgs;
7
+ export declare function run(argv: string[]): Promise<number>;
8
+ export {};
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAgBA,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACzC;AAgCD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqCpD;AAsED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CzD"}
package/dist/cli.js ADDED
@@ -0,0 +1,187 @@
1
+ import { CliError, ExitCode } from './errors.js';
2
+ import { logger, redact } from './logger.js';
3
+ import { PACKAGE_VERSION } from './version.js';
4
+ import { run as runLogin } from './commands/login.js';
5
+ import { run as runLogout } from './commands/logout.js';
6
+ import { run as runStatus } from './commands/status.js';
7
+ import { run as runWhoami } from './commands/whoami.js';
8
+ import { run as runClients } from './commands/clients.js';
9
+ const HELP_TEXT = `coolhand-cli — authenticate with Coolhand from your terminal
10
+
11
+ Usage:
12
+ coolhand <command> [options]
13
+
14
+ Commands:
15
+ login Open a browser to retrieve and store an API token
16
+ logout Remove a stored client
17
+ status Check whether a token is configured
18
+ whoami Show the currently configured client
19
+ clients [use <id>] List or switch the default client
20
+ help Show this message
21
+
22
+ Global options:
23
+ --version, -v Print version and exit
24
+ --help, -h Show command help
25
+
26
+ Login options:
27
+ --base-url URL Coolhand server (default: https://coolhandlabs.com)
28
+ --write-env PATH Idempotently set COOLHAND_API_KEY in PATH
29
+ --client-id ID Hint to the server about which client to select
30
+ --json Emit JSON output instead of human-readable text
31
+
32
+ Logout options:
33
+ --client-id ID Remove a specific client
34
+ --all Remove every stored client
35
+
36
+ Run "coolhand <command> --help" for more details.
37
+ `;
38
+ export function parseArgs(argv) {
39
+ const flags = {};
40
+ const positional = [];
41
+ let i = 0;
42
+ while (i < argv.length) {
43
+ const arg = argv[i];
44
+ if (arg === '--') {
45
+ positional.push(...argv.slice(i + 1));
46
+ break;
47
+ }
48
+ if (arg.startsWith('--')) {
49
+ const eq = arg.indexOf('=');
50
+ if (eq >= 0) {
51
+ flags[arg.slice(2, eq)] = arg.slice(eq + 1);
52
+ i += 1;
53
+ }
54
+ else {
55
+ const name = arg.slice(2);
56
+ const next = argv[i + 1];
57
+ if (next !== undefined && !next.startsWith('-')) {
58
+ flags[name] = next;
59
+ i += 2;
60
+ }
61
+ else {
62
+ flags[name] = true;
63
+ i += 1;
64
+ }
65
+ }
66
+ }
67
+ else if (arg.startsWith('-') && arg.length > 1) {
68
+ flags[arg.slice(1)] = true;
69
+ i += 1;
70
+ }
71
+ else {
72
+ positional.push(arg);
73
+ i += 1;
74
+ }
75
+ }
76
+ const command = positional.shift() ?? '';
77
+ return { command, positional, flags };
78
+ }
79
+ function loginOptions(parsed) {
80
+ const opts = {};
81
+ if (typeof parsed.flags['base-url'] === 'string') {
82
+ opts.baseUrl = parsed.flags['base-url'];
83
+ }
84
+ if ('write-env' in parsed.flags) {
85
+ const v = parsed.flags['write-env'];
86
+ if (typeof v !== 'string' || v.length === 0) {
87
+ throw new CliError('INVALID_ARGS', '--write-env requires a path argument');
88
+ }
89
+ opts.writeEnv = v;
90
+ }
91
+ if (typeof parsed.flags['client-id'] === 'string') {
92
+ opts.clientId = parsed.flags['client-id'];
93
+ }
94
+ if (parsed.flags.json === true) {
95
+ opts.json = true;
96
+ }
97
+ if (typeof parsed.flags['timeout-ms'] === 'string') {
98
+ const n = Number(parsed.flags['timeout-ms']);
99
+ if (Number.isFinite(n) && n > 0) {
100
+ opts.timeoutMs = n;
101
+ }
102
+ }
103
+ return opts;
104
+ }
105
+ function logoutOptions(parsed) {
106
+ const opts = {};
107
+ if (typeof parsed.flags['client-id'] === 'string') {
108
+ opts.clientId = parsed.flags['client-id'];
109
+ }
110
+ if (parsed.flags.all === true) {
111
+ opts.all = true;
112
+ }
113
+ if (parsed.flags.json === true) {
114
+ opts.json = true;
115
+ }
116
+ return opts;
117
+ }
118
+ function statusOptions(parsed) {
119
+ const opts = {};
120
+ if (typeof parsed.flags['client-id'] === 'string') {
121
+ opts.clientId = parsed.flags['client-id'];
122
+ }
123
+ if (parsed.flags.json === true) {
124
+ opts.json = true;
125
+ }
126
+ return opts;
127
+ }
128
+ function whoamiOptions(parsed) {
129
+ const opts = {};
130
+ if (typeof parsed.flags['client-id'] === 'string') {
131
+ opts.clientId = parsed.flags['client-id'];
132
+ }
133
+ return opts;
134
+ }
135
+ function clientsOptions(parsed) {
136
+ const opts = {};
137
+ if (parsed.flags.json === true) {
138
+ opts.json = true;
139
+ }
140
+ return opts;
141
+ }
142
+ export async function run(argv) {
143
+ if (argv.length === 0) {
144
+ logger.info(HELP_TEXT);
145
+ return ExitCode.OK;
146
+ }
147
+ const parsed = parseArgs(argv);
148
+ if (parsed.flags.version === true || parsed.flags.v === true || parsed.command === 'version') {
149
+ process.stdout.write(`${PACKAGE_VERSION}\n`);
150
+ return ExitCode.OK;
151
+ }
152
+ if (parsed.flags.help === true || parsed.flags.h === true || parsed.command === 'help' || parsed.command === '') {
153
+ logger.info(HELP_TEXT);
154
+ return ExitCode.OK;
155
+ }
156
+ try {
157
+ switch (parsed.command) {
158
+ case 'login':
159
+ return await runLogin(loginOptions(parsed));
160
+ case 'logout':
161
+ return await runLogout(logoutOptions(parsed));
162
+ case 'status':
163
+ return await runStatus(statusOptions(parsed));
164
+ case 'whoami':
165
+ return await runWhoami(whoamiOptions(parsed));
166
+ case 'clients':
167
+ return await runClients(parsed.positional, clientsOptions(parsed));
168
+ default:
169
+ logger.info(`Unknown command: ${parsed.command}`);
170
+ logger.info(HELP_TEXT);
171
+ return ExitCode.USER_ERROR;
172
+ }
173
+ }
174
+ catch (err) {
175
+ if (err instanceof CliError) {
176
+ if (parsed.flags.json === true) {
177
+ logger.json({ ok: false, error: err.code, message: redact(err.message) });
178
+ }
179
+ else {
180
+ logger.info(`Error: ${redact(err.message)} [${err.code}]`);
181
+ }
182
+ return err.exitCode;
183
+ }
184
+ throw err;
185
+ }
186
+ }
187
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AccountsOptions } from '../types.js';
2
+ export declare function run(positional: string[], opts: AccountsOptions): Promise<number>;
3
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/commands/accounts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4CnD,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAYtF"}
@@ -0,0 +1,59 @@
1
+ import { CliError, ExitCode } from '../errors.js';
2
+ import { logger } from '../logger.js';
3
+ import { loadConfig, setDefault } from '../config.js';
4
+ import { maskToken } from '../mask.js';
5
+ import { buildStatusOutput } from './status.js';
6
+ async function listAccounts(opts) {
7
+ const cfg = await loadConfig();
8
+ const output = buildStatusOutput(cfg);
9
+ if (opts.json) {
10
+ logger.json(output);
11
+ return ExitCode.OK;
12
+ }
13
+ if (!output.configured) {
14
+ logger.info('No accounts configured. Run `coolhand login` to add one.');
15
+ return ExitCode.OK;
16
+ }
17
+ for (const acct of output.accounts) {
18
+ const marker = acct.account_id === output.default_account_id ? '* ' : ' ';
19
+ logger.info(`${marker}${acct.account_id} ${acct.account_name} ${acct.masked_token} ${acct.base_url}`);
20
+ }
21
+ return ExitCode.OK;
22
+ }
23
+ async function useAccount(accountId, opts) {
24
+ if (!accountId) {
25
+ throw new CliError('INVALID_ARGS', 'accounts use requires an account id');
26
+ }
27
+ const cfg = await setDefault(accountId);
28
+ const entry = cfg.accounts[accountId];
29
+ if (opts.json) {
30
+ logger.json({
31
+ ok: true,
32
+ default_account_id: cfg.default_account_id,
33
+ account: {
34
+ account_id: entry.account_id,
35
+ account_name: entry.account_name,
36
+ masked_token: maskToken(entry.api_key),
37
+ base_url: entry.base_url,
38
+ },
39
+ });
40
+ }
41
+ else {
42
+ logger.info(`Default account is now "${entry.account_name}" (${entry.account_id}).`);
43
+ }
44
+ return ExitCode.OK;
45
+ }
46
+ export async function run(positional, opts) {
47
+ const sub = positional[0];
48
+ if (!sub) {
49
+ return listAccounts(opts);
50
+ }
51
+ if (sub === 'use') {
52
+ return useAccount(positional[1] ?? '', opts);
53
+ }
54
+ if (sub === 'list') {
55
+ return listAccounts(opts);
56
+ }
57
+ throw new CliError('INVALID_ARGS', `Unknown accounts subcommand: ${sub}`);
58
+ }
59
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/commands/accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ClientsOptions } from '../types.js';
2
+ export declare function run(positional: string[], opts: ClientsOptions): Promise<number>;
3
+ //# sourceMappingURL=clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../src/commands/clients.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA4ClD,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAYrF"}
@@ -0,0 +1,59 @@
1
+ import { CliError, ExitCode } from '../errors.js';
2
+ import { logger } from '../logger.js';
3
+ import { loadConfig, setDefault } from '../config.js';
4
+ import { maskToken } from '../mask.js';
5
+ import { buildStatusOutput } from './status.js';
6
+ async function listClients(opts) {
7
+ const cfg = await loadConfig();
8
+ const output = buildStatusOutput(cfg);
9
+ if (opts.json) {
10
+ logger.json(output);
11
+ return ExitCode.OK;
12
+ }
13
+ if (!output.configured) {
14
+ logger.info('No clients configured. Run `coolhand login` to add one.');
15
+ return ExitCode.OK;
16
+ }
17
+ for (const acct of output.clients) {
18
+ const marker = acct.client_id === output.default_client_id ? '* ' : ' ';
19
+ logger.info(`${marker}${acct.client_id} ${acct.client_name} ${acct.masked_token} ${acct.base_url}`);
20
+ }
21
+ return ExitCode.OK;
22
+ }
23
+ async function useClient(clientId, opts) {
24
+ if (!clientId) {
25
+ throw new CliError('INVALID_ARGS', 'clients use requires an client id');
26
+ }
27
+ const cfg = await setDefault(clientId);
28
+ const entry = cfg.clients[clientId];
29
+ if (opts.json) {
30
+ logger.json({
31
+ ok: true,
32
+ default_client_id: cfg.default_client_id,
33
+ client: {
34
+ client_id: entry.client_id,
35
+ client_name: entry.client_name,
36
+ masked_token: maskToken(entry.api_key),
37
+ base_url: entry.base_url,
38
+ },
39
+ });
40
+ }
41
+ else {
42
+ logger.info(`Default client is now "${entry.client_name}" (${entry.client_id}).`);
43
+ }
44
+ return ExitCode.OK;
45
+ }
46
+ export async function run(positional, opts) {
47
+ const sub = positional[0];
48
+ if (!sub) {
49
+ return listClients(opts);
50
+ }
51
+ if (sub === 'use') {
52
+ return useClient(positional[1] ?? '', opts);
53
+ }
54
+ if (sub === 'list') {
55
+ return listClients(opts);
56
+ }
57
+ throw new CliError('INVALID_ARGS', `Unknown clients subcommand: ${sub}`);
58
+ }
59
+ //# sourceMappingURL=clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/commands/clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type LoginOptions } from '../types.js';
2
+ export declare function run(opts: LoginOptions): Promise<number>;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0D,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAwBxG,wBAAsB,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA4F7D"}