@clawmarket.cc/marketcc 0.3.0 → 0.4.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 (59) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +9 -5
  3. package/dist/__tests__/commands/edit.test.d.ts +0 -1
  4. package/dist/__tests__/commands/edit.test.js +0 -132
  5. package/dist/__tests__/commands/edit.test.js.map +0 -1
  6. package/dist/__tests__/commands/get.test.d.ts +0 -1
  7. package/dist/__tests__/commands/get.test.js +0 -89
  8. package/dist/__tests__/commands/get.test.js.map +0 -1
  9. package/dist/__tests__/commands/init.test.d.ts +0 -1
  10. package/dist/__tests__/commands/init.test.js +0 -134
  11. package/dist/__tests__/commands/init.test.js.map +0 -1
  12. package/dist/__tests__/commands/logout.test.d.ts +0 -1
  13. package/dist/__tests__/commands/logout.test.js +0 -41
  14. package/dist/__tests__/commands/logout.test.js.map +0 -1
  15. package/dist/__tests__/commands/ls.test.d.ts +0 -1
  16. package/dist/__tests__/commands/ls.test.js +0 -67
  17. package/dist/__tests__/commands/ls.test.js.map +0 -1
  18. package/dist/__tests__/commands/upload.test.d.ts +0 -1
  19. package/dist/__tests__/commands/upload.test.js +0 -126
  20. package/dist/__tests__/commands/upload.test.js.map +0 -1
  21. package/dist/__tests__/commands/whoami.test.d.ts +0 -1
  22. package/dist/__tests__/commands/whoami.test.js +0 -79
  23. package/dist/__tests__/commands/whoami.test.js.map +0 -1
  24. package/dist/__tests__/helpers/fixtures.d.ts +0 -30
  25. package/dist/__tests__/helpers/fixtures.js +0 -39
  26. package/dist/__tests__/helpers/fixtures.js.map +0 -1
  27. package/dist/__tests__/helpers/mock-api.d.ts +0 -5
  28. package/dist/__tests__/helpers/mock-api.js +0 -9
  29. package/dist/__tests__/helpers/mock-api.js.map +0 -1
  30. package/dist/__tests__/helpers/mock-console.d.ts +0 -15
  31. package/dist/__tests__/helpers/mock-console.js +0 -21
  32. package/dist/__tests__/helpers/mock-console.js.map +0 -1
  33. package/dist/__tests__/lib/api.test.d.ts +0 -1
  34. package/dist/__tests__/lib/api.test.js +0 -184
  35. package/dist/__tests__/lib/api.test.js.map +0 -1
  36. package/dist/__tests__/lib/config.test.d.ts +0 -1
  37. package/dist/__tests__/lib/config.test.js +0 -104
  38. package/dist/__tests__/lib/config.test.js.map +0 -1
  39. package/dist/__tests__/lib/errors.test.d.ts +0 -1
  40. package/dist/__tests__/lib/errors.test.js +0 -60
  41. package/dist/__tests__/lib/errors.test.js.map +0 -1
  42. package/dist/__tests__/lib/table.test.d.ts +0 -1
  43. package/dist/__tests__/lib/table.test.js +0 -35
  44. package/dist/__tests__/lib/table.test.js.map +0 -1
  45. package/dist/commands/download.d.ts +0 -2
  46. package/dist/commands/download.js +0 -196
  47. package/dist/commands/download.js.map +0 -1
  48. package/dist/commands/get.d.ts +0 -2
  49. package/dist/commands/get.js +0 -34
  50. package/dist/commands/get.js.map +0 -1
  51. package/dist/commands/setup-keys.d.ts +0 -2
  52. package/dist/commands/setup-keys.js +0 -380
  53. package/dist/commands/setup-keys.js.map +0 -1
  54. package/dist/commands/upload-bot.d.ts +0 -2
  55. package/dist/commands/upload-bot.js +0 -235
  56. package/dist/commands/upload-bot.js.map +0 -1
  57. package/dist/lib/key-scanner.d.ts +0 -50
  58. package/dist/lib/key-scanner.js +0 -479
  59. package/dist/lib/key-scanner.js.map +0 -1
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ const program = new Command();
28
28
  program
