mindoodb 0.0.19 → 0.0.20
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 +7 -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 +63 -1
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +198 -21
- package/dist/core/BaseMindooTenant.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +18 -7
- 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 +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -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/types.d.ts +678 -5
- 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 -2
- package/dist/node/server/validation.d.ts.map +1 -1
- package/dist/node/server/validation.js +6 -10
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedLocalCacheStore.d.ts","sourceRoot":"","sources":["../../../src/core/cache/EncryptedLocalCacheStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAoC,MAAM,YAAY,CAAC;AAEtE
|
|
1
|
+
{"version":3,"file":"EncryptedLocalCacheStore.d.ts","sourceRoot":"","sources":["../../../src/core/cache/EncryptedLocalCacheStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAoC,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kCAAkC;IACjD,gDAAgD;IAChD,QAAQ,EAAE,SAAS,CAAC;IACpB,yDAAyD;IACzD,aAAa,EAAE,aAAa,CAAC;IAC7B,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,qBAAa,wBAAyB,YAAW,eAAe;IAC9D,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;;;;;;;;;OAYG;gBAED,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,MAAM;IAEjB;;;;OAIG;gBACS,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,kCAAkC;IAwB/E;;;;;;;;;;;;OAYG;WACU,cAAc,CACzB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAClC,OAAO,CAAC,SAAS,CAAC;YA8BP,SAAS;YAqCT,MAAM;IAKpB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;YASlB,OAAO;YAqBP,OAAO;IA6Bf,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAMzD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAUvE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -8,23 +8,56 @@ const logging_1 = require("../logging");
|
|
|
8
8
|
*
|
|
9
9
|
* - Encrypts values on `put()`, decrypts on `get()`
|
|
10
10
|
* - Keys (type + id) are passed through unmodified
|
|
11
|
-
* - Uses AES-256-GCM with a key derived from the user's password via PBKDF2
|
|
11
|
+
* - Uses AES-256-GCM with a key derived from the user's password via PBKDF2,
|
|
12
|
+
* or a caller-supplied {@link CryptoKey}
|
|
12
13
|
* - If decryption fails (password changed, corruption) returns `null`
|
|
13
14
|
*/
|
|
14
15
|
class EncryptedLocalCacheStore {
|
|
15
|
-
|
|
16
|
-
* @param inner The underlying (plaintext) cache store
|
|
17
|
-
* @param userPassword The user's password used to derive the encryption key
|
|
18
|
-
* @param cryptoAdapter Platform-agnostic crypto interface
|
|
19
|
-
* @param logger Optional logger
|
|
20
|
-
*/
|
|
21
|
-
constructor(inner, userPassword, cryptoAdapter, logger) {
|
|
16
|
+
constructor(inner, userPasswordOrOptions, cryptoAdapter, logger) {
|
|
22
17
|
this.derivedKey = null;
|
|
23
18
|
this.keyPromise = null;
|
|
24
19
|
this.inner = inner;
|
|
20
|
+
if (typeof userPasswordOrOptions === "object" && userPasswordOrOptions !== null) {
|
|
21
|
+
this.cryptoAdapter = userPasswordOrOptions.cryptoAdapter;
|
|
22
|
+
this.logger = userPasswordOrOptions.logger
|
|
23
|
+
|| new logging_1.MindooLogger((0, logging_1.getDefaultLogLevel)(), "EncryptedLocalCacheStore", true);
|
|
24
|
+
this.derivedKey = userPasswordOrOptions.cacheKey;
|
|
25
|
+
this.keyPromise = Promise.resolve(userPasswordOrOptions.cacheKey);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (!cryptoAdapter) {
|
|
29
|
+
throw new Error("EncryptedLocalCacheStore: cryptoAdapter is required when constructing with a password.");
|
|
30
|
+
}
|
|
25
31
|
this.cryptoAdapter = cryptoAdapter;
|
|
26
32
|
this.logger = logger || new logging_1.MindooLogger((0, logging_1.getDefaultLogLevel)(), "EncryptedLocalCacheStore", true);
|
|
27
|
-
this.keyPromise = this.deriveKey(
|
|
33
|
+
this.keyPromise = this.deriveKey(userPasswordOrOptions);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Derive the AES-GCM cache encryption key that this store uses internally.
|
|
37
|
+
*
|
|
38
|
+
* Equivalent to the password-based derivation the legacy constructor runs
|
|
39
|
+
* on its first encrypt/decrypt call. Pass the returned key to the
|
|
40
|
+
* {@link EncryptedLocalCacheStoreKeyOptions} constructor overload to
|
|
41
|
+
* avoid retaining the plaintext password in the cache store.
|
|
42
|
+
*
|
|
43
|
+
* @param password Plain user password.
|
|
44
|
+
* @param cryptoAdapter Crypto adapter to derive against.
|
|
45
|
+
* @param options.extractable Whether the returned key should be
|
|
46
|
+
* extractable. Defaults to `false`.
|
|
47
|
+
*/
|
|
48
|
+
static async deriveCacheKey(password, cryptoAdapter, options) {
|
|
49
|
+
const subtle = cryptoAdapter.getSubtle();
|
|
50
|
+
const saltString = "mindoodb-cache-encryption:v1";
|
|
51
|
+
const salt = new TextEncoder().encode(saltString);
|
|
52
|
+
const passwordInput = new TextEncoder().encode(password);
|
|
53
|
+
const baseKey = await subtle.importKey("raw", passwordInput.buffer, "PBKDF2", false, ["deriveKey"]);
|
|
54
|
+
const iterations = (0, pbkdf2Iterations_1.resolvePbkdf2Iterations)(pbkdf2Iterations_1.DEFAULT_PBKDF2_ITERATIONS);
|
|
55
|
+
return subtle.deriveKey({
|
|
56
|
+
name: "PBKDF2",
|
|
57
|
+
salt: salt.buffer,
|
|
58
|
+
iterations,
|
|
59
|
+
hash: "SHA-256",
|
|
60
|
+
}, baseKey, { name: "AES-GCM", length: 256 }, options?.extractable ?? false, ["encrypt", "decrypt"]);
|
|
28
61
|
}
|
|
29
62
|
async deriveKey(password) {
|
|
30
63
|
const subtle = this.cryptoAdapter.getSubtle();
|
|
@@ -102,6 +135,12 @@ class EncryptedLocalCacheStore {
|
|
|
102
135
|
return null;
|
|
103
136
|
return this.decrypt(encrypted);
|
|
104
137
|
}
|
|
138
|
+
async getMany(type, ids) {
|
|
139
|
+
if (ids.length === 0)
|
|
140
|
+
return [];
|
|
141
|
+
const encryptedBatch = await this.inner.getMany(type, ids);
|
|
142
|
+
return Promise.all(encryptedBatch.map((encrypted) => encrypted === null ? Promise.resolve(null) : this.decrypt(encrypted)));
|
|
143
|
+
}
|
|
105
144
|
async put(type, id, value) {
|
|
106
145
|
const encrypted = await this.encrypt(value);
|
|
107
146
|
return this.inner.put(type, id, encrypted);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptedLocalCacheStore.js","sourceRoot":"","sources":["../../../src/core/cache/EncryptedLocalCacheStore.ts"],"names":[],"mappings":";;;AAEA,iEAAgG;AAChG,wCAAsE;
|
|
1
|
+
{"version":3,"file":"EncryptedLocalCacheStore.js","sourceRoot":"","sources":["../../../src/core/cache/EncryptedLocalCacheStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,31 @@ export interface LocalCacheStore {
|
|
|
17
17
|
* @returns The value, or `null` if not found.
|
|
18
18
|
*/
|
|
19
19
|
get(type: string, id: string): Promise<Uint8Array | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Batch-retrieve cached values.
|
|
22
|
+
*
|
|
23
|
+
* Implementations should amortize per-key overhead (e.g. open a single
|
|
24
|
+
* IndexedDB transaction for all reads) so that callers loading many
|
|
25
|
+
* documents at once pay one transaction cost instead of N.
|
|
26
|
+
*
|
|
27
|
+
* **Memory note for callers:** every value in the returned array is
|
|
28
|
+
* resident in memory at the same time, and any wrapping
|
|
29
|
+
* {@link EncryptedLocalCacheStore} will additionally hold the
|
|
30
|
+
* decrypted plaintext buffers in memory in parallel during
|
|
31
|
+
* {@link EncryptedLocalCacheStore.getMany}. Callers that load many
|
|
32
|
+
* large entries at once (e.g. a startup cache restore) should chunk
|
|
33
|
+
* `ids` into batches sized to bound the transient peak (rule of
|
|
34
|
+
* thumb: `chunkSize * avgEntryBytes * 2` bytes per batch). The
|
|
35
|
+
* production restore path in `BaseMindooDB` already chunks via
|
|
36
|
+
* `DocumentCacheConfig.restoreBatchSize` (default 256).
|
|
37
|
+
*
|
|
38
|
+
* @param type Cache record type (same semantics as {@link get}).
|
|
39
|
+
* @param ids Ids to fetch, in order.
|
|
40
|
+
* @returns Array of values aligned positionally with `ids`. Missing
|
|
41
|
+
* entries are returned as `null` at their respective index.
|
|
42
|
+
* Implementations MUST NOT reorder, deduplicate or drop entries.
|
|
43
|
+
*/
|
|
44
|
+
getMany(type: string, ids: string[]): Promise<Array<Uint8Array | null>>;
|
|
20
45
|
/**
|
|
21
46
|
* Store (or overwrite) a cached value.
|
|
22
47
|
*/
|
|
@@ -34,6 +59,14 @@ export interface LocalCacheStore {
|
|
|
34
59
|
*/
|
|
35
60
|
clear(): Promise<void>;
|
|
36
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Default {@link LocalCacheStore.getMany} implementation suitable for
|
|
64
|
+
* stores that have no batch API of their own. Issues `get` in parallel
|
|
65
|
+
* via `Promise.all`. Custom implementations should override this whenever
|
|
66
|
+
* they can do better (e.g. by keeping all reads inside a single
|
|
67
|
+
* transaction).
|
|
68
|
+
*/
|
|
69
|
+
export declare function defaultGetMany(store: Pick<LocalCacheStore, "get">, type: string, ids: string[]): Promise<Array<Uint8Array | null>>;
|
|
37
70
|
/**
|
|
38
71
|
* Trivial in-memory implementation of {@link LocalCacheStore}.
|
|
39
72
|
* Useful for tests and as a reference implementation.
|
|
@@ -42,6 +75,7 @@ export declare class InMemoryLocalCacheStore implements LocalCacheStore {
|
|
|
42
75
|
private data;
|
|
43
76
|
private toKey;
|
|
44
77
|
get(type: string, id: string): Promise<Uint8Array | null>;
|
|
78
|
+
getMany(type: string, ids: string[]): Promise<Array<Uint8Array | null>>;
|
|
45
79
|
put(type: string, id: string, value: Uint8Array): Promise<void>;
|
|
46
80
|
delete(type: string, id: string): Promise<void>;
|
|
47
81
|
list(type: string): Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalCacheStore.d.ts","sourceRoot":"","sources":["../../../src/core/cache/LocalCacheStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAE1D;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,IAAI,CAAsC;IAElD,OAAO,CAAC,KAAK;IAIP,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIzD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
1
|
+
{"version":3,"file":"LocalCacheStore.d.ts","sourceRoot":"","sources":["../../../src/core/cache/LocalCacheStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAE1D;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;IAExE;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,EACnC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAGnC;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,IAAI,CAAsC;IAElD,OAAO,CAAC,KAAK;IAIP,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIzD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAIvE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InMemoryLocalCacheStore = void 0;
|
|
4
|
+
exports.defaultGetMany = defaultGetMany;
|
|
5
|
+
/**
|
|
6
|
+
* Default {@link LocalCacheStore.getMany} implementation suitable for
|
|
7
|
+
* stores that have no batch API of their own. Issues `get` in parallel
|
|
8
|
+
* via `Promise.all`. Custom implementations should override this whenever
|
|
9
|
+
* they can do better (e.g. by keeping all reads inside a single
|
|
10
|
+
* transaction).
|
|
11
|
+
*/
|
|
12
|
+
function defaultGetMany(store, type, ids) {
|
|
13
|
+
if (ids.length === 0)
|
|
14
|
+
return Promise.resolve([]);
|
|
15
|
+
return Promise.all(ids.map((id) => store.get(type, id)));
|
|
16
|
+
}
|
|
4
17
|
/**
|
|
5
18
|
* Trivial in-memory implementation of {@link LocalCacheStore}.
|
|
6
19
|
* Useful for tests and as a reference implementation.
|
|
@@ -15,6 +28,9 @@ class InMemoryLocalCacheStore {
|
|
|
15
28
|
async get(type, id) {
|
|
16
29
|
return this.data.get(this.toKey(type, id)) ?? null;
|
|
17
30
|
}
|
|
31
|
+
async getMany(type, ids) {
|
|
32
|
+
return ids.map((id) => this.data.get(this.toKey(type, id)) ?? null);
|
|
33
|
+
}
|
|
18
34
|
async put(type, id, value) {
|
|
19
35
|
this.data.set(this.toKey(type, id), value);
|
|
20
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalCacheStore.js","sourceRoot":"","sources":["../../../src/core/cache/LocalCacheStore.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"LocalCacheStore.js","sourceRoot":"","sources":["../../../src/core/cache/LocalCacheStore.ts"],"names":[],"mappings":";;;AA0EA,wCAOC;AAdD;;;;;;GAMG;AACH,SAAgB,cAAc,CAC5B,KAAmC,EACnC,IAAY,EACZ,GAAa;IAEb,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAa,uBAAuB;IAApC;QACU,SAAI,GAA4B,IAAI,GAAG,EAAE,CAAC;IAoCpD,CAAC;IAlCS,KAAK,CAAC,IAAY,EAAE,EAAU;QACpC,OAAO,GAAG,IAAI,KAAK,EAAE,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,EAAU;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,GAAa;QACvC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,EAAU,EAAE,KAAiB;QACnD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,EAAU;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC;QAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;CACF;AArCD,0DAqCC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared database ID validation used by local clients and sync servers.
|
|
3
|
+
*
|
|
4
|
+
* Database IDs are embedded in server routes and storage names, so keep the
|
|
5
|
+
* accepted character set intentionally narrow and consistent everywhere.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DATABASE_ID_REGEX: RegExp;
|
|
8
|
+
export declare const MAX_DATABASE_ID_LENGTH = 64;
|
|
9
|
+
export declare const DATABASE_ID_REQUIREMENTS = "Database IDs must be 1-64 characters, start with a letter or digit, and contain only letters, digits, dots, and hyphens.";
|
|
10
|
+
export declare function getDatabaseIdValidationError(value: unknown, fieldName?: string): string | null;
|
|
11
|
+
export declare function isValidDatabaseId(value: unknown): value is string;
|
|
12
|
+
export declare function validateDatabaseId(value: unknown, fieldName?: string): string;
|
|
13
|
+
//# sourceMappingURL=databaseIdValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"databaseIdValidation.d.ts","sourceRoot":"","sources":["../../src/core/databaseIdValidation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,wBAAwB,6HACuF,CAAC;AAE7H,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,SAAS,GAAG,MAAM,GAAG,IAAI,CAc9F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,SAAS,GAAG,MAAM,CAM7E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DATABASE_ID_REQUIREMENTS = exports.MAX_DATABASE_ID_LENGTH = exports.DATABASE_ID_REGEX = void 0;
|
|
4
|
+
exports.getDatabaseIdValidationError = getDatabaseIdValidationError;
|
|
5
|
+
exports.isValidDatabaseId = isValidDatabaseId;
|
|
6
|
+
exports.validateDatabaseId = validateDatabaseId;
|
|
7
|
+
/**
|
|
8
|
+
* Shared database ID validation used by local clients and sync servers.
|
|
9
|
+
*
|
|
10
|
+
* Database IDs are embedded in server routes and storage names, so keep the
|
|
11
|
+
* accepted character set intentionally narrow and consistent everywhere.
|
|
12
|
+
*/
|
|
13
|
+
exports.DATABASE_ID_REGEX = /^[A-Za-z0-9][A-Za-z0-9.-]*$/;
|
|
14
|
+
exports.MAX_DATABASE_ID_LENGTH = 64;
|
|
15
|
+
exports.DATABASE_ID_REQUIREMENTS = "Database IDs must be 1-64 characters, start with a letter or digit, and contain only letters, digits, dots, and hyphens.";
|
|
16
|
+
function getDatabaseIdValidationError(value, fieldName = "dbId") {
|
|
17
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
18
|
+
return `${fieldName} is required and must be a non-empty string`;
|
|
19
|
+
}
|
|
20
|
+
if (value.length > exports.MAX_DATABASE_ID_LENGTH) {
|
|
21
|
+
return `${fieldName} must be at most ${exports.MAX_DATABASE_ID_LENGTH} characters`;
|
|
22
|
+
}
|
|
23
|
+
if (!exports.DATABASE_ID_REGEX.test(value)) {
|
|
24
|
+
return `${fieldName} must start with a letter or digit and contain only letters, digits, dots, and hyphens`;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
function isValidDatabaseId(value) {
|
|
29
|
+
return getDatabaseIdValidationError(value) === null;
|
|
30
|
+
}
|
|
31
|
+
function validateDatabaseId(value, fieldName = "dbId") {
|
|
32
|
+
const error = getDatabaseIdValidationError(value, fieldName);
|
|
33
|
+
if (error) {
|
|
34
|
+
throw new Error(error);
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=databaseIdValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"databaseIdValidation.js","sourceRoot":"","sources":["../../src/core/databaseIdValidation.ts"],"names":[],"mappings":";;;AAWA,oEAcC;AAED,8CAEC;AAED,gDAMC;AArCD;;;;;GAKG;AACU,QAAA,iBAAiB,GAAG,6BAA6B,CAAC;AAClD,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,wBAAwB,GACnC,0HAA0H,CAAC;AAE7H,SAAgB,4BAA4B,CAAC,KAAc,EAAE,SAAS,GAAG,MAAM;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,GAAG,SAAS,6CAA6C,CAAC;IACnE,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,8BAAsB,EAAE,CAAC;QAC1C,OAAO,GAAG,SAAS,oBAAoB,8BAAsB,aAAa,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,yBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,SAAS,wFAAwF,CAAC;IAC9G,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAc;IAC9C,OAAO,4BAA4B,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AACtD,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc,EAAE,SAAS,GAAG,MAAM;IACnE,MAAM,KAAK,GAAG,4BAA4B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7D,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAe,CAAC;AACzB,CAAC"}
|
package/dist/core/index.d.ts
CHANGED
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAC;AACxB,cAAc,wBAAwB,CAAC;AAGvC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EACL,eAAe,EACf,eAAe,EACf,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAGrD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG/F,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,GACtC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,6BAA6B,EAAE,oCAAoC,EAAE,MAAM,kDAAkD,CAAC;AAGvI,OAAO,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAC;AACzF,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC5G,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,YAAY,GACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kCAAkC,EAAE,MAAM,gEAAgE,CAAC;AACpH,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG1E,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,+BAA+B,EAC/B,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,sCAAsC,EAC3C,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
exports.SelectedOnly = exports.WithDocuments = exports.WithCategories = exports.CategorizationStyle = exports.TotalMode = exports.ColumnSorting = exports.MindooDBVirtualViewDataProvider = exports.VirtualViewDataChange = exports.VirtualViewEntryData = exports.VirtualViewNavigator = exports.VirtualViewColumn = exports.VirtualViewNavigatorBuilder = exports.VirtualViewBuilder = exports.VirtualViewFactory = exports.VirtualView = exports.HttpTransport = exports.ClientNetworkContentAddressedStore = exports.NetworkError = exports.NetworkErrorType = exports.AuthenticationService = exports.InMemoryContentAddressedStoreFactory = exports.InMemoryContentAddressedStore = exports.computeContentHash = exports.extractDocIdFromEntryId = exports.isAttachmentChunkId = exports.isDocEntryId = exports.parseAttachmentChunkId = exports.parseDocEntryId = exports.generateChunkUuid7 = exports.generateFileUuid7 = exports.generateAttachmentChunkId = exports.generateDepsFingerprint = exports.generateDocEntryId = exports.CacheManager = exports.EncryptedLocalCacheStore = exports.InMemoryLocalCacheStore = exports.SymmetricKeyNotFoundError = exports.isMindooURI = exports.decodeMindooURI = exports.encodeMindooURI = exports.KeyBag = exports.MindooDocSigner = exports.RSAEncryption = exports.MindooDBServerAdmin = exports.BaseMindooTenantFactory = exports.BaseMindooTenant = exports.BaseMindooDB = void 0;
|
|
19
19
|
// Types
|
|
20
20
|
__exportStar(require("./types"), exports);
|
|
21
|
+
__exportStar(require("./databaseIdValidation"), exports);
|
|
21
22
|
// Base classes
|
|
22
23
|
var BaseMindooDB_1 = require("./BaseMindooDB");
|
|
23
24
|
Object.defineProperty(exports, "BaseMindooDB", { enumerable: true, get: function () { return BaseMindooDB_1.BaseMindooDB; } });
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA,iCAAiC;;;;;;;;;;;;;;;;;AAEjC,QAAQ;AACR,0CAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA,iCAAiC;;;;;;;;;;;;;;;;;AAEjC,QAAQ;AACR,0CAAwB;AACxB,yDAAuC;AAKvC,eAAe;AACf,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAEhC,6DAO+B;AAN7B,0HAAA,mBAAmB,OAAA;AAUrB,wDAAuD;AAA9C,8GAAA,aAAa,OAAA;AACtB,4DAA2D;AAAlD,kHAAA,eAAe,OAAA;AAExB,OAAO;AACP,wCAAuD;AAA9C,gGAAA,MAAM,OAAA;AAEf,MAAM;AACN,6CAMyB;AALvB,4GAAA,eAAe,OAAA;AACf,4GAAA,eAAe,OAAA;AACf,wGAAA,WAAW,OAAA;AAKb,SAAS;AACT,mCAAqD;AAA5C,mHAAA,yBAAyB,OAAA;AAIlC,2DAAkE;AAAzD,0HAAA,uBAAuB,OAAA;AAChC,6EAA4E;AAAnE,oIAAA,wBAAwB,OAAA;AACjC,qDAA+F;AAAtF,4GAAA,YAAY,OAAA;AAErB,YAAY;AACZ,iCAYiB;AAXf,2GAAA,kBAAkB,OAAA;AAClB,gHAAA,uBAAuB,OAAA;AACvB,kHAAA,yBAAyB,OAAA;AACzB,0GAAA,iBAAiB,OAAA;AACjB,2GAAA,kBAAkB,OAAA;AAClB,wGAAA,eAAe,OAAA;AACf,+GAAA,sBAAsB,OAAA;AACtB,qGAAA,YAAY,OAAA;AACZ,4GAAA,mBAAmB,OAAA;AACnB,gHAAA,uBAAuB,OAAA;AACvB,2GAAA,kBAAkB,OAAA;AAmBpB,kGAAuI;AAA9H,8IAAA,6BAA6B,OAAA;AAAE,qJAAA,oCAAoC,OAAA;AAE5E,UAAU;AACV,0FAAyF;AAAhF,8HAAA,qBAAqB,OAAA;AAE9B,0DAS0C;AAFxC,yGAAA,gBAAgB,OAAA;AAChB,qGAAA,YAAY,OAAA;AAEd,qHAAoH;AAA3G,wJAAA,kCAAkC,OAAA;AAC3C,2EAA0E;AAAjE,8GAAA,aAAa,OAAA;AAEtB,2BAA2B;AAC3B,wDAsBiC;AArB/B,2GAAA,WAAW,OAAA;AACX,kHAAA,kBAAkB,OAAA;AAClB,kHAAA,kBAAkB,OAAA;AAClB,2HAAA,2BAA2B,OAAA;AAC3B,iHAAA,iBAAiB,OAAA;AACjB,oHAAA,oBAAoB,OAAA;AACpB,oHAAA,oBAAoB,OAAA;AACpB,qHAAA,qBAAqB,OAAA;AACrB,+HAAA,+BAA+B,OAAA;AAC/B,6GAAA,aAAa,OAAA;AACb,yGAAA,SAAS,OAAA;AACT,mHAAA,mBAAmB,OAAA;AACnB,8GAAA,cAAc,OAAA;AACd,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MindooDBVirtualViewDataProvider.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAa,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,sCAAsC;IACrD,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,EAAE,EAAE,QAAQ,CAAC;IAEb,oEAAoE;IACpE,cAAc,CAAC,EAAE,sBAAsB,CAAC;IAExC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,+BAAgC,YAAW,wBAAwB;IAC9E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAAqC;IAEnD,+DAA+D;IAC/D,OAAO,CAAC,WAAW,CAA0B;gBAEjC,OAAO,EAAE,sCAAsC;IAO3D,SAAS,IAAI,MAAM;IAInB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"MindooDBVirtualViewDataProvider.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAa,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,sCAAsC;IACrD,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,EAAE,EAAE,QAAQ,CAAC;IAEb,oEAAoE;IACpE,cAAc,CAAC,EAAE,sBAAsB,CAAC;IAExC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,+BAAgC,YAAW,wBAAwB;IAC9E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAAqC;IAEnD,+DAA+D;IAC/D,OAAO,CAAC,WAAW,CAA0B;gBAEjC,OAAO,EAAE,sCAAsC;IAO3D,SAAS,IAAI,MAAM;IAInB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAsD7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,SAAS,IAAI,oBAAoB,GAAG,IAAI;IAIxC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B,gBAAgB,IAAI,OAAO;IAO3B,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAOvC"}
|
|
@@ -53,7 +53,11 @@ class MindooDBVirtualViewDataProvider {
|
|
|
53
53
|
const passesFilter = !this.filterFunction || this.filterFunction(doc);
|
|
54
54
|
if (passesFilter) {
|
|
55
55
|
const columnValues = this.computeColumnValues(doc, columns);
|
|
56
|
-
|
|
56
|
+
// Propagate the source document's encryption key id into the
|
|
57
|
+
// view entry. This metadata is later used by
|
|
58
|
+
// `VirtualView.purgeEntriesByDecryptionKeyId` to drop entries in
|
|
59
|
+
// bulk when a key is revoked, without re-reading the database.
|
|
60
|
+
change.addEntry(docId, columnValues, doc.getDecryptionKeyId());
|
|
57
61
|
this.knownDocIds.add(docId);
|
|
58
62
|
}
|
|
59
63
|
else if (this.knownDocIds.has(docId)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MindooDBVirtualViewDataProvider.js","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.ts"],"names":[],"mappings":";;;AAIA,mEAAgE;AAoBhE;;;;GAIG;AACH,MAAa,+BAA+B;IAY1C,YAAY,OAA+C;QANnD,SAAI,GAAuB,IAAI,CAAC;QAChC,WAAM,GAAgC,IAAI,CAAC;QAEnD,+DAA+D;QACvD,gBAAW,GAAgB,IAAI,GAAG,EAAE,CAAC;QAG3C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;IAC1C,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,IAAiB;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,6CAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAEvC,4EAA4E;QAC5E,qEAAqE;QACrE,IAAI,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjG,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAEtE,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC5D,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"MindooDBVirtualViewDataProvider.js","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.ts"],"names":[],"mappings":";;;AAIA,mEAAgE;AAoBhE;;;;GAIG;AACH,MAAa,+BAA+B;IAY1C,YAAY,OAA+C;QANnD,SAAI,GAAuB,IAAI,CAAC;QAChC,WAAM,GAAgC,IAAI,CAAC;QAEnD,+DAA+D;QACvD,gBAAW,GAAgB,IAAI,GAAG,EAAE,CAAC;QAG3C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;IAC1C,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,IAAiB;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,6CAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAEvC,4EAA4E;QAC5E,qEAAqE;QACrE,IAAI,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjG,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAEtE,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC5D,6DAA6D;gBAC7D,6CAA6C;gBAC7C,iEAAiE;gBACjE,+DAA+D;gBAC/D,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;QAED,6CAA6C;QAC7C,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,GAAc,EACd,OAA4B;QAE5B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAE9B,2CAA2C;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,uBAAuB;YACvB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;YACtC,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7C,6EAA6E;gBAC7E,uEAAuE;gBACvE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,8EAA8E;IAC9E,sBAAsB;IACtB,8EAA8E;IAE9E,gBAAgB;QACd,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,KAAc;QAC7B,MAAM,CAAC,GAAG,KAAyE,CAAC;QACpF,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;QAC/B,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF;AA1JD,0EA0JC"}
|
|
@@ -90,6 +90,20 @@ export declare class VirtualView {
|
|
|
90
90
|
* Apply changes from a data provider
|
|
91
91
|
*/
|
|
92
92
|
applyChanges(change: VirtualViewDataChange): void;
|
|
93
|
+
/**
|
|
94
|
+
* Remove every document entry sourced from `origin` whose stored
|
|
95
|
+
* `decryptionKeyId` matches the given key id.
|
|
96
|
+
*
|
|
97
|
+
* Used by the key visibility reconciliation layer when a key is
|
|
98
|
+
* revoked so view consumers stop seeing entries they can no longer
|
|
99
|
+
* decrypt. Implemented in terms of `applyChanges` so that removal
|
|
100
|
+
* triggers the normal cleanup paths (empty parent categories collapse,
|
|
101
|
+
* change notifications fire, etc.).
|
|
102
|
+
*
|
|
103
|
+
* The function is a no-op when no matching document entries exist, so
|
|
104
|
+
* callers may invoke it speculatively without performance concerns.
|
|
105
|
+
*/
|
|
106
|
+
purgeEntriesByDecryptionKeyId(origin: string, decryptionKeyId: string): void;
|
|
93
107
|
/**
|
|
94
108
|
* Override this method to filter entries
|
|
95
109
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualView.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/VirtualView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"VirtualView.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/VirtualView.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VirtualView = void 0;
|
|
4
4
|
const VirtualViewEntryData_1 = require("./VirtualViewEntryData");
|
|
5
|
+
const VirtualViewDataChange_1 = require("./VirtualViewDataChange");
|
|
5
6
|
const ViewEntrySortKey_1 = require("./ViewEntrySortKey");
|
|
6
7
|
const ViewEntrySortKeyComparator_1 = require("./ViewEntrySortKeyComparator");
|
|
7
8
|
const types_1 = require("./types");
|
|
@@ -221,7 +222,7 @@ class VirtualView {
|
|
|
221
222
|
continue;
|
|
222
223
|
}
|
|
223
224
|
// Add entry to the view
|
|
224
|
-
const addedEntries = this.addEntry(origin, docId, columnValues, root, this.categoryColumns);
|
|
225
|
+
const addedEntries = this.addEntry(origin, docId, columnValues, root, this.categoryColumns, entryData.decryptionKeyId);
|
|
225
226
|
if (addedEntries.length > 0) {
|
|
226
227
|
indexChanged = true;
|
|
227
228
|
const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(origin, docId));
|
|
@@ -242,6 +243,34 @@ class VirtualView {
|
|
|
242
243
|
this.markViewDirty();
|
|
243
244
|
}
|
|
244
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Remove every document entry sourced from `origin` whose stored
|
|
248
|
+
* `decryptionKeyId` matches the given key id.
|
|
249
|
+
*
|
|
250
|
+
* Used by the key visibility reconciliation layer when a key is
|
|
251
|
+
* revoked so view consumers stop seeing entries they can no longer
|
|
252
|
+
* decrypt. Implemented in terms of `applyChanges` so that removal
|
|
253
|
+
* triggers the normal cleanup paths (empty parent categories collapse,
|
|
254
|
+
* change notifications fire, etc.).
|
|
255
|
+
*
|
|
256
|
+
* The function is a no-op when no matching document entries exist, so
|
|
257
|
+
* callers may invoke it speculatively without performance concerns.
|
|
258
|
+
*/
|
|
259
|
+
purgeEntriesByDecryptionKeyId(origin, decryptionKeyId) {
|
|
260
|
+
const change = new VirtualViewDataChange_1.VirtualViewDataChange(origin);
|
|
261
|
+
for (const [scopedKey, entries] of this.entriesByDocId.entries()) {
|
|
262
|
+
const parsed = (0, types_1.parseScopedDocIdKey)(scopedKey);
|
|
263
|
+
if (parsed.origin !== origin) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (entries.some((entry) => entry.isDocument() && entry.getDecryptionKeyId() === decryptionKeyId)) {
|
|
267
|
+
change.removeEntry(parsed.docId);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (change.hasChanges()) {
|
|
271
|
+
this.applyChanges(change);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
245
274
|
/**
|
|
246
275
|
* Override this method to filter entries
|
|
247
276
|
*/
|
|
@@ -251,7 +280,7 @@ class VirtualView {
|
|
|
251
280
|
/**
|
|
252
281
|
* Add an entry to the view hierarchy
|
|
253
282
|
*/
|
|
254
|
-
addEntry(origin, docId, columnValues, targetParent, remainingCategoryColumns) {
|
|
283
|
+
addEntry(origin, docId, columnValues, targetParent, remainingCategoryColumns, decryptionKeyId) {
|
|
255
284
|
const createdEntries = [];
|
|
256
285
|
// If no more category columns, add as document entry
|
|
257
286
|
if (remainingCategoryColumns.length === 0) {
|
|
@@ -263,7 +292,7 @@ class VirtualView {
|
|
|
263
292
|
}
|
|
264
293
|
const sortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(false, docSortValues, origin, docId);
|
|
265
294
|
const childComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, false, this.docOrderDescending);
|
|
266
|
-
const newDocEntry = new VirtualViewEntryData_1.VirtualViewEntryData(this, targetParent, origin, docId, sortKey, childComparator);
|
|
295
|
+
const newDocEntry = new VirtualViewEntryData_1.VirtualViewEntryData(this, targetParent, origin, docId, sortKey, childComparator, decryptionKeyId);
|
|
267
296
|
newDocEntry.setColumnValues(columnValues);
|
|
268
297
|
if (targetParent.addChildEntry(newDocEntry)) {
|
|
269
298
|
// Update counts in parents
|
|
@@ -343,7 +372,7 @@ class VirtualView {
|
|
|
343
372
|
currentParent = existingCategory;
|
|
344
373
|
}
|
|
345
374
|
// Continue with remaining categories under the last subcategory
|
|
346
|
-
const addedEntries = this.addEntry(origin, docId, columnValues, currentParent, remainingColumns);
|
|
375
|
+
const addedEntries = this.addEntry(origin, docId, columnValues, currentParent, remainingColumns, decryptionKeyId);
|
|
347
376
|
createdEntries.push(...addedEntries);
|
|
348
377
|
}
|
|
349
378
|
else {
|
|
@@ -374,7 +403,7 @@ class VirtualView {
|
|
|
374
403
|
this.markEntryForSiblingIndexFlush(targetParent);
|
|
375
404
|
}
|
|
376
405
|
// Continue with remaining categories
|
|
377
|
-
const addedEntries = this.addEntry(origin, docId, columnValues, existingCategory, remainingColumns);
|
|
406
|
+
const addedEntries = this.addEntry(origin, docId, columnValues, existingCategory, remainingColumns, decryptionKeyId);
|
|
378
407
|
createdEntries.push(...addedEntries);
|
|
379
408
|
}
|
|
380
409
|
}
|
|
@@ -590,6 +619,9 @@ class VirtualView {
|
|
|
590
619
|
if (tv && Object.keys(tv).length > 0) {
|
|
591
620
|
node.tv = tv;
|
|
592
621
|
}
|
|
622
|
+
if (entry.isDocument() && entry.getDecryptionKeyId()) {
|
|
623
|
+
node.dk = entry.getDecryptionKeyId();
|
|
624
|
+
}
|
|
593
625
|
return node;
|
|
594
626
|
}
|
|
595
627
|
/**
|
|
@@ -640,7 +672,7 @@ class VirtualView {
|
|
|
640
672
|
deserializeNode(data, parent, docOrderDesc) {
|
|
641
673
|
const sk = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(data.sk.c, data.sk.v, data.sk.o, data.sk.d);
|
|
642
674
|
const comparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, data.cod, docOrderDesc);
|
|
643
|
-
const entry = new VirtualViewEntryData_1.VirtualViewEntryData(this, parent, data.o, data.d, sk, comparator);
|
|
675
|
+
const entry = new VirtualViewEntryData_1.VirtualViewEntryData(this, parent, data.o, data.d, sk, comparator, data.dk);
|
|
644
676
|
entry.setColumnValues(data.cv ?? {});
|
|
645
677
|
entry.setIndentLevels(data.il ?? 0);
|
|
646
678
|
entry.setSiblingIndex(data.si ?? 0);
|