@dxos/client-services 0.9.1-staging.ee54ba693a → 0.11.0

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 (305) hide show
  1. package/dist/lib/chunk-client-services-layer.mjs +11425 -0
  2. package/dist/lib/chunk-client-services-layer.mjs.map +1 -0
  3. package/dist/lib/chunk-decorate.mjs +9 -0
  4. package/dist/lib/index.mjs +731 -0
  5. package/dist/lib/index.mjs.map +1 -0
  6. package/dist/lib/packlets/diagnostics/browser-diagnostics-broadcast.mjs +72 -0
  7. package/dist/lib/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +1 -0
  8. package/dist/lib/packlets/diagnostics/diagnostics-broadcast.mjs +14 -0
  9. package/dist/lib/packlets/diagnostics/diagnostics-broadcast.mjs.map +1 -0
  10. package/dist/lib/packlets/locks/browser.mjs +105 -0
  11. package/dist/lib/packlets/locks/browser.mjs.map +1 -0
  12. package/dist/lib/packlets/locks/node.mjs +53 -0
  13. package/dist/lib/packlets/locks/node.mjs.map +1 -0
  14. package/dist/lib/testing.mjs +570 -0
  15. package/dist/lib/testing.mjs.map +1 -0
  16. package/dist/types/src/index.d.ts +2 -0
  17. package/dist/types/src/index.d.ts.map +1 -1
  18. package/dist/types/src/packlets/agents/edge-agent-manager.d.ts +21 -4
  19. package/dist/types/src/packlets/agents/edge-agent-manager.d.ts.map +1 -1
  20. package/dist/types/src/packlets/agents/edge-agent-service.d.ts +8 -7
  21. package/dist/types/src/packlets/agents/edge-agent-service.d.ts.map +1 -1
  22. package/dist/types/src/packlets/devices/devices-service.d.ts +7 -5
  23. package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
  24. package/dist/types/src/packlets/devtools/devtools.d.ts +30 -29
  25. package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
  26. package/dist/types/src/packlets/devtools/feeds.d.ts +1 -1
  27. package/dist/types/src/packlets/devtools/feeds.d.ts.map +1 -1
  28. package/dist/types/src/packlets/devtools/network.d.ts +2 -1
  29. package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
  30. package/dist/types/src/packlets/devtools/spaces.d.ts.map +1 -1
  31. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts +2 -2
  32. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -1
  33. package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts.map +1 -1
  34. package/dist/types/src/packlets/diagnostics/diagnostics.d.ts +1 -8
  35. package/dist/types/src/packlets/diagnostics/diagnostics.d.ts.map +1 -1
  36. package/dist/types/src/packlets/identity/authenticator.d.ts +1 -1
  37. package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
  38. package/dist/types/src/packlets/identity/contacts-service.d.ts +9 -6
  39. package/dist/types/src/packlets/identity/contacts-service.d.ts.map +1 -1
  40. package/dist/types/src/packlets/identity/identity-manager.d.ts +32 -3
  41. package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
  42. package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts +23 -4
  43. package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts.map +1 -1
  44. package/dist/types/src/packlets/identity/identity-service.d.ts +15 -20
  45. package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
  46. package/dist/types/src/packlets/identity/identity.d.ts +2 -2
  47. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  48. package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts.map +1 -1
  49. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +17 -0
  50. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  51. package/dist/types/src/packlets/invitations/invitations-manager.d.ts +25 -4
  52. package/dist/types/src/packlets/invitations/invitations-manager.d.ts.map +1 -1
  53. package/dist/types/src/packlets/invitations/invitations-service.d.ts +11 -11
  54. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  55. package/dist/types/src/packlets/logging/logging-service.d.ts +14 -12
  56. package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
  57. package/dist/types/src/packlets/metadata/index.d.ts +3 -0
  58. package/dist/types/src/packlets/metadata/index.d.ts.map +1 -0
  59. package/dist/types/src/packlets/metadata/metadata-store.d.ts +107 -0
  60. package/dist/types/src/packlets/metadata/metadata-store.d.ts.map +1 -0
  61. package/dist/types/src/packlets/metadata/metadata-store.test.d.ts +2 -0
  62. package/dist/types/src/packlets/metadata/metadata-store.test.d.ts.map +1 -0
  63. package/dist/types/src/packlets/metadata/sqlite-metadata-store.d.ts +65 -0
  64. package/dist/types/src/packlets/metadata/sqlite-metadata-store.d.ts.map +1 -0
  65. package/dist/types/src/packlets/network/network-service.d.ts +15 -14
  66. package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
  67. package/dist/types/src/packlets/pipeline/codec.d.ts +11 -0
  68. package/dist/types/src/packlets/pipeline/codec.d.ts.map +1 -0
  69. package/dist/types/src/packlets/pipeline/feeds.d.ts +7 -0
  70. package/dist/types/src/packlets/pipeline/feeds.d.ts.map +1 -0
  71. package/dist/types/src/packlets/pipeline/index.d.ts +5 -0
  72. package/dist/types/src/packlets/pipeline/index.d.ts.map +1 -0
  73. package/dist/types/src/packlets/pipeline/message-selector.d.ts +11 -0
  74. package/dist/types/src/packlets/pipeline/message-selector.d.ts.map +1 -0
  75. package/dist/types/src/packlets/pipeline/pipeline-stress.test.d.ts +2 -0
  76. package/dist/types/src/packlets/pipeline/pipeline-stress.test.d.ts.map +1 -0
  77. package/dist/types/src/packlets/pipeline/pipeline.d.ts +131 -0
  78. package/dist/types/src/packlets/pipeline/pipeline.d.ts.map +1 -0
  79. package/dist/types/src/packlets/pipeline/pipeline.test.d.ts +2 -0
  80. package/dist/types/src/packlets/pipeline/pipeline.test.d.ts.map +1 -0
  81. package/dist/types/src/packlets/pipeline/testing/index.d.ts +2 -0
  82. package/dist/types/src/packlets/pipeline/testing/index.d.ts.map +1 -0
  83. package/dist/types/src/packlets/pipeline/testing/test-feed-builder.d.ts +9 -0
  84. package/dist/types/src/packlets/pipeline/testing/test-feed-builder.d.ts.map +1 -0
  85. package/dist/types/src/packlets/pipeline/timeframe-clock.d.ts +31 -0
  86. package/dist/types/src/packlets/pipeline/timeframe-clock.d.ts.map +1 -0
  87. package/dist/types/src/packlets/services/client-services-layer.d.ts +21 -0
  88. package/dist/types/src/packlets/services/client-services-layer.d.ts.map +1 -0
  89. package/dist/types/src/packlets/services/cross-device-space-synchronizer.d.ts +28 -0
  90. package/dist/types/src/packlets/services/cross-device-space-synchronizer.d.ts.map +1 -0
  91. package/dist/types/src/packlets/services/effect-rpc.test.d.ts +2 -0
  92. package/dist/types/src/packlets/services/effect-rpc.test.d.ts.map +1 -0
  93. package/dist/types/src/packlets/services/feed-syncer.d.ts +22 -2
  94. package/dist/types/src/packlets/services/feed-syncer.d.ts.map +1 -1
  95. package/dist/types/src/packlets/services/index.d.ts +2 -2
  96. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  97. package/dist/types/src/packlets/services/platform.d.ts.map +1 -1
  98. package/dist/types/src/packlets/services/service-context.d.ts +38 -57
  99. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  100. package/dist/types/src/packlets/services/service-host.d.ts +82 -31
  101. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  102. package/dist/types/src/packlets/services/sqlite-storage.d.ts +29 -0
  103. package/dist/types/src/packlets/services/sqlite-storage.d.ts.map +1 -1
  104. package/dist/types/src/packlets/services/sqlite-storage.test.d.ts +2 -0
  105. package/dist/types/src/packlets/services/sqlite-storage.test.d.ts.map +1 -0
  106. package/dist/types/src/packlets/space/admission-discovery-extension.d.ts +30 -0
  107. package/dist/types/src/packlets/space/admission-discovery-extension.d.ts.map +1 -0
  108. package/dist/types/src/packlets/space/auth.d.ts +24 -0
  109. package/dist/types/src/packlets/space/auth.d.ts.map +1 -0
  110. package/dist/types/src/packlets/space/control-pipeline.d.ts +46 -0
  111. package/dist/types/src/packlets/space/control-pipeline.d.ts.map +1 -0
  112. package/dist/types/src/packlets/space/control-pipeline.test.d.ts +2 -0
  113. package/dist/types/src/packlets/space/control-pipeline.test.d.ts.map +1 -0
  114. package/dist/types/src/packlets/space/index.d.ts +6 -0
  115. package/dist/types/src/packlets/space/index.d.ts.map +1 -0
  116. package/dist/types/src/packlets/space/replication.browser.test.d.ts +2 -0
  117. package/dist/types/src/packlets/space/replication.browser.test.d.ts.map +1 -0
  118. package/dist/types/src/packlets/space/space-manager.browser.test.d.ts +2 -0
  119. package/dist/types/src/packlets/space/space-manager.browser.test.d.ts.map +1 -0
  120. package/dist/types/src/packlets/space/space-manager.d.ts +72 -0
  121. package/dist/types/src/packlets/space/space-manager.d.ts.map +1 -0
  122. package/dist/types/src/packlets/space/space-protocol.browser.test.d.ts +2 -0
  123. package/dist/types/src/packlets/space/space-protocol.browser.test.d.ts.map +1 -0
  124. package/dist/types/src/packlets/space/space-protocol.d.ts +99 -0
  125. package/dist/types/src/packlets/space/space-protocol.d.ts.map +1 -0
  126. package/dist/types/src/packlets/space/space-protocol.test.d.ts +2 -0
  127. package/dist/types/src/packlets/space/space-protocol.test.d.ts.map +1 -0
  128. package/dist/types/src/packlets/space/space.d.ts +65 -0
  129. package/dist/types/src/packlets/space/space.d.ts.map +1 -0
  130. package/dist/types/src/packlets/space/space.test.d.ts +2 -0
  131. package/dist/types/src/packlets/space/space.test.d.ts.map +1 -0
  132. package/dist/types/src/packlets/space/testing/change-metadata.d.ts +8 -0
  133. package/dist/types/src/packlets/space/testing/change-metadata.d.ts.map +1 -0
  134. package/dist/types/src/packlets/space/testing/index.d.ts +4 -0
  135. package/dist/types/src/packlets/space/testing/index.d.ts.map +1 -0
  136. package/dist/types/src/packlets/space/testing/test-agent-builder.d.ts +62 -0
  137. package/dist/types/src/packlets/space/testing/test-agent-builder.d.ts.map +1 -0
  138. package/dist/types/src/packlets/space-export/serialized-space-reader.d.ts +1 -1
  139. package/dist/types/src/packlets/space-export/serialized-space-reader.d.ts.map +1 -1
  140. package/dist/types/src/packlets/space-export/serialized-space-writer.d.ts.map +1 -1
  141. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +40 -7
  142. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  143. package/dist/types/src/packlets/spaces/data-space.d.ts +3 -1
  144. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  145. package/dist/types/src/packlets/spaces/genesis.d.ts +1 -1
  146. package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -1
  147. package/dist/types/src/packlets/spaces/spaces-service.d.ts +25 -23
  148. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  149. package/dist/types/src/packlets/storage/level.d.ts.map +1 -1
  150. package/dist/types/src/packlets/system/system-service.d.ts +18 -18
  151. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  152. package/dist/types/src/packlets/testing/invitation-utils.d.ts +1 -1
  153. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  154. package/dist/types/src/packlets/testing/test-builder.d.ts +7 -6
  155. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  156. package/dist/types/src/packlets/worker/worker-runtime.d.ts +41 -58
  157. package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -1
  158. package/dist/types/src/packlets/worker/worker-session.d.ts +21 -8
  159. package/dist/types/src/packlets/worker/worker-session.d.ts.map +1 -1
  160. package/dist/types/src/testing/index.d.ts +1 -0
  161. package/dist/types/src/testing/index.d.ts.map +1 -1
  162. package/dist/types/src/version.d.ts +1 -1
  163. package/dist/types/src/version.d.ts.map +1 -1
  164. package/dist/types/tsconfig.tsbuildinfo +1 -1
  165. package/package.json +52 -48
  166. package/src/index.ts +2 -0
  167. package/src/packlets/agents/edge-agent-manager.ts +56 -15
  168. package/src/packlets/agents/edge-agent-service.ts +25 -15
  169. package/src/packlets/devices/devices-service.test.ts +20 -19
  170. package/src/packlets/devices/devices-service.ts +17 -17
  171. package/src/packlets/devtools/devtools.ts +133 -75
  172. package/src/packlets/devtools/feeds.ts +2 -1
  173. package/src/packlets/devtools/network.ts +42 -12
  174. package/src/packlets/devtools/spaces.ts +1 -1
  175. package/src/packlets/diagnostics/diagnostics-broadcast.ts +4 -2
  176. package/src/packlets/diagnostics/diagnostics-collector.ts +5 -18
  177. package/src/packlets/diagnostics/diagnostics.ts +0 -11
  178. package/src/packlets/identity/authenticator.ts +2 -1
  179. package/src/packlets/identity/contacts-service.ts +46 -37
  180. package/src/packlets/identity/identity-manager.test.ts +3 -1
  181. package/src/packlets/identity/identity-manager.ts +73 -5
  182. package/src/packlets/identity/identity-recovery-manager.ts +56 -7
  183. package/src/packlets/identity/identity-service.test.ts +27 -18
  184. package/src/packlets/identity/identity-service.ts +114 -71
  185. package/src/packlets/identity/identity.test.ts +4 -9
  186. package/src/packlets/identity/identity.ts +1 -2
  187. package/src/packlets/invitations/edge-invitation-handler.ts +0 -1
  188. package/src/packlets/invitations/invitations-handler.ts +39 -3
  189. package/src/packlets/invitations/invitations-manager.ts +52 -4
  190. package/src/packlets/invitations/invitations-service.ts +54 -28
  191. package/src/packlets/logging/logging-service.ts +41 -29
  192. package/src/packlets/logging/logging.test.ts +28 -15
  193. package/src/packlets/metadata/index.ts +6 -0
  194. package/src/packlets/metadata/metadata-store.test.ts +49 -0
  195. package/src/packlets/metadata/metadata-store.ts +446 -0
  196. package/src/packlets/metadata/sqlite-metadata-store.ts +409 -0
  197. package/src/packlets/network/network-service.test.ts +19 -12
  198. package/src/packlets/network/network-service.ts +96 -29
  199. package/src/packlets/pipeline/codec.ts +18 -0
  200. package/src/packlets/pipeline/feeds.ts +22 -0
  201. package/src/packlets/pipeline/index.ts +8 -0
  202. package/src/packlets/pipeline/message-selector.ts +35 -0
  203. package/src/packlets/pipeline/pipeline-stress.test.ts +230 -0
  204. package/src/packlets/pipeline/pipeline.test.ts +140 -0
  205. package/src/packlets/pipeline/pipeline.ts +439 -0
  206. package/src/packlets/pipeline/testing/index.ts +5 -0
  207. package/src/packlets/pipeline/testing/test-feed-builder.ts +19 -0
  208. package/src/packlets/pipeline/timeframe-clock.ts +81 -0
  209. package/src/packlets/services/client-services-layer.ts +186 -0
  210. package/src/packlets/services/cross-device-space-synchronizer.ts +132 -0
  211. package/src/packlets/services/effect-rpc.test.ts +314 -0
  212. package/src/packlets/services/feed-syncer.ts +57 -3
  213. package/src/packlets/services/index.ts +2 -2
  214. package/src/packlets/services/platform.ts +0 -6
  215. package/src/packlets/services/service-context.ts +219 -522
  216. package/src/packlets/services/service-host.test.ts +34 -11
  217. package/src/packlets/services/service-host.ts +693 -213
  218. package/src/packlets/services/spec.md +106 -0
  219. package/src/packlets/services/sqlite-storage.test.ts +48 -0
  220. package/src/packlets/services/sqlite-storage.ts +117 -20
  221. package/src/packlets/space/admission-discovery-extension.ts +91 -0
  222. package/src/packlets/space/auth.ts +92 -0
  223. package/src/packlets/space/control-pipeline.test.ts +165 -0
  224. package/src/packlets/space/control-pipeline.ts +229 -0
  225. package/src/packlets/space/index.ts +9 -0
  226. package/src/packlets/space/replication.browser.test.ts +58 -0
  227. package/src/packlets/space/space-manager.browser.test.ts +40 -0
  228. package/src/packlets/space/space-manager.ts +224 -0
  229. package/src/packlets/space/space-protocol.browser.test.ts +129 -0
  230. package/src/packlets/space/space-protocol.test.ts +158 -0
  231. package/src/packlets/space/space-protocol.ts +308 -0
  232. package/src/packlets/space/space.test.ts +181 -0
  233. package/src/packlets/space/space.ts +196 -0
  234. package/src/packlets/space/testing/change-metadata.ts +27 -0
  235. package/src/packlets/space/testing/index.ts +7 -0
  236. package/src/packlets/space/testing/test-agent-builder.ts +252 -0
  237. package/src/packlets/space-export/serialized-space-reader.ts +3 -1
  238. package/src/packlets/space-export/serialized-space-writer.ts +53 -30
  239. package/src/packlets/space-export/space-archive.test.ts +30 -0
  240. package/src/packlets/spaces/data-space-manager.test.ts +1 -1
  241. package/src/packlets/spaces/data-space-manager.ts +148 -33
  242. package/src/packlets/spaces/data-space.ts +29 -18
  243. package/src/packlets/spaces/edge-feed-replicator.test.ts +1 -1
  244. package/src/packlets/spaces/genesis.ts +1 -1
  245. package/src/packlets/spaces/spaces-service.test.ts +35 -22
  246. package/src/packlets/spaces/spaces-service.ts +259 -180
  247. package/src/packlets/storage/level.ts +3 -1
  248. package/src/packlets/system/system-service.test.ts +31 -13
  249. package/src/packlets/system/system-service.ts +65 -37
  250. package/src/packlets/testing/invitation-utils.ts +3 -3
  251. package/src/packlets/testing/test-builder.ts +35 -20
  252. package/src/packlets/worker/worker-runtime.ts +222 -260
  253. package/src/packlets/worker/worker-session.ts +108 -91
  254. package/src/testing/index.ts +1 -0
  255. package/src/version.ts +5 -1
  256. package/dist/lib/browser/chunk-QCWEHHJW.mjs +0 -24
  257. package/dist/lib/browser/chunk-QCWEHHJW.mjs.map +0 -7
  258. package/dist/lib/browser/chunk-SRTDXIDQ.mjs +0 -8837
  259. package/dist/lib/browser/chunk-SRTDXIDQ.mjs.map +0 -7
  260. package/dist/lib/browser/chunk-XJRPB3GA.mjs +0 -22
  261. package/dist/lib/browser/chunk-XJRPB3GA.mjs.map +0 -7
  262. package/dist/lib/browser/index.mjs +0 -876
  263. package/dist/lib/browser/index.mjs.map +0 -7
  264. package/dist/lib/browser/meta.json +0 -1
  265. package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs +0 -88
  266. package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +0 -7
  267. package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs +0 -11
  268. package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs.map +0 -7
  269. package/dist/lib/browser/packlets/locks/browser.mjs +0 -86
  270. package/dist/lib/browser/packlets/locks/browser.mjs.map +0 -7
  271. package/dist/lib/browser/packlets/locks/node.mjs +0 -48
  272. package/dist/lib/browser/packlets/locks/node.mjs.map +0 -7
  273. package/dist/lib/browser/testing/index.mjs +0 -436
  274. package/dist/lib/browser/testing/index.mjs.map +0 -7
  275. package/dist/lib/node-esm/chunk-2DT3MZRL.mjs +0 -22
  276. package/dist/lib/node-esm/chunk-2DT3MZRL.mjs.map +0 -7
  277. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +0 -24
  278. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +0 -7
  279. package/dist/lib/node-esm/chunk-NEJCHFZ3.mjs +0 -8837
  280. package/dist/lib/node-esm/chunk-NEJCHFZ3.mjs.map +0 -7
  281. package/dist/lib/node-esm/index.mjs +0 -876
  282. package/dist/lib/node-esm/index.mjs.map +0 -7
  283. package/dist/lib/node-esm/meta.json +0 -1
  284. package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs +0 -88
  285. package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +0 -7
  286. package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs +0 -11
  287. package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs.map +0 -7
  288. package/dist/lib/node-esm/packlets/locks/browser.mjs +0 -86
  289. package/dist/lib/node-esm/packlets/locks/browser.mjs.map +0 -7
  290. package/dist/lib/node-esm/packlets/locks/node.mjs +0 -48
  291. package/dist/lib/node-esm/packlets/locks/node.mjs.map +0 -7
  292. package/dist/lib/node-esm/testing/index.mjs +0 -436
  293. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  294. package/dist/types/src/packlets/services/client-rpc-server.d.ts +0 -24
  295. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +0 -1
  296. package/dist/types/src/packlets/services/service-registry.d.ts +0 -15
  297. package/dist/types/src/packlets/services/service-registry.d.ts.map +0 -1
  298. package/dist/types/src/packlets/services/service-registry.test.d.ts +0 -2
  299. package/dist/types/src/packlets/services/service-registry.test.d.ts.map +0 -1
  300. package/dist/types/src/testing/setup.d.ts +0 -3
  301. package/dist/types/src/testing/setup.d.ts.map +0 -1
  302. package/src/packlets/services/client-rpc-server.ts +0 -111
  303. package/src/packlets/services/service-registry.test.ts +0 -78
  304. package/src/packlets/services/service-registry.ts +0 -36
  305. package/src/testing/setup.ts +0 -11
