{"_id":"@claudiu-ceia/pii-mask","_rev":"7-efc1310b561abc0373710720006ad6d6","name":"@claudiu-ceia/pii-mask","dist-tags":{"latest":"0.2.2"},"versions":{"0.1.0":{"name":"@claudiu-ceia/pii-mask","version":"0.1.0","keywords":["masking","pii","pino","redaction","typescript","winston"],"author":{"name":"Claudiu Ceia"},"license":"MIT","_id":"@claudiu-ceia/pii-mask@0.1.0","maintainers":[{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"}],"homepage":"https://github.com/ClaudiuCeia/pii-mask#readme","bugs":{"url":"https://github.com/ClaudiuCeia/pii-mask/issues"},"dist":{"shasum":"3a3516c808e1b73871cfdd72e688cb8f15b14b78","tarball":"https://registry.npmjs.org/@claudiu-ceia/pii-mask/-/pii-mask-0.1.0.tgz","fileCount":12,"integrity":"sha512-kHa+iedNrpGWk+nB+2DZPu5+ZDCO+h3uEuDlDuZu3iKUB/mwJhoO8dk6oHDBxfHVx3sRYt+xDAPshvcKnSyIag==","signatures":[{"sig":"MEUCIQDPgZJOU6tqA864YrWtbMuZ3yCj5XuTIrE1N1UdrDBoxwIgf/Po2zuGZdzttrtkY1GhZnP5+HXBZUQ+hY+BW2BV/R0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claudiu-ceia%2fpii-mask@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73918},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.3.0","node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./pino":{"types":"./dist/pino.d.ts","import":"./dist/pino.js"},"./winston":{"types":"./dist/winston.d.ts","import":"./dist/winston.js"}},"gitHead":"ce205d019a5912b345a6136f5703b6707441e8da","scripts":{"knip":"knip","lint":"oxlint . --deny-warnings","test":"bun test","bench":"bun run build && bun run scripts/benchmark.ts --module dist/index.js","build":"bun run scripts/build.ts","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run knip","format":"oxfmt --write .","typecheck":"tsc --noEmit","bench:save":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/baseline.json","bench:check":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/current.json && bun run scripts/compare-benchmarks.ts .benchmarks/baseline.json .benchmarks/current.json","format:check":"oxfmt --check .","bench:compare":"bun run scripts/compare-benchmarks.ts","package:check":"bun run build && publint && node scripts/package-smoke.mjs","test:coverage":"bun test --coverage","prepublishOnly":"bun run check && bun run package:check"},"_npmUser":{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"},"repository":{"url":"git+https://github.com/ClaudiuCeia/pii-mask.git","type":"git"},"_npmVersion":"10.8.2","description":"Deterministic PII masking and redaction for TypeScript applications and logs.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@claudiu-ceia/ts-duckling":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.29.0","pino":"^10.3.1","oxfmt":"^0.60.0","oxlint":"^1.75.0","publint":"^0.3.22","winston":"^3.19.0","@types/bun":"^1.3.14","typescript":"^7.0.2"},"peerDependencies":{"pino":">=9 <11","winston":">=3 <4"},"peerDependenciesMeta":{"pino":{"optional":true},"winston":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pii-mask_0.1.0_1784980172295_0.7658926420006307","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@claudiu-ceia/pii-mask","version":"0.1.1","keywords":["masking","pii","pino","redaction","typescript","winston"],"author":{"name":"Claudiu Ceia"},"license":"MIT","_id":"@claudiu-ceia/pii-mask@0.1.1","maintainers":[{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"}],"homepage":"https://github.com/ClaudiuCeia/pii-mask#readme","bugs":{"url":"https://github.com/ClaudiuCeia/pii-mask/issues"},"dist":{"shasum":"bba7fbb3d3275a3c00d7fb3e535464ac1e3f5886","tarball":"https://registry.npmjs.org/@claudiu-ceia/pii-mask/-/pii-mask-0.1.1.tgz","fileCount":12,"integrity":"sha512-J4L37gT2b2E2IMIJGzgQCgWQuL6QkGScvPL3pufEJyJZMb+qOIutXsf+64vVK9FRkAcM/nmN8GODi3F0AnHCog==","signatures":[{"sig":"MEUCIQC5KRwUnrDRwbGyhk6rnzjgc6a8y0YdxR2EvS7+IqNERQIgA/KH2Dmddq90fx9KrOT8AGnmUv0D8n24cRhLfXEM88E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claudiu-ceia%2fpii-mask@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73918},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.3.0","node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./pino":{"types":"./dist/pino.d.ts","import":"./dist/pino.js"},"./winston":{"types":"./dist/winston.d.ts","import":"./dist/winston.js"}},"gitHead":"8cab37724a10dbe8764708cb20b67bc43688c729","scripts":{"knip":"knip","lint":"oxlint . --deny-warnings","test":"bun test","bench":"bun run build && bun run scripts/benchmark.ts --module dist/index.js","build":"bun run scripts/build.ts","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run knip","format":"oxfmt --write .","typecheck":"tsc --noEmit","bench:save":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/baseline.json","bench:check":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/current.json && bun run scripts/compare-benchmarks.ts .benchmarks/baseline.json .benchmarks/current.json","format:check":"oxfmt --check .","bench:compare":"bun run scripts/compare-benchmarks.ts","package:check":"bun run build && publint && node scripts/package-smoke.mjs","test:coverage":"bun test --coverage","prepublishOnly":"bun run check && bun run package:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5421d58-0ff6-4686-9bc2-622a62fff747"}},"repository":{"url":"git+https://github.com/ClaudiuCeia/pii-mask.git","type":"git"},"_npmVersion":"12.0.1","description":"Deterministic PII masking and redaction for TypeScript applications and logs.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@claudiu-ceia/ts-duckling":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.29.0","pino":"^10.3.1","oxfmt":"^0.60.0","oxlint":"^1.75.0","publint":"^0.3.22","winston":"^3.19.0","@types/bun":"^1.3.14","typescript":"^7.0.2"},"peerDependencies":{"pino":">=9 <11","winston":">=3 <4"},"peerDependenciesMeta":{"pino":{"optional":true},"winston":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pii-mask_0.1.1_1784981302956_0.9734769503782719","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@claudiu-ceia/pii-mask","version":"0.1.3","keywords":["masking","pii","pino","redaction","typescript","winston"],"author":{"name":"Claudiu Ceia"},"license":"MIT","_id":"@claudiu-ceia/pii-mask@0.1.3","maintainers":[{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"}],"homepage":"https://github.com/ClaudiuCeia/pii-mask#readme","bugs":{"url":"https://github.com/ClaudiuCeia/pii-mask/issues"},"dist":{"shasum":"f5dded25f6e1e4707ef5fdb77a21ffa457fe9d2b","tarball":"https://registry.npmjs.org/@claudiu-ceia/pii-mask/-/pii-mask-0.1.3.tgz","fileCount":12,"integrity":"sha512-SvCa3rmVDA/5VP/C2/AIaYBdNJuOlQPV4/Wi1l3NbMqphhwcpKIVRdCwkGh9AY1zu6w7mtYTBrY56W2qw5Bl1g==","signatures":[{"sig":"MEUCIQCoUvpGUYP2Qugb6APH3JVKGHChqSnLaJd0Rg8AKp7fqwIgPWFhgEAjaevfELAP1QfgluTatheFmAOkLGgM7EnO2EE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claudiu-ceia%2fpii-mask@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78583},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.3.0","node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./pino":{"types":"./dist/pino.d.ts","import":"./dist/pino.js"},"./winston":{"types":"./dist/winston.d.ts","import":"./dist/winston.js"}},"gitHead":"88fd1bde6fad7b2f6824ce625ae570300ad1e992","scripts":{"knip":"knip","lint":"oxlint . --deny-warnings","test":"bun test","bench":"bun run build && bun run scripts/benchmark.ts --module dist/index.js","build":"bun run scripts/build.ts","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run knip","format":"oxfmt --write .","typecheck":"tsc --noEmit","bench:save":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/baseline.json","bench:check":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/current.json && bun run scripts/compare-benchmarks.ts .benchmarks/baseline.json .benchmarks/current.json","format:check":"oxfmt --check .","bench:compare":"bun run scripts/compare-benchmarks.ts","package:check":"bun run build && publint && node scripts/package-smoke.mjs","test:coverage":"bun test --coverage","prepublishOnly":"bun run check && bun run package:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5421d58-0ff6-4686-9bc2-622a62fff747"}},"repository":{"url":"git+https://github.com/ClaudiuCeia/pii-mask.git","type":"git"},"_npmVersion":"12.0.2","description":"Deterministic PII masking and redaction for TypeScript applications and logs.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@claudiu-ceia/ts-duckling":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.33.0","pino":"^10.3.1","oxfmt":"^0.65.0","oxlint":"^1.80.0","publint":"^0.3.24","winston":"^3.19.0","@types/bun":"^1.4.0","typescript":"^7.0.2"},"peerDependencies":{"pino":">=9 <11","winston":">=3 <4"},"peerDependenciesMeta":{"pino":{"optional":true},"winston":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pii-mask_0.1.3_1787962986731_0.6957800452458456","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@claudiu-ceia/pii-mask","version":"0.1.4","keywords":["masking","pii","pino","redaction","typescript","winston"],"author":{"name":"Claudiu Ceia"},"license":"MIT","_id":"@claudiu-ceia/pii-mask@0.1.4","maintainers":[{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"}],"homepage":"https://github.com/ClaudiuCeia/pii-mask#readme","bugs":{"url":"https://github.com/ClaudiuCeia/pii-mask/issues"},"dist":{"shasum":"7be1c6e3d3d2fb272fcced3f78f1c92164db5c3a","tarball":"https://registry.npmjs.org/@claudiu-ceia/pii-mask/-/pii-mask-0.1.4.tgz","fileCount":12,"integrity":"sha512-oshoZ5JbIiMS7OaHiDULVsAHNNZ5Hz0fD+OKzmaZWuM31JFH+Ws0TwCChM8Xnjuf7SgZdeI1UW61ZTQssTXLpg==","signatures":[{"sig":"MEUCIQDne8VXKlsiVGRFmizIEux6IN2lybgJjGmvpSFIIERaRwIgB6bAZgF/ZBGqad72AP2nb3DP4LfkEysk0lL0uK+M7g4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claudiu-ceia%2fpii-mask@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78583},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.3.0","node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./pino":{"types":"./dist/pino.d.ts","import":"./dist/pino.js"},"./winston":{"types":"./dist/winston.d.ts","import":"./dist/winston.js"}},"gitHead":"d4ec59bb7e8a63545d496be0dd32fc0d5253b29f","scripts":{"knip":"knip","lint":"oxlint . --deny-warnings","test":"bun test","bench":"bun run build && bun run scripts/benchmark.ts --module dist/index.js","build":"bun run scripts/build.ts","check":"bun run typecheck && bun run lint && bun run format:check && bun run test && bun run knip","format":"oxfmt --write .","typecheck":"tsc --noEmit","bench:save":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/baseline.json","bench:check":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/current.json && bun run scripts/compare-benchmarks.ts .benchmarks/baseline.json .benchmarks/current.json","format:check":"oxfmt --check .","bench:compare":"bun run scripts/compare-benchmarks.ts","package:check":"bun run build && publint && node scripts/package-smoke.mjs","test:coverage":"bun test --coverage","prepublishOnly":"bun run check && bun run package:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5421d58-0ff6-4686-9bc2-622a62fff747"}},"repository":{"url":"git+https://github.com/ClaudiuCeia/pii-mask.git","type":"git"},"_npmVersion":"12.0.2","description":"Deterministic PII masking and redaction for TypeScript applications and logs.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@claudiu-ceia/ts-duckling":"^0.6.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.33.0","pino":"^10.3.1","oxfmt":"^0.65.0","oxlint":"^1.80.0","publint":"^0.3.24","winston":"^3.19.0","@types/bun":"^1.4.0","typescript":"^7.0.2"},"peerDependencies":{"pino":">=9 <11","winston":">=3 <4"},"peerDependenciesMeta":{"pino":{"optional":true},"winston":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pii-mask_0.1.4_1788206279417_0.37366077432592393","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@claudiu-ceia/pii-mask","version":"0.2.0","keywords":["data-masking","data-redaction","log-redaction","pii","pii-detection","pii-redaction","pino","privacy","sensitive-data","structured-logging","typescript","winston"],"author":{"name":"Claudiu Ceia"},"license":"MIT","_id":"@claudiu-ceia/pii-mask@0.2.0","maintainers":[{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"}],"homepage":"https://github.com/ClaudiuCeia/pii-mask#readme","bugs":{"url":"https://github.com/ClaudiuCeia/pii-mask/issues"},"dist":{"shasum":"ef2ce4a9d73cbabe805dadacb514a36dd9176467","tarball":"https://registry.npmjs.org/@claudiu-ceia/pii-mask/-/pii-mask-0.2.0.tgz","fileCount":12,"integrity":"sha512-yJrd5VAjyC6UuAt6ztsCivD1sBTbHtZ3RKLmBn7WDNdC5l5wRwFp/eoRzswr3PkMGBloN6s9qijmnMlzVOyzAw==","signatures":[{"sig":"MEYCIQCiQnuJHczVH5UlAicGA11Xj+mN8h5uv1XiZtCOxXZfugIhANRvSgoCOY2UNCckhNIQDTD9+xKfU2Y3n82I6Q2KTeiZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claudiu-ceia%2fpii-mask@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":79794},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.3.0","node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./pino":{"types":"./dist/pino.d.ts","import":"./dist/pino.js"},"./winston":{"types":"./dist/winston.d.ts","import":"./dist/winston.js"}},"gitHead":"b51825117148706532bd2830fddd9a691cda81eb","scripts":{"knip":"knip","lint":"oxlint --deny-warnings .","test":"bun test ./test","bench":"bun run build && bun run scripts/benchmark.ts --module dist/index.js","build":"bun run scripts/build.ts","check":"bun run format:check && bun run lint && bun run typecheck && bun run test && bun run knip","format":"oxfmt","prepack":"bun run build","coverage":"bun test --coverage ./test","jsr:smoke":"deno test --allow-env --allow-sys=hostname --no-lock scripts/deno-smoke.ts","typecheck":"tsc --noEmit","bench:save":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/baseline.json","bench:check":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/current.json && bun run scripts/compare-benchmarks.ts .benchmarks/baseline.json .benchmarks/current.json","format:check":"oxfmt --check","package:attw":"attw --pack . --profile esm-only","bench:compare":"bun run scripts/compare-benchmarks.ts","hooks:install":"bun run scripts/hooks.ts install","package:check":"bun run build && publint && bun run package:attw && bun run scripts/package-consumer-smoke.ts","package:smoke":"bun run build && bun run scripts/package-consumer-smoke.ts --runtime-only","prepublishOnly":"bun run scripts/prepublish.ts","hooks:uninstall":"bun run scripts/hooks.ts uninstall"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5421d58-0ff6-4686-9bc2-622a62fff747"}},"repository":{"url":"git+https://github.com/ClaudiuCeia/pii-mask.git","type":"git"},"_npmVersion":"11.19.0","description":"Local PII detection and redaction for TypeScript logs and structured data, with Pino and Winston adapters.","directories":{"test":"test"},"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"@claudiu-ceia/ts-duckling":"0.7.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.4.2","devDependencies":{"knip":"6.34.0","pino":"10.3.1","oxfmt":"0.66.0","mitata":"1.0.34","oxlint":"1.81.0","publint":"0.3.24","winston":"3.19.0","@types/bun":"1.4.1","typescript":"~7.0.0","@arethetypeswrong/cli":"0.18.5"},"peerDependencies":{"pino":">=9 <11","winston":">=3.3 <4"},"peerDependenciesMeta":{"pino":{"optional":true},"winston":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pii-mask_0.2.0_1788719230491_0.03906102743687656","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@claudiu-ceia/pii-mask","version":"0.2.1","keywords":["data-masking","data-redaction","log-redaction","pii","pii-detection","pii-redaction","pino","privacy","sensitive-data","structured-logging","typescript","winston"],"author":{"name":"Claudiu Ceia"},"license":"MIT","_id":"@claudiu-ceia/pii-mask@0.2.1","maintainers":[{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"}],"homepage":"https://github.com/ClaudiuCeia/pii-mask#readme","bugs":{"url":"https://github.com/ClaudiuCeia/pii-mask/issues"},"dist":{"shasum":"6d178db3dbebce4b9b1442e752ea335133b93864","tarball":"https://registry.npmjs.org/@claudiu-ceia/pii-mask/-/pii-mask-0.2.1.tgz","fileCount":12,"integrity":"sha512-MqxjD6eRqx/6oaFepF15SCnzEVGZ0EANKjEV9k8gCjaA3N3ENqAH790wh5w2lhI8zdK2Kpd6ZkCe5Gn1nF8OAw==","signatures":[{"sig":"MEYCIQCYNlihPeOXOqJ1ABxdGt73ima5Q2L1N5OsVIPC9mgkBgIhAKkK4nNiMtO/mjogvILxy8R8xULvSaESOJYlFu5i2m03","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCy/27ImiJ92o6c0V7QSoT6oP2BrdBhl4EYs6c55djT6gIhAOeZ5gj4HYaByM8w42s8V+JiasrqLWRR96jRUvdwWC4d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claudiu-ceia%2fpii-mask@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":122023},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"bun":">=1.3.0","node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./pino":{"types":"./dist/pino.d.ts","import":"./dist/pino.js"},"./winston":{"types":"./dist/winston.d.ts","import":"./dist/winston.js"}},"gitHead":"74e62d50daa216489155a4b7c006f2b20f0e1a60","scripts":{"knip":"knip","lint":"oxlint --deny-warnings .","test":"bun test ./test","bench":"bun run build && bun run scripts/benchmark.ts --module dist/index.js","build":"bun run scripts/build.ts","check":"bun run format:check && bun run lint && bun run typecheck && bun run test && bun run knip","format":"oxfmt","prepack":"bun run build","coverage":"bun test --coverage ./test","jsr:smoke":"deno test --allow-env --allow-sys=hostname --no-lock scripts/deno-smoke.ts","typecheck":"tsc --noEmit","bench:save":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/baseline.json","bench:check":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/current.json && bun run scripts/compare-benchmarks.ts .benchmarks/baseline.json .benchmarks/current.json","format:check":"oxfmt --check","package:attw":"attw --pack . --profile esm-only","bench:compare":"bun run scripts/compare-benchmarks.ts","hooks:install":"bun run scripts/hooks.ts install","package:check":"bun run build && publint && bun run package:attw && bun run scripts/package-consumer-smoke.ts","package:smoke":"bun run build && bun run scripts/package-consumer-smoke.ts --runtime-only","prepublishOnly":"bun run scripts/prepublish.ts","hooks:uninstall":"bun run scripts/hooks.ts uninstall"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5421d58-0ff6-4686-9bc2-622a62fff747"}},"repository":{"url":"git+https://github.com/ClaudiuCeia/pii-mask.git","type":"git"},"_npmVersion":"11.19.1","description":"Local PII detection and redaction for TypeScript logs and structured data, with Pino and Winston adapters.","directories":{"test":"test"},"sideEffects":false,"_nodeVersion":"26.9.0","dependencies":{"@claudiu-ceia/ts-duckling":"0.7.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.4.2","devDependencies":{"knip":"6.37.0","pino":"10.3.1","oxfmt":"0.68.0","mitata":"1.0.34","oxlint":"1.83.0","publint":"0.3.24","winston":"3.19.0","@types/bun":"1.4.2","typescript":"~7.0.0","@arethetypeswrong/cli":"0.18.5"},"peerDependencies":{"pino":">=10 <11","winston":">=3.3 <4"},"peerDependenciesMeta":{"pino":{"optional":true},"winston":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pii-mask_0.2.1_1789856685885_0.3897917705024696","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"_id":"@claudiu-ceia/pii-mask@0.2.2","bugs":{"url":"https://github.com/ClaudiuCeia/pii-mask/issues"},"dist":{"shasum":"034ca6c872760d36c00e76ec5366414ae03a001c","tarball":"https://registry.npmjs.org/@claudiu-ceia/pii-mask/-/pii-mask-0.2.2.tgz","fileCount":12,"integrity":"sha512-32GfCrlPFIueu4RJBXnYTXy3wci8xS/Y4OQXgmuxS2Y0dNeCaKAH45qzwVw/vOweJj1ZLYQrmrVjeYbxJ8RxNg==","signatures":[{"sig":"MEQCIGbWwizOgMyPelYMaLciTz7fD7ACgRKIJuQJIOSAeT9+AiA1ZcKDyWTa1Khw0pMBqZtenjMIAD6xe8xR8Y4NvSZcdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGxtadsCYpZSPxMqwS9j6pYrv9oJ+dGRSDfo4H+eivcFAiEA5rMe2VW+xgEJUVRQeKSZKhRtK0B553+mY73Pcs6sn6A="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@claudiu-ceia%2fpii-mask@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":122023},"main":"./dist/index.js","name":"@claudiu-ceia/pii-mask","type":"module","types":"./dist/index.d.ts","author":{"name":"Claudiu Ceia"},"module":"./dist/index.js","engines":{"bun":">=1.3.0","node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./pino":{"types":"./dist/pino.d.ts","import":"./dist/pino.js"},"./winston":{"types":"./dist/winston.d.ts","import":"./dist/winston.js"}},"gitHead":"db0791673b4e131e70727a848642a701681a4ba2","license":"MIT","scripts":{"knip":"knip","lint":"oxlint --deny-warnings .","test":"bun test ./test","bench":"bun run build && bun run scripts/benchmark.ts --module dist/index.js","build":"bun run scripts/build.ts","check":"bun run format:check && bun run lint && bun run typecheck && bun run test && bun run knip","format":"oxfmt","prepack":"bun run build","coverage":"bun test --coverage ./test","jsr:smoke":"deno test --allow-env --allow-sys=hostname --no-lock scripts/deno-smoke.ts","typecheck":"tsc --noEmit","bench:save":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/baseline.json","bench:check":"bun run build && bun run scripts/benchmark.ts --module dist/index.js --json .benchmarks/current.json && bun run scripts/compare-benchmarks.ts .benchmarks/baseline.json .benchmarks/current.json","format:check":"oxfmt --check","package:attw":"attw --pack . --profile esm-only","bench:compare":"bun run scripts/compare-benchmarks.ts","hooks:install":"bun run scripts/hooks.ts install","package:check":"bun run build && publint && bun run package:attw && bun run scripts/package-consumer-smoke.ts","package:smoke":"bun run build && bun run scripts/package-consumer-smoke.ts --runtime-only","prepublishOnly":"bun run scripts/prepublish.ts","hooks:uninstall":"bun run scripts/hooks.ts uninstall"},"version":"0.2.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c5421d58-0ff6-4686-9bc2-622a62fff747"}},"homepage":"https://github.com/ClaudiuCeia/pii-mask#readme","keywords":["data-masking","data-redaction","log-redaction","pii","pii-detection","pii-redaction","pino","privacy","sensitive-data","structured-logging","typescript","winston"],"repository":{"url":"git+https://github.com/ClaudiuCeia/pii-mask.git","type":"git"},"_npmVersion":"11.19.1","description":"Local PII detection and redaction for TypeScript logs and structured data, with Pino and Winston adapters.","directories":{"test":"test"},"maintainers":[{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"}],"sideEffects":false,"_nodeVersion":"26.9.0","dependencies":{"@claudiu-ceia/ts-duckling":"0.7.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.4.2","devDependencies":{"knip":"6.37.0","pino":"10.3.1","oxfmt":"0.68.0","mitata":"1.0.34","oxlint":"1.83.0","publint":"0.3.24","winston":"3.19.0","@types/bun":"1.4.2","typescript":"~7.0.0","@arethetypeswrong/cli":"0.18.5"},"peerDependencies":{"pino":">=10 <11","winston":">=3.3 <4"},"peerDependenciesMeta":{"pino":{"optional":true},"winston":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pii-mask_0.2.2_1789948753489_0.38526526246477877"}}},"time":{"created":"2026-07-25T11:49:32.188Z","modified":"2026-09-20T23:59:13.862Z","0.1.0":"2026-07-25T11:49:32.434Z","0.1.1":"2026-07-25T12:08:23.083Z","0.1.3":"2026-08-29T00:23:06.868Z","0.1.4":"2026-08-31T19:57:59.545Z","0.2.0":"2026-09-06T18:27:10.626Z","0.2.1":"2026-09-19T22:24:45.956Z","0.2.2":"2026-09-20T23:59:13.568Z"},"bugs":{"url":"https://github.com/ClaudiuCeia/pii-mask/issues"},"author":{"name":"Claudiu Ceia"},"license":"MIT","homepage":"https://github.com/ClaudiuCeia/pii-mask#readme","keywords":["data-masking","data-redaction","log-redaction","pii","pii-detection","pii-redaction","pino","privacy","sensitive-data","structured-logging","typescript","winston"],"repository":{"url":"git+https://github.com/ClaudiuCeia/pii-mask.git","type":"git"},"description":"Local PII detection and redaction for TypeScript logs and structured data, with Pino and Winston adapters.","maintainers":[{"name":"claudiu.ceia","email":"claudiu.ceia@gmail.com"}],"readme":"# @claudiu-ceia/pii-mask\n\nDetect and redact common PII formats in TypeScript backend logs before they leave your process.\n\n[![CI](https://github.com/ClaudiuCeia/pii-mask/actions/workflows/ci.yml/badge.svg)](https://github.com/ClaudiuCeia/pii-mask/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/@claudiu-ceia/pii-mask.svg)](https://www.npmjs.com/package/@claudiu-ceia/pii-mask)\n[![JSR](https://jsr.io/badges/@claudiu-ceia/pii-mask.svg)](https://jsr.io/@claudiu-ceia/pii-mask)\n[![license](https://img.shields.io/npm/l/@claudiu-ceia/pii-mask.svg)](./LICENSE)\n\n`pii-mask` detects 12 common PII formats inside messages and nested values, then returns a redacted or masked copy without mutating the input. Detection runs synchronously in your process, makes no network calls, and integrates with Pino and Winston without patching either logger.\n\n## Quick Start\n\n```sh\nbun add @claudiu-ceia/pii-mask pino\n```\n\n```ts\nimport pino from \"pino\";\nimport { pinoPiiMasking } from \"@claudiu-ceia/pii-mask/pino\";\n\nconst logger = pino(\n  pinoPiiMasking({\n    mode: \"redact\",\n    replacement: \"[PII]\",\n  }),\n);\n\nlogger.info(\n  {\n    user: { email: \"person@example.com\" },\n    card: \"4111 1111 1111 1111\",\n  },\n  \"Request from 192.168.1.20\",\n);\n\n// user.email -> \"[PII]\"\n// card       -> \"[PII]\"\n// message    -> \"Request from [PII]\"\n```\n\nThe same matcher can protect values before they reach any logger or storage boundary:\n\n```ts\nimport { redactValue } from \"@claudiu-ceia/pii-mask\";\n\nconst event = {\n  message: \"Contact person@example.com\",\n  client: { ip: \"192.168.1.20\" },\n};\n\nconst safeEvent = redactValue(event, { replacement: \"[PII]\" });\n\nconsole.log(safeEvent);\n// {\n//   message: \"Contact [PII]\",\n//   client: { ip: \"[PII]\" },\n// }\n\nconsole.log(event.client.ip);\n// \"192.168.1.20\"; the input was not mutated\n```\n\n## Why pii-mask\n\n- Protects free-form messages and nested structured values, not only known object paths.\n- Provides redaction and character masking through one detector set.\n- Preserves cycles and clones supported arrays, plain objects, and `Error` values.\n- Includes a standard Pino hook and a Winston format.\n- Uses configurable PII kinds and a bounded LRU cache.\n- Supports Bun 1.3+, Deno 2.9+, and Node.js 24+ from one ESM package.\n\n## Detected PII\n\n| Kind                   | Examples                        |\n| ---------------------- | ------------------------------- |\n| Identity               | Email, phone, SSN               |\n| Network and device     | IPv4, IPv6, MAC address, UUID   |\n| Payment and banking    | Credit card, IBAN, BIC          |\n| Credentials and tokens | JWT, API key                    |\n| Blockchain             | Common cryptocurrency addresses |\n\nThe corresponding API kinds are `email`, `phone`, `ip`, `ssn`, `credit_card`, `uuid`, `api_key`, `iban`, `mac_address`, `jwt`, `crypto_address`, and `bic`.\n\nDetection is pattern-based and best-effort. See [Security](#security) before using it at a sensitive boundary.\n\n## Installation\n\n```sh\n# Bun\nbun add @claudiu-ceia/pii-mask\n\n# npm\nnpm install @claudiu-ceia/pii-mask\n\n# Deno and JSR-aware tooling\ndeno add jsr:@claudiu-ceia/pii-mask@^0.2.0\n```\n\nInstall `pino` or `winston` as an optional peer when using its adapter. The Pino adapter requires Pino 10 because it protects the final serialized entry with `hooks.streamWrite`. Pino applications running under Deno also need `--allow-sys=hostname`, which Pino uses for its default bindings.\n\nDeno 2.9's default dependency-age policy may defer a release published within the last 24 hours. Current Deno versions can bypass it with `--min-dep-age=0`. On Deno 2.9.0, wait for the policy window or temporarily exclude this package and its JSR dependencies from `minimumDependencyAge`.\n\nThe package is ESM-only. The npm artifact includes JavaScript and type declarations; JSR consumers use the TypeScript source.\n\n## Pino\n\nThe Pino adapter returns a standard `hooks.streamWrite` configuration. It transforms the complete serialized entry after base and child bindings, serializers, mixins, and message prefixes have been applied.\n\n```ts\nimport pino from \"pino\";\nimport { pinoPiiMasking } from \"@claudiu-ceia/pii-mask/pino\";\n\nconst logger = pino({\n  level: \"info\",\n  redact: [\"req.headers.authorization\", \"user.internalId\"],\n  ...pinoPiiMasking({ mode: \"redact\" }),\n});\n```\n\nUse Pino's path-based `redact` option alongside `pii-mask` for fields you always consider sensitive, even when their value does not match a supported PII format. If you already use a `streamWrite` hook, compose the behaviors explicitly because Pino accepts one hook at that position. Invalid JSON from a preceding hook fails closed with the non-retryable `PinoOutputError` code `PII_MASK_INVALID_PINO_OUTPUT`. Pino diagnostics-channel subscribers and metadata-aware destinations observe data before `streamWrite` performs the transformation, so they must be treated as unprotected sinks.\n\n## Winston\n\nThe Winston adapter is a regular format. Put it before finalizing formats such as `json()` and `simple()`.\n\n```ts\nimport winston from \"winston\";\nimport { winstonPiiMasking } from \"@claudiu-ceia/pii-mask/winston\";\n\nconst logger = winston.createLogger({\n  format: winston.format.combine(winstonPiiMasking({ mode: \"redact\" }), winston.format.json()),\n  transports: [new winston.transports.Console()],\n});\n```\n\n## Core API\n\n```ts\nimport {\n  createPiiMasker,\n  findPii,\n  maskText,\n  maskValue,\n  redactText,\n  redactValue,\n} from \"@claudiu-ceia/pii-mask\";\n\nfindPii(\"Email person@example.com\");\n// [{ kind: \"email\", text: \"person@example.com\", start: 6, end: 24, ... }]\n\nredactText(\"Email person@example.com\");\n// \"Email [REDACTED]\"\n\nmaskText(\"Card 4111 1111 1111 1111\", { keepStart: 4, keepEnd: 4 });\n// \"Card 4111***********1111\"\n\nmaskValue({ email: \"person@example.com\" });\nredactValue({ ip: \"192.168.1.20\" });\n\nconst protector = createPiiMasker({\n  mode: \"redact\",\n  replacement: ({ kind }) => `[${kind}]`,\n  kinds: [\"email\", \"ip\", \"jwt\"],\n  cacheSize: 2_048,\n});\n\nprotector.text(\"Email person@example.com\");\nprotector.value({ ip: \"192.168.1.20\" });\n```\n\n`maskValue` and `redactValue` recursively transform string values in arrays, plain objects, and errors. They preserve cycles and return a copy without mutating the input. Dates, buffers, maps, sets, and other class instances are retained as-is.\n\nTheir `ProtectedValue<T>` return type widens transformed string literals and preserves a precise branch for unaugmented tuple items. Because TypeScript is structurally typed, it cannot prove that an array-like value is a real array, that a broad `Function` value is callable, or that an object has a supported runtime prototype. Those inputs therefore expose a union of the possible retained, array, and conservative object projections; validate the runtime shape before using methods that are not shared by every branch. Object projections expose optional readonly non-callable data with recursively protected nested arrays. Augmented arrays retain their element type when it is recoverable, while hidden numeric tuple augmentations fall back to `unknown[]` rather than claiming an incompatible element type.\n\nThe optional cache is local to each protector. Every LRU entry retains the original input string as its key and the transformed string as its value. Set `cacheSize: 0` for short-lived sensitive values or environments where this retention is undesirable.\n\n## Performance\n\nThe benchmark suite uses [Mitata](https://github.com/evanwashere/mitata) and covers direct detection, string transformation, nested values from small to large, and Pino hook overhead. CI compares median time for the candidate and base builds, then fails protected benchmark regressions above 15% with a 1 microsecond absolute floor.\n\n```sh\nbun run bench\n```\n\nDetection cost scales with unique input strings and payload size. Very large one-off payloads are the worst case, so log them selectively. Run the suite in your deployment environment when performance is part of the decision.\n\n## Security\n\nPattern matching reduces accidental PII exposure. It does not prove that data is safe or that a system complies with a privacy standard.\n\n- False negatives and false positives are possible.\n- Object keys are not inspected or transformed.\n- Unknown and domain-specific identifiers require separate rules.\n- Non-string scalar values are not transformed.\n- The optional cache retains original and transformed strings in memory.\n- Logger output can still expose data through serializers, transports, or values added after the adapter runs.\n\nCombine value detection with allowlists, known-path redaction, access controls, retention limits, and tests built from your own data formats. Report vulnerabilities privately through [GitHub security advisories](https://github.com/ClaudiuCeia/pii-mask/security/advisories/new); see the [security policy](https://github.com/ClaudiuCeia/pii-mask/blob/main/SECURITY.md) for details.\n\n## Development\n\nSee the [contribution guide](https://github.com/ClaudiuCeia/pii-mask/blob/main/CONTRIBUTING.md) for setup, validation, and benchmark workflows.\n\n## License\n\n[MIT](./LICENSE) © [Claudiu Ceia](https://github.com/ClaudiuCeia)\n","readmeFilename":"README.md"}