Commit Graph

94 Commits

Author SHA1 Message Date
KM Koushik 991fcab764 fix: bump usesend-js version to 1.6.1 for npm publish (#371) 2026-03-04 09:52:43 +11:00
Dave Stockley 7428a1fbfa feat: add contactBooks to sdk, add delete campaign public endpoint (#352)
* feat: add contactBooks to sdk, add delete campaign public endpoint

* fix: pr review notes

* refactor: pr feedback

* feat: bulk delete/create contacts

* refactor: rename a few methods for consistency

* refactor: update openapi docs based on pr feedback

* refactor: update open api docs, based on pr feedback

* fix: delete campaign security issue

* refactor: delete campaign requires team id (from context)

* fix: enums
2026-03-04 07:10:43 +11:00
KM Koushik e3e9635a5f feat: add customizable contact double opt-in flow (#350)
* feat: add customizable contact double opt-in flow

* test: add double opt-in service coverage

* fix: address review comments for double opt-in PR

- Make pending status conditional on doubleOptInEnabled flag
- Backfill legacy unsubscribeReason for reliable pending detection
- Add doubleOptInContent to contact book listing select
- Fix duplicate toast on DOI editor subject save failure
- Harden searchParams parsing against string[] values
- Make default DOI template use link mark for clickable URL
- Make public API create+update atomic via transaction
- Prevent contact upsert failure when DOI email send fails
- Fix empty string template variable replacement

Co-authored-by: opencode <opencode@anthropic.com>

* fix: harden double opt-in confirmation safeguards

Preserve explicit unsubscribe intent in DOI flows and prevent confirmation links from re-subscribing opted-out contacts. Also sanitize subscribe-page error messaging and use timing-safe hash comparison for link verification.

* ui stuff

* fix: require doubleOptInUrl in double opt-in templates

* feat: add configurable from address for double opt-in emails

* feat: add resend confirmation flow for pending contacts

* fix: move subscribe confirmation to explicit POST flow

* test: add contact book public API endpoint coverage

* docs: add double opt-in documentation and update OpenAPI spec

Add a user guide for the double opt-in feature covering setup, contact
statuses, email customization, template variables, and best practices.
Update the OpenAPI spec to include doubleOptIn fields in all contactBook
request/response schemas.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: opencode <opencode@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 00:34:20 +11:00
KM Koushik 09bdb8aaad feat(python-sdk): add webhook verification and event handling (#344)
* feat(python-sdk): add webhook verification and event handling

Add webhook support to the Python SDK matching the JS SDK implementation:
- Add Webhooks class with verify() and construct_event() methods
- Implement HMAC-SHA256 signature verification with timing-safe comparison
- Add timestamp validation with configurable tolerance (default 5 minutes)
- Add comprehensive webhook event types (18 events: email, contact, domain, test)
- Add WebhookVerificationError with typed error codes
- Export webhook constants (headers) and types

* fix(python-sdk): harden webhook parsing and typing

Normalize invalid UTF-8 webhook payloads to INVALID_BODY errors so verify() safely returns false, and narrow base email webhook event types to avoid discriminated-union overlap. Add regression tests for both paths.

* chore(python-sdk): bump package version to 0.2.9

* feat(python-sdk): add local webhook test example project

Add a runnable Flask receiver and signed webhook sender under packages/python-sdk/example, and link it from the Python SDK README for local verification.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-08 08:18:14 +11:00
KM Koushik 1b3b8f5751 fix: add repository field for npm provenance 2026-01-18 22:08:26 +11:00
KM Koushik 4c4d150dba fix: configure npm OIDC trusted publishing correctly 2026-01-18 22:03:24 +11:00
KM Koushik b3b7bddafb Change publish command from pnpm to npm 2026-01-18 21:56:01 +11:00
KM Koushik eed37d09c6 fix build 2026-01-18 21:44:25 +11:00
KM Koushik d3b6ba7c0a fix: add tsup config for SDK and bump version to 1.6.0 (#343) 2026-01-18 21:04:43 +11:00
KM Koushik 8676965019 feat: add webhooks (#334) 2026-01-18 20:50:54 +11:00
KM Koushik bef580ff92 use turbo in dev mode (#321) 2025-12-14 20:29:53 +11:00
Krish Parekh 641d5f36d2 Feat/code blocks with copy 2025-12-07 16:38:54 +11:00
KM Koushik d6be1af5b9 fix image position issue 2025-12-04 08:24:06 +11:00
KM Koushik e1b64d0d7b Add feedback dialog for cloud dashboard (#293) 2025-11-29 10:22:12 +11:00
KM Koushik cb489654b5 idempotency (#282) 2025-11-17 11:42:09 +11:00
KM Koushik 374f173a09 add delete resource modal (#280) 2025-10-25 05:37:16 +11:00
KM Koushik a5ca3b2f87 add campaign api (#274) 2025-10-18 10:31:43 +11:00
KM Koushik e631f16c85 feat: batch campaigns (#227) 2025-10-12 22:43:16 +11:00
KM Koushik 2fe2d5cdab update package version and response return tyupe for delete domain api (#272) 2025-10-11 06:37:24 +11:00
Kuntal Majee 3f6a02ac56 delete-domain route added (#267) 2025-10-11 05:56:45 +11:00
Vamsi Sai 3388426929 fix: template-edit-page-responsiveness (#268) 2025-10-11 05:08:11 +11:00
KM Koushik 890ad72057 feat: add custom email headers (#260) 2025-09-28 21:33:45 +10:00
KM Koushik 76fdad6c81 feat: expose domain dns records via api (#259) 2025-09-27 09:40:14 +10:00
KM Koushik 3158ddc51c feat: add typed Python SDK (#213) 2025-09-09 05:50:08 +10:00
KM Koushik 92f56f1ebf add minor ui tweaks 2025-09-08 20:30:45 +10:00
KM Koushik 69470a4937 add pricing calculator (#214) 2025-09-06 10:53:53 +10:00
KM Koushik 3e6d4d12df add rebrand landing page (#211) 2025-09-05 22:32:56 +10:00
KM Koushik 07c53d3f58 rebrand to useSend (#210) 2025-09-03 08:21:55 +10:00
KM Koushik e6dd8673b4 feat: add suppression list (#192) 2025-07-27 23:51:59 +10:00
KM Koushik 15e5327024 feat: add In-Reply-To option (#165) 2025-05-25 20:44:13 +10:00
KM Koushik 14557a96ac docs: fix node sdk initialization (#163) 2025-05-17 14:13:32 +10:00
KMKoushik 3dcd8a1bcc fix docker build 2025-05-12 07:15:40 +10:00
KM Koushik b5ebd002e5 add analytics (#162) 2025-05-11 23:34:21 +10:00
KM Koushik be7f030d75 add domain filter on dashboard (#161) 2025-05-10 11:12:09 +10:00
KMKoushik a47e524f4c add avatar menu in side bar 2025-05-07 23:05:46 +10:00
KM Koushik b394c78be2 feat: add new theme (#157) 2025-05-06 22:00:50 +10:00
KMKoushik 2de7147cdf fix build 2025-05-02 21:58:38 +10:00
KM Koushik d2587aed0d upgrade to next 15 (#151) 2025-05-02 20:49:37 +10:00
KM Koushik 3fe96b477f add batch email api (#149)
* add bulk email

* add bulk email api

* add batch email sdk changes
2025-04-19 21:45:17 +10:00
KMKoushik 9d15883f5d fix workflow 2025-04-19 15:45:11 +10:00
KM Koushik 27082a65a3 update @react-email/render version to latest (#148) 2025-04-19 11:19:57 +10:00
KM Koushik 70026cb11d domain apis (#146)
* fix: create domain api

* add domain apis

* fix url

---------

Co-authored-by: harshsbhat <harsh121102@gmail.com>
2025-04-05 06:48:03 +11:00
KM Koushik c7b4200db3 use available credit chart and right billing period (#135) 2025-03-27 22:20:46 +11:00
KM Koushik 1ed5c8009f add team management (#131)
* add team management

* add more team management

* add join team page
2025-03-26 22:02:49 +11:00
Tommy Lundy f8113e64b5 Marketing: Homepage design (#128)
* homepage

* Update page.tsx
2025-03-25 18:13:20 +11:00
KM Koushik 403ad8b93e add stripe (#121)
* add some stripe stuff

* more stripe stuff

* more stripe things

* more stripr stuff

* more stripe stuff

* more stripe stuff

* add more stuff

* add more stripe stuff

* more stuff

* fix types
2025-03-23 07:06:56 +11:00
KMKoushik 48395915f0 add sdk changes 2025-03-08 23:05:28 +11:00
KM Koushik ae59884994 better sheet (#76) 2024-10-26 06:25:57 +11:00
KM Koushik b75b125981 add new design (#70)
* add new design stuff

* add more ui things

* add more ui changes

* more ui changes

* add more design

* update emoji
2024-09-28 20:48:26 +10:00
KMKoushik 41aa8e6281 update sdk version 2024-09-06 06:53:40 +10:00