Skip to main content
Glama

Activepieces MCP Server

by eldoonreval
helper.tsβ€’4.29 kB
import { OAuth2PropertyValue } from '@activepieces/pieces-framework'; import { AuthenticationType, httpClient, HttpMethod, HttpRequest, } from '@activepieces/pieces-common'; import { randomUUID } from 'crypto'; import { googleCalendarCommon } from '.'; import { GoogleWatchResponse, GoogleWatchType, CalendarObject, CalendarList, GoogleCalendarEvent, GoogleCalendarEventList, GetColorsResponse, } from './types'; export async function stopWatchEvent( body: GoogleWatchResponse, authProp: OAuth2PropertyValue ) { const request: HttpRequest = { method: HttpMethod.POST, url: `${googleCalendarCommon.baseUrl}/channels/stop`, body: { id: body?.id, resourceId: body?.resourceId, }, authentication: { type: AuthenticationType.BEARER_TOKEN, token: authProp.access_token, }, }; await httpClient.sendRequest<any>(request); } export async function watchEvent( calendarId: string, webhookUrl: string, authProp: OAuth2PropertyValue ): Promise<GoogleWatchResponse> { const request: HttpRequest = { method: HttpMethod.POST, url: `${googleCalendarCommon.baseUrl}/calendars/${calendarId}/events/watch`, body: { id: randomUUID(), type: GoogleWatchType.WEBHOOK, address: webhookUrl, }, authentication: { type: AuthenticationType.BEARER_TOKEN, token: authProp.access_token, }, }; const { body: webhook } = await httpClient.sendRequest<GoogleWatchResponse>( request ); return webhook; } export async function getCalendars( authProp: OAuth2PropertyValue, minAccessRole?: 'writer' ): Promise<CalendarObject[]> { // docs: https://developers.google.com/calendar/api/v3/reference/calendarList/list const queryParams: Record<string, string> = { showDeleted: 'false', }; if (minAccessRole) { queryParams['minAccessRole'] = minAccessRole; } const request: HttpRequest = { method: HttpMethod.GET, url: `${googleCalendarCommon.baseUrl}/users/me/calendarList`, queryParams: queryParams, authentication: { type: AuthenticationType.BEARER_TOKEN, token: authProp.access_token, }, }; const response = await httpClient.sendRequest<CalendarList>(request); return response.body.items; } export async function getColors( authProp: OAuth2PropertyValue ): Promise<GetColorsResponse> { const request: HttpRequest = { method: HttpMethod.GET, url: `${googleCalendarCommon.baseUrl}/colors`, authentication: { type: AuthenticationType.BEARER_TOKEN, token: authProp.access_token, }, }; const response = await httpClient.sendRequest<GetColorsResponse>(request); return response.body; } export async function getEvents( calendarId: string, expandRecurringEvent: boolean, authProp: OAuth2PropertyValue, minUpdated?: Date ): Promise<GoogleCalendarEvent[]> { // docs: https://developers.google.com/calendar/api/v3/reference/events/list const now = new Date(); const yesterday = new Date(); yesterday.setDate(now.getDate() - 1); const qParams: Record<string, string> = { updatedMin: minUpdated?.toISOString() ?? yesterday.toISOString(), maxResults: '2500', // Modified orderBy: 'updated', singleEvents: expandRecurringEvent ? 'true' : 'false', showDeleted: 'true', }; const request: HttpRequest = { method: HttpMethod.GET, url: `${googleCalendarCommon.baseUrl}/calendars/${calendarId}/events`, queryParams: qParams, authentication: { type: AuthenticationType.BEARER_TOKEN, token: authProp.access_token, }, }; let eventList: GoogleCalendarEvent[] = []; let pageToken = ''; do { qParams['pageToken'] = pageToken; const { body: res } = await httpClient.sendRequest<GoogleCalendarEventList>( request ); if (res.items.length > 0) { eventList = [...eventList, ...res.items]; } pageToken = res.nextPageToken; } while (pageToken); return eventList; } export async function getLatestEvent( calendarId: string, authProp: OAuth2PropertyValue ): Promise<GoogleCalendarEvent> { const eventList = await getEvents(calendarId, false, authProp); const lastUpdatedEvent = eventList.pop()!; // You can retrieve the last updated event. return lastUpdatedEvent; }

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/eldoonreval/activepieces'

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