@@ -2,39 +2,49 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { Trigger, asyncTimeout } from '@dxos/async';
6
- import {
7
- type IframeServiceBundle,
8
- PROXY_CONNECTION_TIMEOUT,
9
- iframeServiceBundle,
10
- workerServiceBundle,
11
- } from '@dxos/client-protocol';
12
- import { invariant } from '@dxos/invariant';
5
+ import type * as RpcClient from '@effect/rpc/RpcClient';
6
+ import type * as RpcServer from '@effect/rpc/RpcServer';
7
+ import * as Effect from 'effect/Effect';
8
+
9
+ import { Trigger } from '@dxos/async';
10
+ import { ClientRpcServer, PROXY_CONNECTION_TIMEOUT, makeBridgeServiceClientOverProtocol } from '@dxos/client-protocol';
11
+ import { EffectEx } from '@dxos/effect';
13
12
  import { log, logInfo } from '@dxos/log';
14
13
  import { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';
15
- import { type ProtoRpcPeer, type RpcPort, createProtoRpcPeer } from '@dxos/rpc';
14
+ import { type WorkerService } from '@dxos/protocols/rpc';
16
15
  import { Callback, type MaybePromise } from '@dxos/util';
17
16
 
18
- import { ClientRpcServer, type ClientRpcServerProps, type ClientServicesHost } from '../services';
17
+ import { type ClientServicesHost } from '../services';
19
18
 
20
19
  export type WorkerSessionProps = {
21
20
  serviceHost: ClientServicesHost;
22
- systemPort: RpcPort;
23
- appPort: RpcPort;
21
+ /**
22
+ * Reverse-direction (worker→tab) protocol serving the tab's {@link BridgeService} (WebRTC transport)
23
+ * over effect-rpc. The worker is the client; the tab is the runner.
24
+ */
25
+ systemProtocol: RpcClient.Protocol['Type'];
26
+ /**
27
+ * Forward-direction (tab→worker) protocol over which the worker serves the client services.
28
+ */
29
+ appProtocol: RpcServer.Protocol['Type'];
24
30
  // TODO(wittjosiah): Remove shellPort.
25
- shellPort?: RpcPort;
31
+ shellPort?: MessagePort;
26
32
  readySignal: Trigger<Error | undefined>;
27
33
  };
28
34
 
29
35
  /**
30
36
  * Represents a tab connection within the worker.
37
+ *
38
+ * The session holds imperative per-connection transport state (RPC servers, the WebRTC bridge client);
39
+ * its lifecycle is driven by {@link WorkerRuntime} through the {@link open} / {@link close} Effects.
31
40
  */
32
41
  export class WorkerSession {
33
42
  private readonly _clientRpc: ClientRpcServer;
34
43
  private readonly _shellClientRpc?: ClientRpcServer;
35
- private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;
36
44
  private readonly _startTrigger = new Trigger();
37
45
  private readonly _serviceHost: ClientServicesHost;
46
+ private readonly _systemProtocol: RpcClient.Protocol['Type'];
47
+ #closeBridge?: () => Promise<void>;
38
48
 
39
49
  public readonly onClose = new Callback<() => Promise<void>>();
40
50
 
@@ -46,102 +56,109 @@ export class WorkerSession {
46
56
 
47
57
  public bridgeService?: BridgeService;
48
58
 
49
- constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionProps) {
50
- invariant(serviceHost);
59
+ // Per-session `WorkerService` control handlers, served over the app port alongside the client
60
+ // services (both run tab→worker). `start` conveys the tab origin / liveness lock and releases the
61
+ // gate below; `stop` tears the session down.
62
+ readonly #workerServiceHandlers: WorkerService.Handlers = {
63
+ 'WorkerService.start': (payload) =>
64
+ Effect.sync(() => {
65
+ this.origin = payload.origin;
66
+ this.lockKey = payload.lockKey;
67
+ this._startTrigger.wake();
68
+ }),
69
+ 'WorkerService.stop': () =>
70
+ // Close on the next tick (forked) so the RPC response is delivered before the transport tears down.
71
+ Effect.forkDaemon(
72
+ Effect.gen(this, function* () {
73
+ yield* Effect.async<void>((resume) => {
74
+ setTimeout(() => resume(Effect.void));
75
+ });
76
+ yield* this.close();
77
+ }).pipe(Effect.tapErrorCause((cause) => Effect.sync(() => log.catch(cause)))),
78
+ ).pipe(Effect.asVoid),
79
+ };
80
+
81
+ constructor({ serviceHost, systemProtocol, appProtocol, shellPort, readySignal }: WorkerSessionProps) {
51
82
  this._serviceHost = serviceHost;
52
-
53
- const middleware: Pick<ClientRpcServerProps, 'handleCall' | 'handleStream'> = {
54
- handleCall: async (method, params, handler, options) => {
55
- const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });
56
- if (error) {
57
- throw error;
58
- }
59
-
60
- return handler(method, params, options);
61
- },
62
- handleStream: async (method, params, handler, options) => {
63
- const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });
64
- if (error) {
65
- throw error;
66
- }
67
-
68
- return handler(method, params, options);
69
- },
83
+ this._systemProtocol = systemProtocol;
84
+
85
+ // Hold requests until the worker runtime is ready; propagate startup errors to callers.
86
+ const onRequest = async () => {
87
+ const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });
88
+ if (error) {
89
+ throw error;
90
+ }
70
91
  };
