UNPKG

@remcostoeten/fync

Version:

A unified TypeScript library for easy access to popular APIs (GitHub, Spotify, GitLab, etc.)

124 lines 4.2 kB
import { createCalendarClient } from "./services/calendar-client"; function createCalendarService(config) { const client = createCalendarClient({ accessToken: config.accessToken, cache: config.cache, cacheTTL: config.cacheTTL, }); async function getCalendars(params) { const response = await client.users.me.calendarList.get({ params, }); return response.items; } async function getCalendar(calendarId) { return client.calendars[calendarId].get(); } async function getEvents(calendarId = "primary", params) { const transformedParams = params ? { ...params, ...(params.eventTypes && { eventTypes: params.eventTypes.join(","), }), } : undefined; const response = await client.calendars[calendarId].events.get({ params: transformedParams, }); return response.items; } async function getEvent(calendarId, eventId) { return client.calendars[calendarId].events[eventId].get(); } async function getUpcomingEvents(calendarId = "primary", maxResults = 10) { const now = new Date().toISOString(); return getEvents(calendarId, { timeMin: now, maxResults, singleEvents: true, orderBy: "startTime", }); } async function getEventsInDateRange(calendarId = "primary", startDate, endDate) { return getEvents(calendarId, { timeMin: startDate.toISOString(), timeMax: endDate.toISOString(), singleEvents: true, orderBy: "startTime", }); } async function getTodaysEvents(calendarId = "primary") { const today = new Date(); const startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate()); const endOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1); return getEventsInDateRange(calendarId, startOfDay, endOfDay); } async function searchEvents(query, calendarId = "primary", maxResults = 25) { return getEvents(calendarId, { q: query, maxResults, singleEvents: true, orderBy: "startTime", }); } async function getColors() { return client.colors.get(); } async function getFreeBusy(params) { const transformedParams = { ...params, items: JSON.stringify(params.items), }; return client.freebusy.query.get({ params: transformedParams, }); } async function isTimeSlotBusy(calendarId, startTime, endTime) { const freeBusyResult = await getFreeBusy({ timeMin: startTime.toISOString(), timeMax: endTime.toISOString(), items: [{ id: calendarId }], }); const calendarBusy = freeBusyResult.calendars[calendarId]?.busy || []; return calendarBusy.length > 0; } async function getAllCalendarEvents(maxResults) { const calendars = await getCalendars(); const results = []; for (const calendar of calendars) { if (calendar.accessRole === "reader" || calendar.accessRole === "writer" || calendar.accessRole === "owner") { try { const events = await getEvents(calendar.id, { maxResults, singleEvents: true, orderBy: "startTime", }); results.push({ calendar, events }); } catch { } } } return results; } return { getCalendars, getCalendar, getEvents, getEvent, getUpcomingEvents, getEventsInDateRange, getTodaysEvents, searchEvents, getColors, getFreeBusy, isTimeSlotBusy, getAllCalendarEvents, }; } export { createCalendarService }; export * from "./types"; //# sourceMappingURL=index.js.map