pii-vault 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/anonymizer.js +1 -1
- package/dist/anonymizer.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/recognizer.d.ts +7 -0
- package/dist/recognizer.d.ts.map +1 -1
- package/dist/recognizer.js +135 -0
- package/dist/recognizer.js.map +1 -1
- package/dist/vault.d.ts +4 -0
- package/dist/vault.d.ts.map +1 -1
- package/dist/vault.js +29 -7
- package/dist/vault.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,11 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
**Presidio-compatible PII detection, anonymization, and reversible tokenization.**
|
|
4
4
|
|
|
5
|
+
[](https://crates.io/crates/pii-vault)
|
|
6
|
+
[](https://www.npmjs.com/package/pii-vault)
|
|
7
|
+
[](https://pypi.org/project/pii-vault/)
|
|
8
|
+
[](LICENSE-MIT)
|
|
9
|
+
|
|
5
10
|
Multi-language implementations sharing a common specification. Detect 40+ PII entity types, anonymize with multiple strategies (replace, mask, hash, redact), and reversibly tokenize with a persistent vault.
|
|
6
11
|
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Rust
|
|
16
|
+
cargo add pii-vault
|
|
17
|
+
|
|
18
|
+
# TypeScript / JavaScript
|
|
19
|
+
npm install pii-vault
|
|
20
|
+
|
|
21
|
+
# Python
|
|
22
|
+
pip install pii-vault
|
|
23
|
+
|
|
24
|
+
# Go
|
|
25
|
+
go get github.com/Jiansen/pii-vault/go
|
|
26
|
+
```
|
|
27
|
+
|
|
7
28
|
## Features
|
|
8
29
|
|
|
9
30
|
- **29 built-in recognizers** covering 15 countries (US, UK, CN, IN, AU, DE, IT, ES, KR, SG, FI, SE, PL, JP, FR, CA, BR)
|
|
31
|
+
- **Presidio-aligned regex patterns** for core entity types (email, credit card, IP, crypto)
|
|
10
32
|
- **Shared spec**: Recognizer patterns defined as JSON, consumed by all language implementations
|
|
11
33
|
- **Vault**: Deterministic, reversible tokenization with collision handling and context disambiguation
|
|
12
34
|
- **Multiple anonymization strategies**: Replace, Mask, Hash, Redact, Vault
|
package/dist/anonymizer.js
CHANGED
package/dist/anonymizer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anonymizer.js","sourceRoot":"","sources":["../src/anonymizer.ts"],"names":[],"mappings":";;;AAuBA,MAAa,UAAU;IACrB,MAAM,CAAC,SAAS,CACd,IAAY,EACZ,QAA4B,EAC5B,YAAsC,EAAE,EACxC,kBAA4B,EAAE,IAAI,EAAE,SAAS,EAAE,EAC/C,KAAa;QAEb,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC;YAEhE,IAAI,WAAmB,CAAC;YACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,SAAS;oBACZ,WAAW,GAAG,EAAE,CAAC,QAAQ,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;oBAC3D,MAAM;gBACR,KAAK,MAAM;oBACT,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;oBAC7E,MAAM;gBACR,KAAK,MAAM;oBACT,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACjC,MAAM;gBACR,KAAK,QAAQ;oBACX,WAAW,GAAG,EAAE,CAAC;oBACjB,MAAM;gBACR,KAAK,OAAO;oBACV,WAAW,GAAG,KAAK;wBACjB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"anonymizer.js","sourceRoot":"","sources":["../src/anonymizer.ts"],"names":[],"mappings":";;;AAuBA,MAAa,UAAU;IACrB,MAAM,CAAC,SAAS,CACd,IAAY,EACZ,QAA4B,EAC5B,YAAsC,EAAE,EACxC,kBAA4B,EAAE,IAAI,EAAE,SAAS,EAAE,EAC/C,KAAa;QAEb,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC;YAEhE,IAAI,WAAmB,CAAC;YACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,SAAS;oBACZ,WAAW,GAAG,EAAE,CAAC,QAAQ,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;oBAC3D,MAAM;gBACR,KAAK,MAAM;oBACT,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;oBAC7E,MAAM;gBACR,KAAK,MAAM;oBACT,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACjC,MAAM;gBACR,KAAK,QAAQ;oBACX,WAAW,GAAG,EAAE,CAAC;oBACjB,MAAM;gBACR,KAAK,OAAO;oBACV,WAAW,GAAG,KAAK;wBACjB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC;wBAClD,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;oBAClC,MAAM;YACV,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;gBAClC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,QAAQ;gBACR,WAAW;aACZ,CAAC,CAAC;YAEH,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClF,CAAC;QAED,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;CACF;AAnDD,gCAmDC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAgB,EAAE,WAAmB,EAAE,OAAgB;IACrF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/D,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QACtB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { EntityType, RecognizerResult, resultText } from './entity';
|
|
2
|
-
export { Recognizer, RegexRecognizer, RecognizerDef, luhnCheck, cnIdCheck } from './recognizer';
|
|
2
|
+
export { Recognizer, RegexRecognizer, RecognizerDef, luhnCheck, cnIdCheck, ukDrivingLicenceCheck } from './recognizer';
|
|
3
3
|
export { Analyzer, AnalyzerResult } from './analyzer';
|
|
4
4
|
export { Vault, VaultEntry } from './vault';
|
|
5
5
|
export { Anonymizer, Operator, AnonymizedResult, AnonymizedItem } from './anonymizer';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Anonymizer = exports.Vault = exports.Analyzer = exports.cnIdCheck = exports.luhnCheck = exports.RegexRecognizer = exports.resultText = exports.EntityType = void 0;
|
|
3
|
+
exports.Anonymizer = exports.Vault = exports.Analyzer = exports.ukDrivingLicenceCheck = exports.cnIdCheck = exports.luhnCheck = exports.RegexRecognizer = exports.resultText = exports.EntityType = void 0;
|
|
4
4
|
var entity_1 = require("./entity");
|
|
5
5
|
Object.defineProperty(exports, "EntityType", { enumerable: true, get: function () { return entity_1.EntityType; } });
|
|
6
6
|
Object.defineProperty(exports, "resultText", { enumerable: true, get: function () { return entity_1.resultText; } });
|
|
@@ -8,6 +8,7 @@ var recognizer_1 = require("./recognizer");
|
|
|
8
8
|
Object.defineProperty(exports, "RegexRecognizer", { enumerable: true, get: function () { return recognizer_1.RegexRecognizer; } });
|
|
9
9
|
Object.defineProperty(exports, "luhnCheck", { enumerable: true, get: function () { return recognizer_1.luhnCheck; } });
|
|
10
10
|
Object.defineProperty(exports, "cnIdCheck", { enumerable: true, get: function () { return recognizer_1.cnIdCheck; } });
|
|
11
|
+
Object.defineProperty(exports, "ukDrivingLicenceCheck", { enumerable: true, get: function () { return recognizer_1.ukDrivingLicenceCheck; } });
|
|
11
12
|
var analyzer_1 = require("./analyzer");
|
|
12
13
|
Object.defineProperty(exports, "Analyzer", { enumerable: true, get: function () { return analyzer_1.Analyzer; } });
|
|
13
14
|
var vault_1 = require("./vault");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAoE;AAA3D,oGAAA,UAAU,OAAA;AAAoB,oGAAA,UAAU,OAAA;AACjD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAoE;AAA3D,oGAAA,UAAU,OAAA;AAAoB,oGAAA,UAAU,OAAA;AACjD,2CAAuH;AAAlG,6GAAA,eAAe,OAAA;AAAiB,uGAAA,SAAS,OAAA;AAAE,uGAAA,SAAS,OAAA;AAAE,mHAAA,qBAAqB,OAAA;AAChG,uCAAsD;AAA7C,oGAAA,QAAQ,OAAA;AACjB,iCAA4C;AAAnC,8FAAA,KAAK,OAAA;AACd,2CAAsF;AAA7E,wGAAA,UAAU,OAAA"}
|
package/dist/recognizer.d.ts
CHANGED
|
@@ -38,4 +38,11 @@ export declare class RegexRecognizer implements Recognizer {
|
|
|
38
38
|
}
|
|
39
39
|
export declare function luhnCheck(number: string): boolean;
|
|
40
40
|
export declare function cnIdCheck(id: string): boolean;
|
|
41
|
+
export declare function ibanCheck(iban: string): boolean;
|
|
42
|
+
export declare function deTaxIdCheck(id: string): boolean;
|
|
43
|
+
export declare function auAbnCheck(abn: string): boolean;
|
|
44
|
+
export declare function auTfnCheck(tfn: string): boolean;
|
|
45
|
+
export declare function auAcnCheck(acn: string): boolean;
|
|
46
|
+
export declare function auMedicareCheck(medicare: string): boolean;
|
|
47
|
+
export declare function ukDrivingLicenceCheck(licence: string): boolean;
|
|
41
48
|
//# sourceMappingURL=recognizer.d.ts.map
|
package/dist/recognizer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognizer.d.ts","sourceRoot":"","sources":["../src/recognizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE,CAAC;CACnE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACvC;AAED,qBAAa,eAAgB,YAAW,UAAU;IAUpC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAThC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwD;IACjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAET,GAAG,EAAE,aAAa;IAe/C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAK9C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE;IAgCjE,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"recognizer.d.ts","sourceRoot":"","sources":["../src/recognizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE,CAAC;CACnE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACvC;AAED,qBAAa,eAAgB,YAAW,UAAU;IAUpC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAThC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwD;IACjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAET,GAAG,EAAE,aAAa;IAe/C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAK9C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE;IAgCjE,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,QAAQ;CAgBjB;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAejD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAW7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAe/C;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAgBhD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQ/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAM/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOzD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAkB9D"}
|
package/dist/recognizer.js
CHANGED
|
@@ -3,6 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RegexRecognizer = void 0;
|
|
4
4
|
exports.luhnCheck = luhnCheck;
|
|
5
5
|
exports.cnIdCheck = cnIdCheck;
|
|
6
|
+
exports.ibanCheck = ibanCheck;
|
|
7
|
+
exports.deTaxIdCheck = deTaxIdCheck;
|
|
8
|
+
exports.auAbnCheck = auAbnCheck;
|
|
9
|
+
exports.auTfnCheck = auTfnCheck;
|
|
10
|
+
exports.auAcnCheck = auAcnCheck;
|
|
11
|
+
exports.auMedicareCheck = auMedicareCheck;
|
|
12
|
+
exports.ukDrivingLicenceCheck = ukDrivingLicenceCheck;
|
|
6
13
|
const entity_1 = require("./entity");
|
|
7
14
|
class RegexRecognizer {
|
|
8
15
|
constructor(def) {
|
|
@@ -72,6 +79,34 @@ class RegexRecognizer {
|
|
|
72
79
|
if (!cnIdCheck(matched))
|
|
73
80
|
return false;
|
|
74
81
|
break;
|
|
82
|
+
case 'iban':
|
|
83
|
+
if (!ibanCheck(matched))
|
|
84
|
+
return false;
|
|
85
|
+
break;
|
|
86
|
+
case 'de_tax_id':
|
|
87
|
+
if (!deTaxIdCheck(matched))
|
|
88
|
+
return false;
|
|
89
|
+
break;
|
|
90
|
+
case 'au_abn':
|
|
91
|
+
if (!auAbnCheck(matched))
|
|
92
|
+
return false;
|
|
93
|
+
break;
|
|
94
|
+
case 'au_tfn':
|
|
95
|
+
if (!auTfnCheck(matched))
|
|
96
|
+
return false;
|
|
97
|
+
break;
|
|
98
|
+
case 'au_acn':
|
|
99
|
+
if (!auAcnCheck(matched))
|
|
100
|
+
return false;
|
|
101
|
+
break;
|
|
102
|
+
case 'au_medicare':
|
|
103
|
+
if (!auMedicareCheck(matched))
|
|
104
|
+
return false;
|
|
105
|
+
break;
|
|
106
|
+
case 'uk_driving_licence':
|
|
107
|
+
if (!ukDrivingLicenceCheck(matched))
|
|
108
|
+
return false;
|
|
109
|
+
break;
|
|
75
110
|
}
|
|
76
111
|
}
|
|
77
112
|
return true;
|
|
@@ -110,4 +145,104 @@ function cnIdCheck(id) {
|
|
|
110
145
|
}
|
|
111
146
|
return id[17].toUpperCase() === checkChars[sum % 11];
|
|
112
147
|
}
|
|
148
|
+
function ibanCheck(iban) {
|
|
149
|
+
const cleaned = iban.replace(/[\s-]/g, '');
|
|
150
|
+
if (cleaned.length < 5 || cleaned.length > 34)
|
|
151
|
+
return false;
|
|
152
|
+
const rearranged = cleaned.slice(4) + cleaned.slice(0, 4);
|
|
153
|
+
const numeric = rearranged.split('').map(c => {
|
|
154
|
+
const code = c.charCodeAt(0);
|
|
155
|
+
if (code >= 48 && code <= 57)
|
|
156
|
+
return c;
|
|
157
|
+
return String(code - 55);
|
|
158
|
+
}).join('');
|
|
159
|
+
let remainder = 0;
|
|
160
|
+
for (let i = 0; i < numeric.length; i += 7) {
|
|
161
|
+
const chunk = String(remainder) + numeric.slice(i, i + 7);
|
|
162
|
+
remainder = parseInt(chunk, 10) % 97;
|
|
163
|
+
}
|
|
164
|
+
return remainder === 1;
|
|
165
|
+
}
|
|
166
|
+
function deTaxIdCheck(id) {
|
|
167
|
+
const digits = id.replace(/\D/g, '');
|
|
168
|
+
if (digits.length !== 11)
|
|
169
|
+
return false;
|
|
170
|
+
const d = digits.split('').map(Number);
|
|
171
|
+
if (d[0] === 0)
|
|
172
|
+
return false;
|
|
173
|
+
const first10 = new Set(d.slice(0, 10));
|
|
174
|
+
if (first10.size === 1)
|
|
175
|
+
return false;
|
|
176
|
+
let product = 10;
|
|
177
|
+
for (let i = 0; i < 10; i++) {
|
|
178
|
+
let total = (d[i] + product) % 10;
|
|
179
|
+
if (total === 0)
|
|
180
|
+
total = 10;
|
|
181
|
+
product = (total * 2) % 11;
|
|
182
|
+
}
|
|
183
|
+
let check = 11 - product;
|
|
184
|
+
if (check === 10)
|
|
185
|
+
check = 0;
|
|
186
|
+
return check === d[10];
|
|
187
|
+
}
|
|
188
|
+
function auAbnCheck(abn) {
|
|
189
|
+
const digits = abn.replace(/\D/g, '').split('').map(Number);
|
|
190
|
+
if (digits.length !== 11)
|
|
191
|
+
return false;
|
|
192
|
+
const weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
|
|
193
|
+
const d = [...digits];
|
|
194
|
+
d[0] -= 1;
|
|
195
|
+
const sum = d.reduce((acc, v, i) => acc + v * weights[i], 0);
|
|
196
|
+
return sum % 89 === 0;
|
|
197
|
+
}
|
|
198
|
+
function auTfnCheck(tfn) {
|
|
199
|
+
const digits = tfn.replace(/\D/g, '').split('').map(Number);
|
|
200
|
+
if (digits.length !== 9)
|
|
201
|
+
return false;
|
|
202
|
+
const weights = [1, 4, 3, 7, 5, 8, 6, 9, 10];
|
|
203
|
+
const sum = digits.reduce((acc, v, i) => acc + v * weights[i], 0);
|
|
204
|
+
return sum % 11 === 0;
|
|
205
|
+
}
|
|
206
|
+
function auAcnCheck(acn) {
|
|
207
|
+
const digits = acn.replace(/\D/g, '').split('').map(Number);
|
|
208
|
+
if (digits.length !== 9)
|
|
209
|
+
return false;
|
|
210
|
+
const weights = [8, 7, 6, 5, 4, 3, 2, 1];
|
|
211
|
+
const sum = digits.slice(0, 8).reduce((acc, v, i) => acc + v * weights[i], 0);
|
|
212
|
+
const check = (10 - (sum % 10)) % 10;
|
|
213
|
+
return check === digits[8];
|
|
214
|
+
}
|
|
215
|
+
function auMedicareCheck(medicare) {
|
|
216
|
+
const digits = medicare.replace(/\D/g, '').split('').map(Number);
|
|
217
|
+
if (digits.length < 10 || digits.length > 11)
|
|
218
|
+
return false;
|
|
219
|
+
if (digits[0] < 2 || digits[0] > 6)
|
|
220
|
+
return false;
|
|
221
|
+
const weights = [1, 3, 7, 9, 1, 3, 7, 9];
|
|
222
|
+
const sum = digits.slice(0, 8).reduce((acc, v, i) => acc + v * weights[i], 0);
|
|
223
|
+
return sum % 10 === digits[8];
|
|
224
|
+
}
|
|
225
|
+
function ukDrivingLicenceCheck(licence) {
|
|
226
|
+
const text = licence.toUpperCase();
|
|
227
|
+
if (text.length !== 16)
|
|
228
|
+
return false;
|
|
229
|
+
const surname = text.slice(0, 5);
|
|
230
|
+
// All 9s = no valid surname
|
|
231
|
+
if (surname === '99999')
|
|
232
|
+
return false;
|
|
233
|
+
// Surname must be letters followed by optional 9-padding (no 9 before a letter)
|
|
234
|
+
let seenNine = false;
|
|
235
|
+
for (const c of surname) {
|
|
236
|
+
if (c === '9') {
|
|
237
|
+
seenNine = true;
|
|
238
|
+
}
|
|
239
|
+
else if (seenNine) {
|
|
240
|
+
return false; // Letter after 9 = invalid padding
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Must start with at least one letter
|
|
244
|
+
if (surname[0] >= '0' && surname[0] <= '9')
|
|
245
|
+
return false;
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
113
248
|
//# sourceMappingURL=recognizer.js.map
|
package/dist/recognizer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recognizer.js","sourceRoot":"","sources":["../src/recognizer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"recognizer.js","sourceRoot":"","sources":["../src/recognizer.ts"],"names":[],"mappings":"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"}
|
package/dist/vault.d.ts
CHANGED
|
@@ -9,11 +9,15 @@ export interface VaultEntry {
|
|
|
9
9
|
}
|
|
10
10
|
export interface VaultData {
|
|
11
11
|
version: number;
|
|
12
|
+
salt?: string;
|
|
12
13
|
entries: VaultEntry[];
|
|
13
14
|
}
|
|
14
15
|
export declare class Vault {
|
|
15
16
|
private entries;
|
|
16
17
|
private index;
|
|
18
|
+
private salt;
|
|
19
|
+
constructor();
|
|
20
|
+
private static generateSalt;
|
|
17
21
|
static fromJson(json: string): Vault;
|
|
18
22
|
toJson(): string;
|
|
19
23
|
tokenize(category: string, original: string): string;
|
package/dist/vault.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAA6B;
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,IAAI,CAAS;;IAMrB,OAAO,CAAC,MAAM,CAAC,YAAY;IAc3B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAYpC,MAAM,IAAI,MAAM;IAKhB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIpD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAuCxE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAShC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIlD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,MAAM,CAAC,WAAW;CAU3B"}
|
package/dist/vault.js
CHANGED
|
@@ -5,16 +5,34 @@ class Vault {
|
|
|
5
5
|
constructor() {
|
|
6
6
|
this.entries = [];
|
|
7
7
|
this.index = new Map();
|
|
8
|
+
this.salt = Vault.generateSalt();
|
|
9
|
+
}
|
|
10
|
+
static generateSalt() {
|
|
11
|
+
if (typeof globalThis.crypto !== 'undefined' && globalThis.crypto.getRandomValues) {
|
|
12
|
+
const bytes = new Uint8Array(16);
|
|
13
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
14
|
+
return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
|
|
15
|
+
}
|
|
16
|
+
// Fallback for environments without Web Crypto
|
|
17
|
+
let s = '';
|
|
18
|
+
for (let i = 0; i < 32; i++) {
|
|
19
|
+
s += Math.floor(Math.random() * 16).toString(16);
|
|
20
|
+
}
|
|
21
|
+
return s;
|
|
8
22
|
}
|
|
9
23
|
static fromJson(json) {
|
|
10
24
|
const data = JSON.parse(json);
|
|
11
25
|
const vault = new Vault();
|
|
12
26
|
vault.entries = data.entries;
|
|
27
|
+
if (data.version >= 2 && data.salt) {
|
|
28
|
+
vault.salt = data.salt;
|
|
29
|
+
}
|
|
30
|
+
// v1 vaults: keep generated salt; old entries retain their original tokens
|
|
13
31
|
vault.rebuildIndex();
|
|
14
32
|
return vault;
|
|
15
33
|
}
|
|
16
34
|
toJson() {
|
|
17
|
-
const data = { version:
|
|
35
|
+
const data = { version: 2, salt: this.salt, entries: this.entries };
|
|
18
36
|
return JSON.stringify(data, null, 2);
|
|
19
37
|
}
|
|
20
38
|
tokenize(category, original) {
|
|
@@ -30,12 +48,14 @@ class Vault {
|
|
|
30
48
|
entry.useCount += 1;
|
|
31
49
|
return entry.token;
|
|
32
50
|
}
|
|
33
|
-
const hashInput = context
|
|
51
|
+
const hashInput = context
|
|
52
|
+
? `${this.salt}:${category}:${original}:${context}`
|
|
53
|
+
: `${this.salt}:${category}:${original}`;
|
|
34
54
|
let token = Vault.stableToken(category, hashInput);
|
|
35
55
|
let attempt = 0;
|
|
36
56
|
while (this.entries.some(e => e.token === token && (e.original !== original || e.context !== context))) {
|
|
37
57
|
attempt++;
|
|
38
|
-
token = Vault.stableToken(category, `${category}:${original}:${context}:${attempt}`);
|
|
58
|
+
token = Vault.stableToken(category, `${this.salt}:${category}:${original}:${context}:${attempt}`);
|
|
39
59
|
}
|
|
40
60
|
const entry = {
|
|
41
61
|
token,
|
|
@@ -73,12 +93,14 @@ class Vault {
|
|
|
73
93
|
}
|
|
74
94
|
}
|
|
75
95
|
static stableToken(category, input) {
|
|
76
|
-
|
|
96
|
+
// FNV-1a 32-bit hash for better distribution
|
|
97
|
+
let hash = 0x811c9dc5;
|
|
77
98
|
for (let i = 0; i < input.length; i++) {
|
|
78
|
-
hash
|
|
99
|
+
hash ^= input.charCodeAt(i);
|
|
100
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
79
101
|
}
|
|
80
|
-
const
|
|
81
|
-
return `[${category.toUpperCase()}:${
|
|
102
|
+
const hex = hash.toString(16).padStart(8, '0');
|
|
103
|
+
return `[${category.toUpperCase()}:${hex}]`;
|
|
82
104
|
}
|
|
83
105
|
}
|
|
84
106
|
exports.Vault = Vault;
|
package/dist/vault.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"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"}
|