@dxos/echo-pipeline 0.1.41 → 0.1.45-next.45667d4

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-4YAT2XJW.mjs → chunk-2NGLSBL4.mjs} +1128 -1017
  2. package/dist/lib/browser/chunk-2NGLSBL4.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -3
  4. package/dist/lib/browser/index.mjs.map +1 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +72 -48
  7. package/dist/lib/browser/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/index.cjs +1048 -938
  9. package/dist/lib/node/index.cjs.map +4 -4
  10. package/dist/lib/node/meta.json +1 -1
  11. package/dist/lib/node/testing/index.cjs +735 -540
  12. package/dist/lib/node/testing/index.cjs.map +4 -4
  13. package/dist/types/src/dbhost/database-host.d.ts +2 -4
  14. package/dist/types/src/dbhost/database-host.d.ts.map +1 -1
  15. package/dist/types/src/dbhost/snapshot-store.d.ts +2 -0
  16. package/dist/types/src/dbhost/snapshot-store.d.ts.map +1 -1
  17. package/dist/types/src/metadata/metadata-store.d.ts +3 -2
  18. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  19. package/dist/types/src/pipeline/pipeline.d.ts +27 -11
  20. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
  21. package/dist/types/src/pipeline/timeframe-clock.d.ts +1 -0
  22. package/dist/types/src/pipeline/timeframe-clock.d.ts.map +1 -1
  23. package/dist/types/src/space/auth.d.ts +4 -4
  24. package/dist/types/src/space/auth.d.ts.map +1 -1
  25. package/dist/types/src/space/control-pipeline.d.ts +2 -4
  26. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  27. package/dist/types/src/space/data-pipeline.d.ts +19 -10
  28. package/dist/types/src/space/data-pipeline.d.ts.map +1 -1
  29. package/dist/types/src/space/index.d.ts +0 -1
  30. package/dist/types/src/space/index.d.ts.map +1 -1
  31. package/dist/types/src/space/space-manager.d.ts +14 -14
  32. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  33. package/dist/types/src/space/space-protocol.d.ts +2 -2
  34. package/dist/types/src/space/space-protocol.d.ts.map +1 -1
  35. package/dist/types/src/space/space.d.ts +20 -7
  36. package/dist/types/src/space/space.d.ts.map +1 -1
  37. package/dist/types/src/testing/database-test-rig.d.ts.map +1 -1
  38. package/dist/types/src/testing/test-agent-builder.d.ts +15 -5
  39. package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
  40. package/package.json +30 -30
  41. package/src/common/feeds.ts +2 -2
  42. package/src/dbhost/data-service-host.ts +10 -10
  43. package/src/dbhost/data-service.ts +1 -1
  44. package/src/dbhost/database-host.ts +1 -9
  45. package/src/dbhost/snapshot-store.test.ts +2 -2
  46. package/src/dbhost/snapshot-store.ts +16 -1
  47. package/src/metadata/metadata-store.ts +14 -16
  48. package/src/pipeline/message-selector.ts +1 -1
  49. package/src/pipeline/pipeline.test.ts +68 -44
  50. package/src/pipeline/pipeline.ts +118 -35
  51. package/src/pipeline/timeframe-clock.ts +8 -2
  52. package/src/space/auth.ts +6 -6
  53. package/src/space/control-pipeline.test.ts +19 -20
  54. package/src/space/control-pipeline.ts +3 -5
  55. package/src/space/data-pipeline.ts +131 -69
  56. package/src/space/index.ts +0 -1
  57. package/src/space/replication.browser.test.ts +8 -8
  58. package/src/space/space-manager.browser.test.ts +3 -3
  59. package/src/space/space-manager.ts +25 -20
  60. package/src/space/space-protocol.browser.test.ts +1 -1
  61. package/src/space/space-protocol.test.ts +6 -6
  62. package/src/space/space-protocol.ts +7 -7
  63. package/src/space/space.test.ts +137 -48
  64. package/src/space/space.ts +82 -40
  65. package/src/testing/database-test-rig.ts +25 -24
  66. package/src/testing/test-agent-builder.ts +88 -49
  67. package/src/testing/test-feed-builder.ts +1 -1
  68. package/src/testing/util.ts +15 -15
  69. package/src/tests/database-unit.test.ts +4 -4
  70. package/src/tests/database.test.ts +1 -1
  71. package/dist/lib/browser/chunk-4YAT2XJW.mjs.map +0 -7
  72. package/dist/types/src/space/genesis.d.ts +0 -5
  73. package/dist/types/src/space/genesis.d.ts.map +0 -1
  74. package/src/space/genesis.ts +0 -69
