@dxos/client-services 0.8.4-main.fffef41 → 0.9.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 (253) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/{chunk-I2RGLVJF.mjs → chunk-37BKOM5O.mjs} +2870 -3767
  4. package/dist/lib/browser/chunk-37BKOM5O.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-QCWEHHJW.mjs +24 -0
  6. package/dist/lib/browser/chunk-QCWEHHJW.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-XJRPB3GA.mjs +22 -0
  8. package/dist/lib/browser/chunk-XJRPB3GA.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +576 -139
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs +88 -0
  13. package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +7 -0
  14. package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs +11 -0
  15. package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs.map +7 -0
  16. package/dist/lib/browser/packlets/locks/browser.mjs +86 -0
  17. package/dist/lib/browser/packlets/locks/browser.mjs.map +7 -0
  18. package/dist/lib/browser/packlets/locks/node.mjs +48 -0
  19. package/dist/lib/browser/packlets/locks/node.mjs.map +7 -0
  20. package/dist/lib/browser/testing/index.mjs +58 -53
  21. package/dist/lib/browser/testing/index.mjs.map +3 -3
  22. package/dist/lib/node-esm/chunk-2DT3MZRL.mjs +22 -0
  23. package/dist/lib/node-esm/chunk-2DT3MZRL.mjs.map +7 -0
  24. package/dist/lib/node-esm/{chunk-QTUURCR4.mjs → chunk-2ONS4DLO.mjs} +2810 -3576
  25. package/dist/lib/node-esm/chunk-2ONS4DLO.mjs.map +7 -0
  26. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +24 -0
  27. package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +7 -0
  28. package/dist/lib/node-esm/index.mjs +576 -139
  29. package/dist/lib/node-esm/index.mjs.map +4 -4
  30. package/dist/lib/node-esm/meta.json +1 -1
  31. package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs +88 -0
  32. package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +7 -0
  33. package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs +11 -0
  34. package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs.map +7 -0
  35. package/dist/lib/node-esm/packlets/locks/browser.mjs +86 -0
  36. package/dist/lib/node-esm/packlets/locks/browser.mjs.map +7 -0
  37. package/dist/lib/node-esm/packlets/locks/node.mjs +48 -0
  38. package/dist/lib/node-esm/packlets/locks/node.mjs.map +7 -0
  39. package/dist/lib/node-esm/testing/index.mjs +58 -53
  40. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  41. package/dist/types/src/index.d.ts +1 -0
  42. package/dist/types/src/index.d.ts.map +1 -1
  43. package/dist/types/src/packlets/agents/edge-agent-manager.d.ts +3 -2
  44. package/dist/types/src/packlets/agents/edge-agent-manager.d.ts.map +1 -1
  45. package/dist/types/src/packlets/agents/edge-agent-service.d.ts +2 -1
  46. package/dist/types/src/packlets/agents/edge-agent-service.d.ts.map +1 -1
  47. package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
  48. package/dist/types/src/packlets/devtools/devtools.d.ts +7 -3
  49. package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
  50. package/dist/types/src/packlets/devtools/feeds.d.ts +1 -1
  51. package/dist/types/src/packlets/devtools/feeds.d.ts.map +1 -1
  52. package/dist/types/src/packlets/devtools/keys.d.ts +2 -2
  53. package/dist/types/src/packlets/devtools/keys.d.ts.map +1 -1
  54. package/dist/types/src/packlets/devtools/metadata.d.ts.map +1 -1
  55. package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
  56. package/dist/types/src/packlets/devtools/spaces.d.ts.map +1 -1
  57. package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts.map +1 -1
  58. package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -1
  59. package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts.map +1 -1
  60. package/dist/types/src/packlets/diagnostics/diagnostics.d.ts +2 -3
  61. package/dist/types/src/packlets/diagnostics/diagnostics.d.ts.map +1 -1
  62. package/dist/types/src/packlets/diagnostics/index.d.ts +1 -1
  63. package/dist/types/src/packlets/diagnostics/index.d.ts.map +1 -1
  64. package/dist/types/src/packlets/identity/authenticator.d.ts +3 -3
  65. package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
  66. package/dist/types/src/packlets/identity/contacts-service.d.ts +1 -1
  67. package/dist/types/src/packlets/identity/contacts-service.d.ts.map +1 -1
  68. package/dist/types/src/packlets/identity/identity-manager.d.ts +10 -10
  69. package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
  70. package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts +14 -9
  71. package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts.map +1 -1
  72. package/dist/types/src/packlets/identity/identity-service.d.ts +7 -11
  73. package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
  74. package/dist/types/src/packlets/identity/identity.d.ts +10 -13
  75. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  76. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts +7 -6
  77. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
  78. package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts +1 -1
  79. package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts.map +1 -1
  80. package/dist/types/src/packlets/invitations/invitation-guest-extenstion.d.ts.map +1 -1
  81. package/dist/types/src/packlets/invitations/invitation-host-extension.d.ts.map +1 -1
  82. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts +7 -4
  83. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts.map +1 -1
  84. package/dist/types/src/packlets/invitations/invitation-state.d.ts.map +1 -1
  85. package/dist/types/src/packlets/invitations/invitation-topology.d.ts.map +1 -1
  86. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +4 -4
  87. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  88. package/dist/types/src/packlets/invitations/invitations-manager.d.ts +5 -5
  89. package/dist/types/src/packlets/invitations/invitations-manager.d.ts.map +1 -1
  90. package/dist/types/src/packlets/invitations/invitations-service.d.ts +3 -3
  91. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  92. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +6 -5
  93. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  94. package/dist/types/src/packlets/invitations/utils.d.ts.map +1 -1
  95. package/dist/types/src/packlets/locks/browser.d.ts.map +1 -1
  96. package/dist/types/src/packlets/locks/index.d.ts +1 -1
  97. package/dist/types/src/packlets/locks/index.d.ts.map +1 -1
  98. package/dist/types/src/packlets/locks/node.d.ts.map +1 -1
  99. package/dist/types/src/packlets/logging/logging-service.d.ts +4 -0
  100. package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
  101. package/dist/types/src/packlets/network/network-service.d.ts +5 -4
  102. package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
  103. package/dist/types/src/packlets/services/client-rpc-server.d.ts +5 -5
  104. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -1
  105. package/dist/types/src/packlets/services/feed-syncer.d.ts +75 -0
  106. package/dist/types/src/packlets/services/feed-syncer.d.ts.map +1 -0
  107. package/dist/types/src/packlets/services/feed-syncer.test.d.ts +2 -0
  108. package/dist/types/src/packlets/services/feed-syncer.test.d.ts.map +1 -0
  109. package/dist/types/src/packlets/services/index.d.ts +1 -0
  110. package/dist/types/src/packlets/services/index.d.ts.map +1 -1
  111. package/dist/types/src/packlets/services/platform.d.ts.map +1 -1
  112. package/dist/types/src/packlets/services/service-context.d.ts +22 -19
  113. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  114. package/dist/types/src/packlets/services/service-host.d.ts +20 -13
  115. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  116. package/dist/types/src/packlets/services/service-registry.d.ts.map +1 -1
  117. package/dist/types/src/packlets/services/sqlite-storage.d.ts +27 -0
  118. package/dist/types/src/packlets/services/sqlite-storage.d.ts.map +1 -0
  119. package/dist/types/src/packlets/services/util.d.ts.map +1 -1
  120. package/dist/types/src/packlets/space-export/archive-format.d.ts +9 -0
  121. package/dist/types/src/packlets/space-export/archive-format.d.ts.map +1 -0
  122. package/dist/types/src/packlets/space-export/index.d.ts +4 -1
  123. package/dist/types/src/packlets/space-export/index.d.ts.map +1 -1
  124. package/dist/types/src/packlets/space-export/serialized-space-reader.d.ts +23 -0
  125. package/dist/types/src/packlets/space-export/serialized-space-reader.d.ts.map +1 -0
  126. package/dist/types/src/packlets/space-export/serialized-space-writer.d.ts +36 -0
  127. package/dist/types/src/packlets/space-export/serialized-space-writer.d.ts.map +1 -0
  128. package/dist/types/src/packlets/space-export/space-archive-reader.d.ts +9 -1
  129. package/dist/types/src/packlets/space-export/space-archive-reader.d.ts.map +1 -1
  130. package/dist/types/src/packlets/space-export/space-archive-writer.d.ts +7 -1
  131. package/dist/types/src/packlets/space-export/space-archive-writer.d.ts.map +1 -1
  132. package/dist/types/src/packlets/space-export/space-archive.test.d.ts +2 -0
  133. package/dist/types/src/packlets/space-export/space-archive.test.d.ts.map +1 -0
  134. package/dist/types/src/packlets/spaces/automerge-space-state.d.ts.map +1 -1
  135. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +49 -22
  136. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  137. package/dist/types/src/packlets/spaces/data-space.d.ts +38 -13
  138. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  139. package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts +2 -2
  140. package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts.map +1 -1
  141. package/dist/types/src/packlets/spaces/epoch-migrations.d.ts +1 -1
  142. package/dist/types/src/packlets/spaces/epoch-migrations.d.ts.map +1 -1
  143. package/dist/types/src/packlets/spaces/genesis.d.ts +4 -3
  144. package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -1
  145. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +6 -9
  146. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  147. package/dist/types/src/packlets/spaces/spaces-service.d.ts +10 -7
  148. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  149. package/dist/types/src/packlets/storage/index.d.ts +1 -0
  150. package/dist/types/src/packlets/storage/index.d.ts.map +1 -1
  151. package/dist/types/src/packlets/storage/level.d.ts.map +1 -1
  152. package/dist/types/src/packlets/storage/profile-archive-sqlite.d.ts +24 -0
  153. package/dist/types/src/packlets/storage/profile-archive-sqlite.d.ts.map +1 -0
  154. package/dist/types/src/packlets/storage/profile-archive-sqlite.test.d.ts +2 -0
  155. package/dist/types/src/packlets/storage/profile-archive-sqlite.test.d.ts.map +1 -0
  156. package/dist/types/src/packlets/storage/profile-archive.d.ts.map +1 -1
  157. package/dist/types/src/packlets/storage/storage.d.ts.map +1 -1
  158. package/dist/types/src/packlets/storage/util.d.ts.map +1 -1
  159. package/dist/types/src/packlets/system/system-service.d.ts +1 -1
  160. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  161. package/dist/types/src/packlets/testing/credential-utils.d.ts.map +1 -1
  162. package/dist/types/src/packlets/testing/invitation-utils.d.ts +6 -3
  163. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  164. package/dist/types/src/packlets/testing/test-builder.d.ts +20 -22
  165. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  166. package/dist/types/src/packlets/worker/worker-runtime.d.ts +41 -4
  167. package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -1
  168. package/dist/types/src/packlets/worker/worker-session.d.ts +2 -4
  169. package/dist/types/src/packlets/worker/worker-session.d.ts.map +1 -1
  170. package/dist/types/src/testing/setup.d.ts.map +1 -1
  171. package/dist/types/src/version.d.ts +1 -1
  172. package/dist/types/src/version.d.ts.map +1 -1
  173. package/dist/types/tsconfig.tsbuildinfo +1 -1
  174. package/package.json +71 -57
  175. package/src/index.ts +1 -0
  176. package/src/packlets/agents/edge-agent-manager.ts +8 -5
  177. package/src/packlets/agents/edge-agent-service.ts +4 -2
  178. package/src/packlets/devices/devices-service.test.ts +0 -1
  179. package/src/packlets/devtools/devtools.ts +28 -7
  180. package/src/packlets/devtools/feeds.ts +1 -1
  181. package/src/packlets/devtools/keys.ts +2 -2
  182. package/src/packlets/devtools/spaces.ts +1 -1
  183. package/src/packlets/diagnostics/diagnostics.ts +1 -2
  184. package/src/packlets/diagnostics/index.ts +1 -1
  185. package/src/packlets/identity/authenticator.ts +3 -3
  186. package/src/packlets/identity/contacts-service.ts +1 -2
  187. package/src/packlets/identity/identity-manager.test.ts +6 -6
  188. package/src/packlets/identity/identity-manager.ts +29 -28
  189. package/src/packlets/identity/identity-recovery-manager.ts +31 -22
  190. package/src/packlets/identity/identity-service.test.ts +6 -27
  191. package/src/packlets/identity/identity-service.ts +17 -83
  192. package/src/packlets/identity/identity.test.ts +3 -3
  193. package/src/packlets/identity/identity.ts +12 -35
  194. package/src/packlets/invitations/device-invitation-protocol.ts +10 -9
  195. package/src/packlets/invitations/edge-invitation-handler.ts +9 -5
  196. package/src/packlets/invitations/invitation-guest-extenstion.ts +6 -4
  197. package/src/packlets/invitations/invitation-host-extension.ts +13 -14
  198. package/src/packlets/invitations/invitation-protocol.ts +7 -4
  199. package/src/packlets/invitations/invitation-state.ts +1 -15
  200. package/src/packlets/invitations/invitations-handler.test.ts +4 -5
  201. package/src/packlets/invitations/invitations-handler.ts +74 -22
  202. package/src/packlets/invitations/invitations-manager.ts +42 -17
  203. package/src/packlets/invitations/invitations-service.ts +9 -9
  204. package/src/packlets/invitations/space-invitation-protocol.test.ts +17 -16
  205. package/src/packlets/invitations/space-invitation-protocol.ts +13 -18
  206. package/src/packlets/locks/index.ts +1 -1
  207. package/src/packlets/logging/logging-service.ts +19 -15
  208. package/src/packlets/network/network-service.test.ts +0 -1
  209. package/src/packlets/network/network-service.ts +10 -8
  210. package/src/packlets/services/client-rpc-server.ts +19 -16
  211. package/src/packlets/services/feed-syncer.test.ts +376 -0
  212. package/src/packlets/services/feed-syncer.ts +536 -0
  213. package/src/packlets/services/index.ts +1 -0
  214. package/src/packlets/services/platform.ts +7 -1
  215. package/src/packlets/services/service-context.test.ts +3 -2
  216. package/src/packlets/services/service-context.ts +215 -78
  217. package/src/packlets/services/service-host.test.ts +8 -10
  218. package/src/packlets/services/service-host.ts +102 -70
  219. package/src/packlets/services/service-registry.test.ts +0 -1
  220. package/src/packlets/services/sqlite-storage.ts +390 -0
  221. package/src/packlets/space-export/archive-format.ts +42 -0
  222. package/src/packlets/space-export/index.ts +4 -1
  223. package/src/packlets/space-export/serialized-space-reader.ts +129 -0
  224. package/src/packlets/space-export/serialized-space-writer.ts +260 -0
  225. package/src/packlets/space-export/space-archive-reader.ts +64 -3
  226. package/src/packlets/space-export/space-archive-writer.ts +41 -4
  227. package/src/packlets/space-export/space-archive.test.ts +482 -0
  228. package/src/packlets/spaces/data-space-manager.test.ts +169 -14
  229. package/src/packlets/spaces/data-space-manager.ts +192 -127
  230. package/src/packlets/spaces/data-space.ts +89 -43
  231. package/src/packlets/spaces/edge-feed-replicator.test.ts +2 -2
  232. package/src/packlets/spaces/edge-feed-replicator.ts +11 -9
  233. package/src/packlets/spaces/epoch-migrations.ts +7 -6
  234. package/src/packlets/spaces/genesis.ts +9 -4
  235. package/src/packlets/spaces/notarization-plugin.test.ts +2 -2
  236. package/src/packlets/spaces/notarization-plugin.ts +10 -9
  237. package/src/packlets/spaces/spaces-service.test.ts +18 -11
  238. package/src/packlets/spaces/spaces-service.ts +130 -24
  239. package/src/packlets/storage/index.ts +1 -0
  240. package/src/packlets/storage/profile-archive-sqlite.test.ts +79 -0
  241. package/src/packlets/storage/profile-archive-sqlite.ts +100 -0
  242. package/src/packlets/storage/profile-archive.ts +3 -0
  243. package/src/packlets/storage/storage.ts +4 -4
  244. package/src/packlets/testing/invitation-utils.ts +10 -6
  245. package/src/packlets/testing/test-builder.ts +59 -40
  246. package/src/packlets/worker/worker-runtime.ts +173 -17
  247. package/src/packlets/worker/worker-session.ts +12 -18
  248. package/src/version.ts +5 -1
  249. package/dist/lib/browser/chunk-I2RGLVJF.mjs.map +0 -7
  250. package/dist/lib/node-esm/chunk-QTUURCR4.mjs.map +0 -7
  251. package/dist/types/src/packlets/identity/default-space-state-machine.d.ts +0 -19
  252. package/dist/types/src/packlets/identity/default-space-state-machine.d.ts.map +0 -1
  253. package/src/packlets/identity/default-space-state-machine.ts +0 -44
