Skip to main content
Glama

mcp-google-sheets

new-subscriber.ts3.67 kB
import { createTrigger, TriggerStrategy, WebhookResponse, } from '@activepieces/pieces-framework'; import { sendpulseAuth } from '../common/auth'; import { sendpulseApiCall } from '../common/client'; import { mailingListDropdown } from '../common/props'; import { HttpMethod } from '@activepieces/pieces-common'; export const newSubscriberTrigger = createTrigger({ auth: sendpulseAuth, name: 'new_subscriber', displayName: 'New Subscriber', description: 'Fires when new subscriber is added', type: TriggerStrategy.WEBHOOK, props: { mailingListId: mailingListDropdown, }, async onEnable(context) { const { mailingListId } = context.propsValue; try { const webhookResponse = await sendpulseApiCall<{ success: boolean; data: Array<{ id: number; action: string; url: string }>; }>({ method: HttpMethod.POST, auth: context.auth, resourceUri: '/v2/email-service/webhook', body: { url: context.webhookUrl, actions: ['new_emails'], }, }); if (webhookResponse.success && webhookResponse.data?.length > 0) { const webhook = webhookResponse.data.find(w => w.action === 'new_emails'); if (webhook) { await context.store.put('webhook_id', webhook.id); await context.store.put('mailing_list_id', mailingListId); } } else { throw new Error('Failed to create webhook'); } } catch (error: any) { throw new Error(`Failed to enable new subscriber trigger: ${error.message}`); } }, async onDisable(context) { try { const webhookId = await context.store.get('webhook_id'); if (webhookId) { await sendpulseApiCall({ method: HttpMethod.DELETE, auth: context.auth, resourceUri: `/v2/email-service/webhook/${webhookId}`, }); await context.store.delete('webhook_id'); await context.store.delete('mailing_list_id'); } } catch (error) { console.warn('Failed to delete webhook during disable:', error); } }, async run(context) { const storedListId = await context.store.get('mailing_list_id'); interface NewSubscriberPayload { timestamp: string; variables: any[]; email: string; source: string; book_id: string; event: string; } const payload = context.payload.body as NewSubscriberPayload | NewSubscriberPayload[]; const payloads = Array.isArray(payload) ? payload : [payload]; const results = []; for (const item of payloads) { if (item.event === 'new_emails' && item.book_id === storedListId) { results.push({ id: `${item.email}_${item.timestamp}`, email: item.email, mailingListId: item.book_id, source: item.source, variables: item.variables || {}, addedAt: new Date(parseInt(item.timestamp) * 1000).toISOString(), timestamp: item.timestamp, }); } } return results; }, async test() { return [ { id: 'demo@example.com_1496827625', email: 'demo@example.com', mailingListId: '123456', source: 'address book', variables: {}, addedAt: new Date().toISOString(), timestamp: '1496827625', }, ]; }, sampleData: { id: 'subscriber@example.com_1496827625', email: 'subscriber@example.com', mailingListId: '123456', source: 'subscription form', variables: { name: 'John Doe', }, addedAt: '2023-06-01T12:00:00.000Z', timestamp: '1496827625', }, });

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