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.
Files changed (105) hide show
  1. package/LICENSE +200 -0
  2. package/README-server.md +14 -14
  3. package/README.md +12 -10
  4. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +6 -0
  5. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -1
  6. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +519 -373
  7. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -1
  8. package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts +12 -0
  9. package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts.map +1 -1
  10. package/dist/browser/cache/IndexedDBLocalCacheStore.js +152 -65
  11. package/dist/browser/cache/IndexedDBLocalCacheStore.js.map +1 -1
  12. package/dist/browser/index.d.ts +1 -1
  13. package/dist/browser/index.d.ts.map +1 -1
  14. package/dist/browser/index.js +2 -1
  15. package/dist/browser/index.js.map +1 -1
  16. package/dist/browser/index.mjs +14 -0
  17. package/dist/core/BaseMindooDB.d.ts +594 -6
  18. package/dist/core/BaseMindooDB.d.ts.map +1 -1
  19. package/dist/core/BaseMindooDB.js +2478 -191
  20. package/dist/core/BaseMindooDB.js.map +1 -1
  21. package/dist/core/BaseMindooTenant.d.ts +65 -1
  22. package/dist/core/BaseMindooTenant.d.ts.map +1 -1
  23. package/dist/core/BaseMindooTenant.js +250 -35
  24. package/dist/core/BaseMindooTenant.js.map +1 -1
  25. package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
  26. package/dist/core/BaseMindooTenantFactory.js +47 -18
  27. package/dist/core/BaseMindooTenantFactory.js.map +1 -1
  28. package/dist/core/DocumentConflictAnalysis.d.ts +22 -0
  29. package/dist/core/DocumentConflictAnalysis.d.ts.map +1 -0
  30. package/dist/core/DocumentConflictAnalysis.js +101 -0
  31. package/dist/core/DocumentConflictAnalysis.js.map +1 -0
  32. package/dist/core/MindooDBServerAdmin.d.ts +26 -1
  33. package/dist/core/MindooDBServerAdmin.d.ts.map +1 -1
  34. package/dist/core/MindooDBServerAdmin.js +19 -3
  35. package/dist/core/MindooDBServerAdmin.js.map +1 -1
  36. package/dist/core/appendonlystores/types.d.ts +9 -0
  37. package/dist/core/appendonlystores/types.d.ts.map +1 -1
  38. package/dist/core/automerge-adapter.d.ts.map +1 -1
  39. package/dist/core/automerge-adapter.js +26 -14
  40. package/dist/core/automerge-adapter.js.map +1 -1
  41. package/dist/core/cache/EncryptedLocalCacheStore.d.ts +51 -1
  42. package/dist/core/cache/EncryptedLocalCacheStore.d.ts.map +1 -1
  43. package/dist/core/cache/EncryptedLocalCacheStore.js +48 -9
  44. package/dist/core/cache/EncryptedLocalCacheStore.js.map +1 -1
  45. package/dist/core/cache/LocalCacheStore.d.ts +34 -0
  46. package/dist/core/cache/LocalCacheStore.d.ts.map +1 -1
  47. package/dist/core/cache/LocalCacheStore.js +16 -0
  48. package/dist/core/cache/LocalCacheStore.js.map +1 -1
  49. package/dist/core/databaseIdValidation.d.ts +13 -0
  50. package/dist/core/databaseIdValidation.d.ts.map +1 -0
  51. package/dist/core/databaseIdValidation.js +38 -0
  52. package/dist/core/databaseIdValidation.js.map +1 -0
  53. package/dist/core/index.d.ts +2 -0
  54. package/dist/core/index.d.ts.map +1 -1
  55. package/dist/core/index.js +2 -0
  56. package/dist/core/index.js.map +1 -1
  57. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
  58. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +5 -1
  59. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
  60. package/dist/core/indexing/virtualviews/VirtualView.d.ts +14 -0
  61. package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -1
  62. package/dist/core/indexing/virtualviews/VirtualView.js +38 -6
  63. package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -1
  64. package/dist/core/indexing/virtualviews/VirtualViewDataChange.d.ts +9 -2
  65. package/dist/core/indexing/virtualviews/VirtualViewDataChange.d.ts.map +1 -1
  66. package/dist/core/indexing/virtualviews/VirtualViewDataChange.js +10 -3
  67. package/dist/core/indexing/virtualviews/VirtualViewDataChange.js.map +1 -1
  68. package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +23 -1
  69. package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -1
  70. package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +17 -1
  71. package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -1
  72. package/dist/core/indexing/virtualviews/types.d.ts +8 -0
  73. package/dist/core/indexing/virtualviews/types.d.ts.map +1 -1
  74. package/dist/core/indexing/virtualviews/types.js.map +1 -1
  75. package/dist/core/keys/KeyBag.d.ts +244 -7
  76. package/dist/core/keys/KeyBag.d.ts.map +1 -1
  77. package/dist/core/keys/KeyBag.js +299 -82
  78. package/dist/core/keys/KeyBag.js.map +1 -1
  79. package/dist/core/tenantIdValidation.d.ts +19 -0
  80. package/dist/core/tenantIdValidation.d.ts.map +1 -0
  81. package/dist/core/tenantIdValidation.js +43 -0
  82. package/dist/core/tenantIdValidation.js.map +1 -0
  83. package/dist/core/types.d.ts +703 -12
  84. package/dist/core/types.d.ts.map +1 -1
  85. package/dist/core/types.js.map +1 -1
  86. package/dist/node/cache/FileSystemLocalCacheStore.d.ts +2 -1
  87. package/dist/node/cache/FileSystemLocalCacheStore.d.ts.map +1 -1
  88. package/dist/node/cache/FileSystemLocalCacheStore.js +4 -0
  89. package/dist/node/cache/FileSystemLocalCacheStore.js.map +1 -1
  90. package/dist/node/server/ServerSync.d.ts.map +1 -1
  91. package/dist/node/server/ServerSync.js +3 -1
  92. package/dist/node/server/ServerSync.js.map +1 -1
  93. package/dist/node/server/TenantManager.d.ts +1 -0
  94. package/dist/node/server/TenantManager.d.ts.map +1 -1
  95. package/dist/node/server/TenantManager.js +11 -3
  96. package/dist/node/server/TenantManager.js.map +1 -1
  97. package/dist/node/server/validation.d.ts +2 -6
  98. package/dist/node/server/validation.d.ts.map +1 -1
  99. package/dist/node/server/validation.js +14 -24
  100. package/dist/node/server/validation.js.map +1 -1
  101. package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts +1 -0
  102. package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts.map +1 -1
  103. package/dist/reactnative/cache/MMKVLocalCacheStore.js +14 -0
  104. package/dist/reactnative/cache/MMKVLocalCacheStore.js.map +1 -1
  105. package/package.json +25 -23
@@ -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
- this.userEncryptionKey = userEncryptionKey;
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
- this.keys.delete((0, KeyContext_1.buildScopedKeyId)(type, tenantId, id));
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
- const clonedUserEncryptionKey = { ...this.userEncryptionKey };
186
- const cloned = new KeyBag(clonedUserEncryptionKey, this.userEncryptionKeyPassword, this.cryptoAdapter, this.logger);
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 user encryption key.
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
- // Derive an AES-GCM key using PBKDF2 with the user encryption key's salt
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
- }, derivedKey, plaintext.buffer);
253
- // Extract ciphertext and tag
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; // 128 bits = 16 bytes
458
+ const tagLength = 16;
256
459
  const ciphertext = encryptedArray.slice(0, encryptedArray.length - tagLength);
257
460
  const tag = encryptedArray.slice(encryptedArray.length - tagLength);
258
- // Combine IV + tag + ciphertext
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 user encryption key.
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
- // Derive the same AES-GCM key (same process as encryption)
284
- const userKeySaltBytes = this.base64ToUint8Array(this.userEncryptionKey.salt);
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
- }, derivedKey, encryptedDataWithTag.buffer);
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"}