rehydra 0.1.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.
Files changed (155) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +615 -0
  3. package/dist/crypto/index.d.ts +6 -0
  4. package/dist/crypto/index.d.ts.map +1 -0
  5. package/dist/crypto/index.js +6 -0
  6. package/dist/crypto/index.js.map +1 -0
  7. package/dist/crypto/pii-map-crypto.d.ts +114 -0
  8. package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
  9. package/dist/crypto/pii-map-crypto.js +228 -0
  10. package/dist/crypto/pii-map-crypto.js.map +1 -0
  11. package/dist/index.d.ts +180 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +384 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/ner/bio-decoder.d.ts +64 -0
  16. package/dist/ner/bio-decoder.d.ts.map +1 -0
  17. package/dist/ner/bio-decoder.js +216 -0
  18. package/dist/ner/bio-decoder.js.map +1 -0
  19. package/dist/ner/index.d.ts +10 -0
  20. package/dist/ner/index.d.ts.map +1 -0
  21. package/dist/ner/index.js +10 -0
  22. package/dist/ner/index.js.map +1 -0
  23. package/dist/ner/model-manager.d.ts +111 -0
  24. package/dist/ner/model-manager.d.ts.map +1 -0
  25. package/dist/ner/model-manager.js +325 -0
  26. package/dist/ner/model-manager.js.map +1 -0
  27. package/dist/ner/ner-model.d.ts +114 -0
  28. package/dist/ner/ner-model.d.ts.map +1 -0
  29. package/dist/ner/ner-model.js +253 -0
  30. package/dist/ner/ner-model.js.map +1 -0
  31. package/dist/ner/onnx-runtime.d.ts +46 -0
  32. package/dist/ner/onnx-runtime.d.ts.map +1 -0
  33. package/dist/ner/onnx-runtime.js +130 -0
  34. package/dist/ner/onnx-runtime.js.map +1 -0
  35. package/dist/ner/tokenizer.d.ts +118 -0
  36. package/dist/ner/tokenizer.d.ts.map +1 -0
  37. package/dist/ner/tokenizer.js +332 -0
  38. package/dist/ner/tokenizer.js.map +1 -0
  39. package/dist/pipeline/index.d.ts +12 -0
  40. package/dist/pipeline/index.d.ts.map +1 -0
  41. package/dist/pipeline/index.js +12 -0
  42. package/dist/pipeline/index.js.map +1 -0
  43. package/dist/pipeline/prenormalize.d.ts +48 -0
  44. package/dist/pipeline/prenormalize.d.ts.map +1 -0
  45. package/dist/pipeline/prenormalize.js +94 -0
  46. package/dist/pipeline/prenormalize.js.map +1 -0
  47. package/dist/pipeline/resolver.d.ts +56 -0
  48. package/dist/pipeline/resolver.d.ts.map +1 -0
  49. package/dist/pipeline/resolver.js +239 -0
  50. package/dist/pipeline/resolver.js.map +1 -0
  51. package/dist/pipeline/semantic-data-loader.d.ts +165 -0
  52. package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
  53. package/dist/pipeline/semantic-data-loader.js +655 -0
  54. package/dist/pipeline/semantic-data-loader.js.map +1 -0
  55. package/dist/pipeline/semantic-enricher.d.ts +112 -0
  56. package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
  57. package/dist/pipeline/semantic-enricher.js +318 -0
  58. package/dist/pipeline/semantic-enricher.js.map +1 -0
  59. package/dist/pipeline/tagger.d.ts +114 -0
  60. package/dist/pipeline/tagger.d.ts.map +1 -0
  61. package/dist/pipeline/tagger.js +374 -0
  62. package/dist/pipeline/tagger.js.map +1 -0
  63. package/dist/pipeline/title-extractor.d.ts +79 -0
  64. package/dist/pipeline/title-extractor.d.ts.map +1 -0
  65. package/dist/pipeline/title-extractor.js +801 -0
  66. package/dist/pipeline/title-extractor.js.map +1 -0
  67. package/dist/pipeline/validator.d.ts +65 -0
  68. package/dist/pipeline/validator.d.ts.map +1 -0
  69. package/dist/pipeline/validator.js +264 -0
  70. package/dist/pipeline/validator.js.map +1 -0
  71. package/dist/recognizers/base.d.ts +78 -0
  72. package/dist/recognizers/base.d.ts.map +1 -0
  73. package/dist/recognizers/base.js +100 -0
  74. package/dist/recognizers/base.js.map +1 -0
  75. package/dist/recognizers/bic-swift.d.ts +10 -0
  76. package/dist/recognizers/bic-swift.d.ts.map +1 -0
  77. package/dist/recognizers/bic-swift.js +107 -0
  78. package/dist/recognizers/bic-swift.js.map +1 -0
  79. package/dist/recognizers/credit-card.d.ts +32 -0
  80. package/dist/recognizers/credit-card.d.ts.map +1 -0
  81. package/dist/recognizers/credit-card.js +160 -0
  82. package/dist/recognizers/credit-card.js.map +1 -0
  83. package/dist/recognizers/custom-id.d.ts +28 -0
  84. package/dist/recognizers/custom-id.d.ts.map +1 -0
  85. package/dist/recognizers/custom-id.js +116 -0
  86. package/dist/recognizers/custom-id.js.map +1 -0
  87. package/dist/recognizers/email.d.ts +10 -0
  88. package/dist/recognizers/email.d.ts.map +1 -0
  89. package/dist/recognizers/email.js +75 -0
  90. package/dist/recognizers/email.js.map +1 -0
  91. package/dist/recognizers/iban.d.ts +14 -0
  92. package/dist/recognizers/iban.d.ts.map +1 -0
  93. package/dist/recognizers/iban.js +67 -0
  94. package/dist/recognizers/iban.js.map +1 -0
  95. package/dist/recognizers/index.d.ts +20 -0
  96. package/dist/recognizers/index.d.ts.map +1 -0
  97. package/dist/recognizers/index.js +42 -0
  98. package/dist/recognizers/index.js.map +1 -0
  99. package/dist/recognizers/ip-address.d.ts +14 -0
  100. package/dist/recognizers/ip-address.d.ts.map +1 -0
  101. package/dist/recognizers/ip-address.js +183 -0
  102. package/dist/recognizers/ip-address.js.map +1 -0
  103. package/dist/recognizers/phone.d.ts +10 -0
  104. package/dist/recognizers/phone.d.ts.map +1 -0
  105. package/dist/recognizers/phone.js +145 -0
  106. package/dist/recognizers/phone.js.map +1 -0
  107. package/dist/recognizers/registry.d.ts +59 -0
  108. package/dist/recognizers/registry.d.ts.map +1 -0
  109. package/dist/recognizers/registry.js +113 -0
  110. package/dist/recognizers/registry.js.map +1 -0
  111. package/dist/recognizers/url.d.ts +14 -0
  112. package/dist/recognizers/url.d.ts.map +1 -0
  113. package/dist/recognizers/url.js +121 -0
  114. package/dist/recognizers/url.js.map +1 -0
  115. package/dist/types/index.d.ts +197 -0
  116. package/dist/types/index.d.ts.map +1 -0
  117. package/dist/types/index.js +80 -0
  118. package/dist/types/index.js.map +1 -0
  119. package/dist/types/pii-types.d.ts +50 -0
  120. package/dist/types/pii-types.d.ts.map +1 -0
  121. package/dist/types/pii-types.js +114 -0
  122. package/dist/types/pii-types.js.map +1 -0
  123. package/dist/utils/iban-checksum.d.ts +23 -0
  124. package/dist/utils/iban-checksum.d.ts.map +1 -0
  125. package/dist/utils/iban-checksum.js +106 -0
  126. package/dist/utils/iban-checksum.js.map +1 -0
  127. package/dist/utils/index.d.ts +10 -0
  128. package/dist/utils/index.d.ts.map +1 -0
  129. package/dist/utils/index.js +10 -0
  130. package/dist/utils/index.js.map +1 -0
  131. package/dist/utils/luhn.d.ts +17 -0
  132. package/dist/utils/luhn.d.ts.map +1 -0
  133. package/dist/utils/luhn.js +55 -0
  134. package/dist/utils/luhn.js.map +1 -0
  135. package/dist/utils/offsets.d.ts +86 -0
  136. package/dist/utils/offsets.d.ts.map +1 -0
  137. package/dist/utils/offsets.js +124 -0
  138. package/dist/utils/offsets.js.map +1 -0
  139. package/dist/utils/path.d.ts +34 -0
  140. package/dist/utils/path.d.ts.map +1 -0
  141. package/dist/utils/path.js +96 -0
  142. package/dist/utils/path.js.map +1 -0
  143. package/dist/utils/storage-browser.d.ts +51 -0
  144. package/dist/utils/storage-browser.d.ts.map +1 -0
  145. package/dist/utils/storage-browser.js +381 -0
  146. package/dist/utils/storage-browser.js.map +1 -0
  147. package/dist/utils/storage-node.d.ts +43 -0
  148. package/dist/utils/storage-node.d.ts.map +1 -0
  149. package/dist/utils/storage-node.js +93 -0
  150. package/dist/utils/storage-node.js.map +1 -0
  151. package/dist/utils/storage.d.ts +70 -0
  152. package/dist/utils/storage.d.ts.map +1 -0
  153. package/dist/utils/storage.js +69 -0
  154. package/dist/utils/storage.js.map +1 -0
  155. package/package.json +66 -0
@@ -0,0 +1,114 @@
1
+ /**
2
+ * PII Map Encryption
3
+ * AES-256-GCM encryption for the PII mapping
4
+ * Uses Web Crypto API for browser compatibility
5
+ */
6
+ import { EncryptedPIIMap } from "../types/index.js";
7
+ import type { RawPIIMap } from "../pipeline/tagger.js";
8
+ /**
9
+ * Converts a Uint8Array to a Base64 string
10
+ */
11
+ export declare function uint8ArrayToBase64(bytes: Uint8Array): string;
12
+ /**
13
+ * Converts a Base64 string to a Uint8Array
14
+ */
15
+ export declare function base64ToUint8Array(base64: string): Uint8Array;
16
+ /**
17
+ * Encryption configuration
18
+ */
19
+ export interface EncryptionConfig {
20
+ /** IV length in bytes (default: 12 for GCM) */
21
+ ivLength: number;
22
+ /** Auth tag length in bits (default: 128) */
23
+ authTagLength: number;
24
+ }
25
+ /**
26
+ * Default encryption configuration
27
+ */
28
+ export declare const DEFAULT_ENCRYPTION_CONFIG: EncryptionConfig;
29
+ /**
30
+ * Key generation options
31
+ */
32
+ export interface KeyGenOptions {
33
+ /** Key length in bytes (default: 32 for AES-256) */
34
+ length: number;
35
+ }
36
+ /**
37
+ * Generates a random encryption key
38
+ * @returns Promise resolving to Uint8Array containing the key
39
+ */
40
+ export declare function generateKey(options?: Partial<KeyGenOptions>): Uint8Array;
41
+ /**
42
+ * Generates a random salt for key derivation
43
+ * @param length - Salt length in bytes (default: 16)
44
+ * @returns Uint8Array containing the salt
45
+ */
46
+ export declare function generateSalt(length?: number): Uint8Array;
47
+ /**
48
+ * Derives a key from a password using PBKDF2
49
+ * @param password - Password string
50
+ * @param salt - Salt Uint8Array (should be randomly generated and stored)
51
+ * @param iterations - Number of iterations (default: 100000)
52
+ * @returns Promise resolving to Uint8Array containing the derived key
53
+ */
54
+ export declare function deriveKey(password: string, salt: Uint8Array, iterations?: number): Promise<Uint8Array>;
55
+ /**
56
+ * Encrypts a PII map using AES-256-GCM
57
+ * @param piiMap - Raw PII map to encrypt
58
+ * @param key - 32-byte encryption key as Uint8Array
59
+ * @param config - Encryption configuration
60
+ * @returns Promise resolving to encrypted PII map
61
+ */
62
+ export declare function encryptPIIMap(piiMap: RawPIIMap, key: Uint8Array, config?: Partial<EncryptionConfig>): Promise<EncryptedPIIMap>;
63
+ /**
64
+ * Decrypts an encrypted PII map
65
+ * @param encrypted - Encrypted PII map
66
+ * @param key - 32-byte encryption key as Uint8Array
67
+ * @param config - Encryption configuration
68
+ * @returns Promise resolving to decrypted PII map
69
+ */
70
+ export declare function decryptPIIMap(encrypted: EncryptedPIIMap, key: Uint8Array, config?: Partial<EncryptionConfig>): Promise<RawPIIMap>;
71
+ /**
72
+ * Key provider interface for external key management
73
+ */
74
+ export interface KeyProvider {
75
+ /** Gets the current encryption key */
76
+ getKey(): Promise<Uint8Array>;
77
+ /** Rotates to a new key (optional) */
78
+ rotateKey?(): Promise<Uint8Array>;
79
+ }
80
+ /**
81
+ * Simple in-memory key provider (for testing/development)
82
+ * WARNING: Not secure for production use
83
+ */
84
+ export declare class InMemoryKeyProvider implements KeyProvider {
85
+ private key;
86
+ private initialKey?;
87
+ constructor(key?: Uint8Array);
88
+ getKey(): Promise<Uint8Array>;
89
+ rotateKey(): Promise<Uint8Array>;
90
+ }
91
+ /**
92
+ * Configuration-based key provider
93
+ * Accepts the key at construction time (platform-agnostic)
94
+ * Consumer is responsible for reading the key from environment variables or config
95
+ */
96
+ export declare class ConfigKeyProvider implements KeyProvider {
97
+ private key;
98
+ /**
99
+ * Creates a new ConfigKeyProvider
100
+ * @param keyBase64 - Base64-encoded 32-byte encryption key
101
+ */
102
+ constructor(keyBase64: string);
103
+ getKey(): Promise<Uint8Array>;
104
+ }
105
+ /**
106
+ * Validates that a key is suitable for AES-256
107
+ */
108
+ export declare function validateKey(key: Uint8Array): boolean;
109
+ /**
110
+ * Securely compares two Uint8Arrays (constant-time)
111
+ * Prevents timing attacks by always comparing all bytes
112
+ */
113
+ export declare function secureCompare(a: Uint8Array, b: Uint8Array): boolean;
114
+ //# sourceMappingURL=pii-map-crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii-map-crypto.d.ts","sourceRoot":"","sources":["../../src/crypto/pii-map-crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAG7D;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,gBAGvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,UAAU,CAK5E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,MAAW,GAAG,UAAU,CAI5D;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,GAAE,MAAe,GAC1B,OAAO,CAAC,UAAU,CAAC,CA0BrB;AAMD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,UAAU,EACf,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACrC,OAAO,CAAC,eAAe,CAAC,CAwD1B;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,UAAU,EACf,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACrC,OAAO,CAAC,SAAS,CAAC,CAiDpB;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9B,sCAAsC;IACtC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,GAAG,CAA2B;IACtC,OAAO,CAAC,UAAU,CAAC,CAAa;gBAEpB,GAAG,CAAC,EAAE,UAAU;IAI5B,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IAO7B,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;CAIjC;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,GAAG,CAAa;IAExB;;;OAGG;gBACS,SAAS,EAAE,MAAM;IAa7B,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;CAG9B;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CASnE"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * PII Map Encryption
3
+ * AES-256-GCM encryption for the PII mapping
4
+ * Uses Web Crypto API for browser compatibility
5
+ */
6
+ // ============================================================================
7
+ // Base64 Utility Functions
8
+ // ============================================================================
9
+ /**
10
+ * Converts a Uint8Array to a Base64 string
11
+ */
12
+ export function uint8ArrayToBase64(bytes) {
13
+ const binString = Array.from(bytes, (b) => String.fromCodePoint(b)).join("");
14
+ return btoa(binString);
15
+ }
16
+ /**
17
+ * Converts a Base64 string to a Uint8Array
18
+ */
19
+ export function base64ToUint8Array(base64) {
20
+ const binString = atob(base64);
21
+ return Uint8Array.from(binString, (c) => c.codePointAt(0));
22
+ }
23
+ /**
24
+ * Default encryption configuration
25
+ */
26
+ export const DEFAULT_ENCRYPTION_CONFIG = {
27
+ ivLength: 12,
28
+ authTagLength: 128, // Web Crypto uses bits, not bytes
29
+ };
30
+ // ============================================================================
31
+ // Core Crypto Functions
32
+ // ============================================================================
33
+ /**
34
+ * Generates a random encryption key
35
+ * @returns Promise resolving to Uint8Array containing the key
36
+ */
37
+ export function generateKey(options = {}) {
38
+ const length = options.length ?? 32;
39
+ const key = new Uint8Array(length);
40
+ globalThis.crypto.getRandomValues(key);
41
+ return key;
42
+ }
43
+ /**
44
+ * Generates a random salt for key derivation
45
+ * @param length - Salt length in bytes (default: 16)
46
+ * @returns Uint8Array containing the salt
47
+ */
48
+ export function generateSalt(length = 16) {
49
+ const salt = new Uint8Array(length);
50
+ globalThis.crypto.getRandomValues(salt);
51
+ return salt;
52
+ }
53
+ /**
54
+ * Derives a key from a password using PBKDF2
55
+ * @param password - Password string
56
+ * @param salt - Salt Uint8Array (should be randomly generated and stored)
57
+ * @param iterations - Number of iterations (default: 100000)
58
+ * @returns Promise resolving to Uint8Array containing the derived key
59
+ */
60
+ export async function deriveKey(password, salt, iterations = 100000) {
61
+ const encoder = new TextEncoder();
62
+ const passwordBuffer = encoder.encode(password);
63
+ // Import password as a key
64
+ const baseKey = await globalThis.crypto.subtle.importKey("raw", passwordBuffer, "PBKDF2", false, ["deriveBits"]);
65
+ // Derive bits using PBKDF2
66
+ const derivedBits = await globalThis.crypto.subtle.deriveBits({
67
+ name: "PBKDF2",
68
+ salt: salt,
69
+ iterations: iterations,
70
+ hash: "SHA-256",
71
+ }, baseKey, 256 // 32 bytes * 8 bits
72
+ );
73
+ return new Uint8Array(derivedBits);
74
+ }
75
+ // ============================================================================
76
+ // Encrypt / Decrypt Functions
77
+ // ============================================================================
78
+ /**
79
+ * Encrypts a PII map using AES-256-GCM
80
+ * @param piiMap - Raw PII map to encrypt
81
+ * @param key - 32-byte encryption key as Uint8Array
82
+ * @param config - Encryption configuration
83
+ * @returns Promise resolving to encrypted PII map
84
+ */
85
+ export async function encryptPIIMap(piiMap, key, config = {}) {
86
+ const encConfig = { ...DEFAULT_ENCRYPTION_CONFIG, ...config };
87
+ // Validate key length
88
+ if (key.length !== 32) {
89
+ throw new Error(`Invalid key length: expected 32 bytes, got ${key.length}`);
90
+ }
91
+ // Convert map to JSON
92
+ const mapObject = {};
93
+ for (const [k, v] of piiMap) {
94
+ mapObject[k] = v;
95
+ }
96
+ const plaintext = JSON.stringify(mapObject);
97
+ // Generate random IV
98
+ const iv = new Uint8Array(encConfig.ivLength);
99
+ globalThis.crypto.getRandomValues(iv);
100
+ // Import key for AES-GCM
101
+ const cryptoKey = await globalThis.crypto.subtle.importKey("raw", key, { name: "AES-GCM" }, false, ["encrypt"]);
102
+ // Encrypt using AES-GCM
103
+ const encoder = new TextEncoder();
104
+ const plaintextBuffer = encoder.encode(plaintext);
105
+ const encryptedBuffer = await globalThis.crypto.subtle.encrypt({
106
+ name: "AES-GCM",
107
+ iv: iv,
108
+ tagLength: encConfig.authTagLength,
109
+ }, cryptoKey, plaintextBuffer);
110
+ // Web Crypto returns ciphertext + authTag concatenated
111
+ const encryptedArray = new Uint8Array(encryptedBuffer);
112
+ const authTagBytes = encConfig.authTagLength / 8;
113
+ const ciphertext = encryptedArray.slice(0, encryptedArray.length - authTagBytes);
114
+ const authTag = encryptedArray.slice(encryptedArray.length - authTagBytes);
115
+ return {
116
+ ciphertext: uint8ArrayToBase64(ciphertext),
117
+ iv: uint8ArrayToBase64(iv),
118
+ authTag: uint8ArrayToBase64(authTag),
119
+ };
120
+ }
121
+ /**
122
+ * Decrypts an encrypted PII map
123
+ * @param encrypted - Encrypted PII map
124
+ * @param key - 32-byte encryption key as Uint8Array
125
+ * @param config - Encryption configuration
126
+ * @returns Promise resolving to decrypted PII map
127
+ */
128
+ export async function decryptPIIMap(encrypted, key, config = {}) {
129
+ const encConfig = { ...DEFAULT_ENCRYPTION_CONFIG, ...config };
130
+ // Validate key length
131
+ if (key.length !== 32) {
132
+ throw new Error(`Invalid key length: expected 32 bytes, got ${key.length}`);
133
+ }
134
+ // Decode base64
135
+ const ciphertext = base64ToUint8Array(encrypted.ciphertext);
136
+ const iv = base64ToUint8Array(encrypted.iv);
137
+ const authTag = base64ToUint8Array(encrypted.authTag);
138
+ // Web Crypto expects ciphertext + authTag concatenated
139
+ const encryptedData = new Uint8Array(ciphertext.length + authTag.length);
140
+ encryptedData.set(ciphertext, 0);
141
+ encryptedData.set(authTag, ciphertext.length);
142
+ // Import key for AES-GCM
143
+ const cryptoKey = await globalThis.crypto.subtle.importKey("raw", key, { name: "AES-GCM" }, false, ["decrypt"]);
144
+ // Decrypt using AES-GCM
145
+ const decryptedBuffer = await globalThis.crypto.subtle.decrypt({
146
+ name: "AES-GCM",
147
+ iv: iv,
148
+ tagLength: encConfig.authTagLength,
149
+ }, cryptoKey, encryptedData);
150
+ // Parse JSON back to map
151
+ const decoder = new TextDecoder();
152
+ const decryptedText = decoder.decode(decryptedBuffer);
153
+ const mapObject = JSON.parse(decryptedText);
154
+ const piiMap = new Map();
155
+ for (const [k, v] of Object.entries(mapObject)) {
156
+ piiMap.set(k, v);
157
+ }
158
+ return piiMap;
159
+ }
160
+ /**
161
+ * Simple in-memory key provider (for testing/development)
162
+ * WARNING: Not secure for production use
163
+ */
164
+ export class InMemoryKeyProvider {
165
+ key = null;
166
+ initialKey;
167
+ constructor(key) {
168
+ this.initialKey = key;
169
+ }
170
+ getKey() {
171
+ if (this.key === null) {
172
+ this.key = this.initialKey ?? generateKey();
173
+ }
174
+ return Promise.resolve(this.key);
175
+ }
176
+ rotateKey() {
177
+ this.key = generateKey();
178
+ return Promise.resolve(this.key);
179
+ }
180
+ }
181
+ /**
182
+ * Configuration-based key provider
183
+ * Accepts the key at construction time (platform-agnostic)
184
+ * Consumer is responsible for reading the key from environment variables or config
185
+ */
186
+ export class ConfigKeyProvider {
187
+ key;
188
+ /**
189
+ * Creates a new ConfigKeyProvider
190
+ * @param keyBase64 - Base64-encoded 32-byte encryption key
191
+ */
192
+ constructor(keyBase64) {
193
+ if (!keyBase64 || keyBase64.length === 0) {
194
+ throw new Error("Encryption key must be provided");
195
+ }
196
+ this.key = base64ToUint8Array(keyBase64);
197
+ if (this.key.length !== 32) {
198
+ throw new Error(`Invalid key length: expected 32 bytes, got ${this.key.length}`);
199
+ }
200
+ }
201
+ getKey() {
202
+ return Promise.resolve(this.key);
203
+ }
204
+ }
205
+ // ============================================================================
206
+ // Utility Functions
207
+ // ============================================================================
208
+ /**
209
+ * Validates that a key is suitable for AES-256
210
+ */
211
+ export function validateKey(key) {
212
+ return key.length === 32;
213
+ }
214
+ /**
215
+ * Securely compares two Uint8Arrays (constant-time)
216
+ * Prevents timing attacks by always comparing all bytes
217
+ */
218
+ export function secureCompare(a, b) {
219
+ if (a.length !== b.length) {
220
+ return false;
221
+ }
222
+ let result = 0;
223
+ for (let i = 0; i < a.length; i++) {
224
+ result |= a[i] ^ b[i];
225
+ }
226
+ return result === 0;
227
+ }
228
+ //# sourceMappingURL=pii-map-crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii-map-crypto.js","sourceRoot":"","sources":["../../src/crypto/pii-map-crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Rehydra Module
3
+ * Main entry point for on-device PII anonymization
4
+ */
5
+ export * from "./types/index.js";
6
+ export { Recognizer, RegexRecognizer, RecognizerRegistry, createDefaultRegistry, createRegistry, getGlobalRegistry, emailRecognizer, phoneRecognizer, ibanRecognizer, bicSwiftRecognizer, creditCardRecognizer, ipAddressRecognizer, urlRecognizer, createCustomIdRecognizer, createCaseIdRecognizer, createCustomerIdRecognizer, } from "./recognizers/index.js";
7
+ export { NERModel, NERModelStub, createNERModel, createNERModelStub, WordPieceTokenizer, loadVocabFromFile, parseVocab, loadRuntime, detectRuntime, getRuntimeType, type INERModel, type NERModelConfig, type NERPrediction, type NERModelMode, type DownloadProgressCallback, MODEL_REGISTRY, getModelCacheDir, isModelDownloaded, downloadModel, ensureModel, clearModelCache, listDownloadedModels, } from "./ner/index.js";
8
+ export { prenormalize, resolveEntities, tagEntities, validateOutput, generateTag, parseTag, rehydrate, enrichSemantics, inferGender, classifyLocation, getDatabaseStats, hasName, hasLocation, isSemanticDataAvailable, isSemanticDataDownloaded, getSemanticDataCacheDir, getDataDirectory, downloadSemanticData, ensureSemanticData, initializeSemanticData, loadSemanticData, clearSemanticData, clearSemanticDataCache, getSemanticDataInfo, SEMANTIC_DATA_FILES, extractTitle, extractTitlesFromSpans, mergeAdjacentTitleSpans, getTitlesForLanguage, getAllTitles, startsWithTitle, isOnlyTitle, type SemanticDataFileInfo, type EnricherConfig, type GenderResult, type LocationResult, type TitleExtractionResult, } from "./pipeline/index.js";
9
+ export { encryptPIIMap, decryptPIIMap, generateKey, deriveKey, generateSalt, KeyProvider, InMemoryKeyProvider, ConfigKeyProvider, validateKey, secureCompare, uint8ArrayToBase64, base64ToUint8Array, } from "./crypto/index.js";
10
+ export { getStorageProvider, isNode, isBrowser, resetStorageProvider, setStorageProvider, type StorageProvider, } from "./utils/storage.js";
11
+ export { join as pathJoin, dirname as pathDirname, basename as pathBasename, normalize as pathNormalize, extname as pathExtname, isAbsolute as pathIsAbsolute, } from "./utils/path.js";
12
+ import { AnonymizationResult, AnonymizationPolicy, SemanticConfig, PIIType } from "./types/index.js";
13
+ import { RecognizerRegistry } from "./recognizers/index.js";
14
+ import { type INERModel } from "./ner/index.js";
15
+ import { type NERModelMode, type DownloadProgressCallback } from "./ner/model-manager.js";
16
+ import { type KeyProvider } from "./crypto/index.js";
17
+ /**
18
+ * NER configuration options
19
+ */
20
+ export interface NERConfig {
21
+ /**
22
+ * NER model mode:
23
+ * - 'standard': Full-size multilingual model (~1.1 GB)
24
+ * - 'quantized': Smaller quantized model (~280 MB)
25
+ * - 'disabled': No NER, regex-only detection
26
+ * - 'custom': Use custom model paths
27
+ */
28
+ mode: NERModelMode;
29
+ /**
30
+ * Custom model path (required when mode is 'custom')
31
+ */
32
+ modelPath?: string;
33
+ /**
34
+ * Custom vocab path (required when mode is 'custom')
35
+ */
36
+ vocabPath?: string;
37
+ /**
38
+ * Whether to auto-download model if not present
39
+ * @default true
40
+ */
41
+ autoDownload?: boolean;
42
+ /**
43
+ * Callback for download progress
44
+ */
45
+ onDownloadProgress?: DownloadProgressCallback;
46
+ /**
47
+ * Callback for status messages
48
+ */
49
+ onStatus?: (status: string) => void;
50
+ /**
51
+ * Confidence thresholds per PII type (0.0 - 1.0)
52
+ * Overrides default thresholds for specified types
53
+ * @example { PERSON: 0.8, ORG: 0.7 }
54
+ */
55
+ thresholds?: Partial<Record<PIIType, number>>;
56
+ }
57
+ /**
58
+ * Anonymizer configuration
59
+ */
60
+ export interface AnonymizerConfig {
61
+ /** Recognizer registry (uses default if not provided) */
62
+ registry?: RecognizerRegistry;
63
+ /**
64
+ * NER configuration
65
+ * @default { mode: 'disabled' }
66
+ */
67
+ ner?: NERConfig;
68
+ /**
69
+ * Semantic enrichment configuration
70
+ * Enables MT-friendly PII tags with gender/scope attributes
71
+ * @default { enabled: false }
72
+ */
73
+ semantic?: SemanticConfig;
74
+ /** Key provider for encryption (generates random key if not provided) */
75
+ keyProvider?: KeyProvider;
76
+ /** Default policy (uses default if not provided) */
77
+ defaultPolicy?: AnonymizationPolicy;
78
+ /** Model version string */
79
+ modelVersion?: string;
80
+ /** Policy version string */
81
+ policyVersion?: string;
82
+ }
83
+ /**
84
+ * Anonymizer instance
85
+ * Main class for performing PII anonymization
86
+ */
87
+ export declare class Anonymizer {
88
+ private registry;
89
+ private nerModel;
90
+ private nerConfig;
91
+ private semanticConfig;
92
+ private keyProvider;
93
+ private defaultPolicy;
94
+ private modelVersion;
95
+ private policyVersion;
96
+ private initialized;
97
+ private semanticDataReady;
98
+ constructor(config?: AnonymizerConfig);
99
+ /**
100
+ * Initializes the anonymizer
101
+ * Downloads NER model and semantic data if needed and loads them
102
+ */
103
+ initialize(): Promise<void>;
104
+ /**
105
+ * Anonymizes text, replacing PII with placeholder tags
106
+ * @param text - Input text to anonymize
107
+ * @param locale - Optional locale hint (e.g., 'de-DE', 'en-US')
108
+ * @param policy - Optional policy override
109
+ * @returns Anonymization result with anonymized text and encrypted PII map
110
+ */
111
+ anonymize(text: string, locale?: string, policy?: Partial<AnonymizationPolicy>): Promise<AnonymizationResult>;
112
+ /**
113
+ * Disposes of resources
114
+ */
115
+ dispose(): Promise<void>;
116
+ /**
117
+ * Gets the recognizer registry
118
+ */
119
+ getRegistry(): RecognizerRegistry;
120
+ /**
121
+ * Gets the NER model
122
+ */
123
+ getNERModel(): INERModel | null;
124
+ /**
125
+ * Whether the anonymizer is initialized
126
+ */
127
+ get isInitialized(): boolean;
128
+ }
129
+ /**
130
+ * Creates an anonymizer with the specified configuration
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * // Regex-only (no NER)
135
+ * const anonymizer = createAnonymizer();
136
+ *
137
+ * // With NER (auto-downloads model on first use)
138
+ * const anonymizer = createAnonymizer({
139
+ * ner: { mode: 'quantized' }
140
+ * });
141
+ *
142
+ * // With NER and progress callback
143
+ * const anonymizer = createAnonymizer({
144
+ * ner: {
145
+ * mode: 'standard',
146
+ * onStatus: (status) => console.log(status),
147
+ * onDownloadProgress: (p) => console.log(`${p.file}: ${p.percent}%`)
148
+ * }
149
+ * });
150
+ * ```
151
+ */
152
+ export declare function createAnonymizer(config?: AnonymizerConfig): Anonymizer;
153
+ /**
154
+ * Convenience function for one-off anonymization
155
+ * Creates a temporary anonymizer with default settings (regex-only)
156
+ */
157
+ export declare function anonymize(text: string, locale?: string, policy?: Partial<AnonymizationPolicy>): Promise<AnonymizationResult>;
158
+ /**
159
+ * Quick regex-only anonymization (no NER, faster)
160
+ */
161
+ export declare function anonymizeRegexOnly(text: string, policy?: Partial<AnonymizationPolicy>): Promise<AnonymizationResult>;
162
+ /**
163
+ * Full anonymization with NER
164
+ * Auto-downloads the quantized model on first use
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * const result = await anonymizeWithNER(
169
+ * 'Contact John Smith at john@example.com',
170
+ * {
171
+ * mode: 'quantized',
172
+ * onStatus: console.log
173
+ * }
174
+ * );
175
+ * ```
176
+ */
177
+ export declare function anonymizeWithNER(text: string, nerConfig: Omit<NERConfig, "mode"> & {
178
+ mode?: "standard" | "quantized";
179
+ }, policy?: Partial<AnonymizationPolicy>): Promise<AnonymizationResult>;
180
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}