@dxos/client-services 0.14.0 → 0.16.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.
- package/dist/lib/chunk-client-services-stack.mjs +799 -573
- package/dist/lib/chunk-client-services-stack.mjs.map +1 -1
- package/dist/lib/index.mjs +139 -131
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/testing.mjs +1 -1
- package/dist/lib/testing.mjs.map +1 -1
- package/dist/types/src/Events.d.ts +2 -0
- package/dist/types/src/Events.d.ts.map +1 -1
- package/dist/types/src/internal/blobs/blob-replication.d.ts +28 -0
- package/dist/types/src/internal/blobs/blob-replication.d.ts.map +1 -0
- package/dist/types/src/internal/blobs/blob-store-service.d.ts +10 -0
- package/dist/types/src/internal/blobs/blob-store-service.d.ts.map +1 -0
- package/dist/types/src/internal/blobs/blob-store-service.test.d.ts +2 -0
- package/dist/types/src/internal/blobs/blob-store-service.test.d.ts.map +1 -0
- package/dist/types/src/internal/blobs/index.d.ts +4 -0
- package/dist/types/src/internal/blobs/index.d.ts.map +1 -0
- package/dist/types/src/internal/blobs/local-blob-store.d.ts +21 -0
- package/dist/types/src/internal/blobs/local-blob-store.d.ts.map +1 -0
- package/dist/types/src/internal/blobs/local-blob-store.test.d.ts +2 -0
- package/dist/types/src/internal/blobs/local-blob-store.test.d.ts.map +1 -0
- package/dist/types/src/internal/services/layer-specs.d.ts +6 -0
- package/dist/types/src/internal/services/layer-specs.d.ts.map +1 -1
- package/dist/types/src/internal/services/service-stack.d.ts.map +1 -1
- package/dist/types/src/internal/space-export/serialized-space-writer.d.ts +4 -1
- package/dist/types/src/internal/space-export/serialized-space-writer.d.ts.map +1 -1
- package/dist/types/src/internal/spaces/spaces-service.d.ts.map +1 -1
- package/dist/types/src/internal/storage/index.d.ts +1 -0
- package/dist/types/src/internal/storage/index.d.ts.map +1 -1
- package/dist/types/src/internal/storage/storage-watchdog.d.ts +17 -0
- package/dist/types/src/internal/storage/storage-watchdog.d.ts.map +1 -0
- package/dist/types/src/internal/storage/storage-watchdog.test.d.ts +2 -0
- package/dist/types/src/internal/storage/storage-watchdog.test.d.ts.map +1 -0
- package/dist/types/src/internal/worker/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/migrations/blobs/index.d.ts +10 -0
- package/dist/types/src/migrations/blobs/index.d.ts.map +1 -0
- package/dist/types/src/version.d.ts +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +43 -42
- package/src/Events.ts +3 -0
- package/src/internal/blobs/blob-replication.ts +80 -0
- package/src/internal/blobs/blob-store-service.test.ts +76 -0
- package/src/internal/blobs/blob-store-service.ts +45 -0
- package/src/internal/blobs/index.ts +7 -0
- package/src/internal/blobs/local-blob-store.test.ts +53 -0
- package/src/internal/blobs/local-blob-store.ts +89 -0
- package/src/internal/services/layer-specs.ts +55 -0
- package/src/internal/services/service-stack.ts +2 -0
- package/src/internal/space-export/serialized-space-writer.ts +16 -9
- package/src/internal/spaces/spaces-service.ts +44 -6
- package/src/internal/storage/index.ts +1 -0
- package/src/internal/storage/storage-watchdog.test.ts +46 -0
- package/src/internal/storage/storage-watchdog.ts +58 -0
- package/src/internal/worker/worker-runtime.ts +2 -0
- package/src/migrations/blobs/0001_init.sql +17 -0
- package/src/migrations/blobs/index.ts +18 -0
- package/src/migrations/migrations.test.ts +3 -0
- package/src/version.ts +1 -1
package/dist/lib/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as
|
|
1
|
+
import { $ as QueryServiceRegistrationSpec, $n as SpaceProtocolSession, $t as InvitationsManager, A as HypercoreStoreSpec, An as Replication_exports, At as createCrossDeviceSpaceSynchronizer, B as InvitationsManagerSpec, Bn as subscribeToNetworkStatus, Bt as orderObjJsonFields, C as EdgeSubductionReplicatorRegistrationSpec, Cn as IdentityManagerLayer, Cr as Opening, Ct as storageLifecycleLayer, D as FeedSyncerSpec, Dn as ContactsServiceImpl, Dr as WipingStorage, Dt as FeedSyncerService, E as FeedServiceSpec, Er as StorageStuck, Et as FeedSyncerLayer, F as IdentityServiceSpec, Fn as DevtoolsHostLayer, Ft as SpacesServiceLayer, G as LoggingServiceRegistrationSpec, Gn as subscribeToFeeds, Gt as detectSpaceArchiveFormat, H as InvitationsServiceSpec, Hn as subscribeToSignal, Ht as buildDatabaseDirectoryFromObjects, I as InboxServiceRegistrationSpec, In as DevtoolsHostService, It as SpaceArchiveWriter, J as MeshReplicatorSpec, Jn as SpaceManagerService, Jt as SigningContextProviderLayer, K as LoggingServiceSpec, Kn as SpaceManager, Kt as DataSpaceManager, L as InboxServiceSpec, Ln as DevtoolsServiceImpl, Lt as extractSpaceArchive, M as IdentityManagerSpec, Mn as createDiagnosticsFromRouter, Mr as identity_exports, Mt as SystemServiceLayer, N as IdentityProviderSpec, Nn as PlatformInfo_exports, Nr as __exportAll, Nt as storageWatchdogLayer, O as HypercoreFactorySpec, On as ContactsServiceLayer, Ot as CrossDeviceSpaceSynchronizerLayer, P as IdentityServiceRegistrationSpec, Pn as DevtoolsHostEvents, Pt as SpacesServiceImpl, Q as NetworkServiceSpec, Qn as SpaceProtocol, Qt as TransportFactoryService, R as InvitationFactoriesSpec, Rn as subscribeToSpaces, Rt as collectFeedMessages, S as EdgeIdentityRecoverySpec, Sn as IdentityManager, Sr as Events_exports, St as registerReplicator, T as FeedServiceRegistrationSpec, Tn as IdentityLifecycleLayer, Tr as StackOpened, Tt as FeedSyncer, U as KeyringSpec, Un as subscribeToSwarmInfo, Ut as objJsonToObjectStructure, V as InvitationsServiceRegistrationSpec, Vn as subscribeToNetworkTopics, Vt as writeSerializedSpaceArchive, W as LocalBlobStoreSpec, Wn as subscribeToFeedBlocks, Wt as readSerializedSpaceArchive, X as NetworkLifecycleSpec, Xn as MOCK_AUTH_PROVIDER, Xt as remainingLifetimeSeconds, Y as MetadataStoreSpec, Yn as AuthStatus, Yt as createSigningContextProvider, Z as NetworkServiceRegistrationSpec, Zn as MOCK_AUTH_VERIFIER, Zt as DataSpace, _ as EchoHostSpec, _n as IdentityServiceImpl, _t as TransportFactorySpec, a as BlobStoreServiceRegistrationSpec, an as InvitationsHandlerService, ar as SqliteMetadataStore, at as SpacesServiceRegistrationSpec, b as EdgeAgentServiceSpec, bn as SqliteStorage_exports, br as EdgeAgentManagerService, bt as echoHostLayer, c as ContactsServiceSpec, cn as SpaceInvitationProtocol, cr as MetadataStore, ct as SqlServiceSpec, d as DataServiceSpec, dn as toSpaceMemberRole, dr as Auth_exports, dt as StorageLifecycleSpec, en as InvitationsManagerLayer, er as CredentialRetrieverExtension, et as QueryServiceSpec, f as DataSpaceManagerSpec, fn as tryAcquireBeforeContextDisposed, ft as StorageMigrationSpec, g as DevtoolsHostSpec, gn as InboxUnavailableError, gr as Readiness_exports, gt as SystemServiceSpec, h as DevtoolsHostRegistrationSpec, hn as InboxServiceLayer, hr as EdgeAgentServiceLayer, ht as SystemServiceRegistrationSpec, i as BlobReplicationSpec, in as InvitationsHandlerLayer, ir as AuthExtension, it as SpaceManagerSpec, j as IdentityLifecycleSpec, jn as createDiagnostics, jt as SystemServiceImpl, k as HypercoreStorageDirectorySpec, kn as Identity_exports, kr as spaces_exports, kt as CrossDeviceSpaceSynchronizerService, l as CrossDeviceSpaceSynchronizerSpec, ln as computeExpirationTime, lr as hasInvitationExpired, lt as SqliteStorageSpec, m as DevicesServiceSpec, mn as InboxServiceImpl, mr as EdgeAgentServiceImpl, mt as SwarmNetworkManagerSpec, n as layerClientServices, nn as InvitationsServiceLayer, nr as Space, nt as SignalManagerSpec, o as BlobStoreServiceSpec, on as createAdmissionKeypair, or as SqliteMetadataStoreLayer, ot as SpacesServiceSpec, p as DevicesServiceRegistrationSpec, pn as DeviceInvitationProtocol, pr as invitations_exports, pt as StorageWatchdogSpec, q as MeshReplicatorRegistrationSpec, qn as SpaceManagerLayer, qt as DataSpaceManagerLayer, r as runtimePropsFromConfig, rn as InvitationsHandler, rt as SigningContextProviderSpec, s as ContactsServiceRegistrationSpec, sn as InvitationFactoriesLayer, sr as IMetadataStoreService, st as SqlServiceRegistrationSpec, t as enableNetworking, tn as InvitationsServiceImpl, tr as CredentialServerExtension, tt as RpcRouterSpec, u as DataServiceRegistrationSpec, un as stateToString, ur as CredentialsDocument_exports, ut as StackReadinessSpec, v as EdgeAgentManagerSpec, vn as IdentityServiceLayer, vr as EdgeAgentManager, vt as clientServiceSpecs, w as EdgeSubductionReplicatorSpec, wn as identityProviderFromManager, wr as Reset, wt as storageMigrationLayer, x as EdgeClientsSpec, xn as wipeSqliteStorage, xr as Closing, xt as identityProviderLayer, y as EdgeAgentServiceRegistrationSpec, yr as EdgeAgentManagerLayer, yt as StorageMigrationService, z as InvitationsHandlerSpec, zn as getNetworkPeers, zt as objectStructureToObjJson } from "./chunk-client-services-stack.mjs";
|
|
2
2
|
import * as Context from "effect/Context";
|
|
3
3
|
import * as Effect from "effect/Effect";
|
|
4
4
|
import * as Layer from "effect/Layer";
|
|
@@ -113,123 +113,6 @@ var Metadata_exports = /* @__PURE__ */ __exportAll({
|
|
|
113
113
|
hasInvitationExpired: () => hasInvitationExpired
|
|
114
114
|
});
|
|
115
115
|
//#endregion
|
|
116
|
-
//#region src/ServiceStack.ts
|
|
117
|
-
var ServiceStack_exports = /* @__PURE__ */ __exportAll({
|
|
118
|
-
ContactsServiceRegistrationSpec: () => ContactsServiceRegistrationSpec,
|
|
119
|
-
ContactsServiceSpec: () => ContactsServiceSpec,
|
|
120
|
-
CrossDeviceSpaceSynchronizerLayer: () => CrossDeviceSpaceSynchronizerLayer,
|
|
121
|
-
CrossDeviceSpaceSynchronizerService: () => CrossDeviceSpaceSynchronizerService,
|
|
122
|
-
CrossDeviceSpaceSynchronizerSpec: () => CrossDeviceSpaceSynchronizerSpec,
|
|
123
|
-
DataServiceRegistrationSpec: () => DataServiceRegistrationSpec,
|
|
124
|
-
DataServiceSpec: () => DataServiceSpec,
|
|
125
|
-
DataSpaceManagerSpec: () => DataSpaceManagerSpec,
|
|
126
|
-
DevicesServiceRegistrationSpec: () => DevicesServiceRegistrationSpec,
|
|
127
|
-
DevicesServiceSpec: () => DevicesServiceSpec,
|
|
128
|
-
DevtoolsHostRegistrationSpec: () => DevtoolsHostRegistrationSpec,
|
|
129
|
-
DevtoolsHostSpec: () => DevtoolsHostSpec,
|
|
130
|
-
EchoHostSpec: () => EchoHostSpec,
|
|
131
|
-
EdgeAgentManagerSpec: () => EdgeAgentManagerSpec,
|
|
132
|
-
EdgeAgentServiceRegistrationSpec: () => EdgeAgentServiceRegistrationSpec,
|
|
133
|
-
EdgeAgentServiceSpec: () => EdgeAgentServiceSpec,
|
|
134
|
-
EdgeClientsSpec: () => EdgeClientsSpec,
|
|
135
|
-
EdgeIdentityRecoverySpec: () => EdgeIdentityRecoverySpec,
|
|
136
|
-
EdgeSubductionReplicatorRegistrationSpec: () => EdgeSubductionReplicatorRegistrationSpec,
|
|
137
|
-
EdgeSubductionReplicatorSpec: () => EdgeSubductionReplicatorSpec,
|
|
138
|
-
FeedServiceRegistrationSpec: () => FeedServiceRegistrationSpec,
|
|
139
|
-
FeedServiceSpec: () => FeedServiceSpec,
|
|
140
|
-
FeedSyncer: () => FeedSyncer,
|
|
141
|
-
FeedSyncerLayer: () => FeedSyncerLayer,
|
|
142
|
-
FeedSyncerService: () => FeedSyncerService,
|
|
143
|
-
FeedSyncerSpec: () => FeedSyncerSpec,
|
|
144
|
-
HypercoreFactorySpec: () => HypercoreFactorySpec,
|
|
145
|
-
HypercoreStorageDirectorySpec: () => HypercoreStorageDirectorySpec,
|
|
146
|
-
HypercoreStoreSpec: () => HypercoreStoreSpec,
|
|
147
|
-
IdentityLifecycleSpec: () => IdentityLifecycleSpec,
|
|
148
|
-
IdentityManagerSpec: () => IdentityManagerSpec,
|
|
149
|
-
IdentityProviderSpec: () => IdentityProviderSpec,
|
|
150
|
-
IdentityServiceRegistrationSpec: () => IdentityServiceRegistrationSpec,
|
|
151
|
-
IdentityServiceSpec: () => IdentityServiceSpec,
|
|
152
|
-
InboxServiceRegistrationSpec: () => InboxServiceRegistrationSpec,
|
|
153
|
-
InboxServiceSpec: () => InboxServiceSpec,
|
|
154
|
-
InvitationFactoriesSpec: () => InvitationFactoriesSpec,
|
|
155
|
-
InvitationsHandlerSpec: () => InvitationsHandlerSpec,
|
|
156
|
-
InvitationsManagerSpec: () => InvitationsManagerSpec,
|
|
157
|
-
InvitationsServiceRegistrationSpec: () => InvitationsServiceRegistrationSpec,
|
|
158
|
-
InvitationsServiceSpec: () => InvitationsServiceSpec,
|
|
159
|
-
KeyringSpec: () => KeyringSpec,
|
|
160
|
-
LoggingServiceRegistrationSpec: () => LoggingServiceRegistrationSpec,
|
|
161
|
-
LoggingServiceSpec: () => LoggingServiceSpec,
|
|
162
|
-
MeshReplicatorRegistrationSpec: () => MeshReplicatorRegistrationSpec,
|
|
163
|
-
MeshReplicatorSpec: () => MeshReplicatorSpec,
|
|
164
|
-
MetadataStoreSpec: () => MetadataStoreSpec,
|
|
165
|
-
NetworkLifecycleSpec: () => NetworkLifecycleSpec,
|
|
166
|
-
NetworkServiceRegistrationSpec: () => NetworkServiceRegistrationSpec,
|
|
167
|
-
NetworkServiceSpec: () => NetworkServiceSpec,
|
|
168
|
-
QueryServiceRegistrationSpec: () => QueryServiceRegistrationSpec,
|
|
169
|
-
QueryServiceSpec: () => QueryServiceSpec,
|
|
170
|
-
RpcRouterSpec: () => RpcRouterSpec,
|
|
171
|
-
SignalManagerSpec: () => SignalManagerSpec,
|
|
172
|
-
SigningContextProviderSpec: () => SigningContextProviderSpec,
|
|
173
|
-
SpaceManagerSpec: () => SpaceManagerSpec,
|
|
174
|
-
SpacesServiceRegistrationSpec: () => SpacesServiceRegistrationSpec,
|
|
175
|
-
SpacesServiceSpec: () => SpacesServiceSpec,
|
|
176
|
-
SqlServiceRegistrationSpec: () => SqlServiceRegistrationSpec,
|
|
177
|
-
SqlServiceSpec: () => SqlServiceSpec,
|
|
178
|
-
SqliteStorageSpec: () => SqliteStorageSpec,
|
|
179
|
-
StackReadinessSpec: () => StackReadinessSpec,
|
|
180
|
-
StorageLifecycleSpec: () => StorageLifecycleSpec,
|
|
181
|
-
StorageMigrationService: () => StorageMigrationService,
|
|
182
|
-
StorageMigrationSpec: () => StorageMigrationSpec,
|
|
183
|
-
SwarmNetworkManagerSpec: () => SwarmNetworkManagerSpec,
|
|
184
|
-
SystemServiceRegistrationSpec: () => SystemServiceRegistrationSpec,
|
|
185
|
-
SystemServiceSpec: () => SystemServiceSpec,
|
|
186
|
-
TransportFactoryService: () => TransportFactoryService,
|
|
187
|
-
TransportFactorySpec: () => TransportFactorySpec,
|
|
188
|
-
clientServiceSpecs: () => clientServiceSpecs,
|
|
189
|
-
createCrossDeviceSpaceSynchronizer: () => createCrossDeviceSpaceSynchronizer,
|
|
190
|
-
echoHostLayer: () => echoHostLayer,
|
|
191
|
-
enableNetworking: () => enableNetworking,
|
|
192
|
-
identityProviderLayer: () => identityProviderLayer,
|
|
193
|
-
layerClientServices: () => layerClientServices,
|
|
194
|
-
registerReplicator: () => registerReplicator,
|
|
195
|
-
runtimePropsFromConfig: () => runtimePropsFromConfig,
|
|
196
|
-
storageLifecycleLayer: () => storageLifecycleLayer,
|
|
197
|
-
storageMigrationLayer: () => storageMigrationLayer
|
|
198
|
-
});
|
|
199
|
-
//#endregion
|
|
200
|
-
//#region src/Spaces.ts
|
|
201
|
-
var Spaces_exports = /* @__PURE__ */ __exportAll({
|
|
202
|
-
AuthExtension: () => AuthExtension,
|
|
203
|
-
AuthStatus: () => AuthStatus,
|
|
204
|
-
CredentialRetrieverExtension: () => CredentialRetrieverExtension,
|
|
205
|
-
CredentialServerExtension: () => CredentialServerExtension,
|
|
206
|
-
DataSpace: () => DataSpace,
|
|
207
|
-
DataSpaceManager: () => DataSpaceManager,
|
|
208
|
-
DataSpaceManagerLayer: () => DataSpaceManagerLayer,
|
|
209
|
-
MOCK_AUTH_PROVIDER: () => MOCK_AUTH_PROVIDER,
|
|
210
|
-
MOCK_AUTH_VERIFIER: () => MOCK_AUTH_VERIFIER,
|
|
211
|
-
SigningContextProviderLayer: () => SigningContextProviderLayer,
|
|
212
|
-
Space: () => Space,
|
|
213
|
-
SpaceArchiveWriter: () => SpaceArchiveWriter,
|
|
214
|
-
SpaceManager: () => SpaceManager,
|
|
215
|
-
SpaceManagerLayer: () => SpaceManagerLayer,
|
|
216
|
-
SpaceManagerService: () => SpaceManagerService,
|
|
217
|
-
SpaceProtocol: () => SpaceProtocol,
|
|
218
|
-
SpaceProtocolSession: () => SpaceProtocolSession,
|
|
219
|
-
SpacesServiceImpl: () => SpacesServiceImpl,
|
|
220
|
-
SpacesServiceLayer: () => SpacesServiceLayer,
|
|
221
|
-
buildDatabaseDirectoryFromObjects: () => buildDatabaseDirectoryFromObjects,
|
|
222
|
-
createSigningContextProvider: () => createSigningContextProvider,
|
|
223
|
-
detectSpaceArchiveFormat: () => detectSpaceArchiveFormat,
|
|
224
|
-
extractSpaceArchive: () => extractSpaceArchive,
|
|
225
|
-
objJsonToObjectStructure: () => objJsonToObjectStructure,
|
|
226
|
-
objectStructureToObjJson: () => objectStructureToObjJson,
|
|
227
|
-
orderObjJsonFields: () => orderObjJsonFields,
|
|
228
|
-
readSerializedSpaceArchive: () => readSerializedSpaceArchive,
|
|
229
|
-
remainingLifetimeSeconds: () => remainingLifetimeSeconds,
|
|
230
|
-
writeSerializedSpaceArchive: () => writeSerializedSpaceArchive
|
|
231
|
-
});
|
|
232
|
-
//#endregion
|
|
233
116
|
//#region src/internal/storage/util.ts
|
|
234
117
|
var getRootPath = (config) => {
|
|
235
118
|
const { dataRoot = isNode() ? DX_DATA : "dxos/storage" } = config ?? {};
|
|
@@ -397,6 +280,129 @@ var getSqliteProfileEntries = (archive) => {
|
|
|
397
280
|
return entries;
|
|
398
281
|
};
|
|
399
282
|
//#endregion
|
|
283
|
+
//#region src/ServiceStack.ts
|
|
284
|
+
var ServiceStack_exports = /* @__PURE__ */ __exportAll({
|
|
285
|
+
BlobReplicationSpec: () => BlobReplicationSpec,
|
|
286
|
+
BlobStoreServiceRegistrationSpec: () => BlobStoreServiceRegistrationSpec,
|
|
287
|
+
BlobStoreServiceSpec: () => BlobStoreServiceSpec,
|
|
288
|
+
ContactsServiceRegistrationSpec: () => ContactsServiceRegistrationSpec,
|
|
289
|
+
ContactsServiceSpec: () => ContactsServiceSpec,
|
|
290
|
+
CrossDeviceSpaceSynchronizerLayer: () => CrossDeviceSpaceSynchronizerLayer,
|
|
291
|
+
CrossDeviceSpaceSynchronizerService: () => CrossDeviceSpaceSynchronizerService,
|
|
292
|
+
CrossDeviceSpaceSynchronizerSpec: () => CrossDeviceSpaceSynchronizerSpec,
|
|
293
|
+
DataServiceRegistrationSpec: () => DataServiceRegistrationSpec,
|
|
294
|
+
DataServiceSpec: () => DataServiceSpec,
|
|
295
|
+
DataSpaceManagerSpec: () => DataSpaceManagerSpec,
|
|
296
|
+
DevicesServiceRegistrationSpec: () => DevicesServiceRegistrationSpec,
|
|
297
|
+
DevicesServiceSpec: () => DevicesServiceSpec,
|
|
298
|
+
DevtoolsHostRegistrationSpec: () => DevtoolsHostRegistrationSpec,
|
|
299
|
+
DevtoolsHostSpec: () => DevtoolsHostSpec,
|
|
300
|
+
EchoHostSpec: () => EchoHostSpec,
|
|
301
|
+
EdgeAgentManagerSpec: () => EdgeAgentManagerSpec,
|
|
302
|
+
EdgeAgentServiceRegistrationSpec: () => EdgeAgentServiceRegistrationSpec,
|
|
303
|
+
EdgeAgentServiceSpec: () => EdgeAgentServiceSpec,
|
|
304
|
+
EdgeClientsSpec: () => EdgeClientsSpec,
|
|
305
|
+
EdgeIdentityRecoverySpec: () => EdgeIdentityRecoverySpec,
|
|
306
|
+
EdgeSubductionReplicatorRegistrationSpec: () => EdgeSubductionReplicatorRegistrationSpec,
|
|
307
|
+
EdgeSubductionReplicatorSpec: () => EdgeSubductionReplicatorSpec,
|
|
308
|
+
FeedServiceRegistrationSpec: () => FeedServiceRegistrationSpec,
|
|
309
|
+
FeedServiceSpec: () => FeedServiceSpec,
|
|
310
|
+
FeedSyncer: () => FeedSyncer,
|
|
311
|
+
FeedSyncerLayer: () => FeedSyncerLayer,
|
|
312
|
+
FeedSyncerService: () => FeedSyncerService,
|
|
313
|
+
FeedSyncerSpec: () => FeedSyncerSpec,
|
|
314
|
+
HypercoreFactorySpec: () => HypercoreFactorySpec,
|
|
315
|
+
HypercoreStorageDirectorySpec: () => HypercoreStorageDirectorySpec,
|
|
316
|
+
HypercoreStoreSpec: () => HypercoreStoreSpec,
|
|
317
|
+
IdentityLifecycleSpec: () => IdentityLifecycleSpec,
|
|
318
|
+
IdentityManagerSpec: () => IdentityManagerSpec,
|
|
319
|
+
IdentityProviderSpec: () => IdentityProviderSpec,
|
|
320
|
+
IdentityServiceRegistrationSpec: () => IdentityServiceRegistrationSpec,
|
|
321
|
+
IdentityServiceSpec: () => IdentityServiceSpec,
|
|
322
|
+
InboxServiceRegistrationSpec: () => InboxServiceRegistrationSpec,
|
|
323
|
+
InboxServiceSpec: () => InboxServiceSpec,
|
|
324
|
+
InvitationFactoriesSpec: () => InvitationFactoriesSpec,
|
|
325
|
+
InvitationsHandlerSpec: () => InvitationsHandlerSpec,
|
|
326
|
+
InvitationsManagerSpec: () => InvitationsManagerSpec,
|
|
327
|
+
InvitationsServiceRegistrationSpec: () => InvitationsServiceRegistrationSpec,
|
|
328
|
+
InvitationsServiceSpec: () => InvitationsServiceSpec,
|
|
329
|
+
KeyringSpec: () => KeyringSpec,
|
|
330
|
+
LocalBlobStoreSpec: () => LocalBlobStoreSpec,
|
|
331
|
+
LoggingServiceRegistrationSpec: () => LoggingServiceRegistrationSpec,
|
|
332
|
+
LoggingServiceSpec: () => LoggingServiceSpec,
|
|
333
|
+
MeshReplicatorRegistrationSpec: () => MeshReplicatorRegistrationSpec,
|
|
334
|
+
MeshReplicatorSpec: () => MeshReplicatorSpec,
|
|
335
|
+
MetadataStoreSpec: () => MetadataStoreSpec,
|
|
336
|
+
NetworkLifecycleSpec: () => NetworkLifecycleSpec,
|
|
337
|
+
NetworkServiceRegistrationSpec: () => NetworkServiceRegistrationSpec,
|
|
338
|
+
NetworkServiceSpec: () => NetworkServiceSpec,
|
|
339
|
+
QueryServiceRegistrationSpec: () => QueryServiceRegistrationSpec,
|
|
340
|
+
QueryServiceSpec: () => QueryServiceSpec,
|
|
341
|
+
RpcRouterSpec: () => RpcRouterSpec,
|
|
342
|
+
SignalManagerSpec: () => SignalManagerSpec,
|
|
343
|
+
SigningContextProviderSpec: () => SigningContextProviderSpec,
|
|
344
|
+
SpaceManagerSpec: () => SpaceManagerSpec,
|
|
345
|
+
SpacesServiceRegistrationSpec: () => SpacesServiceRegistrationSpec,
|
|
346
|
+
SpacesServiceSpec: () => SpacesServiceSpec,
|
|
347
|
+
SqlServiceRegistrationSpec: () => SqlServiceRegistrationSpec,
|
|
348
|
+
SqlServiceSpec: () => SqlServiceSpec,
|
|
349
|
+
SqliteStorageSpec: () => SqliteStorageSpec,
|
|
350
|
+
StackReadinessSpec: () => StackReadinessSpec,
|
|
351
|
+
StorageLifecycleSpec: () => StorageLifecycleSpec,
|
|
352
|
+
StorageMigrationService: () => StorageMigrationService,
|
|
353
|
+
StorageMigrationSpec: () => StorageMigrationSpec,
|
|
354
|
+
StorageWatchdogSpec: () => StorageWatchdogSpec,
|
|
355
|
+
SwarmNetworkManagerSpec: () => SwarmNetworkManagerSpec,
|
|
356
|
+
SystemServiceRegistrationSpec: () => SystemServiceRegistrationSpec,
|
|
357
|
+
SystemServiceSpec: () => SystemServiceSpec,
|
|
358
|
+
TransportFactoryService: () => TransportFactoryService,
|
|
359
|
+
TransportFactorySpec: () => TransportFactorySpec,
|
|
360
|
+
clientServiceSpecs: () => clientServiceSpecs,
|
|
361
|
+
createCrossDeviceSpaceSynchronizer: () => createCrossDeviceSpaceSynchronizer,
|
|
362
|
+
echoHostLayer: () => echoHostLayer,
|
|
363
|
+
enableNetworking: () => enableNetworking,
|
|
364
|
+
identityProviderLayer: () => identityProviderLayer,
|
|
365
|
+
layerClientServices: () => layerClientServices,
|
|
366
|
+
registerReplicator: () => registerReplicator,
|
|
367
|
+
runtimePropsFromConfig: () => runtimePropsFromConfig,
|
|
368
|
+
storageLifecycleLayer: () => storageLifecycleLayer,
|
|
369
|
+
storageMigrationLayer: () => storageMigrationLayer
|
|
370
|
+
});
|
|
371
|
+
//#endregion
|
|
372
|
+
//#region src/Spaces.ts
|
|
373
|
+
var Spaces_exports = /* @__PURE__ */ __exportAll({
|
|
374
|
+
AuthExtension: () => AuthExtension,
|
|
375
|
+
AuthStatus: () => AuthStatus,
|
|
376
|
+
CredentialRetrieverExtension: () => CredentialRetrieverExtension,
|
|
377
|
+
CredentialServerExtension: () => CredentialServerExtension,
|
|
378
|
+
DataSpace: () => DataSpace,
|
|
379
|
+
DataSpaceManager: () => DataSpaceManager,
|
|
380
|
+
DataSpaceManagerLayer: () => DataSpaceManagerLayer,
|
|
381
|
+
MOCK_AUTH_PROVIDER: () => MOCK_AUTH_PROVIDER,
|
|
382
|
+
MOCK_AUTH_VERIFIER: () => MOCK_AUTH_VERIFIER,
|
|
383
|
+
SigningContextProviderLayer: () => SigningContextProviderLayer,
|
|
384
|
+
Space: () => Space,
|
|
385
|
+
SpaceArchiveWriter: () => SpaceArchiveWriter,
|
|
386
|
+
SpaceManager: () => SpaceManager,
|
|
387
|
+
SpaceManagerLayer: () => SpaceManagerLayer,
|
|
388
|
+
SpaceManagerService: () => SpaceManagerService,
|
|
389
|
+
SpaceProtocol: () => SpaceProtocol,
|
|
390
|
+
SpaceProtocolSession: () => SpaceProtocolSession,
|
|
391
|
+
SpacesServiceImpl: () => SpacesServiceImpl,
|
|
392
|
+
SpacesServiceLayer: () => SpacesServiceLayer,
|
|
393
|
+
buildDatabaseDirectoryFromObjects: () => buildDatabaseDirectoryFromObjects,
|
|
394
|
+
collectFeedMessages: () => collectFeedMessages,
|
|
395
|
+
createSigningContextProvider: () => createSigningContextProvider,
|
|
396
|
+
detectSpaceArchiveFormat: () => detectSpaceArchiveFormat,
|
|
397
|
+
extractSpaceArchive: () => extractSpaceArchive,
|
|
398
|
+
objJsonToObjectStructure: () => objJsonToObjectStructure,
|
|
399
|
+
objectStructureToObjJson: () => objectStructureToObjJson,
|
|
400
|
+
orderObjJsonFields: () => orderObjJsonFields,
|
|
401
|
+
readSerializedSpaceArchive: () => readSerializedSpaceArchive,
|
|
402
|
+
remainingLifetimeSeconds: () => remainingLifetimeSeconds,
|
|
403
|
+
writeSerializedSpaceArchive: () => writeSerializedSpaceArchive
|
|
404
|
+
});
|
|
405
|
+
//#endregion
|
|
400
406
|
//#region src/Storage.ts
|
|
401
407
|
var Storage_exports = /* @__PURE__ */ __exportAll({
|
|
402
408
|
OPFS_SQLITE_DB_FILENAME: () => OPFS_SQLITE_DB_FILENAME,
|
|
@@ -407,7 +413,8 @@ var Storage_exports = /* @__PURE__ */ __exportAll({
|
|
|
407
413
|
exportProfileData: () => exportProfileData,
|
|
408
414
|
getSqliteProfileEntries: () => getSqliteProfileEntries,
|
|
409
415
|
importProfileData: () => importProfileData,
|
|
410
|
-
isValidSqliteDatabase: () => isValidSqliteDatabase
|
|
416
|
+
isValidSqliteDatabase: () => isValidSqliteDatabase,
|
|
417
|
+
storageWatchdogLayer: () => storageWatchdogLayer
|
|
411
418
|
});
|
|
412
419
|
//#endregion
|
|
413
420
|
//#region src/System.ts
|
|
@@ -482,6 +489,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
482
489
|
/** Wipes persisted storage over a SQLite layer of its own, since the stack's is gone by the time a reset gets here. */
|
|
483
490
|
yield* Hook.on(WipingStorage, () => wipeSqliteStorage.pipe(Effect.provide(sqlite), Effect.orDie));
|
|
484
491
|
yield* Hook.on(Reset, () => requestShutdown);
|
|
492
|
+
yield* Hook.on(StorageStuck, () => requestShutdown);
|
|
485
493
|
yield* Hook.on(SessionClosed, Effect.fn("WorkerRuntime.onSessionClosed")(function* ({ session }) {
|
|
486
494
|
sessions.delete(session);
|
|
487
495
|
if (sessions.size === 0) yield* requestShutdown;
|
|
@@ -491,7 +499,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
491
499
|
log("starting...", void 0, {
|
|
492
500
|
"~LogMeta": "~LogMeta",
|
|
493
501
|
F: __dxlog_file,
|
|
494
|
-
L:
|
|
502
|
+
L: 187,
|
|
495
503
|
S: this
|
|
496
504
|
});
|
|
497
505
|
const config = yield* configProvider;
|
|
@@ -500,7 +508,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
500
508
|
log("worker-runtime: building client services stack", void 0, {
|
|
501
509
|
"~LogMeta": "~LogMeta",
|
|
502
510
|
F: __dxlog_file,
|
|
503
|
-
L:
|
|
511
|
+
L: 194,
|
|
504
512
|
S: this
|
|
505
513
|
});
|
|
506
514
|
const stackContext = yield* Layer.build(layerClientServices({
|
|
@@ -514,7 +522,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
514
522
|
log("worker-runtime: stack built, opening", void 0, {
|
|
515
523
|
"~LogMeta": "~LogMeta",
|
|
516
524
|
F: __dxlog_file,
|
|
517
|
-
L:
|
|
525
|
+
L: 217,
|
|
518
526
|
S: this
|
|
519
527
|
});
|
|
520
528
|
yield* Effect.gen(function* () {
|
|
@@ -524,14 +532,14 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
524
532
|
log("worker-runtime: stack opened, signalling ready", void 0, {
|
|
525
533
|
"~LogMeta": "~LogMeta",
|
|
526
534
|
F: __dxlog_file,
|
|
527
|
-
L:
|
|
535
|
+
L: 223,
|
|
528
536
|
S: this
|
|
529
537
|
});
|
|
530
538
|
ready.wake(void 0);
|
|
531
539
|
log("started", void 0, {
|
|
532
540
|
"~LogMeta": "~LogMeta",
|
|
533
541
|
F: __dxlog_file,
|
|
534
|
-
L:
|
|
542
|
+
L: 225,
|
|
535
543
|
S: this
|
|
536
544
|
});
|
|
537
545
|
const [identityService, devicesService] = yield* Effect.all([makeInProcessClient(IdentityService.Rpcs, yield* built.getServiceResolver().resolve(IdentityService.Tag, {}).pipe(Scope.provide(stackScope))), makeInProcessClient(DevicesService.Rpcs, yield* built.getServiceResolver().resolve(DevicesService.Tag, {}).pipe(Scope.provide(stackScope)))]);
|
|
@@ -545,7 +553,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
545
553
|
log.info("worker-runtime: boot complete, scheduling networking start", { delay: EDGE_NETWORKING_START_DELAY }, {
|
|
546
554
|
"~LogMeta": "~LogMeta",
|
|
547
555
|
F: __dxlog_file,
|
|
548
|
-
L:
|
|
556
|
+
L: 251,
|
|
549
557
|
S: this
|
|
550
558
|
});
|
|
551
559
|
const networkingFiber = yield* Effect.forkDetach(Effect.gen(function* () {
|
|
@@ -553,7 +561,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
553
561
|
log("worker-runtime: starting networking", void 0, {
|
|
554
562
|
"~LogMeta": "~LogMeta",
|
|
555
563
|
F: __dxlog_file,
|
|
556
|
-
L:
|
|
564
|
+
L: 257,
|
|
557
565
|
S: this
|
|
558
566
|
});
|
|
559
567
|
yield* enableNetworking;
|
|
@@ -569,7 +577,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
569
577
|
log.error("starting", error, {
|
|
570
578
|
"~LogMeta": "~LogMeta",
|
|
571
579
|
F: __dxlog_file,
|
|
572
|
-
L:
|
|
580
|
+
L: 271,
|
|
573
581
|
S: this
|
|
574
582
|
});
|
|
575
583
|
yield* closeStack;
|
|
@@ -579,7 +587,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
579
587
|
log("opening session...", void 0, {
|
|
580
588
|
"~LogMeta": "~LogMeta",
|
|
581
589
|
F: __dxlog_file,
|
|
582
|
-
L:
|
|
590
|
+
L: 283,
|
|
583
591
|
S: this
|
|
584
592
|
});
|
|
585
593
|
const rtcService = yield* makeRtcServiceClientOverProtocol(systemProtocol);
|
|
@@ -592,14 +600,14 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
592
600
|
yield* Effect.addFinalizer(() => Hook.emit(SessionClosed, { session }).pipe(Effect.provideService(Hook.Controller, controller), Effect.catchCause((cause) => Effect.sync(() => log.catch(cause, void 0, {
|
|
593
601
|
"~LogMeta": "~LogMeta",
|
|
594
602
|
F: __dxlog_file,
|
|
595
|
-
L:
|
|
603
|
+
L: 310,
|
|
596
604
|
S: this
|
|
597
605
|
})))));
|
|
598
606
|
if (automaticallyConnectWebrtc) yield* reconnectWebrtc;
|
|
599
607
|
log("session opened", void 0, {
|
|
600
608
|
"~LogMeta": "~LogMeta",
|
|
601
609
|
F: __dxlog_file,
|
|
602
|
-
L:
|
|
610
|
+
L: 318,
|
|
603
611
|
S: this
|
|
604
612
|
});
|
|
605
613
|
return session;
|
|
@@ -609,7 +617,7 @@ var makeWorkerRuntime = ({ configProvider, requestShutdown = Effect.void, automa
|
|
|
609
617
|
invariant(stack, "worker runtime not started", {
|
|
610
618
|
"~LogMeta": "~LogMeta",
|
|
611
619
|
F: __dxlog_file,
|
|
612
|
-
L:
|
|
620
|
+
L: 324,
|
|
613
621
|
S: this,
|
|
614
622
|
A: ["stack", "'worker runtime not started'"]
|
|
615
623
|
});
|
package/dist/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/Agents.ts","../../src/Devtools.ts","../../src/internal/diagnostics/diagnostics-collector.ts","../../src/Diagnostics.ts","../../src/IdentityManager.ts","../../src/Invitations.ts","../../src/Metadata.ts","../../src/ServiceStack.ts","../../src/Spaces.ts","../../src/internal/storage/util.ts","../../src/internal/storage/storage.ts","../../src/internal/storage/profile-archive.ts","../../src/internal/storage/profile-archive-sqlite.ts","../../src/Storage.ts","../../src/System.ts","../../src/internal/worker/events.ts","../../src/internal/worker/worker-runtime.ts","../../src/WorkerRuntime.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/agents/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/devtools/index.ts';\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ClientServicesProvider } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { SystemService } from '@dxos/protocols/rpc';\nimport { type JsonKeyOptions, jsonKeyReplacer } from '@dxos/util';\n\nconst GET_DIAGNOSTICS_RPC_TIMEOUT = 10_000;\n\nexport class DiagnosticsCollector {\n public static async collect(\n config: Config | Config[] = [],\n services: ClientServicesProvider | null = null,\n options: JsonKeyOptions = {},\n ): Promise<any> {\n const serviceDiagnostics = await services?.services?.SystemService?.getDiagnostics(\n {\n keys: options.humanize\n ? SystemService.KeyOption.enums.HUMANIZE\n : options.truncate\n ? SystemService.KeyOption.enums.TRUNCATE\n : undefined,\n },\n { timeout: GET_DIAGNOSTICS_RPC_TIMEOUT },\n );\n\n const clientDiagnostics = {\n config,\n };\n\n const diagnostics = { client: clientDiagnostics, services: serviceDiagnostics ?? undefined };\n\n return JSON.parse(JSON.stringify(diagnostics, jsonKeyReplacer(options)));\n }\n}\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/diagnostics/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/identity/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/invitations/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/metadata/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/services/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\n// The space subsystem is one namespace: `internal/space` is the transport-level space and its\n// manager, `internal/spaces` the data spaces above it, and `internal/space-export` their archive\n// format. Separate facades produced sibling names a reader cannot tell apart.\nexport * from './internal/space/index.ts';\nexport * from './internal/spaces/index.ts';\nexport * from './internal/space-export/index.ts';\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport { DX_DATA } from '@dxos/client-protocol';\nimport { type Runtime_Client_Storage, Runtime_Client_Storage_StorageDriver } from '@dxos/protocols/buf/dxos/config_pb';\nimport { isNode } from '@dxos/util';\n\nexport const getRootPath = (config: Runtime_Client_Storage) => {\n const { dataRoot = isNode() ? DX_DATA : 'dxos/storage' } = config ?? {};\n return `${dataRoot}/`;\n};\n\nexport const isPersistent = (config: Runtime_Client_Storage) => {\n const { persistent = false } = config ?? {};\n return (\n (config.dataStore !== undefined && config.dataStore !== Runtime_Client_Storage_StorageDriver.RAM) || persistent\n );\n};\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport { InvalidConfigError } from '@dxos/protocols';\nimport {\n type Runtime_Client_Storage,\n Runtime_Client_Storage_StorageDriver as StorageDriver,\n} from '@dxos/protocols/buf/dxos/config_pb';\nimport { StorageType, createStorage } from '@dxos/random-access-storage';\n\nimport { getRootPath } from './util.ts';\n\n// TODO(burdon): Factor out.\nexport const createStorageObjects = (config: Runtime_Client_Storage) => {\n const { persistent = false, keyStore, dataStore } = config ?? {};\n if (persistent && dataStore === StorageDriver.RAM) {\n throw new InvalidConfigError({ message: 'RAM storage cannot be used in persistent mode.' });\n }\n if (!persistent && dataStore !== undefined && dataStore !== StorageDriver.RAM) {\n throw new InvalidConfigError({ message: 'Cannot use a persistent storage in not persistent mode.' });\n }\n if (persistent && keyStore === StorageDriver.RAM) {\n throw new InvalidConfigError({ message: 'RAM key storage cannot be used in persistent mode.' });\n }\n if (!persistent && keyStore !== StorageDriver.RAM && keyStore !== undefined) {\n throw new InvalidConfigError({ message: 'Cannot use a persistent key storage in not persistent mode.' });\n }\n\n return {\n storage: createStorage({\n type: persistent ? toStorageType(dataStore) : StorageType.RAM,\n root: getRootPath(config),\n }),\n };\n};\n\nconst toStorageType = (type: StorageDriver | undefined): StorageType | undefined => {\n switch (type) {\n case undefined:\n return undefined;\n case StorageDriver.RAM:\n return StorageType.RAM;\n case StorageDriver.CHROME:\n return StorageType.CHROME;\n case StorageDriver.FIREFOX:\n return StorageType.FIREFOX;\n case StorageDriver.IDB:\n return StorageType.IDB;\n case StorageDriver.NODE:\n return StorageType.NODE;\n case StorageDriver.WEBFS:\n return StorageType.WEBFS;\n default:\n throw new Error(`Invalid storage type: ${StorageDriver[type]}`);\n }\n};\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport { cbor } from '@automerge/automerge-repo';\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type ProfileArchive, ProfileArchiveEntryType } from '@dxos/protocols';\nimport type { Storage } from '@dxos/random-access-storage';\nimport { arrayToBuffer } from '@dxos/util';\n\nexport const encodeProfileArchive = (profile: ProfileArchive): Uint8Array => cbor.encode(profile);\n\nexport const decodeProfileArchive = (data: Uint8Array): ProfileArchive => cbor.decode(data);\n\nexport const exportProfileData = async ({ storage }: { storage: Storage }): Promise<ProfileArchive> => {\n const archive: ProfileArchive = { storage: [], meta: { timestamp: new Date().toISOString() } };\n\n const directory = await storage.createDirectory();\n const files = await directory.list();\n\n log.info('begin exporting files', { count: files.length });\n for (const filename of files) {\n const file = await directory.getOrCreateFile(filename);\n const { size } = await file.stat();\n const data = await file.read(0, size);\n archive.storage.push({\n type: ProfileArchiveEntryType.FILE,\n key: filename,\n value: data,\n });\n }\n log.info('done exporting files', { count: files.length });\n\n return archive;\n};\n\nexport const importProfileData = async ({ storage }: { storage: Storage }, archive: ProfileArchive): Promise<void> => {\n for (const entry of archive.storage) {\n switch (entry.type) {\n case ProfileArchiveEntryType.FILE: {\n const directory = await storage.createDirectory();\n invariant(typeof entry.key === 'string', 'Invalid key type');\n const file = await directory.getOrCreateFile(entry.key);\n invariant(entry.value instanceof Uint8Array, 'Invalid value type');\n await file.write(0, arrayToBuffer(entry.value));\n await file.close();\n break;\n }\n case ProfileArchiveEntryType.KEY_VALUE:\n // Legacy LevelDB key/value entries are no longer supported (LevelDB was removed).\n log.warn('Skipping legacy KEY_VALUE entry (LevelDB storage removed)', { key: entry.key });\n break;\n case ProfileArchiveEntryType.SQLITE_DATABASE:\n log.warn('Skipping SQLITE_DATABASE entry (import via OPFS recovery API)', { key: entry.key });\n break;\n default:\n throw new Error(`Invalid entry type: ${entry.type}`);\n }\n }\n\n log.info('done importing files');\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { type ProfileArchive, ProfileArchiveEntryType } from '@dxos/protocols';\n\n/** Default OPFS SQLite database name used by Composer recovery and the OPFS worker. */\nexport const OPFS_SQLITE_DB_FILENAME = 'DXOS' as const;\n\nconst SQLITE_MAGIC = new TextEncoder().encode('SQLite format 3\\u0000');\n\n/**\n * Returns true when `bytes` begins with the SQLite 3 file header.\n */\nexport const isValidSqliteDatabase = (bytes: Uint8Array): boolean => {\n if (bytes.byteLength < SQLITE_MAGIC.byteLength) {\n return false;\n }\n for (let index = 0; index < SQLITE_MAGIC.byteLength; index++) {\n if (bytes[index] !== SQLITE_MAGIC[index]) {\n return false;\n }\n }\n return true;\n};\n\nconst coerceToUint8Array = (value: unknown): Uint8Array | undefined => {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (value instanceof ArrayBuffer) {\n return new Uint8Array(value);\n }\n if (Array.isArray(value)) {\n return new Uint8Array(value);\n }\n return undefined;\n};\n\nexport type SqliteProfileEntry = {\n opfsFilename: string;\n database: Uint8Array;\n};\n\nexport type CreateSqliteProfileArchiveOptions = {\n /** Host where the export was created (stored in archive meta). */\n origin?: string;\n};\n\n/**\n * Build a profile archive containing a single validated SQLITE_DATABASE entry.\n */\nexport const createSqliteProfileArchive = (\n opfsFilename: string,\n database: Uint8Array,\n options?: CreateSqliteProfileArchiveOptions,\n): ProfileArchive => {\n if (!isValidSqliteDatabase(database)) {\n throw new Error('Invalid SQLite database (missing SQLite format 3 header)');\n }\n\n return {\n meta: {\n timestamp: new Date().toISOString(),\n ...(options?.origin ? { origin: options.origin } : {}),\n },\n storage: [\n {\n type: ProfileArchiveEntryType.SQLITE_DATABASE,\n key: opfsFilename,\n value: database,\n },\n ],\n };\n};\n\n/**\n * Extract validated SQLITE_DATABASE entries from a profile archive.\n */\nexport const getSqliteProfileEntries = (archive: ProfileArchive): SqliteProfileEntry[] => {\n const entries: SqliteProfileEntry[] = [];\n\n for (const entry of archive.storage) {\n if (entry.type !== ProfileArchiveEntryType.SQLITE_DATABASE) {\n continue;\n }\n if (typeof entry.key !== 'string') {\n continue;\n }\n\n const database = coerceToUint8Array(entry.value);\n if (!database || !isValidSqliteDatabase(database)) {\n continue;\n }\n\n entries.push({ opfsFilename: entry.key, database });\n }\n\n return entries;\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/storage/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/system/index.ts';\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Hook from '@dxos/effect/Hook';\n\nimport { type WorkerSession } from './worker-runtime.ts';\n\n/** A tab session has closed, whether by the tab, the client, or its liveness lock releasing. */\nexport const SessionClosed = Hook.make<{ session: WorkerSession }>()('client-services/worker/SessionClosed');\n","//\n// Copyright 2022 DXOS.org\n//\n\nimport * as Cause from 'effect/Cause';\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport * as Fiber from 'effect/Fiber';\nimport * as Layer from 'effect/Layer';\nimport * as Reactivity from 'effect/reactivity/Reactivity';\nimport type * as RpcClient from 'effect/rpc/RpcClient';\nimport * as RpcServer from 'effect/rpc/RpcServer';\nimport * as Scope from 'effect/Scope';\nimport type * as SqlClient from 'effect/sql/SqlClient';\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, makeRtcServiceClientOverProtocol } from '@dxos/client-protocol';\nimport { LayerStack } from '@dxos/compute-runtime';\nimport { type Config, ConfigService } from '@dxos/config';\nimport * as Hook from '@dxos/effect/Hook';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, setIdentityTags } from '@dxos/messaging';\nimport { RtcTransportProxyFactory } from '@dxos/network-manager';\nimport { WorkerRuntimeStartError, makeInProcessClient } from '@dxos/protocols';\nimport { DevicesService, IdentityService, type RTCService } from '@dxos/protocols/rpc';\nimport { RpcRouter } from '@dxos/rpc';\nimport * as SqlExport from '@dxos/sql-sqlite/SqlExport';\nimport * as SqliteClient from '@dxos/sql-sqlite/SqliteClient';\n\nimport * as Events from '../../Events.ts';\nimport * as SqliteStorage from '../../SqliteStorage.ts';\nimport { enableNetworking, layerClientServices } from '../services/index.ts';\nimport { SessionClosed } from './events.ts';\n\n// Session transports are effect-rpc protocol layers handed over by the worker framework: appProtocol\n// serves the client services; systemProtocol carries the reverse-direction\n// RTCService (worker→tab).\nexport type CreateSessionProps = {\n /** Forward-direction (tab→worker) protocol over which the worker serves the client services. */\n appProtocol: RpcServer.Protocol['Service'];\n /** Reverse-direction (worker→tab) protocol serving the tab's WebRTC `RTCService`; the worker is the client. */\n systemProtocol: RpcClient.Protocol['Service'];\n};\n\n/** A tab connection within the worker; it lives as long as the scope `createSession` ran in. */\nexport interface WorkerSession {\n /** The tab's WebRTC service, which the worker's network stack proxies through. */\n readonly rtcService: RTCService.Client;\n}\n\n/**\n * Grace period between \"worker booted\" and the first edge dial. wa-sqlite runs in-process on this\n * thread, so the dial, its auth-header request, and the replication behind it contend with the boot\n * RPCs the tab is waiting on — on a document-heavy profile the session handshake loses that race and\n * the client reports a connect timeout. Yielding lets the queued handshake drain first; replication\n * then proceeds behind a live session. The stack exposes the capability; the embedder decides the timing.\n */\nconst EDGE_NETWORKING_START_DELAY = '300 millis';\n\nexport type WorkerRuntimeOptions = {\n configProvider: Effect.Effect<Config>;\n /** The runtime wants to terminate (its last session closed, or a reset finished); the embedder closes its scope. */\n requestShutdown?: Effect.Effect<void>;\n /**\n * @default true\n */\n automaticallyConnectWebrtc?: boolean;\n\n /**\n * Optional SQLite layer for Effect. Defaults to LocalSqliteOpfsLayer.\n * For testing in Node.js, use `layerMemory` from `@dxos/sql-sqlite/Platform`.\n */\n sqliteLayer?: Layer.Layer<SqlClient.SqlClient | SqlExport.SqlExport, unknown>;\n\n /**\n * Shared context for the in-memory signal manager used when edge signaling is off; tests pass one\n * so several runtimes can see each other.\n */\n memorySignalManagerContext?: MemorySignalManagerContext;\n};\n\n/**\n * Effect service surface for the dedicated-worker runtime.\n *\n * Manages connections from proxies (in tabs): tabs make requests to the client services stack, and\n * provide a WebRTC gateway. The runtime lives as long as the scope it was made in.\n */\nexport interface WorkerRuntimeService {\n /** The running stack; resolve a tag through it to reach a component or RPC handler. */\n readonly stack: () => LayerStack.LayerStack;\n /** Open a tab session over the supplied effect-rpc protocols for the life of the scope, registered for WebRTC bridging. */\n readonly createSession: (props: CreateSessionProps) => Effect.Effect<WorkerSession, never, Scope.Scope>;\n /** Route WebRTC through the given session (or disconnect when `undefined`). */\n readonly connectWebrtc: (session: WorkerSession | undefined) => Effect.Effect<void>;\n}\n\n/**\n * Context tag for the dedicated-worker runtime service. Provided by {@link layerWorkerRuntime}.\n */\nexport class WorkerRuntime extends Context.Service<WorkerRuntime, WorkerRuntimeService>()(\n '@dxos/client-services/WorkerRuntime',\n) {}\n\n/**\n * Builds and opens the worker runtime: {@link layerClientServices} over the worker's SQLite layer.\n * A startup error rejects the readiness gate, closes the stack and fails the effect, so the worker\n * reports it instead of advertising `ready`. Closing the scope tears everything down.\n */\nexport const makeWorkerRuntime = ({\n configProvider,\n requestShutdown = Effect.void,\n automaticallyConnectWebrtc = true,\n sqliteLayer,\n memorySignalManagerContext,\n}: WorkerRuntimeOptions): Effect.Effect<WorkerRuntimeService, WorkerRuntimeStartError, Scope.Scope> =>\n Effect.gen(function* () {\n // Held so effects that outlive this construction — a session finalizer, which the framework runs\n // when it closes a session scope — still reach the controller.\n const controller = yield* Hook.Controller;\n const transportFactory = new RtcTransportProxyFactory();\n const ready = new Trigger<Error | undefined>();\n const sessions = new Set<WorkerSession>();\n const signalMetadataTags: any = {\n runtime: 'worker-runtime',\n origin: typeof location !== 'undefined' ? location.origin : 'unknown',\n };\n const scope = yield* Effect.scope;\n\n let sessionForNetworking: WorkerSession | undefined;\n /** Owns the built stack; a reset closes it early, otherwise it closes with the runtime scope. */\n const stackScope = yield* Scope.fork(scope);\n let stack: LayerStack.LayerStack | undefined;\n\n if (sqliteLayer) {\n log.warn('Using testing SQLite layer');\n }\n\n const sqlite = (sqliteLayer ?? LocalSqliteOpfsLayer).pipe(Layer.provideMerge(Reactivity.layer), Layer.orDie);\n\n const closeStack = Effect.gen(function* () {\n stack = undefined;\n yield* Scope.close(stackScope, Exit.void);\n });\n\n const connectRtc = (session: WorkerSession | undefined): void => {\n sessionForNetworking = session;\n transportFactory.setRtcService(session?.rtcService);\n };\n\n // Selects one of the existing sessions for WebRTC networking.\n const reconnectWebrtc = Effect.sync(() => {\n log('reconnecting webrtc...');\n // Drop the current session if it has since closed.\n if (sessionForNetworking && !sessions.has(sessionForNetworking)) {\n sessionForNetworking = undefined;\n }\n if (!sessionForNetworking) {\n connectRtc(Array.from(sessions).find((session) => session.rtcService));\n }\n });\n\n // The runtime's own subscriptions: the reset chain and session bookkeeping.\n yield* Hook.on(Events.Closing, () => closeStack);\n /** Wipes persisted storage over a SQLite layer of its own, since the stack's is gone by the time a reset gets here. */\n yield* Hook.on(Events.WipingStorage, () =>\n SqliteStorage.wipeSqliteStorage.pipe(Effect.provide(sqlite), Effect.orDie),\n );\n yield* Hook.on(Events.Reset, () => requestShutdown);\n yield* Hook.on(\n SessionClosed,\n Effect.fn('WorkerRuntime.onSessionClosed')(function* ({ session }) {\n sessions.delete(session);\n if (sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n yield* requestShutdown;\n } else if (automaticallyConnectWebrtc) {\n yield* reconnectWebrtc;\n }\n }),\n );\n\n yield* Effect.gen(function* () {\n log('starting...');\n const config = yield* configProvider;\n const observabilityGroup = config.get('runtime.client.observabilityGroup');\n if (observabilityGroup) {\n signalMetadataTags.group = observabilityGroup;\n }\n\n log('worker-runtime: building client services stack');\n // Building the layer also builds its eager specs, so the rpc registrations are in place before\n // the events below run.\n const stackContext = yield* Layer.build(\n layerClientServices({\n // The dial is driven below once boot has drained, not on stack open.\n autoConnect: false,\n // Auto-activate spaces that were previously active after leader changeover.\n runtimeProps: { autoActivateSpaces: true },\n // Edge signaling is created by the platform layer from the edge connection; otherwise fall\n // back to an in-memory manager (KUBE `WebsocketSignalManager` removed).\n signalManager: config.get('runtime.client.edgeFeatures')?.signaling\n ? undefined\n : new MemorySignalManager(memorySignalManagerContext ?? new MemorySignalManagerContext()),\n transportFactory,\n }).pipe(\n Layer.provide(sqlite),\n Layer.provide(Layer.succeed(ConfigService, config)),\n Layer.provide(Layer.succeed(Hook.Controller, controller)),\n ),\n ).pipe(Scope.provide(stackScope));\n const built = Context.get(stackContext, LayerStack.Service);\n stack = built;\n log('worker-runtime: stack built, opening');\n // `StackOpened` resolves once every handler the cascade triggered has run.\n yield* Effect.gen(function* () {\n yield* Hook.emit(Events.Opening, undefined);\n yield* Hook.emit(Events.StackOpened, undefined);\n }).pipe(Effect.provideService(Hook.Controller, controller));\n log('worker-runtime: stack opened, signalling ready');\n ready.wake(undefined);\n log('started');\n\n // Bridge the identity/devices Handlers to the effect-rpc client surface in-process.\n const [identityService, devicesService] = yield* Effect.all([\n makeInProcessClient(\n IdentityService.Rpcs,\n yield* built.getServiceResolver().resolve(IdentityService.Tag, {}).pipe(Scope.provide(stackScope)),\n ),\n makeInProcessClient(\n DevicesService.Rpcs,\n yield* built.getServiceResolver().resolve(DevicesService.Tag, {}).pipe(Scope.provide(stackScope)),\n ),\n ]);\n setIdentityTags({\n identityService,\n devicesService,\n setTag: (key: string, value: string) => {\n signalMetadataTags[key] = value;\n },\n });\n\n // Boot is done: outbound traffic can no longer starve the session handshake the tab is\n // waiting on. Anchored here rather than in the stack so the gate opens only after the whole\n // worker start sequence has drained, not just the stack open. The grace period yields the\n // thread so any RPC already queued behind this turn is served before the dial and its\n // auth-header request start competing for it.\n log.info('worker-runtime: boot complete, scheduling networking start', {\n delay: EDGE_NETWORKING_START_DELAY,\n });\n const networkingFiber = yield* Effect.forkDetach(\n Effect.gen(function* () {\n yield* Effect.sleep(EDGE_NETWORKING_START_DELAY);\n log('worker-runtime: starting networking');\n yield* enableNetworking;\n }).pipe(Effect.provideService(Hook.Controller, controller)),\n );\n yield* Effect.addFinalizer(() => Fiber.interrupt(networkingFiber));\n }).pipe(\n Effect.catchCause((cause) =>\n Effect.gen(function* () {\n const squashed = Cause.squash(cause);\n const error = new WorkerRuntimeStartError({\n message: squashed instanceof Error ? squashed.message : String(squashed),\n cause: squashed,\n });\n ready.wake(error);\n log.error('starting', error);\n yield* closeStack;\n return yield* Effect.fail(error);\n }),\n ),\n );\n\n const createSession = ({\n appProtocol,\n systemProtocol,\n }: CreateSessionProps): Effect.Effect<WorkerSession, never, Scope.Scope> =>\n Effect.gen(function* () {\n log('opening session...');\n const rtcService = yield* makeRtcServiceClientOverProtocol(systemProtocol);\n\n // Serve once the runtime is ready; the handlers come from the stack's tags.\n const error = yield* Effect.promise(() => ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT }));\n if (error || !stack) {\n return yield* Effect.die(error ?? new Error('worker runtime stack is not available'));\n }\n // Every service registered itself with the stack's router; the session only attaches its\n // transport, so adding a service never touches this code.\n const router = yield* stack\n .getServiceResolver()\n .resolve(RpcRouter.RpcRouter, {})\n .pipe(Effect.orDie, Effect.scoped);\n yield* Layer.build(\n RpcRouter.layerTransport.pipe(\n Layer.provide(Layer.succeed(RpcServer.Protocol, appProtocol)),\n Layer.provide(Layer.succeed(RpcRouter.RpcRouter, router)),\n ),\n );\n\n const session: WorkerSession = { rtcService };\n sessions.add(session);\n yield* Effect.addFinalizer(() =>\n Hook.emit(SessionClosed, { session }).pipe(\n Effect.provideService(Hook.Controller, controller),\n // A subscriber failing must not keep the transport open.\n Effect.catchCause((cause) => Effect.sync(() => log.catch(cause))),\n ),\n );\n\n if (automaticallyConnectWebrtc) {\n yield* reconnectWebrtc;\n }\n\n log('session opened');\n return session;\n });\n\n return {\n stack: () => {\n invariant(stack, 'worker runtime not started');\n return stack;\n },\n createSession,\n connectWebrtc: (session) => Effect.sync(() => connectRtc(session)),\n } satisfies WorkerRuntimeService;\n }).pipe(Effect.provide(Hook.controllerLayer));\n\n/**\n * Layer providing the {@link WorkerRuntime} service; the runtime lives as long as the layer.\n */\nexport const layerWorkerRuntime = (\n options: WorkerRuntimeOptions,\n): Layer.Layer<WorkerRuntime, WorkerRuntimeStartError> => Layer.effect(WorkerRuntime, makeWorkerRuntime(options));\n\nconst DB_NAME = 'DXOS';\n\n/**\n * SqlExport layer that wraps SqliteClient to provide export functionality.\n */\nconst SqlExportLayer: Layer.Layer<SqlExport.SqlExport, never, SqliteClient.SqliteClient> = Layer.effect(\n SqlExport.SqlExport,\n Effect.gen(function* () {\n const sql = yield* SqliteClient.SqliteClient;\n return {\n export: sql.export,\n } satisfies SqlExport.Service;\n }),\n);\n\n/**\n * Local SQLite layer for the worker.\n * Uses in-process OPFS via {@link SqliteClient.layerOpfs} (no MessagePort).\n * NOTE: Only usable within a worker.\n */\nconst LocalSqliteOpfsLayer = SqlExportLayer.pipe(\n Layer.provideMerge(SqliteClient.layerOpfs({ dbName: DB_NAME })),\n Layer.provideMerge(Reactivity.layer),\n);\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/worker/index.ts';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["StorageDriver","__dxlog_file","Events.Closing","Events.WipingStorage","Events.Reset","Events.StorageStuck","Events.Opening","Events.StackOpened"],"sources":["../../src/Agents.ts","../../src/Devtools.ts","../../src/internal/diagnostics/diagnostics-collector.ts","../../src/Diagnostics.ts","../../src/IdentityManager.ts","../../src/Invitations.ts","../../src/Metadata.ts","../../src/internal/storage/util.ts","../../src/internal/storage/storage.ts","../../src/internal/storage/profile-archive.ts","../../src/internal/storage/profile-archive-sqlite.ts","../../src/ServiceStack.ts","../../src/Spaces.ts","../../src/Storage.ts","../../src/System.ts","../../src/internal/worker/events.ts","../../src/internal/worker/worker-runtime.ts","../../src/WorkerRuntime.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/agents/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/devtools/index.ts';\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ClientServicesProvider } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { SystemService } from '@dxos/protocols/rpc';\nimport { type JsonKeyOptions, jsonKeyReplacer } from '@dxos/util';\n\nconst GET_DIAGNOSTICS_RPC_TIMEOUT = 10_000;\n\nexport class DiagnosticsCollector {\n public static async collect(\n config: Config | Config[] = [],\n services: ClientServicesProvider | null = null,\n options: JsonKeyOptions = {},\n ): Promise<any> {\n const serviceDiagnostics = await services?.services?.SystemService?.getDiagnostics(\n {\n keys: options.humanize\n ? SystemService.KeyOption.enums.HUMANIZE\n : options.truncate\n ? SystemService.KeyOption.enums.TRUNCATE\n : undefined,\n },\n { timeout: GET_DIAGNOSTICS_RPC_TIMEOUT },\n );\n\n const clientDiagnostics = {\n config,\n };\n\n const diagnostics = { client: clientDiagnostics, services: serviceDiagnostics ?? undefined };\n\n return JSON.parse(JSON.stringify(diagnostics, jsonKeyReplacer(options)));\n }\n}\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/diagnostics/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/identity/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/invitations/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/metadata/index.ts';\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport { DX_DATA } from '@dxos/client-protocol';\nimport { type Runtime_Client_Storage, Runtime_Client_Storage_StorageDriver } from '@dxos/protocols/buf/dxos/config_pb';\nimport { isNode } from '@dxos/util';\n\nexport const getRootPath = (config: Runtime_Client_Storage) => {\n const { dataRoot = isNode() ? DX_DATA : 'dxos/storage' } = config ?? {};\n return `${dataRoot}/`;\n};\n\nexport const isPersistent = (config: Runtime_Client_Storage) => {\n const { persistent = false } = config ?? {};\n return (\n (config.dataStore !== undefined && config.dataStore !== Runtime_Client_Storage_StorageDriver.RAM) || persistent\n );\n};\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport { InvalidConfigError } from '@dxos/protocols';\nimport {\n type Runtime_Client_Storage,\n Runtime_Client_Storage_StorageDriver as StorageDriver,\n} from '@dxos/protocols/buf/dxos/config_pb';\nimport { StorageType, createStorage } from '@dxos/random-access-storage';\n\nimport { getRootPath } from './util.ts';\n\n// TODO(burdon): Factor out.\nexport const createStorageObjects = (config: Runtime_Client_Storage) => {\n const { persistent = false, keyStore, dataStore } = config ?? {};\n if (persistent && dataStore === StorageDriver.RAM) {\n throw new InvalidConfigError({ message: 'RAM storage cannot be used in persistent mode.' });\n }\n if (!persistent && dataStore !== undefined && dataStore !== StorageDriver.RAM) {\n throw new InvalidConfigError({ message: 'Cannot use a persistent storage in not persistent mode.' });\n }\n if (persistent && keyStore === StorageDriver.RAM) {\n throw new InvalidConfigError({ message: 'RAM key storage cannot be used in persistent mode.' });\n }\n if (!persistent && keyStore !== StorageDriver.RAM && keyStore !== undefined) {\n throw new InvalidConfigError({ message: 'Cannot use a persistent key storage in not persistent mode.' });\n }\n\n return {\n storage: createStorage({\n type: persistent ? toStorageType(dataStore) : StorageType.RAM,\n root: getRootPath(config),\n }),\n };\n};\n\nconst toStorageType = (type: StorageDriver | undefined): StorageType | undefined => {\n switch (type) {\n case undefined:\n return undefined;\n case StorageDriver.RAM:\n return StorageType.RAM;\n case StorageDriver.CHROME:\n return StorageType.CHROME;\n case StorageDriver.FIREFOX:\n return StorageType.FIREFOX;\n case StorageDriver.IDB:\n return StorageType.IDB;\n case StorageDriver.NODE:\n return StorageType.NODE;\n case StorageDriver.WEBFS:\n return StorageType.WEBFS;\n default:\n throw new Error(`Invalid storage type: ${StorageDriver[type]}`);\n }\n};\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport { cbor } from '@automerge/automerge-repo';\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type ProfileArchive, ProfileArchiveEntryType } from '@dxos/protocols';\nimport type { Storage } from '@dxos/random-access-storage';\nimport { arrayToBuffer } from '@dxos/util';\n\nexport const encodeProfileArchive = (profile: ProfileArchive): Uint8Array => cbor.encode(profile);\n\nexport const decodeProfileArchive = (data: Uint8Array): ProfileArchive => cbor.decode(data);\n\nexport const exportProfileData = async ({ storage }: { storage: Storage }): Promise<ProfileArchive> => {\n const archive: ProfileArchive = { storage: [], meta: { timestamp: new Date().toISOString() } };\n\n const directory = await storage.createDirectory();\n const files = await directory.list();\n\n log.info('begin exporting files', { count: files.length });\n for (const filename of files) {\n const file = await directory.getOrCreateFile(filename);\n const { size } = await file.stat();\n const data = await file.read(0, size);\n archive.storage.push({\n type: ProfileArchiveEntryType.FILE,\n key: filename,\n value: data,\n });\n }\n log.info('done exporting files', { count: files.length });\n\n return archive;\n};\n\nexport const importProfileData = async ({ storage }: { storage: Storage }, archive: ProfileArchive): Promise<void> => {\n for (const entry of archive.storage) {\n switch (entry.type) {\n case ProfileArchiveEntryType.FILE: {\n const directory = await storage.createDirectory();\n invariant(typeof entry.key === 'string', 'Invalid key type');\n const file = await directory.getOrCreateFile(entry.key);\n invariant(entry.value instanceof Uint8Array, 'Invalid value type');\n await file.write(0, arrayToBuffer(entry.value));\n await file.close();\n break;\n }\n case ProfileArchiveEntryType.KEY_VALUE:\n // Legacy LevelDB key/value entries are no longer supported (LevelDB was removed).\n log.warn('Skipping legacy KEY_VALUE entry (LevelDB storage removed)', { key: entry.key });\n break;\n case ProfileArchiveEntryType.SQLITE_DATABASE:\n log.warn('Skipping SQLITE_DATABASE entry (import via OPFS recovery API)', { key: entry.key });\n break;\n default:\n throw new Error(`Invalid entry type: ${entry.type}`);\n }\n }\n\n log.info('done importing files');\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { type ProfileArchive, ProfileArchiveEntryType } from '@dxos/protocols';\n\n/** Default OPFS SQLite database name used by Composer recovery and the OPFS worker. */\nexport const OPFS_SQLITE_DB_FILENAME = 'DXOS' as const;\n\nconst SQLITE_MAGIC = new TextEncoder().encode('SQLite format 3\\u0000');\n\n/**\n * Returns true when `bytes` begins with the SQLite 3 file header.\n */\nexport const isValidSqliteDatabase = (bytes: Uint8Array): boolean => {\n if (bytes.byteLength < SQLITE_MAGIC.byteLength) {\n return false;\n }\n for (let index = 0; index < SQLITE_MAGIC.byteLength; index++) {\n if (bytes[index] !== SQLITE_MAGIC[index]) {\n return false;\n }\n }\n return true;\n};\n\nconst coerceToUint8Array = (value: unknown): Uint8Array | undefined => {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (value instanceof ArrayBuffer) {\n return new Uint8Array(value);\n }\n if (Array.isArray(value)) {\n return new Uint8Array(value);\n }\n return undefined;\n};\n\nexport type SqliteProfileEntry = {\n opfsFilename: string;\n database: Uint8Array;\n};\n\nexport type CreateSqliteProfileArchiveOptions = {\n /** Host where the export was created (stored in archive meta). */\n origin?: string;\n};\n\n/**\n * Build a profile archive containing a single validated SQLITE_DATABASE entry.\n */\nexport const createSqliteProfileArchive = (\n opfsFilename: string,\n database: Uint8Array,\n options?: CreateSqliteProfileArchiveOptions,\n): ProfileArchive => {\n if (!isValidSqliteDatabase(database)) {\n throw new Error('Invalid SQLite database (missing SQLite format 3 header)');\n }\n\n return {\n meta: {\n timestamp: new Date().toISOString(),\n ...(options?.origin ? { origin: options.origin } : {}),\n },\n storage: [\n {\n type: ProfileArchiveEntryType.SQLITE_DATABASE,\n key: opfsFilename,\n value: database,\n },\n ],\n };\n};\n\n/**\n * Extract validated SQLITE_DATABASE entries from a profile archive.\n */\nexport const getSqliteProfileEntries = (archive: ProfileArchive): SqliteProfileEntry[] => {\n const entries: SqliteProfileEntry[] = [];\n\n for (const entry of archive.storage) {\n if (entry.type !== ProfileArchiveEntryType.SQLITE_DATABASE) {\n continue;\n }\n if (typeof entry.key !== 'string') {\n continue;\n }\n\n const database = coerceToUint8Array(entry.value);\n if (!database || !isValidSqliteDatabase(database)) {\n continue;\n }\n\n entries.push({ opfsFilename: entry.key, database });\n }\n\n return entries;\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/services/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\n// The space subsystem is one namespace: `internal/space` is the transport-level space and its\n// manager, `internal/spaces` the data spaces above it, and `internal/space-export` their archive\n// format. Separate facades produced sibling names a reader cannot tell apart.\nexport * from './internal/space/index.ts';\nexport * from './internal/spaces/index.ts';\nexport * from './internal/space-export/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/storage/index.ts';\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/system/index.ts';\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Hook from '@dxos/effect/Hook';\n\nimport { type WorkerSession } from './worker-runtime.ts';\n\n/** A tab session has closed, whether by the tab, the client, or its liveness lock releasing. */\nexport const SessionClosed = Hook.make<{ session: WorkerSession }>()('client-services/worker/SessionClosed');\n","//\n// Copyright 2022 DXOS.org\n//\n\nimport * as Cause from 'effect/Cause';\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport * as Fiber from 'effect/Fiber';\nimport * as Layer from 'effect/Layer';\nimport * as Reactivity from 'effect/reactivity/Reactivity';\nimport type * as RpcClient from 'effect/rpc/RpcClient';\nimport * as RpcServer from 'effect/rpc/RpcServer';\nimport * as Scope from 'effect/Scope';\nimport type * as SqlClient from 'effect/sql/SqlClient';\n\nimport { Trigger } from '@dxos/async';\nimport { PROXY_CONNECTION_TIMEOUT, makeRtcServiceClientOverProtocol } from '@dxos/client-protocol';\nimport { LayerStack } from '@dxos/compute-runtime';\nimport { type Config, ConfigService } from '@dxos/config';\nimport * as Hook from '@dxos/effect/Hook';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { MemorySignalManager, MemorySignalManagerContext, setIdentityTags } from '@dxos/messaging';\nimport { RtcTransportProxyFactory } from '@dxos/network-manager';\nimport { WorkerRuntimeStartError, makeInProcessClient } from '@dxos/protocols';\nimport { DevicesService, IdentityService, type RTCService } from '@dxos/protocols/rpc';\nimport { RpcRouter } from '@dxos/rpc';\nimport * as SqlExport from '@dxos/sql-sqlite/SqlExport';\nimport * as SqliteClient from '@dxos/sql-sqlite/SqliteClient';\n\nimport * as Events from '../../Events.ts';\nimport * as SqliteStorage from '../../SqliteStorage.ts';\nimport { enableNetworking, layerClientServices } from '../services/index.ts';\nimport { SessionClosed } from './events.ts';\n\n// Session transports are effect-rpc protocol layers handed over by the worker framework: appProtocol\n// serves the client services; systemProtocol carries the reverse-direction\n// RTCService (worker→tab).\nexport type CreateSessionProps = {\n /** Forward-direction (tab→worker) protocol over which the worker serves the client services. */\n appProtocol: RpcServer.Protocol['Service'];\n /** Reverse-direction (worker→tab) protocol serving the tab's WebRTC `RTCService`; the worker is the client. */\n systemProtocol: RpcClient.Protocol['Service'];\n};\n\n/** A tab connection within the worker; it lives as long as the scope `createSession` ran in. */\nexport interface WorkerSession {\n /** The tab's WebRTC service, which the worker's network stack proxies through. */\n readonly rtcService: RTCService.Client;\n}\n\n/**\n * Grace period between \"worker booted\" and the first edge dial. wa-sqlite runs in-process on this\n * thread, so the dial, its auth-header request, and the replication behind it contend with the boot\n * RPCs the tab is waiting on — on a document-heavy profile the session handshake loses that race and\n * the client reports a connect timeout. Yielding lets the queued handshake drain first; replication\n * then proceeds behind a live session. The stack exposes the capability; the embedder decides the timing.\n */\nconst EDGE_NETWORKING_START_DELAY = '300 millis';\n\nexport type WorkerRuntimeOptions = {\n configProvider: Effect.Effect<Config>;\n /** The runtime wants to terminate (its last session closed, or a reset finished); the embedder closes its scope. */\n requestShutdown?: Effect.Effect<void>;\n /**\n * @default true\n */\n automaticallyConnectWebrtc?: boolean;\n\n /**\n * Optional SQLite layer for Effect. Defaults to LocalSqliteOpfsLayer.\n * For testing in Node.js, use `layerMemory` from `@dxos/sql-sqlite/Platform`.\n */\n sqliteLayer?: Layer.Layer<SqlClient.SqlClient | SqlExport.SqlExport, unknown>;\n\n /**\n * Shared context for the in-memory signal manager used when edge signaling is off; tests pass one\n * so several runtimes can see each other.\n */\n memorySignalManagerContext?: MemorySignalManagerContext;\n};\n\n/**\n * Effect service surface for the dedicated-worker runtime.\n *\n * Manages connections from proxies (in tabs): tabs make requests to the client services stack, and\n * provide a WebRTC gateway. The runtime lives as long as the scope it was made in.\n */\nexport interface WorkerRuntimeService {\n /** The running stack; resolve a tag through it to reach a component or RPC handler. */\n readonly stack: () => LayerStack.LayerStack;\n /** Open a tab session over the supplied effect-rpc protocols for the life of the scope, registered for WebRTC bridging. */\n readonly createSession: (props: CreateSessionProps) => Effect.Effect<WorkerSession, never, Scope.Scope>;\n /** Route WebRTC through the given session (or disconnect when `undefined`). */\n readonly connectWebrtc: (session: WorkerSession | undefined) => Effect.Effect<void>;\n}\n\n/**\n * Context tag for the dedicated-worker runtime service. Provided by {@link layerWorkerRuntime}.\n */\nexport class WorkerRuntime extends Context.Service<WorkerRuntime, WorkerRuntimeService>()(\n '@dxos/client-services/WorkerRuntime',\n) {}\n\n/**\n * Builds and opens the worker runtime: {@link layerClientServices} over the worker's SQLite layer.\n * A startup error rejects the readiness gate, closes the stack and fails the effect, so the worker\n * reports it instead of advertising `ready`. Closing the scope tears everything down.\n */\nexport const makeWorkerRuntime = ({\n configProvider,\n requestShutdown = Effect.void,\n automaticallyConnectWebrtc = true,\n sqliteLayer,\n memorySignalManagerContext,\n}: WorkerRuntimeOptions): Effect.Effect<WorkerRuntimeService, WorkerRuntimeStartError, Scope.Scope> =>\n Effect.gen(function* () {\n // Held so effects that outlive this construction — a session finalizer, which the framework runs\n // when it closes a session scope — still reach the controller.\n const controller = yield* Hook.Controller;\n const transportFactory = new RtcTransportProxyFactory();\n const ready = new Trigger<Error | undefined>();\n const sessions = new Set<WorkerSession>();\n const signalMetadataTags: any = {\n runtime: 'worker-runtime',\n origin: typeof location !== 'undefined' ? location.origin : 'unknown',\n };\n const scope = yield* Effect.scope;\n\n let sessionForNetworking: WorkerSession | undefined;\n /** Owns the built stack; a reset closes it early, otherwise it closes with the runtime scope. */\n const stackScope = yield* Scope.fork(scope);\n let stack: LayerStack.LayerStack | undefined;\n\n if (sqliteLayer) {\n log.warn('Using testing SQLite layer');\n }\n\n const sqlite = (sqliteLayer ?? LocalSqliteOpfsLayer).pipe(Layer.provideMerge(Reactivity.layer), Layer.orDie);\n\n const closeStack = Effect.gen(function* () {\n stack = undefined;\n yield* Scope.close(stackScope, Exit.void);\n });\n\n const connectRtc = (session: WorkerSession | undefined): void => {\n sessionForNetworking = session;\n transportFactory.setRtcService(session?.rtcService);\n };\n\n // Selects one of the existing sessions for WebRTC networking.\n const reconnectWebrtc = Effect.sync(() => {\n log('reconnecting webrtc...');\n // Drop the current session if it has since closed.\n if (sessionForNetworking && !sessions.has(sessionForNetworking)) {\n sessionForNetworking = undefined;\n }\n if (!sessionForNetworking) {\n connectRtc(Array.from(sessions).find((session) => session.rtcService));\n }\n });\n\n // The runtime's own subscriptions: the reset chain and session bookkeeping.\n yield* Hook.on(Events.Closing, () => closeStack);\n /** Wipes persisted storage over a SQLite layer of its own, since the stack's is gone by the time a reset gets here. */\n yield* Hook.on(Events.WipingStorage, () =>\n SqliteStorage.wipeSqliteStorage.pipe(Effect.provide(sqlite), Effect.orDie),\n );\n yield* Hook.on(Events.Reset, () => requestShutdown);\n // The tabs hold every change this process has not saved, and reconnect to a replacement with them.\n yield* Hook.on(Events.StorageStuck, () => requestShutdown);\n yield* Hook.on(\n SessionClosed,\n Effect.fn('WorkerRuntime.onSessionClosed')(function* ({ session }) {\n sessions.delete(session);\n if (sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n yield* requestShutdown;\n } else if (automaticallyConnectWebrtc) {\n yield* reconnectWebrtc;\n }\n }),\n );\n\n yield* Effect.gen(function* () {\n log('starting...');\n const config = yield* configProvider;\n const observabilityGroup = config.get('runtime.client.observabilityGroup');\n if (observabilityGroup) {\n signalMetadataTags.group = observabilityGroup;\n }\n\n log('worker-runtime: building client services stack');\n // Building the layer also builds its eager specs, so the rpc registrations are in place before\n // the events below run.\n const stackContext = yield* Layer.build(\n layerClientServices({\n // The dial is driven below once boot has drained, not on stack open.\n autoConnect: false,\n // Auto-activate spaces that were previously active after leader changeover.\n runtimeProps: { autoActivateSpaces: true },\n // Edge signaling is created by the platform layer from the edge connection; otherwise fall\n // back to an in-memory manager (KUBE `WebsocketSignalManager` removed).\n signalManager: config.get('runtime.client.edgeFeatures')?.signaling\n ? undefined\n : new MemorySignalManager(memorySignalManagerContext ?? new MemorySignalManagerContext()),\n transportFactory,\n }).pipe(\n Layer.provide(sqlite),\n Layer.provide(Layer.succeed(ConfigService, config)),\n Layer.provide(Layer.succeed(Hook.Controller, controller)),\n ),\n ).pipe(Scope.provide(stackScope));\n const built = Context.get(stackContext, LayerStack.Service);\n stack = built;\n log('worker-runtime: stack built, opening');\n // `StackOpened` resolves once every handler the cascade triggered has run.\n yield* Effect.gen(function* () {\n yield* Hook.emit(Events.Opening, undefined);\n yield* Hook.emit(Events.StackOpened, undefined);\n }).pipe(Effect.provideService(Hook.Controller, controller));\n log('worker-runtime: stack opened, signalling ready');\n ready.wake(undefined);\n log('started');\n\n // Bridge the identity/devices Handlers to the effect-rpc client surface in-process.\n const [identityService, devicesService] = yield* Effect.all([\n makeInProcessClient(\n IdentityService.Rpcs,\n yield* built.getServiceResolver().resolve(IdentityService.Tag, {}).pipe(Scope.provide(stackScope)),\n ),\n makeInProcessClient(\n DevicesService.Rpcs,\n yield* built.getServiceResolver().resolve(DevicesService.Tag, {}).pipe(Scope.provide(stackScope)),\n ),\n ]);\n setIdentityTags({\n identityService,\n devicesService,\n setTag: (key: string, value: string) => {\n signalMetadataTags[key] = value;\n },\n });\n\n // Boot is done: outbound traffic can no longer starve the session handshake the tab is\n // waiting on. Anchored here rather than in the stack so the gate opens only after the whole\n // worker start sequence has drained, not just the stack open. The grace period yields the\n // thread so any RPC already queued behind this turn is served before the dial and its\n // auth-header request start competing for it.\n log.info('worker-runtime: boot complete, scheduling networking start', {\n delay: EDGE_NETWORKING_START_DELAY,\n });\n const networkingFiber = yield* Effect.forkDetach(\n Effect.gen(function* () {\n yield* Effect.sleep(EDGE_NETWORKING_START_DELAY);\n log('worker-runtime: starting networking');\n yield* enableNetworking;\n }).pipe(Effect.provideService(Hook.Controller, controller)),\n );\n yield* Effect.addFinalizer(() => Fiber.interrupt(networkingFiber));\n }).pipe(\n Effect.catchCause((cause) =>\n Effect.gen(function* () {\n const squashed = Cause.squash(cause);\n const error = new WorkerRuntimeStartError({\n message: squashed instanceof Error ? squashed.message : String(squashed),\n cause: squashed,\n });\n ready.wake(error);\n log.error('starting', error);\n yield* closeStack;\n return yield* Effect.fail(error);\n }),\n ),\n );\n\n const createSession = ({\n appProtocol,\n systemProtocol,\n }: CreateSessionProps): Effect.Effect<WorkerSession, never, Scope.Scope> =>\n Effect.gen(function* () {\n log('opening session...');\n const rtcService = yield* makeRtcServiceClientOverProtocol(systemProtocol);\n\n // Serve once the runtime is ready; the handlers come from the stack's tags.\n const error = yield* Effect.promise(() => ready.wait({ timeout: PROXY_CONNECTION_TIMEOUT }));\n if (error || !stack) {\n return yield* Effect.die(error ?? new Error('worker runtime stack is not available'));\n }\n // Every service registered itself with the stack's router; the session only attaches its\n // transport, so adding a service never touches this code.\n const router = yield* stack\n .getServiceResolver()\n .resolve(RpcRouter.RpcRouter, {})\n .pipe(Effect.orDie, Effect.scoped);\n yield* Layer.build(\n RpcRouter.layerTransport.pipe(\n Layer.provide(Layer.succeed(RpcServer.Protocol, appProtocol)),\n Layer.provide(Layer.succeed(RpcRouter.RpcRouter, router)),\n ),\n );\n\n const session: WorkerSession = { rtcService };\n sessions.add(session);\n yield* Effect.addFinalizer(() =>\n Hook.emit(SessionClosed, { session }).pipe(\n Effect.provideService(Hook.Controller, controller),\n // A subscriber failing must not keep the transport open.\n Effect.catchCause((cause) => Effect.sync(() => log.catch(cause))),\n ),\n );\n\n if (automaticallyConnectWebrtc) {\n yield* reconnectWebrtc;\n }\n\n log('session opened');\n return session;\n });\n\n return {\n stack: () => {\n invariant(stack, 'worker runtime not started');\n return stack;\n },\n createSession,\n connectWebrtc: (session) => Effect.sync(() => connectRtc(session)),\n } satisfies WorkerRuntimeService;\n }).pipe(Effect.provide(Hook.controllerLayer));\n\n/**\n * Layer providing the {@link WorkerRuntime} service; the runtime lives as long as the layer.\n */\nexport const layerWorkerRuntime = (\n options: WorkerRuntimeOptions,\n): Layer.Layer<WorkerRuntime, WorkerRuntimeStartError> => Layer.effect(WorkerRuntime, makeWorkerRuntime(options));\n\nconst DB_NAME = 'DXOS';\n\n/**\n * SqlExport layer that wraps SqliteClient to provide export functionality.\n */\nconst SqlExportLayer: Layer.Layer<SqlExport.SqlExport, never, SqliteClient.SqliteClient> = Layer.effect(\n SqlExport.SqlExport,\n Effect.gen(function* () {\n const sql = yield* SqliteClient.SqliteClient;\n return {\n export: sql.export,\n } satisfies SqlExport.Service;\n }),\n);\n\n/**\n * Local SQLite layer for the worker.\n * Uses in-process OPFS via {@link SqliteClient.layerOpfs} (no MessagePort).\n * NOTE: Only usable within a worker.\n */\nconst LocalSqliteOpfsLayer = SqlExportLayer.pipe(\n Layer.provideMerge(SqliteClient.layerOpfs({ dbName: DB_NAME })),\n Layer.provideMerge(Reactivity.layer),\n);\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nexport * from './internal/worker/index.ts';\n"],"mappings":"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"}
|
package/dist/lib/testing.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { $t as InvitationsManager, Ar as LifecycleService, Cr as Opening, Dr as WipingStorage, En as EdgeIdentityRecoveryManagerService, Jn as SpaceManagerService, Kn as SpaceManager, Kt as DataSpaceManager, Or as ManagerService$2, Qn as SpaceProtocol, Tr as StackOpened, Xn as MOCK_AUTH_PROVIDER, Zn as MOCK_AUTH_VERIFIER, _r as StackReadinessService, an as InvitationsHandlerService, ar as SqliteMetadataStore, br as EdgeAgentManagerService, cn as SpaceInvitationProtocol, cr as MetadataStore, fr as ManagerService$1, jr as ManagerService, n as layerClientServices, rn as InvitationsHandler, rr as valueEncoding, sr as IMetadataStoreService, xn as wipeSqliteStorage, xr as Closing, yn as SqliteStorage } from "./chunk-client-services-stack.mjs";
|
|
2
2
|
import { create } from "@bufbuild/protobuf";
|
|
3
3
|
import * as EffectContext from "effect/Context";
|
|
4
4
|
import * as Effect from "effect/Effect";
|