@dxos/client-services 0.1.2 → 0.1.3

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 (282) hide show
  1. package/dist/src/index.d.ts +4 -1
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +4 -1
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/packlets/deprecated/index.d.ts +5 -0
  6. package/dist/src/packlets/deprecated/index.d.ts.map +1 -0
  7. package/dist/src/packlets/{services/impl → deprecated}/index.js +1 -3
  8. package/dist/src/packlets/deprecated/index.js.map +1 -0
  9. package/dist/src/packlets/{invitations/common.d.ts → deprecated/invitations.d.ts} +14 -2
  10. package/dist/src/packlets/deprecated/invitations.d.ts.map +1 -0
  11. package/dist/src/packlets/{invitations/common.js → deprecated/invitations.js} +1 -1
  12. package/dist/src/packlets/deprecated/invitations.js.map +1 -0
  13. package/dist/src/packlets/{services/impl → deprecated}/profile.d.ts +5 -5
  14. package/dist/src/packlets/deprecated/profile.d.ts.map +1 -0
  15. package/dist/src/packlets/{services/impl → deprecated}/profile.js +10 -10
  16. package/dist/src/packlets/deprecated/profile.js.map +1 -0
  17. package/dist/src/packlets/deprecated/space.d.ts +23 -0
  18. package/dist/src/packlets/deprecated/space.d.ts.map +1 -0
  19. package/dist/src/packlets/deprecated/space.js +206 -0
  20. package/dist/src/packlets/deprecated/space.js.map +1 -0
  21. package/dist/src/packlets/{services/impl → deprecated}/system.d.ts +2 -2
  22. package/dist/src/packlets/deprecated/system.d.ts.map +1 -0
  23. package/dist/src/packlets/{services/impl → deprecated}/system.js +3 -3
  24. package/dist/src/packlets/deprecated/system.js.map +1 -0
  25. package/dist/src/packlets/deprecated/tracing.d.ts +12 -0
  26. package/dist/src/packlets/deprecated/tracing.d.ts.map +1 -0
  27. package/dist/src/packlets/{services/impl → deprecated}/tracing.js +3 -3
  28. package/dist/src/packlets/deprecated/tracing.js.map +1 -0
  29. package/dist/src/packlets/{services/impl → devtools}/devtools.d.ts +11 -7
  30. package/dist/src/packlets/devtools/devtools.d.ts.map +1 -0
  31. package/dist/src/packlets/devtools/devtools.js +86 -0
  32. package/dist/src/packlets/devtools/devtools.js.map +1 -0
  33. package/dist/src/packlets/devtools/feeds.d.ts.map +1 -1
  34. package/dist/src/packlets/devtools/feeds.js +28 -26
  35. package/dist/src/packlets/devtools/feeds.js.map +1 -1
  36. package/dist/src/packlets/devtools/index.d.ts +1 -1
  37. package/dist/src/packlets/devtools/index.d.ts.map +1 -1
  38. package/dist/src/packlets/devtools/index.js +1 -1
  39. package/dist/src/packlets/devtools/index.js.map +1 -1
  40. package/dist/src/packlets/devtools/spaces.d.ts +2 -2
  41. package/dist/src/packlets/devtools/spaces.d.ts.map +1 -1
  42. package/dist/src/packlets/devtools/spaces.js +13 -13
  43. package/dist/src/packlets/devtools/spaces.js.map +1 -1
  44. package/dist/src/packlets/identity/devices-service-impl.d.ts +10 -0
  45. package/dist/src/packlets/identity/devices-service-impl.d.ts.map +1 -0
  46. package/dist/src/packlets/identity/devices-service-impl.js +47 -0
  47. package/dist/src/packlets/identity/devices-service-impl.js.map +1 -0
  48. package/dist/src/packlets/identity/identity-manager.test.js +7 -11
  49. package/dist/src/packlets/identity/identity-manager.test.js.map +1 -1
  50. package/dist/src/packlets/identity/identity.d.ts +2 -0
  51. package/dist/src/packlets/identity/identity.d.ts.map +1 -1
  52. package/dist/src/packlets/identity/identity.js +4 -1
  53. package/dist/src/packlets/identity/identity.js.map +1 -1
  54. package/dist/src/packlets/identity/identity.test.js +2 -3
  55. package/dist/src/packlets/identity/identity.test.js.map +1 -1
  56. package/dist/src/packlets/invitations/encoder.d.ts +9 -0
  57. package/dist/src/packlets/invitations/encoder.d.ts.map +1 -0
  58. package/dist/src/packlets/invitations/encoder.js +27 -0
  59. package/dist/src/packlets/invitations/encoder.js.map +1 -0
  60. package/dist/src/packlets/invitations/encoder.test.d.ts +2 -0
  61. package/dist/src/packlets/invitations/encoder.test.d.ts.map +1 -0
  62. package/dist/src/packlets/invitations/encoder.test.js +19 -0
  63. package/dist/src/packlets/invitations/encoder.test.js.map +1 -0
  64. package/dist/src/packlets/invitations/halo-invitations.d.ts +3 -3
  65. package/dist/src/packlets/invitations/halo-invitations.d.ts.map +1 -1
  66. package/dist/src/packlets/invitations/halo-invitations.js +14 -10
  67. package/dist/src/packlets/invitations/halo-invitations.js.map +1 -1
  68. package/dist/src/packlets/invitations/halo-invitations.test.d.ts +2 -0
  69. package/dist/src/packlets/invitations/halo-invitations.test.d.ts.map +1 -0
  70. package/dist/src/packlets/{services/testing/halo.test.js → invitations/halo-invitations.test.js} +6 -6
  71. package/dist/src/packlets/invitations/halo-invitations.test.js.map +1 -0
  72. package/dist/src/packlets/invitations/index.d.ts +6 -3
  73. package/dist/src/packlets/invitations/index.d.ts.map +1 -1
  74. package/dist/src/packlets/invitations/index.js +6 -3
  75. package/dist/src/packlets/invitations/index.js.map +1 -1
  76. package/dist/src/packlets/invitations/invitations-proxy.d.ts +14 -0
  77. package/dist/src/packlets/invitations/invitations-proxy.d.ts.map +1 -0
  78. package/dist/src/packlets/invitations/invitations-proxy.js +126 -0
  79. package/dist/src/packlets/invitations/invitations-proxy.js.map +1 -0
  80. package/dist/src/packlets/invitations/invitations.d.ts +90 -0
  81. package/dist/src/packlets/invitations/invitations.d.ts.map +1 -0
  82. package/dist/src/packlets/invitations/invitations.js +55 -0
  83. package/dist/src/packlets/invitations/invitations.js.map +1 -0
  84. package/dist/src/packlets/invitations/space-invitations-handler.d.ts +24 -0
  85. package/dist/src/packlets/invitations/space-invitations-handler.d.ts.map +1 -0
  86. package/dist/src/packlets/invitations/space-invitations-handler.js +232 -0
  87. package/dist/src/packlets/invitations/space-invitations-handler.js.map +1 -0
  88. package/dist/src/packlets/invitations/space-invitations-handler.test.d.ts +2 -0
  89. package/dist/src/packlets/invitations/space-invitations-handler.test.d.ts.map +1 -0
  90. package/dist/src/packlets/invitations/space-invitations-handler.test.js +131 -0
  91. package/dist/src/packlets/invitations/space-invitations-handler.test.js.map +1 -0
  92. package/dist/src/packlets/invitations/space-invitations-proxy.d.ts +11 -0
  93. package/dist/src/packlets/invitations/space-invitations-proxy.d.ts.map +1 -0
  94. package/dist/src/packlets/invitations/space-invitations-proxy.js +17 -0
  95. package/dist/src/packlets/invitations/space-invitations-proxy.js.map +1 -0
  96. package/dist/src/packlets/invitations/space-invitations-service.d.ts +22 -0
  97. package/dist/src/packlets/invitations/space-invitations-service.d.ts.map +1 -0
  98. package/dist/src/packlets/invitations/space-invitations-service.js +189 -0
  99. package/dist/src/packlets/invitations/space-invitations-service.js.map +1 -0
  100. package/dist/src/packlets/invitations/space-invitations-service.test.d.ts +2 -0
  101. package/dist/src/packlets/invitations/space-invitations-service.test.d.ts.map +1 -0
  102. package/dist/src/packlets/invitations/space-invitations-service.test.js +100 -0
  103. package/dist/src/packlets/invitations/space-invitations-service.test.js.map +1 -0
  104. package/dist/src/packlets/services/index.d.ts +3 -2
  105. package/dist/src/packlets/services/index.d.ts.map +1 -1
  106. package/dist/src/packlets/services/index.js +3 -2
  107. package/dist/src/packlets/services/index.js.map +1 -1
  108. package/dist/src/packlets/services/service-context.d.ts +4 -7
  109. package/dist/src/packlets/services/service-context.d.ts.map +1 -1
  110. package/dist/src/packlets/services/service-context.js +9 -25
  111. package/dist/src/packlets/services/service-context.js.map +1 -1
  112. package/dist/src/packlets/services/service-definitions.d.ts +30 -0
  113. package/dist/src/packlets/services/service-definitions.d.ts.map +1 -0
  114. package/dist/src/packlets/services/{services.js → service-definitions.js} +9 -5
  115. package/dist/src/packlets/services/service-definitions.js.map +1 -0
  116. package/dist/src/packlets/services/service-host.d.ts +9 -12
  117. package/dist/src/packlets/services/service-host.d.ts.map +1 -1
  118. package/dist/src/packlets/services/service-host.js +55 -54
  119. package/dist/src/packlets/services/service-host.js.map +1 -1
  120. package/dist/src/packlets/services/service-host.test.js +7 -17
  121. package/dist/src/packlets/services/service-host.test.js.map +1 -1
  122. package/dist/src/packlets/services/service-proxy.d.ts +17 -0
  123. package/dist/src/packlets/services/service-proxy.d.ts.map +1 -0
  124. package/dist/src/packlets/services/service-proxy.js +48 -0
  125. package/dist/src/packlets/services/service-proxy.js.map +1 -0
  126. package/dist/src/packlets/services/service-registry.d.ts +12 -0
  127. package/dist/src/packlets/services/service-registry.d.ts.map +1 -0
  128. package/dist/src/packlets/services/service-registry.js +24 -0
  129. package/dist/src/packlets/services/service-registry.js.map +1 -0
  130. package/dist/src/packlets/services/service-registry.test.d.ts +2 -0
  131. package/dist/src/packlets/services/service-registry.test.d.ts.map +1 -0
  132. package/dist/src/packlets/services/service-registry.test.js +75 -0
  133. package/dist/src/packlets/services/service-registry.test.js.map +1 -0
  134. package/dist/src/packlets/services/signer.d.ts +0 -3
  135. package/dist/src/packlets/services/signer.d.ts.map +1 -1
  136. package/dist/src/packlets/spaces/index.d.ts +2 -0
  137. package/dist/src/packlets/spaces/index.d.ts.map +1 -0
  138. package/dist/src/packlets/spaces/index.js +21 -0
  139. package/dist/src/packlets/spaces/index.js.map +1 -0
  140. package/dist/src/packlets/spaces/spaces-service.d.ts +11 -0
  141. package/dist/src/packlets/spaces/spaces-service.d.ts.map +1 -0
  142. package/dist/src/packlets/spaces/spaces-service.js +22 -0
  143. package/dist/src/packlets/spaces/spaces-service.js.map +1 -0
  144. package/dist/src/packlets/storage/storage.js +1 -1
  145. package/dist/src/packlets/storage/storage.js.map +1 -1
  146. package/dist/src/packlets/testing/index.d.ts +2 -0
  147. package/dist/src/packlets/testing/index.d.ts.map +1 -0
  148. package/dist/src/packlets/testing/index.js +21 -0
  149. package/dist/src/packlets/testing/index.js.map +1 -0
  150. package/dist/src/packlets/testing/test-builder.d.ts +14 -0
  151. package/dist/src/packlets/testing/test-builder.d.ts.map +1 -0
  152. package/dist/src/packlets/testing/test-builder.js +65 -0
  153. package/dist/src/packlets/testing/test-builder.js.map +1 -0
  154. package/dist/src/packlets/vault/iframe-runtime.d.ts +19 -0
  155. package/dist/src/packlets/vault/iframe-runtime.d.ts.map +1 -0
  156. package/dist/src/packlets/vault/iframe-runtime.js +54 -0
  157. package/dist/src/packlets/vault/iframe-runtime.js.map +1 -0
  158. package/dist/src/packlets/vault/index.d.ts +4 -0
  159. package/dist/src/packlets/vault/index.d.ts.map +1 -0
  160. package/dist/src/packlets/vault/index.js +23 -0
  161. package/dist/src/packlets/vault/index.js.map +1 -0
  162. package/dist/src/packlets/vault/services.d.ts +13 -0
  163. package/dist/src/packlets/vault/services.d.ts.map +1 -0
  164. package/dist/src/packlets/vault/services.js +15 -0
  165. package/dist/src/packlets/vault/services.js.map +1 -0
  166. package/dist/src/packlets/vault/worker-runtime.d.ts +32 -0
  167. package/dist/src/packlets/vault/worker-runtime.d.ts.map +1 -0
  168. package/dist/src/packlets/vault/worker-runtime.js +94 -0
  169. package/dist/src/packlets/vault/worker-runtime.js.map +1 -0
  170. package/dist/src/packlets/vault/worker-session.d.ts +29 -0
  171. package/dist/src/packlets/vault/worker-session.d.ts.map +1 -0
  172. package/dist/src/packlets/vault/worker-session.js +84 -0
  173. package/dist/src/packlets/vault/worker-session.js.map +1 -0
  174. package/package.json +26 -26
  175. package/src/index.ts +5 -2
  176. package/src/packlets/{services/impl → deprecated}/index.ts +1 -4
  177. package/src/packlets/{invitations/common.ts → deprecated/invitations.ts} +18 -3
  178. package/src/packlets/{services/impl → deprecated}/profile.ts +13 -13
  179. package/src/packlets/deprecated/space.ts +245 -0
  180. package/src/packlets/{services/impl → deprecated}/system.ts +2 -2
  181. package/src/packlets/{services/impl → deprecated}/tracing.ts +2 -2
  182. package/src/packlets/{services/impl → devtools}/devtools.ts +33 -34
  183. package/src/packlets/devtools/feeds.ts +31 -27
  184. package/src/packlets/devtools/index.ts +1 -1
  185. package/src/packlets/devtools/spaces.ts +19 -18
  186. package/src/packlets/identity/devices-service-impl.ts +54 -0
  187. package/src/packlets/identity/identity-manager.test.ts +7 -8
  188. package/src/packlets/identity/identity.test.ts +2 -3
  189. package/src/packlets/identity/identity.ts +5 -1
  190. package/src/packlets/invitations/encoder.test.ts +22 -0
  191. package/src/packlets/invitations/encoder.ts +26 -0
  192. package/src/packlets/{services/testing/halo.test.ts → invitations/halo-invitations.test.ts} +5 -5
  193. package/src/packlets/invitations/halo-invitations.ts +12 -10
  194. package/src/packlets/invitations/index.ts +6 -3
  195. package/src/packlets/invitations/invitations-proxy.ts +157 -0
  196. package/src/packlets/invitations/invitations.ts +149 -0
  197. package/src/packlets/invitations/space-invitations-handler.test.ts +154 -0
  198. package/src/packlets/invitations/space-invitations-handler.ts +266 -0
  199. package/src/packlets/invitations/space-invitations-proxy.ts +16 -0
  200. package/src/packlets/invitations/space-invitations-service.test.ts +129 -0
  201. package/src/packlets/invitations/space-invitations-service.ts +196 -0
  202. package/src/packlets/services/index.ts +3 -2
  203. package/src/packlets/services/service-context.ts +9 -31
  204. package/src/packlets/services/service-definitions.ts +54 -0
  205. package/src/packlets/services/service-host.test.ts +12 -24
  206. package/src/packlets/services/service-host.ts +64 -64
  207. package/src/packlets/services/service-proxy.ts +54 -0
  208. package/src/packlets/services/service-registry.test.ts +95 -0
  209. package/src/packlets/services/service-registry.ts +24 -0
  210. package/src/packlets/services/signer.ts +1 -3
  211. package/src/packlets/spaces/index.ts +5 -0
  212. package/src/packlets/spaces/spaces-service.ts +28 -0
  213. package/src/packlets/storage/storage.ts +1 -1
  214. package/src/packlets/testing/index.ts +5 -0
  215. package/src/packlets/testing/test-builder.ts +79 -0
  216. package/src/packlets/vault/iframe-runtime.ts +68 -0
  217. package/src/packlets/vault/index.ts +7 -0
  218. package/src/packlets/vault/services.ts +26 -0
  219. package/src/packlets/vault/worker-runtime.ts +111 -0
  220. package/src/packlets/vault/worker-session.ts +113 -0
  221. package/dist/src/packlets/devtools/devtools-host-events.d.ts +0 -5
  222. package/dist/src/packlets/devtools/devtools-host-events.d.ts.map +0 -1
  223. package/dist/src/packlets/devtools/devtools-host-events.js +0 -14
  224. package/dist/src/packlets/devtools/devtools-host-events.js.map +0 -1
  225. package/dist/src/packlets/invitations/common.d.ts.map +0 -1
  226. package/dist/src/packlets/invitations/common.js.map +0 -1
  227. package/dist/src/packlets/invitations/invitation-wrapper.d.ts +0 -36
  228. package/dist/src/packlets/invitations/invitation-wrapper.d.ts.map +0 -1
  229. package/dist/src/packlets/invitations/invitation-wrapper.js +0 -104
  230. package/dist/src/packlets/invitations/invitation-wrapper.js.map +0 -1
  231. package/dist/src/packlets/invitations/space-invitations.d.ts +0 -25
  232. package/dist/src/packlets/invitations/space-invitations.d.ts.map +0 -1
  233. package/dist/src/packlets/invitations/space-invitations.js +0 -136
  234. package/dist/src/packlets/invitations/space-invitations.js.map +0 -1
  235. package/dist/src/packlets/services/impl/devtools.d.ts.map +0 -1
  236. package/dist/src/packlets/services/impl/devtools.js +0 -77
  237. package/dist/src/packlets/services/impl/devtools.js.map +0 -1
  238. package/dist/src/packlets/services/impl/halo.d.ts +0 -20
  239. package/dist/src/packlets/services/impl/halo.d.ts.map +0 -1
  240. package/dist/src/packlets/services/impl/halo.js +0 -93
  241. package/dist/src/packlets/services/impl/halo.js.map +0 -1
  242. package/dist/src/packlets/services/impl/index.d.ts +0 -6
  243. package/dist/src/packlets/services/impl/index.d.ts.map +0 -1
  244. package/dist/src/packlets/services/impl/index.js.map +0 -1
  245. package/dist/src/packlets/services/impl/party.d.ts +0 -25
  246. package/dist/src/packlets/services/impl/party.d.ts.map +0 -1
  247. package/dist/src/packlets/services/impl/party.js +0 -265
  248. package/dist/src/packlets/services/impl/party.js.map +0 -1
  249. package/dist/src/packlets/services/impl/profile.d.ts.map +0 -1
  250. package/dist/src/packlets/services/impl/profile.js.map +0 -1
  251. package/dist/src/packlets/services/impl/system.d.ts.map +0 -1
  252. package/dist/src/packlets/services/impl/system.js.map +0 -1
  253. package/dist/src/packlets/services/impl/tracing.d.ts +0 -12
  254. package/dist/src/packlets/services/impl/tracing.d.ts.map +0 -1
  255. package/dist/src/packlets/services/impl/tracing.js.map +0 -1
  256. package/dist/src/packlets/services/service-factory.d.ts +0 -15
  257. package/dist/src/packlets/services/service-factory.d.ts.map +0 -1
  258. package/dist/src/packlets/services/service-factory.js +0 -25
  259. package/dist/src/packlets/services/service-factory.js.map +0 -1
  260. package/dist/src/packlets/services/services.d.ts +0 -19
  261. package/dist/src/packlets/services/services.d.ts.map +0 -1
  262. package/dist/src/packlets/services/services.js.map +0 -1
  263. package/dist/src/packlets/services/testing/halo.test.d.ts +0 -2
  264. package/dist/src/packlets/services/testing/halo.test.d.ts.map +0 -1
  265. package/dist/src/packlets/services/testing/halo.test.js.map +0 -1
  266. package/dist/src/packlets/services/testing/spaces.test.d.ts +0 -2
  267. package/dist/src/packlets/services/testing/spaces.test.d.ts.map +0 -1
  268. package/dist/src/packlets/services/testing/spaces.test.js +0 -68
  269. package/dist/src/packlets/services/testing/spaces.test.js.map +0 -1
  270. package/dist/src/packlets/services/testing/testing.d.ts +0 -8
  271. package/dist/src/packlets/services/testing/testing.d.ts.map +0 -1
  272. package/dist/src/packlets/services/testing/testing.js +0 -23
  273. package/dist/src/packlets/services/testing/testing.js.map +0 -1
  274. package/src/packlets/devtools/devtools-host-events.ts +0 -8
  275. package/src/packlets/invitations/invitation-wrapper.ts +0 -140
  276. package/src/packlets/invitations/space-invitations.ts +0 -159
  277. package/src/packlets/services/impl/halo.ts +0 -107
  278. package/src/packlets/services/impl/party.ts +0 -305
  279. package/src/packlets/services/service-factory.ts +0 -35
  280. package/src/packlets/services/services.ts +0 -39
  281. package/src/packlets/services/testing/spaces.test.ts +0 -87
  282. package/src/packlets/services/testing/testing.ts +0 -28
