@dxos/client-services 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6
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/browser/{chunk-J33W6T4Q.mjs → chunk-5A3KX2RY.mjs} +1745 -1208
- package/dist/lib/browser/chunk-5A3KX2RY.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +33 -16
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +14 -7
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/{chunk-34HKLADW.mjs → chunk-FNPO5UMU.mjs} +1745 -1208
- package/dist/lib/node-esm/chunk-FNPO5UMU.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +33 -16
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +14 -7
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/packlets/agents/edge-agent-manager.d.ts +3 -2
- package/dist/types/src/packlets/agents/edge-agent-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-manager.d.ts +3 -3
- package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts +5 -4
- package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-service.d.ts +1 -6
- package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity.d.ts +6 -9
- package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts +3 -3
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/logging/logging-service.d.ts +4 -0
- package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
- package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
- package/dist/types/src/packlets/services/feed-syncer.d.ts +59 -0
- package/dist/types/src/packlets/services/feed-syncer.d.ts.map +1 -0
- package/dist/types/src/packlets/services/feed-syncer.test.d.ts +2 -0
- package/dist/types/src/packlets/services/feed-syncer.test.d.ts.map +1 -0
- package/dist/types/src/packlets/services/platform.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts +3 -4
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/space-export/space-archive-reader.d.ts +9 -1
- package/dist/types/src/packlets/space-export/space-archive-reader.d.ts.map +1 -1
- package/dist/types/src/packlets/space-export/space-archive-writer.d.ts +6 -0
- package/dist/types/src/packlets/space-export/space-archive-writer.d.ts.map +1 -1
- package/dist/types/src/packlets/space-export/space-archive.test.d.ts +2 -0
- package/dist/types/src/packlets/space-export/space-archive.test.d.ts.map +1 -0
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts +17 -10
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts +22 -6
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/genesis.d.ts +2 -1
- package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +2 -2
- package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
- package/dist/types/src/packlets/worker/worker-runtime.d.ts +11 -3
- package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/dist/types/src/version.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +43 -43
- package/src/index.ts +1 -0
- package/src/packlets/agents/edge-agent-manager.ts +8 -5
- package/src/packlets/agents/edge-agent-service.ts +2 -2
- package/src/packlets/identity/identity-manager.test.ts +5 -5
- package/src/packlets/identity/identity-manager.ts +16 -13
- package/src/packlets/identity/identity-recovery-manager.ts +20 -16
- package/src/packlets/identity/identity-service.test.ts +6 -26
- package/src/packlets/identity/identity-service.ts +5 -76
- package/src/packlets/identity/identity.test.ts +2 -2
- package/src/packlets/identity/identity.ts +7 -29
- package/src/packlets/invitations/edge-invitation-handler.ts +4 -3
- package/src/packlets/invitations/invitations-handler.test.ts +4 -4
- package/src/packlets/invitations/invitations-handler.ts +3 -3
- package/src/packlets/invitations/invitations-manager.ts +37 -14
- package/src/packlets/invitations/invitations-service.ts +4 -4
- package/src/packlets/invitations/space-invitation-protocol.test.ts +17 -16
- package/src/packlets/invitations/space-invitation-protocol.ts +3 -1
- package/src/packlets/logging/logging-service.ts +4 -0
- package/src/packlets/network/network-service.ts +5 -4
- package/src/packlets/services/feed-syncer.test.ts +340 -0
- package/src/packlets/services/feed-syncer.ts +337 -0
- package/src/packlets/services/platform.ts +7 -1
- package/src/packlets/services/service-context.test.ts +3 -2
- package/src/packlets/services/service-context.ts +106 -31
- package/src/packlets/services/service-host.test.ts +8 -7
- package/src/packlets/services/service-host.ts +9 -7
- package/src/packlets/space-export/space-archive-reader.ts +64 -3
- package/src/packlets/space-export/space-archive-writer.ts +36 -1
- package/src/packlets/space-export/space-archive.test.ts +287 -0
- package/src/packlets/spaces/data-space-manager.test.ts +79 -13
- package/src/packlets/spaces/data-space-manager.ts +71 -103
- package/src/packlets/spaces/data-space.ts +46 -23
- package/src/packlets/spaces/edge-feed-replicator.test.ts +1 -1
- package/src/packlets/spaces/edge-feed-replicator.ts +8 -7
- package/src/packlets/spaces/epoch-migrations.ts +3 -3
- package/src/packlets/spaces/genesis.ts +6 -1
- package/src/packlets/spaces/notarization-plugin.ts +2 -1
- package/src/packlets/spaces/spaces-service.test.ts +9 -6
- package/src/packlets/spaces/spaces-service.ts +30 -8
- package/src/packlets/testing/invitation-utils.ts +3 -2
- package/src/packlets/worker/worker-runtime.ts +14 -6
- package/src/packlets/worker/worker-session.ts +4 -4
- package/src/version.ts +1 -1
- package/dist/lib/browser/chunk-J33W6T4Q.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-34HKLADW.mjs.map +0 -7
- package/dist/types/src/packlets/identity/default-space-state-machine.d.ts +0 -19
- package/dist/types/src/packlets/identity/default-space-state-machine.d.ts.map +0 -1
- package/src/packlets/identity/default-space-state-machine.ts +0 -44
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
InvitationsServiceImpl,
|
|
19
19
|
ServiceContext,
|
|
20
20
|
ServiceRegistry,
|
|
21
|
+
SpaceArchiveWriter,
|
|
21
22
|
SpaceInvitationProtocol,
|
|
22
23
|
SpacesServiceImpl,
|
|
23
24
|
TrustedKeySetAuthVerifier,
|
|
@@ -27,6 +28,7 @@ import {
|
|
|
27
28
|
createLevel,
|
|
28
29
|
createStorageObjects,
|
|
29
30
|
diagnostics_exports,
|
|
31
|
+
extractSpaceArchive,
|
|
30
32
|
getNetworkPeers,
|
|
31
33
|
locks_exports,
|
|
32
34
|
subscribeToFeedBlocks,
|
|
@@ -36,7 +38,7 @@ import {
|
|
|
36
38
|
subscribeToSignal,
|
|
37
39
|
subscribeToSpaces,
|
|
38
40
|
subscribeToSwarmInfo
|
|
39
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-FNPO5UMU.mjs";
|
|
40
42
|
import "./chunk-PKEGMOQ4.mjs";
|
|
41
43
|
import {
|
|
42
44
|
__export,
|
|
@@ -65,6 +67,7 @@ __export(index_exports, {
|
|
|
65
67
|
InvitationsServiceImpl: () => InvitationsServiceImpl,
|
|
66
68
|
ServiceContext: () => ServiceContext,
|
|
67
69
|
ServiceRegistry: () => ServiceRegistry,
|
|
70
|
+
SpaceArchiveWriter: () => SpaceArchiveWriter,
|
|
68
71
|
SpaceInvitationProtocol: () => SpaceInvitationProtocol,
|
|
69
72
|
SpacesServiceImpl: () => SpacesServiceImpl,
|
|
70
73
|
TrustedKeySetAuthVerifier: () => TrustedKeySetAuthVerifier,
|
|
@@ -78,6 +81,7 @@ __export(index_exports, {
|
|
|
78
81
|
decodeProfileArchive: () => decodeProfileArchive,
|
|
79
82
|
encodeProfileArchive: () => encodeProfileArchive,
|
|
80
83
|
exportProfileData: () => exportProfileData,
|
|
84
|
+
extractSpaceArchive: () => extractSpaceArchive,
|
|
81
85
|
getNetworkPeers: () => getNetworkPeers,
|
|
82
86
|
importProfileData: () => importProfileData,
|
|
83
87
|
subscribeToFeedBlocks: () => subscribeToFeedBlocks,
|
|
@@ -450,7 +454,7 @@ var WorkerSession = class {
|
|
|
450
454
|
this.bridgeService = this._iframeRpc.rpc.BridgeService;
|
|
451
455
|
}
|
|
452
456
|
async open() {
|
|
453
|
-
log2
|
|
457
|
+
log2("opening...", void 0, {
|
|
454
458
|
F: __dxlog_file2,
|
|
455
459
|
L: 122,
|
|
456
460
|
S: this,
|
|
@@ -467,7 +471,7 @@ var WorkerSession = class {
|
|
|
467
471
|
if (this.lockKey) {
|
|
468
472
|
void this._afterLockReleases(this.lockKey, () => this.close());
|
|
469
473
|
}
|
|
470
|
-
log2
|
|
474
|
+
log2("opened", void 0, {
|
|
471
475
|
F: __dxlog_file2,
|
|
472
476
|
L: 133,
|
|
473
477
|
S: this,
|
|
@@ -475,7 +479,7 @@ var WorkerSession = class {
|
|
|
475
479
|
});
|
|
476
480
|
}
|
|
477
481
|
async close() {
|
|
478
|
-
log2.
|
|
482
|
+
log2.debug("closing...", void 0, {
|
|
479
483
|
F: __dxlog_file2,
|
|
480
484
|
L: 137,
|
|
481
485
|
S: this,
|
|
@@ -495,7 +499,7 @@ var WorkerSession = class {
|
|
|
495
499
|
this._clientRpc.close(),
|
|
496
500
|
this._iframeRpc.close()
|
|
497
501
|
]);
|
|
498
|
-
log2.
|
|
502
|
+
log2.debug("closed", void 0, {
|
|
499
503
|
F: __dxlog_file2,
|
|
500
504
|
L: 145,
|
|
501
505
|
S: this,
|
|
@@ -548,20 +552,27 @@ var WorkerRuntime = class {
|
|
|
548
552
|
};
|
|
549
553
|
_signalTelemetryEnabled = false;
|
|
550
554
|
_runtime;
|
|
551
|
-
constructor({ channel = DEFAULT_WORKER_BROADCAST_CHANNEL, configProvider, acquireLock, releaseLock, onStop, automaticallyConnectWebrtc = true,
|
|
555
|
+
constructor({ channel = DEFAULT_WORKER_BROADCAST_CHANNEL, configProvider, acquireLock, releaseLock, onStop, automaticallyConnectWebrtc = true, sqliteLayer }) {
|
|
552
556
|
this._configProvider = configProvider;
|
|
553
557
|
this._acquireLock = acquireLock;
|
|
554
558
|
this._releaseLock = releaseLock;
|
|
555
559
|
this._onStop = onStop;
|
|
556
560
|
this._channel = channel;
|
|
557
|
-
|
|
561
|
+
if (sqliteLayer) {
|
|
562
|
+
log3.warn("Using testing SQLite layer", void 0, {
|
|
563
|
+
F: __dxlog_file3,
|
|
564
|
+
L: 103,
|
|
565
|
+
S: this,
|
|
566
|
+
C: (f, a) => f(...a)
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
this._runtime = ManagedRuntime.make(SqlTransaction.layer.pipe(Layer.provideMerge(sqliteLayer ?? LocalSqliteOpfsLayer), Layer.provideMerge(Reactivity.layer)).pipe(Layer.orDie));
|
|
558
570
|
this._clientServices = new ClientServicesHost({
|
|
559
571
|
callbacks: {
|
|
560
572
|
onReset: async () => this.stop()
|
|
561
573
|
},
|
|
562
574
|
runtime: this._runtime.runtimeEffect,
|
|
563
575
|
runtimeProps: {
|
|
564
|
-
enableSqlite,
|
|
565
576
|
// Auto-activate spaces that were previously active after leader changeover.
|
|
566
577
|
autoActivateSpaces: true
|
|
567
578
|
}
|
|
@@ -577,7 +588,7 @@ var WorkerRuntime = class {
|
|
|
577
588
|
async start() {
|
|
578
589
|
log3("starting...", void 0, {
|
|
579
590
|
F: __dxlog_file3,
|
|
580
|
-
L:
|
|
591
|
+
L: 132,
|
|
581
592
|
S: this,
|
|
582
593
|
C: (f, a) => f(...a)
|
|
583
594
|
});
|
|
@@ -602,12 +613,12 @@ var WorkerRuntime = class {
|
|
|
602
613
|
});
|
|
603
614
|
await this._clientServices.open(new Context(void 0, {
|
|
604
615
|
F: __dxlog_file3,
|
|
605
|
-
L:
|
|
616
|
+
L: 158
|
|
606
617
|
}));
|
|
607
618
|
this._ready.wake(void 0);
|
|
608
619
|
log3("started", void 0, {
|
|
609
620
|
F: __dxlog_file3,
|
|
610
|
-
L:
|
|
621
|
+
L: 160,
|
|
611
622
|
S: this,
|
|
612
623
|
C: (f, a) => f(...a)
|
|
613
624
|
});
|
|
@@ -622,7 +633,7 @@ var WorkerRuntime = class {
|
|
|
622
633
|
this._ready.wake(err);
|
|
623
634
|
log3.error("starting", err, {
|
|
624
635
|
F: __dxlog_file3,
|
|
625
|
-
L:
|
|
636
|
+
L: 170,
|
|
626
637
|
S: this,
|
|
627
638
|
C: (f, a) => f(...a)
|
|
628
639
|
});
|
|
@@ -632,7 +643,10 @@ var WorkerRuntime = class {
|
|
|
632
643
|
this._releaseLock();
|
|
633
644
|
this._broadcastChannel?.close();
|
|
634
645
|
this._broadcastChannel = void 0;
|
|
635
|
-
await this._clientServices.close(
|
|
646
|
+
await this._clientServices.close(Context.default(void 0, {
|
|
647
|
+
F: __dxlog_file3,
|
|
648
|
+
L: 179
|
|
649
|
+
}));
|
|
636
650
|
await this._runtime.dispose();
|
|
637
651
|
await this._onStop?.();
|
|
638
652
|
await this._livenessLock.release();
|
|
@@ -640,7 +654,7 @@ var WorkerRuntime = class {
|
|
|
640
654
|
/**
|
|
641
655
|
* Create a new session.
|
|
642
656
|
*/
|
|
643
|
-
async createSession({ appPort, systemPort, shellPort }) {
|
|
657
|
+
async createSession({ appPort, systemPort, shellPort, onClose }) {
|
|
644
658
|
const session = new WorkerSession({
|
|
645
659
|
serviceHost: this._clientServices,
|
|
646
660
|
appPort,
|
|
@@ -657,11 +671,12 @@ var WorkerRuntime = class {
|
|
|
657
671
|
this._reconnectWebrtc();
|
|
658
672
|
}
|
|
659
673
|
}
|
|
674
|
+
await onClose?.();
|
|
660
675
|
});
|
|
661
676
|
await session.open();
|
|
662
677
|
invariant3(!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin, `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`, {
|
|
663
678
|
F: __dxlog_file3,
|
|
664
|
-
L:
|
|
679
|
+
L: 213,
|
|
665
680
|
S: this,
|
|
666
681
|
A: [
|
|
667
682
|
"!this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin",
|
|
@@ -697,7 +712,7 @@ var WorkerRuntime = class {
|
|
|
697
712
|
_reconnectWebrtc() {
|
|
698
713
|
log3("reconnecting webrtc...", void 0, {
|
|
699
714
|
F: __dxlog_file3,
|
|
700
|
-
L:
|
|
715
|
+
L: 248,
|
|
701
716
|
S: this,
|
|
702
717
|
C: (f, a) => f(...a)
|
|
703
718
|
});
|
|
@@ -780,6 +795,7 @@ export {
|
|
|
780
795
|
InvitationsServiceImpl,
|
|
781
796
|
ServiceContext,
|
|
782
797
|
ServiceRegistry,
|
|
798
|
+
SpaceArchiveWriter,
|
|
783
799
|
SpaceInvitationProtocol,
|
|
784
800
|
SpacesServiceImpl,
|
|
785
801
|
TrustedKeySetAuthVerifier,
|
|
@@ -793,6 +809,7 @@ export {
|
|
|
793
809
|
decodeProfileArchive,
|
|
794
810
|
encodeProfileArchive,
|
|
795
811
|
exportProfileData,
|
|
812
|
+
extractSpaceArchive,
|
|
796
813
|
getNetworkPeers,
|
|
797
814
|
importProfileData,
|
|
798
815
|
subscribeToFeedBlocks,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/index.ts", "../../../src/packlets/services/client-rpc-server.ts", "../../../src/packlets/storage/profile-archive.ts", "../../../src/packlets/worker/worker-runtime.ts", "../../../src/packlets/worker/worker-session.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from './packlets/devtools';\nexport * from './packlets/diagnostics';\nexport * from './packlets/identity';\nexport * from './packlets/invitations';\nexport * from './packlets/locks';\nexport * from './packlets/services';\nexport * from './packlets/spaces';\nexport * from './packlets/storage';\nexport * from './packlets/worker';\nexport * from './packlets/agents';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ClientServices } from '@dxos/client-protocol';\nimport { type Any, type ServiceHandler, Stream } from '@dxos/codec-protobuf';\nimport { raise } from '@dxos/debug';\nimport { RpcPeer, type RpcPeerOptions, type ServiceBundle, parseMethodName } from '@dxos/rpc';\nimport { MapCounter, trace } from '@dxos/tracing';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { type ServiceRegistry } from './service-registry';\n\nexport type ClientRpcServerProps = {\n serviceRegistry: ServiceRegistry<ClientServices>;\n handleCall?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => MaybePromise<Any>,\n ) => Promise<Any>;\n handleStream?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => Stream<Any>,\n ) => MaybePromise<Stream<Any>>;\n} & Omit<RpcPeerOptions, 'callHandler' | 'streamHandler'>;\n\n@trace.resource()\nexport class ClientRpcServer {\n private readonly _serviceRegistry: ServiceRegistry<ClientServices>;\n private readonly _rpcPeer: RpcPeer;\n private readonly _handlerCache = new Map<string, ServiceHandler<any>>();\n private readonly _handleCall: ClientRpcServerProps['handleCall'];\n private readonly _handleStream: ClientRpcServerProps['handleStream'];\n\n @trace.metricsCounter()\n private readonly _callMetrics = new MapCounter();\n\n @trace.info()\n private get _services() {\n return Object.keys(this._serviceRegistry.services);\n }\n\n constructor(params: ClientRpcServerProps) {\n const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;\n this._handleCall = handleCall;\n this._handleStream = handleStream;\n\n this._serviceRegistry = serviceRegistry;\n this._rpcPeer = new RpcPeer({\n ...rpcOptions,\n callHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) => this._getServiceHandler(serviceName).call(method, params);\n\n this._callMetrics.inc(`${serviceName}.${methodName} request`);\n\n if (this._handleCall) {\n return this._handleCall(methodName, params, handler);\n } else {\n return handler(methodName, params);\n }\n },\n streamHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) =>\n this._getServiceHandler(serviceName).callStream(method, params);\n\n this._callMetrics.inc(`${serviceName}.${methodName} request stream`);\n\n if (this._handleStream) {\n return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params, handler)), (data) => {\n this._callMetrics.inc(`${serviceName}.${methodName} response stream`);\n return data;\n });\n } else {\n return handler(methodName, params);\n }\n },\n });\n }\n\n async open(): Promise<void> {\n await this._rpcPeer.open();\n }\n\n async close(): Promise<void> {\n await this._rpcPeer.close();\n }\n\n private _getServiceHandler(serviceName: string) {\n if (!this._handlerCache.has(serviceName)) {\n const [key, descriptor] =\n Object.entries(this._serviceRegistry.descriptors as ServiceBundle<Record<string, any>>).find(\n ([key, descriptor]) => descriptor.name === serviceName,\n ) ?? raise(new Error(`Service not available: ${serviceName}`));\n\n const service = this._serviceRegistry.services[key as keyof ClientServices] as any;\n if (!service) {\n throw new Error(`Service not available: ${serviceName}`);\n }\n\n this._handlerCache.set(serviceName, descriptor.createServer(service));\n }\n\n return this._handlerCache.get(serviceName)!;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { cbor } from '@automerge/automerge-repo';\n\nimport { invariant } from '@dxos/invariant';\nimport type { LevelDB } from '@dxos/kv-store';\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 ({\n storage,\n level,\n}: {\n storage: Storage;\n level: LevelDB;\n}): Promise<ProfileArchive> => {\n const archive: ProfileArchive = { storage: [], meta: { timestamp: new Date().toISOString() } };\n\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\n {\n log.info('begin exporting kv pairs');\n const iter = await level.iterator<Uint8Array, Uint8Array>({ keyEncoding: 'binary', valueEncoding: 'binary' });\n let count = 0;\n for await (const [key, value] of iter) {\n archive.storage.push({\n type: ProfileArchiveEntryType.KEY_VALUE,\n key,\n value,\n });\n count++;\n }\n log.info('done exporting kv pairs', { count });\n }\n\n return archive;\n};\n\nexport const importProfileData = async (\n {\n storage,\n level,\n }: {\n storage: Storage;\n level: LevelDB;\n },\n archive: ProfileArchive,\n): Promise<void> => {\n let batch = level.batch();\n\n let count = 0;\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 invariant(entry.key instanceof Uint8Array, 'Invalid key type');\n invariant(entry.value instanceof Uint8Array, 'Invalid value type');\n batch.put(entry.key, entry.value, { keyEncoding: 'binary', valueEncoding: 'binary' });\n break;\n }\n default:\n throw new Error(`Invalid entry type: ${entry.type}`);\n }\n\n if (++count % 1000 === 0) {\n // Apparently indexedDB can't handle big batches.\n await batch.write();\n batch = level.batch();\n\n log.info('importing', {\n count,\n total: archive.storage.length,\n progress: `${((count / archive.storage.length) * 100).toFixed()}%`,\n });\n }\n }\n\n log.info('committing changes..');\n await batch.write();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport * as Reactivity from '@effect/experimental/Reactivity';\nimport type * as SqlClient from '@effect/sql/SqlClient';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { Trigger } from '@dxos/async';\nimport { DEFAULT_WORKER_BROADCAST_CHANNEL } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport {\n MemorySignalManager,\n MemorySignalManagerContext,\n WebsocketSignalManager,\n setIdentityTags,\n} from '@dxos/messaging';\nimport { RtcTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport * as OpfsWorker from '@dxos/sql-sqlite/OpfsWorker';\nimport * as SqlExport from '@dxos/sql-sqlite/SqlExport';\nimport * as SqliteClient from '@dxos/sql-sqlite/SqliteClient';\nimport * as SqlTransaction from '@dxos/sql-sqlite/SqlTransaction';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\n\nimport { WorkerSession } from './worker-session';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionProps = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n};\n\nexport type WorkerRuntimeOptions = {\n channel?: string;\n configProvider: () => MaybePromise<Config>;\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onStop?: () => Promise<void>;\n /**\n * @default true\n */\n automaticallyConnectWebrtc?: boolean;\n\n enableSqlite?: boolean;\n};\n\n/**\n * Runtime for the shared and dedciated worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _configProvider: () => MaybePromise<Config>;\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _onStop?: () => Promise<void>;\n private readonly _transportFactory = new RtcTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private readonly _channel: string;\n private readonly _automaticallyConnectWebrtc: boolean;\n private readonly _livenessLock = new WebLockWrapper(`@dxos/client-services/WorkerRuntime/${crypto.randomUUID()}`);\n private _broadcastChannel?: BroadcastChannel;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n private _signalMetadataTags: any = { runtime: 'worker-runtime' };\n private _signalTelemetryEnabled: boolean = false;\n private _runtime!: ManagedRuntime.ManagedRuntime<\n SqlTransaction.SqlTransaction | SqlClient.SqlClient | SqlExport.SqlExport,\n never\n >;\n\n constructor({\n channel = DEFAULT_WORKER_BROADCAST_CHANNEL,\n configProvider,\n acquireLock,\n releaseLock,\n onStop,\n automaticallyConnectWebrtc = true,\n enableSqlite,\n }: WorkerRuntimeOptions) {\n this._configProvider = configProvider;\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._onStop = onStop;\n this._channel = channel;\n this._runtime = ManagedRuntime.make(\n SqlTransaction.layer\n .pipe(Layer.provideMerge(LocalSqliteOpfsLayer), Layer.provideMerge(Reactivity.layer))\n .pipe(Layer.orDie),\n );\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => this.stop(),\n },\n runtime: this._runtime.runtimeEffect,\n runtimeProps: {\n enableSqlite,\n // Auto-activate spaces that were previously active after leader changeover.\n autoActivateSpaces: true,\n },\n });\n this._automaticallyConnectWebrtc = automaticallyConnectWebrtc;\n }\n\n get host() {\n return this._clientServices;\n }\n\n get livenessLockKey(): string {\n return this._livenessLock.key;\n }\n\n async start(): Promise<void> {\n log('starting...');\n try {\n void this._livenessLock.acquire();\n\n // Steal the lock from the other worker.\n this._broadcastChannel = new BroadcastChannel(this._channel);\n this._broadcastChannel.postMessage({ action: 'stop' });\n this._broadcastChannel.onmessage = async (event) => {\n if (event.data?.action === 'stop') {\n await this.stop();\n }\n };\n\n await this._acquireLock();\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: this._config.get('runtime.client.edgeFeatures')?.signaling\n ? undefined\n : signals\n ? new WebsocketSignalManager(signals, () => (this._signalTelemetryEnabled ? this._signalMetadataTags : {}))\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(new Context());\n this._ready.wake(undefined);\n log('started');\n setIdentityTags({\n identityService: this._clientServices.services.IdentityService!,\n devicesService: this._clientServices.services.DevicesService!,\n setTag: (k: string, v: string) => {\n this._signalMetadataTags[k] = v;\n },\n });\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop(): Promise<void> {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\n this._broadcastChannel?.close();\n this._broadcastChannel = undefined;\n await this._clientServices.close();\n await this._runtime.dispose();\n await this._onStop?.();\n await this._livenessLock.release();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort }: CreateSessionProps): Promise<WorkerSession> {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n await this.stop();\n } else {\n if (this._automaticallyConnectWebrtc) {\n this._reconnectWebrtc();\n }\n }\n });\n\n await session.open();\n // A worker can only service one origin currently\n invariant(\n !this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin,\n `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`,\n );\n if (session.observabilityGroup) {\n this._signalMetadataTags.group = session.observabilityGroup;\n }\n this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;\n this._signalMetadataTags.origin = session.origin;\n this._sessions.add(session);\n\n if (this._automaticallyConnectWebrtc) {\n this._reconnectWebrtc();\n }\n\n return session;\n }\n\n /**\n * Connects the WebRTC bridge to the specified session.\n * If no session is provided, disconnects the WebRTC bridge.\n *\n * Called automatically if `automaticallyConnectWebrtc` is true.\n *\n * @param session The session to connect the WebRTC bridge to.\n */\n connectWebrtcBridge(session: WorkerSession | undefined): void {\n this._sessionForNetworking = session;\n this._transportFactory.setBridgeService(session?.bridgeService);\n }\n\n /**\n * Selects one of the existing session for WebRTC networking.\n */\n private _reconnectWebrtc(): void {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this._sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this._sessions).find((session) => session.bridgeService);\n this.connectWebrtcBridge(selected);\n }\n }\n}\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 OPFS sync API as an FS backend.\n * Does NOT spawn a new worker.\n * NOTE: Only usable within a worker.\n * TODO(mykola): This does not work right now. Fix.\n */\nconst LocalSqliteOpfsLayer = Layer.unwrapScoped(\n Effect.gen(function* () {\n const { port1: clientPort, port2: serverPort } = new MessageChannel();\n clientPort.start();\n serverPort.start();\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n clientPort.close();\n serverPort.close();\n }),\n );\n\n yield* Effect.forkScoped(OpfsWorker.run({ port: serverPort, dbName: DB_NAME }));\n return SqlExportLayer.pipe(Layer.provideMerge(SqliteClient.layer({ worker: Effect.succeed(clientPort) })));\n }),\n);\n\n// TODO(wittjosiah): Factor out to a separate module.\nclass WebLockWrapper {\n readonly #key: string;\n #release?: () => void;\n\n constructor(key: string) {\n this.#key = key;\n }\n\n get key(): string {\n return this.#key;\n }\n\n acquire(options: LockOptions = {}) {\n return navigator.locks.request(this.#key, options, async () => {\n await new Promise<void>((resolve) => {\n this.#release = resolve;\n }); // Blocks for the duration of the worker's lifetime.\n this.#release = undefined;\n });\n }\n\n release() {\n this.#release?.();\n this.#release = undefined;\n }\n\n [Symbol.dispose]() {\n this.release();\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger, asyncTimeout } from '@dxos/async';\nimport {\n type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n iframeServiceBundle,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { type ProtoRpcPeer, type RpcPort, createProtoRpcPeer } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { ClientRpcServer, type ClientRpcServerProps, type ClientServicesHost } from '../services';\n\nexport type WorkerSessionProps = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\n shellPort?: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc?: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n // TODO(nf): factor out?\n public observabilityGroup?: string;\n public signalTelemetryEnabled?: boolean;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionProps) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerProps, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this.observabilityGroup = request.observabilityGroup;\n this.signalTelemetryEnabled = request.signalTelemetryEnabled;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open(): Promise<void> {\n log.info('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log.info('opened');\n }\n\n async close(): Promise<void> {\n log.info('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.info('closed');\n }\n\n private async _maybeOpenShell(): Promise<void> {\n try {\n this._shellClientRpc && (await asyncTimeout(this._shellClientRpc.open(), 1_000));\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,0BAAc;AAGd,0BAAc;;;ACHd,SAAwCA,cAAc;AACtD,SAASC,aAAa;AACtB,SAASC,SAAkDC,uBAAuB;AAClF,SAASC,YAAYC,aAAa;;;;;;;AAoB3B,IAAMC,kBAAN,MAAMA;EACMC;EACAC;EACAC,gBAAgB,oBAAIC,IAAAA;EACpBC;EACAC;EAGAC,eAAe,IAAIC,WAAAA;EAEpC,IACYC,YAAY;AACtB,WAAOC,OAAOC,KAAK,KAAKV,iBAAiBW,QAAQ;EACnD;EAEA,YAAYC,QAA8B;AACxC,UAAM,EAAEC,iBAAiBC,YAAYC,cAAc,GAAGC,WAAAA,IAAeJ;AACrE,SAAKR,cAAcU;AACnB,SAAKT,gBAAgBU;AAErB,SAAKf,mBAAmBa;AACxB,SAAKZ,WAAW,IAAIgB,QAAQ;MAC1B,GAAGD;MACHE,aAAa,CAACC,QAAQP,YAAAA;AACpB,cAAM,CAACQ,aAAaC,UAAAA,IAAcC,gBAAgBH,MAAAA;AAClD,cAAMI,UAAU,CAACJ,SAAgBP,YAAgB,KAAKY,mBAAmBJ,WAAAA,EAAaK,KAAKN,SAAQP,OAAAA;AAEnG,aAAKN,aAAaoB,IAAI,GAAGN,WAAAA,IAAeC,UAAAA,UAAoB;AAE5D,YAAI,KAAKjB,aAAa;AACpB,iBAAO,KAAKA,YAAYiB,YAAYT,SAAQW,OAAAA;QAC9C,OAAO;AACL,iBAAOA,QAAQF,YAAYT,OAAAA;QAC7B;MACF;MACAe,eAAe,CAACR,QAAQP,YAAAA;AACtB,cAAM,CAACQ,aAAaC,UAAAA,IAAcC,gBAAgBH,MAAAA;AAClD,cAAMI,UAAU,CAACJ,SAAgBP,YAC/B,KAAKY,mBAAmBJ,WAAAA,EAAaQ,WAAWT,SAAQP,OAAAA;AAE1D,aAAKN,aAAaoB,IAAI,GAAGN,WAAAA,IAAeC,UAAAA,iBAA2B;AAEnE,YAAI,KAAKhB,eAAe;AACtB,iBAAOwB,OAAOC,IAAID,OAAOE,cAAc,KAAK1B,cAAcgB,YAAYT,SAAQW,OAAAA,CAAAA,GAAW,CAACS,SAAAA;AACxF,iBAAK1B,aAAaoB,IAAI,GAAGN,WAAAA,IAAeC,UAAAA,kBAA4B;AACpE,mBAAOW;UACT,CAAA;QACF,OAAO;AACL,iBAAOT,QAAQF,YAAYT,OAAAA;QAC7B;MACF;IACF,CAAA;EACF;EAEA,MAAMqB,OAAsB;AAC1B,UAAM,KAAKhC,SAASgC,KAAI;EAC1B;EAEA,MAAMC,QAAuB;AAC3B,UAAM,KAAKjC,SAASiC,MAAK;EAC3B;EAEQV,mBAAmBJ,aAAqB;AAC9C,QAAI,CAAC,KAAKlB,cAAciC,IAAIf,WAAAA,GAAc;AACxC,YAAM,CAACgB,KAAKC,UAAAA,IACV5B,OAAO6B,QAAQ,KAAKtC,iBAAiBuC,WAAW,EAAwCC,KACtF,CAAC,CAACJ,MAAKC,WAAAA,MAAgBA,YAAWI,SAASrB,WAAAA,KACxCsB,MAAM,IAAIC,MAAM,0BAA0BvB,WAAAA,EAAa,CAAA;AAE9D,YAAMwB,UAAU,KAAK5C,iBAAiBW,SAASyB,GAAAA;AAC/C,UAAI,CAACQ,SAAS;AACZ,cAAM,IAAID,MAAM,0BAA0BvB,WAAAA,EAAa;MACzD;AAEA,WAAKlB,cAAc2C,IAAIzB,aAAaiB,WAAWS,aAAaF,OAAAA,CAAAA;IAC9D;AAEA,WAAO,KAAK1C,cAAc6C,IAAI3B,WAAAA;EAChC;AACF;;QAxES4B,eAAAA;;;QAGAC,KAAAA;;;QAXFC,SAAAA;;;;ACvBP,SAASC,YAAY;AAErB,SAASC,iBAAiB;AAE1B,SAASC,WAAW;AACpB,SAA8BC,+BAA+B;AAE7D,SAASC,qBAAqB;;AAEvB,IAAMC,uBAAuB,CAACC,YAAwCN,KAAKO,OAAOD,OAAAA;AAElF,IAAME,uBAAuB,CAACC,SAAqCT,KAAKU,OAAOD,IAAAA;AAE/E,IAAME,oBAAoB,OAAO,EACtCC,SACAC,MAAK,MAIN;AACC,QAAMC,UAA0B;IAAEF,SAAS,CAAA;IAAIG,MAAM;MAAEC,YAAW,oBAAIC,KAAAA,GAAOC,YAAW;IAAG;EAAE;AAE7F;AACE,UAAMC,YAAY,MAAMP,QAAQQ,gBAAe;AAC/C,UAAMC,QAAQ,MAAMF,UAAUG,KAAI;AAElCpB,QAAIqB,KAAK,yBAAyB;MAAEC,OAAOH,MAAMI;IAAO,GAAA;;;;;;AACxD,eAAWC,YAAYL,OAAO;AAC5B,YAAMM,OAAO,MAAMR,UAAUS,gBAAgBF,QAAAA;AAC7C,YAAM,EAAEG,KAAI,IAAK,MAAMF,KAAKG,KAAI;AAChC,YAAMrB,OAAO,MAAMkB,KAAKI,KAAK,GAAGF,IAAAA;AAChCf,cAAQF,QAAQoB,KAAK;QACnBC,MAAM9B,wBAAwB+B;QAC9BC,KAAKT;QACLU,OAAO3B;MACT,CAAA;IACF;AACAP,QAAIqB,KAAK,wBAAwB;MAAEC,OAAOH,MAAMI;IAAO,GAAA;;;;;;EACzD;AAEA;AACEvB,QAAIqB,KAAK,4BAAA,QAAA;;;;;;AACT,UAAMc,OAAO,MAAMxB,MAAMyB,SAAiC;MAAEC,aAAa;MAAUC,eAAe;IAAS,CAAA;AAC3G,QAAIhB,QAAQ;AACZ,qBAAiB,CAACW,KAAKC,KAAAA,KAAUC,MAAM;AACrCvB,cAAQF,QAAQoB,KAAK;QACnBC,MAAM9B,wBAAwBsC;QAC9BN;QACAC;MACF,CAAA;AACAZ;IACF;AACAtB,QAAIqB,KAAK,2BAA2B;MAAEC;IAAM,GAAA;;;;;;EAC9C;AAEA,SAAOV;AACT;AAEO,IAAM4B,oBAAoB,OAC/B,EACE9B,SACAC,MAAK,GAKPC,YAAAA;AAEA,MAAI6B,QAAQ9B,MAAM8B,MAAK;AAEvB,MAAInB,QAAQ;AACZ,aAAWoB,SAAS9B,QAAQF,SAAS;AACnC,YAAQgC,MAAMX,MAAI;MAChB,KAAK9B,wBAAwB+B,MAAM;AACjC,cAAMf,YAAY,MAAMP,QAAQQ,gBAAe;AAC/CnB,kBAAU,OAAO2C,MAAMT,QAAQ,UAAU,oBAAA;;;;;;;;;AACzC,cAAMR,OAAO,MAAMR,UAAUS,gBAAgBgB,MAAMT,GAAG;AACtDlC,kBAAU2C,MAAMR,iBAAiBS,YAAY,sBAAA;;;;;;;;;AAC7C,cAAMlB,KAAKmB,MAAM,GAAG1C,cAAcwC,MAAMR,KAAK,CAAA;AAC7C,cAAMT,KAAKoB,MAAK;AAChB;MACF;MACA,KAAK5C,wBAAwBsC,WAAW;AACtCxC,kBAAU2C,MAAMT,eAAeU,YAAY,oBAAA;;;;;;;;;AAC3C5C,kBAAU2C,MAAMR,iBAAiBS,YAAY,sBAAA;;;;;;;;;AAC7CF,cAAMK,IAAIJ,MAAMT,KAAKS,MAAMR,OAAO;UAAEG,aAAa;UAAUC,eAAe;QAAS,CAAA;AACnF;MACF;MACA;AACE,cAAM,IAAIS,MAAM,uBAAuBL,MAAMX,IAAI,EAAE;IACvD;AAEA,QAAI,EAAET,QAAQ,QAAS,GAAG;AAExB,YAAMmB,MAAMG,MAAK;AACjBH,cAAQ9B,MAAM8B,MAAK;AAEnBzC,UAAIqB,KAAK,aAAa;QACpBC;QACA0B,OAAOpC,QAAQF,QAAQa;QACvB0B,UAAU,IAAK3B,QAAQV,QAAQF,QAAQa,SAAU,KAAK2B,QAAO,CAAA;MAC/D,GAAA;;;;;;IACF;EACF;AAEAlD,MAAIqB,KAAK,wBAAA,QAAA;;;;;;AACT,QAAMoB,MAAMG,MAAK;AACnB;;;AC3GA,YAAYO,gBAAgB;AAE5B,YAAYC,YAAY;AACxB,YAAYC,WAAW;AACvB,YAAYC,oBAAoB;AAEhC,SAASC,WAAAA,gBAAe;AACxB,SAASC,wCAAwC;AAEjD,SAASC,eAAe;AACxB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,YAAW;AACpB,SACEC,qBACAC,4BACAC,wBACAC,uBACK;AACP,SAASC,gCAAgC;AAEzC,YAAYC,gBAAgB;AAC5B,YAAYC,eAAe;AAC3B,YAAYC,kBAAkB;AAC9B,YAAYC,oBAAoB;;;ACvBhC,SAASC,SAASC,oBAAoB;AACtC,SAEEC,0BACAC,qBACAC,2BACK;AACP,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,MAAKC,eAAe;AAE7B,SAA0CC,0BAA0B;AACpE,SAASC,gBAAmC;;;;;;;;AAgBrC,IAAMC,gBAAN,MAAMA;EACMC;EACAC;EACAC;EACAC,gBAAgB,IAAIC,QAAAA;EACpBC;EAEDC,UAAU,IAAIC,SAAAA;EAGvBC;;EAGAC;EACAC;EAGAC;EAEAC;EAEP,YAAY,EAAEC,aAAaC,YAAYC,SAASC,WAAWC,YAAW,GAAwB;AAC5FC,IAAAA,WAAUL,aAAAA,QAAAA;;;;;;;;;AACV,SAAKR,eAAeQ;AAEpB,UAAMM,aAAwE;MAC5EC,YAAY,OAAOC,QAAQC,QAAQC,YAAAA;AACjC,cAAMC,QAAQ,MAAMP,YAAYQ,KAAK;UAAEC,SAASC;QAAyB,CAAA;AACzE,YAAIH,OAAO;AACT,gBAAMA;QACR;AAEA,eAAOD,QAAQF,QAAQC,MAAAA;MACzB;MACAM,cAAc,OAAOP,QAAQC,QAAQC,YAAAA;AACnC,cAAMC,QAAQ,MAAMP,YAAYQ,KAAK;UAAEC,SAASC;QAAyB,CAAA;AACzE,YAAIH,OAAO;AACT,gBAAMA;QACR;AAEA,eAAOD,QAAQF,QAAQC,MAAAA;MACzB;IACF;AAEA,SAAKtB,aAAa,IAAI6B,gBAAgB;MACpCC,iBAAiB,KAAKzB,aAAayB;MACnCC,MAAMhB;MACN,GAAGI;IACL,CAAA;AAEA,SAAKlB,kBAAkBe,YACnB,IAAIa,gBAAgB;MAClBC,iBAAiB,KAAKzB,aAAayB;MACnCC,MAAMf;MACN,GAAGG;IACL,CAAA,IACAa;AAEJ,SAAK9B,aAAa+B,mBAAmB;MACnCC,WAAWC;MACXC,SAASC;MACTC,UAAU;QACRC,eAAe;UACbC,OAAO,OAAOC,YAAAA;AACZ,iBAAKjC,SAASiC,QAAQjC;AACtB,iBAAKG,UAAU8B,QAAQ9B;AACvB,iBAAKF,qBAAqBgC,QAAQhC;AAClC,iBAAKC,yBAAyB+B,QAAQ/B;AACtC,iBAAKP,cAAcuC,KAAI;UACzB;UAEAC,MAAM,YAAA;AACJC,uBAAW,YAAA;AACT,kBAAI;AACF,sBAAM,KAAKC,MAAK;cAClB,SAASC,KAAU;AACjBC,gBAAAA,KAAIC,MAAMF,KAAAA,QAAAA;;;;;;cACZ;YACF,CAAA;UACF;QACF;MACF;MACAf,MAAMjB;MACNY,SAAS;IACX,CAAA;AAEA,SAAKd,gBAAgB,KAAKV,WAAW+C,IAAIC;EAC3C;EAEA,MAAMC,OAAsB;AAC1BJ,IAAAA,KAAIK,KAAK,cAAA,QAAA;;;;;;AACT,UAAMC,QAAQC,IAAI;MAAC,KAAKtD,WAAWmD,KAAI;MAAI,KAAKjD,WAAWiD,KAAI;MAAI,KAAKI,gBAAe;KAAG;AAG1F,UAAM,KAAKpD,cAAcsB,KAAK;MAAEC,SAASC;IAAyB,CAAA;AAGlE,QAAI,KAAKhB,SAAS;AAChB,WAAK,KAAK6C,mBAAmB,KAAK7C,SAAS,MAAM,KAAKkC,MAAK,CAAA;IAC7D;AAEAE,IAAAA,KAAIK,KAAK,UAAA,QAAA;;;;;;EACX;EAEA,MAAMP,QAAuB;AAC3BE,IAAAA,KAAIK,KAAK,cAAA,QAAA;;;;;;AACT,QAAI;AACF,YAAM,KAAK9C,QAAQmD,UAAS;IAC9B,SAASX,KAAU;AACjBC,MAAAA,KAAIC,MAAMF,KAAAA,QAAAA;;;;;;IACZ;AAEA,UAAMO,QAAQC,IAAI;MAAC,KAAKtD,WAAW6C,MAAK;MAAI,KAAK3C,WAAW2C,MAAK;KAAG;AACpEE,IAAAA,KAAIK,KAAK,UAAA,QAAA;;;;;;EACX;EAEA,MAAcG,kBAAiC;AAC7C,QAAI;AACF,WAAKtD,mBAAoB,MAAMyD,aAAa,KAAKzD,gBAAgBkD,KAAI,GAAI,GAAA;IAC3E,QAAQ;AACNJ,MAAAA,KAAIK,KAAK,uBAAA,QAAA;;;;;;IACX;EACF;EAEQI,mBAAmB7C,SAAiBgD,UAAmD;AAC7F,WAAOC,UAAUC,MACdpB,QAAQ9B,SAAS,MAAA;IAElB,CAAA,EACCmD,KAAKH,QAAAA;EACV;AACF;;;;;;;;;;ADtGO,IAAMI,gBAAN,MAAMA;EACMC;EACAC;EACAC;EACAC;EACAC,oBAAoB,IAAIC,yBAAAA;EACxBC,SAAS,IAAIC,SAAAA;EACbC,YAAY,oBAAIC,IAAAA;EAChBC;EACAC;EACAC;EACAC,gBAAgB,IAAIC,eAAe,uCAAuCC,OAAOC,WAAU,CAAA,EAAI;EACxGC;EACAC;EACAC;EACAC,sBAA2B;IAAEC,SAAS;EAAiB;EACvDC,0BAAmC;EACnCC;EAKR,YAAY,EACVC,UAAUC,kCACVC,gBACAC,aACAC,aACAC,QACAC,6BAA6B,MAC7BC,aAAY,GACW;AACvB,SAAK/B,kBAAkB0B;AACvB,SAAKzB,eAAe0B;AACpB,SAAKzB,eAAe0B;AACpB,SAAKzB,UAAU0B;AACf,SAAKlB,WAAWa;AAChB,SAAKD,WAA0BS,oBACdC,qBACZC,KAAWC,mBAAaC,oBAAAA,GAA6BD,mBAAwBF,gBAAK,CAAA,EAClFC,KAAWG,WAAK,CAAA;AAErB,SAAK3B,kBAAkB,IAAI4B,mBAAmB;MAC5CC,WAAW;QACTC,SAAS,YAAY,KAAKC,KAAI;MAChC;MACApB,SAAS,KAAKE,SAASmB;MACvBC,cAAc;QACZZ;;QAEAa,oBAAoB;MACtB;IACF,CAAA;AACA,SAAKhC,8BAA8BkB;EACrC;EAEA,IAAIe,OAAO;AACT,WAAO,KAAKnC;EACd;EAEA,IAAIoC,kBAA0B;AAC5B,WAAO,KAAKjC,cAAckC;EAC5B;EAEA,MAAMC,QAAuB;AAC3BC,IAAAA,KAAI,eAAA,QAAA;;;;;;AACJ,QAAI;AACF,WAAK,KAAKpC,cAAcqC,QAAO;AAG/B,WAAKjC,oBAAoB,IAAIkC,iBAAiB,KAAKxC,QAAQ;AAC3D,WAAKM,kBAAkBmC,YAAY;QAAEC,QAAQ;MAAO,CAAA;AACpD,WAAKpC,kBAAkBqC,YAAY,OAAOC,UAAAA;AACxC,YAAIA,MAAMC,MAAMH,WAAW,QAAQ;AACjC,gBAAM,KAAKZ,KAAI;QACjB;MACF;AAEA,YAAM,KAAKxC,aAAY;AACvB,WAAKkB,UAAU,MAAM,KAAKnB,gBAAe;AACzC,YAAMyD,UAAU,KAAKtC,QAAQuC,IAAI,4BAAA;AACjC,WAAKhD,gBAAgBiD,WAAW;QAC9BC,QAAQ,KAAKzC;QACb0C,eAAe,KAAK1C,QAAQuC,IAAI,6BAAA,GAAgCI,YAC5DC,SACAN,UACE,IAAIO,uBAAuBP,SAAS,MAAO,KAAKnC,0BAA0B,KAAKF,sBAAsB,CAAC,CAAA,IACtG,IAAI6C,oBAAoB,IAAIC,2BAAAA,CAAAA;QAClCC,kBAAkB,KAAK/D;MACzB,CAAA;AAEA,YAAM,KAAKM,gBAAgB0D,KAAK,IAAIC,QAAAA,QAAAA;;;;AACpC,WAAK/D,OAAOgE,KAAKP,MAAAA;AACjBd,MAAAA,KAAI,WAAA,QAAA;;;;;;AACJsB,sBAAgB;QACdC,iBAAiB,KAAK9D,gBAAgB+D,SAASC;QAC/CC,gBAAgB,KAAKjE,gBAAgB+D,SAASG;QAC9CC,QAAQ,CAACC,GAAWC,MAAAA;AAClB,eAAK3D,oBAAoB0D,CAAAA,IAAKC;QAChC;MACF,CAAA;IACF,SAASC,KAAU;AACjB,WAAK1E,OAAOgE,KAAKU,GAAAA;AACjB/B,MAAAA,KAAIgC,MAAM,YAAYD,KAAAA;;;;;;IACxB;EACF;EAEA,MAAMvC,OAAsB;AAE1B,SAAKvC,aAAY;AACjB,SAAKe,mBAAmBiE,MAAAA;AACxB,SAAKjE,oBAAoB8C;AACzB,UAAM,KAAKrD,gBAAgBwE,MAAK;AAChC,UAAM,KAAK3D,SAAS4D,QAAO;AAC3B,UAAM,KAAKhF,UAAO;AAClB,UAAM,KAAKU,cAAcuE,QAAO;EAClC;;;;EAKA,MAAMC,cAAc,EAAEC,SAASC,YAAYC,UAAS,GAAgD;AAClG,UAAMC,UAAU,IAAIC,cAAc;MAChCC,aAAa,KAAKjF;MAClB4E;MACAC;MACAC;MACAI,aAAa,KAAKtF;IACpB,CAAA;AAGAmF,YAAQI,QAAQC,IAAI,YAAA;AAClB,WAAKtF,UAAUuF,OAAON,OAAAA;AACtB,UAAI,KAAKjF,UAAUwF,SAAS,GAAG;AAE7B,cAAM,KAAKvD,KAAI;MACjB,OAAO;AACL,YAAI,KAAK7B,6BAA6B;AACpC,eAAKqF,iBAAgB;QACvB;MACF;IACF,CAAA;AAEA,UAAMR,QAAQrB,KAAI;AAElB8B,IAAAA,WACE,CAAC,KAAK9E,oBAAoB+E,UAAU,KAAK/E,oBAAoB+E,WAAWV,QAAQU,QAChF,8BAA8B,KAAK/E,oBAAoB+E,MAAM,OAAOV,QAAQU,MAAM,KAAG;;;;;;;;;AAEvF,QAAIV,QAAQW,oBAAoB;AAC9B,WAAKhF,oBAAoBiF,QAAQZ,QAAQW;IAC3C;AACA,SAAK9E,0BAA0BmE,QAAQa,0BAA0B;AACjE,SAAKlF,oBAAoB+E,SAASV,QAAQU;AAC1C,SAAK3F,UAAU+F,IAAId,OAAAA;AAEnB,QAAI,KAAK7E,6BAA6B;AACpC,WAAKqF,iBAAgB;IACvB;AAEA,WAAOR;EACT;;;;;;;;;EAUAe,oBAAoBf,SAA0C;AAC5D,SAAKvE,wBAAwBuE;AAC7B,SAAKrF,kBAAkBqG,iBAAiBhB,SAASiB,aAAAA;EACnD;;;;EAKQT,mBAAyB;AAC/BhD,IAAAA,KAAI,0BAAA,QAAA;;;;;;AAEJ,QAAI,KAAK/B,uBAAuB;AAC9B,UAAI,CAAC,KAAKV,UAAUmG,IAAI,KAAKzF,qBAAqB,GAAG;AACnD,aAAKA,wBAAwB6C;MAC/B;IACF;AAGA,QAAI,CAAC,KAAK7C,uBAAuB;AAC/B,YAAM0F,WAAWC,MAAMC,KAAK,KAAKtG,SAAS,EAAEuG,KAAK,CAACtB,YAAYA,QAAQiB,aAAa;AACnF,WAAKF,oBAAoBI,QAAAA;IAC3B;EACF;AACF;AAEA,IAAMI,UAAU;AAKhB,IAAMC,iBAA2FC,aACrFC,qBACHC,WAAI,aAAA;AACT,QAAMC,MAAM,OAAoBC;AAChC,SAAO;IACLC,QAAQF,IAAIE;EACd;AACF,CAAA,CAAA;AAUF,IAAMnF,uBAA6BoF,mBAC1BJ,WAAI,aAAA;AACT,QAAM,EAAEK,OAAOC,YAAYC,OAAOC,WAAU,IAAK,IAAIC,eAAAA;AACrDH,aAAW1E,MAAK;AAChB4E,aAAW5E,MAAK;AAChB,SAAc8E,oBAAa,MAClBC,YAAK,MAAA;AACVL,eAAWxC,MAAK;AAChB0C,eAAW1C,MAAK;EAClB,CAAA,CAAA;AAGF,SAAc8C,kBAAsBC,eAAI;IAAEC,MAAMN;IAAYO,QAAQnB;EAAQ,CAAA,CAAA;AAC5E,SAAOC,eAAe/E,KAAWC,mBAA0BF,mBAAM;IAAEmG,QAAeC,eAAQX,UAAAA;EAAY,CAAA,CAAA,CAAA;AACxG,CAAA,CAAA;AAIF,IAAM5G,iBAAN,MAAMA;EACK;EACT;EAEA,YAAYiC,KAAa;AACvB,SAAK,OAAOA;EACd;EAEA,IAAIA,MAAc;AAChB,WAAO,KAAK;EACd;EAEAG,QAAQoF,UAAuB,CAAC,GAAG;AACjC,WAAOC,UAAUC,MAAMC,QAAQ,KAAK,MAAMH,SAAS,YAAA;AACjD,YAAM,IAAII,QAAc,CAACC,YAAAA;AACvB,aAAK,WAAWA;MAClB,CAAA;AACA,WAAK,WAAW5E;IAClB,CAAA;EACF;EAEAqB,UAAU;AACR,SAAK,WAAQ;AACb,SAAK,WAAWrB;EAClB;EAEA,CAAC6E,OAAOzD,OAAO,IAAI;AACjB,SAAKC,QAAO;EACd;AACF;",
|
|
6
|
-
"names": ["Stream", "raise", "RpcPeer", "parseMethodName", "MapCounter", "trace", "ClientRpcServer", "_serviceRegistry", "_rpcPeer", "_handlerCache", "Map", "_handleCall", "_handleStream", "_callMetrics", "MapCounter", "_services", "Object", "keys", "services", "params", "serviceRegistry", "handleCall", "handleStream", "rpcOptions", "RpcPeer", "callHandler", "method", "serviceName", "methodName", "parseMethodName", "handler", "_getServiceHandler", "call", "inc", "streamHandler", "callStream", "Stream", "map", "unwrapPromise", "data", "open", "close", "has", "key", "descriptor", "entries", "descriptors", "find", "name", "raise", "Error", "service", "set", "createServer", "get", "metricsCounter", "info", "resource", "cbor", "invariant", "log", "ProfileArchiveEntryType", "arrayToBuffer", "encodeProfileArchive", "profile", "encode", "decodeProfileArchive", "data", "decode", "exportProfileData", "storage", "level", "archive", "meta", "timestamp", "Date", "toISOString", "directory", "createDirectory", "files", "list", "info", "count", "length", "filename", "file", "getOrCreateFile", "size", "stat", "read", "push", "type", "FILE", "key", "value", "iter", "iterator", "keyEncoding", "valueEncoding", "KEY_VALUE", "importProfileData", "batch", "entry", "Uint8Array", "write", "close", "put", "Error", "total", "progress", "toFixed", "Reactivity", "Effect", "Layer", "ManagedRuntime", "Trigger", "DEFAULT_WORKER_BROADCAST_CHANNEL", "Context", "invariant", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "setIdentityTags", "RtcTransportProxyFactory", "OpfsWorker", "SqlExport", "SqliteClient", "SqlTransaction", "Trigger", "asyncTimeout", "PROXY_CONNECTION_TIMEOUT", "iframeServiceBundle", "workerServiceBundle", "invariant", "log", "logInfo", "createProtoRpcPeer", "Callback", "WorkerSession", "_clientRpc", "_shellClientRpc", "_iframeRpc", "_startTrigger", "Trigger", "_serviceHost", "onClose", "Callback", "origin", "observabilityGroup", "signalTelemetryEnabled", "lockKey", "bridgeService", "serviceHost", "systemPort", "appPort", "shellPort", "readySignal", "invariant", "middleware", "handleCall", "method", "params", "handler", "error", "wait", "timeout", "PROXY_CONNECTION_TIMEOUT", "handleStream", "ClientRpcServer", "serviceRegistry", "port", "undefined", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "wake", "stop", "setTimeout", "close", "err", "log", "catch", "rpc", "BridgeService", "open", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from './packlets/devtools';\nexport * from './packlets/diagnostics';\nexport * from './packlets/identity';\nexport * from './packlets/invitations';\nexport * from './packlets/locks';\nexport * from './packlets/services';\nexport * from './packlets/space-export';\nexport * from './packlets/spaces';\nexport * from './packlets/storage';\nexport * from './packlets/worker';\nexport * from './packlets/agents';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ClientServices } from '@dxos/client-protocol';\nimport { type Any, type ServiceHandler, Stream } from '@dxos/codec-protobuf';\nimport { raise } from '@dxos/debug';\nimport { RpcPeer, type RpcPeerOptions, type ServiceBundle, parseMethodName } from '@dxos/rpc';\nimport { MapCounter, trace } from '@dxos/tracing';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { type ServiceRegistry } from './service-registry';\n\nexport type ClientRpcServerProps = {\n serviceRegistry: ServiceRegistry<ClientServices>;\n handleCall?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => MaybePromise<Any>,\n ) => Promise<Any>;\n handleStream?: (\n method: string,\n params: Any,\n handler: (method: string, params: Any) => Stream<Any>,\n ) => MaybePromise<Stream<Any>>;\n} & Omit<RpcPeerOptions, 'callHandler' | 'streamHandler'>;\n\n@trace.resource()\nexport class ClientRpcServer {\n private readonly _serviceRegistry: ServiceRegistry<ClientServices>;\n private readonly _rpcPeer: RpcPeer;\n private readonly _handlerCache = new Map<string, ServiceHandler<any>>();\n private readonly _handleCall: ClientRpcServerProps['handleCall'];\n private readonly _handleStream: ClientRpcServerProps['handleStream'];\n\n @trace.metricsCounter()\n private readonly _callMetrics = new MapCounter();\n\n @trace.info()\n private get _services() {\n return Object.keys(this._serviceRegistry.services);\n }\n\n constructor(params: ClientRpcServerProps) {\n const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;\n this._handleCall = handleCall;\n this._handleStream = handleStream;\n\n this._serviceRegistry = serviceRegistry;\n this._rpcPeer = new RpcPeer({\n ...rpcOptions,\n callHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) => this._getServiceHandler(serviceName).call(method, params);\n\n this._callMetrics.inc(`${serviceName}.${methodName} request`);\n\n if (this._handleCall) {\n return this._handleCall(methodName, params, handler);\n } else {\n return handler(methodName, params);\n }\n },\n streamHandler: (method, params) => {\n const [serviceName, methodName] = parseMethodName(method);\n const handler = (method: string, params: Any) =>\n this._getServiceHandler(serviceName).callStream(method, params);\n\n this._callMetrics.inc(`${serviceName}.${methodName} request stream`);\n\n if (this._handleStream) {\n return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params, handler)), (data) => {\n this._callMetrics.inc(`${serviceName}.${methodName} response stream`);\n return data;\n });\n } else {\n return handler(methodName, params);\n }\n },\n });\n }\n\n async open(): Promise<void> {\n await this._rpcPeer.open();\n }\n\n async close(): Promise<void> {\n await this._rpcPeer.close();\n }\n\n private _getServiceHandler(serviceName: string) {\n if (!this._handlerCache.has(serviceName)) {\n const [key, descriptor] =\n Object.entries(this._serviceRegistry.descriptors as ServiceBundle<Record<string, any>>).find(\n ([key, descriptor]) => descriptor.name === serviceName,\n ) ?? raise(new Error(`Service not available: ${serviceName}`));\n\n const service = this._serviceRegistry.services[key as keyof ClientServices] as any;\n if (!service) {\n throw new Error(`Service not available: ${serviceName}`);\n }\n\n this._handlerCache.set(serviceName, descriptor.createServer(service));\n }\n\n return this._handlerCache.get(serviceName)!;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { cbor } from '@automerge/automerge-repo';\n\nimport { invariant } from '@dxos/invariant';\nimport type { LevelDB } from '@dxos/kv-store';\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 ({\n storage,\n level,\n}: {\n storage: Storage;\n level: LevelDB;\n}): Promise<ProfileArchive> => {\n const archive: ProfileArchive = { storage: [], meta: { timestamp: new Date().toISOString() } };\n\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\n {\n log.info('begin exporting kv pairs');\n const iter = await level.iterator<Uint8Array, Uint8Array>({ keyEncoding: 'binary', valueEncoding: 'binary' });\n let count = 0;\n for await (const [key, value] of iter) {\n archive.storage.push({\n type: ProfileArchiveEntryType.KEY_VALUE,\n key,\n value,\n });\n count++;\n }\n log.info('done exporting kv pairs', { count });\n }\n\n return archive;\n};\n\nexport const importProfileData = async (\n {\n storage,\n level,\n }: {\n storage: Storage;\n level: LevelDB;\n },\n archive: ProfileArchive,\n): Promise<void> => {\n let batch = level.batch();\n\n let count = 0;\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 invariant(entry.key instanceof Uint8Array, 'Invalid key type');\n invariant(entry.value instanceof Uint8Array, 'Invalid value type');\n batch.put(entry.key, entry.value, { keyEncoding: 'binary', valueEncoding: 'binary' });\n break;\n }\n default:\n throw new Error(`Invalid entry type: ${entry.type}`);\n }\n\n if (++count % 1000 === 0) {\n // Apparently indexedDB can't handle big batches.\n await batch.write();\n batch = level.batch();\n\n log.info('importing', {\n count,\n total: archive.storage.length,\n progress: `${((count / archive.storage.length) * 100).toFixed()}%`,\n });\n }\n }\n\n log.info('committing changes..');\n await batch.write();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport * as Reactivity from '@effect/experimental/Reactivity';\nimport type * as SqlClient from '@effect/sql/SqlClient';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { Trigger } from '@dxos/async';\nimport { DEFAULT_WORKER_BROADCAST_CHANNEL } from '@dxos/client-protocol';\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport {\n MemorySignalManager,\n MemorySignalManagerContext,\n WebsocketSignalManager,\n setIdentityTags,\n} from '@dxos/messaging';\nimport { RtcTransportProxyFactory } from '@dxos/network-manager';\nimport { type RpcPort } from '@dxos/rpc';\nimport * as OpfsWorker from '@dxos/sql-sqlite/OpfsWorker';\nimport * as SqlExport from '@dxos/sql-sqlite/SqlExport';\nimport * as SqliteClient from '@dxos/sql-sqlite/SqliteClient';\nimport * as SqlTransaction from '@dxos/sql-sqlite/SqlTransaction';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { ClientServicesHost } from '../services';\n\nimport { WorkerSession } from './worker-session';\n\n// NOTE: Keep as RpcPorts to avoid dependency on @dxos/rpc-tunnel so we don't depend on browser-specific apis.\nexport type CreateSessionProps = {\n appPort: RpcPort;\n systemPort: RpcPort;\n shellPort?: RpcPort;\n onClose?: () => Promise<void>;\n};\n\nexport type WorkerRuntimeOptions = {\n channel?: string;\n configProvider: () => MaybePromise<Config>;\n acquireLock: () => Promise<void>;\n releaseLock: () => void;\n onStop?: () => Promise<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 `sqliteLayerMemory` from `@dxos/sql-sqlite/platform`.\n */\n sqliteLayer?: Layer.Layer<SqlClient.SqlClient | SqlExport.SqlExport, unknown>;\n};\n\n/**\n * Runtime for the shared and dedciated worker.\n * Manages connections from proxies (in tabs).\n * Tabs make requests to the `ClientServicesHost`, and provide a WebRTC gateway.\n */\nexport class WorkerRuntime {\n private readonly _configProvider: () => MaybePromise<Config>;\n private readonly _acquireLock: () => Promise<void>;\n private readonly _releaseLock: () => void;\n private readonly _onStop?: () => Promise<void>;\n private readonly _transportFactory = new RtcTransportProxyFactory();\n private readonly _ready = new Trigger<Error | undefined>();\n private readonly _sessions = new Set<WorkerSession>();\n private readonly _clientServices!: ClientServicesHost;\n private readonly _channel: string;\n private readonly _automaticallyConnectWebrtc: boolean;\n private readonly _livenessLock = new WebLockWrapper(`@dxos/client-services/WorkerRuntime/${crypto.randomUUID()}`);\n private _broadcastChannel?: BroadcastChannel;\n private _sessionForNetworking?: WorkerSession; // TODO(burdon): Expose to client QueryStatusResponse.\n private _config!: Config;\n private _signalMetadataTags: any = { runtime: 'worker-runtime' };\n private _signalTelemetryEnabled: boolean = false;\n private _runtime!: ManagedRuntime.ManagedRuntime<\n SqlTransaction.SqlTransaction | SqlClient.SqlClient | SqlExport.SqlExport,\n never\n >;\n\n constructor({\n channel = DEFAULT_WORKER_BROADCAST_CHANNEL,\n configProvider,\n acquireLock,\n releaseLock,\n onStop,\n automaticallyConnectWebrtc = true,\n sqliteLayer,\n }: WorkerRuntimeOptions) {\n this._configProvider = configProvider;\n this._acquireLock = acquireLock;\n this._releaseLock = releaseLock;\n this._onStop = onStop;\n this._channel = channel;\n if (sqliteLayer) {\n log.warn('Using testing SQLite layer');\n }\n this._runtime = ManagedRuntime.make(\n SqlTransaction.layer\n .pipe(Layer.provideMerge(sqliteLayer ?? LocalSqliteOpfsLayer), Layer.provideMerge(Reactivity.layer))\n .pipe(Layer.orDie),\n );\n this._clientServices = new ClientServicesHost({\n callbacks: {\n onReset: async () => this.stop(),\n },\n runtime: this._runtime.runtimeEffect,\n runtimeProps: {\n // Auto-activate spaces that were previously active after leader changeover.\n autoActivateSpaces: true,\n },\n });\n this._automaticallyConnectWebrtc = automaticallyConnectWebrtc;\n }\n\n get host() {\n return this._clientServices;\n }\n\n get livenessLockKey(): string {\n return this._livenessLock.key;\n }\n\n async start(): Promise<void> {\n log('starting...');\n try {\n void this._livenessLock.acquire();\n\n // Steal the lock from the other worker.\n this._broadcastChannel = new BroadcastChannel(this._channel);\n this._broadcastChannel.postMessage({ action: 'stop' });\n this._broadcastChannel.onmessage = async (event) => {\n if (event.data?.action === 'stop') {\n await this.stop();\n }\n };\n\n await this._acquireLock();\n this._config = await this._configProvider();\n const signals = this._config.get('runtime.services.signaling');\n this._clientServices.initialize({\n config: this._config,\n signalManager: this._config.get('runtime.client.edgeFeatures')?.signaling\n ? undefined\n : signals\n ? new WebsocketSignalManager(signals, () => (this._signalTelemetryEnabled ? this._signalMetadataTags : {}))\n : new MemorySignalManager(new MemorySignalManagerContext()), // TODO(dmaretskyi): Inject this context.\n transportFactory: this._transportFactory,\n });\n\n await this._clientServices.open(new Context());\n this._ready.wake(undefined);\n log('started');\n setIdentityTags({\n identityService: this._clientServices.services.IdentityService!,\n devicesService: this._clientServices.services.DevicesService!,\n setTag: (k: string, v: string) => {\n this._signalMetadataTags[k] = v;\n },\n });\n } catch (err: any) {\n this._ready.wake(err);\n log.error('starting', err);\n }\n }\n\n async stop(): Promise<void> {\n // Release the lock to notify remote clients that the worker is terminating.\n this._releaseLock();\n this._broadcastChannel?.close();\n this._broadcastChannel = undefined;\n await this._clientServices.close(Context.default());\n await this._runtime.dispose();\n await this._onStop?.();\n await this._livenessLock.release();\n }\n\n /**\n * Create a new session.\n */\n async createSession({ appPort, systemPort, shellPort, onClose }: CreateSessionProps): Promise<WorkerSession> {\n const session = new WorkerSession({\n serviceHost: this._clientServices,\n appPort,\n systemPort,\n shellPort,\n readySignal: this._ready,\n });\n\n // When tab is closed or client is destroyed.\n session.onClose.set(async () => {\n this._sessions.delete(session);\n if (this._sessions.size === 0) {\n // Terminate the worker when all sessions are closed.\n await this.stop();\n } else {\n if (this._automaticallyConnectWebrtc) {\n this._reconnectWebrtc();\n }\n }\n await onClose?.();\n });\n\n await session.open();\n // A worker can only service one origin currently\n invariant(\n !this._signalMetadataTags.origin || this._signalMetadataTags.origin === session.origin,\n `worker origin changed from ${this._signalMetadataTags.origin} to ${session.origin}?`,\n );\n if (session.observabilityGroup) {\n this._signalMetadataTags.group = session.observabilityGroup;\n }\n this._signalTelemetryEnabled = session.signalTelemetryEnabled ?? false;\n this._signalMetadataTags.origin = session.origin;\n this._sessions.add(session);\n\n if (this._automaticallyConnectWebrtc) {\n this._reconnectWebrtc();\n }\n\n return session;\n }\n\n /**\n * Connects the WebRTC bridge to the specified session.\n * If no session is provided, disconnects the WebRTC bridge.\n *\n * Called automatically if `automaticallyConnectWebrtc` is true.\n *\n * @param session The session to connect the WebRTC bridge to.\n */\n connectWebrtcBridge(session: WorkerSession | undefined): void {\n this._sessionForNetworking = session;\n this._transportFactory.setBridgeService(session?.bridgeService);\n }\n\n /**\n * Selects one of the existing session for WebRTC networking.\n */\n private _reconnectWebrtc(): void {\n log('reconnecting webrtc...');\n // Check if current session is already closed.\n if (this._sessionForNetworking) {\n if (!this._sessions.has(this._sessionForNetworking)) {\n this._sessionForNetworking = undefined;\n }\n }\n\n // Select existing session.\n if (!this._sessionForNetworking) {\n const selected = Array.from(this._sessions).find((session) => session.bridgeService);\n this.connectWebrtcBridge(selected);\n }\n }\n}\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 OPFS sync API as an FS backend.\n * Does NOT spawn a new worker.\n * NOTE: Only usable within a worker.\n * TODO(mykola): This does not work right now. Fix.\n */\nconst LocalSqliteOpfsLayer = Layer.unwrapScoped(\n Effect.gen(function* () {\n const { port1: clientPort, port2: serverPort } = new MessageChannel();\n clientPort.start();\n serverPort.start();\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n clientPort.close();\n serverPort.close();\n }),\n );\n\n yield* Effect.forkScoped(OpfsWorker.run({ port: serverPort, dbName: DB_NAME }));\n return SqlExportLayer.pipe(Layer.provideMerge(SqliteClient.layer({ worker: Effect.succeed(clientPort) })));\n }),\n);\n\n// TODO(wittjosiah): Factor out to a separate module.\nclass WebLockWrapper {\n readonly #key: string;\n #release?: () => void;\n\n constructor(key: string) {\n this.#key = key;\n }\n\n get key(): string {\n return this.#key;\n }\n\n acquire(options: LockOptions = {}) {\n return navigator.locks.request(this.#key, options, async () => {\n await new Promise<void>((resolve) => {\n this.#release = resolve;\n }); // Blocks for the duration of the worker's lifetime.\n this.#release = undefined;\n });\n }\n\n release() {\n this.#release?.();\n this.#release = undefined;\n }\n\n [Symbol.dispose]() {\n this.release();\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Trigger, asyncTimeout } from '@dxos/async';\nimport {\n type IframeServiceBundle,\n PROXY_CONNECTION_TIMEOUT,\n iframeServiceBundle,\n workerServiceBundle,\n} from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log, logInfo } from '@dxos/log';\nimport { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';\nimport { type ProtoRpcPeer, type RpcPort, createProtoRpcPeer } from '@dxos/rpc';\nimport { Callback, type MaybePromise } from '@dxos/util';\n\nimport { ClientRpcServer, type ClientRpcServerProps, type ClientServicesHost } from '../services';\n\nexport type WorkerSessionProps = {\n serviceHost: ClientServicesHost;\n systemPort: RpcPort;\n appPort: RpcPort;\n // TODO(wittjosiah): Remove shellPort.\n shellPort?: RpcPort;\n readySignal: Trigger<Error | undefined>;\n};\n\n/**\n * Represents a tab connection within the worker.\n */\nexport class WorkerSession {\n private readonly _clientRpc: ClientRpcServer;\n private readonly _shellClientRpc?: ClientRpcServer;\n private readonly _iframeRpc: ProtoRpcPeer<IframeServiceBundle>;\n private readonly _startTrigger = new Trigger();\n private readonly _serviceHost: ClientServicesHost;\n\n public readonly onClose = new Callback<() => Promise<void>>();\n\n @logInfo\n public origin?: string;\n\n // TODO(nf): factor out?\n public observabilityGroup?: string;\n public signalTelemetryEnabled?: boolean;\n\n @logInfo\n public lockKey?: string;\n\n public bridgeService?: BridgeService;\n\n constructor({ serviceHost, systemPort, appPort, shellPort, readySignal }: WorkerSessionProps) {\n invariant(serviceHost);\n this._serviceHost = serviceHost;\n\n const middleware: Pick<ClientRpcServerProps, 'handleCall' | 'handleStream'> = {\n handleCall: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n handleStream: async (method, params, handler) => {\n const error = await readySignal.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n if (error) {\n throw error;\n }\n\n return handler(method, params);\n },\n };\n\n this._clientRpc = new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: appPort,\n ...middleware,\n });\n\n this._shellClientRpc = shellPort\n ? new ClientRpcServer({\n serviceRegistry: this._serviceHost.serviceRegistry,\n port: shellPort,\n ...middleware,\n })\n : undefined;\n\n this._iframeRpc = createProtoRpcPeer({\n requested: iframeServiceBundle,\n exposed: workerServiceBundle,\n handlers: {\n WorkerService: {\n start: async (request) => {\n this.origin = request.origin;\n this.lockKey = request.lockKey;\n this.observabilityGroup = request.observabilityGroup;\n this.signalTelemetryEnabled = request.signalTelemetryEnabled;\n this._startTrigger.wake();\n },\n\n stop: async () => {\n setTimeout(async () => {\n try {\n await this.close();\n } catch (err: any) {\n log.catch(err);\n }\n });\n },\n },\n },\n port: systemPort,\n timeout: 1_000, // With low timeout heartbeat may fail if the tab's thread is saturated.\n });\n\n this.bridgeService = this._iframeRpc.rpc.BridgeService;\n }\n\n async open(): Promise<void> {\n log('opening...');\n await Promise.all([this._clientRpc.open(), this._iframeRpc.open(), this._maybeOpenShell()]);\n\n // Wait until the worker's RPC service has started.\n await this._startTrigger.wait({ timeout: PROXY_CONNECTION_TIMEOUT });\n\n // TODO(burdon): Comment required.\n if (this.lockKey) {\n void this._afterLockReleases(this.lockKey, () => this.close());\n }\n\n log('opened');\n }\n\n async close(): Promise<void> {\n log.debug('closing...');\n try {\n await this.onClose.callIfSet();\n } catch (err: any) {\n log.catch(err);\n }\n\n await Promise.all([this._clientRpc.close(), this._iframeRpc.close()]);\n log.debug('closed');\n }\n\n private async _maybeOpenShell(): Promise<void> {\n try {\n this._shellClientRpc && (await asyncTimeout(this._shellClientRpc.open(), 1_000));\n } catch {\n log.info('No shell connected.');\n }\n }\n\n private _afterLockReleases(lockKey: string, callback: () => MaybePromise<void>): Promise<void> {\n return navigator.locks\n .request(lockKey, () => {\n // No-op.\n })\n .then(callback);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Stream", "raise", "RpcPeer", "parseMethodName", "MapCounter", "trace", "ClientRpcServer", "_serviceRegistry", "_rpcPeer", "_handlerCache", "Map", "_handleCall", "_handleStream", "_callMetrics", "MapCounter", "_services", "Object", "keys", "services", "params", "serviceRegistry", "handleCall", "handleStream", "rpcOptions", "RpcPeer", "callHandler", "method", "serviceName", "methodName", "parseMethodName", "handler", "_getServiceHandler", "call", "inc", "streamHandler", "callStream", "Stream", "map", "unwrapPromise", "data", "open", "close", "has", "key", "descriptor", "entries", "descriptors", "find", "name", "raise", "Error", "service", "set", "createServer", "get", "metricsCounter", "info", "resource", "cbor", "invariant", "log", "ProfileArchiveEntryType", "arrayToBuffer", "encodeProfileArchive", "profile", "encode", "decodeProfileArchive", "data", "decode", "exportProfileData", "storage", "level", "archive", "meta", "timestamp", "Date", "toISOString", "directory", "createDirectory", "files", "list", "info", "count", "length", "filename", "file", "getOrCreateFile", "size", "stat", "read", "push", "type", "FILE", "key", "value", "iter", "iterator", "keyEncoding", "valueEncoding", "KEY_VALUE", "importProfileData", "batch", "entry", "Uint8Array", "write", "close", "put", "Error", "total", "progress", "toFixed", "Reactivity", "Effect", "Layer", "ManagedRuntime", "Trigger", "DEFAULT_WORKER_BROADCAST_CHANNEL", "Context", "invariant", "log", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "setIdentityTags", "RtcTransportProxyFactory", "OpfsWorker", "SqlExport", "SqliteClient", "SqlTransaction", "Trigger", "asyncTimeout", "PROXY_CONNECTION_TIMEOUT", "iframeServiceBundle", "workerServiceBundle", "invariant", "log", "logInfo", "createProtoRpcPeer", "Callback", "WorkerSession", "_clientRpc", "_shellClientRpc", "_iframeRpc", "_startTrigger", "Trigger", "_serviceHost", "onClose", "Callback", "origin", "observabilityGroup", "signalTelemetryEnabled", "lockKey", "bridgeService", "serviceHost", "systemPort", "appPort", "shellPort", "readySignal", "invariant", "middleware", "handleCall", "method", "params", "handler", "error", "wait", "timeout", "PROXY_CONNECTION_TIMEOUT", "handleStream", "ClientRpcServer", "serviceRegistry", "port", "undefined", "createProtoRpcPeer", "requested", "iframeServiceBundle", "exposed", "workerServiceBundle", "handlers", "WorkerService", "start", "request", "wake", "stop", "setTimeout", "close", "err", "log", "catch", "rpc", "BridgeService", "open", "Promise", "all", "_maybeOpenShell", "_afterLockReleases", "debug", "callIfSet", "asyncTimeout", "info", "callback", "navigator", "locks", "then", "WorkerRuntime", "_configProvider", "_acquireLock", "_releaseLock", "_onStop", "_transportFactory", "RtcTransportProxyFactory", "_ready", "Trigger", "_sessions", "Set", "_clientServices", "_channel", "_automaticallyConnectWebrtc", "_livenessLock", "WebLockWrapper", "crypto", "randomUUID", "_broadcastChannel", "_sessionForNetworking", "_config", "_signalMetadataTags", "runtime", "_signalTelemetryEnabled", "_runtime", "channel", "DEFAULT_WORKER_BROADCAST_CHANNEL", "configProvider", "acquireLock", "releaseLock", "onStop", "automaticallyConnectWebrtc", "sqliteLayer", "log", "warn", "make", "layer", "pipe", "provideMerge", "LocalSqliteOpfsLayer", "orDie", "ClientServicesHost", "callbacks", "onReset", "stop", "runtimeEffect", "runtimeProps", "autoActivateSpaces", "host", "livenessLockKey", "key", "start", "acquire", "BroadcastChannel", "postMessage", "action", "onmessage", "event", "data", "signals", "get", "initialize", "config", "signalManager", "signaling", "undefined", "WebsocketSignalManager", "MemorySignalManager", "MemorySignalManagerContext", "transportFactory", "open", "Context", "wake", "setIdentityTags", "identityService", "services", "IdentityService", "devicesService", "DevicesService", "setTag", "k", "v", "err", "error", "close", "default", "dispose", "release", "createSession", "appPort", "systemPort", "shellPort", "onClose", "session", "WorkerSession", "serviceHost", "readySignal", "set", "delete", "size", "_reconnectWebrtc", "invariant", "origin", "observabilityGroup", "group", "signalTelemetryEnabled", "add", "connectWebrtcBridge", "setBridgeService", "bridgeService", "has", "selected", "Array", "from", "find", "DB_NAME", "SqlExportLayer", "effect", "SqlExport", "gen", "sql", "SqliteClient", "export", "unwrapScoped", "port1", "clientPort", "port2", "serverPort", "MessageChannel", "addFinalizer", "sync", "forkScoped", "run", "port", "dbName", "worker", "succeed", "options", "navigator", "locks", "request", "Promise", "resolve", "Symbol"]
|
|
7
7
|
}
|