@dxos/client-services 0.1.41 → 0.1.45-next.45667d4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/lib/browser/{chunk-T73F4MV4.mjs → chunk-IHSMRQ3L.mjs} +985 -867
  2. package/dist/lib/browser/chunk-IHSMRQ3L.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +7 -3
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/packlets/testing/index.mjs +121 -297
  6. package/dist/lib/browser/packlets/testing/index.mjs.map +4 -4
  7. package/dist/lib/node/index.cjs +589 -469
  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 +688 -740
  11. package/dist/lib/node/packlets/testing/index.cjs.map +4 -4
  12. package/dist/types/src/index.d.ts +1 -0
  13. package/dist/types/src/index.d.ts.map +1 -1
  14. package/dist/types/src/packlets/devices/devices-service.d.ts +1 -1
  15. package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
  16. package/dist/types/src/packlets/devtools/devtools.d.ts +4 -2
  17. package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
  18. package/dist/types/src/packlets/devtools/keys.d.ts.map +1 -1
  19. package/dist/types/src/packlets/devtools/network.d.ts +5 -4
  20. package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
  21. package/dist/types/src/packlets/identity/authenticator.d.ts +1 -1
  22. package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
  23. package/dist/types/src/packlets/identity/identity-manager.d.ts +2 -4
  24. package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
  25. package/dist/types/src/packlets/identity/identity.d.ts +1 -1
  26. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  27. package/dist/types/src/packlets/invitations/invitation-extension.d.ts +2 -3
  28. package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -1
  29. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +1 -3
  30. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  31. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +1 -2
  32. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  33. package/dist/types/src/packlets/network/network-service.d.ts +6 -4
  34. package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
  35. package/dist/types/src/packlets/services/client-rpc-server.d.ts +2 -2
  36. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -1
  37. package/dist/types/src/packlets/services/index.d.ts +0 -1
  38. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  39. package/dist/types/src/packlets/services/local-client-services.d.ts +1 -1
  40. package/dist/types/src/packlets/services/local-client-services.d.ts.map +1 -1
  41. package/dist/types/src/packlets/services/service-context.d.ts +4 -2
  42. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  43. package/dist/types/src/packlets/services/service-host.d.ts +16 -9
  44. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  45. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +12 -7
  46. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  47. package/dist/types/src/packlets/spaces/data-space.d.ts +15 -10
  48. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  49. package/dist/types/src/packlets/spaces/genesis.d.ts +5 -0
  50. package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -0
  51. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +4 -4
  52. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  53. package/dist/types/src/packlets/spaces/spaces-service.d.ts +2 -1
  54. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  55. package/dist/types/src/packlets/system/system-service.d.ts +1 -1
  56. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  57. package/dist/types/src/packlets/testing/credential-utils.d.ts +1 -1
  58. package/dist/types/src/packlets/testing/index.d.ts +0 -1
  59. package/dist/types/src/packlets/testing/index.d.ts.map +1 -1
  60. package/dist/types/src/packlets/testing/invitation-utils.d.ts +13 -7
  61. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  62. package/dist/types/src/packlets/testing/test-builder.d.ts +35 -32
  63. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  64. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +1 -1
  65. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
  66. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts +5 -2
  67. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
  68. package/dist/types/src/packlets/vault/vault-resource-lock.d.ts +1 -1
  69. package/dist/types/src/packlets/vault/vault-resource-lock.d.ts.map +1 -1
  70. package/dist/types/src/packlets/vault/worker-runtime.d.ts +1 -1
  71. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  72. package/dist/types/src/packlets/vault/worker-session.d.ts +4 -7
  73. package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
  74. package/package.json +30 -31
  75. package/src/index.ts +1 -0
  76. package/src/packlets/devices/devices-service.ts +5 -5
  77. package/src/packlets/devtools/devtools.ts +25 -4
  78. package/src/packlets/devtools/feeds.ts +10 -10
  79. package/src/packlets/devtools/keys.ts +6 -6
  80. package/src/packlets/devtools/network.ts +14 -13
  81. package/src/packlets/devtools/spaces.ts +4 -4
  82. package/src/packlets/identity/authenticator.test.ts +1 -1
  83. package/src/packlets/identity/authenticator.ts +2 -2
  84. package/src/packlets/identity/identity-manager.test.ts +17 -13
  85. package/src/packlets/identity/identity-manager.ts +21 -22
  86. package/src/packlets/identity/identity-service.ts +3 -3
  87. package/src/packlets/identity/identity.test.ts +65 -36
  88. package/src/packlets/identity/identity.ts +17 -17
  89. package/src/packlets/invitations/device-invitation-protocol.test.ts +1 -1
  90. package/src/packlets/invitations/device-invitation-protocol.ts +7 -7
  91. package/src/packlets/invitations/invitation-extension.ts +16 -27
  92. package/src/packlets/invitations/invitations-handler.ts +17 -25
  93. package/src/packlets/invitations/invitations-service.ts +11 -11
  94. package/src/packlets/invitations/space-invitation-protocol.test.ts +9 -9
  95. package/src/packlets/invitations/space-invitation-protocol.ts +11 -12
  96. package/src/packlets/logging/logging-service.ts +8 -3
  97. package/src/packlets/network/network-service.test.ts +8 -8
  98. package/src/packlets/network/network-service.ts +20 -8
  99. package/src/packlets/services/client-rpc-server.ts +5 -5
  100. package/src/packlets/services/index.ts +0 -1
  101. package/src/packlets/services/local-client-services.ts +1 -1
  102. package/src/packlets/services/service-context.test.ts +3 -3
  103. package/src/packlets/services/service-context.ts +26 -24
  104. package/src/packlets/services/service-host.test.ts +6 -6
  105. package/src/packlets/services/service-host.ts +57 -31
  106. package/src/packlets/services/service-registry.test.ts +20 -38
  107. package/src/packlets/spaces/data-space-manager.test.ts +17 -29
  108. package/src/packlets/spaces/data-space-manager.ts +29 -35
  109. package/src/packlets/spaces/data-space.ts +73 -47
  110. package/src/packlets/spaces/genesis.ts +81 -0
  111. package/src/packlets/spaces/notarization-plugin.test.ts +2 -2
  112. package/src/packlets/spaces/notarization-plugin.ts +12 -12
  113. package/src/packlets/spaces/spaces-service.test.ts +2 -2
  114. package/src/packlets/spaces/spaces-service.ts +21 -10
  115. package/src/packlets/storage/storage.ts +3 -3
  116. package/src/packlets/system/system-service.test.ts +1 -1
  117. package/src/packlets/system/system-service.ts +1 -1
  118. package/src/packlets/testing/credential-utils.ts +4 -4
  119. package/src/packlets/testing/index.ts +0 -1
  120. package/src/packlets/testing/invitation-utils.ts +28 -33
  121. package/src/packlets/testing/test-builder.ts +132 -168
  122. package/src/packlets/vault/iframe-host-runtime.ts +8 -11
  123. package/src/packlets/vault/iframe-proxy-runtime.ts +25 -9
  124. package/src/packlets/vault/shell-runtime.ts +4 -4
  125. package/src/packlets/vault/vault-resource-lock.ts +2 -2
  126. package/src/packlets/vault/worker-runtime.ts +7 -9
  127. package/src/packlets/vault/worker-session.ts +24 -45
  128. package/dist/lib/browser/chunk-T73F4MV4.mjs.map +0 -7
  129. package/dist/types/src/packlets/services/utils.d.ts +0 -7
  130. package/dist/types/src/packlets/services/utils.d.ts.map +0 -1
  131. package/dist/types/src/packlets/testing/host-test-builder.d.ts +0 -43
  132. package/dist/types/src/packlets/testing/host-test-builder.d.ts.map +0 -1
  133. package/dist/types/src/packlets/tests/client-services.test.d.ts +0 -2
  134. package/dist/types/src/packlets/tests/client-services.test.d.ts.map +0 -1
  135. package/dist/types/src/packlets/tests/client.test.d.ts +0 -2
  136. package/dist/types/src/packlets/tests/client.test.d.ts.map +0 -1
  137. package/dist/types/src/packlets/tests/halo-credentials.test.d.ts +0 -2
  138. package/dist/types/src/packlets/tests/halo-credentials.test.d.ts.map +0 -1
  139. package/dist/types/src/packlets/tests/halo-persistent.test.d.ts +0 -2
  140. package/dist/types/src/packlets/tests/halo-persistent.test.d.ts.map +0 -1
  141. package/dist/types/src/packlets/tests/halo-profile.test.d.ts +0 -2
  142. package/dist/types/src/packlets/tests/halo-profile.test.d.ts.map +0 -1
  143. package/dist/types/src/packlets/tests/invitations.test.d.ts +0 -2
  144. package/dist/types/src/packlets/tests/invitations.test.d.ts.map +0 -1
  145. package/dist/types/src/packlets/tests/shared-worker.test.d.ts +0 -2
  146. package/dist/types/src/packlets/tests/shared-worker.test.d.ts.map +0 -1
  147. package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts +0 -2
  148. package/dist/types/src/packlets/tests/spaces-invitations.test.d.ts.map +0 -1
  149. package/dist/types/src/packlets/tests/spaces.test.d.ts +0 -2
  150. package/dist/types/src/packlets/tests/spaces.test.d.ts.map +0 -1
  151. package/dist/types/src/packlets/tests/text.test.d.ts +0 -2
  152. package/dist/types/src/packlets/tests/text.test.d.ts.map +0 -1
  153. package/src/packlets/services/utils.ts +0 -53
  154. package/src/packlets/testing/host-test-builder.ts +0 -163
  155. package/src/packlets/tests/client-services.test.ts +0 -222
  156. package/src/packlets/tests/client.test.ts +0 -140
  157. package/src/packlets/tests/halo-credentials.test.ts +0 -94
  158. package/src/packlets/tests/halo-persistent.test.ts +0 -53
  159. package/src/packlets/tests/halo-profile.test.ts +0 -48
  160. package/src/packlets/tests/invitations.test.ts +0 -389
  161. package/src/packlets/tests/shared-worker.test.ts +0 -92
  162. package/src/packlets/tests/spaces-invitations.test.ts +0 -46
  163. package/src/packlets/tests/spaces.test.ts +0 -147
  164. package/src/packlets/tests/text.test.ts +0 -206