@@ -1,6 +1,5 @@
1
1
  import "@dxos/node-std/globals";
2
2
  import {
3
- ClientRpcServer,
4
3
  ClientServicesHost,
5
4
  DataSpace,
6
5
  DataSpaceManager,
@@ -11,63 +10,472 @@ import {
11
10
  EdgeAgentManager,
12
11
  EdgeAgentServiceImpl,
13
12
  EdgeFeedReplicator,
13
+ FeedSyncer,
14
14
  Identity,
15
15
  IdentityManager,
16
16
  IdentityServiceImpl,
17
17
  InvitationsHandler,
18
18
  InvitationsManager,
19
19
  InvitationsServiceImpl,
20
- Lock,
21
20
  ServiceContext,
22
21
  ServiceRegistry,
22
+ SpaceArchiveWriter,
23
23
  SpaceInvitationProtocol,
24
24
  SpacesServiceImpl,
25
25
  TrustedKeySetAuthVerifier,
26
+ buildDatabaseDirectoryFromObjects,
26
27
  createAdmissionKeypair,
27
28
  createAuthProvider,
28
- createCollectDiagnosticsBroadcastHandler,
29
- createCollectDiagnosticsBroadcastSender,
30
29
  createDiagnostics,
31
- createLevel,
32
- createStorageObjects,
33
- decodeProfileArchive,
34
- encodeProfileArchive,
35
- exportProfileData,
30
+ detectSpaceArchiveFormat,
31
+ diagnostics_exports,
32
+ extractSpaceArchive,
36
33
  getNetworkPeers,
37
- importProfileData,
38
- isLocked,
34
+ locks_exports,
35
+ objJsonToObjectStructure,
36
+ objectStructureToObjJson,
37
+ orderObjJsonFields,
38
+ readSerializedSpaceArchive,
39
39
  subscribeToFeedBlocks,
40
40
  subscribeToFeeds,
41
41
  subscribeToNetworkStatus,
42
42
  subscribeToNetworkTopics,
43
43
  subscribeToSignal,
44
44
  subscribeToSpaces,
45
- subscribeToSwarmInfo
46
- } from "./chunk-I2RGLVJF.mjs";
45
+ subscribeToSwarmInfo,
46
+ writeSerializedSpaceArchive
47
+ } from "./chunk-37BKOM5O.mjs";
48
+ import "./chunk-XJRPB3GA.mjs";
49
+ import {
50
+ __export,
51
+ __reExport
52
+ } from "./chunk-QCWEHHJW.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 "@dxos/node-std/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
+ };
47
448
 
