@marcfargas/go-easy 0.2.0 → 0.3.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 (90) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +48 -44
  3. package/dist/auth-flow.d.ts +50 -0
  4. package/dist/auth-flow.d.ts.map +1 -0
  5. package/dist/auth-flow.js +219 -0
  6. package/dist/auth-flow.js.map +1 -0
  7. package/dist/auth-server.d.ts +18 -0
  8. package/dist/auth-server.d.ts.map +1 -0
  9. package/dist/auth-server.js +327 -0
  10. package/dist/auth-server.js.map +1 -0
  11. package/dist/auth-store.d.ts +81 -0
  12. package/dist/auth-store.d.ts.map +1 -0
  13. package/dist/auth-store.js +185 -0
  14. package/dist/auth-store.js.map +1 -0
  15. package/dist/auth.d.ts +21 -15
  16. package/dist/auth.d.ts.map +1 -1
  17. package/dist/auth.js +90 -50
  18. package/dist/auth.js.map +1 -1
  19. package/dist/bin/calendar.js +69 -7
  20. package/dist/bin/calendar.js.map +1 -1
  21. package/dist/bin/drive.js +2 -0
  22. package/dist/bin/drive.js.map +1 -1
  23. package/dist/bin/easy.d.ts +11 -0
  24. package/dist/bin/easy.d.ts.map +1 -0
  25. package/dist/bin/easy.js +140 -0
  26. package/dist/bin/easy.js.map +1 -0
  27. package/dist/bin/gmail.d.ts +6 -1
  28. package/dist/bin/gmail.d.ts.map +1 -1
  29. package/dist/bin/gmail.js +85 -13
  30. package/dist/bin/gmail.js.map +1 -1
  31. package/dist/bin/tasks.d.ts +17 -0
  32. package/dist/bin/tasks.d.ts.map +1 -0
  33. package/dist/bin/tasks.js +190 -0
  34. package/dist/bin/tasks.js.map +1 -0
  35. package/dist/calendar/helpers.d.ts +13 -1
  36. package/dist/calendar/helpers.d.ts.map +1 -1
  37. package/dist/calendar/helpers.js +112 -3
  38. package/dist/calendar/helpers.js.map +1 -1
  39. package/dist/calendar/index.d.ts +2 -2
  40. package/dist/calendar/index.d.ts.map +1 -1
  41. package/dist/calendar/index.js +9 -1
  42. package/dist/calendar/index.js.map +1 -1
  43. package/dist/calendar/types.d.ts +84 -0
  44. package/dist/calendar/types.d.ts.map +1 -1
  45. package/dist/calendar/types.js +7 -0
  46. package/dist/calendar/types.js.map +1 -1
  47. package/dist/errors.d.ts +24 -0
  48. package/dist/errors.d.ts.map +1 -1
  49. package/dist/errors.js +22 -2
  50. package/dist/errors.js.map +1 -1
  51. package/dist/gmail/helpers.d.ts +8 -1
  52. package/dist/gmail/helpers.d.ts.map +1 -1
  53. package/dist/gmail/helpers.js +31 -5
  54. package/dist/gmail/helpers.js.map +1 -1
  55. package/dist/gmail/index.d.ts +14 -5
  56. package/dist/gmail/index.d.ts.map +1 -1
  57. package/dist/gmail/index.js +90 -20
  58. package/dist/gmail/index.js.map +1 -1
  59. package/dist/gmail/markdown.d.ts +22 -0
  60. package/dist/gmail/markdown.d.ts.map +1 -0
  61. package/dist/gmail/markdown.js +30 -0
  62. package/dist/gmail/markdown.js.map +1 -0
  63. package/dist/gmail/types.d.ts +19 -3
  64. package/dist/gmail/types.d.ts.map +1 -1
  65. package/dist/index.d.ts +7 -2
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +7 -2
  68. package/dist/index.js.map +1 -1
  69. package/dist/scopes.d.ts +16 -0
  70. package/dist/scopes.d.ts.map +1 -0
  71. package/dist/scopes.js +28 -0
  72. package/dist/scopes.js.map +1 -0
  73. package/dist/tasks/helpers.d.ts +10 -0
  74. package/dist/tasks/helpers.d.ts.map +1 -0
  75. package/dist/tasks/helpers.js +33 -0
  76. package/dist/tasks/helpers.js.map +1 -0
  77. package/dist/tasks/index.d.ts +63 -0
  78. package/dist/tasks/index.d.ts.map +1 -0
  79. package/dist/tasks/index.js +253 -0
  80. package/dist/tasks/index.js.map +1 -0
  81. package/dist/tasks/types.d.ts +79 -0
  82. package/dist/tasks/types.d.ts.map +1 -0
  83. package/dist/tasks/types.js +5 -0
  84. package/dist/tasks/types.js.map +1 -0
  85. package/package.json +33 -5
  86. package/skills/go-easy/SKILL.md +146 -0
  87. package/skills/go-easy/calendar.md +366 -0
  88. package/skills/go-easy/drive.md +309 -0
  89. package/skills/go-easy/gmail.md +478 -0
  90. package/skills/go-easy/tasks.md +260 -0
