import type { IndustryType, SDK } from '@iota-big3/sdk-core';
import type { Request, RequestHandler } from 'express';
import type { FastifyInstance } from 'fastify';
export interface PolicyConfig {
    opaUrl?: string;
    enforcementMode?: 'enforce' | 'monitor' | 'off';
    cacheDecisions?: boolean;
    cacheTTL?: number;
    defaultAllow?: boolean;
    includeViolationDetails?: boolean;
    inputBuilder?: (req: Request) => Promise<any>;
    philosophyEnforcement?: boolean;
    philosophyMinScore?: number;
}
export interface PolicyMetadata {
    serviceName: string;
    tribe?: string;
    industry?: IndustryType;
    environment?: string;
    sdk?: SDK;
}
export interface PolicyInput {
    method: string;
    path: string;
    user?: import('@iota-big3/sdk-types').AuthUser;
    resource?: string;
    action?: string;
    context?: Record<string, unknown>;
}
export interface PolicyDecision {
    allowed: boolean;
    reasons?: string[];
    appliedPolicies?: string[];
    filteredResponse?: unknown;
}
export interface PolicyMiddleware extends RequestHandler {
    express: RequestHandler;
    fastify: (fastify: FastifyInstance) => Promise<void>;
    clearCache: () => void;
    getMetrics: () => PolicyMetrics;
}
interface PolicyMetrics {
    allowed: number;
    denied: number;
    errors: number;
    cached: number;
}
export declare function createPolicyMiddleware(metadata: PolicyMetadata, config?: PolicyConfig): PolicyMiddleware;
export declare function createLegacyPolicyMiddleware(config?: PolicyConfig & {
    tribe?: string;
}): PolicyMiddleware;
export declare const policyMiddleware: typeof createPolicyMiddleware;
export default createPolicyMiddleware;
//# sourceMappingURL=policy-middleware.d.ts.map