Dries Augustyns
62661ae45f
log: improve logging for inbound email notifications and enhance email content parsing
2026-05-06 10:37:39 +02:00
Dries Augustyns
4587e9d670
fix: enhance email content parsing and logging for better debugging
2026-05-05 20:35:36 +02:00
Dries Augustyns
a126563542
fix: update segment filter logic to retain value and unit, enhance activity name mapping
2026-05-04 19:35:29 +02:00
Dries Augustyns
a3cc62213f
feat: add segment membership operators and enhance segment filter functionality
2026-05-04 19:07:04 +02:00
Dries Augustyns
0f00ca1b8c
feat: add 'notTriggeredWithin' operator to segment filters for enhanced event tracking
2026-05-04 18:04:24 +02:00
Dries Augustyns
48425d1df1
feat: implement early fraud warning handling in webhooks
2026-05-01 21:55:32 +02:00
Dries Augustyns
bb72911fa2
feat: enhance contact addition with bulk email lookup and subscription options
2026-05-01 19:44:48 +02:00
Matthias Endler
11c428d4ff
fix(ses): emit List-Unsubscribe inside the header section, not the body
...
The raw MIME template in sendRawEmail produced a blank line between Content-Type and List-Unsubscribe whenever no custom headers were passed, because the ternary for custom headers expanded to an empty string surrounded by newlines.
Per RFC 5322 §2.1 a blank line terminates the header section, so List-Unsubscribe ended up as the first line of the body. Lenient clients (Gmail, Outlook) recover; strict clients (Thunderbird) do not, breaking one-click unsubscribe and degrading Gmail/Yahoo bulk-sender deliverability signals.
Collect optional headers (custom + List-Unsubscribe) into an array, filter empties, and append them to the Content-Type line with a single newline separator. No codepath can now produce a blank line inside the header block.
2026-04-30 15:20:06 +02:00
Dries Augustyns
2eb407993b
feat: add configurable attachment limits for email service
...
Closes #358
2026-04-29 08:48:03 +02:00
Dries Augustyns
10946511b0
feat: enhance contact data handling by filtering empty strings and allowing null to delete fields
2026-04-27 16:59:18 +02:00
Dries Augustyns
d7eb85ffdd
fix: update project disabled messages for clarity and consistency
2026-04-24 19:21:07 +02:00
Dries Augustyns
c910d20bb7
feat: Enhance ease of use of workflow editor
2026-04-24 11:56:43 +02:00
Dries Augustyns
1637d54e1b
fix: add project name and sender email parameters to phishing content check
2026-04-22 22:03:57 +02:00
Dries Augustyns
15294a40d8
fix: add project name and sender email parameters to phishing content check
2026-04-22 22:03:53 +02:00
Dries Augustyns
bb78c86c40
fix: update phishing confidence threshold to 95%
2026-04-22 21:59:34 +02:00
Dries Augustyns
208c809a90
fix: Add in-memory cache for lower-confidence phishing checks
2026-04-22 07:40:23 +02:00
Dries Augustyns
b7eb2549d4
fix: turn warning into success log
2026-04-21 22:08:07 +02:00
Dries Augustyns
91d0d2d297
fix: update response format for phishing analysis and improve JSON parsing comment
2026-04-21 21:53:16 +02:00
Dries Augustyns
862875428d
fix: log message for projects passing phishing checks
2026-04-21 21:49:57 +02:00
Dries Augustyns
2da8b065d0
feat: implement phishing detection using OpenRouter API with configurable sampling rate
2026-04-21 21:28:31 +02:00
Dries Augustyns
e048fc1570
feat: implement meter event processing with queue for Stripe billing
2026-04-20 21:30:52 +02:00
Dries Augustyns
4322de929a
fix: reconcile totalRecipients in CampaignService to prevent stuck campaigns
...
closes #348
2026-04-20 20:15:56 +02:00
Dries Augustyns
b79d416667
feat: implement AWS SNS signature verification in SecurityService
2026-04-20 18:40:19 +02:00
Dries Augustyns
5e62f517fc
feat: Update new project bounce thresholds for stricter email handling
2026-04-16 08:05:56 +02:00
Dries Augustyns
44c86572c2
feat: Block domain changes for disabled projects with appropriate error handling
2026-04-16 07:56:41 +02:00
Dries Augustyns
effdfdb6d6
test: Update absolute count ceilings tests for established projects with project aging logic
2026-04-15 21:04:53 +02:00
Dries Augustyns
c0b2abaeca
feat: Enhance security metrics handling with new thresholds and improved messaging
2026-04-15 20:55:42 +02:00
Dries Augustyns
e3395083db
feat: Enhance email processing to include parsed HTML body content in inbound email records
...
Closes #342
2026-04-13 17:58:52 +02:00
Dries Augustyns
ae64c2dbb5
feat: Add emailId field to webhook events for better correlation with send requests
...
Closes #344
2026-04-13 17:15:41 +02:00
Dries Augustyns
52cb2b6c77
fix: Refactor date filtering logic for pagination in ActivityFeed and ActivityService
2026-04-13 17:06:22 +02:00
Dries Augustyns
9e2400c6de
fix: Enhance email processing to support campaign types and improve unsubscribe logic
2026-04-02 14:09:01 +02:00
Dries Augustyns
fb5aa8796a
feat: Add headless template type
2026-04-02 12:43:27 +02:00
Dries Augustyns
284838279d
test: Mock DNS lookup in integration tests for WorkflowExecutionService
2026-04-02 07:56:54 +02:00
Dries Augustyns
2c5a71518d
fix: Implement SSRF protection in webhook handling with safeFetch method
2026-04-02 07:48:43 +02:00
Dries Augustyns
d24259e8d2
feat: Add type to campaign
2026-04-01 18:49:51 +02:00
Dries Augustyns
3343e891bd
feat: Disable projects on failed payment
2026-04-01 18:07:08 +02:00
Mathias Schüpany
7b6540a748
fix: Adapt SNS Webhook validation regex pattern to also support AWS eusc partition
2026-03-29 11:32:04 +02:00
Edvin
3b39d847cd
fix: add alt text to email badge image
2026-03-23 09:08:24 +00:00
Dries Augustyns
a99cde8839
fix: Enhance email step configuration validation and recipient handling
2026-03-19 15:18:40 +01:00
Dries Augustyns and GitHub
f44d987bc9
Merge pull request #310 from mdwt/feature/multi-branch-conditions
2026-03-14 16:21:25 +01:00
Dries Augustyns
b9d692cf5b
fix: normalize field references and handle undefined values in JSON
2026-03-13 20:26:28 +01:00
Mikkel Svartveit
4451e921ca
fix: visual editor preview
2026-03-11 14:04:47 +01:00
mdwt and Claude Opus 4.6
92949b7596
feat: Add multi-branch workflow conditions (switch/case)
...
Add a `mode: 'multi'` variant to CONDITION steps that allows matching a
field against multiple values, each routing to its own named branch.
Branches are evaluated in order; first match wins. A `default` branch
catches unmatched contacts.
- Schema: z.union for legacy binary + multi-branch condition configs
- Backend: executeCondition handles multi-branch evaluation with stable
branch IDs, falls back to default when no branch matches
- Builder: Dynamic branch rendering with per-branch colors/labels,
dagre layout spreads branches horizontally
- Config UI: Mode toggle (Simple If/Else vs Multi-branch Switch),
dynamic branch list with add/remove
- Tests: 8 new multi-branch tests covering matching, ordering, default
fallback, mixed operators, and transition routing
- Full backward compatibility: all changes gated on config.mode === 'multi'
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 12:57:05 +02:00
Dries Augustyns
1dc423a1c4
chore: Enhance image upload validation with magic byte checks
2026-03-10 20:10:13 +01:00
Dries Augustyns
cc7fcdb4ef
fix: Align preview and actual email for templates and campaigns
2026-03-05 19:45:28 +01:00
Dries Augustyns and GitHub
9b15b93b96
Merge pull request #281 from 5h0ov/multipart/related-support-embed-image
...
feat(api): support inline images in emails using Content-ID
2026-03-05 11:26:41 +01:00
Dries Augustyns
b8f1ad9ab5
fix: Verify SNS URL before sending fetch request
2026-03-03 08:02:36 +01:00
Dries Augustyns
ec1f4c9374
fix: Support any locale on creation
2026-02-26 20:57:14 +01:00
Dries Augustyns
5528288c7b
Merge branch 'next' of https://github.com/useplunk/plunk into next
2026-02-23 21:45:25 +01:00
Dries Augustyns
7bd098bdd0
fix: Add support for STATIC segment type in CampaignService
2026-02-23 21:45:17 +01:00