@dxos/echo-pipeline 0.6.13 → 0.6.14-main.2b6a0f3
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/browser/chunk-COV5H3SU.mjs +2060 -0
- package/dist/lib/browser/chunk-COV5H3SU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3477 -17
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +17 -7
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/{chunk-7HHYCGUR.cjs → chunk-XHGWCBX6.cjs} +116 -64
- package/dist/lib/node/chunk-XHGWCBX6.cjs.map +7 -0
- package/dist/lib/node/index.cjs +3454 -35
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +25 -15
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/lib/{browser/chunk-UKXIJW43.mjs → node-esm/chunk-KKYLPT56.mjs} +103 -53
- package/dist/lib/node-esm/chunk-KKYLPT56.mjs.map +7 -0
- package/dist/lib/{browser/chunk-MPWFDDQK.mjs → node-esm/index.mjs} +1723 -342
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/testing/index.mjs +562 -0
- package/dist/lib/node-esm/testing/index.mjs.map +7 -0
- package/dist/types/src/automerge/automerge-host.d.ts +24 -1
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/collection-synchronizer.d.ts +2 -0
- package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-replicator.d.ts +3 -3
- package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
- package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts +3 -3
- package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts.map +1 -1
- package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
- package/dist/types/src/automerge/space-collection.d.ts +3 -2
- package/dist/types/src/automerge/space-collection.d.ts.map +1 -1
- package/dist/types/src/db-host/automerge-metrics.d.ts +11 -0
- package/dist/types/src/db-host/automerge-metrics.d.ts.map +1 -0
- package/dist/types/src/db-host/data-service.d.ts +3 -2
- package/dist/types/src/db-host/data-service.d.ts.map +1 -1
- package/dist/types/src/db-host/database-root.d.ts +20 -0
- package/dist/types/src/db-host/database-root.d.ts.map +1 -0
- package/dist/types/src/db-host/documents-iterator.d.ts +7 -0
- package/dist/types/src/db-host/documents-iterator.d.ts.map +1 -0
- package/dist/types/src/db-host/echo-host.d.ts +73 -0
- package/dist/types/src/db-host/echo-host.d.ts.map +1 -0
- package/dist/types/src/db-host/index.d.ts +5 -0
- package/dist/types/src/db-host/index.d.ts.map +1 -1
- package/dist/types/src/db-host/migration.d.ts +8 -0
- package/dist/types/src/db-host/migration.d.ts.map +1 -0
- package/dist/types/src/db-host/query-service.d.ts +25 -0
- package/dist/types/src/db-host/query-service.d.ts.map +1 -0
- package/dist/types/src/db-host/query-state.d.ts +41 -0
- package/dist/types/src/db-host/query-state.d.ts.map +1 -0
- package/dist/types/src/db-host/space-state-manager.d.ts +23 -0
- package/dist/types/src/db-host/space-state-manager.d.ts.map +1 -0
- package/dist/types/src/edge/echo-edge-replicator.d.ts +23 -0
- package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -0
- package/dist/types/src/edge/echo-edge-replicator.test.d.ts +2 -0
- package/dist/types/src/edge/echo-edge-replicator.test.d.ts.map +1 -0
- package/dist/types/src/edge/index.d.ts +2 -0
- package/dist/types/src/edge/index.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts +4 -1
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +1 -0
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts +2 -0
- package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
- package/dist/types/src/testing/test-replicator.d.ts +4 -4
- package/dist/types/src/testing/test-replicator.d.ts.map +1 -1
- package/package.json +41 -50
- package/src/automerge/automerge-host.test.ts +8 -9
- package/src/automerge/automerge-host.ts +46 -7
- package/src/automerge/automerge-repo.test.ts +18 -16
- package/src/automerge/collection-synchronizer.test.ts +10 -5
- package/src/automerge/collection-synchronizer.ts +17 -6
- package/src/automerge/echo-data-monitor.test.ts +1 -3
- package/src/automerge/echo-network-adapter.test.ts +4 -3
- package/src/automerge/echo-network-adapter.ts +5 -4
- package/src/automerge/echo-replicator.ts +3 -3
- package/src/automerge/mesh-echo-replicator-connection.ts +10 -9
- package/src/automerge/mesh-echo-replicator.ts +2 -1
- package/src/automerge/space-collection.ts +3 -2
- package/src/automerge/storage-adapter.test.ts +2 -3
- package/src/db-host/automerge-metrics.ts +38 -0
- package/src/db-host/data-service.ts +29 -14
- package/src/db-host/database-root.ts +87 -0
- package/src/db-host/documents-iterator.ts +73 -0
- package/src/db-host/documents-synchronizer.test.ts +2 -2
- package/src/db-host/echo-host.ts +257 -0
- package/src/db-host/index.ts +6 -1
- package/src/db-host/migration.ts +57 -0
- package/src/db-host/query-service.ts +209 -0
- package/src/db-host/query-state.ts +214 -0
- package/src/db-host/space-state-manager.ts +90 -0
- package/src/edge/echo-edge-replicator.test.ts +96 -0
- package/src/edge/echo-edge-replicator.ts +341 -0
- package/src/edge/index.ts +5 -0
- package/src/index.ts +1 -0
- package/src/metadata/metadata-store.ts +22 -2
- package/src/pipeline/pipeline-stress.test.ts +44 -47
- package/src/pipeline/pipeline.test.ts +3 -4
- package/src/space/control-pipeline.test.ts +2 -3
- package/src/space/control-pipeline.ts +10 -1
- package/src/space/replication.browser.test.ts +2 -8
- package/src/space/space-manager.browser.test.ts +6 -5
- package/src/space/space-protocol.browser.test.ts +29 -34
- package/src/space/space-protocol.test.ts +37 -27
- package/src/space/space-protocol.ts +0 -4
- package/src/space/space.test.ts +30 -11
- package/src/space/space.ts +7 -2
- package/src/testing/test-agent-builder.ts +16 -4
- package/src/testing/test-replicator.ts +3 -3
- package/dist/lib/browser/chunk-MPWFDDQK.mjs.map +0 -7
- package/dist/lib/browser/chunk-UKXIJW43.mjs.map +0 -7
- package/dist/lib/browser/chunk-XPCF2V5U.mjs +0 -31
- package/dist/lib/browser/chunk-XPCF2V5U.mjs.map +0 -7
- package/dist/lib/browser/light.mjs +0 -32
- package/dist/lib/browser/light.mjs.map +0 -7
- package/dist/lib/node/chunk-5DH4KR2S.cjs +0 -2148
- package/dist/lib/node/chunk-5DH4KR2S.cjs.map +0 -7
- package/dist/lib/node/chunk-7HHYCGUR.cjs.map +0 -7
- package/dist/lib/node/chunk-DZVH7HDD.cjs +0 -43
- package/dist/lib/node/chunk-DZVH7HDD.cjs.map +0 -7
- package/dist/lib/node/light.cjs +0 -52
- package/dist/lib/node/light.cjs.map +0 -7
- package/dist/types/src/light.d.ts +0 -4
- package/dist/types/src/light.d.ts.map +0 -1
- package/src/light.ts +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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.info('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, createSimplePeerTransportFactory } 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 { StorageType, createStorage, type Storage } 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 { TestFeedBuilder } from './test-feed-builder';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceManager, SpaceProtocol, type Space } from '../space';\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: createSimplePeerTransportFactory(),\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) {\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) {\n return this._spaces.get(spaceKey);\n }\n\n private _spaceManager?: SpaceManager;\n get spaceManager() {\n return (this._spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this._networkManagerProvider(),\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) {\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._networkManagerProvider(),\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() {\n return new Gossip({\n localPeerId: this.deviceKey,\n });\n }\n\n createPresence(gossip?: Gossip) {\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) {\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 { Trigger, sleep } from '@dxos/async';\nimport { type Message, NetworkAdapter, type PeerId } from '@dxos/automerge/automerge-repo';\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(connectionStateProvider: TestConnectionStateProvider = () => 'on') {\n const adapter1: TestAdapter = new TestAdapter({\n send: (message: Message) => connectionStateProvider() === 'on' && sleep(10).then(() => adapter2.receive(message)),\n });\n const adapter2: TestAdapter = new TestAdapter({\n send: (message: Message) => connectionStateProvider() === 'on' && sleep(10).then(() => adapter1.receive(message)),\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 // NOTE: Emitting `ready` event in NetworkAdapter`s constructor causes a race condition\n // because `Repo` waits for `ready` event (which it never receives) before it starts using the adapter.\n ready() {\n this.emit('ready', { network: this });\n }\n\n override connect(peerId: PeerId) {\n this.peerId = peerId;\n this.onConnect.wake();\n }\n\n peerCandidate(peerId: PeerId) {\n invariant(peerId, 'PeerId is required');\n this.emit('peer-candidate', { peerId, peerMetadata: {} });\n }\n\n peerDisconnected(peerId: PeerId) {\n invariant(peerId, 'PeerId is required');\n this.emit('peer-disconnected', { peerId });\n }\n\n override send(message: Message) {\n log('send', { from: message.senderId, to: message.targetId, type: message.type });\n this._params.send(message);\n }\n\n override disconnect() {\n this.peerId = undefined;\n }\n\n receive(message: Message) {\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 Message } from '@dxos/automerge/automerge-repo';\nimport { type Context, LifecycleState, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { AutomergeReplicator, type AutomergeReplicatorFactory } from '@dxos/teleport-extension-automerge-replicator';\n\nimport type {\n EchoReplicator,\n EchoReplicatorContext,\n ReplicatorConnection,\n ShouldAdvertiseParams,\n ShouldSyncCollectionParams,\n} 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) {\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) {\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.info('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.info('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 TestReplicatorParams = {\n onConnect: () => Promise<void>;\n onDisconnect: () => Promise<void>;\n};\n\nexport class TestReplicator implements EchoReplicator {\n constructor(private readonly _params: TestReplicatorParams) {}\n\n public connected = false;\n public context: EchoReplicatorContext | undefined = undefined;\n public connections = new Set<TestReplicatorConnection>();\n\n async connect(context: EchoReplicatorContext): 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 ReplicatorConnection {\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<Message>,\n public readonly writable: WritableStream<Message>,\n ) {}\n\n async shouldAdvertise(params: ShouldAdvertiseParams): Promise<boolean> {\n return true;\n }\n\n shouldSyncCollection(params: ShouldSyncCollectionParams): boolean {\n return true;\n }\n}\n\nexport const testAutomergeReplicatorFactory: AutomergeReplicatorFactory = (params) => {\n return new 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: AutomergeReplicatorFactory = (params) => {\n params[1]!.onSyncMessage = () => {\n throw new Error();\n };\n return testAutomergeReplicatorFactory(params);\n};\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["import_credentials", "import_log", "import_async", "import_context", "import_invariant", "EchoMetadata", "schema", "getCodecForType", "changeStorageVersionInMetadata", "storage", "version", "log", "info", "metadata", "MetadataStore", "createDirectory", "load", "echoMetadata", "file", "_directory", "getOrCreateFile", "_writeFile", "flush", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "SwarmNetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "server", "
|
|
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.info('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 { StorageType, createStorage, type Storage } 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 { TestFeedBuilder } from './test-feed-builder';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceManager, SpaceProtocol, type Space } from '../space';\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) {\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) {\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) {\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() {\n return new Gossip({\n localPeerId: this.deviceKey,\n });\n }\n\n createPresence(gossip?: Gossip) {\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) {\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 { Trigger, sleep } from '@dxos/async';\nimport { type Message, NetworkAdapter, type PeerId } from '@dxos/automerge/automerge-repo';\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(connectionStateProvider: TestConnectionStateProvider = () => 'on') {\n const adapter1: TestAdapter = new TestAdapter({\n send: (message: Message) => connectionStateProvider() === 'on' && sleep(10).then(() => adapter2.receive(message)),\n });\n const adapter2: TestAdapter = new TestAdapter({\n send: (message: Message) => connectionStateProvider() === 'on' && sleep(10).then(() => adapter1.receive(message)),\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 // NOTE: Emitting `ready` event in NetworkAdapter`s constructor causes a race condition\n // because `Repo` waits for `ready` event (which it never receives) before it starts using the adapter.\n ready() {\n this.emit('ready', { network: this });\n }\n\n override connect(peerId: PeerId) {\n this.peerId = peerId;\n this.onConnect.wake();\n }\n\n peerCandidate(peerId: PeerId) {\n invariant(peerId, 'PeerId is required');\n this.emit('peer-candidate', { peerId, peerMetadata: {} });\n }\n\n peerDisconnected(peerId: PeerId) {\n invariant(peerId, 'PeerId is required');\n this.emit('peer-disconnected', { peerId });\n }\n\n override send(message: Message) {\n log('send', { from: message.senderId, to: message.targetId, type: message.type });\n this._params.send(message);\n }\n\n override disconnect() {\n this.peerId = undefined;\n }\n\n receive(message: Message) {\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 { AutomergeReplicator, type AutomergeReplicatorFactory } from '@dxos/teleport-extension-automerge-replicator';\n\nimport type {\n EchoReplicator,\n EchoReplicatorContext,\n ReplicatorConnection,\n ShouldAdvertiseParams,\n ShouldSyncCollectionParams,\n} 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) {\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) {\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.info('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.info('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 TestReplicatorParams = {\n onConnect: () => Promise<void>;\n onDisconnect: () => Promise<void>;\n};\n\nexport class TestReplicator implements EchoReplicator {\n constructor(private readonly _params: TestReplicatorParams) {}\n\n public connected = false;\n public context: EchoReplicatorContext | undefined = undefined;\n public connections = new Set<TestReplicatorConnection>();\n\n async connect(context: EchoReplicatorContext): 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 ReplicatorConnection {\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 async shouldAdvertise(params: ShouldAdvertiseParams): Promise<boolean> {\n return true;\n }\n\n shouldSyncCollection(params: ShouldSyncCollectionParams): boolean {\n return true;\n }\n}\n\nexport const testAutomergeReplicatorFactory: AutomergeReplicatorFactory = (params) => {\n return new 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: AutomergeReplicatorFactory = (params) => {\n params[1]!.onSyncMessage = () => {\n throw new Error();\n };\n return testAutomergeReplicatorFactory(params);\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_credentials", "import_log", "import_async", "import_context", "import_invariant", "EchoMetadata", "schema", "getCodecForType", "changeStorageVersionInMetadata", "storage", "version", "log", "info", "metadata", "MetadataStore", "createDirectory", "load", "echoMetadata", "file", "_directory", "getOrCreateFile", "_writeFile", "flush", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "SwarmNetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "server", "createRtcTransportFactory", "TestAgentBuilder", "networkManagerProvider", "_agents", "ComplexMap", "PublicKey", "hash", "_storage", "createStorage", "type", "StorageType", "RAM", "_networkManagerProvider", "MemorySignalManagerContext", "close", "Promise", "all", "agents", "map", "agent", "Array", "from", "values", "getAgent", "deviceKey", "get", "createPeer", "feedBuilder", "setStorage", "size", "identityKey", "keyring", "createKey", "TestAgent", "set", "metadataStore", "_metadataStore", "blobStore", "_blobStore", "BlobStore", "_feedBuilder", "_spaces", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "networkManager", "_networkManager", "setPeerInfo", "peerKey", "toHex", "spaceManager", "_spaceManager", "SpaceManager", "createSpace", "genesisKey", "dataKey", "saveMetadata", "controlFeed", "openFeed", "writable", "dataFeed", "sparse", "key", "genesisFeedKey", "controlFeedKey", "dataFeedKey", "addSpace", "open", "constructSpace", "swarmIdentity", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "memberKey", "onAuthorizedConnection", "session", "addExtension", "createGossip", "createExtension", "remotePeerId", "onDelegatedInvitationStatusChange", "onMemberRolesChanged", "setControlFeed", "setDataFeed", "Context", "createSpaceProtocol", "topic", "gossip", "SpaceProtocol", "onSessionAuth", "Gossip", "localPeerId", "createPresence", "Presence", "announceInterval", "offlineTimeout", "spaceGenesis", "generator", "CredentialGenerator", "credentials", "createSpaceGenesis", "createFeedAdmission", "AdmittedFeed", "Designation", "DATA", "createEpochCredential", "credential", "controlPipeline", "writer", "write", "TestAdapter", "NetworkAdapter", "createPair", "connectionStateProvider", "adapter1", "send", "message", "sleep", "then", "adapter2", "receive", "_params", "onConnect", "Trigger", "ready", "emit", "network", "connect", "peerId", "wake", "peerCandidate", "invariant", "peerMetadata", "peerDisconnected", "senderId", "to", "targetId", "disconnect", "undefined", "TestReplicationNetwork", "Resource", "options", "_replicators", "Set", "_latency", "latency", "_close", "ctx", "replicator", "connection", "connections", "abort", "readable", "cancel", "createReplicator", "TestReplicator", "_lifecycleState", "LifecycleState", "OPEN", "_connectReplicator", "onDisconnect", "_disconnectReplicator", "add", "otherReplicator", "connected", "context", "connection1", "connection2", "_createConnectionPair", "onConnectionOpen", "onConnectionClosed", "otherSide", "owningReplicator", "removeConnection", "peer1", "peer2", "LOG", "forward", "TransformStream", "transform", "controller", "enqueue", "backwards", "TestReplicatorConnection", "synchronized", "addConnection", "delete", "shouldAdvertise", "params", "shouldSyncCollection", "testAutomergeReplicatorFactory", "AutomergeReplicator", "sendSyncRetryPolicy", "retryBackoff", "retriesBeforeBackoff", "maxRetries", "brokenAutomergeReplicatorFactory", "onSyncMessage", "Error"]
|
|
7
7
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
Buffer,
|
|
4
|
-
createIdFromSpaceKey
|
|
5
|
-
} from "./chunk-XPCF2V5U.mjs";
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
6
2
|
|
|
7
3
|
// packages/core/echo/echo-pipeline/src/common/codec.ts
|
|
8
4
|
import { createCodecEncoding } from "@dxos/hypercore";
|
|
@@ -37,17 +33,34 @@ var createMappedFeedWriter = (mapper, writer) => {
|
|
|
37
33
|
};
|
|
38
34
|
};
|
|
39
35
|
|
|
36
|
+
// packages/core/echo/echo-pipeline/src/common/space-id.ts
|
|
37
|
+
import { subtleCrypto } from "@dxos/crypto";
|
|
38
|
+
import { PublicKey, SpaceId } from "@dxos/keys";
|
|
39
|
+
import { ComplexMap } from "@dxos/util";
|
|
40
|
+
var SPACE_IDS_CACHE = new ComplexMap(PublicKey.hash);
|
|
41
|
+
var createIdFromSpaceKey = async (spaceKey) => {
|
|
42
|
+
const cachedValue = SPACE_IDS_CACHE.get(spaceKey);
|
|
43
|
+
if (cachedValue !== void 0) {
|
|
44
|
+
return cachedValue;
|
|
45
|
+
}
|
|
46
|
+
const digest = await subtleCrypto.digest("SHA-256", spaceKey.asUint8Array());
|
|
47
|
+
const bytes = new Uint8Array(digest).slice(0, SpaceId.byteLength);
|
|
48
|
+
const spaceId = SpaceId.encode(bytes);
|
|
49
|
+
SPACE_IDS_CACHE.set(spaceKey, spaceId);
|
|
50
|
+
return spaceId;
|
|
51
|
+
};
|
|
52
|
+
|
|
40
53
|
// packages/core/echo/echo-pipeline/src/metadata/metadata-store.ts
|
|
41
54
|
import CRC32 from "crc-32";
|
|
42
55
|
import { Event, scheduleTaskInterval, synchronized } from "@dxos/async";
|
|
43
56
|
import { Context } from "@dxos/context";
|
|
44
57
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
45
|
-
import { PublicKey } from "@dxos/keys";
|
|
58
|
+
import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
46
59
|
import { log } from "@dxos/log";
|
|
47
60
|
import { DataCorruptionError, STORAGE_VERSION } from "@dxos/protocols";
|
|
48
61
|
import { schema as schema2 } from "@dxos/protocols/proto";
|
|
49
62
|
import { Invitation, SpaceState } from "@dxos/protocols/proto/dxos/client/services";
|
|
50
|
-
import { ComplexMap, arrayToBuffer, forEachAsync, isNotNullOrUndefined } from "@dxos/util";
|
|
63
|
+
import { ComplexMap as ComplexMap2, arrayToBuffer, forEachAsync, isNotNullOrUndefined } from "@dxos/util";
|
|
51
64
|
function _ts_decorate(decorators, target, key, desc) {
|
|
52
65
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
53
66
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -68,12 +81,12 @@ var LargeSpaceMetadata = schema2.getCodecForType("dxos.echo.metadata.LargeSpaceM
|
|
|
68
81
|
var MetadataStore = class {
|
|
69
82
|
constructor(directory) {
|
|
70
83
|
this._metadata = emptyEchoMetadata();
|
|
71
|
-
this._spaceLargeMetadata = new
|
|
84
|
+
this._spaceLargeMetadata = new ComplexMap2(PublicKey2.hash);
|
|
72
85
|
this._metadataFile = void 0;
|
|
73
86
|
this.update = new Event();
|
|
74
87
|
this._invitationCleanupCtx = new Context(void 0, {
|
|
75
88
|
F: __dxlog_file2,
|
|
76
|
-
L:
|
|
89
|
+
L: 55
|
|
77
90
|
});
|
|
78
91
|
this._directory = directory;
|
|
79
92
|
}
|
|
@@ -104,7 +117,7 @@ var MetadataStore = class {
|
|
|
104
117
|
name: file.filename
|
|
105
118
|
}, {
|
|
106
119
|
F: __dxlog_file2,
|
|
107
|
-
L:
|
|
120
|
+
L: 91,
|
|
108
121
|
S: this,
|
|
109
122
|
C: (f, a) => f(...a)
|
|
110
123
|
});
|
|
@@ -140,7 +153,7 @@ var MetadataStore = class {
|
|
|
140
153
|
checksum
|
|
141
154
|
}, {
|
|
142
155
|
F: __dxlog_file2,
|
|
143
|
-
L:
|
|
156
|
+
L: 126,
|
|
144
157
|
S: this,
|
|
145
158
|
C: (f, a) => f(...a)
|
|
146
159
|
});
|
|
@@ -173,7 +186,7 @@ var MetadataStore = class {
|
|
|
173
186
|
err
|
|
174
187
|
}, {
|
|
175
188
|
F: __dxlog_file2,
|
|
176
|
-
L:
|
|
189
|
+
L: 158,
|
|
177
190
|
S: this,
|
|
178
191
|
C: (f, a) => f(...a)
|
|
179
192
|
});
|
|
@@ -190,7 +203,7 @@ var MetadataStore = class {
|
|
|
190
203
|
err
|
|
191
204
|
}, {
|
|
192
205
|
F: __dxlog_file2,
|
|
193
|
-
L:
|
|
206
|
+
L: 170,
|
|
194
207
|
S: this,
|
|
195
208
|
C: (f, a) => f(...a)
|
|
196
209
|
});
|
|
@@ -227,7 +240,7 @@ var MetadataStore = class {
|
|
|
227
240
|
err
|
|
228
241
|
}, {
|
|
229
242
|
F: __dxlog_file2,
|
|
230
|
-
L:
|
|
243
|
+
L: 212,
|
|
231
244
|
S: this,
|
|
232
245
|
C: (f, a) => f(...a)
|
|
233
246
|
});
|
|
@@ -245,10 +258,10 @@ var MetadataStore = class {
|
|
|
245
258
|
if (this._metadata.identity?.haloSpace.key.equals(spaceKey)) {
|
|
246
259
|
return this._metadata.identity.haloSpace;
|
|
247
260
|
}
|
|
248
|
-
const space = this.spaces.find((space2) => space2.key
|
|
261
|
+
const space = this.spaces.find((space2) => space2.key.equals(spaceKey));
|
|
249
262
|
invariant2(space, "Space not found", {
|
|
250
263
|
F: __dxlog_file2,
|
|
251
|
-
L:
|
|
264
|
+
L: 234,
|
|
252
265
|
S: this,
|
|
253
266
|
A: [
|
|
254
267
|
"space",
|
|
@@ -257,6 +270,12 @@ var MetadataStore = class {
|
|
|
257
270
|
});
|
|
258
271
|
return space;
|
|
259
272
|
}
|
|
273
|
+
hasSpace(spaceKey) {
|
|
274
|
+
if (this._metadata.identity?.haloSpace.key.equals(spaceKey)) {
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
return !!this.spaces.find((space) => space.key.equals(spaceKey));
|
|
278
|
+
}
|
|
260
279
|
_getLargeSpaceMetadata(key) {
|
|
261
280
|
let entry = this._spaceLargeMetadata.get(key);
|
|
262
281
|
if (entry) {
|
|
@@ -272,7 +291,7 @@ var MetadataStore = class {
|
|
|
272
291
|
async clear() {
|
|
273
292
|
log("clearing all metadata", void 0, {
|
|
274
293
|
F: __dxlog_file2,
|
|
275
|
-
L:
|
|
294
|
+
L: 262,
|
|
276
295
|
S: this,
|
|
277
296
|
C: (f, a) => f(...a)
|
|
278
297
|
});
|
|
@@ -285,7 +304,7 @@ var MetadataStore = class {
|
|
|
285
304
|
async setIdentityRecord(record) {
|
|
286
305
|
invariant2(!this._metadata.identity, "Cannot overwrite existing identity in metadata", {
|
|
287
306
|
F: __dxlog_file2,
|
|
288
|
-
L:
|
|
307
|
+
L: 272,
|
|
289
308
|
S: this,
|
|
290
309
|
A: [
|
|
291
310
|
"!this._metadata.identity",
|
|
@@ -313,12 +332,12 @@ var MetadataStore = class {
|
|
|
313
332
|
await this.flush();
|
|
314
333
|
}
|
|
315
334
|
async addSpace(record) {
|
|
316
|
-
invariant2(!(this._metadata.spaces ?? []).find((space) => space.key
|
|
335
|
+
invariant2(!(this._metadata.spaces ?? []).find((space) => space.key.equals(record.key)), "Cannot overwrite existing space in metadata", {
|
|
317
336
|
F: __dxlog_file2,
|
|
318
|
-
L:
|
|
337
|
+
L: 300,
|
|
319
338
|
S: this,
|
|
320
339
|
A: [
|
|
321
|
-
"!(this._metadata.spaces ?? []).find((space) => space.key
|
|
340
|
+
"!(this._metadata.spaces ?? []).find((space) => space.key.equals(record.key))",
|
|
322
341
|
"'Cannot overwrite existing space in metadata'"
|
|
323
342
|
]
|
|
324
343
|
});
|
|
@@ -359,6 +378,14 @@ var MetadataStore = class {
|
|
|
359
378
|
await this._saveSpaceLargeMetadata(spaceKey);
|
|
360
379
|
await this.flush();
|
|
361
380
|
}
|
|
381
|
+
getSpaceEdgeReplicationSetting(spaceKey) {
|
|
382
|
+
return this.hasSpace(spaceKey) ? this._getSpace(spaceKey).edgeReplication : void 0;
|
|
383
|
+
}
|
|
384
|
+
async setSpaceEdgeReplicationSetting(spaceKey, setting) {
|
|
385
|
+
this._getSpace(spaceKey).edgeReplication = setting;
|
|
386
|
+
await this._save();
|
|
387
|
+
await this.flush();
|
|
388
|
+
}
|
|
362
389
|
};
|
|
363
390
|
_ts_decorate([
|
|
364
391
|
synchronized
|
|
@@ -476,10 +503,10 @@ import { Context as Context2, rejectOnDispose } from "@dxos/context";
|
|
|
476
503
|
import { failUndefined } from "@dxos/debug";
|
|
477
504
|
import { FeedSetIterator } from "@dxos/feed-store";
|
|
478
505
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
479
|
-
import { PublicKey as
|
|
506
|
+
import { PublicKey as PublicKey3 } from "@dxos/keys";
|
|
480
507
|
import { log as log4 } from "@dxos/log";
|
|
481
508
|
import { Timeframe as Timeframe2 } from "@dxos/timeframe";
|
|
482
|
-
import { ComplexMap as
|
|
509
|
+
import { ComplexMap as ComplexMap3 } from "@dxos/util";
|
|
483
510
|
|
|
484
511
|
// packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts
|
|
485
512
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
@@ -630,14 +657,14 @@ var PipelineState = class {
|
|
|
630
657
|
var Pipeline = class {
|
|
631
658
|
constructor() {
|
|
632
659
|
this._timeframeClock = new TimeframeClock(new Timeframe2());
|
|
633
|
-
this._feeds = new
|
|
660
|
+
this._feeds = new ComplexMap3(PublicKey3.hash);
|
|
634
661
|
// External state accessor.
|
|
635
662
|
this._state = new PipelineState(this._feeds, this._timeframeClock);
|
|
636
663
|
// Waits for the message consumer to process the message and yield control back to the pipeline.
|
|
637
664
|
this._processingTrigger = new Trigger().wake();
|
|
638
665
|
this._pauseTrigger = new Trigger().wake();
|
|
639
666
|
// Pending downloads.
|
|
640
|
-
this._downloads = new
|
|
667
|
+
this._downloads = new ComplexMap3((value) => PublicKey3.hash(value.key));
|
|
641
668
|
this._isStopping = false;
|
|
642
669
|
this._isStarted = false;
|
|
643
670
|
this._isBeingConsumed = false;
|
|
@@ -853,7 +880,7 @@ var Pipeline = class {
|
|
|
853
880
|
if (!done) {
|
|
854
881
|
const block = value ?? failUndefined();
|
|
855
882
|
this._processingTrigger.reset();
|
|
856
|
-
this._timeframeClock.updatePendingTimeframe(
|
|
883
|
+
this._timeframeClock.updatePendingTimeframe(PublicKey3.from(block.feedKey), block.seq);
|
|
857
884
|
yield block;
|
|
858
885
|
this._processingTrigger.wake();
|
|
859
886
|
this._timeframeClock.updateTimeframe();
|
|
@@ -1054,7 +1081,7 @@ import { Callback as Callback2 } from "@dxos/util";
|
|
|
1054
1081
|
import { DeferredTask, sleepWithContext as sleepWithContext2, trackLeaks } from "@dxos/async";
|
|
1055
1082
|
import { Context as Context4 } from "@dxos/context";
|
|
1056
1083
|
import { SpaceStateMachine } from "@dxos/credentials";
|
|
1057
|
-
import { PublicKey as
|
|
1084
|
+
import { PublicKey as PublicKey4 } from "@dxos/keys";
|
|
1058
1085
|
import { log as log6 } from "@dxos/log";
|
|
1059
1086
|
import { AdmittedFeed } from "@dxos/protocols/proto/dxos/halo/credentials";
|
|
1060
1087
|
import { Timeframe as Timeframe3 } from "@dxos/timeframe";
|
|
@@ -1198,7 +1225,7 @@ var ControlPipeline = class {
|
|
|
1198
1225
|
await this._pipeline.unpause();
|
|
1199
1226
|
log6("save snapshot", {
|
|
1200
1227
|
key: this._spaceKey,
|
|
1201
|
-
snapshot
|
|
1228
|
+
snapshot: getSnapshotLoggerContext(snapshot)
|
|
1202
1229
|
}, {
|
|
1203
1230
|
F: __dxlog_file7,
|
|
1204
1231
|
L: 163,
|
|
@@ -1237,7 +1264,7 @@ var ControlPipeline = class {
|
|
|
1237
1264
|
if (msg.data.payload.credential) {
|
|
1238
1265
|
const timer = tracer.mark("dxos.echo.pipeline.control");
|
|
1239
1266
|
const result = await this._spaceStateMachine.process(msg.data.payload.credential.credential, {
|
|
1240
|
-
sourceFeed:
|
|
1267
|
+
sourceFeed: PublicKey4.from(msg.feedKey)
|
|
1241
1268
|
});
|
|
1242
1269
|
timer.end();
|
|
1243
1270
|
if (!result) {
|
|
@@ -1314,6 +1341,18 @@ ControlPipeline = _ts_decorate4([
|
|
|
1314
1341
|
trace.resource(),
|
|
1315
1342
|
trackLeaks("start", "stop")
|
|
1316
1343
|
], ControlPipeline);
|
|
1344
|
+
var getSnapshotLoggerContext = (snapshot) => {
|
|
1345
|
+
return snapshot.messages?.map((msg) => {
|
|
1346
|
+
const issuer = msg.credential.issuer;
|
|
1347
|
+
const subject = msg.credential.subject.id;
|
|
1348
|
+
const type = msg.credential.subject.assertion["@type"];
|
|
1349
|
+
return {
|
|
1350
|
+
issuer,
|
|
1351
|
+
subject,
|
|
1352
|
+
type
|
|
1353
|
+
};
|
|
1354
|
+
});
|
|
1355
|
+
};
|
|
1317
1356
|
|
|
1318
1357
|
// packages/core/echo/echo-pipeline/src/space/space.ts
|
|
1319
1358
|
function _ts_decorate5(decorators, target, key, desc) {
|
|
@@ -1472,21 +1511,32 @@ var Space = class extends Resource {
|
|
|
1472
1511
|
C: (f, a) => f(...a)
|
|
1473
1512
|
});
|
|
1474
1513
|
await this._controlPipeline.start();
|
|
1475
|
-
await this.protocol.start();
|
|
1476
|
-
await this.protocol.addFeed(await this._feedProvider(this._genesisFeedKey));
|
|
1477
1514
|
log7("opened", void 0, {
|
|
1478
1515
|
F: __dxlog_file8,
|
|
1479
|
-
L:
|
|
1516
|
+
L: 180,
|
|
1480
1517
|
S: this,
|
|
1481
1518
|
C: (f, a) => f(...a)
|
|
1482
1519
|
});
|
|
1483
1520
|
}
|
|
1521
|
+
async startProtocol() {
|
|
1522
|
+
invariant6(this.isOpen, void 0, {
|
|
1523
|
+
F: __dxlog_file8,
|
|
1524
|
+
L: 185,
|
|
1525
|
+
S: this,
|
|
1526
|
+
A: [
|
|
1527
|
+
"this.isOpen",
|
|
1528
|
+
""
|
|
1529
|
+
]
|
|
1530
|
+
});
|
|
1531
|
+
await this.protocol.start();
|
|
1532
|
+
await this.protocol.addFeed(await this._feedProvider(this._genesisFeedKey));
|
|
1533
|
+
}
|
|
1484
1534
|
async _close() {
|
|
1485
1535
|
log7("closing...", {
|
|
1486
1536
|
key: this._key
|
|
1487
1537
|
}, {
|
|
1488
1538
|
F: __dxlog_file8,
|
|
1489
|
-
L:
|
|
1539
|
+
L: 192,
|
|
1490
1540
|
S: this,
|
|
1491
1541
|
C: (f, a) => f(...a)
|
|
1492
1542
|
});
|
|
@@ -1494,7 +1544,7 @@ var Space = class extends Resource {
|
|
|
1494
1544
|
await this._controlPipeline.stop();
|
|
1495
1545
|
log7("closed", void 0, {
|
|
1496
1546
|
F: __dxlog_file8,
|
|
1497
|
-
L:
|
|
1547
|
+
L: 198,
|
|
1498
1548
|
S: this,
|
|
1499
1549
|
C: (f, a) => f(...a)
|
|
1500
1550
|
});
|
|
@@ -1517,6 +1567,9 @@ _ts_decorate5([
|
|
|
1517
1567
|
_ts_decorate5([
|
|
1518
1568
|
trace2.span()
|
|
1519
1569
|
], Space.prototype, "_open", null);
|
|
1570
|
+
_ts_decorate5([
|
|
1571
|
+
synchronized3
|
|
1572
|
+
], Space.prototype, "startProtocol", null);
|
|
1520
1573
|
_ts_decorate5([
|
|
1521
1574
|
synchronized3
|
|
1522
1575
|
], Space.prototype, "_close", null);
|
|
@@ -1594,15 +1647,15 @@ var CredentialServerExtension = class extends RpcExtension2 {
|
|
|
1594
1647
|
};
|
|
1595
1648
|
|
|
1596
1649
|
// packages/core/echo/echo-pipeline/src/space/space-protocol.ts
|
|
1597
|
-
import { discoveryKey, subtleCrypto } from "@dxos/crypto";
|
|
1598
|
-
import { PublicKey as
|
|
1650
|
+
import { discoveryKey, subtleCrypto as subtleCrypto2 } from "@dxos/crypto";
|
|
1651
|
+
import { PublicKey as PublicKey5 } from "@dxos/keys";
|
|
1599
1652
|
import { log as log8, logInfo as logInfo2 } from "@dxos/log";
|
|
1600
1653
|
import { MMSTTopology } from "@dxos/network-manager";
|
|
1601
1654
|
import { Teleport } from "@dxos/teleport";
|
|
1602
1655
|
import { BlobSync } from "@dxos/teleport-extension-object-sync";
|
|
1603
1656
|
import { ReplicatorExtension } from "@dxos/teleport-extension-replicator";
|
|
1604
1657
|
import { trace as trace3 } from "@dxos/tracing";
|
|
1605
|
-
import { CallbackCollection, ComplexMap as
|
|
1658
|
+
import { CallbackCollection, ComplexMap as ComplexMap4 } from "@dxos/util";
|
|
1606
1659
|
function _ts_decorate6(decorators, target, key, desc) {
|
|
1607
1660
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1608
1661
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -1615,7 +1668,7 @@ var MOCK_AUTH_VERIFIER = async (nonce, credential) => true;
|
|
|
1615
1668
|
var SpaceProtocol = class {
|
|
1616
1669
|
constructor({ topic, swarmIdentity, networkManager, onSessionAuth, onAuthFailure, blobStore, disableP2pReplication }) {
|
|
1617
1670
|
this._feeds = /* @__PURE__ */ new Set();
|
|
1618
|
-
this._sessions = new
|
|
1671
|
+
this._sessions = new ComplexMap4(PublicKey5.hash);
|
|
1619
1672
|
// TODO(burdon): Move to config (with sensible defaults).
|
|
1620
1673
|
this._topology = new MMSTTopology({
|
|
1621
1674
|
originateConnections: 4,
|
|
@@ -1631,7 +1684,7 @@ var SpaceProtocol = class {
|
|
|
1631
1684
|
this.blobSync = new BlobSync({
|
|
1632
1685
|
blobStore
|
|
1633
1686
|
});
|
|
1634
|
-
this._topic =
|
|
1687
|
+
this._topic = subtleCrypto2.digest("SHA-256", topic.asBuffer()).then(discoveryKey).then(PublicKey5.from);
|
|
1635
1688
|
this._disableP2pReplication = disableP2pReplication ?? false;
|
|
1636
1689
|
}
|
|
1637
1690
|
get sessions() {
|
|
@@ -1675,17 +1728,13 @@ var SpaceProtocol = class {
|
|
|
1675
1728
|
const topic = await this._topic;
|
|
1676
1729
|
this._connection = await this._networkManager.joinSwarm({
|
|
1677
1730
|
protocolProvider: this._createProtocolProvider(credentials),
|
|
1678
|
-
peerInfo: {
|
|
1679
|
-
peerKey: this._swarmIdentity.peerKey.toHex(),
|
|
1680
|
-
identityKey: this._swarmIdentity.identityKey.toHex()
|
|
1681
|
-
},
|
|
1682
1731
|
topic,
|
|
1683
1732
|
topology: this._topology,
|
|
1684
1733
|
label: `swarm ${topic.truncate()} for space ${this._spaceKey.truncate()}`
|
|
1685
1734
|
});
|
|
1686
1735
|
log8("started", void 0, {
|
|
1687
1736
|
F: __dxlog_file10,
|
|
1688
|
-
L:
|
|
1737
|
+
L: 158,
|
|
1689
1738
|
S: this,
|
|
1690
1739
|
C: (f, a) => f(...a)
|
|
1691
1740
|
});
|
|
@@ -1698,14 +1747,14 @@ var SpaceProtocol = class {
|
|
|
1698
1747
|
if (this._connection) {
|
|
1699
1748
|
log8("stopping...", void 0, {
|
|
1700
1749
|
F: __dxlog_file10,
|
|
1701
|
-
L:
|
|
1750
|
+
L: 169,
|
|
1702
1751
|
S: this,
|
|
1703
1752
|
C: (f, a) => f(...a)
|
|
1704
1753
|
});
|
|
1705
1754
|
await this._connection.close();
|
|
1706
1755
|
log8("stopped", void 0, {
|
|
1707
1756
|
F: __dxlog_file10,
|
|
1708
|
-
L:
|
|
1757
|
+
L: 171,
|
|
1709
1758
|
S: this,
|
|
1710
1759
|
C: (f, a) => f(...a)
|
|
1711
1760
|
});
|
|
@@ -1781,7 +1830,7 @@ var SpaceProtocolSession = class {
|
|
|
1781
1830
|
onAuthSuccess: () => {
|
|
1782
1831
|
log8("Peer authenticated", void 0, {
|
|
1783
1832
|
F: __dxlog_file10,
|
|
1784
|
-
L:
|
|
1833
|
+
L: 282,
|
|
1785
1834
|
S: this,
|
|
1786
1835
|
C: (f, a) => f(...a)
|
|
1787
1836
|
});
|
|
@@ -1801,7 +1850,7 @@ var SpaceProtocolSession = class {
|
|
|
1801
1850
|
async close() {
|
|
1802
1851
|
log8("close", void 0, {
|
|
1803
1852
|
F: __dxlog_file10,
|
|
1804
|
-
L:
|
|
1853
|
+
L: 301,
|
|
1805
1854
|
S: this,
|
|
1806
1855
|
C: (f, a) => f(...a)
|
|
1807
1856
|
});
|
|
@@ -1821,10 +1870,10 @@ _ts_decorate6([
|
|
|
1821
1870
|
// packages/core/echo/echo-pipeline/src/space/space-manager.ts
|
|
1822
1871
|
import { synchronized as synchronized4, trackLeaks as trackLeaks3, Trigger as Trigger2 } from "@dxos/async";
|
|
1823
1872
|
import { failUndefined as failUndefined2 } from "@dxos/debug";
|
|
1824
|
-
import { PublicKey as
|
|
1873
|
+
import { PublicKey as PublicKey6 } from "@dxos/keys";
|
|
1825
1874
|
import { log as log9 } from "@dxos/log";
|
|
1826
1875
|
import { trace as trace4 } from "@dxos/protocols";
|
|
1827
|
-
import { ComplexMap as
|
|
1876
|
+
import { ComplexMap as ComplexMap5 } from "@dxos/util";
|
|
1828
1877
|
function _ts_decorate7(decorators, target, key, desc) {
|
|
1829
1878
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1830
1879
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -1834,8 +1883,8 @@ function _ts_decorate7(decorators, target, key, desc) {
|
|
|
1834
1883
|
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space-manager.ts";
|
|
1835
1884
|
var SpaceManager = class {
|
|
1836
1885
|
constructor({ feedStore, networkManager, metadataStore, blobStore, disableP2pReplication }) {
|
|
1837
|
-
this._spaces = new
|
|
1838
|
-
this._instanceId =
|
|
1886
|
+
this._spaces = new ComplexMap5(PublicKey6.hash);
|
|
1887
|
+
this._instanceId = PublicKey6.random().toHex();
|
|
1839
1888
|
this._feedStore = feedStore;
|
|
1840
1889
|
this._networkManager = networkManager;
|
|
1841
1890
|
this._metadataStore = metadataStore;
|
|
@@ -1981,6 +2030,7 @@ export {
|
|
|
1981
2030
|
codec,
|
|
1982
2031
|
valueEncoding,
|
|
1983
2032
|
createMappedFeedWriter,
|
|
2033
|
+
createIdFromSpaceKey,
|
|
1984
2034
|
MetadataStore,
|
|
1985
2035
|
hasInvitationExpired,
|
|
1986
2036
|
mapTimeframeToFeedIndexes,
|
|
@@ -1999,4 +2049,4 @@ export {
|
|
|
1999
2049
|
SpaceProtocolSession,
|
|
2000
2050
|
SpaceManager
|
|
2001
2051
|
};
|
|
2002
|
-
//# sourceMappingURL=chunk-
|
|
2052
|
+
//# sourceMappingURL=chunk-KKYLPT56.mjs.map
|