alepha
Version:
Easy-to-use modern TypeScript framework for building many kind of applications.
102 lines • 3.45 kB
TypeScript
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