@@ -10,7 +10,12 @@
10
10
  * go-gmail marc@blegal.eu get <messageId>
11
11
  * go-gmail marc@blegal.eu thread <threadId>
12
12
  * go-gmail marc@blegal.eu labels
13
- * go-gmail marc@blegal.eu send --to=x@y.com --subject="Hi" --body="Hello"
13
+ * go-gmail marc@blegal.eu send --to=x@y.com --subject="Hi" --body-text-file=body.txt --confirm
14
+ *
15
+ * Body content:
16
+ * --body-text-file=<path> Read plain text body from file (UTF-8)
17
+ * --body-html-file=<path> Read HTML body from file (UTF-8)
18
+ * --body-md-file=<path> Read Markdown body from file (auto-converted to HTML)
14
19
  *
15
20
  * Safety:
16
21
  * Destructive operations (send, reply, forward, sendDraft) require --confirm flag.
@@ -1 +1 @@
1
- {"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/bin/gmail.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG"}
1
+ {"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/bin/gmail.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
package/dist/bin/gmail.js CHANGED
@@ -10,12 +10,18 @@
10
10
  * go-gmail marc@blegal.eu get <messageId>
11
11
  * go-gmail marc@blegal.eu thread <threadId>
12
12
  * go-gmail marc@blegal.eu labels
13
- * go-gmail marc@blegal.eu send --to=x@y.com --subject="Hi" --body="Hello"
13
+ * go-gmail marc@blegal.eu send --to=x@y.com --subject="Hi" --body-text-file=body.txt --confirm
14
+ *
15
+ * Body content:
16
+ * --body-text-file=<path> Read plain text body from file (UTF-8)
17
+ * --body-html-file=<path> Read HTML body from file (UTF-8)
18
+ * --body-md-file=<path> Read Markdown body from file (auto-converted to HTML)
14
19
  *
15
20
  * Safety:
16
21
  * Destructive operations (send, reply, forward, sendDraft) require --confirm flag.
17
22
  * Without --confirm, the command shows what WOULD happen and exits.
18
23
  */
24
+ import { readFileSync } from 'node:fs';
19
25
  import { getAuth } from '../auth.js';
20
26
  import { setSafetyContext } from '../safety.js';
21
27
  import * as gmail from '../gmail/index.js';
@@ -25,18 +31,25 @@ function usage() {
25
31
  error: 'USAGE',
26
32
  message: 'go-gmail <account> <command> [args...]',
27
33
  commands: {
28
- search: 'go-gmail <account> search "<query>" [--max=N]',
34
+ search: 'go-gmail <account> search "<query>" [--max=N] [--page-token=<token>]',
29
35
  get: 'go-gmail <account> get <messageId>',
30
36
  thread: 'go-gmail <account> thread <threadId>',
31
37
  labels: 'go-gmail <account> labels',
32
- send: 'go-gmail <account> send --to=<addr> --subject="..." --body="..." [--html="..."] [--confirm]',
33
- draft: 'go-gmail <account> draft --to=<addr> --subject="..." --body="..."',
38
+ send: 'go-gmail <account> send --to=<addr> --subject="..." --body-text-file=body.txt [--cc=<addr>] [--bcc=<addr>] [--confirm]',
39
+ reply: 'go-gmail <account> reply <messageId> --body-text-file=reply.txt [--reply-all] --confirm',
40
+ forward: 'go-gmail <account> forward <messageId> --to=<addr> [--body-text-file=note.txt] [--exclude=file1,file2] [--send-now --confirm]',
41
+ draft: 'go-gmail <account> draft --to=<addr> --subject="..." --body-text-file=body.txt [--cc=<addr>] [--bcc=<addr>] [--in-reply-to=<messageId>]',
34
42
  'send-draft': 'go-gmail <account> send-draft <draftId> [--confirm]',
35
- drafts: 'go-gmail <account> drafts [--max=N]',
36
- 'batch-label': 'go-gmail <account> batch-label --ids=id1,id2 --add=LABEL --remove=LABEL',
43
+ drafts: 'go-gmail <account> drafts [--max=N] [--page-token=<token>]',
44
+ 'batch-label': 'go-gmail <account> batch-label --ids=id1,id2 --add=LABEL_ID --remove=LABEL_ID',
37
45
  attachment: 'go-gmail <account> attachment <messageId> <attachmentId>',
38
46
  profile: 'go-gmail <account> profile',
39
47
  },
48
+ bodyFlags: {
49
+ '--body-text-file': 'Read plain text body from file (UTF-8)',
50
+ '--body-html-file': 'Read HTML body from file (UTF-8)',
51
+ '--body-md-file': 'Read Markdown body from file (auto-converted to HTML)',
52
+ },
40
53
  }, null, 2));
