@doist/twist-cli 2.21.0 → 2.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +2 -4
  3. package/dist/__mocks__/chalk.d.ts +0 -3
  4. package/dist/__mocks__/chalk.d.ts.map +0 -1
  5. package/dist/__mocks__/chalk.js +0 -8
  6. package/dist/__mocks__/chalk.js.map +0 -1
  7. package/dist/commands/auth.d.ts +0 -3
  8. package/dist/commands/auth.d.ts.map +0 -1
  9. package/dist/commands/auth.js +0 -155
  10. package/dist/commands/auth.js.map +0 -1
  11. package/dist/commands/away.d.ts +0 -3
  12. package/dist/commands/away.d.ts.map +0 -1
  13. package/dist/commands/away.js +0 -120
  14. package/dist/commands/away.js.map +0 -1
  15. package/dist/commands/changelog.d.ts +0 -8
  16. package/dist/commands/changelog.d.ts.map +0 -1
  17. package/dist/commands/changelog.js +0 -113
  18. package/dist/commands/changelog.js.map +0 -1
  19. package/dist/commands/channel.d.ts +0 -3
  20. package/dist/commands/channel.d.ts.map +0 -1
  21. package/dist/commands/channel.js +0 -53
  22. package/dist/commands/channel.js.map +0 -1
  23. package/dist/commands/comment.d.ts +0 -3
  24. package/dist/commands/comment.d.ts.map +0 -1
  25. package/dist/commands/comment.js +0 -99
  26. package/dist/commands/comment.js.map +0 -1
  27. package/dist/commands/completion.d.ts +0 -3
  28. package/dist/commands/completion.d.ts.map +0 -1
  29. package/dist/commands/completion.js +0 -121
  30. package/dist/commands/completion.js.map +0 -1
  31. package/dist/commands/conversation.d.ts +0 -3
  32. package/dist/commands/conversation.d.ts.map +0 -1
  33. package/dist/commands/conversation.js +0 -458
  34. package/dist/commands/conversation.js.map +0 -1
  35. package/dist/commands/inbox.d.ts +0 -3
  36. package/dist/commands/inbox.d.ts.map +0 -1
  37. package/dist/commands/inbox.js +0 -127
  38. package/dist/commands/inbox.js.map +0 -1
  39. package/dist/commands/msg.d.ts +0 -3
  40. package/dist/commands/msg.d.ts.map +0 -1
  41. package/dist/commands/msg.js +0 -103
  42. package/dist/commands/msg.js.map +0 -1
  43. package/dist/commands/react.d.ts +0 -3
  44. package/dist/commands/react.d.ts.map +0 -1
  45. package/dist/commands/react.js +0 -102
  46. package/dist/commands/react.js.map +0 -1
  47. package/dist/commands/search.d.ts +0 -3
  48. package/dist/commands/search.d.ts.map +0 -1
  49. package/dist/commands/search.js +0 -160
  50. package/dist/commands/search.js.map +0 -1
  51. package/dist/commands/skill.d.ts +0 -3
  52. package/dist/commands/skill.d.ts.map +0 -1
  53. package/dist/commands/skill.js +0 -119
  54. package/dist/commands/skill.js.map +0 -1
  55. package/dist/commands/thread/create.d.ts +0 -7
  56. package/dist/commands/thread/create.d.ts.map +0 -1
  57. package/dist/commands/thread/create.js +0 -45
  58. package/dist/commands/thread/create.js.map +0 -1
  59. package/dist/commands/thread/helpers.d.ts +0 -10
  60. package/dist/commands/thread/helpers.d.ts.map +0 -1
  61. package/dist/commands/thread/helpers.js +0 -27
  62. package/dist/commands/thread/helpers.js.map +0 -1
  63. package/dist/commands/thread/mutate.d.ts +0 -5
  64. package/dist/commands/thread/mutate.d.ts.map +0 -1
  65. package/dist/commands/thread/mutate.js +0 -21
  66. package/dist/commands/thread/mutate.js.map +0 -1
  67. package/dist/commands/thread/mute.d.ts +0 -8
  68. package/dist/commands/thread/mute.d.ts.map +0 -1
  69. package/dist/commands/thread/mute.js +0 -58
  70. package/dist/commands/thread/mute.js.map +0 -1
  71. package/dist/commands/thread/reply.d.ts +0 -9
  72. package/dist/commands/thread/reply.d.ts.map +0 -1
  73. package/dist/commands/thread/reply.js +0 -68
  74. package/dist/commands/thread/reply.js.map +0 -1
  75. package/dist/commands/thread/view.d.ts +0 -9
  76. package/dist/commands/thread/view.d.ts.map +0 -1
  77. package/dist/commands/thread/view.js +0 -175
  78. package/dist/commands/thread/view.js.map +0 -1
  79. package/dist/commands/thread.d.ts +0 -3
  80. package/dist/commands/thread.d.ts.map +0 -1
  81. package/dist/commands/thread.js +0 -70
  82. package/dist/commands/thread.js.map +0 -1
  83. package/dist/commands/update.d.ts +0 -14
  84. package/dist/commands/update.d.ts.map +0 -1
  85. package/dist/commands/update.js +0 -91
  86. package/dist/commands/update.js.map +0 -1
  87. package/dist/commands/user.d.ts +0 -3
  88. package/dist/commands/user.d.ts.map +0 -1
  89. package/dist/commands/user.js +0 -67
  90. package/dist/commands/user.js.map +0 -1
  91. package/dist/commands/view.d.ts +0 -3
  92. package/dist/commands/view.d.ts.map +0 -1
  93. package/dist/commands/view.js +0 -63
  94. package/dist/commands/view.js.map +0 -1
  95. package/dist/commands/workspace.d.ts +0 -3
  96. package/dist/commands/workspace.d.ts.map +0 -1
  97. package/dist/commands/workspace.js +0 -48
  98. package/dist/commands/workspace.js.map +0 -1
  99. package/dist/index.d.ts +0 -3
  100. package/dist/index.d.ts.map +0 -1
  101. package/dist/index.js +0 -133
  102. package/dist/index.js.map +0 -1
  103. package/dist/lib/api.d.ts +0 -20
  104. package/dist/lib/api.d.ts.map +0 -1
  105. package/dist/lib/api.js +0 -227
  106. package/dist/lib/api.js.map +0 -1
  107. package/dist/lib/auth.d.ts +0 -21
  108. package/dist/lib/auth.d.ts.map +0 -1
  109. package/dist/lib/auth.js +0 -189
  110. package/dist/lib/auth.js.map +0 -1
  111. package/dist/lib/completion.d.ts +0 -31
  112. package/dist/lib/completion.d.ts.map +0 -1
  113. package/dist/lib/completion.js +0 -173
  114. package/dist/lib/completion.js.map +0 -1
  115. package/dist/lib/config.d.ts +0 -13
  116. package/dist/lib/config.d.ts.map +0 -1
  117. package/dist/lib/config.js +0 -26
  118. package/dist/lib/config.js.map +0 -1
  119. package/dist/lib/dates.d.ts +0 -3
  120. package/dist/lib/dates.d.ts.map +0 -1
  121. package/dist/lib/dates.js +0 -44
  122. package/dist/lib/dates.js.map +0 -1
  123. package/dist/lib/input.d.ts +0 -3
  124. package/dist/lib/input.d.ts.map +0 -1
  125. package/dist/lib/input.js +0 -52
  126. package/dist/lib/input.js.map +0 -1
  127. package/dist/lib/markdown.d.ts +0 -2
  128. package/dist/lib/markdown.d.ts.map +0 -1
  129. package/dist/lib/markdown.js +0 -16
  130. package/dist/lib/markdown.js.map +0 -1
  131. package/dist/lib/oauth-server.d.ts +0 -13
  132. package/dist/lib/oauth-server.d.ts.map +0 -1
  133. package/dist/lib/oauth-server.js +0 -824
  134. package/dist/lib/oauth-server.js.map +0 -1
  135. package/dist/lib/oauth.d.ts +0 -31
  136. package/dist/lib/oauth.d.ts.map +0 -1
  137. package/dist/lib/oauth.js +0 -140
  138. package/dist/lib/oauth.js.map +0 -1
  139. package/dist/lib/options.d.ts +0 -17
  140. package/dist/lib/options.d.ts.map +0 -1
  141. package/dist/lib/options.js +0 -2
  142. package/dist/lib/options.js.map +0 -1
  143. package/dist/lib/output.d.ts +0 -25
  144. package/dist/lib/output.d.ts.map +0 -1
  145. package/dist/lib/output.js +0 -128
  146. package/dist/lib/output.js.map +0 -1
  147. package/dist/lib/permissions.d.ts +0 -4
  148. package/dist/lib/permissions.d.ts.map +0 -1
  149. package/dist/lib/permissions.js +0 -35
  150. package/dist/lib/permissions.js.map +0 -1
  151. package/dist/lib/pkce.d.ts +0 -16
  152. package/dist/lib/pkce.d.ts.map +0 -1
  153. package/dist/lib/pkce.js +0 -35
  154. package/dist/lib/pkce.js.map +0 -1
  155. package/dist/lib/progress.d.ts +0 -29
  156. package/dist/lib/progress.d.ts.map +0 -1
  157. package/dist/lib/progress.js +0 -101
  158. package/dist/lib/progress.js.map +0 -1
  159. package/dist/lib/public-channels.d.ts +0 -5
  160. package/dist/lib/public-channels.d.ts.map +0 -1
  161. package/dist/lib/public-channels.js +0 -35
  162. package/dist/lib/public-channels.js.map +0 -1
  163. package/dist/lib/refs.d.ts +0 -37
  164. package/dist/lib/refs.d.ts.map +0 -1
  165. package/dist/lib/refs.js +0 -219
  166. package/dist/lib/refs.js.map +0 -1
  167. package/dist/lib/search-api.d.ts +0 -25
  168. package/dist/lib/search-api.d.ts.map +0 -1
  169. package/dist/lib/search-api.js +0 -85
  170. package/dist/lib/search-api.js.map +0 -1
  171. package/dist/lib/secure-store.d.ts +0 -11
  172. package/dist/lib/secure-store.d.ts.map +0 -1
  173. package/dist/lib/secure-store.js +0 -57
  174. package/dist/lib/secure-store.js.map +0 -1
  175. package/dist/lib/skills/content.d.ts +0 -5
  176. package/dist/lib/skills/content.d.ts.map +0 -1
  177. package/dist/lib/skills/content.js +0 -286
  178. package/dist/lib/skills/content.js.map +0 -1
  179. package/dist/lib/skills/create-installer.d.ts +0 -9
  180. package/dist/lib/skills/create-installer.d.ts.map +0 -1
  181. package/dist/lib/skills/create-installer.js +0 -60
  182. package/dist/lib/skills/create-installer.js.map +0 -1
  183. package/dist/lib/skills/index.d.ts +0 -7
  184. package/dist/lib/skills/index.d.ts.map +0 -1
  185. package/dist/lib/skills/index.js +0 -54
  186. package/dist/lib/skills/index.js.map +0 -1
  187. package/dist/lib/skills/types.d.ts +0 -30
  188. package/dist/lib/skills/types.d.ts.map +0 -1
  189. package/dist/lib/skills/types.js +0 -2
  190. package/dist/lib/skills/types.js.map +0 -1
  191. package/dist/lib/skills/update-installed.d.ts +0 -9
  192. package/dist/lib/skills/update-installed.d.ts.map +0 -1
  193. package/dist/lib/skills/update-installed.js +0 -20
  194. package/dist/lib/skills/update-installed.js.map +0 -1
  195. package/dist/lib/spinner.d.ts +0 -24
  196. package/dist/lib/spinner.d.ts.map +0 -1
  197. package/dist/lib/spinner.js +0 -126
  198. package/dist/lib/spinner.js.map +0 -1
  199. package/dist/postinstall.d.ts +0 -2
  200. package/dist/postinstall.d.ts.map +0 -1
  201. package/dist/postinstall.js +0 -3
  202. package/dist/postinstall.js.map +0 -1
