mindoodb 0.0.3 → 0.0.5
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/README-server.md +1030 -0
- package/README.md +14 -26
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +27 -0
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +270 -121
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.d.ts +15 -0
- package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.js +235 -10
- package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +5 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +40 -4
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +10 -3
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +138 -13
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -1
- package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts +21 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts.map +1 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.js +106 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.js.map +1 -0
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +9 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/core/BaseMindooDB.d.ts +108 -13
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +1268 -292
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/BaseMindooTenant.d.ts +31 -1
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +212 -129
- package/dist/core/BaseMindooTenant.js.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.d.ts +13 -10
- package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.js +134 -27
- package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts +5 -1
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +46 -69
- package/dist/core/BaseMindooTenantFactory.js.map +1 -1
- package/dist/core/MindooDBServerAdmin.d.ts +241 -0
- package/dist/core/MindooDBServerAdmin.d.ts.map +1 -0
- package/dist/core/MindooDBServerAdmin.js +401 -0
- package/dist/core/MindooDBServerAdmin.js.map +1 -0
- package/dist/core/appendonlystores/AttachmentReadPlanner.d.ts +22 -0
- package/dist/core/appendonlystores/AttachmentReadPlanner.d.ts.map +1 -0
- package/dist/core/appendonlystores/AttachmentReadPlanner.js +124 -0
- package/dist/core/appendonlystores/AttachmentReadPlanner.js.map +1 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +10 -4
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +44 -9
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -1
- package/dist/core/appendonlystores/MaterializationPlanner.d.ts +84 -0
- package/dist/core/appendonlystores/MaterializationPlanner.d.ts.map +1 -0
- package/dist/core/appendonlystores/MaterializationPlanner.js +326 -0
- package/dist/core/appendonlystores/MaterializationPlanner.js.map +1 -0
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts +33 -0
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.d.ts +35 -0
- package/dist/core/appendonlystores/network/types.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.js +2 -0
- package/dist/core/appendonlystores/network/types.js.map +1 -1
- package/dist/core/appendonlystores/types.d.ts +174 -3
- package/dist/core/appendonlystores/types.d.ts.map +1 -1
- package/dist/core/cache/CacheManager.d.ts +75 -0
- package/dist/core/cache/CacheManager.d.ts.map +1 -0
- package/dist/core/cache/CacheManager.js +101 -0
- package/dist/core/cache/CacheManager.js.map +1 -0
- package/dist/core/cache/EncryptedLocalCacheStore.d.ts +41 -0
- package/dist/core/cache/EncryptedLocalCacheStore.d.ts.map +1 -0
- package/dist/core/cache/EncryptedLocalCacheStore.js +120 -0
- package/dist/core/cache/EncryptedLocalCacheStore.js.map +1 -0
- package/dist/core/cache/LocalCacheStore.d.ts +50 -0
- package/dist/core/cache/LocalCacheStore.d.ts.map +1 -0
- package/dist/core/cache/LocalCacheStore.js +39 -0
- package/dist/core/cache/LocalCacheStore.js.map +1 -0
- package/dist/core/crypto/privateKeyEncryption.d.ts +5 -0
- package/dist/core/crypto/privateKeyEncryption.d.ts.map +1 -0
- package/dist/core/crypto/privateKeyEncryption.js +87 -0
- package/dist/core/crypto/privateKeyEncryption.js.map +1 -0
- package/dist/core/index.d.ts +13 -6
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +13 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts +4 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +39 -11
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts +1 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js +3 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.d.ts +43 -0
- package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.js +173 -0
- package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +7 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +28 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -1
- package/dist/core/keys/KeyBag.d.ts +38 -14
- package/dist/core/keys/KeyBag.d.ts.map +1 -1
- package/dist/core/keys/KeyBag.js +102 -76
- package/dist/core/keys/KeyBag.js.map +1 -1
- package/dist/core/keys/KeyContext.d.ts +3 -3
- package/dist/core/keys/KeyContext.d.ts.map +1 -1
- package/dist/core/keys/KeyContext.js +10 -4
- package/dist/core/keys/KeyContext.js.map +1 -1
- package/dist/core/types.d.ts +341 -22
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +7 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/idGeneration.d.ts.map +1 -1
- package/dist/core/utils/idGeneration.js +37 -3
- package/dist/core/utils/idGeneration.js.map +1 -1
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +31 -7
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -1
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +139 -17
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -1
- package/dist/node/attachments/writeAttachmentToFile.d.ts +15 -0
- package/dist/node/attachments/writeAttachmentToFile.d.ts.map +1 -0
- package/dist/node/attachments/writeAttachmentToFile.js +73 -0
- package/dist/node/attachments/writeAttachmentToFile.js.map +1 -0
- package/dist/node/cache/FileSystemLocalCacheStore.d.ts +17 -0
- package/dist/node/cache/FileSystemLocalCacheStore.d.ts.map +1 -0
- package/dist/node/cache/FileSystemLocalCacheStore.js +128 -0
- package/dist/node/cache/FileSystemLocalCacheStore.js.map +1 -0
- package/dist/node/cli/change-identity-password.d.ts +7 -0
- package/dist/node/cli/change-identity-password.d.ts.map +1 -0
- package/dist/node/cli/change-identity-password.js +67 -0
- package/dist/node/cli/change-identity-password.js.map +1 -0
- package/dist/node/cli/cli-utils.d.ts +16 -0
- package/dist/node/cli/cli-utils.d.ts.map +1 -0
- package/dist/node/cli/cli-utils.js +113 -0
- package/dist/node/cli/cli-utils.js.map +1 -0
- package/dist/node/cli/identity-export-public.d.ts +4 -0
- package/dist/node/cli/identity-export-public.d.ts.map +1 -0
- package/dist/node/cli/identity-export-public.js +55 -0
- package/dist/node/cli/identity-export-public.js.map +1 -0
- package/dist/node/cli/identity-info.d.ts +4 -0
- package/dist/node/cli/identity-info.d.ts.map +1 -0
- package/dist/node/cli/identity-info.js +57 -0
- package/dist/node/cli/identity-info.js.map +1 -0
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +4 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/server/CapabilityMatcher.d.ts +45 -0
- package/dist/node/server/CapabilityMatcher.d.ts.map +1 -0
- package/dist/node/server/CapabilityMatcher.js +117 -0
- package/dist/node/server/CapabilityMatcher.js.map +1 -0
- package/dist/node/server/MindooDBServer.d.ts +94 -0
- package/dist/node/server/MindooDBServer.d.ts.map +1 -0
- package/dist/node/server/MindooDBServer.js +1256 -0
- package/dist/node/server/MindooDBServer.js.map +1 -0
- package/dist/node/server/ServerSync.d.ts +41 -0
- package/dist/node/server/ServerSync.d.ts.map +1 -0
- package/dist/node/server/ServerSync.js +187 -0
- package/dist/node/server/ServerSync.js.map +1 -0
- package/dist/node/server/StoreFactory.d.ts +45 -0
- package/dist/node/server/StoreFactory.d.ts.map +1 -0
- package/dist/node/server/StoreFactory.js +89 -0
- package/dist/node/server/StoreFactory.js.map +1 -0
- package/dist/node/server/SystemAdminAuth.d.ts +65 -0
- package/dist/node/server/SystemAdminAuth.d.ts.map +1 -0
- package/dist/node/server/SystemAdminAuth.js +200 -0
- package/dist/node/server/SystemAdminAuth.js.map +1 -0
- package/dist/node/server/SystemIpAllowlist.d.ts +21 -0
- package/dist/node/server/SystemIpAllowlist.d.ts.map +1 -0
- package/dist/node/server/SystemIpAllowlist.js +210 -0
- package/dist/node/server/SystemIpAllowlist.js.map +1 -0
- package/dist/node/server/TenantManager.d.ts +100 -0
- package/dist/node/server/TenantManager.d.ts.map +1 -0
- package/dist/node/server/TenantManager.js +615 -0
- package/dist/node/server/TenantManager.js.map +1 -0
- package/dist/node/server/add-to-network.d.ts +20 -0
- package/dist/node/server/add-to-network.d.ts.map +1 -0
- package/dist/node/server/add-to-network.js +275 -0
- package/dist/node/server/add-to-network.js.map +1 -0
- package/dist/node/server/config.d.ts +51 -0
- package/dist/node/server/config.d.ts.map +1 -0
- package/dist/node/server/config.js +218 -0
- package/dist/node/server/config.js.map +1 -0
- package/dist/node/server/resolveServerPassword.d.ts +7 -0
- package/dist/node/server/resolveServerPassword.d.ts.map +1 -0
- package/dist/node/server/resolveServerPassword.js +25 -0
- package/dist/node/server/resolveServerPassword.js.map +1 -0
- package/dist/node/server/server.d.ts +22 -0
- package/dist/node/server/server.d.ts.map +1 -0
- package/dist/node/server/server.js +225 -0
- package/dist/node/server/server.js.map +1 -0
- package/dist/node/server/serverinit.d.ts +21 -0
- package/dist/node/server/serverinit.d.ts.map +1 -0
- package/dist/node/server/serverinit.js +317 -0
- package/dist/node/server/serverinit.js.map +1 -0
- package/dist/node/server/types.d.ts +167 -0
- package/dist/node/server/types.d.ts.map +1 -0
- package/dist/node/server/types.js +24 -0
- package/dist/node/server/types.js.map +1 -0
- package/dist/node/server/validation.d.ts +47 -0
- package/dist/node/server/validation.d.ts.map +1 -0
- package/dist/node/server/validation.js +114 -0
- package/dist/node/server/validation.js.map +1 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts +48 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts.map +1 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.js +113 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.js.map +1 -0
- package/dist/reactnative/index.d.ts +1 -0
- package/dist/reactnative/index.d.ts.map +1 -1
- package/dist/reactnative/index.js +4 -1
- package/dist/reactnative/index.js.map +1 -1
- package/package.json +15 -3
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.topologicalByDependencies = topologicalByDependencies;
|
|
4
|
+
exports.computeDocumentMaterializationPlan = computeDocumentMaterializationPlan;
|
|
5
|
+
exports.computeBatchMaterializationPlan = computeBatchMaterializationPlan;
|
|
6
|
+
/**
|
|
7
|
+
* Shared, metadata-only planner for causal document materialization.
|
|
8
|
+
*
|
|
9
|
+
* Why this exists:
|
|
10
|
+
* - local and remote stores need the same causal replay behavior
|
|
11
|
+
* - planner must work without decrypting payloads
|
|
12
|
+
* - replay order must be deterministic across runs
|
|
13
|
+
*
|
|
14
|
+
* Core invariant:
|
|
15
|
+
* - `entryIdsToApply` contains exactly the replay entries needed to reconstruct
|
|
16
|
+
* latest state that are not already covered by the selected snapshot.
|
|
17
|
+
*/
|
|
18
|
+
const DOC_REPLAY_TYPES = new Set(["doc_create", "doc_change", "doc_delete"]);
|
|
19
|
+
/**
|
|
20
|
+
* Returns true for entry types that can influence Automerge latest state replay.
|
|
21
|
+
*/
|
|
22
|
+
function isReplayEntry(meta) {
|
|
23
|
+
return DOC_REPLAY_TYPES.has(meta.entryType);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Computes latest-state heads and all replay entries causally reachable from them.
|
|
27
|
+
*
|
|
28
|
+
* `latestReachable` intentionally excludes unrelated historical branches that are
|
|
29
|
+
* not ancestors of current heads, so coverage/replay decisions only operate on
|
|
30
|
+
* data needed for latest state materialization.
|
|
31
|
+
*/
|
|
32
|
+
function buildLatestStateReachability(replayEntries) {
|
|
33
|
+
const byId = new Map();
|
|
34
|
+
const referenced = new Set();
|
|
35
|
+
for (const entry of replayEntries) {
|
|
36
|
+
byId.set(entry.id, entry);
|
|
37
|
+
}
|
|
38
|
+
for (const entry of replayEntries) {
|
|
39
|
+
for (const depId of entry.dependencyIds) {
|
|
40
|
+
if (byId.has(depId)) {
|
|
41
|
+
referenced.add(depId);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Heads are entries that are not referenced as dependencies by any other replay entry.
|
|
46
|
+
const latestHeads = replayEntries
|
|
47
|
+
.filter((e) => !referenced.has(e.id))
|
|
48
|
+
.map((e) => e.id);
|
|
49
|
+
const latestReachable = new Set();
|
|
50
|
+
const stack = [...latestHeads];
|
|
51
|
+
while (stack.length > 0) {
|
|
52
|
+
const id = stack.pop();
|
|
53
|
+
if (latestReachable.has(id)) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
latestReachable.add(id);
|
|
57
|
+
const entry = byId.get(id);
|
|
58
|
+
if (!entry) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
for (const depId of entry.dependencyIds) {
|
|
62
|
+
if (byId.has(depId) && !latestReachable.has(depId)) {
|
|
63
|
+
stack.push(depId);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { latestHeads, latestReachable };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Computes replay entries covered by the given snapshot.
|
|
71
|
+
*
|
|
72
|
+
* Coverage roots are chosen in this order:
|
|
73
|
+
* 1) explicit `snapshotHeadEntryIds` (preferred; most accurate)
|
|
74
|
+
* 2) snapshot `dependencyIds` (compatibility fallback)
|
|
75
|
+
*/
|
|
76
|
+
function coveredBySnapshot(snapshot, replayById) {
|
|
77
|
+
if (!snapshot) {
|
|
78
|
+
return new Set();
|
|
79
|
+
}
|
|
80
|
+
const roots = snapshot.snapshotHeadEntryIds && snapshot.snapshotHeadEntryIds.length > 0
|
|
81
|
+
? snapshot.snapshotHeadEntryIds
|
|
82
|
+
: snapshot.dependencyIds;
|
|
83
|
+
const covered = new Set();
|
|
84
|
+
const stack = [...roots];
|
|
85
|
+
while (stack.length > 0) {
|
|
86
|
+
const id = stack.pop();
|
|
87
|
+
if (covered.has(id)) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const entry = replayById.get(id);
|
|
91
|
+
if (!entry) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
covered.add(id);
|
|
95
|
+
for (const depId of entry.dependencyIds) {
|
|
96
|
+
if (!covered.has(depId)) {
|
|
97
|
+
stack.push(depId);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return covered;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Produces a stable, dependency-first ordering of replay entries using
|
|
105
|
+
* Kahn's algorithm for topological sorting.
|
|
106
|
+
*
|
|
107
|
+
* The caller passes a set of entry IDs that need to be replayed (the
|
|
108
|
+
* "uncovered" set from {@link computeDocumentMaterializationPlan}) and the
|
|
109
|
+
* full metadata map so the function can inspect each entry's
|
|
110
|
+
* `dependencyIds`. The result is an array where every entry appears
|
|
111
|
+
* *after* all of its causal predecessors, which is the order
|
|
112
|
+
* `Automerge.applyChanges` requires to apply changes correctly.
|
|
113
|
+
*
|
|
114
|
+
* **Why Kahn's algorithm?** It processes nodes in BFS order starting from
|
|
115
|
+
* roots (entries with no in-set dependencies), decrementing the in-degree
|
|
116
|
+
* of each dependent as its predecessors are emitted. This naturally
|
|
117
|
+
* produces a valid topological order for any DAG.
|
|
118
|
+
*
|
|
119
|
+
* **Determinism:** When multiple entries become ready at the same time
|
|
120
|
+
* (in-degree drops to zero simultaneously), the queue is sorted
|
|
121
|
+
* lexicographically before the next dequeue. This guarantees the same
|
|
122
|
+
* output regardless of `Set` or `Map` iteration order, which can vary
|
|
123
|
+
* across JavaScript engines and process runs.
|
|
124
|
+
*
|
|
125
|
+
* **Cycle safety:** In a well-formed Automerge DAG, cycles are impossible.
|
|
126
|
+
* However, if corrupted metadata somehow introduces a cycle, the algorithm
|
|
127
|
+
* detects it (ordered.length < ids.size) and falls back to a simple
|
|
128
|
+
* lexicographic sort so the caller still receives a complete list rather
|
|
129
|
+
* than a partial one.
|
|
130
|
+
*
|
|
131
|
+
* @param ids The entry IDs to sort (typically the uncovered set).
|
|
132
|
+
* @param replayById Lookup map from entry ID to its metadata, used to
|
|
133
|
+
* read `dependencyIds` for graph edges.
|
|
134
|
+
* @returns Entry IDs in dependency-first order suitable for sequential
|
|
135
|
+
* application to an Automerge document.
|
|
136
|
+
*/
|
|
137
|
+
function topologicalByDependencies(ids, replayById) {
|
|
138
|
+
// ── Build the in-degree and reverse-adjacency structures ──────────
|
|
139
|
+
// `indegree` — for each id, how many of its dependencies are also in `ids`
|
|
140
|
+
// `dependents` — for each id, which other ids in the set depend on it
|
|
141
|
+
const indegree = new Map();
|
|
142
|
+
const dependents = new Map();
|
|
143
|
+
for (const id of ids) {
|
|
144
|
+
indegree.set(id, 0);
|
|
145
|
+
dependents.set(id, []);
|
|
146
|
+
}
|
|
147
|
+
for (const id of ids) {
|
|
148
|
+
const entry = replayById.get(id);
|
|
149
|
+
if (!entry) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
for (const depId of entry.dependencyIds) {
|
|
153
|
+
if (!ids.has(depId)) {
|
|
154
|
+
// Dependency is outside the uncovered set (already covered by
|
|
155
|
+
// the snapshot or not part of the latest-state DAG) — skip it.
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
indegree.set(id, (indegree.get(id) || 0) + 1);
|
|
159
|
+
dependents.get(depId).push(id);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// ── Kahn's BFS ────────────────────────────────────────────────────
|
|
163
|
+
// Seed the queue with root entries (in-degree 0 within the set).
|
|
164
|
+
const queue = Array.from(ids).filter((id) => (indegree.get(id) || 0) === 0);
|
|
165
|
+
queue.sort();
|
|
166
|
+
const ordered = [];
|
|
167
|
+
while (queue.length > 0) {
|
|
168
|
+
const id = queue.shift();
|
|
169
|
+
ordered.push(id);
|
|
170
|
+
for (const dep of dependents.get(id) || []) {
|
|
171
|
+
const next = (indegree.get(dep) || 0) - 1;
|
|
172
|
+
indegree.set(dep, next);
|
|
173
|
+
if (next === 0) {
|
|
174
|
+
queue.push(dep);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Re-sort after adding newly ready entries to maintain determinism.
|
|
178
|
+
queue.sort();
|
|
179
|
+
}
|
|
180
|
+
// ── Cycle fallback ────────────────────────────────────────────────
|
|
181
|
+
if (ordered.length !== ids.size) {
|
|
182
|
+
return Array.from(ids).sort();
|
|
183
|
+
}
|
|
184
|
+
return ordered;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Computes a causal materialization plan for one document.
|
|
188
|
+
*
|
|
189
|
+
* Given all store entries for a document, this function answers two questions:
|
|
190
|
+
*
|
|
191
|
+
* 1. **Which snapshot should we load first?**
|
|
192
|
+
* The planner evaluates every `doc_snapshot` entry and selects the one whose
|
|
193
|
+
* causal coverage overlaps the most with the entries needed for the latest
|
|
194
|
+
* document state. A snapshot that covers 90% of the DAG means only 10%
|
|
195
|
+
* of entries need to be replayed — a large win for documents with long
|
|
196
|
+
* histories. When two snapshots cover the same number of latest-state
|
|
197
|
+
* entries, the newer one (by `createdAt`) wins as a deterministic
|
|
198
|
+
* tie-breaker. Correctness never depends on timestamps.
|
|
199
|
+
*
|
|
200
|
+
* 2. **Which change entries must be replayed on top of that snapshot?**
|
|
201
|
+
* Every entry in the latest-state DAG that is *not* causally covered by
|
|
202
|
+
* the selected snapshot is collected and sorted in dependency-first
|
|
203
|
+
* (topological) order. This is the minimal set of Automerge changes
|
|
204
|
+
* the caller must decrypt and apply to reach the current document state.
|
|
205
|
+
*
|
|
206
|
+
* Snapshot selection strategy:
|
|
207
|
+
* - Choose the snapshot with maximal overlap against `latestReachable`.
|
|
208
|
+
* - Break equal-coverage ties by newer `createdAt` (optimization only).
|
|
209
|
+
* - If no snapshots exist, all replay entries are returned (full rebuild).
|
|
210
|
+
*
|
|
211
|
+
* Attachment entries (`attachment_chunk`) are never included — the planner
|
|
212
|
+
* operates exclusively on `doc_create`, `doc_change`, and `doc_delete`
|
|
213
|
+
* entries (the types tracked by `DOC_REPLAY_TYPES`).
|
|
214
|
+
*
|
|
215
|
+
* @param docId The document to plan for.
|
|
216
|
+
* @param allEntriesForDoc Every entry metadata record for this document,
|
|
217
|
+
* including snapshots and attachments (attachments
|
|
218
|
+
* are filtered out internally).
|
|
219
|
+
* @param options Pass `{ includeDiagnostics: true }` to populate the
|
|
220
|
+
* `diagnostics` field with head IDs and coverage counts.
|
|
221
|
+
* @returns A plan containing the snapshot to load (if any) and the ordered
|
|
222
|
+
* list of entry IDs to apply afterwards.
|
|
223
|
+
*/
|
|
224
|
+
function computeDocumentMaterializationPlan(docId, allEntriesForDoc, options) {
|
|
225
|
+
// ── Step 1: Partition entries ──────────────────────────────────────
|
|
226
|
+
// Replay entries are the doc-lifecycle entries (create/change/delete) that
|
|
227
|
+
// form the Automerge DAG. Snapshots are evaluated separately as candidate
|
|
228
|
+
// starting points.
|
|
229
|
+
const replayEntries = allEntriesForDoc.filter(isReplayEntry);
|
|
230
|
+
const replayById = new Map(replayEntries.map((e) => [e.id, e]));
|
|
231
|
+
const snapshots = allEntriesForDoc.filter((e) => e.entryType === "doc_snapshot");
|
|
232
|
+
// ── Step 2: Handle empty replay set ─────────────────────────────────
|
|
233
|
+
// After a dense sync the local store may contain only a snapshot with no
|
|
234
|
+
// individual change entries. In that case select the newest snapshot so
|
|
235
|
+
// the caller can still load the document state.
|
|
236
|
+
if (replayEntries.length === 0) {
|
|
237
|
+
if (snapshots.length > 0) {
|
|
238
|
+
const best = snapshots.reduce((a, b) => (b.createdAt > a.createdAt ? b : a));
|
|
239
|
+
return {
|
|
240
|
+
docId,
|
|
241
|
+
snapshotEntryId: best.id,
|
|
242
|
+
entryIdsToApply: [],
|
|
243
|
+
diagnostics: options?.includeDiagnostics
|
|
244
|
+
? { headEntryIds: [], coveredLatestEntryCount: 0, uncoveredLatestEntryCount: 0 }
|
|
245
|
+
: undefined,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
docId,
|
|
250
|
+
snapshotEntryId: null,
|
|
251
|
+
entryIdsToApply: [],
|
|
252
|
+
diagnostics: options?.includeDiagnostics
|
|
253
|
+
? { headEntryIds: [], coveredLatestEntryCount: 0, uncoveredLatestEntryCount: 0 }
|
|
254
|
+
: undefined,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// ── Step 3: Build latest-state reachability ───────────────────────
|
|
258
|
+
// Identify the DAG heads (entries with no dependents) and walk backward
|
|
259
|
+
// to collect every entry causally needed for the current document state.
|
|
260
|
+
const { latestHeads, latestReachable } = buildLatestStateReachability(replayEntries);
|
|
261
|
+
// ── Step 4: Score each snapshot by how many latest-state entries it covers
|
|
262
|
+
let bestSnapshot = null;
|
|
263
|
+
let bestCoveredCount = -1;
|
|
264
|
+
for (const snapshot of snapshots) {
|
|
265
|
+
const covered = coveredBySnapshot(snapshot, replayById);
|
|
266
|
+
let coveredLatest = 0;
|
|
267
|
+
for (const id of latestReachable) {
|
|
268
|
+
if (covered.has(id)) {
|
|
269
|
+
coveredLatest++;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (coveredLatest > bestCoveredCount ||
|
|
273
|
+
(coveredLatest === bestCoveredCount && bestSnapshot && snapshot.createdAt > bestSnapshot.createdAt)) {
|
|
274
|
+
bestSnapshot = snapshot;
|
|
275
|
+
bestCoveredCount = coveredLatest;
|
|
276
|
+
}
|
|
277
|
+
if (!bestSnapshot) {
|
|
278
|
+
bestSnapshot = snapshot;
|
|
279
|
+
bestCoveredCount = coveredLatest;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// ── Step 5: Compute the uncovered set ─────────────────────────────
|
|
283
|
+
// These are the entries that the selected snapshot does NOT already include.
|
|
284
|
+
// If no snapshot was selected, the entire latestReachable set is uncovered.
|
|
285
|
+
const covered = coveredBySnapshot(bestSnapshot, replayById);
|
|
286
|
+
const uncovered = new Set();
|
|
287
|
+
for (const id of latestReachable) {
|
|
288
|
+
if (!covered.has(id)) {
|
|
289
|
+
uncovered.add(id);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// ── Step 6: Sort uncovered entries in dependency-first order ──────
|
|
293
|
+
// This guarantees that Automerge.applyChanges sees each change only after
|
|
294
|
+
// all of its causal predecessors have already been applied.
|
|
295
|
+
const entryIdsToApply = topologicalByDependencies(uncovered, replayById);
|
|
296
|
+
return {
|
|
297
|
+
docId,
|
|
298
|
+
snapshotEntryId: bestSnapshot ? bestSnapshot.id : null,
|
|
299
|
+
entryIdsToApply,
|
|
300
|
+
diagnostics: options?.includeDiagnostics
|
|
301
|
+
? {
|
|
302
|
+
headEntryIds: latestHeads,
|
|
303
|
+
coveredLatestEntryCount: bestCoveredCount < 0 ? 0 : bestCoveredCount,
|
|
304
|
+
uncoveredLatestEntryCount: uncovered.size,
|
|
305
|
+
}
|
|
306
|
+
: undefined,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Computes plans for many documents in one metadata pass.
|
|
311
|
+
*
|
|
312
|
+
* Batch planning is important for networked stores to reduce request/response
|
|
313
|
+
* chattiness during startup and dense sync operations.
|
|
314
|
+
*/
|
|
315
|
+
function computeBatchMaterializationPlan(allEntries, docIds, options) {
|
|
316
|
+
const byDoc = new Map();
|
|
317
|
+
for (const entry of allEntries) {
|
|
318
|
+
if (!byDoc.has(entry.docId)) {
|
|
319
|
+
byDoc.set(entry.docId, []);
|
|
320
|
+
}
|
|
321
|
+
byDoc.get(entry.docId).push(entry);
|
|
322
|
+
}
|
|
323
|
+
const plans = docIds.map((docId) => computeDocumentMaterializationPlan(docId, byDoc.get(docId) || [], options));
|
|
324
|
+
return { plans };
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=MaterializationPlanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaterializationPlanner.js","sourceRoot":"","sources":["../../../src/core/appendonlystores/MaterializationPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { StoreEntry, StoreEntryMetadata, StoreEntryType, StoreScanCursor, StoreScanFilters, StoreScanResult, StoreIdBloomSummary, StoreCompactionStatus } from "../../types";
|
|
2
|
+
import type { AttachmentReadPlan, AttachmentReadPlanOptions, DocumentMaterializationBatchPlan, DocumentMaterializationPlan, MaterializationPlanOptions } from "../types";
|
|
2
3
|
import type { NetworkEncryptedEntry, AuthResult, NetworkSyncCapabilities } from "./types";
|
|
3
4
|
/**
|
|
4
5
|
* Abstract interface for network communication in MindooDB sync.
|
|
@@ -19,6 +20,12 @@ import type { NetworkEncryptedEntry, AuthResult, NetworkSyncCapabilities } from
|
|
|
19
20
|
* - Entry payloads are RSA-encrypted with recipient's public key
|
|
20
21
|
*/
|
|
21
22
|
export interface NetworkTransport {
|
|
23
|
+
/**
|
|
24
|
+
* Optional stable identifier for this transport (e.g. the server URL).
|
|
25
|
+
* Used for local cache scoping so the same DB opened against different
|
|
26
|
+
* servers produces different cache entries.
|
|
27
|
+
*/
|
|
28
|
+
getIdentity?(): string;
|
|
22
29
|
/**
|
|
23
30
|
* Request a challenge string for authentication.
|
|
24
31
|
*
|
|
@@ -105,6 +112,21 @@ export interface NetworkTransport {
|
|
|
105
112
|
* Optional compaction observability for remote store monitoring.
|
|
106
113
|
*/
|
|
107
114
|
getCompactionStatus?(token: string): Promise<StoreCompactionStatus>;
|
|
115
|
+
/**
|
|
116
|
+
* Compute a causal materialization plan for one document on the remote store.
|
|
117
|
+
*/
|
|
118
|
+
planDocumentMaterialization?(token: string, docId: string, options?: MaterializationPlanOptions): Promise<DocumentMaterializationPlan>;
|
|
119
|
+
/**
|
|
120
|
+
* Compute causal materialization plans for multiple documents on the remote store.
|
|
121
|
+
*/
|
|
122
|
+
planDocumentMaterializationBatch?(token: string, docIds: string[], options?: MaterializationPlanOptions): Promise<DocumentMaterializationBatchPlan>;
|
|
123
|
+
/**
|
|
124
|
+
* Compute an attachment read plan on the remote store.
|
|
125
|
+
*
|
|
126
|
+
* This allows the remote side to walk its local attachment metadata and
|
|
127
|
+
* return a backend-agnostic chunk plan to the client with a single request.
|
|
128
|
+
*/
|
|
129
|
+
planAttachmentReadByWalkingMetadata?(token: string, lastChunkId: string, attachmentSize: number, options: AttachmentReadPlanOptions): Promise<AttachmentReadPlan>;
|
|
108
130
|
/**
|
|
109
131
|
* Get entries from the remote store.
|
|
110
132
|
*
|
|
@@ -119,6 +141,17 @@ export interface NetworkTransport {
|
|
|
119
141
|
* @throws NetworkError with type USER_REVOKED if user has been revoked since token was issued
|
|
120
142
|
*/
|
|
121
143
|
getEntries(token: string, ids: string[]): Promise<NetworkEncryptedEntry[]>;
|
|
144
|
+
/**
|
|
145
|
+
* Get metadata for a single entry from the remote store.
|
|
146
|
+
*
|
|
147
|
+
* Useful for metadata-first dependency planning where the payload is not
|
|
148
|
+
* needed yet.
|
|
149
|
+
*
|
|
150
|
+
* @param token JWT access token from authenticate()
|
|
151
|
+
* @param id The entry ID to retrieve metadata for
|
|
152
|
+
* @returns The entry metadata, or null if the entry does not exist
|
|
153
|
+
*/
|
|
154
|
+
getEntryMetadata(token: string, id: string): Promise<StoreEntryMetadata | null>;
|
|
122
155
|
/**
|
|
123
156
|
* Push entries to the remote store.
|
|
124
157
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkTransport.d.ts","sourceRoot":"","sources":["../../../../src/core/appendonlystores/network/NetworkTransport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NetworkTransport.d.ts","sourceRoot":"","sources":["../../../../src/core/appendonlystores/network/NetworkTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -111,10 +111,43 @@ export interface AuthResult {
|
|
|
111
111
|
* Used by clients to choose fast paths while preserving compatibility.
|
|
112
112
|
*/
|
|
113
113
|
export interface NetworkSyncCapabilities {
|
|
114
|
+
/**
|
|
115
|
+
* Version of the advertised sync protocol shape.
|
|
116
|
+
* Useful for coarse compatibility checks and rollout diagnostics.
|
|
117
|
+
*/
|
|
114
118
|
protocolVersion: string;
|
|
119
|
+
/**
|
|
120
|
+
* Remote store supports cursor-based metadata scans via `scanEntriesSince()`.
|
|
121
|
+
* Clients can avoid full known-id exchanges when reconciling large stores.
|
|
122
|
+
*/
|
|
115
123
|
supportsCursorScan: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Remote store supports Bloom-filter summaries via `getIdBloomSummary()`.
|
|
126
|
+
* Clients can use probabilistic prefiltering before exact reconciliation.
|
|
127
|
+
*/
|
|
116
128
|
supportsIdBloomSummary: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Remote store exposes compaction/index observability via `getCompactionStatus()`.
|
|
131
|
+
* This is informational and used for monitoring/debugging rather than correctness.
|
|
132
|
+
*/
|
|
117
133
|
supportsCompactionStatus: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Remote store can compute a materialization plan for one document.
|
|
136
|
+
* Clients can ask the server which snapshot and change entries are needed
|
|
137
|
+
* instead of scanning and planning locally.
|
|
138
|
+
*/
|
|
139
|
+
supportsMaterializationPlanning: boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Remote store can compute materialization plans for multiple documents in one call.
|
|
142
|
+
* Clients can reduce round trips when opening or refreshing many documents.
|
|
143
|
+
*/
|
|
144
|
+
supportsBatchMaterializationPlanning: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Remote store can compute attachment read plans from chunk metadata.
|
|
147
|
+
* Clients can delegate attachment range planning to the server instead of
|
|
148
|
+
* walking attachment chunk metadata over the network.
|
|
149
|
+
*/
|
|
150
|
+
supportsAttachmentReadPlanning: boolean;
|
|
118
151
|
}
|
|
119
152
|
/**
|
|
120
153
|
* Network transport error types for error handling.
|
|
@@ -130,6 +163,8 @@ export declare enum NetworkErrorType {
|
|
|
130
163
|
CHALLENGE_EXPIRED = "CHALLENGE_EXPIRED",
|
|
131
164
|
/** Network communication error */
|
|
132
165
|
NETWORK_ERROR = "NETWORK_ERROR",
|
|
166
|
+
/** Request payload exceeded the remote server limit */
|
|
167
|
+
PAYLOAD_TOO_LARGE = "PAYLOAD_TOO_LARGE",
|
|
133
168
|
/** Server-side error */
|
|
134
169
|
SERVER_ERROR = "SERVER_ERROR",
|
|
135
170
|
/** User not found in directory */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/appendonlystores/network/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D;;;;;;;;;;OAUG;IACH,mBAAmB,EAAE,UAAU,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;IAChC,wBAAwB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/appendonlystores/network/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D;;;;;;;;;;OAUG;IACH,mBAAmB,EAAE,UAAU,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,wBAAwB,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,+BAA+B,EAAE,OAAO,CAAC;IACzC;;;OAGG;IACH,oCAAoC,EAAE,OAAO,CAAC;IAC9C;;;;OAIG;IACH,8BAA8B,EAAE,OAAO,CAAC;CACzC;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,kCAAkC;IAClC,aAAa,kBAAkB;IAC/B,4BAA4B;IAC5B,YAAY,iBAAiB;IAC7B,oCAAoC;IACpC,iBAAiB,sBAAsB;IACvC,wCAAwC;IACxC,iBAAiB,sBAAsB;IACvC,kCAAkC;IAClC,aAAa,kBAAkB;IAC/B,uDAAuD;IACvD,iBAAiB,sBAAsB;IACvC,wBAAwB;IACxB,YAAY,iBAAiB;IAC7B,kCAAkC;IAClC,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAEnB,IAAI,EAAE,gBAAgB;gBAAtB,IAAI,EAAE,gBAAgB,EACtC,OAAO,EAAE,MAAM;CAKlB"}
|
|
@@ -16,6 +16,8 @@ var NetworkErrorType;
|
|
|
16
16
|
NetworkErrorType["CHALLENGE_EXPIRED"] = "CHALLENGE_EXPIRED";
|
|
17
17
|
/** Network communication error */
|
|
18
18
|
NetworkErrorType["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
19
|
+
/** Request payload exceeded the remote server limit */
|
|
20
|
+
NetworkErrorType["PAYLOAD_TOO_LARGE"] = "PAYLOAD_TOO_LARGE";
|
|
19
21
|
/** Server-side error */
|
|
20
22
|
NetworkErrorType["SERVER_ERROR"] = "SERVER_ERROR";
|
|
21
23
|
/** User not found in directory */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/appendonlystores/network/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/appendonlystores/network/types.ts"],"names":[],"mappings":";;;AAyKA;;GAEG;AACH,IAAY,gBAiBX;AAjBD,WAAY,gBAAgB;IAC1B,kCAAkC;IAClC,mDAA+B,CAAA;IAC/B,4BAA4B;IAC5B,iDAA6B,CAAA;IAC7B,oCAAoC;IACpC,2DAAuC,CAAA;IACvC,wCAAwC;IACxC,2DAAuC,CAAA;IACvC,kCAAkC;IAClC,mDAA+B,CAAA;IAC/B,uDAAuD;IACvD,2DAAuC,CAAA;IACvC,wBAAwB;IACxB,iDAA6B,CAAA;IAC7B,kCAAkC;IAClC,qDAAiC,CAAA;AACnC,CAAC,EAjBW,gBAAgB,gCAAhB,gBAAgB,QAiB3B;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,KAAK;IACrC,YACkB,IAAsB,EACtC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAkB;QAItC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AARD,oCAQC"}
|