mirror of
https://github.com/temetro/temetro.git
synced 2026-07-26 11:58:14 +00:00
90e6ec4cc0
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>
32 lines
984 B
TypeScript
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" });
|
|
}
|