@dxos/client-services 0.1.35 → 0.1.36

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 (95) hide show
  1. package/dist/lib/browser/{chunk-H5IXSSI7.mjs → chunk-2AYYVPWN.mjs} +835 -950
  2. package/dist/lib/browser/chunk-2AYYVPWN.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +9 -11
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/packlets/testing/index.mjs +212 -74
  6. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  7. package/dist/lib/node/index.cjs +942 -1058
  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 +1089 -1067
  11. package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
  12. package/dist/types/src/packlets/identity/identity-manager.d.ts +1 -0
  13. package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
  14. package/dist/types/src/packlets/identity/identity.d.ts +3 -3
  15. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  16. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts +18 -0
  17. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -0
  18. package/dist/types/src/packlets/invitations/device-invitation-protocol.test.d.ts +2 -0
  19. package/dist/types/src/packlets/invitations/device-invitation-protocol.test.d.ts.map +1 -0
  20. package/dist/types/src/packlets/invitations/index.d.ts +4 -4
  21. package/dist/types/src/packlets/invitations/index.d.ts.map +1 -1
  22. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts +12 -0
  23. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts.map +1 -0
  24. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +38 -0
  25. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -0
  26. package/dist/types/src/packlets/invitations/invitations-service.d.ts +13 -15
  27. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  28. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +22 -0
  29. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -0
  30. package/dist/types/src/packlets/invitations/space-invitation-protocol.test.d.ts +2 -0
  31. package/dist/types/src/packlets/invitations/space-invitation-protocol.test.d.ts.map +1 -0
  32. package/dist/types/src/packlets/services/service-context.d.ts +6 -4
  33. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  34. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  35. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +2 -0
  36. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  37. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  38. package/dist/types/src/packlets/testing/invitation-utils.d.ts +31 -2
  39. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  40. package/dist/types/src/packlets/testing/test-builder.d.ts +3 -3
  41. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  42. package/dist/types/src/packlets/tests/invitations.test.d.ts +2 -0
  43. package/dist/types/src/packlets/tests/invitations.test.d.ts.map +1 -0
  44. package/dist/types/src/packlets/vault/worker-runtime.d.ts +2 -0
  45. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  46. package/package.json +30 -30
  47. package/src/packlets/identity/identity-manager.ts +2 -1
  48. package/src/packlets/identity/identity.ts +3 -3
  49. package/src/packlets/invitations/{device-invitations-handler.test.ts → device-invitation-protocol.test.ts} +3 -3
  50. package/src/packlets/invitations/device-invitation-protocol.ts +83 -0
  51. package/src/packlets/invitations/index.ts +4 -4
  52. package/src/packlets/invitations/invitation-protocol.ts +21 -0
  53. package/src/packlets/invitations/invitations-handler.ts +462 -0
  54. package/src/packlets/invitations/invitations-service.ts +127 -104
  55. package/src/packlets/invitations/space-invitation-protocol.test.ts +221 -0
  56. package/src/packlets/invitations/space-invitation-protocol.ts +117 -0
  57. package/src/packlets/services/service-context.test.ts +11 -4
  58. package/src/packlets/services/service-context.ts +40 -19
  59. package/src/packlets/services/service-host.ts +4 -12
  60. package/src/packlets/services/service-registry.test.ts +23 -25
  61. package/src/packlets/spaces/data-space-manager.ts +5 -0
  62. package/src/packlets/spaces/spaces-service.ts +7 -2
  63. package/src/packlets/storage/storage.ts +2 -0
  64. package/src/packlets/testing/invitation-utils.ts +219 -31
  65. package/src/packlets/testing/test-builder.ts +33 -22
  66. package/src/packlets/tests/client-services.test.ts +33 -76
  67. package/src/packlets/tests/halo-profile.test.ts +2 -28
  68. package/src/packlets/tests/invitations.test.ts +389 -0
  69. package/src/packlets/tests/spaces-invitations.test.ts +12 -30
  70. package/src/packlets/tests/spaces.test.ts +30 -28
  71. package/src/packlets/vault/worker-runtime.ts +4 -0
  72. package/dist/lib/browser/chunk-H5IXSSI7.mjs.map +0 -7
  73. package/dist/types/src/packlets/invitations/device-invitations-handler.d.ts +0 -30
  74. package/dist/types/src/packlets/invitations/device-invitations-handler.d.ts.map +0 -1
  75. package/dist/types/src/packlets/invitations/device-invitations-handler.test.d.ts +0 -2
  76. package/dist/types/src/packlets/invitations/device-invitations-handler.test.d.ts.map +0 -1
  77. package/dist/types/src/packlets/invitations/device-invitations-service.d.ts +0 -13
  78. package/dist/types/src/packlets/invitations/device-invitations-service.d.ts.map +0 -1
  79. package/dist/types/src/packlets/invitations/device-invitations-service.test.d.ts +0 -2
  80. package/dist/types/src/packlets/invitations/device-invitations-service.test.d.ts.map +0 -1
  81. package/dist/types/src/packlets/invitations/space-invitations-handler.d.ts +0 -26
  82. package/dist/types/src/packlets/invitations/space-invitations-handler.d.ts.map +0 -1
  83. package/dist/types/src/packlets/invitations/space-invitations-handler.test.d.ts +0 -2
  84. package/dist/types/src/packlets/invitations/space-invitations-handler.test.d.ts.map +0 -1
  85. package/dist/types/src/packlets/invitations/space-invitations-service.d.ts +0 -16
  86. package/dist/types/src/packlets/invitations/space-invitations-service.d.ts.map +0 -1
  87. package/dist/types/src/packlets/invitations/space-invitations-service.test.d.ts +0 -2
  88. package/dist/types/src/packlets/invitations/space-invitations-service.test.d.ts.map +0 -1
  89. package/src/packlets/invitations/device-invitations-handler.ts +0 -370
  90. package/src/packlets/invitations/device-invitations-service.test.ts +0 -96
  91. package/src/packlets/invitations/device-invitations-service.ts +0 -24
  92. package/src/packlets/invitations/space-invitations-handler.test.ts +0 -246
  93. package/src/packlets/invitations/space-invitations-handler.ts +0 -463
  94. package/src/packlets/invitations/space-invitations-service.test.ts +0 -129
  95. package/src/packlets/invitations/space-invitations-service.ts +0 -35
