@dxos/echo-pipeline 0.8.3 → 0.8.4-main.05e74ebcff
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/neutral/chunk-46DCRDA7.mjs +271 -0
- package/dist/lib/neutral/chunk-46DCRDA7.mjs.map +7 -0
- package/dist/lib/{browser/chunk-35I6ERLG.mjs → neutral/chunk-LR7UFVQX.mjs} +313 -709
- package/dist/lib/neutral/chunk-LR7UFVQX.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/filter/index.mjs +3 -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 +90 -311
- 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 +119 -54
- 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 +25 -4
- 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 +23 -10
- package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-replicator.d.ts +46 -15
- 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 +3 -1
- package/dist/types/src/automerge/index.d.ts.map +1 -1
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +11 -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 +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/codec.d.ts +1 -1
- package/dist/types/src/common/codec.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 +13 -7
- 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 +19 -11
- 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 +4 -3
- 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 +10 -7
- 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 +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/message-selector.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/pipeline/timeframe-clock.d.ts.map +1 -1
- package/dist/types/src/query/errors.d.ts +22 -10
- package/dist/types/src/query/errors.d.ts.map +1 -1
- package/dist/types/src/query/plan.d.ts +66 -8
- package/dist/types/src/query/plan.d.ts.map +1 -1
- package/dist/types/src/query/query-executor.d.ts +66 -11
- package/dist/types/src/query/query-executor.d.ts.map +1 -1
- package/dist/types/src/query/query-planner.d.ts +12 -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 +5 -4
- package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
- package/dist/types/src/space/space-manager.d.ts +8 -8
- package/dist/types/src/space/space-manager.d.ts.map +1 -1
- package/dist/types/src/space/space-protocol.d.ts +10 -9
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +6 -6
- 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 +2 -2
- 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 +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 +59 -55
- package/src/automerge/automerge-host-subduction.test.ts +263 -0
- package/src/automerge/automerge-host.test.ts +162 -39
- package/src/automerge/automerge-host.ts +679 -201
- package/src/automerge/automerge-repo-subduction.test.ts +1054 -0
- package/src/automerge/automerge-repo.test.ts +349 -91
- package/src/automerge/automerge-subduction.test.ts +330 -0
- package/src/automerge/collection-synchronizer.test.ts +98 -17
- package/src/automerge/collection-synchronizer.ts +141 -37
- package/src/automerge/echo-data-monitor.ts +1 -1
- package/src/automerge/echo-network-adapter.test.ts +5 -4
- package/src/automerge/echo-network-adapter.ts +76 -31
- package/src/automerge/echo-replicator.ts +50 -15
- 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 +3 -1
- package/src/automerge/leveldb-storage-adapter.ts +77 -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 +299 -0
- package/src/db-host/automerge-data-source.ts +187 -0
- package/src/db-host/data-service.ts +35 -26
- package/src/db-host/database-root.ts +20 -8
- package/src/db-host/documents-synchronizer.test.ts +145 -14
- package/src/db-host/documents-synchronizer.ts +163 -51
- package/src/db-host/echo-host.ts +384 -99
- 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 +111 -106
- 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 +12 -10
- package/src/db-host/stub.ts +33 -0
- package/src/edge/echo-edge-replicator.test.ts +12 -10
- package/src/edge/echo-edge-replicator.ts +144 -58
- 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 +68 -32
- package/src/filter/filter-match.ts +230 -21
- package/src/metadata/metadata-store.ts +11 -8
- package/src/pipeline/pipeline-stress.test.ts +1 -1
- package/src/pipeline/pipeline.test.ts +2 -2
- package/src/pipeline/pipeline.ts +9 -7
- package/src/query/errors.ts +3 -1
- package/src/query/plan.ts +84 -9
- package/src/query/query-executor.ts +1197 -165
- package/src/query/query-planner.test.ts +993 -81
- package/src/query/query-planner.ts +503 -27
- package/src/space/admission-discovery-extension.ts +3 -3
- package/src/space/auth.ts +6 -6
- package/src/space/control-pipeline.test.ts +5 -4
- package/src/space/control-pipeline.ts +16 -13
- package/src/space/space-manager.browser.test.ts +1 -1
- package/src/space/space-manager.ts +16 -20
- package/src/space/space-protocol.browser.test.ts +15 -14
- package/src/space/space-protocol.test.ts +15 -14
- package/src/space/space-protocol.ts +22 -18
- package/src/space/space.test.ts +3 -3
- package/src/space/space.ts +11 -11
- package/src/testing/index.ts +0 -2
- package/src/testing/test-agent-builder.ts +3 -3
- package/src/testing/test-network-adapter.ts +24 -3
- package/src/testing/test-replicator.ts +19 -20
- 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 +0 -4743
- 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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/testing/change-metadata.ts", "../../../../src/testing/test-agent-builder.ts", "../../../../src/testing/test-feed-builder.ts", "../../../../src/testing/test-network-adapter.ts", "../../../../src/testing/test-replicator.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { log } from '@dxos/log';\nimport { schema } from '@dxos/protocols/proto';\nimport type { Storage } from '@dxos/random-access-storage';\n\nimport { MetadataStore } from '../metadata';\n\nconst EchoMetadata = schema.getCodecForType('dxos.echo.metadata.EchoMetadata');\n\n/**\n * This function will change the storage version in the metadata.\n * This will break your storage and make it unusable.\n * Use this only for testing purposes.\n */\nexport const changeStorageVersionInMetadata = async (storage: Storage, version: number) => {\n log('Changing storage version in metadata. USE ONLY FOR TESTING.');\n const metadata = new MetadataStore(storage.createDirectory('metadata'));\n await metadata.load();\n const echoMetadata = metadata.metadata;\n echoMetadata.version = version;\n const file = metadata._directory.getOrCreateFile('EchoMetadata');\n await metadata._writeFile(file, EchoMetadata, echoMetadata);\n await metadata._directory.flush();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { CredentialGenerator } from '@dxos/credentials';\nimport { type FeedStore } from '@dxos/feed-store';\nimport { type Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { MemoryTransportFactory, SwarmNetworkManager, createRtcTransportFactory } from '@dxos/network-manager';\nimport { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { AdmittedFeed } from '@dxos/protocols/proto/dxos/halo/credentials';\nimport { type Storage, StorageType, createStorage } from '@dxos/random-access-storage';\nimport { Gossip, Presence } from '@dxos/teleport-extension-gossip';\nimport { BlobStore } from '@dxos/teleport-extension-object-sync';\nimport { ComplexMap } from '@dxos/util';\n\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, type Space, SpaceManager, SpaceProtocol } from '../space';\nimport { TestFeedBuilder } from './test-feed-builder';\n\nexport type NetworkManagerProvider = () => SwarmNetworkManager;\n\nexport const MemoryNetworkManagerProvider =\n (signalContext: MemorySignalManagerContext): NetworkManagerProvider =>\n () =>\n new SwarmNetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory,\n });\n\nexport const WebsocketNetworkManagerProvider =\n (signalUrl: string): NetworkManagerProvider =>\n () =>\n new SwarmNetworkManager({\n signalManager: new WebsocketSignalManager([{ server: signalUrl }]),\n transportFactory: createRtcTransportFactory(),\n });\n\nexport type TestAgentBuilderOptions = {\n storage?: Storage;\n networkManagerProvider?: NetworkManagerProvider;\n};\n\n/**\n * Factory for test agents.\n */\nexport class TestAgentBuilder {\n private readonly _agents = new ComplexMap<PublicKey, TestAgent>(PublicKey.hash);\n private readonly _storage: Storage;\n private readonly _networkManagerProvider: NetworkManagerProvider;\n\n constructor({ storage, networkManagerProvider }: TestAgentBuilderOptions = {}) {\n this._storage = storage ?? createStorage({ type: StorageType.RAM });\n this._networkManagerProvider =\n networkManagerProvider ?? MemoryNetworkManagerProvider(new MemorySignalManagerContext());\n }\n\n async close() {\n return Promise.all(this.agents.map((agent) => agent.close()));\n }\n\n get agents() {\n return Array.from(this._agents.values());\n }\n\n getAgent(deviceKey: PublicKey): TestAgent | undefined {\n return this._agents.get(deviceKey);\n }\n\n async createPeer(): Promise<TestAgent> {\n // prettier-ignore\n const feedBuilder = new TestFeedBuilder()\n .setStorage(this._storage, `agent-${this._agents.size}`);\n\n const identityKey = await feedBuilder.keyring.createKey();\n const deviceKey = await feedBuilder.keyring.createKey();\n\n const agent = new TestAgent(this._networkManagerProvider, feedBuilder, identityKey, deviceKey);\n this._agents.set(deviceKey, agent);\n return agent;\n }\n}\n\n/**\n * Test agent that enables the creation and replication of multiple spaces.\n */\nexport class TestAgent {\n private readonly _spaces = new ComplexMap<PublicKey, Space>(PublicKey.hash);\n\n public readonly storage: Storage;\n public readonly keyring: Keyring;\n public readonly feedStore: FeedStore<FeedMessage>;\n\n private _metadataStore?: MetadataStore;\n get metadataStore() {\n return (this._metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));\n }\n\n private _blobStore?: BlobStore;\n get blobStore() {\n return (this._blobStore ??= new BlobStore(this.storage.createDirectory('blobs')));\n }\n\n constructor(\n private readonly _networkManagerProvider: NetworkManagerProvider,\n private readonly _feedBuilder: TestFeedBuilder,\n public readonly identityKey: PublicKey,\n public readonly deviceKey: PublicKey,\n ) {\n this.storage = this._feedBuilder.storage;\n this.keyring = this._feedBuilder.keyring;\n this.feedStore = this._feedBuilder.createFeedStore();\n }\n\n async close() {\n return Promise.all([...this.spaces.map((space) => space.close())]);\n }\n\n get spaces() {\n return Array.from(this._spaces.values());\n }\n\n getSpace(spaceKey: PublicKey): Space | undefined {\n return this._spaces.get(spaceKey);\n }\n\n private _networkManager?: SwarmNetworkManager;\n get networkManager() {\n if (this._networkManager) {\n return this._networkManager;\n }\n\n this._networkManager = this._networkManagerProvider();\n this._networkManager.setPeerInfo({ peerKey: this.deviceKey.toHex(), identityKey: this.identityKey.toHex() });\n\n return this._networkManager;\n }\n\n private _spaceManager?: SpaceManager;\n get spaceManager() {\n return (this._spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this.networkManager,\n metadataStore: this.metadataStore,\n blobStore: this.blobStore,\n }));\n }\n\n async createSpace(\n identityKey: PublicKey = this.identityKey,\n spaceKey?: PublicKey,\n genesisKey?: PublicKey,\n dataKey?: PublicKey,\n saveMetadata = false,\n ): Promise<Space> {\n if (!spaceKey) {\n saveMetadata = true;\n spaceKey = await this.keyring.createKey();\n }\n if (!genesisKey) {\n genesisKey = await this.keyring.createKey();\n }\n\n const controlFeed = await this.feedStore.openFeed(genesisKey, { writable: true });\n const dataFeed = await this.feedStore.openFeed(dataKey ?? (await this.keyring.createKey()), {\n writable: true,\n sparse: true,\n });\n\n const metadata: SpaceMetadata = {\n key: spaceKey,\n genesisFeedKey: genesisKey,\n controlFeedKey: controlFeed.key,\n dataFeedKey: dataFeed.key,\n };\n if (saveMetadata) {\n await this.metadataStore.addSpace(metadata);\n }\n\n await this.spaceManager.open();\n const space = await this.spaceManager.constructSpace({\n metadata,\n swarmIdentity: {\n identityKey: this.identityKey,\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER,\n },\n memberKey: identityKey,\n onAuthorizedConnection: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n this.createGossip().createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n onDelegatedInvitationStatusChange: async () => {},\n onMemberRolesChanged: async () => {},\n });\n await space.setControlFeed(controlFeed);\n await space.setDataFeed(dataFeed);\n\n await space.open(new Context());\n\n this._spaces.set(spaceKey, space);\n return space;\n }\n\n createSpaceProtocol(topic: PublicKey, gossip?: Gossip): SpaceProtocol {\n return new SpaceProtocol({\n topic,\n swarmIdentity: {\n identityKey: this.identityKey,\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER,\n },\n networkManager: this.networkManager,\n blobStore: this.blobStore,\n onSessionAuth: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n (gossip ?? this.createGossip()).createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n });\n }\n\n createGossip(): Gossip {\n return new Gossip({\n localPeerId: this.deviceKey,\n });\n }\n\n createPresence(gossip?: Gossip): Presence {\n return new Presence({\n announceInterval: 30,\n offlineTimeout: 200,\n identityKey: this.identityKey,\n gossip: gossip ?? this.createGossip(),\n });\n }\n\n async spaceGenesis(space: Space): Promise<void> {\n const generator = new CredentialGenerator(this.keyring, this.identityKey, this.deviceKey);\n const credentials = [\n ...(await generator.createSpaceGenesis(space.key, space.controlFeedKey!)),\n await generator.createFeedAdmission(space.key, space.dataFeedKey!, AdmittedFeed.Designation.DATA),\n await generator.createEpochCredential(space.key),\n ];\n\n for (const credential of credentials) {\n await space.controlPipeline.writer.write({\n credential: { credential },\n });\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { TestBuilder } from '@dxos/feed-store/testing';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\n\nimport { valueEncoding } from '../common';\n\n/**\n * Builder with default encoder and generator.\n */\nexport class TestFeedBuilder extends TestBuilder<FeedMessage> {\n constructor() {\n super({\n valueEncoding,\n });\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Message, NetworkAdapter, type PeerId } from '@automerge/automerge-repo';\n\nimport { Trigger, sleep } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nexport type TestConnectionStateProvider = () => 'on' | 'off';\n\nexport class TestAdapter extends NetworkAdapter {\n static createPair(\n connectionStateProvider: TestConnectionStateProvider = () => 'on',\n onMessage?: (message: Message) => void,\n ): TestAdapter[] {\n const adapter1: TestAdapter = new TestAdapter({\n send: (message: Message) => {\n onMessage?.(message);\n if (connectionStateProvider() === 'on') {\n void sleep(10).then(() => {\n if (connectionStateProvider() === 'on' && adapter2.peerId) {\n adapter2.receive(message);\n }\n });\n }\n },\n });\n const adapter2: TestAdapter = new TestAdapter({\n send: (message: Message) => {\n onMessage?.(message);\n if (connectionStateProvider() === 'on') {\n void sleep(10).then(() => {\n if (connectionStateProvider() === 'on' && adapter1.peerId) {\n adapter1.receive(message);\n }\n });\n }\n },\n });\n\n return [adapter1, adapter2];\n }\n\n public onConnect = new Trigger();\n\n constructor(private readonly _params: { send: (message: Message) => void }) {\n super();\n }\n\n override isReady(): boolean {\n return true;\n }\n\n override whenReady(): Promise<void> {\n return Promise.resolve();\n }\n\n override connect(peerId: PeerId): void {\n this.peerId = peerId;\n this.onConnect.wake();\n }\n\n peerCandidate(peerId: PeerId): void {\n invariant(peerId, 'PeerId is required');\n this.emit('peer-candidate', { peerId, peerMetadata: {} });\n }\n\n peerDisconnected(peerId: PeerId): void {\n invariant(peerId, 'PeerId is required');\n this.emit('peer-disconnected', { peerId });\n }\n\n override send(message: Message): void {\n log('send', { from: message.senderId, to: message.targetId, type: message.type });\n this._params.send(message);\n }\n\n override disconnect(): void {\n this.peerId = undefined;\n }\n\n receive(message: Message): void {\n invariant(this.peerId, 'Peer id is not set');\n this.emit('message', message);\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { sleep, synchronized } from '@dxos/async';\nimport { type Context, LifecycleState, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport type { AutomergeProtocolMessage } from '@dxos/protocols';\nimport * as TeleportAutomergeReplicator from '@dxos/teleport-extension-automerge-replicator';\n\nimport type { AutomergeReplicator, AutomergeReplicatorConnection, AutomergeReplicatorContext } from '../automerge';\n\nexport type TestReplicatorNetworkOptions = {\n latency?: number;\n};\n\nexport class TestReplicationNetwork extends Resource {\n private readonly _replicators = new Set<TestReplicator>();\n private readonly _latency?: number = undefined;\n\n constructor(options: TestReplicatorNetworkOptions = {}) {\n super();\n this._latency = options.latency;\n }\n\n protected override async _close(_ctx: Context): Promise<void> {\n for (const replicator of this._replicators) {\n for (const connection of replicator.connections) {\n void connection.writable.abort();\n void connection.readable.cancel();\n }\n }\n }\n\n async createReplicator(): Promise<TestReplicator> {\n const replicator = new TestReplicator({\n onConnect: async () => {\n invariant(this._lifecycleState === LifecycleState.OPEN);\n await this._connectReplicator(replicator);\n },\n onDisconnect: async () => {\n invariant(this._lifecycleState === LifecycleState.OPEN);\n await this._disconnectReplicator(replicator);\n },\n });\n this._replicators.add(replicator);\n return replicator;\n }\n\n @synchronized\n private async _connectReplicator(replicator: TestReplicator): Promise<void> {\n for (const otherReplicator of this._replicators.values()) {\n if (otherReplicator === replicator || !otherReplicator.connected) {\n continue;\n }\n log('create connection', { from: replicator.context!.peerId, to: otherReplicator.context!.peerId });\n const [connection1, connection2] = this._createConnectionPair(\n replicator.context!.peerId,\n otherReplicator.context!.peerId,\n );\n await replicator.context!.onConnectionOpen(connection1);\n await otherReplicator.context!.onConnectionOpen(connection2);\n }\n }\n\n private async _disconnectReplicator(replicator: TestReplicator): Promise<void> {\n for (const connection of replicator.connections) {\n await replicator.context!.onConnectionClosed(connection);\n await connection.otherSide!.owningReplicator!.removeConnection(connection.otherSide!);\n }\n }\n\n private _createConnectionPair(peer1: string, peer2: string): [TestReplicatorConnection, TestReplicatorConnection] {\n const LOG = false;\n\n const forward = new TransformStream({\n transform: async (message, controller) => {\n if (LOG) {\n log('replicate', { from: peer1, to: peer2, message });\n }\n\n if (this._latency !== undefined) {\n await sleep(this._latency);\n }\n\n controller.enqueue(message);\n },\n });\n const backwards = new TransformStream({\n transform: async (message, controller) => {\n if (LOG) {\n log('replicate', { from: peer2, to: peer1, message });\n }\n\n if (this._latency !== undefined) {\n await sleep(this._latency);\n }\n\n controller.enqueue(message);\n },\n });\n\n const connection1 = new TestReplicatorConnection(peer2, backwards.readable, forward.writable);\n const connection2 = new TestReplicatorConnection(peer1, forward.readable, backwards.writable);\n connection1.otherSide = connection2;\n connection2.otherSide = connection1;\n return [connection1, connection2];\n }\n}\n\ntype TestReplicatorProps = {\n onConnect: () => Promise<void>;\n onDisconnect: () => Promise<void>;\n};\n\nexport class TestReplicator implements AutomergeReplicator {\n constructor(private readonly _params: TestReplicatorProps) {}\n\n public connected = false;\n public context: AutomergeReplicatorContext | undefined = undefined;\n public connections = new Set<TestReplicatorConnection>();\n\n async connect(_ctx: Context, context: AutomergeReplicatorContext): Promise<void> {\n log('connect', { peerId: context.peerId });\n this.context = context;\n this.connected = true;\n await this._params.onConnect();\n }\n\n async disconnect(): Promise<void> {\n log('disconnect', { peerId: this.context!.peerId });\n this.connected = false;\n await this._params.onDisconnect();\n }\n\n async addConnection(connection: TestReplicatorConnection): Promise<void> {\n connection.owningReplicator = this;\n this.connections.add(connection);\n this.context!.onConnectionOpen(connection);\n }\n\n async removeConnection(connection: TestReplicatorConnection): Promise<void> {\n connection.owningReplicator = undefined;\n this.context!.onConnectionClosed(connection);\n this.connections.delete(connection);\n }\n}\n\nexport class TestReplicatorConnection implements AutomergeReplicatorConnection {\n public otherSide: TestReplicatorConnection | undefined = undefined;\n public owningReplicator: TestReplicator | undefined = undefined;\n\n constructor(\n public readonly peerId: string,\n public readonly readable: ReadableStream<AutomergeProtocolMessage>,\n public readonly writable: WritableStream<AutomergeProtocolMessage>,\n ) {}\n\n get bundleSyncEnabled(): boolean {\n return false;\n }\n\n async shouldAdvertise(): Promise<boolean> {\n return true;\n }\n\n shouldSyncCollection(): boolean {\n return true;\n }\n}\n\nexport const testAutomergeReplicatorFactory: TeleportAutomergeReplicator.AutomergeReplicatorFactory = (params) => {\n return new TeleportAutomergeReplicator.AutomergeReplicator(\n {\n ...params[0],\n sendSyncRetryPolicy: {\n retryBackoff: 20,\n retriesBeforeBackoff: 2,\n maxRetries: 3,\n },\n },\n params[1],\n );\n};\n\nexport const brokenAutomergeReplicatorFactory: TeleportAutomergeReplicator.AutomergeReplicatorFactory = (params) => {\n params[1]!.onSyncMessage = () => {\n throw new Error();\n };\n\n return testAutomergeReplicatorFactory(params);\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["log", "schema", "EchoMetadata", "metadata", "createDirectory", "echoMetadata", "version", "file", "_directory", "_writeFile", "Context", "CredentialGenerator", "PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "MemoryTransportFactory", "SwarmNetworkManager", "createRtcTransportFactory", "AdmittedFeed", "StorageType", "createStorage", "Gossip", "Presence", "BlobStore", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "valueEncoding", "__dxlog_file", "MemoryNetworkManagerProvider", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "server", "signalUrl", "_storage", "_networkManagerProvider", "type", "StorageType", "close", "agents", "getAgent", "deviceKey", "createPeer", "feedBuilder", "keyring", "agent", "TestAgent", "_agents", "_spaces", "storage", "feedStore", "_metadataStore", "_blobStore", "_feedBuilder", "identityKey", "spaces", "getSpace", "spaceKey", "_networkManager", "peerKey", "toHex", "_spaceManager", "networkManager", "metadataStore", "blobStore", "saveMetadata", "genesisKey", "controlFeed", "openFeed", "dataFeed", "sparse", "metadata", "genesisFeedKey", "controlFeedKey", "dataFeedKey", "spaceManager", "swarmIdentity", "credentialProvider", "credentialAuthenticator", "memberKey", "onAuthorizedConnection", "session", "remotePeerId", "onDelegatedInvitationStatusChange", "onMemberRolesChanged", "space", "open", "Context", "createSpaceProtocol", "topic", "onSessionAuth", "addExtension", "createGossip", "localPeerId", "createPresence", "announceInterval", "offlineTimeout", "gossip", "credentials", "generator", "createFeedAdmission", "createEpochCredential", "key", "credential", "NetworkAdapter", "Trigger", "sleep", "invariant", "log", "__dxlog_file", "TestAdapter", "createPair", "connectionStateProvider", "message", "onMessage", "then", "adapter2", "receive", "adapter1", "onConnect", "_params", "isReady", "whenReady", "connect", "peerId", "peerCandidate", "peerMetadata", "peerDisconnected", "send", "to", "type", "disconnect", "LifecycleState", "invariant", "log", "TeleportAutomergeReplicator", "Resource", "_replicators", "_latency", "undefined", "replicator", "connection", "connections", "writable", "readable", "cancel", "onConnect", "_lifecycleState", "_connectReplicator", "onDisconnect", "_disconnectReplicator", "otherReplicator", "from", "context", "to", "connection1", "connection2", "_createConnectionPair", "onConnectionOpen", "onConnectionClosed", "otherSide", "removeConnection", "forward", "transform", "controller", "LOG", "peer1", "peer2", "message", "__dxlog_file", "sleep", "TestReplicatorConnection", "backwards", "TestReplicator", "_params", "connected", "_ctx", "peerId", "owningReplicator", "shouldSyncCollection", "AutomergeReplicator", "params", "sendSyncRetryPolicy", "retriesBeforeBackoff", "maxRetries", "Error"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automerge-host-subduction.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host-subduction.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,50 +1,79 @@
|
|
|
1
1
|
import { type Doc, type Heads } from '@automerge/automerge';
|
|
2
|
-
import {
|
|
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';
|
|
8
|
+
import { type SpaceSyncState } from '@dxos/protocols/proto/dxos/echo/service';
|
|
9
9
|
import { type DocHeadsList, type FlushRequest } from '@dxos/protocols/proto/dxos/echo/service';
|
|
10
10
|
import { type CollectionState } from './collection-synchronizer';
|
|
11
11
|
import { type EchoDataMonitor } from './echo-data-monitor';
|
|
12
|
-
import { type
|
|
12
|
+
import { type AutomergeReplicator } from './echo-replicator';
|
|
13
13
|
export type PeerIdProvider = () => string | undefined;
|
|
14
14
|
export type RootDocumentSpaceKeyProvider = (documentId: string) => PublicKey | undefined;
|
|
15
|
-
export type
|
|
15
|
+
export type AutomergeHostProps = {
|
|
16
16
|
db: LevelDB;
|
|
17
|
-
indexMetadataStore: IndexMetadataStore;
|
|
18
17
|
dataMonitor?: EchoDataMonitor;
|
|
19
18
|
/**
|
|
20
19
|
* Used for creating stable ids. A random key is generated on open, if no value is provided.
|
|
21
20
|
*/
|
|
22
21
|
peerIdProvider?: PeerIdProvider;
|
|
23
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;
|
|
24
32
|
};
|
|
25
33
|
export type LoadDocOptions = {
|
|
26
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;
|
|
27
48
|
};
|
|
28
49
|
export type CreateDocOptions = {
|
|
29
50
|
/**
|
|
30
51
|
* Import the document together with its history.
|
|
31
52
|
*/
|
|
32
53
|
preserveHistory?: boolean;
|
|
33
|
-
|
|
34
|
-
export declare const FIND_PARAMS: {
|
|
35
|
-
allowableStates: ("requesting" | "ready")[];
|
|
54
|
+
documentId?: DocumentId;
|
|
36
55
|
};
|
|
37
56
|
/**
|
|
38
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.
|
|
39
64
|
*/
|
|
40
65
|
export declare class AutomergeHost extends Resource {
|
|
41
66
|
private readonly _db;
|
|
42
|
-
private readonly _indexMetadataStore;
|
|
43
67
|
private readonly _echoNetworkAdapter;
|
|
44
68
|
private readonly _collectionSynchronizer;
|
|
45
69
|
private _repo;
|
|
46
70
|
private _storage;
|
|
47
71
|
private readonly _headsStore;
|
|
72
|
+
private _syncTask;
|
|
73
|
+
/**
|
|
74
|
+
* Cache of collections that would be synced on next sync task run.
|
|
75
|
+
*/
|
|
76
|
+
private readonly _collectionsToSync;
|
|
48
77
|
private _peerId;
|
|
49
78
|
private readonly _peerIdProvider?;
|
|
50
79
|
private readonly _getSpaceKeyByRootDocumentId?;
|
|
@@ -55,47 +84,104 @@ export declare class AutomergeHost extends Resource {
|
|
|
55
84
|
* Fired after a batch of documents was saved to disk.
|
|
56
85
|
*/
|
|
57
86
|
readonly documentsSaved: Event<void>;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
protected _close(): Promise<void>;
|
|
87
|
+
private readonly _headsUpdates;
|
|
88
|
+
private _onHeadsChangedTask?;
|
|
61
89
|
/**
|
|
62
|
-
*
|
|
90
|
+
* Documents created in this session.
|
|
63
91
|
*/
|
|
64
|
-
|
|
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.
|
|
99
|
+
*/
|
|
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>;
|
|
65
111
|
get peerId(): PeerId;
|
|
66
112
|
get loadedDocsCount(): number;
|
|
67
|
-
|
|
68
|
-
|
|
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>;
|
|
69
127
|
/**
|
|
70
|
-
*
|
|
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`.
|
|
71
137
|
*/
|
|
72
|
-
|
|
73
|
-
exportDoc(ctx: Context, id: AnyDocumentId): Promise<Uint8Array>;
|
|
138
|
+
hasDocOnDisk(id: AnyDocumentId): Promise<boolean>;
|
|
74
139
|
/**
|
|
75
140
|
* Create new persisted document.
|
|
76
141
|
*/
|
|
77
|
-
createDoc<T>(initialValue?: T | Doc<T> | Uint8Array, opts?: CreateDocOptions): DocHandle<T
|
|
78
|
-
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>;
|
|
79
144
|
reIndexHeads(documentIds: DocumentId[]): Promise<void>;
|
|
80
|
-
private _sharePolicy;
|
|
81
|
-
private _beforeSave;
|
|
82
|
-
private _shouldSyncCollection;
|
|
83
145
|
/**
|
|
84
|
-
*
|
|
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}.
|
|
151
|
+
*/
|
|
152
|
+
private readonly _shareConfig;
|
|
153
|
+
/**
|
|
154
|
+
* Authorization policy consulted by the Subduction sedimentree protocol.
|
|
85
155
|
*/
|
|
156
|
+
private readonly _subductionPolicy;
|
|
157
|
+
private _beforeSave;
|
|
158
|
+
private _shouldSyncCollection;
|
|
86
159
|
private _afterSave;
|
|
87
|
-
private _automergePeers;
|
|
88
160
|
private _isDocumentInRemoteCollection;
|
|
89
161
|
private _getContainingSpaceForDocument;
|
|
90
162
|
/**
|
|
91
163
|
* Flush documents to disk.
|
|
92
164
|
*/
|
|
93
|
-
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
|
+
*/
|
|
94
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
|
+
}>;
|
|
95
181
|
getLocalCollectionState(collectionId: string): CollectionState | undefined;
|
|
96
182
|
getRemoteCollectionStates(collectionId: string): ReadonlyMap<PeerId, CollectionState>;
|
|
97
183
|
refreshCollection(collectionId: string): void;
|
|
98
|
-
getCollectionSyncState(collectionId: string): Promise<
|
|
184
|
+
getCollectionSyncState(collectionId: string): Promise<SpaceSyncState>;
|
|
99
185
|
/**
|
|
100
186
|
* Update the local collection state based on the locally stored document heads.
|
|
101
187
|
*/
|
|
@@ -108,32 +194,11 @@ export declare class AutomergeHost extends Resource {
|
|
|
108
194
|
private _onPeerConnected;
|
|
109
195
|
private _onPeerDisconnected;
|
|
110
196
|
private _onRemoteCollectionStateUpdated;
|
|
197
|
+
private _handleCollectionSync;
|
|
198
|
+
private _pushInBundles;
|
|
199
|
+
private _pushBundle;
|
|
200
|
+
private _pullInBundles;
|
|
201
|
+
private _pullBundle;
|
|
111
202
|
private _onHeadsChanged;
|
|
112
203
|
}
|
|
113
|
-
export type CollectionSyncState = {
|
|
114
|
-
peers: PeerSyncState[];
|
|
115
|
-
};
|
|
116
|
-
export type PeerSyncState = {
|
|
117
|
-
peerId: PeerId;
|
|
118
|
-
/**
|
|
119
|
-
* Documents that are present locally but not on the remote peer.
|
|
120
|
-
*/
|
|
121
|
-
missingOnRemote: number;
|
|
122
|
-
/**
|
|
123
|
-
* Documents that are present on the remote peer but not locally.
|
|
124
|
-
*/
|
|
125
|
-
missingOnLocal: number;
|
|
126
|
-
/**
|
|
127
|
-
* Documents that are present on both peers but have different heads.
|
|
128
|
-
*/
|
|
129
|
-
differentDocuments: number;
|
|
130
|
-
/**
|
|
131
|
-
* Total number of documents locally.
|
|
132
|
-
*/
|
|
133
|
-
localDocumentCount: number;
|
|
134
|
-
/**
|
|
135
|
-
* Total number of documents on the remote peer.
|
|
136
|
-
*/
|
|
137
|
-
remoteDocumentCount: number;
|
|
138
|
-
};
|
|
139
204
|
//# sourceMappingURL=automerge-host.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
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":""}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { type Heads } from '@automerge/automerge';
|
|
1
2
|
import type { DocumentId, PeerId } from '@automerge/automerge-repo';
|
|
2
3
|
import { Event } from '@dxos/async';
|
|
3
|
-
import {
|
|
4
|
-
export type
|
|
4
|
+
import { type Context, Resource } from '@dxos/context';
|
|
5
|
+
export type CollectionSynchronizerProps = {
|
|
5
6
|
sendCollectionState: (collectionId: string, peerId: PeerId, state: CollectionState) => void;
|
|
6
7
|
queryCollectionState: (collectionId: string, peerId: PeerId) => void;
|
|
7
8
|
shouldSyncCollection: (collectionId: string, peerId: PeerId) => boolean;
|
|
@@ -24,11 +25,19 @@ export declare class CollectionSynchronizer extends Resource {
|
|
|
24
25
|
peerId: PeerId;
|
|
25
26
|
newDocsAppeared: boolean;
|
|
26
27
|
}>;
|
|
27
|
-
constructor(params:
|
|
28
|
+
constructor(params: CollectionSynchronizerProps);
|
|
28
29
|
protected _open(ctx: Context): Promise<void>;
|
|
29
30
|
getRegisteredCollectionIds(): string[];
|
|
30
31
|
getLocalCollectionState(collectionId: string): CollectionState | undefined;
|
|
31
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;
|
|
32
41
|
clearLocalCollectionState(collectionId: string): void;
|
|
33
42
|
getRemoteCollectionStates(collectionId: string): ReadonlyMap<PeerId, CollectionState>;
|
|
34
43
|
refreshCollection(collectionId: string): void;
|
|
@@ -42,20 +51,32 @@ export declare class CollectionSynchronizer extends Resource {
|
|
|
42
51
|
onConnectionClosed(peerId: PeerId): void;
|
|
43
52
|
/**
|
|
44
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.
|
|
45
57
|
*/
|
|
46
58
|
onCollectionStateQueried(collectionId: string, peerId: PeerId): void;
|
|
47
59
|
/**
|
|
48
60
|
* Callback when a peer sends the state of a collection.
|
|
49
61
|
*/
|
|
50
62
|
onRemoteStateReceived(collectionId: string, peerId: PeerId, state: CollectionState): void;
|
|
63
|
+
private _diffCollectionState;
|
|
51
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;
|
|
52
73
|
private _refreshInterestedPeers;
|
|
53
74
|
}
|
|
54
75
|
export type CollectionState = {
|
|
55
76
|
/**
|
|
56
77
|
* DocumentId -> Heads.
|
|
57
78
|
*/
|
|
58
|
-
documents: Record<
|
|
79
|
+
documents: Record<DocumentId, Heads>;
|
|
59
80
|
};
|
|
60
81
|
export type CollectionStateDiff = {
|
|
61
82
|
missingOnRemote: DocumentId[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-synchronizer.d.ts","sourceRoot":"","sources":["../../../../src/automerge/collection-synchronizer.ts"],"names":[],"mappings":"
|
|
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
|
-
import {
|
|
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,13 +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[];
|
|
54
|
+
bundleSyncEnabledForPeer(peerId: PeerId): boolean;
|
|
55
|
+
pushBundle(ctx: Context, peerId: PeerId, bundle: {
|
|
56
|
+
documentId: DocumentId;
|
|
57
|
+
data: Uint8Array;
|
|
58
|
+
heads: Heads;
|
|
59
|
+
}[]): Promise<void>;
|
|
60
|
+
pullBundle(ctx: Context, peerId: PeerId, docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array<ArrayBufferLike>>>;
|
|
48
61
|
private _send;
|
|
49
62
|
private _onConnectionOpen;
|
|
50
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,
|
|
1
|
+
{"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"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"}
|