Commit Graph
165 Commits
Author SHA1 Message Date
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 AugustynsandGitHub 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
mdwtandClaude 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 AugustynsandGitHub 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
dependabot[bot]andGitHub d162f255c2 chore(deps): bump multer from 2.0.2 to 2.1.1
Bumps [multer](https://github.com/expressjs/multer) from 2.0.2 to 2.1.1.
- [Release notes](https://github.com/expressjs/multer/releases)
- [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/expressjs/multer/compare/v2.0.2...v2.1.1)

---
updated-dependencies:
- dependency-name: multer
  dependency-version: 2.1.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 07:56:38 +00: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
Dries AugustynsandGitHub cbea263a91 Merge pull request #298 from josephsellers/fix/cookie-domain-local-tld 2026-02-23 14:17:36 +01:00
Dries Augustyns 4b51e386e3 feat: Static segments 2026-02-23 13:57:32 +01:00
josephsellers 59aa7845ba fix: correct cookie domain for .local TLD hostnames
getCookieDomain() returns '.localhost' for hostnames ending in '.local'
(e.g., app.plunk.local), causing the browser to reject the cookie
because the domain doesn't match the request origin.

Split the .localhost and .local cases so that .local hostnames return
the actual base domain (e.g., .plunk.local).
2026-02-22 16:01:25 +00:00
Dries Augustyns 21af8fe05e fix: Correctly set domain status on manual verify 2026-02-21 08:41:24 +01:00
Dries Augustyns 2c4d95e604 fix: Do not unsubscribe existing contacts 2026-02-20 16:58:17 +01:00
Dries Augustyns 573e2e8449 security: Enhance job status retrieval with project authorization 2026-02-19 19:51:22 +01:00
Dries Augustyns eec37ecb31 feat: Ability to change workflow trigger 2026-02-18 20:26:41 +01:00
Dries Augustyns f947ee6f22 feat: Add dedicated received type 2026-02-18 16:24:55 +01:00
Dries Augustyns de7ed84fcf feat: Add billing for inbound 2026-02-18 15:23:31 +01:00
Dries Augustyns e639c72e8b fix: Enhance email bounce notification with latest bounce details 2026-02-18 10:20:58 +01:00
Dries Augustyns d9ae171cc7 chore: fix linting errors 2026-02-17 19:09:01 +01:00
Dries Augustyns 78d3d224af feat: Add support for custom email recipients in workflow steps 2026-02-17 18:57:15 +01:00
Dries Augustyns d050b55baa feat: Add inbound handling 2026-02-17 16:52:56 +01:00
Dries Augustyns 7964563b62 feat: Add advanced DNS configuration 2026-02-17 16:33:34 +01:00
Dries Augustyns c286f49097 feat: Add initial handling in webhook for inbound 2026-02-17 16:03:50 +01:00
Dries Augustyns a928666dfc fix: Update contact subscription logic for upsert operations 2026-02-17 10:25:01 +01:00
Shuvadipta Das 64ba19e589 fix(test): consolidate SES MIME boundary tests into EmailService.test.ts 2026-02-16 18:55:03 +05:30
Shuvadipta Das 3a42012ac7 fix: removed "any" data type from SESService.test.ts 2026-02-16 18:47:42 +05:30