@doist/twist-cli 2.5.0 → 2.6.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.
- package/dist/lib/oauth-server.js +678 -22
- package/dist/lib/oauth-server.js.map +1 -1
- package/package.json +3 -3
- package/dist/__tests__/auth.test.d.ts +0 -2
- package/dist/__tests__/auth.test.d.ts.map +0 -1
- package/dist/__tests__/auth.test.js +0 -340
- package/dist/__tests__/auth.test.js.map +0 -1
- package/dist/__tests__/channel.test.d.ts +0 -2
- package/dist/__tests__/channel.test.d.ts.map +0 -1
- package/dist/__tests__/channel.test.js +0 -30
- package/dist/__tests__/channel.test.js.map +0 -1
- package/dist/__tests__/completion.test.d.ts +0 -2
- package/dist/__tests__/completion.test.d.ts.map +0 -1
- package/dist/__tests__/completion.test.js +0 -106
- package/dist/__tests__/completion.test.js.map +0 -1
- package/dist/__tests__/conversation.test.d.ts +0 -2
- package/dist/__tests__/conversation.test.d.ts.map +0 -1
- package/dist/__tests__/conversation.test.js +0 -47
- package/dist/__tests__/conversation.test.js.map +0 -1
- package/dist/__tests__/inbox.test.d.ts +0 -2
- package/dist/__tests__/inbox.test.d.ts.map +0 -1
- package/dist/__tests__/inbox.test.js +0 -31
- package/dist/__tests__/inbox.test.js.map +0 -1
- package/dist/__tests__/lib/dates.test.d.ts +0 -2
- package/dist/__tests__/lib/dates.test.d.ts.map +0 -1
- package/dist/__tests__/lib/dates.test.js +0 -58
- package/dist/__tests__/lib/dates.test.js.map +0 -1
- package/dist/__tests__/lib/output.test.d.ts +0 -2
- package/dist/__tests__/lib/output.test.d.ts.map +0 -1
- package/dist/__tests__/lib/output.test.js +0 -29
- package/dist/__tests__/lib/output.test.js.map +0 -1
- package/dist/__tests__/lib/public-channels.test.d.ts +0 -2
- package/dist/__tests__/lib/public-channels.test.d.ts.map +0 -1
- package/dist/__tests__/lib/public-channels.test.js +0 -124
- package/dist/__tests__/lib/public-channels.test.js.map +0 -1
- package/dist/__tests__/lib/refs.test.d.ts +0 -2
- package/dist/__tests__/lib/refs.test.d.ts.map +0 -1
- package/dist/__tests__/lib/refs.test.js +0 -191
- package/dist/__tests__/lib/refs.test.js.map +0 -1
- package/dist/__tests__/msg.test.d.ts +0 -2
- package/dist/__tests__/msg.test.d.ts.map +0 -1
- package/dist/__tests__/msg.test.js +0 -31
- package/dist/__tests__/msg.test.js.map +0 -1
- package/dist/__tests__/postinstall.test.d.ts +0 -2
- package/dist/__tests__/postinstall.test.d.ts.map +0 -1
- package/dist/__tests__/postinstall.test.js +0 -20
- package/dist/__tests__/postinstall.test.js.map +0 -1
- package/dist/__tests__/progress.test.d.ts +0 -2
- package/dist/__tests__/progress.test.d.ts.map +0 -1
- package/dist/__tests__/progress.test.js +0 -258
- package/dist/__tests__/progress.test.js.map +0 -1
- package/dist/__tests__/react.test.d.ts +0 -2
- package/dist/__tests__/react.test.d.ts.map +0 -1
- package/dist/__tests__/react.test.js +0 -59
- package/dist/__tests__/react.test.js.map +0 -1
- package/dist/__tests__/search.test.d.ts +0 -2
- package/dist/__tests__/search.test.d.ts.map +0 -1
- package/dist/__tests__/search.test.js +0 -77
- package/dist/__tests__/search.test.js.map +0 -1
- package/dist/__tests__/skill.test.d.ts +0 -2
- package/dist/__tests__/skill.test.d.ts.map +0 -1
- package/dist/__tests__/skill.test.js +0 -278
- package/dist/__tests__/skill.test.js.map +0 -1
- package/dist/__tests__/spinner.test.d.ts +0 -2
- package/dist/__tests__/spinner.test.d.ts.map +0 -1
- package/dist/__tests__/spinner.test.js +0 -252
- package/dist/__tests__/spinner.test.js.map +0 -1
- package/dist/__tests__/thread.test.d.ts +0 -2
- package/dist/__tests__/thread.test.d.ts.map +0 -1
- package/dist/__tests__/thread.test.js +0 -54
- package/dist/__tests__/thread.test.js.map +0 -1
- package/dist/__tests__/update.test.d.ts +0 -2
- package/dist/__tests__/update.test.d.ts.map +0 -1
- package/dist/__tests__/update.test.js +0 -166
- package/dist/__tests__/update.test.js.map +0 -1
- package/dist/__tests__/user.test.d.ts +0 -2
- package/dist/__tests__/user.test.d.ts.map +0 -1
- package/dist/__tests__/user.test.js +0 -28
- package/dist/__tests__/user.test.js.map +0 -1
- package/dist/__tests__/view.test.d.ts +0 -2
- package/dist/__tests__/view.test.d.ts.map +0 -1
- package/dist/__tests__/view.test.js +0 -68
- package/dist/__tests__/view.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/lib/oauth-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/lib/oauth-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doist/twist-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "TypeScript CLI for Twist",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"tw": "dist/index.js"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
-
"build": "tsc && chmod +x dist/index.js",
|
|
12
|
-
"dev": "tsc --watch",
|
|
11
|
+
"build": "tsc -p tsconfig.build.json && chmod +x dist/index.js",
|
|
12
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
13
13
|
"start": "node dist/index.js",
|
|
14
14
|
"type-check": "tsc --noEmit",
|
|
15
15
|
"lint": "biome check --write .",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/auth.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
-
// Mock the auth module
|
|
4
|
-
vi.mock('../lib/auth.js', () => ({
|
|
5
|
-
saveApiToken: vi.fn(),
|
|
6
|
-
clearApiToken: vi.fn(),
|
|
7
|
-
}));
|
|
8
|
-
// Mock the api module
|
|
9
|
-
vi.mock('../lib/api.js', () => ({
|
|
10
|
-
getSessionUser: vi.fn(),
|
|
11
|
-
}));
|
|
12
|
-
// Mock the config module
|
|
13
|
-
vi.mock('../lib/config.js', () => ({
|
|
14
|
-
getConfigPath: vi.fn(() => '/home/user/.config/twist-cli/config.json'),
|
|
15
|
-
}));
|
|
16
|
-
// Mock OAuth modules
|
|
17
|
-
vi.mock('../lib/oauth.js', () => ({
|
|
18
|
-
buildAuthorizationUrl: vi.fn(),
|
|
19
|
-
exchangeCodeForToken: vi.fn(),
|
|
20
|
-
registerDynamicClient: vi.fn(),
|
|
21
|
-
}));
|
|
22
|
-
vi.mock('../lib/oauth-server.js', () => ({
|
|
23
|
-
startCallbackServer: vi.fn(),
|
|
24
|
-
}));
|
|
25
|
-
vi.mock('../lib/pkce.js', () => ({
|
|
26
|
-
generateCodeVerifier: vi.fn(),
|
|
27
|
-
generateCodeChallenge: vi.fn(),
|
|
28
|
-
generateState: vi.fn(),
|
|
29
|
-
}));
|
|
30
|
-
// Mock open package
|
|
31
|
-
vi.mock('open', () => ({
|
|
32
|
-
default: vi.fn(),
|
|
33
|
-
}));
|
|
34
|
-
// Mock readline for interactive token input
|
|
35
|
-
vi.mock('node:readline', () => ({
|
|
36
|
-
createInterface: vi.fn(() => {
|
|
37
|
-
const rl = {
|
|
38
|
-
question: vi.fn(),
|
|
39
|
-
close: vi.fn(),
|
|
40
|
-
};
|
|
41
|
-
return rl;
|
|
42
|
-
}),
|
|
43
|
-
}));
|
|
44
|
-
// Mock chalk to avoid colors in tests
|
|
45
|
-
vi.mock('chalk');
|
|
46
|
-
import { createInterface } from 'node:readline';
|
|
47
|
-
import open from 'open';
|
|
48
|
-
import { registerAuthCommand } from '../commands/auth.js';
|
|
49
|
-
import { getSessionUser } from '../lib/api.js';
|
|
50
|
-
import { clearApiToken, saveApiToken } from '../lib/auth.js';
|
|
51
|
-
import { buildAuthorizationUrl, exchangeCodeForToken, registerDynamicClient } from '../lib/oauth.js';
|
|
52
|
-
import { startCallbackServer } from '../lib/oauth-server.js';
|
|
53
|
-
import { generateCodeChallenge, generateCodeVerifier, generateState } from '../lib/pkce.js';
|
|
54
|
-
const mockCreateInterface = vi.mocked(createInterface);
|
|
55
|
-
const mockSaveApiToken = vi.mocked(saveApiToken);
|
|
56
|
-
const mockClearApiToken = vi.mocked(clearApiToken);
|
|
57
|
-
const mockGetSessionUser = vi.mocked(getSessionUser);
|
|
58
|
-
// OAuth mocks
|
|
59
|
-
const mockGenerateCodeVerifier = vi.mocked(generateCodeVerifier);
|
|
60
|
-
const mockGenerateCodeChallenge = vi.mocked(generateCodeChallenge);
|
|
61
|
-
const mockGenerateState = vi.mocked(generateState);
|
|
62
|
-
const mockBuildAuthorizationUrl = vi.mocked(buildAuthorizationUrl);
|
|
63
|
-
const mockStartCallbackServer = vi.mocked(startCallbackServer);
|
|
64
|
-
const mockExchangeCodeForToken = vi.mocked(exchangeCodeForToken);
|
|
65
|
-
const mockRegisterDynamicClient = vi.mocked(registerDynamicClient);
|
|
66
|
-
const mockOpen = vi.mocked(open);
|
|
67
|
-
function createProgram() {
|
|
68
|
-
const program = new Command();
|
|
69
|
-
program.exitOverride();
|
|
70
|
-
registerAuthCommand(program);
|
|
71
|
-
return program;
|
|
72
|
-
}
|
|
73
|
-
describe('auth command', () => {
|
|
74
|
-
let consoleSpy;
|
|
75
|
-
beforeEach(() => {
|
|
76
|
-
vi.clearAllMocks();
|
|
77
|
-
// Mock console.log to capture output
|
|
78
|
-
consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
79
|
-
});
|
|
80
|
-
afterEach(() => {
|
|
81
|
-
consoleSpy.mockRestore();
|
|
82
|
-
});
|
|
83
|
-
describe('token subcommand', () => {
|
|
84
|
-
it('successfully saves a token', async () => {
|
|
85
|
-
const program = createProgram();
|
|
86
|
-
const token = 'some_token_123456789';
|
|
87
|
-
// Mock successful token save
|
|
88
|
-
mockSaveApiToken.mockResolvedValue(undefined);
|
|
89
|
-
await program.parseAsync(['node', 'tw', 'auth', 'token', token]);
|
|
90
|
-
// Verify token was saved
|
|
91
|
-
expect(mockSaveApiToken).toHaveBeenCalledWith(token);
|
|
92
|
-
// Verify success message
|
|
93
|
-
expect(consoleSpy).toHaveBeenCalledWith('✓', 'API token saved successfully!');
|
|
94
|
-
expect(consoleSpy).toHaveBeenCalledWith('Token saved to /home/user/.config/twist-cli/config.json');
|
|
95
|
-
});
|
|
96
|
-
it('handles saveApiToken errors', async () => {
|
|
97
|
-
const program = createProgram();
|
|
98
|
-
const token = 'some_token_123456789';
|
|
99
|
-
// Mock save failure
|
|
100
|
-
mockSaveApiToken.mockRejectedValue(new Error('Permission denied'));
|
|
101
|
-
await expect(program.parseAsync(['node', 'tw', 'auth', 'token', token])).rejects.toThrow('Permission denied');
|
|
102
|
-
expect(mockSaveApiToken).toHaveBeenCalledWith(token);
|
|
103
|
-
});
|
|
104
|
-
it('trims whitespace from token', async () => {
|
|
105
|
-
const program = createProgram();
|
|
106
|
-
const tokenWithWhitespace = ' some_token_123456789 ';
|
|
107
|
-
const expectedToken = 'some_token_123456789';
|
|
108
|
-
mockSaveApiToken.mockResolvedValue(undefined);
|
|
109
|
-
await program.parseAsync(['node', 'tw', 'auth', 'token', tokenWithWhitespace]);
|
|
110
|
-
expect(mockSaveApiToken).toHaveBeenCalledWith(expectedToken);
|
|
111
|
-
});
|
|
112
|
-
it('prompts interactively when no token argument given', async () => {
|
|
113
|
-
const program = createProgram();
|
|
114
|
-
const mockRl = {
|
|
115
|
-
question: vi.fn((_prompt, cb) => {
|
|
116
|
-
cb('interactive_token_456');
|
|
117
|
-
}),
|
|
118
|
-
close: vi.fn(),
|
|
119
|
-
_writeToOutput: vi.fn(),
|
|
120
|
-
};
|
|
121
|
-
mockCreateInterface.mockReturnValue(mockRl);
|
|
122
|
-
mockSaveApiToken.mockResolvedValue(undefined);
|
|
123
|
-
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
124
|
-
await program.parseAsync(['node', 'tw', 'auth', 'token']);
|
|
125
|
-
expect(mockRl.question).toHaveBeenCalled();
|
|
126
|
-
expect(mockRl.close).toHaveBeenCalled();
|
|
127
|
-
expect(mockSaveApiToken).toHaveBeenCalledWith('interactive_token_456');
|
|
128
|
-
writeSpy.mockRestore();
|
|
129
|
-
});
|
|
130
|
-
it('shows error when interactive input is empty', async () => {
|
|
131
|
-
const program = createProgram();
|
|
132
|
-
const mockRl = {
|
|
133
|
-
question: vi.fn((_prompt, cb) => {
|
|
134
|
-
cb('');
|
|
135
|
-
}),
|
|
136
|
-
close: vi.fn(),
|
|
137
|
-
_writeToOutput: vi.fn(),
|
|
138
|
-
};
|
|
139
|
-
mockCreateInterface.mockReturnValue(mockRl);
|
|
140
|
-
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
141
|
-
const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
142
|
-
await program.parseAsync(['node', 'tw', 'auth', 'token']);
|
|
143
|
-
expect(mockSaveApiToken).not.toHaveBeenCalled();
|
|
144
|
-
expect(errorSpy).toHaveBeenCalledWith('Error:', 'No token provided');
|
|
145
|
-
writeSpy.mockRestore();
|
|
146
|
-
errorSpy.mockRestore();
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
describe('status subcommand', () => {
|
|
150
|
-
it('shows authenticated status when logged in', async () => {
|
|
151
|
-
const program = createProgram();
|
|
152
|
-
const mockUser = {
|
|
153
|
-
id: 1,
|
|
154
|
-
name: 'Test User',
|
|
155
|
-
shortName: 'test',
|
|
156
|
-
bot: false,
|
|
157
|
-
timezone: 'UTC',
|
|
158
|
-
removed: false,
|
|
159
|
-
email: 'test@example.com',
|
|
160
|
-
lang: 'en',
|
|
161
|
-
};
|
|
162
|
-
mockGetSessionUser.mockResolvedValue(mockUser);
|
|
163
|
-
await program.parseAsync(['node', 'tw', 'auth', 'status']);
|
|
164
|
-
expect(mockGetSessionUser).toHaveBeenCalled();
|
|
165
|
-
expect(consoleSpy).toHaveBeenCalledWith('✓', 'Authenticated');
|
|
166
|
-
expect(consoleSpy).toHaveBeenCalledWith(' Email: test@example.com');
|
|
167
|
-
expect(consoleSpy).toHaveBeenCalledWith(' Name: Test User');
|
|
168
|
-
});
|
|
169
|
-
it('shows not authenticated when no token', async () => {
|
|
170
|
-
const program = createProgram();
|
|
171
|
-
mockGetSessionUser.mockRejectedValue(new Error('No API token found'));
|
|
172
|
-
await program.parseAsync(['node', 'tw', 'auth', 'status']);
|
|
173
|
-
expect(consoleSpy).toHaveBeenCalledWith('Not authenticated');
|
|
174
|
-
expect(consoleSpy).toHaveBeenCalledWith('Run `tw auth login` for OAuth or `tw auth token <token>` for manual authentication');
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
describe('login subcommand', () => {
|
|
178
|
-
it('successfully completes OAuth flow with dynamic client registration', async () => {
|
|
179
|
-
const program = createProgram();
|
|
180
|
-
// Mock dynamic client registration
|
|
181
|
-
mockRegisterDynamicClient.mockResolvedValue({
|
|
182
|
-
client_id: 'twd_dynamic_client_id',
|
|
183
|
-
client_secret: 'dynamic_client_secret',
|
|
184
|
-
});
|
|
185
|
-
// Mock PKCE parameters
|
|
186
|
-
mockGenerateCodeVerifier.mockReturnValue('test_code_verifier');
|
|
187
|
-
mockGenerateCodeChallenge.mockReturnValue('test_code_challenge');
|
|
188
|
-
mockGenerateState.mockReturnValue('test_state');
|
|
189
|
-
// Mock authorization URL
|
|
190
|
-
mockBuildAuthorizationUrl.mockReturnValue('https://twist.com/oauth/authorize?...');
|
|
191
|
-
// Mock callback server that resolves immediately
|
|
192
|
-
const mockCleanup = vi.fn();
|
|
193
|
-
mockStartCallbackServer.mockImplementation(async (expectedState) => {
|
|
194
|
-
// Simulate the browser opening behavior by calling our mocks
|
|
195
|
-
mockBuildAuthorizationUrl('twd_dynamic_client_id', 'test_code_challenge', expectedState);
|
|
196
|
-
await mockOpen('https://twist.com/oauth/authorize?...');
|
|
197
|
-
return Promise.resolve({
|
|
198
|
-
code: 'auth_code_123',
|
|
199
|
-
cleanup: mockCleanup,
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
// Mock token exchange
|
|
203
|
-
mockExchangeCodeForToken.mockResolvedValue('access_token_123');
|
|
204
|
-
// Mock browser opening
|
|
205
|
-
mockOpen.mockResolvedValue({});
|
|
206
|
-
// Mock token saving
|
|
207
|
-
mockSaveApiToken.mockResolvedValue(undefined);
|
|
208
|
-
await program.parseAsync(['node', 'tw', 'auth', 'login']);
|
|
209
|
-
// Verify dynamic client registration
|
|
210
|
-
expect(mockRegisterDynamicClient).toHaveBeenCalled();
|
|
211
|
-
// Verify PKCE parameters were generated
|
|
212
|
-
expect(mockGenerateCodeVerifier).toHaveBeenCalled();
|
|
213
|
-
expect(mockGenerateCodeChallenge).toHaveBeenCalledWith('test_code_verifier');
|
|
214
|
-
expect(mockGenerateState).toHaveBeenCalled();
|
|
215
|
-
// Verify authorization URL was built with dynamic client ID
|
|
216
|
-
expect(mockBuildAuthorizationUrl).toHaveBeenCalledWith('twd_dynamic_client_id', 'test_code_challenge', 'test_state');
|
|
217
|
-
// Verify callback server was started
|
|
218
|
-
expect(mockStartCallbackServer).toHaveBeenCalledWith('test_state');
|
|
219
|
-
// Verify browser was opened
|
|
220
|
-
expect(mockOpen).toHaveBeenCalledWith('https://twist.com/oauth/authorize?...');
|
|
221
|
-
// Verify token exchange with client credentials
|
|
222
|
-
expect(mockExchangeCodeForToken).toHaveBeenCalledWith('auth_code_123', 'test_code_verifier', {
|
|
223
|
-
client_id: 'twd_dynamic_client_id',
|
|
224
|
-
client_secret: 'dynamic_client_secret',
|
|
225
|
-
});
|
|
226
|
-
// Verify token was saved
|
|
227
|
-
expect(mockSaveApiToken).toHaveBeenCalledWith('access_token_123');
|
|
228
|
-
// Verify cleanup was called
|
|
229
|
-
expect(mockCleanup).toHaveBeenCalled();
|
|
230
|
-
// Verify success messages
|
|
231
|
-
expect(consoleSpy).toHaveBeenCalledWith('Starting OAuth authentication...');
|
|
232
|
-
expect(consoleSpy).toHaveBeenCalledWith('✓', 'OAuth authentication successful!');
|
|
233
|
-
});
|
|
234
|
-
it('handles callback server errors', async () => {
|
|
235
|
-
const program = createProgram();
|
|
236
|
-
// Mock dynamic client registration
|
|
237
|
-
mockRegisterDynamicClient.mockResolvedValue({
|
|
238
|
-
client_id: 'twd_dynamic_client_id',
|
|
239
|
-
client_secret: 'dynamic_client_secret',
|
|
240
|
-
});
|
|
241
|
-
// Mock PKCE parameters
|
|
242
|
-
mockGenerateCodeVerifier.mockReturnValue('test_code_verifier');
|
|
243
|
-
mockGenerateCodeChallenge.mockReturnValue('test_code_challenge');
|
|
244
|
-
mockGenerateState.mockReturnValue('test_state');
|
|
245
|
-
// Mock callback server error
|
|
246
|
-
mockStartCallbackServer.mockRejectedValue(new Error('Port 8766 is already in use'));
|
|
247
|
-
await program.parseAsync(['node', 'tw', 'auth', 'login']);
|
|
248
|
-
expect(consoleSpy).toHaveBeenCalledWith('✗', 'OAuth authentication failed');
|
|
249
|
-
expect(consoleSpy).toHaveBeenCalledWith('Port 8766 is already in use');
|
|
250
|
-
});
|
|
251
|
-
it('handles token exchange errors', async () => {
|
|
252
|
-
const program = createProgram();
|
|
253
|
-
// Mock dynamic client registration
|
|
254
|
-
mockRegisterDynamicClient.mockResolvedValue({
|
|
255
|
-
client_id: 'twd_dynamic_client_id',
|
|
256
|
-
client_secret: 'dynamic_client_secret',
|
|
257
|
-
});
|
|
258
|
-
// Mock PKCE parameters
|
|
259
|
-
mockGenerateCodeVerifier.mockReturnValue('test_code_verifier');
|
|
260
|
-
mockGenerateCodeChallenge.mockReturnValue('test_code_challenge');
|
|
261
|
-
mockGenerateState.mockReturnValue('test_state');
|
|
262
|
-
// Mock successful callback
|
|
263
|
-
const mockCleanup = vi.fn();
|
|
264
|
-
mockStartCallbackServer.mockResolvedValue({
|
|
265
|
-
code: 'auth_code_123',
|
|
266
|
-
cleanup: mockCleanup,
|
|
267
|
-
});
|
|
268
|
-
// Mock token exchange error
|
|
269
|
-
mockExchangeCodeForToken.mockRejectedValue(new Error('Invalid authorization code'));
|
|
270
|
-
await program.parseAsync(['node', 'tw', 'auth', 'login']);
|
|
271
|
-
expect(mockCleanup).toHaveBeenCalled();
|
|
272
|
-
expect(consoleSpy).toHaveBeenCalledWith('✗', 'OAuth authentication failed');
|
|
273
|
-
expect(consoleSpy).toHaveBeenCalledWith('Invalid authorization code');
|
|
274
|
-
});
|
|
275
|
-
it('handles browser opening errors gracefully', async () => {
|
|
276
|
-
const program = createProgram();
|
|
277
|
-
// Mock dynamic client registration
|
|
278
|
-
mockRegisterDynamicClient.mockResolvedValue({
|
|
279
|
-
client_id: 'twd_dynamic_client_id',
|
|
280
|
-
client_secret: 'dynamic_client_secret',
|
|
281
|
-
});
|
|
282
|
-
// Mock PKCE parameters
|
|
283
|
-
mockGenerateCodeVerifier.mockReturnValue('test_code_verifier');
|
|
284
|
-
mockGenerateCodeChallenge.mockReturnValue('test_code_challenge');
|
|
285
|
-
mockGenerateState.mockReturnValue('test_state');
|
|
286
|
-
// Mock callback server
|
|
287
|
-
const mockCleanup = vi.fn();
|
|
288
|
-
mockStartCallbackServer.mockResolvedValue({
|
|
289
|
-
code: 'auth_code_123',
|
|
290
|
-
cleanup: mockCleanup,
|
|
291
|
-
});
|
|
292
|
-
// Mock browser opening error
|
|
293
|
-
mockOpen.mockRejectedValue(new Error('No browser available'));
|
|
294
|
-
// Mock successful token exchange (flow should still continue)
|
|
295
|
-
mockExchangeCodeForToken.mockResolvedValue('access_token_123');
|
|
296
|
-
mockSaveApiToken.mockResolvedValue(undefined);
|
|
297
|
-
await program.parseAsync(['node', 'tw', 'auth', 'login']);
|
|
298
|
-
// Should still complete successfully despite browser error
|
|
299
|
-
expect(consoleSpy).toHaveBeenCalledWith('✓', 'OAuth authentication successful!');
|
|
300
|
-
});
|
|
301
|
-
it('calls cleanup when OAuth server throws', async () => {
|
|
302
|
-
const program = createProgram();
|
|
303
|
-
// Mock dynamic client registration
|
|
304
|
-
mockRegisterDynamicClient.mockResolvedValue({
|
|
305
|
-
client_id: 'twd_dynamic_client_id',
|
|
306
|
-
client_secret: 'dynamic_client_secret',
|
|
307
|
-
});
|
|
308
|
-
// Mock PKCE parameters
|
|
309
|
-
mockGenerateCodeVerifier.mockReturnValue('test_code_verifier');
|
|
310
|
-
mockGenerateCodeChallenge.mockReturnValue('test_code_challenge');
|
|
311
|
-
mockGenerateState.mockReturnValue('test_state');
|
|
312
|
-
// Mock server that throws an error
|
|
313
|
-
mockStartCallbackServer.mockRejectedValue(new Error('Server failed to start'));
|
|
314
|
-
await program.parseAsync(['node', 'tw', 'auth', 'login']);
|
|
315
|
-
// Should handle the error gracefully
|
|
316
|
-
expect(consoleSpy).toHaveBeenCalledWith('✗', 'OAuth authentication failed');
|
|
317
|
-
expect(consoleSpy).toHaveBeenCalledWith('Server failed to start');
|
|
318
|
-
});
|
|
319
|
-
});
|
|
320
|
-
describe('login subcommand with unconfigured client ID', () => {
|
|
321
|
-
// Note: Testing the unconfigured client ID scenario is complex with the current mock setup
|
|
322
|
-
// In practice, users would need to configure their client ID before OAuth works
|
|
323
|
-
it('would show error when client ID is not configured', () => {
|
|
324
|
-
// This test documents the expected behavior when TWIST_CLIENT_ID === 'YOUR_CLIENT_ID'
|
|
325
|
-
// The actual implementation checks this condition and shows an error message
|
|
326
|
-
expect(true).toBe(true); // Placeholder for documentation purposes
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
describe('logout subcommand', () => {
|
|
330
|
-
it('clears the API token', async () => {
|
|
331
|
-
const program = createProgram();
|
|
332
|
-
mockClearApiToken.mockResolvedValue(undefined);
|
|
333
|
-
await program.parseAsync(['node', 'tw', 'auth', 'logout']);
|
|
334
|
-
expect(mockClearApiToken).toHaveBeenCalled();
|
|
335
|
-
expect(consoleSpy).toHaveBeenCalledWith('✓', 'Logged out');
|
|
336
|
-
expect(consoleSpy).toHaveBeenCalledWith('Token removed from /home/user/.config/twist-cli/config.json');
|
|
337
|
-
});
|
|
338
|
-
});
|
|
339
|
-
});
|
|
340
|
-
//# sourceMappingURL=auth.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../src/__tests__/auth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"channel.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/channel.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
-
vi.mock('../lib/api.js', () => ({
|
|
4
|
-
getTwistClient: vi.fn(),
|
|
5
|
-
getCurrentWorkspaceId: vi.fn().mockResolvedValue(1),
|
|
6
|
-
}));
|
|
7
|
-
vi.mock('../lib/refs.js', () => ({
|
|
8
|
-
resolveWorkspaceRef: vi.fn(),
|
|
9
|
-
}));
|
|
10
|
-
vi.mock('../lib/public-channels.js', () => ({
|
|
11
|
-
includePrivateChannels: vi.fn().mockReturnValue(true),
|
|
12
|
-
}));
|
|
13
|
-
vi.mock('chalk');
|
|
14
|
-
import { registerChannelCommand } from '../commands/channel.js';
|
|
15
|
-
function createProgram() {
|
|
16
|
-
const program = new Command();
|
|
17
|
-
program.exitOverride();
|
|
18
|
-
registerChannelCommand(program);
|
|
19
|
-
return program;
|
|
20
|
-
}
|
|
21
|
-
describe('channels --workspace conflict', () => {
|
|
22
|
-
beforeEach(() => {
|
|
23
|
-
vi.clearAllMocks();
|
|
24
|
-
});
|
|
25
|
-
it('errors when both positional and --workspace are provided', async () => {
|
|
26
|
-
const program = createProgram();
|
|
27
|
-
await expect(program.parseAsync(['node', 'tw', 'channels', 'Doist', '--workspace', 'Other'])).rejects.toThrow('Cannot specify workspace both as argument and --workspace flag');
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
//# sourceMappingURL=channel.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"channel.test.js","sourceRoot":"","sources":["../../src/__tests__/channel.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7D,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;IACvB,qBAAqB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;CACtD,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,sBAAsB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;CACxD,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAEhB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,SAAS,aAAa;IAClB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,OAAO,CAAC,YAAY,EAAE,CAAA;IACtB,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC3C,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;QAE/B,MAAM,MAAM,CACR,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAClF,CAAC,OAAO,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAA;IACvF,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completion.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/completion.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { Command, Option } from 'commander';
|
|
2
|
-
import { describe, expect, it } from 'vitest';
|
|
3
|
-
import { getCompletions, parseCompLine, withCaseInsensitiveChoices, withUnvalidatedChoices, } from '../lib/completion.js';
|
|
4
|
-
function createTestProgram() {
|
|
5
|
-
const program = new Command();
|
|
6
|
-
program.name('tw');
|
|
7
|
-
const thread = program.command('thread').description('Thread operations');
|
|
8
|
-
thread.command('view').description('View thread').option('--json', 'Output as JSON');
|
|
9
|
-
thread
|
|
10
|
-
.command('reply')
|
|
11
|
-
.description('Reply in thread')
|
|
12
|
-
.addOption(withUnvalidatedChoices(new Option('--notify <recipients>', 'Notification targets'), [
|
|
13
|
-
'EVERYONE',
|
|
14
|
-
'EVERYONE_IN_THREAD',
|
|
15
|
-
]));
|
|
16
|
-
program
|
|
17
|
-
.command('search')
|
|
18
|
-
.description('Search content')
|
|
19
|
-
.addOption(withCaseInsensitiveChoices(new Option('--type <type>', 'Search type'), [
|
|
20
|
-
'threads',
|
|
21
|
-
'messages',
|
|
22
|
-
'all',
|
|
23
|
-
]))
|
|
24
|
-
.option('--json', 'Output as JSON');
|
|
25
|
-
// Hidden command (like completion-server)
|
|
26
|
-
program.command('hidden-cmd', { hidden: true }).description('Internal command');
|
|
27
|
-
return program;
|
|
28
|
-
}
|
|
29
|
-
function names(items) {
|
|
30
|
-
return items.map((i) => i.name);
|
|
31
|
-
}
|
|
32
|
-
describe('getCompletions', () => {
|
|
33
|
-
it('returns visible top-level commands', () => {
|
|
34
|
-
const program = createTestProgram();
|
|
35
|
-
const result = getCompletions(program, [''], '');
|
|
36
|
-
expect(names(result)).toContain('thread');
|
|
37
|
-
expect(names(result)).toContain('search');
|
|
38
|
-
expect(names(result)).not.toContain('hidden-cmd');
|
|
39
|
-
});
|
|
40
|
-
it('returns subcommands inside a command', () => {
|
|
41
|
-
const program = createTestProgram();
|
|
42
|
-
const result = getCompletions(program, ['thread', ''], '');
|
|
43
|
-
const resultNames = names(result);
|
|
44
|
-
expect(resultNames).toContain('view');
|
|
45
|
-
expect(resultNames).toContain('reply');
|
|
46
|
-
});
|
|
47
|
-
it('returns options when current word starts with -', () => {
|
|
48
|
-
const program = createTestProgram();
|
|
49
|
-
const result = getCompletions(program, ['search', '--'], '--');
|
|
50
|
-
const resultNames = names(result);
|
|
51
|
-
expect(resultNames).toContain('--type');
|
|
52
|
-
expect(resultNames).toContain('--json');
|
|
53
|
-
});
|
|
54
|
-
it('suggests option values from argChoices', () => {
|
|
55
|
-
const program = createTestProgram();
|
|
56
|
-
const result = getCompletions(program, ['search', '--type', ''], '');
|
|
57
|
-
expect(names(result)).toEqual(['threads', 'messages', 'all']);
|
|
58
|
-
});
|
|
59
|
-
it('supports --flag=value completion', () => {
|
|
60
|
-
const program = createTestProgram();
|
|
61
|
-
const result = getCompletions(program, ['search', '--type='], '--type=');
|
|
62
|
-
expect(names(result)).toEqual(['--type=threads', '--type=messages', '--type=all']);
|
|
63
|
-
});
|
|
64
|
-
it('supports unvalidated choices for options with extra accepted formats', () => {
|
|
65
|
-
const program = createTestProgram();
|
|
66
|
-
const result = getCompletions(program, ['thread', 'reply', '--notify', ''], '');
|
|
67
|
-
expect(names(result)).toEqual(['EVERYONE', 'EVERYONE_IN_THREAD']);
|
|
68
|
-
});
|
|
69
|
-
it('stops offering options after --', () => {
|
|
70
|
-
const program = createTestProgram();
|
|
71
|
-
const result = getCompletions(program, ['search', '--', '--ty'], '--ty');
|
|
72
|
-
expect(result).toEqual([]);
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
describe('parseCompLine quoted argument limitation', () => {
|
|
76
|
-
it('splits quoted multi-word arguments into separate tokens', () => {
|
|
77
|
-
const result = parseCompLine('tw thread reply "hello world"');
|
|
78
|
-
expect(result).toEqual(['thread', 'reply', '"hello', 'world"']);
|
|
79
|
-
});
|
|
80
|
-
it('strips completion-server token', () => {
|
|
81
|
-
const result = parseCompLine('tw completion-server thread rep');
|
|
82
|
-
expect(result).toEqual(['thread', 'rep']);
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
// These tests verify assumptions we make about Commander internals.
|
|
86
|
-
describe('Commander internal assumptions', () => {
|
|
87
|
-
it('choices() sets parseArg on the option', () => {
|
|
88
|
-
const opt = new Option('--color <c>', 'Pick a color');
|
|
89
|
-
expect(opt.parseArg).toBeUndefined();
|
|
90
|
-
opt.choices(['red', 'blue']);
|
|
91
|
-
expect(opt.parseArg).toBeTypeOf('function');
|
|
92
|
-
});
|
|
93
|
-
it('argChoices set directly is readable by option consumers', () => {
|
|
94
|
-
const opt = new Option('--role <r>', 'Role');
|
|
95
|
-
opt.argChoices = ['ADMIN', 'MEMBER'];
|
|
96
|
-
expect(opt.argChoices).toEqual(['ADMIN', 'MEMBER']);
|
|
97
|
-
});
|
|
98
|
-
it('{ hidden: true } sets _hidden on the command', () => {
|
|
99
|
-
const program = new Command();
|
|
100
|
-
const visible = program.command('visible');
|
|
101
|
-
const hidden = program.command('secret', { hidden: true });
|
|
102
|
-
expect(visible._hidden).toBe(false);
|
|
103
|
-
expect(hidden._hidden).toBe(true);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
//# sourceMappingURL=completion.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completion.test.js","sourceRoot":"","sources":["../../src/__tests__/completion.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/conversation.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
-
vi.mock('../lib/api.js', () => ({
|
|
4
|
-
getTwistClient: vi.fn().mockRejectedValue(new Error('MOCK_API_REACHED')),
|
|
5
|
-
getCurrentWorkspaceId: vi.fn().mockResolvedValue(1),
|
|
6
|
-
}));
|
|
7
|
-
vi.mock('../lib/refs.js', () => ({
|
|
8
|
-
resolveConversationId: vi.fn().mockReturnValue(100),
|
|
9
|
-
resolveWorkspaceRef: vi.fn(),
|
|
10
|
-
}));
|
|
11
|
-
vi.mock('../lib/markdown.js', () => ({
|
|
12
|
-
renderMarkdown: vi.fn((text) => text),
|
|
13
|
-
}));
|
|
14
|
-
vi.mock('chalk');
|
|
15
|
-
import { registerConversationCommand } from '../commands/conversation.js';
|
|
16
|
-
function createProgram() {
|
|
17
|
-
const program = new Command();
|
|
18
|
-
program.exitOverride();
|
|
19
|
-
registerConversationCommand(program);
|
|
20
|
-
return program;
|
|
21
|
-
}
|
|
22
|
-
describe('conversation implicit view', () => {
|
|
23
|
-
beforeEach(() => {
|
|
24
|
-
vi.clearAllMocks();
|
|
25
|
-
});
|
|
26
|
-
it('tw conversation <ref> routes to view (not unknown command)', async () => {
|
|
27
|
-
const program = createProgram();
|
|
28
|
-
const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
29
|
-
await expect(program.parseAsync(['node', 'tw', 'conversation', '100'])).rejects.toThrow('MOCK_API_REACHED');
|
|
30
|
-
consoleSpy.mockRestore();
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
describe('conversation unread --workspace conflict', () => {
|
|
34
|
-
it('errors when both positional and --workspace are provided', async () => {
|
|
35
|
-
const program = createProgram();
|
|
36
|
-
await expect(program.parseAsync([
|
|
37
|
-
'node',
|
|
38
|
-
'tw',
|
|
39
|
-
'conversation',
|
|
40
|
-
'unread',
|
|
41
|
-
'Doist',
|
|
42
|
-
'--workspace',
|
|
43
|
-
'Other',
|
|
44
|
-
])).rejects.toThrow('Cannot specify workspace both as argument and --workspace flag');
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
//# sourceMappingURL=conversation.test.js.map
|