@dxos/echo-pipeline 0.4.10-main.0302e13 → 0.4.10-main.05dbd64

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.
Files changed (74) hide show
  1. package/dist/lib/browser/{chunk-RTEEJ723.mjs → chunk-KMWJLYEQ.mjs} +77 -57
  2. package/dist/lib/browser/chunk-KMWJLYEQ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +368 -246
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +10 -2
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node/{chunk-7VZVCCNF.cjs → chunk-YZA42CKA.cjs} +82 -62
  9. package/dist/lib/node/chunk-YZA42CKA.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +391 -270
  11. package/dist/lib/node/index.cjs.map +4 -4
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +20 -13
  14. package/dist/lib/node/testing/index.cjs.map +4 -4
  15. package/dist/types/src/automerge/automerge-doc-loader.d.ts +2 -0
  16. package/dist/types/src/automerge/automerge-doc-loader.d.ts.map +1 -1
  17. package/dist/types/src/automerge/automerge-host.d.ts +21 -18
  18. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  19. package/dist/types/src/automerge/automerge-repo.test.d.ts +2 -0
  20. package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -0
  21. package/dist/types/src/automerge/index.d.ts +2 -0
  22. package/dist/types/src/automerge/index.d.ts.map +1 -1
  23. package/dist/types/src/automerge/level.test.d.ts +2 -0
  24. package/dist/types/src/automerge/level.test.d.ts.map +1 -0
  25. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +30 -0
  26. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -0
  27. package/dist/types/src/automerge/local-host-network-adapter.d.ts +8 -1
  28. package/dist/types/src/automerge/local-host-network-adapter.d.ts.map +1 -1
  29. package/dist/types/src/automerge/migrations.d.ts +7 -0
  30. package/dist/types/src/automerge/migrations.d.ts.map +1 -0
  31. package/dist/types/src/automerge/reference.d.ts +15 -0
  32. package/dist/types/src/automerge/reference.d.ts.map +1 -0
  33. package/dist/types/src/automerge/storage-adapter.test.d.ts +2 -0
  34. package/dist/types/src/automerge/storage-adapter.test.d.ts.map +1 -0
  35. package/dist/types/src/automerge/types.d.ts +8 -2
  36. package/dist/types/src/automerge/types.d.ts.map +1 -1
  37. package/dist/types/src/metadata/metadata-store.d.ts +2 -1
  38. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  39. package/dist/types/src/space/control-pipeline.d.ts +3 -1
  40. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  41. package/dist/types/src/space/space-manager.d.ts +3 -1
  42. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  43. package/dist/types/src/space/space.d.ts +6 -9
  44. package/dist/types/src/space/space.d.ts.map +1 -1
  45. package/dist/types/src/testing/index.d.ts +1 -0
  46. package/dist/types/src/testing/index.d.ts.map +1 -1
  47. package/dist/types/src/testing/level.d.ts +3 -0
  48. package/dist/types/src/testing/level.d.ts.map +1 -0
  49. package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
  50. package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
  51. package/package.json +33 -30
  52. package/src/automerge/automerge-doc-loader.ts +9 -0
  53. package/src/automerge/automerge-host.test.ts +22 -8
  54. package/src/automerge/automerge-host.ts +66 -118
  55. package/src/automerge/automerge-repo.test.ts +29 -0
  56. package/src/automerge/index.ts +2 -0
  57. package/src/automerge/level.test.ts +82 -0
  58. package/src/automerge/leveldb-storage-adapter.ts +117 -0
  59. package/src/automerge/local-host-network-adapter.ts +19 -13
  60. package/src/automerge/migrations.ts +41 -0
  61. package/src/automerge/reference.ts +31 -0
  62. package/src/automerge/storage-adapter.test.ts +90 -0
  63. package/src/automerge/types.ts +8 -5
  64. package/src/db-host/data-service.ts +1 -1
  65. package/src/metadata/metadata-store.ts +17 -8
  66. package/src/space/control-pipeline.ts +11 -1
  67. package/src/space/space-manager.ts +4 -0
  68. package/src/space/space.test.ts +7 -7
  69. package/src/space/space.ts +17 -22
  70. package/src/testing/index.ts +1 -0
  71. package/src/testing/level.ts +11 -0
  72. package/src/testing/test-agent-builder.ts +1 -0
  73. package/dist/lib/browser/chunk-RTEEJ723.mjs.map +0 -7
  74. package/dist/lib/node/chunk-7VZVCCNF.cjs.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/testing/change-metadata.ts", "../../../../src/testing/test-agent-builder.ts", "../../../../src/testing/test-feed-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { log } from '@dxos/log';\nimport { schema } from '@dxos/protocols';\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, NetworkManager, 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 { SnapshotStore } from '../db-host';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceManager, SpaceProtocol, type Space } from '../space';\n\nexport type NetworkManagerProvider = () => NetworkManager;\n\nexport const MemoryNetworkManagerProvider =\n (signalContext: MemorySignalManagerContext): NetworkManagerProvider =>\n () =>\n new NetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory,\n });\n\nexport const WebsocketNetworkManagerProvider =\n (signalUrl: string): NetworkManagerProvider =>\n () =>\n new NetworkManager({\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 _snapshotStore?: SnapshotStore;\n get snapshotStore() {\n return (this._snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));\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 snapshotStore: this.snapshotStore,\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 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 });\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 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"],
