Skip to main content
Glama

mcp-google-sheets

updated-subscriber.ts4.36 kB
import { createTrigger, TriggerStrategy, } 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'; function detectChanges(previous: any, current: any): Record<string, { from: any; to: any }> { const changes: Record<string, { from: any; to: any }> = {}; const allKeys = new Set([...Object.keys(previous), ...Object.keys(current)]); for (const key of allKeys) { if (JSON.stringify(previous[key]) !== JSON.stringify(current[key])) { changes[key] = { from: previous[key], to: current[key], }; } } return changes; } export const updatedSubscriberTrigger = createTrigger({ auth: sendpulseAuth, name: 'updated_subscriber', displayName: 'Updated Subscriber', description: 'Fires when subscriber details change (polling)', type: TriggerStrategy.POLLING, props: { mailingListId: mailingListDropdown, }, async onEnable(context) { await context.store.put('mailing_list_id', String(context.propsValue.mailingListId)); await context.store.put('last_check', Date.now().toString()); }, async onDisable(context) { await context.store.delete('mailing_list_id'); await context.store.delete('last_check'); await context.store.delete('subscribers_cache'); }, async run(context) { const mailingListId = await context.store.get('mailing_list_id'); if (!mailingListId) { return []; } try { const currentSubscribers = await sendpulseApiCall<any[]>({ method: HttpMethod.GET, auth: context.auth, resourceUri: `/addressbooks/${mailingListId}/emails`, }); const cachedSubscribers = await context.store.get('subscribers_cache'); if (!cachedSubscribers) { await context.store.put('subscribers_cache', JSON.stringify(currentSubscribers)); return []; } const previousSubscribers = JSON.parse(cachedSubscribers as string); const changes = []; for (const current of currentSubscribers) { const previous = previousSubscribers.find((p: any) => p.email === current.email); if (previous) { const hasChanges = JSON.stringify(current) !== JSON.stringify(previous); if (hasChanges) { changes.push({ id: `${current.email}_${Date.now()}`, email: current.email, mailingListId, previousData: previous, currentData: current, updatedAt: new Date().toISOString(), changes: detectChanges(previous, current), }); } } } await context.store.put('subscribers_cache', JSON.stringify(currentSubscribers)); await context.store.put('last_check', Date.now().toString()); return changes; } catch (error: any) { console.error('Error checking for subscriber updates:', error); return []; } }, async test() { return [ { id: 'test-updated@example.com_1234567890', email: 'test-updated@example.com', mailingListId: '123456', previousData: { email: 'test-updated@example.com', variables: { name: 'Old Name' }, }, currentData: { email: 'test-updated@example.com', variables: { name: 'New Name' }, }, updatedAt: new Date().toISOString(), changes: { 'variables.name': { from: 'Old Name', to: 'New Name', }, }, }, ]; }, sampleData: { id: 'updated-user@example.com_1234567890', email: 'updated-user@example.com', mailingListId: '123456', previousData: { email: 'updated-user@example.com', variables: { phone: '+1234567890', name: 'John' }, }, currentData: { email: 'updated-user@example.com', variables: { phone: '+0987654321', name: 'John Updated' }, }, updatedAt: '2023-06-01T12:30:00.000Z', changes: { 'variables.phone': { from: '+1234567890', to: '+0987654321', }, 'variables.name': { from: 'John', to: 'John Updated', }, }, }, });

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