@@ -3,7 +3,7 @@ import {
3
3
  ClientServicesHost,
4
4
  LocalClientServices,
5
5
  ServiceContext
6
- } from "../../chunk-H5IXSSI7.mjs";
6
+ } from "../../chunk-2AYYVPWN.mjs";
7
7
 
8
8
  // packages/sdk/client-services/src/packlets/testing/credential-utils.ts
9
9
  import { createCredential } from "@dxos/credentials";
@@ -145,52 +145,185 @@ var createSigningContext = async (keyring) => {
145
145
  // packages/sdk/client-services/src/packlets/testing/invitation-utils.ts
146
146
  import assert from "@dxos/node-std/assert";
147
147
  import { Trigger } from "@dxos/async";
148
- import { raise } from "@dxos/debug";
148
+ import { Client, EchoProxy, HaloProxy, InvitationsProxy, SpaceProxy } from "@dxos/client";
149
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
150
+ var sanitizeInvitation = (invitation) => {
151
+ return {
152
+ invitationId: invitation.invitationId,
153
+ type: invitation.type,
154
+ kind: invitation.kind,
155
+ authMethod: invitation.authMethod,
156
+ swarmKey: invitation.swarmKey,
157
+ state: invitation.state,
158
+ timeout: invitation.timeout
159
+ };
160
+ };
161
+ var performInvitation = ({ host, guest, options, hooks }) => {
162
+ const hostComplete = new Trigger();
163
+ const guestComplete = new Trigger();
164
+ const authCode = new Trigger();
165
+ const hostObservable = createInvitation(host, options);
166
+ hostObservable.subscribe(async (hostInvitation) => {
167
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
168
+ switch (hostInvitation.state) {
169
+ case Invitation.State.CONNECTING: {
170
+ if ((_b = (_a = hooks == null ? void 0 : hooks.host) == null ? void 0 : _a.onConnecting) == null ? void 0 : _b.call(_a, hostObservable)) {
171
+ break;
172
+ }
173
+ const guestObservable = acceptInvitation(guest, hostInvitation);
174
+ guestObservable.subscribe(async (guestInvitation) => {
175
+ var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2;
176
+ switch (guestInvitation.state) {
177
+ case Invitation.State.CONNECTING: {
178
+ if ((_b2 = (_a2 = hooks == null ? void 0 : hooks.guest) == null ? void 0 : _a2.onConnecting) == null ? void 0 : _b2.call(_a2, guestObservable)) {
179
+ break;
180
+ }
181
+ assert(hostInvitation.swarmKey.equals(guestInvitation.swarmKey));
182
+ break;
183
+ }
184
+ case Invitation.State.CONNECTED: {
185
+ (_d2 = (_c2 = hooks == null ? void 0 : hooks.guest) == null ? void 0 : _c2.onConnected) == null ? void 0 : _d2.call(_c2, guestObservable);
186
+ break;
187
+ }
188
+ case Invitation.State.READY_FOR_AUTHENTICATION: {
189
+ if ((_f2 = (_e2 = hooks == null ? void 0 : hooks.guest) == null ? void 0 : _e2.onReady) == null ? void 0 : _f2.call(_e2, guestObservable)) {
190
+ break;
191
+ }
192
+ await guestObservable.authenticate(await authCode.wait());
193
+ break;
194
+ }
195
+ case Invitation.State.AUTHENTICATING: {
196
+ (_h2 = (_g2 = hooks == null ? void 0 : hooks.guest) == null ? void 0 : _g2.onAuthenticating) == null ? void 0 : _h2.call(_g2, guestObservable);
197
+ break;
198
+ }
199
+ case Invitation.State.SUCCESS: {
200
+ if ((_j2 = (_i2 = hooks == null ? void 0 : hooks.guest) == null ? void 0 : _i2.onSuccess) == null ? void 0 : _j2.call(_i2, guestObservable)) {
201
+ break;
202
+ }
203
+ guestComplete.wake({
204
+ invitation: guestInvitation
205
+ });
206
+ break;
207
+ }
208
+ case Invitation.State.CANCELLED: {
209
+ if ((_l2 = (_k2 = hooks == null ? void 0 : hooks.guest) == null ? void 0 : _k2.onCancelled) == null ? void 0 : _l2.call(_k2, guestObservable)) {
210
+ break;
211
+ }
212
+ guestComplete.wake({
213
+ invitation: guestInvitation
214
+ });
215
+ break;
216
+ }
217
+ case Invitation.State.TIMEOUT: {
218
+ if ((_n2 = (_m2 = hooks == null ? void 0 : hooks.guest) == null ? void 0 : _m2.onTimeout) == null ? void 0 : _n2.call(_m2, guestObservable)) {
219
+ return;
220
+ }
221
+ guestComplete.wake({
222
+ invitation: guestInvitation
223
+ });
224
+ }
225
+ }
226
+ }, (error) => {
227
+ var _a2, _b2;
228
+ if ((_b2 = (_a2 = hooks == null ? void 0 : hooks.guest) == null ? void 0 : _a2.onError) == null ? void 0 : _b2.call(_a2, guestObservable)) {
229
+ return;
230
+ }
231
+ guestComplete.wake({
232
+ error
233
+ });
234
+ });
235
+ break;
236
+ }
237
+ case Invitation.State.CONNECTED: {
238
+ (_d = (_c = hooks == null ? void 0 : hooks.host) == null ? void 0 : _c.onConnected) == null ? void 0 : _d.call(_c, hostObservable);
239
+ break;
240
+ }
241
+ case Invitation.State.READY_FOR_AUTHENTICATION: {
242
+ if ((_f = (_e = hooks == null ? void 0 : hooks.host) == null ? void 0 : _e.onReady) == null ? void 0 : _f.call(_e, hostObservable)) {
243
+ break;
244
+ }
245
+ if (hostInvitation.authCode) {
246
+ authCode.wake(hostInvitation.authCode);
247
+ }
248
+ break;
249
+ }
250
+ case Invitation.State.AUTHENTICATING: {
251
+ (_h = (_g = hooks == null ? void 0 : hooks.host) == null ? void 0 : _g.onAuthenticating) == null ? void 0 : _h.call(_g, hostObservable);
252
+ break;
253
+ }
254
+ case Invitation.State.SUCCESS: {
255
+ if ((_j = (_i = hooks == null ? void 0 : hooks.host) == null ? void 0 : _i.onSuccess) == null ? void 0 : _j.call(_i, hostObservable)) {
256
+ break;
257
+ }
258
+ hostComplete.wake({
259
+ invitation: hostInvitation
260
+ });
261
+ break;
262
+ }
263
+ case Invitation.State.CANCELLED: {
264
+ if ((_l = (_k = hooks == null ? void 0 : hooks.host) == null ? void 0 : _k.onCancelled) == null ? void 0 : _l.call(_k, hostObservable)) {
265
+ break;
266
+ }
267
+ hostComplete.wake({
268
+ invitation: hostInvitation
269
+ });
270
+ break;
271
+ }
272
+ case Invitation.State.TIMEOUT: {
273
+ if ((_n = (_m = hooks == null ? void 0 : hooks.host) == null ? void 0 : _m.onTimeout) == null ? void 0 : _n.call(_m, hostObservable)) {
274
+ break;
275
+ }
276
+ hostComplete.wake({
277
+ invitation: hostInvitation
278
+ });
279
+ break;
280
+ }
281
+ }
282
+ }, (error) => {
283
+ var _a, _b;
284
+ if ((_b = (_a = hooks == null ? void 0 : hooks.host) == null ? void 0 : _a.onError) == null ? void 0 : _b.call(_a, hostObservable)) {
285
+ return;
286
+ }
287
+ hostComplete.wake({
288
+ error
289
+ });
155
290
  });
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)
291
+ return [
292
+ hostComplete.wait(),
293
+ guestComplete.wait()
294
+ ];
295
+ };
296
+ var createInvitation = (host, options) => {
297
+ options != null ? options : options = {
298
+ authMethod: Invitation.AuthMethod.NONE,
299
+ ...options != null ? options : {}
300
+ };
301
+ if (host instanceof InvitationsProxy || host instanceof HaloProxy || host instanceof SpaceProxy) {
302
+ return host.createInvitation(options);
303
+ }
304
+ const hostHandler = host.getInvitationHandler({
305
+ kind: Invitation.Kind.SPACE,
306
+ ...options
307
+ });
308
+ return host.invitations.createInvitation(hostHandler, options);
309
+ };
310
+ var acceptInvitation = (guest, invitation) => {
311
+ invitation = sanitizeInvitation(invitation);
312
+ if (guest instanceof InvitationsProxy || guest instanceof HaloProxy || guest instanceof EchoProxy || guest instanceof Client) {
313
+ return guest.acceptInvitation(invitation);
314
+ }
315
+ const guestHandler = guest.getInvitationHandler({
316
+ kind: invitation.kind
183
317
  });
184
- await done1.wait();
185
- await done2.wait();
318
+ return guest.invitations.acceptInvitation(guestHandler, invitation);
186
319
  };
