@dxos/client-services 0.1.30-next.7c60cd3 → 0.1.30

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 (161) hide show
  1. package/dist/lib/browser/{chunk-JLLUQQXD.mjs → chunk-DFO3FW2W.mjs} +949 -1150
  2. package/dist/lib/browser/chunk-DFO3FW2W.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +5 -41
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/packlets/testing/index.mjs +221 -50
  6. package/dist/lib/browser/packlets/testing/index.mjs.map +4 -4
  7. package/dist/lib/node/index.cjs +837 -1062
  8. package/dist/lib/node/index.cjs.map +4 -4
  9. package/dist/lib/node/meta.json +1 -1
  10. package/dist/lib/node/packlets/testing/index.cjs +2937 -2719
  11. package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
  12. package/dist/types/src/packlets/invitations/device-invitations-handler.d.ts +1 -2
  13. package/dist/types/src/packlets/invitations/device-invitations-handler.d.ts.map +1 -1
  14. package/dist/types/src/packlets/invitations/device-invitations-service.d.ts +1 -1
  15. package/dist/types/src/packlets/invitations/device-invitations-service.d.ts.map +1 -1
  16. package/dist/types/src/packlets/invitations/index.d.ts +0 -6
  17. package/dist/types/src/packlets/invitations/index.d.ts.map +1 -1
  18. package/dist/types/src/packlets/invitations/invitations-service.d.ts +2 -3
  19. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  20. package/dist/types/src/packlets/invitations/space-invitations-handler.d.ts +2 -4
  21. package/dist/types/src/packlets/invitations/space-invitations-handler.d.ts.map +1 -1
  22. package/dist/types/src/packlets/invitations/space-invitations-service.d.ts +2 -3
  23. package/dist/types/src/packlets/invitations/space-invitations-service.d.ts.map +1 -1
  24. package/dist/types/src/packlets/services/client-rpc-server.d.ts +22 -0
  25. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -0
  26. package/dist/types/src/packlets/services/index.d.ts +2 -3
  27. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  28. package/dist/types/src/packlets/services/local-client-services.d.ts +3 -2
  29. package/dist/types/src/packlets/services/local-client-services.d.ts.map +1 -1
  30. package/dist/types/src/packlets/services/service-context.d.ts +1 -1
  31. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  32. package/dist/types/src/packlets/services/service-host.d.ts +22 -8
  33. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  34. package/dist/types/src/packlets/services/service-registry.d.ts +3 -1
  35. package/dist/types/src/packlets/services/service-registry.d.ts.map +1 -1
  36. package/dist/types/src/packlets/services/utils.d.ts +7 -0
  37. package/dist/types/src/packlets/services/utils.d.ts.map +1 -0
  38. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  39. package/dist/types/src/packlets/spaces/data-space.d.ts +8 -1
  40. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  41. package/dist/types/src/packlets/spaces/index.d.ts +2 -0
  42. package/dist/types/src/packlets/spaces/index.d.ts.map +1 -1
  43. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  44. package/dist/types/src/packlets/spaces/spaces-service.d.ts +4 -1
  45. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  46. package/dist/types/src/packlets/system/system-service.d.ts +2 -2
  47. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  48. package/dist/types/src/packlets/testing/host-test-builder.d.ts +43 -0
  49. package/dist/types/src/packlets/testing/host-test-builder.d.ts.map +1 -0
  50. package/dist/types/src/packlets/testing/index.d.ts +1 -0
  51. package/dist/types/src/packlets/testing/index.d.ts.map +1 -1
  52. package/dist/types/src/packlets/testing/invitation-utils.d.ts +1 -1
  53. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  54. package/dist/types/src/packlets/testing/test-builder.d.ts +32 -34
  55. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  56. package/dist/types/src/packlets/tests/client-services.test.d.ts +2 -0
  57. package/dist/types/src/packlets/tests/client-services.test.d.ts.map +1 -0
  58. package/dist/types/src/packlets/tests/client.test.d.ts +2 -0
  59. package/dist/types/src/packlets/tests/client.test.d.ts.map +1 -0
  60. package/dist/types/src/packlets/tests/halo-credentials.test.d.ts +2 -0
  61. package/dist/types/src/packlets/tests/halo-credentials.test.d.ts.map +1 -0
  62. package/dist/types/src/packlets/tests/halo-persistent.test.d.ts +2 -0
  63. package/dist/types/src/packlets/tests/halo-persistent.test.d.ts.map +1 -0
  64. package/dist/types/src/packlets/tests/halo-profile.test.d.ts +2 -0
  65. package/dist/types/src/packlets/tests/halo-profile.test.d.ts.map +1 -0
  66. package/dist/types/src/packlets/tests/shared-worker.test.d.ts +2 -0
  67. package/dist/types/src/packlets/tests/shared-worker.test.d.ts.map +1 -0
  68. package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts +2 -0
  69. package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts.map +1 -0
  70. package/dist/types/src/packlets/tests/spaces.test.d.ts +2 -0
  71. package/dist/types/src/packlets/tests/spaces.test.d.ts.map +1 -0
  72. package/dist/types/src/packlets/tests/text.test.d.ts +2 -0
  73. package/dist/types/src/packlets/tests/text.test.d.ts.map +1 -0
  74. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +0 -1
  75. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
  76. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
  77. package/dist/types/src/packlets/vault/index.d.ts +0 -2
  78. package/dist/types/src/packlets/vault/index.d.ts.map +1 -1
  79. package/dist/types/src/packlets/vault/shell-runtime.d.ts.map +1 -1
  80. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  81. package/dist/types/src/packlets/vault/worker-session.d.ts +4 -4
  82. package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
  83. package/package.json +31 -30
  84. package/src/packlets/invitations/device-invitations-handler.ts +10 -9
  85. package/src/packlets/invitations/device-invitations-service.test.ts +1 -1
  86. package/src/packlets/invitations/device-invitations-service.ts +1 -1
  87. package/src/packlets/invitations/index.ts +0 -6
  88. package/src/packlets/invitations/invitations-service.ts +7 -2
  89. package/src/packlets/invitations/space-invitations-handler.test.ts +3 -3
  90. package/src/packlets/invitations/space-invitations-handler.ts +11 -11
  91. package/src/packlets/invitations/space-invitations-service.test.ts +1 -1
  92. package/src/packlets/invitations/space-invitations-service.ts +2 -3
  93. package/src/packlets/services/client-rpc-server.ts +91 -0
  94. package/src/packlets/services/index.ts +2 -3
  95. package/src/packlets/services/local-client-services.ts +5 -1
  96. package/src/packlets/services/service-context.test.ts +4 -4
  97. package/src/packlets/services/service-context.ts +1 -1
  98. package/src/packlets/services/service-host.ts +52 -19
  99. package/src/packlets/services/service-registry.test.ts +2 -2
  100. package/src/packlets/services/service-registry.ts +9 -1
  101. package/src/packlets/services/utils.ts +53 -0
  102. package/src/packlets/spaces/data-space-manager.test.ts +64 -4
  103. package/src/packlets/spaces/data-space-manager.ts +11 -7
  104. package/src/packlets/spaces/data-space.ts +13 -1
  105. package/src/packlets/spaces/index.ts +2 -0
  106. package/src/packlets/spaces/notarization-plugin.ts +9 -2
  107. package/src/packlets/spaces/spaces-service.ts +25 -0
  108. package/src/packlets/system/system-service.ts +3 -3
  109. package/src/packlets/testing/host-test-builder.ts +163 -0
  110. package/src/packlets/testing/index.ts +1 -0
  111. package/src/packlets/testing/invitation-utils.ts +1 -2
  112. package/src/packlets/testing/test-builder.ts +156 -138
  113. package/src/packlets/tests/client-services.test.ts +252 -0
  114. package/src/packlets/tests/client.test.ts +143 -0
  115. package/src/packlets/tests/halo-credentials.test.ts +94 -0
  116. package/src/packlets/tests/halo-persistent.test.ts +53 -0
  117. package/src/packlets/tests/halo-profile.test.ts +74 -0
  118. package/src/packlets/tests/shared-worker.test.ts +93 -0
  119. package/src/packlets/tests/spaces-invitations.test.ts +64 -0
  120. package/src/packlets/tests/spaces.test.ts +136 -0
  121. package/src/packlets/tests/text.test.ts +206 -0
  122. package/src/packlets/vault/iframe-host-runtime.ts +26 -34
  123. package/src/packlets/vault/iframe-proxy-runtime.ts +1 -1
  124. package/src/packlets/vault/index.ts +0 -2
  125. package/src/packlets/vault/shell-runtime.ts +1 -2
  126. package/src/packlets/vault/worker-runtime.ts +5 -15
  127. package/src/packlets/vault/worker-session.ts +39 -23
  128. package/dist/lib/browser/chunk-JLLUQQXD.mjs.map +0 -7
  129. package/dist/types/src/packlets/invitations/device-invitations-proxy.d.ts +0 -8
  130. package/dist/types/src/packlets/invitations/device-invitations-proxy.d.ts.map +0 -1
  131. package/dist/types/src/packlets/invitations/encoder.d.ts +0 -9
  132. package/dist/types/src/packlets/invitations/encoder.d.ts.map +0 -1
  133. package/dist/types/src/packlets/invitations/encoder.test.d.ts +0 -2
  134. package/dist/types/src/packlets/invitations/encoder.test.d.ts.map +0 -1
  135. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +0 -56
  136. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +0 -1
  137. package/dist/types/src/packlets/invitations/invitations-proxy.d.ts +0 -18
  138. package/dist/types/src/packlets/invitations/invitations-proxy.d.ts.map +0 -1
  139. package/dist/types/src/packlets/invitations/invitations.d.ts +0 -55
  140. package/dist/types/src/packlets/invitations/invitations.d.ts.map +0 -1
  141. package/dist/types/src/packlets/invitations/space-invitations-proxy.d.ts +0 -11
  142. package/dist/types/src/packlets/invitations/space-invitations-proxy.d.ts.map +0 -1
  143. package/dist/types/src/packlets/services/service-definitions.d.ts +0 -30
  144. package/dist/types/src/packlets/services/service-definitions.d.ts.map +0 -1
  145. package/dist/types/src/packlets/services/service-proxy.d.ts +0 -17
  146. package/dist/types/src/packlets/services/service-proxy.d.ts.map +0 -1
  147. package/dist/types/src/packlets/vault/services.d.ts +0 -21
  148. package/dist/types/src/packlets/vault/services.d.ts.map +0 -1
  149. package/dist/types/src/packlets/vault/shell-controller.d.ts +0 -18
  150. package/dist/types/src/packlets/vault/shell-controller.d.ts.map +0 -1
  151. package/src/packlets/invitations/device-invitations-proxy.ts +0 -14
  152. package/src/packlets/invitations/encoder.test.ts +0 -23
  153. package/src/packlets/invitations/encoder.ts +0 -26
  154. package/src/packlets/invitations/invitations-handler.ts +0 -68
  155. package/src/packlets/invitations/invitations-proxy.ts +0 -159
  156. package/src/packlets/invitations/invitations.ts +0 -113
  157. package/src/packlets/invitations/space-invitations-proxy.ts +0 -16
  158. package/src/packlets/services/service-definitions.ts +0 -68
  159. package/src/packlets/services/service-proxy.ts +0 -54
  160. package/src/packlets/vault/services.ts +0 -42
  161. package/src/packlets/vault/shell-controller.ts +0 -56
