@remcostoeten/fync
Version:
A unified TypeScript library for easy access to popular APIs (GitHub, Spotify, GitLab, etc.)
124 lines • 4.2 kB
JavaScript
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