Skip to main content
Glama

mcp-google-sheets

update-person.ts5.18 kB
import { createAction, InputPropertyMap, Property, } from '@activepieces/pieces-framework'; import { CopperAuth, isNonEmptyStr } from '../common/constants'; import { peopleDropdown } from '../common/props'; import { CopperApiService } from '../common/requests'; export const updatePerson = createAction({ auth: CopperAuth, name: 'updatePerson', displayName: 'Update Person', description: 'Updates a person based on matching criteria.', props: { personId: peopleDropdown(['auth']), fields: Property.DynamicProperties({ displayName: '', description: '', refreshers: ['auth', 'personId'], required: false, props: async ({ auth, personId }: any): Promise<InputPropertyMap> => { if (!auth || !personId) return {}; const person = JSON.parse(personId); return { name: Property.ShortText({ displayName: 'Full Name', required: true, defaultValue: person.name, }), emails: Property.Array({ displayName: 'Emails', required: true, properties: { email: Property.ShortText({ displayName: 'Email', required: true, }), category: Property.ShortText({ displayName: 'Category (e.g., work, personal)', required: true, }), }, defaultValue: person.emails, }), phone_numbers: Property.Array({ displayName: 'Phone Numbers', required: false, properties: { number: Property.ShortText({ displayName: 'Number', required: true, }), category: Property.ShortText({ displayName: 'Category (e.g., mobile, work, personal)', required: true, }), }, defaultValue: person.phone_numbers, }), address_street: Property.ShortText({ displayName: 'Street', required: false, defaultValue: person.address?.street, }), address_city: Property.ShortText({ displayName: 'City', required: false, defaultValue: person.address?.city, }), address_state: Property.ShortText({ displayName: 'State/Region', required: false, defaultValue: person.address?.state, }), address_postal_code: Property.ShortText({ displayName: 'Postal Code', required: false, defaultValue: person.address?.postal_code, }), address_country: Property.ShortText({ displayName: 'Country', required: false, defaultValue: person.address?.country, }), }; }, }), }, async run(context) { const fields = (context.propsValue as any).fields; const personId = (context.propsValue as any).personId; const person = JSON.parse(personId); const { name, emails, address_street, address_city, address_state, address_postal_code, address_country, phone_numbers, } = fields; const normEmails = (Array.isArray(emails) ? emails : []) .map((row) => ({ email: String(row?.email ?? '') .trim() .toLowerCase(), category: isNonEmptyStr(row?.category) ? String(row.category).trim() : undefined, })) .filter((e) => isNonEmptyStr(e.email)); if (normEmails.length === 0) throw new Error('Please provide at least one valid email.'); const seen = new Set<string>(); const dedupedEmails = normEmails.filter( (e) => !seen.has(e.email) && (seen.add(e.email), true) ); const normPhones = (Array.isArray(phone_numbers) ? phone_numbers : []) .map((p) => ({ number: String(p?.number ?? '').trim(), category: isNonEmptyStr(p?.category) ? String(p.category).trim() : undefined, })) .filter((p) => isNonEmptyStr(p.number)); const address = [ address_street, address_city, address_state, address_postal_code, address_country, ].some(isNonEmptyStr) ? { street: isNonEmptyStr(address_street) ? address_street.trim() : undefined, city: isNonEmptyStr(address_city) ? address_city.trim() : undefined, state: isNonEmptyStr(address_state) ? address_state.trim() : undefined, postal_code: isNonEmptyStr(address_postal_code) ? address_postal_code.trim() : undefined, country: isNonEmptyStr(address_country) ? address_country.trim() : undefined, } : undefined; const body: any = { name, emails: dedupedEmails, ...(normPhones.length ? { phone_numbers: normPhones } : {}), ...(address ? { address } : {}), }; return await CopperApiService.updatePerson(context.auth, person.id, body); }, });

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