Skip to main content
Glama

mcp-google-sheets

calendar-event.ts3.9 kB
import { createTrigger, PiecePropValueSchema, Property } from '@activepieces/pieces-framework'; import { TriggerStrategy } from '@activepieces/pieces-framework'; import { googleCalendarCommon } from '../common'; import { getEvents } from '../common/helper'; import { GoogleCalendarEvent } from '../common/types'; import { googleCalendarAuth } from '../../'; import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common'; const polling: Polling< PiecePropValueSchema<typeof googleCalendarAuth>, { calendarId?: string; expandRecurringEvent: boolean } > = { strategy: DedupeStrategy.TIMEBASED, items: async ({ auth, propsValue: { calendarId, expandRecurringEvent }, lastFetchEpochMS }) => { let minUpdated = new Date(lastFetchEpochMS); // Google Calendar API breaks if minUpdated is too far in the past if (lastFetchEpochMS === 0) { const now = new Date(); const yesterday = new Date(); yesterday.setDate(now.getDate() - 7); minUpdated = yesterday; } const currentValues: GoogleCalendarEvent[] = (await getEvents(calendarId!, expandRecurringEvent, auth, minUpdated)) ?? []; const items = currentValues.map((item) => ({ epochMilliSeconds: new Date(item.updated).getTime(), data: item, })); return items; }, }; export const calendarEventChanged = createTrigger({ // docs: https://developers.google.com/calendar/api/guides/push auth: googleCalendarAuth, name: 'new_or_updated_event', displayName: 'New or Updated Event', description: 'Triggers when an event is added or updated', props: { calendar_id: googleCalendarCommon.calendarDropdown(), expandRecurringEvent: Property.Checkbox({ displayName: 'Expand Recurring Event?', description: 'If true, the trigger will activate for every occurrence of a recurring event.', required: true, defaultValue: false, }), }, sampleData: { kind: 'calendar#event', etag: '3350849506974000', id: '0nsfi5ttd2b17ac76ma2f37oi9', htmlLink: 'https://www.google.com/calendar/event?eid=kgjb90uioj4klrgfmdsnjsjvlgkm', summary: 'ap-event-test', created: '2023-02-03T11:36:36.000Z', updated: '2023-02-03T11:45:53.487Z', description: 'Sample description', status: 'canceled', creator: { email: 'test@test.com', self: true, }, organizer: { email: 'test@test.com', self: true, }, start: { dateTime: '2023-02-02T22:30:00+03:00', timeZone: 'Asia/Amman', }, end: { dateTime: '2023-02-02T23:30:00+03:00', timeZone: 'Asia/Amman', }, transparency: 'transparent', iCalUID: '0nsfi5ttd2b17ac76ma2f37oi9@google.com', sequence: 1, attendees: [ { email: 'attende@test.com', responseStatus: 'needsAction', }, { email: 'test@test.com', organizer: true, self: true, responseStatus: 'accepted', }, ], reminders: { useDefault: true, }, eventType: 'default', }, type: TriggerStrategy.POLLING, async test({ store, auth, propsValue, files }) { return await pollingHelper.test(polling, { store, auth, propsValue: { calendarId: propsValue.calendar_id, expandRecurringEvent: propsValue.expandRecurringEvent, }, files, }); }, async onEnable({ store, auth, propsValue }) { await pollingHelper.onEnable(polling, { store, auth, propsValue: { calendarId: propsValue.calendar_id, expandRecurringEvent: propsValue.expandRecurringEvent, }, }); }, async onDisable({ store, auth, propsValue }) { await pollingHelper.onDisable(polling, { store, auth, propsValue: { calendarId: propsValue.calendar_id, expandRecurringEvent: propsValue.expandRecurringEvent, }, }); }, async run({ store, auth, propsValue, files }) { return await pollingHelper.poll(polling, { store, auth, propsValue: { calendarId: propsValue.calendar_id, expandRecurringEvent: propsValue.expandRecurringEvent, }, files, }); }, });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server