UNPKG

@appwarden/middleware

Version:

Instantly disable all user interaction with your app deployed on Cloudflare or Vercel

469 lines (464 loc) 30.4 kB
import { NextRequest, NextFetchEvent, NextResponse } from 'next/server'; import { z } from 'zod'; /** * Zod schema for Next.js Cloudflare adapter configuration. * Validates the config object returned by the configFn. */ declare const NextJsCloudflareConfigSchema: z.ZodObject<{ /** The slug/path of the lock page to redirect to when the site is locked */ lockPageSlug: z.ZodEffects<z.ZodString, string, string>; /** The Appwarden API token for authentication */ appwardenApiToken: z.ZodEffects<z.ZodEffects<z.ZodString, string, unknown>, string, unknown>; /** Optional custom API hostname (defaults to https://api.appwarden.io) */ appwardenApiHostname: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>; /** Enable debug logging */ debug: z.ZodDefault<z.ZodEffects<z.ZodEffects<z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodBoolean]>>, boolean | "true" | "false", string | boolean | undefined>, boolean, string | boolean | undefined>>; /** Optional Content Security Policy configuration (headers only, no HTML rewriting; '{{nonce}}' is not supported) */ contentSecurityPolicy: z.ZodOptional<z.ZodLazy<z.ZodEffects<z.ZodObject<{ mode: z.ZodUnion<[z.ZodLiteral<"disabled">, z.ZodLiteral<"report-only">, z.ZodLiteral<"enforced">]>; directives: z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodObject<{ "default-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "script-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "style-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "img-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "connect-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "font-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "object-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "media-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "frame-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; sandbox: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "report-uri": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "child-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "form-action": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "frame-ancestors": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "plugin-types": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "base-uri": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "report-to": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "worker-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "manifest-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "prefetch-src": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "navigate-to": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "require-sri-for": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "block-all-mixed-content": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "upgrade-insecure-requests": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "trusted-types": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; "require-trusted-types-for": z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString, z.ZodBoolean]>>; }, "strip", z.ZodTypeAny, { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; }, { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; }>]>, string | { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; }, string | { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; }>, { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; } | undefined, string | { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; }>; }, "strip", z.ZodTypeAny, { mode: "disabled" | "report-only" | "enforced"; directives?: { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; } | undefined; }, { mode: "disabled" | "report-only" | "enforced"; directives: string | { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; }; }>, { mode: "disabled" | "report-only" | "enforced"; directives?: { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; } | undefined; }, { mode: "disabled" | "report-only" | "enforced"; directives: string | { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; }; }>>>; }, "strip", z.ZodTypeAny, { debug: boolean; lockPageSlug: string; appwardenApiToken: string; contentSecurityPolicy?: { mode: "disabled" | "report-only" | "enforced"; directives?: { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; } | undefined; } | undefined; appwardenApiHostname?: string | undefined; }, { lockPageSlug: string; debug?: string | boolean | undefined; contentSecurityPolicy?: { mode: "disabled" | "report-only" | "enforced"; directives: string | { "default-src"?: string | boolean | string[] | undefined; "script-src"?: string | boolean | string[] | undefined; "style-src"?: string | boolean | string[] | undefined; "img-src"?: string | boolean | string[] | undefined; "connect-src"?: string | boolean | string[] | undefined; "font-src"?: string | boolean | string[] | undefined; "object-src"?: string | boolean | string[] | undefined; "media-src"?: string | boolean | string[] | undefined; "frame-src"?: string | boolean | string[] | undefined; sandbox?: string | boolean | string[] | undefined; "report-uri"?: string | boolean | string[] | undefined; "child-src"?: string | boolean | string[] | undefined; "form-action"?: string | boolean | string[] | undefined; "frame-ancestors"?: string | boolean | string[] | undefined; "plugin-types"?: string | boolean | string[] | undefined; "base-uri"?: string | boolean | string[] | undefined; "report-to"?: string | boolean | string[] | undefined; "worker-src"?: string | boolean | string[] | undefined; "manifest-src"?: string | boolean | string[] | undefined; "prefetch-src"?: string | boolean | string[] | undefined; "navigate-to"?: string | boolean | string[] | undefined; "require-sri-for"?: string | boolean | string[] | undefined; "block-all-mixed-content"?: string | boolean | string[] | undefined; "upgrade-insecure-requests"?: string | boolean | string[] | undefined; "trusted-types"?: string | boolean | string[] | undefined; "require-trusted-types-for"?: string | boolean | string[] | undefined; }; } | undefined; appwardenApiToken?: unknown; appwardenApiHostname?: string | undefined; }>; type NextJsCloudflareConfig = z.infer<typeof NextJsCloudflareConfigSchema>; /** * Input type for Next.js Cloudflare adapter configuration. * This is the pre-transformation type that accepts string | boolean for debug * and string | object for CSP directives, allowing users to pass environment * variables directly without manual transformation. */ type NextJsCloudflareConfigInput = z.input<typeof NextJsCloudflareConfigSchema>; declare function getAppwardenConfiguration(generatedConfig: Record<string, unknown>, config: Partial<NextJsCloudflareConfigInput>): NextJsCloudflareConfig; /** * Cloudflare runtime context provided by @opennextjs/cloudflare. * This is the shape of the context returned by getCloudflareContext(). */ interface NextJsCloudflareRuntime { env: CloudflareEnv; ctx: ExecutionContext; } /** * Configuration for the Appwarden middleware. * * This is an alias of the validated output type from * NextJsCloudflareConfigSchema, so it always stays in sync with the * actual runtime config contract. */ type NextJsCloudflareAppwardenConfig = NextJsCloudflareConfig; /** * Configuration function that receives the Cloudflare runtime and returns the config. * This allows dynamic configuration based on environment variables. * Accepts pre-transformation input types (e.g., string | boolean for debug, string | object for CSP directives). */ type NextJsCloudflareConfigFn = (runtime: NextJsCloudflareRuntime) => NextJsCloudflareConfigInput | NextJsCloudflareConfig; /** * Next.js middleware function signature. * Compatible with both middleware.ts and proxy.ts (Next.js 16+). */ type NextJsMiddlewareFunction = (request: NextRequest, event?: NextFetchEvent) => Promise<NextResponse>; /** * Creates an Appwarden middleware function for Next.js on Cloudflare. * * This middleware checks if the site is locked and redirects to the lock page if so. * It uses @opennextjs/cloudflare to access Cloudflare bindings and context. * * @example * ```typescript * // middleware.ts (or proxy.ts for Next.js 16+) * import { createAppwardenMiddleware } from "@appwarden/middleware/opennext-cloudflare" * * export const config = { * matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"], * } * * export default createAppwardenMiddleware(({ env }) => ({ * lockPageSlug: env.APPWARDEN_LOCK_PAGE_SLUG, * appwardenApiToken: env.APPWARDEN_API_TOKEN, * })) * ``` * * @param configFn - A function that receives the Cloudflare runtime and returns the config * @returns A Next.js middleware function */ declare function createAppwardenMiddleware(configFn: NextJsCloudflareConfigFn): NextJsMiddlewareFunction; export { type NextJsCloudflareAppwardenConfig, type NextJsCloudflareConfig, type NextJsCloudflareConfigFn, type NextJsCloudflareConfigInput, type NextJsCloudflareRuntime, type NextJsMiddlewareFunction, createAppwardenMiddleware, getAppwardenConfiguration };