48
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";
49
454
  import { Trigger as Trigger2 } from "@dxos/async";
50
455
  import { DEFAULT_WORKER_BROADCAST_CHANNEL } from "@dxos/client-protocol";
51
456
  import { Context } from "@dxos/context";
52
- import { invariant as invariant2 } from "@dxos/invariant";
53
- import { log as log2 } from "@dxos/log";
457
+ import { invariant as invariant3 } from "@dxos/invariant";
458
+ import { log as log3 } from "@dxos/log";
54
459
  import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager, setIdentityTags } from "@dxos/messaging";
55
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";
56
464
 
57
465
  // src/packlets/worker/worker-session.ts
58
466
  import { Trigger, asyncTimeout } from "@dxos/async";
59
467
  import { PROXY_CONNECTION_TIMEOUT, iframeServiceBundle, workerServiceBundle } from "@dxos/client-protocol";
60
- import { invariant } from "@dxos/invariant";
61
- import { log, logInfo } from "@dxos/log";
468
+ import { invariant as invariant2 } from "@dxos/invariant";
469
+ import { log as log2, logInfo } from "@dxos/log";
62
470
  import { createProtoRpcPeer } from "@dxos/rpc";
63
471
  import { Callback } from "@dxos/util";
64
- function _ts_decorate(decorators, target, key, desc) {
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) {
65
474
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
66
475
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
67
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;
68
477
  return c > 3 && r && Object.defineProperty(target, key, r), r;
69
478
  }
