Files
temetro/frontend/lib/email-settings.ts
T
Khalid Abdi 90e6ec4cc0 feat: email provider, admin password reset, portal new-patient, chat pill
Chat: history pill now shows a History icon + a Start-new-chat (SquarePen)
button; removed the duplicate chat-history list from the sidebar.

Email: deployment-wide email provider config (Resend/Postmark/SendGrid/SMTP) in
Settings → Developers, with encrypted API key and a Send-test action. sendEmail
dispatches via the chosen provider (REST via fetch; SMTP via nodemailer).

Forgot password with no provider: alert the clinic admin(s) via a "System"
message card in Messages + a bell notification (seeded system user + per-clinic
System conversation); clicking deep-links to /settings?tab=careTeam&member=<id>.
Admins can set a member's password directly from the employee dialog
(PATCH /api/staff/:id/password via Better Auth's internal context — no admin
plugin needed).

Patient Portal: "New patient" booking path registers a demographics-only patient
then books; bookings reject double-booked slots (409).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 19:52:55 +03:00

32 lines
984 B
TypeScript

import { apiFetch } from "@/lib/api-client";
// Deployment-wide email provider config (Settings → Developers). The API key is
// never returned — `hasCredentials` only signals whether one is stored.
export type EmailProvider = "none" | "smtp" | "resend" | "postmark" | "sendgrid";
export type EmailConfig = {
provider: EmailProvider;
fromAddress: string;
hasCredentials: boolean;
};
export function getEmailConfig(): Promise<EmailConfig> {
return apiFetch<EmailConfig>("/api/settings/email");
}
export function saveEmailConfig(input: {
provider: EmailProvider;
fromAddress: string;
// undefined = leave existing key; "" = clear; string = set/replace.
credentials?: string;
}): Promise<EmailConfig> {
return apiFetch<EmailConfig>("/api/settings/email", {
method: "PUT",
body: JSON.stringify(input),
});
}
export function testEmailConfig(): Promise<{ ok: boolean; to: string }> {
return apiFetch("/api/settings/email/test", { method: "POST" });
}