zele 0.1.2 → 0.2.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 (65) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +36 -0
  3. package/README.md +112 -0
  4. package/dist/api-utils.d.ts +6 -0
  5. package/dist/api-utils.js +52 -0
  6. package/dist/api-utils.js.map +1 -0
  7. package/dist/auth.d.ts +16 -0
  8. package/dist/auth.js +74 -5
  9. package/dist/auth.js.map +1 -1
  10. package/dist/calendar-client.d.ts +135 -0
  11. package/dist/calendar-client.js +498 -0
  12. package/dist/calendar-client.js.map +1 -0
  13. package/dist/calendar-time.d.ts +24 -0
  14. package/dist/calendar-time.js +245 -0
  15. package/dist/calendar-time.js.map +1 -0
  16. package/dist/cli.js +5 -3
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/auth-cmd.js +5 -5
  19. package/dist/commands/auth-cmd.js.map +1 -1
  20. package/dist/commands/calendar.d.ts +2 -0
  21. package/dist/commands/calendar.js +563 -0
  22. package/dist/commands/calendar.js.map +1 -0
  23. package/dist/generated/browser.d.ts +10 -0
  24. package/dist/generated/client.d.ts +10 -0
  25. package/dist/generated/internal/class.d.ts +22 -0
  26. package/dist/generated/internal/class.js +2 -2
  27. package/dist/generated/internal/class.js.map +1 -1
  28. package/dist/generated/internal/prismaNamespace.d.ts +174 -1
  29. package/dist/generated/internal/prismaNamespace.js +21 -0
  30. package/dist/generated/internal/prismaNamespace.js.map +1 -1
  31. package/dist/generated/internal/prismaNamespaceBrowser.d.ts +23 -0
  32. package/dist/generated/internal/prismaNamespaceBrowser.js +21 -0
  33. package/dist/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  34. package/dist/generated/models/accounts.d.ts +281 -0
  35. package/dist/generated/models/calendar_events.d.ts +1433 -0
  36. package/dist/generated/models/calendar_events.js +2 -0
  37. package/dist/generated/models/calendar_events.js.map +1 -0
  38. package/dist/generated/models/calendar_lists.d.ts +1131 -0
  39. package/dist/generated/models/calendar_lists.js +2 -0
  40. package/dist/generated/models/calendar_lists.js.map +1 -0
  41. package/dist/generated/models.d.ts +2 -0
  42. package/dist/gmail-cache.d.ts +22 -0
  43. package/dist/gmail-cache.js +76 -0
  44. package/dist/gmail-cache.js.map +1 -1
  45. package/dist/gmail-client.js +1 -48
  46. package/dist/gmail-client.js.map +1 -1
  47. package/dist/output.d.ts +11 -0
  48. package/dist/output.js +42 -0
  49. package/dist/output.js.map +1 -1
  50. package/package.json +4 -2
  51. package/schema.prisma +39 -6
  52. package/scripts/test-device-code-clients.ts +186 -0
  53. package/scripts/test-micropython-scopes.ts +72 -0
  54. package/scripts/test-oauth-clients.ts +257 -0
  55. package/src/api-utils.ts +60 -0
  56. package/src/auth.ts +92 -5
  57. package/src/calendar-client.ts +758 -0
  58. package/src/calendar-time.ts +299 -0
  59. package/src/cli.ts +5 -3
  60. package/src/commands/auth-cmd.ts +5 -5
  61. package/src/commands/calendar.ts +634 -0
  62. package/src/gmail-cache.ts +96 -0
  63. package/src/gmail-client.ts +1 -57
  64. package/src/output.ts +51 -0
  65. package/src/schema.sql +22 -0
