Phase 7
This commit is contained in:
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;
|
||||
}
|
||||
Reference in new issue
Block a user