This commit is contained in:
Stefan Lazic committed 2026-08-03 21:15:24 +01:00
1 parent ec5583f972
commit 546613e677
189 files changed
+9873 -655

No files matched your search

@@ -0,0 +1,53 @@
import "server-only";
import { BrevoEmailProvider, loadBrevoEmailProviderConfigFromEnv } from "./brevo-email-provider";
import { ConsoleEmailProvider } from "./console-email-provider";
import { ConsolePushProvider } from "./console-push-provider";
import type { EmailProvider } from "./email-provider";
import type { PushProvider } from "./push-provider";
import { WebPushProvider, loadWebPushProviderConfigFromEnv } from "./web-push-provider";
export type { EmailAddress, EmailProvider, EmailSendResult, SendEmailParams } from "./email-provider";
export type { PushProvider, PushSendResult, PushSubscriptionKeys, SendPushParams } from "./push-provider";
export { BrevoEmailProvider } from "./brevo-email-provider";
export { ConsoleEmailProvider } from "./console-email-provider";
export { MockEmailProvider } from "./mock-email-provider";
export { ConsolePushProvider } from "./console-push-provider";
export { MockPushProvider } from "./mock-push-provider";
export { WebPushProvider } from "./web-push-provider";
let cachedEmailProvider: EmailProvider | undefined;
let cachedPushProvider: PushProvider | undefined;
/**
* Selected once via `EMAIL_PROVIDER` and cached — never chosen per-call, so
* a single deployment always sends through exactly one path. Defaults to
* "console" whenever real SMTP credentials aren't present (e.g. local dev
* with no .env values filled in), so the app never accidentally tries a
* real send with empty credentials; this must never be the default in a
* deployed environment (see docs/phase-7-summary.md, "Environment
* variables required" — EMAIL_PROVIDER=brevo is required for production).
*/
export function getEmailProvider(): EmailProvider {
if (cachedEmailProvider) return cachedEmailProvider;
const selected = process.env.EMAIL_PROVIDER ?? "console";
if (selected === "brevo") {
cachedEmailProvider = new BrevoEmailProvider(loadBrevoEmailProviderConfigFromEnv());
} else {
cachedEmailProvider = new ConsoleEmailProvider();
}
return cachedEmailProvider;
}
/** Same selection pattern as getEmailProvider() — set PUSH_PROVIDER="web-push" once real VAPID keys are configured for a deployment; defaults to logging instead of sending. */
export function getPushProvider(): PushProvider {
if (cachedPushProvider) return cachedPushProvider;
const selected = process.env.PUSH_PROVIDER ?? "console";
if (selected === "web-push") {
cachedPushProvider = new WebPushProvider(loadWebPushProviderConfigFromEnv());
} else {
cachedPushProvider = new ConsolePushProvider();
}
return cachedPushProvider;
}