summaryrefslogtreecommitdiff
path: root/src/GoogleCalendar.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/GoogleCalendar.ts')
-rw-r--r--src/GoogleCalendar.ts90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/GoogleCalendar.ts b/src/GoogleCalendar.ts
new file mode 100644
index 0000000..2376c6b
--- /dev/null
+++ b/src/GoogleCalendar.ts
@@ -0,0 +1,90 @@
+import * as fs from 'fs';
+import * as readline from 'readline';
+import {google} from "googleapis";
+
+const OAuth2Client = google.auth.OAuth2;
+const scopes = ['https://www.googleapis.com/auth/calendar'];
+
+const credentialsPath = 'client_secret.json';
+const tokenPath = 'credentials.json';
+
+export const clientPromise = new Promise((resolve, reject) => {
+ fs.readFile(credentialsPath, (err, data) => {
+ if (err) return reject(err);
+
+ const credentials = JSON.parse(data.toString());
+ const {client_secret, client_id, redirect_uris} = credentials.installed;
+
+ const client = new OAuth2Client(client_id, client_secret, redirect_uris[0]);
+
+ fs.readFile(tokenPath, (err, data) => {
+ if (err) {
+ const authUrl = client.generateAuthUrl({
+ access_type: 'offline',
+ scope: scopes,
+ });
+
+ console.log('Authorize this app by visiting this url:', authUrl);
+
+ const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+ });
+
+ rl.question('Enter the code from that page here: ', code => {
+ rl.close();
+ client.getToken(code, (err, token) => {
+ if (err) return reject(err);
+ fs.writeFile(tokenPath, JSON.stringify(token), err => err ? console.error(err) : 0);
+ client.setCredentials(token);
+ resolve(client);
+ });
+ });
+ }
+ else {
+ client.setCredentials(JSON.parse(data.toString()));
+ resolve(client);
+ }
+ });
+ });
+});
+
+export const calendarPromise = clientPromise.then(auth => google.calendar({version: 'v3', auth}));
+
+
+export async function listEvents() {
+ const calendar = await calendarPromise;
+ calendar.events.list({
+ calendarId: 'primary',
+ timeMin: (new Date()).toISOString(),
+ maxResults: 10,
+ singleEvents: true,
+ orderBy: 'startTime',
+ }, (err, data) => {
+ if (err) return console.log('The API returned an error: ' + err);
+ const events = data.data.items;
+ if (events.length) {
+ console.log('Upcoming 10 events:');
+ events.map((event, i) => {
+ const start = event.start.dateTime || event.start.date;
+ console.log(`${start} - ${event.summary}`);
+ });
+ } else {
+ console.log('No upcoming events found.');
+ }
+ });
+}
+
+export function createEvent(event, calendarId = 'primary') {
+ return calendarPromise.then(calendar => {
+ return new Promise((resolve, reject) => {
+ calendar.events.insert({
+ calendarId: calendarId,
+ resource: event,
+ }, function (err, event) {
+ if (err) return reject(err);
+ resolve(event);
+ });
+ })
+ });
+}