import type { ReactElement } from "react"; import { type EmailTemplateApp } from "../server/email-template.js"; import { type RenderAccessGrantedEmailArgs, type RenderAccessRequestedEmailArgs, type RenderBuilderCreditLimitEmailArgs, type RenderChangeEmailConfirmationArgs, type RenderChangeEmailVerificationArgs, type RenderedEmailMessage, type RenderInviteEmailArgs, type RenderMagicLinkEmailArgs, type RenderResetPasswordEmailArgs, type RenderResourceSharedEmailArgs, type RenderVerifySignupEmailArgs } from "../server/email-templates.js"; export declare const CORE_INVITE_EMAIL_ID = "core.organization-invite"; export declare const CORE_VERIFY_SIGNUP_EMAIL_ID = "core.verify-signup"; export declare const CORE_RESET_PASSWORD_EMAIL_ID = "core.reset-password"; export declare const CORE_MAGIC_LINK_EMAIL_ID = "core.magic-link"; export declare const CORE_CHANGE_EMAIL_CONFIRMATION_EMAIL_ID = "core.change-email-confirmation"; export declare const CORE_CHANGE_EMAIL_VERIFICATION_EMAIL_ID = "core.change-email-verification"; export declare const CORE_BUILDER_CREDIT_LIMIT_EMAIL_ID = "core.builder-credit-limit"; export declare const CORE_RESOURCE_SHARED_EMAIL_ID = "core.resource-shared"; export declare const CORE_ACCESS_REQUESTED_EMAIL_ID = "core.access-requested"; export declare const CORE_ACCESS_GRANTED_EMAIL_ID = "core.access-granted"; /** * Data each framework email is rendered from, keyed by catalog id. An * override receives these values raw — escape them before interpolating into * an HTML string (`escapeEmailHtml`); React escapes them itself. */ export interface CoreTransactionalEmailArgs { [CORE_VERIFY_SIGNUP_EMAIL_ID]: RenderVerifySignupEmailArgs; [CORE_RESET_PASSWORD_EMAIL_ID]: RenderResetPasswordEmailArgs; [CORE_MAGIC_LINK_EMAIL_ID]: RenderMagicLinkEmailArgs; [CORE_CHANGE_EMAIL_CONFIRMATION_EMAIL_ID]: RenderChangeEmailConfirmationArgs; [CORE_CHANGE_EMAIL_VERIFICATION_EMAIL_ID]: RenderChangeEmailVerificationArgs; [CORE_INVITE_EMAIL_ID]: RenderInviteEmailArgs; [CORE_BUILDER_CREDIT_LIMIT_EMAIL_ID]: RenderBuilderCreditLimitEmailArgs; [CORE_RESOURCE_SHARED_EMAIL_ID]: RenderResourceSharedEmailArgs; [CORE_ACCESS_REQUESTED_EMAIL_ID]: RenderAccessRequestedEmailArgs; [CORE_ACCESS_GRANTED_EMAIL_ID]: RenderAccessGrantedEmailArgs; } export type CoreTransactionalEmailId = keyof CoreTransactionalEmailArgs; export type CoreTransactionalEmailProps = CoreTransactionalEmailArgs[Id] & { app: EmailTemplateApp; }; export type TransactionalEmailOverrideResult = { subject?: string; html: string; text?: string; } | { subject?: string; react: ReactElement; text?: string; }; export type TransactionalEmailOverride = (props: CoreTransactionalEmailProps, defaultEmail: RenderedEmailMessage) => TransactionalEmailOverrideResult | Promise; /** * Replace the subject, markup, or plain text of a framework-sent email. The * framework still owns the recipient, sender identity, and delivery; the * override owns what the message says and looks like. A later call for the * same id replaces the earlier one. */ export declare function overrideTransactionalEmail(id: Id, render: TransactionalEmailOverride): void; export declare function removeTransactionalEmailOverride(id: CoreTransactionalEmailId): void; /** * The framework default, for synchronous catalog previews. Throws once an app * registers an override, so a synchronous preview never shows the design the * app replaced. */ export declare function renderDefaultTransactionalEmail(id: Id, args: CoreTransactionalEmailArgs[Id]): RenderedEmailMessage; /** * Render a framework email: the framework default, or the app's override * when one is registered. An override that throws fails the send; it is never * swapped for the default, so a broken template surfaces instead of shipping * the design the app replaced. */ export declare function renderTransactionalEmail(id: Id, args: CoreTransactionalEmailArgs[Id]): Promise;