41
54
  process.exit(1);
42
55
  }
@@ -44,7 +57,7 @@ function usage() {
44
57
  function parseFlags(args) {
45
58
  const flags = {};
46
59
  for (const arg of args) {
47
- const match = arg.match(/^--([^=]+)(?:=(.*))?$/);
60
+ const match = arg.match(/^--([^=]+)(?:=(.*))?$/s);
48
61
  if (match) {
49
62
  flags[match[1]] = match[2] ?? 'true';
50
63
  }
@@ -55,6 +68,23 @@ function parseFlags(args) {
55
68
  function positional(args) {
56
69
  return args.filter((a) => !a.startsWith('--'));
57
70
  }
71
+ /**
72
+ * Read body content from file flags.
73
+ * Returns { body?, html?, markdown? } for SendOptions.
74
+ */
75
+ function readBodyFlags(flags) {
76
+ const result = {};
77
+ if (flags['body-text-file']) {
78
+ result.body = readFileSync(flags['body-text-file'], 'utf-8');
79
+ }
80
+ if (flags['body-html-file']) {
81
+ result.html = readFileSync(flags['body-html-file'], 'utf-8');
82
+ }
83
+ if (flags['body-md-file']) {
84
+ result.markdown = readFileSync(flags['body-md-file'], 'utf-8');
85
+ }
86
+ return result;
87
+ }
58
88
  async function main() {
59
89
  if (args.length < 2)
60
90
  usage();
@@ -91,6 +121,7 @@ async function main() {
91
121
  result = await gmail.search(auth, {
92
122
  query: pos[0] ?? '',
93
123
  maxResults: flags.max ? parseInt(flags.max) : undefined,
124
+ pageToken: flags['page-token'],
94
125
  });
95
126
  break;
96
127
  case 'get':
@@ -112,26 +143,67 @@ async function main() {
112
143
  cc: flags.cc,
113
144
  bcc: flags.bcc,
114
145
  subject: flags.subject ?? '',
115
- body: flags.body,
116
- html: flags.html,
146
+ ...readBodyFlags(flags),
117
147
  attachments: flags.attach?.split(','),
118
148
  });
119
149
  break;
120
- case 'draft':
150
+ case 'reply': {
151
+ if (!pos[0])
152
+ usage();
153
+ const origMsg = await gmail.getMessage(auth, pos[0]);
154
+ result = await gmail.reply(auth, {
155
+ threadId: origMsg.threadId,
156
+ messageId: pos[0],
157
+ ...readBodyFlags(flags),
158
+ replyAll: 'reply-all' in flags,
159
+ });
160
+ break;
161
+ }
162
+ case 'forward':
163
+ if (!pos[0])
164
+ usage();
165
+ result = await gmail.forward(auth, {
166
+ messageId: pos[0],
167
+ to: flags.to ?? '',
168
+ ...readBodyFlags(flags),
169
+ includeAttachments: flags.include ? flags.include.split(',') : true,
170
+ excludeAttachments: flags.exclude?.split(','),
171
+ sendNow: 'send-now' in flags,
172
+ keepInThread: !('no-thread' in flags),
173
+ });
174
+ break;
175
+ case 'draft': {
176
+ let threadId;
177
+ let extraHeaders;
178
+ // If --in-reply-to is provided, fetch the original message to get threadId and Message-ID
179
+ const inReplyToId = flags['in-reply-to'];
180
+ if (inReplyToId) {
181
+ const original = await gmail.getMessage(auth, inReplyToId);
182
+ threadId = original.threadId;
183
+ const messageIdRef = original.rfc822MessageId ?? `<${inReplyToId}>`;
184
+ extraHeaders = {
185
+ 'In-Reply-To': messageIdRef,
186
+ 'References': messageIdRef,
187
+ };
188
+ }
121
189
  result = await gmail.createDraft(auth, {
122
190
  to: flags.to ?? '',
191
+ cc: flags.cc,
192
+ bcc: flags.bcc,
123
193
  subject: flags.subject ?? '',
124
- body: flags.body,
125
- html: flags.html,
194
+ ...readBodyFlags(flags),
195
+ threadId,
196
+ extraHeaders,
126
197
  });
127
198
  break;
199
+ }
128
200
  case 'send-draft':
129
201
  if (!pos[0])
130
202
  usage();
131
203
  result = await gmail.sendDraft(auth, pos[0]);
132
204
  break;
133
205
  case 'drafts':
134
- result = await gmail.listDrafts(auth, flags.max ? parseInt(flags.max) : undefined);
206
+ result = await gmail.listDrafts(auth, flags.max ? parseInt(flags.max) : undefined, flags['page-token']);
135
207
  break;
136
208
  case 'batch-label':
137
209
  result = await gmail.batchModifyLabels(auth, {
@@ -1 +1 @@
1
- {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../src/bin/gmail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../src/bin/gmail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * go-tasks — Gateway CLI for Google Tasks operations.
4
+ *
5
+ * Always outputs JSON. Designed for agent consumption.
6
+ *
7
+ * Usage:
8
+ * go-tasks <account> <command> [args...]
9
+ * go-tasks marc@blegal.eu lists
10
+ * go-tasks marc@blegal.eu tasks <listId>
11
+ * go-tasks marc@blegal.eu add <listId> --title="Buy milk"
12
+ *
13
+ * Safety:
14
+ * Destructive operations (delete, clear) require --confirm flag.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/bin/tasks.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * go-tasks — Gateway CLI for Google Tasks operations.
4
+ *
5
+ * Always outputs JSON. Designed for agent consumption.
6
+ *
7
+ * Usage:
8
+ * go-tasks <account> <command> [args...]
9
+ * go-tasks marc@blegal.eu lists
10
+ * go-tasks marc@blegal.eu tasks <listId>
11
+ * go-tasks marc@blegal.eu add <listId> --title="Buy milk"
12
+ *
13
+ * Safety:
14
+ * Destructive operations (delete, clear) require --confirm flag.
15
+ */
16
+ import { getAuth } from '../auth.js';
17
+ import { setSafetyContext } from '../safety.js';
18
+ import * as tasks from '../tasks/index.js';
19
+ const args = process.argv.slice(2);
20
+ function usage() {
21
+ console.log(JSON.stringify({
22
+ error: 'USAGE',
23
+ message: 'go-tasks <account> <command> [args...]',
24
+ commands: {
25
+ lists: 'go-tasks <account> lists',
26
+ tasks: 'go-tasks <account> tasks <listId> [--max=N] [--page-token=<token>] [--show-completed] [--show-hidden]',
27
+ get: 'go-tasks <account> get <listId> <taskId>',
28
+ add: 'go-tasks <account> add <listId> --title="..." [--notes="..."] [--due=YYYY-MM-DD] [--parent=<taskId>]',
29
+ update: 'go-tasks <account> update <listId> <taskId> [--title="..."] [--notes="..."] [--due=YYYY-MM-DD] [--status=completed|needsAction]',
30
+ complete: 'go-tasks <account> complete <listId> <taskId>',
31
+ move: 'go-tasks <account> move <listId> <taskId> [--parent=<taskId>] [--previous=<taskId>]',
32
+ delete: 'go-tasks <account> delete <listId> <taskId> --confirm',
33
+ 'create-list': 'go-tasks <account> create-list --title="..."',
34
+ 'delete-list': 'go-tasks <account> delete-list <listId> --confirm',
35
+ clear: 'go-tasks <account> clear <listId> --confirm',
36
+ },
37
+ }, null, 2));
38
+ process.exit(1);
39
+ }
40
+ /** Parse --key=value flags from args */
41
+ function parseFlags(argv) {
42
+ const flags = {};
43
+ for (const arg of argv) {
44
+ const match = arg.match(/^--([^=]+)(?:=(.*))?$/s);
45
+ if (match) {
46
+ flags[match[1]] = match[2] ?? 'true';
47
+ }
48
+ }
49
+ return flags;
50
+ }
51
+ /** Get positional args (non-flag) */
52
+ function positional(argv) {
53
+ return argv.filter((a) => !a.startsWith('--'));
54
+ }
55
+ async function main() {
56
+ if (args.length < 2)
57
+ usage();
58
+ const account = args[0];
59
+ const command = args[1];
60
+ const rest = args.slice(2);
61
+ const flags = parseFlags(rest);
62
+ const pos = positional(rest);
63
+ // Set up safety context
64
+ const hasConfirm = 'confirm' in flags;
65
+ setSafetyContext({
66
+ confirm: async (op) => {
67
+ if (!hasConfirm) {
68
+ console.log(JSON.stringify({
69
+ blocked: true,
70
+ operation: op.name,
71
+ description: op.description,
72
+ details: op.details,
73
+ hint: 'Add --confirm to execute this operation',
74
+ }, null, 2));
75
+ process.exit(2);
76
+ }
77
+ return true;
78
+ },
79
+ });
80
+ let auth;
81
+ try {
82
+ auth = await getAuth('tasks', account);
83
+ }
84
+ catch (err) {
85
+ const e = err;
86
+ if (typeof e.toJSON === 'function') {
87
+ console.error(JSON.stringify(e.toJSON(), null, 2));
88
+ }
89
+ else {
90
+ console.error(JSON.stringify({
91
+ error: e.code ?? 'UNKNOWN',
92
+ message: e.message ?? String(err),
93
+ }, null, 2));
94
+ }
95
+ process.exit(1);
96
+ }
97
+ try {
98
+ let result;
99
+ switch (command) {
100
+ case 'lists':
101
+ result = await tasks.listTaskLists(auth);
102
+ break;
103
+ case 'tasks':
104
+ if (!pos[0])
105
+ usage();
106
+ result = await tasks.listTasks(auth, pos[0], {
107
+ maxResults: flags.max ? parseInt(flags.max) : undefined,
108
+ pageToken: flags['page-token'],
109
+ showCompleted: 'show-completed' in flags ? true : undefined,
110
+ showHidden: 'show-hidden' in flags ? true : undefined,
111
+ });
112
+ break;
113
+ case 'get':
114
+ if (!pos[0] || !pos[1])
115
+ usage();
116
+ result = await tasks.getTask(auth, pos[0], pos[1]);
117
+ break;
118
+ case 'add':
119
+ if (!pos[0])
120
+ usage();
121
+ result = await tasks.createTask(auth, pos[0], {
122
+ title: flags.title ?? '',
123
+ notes: flags.notes,
124
+ due: flags.due,
125
+ parent: flags.parent,
126
+ previous: flags.previous,
127
+ });
128
+ break;
129
+ case 'update':
130
+ if (!pos[0] || !pos[1])
131
+ usage();
132
+ result = await tasks.updateTask(auth, pos[0], pos[1], {
133
+ title: flags.title,
134
+ notes: flags.notes,
135
+ due: flags.due,
136
+ status: flags.status,
137
+ });
138
+ break;
139
+ case 'complete':
140
+ if (!pos[0] || !pos[1])
141
+ usage();
142
+ result = await tasks.completeTask(auth, pos[0], pos[1]);
143
+ break;
144
+ case 'move':
145
+ if (!pos[0] || !pos[1])
146
+ usage();
147
+ result = await tasks.moveTask(auth, pos[0], pos[1], {
148
+ parent: flags.parent,
149
+ previous: flags.previous,
150
+ });
151
+ break;
152
+ case 'delete':
153
+ if (!pos[0] || !pos[1])
154
+ usage();
155
+ result = await tasks.deleteTask(auth, pos[0], pos[1]);
156
+ break;
157
+ case 'create-list':
158
+ result = await tasks.createTaskList(auth, flags.title ?? '');
159
+ break;
160
+ case 'delete-list':
161
+ if (!pos[0])
162
+ usage();
163
+ result = await tasks.deleteTaskList(auth, pos[0]);
164
+ break;
165
+ case 'clear':
166
+ if (!pos[0])
167
+ usage();
168
+ result = await tasks.clearCompleted(auth, pos[0]);
169
+ break;
170
+ default:
171
+ usage();
172
+ }
173
+ console.log(JSON.stringify(result, null, 2));
174
+ }
175
+ catch (err) {
176
+ const e = err;
177
+ if (typeof e.toJSON === 'function') {
178
+ console.error(JSON.stringify(e.toJSON(), null, 2));
179
+ }
180
+ else {
181
+ console.error(JSON.stringify({
182
+ error: e.code ?? 'UNKNOWN',
183
+ message: e.message ?? String(err),
184
+ }, null, 2));
185
+ }
186
+ process.exit(1);
187
+ }
188
+ }
189
+ main();
190
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/bin/tasks.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,17 @@
2
2
  * Calendar helpers — event parsing and date handling.
3
3
  */
4
4
  import type { calendar_v3 } from '@googleapis/calendar';
5
- import type { CalendarEvent, Attendee, CalendarInfo } from './types.js';
5
+ import type { CalendarEvent, Attendee, CalendarInfo, WorkingLocationProperties, OutOfOfficeProperties, FocusTimeProperties, BirthdayProperties } from './types.js';
6
6
  /** Parse a raw Calendar API event into our CalendarEvent shape */
7
7
  export declare function parseEvent(raw: calendar_v3.Schema$Event): CalendarEvent;
8
+ /** Parse working location properties */
9
+ export declare function parseWorkingLocation(raw: calendar_v3.Schema$EventWorkingLocationProperties): WorkingLocationProperties;
10
+ /** Parse out-of-office properties */
11
+ export declare function parseOutOfOffice(raw: calendar_v3.Schema$EventOutOfOfficeProperties): OutOfOfficeProperties;
12
+ /** Parse focus time properties */
13
+ export declare function parseFocusTime(raw: calendar_v3.Schema$EventFocusTimeProperties): FocusTimeProperties;
14
+ /** Parse birthday properties */
15
+ export declare function parseBirthday(raw: calendar_v3.Schema$EventBirthdayProperties): BirthdayProperties;
8
16
  /** Parse an attendee */
9
17
  export declare function parseAttendee(raw: calendar_v3.Schema$EventAttendee): Attendee;
10
18
  /** Parse a calendar list entry */
@@ -19,5 +27,9 @@ export declare function buildEventBody(opts: {
19
27
  location?: string;
20
28
  attendees?: string[];
21
29
  allDay?: boolean;
30
+ eventType?: 'default' | 'outOfOffice' | 'workingLocation' | 'focusTime';
31
+ outOfOffice?: OutOfOfficeProperties;
32
+ workingLocation?: WorkingLocationProperties;
33
+ focusTime?: FocusTimeProperties;
22
34
  }): calendar_v3.Schema$Event;
23
35
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/calendar/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExE,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,YAAY,GAAG,aAAa,CAuBvE;AAED,wBAAwB;AACxB,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,oBAAoB,GAAG,QAAQ,CAQ7E;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,wBAAwB,GAAG,YAAY,CASrF;AAED,iDAAiD;AACjD,wBAAgB,cAAc,CAC5B,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACxJ,WAAW,CAAC,YAAY,CAoB1B"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/calendar/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EAEZ,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,YAAY,GAAG,aAAa,CAyCvE;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,WAAW,CAAC,qCAAqC,GACrD,yBAAyB,CAwB3B;AAED,qCAAqC;AACrC,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,CAAC,iCAAiC,GACjD,qBAAqB,CAKvB;AAED,kCAAkC;AAClC,wBAAgB,cAAc,CAC5B,GAAG,EAAE,WAAW,CAAC,+BAA+B,GAC/C,mBAAmB,CAMrB;AAED,gCAAgC;AAChC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,CAAC,8BAA8B,GAC9C,kBAAkB,CAMpB;AAED,wBAAwB;AACxB,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,oBAAoB,GAAG,QAAQ,CAQ7E;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,wBAAwB,GAAG,YAAY,CASrF;AAED,iDAAiD;AACjD,wBAAgB,cAAc,CAC5B,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,iBAAiB,GAAG,WAAW,CAAC;IACxE,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC,GACA,WAAW,CAAC,YAAY,CAqE1B"}
@@ -4,7 +4,8 @@
4
4
  /** Parse a raw Calendar API event into our CalendarEvent shape */
5
5
  export function parseEvent(raw) {
6
6
  const isAllDay = !!raw.start?.date;
7
- return {
7
+ const eventType = (raw.eventType ?? 'default');
8
+ const event = {
8
9
  id: raw.id ?? '',
9
10
  summary: raw.summary ?? '(no title)',
10
11
  description: raw.description ?? undefined,
@@ -23,6 +24,68 @@ export function parseEvent(raw) {
23
24
  creator: raw.creator
24
25
  ? { email: raw.creator.email ?? '', displayName: raw.creator.displayName ?? undefined }
25
26
  : undefined,
27
+ eventType,
28
+ };
29
+ // Parse type-specific properties
30
+ if (raw.workingLocationProperties) {
31
+ event.workingLocation = parseWorkingLocation(raw.workingLocationProperties);
32
+ }
33
+ if (raw.outOfOfficeProperties) {
34
+ event.outOfOffice = parseOutOfOffice(raw.outOfOfficeProperties);
35
+ }
36
+ if (raw.focusTimeProperties) {
37
+ event.focusTime = parseFocusTime(raw.focusTimeProperties);
38
+ }
39
+ if (raw.birthdayProperties) {
40
+ event.birthday = parseBirthday(raw.birthdayProperties);
41
+ }
42
+ return event;
43
+ }
44
+ /** Parse working location properties */
45
+ export function parseWorkingLocation(raw) {
46
+ const result = {
47
+ type: raw.type ?? 'customLocation',
48
+ };
49
+ if (raw.homeOffice !== undefined && raw.homeOffice !== null) {
50
+ result.homeOffice = true;
51
+ }
52
+ if (raw.officeLocation) {
53
+ result.officeLocation = {
54
+ buildingId: raw.officeLocation.buildingId ?? undefined,
55
+ deskId: raw.officeLocation.deskId ?? undefined,
56
+ floorId: raw.officeLocation.floorId ?? undefined,
57
+ floorSectionId: raw.officeLocation.floorSectionId ?? undefined,
58
+ label: raw.officeLocation.label ?? undefined,
59
+ };
60
+ }
61
+ if (raw.customLocation) {
62
+ result.customLocation = {
63
+ label: raw.customLocation.label ?? undefined,
64
+ };
65
+ }
66
+ return result;
67
+ }
68
+ /** Parse out-of-office properties */
69
+ export function parseOutOfOffice(raw) {
70
+ return {
71
+ autoDeclineMode: raw.autoDeclineMode ?? undefined,
72
+ declineMessage: raw.declineMessage ?? undefined,
73
+ };
74
+ }
75
+ /** Parse focus time properties */
76
+ export function parseFocusTime(raw) {
77
+ return {
78
+ autoDeclineMode: raw.autoDeclineMode ?? undefined,
79
+ chatStatus: raw.chatStatus ?? undefined,
80
+ declineMessage: raw.declineMessage ?? undefined,
81
+ };
82
+ }
83
+ /** Parse birthday properties */
84
+ export function parseBirthday(raw) {
85
+ return {
86
+ contact: raw.contact ?? undefined,
87
+ type: raw.type ?? undefined,
88
+ customTypeName: raw.customTypeName ?? undefined,
26
89
  };
27
90
  }
28
91
  /** Parse an attendee */
@@ -50,9 +113,12 @@ export function parseCalendar(raw) {
50
113
  export function buildEventBody(opts) {
51
114
  const event = {
52
115
  summary: opts.summary,
53
- description: opts.description,
54
- location: opts.location,
55
116
  };
117
+ // Only include optional fields when explicitly provided (PATCH-safe)
118
+ if (opts.description !== undefined)
119
+ event.description = opts.description;
120
+ if (opts.location !== undefined)
121
+ event.location = opts.location;
56
122
  if (opts.allDay) {
57
123
  event.start = { date: opts.start };
58
124
  event.end = { date: opts.end };
@@ -64,6 +130,49 @@ export function buildEventBody(opts) {
64
130
  if (opts.attendees?.length) {
65
131
  event.attendees = opts.attendees.map((email) => ({ email }));
66
132
  }
133
+ // Special event types
134
+ if (opts.eventType && opts.eventType !== 'default') {
135
+ event.eventType = opts.eventType;
136
+ if (opts.eventType === 'outOfOffice' && opts.outOfOffice) {
137
+ event.outOfOfficeProperties = {
138
+ autoDeclineMode: opts.outOfOffice.autoDeclineMode ?? null,
139
+ declineMessage: opts.outOfOffice.declineMessage ?? null,
140
+ };
141
+ }
142
+ if (opts.eventType === 'focusTime' && opts.focusTime) {
143
+ event.focusTimeProperties = {
144
+ autoDeclineMode: opts.focusTime.autoDeclineMode ?? null,
145
+ chatStatus: opts.focusTime.chatStatus ?? null,
146
+ declineMessage: opts.focusTime.declineMessage ?? null,
147
+ };
148
+ }
149
+ if (opts.eventType === 'workingLocation' && opts.workingLocation) {
150
+ const wlProps = {
151
+ type: opts.workingLocation.type,
152
+ };
153
+ if (opts.workingLocation.type === 'homeOffice') {
154
+ wlProps.homeOffice = {};
155
+ }
156
+ else if (opts.workingLocation.type === 'officeLocation' && opts.workingLocation.officeLocation) {
157
+ wlProps.officeLocation = {
158
+ buildingId: opts.workingLocation.officeLocation.buildingId,
159
+ deskId: opts.workingLocation.officeLocation.deskId,
160
+ floorId: opts.workingLocation.officeLocation.floorId,
161
+ floorSectionId: opts.workingLocation.officeLocation.floorSectionId,
162
+ label: opts.workingLocation.officeLocation.label,
163
+ };
164
+ }
165
+ else if (opts.workingLocation.type === 'customLocation' && opts.workingLocation.customLocation) {
166
+ wlProps.customLocation = {
167
+ label: opts.workingLocation.customLocation.label,
168
+ };
169
+ }
170
+ event.workingLocationProperties = wlProps;
171
+ // Working location events are visibility 'public' and show as 'free'
172
+ event.visibility = 'public';
173
+ event.transparency = 'transparent';
174
+ }
175
+ }
67
176
  return event;
68
177
  }
69
178
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/calendar/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/calendar/helpers.ts"],"names":[],"mappings":"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"}