@remcostoeten/fync
Version:
Unified TypeScript library for 9 popular APIs with consistent functional architecture
338 lines (337 loc) • 8.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _exportNames = {
GoogleCalendar: true,
GoogleOAuth: true
};
exports.GoogleCalendar = GoogleCalendar;
Object.defineProperty(exports, "GoogleOAuth", {
enumerable: true,
get: function () {
return _oauth.GoogleOAuth;
}
});
var _core = require("../core");
var _oauth = require("./oauth");
var _types = require("./types");
Object.keys(_types).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _types[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _types[key];
}
});
});
const GOOGLE_CALENDAR_API_BASE = "https://www.googleapis.com/calendar/v3";
const calendarListResource = (0, _core.defineResource)({
name: "calendarList",
basePath: "/users/me/calendarList",
methods: {
listCalendars: {
path: ""
},
getCalendarListEntry: {
path: "/{calendarId}"
},
insertCalendarListEntry: {
path: "",
method: "POST"
},
updateCalendarListEntry: {
path: "/{calendarId}",
method: "PUT"
},
patchCalendarListEntry: {
path: "/{calendarId}",
method: "PATCH"
},
deleteCalendarListEntry: {
path: "/{calendarId}",
method: "DELETE"
}
}
});
const calendarsResource = (0, _core.defineResource)({
name: "calendars",
basePath: "/calendars",
methods: {
getCalendar: {
path: "/{calendarId}"
},
insertCalendar: {
path: "",
method: "POST"
},
updateCalendar: {
path: "/{calendarId}",
method: "PUT"
},
patchCalendar: {
path: "/{calendarId}",
method: "PATCH"
},
deleteCalendar: {
path: "/{calendarId}",
method: "DELETE"
},
clearCalendar: {
path: "/{calendarId}/clear",
method: "POST"
}
}
});
const eventsResource = (0, _core.defineResource)({
name: "events",
basePath: "/calendars/{calendarId}/events",
methods: {
listEvents: {
path: ""
},
getEvent: {
path: "/{eventId}"
},
insertEvent: {
path: "",
method: "POST"
},
updateEvent: {
path: "/{eventId}",
method: "PUT"
},
patchEvent: {
path: "/{eventId}",
method: "PATCH"
},
deleteEvent: {
path: "/{eventId}",
method: "DELETE"
},
moveEvent: {
path: "/{eventId}/move",
method: "POST"
},
watchEvents: {
path: "/watch",
method: "POST"
},
quickAddEvent: {
path: "/quickAdd",
method: "POST"
},
getEventInstances: {
path: "/{eventId}/instances"
}
}
});
const freeBusyResource = (0, _core.defineResource)({
name: "freebusy",
basePath: "/freeBusy",
methods: {
queryFreeBusy: {
path: "",
method: "POST"
}
}
});
const colorsResource = (0, _core.defineResource)({
name: "colors",
basePath: "/colors",
methods: {
getColors: {
path: ""
}
}
});
const aclResource = (0, _core.defineResource)({
name: "acl",
basePath: "/calendars/{calendarId}/acl",
methods: {
listAcl: {
path: ""
},
getAclRule: {
path: "/{ruleId}"
},
insertAclRule: {
path: "",
method: "POST"
},
updateAclRule: {
path: "/{ruleId}",
method: "PUT"
},
patchAclRule: {
path: "/{ruleId}",
method: "PATCH"
},
deleteAclRule: {
path: "/{ruleId}",
method: "DELETE"
}
}
});
const settingsResource = (0, _core.defineResource)({
name: "settings",
basePath: "/users/me/settings",
methods: {
listSettings: {
path: ""
},
getSetting: {
path: "/{setting}"
},
watchSettings: {
path: "/watch",
method: "POST"
}
}
});
const resources = {
calendarList: calendarListResource,
calendars: calendarsResource,
events: eventsResource,
freebusy: freeBusyResource,
colors: colorsResource,
acl: aclResource,
settings: settingsResource
};
const buildGoogleCalendar = (0, _core.createApiBuilder)({
baseUrl: GOOGLE_CALENDAR_API_BASE,
auth: {
type: "bearer"
},
headers: {
"Content-Type": "application/json"
}
});
function GoogleCalendar(config) {
const base = buildGoogleCalendar(config, resources);
const calendar = base;
calendar.getCalendars = function () {
return base.calendarList.listCalendars();
};
calendar.getCalendar = function (calendarId) {
return base.calendars.getCalendar({
calendarId
});
};
calendar.getEvents = function (calendarId = "primary", options) {
return base.events.listEvents({
calendarId,
...options
});
};
calendar.getEvent = function (calendarId, eventId) {
return base.events.getEvent({
calendarId,
eventId
});
};
calendar.getUpcomingEvents = async function (calendarId = "primary", maxResults = 10) {
const now = new Date().toISOString();
const response = await base.events.listEvents({
calendarId,
timeMin: now,
maxResults,
singleEvents: true,
orderBy: "startTime"
});
return response.items || [];
};
calendar.getEventsInDateRange = async function (calendarId = "primary", startDate, endDate) {
const response = await base.events.listEvents({
calendarId,
timeMin: startDate.toISOString(),
timeMax: endDate.toISOString(),
singleEvents: true,
orderBy: "startTime"
});
return response.items || [];
};
calendar.getTodaysEvents = async function (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 calendar.getEventsInDateRange(calendarId, startOfDay, endOfDay);
};
calendar.searchEvents = async function (query, calendarId = "primary", maxResults = 25) {
const response = await base.events.listEvents({
calendarId,
q: query,
maxResults,
singleEvents: true,
orderBy: "startTime"
});
return response.items || [];
};
calendar.getColors = function () {
return base.colors.getColors();
};
calendar.getFreeBusy = function (params) {
return base.freebusy.queryFreeBusy(params);
};
calendar.isTimeSlotBusy = async function (calendarId, startTime, endTime) {
const freeBusyResult = await base.freebusy.queryFreeBusy({
timeMin: startTime.toISOString(),
timeMax: endTime.toISOString(),
items: [{
id: calendarId
}]
});
const calendarBusy = freeBusyResult.calendars?.[calendarId]?.busy || [];
return calendarBusy.length > 0;
};
calendar.getAllCalendarEvents = async function (maxResults) {
const calendarListResponse = await base.calendarList.listCalendars();
const calendars = calendarListResponse.items || [];
const results = [];
for (const cal of calendars) {
if (cal.accessRole === "reader" || cal.accessRole === "writer" || cal.accessRole === "owner") {
try {
const eventsResponse = await base.events.listEvents({
calendarId: cal.id,
maxResults,
singleEvents: true,
orderBy: "startTime"
});
results.push({
calendar: cal,
events: eventsResponse.items || []
});
} catch {}
}
}
return results;
};
calendar.createEvent = function (calendarId, event) {
return base.events.insertEvent({
calendarId,
...event
});
};
calendar.updateEvent = function (calendarId, eventId, event) {
return base.events.updateEvent({
calendarId,
eventId,
...event
});
};
calendar.deleteEvent = function (calendarId, eventId) {
return base.events.deleteEvent({
calendarId,
eventId
});
};
calendar.quickAddEvent = function (calendarId, text) {
return base.events.quickAddEvent({
calendarId,
text
});
};
return calendar;
}