70
- var __dxlog_file = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-session.ts";
71
479
  var WorkerSession = class {
72
480
  _clientRpc;
73
481
  _shellClientRpc;
@@ -76,40 +484,29 @@ var WorkerSession = class {
76
484
  _serviceHost;
77
485
  onClose = new Callback();
78
486
  origin;
79
- // TODO(nf): factor out?
80
- observabilityGroup;
81
- signalTelemetryEnabled;
82
487
  lockKey;
83
488
  bridgeService;
84
489
  constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }) {
85
- invariant(serviceHost, void 0, {
86
- F: __dxlog_file,
87
- L: 54,
88
- S: this,
89
- A: [
90
- "serviceHost",
91
- ""
92
- ]
93
- });
490
+ invariant2(serviceHost, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 30, S: this, A: ["serviceHost", ""] });
94
491
  this._serviceHost = serviceHost;
95
492
  const middleware = {
96
- handleCall: async (method, params, handler) => {
493
+ handleCall: async (method, params, handler, options) => {
97
494
  const error = await readySignal.wait({
98
495
  timeout: PROXY_CONNECTION_TIMEOUT
99
496
  });
100
497
  if (error) {
101
498
  throw error;
102
499
  }
103
- return handler(method, params);
500
+ return handler(method, params, options);
104
501
  },
105
- handleStream: async (method, params, handler) => {
502
+ handleStream: async (method, params, handler, options) => {
106
503
  const error = await readySignal.wait({
107
504
  timeout: PROXY_CONNECTION_TIMEOUT
108
505
  });
109
506
  if (error) {
110
507
  throw error;
111
508
  }
112
- return handler(method, params);
509
+ return handler(method, params, options);
113
510
  }
114
511
  };
115
512
  this._clientRpc = new ClientRpcServer({
@@ -130,8 +527,6 @@ var WorkerSession = class {
130
527
  start: async (request) => {
131
528
  this.origin = request.origin;
132
529
  this.lockKey = request.lockKey;
133
- this.observabilityGroup = request.observabilityGroup;
134
- this.signalTelemetryEnabled = request.signalTelemetryEnabled;
135
530
  this._startTrigger.wake();
136
531
  },
137
532
  stop: async () => {
@@ -139,12 +534,7 @@ var WorkerSession = class {
139
534
  try {
140
535
  await this.close();
141
536
  } catch (err) {
142
- log.catch(err, void 0, {
143
- F: __dxlog_file,
144
- L: 108,
145
- S: this,
146
- C: (f, a) => f(...a)
147
- });
537
+ log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 77, S: this });
148
538
  }
149
539
  });
150
540
  }
@@ -156,12 +546,7 @@ var WorkerSession = class {
156
546
  this.bridgeService = this._iframeRpc.rpc.BridgeService;
157
547
  }
158
548
  async open() {
159
- log.info("opening...", void 0, {
160
- F: __dxlog_file,
161
- L: 122,
162
- S: this,
163
- C: (f, a) => f(...a)
164
- });
549
+ log2("opening...", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 89, S: this });
165
550
  await Promise.all([
166
551
  this._clientRpc.open(),
167
552
  this._iframeRpc.open(),
@@ -173,51 +558,26 @@ var WorkerSession = class {
173
558
  if (this.lockKey) {
174
559
  void this._afterLockReleases(this.lockKey, () => this.close());
175
560
  }
176
- log.info("opened", void 0, {
177
- F: __dxlog_file,
178
- L: 133,
179
- S: this,
180
- C: (f, a) => f(...a)
181
- });
561
+ log2("opened", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 103, S: this });
182
562
  }
183
563
  async close() {
184
- log.info("closing...", void 0, {
185
- F: __dxlog_file,
186
- L: 137,
187
- S: this,
188
- C: (f, a) => f(...a)
189
- });
564
+ log2.debug("closing...", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 106, S: this });
190
565
  try {
191
566
  await this.onClose.callIfSet();
192
567
  } catch (err) {
193
- log.catch(err, void 0, {
194
- F: __dxlog_file,
195
- L: 141,
196
- S: this,
197
- C: (f, a) => f(...a)
198
- });
568
+ log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 110, S: this });
199
569
  }
200
570
  await Promise.all([
201
571
  this._clientRpc.close(),
202
572
  this._iframeRpc.close()
203
573
  ]);
204
- log.info("closed", void 0, {
205
- F: __dxlog_file,
206
- L: 145,
207
- S: this,
208
- C: (f, a) => f(...a)
209
- });
574
+ log2.debug("closed", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 116, S: this });
210
575
  }
