@bobfrankston/gcal 0.1.46 → 0.1.48
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.
- package/README.md +150 -96
- package/gcal.js +115 -115
- package/gcal.js.map +1 -1
- package/gcal.ts +124 -130
- package/glib/goauth.d.ts +13 -0
- package/glib/goauth.d.ts.map +1 -0
- package/glib/goauth.js +87 -0
- package/glib/goauth.js.map +1 -0
- package/glib/goauth.ts +111 -0
- package/glib/tasksapi.d.ts +23 -0
- package/glib/tasksapi.d.ts.map +1 -0
- package/glib/tasksapi.js +124 -0
- package/glib/tasksapi.js.map +1 -0
- package/glib/tasksapi.ts +166 -0
- package/glib/tasktypes.d.ts +47 -0
- package/glib/tasktypes.d.ts.map +1 -0
- package/glib/tasktypes.js +6 -0
- package/glib/tasktypes.js.map +1 -0
- package/glib/tasktypes.ts +51 -0
- package/gtask.d.ts +7 -0
- package/gtask.d.ts.map +1 -0
- package/gtask.js +429 -0
- package/gtask.js.map +1 -0
- package/gtask.ts +459 -0
- package/package.json +10 -4
package/gtask.js
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* gtask - Google Tasks CLI tool
|
|
4
|
+
* Sibling to gcal. Shares OAuth credentials, scopes, and token files.
|
|
5
|
+
*/
|
|
6
|
+
import { createInterface } from 'readline/promises';
|
|
7
|
+
import { loadConfig, saveConfig, parseDateTime, formatYMD, normalizeUser } from './glib/gutils.js';
|
|
8
|
+
import { setupAbortHandler, getAccessToken } from './glib/goauth.js';
|
|
9
|
+
import { listTaskLists, listTasks, createTask, patchTask, deleteTask, moveTask, clearCompleted, resolveTaskList } from './glib/tasksapi.js';
|
|
10
|
+
import pkg from './package.json' with { type: 'json' };
|
|
11
|
+
const VERSION = pkg.version;
|
|
12
|
+
const USAGE_SUMMARY = `gtask v${VERSION} - Google Tasks CLI
|
|
13
|
+
|
|
14
|
+
Usage: gtask <command> [options]
|
|
15
|
+
gtask help <command> Detailed help for a command
|
|
16
|
+
|
|
17
|
+
Commands:
|
|
18
|
+
add <title> [when] Add a task (optional due date)
|
|
19
|
+
list List open tasks
|
|
20
|
+
lists List all tasklists
|
|
21
|
+
done <id> Mark task completed (id prefix)
|
|
22
|
+
undone <id> Reopen a completed task
|
|
23
|
+
del <id> Delete a task
|
|
24
|
+
edit <id> [-t title] [-when date] [-n notes]
|
|
25
|
+
clear Remove all completed tasks from list
|
|
26
|
+
move <id> -l <list> Move task to another tasklist
|
|
27
|
+
help [command] Show help
|
|
28
|
+
|
|
29
|
+
Global options:
|
|
30
|
+
-u, -user <email> Set / use Google account
|
|
31
|
+
-l, -list <name|id> Tasklist (default: primary)
|
|
32
|
+
`;
|
|
33
|
+
const USAGE = {
|
|
34
|
+
add: `gtask add <title> [when] [-l <list>] [-n <notes>]
|
|
35
|
+
Add a task. <when> is an optional due date (date-only; time is ignored
|
|
36
|
+
by Google Tasks). Wrap multi-word titles in quotes.
|
|
37
|
+
|
|
38
|
+
Examples:
|
|
39
|
+
gtask add "Write report"
|
|
40
|
+
gtask add "Write report" friday
|
|
41
|
+
gtask add "Pay bills" "april 30" -n "rent + utilities"
|
|
42
|
+
gtask add "Call plumber" tomorrow -l Errands
|
|
43
|
+
`,
|
|
44
|
+
list: `gtask list [-l <list>] [-a] [-since <date>] [-till <date>]
|
|
45
|
+
List open tasks in a tasklist.
|
|
46
|
+
-a Include completed tasks
|
|
47
|
+
-since <date> Only tasks due from <date> forward
|
|
48
|
+
-till <date> Only tasks due up to <date>
|
|
49
|
+
|
|
50
|
+
Examples:
|
|
51
|
+
gtask list
|
|
52
|
+
gtask list -l Errands
|
|
53
|
+
gtask list -a
|
|
54
|
+
gtask list -since "april 1" -till "may 1"
|
|
55
|
+
`,
|
|
56
|
+
lists: `gtask lists
|
|
57
|
+
Show all tasklists with their IDs.
|
|
58
|
+
`,
|
|
59
|
+
done: `gtask done <id>
|
|
60
|
+
Mark a task completed. <id> is a prefix of the task's ID (as shown by
|
|
61
|
+
gtask list).
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
gtask done abc12345
|
|
65
|
+
`,
|
|
66
|
+
undone: `gtask undone <id>
|
|
67
|
+
Reopen a completed task (sets status back to needsAction).
|
|
68
|
+
Note: requires -a on a previous list, or knowing the id.
|
|
69
|
+
`,
|
|
70
|
+
del: `gtask del <id> [-l <list>]
|
|
71
|
+
Delete a task by id prefix.
|
|
72
|
+
`,
|
|
73
|
+
edit: `gtask edit <id> [-t <title>] [-when <date>] [-n <notes>] [-l <list>]
|
|
74
|
+
Update fields of an existing task. Only supplied fields change.
|
|
75
|
+
|
|
76
|
+
Examples:
|
|
77
|
+
gtask edit abc12345 -t "Write final report"
|
|
78
|
+
gtask edit abc12345 -when "next monday"
|
|
79
|
+
gtask edit abc12345 -n "draft attached"
|
|
80
|
+
`,
|
|
81
|
+
clear: `gtask clear [-l <list>]
|
|
82
|
+
Permanently remove all completed tasks from a tasklist.
|
|
83
|
+
`,
|
|
84
|
+
move: `gtask move <id> -l <destination-list>
|
|
85
|
+
Move a task to a different tasklist.
|
|
86
|
+
`,
|
|
87
|
+
help: `gtask help [command]
|
|
88
|
+
Show summary, or detailed help for a single command.
|
|
89
|
+
`
|
|
90
|
+
};
|
|
91
|
+
function showUsage(cmd) {
|
|
92
|
+
if (cmd && USAGE[cmd]) {
|
|
93
|
+
console.log(USAGE[cmd]);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (cmd) {
|
|
97
|
+
console.error(`Unknown command: ${cmd}\n`);
|
|
98
|
+
}
|
|
99
|
+
console.log(USAGE_SUMMARY);
|
|
100
|
+
}
|
|
101
|
+
function parseArgs(argv) {
|
|
102
|
+
const result = {
|
|
103
|
+
command: '',
|
|
104
|
+
args: [],
|
|
105
|
+
user: '',
|
|
106
|
+
list: '',
|
|
107
|
+
notes: '',
|
|
108
|
+
title: '',
|
|
109
|
+
when: '',
|
|
110
|
+
showAll: false,
|
|
111
|
+
help: false,
|
|
112
|
+
helpCmd: ''
|
|
113
|
+
};
|
|
114
|
+
const unknown = [];
|
|
115
|
+
let i = 0;
|
|
116
|
+
while (i < argv.length) {
|
|
117
|
+
const arg = argv[i];
|
|
118
|
+
switch (arg) {
|
|
119
|
+
case '-u':
|
|
120
|
+
case '-user':
|
|
121
|
+
case '--user':
|
|
122
|
+
result.user = argv[++i] || '';
|
|
123
|
+
break;
|
|
124
|
+
case '-l':
|
|
125
|
+
case '-list':
|
|
126
|
+
case '--list':
|
|
127
|
+
result.list = argv[++i] || '';
|
|
128
|
+
break;
|
|
129
|
+
case '-n':
|
|
130
|
+
case '-notes':
|
|
131
|
+
case '--notes':
|
|
132
|
+
result.notes = argv[++i] || '';
|
|
133
|
+
break;
|
|
134
|
+
case '-t':
|
|
135
|
+
case '-title':
|
|
136
|
+
case '--title':
|
|
137
|
+
result.title = argv[++i] || '';
|
|
138
|
+
break;
|
|
139
|
+
case '-when':
|
|
140
|
+
case '--when':
|
|
141
|
+
result.when = argv[++i] || '';
|
|
142
|
+
break;
|
|
143
|
+
case '-a':
|
|
144
|
+
case '-all':
|
|
145
|
+
case '--all':
|
|
146
|
+
result.showAll = true;
|
|
147
|
+
break;
|
|
148
|
+
case '-h':
|
|
149
|
+
case '-help':
|
|
150
|
+
case '--help':
|
|
151
|
+
result.help = true;
|
|
152
|
+
break;
|
|
153
|
+
case '-V':
|
|
154
|
+
case '-version':
|
|
155
|
+
case '--version':
|
|
156
|
+
console.log(`gtask v${VERSION}`);
|
|
157
|
+
process.exit(0);
|
|
158
|
+
default:
|
|
159
|
+
if (arg.startsWith('-')) {
|
|
160
|
+
unknown.push(arg);
|
|
161
|
+
}
|
|
162
|
+
else if (!result.command) {
|
|
163
|
+
result.command = arg;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
result.args.push(arg);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
i++;
|
|
170
|
+
}
|
|
171
|
+
if (unknown.length > 0) {
|
|
172
|
+
console.error(`Unknown options: ${unknown.join(', ')}`);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
if (result.command === 'help') {
|
|
176
|
+
result.help = true;
|
|
177
|
+
result.helpCmd = result.args[0] || '';
|
|
178
|
+
}
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
function resolveUser(cliUser) {
|
|
182
|
+
if (cliUser)
|
|
183
|
+
return normalizeUser(cliUser);
|
|
184
|
+
const config = loadConfig();
|
|
185
|
+
return config.lastUser || '';
|
|
186
|
+
}
|
|
187
|
+
function dueToYMD(due) {
|
|
188
|
+
if (!due)
|
|
189
|
+
return '';
|
|
190
|
+
return due.slice(0, 10);
|
|
191
|
+
}
|
|
192
|
+
function formatTaskRow(t) {
|
|
193
|
+
const id = (t.id || '').slice(0, 8);
|
|
194
|
+
const status = t.status === 'completed' ? '*' : ' ';
|
|
195
|
+
const due = dueToYMD(t.due);
|
|
196
|
+
const title = t.title || '(no title)';
|
|
197
|
+
const notes = (t.notes || '').replace(/\n/g, ' ').slice(0, 60);
|
|
198
|
+
return [status, id, due, title, notes];
|
|
199
|
+
}
|
|
200
|
+
function printTaskTable(tasks) {
|
|
201
|
+
if (tasks.length === 0) {
|
|
202
|
+
console.log('No tasks.');
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const headers = [' ', 'ID', 'Due', 'Title', 'Notes'];
|
|
206
|
+
const rows = tasks.map(formatTaskRow);
|
|
207
|
+
const widths = headers.map((h, i) => Math.max(h.length, ...rows.map(r => (r[i] || '').length)));
|
|
208
|
+
const last = headers.length - 1;
|
|
209
|
+
const pad = (s, i) => i === last ? s : s.padEnd(widths[i]);
|
|
210
|
+
console.log(headers.map(pad).join(' '));
|
|
211
|
+
console.log(widths.map(w => '-'.repeat(w)).join(' '));
|
|
212
|
+
for (const r of rows) {
|
|
213
|
+
console.log(r.map((c, i) => pad(c || '', i)).join(' '));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/** Build a date-only RFC3339 due value (Google ignores the time portion). */
|
|
217
|
+
function buildDue(whenArg) {
|
|
218
|
+
const d = parseDateTime(whenArg);
|
|
219
|
+
return `${formatYMD(d)}T00:00:00.000Z`;
|
|
220
|
+
}
|
|
221
|
+
async function findTask(accessToken, tasklistId, idPrefix, includeCompleted) {
|
|
222
|
+
const tasks = await listTasks(accessToken, tasklistId, {
|
|
223
|
+
showCompleted: includeCompleted,
|
|
224
|
+
showHidden: includeCompleted,
|
|
225
|
+
maxResults: 100
|
|
226
|
+
});
|
|
227
|
+
const matches = tasks.filter(t => t.id?.startsWith(idPrefix));
|
|
228
|
+
if (matches.length === 0)
|
|
229
|
+
throw new Error(`${idPrefix}: not found`);
|
|
230
|
+
if (matches.length > 1) {
|
|
231
|
+
const list = matches.map(t => ` ${(t.id || '').slice(0, 8)} - ${t.title}`).join('\n');
|
|
232
|
+
throw new Error(`${idPrefix}: ambiguous (${matches.length} matches)\n${list}`);
|
|
233
|
+
}
|
|
234
|
+
return matches[0];
|
|
235
|
+
}
|
|
236
|
+
async function main() {
|
|
237
|
+
setupAbortHandler();
|
|
238
|
+
const parsed = parseArgs(process.argv.slice(2));
|
|
239
|
+
if (parsed.user) {
|
|
240
|
+
const normalized = normalizeUser(parsed.user);
|
|
241
|
+
const config = loadConfig();
|
|
242
|
+
config.lastUser = normalized;
|
|
243
|
+
saveConfig(config);
|
|
244
|
+
console.log(`Default user set to: ${normalized}`);
|
|
245
|
+
if (!parsed.command)
|
|
246
|
+
process.exit(0);
|
|
247
|
+
}
|
|
248
|
+
if (parsed.help) {
|
|
249
|
+
showUsage(parsed.helpCmd);
|
|
250
|
+
process.exit(0);
|
|
251
|
+
}
|
|
252
|
+
if (!parsed.command) {
|
|
253
|
+
showUsage();
|
|
254
|
+
process.exit(1);
|
|
255
|
+
}
|
|
256
|
+
const user = resolveUser(parsed.user);
|
|
257
|
+
if (!user) {
|
|
258
|
+
console.error('No user configured. Use -u <email> to set default user.');
|
|
259
|
+
process.exit(1);
|
|
260
|
+
}
|
|
261
|
+
switch (parsed.command) {
|
|
262
|
+
case 'lists': {
|
|
263
|
+
const token = await getAccessToken(user, false);
|
|
264
|
+
const lists = await listTaskLists(token);
|
|
265
|
+
console.log(`\nTasklists (${lists.length}):\n`);
|
|
266
|
+
for (const l of lists) {
|
|
267
|
+
console.log(` ${l.title}`);
|
|
268
|
+
console.log(` ID: ${l.id}`);
|
|
269
|
+
}
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
case 'list': {
|
|
273
|
+
const token = await getAccessToken(user, false);
|
|
274
|
+
const tl = await resolveTaskList(token, parsed.list);
|
|
275
|
+
const tasks = await listTasks(token, tl.id, {
|
|
276
|
+
showCompleted: parsed.showAll,
|
|
277
|
+
showHidden: parsed.showAll,
|
|
278
|
+
maxResults: 100
|
|
279
|
+
});
|
|
280
|
+
console.log(`\n${tl.title} (${tasks.length}):\n`);
|
|
281
|
+
printTaskTable(tasks);
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
case 'add': {
|
|
285
|
+
if (parsed.args.length < 1) {
|
|
286
|
+
showUsage('add');
|
|
287
|
+
process.exit(1);
|
|
288
|
+
}
|
|
289
|
+
const [title, when] = parsed.args;
|
|
290
|
+
const task = { title };
|
|
291
|
+
if (when)
|
|
292
|
+
task.due = buildDue(when);
|
|
293
|
+
if (parsed.notes)
|
|
294
|
+
task.notes = parsed.notes;
|
|
295
|
+
const token = await getAccessToken(user, true);
|
|
296
|
+
const tl = await resolveTaskList(token, parsed.list);
|
|
297
|
+
const created = await createTask(token, task, tl.id);
|
|
298
|
+
console.log(`\nTask created in ${tl.title}: ${created.title}`);
|
|
299
|
+
if (created.due)
|
|
300
|
+
console.log(` Due: ${dueToYMD(created.due)}`);
|
|
301
|
+
if (created.notes)
|
|
302
|
+
console.log(` Notes: ${created.notes}`);
|
|
303
|
+
console.log(` ID: ${(created.id || '').slice(0, 8)}`);
|
|
304
|
+
break;
|
|
305
|
+
}
|
|
306
|
+
case 'done': {
|
|
307
|
+
if (parsed.args.length < 1) {
|
|
308
|
+
showUsage('done');
|
|
309
|
+
process.exit(1);
|
|
310
|
+
}
|
|
311
|
+
const token = await getAccessToken(user, true);
|
|
312
|
+
const tl = await resolveTaskList(token, parsed.list);
|
|
313
|
+
const task = await findTask(token, tl.id, parsed.args[0], false);
|
|
314
|
+
const updated = await patchTask(token, task.id, { status: 'completed' }, tl.id);
|
|
315
|
+
console.log(`Completed: ${updated.title}`);
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
case 'undone':
|
|
319
|
+
case 'reopen': {
|
|
320
|
+
if (parsed.args.length < 1) {
|
|
321
|
+
showUsage('undone');
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
const token = await getAccessToken(user, true);
|
|
325
|
+
const tl = await resolveTaskList(token, parsed.list);
|
|
326
|
+
const task = await findTask(token, tl.id, parsed.args[0], true);
|
|
327
|
+
const updated = await patchTask(token, task.id, { status: 'needsAction', completed: null }, tl.id);
|
|
328
|
+
console.log(`Reopened: ${updated.title}`);
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
case 'del':
|
|
332
|
+
case 'delete': {
|
|
333
|
+
if (parsed.args.length < 1) {
|
|
334
|
+
showUsage('del');
|
|
335
|
+
process.exit(1);
|
|
336
|
+
}
|
|
337
|
+
const token = await getAccessToken(user, true);
|
|
338
|
+
const tl = await resolveTaskList(token, parsed.list);
|
|
339
|
+
const task = await findTask(token, tl.id, parsed.args[0], parsed.showAll);
|
|
340
|
+
await deleteTask(token, task.id, tl.id);
|
|
341
|
+
console.log(`Deleted: ${task.title}`);
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
case 'edit': {
|
|
345
|
+
if (parsed.args.length < 1) {
|
|
346
|
+
showUsage('edit');
|
|
347
|
+
process.exit(1);
|
|
348
|
+
}
|
|
349
|
+
const patch = {};
|
|
350
|
+
if (parsed.title)
|
|
351
|
+
patch.title = parsed.title;
|
|
352
|
+
if (parsed.when)
|
|
353
|
+
patch.due = buildDue(parsed.when);
|
|
354
|
+
if (parsed.notes)
|
|
355
|
+
patch.notes = parsed.notes;
|
|
356
|
+
if (Object.keys(patch).length === 0) {
|
|
357
|
+
console.error('Nothing to change. Provide -t, -when, or -n.');
|
|
358
|
+
process.exit(1);
|
|
359
|
+
}
|
|
360
|
+
const token = await getAccessToken(user, true);
|
|
361
|
+
const tl = await resolveTaskList(token, parsed.list);
|
|
362
|
+
const task = await findTask(token, tl.id, parsed.args[0], parsed.showAll);
|
|
363
|
+
const updated = await patchTask(token, task.id, patch, tl.id);
|
|
364
|
+
console.log(`Updated: ${updated.title}`);
|
|
365
|
+
if (patch.due)
|
|
366
|
+
console.log(` Due: ${dueToYMD(updated.due)}`);
|
|
367
|
+
if (patch.notes)
|
|
368
|
+
console.log(` Notes: ${updated.notes}`);
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
case 'clear': {
|
|
372
|
+
const token = await getAccessToken(user, true);
|
|
373
|
+
const tl = await resolveTaskList(token, parsed.list);
|
|
374
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
375
|
+
const ans = (await rl.question(`Clear all completed tasks from "${tl.title}"? [y/N] `)).trim().toLowerCase();
|
|
376
|
+
rl.close();
|
|
377
|
+
if (ans !== 'y' && ans !== 'yes') {
|
|
378
|
+
console.log('Cancelled.');
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
await clearCompleted(token, tl.id);
|
|
382
|
+
console.log(`Cleared completed tasks from ${tl.title}.`);
|
|
383
|
+
break;
|
|
384
|
+
}
|
|
385
|
+
case 'move': {
|
|
386
|
+
if (parsed.args.length < 1 || !parsed.list) {
|
|
387
|
+
showUsage('move');
|
|
388
|
+
process.exit(1);
|
|
389
|
+
}
|
|
390
|
+
const token = await getAccessToken(user, true);
|
|
391
|
+
const lists = await listTaskLists(token);
|
|
392
|
+
const dest = lists.find(l => (l.title || '').toLowerCase() === parsed.list.toLowerCase() || l.id === parsed.list);
|
|
393
|
+
if (!dest) {
|
|
394
|
+
console.error(`Destination tasklist not found: ${parsed.list}`);
|
|
395
|
+
process.exit(1);
|
|
396
|
+
}
|
|
397
|
+
// Source: must locate task across all lists since we don't know which
|
|
398
|
+
let srcList = '';
|
|
399
|
+
let task;
|
|
400
|
+
for (const l of lists) {
|
|
401
|
+
const ts = await listTasks(token, l.id, { showCompleted: true, showHidden: true });
|
|
402
|
+
const m = ts.find(t => t.id?.startsWith(parsed.args[0]));
|
|
403
|
+
if (m) {
|
|
404
|
+
task = m;
|
|
405
|
+
srcList = l.id;
|
|
406
|
+
break;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
if (!task) {
|
|
410
|
+
console.error(`${parsed.args[0]}: not found in any tasklist`);
|
|
411
|
+
process.exit(1);
|
|
412
|
+
}
|
|
413
|
+
const moved = await moveTask(token, task.id, srcList, dest.id);
|
|
414
|
+
console.log(`Moved "${moved.title}" to ${dest.title}`);
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
default:
|
|
418
|
+
console.error(`Unknown command: ${parsed.command}`);
|
|
419
|
+
showUsage();
|
|
420
|
+
process.exit(1);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (import.meta.main) {
|
|
424
|
+
main().catch(e => {
|
|
425
|
+
console.error(`Error: ${e.message}`);
|
|
426
|
+
process.exit(1);
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=gtask.js.map
|
package/gtask.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gtask.js","sourceRoot":"","sources":["gtask.ts"],"names":[],"mappings":"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"}
|