71
92
 
93
+ const services = () => ({
94
+ ...this._serviceHost.services,
95
+ WorkerService: this.#workerServiceHandlers,
96
+ });
97
+
72
98
  this._clientRpc = new ClientRpcServer({
73
- serviceRegistry: this._serviceHost.serviceRegistry,
74
- port: appPort,
75
- ...middleware,
99
+ services,
100
+ protocol: appProtocol,
101
+ onRequest,
76
102
  });
77
103
 
78
104
  this._shellClientRpc = shellPort
79
105
  ? new ClientRpcServer({
80
- serviceRegistry: this._serviceHost.serviceRegistry,
106
+ services,
81
107
  port: shellPort,
82
- ...middleware,
108
+ onRequest,
83
109
  })
84
110
  : undefined;
85
-
86
- this._iframeRpc = createProtoRpcPeer({
87
- requested: iframeServiceBundle,
88
- exposed: workerServiceBundle,
89
- handlers: {
90
- WorkerService: {
91
- start: async (request) => {
92
- this.origin = request.origin;
93
- this.lockKey = request.lockKey;
94
- this._startTrigger.wake();
95
- },
96
-
97
- stop: async () => {
98
- setTimeout(async () => {
99
- try {
100
- await this.close();
101
- } catch (err: any) {
102
- log.catch(err);
103
- }
104
- });
105
- },
106
- },
107
- },
108
- port: systemPort,
109
- timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.
110
- });
111
-
112
- this.bridgeService = this._iframeRpc.rpc.BridgeService;
113
111
  }
