mindoodb 0.0.19 → 0.0.21
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/LICENSE +200 -0
- package/README-server.md +14 -14
- package/README.md +12 -10
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +6 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +519 -373
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -1
- package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts +12 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts.map +1 -1
- package/dist/browser/cache/IndexedDBLocalCacheStore.js +152 -65
- package/dist/browser/cache/IndexedDBLocalCacheStore.js.map +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +2 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +14 -0
- package/dist/core/BaseMindooDB.d.ts +594 -6
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +2478 -191
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/BaseMindooTenant.d.ts +65 -1
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +250 -35
- package/dist/core/BaseMindooTenant.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +47 -18
- package/dist/core/BaseMindooTenantFactory.js.map +1 -1
- package/dist/core/DocumentConflictAnalysis.d.ts +22 -0
- package/dist/core/DocumentConflictAnalysis.d.ts.map +1 -0
- package/dist/core/DocumentConflictAnalysis.js +101 -0
- package/dist/core/DocumentConflictAnalysis.js.map +1 -0
- package/dist/core/MindooDBServerAdmin.d.ts +26 -1
- package/dist/core/MindooDBServerAdmin.d.ts.map +1 -1
- package/dist/core/MindooDBServerAdmin.js +19 -3
- package/dist/core/MindooDBServerAdmin.js.map +1 -1
- package/dist/core/appendonlystores/types.d.ts +9 -0
- package/dist/core/appendonlystores/types.d.ts.map +1 -1
- package/dist/core/automerge-adapter.d.ts.map +1 -1
- package/dist/core/automerge-adapter.js +26 -14
- package/dist/core/automerge-adapter.js.map +1 -1
- package/dist/core/cache/EncryptedLocalCacheStore.d.ts +51 -1
- package/dist/core/cache/EncryptedLocalCacheStore.d.ts.map +1 -1
- package/dist/core/cache/EncryptedLocalCacheStore.js +48 -9
- package/dist/core/cache/EncryptedLocalCacheStore.js.map +1 -1
- package/dist/core/cache/LocalCacheStore.d.ts +34 -0
- package/dist/core/cache/LocalCacheStore.d.ts.map +1 -1
- package/dist/core/cache/LocalCacheStore.js +16 -0
- package/dist/core/cache/LocalCacheStore.js.map +1 -1
- package/dist/core/databaseIdValidation.d.ts +13 -0
- package/dist/core/databaseIdValidation.d.ts.map +1 -0
- package/dist/core/databaseIdValidation.js +38 -0
- package/dist/core/databaseIdValidation.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +5 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.d.ts +14 -0
- package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.js +38 -6
- package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewDataChange.d.ts +9 -2
- package/dist/core/indexing/virtualviews/VirtualViewDataChange.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewDataChange.js +10 -3
- package/dist/core/indexing/virtualviews/VirtualViewDataChange.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +23 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +17 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -1
- package/dist/core/indexing/virtualviews/types.d.ts +8 -0
- package/dist/core/indexing/virtualviews/types.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/types.js.map +1 -1
- package/dist/core/keys/KeyBag.d.ts +244 -7
- package/dist/core/keys/KeyBag.d.ts.map +1 -1
- package/dist/core/keys/KeyBag.js +299 -82
- package/dist/core/keys/KeyBag.js.map +1 -1
- package/dist/core/tenantIdValidation.d.ts +19 -0
- package/dist/core/tenantIdValidation.d.ts.map +1 -0
- package/dist/core/tenantIdValidation.js +43 -0
- package/dist/core/tenantIdValidation.js.map +1 -0
- package/dist/core/types.d.ts +703 -12
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/node/cache/FileSystemLocalCacheStore.d.ts +2 -1
- package/dist/node/cache/FileSystemLocalCacheStore.d.ts.map +1 -1
- package/dist/node/cache/FileSystemLocalCacheStore.js +4 -0
- package/dist/node/cache/FileSystemLocalCacheStore.js.map +1 -1
- package/dist/node/server/ServerSync.d.ts.map +1 -1
- package/dist/node/server/ServerSync.js +3 -1
- package/dist/node/server/ServerSync.js.map +1 -1
- package/dist/node/server/TenantManager.d.ts +1 -0
- package/dist/node/server/TenantManager.d.ts.map +1 -1
- package/dist/node/server/TenantManager.js +11 -3
- package/dist/node/server/TenantManager.js.map +1 -1
- package/dist/node/server/validation.d.ts +2 -6
- package/dist/node/server/validation.d.ts.map +1 -1
- package/dist/node/server/validation.js +14 -24
- package/dist/node/server/validation.js.map +1 -1
- package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts +1 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts.map +1 -1
- package/dist/reactnative/cache/MMKVLocalCacheStore.js +14 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.js.map +1 -1
- package/package.json +25 -23
package/dist/core/keys/KeyBag.js
CHANGED
|
@@ -9,25 +9,193 @@ const logging_1 = require("../logging");
|
|
|
9
9
|
* The KeyBag is used to store encryption keys that the current user has access to
|
|
10
10
|
* in order to decrypt document changes stored in the AppendOnlyStore.
|
|
11
11
|
* Supports key rotation by storing multiple versions per keyId (newest first).
|
|
12
|
+
*
|
|
13
|
+
* Two construction modes are supported:
|
|
14
|
+
* - Legacy: pass `(userEncryptionKey, password, cryptoAdapter, ...)`. Each
|
|
15
|
+
* {@link save} / {@link load} call re-derives the AES-GCM wrapping key from
|
|
16
|
+
* `password` via PBKDF2. Required `password` is held by the instance for
|
|
17
|
+
* its lifetime.
|
|
18
|
+
* - Preferred: pass `({ wrappingKey, cryptoAdapter, ... })`. The caller has
|
|
19
|
+
* already derived the wrapping key (e.g. via {@link deriveWrappingKey})
|
|
20
|
+
* and the bag never sees the password. PBKDF2 runs zero times in this
|
|
21
|
+
* mode, and the bag is safe to persist/restore from storage repeatedly
|
|
22
|
+
* without password-handling overhead.
|
|
12
23
|
*/
|
|
13
24
|
class KeyBag {
|
|
14
|
-
|
|
15
|
-
* Creates a new KeyBag instance.
|
|
16
|
-
*
|
|
17
|
-
* @param userEncryptionKey The encrypted user encryption key
|
|
18
|
-
* @param userEncryptionKeyPassword The password to decrypt the user encryption key
|
|
19
|
-
* @param cryptoAdapter The crypto adapter to use for encryption and decryption
|
|
20
|
-
* @param logger Optional logger instance
|
|
21
|
-
*/
|
|
22
|
-
constructor(userEncryptionKey, userEncryptionKeyPassword, cryptoAdapter, logger) {
|
|
25
|
+
constructor(userEncryptionKeyOrOptions, userEncryptionKeyPassword, cryptoAdapter, logger) {
|
|
23
26
|
this.keys = new Map();
|
|
24
|
-
|
|
27
|
+
/**
|
|
28
|
+
* In-memory append-only log of doc-key mutations applied to this bag.
|
|
29
|
+
*
|
|
30
|
+
* Used by {@link iterateChangesSince} and {@link getLatestChangeCursor}
|
|
31
|
+
* so consumers (notably {@link BaseMindooTenant}) can reconcile state
|
|
32
|
+
* from a cursor even if they missed live listener notifications.
|
|
33
|
+
*
|
|
34
|
+
* Bound by the number of doc-key mutations per session, which in
|
|
35
|
+
* practice is small (one entry per add/remove/version change).
|
|
36
|
+
*/
|
|
37
|
+
this.keyChanges = [];
|
|
38
|
+
this.nextKeyChangeSeq = 1;
|
|
39
|
+
this.changeListeners = new Set();
|
|
40
|
+
if (KeyBag.isWrappingKeyOptions(userEncryptionKeyOrOptions)) {
|
|
41
|
+
this.userEncryptionKey = null;
|
|
42
|
+
this.userEncryptionKeyPassword = null;
|
|
43
|
+
this.wrappingKey = userEncryptionKeyOrOptions.wrappingKey;
|
|
44
|
+
this.cryptoAdapter = userEncryptionKeyOrOptions.cryptoAdapter;
|
|
45
|
+
this.logger =
|
|
46
|
+
userEncryptionKeyOrOptions.logger
|
|
47
|
+
|| new logging_1.MindooLogger((0, logging_1.getDefaultLogLevel)(), "KeyBag", true);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (userEncryptionKeyPassword === undefined || cryptoAdapter === undefined) {
|
|
51
|
+
throw new Error("KeyBag legacy constructor requires (userEncryptionKey, password, cryptoAdapter, logger?).");
|
|
52
|
+
}
|
|
53
|
+
this.userEncryptionKey = userEncryptionKeyOrOptions;
|
|
25
54
|
this.userEncryptionKeyPassword = userEncryptionKeyPassword;
|
|
55
|
+
this.wrappingKey = null;
|
|
26
56
|
this.cryptoAdapter = cryptoAdapter;
|
|
27
57
|
this.logger =
|
|
28
58
|
logger ||
|
|
29
59
|
new logging_1.MindooLogger((0, logging_1.getDefaultLogLevel)(), "KeyBag", true);
|
|
30
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Derives the AES-GCM wrapping {@link CryptoKey} that {@link KeyBag.save}
|
|
63
|
+
* and {@link KeyBag.load} use to encrypt/decrypt the persisted bag blob.
|
|
64
|
+
*
|
|
65
|
+
* This runs PBKDF2 once with the same parameters the legacy constructor
|
|
66
|
+
* uses internally (combined salt = `userEncryptionKey.salt` +
|
|
67
|
+
* `"key-bag-encryption"`, iterations from
|
|
68
|
+
* {@link resolvePbkdf2Iterations}), so a key derived here is fully
|
|
69
|
+
* interchangeable with the password-derived key for both new and existing
|
|
70
|
+
* persisted bags.
|
|
71
|
+
*
|
|
72
|
+
* Callers that want to eliminate plaintext-password retention should
|
|
73
|
+
* derive the wrapping key once at login and pass it to the
|
|
74
|
+
* {@link KeyBagWrappingKeyOptions} constructor overload.
|
|
75
|
+
*
|
|
76
|
+
* @param userEncryptionKey The user's encrypted encryption key (provides
|
|
77
|
+
* the salt). Only `userEncryptionKey.salt` is read; the encrypted
|
|
78
|
+
* bytes are not touched.
|
|
79
|
+
* @param password The user's password.
|
|
80
|
+
* @param cryptoAdapter Crypto adapter to use for the derivation.
|
|
81
|
+
* @param options.extractable Whether the returned key should be
|
|
82
|
+
* extractable. Defaults to `false` so the raw bytes never appear in
|
|
83
|
+
* the JS heap.
|
|
84
|
+
*/
|
|
85
|
+
static async deriveWrappingKey(userEncryptionKey, password, cryptoAdapter, options) {
|
|
86
|
+
const subtle = cryptoAdapter.getSubtle();
|
|
87
|
+
const userKeySaltBytes = KeyBag.staticBase64ToUint8Array(userEncryptionKey.salt);
|
|
88
|
+
const saltStringBytes = new TextEncoder().encode("key-bag-encryption");
|
|
89
|
+
const combinedSalt = new Uint8Array(userKeySaltBytes.length + saltStringBytes.length);
|
|
90
|
+
combinedSalt.set(userKeySaltBytes);
|
|
91
|
+
combinedSalt.set(saltStringBytes, userKeySaltBytes.length);
|
|
92
|
+
const passwordInput = new TextEncoder().encode(`${password}:key-bag-encryption`);
|
|
93
|
+
const passwordKey = await subtle.importKey("raw", passwordInput, "PBKDF2", false, ["deriveKey"]);
|
|
94
|
+
const iterations = (0, pbkdf2Iterations_1.resolvePbkdf2Iterations)(pbkdf2Iterations_1.DEFAULT_PBKDF2_ITERATIONS);
|
|
95
|
+
return subtle.deriveKey({
|
|
96
|
+
name: "PBKDF2",
|
|
97
|
+
salt: combinedSalt,
|
|
98
|
+
iterations,
|
|
99
|
+
hash: "SHA-256",
|
|
100
|
+
}, passwordKey, {
|
|
101
|
+
name: "AES-GCM",
|
|
102
|
+
length: 256,
|
|
103
|
+
}, options?.extractable ?? false, ["encrypt", "decrypt"]);
|
|
104
|
+
}
|
|
105
|
+
static isWrappingKeyOptions(value) {
|
|
106
|
+
return typeof value === "object"
|
|
107
|
+
&& value !== null
|
|
108
|
+
&& "wrappingKey" in value
|
|
109
|
+
&& "cryptoAdapter" in value;
|
|
110
|
+
}
|
|
111
|
+
static staticBase64ToUint8Array(base64) {
|
|
112
|
+
const binary = atob(base64);
|
|
113
|
+
const bytes = new Uint8Array(binary.length);
|
|
114
|
+
for (let i = 0; i < binary.length; i++) {
|
|
115
|
+
bytes[i] = binary.charCodeAt(i);
|
|
116
|
+
}
|
|
117
|
+
return bytes;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Subscribe to live doc-key mutation events.
|
|
121
|
+
*
|
|
122
|
+
* Listeners receive a shallow copy of the same {@link KeyBagChangeEvent}
|
|
123
|
+
* record that gets appended to the internal feed, so reads via
|
|
124
|
+
* {@link iterateChangesSince} stay consistent with what listeners see.
|
|
125
|
+
* Listener exceptions are caught and logged so they cannot break the
|
|
126
|
+
* mutating call site.
|
|
127
|
+
*
|
|
128
|
+
* Live notifications are a convenience: callers that need to be robust
|
|
129
|
+
* against missed events should also persist a cursor and replay through
|
|
130
|
+
* {@link iterateChangesSince}.
|
|
131
|
+
*
|
|
132
|
+
* @returns A disposer that removes the listener.
|
|
133
|
+
*/
|
|
134
|
+
onChanges(listener) {
|
|
135
|
+
this.changeListeners.add(listener);
|
|
136
|
+
return () => {
|
|
137
|
+
this.changeListeners.delete(listener);
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Snapshot the current head of the local changes feed.
|
|
142
|
+
*
|
|
143
|
+
* Returns `null` when no doc-key mutations have ever been observed by
|
|
144
|
+
* this bag instance. Useful as a starting cursor when a consumer wants
|
|
145
|
+
* to react only to *future* changes.
|
|
146
|
+
*/
|
|
147
|
+
getLatestChangeCursor() {
|
|
148
|
+
const latest = this.keyChanges[this.keyChanges.length - 1];
|
|
149
|
+
return latest ? { changeSeq: latest.changeSeq } : null;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Iterate doc-key mutation events strictly after the given cursor.
|
|
153
|
+
*
|
|
154
|
+
* Pass `null` to consume all events since the bag was created. Yielded
|
|
155
|
+
* events are independent copies, so consumers may mutate them freely
|
|
156
|
+
* without affecting other listeners. Events are emitted in the order
|
|
157
|
+
* the underlying mutations occurred, which is also the order of their
|
|
158
|
+
* `changeSeq` values.
|
|
159
|
+
*/
|
|
160
|
+
async *iterateChangesSince(cursor) {
|
|
161
|
+
const startSeq = cursor?.changeSeq ?? 0;
|
|
162
|
+
for (const event of this.keyChanges) {
|
|
163
|
+
if (event.changeSeq > startSeq) {
|
|
164
|
+
yield { ...event };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Append a doc-key mutation event to the local feed and notify
|
|
170
|
+
* subscribed listeners.
|
|
171
|
+
*
|
|
172
|
+
* Called from every mutation site after the underlying `keys` map has
|
|
173
|
+
* been updated. Never includes raw key bytes in the recorded event so
|
|
174
|
+
* the feed is safe to expose to telemetry or external consumers.
|
|
175
|
+
*/
|
|
176
|
+
recordKeyChange(type, tenantId, keyId, action, versionsRemaining) {
|
|
177
|
+
const event = {
|
|
178
|
+
changeSeq: this.nextKeyChangeSeq++,
|
|
179
|
+
type,
|
|
180
|
+
tenantId,
|
|
181
|
+
keyId,
|
|
182
|
+
action,
|
|
183
|
+
versionsRemaining,
|
|
184
|
+
hasKey: versionsRemaining > 0,
|
|
185
|
+
};
|
|
186
|
+
this.keyChanges.push(event);
|
|
187
|
+
for (const listener of this.changeListeners) {
|
|
188
|
+
try {
|
|
189
|
+
listener({ ...event });
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
// Listener failure must not break the mutation; just log and continue.
|
|
193
|
+
// Pass the error as a separate argument so the logger captures the
|
|
194
|
+
// full (sanitized) stack trace rather than just the toString() form.
|
|
195
|
+
this.logger.warn(`KeyBag change listener failed`, error);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
31
199
|
async get(type, tenantId, id) {
|
|
32
200
|
const scopedKeyId = (0, KeyContext_1.buildScopedKeyId)(type, tenantId, id);
|
|
33
201
|
const keyEntries = this.keys.get(scopedKeyId);
|
|
@@ -61,6 +229,7 @@ class KeyBag {
|
|
|
61
229
|
const keyEntries = this.keys.get(scopedKeyId) || [];
|
|
62
230
|
keyEntries.push({ key, createdAt });
|
|
63
231
|
this.keys.set(scopedKeyId, keyEntries);
|
|
232
|
+
this.recordKeyChange(type, tenantId, id, "add", keyEntries.length);
|
|
64
233
|
}
|
|
65
234
|
/**
|
|
66
235
|
* Creates a new tenant symmetric key (AES-256) and stores it directly in this KeyBag.
|
|
@@ -86,6 +255,7 @@ class KeyBag {
|
|
|
86
255
|
createdAt: key.createdAt
|
|
87
256
|
});
|
|
88
257
|
this.keys.set(scopedKeyId, keyEntries);
|
|
258
|
+
this.recordKeyChange(type, tenantId, id, "add", keyEntries.length);
|
|
89
259
|
}
|
|
90
260
|
async encryptAndExportKey(type, tenantId, id, password) {
|
|
91
261
|
const scopedKeyId = (0, KeyContext_1.buildScopedKeyId)(type, tenantId, id);
|
|
@@ -131,7 +301,13 @@ class KeyBag {
|
|
|
131
301
|
return encryptedKey;
|
|
132
302
|
}
|
|
133
303
|
async deleteKey(type, tenantId, id) {
|
|
134
|
-
|
|
304
|
+
const scopedKeyId = (0, KeyContext_1.buildScopedKeyId)(type, tenantId, id);
|
|
305
|
+
const existing = this.keys.get(scopedKeyId);
|
|
306
|
+
if (!existing || existing.length === 0) {
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
this.keys.delete(scopedKeyId);
|
|
310
|
+
this.recordKeyChange(type, tenantId, id, "remove", 0);
|
|
135
311
|
}
|
|
136
312
|
async deleteKeyVersion(type, tenantId, id, versionIndex) {
|
|
137
313
|
const scopedKeyId = (0, KeyContext_1.buildScopedKeyId)(type, tenantId, id);
|
|
@@ -147,9 +323,11 @@ class KeyBag {
|
|
|
147
323
|
const remainingEntries = keyEntries.filter((entry) => entry !== target);
|
|
148
324
|
if (remainingEntries.length === 0) {
|
|
149
325
|
this.keys.delete(scopedKeyId);
|
|
326
|
+
this.recordKeyChange(type, tenantId, id, "remove", 0);
|
|
150
327
|
return;
|
|
151
328
|
}
|
|
152
329
|
this.keys.set(scopedKeyId, remainingEntries);
|
|
330
|
+
this.recordKeyChange(type, tenantId, id, "remove", remainingEntries.length);
|
|
153
331
|
}
|
|
154
332
|
/**
|
|
155
333
|
* Lists all key IDs in the key bag.
|
|
@@ -159,6 +337,39 @@ class KeyBag {
|
|
|
159
337
|
async listKeys() {
|
|
160
338
|
return Array.from(this.keys.keys());
|
|
161
339
|
}
|
|
340
|
+
/**
|
|
341
|
+
* Build a stable fingerprint of the doc-type keys available for a given
|
|
342
|
+
* tenant.
|
|
343
|
+
*
|
|
344
|
+
* The fingerprint changes whenever the *set* of scoped key ids the bag
|
|
345
|
+
* holds for `doc:tenantId:*` gains or loses an entry, but does not
|
|
346
|
+
* depend on key version counts or key material. It is used by
|
|
347
|
+
* {@link BaseMindooDB} to short-circuit visibility reconciliation on
|
|
348
|
+
* warm starts when the bag composition has not changed since the last
|
|
349
|
+
* cache flush, avoiding an otherwise unconditional full metadata scan
|
|
350
|
+
* against the underlying store (potentially several REST round-trips
|
|
351
|
+
* against a remote store).
|
|
352
|
+
*
|
|
353
|
+
* Implementation notes:
|
|
354
|
+
* - Scoped key ids are not secret (only key bytes are), so we use the
|
|
355
|
+
* sorted ids directly rather than hashing them. This keeps the
|
|
356
|
+
* fingerprint debuggable and avoids dragging crypto into a hot
|
|
357
|
+
* startup path.
|
|
358
|
+
* - The leading `v1:` tag is a format version so future iterations can
|
|
359
|
+
* extend the fingerprint without colliding with old persisted
|
|
360
|
+
* values.
|
|
361
|
+
*/
|
|
362
|
+
async getDocKeyFingerprint(tenantId) {
|
|
363
|
+
const prefix = `doc:${tenantId}:`;
|
|
364
|
+
const scopedIds = [];
|
|
365
|
+
for (const scopedKeyId of this.keys.keys()) {
|
|
366
|
+
if (scopedKeyId.startsWith(prefix)) {
|
|
367
|
+
scopedIds.push(scopedKeyId);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
scopedIds.sort();
|
|
371
|
+
return `v1:${scopedIds.join("|")}`;
|
|
372
|
+
}
|
|
162
373
|
/**
|
|
163
374
|
* Lists all stored key versions with metadata, newest first within each scoped key.
|
|
164
375
|
*/
|
|
@@ -180,10 +391,30 @@ class KeyBag {
|
|
|
180
391
|
/**
|
|
181
392
|
* Creates an in-memory clone of this KeyBag.
|
|
182
393
|
* The clone contains deep-copied key material and independent key maps.
|
|
394
|
+
*
|
|
395
|
+
* The clone follows the same construction mode as this instance:
|
|
396
|
+
* - bags built with the wrapping-key constructor are cloned with the
|
|
397
|
+
* same {@link CryptoKey} reference (the underlying key handle is safe
|
|
398
|
+
* to share across instances - it is treated as immutable),
|
|
399
|
+
* - bags built with the legacy password constructor are cloned with the
|
|
400
|
+
* same encrypted user key + plaintext password.
|
|
183
401
|
*/
|
|
184
402
|
clone() {
|
|
185
|
-
|
|
186
|
-
|
|
403
|
+
let cloned;
|
|
404
|
+
if (this.wrappingKey !== null) {
|
|
405
|
+
cloned = new KeyBag({
|
|
406
|
+
wrappingKey: this.wrappingKey,
|
|
407
|
+
cryptoAdapter: this.cryptoAdapter,
|
|
408
|
+
logger: this.logger,
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
if (this.userEncryptionKey === null || this.userEncryptionKeyPassword === null) {
|
|
413
|
+
throw new Error("KeyBag.clone(): legacy bag missing userEncryptionKey/password.");
|
|
414
|
+
}
|
|
415
|
+
const clonedUserEncryptionKey = { ...this.userEncryptionKey };
|
|
416
|
+
cloned = new KeyBag(clonedUserEncryptionKey, this.userEncryptionKeyPassword, this.cryptoAdapter, this.logger);
|
|
417
|
+
}
|
|
187
418
|
cloned.keys = new Map(Array.from(this.keys.entries()).map(([scopedKeyId, entries]) => [
|
|
188
419
|
scopedKeyId,
|
|
189
420
|
entries.map((entry) => ({
|
|
@@ -194,15 +425,14 @@ class KeyBag {
|
|
|
194
425
|
return cloned;
|
|
195
426
|
}
|
|
196
427
|
/**
|
|
197
|
-
* Save the key bag to a binary data blob, encrypted with the
|
|
428
|
+
* Save the key bag to a binary data blob, encrypted with the wrapping key
|
|
429
|
+
* (either the {@link CryptoKey} provided to the constructor or one derived
|
|
430
|
+
* on demand from the legacy password).
|
|
198
431
|
*
|
|
199
432
|
* @return A promise that resolves to the encrypted binary data (Uint8Array)
|
|
200
433
|
*/
|
|
201
434
|
async save() {
|
|
202
435
|
this.logger.debug(`Saving key bag with ${this.keys.size} keys`);
|
|
203
|
-
// Serialize the map to JSON and convert to Uint8Array
|
|
204
|
-
// Convert Uint8Array values to base64 strings for JSON serialization
|
|
205
|
-
// Support multiple keys per keyId with createdAt timestamps
|
|
206
436
|
const mapArray = Array.from(this.keys.entries()).map(([keyId, keyEntries]) => [
|
|
207
437
|
keyId,
|
|
208
438
|
keyEntries.map(entry => ({
|
|
@@ -213,50 +443,22 @@ class KeyBag {
|
|
|
213
443
|
const jsonString = JSON.stringify(mapArray);
|
|
214
444
|
const plaintext = new TextEncoder().encode(jsonString);
|
|
215
445
|
const subtle = this.cryptoAdapter.getSubtle();
|
|
216
|
-
// Bind getRandomValues to maintain 'this' context
|
|
217
446
|
const randomValues = this.cryptoAdapter.getRandomValues.bind(this.cryptoAdapter);
|
|
218
|
-
|
|
219
|
-
// Use the salt from the user encryption key as part of the key derivation
|
|
220
|
-
const userKeySaltBytes = this.base64ToUint8Array(this.userEncryptionKey.salt);
|
|
221
|
-
// Combine with a fixed string to differentiate from other key derivations
|
|
222
|
-
const saltStringBytes = new TextEncoder().encode("key-bag-encryption");
|
|
223
|
-
const combinedSalt = new Uint8Array(userKeySaltBytes.length + saltStringBytes.length);
|
|
224
|
-
combinedSalt.set(userKeySaltBytes);
|
|
225
|
-
combinedSalt.set(saltStringBytes, userKeySaltBytes.length);
|
|
226
|
-
// Use the user's password as input for PBKDF2
|
|
227
|
-
const passwordInput = new TextEncoder().encode(`${this.userEncryptionKeyPassword}:key-bag-encryption`);
|
|
228
|
-
const passwordKey = await subtle.importKey("raw", passwordInput, "PBKDF2", false, ["deriveKey"]);
|
|
229
|
-
const keyBagIterations = (0, pbkdf2Iterations_1.resolvePbkdf2Iterations)(pbkdf2Iterations_1.DEFAULT_PBKDF2_ITERATIONS);
|
|
230
|
-
if (keyBagIterations !== pbkdf2Iterations_1.DEFAULT_PBKDF2_ITERATIONS) {
|
|
231
|
-
this.logger.warn(`Using overridden PBKDF2 iterations for KeyBag.save(): ${keyBagIterations}`);
|
|
232
|
-
}
|
|
233
|
-
// Derive AES-GCM key using PBKDF2
|
|
234
|
-
const derivedKey = await subtle.deriveKey({
|
|
235
|
-
name: "PBKDF2",
|
|
236
|
-
salt: combinedSalt,
|
|
237
|
-
iterations: keyBagIterations,
|
|
238
|
-
hash: "SHA-256",
|
|
239
|
-
}, passwordKey, {
|
|
240
|
-
name: "AES-GCM",
|
|
241
|
-
length: 256,
|
|
242
|
-
}, false, ["encrypt"]);
|
|
243
|
-
// Generate IV for AES-GCM
|
|
447
|
+
const wrappingKey = await this.resolveWrappingKey("encrypt");
|
|
244
448
|
const ivArray = new Uint8Array(12); // 12 bytes for AES-GCM
|
|
245
449
|
randomValues(ivArray);
|
|
246
450
|
const iv = new Uint8Array(ivArray);
|
|
247
|
-
// Encrypt the plaintext
|
|
248
451
|
const encrypted = await subtle.encrypt({
|
|
249
452
|
name: "AES-GCM",
|
|
250
453
|
iv: iv,
|
|
251
454
|
tagLength: 128,
|
|
252
|
-
},
|
|
253
|
-
//
|
|
455
|
+
}, wrappingKey, plaintext.buffer);
|
|
456
|
+
// AES-GCM appends the 16-byte authentication tag at the end of the ciphertext
|
|
254
457
|
const encryptedArray = new Uint8Array(encrypted);
|
|
255
|
-
const tagLength = 16;
|
|
458
|
+
const tagLength = 16;
|
|
256
459
|
const ciphertext = encryptedArray.slice(0, encryptedArray.length - tagLength);
|
|
257
460
|
const tag = encryptedArray.slice(encryptedArray.length - tagLength);
|
|
258
|
-
//
|
|
259
|
-
// Format: IV (12 bytes) + tag (16 bytes) + ciphertext (variable)
|
|
461
|
+
// Combined wire format: IV (12B) + tag (16B) + ciphertext (variable)
|
|
260
462
|
const result = new Uint8Array(12 + 16 + ciphertext.length);
|
|
261
463
|
result.set(iv, 0);
|
|
262
464
|
result.set(tag, 12);
|
|
@@ -265,7 +467,9 @@ class KeyBag {
|
|
|
265
467
|
return result;
|
|
266
468
|
}
|
|
267
469
|
/**
|
|
268
|
-
* Load the key bag from a binary data blob, decrypted with the
|
|
470
|
+
* Load the key bag from a binary data blob, decrypted with the wrapping key
|
|
471
|
+
* (either the {@link CryptoKey} provided to the constructor or one derived
|
|
472
|
+
* on demand from the legacy password).
|
|
269
473
|
*
|
|
270
474
|
* @param encryptedData The encrypted binary data to load (Uint8Array)
|
|
271
475
|
* @return A promise that resolves when the keys are loaded
|
|
@@ -275,51 +479,23 @@ class KeyBag {
|
|
|
275
479
|
if (encryptedData.length < 28) {
|
|
276
480
|
throw new Error("Encrypted data too short (missing IV and tag)");
|
|
277
481
|
}
|
|
278
|
-
// Extract IV, tag, and ciphertext
|
|
279
482
|
const iv = encryptedData.slice(0, 12);
|
|
280
483
|
const tag = encryptedData.slice(12, 28);
|
|
281
484
|
const ciphertext = encryptedData.slice(28);
|
|
282
485
|
const subtle = this.cryptoAdapter.getSubtle();
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
// Combine with the same fixed string as encryption
|
|
286
|
-
const saltStringBytes = new TextEncoder().encode("key-bag-encryption");
|
|
287
|
-
const combinedSalt = new Uint8Array(userKeySaltBytes.length + saltStringBytes.length);
|
|
288
|
-
combinedSalt.set(userKeySaltBytes);
|
|
289
|
-
combinedSalt.set(saltStringBytes, userKeySaltBytes.length);
|
|
290
|
-
// Use the user's password as input for PBKDF2 (same as encryption)
|
|
291
|
-
const passwordInput = new TextEncoder().encode(`${this.userEncryptionKeyPassword}:key-bag-encryption`);
|
|
292
|
-
const passwordKey = await subtle.importKey("raw", passwordInput, "PBKDF2", false, ["deriveKey"]);
|
|
293
|
-
const keyBagIterations = (0, pbkdf2Iterations_1.resolvePbkdf2Iterations)(pbkdf2Iterations_1.DEFAULT_PBKDF2_ITERATIONS);
|
|
294
|
-
if (keyBagIterations !== pbkdf2Iterations_1.DEFAULT_PBKDF2_ITERATIONS) {
|
|
295
|
-
this.logger.warn(`Using overridden PBKDF2 iterations for KeyBag.load(): ${keyBagIterations}`);
|
|
296
|
-
}
|
|
297
|
-
// Derive AES-GCM key using PBKDF2 (same parameters as encryption)
|
|
298
|
-
const derivedKey = await subtle.deriveKey({
|
|
299
|
-
name: "PBKDF2",
|
|
300
|
-
salt: combinedSalt,
|
|
301
|
-
iterations: keyBagIterations,
|
|
302
|
-
hash: "SHA-256",
|
|
303
|
-
}, passwordKey, {
|
|
304
|
-
name: "AES-GCM",
|
|
305
|
-
length: 256,
|
|
306
|
-
}, false, ["decrypt"]);
|
|
307
|
-
// Combine ciphertext and tag
|
|
486
|
+
const wrappingKey = await this.resolveWrappingKey("decrypt");
|
|
487
|
+
// Re-attach the auth tag for SubtleCrypto's combined input format
|
|
308
488
|
const encryptedDataWithTag = new Uint8Array(ciphertext.length + tag.length);
|
|
309
489
|
encryptedDataWithTag.set(ciphertext);
|
|
310
490
|
encryptedDataWithTag.set(tag, ciphertext.length);
|
|
311
|
-
// Decrypt
|
|
312
491
|
const decrypted = await subtle.decrypt({
|
|
313
492
|
name: "AES-GCM",
|
|
314
493
|
iv: iv,
|
|
315
494
|
tagLength: 128,
|
|
316
|
-
},
|
|
317
|
-
// Deserialize JSON to map
|
|
495
|
+
}, wrappingKey, encryptedDataWithTag.buffer);
|
|
318
496
|
const decryptedArray = new Uint8Array(decrypted);
|
|
319
497
|
const jsonString = new TextDecoder().decode(decryptedArray);
|
|
320
498
|
const mapArray = JSON.parse(jsonString);
|
|
321
|
-
// Convert base64 strings back to Uint8Array arrays
|
|
322
|
-
// Support multiple keys per keyId with createdAt timestamps
|
|
323
499
|
const loadedKeys = new Map();
|
|
324
500
|
for (const [scopedKeyId, keyEntries] of mapArray) {
|
|
325
501
|
const normalizedScopedKeyId = this.normalizeLoadedScopedKeyId(scopedKeyId);
|
|
@@ -333,6 +509,47 @@ class KeyBag {
|
|
|
333
509
|
this.keys = loadedKeys;
|
|
334
510
|
this.logger.debug(`Loaded key bag (${encryptedData.length} -> ${this.keys.size} keys)`);
|
|
335
511
|
}
|
|
512
|
+
/**
|
|
513
|
+
* Returns the AES-GCM wrapping key used for {@link save}/{@link load}.
|
|
514
|
+
*
|
|
515
|
+
* - If this bag was constructed with a pre-derived `wrappingKey`, returns
|
|
516
|
+
* that key directly. The caller-supplied key already supports both
|
|
517
|
+
* `encrypt` and `decrypt`, so no per-usage derivation is needed.
|
|
518
|
+
* - Otherwise (legacy password constructor), derives a wrapping key from
|
|
519
|
+
* the stored password + user encryption salt via PBKDF2 with the
|
|
520
|
+
* requested usage. The derived key is intentionally not cached on the
|
|
521
|
+
* instance: the password constructor is the slow path and exists for
|
|
522
|
+
* backward compatibility only.
|
|
523
|
+
*/
|
|
524
|
+
async resolveWrappingKey(usage) {
|
|
525
|
+
if (this.wrappingKey) {
|
|
526
|
+
return this.wrappingKey;
|
|
527
|
+
}
|
|
528
|
+
if (this.userEncryptionKey === null || this.userEncryptionKeyPassword === null) {
|
|
529
|
+
throw new Error("KeyBag is missing both a wrapping key and a password; cannot resolve wrapping key.");
|
|
530
|
+
}
|
|
531
|
+
const subtle = this.cryptoAdapter.getSubtle();
|
|
532
|
+
const userKeySaltBytes = this.base64ToUint8Array(this.userEncryptionKey.salt);
|
|
533
|
+
const saltStringBytes = new TextEncoder().encode("key-bag-encryption");
|
|
534
|
+
const combinedSalt = new Uint8Array(userKeySaltBytes.length + saltStringBytes.length);
|
|
535
|
+
combinedSalt.set(userKeySaltBytes);
|
|
536
|
+
combinedSalt.set(saltStringBytes, userKeySaltBytes.length);
|
|
537
|
+
const passwordInput = new TextEncoder().encode(`${this.userEncryptionKeyPassword}:key-bag-encryption`);
|
|
538
|
+
const passwordKey = await subtle.importKey("raw", passwordInput, "PBKDF2", false, ["deriveKey"]);
|
|
539
|
+
const keyBagIterations = (0, pbkdf2Iterations_1.resolvePbkdf2Iterations)(pbkdf2Iterations_1.DEFAULT_PBKDF2_ITERATIONS);
|
|
540
|
+
if (keyBagIterations !== pbkdf2Iterations_1.DEFAULT_PBKDF2_ITERATIONS) {
|
|
541
|
+
this.logger.warn(`Using overridden PBKDF2 iterations for KeyBag.${usage === "encrypt" ? "save" : "load"}(): ${keyBagIterations}`);
|
|
542
|
+
}
|
|
543
|
+
return subtle.deriveKey({
|
|
544
|
+
name: "PBKDF2",
|
|
545
|
+
salt: combinedSalt,
|
|
546
|
+
iterations: keyBagIterations,
|
|
547
|
+
hash: "SHA-256",
|
|
548
|
+
}, passwordKey, {
|
|
549
|
+
name: "AES-GCM",
|
|
550
|
+
length: 256,
|
|
551
|
+
}, false, [usage]);
|
|
552
|
+
}
|
|
336
553
|
/**
|
|
337
554
|
* Internal method to decrypt a private key using password-based key derivation.
|
|
338
555
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyBag.js","sourceRoot":"","sources":["../../../src/core/keys/KeyBag.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"KeyBag.js","sourceRoot":"","sources":["../../../src/core/keys/KeyBag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tenant ID validation used by local clients and sync servers.
|
|
3
|
+
*
|
|
4
|
+
* Tenant IDs appear in server routes, local storage namespaces, and user-visible
|
|
5
|
+
* join payloads, so keep the accepted character set intentionally narrow and
|
|
6
|
+
* consistent everywhere.
|
|
7
|
+
*/
|
|
8
|
+
export declare const TENANT_ID_REGEX: RegExp;
|
|
9
|
+
export declare const MAX_TENANT_ID_LENGTH = 64;
|
|
10
|
+
export declare const RESERVED_TENANT_NAMES: Set<string>;
|
|
11
|
+
export declare const TENANT_ID_REQUIREMENTS = "Tenant IDs must be 1-64 characters, start with a letter or digit, and contain only lowercase letters, digits, hyphens, and underscores.";
|
|
12
|
+
export declare function getTenantIdValidationError(value: unknown, fieldName?: string, options?: {
|
|
13
|
+
allowReserved?: boolean;
|
|
14
|
+
}): string | null;
|
|
15
|
+
export declare function isValidTenantId(value: unknown): value is string;
|
|
16
|
+
export declare function validateTenantId(value: unknown, fieldName?: string, options?: {
|
|
17
|
+
allowReserved?: boolean;
|
|
18
|
+
}): string;
|
|
19
|
+
//# sourceMappingURL=tenantIdValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenantIdValidation.d.ts","sourceRoot":"","sources":["../../src/core/tenantIdValidation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,QAA0B,CAAC;AACvD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,qBAAqB,aAAoD,CAAC;AACvF,eAAO,MAAM,sBAAsB,4IACwG,CAAC;AAE5I,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,SAAS,SAAa,EACtB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,MAAM,GAAG,IAAI,CAkBf;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE/D;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,SAAS,SAAa,EACtB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,MAAM,CAMR"}
|