@dxos/echo-pipeline 0.1.24-next.6b1f434

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 (134) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +22 -0
  3. package/dist/lib/browser/chunk-3GAE5CKD.mjs +1621 -0
  4. package/dist/lib/browser/chunk-3GAE5CKD.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +114 -0
  6. package/dist/lib/browser/index.mjs.map +7 -0
  7. package/dist/lib/browser/meta.json +1 -0
  8. package/dist/lib/browser/testing/index.mjs +238 -0
  9. package/dist/lib/browser/testing/index.mjs.map +7 -0
  10. package/dist/lib/node/index.cjs +1747 -0
  11. package/dist/lib/node/index.cjs.map +7 -0
  12. package/dist/lib/node/meta.json +1 -0
  13. package/dist/lib/node/testing/index.cjs +1835 -0
  14. package/dist/lib/node/testing/index.cjs.map +7 -0
  15. package/dist/types/src/common/codec.d.ts +12 -0
  16. package/dist/types/src/common/codec.d.ts.map +1 -0
  17. package/dist/types/src/common/feeds.d.ts +7 -0
  18. package/dist/types/src/common/feeds.d.ts.map +1 -0
  19. package/dist/types/src/common/index.d.ts +3 -0
  20. package/dist/types/src/common/index.d.ts.map +1 -0
  21. package/dist/types/src/dbhost/data-service-host.d.ts +22 -0
  22. package/dist/types/src/dbhost/data-service-host.d.ts.map +1 -0
  23. package/dist/types/src/dbhost/data-service.d.ts +21 -0
  24. package/dist/types/src/dbhost/data-service.d.ts.map +1 -0
  25. package/dist/types/src/dbhost/database-backend.d.ts +28 -0
  26. package/dist/types/src/dbhost/database-backend.d.ts.map +1 -0
  27. package/dist/types/src/dbhost/index.d.ts +6 -0
  28. package/dist/types/src/dbhost/index.d.ts.map +1 -0
  29. package/dist/types/src/dbhost/snapshot-manager.d.ts +17 -0
  30. package/dist/types/src/dbhost/snapshot-manager.d.ts.map +1 -0
  31. package/dist/types/src/dbhost/snapshot-store.d.ts +9 -0
  32. package/dist/types/src/dbhost/snapshot-store.d.ts.map +1 -0
  33. package/dist/types/src/dbhost/snapshot-store.test.d.ts +2 -0
  34. package/dist/types/src/dbhost/snapshot-store.test.d.ts.map +1 -0
  35. package/dist/types/src/errors/errors.d.ts +26 -0
  36. package/dist/types/src/errors/errors.d.ts.map +1 -0
  37. package/dist/types/src/errors/index.d.ts +2 -0
  38. package/dist/types/src/errors/index.d.ts.map +1 -0
  39. package/dist/types/src/index.d.ts +7 -0
  40. package/dist/types/src/index.d.ts.map +1 -0
  41. package/dist/types/src/metadata/index.d.ts +2 -0
  42. package/dist/types/src/metadata/index.d.ts.map +1 -0
  43. package/dist/types/src/metadata/metadata-store.d.ts +42 -0
  44. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -0
  45. package/dist/types/src/pipeline/index.d.ts +3 -0
  46. package/dist/types/src/pipeline/index.d.ts.map +1 -0
  47. package/dist/types/src/pipeline/message-selector.d.ts +11 -0
  48. package/dist/types/src/pipeline/message-selector.d.ts.map +1 -0
  49. package/dist/types/src/pipeline/pipeline.d.ts +98 -0
  50. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -0
  51. package/dist/types/src/pipeline/pipeline.test.d.ts +2 -0
  52. package/dist/types/src/pipeline/pipeline.test.d.ts.map +1 -0
  53. package/dist/types/src/pipeline/timeframe-clock.d.ts +19 -0
  54. package/dist/types/src/pipeline/timeframe-clock.d.ts.map +1 -0
  55. package/dist/types/src/space/auth.d.ts +23 -0
  56. package/dist/types/src/space/auth.d.ts.map +1 -0
  57. package/dist/types/src/space/control-pipeline.d.ts +31 -0
  58. package/dist/types/src/space/control-pipeline.d.ts.map +1 -0
  59. package/dist/types/src/space/control-pipeline.test.d.ts +2 -0
  60. package/dist/types/src/space/control-pipeline.test.d.ts.map +1 -0
  61. package/dist/types/src/space/data-pipeline-controller.d.ts +63 -0
  62. package/dist/types/src/space/data-pipeline-controller.d.ts.map +1 -0
  63. package/dist/types/src/space/genesis.d.ts +5 -0
  64. package/dist/types/src/space/genesis.d.ts.map +1 -0
  65. package/dist/types/src/space/index.d.ts +7 -0
  66. package/dist/types/src/space/index.d.ts.map +1 -0
  67. package/dist/types/src/space/replication.browser.test.d.ts +2 -0
  68. package/dist/types/src/space/replication.browser.test.d.ts.map +1 -0
  69. package/dist/types/src/space/space-manager.browser.test.d.ts +2 -0
  70. package/dist/types/src/space/space-manager.browser.test.d.ts.map +1 -0
  71. package/dist/types/src/space/space-manager.d.ts +41 -0
  72. package/dist/types/src/space/space-manager.d.ts.map +1 -0
  73. package/dist/types/src/space/space-protocol.browser.test.d.ts +2 -0
  74. package/dist/types/src/space/space-protocol.browser.test.d.ts.map +1 -0
  75. package/dist/types/src/space/space-protocol.d.ts +76 -0
  76. package/dist/types/src/space/space-protocol.d.ts.map +1 -0
  77. package/dist/types/src/space/space-protocol.test.d.ts +2 -0
  78. package/dist/types/src/space/space-protocol.test.d.ts.map +1 -0
  79. package/dist/types/src/space/space.d.ts +59 -0
  80. package/dist/types/src/space/space.d.ts.map +1 -0
  81. package/dist/types/src/space/space.test.d.ts +2 -0
  82. package/dist/types/src/space/space.test.d.ts.map +1 -0
  83. package/dist/types/src/testing/index.d.ts +4 -0
  84. package/dist/types/src/testing/index.d.ts.map +1 -0
  85. package/dist/types/src/testing/test-agent-builder.d.ts +52 -0
  86. package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -0
  87. package/dist/types/src/testing/test-feed-builder.d.ts +9 -0
  88. package/dist/types/src/testing/test-feed-builder.d.ts.map +1 -0
  89. package/dist/types/src/testing/util.d.ts +14 -0
  90. package/dist/types/src/testing/util.d.ts.map +1 -0
  91. package/dist/types/src/tests/database.test.d.ts +2 -0
  92. package/dist/types/src/tests/database.test.d.ts.map +1 -0
  93. package/package.json +60 -0
  94. package/src/common/codec.ts +18 -0
  95. package/src/common/feeds.ts +23 -0
  96. package/src/common/index.ts +6 -0
  97. package/src/dbhost/data-service-host.ts +103 -0
  98. package/src/dbhost/data-service.ts +66 -0
  99. package/src/dbhost/database-backend.ts +64 -0
  100. package/src/dbhost/index.ts +9 -0
  101. package/src/dbhost/snapshot-manager.ts +68 -0
  102. package/src/dbhost/snapshot-store.test.ts +30 -0
  103. package/src/dbhost/snapshot-store.ts +45 -0
  104. package/src/errors/errors.ts +52 -0
  105. package/src/errors/index.ts +5 -0
  106. package/src/index.ts +10 -0
  107. package/src/metadata/index.ts +5 -0
  108. package/src/metadata/metadata-store.ts +173 -0
  109. package/src/pipeline/index.ts +6 -0
  110. package/src/pipeline/message-selector.ts +38 -0
  111. package/src/pipeline/pipeline.test.ts +71 -0
  112. package/src/pipeline/pipeline.ts +249 -0
  113. package/src/pipeline/timeframe-clock.ts +56 -0
  114. package/src/space/auth.ts +88 -0
  115. package/src/space/control-pipeline.test.ts +162 -0
  116. package/src/space/control-pipeline.ts +103 -0
  117. package/src/space/data-pipeline-controller.ts +234 -0
  118. package/src/space/genesis.ts +29 -0
  119. package/src/space/index.ts +10 -0
  120. package/src/space/replication.browser.test.ts +64 -0
  121. package/src/space/space-manager.browser.test.ts +44 -0
  122. package/src/space/space-manager.ts +92 -0
  123. package/src/space/space-protocol.browser.test.ts +135 -0
  124. package/src/space/space-protocol.test.ts +136 -0
  125. package/src/space/space-protocol.ts +222 -0
  126. package/src/space/space.test.ts +144 -0
  127. package/src/space/space.ts +199 -0
  128. package/src/testing/index.ts +7 -0
  129. package/src/testing/test-agent-builder.ts +193 -0
  130. package/src/testing/test-feed-builder.ts +19 -0
  131. package/src/testing/util.ts +77 -0
  132. package/src/tests/database.test.ts +53 -0
  133. package/testing.d.ts +11 -0
  134. package/testing.js +5 -0
