@dxos/client-services 0.10.0 → 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 (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
@@ -1,876 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- ClientServicesHost,
4
- DataSpace,
5
- DataSpaceManager,
6
- DeviceInvitationProtocol,
7
- DevtoolsHostEvents,
8
- DevtoolsServiceImpl,
9
- DiagnosticsCollector,
10
- EdgeAgentManager,
11
- EdgeAgentServiceImpl,
12
- EdgeFeedReplicator,
13
- FeedSyncer,
14
- Identity,
15
- IdentityManager,
16
- IdentityServiceImpl,
17
- InvitationsHandler,
18
- InvitationsManager,
19
- InvitationsServiceImpl,
20
- ServiceContext,
21
- ServiceRegistry,
22
- SpaceArchiveWriter,
23
- SpaceInvitationProtocol,
24
- SpacesServiceImpl,
25
- TrustedKeySetAuthVerifier,
26
- buildDatabaseDirectoryFromObjects,
27
- createAdmissionKeypair,
28
- createAuthProvider,
29
- createDiagnostics,
30
- detectSpaceArchiveFormat,
31
- diagnostics_exports,
32
- extractSpaceArchive,
33
- getNetworkPeers,
34
- locks_exports,
35
- objJsonToObjectStructure,
36
- objectStructureToObjJson,
37
- orderObjJsonFields,
38
- readSerializedSpaceArchive,
39
- subscribeToFeedBlocks,
40
- subscribeToFeeds,
41
- subscribeToNetworkStatus,
42
- subscribeToNetworkTopics,
43
- subscribeToSignal,
44
- subscribeToSpaces,
45
- subscribeToSwarmInfo,
46
- writeSerializedSpaceArchive
47
- } from "./chunk-H5YTUD35.mjs";
48
- import "./chunk-2DT3MZRL.mjs";
49
- import {
50
- __export,
51
- __reExport
52
- } from "./chunk-2SZHAWBN.mjs";
53
-
54
- // src/index.ts
55
- var index_exports = {};
56
- __export(index_exports, {
57
- ClientRpcServer: () => ClientRpcServer,
58
- ClientServicesHost: () => ClientServicesHost,
59
- DataSpace: () => DataSpace,
60
- DataSpaceManager: () => DataSpaceManager,
61
- DeviceInvitationProtocol: () => DeviceInvitationProtocol,
62
- DevtoolsHostEvents: () => DevtoolsHostEvents,
63
- DevtoolsServiceImpl: () => DevtoolsServiceImpl,
64
- DiagnosticsCollector: () => DiagnosticsCollector,
65
- EdgeAgentManager: () => EdgeAgentManager,
66
- EdgeAgentServiceImpl: () => EdgeAgentServiceImpl,
67
- EdgeFeedReplicator: () => EdgeFeedReplicator,
68
- FeedSyncer: () => FeedSyncer,
69
- Identity: () => Identity,
70
- IdentityManager: () => IdentityManager,
71
- IdentityServiceImpl: () => IdentityServiceImpl,
72
- InvitationsHandler: () => InvitationsHandler,
73
- InvitationsManager: () => InvitationsManager,
74
- InvitationsServiceImpl: () => InvitationsServiceImpl,
75
- OPFS_SQLITE_DB_FILENAME: () => OPFS_SQLITE_DB_FILENAME,
76
- ServiceContext: () => ServiceContext,
77
- ServiceRegistry: () => ServiceRegistry,
78
- SpaceArchiveWriter: () => SpaceArchiveWriter,
79
- SpaceInvitationProtocol: () => SpaceInvitationProtocol,
80
- SpacesServiceImpl: () => SpacesServiceImpl,
81
- TrustedKeySetAuthVerifier: () => TrustedKeySetAuthVerifier,
82
- WorkerRuntime: () => WorkerRuntime,
83
- WorkerSession: () => WorkerSession,
84
- buildDatabaseDirectoryFromObjects: () => buildDatabaseDirectoryFromObjects,
85
- createAdmissionKeypair: () => createAdmissionKeypair,
86
- createAuthProvider: () => createAuthProvider,
87
- createDiagnostics: () => createDiagnostics,
88
- createLevel: () => createLevel,
89
- createSqliteProfileArchive: () => createSqliteProfileArchive,
90
- createStorageObjects: () => createStorageObjects,
91
- decodeProfileArchive: () => decodeProfileArchive,
92
- detectSpaceArchiveFormat: () => detectSpaceArchiveFormat,
93
- encodeProfileArchive: () => encodeProfileArchive,
94
- exportProfileData: () => exportProfileData,
95
- extractSpaceArchive: () => extractSpaceArchive,
96
- getNetworkPeers: () => getNetworkPeers,
97
- getSqliteProfileEntries: () => getSqliteProfileEntries,
98
- importProfileData: () => importProfileData,
99
- isValidSqliteDatabase: () => isValidSqliteDatabase,
100
- objJsonToObjectStructure: () => objJsonToObjectStructure,
101
- objectStructureToObjJson: () => objectStructureToObjJson,
102
- orderObjJsonFields: () => orderObjJsonFields,
103
- readSerializedSpaceArchive: () => readSerializedSpaceArchive,
104
- subscribeToFeedBlocks: () => subscribeToFeedBlocks,
105
- subscribeToFeeds: () => subscribeToFeeds,
106
- subscribeToNetworkStatus: () => subscribeToNetworkStatus,
107
- subscribeToNetworkTopics: () => subscribeToNetworkTopics,
108
- subscribeToSignal: () => subscribeToSignal,
109
- subscribeToSpaces: () => subscribeToSpaces,
110
- subscribeToSwarmInfo: () => subscribeToSwarmInfo,
111
- writeSerializedSpaceArchive: () => writeSerializedSpaceArchive
112
- });
113
- __reExport(index_exports, diagnostics_exports);
114
- __reExport(index_exports, locks_exports);
115
-
116
- // src/packlets/services/client-rpc-server.ts
117
- import { Stream } from "@dxos/codec-protobuf";
118
- import { raise } from "@dxos/debug";
119
- import { RpcPeer, parseMethodName } from "@dxos/rpc";
120
- import { MapCounter, trace } from "@dxos/tracing";
121
- function _ts_decorate(decorators, target, key, desc) {
122
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
123
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
124
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
125
- return c > 3 && r && Object.defineProperty(target, key, r), r;
126
- }
127
- var ClientRpcServer = class {
128
- _serviceRegistry;
129
- _rpcPeer;
130
- _handlerCache = /* @__PURE__ */ new Map();
131
- _handleCall;
132
- _handleStream;
133
- _callMetrics = new MapCounter();
134
- get _services() {
135
- return Object.keys(this._serviceRegistry.services);
136
- }
137
- constructor(params) {
138
- const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;
139
- this._handleCall = handleCall;
140
- this._handleStream = handleStream;
141
- this._serviceRegistry = serviceRegistry;
142
- this._rpcPeer = new RpcPeer({
143
- ...rpcOptions,
144
- callHandler: (method, params2, options) => {
145
- const [serviceName, methodName] = parseMethodName(method);
146
- const handler = (method2, params3, handlerOptions) => this._getServiceHandler(serviceName).call(method2, params3, handlerOptions);
147
- this._callMetrics.inc(`${serviceName}.${methodName} request`);
148
- if (this._handleCall) {
149
- return this._handleCall(methodName, params2, handler, options);
150
- } else {
151
- return handler(methodName, params2, options);
152
- }
153
- },
154
- streamHandler: (method, params2, options) => {
155
- const [serviceName, methodName] = parseMethodName(method);
156
- const handler = (method2, params3, handlerOptions) => this._getServiceHandler(serviceName).callStream(method2, params3, handlerOptions);
157
- this._callMetrics.inc(`${serviceName}.${methodName} request stream`);
158
- if (this._handleStream) {
159
- return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params2, handler, options)), (data) => {
160
- this._callMetrics.inc(`${serviceName}.${methodName} response stream`);
161
- return data;
162
- });
163
- } else {
164
- return handler(methodName, params2, options);
165
- }
166
- }
167
- });
168
- }
169
- async open() {
170
- await this._rpcPeer.open();
171
- }
172
- async close() {
173
- await this._rpcPeer.close();
174
- }
175
- _getServiceHandler(serviceName) {
176
- if (!this._handlerCache.has(serviceName)) {
177
- const [key, descriptor] = Object.entries(this._serviceRegistry.descriptors).find(([key2, descriptor2]) => descriptor2.name === serviceName) ?? raise(new Error(`Service not available: ${serviceName}`));
178
- const service = this._serviceRegistry.services[key];
179
- if (!service) {
180
- throw new Error(`Service not available: ${serviceName}`);
181
- }
182
- this._handlerCache.set(serviceName, descriptor.createServer(service));
183
- }
184
- return this._handlerCache.get(serviceName);
185
- }
186
- };
187
- _ts_decorate([
188
- trace.metricsCounter()
189
- ], ClientRpcServer.prototype, "_callMetrics", void 0);
190
- _ts_decorate([
191
- trace.info()
192
- ], ClientRpcServer.prototype, "_services", null);
193
- ClientRpcServer = _ts_decorate([
194
- trace.resource()
195
- ], ClientRpcServer);
196
-
197
- // src/packlets/storage/storage.ts
198
- import { InvalidConfigError } from "@dxos/protocols";
199
- import { Runtime as Runtime2 } from "@dxos/protocols/proto/dxos/config";
200
- import { StorageType, createStorage } from "@dxos/random-access-storage";
201
-
202
- // src/packlets/storage/util.ts
203
- import { DX_DATA } from "@dxos/client-protocol";
204
- import { Runtime } from "@dxos/protocols/proto/dxos/config";
205
- import { isNode } from "@dxos/util";
206
- var getRootPath = (config) => {
207
- const { dataRoot = isNode() ? DX_DATA : "dxos/storage" } = config ?? {};
208
- return `${dataRoot}/`;
209
- };
210
- var isPersistent = (config) => {
211
- const { persistent = false } = config ?? {};
212
- return config.dataStore !== void 0 && config.dataStore !== Runtime.Client.Storage.StorageDriver.RAM || persistent;
213
- };
214
-
215
- // src/packlets/storage/storage.ts
216
- var StorageDriver = Runtime2.Client.Storage.StorageDriver;
217
- var createStorageObjects = (config) => {
218
- const { persistent = false, keyStore, dataStore } = config ?? {};
219
- if (persistent && dataStore === StorageDriver.RAM) {
220
- throw new InvalidConfigError({
221
- message: "RAM storage cannot be used in persistent mode."
222
- });
223
- }
224
- if (!persistent && dataStore !== void 0 && dataStore !== StorageDriver.RAM) {
225
- throw new InvalidConfigError({
226
- message: "Cannot use a persistent storage in not persistent mode."
227
- });
228
- }
229
- if (persistent && keyStore === StorageDriver.RAM) {
230
- throw new InvalidConfigError({
231
- message: "RAM key storage cannot be used in persistent mode."
232
- });
233
- }
234
- if (!persistent && keyStore !== StorageDriver.RAM && keyStore !== void 0) {
235
- throw new InvalidConfigError({
236
- message: "Cannot use a persistent key storage in not persistent mode."
237
- });
238
- }
239
- return {
240
- storage: createStorage({
241
- type: persistent ? toStorageType(dataStore) : StorageType.RAM,
242
- root: getRootPath(config)
243
- })
244
- };
245
- };
246
- var toStorageType = (type) => {
247
- switch (type) {
248
- case void 0:
249
- return void 0;
250
- case StorageDriver.RAM:
251
- return StorageType.RAM;
252
- case StorageDriver.CHROME:
253
- return StorageType.CHROME;
254
- case StorageDriver.FIREFOX:
255
- return StorageType.FIREFOX;
256
- case StorageDriver.IDB:
257
- return StorageType.IDB;
258
- case StorageDriver.NODE:
259
- return StorageType.NODE;
260
- case StorageDriver.WEBFS:
261
- return StorageType.WEBFS;
262
- default:
263
- throw new Error(`Invalid storage type: ${StorageDriver[type]}`);
264
- }
265
- };
266
-
267
- // src/packlets/storage/level.ts
268
- import path from "node:path";
269
- import { PublicKey } from "@dxos/keys";
270
- import { createLevel as createKV } from "@dxos/kv-store";
271
- var createLevel = async (config) => {
272
- const persistent = isPersistent(config);
273
- const storagePath = persistent ? path.join(getRootPath(config), "level") : `/tmp/dxos-${PublicKey.random().toHex()}`;
274
- const level = createKV(storagePath);
275
- await level.open();
276
- return level;
277
- };
278
-
279
- // src/packlets/storage/profile-archive.ts
280
- import { cbor } from "@automerge/automerge-repo";
281
- import { invariant } from "@dxos/invariant";
282
- import { log } from "@dxos/log";
283
- import { ProfileArchiveEntryType } from "@dxos/protocols";
284
- import { arrayToBuffer } from "@dxos/util";
285
- var __dxlog_file = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/storage/profile-archive.ts";
286
- var encodeProfileArchive = (profile) => cbor.encode(profile);
287
- var decodeProfileArchive = (data) => cbor.decode(data);
288
- var exportProfileData = async ({ storage, level }) => {
289
- const archive = {
290
- storage: [],
291
- meta: {
292
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
293
- }
294
- };
295
- {
296
- const directory = await storage.createDirectory();
297
- const files = await directory.list();
298
- log.info("begin exporting files", {
299
- count: files.length
300
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 21, S: void 0 });
301
- for (const filename of files) {
302
- const file = await directory.getOrCreateFile(filename);
303
- const { size } = await file.stat();
304
- const data = await file.read(0, size);
305
- archive.storage.push({
306
- type: ProfileArchiveEntryType.FILE,
307
- key: filename,
308
- value: data
309
- });
310
- }
311
- log.info("done exporting files", {
312
- count: files.length
313
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 34, S: void 0 });
314
- }
315
- {
316
- log.info("begin exporting kv pairs", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 39, S: void 0 });
317
- const iter = await level.iterator({
318
- keyEncoding: "binary",
319
- valueEncoding: "binary"
320
- });
321
- let count = 0;
322
- for await (const [key, value] of iter) {
323
- archive.storage.push({
324
- type: ProfileArchiveEntryType.KEY_VALUE,
325
- key,
326
- value
327
- });
328
- count++;
329
- }
330
- log.info("done exporting kv pairs", {
331
- count
332
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 53, S: void 0 });
333
- }
334
- return archive;
335
- };
336
- var importProfileData = async ({ storage, level }, archive) => {
337
- let batch = level.batch();
338
- let count = 0;
339
- for (const entry of archive.storage) {
340
- switch (entry.type) {
341
- case ProfileArchiveEntryType.FILE: {
342
- const directory = await storage.createDirectory();
343
- invariant(typeof entry.key === "string", "Invalid key type", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 67, S: void 0, A: ["typeof entry.key === 'string'", "'Invalid key type'"] });
344
- const file = await directory.getOrCreateFile(entry.key);
345
- invariant(entry.value instanceof Uint8Array, "Invalid value type", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 69, S: void 0, A: ["entry.value instanceof Uint8Array", "'Invalid value type'"] });
346
- await file.write(0, arrayToBuffer(entry.value));
347
- await file.close();
348
- break;
349
- }
350
- case ProfileArchiveEntryType.KEY_VALUE: {
351
- invariant(entry.key instanceof Uint8Array, "Invalid key type", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 76, S: void 0, A: ["entry.key instanceof Uint8Array", "'Invalid key type'"] });
352
- invariant(entry.value instanceof Uint8Array, "Invalid value type", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 77, S: void 0, A: ["entry.value instanceof Uint8Array", "'Invalid value type'"] });
353
- batch.put(entry.key, entry.value, {
354
- keyEncoding: "binary",
355
- valueEncoding: "binary"
356
- });
357
- break;
358
- }
359
- case ProfileArchiveEntryType.SQLITE_DATABASE:
360
- log.warn("Skipping SQLITE_DATABASE entry (import via OPFS recovery API)", {
361
- key: entry.key
362
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 85, S: void 0 });
363
- break;
364
- default:
365
- throw new Error(`Invalid entry type: ${entry.type}`);
366
- }
367
- if (++count % 1e3 === 0) {
368
- await batch.write();
369
- batch = level.batch();
370
- log.info("importing", {
371
- count,
372
- total: archive.storage.length,
373
- progress: `${(count / archive.storage.length * 100).toFixed()}%`
374
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 96, S: void 0 });
375
- }
376
- }
377
- log.info("committing changes..", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 103, S: void 0 });
378
- await batch.write();
379
- };
380
-
381
- // src/packlets/storage/profile-archive-sqlite.ts
382
- import { ProfileArchiveEntryType as ProfileArchiveEntryType2 } from "@dxos/protocols";
383
- var OPFS_SQLITE_DB_FILENAME = "DXOS";
384
- var SQLITE_MAGIC = new TextEncoder().encode("SQLite format 3\0");
385
- var isValidSqliteDatabase = (bytes) => {
386
- if (bytes.byteLength < SQLITE_MAGIC.byteLength) {
387
- return false;
388
- }
389
- for (let index = 0; index < SQLITE_MAGIC.byteLength; index++) {
390
- if (bytes[index] !== SQLITE_MAGIC[index]) {
391
- return false;
392
- }
393
- }
394
- return true;
395
- };
396
- var coerceToUint8Array = (value) => {
397
- if (value instanceof Uint8Array) {
398
- return value;
399
- }
400
- if (value instanceof ArrayBuffer) {
401
- return new Uint8Array(value);
402
- }
403
- if (Array.isArray(value)) {
404
- return new Uint8Array(value);
405
- }
406
- return void 0;
407
- };
408
- var createSqliteProfileArchive = (opfsFilename, database, options) => {
409
- if (!isValidSqliteDatabase(database)) {
410
- throw new Error("Invalid SQLite database (missing SQLite format 3 header)");
411
- }
412
- return {
413
- meta: {
414
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
415
- ...options?.origin ? {
416
- origin: options.origin
417
- } : {}
418
- },
419
- storage: [
420
- {
421
- type: ProfileArchiveEntryType2.SQLITE_DATABASE,
422
- key: opfsFilename,
423
- value: database
424
- }
425
- ]
426
- };
427
- };
428
- var getSqliteProfileEntries = (archive) => {
429
- const entries = [];
430
- for (const entry of archive.storage) {
431
- if (entry.type !== ProfileArchiveEntryType2.SQLITE_DATABASE) {
432
- continue;
433
- }
434
- if (typeof entry.key !== "string") {
435
- continue;
436
- }
437
- const database = coerceToUint8Array(entry.value);
438
- if (!database || !isValidSqliteDatabase(database)) {
439
- continue;
440
- }
441
- entries.push({
442
- opfsFilename: entry.key,
443
- database
444
- });
445
- }
446
- return entries;
447
- };
448
-
449
- // src/packlets/worker/worker-runtime.ts
450
- import * as Reactivity from "@effect/experimental/Reactivity";
451
- import * as Effect from "effect/Effect";
452
- import * as Layer from "effect/Layer";
453
- import * as ManagedRuntime from "effect/ManagedRuntime";
454
- import { Trigger as Trigger2 } from "@dxos/async";
455
- import { DEFAULT_WORKER_BROADCAST_CHANNEL } from "@dxos/client-protocol";
456
- import { Context } from "@dxos/context";
457
- import { invariant as invariant3 } from "@dxos/invariant";
458
- import { log as log3 } from "@dxos/log";
459
- import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager, setIdentityTags } from "@dxos/messaging";
460
- import { RtcTransportProxyFactory } from "@dxos/network-manager";
461
- import * as SqlExport from "@dxos/sql-sqlite/SqlExport";
462
- import * as SqliteClient from "@dxos/sql-sqlite/SqliteClient";
463
- import * as SqlTransaction from "@dxos/sql-sqlite/SqlTransaction";
464
-
465
- // src/packlets/worker/worker-session.ts
466
- import { Trigger, asyncTimeout } from "@dxos/async";
467
- import { PROXY_CONNECTION_TIMEOUT, iframeServiceBundle, workerServiceBundle } from "@dxos/client-protocol";
468
- import { invariant as invariant2 } from "@dxos/invariant";
469
- import { log as log2, logInfo } from "@dxos/log";
470
- import { createProtoRpcPeer } from "@dxos/rpc";
471
- import { Callback } from "@dxos/util";
472
- var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-session.ts";
473
- function _ts_decorate2(decorators, target, key, desc) {
474
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
475
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
476
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
477
- return c > 3 && r && Object.defineProperty(target, key, r), r;
478
- }
479
- var WorkerSession = class {
480
- _clientRpc;
481
- _shellClientRpc;
482
- _iframeRpc;
483
- _startTrigger = new Trigger();
484
- _serviceHost;
485
- onClose = new Callback();
486
- origin;
487
- lockKey;
488
- bridgeService;
489
- constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
490
- invariant2(serviceHost, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 30, S: this, A: ["serviceHost", ""] });
491
- this._serviceHost = serviceHost;
492
- const middleware = {
493
- handleCall: async (method, params, handler, options) => {
494
- const error = await readySignal.wait({
495
- timeout: PROXY_CONNECTION_TIMEOUT
496
- });
497
- if (error) {
498
- throw error;
499
- }
500
- return handler(method, params, options);
501
- },
502
- handleStream: async (method, params, handler, options) => {
503
- const error = await readySignal.wait({
504
- timeout: PROXY_CONNECTION_TIMEOUT
505
- });
506
- if (error) {
507
- throw error;
508
- }
509
- return handler(method, params, options);
510
- }
511
- };
512
- this._clientRpc = new ClientRpcServer({
513
- serviceRegistry: this._serviceHost.serviceRegistry,
514
- port: appPort,
515
- ...middleware
516
- });
517
- this._shellClientRpc = shellPort ? new ClientRpcServer({
518
- serviceRegistry: this._serviceHost.serviceRegistry,
519
- port: shellPort,
520
- ...middleware
521
- }) : void 0;
522
- this._iframeRpc = createProtoRpcPeer({
523
- requested: iframeServiceBundle,
524
- exposed: workerServiceBundle,
525
- handlers: {
526
- WorkerService: {
527
- start: async (request) => {
528
- this.origin = request.origin;
529
- this.lockKey = request.lockKey;
530
- this._startTrigger.wake();
531
- },
532
- stop: async () => {
533
- setTimeout(async () => {
534
- try {
535
- await this.close();
536
- } catch (err) {
537
- log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 77, S: this });
538
- }
539
- });
540
- }
541
- }
542
- },
543
- port: systemPort,
544
- timeout: 1e3
545
- });
546
- this.bridgeService = this._iframeRpc.rpc.BridgeService;
547
- }
548
- async open() {
549
- log2("opening...", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 89, S: this });
550
- await Promise.all([
551
- this._clientRpc.open(),
552
- this._iframeRpc.open(),
553
- this._maybeOpenShell()
554
- ]);
555
- await this._startTrigger.wait({
556
- timeout: PROXY_CONNECTION_TIMEOUT
557
- });
558
- if (this.lockKey) {
559
- void this._afterLockReleases(this.lockKey, () => this.close());
560
- }
561
- log2("opened", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 103, S: this });
562
- }
563
- async close() {
564
- log2.debug("closing...", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 106, S: this });
565
- try {
566
- await this.onClose.callIfSet();
567
- } catch (err) {
568
- log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 110, S: this });
569
- }
570
- await Promise.all([
571
- this._clientRpc.close(),
572
- this._iframeRpc.close()
573
- ]);
574
- log2.debug("closed", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 116, S: this });
575
- }
576
- async _maybeOpenShell() {
577
- try {
578
- this._shellClientRpc && await asyncTimeout(this._shellClientRpc.open(), 1e3);
579
- } catch {
580
- log2.info("No shell connected.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 122, S: this });
581
- }
582
- }
583
- _afterLockReleases(lockKey, callback) {
584
- return navigator.locks.request(lockKey, () => {
585
- }).then(callback);
586
- }
587
- };
588
- _ts_decorate2([
589
- logInfo
590
- ], WorkerSession.prototype, "origin", void 0);
591
- _ts_decorate2([
592
- logInfo
593
- ], WorkerSession.prototype, "lockKey", void 0);
594
-
595
- // src/packlets/worker/worker-runtime.ts
596
- var __dxlog_file3 = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-runtime.ts";
597
- var WorkerRuntime = class {
598
- _configProvider;
599
- _acquireLock;
600
- _releaseLock;
601
- _onStop;
602
- _transportFactory = new RtcTransportProxyFactory();
603
- _ready = new Trigger2();
604
- _sessions = /* @__PURE__ */ new Set();
605
- _clientServices;
606
- _channel;
607
- _automaticallyConnectWebrtc;
608
- _livenessLock = new WebLockWrapper(`@dxos/client-services/WorkerRuntime/${crypto.randomUUID()}`);
609
- _broadcastChannel;
610
- _sessionForNetworking;
611
- _config;
612
- _signalMetadataTags = {
613
- runtime: "worker-runtime"
614
- };
615
- _signalTelemetryEnabled = false;
616
- _runtime;
617
- constructor({ channel = DEFAULT_WORKER_BROADCAST_CHANNEL, configProvider, acquireLock, releaseLock, onStop, automaticallyConnectWebrtc = true, sqliteLayer }) {
618
- this._configProvider = configProvider;
619
- this._acquireLock = acquireLock;
620
- this._releaseLock = releaseLock;
621
- this._onStop = onStop;
622
- this._channel = channel;
623
- if (sqliteLayer) {
624
- log3.warn("Using testing SQLite layer", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 51, S: this });
625
- }
626
- this._runtime = ManagedRuntime.make(SqlTransaction.layer.pipe(Layer.provideMerge(sqliteLayer ?? LocalSqliteOpfsLayer), Layer.provideMerge(Reactivity.layer)).pipe(Layer.orDie));
627
- this._clientServices = new ClientServicesHost({
628
- callbacks: {
629
- onReset: async () => this.stop()
630
- },
631
- runtime: this._runtime.runtimeEffect,
632
- runtimeProps: {
633
- // Auto-activate spaces that were previously active after leader changeover.
634
- autoActivateSpaces: true
635
- }
636
- });
637
- this._automaticallyConnectWebrtc = automaticallyConnectWebrtc;
638
- }
639
- get host() {
640
- return this._clientServices;
641
- }
642
- get livenessLockKey() {
643
- return this._livenessLock.key;
644
- }
645
- async start() {
646
- log3("starting...", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 73, S: this });
647
- try {
648
- log3("worker-runtime: acquiring liveness lock (background)", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 75, S: this });
649
- void this._livenessLock.acquire();
650
- log3("worker-runtime: broadcasting stop to displace previous worker", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 78, S: this });
651
- this._broadcastChannel = new BroadcastChannel(this._channel);
652
- this._broadcastChannel.postMessage({
653
- action: "stop"
654
- });
655
- this._broadcastChannel.onmessage = async (event) => {
656
- if (event.data?.action === "stop") {
657
- log3("worker-runtime: received stop broadcast", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 85, S: this });
658
- await this.stop();
659
- }
660
- };
661
- log3("worker-runtime: acquiring storage lock", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 89, S: this });
662
- await this._acquireLock();
663
- log3("worker-runtime: storage lock acquired, resolving config", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 91, S: this });
664
- this._config = await this._configProvider();
665
- log3("worker-runtime: config resolved", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 93, S: this });
666
- this._signalTelemetryEnabled = this._config.get("runtime.client.signalTelemetryEnabled") ?? false;
667
- const observabilityGroup = this._config.get("runtime.client.observabilityGroup");
668
- if (observabilityGroup) {
669
- this._signalMetadataTags.group = observabilityGroup;
670
- }
671
- const signals = this._config.get("runtime.services.signaling");
672
- log3("worker-runtime: initializing client services host", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 100, S: this });
673
- this._clientServices.initialize({
674
- config: this._config,
675
- signalManager: this._config.get("runtime.client.edgeFeatures")?.signaling ? void 0 : signals ? new WebsocketSignalManager(signals, () => this._signalTelemetryEnabled ? this._signalMetadataTags : {}) : new MemorySignalManager(new MemorySignalManagerContext()),
676
- transportFactory: this._transportFactory
677
- });
678
- log3("worker-runtime: client services host initialized, opening", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 106, S: this });
679
- await this._clientServices.open(new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 107 }));
680
- log3("worker-runtime: client services host opened, signalling ready", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 108, S: this });
681
- this._ready.wake(void 0);
682
- log3("started", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 110, S: this });
683
- setIdentityTags({
684
- identityService: this._clientServices.services.IdentityService,
685
- devicesService: this._clientServices.services.DevicesService,
686
- setTag: (k, v) => {
687
- this._signalMetadataTags[k] = v;
688
- }
689
- });
690
- } catch (err) {
691
- this._ready.wake(err);
692
- log3.error("starting", err, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 120, S: this });
693
- }
694
- }
695
- async stop() {
696
- this._releaseLock();
697
- this._broadcastChannel?.close();
698
- this._broadcastChannel = void 0;
699
- await this._clientServices.close(Context.default(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 128 }));
700
- await this._runtime.dispose();
701
- await this._onStop?.();
702
- await this._livenessLock.release();
703
- }
704
- /**
705
- * Update signaling telemetry tags from a client-supplied config overlay.
706
- *
707
- * The worker services outlive individual client connections, so the first client seeds the
708
- * worker's core config (storage, signaling, edge features). For fields that can legitimately
709
- * differ per tab — `observabilityGroup` and `signalTelemetryEnabled` — this method lets later
710
- * connections refresh the signal metadata the worker attaches to its signaling requests
711
- * (last-writer-wins, matching the pre-DX-930 per-session RPC behaviour).
712
- */
713
- updateSignalMetadata(config) {
714
- const observabilityGroup = config.get("runtime.client.observabilityGroup");
715
- if (observabilityGroup) {
716
- this._signalMetadataTags.group = observabilityGroup;
717
- } else {
718
- delete this._signalMetadataTags.group;
719
- }
720
- const signalTelemetryEnabled = config.get("runtime.client.signalTelemetryEnabled");
721
- if (signalTelemetryEnabled !== void 0) {
722
- this._signalTelemetryEnabled = signalTelemetryEnabled;
723
- }
724
- }
725
- /**
726
- * Create a new session.
727
- */
728
- async createSession({ appPort, systemPort, shellPort, onClose }) {
729
- const session = new WorkerSession({
730
- serviceHost: this._clientServices,
731
- appPort,
732
- systemPort,
733
- shellPort,
734
- readySignal: this._ready
735
- });
736
- session.onClose.set(async () => {
737
- this._sessions.delete(session);
738
- if (this._sessions.size === 0) {
739
- await this.stop();
740
- } else {
741
- if (this._automaticallyConnectWebrtc) {
742
- this._reconnectWebrtc();
743
- }
744
- }
745
- await onClose?.();
746
- });
747
- await session.open();
748
- invariant3(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 180, S: this, A: ["!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin", "`worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`"] });
749
- this._signalMetadataTags.origin = session.origin;
750
- this._sessions.add(session);
751
- if (this._automaticallyConnectWebrtc) {
752
- this._reconnectWebrtc();
753
- }
754
- return session;
755
- }
756
- /**
757
- * Connects the WebRTC bridge to the specified session.
758
- * If no session is provided, disconnects the WebRTC bridge.
759
- *
760
- * Called automatically if `automaticallyConnectWebrtc` is true.
761
- *
762
- * @param session The session to connect the WebRTC bridge to.
763
- */
764
- connectWebrtcBridge(session) {
765
- this._sessionForNetworking = session;
766
- this._transportFactory.setBridgeService(session?.bridgeService);
767
- }
768
- /**
769
- * Selects one of the existing session for WebRTC networking.
770
- */
771
- _reconnectWebrtc() {
772
- log3("reconnecting webrtc...", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 202, S: this });
773
- if (this._sessionForNetworking) {
774
- if (!this._sessions.has(this._sessionForNetworking)) {
775
- this._sessionForNetworking = void 0;
776
- }
777
- }
778
- if (!this._sessionForNetworking) {
779
- const selected = Array.from(this._sessions).find((session) => session.bridgeService);
780
- this.connectWebrtcBridge(selected);
781
- }
782
- }
783
- };
784
- var DB_NAME = "DXOS";
785
- var SqlExportLayer = Layer.effect(SqlExport.SqlExport, Effect.gen(function* () {
786
- const sql = yield* SqliteClient.SqliteClient;
787
- return {
788
- export: sql.export
789
- };
790
- }));
791
- var LocalSqliteOpfsLayer = SqlExportLayer.pipe(Layer.provideMerge(SqliteClient.layerOpfs({
792
- dbName: DB_NAME
793
- })), Layer.provideMerge(Reactivity.layer));
794
- var WebLockWrapper = class {
795
- #key;
796
- #release;
797
- constructor(key) {
798
- this.#key = key;
799
- }
800
- get key() {
801
- return this.#key;
802
- }
803
- acquire(options = {}) {
804
- return navigator.locks.request(this.#key, options, async () => {
805
- await new Promise((resolve) => {
806
- this.#release = resolve;
807
- });
808
- this.#release = void 0;
809
- });
810
- }
811
- release() {
812
- this.#release?.();
813
- this.#release = void 0;
814
- }
815
- [Symbol.dispose]() {
816
- this.release();
817
- }
818
- };
819
- export {
820
- ClientRpcServer,
821
- ClientServicesHost,
822
- DataSpace,
823
- DataSpaceManager,
824
- DeviceInvitationProtocol,
825
- DevtoolsHostEvents,
826
- DevtoolsServiceImpl,
827
- DiagnosticsCollector,
828
- EdgeAgentManager,
829
- EdgeAgentServiceImpl,
830
- EdgeFeedReplicator,
831
- FeedSyncer,
832
- Identity,
833
- IdentityManager,
834
- IdentityServiceImpl,
835
- InvitationsHandler,
836
- InvitationsManager,
837
- InvitationsServiceImpl,
838
- OPFS_SQLITE_DB_FILENAME,
839
- ServiceContext,
840
- ServiceRegistry,
841
- SpaceArchiveWriter,
842
- SpaceInvitationProtocol,
843
- SpacesServiceImpl,
844
- TrustedKeySetAuthVerifier,
845
- WorkerRuntime,
846
- WorkerSession,
847
- buildDatabaseDirectoryFromObjects,
848
- createAdmissionKeypair,
849
- createAuthProvider,
850
- createDiagnostics,
851
- createLevel,
852
- createSqliteProfileArchive,
853
- createStorageObjects,
854
- decodeProfileArchive,
855
- detectSpaceArchiveFormat,
856
- encodeProfileArchive,
857
- exportProfileData,
858
- extractSpaceArchive,
859
- getNetworkPeers,
860
- getSqliteProfileEntries,
861
- importProfileData,
862
- isValidSqliteDatabase,
863
- objJsonToObjectStructure,
864
- objectStructureToObjJson,
865
- orderObjJsonFields,
866
- readSerializedSpaceArchive,
867
- subscribeToFeedBlocks,
868
- subscribeToFeeds,
869
- subscribeToNetworkStatus,
870
- subscribeToNetworkTopics,
871
- subscribeToSignal,
872
- subscribeToSpaces,
873
- subscribeToSwarmInfo,
874
- writeSerializedSpaceArchive
875
- };
876
- //# sourceMappingURL=index.mjs.map