5
- "mappings": "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",
6
- "names": ["log", "schema", "EchoMetadata", "schema", "getCodecForType", "changeStorageVersionInMetadata", "storage", "version", "log", "info", "metadata", "MetadataStore", "createDirectory", "load", "echoMetadata", "file", "_directory", "getOrCreateFile", "_writeFile", "flush", "Context", "CredentialGenerator", "PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "MemoryTransportFactory", "NetworkManager", "createSimplePeerTransportFactory", "AdmittedFeed", "StorageType", "createStorage", "Gossip", "Presence", "BlobStore", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "server", "createSimplePeerTransportFactory", "TestAgentBuilder", "constructor", "storage", "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", "TestFeedBuilder", "setStorage", "size", "identityKey", "keyring", "createKey", "TestAgent", "set", "metadataStore", "_metadataStore", "MetadataStore", "createDirectory", "snapshotStore", "_snapshotStore", "SnapshotStore", "blobStore", "_blobStore", "BlobStore", "_feedBuilder", "_spaces", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "spaceManager", "_spaceManager", "SpaceManager", "networkManager", "createSpace", "genesisKey", "dataKey", "saveMetadata", "controlFeed", "openFeed", "writable", "dataFeed", "sparse", "metadata", "key", "genesisFeedKey", "controlFeedKey", "dataFeedKey", "addSpace", "open", "constructSpace", "swarmIdentity", "peerKey", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "memberKey", "onAuthorizedConnection", "session", "addExtension", "createGossip", "createExtension", "remotePeerId", "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"]
3
+ "sources": ["../../../../src/testing/change-metadata.ts", "../../../../src/testing/test-agent-builder.ts", "../../../../src/testing/test-feed-builder.ts", "../../../../src/testing/level.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { log } from '@dxos/log';\nimport { schema } from '@dxos/protocols';\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, NetworkManager, 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 { SnapshotStore } from '../db-host';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceManager, SpaceProtocol, type Space } from '../space';\n\nexport type NetworkManagerProvider = () => NetworkManager;\n\nexport const MemoryNetworkManagerProvider =\n (signalContext: MemorySignalManagerContext): NetworkManagerProvider =>\n () =>\n new NetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory,\n });\n\nexport const WebsocketNetworkManagerProvider =\n (signalUrl: string): NetworkManagerProvider =>\n () =>\n new NetworkManager({\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 _snapshotStore?: SnapshotStore;\n get snapshotStore() {\n return (this._snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));\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 snapshotStore: this.snapshotStore,\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 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 });\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 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 { Level } from 'level';\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { type LevelDB } from '../automerge/types';\n\nexport const createTestLevel = (): LevelDB => new Level<string, string>(`/tmp/dxos-${PublicKey.random().toHex()}`);\n"],
5
+ "mappings": "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",
6
+ "names": ["log", "schema", "EchoMetadata", "schema", "getCodecForType", "changeStorageVersionInMetadata", "storage", "version", "log", "info", "metadata", "MetadataStore", "createDirectory", "load", "echoMetadata", "file", "_directory", "getOrCreateFile", "_writeFile", "flush", "Context", "CredentialGenerator", "PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "MemoryTransportFactory", "NetworkManager", "createSimplePeerTransportFactory", "AdmittedFeed", "StorageType", "createStorage", "Gossip", "Presence", "BlobStore", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "server", "createSimplePeerTransportFactory", "TestAgentBuilder", "constructor", "storage", "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", "TestFeedBuilder", "setStorage", "size", "identityKey", "keyring", "createKey", "TestAgent", "set", "metadataStore", "_metadataStore", "MetadataStore", "createDirectory", "snapshotStore", "_snapshotStore", "SnapshotStore", "blobStore", "_blobStore", "BlobStore", "_feedBuilder", "_spaces", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "spaceManager", "_spaceManager", "SpaceManager", "networkManager", "createSpace", "genesisKey", "dataKey", "saveMetadata", "controlFeed", "openFeed", "writable", "dataFeed", "sparse", "metadata", "key", "genesisFeedKey", "controlFeedKey", "dataFeedKey", "addSpace", "open", "constructSpace", "swarmIdentity", "peerKey", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "memberKey", "onAuthorizedConnection", "session", "addExtension", "createGossip", "createExtension", "remotePeerId", "onDelegatedInvitationStatusChange", "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", "Level", "PublicKey", "createTestLevel", "Level", "PublicKey", "random", "toHex"]
7
7
  }
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_7VZVCCNF_exports = {};
30
- __export(chunk_7VZVCCNF_exports, {
29
+ var chunk_YZA42CKA_exports = {};
30
+ __export(chunk_YZA42CKA_exports, {
31
31
  AuthExtension: () => AuthExtension,
32
32
  AuthStatus: () => AuthStatus,
33
33
  DataServiceImpl: () => DataServiceImpl,
@@ -44,12 +44,13 @@ __export(chunk_7VZVCCNF_exports, {
44
44
  TimeframeClock: () => TimeframeClock,
45
45
  codec: () => codec,
46
46
  createMappedFeedWriter: () => createMappedFeedWriter,
47
+ hasInvitationExpired: () => hasInvitationExpired,
47
48
  mapFeedIndexesToTimeframe: () => mapFeedIndexesToTimeframe,
48
49
  mapTimeframeToFeedIndexes: () => mapTimeframeToFeedIndexes,
49
50
  startAfter: () => startAfter,
50
51
  valueEncoding: () => valueEncoding
51
52
  });
52
- module.exports = __toCommonJS(chunk_7VZVCCNF_exports);
53
+ module.exports = __toCommonJS(chunk_YZA42CKA_exports);
53
54
  var import_hypercore = require("@dxos/hypercore");
54
55
  var import_protocols = require("@dxos/protocols");
55
56
  var import_invariant = require("@dxos/invariant");
@@ -91,13 +92,14 @@ var import_log5 = require("@dxos/log");
91
92
  var import_protocols5 = require("@dxos/protocols");
92
93
  var import_teleport = require("@dxos/teleport");
93
94
  var import_async5 = require("@dxos/async");
95
+ var import_context5 = require("@dxos/context");
94
96
  var import_invariant6 = require("@dxos/invariant");
95
97
  var import_log6 = require("@dxos/log");
96
98
  var import_credentials = require("@dxos/protocols/proto/dxos/halo/credentials");
97
99
  var import_tracing = require("@dxos/tracing");
98
100
  var import_util3 = require("@dxos/util");
99
101
  var import_async6 = require("@dxos/async");
100
- var import_context5 = require("@dxos/context");
102
+ var import_context6 = require("@dxos/context");
101
103
  var import_credentials2 = require("@dxos/credentials");
102
104
  var import_keys4 = require("@dxos/keys");
103
105
  var import_log7 = require("@dxos/log");
@@ -228,6 +230,7 @@ var DataServiceImpl = class {
228
230
  throw new Error("Deprecated.");
229
231
  }
230
232
  async flush(request) {
233
+ await this._automergeHost.flush(request);
231
234
  }
232
235
  // Automerge specific.
233
236
  async getHostInfo(request) {
@@ -390,8 +393,8 @@ var MetadataStore = class {
390
393
  }
391
394
  });
392
395
  (0, import_async.scheduleTaskInterval)(this._invitationCleanupCtx, async () => {
393
- for (const invitation of this.getInvitations()) {
394
- if (invitation.created && invitation.lifetime && invitation.lifetime !== 0 && invitation.created.getTime() + invitation.lifetime * 1e3 < Date.now()) {
396
+ for (const invitation of this._metadata.invitations ?? []) {
397
+ if (hasInvitationExpired(invitation) || isLegacyInvitationFormat(invitation)) {
395
398
  await this.removeInvitation(invitation.invitationId);
396
399
  }
397
400
  }
@@ -420,7 +423,7 @@ var MetadataStore = class {
420
423
  err
421
424
  }, {
422
425
  F: __dxlog_file2,
423
- L: 215,
426
+ L: 210,
424
427
  S: this,
425
428
  C: (f, a) => f(...a)
426
429
  });
@@ -441,7 +444,7 @@ var MetadataStore = class {
441
444
  const space = this.spaces.find((space2) => space2.key === spaceKey);
442
445
  (0, import_invariant2.invariant)(space, "Space not found", {
443
446
  F: __dxlog_file2,
444
- L: 237,
447
+ L: 232,
445
448
  S: this,
446
449
  A: [
447
450
  "space",
@@ -465,7 +468,7 @@ var MetadataStore = class {
465
468
  async clear() {
466
469
  (0, import_log.log)("clearing all metadata", void 0, {
467
470
  F: __dxlog_file2,
468
- L: 256,
471
+ L: 251,
469
472
  S: this,
470
473
  C: (f, a) => f(...a)
471
474
  });
@@ -478,7 +481,7 @@ var MetadataStore = class {
478
481
  async setIdentityRecord(record) {
479
482
  (0, import_invariant2.invariant)(!this._metadata.identity, "Cannot overwrite existing identity in metadata", {
480
483
  F: __dxlog_file2,
481
- L: 266,
484
+ L: 261,
482
485
  S: this,
483
486
  A: [
484
487
  "!this._metadata.identity",
@@ -508,7 +511,7 @@ var MetadataStore = class {
508
511
  async addSpace(record) {
509
512
  (0, import_invariant2.invariant)(!(this._metadata.spaces ?? []).find((space) => space.key === record.key), "Cannot overwrite existing space in metadata", {
510
513
  F: __dxlog_file2,
511
- L: 294,
514
+ L: 289,
512
515
  S: this,
513
516
  A: [
514
517
  "!(this._metadata.spaces ?? []).find((space) => space.key === record.key)",
@@ -563,6 +566,12 @@ _ts_decorate([
563
566
  import_async.synchronized
564
567
  ], MetadataStore.prototype, "_saveSpaceLargeMetadata", null);
565
568
  var fromBytesInt32 = (buf) => buf.readInt32LE(0);
569
+ var hasInvitationExpired = (invitation) => {
570
+ return Boolean(invitation.created && invitation.lifetime && invitation.lifetime !== 0 && invitation.created.getTime() + invitation.lifetime * 1e3 < Date.now());
571
+ };
572
+ var isLegacyInvitationFormat = (invitation) => {
573
+ return invitation.type === import_services.Invitation.Type.MULTIUSE;
574
+ };
566
575
  function _ts_decorate2(decorators, target, key, desc) {
567
576
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
568
577
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
@@ -1204,7 +1213,7 @@ var CONTROL_PIPELINE_SNAPSHOT_DELAY = 1e4;
1204
1213
  var USE_SNAPSHOTS = true;
1205
1214
  var ControlPipeline = class {
1206
1215
  constructor({ spaceKey, genesisFeed, feedProvider, metadataStore }) {
1207
- this._ctx = new import_context5.Context();
1216
+ this._ctx = new import_context6.Context();
1208
1217
  this._lastTimeframeSaveTime = Date.now();
1209
1218
  this.onFeedAdmitted = new import_util4.Callback();
1210
1219
  this._usage = new import_tracing2.TimeUsageCounter();
@@ -1223,7 +1232,7 @@ var ControlPipeline = class {
1223
1232
  key: info.key
1224
1233
  }, {
1225
1234
  F: __dxlog_file7,
1226
- L: 74,
1235
+ L: 82,
1227
1236
  S: this,
1228
1237
  C: (f, a) => f(...a)
1229
1238
  });
@@ -1237,7 +1246,7 @@ var ControlPipeline = class {
1237
1246
  } catch (err) {
1238
1247
  import_log7.log.catch(err, void 0, {
1239
1248
  F: __dxlog_file7,
1240
- L: 85,
1249
+ L: 93,
1241
1250
  S: this,
1242
1251
  C: (f, a) => f(...a)
1243
1252
  });
@@ -1248,6 +1257,8 @@ var ControlPipeline = class {
1248
1257
  });
1249
1258
  this.onMemberAdmitted = this._spaceStateMachine.onMemberAdmitted;
1250
1259
  this.onCredentialProcessed = this._spaceStateMachine.onCredentialProcessed;
1260
+ this.onDelegatedInvitation = this._spaceStateMachine.onDelegatedInvitation;
1261
+ this.onDelegatedInvitationRemoved = this._spaceStateMachine.onDelegatedInvitationRemoved;
1251
1262
  }
1252
1263
  get spaceState() {
1253
1264
  return this._spaceStateMachine;
@@ -1267,7 +1278,7 @@ var ControlPipeline = class {
1267
1278
  tf: snapshot?.timeframe
1268
1279
  }, {
1269
1280
  F: __dxlog_file7,
1270
- L: 113,
1281
+ L: 123,
1271
1282
  S: this,
1272
1283
  C: (f, a) => f(...a)
1273
1284
  });
@@ -1276,17 +1287,17 @@ var ControlPipeline = class {
1276
1287
  }
1277
1288
  (0, import_log7.log)("starting...", void 0, {
1278
1289
  F: __dxlog_file7,
1279
- L: 118,
1290
+ L: 128,
1280
1291
  S: this,
1281
1292
  C: (f, a) => f(...a)
1282
1293
  });
1283
1294
  setTimeout(async () => {
1284
- void this._consumePipeline(new import_context5.Context());
1295
+ void this._consumePipeline(new import_context6.Context());
1285
1296
  });
1286
1297
  await this._pipeline.start();
1287
1298
  (0, import_log7.log)("started", void 0, {
1288
1299
  F: __dxlog_file7,
1289
- L: 124,
1300
+ L: 134,
1290
1301
  S: this,
1291
1302
  C: (f, a) => f(...a)
1292
1303
  });
@@ -1303,7 +1314,7 @@ var ControlPipeline = class {
1303
1314
  message
1304
1315
  }, {
1305
1316
  F: __dxlog_file7,
1306
- L: 137,
1317
+ L: 147,
1307
1318
  S: this,
1308
1319
  C: (f, a) => f(...a)
1309
1320
  });
@@ -1325,7 +1336,7 @@ var ControlPipeline = class {
1325
1336
  snapshot
1326
1337
  }, {
1327
1338
  F: __dxlog_file7,
1328
- L: 153,
1339
+ L: 163,
1329
1340
  S: this,
1330
1341
  C: (f, a) => f(...a)
1331
1342
  });
@@ -1340,7 +1351,7 @@ var ControlPipeline = class {
1340
1351
  } catch (err) {
1341
1352
  import_log7.log.catch(err, void 0, {
1342
1353
  F: __dxlog_file7,
1343
- L: 166,
1354
+ L: 176,
1344
1355
  S: this,
1345
1356
  C: (f, a) => f(...a)
1346
1357
  });
@@ -1354,7 +1365,7 @@ var ControlPipeline = class {
1354
1365
  seq: msg.seq
1355
1366
  }, {
1356
1367
  F: __dxlog_file7,
1357
- L: 176,
1368
+ L: 186,
1358
1369
  S: this,
1359
1370
  C: (f, a) => f(...a)
1360
1371
  });
@@ -1369,7 +1380,7 @@ var ControlPipeline = class {
1369
1380
  msg
1370
1381
  }, {
1371
1382
  F: __dxlog_file7,
1372
- L: 185,
1383
+ L: 195,
1373
1384
  S: this,
1374
1385
  C: (f, a) => f(...a)
1375
1386
  });
@@ -1388,7 +1399,7 @@ var ControlPipeline = class {
1388
1399
  async stop() {
1389
1400
  (0, import_log7.log)("stopping...", void 0, {
1390
1401
  F: __dxlog_file7,
1391
- L: 205,
1402
+ L: 215,
1392
1403
  S: this,
1393
1404
  C: (f, a) => f(...a)
1394
1405
  });
@@ -1397,7 +1408,7 @@ var ControlPipeline = class {
1397
1408
  await this._saveTargetTimeframe(this._pipeline.state.timeframe);
1398
1409
  (0, import_log7.log)("stopped", void 0, {
1399
1410
  F: __dxlog_file7,
1400
- L: 209,
1411
+ L: 219,
1401
1412
  S: this,
1402
1413
  C: (f, a) => f(...a)
1403
1414
  });
@@ -1410,7 +1421,7 @@ var ControlPipeline = class {
1410
1421
  } catch (err) {
1411
1422
  (0, import_log7.log)(err, void 0, {
1412
1423
  F: __dxlog_file7,
1413
- L: 218,
1424
+ L: 228,
1414
1425
  S: this,
1415
1426
  C: (f, a) => f(...a)
1416
1427
  });
@@ -1449,15 +1460,15 @@ function _ts_decorate5(decorators, target, key, desc) {
1449
1460
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1450
1461
  }
1451
1462
  var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space.ts";
1452
- var Space = class {
1463
+ var Space = class extends import_context5.Resource {
1453
1464
  constructor(params) {
1465
+ super();
1454
1466
  this._addFeedMutex = new import_async5.Mutex();
1455
1467
  this.onCredentialProcessed = new import_util3.Callback();
1456
1468
  this.stateUpdate = new import_async5.Event();
1457
- this._isOpen = false;
1458
1469
  (0, import_invariant6.invariant)(params.spaceKey && params.feedProvider, void 0, {
1459
1470
  F: __dxlog_file8,
1460
- L: 72,
1471
+ L: 74,
1461
1472
  S: this,
1462
1473
  A: [
1463
1474
  "params.spaceKey && params.feedProvider",
@@ -1490,12 +1501,34 @@ var Space = class {
1490
1501
  credential
1491
1502
  }, {
1492
1503
  F: __dxlog_file8,
1493
- L: 99,
1504
+ L: 101,
1494
1505
  S: this,
1495
1506
  C: (f, a) => f(...a)
1496
1507
  });
1497
1508
  this.stateUpdate.emit();
1498
1509
  });
1510
+ this._controlPipeline.onDelegatedInvitation.set(async (invitation) => {
1511
+ (0, import_log6.log)("onDelegatedInvitation", {
1512
+ invitation
1513
+ }, {
1514
+ F: __dxlog_file8,
1515
+ L: 105,
1516
+ S: this,
1517
+ C: (f, a) => f(...a)
1518
+ });
1519
+ await params.onDelegatedInvitationStatusChange(invitation, true);
1520
+ });
1521
+ this._controlPipeline.onDelegatedInvitationRemoved.set(async (invitation) => {
1522
+ (0, import_log6.log)("onDelegatedInvitationRemoved", {
1523
+ invitation
1524
+ }, {
1525
+ F: __dxlog_file8,
1526
+ L: 109,
1527
+ S: this,
1528
+ C: (f, a) => f(...a)
1529
+ });
1530
+ await params.onDelegatedInvitationStatusChange(invitation, false);
1531
+ });
1499
1532
  this.protocol = params.protocol;
1500
1533
  this.protocol.addFeed(params.genesisFeed);
1501
1534
  }
@@ -1503,7 +1536,7 @@ var Space = class {
1503
1536
  return this._key;
1504
1537
  }
1505
1538
  get isOpen() {
1506
- return this._isOpen;
1539
+ return this._lifecycleState === import_context5.LifecycleState.OPEN;
1507
1540
  }
1508
1541
  get genesisFeedKey() {
1509
1542
  return this._genesisFeedKey;
@@ -1529,7 +1562,7 @@ var Space = class {
1529
1562
  async setControlFeed(feed) {
1530
1563
  (0, import_invariant6.invariant)(!this._controlFeed, "Control feed already set.", {
1531
1564
  F: __dxlog_file8,
1532
- L: 146,
1565
+ L: 156,
1533
1566
  S: this,
1534
1567
  A: [
1535
1568
  "!this._controlFeed",
@@ -1543,7 +1576,7 @@ var Space = class {
1543
1576
  async setDataFeed(feed) {
1544
1577
  (0, import_invariant6.invariant)(!this._dataFeed, "Data feed already set.", {
1545
1578
  F: __dxlog_file8,
1546
- L: 153,
1579
+ L: 163,
1547
1580
  S: this,
1548
1581
  A: [
1549
1582
  "!this._dataFeed",
@@ -1559,50 +1592,36 @@ var Space = class {
1559
1592
  getControlFeeds() {
1560
1593
  return Array.from(this._controlPipeline.spaceState.feeds.values());
1561
1594
  }
1562
- /**
1563
- * Use for diagnostics.
1564
- */
1565
- // getDataFeeds(): FeedInfo[] {
1566
- // return this._dataPipeline?.getFeeds();
1567
- // }
1568
- async open(ctx) {
1595
+ async _open(ctx) {
1569
1596
  (0, import_log6.log)("opening...", void 0, {
1570
1597
  F: __dxlog_file8,
1571
- L: 174,
1598
+ L: 177,
1572
1599
  S: this,
1573
1600
  C: (f, a) => f(...a)
1574
1601
  });
1575
- if (this._isOpen) {
1576
- return;
1577
- }
1578
1602
  await this._controlPipeline.start();
1579
1603
  await this.protocol.start();
1580
- this._isOpen = true;
1581
1604
  (0, import_log6.log)("opened", void 0, {
1582
1605
  F: __dxlog_file8,
1583
- L: 184,
1606
+ L: 183,
1584
1607
  S: this,
1585
1608
  C: (f, a) => f(...a)
1586
1609
  });
1587
1610
  }
1588
- async close() {
1611
+ async _close() {
1589
1612
  (0, import_log6.log)("closing...", {
1590
1613
  key: this._key
1591
1614
  }, {
1592
1615
  F: __dxlog_file8,
1593
- L: 189,
1616
+ L: 188,
1594
1617
  S: this,
1595
1618
  C: (f, a) => f(...a)
1596
1619
  });
1597
- if (!this._isOpen) {
1598
- return;
1599
- }
1600
1620
  await this.protocol.stop();
1601
1621
  await this._controlPipeline.stop();
1602
- this._isOpen = false;
1603
1622
  (0, import_log6.log)("closed", void 0, {
1604
1623
  F: __dxlog_file8,
1605
- L: 199,
1624
+ L: 194,
1606
1625
  S: this,
1607
1626
  C: (f, a) => f(...a)
1608
1627
  });
@@ -1619,12 +1638,11 @@ _ts_decorate5([
1619
1638
  import_tracing.trace.info()
1620
1639
  ], Space.prototype, "key", null);
1621
1640
  _ts_decorate5([
1622
- import_async5.synchronized,
1623
1641
  import_tracing.trace.span()
1624
- ], Space.prototype, "open", null);
1642
+ ], Space.prototype, "_open", null);
1625
1643
  _ts_decorate5([
1626
1644
  import_async5.synchronized
1627
- ], Space.prototype, "close", null);
1645
+ ], Space.prototype, "_close", null);
1628
1646
  Space = _ts_decorate5([
1629
1647
  (0, import_async5.trackLeaks)("open", "close"),
1630
1648
  import_tracing.trace.resource()
@@ -1864,12 +1882,12 @@ var SpaceManager = class {
1864
1882
  ...this._spaces.values()
1865
1883
  ].map((space) => space.close()));
1866
1884
  }
1867
- async constructSpace({ metadata, swarmIdentity, onAuthorizedConnection, onAuthFailure, memberKey }) {
1885
+ async constructSpace({ metadata, swarmIdentity, onAuthorizedConnection, onAuthFailure, onDelegatedInvitationStatusChange, memberKey }) {
1868
1886
  import_log9.log.trace("dxos.echo.space-manager.construct-space", import_protocols6.trace.begin({
1869
1887
  id: this._instanceId
1870
1888
  }), {
1871
1889
  F: __dxlog_file10,
1872
- L: 89,
1890
+ L: 92,
1873
1891
  S: this,
1874
1892
  C: (f, a) => f(...a)
1875
1893
  });
@@ -1877,7 +1895,7 @@ var SpaceManager = class {
1877
1895
  spaceKey: metadata.genesisFeedKey
1878
1896
  }, {
1879
1897
  F: __dxlog_file10,
1880
- L: 90,
1898
+ L: 93,
1881
1899
  S: this,
1882
1900
  C: (f, a) => f(...a)
1883
1901
  });
@@ -1899,14 +1917,15 @@ var SpaceManager = class {
1899
1917
  feedProvider: (feedKey, opts) => this._feedStore.openFeed(feedKey, opts),
1900
1918
  metadataStore: this._metadataStore,
1901
1919
  snapshotManager,
1902
- memberKey
1920
+ memberKey,
1921
+ onDelegatedInvitationStatusChange
1903
1922
  });
1904
1923
  this._spaces.set(space.key, space);
1905
1924
  import_log9.log.trace("dxos.echo.space-manager.construct-space", import_protocols6.trace.end({
1906
1925
  id: this._instanceId
1907
1926
  }), {
1908
1927
  F: __dxlog_file10,
1909
- L: 117,
1928
+ L: 121,
1910
1929
  S: this,
1911
1930
  C: (f, a) => f(...a)
1912
1931
  });
@@ -1940,9 +1959,10 @@ SpaceManager = _ts_decorate7([
1940
1959
  TimeframeClock,
1941
1960
  codec,
1942
1961
  createMappedFeedWriter,
1962
+ hasInvitationExpired,
1943
1963
  mapFeedIndexesToTimeframe,
1944
1964
  mapTimeframeToFeedIndexes,
1945
1965
  startAfter,
1946
1966
  valueEncoding
1947
1967
  });
1948
- //# sourceMappingURL=chunk-7VZVCCNF.cjs.map
1968
+ //# sourceMappingURL=chunk-YZA42CKA.cjs.map