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,22 @@
|
|
|
1
|
+
import type { AttachmentReadPlan, AttachmentReadPlanOptions, ContentAddressedStore } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Plans a plaintext attachment read by walking chunk metadata backward from the
|
|
4
|
+
* newest chunk (`lastChunkId`) toward the oldest chunk.
|
|
5
|
+
*
|
|
6
|
+
* Why the backward walk works:
|
|
7
|
+
* - attachment chunks form a reverse-linked list via `dependencyIds`
|
|
8
|
+
* - the attachment reference stores the total plaintext attachment size
|
|
9
|
+
* - each chunk metadata record stores its own plaintext size in `originalSize`
|
|
10
|
+
*
|
|
11
|
+
* With those three facts, the planner can reconstruct chunk byte boundaries
|
|
12
|
+
* from the tail of the file without relying on the current runtime
|
|
13
|
+
* `chunkSizeBytes`. This keeps range planning correct even if the attachment was
|
|
14
|
+
* written with a different chunk size than the reader currently uses.
|
|
15
|
+
*
|
|
16
|
+
* The returned plan is backend-agnostic. Store implementations can expose this
|
|
17
|
+
* helper through `planAttachmentReadByWalkingMetadata()` on the store interface,
|
|
18
|
+
* and `BaseMindooDB` can also call this helper directly as a fallback because it
|
|
19
|
+
* only depends on standard store methods like `getEntryMetadata()`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function planAttachmentReadByWalkingMetadata(store: ContentAddressedStore, lastChunkId: string, attachmentSize: number, options: AttachmentReadPlanOptions): Promise<AttachmentReadPlan>;
|
|
22
|
+
//# sourceMappingURL=AttachmentReadPlanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachmentReadPlanner.d.ts","sourceRoot":"","sources":["../../../src/core/appendonlystores/AttachmentReadPlanner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAElB,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAmGjB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,mCAAmC,CACvD,KAAK,EAAE,qBAAqB,EAC5B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAsC7B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.planAttachmentReadByWalkingMetadata = planAttachmentReadByWalkingMetadata;
|
|
4
|
+
/**
|
|
5
|
+
* Validates and normalizes a requested attachment byte range.
|
|
6
|
+
*
|
|
7
|
+
* The planner operates on the declared attachment size from the attachment
|
|
8
|
+
* reference, not on the database's current runtime `chunkSizeBytes`. This is
|
|
9
|
+
* what makes the resulting read plan stable even when attachments were written
|
|
10
|
+
* with a different chunk size than the one used by the current runtime.
|
|
11
|
+
*/
|
|
12
|
+
function normalizeAttachmentReadRange(attachmentSize, options) {
|
|
13
|
+
const endByteExclusive = options.endByteExclusive ?? attachmentSize;
|
|
14
|
+
if (options.startByte < 0 || endByteExclusive < options.startByte) {
|
|
15
|
+
throw new Error(`Invalid byte range: [${options.startByte}, ${endByteExclusive})`);
|
|
16
|
+
}
|
|
17
|
+
if (endByteExclusive > attachmentSize) {
|
|
18
|
+
throw new Error(`End byte ${endByteExclusive} exceeds attachment size ${attachmentSize}`);
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
startByte: options.startByte,
|
|
22
|
+
endByteExclusive,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Verifies that the fetched metadata belongs to a valid attachment chunk.
|
|
27
|
+
*
|
|
28
|
+
* The planner depends only on metadata, so it must fail early if the chain is
|
|
29
|
+
* malformed. In particular, attachment chunks are expected to form a simple
|
|
30
|
+
* singly-linked list through `dependencyIds[0]`.
|
|
31
|
+
*/
|
|
32
|
+
function validateAttachmentChunkMetadata(metadata, id) {
|
|
33
|
+
if (!metadata) {
|
|
34
|
+
throw new Error(`Attachment chunk ${id} not found in store`);
|
|
35
|
+
}
|
|
36
|
+
if (metadata.entryType !== "attachment_chunk") {
|
|
37
|
+
throw new Error(`Entry ${id} is not an attachment chunk`);
|
|
38
|
+
}
|
|
39
|
+
if (metadata.dependencyIds.length > 1) {
|
|
40
|
+
throw new Error(`Attachment chunk ${id} has unexpected dependency fanout`);
|
|
41
|
+
}
|
|
42
|
+
if (metadata.originalSize <= 0) {
|
|
43
|
+
throw new Error(`Attachment chunk ${id} has invalid originalSize ${metadata.originalSize}`);
|
|
44
|
+
}
|
|
45
|
+
return metadata;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Builds the final read plan object once the relevant chunks are known.
|
|
49
|
+
*
|
|
50
|
+
* `offsetInFirstChunk` tells callers how many plaintext bytes to skip from the
|
|
51
|
+
* first fetched chunk before yielding or copying data to the final consumer.
|
|
52
|
+
*/
|
|
53
|
+
function finalizeAttachmentReadPlan(attachmentSize, range, chunkPlans) {
|
|
54
|
+
if (range.startByte === range.endByteExclusive) {
|
|
55
|
+
return {
|
|
56
|
+
attachmentSize,
|
|
57
|
+
startByte: range.startByte,
|
|
58
|
+
endByteExclusive: range.endByteExclusive,
|
|
59
|
+
chunkPlans: [],
|
|
60
|
+
offsetInFirstChunk: 0,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (chunkPlans.length === 0) {
|
|
64
|
+
throw new Error(`Attachment chunk plan for range [${range.startByte}, ${range.endByteExclusive}) produced no chunks`);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
attachmentSize,
|
|
68
|
+
startByte: range.startByte,
|
|
69
|
+
endByteExclusive: range.endByteExclusive,
|
|
70
|
+
chunkPlans,
|
|
71
|
+
offsetInFirstChunk: range.startByte - chunkPlans[0].startByte,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Plans a plaintext attachment read by walking chunk metadata backward from the
|
|
76
|
+
* newest chunk (`lastChunkId`) toward the oldest chunk.
|
|
77
|
+
*
|
|
78
|
+
* Why the backward walk works:
|
|
79
|
+
* - attachment chunks form a reverse-linked list via `dependencyIds`
|
|
80
|
+
* - the attachment reference stores the total plaintext attachment size
|
|
81
|
+
* - each chunk metadata record stores its own plaintext size in `originalSize`
|
|
82
|
+
*
|
|
83
|
+
* With those three facts, the planner can reconstruct chunk byte boundaries
|
|
84
|
+
* from the tail of the file without relying on the current runtime
|
|
85
|
+
* `chunkSizeBytes`. This keeps range planning correct even if the attachment was
|
|
86
|
+
* written with a different chunk size than the reader currently uses.
|
|
87
|
+
*
|
|
88
|
+
* The returned plan is backend-agnostic. Store implementations can expose this
|
|
89
|
+
* helper through `planAttachmentReadByWalkingMetadata()` on the store interface,
|
|
90
|
+
* and `BaseMindooDB` can also call this helper directly as a fallback because it
|
|
91
|
+
* only depends on standard store methods like `getEntryMetadata()`.
|
|
92
|
+
*/
|
|
93
|
+
async function planAttachmentReadByWalkingMetadata(store, lastChunkId, attachmentSize, options) {
|
|
94
|
+
const range = normalizeAttachmentReadRange(attachmentSize, options);
|
|
95
|
+
if (range.startByte === range.endByteExclusive || attachmentSize === 0) {
|
|
96
|
+
return finalizeAttachmentReadPlan(attachmentSize, range, []);
|
|
97
|
+
}
|
|
98
|
+
const reverseChunkPlans = [];
|
|
99
|
+
let currentId = lastChunkId;
|
|
100
|
+
let currentChunkEnd = attachmentSize;
|
|
101
|
+
while (currentId && currentChunkEnd > range.startByte) {
|
|
102
|
+
const metadata = validateAttachmentChunkMetadata(await store.getEntryMetadata(currentId), currentId);
|
|
103
|
+
const currentChunkStart = currentChunkEnd - metadata.originalSize;
|
|
104
|
+
if (currentChunkStart < 0) {
|
|
105
|
+
throw new Error(`Attachment chunk ${currentId} exceeds declared attachment size ${attachmentSize}`);
|
|
106
|
+
}
|
|
107
|
+
if (currentChunkEnd > range.startByte && currentChunkStart < range.endByteExclusive) {
|
|
108
|
+
reverseChunkPlans.push({
|
|
109
|
+
id: currentId,
|
|
110
|
+
startByte: currentChunkStart,
|
|
111
|
+
endByteExclusive: currentChunkEnd,
|
|
112
|
+
originalSize: metadata.originalSize,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
currentId = metadata.dependencyIds[0] ?? null;
|
|
116
|
+
currentChunkEnd = currentChunkStart;
|
|
117
|
+
}
|
|
118
|
+
if (!currentId && currentChunkEnd > range.startByte) {
|
|
119
|
+
throw new Error(`Attachment chunk chain ended before covering declared attachment size ${attachmentSize}`);
|
|
120
|
+
}
|
|
121
|
+
reverseChunkPlans.reverse();
|
|
122
|
+
return finalizeAttachmentReadPlan(attachmentSize, range, reverseChunkPlans);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=AttachmentReadPlanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachmentReadPlanner.js","sourceRoot":"","sources":["../../../src/core/appendonlystores/AttachmentReadPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ContentAddressedStore, ContentAddressedStoreFactory, CreateStoreResult, OpenStoreOptions, StoreIndexBuildStatus, AwaitIndexReadyOptions, StoreScanCursor, StoreScanFilters, StoreScanResult, StoreIdBloomSummary } from "./types";
|
|
1
|
+
import { AttachmentReadPlan, AttachmentReadPlanOptions, ContentAddressedStore, ContentAddressedStoreFactory, CreateStoreResult, DocumentMaterializationBatchPlan, DocumentMaterializationPlan, MaterializationPlanOptions, OpenStoreOptions, StoreIndexBuildStatus, AwaitIndexReadyOptions, StoreScanCursor, StoreScanFilters, StoreScanResult, StoreIdBloomSummary } from "./types";
|
|
2
2
|
import type { StoreEntry, StoreEntryMetadata, StoreEntryType } from "../types";
|
|
3
3
|
import { Logger } from "../logging";
|
|
4
4
|
/**
|
|
@@ -21,6 +21,8 @@ export declare class InMemoryContentAddressedStore implements ContentAddressedSt
|
|
|
21
21
|
private docIndex;
|
|
22
22
|
/** Cached sorted entries for efficient cursor-based scanning (invalidated on mutation) */
|
|
23
23
|
private sortedEntriesCache;
|
|
24
|
+
/** Monotonic local insertion order assigned when entries are persisted. */
|
|
25
|
+
private nextReceiptOrder;
|
|
24
26
|
/** Reference count per contentHash for O(1) orphan detection during purge */
|
|
25
27
|
private contentRefCount;
|
|
26
28
|
private logger;
|
|
@@ -44,6 +46,8 @@ export declare class InMemoryContentAddressedStore implements ContentAddressedSt
|
|
|
44
46
|
* @return A list of entries (may be shorter than input if some don't exist)
|
|
45
47
|
*/
|
|
46
48
|
getEntries(ids: string[]): Promise<StoreEntry[]>;
|
|
49
|
+
getEntryMetadata(id: string): Promise<StoreEntryMetadata | null>;
|
|
50
|
+
planAttachmentReadByWalkingMetadata(lastChunkId: string, attachmentSize: number, options: AttachmentReadPlanOptions): Promise<AttachmentReadPlan>;
|
|
47
51
|
/**
|
|
48
52
|
* Check which IDs from the provided list exist in this store.
|
|
49
53
|
*
|
|
@@ -79,13 +83,13 @@ export declare class InMemoryContentAddressedStore implements ContentAddressedSt
|
|
|
79
83
|
*/
|
|
80
84
|
getAllIds(): Promise<string[]>;
|
|
81
85
|
/**
|
|
82
|
-
* Return all entries sorted by (
|
|
86
|
+
* Return all entries sorted by (receiptOrder ASC, id ASC).
|
|
83
87
|
* Result is cached and invalidated on mutation for amortized O(1) access.
|
|
84
88
|
*/
|
|
85
89
|
private getSortedEntries;
|
|
86
90
|
/**
|
|
87
91
|
* Binary search for the index of the first entry strictly after `cursor`
|
|
88
|
-
* in the sorted (
|
|
92
|
+
* in the sorted (receiptOrder, id) order.
|
|
89
93
|
* Returns sorted.length when no entry comes after the cursor.
|
|
90
94
|
*/
|
|
91
95
|
private binarySearchAfterCursor;
|
|
@@ -93,13 +97,15 @@ export declare class InMemoryContentAddressedStore implements ContentAddressedSt
|
|
|
93
97
|
private matchesScanFilters;
|
|
94
98
|
/**
|
|
95
99
|
* Cursor-based metadata scan for high-volume synchronization.
|
|
96
|
-
* Ordering:
|
|
100
|
+
* Ordering: receiptOrder ASC, id ASC.
|
|
97
101
|
*
|
|
98
102
|
* Uses a cached sorted index with binary search for O(log n) cursor
|
|
99
103
|
* lookup instead of re-sorting all entries on every call.
|
|
100
104
|
*/
|
|
101
105
|
scanEntriesSince(cursor: StoreScanCursor | null, limit?: number, filters?: StoreScanFilters): Promise<StoreScanResult>;
|
|
102
106
|
getIdBloomSummary(): Promise<StoreIdBloomSummary>;
|
|
107
|
+
planDocumentMaterialization(docId: string, options?: MaterializationPlanOptions): Promise<DocumentMaterializationPlan>;
|
|
108
|
+
planDocumentMaterializationBatch(docIds: string[], options?: MaterializationPlanOptions): Promise<DocumentMaterializationBatchPlan>;
|
|
103
109
|
/**
|
|
104
110
|
* Resolve the dependency chain starting from an entry ID.
|
|
105
111
|
* Returns IDs in dependency order (oldest first), traversing backward through dependencyIds.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryContentAddressedStore.d.ts","sourceRoot":"","sources":["../../../src/core/appendonlystores/InMemoryContentAddressedStore.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACpB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"InMemoryContentAddressedStore.d.ts","sourceRoot":"","sources":["../../../src/core/appendonlystores/InMemoryContentAddressedStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InMemoryContentAddressedStoreFactory = exports.InMemoryContentAddressedStore = void 0;
|
|
4
|
+
const AttachmentReadPlanner_1 = require("./AttachmentReadPlanner");
|
|
4
5
|
const bloom_1 = require("./bloom");
|
|
6
|
+
const MaterializationPlanner_1 = require("./MaterializationPlanner");
|
|
5
7
|
const logging_1 = require("../logging");
|
|
6
8
|
/**
|
|
7
9
|
* A simple in-memory implementation of ContentAddressedStore for testing purposes.
|
|
@@ -23,6 +25,8 @@ class InMemoryContentAddressedStore {
|
|
|
23
25
|
this.docIndex = new Map(); // docId -> Set<entryId>
|
|
24
26
|
/** Cached sorted entries for efficient cursor-based scanning (invalidated on mutation) */
|
|
25
27
|
this.sortedEntriesCache = null;
|
|
28
|
+
/** Monotonic local insertion order assigned when entries are persisted. */
|
|
29
|
+
this.nextReceiptOrder = 1;
|
|
26
30
|
/** Reference count per contentHash for O(1) orphan detection during purge */
|
|
27
31
|
this.contentRefCount = new Map();
|
|
28
32
|
this.dbId = dbId;
|
|
@@ -50,7 +54,11 @@ class InMemoryContentAddressedStore {
|
|
|
50
54
|
continue;
|
|
51
55
|
}
|
|
52
56
|
// Separate metadata from encrypted data
|
|
53
|
-
const { encryptedData, ...
|
|
57
|
+
const { encryptedData, receiptOrder: _ignoredReceiptOrder, ...rest } = entry;
|
|
58
|
+
const metadata = {
|
|
59
|
+
...rest,
|
|
60
|
+
receiptOrder: this.nextReceiptOrder++,
|
|
61
|
+
};
|
|
54
62
|
// Store metadata by id
|
|
55
63
|
this.entries.set(entry.id, metadata);
|
|
56
64
|
// Store bytes by contentHash (deduplication happens here)
|
|
@@ -100,6 +108,12 @@ class InMemoryContentAddressedStore {
|
|
|
100
108
|
this.logger.debug(`Retrieved ${result.length} entries out of ${ids.length} requested`);
|
|
101
109
|
return result;
|
|
102
110
|
}
|
|
111
|
+
async getEntryMetadata(id) {
|
|
112
|
+
return this.entries.get(id) ?? null;
|
|
113
|
+
}
|
|
114
|
+
async planAttachmentReadByWalkingMetadata(lastChunkId, attachmentSize, options) {
|
|
115
|
+
return (0, AttachmentReadPlanner_1.planAttachmentReadByWalkingMetadata)(this, lastChunkId, attachmentSize, options);
|
|
116
|
+
}
|
|
103
117
|
/**
|
|
104
118
|
* Check which IDs from the provided list exist in this store.
|
|
105
119
|
*
|
|
@@ -195,21 +209,21 @@ class InMemoryContentAddressedStore {
|
|
|
195
209
|
return ids;
|
|
196
210
|
}
|
|
197
211
|
/**
|
|
198
|
-
* Return all entries sorted by (
|
|
212
|
+
* Return all entries sorted by (receiptOrder ASC, id ASC).
|
|
199
213
|
* Result is cached and invalidated on mutation for amortized O(1) access.
|
|
200
214
|
*/
|
|
201
215
|
getSortedEntries() {
|
|
202
216
|
if (!this.sortedEntriesCache) {
|
|
203
217
|
this.sortedEntriesCache = Array.from(this.entries.values())
|
|
204
|
-
.sort((a, b) => a.
|
|
218
|
+
.sort((a, b) => (a.receiptOrder ?? 0) === (b.receiptOrder ?? 0)
|
|
205
219
|
? a.id.localeCompare(b.id)
|
|
206
|
-
: a.
|
|
220
|
+
: (a.receiptOrder ?? 0) - (b.receiptOrder ?? 0));
|
|
207
221
|
}
|
|
208
222
|
return this.sortedEntriesCache;
|
|
209
223
|
}
|
|
210
224
|
/**
|
|
211
225
|
* Binary search for the index of the first entry strictly after `cursor`
|
|
212
|
-
* in the sorted (
|
|
226
|
+
* in the sorted (receiptOrder, id) order.
|
|
213
227
|
* Returns sorted.length when no entry comes after the cursor.
|
|
214
228
|
*/
|
|
215
229
|
binarySearchAfterCursor(sorted, cursor) {
|
|
@@ -218,8 +232,8 @@ class InMemoryContentAddressedStore {
|
|
|
218
232
|
while (lo < hi) {
|
|
219
233
|
const mid = (lo + hi) >>> 1;
|
|
220
234
|
const m = sorted[mid];
|
|
221
|
-
if (m.
|
|
222
|
-
(m.
|
|
235
|
+
if ((m.receiptOrder ?? 0) < cursor.receiptOrder ||
|
|
236
|
+
((m.receiptOrder ?? 0) === cursor.receiptOrder && m.id <= cursor.id)) {
|
|
223
237
|
lo = mid + 1;
|
|
224
238
|
}
|
|
225
239
|
else {
|
|
@@ -252,7 +266,7 @@ class InMemoryContentAddressedStore {
|
|
|
252
266
|
}
|
|
253
267
|
/**
|
|
254
268
|
* Cursor-based metadata scan for high-volume synchronization.
|
|
255
|
-
* Ordering:
|
|
269
|
+
* Ordering: receiptOrder ASC, id ASC.
|
|
256
270
|
*
|
|
257
271
|
* Uses a cached sorted index with binary search for O(log n) cursor
|
|
258
272
|
* lookup instead of re-sorting all entries on every call.
|
|
@@ -282,7 +296,7 @@ class InMemoryContentAddressedStore {
|
|
|
282
296
|
return {
|
|
283
297
|
entries: page,
|
|
284
298
|
nextCursor: last
|
|
285
|
-
? {
|
|
299
|
+
? { receiptOrder: last.receiptOrder ?? 0, id: last.id }
|
|
286
300
|
: cursor,
|
|
287
301
|
hasMore,
|
|
288
302
|
};
|
|
@@ -291,6 +305,27 @@ class InMemoryContentAddressedStore {
|
|
|
291
305
|
const ids = await this.getAllIds();
|
|
292
306
|
return (0, bloom_1.createIdBloomSummary)(ids);
|
|
293
307
|
}
|
|
308
|
+
async planDocumentMaterialization(docId, options) {
|
|
309
|
+
const entries = [];
|
|
310
|
+
const ids = this.docIndex.get(docId);
|
|
311
|
+
if (ids) {
|
|
312
|
+
for (const id of ids) {
|
|
313
|
+
const meta = this.entries.get(id);
|
|
314
|
+
if (meta) {
|
|
315
|
+
entries.push(meta);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return (0, MaterializationPlanner_1.computeDocumentMaterializationPlan)(docId, entries, options);
|
|
320
|
+
}
|
|
321
|
+
async planDocumentMaterializationBatch(docIds, options) {
|
|
322
|
+
// Reuse a single metadata pass for deterministic planning.
|
|
323
|
+
const allEntries = [];
|
|
324
|
+
for (const [, meta] of this.entries) {
|
|
325
|
+
allEntries.push(meta);
|
|
326
|
+
}
|
|
327
|
+
return (0, MaterializationPlanner_1.computeBatchMaterializationPlan)(allEntries, docIds, options);
|
|
328
|
+
}
|
|
294
329
|
/**
|
|
295
330
|
* Resolve the dependency chain starting from an entry ID.
|
|
296
331
|
* Returns IDs in dependency order (oldest first), traversing backward through dependencyIds.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryContentAddressedStore.js","sourceRoot":"","sources":["../../../src/core/appendonlystores/InMemoryContentAddressedStore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InMemoryContentAddressedStore.js","sourceRoot":"","sources":["../../../src/core/appendonlystores/InMemoryContentAddressedStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { StoreEntryMetadata } from "../types";
|
|
2
|
+
import type { DocumentMaterializationBatchPlan, DocumentMaterializationPlan, MaterializationPlanOptions } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Produces a stable, dependency-first ordering of replay entries using
|
|
5
|
+
* Kahn's algorithm for topological sorting.
|
|
6
|
+
*
|
|
7
|
+
* The caller passes a set of entry IDs that need to be replayed (the
|
|
8
|
+
* "uncovered" set from {@link computeDocumentMaterializationPlan}) and the
|
|
9
|
+
* full metadata map so the function can inspect each entry's
|
|
10
|
+
* `dependencyIds`. The result is an array where every entry appears
|
|
11
|
+
* *after* all of its causal predecessors, which is the order
|
|
12
|
+
* `Automerge.applyChanges` requires to apply changes correctly.
|
|
13
|
+
*
|
|
14
|
+
* **Why Kahn's algorithm?** It processes nodes in BFS order starting from
|
|
15
|
+
* roots (entries with no in-set dependencies), decrementing the in-degree
|
|
16
|
+
* of each dependent as its predecessors are emitted. This naturally
|
|
17
|
+
* produces a valid topological order for any DAG.
|
|
18
|
+
*
|
|
19
|
+
* **Determinism:** When multiple entries become ready at the same time
|
|
20
|
+
* (in-degree drops to zero simultaneously), the queue is sorted
|
|
21
|
+
* lexicographically before the next dequeue. This guarantees the same
|
|
22
|
+
* output regardless of `Set` or `Map` iteration order, which can vary
|
|
23
|
+
* across JavaScript engines and process runs.
|
|
24
|
+
*
|
|
25
|
+
* **Cycle safety:** In a well-formed Automerge DAG, cycles are impossible.
|
|
26
|
+
* However, if corrupted metadata somehow introduces a cycle, the algorithm
|
|
27
|
+
* detects it (ordered.length < ids.size) and falls back to a simple
|
|
28
|
+
* lexicographic sort so the caller still receives a complete list rather
|
|
29
|
+
* than a partial one.
|
|
30
|
+
*
|
|
31
|
+
* @param ids The entry IDs to sort (typically the uncovered set).
|
|
32
|
+
* @param replayById Lookup map from entry ID to its metadata, used to
|
|
33
|
+
* read `dependencyIds` for graph edges.
|
|
34
|
+
* @returns Entry IDs in dependency-first order suitable for sequential
|
|
35
|
+
* application to an Automerge document.
|
|
36
|
+
*/
|
|
37
|
+
export declare function topologicalByDependencies(ids: Set<string>, replayById: Map<string, StoreEntryMetadata>): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Computes a causal materialization plan for one document.
|
|
40
|
+
*
|
|
41
|
+
* Given all store entries for a document, this function answers two questions:
|
|
42
|
+
*
|
|
43
|
+
* 1. **Which snapshot should we load first?**
|
|
44
|
+
* The planner evaluates every `doc_snapshot` entry and selects the one whose
|
|
45
|
+
* causal coverage overlaps the most with the entries needed for the latest
|
|
46
|
+
* document state. A snapshot that covers 90% of the DAG means only 10%
|
|
47
|
+
* of entries need to be replayed — a large win for documents with long
|
|
48
|
+
* histories. When two snapshots cover the same number of latest-state
|
|
49
|
+
* entries, the newer one (by `createdAt`) wins as a deterministic
|
|
50
|
+
* tie-breaker. Correctness never depends on timestamps.
|
|
51
|
+
*
|
|
52
|
+
* 2. **Which change entries must be replayed on top of that snapshot?**
|
|
53
|
+
* Every entry in the latest-state DAG that is *not* causally covered by
|
|
54
|
+
* the selected snapshot is collected and sorted in dependency-first
|
|
55
|
+
* (topological) order. This is the minimal set of Automerge changes
|
|
56
|
+
* the caller must decrypt and apply to reach the current document state.
|
|
57
|
+
*
|
|
58
|
+
* Snapshot selection strategy:
|
|
59
|
+
* - Choose the snapshot with maximal overlap against `latestReachable`.
|
|
60
|
+
* - Break equal-coverage ties by newer `createdAt` (optimization only).
|
|
61
|
+
* - If no snapshots exist, all replay entries are returned (full rebuild).
|
|
62
|
+
*
|
|
63
|
+
* Attachment entries (`attachment_chunk`) are never included — the planner
|
|
64
|
+
* operates exclusively on `doc_create`, `doc_change`, and `doc_delete`
|
|
65
|
+
* entries (the types tracked by `DOC_REPLAY_TYPES`).
|
|
66
|
+
*
|
|
67
|
+
* @param docId The document to plan for.
|
|
68
|
+
* @param allEntriesForDoc Every entry metadata record for this document,
|
|
69
|
+
* including snapshots and attachments (attachments
|
|
70
|
+
* are filtered out internally).
|
|
71
|
+
* @param options Pass `{ includeDiagnostics: true }` to populate the
|
|
72
|
+
* `diagnostics` field with head IDs and coverage counts.
|
|
73
|
+
* @returns A plan containing the snapshot to load (if any) and the ordered
|
|
74
|
+
* list of entry IDs to apply afterwards.
|
|
75
|
+
*/
|
|
76
|
+
export declare function computeDocumentMaterializationPlan(docId: string, allEntriesForDoc: StoreEntryMetadata[], options?: MaterializationPlanOptions): DocumentMaterializationPlan;
|
|
77
|
+
/**
|
|
78
|
+
* Computes plans for many documents in one metadata pass.
|
|
79
|
+
*
|
|
80
|
+
* Batch planning is important for networked stores to reduce request/response
|
|
81
|
+
* chattiness during startup and dense sync operations.
|
|
82
|
+
*/
|
|
83
|
+
export declare function computeBatchMaterializationPlan(allEntries: StoreEntryMetadata[], docIds: string[], options?: MaterializationPlanOptions): DocumentMaterializationBatchPlan;
|
|
84
|
+
//# sourceMappingURL=MaterializationPlanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaterializationPlanner.d.ts","sourceRoot":"","sources":["../../../src/core/appendonlystores/MaterializationPlanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EACV,gCAAgC,EAChC,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAiHjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAChB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAC1C,MAAM,EAAE,CAmDV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,OAAO,CAAC,EAAE,0BAA0B,GACnC,2BAA2B,CA8F7B;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,kBAAkB,EAAE,EAChC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE,0BAA0B,GACnC,gCAAgC,CAclC"}
|