I'm reading through the docs on inserting events in to the google calendar api but not having any success. I was able to follow the quick start guide and pull a list of events from my google calendar but now I cant get the insert to work. I've kept the enviroment set up the same and just added the insert method but My error is There was an error contacting the Calendar service: Error: Insufficent Permission
const fs = require('fs');
const readline = require('readline');
const { google } = require('googleapis');
const SCOPES = ['https://www.googleapis.com/auth/calendar'];
const TOKEN_PATH = 'credentials.json';
// Load client secrets from a local file.
try {
const content = fs.readFileSync('client_secret.json');
authorize(JSON.parse(content), insertEvents);
} catch (err) {
return console.log('Error loading client secret file:', err);
}
/**
* Create an OAuth2 client with the given credentials, and then execute the
* given callback function.
* @param {Object} credentials The authorization client credentials.
* @param {function} callback The callback to call with the authorized client.
* @return {function} if error in reading credentials.json asks for a new one.
*/
function authorize(credentials, callback) {
const { client_secret, client_id, redirect_uris } = credentials.installed;
let token = {};
const oAuth2Client = new google.auth.OAuth2(
client_id,
client_secret,
redirect_uris[0]
);
// Check if we have previously stored a token.
try {
token = fs.readFileSync(TOKEN_PATH);
} catch (err) {
return getAccessToken(oAuth2Client, callback);
}
oAuth2Client.setCredentials(JSON.parse(token));
callback(oAuth2Client);
}
/**
* Get and store new token after prompting for user authorization, and then
* execute the given callback with the authorized OAuth2 client.
* @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for.
* @param {getEventsCallback} callback The callback for the authorized client.
*/
function getAccessToken(oAuth2Client, callback) {
const authUrl = oAuth2Client.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();
oAuth2Client.getToken(code, (err, token) => {
if (err) return callback(err);
oAuth2Client.setCredentials(token);
// Store the token to disk for later program executions
try {
fs.writeFileSync(TOKEN_PATH, JSON.stringify(token));
console.log('Token stored to', TOKEN_PATH);
} catch (err) {
console.error(err);
}
callback(oAuth2Client);
});
});
}
function insertEvents(auth) {
const calendar = google.calendar({ version: 'v3', auth });
var event = {
summary: 'Google I/O 2015',
location: '800 Howard St., San Francisco, CA 94103',
description: "A chance to hear more about Google's developer products.",
start: {
dateTime: '2015-05-28T09:00:00-07:00',
timeZone: 'America/Los_Angeles'
},
end: {
dateTime: '2015-05-28T17:00:00-07:00',
timeZone: 'America/Los_Angeles'
},
recurrence: ['RRULE:FREQ=DAILY;COUNT=2'],
attendees: [{ email: 'lpage@example.com' }, { email: 'sbrin@example.com' }],
reminders: {
useDefault: false,
overrides: [
{ method: 'email', minutes: 24 * 60 },
{ method: 'popup', minutes: 10 }
]
}
};
calendar.events.insert(
{
auth: auth,
calendarId: 'primary',
resource: event
},
function(err, event) {
if (err) {
console.log(
'There was an error contacting the Calendar service: ' + err
);
return;
}
console.log('Event created: %s', event.htmlLink);
}
);
}