211
576
  async _maybeOpenShell() {
212
577
  try {
213
578
  this._shellClientRpc && await asyncTimeout(this._shellClientRpc.open(), 1e3);
214
579
  } catch {
215
- log.info("No shell connected.", void 0, {
216
- F: __dxlog_file,
217
- L: 152,
218
- S: this,
219
- C: (f, a) => f(...a)
220
- });
580
+ log2.info("No shell connected.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 122, S: this });
221
581
  }
222
582
  }
223
583
  _afterLockReleases(lockKey, callback) {
@@ -225,15 +585,15 @@ var WorkerSession = class {
225
585
  }).then(callback);
226
586
  }
227
587
  };
228
- _ts_decorate([
588
+ _ts_decorate2([
229
589
  logInfo
230
590
  ], WorkerSession.prototype, "origin", void 0);
231
- _ts_decorate([
591
+ _ts_decorate2([
232
592
  logInfo
233
593
  ], WorkerSession.prototype, "lockKey", void 0);
234
594
 
235
595
  // src/packlets/worker/worker-runtime.ts
236
- var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-runtime.ts";
596
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/sdk/client-services/src/packlets/worker/worker-runtime.ts";
237
597
  var WorkerRuntime = class {
238
598
  _configProvider;
239
599
  _acquireLock;
@@ -244,6 +604,8 @@ var WorkerRuntime = class {
244
604
  _sessions = /* @__PURE__ */ new Set();
245
605
  _clientServices;
246
606
  _channel;
607
+ _automaticallyConnectWebrtc;
608
+ _livenessLock = new WebLockWrapper(`@dxos/client-services/WorkerRuntime/${crypto.randomUUID()}`);
247
609
  _broadcastChannel;
248
610
  _sessionForNetworking;
249
611
  _config;
@@ -251,57 +613,73 @@ var WorkerRuntime = class {
251
613
  runtime: "worker-runtime"
252
614
  };
253
615
  _signalTelemetryEnabled = false;
254
- constructor({ channel = DEFAULT_WORKER_BROADCAST_CHANNEL, configProvider, acquireLock, releaseLock, onStop }) {
616
+ _runtime;
617
+ constructor({ channel = DEFAULT_WORKER_BROADCAST_CHANNEL, configProvider, acquireLock, releaseLock, onStop, automaticallyConnectWebrtc = true, sqliteLayer }) {
255
618
  this._configProvider = configProvider;
256
619
  this._acquireLock = acquireLock;
257
620
  this._releaseLock = releaseLock;
258
621
  this._onStop = onStop;
259
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));
260
627
  this._clientServices = new ClientServicesHost({
261
628
  callbacks: {
262
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
263
635
  }
264
636
  });
637
+ this._automaticallyConnectWebrtc = automaticallyConnectWebrtc;
265
638
  }
266
639
  get host() {
267
640
  return this._clientServices;
268
641
  }
642
+ get livenessLockKey() {
643
+ return this._livenessLock.key;
644
+ }
269
645
  async start() {
270
- log2("starting...", void 0, {
271
- F: __dxlog_file2,
272
- L: 85,
273
- S: this,
274
- C: (f, a) => f(...a)
275
- });
646
+ log3("starting...", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 73, S: this });
276
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 });
277
651
  this._broadcastChannel = new BroadcastChannel(this._channel);
278
652
  this._broadcastChannel.postMessage({
279
653
  action: "stop"
280
654
  });
281
655
  this._broadcastChannel.onmessage = async (event) => {
282
656
  if (event.data?.action === "stop") {
657
+ log3("worker-runtime: received stop broadcast", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 85, S: this });
283
658
  await this.stop();
284
659
  }
285
660
  };
661
+ log3("worker-runtime: acquiring storage lock", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 89, S: this });
286
662
  await this._acquireLock();
663
+ log3("worker-runtime: storage lock acquired, resolving config", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 91, S: this });
287
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
+ }
288
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 });
289
673
  this._clientServices.initialize({
290
674
  config: this._config,
291
675
  signalManager: this._config.get("runtime.client.edgeFeatures")?.signaling ? void 0 : signals ? new WebsocketSignalManager(signals, () => this._signalTelemetryEnabled ? this._signalMetadataTags : {}) : new MemorySignalManager(new MemorySignalManagerContext()),
292
676
  transportFactory: this._transportFactory
293
677
  });
