import { type Context, Hono } from "hono";
import type { ReAuthEngine, AuthOutput, Entity, AuthToken } from "@re-auth/reauth";
import { type BaseHttpConfig, type FrameworkAdapter, type HttpAdapterContext, type RouteOverride, type CustomRoute, createRouteOverride, createCustomRoute, createAutoIntrospectionConfig, introspectReAuthEngine, type AutoGeneratedRoute, type AutoIntrospectionConfig, createContextRule, OAuth2ContextRules, type ContextExtractionRule } from "../../utils/http-adapter-factory";
/**
 * Hono-specific configuration
 */
export interface HonoAdapterConfig extends BaseHttpConfig {
}
/**
 * Hono framework adapter implementation
 */
declare class HonoFrameworkAdapter implements FrameworkAdapter<HonoAdapterConfig> {
    private app;
    private engine?;
    private contextRules;
    private adapterConfig;
    constructor(engine?: ReAuthEngine, app?: Hono);
    /**
     * Set the ReAuth engine instance (for shared adapter pattern)
     */
    setEngine(engine: ReAuthEngine): void;
    /**
     * Set context rules (for shared adapter pattern)
     */
    setContextRules(rules: ContextExtractionRule[]): void;
    /**
     * Set adapter config (for shared adapter pattern)
     */
    setAdapterConfig(config: any): void;
    /**
     * Get expected inputs for a plugin step
     */
    private getExpectedInputs;
    setupMiddleware(context: HttpAdapterContext): void;
    createRoute(method: string, path: string, handler: any, middleware?: any[]): void;
    extractInputs(context: Context, pluginName: string, stepName: string): Promise<Record<string, any>>;
    /**
     * Add configurable context inputs from cookies and headers based on context rules
     */
    addConfigurableContextInputs(context: Context, inputs: Record<string, any>, pluginName: string, stepName: string, contextRules: ContextExtractionRule[]): void;
    handleStepResponse(context: Context, response: any, // Not used in Hono, context handles response
    result: AuthOutput, httpConfig: any): Response;
    /**
     * Handle configurable context outputs (set cookies and headers) based on context rules
     */
    handleConfigurableContextOutputs(context: Context, response: any, // Not used in Hono
    result: AuthOutput, pluginName: string, stepName: string, contextRules: ContextExtractionRule[]): void;
    private getStatusCode;
    extractToken(context: Context): string | null;
    requireAuth(): any;
    errorResponse(context: any, error: Error): Response;
    getAdapter(): Hono;
}
/**
 * Create Hono adapter using the factory pattern with shared instance
 */
export declare const createHonoAdapterV2: (engine: ReAuthEngine, config: HonoAdapterConfig, frameworkAdapter: HonoFrameworkAdapter) => any;
/**
 * Hono adapter class with additional features
 */
export declare class HonoAdapterV2 {
    private app;
    private engine;
    private config;
    private frameworkAdapter;
    constructor(engine: ReAuthEngine, config: HonoAdapterConfig | undefined, app: Hono, frameworkAdapter?: HonoFrameworkAdapter);
    /**
     * Get the Hono app
     */
    getApp(): Hono;
    getAdapter(): HonoFrameworkAdapter;
    /**
     * Add a custom route
     */
    addRoute(method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH", path: string, handler: (c: Context) => Promise<Response> | Response, options?: {
        middleware?: any[];
        requireAuth?: boolean;
    }): void;
    /**
     * Protection middleware for routes
     */
    protect(options?: ProtectOptions): (c: Context, next: any) => Promise<(Response & import("hono").TypedResponse<{
        error: string;
    }, 401, "json">) | (Response & import("hono").TypedResponse<{
        error: string;
    }, 403, "json">) | (Response & import("hono").TypedResponse<{
        error: string;
    }, 500, "json">) | undefined>;
}
declare module "hono" {
    interface ContextVariableMap {
        entity?: Entity;
        authenticated: boolean;
        token: AuthToken;
    }
}
/**
 * Protection options
 */
interface ProtectOptions {
    roles?: string[];
    authorize?: (entity: Entity, context: Context) => Promise<boolean> | boolean;
}
/**
 * Convenience function to create Hono adapter with options
 */
export declare function createHonoAdapter(engine: ReAuthEngine, config: HonoAdapterConfig | undefined, app: Hono): HonoAdapterV2;
export { createRouteOverride, createCustomRoute, createAutoIntrospectionConfig, introspectReAuthEngine, createContextRule, OAuth2ContextRules, HonoFrameworkAdapter, };
export type { RouteOverride, CustomRoute, AutoGeneratedRoute, AutoIntrospectionConfig, ContextExtractionRule, };
//# sourceMappingURL=hono-adapter-v2.d.ts.map