@@ -0,0 +1,563 @@
1
+ // Calendar commands: list, events, get, create, update, delete, respond, freebusy.
2
+ // Manages Google Calendar with YAML output and cache integration.
3
+ // Multi-account: list/events fetch all accounts concurrently and merge by start time.
4
+ // Improved UX over gogcli: multi-account by default, +duration syntax, cleaner output.
5
+ import { z } from 'zod';
6
+ import readline from 'node:readline';
7
+ import { getCalendarClients, getCalendarClient } from '../auth.js';
8
+ import * as cache from '../gmail-cache.js';
9
+ import * as out from '../output.js';
10
+ import { resolveTimeRange, parseTimeExpression, parseDuration, isDateOnly } from '../calendar-time.js';
11
+ // ---------------------------------------------------------------------------
12
+ // Register commands
13
+ // ---------------------------------------------------------------------------
14
+ export function registerCalendarCommands(cli) {
15
+ // =========================================================================
16
+ // cal list
17
+ // =========================================================================
18
+ cli
19
+ .command('cal list', 'List calendars')
20
+ .option('--no-cache', 'Skip cache')
21
+ .action(async (options) => {
22
+ const clients = await getCalendarClients(options.account);
23
+ const settled = await Promise.allSettled(clients.map(async ({ email, client }) => {
24
+ if (!options.noCache) {
25
+ const cached = await cache.getCachedCalendarList(email);
26
+ if (cached)
27
+ return { email, calendars: cached };
28
+ }
29
+ const calendars = await client.listCalendars();
30
+ if (!options.noCache) {
31
+ await cache.cacheCalendarList(email, calendars);
32
+ }
33
+ return { email, calendars };
34
+ }));
35
+ const allResults = settled
36
+ .filter((r) => {
37
+ if (r.status === 'rejected') {
38
+ const msg = String(r.reason);
39
+ if (msg.includes('401') || msg.includes('403') || msg.includes('Unauthorized')) {
40
+ out.error('CalDAV authentication failed. Try: zele login');
41
+ }
42
+ else {
43
+ out.error(`Failed to fetch calendars: ${msg}`);
44
+ }
45
+ return false;
46
+ }
47
+ return true;
48
+ })
49
+ .map((r) => r.value);
50
+ const showAccount = clients.length > 1;
51
+ const merged = allResults.flatMap(({ email, calendars }) => calendars
52
+ .sort((a, b) => (b.primary ? 1 : 0) - (a.primary ? 1 : 0))
53
+ .map((cal) => ({
54
+ ...(showAccount ? { account: email } : {}),
55
+ id: cal.id,
56
+ name: cal.summary,
57
+ role: cal.role,
58
+ ...(cal.primary ? { primary: true } : {}),
59
+ })));
60
+ if (merged.length === 0) {
61
+ out.hint('No calendars found');
62
+ return;
63
+ }
64
+ out.printList(merged);
65
+ out.hint(`${merged.length} calendars`);
66
+ });
67
+ // =========================================================================
68
+ // cal events
69
+ // =========================================================================
70
+ cli
71
+ .command('cal events', 'List calendar events')
72
+ .option('--calendar <calendar>', 'Calendar ID (default: primary)')
73
+ .option('--from <from>', 'Start time (ISO date, "today", "tomorrow", weekday name)')
74
+ .option('--to <to>', 'End time (same formats, or +1h/+30m/+2d relative to --from)')
75
+ .option('--today', 'Show today only')
76
+ .option('--tomorrow', 'Show tomorrow only')
77
+ .option('--week', 'Show this week')
78
+ .option('--days <days>', z.number().describe('Show next N days'))
79
+ .option('--all', 'Fetch from all calendars')
80
+ .option('--query <query>', 'Free text search')
81
+ .option('--max [max]', 'Max results (default: 20)')
82
+ .option('--page <page>', 'Pagination token')
83
+ .option('--no-cache', 'Skip cache')
84
+ .action(async (options) => {
85
+ const max = options.max ? Number(options.max) : 20;
86
+ const calendarId = options.calendar ?? 'primary';
87
+ if (options.all && options.calendar) {
88
+ out.error('--all and --calendar cannot be used together');
89
+ process.exit(1);
90
+ }
91
+ const clients = await getCalendarClients(options.account);
92
+ if (options.page && clients.length > 1) {
93
+ out.error('--page cannot be used with multiple accounts (page tokens are per-account)');
94
+ process.exit(1);
95
+ }
96
+ const settled = await Promise.allSettled(clients.map(async ({ email, client }) => {
97
+ const tz = await client.getTimezone(calendarId);
98
+ const { timeMin, timeMax } = resolveTimeRange({
99
+ from: options.from,
100
+ to: options.to,
101
+ today: options.today,
102
+ tomorrow: options.tomorrow,
103
+ week: options.week,
104
+ days: options.days,
105
+ }, tz);
106
+ const cacheParams = {
107
+ calendarId: options.all ? '__all__' : calendarId,
108
+ timeMin,
109
+ timeMax,
110
+ query: options.query,
111
+ maxResults: max,
112
+ pageToken: options.page,
113
+ };
114
+ if (!options.noCache) {
115
+ const cached = await cache.getCachedCalendarEvents(email, cacheParams);
116
+ if (cached)
117
+ return { email, result: cached, tz };
118
+ }
119
+ let result;
120
+ if (options.all) {
121
+ // Fetch from all calendars
122
+ const calendars = await client.listCalendars();
123
+ const allEvents = [];
124
+ const perCalResults = await Promise.allSettled(calendars.map(async (cal) => {
125
+ const r = await client.listEvents({
126
+ calendarId: cal.id,
127
+ timeMin,
128
+ timeMax,
129
+ query: options.query,
130
+ maxResults: max,
131
+ });
132
+ return r.events.map((e) => ({ ...e, calendarId: cal.id }));
133
+ }));
134
+ for (const r of perCalResults) {
135
+ if (r.status === 'fulfilled') {
136
+ allEvents.push(...r.value);
137
+ }
138
+ else {
139
+ out.error(`Calendar fetch failed: ${r.reason}`);
140
+ }
141
+ }
142
+ result = {
143
+ events: allEvents,
144
+ nextPageToken: null,
145
+ timezone: tz,
146
+ };
147
+ }
148
+ else {
149
+ result = await client.listEvents({
150
+ calendarId,
151
+ timeMin,
152
+ timeMax,
153
+ query: options.query,
154
+ maxResults: max,
155
+ pageToken: options.page,
156
+ });
157
+ }
158
+ if (!options.noCache) {
159
+ await cache.cacheCalendarEvents(email, cacheParams, result);
160
+ }
161
+ return { email, result, tz };
162
+ }));
163
+ const allResults = settled
164
+ .filter((r) => {
165
+ if (r.status === 'rejected') {
166
+ const msg = String(r.reason);
167
+ if (msg.includes('401') || msg.includes('403') || msg.includes('Unauthorized')) {
168
+ out.error('CalDAV authentication failed. Try: zele login');
169
+ }
170
+ else {
171
+ out.error(`Failed to fetch events: ${msg}`);
172
+ }
173
+ return false;
174
+ }
175
+ return true;
176
+ })
177
+ .map((r) => r.value);
178
+ const showAccount = clients.length > 1;
179
+ // Merge events from all accounts, sort by start time
180
+ const merged = allResults
181
+ .flatMap(({ email, result }) => result.events.map((e) => ({ ...e, account: email })))
182
+ .sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime())
183
+ .slice(0, max);
184
+ if (merged.length === 0) {
185
+ out.hint('No events found');
186
+ return;
187
+ }
188
+ out.printList(merged.map((e) => {
189
+ const time = out.formatEventTime(e.start, e.end, e.allDay);
190
+ return {
191
+ ...(showAccount ? { account: e.account } : {}),
192
+ id: e.id,
193
+ summary: e.summary,
194
+ start: time.start,
195
+ end: time.end,
196
+ ...(e.location ? { location: e.location } : {}),
197
+ ...(e.calendarId && e.calendarId !== calendarId ? { calendar: e.calendarId } : {}),
198
+ };
199
+ }), { nextPage: allResults[0]?.result.nextPageToken });
200
+ out.hint(`${merged.length} events`);
201
+ });
202
+ // =========================================================================
203
+ // cal get
204
+ // =========================================================================
205
+ cli
206
+ .command('cal get <eventId>', 'Get event details')
207
+ .option('--calendar <calendar>', 'Calendar ID (default: primary)')
208
+ .action(async (eventId, options) => {
209
+ const calendarId = options.calendar ?? 'primary';
210
+ const { client } = await getCalendarClient(options.account);
211
+ const event = await client.getEvent({ calendarId, eventId });
212
+ const time = out.formatEventTime(event.start, event.end, event.allDay);
213
+ const doc = {
214
+ id: event.id,
215
+ summary: event.summary,
216
+ start: time.start,
217
+ end: time.end,
218
+ };
219
+ if (event.allDay)
220
+ doc.all_day = true;
221
+ if (event.location)
222
+ doc.location = event.location;
223
+ if (event.description)
224
+ doc.description = event.description;
225
+ if (event.meetLink)
226
+ doc.meet = event.meetLink;
227
+ if (event.attendees.length > 0) {
228
+ doc.attendees = event.attendees.map((a) => ({
229
+ email: a.email,
230
+ ...(a.name ? { name: a.name } : {}),
231
+ status: a.status,
232
+ ...(a.organizer ? { organizer: true } : {}),
233
+ }));
234
+ }
235
+ if (event.recurrence.length > 0)
236
+ doc.recurrence = event.recurrence;
237
+ if (event.visibility !== 'default')
238
+ doc.visibility = event.visibility;
239
+ if (event.transparency === 'transparent')
240
+ doc.show_as = 'free';
241
+ if (event.colorId)
242
+ doc.color = event.colorId;
243
+ if (event.htmlLink)
244
+ doc.link = event.htmlLink;
245
+ out.printYaml(doc);
246
+ });
247
+ // =========================================================================
248
+ // cal create
249
+ // =========================================================================
250
+ cli
251
+ .command('cal create', 'Create a calendar event')
252
+ .option('--calendar <calendar>', 'Calendar ID (default: primary)')
253
+ .option('--summary <summary>', z.string().describe('Event title'))
254
+ .option('--from <from>', z.string().describe('Start time'))
255
+ .option('--to <to>', z.string().describe('End time (or +1h, +30m, +2d relative to --from)'))
256
+ .option('--description <description>', 'Event description')
257
+ .option('--location <location>', 'Event location')
258
+ .option('--attendees <attendees>', 'Comma-separated attendee emails')
259
+ .option('--meet', 'Create Google Meet link')
260
+ .option('--all-day', 'All-day event')
261
+ .option('--recurrence <recurrence>', 'Recurrence rule (e.g. RRULE:FREQ=WEEKLY;BYDAY=MO)')
262
+ .option('--reminder <reminder>', 'Reminder as method:duration (e.g. popup:15m)')
263
+ .option('--color <color>', 'Event color ID (1-11)')
264
+ .option('--visibility <visibility>', 'Event visibility (default, public, private)')
265
+ .action(async (options) => {
266
+ if (!options.summary) {
267
+ out.error('--summary is required');
268
+ process.exit(1);
269
+ }
270
+ if (!options.from) {
271
+ out.error('--from is required');
272
+ process.exit(1);
273
+ }
274
+ if (!options.to) {
275
+ out.error('--to is required');
276
+ process.exit(1);
277
+ }
278
+ const calendarId = options.calendar ?? 'primary';
279
+ const { email, client } = await getCalendarClient(options.account);
280
+ const tz = await client.getTimezone(calendarId);
281
+ const allDay = options.allDay || (isDateOnly(options.from) && isDateOnly(options.to));
282
+ const start = allDay ? options.from : parseTimeExpression(options.from, tz);
283
+ let end;
284
+ if (allDay) {
285
+ // Calendar API uses exclusive end date: add 1 day so user can pass same date for single-day
286
+ const endDate = new Date(options.to + 'T00:00:00');
287
+ endDate.setDate(endDate.getDate() + 1);
288
+ end = endDate.toISOString().split('T')[0];
289
+ }
290
+ else {
291
+ // Support +duration syntax (e.g. +1h, +30m)
292
+ const durationMs = parseDuration(options.to);
293
+ if (durationMs !== null) {
294
+ end = new Date(new Date(start).getTime() + durationMs).toISOString();
295
+ }
296
+ else {
297
+ end = parseTimeExpression(options.to, tz);
298
+ }
299
+ }
300
+ const attendees = options.attendees
301
+ ? options.attendees.split(',').map((e) => e.trim()).filter(Boolean)
302
+ : undefined;
303
+ const reminders = options.reminder ? [parseReminder(options.reminder)] : undefined;
304
+ const event = await client.createEvent({
305
+ calendarId,
306
+ summary: options.summary,
307
+ start,
308
+ end,
309
+ allDay,
310
+ description: options.description,
311
+ location: options.location,
312
+ attendees,
313
+ withMeet: options.meet ?? false,
314
+ recurrence: options.recurrence ? [options.recurrence] : undefined,
315
+ reminders,
316
+ colorId: options.color,
317
+ visibility: options.visibility,
318
+ });
319
+ await cache.invalidateCalendarEvents(email);
320
+ printEventDetail(event);
321
+ out.success('Event created');
322
+ });
323
+ // =========================================================================
324
+ // cal update
325
+ // =========================================================================
326
+ cli
327
+ .command('cal update <eventId>', 'Update a calendar event')
328
+ .option('--calendar <calendar>', 'Calendar ID (default: primary)')
329
+ .option('--summary <summary>', 'Event title')
330
+ .option('--from <from>', 'Start time')
331
+ .option('--to <to>', 'End time')
332
+ .option('--description <description>', 'Event description')
333
+ .option('--location <location>', 'Event location')
334
+ .option('--add-attendees <addAttendees>', 'Comma-separated emails to add')
335
+ .option('--remove-attendees <removeAttendees>', 'Comma-separated emails to remove')
336
+ .option('--meet', 'Add Google Meet link')
337
+ .option('--color <color>', 'Event color ID (1-11, empty to clear)')
338
+ .option('--visibility <visibility>', 'Event visibility')
339
+ .action(async (eventId, options) => {
340
+ const calendarId = options.calendar ?? 'primary';
341
+ const { email, client } = await getCalendarClient(options.account);
342
+ const addAttendees = options.addAttendees
343
+ ? options.addAttendees.split(',').map((e) => e.trim()).filter(Boolean)
344
+ : undefined;
345
+ const removeAttendees = options.removeAttendees
346
+ ? options.removeAttendees.split(',').map((e) => e.trim()).filter(Boolean)
347
+ : undefined;
348
+ let start;
349
+ let end;
350
+ let allDay;
351
+ if (options.from || options.to) {
352
+ // Detect all-day: both from and to are date-only
353
+ allDay = options.from && options.to && isDateOnly(options.from) && isDateOnly(options.to)
354
+ ? true
355
+ : undefined;
356
+ if (allDay) {
357
+ start = options.from;
358
+ // Add 1 day for exclusive end date
359
+ if (options.to) {
360
+ const endDate = new Date(options.to + 'T00:00:00');
361
+ endDate.setDate(endDate.getDate() + 1);
362
+ end = endDate.toISOString().split('T')[0];
363
+ }
364
+ }
365
+ else {
366
+ const tz = await client.getTimezone(calendarId);
367
+ if (options.from)
368
+ start = parseTimeExpression(options.from, tz);
369
+ if (options.to) {
370
+ const durationMs = parseDuration(options.to);
371
+ if (durationMs !== null && start) {
372
+ end = new Date(new Date(start).getTime() + durationMs).toISOString();
373
+ }
374
+ else {
375
+ end = parseTimeExpression(options.to, tz);
376
+ }
377
+ }
378
+ }
379
+ }
380
+ const event = await client.updateEvent({
381
+ calendarId,
382
+ eventId,
383
+ summary: options.summary,
384
+ start,
385
+ end,
386
+ allDay,
387
+ description: options.description,
388
+ location: options.location,
389
+ addAttendees,
390
+ removeAttendees,
391
+ withMeet: options.meet,
392
+ colorId: options.color,
393
+ visibility: options.visibility,
394
+ });
395
+ await cache.invalidateCalendarEvents(email);
396
+ printEventDetail(event);
397
+ out.success('Event updated');
398
+ });
399
+ // =========================================================================
400
+ // cal delete
401
+ // =========================================================================
402
+ cli
403
+ .command('cal delete <eventId>', 'Delete a calendar event')
404
+ .option('--calendar <calendar>', 'Calendar ID (default: primary)')
405
+ .option('--force', 'Skip confirmation')
406
+ .action(async (eventId, options) => {
407
+ const calendarId = options.calendar ?? 'primary';
408
+ const { email, client } = await getCalendarClient(options.account);
409
+ if (!options.force && process.stdin.isTTY) {
410
+ const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
411
+ const answer = await new Promise((resolve) => {
412
+ rl.question(`Delete event ${eventId}? [y/N] `, resolve);
413
+ });
414
+ rl.close();
415
+ if (answer.toLowerCase() !== 'y') {
416
+ out.hint('Cancelled');
417
+ return;
418
+ }
419
+ }
420
+ await client.deleteEvent({ calendarId, eventId });
421
+ await cache.invalidateCalendarEvents(email);
422
+ out.printYaml({ deleted: true, id: eventId });
423
+ out.success('Event deleted');
424
+ });
425
+ // =========================================================================
426
+ // cal respond
427
+ // =========================================================================
428
+ cli
429
+ .command('cal respond <eventId>', 'Respond to event invitation')
430
+ .option('--calendar <calendar>', 'Calendar ID (default: primary)')
431
+ .option('--status <status>', z.string().describe('Response: accepted, declined, tentative'))
432
+ .option('--comment <comment>', 'Optional comment')
433
+ .action(async (eventId, options) => {
434
+ if (!options.status) {
435
+ out.error('--status is required (accepted, declined, tentative)');
436
+ process.exit(1);
437
+ }
438
+ const validStatuses = ['accepted', 'declined', 'tentative'];
439
+ if (!validStatuses.includes(options.status)) {
440
+ out.error(`Invalid status. Must be one of: ${validStatuses.join(', ')}`);
441
+ process.exit(1);
442
+ }
443
+ const calendarId = options.calendar ?? 'primary';
444
+ const { email, client } = await getCalendarClient(options.account);
445
+ const event = await client.respondToEvent({
446
+ calendarId,
447
+ eventId,
448
+ status: options.status,
449
+ comment: options.comment,
450
+ });
451
+ await cache.invalidateCalendarEvents(email);
452
+ out.printYaml({
453
+ id: event.id,
454
+ summary: event.summary,
455
+ status: options.status,
456
+ ...(options.comment ? { comment: options.comment } : {}),
457
+ });
458
+ out.success(`Responded: ${options.status}`);
459
+ });
460
+ // =========================================================================
461
+ // cal freebusy
462
+ // =========================================================================
463
+ cli
464
+ .command('cal freebusy [...calendarIds]', 'Get free/busy information')
465
+ .option('--from <from>', z.string().describe('Start time'))
466
+ .option('--to <to>', z.string().describe('End time'))
467
+ .action(async (calendarIds, options) => {
468
+ if (!calendarIds || calendarIds.length === 0) {
469
+ out.error('At least one calendar ID (email) is required');
470
+ process.exit(1);
471
+ }
472
+ if (!options.from || !options.to) {
473
+ out.error('--from and --to are required');
474
+ process.exit(1);
475
+ }
476
+ const { client } = await getCalendarClient(options.account);
477
+ const tz = await client.getTimezone();
478
+ const timeMin = parseTimeExpression(options.from, tz);
479
+ const timeMax = parseTimeExpression(options.to, tz);
480
+ const results = await client.getFreeBusy({
481
+ calendarIds,
482
+ timeMin,
483
+ timeMax,
484
+ });
485
+ const items = results.map((r) => ({
486
+ calendar: r.calendar,
487
+ busy: r.busy.length > 0
488
+ ? r.busy.map((b) => {
489
+ const st = new Date(b.start).toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' });
490
+ const en = new Date(b.end).toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' });
491
+ return `${st} - ${en}`;
492
+ })
493
+ : ['(free)'],
494
+ }));
495
+ out.printList(items);
496
+ });
497
+ }
498
+ // ---------------------------------------------------------------------------
499
+ // Helpers
500
+ // ---------------------------------------------------------------------------
501
+ function printEventDetail(event) {
502
+ const time = out.formatEventTime(event.start, event.end, event.allDay);
503
+ const doc = {
504
+ id: event.id,
505
+ summary: event.summary,
506
+ start: time.start,
507
+ end: time.end,
508
+ };
509
+ if (event.allDay)
510
+ doc.all_day = true;
511
+ if (event.location)
512
+ doc.location = event.location;
513
+ if (event.description)
514
+ doc.description = event.description;
515
+ if (event.meetLink)
516
+ doc.meet = event.meetLink;
517
+ if (event.attendees.length > 0) {
518
+ doc.attendees = event.attendees.map((a) => ({
519
+ email: a.email,
520
+ ...(a.name ? { name: a.name } : {}),
521
+ status: a.status,
522
+ }));
523
+ }
524
+ if (event.recurrence.length > 0)
525
+ doc.recurrence = event.recurrence;
526
+ if (event.htmlLink)
527
+ doc.link = event.htmlLink;
528
+ out.printYaml(doc);
529
+ }
530
+ function parseReminder(input) {
531
+ const [method, duration] = input.split(':');
532
+ if (!method || !duration) {
533
+ throw new Error(`Invalid reminder format: "${input}". Use method:duration (e.g. popup:15m)`);
534
+ }
535
+ const validMethods = ['popup', 'email'];
536
+ if (!validMethods.includes(method)) {
537
+ throw new Error(`Invalid reminder method: "${method}". Must be popup or email`);
538
+ }
539
+ const match = duration.match(/^(\d+)(m|h|d|w)?$/);
540
+ if (!match) {
541
+ throw new Error(`Invalid reminder duration: "${duration}". Use 30, 30m, 1h, 3d, or 1w`);
542
+ }
543
+ const value = Number(match[1]);
544
+ const unit = match[2] ?? 'm';
545
+ let minutes;
546
+ switch (unit) {
547
+ case 'm':
548
+ minutes = value;
549
+ break;
550
+ case 'h':
551
+ minutes = value * 60;
552
+ break;
553
+ case 'd':
554
+ minutes = value * 1440;
555
+ break;
556
+ case 'w':
557
+ minutes = value * 10080;
558
+ break;
559
+ default: minutes = value;
560
+ }
561
+ return { method, minutes };
562
+ }
563
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/commands/calendar.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,16 @@ export type label_counts = Prisma.label_countsModel;
32
32
  *