294
- await this._clientServices.open(new Context(void 0, {
295
- F: __dxlog_file2,
296
- L: 108
297
- }));
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 });
298
681
  this._ready.wake(void 0);
299
- log2("started", void 0, {
300
- F: __dxlog_file2,
301
- L: 110,
302
- S: this,
303
- C: (f, a) => f(...a)
304
- });
682
+ log3("started", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 110, S: this });
305
683
  setIdentityTags({
306
684
  identityService: this._clientServices.services.IdentityService,
307
685
  devicesService: this._clientServices.services.DevicesService,
@@ -311,25 +689,43 @@ var WorkerRuntime = class {
311
689
  });
312
690
  } catch (err) {
313
691
  this._ready.wake(err);
314
- log2.error("starting", err, {
315
- F: __dxlog_file2,
316
- L: 120,
317
- S: this,
318
- C: (f, a) => f(...a)
319
- });
692
+ log3.error("starting", err, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 120, S: this });
320
693
  }
321
694
  }
322
695
  async stop() {
323
696
  this._releaseLock();
324
697
  this._broadcastChannel?.close();
325
698
  this._broadcastChannel = void 0;
326
- await this._clientServices.close();
699
+ await this._clientServices.close(Context.default(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 128 }));
700
+ await this._runtime.dispose();
327
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
+ }
328
724
  }
