Files
anonymizer/package.json
Mobiletic 669794522e feat!: optional fail-closed fallback, legend output, richer prompt & docs
BREAKING CHANGE: regex fallback is now opt-in (patterns no longer defaults
to presets.swiss). With no fallback an LLM failure throws AnonymizationError
(fail-closed) and the pre-filter is bypassed; at least one of llm/patterns is
required. AnonymizationResult gains a required `legend`; anonymizeChunks seed
is now { mapping, legend? } and returns legend.

- prompt: model may coin new UPPERCASE abbreviations and returns a 'legende'
  explaining every abbreviation used (French); backfilled by DEFAULT_LEGEND
- PatternDef.meaning surfaces in the legend; swiss/generic presets get meanings
- AnonymizationError (exported) wraps the cause on fail-closed
- README: drop the chatbot provenance line; add 'How it works' + nLPD sections
- 34 tests / 99% coverage; bump to 0.2.0

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 15:28:04 +01:00

73 lines
1.8 KiB
JSON

{
"name": "@mobiletic/anonymizer",
"version": "0.2.0",
"description": "Framework-agnostic PII anonymization & pseudonymization: pluggable LLM detection for free-form PII (names, addresses) with a deterministic regex fallback, deterministic coreference, and streaming-safe de-anonymization.",
"license": "MIT",
"author": "Mobiletic",
"homepage": "https://git.mobiletic.net/mobiletic/anonymizer#readme",
"repository": {
"type": "git",
"url": "git+https://git.mobiletic.net/mobiletic/anonymizer.git"
},
"bugs": {
"url": "https://git.mobiletic.net/mobiletic/anonymizer/issues"
},
"keywords": [
"anonymization",
"pseudonymization",
"pii",
"redaction",
"privacy",
"gdpr",
"nlpd",
"llm",
"data-protection"
],
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"require": "./dist/index.cjs"
}
},
"files": [
"dist",
"README.md",
"LICENSE"
],
"engines": {
"node": ">=18"
},
"scripts": {
"build": "tsup",
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
"typecheck": "tsc --noEmit",
"lint": "eslint .",
"format": "prettier --write .",
"format:check": "prettier --check .",
"prepublishOnly": "npm run build"
},
"devDependencies": {
"@eslint/js": "^9.0.0",
"@vitest/coverage-v8": "^1.6.0",
"eslint": "^9.0.0",
"eslint-config-prettier": "^9.1.0",
"prettier": "^3.2.0",
"tsup": "^8.0.0",
"typescript": "^5.4.0",
"typescript-eslint": "^8.0.0",
"vitest": "^1.6.0"
},
"publishConfig": {
"access": "public",
"provenance": true
},
"sideEffects": false
}