@@ -1,9 +1,9 @@
1
1
  import "@dxos/node-std/globals"
2
2
  import {
3
3
  ClientServicesHost,
4
- ServiceContext,
5
- createDefaultModelFactory
6
- } from "../../chunk-JLLUQQXD.mjs";
4
+ LocalClientServices,
5
+ ServiceContext
6
+ } from "../../chunk-DFO3FW2W.mjs";
7
7
 
8
8
  // packages/sdk/client-services/src/packlets/testing/credential-utils.ts
9
9
  import { createCredential } from "@dxos/credentials";
@@ -21,50 +21,8 @@ var createMockCredential = async ({ signer, issuer }) => createCredential({
21
21
  }
22
22
  });
23
23
 
24
- // packages/sdk/client-services/src/packlets/testing/invitation-utils.ts
25
- import assert from "@dxos/node-std/assert";
26
- import { Trigger } from "@dxos/async";
27
- import { raise } from "@dxos/debug";
28
- import { Invitation } from "@dxos/protocols/proto/dxos/client/services";
29
- var performInvitation = async (host, guest, context) => {
30
- const done1 = new Trigger();
31
- const done2 = new Trigger();
32
- const observable1 = await host.createInvitation(context, {
33
- type: Invitation.Type.INTERACTIVE_TESTING
34
- });
35
- observable1.subscribe({
36
- onConnecting: async (invitation1) => {
37
- const observable2 = await guest.acceptInvitation(invitation1, {
38
- type: Invitation.Type.INTERACTIVE_TESTING
39
- });
40
- observable2.subscribe({
41
- onConnecting: async (invitation2) => {
42
- assert(invitation1.swarmKey.equals(invitation2.swarmKey));
43
- },
44
- onConnected: async (invitation2) => {
45
- },
46
- onSuccess: (invitation) => {
47
- done2.wake(invitation);
48
- },
49
- onCancelled: () => raise(new Error()),
50
- onTimeout: (err) => raise(err),
51
- onError: (err) => raise(err)
52
- });
53
- },
54
- onConnected: async (invitation1) => {
55
- },
56
- onCancelled: () => raise(new Error("cancelled")),
57
- onSuccess: (invitation) => {
58
- done1.wake(invitation);
59
- },
60
- onTimeout: (err) => raise(err),
61
- onError: (err) => raise(err)
62
- });
63
- await done1.wait();
64
- await done2.wait();
65
- };
66
-
67
- // packages/sdk/client-services/src/packlets/testing/test-builder.ts
24
+ // packages/sdk/client-services/src/packlets/testing/host-test-builder.ts
25
+ import { createDefaultModelFactory } from "@dxos/client";
68
26
  import { createCredentialSignerWithChain, CredentialGenerator } from "@dxos/credentials";
