/// <reference types="astro/client" />
/// <reference types="@cloudflare/workers-types" />

// CF-native Rate Limiting binding (GA Sep 2025). Structural shape — matches the `limit()` surface
// the middleware consumes without pulling @cloudflare/workers-types into global scope here.
type RateLimitBinding = { limit(options: { key: string }): Promise<{ success: boolean }> };

declare namespace Cloudflare {
  interface Env {
    DB?: D1Database;
    DATABASE_URL?: string;
    AUTH_SESSION_SECRET: string;
    AUTH_PEPPER: string;
    SEED_ADMIN_EMAIL: string;
    SEED_ADMIN_PASSWORD: string;
    SITE_ORIGIN: string;
    ADMIN_LOGIN_LIMITER: RateLimitBinding;
    ADMIN_API_LIMITER: RateLimitBinding;
    COMMENTS_LIMITER?: RateLimitBinding;
    FORMS_LIMITER?: RateLimitBinding;
    MEDIA_BUCKET: import('@platform-modules/uploads/storage-r2').R2StorageBucket;
    MEDIA_PUBLIC_BASE_URL: string;
    MEDIA_MAX_BYTES?: string;
    MEDIA_QUOTA_BYTES?: string;
    CRON_DO_SECRET: string;
    SCHEDULED_PUBLISH_DO: DurableObjectNamespace;
  }
}