package/dist/lib/api.js DELETED
@@ -1,227 +0,0 @@
1
- import { TwistApi } from '@doist/twist-sdk';
2
- import { getApiToken } from './auth.js';
3
- import { getConfig, updateConfig } from './config.js';
4
- import { ensureWriteAllowed, isMutatingMethod } from './permissions.js';
5
- import { getProgressTracker } from './progress.js';
6
- import { withSpinner } from './spinner.js';
7
- // Mapping of API method paths to user-friendly spinner messages
8
- const API_SPINNER_MESSAGES = {
9
- // User operations
10
- 'users.getSessionUser': { text: 'Checking authentication...', color: 'blue' },
11
- 'users.update': { text: 'Updating user...', color: 'yellow' },
12
- // Workspace operations
13
- 'workspaces.getWorkspaces': { text: 'Loading workspaces...', color: 'blue' },
14
- 'workspaceUsers.getWorkspaceUsers': { text: 'Loading workspace users...', color: 'blue' },
15
- 'workspaceUsers.getUserById': { text: 'Loading user details...', color: 'blue' },
16
- // Thread operations
17
- 'threads.getThread': { text: 'Loading thread...', color: 'blue' },
18
- 'threads.getUnread': { text: 'Loading unread threads...', color: 'blue' },
19
- 'threads.createThread': { text: 'Creating thread...', color: 'green' },
20
- 'threads.muteThread': { text: 'Muting thread...', color: 'yellow' },
21
- 'threads.unmuteThread': { text: 'Unmuting thread...', color: 'yellow' },
22
- // Comment operations
23
- 'comments.getComment': { text: 'Loading comment...', color: 'blue' },
24
- 'comments.getComments': { text: 'Loading comments...', color: 'blue' },
25
- 'comments.createComment': { text: 'Creating comment...', color: 'green' },
26
- 'comments.updateComment': { text: 'Updating comment...', color: 'yellow' },
27
- 'comments.deleteComment': { text: 'Deleting comment...', color: 'yellow' },
28
- // Channel operations
29
- 'channels.getChannel': { text: 'Loading channel...', color: 'blue' },
30
- 'channels.getChannels': { text: 'Loading channels...', color: 'blue' },
31
- 'channels.createChannel': { text: 'Creating channel...', color: 'green' },
32
- 'channels.updateChannel': { text: 'Updating channel...', color: 'yellow' },
33
- 'channels.deleteChannel': { text: 'Deleting channel...', color: 'yellow' },
34
- // Conversation operations
35
- 'conversations.getConversations': { text: 'Loading conversations...', color: 'blue' },
36
- 'conversations.getConversation': { text: 'Loading conversation...', color: 'blue' },
37
- 'conversations.getUnread': { text: 'Loading unread conversations...', color: 'blue' },
38
- 'conversations.createConversation': { text: 'Creating conversation...', color: 'green' },
39
- 'conversations.archiveConversation': { text: 'Archiving conversation...', color: 'yellow' },
40
- 'conversations.unarchiveConversation': {
41
- text: 'Unarchiving conversation...',
42
- color: 'yellow',
43
- },
44
- 'conversations.muteConversation': { text: 'Muting conversation...', color: 'yellow' },
45
- 'conversations.unmuteConversation': {
46
- text: 'Unmuting conversation...',
47
- color: 'yellow',
48
- },
49
- // Conversation message operations
50
- 'conversationMessages.getMessage': { text: 'Loading message...', color: 'blue' },
51
- 'conversationMessages.getMessages': { text: 'Loading messages...', color: 'blue' },
52
- 'conversationMessages.createMessage': { text: 'Sending message...', color: 'green' },
53
- 'conversationMessages.updateMessage': { text: 'Updating message...', color: 'yellow' },
54
- 'conversationMessages.deleteMessage': { text: 'Deleting message...', color: 'yellow' },
55
- // Inbox operations
56
- 'inbox.getInbox': { text: 'Loading inbox...', color: 'blue' },
57
- 'inbox.archiveThread': { text: 'Archiving thread...', color: 'yellow' },
58
- // Batch operations
59
- batch: { text: 'Processing batch operations...', color: 'blue' },
60
- };
61
- function createSpinnerWrappedApi(api) {
62
- return new Proxy(api, {
63
- get(target, property, receiver) {
64
- const value = Reflect.get(target, property, receiver);
65
- // If this is a nested object (like workspaces, users, etc.), wrap it too
66
- if (value &&
67
- typeof value === 'object' &&
68
- !Array.isArray(value) &&
69
- typeof property === 'string') {
70
- return createNestedSpinnerProxy(value, property);
71
- }
72
- return value;
73
- },
74
- });
75
- }
76
- function createNestedSpinnerProxy(obj, basePath) {
77
- return new Proxy(obj, {
78
- get(target, property, receiver) {
79
- const originalMethod = Reflect.get(target, property, receiver);
80
- if (typeof originalMethod !== 'function' || typeof property !== 'string') {
81
- return originalMethod;
82
- }
83
- const fullPath = `${basePath}.${property}`;
84
- const spinnerConfig = API_SPINNER_MESSAGES[fullPath];
85
- const shouldCheckPermissions = isMutatingMethod(fullPath);
86
- if (!spinnerConfig && !shouldCheckPermissions) {
87
- return originalMethod;
88
- }
89
- return (...args) => {
90
- const progressTracker = getProgressTracker();
91
- // Extract cursor from args for paginated methods
92
- let cursor = null;
93
- if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {
94
- const options = args[0];
95
- if ('cursor' in options && typeof options.cursor === 'string') {
96
- cursor = options.cursor;
97
- }
98
- }
99
- // Emit progress event for API call start
100
- if (progressTracker.isEnabled()) {
101
- progressTracker.emitApiCall(property, cursor);
102
- }
103
- // For mutating methods, check permissions before calling the API
104
- if (shouldCheckPermissions) {
105
- return ensureWriteAllowed().then(() => {
106
- const result = originalMethod.apply(target, args);
107
- return wrapResult(result, progressTracker, spinnerConfig);
108
- });
109
- }
110
- const result = originalMethod.apply(target, args);
111
- return wrapResult(result, progressTracker, spinnerConfig);
112
- };
113
- },
114
- });
115
- }
116
- function wrapResult(result, progressTracker, spinnerConfig) {
117
- // If the method returns a non-thenable (e.g. batch request builder), return as-is
118
- if (!result || typeof result.then !== 'function') {
119
- return result;
120
- }
121
- const wrappedPromise = result
122
- .then((response) => {
123
- if (progressTracker.isEnabled()) {
124
- analyzeAndEmitApiResponse(progressTracker, response);
125
- }
126
- return response;
127
- })
128
- .catch((error) => {
129
- if (progressTracker.isEnabled()) {
130
- progressTracker.emitError(error.name || 'API_ERROR', error.message);
131
- }
132
- throw error;
133
- });
134
- if (spinnerConfig) {
135
- return withSpinner(spinnerConfig, () => wrappedPromise);
136
- }
137
- return wrappedPromise;
138
- }
139
- function analyzeAndEmitApiResponse(progressTracker, response) {
140
- // For paginated responses, extract metadata
141
- if (response && typeof response === 'object' && response !== null) {
142
- const resp = response;
143
- // Check if it's a paginated response with results array
144
- if ('results' in resp && Array.isArray(resp.results)) {
145
- progressTracker.emitApiResponse(resp.results.length, Boolean(resp.nextCursor), typeof resp.nextCursor === 'string' ? resp.nextCursor : null);
146
- return;
147
- }
148
- // For array responses (legacy or simple lists)
149
- if (Array.isArray(response)) {
150
- progressTracker.emitApiResponse(response.length, false, null);
151
- return;
152
- }
153
- }
154
- // For other responses, emit minimal info
155
- progressTracker.emitApiResponse(1, false, null);
156
- }
157
- let apiClient = null;
158
- export async function getTwistClient() {
159
- if (!apiClient) {
160
- const token = await getApiToken();
161
- const rawApi = new TwistApi(token);
162
- apiClient = createSpinnerWrappedApi(rawApi);
163
- }
164
- return apiClient;
165
- }
166
- let workspaceCache = null;
167
- let sessionUserCache = null;
168
- export async function fetchWorkspaces() {
169
- if (workspaceCache) {
170
- return workspaceCache;
171
- }
172
- const client = await getTwistClient();
173
- workspaceCache = await client.workspaces.getWorkspaces();
174
- return workspaceCache;
175
- }
176
- export function clearWorkspaceCache() {
177
- workspaceCache = null;
178
- }
179
- export async function getCurrentWorkspaceId(flagValue) {
180
- if (flagValue) {
181
- return flagValue;
182
- }
183
- const config = await getConfig();
184
- if (config.currentWorkspace) {
185
- return config.currentWorkspace;
186
- }
187
- const sessionUser = await getSessionUser();
188
- if (sessionUser.defaultWorkspace) {
189
- await updateConfig({ currentWorkspace: sessionUser.defaultWorkspace });
190
- return sessionUser.defaultWorkspace;
191
- }
192
- const workspaces = await fetchWorkspaces();
193
- if (workspaces.length === 0) {
194
- throw new Error('No workspaces found for this user');
195
- }
196
- const defaultWorkspace = workspaces[0];
197
- await updateConfig({ currentWorkspace: defaultWorkspace.id });
198
- return defaultWorkspace.id;
199
- }
200
- export async function getSessionUser() {
201
- if (sessionUserCache) {
202
- return sessionUserCache;
203
- }
204
- const client = await getTwistClient();
205
- sessionUserCache = await client.users.getSessionUser();
206
- return sessionUserCache;
207
- }
208
- export async function getWorkspaceUsers(workspaceId) {
209
- const client = await getTwistClient();
210
- return client.workspaceUsers.getWorkspaceUsers({ workspaceId });
211
- }
212
- export function clearUserCache() {
213
- sessionUserCache = null;
214
- }
215
- /**
216
- * Validates a batch response and returns the data, throwing on errors.
217
- * Also handles the case where the SDK fails to validate the response schema
218
- * (e.g. when the batch API wraps entities in a key like `{comment: {...}}`).
219
- * In that case, the raw transformed data is returned — check for expected fields.
220
- */
221
- export function assertBatchData(response, label) {
222
- if (response.code >= 400 || response.data == null) {
223
- throw new Error(`Failed to fetch ${label}.`);
224
- }
225
- return response.data;
226
- }
227
- //# sourceMappingURL=api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { type AuthMode } from './config.js';
2
- export declare const TOKEN_ENV_VAR = "TWIST_API_TOKEN";
3
- export type TokenStorageLocation = 'secure-store' | 'config-file';
4
- export interface TokenStorageResult {
5
- storage: TokenStorageLocation;
6
- warning?: string;
7
- }
8
- export interface SaveApiTokenOptions {
9
- authMode?: AuthMode;
10
- authScope?: string;
11
- }
12
- export interface AuthMetadata {
13
- authMode: AuthMode;
14
- authScope?: string;
15
- source: 'env' | 'config';
16
- }
17
- export declare function getApiToken(): Promise<string>;
18
- export declare function getAuthMetadata(): Promise<AuthMetadata>;
19
- export declare function saveApiToken(token: string, options?: SaveApiTokenOptions): Promise<TokenStorageResult>;
20
- export declare function clearApiToken(): Promise<TokenStorageResult>;
21
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAoD,MAAM,aAAa,CAAA;AAO7F,eAAO,MAAM,aAAa,oBAAoB,CAAA;AAC9C,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,aAAa,CAAA;AAEjE,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,oBAAoB,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAA;CAC3B;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAmEnD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAY7D;AAED,wBAAsB,YAAY,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAwC7B;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAyBjE"}
package/dist/lib/auth.js DELETED
@@ -1,189 +0,0 @@
1
- import { unlink } from 'node:fs/promises';
2
- import { getConfig, getConfigPath, setConfig } from './config.js';
3
- import { createSecureStore, SECURE_STORE_DESCRIPTION, SecureStoreUnavailableError, } from './secure-store.js';
4
- export const TOKEN_ENV_VAR = 'TWIST_API_TOKEN';
5
- export async function getApiToken() {
6
- // Priority 1: Environment variable
7
- const envToken = process.env[TOKEN_ENV_VAR];
8
- if (envToken) {
9
- return envToken;
10
- }
11
- const config = await getConfig();
12
- const configToken = getConfigToken(config);
13
- const secureStore = createSecureStore();
14
- if (configToken) {
15
- try {
16
- await secureStore.setSecret(configToken);
17
- const cleanupWarning = await cleanupAuthFallbackState(config, 'Token was migrated to secure storage,');
18
- if (cleanupWarning) {
19
- warn(cleanupWarning);
20
- }
21
- }
22
- catch (error) {
23
- if (error instanceof SecureStoreUnavailableError) {
24
- warnSecureStoreFallback('using plaintext token from');
25
- }
26
- else {
27
- throw error;
28
- }
29
- }
30
- return configToken;
31
- }
32
- if (config.pendingSecureStoreClear) {
33
- try {
34
- await secureStore.deleteSecret();
35
- const cleanupWarning = await cleanupAuthFallbackState(config, 'Secure-store token was removed,');
36
- if (cleanupWarning) {
37
- warn(cleanupWarning);
38
- }
39
- }
40
- catch (error) {
41
- if (!(error instanceof SecureStoreUnavailableError)) {
42
- throw error;
43
- }
44
- }
45
- throw new Error(`No API token found. Set ${TOKEN_ENV_VAR} or run \`tw auth login\` or \`tw auth token <token>\`.`);
46
- }
47
- try {
48
- const storedToken = await secureStore.getSecret();
49
- if (storedToken?.trim()) {
50
- return storedToken;
51
- }
52
- }
53
- catch (error) {
54
- if (!(error instanceof SecureStoreUnavailableError)) {
55
- throw error;
56
- }
57
- }
58
- throw new Error(`No API token found. Set ${TOKEN_ENV_VAR} or run \`tw auth login\` or \`tw auth token <token>\`.`);
59
- }
60
- export async function getAuthMetadata() {
61
- const envToken = process.env[TOKEN_ENV_VAR];
62
- if (envToken) {
63
- return { authMode: 'unknown', source: 'env' };
64
- }
65
- const config = await getConfig();
66
- return {
67
- authMode: config.authMode ?? 'unknown',
68
- authScope: config.authScope,
69
- source: 'config',
70
- };
71
- }
72
- export async function saveApiToken(token, options = {}) {
73
- // Validate token (non-empty, reasonable length)
74
- if (!token || token.trim().length < 10) {
75
- throw new Error('Invalid token: Token must be at least 10 characters');
76
- }
77
- const trimmedToken = token.trim();
78
- const secureStore = createSecureStore();
79
- try {
80
- await secureStore.setSecret(trimmedToken);
81
- const existingConfig = await getConfig();
82
- const warning = await cleanupAuthFallbackState(existingConfig, 'Token was stored securely,');
83
- // Persist auth metadata to config — needed for ensureWriteAllowed() enforcement
84
- try {
85
- await saveAuthMetadata(options);
86
- }
87
- catch {
88
- if (options.authMode && options.authMode !== 'unknown') {
89
- warn(`Could not persist auth mode '${options.authMode}' to config. CLI-side write protection may not work in future sessions.`);
90
- }
91
- }
92
- return warning ? { storage: 'secure-store', warning } : { storage: 'secure-store' };
93
- }
94
- catch (error) {
95
- if (!(error instanceof SecureStoreUnavailableError)) {
96
- throw error;
97
- }
98
- }
99
- const config = await getConfig();
100
- config.token = trimmedToken;
101
- delete config.pendingSecureStoreClear;
102
- config.authMode = options.authMode ?? 'unknown';
103
- config.authScope = options.authScope;
104
- await writeConfig(config);
105
- return {
106
- storage: 'config-file',
107
- warning: buildFallbackWarning('token saved as plaintext in'),
108
- };
109
- }
110
- export async function clearApiToken() {
111
- const config = await getConfig();
112
- const secureStore = createSecureStore();
113
- // Clear auth metadata from the in-memory config object so all subsequent
114
- // writes (cleanupAuthFallbackState, withPendingSecureStoreClear) persist
115
- // the removal atomically alongside other state changes.
116
- delete config.authMode;
117
- delete config.authScope;
118
- try {
119
- await secureStore.deleteSecret();
120
- const warning = await cleanupAuthFallbackState(config, 'Secure-store token was removed,');
121
- return warning ? { storage: 'secure-store', warning } : { storage: 'secure-store' };
122
- }
123
- catch (error) {
124
- if (!(error instanceof SecureStoreUnavailableError)) {
125
- throw error;
126
- }
127
- }
128
- await writeConfig(withPendingSecureStoreClear(config));
129
- return {
130
- storage: 'config-file',
131
- warning: buildFallbackWarning('local auth state cleared in'),
132
- };
133
- }
134
- async function saveAuthMetadata(options) {
135
- const config = await getConfig();
136
- config.authMode = options.authMode ?? 'unknown';
137
- config.authScope = options.authScope;
138
- await setConfig(config);
139
- }
140
- async function writeConfig(config) {
141
- if (Object.keys(config).length === 0) {
142
- try {
143
- await unlink(getConfigPath());
144
- }
145
- catch (error) {
146
- if (!isMissingFileError(error)) {
147
- throw error;
148
- }
149
- }
150
- return;
151
- }
152
- await setConfig(config);
153
- }
154
- async function cleanupAuthFallbackState(config, warningPrefix) {
155
- try {
156
- await writeConfig(withoutAuthFallbackState(config));
157
- return undefined;
158
- }
159
- catch (error) {
160
- return buildConfigCleanupWarning(warningPrefix, error);
161
- }
162
- }
163
- function getConfigToken(config) {
164
- return typeof config.token === 'string' && config.token.trim() ? config.token.trim() : null;
165
- }
166
- function withoutAuthFallbackState(config) {
167
- const { token: _token, pendingSecureStoreClear: _pending, ...rest } = config;
168
- return rest;
169
- }
170
- function withPendingSecureStoreClear(config) {
171
- return { ...withoutAuthFallbackState(config), pendingSecureStoreClear: true };
172
- }
173
- function buildFallbackWarning(action) {
174
- return `${SECURE_STORE_DESCRIPTION} unavailable; ${action} ${getConfigPath()}`;
175
- }
176
- function buildConfigCleanupWarning(prefix, error) {
177
- const detail = error instanceof Error && error.message ? ` (${error.message})` : '';
178
- return `${prefix} but could not remove legacy plaintext token from ${getConfigPath()}${detail}`;
179
- }
180
- function isMissingFileError(error) {
181
- return error instanceof Error && 'code' in error && error.code === 'ENOENT';
182
- }
183
- function warn(message) {
184
- console.error(`Warning: ${message}`);
185
- }
186
- function warnSecureStoreFallback(action) {
187
- warn(buildFallbackWarning(action));
188
- }
189
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import type { Command, Option } from 'commander';
2
- /**
3
- * Set argChoices on an option without enabling Commander's built-in
4
- * validation. The choices are surfaced for shell completions but the
5
- * option still accepts any value at parse time.
6
- */
7
- export declare function withUnvalidatedChoices(opt: Option, values: string[]): Option;
8
- export declare function withCaseInsensitiveChoices(opt: Option, values: string[]): Option;
9
- /**
10
- * Parse COMP_LINE into words, stripping the binary name and the
11
- * 'completion-server' token that tabtab injects.
12
- *
13
- * FIXME: This splits on whitespace and does not handle quoted arguments.
14
- * This is acceptable for command/flag traversal. It can be improved once
15
- * tabtab exposes shell-provided tokenized words.
16
- */
17
- export declare function parseCompLine(compLine: string): string[];
18
- export interface CompletionItem {
19
- name: string;
20
- description?: string;
21
- }
22
- /**
23
- * Get completions for the current command line context.
24
- *
25
- * @param program - The root Commander program with all commands registered
26
- * @param words - The words on the command line (excluding the binary name)
27
- * @param current - The current word being typed (may be empty string)
28
- * @returns Array of completion items
29
- */
30
- export declare function getCompletions(program: Command, words: string[], current: string): CompletionItem[];
31
- //# sourceMappingURL=completion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/lib/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEhD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAG5E;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAWhF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAIxD;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAoBD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,GAChB,cAAc,EAAE,CAsGlB"}