/** Unified webhook event schema that every provider verifier normalizes * into. Consumers get one shape regardless of which SDK the upstream * vendor ships. */ export type WebhookEventType = "sent" | "delivered" | "bounced" | "complained" | "opened" | "clicked" | "unsubscribed" | "rejected" | "failed" | "other"; export interface WebhookEvent { type: WebhookEventType; id: string; at: Date; recipient: string; provider: string; /** Provider-native payload, preserved for drivers that surface extra * fields (bounce diagnostics, click URLs, etc.). */ raw: unknown; /** For \`clicked\` events — the URL the recipient clicked. */ url?: string; /** For \`bounced\` events — bounce classification (\`"hard"\` / \`"soft"\` * / \`"unknown"\`). */ bounce?: "hard" | "soft" | "unknown"; } /** A provider-specific verifier that can normalize one webhook request * into one or more \`WebhookEvent\`s. */ export interface WebhookProvider { readonly name: string; verify: (request: Request) => Promise | WebhookEvent[] | null; } /** Handler returned by \`defineWebhookHandler\`. */ export type WebhookHandler = (request: Request) => Promise; export interface DefineWebhookHandlerOptions { providers: ReadonlyArray; onEvent: (event: WebhookEvent, context: { provider: string; request: Request; }) => void | Promise; onUnknown?: (request: Request) => Promise | Response; onVerificationFailure?: (request: Request, provider: string) => Promise | Response; } /** Build a fetch-compatible handler that accepts webhook payloads from * any registered provider, verifies signatures, and yields unified * \`WebhookEvent\`s via \`onEvent\`. */ export declare function defineWebhookHandler(options: DefineWebhookHandlerOptions): WebhookHandler;