@dxos/echo-pipeline 0.4.10-main.fd4f2a3 → 0.4.10-main.fd8ea31

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 (68) hide show
  1. package/dist/lib/browser/{chunk-RA6MLCZM.mjs → chunk-KMWJLYEQ.mjs} +68 -35
  2. package/dist/lib/browser/chunk-KMWJLYEQ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +305 -231
  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-KGIYLJBT.cjs → chunk-YZA42CKA.cjs} +70 -37
  9. package/dist/lib/node/chunk-YZA42CKA.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +327 -256
  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-host.d.ts +19 -17
  16. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  17. package/dist/types/src/automerge/automerge-repo.test.d.ts +2 -0
  18. package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -0
  19. package/dist/types/src/automerge/index.d.ts +1 -0
  20. package/dist/types/src/automerge/index.d.ts.map +1 -1
  21. package/dist/types/src/automerge/level.test.d.ts +2 -0
  22. package/dist/types/src/automerge/level.test.d.ts.map +1 -0
  23. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +30 -0
  24. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -0
  25. package/dist/types/src/automerge/local-host-network-adapter.d.ts +8 -1
  26. package/dist/types/src/automerge/local-host-network-adapter.d.ts.map +1 -1
  27. package/dist/types/src/automerge/migrations.d.ts +7 -0
  28. package/dist/types/src/automerge/migrations.d.ts.map +1 -0
  29. package/dist/types/src/automerge/reference.d.ts +1 -1
  30. package/dist/types/src/automerge/reference.d.ts.map +1 -1
  31. package/dist/types/src/automerge/storage-adapter.test.d.ts +2 -0
  32. package/dist/types/src/automerge/storage-adapter.test.d.ts.map +1 -0
  33. package/dist/types/src/automerge/types.d.ts +6 -0
  34. package/dist/types/src/automerge/types.d.ts.map +1 -1
  35. package/dist/types/src/metadata/metadata-store.d.ts +2 -1
  36. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  37. package/dist/types/src/space/control-pipeline.d.ts +3 -1
  38. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  39. package/dist/types/src/space/space-manager.d.ts +3 -1
  40. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  41. package/dist/types/src/space/space.d.ts +2 -1
  42. package/dist/types/src/space/space.d.ts.map +1 -1
  43. package/dist/types/src/testing/index.d.ts +1 -0
  44. package/dist/types/src/testing/index.d.ts.map +1 -1
  45. package/dist/types/src/testing/level.d.ts +3 -0
  46. package/dist/types/src/testing/level.d.ts.map +1 -0
  47. package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
  48. package/package.json +33 -30
  49. package/src/automerge/automerge-host.test.ts +22 -8
  50. package/src/automerge/automerge-host.ts +53 -114
  51. package/src/automerge/automerge-repo.test.ts +29 -0
  52. package/src/automerge/index.ts +1 -0
  53. package/src/automerge/level.test.ts +82 -0
  54. package/src/automerge/leveldb-storage-adapter.ts +117 -0
  55. package/src/automerge/local-host-network-adapter.ts +19 -13
  56. package/src/automerge/migrations.ts +41 -0
  57. package/src/automerge/reference.ts +1 -1
  58. package/src/automerge/storage-adapter.test.ts +90 -0
  59. package/src/automerge/types.ts +6 -3
  60. package/src/metadata/metadata-store.ts +17 -8
  61. package/src/space/control-pipeline.ts +11 -1
  62. package/src/space/space-manager.ts +4 -0
  63. package/src/space/space.ts +11 -1
  64. package/src/testing/index.ts +1 -0
  65. package/src/testing/level.ts +11 -0
  66. package/src/testing/test-agent-builder.ts +1 -0
  67. package/dist/lib/browser/chunk-RA6MLCZM.mjs.map +0 -7
  68. package/dist/lib/node/chunk-KGIYLJBT.cjs.map +0 -7
@@ -7,7 +7,7 @@ import {
7
7
  SpaceManager,
8
8
  SpaceProtocol,
9
9
  valueEncoding
10
- } from "../chunk-RA6MLCZM.mjs";
10
+ } from "../chunk-KMWJLYEQ.mjs";
11
11
 
