@doist/twist-cli 2.22.1 → 2.23.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 (208) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/commands/auth/helpers.d.ts +3 -0
  3. package/dist/commands/auth/helpers.d.ts.map +1 -0
  4. package/dist/commands/auth/helpers.js +12 -0
  5. package/dist/commands/auth/helpers.js.map +1 -0
  6. package/dist/commands/{auth.d.ts → auth/index.d.ts} +1 -1
  7. package/dist/commands/auth/index.d.ts.map +1 -0
  8. package/dist/commands/auth/index.js +20 -0
  9. package/dist/commands/auth/index.js.map +1 -0
  10. package/dist/commands/auth/login.d.ts +4 -0
  11. package/dist/commands/auth/login.d.ts.map +1 -0
  12. package/dist/commands/auth/login.js +62 -0
  13. package/dist/commands/auth/login.js.map +1 -0
  14. package/dist/commands/auth/logout.d.ts +2 -0
  15. package/dist/commands/auth/logout.d.ts.map +1 -0
  16. package/dist/commands/auth/logout.js +9 -0
  17. package/dist/commands/auth/logout.js.map +1 -0
  18. package/dist/commands/auth/status.d.ts +4 -0
  19. package/dist/commands/auth/status.d.ts.map +1 -0
  20. package/dist/commands/auth/status.js +33 -0
  21. package/dist/commands/auth/status.js.map +1 -0
  22. package/dist/commands/auth/token.d.ts +2 -0
  23. package/dist/commands/auth/token.d.ts.map +1 -0
  24. package/dist/commands/auth/token.js +38 -0
  25. package/dist/commands/auth/token.js.map +1 -0
  26. package/dist/commands/away/clear.d.ts +3 -0
  27. package/dist/commands/away/clear.d.ts.map +1 -0
  28. package/dist/commands/away/clear.js +22 -0
  29. package/dist/commands/away/clear.js.map +1 -0
  30. package/dist/commands/away/helpers.d.ts +7 -0
  31. package/dist/commands/away/helpers.d.ts.map +1 -0
  32. package/dist/commands/away/helpers.js +37 -0
  33. package/dist/commands/away/helpers.js.map +1 -0
  34. package/dist/commands/{away.d.ts → away/index.d.ts} +1 -1
  35. package/dist/commands/away/index.d.ts.map +1 -0
  36. package/dist/commands/away/index.js +26 -0
  37. package/dist/commands/away/index.js.map +1 -0
  38. package/dist/commands/away/set.d.ts +7 -0
  39. package/dist/commands/away/set.d.ts.map +1 -0
  40. package/dist/commands/away/set.js +31 -0
  41. package/dist/commands/away/set.js.map +1 -0
  42. package/dist/commands/away/status.d.ts +3 -0
  43. package/dist/commands/away/status.d.ts.map +1 -0
  44. package/dist/commands/away/status.js +20 -0
  45. package/dist/commands/away/status.js.map +1 -0
  46. package/dist/commands/comment/delete.d.ts +5 -0
  47. package/dist/commands/comment/delete.d.ts.map +1 -0
  48. package/dist/commands/comment/delete.js +18 -0
  49. package/dist/commands/comment/delete.js.map +1 -0
  50. package/dist/commands/{comment.d.ts → comment/index.d.ts} +1 -1
  51. package/dist/commands/comment/index.d.ts.map +1 -0
  52. package/dist/commands/comment/index.js +35 -0
  53. package/dist/commands/comment/index.js.map +1 -0
  54. package/dist/commands/comment/update.d.ts +5 -0
  55. package/dist/commands/comment/update.d.ts.map +1 -0
  56. package/dist/commands/comment/update.js +35 -0
  57. package/dist/commands/comment/update.js.map +1 -0
  58. package/dist/commands/comment/view.d.ts +3 -0
  59. package/dist/commands/comment/view.d.ts.map +1 -0
  60. package/dist/commands/comment/view.js +23 -0
  61. package/dist/commands/comment/view.js.map +1 -0
  62. package/dist/commands/completion/helpers.d.ts +14 -0
  63. package/dist/commands/completion/helpers.d.ts.map +1 -0
  64. package/dist/commands/completion/helpers.js +37 -0
  65. package/dist/commands/completion/helpers.js.map +1 -0
  66. package/dist/commands/{completion.d.ts → completion/index.d.ts} +1 -1
  67. package/dist/commands/completion/index.d.ts.map +1 -0
  68. package/dist/commands/completion/index.js +22 -0
  69. package/dist/commands/completion/index.js.map +1 -0
  70. package/dist/commands/completion/install.d.ts +2 -0
  71. package/dist/commands/completion/install.d.ts.map +1 -0
  72. package/dist/commands/completion/install.js +20 -0
  73. package/dist/commands/completion/install.js.map +1 -0
  74. package/dist/commands/completion/server.d.ts +3 -0
  75. package/dist/commands/completion/server.d.ts.map +1 -0
  76. package/dist/commands/completion/server.js +35 -0
  77. package/dist/commands/completion/server.js.map +1 -0
  78. package/dist/commands/completion/uninstall.d.ts +2 -0
  79. package/dist/commands/completion/uninstall.d.ts.map +1 -0
  80. package/dist/commands/completion/uninstall.js +19 -0
  81. package/dist/commands/completion/uninstall.js.map +1 -0
  82. package/dist/commands/conversation/done.d.ts +3 -0
  83. package/dist/commands/conversation/done.d.ts.map +1 -0
  84. package/dist/commands/conversation/done.js +18 -0
  85. package/dist/commands/conversation/done.js.map +1 -0
  86. package/dist/commands/conversation/helpers.d.ts +35 -0
  87. package/dist/commands/conversation/helpers.d.ts.map +1 -0
  88. package/dist/commands/conversation/helpers.js +144 -0
  89. package/dist/commands/conversation/helpers.js.map +1 -0
  90. package/dist/commands/{conversation.d.ts → conversation/index.d.ts} +1 -1
  91. package/dist/commands/conversation/index.d.ts.map +1 -0
  92. package/dist/commands/conversation/index.js +77 -0
  93. package/dist/commands/conversation/index.js.map +1 -0
  94. package/dist/commands/conversation/mute.d.ts +3 -0
  95. package/dist/commands/conversation/mute.d.ts.map +1 -0
  96. package/dist/commands/conversation/mute.js +25 -0
  97. package/dist/commands/conversation/mute.js.map +1 -0
  98. package/dist/commands/conversation/reply.d.ts +3 -0
  99. package/dist/commands/conversation/reply.d.ts.map +1 -0
  100. package/dist/commands/conversation/reply.js +35 -0
  101. package/dist/commands/conversation/reply.js.map +1 -0
  102. package/dist/commands/conversation/unmute.d.ts +3 -0
  103. package/dist/commands/conversation/unmute.d.ts.map +1 -0
  104. package/dist/commands/conversation/unmute.js +23 -0
  105. package/dist/commands/conversation/unmute.js.map +1 -0
  106. package/dist/commands/conversation/unread.d.ts +3 -0
  107. package/dist/commands/conversation/unread.d.ts.map +1 -0
  108. package/dist/commands/conversation/unread.js +63 -0
  109. package/dist/commands/conversation/unread.js.map +1 -0
  110. package/dist/commands/conversation/view.d.ts +3 -0
  111. package/dist/commands/conversation/view.d.ts.map +1 -0
  112. package/dist/commands/conversation/view.js +65 -0
  113. package/dist/commands/conversation/view.js.map +1 -0
  114. package/dist/commands/conversation/with.d.ts +3 -0
  115. package/dist/commands/conversation/with.d.ts.map +1 -0
  116. package/dist/commands/conversation/with.js +49 -0
  117. package/dist/commands/conversation/with.js.map +1 -0
  118. package/dist/commands/msg/delete.d.ts +5 -0
  119. package/dist/commands/msg/delete.d.ts.map +1 -0
  120. package/dist/commands/msg/delete.js +18 -0
  121. package/dist/commands/msg/delete.js.map +1 -0
  122. package/dist/commands/{msg.d.ts → msg/index.d.ts} +1 -1
  123. package/dist/commands/msg/index.d.ts.map +1 -0
  124. package/dist/commands/msg/index.js +34 -0
  125. package/dist/commands/msg/index.js.map +1 -0
  126. package/dist/commands/msg/update.d.ts +5 -0
  127. package/dist/commands/msg/update.d.ts.map +1 -0
  128. package/dist/commands/msg/update.js +35 -0
  129. package/dist/commands/msg/update.js.map +1 -0
  130. package/dist/commands/msg/view.d.ts +3 -0
  131. package/dist/commands/msg/view.d.ts.map +1 -0
  132. package/dist/commands/msg/view.js +28 -0
  133. package/dist/commands/msg/view.js.map +1 -0
  134. package/dist/commands/{skill.d.ts → skill/index.d.ts} +1 -1
  135. package/dist/commands/skill/index.d.ts.map +1 -0
  136. package/dist/commands/skill/index.js +29 -0
  137. package/dist/commands/skill/index.js.map +1 -0
  138. package/dist/commands/skill/install.d.ts +3 -0
  139. package/dist/commands/skill/install.d.ts.map +1 -0
  140. package/dist/commands/skill/install.js +21 -0
  141. package/dist/commands/skill/install.js.map +1 -0
  142. package/dist/commands/skill/list.d.ts +6 -0
  143. package/dist/commands/skill/list.d.ts.map +1 -0
  144. package/dist/commands/skill/list.js +22 -0
  145. package/dist/commands/skill/list.js.map +1 -0
  146. package/dist/commands/skill/uninstall.d.ts +3 -0
  147. package/dist/commands/skill/uninstall.d.ts.map +1 -0
  148. package/dist/commands/skill/uninstall.js +19 -0
  149. package/dist/commands/skill/uninstall.js.map +1 -0
  150. package/dist/commands/skill/update.d.ts +3 -0
  151. package/dist/commands/skill/update.d.ts.map +1 -0
  152. package/dist/commands/skill/update.js +42 -0
  153. package/dist/commands/skill/update.js.map +1 -0
  154. package/dist/commands/thread/delete.d.ts +7 -0
  155. package/dist/commands/thread/delete.d.ts.map +1 -0
  156. package/dist/commands/thread/delete.js +38 -0
  157. package/dist/commands/thread/delete.js.map +1 -0
  158. package/dist/commands/{thread.d.ts → thread/index.d.ts} +1 -1
  159. package/dist/commands/thread/index.d.ts.map +1 -0
  160. package/dist/commands/{thread.js → thread/index.js} +15 -7
  161. package/dist/commands/thread/index.js.map +1 -0
  162. package/dist/commands/update/action.d.ts +1 -0
  163. package/dist/commands/update/action.d.ts.map +1 -1
  164. package/dist/commands/update/action.js +16 -0
  165. package/dist/commands/update/action.js.map +1 -1
  166. package/dist/commands/update/index.d.ts.map +1 -1
  167. package/dist/commands/update/index.js +1 -2
  168. package/dist/commands/update/index.js.map +1 -1
  169. package/dist/commands/view.d.ts.map +1 -1
  170. package/dist/commands/view.js +4 -4
  171. package/dist/commands/view.js.map +1 -1
  172. package/dist/index.js +8 -8
  173. package/dist/index.js.map +1 -1
  174. package/dist/lib/api.d.ts.map +1 -1
  175. package/dist/lib/api.js +1 -0
  176. package/dist/lib/api.js.map +1 -1
  177. package/dist/lib/skills/content.d.ts +1 -1
  178. package/dist/lib/skills/content.d.ts.map +1 -1
  179. package/dist/lib/skills/content.js +4 -1
  180. package/dist/lib/skills/content.js.map +1 -1
  181. package/package.json +2 -2
  182. package/dist/commands/auth.d.ts.map +0 -1
  183. package/dist/commands/auth.js +0 -154
  184. package/dist/commands/auth.js.map +0 -1
  185. package/dist/commands/away.d.ts.map +0 -1
  186. package/dist/commands/away.js +0 -120
  187. package/dist/commands/away.js.map +0 -1
  188. package/dist/commands/comment.d.ts.map +0 -1
  189. package/dist/commands/comment.js +0 -99
  190. package/dist/commands/comment.js.map +0 -1
  191. package/dist/commands/completion.d.ts.map +0 -1
  192. package/dist/commands/completion.js +0 -121
  193. package/dist/commands/completion.js.map +0 -1
  194. package/dist/commands/conversation.d.ts.map +0 -1
  195. package/dist/commands/conversation.js +0 -458
  196. package/dist/commands/conversation.js.map +0 -1
  197. package/dist/commands/msg.d.ts.map +0 -1
  198. package/dist/commands/msg.js +0 -103
  199. package/dist/commands/msg.js.map +0 -1
  200. package/dist/commands/skill.d.ts.map +0 -1
  201. package/dist/commands/skill.js +0 -119
  202. package/dist/commands/skill.js.map +0 -1
  203. package/dist/commands/thread.d.ts.map +0 -1
  204. package/dist/commands/thread.js.map +0 -1
  205. package/dist/commands/update/channel.d.ts +0 -2
  206. package/dist/commands/update/channel.d.ts.map +0 -1
  207. package/dist/commands/update/channel.js +0 -13
  208. package/dist/commands/update/channel.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [2.23.0](https://github.com/Doist/twist-cli/compare/v2.22.1...v2.23.0) (2026-04-03)
2
+
3
+ ### Features
4
+
5
+ - add thread deletion support ([#133](https://github.com/Doist/twist-cli/issues/133)) ([eed878c](https://github.com/Doist/twist-cli/commit/eed878c1c04e244ebf614ea3fe7b31c844beb8d2))
6
+
1
7
  ## [2.22.1](https://github.com/Doist/twist-cli/compare/v2.22.0...v2.22.1) (2026-04-02)
2
8
 
3
9
  ### Bug Fixes
@@ -0,0 +1,3 @@
1
+ import type { TokenStorageResult } from '../../lib/auth.js';
2
+ export declare function logTokenStorageResult(result: TokenStorageResult, secureStoreMessage: string): void;
3
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,kBAAkB,EAC1B,kBAAkB,EAAE,MAAM,GAC3B,IAAI,CAUN"}
@@ -0,0 +1,12 @@
1
+ import chalk from 'chalk';
2
+ export function logTokenStorageResult(result, secureStoreMessage) {
3
+ if (result.storage === 'secure-store') {
4
+ console.log(chalk.dim(secureStoreMessage));
5
+ if (result.warning) {
6
+ console.error(chalk.yellow('Warning:'), result.warning);
7
+ }
8
+ return;
9
+ }
10
+ console.error(chalk.yellow('Warning:'), result.warning);
11
+ }
12
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/auth/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,UAAU,qBAAqB,CACjC,MAA0B,EAC1B,kBAA0B;IAE1B,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAC1C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC3D,CAAC;QACD,OAAM;IACV,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3D,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { Command } from 'commander';
2
2
  export declare function registerAuthCommand(program: Command): void;
3
- //# sourceMappingURL=auth.d.ts.map
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB1D"}
@@ -0,0 +1,20 @@
1
+ import { loginWithOAuth } from './login.js';
2
+ import { logout } from './logout.js';
3
+ import { showStatus } from './status.js';
4
+ import { loginWithToken } from './token.js';
5
+ export function registerAuthCommand(program) {
6
+ const auth = program.command('auth').description('Manage authentication');
7
+ auth.command('login')
8
+ .description('Authenticate using OAuth (opens browser)')
9
+ .option('--read-only', 'Authenticate with read-only scope (no write operations)')
10
+ .action(loginWithOAuth);
11
+ auth.command('token [token]')
12
+ .description('Save API token for CLI authentication')
13
+ .action(loginWithToken);
14
+ auth.command('status')
15
+ .description('Show current authentication status')
16
+ .option('--json', 'Output as JSON')
17
+ .action(showStatus);
18
+ auth.command('logout').description('Remove saved authentication token').action(logout);
19
+ }
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAA;IAEzE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,aAAa,EAAE,yDAAyD,CAAC;SAChF,MAAM,CAAC,cAAc,CAAC,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,cAAc,CAAC,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC1F,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function loginWithOAuth(options: {
2
+ readOnly?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAaA,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DnF"}
@@ -0,0 +1,62 @@
1
+ import chalk from 'chalk';
2
+ import { saveApiToken } from '../../lib/auth.js';
3
+ import { startCallbackServer } from '../../lib/oauth-server.js';
4
+ import { buildAuthorizationUrl, exchangeCodeForToken, READ_ONLY_SCOPES, READ_WRITE_SCOPES, registerDynamicClient, } from '../../lib/oauth.js';
5
+ import { generateCodeChallenge, generateCodeVerifier, generateState } from '../../lib/pkce.js';
6
+ import { logTokenStorageResult } from './helpers.js';
7
+ export async function loginWithOAuth(options) {
8
+ const modeLabel = options.readOnly ? 'read-only' : 'read-write';
9
+ console.log(chalk.blue(`Starting OAuth authentication (${modeLabel})...`));
10
+ try {
11
+ // Register dynamic client
12
+ console.log(chalk.dim('Registering OAuth client...'));
13
+ const client = await registerDynamicClient();
14
+ // Generate PKCE parameters
15
+ const codeVerifier = generateCodeVerifier();
16
+ const codeChallenge = generateCodeChallenge(codeVerifier);
17
+ const state = generateState();
18
+ // Start callback server
19
+ console.log(chalk.dim('Starting local callback server...'));
20
+ let cleanup;
21
+ try {
22
+ const open = (await import('open')).default;
23
+ // Open browser in background after a delay
24
+ setTimeout(async () => {
25
+ try {
26
+ const authUrl = buildAuthorizationUrl(client.client_id, codeChallenge, state, {
27
+ readOnly: options.readOnly,
28
+ });
29
+ console.log(chalk.dim('Opening browser for authorization...'));
30
+ console.log(chalk.dim(`If the browser doesn't open, visit: ${authUrl}`));
31
+ await open(authUrl);
32
+ }
33
+ catch {
34
+ // Browser opening failure is not critical - user can use the URL manually
35
+ }
36
+ }, 1000);
37
+ // Wait for callback - this gives us both code and cleanup
38
+ const result = await startCallbackServer(state);
39
+ cleanup = result.cleanup;
40
+ console.log(chalk.dim('Exchanging authorization code for token...'));
41
+ const accessToken = await exchangeCodeForToken(result.code, codeVerifier, client);
42
+ const saveResult = await saveApiToken(accessToken, {
43
+ authMode: options.readOnly ? 'read-only' : 'read-write',
44
+ authScope: options.readOnly ? READ_ONLY_SCOPES : READ_WRITE_SCOPES,
45
+ });
46
+ console.log(chalk.green('✓'), 'OAuth authentication successful!');
47
+ logTokenStorageResult(saveResult, 'Token stored securely in the system credential manager');
48
+ }
49
+ finally {
50
+ // Always cleanup the server
51
+ if (cleanup) {
52
+ cleanup();
53
+ }
54
+ }
55
+ }
56
+ catch (error) {
57
+ console.log(chalk.red('✗'), 'OAuth authentication failed');
58
+ console.log(chalk.dim(error instanceof Error ? error.message : 'Unknown error'));
59
+ console.log(chalk.dim('You can try manual authentication with `tw auth token <token>`'));
60
+ }
61
+ }
62
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logout(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAI5C"}
@@ -0,0 +1,9 @@
1
+ import chalk from 'chalk';
2
+ import { clearApiToken } from '../../lib/auth.js';
3
+ import { logTokenStorageResult } from './helpers.js';
4
+ export async function logout() {
5
+ const clearResult = await clearApiToken();
6
+ console.log(chalk.green('✓'), 'Logged out');
7
+ logTokenStorageResult(clearResult, 'Stored token removed from the system credential manager');
8
+ }
9
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,MAAM,CAAC,KAAK,UAAU,MAAM;IACxB,MAAM,WAAW,GAAG,MAAM,aAAa,EAAE,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAA;IAC3C,qBAAqB,CAAC,WAAW,EAAE,yDAAyD,CAAC,CAAA;AACjG,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function showStatus(options: {
2
+ json?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC3E"}
@@ -0,0 +1,33 @@
1
+ import chalk from 'chalk';
2
+ import { getSessionUser } from '../../lib/api.js';
3
+ import { getAuthMetadata } from '../../lib/auth.js';
4
+ export async function showStatus(options) {
5
+ try {
6
+ // Try to get session user to verify the token works
7
+ const user = await getSessionUser();
8
+ if (options.json) {
9
+ console.log(JSON.stringify({ id: user.id, email: user.email, name: user.name }, null, 2));
10
+ return;
11
+ }
12
+ const metadata = await getAuthMetadata();
13
+ const modeLabel = metadata.authMode === 'read-only'
14
+ ? `read-only (scope: ${metadata.authScope ?? 'unknown'})`
15
+ : metadata.authMode === 'read-write'
16
+ ? 'read-write'
17
+ : 'unknown (manual token or env var; assuming write access)';
18
+ console.log(chalk.green('✓'), 'Authenticated');
19
+ console.log(` Email: ${user.email}`);
20
+ console.log(` Name: ${user.name}`);
21
+ console.log(` Mode: ${modeLabel}`);
22
+ }
23
+ catch {
24
+ if (options.json) {
25
+ console.log(JSON.stringify({ error: 'Not authenticated' }, null, 2));
26
+ process.exitCode = 1;
27
+ return;
28
+ }
29
+ console.log(chalk.yellow('Not authenticated'));
30
+ console.log(chalk.dim('Run `tw auth login` for OAuth or `tw auth token <token>` for manual authentication'));
31
+ }
32
+ }
33
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA2B;IACxD,IAAI,CAAC;QACD,oDAAoD;QACpD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAA;QACnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACP,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAC/E,CAAA;YACD,OAAM;QACV,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAA;QACxC,MAAM,SAAS,GACX,QAAQ,CAAC,QAAQ,KAAK,WAAW;YAC7B,CAAC,CAAC,qBAAqB,QAAQ,CAAC,SAAS,IAAI,SAAS,GAAG;YACzD,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,YAAY;gBAClC,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,0DAA0D,CAAA;QAEtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACpC,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,EAAE,CAAC,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACL,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACpE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACV,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CACL,oFAAoF,CACvF,CACJ,CAAA;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function loginWithToken(token?: string): Promise<void>;
2
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/token.ts"],"names":[],"mappings":"AA2BA,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYlE"}
@@ -0,0 +1,38 @@
1
+ import { createInterface } from 'node:readline';
2
+ import chalk from 'chalk';
3
+ import { saveApiToken } from '../../lib/auth.js';
4
+ import { logTokenStorageResult } from './helpers.js';
5
+ function promptHiddenInput(prompt) {
6
+ return new Promise((resolve) => {
7
+ const rl = createInterface({
8
+ input: process.stdin,
9
+ output: process.stdout,
10
+ });
11
+ // biome-ignore lint/suspicious/noExplicitAny: accessing private readline property
12
+ const origWrite = rl._writeToOutput;
13
+ rl._writeToOutput = (str) => {
14
+ if (str.includes(prompt)) {
15
+ origWrite.call(rl, prompt);
16
+ }
17
+ };
18
+ rl.question(prompt, (answer) => {
19
+ rl.close();
20
+ process.stdout.write('\n');
21
+ resolve(answer);
22
+ });
23
+ });
24
+ }
25
+ export async function loginWithToken(token) {
26
+ if (!token) {
27
+ token = await promptHiddenInput('API token: ');
28
+ if (!token.trim()) {
29
+ console.error(chalk.red('Error:'), 'No token provided');
30
+ process.exitCode = 1;
31
+ return;
32
+ }
33
+ }
34
+ const saveResult = await saveApiToken(token.trim(), { authMode: 'unknown' });
35
+ console.log(chalk.green('✓'), 'API token saved successfully!');
36
+ logTokenStorageResult(saveResult, 'Token stored securely in the system credential manager');
37
+ }
38
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/commands/auth/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,SAAS,iBAAiB,CAAC,MAAc;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,EAAE,GAAG,eAAe,CAAC;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAA;QACF,kFAAkF;QAClF,MAAM,SAAS,GAAI,EAAU,CAAC,cAAc,CAE3C;QAAC,EAAU,CAAC,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE;YAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAC9B,CAAC;QACL,CAAC,CAAA;QACD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1B,OAAO,CAAC,MAAM,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAc;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,KAAK,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAA;YACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACV,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,+BAA+B,CAAC,CAAA;IAC9D,qBAAqB,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAA;AAC/F,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MutationOptions, ViewOptions } from '../../lib/options.js';
2
+ export declare function clearAway(options: MutationOptions & ViewOptions): Promise<void>;
3
+ //# sourceMappingURL=clear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/commands/away/clear.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIxE,wBAAsB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrF"}
@@ -0,0 +1,22 @@
1
+ import { getTwistClient } from '../../lib/api.js';
2
+ import { formatJson } from '../../lib/output.js';
3
+ import { handleAwayError } from './helpers.js';
4
+ export async function clearAway(options) {
5
+ if (options.dryRun) {
6
+ console.log('Dry run: would clear away status');
7
+ return;
8
+ }
9
+ const client = await getTwistClient();
10
+ try {
11
+ const user = await client.users.update({ awayMode: '' });
12
+ if (options.json) {
13
+ console.log(formatJson(user, 'user', options.full));
14
+ return;
15
+ }
16
+ console.log('Away status cleared.');
17
+ }
18
+ catch (error) {
19
+ handleAwayError(error);
20
+ }
21
+ }
22
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/commands/away/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAsC;IAClE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;QAC/C,OAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAW,EAAE,CAAC,CAAA;QAEjE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YACnD,OAAM;QACV,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,eAAe,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function formatLocalDate(d: Date): string;
2
+ export declare function todayStr(): string;
3
+ export declare function tomorrowStr(): string;
4
+ export declare function formatAwayType(type: string): string;
5
+ export declare function isInsufficientScope(error: unknown): boolean;
6
+ export declare function handleAwayError(error: unknown): never;
7
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/away/helpers.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE/C;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAIpC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAYrD"}
@@ -0,0 +1,37 @@
1
+ import { TwistRequestError } from '@doist/twist-sdk';
2
+ import chalk from 'chalk';
3
+ export function formatLocalDate(d) {
4
+ return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
5
+ }
6
+ export function todayStr() {
7
+ return formatLocalDate(new Date());
8
+ }
9
+ export function tomorrowStr() {
10
+ const d = new Date();
11
+ d.setDate(d.getDate() + 1);
12
+ return formatLocalDate(d);
13
+ }
14
+ export function formatAwayType(type) {
15
+ const labels = {
16
+ vacation: 'Vacation',
17
+ parental: 'Parental leave',
18
+ sickleave: 'Sick leave',
19
+ other: 'Away',
20
+ };
21
+ return labels[type] ?? type;
22
+ }
23
+ export function isInsufficientScope(error) {
24
+ if (!(error instanceof TwistRequestError))
25
+ return false;
26
+ const data = error.responseData;
27
+ return (error.httpStatusCode === 403 && data?.error_string?.includes('Insufficient scope') === true);
28
+ }
29
+ export function handleAwayError(error) {
30
+ if (isInsufficientScope(error)) {
31
+ console.error(chalk.red('Permission denied.'), 'The away status feature requires additional permissions.');
32
+ console.error(`Run ${chalk.cyan('tw auth login')} to re-authenticate with the required scopes.`);
33
+ process.exit(1);
34
+ }
35
+ throw error;
36
+ }
37
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/away/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,UAAU,eAAe,CAAC,CAAO;IACnC,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AACpH,CAAC;AAED,MAAM,UAAU,QAAQ;IACpB,OAAO,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAA;IACpB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;IAC1B,OAAO,eAAe,CAAC,CAAC,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACvC,MAAM,MAAM,GAA2B;QACnC,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,gBAAgB;QAC1B,SAAS,EAAE,YAAY;QACvB,KAAK,EAAE,MAAM;KAChB,CAAA;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAC9C,IAAI,CAAC,CAAC,KAAK,YAAY,iBAAiB,CAAC;QAAE,OAAO,KAAK,CAAA;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,YAAqD,CAAA;IACxE,OAAO,CACH,KAAK,CAAC,cAAc,KAAK,GAAG,IAAI,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAC9F,CAAA;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC1C,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAC/B,0DAA0D,CAC7D,CAAA;QACD,OAAO,CAAC,KAAK,CACT,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,+CAA+C,CACpF,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,MAAM,KAAK,CAAA;AACf,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { Command } from 'commander';
2
2
  export declare function registerAwayCommand(program: Command): void;
3
- //# sourceMappingURL=away.d.ts.map
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/away/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6B1D"}
@@ -0,0 +1,26 @@
1
+ import { clearAway } from './clear.js';
2
+ import { setAway } from './set.js';
3
+ import { showAwayStatus } from './status.js';
4
+ export function registerAwayCommand(program) {
5
+ const away = program
6
+ .command('away')
7
+ .description('Manage away status')
8
+ .option('--json', 'Output as JSON')
9
+ .option('--full', 'Include all fields in JSON output')
10
+ .action((options) => showAwayStatus(options));
11
+ away.command('set <type> [until]')
12
+ .usage('<type> [until] [options]')
13
+ .description('Set away status (type: vacation, parental, sickleave, other)')
14
+ .option('--from <date>', 'Start date (YYYY-MM-DD, defaults to today)')
15
+ .option('--dry-run', 'Show what would happen without executing')
16
+ .option('--json', 'Output as JSON')
17
+ .option('--full', 'Include all fields in JSON output')
18
+ .action((type, until, options) => setAway(type, until, options));
19
+ away.command('clear')
20
+ .description('Clear away status')
21
+ .option('--dry-run', 'Show what would happen without executing')
22
+ .option('--json', 'Output as JSON')
23
+ .option('--full', 'Include all fields in JSON output')
24
+ .action((options) => clearAway(options));
25
+ }
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/away/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO;SACf,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,CAAC,OAAoB,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IAE9D,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;SAC7B,KAAK,CAAC,0BAA0B,CAAC;SACjC,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,WAAW,EAAE,0CAA0C,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CACH,CACI,IAAY,EACZ,KAAyB,EACzB,OAA0D,EAC5D,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CACrC,CAAA;IAEL,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,WAAW,EAAE,0CAA0C,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,CAAC,OAAsC,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;AAC/E,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { MutationOptions, ViewOptions } from '../../lib/options.js';
2
+ type SetAwayOptions = ViewOptions & MutationOptions & {
3
+ from?: string;
4
+ };
5
+ export declare function setAway(type: string, until: string | undefined, options: SetAwayOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/commands/away/set.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIxE,KAAK,cAAc,GAAG,WAAW,GAAG,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvE,wBAAsB,OAAO,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
@@ -0,0 +1,31 @@
1
+ import { AWAY_MODE_TYPES } from '@doist/twist-sdk';
2
+ import { getTwistClient } from '../../lib/api.js';
3
+ import { formatJson } from '../../lib/output.js';
4
+ import { formatAwayType, handleAwayError, todayStr, tomorrowStr } from './helpers.js';
5
+ export async function setAway(type, until, options) {
6
+ if (!AWAY_MODE_TYPES.includes(type)) {
7
+ console.error(`Invalid away type: ${type}. Use: ${AWAY_MODE_TYPES.join(', ')}`);
8
+ process.exit(1);
9
+ }
10
+ const dateFrom = options.from ?? todayStr();
11
+ const dateTo = until ?? tomorrowStr();
12
+ if (options.dryRun) {
13
+ console.log(`Dry run: would set away to ${formatAwayType(type)} from ${dateFrom} until ${dateTo}`);
14
+ return;
15
+ }
16
+ const client = await getTwistClient();
17
+ try {
18
+ const user = await client.users.update({
19
+ awayMode: { type: type, dateFrom, dateTo },
20
+ });
21
+ if (options.json) {
22
+ console.log(formatJson(user, 'user', options.full));
23
+ return;
24
+ }
25
+ console.log(`Set away: ${formatAwayType(type)} from ${dateFrom} until ${dateTo}`);
26
+ }
27
+ catch (error) {
28
+ handleAwayError(error);
29
+ }
30
+ }
31
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/commands/away/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAIrF,MAAM,CAAC,KAAK,UAAU,OAAO,CACzB,IAAY,EACZ,KAAyB,EACzB,OAAuB;IAEvB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAoB,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,UAAU,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAA;IAC3C,MAAM,MAAM,GAAG,KAAK,IAAI,WAAW,EAAE,CAAA;IAErC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CACP,8BAA8B,cAAc,CAAC,IAAI,CAAC,SAAS,QAAQ,UAAU,MAAM,EAAE,CACxF,CAAA;QACD,OAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE;SAC7D,CAAC,CAAA;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YACnD,OAAM;QACV,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,cAAc,CAAC,IAAI,CAAC,SAAS,QAAQ,UAAU,MAAM,EAAE,CAAC,CAAA;IACrF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,eAAe,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ViewOptions } from '../../lib/options.js';
2
+ export declare function showAwayStatus(options: ViewOptions): Promise<void>;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/away/status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIvD,wBAAsB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBxE"}
@@ -0,0 +1,20 @@
1
+ import chalk from 'chalk';
2
+ import { getSessionUser } from '../../lib/api.js';
3
+ import { colors, formatJson } from '../../lib/output.js';
4
+ import { formatAwayType } from './helpers.js';
5
+ export async function showAwayStatus(options) {
6
+ const user = await getSessionUser();
7
+ if (options.json) {
8
+ console.log(formatJson(user, 'user', options.full));
9
+ return;
10
+ }
11
+ if (!user.awayMode) {
12
+ console.log('Not away.');
13
+ return;
14
+ }
15
+ const { type, dateFrom, dateTo } = user.awayMode;
16
+ console.log(chalk.bold(formatAwayType(type)));
17
+ console.log(`From: ${colors.timestamp(dateFrom)}`);
18
+ console.log(`Until: ${colors.timestamp(dateTo)}`);
19
+ }
20
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/away/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAoB;IACrD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAA;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QACnD,OAAM;IACV,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACxB,OAAM;IACV,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACnD,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AACrD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { MutationOptions } from '../../lib/options.js';
2
+ type DeleteOptions = MutationOptions;
3
+ export declare function deleteComment(ref: string, options: DeleteOptions): Promise<void>;
4
+ export {};
5
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/comment/delete.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,KAAK,aAAa,GAAG,eAAe,CAAA;AAEpC,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBtF"}
@@ -0,0 +1,18 @@
1
+ import { getTwistClient } from '../../lib/api.js';
2
+ import { formatJson } from '../../lib/output.js';
3
+ import { resolveCommentId } from '../../lib/refs.js';
4
+ export async function deleteComment(ref, options) {
5
+ const commentId = resolveCommentId(ref);
6
+ if (options.dryRun) {
7
+ console.log(`Dry run: would delete comment ${commentId}`);
8
+ return;
9
+ }
10
+ const client = await getTwistClient();
11
+ await client.comments.deleteComment(commentId);
12
+ if (options.json) {
13
+ console.log(formatJson({ id: commentId, deleted: true }));
14
+ return;
15
+ }
16
+ console.log(`Comment ${commentId} deleted.`);
17
+ }
18
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/comment/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIpD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,OAAsB;IACnE,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IAEvC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAA;QACzD,OAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;IAE9C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACzD,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,WAAW,CAAC,CAAA;AAChD,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { Command } from 'commander';
2
2
  export declare function registerCommentCommand(program: Command): void;
3
- //# sourceMappingURL=comment.d.ts.map
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/comment/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiC7D"}
@@ -0,0 +1,35 @@
1
+ import { deleteComment } from './delete.js';
2
+ import { updateComment } from './update.js';
3
+ import { viewComment } from './view.js';
4
+ export function registerCommentCommand(program) {
5
+ const comment = program
6
+ .command('comment')
7
+ .description('Thread comment operations (view, update, delete)');
8
+ comment
9
+ .command('view [comment-ref]', { isDefault: true })
10
+ .description('View a single thread comment')
11
+ .option('--raw', 'Show raw markdown instead of rendered')
12
+ .option('--json', 'Output as JSON')
13
+ .option('--full', 'Include all fields in JSON output')
14
+ .action((ref, options) => {
15
+ if (!ref) {
16
+ comment.help();
17
+ return;
18
+ }
19
+ return viewComment(ref, options);
20
+ });
21
+ comment
22
+ .command('update <comment-ref> [content]')
23
+ .description('Update a thread comment')
24
+ .option('--dry-run', 'Show what would be updated without updating')
25
+ .option('--json', 'Output updated comment as JSON')
26
+ .option('--full', 'Include all fields in JSON output')
27
+ .action(updateComment);
28
+ comment
29
+ .command('delete <comment-ref>')
30
+ .description('Delete a thread comment')
31
+ .option('--dry-run', 'Show what would happen without executing')
32
+ .option('--json', 'Output result as JSON')
33
+ .action(deleteComment);
34
+ }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/comment/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,MAAM,OAAO,GAAG,OAAO;SAClB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,kDAAkD,CAAC,CAAA;IAEpE,OAAO;SACF,OAAO,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SAClD,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,OAAO,EAAE,uCAAuC,CAAC;SACxD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACrB,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,OAAM;QACV,CAAC;QACD,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEN,OAAO;SACF,OAAO,CAAC,gCAAgC,CAAC;SACzC,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC;SAClE,MAAM,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SAClD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,aAAa,CAAC,CAAA;IAE1B,OAAO;SACF,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,WAAW,EAAE,0CAA0C,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,aAAa,CAAC,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { MutationOptions } from '../../lib/options.js';
2
+ type UpdateOptions = MutationOptions;
3
+ export declare function updateComment(ref: string, content: string | undefined, options: UpdateOptions): Promise<void>;
4
+ export {};
5
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/comment/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,KAAK,aAAa,GAAG,eAAe,CAAA;AAEpC,wBAAsB,aAAa,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,aAAa,GACvB,OAAO,CAAC,IAAI,CAAC,CAkCf"}