/** * Content-scanner normalisation — runs BEFORE IBAN / digit / email detectors. * * Invisible and look-alike characters were splitting identifiers so the IBAN * scanner never fired, then the digit scanner ate the tail and left * `TR33000610051[MASKED_PII]` — which looks like protection, increments * `maskedCount`, and still hands the prefix to the model. That is the failure * this pass exists to prevent. * * Conscious output change: the string that leaves the scanner is the * normalised form even when nothing was PII. Zero-width / format characters * are stripped; fullwidth digits and `@` become ASCII; unicode dashes become * ASCII hyphen. The model and the operator see the same bytes. A ZWSP that * was only there to hide an IBAN is gone; a ZWSP that was only there as * decoration is also gone. Documented, tested, not silent. */ export declare function normalizePiiText(input: string): string; /** * Backstop: any leftover alphanumeric prefix glued to a mask * (`411[MASKED_PII]`, `TR33000610051[MASKED_PII]`) is a partial mask. * Collapse it to a full mask so maskedCount cannot claim protection * while the prefix is still in the clear. The detectors must not produce * this; this exists so a future mid-run match still cannot lie. */ export declare function collapsePartialMask(text: string): string; /** @deprecated name — same function, kept so existing imports compile during the cut */ export declare const collapsePartialIbanMask: typeof collapsePartialMask; export declare function decodedLooksLikePii(decoded: string): boolean; /** * Mask *tokens inside a field* that decode to PII. Whole-field base64 is * handled separately. Length-capped so a 20 kB image blob is not scanned. * Non-PII payloads (hashes, greetings, signatures) are left alone. */ export declare function maskEmbeddedEncodedPii(text: string, ibanHit: (s: string) => boolean): { text: string; count: number; }; //# sourceMappingURL=pii_normalize.d.ts.map