import { IncomingMessage, ServerResponse } from 'node:http';
import { P as PermixDefinition, C as CheckContext, e as PermixRules, h as CheckFunctionParams, a as Permix } from '../shared/permix.CuefdCK4.js';

interface MiddlewareContext {
    req: IncomingMessage;
    res: ServerResponse<IncomingMessage>;
}
interface PermixOptions<T extends PermixDefinition> {
    /**
     * Custom error handler
     */
    onForbidden?: (params: CheckContext<T> & MiddlewareContext) => void;
}
/**
 * Create a middleware function that checks permissions for Node.js HTTP servers.
 * Compatible with raw Node.js HTTP servers.
 *
 * @link https://permix.letstri.dev/docs/integrations/node
 */
declare function createPermix<Definition extends PermixDefinition>({ onForbidden, }?: PermixOptions<Definition>): {
    setupMiddleware: (callback: (context: MiddlewareContext) => PermixRules<Definition> | Promise<PermixRules<Definition>>) => (context: MiddlewareContext) => Promise<void>;
    checkMiddleware: <K extends keyof Definition>(...params: CheckFunctionParams<Definition, K>) => (context: MiddlewareContext) => Promise<void>;
    template: <T = void>(rules: PermixRules<Definition> | ((param: T) => PermixRules<Definition>)) => (param: T) => PermixRules<Definition>;
    get: (req: IncomingMessage, res: ServerResponse<IncomingMessage>) => Pick<Permix<Definition>, "check" | "dehydrate">;
};

export { createPermix };
export type { MiddlewareContext, PermixOptions };