12
12
  // packages/core/echo/echo-pipeline/src/testing/change-metadata.ts
13
13
  import { log } from "@dxos/log";
@@ -168,6 +168,8 @@ var TestAgent = class {
168
168
  session.addExtension("dxos.mesh.teleport.gossip", this.createGossip().createExtension({
169
169
  remotePeerId: session.remotePeerId
170
170
  }));
171
+ },
172
+ onDelegatedInvitationStatusChange: async () => {
171
173
  }
172
174
  });
173
175
  await space.setControlFeed(controlFeed);
@@ -222,12 +224,18 @@ var TestAgent = class {
222
224
  }
223
225
  }
224
226
  };
227
+
228
+ // packages/core/echo/echo-pipeline/src/testing/level.ts
229
+ import { Level } from "level";
230
+ import { PublicKey as PublicKey2 } from "@dxos/keys";
231
+ var createTestLevel = () => new Level(`/tmp/dxos-${PublicKey2.random().toHex()}`);
225
232
  export {
226
233
  MemoryNetworkManagerProvider,
227
234
  TestAgent,
228
235
  TestAgentBuilder,
229
236
  TestFeedBuilder,
230
237
  WebsocketNetworkManagerProvider,
231
- changeStorageVersionInMetadata
238
+ changeStorageVersionInMetadata,
239
+ createTestLevel
232
240
  };
233
241
  //# sourceMappingURL=index.mjs.map
@@ -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_KGIYLJBT_exports = {};
30
- __export(chunk_KGIYLJBT_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_KGIYLJBT_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_KGIYLJBT_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");
@@ -392,8 +393,8 @@ var MetadataStore = class {
392
393
  }
393
394
  });
394
395
  (0, import_async.scheduleTaskInterval)(this._invitationCleanupCtx, async () => {
395
- for (const invitation of this.getInvitations()) {
396
- 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)) {
397
398
  await this.removeInvitation(invitation.invitationId);
398
399
  }
399
400
  }
@@ -422,7 +423,7 @@ var MetadataStore = class {
422
423
  err
423
424
  }, {
424
425
  F: __dxlog_file2,
425
- L: 215,
426
+ L: 210,
426
427
  S: this,
427
428
  C: (f, a) => f(...a)
428
429
  });
