Files
medreport_mrb2b/packages/mailers/resend/src/index.ts
Helena 9122acc89f MED-151: add profile view and working smoking dashboard card (#71)
* MED-151: add profile view and working smoking dashboard card

* update zod

* move some components to shared

* move some components to shared

* remove console.logs

* remove unused password form components

* only check null for variant

* use pathsconfig
2025-09-04 12:17:54 +03:00

54 lines
1.2 KiB
TypeScript

import 'server-only';
import { z } from 'zod';
import { Mailer, MailerSchema } from '@kit/mailers-shared';
type Config = z.infer<typeof MailerSchema>;
const RESEND_API_KEY = z
.string({
error: 'Please provide the API key for the Resend API',
})
.describe('The API key for the Resend API')
.parse(process.env.RESEND_API_KEY);
export function createResendMailer() {
return new ResendMailer();
}
/**
* A class representing a mailer using the Resend HTTP API.
* @implements {Mailer}
*/
class ResendMailer implements Mailer {
async sendEmail(config: Config) {
const contentObject =
'text' in config
? {
text: config.text,
}
: {
html: config.html,
};
const res = await fetch('https://api.resend.com/emails', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${RESEND_API_KEY}`,
},
body: JSON.stringify({
from: config.from,
to: [config.to],
subject: config.subject,
...contentObject,
}),
});
if (!res.ok) {
throw new Error(`Failed to send email: ${res.statusText}`);
}
}
}