@logvault/pii
v1.0.0
Published
PII detection with context filtering. Regex-based, <5KB.
Downloads
110
Maintainers
Readme
@logvault/pii
PII detection with context filtering. Regex-based, <5KB.
Install
npm i @logvault/piiUsage
import { detect, scrub } from "@logvault/pii";
// Detection
const result = detect("BSN: 123456782, email: [email protected]");
// → { hasPII: true, findings: [...] }
// Scrubbing
const safe = scrub("BSN: 123456782, email: [email protected]");
// → "BSN: <BSN>, email: <EMAIL>"Context Filtering
False positives are reduced using context disqualifiers:
// These are NOT flagged as PII:
detect("Order #123456782"); // Not a BSN - "order" context
detect("Artikelnummer: 111222333"); // Not a BSN - "artikel" context
detect("Intern: 06-12345678"); // Not a phone - "intern" contextDisable with strict: false:
detect("Order #123456782", { strict: false }); // → hasPII: truePatterns
| Pattern | Validation | Disqualifiers | | ----------- | ------------- | ------------------------------ | | EMAIL | Format | voorbeeld, placeholder | | PHONE_NL | Dutch formats | intern, toestel, klantnr | | BSN | 11-proef | order, artikel, factuur, serie | | IBAN | Mod 97 | test, dummy, voorbeeld | | CREDIT_CARD | Luhn | serie, test, dummy |
Validators
Direct access to validation functions:
import { validateBSN, validateIBAN, validateLuhn } from "@logvault/pii";
validateBSN("123456782"); // true (passes 11-proef)
validateIBAN("NL91ABNA0417164300"); // true (passes mod 97)
validateLuhn("4111111111111111"); // true (passes Luhn)Options
interface DetectOptions {
patterns?: PatternType[]; // Filter patterns
strict?: boolean; // Use context disqualifiers (default: true)
contextWindow?: number; // Chars to check around match (default: 50)
}
interface ScrubOptions {
patterns?: PatternType[];
replacement?: "placeholder" | "hash" | "redact" | ((match: Match) => string);
strict?: boolean;
}Bundle Size
- Core: ~2KB gzip
- Tree-shakeable
- No dependencies