@@ -443,7 +444,7 @@ var MetadataStore = class {
443
444
  const space = this.spaces.find((space2) => space2.key === spaceKey);
444
445
  (0, import_invariant2.invariant)(space, "Space not found", {
445
446
  F: __dxlog_file2,
446
- L: 237,
447
+ L: 232,
447
448
  S: this,
448
449
  A: [
449
450
  "space",
@@ -467,7 +468,7 @@ var MetadataStore = class {
467
468
  async clear() {
468
469
  (0, import_log.log)("clearing all metadata", void 0, {
469
470
  F: __dxlog_file2,
470
- L: 256,
471
+ L: 251,
471
472
  S: this,
472
473
  C: (f, a) => f(...a)
473
474
  });
@@ -480,7 +481,7 @@ var MetadataStore = class {
480
481
  async setIdentityRecord(record) {
481
482
  (0, import_invariant2.invariant)(!this._metadata.identity, "Cannot overwrite existing identity in metadata", {
482
483
  F: __dxlog_file2,
483
- L: 266,
484
+ L: 261,
484
485
  S: this,
485
486
  A: [
486
487
  "!this._metadata.identity",
@@ -510,7 +511,7 @@ var MetadataStore = class {
510
511
  async addSpace(record) {
511
512
  (0, import_invariant2.invariant)(!(this._metadata.spaces ?? []).find((space) => space.key === record.key), "Cannot overwrite existing space in metadata", {
512
513
  F: __dxlog_file2,
513
- L: 294,
514
+ L: 289,
514
515
  S: this,
515
516
  A: [
516
517
  "!(this._metadata.spaces ?? []).find((space) => space.key === record.key)",
@@ -565,6 +566,12 @@ _ts_decorate([
565
566
  import_async.synchronized
566
567
  ], MetadataStore.prototype, "_saveSpaceLargeMetadata", null);
567
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
+ };
568
575
  function _ts_decorate2(decorators, target, key, desc) {
569
576
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
570
577
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
@@ -1225,7 +1232,7 @@ var ControlPipeline = class {
1225
1232
  key: info.key
1226
1233
  }, {
1227
1234
  F: __dxlog_file7,
1228
- L: 74,
1235
+ L: 82,
1229
1236
  S: this,
1230
1237
  C: (f, a) => f(...a)
1231
1238
  });
@@ -1239,7 +1246,7 @@ var ControlPipeline = class {
1239
1246
  } catch (err) {
1240
1247
  import_log7.log.catch(err, void 0, {
1241
1248
  F: __dxlog_file7,
1242
- L: 85,
1249
+ L: 93,
1243
1250
  S: this,
1244
1251
  C: (f, a) => f(...a)
1245
1252
  });
@@ -1250,6 +1257,8 @@ var ControlPipeline = class {
1250
1257
  });
1251
1258
  this.onMemberAdmitted = this._spaceStateMachine.onMemberAdmitted;
1252
1259
  this.onCredentialProcessed = this._spaceStateMachine.onCredentialProcessed;
1260
+ this.onDelegatedInvitation = this._spaceStateMachine.onDelegatedInvitation;
1261
+ this.onDelegatedInvitationRemoved = this._spaceStateMachine.onDelegatedInvitationRemoved;
1253
1262
  }
1254
1263
  get spaceState() {
1255
1264
  return this._spaceStateMachine;
@@ -1269,7 +1278,7 @@ var ControlPipeline = class {
1269
1278
  tf: snapshot?.timeframe
1270
1279
  }, {
1271
1280
  F: __dxlog_file7,
1272
- L: 113,
1281
+ L: 123,
1273
1282
  S: this,
1274
1283
  C: (f, a) => f(...a)
1275
1284
  });
@@ -1278,7 +1287,7 @@ var ControlPipeline = class {
1278
1287
  }
1279
1288
  (0, import_log7.log)("starting...", void 0, {
1280
1289
  F: __dxlog_file7,
1281
- L: 118,
1290
+ L: 128,
1282
1291
  S: this,
1283
1292
  C: (f, a) => f(...a)
1284
1293
  });
@@ -1288,7 +1297,7 @@ var ControlPipeline = class {
1288
1297
  await this._pipeline.start();
1289
1298
  (0, import_log7.log)("started", void 0, {
1290
1299
  F: __dxlog_file7,
1291
- L: 124,
1300
+ L: 134,
1292
1301
  S: this,
1293
1302
  C: (f, a) => f(...a)
1294
1303
  });
@@ -1305,7 +1314,7 @@ var ControlPipeline = class {
1305
1314
  message
1306
1315
  }, {
1307
1316
  F: __dxlog_file7,
1308
- L: 137,
1317
+ L: 147,
1309
1318
  S: this,
1310
1319
  C: (f, a) => f(...a)
1311
1320
  });
@@ -1327,7 +1336,7 @@ var ControlPipeline = class {
1327
1336
  snapshot
1328
1337
  }, {
1329
1338
  F: __dxlog_file7,
1330
- L: 153,
1339
+ L: 163,
1331
1340
  S: this,
1332
1341
  C: (f, a) => f(...a)
1333
1342
  });
@@ -1342,7 +1351,7 @@ var ControlPipeline = class {
1342
1351
  } catch (err) {
1343
1352
  import_log7.log.catch(err, void 0, {
1344
1353
  F: __dxlog_file7,
1345
- L: 166,
1354
+ L: 176,
1346
1355
  S: this,
1347
1356
  C: (f, a) => f(...a)
1348
1357
  });
@@ -1356,7 +1365,7 @@ var ControlPipeline = class {
1356
1365
  seq: msg.seq
1357
1366
  }, {
1358
1367
  F: __dxlog_file7,
1359
- L: 176,
1368
+ L: 186,
1360
1369
  S: this,
1361
1370
  C: (f, a) => f(...a)
1362
1371
  });
@@ -1371,7 +1380,7 @@ var ControlPipeline = class {
1371
1380
  msg
1372
1381
  }, {
1373
1382
  F: __dxlog_file7,
1374
- L: 185,
1383
+ L: 195,
1375
1384
  S: this,
1376
1385
  C: (f, a) => f(...a)
1377
1386
  });
@@ -1390,7 +1399,7 @@ var ControlPipeline = class {
1390
1399
  async stop() {
1391
1400
  (0, import_log7.log)("stopping...", void 0, {
1392
1401
  F: __dxlog_file7,
1393
- L: 205,
1402
+ L: 215,
1394
1403
  S: this,
1395
1404
  C: (f, a) => f(...a)
1396
1405
  });
@@ -1399,7 +1408,7 @@ var ControlPipeline = class {
1399
1408
  await this._saveTargetTimeframe(this._pipeline.state.timeframe);
1400
1409
  (0, import_log7.log)("stopped", void 0, {
1401
1410
  F: __dxlog_file7,
1402
- L: 209,
1411
+ L: 219,
1403
1412
  S: this,
1404
1413
  C: (f, a) => f(...a)
1405
1414
  });
@@ -1412,7 +1421,7 @@ var ControlPipeline = class {
1412
1421
  } catch (err) {
1413
1422
  (0, import_log7.log)(err, void 0, {
1414
1423
  F: __dxlog_file7,
1415
- L: 218,
1424
+ L: 228,
1416
1425
  S: this,
1417
1426
  C: (f, a) => f(...a)
1418
1427
  });
@@ -1459,7 +1468,7 @@ var Space = class extends import_context5.Resource {
1459
1468
  this.stateUpdate = new import_async5.Event();
1460
1469
  (0, import_invariant6.invariant)(params.spaceKey && params.feedProvider, void 0, {
1461
1470
  F: __dxlog_file8,
1462
- L: 72,
1471
+ L: 74,
1463
1472
  S: this,
1464
1473
  A: [
1465
1474
  "params.spaceKey && params.feedProvider",
@@ -1492,12 +1501,34 @@ var Space = class extends import_context5.Resource {
1492
1501
  credential
1493
1502
  }, {
1494
1503
  F: __dxlog_file8,
1495
- L: 99,
1504
+ L: 101,
1496
1505
  S: this,
1497
1506
  C: (f, a) => f(...a)
1498
1507
  });
1499
1508
  this.stateUpdate.emit();
1500
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
+ });
1501
1532
  this.protocol = params.protocol;
1502
1533
  this.protocol.addFeed(params.genesisFeed);
1503
1534
  }
@@ -1531,7 +1562,7 @@ var Space = class extends import_context5.Resource {
1531
1562
  async setControlFeed(feed) {
1532
1563
  (0, import_invariant6.invariant)(!this._controlFeed, "Control feed already set.", {
1533
1564
  F: __dxlog_file8,
1534
- L: 146,
1565
+ L: 156,
1535
1566
  S: this,
1536
1567
  A: [
1537
1568
  "!this._controlFeed",
@@ -1545,7 +1576,7 @@ var Space = class extends import_context5.Resource {
1545
1576
  async setDataFeed(feed) {
1546
1577
  (0, import_invariant6.invariant)(!this._dataFeed, "Data feed already set.", {
1547
1578
  F: __dxlog_file8,
1548
- L: 153,
1579
+ L: 163,
1549
1580
  S: this,
1550
1581
  A: [
1551
1582
  "!this._dataFeed",
@@ -1564,7 +1595,7 @@ var Space = class extends import_context5.Resource {
1564
1595
  async _open(ctx) {
1565
1596
  (0, import_log6.log)("opening...", void 0, {
1566
1597
  F: __dxlog_file8,
1567
- L: 167,
1598
+ L: 177,
1568
1599
  S: this,
1569
1600
  C: (f, a) => f(...a)
1570
1601
  });
@@ -1572,7 +1603,7 @@ var Space = class extends import_context5.Resource {
1572
1603
  await this.protocol.start();
1573
1604
  (0, import_log6.log)("opened", void 0, {
1574
1605
  F: __dxlog_file8,
1575
- L: 173,
1606
+ L: 183,
1576
1607
  S: this,
1577
1608
  C: (f, a) => f(...a)
1578
1609
  });
@@ -1582,7 +1613,7 @@ var Space = class extends import_context5.Resource {
1582
1613
  key: this._key
1583
1614
  }, {
1584
1615
  F: __dxlog_file8,
1585
- L: 178,
1616
+ L: 188,
1586
1617
  S: this,
1587
1618
  C: (f, a) => f(...a)
1588
1619
  });
@@ -1590,7 +1621,7 @@ var Space = class extends import_context5.Resource {
1590
1621
  await this._controlPipeline.stop();
1591
1622
  (0, import_log6.log)("closed", void 0, {
1592
1623
  F: __dxlog_file8,
1593
- L: 184,
1624
+ L: 194,
1594
1625
  S: this,
1595
1626
  C: (f, a) => f(...a)
1596
1627
  });
@@ -1851,12 +1882,12 @@ var SpaceManager = class {
1851
1882
  ...this._spaces.values()
1852
1883
  ].map((space) => space.close()));
1853
1884
  }
1854
- async constructSpace({ metadata, swarmIdentity, onAuthorizedConnection, onAuthFailure, memberKey }) {
1885
+ async constructSpace({ metadata, swarmIdentity, onAuthorizedConnection, onAuthFailure, onDelegatedInvitationStatusChange, memberKey }) {
1855
1886
  import_log9.log.trace("dxos.echo.space-manager.construct-space", import_protocols6.trace.begin({
1856
1887
  id: this._instanceId
1857
1888
  }), {
1858
1889
  F: __dxlog_file10,
1859
- L: 89,
1890
+ L: 92,
1860
1891
  S: this,
1861
1892
  C: (f, a) => f(...a)
1862
1893
  });
@@ -1864,7 +1895,7 @@ var SpaceManager = class {
1864
1895
  spaceKey: metadata.genesisFeedKey
1865
1896
  }, {
1866
1897
  F: __dxlog_file10,
1867
- L: 90,
1898
+ L: 93,
1868
1899
  S: this,
1869
1900
  C: (f, a) => f(...a)
1870
1901
  });
@@ -1886,14 +1917,15 @@ var SpaceManager = class {
1886
1917
  feedProvider: (feedKey, opts) => this._feedStore.openFeed(feedKey, opts),
1887
1918
  metadataStore: this._metadataStore,
1888
1919
  snapshotManager,
1889
- memberKey
1920
+ memberKey,
1921
+ onDelegatedInvitationStatusChange
1890
1922
  });
1891
1923
  this._spaces.set(space.key, space);
1892
1924
  import_log9.log.trace("dxos.echo.space-manager.construct-space", import_protocols6.trace.end({
1893
1925
  id: this._instanceId
1894
1926
  }), {
1895
1927
  F: __dxlog_file10,
1896
- L: 117,
1928
+ L: 121,
1897
1929
  S: this,
1898
1930
  C: (f, a) => f(...a)
1899
1931
  });
@@ -1927,9 +1959,10 @@ SpaceManager = _ts_decorate7([
1927
1959
  TimeframeClock,
1928
1960
  codec,
1929
1961
  createMappedFeedWriter,
1962
+ hasInvitationExpired,
1930
1963
  mapFeedIndexesToTimeframe,
1931
1964
  mapTimeframeToFeedIndexes,
1932
1965
  startAfter,
1933
1966
  valueEncoding
1934
1967
  });
1935
- //# sourceMappingURL=chunk-KGIYLJBT.cjs.map
1968
+ //# sourceMappingURL=chunk-YZA42CKA.cjs.map