@dxos/echo-pipeline 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc
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 +102 -5
- package/README.md +1 -1
- package/dist/lib/{browser/chunk-WJJXJTNS.mjs → neutral/chunk-46DCRDA7.mjs} +44 -13
- package/dist/lib/neutral/chunk-46DCRDA7.mjs.map +7 -0
- package/dist/lib/{browser/chunk-FR6GJ4S4.mjs → neutral/chunk-LR7UFVQX.mjs} +145 -618
- package/dist/lib/neutral/chunk-LR7UFVQX.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/filter/index.mjs +1 -2
- package/dist/lib/neutral/index.mjs +7332 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/{browser → neutral}/testing/index.mjs +49 -292
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/types/src/automerge/automerge-host-subduction.test.d.ts +2 -0
- package/dist/types/src/automerge/automerge-host-subduction.test.d.ts.map +1 -0
- package/dist/types/src/automerge/automerge-host.d.ts +105 -27
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/automerge-repo-subduction.test.d.ts +2 -0
- package/dist/types/src/automerge/automerge-repo-subduction.test.d.ts.map +1 -0
- package/dist/types/src/automerge/automerge-repo.test.d.ts +1 -1
- package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -1
- package/dist/types/src/automerge/automerge-subduction.test.d.ts +2 -0
- package/dist/types/src/automerge/automerge-subduction.test.d.ts.map +1 -0
- package/dist/types/src/automerge/collection-synchronizer.d.ts +22 -2
- package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-data-monitor.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-network-adapter.d.ts +17 -11
- package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-replicator.d.ts +28 -16
- package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
- package/dist/types/src/automerge/errors.d.ts +35 -0
- package/dist/types/src/automerge/errors.d.ts.map +1 -0
- package/dist/types/src/automerge/handle-state.d.ts +52 -0
- package/dist/types/src/automerge/handle-state.d.ts.map +1 -0
- package/dist/types/src/automerge/heads-store.d.ts +9 -2
- package/dist/types/src/automerge/heads-store.d.ts.map +1 -1
- package/dist/types/src/automerge/index.d.ts +2 -0
- package/dist/types/src/automerge/index.d.ts.map +1 -1
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +10 -4
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts +8 -8
- package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts.map +1 -1
- package/dist/types/src/automerge/mesh-echo-replicator.d.ts +6 -5
- package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
- package/dist/types/src/automerge/network-protocol.d.ts.map +1 -1
- package/dist/types/src/automerge/space-collection.d.ts.map +1 -1
- package/dist/types/src/common/feeds.d.ts.map +1 -1
- package/dist/types/src/common/space-id.d.ts.map +1 -1
- package/dist/types/src/db-host/automerge-data-source.d.ts +35 -0
- package/dist/types/src/db-host/automerge-data-source.d.ts.map +1 -0
- package/dist/types/src/db-host/automerge-data-source.test.d.ts +2 -0
- package/dist/types/src/db-host/automerge-data-source.test.d.ts.map +1 -0
- package/dist/types/src/db-host/automerge-metrics.d.ts.map +1 -1
- package/dist/types/src/db-host/data-service.d.ts +12 -6
- package/dist/types/src/db-host/data-service.d.ts.map +1 -1
- package/dist/types/src/db-host/database-root.d.ts +9 -3
- package/dist/types/src/db-host/database-root.d.ts.map +1 -1
- package/dist/types/src/db-host/documents-synchronizer.d.ts +30 -8
- package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
- package/dist/types/src/db-host/echo-host.d.ts +74 -28
- package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
- package/dist/types/src/db-host/index.d.ts +2 -0
- package/dist/types/src/db-host/index.d.ts.map +1 -1
- package/dist/types/src/db-host/invalidation-hint.d.ts +19 -0
- package/dist/types/src/db-host/invalidation-hint.d.ts.map +1 -0
- package/dist/types/src/db-host/local-queue-service.d.ts +19 -0
- package/dist/types/src/db-host/local-queue-service.d.ts.map +1 -0
- package/dist/types/src/db-host/query-invalidation.test.d.ts +2 -0
- package/dist/types/src/db-host/query-invalidation.test.d.ts.map +1 -0
- package/dist/types/src/db-host/query-service.d.ts +18 -10
- package/dist/types/src/db-host/query-service.d.ts.map +1 -1
- package/dist/types/src/db-host/queue-data-source.d.ts +38 -0
- package/dist/types/src/db-host/queue-data-source.d.ts.map +1 -0
- package/dist/types/src/db-host/queue-service.test.d.ts +2 -0
- package/dist/types/src/db-host/queue-service.test.d.ts.map +1 -0
- package/dist/types/src/db-host/space-state-manager.d.ts +3 -2
- package/dist/types/src/db-host/space-state-manager.d.ts.map +1 -1
- package/dist/types/src/db-host/stub.d.ts +11 -0
- package/dist/types/src/db-host/stub.d.ts.map +1 -0
- package/dist/types/src/edge/echo-edge-replicator.d.ts +7 -6
- package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
- package/dist/types/src/edge/echo-edge-subduction-replicator.d.ts +39 -0
- package/dist/types/src/edge/echo-edge-subduction-replicator.d.ts.map +1 -0
- package/dist/types/src/edge/echo-edge-subduction-replicator.test.d.ts +2 -0
- package/dist/types/src/edge/echo-edge-subduction-replicator.test.d.ts.map +1 -0
- package/dist/types/src/edge/index.d.ts +1 -0
- package/dist/types/src/edge/index.d.ts.map +1 -1
- package/dist/types/src/edge/inflight-request-limiter.d.ts.map +1 -1
- package/dist/types/src/filter/filter-match.d.ts +1 -1
- package/dist/types/src/filter/filter-match.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/pipeline/message-selector.d.ts.map +1 -1
- package/dist/types/src/pipeline/pipeline.d.ts +2 -2
- package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
- package/dist/types/src/pipeline/timeframe-clock.d.ts.map +1 -1
- package/dist/types/src/query/errors.d.ts +16 -20
- package/dist/types/src/query/errors.d.ts.map +1 -1
- package/dist/types/src/query/plan.d.ts +59 -8
- package/dist/types/src/query/plan.d.ts.map +1 -1
- package/dist/types/src/query/query-executor.d.ts +55 -12
- package/dist/types/src/query/query-executor.d.ts.map +1 -1
- package/dist/types/src/query/query-planner.d.ts +10 -1
- package/dist/types/src/query/query-planner.d.ts.map +1 -1
- package/dist/types/src/space/admission-discovery-extension.d.ts.map +1 -1
- package/dist/types/src/space/auth.d.ts +3 -3
- package/dist/types/src/space/auth.d.ts.map +1 -1
- package/dist/types/src/space/control-pipeline.d.ts +4 -3
- package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
- package/dist/types/src/space/space-manager.d.ts +7 -7
- package/dist/types/src/space/space-manager.d.ts.map +1 -1
- package/dist/types/src/space/space-protocol.d.ts +9 -8
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +5 -5
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/testing/change-metadata.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +0 -2
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
- package/dist/types/src/testing/test-feed-builder.d.ts.map +1 -1
- package/dist/types/src/testing/test-network-adapter.d.ts +1 -1
- package/dist/types/src/testing/test-network-adapter.d.ts.map +1 -1
- package/dist/types/src/testing/test-replicator.d.ts +13 -13
- package/dist/types/src/testing/test-replicator.d.ts.map +1 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +56 -54
- package/src/automerge/automerge-host-subduction.test.ts +263 -0
- package/src/automerge/automerge-host.test.ts +145 -32
- package/src/automerge/automerge-host.ts +442 -163
- package/src/automerge/automerge-repo-subduction.test.ts +1054 -0
- package/src/automerge/automerge-repo.test.ts +284 -77
- package/src/automerge/automerge-subduction.test.ts +330 -0
- package/src/automerge/collection-synchronizer.test.ts +96 -16
- package/src/automerge/collection-synchronizer.ts +125 -26
- package/src/automerge/echo-network-adapter.test.ts +2 -1
- package/src/automerge/echo-network-adapter.ts +44 -32
- package/src/automerge/echo-replicator.ts +30 -16
- package/src/automerge/errors.ts +10 -0
- package/src/automerge/handle-state.ts +62 -0
- package/src/automerge/heads-store.ts +42 -3
- package/src/automerge/index.ts +2 -0
- package/src/automerge/leveldb-storage-adapter.ts +70 -4
- package/src/automerge/mesh-echo-replicator-connection.ts +8 -8
- package/src/automerge/mesh-echo-replicator.ts +14 -11
- package/src/db-host/automerge-data-source.test.ts +299 -0
- package/src/db-host/automerge-data-source.ts +187 -0
- package/src/db-host/data-service.ts +27 -10
- package/src/db-host/database-root.ts +19 -7
- package/src/db-host/documents-synchronizer.test.ts +145 -14
- package/src/db-host/documents-synchronizer.ts +158 -59
- package/src/db-host/echo-host.ts +376 -90
- package/src/db-host/index.ts +2 -0
- package/src/db-host/invalidation-hint.ts +50 -0
- package/src/db-host/local-queue-service.ts +127 -0
- package/src/db-host/query-invalidation.test.ts +270 -0
- package/src/db-host/query-service.ts +108 -111
- package/src/db-host/queue-data-source.ts +160 -0
- package/src/db-host/queue-service.test.ts +145 -0
- package/src/db-host/space-state-manager.ts +11 -9
- package/src/db-host/stub.ts +33 -0
- package/src/edge/echo-edge-replicator.test.ts +9 -9
- package/src/edge/echo-edge-replicator.ts +50 -42
- package/src/edge/echo-edge-subduction-replicator.test.ts +158 -0
- package/src/edge/echo-edge-subduction-replicator.ts +377 -0
- package/src/edge/index.ts +1 -0
- package/src/filter/filter-match.test.ts +41 -25
- package/src/filter/filter-match.ts +75 -20
- package/src/metadata/metadata-store.ts +8 -5
- package/src/pipeline/pipeline-stress.test.ts +1 -3
- package/src/pipeline/pipeline.test.ts +0 -1
- package/src/pipeline/pipeline.ts +2 -3
- package/src/query/errors.ts +2 -2
- package/src/query/plan.ts +73 -9
- package/src/query/query-executor.ts +1064 -172
- package/src/query/query-planner.test.ts +854 -86
- package/src/query/query-planner.ts +444 -38
- package/src/space/admission-discovery-extension.ts +1 -1
- package/src/space/auth.ts +6 -6
- package/src/space/control-pipeline.test.ts +2 -2
- package/src/space/control-pipeline.ts +7 -7
- package/src/space/space-manager.ts +12 -17
- package/src/space/space-protocol.browser.test.ts +13 -12
- package/src/space/space-protocol.test.ts +13 -13
- package/src/space/space-protocol.ts +16 -15
- package/src/space/space.test.ts +2 -2
- package/src/space/space.ts +9 -10
- package/src/testing/index.ts +0 -2
- package/src/testing/test-agent-builder.ts +0 -1
- package/src/testing/test-network-adapter.ts +24 -3
- package/src/testing/test-replicator.ts +15 -20
- package/src/util.ts +7 -3
- package/dist/lib/browser/chunk-CGS2ULMK.mjs +0 -11
- package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +0 -7
- package/dist/lib/browser/chunk-FR6GJ4S4.mjs.map +0 -7
- package/dist/lib/browser/chunk-WJJXJTNS.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -5492
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JQCCVDLT.mjs +0 -2144
- package/dist/lib/node-esm/chunk-JQCCVDLT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-LEQ77KAT.mjs +0 -240
- package/dist/lib/node-esm/chunk-LEQ77KAT.mjs.map +0 -7
- package/dist/lib/node-esm/filter/index.mjs +0 -13
- package/dist/lib/node-esm/filter/index.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -5492
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/testing/index.mjs +0 -764
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/db-host/documents-iterator.d.ts +0 -7
- package/dist/types/src/db-host/documents-iterator.d.ts.map +0 -1
- package/dist/types/src/testing/test-data.d.ts +0 -18
- package/dist/types/src/testing/test-data.d.ts.map +0 -1
- package/dist/types/src/testing/test-schema.d.ts +0 -37
- package/dist/types/src/testing/test-schema.d.ts.map +0 -1
- package/src/db-host/documents-iterator.ts +0 -74
- package/src/testing/test-data.ts +0 -127
- package/src/testing/test-schema.ts +0 -53
- /package/dist/lib/{browser → neutral}/filter/index.mjs.map +0 -0
|
@@ -1,46 +1,69 @@
|
|
|
1
1
|
import { type Doc, type Heads } from '@automerge/automerge';
|
|
2
|
-
import { type AnyDocumentId, type DocHandle, type DocumentId, type
|
|
2
|
+
import { type AnyDocumentId, type DocHandle, type DocumentId, type DocumentQuery, type PeerId } from '@automerge/automerge-repo';
|
|
3
3
|
import { Event } from '@dxos/async';
|
|
4
4
|
import { Context, Resource } from '@dxos/context';
|
|
5
5
|
import { type CollectionId } from '@dxos/echo-protocol';
|
|
6
|
-
import { type IndexMetadataStore } from '@dxos/indexing';
|
|
7
6
|
import { PublicKey } from '@dxos/keys';
|
|
8
7
|
import { type LevelDB } from '@dxos/kv-store';
|
|
9
8
|
import { type SpaceSyncState } from '@dxos/protocols/proto/dxos/echo/service';
|
|
10
9
|
import { type DocHeadsList, type FlushRequest } from '@dxos/protocols/proto/dxos/echo/service';
|
|
11
10
|
import { type CollectionState } from './collection-synchronizer';
|
|
12
11
|
import { type EchoDataMonitor } from './echo-data-monitor';
|
|
13
|
-
import { type
|
|
12
|
+
import { type AutomergeReplicator } from './echo-replicator';
|
|
14
13
|
export type PeerIdProvider = () => string | undefined;
|
|
15
14
|
export type RootDocumentSpaceKeyProvider = (documentId: string) => PublicKey | undefined;
|
|
16
|
-
export type
|
|
15
|
+
export type AutomergeHostProps = {
|
|
17
16
|
db: LevelDB;
|
|
18
|
-
indexMetadataStore: IndexMetadataStore;
|
|
19
17
|
dataMonitor?: EchoDataMonitor;
|
|
20
18
|
/**
|
|
21
19
|
* Used for creating stable ids. A random key is generated on open, if no value is provided.
|
|
22
20
|
*/
|
|
23
21
|
peerIdProvider?: PeerIdProvider;
|
|
24
22
|
getSpaceKeyByRootDocumentId?: RootDocumentSpaceKeyProvider;
|
|
23
|
+
/**
|
|
24
|
+
* Enable Subduction sedimentree transport.
|
|
25
|
+
*
|
|
26
|
+
* When `false` (default), the host wires {@link EchoNetworkAdapter} as a classical
|
|
27
|
+
* automerge-repo network adapter and skips all Subduction-specific initialization
|
|
28
|
+
* (WASM init, signer generation, subduction policy / adapters). When `true`, the
|
|
29
|
+
* host runs Subduction as the document byte transport.
|
|
30
|
+
*/
|
|
31
|
+
useSubduction?: boolean;
|
|
25
32
|
};
|
|
26
33
|
export type LoadDocOptions = {
|
|
27
34
|
timeout?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Controls whether `loadDoc` is allowed to wait on the network.
|
|
37
|
+
*
|
|
38
|
+
* - `true` / unset (default): announce that we want the doc and wait
|
|
39
|
+
* until any source (storage OR network) delivers it.
|
|
40
|
+
* - `false`: probe local storage only. If chunks for the doc exist
|
|
41
|
+
* on disk, wait for storage to populate the handle; otherwise
|
|
42
|
+
* throw `'unavailable'` immediately without ever consulting the
|
|
43
|
+
* network. Note that this does not guarantee that the document
|
|
44
|
+
* will not be fetched from the network — an inbound peer announce
|
|
45
|
+
* can still deliver bytes — but the host will never request it.
|
|
46
|
+
*/
|
|
47
|
+
fetchFromNetwork?: boolean;
|
|
28
48
|
};
|
|
29
49
|
export type CreateDocOptions = {
|
|
30
50
|
/**
|
|
31
51
|
* Import the document together with its history.
|
|
32
52
|
*/
|
|
33
53
|
preserveHistory?: boolean;
|
|
34
|
-
|
|
35
|
-
export declare const FIND_PARAMS: {
|
|
36
|
-
allowableStates: ("requesting" | "ready")[];
|
|
54
|
+
documentId?: DocumentId;
|
|
37
55
|
};
|
|
38
56
|
/**
|
|
39
57
|
* Abstracts over the AutomergeRepo.
|
|
58
|
+
*
|
|
59
|
+
* Runs Subduction as the document byte transport ({@link Repo.subductionAdapters}), while
|
|
60
|
+
* the DXOS-specific {@link CollectionSynchronizer} rides on the same {@link EchoNetworkAdapter}
|
|
61
|
+
* via `sync-request` / `sync-state` control messages that are intercepted at the adapter
|
|
62
|
+
* level and never reach the Subduction sedimentree layer. Bundle sync remains available
|
|
63
|
+
* for replicators that opt in.
|
|
40
64
|
*/
|
|
41
65
|
export declare class AutomergeHost extends Resource {
|
|
42
66
|
private readonly _db;
|
|
43
|
-
private readonly _indexMetadataStore;
|
|
44
67
|
private readonly _echoNetworkAdapter;
|
|
45
68
|
private readonly _collectionSynchronizer;
|
|
46
69
|
private _repo;
|
|
@@ -63,43 +86,98 @@ export declare class AutomergeHost extends Resource {
|
|
|
63
86
|
readonly documentsSaved: Event<void>;
|
|
64
87
|
private readonly _headsUpdates;
|
|
65
88
|
private _onHeadsChangedTask?;
|
|
66
|
-
constructor({ db, indexMetadataStore, dataMonitor, peerIdProvider, getSpaceKeyByRootDocumentId, }: AutomergeHostParams);
|
|
67
|
-
protected _open(): Promise<void>;
|
|
68
|
-
protected _close(): Promise<void>;
|
|
69
89
|
/**
|
|
70
|
-
*
|
|
90
|
+
* Documents created in this session.
|
|
91
|
+
*/
|
|
92
|
+
private _createdDocuments;
|
|
93
|
+
/**
|
|
94
|
+
* Documents that need to be synced based on the result of collection-sync.
|
|
95
|
+
*/
|
|
96
|
+
private _documentsToSync;
|
|
97
|
+
/**
|
|
98
|
+
* Documents that are not available locally that should be requested.
|
|
71
99
|
*/
|
|
72
|
-
|
|
100
|
+
private _documentsToRequest;
|
|
101
|
+
/**
|
|
102
|
+
* Documents requested by remote peers.
|
|
103
|
+
*/
|
|
104
|
+
private _documentsRequested;
|
|
105
|
+
private _sharePolicyChangedTask?;
|
|
106
|
+
private _signer;
|
|
107
|
+
private readonly _useSubduction;
|
|
108
|
+
constructor({ db, dataMonitor, peerIdProvider, getSpaceKeyByRootDocumentId, useSubduction }: AutomergeHostProps);
|
|
109
|
+
protected _open(ctx: Context): Promise<void>;
|
|
110
|
+
protected _close(ctx: Context): Promise<void>;
|
|
73
111
|
get peerId(): PeerId;
|
|
74
112
|
get loadedDocsCount(): number;
|
|
75
|
-
|
|
76
|
-
|
|
113
|
+
get handles(): Readonly<Record<DocumentId, DocHandle<any>>>;
|
|
114
|
+
addReplicator(ctx: Context, replicator: AutomergeReplicator): Promise<void>;
|
|
115
|
+
removeReplicator(replicator: AutomergeReplicator): Promise<void>;
|
|
116
|
+
loadDoc<T>(ctx: Context, documentId: AnyDocumentId, opts?: LoadDocOptions): Promise<DocHandle<T> | null>;
|
|
117
|
+
/**
|
|
118
|
+
* Returns the live {@link DocumentQuery} for a document — exposes the
|
|
119
|
+
* always-attached `DocHandle` and the actual readiness state
|
|
120
|
+
* (`'loading' | 'ready' | 'unavailable' | 'failed'`) via `peek()` /
|
|
121
|
+
* `subscribe()` / `whenReady()`. Use this to observe sync state without
|
|
122
|
+
* forcing a wait. See {@link getHandleState} for why callers must read
|
|
123
|
+
* liveness off the query rather than the `DocHandle` itself.
|
|
124
|
+
*/
|
|
125
|
+
findWithProgress<T>(documentId: AnyDocumentId): DocumentQuery<T>;
|
|
126
|
+
exportDoc(id: AnyDocumentId): Promise<Uint8Array>;
|
|
77
127
|
/**
|
|
78
|
-
*
|
|
128
|
+
* Probe local storage to determine whether the document has any persisted
|
|
129
|
+
* chunks. Does not request the document from the network and does not
|
|
130
|
+
* touch the in-memory `Repo`. Returns `true` iff at least one non-empty
|
|
131
|
+
* chunk exists on disk for the document.
|
|
132
|
+
*
|
|
133
|
+
* Intended for query-driven (disk-only) loads that need to know quickly
|
|
134
|
+
* whether a document is locally available without waiting on network
|
|
135
|
+
* latency. See `DocumentsSynchronizer.addDocuments` and the `requesting`
|
|
136
|
+
* transition in `DocHandleProxy`.
|
|
79
137
|
*/
|
|
80
|
-
|
|
81
|
-
exportDoc(ctx: Context, id: AnyDocumentId): Promise<Uint8Array>;
|
|
138
|
+
hasDocOnDisk(id: AnyDocumentId): Promise<boolean>;
|
|
82
139
|
/**
|
|
83
140
|
* Create new persisted document.
|
|
84
141
|
*/
|
|
85
|
-
createDoc<T>(initialValue?: T | Doc<T> | Uint8Array, opts?: CreateDocOptions): DocHandle<T
|
|
86
|
-
waitUntilHeadsReplicated(heads: DocHeadsList): Promise<void>;
|
|
142
|
+
createDoc<T>(initialValue?: T | Doc<T> | Uint8Array, opts?: CreateDocOptions): Promise<DocHandle<T>>;
|
|
143
|
+
waitUntilHeadsReplicated(ctx: Context, heads: DocHeadsList): Promise<void>;
|
|
87
144
|
reIndexHeads(documentIds: DocumentId[]): Promise<void>;
|
|
88
|
-
private _sharePolicy;
|
|
89
|
-
private _beforeSave;
|
|
90
|
-
private _shouldSyncCollection;
|
|
91
145
|
/**
|
|
92
|
-
*
|
|
146
|
+
* Share policy for the Repo's classical automerge-repo sync path (CollectionSynchronizer /
|
|
147
|
+
* DocSynchronizer — see `src/synchronizer/DocSynchronizer.ts#resolveSharePolicy`).
|
|
148
|
+
*
|
|
149
|
+
* NOTE: Subduction replication does NOT consult `shareConfig`.
|
|
150
|
+
* {@link AutomergeReplicator}s via {@link EchoNetworkAdapter}.
|
|
93
151
|
*/
|
|
152
|
+
private readonly _shareConfig;
|
|
153
|
+
/**
|
|
154
|
+
* Authorization policy consulted by the Subduction sedimentree protocol.
|
|
155
|
+
*/
|
|
156
|
+
private readonly _subductionPolicy;
|
|
157
|
+
private _beforeSave;
|
|
158
|
+
private _shouldSyncCollection;
|
|
94
159
|
private _afterSave;
|
|
95
|
-
private _automergePeers;
|
|
96
160
|
private _isDocumentInRemoteCollection;
|
|
97
161
|
private _getContainingSpaceForDocument;
|
|
98
162
|
/**
|
|
99
163
|
* Flush documents to disk.
|
|
100
164
|
*/
|
|
101
|
-
flush({ documentIds }?: FlushRequest): Promise<void>;
|
|
165
|
+
flush(ctx: Context, { documentIds }?: FlushRequest): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Returns current heads of each requested document.
|
|
168
|
+
*
|
|
169
|
+
* Loaded handles are read directly; unloaded documents fall back to the {@link HeadsStore},
|
|
170
|
+
* then to reconstruction from the automerge storage chunks (for docs persisted before
|
|
171
|
+
* the HeadsStore was populated).
|
|
172
|
+
*/
|
|
102
173
|
getHeads(documentIds: DocumentId[]): Promise<(Heads | undefined)[]>;
|
|
174
|
+
/**
|
|
175
|
+
* Iterate over all document heads stored on disk.
|
|
176
|
+
*/
|
|
177
|
+
listDocumentHeads(): AsyncGenerator<{
|
|
178
|
+
documentId: DocumentId;
|
|
179
|
+
heads: Heads;
|
|
180
|
+
}>;
|
|
103
181
|
getLocalCollectionState(collectionId: string): CollectionState | undefined;
|
|
104
182
|
getRemoteCollectionStates(collectionId: string): ReadonlyMap<PeerId, CollectionState>;
|
|
105
183
|
refreshCollection(collectionId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,KAAK,EAMX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,SAAS,EAEd,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automerge-repo-subduction.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-repo-subduction.test.ts"],"names":[],"mappings":"AA2hCA,eAAO,MAAM,aAAa,QAAO,MAEhC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export declare const createTmpPath: () => string;
|
|
2
2
|
//# sourceMappingURL=automerge-repo.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automerge-repo.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-repo.test.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"automerge-repo.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-repo.test.ts"],"names":[],"mappings":"AAijCA,eAAO,MAAM,aAAa,QAAO,MAEhC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automerge-subduction.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-subduction.test.ts"],"names":[],"mappings":""}
|
|
@@ -2,7 +2,7 @@ import { type Heads } from '@automerge/automerge';
|
|
|
2
2
|
import type { DocumentId, PeerId } from '@automerge/automerge-repo';
|
|
3
3
|
import { Event } from '@dxos/async';
|
|
4
4
|
import { type Context, Resource } from '@dxos/context';
|
|
5
|
-
export type
|
|
5
|
+
export type CollectionSynchronizerProps = {
|
|
6
6
|
sendCollectionState: (collectionId: string, peerId: PeerId, state: CollectionState) => void;
|
|
7
7
|
queryCollectionState: (collectionId: string, peerId: PeerId) => void;
|
|
8
8
|
shouldSyncCollection: (collectionId: string, peerId: PeerId) => boolean;
|
|
@@ -25,11 +25,19 @@ export declare class CollectionSynchronizer extends Resource {
|
|
|
25
25
|
peerId: PeerId;
|
|
26
26
|
newDocsAppeared: boolean;
|
|
27
27
|
}>;
|
|
28
|
-
constructor(params:
|
|
28
|
+
constructor(params: CollectionSynchronizerProps);
|
|
29
29
|
protected _open(ctx: Context): Promise<void>;
|
|
30
30
|
getRegisteredCollectionIds(): string[];
|
|
31
31
|
getLocalCollectionState(collectionId: string): CollectionState | undefined;
|
|
32
32
|
setLocalCollectionState(collectionId: string, state: CollectionState): void;
|
|
33
|
+
/**
|
|
34
|
+
* Coalesce bursts of `setLocalCollectionState` (e.g. from `_onHeadsChanged` during an
|
|
35
|
+
* import) into one broadcast microtask per collection. If another call arrives while
|
|
36
|
+
* the microtask is pending, we just flag the collection dirty — the in-flight run
|
|
37
|
+
* already reads the latest `localState`. If it arrives during the run itself, we
|
|
38
|
+
* schedule exactly one follow-up.
|
|
39
|
+
*/
|
|
40
|
+
private _scheduleBroadcast;
|
|
33
41
|
clearLocalCollectionState(collectionId: string): void;
|
|
34
42
|
getRemoteCollectionStates(collectionId: string): ReadonlyMap<PeerId, CollectionState>;
|
|
35
43
|
refreshCollection(collectionId: string): void;
|
|
@@ -43,13 +51,25 @@ export declare class CollectionSynchronizer extends Resource {
|
|
|
43
51
|
onConnectionClosed(peerId: PeerId): void;
|
|
44
52
|
/**
|
|
45
53
|
* Callback when a peer queries the state of a collection.
|
|
54
|
+
*
|
|
55
|
+
* If we have no local state yet we silently drop the query; the peer will receive our
|
|
56
|
+
* state via {@link _broadcastLocalState} once `setLocalCollectionState` is called.
|
|
46
57
|
*/
|
|
47
58
|
onCollectionStateQueried(collectionId: string, peerId: PeerId): void;
|
|
48
59
|
/**
|
|
49
60
|
* Callback when a peer sends the state of a collection.
|
|
50
61
|
*/
|
|
51
62
|
onRemoteStateReceived(collectionId: string, peerId: PeerId, state: CollectionState): void;
|
|
63
|
+
private _diffCollectionState;
|
|
52
64
|
private _getOrCreatePerCollectionState;
|
|
65
|
+
/**
|
|
66
|
+
* Push local state to interested peers whose last-known remote state differs from local
|
|
67
|
+
* (or is unknown), then pull from peers via {@link refreshCollection}.
|
|
68
|
+
*
|
|
69
|
+
* Diff-gating avoids spamming peers that are already in sync; this matters because
|
|
70
|
+
* {@link setLocalCollectionState} is called on every local heads change.
|
|
71
|
+
*/
|
|
72
|
+
private _broadcastLocalState;
|
|
53
73
|
private _refreshInterestedPeers;
|
|
54
74
|
}
|
|
55
75
|
export type CollectionState = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-synchronizer.d.ts","sourceRoot":"","sources":["../../../../src/automerge/collection-synchronizer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,EAAE,KAAK,EAAmD,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"collection-synchronizer.d.ts","sourceRoot":"","sources":["../../../../src/automerge/collection-synchronizer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,EAAE,KAAK,EAAmD,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAWvD,MAAM,MAAM,2BAA2B,GAAG;IACxC,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5F,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CACzE,CAAC;AAEF;;GAEG;AACH,qBACa,sBAAuB,SAAQ,QAAQ;IAClD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqD;IAC1F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsD;IAC5F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsD;IAE5F;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyC;IAC9E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IAErD,SAAgB,kBAAkB;sBAA6B,MAAM;gBAAU,MAAM;yBAAmB,OAAO;OAAM;IAErH,YAAY,MAAM,EAAE,2BAA2B,EAK9C;IAED,UAAyB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1D;IAED,0BAA0B,IAAI,MAAM,EAAE,CAErC;IAED,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEzE;IAED,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAY1E;IAED;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAS1B,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAIpD;IAED,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAEpF;IAED,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAiB5C;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA4BrC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWvC;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAcnE;IAED;;OAEG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAMxF;IAED,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,8BAA8B;IAUtC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,uBAAuB;CAShC;AAUD,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAW,eAAe,UAAU,eAAe,KAAG,mBAwBrF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"echo-data-monitor.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-data-monitor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAM3E,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,qBACa,eAAgB,YAAW,yBAAyB,EAAE,kBAAkB,EAAE,SAAS;IAclF,OAAO,CAAC,QAAQ,CAAC,OAAO;IAbpC,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;IAC5D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgD;IAC/E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAChF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0C;IAE5E,OAAO,CAAC,iBAAiB,CAAK;
|
|
1
|
+
{"version":3,"file":"echo-data-monitor.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-data-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type DocumentId, type Heads, type Message, NetworkAdapter, type PeerId, type PeerMetadata } from '@automerge/automerge-repo';
|
|
2
|
+
import { Event } from '@dxos/async';
|
|
3
|
+
import { type Context } from '@dxos/context';
|
|
2
4
|
import { type PublicKey } from '@dxos/keys';
|
|
3
|
-
import { type
|
|
5
|
+
import { type AutomergeReplicator, type RemoteDocumentExistenceCheckProps, type ShouldAdvertiseProps, type ShouldSyncCollectionProps } from './echo-replicator';
|
|
4
6
|
export interface NetworkDataMonitor {
|
|
5
7
|
recordPeerConnected(peerId: string): void;
|
|
6
8
|
recordPeerDisconnected(peerId: string): void;
|
|
@@ -8,15 +10,15 @@ export interface NetworkDataMonitor {
|
|
|
8
10
|
recordMessageReceived(message: Message): void;
|
|
9
11
|
recordMessageSendingFailed(message: Message): void;
|
|
10
12
|
}
|
|
11
|
-
export type
|
|
13
|
+
export type EchoNetworkAdapterProps = {
|
|
12
14
|
getContainingSpaceForDocument: (documentId: string) => Promise<PublicKey | null>;
|
|
13
|
-
isDocumentInRemoteCollection: (params:
|
|
15
|
+
isDocumentInRemoteCollection: (params: RemoteDocumentExistenceCheckProps) => Promise<boolean>;
|
|
14
16
|
onCollectionStateQueried: (collectionId: string, peerId: PeerId) => void;
|
|
15
17
|
onCollectionStateReceived: (collectionId: string, peerId: PeerId, state: unknown) => void;
|
|
16
18
|
monitor?: NetworkDataMonitor;
|
|
17
19
|
};
|
|
18
20
|
/**
|
|
19
|
-
* Manages a set of {@link
|
|
21
|
+
* Manages a set of {@link AutomergeReplicator} instances.
|
|
20
22
|
*/
|
|
21
23
|
export declare class EchoNetworkAdapter extends NetworkAdapter {
|
|
22
24
|
private readonly _params;
|
|
@@ -28,7 +30,11 @@ export declare class EchoNetworkAdapter extends NetworkAdapter {
|
|
|
28
30
|
private _lifecycleState;
|
|
29
31
|
private readonly _connected;
|
|
30
32
|
private readonly _ready;
|
|
31
|
-
|
|
33
|
+
readonly documentRequested: Event<{
|
|
34
|
+
documentId: DocumentId;
|
|
35
|
+
peerId: PeerId;
|
|
36
|
+
}>;
|
|
37
|
+
constructor(_params: EchoNetworkAdapterProps);
|
|
32
38
|
isReady(): boolean;
|
|
33
39
|
whenReady(): Promise<void>;
|
|
34
40
|
connect(peerId: PeerId, peerMetadata?: PeerMetadata | undefined): void;
|
|
@@ -38,20 +44,20 @@ export declare class EchoNetworkAdapter extends NetworkAdapter {
|
|
|
38
44
|
close(): Promise<this | undefined>;
|
|
39
45
|
whenConnected(): Promise<void>;
|
|
40
46
|
onConnectionAuthScopeChanged(peer: PeerId): void;
|
|
41
|
-
addReplicator(replicator:
|
|
42
|
-
removeReplicator(replicator:
|
|
43
|
-
shouldAdvertise(peerId: PeerId, params:
|
|
44
|
-
shouldSyncCollection(peerId: PeerId, params:
|
|
47
|
+
addReplicator(ctx: Context, replicator: AutomergeReplicator): Promise<void>;
|
|
48
|
+
removeReplicator(replicator: AutomergeReplicator): Promise<void>;
|
|
49
|
+
shouldAdvertise(peerId: PeerId, params: ShouldAdvertiseProps): Promise<boolean>;
|
|
50
|
+
shouldSyncCollection(peerId: PeerId, params: ShouldSyncCollectionProps): boolean;
|
|
45
51
|
queryCollectionState(collectionId: string, targetId: PeerId): void;
|
|
46
52
|
sendCollectionState(collectionId: string, targetId: PeerId, state: unknown): void;
|
|
47
53
|
getPeersInterestedInCollection(collectionId: string): PeerId[];
|
|
48
54
|
bundleSyncEnabledForPeer(peerId: PeerId): boolean;
|
|
49
|
-
pushBundle(peerId: PeerId, bundle: {
|
|
55
|
+
pushBundle(ctx: Context, peerId: PeerId, bundle: {
|
|
50
56
|
documentId: DocumentId;
|
|
51
57
|
data: Uint8Array;
|
|
52
58
|
heads: Heads;
|
|
53
59
|
}[]): Promise<void>;
|
|
54
|
-
pullBundle(peerId: PeerId, docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array<ArrayBufferLike>>>;
|
|
60
|
+
pullBundle(ctx: Context, peerId: PeerId, docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array<ArrayBufferLike>>>;
|
|
55
61
|
private _send;
|
|
56
62
|
private _onConnectionOpen;
|
|
57
63
|
private _onMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,cAAc,EACd,KAAK,MAAM,EACX,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
import { type Heads } from '@automerge/automerge';
|
|
2
2
|
import { type DocumentId } from '@automerge/automerge-repo';
|
|
3
|
+
import { type Context } from '@dxos/context';
|
|
3
4
|
import { type PublicKey, type SpaceId } from '@dxos/keys';
|
|
4
5
|
import { type AutomergeProtocolMessage } from '@dxos/protocols';
|
|
5
|
-
export interface
|
|
6
|
+
export interface AutomergeReplicator {
|
|
6
7
|
/**
|
|
7
8
|
* Called on when replicator is added to EchoHost.
|
|
8
9
|
*/
|
|
9
|
-
connect(context:
|
|
10
|
+
connect(ctx: Context, context: AutomergeReplicatorContext): Promise<void>;
|
|
10
11
|
/**
|
|
11
12
|
* Called on when replicator is removed from EchoHost.
|
|
12
13
|
*/
|
|
13
14
|
disconnect(): Promise<void>;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Replicator with explicit per-space wiring (used by edge replicators that maintain one logical
|
|
18
|
+
* connection per `SpaceId`). `DataSpaceManager` drives these lifecycle hooks on space open/close.
|
|
19
|
+
*/
|
|
20
|
+
export interface EdgeAutomergeReplicator extends AutomergeReplicator {
|
|
21
|
+
connectToSpace(ctx: Context, spaceId: SpaceId): Promise<void>;
|
|
22
|
+
disconnectFromSpace(spaceId: SpaceId): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export interface AutomergeReplicatorContext {
|
|
16
25
|
/**
|
|
17
26
|
* Our own peer id.
|
|
18
27
|
*/
|
|
@@ -22,12 +31,15 @@ export interface EchoReplicatorContext {
|
|
|
22
31
|
*/
|
|
23
32
|
getContainingSpaceForDocument(documentId: string): Promise<PublicKey | null>;
|
|
24
33
|
getContainingSpaceIdForDocument(documentId: string): Promise<SpaceId | null>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Returns false if collection sync hasn't happened yet.
|
|
36
|
+
*/
|
|
37
|
+
isDocumentInRemoteCollection(params: RemoteDocumentExistenceCheckProps): Promise<boolean>;
|
|
38
|
+
onConnectionOpen(connection: AutomergeReplicatorConnection): void;
|
|
39
|
+
onConnectionClosed(connection: AutomergeReplicatorConnection): void;
|
|
40
|
+
onConnectionAuthScopeChanged(connection: AutomergeReplicatorConnection): void;
|
|
29
41
|
}
|
|
30
|
-
export interface
|
|
42
|
+
export interface AutomergeReplicatorConnection {
|
|
31
43
|
/**
|
|
32
44
|
* Remote peer id.
|
|
33
45
|
*/
|
|
@@ -44,20 +56,20 @@ export interface ReplicatorConnection {
|
|
|
44
56
|
* @returns true if the document should be advertised to this peer.
|
|
45
57
|
* The remote peer can still request the document by its id bypassing this check.
|
|
46
58
|
*/
|
|
47
|
-
shouldAdvertise(params:
|
|
59
|
+
shouldAdvertise(params: ShouldAdvertiseProps): Promise<boolean>;
|
|
48
60
|
/**
|
|
49
61
|
* @returns true if the collection should be synced to this peer.
|
|
50
62
|
*/
|
|
51
|
-
shouldSyncCollection(params:
|
|
63
|
+
shouldSyncCollection(params: ShouldSyncCollectionProps): boolean;
|
|
52
64
|
/**
|
|
53
|
-
* Batch syncing considered enabled if
|
|
65
|
+
* Batch syncing considered enabled if AutomergeReplicatorConnection implements `pushBatch` and `pullBatch` methods.
|
|
54
66
|
* @returns true if the batch syncing is enabled.
|
|
55
67
|
*/
|
|
56
68
|
get bundleSyncEnabled(): boolean;
|
|
57
69
|
/**
|
|
58
70
|
* Pushes the batch of documents to the remote peer.
|
|
59
71
|
*/
|
|
60
|
-
pushBundle?(bundle: {
|
|
72
|
+
pushBundle?(ctx: Context, bundle: {
|
|
61
73
|
documentId: DocumentId;
|
|
62
74
|
data: Uint8Array;
|
|
63
75
|
heads: Heads;
|
|
@@ -65,15 +77,15 @@ export interface ReplicatorConnection {
|
|
|
65
77
|
/**
|
|
66
78
|
* Pulls the batch of documents from the remote peer.
|
|
67
79
|
*/
|
|
68
|
-
pullBundle?(docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array>>;
|
|
80
|
+
pullBundle?(ctx: Context, docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array>>;
|
|
69
81
|
}
|
|
70
|
-
export type
|
|
82
|
+
export type ShouldAdvertiseProps = {
|
|
71
83
|
documentId: string;
|
|
72
84
|
};
|
|
73
|
-
export type
|
|
85
|
+
export type ShouldSyncCollectionProps = {
|
|
74
86
|
collectionId: string;
|
|
75
87
|
};
|
|
76
|
-
export type
|
|
88
|
+
export type RemoteDocumentExistenceCheckProps = {
|
|
77
89
|
peerId: string;
|
|
78
90
|
documentId: string;
|
|
79
91
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"echo-replicator.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-replicator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"echo-replicator.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-replicator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC7E,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE7E;;OAEG;IACH,4BAA4B,CAAC,MAAM,EAAE,iCAAiC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1F,gBAAgB,CAAC,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;IAClE,kBAAkB,CAAC,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACpE,4BAA4B,CAAC,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;CAC/E;AAED,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;IAEnD;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;IAEnD;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC;IAEjE;;;OAGG;IACH,IAAI,iBAAiB,IAAI,OAAO,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/G;;OAEG;IAEH,UAAU,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;CACzG;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BaseError } from '@dxos/errors';
|
|
2
|
+
declare const PeerNotFoundError_base: {
|
|
3
|
+
new (options?: import("@dxos/errors").BaseErrorOptions): {
|
|
4
|
+
cause?: unknown;
|
|
5
|
+
stack?: string;
|
|
6
|
+
name: "PeerNotFoundError";
|
|
7
|
+
context: Record<string, unknown>;
|
|
8
|
+
readonly message: string;
|
|
9
|
+
readonly _tag: "PeerNotFoundError";
|
|
10
|
+
};
|
|
11
|
+
isError(error: unknown): error is Error;
|
|
12
|
+
name: "PeerNotFoundError";
|
|
13
|
+
is(error: unknown): error is BaseError;
|
|
14
|
+
wrap(options?: Omit<import("@dxos/errors").BaseErrorOptions, 'cause'> & {
|
|
15
|
+
ifTypeDiffers?: boolean;
|
|
16
|
+
}): (error: unknown) => {
|
|
17
|
+
cause?: unknown;
|
|
18
|
+
stack?: string;
|
|
19
|
+
name: "PeerNotFoundError";
|
|
20
|
+
context: Record<string, unknown>;
|
|
21
|
+
readonly message: string;
|
|
22
|
+
readonly _tag: "PeerNotFoundError";
|
|
23
|
+
};
|
|
24
|
+
extend<Name extends string = string>(name: Name, message?: string): any;
|
|
25
|
+
captureStackTrace(targetObject: object, constructorOpt?: Function): void;
|
|
26
|
+
prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined;
|
|
27
|
+
stackTraceLimit: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Thrown when attempting to send a message to a peer that is not connected.
|
|
31
|
+
*/
|
|
32
|
+
export declare class PeerNotFoundError extends PeerNotFoundError_base {
|
|
33
|
+
}
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/automerge/errors.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzC;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,sBAAuD;CAAG"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type DocumentId, type QueryState, type Repo } from '@automerge/automerge-repo';
|
|
2
|
+
/**
|
|
3
|
+
* Variants reported by {@link QueryState}: `'loading' | 'ready' | 'unavailable' | 'failed'`.
|
|
4
|
+
*/
|
|
5
|
+
export type HandleQueryState = QueryState<unknown>['state'];
|
|
6
|
+
/**
|
|
7
|
+
* Returns the {@link QueryState} variant for a document already known to the
|
|
8
|
+
* repo (i.e. one for which a handle has been registered via `Repo.find` /
|
|
9
|
+
* `Repo.findWithProgress` / `Repo.create`), or `undefined` if no handle/query
|
|
10
|
+
* exists for this document yet.
|
|
11
|
+
*
|
|
12
|
+
* Use this anywhere you need to ask "is this document loaded?" / "did sync
|
|
13
|
+
* give up?" — read the result against the {@link HandleQueryState} variants
|
|
14
|
+
* (e.g. `=== 'ready'`).
|
|
15
|
+
*
|
|
16
|
+
* # Why we can't just call `DocHandle.isReady()` / read `DocHandle.state`
|
|
17
|
+
*
|
|
18
|
+
* The current subduction fork of `@automerge/automerge-repo`
|
|
19
|
+
* (`2.6.0-subduction.10`) **gutted** the per-handle state machine. Inside the
|
|
20
|
+
* fork, every `DocHandle` state predicate is a constant placeholder:
|
|
21
|
+
*
|
|
22
|
+
* ```
|
|
23
|
+
* isReady = () => true
|
|
24
|
+
* isUnloaded = () => false
|
|
25
|
+
* isDeleted = () => false
|
|
26
|
+
* isUnavailable = () => false
|
|
27
|
+
* inState = (states) => states.includes('ready')
|
|
28
|
+
* get state = () => 'ready'
|
|
29
|
+
* whenReady = async () => {} // resolves immediately, ignores argument
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* That means `handle.isReady()` always lies "yes", `handle.state` always reads
|
|
33
|
+
* `'ready'`, and `await handle.whenReady()` never blocks — even for handles
|
|
34
|
+
* whose document has never been loaded from storage or synced from a peer.
|
|
35
|
+
* Reading `handle.doc()` on such a "ready" handle returns the empty initial
|
|
36
|
+
* doc (`A.init()` or `A.emptyChange(A.init())`) rather than throwing or
|
|
37
|
+
* returning undefined, which can silently corrupt downstream logic that
|
|
38
|
+
* trusted the handle's `isReady()` signal.
|
|
39
|
+
*
|
|
40
|
+
* Real liveness moved to the {@link DocumentQuery} returned by
|
|
41
|
+
* `Repo.findWithProgress`, whose state goes through
|
|
42
|
+
* `'loading' → 'ready' | 'unavailable' | 'failed'`. Production code that
|
|
43
|
+
* needs to know whether a document is actually loaded must consult the query
|
|
44
|
+
* state through this helper instead of any `DocHandle.*` predicate.
|
|
45
|
+
*
|
|
46
|
+
* TODO(mykola): Remove this helper once the fork either (a) restores the
|
|
47
|
+
* `DocHandle` state machine, or (b) every caller is migrated to query
|
|
48
|
+
* `DocumentProgress` directly with a richer API surface (await on state
|
|
49
|
+
* transitions, etc.).
|
|
50
|
+
*/
|
|
51
|
+
export declare const getHandleState: (repo: Repo, documentId: DocumentId) => HandleQueryState | undefined;
|
|
52
|
+
//# sourceMappingURL=handle-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-state.d.ts","sourceRoot":"","sources":["../../../../src/automerge/handle-state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAExF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,cAAc,SAAU,IAAI,cAAc,UAAU,KAAG,gBAAgB,GAAG,SAKtF,CAAC"}
|