@@ -1,7 +0,0 @@
1
- import { ClientServicesProvider } from '@dxos/client';
2
- import { Config } from '@dxos/config';
3
- /**
4
- * Creates stand-alone services without rpc.
5
- */
6
- export declare const fromHost: (config?: Config) => ClientServicesProvider;
7
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAYtC;;GAEG;AACH,eAAO,MAAM,QAAQ,YAAY,MAAM,KAAkB,sBAKxD,CAAC"}
@@ -1,43 +0,0 @@
1
- import { Config } from '@dxos/config';
2
- import { SnapshotStore, DataPipeline, MetadataStore, SigningContext, SpaceManager } from '@dxos/echo-pipeline';
3
- import { FeedStore } from '@dxos/feed-store';
4
- import { Keyring } from '@dxos/keyring';
5
- import { MemorySignalManagerContext } from '@dxos/messaging';
6
- import { NetworkManager } from '@dxos/network-manager';
7
- import { Storage } from '@dxos/random-access-storage';
8
- import { ClientServicesHost, ServiceContext } from '../services';
9
- export declare const createServiceHost: (config: Config, signalManagerContext: MemorySignalManagerContext) => ClientServicesHost;
10
- export declare const createServiceContext: ({ signalContext, storage }?: {
11
- signalContext?: MemorySignalManagerContext | undefined;
12
- storage?: Storage | undefined;
13
- }) => ServiceContext;
14
- export declare const createPeers: (numPeers: number) => Promise<ServiceContext[]>;
15
- export declare const createIdentity: (peer: ServiceContext) => Promise<ServiceContext>;
16
- export declare const syncItemsLocal: (db1: DataPipeline, db2: DataPipeline) => Promise<void>;
17
- export declare class HostTestBuilder {
18
- readonly signalContext: MemorySignalManagerContext;
19
- createPeer(): TestPeer;
20
- }
21
- export declare type TestPeerProps = {
22
- storage?: Storage;
23
- feedStore?: FeedStore<any>;
24
- metadataStore?: MetadataStore;
25
- keyring?: Keyring;
26
- networkManager?: NetworkManager;
27
- spaceManager?: SpaceManager;
28
- snapshotStore?: SnapshotStore;
29
- };
30
- export declare class TestPeer {
31
- private readonly signalContext;
32
- private _props;
33
- constructor(signalContext: MemorySignalManagerContext);
34
- get storage(): Storage;
35
- get keyring(): Keyring;
36
- get feedStore(): FeedStore<any>;
37
- get metadataStore(): MetadataStore;
38
- get snapshotStore(): SnapshotStore;
39
- get networkManager(): NetworkManager;
40
- get spaceManager(): SpaceManager;
41
- }
42
- export declare const createSigningContext: (keyring: Keyring) => Promise<SigningContext>;
43
- //# sourceMappingURL=host-test-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-test-builder.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/testing/host-test-builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EAEb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAe,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAuB,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAA0B,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAiB,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAElF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMjE,eAAO,MAAM,iBAAiB,WAAY,MAAM,wBAAwB,0BAA0B,uBAUjG,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;oBAchC,CAAC;AAEF,eAAO,MAAM,WAAW,aAAoB,MAAM,8BAUjD,CAAC;AAEF,eAAO,MAAM,cAAc,SAAgB,cAAc,4BAGxD,CAAC;AAIF,eAAO,MAAM,cAAc,QAAe,YAAY,OAAO,YAAY,kBAGxE,CAAC;AAEF,qBAAa,eAAe;IAC1B,SAAgB,aAAa,6BAAoC;IAEjE,UAAU,IAAI,QAAQ;CAGvB;AAED,oBAAY,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,qBAAa,QAAQ;IAGP,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,OAAO,CAAC,MAAM,CAAqB;gBAEN,aAAa,EAAE,0BAA0B;IAEtE,IAAI,OAAO,YAEV;IAED,IAAI,OAAO,YAEV;IAED,IAAI,SAAS,mBAUZ;IAED,IAAI,aAAa,kBAEhB;IAED,IAAI,aAAa,kBAEhB;IAED,IAAI,cAAc,mBAKjB;IAED,IAAI,YAAY,iBAKf;CACF;AAED,eAAO,MAAM,oBAAoB,YAAmB,OAAO,KAAG,QAAQ,cAAc,CAgBnF,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=client-services.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-services.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/client-services.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=client.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/client.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=halo-credentials.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"halo-credentials.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/halo-credentials.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=halo-persistent.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"halo-persistent.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/halo-persistent.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=halo-profile.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"halo-profile.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/halo-profile.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=invitations.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invitations.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/invitations.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=shared-worker.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-worker.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/shared-worker.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=spaces-invitations.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spaces-invitations.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/spaces-invitations.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=spaces.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spaces.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/spaces.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=text.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.test.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/tests/text.test.ts"],"names":[],"mappings":""}
@@ -1,53 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { ClientServicesProvider } from '@dxos/client';
6
- import { Config } from '@dxos/config';
7
- import { log } from '@dxos/log';
8
- import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';
9
- import {
10
- createWebRTCTransportFactory,
11
- MemoryTransportFactory,
12
- NetworkManager,
13
- NetworkManagerOptions
14
- } from '@dxos/network-manager';
15
-
16
- import { LocalClientServices } from './local-client-services';
17
-
18
- /**
19
- * Creates stand-alone services without rpc.
20
- */
21
- export const fromHost = (config: Config = new Config()): ClientServicesProvider => {
22
- return new LocalClientServices({
23
- config,
24
- networkManager: createNetworkManager(config)
25
- });
26
- };
27
-
28
- /**
29
- * Creates a WebRTC network manager connected to the specified signal server.
30
- */
31
- // TODO(burdon): Move to client-services and remove dependencies from here.
32
- const createNetworkManager = (config: Config, options: Partial<NetworkManagerOptions> = {}): NetworkManager => {
33
- const signals = config.get('runtime.services.signaling');
34
- if (signals) {
35
- const {
36
- log = true,
37
- signalManager = new WebsocketSignalManager(signals),
38
- transportFactory = createWebRTCTransportFactory({
39
- iceServers: config.get('runtime.services.ice')
40
- })
41
- } = options;
42
-
43
- return new NetworkManager({ log, signalManager, transportFactory });
44
- }
45
-
46
- // TODO(burdon): Should not provide a memory signal manager since no shared context.
47
- // Use TestClientBuilder for shared memory tests.
48
- log.warn('P2P network is not configured.');
49
- return new NetworkManager({
50
- signalManager: new MemorySignalManager(new MemorySignalManagerContext()),
51
- transportFactory: MemoryTransportFactory
52
- });
53
- };
@@ -1,163 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { createDefaultModelFactory } from '@dxos/client';
6
- import { Config } from '@dxos/config';
7
- import { createCredentialSignerWithChain, CredentialGenerator } from '@dxos/credentials';
8
- import {
9
- SnapshotStore,
10
- DataPipeline,
11
- MetadataStore,
12
- SigningContext,
13
- SpaceManager,
14
- valueEncoding
15
- } from '@dxos/echo-pipeline';
16
- import { testLocalDatabase } from '@dxos/echo-pipeline/testing';
17
- import { FeedFactory, FeedStore } from '@dxos/feed-store';
18
- import { Keyring } from '@dxos/keyring';
19
- import { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';
20
- import { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';
21
- import { createStorage, Storage, StorageType } from '@dxos/random-access-storage';
22
-
23
- import { ClientServicesHost, ServiceContext } from '../services';
24
-
25
- //
26
- // TODO(burdon): Replace with test builder.
27
- //
28
-
29
- export const createServiceHost = (config: Config, signalManagerContext: MemorySignalManagerContext) => {
30
- const networkManager = new NetworkManager({
31
- signalManager: new MemorySignalManager(signalManagerContext),
32
- transportFactory: MemoryTransportFactory
33
- });
34
-
35
- return new ClientServicesHost({
36
- config,
37
- networkManager
38
- });
39
- };
40
-
41
- export const createServiceContext = ({
42
- signalContext = new MemorySignalManagerContext(),
43
- storage = createStorage({ type: StorageType.RAM })
44
- }: {
45
- signalContext?: MemorySignalManagerContext;
46
- storage?: Storage;
47
- } = {}) => {
48
- const networkManager = new NetworkManager({
49
- signalManager: new MemorySignalManager(signalContext),
50
- transportFactory: MemoryTransportFactory
51
- });
52
-
53
- const modelFactory = createDefaultModelFactory();
54
- return new ServiceContext(storage, networkManager, modelFactory);
55
- };
56
-
57
- export const createPeers = async (numPeers: number) => {
58
- const signalContext = new MemorySignalManagerContext();
59
-
60
- return await Promise.all(
61
- Array.from(Array(numPeers)).map(async () => {
62
- const peer = createServiceContext({ signalContext });
63
- await peer.open();
64
- return peer;
65
- })
66
- );
67
- };
68
-
69
- export const createIdentity = async (peer: ServiceContext) => {
70
- await peer.createIdentity();
71
- return peer;
72
- };
73
-
74
- // TODO(burdon): Remove @dxos/client-testing.
75
- // TODO(burdon): Create builder and make configurable.
76
- export const syncItemsLocal = async (db1: DataPipeline, db2: DataPipeline) => {
77
- await testLocalDatabase(db1, db2);
78
- await testLocalDatabase(db2, db1);
79
- };
80
-
81
- export class HostTestBuilder {
82
- public readonly signalContext = new MemorySignalManagerContext();
83
-
84
- createPeer(): TestPeer {
85
- return new TestPeer(this.signalContext);
86
- }
87
- }
88
-
89
- export type TestPeerProps = {
90
- storage?: Storage;
91
- feedStore?: FeedStore<any>;
92
- metadataStore?: MetadataStore;
93
- keyring?: Keyring;
94
- networkManager?: NetworkManager;
95
- spaceManager?: SpaceManager;
96
- snapshotStore?: SnapshotStore;
97
- };
98
-
99
- export class TestPeer {
100
- private _props: TestPeerProps = {};
101
-
102
- constructor(private readonly signalContext: MemorySignalManagerContext) {}
103
-
104
- get storage() {
105
- return (this._props.storage ??= createStorage({ type: StorageType.RAM }));
106
- }
107
-
108
- get keyring() {
109
- return (this._props.keyring ??= new Keyring(this.storage.createDirectory('keyring')));
110
- }
111
-
112
- get feedStore() {
113
- return (this._props.feedStore ??= new FeedStore({
114
- factory: new FeedFactory({
115
- root: this.storage.createDirectory('feeds'),
116
- signer: this.keyring,
117
- hypercore: {
118
- valueEncoding
119
- }
120
- })
121
- }));
122
- }
123
-
124
- get metadataStore() {
125
- return (this._props.metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));
126
- }
127
-
128
- get snapshotStore() {
129
- return (this._props.snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));
130
- }
131
-
132
- get networkManager() {
133
- return (this._props.networkManager ??= new NetworkManager({
134
- signalManager: new MemorySignalManager(this.signalContext),
135
- transportFactory: MemoryTransportFactory
136
- }));
137
- }
138
-
139
- get spaceManager() {
140
- return (this._props.spaceManager ??= new SpaceManager({
141
- feedStore: this.feedStore,
142
- networkManager: this.networkManager
143
- }));
144
- }
145
- }
146
-
147
- export const createSigningContext = async (keyring: Keyring): Promise<SigningContext> => {
148
- const identityKey = await keyring.createKey();
149
- const deviceKey = await keyring.createKey();
150
-
151
- return {
152
- identityKey,
153
- deviceKey,
154
- credentialSigner: createCredentialSignerWithChain(
155
- keyring,
156
- {
157
- credential: await new CredentialGenerator(keyring, identityKey, deviceKey).createDeviceAuthorization(deviceKey)
158
- },
159
- deviceKey
160
- ),
161
- recordCredential: async () => {} // No-op.
162
- };
163
- };
@@ -1,222 +0,0 @@
1
- //
2
- // Copyright 2020 DXOS.org
3
- //
4
-
5
- import { expect } from 'chai';
6
- import assert from 'node:assert';
7
- import waitForExpect from 'wait-for-expect';
8
-
9
- import { Trigger } from '@dxos/async';
10
- import { Client, Space, SpaceProxy } from '@dxos/client';
11
- import { log } from '@dxos/log';
12
- import { Invitation, SpaceMember } from '@dxos/protocols/proto/dxos/client/services';
13
- import { describe, test, afterTest } from '@dxos/test';
14
-
15
- import { performInvitation, syncItems, TestBuilder } from '../testing';
16
-
17
- // TODO(burdon): Use as set-up for test suite.
18
- // TODO(burdon): Timeouts and progress callback/events.
19
-
20
- describe('Client services', () => {
21
- test('creates client with local host', async () => {
22
- const testBuilder = new TestBuilder();
23
-
24
- const servicesProvider = testBuilder.createLocal();
25
- await servicesProvider.open();
26
- afterTest(() => servicesProvider.close());
27
-
28
- const client = new Client({ services: servicesProvider });
29
- await client.initialize();
30
- afterTest(() => client.destroy());
31
- expect(client.initialized).to.be.true;
32
- });
33
-
34
- test('creates client with remote server', async () => {
35
- const testBuilder = new TestBuilder();
36
-
37
- const peer = testBuilder.createClientServicesHost();
38
- await peer.open();
39
- afterTest(() => peer.close());
40
-
41
- const [client, server] = testBuilder.createClientServer(peer);
42
- void server.open();
43
- afterTest(() => server.close());
44
-
45
- await client.initialize();
46
- afterTest(() => client.destroy());
47
- expect(client.initialized).to.be.true;
48
- });
49
-
50
- test('creates clients with multiple peers connected via memory transport', async () => {
51
- const testBuilder = new TestBuilder();
52
-
53
- {
54
- const peer1 = testBuilder.createClientServicesHost();
55
- await peer1.open();
56
- afterTest(() => peer1.close());
57
-
58
- {
59
- const [client1a, server1a] = testBuilder.createClientServer(peer1);
60
- void server1a.open();
61
- await client1a.initialize();
62
- afterTest(() => Promise.all([client1a.destroy(), server1a.close()]));
63
- expect(client1a.initialized).to.be.true;
64
-
65
- await client1a.halo.createIdentity();
66
- }
67
- {
68
- const [client1b, server1b] = testBuilder.createClientServer(peer1);
69
- void server1b.open();
70
- await client1b.initialize();
71
- afterTest(() => Promise.all([client1b.destroy(), server1b.close()]));
72
- expect(client1b.initialized).to.be.true;
73
-
74
- // TODO(burdon): Test profile is available.
75
- }
76
- }
77
-
78
- {
79
- const peer2 = testBuilder.createClientServicesHost();
80
- await peer2.open();
81
- afterTest(() => peer2.close());
82
-
83
- {
84
- const [client2a, server2a] = testBuilder.createClientServer(peer2);
85
- void server2a.open();
86
- await client2a.initialize();
87
- afterTest(() => Promise.all([client2a.destroy(), server2a.close()]));
88
- expect(client2a.initialized).to.be.true;
89
-
90
- await client2a.halo.createIdentity();
91
- }
92
- }
93
- });
94
-
95
- test('creates identity and invites peer', async () => {
96
- const testBuilder = new TestBuilder();
97
-
98
- const peer1 = testBuilder.createClientServicesHost();
99
- const peer2 = testBuilder.createClientServicesHost();
100
-
101
- await peer1.open();
102
- await peer2.open();
103
-
104
- const [client1, server1] = testBuilder.createClientServer(peer1);
105
- const [client2, server2] = testBuilder.createClientServer(peer2);
106
-
107
- // Don't wait (otherwise will block).
108
- {
109
- void server1.open();
110
- void server2.open();
111
-
112
- await client1.initialize();
113
- await client2.initialize();
114
-
115
- await client1.halo.createIdentity();
116
- }
117
-
118
- const [{ invitation: hostInvitation }, { invitation: guestInvitation }] = await Promise.all(
119
- performInvitation({
120
- host: client1.halo,
121
- guest: client2.halo,
122
- options: { authMethod: Invitation.AuthMethod.SHARED_SECRET }
123
- })
124
- );
125
-
126
- // Check same identity.
127
- expect(hostInvitation!.identityKey).not.to.exist;
128
- expect(guestInvitation?.identityKey).to.deep.eq(client1.halo.identity.get()!.identityKey);
129
- expect(guestInvitation?.identityKey).to.deep.eq(client2.halo.identity.get()!.identityKey);
130
- expect(hostInvitation?.state).to.eq(Invitation.State.SUCCESS);
131
- expect(guestInvitation?.state).to.eq(Invitation.State.SUCCESS);
132
-
133
- // Check devices.
134
- // TODO(burdon): Incorrect number of devices.
135
- await waitForExpect(async () => {
136
- expect(client1.halo.devices.get()).to.have.lengthOf(2);
137
- expect(client2.halo.devices.get()).to.have.lengthOf(2);
138
- });
139
- });
140
-
141
- test('synchronizes data between two spaces after completing invitation', async () => {
142
- const testBuilder = new TestBuilder();
143
-
144
- const peer1 = testBuilder.createClientServicesHost();
145
- const peer2 = testBuilder.createClientServicesHost();
146
-
147
- await peer1.open();
148
- await peer2.open();
149
-
150
- const [client1, server1] = testBuilder.createClientServer(peer1);
151
- const [client2, server2] = testBuilder.createClientServer(peer2);
152
-
153
- // Don't wait (otherwise will block).
154
- {
155
- void server1.open();
156
- void server2.open();
157
-
158
- await client1.initialize();
159
- await client2.initialize();
160
- await client1.halo.createIdentity({ displayName: 'Peer 1' });
161
- await client2.halo.createIdentity({ displayName: 'Peer 2' });
162
- }
163
- log('initialized');
164
-
165
- afterTest(() => Promise.all([client1.destroy(), server1.close(), peer1.close()]));
166
- afterTest(() => Promise.all([client2.destroy(), server2.close(), peer2.close()]));
167
-
168
- const hostSpace = await client1.createSpace();
169
- log('createSpace', { key: hostSpace.key });
170
- const [{ invitation: hostInvitation }, { invitation: guestInvitation }] = await Promise.all(
171
- performInvitation({
172
- host: hostSpace as SpaceProxy,
173
- guest: client2,
174
- options: { authMethod: Invitation.AuthMethod.SHARED_SECRET }
175
- })
176
- );
177
-
178
- expect(guestInvitation?.spaceKey).to.deep.eq(hostSpace.key);
179
- expect(hostInvitation?.spaceKey).to.deep.eq(guestInvitation?.spaceKey);
180
- expect(hostInvitation?.state).to.eq(Invitation.State.SUCCESS);
181
-
182
- log('Invitation complete');
183
-
184
- // TODO(burdon): Space should now be available?
185
- const trigger = new Trigger<Space>();
186
- await waitForExpect(() => {
187
- const guestSpace = client2.getSpace(guestInvitation!.spaceKey!);
188
- assert(guestSpace);
189
- expect(guestSpace).to.exist;
190
- trigger.wake(guestSpace);
191
- });
192
-
193
- const guestSpace = await trigger.wait();
194
-
195
- for (const space of [hostSpace, guestSpace]) {
196
- await waitForExpect(() => {
197
- expect(space.members.get()).to.deep.equal([
198
- {
199
- identity: {
200
- identityKey: client1.halo.identity.get()!.identityKey,
201
- profile: {
202
- displayName: 'Peer 1'
203
- }
204
- },
205
- presence: SpaceMember.PresenceState.ONLINE
206
- },
207
- {
208
- identity: {
209
- identityKey: client2.halo.identity.get()!.identityKey,
210
- profile: {
211
- displayName: 'Peer 2'
212
- }
213
- },
214
- presence: SpaceMember.PresenceState.ONLINE
215
- }
216
- ]);
217
- }, 3_000);
218
- }
219
-
220
- await syncItems(hostSpace.internal.db, guestSpace.internal.db);
221
- });
222
- });