@dxos/client-services 0.10.0 → 0.11.1

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 (304) 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/tsconfig.tsbuildinfo +1 -1
  164. package/package.json +52 -48
  165. package/src/index.ts +2 -0
  166. package/src/packlets/agents/edge-agent-manager.ts +56 -15
  167. package/src/packlets/agents/edge-agent-service.ts +25 -15
  168. package/src/packlets/devices/devices-service.test.ts +20 -19
  169. package/src/packlets/devices/devices-service.ts +17 -17
  170. package/src/packlets/devtools/devtools.ts +133 -75
  171. package/src/packlets/devtools/feeds.ts +2 -1
  172. package/src/packlets/devtools/network.ts +42 -12
  173. package/src/packlets/devtools/spaces.ts +1 -1
  174. package/src/packlets/diagnostics/diagnostics-broadcast.ts +4 -2
  175. package/src/packlets/diagnostics/diagnostics-collector.ts +5 -18
  176. package/src/packlets/diagnostics/diagnostics.ts +0 -11
  177. package/src/packlets/identity/authenticator.ts +2 -1
  178. package/src/packlets/identity/contacts-service.ts +46 -37
  179. package/src/packlets/identity/identity-manager.test.ts +3 -1
  180. package/src/packlets/identity/identity-manager.ts +73 -5
  181. package/src/packlets/identity/identity-recovery-manager.ts +56 -7
  182. package/src/packlets/identity/identity-service.test.ts +27 -18
  183. package/src/packlets/identity/identity-service.ts +114 -71
  184. package/src/packlets/identity/identity.test.ts +4 -9
  185. package/src/packlets/identity/identity.ts +1 -2
  186. package/src/packlets/invitations/edge-invitation-handler.ts +0 -1
  187. package/src/packlets/invitations/invitations-handler.ts +39 -3
  188. package/src/packlets/invitations/invitations-manager.ts +52 -4
  189. package/src/packlets/invitations/invitations-service.ts +54 -28
  190. package/src/packlets/logging/logging-service.ts +41 -29
  191. package/src/packlets/logging/logging.test.ts +28 -15
  192. package/src/packlets/metadata/index.ts +6 -0
  193. package/src/packlets/metadata/metadata-store.test.ts +49 -0
  194. package/src/packlets/metadata/metadata-store.ts +446 -0
  195. package/src/packlets/metadata/sqlite-metadata-store.ts +409 -0
  196. package/src/packlets/network/network-service.test.ts +19 -12
  197. package/src/packlets/network/network-service.ts +96 -29
  198. package/src/packlets/pipeline/codec.ts +18 -0
  199. package/src/packlets/pipeline/feeds.ts +22 -0
  200. package/src/packlets/pipeline/index.ts +8 -0
  201. package/src/packlets/pipeline/message-selector.ts +35 -0
  202. package/src/packlets/pipeline/pipeline-stress.test.ts +230 -0
  203. package/src/packlets/pipeline/pipeline.test.ts +140 -0
  204. package/src/packlets/pipeline/pipeline.ts +439 -0
  205. package/src/packlets/pipeline/testing/index.ts +5 -0
  206. package/src/packlets/pipeline/testing/test-feed-builder.ts +19 -0
  207. package/src/packlets/pipeline/timeframe-clock.ts +81 -0
  208. package/src/packlets/services/client-services-layer.ts +186 -0
  209. package/src/packlets/services/cross-device-space-synchronizer.ts +132 -0
  210. package/src/packlets/services/effect-rpc.test.ts +314 -0
  211. package/src/packlets/services/feed-syncer.ts +57 -3
  212. package/src/packlets/services/index.ts +2 -2
  213. package/src/packlets/services/platform.ts +0 -6
  214. package/src/packlets/services/service-context.ts +219 -522
  215. package/src/packlets/services/service-host.test.ts +34 -11
  216. package/src/packlets/services/service-host.ts +693 -213
  217. package/src/packlets/services/spec.md +106 -0
  218. package/src/packlets/services/sqlite-storage.test.ts +48 -0
  219. package/src/packlets/services/sqlite-storage.ts +117 -20
  220. package/src/packlets/space/admission-discovery-extension.ts +91 -0
  221. package/src/packlets/space/auth.ts +92 -0
  222. package/src/packlets/space/control-pipeline.test.ts +165 -0
  223. package/src/packlets/space/control-pipeline.ts +229 -0
  224. package/src/packlets/space/index.ts +9 -0
  225. package/src/packlets/space/replication.browser.test.ts +58 -0
  226. package/src/packlets/space/space-manager.browser.test.ts +40 -0
  227. package/src/packlets/space/space-manager.ts +224 -0
  228. package/src/packlets/space/space-protocol.browser.test.ts +129 -0
  229. package/src/packlets/space/space-protocol.test.ts +158 -0
  230. package/src/packlets/space/space-protocol.ts +308 -0
  231. package/src/packlets/space/space.test.ts +181 -0
  232. package/src/packlets/space/space.ts +196 -0
  233. package/src/packlets/space/testing/change-metadata.ts +27 -0
  234. package/src/packlets/space/testing/index.ts +7 -0
  235. package/src/packlets/space/testing/test-agent-builder.ts +252 -0
  236. package/src/packlets/space-export/serialized-space-reader.ts +3 -1
  237. package/src/packlets/space-export/serialized-space-writer.ts +53 -30
  238. package/src/packlets/space-export/space-archive.test.ts +30 -0
  239. package/src/packlets/spaces/data-space-manager.test.ts +1 -1
  240. package/src/packlets/spaces/data-space-manager.ts +148 -33
  241. package/src/packlets/spaces/data-space.ts +29 -18
  242. package/src/packlets/spaces/edge-feed-replicator.test.ts +1 -1
  243. package/src/packlets/spaces/genesis.ts +1 -1
  244. package/src/packlets/spaces/spaces-service.test.ts +35 -22
  245. package/src/packlets/spaces/spaces-service.ts +259 -180
  246. package/src/packlets/storage/level.ts +3 -1
  247. package/src/packlets/system/system-service.test.ts +31 -13
  248. package/src/packlets/system/system-service.ts +65 -37
  249. package/src/packlets/testing/invitation-utils.ts +3 -3
  250. package/src/packlets/testing/test-builder.ts +35 -20
  251. package/src/packlets/worker/worker-runtime.ts +222 -260
  252. package/src/packlets/worker/worker-session.ts +108 -91
  253. package/src/testing/index.ts +1 -0
  254. package/src/version.ts +1 -1
  255. package/dist/lib/browser/chunk-QCWEHHJW.mjs +0 -24
  256. package/dist/lib/browser/chunk-QCWEHHJW.mjs.map +0 -7
  257. package/dist/lib/browser/chunk-XJRPB3GA.mjs +0 -22
  258. package/dist/lib/browser/chunk-XJRPB3GA.mjs.map +0 -7
  259. package/dist/lib/browser/chunk-XU5R2BMF.mjs +0 -8837
  260. package/dist/lib/browser/chunk-XU5R2BMF.mjs.map +0 -7
  261. package/dist/lib/browser/index.mjs +0 -876
  262. package/dist/lib/browser/index.mjs.map +0 -7
  263. package/dist/lib/browser/meta.json +0 -1
  264. package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs +0 -88
  265. package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +0 -7
  266. package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs +0 -11
  267. package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs.map +0 -7
  268. package/dist/lib/browser/packlets/locks/browser.mjs +0 -86
  269. package/dist/lib/browser/packlets/locks/browser.mjs.map +0 -7
  270. package/dist/lib/browser/packlets/locks/node.mjs +0 -48
  271. package/dist/lib/browser/packlets/locks/node.mjs.map +0 -7
  272. package/dist/lib/browser/testing/index.mjs +0 -436
  273. package/dist/lib/browser/testing/index.mjs.map +0 -7
  274. package/dist/lib/node-esm/chunk-2DT3MZRL.mjs +0 -22
  275. package/dist/lib/node-esm/chunk-2DT3MZRL.mjs.map +0 -7
  276. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +0 -24
  277. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +0 -7
  278. package/dist/lib/node-esm/chunk-H5YTUD35.mjs +0 -8837
  279. package/dist/lib/node-esm/chunk-H5YTUD35.mjs.map +0 -7
  280. package/dist/lib/node-esm/index.mjs +0 -876
  281. package/dist/lib/node-esm/index.mjs.map +0 -7
  282. package/dist/lib/node-esm/meta.json +0 -1
  283. package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs +0 -88
  284. package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +0 -7
  285. package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs +0 -11
  286. package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs.map +0 -7
  287. package/dist/lib/node-esm/packlets/locks/browser.mjs +0 -86
  288. package/dist/lib/node-esm/packlets/locks/browser.mjs.map +0 -7
  289. package/dist/lib/node-esm/packlets/locks/node.mjs +0 -48
  290. package/dist/lib/node-esm/packlets/locks/node.mjs.map +0 -7
  291. package/dist/lib/node-esm/testing/index.mjs +0 -436
  292. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  293. package/dist/types/src/packlets/services/client-rpc-server.d.ts +0 -24
  294. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +0 -1
  295. package/dist/types/src/packlets/services/service-registry.d.ts +0 -15
  296. package/dist/types/src/packlets/services/service-registry.d.ts.map +0 -1
  297. package/dist/types/src/packlets/services/service-registry.test.d.ts +0 -2
  298. package/dist/types/src/packlets/services/service-registry.test.d.ts.map +0 -1
  299. package/dist/types/src/testing/setup.d.ts +0 -3
  300. package/dist/types/src/testing/setup.d.ts.map +0 -1
  301. package/src/packlets/services/client-rpc-server.ts +0 -111
  302. package/src/packlets/services/service-registry.test.ts +0 -78
  303. package/src/packlets/services/service-registry.ts +0 -36
  304. package/src/testing/setup.ts +0 -11
