diff options
| author | Tim Schiewe <git@tforge.de> | 2018-04-30 18:15:52 +0200 |
|---|---|---|
| committer | Tim Schiewe <git@tforge.de> | 2018-04-30 18:15:52 +0200 |
| commit | 93b466df50d94d4c15715f5eb4d88a0be7d61c11 (patch) | |
| tree | 4923ae6a554b6e599af53a401825ec8391250620 /src/GoogleCalendar.ts | |
| parent | fba804b69e5cbdbe7cb71d6137b2b2a56230a971 (diff) | |
| download | splus-93b466df50d94d4c15715f5eb4d88a0be7d61c11.tar.gz splus-93b466df50d94d4c15715f5eb4d88a0be7d61c11.zip | |
Create better structure
Diffstat (limited to 'src/GoogleCalendar.ts')
| -rw-r--r-- | src/GoogleCalendar.ts | 90 |
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); + }); + }) + }); +} |
