@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.
Files changed (38) hide show
  1. package/README.md +158 -0
  2. package/dist/account-storage.d.ts +21 -0
  3. package/dist/account-storage.d.ts.map +1 -0
  4. package/dist/account-storage.js +96 -0
  5. package/dist/account-storage.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +405 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/index.d.ts +5 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +5 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/oauth-flow.d.ts +27 -0
  15. package/dist/oauth-flow.d.ts.map +1 -0
  16. package/dist/oauth-flow.js +156 -0
  17. package/dist/oauth-flow.js.map +1 -0
  18. package/dist/services/base-service.d.ts +13 -0
  19. package/dist/services/base-service.d.ts.map +1 -0
  20. package/dist/services/base-service.js +40 -0
  21. package/dist/services/base-service.js.map +1 -0
  22. package/dist/services/index.d.ts +4 -0
  23. package/dist/services/index.d.ts.map +1 -0
  24. package/dist/services/index.js +4 -0
  25. package/dist/services/index.js.map +1 -0
  26. package/dist/services/task-service.d.ts +19 -0
  27. package/dist/services/task-service.d.ts.map +1 -0
  28. package/dist/services/task-service.js +152 -0
  29. package/dist/services/task-service.js.map +1 -0
  30. package/dist/services/tasklist-service.d.ts +15 -0
  31. package/dist/services/tasklist-service.d.ts.map +1 -0
  32. package/dist/services/tasklist-service.js +76 -0
  33. package/dist/services/tasklist-service.js.map +1 -0
  34. package/dist/types.d.ts +88 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +2 -0
  37. package/dist/types.js.map +1 -0
  38. 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,4 @@
1
+ export { BaseService } from "./base-service.js";
2
+ export { TaskListService } from "./tasklist-service.js";
3
+ export { TaskService } from "./task-service.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export { BaseService } from "./base-service.js";
2
+ export { TaskListService } from "./tasklist-service.js";
3
+ export { TaskService } from "./task-service.js";
4
+ //# sourceMappingURL=index.js.map
@@ -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":"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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
+ }