UNPKG

@openinc/parse-server-opendash

Version:
125 lines (124 loc) 4.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CalendarManager = void 0; const tenantID = process.env.MICROSOFT_TENANT_ID; const clientID = process.env.MICROSOFT_CLIENT_ID; const clientSecret = process.env.MICROSOFT_CLIENT_SECRET; const userMail = process.env.MICROSOFT_USER_EMAIL; /** * Manager for calendar operations via Microsoft Graph API */ class CalendarManager { constructor() { this.isValid = !!(tenantID && clientID && clientSecret && userMail); } async getAccess() { if (!this.isValid) return null; console.log("Getting access token..."); try { const params = new URLSearchParams(); params.append("client_id", clientID); params.append("client_secret", clientSecret); params.append("scope", "https://graph.microsoft.com/.default"); params.append("grant_type", "client_credentials"); const response = await fetch(`https://login.microsoftonline.com/${tenantID}/oauth2/v2.0/token`, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: params.toString(), }); const data = await response.json(); console.log("Access token fetched successfully:", data); return data; } catch (error) { console.error("Error fetching access token:", error); return null; } } /** * Create a new event in the calendar * @param event The event data to create * @returns the created event response */ async createEvent(event) { if (!userMail || !tenantID || !clientID || !clientSecret) return; const accessData = await this.getAccess(); if (!accessData?.access_token) return; const res = await fetch(`https://graph.microsoft.com/v1.0/users/${encodeURIComponent(userMail)}/events`, { method: "POST", headers: { Authorization: `Bearer ${accessData.access_token}`, "Content-Type": "application/json", }, body: JSON.stringify(event), }); const data = (await res.json()); console.log("Event creation response:", data); return data; } /** * Update an event in the calendar * @param eventId The ID of the event to update * @param event The updated event data * @returns */ async updateEvent(eventId, event) { const accessData = await this.getAccess(); if (!accessData?.access_token) return; const res = await fetch(`https://graph.microsoft.com/v1.0/users/${encodeURIComponent(userMail)}/events/${eventId}`, { method: "PATCH", headers: { Authorization: `Bearer ${accessData.access_token}`, "Content-Type": "application/json", }, body: JSON.stringify(event), }); const data = await res.json(); console.log("Event update response:", data); return data; } /** * Delete an event from the calendar * @param eventId The ID of the event to delete * @returns whether the deletion was successful */ async deleteEvent(eventId) { const accessData = await this.getAccess(); if (!accessData?.access_token) return; // on successful deletion, Microsoft Graph returns 204 No Content, so no JSON to parse const res = await fetch(`https://graph.microsoft.com/v1.0/users/${encodeURIComponent(userMail)}/events/${eventId}`, { method: "DELETE", headers: { Authorization: `Bearer ${accessData.access_token}`, }, }); console.log("Event deletion response:", res); return res.ok; } /** * Fetch all events in calendar * @returns the list of events */ async fetchEvents() { const accessData = await this.getAccess(); if (!accessData?.access_token) return; const res = await fetch(`https://graph.microsoft.com/v1.0/users/${encodeURIComponent(userMail)}/events`, { method: "GET", headers: { Authorization: `Bearer ${accessData.access_token}`, }, }); const data = await res.json(); console.log("Calendar events:", data); return data; } } exports.CalendarManager = CalendarManager;