33
33
  */
34
34
  export type profiles = Prisma.profilesModel;
35
+ /**
36
+ * Model calendar_lists
37
+ *
38
+ */
39
+ export type calendar_lists = Prisma.calendar_listsModel;
40
+ /**
41
+ * Model calendar_events
42
+ *
43
+ */
44
+ export type calendar_events = Prisma.calendar_eventsModel;
35
45
  /**
36
46
  * Model sync_states
37
47
  *
@@ -49,6 +49,16 @@ export type label_counts = Prisma.label_countsModel;
49
49
  *
50
50
  */
51
51
  export type profiles = Prisma.profilesModel;
52
+ /**
53
+ * Model calendar_lists
54
+ *
55
+ */
56
+ export type calendar_lists = Prisma.calendar_listsModel;
57
+ /**
58
+ * Model calendar_events
59
+ *
60
+ */
61
+ export type calendar_events = Prisma.calendar_eventsModel;
52
62
  /**
53
63
  * Model sync_states
54
64
  *
@@ -177,6 +177,28 @@ export interface PrismaClient<in LogOpts extends Prisma.LogLevel = never, in out
177
177
  get profiles(): Prisma.profilesDelegate<ExtArgs, {
178
178
  omit: OmitOpts;
179
179
  }>;
180
+ /**
181
+ * `prisma.calendar_lists`: Exposes CRUD operations for the **calendar_lists** model.
182
+ * Example usage:
183
+ * ```ts
184
+ * // Fetch zero or more Calendar_lists
185
+ * const calendar_lists = await prisma.calendar_lists.findMany()
186
+ * ```
187
+ */
188
+ get calendar_lists(): Prisma.calendar_listsDelegate<ExtArgs, {
189
+ omit: OmitOpts;
190
+ }>;
191
+ /**
192
+ * `prisma.calendar_events`: Exposes CRUD operations for the **calendar_events** model.
193
+ * Example usage:
194
+ * ```ts
195
+ * // Fetch zero or more Calendar_events
196
+ * const calendar_events = await prisma.calendar_events.findMany()
197
+ * ```
198
+ */
199
+ get calendar_events(): Prisma.calendar_eventsDelegate<ExtArgs, {
200
+ omit: OmitOpts;
201
+ }>;
180
202
  /**
181
203
  * `prisma.sync_states`: Exposes CRUD operations for the **sync_states** model.
182
204
  * Example usage: