From b30b5024a8b42fa3bfae762ee0e8eb8f80523cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Fri, 26 Jan 2024 18:18:43 +0300 Subject: [PATCH] feat(mailerlite): add spam complaint trigger --- packages/backend/src/apps/mailerlite/index.js | 2 + .../src/apps/mailerlite/triggers/index.js | 3 + .../triggers/spam-complaint/index.js | 78 +++++++++++++++++++ packages/docs/pages/.vitepress/config.js | 5 +- .../docs/pages/apps/mailerlite/triggers.md | 12 +++ packages/docs/pages/guide/available-apps.md | 1 + 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/mailerlite/triggers/index.js create mode 100644 packages/backend/src/apps/mailerlite/triggers/spam-complaint/index.js create mode 100644 packages/docs/pages/apps/mailerlite/triggers.md diff --git a/packages/backend/src/apps/mailerlite/index.js b/packages/backend/src/apps/mailerlite/index.js index 285964b4..1e69498b 100644 --- a/packages/backend/src/apps/mailerlite/index.js +++ b/packages/backend/src/apps/mailerlite/index.js @@ -1,6 +1,7 @@ import defineApp from '../../helpers/define-app.js'; import addAuthHeader from './common/add-auth-header.js'; import auth from './auth/index.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'MailerLite', @@ -13,4 +14,5 @@ export default defineApp({ primaryColor: '09C269', beforeRequest: [addAuthHeader], auth, + triggers, }); diff --git a/packages/backend/src/apps/mailerlite/triggers/index.js b/packages/backend/src/apps/mailerlite/triggers/index.js new file mode 100644 index 00000000..ca68ef1c --- /dev/null +++ b/packages/backend/src/apps/mailerlite/triggers/index.js @@ -0,0 +1,3 @@ +import spamComplaint from './spam-complaint/index.js'; + +export default [spamComplaint]; diff --git a/packages/backend/src/apps/mailerlite/triggers/spam-complaint/index.js b/packages/backend/src/apps/mailerlite/triggers/spam-complaint/index.js new file mode 100644 index 00000000..074bfea8 --- /dev/null +++ b/packages/backend/src/apps/mailerlite/triggers/spam-complaint/index.js @@ -0,0 +1,78 @@ +import Crypto from 'crypto'; +import defineTrigger from '../../../../helpers/define-trigger.js'; + +export default defineTrigger({ + name: 'Spam complaint', + key: 'spamComplaint', + type: 'webhook', + description: 'Triggers when a subscriber reports an email as spam.', + + async run($) { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async testRun($) { + const computedWebhookEvent = { + id: Crypto.randomUUID(), + sent: 1, + email: 'user@automatisch.io', + fields: { + city: 'City', + name: 'Name', + phone: '', + state: 'State', + z_i_p: null, + company: 'Company', + country: 'Country', + last_name: 'Last Name', + }, + source: '', + status: 'junk', + optin_ip: null, + forget_at: null, + open_rate: 0, + click_rate: 0, + created_at: new Date().toISOString(), + deleted_at: null, + ip_address: null, + updated_at: new Date().toISOString(), + opens_count: 0, + opted_in_at: null, + clicks_count: 0, + subscribed_at: new Date().toISOString(), + unsubscribed_at: null, + }; + + const dataItem = { + raw: computedWebhookEvent, + meta: { + internalId: computedWebhookEvent.id, + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async registerHook($) { + const payload = { + name: $.flow.id, + events: ['subscriber.spam_reported'], + url: $.webhookUrl, + }; + + const { data } = await $.http.post('/webhooks', payload); + + await $.flow.setRemoteWebhookId(data.data.id); + }, + + async unregisterHook($) { + await $.http.delete(`/webhooks/${$.flow.remoteWebhookId}`); + }, +}); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 10d060db..38903f22 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -201,7 +201,10 @@ export default defineConfig({ text: 'MailerLite', collapsible: true, collapsed: true, - items: [{ text: 'Connection', link: '/apps/mailerlite/connection' }], + items: [ + { text: 'Triggers', link: '/apps/mailerlite/triggers' }, + { text: 'Connection', link: '/apps/mailerlite/connection' }, + ], }, { text: 'Mattermost', diff --git a/packages/docs/pages/apps/mailerlite/triggers.md b/packages/docs/pages/apps/mailerlite/triggers.md new file mode 100644 index 00000000..50a3b515 --- /dev/null +++ b/packages/docs/pages/apps/mailerlite/triggers.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/mailerlite.svg +items: + - name: Spam Complaint + desc: Triggers when a subscriber reports an email as spam. +--- + + + + diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md index 90f8ba0a..86eaaec1 100644 --- a/packages/docs/pages/guide/available-apps.md +++ b/packages/docs/pages/guide/available-apps.md @@ -20,6 +20,7 @@ The following integrations are currently supported by Automatisch. - [HTTP Request](/apps/http-request/actions) - [HubSpot](/apps/hubspot/actions) - [Invoice Ninja](/apps/invoice-ninja/triggers) +- [MailerLite](/apps/mailerlite/triggers) - [Mattermost](/apps/mattermost/actions) - [Miro](/apps/miro/actions) - [Notion](/apps/notion/triggers)