114
112
 
115
- async open(): Promise<void> {
116
- log('opening...');
117
- await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);
118
-
119
- // Wait until the worker's RPC service has started.
120
- await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });
121
-
122
- // TODO(burdon): Comment required.
123
- if (this.lockKey) {
124
- void this._afterLockReleases(this.lockKey, () => this.close());
125
- }
126
-
127
- log('opened');
113
+ open(): Effect.Effect<void> {
114
+ return Effect.gen(this, function* () {
115
+ log('opening...');
116
+ // The tab serves the WebRTC `BridgeService` on the reverse channel; build a client the worker's
117
+ // network stack can proxy through.
118
+ const { bridgeService, close } = yield* Effect.promise(() =>
119
+ makeBridgeServiceClientOverProtocol(this._systemProtocol),
120
+ );
121
+ this.bridgeService = bridgeService;
122
+ this.#closeBridge = close;
123
+
124
+ yield* Effect.promise(() => Promise.all([this._clientRpc.open(), this._maybeOpenShell()]));
125
+
126
+ // Wait until the tab calls `WorkerService.start` (conveys origin + liveness lock).
127
+ yield* Effect.promise(() => this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT }));
128
+
129
+ if (this.lockKey) {
130
+ void this._afterLockReleases(this.lockKey, () =>
131
+ EffectEx.runPromise(this.close()).catch((err) => log.catch(err)),
132
+ );
133
+ }
134
+
135
+ log('opened');
136
+ });
128
137
  }
