type SourceMeta = {
    etag?: string;
    lastModified?: string;
    text?: string;
    json?: unknown;
};
export type ReloaderOptions<TCompiled> = {
    policyUrl: string;
    dictManifestUrl: string;
    headers?: Record<string, string>;
    intervalMs?: number;
    maxIntervalMs?: number;
    jitter?: number;
    onSwap?: (compiled: TCompiled, changed: string[]) => void;
    onError?: (err: unknown) => void;
    compile: (policy: unknown, dicts: unknown[], options?: CompileOptions) => TCompiled;
    /**
     * Optional custom loader. If provided, it overrides the default HTTP(S) loader.
     * This enables loading from file://, in-memory stores, or custom transports.
     */
    load?: LoaderFn;
    /**
     * Request timeout in milliseconds for HTTP requests
     */
    requestTimeoutMs?: number;
    /**
     * URL validation function to prevent SSRF attacks
     */
    validateUrl?: (url: URL) => boolean;
    /**
     * Maximum number of concurrent dictionary downloads
     */
    maxConcurrent?: number;
    /**
     * Additional options for Registry compilation
     */
    compileOptions?: CompileOptions;
};
export type CompileOptions = {
    environment?: 'production' | 'test' | 'development';
    enableConfidenceScoring?: boolean;
    allowDenyConfig?: {
        customAllowlist?: Record<string, Set<string>>;
        customDenylist?: Record<string, Set<string>>;
    };
};
export type LoaderResult = {
    status: 200 | 304;
    meta: SourceMeta;
};
export type LoaderFn = (url: string, prev: SourceMeta | undefined, headers: Record<string, string>, force: boolean) => Promise<LoaderResult>;
export declare class PolicyDictReloader<TCompiled> {
    private opts;
    private timer;
    private running;
    private backoff;
    private policy;
    private manifest;
    private dicts;
    private compiled;
    private loader;
    constructor(opts: ReloaderOptions<TCompiled>);
    getCompiled(): NonNullable<TCompiled>;
    start(): Promise<void>;
    stop(): void;
    forceReload(): Promise<void>;
    private nextDelay;
    private schedule;
    private tick;
    private loadDictionariesWithConcurrency;
}
declare function conditionalGet(url: string, prev: SourceMeta | undefined, headers: Record<string, string>, force: boolean, timeoutMs?: number): Promise<LoaderResult>;
export { conditionalGet as defaultLoader };
