@dxos/echo-pipeline 0.8.3 → 0.8.4-main.1068cf700f
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/dist/lib/neutral/chunk-FJPXA75J.mjs +235 -0
- package/dist/lib/neutral/chunk-FJPXA75J.mjs.map +7 -0
- package/dist/lib/{browser/chunk-35I6ERLG.mjs → neutral/chunk-WIQUYO7H.mjs} +300 -213
- package/dist/lib/neutral/chunk-WIQUYO7H.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/filter/index.mjs +3 -2
- package/dist/lib/{browser → neutral}/index.mjs +2832 -946
- 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 +73 -224
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/types/src/automerge/automerge-host.d.ts +53 -42
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- 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/collection-synchronizer.d.ts +6 -4
- package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-network-adapter.d.ts +22 -10
- package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-replicator.d.ts +37 -15
- package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
- 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 +1 -1
- package/dist/types/src/automerge/index.d.ts.map +1 -1
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +5 -5
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts +9 -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 +5 -5
- package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
- package/dist/types/src/common/codec.d.ts +1 -1
- package/dist/types/src/common/codec.d.ts.map +1 -1
- package/dist/types/src/db-host/automerge-data-source.d.ts +34 -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/data-service.d.ts +5 -4
- package/dist/types/src/db-host/data-service.d.ts.map +1 -1
- package/dist/types/src/db-host/database-root.d.ts.map +1 -1
- package/dist/types/src/db-host/documents-synchronizer.d.ts +6 -5
- package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
- package/dist/types/src/db-host/echo-host.d.ts +44 -23
- package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
- package/dist/types/src/db-host/index.d.ts +1 -0
- package/dist/types/src/db-host/index.d.ts.map +1 -1
- package/dist/types/src/db-host/local-queue-service.d.ts +16 -0
- package/dist/types/src/db-host/local-queue-service.d.ts.map +1 -0
- package/dist/types/src/db-host/query-service.d.ts +14 -9
- package/dist/types/src/db-host/query-service.d.ts.map +1 -1
- package/dist/types/src/db-host/queue-data-source.d.ts +28 -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 +2 -1
- package/dist/types/src/db-host/space-state-manager.d.ts.map +1 -1
- package/dist/types/src/db-host/stub.d.ts +10 -0
- package/dist/types/src/db-host/stub.d.ts.map +1 -0
- package/dist/types/src/edge/echo-edge-replicator.d.ts +8 -6
- package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
- package/dist/types/src/filter/filter-match.d.ts +4 -1
- package/dist/types/src/filter/filter-match.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/pipeline/pipeline.d.ts +3 -3
- package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
- package/dist/types/src/query/errors.d.ts +21 -9
- package/dist/types/src/query/errors.d.ts.map +1 -1
- package/dist/types/src/query/plan.d.ts +57 -5
- package/dist/types/src/query/plan.d.ts.map +1 -1
- package/dist/types/src/query/query-executor.d.ts +49 -10
- package/dist/types/src/query/query-executor.d.ts.map +1 -1
- package/dist/types/src/query/query-planner.d.ts +9 -0
- 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 +3 -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 +6 -6
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +4 -4
- package/dist/types/src/space/space.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 +2 -2
- package/dist/types/src/testing/test-agent-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 +14 -13
- package/dist/types/src/testing/test-replicator.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +1 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +53 -45
- package/src/automerge/automerge-host.test.ts +55 -24
- package/src/automerge/automerge-host.ts +399 -126
- package/src/automerge/automerge-repo.test.ts +214 -46
- package/src/automerge/collection-synchronizer.test.ts +22 -15
- package/src/automerge/collection-synchronizer.ts +57 -22
- package/src/automerge/echo-data-monitor.ts +1 -1
- package/src/automerge/echo-network-adapter.test.ts +3 -3
- package/src/automerge/echo-network-adapter.ts +73 -28
- package/src/automerge/echo-replicator.ts +40 -15
- package/src/automerge/heads-store.ts +42 -3
- package/src/automerge/index.ts +1 -1
- package/src/automerge/leveldb-storage-adapter.ts +11 -11
- package/src/automerge/mesh-echo-replicator-connection.ts +12 -8
- package/src/automerge/mesh-echo-replicator.ts +15 -11
- package/src/automerge/storage-adapter.test.ts +1 -1
- package/src/common/space-id.ts +1 -1
- package/src/db-host/automerge-data-source.test.ts +292 -0
- package/src/db-host/automerge-data-source.ts +144 -0
- package/src/db-host/data-service.ts +19 -20
- package/src/db-host/database-root.ts +2 -2
- package/src/db-host/documents-synchronizer.test.ts +73 -13
- package/src/db-host/documents-synchronizer.ts +58 -44
- package/src/db-host/echo-host.ts +194 -84
- package/src/db-host/index.ts +1 -0
- package/src/db-host/local-queue-service.ts +147 -0
- package/src/db-host/query-service.ts +28 -95
- package/src/db-host/queue-data-source.ts +132 -0
- package/src/db-host/queue-service.test.ts +145 -0
- package/src/db-host/space-state-manager.ts +6 -2
- package/src/db-host/stub.ts +28 -0
- package/src/edge/echo-edge-replicator.test.ts +8 -6
- package/src/edge/echo-edge-replicator.ts +124 -42
- package/src/filter/filter-match.test.ts +58 -32
- package/src/filter/filter-match.ts +163 -15
- package/src/metadata/metadata-store.ts +8 -5
- package/src/pipeline/pipeline-stress.test.ts +4 -2
- package/src/pipeline/pipeline.test.ts +3 -2
- package/src/pipeline/pipeline.ts +10 -7
- package/src/query/errors.ts +3 -1
- package/src/query/plan.ts +75 -5
- package/src/query/query-executor.ts +812 -117
- package/src/query/query-planner.test.ts +652 -34
- package/src/query/query-planner.ts +276 -13
- package/src/space/admission-discovery-extension.ts +3 -3
- package/src/space/auth.ts +6 -6
- package/src/space/control-pipeline.test.ts +4 -3
- package/src/space/control-pipeline.ts +11 -8
- package/src/space/space-manager.browser.test.ts +1 -1
- package/src/space/space-manager.ts +11 -10
- package/src/space/space-protocol.browser.test.ts +2 -2
- package/src/space/space-protocol.test.ts +3 -2
- package/src/space/space-protocol.ts +17 -14
- package/src/space/space.test.ts +1 -1
- package/src/space/space.ts +6 -5
- package/src/testing/index.ts +0 -2
- package/src/testing/test-agent-builder.ts +4 -3
- package/src/testing/test-network-adapter.ts +16 -3
- package/src/testing/test-replicator.ts +23 -18
- package/src/util.ts +7 -3
- package/dist/lib/browser/chunk-35I6ERLG.mjs.map +0 -7
- package/dist/lib/browser/chunk-CGS2ULMK.mjs +0 -11
- package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +0 -7
- package/dist/lib/browser/chunk-TQJTKNMS.mjs +0 -126
- package/dist/lib/browser/chunk-TQJTKNMS.mjs.map +0 -7
- 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/chunk-HOPOFWAL.cjs +0 -147
- package/dist/lib/node/chunk-HOPOFWAL.cjs.map +0 -7
- package/dist/lib/node/chunk-JXX6LF5U.cjs +0 -2084
- package/dist/lib/node/chunk-JXX6LF5U.cjs.map +0 -7
- package/dist/lib/node/chunk-Q7SFCCGT.cjs +0 -33
- package/dist/lib/node/chunk-Q7SFCCGT.cjs.map +0 -7
- package/dist/lib/node/filter/index.cjs +0 -32
- package/dist/lib/node/filter/index.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -4699
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/testing/index.cjs +0 -753
- package/dist/lib/node/testing/index.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-5BHLPT24.mjs +0 -2067
- package/dist/lib/node-esm/chunk-5BHLPT24.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-RVK35BS7.mjs +0 -126
- package/dist/lib/node-esm/chunk-RVK35BS7.mjs.map +0 -7
- package/dist/lib/node-esm/filter/index.mjs +0 -11
- package/dist/lib/node-esm/filter/index.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -4743
- 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 -742
- 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
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { describe, expect,
|
|
5
|
+
import { describe, expect, onTestFinished, test } from 'vitest';
|
|
6
6
|
|
|
7
7
|
import { Keyring } from '@dxos/keyring';
|
|
8
8
|
import { PublicKey } from '@dxos/keys';
|
|
9
9
|
import { createStorage } from '@dxos/random-access-storage';
|
|
10
10
|
import { Timeframe } from '@dxos/timeframe';
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import { TestAgentBuilder, TestFeedBuilder, WebsocketNetworkManagerProvider } from '../testing';
|
|
13
13
|
|
|
14
14
|
// TODO(burdon): Config.
|
|
15
15
|
// Signal server will be started by the setup script.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { describe, expect,
|
|
5
|
+
import { describe, expect, onTestFinished, test } from 'vitest';
|
|
6
6
|
|
|
7
7
|
import { PublicKey } from '@dxos/keys';
|
|
8
8
|
import { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';
|
|
@@ -11,9 +11,10 @@ import { StorageType, createStorage } from '@dxos/random-access-storage';
|
|
|
11
11
|
import { BlobStore } from '@dxos/teleport-extension-object-sync';
|
|
12
12
|
import { Timeframe } from '@dxos/timeframe';
|
|
13
13
|
|
|
14
|
-
import { AuthStatus, MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceProtocol } from './space-protocol';
|
|
15
14
|
import { TestAgentBuilder, TestFeedBuilder } from '../testing';
|
|
16
15
|
|
|
16
|
+
import { AuthStatus, MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceProtocol } from './space-protocol';
|
|
17
|
+
|
|
17
18
|
describe('space/space-protocol', () => {
|
|
18
19
|
// Flaky.
|
|
19
20
|
test('two peers discover each other via presence', async () => {
|
|
@@ -9,10 +9,10 @@ import { PublicKey } from '@dxos/keys';
|
|
|
9
9
|
import { log, logInfo } from '@dxos/log';
|
|
10
10
|
import {
|
|
11
11
|
MMSTTopology,
|
|
12
|
-
type SwarmNetworkManager,
|
|
13
12
|
type SwarmConnection,
|
|
13
|
+
type SwarmNetworkManager,
|
|
14
14
|
type WireProtocol,
|
|
15
|
-
type
|
|
15
|
+
type WireProtocolProps,
|
|
16
16
|
type WireProtocolProvider,
|
|
17
17
|
} from '@dxos/network-manager';
|
|
18
18
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
@@ -20,7 +20,7 @@ import { type MuxerStats, Teleport } from '@dxos/teleport';
|
|
|
20
20
|
import { type BlobStore, BlobSync } from '@dxos/teleport-extension-object-sync';
|
|
21
21
|
import { ReplicatorExtension } from '@dxos/teleport-extension-replicator';
|
|
22
22
|
import { trace } from '@dxos/tracing';
|
|
23
|
-
import { CallbackCollection, ComplexMap
|
|
23
|
+
import { type AsyncCallback, CallbackCollection, ComplexMap } from '@dxos/util';
|
|
24
24
|
|
|
25
25
|
import { AuthExtension, type AuthProvider, type AuthVerifier } from './auth';
|
|
26
26
|
|
|
@@ -118,7 +118,10 @@ export class SpaceProtocol {
|
|
|
118
118
|
this.blobSync = new BlobSync({ blobStore });
|
|
119
119
|
|
|
120
120
|
// TODO(burdon): Async race condition? Move to start?
|
|
121
|
-
this._topic = subtleCrypto
|
|
121
|
+
this._topic = subtleCrypto
|
|
122
|
+
.digest('SHA-256', topic.asBuffer() as ArrayBufferView<ArrayBuffer>)
|
|
123
|
+
.then(discoveryKey)
|
|
124
|
+
.then(PublicKey.from);
|
|
122
125
|
|
|
123
126
|
this._disableP2pReplication = disableP2pReplication ?? false;
|
|
124
127
|
}
|
|
@@ -173,16 +176,16 @@ export class SpaceProtocol {
|
|
|
173
176
|
}
|
|
174
177
|
|
|
175
178
|
private _createProtocolProvider(credentials: Uint8Array | undefined): WireProtocolProvider {
|
|
176
|
-
return (
|
|
179
|
+
return (wireProps) => {
|
|
177
180
|
const session = new SpaceProtocolSession({
|
|
178
|
-
|
|
181
|
+
wireProps,
|
|
179
182
|
swarmIdentity: this._swarmIdentity,
|
|
180
183
|
onSessionAuth: this._onSessionAuth,
|
|
181
184
|
onAuthFailure: this._onAuthFailure,
|
|
182
185
|
blobSync: this.blobSync,
|
|
183
186
|
disableP2pReplication: this._disableP2pReplication,
|
|
184
187
|
});
|
|
185
|
-
this._sessions.set(
|
|
188
|
+
this._sessions.set(wireProps.remotePeerId, session);
|
|
186
189
|
|
|
187
190
|
for (const feed of this._feeds) {
|
|
188
191
|
session.replicator.addFeed(feed);
|
|
@@ -193,8 +196,8 @@ export class SpaceProtocol {
|
|
|
193
196
|
}
|
|
194
197
|
}
|
|
195
198
|
|
|
196
|
-
export type
|
|
197
|
-
|
|
199
|
+
export type SpaceProtocolSessionProps = {
|
|
200
|
+
wireProps: WireProtocolProps;
|
|
198
201
|
swarmIdentity: SwarmIdentity;
|
|
199
202
|
|
|
200
203
|
blobSync: BlobSync;
|
|
@@ -222,7 +225,7 @@ export enum AuthStatus {
|
|
|
222
225
|
*/
|
|
223
226
|
export class SpaceProtocolSession implements WireProtocol {
|
|
224
227
|
@logInfo
|
|
225
|
-
private readonly
|
|
228
|
+
private readonly _wireProps: WireProtocolProps;
|
|
226
229
|
|
|
227
230
|
private readonly _disableP2pReplication: boolean;
|
|
228
231
|
|
|
@@ -249,20 +252,20 @@ export class SpaceProtocolSession implements WireProtocol {
|
|
|
249
252
|
|
|
250
253
|
// TODO(dmaretskyi): Allow to pass in extra extensions.
|
|
251
254
|
constructor({
|
|
252
|
-
|
|
255
|
+
wireProps,
|
|
253
256
|
swarmIdentity,
|
|
254
257
|
onSessionAuth,
|
|
255
258
|
onAuthFailure,
|
|
256
259
|
blobSync,
|
|
257
260
|
disableP2pReplication,
|
|
258
|
-
}:
|
|
259
|
-
this.
|
|
261
|
+
}: SpaceProtocolSessionProps) {
|
|
262
|
+
this._wireProps = wireProps;
|
|
260
263
|
this._swarmIdentity = swarmIdentity;
|
|
261
264
|
this._onSessionAuth = onSessionAuth;
|
|
262
265
|
this._onAuthFailure = onAuthFailure;
|
|
263
266
|
this._blobSync = blobSync;
|
|
264
267
|
|
|
265
|
-
this._teleport = new Teleport(
|
|
268
|
+
this._teleport = new Teleport(wireProps);
|
|
266
269
|
|
|
267
270
|
this._disableP2pReplication = disableP2pReplication ?? false;
|
|
268
271
|
}
|
package/src/space/space.test.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { describe, expect, onTestFinished, test } from 'vitest';
|
|
6
6
|
|
|
7
7
|
import { Context } from '@dxos/context';
|
|
8
8
|
import { CredentialGenerator } from '@dxos/credentials';
|
package/src/space/space.ts
CHANGED
|
@@ -15,15 +15,16 @@ import { type Timeframe } from '@dxos/timeframe';
|
|
|
15
15
|
import { trace } from '@dxos/tracing';
|
|
16
16
|
import { type AsyncCallback, Callback } from '@dxos/util';
|
|
17
17
|
|
|
18
|
-
import { ControlPipeline } from './control-pipeline';
|
|
19
|
-
import { type SpaceProtocol } from './space-protocol';
|
|
20
18
|
import { type MetadataStore } from '../metadata';
|
|
21
19
|
import { type PipelineAccessor } from '../pipeline';
|
|
22
20
|
|
|
21
|
+
import { ControlPipeline } from './control-pipeline';
|
|
22
|
+
import { type SpaceProtocol } from './space-protocol';
|
|
23
|
+
|
|
23
24
|
// TODO(burdon): Factor out?
|
|
24
25
|
type FeedProvider = (feedKey: PublicKey, opts?: FeedOptions) => Promise<FeedWrapper<FeedMessage>>;
|
|
25
26
|
|
|
26
|
-
export type
|
|
27
|
+
export type SpaceProps = {
|
|
27
28
|
id: SpaceId;
|
|
28
29
|
spaceKey: PublicKey;
|
|
29
30
|
protocol: SpaceProtocol;
|
|
@@ -39,7 +40,7 @@ export type SpaceParams = {
|
|
|
39
40
|
onMemberRolesChanged: (member: MemberInfo[]) => Promise<void>;
|
|
40
41
|
};
|
|
41
42
|
|
|
42
|
-
export type
|
|
43
|
+
export type CreatePipelineProps = {
|
|
43
44
|
start: Timeframe;
|
|
44
45
|
// designation: AdmittedFeed.Designation;
|
|
45
46
|
};
|
|
@@ -67,7 +68,7 @@ export class Space extends Resource {
|
|
|
67
68
|
private _controlFeed?: FeedWrapper<FeedMessage>;
|
|
68
69
|
private _dataFeed?: FeedWrapper<FeedMessage>;
|
|
69
70
|
|
|
70
|
-
constructor(params:
|
|
71
|
+
constructor(params: SpaceProps) {
|
|
71
72
|
super();
|
|
72
73
|
invariant(params.spaceKey && params.feedProvider);
|
|
73
74
|
this._id = params.id;
|
package/src/testing/index.ts
CHANGED
|
@@ -12,14 +12,15 @@ import { MemoryTransportFactory, SwarmNetworkManager, createRtcTransportFactory
|
|
|
12
12
|
import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
13
13
|
import { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
14
14
|
import { AdmittedFeed } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
15
|
-
import { StorageType, createStorage
|
|
15
|
+
import { type Storage, StorageType, createStorage } from '@dxos/random-access-storage';
|
|
16
16
|
import { Gossip, Presence } from '@dxos/teleport-extension-gossip';
|
|
17
17
|
import { BlobStore } from '@dxos/teleport-extension-object-sync';
|
|
18
18
|
import { ComplexMap } from '@dxos/util';
|
|
19
19
|
|
|
20
|
-
import { TestFeedBuilder } from './test-feed-builder';
|
|
21
20
|
import { MetadataStore } from '../metadata';
|
|
22
|
-
import { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceManager, SpaceProtocol
|
|
21
|
+
import { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, type Space, SpaceManager, SpaceProtocol } from '../space';
|
|
22
|
+
|
|
23
|
+
import { TestFeedBuilder } from './test-feed-builder';
|
|
23
24
|
|
|
24
25
|
export type NetworkManagerProvider = () => SwarmNetworkManager;
|
|
25
26
|
|
|
@@ -11,12 +11,25 @@ import { log } from '@dxos/log';
|
|
|
11
11
|
export type TestConnectionStateProvider = () => 'on' | 'off';
|
|
12
12
|
|
|
13
13
|
export class TestAdapter extends NetworkAdapter {
|
|
14
|
-
static createPair(
|
|
14
|
+
static createPair(
|
|
15
|
+
connectionStateProvider: TestConnectionStateProvider = () => 'on',
|
|
16
|
+
onMessage?: (message: Message) => void,
|
|
17
|
+
): TestAdapter[] {
|
|
15
18
|
const adapter1: TestAdapter = new TestAdapter({
|
|
16
|
-
send: (message: Message) =>
|
|
19
|
+
send: (message: Message) => {
|
|
20
|
+
onMessage?.(message);
|
|
21
|
+
if (connectionStateProvider() === 'on') {
|
|
22
|
+
void sleep(10).then(() => adapter2.receive(message));
|
|
23
|
+
}
|
|
24
|
+
},
|
|
17
25
|
});
|
|
18
26
|
const adapter2: TestAdapter = new TestAdapter({
|
|
19
|
-
send: (message: Message) =>
|
|
27
|
+
send: (message: Message) => {
|
|
28
|
+
onMessage?.(message);
|
|
29
|
+
if (connectionStateProvider() === 'on') {
|
|
30
|
+
void sleep(10).then(() => adapter1.receive(message));
|
|
31
|
+
}
|
|
32
|
+
},
|
|
20
33
|
});
|
|
21
34
|
|
|
22
35
|
return [adapter1, adapter2];
|
|
@@ -7,14 +7,14 @@ import { type Context, LifecycleState, Resource } from '@dxos/context';
|
|
|
7
7
|
import { invariant } from '@dxos/invariant';
|
|
8
8
|
import { log } from '@dxos/log';
|
|
9
9
|
import type { AutomergeProtocolMessage } from '@dxos/protocols';
|
|
10
|
-
import
|
|
10
|
+
import * as TeleportAutomergeReplicator from '@dxos/teleport-extension-automerge-replicator';
|
|
11
11
|
|
|
12
12
|
import type {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
AutomergeReplicator,
|
|
14
|
+
AutomergeReplicatorConnection,
|
|
15
|
+
AutomergeReplicatorContext,
|
|
16
|
+
ShouldAdvertiseProps,
|
|
17
|
+
ShouldSyncCollectionProps,
|
|
18
18
|
} from '../automerge';
|
|
19
19
|
|
|
20
20
|
export type TestReplicatorNetworkOptions = {
|
|
@@ -30,7 +30,7 @@ export class TestReplicationNetwork extends Resource {
|
|
|
30
30
|
this._latency = options.latency;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
protected override async _close(
|
|
33
|
+
protected override async _close(_ctx: Context): Promise<void> {
|
|
34
34
|
for (const replicator of this._replicators) {
|
|
35
35
|
for (const connection of replicator.connections) {
|
|
36
36
|
void connection.writable.abort();
|
|
@@ -115,19 +115,19 @@ export class TestReplicationNetwork extends Resource {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
type
|
|
118
|
+
type TestReplicatorProps = {
|
|
119
119
|
onConnect: () => Promise<void>;
|
|
120
120
|
onDisconnect: () => Promise<void>;
|
|
121
121
|
};
|
|
122
122
|
|
|
123
|
-
export class TestReplicator implements
|
|
124
|
-
constructor(private readonly _params:
|
|
123
|
+
export class TestReplicator implements AutomergeReplicator {
|
|
124
|
+
constructor(private readonly _params: TestReplicatorProps) {}
|
|
125
125
|
|
|
126
126
|
public connected = false;
|
|
127
|
-
public context:
|
|
127
|
+
public context: AutomergeReplicatorContext | undefined = undefined;
|
|
128
128
|
public connections = new Set<TestReplicatorConnection>();
|
|
129
129
|
|
|
130
|
-
async connect(context:
|
|
130
|
+
async connect(context: AutomergeReplicatorContext): Promise<void> {
|
|
131
131
|
log('connect', { peerId: context.peerId });
|
|
132
132
|
this.context = context;
|
|
133
133
|
this.connected = true;
|
|
@@ -153,7 +153,7 @@ export class TestReplicator implements EchoReplicator {
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
export class TestReplicatorConnection implements
|
|
156
|
+
export class TestReplicatorConnection implements AutomergeReplicatorConnection {
|
|
157
157
|
public otherSide: TestReplicatorConnection | undefined = undefined;
|
|
158
158
|
public owningReplicator: TestReplicator | undefined = undefined;
|
|
159
159
|
|
|
@@ -163,17 +163,21 @@ export class TestReplicatorConnection implements ReplicatorConnection {
|
|
|
163
163
|
public readonly writable: WritableStream<AutomergeProtocolMessage>,
|
|
164
164
|
) {}
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
get bundleSyncEnabled(): boolean {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async shouldAdvertise(_params: ShouldAdvertiseProps): Promise<boolean> {
|
|
167
171
|
return true;
|
|
168
172
|
}
|
|
169
173
|
|
|
170
|
-
shouldSyncCollection(
|
|
174
|
+
shouldSyncCollection(_params: ShouldSyncCollectionProps): boolean {
|
|
171
175
|
return true;
|
|
172
176
|
}
|
|
173
177
|
}
|
|
174
178
|
|
|
175
|
-
export const testAutomergeReplicatorFactory: AutomergeReplicatorFactory = (params) => {
|
|
176
|
-
return new AutomergeReplicator(
|
|
179
|
+
export const testAutomergeReplicatorFactory: TeleportAutomergeReplicator.AutomergeReplicatorFactory = (params) => {
|
|
180
|
+
return new TeleportAutomergeReplicator.AutomergeReplicator(
|
|
177
181
|
{
|
|
178
182
|
...params[0],
|
|
179
183
|
sendSyncRetryPolicy: {
|
|
@@ -186,9 +190,10 @@ export const testAutomergeReplicatorFactory: AutomergeReplicatorFactory = (param
|
|
|
186
190
|
);
|
|
187
191
|
};
|
|
188
192
|
|
|
189
|
-
export const brokenAutomergeReplicatorFactory: AutomergeReplicatorFactory = (params) => {
|
|
193
|
+
export const brokenAutomergeReplicatorFactory: TeleportAutomergeReplicator.AutomergeReplicatorFactory = (params) => {
|
|
190
194
|
params[1]!.onSyncMessage = () => {
|
|
191
195
|
throw new Error();
|
|
192
196
|
};
|
|
197
|
+
|
|
193
198
|
return testAutomergeReplicatorFactory(params);
|
|
194
199
|
};
|
package/src/util.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { type DatabaseDirectory, EncodedReference, ObjectStructure } from '@dxos/echo-protocol';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Assumes properties are at root.
|
|
@@ -14,8 +14,12 @@ export const findInlineObjectOfType = (
|
|
|
14
14
|
for (const id in spaceDoc.objects ?? {}) {
|
|
15
15
|
const obj = spaceDoc.objects![id];
|
|
16
16
|
const objType = ObjectStructure.getTypeReference(obj);
|
|
17
|
-
if (objType
|
|
18
|
-
|
|
17
|
+
if (objType) {
|
|
18
|
+
const typeDXN = EncodedReference.toDXN(objType);
|
|
19
|
+
const typeDXNInfo = typeDXN.asTypeDXN();
|
|
20
|
+
if (typeDXNInfo?.type === typename) {
|
|
21
|
+
return [id, obj];
|
|
22
|
+
}
|
|
19
23
|
}
|
|
20
24
|
}
|
|
21
25
|
|