329
725
  /**
330
726
  * Create a new session.
331
727
  */
332
- async createSession({ appPort, systemPort, shellPort }) {
728
+ async createSession({ appPort, systemPort, shellPort, onClose }) {
333
729
  const session = new WorkerSession({
334
730
  serviceHost: this._clientServices,
335
731
  appPort,
@@ -342,37 +738,38 @@ var WorkerRuntime = class {
342
738
  if (this._sessions.size === 0) {
343
739
  await this.stop();
344
740
  } else {
345
- this._reconnectWebrtc();
741
+ if (this._automaticallyConnectWebrtc) {
742
+ this._reconnectWebrtc();
743
+ }
346
744
  }
745
+ await onClose?.();
347
746
  });
348
747
  await session.open();
349
- invariant2(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, {
350
- F: __dxlog_file2,
351
- L: 158,
352
- S: this,
353
- A: [
354
- "!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin",
355
- "`worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`"
356
- ]
357
- });
358
- if (session.observabilityGroup) {
359
- this._signalMetadataTags.group = session.observabilityGroup;
360
- }
361
- this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;
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}?`"] });
362
749
  this._signalMetadataTags.origin = session.origin;
363
750
  this._sessions.add(session);
364
- this._reconnectWebrtc();
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);
365
767
  }
366
768
  /**
367
769
  * Selects one of the existing session for WebRTC networking.
368
770
  */
369
771
  _reconnectWebrtc() {
370
- log2("reconnecting webrtc...", void 0, {
371
- F: __dxlog_file2,
372
- L: 176,
373
- S: this,
374
- C: (f, a) => f(...a)
375
- });
772
+ log3("reconnecting webrtc...", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 202, S: this });
376
773
  if (this._sessionForNetworking) {
377
774
  if (!this._sessions.has(this._sessionForNetworking)) {
378
775
  this._sessionForNetworking = void 0;
@@ -380,15 +777,45 @@ var WorkerRuntime = class {
380
777
  }
381
778
  if (!this._sessionForNetworking) {
382
779
  const selected = Array.from(this._sessions).find((session) => session.bridgeService);
383
- if (selected) {
384
- this._sessionForNetworking = selected;
385
- this._transportFactory.setBridgeService(selected.bridgeService);
386
- } else {
387
- this._transportFactory.setBridgeService(void 0);
388
- }
780
+ this.connectWebrtcBridge(selected);
389
781
  }
390
782
  }
391
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
+ };
392
819
  export {
393
820
  ClientRpcServer,
394
821
  ClientServicesHost,
@@ -401,39 +828,49 @@ export {
401
828
  EdgeAgentManager,
402
829
  EdgeAgentServiceImpl,
403
830
  EdgeFeedReplicator,
831
+ FeedSyncer,
404
832
  Identity,
405
833
  IdentityManager,
406
834
  IdentityServiceImpl,
407
835
  InvitationsHandler,
408
836
  InvitationsManager,
409
837
  InvitationsServiceImpl,
410
- Lock,
838
+ OPFS_SQLITE_DB_FILENAME,
411
839
  ServiceContext,
412
840
  ServiceRegistry,
841
+ SpaceArchiveWriter,
413
842
  SpaceInvitationProtocol,
414
843
  SpacesServiceImpl,
415
844
  TrustedKeySetAuthVerifier,
416
845
  WorkerRuntime,
417
846
  WorkerSession,
847
+ buildDatabaseDirectoryFromObjects,
418
848
  createAdmissionKeypair,
419
849
  createAuthProvider,
420
- createCollectDiagnosticsBroadcastHandler,
421
- createCollectDiagnosticsBroadcastSender,
422
850
  createDiagnostics,
423
851
  createLevel,
852
+ createSqliteProfileArchive,
424
853
  createStorageObjects,
425
854
  decodeProfileArchive,
855
+ detectSpaceArchiveFormat,
426
856
  encodeProfileArchive,
427
857
  exportProfileData,
858
+ extractSpaceArchive,
428
859
  getNetworkPeers,
860
+ getSqliteProfileEntries,
429
861
  importProfileData,
430
- isLocked,
862
+ isValidSqliteDatabase,
863
+ objJsonToObjectStructure,
864
+ objectStructureToObjJson,
865
+ orderObjJsonFields,
866
+ readSerializedSpaceArchive,
431
867
  subscribeToFeedBlocks,
432
868
  subscribeToFeeds,
433
869
  subscribeToNetworkStatus,
434
870
  subscribeToNetworkTopics,
435
871
  subscribeToSignal,
436
872
  subscribeToSpaces,
437
- subscribeToSwarmInfo
873
+ subscribeToSwarmInfo,
874
+ writeSerializedSpaceArchive
438
875
  };
439
876
  //# sourceMappingURL=index.mjs.map