feat: add SendGrid email provider with webhook support and configuration#221
feat: add SendGrid email provider with webhook support and configuration#221RickieeeDev wants to merge 6 commits into
Conversation
RickieeeDev
commented
Apr 15, 2026
- Implement SendGrid email sending functionality with API integration.
- Add webhook handling for SendGrid events and mapping to canonical events.
- Create configuration schema for SendGrid provider including API key and webhook verification key.
- Add tests for SendGrid email request composition and webhook event parsing.
- Implement SendGrid email sending functionality with API integration. - Add webhook handling for SendGrid events and mapping to canonical events. - Create configuration schema for SendGrid provider including API key and webhook verification key. - Add tests for SendGrid email request composition and webhook event parsing.
There was a problem hiding this comment.
Pull request overview
Adds a new SendGrid provider module (send + webhook) and updates the console to better support provider configuration fields (password inputs + rate limit override shape).
Changes:
- Introduce a SendGrid WASM provider module with email sending, webhook parsing, and optional webhook signature verification.
- Add SendGrid-focused unit tests and module build/config scaffolding (Makefile, go.mod/go.sum, README).
- Update console integration setup to submit/consume the new
rate_limitobject shape and render schema fields withformat: "password"as password inputs.
Reviewed changes
Copilot reviewed 11 out of 16 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| modules/providers/sendgrid/sendgrid_webhook.go | SendGrid webhook parsing, event mapping, timestamp parsing, and signature verification. |
| modules/providers/sendgrid/sendgrid.go | SendGrid request composition + error formatting + HTTP status classification helpers. |
| modules/providers/sendgrid/main.go | Provider manifest, send implementation, webhook handler, and config validation export functions. |
| modules/providers/sendgrid/main_test.go | Unit tests for request composition, webhook parsing/signature verification, rate classification, config validation. |
| modules/providers/sendgrid/go.mod | New module definition + dependencies for the SendGrid provider. |
| modules/providers/sendgrid/go.sum | Dependency checksums for the SendGrid provider module. |
| modules/providers/sendgrid/README.md | Provider documentation and configuration fields. |
| modules/providers/sendgrid/Makefile | TinyGo WASM build target for the SendGrid module. |
| modules/providers/apns/main.go | Marks APNs Key ID schema field as password-formatted in the manifest. |
| internal/http/console/dist/index.html | Updates bundled console asset references. |
| console/src/views/settings/IntegrationSetup.tsx | Updates provider form typing + rate limit override UX to send rate_limit: {limit, interval}. |
| console/src/views/campaign/CreateCampaign.tsx | Uses shared API client for template creation after campaign creation. |
| console/src/views/campaign/Campaigns.tsx | Avoids sending empty string search values by using undefined. |
| console/src/components/schema-fields.tsx | Renders schema string fields with format: "password" as <input type="password">. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 11 out of 16 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
jeroenrinzema
left a comment
There was a problem hiding this comment.
Thanks! I noticed that some files outside of the sendgrid implementation have been affected. Could you please check.
There was a problem hiding this comment.
Could you check why these binaries have been changed?
There was a problem hiding this comment.
Honestly, I can't find any reason why this happened, might be my go version, my git history said i didn't even push this
…ponents and changed the icon to base64