@@ -0,0 +1,731 @@
1
+ import { $ as CredentialServerExtension, A as orderObjJsonFields, At as subscribeToSwarmInfo, B as SigningContextProviderService, C as IdentityProviderService, Ct as DevtoolsHostEvents, D as SpaceArchiveWriter, Dt as subscribeToNetworkStatus, E as SpacesServiceImpl, Et as getNetworkPeers, F as detectSpaceArchiveFormat, G as SpaceManagerLayer, H as DataSpace, I as DataSpaceManager, J as MOCK_AUTH_PROVIDER, K as SpaceManagerService, L as DataSpaceManagerLayer, M as buildDatabaseDirectoryFromObjects, Mt as subscribeToFeeds, N as objJsonToObjectStructure, Nt as __exportAll, O as extractSpaceArchive, Ot as subscribeToNetworkTopics, P as readSerializedSpaceArchive, Pt as __reExport, Q as CredentialRetrieverExtension, R as DataSpaceManagerService, S as IdentityManagerService, St as createDiagnostics, T as Identity, Tt as subscribeToSpaces, U as EdgeFeedReplicator, V as createSigningContextProvider, W as SpaceManager, X as SpaceProtocol, Y as MOCK_AUTH_VERIFIER, Z as SpaceProtocolSession, _ as EdgeAgentManagerService, _t as DeviceInvitationProtocol, a as ServiceContextLayer, at as InvitationsManagerService, b as IdentityManager, bt as diagnostics_exports, c as FeedSyncer, ct as IMetadataStoreService, d as CrossDeviceSpaceSynchronizerLayer, dt as SpaceInvitationProtocol, et as Space, f as CrossDeviceSpaceSynchronizerService, ft as InvitationsServiceImpl, g as EdgeAgentManagerLayer, gt as createAdmissionKeypair, h as EdgeAgentManager, ht as InvitationsHandlerService, i as layerClientServicesHost, it as InvitationsManagerLayer, j as writeSerializedSpaceArchive, jt as subscribeToFeedBlocks, k as objectStructureToObjJson, kt as subscribeToSignal, l as FeedSyncerLayer, lt as MetadataStore, m as EdgeAgentServiceImpl, mt as InvitationsHandlerLayer, n as ClientServicesHost, nt as AuthExtension, o as StorageMigrationService, ot as SqliteMetadataStore, p as createCrossDeviceSpaceSynchronizer, pt as InvitationsHandler, q as AuthStatus, r as ClientServicesHostService, rt as InvitationsManager, st as SqliteMetadataStoreLayer, t as ClientServicesRpcLayer, u as FeedSyncerService, ut as hasInvitationExpired, v as locks_exports, vt as TrustedKeySetAuthVerifier, w as identityProviderFromManager, wt as DevtoolsServiceImpl, x as IdentityManagerLayer, xt as DiagnosticsCollector, y as IdentityServiceImpl, yt as createAuthProvider, z as SigningContextProviderLayer } from "./chunk-client-services-layer.mjs";
2
+ import { t as __decorate } from "./chunk-decorate.mjs";
3
+ import * as Effect from "effect/Effect";
4
+ import { Trigger } from "@dxos/async";
5
+ import { Context } from "@dxos/context";
6
+ import { PublicKey } from "@dxos/keys";
7
+ import { log, logInfo } from "@dxos/log";
8
+ import { Callback, arrayToBuffer, isNode } from "@dxos/util";
9
+ import { invariant } from "@dxos/invariant";
10
+ import { InvalidConfigError, ProfileArchiveEntryType, makeInProcessClient } from "@dxos/protocols";
11
+ import { ClientRpcServer, DX_DATA, PROXY_CONNECTION_TIMEOUT, makeBridgeServiceClientOverProtocol } from "@dxos/client-protocol";
12
+ import { cbor } from "@automerge/automerge-repo";
13
+ import * as Context_ from "effect/Context";
14
+ import * as Layer from "effect/Layer";
15
+ import { RtcTransportProxyFactory } from "@dxos/network-manager";
16
+ import { EffectEx } from "@dxos/effect";
17
+ import { DevicesService, IdentityService } from "@dxos/protocols/rpc";
18
+ import * as Exit from "effect/Exit";
19
+ import * as Scope from "effect/Scope";
20
+ import { MemorySignalManager, MemorySignalManagerContext, setIdentityTags } from "@dxos/messaging";
21
+ import * as ManagedRuntime from "effect/ManagedRuntime";
22
+ import * as SqlExport from "@dxos/sql-sqlite/SqlExport";
23
+ import { StorageType, createStorage } from "@dxos/random-access-storage";
24
+ import { Runtime } from "@dxos/protocols/proto/dxos/config";
25
+ import path from "@dxos/node-std/path";
26
+ import * as Reactivity from "@effect/experimental/Reactivity";
27
+ import * as SqliteClient from "@dxos/sql-sqlite/SqliteClient";
28
+ import * as SqlTransaction from "@dxos/sql-sqlite/SqlTransaction";
29
+ export * from "#diagnostics-broadcast";
30
+ export * from "#locks-platform";
31
+ //#region src/packlets/storage/util.ts
32
+ var getRootPath = (config) => {
33
+ const { dataRoot = isNode() ? DX_DATA : "dxos/storage" } = config ?? {};
34
+ return `${dataRoot}/`;
35
+ };
36
+ var isPersistent = (config) => {
37
+ const { persistent = false } = config ?? {};
38
+ return config.dataStore !== void 0 && config.dataStore !== Runtime.Client.Storage.StorageDriver.RAM || persistent;
39
+ };
40
+ //#endregion
41
+ //#region src/packlets/storage/storage.ts
42
+ var StorageDriver = Runtime.Client.Storage.StorageDriver;
43
+ var createStorageObjects = (config) => {
44
+ const { persistent = false, keyStore, dataStore } = config ?? {};
45
+ if (persistent && dataStore === StorageDriver.RAM) throw new InvalidConfigError({ message: "RAM storage cannot be used in persistent mode." });
46
+ if (!persistent && dataStore !== void 0 && dataStore !== StorageDriver.RAM) throw new InvalidConfigError({ message: "Cannot use a persistent storage in not persistent mode." });
47
+ if (persistent && keyStore === StorageDriver.RAM) throw new InvalidConfigError({ message: "RAM key storage cannot be used in persistent mode." });
48
+ if (!persistent && keyStore !== StorageDriver.RAM && keyStore !== void 0) throw new InvalidConfigError({ message: "Cannot use a persistent key storage in not persistent mode." });
49
+ return { storage: createStorage({
50
+ type: persistent ? toStorageType(dataStore) : StorageType.RAM,
51
+ root: getRootPath(config)
52
+ }) };
53
+ };
54
+ var toStorageType = (type) => {
55
+ switch (type) {
56
+ case void 0: return;
57
+ case StorageDriver.RAM: return StorageType.RAM;
58
+ case StorageDriver.CHROME: return StorageType.CHROME;
59
+ case StorageDriver.FIREFOX: return StorageType.FIREFOX;
60
+ case StorageDriver.IDB: return StorageType.IDB;
61
+ case StorageDriver.NODE: return StorageType.NODE;
62
+ case StorageDriver.WEBFS: return StorageType.WEBFS;
63
+ default: throw new Error(`Invalid storage type: ${StorageDriver[type]}`);
64
+ }
65
+ };
66
+ //#endregion
67
+ //#region src/packlets/storage/level.ts
68
+ var createLevel = async (config) => {
69
+ const { createLevel: createKV } = await import("@dxos/kv-store/level");
70
+ const level = createKV(isPersistent(config) ? path.join(getRootPath(config), "level") : `/tmp/dxos-${PublicKey.random().toHex()}`);
71
+ await level.open();
72
+ return level;
73
+ };
74
+ //#endregion
75
+ //#region src/packlets/storage/profile-archive.ts
76
+ var __dxlog_file$2 = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/storage/profile-archive.ts";
77
+ var encodeProfileArchive = (profile) => cbor.encode(profile);
78
+ var decodeProfileArchive = (data) => cbor.decode(data);
79
+ var exportProfileData = async ({ storage, level }) => {
80
+ const archive = {
81
+ storage: [],
82
+ meta: { timestamp: (/* @__PURE__ */ new Date()).toISOString() }
83
+ };
84
+ {
85
+ const directory = await storage.createDirectory();
86
+ const files = await directory.list();
87
+ log.info("begin exporting files", { count: files.length }, {
88
+ "~LogMeta": "~LogMeta",
89
+ F: __dxlog_file$2,
90
+ L: 31,
91
+ S: void 0
92
+ });
93
+ for (const filename of files) {
94
+ const file = await directory.getOrCreateFile(filename);
95
+ const { size } = await file.stat();
96
+ const data = await file.read(0, size);
97
+ archive.storage.push({
98
+ type: ProfileArchiveEntryType.FILE,
99
+ key: filename,
100
+ value: data
101
+ });
102
+ }
103
+ log.info("done exporting files", { count: files.length }, {
104
+ "~LogMeta": "~LogMeta",
105
+ F: __dxlog_file$2,
106
+ L: 42,
107
+ S: void 0
108
+ });
109
+ }
110
+ {
111
+ log.info("begin exporting kv pairs", void 0, {
112
+ "~LogMeta": "~LogMeta",
113
+ F: __dxlog_file$2,
114
+ L: 46,
115
+ S: void 0
116
+ });
117
+ const iter = await level.iterator({
118
+ keyEncoding: "binary",
119
+ valueEncoding: "binary"
120
+ });
121
+ let count = 0;
122
+ for await (const [key, value] of iter) {
123
+ archive.storage.push({
124
+ type: ProfileArchiveEntryType.KEY_VALUE,
125
+ key,
126
+ value
127
+ });
128
+ count++;
129
+ }
130
+ log.info("done exporting kv pairs", { count }, {
131
+ "~LogMeta": "~LogMeta",
132
+ F: __dxlog_file$2,
133
+ L: 57,
134
+ S: void 0
135
+ });
136
+ }
137
+ return archive;
138
+ };
139
+ var importProfileData = async ({ storage, level }, archive) => {
140
+ let batch = level.batch();
141
+ let count = 0;
142
+ for (const entry of archive.storage) {
143
+ switch (entry.type) {
144
+ case ProfileArchiveEntryType.FILE: {
145
+ const directory = await storage.createDirectory();
146
+ invariant(typeof entry.key === "string", "Invalid key type", {
147
+ "~LogMeta": "~LogMeta",
148
+ F: __dxlog_file$2,
149
+ L: 80,
150
+ S: void 0,
151
+ A: ["typeof entry.key === 'string'", "'Invalid key type'"]
152
+ });
153
+ const file = await directory.getOrCreateFile(entry.key);
154
+ invariant(entry.value instanceof Uint8Array, "Invalid value type", {
155
+ "~LogMeta": "~LogMeta",
156
+ F: __dxlog_file$2,
157
+ L: 82,
158
+ S: void 0,
159
+ A: ["entry.value instanceof Uint8Array", "'Invalid value type'"]
160
+ });
161
+ await file.write(0, arrayToBuffer(entry.value));
162
+ await file.close();
163
+ break;
164
+ }
165
+ case ProfileArchiveEntryType.KEY_VALUE:
166
+ invariant(entry.key instanceof Uint8Array, "Invalid key type", {
167
+ "~LogMeta": "~LogMeta",
168
+ F: __dxlog_file$2,
169
+ L: 88,
170
+ S: void 0,
171
+ A: ["entry.key instanceof Uint8Array", "'Invalid key type'"]
172
+ });
173
+ invariant(entry.value instanceof Uint8Array, "Invalid value type", {
174
+ "~LogMeta": "~LogMeta",
175
+ F: __dxlog_file$2,
176
+ L: 89,
177
+ S: void 0,
178
+ A: ["entry.value instanceof Uint8Array", "'Invalid value type'"]
179
+ });
180
+ batch.put(entry.key, entry.value, {
181
+ keyEncoding: "binary",
182
+ valueEncoding: "binary"
183
+ });
184
+ break;
185
+ case ProfileArchiveEntryType.SQLITE_DATABASE:
186
+ log.warn("Skipping SQLITE_DATABASE entry (import via OPFS recovery API)", { key: entry.key }, {
187
+ "~LogMeta": "~LogMeta",
188
+ F: __dxlog_file$2,
189
+ L: 94,
190
+ S: void 0
191
+ });
192
+ break;
193
+ default: throw new Error(`Invalid entry type: ${entry.type}`);
194
+ }
195
+ if (++count % 1e3 === 0) {
196
+ await batch.write();
197
+ batch = level.batch();
198
+ log.info("importing", {
199
+ count,
200
+ total: archive.storage.length,
201
+ progress: `${(count / archive.storage.length * 100).toFixed()}%`
202
+ }, {
203
+ "~LogMeta": "~LogMeta",
204
+ F: __dxlog_file$2,
205
+ L: 105,
206
+ S: void 0
207
+ });
208
+ }
209
+ }
210
+ log.info("committing changes..", void 0, {
211
+ "~LogMeta": "~LogMeta",
212
+ F: __dxlog_file$2,
213
+ L: 113,
214
+ S: void 0
215
+ });
216
+ await batch.write();
217
+ };
218
+ //#endregion
219
+ //#region src/packlets/storage/profile-archive-sqlite.ts
220
+ /** Default OPFS SQLite database name used by Composer recovery and the OPFS worker. */
221
+ var OPFS_SQLITE_DB_FILENAME = "DXOS";
222
+ var SQLITE_MAGIC = new TextEncoder().encode("SQLite format 3\0");
223
+ /**
224
+ * Returns true when `bytes` begins with the SQLite 3 file header.
225
+ */
226
+ var isValidSqliteDatabase = (bytes) => {
227
+ if (bytes.byteLength < SQLITE_MAGIC.byteLength) return false;
228
+ for (let index = 0; index < SQLITE_MAGIC.byteLength; index++) if (bytes[index] !== SQLITE_MAGIC[index]) return false;
229
+ return true;
230
+ };
231
+ var coerceToUint8Array = (value) => {
232
+ if (value instanceof Uint8Array) return value;
233
+ if (value instanceof ArrayBuffer) return new Uint8Array(value);
234
+ if (Array.isArray(value)) return new Uint8Array(value);
235
+ };
236
+ /**
237
+ * Build a profile archive containing a single validated SQLITE_DATABASE entry.
238
+ */
239
+ var createSqliteProfileArchive = (opfsFilename, database, options) => {
240
+ if (!isValidSqliteDatabase(database)) throw new Error("Invalid SQLite database (missing SQLite format 3 header)");
241
+ return {
242
+ meta: {
243
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
244
+ ...options?.origin ? { origin: options.origin } : {}
245
+ },
246
+ storage: [{
247
+ type: ProfileArchiveEntryType.SQLITE_DATABASE,
248
+ key: opfsFilename,
249
+ value: database
250
+ }]
251
+ };
252
+ };
253
+ /**
254
+ * Extract validated SQLITE_DATABASE entries from a profile archive.
255
+ */
256
+ var getSqliteProfileEntries = (archive) => {
257
+ const entries = [];
258
+ for (const entry of archive.storage) {
259
+ if (entry.type !== ProfileArchiveEntryType.SQLITE_DATABASE) continue;
260
+ if (typeof entry.key !== "string") continue;
261
+ const database = coerceToUint8Array(entry.value);
262
+ if (!database || !isValidSqliteDatabase(database)) continue;
263
+ entries.push({
264
+ opfsFilename: entry.key,
265
+ database
266
+ });
267
+ }
268
+ return entries;
269
+ };
270
+ //#endregion
271
+ //#region src/packlets/worker/worker-session.ts
272
+ var __dxlog_file$1 = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-session.ts";
273
+ /**
274
+ * Represents a tab connection within the worker.
275
+ *
276
+ * The session holds imperative per-connection transport state (RPC servers, the WebRTC bridge client);
277
+ * its lifecycle is driven by {@link WorkerRuntime} through the {@link open} / {@link close} Effects.
278
+ */
279
+ var WorkerSession = class {
280
+ _clientRpc;
281
+ _shellClientRpc;
282
+ _startTrigger = new Trigger();
283
+ _serviceHost;
284
+ _systemProtocol;
285
+ #closeBridge;
286
+ onClose = new Callback();
287
+ origin;
288
+ lockKey;
289
+ bridgeService;
290
+ #workerServiceHandlers = {
291
+ "WorkerService.start": (payload) => Effect.sync(() => {
292
+ this.origin = payload.origin;
293
+ this.lockKey = payload.lockKey;
294
+ this._startTrigger.wake();
295
+ }),
296
+ "WorkerService.stop": () => Effect.forkDaemon(Effect.gen(this, function* () {
297
+ yield* Effect.async((resume) => {
298
+ setTimeout(() => resume(Effect.void));
299
+ });
300
+ yield* this.close();
301
+ }).pipe(Effect.tapErrorCause((cause) => Effect.sync(() => log.catch(cause, void 0, {
302
+ "~LogMeta": "~LogMeta",
303
+ F: __dxlog_file$1,
304
+ L: 77,
305
+ S: this
306
+ }))))).pipe(Effect.asVoid)
307
+ };
308
+ constructor({ serviceHost, systemProtocol, appProtocol, shellPort, readySignal }) {
309
+ this._serviceHost = serviceHost;
310
+ this._systemProtocol = systemProtocol;
311
+ const onRequest = async () => {
312
+ const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });
313
+ if (error) throw error;
314
+ };
315
+ const services = () => ({
316
+ ...this._serviceHost.services,
317
+ WorkerService: this.#workerServiceHandlers
318
+ });
319
+ this._clientRpc = new ClientRpcServer({
320
+ services,
321
+ protocol: appProtocol,
322
+ onRequest
323
+ });
324
+ this._shellClientRpc = shellPort ? new ClientRpcServer({
325
+ services,
326
+ port: shellPort,
327
+ onRequest
328
+ }) : void 0;
329
+ }
330
+ open() {
331
+ return Effect.gen(this, function* () {
332
+ log("opening...", void 0, {
333
+ "~LogMeta": "~LogMeta",
334
+ F: __dxlog_file$1,
335
+ L: 115,
336
+ S: this
337
+ });
338
+ const { bridgeService, close } = yield* Effect.promise(() => makeBridgeServiceClientOverProtocol(this._systemProtocol));
339
+ this.bridgeService = bridgeService;
340
+ this.#closeBridge = close;
341
+ yield* Effect.promise(() => Promise.all([this._clientRpc.open(), this._maybeOpenShell()]));
342
+ yield* Effect.promise(() => this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT }));
343
+ if (this.lockKey) this._afterLockReleases(this.lockKey, () => EffectEx.runPromise(this.close()).catch((err) => log.catch(err, void 0, {
344
+ "~LogMeta": "~LogMeta",
345
+ F: __dxlog_file$1,
346
+ L: 131,
347
+ S: this
348
+ })));
349
+ log("opened", void 0, {
350
+ "~LogMeta": "~LogMeta",
351
+ F: __dxlog_file$1,
352
+ L: 135,
353
+ S: this
354
+ });
355
+ });
356
+ }
357
+ close() {
358
+ return Effect.gen(this, function* () {
359
+ log.debug("closing...", void 0, {
360
+ "~LogMeta": "~LogMeta",
361
+ F: __dxlog_file$1,
362
+ L: 141,
363
+ S: this
364
+ });
365
+ yield* Effect.promise(async () => {
366
+ try {
367
+ await this.onClose.callIfSet();
368
+ } catch (err) {
369
+ log.catch(err, void 0, {
370
+ "~LogMeta": "~LogMeta",
371
+ F: __dxlog_file$1,
372
+ L: 146,
373
+ S: this
374
+ });
375
+ }
376
+ });
377
+ yield* Effect.promise(() => Promise.all([
378
+ this._clientRpc.close(),
379
+ this._shellClientRpc?.close(),
380
+ this.#closeBridge?.()
381
+ ]));
382
+ this.bridgeService = void 0;
383
+ this.#closeBridge = void 0;
384
+ log.debug("closed", void 0, {
385
+ "~LogMeta": "~LogMeta",
386
+ F: __dxlog_file$1,
387
+ L: 155,
388
+ S: this
389
+ });
390
+ });
391
+ }
392
+ async _maybeOpenShell() {
393
+ try {
394
+ this._shellClientRpc && await this._shellClientRpc.open();
395
+ } catch {
396
+ log.info("No shell connected.", void 0, {
397
+ "~LogMeta": "~LogMeta",
398
+ F: __dxlog_file$1,
399
+ L: 163,
400
+ S: this
401
+ });
402
+ }
403
+ }
404
+ _afterLockReleases(lockKey, callback) {
405
+ return navigator.locks.request(lockKey, () => {}).then(callback);
406
+ }
407
+ };
408
+ __decorate([logInfo], WorkerSession.prototype, "origin", void 0);
409
+ __decorate([logInfo], WorkerSession.prototype, "lockKey", void 0);
410
+ //#endregion
411
+ //#region src/packlets/worker/worker-runtime.ts
412
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-runtime.ts";
413
+ /**
414
+ * Context tag for the dedicated-worker runtime service. Provided by {@link layerWorkerRuntime}.
415
+ */
416
+ var WorkerRuntime = class extends Context_.Tag("@dxos/client-services/WorkerRuntime")() {};
417
+ /**
418
+ * Constructs the {@link WorkerRuntimeService}. The SQLite {@link ManagedRuntime} and
419
+ * {@link ClientServicesHost} are built eagerly; the async open sequence runs in {@link start}.
420
+ */
421
+ var makeWorkerRuntime = ({ configProvider, acquireLock, releaseLock, onStop, automaticallyConnectWebrtc = true, sqliteLayer }) => {
422
+ const transportFactory = new RtcTransportProxyFactory();
423
+ const ready = new Trigger();
424
+ const sessions = /* @__PURE__ */ new Set();
425
+ const signalMetadataTags = { runtime: "worker-runtime" };
426
+ let stopped = false;
427
+ let sessionForNetworking;
428
+ let config;
429
+ let serviceScope;
430
+ if (sqliteLayer) log.warn("Using testing SQLite layer", void 0, {
431
+ "~LogMeta": "~LogMeta",
432
+ F: __dxlog_file,
433
+ L: 113,
434
+ S: void 0
435
+ });
436
+ const runtime = ManagedRuntime.make(SqlTransaction.layer.pipe(Layer.provideMerge(sqliteLayer ?? LocalSqliteOpfsLayer), Layer.provideMerge(Reactivity.layer)).pipe(Layer.orDie));
437
+ const stop = () => Effect.promise(async () => {
438
+ if (stopped) return;
439
+ stopped = true;
440
+ releaseLock();
441
+ try {
442
+ await clientServices.close(Context.default(void 0, {
443
+ "~LogMeta": "~LogMeta",
444
+ F: __dxlog_file,
445
+ L: 133
446
+ }));
447
+ if (serviceScope) {
448
+ await EffectEx.runPromise(Scope.close(serviceScope, Exit.void));
449
+ serviceScope = void 0;
450
+ }
451
+ } finally {
452
+ await runtime.dispose();
453
+ await onStop?.();
454
+ }
455
+ });
456
+ const clientServices = new ClientServicesHost({
457
+ callbacks: { onReset: async () => {
458
+ await EffectEx.runPromise(stop());
459
+ } },
460
+ runtime: runtime.runtimeEffect,
461
+ runtimeProps: { autoActivateSpaces: true }
462
+ });
463
+ const connectBridge = (session) => {
464
+ sessionForNetworking = session;
465
+ transportFactory.setBridgeService(session?.bridgeService);
466
+ };
467
+ const reconnectWebrtc = Effect.sync(() => {
468
+ log("reconnecting webrtc...", void 0, {
469
+ "~LogMeta": "~LogMeta",
470
+ F: __dxlog_file,
471
+ L: 164,
472
+ S: void 0
473
+ });
474
+ if (sessionForNetworking && !sessions.has(sessionForNetworking)) sessionForNetworking = void 0;
475
+ if (!sessionForNetworking) connectBridge(Array.from(sessions).find((session) => session.bridgeService));
476
+ });
477
+ const start = () => Effect.promise(async () => {
478
+ log("starting...", void 0, {
479
+ "~LogMeta": "~LogMeta",
480
+ F: __dxlog_file,
481
+ L: 176,
482
+ S: void 0
483
+ });
484
+ try {
485
+ log("worker-runtime: acquiring storage lock", void 0, {
486
+ "~LogMeta": "~LogMeta",
487
+ F: __dxlog_file,
488
+ L: 178,
489
+ S: void 0
490
+ });
491
+ await acquireLock();
492
+ log("worker-runtime: storage lock acquired, resolving config", void 0, {
493
+ "~LogMeta": "~LogMeta",
494
+ F: __dxlog_file,
495
+ L: 180,
496
+ S: void 0
497
+ });
498
+ config = await configProvider();
499
+ log("worker-runtime: config resolved", void 0, {
500
+ "~LogMeta": "~LogMeta",
501
+ F: __dxlog_file,
502
+ L: 182,
503
+ S: void 0
504
+ });
505
+ const observabilityGroup = config.get("runtime.client.observabilityGroup");
506
+ if (observabilityGroup) signalMetadataTags.group = observabilityGroup;
507
+ log("worker-runtime: initializing client services host", void 0, {
508
+ "~LogMeta": "~LogMeta",
509
+ F: __dxlog_file,
510
+ L: 187,
511
+ S: void 0
512
+ });
513
+ clientServices.initialize({
514
+ config,
515
+ signalManager: config.get("runtime.client.edgeFeatures")?.signaling ? void 0 : new MemorySignalManager(new MemorySignalManagerContext()),
516
+ transportFactory
517
+ });
518
+ log("worker-runtime: client services host initialized, opening", void 0, {
519
+ "~LogMeta": "~LogMeta",
520
+ F: __dxlog_file,
521
+ L: 197,
522
+ S: void 0
523
+ });
524
+ await clientServices.open(new Context(void 0, {
525
+ "~LogMeta": "~LogMeta",
526
+ F: __dxlog_file,
527
+ L: 199
528
+ }));
529
+ log("worker-runtime: client services host opened, signalling ready", void 0, {
530
+ "~LogMeta": "~LogMeta",
531
+ F: __dxlog_file,
532
+ L: 200,
533
+ S: void 0
534
+ });
535
+ ready.wake(void 0);
536
+ log("started", void 0, {
537
+ "~LogMeta": "~LogMeta",
538
+ F: __dxlog_file,
539
+ L: 202,
540
+ S: void 0
541
+ });
542
+ serviceScope = Effect.runSync(Scope.make());
543
+ const { IdentityService: identityHandlers, DevicesService: devicesHandlers } = clientServices.services;
544
+ invariant(identityHandlers, "IdentityService handler not available", {
545
+ "~LogMeta": "~LogMeta",
546
+ F: __dxlog_file,
547
+ L: 206,
548
+ S: void 0,
549
+ A: ["identityHandlers", "'IdentityService handler not available'"]
550
+ });
551
+ invariant(devicesHandlers, "DevicesService handler not available", {
552
+ "~LogMeta": "~LogMeta",
553
+ F: __dxlog_file,
554
+ L: 207,
555
+ S: void 0,
556
+ A: ["devicesHandlers", "'DevicesService handler not available'"]
557
+ });
558
+ const [identityService, devicesService] = await EffectEx.runPromise(Effect.all([makeInProcessClient(IdentityService.Rpcs, identityHandlers), makeInProcessClient(DevicesService.Rpcs, devicesHandlers)]).pipe(Effect.provideService(Scope.Scope, serviceScope)));
559
+ setIdentityTags({
560
+ identityService,
561
+ devicesService,
562
+ setTag: (key, value) => {
563
+ signalMetadataTags[key] = value;
564
+ }
565
+ });
566
+ } catch (err) {
567
+ ready.wake(err);
568
+ log.error("starting", err, {
569
+ "~LogMeta": "~LogMeta",
570
+ F: __dxlog_file,
571
+ L: 223,
572
+ S: void 0
573
+ });
574
+ }
575
+ });
576
+ const createSession = ({ appProtocol, systemProtocol, shellPort, onClose }) => Effect.gen(function* () {
577
+ const session = new WorkerSession({
578
+ serviceHost: clientServices,
579
+ appProtocol,
580
+ systemProtocol,
581
+ shellPort,
582
+ readySignal: ready
583
+ });
584
+ session.onClose.set(async () => {
585
+ await EffectEx.runPromise(Effect.gen(function* () {
586
+ sessions.delete(session);
587
+ if (sessions.size === 0) yield* stop();
588
+ else if (automaticallyConnectWebrtc) yield* reconnectWebrtc;
589
+ }));
590
+ await onClose?.();
591
+ });
592
+ yield* session.open();
593
+ invariant(!signalMetadataTags.origin || signalMetadataTags.origin === session.origin, `worker origin changed from ${signalMetadataTags.origin} to ${session.origin}?`, {
594
+ "~LogMeta": "~LogMeta",
595
+ F: __dxlog_file,
596
+ L: 260,
597
+ S: this,
598
+ A: ["!signalMetadataTags.origin || signalMetadataTags.origin === session.origin", "`worker origin changed from ${signalMetadataTags.origin} to ${session.origin}?`"]
599
+ });
600
+ signalMetadataTags.origin = session.origin;
601
+ sessions.add(session);
602
+ if (automaticallyConnectWebrtc) yield* reconnectWebrtc;
603
+ return session;
604
+ });
605
+ return {
606
+ host: clientServices,
607
+ start,
608
+ stop,
609
+ createSession,
610
+ connectWebrtcBridge: (session) => Effect.sync(() => connectBridge(session))
611
+ };
612
+ };
613
+ /**
614
+ * Layer providing the {@link WorkerRuntime} service. The service is constructed synchronously;
615
+ * callers drive `start` / `stop` explicitly (see {@link WorkerRuntimeService}).
616
+ */
617
+ var layerWorkerRuntime = (options) => Layer.sync(WorkerRuntime, () => makeWorkerRuntime(options));
618
+ /**
619
+ * Local SQLite layer for the worker.
620
+ * Uses in-process OPFS via {@link SqliteClient.layerOpfs} (no MessagePort).
621
+ * NOTE: Only usable within a worker.
622
+ */
623
+ var LocalSqliteOpfsLayer = Layer.effect(SqlExport.SqlExport, Effect.gen(function* () {
624
+ return { export: (yield* SqliteClient.SqliteClient).export };
625
+ })).pipe(Layer.provideMerge(SqliteClient.layerOpfs({ dbName: "DXOS" })), Layer.provideMerge(Reactivity.layer));
626
+ //#endregion
627
+ //#region src/index.ts
628
+ var src_exports = /* @__PURE__ */ __exportAll({
629
+ AuthExtension: () => AuthExtension,
630
+ AuthStatus: () => AuthStatus,
631
+ ClientServicesHost: () => ClientServicesHost,
632
+ ClientServicesHostService: () => ClientServicesHostService,
633
+ ClientServicesRpcLayer: () => ClientServicesRpcLayer,
634
+ CredentialRetrieverExtension: () => CredentialRetrieverExtension,
635
+ CredentialServerExtension: () => CredentialServerExtension,
636
+ CrossDeviceSpaceSynchronizerLayer: () => CrossDeviceSpaceSynchronizerLayer,
637
+ CrossDeviceSpaceSynchronizerService: () => CrossDeviceSpaceSynchronizerService,
638
+ DataSpace: () => DataSpace,
639
+ DataSpaceManager: () => DataSpaceManager,
640
+ DataSpaceManagerLayer: () => DataSpaceManagerLayer,
641
+ DataSpaceManagerService: () => DataSpaceManagerService,
642
+ DeviceInvitationProtocol: () => DeviceInvitationProtocol,
643
+ DevtoolsHostEvents: () => DevtoolsHostEvents,
644
+ DevtoolsServiceImpl: () => DevtoolsServiceImpl,
645
+ DiagnosticsCollector: () => DiagnosticsCollector,
646
+ EdgeAgentManager: () => EdgeAgentManager,
647
+ EdgeAgentManagerLayer: () => EdgeAgentManagerLayer,
648
+ EdgeAgentManagerService: () => EdgeAgentManagerService,
649
+ EdgeAgentServiceImpl: () => EdgeAgentServiceImpl,
650
+ EdgeFeedReplicator: () => EdgeFeedReplicator,
651
+ FeedSyncer: () => FeedSyncer,
652
+ FeedSyncerLayer: () => FeedSyncerLayer,
653
+ FeedSyncerService: () => FeedSyncerService,
654
+ IMetadataStoreService: () => IMetadataStoreService,
655
+ Identity: () => Identity,
656
+ IdentityManager: () => IdentityManager,
657
+ IdentityManagerLayer: () => IdentityManagerLayer,
658
+ IdentityManagerService: () => IdentityManagerService,
659
+ IdentityProviderService: () => IdentityProviderService,
660
+ IdentityServiceImpl: () => IdentityServiceImpl,
661
+ InvitationsHandler: () => InvitationsHandler,
662
+ InvitationsHandlerLayer: () => InvitationsHandlerLayer,
663
+ InvitationsHandlerService: () => InvitationsHandlerService,
664
+ InvitationsManager: () => InvitationsManager,
665
+ InvitationsManagerLayer: () => InvitationsManagerLayer,
666
+ InvitationsManagerService: () => InvitationsManagerService,
667
+ InvitationsServiceImpl: () => InvitationsServiceImpl,
668
+ MOCK_AUTH_PROVIDER: () => MOCK_AUTH_PROVIDER,
669
+ MOCK_AUTH_VERIFIER: () => MOCK_AUTH_VERIFIER,
670
+ MetadataStore: () => MetadataStore,
671
+ OPFS_SQLITE_DB_FILENAME: () => OPFS_SQLITE_DB_FILENAME,
672
+ ServiceContextLayer: () => ServiceContextLayer,
673
+ SigningContextProviderLayer: () => SigningContextProviderLayer,
674
+ SigningContextProviderService: () => SigningContextProviderService,
675
+ Space: () => Space,
676
+ SpaceArchiveWriter: () => SpaceArchiveWriter,
677
+ SpaceInvitationProtocol: () => SpaceInvitationProtocol,
678
+ SpaceManager: () => SpaceManager,
679
+ SpaceManagerLayer: () => SpaceManagerLayer,
680
+ SpaceManagerService: () => SpaceManagerService,
681
+ SpaceProtocol: () => SpaceProtocol,
682
+ SpaceProtocolSession: () => SpaceProtocolSession,
683
+ SpacesServiceImpl: () => SpacesServiceImpl,
684
+ SqliteMetadataStore: () => SqliteMetadataStore,
685
+ SqliteMetadataStoreLayer: () => SqliteMetadataStoreLayer,
686
+ StorageMigrationService: () => StorageMigrationService,
687
+ TrustedKeySetAuthVerifier: () => TrustedKeySetAuthVerifier,
688
+ WorkerRuntime: () => WorkerRuntime,
689
+ WorkerSession: () => WorkerSession,
690
+ buildDatabaseDirectoryFromObjects: () => buildDatabaseDirectoryFromObjects,
691
+ createAdmissionKeypair: () => createAdmissionKeypair,
692
+ createAuthProvider: () => createAuthProvider,
693
+ createCrossDeviceSpaceSynchronizer: () => createCrossDeviceSpaceSynchronizer,
694
+ createDiagnostics: () => createDiagnostics,
695
+ createLevel: () => createLevel,
696
+ createSigningContextProvider: () => createSigningContextProvider,
697
+ createSqliteProfileArchive: () => createSqliteProfileArchive,
698
+ createStorageObjects: () => createStorageObjects,
699
+ decodeProfileArchive: () => decodeProfileArchive,
700
+ detectSpaceArchiveFormat: () => detectSpaceArchiveFormat,
701
+ encodeProfileArchive: () => encodeProfileArchive,
702
+ exportProfileData: () => exportProfileData,
703
+ extractSpaceArchive: () => extractSpaceArchive,
704
+ getNetworkPeers: () => getNetworkPeers,
705
+ getSqliteProfileEntries: () => getSqliteProfileEntries,
706
+ hasInvitationExpired: () => hasInvitationExpired,
707
+ identityProviderFromManager: () => identityProviderFromManager,
708
+ importProfileData: () => importProfileData,
709
+ isValidSqliteDatabase: () => isValidSqliteDatabase,
710
+ layerClientServicesHost: () => layerClientServicesHost,
711
+ layerWorkerRuntime: () => layerWorkerRuntime,
712
+ makeWorkerRuntime: () => makeWorkerRuntime,
713
+ objJsonToObjectStructure: () => objJsonToObjectStructure,
714
+ objectStructureToObjJson: () => objectStructureToObjJson,
715
+ orderObjJsonFields: () => orderObjJsonFields,
716
+ readSerializedSpaceArchive: () => readSerializedSpaceArchive,
717
+ subscribeToFeedBlocks: () => subscribeToFeedBlocks,
718
+ subscribeToFeeds: () => subscribeToFeeds,
719
+ subscribeToNetworkStatus: () => subscribeToNetworkStatus,
720
+ subscribeToNetworkTopics: () => subscribeToNetworkTopics,
721
+ subscribeToSignal: () => subscribeToSignal,
722
+ subscribeToSpaces: () => subscribeToSpaces,
723
+ subscribeToSwarmInfo: () => subscribeToSwarmInfo,
724
+ writeSerializedSpaceArchive: () => writeSerializedSpaceArchive
725
+ });
726
+ __reExport(src_exports, diagnostics_exports);
727
+ __reExport(src_exports, locks_exports);
728
+ //#endregion
729
+ export { AuthExtension, AuthStatus, ClientServicesHost, ClientServicesHostService, ClientServicesRpcLayer, CredentialRetrieverExtension, CredentialServerExtension, CrossDeviceSpaceSynchronizerLayer, CrossDeviceSpaceSynchronizerService, DataSpace, DataSpaceManager, DataSpaceManagerLayer, DataSpaceManagerService, DeviceInvitationProtocol, DevtoolsHostEvents, DevtoolsServiceImpl, DiagnosticsCollector, EdgeAgentManager, EdgeAgentManagerLayer, EdgeAgentManagerService, EdgeAgentServiceImpl, EdgeFeedReplicator, FeedSyncer, FeedSyncerLayer, FeedSyncerService, IMetadataStoreService, Identity, IdentityManager, IdentityManagerLayer, IdentityManagerService, IdentityProviderService, IdentityServiceImpl, InvitationsHandler, InvitationsHandlerLayer, InvitationsHandlerService, InvitationsManager, InvitationsManagerLayer, InvitationsManagerService, InvitationsServiceImpl, MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, MetadataStore, OPFS_SQLITE_DB_FILENAME, ServiceContextLayer, SigningContextProviderLayer, SigningContextProviderService, Space, SpaceArchiveWriter, SpaceInvitationProtocol, SpaceManager, SpaceManagerLayer, SpaceManagerService, SpaceProtocol, SpaceProtocolSession, SpacesServiceImpl, SqliteMetadataStore, SqliteMetadataStoreLayer, StorageMigrationService, TrustedKeySetAuthVerifier, WorkerRuntime, WorkerSession, buildDatabaseDirectoryFromObjects, createAdmissionKeypair, createAuthProvider, createCrossDeviceSpaceSynchronizer, createDiagnostics, createLevel, createSigningContextProvider, createSqliteProfileArchive, createStorageObjects, decodeProfileArchive, detectSpaceArchiveFormat, encodeProfileArchive, exportProfileData, extractSpaceArchive, getNetworkPeers, getSqliteProfileEntries, hasInvitationExpired, identityProviderFromManager, importProfileData, isValidSqliteDatabase, layerClientServicesHost, layerWorkerRuntime, makeWorkerRuntime, objJsonToObjectStructure, objectStructureToObjJson, orderObjJsonFields, readSerializedSpaceArchive, subscribeToFeedBlocks, subscribeToFeeds, subscribeToNetworkStatus, subscribeToNetworkTopics, subscribeToSignal, subscribeToSpaces, subscribeToSwarmInfo, writeSerializedSpaceArchive };
730
+
731
+ //# sourceMappingURL=index.mjs.map