import { AzionBuildPreset } from 'azion/config';

export declare const angular: AzionBuildPreset;

export declare const astro: AzionBuildPreset;

/**
 * Base context for Azion handlers.
 * Provides common functionality like waitUntil for background tasks.
 */
export declare interface AzionBaseContext {
    waitUntil: (promise: Promise<unknown>) => void;
    respondWith: (response: Response | Promise<Response>) => void;
}

/**
 * Standard Azion handler interface.
 * Used for regular request handling with fetch event.
 */
export declare interface AzionFetchHandler {
    fetch: (request: AzionRequest, ctx: AzionBaseContext, env?: null) => Promise<Response>;
}

/**
 * Firewall-specific context for Azion handlers.
 * Extends the base context with firewall-specific actions.
 */
export declare interface AzionFirewallContext extends AzionBaseContext {
    deny: () => void;
    continue: () => void;
    drop: () => void;
    addRequestHeader: (name: string, value: string) => void;
    addResponseHeader: (name: string, value: string) => void;
}

/**
 * Firewall-specific handler interface.
 * Used for firewall rule processing.
 */
export declare interface AzionFirewallHandler {
    firewall: (request: AzionRequest, ctx: AzionFirewallContext, env?: null) => Promise<Response>;
}

/**
 * Extended Request interface with Azion metadata
 */
export declare interface AzionRequest extends Request {
    metadata: AzionRequestMetadata;
}

/**
 * Request metadata interface
 */
export declare interface AzionRequestMetadata {
    geoip_asn: string;
    geoip_city: string;
    geoip_city_continent_code: string;
    geoip_city_country_code: string;
    geoip_city_country_name: string;
    geoip_continent_code: string;
    geoip_country_code: string;
    geoip_country_name: string;
    geoip_region: string;
    geoip_region_name: string;
    remote_addr: string;
    remote_port: string;
    remote_user: string;
    server_protocol: string;
    server_fingerprint: string;
    server_fingerprint_ja4h: string;
    ssl_cipher: string;
    ssl_protocol: string;
    client_fingerprint: string;
    client_id: string;
    configuration_id: string;
    edge_connector_id: string;
    function_id: string;
    http_ssl_ja4: string;
    request_id: string;
    solution_id: string;
    [key: string]: string;
}

/**
 * Union type representing any valid Azion worker.
 * Can be either a standard handler or a firewall handler.
 */
export declare type AzionWorker = AzionFetchHandler | AzionFirewallHandler;

export declare const docusaurus: AzionBuildPreset;

export declare const eleventy: AzionBuildPreset;

export declare const emscripten: AzionBuildPreset;

export declare const gatsby: AzionBuildPreset;

export declare const hexo: AzionBuildPreset;

export declare const html: AzionBuildPreset;

export declare const hugo: AzionBuildPreset;

export declare const javascript: AzionBuildPreset;

export declare const jekyll: AzionBuildPreset;

export declare const next: AzionBuildPreset;

export declare const nuxt: AzionBuildPreset;

export declare const opennextjs: AzionBuildPreset;

export declare const preact: AzionBuildPreset;

export declare const qwik: AzionBuildPreset;

export declare const react: AzionBuildPreset;

export declare const rustwasm: AzionBuildPreset;

export declare const stencil: AzionBuildPreset;

export declare const svelte: AzionBuildPreset;

export declare const typescript: AzionBuildPreset;

export declare const vitepress: AzionBuildPreset;

export declare const vue: AzionBuildPreset;

export declare const vuepress: AzionBuildPreset;

export { }
