@tjboudreaux/gtcli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -0
- package/dist/account-storage.d.ts +21 -0
- package/dist/account-storage.d.ts.map +1 -0
- package/dist/account-storage.js +96 -0
- package/dist/account-storage.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +405 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth-flow.d.ts +27 -0
- package/dist/oauth-flow.d.ts.map +1 -0
- package/dist/oauth-flow.js +156 -0
- package/dist/oauth-flow.js.map +1 -0
- package/dist/services/base-service.d.ts +13 -0
- package/dist/services/base-service.d.ts.map +1 -0
- package/dist/services/base-service.js +40 -0
- package/dist/services/base-service.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +4 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/task-service.d.ts +19 -0
- package/dist/services/task-service.d.ts.map +1 -0
- package/dist/services/task-service.js +152 -0
- package/dist/services/task-service.js.map +1 -0
- package/dist/services/tasklist-service.d.ts +15 -0
- package/dist/services/tasklist-service.d.ts.map +1 -0
- package/dist/services/tasklist-service.js +76 -0
- package/dist/services/tasklist-service.js.map +1 -0
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { OAuth2Client } from "google-auth-library";
|
|
2
|
+
import { AccountStorage } from "../account-storage.js";
|
|
3
|
+
export class BaseService {
|
|
4
|
+
accountStorage;
|
|
5
|
+
clients = new Map();
|
|
6
|
+
constructor(accountStorage) {
|
|
7
|
+
this.accountStorage = accountStorage ?? new AccountStorage();
|
|
8
|
+
}
|
|
9
|
+
getOAuth2Client(email) {
|
|
10
|
+
if (!this.clients.has(email)) {
|
|
11
|
+
const account = this.accountStorage.getAccount(email);
|
|
12
|
+
if (!account) {
|
|
13
|
+
throw new Error(`Account '${email}' not found`);
|
|
14
|
+
}
|
|
15
|
+
const client = this.createOAuth2Client(account);
|
|
16
|
+
this.clients.set(email, client);
|
|
17
|
+
}
|
|
18
|
+
return this.clients.get(email);
|
|
19
|
+
}
|
|
20
|
+
createOAuth2Client(account) {
|
|
21
|
+
const oauth2Client = new OAuth2Client(account.oauth2.clientId, account.oauth2.clientSecret, "http://localhost");
|
|
22
|
+
oauth2Client.setCredentials({
|
|
23
|
+
refresh_token: account.oauth2.refreshToken,
|
|
24
|
+
access_token: account.oauth2.accessToken,
|
|
25
|
+
});
|
|
26
|
+
return oauth2Client;
|
|
27
|
+
}
|
|
28
|
+
clearClientCache(email) {
|
|
29
|
+
if (email) {
|
|
30
|
+
this.clients.delete(email);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this.clients.clear();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
getAccountStorage() {
|
|
37
|
+
return this.accountStorage;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=base-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-service.js","sourceRoot":"","sources":["../../src/services/base-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,OAAgB,WAAW;IACtB,cAAc,CAAiB;IAC/B,OAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;IAEzD,YAAY,cAA+B;QAC1C,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,cAAc,EAAE,CAAC;IAC9D,CAAC;IAES,eAAe,CAAC,KAAa;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IACjC,CAAC;IAES,kBAAkB,CAAC,OAAgB;QAC5C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QAEhH,YAAY,CAAC,cAAc,CAAC;YAC3B,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY;YAC1C,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;SACxC,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,gBAAgB,CAAC,KAAc;QAC9B,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACF,CAAC;IAED,iBAAiB;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CreateTaskOptions, MoveTaskOptions, Task, TaskOptions, TasksResult, UpdateTaskOptions } from "../types.js";
|
|
2
|
+
import { BaseService } from "./base-service.js";
|
|
3
|
+
export declare class TaskService extends BaseService {
|
|
4
|
+
private tasksClients;
|
|
5
|
+
private getTasksClient;
|
|
6
|
+
list(email: string, taskListId: string, options?: TaskOptions): Promise<TasksResult>;
|
|
7
|
+
get(email: string, taskListId: string, taskId: string): Promise<Task>;
|
|
8
|
+
create(email: string, taskListId: string, options: CreateTaskOptions): Promise<Task>;
|
|
9
|
+
update(email: string, taskListId: string, taskId: string, options: UpdateTaskOptions): Promise<Task>;
|
|
10
|
+
delete(email: string, taskListId: string, taskId: string): Promise<void>;
|
|
11
|
+
move(email: string, taskListId: string, taskId: string, options?: MoveTaskOptions): Promise<Task>;
|
|
12
|
+
clear(email: string, taskListId: string): Promise<void>;
|
|
13
|
+
complete(email: string, taskListId: string, taskId: string): Promise<Task>;
|
|
14
|
+
uncomplete(email: string, taskListId: string, taskId: string): Promise<Task>;
|
|
15
|
+
generateWebUrl(taskListId: string, taskId?: string): string;
|
|
16
|
+
private mapTask;
|
|
17
|
+
clearTasksClientCache(email?: string): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=task-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-service.d.ts","sourceRoot":"","sources":["../../src/services/task-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,iBAAiB,EACjB,eAAe,EACf,IAAI,EACJ,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,WAAY,SAAQ,WAAW;IAC3C,OAAO,CAAC,YAAY,CAA0C;IAE9D,OAAO,CAAC,cAAc;IAShB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BxF,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAQ3D,OAAO,CAAC,OAAO;IAsBf,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAQ3C"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { google } from "googleapis";
|
|
2
|
+
import { BaseService } from "./base-service.js";
|
|
3
|
+
export class TaskService extends BaseService {
|
|
4
|
+
tasksClients = new Map();
|
|
5
|
+
getTasksClient(email) {
|
|
6
|
+
if (!this.tasksClients.has(email)) {
|
|
7
|
+
const auth = this.getOAuth2Client(email);
|
|
8
|
+
const tasks = google.tasks({ version: "v1", auth });
|
|
9
|
+
this.tasksClients.set(email, tasks);
|
|
10
|
+
}
|
|
11
|
+
return this.tasksClients.get(email);
|
|
12
|
+
}
|
|
13
|
+
async list(email, taskListId, options = {}) {
|
|
14
|
+
const client = this.getTasksClient(email);
|
|
15
|
+
const params = {
|
|
16
|
+
tasklist: taskListId,
|
|
17
|
+
maxResults: options.maxResults ?? 100,
|
|
18
|
+
showCompleted: options.showCompleted ?? false,
|
|
19
|
+
showDeleted: options.showDeleted ?? false,
|
|
20
|
+
showHidden: options.showHidden ?? false,
|
|
21
|
+
};
|
|
22
|
+
if (options.pageToken)
|
|
23
|
+
params.pageToken = options.pageToken;
|
|
24
|
+
if (options.dueMin)
|
|
25
|
+
params.dueMin = options.dueMin;
|
|
26
|
+
if (options.dueMax)
|
|
27
|
+
params.dueMax = options.dueMax;
|
|
28
|
+
if (options.completedMin)
|
|
29
|
+
params.completedMin = options.completedMin;
|
|
30
|
+
if (options.completedMax)
|
|
31
|
+
params.completedMax = options.completedMax;
|
|
32
|
+
if (options.updatedMin)
|
|
33
|
+
params.updatedMin = options.updatedMin;
|
|
34
|
+
const response = await client.tasks.list(params);
|
|
35
|
+
return {
|
|
36
|
+
items: (response.data.items ?? []).map(this.mapTask),
|
|
37
|
+
nextPageToken: response.data.nextPageToken ?? undefined,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async get(email, taskListId, taskId) {
|
|
41
|
+
const client = this.getTasksClient(email);
|
|
42
|
+
const response = await client.tasks.get({
|
|
43
|
+
tasklist: taskListId,
|
|
44
|
+
task: taskId,
|
|
45
|
+
});
|
|
46
|
+
return this.mapTask(response.data);
|
|
47
|
+
}
|
|
48
|
+
async create(email, taskListId, options) {
|
|
49
|
+
const client = this.getTasksClient(email);
|
|
50
|
+
const params = {
|
|
51
|
+
tasklist: taskListId,
|
|
52
|
+
requestBody: {
|
|
53
|
+
title: options.title,
|
|
54
|
+
notes: options.notes,
|
|
55
|
+
due: options.due,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
if (options.parent)
|
|
59
|
+
params.parent = options.parent;
|
|
60
|
+
if (options.previous)
|
|
61
|
+
params.previous = options.previous;
|
|
62
|
+
const response = await client.tasks.insert(params);
|
|
63
|
+
return this.mapTask(response.data);
|
|
64
|
+
}
|
|
65
|
+
async update(email, taskListId, taskId, options) {
|
|
66
|
+
const client = this.getTasksClient(email);
|
|
67
|
+
const currentTask = await this.get(email, taskListId, taskId);
|
|
68
|
+
const requestBody = {
|
|
69
|
+
id: taskId,
|
|
70
|
+
title: options.title ?? currentTask.title,
|
|
71
|
+
notes: options.notes ?? currentTask.notes,
|
|
72
|
+
due: options.due ?? currentTask.due,
|
|
73
|
+
status: options.status ?? currentTask.status,
|
|
74
|
+
};
|
|
75
|
+
const response = await client.tasks.update({
|
|
76
|
+
tasklist: taskListId,
|
|
77
|
+
task: taskId,
|
|
78
|
+
requestBody,
|
|
79
|
+
});
|
|
80
|
+
return this.mapTask(response.data);
|
|
81
|
+
}
|
|
82
|
+
async delete(email, taskListId, taskId) {
|
|
83
|
+
const client = this.getTasksClient(email);
|
|
84
|
+
await client.tasks.delete({
|
|
85
|
+
tasklist: taskListId,
|
|
86
|
+
task: taskId,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async move(email, taskListId, taskId, options = {}) {
|
|
90
|
+
const client = this.getTasksClient(email);
|
|
91
|
+
const params = {
|
|
92
|
+
tasklist: taskListId,
|
|
93
|
+
task: taskId,
|
|
94
|
+
};
|
|
95
|
+
if (options.parent)
|
|
96
|
+
params.parent = options.parent;
|
|
97
|
+
if (options.previous)
|
|
98
|
+
params.previous = options.previous;
|
|
99
|
+
const response = await client.tasks.move(params);
|
|
100
|
+
return this.mapTask(response.data);
|
|
101
|
+
}
|
|
102
|
+
async clear(email, taskListId) {
|
|
103
|
+
const client = this.getTasksClient(email);
|
|
104
|
+
await client.tasks.clear({
|
|
105
|
+
tasklist: taskListId,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
async complete(email, taskListId, taskId) {
|
|
109
|
+
return this.update(email, taskListId, taskId, { status: "completed" });
|
|
110
|
+
}
|
|
111
|
+
async uncomplete(email, taskListId, taskId) {
|
|
112
|
+
return this.update(email, taskListId, taskId, { status: "needsAction" });
|
|
113
|
+
}
|
|
114
|
+
generateWebUrl(taskListId, taskId) {
|
|
115
|
+
const baseUrl = `https://tasks.google.com/embed/?origin=https://calendar.google.com&fullWidth=1&listId=${taskListId}`;
|
|
116
|
+
if (taskId) {
|
|
117
|
+
return `${baseUrl}&taskId=${taskId}`;
|
|
118
|
+
}
|
|
119
|
+
return baseUrl;
|
|
120
|
+
}
|
|
121
|
+
mapTask(task) {
|
|
122
|
+
return {
|
|
123
|
+
id: task.id ?? "",
|
|
124
|
+
title: task.title ?? "",
|
|
125
|
+
status: task.status ?? "needsAction",
|
|
126
|
+
due: task.due ?? undefined,
|
|
127
|
+
notes: task.notes ?? undefined,
|
|
128
|
+
parent: task.parent ?? undefined,
|
|
129
|
+
position: task.position ?? undefined,
|
|
130
|
+
completed: task.completed ?? undefined,
|
|
131
|
+
deleted: task.deleted ?? undefined,
|
|
132
|
+
hidden: task.hidden ?? undefined,
|
|
133
|
+
links: task.links?.map((link) => ({
|
|
134
|
+
type: link.type ?? undefined,
|
|
135
|
+
description: link.description ?? undefined,
|
|
136
|
+
link: link.link ?? undefined,
|
|
137
|
+
})),
|
|
138
|
+
selfLink: task.selfLink ?? undefined,
|
|
139
|
+
updated: task.updated ?? undefined,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
clearTasksClientCache(email) {
|
|
143
|
+
if (email) {
|
|
144
|
+
this.tasksClients.delete(email);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.tasksClients.clear();
|
|
148
|
+
}
|
|
149
|
+
this.clearClientCache(email);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=task-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-service.js","sourceRoot":"","sources":["../../src/services/task-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TaskList, TaskListOptions, TaskListsResult } from "../types.js";
|
|
2
|
+
import { BaseService } from "./base-service.js";
|
|
3
|
+
export declare class TaskListService extends BaseService {
|
|
4
|
+
private tasksClients;
|
|
5
|
+
private getTasksClient;
|
|
6
|
+
list(email: string, options?: TaskListOptions): Promise<TaskListsResult>;
|
|
7
|
+
get(email: string, taskListId: string): Promise<TaskList>;
|
|
8
|
+
create(email: string, title: string): Promise<TaskList>;
|
|
9
|
+
update(email: string, taskListId: string, title: string): Promise<TaskList>;
|
|
10
|
+
delete(email: string, taskListId: string): Promise<void>;
|
|
11
|
+
generateWebUrl(taskListId: string): string;
|
|
12
|
+
private mapTaskList;
|
|
13
|
+
clearTasksClientCache(email?: string): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=tasklist-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasklist-service.d.ts","sourceRoot":"","sources":["../../src/services/tasklist-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,eAAgB,SAAQ,WAAW;IAC/C,OAAO,CAAC,YAAY,CAA0C;IAE9D,OAAO,CAAC,cAAc;IAShB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAmB5E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAUzD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAUvD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAW3E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI1C,OAAO,CAAC,WAAW;IASnB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAQ3C"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { google } from "googleapis";
|
|
2
|
+
import { BaseService } from "./base-service.js";
|
|
3
|
+
export class TaskListService extends BaseService {
|
|
4
|
+
tasksClients = new Map();
|
|
5
|
+
getTasksClient(email) {
|
|
6
|
+
if (!this.tasksClients.has(email)) {
|
|
7
|
+
const auth = this.getOAuth2Client(email);
|
|
8
|
+
const tasks = google.tasks({ version: "v1", auth });
|
|
9
|
+
this.tasksClients.set(email, tasks);
|
|
10
|
+
}
|
|
11
|
+
return this.tasksClients.get(email);
|
|
12
|
+
}
|
|
13
|
+
async list(email, options = {}) {
|
|
14
|
+
const client = this.getTasksClient(email);
|
|
15
|
+
const params = {
|
|
16
|
+
maxResults: options.maxResults ?? 100,
|
|
17
|
+
};
|
|
18
|
+
if (options.pageToken) {
|
|
19
|
+
params.pageToken = options.pageToken;
|
|
20
|
+
}
|
|
21
|
+
const response = await client.tasklists.list(params);
|
|
22
|
+
return {
|
|
23
|
+
items: (response.data.items ?? []).map(this.mapTaskList),
|
|
24
|
+
nextPageToken: response.data.nextPageToken ?? undefined,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async get(email, taskListId) {
|
|
28
|
+
const client = this.getTasksClient(email);
|
|
29
|
+
const response = await client.tasklists.get({
|
|
30
|
+
tasklist: taskListId,
|
|
31
|
+
});
|
|
32
|
+
return this.mapTaskList(response.data);
|
|
33
|
+
}
|
|
34
|
+
async create(email, title) {
|
|
35
|
+
const client = this.getTasksClient(email);
|
|
36
|
+
const response = await client.tasklists.insert({
|
|
37
|
+
requestBody: { title },
|
|
38
|
+
});
|
|
39
|
+
return this.mapTaskList(response.data);
|
|
40
|
+
}
|
|
41
|
+
async update(email, taskListId, title) {
|
|
42
|
+
const client = this.getTasksClient(email);
|
|
43
|
+
const response = await client.tasklists.update({
|
|
44
|
+
tasklist: taskListId,
|
|
45
|
+
requestBody: { title },
|
|
46
|
+
});
|
|
47
|
+
return this.mapTaskList(response.data);
|
|
48
|
+
}
|
|
49
|
+
async delete(email, taskListId) {
|
|
50
|
+
const client = this.getTasksClient(email);
|
|
51
|
+
await client.tasklists.delete({
|
|
52
|
+
tasklist: taskListId,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
generateWebUrl(taskListId) {
|
|
56
|
+
return `https://tasks.google.com/embed/?origin=https://calendar.google.com&fullWidth=1&listId=${taskListId}`;
|
|
57
|
+
}
|
|
58
|
+
mapTaskList(taskList) {
|
|
59
|
+
return {
|
|
60
|
+
id: taskList.id ?? "",
|
|
61
|
+
title: taskList.title ?? "",
|
|
62
|
+
updated: taskList.updated ?? undefined,
|
|
63
|
+
selfLink: taskList.selfLink ?? undefined,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
clearTasksClientCache(email) {
|
|
67
|
+
if (email) {
|
|
68
|
+
this.tasksClients.delete(email);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.tasksClients.clear();
|
|
72
|
+
}
|
|
73
|
+
this.clearClientCache(email);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=tasklist-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasklist-service.js","sourceRoot":"","sources":["../../src/services/tasklist-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,eAAgB,SAAQ,WAAW;IACvC,YAAY,GAAgC,IAAI,GAAG,EAAE,CAAC;IAEtD,cAAc,CAAC,KAAa;QACnC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,UAA2B,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE1C,MAAM,MAAM,GAA4C;YACvD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,GAAG;SACrC,CAAC;QAEF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACtC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErD,OAAO;YACN,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACxD,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,IAAI,SAAS;SACvD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,UAAkB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;YAC3C,QAAQ,EAAE,UAAU;SACpB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,KAAa;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YAC9C,WAAW,EAAE,EAAE,KAAK,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAAkB,EAAE,KAAa;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YAC9C,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,EAAE,KAAK,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAAkB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE1C,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YAC7B,QAAQ,EAAE,UAAU;SACpB,CAAC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,UAAkB;QAChC,OAAO,yFAAyF,UAAU,EAAE,CAAC;IAC9G,CAAC;IAEO,WAAW,CAAC,QAAkC;QACrD,OAAO;YACN,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,SAAS;YACtC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,SAAS;SACxC,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,KAAc;QACnC,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACD"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export interface OAuth2Credentials {
|
|
2
|
+
clientId: string;
|
|
3
|
+
clientSecret: string;
|
|
4
|
+
refreshToken: string;
|
|
5
|
+
accessToken?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface Account {
|
|
8
|
+
email: string;
|
|
9
|
+
oauth2: OAuth2Credentials;
|
|
10
|
+
}
|
|
11
|
+
export interface StoredCredentials {
|
|
12
|
+
clientId: string;
|
|
13
|
+
clientSecret: string;
|
|
14
|
+
}
|
|
15
|
+
export interface TaskList {
|
|
16
|
+
id: string;
|
|
17
|
+
title: string;
|
|
18
|
+
updated?: string;
|
|
19
|
+
selfLink?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface TaskListsResult {
|
|
22
|
+
items: TaskList[];
|
|
23
|
+
nextPageToken?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface TaskLink {
|
|
26
|
+
type?: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
link?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface Task {
|
|
31
|
+
id: string;
|
|
32
|
+
title: string;
|
|
33
|
+
status: "needsAction" | "completed";
|
|
34
|
+
due?: string;
|
|
35
|
+
notes?: string;
|
|
36
|
+
parent?: string;
|
|
37
|
+
position?: string;
|
|
38
|
+
completed?: string;
|
|
39
|
+
deleted?: boolean;
|
|
40
|
+
hidden?: boolean;
|
|
41
|
+
links?: TaskLink[];
|
|
42
|
+
selfLink?: string;
|
|
43
|
+
updated?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface TasksResult {
|
|
46
|
+
items: Task[];
|
|
47
|
+
nextPageToken?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface TaskListOptions {
|
|
50
|
+
maxResults?: number;
|
|
51
|
+
pageToken?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface TaskOptions {
|
|
54
|
+
maxResults?: number;
|
|
55
|
+
pageToken?: string;
|
|
56
|
+
showCompleted?: boolean;
|
|
57
|
+
showDeleted?: boolean;
|
|
58
|
+
showHidden?: boolean;
|
|
59
|
+
dueMin?: string;
|
|
60
|
+
dueMax?: string;
|
|
61
|
+
completedMin?: string;
|
|
62
|
+
completedMax?: string;
|
|
63
|
+
updatedMin?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface CreateTaskOptions {
|
|
66
|
+
title: string;
|
|
67
|
+
notes?: string;
|
|
68
|
+
due?: string;
|
|
69
|
+
parent?: string;
|
|
70
|
+
previous?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface UpdateTaskOptions {
|
|
73
|
+
title?: string;
|
|
74
|
+
notes?: string;
|
|
75
|
+
due?: string;
|
|
76
|
+
status?: "needsAction" | "completed";
|
|
77
|
+
}
|
|
78
|
+
export interface MoveTaskOptions {
|
|
79
|
+
parent?: string;
|
|
80
|
+
previous?: string;
|
|
81
|
+
}
|
|
82
|
+
export type OutputFormat = "text" | "json" | "tsv";
|
|
83
|
+
export interface CliOptions {
|
|
84
|
+
format?: OutputFormat;
|
|
85
|
+
max?: number;
|
|
86
|
+
page?: string;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tjboudreaux/gtcli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Google Tasks CLI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"gtcli": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc && chmod +x dist/cli.js",
|
|
16
|
+
"check": "biome check src/ --write --diagnostic-level=error && tsc --noEmit",
|
|
17
|
+
"test": "vitest run --coverage",
|
|
18
|
+
"test:watch": "vitest",
|
|
19
|
+
"test:coverage": "vitest run --coverage --coverage.thresholds.lines=90 --coverage.thresholds.functions=90 --coverage.thresholds.branches=90 --coverage.thresholds.statements=90",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
21
|
+
"prepare": "husky"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"google-auth-library": "^10.1.0",
|
|
25
|
+
"googleapis": "^153.0.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@biomejs/biome": "^1.9.4",
|
|
29
|
+
"@commitlint/cli": "^20.2.0",
|
|
30
|
+
"@commitlint/config-conventional": "^20.2.0",
|
|
31
|
+
"@types/node": "^22.10.1",
|
|
32
|
+
"@vitest/coverage-v8": "^2.1.8",
|
|
33
|
+
"husky": "^9.1.7",
|
|
34
|
+
"lint-staged": "^16.2.7",
|
|
35
|
+
"typescript": "^5.7.2",
|
|
36
|
+
"vitest": "^2.1.8"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"google-tasks",
|
|
40
|
+
"tasks",
|
|
41
|
+
"cli",
|
|
42
|
+
"todo"
|
|
43
|
+
],
|
|
44
|
+
"author": "",
|
|
45
|
+
"license": "MIT",
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "https://github.com/tjboudreaux/gtcli"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=20.0.0"
|
|
52
|
+
},
|
|
53
|
+
"lint-staged": {
|
|
54
|
+
"*.ts": [
|
|
55
|
+
"biome check --write --diagnostic-level=error"
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
}
|