@@ -0,0 +1,238 @@
1
+ import "@dxos/node-std/globals"
2
+ import {
3
+ DataPipelineControllerImpl,
4
+ DataServiceImpl,
5
+ DataServiceSubscriptions,
6
+ DatabaseBackendHost,
7
+ MOCK_AUTH_PROVIDER,
8
+ MOCK_AUTH_VERIFIER,
9
+ MetadataStore,
10
+ SnapshotManager,
11
+ SnapshotStore,
12
+ Space,
13
+ SpaceManager,
14
+ SpaceProtocol,
15
+ valueEncoding
16
+ } from "../chunk-3GAE5CKD.mjs";
17
+
18
+ // packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts
19
+ import { DocumentModel } from "@dxos/document-model";
20
+ import { PublicKey } from "@dxos/keys";
21
+ import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from "@dxos/messaging";
22
+ import { ModelFactory } from "@dxos/model-factory";
23
+ import { createWebRTCTransportFactory, MemoryTransportFactory, NetworkManager } from "@dxos/network-manager";
24
+ import { createStorage, StorageType } from "@dxos/random-access-storage";
25
+ import { Presence } from "@dxos/teleport-extension-presence";
26
+ import { ComplexMap } from "@dxos/util";
27
+
28
+ // packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts
29
+ import { TestBuilder } from "@dxos/feed-store/testing";
30
+ var TestFeedBuilder = class extends TestBuilder {
31
+ constructor() {
32
+ super({
33
+ valueEncoding
34
+ });
35
+ }
36
+ };
37
+
38
+ // packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts
39
+ var MemoryNetworkManagerProvider = (signalContext) => () => new NetworkManager({
40
+ signalManager: new MemorySignalManager(signalContext),
41
+ transportFactory: MemoryTransportFactory
42
+ });
43
+ var WebsocketNetworkManagerProvider = (signalUrl) => () => new NetworkManager({
44
+ signalManager: new WebsocketSignalManager([
45
+ signalUrl
46
+ ]),
47
+ transportFactory: createWebRTCTransportFactory()
48
+ });
49
+ var TestAgentBuilder = class {
50
+ constructor({ storage, networkManagerProvider } = {}) {
51
+ this._agents = new ComplexMap(PublicKey.hash);
52
+ this._storage = storage != null ? storage : createStorage({
53
+ type: StorageType.RAM
54
+ });
55
+ this._networkManagerProvider = networkManagerProvider != null ? networkManagerProvider : MemoryNetworkManagerProvider(new MemorySignalManagerContext());
56
+ }
57
+ async close() {
58
+ return Promise.all(this.agents.map((agent) => agent.close()));
59
+ }
60
+ get agents() {
61
+ return Array.from(this._agents.values());
62
+ }
63
+ getAgent(deviceKey) {
64
+ return this._agents.get(deviceKey);
65
+ }
66
+ async createPeer() {
67
+ const feedBuilder = new TestFeedBuilder().setStorage(this._storage, `agent-${this._agents.size}`);
68
+ const identityKey = await feedBuilder.keyring.createKey();
69
+ const deviceKey = await feedBuilder.keyring.createKey();
70
+ const agent = new TestAgent(this._networkManagerProvider, feedBuilder, identityKey, deviceKey);
71
+ this._agents.set(deviceKey, agent);
72
+ return agent;
73
+ }
74
+ };
75
+ var TestAgent = class {
76
+ constructor(_networkManagerProvider, _feedBuilder, identityKey, deviceKey) {
77
+ this._networkManagerProvider = _networkManagerProvider;
78
+ this._feedBuilder = _feedBuilder;
79
+ this.identityKey = identityKey;
80
+ this.deviceKey = deviceKey;
81
+ this._spaces = new ComplexMap(PublicKey.hash);
82
+ this.keyring = this._feedBuilder.keyring;
83
+ this.feedStore = this._feedBuilder.createFeedStore();
84
+ }
85
+ async close() {
86
+ return Promise.all([
87
+ ...this.spaces.map((space) => space.close())
88
+ ]);
89
+ }
90
+ get spaces() {
91
+ return Array.from(this._spaces.values());
92
+ }
93
+ getSpace(spaceKey) {
94
+ return this._spaces.get(spaceKey);
95
+ }
96
+ createSpaceManager() {
97
+ return new SpaceManager({
98
+ feedStore: this._feedBuilder.createFeedStore(),
99
+ networkManager: this._networkManagerProvider()
100
+ });
101
+ }
102
+ async createSpace(identityKey = this.identityKey, spaceKey, genesisKey) {
103
+ if (!spaceKey) {
104
+ spaceKey = await this.keyring.createKey();
105
+ }
106
+ const dataFeedKey = await this.keyring.createKey();
107
+ const dataFeed = await this.feedStore.openFeed(dataFeedKey, {
108
+ writable: true
109
+ });
110
+ const controlFeedKey = await this.keyring.createKey();
111
+ const controlFeed = await this.feedStore.openFeed(controlFeedKey, {
112
+ writable: true
113
+ });
114
+ const genesisFeed = genesisKey ? await this.feedStore.openFeed(genesisKey) : controlFeed;
115
+ const snapshotManager = new SnapshotManager(new SnapshotStore(createStorage().createDirectory("snapshots")));
116
+ const metadataStore = new MetadataStore(createStorage().createDirectory("metadata"));
117
+ await metadataStore.addSpace({
118
+ key: spaceKey
119
+ });
120
+ const dataPipelineController = new DataPipelineControllerImpl({
121
+ modelFactory: new ModelFactory().registerModel(DocumentModel),
122
+ metadataStore,
123
+ snapshotManager,
124
+ memberKey: identityKey,
125
+ spaceKey,
126
+ feedInfoProvider: (feedKey) => space.spaceState.feeds.get(feedKey),
127
+ snapshotId: void 0
128
+ });
129
+ const space = new Space({
130
+ spaceKey,
131
+ protocol: this.createSpaceProtocol(spaceKey),
132
+ genesisFeed,
133
+ feedProvider: (feedKey) => this.feedStore.openFeed(feedKey)
134
+ }).setControlFeed(controlFeed).setDataFeed(dataFeed);
135
+ await space.open();
136
+ await space.initDataPipeline(dataPipelineController);
137
+ this._spaces.set(spaceKey, space);
138
+ return [
139
+ space,
140
+ dataPipelineController
141
+ ];
142
+ }
143
+ createSpaceProtocol(topic, presence) {
144
+ return new SpaceProtocol({
145
+ topic,
146
+ swarmIdentity: {
147
+ peerKey: this.deviceKey,
148
+ credentialProvider: MOCK_AUTH_PROVIDER,
149
+ credentialAuthenticator: MOCK_AUTH_VERIFIER
150
+ },
151
+ networkManager: this._networkManagerProvider(),
152
+ onSessionAuth: (session) => {
153
+ session.addExtension("dxos.mesh.teleport.presence", (presence != null ? presence : this.createPresence()).createExtension({
154
+ remotePeerId: session.remotePeerId
155
+ }));
156
+ }
157
+ });
158
+ }
159
+ createPresence() {
160
+ return new Presence({
161
+ localPeerId: this.deviceKey,
162
+ announceInterval: 30,
163
+ offlineTimeout: 200,
164
+ identityKey: this.identityKey
165
+ });
166
+ }
167
+ };
168
+
169
+ // packages/core/echo/echo-pipeline/src/testing/util.ts
170
+ import { asyncTimeout } from "@dxos/async";
171
+ import { DocumentModel as DocumentModel2 } from "@dxos/document-model";
172
+ import { DatabaseBackendProxy, ItemManager } from "@dxos/echo-db";
173
+ import { MockFeedWriter } from "@dxos/feed-store/testing";
174
+ import { PublicKey as PublicKey2 } from "@dxos/keys";
175
+ import { ModelFactory as ModelFactory2 } from "@dxos/model-factory";
176
+ import { Timeframe } from "@dxos/timeframe";
177
+ var createMemoryDatabase = async (modelFactory) => {
178
+ const feed = new MockFeedWriter();
179
+ const backend = new DatabaseBackendHost(feed, void 0, {
180
+ snapshots: true
181
+ });
182
+ feed.written.on(([data, meta]) => backend.echoProcessor({
183
+ data: data.object,
184
+ meta: {
185
+ ...meta,
186
+ memberKey: PublicKey2.random(),
187
+ timeframe: new Timeframe([
188
+ [
189
+ meta.feedKey,
190
+ meta.seq
191
+ ]
192
+ ])
193
+ }
194
+ }));
195
+ const itemManager = new ItemManager(modelFactory);
196
+ await backend.open(itemManager, new ModelFactory2().registerModel(DocumentModel2));
197
+ return {
198
+ backend,
199
+ itemManager
200
+ };
201
+ };
202
+ var createRemoteDatabaseFromDataServiceHost = async (modelFactory, dataServiceHost) => {
203
+ const dataServiceSubscriptions = new DataServiceSubscriptions();
204
+ const dataService = new DataServiceImpl(dataServiceSubscriptions);
205
+ const spaceKey = PublicKey2.random();
206
+ dataServiceSubscriptions.registerSpace(spaceKey, dataServiceHost);
207
+ const backend = new DatabaseBackendProxy(dataService, spaceKey);
208
+ const itemManager = new ItemManager(modelFactory);
209
+ await backend.open(itemManager, new ModelFactory2().registerModel(DocumentModel2));
210
+ return {
211
+ itemManager,
212
+ backend
213
+ };
214
+ };
215
+ var testLocalDatabase = async (create, check = create) => {
216
+ var _a;
217
+ const objectId = PublicKey2.random().toHex();
218
+ await ((_a = create.databaseBackend.getWriteStream()) == null ? void 0 : _a.write({
219
+ object: {
220
+ objectId,
221
+ genesis: {
222
+ modelType: DocumentModel2.meta.type
223
+ }
224
+ }
225
+ }));
226
+ await asyncTimeout(check._itemManager.update.waitForCondition(() => check._itemManager.entities.has(objectId)), 500);
227
+ };
228
+ export {
229
+ MemoryNetworkManagerProvider,
230
+ TestAgent,
231
+ TestAgentBuilder,
232
+ TestFeedBuilder,
233
+ WebsocketNetworkManagerProvider,
234
+ createMemoryDatabase,
235
+ createRemoteDatabaseFromDataServiceHost,
236
+ testLocalDatabase
237
+ };
238
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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 { Presence } from '@dxos/teleport-extension-presence';\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 { DataPipelineControllerImpl } from '../space/data-pipeline-controller';\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([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, DataPipelineControllerImpl]> {\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: DataPipelineControllerImpl = new DataPipelineControllerImpl({\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 space.initDataPipeline(dataPipelineController);\n\n this._spaces.set(spaceKey, space);\n return [space, dataPipelineController];\n }\n\n createSpaceProtocol(topic: PublicKey, presence?: Presence) {\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.presence',\n (presence ?? this.createPresence()).createExtension({ remotePeerId: session.remotePeerId })\n );\n }\n });\n }\n\n createPresence() {\n return new Presence({\n localPeerId: this.deviceKey,\n announceInterval: 30,\n offlineTimeout: 200,\n identityKey: this.identityKey\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 { DatabaseBackendProxy, 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 { DatabaseBackendHost, DataServiceHost, DataServiceImpl, DataServiceSubscriptions } from '../dbhost';\nimport { DataPipelineControllerImpl } from '../space';\n\nexport const createMemoryDatabase = async (modelFactory: ModelFactory) => {\n const feed = new MockFeedWriter<DataMessage>();\n const backend = new DatabaseBackendHost(feed, undefined, { snapshots: true });\n\n feed.written.on(([data, meta]) =>\n backend.echoProcessor({\n data: data.object,\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 DatabaseBackendProxy(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 (\n create: DataPipelineControllerImpl,\n check: DataPipelineControllerImpl = create\n) => {\n const objectId = PublicKey.random().toHex();\n await create.databaseBackend!.getWriteStream()?.write({\n object: {\n objectId,\n genesis: {\n modelType: DocumentModel.meta.type\n }\n }\n });\n\n await asyncTimeout(\n check._itemManager.update.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", "Presence", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "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", "DataPipelineControllerImpl", "modelFactory", "ModelFactory", "registerModel", "DocumentModel", "memberKey", "feedInfoProvider", "feedKey", "spaceState", "feeds", "snapshotId", "undefined", "Space", "protocol", "createSpaceProtocol", "feedProvider", "setControlFeed", "setDataFeed", "open", "initDataPipeline", "topic", "presence", "SpaceProtocol", "swarmIdentity", "peerKey", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "onSessionAuth", "session", "addExtension", "createPresence", "createExtension", "remotePeerId", "Presence", "localPeerId", "announceInterval", "offlineTimeout", "asyncTimeout", "DocumentModel", "DatabaseBackendProxy", "ItemManager", "MockFeedWriter", "PublicKey", "ModelFactory", "Timeframe", "createMemoryDatabase", "modelFactory", "feed", "MockFeedWriter", "backend", "DatabaseBackendHost", "undefined", "snapshots", "written", "on", "data", "meta", "echoProcessor", "object", "memberKey", "PublicKey", "random", "timeframe", "Timeframe", "feedKey", "seq", "itemManager", "ItemManager", "open", "ModelFactory", "registerModel", "DocumentModel", "createRemoteDatabaseFromDataServiceHost", "dataServiceHost", "dataServiceSubscriptions", "DataServiceSubscriptions", "dataService", "DataServiceImpl", "spaceKey", "registerSpace", "DatabaseBackendProxy", "testLocalDatabase", "create", "check", "objectId", "toHex", "databaseBackend", "getWriteStream", "write", "genesis", "modelType", "type", "asyncTimeout", "_itemManager", "update", "waitForCondition", "entities", "has"]
7
+ }