@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,23 @@
1
+ import { getApi } from '../lib/api/core.js';
2
+ import { listTasksForProject } from '../lib/task-list.js';
3
+ export function registerInboxCommand(program) {
4
+ program
5
+ .command('inbox')
6
+ .description('List tasks in Inbox')
7
+ .option('--priority <p1-p4>', 'Filter by priority')
8
+ .option('--due <date>', 'Filter by due date (today, overdue, or YYYY-MM-DD)')
9
+ .option('--limit <n>', 'Limit number of results (default: 300)')
10
+ .option('--cursor <cursor>', 'Continue from cursor')
11
+ .option('--all', 'Fetch all results (no limit)')
12
+ .option('--json', 'Output as JSON')
13
+ .option('--ndjson', 'Output as newline-delimited JSON')
14
+ .option('--full', 'Include all fields in JSON output')
15
+ .option('--raw', 'Disable markdown rendering')
16
+ .option('--show-urls', 'Show web app URLs for each task')
17
+ .action(async (options) => {
18
+ const api = await getApi();
19
+ const user = await api.getUser();
20
+ await listTasksForProject(user.inboxProjectId, options);
21
+ });
22
+ }
23
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAwB,MAAM,qBAAqB,CAAA;AAE/E,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACjD,OAAO;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;SAClD,MAAM,CAAC,cAAc,EAAE,oDAAoD,CAAC;SAC5E,MAAM,CAAC,aAAa,EAAE,wCAAwC,CAAC;SAC/D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,OAAO,EAAE,4BAA4B,CAAC;SAC7C,MAAM,CAAC,aAAa,EAAE,iCAAiC,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;QAC1B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAA;QAChC,MAAM,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerLabelCommand(program: Command): void;
3
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/commands/label.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwMnC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE3D"}
@@ -0,0 +1,196 @@
1
+ import chalk from 'chalk';
2
+ import { getApi } from '../lib/api/core.js';
3
+ import { openInBrowser } from '../lib/browser.js';
4
+ import { formatError, formatNextCursorFooter, formatPaginatedJson, formatPaginatedNdjson, } from '../lib/output.js';
5
+ import { LIMITS, paginate } from '../lib/pagination.js';
6
+ import { extractId, isIdRef } from '../lib/refs.js';
7
+ import { labelUrl } from '../lib/urls.js';
8
+ async function listLabels(options) {
9
+ const api = await getApi();
10
+ const targetLimit = options.all
11
+ ? Number.MAX_SAFE_INTEGER
12
+ : options.limit
13
+ ? parseInt(options.limit, 10)
14
+ : LIMITS.labels;
15
+ const { results: labels, nextCursor } = await paginate((cursor, limit) => api.getLabels({ cursor: cursor ?? undefined, limit }), { limit: targetLimit });
16
+ if (options.json) {
17
+ console.log(formatPaginatedJson({ results: labels, nextCursor }, 'label', options.full, options.showUrls));
18
+ return;
19
+ }
20
+ if (options.ndjson) {
21
+ console.log(formatPaginatedNdjson({ results: labels, nextCursor }, 'label', options.full, options.showUrls));
22
+ return;
23
+ }
24
+ if (labels.length === 0) {
25
+ console.log('No labels found.');
26
+ return;
27
+ }
28
+ for (const label of labels) {
29
+ const id = chalk.dim(label.id);
30
+ const name = label.isFavorite ? chalk.yellow(`@${label.name}`) : `@${label.name}`;
31
+ console.log(`${id} ${name}`);
32
+ if (options.showUrls) {
33
+ console.log(` ${chalk.dim(labelUrl(label.id))}`);
34
+ }
35
+ }
36
+ console.log(formatNextCursorFooter(nextCursor));
37
+ }
38
+ async function createLabel(options) {
39
+ const api = await getApi();
40
+ const label = await api.addLabel({
41
+ name: options.name,
42
+ color: options.color,
43
+ isFavorite: options.favorite,
44
+ });
45
+ console.log(`Created: @${label.name}`);
46
+ console.log(chalk.dim(`ID: ${label.id}`));
47
+ }
48
+ async function deleteLabel(nameOrId, options) {
49
+ const api = await getApi();
50
+ const { results: labels } = await api.getLabels();
51
+ let labelId;
52
+ let labelName = nameOrId;
53
+ if (isIdRef(nameOrId)) {
54
+ labelId = extractId(nameOrId);
55
+ const label = labels.find((l) => l.id === labelId);
56
+ if (label)
57
+ labelName = label.name;
58
+ }
59
+ else {
60
+ const name = nameOrId.startsWith('@') ? nameOrId.slice(1) : nameOrId;
61
+ const label = labels.find((l) => l.name.toLowerCase() === name.toLowerCase());
62
+ if (!label) {
63
+ throw new Error(formatError('LABEL_NOT_FOUND', `Label "${nameOrId}" not found.`));
64
+ }
65
+ labelId = label.id;
66
+ labelName = label.name;
67
+ }
68
+ if (!options.yes) {
69
+ console.log(`Would delete: @${labelName}`);
70
+ console.log('Use --yes to confirm.');
71
+ return;
72
+ }
73
+ await api.deleteLabel(labelId);
74
+ console.log(`Deleted: @${labelName}`);
75
+ }
76
+ async function updateLabel(nameOrId, options) {
77
+ const api = await getApi();
78
+ const { results: labels } = await api.getLabels();
79
+ let labelId;
80
+ let labelName;
81
+ if (isIdRef(nameOrId)) {
82
+ labelId = extractId(nameOrId);
83
+ const label = labels.find((l) => l.id === labelId);
84
+ if (!label) {
85
+ throw new Error(formatError('LABEL_NOT_FOUND', 'Label not found.'));
86
+ }
87
+ labelName = label.name;
88
+ }
89
+ else {
90
+ const name = nameOrId.startsWith('@') ? nameOrId.slice(1) : nameOrId;
91
+ const label = labels.find((l) => l.name.toLowerCase() === name.toLowerCase());
92
+ if (!label) {
93
+ throw new Error(formatError('LABEL_NOT_FOUND', `Label "${nameOrId}" not found.`));
94
+ }
95
+ labelId = label.id;
96
+ labelName = label.name;
97
+ }
98
+ const args = {};
99
+ if (options.name)
100
+ args.name = options.name;
101
+ if (options.color)
102
+ args.color = options.color;
103
+ if (options.favorite === true)
104
+ args.isFavorite = true;
105
+ if (options.favorite === false)
106
+ args.isFavorite = false;
107
+ if (Object.keys(args).length === 0) {
108
+ throw new Error(formatError('NO_CHANGES', 'No changes specified.'));
109
+ }
110
+ const updated = await api.updateLabel(labelId, args);
111
+ console.log(`Updated: @${labelName}${options.name ? ` → @${updated.name}` : ''}`);
112
+ }
113
+ async function resolveLabelRef(nameOrId) {
114
+ const api = await getApi();
115
+ const { results: labels } = await api.getLabels();
116
+ if (isIdRef(nameOrId)) {
117
+ const id = extractId(nameOrId);
118
+ const label = labels.find((l) => l.id === id);
119
+ if (!label) {
120
+ throw new Error(formatError('LABEL_NOT_FOUND', 'Label not found.'));
121
+ }
122
+ return label;
123
+ }
124
+ const name = nameOrId.startsWith('@') ? nameOrId.slice(1) : nameOrId;
125
+ const lower = name.toLowerCase();
126
+ const exact = labels.find((l) => l.name.toLowerCase() === lower);
127
+ if (exact)
128
+ return exact;
129
+ throw new Error(formatError('LABEL_NOT_FOUND', `Label "${nameOrId}" not found.`));
130
+ }
131
+ async function browseLabel(nameOrId) {
132
+ const label = await resolveLabelRef(nameOrId);
133
+ await openInBrowser(labelUrl(label.id));
134
+ }
135
+ export function registerLabelCommand(program) {
136
+ const label = program.command('label').description('Manage labels');
137
+ label
138
+ .command('list')
139
+ .description('List all labels')
140
+ .option('--limit <n>', 'Limit number of results (default: 300)')
141
+ .option('--all', 'Fetch all results (no limit)')
142
+ .option('--json', 'Output as JSON')
143
+ .option('--ndjson', 'Output as newline-delimited JSON')
144
+ .option('--full', 'Include all fields in JSON output')
145
+ .option('--show-urls', 'Show web app URLs for each label')
146
+ .action(listLabels);
147
+ const createCmd = label
148
+ .command('create')
149
+ .description('Create a label')
150
+ .option('--name <name>', 'Label name (required)')
151
+ .option('--color <color>', 'Label color')
152
+ .option('--favorite', 'Mark as favorite')
153
+ .action((options) => {
154
+ if (!options.name) {
155
+ createCmd.help();
156
+ return;
157
+ }
158
+ return createLabel(options);
159
+ });
160
+ const deleteCmd = label
161
+ .command('delete [name]')
162
+ .description('Delete a label')
163
+ .option('--yes', 'Confirm deletion')
164
+ .action((name, options) => {
165
+ if (!name) {
166
+ deleteCmd.help();
167
+ return;
168
+ }
169
+ return deleteLabel(name, options);
170
+ });
171
+ const updateCmd = label
172
+ .command('update [ref]')
173
+ .description('Update a label')
174
+ .option('--name <name>', 'New name')
175
+ .option('--color <color>', 'New color')
176
+ .option('--favorite', 'Mark as favorite')
177
+ .option('--no-favorite', 'Remove from favorites')
178
+ .action((ref, options) => {
179
+ if (!ref) {
180
+ updateCmd.help();
181
+ return;
182
+ }
183
+ return updateLabel(ref, options);
184
+ });
185
+ const browseCmd = label
186
+ .command('browse [ref]')
187
+ .description('Open label in browser')
188
+ .action((ref) => {
189
+ if (!ref) {
190
+ browseCmd.help();
191
+ return;
192
+ }
193
+ return browseLabel(ref);
194
+ });
195
+ }
196
+ //# sourceMappingURL=label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.js","sourceRoot":"","sources":["../../src/commands/label.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerNotificationCommand(program: Command): void;
3
+ //# sourceMappingURL=notification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../src/commands/notification.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAuTnC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmElE"}
@@ -0,0 +1,274 @@
1
+ import chalk from 'chalk';
2
+ import { acceptInvitation, fetchNotifications, markAllNotificationsRead, markNotificationRead, markNotificationUnread, rejectInvitation, } from '../lib/api/notifications.js';
3
+ import { formatError, formatPaginatedJson, formatPaginatedNdjson } from '../lib/output.js';
4
+ import { extractId, isIdRef } from '../lib/refs.js';
5
+ function formatRelativeTime(dateStr) {
6
+ const date = new Date(dateStr);
7
+ const now = new Date();
8
+ const diffMs = now.getTime() - date.getTime();
9
+ const diffMin = Math.floor(diffMs / 60000);
10
+ const diffHour = Math.floor(diffMs / 3600000);
11
+ const diffDay = Math.floor(diffMs / 86400000);
12
+ if (diffMin < 1)
13
+ return 'just now';
14
+ if (diffMin < 60)
15
+ return `${diffMin}m ago`;
16
+ if (diffHour < 24)
17
+ return `${diffHour}h ago`;
18
+ if (diffDay < 7)
19
+ return `${diffDay}d ago`;
20
+ return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
21
+ }
22
+ function formatNotificationDetails(n) {
23
+ switch (n.type) {
24
+ case 'share_invitation_sent':
25
+ return `${n.fromUser?.name || 'Someone'} invited you to "${n.project?.name || 'a project'}"`;
26
+ case 'share_invitation_accepted':
27
+ return `${n.fromUser?.name || 'Someone'} accepted your invite to "${n.project?.name || 'a project'}"`;
28
+ case 'share_invitation_rejected':
29
+ return `${n.fromUser?.name || 'Someone'} rejected your invite to "${n.project?.name || 'a project'}"`;
30
+ case 'user_left_project':
31
+ return `${n.fromUser?.name || 'Someone'} left "${n.project?.name || 'a project'}"`;
32
+ case 'user_removed_from_project':
33
+ return `You were removed from "${n.project?.name || 'a project'}"`;
34
+ case 'item_assigned':
35
+ return `"${n.task?.content || 'A task'}" assigned to you${n.project?.name ? ` in ${n.project.name}` : ''}`;
36
+ case 'item_completed':
37
+ return `"${n.task?.content || 'A task'}" was completed`;
38
+ case 'item_uncompleted':
39
+ return `"${n.task?.content || 'A task'}" was uncompleted`;
40
+ case 'note_added':
41
+ return `Comment on "${n.task?.content || 'a task'}"${n.fromUser?.name ? ` by ${n.fromUser.name}` : ''}`;
42
+ case 'project_archived':
43
+ return `"${n.project?.name || 'A project'}" was archived`;
44
+ case 'project_unarchived':
45
+ return `"${n.project?.name || 'A project'}" was unarchived`;
46
+ case 'karma_daily_goal':
47
+ return 'Daily karma goal reached';
48
+ case 'karma_weekly_goal':
49
+ return 'Weekly karma goal reached';
50
+ case 'biz_trial_will_end':
51
+ return 'Business trial ending soon';
52
+ case 'biz_payment_failed':
53
+ return 'Payment failed';
54
+ case 'biz_account_disabled':
55
+ return 'Account disabled';
56
+ default:
57
+ return n.type;
58
+ }
59
+ }
60
+ function stripInvitationSecret(n) {
61
+ const { invitationSecret: _, ...rest } = n;
62
+ return rest;
63
+ }
64
+ async function listNotifications(options) {
65
+ if (options.unread && options.read) {
66
+ throw new Error(formatError('INVALID_OPTIONS', 'Cannot specify both --read and --unread'));
67
+ }
68
+ // Note: All filtering (type, read state, pagination) is done client-side because
69
+ // the Todoist Sync API v9 live_notifications endpoint doesn't support server-side
70
+ // filtering or pagination - it returns all notifications in a single response.
71
+ let notifications = await fetchNotifications();
72
+ if (options.type) {
73
+ const types = options.type.split(',').map((t) => t.trim());
74
+ notifications = notifications.filter((n) => types.includes(n.type));
75
+ }
76
+ if (options.unread) {
77
+ notifications = notifications.filter((n) => n.isUnread);
78
+ }
79
+ else if (options.read) {
80
+ notifications = notifications.filter((n) => !n.isUnread);
81
+ }
82
+ const totalCount = notifications.length;
83
+ const offset = options.offset ? parseInt(options.offset, 10) : 0;
84
+ const limit = options.limit ? parseInt(options.limit, 10) : 10;
85
+ const hasMore = totalCount > offset + limit;
86
+ notifications = notifications.slice(offset, offset + limit);
87
+ const sanitized = notifications.map(stripInvitationSecret);
88
+ if (options.json) {
89
+ console.log(formatPaginatedJson({ results: sanitized, nextCursor: null }, 'notification', options.full, false));
90
+ return;
91
+ }
92
+ if (options.ndjson) {
93
+ console.log(formatPaginatedNdjson({ results: sanitized, nextCursor: null }, 'notification', options.full, false));
94
+ return;
95
+ }
96
+ if (notifications.length === 0) {
97
+ console.log('No notifications.');
98
+ return;
99
+ }
100
+ const blocks = notifications.map((n) => {
101
+ const unreadMarker = n.isUnread ? chalk.bold('●') : ' ';
102
+ const details = formatNotificationDetails(n);
103
+ const line1 = n.isUnread
104
+ ? `${unreadMarker} ${chalk.bold(details)}`
105
+ : `${unreadMarker} ${details}`;
106
+ const metaParts = [
107
+ chalk.dim(`id:${n.id}`),
108
+ chalk.cyan(n.type),
109
+ chalk.dim(formatRelativeTime(n.createdAt)),
110
+ ];
111
+ const line2 = ` ${metaParts.join(' ')}`;
112
+ return `${line1}\n${line2}`;
113
+ });
114
+ console.log(blocks.join('\n\n'));
115
+ if (hasMore) {
116
+ const nextOffset = offset + limit;
117
+ console.log(chalk.dim(`\n... showing ${offset + 1}-${offset + notifications.length} of ${totalCount}. Use --offset ${nextOffset} to see more.`));
118
+ }
119
+ }
120
+ async function resolveNotification(idRef) {
121
+ const notifications = await fetchNotifications();
122
+ let id;
123
+ if (isIdRef(idRef)) {
124
+ id = extractId(idRef);
125
+ }
126
+ else {
127
+ id = idRef;
128
+ }
129
+ const notification = notifications.find((n) => n.id === id);
130
+ if (!notification) {
131
+ throw new Error(formatError('NOTIFICATION_NOT_FOUND', `Notification not found: ${idRef}`));
132
+ }
133
+ return notification;
134
+ }
135
+ async function viewNotification(idRef, options) {
136
+ const n = await resolveNotification(idRef);
137
+ if (options.json) {
138
+ console.log(JSON.stringify(stripInvitationSecret(n), null, 2));
139
+ return;
140
+ }
141
+ console.log(`Type: ${n.type}`);
142
+ if (n.fromUser?.name || n.fromUser?.email) {
143
+ const fromParts = [n.fromUser.name, n.fromUser.email].filter(Boolean);
144
+ console.log(`From: ${fromParts.join(' - ')}`);
145
+ }
146
+ if (n.project?.name) {
147
+ console.log(`Project: ${n.project.name}`);
148
+ }
149
+ if (n.task?.content) {
150
+ console.log(`Task: ${n.task.content}`);
151
+ }
152
+ const date = new Date(n.createdAt);
153
+ console.log(`Received: ${formatRelativeTime(n.createdAt)} (${date.toLocaleString()})`);
154
+ console.log(`Status: ${n.isUnread ? 'Unread' : 'Read'}`);
155
+ console.log('');
156
+ console.log(formatNotificationDetails(n));
157
+ if (n.type === 'share_invitation_sent') {
158
+ console.log('');
159
+ console.log('Actions:');
160
+ console.log(` td notification accept id:${n.id}`);
161
+ console.log(` td notification reject id:${n.id}`);
162
+ }
163
+ }
164
+ async function acceptNotification(idRef) {
165
+ const n = await resolveNotification(idRef);
166
+ if (n.type !== 'share_invitation_sent') {
167
+ throw new Error(formatError('INVALID_NOTIFICATION_TYPE', `Cannot accept: notification is ${n.type}, not a share invitation`));
168
+ }
169
+ if (!n.invitationId || !n.invitationSecret) {
170
+ throw new Error(formatError('MISSING_INVITATION_DATA', 'Invitation data missing from notification'));
171
+ }
172
+ await acceptInvitation(n.invitationId, n.invitationSecret);
173
+ await markNotificationRead(n.id);
174
+ console.log(`Accepted invitation to "${n.project?.name ?? 'project'}" from ${n.fromUser?.name ?? 'unknown'}.`);
175
+ }
176
+ async function rejectNotification(idRef) {
177
+ const n = await resolveNotification(idRef);
178
+ if (n.type !== 'share_invitation_sent') {
179
+ throw new Error(formatError('INVALID_NOTIFICATION_TYPE', `Cannot reject: notification is ${n.type}, not a share invitation`));
180
+ }
181
+ if (!n.invitationId || !n.invitationSecret) {
182
+ throw new Error(formatError('MISSING_INVITATION_DATA', 'Invitation data missing from notification'));
183
+ }
184
+ await rejectInvitation(n.invitationId, n.invitationSecret);
185
+ await markNotificationRead(n.id);
186
+ console.log(`Rejected invitation to "${n.project?.name ?? 'project'}" from ${n.fromUser?.name ?? 'unknown'}.`);
187
+ }
188
+ async function markRead(idRef, options) {
189
+ if (options.all) {
190
+ if (!options.yes) {
191
+ console.log('Use --all --yes to mark all notifications as read.');
192
+ return;
193
+ }
194
+ const notifications = await fetchNotifications();
195
+ const unreadCount = notifications.filter((n) => n.isUnread).length;
196
+ await markAllNotificationsRead();
197
+ console.log(`Marked ${unreadCount} notification${unreadCount === 1 ? '' : 's'} as read.`);
198
+ return;
199
+ }
200
+ if (!idRef) {
201
+ throw new Error(formatError('MISSING_ID', 'Provide a notification ID or use --all'));
202
+ }
203
+ const n = await resolveNotification(idRef);
204
+ await markNotificationRead(n.id);
205
+ console.log('Marked as read.');
206
+ }
207
+ async function markUnread(idRef) {
208
+ const n = await resolveNotification(idRef);
209
+ await markNotificationUnread(n.id);
210
+ console.log('Marked as unread.');
211
+ }
212
+ export function registerNotificationCommand(program) {
213
+ const notification = program.command('notification').description('Manage notifications');
214
+ notification
215
+ .command('list')
216
+ .description('List notifications')
217
+ .option('--type <types>', 'Filter by type (comma-separated)')
218
+ .option('--unread', 'Only show unread notifications')
219
+ .option('--read', 'Only show read notifications')
220
+ .option('--limit <n>', 'Max notifications to show (default: 10)')
221
+ .option('--offset <n>', 'Skip first N notifications')
222
+ .option('--json', 'Output as JSON')
223
+ .option('--ndjson', 'Output as newline-delimited JSON')
224
+ .option('--full', 'Include all fields in JSON output')
225
+ .action(listNotifications);
226
+ const viewCmd = notification
227
+ .command('view [id]')
228
+ .description('View notification details')
229
+ .option('--json', 'Output as JSON')
230
+ .action((id, options) => {
231
+ if (!id) {
232
+ viewCmd.help();
233
+ return;
234
+ }
235
+ return viewNotification(id, options);
236
+ });
237
+ const acceptCmd = notification
238
+ .command('accept [id]')
239
+ .description('Accept a share invitation')
240
+ .action((id) => {
241
+ if (!id) {
242
+ acceptCmd.help();
243
+ return;
244
+ }
245
+ return acceptNotification(id);
246
+ });
247
+ const rejectCmd = notification
248
+ .command('reject [id]')
249
+ .description('Reject a share invitation')
250
+ .action((id) => {
251
+ if (!id) {
252
+ rejectCmd.help();
253
+ return;
254
+ }
255
+ return rejectNotification(id);
256
+ });
257
+ notification
258
+ .command('read [id]')
259
+ .description('Mark notification(s) as read')
260
+ .option('--all', 'Mark all notifications as read')
261
+ .option('--yes', 'Confirm marking all as read')
262
+ .action((id, options) => markRead(id, options));
263
+ const unreadCmd = notification
264
+ .command('unread [id]')
265
+ .description('Mark notification as unread')
266
+ .action((id) => {
267
+ if (!id) {
268
+ unreadCmd.help();
269
+ return;
270
+ }
271
+ return markUnread(id);
272
+ });
273
+ }
274
+ //# sourceMappingURL=notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/commands/notification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerProjectCommand(program: Command): void;
3
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqWnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkH7D"}