/**
 * Transactional email sender registry.
 *
 * cms-core sends transactional email (password resets, form notifications)
 * through a single resolver so callers never reach into a specific plugin or
 * provider. Resolution order:
 *
 *   1. `config.platform.email` — an explicit platform adapter always wins, so
 *      apps that wire their own adapter keep full control.
 *   2. A sender registered via {@link setEmailSender} — this is how the email
 *      plugin (`@actuate-media/plugin-email`) makes its configured provider
 *      available to core *without* core depending on the plugin. Dependency
 *      direction stays plugins → core: the plugin imports `setEmailSender` and
 *      registers itself at boot.
 *
 * The registered sender is stored on `globalThis` so a single value survives
 * even if more than one cms-core module instance is loaded in the same process,
 * mirroring the config runtime contract (see `config/runtime.ts`). It is set
 * once at boot (when the plugin factory runs) and read-only afterwards.
 */
import type { EmailAdapter } from '../config/types.js';
/**
 * Register the process-wide transactional email sender. Called once at boot by
 * the email plugin. Pass `null` to clear it (used in tests).
 */
export declare function setEmailSender(sender: EmailAdapter | null): void;
/** The sender registered via {@link setEmailSender}, if any. */
export declare function getRegisteredEmailSender(): EmailAdapter | null;
/**
 * Resolve the active transactional email sender, or `null` when email is not
 * configured. Prefers an explicit `platform.email` adapter, then a
 * plugin-registered sender.
 */
export declare function resolveEmailSender(): EmailAdapter | null;
//# sourceMappingURL=sender.d.ts.map