JSPM

@logvault/pii

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q18391F
  • License MIT

PII detection with context filtering. Regex-based, <5KB.

Package Exports

  • @logvault/pii

Readme

@logvault/pii

PII detection with context filtering. Regex-based, <5KB.

Install

npm i @logvault/pii

Usage

import { detect, scrub } from "@logvault/pii";

// Detection
const result = detect("BSN: 123456782, email: john@example.com");
// → { hasPII: true, findings: [...] }

// Scrubbing
const safe = scrub("BSN: 123456782, email: john@example.com");
// → "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" context

Disable with strict: false:

detect("Order #123456782", { strict: false }); // → hasPII: true

Patterns

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