// import { google } from 'googleapis'; // import { // IHookFunctions, // IWebhookFunctions, // } from 'n8n-core'; // import { // IDataObject, // INodeTypeDescription, // INodeType, // IWebhookResponseData, // } from 'n8n-workflow'; // import { getAuthenticationClient } from './GoogleApi'; // export class GoogleDriveTrigger implements INodeType { // description: INodeTypeDescription = { // displayName: 'Google Drive Trigger', // name: 'googleDriveTrigger', // icon: 'file:googleDrive.png', // group: ['trigger'], // version: 1, // subtitle: '={{$parameter["owner"] + "/" + $parameter["repository"] + ": " + $parameter["events"].join(", ")}}', // description: 'Starts the workflow when a file on Google Drive got changed.', // defaults: { // name: 'Google Drive Trigger', // color: '#3f87f2', // }, // inputs: [], // outputs: ['main'], // credentials: [ // { // name: 'googleApi', // required: true, // } // ], // webhooks: [ // { // name: 'default', // httpMethod: 'POST', // responseMode: 'onReceived', // path: 'webhook', // }, // ], // properties: [ // { // displayName: 'Resource Id', // name: 'resourceId', // type: 'string', // default: '', // required: true, // placeholder: '', // description: 'ID of the resource to watch, for example a file ID.', // }, // ], // }; // // @ts-ignore (because of request) // webhookMethods = { // default: { // async checkExists(this: IHookFunctions): Promise { // // const webhookData = this.getWorkflowStaticData('node'); // // if (webhookData.webhookId === undefined) { // // // No webhook id is set so no webhook can exist // // return false; // // } // // // Webhook got created before so check if it still exists // // const owner = this.getNodeParameter('owner') as string; // // const repository = this.getNodeParameter('repository') as string; // // const endpoint = `/repos/${owner}/${repository}/hooks/${webhookData.webhookId}`; // // try { // // await githubApiRequest.call(this, 'GET', endpoint, {}); // // } catch (e) { // // if (e.message.includes('[404]:')) { // // // Webhook does not exist // // delete webhookData.webhookId; // // delete webhookData.webhookEvents; // // return false; // // } // // // Some error occured // // throw e; // // } // // If it did not error then the webhook exists // // return true; // return false; // }, // async create(this: IHookFunctions): Promise { // const webhookUrl = this.getNodeWebhookUrl('default'); // const resourceId = this.getNodeParameter('resourceId') as string; // const credentials = this.getCredentials('googleApi'); // if (credentials === undefined) { // throw new Error('No credentials got returned!'); // } // const scopes = [ // 'https://www.googleapis.com/auth/drive', // 'https://www.googleapis.com/auth/drive.appdata', // 'https://www.googleapis.com/auth/drive.photos.readonly', // ]; // const client = await getAuthenticationClient(credentials.email as string, credentials.privateKey as string, scopes); // const drive = google.drive({ // version: 'v3', // auth: client, // }); // const accessToken = await client.getAccessToken(); // console.log('accessToken: '); // console.log(accessToken); // const asdf = await drive.changes.getStartPageToken(); // // console.log('asdf: '); // // console.log(asdf); // const response = await drive.changes.watch({ // // // pageToken: asdf.data.startPageToken, // requestBody: { // id: 'asdf-test-2', // address: webhookUrl, // resourceId, // type: 'web_hook', // // page_token: '', // } // }); // console.log('...response...CREATE'); // console.log(JSON.stringify(response, null, 2)); // // const endpoint = `/repos/${owner}/${repository}/hooks`; // // const body = { // // name: 'web', // // config: { // // url: webhookUrl, // // content_type: 'json', // // // secret: '...later...', // // insecure_ssl: '1', // '0' -> not allow inscure ssl | '1' -> allow insercure SSL // // }, // // events, // // active: true, // // }; // // let responseData; // // try { // // responseData = await githubApiRequest.call(this, 'POST', endpoint, body); // // } catch (e) { // // if (e.message.includes('[422]:')) { // // throw new Error('A webhook with the identical URL exists already. Please delete it manually on Github!'); // // } // // throw e; // // } // // if (responseData.id === undefined || responseData.active !== true) { // // // Required data is missing so was not successful // // throw new Error('Github webhook creation response did not contain the expected data.'); // // } // // const webhookData = this.getWorkflowStaticData('node'); // // webhookData.webhookId = responseData.id as string; // // webhookData.webhookEvents = responseData.events as string[]; // return true; // }, // async delete(this: IHookFunctions): Promise { // const webhookUrl = this.getNodeWebhookUrl('default'); // const resourceId = this.getNodeParameter('resourceId') as string; // const credentials = this.getCredentials('googleApi'); // if (credentials === undefined) { // throw new Error('No credentials got returned!'); // } // const scopes = [ // 'https://www.googleapis.com/auth/drive', // 'https://www.googleapis.com/auth/drive.appdata', // 'https://www.googleapis.com/auth/drive.photos.readonly', // ]; // const client = await getAuthenticationClient(credentials.email as string, credentials.privateKey as string, scopes); // const drive = google.drive({ // version: 'v3', // auth: client, // }); // // Remove channel // const response = await drive.channels.stop({ // requestBody: { // id: 'asdf-test-2', // address: webhookUrl, // resourceId, // type: 'web_hook', // } // }); // console.log('...response...DELETE'); // console.log(JSON.stringify(response, null, 2)); // // const webhookData = this.getWorkflowStaticData('node'); // // if (webhookData.webhookId !== undefined) { // // const owner = this.getNodeParameter('owner') as string; // // const repository = this.getNodeParameter('repository') as string; // // const endpoint = `/repos/${owner}/${repository}/hooks/${webhookData.webhookId}`; // // const body = {}; // // try { // // await githubApiRequest.call(this, 'DELETE', endpoint, body); // // } catch (e) { // // return false; // // } // // // Remove from the static workflow data so that it is clear // // // that no webhooks are registred anymore // // delete webhookData.webhookId; // // delete webhookData.webhookEvents; // // } // return true; // }, // }, // }; // async webhook(this: IWebhookFunctions): Promise { // const bodyData = this.getBodyData(); // console.log(''); // console.log(''); // console.log('GOT WEBHOOK CALL'); // console.log(JSON.stringify(bodyData, null, 2)); // // Check if the webhook is only the ping from Github to confirm if it workshook_id // if (bodyData.hook_id !== undefined && bodyData.action === undefined) { // // Is only the ping and not an actual webhook call. So return 'OK' // // but do not start the workflow. // return { // webhookResponse: 'OK' // }; // } // // Is a regular webhoook call // // TODO: Add headers & requestPath // const returnData: IDataObject[] = []; // returnData.push( // { // body: bodyData, // headers: this.getHeaderData(), // query: this.getQueryData(), // } // ); // return { // workflowData: [ // this.helpers.returnJsonArray(returnData) // ], // }; // } // }