187
320
 
188
321
  // packages/sdk/client-services/src/packlets/testing/test-builder.ts
189
322
  import assert2 from "@dxos/node-std/assert";
190
323
  import { asyncTimeout, Trigger as Trigger2 } from "@dxos/async";
191
- import { Client, ClientServicesProxy, createDefaultModelFactory as createDefaultModelFactory2, Invitation as Invitation2 } from "@dxos/client";
324
+ import { Client as Client2, ClientServicesProxy, createDefaultModelFactory as createDefaultModelFactory2, Invitation as Invitation2 } from "@dxos/client";
192
325
  import { Config } from "@dxos/config";
193
- import { raise as raise2 } from "@dxos/debug";
326
+ import { raise } from "@dxos/debug";
194
327
  import { DocumentModel } from "@dxos/document-model";
195
328
  import { genesisMutation } from "@dxos/echo-db";
196
329
  import { PublicKey as PublicKey2 } from "@dxos/keys";
@@ -273,7 +406,7 @@ var TestBuilder = class {
273
406
  handlers: host.services,
274
407
  port: hostPort
275
408
  });
276
- const client = new Client({
409
+ const client = new Client2({
277
410
  services: new ClientServicesProxy(proxyPort)
278
411
  });
279
412
  return [
@@ -300,8 +433,8 @@ var joinCommonSpace = async ([initialPeer, ...peers], spaceKey) => {
300
433
  await Promise.all(peers.map(async (peer) => {
301
434
  const hostDone = new Trigger2();
302
435
  const guestDone = new Trigger2();
303
- const hostObservabli = rootSpace.createInvitation({
304
- type: Invitation2.Type.INTERACTIVE_TESTING
436
+ const hostObservable = rootSpace.createInvitation({
437
+ authMethod: Invitation2.AuthMethod.NONE
305
438
  });
306
439
  log("invitation created", {}, {
307
440
  file: "test-builder.ts",
@@ -309,39 +442,43 @@ var joinCommonSpace = async ([initialPeer, ...peers], spaceKey) => {
309
442
  scope: void 0,
310
443
  callSite: (f, a) => f(...a)
311
444
  });
312
- hostObservabli.subscribe({
313
- onConnecting: (invitation) => {
314
- const guestObservable = peer.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
- });
445
+ hostObservable.subscribe((hostInvitation) => {
446
+ switch (hostInvitation.state) {
447
+ case Invitation2.State.CONNECTING: {
448
+ const guestObservable = peer.acceptInvitation(hostInvitation);
449
+ log("invitation accepted", {}, {
450
+ file: "test-builder.ts",
451
+ line: 160,
452
+ scope: void 0,
453
+ callSite: (f, a) => f(...a)
454
+ });
455
+ guestObservable.subscribe((guestInvitation) => {
456
+ switch (guestInvitation.state) {
457
+ case Invitation2.State.SUCCESS: {
458
+ guestDone.wake(guestInvitation);
459
+ log("invitation guestDone", {}, {
460
+ file: "test-builder.ts",
461
+ line: 167,
462
+ scope: void 0,
463
+ callSite: (f, a) => f(...a)
464
+ });
465
+ break;
466
+ }
467
+ }
468
+ }, (err) => raise(err));
469
+ break;
470
+ }
471
+ case Invitation2.State.SUCCESS: {
472
+ hostDone.wake(hostInvitation);
473
+ log("invitation hostDone", {}, {
474
+ file: "test-builder.ts",
475
+ line: 179,
476
+ scope: void 0,
477
+ callSite: (f, a) => f(...a)
478
+ });
479
+ }
480
+ }
481
+ }, (err) => raise(err));
345
482
  await Promise.all([
346
483
  hostDone.wait(),
347
484
  guestDone.wait()
@@ -361,6 +498,7 @@ export {
361
498
  createSigningContext,
362
499
  joinCommonSpace,
363
500
  performInvitation,
501
+ sanitizeInvitation,
364
502
  syncItems,
365
503
  syncItemsLocal,
366
504
  testConfigWithLocalSignal,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
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 DataPipeline,\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: DataPipeline, db2: DataPipeline) => {\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.getSpace(spaceKey) : await initialPeer.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.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", "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"]
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 DataPipeline,\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: DataPipeline, db2: DataPipeline) => {\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 {\n AuthenticatingInvitationObservable,\n CancellableInvitationObservable,\n Client,\n EchoProxy,\n HaloProxy,\n InvitationsProxy,\n SpaceProxy\n} from '@dxos/client';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\n\nimport { ServiceContext } from '../services';\n\n/**\n * Strip secrets from invitation before giving it to the peer.\n */\nexport const sanitizeInvitation = (invitation: Invitation): Invitation => {\n return {\n invitationId: invitation.invitationId,\n type: invitation.type,\n kind: invitation.kind,\n authMethod: invitation.authMethod,\n swarmKey: invitation.swarmKey,\n state: invitation.state,\n timeout: invitation.timeout\n };\n};\n\nexport type PerformInvitationCallbacks<T> = {\n onConnecting?: (value: T) => boolean | void;\n onConnected?: (value: T) => boolean | void;\n onReady?: (value: T) => boolean | void;\n onAuthenticating?: (value: T) => boolean | void;\n onSuccess?: (value: T) => boolean | void;\n onCancelled?: (value: T) => boolean | void;\n onTimeout?: (value: T) => boolean | void;\n onError?: (value: T) => boolean | void;\n};\n\nexport type PerformInvitationParams = {\n host: ServiceContext | InvitationsProxy | HaloProxy | SpaceProxy;\n guest: ServiceContext | InvitationsProxy | HaloProxy | EchoProxy | Client;\n options?: Partial<Invitation>;\n hooks?: {\n host?: PerformInvitationCallbacks<CancellableInvitationObservable>;\n guest?: PerformInvitationCallbacks<AuthenticatingInvitationObservable>;\n };\n};\n\nexport type Result = { invitation?: Invitation; error?: Error };\n\nexport const performInvitation = ({\n host,\n guest,\n options,\n hooks\n}: PerformInvitationParams): [Promise<Result>, Promise<Result>] => {\n const hostComplete = new Trigger<Result>();\n const guestComplete = new Trigger<Result>();\n const authCode = new Trigger<string>();\n\n const hostObservable = createInvitation(host, options);\n hostObservable.subscribe(\n async (hostInvitation: Invitation) => {\n switch (hostInvitation.state) {\n case Invitation.State.CONNECTING: {\n if (hooks?.host?.onConnecting?.(hostObservable)) {\n break;\n }\n const guestObservable = acceptInvitation(guest, hostInvitation);\n guestObservable.subscribe(\n async (guestInvitation: Invitation) => {\n switch (guestInvitation.state) {\n case Invitation.State.CONNECTING: {\n if (hooks?.guest?.onConnecting?.(guestObservable)) {\n break;\n }\n assert(hostInvitation.swarmKey!.equals(guestInvitation.swarmKey!));\n break;\n }\n\n case Invitation.State.CONNECTED: {\n hooks?.guest?.onConnected?.(guestObservable);\n break;\n }\n\n case Invitation.State.READY_FOR_AUTHENTICATION: {\n if (hooks?.guest?.onReady?.(guestObservable)) {\n break;\n }\n await guestObservable.authenticate(await authCode.wait());\n break;\n }\n\n case Invitation.State.AUTHENTICATING: {\n hooks?.guest?.onAuthenticating?.(guestObservable);\n break;\n }\n\n case Invitation.State.SUCCESS: {\n if (hooks?.guest?.onSuccess?.(guestObservable)) {\n break;\n }\n guestComplete.wake({ invitation: guestInvitation });\n break;\n }\n\n case Invitation.State.CANCELLED: {\n if (hooks?.guest?.onCancelled?.(guestObservable)) {\n break;\n }\n guestComplete.wake({ invitation: guestInvitation });\n break;\n }\n\n case Invitation.State.TIMEOUT: {\n if (hooks?.guest?.onTimeout?.(guestObservable)) {\n return;\n }\n guestComplete.wake({ invitation: guestInvitation });\n }\n }\n },\n (error: Error) => {\n if (hooks?.guest?.onError?.(guestObservable)) {\n return;\n }\n guestComplete.wake({ error });\n }\n );\n break;\n }\n\n case Invitation.State.CONNECTED: {\n hooks?.host?.onConnected?.(hostObservable);\n break;\n }\n\n case Invitation.State.READY_FOR_AUTHENTICATION: {\n if (hooks?.host?.onReady?.(hostObservable)) {\n break;\n }\n if (hostInvitation.authCode) {\n authCode.wake(hostInvitation.authCode);\n }\n break;\n }\n\n case Invitation.State.AUTHENTICATING: {\n hooks?.host?.onAuthenticating?.(hostObservable);\n break;\n }\n\n case Invitation.State.SUCCESS: {\n if (hooks?.host?.onSuccess?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n\n case Invitation.State.CANCELLED: {\n if (hooks?.host?.onCancelled?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n\n case Invitation.State.TIMEOUT: {\n if (hooks?.host?.onTimeout?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n }\n },\n (error: Error) => {\n if (hooks?.host?.onError?.(hostObservable)) {\n return;\n }\n hostComplete.wake({ error });\n }\n );\n\n return [hostComplete.wait(), guestComplete.wait()];\n};\n\nconst createInvitation = (\n host: ServiceContext | InvitationsProxy | HaloProxy | SpaceProxy,\n options?: Partial<Invitation>\n): CancellableInvitationObservable => {\n options ??= {\n authMethod: Invitation.AuthMethod.NONE,\n ...(options ?? {})\n };\n\n if (host instanceof InvitationsProxy || host instanceof HaloProxy || host instanceof SpaceProxy) {\n return host.createInvitation(options);\n }\n\n const hostHandler = host.getInvitationHandler({ kind: Invitation.Kind.SPACE, ...options });\n return host.invitations.createInvitation(hostHandler, options);\n};\n\nconst acceptInvitation = (\n guest: ServiceContext | InvitationsProxy | HaloProxy | EchoProxy | Client,\n invitation: Invitation\n): AuthenticatingInvitationObservable => {\n invitation = sanitizeInvitation(invitation);\n\n if (\n guest instanceof InvitationsProxy ||\n guest instanceof HaloProxy ||\n guest instanceof EchoProxy ||\n guest instanceof Client\n ) {\n return guest.acceptInvitation(invitation);\n }\n\n const guestHandler = guest.getInvitationHandler({ kind: invitation.kind });\n return guest.invitations.acceptInvitation(guestHandler, invitation);\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 { DatabaseProxy, 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: DatabaseProxy, check: DatabaseProxy = 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: DatabaseProxy, db2: DatabaseProxy) => {\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.getSpace(spaceKey) : await initialPeer.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 hostObservable = rootSpace.createInvitation({ authMethod: Invitation.AuthMethod.NONE });\n log('invitation created');\n hostObservable.subscribe(\n (hostInvitation) => {\n switch (hostInvitation.state) {\n case Invitation.State.CONNECTING: {\n const guestObservable = peer.acceptInvitation(hostInvitation);\n log('invitation accepted');\n\n guestObservable.subscribe(\n (guestInvitation) => {\n switch (guestInvitation.state) {\n case Invitation.State.SUCCESS: {\n guestDone.wake(guestInvitation);\n log('invitation guestDone');\n break;\n }\n }\n },\n (err) => raise(err)\n );\n break;\n }\n\n case Invitation.State.SUCCESS: {\n hostDone.wake(hostInvitation);\n log('invitation hostDone');\n }\n }\n },\n (err) => raise(err)\n );\n\n await Promise.all([hostDone.wait(), guestDone.wait()]);\n })\n );\n\n return rootSpace.key;\n};\n"],
5
+ "mappings": ";;;;;;;;AAIA,SAASA,wBAAwB;AAEjC,SAASC,iBAAiB;AAGnB,IAAMC,uBAAuB,OAAO,EACzCC,QACAC,OAAM,MAKNJ,iBAAiB;EACfG;EACAC;EACAC,SAAS,IAAIJ,UAAUK,OAAOC,KAAK,MAAA,CAAA;EACnCC,WAAW;IACT,SAAS;IACTC,SAAS;MACP,SAAS;MACTC,OAAOJ,OAAOC,KAAK,MAAA;IACrB;EACF;AACF,CAAA;;;ACvBF,SAASI,iCAAiC;AAE1C,SAASC,iCAAiCC,2BAA2B;AACrE,SACEC,eAEAC,eAEAC,cACAC,qBACK;AACP,SAASC,yBAAyB;AAClC,SAASC,aAAaC,iBAAiB;AACvC,SAASC,eAAe;AACxB,SAASC,qBAAqBC,kCAAkC;AAChE,SAASC,wBAAwBC,sBAAsB;AACvD,SAASC,eAAwBC,mBAAmB;AAQ7C,IAAMC,oBAAoB,CAACC,QAAgBC,yBAAqD;AACrG,QAAMC,iBAAiB,IAAIC,eAAe;IACxCC,eAAe,IAAIC,oBAAoBJ,oBAAAA;IACvCK,kBAAkBC;EACpB,CAAA;AAEA,SAAO,IAAIC,mBAAmB;IAC5BR;IACAE;EACF,CAAA;AACF;AAEO,IAAMO,uBAAuB,CAAC,EACnCC,gBAAgB,IAAIC,2BAAAA,GACpBC,UAAUC,cAAc;EAAEC,MAAMC,YAAYC;AAAI,CAAA,EAAE,IAIhD,CAAC,MAAM;AACT,QAAMd,iBAAiB,IAAIC,eAAe;IACxCC,eAAe,IAAIC,oBAAoBK,aAAAA;IACvCJ,kBAAkBC;EACpB,CAAA;AAEA,QAAMU,eAAeC,0BAAAA;AACrB,SAAO,IAAIC,eAAeP,SAASV,gBAAgBe,YAAAA;AACrD;AAEO,IAAMG,cAAc,OAAOC,aAAqB;AACrD,QAAMX,gBAAgB,IAAIC,2BAAAA;AAE1B,SAAO,MAAMW,QAAQC,IACnBC,MAAMC,KAAKD,MAAMH,QAAAA,CAAAA,EAAWK,IAAI,YAAY;AAC1C,UAAMC,OAAOlB,qBAAqB;MAAEC;IAAc,CAAA;AAClD,UAAMiB,KAAKC,KAAI;AACf,WAAOD;EACT,CAAA,CAAA;AAEJ;AAEO,IAAME,iBAAiB,OAAOF,SAAyB;AAC5D,QAAMA,KAAKE,eAAc;AACzB,SAAOF;AACT;AAIO,IAAMG,iBAAiB,OAAOC,KAAmBC,QAAsB;AAC5E,QAAMC,kBAAkBF,KAAKC,GAAAA;AAC7B,QAAMC,kBAAkBD,KAAKD,GAAAA;AAC/B;AAEO,IAAMG,kBAAN,MAAMA;EAAN;AACWxB,yBAAgB,IAAIC,2BAAAA;;EAEpCwB,aAAuB;AACrB,WAAO,IAAIC,SAAS,KAAK1B,aAAa;EACxC;AACF;AAYO,IAAM0B,WAAN,MAAMA;EAGXC,YAA6B3B,eAA2C;yBAA3CA;SAFrB4B,SAAwB,CAAC;EAEwC;EAEzE,IAAI1B,UAAU;AAvGhB;AAwGI,YAAQ,gBAAK0B,QAAO1B,YAAZ,eAAYA,UAAYC,cAAc;MAAEC,MAAMC,YAAYC;IAAI,CAAA;EACxE;EAEA,IAAIuB,UAAU;AA3GhB;AA4GI,YAAQ,gBAAKD,QAAOC,YAAZ,eAAYA,UAAY,IAAIC,QAAQ,KAAK5B,QAAQ6B,gBAAgB,SAAA,CAAA;EAC3E;EAEA,IAAIC,YAAY;AA/GlB;AAgHI,YAAQ,gBAAKJ,QAAOI,cAAZ,eAAYA,YAAc,IAAIC,UAAU;MAC9CC,SAAS,IAAIC,YAAY;QACvBC,MAAM,KAAKlC,QAAQ6B,gBAAgB,OAAA;QACnCM,QAAQ,KAAKR;QACbS,WAAW;UACTC;QACF;MACF,CAAA;IACF,CAAA;EACF;EAEA,IAAIC,gBAAgB;AA3HtB;AA4HI,YAAQ,gBAAKZ,QAAOY,kBAAZ,eAAYA,gBAAkB,IAAIC,cAAc,KAAKvC,QAAQ6B,gBAAgB,UAAA,CAAA;EACvF;EAEA,IAAIW,gBAAgB;AA/HtB;AAgII,YAAQ,gBAAKd,QAAOc,kBAAZ,eAAYA,gBAAkB,IAAIC,cAAc,KAAKzC,QAAQ6B,gBAAgB,WAAA,CAAA;EACvF;EAEA,IAAIvC,iBAAiB;AAnIvB;AAoII,YAAQ,gBAAKoC,QAAOpC,mBAAZ,eAAYA,iBAAmB,IAAIC,eAAe;MACxDC,eAAe,IAAIC,oBAAoB,KAAKK,aAAa;MACzDJ,kBAAkBC;IACpB,CAAA;EACF;EAEA,IAAI+C,eAAe;AA1IrB;AA2II,YAAQ,gBAAKhB,QAAOgB,iBAAZ,eAAYA,eAAiB,IAAIC,aAAa;MACpDb,WAAW,KAAKA;MAChBxC,gBAAgB,KAAKA;IACvB,CAAA;EACF;AACF;AAEO,IAAMsD,uBAAuB,OAAOjB,YAA8C;AACvF,QAAMkB,cAAc,MAAMlB,QAAQmB,UAAS;AAC3C,QAAMC,YAAY,MAAMpB,QAAQmB,UAAS;AAEzC,SAAO;IACLD;IACAE;IACAC,kBAAkBC,gCAChBtB,SACA;MACEuB,YAAY,MAAM,IAAIC,oBAAoBxB,SAASkB,aAAaE,SAAAA,EAAWK,0BAA0BL,SAAAA;IACvG,GACAA,SAAAA;IAEFM,kBAAkB,YAAY;IAAC;;EACjC;AACF;;;AC9JA,OAAOC,YAAY;AAEnB,SAASC,eAAe;AACxB,SAGEC,QACAC,WACAC,WACAC,kBACAC,kBACK;AACP,SAASC,kBAAkB;AAOpB,IAAMC,qBAAqB,CAACC,eAAuC;AACxE,SAAO;IACLC,cAAcD,WAAWC;IACzBC,MAAMF,WAAWE;IACjBC,MAAMH,WAAWG;IACjBC,YAAYJ,WAAWI;IACvBC,UAAUL,WAAWK;IACrBC,OAAON,WAAWM;IAClBC,SAASP,WAAWO;EACtB;AACF;AAyBO,IAAMC,oBAAoB,CAAC,EAChCC,MACAC,OACAC,SACAC,MAAK,MAC4D;AACjE,QAAMC,eAAe,IAAIrB,QAAAA;AACzB,QAAMsB,gBAAgB,IAAItB,QAAAA;AAC1B,QAAMuB,WAAW,IAAIvB,QAAAA;AAErB,QAAMwB,iBAAiBC,iBAAiBR,MAAME,OAAAA;AAC9CK,iBAAeE,UACb,OAAOC,mBAA+B;AAtE1C;AAuEM,YAAQA,eAAeb,OAAK;MAC1B,KAAKR,WAAWsB,MAAMC,YAAY;AAChC,aAAIT,0CAAOH,SAAPG,mBAAaU,iBAAbV,4BAA4BI,iBAAiB;AAC/C;QACF;AACA,cAAMO,kBAAkBC,iBAAiBd,OAAOS,cAAAA;AAChDI,wBAAgBL,UACd,OAAOO,oBAAgC;AA9EnD,cAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC;AA+Ec,kBAAQd,gBAAgBnB,OAAK;YAC3B,KAAKR,WAAWsB,MAAMC,YAAY;AAChC,mBAAIT,OAAAA,MAAAA,+BAAOF,UAAPE,gBAAAA,IAAcU,iBAAdV,gBAAAA,IAAAA,KAAAA,KAA6BW,kBAAkB;AACjD;cACF;AACAhC,qBAAO4B,eAAed,SAAUmC,OAAOf,gBAAgBpB,QAAQ,CAAA;AAC/D;YACF;YAEA,KAAKP,WAAWsB,MAAMqB,WAAW;AAC/B7B,eAAAA,OAAAA,MAAAA,+BAAOF,UAAPE,gBAAAA,IAAc8B,gBAAd9B,gBAAAA,IAAAA,KAAAA,KAA4BW;AAC5B;YACF;YAEA,KAAKzB,WAAWsB,MAAMuB,0BAA0B;AAC9C,mBAAI/B,OAAAA,MAAAA,+BAAOF,UAAPE,gBAAAA,IAAcgC,YAAdhC,gBAAAA,IAAAA,KAAAA,KAAwBW,kBAAkB;AAC5C;cACF;AACA,oBAAMA,gBAAgBsB,aAAa,MAAM9B,SAAS+B,KAAI,CAAA;AACtD;YACF;YAEA,KAAKhD,WAAWsB,MAAM2B,gBAAgB;AACpCnC,eAAAA,OAAAA,MAAAA,+BAAOF,UAAPE,gBAAAA,IAAcoC,qBAAdpC,gBAAAA,IAAAA,KAAAA,KAAiCW;AACjC;YACF;YAEA,KAAKzB,WAAWsB,MAAM6B,SAAS;AAC7B,mBAAIrC,OAAAA,MAAAA,+BAAOF,UAAPE,gBAAAA,IAAcsC,cAAdtC,gBAAAA,IAAAA,KAAAA,KAA0BW,kBAAkB;AAC9C;cACF;AACAT,4BAAcqC,KAAK;gBAAEnD,YAAYyB;cAAgB,CAAA;AACjD;YACF;YAEA,KAAK3B,WAAWsB,MAAMgC,WAAW;AAC/B,mBAAIxC,OAAAA,MAAAA,+BAAOF,UAAPE,gBAAAA,IAAcyC,gBAAdzC,gBAAAA,IAAAA,KAAAA,KAA4BW,kBAAkB;AAChD;cACF;AACAT,4BAAcqC,KAAK;gBAAEnD,YAAYyB;cAAgB,CAAA;AACjD;YACF;YAEA,KAAK3B,WAAWsB,MAAMkC,SAAS;AAC7B,mBAAI1C,OAAAA,MAAAA,+BAAOF,UAAPE,gBAAAA,IAAc2C,cAAd3C,gBAAAA,IAAAA,KAAAA,KAA0BW,kBAAkB;AAC9C;cACF;AACAT,4BAAcqC,KAAK;gBAAEnD,YAAYyB;cAAgB,CAAA;YACnD;UACF;QACF,GACA,CAAC+B,UAAiB;AAlI9B,cAAA9B,KAAAC;AAmIc,eAAIf,OAAAA,MAAAA,+BAAOF,UAAPE,gBAAAA,IAAc6C,YAAd7C,gBAAAA,IAAAA,KAAAA,KAAwBW,kBAAkB;AAC5C;UACF;AACAT,wBAAcqC,KAAK;YAAEK;UAAM,CAAA;QAC7B,CAAA;AAEF;MACF;MAEA,KAAK1D,WAAWsB,MAAMqB,WAAW;AAC/B7B,mDAAOH,SAAPG,mBAAa8B,gBAAb9B,4BAA2BI;AAC3B;MACF;MAEA,KAAKlB,WAAWsB,MAAMuB,0BAA0B;AAC9C,aAAI/B,0CAAOH,SAAPG,mBAAagC,YAAbhC,4BAAuBI,iBAAiB;AAC1C;QACF;AACA,YAAIG,eAAeJ,UAAU;AAC3BA,mBAASoC,KAAKhC,eAAeJ,QAAQ;QACvC;AACA;MACF;MAEA,KAAKjB,WAAWsB,MAAM2B,gBAAgB;AACpCnC,mDAAOH,SAAPG,mBAAaoC,qBAAbpC,4BAAgCI;AAChC;MACF;MAEA,KAAKlB,WAAWsB,MAAM6B,SAAS;AAC7B,aAAIrC,0CAAOH,SAAPG,mBAAasC,cAAbtC,4BAAyBI,iBAAiB;AAC5C;QACF;AACAH,qBAAasC,KAAK;UAAEnD,YAAYmB;QAAe,CAAA;AAC/C;MACF;MAEA,KAAKrB,WAAWsB,MAAMgC,WAAW;AAC/B,aAAIxC,0CAAOH,SAAPG,mBAAayC,gBAAbzC,4BAA2BI,iBAAiB;AAC9C;QACF;AACAH,qBAAasC,KAAK;UAAEnD,YAAYmB;QAAe,CAAA;AAC/C;MACF;MAEA,KAAKrB,WAAWsB,MAAMkC,SAAS;AAC7B,aAAI1C,0CAAOH,SAAPG,mBAAa2C,cAAb3C,4BAAyBI,iBAAiB;AAC5C;QACF;AACAH,qBAAasC,KAAK;UAAEnD,YAAYmB;QAAe,CAAA;AAC/C;MACF;IACF;EACF,GACA,CAACqC,UAAiB;AAzLtB;AA0LM,SAAI5C,0CAAOH,SAAPG,mBAAa6C,YAAb7C,4BAAuBI,iBAAiB;AAC1C;IACF;AACAH,iBAAasC,KAAK;MAAEK;IAAM,CAAA;EAC5B,CAAA;AAGF,SAAO;IAAC3C,aAAaiC,KAAI;IAAIhC,cAAcgC,KAAI;;AACjD;AAEA,IAAM7B,mBAAmB,CACvBR,MACAE,YACoC;AACpCA,wCAAY;IACVP,YAAYN,WAAW4D,WAAWC;IAClC,GAAIhD,4BAAW,CAAC;EAClB;AAEA,MAAIF,gBAAgBb,oBAAoBa,gBAAgBd,aAAac,gBAAgBZ,YAAY;AAC/F,WAAOY,KAAKQ,iBAAiBN,OAAAA;EAC/B;AAEA,QAAMiD,cAAcnD,KAAKoD,qBAAqB;IAAE1D,MAAML,WAAWgE,KAAKC;IAAO,GAAGpD;EAAQ,CAAA;AACxF,SAAOF,KAAKuD,YAAY/C,iBAAiB2C,aAAajD,OAAAA;AACxD;AAEA,IAAMa,mBAAmB,CACvBd,OACAV,eACuC;AACvCA,eAAaD,mBAAmBC,UAAAA;AAEhC,MACEU,iBAAiBd,oBACjBc,iBAAiBf,aACjBe,iBAAiBhB,aACjBgB,iBAAiBjB,QACjB;AACA,WAAOiB,MAAMc,iBAAiBxB,UAAAA;EAChC;AAEA,QAAMiE,eAAevD,MAAMmD,qBAAqB;IAAE1D,MAAMH,WAAWG;EAAK,CAAA;AACxE,SAAOO,MAAMsD,YAAYxC,iBAAiByC,cAAcjE,UAAAA;AAC1D;;;AClOA,OAAOkE,aAAY;AAEnB,SAASC,cAAcC,WAAAA,gBAAe;AACtC,SAASC,UAAAA,SAAwBC,qBAAqBC,6BAAAA,4BAA2BC,cAAAA,mBAAkB;AACnG,SAASC,cAAc;AACvB,SAASC,aAAa;AACtB,SAASC,qBAAqB;AAC9B,SAAwBC,uBAAuB;AAC/C,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,WAAW;AACpB,SAASC,uBAAAA,sBAAqBC,8BAAAA,6BAA4BC,8BAA8B;AACxF,SAASC,8BAA8BC,0BAAAA,yBAAwBC,kBAAAA,uBAAsB;AAErF,SAASC,mBAAmBC,0BAAwC;AAI7D,IAAMC,4BAA4B,IAAIC,OAAO;EAClDC,SAAS;EACTC,SAAS;IACPC,UAAU;MACRC,QAAQ;;QAENC,QAAQ;MACV;IACF;EACF;AACF,CAAA;AAKO,IAAMC,cAAN,MAAMA;;EAMXC,YACEC,QACiBC,gBAAgBC,2BAAAA,GAChBC,wBAAwB,IAAIC,4BAAAA,GAC7C;yBAFiBH;iCACAE;AAEjB,SAAKE,UAAUL,0BAAU,IAAIR,OAAAA;EAC/B;EAEA,IAAIQ,SAAiB;AACnB,WAAO,KAAKK;EACd;;;;EAKA,IAAIC,iBAAiB;AACnB,UAAMC,eAAe,KAAKF,QAAQG,IAAI,gCAAA;AACtC,QAAID,cAAc;AAChB,aAAO,IAAIE,gBAAe;QACxBC,KAAK;QACLC,eAAe,IAAIC,uBAAuB;UAACL;SAAa;QACxDM,kBAAkBC,6BAA6B;UAC7CC,YAAY,KAAKV,QAAQG,IAAI,sBAAA;QAC/B,CAAA;MACF,CAAA;IACF;AAGA,WAAO,IAAIC,gBAAe;MACxBC,KAAK;MACLC,eAAe,IAAIK,qBAAoB,KAAKb,qBAAqB;MACjEU,kBAAkBI;IACpB,CAAA;EACF;;;;EAKAC,2BAA2B;AACzB,WAAO,IAAIC,mBAAmB;MAC5BnB,QAAQ,KAAKK;MACbe,cAAc,KAAKnB;MACnBK,gBAAgB,KAAKA;MACrBe,SAAS,KAAKA;IAChB,CAAA;EACF;;;;EAKAC,cAAc;AACZ,WAAO,IAAIC,oBAAoB;MAC7BvB,QAAQ,KAAKK;MACbe,cAAc,KAAKnB;MACnBK,gBAAgB,KAAKA;MACrBe,SAAS,KAAKA;IAChB,CAAA;EACF;;;;EAKAG,mBAAmBC,OAA2B,KAAKP,yBAAwB,GAAgC;AACzG,UAAM,CAACQ,WAAWC,QAAAA,IAAYC,kBAAAA;AAC9B,UAAM/B,SAASgC,mBAAmB;MAChCC,SAASL,KAAKM;MACdC,UAAUP,KAAK9B;MACfsC,MAAMN;IACR,CAAA;AAGA,UAAMO,SAAS,IAAIC,QAAO;MAAExC,UAAU,IAAIyC,oBAAoBV,SAAAA;IAAW,CAAA;AACzE,WAAO;MAACQ;MAAQrC;;EAClB;AACF;AAEO,IAAMwC,YAAY,OAAOC,QAAuBC,QAAuBD,WAAW;AACvF,QAAME,WAAWC,WAAUC,OAAM,EAAGC,MAAK;AAEzC,QAAMC,SAASN,OAAOO,OAAOC,gBAAgBN,UAAUO,cAAcC,KAAKC,IAAI,CAAA;AAE9E,QAAML,OAAOM,MAAMC,WAAU;AAE7BC,EAAAA,QAAOd,OAAOe,aAAaC,SAASC,IAAIX,OAAOY,eAAe,CAAA,EAAGC,EAAE,CAAA;AAEnE,QAAMC,aACJnB,MAAMoB,WAAWC,iBAAiB,MAAMrB,MAAMc,aAAaC,SAASC,IAAIf,QAAAA,CAAAA,GACxE,GAAA;AAGF,SAAOI;AACT;AAEO,IAAMiB,YAAY,OAAOC,KAAoBC,QAAuB;AAEzE,QAAM1B,UAAUyB,KAAKC,GAAAA;AAGrB,QAAM1B,UAAU0B,KAAKD,GAAAA;AACvB;AAEO,IAAME,kBAAkB,OAAO,CAACC,aAAgBC,QAAAA,GAAkBC,aAA6C;AACpH,QAAMC,YAAYD,WAAWF,YAAYI,SAASF,QAAAA,IAAY,MAAMF,YAAYK,YAAW;AAC3FlB,EAAAA,QAAOgB,WAAW,kBAAA;AAElB,QAAMG,QAAQC,IACZN,MAAMO,IAAI,OAAOC,SAAS;AACxB,UAAMC,WAAW,IAAIC,SAAAA;AACrB,UAAMC,YAAY,IAAID,SAAAA;AAEtB,UAAME,iBAAiBV,UAAUW,iBAAiB;MAAEC,YAAYC,YAAWC,WAAWC;IAAK,CAAA;AAC3FzE,QAAI,sBAAA,CAAA,GAAA;;;;;;AACJoE,mBAAeM,UACb,CAACC,mBAAmB;AAClB,cAAQA,eAAeC,OAAK;QAC1B,KAAKL,YAAWM,MAAMC,YAAY;AAChC,gBAAMC,kBAAkBf,KAAKgB,iBAAiBL,cAAAA;AAC9C3E,cAAI,uBAAA,CAAA,GAAA;;;;;;AAEJ+E,0BAAgBL,UACd,CAACO,oBAAoB;AACnB,oBAAQA,gBAAgBL,OAAK;cAC3B,KAAKL,YAAWM,MAAMK,SAAS;AAC7Bf,0BAAUgB,KAAKF,eAAAA;AACfjF,oBAAI,wBAAA,CAAA,GAAA;;;;;;AACJ;cACF;YACF;UACF,GACA,CAACoF,QAAQC,MAAMD,GAAAA,CAAAA;AAEjB;QACF;QAEA,KAAKb,YAAWM,MAAMK,SAAS;AAC7BjB,mBAASkB,KAAKR,cAAAA;AACd3E,cAAI,uBAAA,CAAA,GAAA;;;;;;QACN;MACF;IACF,GACA,CAACoF,QAAQC,MAAMD,GAAAA,CAAAA;AAGjB,UAAMvB,QAAQC,IAAI;MAACG,SAASqB,KAAI;MAAInB,UAAUmB,KAAI;KAAG;EACvD,CAAA,CAAA;AAGF,SAAO5B,UAAU6B;AACnB;",
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", "Client", "EchoProxy", "HaloProxy", "InvitationsProxy", "SpaceProxy", "Invitation", "sanitizeInvitation", "invitation", "invitationId", "type", "kind", "authMethod", "swarmKey", "state", "timeout", "performInvitation", "host", "guest", "options", "hooks", "hostComplete", "guestComplete", "authCode", "hostObservable", "createInvitation", "subscribe", "hostInvitation", "State", "CONNECTING", "onConnecting", "guestObservable", "acceptInvitation", "guestInvitation", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "equals", "CONNECTED", "onConnected", "READY_FOR_AUTHENTICATION", "onReady", "authenticate", "wait", "AUTHENTICATING", "onAuthenticating", "SUCCESS", "onSuccess", "wake", "CANCELLED", "onCancelled", "TIMEOUT", "onTimeout", "error", "onError", "AuthMethod", "NONE", "hostHandler", "getInvitationHandler", "Kind", "SPACE", "invitations", "guestHandler", "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", "getSpace", "createSpace", "Promise", "all", "map", "peer", "hostDone", "Trigger", "guestDone", "hostObservable", "createInvitation", "authMethod", "Invitation", "AuthMethod", "NONE", "subscribe", "hostInvitation", "state", "State", "CONNECTING", "guestObservable", "acceptInvitation", "guestInvitation", "SUCCESS", "wake", "err", "raise", "wait", "key"]
7
7
  }