89 lines
3.4 KiB
JavaScript
89 lines
3.4 KiB
JavaScript
|
"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;
|