@doist/todoist-cli 1.1.2

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 (170) hide show
  1. package/README.md +76 -0
  2. package/dist/commands/activity.d.ts +3 -0
  3. package/dist/commands/activity.d.ts.map +1 -0
  4. package/dist/commands/activity.js +193 -0
  5. package/dist/commands/activity.js.map +1 -0
  6. package/dist/commands/add.d.ts +3 -0
  7. package/dist/commands/add.d.ts.map +1 -0
  8. package/dist/commands/add.js +28 -0
  9. package/dist/commands/add.js.map +1 -0
  10. package/dist/commands/auth.d.ts +3 -0
  11. package/dist/commands/auth.d.ts.map +1 -0
  12. package/dist/commands/auth.js +62 -0
  13. package/dist/commands/auth.js.map +1 -0
  14. package/dist/commands/comment.d.ts +3 -0
  15. package/dist/commands/comment.d.ts.map +1 -0
  16. package/dist/commands/comment.js +251 -0
  17. package/dist/commands/comment.js.map +1 -0
  18. package/dist/commands/completed.d.ts +3 -0
  19. package/dist/commands/completed.d.ts.map +1 -0
  20. package/dist/commands/completed.js +74 -0
  21. package/dist/commands/completed.js.map +1 -0
  22. package/dist/commands/filter.d.ts +3 -0
  23. package/dist/commands/filter.d.ts.map +1 -0
  24. package/dist/commands/filter.js +249 -0
  25. package/dist/commands/filter.js.map +1 -0
  26. package/dist/commands/inbox.d.ts +3 -0
  27. package/dist/commands/inbox.d.ts.map +1 -0
  28. package/dist/commands/inbox.js +23 -0
  29. package/dist/commands/inbox.js.map +1 -0
  30. package/dist/commands/label.d.ts +3 -0
  31. package/dist/commands/label.d.ts.map +1 -0
  32. package/dist/commands/label.js +196 -0
  33. package/dist/commands/label.js.map +1 -0
  34. package/dist/commands/notification.d.ts +3 -0
  35. package/dist/commands/notification.d.ts.map +1 -0
  36. package/dist/commands/notification.js +274 -0
  37. package/dist/commands/notification.js.map +1 -0
  38. package/dist/commands/project.d.ts +3 -0
  39. package/dist/commands/project.d.ts.map +1 -0
  40. package/dist/commands/project.js +364 -0
  41. package/dist/commands/project.js.map +1 -0
  42. package/dist/commands/reminder.d.ts +3 -0
  43. package/dist/commands/reminder.d.ts.map +1 -0
  44. package/dist/commands/reminder.js +225 -0
  45. package/dist/commands/reminder.js.map +1 -0
  46. package/dist/commands/section.d.ts +3 -0
  47. package/dist/commands/section.d.ts.map +1 -0
  48. package/dist/commands/section.js +138 -0
  49. package/dist/commands/section.js.map +1 -0
  50. package/dist/commands/settings.d.ts +3 -0
  51. package/dist/commands/settings.d.ts.map +1 -0
  52. package/dist/commands/settings.js +250 -0
  53. package/dist/commands/settings.js.map +1 -0
  54. package/dist/commands/stats.d.ts +3 -0
  55. package/dist/commands/stats.d.ts.map +1 -0
  56. package/dist/commands/stats.js +151 -0
  57. package/dist/commands/stats.js.map +1 -0
  58. package/dist/commands/task.d.ts +3 -0
  59. package/dist/commands/task.d.ts.map +1 -0
  60. package/dist/commands/task.js +363 -0
  61. package/dist/commands/task.js.map +1 -0
  62. package/dist/commands/today.d.ts +3 -0
  63. package/dist/commands/today.d.ts.map +1 -0
  64. package/dist/commands/today.js +97 -0
  65. package/dist/commands/today.js.map +1 -0
  66. package/dist/commands/upcoming.d.ts +3 -0
  67. package/dist/commands/upcoming.d.ts.map +1 -0
  68. package/dist/commands/upcoming.js +121 -0
  69. package/dist/commands/upcoming.js.map +1 -0
  70. package/dist/commands/workspace.d.ts +3 -0
  71. package/dist/commands/workspace.d.ts.map +1 -0
  72. package/dist/commands/workspace.js +289 -0
  73. package/dist/commands/workspace.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +53 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/lib/api/core.d.ts +40 -0
  79. package/dist/lib/api/core.d.ts.map +1 -0
  80. package/dist/lib/api/core.js +142 -0
  81. package/dist/lib/api/core.js.map +1 -0
  82. package/dist/lib/api/filters.d.ts +26 -0
  83. package/dist/lib/api/filters.d.ts.map +1 -0
  84. package/dist/lib/api/filters.js +86 -0
  85. package/dist/lib/api/filters.js.map +1 -0
  86. package/dist/lib/api/notifications.d.ts +33 -0
  87. package/dist/lib/api/notifications.d.ts.map +1 -0
  88. package/dist/lib/api/notifications.js +112 -0
  89. package/dist/lib/api/notifications.js.map +1 -0
  90. package/dist/lib/api/reminders.d.ts +30 -0
  91. package/dist/lib/api/reminders.d.ts.map +1 -0
  92. package/dist/lib/api/reminders.js +79 -0
  93. package/dist/lib/api/reminders.js.map +1 -0
  94. package/dist/lib/api/stats.d.ts +41 -0
  95. package/dist/lib/api/stats.d.ts.map +1 -0
  96. package/dist/lib/api/stats.js +79 -0
  97. package/dist/lib/api/stats.js.map +1 -0
  98. package/dist/lib/api/uploads.d.ts +10 -0
  99. package/dist/lib/api/uploads.d.ts.map +1 -0
  100. package/dist/lib/api/uploads.js +31 -0
  101. package/dist/lib/api/uploads.js.map +1 -0
  102. package/dist/lib/api/user-settings.d.ts +33 -0
  103. package/dist/lib/api/user-settings.d.ts.map +1 -0
  104. package/dist/lib/api/user-settings.js +90 -0
  105. package/dist/lib/api/user-settings.js.map +1 -0
  106. package/dist/lib/api/workspaces.d.ts +23 -0
  107. package/dist/lib/api/workspaces.d.ts.map +1 -0
  108. package/dist/lib/api/workspaces.js +67 -0
  109. package/dist/lib/api/workspaces.js.map +1 -0
  110. package/dist/lib/auth.d.ts +4 -0
  111. package/dist/lib/auth.d.ts.map +1 -0
  112. package/dist/lib/auth.js +66 -0
  113. package/dist/lib/auth.js.map +1 -0
  114. package/dist/lib/browser.d.ts +2 -0
  115. package/dist/lib/browser.d.ts.map +1 -0
  116. package/dist/lib/browser.js +6 -0
  117. package/dist/lib/browser.js.map +1 -0
  118. package/dist/lib/collaborators.d.ts +29 -0
  119. package/dist/lib/collaborators.d.ts.map +1 -0
  120. package/dist/lib/collaborators.js +184 -0
  121. package/dist/lib/collaborators.js.map +1 -0
  122. package/dist/lib/dates.d.ts +3 -0
  123. package/dist/lib/dates.d.ts.map +1 -0
  124. package/dist/lib/dates.js +20 -0
  125. package/dist/lib/dates.js.map +1 -0
  126. package/dist/lib/duration.d.ts +14 -0
  127. package/dist/lib/duration.d.ts.map +1 -0
  128. package/dist/lib/duration.js +58 -0
  129. package/dist/lib/duration.js.map +1 -0
  130. package/dist/lib/markdown.d.ts +2 -0
  131. package/dist/lib/markdown.d.ts.map +1 -0
  132. package/dist/lib/markdown.js +14 -0
  133. package/dist/lib/markdown.js.map +1 -0
  134. package/dist/lib/oauth-server.d.ts +6 -0
  135. package/dist/lib/oauth-server.d.ts.map +1 -0
  136. package/dist/lib/oauth-server.js +141 -0
  137. package/dist/lib/oauth-server.js.map +1 -0
  138. package/dist/lib/oauth.d.ts +3 -0
  139. package/dist/lib/oauth.d.ts.map +1 -0
  140. package/dist/lib/oauth.js +38 -0
  141. package/dist/lib/oauth.js.map +1 -0
  142. package/dist/lib/output.d.ts +36 -0
  143. package/dist/lib/output.d.ts.map +1 -0
  144. package/dist/lib/output.js +293 -0
  145. package/dist/lib/output.js.map +1 -0
  146. package/dist/lib/pagination.d.ts +23 -0
  147. package/dist/lib/pagination.d.ts.map +1 -0
  148. package/dist/lib/pagination.js +26 -0
  149. package/dist/lib/pagination.js.map +1 -0
  150. package/dist/lib/pkce.d.ts +4 -0
  151. package/dist/lib/pkce.d.ts.map +1 -0
  152. package/dist/lib/pkce.js +19 -0
  153. package/dist/lib/pkce.js.map +1 -0
  154. package/dist/lib/refs.d.ts +13 -0
  155. package/dist/lib/refs.d.ts.map +1 -0
  156. package/dist/lib/refs.js +117 -0
  157. package/dist/lib/refs.js.map +1 -0
  158. package/dist/lib/spinner.d.ts +20 -0
  159. package/dist/lib/spinner.d.ts.map +1 -0
  160. package/dist/lib/spinner.js +70 -0
  161. package/dist/lib/spinner.js.map +1 -0
  162. package/dist/lib/task-list.d.ts +28 -0
  163. package/dist/lib/task-list.d.ts.map +1 -0
  164. package/dist/lib/task-list.js +234 -0
  165. package/dist/lib/task-list.js.map +1 -0
  166. package/dist/lib/urls.d.ts +8 -0
  167. package/dist/lib/urls.d.ts.map +1 -0
  168. package/dist/lib/urls.js +26 -0
  169. package/dist/lib/urls.js.map +1 -0
  170. package/package.json +66 -0