@@ -1,26 +1,25 @@
1
1
  import "@dxos/node-std/globals"
2
2
  import {
3
- DataPipeline,
4
3
  DataServiceImpl,
5
4
  DataServiceSubscriptions,
6
5
  DatabaseHost,
7
6
  MOCK_AUTH_PROVIDER,
8
7
  MOCK_AUTH_VERIFIER,
9
8
  MetadataStore,
10
- SnapshotManager,
11
9
  SnapshotStore,
12
- Space,
13
10
  SpaceManager,
14
11
  SpaceProtocol,
15
12
  valueEncoding
16
- } from "../chunk-4YAT2XJW.mjs";
13
+ } from "../chunk-2NGLSBL4.mjs";
17
14
 
18
15
  // packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts
16
+ import { CredentialGenerator } from "@dxos/credentials";
19
17
  import { DocumentModel } from "@dxos/document-model";
20
18
  import { PublicKey } from "@dxos/keys";
21
19
  import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from "@dxos/messaging";
22
20
  import { ModelFactory } from "@dxos/model-factory";
23
21
  import { createWebRTCTransportFactory, MemoryTransportFactory, NetworkManager } from "@dxos/network-manager";
22
+ import { AdmittedFeed } from "@dxos/protocols/proto/dxos/halo/credentials";
24
23
  import { createStorage, StorageType } from "@dxos/random-access-storage";
25
24
  import { Gossip, Presence } from "@dxos/teleport-extension-gossip";
26
25
  import { ComplexMap } from "@dxos/util";
@@ -75,12 +74,22 @@ var TestAgentBuilder = class {
75
74
  }
76
75
  };