129
138
 
130
- async close(): Promise<void> {
131
- log.debug('closing...');
132
- try {
133
- await this.onClose.callIfSet();
134
- } catch (err: any) {
135
- log.catch(err);
136
- }
137
-
138
- await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);
139
- log.debug('closed');
139
+ close(): Effect.Effect<void> {
140
+ return Effect.gen(this, function* () {
141
+ log.debug('closing...');
142
+ yield* Effect.promise(async () => {
143
+ try {
144
+ await this.onClose.callIfSet();
145
+ } catch (err: any) {
146
+ log.catch(err);
147
+ }
148
+ });
149
+
150
+ yield* Effect.promise(() =>
151
+ Promise.all([this._clientRpc.close(), this._shellClientRpc?.close(), this.#closeBridge?.()]),
152
+ );
153
+ this.bridgeService = undefined;
154
+ this.#closeBridge = undefined;
155
+ log.debug('closed');
156
+ });
140
157
  }
141
158
 
142
159
  private async _maybeOpenShell(): Promise<void> {
143
160
  try {
144
- this._shellClientRpc && (await asyncTimeout(this._shellClientRpc.open(), 1_000));
161
+ this._shellClientRpc && (await this._shellClientRpc.open());
145
162
  } catch {
146
163
  log.info('No shell connected.');
147
164
  }
@@ -2,4 +2,5 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from '../packlets/space/testing';
5
6
  export * from '../packlets/testing';
package/src/version.ts CHANGED
@@ -1 +1,5 @@
1
- export const DXOS_VERSION = "0.9.1-staging.ee54ba693a";
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export const DXOS_VERSION = '0.11.0';
@@ -1,24 +0,0 @@
1
- import "@dxos/node-std/globals";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
19
-
20
- export {
21
- __export,
22
- __reExport
23
- };
24
- //# sourceMappingURL=chunk-QCWEHHJW.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }