pii-vault 0.2.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/dist/anonymizer.js +1 -1
- package/dist/anonymizer.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/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":"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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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"}
|