77
76
  var TestAgent = class {
77
+ get metadataStore() {
78
+ var _a;
79
+ return (_a = this._metadataStore) != null ? _a : this._metadataStore = new MetadataStore(this.storage.createDirectory("metadata"));
80
+ }
81
+ get snapshotStore() {
82
+ var _a;
83
+ return (_a = this._snapshotStore) != null ? _a : this._snapshotStore = new SnapshotStore(this.storage.createDirectory("snapshots"));
84
+ }
78
85
  constructor(_networkManagerProvider, _feedBuilder, identityKey, deviceKey) {
79
86
  this._networkManagerProvider = _networkManagerProvider;
80
87
  this._feedBuilder = _feedBuilder;
81
88
  this.identityKey = identityKey;
82
89
  this.deviceKey = deviceKey;
83
90
  this._spaces = new ComplexMap(PublicKey.hash);
91
+ this.modelFactory = new ModelFactory().registerModel(DocumentModel);
92
+ this.storage = this._feedBuilder.storage;
84
93
  this.keyring = this._feedBuilder.keyring;
85
94
  this.feedStore = this._feedBuilder.createFeedStore();
86
95
  }
@@ -95,60 +104,60 @@ var TestAgent = class {
95
104
  getSpace(spaceKey) {
96
105
  return this._spaces.get(spaceKey);
97
106
  }
98
- createSpaceManager() {
99
- return new SpaceManager({
100
- feedStore: this._feedBuilder.createFeedStore(),
101
- networkManager: this._networkManagerProvider()
107
+ get spaceManager() {
108
+ var _a;
109
+ return (_a = this._spaceManager) != null ? _a : this._spaceManager = new SpaceManager({
110
+ feedStore: this.feedStore,
111
+ networkManager: this._networkManagerProvider(),
112
+ modelFactory: this.modelFactory,
113
+ metadataStore: this.metadataStore,
114
+ snapshotStore: this.snapshotStore
102
115
  });
103
116
  }
104
- async createSpace(identityKey = this.identityKey, spaceKey, genesisKey) {
117
+ async createSpace(identityKey = this.identityKey, spaceKey, genesisKey, dataKey) {
118
+ let saveMetadata = false;
105
119
  if (!spaceKey) {
120
+ saveMetadata = true;
106
121
  spaceKey = await this.keyring.createKey();
107
122
  }
108
- const dataFeedKey = await this.keyring.createKey();
109
- const dataFeed = await this.feedStore.openFeed(dataFeedKey, {
123
+ if (!genesisKey) {
124
+ genesisKey = await this.keyring.createKey();
125
+ }
126
+ const controlFeed = await this.feedStore.openFeed(genesisKey, {
110
127
  writable: true
111
128
  });
112
- const controlFeedKey = await this.keyring.createKey();
113
- const controlFeed = await this.feedStore.openFeed(controlFeedKey, {
129
+ const dataFeed = await this.feedStore.openFeed(dataKey != null ? dataKey : await this.keyring.createKey(), {
114
130
  writable: true
115
131
  });
116
- const genesisFeed = genesisKey ? await this.feedStore.openFeed(genesisKey) : controlFeed;
117
- const snapshotManager = new SnapshotManager(new SnapshotStore(createStorage().createDirectory("snapshots")));
118
- const metadataStore = new MetadataStore(createStorage().createDirectory("metadata"));
119
- await metadataStore.addSpace({
120
- key: spaceKey
121
- });
122
- const dataPipelineController = new DataPipeline({
123
- modelFactory: new ModelFactory().registerModel(DocumentModel),
124
- metadataStore,
125
- snapshotManager,
132
+ const metadata = {
133
+ key: spaceKey,
134
+ genesisFeedKey: genesisKey,
135
+ controlFeedKey: controlFeed.key,
136
+ dataFeedKey: dataFeed.key
137
+ };
138
+ if (saveMetadata) {
139
+ await this.metadataStore.addSpace(metadata);
140
+ }
141
+ await this.spaceManager.open();
142
+ const space = await this.spaceManager.constructSpace({
143
+ metadata,
144
+ swarmIdentity: {
145
+ peerKey: this.deviceKey,
146
+ credentialProvider: MOCK_AUTH_PROVIDER,
147
+ credentialAuthenticator: MOCK_AUTH_VERIFIER
148
+ },
126
149
  memberKey: identityKey,
127
- spaceKey,
128
- feedInfoProvider: (feedKey) => space.spaceState.feeds.get(feedKey),
129
- snapshotId: void 0
130
- });
131
- const space = new Space({
132
- spaceKey,
133
- protocol: this.createSpaceProtocol(spaceKey),
134
- genesisFeed,
135
- feedProvider: (feedKey) => this.feedStore.openFeed(feedKey)
136
- }).setControlFeed(controlFeed).setDataFeed(dataFeed);
137
- await space.open();
138
- await dataPipelineController.open({
139
- openPipeline: async (start) => {
140
- const pipeline = await space.createDataPipeline({
141
- start
142
- });
143
- await pipeline.start();
144
- return pipeline;
150
+ onNetworkConnection: (session) => {
151
+ session.addExtension("dxos.mesh.teleport.gossip", this.createGossip().createExtension({
152
+ remotePeerId: session.remotePeerId
153
+ }));
145
154
  }
146
155
  });
156
+ space.setControlFeed(controlFeed);
157
+ space.setDataFeed(dataFeed);
158
+ await space.open();
147
159
  this._spaces.set(spaceKey, space);
148
- return [
149
- space,
150
- dataPipelineController
151
- ];
160
+ return space;
152
161
  }
153
162
  createSpaceProtocol(topic, gossip) {
154
163
  return new SpaceProtocol({
@@ -179,6 +188,21 @@ var TestAgent = class {
179
188
  gossip: gossip != null ? gossip : this.createGossip()
180
189
  });
181
190
  }
191
+ async spaceGenesis(space) {
192
+ const generator = new CredentialGenerator(this.keyring, this.identityKey, this.deviceKey);
193
+ const credentials = [
194
+ ...await generator.createSpaceGenesis(space.key, space.controlFeedKey),
195
+ await generator.createFeedAdmission(space.key, space.dataFeedKey, AdmittedFeed.Designation.DATA),
196
+ await generator.createEpochCredential(space.key)
197
+ ];
198
+ for (const credential of credentials) {
199
+ await space.controlPipeline.writer.write({
200
+ credential: {
201
+ credential
202
+ }
203
+ });
204
+ }
205
+ }
182
206
  };
183
207
 
184
208
  // packages/core/echo/echo-pipeline/src/testing/util.ts
@@ -191,7 +215,7 @@ import { ModelFactory as ModelFactory2 } from "@dxos/model-factory";
191
215
  import { Timeframe } from "@dxos/timeframe";
192
216
  var createMemoryDatabase = async (modelFactory) => {
193
217
  const feed = new MockFeedWriter();
194
- const backend = new DatabaseHost(feed, void 0);
218
+ const backend = new DatabaseHost(feed);
195
219
  feed.written.on(([data, meta]) => backend.echoProcessor({
196
220
  batch: data.batch,
197
221
  meta: {
@@ -228,7 +252,7 @@ var createRemoteDatabaseFromDataServiceHost = async (modelFactory, dataServiceHo
228
252
  var testLocalDatabase = async (create, check = create) => {
229
253
  var _a;
230
254
  const objectId = PublicKey2.random().toHex();
231
- await ((_a = create.databaseBackend.getWriteStream()) == null ? void 0 : _a.write({
255
+ await ((_a = create.databaseHost.getWriteStream()) == null ? void 0 : _a.write({
232
256
  batch: {
233
257
  objects: [
234
258
  {
@@ -240,7 +264,7 @@ var testLocalDatabase = async (create, check = create) => {
240
264
  ]
241
265
  }
242
266
  }));
243
- await asyncTimeout(check.databaseBackend._itemDemuxer.mutation.waitForCondition(() => check._itemManager.entities.has(objectId)), 500);
267
+ await asyncTimeout(check.databaseHost._itemDemuxer.mutation.waitForCondition(() => check.itemManager.entities.has(objectId)), 500);
244
268
  };
245
269
  export {
246
270
  MemoryNetworkManagerProvider,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/testing/test-agent-builder.ts", "../../../../src/testing/test-feed-builder.ts", "../../../../src/testing/util.ts"],
4
- "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { DocumentModel } from '@dxos/document-model';\nimport { FeedStore } from '@dxos/feed-store';\nimport { Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { ModelFactory } from '@dxos/model-factory';\nimport { createWebRTCTransportFactory, MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { createStorage, Storage, StorageType } from '@dxos/random-access-storage';\nimport { Gossip, Presence } from '@dxos/teleport-extension-gossip';\nimport { ComplexMap } from '@dxos/util';\n\nimport { SnapshotManager, SnapshotStore } from '../dbhost';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, Space, SpaceManager, SpaceProtocol } from '../space';\nimport { DataPipeline } from '../space/data-pipeline';\nimport { TestFeedBuilder } from './test-feed-builder';\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: createWebRTCTransportFactory()\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 keyring: Keyring;\n public readonly feedStore: FeedStore<FeedMessage>;\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.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 createSpaceManager() {\n return new SpaceManager({\n feedStore: this._feedBuilder.createFeedStore(),\n networkManager: this._networkManagerProvider()\n });\n }\n\n async createSpace(\n identityKey: PublicKey = this.identityKey,\n spaceKey?: PublicKey,\n genesisKey?: PublicKey\n ): Promise<[Space, DataPipeline]> {\n if (!spaceKey) {\n spaceKey = await this.keyring.createKey();\n }\n\n const dataFeedKey = await this.keyring.createKey();\n const dataFeed = await this.feedStore.openFeed(dataFeedKey, { writable: true });\n\n const controlFeedKey = await this.keyring.createKey();\n const controlFeed = await this.feedStore.openFeed(controlFeedKey, { writable: true });\n const genesisFeed = genesisKey ? await this.feedStore.openFeed(genesisKey) : controlFeed;\n const snapshotManager = new SnapshotManager(new SnapshotStore(createStorage().createDirectory('snapshots')));\n\n const metadataStore = new MetadataStore(createStorage().createDirectory('metadata'));\n await metadataStore.addSpace({ key: spaceKey });\n const dataPipelineController: DataPipeline = new DataPipeline({\n modelFactory: new ModelFactory().registerModel(DocumentModel),\n metadataStore,\n snapshotManager,\n memberKey: identityKey,\n spaceKey,\n feedInfoProvider: (feedKey) => space.spaceState.feeds.get(feedKey),\n snapshotId: undefined\n });\n const space = new Space({\n spaceKey,\n protocol: this.createSpaceProtocol(spaceKey),\n genesisFeed,\n feedProvider: (feedKey) => this.feedStore.openFeed(feedKey)\n })\n .setControlFeed(controlFeed)\n .setDataFeed(dataFeed);\n await space.open();\n await dataPipelineController.open({\n openPipeline: async (start) => {\n const pipeline = await space.createDataPipeline({ start });\n await pipeline.start();\n return pipeline;\n }\n });\n\n this._spaces.set(spaceKey, space);\n return [space, dataPipelineController];\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 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", "//\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 2021 DXOS.org\n//\n\nimport { asyncTimeout } from '@dxos/async';\nimport { DocumentModel } from '@dxos/document-model';\nimport { DatabaseProxy, ItemManager } from '@dxos/echo-db';\nimport { MockFeedWriter } from '@dxos/feed-store/testing';\nimport { PublicKey } from '@dxos/keys';\nimport { ModelFactory } from '@dxos/model-factory';\nimport { DataMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { Timeframe } from '@dxos/timeframe';\n\nimport { DatabaseHost, DataServiceHost, DataServiceImpl, DataServiceSubscriptions } from '../dbhost';\nimport { DataPipeline } from '../space';\n\nexport const createMemoryDatabase = async (modelFactory: ModelFactory) => {\n const feed = new MockFeedWriter<DataMessage>();\n const backend = new DatabaseHost(feed, undefined);\n\n feed.written.on(([data, meta]) =>\n backend.echoProcessor({\n batch: data.batch,\n meta: {\n ...meta,\n memberKey: PublicKey.random(),\n timeframe: new Timeframe([[meta.feedKey, meta.seq]])\n }\n })\n );\n\n const itemManager = new ItemManager(modelFactory);\n await backend.open(itemManager, new ModelFactory().registerModel(DocumentModel));\n return {\n backend,\n itemManager\n };\n};\n\nexport const createRemoteDatabaseFromDataServiceHost = async (\n modelFactory: ModelFactory,\n dataServiceHost: DataServiceHost\n) => {\n const dataServiceSubscriptions = new DataServiceSubscriptions();\n const dataService = new DataServiceImpl(dataServiceSubscriptions);\n\n const spaceKey = PublicKey.random();\n dataServiceSubscriptions.registerSpace(spaceKey, dataServiceHost);\n\n const backend = new DatabaseProxy(dataService, spaceKey);\n const itemManager = new ItemManager(modelFactory);\n await backend.open(itemManager, new ModelFactory().registerModel(DocumentModel));\n return {\n itemManager,\n backend\n };\n};\n\nexport const testLocalDatabase = async (create: DataPipeline, check: DataPipeline = create) => {\n const objectId = PublicKey.random().toHex();\n await create.databaseBackend!.getWriteStream()?.write({\n batch: {\n objects: [\n {\n objectId,\n genesis: {\n modelType: DocumentModel.meta.type\n }\n }\n ]\n }\n });\n\n await asyncTimeout(\n check.databaseBackend!._itemDemuxer.mutation.waitForCondition(() => check._itemManager.entities.has(objectId)),\n 500\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["DocumentModel", "PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "ModelFactory", "createWebRTCTransportFactory", "MemoryTransportFactory", "NetworkManager", "createStorage", "StorageType", "Gossip", "Presence", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "server", "createWebRTCTransportFactory", "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", "_feedBuilder", "_spaces", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "createSpaceManager", "SpaceManager", "networkManager", "createSpace", "genesisKey", "dataFeedKey", "dataFeed", "openFeed", "writable", "controlFeedKey", "controlFeed", "genesisFeed", "snapshotManager", "SnapshotManager", "SnapshotStore", "createDirectory", "metadataStore", "MetadataStore", "addSpace", "key", "dataPipelineController", "DataPipeline", "modelFactory", "ModelFactory", "registerModel", "DocumentModel", "memberKey", "feedInfoProvider", "feedKey", "spaceState", "feeds", "snapshotId", "undefined", "Space", "protocol", "createSpaceProtocol", "feedProvider", "setControlFeed", "setDataFeed", "open", "openPipeline", "start", "pipeline", "createDataPipeline", "topic", "gossip", "SpaceProtocol", "swarmIdentity", "peerKey", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "onSessionAuth", "session", "addExtension", "createGossip", "createExtension", "remotePeerId", "Gossip", "localPeerId", "createPresence", "Presence", "announceInterval", "offlineTimeout", "asyncTimeout", "DocumentModel", "DatabaseProxy", "ItemManager", "MockFeedWriter", "PublicKey", "ModelFactory", "Timeframe", "createMemoryDatabase", "modelFactory", "feed", "MockFeedWriter", "backend", "DatabaseHost", "undefined", "written", "on", "data", "meta", "echoProcessor", "batch", "memberKey", "PublicKey", "random", "timeframe", "Timeframe", "feedKey", "seq", "itemManager", "ItemManager", "open", "ModelFactory", "registerModel", "DocumentModel", "createRemoteDatabaseFromDataServiceHost", "dataServiceHost", "dataServiceSubscriptions", "DataServiceSubscriptions", "dataService", "DataServiceImpl", "spaceKey", "registerSpace", "DatabaseProxy", "testLocalDatabase", "create", "check", "objectId", "toHex", "databaseBackend", "getWriteStream", "write", "objects", "genesis", "modelType", "type", "asyncTimeout", "_itemDemuxer", "mutation", "waitForCondition", "_itemManager", "entities", "has"]
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { CredentialGenerator } from '@dxos/credentials';\nimport { DocumentModel } from '@dxos/document-model';\nimport { FeedStore } from '@dxos/feed-store';\nimport { Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { ModelFactory } from '@dxos/model-factory';\nimport { createWebRTCTransportFactory, MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { AdmittedFeed } from '@dxos/protocols/proto/dxos/halo/credentials';\nimport { createStorage, Storage, StorageType } from '@dxos/random-access-storage';\nimport { Gossip, Presence } from '@dxos/teleport-extension-gossip';\nimport { ComplexMap } from '@dxos/util';\n\nimport { SnapshotStore } from '../dbhost';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, Space, SpaceManager, SpaceProtocol } from '../space';\nimport { TestFeedBuilder } from './test-feed-builder';\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: createWebRTCTransportFactory(),\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 public modelFactory = new ModelFactory().registerModel(DocumentModel);\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 modelFactory: this.modelFactory,\n metadataStore: this.metadataStore,\n snapshotStore: this.snapshotStore,\n }));\n }\n\n async createSpace(\n identityKey: PublicKey = this.identityKey,\n spaceKey?: PublicKey,\n genesisKey?: PublicKey,\n dataKey?: PublicKey,\n ): Promise<Space> {\n let saveMetadata = false;\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()), { writable: true });\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 onNetworkConnection: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n this.createGossip().createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n });\n space.setControlFeed(controlFeed);\n space.setDataFeed(dataFeed);\n\n await space.open();\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 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 2021 DXOS.org\n//\n\nimport { asyncTimeout } from '@dxos/async';\nimport { DocumentModel } from '@dxos/document-model';\nimport { DatabaseProxy, ItemManager } from '@dxos/echo-db';\nimport { MockFeedWriter } from '@dxos/feed-store/testing';\nimport { PublicKey } from '@dxos/keys';\nimport { ModelFactory } from '@dxos/model-factory';\nimport { DataMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { Timeframe } from '@dxos/timeframe';\n\nimport { DatabaseHost, DataServiceHost, DataServiceImpl, DataServiceSubscriptions } from '../dbhost';\nimport { DataPipeline } from '../space';\n\nexport const createMemoryDatabase = async (modelFactory: ModelFactory) => {\n const feed = new MockFeedWriter<DataMessage>();\n const backend = new DatabaseHost(feed);\n\n feed.written.on(([data, meta]) =>\n backend.echoProcessor({\n batch: data.batch,\n meta: {\n ...meta,\n memberKey: PublicKey.random(),\n timeframe: new Timeframe([[meta.feedKey, meta.seq]]),\n },\n }),\n );\n\n const itemManager = new ItemManager(modelFactory);\n await backend.open(itemManager, new ModelFactory().registerModel(DocumentModel));\n return {\n backend,\n itemManager,\n };\n};\n\nexport const createRemoteDatabaseFromDataServiceHost = async (\n modelFactory: ModelFactory,\n dataServiceHost: DataServiceHost,\n) => {\n const dataServiceSubscriptions = new DataServiceSubscriptions();\n const dataService = new DataServiceImpl(dataServiceSubscriptions);\n\n const spaceKey = PublicKey.random();\n dataServiceSubscriptions.registerSpace(spaceKey, dataServiceHost);\n\n const backend = new DatabaseProxy(dataService, spaceKey);\n const itemManager = new ItemManager(modelFactory);\n await backend.open(itemManager, new ModelFactory().registerModel(DocumentModel));\n return {\n itemManager,\n backend,\n };\n};\n\nexport const testLocalDatabase = async (create: DataPipeline, check: DataPipeline = create) => {\n const objectId = PublicKey.random().toHex();\n await create.databaseHost!.getWriteStream()?.write({\n batch: {\n objects: [\n {\n objectId,\n genesis: {\n modelType: DocumentModel.meta.type,\n },\n },\n ],\n },\n });\n\n await asyncTimeout(\n check.databaseHost!._itemDemuxer.mutation.waitForCondition(() => check.itemManager.entities.has(objectId)),\n 500,\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["CredentialGenerator", "DocumentModel", "PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "ModelFactory", "createWebRTCTransportFactory", "MemoryTransportFactory", "NetworkManager", "AdmittedFeed", "createStorage", "StorageType", "Gossip", "Presence", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "server", "createWebRTCTransportFactory", "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", "_feedBuilder", "_spaces", "modelFactory", "ModelFactory", "registerModel", "DocumentModel", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "spaceManager", "_spaceManager", "SpaceManager", "networkManager", "createSpace", "genesisKey", "dataKey", "saveMetadata", "controlFeed", "openFeed", "writable", "dataFeed", "metadata", "key", "genesisFeedKey", "controlFeedKey", "dataFeedKey", "addSpace", "open", "constructSpace", "swarmIdentity", "peerKey", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "memberKey", "onNetworkConnection", "session", "addExtension", "createGossip", "createExtension", "remotePeerId", "setControlFeed", "setDataFeed", "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", "asyncTimeout", "DocumentModel", "DatabaseProxy", "ItemManager", "MockFeedWriter", "PublicKey", "ModelFactory", "Timeframe", "createMemoryDatabase", "modelFactory", "feed", "MockFeedWriter", "backend", "DatabaseHost", "written", "on", "data", "meta", "echoProcessor", "batch", "memberKey", "PublicKey", "random", "timeframe", "Timeframe", "feedKey", "seq", "itemManager", "ItemManager", "open", "ModelFactory", "registerModel", "DocumentModel", "createRemoteDatabaseFromDataServiceHost", "dataServiceHost", "dataServiceSubscriptions", "DataServiceSubscriptions", "dataService", "DataServiceImpl", "spaceKey", "registerSpace", "DatabaseProxy", "testLocalDatabase", "create", "check", "objectId", "toHex", "databaseHost", "getWriteStream", "write", "objects", "genesis", "modelType", "type", "asyncTimeout", "_itemDemuxer", "mutation", "waitForCondition", "entities", "has"]
7
7
  }