diff --git a/packages/backend/convex/custom/auth/providers/usesend.ts b/packages/backend/convex/custom/auth/providers/usesend.ts index ae2b68b..c0b94aa 100644 --- a/packages/backend/convex/custom/auth/providers/usesend.ts +++ b/packages/backend/convex/custom/auth/providers/usesend.ts @@ -1,39 +1,7 @@ import type { EmailConfig, EmailUserConfig } from '@auth/core/providers/email'; import { generateRandomString, RandomReader } from '@oslojs/crypto/random'; import { alphabet } from 'oslo/crypto'; - -type UseSendEmailPayload = { - from: string; - to: string[]; - subject: string; - text: string; - html: string; -}; - -const sendUseSendEmail = async ( - apiKey: string, - useSendUrl: string, - payload: UseSendEmailPayload, -) => { - const response = await fetch(`${useSendUrl}/api/v1/emails`, { - method: 'POST', - headers: { - Authorization: `Bearer ${apiKey}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify(payload), - }); - - if (!response.ok) { - let errorBody: unknown; - try { - errorBody = await response.json(); - } catch { - errorBody = response.statusText; - } - throw new Error(`UseSend error: ${JSON.stringify(errorBody)}`); - } -}; +import { UseSend } from 'usesend-js'; export default function UseSendProvider(config: EmailUserConfig): EmailConfig { return { @@ -64,11 +32,13 @@ export default function UseSendProvider(config: EmailUserConfig): EmailConfig { throw new Error('USESEND_API_KEY and USESEND_URL must be set.'); } + const useSend = new UseSend(apiKey, useSendUrl); + // For password reset, we want to send the code, not the magic link const isPasswordReset = url.includes('reset') || provider.id.includes('reset'); - await sendUseSendEmail(apiKey, useSendUrl, { + const result = await useSend.emails.send({ from: provider.from ?? 'noreply@example.com', to: [to], subject: isPasswordReset @@ -100,6 +70,10 @@ export default function UseSendProvider(config: EmailUserConfig): EmailConfig { `, }); + + if (result.error) { + throw new Error('UseSend error: ' + JSON.stringify(result.error)); + } }, options: config, diff --git a/scripts/convex-codegen b/scripts/convex-codegen index fb5de2b..8ca687c 100644 --- a/scripts/convex-codegen +++ b/scripts/convex-codegen @@ -30,6 +30,8 @@ has_cloud_deployment_env() { } if has_self_hosted_env || has_cloud_deployment_env; then + cd "$ROOT_DIR" + bun patch:usesend cd "$ROOT_DIR/packages/backend" bun run codegen exit 0