@skillsmith/cli 0.5.7 → 0.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,219 +1,407 @@
1
- /**
2
- * SMI-2715: Login Command Tests
3
- *
4
- * Tests for `skillsmith login` already-authenticated guard, browser/headless
5
- * URL display, masked input prompting, format validation retries, and storage.
6
- */
1
+ // SMI-4402: login command tests — device-code OAuth flow + legacy detection + paste-legacy
2
+ // LC-1: JWT auth guard exits 0 when valid credentials exist
3
+ // LC-2: device-code success path stores credentials and exits 0
4
+ // LC-3: device-code network error on request exits 5
5
+ // LC-4: device-code expired exits 4
6
+ // LC-5: device-code declined exits 3
7
+ // LC-6: slow_down doubles poll interval
8
+ // LC-7: legacy key menu — choice 'a' keeps key
9
+ // LC-8: legacy key menu — choice 'p' runs paste flow
10
+ // LC-9: paste-legacy stores key and exits 0 (+ SMI-4454 echo assertion)
11
+ // LC-10: paste-legacy 3 failures exits 1 (+ SMI-4454 echo-per-attempt assertion)
12
+ // LC-11: paste-legacy Ctrl+C exits 2
13
+ // LC-12: --paste-legacy store failure exits 1 with message
14
+ // LC-13: device-code network error during polling exits 5
15
+ // LC-14: legacy key menu — choice 'd' runs device flow
16
+ // LC-15: SMI-4454 — device-code flow sends client_meta with CLI identity
7
17
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
- // ---------------------------------------------------------------------------
9
- // Mocks (declared before module imports so Vitest hoists them)
10
- // ---------------------------------------------------------------------------
18
+ // readline.createInterface must be mocked via vi.hoisted + vi.mock — ESM namespace
19
+ // objects are not configurable, so vi.spyOn cannot intercept them at runtime.
20
+ const { mockCreateInterface } = vi.hoisted(() => ({
21
+ mockCreateInterface: vi.fn(),
22
+ }));
23
+ vi.mock('readline', () => ({
24
+ default: { createInterface: mockCreateInterface },
25
+ createInterface: mockCreateInterface,
26
+ }));
11
27
  vi.mock('@skillsmith/core', () => ({
12
- getAuthStatus: vi.fn(),
28
+ loadCredentials: vi.fn(),
29
+ storeCredentials: vi.fn(),
30
+ getApiKey: vi.fn(),
31
+ getApiBaseUrl: vi.fn().mockReturnValue('https://api.skillsmith.app/functions/v1'),
13
32
  storeApiKey: vi.fn(),
14
33
  isValidApiKeyFormat: vi.fn(),
15
34
  }));
16
35
  vi.mock('@inquirer/prompts', () => ({
17
36
  password: vi.fn(),
18
37
  }));
19
- vi.mock('open', () => ({
20
- default: vi.fn(),
21
- }));
22
- // ---------------------------------------------------------------------------
23
- // Imports (after mocks)
24
- // ---------------------------------------------------------------------------
38
+ vi.mock('open', () => ({ default: vi.fn() }));
25
39
  import { createLoginCommand } from './login.js';
26
- import { getAuthStatus, storeApiKey, isValidApiKeyFormat } from '@skillsmith/core';
40
+ import { loadCredentials, storeCredentials, getApiKey, storeApiKey, isValidApiKeyFormat, } from '@skillsmith/core';
27
41
  import { password } from '@inquirer/prompts';
28
- import openDefault from 'open';
29
- const mockGetAuthStatus = vi.mocked(getAuthStatus);
42
+ const mockLoadCredentials = vi.mocked(loadCredentials);
43
+ const mockStoreCredentials = vi.mocked(storeCredentials);
44
+ const mockGetApiKey = vi.mocked(getApiKey);
30
45
  const mockStoreApiKey = vi.mocked(storeApiKey);
31
46
  const mockIsValidApiKeyFormat = vi.mocked(isValidApiKeyFormat);
32
47
  const mockPassword = vi.mocked(password);
