"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const google_auth_library_1 = require("google-auth-library"); const googleapis_1 = require("googleapis"); require("dotenv").config(); const env = process.env; class GoogleCalendar { constructor() { this.gamesMap = {}; this.clientSecret = env.GOOGLE_CLIENT_SECRET; this.clientId = env.GOOGLE_CLIENT_ID; this.calenderId = env.GOOGLE_CALENDAR_ID; this.clientEmail = env.GOOGLE_CLIENT_EMAIL; this.googlePrivateKey = env.GOOGLE_PRIVATE_KEY.replace(/\\n/g, "\n"); } async init() { console.log("INIT GOOGLE CALENDAR"); const jwtClient = await this.authorize(); this.calendar = googleapis_1.google.calendar({ version: "v3", auth: jwtClient }); } async authorize() { console.log("AUTHORIZE GOOGLE CALENDAR"); this.JWT_client = new google_auth_library_1.JWT({ email: this.clientEmail, key: this.googlePrivateKey, scopes: ["https://www.googleapis.com/auth/calendar"], }); const { access_token } = await this.JWT_client.authorize(); this.token = access_token; if (!this.token) { throw new Error("Failed to connect to google calendar"); } console.log("GOOGLE CALENDAR AUTHORIZED SUCCESSFULLY"); return this.JWT_client; } async updateNewEvent(upcomingEvents) { // console.log(upcomingEvents) setTimeout(async () => { upcomingEvents.forEach(async (event) => { console.log("UPDATE NEW EVENT", upcomingEvents); const options = { auth: this.JWT_client, calendarId: this.calenderId, resource: { summary: event.summary, location: event.location, description: event.description, start: { dateTime: event.start.dateTime, timeZone: "Asia/Jerusalem", }, end: { dateTime: event.end.dateTime, timeZone: "Asia/Jerusalem" }, sendNotifications: true, }, }; await this.calendar.events.insert(options, function (err, event) { if (err) { console.log("There was an error contacting the Calendar service: " + err); return; } console.log(event.description + " created"); }); }); }, 3000); } async isDuplicateEvent(startTime, endTime, title) { if (this.gamesMap[startTime]) { console.log("duplicate event"); return true; } this.gamesMap[startTime] = true; console.log("checking for duplicate event"); try { const response = await this.calendar.events.list({ calendarId: this.calenderId, timeMin: startTime, timeMax: endTime, q: title, // Search for events with the same title }); return response.data.items.length > 0; } catch (error) { console.error(error.message); return false; } } } exports.default = GoogleCalendar;