@@ -0,0 +1,111 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ import assert from 'node:assert';
6
+
7
+ import { Trigger } from '@dxos/async';
8
+ import { Config } from '@dxos/config';
9
+ import { WebsocketSignalManager } from '@dxos/messaging';
10
+ import { NetworkManager, WebRTCTransportProxyFactory } from '@dxos/network-manager';
11
+ import { PortMuxer } from '@dxos/rpc-tunnel';
12
+ import { MaybePromise } from '@dxos/util';
13
+
14
+ import { ClientServicesHost } from '../services';
15
+ import { WorkerSession } from './worker-session';
16
+
17
+ export type CreateSessionParams = {
18
+ portMuxer: PortMuxer;
19
+ };
20
+
21
+ /**
22
+ * Runtime for the shared worker.
23
+ * Manages connections from proxies (in tabs).
24
+ * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.
25
+ */
26
+ export class WorkerRuntime {
27
+ private readonly _transportFactory = new WebRTCTransportProxyFactory();
28
+ private readonly _ready = new Trigger();
29
+ private readonly sessions = new Set<WorkerSession>();
30
+ private _sessionForNetworking?: WorkerSession;
31
+ private _clientServices!: ClientServicesHost;
32
+ private _config!: Config;
33
+
34
+ // prettier-ignore
35
+ constructor(
36
+ private readonly _configProvider: () => MaybePromise<Config>
37
+ ) {}
38
+
39
+ async start() {
40
+ this._config = await this._configProvider();
41
+ const signalServer = this._config.get('runtime.services.signal.server');
42
+ // TODO(wittjosiah): Networking shouldn't be required.
43
+ assert(signalServer);
44
+ this._clientServices = new ClientServicesHost({
45
+ config: this._config,
46
+ networkManager: new NetworkManager({
47
+ log: true,
48
+ signalManager: new WebsocketSignalManager([signalServer]),
49
+ transportFactory: this._transportFactory
50
+ })
51
+ });
52
+
53
+ await this._clientServices.open();
54
+ this._ready.wake();
55
+ }
56
+
57
+ async stop() {
58
+ // TODO(dmaretskyi): Terminate active sessions.
59
+ await this._clientServices.close();
60
+ }
61
+
62
+ /**
63
+ * Create a new session.
64
+ */
65
+ async createSession({ portMuxer }: CreateSessionParams) {
66
+ const appPort = portMuxer.createWorkerPort({ channel: 'dxos:app' });
67
+ const systemPort = portMuxer.createWorkerPort({ channel: 'dxos:system' });
68
+
69
+ await this._ready.wait();
70
+
71
+ const session = new WorkerSession({
72
+ clientServices: this._clientServices,
73
+ appPort,
74
+ systemPort
75
+ });
76
+
77
+ // When tab is closed.
78
+ session.onClose.set(async () => {
79
+ this.sessions.delete(session);
80
+ this._reconnectWebrtc();
81
+ });
82
+
83
+ await session.open();
84
+ this.sessions.add(session);
85
+
86
+ this._reconnectWebrtc();
87
+ }
88
+
89
+ /**
90
+ * Selects one of the existing session fro WebRTC networking.
91
+ */
92
+ private _reconnectWebrtc() {
93
+ // Check if current session is already closed.
94
+ if (this._sessionForNetworking) {
95
+ if (!this.sessions.has(this._sessionForNetworking)) {
96
+ this._sessionForNetworking = undefined;
97
+ }
98
+ }
99
+
100
+ // Select existing session.
101
+ if (!this._sessionForNetworking) {
102
+ const selected = Array.from(this.sessions).find((session) => session.bridgeService);
103
+ if (selected) {
104
+ this._sessionForNetworking = selected;
105
+ this._transportFactory.setBridgeService(selected.bridgeService);
106
+ } else {
107
+ this._transportFactory.setBridgeService(undefined);
108
+ }
109
+ }
110
+ }
111
+ }
@@ -0,0 +1,113 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ import { Trigger } from '@dxos/async';
6
+ import { log } from '@dxos/log';
7
+ import { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';
8
+ import { createProtoRpcPeer, ProtoRpcPeer, RpcPort } from '@dxos/rpc';
9
+ import { Callback } from '@dxos/util';
10
+
11
+ import { ClientServicesHost } from '../services';
12
+ import { IframeServiceBundle, iframeServiceBundle, workerServiceBundle } from './services';
13
+
14
+ export type WorkerSessionParams = {
15
+ clientServices: ClientServicesHost;
16
+ systemPort: RpcPort;
17
+ appPort: RpcPort;
18
+ options?: {
19
+ heartbeatInterval: number;
20
+ };
21
+ };
22
+
23
+ /**
24
+ * Represents a tab connection within the worker.
25
+ */
26
+ export class WorkerSession {
27
+ private readonly _clientRpc: ProtoRpcPeer<{}>;
28
+ private readonly _systemRpc: ProtoRpcPeer<IframeServiceBundle>;
29
+ private readonly _startTrigger = new Trigger();
30
+ private readonly _options: NonNullable<WorkerSessionParams['options']>;
31
+ private _heartbeatTimer?: NodeJS.Timeout;
32
+
33
+ public readonly onClose = new Callback<() => Promise<void>>();
34
+
35
+ public origin?: string;
36
+ public bridgeService?: BridgeService;
37
+
38
+ constructor({
39
+ clientServices,
40
+ systemPort,
41
+ appPort,
42
+ options = {
43
+ heartbeatInterval: 1000
44
+ }
45
+ }: WorkerSessionParams) {
46
+ this._options = options;
47
+
48
+ this._clientRpc = createProtoRpcPeer({
49
+ exposed: clientServices.descriptors,
50
+ handlers: clientServices.services,
51
+ port: appPort
52
+ });
53
+
54
+ this._systemRpc = createProtoRpcPeer({
55
+ requested: iframeServiceBundle,
56
+ exposed: workerServiceBundle,
57
+ handlers: {
58
+ WorkerService: {
59
+ start: async (request) => {
60
+ this.origin = request.origin;
61
+ this._startTrigger.wake();
62
+ },
63
+
64
+ stop: async () => {
65
+ setTimeout(async () => {
66
+ try {
67
+ await this.close();
68
+ } catch (err: any) {
69
+ log.catch(err);
70
+ }
71
+ });
72
+ }
73
+ }
74
+ },
75
+ port: systemPort,
76
+ timeout: 200
77
+ });
78
+
79
+ this.bridgeService = this._systemRpc.rpc.BridgeService;
80
+ }
81
+
82
+ async open() {
83
+ await Promise.all([this._clientRpc.open(), this._systemRpc.open()]);
84
+
85
+ await this._startTrigger.wait(); // TODO(dmaretskyi): Timeout.
86
+
87
+ this._heartbeatTimer = setInterval(async () => {
88
+ try {
89
+ await this._systemRpc.rpc.IframeService.heartbeat();
90
+ } catch (err) {
91
+ try {
92
+ await this.close();
93
+ } catch (err: any) {
94
+ log.catch(err);
95
+ }
96
+ }
97
+ }, this._options.heartbeatInterval);
98
+ }
99
+
100
+ async close() {
101
+ try {
102
+ await this.onClose.callIfSet();
103
+ } catch (err: any) {
104
+ log.catch(err);
105
+ }
106
+
107
+ if (this._heartbeatTimer !== undefined) {
108
+ clearInterval(this._heartbeatTimer);
109
+ }
110
+
111
+ await Promise.all([this._clientRpc.close(), this._systemRpc.close()]);
112
+ }
113
+ }
@@ -1,5 +0,0 @@
1
- import { Event } from '@dxos/async';
2
- export declare class DevtoolsHostEvents {
3
- readonly ready: Event<void>;
4
- }
5
- //# sourceMappingURL=devtools-host-events.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"devtools-host-events.d.ts","sourceRoot":"","sources":["../../../../src/packlets/devtools/devtools-host-events.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,KAAK,cAAe;CAC9B"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DevtoolsHostEvents = void 0;
4
- //
5
- // Copyright 2021 DXOS.org
6
- //
7
- const async_1 = require("@dxos/async");
8
- class DevtoolsHostEvents {
9
- constructor() {
10
- this.ready = new async_1.Event();
11
- }
12
- }
13
- exports.DevtoolsHostEvents = DevtoolsHostEvents;
14
- //# sourceMappingURL=devtools-host-events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"devtools-host-events.js","sourceRoot":"","sources":["../../../../src/packlets/devtools/devtools-host-events.ts"],"names":[],"mappings":";;;AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,uCAAoC;AAEpC,MAAa,kBAAkB;IAA/B;QACW,UAAK,GAAG,IAAI,aAAK,EAAE,CAAC;IAC/B,CAAC;CAAA;AAFD,gDAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/packlets/invitations/common.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiD,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,uBAAuB,CAG5E,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAExD;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,oBAAY,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;CAChC,CAAC;AAGF,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,oBAAY,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;AACrD,oBAAY,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/packlets/invitations/common.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAEF,mDAAmH;AAUtG,QAAA,8BAA8B,GAAsC;IAC/E,cAAc,EAAE,mCAAqB;IACrC,eAAe,EAAE,oCAAsB;CACxC,CAAC"}
@@ -1,36 +0,0 @@
1
- import { PublicKey } from '@dxos/keys';
2
- import { InvitationDescriptor } from '@dxos/protocols/proto/dxos/halo/invitations';
3
- /**
4
- * A serialized version of InvitationWrapper that's suitable to be encoded as an URL query string.
5
- */
6
- export interface InvitationQueryParameters {
7
- hash: string;
8
- swarmKey: string;
9
- invitation: string;
10
- identityKey?: string;
11
- type: string;
12
- }
13
- /**
14
- * Describes an issued invitation.
15
- *
16
- * Can be serialized to protobuf or JSON.
17
- * Invitations can be interactive or offline.
18
- *
19
- * This descriptor might also have a bundled secret for authentication in interactive mode.
20
- */
21
- export declare class InvitationWrapper {
22
- readonly type: InvitationDescriptor.Type;
23
- readonly swarmKey: PublicKey;
24
- readonly invitation: Uint8Array;
25
- readonly identityKey?: PublicKey | undefined;
26
- secret?: Uint8Array | undefined;
27
- static decode(code: string): InvitationWrapper;
28
- static encode(invitation: InvitationWrapper): string;
29
- static fromQueryParameters(queryParameters: InvitationQueryParameters): InvitationWrapper;
30
- static fromProto(invitation: InvitationDescriptor): InvitationWrapper;
31
- constructor(type: InvitationDescriptor.Type, swarmKey: PublicKey, invitation: Uint8Array, identityKey?: PublicKey | undefined, secret?: Uint8Array | undefined);
32
- get hash(): string;
33
- toProto(): InvitationDescriptor;
34
- toQueryParameters(): InvitationQueryParameters;
35
- }
36
- //# sourceMappingURL=invitation-wrapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invitation-wrapper.d.ts","sourceRoot":"","sources":["../../../../src/packlets/invitations/invitation-wrapper.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAOnF;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AAEH,qBAAa,iBAAiB;aA0CV,IAAI,EAAE,oBAAoB,CAAC,IAAI;aAC/B,QAAQ,EAAE,SAAS;aACnB,UAAU,EAAE,UAAU;aACtB,WAAW,CAAC;IACrB,MAAM,CAAC;IA7ChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB;IAK9C,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,iBAAiB,GAAG,MAAM;IAKpD,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,yBAAyB,GAAG,iBAAiB;IAgBzF,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,oBAAoB,GAAG,iBAAiB;gBAenD,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAC/B,QAAQ,EAAE,SAAS,EACnB,UAAU,EAAE,UAAU,EACtB,WAAW,CAAC,uBAAW,EAChC,MAAM,CAAC,wBAAY;IAa5B,IAAI,IAAI,WAGP;IAED,OAAO,IAAI,oBAAoB;IAU/B,iBAAiB,IAAI,yBAAyB;CAc/C"}
@@ -1,104 +0,0 @@
1
- "use strict";
2
- //
3
- // Copyright 2020 DXOS.org
4
- //
5
- var __importDefault = (this && this.__importDefault) || function (mod) {
6
- return (mod && mod.__esModule) ? mod : { "default": mod };
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.InvitationWrapper = void 0;
10
- const base_x_1 = __importDefault(require("base-x"));
11
- const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
12
- const node_assert_1 = __importDefault(require("node:assert"));
13
- const crypto_1 = require("@dxos/crypto");
14
- const echo_db_1 = require("@dxos/echo-db");
15
- const keys_1 = require("@dxos/keys");
16
- const invitations_1 = require("@dxos/protocols/proto/dxos/halo/invitations");
17
- // TODO(burdon): Move to Client API.
18
- // Encode with only alpha-numeric characters.
19
- const base62 = (0, base_x_1.default)('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
20
- /**
21
- * Describes an issued invitation.
22
- *
23
- * Can be serialized to protobuf or JSON.
24
- * Invitations can be interactive or offline.
25
- *
26
- * This descriptor might also have a bundled secret for authentication in interactive mode.
27
- */
28
- // TODO(burdon): Move to Client API (and/or remove).
29
- class InvitationWrapper {
30
- constructor(type, swarmKey, invitation, identityKey, secret) {
31
- this.type = type;
32
- this.swarmKey = swarmKey;
33
- this.invitation = invitation;
34
- this.identityKey = identityKey;
35
- this.secret = secret;
36
- (0, node_assert_1.default)(type !== undefined);
37
- (0, node_assert_1.default)(keys_1.PublicKey.isPublicKey(swarmKey));
38
- (0, node_assert_1.default)(invitation instanceof Uint8Array);
39
- if (identityKey) {
40
- keys_1.PublicKey.assertValidPublicKey(identityKey);
41
- }
42
- if (secret) {
43
- (0, node_assert_1.default)(secret instanceof Uint8Array);
44
- }
45
- }
46
- static decode(code) {
47
- const json = base62.decode(code).toString();
48
- return InvitationWrapper.fromQueryParameters(JSON.parse(json));
49
- }
50
- static encode(invitation) {
51
- const buffer = Buffer.from(JSON.stringify(invitation.toQueryParameters()));
52
- return base62.encode(buffer);
53
- }
54
- static fromQueryParameters(queryParameters) {
55
- const { hash, swarmKey, invitation, identityKey, type } = queryParameters;
56
- const descriptor = new InvitationWrapper(parseInvitationType(type), keys_1.PublicKey.from(swarmKey), keys_1.PublicKey.bufferize(invitation), identityKey ? keys_1.PublicKey.from(identityKey) : undefined);
57
- if (hash !== descriptor.hash) {
58
- throw new echo_db_1.InvalidInvitationError();
59
- }
60
- return descriptor;
61
- }
62
- static fromProto(invitation) {
63
- (0, node_assert_1.default)(invitation.type !== undefined);
64
- (0, node_assert_1.default)(invitation.swarmKey, 'Missing swarm key');
65
- (0, node_assert_1.default)(invitation.invitation);
66
- return new InvitationWrapper(invitation.type, keys_1.PublicKey.from(invitation.swarmKey), Buffer.from(invitation.invitation), invitation.identityKey ? keys_1.PublicKey.from(invitation.identityKey) : undefined, invitation.secret ? Buffer.from(invitation.secret) : undefined);
67
- }
68
- get hash() {
69
- const query = this.toQueryParameters();
70
- return query.hash;
71
- }
72
- toProto() {
73
- var _a;
74
- return {
75
- type: this.type,
76
- swarmKey: this.swarmKey.asUint8Array(),
77
- invitation: this.invitation,
78
- identityKey: (_a = this.identityKey) === null || _a === void 0 ? void 0 : _a.asUint8Array(),
79
- secret: this.secret
80
- };
81
- }
82
- toQueryParameters() {
83
- const query = {
84
- swarmKey: this.swarmKey.toHex(),
85
- invitation: keys_1.PublicKey.stringify(this.invitation),
86
- type: stringifyInvitationType(this.type)
87
- };
88
- if (this.identityKey) {
89
- query.identityKey = this.identityKey.toHex();
90
- }
91
- query.hash = (0, crypto_1.ripemd160)((0, json_stable_stringify_1.default)(query));
92
- return query;
93
- }
94
- }
95
- exports.InvitationWrapper = InvitationWrapper;
96
- // TODO(burdon): Move to client API.
97
- const parseInvitationType = (str) => {
98
- const type = parseInt(str);
99
- (0, node_assert_1.default)(type === invitations_1.InvitationDescriptor.Type.INTERACTIVE || type === invitations_1.InvitationDescriptor.Type.OFFLINE, 'Invalid invitation type');
100
- return type;
101
- };
102
- // TODO(burdon): Move to client API.
103
- const stringifyInvitationType = (type) => type.toString();
104
- //# sourceMappingURL=invitation-wrapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invitation-wrapper.js","sourceRoot":"","sources":["../../../../src/packlets/invitations/invitation-wrapper.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import { SigningContext, Space, SpaceManager } from '@dxos/echo-db';
2
- import { NetworkManager } from '@dxos/network-manager';
3
- import { InvitationDescriptor } from '@dxos/protocols/proto/dxos/halo/invitations';
4
- /**
5
- * Manages the life-cycle of Space invitations between peers.
6
- */
7
- export declare class SpaceInvitations {
8
- private readonly _spaceManager;
9
- private readonly _networkManager;
10
- private readonly _signingContext;
11
- constructor(_spaceManager: SpaceManager, _networkManager: NetworkManager, _signingContext: SigningContext);
12
- /**
13
- * Creates an invitation and listens for a join request from the invited (guest) peer.
14
- */
15
- createInvitation(space: Space, { onFinish }?: {
16
- onFinish?: () => void;
17
- }): Promise<InvitationDescriptor>;
18
- /**
19
- * Waits for the host peer (inviter) to accept our join request.
20
- * The local guest peer (invitee) then sends the local party invitation to the host,
21
- * which then writes the guest's credentials to the space.
22
- */
23
- acceptInvitation(invitation: InvitationDescriptor): Promise<Space>;
24
- }
25
- //# sourceMappingURL=space-invitations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"space-invitations.d.ts","sourceRoot":"","sources":["../../../../src/packlets/invitations/space-invitations.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIpE,OAAO,EAAyB,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAG5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAGnF;;GAEG;AAEH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAFf,aAAa,EAAE,YAAY,EAC3B,eAAe,EAAE,cAAc,EAC/B,eAAe,EAAE,cAAc;IAGlD;;OAEG;IAEG,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;KAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmEjH;;;;OAIG;IACG,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC;CAuDzE"}
@@ -1,136 +0,0 @@
1
- "use strict";
2
- //
3
- // Copyright 2022 DXOS.org
4
- //
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SpaceInvitations = void 0;
7
- const async_1 = require("@dxos/async");
8
- const credentials_1 = require("@dxos/credentials");
9
- const feed_store_1 = require("@dxos/feed-store");
10
- const keys_1 = require("@dxos/keys");
11
- const log_1 = require("@dxos/log");
12
- const network_manager_1 = require("@dxos/network-manager");
13
- const protocol_plugin_rpc_1 = require("@dxos/protocol-plugin-rpc");
14
- const protocols_1 = require("@dxos/protocols");
15
- const invitations_1 = require("@dxos/protocols/proto/dxos/halo/invitations");
16
- const rpc_1 = require("@dxos/rpc");
17
- /**
18
- * Manages the life-cycle of Space invitations between peers.
19
- */
20
- // TODO(burdon): Rename factory.
21
- class SpaceInvitations {
22
- constructor(_spaceManager, _networkManager, _signingContext) {
23
- this._spaceManager = _spaceManager;
24
- this._networkManager = _networkManager;
25
- this._signingContext = _signingContext;
26
- }
27
- /**
28
- * Creates an invitation and listens for a join request from the invited (guest) peer.
29
- */
30
- // TODO(burdon): Replace callback with cancelable observable.
31
- async createInvitation(space, { onFinish } = {}) {
32
- const admitted = new async_1.Trigger();
33
- const plugin = (0, protocol_plugin_rpc_1.createRpcPlugin)(async (port) => {
34
- const peer = (0, rpc_1.createProtoRpcPeer)({
35
- port,
36
- requested: {
37
- SpaceGuestService: protocols_1.schema.getService('dxos.halo.invitations.SpaceGuestService')
38
- },
39
- exposed: {
40
- SpaceHostService: protocols_1.schema.getService('dxos.halo.invitations.SpaceHostService')
41
- },
42
- handlers: {
43
- SpaceHostService: {
44
- presentAdmissionCredentials: async ({ identityKey, deviceKey, controlFeedKey, dataFeedKey }) => {
45
- (0, log_1.log)('processing admission request', { identityKey, deviceKey }, { file: "packages/sdk/client-services/src/packlets/invitations/space-invitations.ts", line: 47 });
46
- await (0, feed_store_1.writeMessages)(space.controlPipeline.writer, await (0, credentials_1.createAdmissionCredentials)(this._signingContext.credentialSigner, identityKey, deviceKey, space.key, controlFeedKey, dataFeedKey));
47
- admitted.wake();
48
- }
49
- }
50
- }
51
- });
52
- // TODO(burdon): Error handling and timeout.
53
- await peer.open();
54
- {
55
- (0, log_1.log)('sending admission offer', { spaceKey: space.key }, { file: "packages/sdk/client-services/src/packlets/invitations/space-invitations.ts", line: 70 });
56
- await peer.rpc.SpaceGuestService.presentAdmissionOffer({
57
- spaceKey: space.key,
58
- genesisFeedKey: space.genesisFeedKey
59
- });
60
- onFinish === null || onFinish === void 0 ? void 0 : onFinish();
61
- }
62
- await peer.close();
63
- await connection.close();
64
- });
65
- const topic = keys_1.PublicKey.random();
66
- const peerId = keys_1.PublicKey.random(); // TODO(burdon): Use actual key.
67
- const connection = await this._networkManager.openSwarmConnection({
68
- topic,
69
- peerId: topic,
70
- // peerId,
71
- protocol: (0, network_manager_1.createProtocolFactory)(topic, peerId, [plugin]),
72
- topology: new network_manager_1.StarTopology(topic)
73
- });
74
- return {
75
- type: invitations_1.InvitationDescriptor.Type.INTERACTIVE,
76
- swarmKey: topic.asUint8Array(),
77
- invitation: new Uint8Array() // TODO(burdon): Remove.
78
- };
79
- }
80
- /**
81
- * Waits for the host peer (inviter) to accept our join request.
82
- * The local guest peer (invitee) then sends the local party invitation to the host,
83
- * which then writes the guest's credentials to the space.
84
- */
85
- async acceptInvitation(invitation) {
86
- const admitted = new async_1.Trigger();
87
- const plugin = (0, protocol_plugin_rpc_1.createRpcPlugin)(async (port) => {
88
- const peer = (0, rpc_1.createProtoRpcPeer)({
89
- port,
90
- requested: {
91
- SpaceHostService: protocols_1.schema.getService('dxos.halo.invitations.SpaceHostService')
92
- },
93
- exposed: {
94
- SpaceGuestService: protocols_1.schema.getService('dxos.halo.invitations.SpaceGuestService')
95
- },
96
- handlers: {
97
- SpaceGuestService: {
98
- presentAdmissionOffer: async ({ spaceKey, genesisFeedKey }) => {
99
- (0, log_1.log)('processing admission offer', { spaceKey }, { file: "packages/sdk/client-services/src/packlets/invitations/space-invitations.ts", line: 119 });
100
- // Create local space.
101
- const space = await this._spaceManager.acceptSpace({ spaceKey, genesisFeedKey });
102
- // Send local space's details to host (inviter).
103
- // TODO(burdon): Space is orphaned if we crash before other side ACKs. Retry from cold start possible?
104
- (0, log_1.log)('sending admission request', { identityKey: invitation.identityKey }, { file: "packages/sdk/client-services/src/packlets/invitations/space-invitations.ts", line: 125 });
105
- await peer.rpc.SpaceHostService.presentAdmissionCredentials({
106
- identityKey: this._signingContext.identityKey,
107
- deviceKey: this._signingContext.deviceKey,
108
- controlFeedKey: space.controlFeedKey,
109
- dataFeedKey: space.dataFeedKey
110
- });
111
- // TODO(burdon): Error: Writable stream closed prematurely
112
- admitted.wake(space);
113
- }
114
- }
115
- }
116
- });
117
- await peer.open();
118
- await admitted.wait();
119
- await peer.close();
120
- });
121
- const topic = keys_1.PublicKey.from(invitation.swarmKey);
122
- const peerId = keys_1.PublicKey.random(); // TODO(burdon): Use actual key.
123
- const connection = await this._networkManager.openSwarmConnection({
124
- topic,
125
- peerId: keys_1.PublicKey.random(),
126
- // peerId,
127
- protocol: (0, network_manager_1.createProtocolFactory)(topic, peerId, [plugin]),
128
- topology: new network_manager_1.StarTopology(topic)
129
- });
130
- const space = await admitted.wait();
131
- await connection.close();
132
- return space;
133
- }
134
- }
135
- exports.SpaceInvitations = SpaceInvitations;
136
- //# sourceMappingURL=space-invitations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"space-invitations.js","sourceRoot":"","sources":["../../../../src/packlets/invitations/space-invitations.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAEF,uCAAsC;AACtC,mDAA+D;AAE/D,iDAAiD;AACjD,qCAAuC;AACvC,mCAAgC;AAChC,2DAA4F;AAC5F,mEAA4D;AAC5D,+CAAyC;AACzC,6EAAmF;AACnF,mCAA+C;AAE/C;;GAEG;AACH,gCAAgC;AAChC,MAAa,gBAAgB;IAC3B,YACmB,aAA2B,EAC3B,eAA+B,EAC/B,eAA+B;QAF/B,kBAAa,GAAb,aAAa,CAAc;QAC3B,oBAAe,GAAf,eAAe,CAAgB;QAC/B,oBAAe,GAAf,eAAe,CAAgB;IAC/C,CAAC;IAEJ;;OAEG;IACH,6DAA6D;IAC7D,KAAK,CAAC,gBAAgB,CAAC,KAAY,EAAE,EAAE,QAAQ,KAAgC,EAAE;QAC/E,MAAM,QAAQ,GAAG,IAAI,eAAO,EAAE,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAA,qCAAe,EAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5C,MAAM,IAAI,GAAG,IAAA,wBAAkB,EAAC;gBAC9B,IAAI;gBACJ,SAAS,EAAE;oBACT,iBAAiB,EAAE,kBAAM,CAAC,UAAU,CAAC,yCAAyC,CAAC;iBAChF;gBACD,OAAO,EAAE;oBACP,gBAAgB,EAAE,kBAAM,CAAC,UAAU,CAAC,wCAAwC,CAAC;iBAC9E;gBACD,QAAQ,EAAE;oBACR,gBAAgB,EAAE;wBAChB,2BAA2B,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,EAAE;4BAC7F,IAAA,SAAG,EAAC,8BAA8B,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,mGAAC,CAAC;4BAEhE,MAAM,IAAA,0BAAa,EACjB,KAAK,CAAC,eAAe,CAAC,MAAM,EAC5B,MAAM,IAAA,wCAA0B,EAC9B,IAAI,CAAC,eAAe,CAAC,gBAAgB,EACrC,WAAW,EACX,SAAS,EACT,KAAK,CAAC,GAAG,EACT,cAAc,EACd,WAAW,CACZ,CACF,CAAC;4BAEF,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAClB,CAAC;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,4CAA4C;YAC5C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB;gBACE,IAAA,SAAG,EAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,mGAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;oBACrD,QAAQ,EAAE,KAAK,CAAC,GAAG;oBACnB,cAAc,EAAE,KAAK,CAAC,cAAc;iBACrC,CAAC,CAAC;gBAEH,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAC;aACd;YACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,gBAAS,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,gBAAS,CAAC,MAAM,EAAE,CAAC,CAAC,gCAAgC;QACnE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC;YAChE,KAAK;YACL,MAAM,EAAE,KAAK;YACb,UAAU;YACV,QAAQ,EAAE,IAAA,uCAAqB,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;YACxD,QAAQ,EAAE,IAAI,8BAAY,CAAC,KAAK,CAAC;SAClC,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,kCAAoB,CAAC,IAAI,CAAC,WAAW;YAC3C,QAAQ,EAAE,KAAK,CAAC,YAAY,EAAE;YAC9B,UAAU,EAAE,IAAI,UAAU,EAAE,CAAC,wBAAwB;SACtD,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAgC;QACrD,MAAM,QAAQ,GAAG,IAAI,eAAO,EAAS,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAA,qCAAe,EAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5C,MAAM,IAAI,GAAG,IAAA,wBAAkB,EAAC;gBAC9B,IAAI;gBACJ,SAAS,EAAE;oBACT,gBAAgB,EAAE,kBAAM,CAAC,UAAU,CAAC,wCAAwC,CAAC;iBAC9E;gBACD,OAAO,EAAE;oBACP,iBAAiB,EAAE,kBAAM,CAAC,UAAU,CAAC,yCAAyC,CAAC;iBAChF;gBACD,QAAQ,EAAE;oBACR,iBAAiB,EAAE;wBACjB,qBAAqB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE;4BAC5D,IAAA,SAAG,EAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,oGAAC,CAAC;4BAChD,sBAAsB;4BACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;4BAEjF,gDAAgD;4BAChD,sGAAsG;4BACtG,IAAA,SAAG,EAAC,2BAA2B,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,oGAAC,CAAC;4BAC1E,MAAM,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,2BAA2B,CAAC;gCAC1D,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW;gCAC7C,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS;gCACzC,cAAc,EAAE,KAAK,CAAC,cAAc;gCACpC,WAAW,EAAE,KAAK,CAAC,WAAW;6BAC/B,CAAC,CAAC;4BAEH,0DAA0D;4BAC1D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACvB,CAAC;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,gBAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,gBAAS,CAAC,MAAM,EAAE,CAAC,CAAC,gCAAgC;QACnE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC;YAChE,KAAK;YACL,MAAM,EAAE,gBAAS,CAAC,MAAM,EAAE;YAC1B,UAAU;YACV,QAAQ,EAAE,IAAA,uCAAqB,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;YACxD,QAAQ,EAAE,IAAI,8BAAY,CAAC,KAAK,CAAC;SAClC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA1ID,4CA0IC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../../../../../src/packlets/services/impl/devtools.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,oCAAoC,EACpC,qCAAqC,EACrC,4BAA4B,EAC5B,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,8BAA8B,EAC9B,gCAAgC,EAChC,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,8BAA8B,EAC9B,4BAA4B,EAC7B,MAAM,0CAA0C,CAAC;AAElD,OAAO,EACL,kBAAkB,EAOnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,oBAAY,qBAAqB,GAAG;IAClC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;AAEF,qBAAa,eAAgB,YAAW,YAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,qBAAqB;IAE1D,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAQpC,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpD,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAI3F,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAI5F,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,MAAM,CAAC,8BAA8B,CAAC;IAItG,6BAA6B,CAC3B,OAAO,EAAE,oCAAoC,GAC5C,MAAM,CAAC,qCAAqC,CAAC;IAIhD,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAAC,0BAA0B,CAAC;IAI1F,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAIpF,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAIpF,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,CAAC,6BAA6B,CAAC;IAInG,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAIrF,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAIxF,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIlF,wBAAwB,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,gCAAgC,CAAC;IAIjF,uBAAuB,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,+BAA+B,CAAC;IAI/E,sBAAsB,IAAI,MAAM,CAAC,8BAA8B,CAAC;IAIhE,oBAAoB,IAAI,MAAM,CAAC,4BAA4B,CAAC;CAG7D"}