Skip to main content
Glama

mcp-google-sheets

index.ts4.65 kB
import { DynamicPropsValue, Property } from '@activepieces/pieces-framework'; import { VboutClient } from './client'; import { ContactStatusValues, SocialMediaChannelValues, SocialMediaProfile, } from './models'; export function makeClient(apiKey: string): VboutClient { return new VboutClient(apiKey); } export const vboutCommon = { baseUrl: 'https://api.vbout.com/1', listid: (required = true) => Property.Dropdown({ displayName: 'List ID', required: required, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Connect your account first', options: [], }; } const client = makeClient(auth as string); const res = await client.listEmailLists(); return { disabled: false, options: res.lists.items.map((list) => { return { label: list.name, value: list.id, }; }), }; }, }), listFields: Property.DynamicProperties({ displayName: 'Fields', required: true, refreshers: ['listid'], props: async ({ auth, listid }) => { if (!auth || !listid) { return { disabled: true, options: [], placeholder: 'Please connect your account and select Email List.', }; } const fields: DynamicPropsValue = {}; const client = makeClient(auth as unknown as string); const contactList = await client.getEmailList( listid as unknown as string ); const contactListFields = contactList.response.data.list.fields; Object.keys(contactListFields).forEach((key) => { fields[key] = Property.ShortText({ displayName: contactListFields[key], required: false, }); }); return fields; }, }), contactStatus: (required = true) => Property.StaticDropdown({ displayName: 'Contact Status', required: required, options: { disabled: false, options: [ { label: 'Unconfirmed', value: ContactStatusValues.UNCONFIRMED, }, { label: 'Active', value: ContactStatusValues.ACTIVE, }, { label: 'Unsubscribe', value: ContactStatusValues.UNSUBSCRIBE, }, { label: 'Bounced Email', value: ContactStatusValues.BOUNCED_EMAIL, }, ], }, }), socialMediaChannel: Property.StaticDropdown({ displayName: 'Social Media Channel', required: true, options: { disabled: false, options: [ { label: 'Twitter', value: SocialMediaChannelValues.TWITTER, }, { label: 'LinkedIn', value: SocialMediaChannelValues.LINKEDIN, }, { label: 'Facebook', value: SocialMediaChannelValues.FACEBOOK, }, ], }, }), socialMediaProfile: Property.Dropdown({ displayName: 'Social Media Account', required: true, refreshers: ['channel'], options: async ({ auth, channel }) => { if (!auth || !channel) { return { disabled: true, options: [], placeholder: 'Please connect your account and select social media channel.', }; } const client = makeClient(auth as string); const { channels } = await client.listSocialMediaChannels(); let options: { label: string; value: string }[] = []; switch (channel as string) { case SocialMediaChannelValues.TWITTER: { options = [ ...options, ...mapSocialMediaProfile(channels.Twitter.profiles), ]; break; } case SocialMediaChannelValues.FACEBOOK: { options = [ ...options, ...mapSocialMediaProfile(channels.Facebook.pages), ]; break; } case SocialMediaChannelValues.LINKEDIN: { options = [ ...options, ...mapSocialMediaProfile(channels.Linkedin.companies), ...mapSocialMediaProfile(channels.Linkedin.profiles), ]; break; } } return { disabled: false, options: options, }; }, }), }; function mapSocialMediaProfile( profiles: SocialMediaProfile[] ): { label: string; value: string }[] { return profiles.map((profile) => { return { label: profile.name, value: profile.id, }; }); }

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