@@ -0,0 +1,289 @@
1
+ import chalk from 'chalk';
2
+ import { getApi, isWorkspaceProject } from '../lib/api/core.js';
3
+ import { fetchWorkspaceFolders, fetchWorkspaces } from '../lib/api/workspaces.js';
4
+ import { formatUserShortName } from '../lib/collaborators.js';
5
+ import { LIMITS, paginate } from '../lib/pagination.js';
6
+ import { resolveWorkspaceRef } from '../lib/refs.js';
7
+ async function listWorkspaces(options) {
8
+ const workspaces = await fetchWorkspaces();
9
+ if (workspaces.length === 0) {
10
+ return;
11
+ }
12
+ if (options.json) {
13
+ const output = options.full
14
+ ? workspaces
15
+ : workspaces.map((w) => ({
16
+ id: w.id,
17
+ name: w.name,
18
+ plan: w.plan,
19
+ role: w.role,
20
+ memberCount: w.currentMemberCount,
21
+ projectCount: w.currentActiveProjects,
22
+ }));
23
+ console.log(JSON.stringify({ results: output, nextCursor: null }, null, 2));
24
+ return;
25
+ }
26
+ if (options.ndjson) {
27
+ for (const w of workspaces) {
28
+ const output = options.full
29
+ ? w
30
+ : {
31
+ id: w.id,
32
+ name: w.name,
33
+ plan: w.plan,
34
+ role: w.role,
35
+ memberCount: w.currentMemberCount,
36
+ projectCount: w.currentActiveProjects,
37
+ };
38
+ console.log(JSON.stringify(output));
39
+ }
40
+ return;
41
+ }
42
+ for (const w of workspaces) {
43
+ const id = chalk.dim(`id:${w.id}`);
44
+ const name = w.name;
45
+ const plan = chalk.cyan(`(${w.plan})`);
46
+ const stats = chalk.dim(`${w.currentMemberCount} members, ${w.currentActiveProjects} projects`);
47
+ const role = chalk.yellow(`[${w.role}]`);
48
+ console.log(`${id} ${name} ${plan} - ${stats} ${role}`);
49
+ }
50
+ }
51
+ async function viewWorkspace(ref) {
52
+ const workspace = await resolveWorkspaceRef(ref);
53
+ console.log(chalk.bold(workspace.name));
54
+ console.log('');
55
+ console.log(`ID: ${workspace.id}`);
56
+ console.log(`Plan: ${workspace.plan}`);
57
+ console.log(`Role: ${workspace.role}`);
58
+ if (workspace.domainName) {
59
+ console.log(`Domain: ${workspace.domainName}`);
60
+ }
61
+ const { adminCount, memberCount, guestCount } = workspace.memberCountByType;
62
+ console.log(`Members: ${workspace.currentMemberCount} (${adminCount} admins, ${memberCount} members, ${guestCount} guests)`);
63
+ console.log(`Projects: ${workspace.currentActiveProjects} active`);
64
+ }
65
+ async function listWorkspaceProjects(ref, options) {
66
+ const workspace = await resolveWorkspaceRef(ref);
67
+ const api = await getApi();
68
+ const targetLimit = options.all
69
+ ? Number.MAX_SAFE_INTEGER
70
+ : options.limit
71
+ ? parseInt(options.limit, 10)
72
+ : LIMITS.projects;
73
+ const { results: allProjectsRaw } = await paginate((cursor, limit) => api.getProjects({ cursor: cursor ?? undefined, limit }), { limit: Number.MAX_SAFE_INTEGER, startCursor: options.cursor });
74
+ const workspaceProjects = allProjectsRaw.filter((p) => isWorkspaceProject(p) && p.workspaceId === workspace.id);
75
+ const allProjects = workspaceProjects.slice(0, targetLimit);
76
+ const nextCursor = workspaceProjects.length > targetLimit ? 'has-more' : null;
77
+ const folders = await fetchWorkspaceFolders();
78
+ const workspaceFolders = folders.filter((f) => f.workspaceId === workspace.id);
79
+ const folderMap = new Map(workspaceFolders.map((f) => [f.id, f.name]));
80
+ if (options.json) {
81
+ const output = options.full
82
+ ? allProjects
83
+ : allProjects.map((p) => ({
84
+ id: p.id,
85
+ name: p.name,
86
+ folderId: isWorkspaceProject(p) ? p.folderId : null,
87
+ folderName: isWorkspaceProject(p) && p.folderId ? folderMap.get(p.folderId) : null,
88
+ status: isWorkspaceProject(p) ? p.status : null,
89
+ }));
90
+ console.log(JSON.stringify({ results: output, nextCursor }, null, 2));
91
+ return;
92
+ }
93
+ if (options.ndjson) {
94
+ for (const p of allProjects) {
95
+ const output = options.full
96
+ ? p
97
+ : {
98
+ id: p.id,
99
+ name: p.name,
100
+ folderId: isWorkspaceProject(p) ? p.folderId : null,
101
+ folderName: isWorkspaceProject(p) && p.folderId ? folderMap.get(p.folderId) : null,
102
+ status: isWorkspaceProject(p) ? p.status : null,
103
+ };
104
+ console.log(JSON.stringify(output));
105
+ }
106
+ if (nextCursor) {
107
+ console.log(JSON.stringify({ _meta: true, nextCursor }));
108
+ }
109
+ return;
110
+ }
111
+ const projectsByFolder = new Map();
112
+ for (const project of allProjects) {
113
+ const folderId = isWorkspaceProject(project) ? project.folderId : null;
114
+ if (!projectsByFolder.has(folderId)) {
115
+ projectsByFolder.set(folderId, []);
116
+ }
117
+ projectsByFolder.get(folderId)?.push(project);
118
+ }
119
+ const sortedFolderIds = [...projectsByFolder.keys()].sort((a, b) => {
120
+ if (a === null)
121
+ return 1;
122
+ if (b === null)
123
+ return -1;
124
+ const nameA = folderMap.get(a) ?? '';
125
+ const nameB = folderMap.get(b) ?? '';
126
+ return nameA.localeCompare(nameB);
127
+ });
128
+ let isFirst = true;
129
+ for (const folderId of sortedFolderIds) {
130
+ const projects = projectsByFolder.get(folderId);
131
+ if (!projects || projects.length === 0)
132
+ continue;
133
+ const folderName = folderId ? folderMap.get(folderId) : null;
134
+ const hasHeader = folderName || (folderId === null && projectsByFolder.size > 1);
135
+ if (!isFirst && hasHeader) {
136
+ console.log('');
137
+ }
138
+ isFirst = false;
139
+ if (folderName) {
140
+ console.log(chalk.cyan(`${folderName}/`));
141
+ }
142
+ else if (folderId === null && projectsByFolder.size > 1) {
143
+ console.log(chalk.dim('(no folder)'));
144
+ }
145
+ for (const project of projects) {
146
+ const id = chalk.dim(`id:${project.id}`);
147
+ const name = project.name;
148
+ const indent = hasHeader ? ' ' : '';
149
+ console.log(`${indent}${id} ${name}`);
150
+ }
151
+ }
152
+ if (nextCursor) {
153
+ console.log(chalk.dim(`\n... more items exist. Use --all to fetch everything.`));
154
+ }
155
+ }
156
+ async function listWorkspaceUsers(ref, options) {
157
+ const workspace = await resolveWorkspaceRef(ref);
158
+ const api = await getApi();
159
+ const targetLimit = options.all
160
+ ? Number.MAX_SAFE_INTEGER
161
+ : options.limit
162
+ ? parseInt(options.limit, 10)
163
+ : 50;
164
+ let roleFilter = null;
165
+ if (options.role) {
166
+ roleFilter = new Set(options.role
167
+ .toUpperCase()
168
+ .split(',')
169
+ .map((r) => r.trim()));
170
+ }
171
+ const allUsers = [];
172
+ let cursor = options.cursor;
173
+ const workspaceIdNum = parseInt(workspace.id, 10);
174
+ while (allUsers.length < targetLimit) {
175
+ const response = await api.getWorkspaceUsers({
176
+ workspaceId: workspaceIdNum,
177
+ cursor,
178
+ limit: Math.min(targetLimit - allUsers.length, 200),
179
+ });
180
+ for (const user of response.workspaceUsers) {
181
+ if (!roleFilter || roleFilter.has(user.role)) {
182
+ allUsers.push({
183
+ userId: user.userId,
184
+ email: user.userEmail,
185
+ fullName: user.fullName,
186
+ role: user.role,
187
+ });
188
+ }
189
+ }
190
+ if (!response.hasMore || !response.nextCursor)
191
+ break;
192
+ cursor = response.nextCursor;
193
+ }
194
+ const users = allUsers.slice(0, targetLimit);
195
+ const hasMore = allUsers.length > targetLimit || cursor !== undefined;
196
+ if (options.json) {
197
+ const output = options.full
198
+ ? users
199
+ : users.map((u) => ({
200
+ id: u.userId,
201
+ name: u.fullName,
202
+ email: u.email,
203
+ role: u.role,
204
+ }));
205
+ console.log(JSON.stringify({ results: output, nextCursor: hasMore ? cursor : null }, null, 2));
206
+ return;
207
+ }
208
+ if (options.ndjson) {
209
+ for (const u of users) {
210
+ const output = options.full
211
+ ? u
212
+ : {
213
+ id: u.userId,
214
+ name: u.fullName,
215
+ email: u.email,
216
+ role: u.role,
217
+ };
218
+ console.log(JSON.stringify(output));
219
+ }
220
+ if (hasMore) {
221
+ console.log(JSON.stringify({ _meta: true, nextCursor: cursor }));
222
+ }
223
+ return;
224
+ }
225
+ for (const user of users) {
226
+ const id = chalk.dim(`id:${user.userId}`);
227
+ const name = formatUserShortName(user.fullName);
228
+ const email = chalk.dim(`<${user.email}>`);
229
+ const role = chalk.yellow(`[${user.role}]`);
230
+ console.log(`${id} ${name} ${email} ${role}`);
231
+ }
232
+ if (hasMore) {
233
+ console.log(chalk.dim(`\n... more items exist. Use --all to fetch everything.`));
234
+ }
235
+ }
236
+ export function registerWorkspaceCommand(program) {
237
+ const workspace = program.command('workspace').description('Manage workspaces');
238
+ workspace
239
+ .command('list')
240
+ .description('List all workspaces')
241
+ .option('--json', 'Output as JSON')
242
+ .option('--ndjson', 'Output as newline-delimited JSON')
243
+ .option('--full', 'Include all fields in JSON output')
244
+ .action(listWorkspaces);
245
+ const viewCmd = workspace
246
+ .command('view [ref]')
247
+ .description('View workspace details')
248
+ .action((ref) => {
249
+ if (!ref) {
250
+ viewCmd.help();
251
+ return;
252
+ }
253
+ return viewWorkspace(ref);
254
+ });
255
+ const projectsCmd = workspace
256
+ .command('projects [ref]')
257
+ .description('List projects in a workspace')
258
+ .option('--limit <n>', 'Limit number of results')
259
+ .option('--cursor <cursor>', 'Continue from cursor')
260
+ .option('--all', 'Fetch all results (no limit)')
261
+ .option('--json', 'Output as JSON')
262
+ .option('--ndjson', 'Output as newline-delimited JSON')
263
+ .option('--full', 'Include all fields in JSON output')
264
+ .action((ref, options) => {
265
+ if (!ref) {
266
+ projectsCmd.help();
267
+ return;
268
+ }
269
+ return listWorkspaceProjects(ref, options);
270
+ });
271
+ const usersCmd = workspace
272
+ .command('users [ref]')
273
+ .description('List users in a workspace')
274
+ .option('--role <roles>', 'Filter by role (comma-separated: ADMIN,MEMBER,GUEST)')
275
+ .option('--limit <n>', 'Limit number of results')
276
+ .option('--cursor <cursor>', 'Continue from cursor')
277
+ .option('--all', 'Fetch all results (no limit)')
278
+ .option('--json', 'Output as JSON')
279
+ .option('--ndjson', 'Output as newline-delimited JSON')
280
+ .option('--full', 'Include all fields in JSON output')
281
+ .action((ref, options) => {
282
+ if (!ref) {
283
+ usersCmd.help();
284
+ return;
285
+ }
286
+ return listWorkspaceUsers(ref, options);
287
+ });
288
+ }
289
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ import { program } from 'commander';
3
+ import packageJson from '../package.json' with { type: 'json' };
4
+ import { registerActivityCommand } from './commands/activity.js';
5
+ import { registerAddCommand } from './commands/add.js';
6
+ import { registerAuthCommand } from './commands/auth.js';
7
+ import { registerCommentCommand } from './commands/comment.js';
8
+ import { registerCompletedCommand } from './commands/completed.js';
9
+ import { registerFilterCommand } from './commands/filter.js';
10
+ import { registerInboxCommand } from './commands/inbox.js';
11
+ import { registerLabelCommand } from './commands/label.js';
12
+ import { registerNotificationCommand } from './commands/notification.js';
13
+ import { registerProjectCommand } from './commands/project.js';
14
+ import { registerReminderCommand } from './commands/reminder.js';
15
+ import { registerSectionCommand } from './commands/section.js';
16
+ import { registerSettingsCommand } from './commands/settings.js';
17
+ import { registerStatsCommand } from './commands/stats.js';
18
+ import { registerTaskCommand } from './commands/task.js';
19
+ import { registerTodayCommand } from './commands/today.js';
20
+ import { registerUpcomingCommand } from './commands/upcoming.js';
21
+ import { registerWorkspaceCommand } from './commands/workspace.js';
22
+ program
23
+ .name('td')
24
+ .description('Todoist CLI')
25
+ .version(packageJson.version)
26
+ .option('--no-spinner', 'Disable loading animations')
27
+ .addHelpText('after', `
28
+ Note for AI/LLM agents:
29
+ Use --json or --ndjson flags for unambiguous, parseable output.
30
+ Default JSON shows essential fields; use --full for all fields.`);
31
+ registerAddCommand(program);
32
+ registerTodayCommand(program);
33
+ registerUpcomingCommand(program);
34
+ registerInboxCommand(program);
35
+ registerCompletedCommand(program);
36
+ registerTaskCommand(program);
37
+ registerProjectCommand(program);
38
+ registerLabelCommand(program);
39
+ registerCommentCommand(program);
40
+ registerSectionCommand(program);
41
+ registerWorkspaceCommand(program);
42
+ registerActivityCommand(program);
43
+ registerReminderCommand(program);
44
+ registerSettingsCommand(program);
45
+ registerAuthCommand(program);
46
+ registerStatsCommand(program);
47
+ registerFilterCommand(program);
48
+ registerNotificationCommand(program);
49
+ program.parseAsync().catch((err) => {
50
+ console.error(err.message);
51
+ process.exit(1);
52
+ });
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAElE,OAAO;KACF,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,aAAa,CAAC;KAC1B,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,MAAM,CAAC,cAAc,EAAE,4BAA4B,CAAC;KACpD,WAAW,CACR,OAAO,EACP;;;kEAG0D,CAC7D,CAAA;AAEL,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,wBAAwB,CAAC,OAAO,CAAC,CAAA;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAA;AACjC,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,2BAA2B,CAAC,OAAO,CAAC,CAAA;AAEpC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,40 @@
1
+ import { PersonalProject, Section, Task, TodoistApi, User, WorkspaceProject } from '@doist/todoist-api-typescript';
2
+ export declare function getApi(): Promise<TodoistApi>;
3
+ export type Project = PersonalProject | WorkspaceProject;
4
+ export declare function isWorkspaceProject(project: Project): project is WorkspaceProject;
5
+ export declare function isPersonalProject(project: Project): project is PersonalProject;
6
+ export declare function getCurrentUserId(): Promise<string>;
7
+ export declare function clearCurrentUserCache(): void;
8
+ export interface SyncCommand {
9
+ type: string;
10
+ uuid: string;
11
+ temp_id?: string;
12
+ args: Record<string, unknown>;
13
+ }
14
+ export interface SyncResponse {
15
+ sync_status?: Record<string, string | {
16
+ error_code: number;
17
+ error: string;
18
+ }>;
19
+ temp_id_mapping?: Record<string, string>;
20
+ reminders?: Array<Record<string, unknown>>;
21
+ user?: Record<string, unknown>;
22
+ user_settings?: Record<string, unknown>;
23
+ error?: string;
24
+ error_code?: number;
25
+ }
26
+ export declare function generateUuid(): string;
27
+ export declare function executeSyncCommand(commands: SyncCommand[]): Promise<SyncResponse>;
28
+ export interface NotificationSyncResponse {
29
+ live_notifications?: Array<Record<string, unknown>>;
30
+ live_notifications_last_read_id?: number;
31
+ sync_status?: Record<string, string | {
32
+ error_code: number;
33
+ error: string;
34
+ }>;
35
+ error?: string;
36
+ }
37
+ export declare function executeSyncV9Command(commands: SyncCommand[]): Promise<NotificationSyncResponse>;
38
+ export declare function completeTaskForever(taskId: string): Promise<void>;
39
+ export type { Task, PersonalProject, WorkspaceProject, Section, User };
40
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/lib/api/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EACf,OAAO,EACP,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,gBAAgB,EACnB,MAAM,+BAA+B,CAAA;AA4DtC,wBAAsB,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,CAOlD;AAED,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,gBAAgB,CAAA;AAExD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAEhF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,eAAe,CAE9E;AAID,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAMxD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,YAAY;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CA8BvF;AAED,MAAM,WAAW,wBAAwB;IACrC,kBAAkB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACnD,+BAA+B,CAAC,EAAE,MAAM,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAsB,oBAAoB,CACtC,QAAQ,EAAE,WAAW,EAAE,GACxB,OAAO,CAAC,wBAAwB,CAAC,CA8BnC;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvE;AAED,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA"}
@@ -0,0 +1,142 @@
1
+ import { TodoistApi, } from '@doist/todoist-api-typescript';
2
+ import { getApiToken } from '../auth.js';
3
+ import { withSpinner } from '../spinner.js';
4
+ let apiClient = null;
5
+ // Mapping of API method names to user-friendly spinner messages
6
+ const API_SPINNER_MESSAGES = {
7
+ getUser: { text: 'Checking authentication...', color: 'blue' },
8
+ getTasks: { text: 'Loading tasks...', color: 'blue' },
9
+ getProjects: { text: 'Loading projects...', color: 'blue' },
10
+ getLabels: { text: 'Loading labels...', color: 'blue' },
11
+ getSections: { text: 'Loading sections...', color: 'blue' },
12
+ getComments: { text: 'Loading comments...', color: 'blue' },
13
+ addTask: { text: 'Creating task...', color: 'green' },
14
+ updateTask: { text: 'Updating task...', color: 'yellow' },
15
+ closeTask: { text: 'Completing task...', color: 'green' },
16
+ reopenTask: { text: 'Reopening task...', color: 'yellow' },
17
+ deleteTask: { text: 'Deleting task...', color: 'yellow' },
18
+ addProject: { text: 'Creating project...', color: 'green' },
19
+ updateProject: { text: 'Updating project...', color: 'yellow' },
20
+ deleteProject: { text: 'Deleting project...', color: 'yellow' },
21
+ addLabel: { text: 'Creating label...', color: 'green' },
22
+ updateLabel: { text: 'Updating label...', color: 'yellow' },
23
+ deleteLabel: { text: 'Deleting label...', color: 'yellow' },
24
+ addSection: { text: 'Creating section...', color: 'green' },
25
+ updateSection: { text: 'Updating section...', color: 'yellow' },
26
+ deleteSection: { text: 'Deleting section...', color: 'yellow' },
27
+ quickAddTask: { text: 'Adding task...', color: 'green' },
28
+ };
29
+ function createSpinnerWrappedApi(api) {
30
+ return new Proxy(api, {
31
+ get(target, property, receiver) {
32
+ const originalMethod = Reflect.get(target, property, receiver);
33
+ // Only wrap methods (functions) and only if they're likely async API calls
34
+ if (typeof originalMethod === 'function' && typeof property === 'string') {
35
+ const spinnerConfig = API_SPINNER_MESSAGES[property];
36
+ if (spinnerConfig) {
37
+ return (...args) => {
38
+ const result = originalMethod.apply(target, args);
39
+ // If the method returns a Promise, wrap it with spinner
40
+ if (result && typeof result.then === 'function') {
41
+ return withSpinner(spinnerConfig, () => result);
42
+ }
43
+ return result;
44
+ };
45
+ }
46
+ }
47
+ return originalMethod;
48
+ },
49
+ });
50
+ }
51
+ export async function getApi() {
52
+ if (!apiClient) {
53
+ const token = await getApiToken();
54
+ const rawApi = new TodoistApi(token);
55
+ apiClient = createSpinnerWrappedApi(rawApi);
56
+ }
57
+ return apiClient;
58
+ }
59
+ export function isWorkspaceProject(project) {
60
+ return 'workspaceId' in project && project.workspaceId !== undefined;
61
+ }
62
+ export function isPersonalProject(project) {
63
+ return !isWorkspaceProject(project);
64
+ }
65
+ let currentUserIdCache = null;
66
+ export async function getCurrentUserId() {
67
+ if (currentUserIdCache)
68
+ return currentUserIdCache;
69
+ const api = await getApi();
70
+ const user = await api.getUser();
71
+ currentUserIdCache = user.id;
72
+ return currentUserIdCache;
73
+ }
74
+ export function clearCurrentUserCache() {
75
+ currentUserIdCache = null;
76
+ }
77
+ export function generateUuid() {
78
+ return crypto.randomUUID();
79
+ }
80
+ export async function executeSyncCommand(commands) {
81
+ const token = await getApiToken();
82
+ const response = await fetch('https://api.todoist.com/api/v1/sync', {
83
+ method: 'POST',
84
+ headers: {
85
+ Authorization: `Bearer ${token}`,
86
+ 'Content-Type': 'application/x-www-form-urlencoded',
87
+ },
88
+ body: new URLSearchParams({
89
+ commands: JSON.stringify(commands),
90
+ }),
91
+ });
92
+ if (!response.ok) {
93
+ throw new Error(`Sync API error: ${response.status}`);
94
+ }
95
+ const data = await response.json();
96
+ if (data.error) {
97
+ throw new Error(`Sync API error: ${data.error}`);
98
+ }
99
+ for (const cmd of commands) {
100
+ const status = data.sync_status?.[cmd.uuid];
101
+ if (status && typeof status === 'object' && 'error' in status) {
102
+ throw new Error(status.error);
103
+ }
104
+ }
105
+ return data;
106
+ }
107
+ export async function executeSyncV9Command(commands) {
108
+ const token = await getApiToken();
109
+ const response = await fetch('https://api.todoist.com/sync/v9/sync', {
110
+ method: 'POST',
111
+ headers: {
112
+ Authorization: `Bearer ${token}`,
113
+ 'Content-Type': 'application/x-www-form-urlencoded',
114
+ },
115
+ body: new URLSearchParams({
116
+ commands: JSON.stringify(commands),
117
+ }),
118
+ });
119
+ if (!response.ok) {
120
+ throw new Error(`Sync API error: ${response.status}`);
121
+ }
122
+ const data = await response.json();
123
+ if (data.error) {
124
+ throw new Error(`Sync API error: ${data.error}`);
125
+ }
126
+ for (const cmd of commands) {
127
+ const status = data.sync_status?.[cmd.uuid];
128
+ if (status && typeof status === 'object' && 'error' in status) {
129
+ throw new Error(status.error);
130
+ }
131
+ }
132
+ return data;
133
+ }
134
+ export async function completeTaskForever(taskId) {
135
+ const command = {
136
+ type: 'item_complete',
137
+ uuid: generateUuid(),
138
+ args: { id: taskId },
139
+ };
140
+ await executeSyncCommand([command]);
141
+ }
142
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/lib/api/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface Filter {
2
+ id: string;
3
+ name: string;
4
+ query: string;
5
+ color?: string;
6
+ itemOrder?: number;
7
+ isFavorite: boolean;
8
+ isDeleted: boolean;
9
+ }
10
+ export declare function fetchFilters(): Promise<Filter[]>;
11
+ export interface AddFilterArgs {
12
+ name: string;
13
+ query: string;
14
+ color?: string;
15
+ isFavorite?: boolean;
16
+ }
17
+ export declare function addFilter(args: AddFilterArgs): Promise<Filter>;
18
+ export interface UpdateFilterArgs {
19
+ name?: string;
20
+ query?: string;
21
+ color?: string;
22
+ isFavorite?: boolean;
23
+ }
24
+ export declare function updateFilter(id: string, args: UpdateFilterArgs): Promise<void>;
25
+ export declare function deleteFilter(id: string): Promise<void>;
26
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/lib/api/filters.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACrB;AAoBD,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAwBtD;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BpE;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcpF;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5D"}