/** * Newsletter Subscribe Logic * * Shared server-side logic for processing newsletter subscriptions. * Used by property-specific API endpoints. * * @packageDocumentation */ import type { NewsletterRequest, NewsletterResult, PropertyDomain } from './types.js'; /** * Environment bindings required for newsletter operations */ interface NewsletterEnv { DB: D1Database; CACHE?: KVNamespace; RESEND_API_KEY: string; TURNSTILE_SECRET_KEY?: string; } interface D1Database { prepare(query: string): D1PreparedStatement; } interface D1PreparedStatement { bind(...args: unknown[]): D1PreparedStatement; run(): Promise; first(): Promise; } interface D1Result { success: boolean; } interface KVNamespace { get(key: string): Promise; put(key: string, value: string, options?: { expirationTtl?: number; }): Promise; } /** * Generate the confirmation email HTML template (double opt-in) */ export declare function generateConfirmationEmailHtml(confirmUrl: string): string; /** * Generate the welcome email HTML template */ export declare function generateWelcomeEmailHtml(unsubscribeToken: string, property: PropertyDomain): string; /** * Process a newsletter subscription request. * * @example * ```typescript * // In +server.ts * import { processSubscription } from '@create-something/components/newsletter'; * * export const POST: RequestHandler = async ({ request, platform, getClientAddress }) => { * const body = await request.json(); * return processSubscription(body, platform?.env, getClientAddress(), 'io'); * }; * ``` */ export declare function processSubscription(body: NewsletterRequest, env: NewsletterEnv | undefined, clientIP: string, property: PropertyDomain): Promise<{ result: NewsletterResult; status: number; }>; export {};