feat(cloud): sync subscriber preferences on unsubscribe

This commit is contained in:
Henry
2026-08-03 11:53:29 +01:00
parent d6aa82e070
commit b4e9dd3811
6 changed files with 87 additions and 1 deletions

View File

@@ -2,4 +2,7 @@ export const name = "email";
export { sendEmail } from "./sendEmail";
export { notificationClient } from "./notificationClient";
export { createSubscriber } from "./subscriberClient";
export {
createSubscriber,
updateSubscriberPreferences,
} from "./subscriberClient";

View File

@@ -15,6 +15,7 @@ export const subscriberClient =
: null;
interface CreateSubscriberInput {
publicId: string;
email: string;
externalId: string;
firstName?: string;
@@ -51,3 +52,40 @@ export async function createSubscriber(input: CreateSubscriberInput) {
log.error({ err: error }, "Error creating subscriber.dev subscriber");
}
}
interface UpdateSubscriberPreferencesInput {
email: boolean;
}
export async function updateSubscriberPreferences(
subscriberId: string,
input: UpdateSubscriberPreferencesInput,
) {
if (!subscriberClient) return;
try {
const response = await fetch(
`${subscriberClient.apiUrl}/environments/${subscriberClient.environmentId}/subscribers/${subscriberId}/preferences`,
{
method: "PATCH",
headers: {
"Content-Type": "application/json",
"X-API-Key": subscriberClient.apiKey,
},
body: JSON.stringify(input),
},
);
if (!response.ok) {
log.error(
{
status: response.status,
body: await response.text().catch(() => undefined),
},
"Failed to update subscriber preferences",
);
}
} catch (error) {
log.error({ err: error }, "Error updating subscriber.dev preferences");
}
}