/**
 * ═══════════════════════════════════════════════════════════════════════════
 * Audit Trail — Privacy Guard (middleware)
 * ═══════════════════════════════════════════════════════════════════════════
 *
 * Intercepte chaque flux de RP pour appliquer les contrôles d'audit.
 * Appelé par les runners, le bridge et les outils de stockage.
 *
 * Comportement :
 *   1. Si OVERMIND_AUDIT_ENABLED=false → pass-through (zero overhead, v3.8)
 *   2. Détection de la base légale (interne vs tiers)
 *   3. Validation du consentement si tiers (art. 8)
 *   4. Détection de RP dans le texte (email, NAS, téléphone, etc.)
 *   5. Pseudonymisation / anonymisation si requis (art. 23.1)
 *   6. Log du transfert si runner LLM externe (art. 21)
 *   7. Calcul de la rétention (art. 35.2)
 */
import { type AuditContext, type LegalBasis, type TransferRegion, type TransferMechanism } from './types.js';
export interface GuardResult {
    /** Le traitement peut continuer */
    allowed: boolean;
    /** Raison du refus si allowed = false */
    reason?: string;
    /** Contexte audit enrichi (avec legalBasis résolu, consentRef si validé) */
    context: AuditContext;
    /** Texte sanitizé (si PII détectés et filter activé) */
    sanitizedPrompt?: string;
    /** RP détectés dans le prompt */
    piiDetected: boolean;
    /** Types de RP détectés */
    piiTypes: string[];
    /** Timestamp d'expiration de rétention */
    retentionExpiresAt: number;
}
/**
 * Enregistre un accès dans access_log.
 */
export declare function logAccess(params: {
    dataSubjectId: string | null;
    accessedBy: string;
    action: 'read' | 'write' | 'delete' | 'transfer';
    resourceType: string;
    resourceId: string;
    purpose?: string;
}): Promise<void>;
/**
 * Enregistre un transfert de RP hors Québec dans transfer_log (art. 21).
 */
export declare function logTransfer(params: {
    dataSubjectId: string | null;
    destination: string;
    destinationRegion: TransferRegion;
    legalMechanism: TransferMechanism;
    dataType: string;
}): Promise<void>;
export interface GuardOptions {
    prompt: string;
    dataSubjectId?: string;
    purpose?: string;
    /** Provider LLM visé (pour vérifier si transfert hors QC) */
    provider?: string;
    /** Forcer la base légale (sinon auto-détection) */
    legalBasisOverride?: LegalBasis;
    /** Sanitiser le prompt avant envoi au LLM */
    sanitize?: boolean;
}
/**
 * Applique les contrôles d'audit sur une requête.
 *
 * @returns GuardResult — allowed=false si la requête doit être bloquée
 */
export declare function auditGuard(opts: GuardOptions): Promise<GuardResult>;
/**
 * Helper : pseudonymise un identifiant pour stockage en DB.
 */
export declare function pseudonymizeSubject(rawId: string): string;
//# sourceMappingURL=guard.d.ts.map