29
29
  .name('marketcc')
30
30
  .description('CLI for ClawMarket — upload and manage files')
31
- .version('0.2.1')
31
+ .version('0.4.0')
32
32
  .action(() => {
33
33
  const D = '\x1b[2m';
34
34
  const B = '\x1b[1m';
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "@clawmarket.cc/marketcc",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
+ "private": false,
4
5
  "description": "CLI for ClawMarket — upload and manage files",
5
6
  "type": "module",
6
7
  "bin": {
7
8
  "marketcc": "./dist/index.js"
8
9
  },
9
10
  "scripts": {
10
- "build": "tsc",
11
+ "clean": "rm -rf dist",
12
+ "build": "npm run clean && tsc",
11
13
  "dev": "tsx src/index.ts",
12
14
  "test": "vitest run --config src/__tests__/vitest.config.ts",
13
15
  "test:watch": "vitest --config src/__tests__/vitest.config.ts",
@@ -15,14 +17,16 @@
15
17
  "prepublishOnly": "npm run build",
16
18
  "postinstall": "node postinstall.js"
17
19
  },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/clawmarket-cc/ClawMarket.git"
23
+ },
18
24
  "engines": {
19
25
  "node": ">=20.0.0"
20
26
  },
21
27
  "dependencies": {
22
28
  "chalk": "^5.3.0",
23
- "commander": "^12.0.0",
24
- "ora": "^8.0.0",
25
- "prompts": "^2.4.2"
29
+ "commander": "^12.0.0"
26
30
  },
27
31
  "devDependencies": {
28
32
  "@types/node": "^22.0.0",
@@ -1 +0,0 @@
1
- export {};
@@ -1,132 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Command } from 'commander';
3
- import { captureConsole } from '../helpers/mock-console.js';
4
- import { makeFileRecord } from '../helpers/fixtures.js';
5
- vi.mock('prompts', () => ({ default: vi.fn() }));
6
- vi.mock('../../lib/api.js', () => ({
7
- createAuthenticatedClient: vi.fn(),
8
- }));
9
- vi.mock('../../lib/errors.js', () => ({
10
- handleApiError: vi.fn(),
11
- }));
12
- import prompts from 'prompts';
13
- import { createAuthenticatedClient } from '../../lib/api.js';
14
- import { handleApiError } from '../../lib/errors.js';
15
- import registerEdit from '../../commands/edit.js';
16
- const mockedPrompts = vi.mocked(prompts);
17
- const mockedCreateAuth = vi.mocked(createAuthenticatedClient);
18
- const mockedHandleApiError = vi.mocked(handleApiError);
19
- async function runEdit(id) {
20
- const program = new Command();
21
- registerEdit(program);
22
- await program.parseAsync(['node', 'test', 'edit', id]);
23
- }
24
- describe('edit command', () => {
25
- let captured;
26
- const file = makeFileRecord();
27
- let mockRequest;
28
- beforeEach(() => {
29
- captured = captureConsole();
30
- mockRequest = vi.fn();
31
- mockRequest.mockResolvedValueOnce(file); // GET /api/files/:id
32
- mockedCreateAuth.mockResolvedValue({ request: mockRequest });
33
- });
34
- it('patches file with changed fields', async () => {
35
- mockRequest.mockResolvedValueOnce(undefined); // PATCH
36
- mockedPrompts.mockResolvedValueOnce({
37
- price: '2.0000',
38
- title: 'New Title',
39
- description: 'New desc',
40
- isListed: true,
41
- });
42
- await runEdit('file-001');
43
- expect(mockRequest).toHaveBeenCalledWith('PATCH', '/api/files/file-001', expect.objectContaining({
44
- price_lamports: '2000000000',
45
- title: 'New Title',
46
- description: 'New desc',
47
- }));
48
- expect(captured.getOutput()).toContain('Updated!');
49
- });
50
- it('prints "No changes made." when nothing changed', async () => {
51
- const currentPrice = (Number(file.price_lamports) / 1e9).toFixed(4);
52
- mockedPrompts.mockResolvedValueOnce({
53
- price: currentPrice,
54
- title: file.title,
55
- description: file.description,
56
- isListed: file.is_listed,
57
- });
58
- await runEdit('file-001');
59
- expect(captured.getOutput()).toContain('No changes made.');
60
- // Only the GET call, no PATCH
61
- expect(mockRequest).toHaveBeenCalledTimes(1);
62
- });
63
- it('only sends changed fields in patch', async () => {
64
- mockRequest.mockResolvedValueOnce(undefined); // PATCH
65
- const currentPrice = (Number(file.price_lamports) / 1e9).toFixed(4);
66
- mockedPrompts.mockResolvedValueOnce({
67
- price: currentPrice,
68
- title: 'Changed Title Only',
69
- description: file.description,
70
- isListed: file.is_listed,
71
- });
72
- await runEdit('file-001');
73
- const patchCall = mockRequest.mock.calls[1];
74
- expect(patchCall[2]).toEqual({ title: 'Changed Title Only' });
75
- });
76
- it('aborts when user cancels prompts', async () => {
77
- mockedPrompts.mockResolvedValueOnce({ price: undefined });
78
- await runEdit('file-001');
79
- expect(mockRequest).toHaveBeenCalledTimes(1); // only GET
80
- expect(captured.getOutput()).not.toContain('Updated!');
81
- });
82
- it('converts price to lamports correctly', async () => {
83
- mockRequest.mockResolvedValueOnce(undefined); // PATCH
84
- mockedPrompts.mockResolvedValueOnce({
85
- price: '0.5000',
86
- title: file.title,
87
- description: file.description,
88
- isListed: file.is_listed,
89
- });
90
- await runEdit('file-001');
91
- const patchCall = mockRequest.mock.calls[1];
92
- expect(patchCall[2]).toEqual({ price_lamports: '500000000' });
93
- });
94
- it('handles listing status change', async () => {
95
- mockRequest.mockResolvedValueOnce(undefined); // PATCH
96
- const currentPrice = (Number(file.price_lamports) / 1e9).toFixed(4);
97
- mockedPrompts.mockResolvedValueOnce({
98
- price: currentPrice,
99
- title: file.title,
100
- description: file.description,
101
- isListed: !file.is_listed,
102
- });
103
- await runEdit('file-001');
104
- const patchCall = mockRequest.mock.calls[1];
105
- expect(patchCall[2]).toEqual({ is_listed: !file.is_listed });
106
- });
107
- it('calls handleApiError on API failure', async () => {
108
- const error = new Error('Server error');
109
- mockRequest.mockReset();
110
- mockRequest.mockRejectedValue(error);
111
- mockedCreateAuth.mockResolvedValue({ request: mockRequest });
112
- await runEdit('file-001');
113
- expect(mockedHandleApiError).toHaveBeenCalledWith(error);
114
- });
115
- it('handles file with null title and description', async () => {
116
- const nullFile = makeFileRecord({ title: null, description: null });
117
- mockRequest.mockReset();
118
- mockRequest.mockResolvedValueOnce(nullFile);
119
- mockRequest.mockResolvedValueOnce(undefined); // PATCH
120
- mockedCreateAuth.mockResolvedValue({ request: mockRequest });
121
- mockedPrompts.mockResolvedValueOnce({
122
- price: (Number(nullFile.price_lamports) / 1e9).toFixed(4),
123
- title: 'New Title',
124
- description: '',
125
- isListed: nullFile.is_listed,
126
- });
127
- await runEdit('file-001');
128
- const patchCall = mockRequest.mock.calls[1];
129
- expect(patchCall[2]).toEqual({ title: 'New Title' });
130
- });
131
- });
132
- //# sourceMappingURL=edit.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/edit.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,89 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Command } from 'commander';
3
- import { captureConsole } from '../helpers/mock-console.js';
4
- vi.mock('prompts', () => ({ default: vi.fn() }));
5
- vi.mock('node:fs/promises', () => ({
6
- writeFile: vi.fn(),
7
- }));
8
- vi.mock('../../lib/api.js', () => ({
9
- createClient: vi.fn(),
10
- }));
11
- vi.mock('../../lib/errors.js', () => ({
12
- handleApiError: vi.fn(),
13
- }));
14
- import prompts from 'prompts';
15
- import { writeFile } from 'node:fs/promises';
16
- import { createClient } from '../../lib/api.js';
17
- import { handleApiError } from '../../lib/errors.js';
18
- import registerGet from '../../commands/get.js';
19
- const mockedPrompts = vi.mocked(prompts);
20
- const mockedWriteFile = vi.mocked(writeFile);
21
- const mockedCreateClient = vi.mocked(createClient);
22
- const mockedHandleApiError = vi.mocked(handleApiError);
23
- async function runGet(token) {
24
- const program = new Command();
25
- registerGet(program);
26
- await program.parseAsync(['node', 'test', 'get', token]);
27
- }
28
- function makeRawResponse(body, filename) {
29
- const headers = new Headers();
30
- if (filename) {
31
- headers.set('Content-Disposition', `attachment; filename="${filename}"`);
32
- }
33
- return new Response(body, { status: 200, headers });
34
- }
35
- describe('get command', () => {
36
- let captured;
37
- beforeEach(() => {
38
- captured = captureConsole();
39
- mockedWriteFile.mockResolvedValue(undefined);
40
- });
41
- it('downloads file and saves to prompted path', async () => {
42
- const response = makeRawResponse('# Bot content', 'strategy.md');
43
- mockedCreateClient.mockResolvedValue({ requestRaw: vi.fn().mockResolvedValue(response) });
44
- mockedPrompts.mockResolvedValueOnce({ savePath: './strategy.md' });
45
- await runGet('tok-123');
46
- expect(mockedWriteFile).toHaveBeenCalledWith('./strategy.md', expect.any(Buffer));
47
- expect(captured.getOutput()).toContain('Downloaded to ./strategy.md');
48
- });
49
- it('parses filename from Content-Disposition header', async () => {
50
- const response = makeRawResponse('content', 'my-file.md');
51
- mockedCreateClient.mockResolvedValue({ requestRaw: vi.fn().mockResolvedValue(response) });
52
- mockedPrompts.mockResolvedValueOnce({ savePath: './my-file.md' });
53
- await runGet('tok-456');
54
- // The prompt initial value would be ./my-file.md based on Content-Disposition
55
- expect(mockedWriteFile).toHaveBeenCalled();
56
- });
57
- it('uses default filename when no Content-Disposition', async () => {
58
- const response = makeRawResponse('content');
59
- mockedCreateClient.mockResolvedValue({ requestRaw: vi.fn().mockResolvedValue(response) });
60
- mockedPrompts.mockResolvedValueOnce({ savePath: './download.md' });
61
- await runGet('tok-789');
62
- expect(mockedWriteFile).toHaveBeenCalledWith('./download.md', expect.any(Buffer));
63
- });
64
- it('aborts when user cancels save path prompt', async () => {
65
- const response = makeRawResponse('content', 'file.md');
66
- mockedCreateClient.mockResolvedValue({ requestRaw: vi.fn().mockResolvedValue(response) });
67
- mockedPrompts.mockResolvedValueOnce({ savePath: '' });
68
- await runGet('tok-abc');
69
- expect(mockedWriteFile).not.toHaveBeenCalled();
70
- });
71
- it('calls handleApiError on API failure', async () => {
72
- const error = new Error('Download failed');
73
- mockedCreateClient.mockResolvedValue({
74
- requestRaw: vi.fn().mockRejectedValue(error),
75
- });
76
- await runGet('bad-token');
77
- expect(mockedHandleApiError).toHaveBeenCalledWith(error);
78
- });
79
- it('writes buffer content from response', async () => {
80
- const fileContent = '# Strategy\nBuy low sell high';
81
- const response = makeRawResponse(fileContent, 'strat.md');
82
- mockedCreateClient.mockResolvedValue({ requestRaw: vi.fn().mockResolvedValue(response) });
83
- mockedPrompts.mockResolvedValueOnce({ savePath: './strat.md' });
84
- await runGet('tok-xyz');
85
- const writtenBuffer = mockedWriteFile.mock.calls[0][1];
86
- expect(writtenBuffer.toString()).toBe(fileContent);
87
- });
88
- });
89
- //# sourceMappingURL=get.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/get.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,134 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Command } from 'commander';
3
- import { captureConsole } from '../helpers/mock-console.js';
4
- import { makeProvider, makeRegisterResponse } from '../helpers/fixtures.js';
5
- // Mock dependencies
6
- vi.mock('prompts', () => ({ default: vi.fn() }));
7
- vi.mock('../../lib/api.js', () => ({
8
- ApiClient: vi.fn(),
9
- createClient: vi.fn(),
10
- }));
11
- vi.mock('../../lib/config.js', () => ({
12
- saveConfig: vi.fn(),
13
- getDefaultApiUrl: vi.fn(() => 'https://api.clawmarket.cc'),
14
- }));
15
- vi.mock('../../lib/errors.js', () => ({
16
- handleApiError: vi.fn(),
17
- }));
18
- import prompts from 'prompts';
19
- import { ApiClient, createClient } from '../../lib/api.js';
20
- import { saveConfig } from '../../lib/config.js';
21
- import { handleApiError } from '../../lib/errors.js';
22
- import registerInit from '../../commands/init.js';
23
- const mockedPrompts = vi.mocked(prompts);
24
- const MockedApiClient = vi.mocked(ApiClient);
25
- const mockedCreateClient = vi.mocked(createClient);
26
- const mockedSaveConfig = vi.mocked(saveConfig);
27
- const mockedHandleApiError = vi.mocked(handleApiError);
28
- async function runInit() {
29
- const program = new Command();
30
- registerInit(program);
31
- await program.parseAsync(['node', 'test', 'init']);
32
- }
33
- describe('init command', () => {
34
- let captured;
35
- beforeEach(() => {
36
- captured = captureConsole();
37
- });
38
- it('logs in with existing API key', async () => {
39
- const me = makeProvider();
40
- const mockRequest = vi.fn().mockResolvedValue(me);
41
- MockedApiClient.mockImplementation(() => ({ request: mockRequest }));
42
- mockedPrompts
43
- .mockResolvedValueOnce({ hasKey: true })
44
- .mockResolvedValueOnce({ apiKey: 'test-key-123' });
45
- await runInit();
46
- expect(mockRequest).toHaveBeenCalledWith('GET', '/api/providers/me');
47
- expect(mockedSaveConfig).toHaveBeenCalledWith({
48
- api_key: 'test-key-123',
49
- api_url: 'https://api.clawmarket.cc',
50
- });
51
- expect(captured.getOutput()).toContain(`Logged in as ${me.first_name}`);
52
- });
53
- it('creates new account', async () => {
54
- const reg = makeRegisterResponse();
55
- const mockRequest = vi.fn().mockResolvedValue(reg);
56
- mockedCreateClient.mockResolvedValue({ request: mockRequest });
57
- mockedPrompts
58
- .mockResolvedValueOnce({ hasKey: false })
59
- .mockResolvedValueOnce({ firstName: 'NewUser' })
60
- .mockResolvedValueOnce({ walletAddress: 'abc123' });
61
- await runInit();
62
- expect(mockRequest).toHaveBeenCalledWith('POST', '/api/providers/register', { wallet_address: 'abc123', first_name: 'NewUser' }, false);
63
- expect(mockedSaveConfig).toHaveBeenCalledWith({ api_key: reg.api_key });
64
- expect(captured.getOutput()).toContain('Account created!');
65
- });
66
- it('aborts when user cancels hasKey prompt', async () => {
67
- mockedPrompts.mockResolvedValueOnce({ hasKey: undefined });
68
- await runInit();
69
- expect(mockedSaveConfig).not.toHaveBeenCalled();
70
- });
71
- it('aborts when user cancels apiKey prompt', async () => {
72
- mockedPrompts
73
- .mockResolvedValueOnce({ hasKey: true })
74
- .mockResolvedValueOnce({ apiKey: '' });
75
- await runInit();
76
- expect(mockedSaveConfig).not.toHaveBeenCalled();
77
- });
78
- it('aborts when user cancels firstName prompt', async () => {
79
- mockedPrompts
80
- .mockResolvedValueOnce({ hasKey: false })
81
- .mockResolvedValueOnce({ firstName: '' });
82
- await runInit();
83
- expect(mockedSaveConfig).not.toHaveBeenCalled();
84
- });
85
- it('aborts when user cancels walletAddress prompt', async () => {
86
- mockedPrompts
87
- .mockResolvedValueOnce({ hasKey: false })
88
- .mockResolvedValueOnce({ firstName: 'Test' })
89
- .mockResolvedValueOnce({ walletAddress: '' });
90
- await runInit();
91
- expect(mockedSaveConfig).not.toHaveBeenCalled();
92
- });
93
- it('prints welcome message', async () => {
94
- mockedPrompts.mockResolvedValueOnce({ hasKey: undefined });
95
- await runInit();
96
- expect(captured.getOutput()).toContain('Welcome to ClawMarket!');
97
- });
98
- it('calls handleApiError on API failure (existing key flow)', async () => {
99
- const error = new Error('Network error');
100
- MockedApiClient.mockImplementation(() => ({
101
- request: vi.fn().mockRejectedValue(error),
102
- }));
103
- mockedPrompts
104
- .mockResolvedValueOnce({ hasKey: true })
105
- .mockResolvedValueOnce({ apiKey: 'bad-key' });
106
- await runInit();
107
- expect(mockedHandleApiError).toHaveBeenCalledWith(error);
108
- });
109
- it('calls handleApiError on API failure (register flow)', async () => {
110
- const error = new Error('Server down');
111
- mockedCreateClient.mockResolvedValue({
112
- request: vi.fn().mockRejectedValue(error),
113
- });
114
- mockedPrompts
115
- .mockResolvedValueOnce({ hasKey: false })
116
- .mockResolvedValueOnce({ firstName: 'Test' })
117
- .mockResolvedValueOnce({ walletAddress: 'wallet' });
118
- await runInit();
119
- expect(mockedHandleApiError).toHaveBeenCalledWith(error);
120
- });
121
- it('shows wallet address in login success message', async () => {
122
- const me = makeProvider({ first_name: 'Alice', wallet_address: 'sol123' });
123
- MockedApiClient.mockImplementation(() => ({
124
- request: vi.fn().mockResolvedValue(me),
125
- }));
126
- mockedPrompts
127
- .mockResolvedValueOnce({ hasKey: true })
128
- .mockResolvedValueOnce({ apiKey: 'key' });
129
- await runInit();
130
- expect(captured.getOutput()).toContain('Alice');
131
- expect(captured.getOutput()).toContain('sol123');
132
- });
133
- });
134
- //# sourceMappingURL=init.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/init.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,41 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Command } from 'commander';
3
- import { captureConsole } from '../helpers/mock-console.js';
4
- vi.mock('prompts', () => ({ default: vi.fn() }));
5
- vi.mock('../../lib/config.js', () => ({
6
- clearConfig: vi.fn(),
7
- }));
8
- import prompts from 'prompts';
9
- import { clearConfig } from '../../lib/config.js';
10
- import registerLogout from '../../commands/logout.js';
11
- const mockedPrompts = vi.mocked(prompts);
12
- const mockedClearConfig = vi.mocked(clearConfig);
13
- async function runLogout() {
14
- const program = new Command();
15
- registerLogout(program);
16
- await program.parseAsync(['node', 'test', 'logout']);
17
- }
18
- describe('logout command', () => {
19
- let captured;
20
- beforeEach(() => {
21
- captured = captureConsole();
22
- mockedClearConfig.mockResolvedValue(undefined);
23
- });
24
- it('clears config when user confirms', async () => {
25
- mockedPrompts.mockResolvedValueOnce({ confirm: true });
26
- await runLogout();
27
- expect(mockedClearConfig).toHaveBeenCalled();
28
- expect(captured.getOutput()).toContain('Logged out. Config removed.');
29
- });
30
- it('does nothing when user cancels', async () => {
31
- mockedPrompts.mockResolvedValueOnce({ confirm: false });
32
- await runLogout();
33
- expect(mockedClearConfig).not.toHaveBeenCalled();
34
- });
35
- it('does nothing when user aborts prompt', async () => {
36
- mockedPrompts.mockResolvedValueOnce({});
37
- await runLogout();
38
- expect(mockedClearConfig).not.toHaveBeenCalled();
39
- });
40
- });
41
- //# sourceMappingURL=logout.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logout.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/logout.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACjD,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;CACrB,CAAC,CAAC,CAAC;AAEJ,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,cAAc,MAAM,0BAA0B,CAAC;AAEtD,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzC,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEjD,KAAK,UAAU,SAAS;IACtB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,QAA2C,CAAC;IAEhD,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,cAAc,EAAE,CAAC;QAC5B,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,aAAa,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,MAAM,SAAS,EAAE,CAAC;QAElB,MAAM,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,aAAa,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAExD,MAAM,SAAS,EAAE,CAAC;QAElB,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,aAAa,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAExC,MAAM,SAAS,EAAE,CAAC;QAElB,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,67 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Command } from 'commander';
3
- import { captureConsole } from '../helpers/mock-console.js';
4
- import { makeFileRecord } from '../helpers/fixtures.js';
5
- vi.mock('../../lib/api.js', () => ({
6
- createAuthenticatedClient: vi.fn(),
7
- }));
8
- vi.mock('../../lib/errors.js', () => ({
9
- handleApiError: vi.fn(),
10
- }));
11
- import { createAuthenticatedClient } from '../../lib/api.js';
12
- import { handleApiError } from '../../lib/errors.js';
13
- import registerLs from '../../commands/ls.js';
14
- const mockedCreateAuth = vi.mocked(createAuthenticatedClient);
15
- const mockedHandleApiError = vi.mocked(handleApiError);
16
- async function runLs(...args) {
17
- const program = new Command();
18
- registerLs(program);
19
- await program.parseAsync(['node', 'test', 'ls', ...args]);
20
- }
21
- describe('ls command', () => {
22
- let captured;
23
- beforeEach(() => {
24
- captured = captureConsole();
25
- });
26
- it('shows empty message when no files', async () => {
27
- mockedCreateAuth.mockResolvedValue({ request: vi.fn().mockResolvedValue([]) });
28
- await runLs();
29
- expect(captured.getOutput()).toContain('No files uploaded yet');
30
- });
31
- it('renders table with file data', async () => {
32
- const files = [makeFileRecord()];
33
- mockedCreateAuth.mockResolvedValue({ request: vi.fn().mockResolvedValue(files) });
34
- await runLs();
35
- const output = captured.getOutput();
36
- expect(output).toContain('ID');
37
- expect(output).toContain('TITLE');
38
- expect(output).toContain('My Bot Strategy');
39
- expect(output).toContain('listed');
40
- });
41
- it('outputs JSON with --json flag', async () => {
42
- const files = [makeFileRecord()];
43
- mockedCreateAuth.mockResolvedValue({ request: vi.fn().mockResolvedValue(files) });
44
- await runLs('--json');
45
- const output = captured.getOutput();
46
- const parsed = JSON.parse(output);
47
- expect(parsed).toHaveLength(1);
48
- expect(parsed[0].id).toBe('file-001');
49
- });
50
- it('truncates long titles', async () => {
51
- const files = [makeFileRecord({ title: 'A very long title that should be truncated to fit the column width' })];
52
- mockedCreateAuth.mockResolvedValue({ request: vi.fn().mockResolvedValue(files) });
53
- await runLs();
54
- const output = captured.getOutput();
55
- // Title is substring(0,28) then padEnd(30), so long titles get cut
56
- expect(output).toContain('A very long title that shoul');
57
- });
58
- it('calls handleApiError on failure', async () => {
59
- const error = new Error('API down');
60
- mockedCreateAuth.mockResolvedValue({
61
- request: vi.fn().mockRejectedValue(error),
62
- });
63
- await runLs();
64
- expect(mockedHandleApiError).toHaveBeenCalledWith(error);
65
- });
66
- });
67
- //# sourceMappingURL=ls.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ls.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/ls.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};