import { Alepha } from "alepha";
import { EmailProvider, EmailSendOptions } from "alepha/email";
//#region ../../src/email/cloudflare/providers/CloudflareEmailProvider.d.ts
/**
 * Default Cloudflare Email Sending binding name.
 *
 * Matches the convention used by other Alepha Cloudflare providers
 * (e.g. `KV_CACHE` for {@link CloudflareKVProvider}).
 */
declare const SEND_EMAIL_DEFAULT_BINDING = "SEND_EMAIL";
/**
 * Shape of the Cloudflare Email Sending binding (public beta, 2026-04-16).
 *
 * @see https://developers.cloudflare.com/email-service/
 */
interface CloudflareEmailBinding {
  send(message: CloudflareEmailSendMessage): Promise<CloudflareEmailSendResult>;
}
interface CloudflareEmailSendMessage {
  to: string | string[];
  from: string | {
    email: string;
    name?: string;
  };
  subject: string;
  html?: string;
  text?: string;
  cc?: string | string[];
  bcc?: string | string[];
  reply_to?: string | string[];
  headers?: Record<string, string>;
}
interface CloudflareEmailSendResult {
  id?: string;
  status?: "queued" | "sent" | "bounced" | string;
}
/**
 * Email provider using Cloudflare's Email Sending API via a Workers binding.
 *
 * Requires the Workers Paid plan and a verified sender address on the
 * `EMAIL_FROM` domain.
 *
 * **Required Cloudflare binding:**
 * - `SEND_EMAIL` — an Email Sending binding in wrangler configuration
 *
 * Configuration is provided via environment variables:
 * - `EMAIL_FROM`: Default sender email address
 *
 * @example
 * ```toml
 * # wrangler.toml
 * [[send_email]]
 * binding = "SEND_EMAIL"
 * ```
 *
 * @example
 * ```typescript
 * // app.ts
 * import { AlephaEmailCloudflare } from "alepha/email/cloudflare";
 *
 * const app = Alepha.create().with(AlephaEmailCloudflare);
 * ```
 */
declare class CloudflareEmailProvider implements EmailProvider {
  protected readonly alepha: Alepha;
  protected readonly env: {
    EMAIL_FROM?: string | undefined;
  };
  protected readonly log: import("alepha/logger").Logger;
  protected binding?: CloudflareEmailBinding;
  protected readonly onStart: import("alepha").HookPrimitive<"start">;
  send(options: EmailSendOptions): Promise<void>;
  /**
   * Map the configured `EMAIL_FROM` to Cloudflare's `from` shape. An RFC 5322
   * display-name form — `Name <addr@host>` (the name may be quoted) — is split
   * into `{ email, name }` so Cloudflare renders the sender's display name
   * (e.g. `Lore <noreply@lore.alepha.dev>` → "Lore"). A bare address is passed
   * through unchanged.
   *
   * The object key is `email` (not `address`) — that is the field the
   * Cloudflare Email Service Workers API expects. Sending `{ address, name }`
   * makes the API reject the message with an opaque "internal error".
   */
  protected resolveFrom(value: string): string | {
    email: string;
    name?: string;
  };
  protected getBinding(): CloudflareEmailBinding;
}
//#endregion
//#region ../../src/email/cloudflare/index.d.ts
/**
 * Plugin for Alepha Email that sends through Cloudflare's Email Sending API
 * via a Workers binding.
 *
 * @see {@link CloudflareEmailProvider}
 * @module alepha.email.cloudflare
 */
declare const AlephaEmailCloudflare: import("alepha").Service<import("alepha").Module>;
//#endregion
export { AlephaEmailCloudflare, CloudflareEmailBinding, CloudflareEmailProvider, CloudflareEmailSendMessage, CloudflareEmailSendResult, SEND_EMAIL_DEFAULT_BINDING };
//# sourceMappingURL=index.d.ts.map