Skip to main content
Glama

mcp-google-sheets

index.ts5.02 kB
import { DropdownOption, OAuth2PropertyValue, Property } from '@activepieces/pieces-framework'; import { HttpRequest, HttpMethod, httpClient } from '@activepieces/pieces-common'; import { FacebookForm, FacebookLead, FacebookPage, FacebookPageDropdown, FacebookPaginatedResponse, } from './types'; export const facebookLeadsCommon = { baseUrl: 'https://graph.facebook.com', page: Property.Dropdown({ displayName: 'Page', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Connect your account first.', }; } try { const authValue = auth as OAuth2PropertyValue; const options: DropdownOption<FacebookPageDropdown>[] = []; let nextUrl: string | null = `${facebookLeadsCommon.baseUrl}/me/accounts`; do { const response = await httpClient.sendRequest({ method: HttpMethod.GET, url: nextUrl, queryParams: { access_token: authValue.access_token, }, }); const { data, paging } = response.body as FacebookPaginatedResponse<FacebookPage>; const items = data ?? []; for (const page of items) { options.push({ label: page.name, value: { id: page.id, accessToken: page.access_token, }, }); } nextUrl = paging?.next ?? null; } while (nextUrl); return { disabled: false, options, }; } catch (e) { return { disabled: true, options: [], placeholder: 'Error occured while fetching pages.', }; } }, }), form: Property.Dropdown({ displayName: 'Form', required: false, refreshers: ['page'], options: async ({ page }) => { if (!page) { return { disabled: true, options: [], placeholder: 'Select page first.', }; } try { const pageDeatils = page as { id: string; accessToken: string; }; const options: DropdownOption<string>[] = [ { label: 'All Forms (Default)', value: 'all', }, ]; let nextUrl: | string | null = `${facebookLeadsCommon.baseUrl}/${pageDeatils.id}/leadgen_forms`; do { const response = await httpClient.sendRequest({ method: HttpMethod.GET, url: nextUrl, queryParams: { access_token: pageDeatils.accessToken, }, }); const { data, paging } = response.body as FacebookPaginatedResponse<FacebookForm>; const items = data ?? []; for (const form of items) { options.push({ label: form.name, value: form.id, }); } nextUrl = paging?.next ?? null; } while (nextUrl); return { disabled: false, options, }; } catch (e) { return { disabled: true, options: [], placeholder: 'Error occured while fetching forms.', }; } }, }), subscribePageToApp: async (pageId: any, accessToken: string) => { const request: HttpRequest = { method: HttpMethod.POST, url: `${facebookLeadsCommon.baseUrl}/${pageId}/subscribed_apps`, body: { access_token: accessToken, subscribed_fields: ['leadgen'], }, }; await httpClient.sendRequest(request); }, getPageForms: async (pageId: string, accessToken: string) => { const request: HttpRequest = { method: HttpMethod.GET, url: `${facebookLeadsCommon.baseUrl}/${pageId}/leadgen_forms`, queryParams: { access_token: accessToken, }, }; const response = await httpClient.sendRequest(request); return response.body.data; }, getLeadDetails: async (leadId: string, accessToken: string) => { const response = await httpClient.sendRequest<FacebookLead>({ method: HttpMethod.GET, url: `${facebookLeadsCommon.baseUrl}/${leadId}`, queryParams: { access_token: accessToken, fields: 'field_data,created_time,ad_id,ad_name,adset_id,adset_name,campaign_id,campaign_name,form_id,platform', }, }); return response.body; }, loadSampleData: async (formId: string, accessToken: string) => { const response = await httpClient.sendRequest<FacebookPaginatedResponse<FacebookLead>>({ method: HttpMethod.GET, url: `${facebookLeadsCommon.baseUrl}/${formId}/leads`, queryParams: { access_token: accessToken, fields: 'field_data,created_time,ad_id,ad_name,adset_id,adset_name,campaign_id,campaign_name,form_id,platform', }, }); return response.body; }, transformLeadData: (leadData: FacebookLead) => { return { lead_id: leadData.id, form_id: leadData.form_id, platform: leadData.platform, ad_id: leadData.ad_id, ad_name: leadData.ad_name, adset_id: leadData.adset_id, adset_name: leadData.adset_name, campaign_id: leadData.campaign_id, campaign_name: leadData.campaign_name, created_time: leadData.created_time, data: leadData.field_data.reduce( (acc, field) => ({ ...acc, [field.name]: field.values && field.values.length > 0 ? field.values[0] : null, }), {}, ), }; }, };

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