69
27
  import { SnapshotStore, MetadataStore, SpaceManager, valueEncoding } from "@dxos/echo-pipeline";
70
28
  import { testLocalDatabase } from "@dxos/echo-pipeline/testing";
@@ -107,11 +65,11 @@ var createIdentity = async (peer) => {
107
65
  await peer.createIdentity();
108
66
  return peer;
109
67
  };
110
- var syncItems = async (db1, db2) => {
68
+ var syncItemsLocal = async (db1, db2) => {
111
69
  await testLocalDatabase(db1, db2);
112
70
  await testLocalDatabase(db2, db1);
113
71
  };
114
- var TestBuilder = class {
72
+ var HostTestBuilder = class {
115
73
  constructor() {
116
74
  this.signalContext = new MemorySignalManagerContext();
117
75
  }
@@ -183,7 +141,216 @@ var createSigningContext = async (keyring) => {
183
141
  // No-op.
184
142
  };
185
143
  };
144
+
145
+ // packages/sdk/client-services/src/packlets/testing/invitation-utils.ts
146
+ import assert from "@dxos/node-std/assert";
147
+ import { Trigger } from "@dxos/async";
148
+ import { raise } from "@dxos/debug";
149
+ import { Invitation } from "@dxos/protocols/proto/dxos/client/services";
150
+ var performInvitation = async (host, guest, context) => {
151
+ const done1 = new Trigger();
152
+ const done2 = new Trigger();
153
+ const observable1 = await host.createInvitation(context, {
154
+ type: Invitation.Type.INTERACTIVE_TESTING
155
+ });
156
+ observable1.subscribe({
157
+ onConnecting: async (invitation1) => {
158
+ const observable2 = await guest.acceptInvitation(invitation1, {
159
+ type: Invitation.Type.INTERACTIVE_TESTING
160
+ });
161
+ observable2.subscribe({
162
+ onConnecting: async (invitation2) => {
163
+ assert(invitation1.swarmKey.equals(invitation2.swarmKey));
164
+ },
165
+ onConnected: async (invitation2) => {
166
+ },
167
+ onSuccess: (invitation) => {
168
+ done2.wake(invitation);
169
+ },
170
+ onCancelled: () => raise(new Error()),
171
+ onTimeout: (err) => raise(err),
172
+ onError: (err) => raise(err)
173
+ });
174
+ },
175
+ onConnected: async (invitation1) => {
176
+ },
177
+ onCancelled: () => raise(new Error("cancelled")),
178
+ onSuccess: (invitation) => {
179
+ done1.wake(invitation);
180
+ },
181
+ onTimeout: (err) => raise(err),
182
+ onError: (err) => raise(err)
183
+ });
184
+ await done1.wait();
185
+ await done2.wait();
186
+ };
187
+
188
+ // packages/sdk/client-services/src/packlets/testing/test-builder.ts
189
+ import assert2 from "@dxos/node-std/assert";
190
+ import { asyncTimeout, Trigger as Trigger2 } from "@dxos/async";
191
+ import { Client, ClientServicesProxy, createDefaultModelFactory as createDefaultModelFactory2, Invitation as Invitation2 } from "@dxos/client";
192
+ import { Config } from "@dxos/config";
193
+ import { raise as raise2 } from "@dxos/debug";
194
+ import { DocumentModel } from "@dxos/document-model";
195
+ import { genesisMutation } from "@dxos/echo-db";
196
+ import { PublicKey as PublicKey2 } from "@dxos/keys";
197
+ import { log } from "@dxos/log";
198
+ import { MemorySignalManager as MemorySignalManager2, MemorySignalManagerContext as MemorySignalManagerContext2, WebsocketSignalManager } from "@dxos/messaging";
199
+ import { createWebRTCTransportFactory, MemoryTransportFactory as MemoryTransportFactory2, NetworkManager as NetworkManager2 } from "@dxos/network-manager";
200
+ import { createLinkedPorts, createProtoRpcPeer } from "@dxos/rpc";
201
+ var testConfigWithLocalSignal = new Config({
202
+ version: 1,
203
+ runtime: {
204
+ services: {
205
+ signal: {
206
+ // TODO(burdon): Port numbers and global consts?
207
+ server: "ws://localhost:4000/.well-known/dx/signal"
208
+ }
209
+ }
210
+ }
211
+ });
212
+ var TestBuilder = class {
213
+ // prettier-ignore
214
+ constructor(config, _modelFactory = createDefaultModelFactory2(), _signalManagerContext = new MemorySignalManagerContext2()) {
215
+ this._modelFactory = _modelFactory;
216
+ this._signalManagerContext = _signalManagerContext;
217
+ this._config = config != null ? config : new Config();
218
+ }
219
+ get config() {
220
+ return this._config;
221
+ }
222
+ /**
223
+ * Get network manager using local shared memory or remote signal manager.
224
+ */
225
+ get networkManager() {
226
+ const signalServer = this._config.get("runtime.services.signal.server");
227
+ if (signalServer) {
228
+ return new NetworkManager2({
229
+ log: true,
230
+ signalManager: new WebsocketSignalManager([
231
+ signalServer
232
+ ]),
233
+ transportFactory: createWebRTCTransportFactory({
234
+ iceServers: this._config.get("runtime.services.ice")
235
+ })
236
+ });
237
+ }
238
+ return new NetworkManager2({
239
+ log: true,
240
+ signalManager: new MemorySignalManager2(this._signalManagerContext),
241
+ transportFactory: MemoryTransportFactory2
242
+ });
243
+ }
244
+ /**
245
+ * Create backend service handlers.
246
+ */
247
+ createClientServicesHost() {
248
+ return new ClientServicesHost({
249
+ config: this._config,
250
+ modelFactory: this._modelFactory,
251
+ networkManager: this.networkManager,
252
+ storage: this.storage
253
+ });
254
+ }
255
+ /**
256
+ * Create local services host.
257
+ */
258
+ createLocal() {
259
+ return new LocalClientServices({
260
+ config: this._config,
261
+ modelFactory: this._modelFactory,
262
+ networkManager: this.networkManager,
263
+ storage: this.storage
264
+ });
265
+ }
266
+ /**
267
+ * Create client/server.
268
+ */
269
+ createClientServer(host = this.createClientServicesHost()) {
270
+ const [proxyPort, hostPort] = createLinkedPorts();
271
+ const server = createProtoRpcPeer({
272
+ exposed: host.descriptors,
273
+ handlers: host.services,
274
+ port: hostPort
275
+ });
276
+ const client = new Client({
277
+ services: new ClientServicesProxy(proxyPort)
278
+ });
279
+ return [
280
+ client,
281
+ server
282
+ ];
283
+ }
284
+ };
285
+ var testSpace = async (create, check = create) => {
286
+ const objectId = PublicKey2.random().toHex();
287
+ const result = create.mutate(genesisMutation(objectId, DocumentModel.meta.type));
288
+ await result.batch.getReceipt();
289
+ assert2(create._itemManager.entities.has(result.objectsUpdated[0].id));
290
+ await asyncTimeout(check.itemUpdate.waitForCondition(() => check._itemManager.entities.has(objectId)), 1e3);
291
+ return result;
292
+ };
293
+ var syncItems = async (db1, db2) => {
294
+ await testSpace(db1, db2);
295
+ await testSpace(db2, db1);
296
+ };
297
+ var joinCommonSpace = async ([initialPeer, ...peers], spaceKey) => {
298
+ const rootSpace = spaceKey ? initialPeer.echo.getSpace(spaceKey) : await initialPeer.echo.createSpace();
299
+ assert2(rootSpace, "Space not found.");
300
+ await Promise.all(peers.map(async (peer) => {
301
+ const hostDone = new Trigger2();
302
+ const guestDone = new Trigger2();
303
+ const hostObservabli = rootSpace.createInvitation({
304
+ type: Invitation2.Type.INTERACTIVE_TESTING
305
+ });
306
+ log("invitation created", {}, {
307
+ file: "test-builder.ts",
308
+ line: 154,
309
+ scope: void 0,
310
+ callSite: (f, a) => f(...a)
311
+ });
312
+ hostObservabli.subscribe({
313
+ onConnecting: (invitation) => {
314
+ const guestObservable = peer.echo.acceptInvitation(invitation);
315
+ log("invitation accepted", {}, {
316
+ file: "test-builder.ts",
317
+ line: 158,
318
+ scope: void 0,
319
+ callSite: (f, a) => f(...a)
320
+ });
321
+ guestObservable.subscribe({
322
+ onSuccess: (invitation2) => {
323
+ guestDone.wake(invitation2);
324
+ log("invitation guestDone", {}, {
325
+ file: "test-builder.ts",
326
+ line: 163,
327
+ scope: void 0,
328
+ callSite: (f, a) => f(...a)
329
+ });
330
+ },
331
+ onError: (err) => raise2(err)
332
+ });
333
+ },
334
+ onSuccess: (invitation) => {
335
+ hostDone.wake(invitation);
336
+ log("invitation hostDone", {}, {
337
+ file: "test-builder.ts",
338
+ line: 170,
339
+ scope: void 0,
340
+ callSite: (f, a) => f(...a)
341
+ });
342
+ },
343
+ onError: (err) => raise2(err)
344
+ });
345
+ await Promise.all([
346
+ hostDone.wait(),
347
+ guestDone.wait()
348
+ ]);
349
+ }));
350
+ return rootSpace.key;
351
+ };
186
352
  export {
353
+ HostTestBuilder,
187
354
  TestBuilder,
188
355
  TestPeer,
189
356
  createIdentity,
@@ -192,7 +359,11 @@ export {
192
359
  createServiceContext,
193
360
  createServiceHost,
194
361
  createSigningContext,
362
+ joinCommonSpace,
195
363
  performInvitation,
196
- syncItems
364
+ syncItems,
365
+ syncItemsLocal,
366
+ testConfigWithLocalSignal,
367
+ testSpace
197
368
  };
198
369
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../../src/packlets/testing/credential-utils.ts", "../../../../../src/packlets/testing/invitation-utils.ts", "../../../../../src/packlets/testing/test-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { createCredential } from '@dxos/credentials';\nimport { Signer } from '@dxos/crypto';\nimport { PublicKey } from '@dxos/keys';\nimport { Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nexport const createMockCredential = async ({\n signer,\n issuer\n}: {\n signer: Signer;\n issuer: PublicKey;\n}): Promise<Credential> =>\n createCredential({\n signer,\n issuer,\n subject: new PublicKey(Buffer.from('test')),\n assertion: {\n '@type': 'example.testing.rpc.MessageWithAny',\n payload: {\n '@type': 'google.protobuf.Any',\n value: Buffer.from('test')\n }\n }\n });\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport assert from 'node:assert';\n\nimport { Trigger } from '@dxos/async';\nimport { raise } from '@dxos/debug';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\n\nimport { InvitationsHandler } from '../invitations';\n\nexport const performInvitation = async <T>(host: InvitationsHandler<T>, guest: InvitationsHandler<T>, context: T) => {\n const done1 = new Trigger<Invitation>(); // peer 1 connected.\n const done2 = new Trigger<Invitation>(); // peer 2 connected.\n const observable1 = await host.createInvitation(context, { type: Invitation.Type.INTERACTIVE_TESTING });\n observable1.subscribe({\n onConnecting: async (invitation1: Invitation) => {\n const observable2 = await guest.acceptInvitation(invitation1, { type: Invitation.Type.INTERACTIVE_TESTING });\n observable2.subscribe({\n onConnecting: async (invitation2: Invitation) => {\n assert(invitation1.swarmKey!.equals(invitation2.swarmKey!));\n },\n onConnected: async (invitation2: Invitation) => {},\n onSuccess: (invitation) => {\n done2.wake(invitation);\n },\n onCancelled: () => raise(new Error()),\n onTimeout: (err: Error) => raise(err),\n onError: (err: Error) => raise(err)\n });\n },\n onConnected: async (invitation1: Invitation) => {},\n onCancelled: () => raise(new Error('cancelled')),\n onSuccess: (invitation) => {\n done1.wake(invitation);\n },\n onTimeout: (err: Error) => raise(err),\n onError: (err: Error) => raise(err)\n });\n\n await done1.wait();\n await done2.wait();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Config } from '@dxos/config';\nimport { createCredentialSignerWithChain, CredentialGenerator } from '@dxos/credentials';\nimport {\n SnapshotStore,\n DataPipelineControllerImpl,\n MetadataStore,\n SigningContext,\n SpaceManager,\n valueEncoding\n} from '@dxos/echo-pipeline';\nimport { testLocalDatabase } from '@dxos/echo-pipeline/testing';\nimport { FeedFactory, FeedStore } from '@dxos/feed-store';\nimport { Keyring } from '@dxos/keyring';\nimport { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';\nimport { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport { createStorage, Storage, StorageType } from '@dxos/random-access-storage';\n\nimport { createDefaultModelFactory, ClientServicesHost, ServiceContext } from '../services';\n\n//\n// TODO(burdon): Replace with test builder.\n//\n\nexport const createServiceHost = (config: Config, signalManagerContext: MemorySignalManagerContext) => {\n const networkManager = new NetworkManager({\n signalManager: new MemorySignalManager(signalManagerContext),\n transportFactory: MemoryTransportFactory\n });\n\n return new ClientServicesHost({\n config,\n networkManager\n });\n};\n\nexport const createServiceContext = ({\n signalContext = new MemorySignalManagerContext(),\n storage = createStorage({ type: StorageType.RAM })\n}: {\n signalContext?: MemorySignalManagerContext;\n storage?: Storage;\n} = {}) => {\n const networkManager = new NetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory\n });\n\n const modelFactory = createDefaultModelFactory();\n return new ServiceContext(storage, networkManager, modelFactory);\n};\n\nexport const createPeers = async (numPeers: number) => {\n const signalContext = new MemorySignalManagerContext();\n\n return await Promise.all(\n Array.from(Array(numPeers)).map(async () => {\n const peer = createServiceContext({ signalContext });\n await peer.open();\n return peer;\n })\n );\n};\n\nexport const createIdentity = async (peer: ServiceContext) => {\n await peer.createIdentity();\n return peer;\n};\n\n// TODO(burdon): Remove @dxos/client-testing.\n// TODO(burdon): Create builder and make configurable.\nexport const syncItems = async (db1: DataPipelineControllerImpl, db2: DataPipelineControllerImpl) => {\n await testLocalDatabase(db1, db2);\n await testLocalDatabase(db2, db1);\n};\n\nexport class TestBuilder {\n public readonly signalContext = new MemorySignalManagerContext();\n\n createPeer(): TestPeer {\n return new TestPeer(this.signalContext);\n }\n}\n\nexport type TestPeerProps = {\n storage?: Storage;\n feedStore?: FeedStore<any>;\n metadataStore?: MetadataStore;\n keyring?: Keyring;\n networkManager?: NetworkManager;\n spaceManager?: SpaceManager;\n snapshotStore?: SnapshotStore;\n};\n\nexport class TestPeer {\n private _props: TestPeerProps = {};\n\n constructor(private readonly signalContext: MemorySignalManagerContext) {}\n\n get storage() {\n return (this._props.storage ??= createStorage({ type: StorageType.RAM }));\n }\n\n get keyring() {\n return (this._props.keyring ??= new Keyring(this.storage.createDirectory('keyring')));\n }\n\n get feedStore() {\n return (this._props.feedStore ??= new FeedStore({\n factory: new FeedFactory({\n root: this.storage.createDirectory('feeds'),\n signer: this.keyring,\n hypercore: {\n valueEncoding\n }\n })\n }));\n }\n\n get metadataStore() {\n return (this._props.metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));\n }\n\n get snapshotStore() {\n return (this._props.snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));\n }\n\n get networkManager() {\n return (this._props.networkManager ??= new NetworkManager({\n signalManager: new MemorySignalManager(this.signalContext),\n transportFactory: MemoryTransportFactory\n }));\n }\n\n get spaceManager() {\n return (this._props.spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this.networkManager\n }));\n }\n}\n\nexport const createSigningContext = async (keyring: Keyring): Promise<SigningContext> => {\n const identityKey = await keyring.createKey();\n const deviceKey = await keyring.createKey();\n\n return {\n identityKey,\n deviceKey,\n credentialSigner: createCredentialSignerWithChain(\n keyring,\n {\n credential: await new CredentialGenerator(keyring, identityKey, deviceKey).createDeviceAuthorization(deviceKey)\n },\n deviceKey\n ),\n recordCredential: async () => {} // No-op.\n };\n};\n"],
5
- "mappings": "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",
6
- "names": ["createCredential", "PublicKey", "createMockCredential", "signer", "issuer", "subject", "Buffer", "from", "assertion", "payload", "value", "assert", "Trigger", "raise", "Invitation", "performInvitation", "host", "guest", "context", "done1", "done2", "observable1", "createInvitation", "type", "Type", "INTERACTIVE_TESTING", "subscribe", "onConnecting", "invitation1", "observable2", "acceptInvitation", "invitation2", "swarmKey", "equals", "onConnected", "onSuccess", "invitation", "wake", "onCancelled", "Error", "onTimeout", "err", "onError", "wait", "createCredentialSignerWithChain", "CredentialGenerator", "SnapshotStore", "MetadataStore", "SpaceManager", "valueEncoding", "testLocalDatabase", "FeedFactory", "FeedStore", "Keyring", "MemorySignalManager", "MemorySignalManagerContext", "MemoryTransportFactory", "NetworkManager", "createStorage", "StorageType", "createServiceHost", "config", "signalManagerContext", "networkManager", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "ClientServicesHost", "createServiceContext", "signalContext", "MemorySignalManagerContext", "storage", "createStorage", "type", "StorageType", "RAM", "modelFactory", "createDefaultModelFactory", "ServiceContext", "createPeers", "numPeers", "Promise", "all", "Array", "from", "map", "peer", "open", "createIdentity", "syncItems", "db1", "db2", "testLocalDatabase", "TestBuilder", "createPeer", "TestPeer", "constructor", "_props", "keyring", "Keyring", "createDirectory", "feedStore", "FeedStore", "factory", "FeedFactory", "root", "signer", "hypercore", "valueEncoding", "metadataStore", "MetadataStore", "snapshotStore", "SnapshotStore", "spaceManager", "SpaceManager", "createSigningContext", "identityKey", "createKey", "deviceKey", "credentialSigner", "createCredentialSignerWithChain", "credential", "CredentialGenerator", "createDeviceAuthorization", "recordCredential"]
3
+ "sources": ["../../../../../src/packlets/testing/credential-utils.ts", "../../../../../src/packlets/testing/host-test-builder.ts", "../../../../../src/packlets/testing/invitation-utils.ts", "../../../../../src/packlets/testing/test-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { createCredential } from '@dxos/credentials';\nimport { Signer } from '@dxos/crypto';\nimport { PublicKey } from '@dxos/keys';\nimport { Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nexport const createMockCredential = async ({\n signer,\n issuer\n}: {\n signer: Signer;\n issuer: PublicKey;\n}): Promise<Credential> =>\n createCredential({\n signer,\n issuer,\n subject: new PublicKey(Buffer.from('test')),\n assertion: {\n '@type': 'example.testing.rpc.MessageWithAny',\n payload: {\n '@type': 'google.protobuf.Any',\n value: Buffer.from('test')\n }\n }\n });\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { createDefaultModelFactory } from '@dxos/client';\nimport { Config } from '@dxos/config';\nimport { createCredentialSignerWithChain, CredentialGenerator } from '@dxos/credentials';\nimport {\n SnapshotStore,\n DataPipelineControllerImpl,\n MetadataStore,\n SigningContext,\n SpaceManager,\n valueEncoding\n} from '@dxos/echo-pipeline';\nimport { testLocalDatabase } from '@dxos/echo-pipeline/testing';\nimport { FeedFactory, FeedStore } from '@dxos/feed-store';\nimport { Keyring } from '@dxos/keyring';\nimport { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';\nimport { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport { createStorage, Storage, StorageType } from '@dxos/random-access-storage';\n\nimport { ClientServicesHost, ServiceContext } from '../services';\n\n//\n// TODO(burdon): Replace with test builder.\n//\n\nexport const createServiceHost = (config: Config, signalManagerContext: MemorySignalManagerContext) => {\n const networkManager = new NetworkManager({\n signalManager: new MemorySignalManager(signalManagerContext),\n transportFactory: MemoryTransportFactory\n });\n\n return new ClientServicesHost({\n config,\n networkManager\n });\n};\n\nexport const createServiceContext = ({\n signalContext = new MemorySignalManagerContext(),\n storage = createStorage({ type: StorageType.RAM })\n}: {\n signalContext?: MemorySignalManagerContext;\n storage?: Storage;\n} = {}) => {\n const networkManager = new NetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory\n });\n\n const modelFactory = createDefaultModelFactory();\n return new ServiceContext(storage, networkManager, modelFactory);\n};\n\nexport const createPeers = async (numPeers: number) => {\n const signalContext = new MemorySignalManagerContext();\n\n return await Promise.all(\n Array.from(Array(numPeers)).map(async () => {\n const peer = createServiceContext({ signalContext });\n await peer.open();\n return peer;\n })\n );\n};\n\nexport const createIdentity = async (peer: ServiceContext) => {\n await peer.createIdentity();\n return peer;\n};\n\n// TODO(burdon): Remove @dxos/client-testing.\n// TODO(burdon): Create builder and make configurable.\nexport const syncItemsLocal = async (db1: DataPipelineControllerImpl, db2: DataPipelineControllerImpl) => {\n await testLocalDatabase(db1, db2);\n await testLocalDatabase(db2, db1);\n};\n\nexport class HostTestBuilder {\n public readonly signalContext = new MemorySignalManagerContext();\n\n createPeer(): TestPeer {\n return new TestPeer(this.signalContext);\n }\n}\n\nexport type TestPeerProps = {\n storage?: Storage;\n feedStore?: FeedStore<any>;\n metadataStore?: MetadataStore;\n keyring?: Keyring;\n networkManager?: NetworkManager;\n spaceManager?: SpaceManager;\n snapshotStore?: SnapshotStore;\n};\n\nexport class TestPeer {\n private _props: TestPeerProps = {};\n\n constructor(private readonly signalContext: MemorySignalManagerContext) {}\n\n get storage() {\n return (this._props.storage ??= createStorage({ type: StorageType.RAM }));\n }\n\n get keyring() {\n return (this._props.keyring ??= new Keyring(this.storage.createDirectory('keyring')));\n }\n\n get feedStore() {\n return (this._props.feedStore ??= new FeedStore({\n factory: new FeedFactory({\n root: this.storage.createDirectory('feeds'),\n signer: this.keyring,\n hypercore: {\n valueEncoding\n }\n })\n }));\n }\n\n get metadataStore() {\n return (this._props.metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));\n }\n\n get snapshotStore() {\n return (this._props.snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));\n }\n\n get networkManager() {\n return (this._props.networkManager ??= new NetworkManager({\n signalManager: new MemorySignalManager(this.signalContext),\n transportFactory: MemoryTransportFactory\n }));\n }\n\n get spaceManager() {\n return (this._props.spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this.networkManager\n }));\n }\n}\n\nexport const createSigningContext = async (keyring: Keyring): Promise<SigningContext> => {\n const identityKey = await keyring.createKey();\n const deviceKey = await keyring.createKey();\n\n return {\n identityKey,\n deviceKey,\n credentialSigner: createCredentialSignerWithChain(\n keyring,\n {\n credential: await new CredentialGenerator(keyring, identityKey, deviceKey).createDeviceAuthorization(deviceKey)\n },\n deviceKey\n ),\n recordCredential: async () => {} // No-op.\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport assert from 'node:assert';\n\nimport { Trigger } from '@dxos/async';\nimport { InvitationsHandler } from '@dxos/client';\nimport { raise } from '@dxos/debug';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\n\nexport const performInvitation = async <T>(host: InvitationsHandler<T>, guest: InvitationsHandler<T>, context: T) => {\n const done1 = new Trigger<Invitation>(); // peer 1 connected.\n const done2 = new Trigger<Invitation>(); // peer 2 connected.\n const observable1 = await host.createInvitation(context, { type: Invitation.Type.INTERACTIVE_TESTING });\n observable1.subscribe({\n onConnecting: async (invitation1: Invitation) => {\n const observable2 = await guest.acceptInvitation(invitation1, { type: Invitation.Type.INTERACTIVE_TESTING });\n observable2.subscribe({\n onConnecting: async (invitation2: Invitation) => {\n assert(invitation1.swarmKey!.equals(invitation2.swarmKey!));\n },\n onConnected: async (invitation2: Invitation) => {},\n onSuccess: (invitation) => {\n done2.wake(invitation);\n },\n onCancelled: () => raise(new Error()),\n onTimeout: (err: Error) => raise(err),\n onError: (err: Error) => raise(err)\n });\n },\n onConnected: async (invitation1: Invitation) => {},\n onCancelled: () => raise(new Error('cancelled')),\n onSuccess: (invitation) => {\n done1.wake(invitation);\n },\n onTimeout: (err: Error) => raise(err),\n onError: (err: Error) => raise(err)\n });\n\n await done1.wait();\n await done2.wait();\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport assert from 'node:assert';\n\nimport { asyncTimeout, Trigger } from '@dxos/async';\nimport { Client, ClientServices, ClientServicesProxy, createDefaultModelFactory, Invitation } from '@dxos/client';\nimport { Config } from '@dxos/config';\nimport { raise } from '@dxos/debug';\nimport { DocumentModel } from '@dxos/document-model';\nimport { DatabaseBackendProxy, genesisMutation } from '@dxos/echo-db';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { createWebRTCTransportFactory, MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport { Storage } from '@dxos/random-access-storage';\nimport { createLinkedPorts, createProtoRpcPeer, ProtoRpcPeer } from '@dxos/rpc';\n\nimport { ClientServicesHost, LocalClientServices } from '../services';\n\nexport const testConfigWithLocalSignal = new Config({\n version: 1,\n runtime: {\n services: {\n signal: {\n // TODO(burdon): Port numbers and global consts?\n server: 'ws://localhost:4000/.well-known/dx/signal'\n }\n }\n }\n});\n\n/**\n * Client builder supports different configurations, incl. signaling, transports, storage.\n */\nexport class TestBuilder {\n private readonly _config: Config;\n\n public storage?: Storage;\n\n // prettier-ignore\n constructor (\n config?: Config,\n private readonly _modelFactory = createDefaultModelFactory(),\n private readonly _signalManagerContext = new MemorySignalManagerContext()\n ) {\n this._config = config ?? new Config();\n }\n\n get config(): Config {\n return this._config;\n }\n\n /**\n * Get network manager using local shared memory or remote signal manager.\n */\n get networkManager() {\n const signalServer = this._config.get('runtime.services.signal.server');\n if (signalServer) {\n return new NetworkManager({\n log: true,\n signalManager: new WebsocketSignalManager([signalServer]),\n transportFactory: createWebRTCTransportFactory({\n iceServers: this._config.get('runtime.services.ice')\n })\n });\n }\n\n // Memory transport with shared context.\n return new NetworkManager({\n log: true,\n signalManager: new MemorySignalManager(this._signalManagerContext),\n transportFactory: MemoryTransportFactory\n });\n }\n\n /**\n * Create backend service handlers.\n */\n createClientServicesHost() {\n return new ClientServicesHost({\n config: this._config,\n modelFactory: this._modelFactory,\n networkManager: this.networkManager,\n storage: this.storage\n });\n }\n\n /**\n * Create local services host.\n */\n createLocal() {\n return new LocalClientServices({\n config: this._config,\n modelFactory: this._modelFactory,\n networkManager: this.networkManager,\n storage: this.storage\n });\n }\n\n /**\n * Create client/server.\n */\n createClientServer(host: ClientServicesHost = this.createClientServicesHost()): [Client, ProtoRpcPeer<{}>] {\n const [proxyPort, hostPort] = createLinkedPorts();\n const server = createProtoRpcPeer({\n exposed: host.descriptors,\n handlers: host.services as ClientServices,\n port: hostPort\n });\n // TODO(dmaretskyi): Refactor.\n\n const client = new Client({ services: new ClientServicesProxy(proxyPort) });\n return [client, server];\n }\n}\n\nexport const testSpace = async (create: DatabaseBackendProxy, check: DatabaseBackendProxy = create) => {\n const objectId = PublicKey.random().toHex();\n\n const result = create.mutate(genesisMutation(objectId, DocumentModel.meta.type));\n\n await result.batch.getReceipt();\n // TODO(dmaretskiy): await result.waitToBeProcessed()\n assert(create._itemManager.entities.has(result.objectsUpdated[0].id));\n\n await asyncTimeout(\n check.itemUpdate.waitForCondition(() => check._itemManager.entities.has(objectId)),\n 1000\n );\n\n return result;\n};\n\nexport const syncItems = async (db1: DatabaseBackendProxy, db2: DatabaseBackendProxy) => {\n // Check item replicated from 1 => 2.\n await testSpace(db1, db2);\n\n // Check item replicated from 2 => 1.\n await testSpace(db2, db1);\n};\n\nexport const joinCommonSpace = async ([initialPeer, ...peers]: Client[], spaceKey?: PublicKey): Promise<PublicKey> => {\n const rootSpace = spaceKey ? initialPeer.echo.getSpace(spaceKey) : await initialPeer.echo.createSpace();\n assert(rootSpace, 'Space not found.');\n\n await Promise.all(\n peers.map(async (peer) => {\n const hostDone = new Trigger<Invitation>();\n const guestDone = new Trigger<Invitation>();\n\n const hostObservabli = rootSpace.createInvitation({ type: Invitation.Type.INTERACTIVE_TESTING });\n log('invitation created');\n hostObservabli.subscribe({\n onConnecting: (invitation) => {\n const guestObservable = peer.echo.acceptInvitation(invitation);\n log('invitation accepted');\n\n guestObservable.subscribe({\n onSuccess: (invitation: Invitation) => {\n guestDone.wake(invitation);\n log('invitation guestDone');\n },\n onError: (err: Error) => raise(err)\n });\n },\n onSuccess: (invitation) => {\n hostDone.wake(invitation);\n log('invitation hostDone');\n },\n onError: (err) => raise(err)\n });\n\n await Promise.all([hostDone.wait(), guestDone.wait()]);\n })\n );\n\n return rootSpace.key;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["createCredential", "PublicKey", "createMockCredential", "signer", "issuer", "subject", "Buffer", "from", "assertion", "payload", "value", "createDefaultModelFactory", "createCredentialSignerWithChain", "CredentialGenerator", "SnapshotStore", "MetadataStore", "SpaceManager", "valueEncoding", "testLocalDatabase", "FeedFactory", "FeedStore", "Keyring", "MemorySignalManager", "MemorySignalManagerContext", "MemoryTransportFactory", "NetworkManager", "createStorage", "StorageType", "createServiceHost", "config", "signalManagerContext", "networkManager", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "ClientServicesHost", "createServiceContext", "signalContext", "MemorySignalManagerContext", "storage", "createStorage", "type", "StorageType", "RAM", "modelFactory", "createDefaultModelFactory", "ServiceContext", "createPeers", "numPeers", "Promise", "all", "Array", "from", "map", "peer", "open", "createIdentity", "syncItemsLocal", "db1", "db2", "testLocalDatabase", "HostTestBuilder", "createPeer", "TestPeer", "constructor", "_props", "keyring", "Keyring", "createDirectory", "feedStore", "FeedStore", "factory", "FeedFactory", "root", "signer", "hypercore", "valueEncoding", "metadataStore", "MetadataStore", "snapshotStore", "SnapshotStore", "spaceManager", "SpaceManager", "createSigningContext", "identityKey", "createKey", "deviceKey", "credentialSigner", "createCredentialSignerWithChain", "credential", "CredentialGenerator", "createDeviceAuthorization", "recordCredential", "assert", "Trigger", "raise", "Invitation", "performInvitation", "host", "guest", "context", "done1", "done2", "observable1", "createInvitation", "type", "Type", "INTERACTIVE_TESTING", "subscribe", "onConnecting", "invitation1", "observable2", "acceptInvitation", "invitation2", "swarmKey", "equals", "onConnected", "onSuccess", "invitation", "wake", "onCancelled", "Error", "onTimeout", "err", "onError", "wait", "assert", "asyncTimeout", "Trigger", "Client", "ClientServicesProxy", "createDefaultModelFactory", "Invitation", "Config", "raise", "DocumentModel", "genesisMutation", "PublicKey", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "createWebRTCTransportFactory", "MemoryTransportFactory", "NetworkManager", "createLinkedPorts", "createProtoRpcPeer", "testConfigWithLocalSignal", "Config", "version", "runtime", "services", "signal", "server", "TestBuilder", "constructor", "config", "_modelFactory", "createDefaultModelFactory", "_signalManagerContext", "MemorySignalManagerContext", "_config", "networkManager", "signalServer", "get", "NetworkManager", "log", "signalManager", "WebsocketSignalManager", "transportFactory", "createWebRTCTransportFactory", "iceServers", "MemorySignalManager", "MemoryTransportFactory", "createClientServicesHost", "ClientServicesHost", "modelFactory", "storage", "createLocal", "LocalClientServices", "createClientServer", "host", "proxyPort", "hostPort", "createLinkedPorts", "createProtoRpcPeer", "exposed", "descriptors", "handlers", "port", "client", "Client", "ClientServicesProxy", "testSpace", "create", "check", "objectId", "PublicKey", "random", "toHex", "result", "mutate", "genesisMutation", "DocumentModel", "meta", "type", "batch", "getReceipt", "assert", "_itemManager", "entities", "has", "objectsUpdated", "id", "asyncTimeout", "itemUpdate", "waitForCondition", "syncItems", "db1", "db2", "joinCommonSpace", "initialPeer", "peers", "spaceKey", "rootSpace", "echo", "getSpace", "createSpace", "Promise", "all", "map", "peer", "hostDone", "Trigger", "guestDone", "hostObservabli", "createInvitation", "Invitation", "Type", "INTERACTIVE_TESTING", "subscribe", "onConnecting", "invitation", "guestObservable", "acceptInvitation", "onSuccess", "wake", "onError", "err", "raise", "wait", "key"]
7
7
  }