33
- const mockOpen = vi.mocked(openDefault);
34
- // ---------------------------------------------------------------------------
35
- // Helpers
36
- // ---------------------------------------------------------------------------
37
48
  const VALID_KEY = 'sk_live_' + 'a'.repeat(32);
38
- /** Run a command action by parsing fabricated argv */
49
+ const NOW = Date.now();
39
50
  async function runCommand(args = []) {
40
51
  const cmd = createLoginCommand();
41
- // Invoke action directly to bypass Commander's process.argv parsing
42
52
  await cmd.parseAsync(['node', 'login', ...args]);
43
53
  }
44
- // ---------------------------------------------------------------------------
45
- // Test suite
46
- // ---------------------------------------------------------------------------
54
+ // Simulate a successful device-code exchange
55
+ function mockDeviceCodeSuccess() {
56
+ let callCount = 0;
57
+ global.fetch = vi.fn().mockImplementation((url) => {
58
+ if (url.includes('auth-device-code')) {
59
+ return Promise.resolve({
60
+ ok: true,
61
+ json: () => Promise.resolve({
62
+ device_code: 'dc_test',
63
+ user_code: 'BCDFGHJK',
64
+ verification_uri: 'https://skillsmith.app/device',
65
+ expires_in: 900,
66
+ interval: 5,
67
+ }),
68
+ });
69
+ }
70
+ // auth-device-token
71
+ callCount++;
72
+ if (callCount === 1) {
73
+ return Promise.resolve({ ok: false, status: 428, json: () => Promise.resolve({}) });
74
+ }
75
+ return Promise.resolve({
76
+ ok: true,
77
+ json: () => Promise.resolve({
78
+ access_token: 'jwt.access',
79
+ refresh_token: 'jwt.refresh',
80
+ expires_in: 3600,
81
+ }),
82
+ });
83
+ });
84
+ }
47
85
  describe('createLoginCommand', () => {
48
86
  let consoleLogSpy;
49
87
  let consoleErrorSpy;
50
88
  let processExitSpy;
51
89
  let originalEnv;
90
+ let originalFetch;
52
91
  beforeEach(() => {
53
- // clearAllMocks resets call history on module-level mocks (declared above).
54
- // Must run BEFORE setting up spies so the spy implementations are not cleared.
55
92
  vi.clearAllMocks();
93
+ vi.useFakeTimers();
56
94
  originalEnv = { ...process.env };
95
+ originalFetch = global.fetch;
96
+ process.env['CI'] = 'true'; // suppress browser open by default
97
+ delete process.env['SKILLSMITH_API_KEY'];
98
+ mockLoadCredentials.mockResolvedValue(null);
99
+ mockGetApiKey.mockReturnValue(undefined);
100
+ mockStoreCredentials.mockResolvedValue(undefined);
101
+ mockStoreApiKey.mockResolvedValue(undefined);
57
102
  consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
58
103
  consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
59
104
  processExitSpy = vi
60
105
  .spyOn(process, 'exit')
61
106
  .mockImplementation((code) => {
107
+ // Clear pending timers so vi.runAllTimersAsync() doesn't fire additional
108
+ // polling iterations after process.exit, which would create unhandled rejections.
109
+ vi.clearAllTimers();
62
110
  throw new Error(`process.exit(${code ?? 0})`);
63
111
  });
64
112
  });
65
113
  afterEach(() => {
114
+ vi.useRealTimers();
66
115
  process.env = originalEnv;
116
+ global.fetch = originalFetch;
67
117
  consoleLogSpy.mockRestore();
68
118
  consoleErrorSpy.mockRestore();
69
119
  processExitSpy.mockRestore();
70
120
  });
71
- describe('command metadata', () => {
72
- it('has the correct name', () => {
73
- expect(createLoginCommand().name()).toBe('login');
74
- });
75
- it('has a description', () => {
76
- expect(createLoginCommand().description()).toBeTruthy();
121
+ it('has correct name and --paste-legacy option', () => {
122
+ const cmd = createLoginCommand();
123
+ expect(cmd.name()).toBe('login');
124
+ // cmd.opts() before parsing excludes boolean flags without defaults;
125
+ // check the option definition array directly.
126
+ const hasPasteLegacy = cmd.options.some((o) => o.long === '--paste-legacy');
127
+ expect(hasPasteLegacy).toBe(true);
128
+ });
129
+ it('LC-1: exits 0 when valid JWT credentials already exist', async () => {
130
+ mockLoadCredentials.mockResolvedValue({
131
+ accessToken: 'jwt.access',
132
+ refreshToken: 'jwt.refresh',
133
+ expiresAt: NOW + 3_600_000,
134
+ version: 2,
77
135
  });
136
+ await expect(runCommand()).rejects.toThrow('process.exit(0)');
137
+ const output = consoleLogSpy.mock.calls.flat().join('\n');
138
+ expect(output).toContain('Already authenticated');
139
+ expect(output).toContain('skillsmith logout');
78
140
  });
79
- describe('already authenticated guard', () => {
80
- it('exits 0 when already authenticated', async () => {
81
- mockGetAuthStatus.mockResolvedValue({
82
- authenticated: true,
83
- keyPrefix: 'sk_live_xxxx',
84
- source: 'keyring',
85
- });
86
- await expect(runCommand()).rejects.toThrow('process.exit(0)');
141
+ describe('device-code flow', () => {
142
+ it('LC-2: success path stores credentials and exits 0', async () => {
143
+ mockDeviceCodeSuccess();
144
+ const run = runCommand();
145
+ // Suppress unhandledRejection: run rejects inside runAllTimersAsync before
146
+ // expect(run).rejects can attach a handler. The noop catch prevents the
147
+ // Node.js unhandled-rejection warning without consuming the rejection.
148
+ run.catch(() => { });
149
+ await vi.runAllTimersAsync();
150
+ await expect(run).rejects.toThrow('process.exit(0)');
151
+ expect(mockStoreCredentials).toHaveBeenCalledWith(expect.objectContaining({
152
+ accessToken: 'jwt.access',
153
+ refreshToken: 'jwt.refresh',
154
+ version: 2,
155
+ }));
87
156
  const output = consoleLogSpy.mock.calls.flat().join('\n');
88
- expect(output).toContain('Already authenticated');
89
- expect(output).toContain('skillsmith logout');
157
+ expect(output).toContain('Logged in successfully');
158
+ // SMI-4447: post-login hint closes the "did it work?" gap that drove users
159
+ // to visit /account/cli-token just to confirm the session worked.
160
+ expect(output).toContain('Try it: skillsmith search mcp');
90
161
  });
91
- });
92
- describe('URL display', () => {
93
- beforeEach(() => {
94
- mockGetAuthStatus.mockResolvedValue({
95
- authenticated: false,
96
- keyPrefix: null,
97
- source: 'none',
162
+ it('LC-3: network error on device-code request exits 5', async () => {
163
+ global.fetch = vi.fn().mockRejectedValue(new Error('ENOTFOUND'));
164
+ await expect(runCommand()).rejects.toThrow('process.exit(5)');
165
+ });
166
+ it('LC-4: expired token exits 4', async () => {
167
+ global.fetch = vi.fn().mockImplementation((url) => {
168
+ if (url.includes('auth-device-code')) {
169
+ return Promise.resolve({
170
+ ok: true,
171
+ json: () => Promise.resolve({
172
+ device_code: 'dc_exp',
173
+ user_code: 'BCDFGHJK',
174
+ verification_uri: 'https://skillsmith.app/device',
175
+ expires_in: 900,
176
+ interval: 5,
177
+ }),
178
+ });
179
+ }
180
+ return Promise.resolve({
181
+ ok: false,
182
+ status: 400,
183
+ json: () => Promise.resolve({ error: 'expired_token' }),
184
+ });
98
185
  });
99
- // Default: valid key on first prompt attempt
100
- mockIsValidApiKeyFormat.mockReturnValue(true);
101
- mockPassword.mockResolvedValue(VALID_KEY);
102
- mockStoreApiKey.mockResolvedValue(undefined);
103
- });
104
- it('opens browser by default (non-headless)', async () => {
105
- delete process.env['CI'];
106
- delete process.env['DISPLAY'];
107
- // Simulate macOS (browser-capable)
108
- const originalPlatform = process.platform;
109
- Object.defineProperty(process, 'platform', { value: 'darwin', configurable: true });
110
- mockOpen.mockResolvedValue(undefined);
111
- try {
112
- await expect(runCommand()).rejects.toThrow('process.exit(0)');
113
- expect(mockOpen).toHaveBeenCalledWith('https://skillsmith.app/account/cli-token');
114
- }
115
- finally {
116
- Object.defineProperty(process, 'platform', { value: originalPlatform, configurable: true });
117
- }
186
+ const run = runCommand();
187
+ run.catch(() => { });
188
+ await vi.runAllTimersAsync();
189
+ await expect(run).rejects.toThrow('process.exit(4)');
118
190
  });
119
- it('prints URL instead of opening browser when --no-browser is passed', async () => {
120
- delete process.env['CI'];
121
- Object.defineProperty(process, 'platform', { value: 'darwin', configurable: true });
122
- await expect(runCommand(['--no-browser'])).rejects.toThrow('process.exit(0)');
123
- expect(mockOpen).not.toHaveBeenCalled();
124
- const output = consoleLogSpy.mock.calls.flat().join('\n');
125
- expect(output).toContain('https://skillsmith.app/account/cli-token');
191
+ it('LC-5: declined exits 3', async () => {
192
+ global.fetch = vi.fn().mockImplementation((url) => {
193
+ if (url.includes('auth-device-code')) {
194
+ return Promise.resolve({
195
+ ok: true,
196
+ json: () => Promise.resolve({
197
+ device_code: 'dc_dec',
198
+ user_code: 'BCDFGHJK',
199
+ verification_uri: 'https://skillsmith.app/device',
200
+ expires_in: 900,
201
+ interval: 5,
202
+ }),
203
+ });
204
+ }
205
+ return Promise.resolve({
206
+ ok: false,
207
+ status: 400,
208
+ json: () => Promise.resolve({ error: 'authorization_declined' }),
209
+ });
210
+ });
211
+ const run = runCommand();
212
+ run.catch(() => { });
213
+ await vi.runAllTimersAsync();
214
+ await expect(run).rejects.toThrow('process.exit(3)');
126
215
  });
127
- it('prints URL when CI=true (headless)', async () => {
128
- process.env['CI'] = 'true';
129
- await expect(runCommand()).rejects.toThrow('process.exit(0)');
130
- expect(mockOpen).not.toHaveBeenCalled();
131
- const output = consoleLogSpy.mock.calls.flat().join('\n');
132
- expect(output).toContain('https://skillsmith.app/account/cli-token');
216
+ it('LC-6: slow_down response doubles poll interval', async () => {
217
+ let tokenCallCount = 0;
218
+ global.fetch = vi.fn().mockImplementation((url) => {
219
+ if (url.includes('auth-device-code')) {
220
+ return Promise.resolve({
221
+ ok: true,
222
+ json: () => Promise.resolve({
223
+ device_code: 'dc_slow',
224
+ user_code: 'BCDFGHJK',
225
+ verification_uri: 'https://skillsmith.app/device',
226
+ expires_in: 900,
227
+ interval: 5,
228
+ }),
229
+ });
230
+ }
231
+ tokenCallCount++;
232
+ if (tokenCallCount === 1) {
233
+ return Promise.resolve({ ok: false, status: 429, json: () => Promise.resolve({}) });
234
+ }
235
+ return Promise.resolve({
236
+ ok: true,
237
+ json: () => Promise.resolve({ access_token: 'j.a', refresh_token: 'j.r', expires_in: 3600 }),
238
+ });
239
+ });
240
+ const run = runCommand();
241
+ run.catch(() => { });
242
+ await vi.runAllTimersAsync();
243
+ await expect(run).rejects.toThrow('process.exit(0)');
244
+ expect(tokenCallCount).toBe(2);
133
245
  });
134
- it('falls back to printing URL when open throws', async () => {
135
- delete process.env['CI'];
136
- Object.defineProperty(process, 'platform', { value: 'darwin', configurable: true });
137
- mockOpen.mockRejectedValue(new Error('no browser'));
138
- await expect(runCommand()).rejects.toThrow('process.exit(0)');
139
- const output = consoleLogSpy.mock.calls.flat().join('\n');
140
- expect(output).toContain('https://skillsmith.app/account/cli-token');
246
+ it('LC-13: network error during token polling exits 5', async () => {
247
+ global.fetch = vi.fn().mockImplementation((url) => {
248
+ if (url.includes('auth-device-code')) {
249
+ return Promise.resolve({
250
+ ok: true,
251
+ json: () => Promise.resolve({
252
+ device_code: 'dc_neterr',
253
+ user_code: 'BCDFGHJK',
254
+ verification_uri: 'https://skillsmith.app/device',
255
+ expires_in: 900,
256
+ interval: 5,
257
+ }),
258
+ });
259
+ }
260
+ // auth-device-token throws network error
261
+ return Promise.reject(new Error('ECONNRESET'));
262
+ });
263
+ const run = runCommand();
264
+ run.catch(() => { });
265
+ await vi.runAllTimersAsync();
266
+ await expect(run).rejects.toThrow('process.exit(5)');
141
267
  });
142
268
  });
143
- describe('API key prompt', () => {
269
+ describe('legacy key menu', () => {
144
270
  beforeEach(() => {
145
- mockGetAuthStatus.mockResolvedValue({
146
- authenticated: false,
147
- keyPrefix: null,
148
- source: 'none',
271
+ mockGetApiKey.mockReturnValue('sk_live_' + 'x'.repeat(32));
272
+ });
273
+ it('LC-7: choice a keeps existing key and exits 0', async () => {
274
+ mockCreateInterface.mockReturnValue({
275
+ once: (_event, cb) => {
276
+ cb('a');
277
+ return {};
278
+ },
279
+ close: vi.fn(),
149
280
  });
150
- delete process.env['CI'];
151
- process.env['CI'] = 'true'; // headless so we skip open
281
+ await expect(runCommand()).rejects.toThrow('process.exit(0)');
282
+ const output = consoleLogSpy.mock.calls.flat().join('\n');
283
+ expect(output).toContain('Keeping existing key');
284
+ expect(mockStoreCredentials).not.toHaveBeenCalled();
152
285
  });
153
- it('stores key and exits 0 on first valid input', async () => {
286
+ it('LC-8: choice p runs paste flow', async () => {
287
+ mockCreateInterface.mockReturnValue({
288
+ once: (_event, cb) => {
289
+ cb('p');
290
+ return {};
291
+ },
292
+ close: vi.fn(),
293
+ });
154
294
  mockIsValidApiKeyFormat.mockReturnValue(true);
155
295
  mockPassword.mockResolvedValue(VALID_KEY);
156
- mockStoreApiKey.mockResolvedValue(undefined);
157
296
  await expect(runCommand()).rejects.toThrow('process.exit(0)');
158
297
  expect(mockStoreApiKey).toHaveBeenCalledWith(VALID_KEY);
159
- const output = consoleLogSpy.mock.calls.flat().join('\n');
160
- expect(output).toContain('Logged in successfully');
161
298
  });
162
- it('retries on invalid format and succeeds on second attempt', async () => {
163
- mockIsValidApiKeyFormat.mockReturnValueOnce(false).mockReturnValueOnce(true);
299
+ it('LC-14: choice d runs device-code flow', async () => {
300
+ mockCreateInterface.mockReturnValue({
301
+ once: (_event, cb) => {
302
+ cb('d');
303
+ return {};
304
+ },
305
+ close: vi.fn(),
306
+ });
307
+ mockDeviceCodeSuccess();
308
+ const run = runCommand();
309
+ run.catch(() => { });
310
+ await vi.runAllTimersAsync();
311
+ await expect(run).rejects.toThrow('process.exit(0)');
312
+ expect(mockStoreCredentials).toHaveBeenCalledWith(expect.objectContaining({ version: 2 }));
313
+ });
314
+ });
315
+ describe('paste-legacy flow', () => {
316
+ it('LC-9: --paste-legacy stores key and exits 0', async () => {
317
+ mockIsValidApiKeyFormat.mockReturnValue(true);
164
318
  mockPassword.mockResolvedValue(VALID_KEY);
165
- mockStoreApiKey.mockResolvedValue(undefined);
166
- await expect(runCommand()).rejects.toThrow('process.exit(0)');
167
- expect(mockPassword).toHaveBeenCalledTimes(2);
168
- expect(mockStoreApiKey).toHaveBeenCalledOnce();
319
+ await expect(runCommand(['--paste-legacy'])).rejects.toThrow('process.exit(0)');
320
+ expect(mockStoreApiKey).toHaveBeenCalledWith(VALID_KEY);
321
+ const output = consoleLogSpy.mock.calls.flat().join('\n');
322
+ expect(output).toContain('Logged in successfully');
323
+ // SMI-4454: post-paste echo gives a ground-truth signal when the mask
324
+ // bullet is stripped by the terminal (Claude Code's embedded PTY, etc).
325
+ expect(output).toMatch(/Received \d+ characters — validating…/);
326
+ // And the mask option is forwarded to the prompt so terminals that DO
327
+ // render it use the denser ASCII mark instead of the invisible default.
328
+ expect(mockPassword).toHaveBeenCalledWith(expect.objectContaining({ mask: '*' }));
169
329
  });
170
- it('exits 1 after 3 consecutive format failures', async () => {
330
+ it('LC-10: 3 format failures exits 1', async () => {
171
331
  mockIsValidApiKeyFormat.mockReturnValue(false);
172
- mockPassword.mockResolvedValue('bad-key');
173
- await expect(runCommand()).rejects.toThrow('process.exit(1)');
332
+ mockPassword.mockResolvedValue('bad');
333
+ await expect(runCommand(['--paste-legacy'])).rejects.toThrow('process.exit(1)');
174
334
  expect(mockPassword).toHaveBeenCalledTimes(3);
175
335
  expect(mockStoreApiKey).not.toHaveBeenCalled();
176
- const errorOutput = consoleErrorSpy.mock.calls.flat().join('\n');
177
- expect(errorOutput).toContain('Too many invalid attempts');
178
- expect(errorOutput).toContain('https://skillsmith.app/account/cli-token');
179
- });
180
- it('shows retry count message on invalid attempt (not the last)', async () => {
181
- mockIsValidApiKeyFormat
182
- .mockReturnValueOnce(false)
183
- .mockReturnValueOnce(false)
184
- .mockReturnValueOnce(false);
185
- mockPassword.mockResolvedValue('bad-key');
186
- await expect(runCommand()).rejects.toThrow('process.exit(1)');
187
- const errorOutput = consoleErrorSpy.mock.calls.flat().join('\n');
188
- // Should mention format guidance
189
- expect(errorOutput).toContain('sk_live_');
190
- });
191
- it('reminds user to clear clipboard after successful login', async () => {
192
- mockIsValidApiKeyFormat.mockReturnValue(true);
193
- mockPassword.mockResolvedValue(VALID_KEY);
194
- mockStoreApiKey.mockResolvedValue(undefined);
195
- await expect(runCommand()).rejects.toThrow('process.exit(0)');
336
+ const err = consoleErrorSpy.mock.calls.flat().join('\n');
337
+ expect(err).toContain('Too many invalid attempts');
338
+ // SMI-4454: echo fires before each validation error — one per attempt.
196
339
  const output = consoleLogSpy.mock.calls.flat().join('\n');
197
- expect(output).toContain('clipboard');
340
+ const echoMatches = output.match(/Received \d+ characters — validating…/g) ?? [];
341
+ expect(echoMatches.length).toBeGreaterThanOrEqual(3);
198
342
  });
199
- it('exits 1 with message when storeApiKey throws (filesystem error)', async () => {
343
+ it('LC-11: Ctrl+C exits 2', async () => {
344
+ const exitErr = Object.assign(new Error('prompt closed'), { name: 'ExitPromptError' });
345
+ mockPassword.mockRejectedValue(exitErr);
346
+ await expect(runCommand(['--paste-legacy'])).rejects.toThrow('process.exit(2)');
347
+ const output = consoleLogSpy.mock.calls.flat().join('\n');
348
+ expect(output).toContain('Cancelled');
349
+ });
350
+ it('LC-12: store failure exits 1 with message', async () => {
200
351
  mockIsValidApiKeyFormat.mockReturnValue(true);
201
352
  mockPassword.mockResolvedValue(VALID_KEY);
202
- mockStoreApiKey.mockRejectedValue(new Error('EACCES: permission denied'));
203
- await expect(runCommand()).rejects.toThrow('process.exit(1)');
204
- const errorOutput = consoleErrorSpy.mock.calls.flat().join('\n');
205
- expect(errorOutput).toContain('Failed to store credentials');
206
- expect(errorOutput).toContain('EACCES');
207
- });
208
- it('exits 0 cleanly on Ctrl+C (ExitPromptError)', async () => {
209
- const exitPromptError = Object.assign(new Error('User force closed the prompt'), {
210
- name: 'ExitPromptError',
353
+ mockStoreApiKey.mockRejectedValue(new Error('EACCES'));
354
+ await expect(runCommand(['--paste-legacy'])).rejects.toThrow('process.exit(1)');
355
+ const err = consoleErrorSpy.mock.calls.flat().join('\n');
356
+ expect(err).toContain('Failed to store credentials');
357
+ expect(err).toContain('EACCES');
358
+ });
359
+ });
360
+ describe('SMI-4454: client_meta transport', () => {
361
+ it('LC-15: device-code flow sends client_meta with CLI identity', async () => {
362
+ const fetchSpy = vi.fn().mockImplementation((url) => {
363
+ if (url.includes('auth-device-code')) {
364
+ return Promise.resolve({
365
+ ok: true,
366
+ json: () => Promise.resolve({
367
+ device_code: 'dc_meta',
368
+ user_code: 'BCDFGHJK',
369
+ verification_uri: 'https://skillsmith.app/device',
370
+ expires_in: 900,
371
+ interval: 5,
372
+ }),
373
+ });
374
+ }
375
+ return Promise.resolve({
376
+ ok: true,
377
+ json: () => Promise.resolve({
378
+ access_token: 'jwt.access',
379
+ refresh_token: 'jwt.refresh',
380
+ expires_in: 3600,
381
+ }),
382
+ });
211
383
  });
212
- mockPassword.mockRejectedValue(exitPromptError);
213
- await expect(runCommand()).rejects.toThrow('process.exit(0)');
214
- expect(mockStoreApiKey).not.toHaveBeenCalled();
215
- const output = consoleLogSpy.mock.calls.flat().join('\n');
216
- expect(output).toContain('Cancelled');
384
+ global.fetch = fetchSpy;
385
+ const run = runCommand();
386
+ run.catch(() => { });
387
+ await vi.runAllTimersAsync();
388
+ await expect(run).rejects.toThrow('process.exit(0)');
389
+ const deviceCodeCall = fetchSpy.mock.calls.find((c) => String(c[0]).includes('auth-device-code'));
390
+ expect(deviceCodeCall).toBeDefined();
391
+ const init = deviceCodeCall?.[1];
392
+ const parsed = JSON.parse(init?.body ?? '{}');
393
+ expect(parsed.client_type).toBe('cli');
394
+ expect(parsed.client_meta).toBeDefined();
395
+ const meta = parsed.client_meta ?? {};
396
+ for (const key of ['cli_version', 'node_version', 'platform', 'arch', 'hostname']) {
397
+ expect(meta, `missing ${key}`).toHaveProperty(key);
398
+ expect(typeof meta[key]).toBe('string');
399
+ expect(meta[key].length).toBeGreaterThan(0);
400
+ }
401
+ // node_version is live process.version ('vX.Y.Z'); platform/arch match live.
402
+ expect(meta['node_version']).toMatch(/^v\d/);
403
+ expect(meta['platform']).toBe(process.platform);
404
+ expect(meta['arch']).toBe(process.arch);
217
405
  });
218
406
  });
219
407
  });
@@ -1 +1 @@
1
- {"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../../src/commands/login.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../../src/commands/login.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,OAAO,EAAE,MAAsB,CAAA"}