Skip to main content
Glama

mcp-google-sheets

subscriber-updated-trigger.ts5.08 kB
import { createTrigger, TriggerStrategy, Property } from '@activepieces/pieces-framework'; import { getAccessTokenOrThrow } from '@activepieces/pieces-common'; import { mailchimpCommon } from '../common'; import { mailchimpAuth } from '../..'; const WEBHOOK_DATA_STORE_KEY = 'mail_chimp_subscriber_updated_webhook_data'; type WebhookData = { id: string; listId: string; }; const getEventCategory = (eventType: string): string => { switch (eventType) { case 'profile': return 'Profile Update'; case 'subscribe': return 'New Subscription'; case 'upemail': return 'Email Change'; case 'cleaned': return 'Email Cleanup'; default: return 'Unknown Event'; } }; const getSubscriberSummary = (request: any): any => { const data = request.data || {}; return { email: data.email || data.new_email || 'N/A', subscriber_id: data.id || 'N/A', list_id: data.list_id || 'N/A', email_type: data.email_type || 'html', member_rating: data.member_rating || 0, vip_status: data.vip ? 'VIP' : 'Standard', language: data.language || 'en', has_merge_fields: !!data.merges, merge_field_count: data.merges ? Object.keys(data.merges).length : 0, last_activity: data.last_changed || data.timestamp_opt || data.timestamp_signup || 'N/A', ip_address: data.ip_opt || data.ip_signup || 'N/A', }; }; export const mailChimpSubscriberUpdatedTrigger = createTrigger({ auth: mailchimpAuth, name: 'subscriber_updated', displayName: 'Subscriber Updated', description: 'Fires when a subscriber profile is updated, including changes to merge fields, interests, or contact information. This trigger captures profile updates, new subscriptions, and subscriber modifications.', type: TriggerStrategy.WEBHOOK, props: { list_id: mailchimpCommon.mailChimpListIdDropdown, }, sampleData: { type: 'profile', fired_at: '2024-01-15T10:30:00Z', data: { id: '8a25ff1d98', list_id: 'a6b5da1054', email: 'user@example.com', email_type: 'html', merges: { EMAIL: 'user@example.com', FNAME: 'John', LNAME: 'Doe', COMPANY: 'Example Corp', PHONE: '+1-555-0123', INTERESTS: 'Group1,Group2', ADDRESS: { addr1: '123 Main St', addr2: 'Suite 100', city: 'Anytown', state: 'CA', zip: '12345', country: 'US', }, }, new_email: 'newuser@example.com', old_email: 'user@example.com', member_rating: 5, vip: false, language: 'en', ip_opt: '192.168.1.100', ip_signup: '192.168.1.100', timestamp_signup: '2024-01-01T09:00:00Z', timestamp_opt: '2024-01-01T09:00:00Z', last_changed: '2024-01-15T10:30:00Z', }, }, async onEnable(context): Promise<void> { try { const accessToken = getAccessTokenOrThrow(context.auth); const server = await mailchimpCommon.getMailChimpServerPrefix(accessToken); const enabledWebhookId = await mailchimpCommon.enableWebhookRequest({ server, listId: context.propsValue.list_id as string, token: accessToken, webhookUrl: context.webhookUrl!, events: { profile: true, subscribe: true, upemail: true, cleaned: true, }, }); await context.store?.put<WebhookData>(WEBHOOK_DATA_STORE_KEY, { id: enabledWebhookId, listId: context.propsValue.list_id as string, }); } catch (error: any) { throw new Error(`Failed to enable subscriber updated webhook: ${error.message || JSON.stringify(error)}`); } }, async onDisable(context): Promise<void> { try { const webhookData = await context.store?.get<WebhookData>(WEBHOOK_DATA_STORE_KEY); if (webhookData === undefined || webhookData === null) { return; } const token = getAccessTokenOrThrow(context.auth); const server = await mailchimpCommon.getMailChimpServerPrefix(token); await mailchimpCommon.disableWebhookRequest({ server, token, listId: webhookData.listId, webhookId: webhookData.id, }); } catch (error: any) { console.error(`Failed to disable subscriber updated webhook: ${error.message || JSON.stringify(error)}`); } }, async run(context): Promise<unknown[]> { try { const request = context.payload.body as any; if (request === undefined || !['profile', 'subscribe', 'upemail', 'cleaned'].includes(request.type)) { return []; } const enhancedRequest = { ...request, trigger_type: 'subscriber_updated', event_category: getEventCategory(request.type), processed_at: new Date().toISOString(), subscriber_summary: getSubscriberSummary(request), }; return [enhancedRequest]; } catch (error: any) { console.error(`Error processing subscriber updated webhook: ${error.message || JSON.stringify(error)}`); return []; } }, });

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