@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,251 @@
1
+ import chalk from 'chalk';
2
+ import { getApi } from '../lib/api/core.js';
3
+ import { uploadFile } from '../lib/api/uploads.js';
4
+ import { openInBrowser } from '../lib/browser.js';
5
+ import { renderMarkdown } from '../lib/markdown.js';
6
+ import { formatFileSize, formatNextCursorFooter, formatPaginatedJson, formatPaginatedNdjson, } from '../lib/output.js';
7
+ import { LIMITS, paginate } from '../lib/pagination.js';
8
+ import { requireIdRef, resolveProjectRef, resolveTaskRef } from '../lib/refs.js';
9
+ import { commentUrl, projectCommentUrl } from '../lib/urls.js';
10
+ function truncateContent(content, maxLines) {
11
+ const lines = content.split('\n');
12
+ if (lines.length <= maxLines)
13
+ return content;
14
+ return `${lines.slice(0, maxLines).join('\n')}\n...`;
15
+ }
16
+ async function listComments(ref, options) {
17
+ const api = await getApi();
18
+ let queryArgs;
19
+ if (options.project) {
20
+ const project = await resolveProjectRef(api, ref);
21
+ queryArgs = { projectId: project.id };
22
+ }
23
+ else {
24
+ const task = await resolveTaskRef(api, ref);
25
+ queryArgs = { taskId: task.id };
26
+ }
27
+ const targetLimit = options.all
28
+ ? Number.MAX_SAFE_INTEGER
29
+ : options.limit
30
+ ? parseInt(options.limit, 10)
31
+ : LIMITS.comments;
32
+ const { results: comments, nextCursor } = await paginate((cursor, limit) => api.getComments({ ...queryArgs, cursor: cursor ?? undefined, limit }), { limit: targetLimit });
33
+ const enrichedComments = comments.map((c) => ({
34
+ ...c,
35
+ hasAttachment: c.fileAttachment !== null,
36
+ }));
37
+ if (options.json) {
38
+ console.log(formatPaginatedJson({ results: enrichedComments, nextCursor }, 'comment', options.full, options.showUrls));
39
+ return;
40
+ }
41
+ if (options.ndjson) {
42
+ console.log(formatPaginatedNdjson({ results: enrichedComments, nextCursor }, 'comment', options.full, options.showUrls));
43
+ return;
44
+ }
45
+ if (comments.length === 0) {
46
+ console.log('No comments.');
47
+ return;
48
+ }
49
+ const maxLines = options.lines ? parseInt(options.lines, 10) : 3;
50
+ for (const comment of comments) {
51
+ const id = chalk.dim(comment.id);
52
+ const date = chalk.green(comment.postedAt.split('T')[0]);
53
+ const hasAttachment = comment.fileAttachment !== null;
54
+ console.log(`${id} ${date}${hasAttachment ? ` ${chalk.blue('[file]')}` : ''}`);
55
+ const content = options.raw ? comment.content : renderMarkdown(comment.content);
56
+ const truncated = truncateContent(content, maxLines);
57
+ for (const line of truncated.split('\n')) {
58
+ console.log(` ${line}`);
59
+ }
60
+ if (options.showUrls) {
61
+ const url = 'taskId' in queryArgs
62
+ ? commentUrl(queryArgs.taskId, comment.id)
63
+ : projectCommentUrl(queryArgs.projectId, comment.id);
64
+ console.log(` ${chalk.dim(url)}`);
65
+ }
66
+ console.log('');
67
+ }
68
+ console.log(formatNextCursorFooter(nextCursor));
69
+ }
70
+ async function addComment(ref, options) {
71
+ const api = await getApi();
72
+ let targetArgs;
73
+ let targetName;
74
+ if (options.project) {
75
+ const project = await resolveProjectRef(api, ref);
76
+ targetArgs = { projectId: project.id };
77
+ targetName = project.name;
78
+ }
79
+ else {
80
+ const task = await resolveTaskRef(api, ref);
81
+ targetArgs = { taskId: task.id };
82
+ targetName = task.content;
83
+ }
84
+ let attachment;
85
+ if (options.file) {
86
+ const uploadResult = await uploadFile(options.file);
87
+ attachment = {
88
+ fileUrl: uploadResult.fileUrl,
89
+ fileName: uploadResult.fileName,
90
+ fileType: uploadResult.fileType,
91
+ resourceType: uploadResult.resourceType,
92
+ };
93
+ }
94
+ const comment = await api.addComment({
95
+ ...targetArgs,
96
+ content: options.content,
97
+ ...(attachment && { attachment }),
98
+ });
99
+ console.log(`Added comment to "${targetName}"`);
100
+ if (attachment) {
101
+ console.log(chalk.dim(`Attached: ${attachment.fileName}`));
102
+ }
103
+ console.log(chalk.dim(`ID: ${comment.id}`));
104
+ }
105
+ async function deleteComment(commentId, options) {
106
+ const api = await getApi();
107
+ const id = requireIdRef(commentId, 'comment');
108
+ const comment = await api.getComment(id);
109
+ const preview = comment.content.length > 50 ? `${comment.content.slice(0, 50)}...` : comment.content;
110
+ if (!options.yes) {
111
+ console.log(`Would delete comment: ${preview}`);
112
+ console.log('Use --yes to confirm.');
113
+ return;
114
+ }
115
+ await api.deleteComment(id);
116
+ console.log(`Deleted comment: ${preview}`);
117
+ }
118
+ async function updateComment(commentId, options) {
119
+ const api = await getApi();
120
+ const id = requireIdRef(commentId, 'comment');
121
+ const comment = await api.getComment(id);
122
+ const oldPreview = comment.content.length > 50 ? `${comment.content.slice(0, 50)}...` : comment.content;
123
+ await api.updateComment(id, { content: options.content });
124
+ console.log(`Updated comment: ${oldPreview}`);
125
+ }
126
+ async function viewComment(commentId, options) {
127
+ const api = await getApi();
128
+ const id = requireIdRef(commentId, 'comment');
129
+ const comment = await api.getComment(id);
130
+ const url = comment.taskId
131
+ ? commentUrl(comment.taskId, comment.id)
132
+ : comment.projectId
133
+ ? projectCommentUrl(comment.projectId, comment.id)
134
+ : '';
135
+ console.log(chalk.bold('Comment'));
136
+ console.log('');
137
+ console.log(`ID: ${comment.id}`);
138
+ console.log(`Posted: ${comment.postedAt}`);
139
+ if (url)
140
+ console.log(`URL: ${url}`);
141
+ console.log('');
142
+ console.log('Content:');
143
+ const content = options.raw ? comment.content : renderMarkdown(comment.content);
144
+ console.log(content);
145
+ if (comment.fileAttachment) {
146
+ const att = comment.fileAttachment;
147
+ console.log('');
148
+ console.log(chalk.bold('Attachment:'));
149
+ if (att.fileName)
150
+ console.log(` Name: ${att.fileName}`);
151
+ if (att.fileSize)
152
+ console.log(` Size: ${formatFileSize(att.fileSize)}`);
153
+ if (att.fileType)
154
+ console.log(` Type: ${att.fileType}`);
155
+ if (att.fileUrl)
156
+ console.log(` URL: ${att.fileUrl}`);
157
+ }
158
+ }
159
+ async function browseComment(commentId) {
160
+ const api = await getApi();
161
+ const id = requireIdRef(commentId, 'comment');
162
+ const comment = await api.getComment(id);
163
+ const url = comment.taskId
164
+ ? commentUrl(comment.taskId, comment.id)
165
+ : comment.projectId
166
+ ? projectCommentUrl(comment.projectId, comment.id)
167
+ : null;
168
+ if (!url) {
169
+ throw new Error('Comment has no associated task or project.');
170
+ }
171
+ await openInBrowser(url);
172
+ }
173
+ export function registerCommentCommand(program) {
174
+ const comment = program.command('comment').description('Manage comments');
175
+ const listCmd = comment
176
+ .command('list [ref]')
177
+ .description('List comments on a task (or project with --project)')
178
+ .option('-P, --project', 'Target a project instead of a task')
179
+ .option('--limit <n>', 'Limit number of results (default: 10)')
180
+ .option('--all', 'Fetch all results (no limit)')
181
+ .option('--show-urls', 'Show web app URLs for each comment')
182
+ .option('--json', 'Output as JSON')
183
+ .option('--ndjson', 'Output as newline-delimited JSON')
184
+ .option('--full', 'Include all fields in JSON output')
185
+ .option('--lines <n>', 'Number of content lines to show (default: 3)')
186
+ .option('--raw', 'Disable markdown rendering')
187
+ .action((ref, options) => {
188
+ if (!ref) {
189
+ listCmd.help();
190
+ return;
191
+ }
192
+ return listComments(ref, options);
193
+ });
194
+ const addCmd = comment
195
+ .command('add [ref]')
196
+ .description('Add a comment to a task (or project with --project)')
197
+ .option('-P, --project', 'Target a project instead of a task')
198
+ .option('--content <text>', 'Comment content (required)')
199
+ .option('--file <path>', 'Attach a file to the comment')
200
+ .action((ref, options) => {
201
+ if (!ref || !options.content) {
202
+ addCmd.help();
203
+ return;
204
+ }
205
+ return addComment(ref, options);
206
+ });
207
+ const deleteCmd = comment
208
+ .command('delete [id]')
209
+ .description('Delete a comment')
210
+ .option('--yes', 'Confirm deletion')
211
+ .action((id, options) => {
212
+ if (!id) {
213
+ deleteCmd.help();
214
+ return;
215
+ }
216
+ return deleteComment(id, options);
217
+ });
218
+ const updateCmd = comment
219
+ .command('update [id]')
220
+ .description('Update a comment')
221
+ .option('--content <text>', 'New comment content (required)')
222
+ .action((id, options) => {
223
+ if (!id || !options.content) {
224
+ updateCmd.help();
225
+ return;
226
+ }
227
+ return updateComment(id, options);
228
+ });
229
+ const viewCmd = comment
230
+ .command('view [id]')
231
+ .description('View a single comment with full details')
232
+ .option('--raw', 'Disable markdown rendering')
233
+ .action((id, options) => {
234
+ if (!id) {
235
+ viewCmd.help();
236
+ return;
237
+ }
238
+ return viewComment(id, options);
239
+ });
240
+ const browseCmd = comment
241
+ .command('browse [id]')
242
+ .description('Open comment in browser (requires id:xxx)')
243
+ .action((id) => {
244
+ if (!id) {
245
+ browseCmd.help();
246
+ return;
247
+ }
248
+ return browseComment(id);
249
+ });
250
+ }
251
+ //# sourceMappingURL=comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerCompletedCommand(program: Command): void;
3
+ //# sourceMappingURL=completed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completed.d.ts","sourceRoot":"","sources":["../../src/commands/completed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8BnC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyF/D"}
@@ -0,0 +1,74 @@
1
+ import chalk from 'chalk';
2
+ import { getApi } from '../lib/api/core.js';
3
+ import { formatNextCursorFooter, formatPaginatedJson, formatPaginatedNdjson, formatTaskRow, } from '../lib/output.js';
4
+ import { LIMITS, paginate } from '../lib/pagination.js';
5
+ import { resolveProjectId } from '../lib/refs.js';
6
+ function getLocalDate(daysOffset = 0) {
7
+ const date = new Date();
8
+ date.setDate(date.getDate() + daysOffset);
9
+ return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
10
+ }
11
+ export function registerCompletedCommand(program) {
12
+ program
13
+ .command('completed')
14
+ .description('Show completed tasks')
15
+ .option('--since <date>', 'Start date (YYYY-MM-DD), default: today')
16
+ .option('--until <date>', 'End date (YYYY-MM-DD), default: tomorrow')
17
+ .option('--project <name>', 'Filter by project')
18
+ .option('--limit <n>', 'Limit number of results (default: 300)')
19
+ .option('--cursor <cursor>', 'Continue from cursor')
20
+ .option('--all', 'Fetch all results (no limit)')
21
+ .option('--json', 'Output as JSON')
22
+ .option('--ndjson', 'Output as newline-delimited JSON')
23
+ .option('--full', 'Include all fields in JSON output')
24
+ .option('--show-urls', 'Show web app URLs for each task')
25
+ .action(async (options) => {
26
+ const api = await getApi();
27
+ const since = options.since ?? getLocalDate(0);
28
+ const until = options.until ?? getLocalDate(1);
29
+ let projectId;
30
+ if (options.project) {
31
+ projectId = await resolveProjectId(api, options.project);
32
+ }
33
+ const targetLimit = options.all
34
+ ? Number.MAX_SAFE_INTEGER
35
+ : options.limit
36
+ ? parseInt(options.limit, 10)
37
+ : LIMITS.tasks;
38
+ const { results: tasks, nextCursor } = await paginate(async (cursor, limit) => {
39
+ const resp = await api.getCompletedTasksByCompletionDate({
40
+ since,
41
+ until,
42
+ projectId,
43
+ cursor: cursor ?? undefined,
44
+ limit,
45
+ });
46
+ return { results: resp.items, nextCursor: resp.nextCursor };
47
+ }, { limit: targetLimit, startCursor: options.cursor });
48
+ if (options.json) {
49
+ console.log(formatPaginatedJson({ results: tasks, nextCursor }, 'task', options.full, options.showUrls));
50
+ return;
51
+ }
52
+ if (options.ndjson) {
53
+ console.log(formatPaginatedNdjson({ results: tasks, nextCursor }, 'task', options.full, options.showUrls));
54
+ return;
55
+ }
56
+ if (tasks.length === 0) {
57
+ console.log('No completed tasks in this period.');
58
+ console.log(formatNextCursorFooter(nextCursor));
59
+ return;
60
+ }
61
+ const { results: allProjects } = await api.getProjects();
62
+ const projects = new Map(allProjects.map((p) => [p.id, p]));
63
+ const dateRange = since === until ? since : `${since} to ${until}`;
64
+ console.log(chalk.bold(`Completed (${tasks.length}) - ${dateRange}`));
65
+ console.log('');
66
+ for (const task of tasks) {
67
+ const projectName = projects.get(task.projectId)?.name;
68
+ console.log(formatTaskRow({ task, projectName, showUrl: options.showUrls }));
69
+ console.log('');
70
+ }
71
+ console.log(formatNextCursorFooter(nextCursor));
72
+ });
73
+ }
74
+ //# sourceMappingURL=completed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completed.js","sourceRoot":"","sources":["../../src/commands/completed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerFilterCommand(program: Command): void;
3
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/commands/filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAyRnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmF5D"}
@@ -0,0 +1,249 @@
1
+ import chalk from 'chalk';
2
+ import { getApi } from '../lib/api/core.js';
3
+ import { addFilter, deleteFilter, fetchFilters, updateFilter, } from '../lib/api/filters.js';
4
+ import { openInBrowser } from '../lib/browser.js';
5
+ import { CollaboratorCache, formatAssignee } from '../lib/collaborators.js';
6
+ import { formatError, formatNextCursorFooter, formatPaginatedJson, formatPaginatedNdjson, formatTaskRow, } from '../lib/output.js';
7
+ import { LIMITS, paginate } from '../lib/pagination.js';
8
+ import { extractId, isIdRef } from '../lib/refs.js';
9
+ import { filterUrl } from '../lib/urls.js';
10
+ async function listFilters(options) {
11
+ const filters = await fetchFilters();
12
+ if (options.json) {
13
+ console.log(formatPaginatedJson({ results: filters, nextCursor: null }, 'filter', options.full, options.showUrls));
14
+ return;
15
+ }
16
+ if (options.ndjson) {
17
+ console.log(formatPaginatedNdjson({ results: filters, nextCursor: null }, 'filter', options.full, options.showUrls));
18
+ return;
19
+ }
20
+ if (filters.length === 0) {
21
+ console.log('No filters found.');
22
+ return;
23
+ }
24
+ for (const filter of filters) {
25
+ const id = chalk.dim(`id:${filter.id}`);
26
+ const name = filter.isFavorite ? chalk.yellow(filter.name) : filter.name;
27
+ const query = chalk.dim(`"${filter.query}"`);
28
+ console.log(`${id} ${name} ${query}`);
29
+ if (options.showUrls) {
30
+ console.log(` ${chalk.dim(filterUrl(filter.id))}`);
31
+ }
32
+ }
33
+ }
34
+ async function createFilter(options) {
35
+ const filter = await addFilter({
36
+ name: options.name,
37
+ query: options.query,
38
+ color: options.color,
39
+ isFavorite: options.favorite,
40
+ });
41
+ console.log(`Created: ${filter.name}`);
42
+ console.log(chalk.dim(`ID: id:${filter.id}`));
43
+ console.log(chalk.dim(`Query: ${filter.query}`));
44
+ }
45
+ async function resolveFilterRef(nameOrId) {
46
+ const filters = await fetchFilters();
47
+ if (isIdRef(nameOrId)) {
48
+ const id = extractId(nameOrId);
49
+ const filter = filters.find((f) => f.id === id);
50
+ if (!filter) {
51
+ throw new Error(formatError('FILTER_NOT_FOUND', 'Filter not found.'));
52
+ }
53
+ return filter;
54
+ }
55
+ const lower = nameOrId.toLowerCase();
56
+ const exact = filters.find((f) => f.name.toLowerCase() === lower);
57
+ if (exact)
58
+ return exact;
59
+ const partial = filters.filter((f) => f.name.toLowerCase().includes(lower));
60
+ if (partial.length === 1)
61
+ return partial[0];
62
+ if (partial.length > 1) {
63
+ throw new Error(formatError('AMBIGUOUS_FILTER', `Multiple filters match "${nameOrId}".`, [
64
+ 'Use id:xxx to specify exactly',
65
+ ...partial.slice(0, 5).map((f) => `${f.name} (id:${f.id})`),
66
+ ]));
67
+ }
68
+ throw new Error(formatError('FILTER_NOT_FOUND', `Filter "${nameOrId}" not found.`));
69
+ }
70
+ async function deleteFilterCmd(nameOrId, options) {
71
+ const filter = await resolveFilterRef(nameOrId);
72
+ if (!options.yes) {
73
+ console.log(`Would delete: ${filter.name}`);
74
+ console.log(chalk.dim(`Query: ${filter.query}`));
75
+ console.log('Use --yes to confirm.');
76
+ return;
77
+ }
78
+ await deleteFilter(filter.id);
79
+ console.log(`Deleted: ${filter.name}`);
80
+ }
81
+ async function updateFilterCmd(nameOrId, options) {
82
+ const filter = await resolveFilterRef(nameOrId);
83
+ const args = {};
84
+ if (options.name)
85
+ args.name = options.name;
86
+ if (options.query)
87
+ args.query = options.query;
88
+ if (options.color)
89
+ args.color = options.color;
90
+ if (options.favorite !== undefined)
91
+ args.isFavorite = options.favorite;
92
+ if (Object.keys(args).length === 0) {
93
+ throw new Error(formatError('NO_CHANGES', 'No changes specified.'));
94
+ }
95
+ await updateFilter(filter.id, args);
96
+ console.log(`Updated: ${filter.name}${options.name ? ` -> ${options.name}` : ''}`);
97
+ }
98
+ async function showFilter(nameOrId, options) {
99
+ const filter = await resolveFilterRef(nameOrId);
100
+ const api = await getApi();
101
+ const targetLimit = options.all
102
+ ? Number.MAX_SAFE_INTEGER
103
+ : options.limit
104
+ ? parseInt(options.limit, 10)
105
+ : LIMITS.tasks;
106
+ let tasks;
107
+ let nextCursor;
108
+ try {
109
+ const result = await paginate((cursor, limit) => api.getTasksByFilter({
110
+ query: filter.query,
111
+ cursor: cursor ?? undefined,
112
+ limit,
113
+ }), { limit: targetLimit, startCursor: options.cursor });
114
+ tasks = result.results;
115
+ nextCursor = result.nextCursor;
116
+ }
117
+ catch (err) {
118
+ const message = err instanceof Error ? err.message : String(err);
119
+ if (message.includes('400')) {
120
+ throw new Error(formatError('INVALID_FILTER_QUERY', `Filter query "${filter.query}" is invalid.`, [
121
+ 'Check the Todoist filter syntax',
122
+ ]));
123
+ }
124
+ throw err;
125
+ }
126
+ if (options.json) {
127
+ console.log(formatPaginatedJson({ results: tasks, nextCursor }, 'task', options.full, options.showUrls));
128
+ return;
129
+ }
130
+ if (options.ndjson) {
131
+ console.log(formatPaginatedNdjson({ results: tasks, nextCursor }, 'task', options.full, options.showUrls));
132
+ return;
133
+ }
134
+ console.log(chalk.bold(`${filter.name}`));
135
+ console.log(chalk.dim(`Query: ${filter.query}`));
136
+ console.log(chalk.dim(`URL: ${filterUrl(filter.id)}`));
137
+ console.log('');
138
+ if (tasks.length === 0) {
139
+ console.log('No tasks match this filter.');
140
+ console.log(formatNextCursorFooter(nextCursor));
141
+ return;
142
+ }
143
+ const { results: projects } = await api.getProjects();
144
+ const projectMap = new Map();
145
+ for (const p of projects) {
146
+ projectMap.set(p.id, p);
147
+ }
148
+ const collaboratorCache = new CollaboratorCache();
149
+ await collaboratorCache.preload(api, tasks, projectMap);
150
+ for (const task of tasks) {
151
+ const assignee = formatAssignee({
152
+ userId: task.responsibleUid,
153
+ projectId: task.projectId,
154
+ projects: projectMap,
155
+ cache: collaboratorCache,
156
+ });
157
+ console.log(formatTaskRow({
158
+ task,
159
+ projectName: projectMap.get(task.projectId)?.name,
160
+ assignee: assignee ?? undefined,
161
+ showUrl: options.showUrls,
162
+ }));
163
+ console.log('');
164
+ }
165
+ console.log(formatNextCursorFooter(nextCursor));
166
+ }
167
+ async function browseFilter(nameOrId) {
168
+ const filter = await resolveFilterRef(nameOrId);
169
+ await openInBrowser(filterUrl(filter.id));
170
+ }
171
+ export function registerFilterCommand(program) {
172
+ const filter = program.command('filter').description('Manage filters');
173
+ filter
174
+ .command('list')
175
+ .description('List all filters')
176
+ .option('--json', 'Output as JSON')
177
+ .option('--ndjson', 'Output as newline-delimited JSON')
178
+ .option('--full', 'Include all fields in JSON output')
179
+ .option('--show-urls', 'Show web app URLs for each filter')
180
+ .action(listFilters);
181
+ const createCmd = filter
182
+ .command('create')
183
+ .description('Create a filter')
184
+ .option('--name <name>', 'Filter name (required)')
185
+ .option('--query <query>', 'Filter query (required, e.g., "today | overdue")')
186
+ .option('--color <color>', 'Filter color')
187
+ .option('--favorite', 'Mark as favorite')
188
+ .action((options) => {
189
+ if (!options.name || !options.query) {
190
+ createCmd.help();
191
+ return;
192
+ }
193
+ return createFilter(options);
194
+ });
195
+ const deleteCmd = filter
196
+ .command('delete [ref]')
197
+ .description('Delete a filter')
198
+ .option('--yes', 'Confirm deletion')
199
+ .action((ref, options) => {
200
+ if (!ref) {
201
+ deleteCmd.help();
202
+ return;
203
+ }
204
+ return deleteFilterCmd(ref, options);
205
+ });
206
+ const updateCmd = filter
207
+ .command('update [ref]')
208
+ .description('Update a filter')
209
+ .option('--name <name>', 'New name')
210
+ .option('--query <query>', 'New query')
211
+ .option('--color <color>', 'New color')
212
+ .option('--favorite', 'Mark as favorite')
213
+ .option('--no-favorite', 'Remove from favorites')
214
+ .action((ref, options) => {
215
+ if (!ref) {
216
+ updateCmd.help();
217
+ return;
218
+ }
219
+ return updateFilterCmd(ref, options);
220
+ });
221
+ const showCmd = filter
222
+ .command('show [ref]')
223
+ .description('Show tasks matching a filter')
224
+ .option('--limit <n>', 'Limit number of results (default: 300)')
225
+ .option('--cursor <cursor>', 'Continue from cursor')
226
+ .option('--all', 'Fetch all results (no limit)')
227
+ .option('--json', 'Output as JSON')
228
+ .option('--ndjson', 'Output as newline-delimited JSON')
229
+ .option('--full', 'Include all fields in JSON output')
230
+ .option('--show-urls', 'Show web app URLs for each task')
231
+ .action((ref, options) => {
232
+ if (!ref) {
233
+ showCmd.help();
234
+ return;
235
+ }
236
+ return showFilter(ref, options);
237
+ });
238
+ const browseCmd = filter
239
+ .command('browse [ref]')
240
+ .description('Open filter in browser')
241
+ .action((ref) => {
242
+ if (!ref) {
243
+ browseCmd.help();
244
+ return;
245
+ }
246
+ return browseFilter(ref);
247
+ });
248
+ }
249
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/commands/filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerInboxCommand(program: Command): void;
3
+ //# sourceMappingURL=inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmB3D"}