@dxos/client-services 0.10.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/chunk-client-services-layer.mjs +11425 -0
- package/dist/lib/chunk-client-services-layer.mjs.map +1 -0
- package/dist/lib/chunk-decorate.mjs +9 -0
- package/dist/lib/index.mjs +731 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/packlets/diagnostics/browser-diagnostics-broadcast.mjs +72 -0
- package/dist/lib/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +1 -0
- package/dist/lib/packlets/diagnostics/diagnostics-broadcast.mjs +14 -0
- package/dist/lib/packlets/diagnostics/diagnostics-broadcast.mjs.map +1 -0
- package/dist/lib/packlets/locks/browser.mjs +105 -0
- package/dist/lib/packlets/locks/browser.mjs.map +1 -0
- package/dist/lib/packlets/locks/node.mjs +53 -0
- package/dist/lib/packlets/locks/node.mjs.map +1 -0
- package/dist/lib/testing.mjs +570 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/packlets/agents/edge-agent-manager.d.ts +21 -4
- package/dist/types/src/packlets/agents/edge-agent-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/agents/edge-agent-service.d.ts +8 -7
- package/dist/types/src/packlets/agents/edge-agent-service.d.ts.map +1 -1
- package/dist/types/src/packlets/devices/devices-service.d.ts +7 -5
- package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/devtools.d.ts +30 -29
- package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/feeds.d.ts +1 -1
- package/dist/types/src/packlets/devtools/feeds.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/network.d.ts +2 -1
- package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/spaces.d.ts.map +1 -1
- package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts +2 -2
- package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts.map +1 -1
- package/dist/types/src/packlets/diagnostics/diagnostics-collector.d.ts.map +1 -1
- package/dist/types/src/packlets/diagnostics/diagnostics.d.ts +1 -8
- package/dist/types/src/packlets/diagnostics/diagnostics.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/authenticator.d.ts +1 -1
- package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/contacts-service.d.ts +9 -6
- package/dist/types/src/packlets/identity/contacts-service.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-manager.d.ts +32 -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 +23 -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 +15 -20
- package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity.d.ts +2 -2
- 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-handler.d.ts +17 -0
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts +25 -4
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-service.d.ts +11 -11
- package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
- package/dist/types/src/packlets/logging/logging-service.d.ts +14 -12
- package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
- package/dist/types/src/packlets/metadata/index.d.ts +3 -0
- package/dist/types/src/packlets/metadata/index.d.ts.map +1 -0
- package/dist/types/src/packlets/metadata/metadata-store.d.ts +107 -0
- package/dist/types/src/packlets/metadata/metadata-store.d.ts.map +1 -0
- package/dist/types/src/packlets/metadata/metadata-store.test.d.ts +2 -0
- package/dist/types/src/packlets/metadata/metadata-store.test.d.ts.map +1 -0
- package/dist/types/src/packlets/metadata/sqlite-metadata-store.d.ts +65 -0
- package/dist/types/src/packlets/metadata/sqlite-metadata-store.d.ts.map +1 -0
- package/dist/types/src/packlets/network/network-service.d.ts +15 -14
- package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
- package/dist/types/src/packlets/pipeline/codec.d.ts +11 -0
- package/dist/types/src/packlets/pipeline/codec.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/feeds.d.ts +7 -0
- package/dist/types/src/packlets/pipeline/feeds.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/index.d.ts +5 -0
- package/dist/types/src/packlets/pipeline/index.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/message-selector.d.ts +11 -0
- package/dist/types/src/packlets/pipeline/message-selector.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/pipeline-stress.test.d.ts +2 -0
- package/dist/types/src/packlets/pipeline/pipeline-stress.test.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/pipeline.d.ts +131 -0
- package/dist/types/src/packlets/pipeline/pipeline.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/pipeline.test.d.ts +2 -0
- package/dist/types/src/packlets/pipeline/pipeline.test.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/testing/index.d.ts +2 -0
- package/dist/types/src/packlets/pipeline/testing/index.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/testing/test-feed-builder.d.ts +9 -0
- package/dist/types/src/packlets/pipeline/testing/test-feed-builder.d.ts.map +1 -0
- package/dist/types/src/packlets/pipeline/timeframe-clock.d.ts +31 -0
- package/dist/types/src/packlets/pipeline/timeframe-clock.d.ts.map +1 -0
- package/dist/types/src/packlets/services/client-services-layer.d.ts +21 -0
- package/dist/types/src/packlets/services/client-services-layer.d.ts.map +1 -0
- package/dist/types/src/packlets/services/cross-device-space-synchronizer.d.ts +28 -0
- package/dist/types/src/packlets/services/cross-device-space-synchronizer.d.ts.map +1 -0
- package/dist/types/src/packlets/services/effect-rpc.test.d.ts +2 -0
- package/dist/types/src/packlets/services/effect-rpc.test.d.ts.map +1 -0
- package/dist/types/src/packlets/services/feed-syncer.d.ts +22 -2
- package/dist/types/src/packlets/services/feed-syncer.d.ts.map +1 -1
- package/dist/types/src/packlets/services/index.d.ts +2 -2
- package/dist/types/src/packlets/services/index.d.ts.map +1 -1
- package/dist/types/src/packlets/services/platform.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts +38 -57
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +82 -31
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/services/sqlite-storage.d.ts +29 -0
- package/dist/types/src/packlets/services/sqlite-storage.d.ts.map +1 -1
- package/dist/types/src/packlets/services/sqlite-storage.test.d.ts +2 -0
- package/dist/types/src/packlets/services/sqlite-storage.test.d.ts.map +1 -0
- package/dist/types/src/packlets/space/admission-discovery-extension.d.ts +30 -0
- package/dist/types/src/packlets/space/admission-discovery-extension.d.ts.map +1 -0
- package/dist/types/src/packlets/space/auth.d.ts +24 -0
- package/dist/types/src/packlets/space/auth.d.ts.map +1 -0
- package/dist/types/src/packlets/space/control-pipeline.d.ts +46 -0
- package/dist/types/src/packlets/space/control-pipeline.d.ts.map +1 -0
- package/dist/types/src/packlets/space/control-pipeline.test.d.ts +2 -0
- package/dist/types/src/packlets/space/control-pipeline.test.d.ts.map +1 -0
- package/dist/types/src/packlets/space/index.d.ts +6 -0
- package/dist/types/src/packlets/space/index.d.ts.map +1 -0
- package/dist/types/src/packlets/space/replication.browser.test.d.ts +2 -0
- package/dist/types/src/packlets/space/replication.browser.test.d.ts.map +1 -0
- package/dist/types/src/packlets/space/space-manager.browser.test.d.ts +2 -0
- package/dist/types/src/packlets/space/space-manager.browser.test.d.ts.map +1 -0
- package/dist/types/src/packlets/space/space-manager.d.ts +72 -0
- package/dist/types/src/packlets/space/space-manager.d.ts.map +1 -0
- package/dist/types/src/packlets/space/space-protocol.browser.test.d.ts +2 -0
- package/dist/types/src/packlets/space/space-protocol.browser.test.d.ts.map +1 -0
- package/dist/types/src/packlets/space/space-protocol.d.ts +99 -0
- package/dist/types/src/packlets/space/space-protocol.d.ts.map +1 -0
- package/dist/types/src/packlets/space/space-protocol.test.d.ts +2 -0
- package/dist/types/src/packlets/space/space-protocol.test.d.ts.map +1 -0
- package/dist/types/src/packlets/space/space.d.ts +65 -0
- package/dist/types/src/packlets/space/space.d.ts.map +1 -0
- package/dist/types/src/packlets/space/space.test.d.ts +2 -0
- package/dist/types/src/packlets/space/space.test.d.ts.map +1 -0
- package/dist/types/src/packlets/space/testing/change-metadata.d.ts +8 -0
- package/dist/types/src/packlets/space/testing/change-metadata.d.ts.map +1 -0
- package/dist/types/src/packlets/space/testing/index.d.ts +4 -0
- package/dist/types/src/packlets/space/testing/index.d.ts.map +1 -0
- package/dist/types/src/packlets/space/testing/test-agent-builder.d.ts +62 -0
- package/dist/types/src/packlets/space/testing/test-agent-builder.d.ts.map +1 -0
- package/dist/types/src/packlets/space-export/serialized-space-reader.d.ts +1 -1
- package/dist/types/src/packlets/space-export/serialized-space-reader.d.ts.map +1 -1
- package/dist/types/src/packlets/space-export/serialized-space-writer.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts +40 -7
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts +3 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/genesis.d.ts +1 -1
- package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +25 -23
- package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
- package/dist/types/src/packlets/storage/level.d.ts.map +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts +18 -18
- package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/invitation-utils.d.ts +1 -1
- package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/test-builder.d.ts +7 -6
- package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/packlets/worker/worker-runtime.d.ts +41 -58
- package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/worker/worker-session.d.ts +21 -8
- package/dist/types/src/packlets/worker/worker-session.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +52 -48
- package/src/index.ts +2 -0
- package/src/packlets/agents/edge-agent-manager.ts +56 -15
- package/src/packlets/agents/edge-agent-service.ts +25 -15
- package/src/packlets/devices/devices-service.test.ts +20 -19
- package/src/packlets/devices/devices-service.ts +17 -17
- package/src/packlets/devtools/devtools.ts +133 -75
- package/src/packlets/devtools/feeds.ts +2 -1
- package/src/packlets/devtools/network.ts +42 -12
- package/src/packlets/devtools/spaces.ts +1 -1
- package/src/packlets/diagnostics/diagnostics-broadcast.ts +4 -2
- package/src/packlets/diagnostics/diagnostics-collector.ts +5 -18
- package/src/packlets/diagnostics/diagnostics.ts +0 -11
- package/src/packlets/identity/authenticator.ts +2 -1
- package/src/packlets/identity/contacts-service.ts +46 -37
- package/src/packlets/identity/identity-manager.test.ts +3 -1
- package/src/packlets/identity/identity-manager.ts +73 -5
- package/src/packlets/identity/identity-recovery-manager.ts +56 -7
- package/src/packlets/identity/identity-service.test.ts +27 -18
- package/src/packlets/identity/identity-service.ts +114 -71
- package/src/packlets/identity/identity.test.ts +4 -9
- package/src/packlets/identity/identity.ts +1 -2
- package/src/packlets/invitations/edge-invitation-handler.ts +0 -1
- package/src/packlets/invitations/invitations-handler.ts +39 -3
- package/src/packlets/invitations/invitations-manager.ts +52 -4
- package/src/packlets/invitations/invitations-service.ts +54 -28
- package/src/packlets/logging/logging-service.ts +41 -29
- package/src/packlets/logging/logging.test.ts +28 -15
- package/src/packlets/metadata/index.ts +6 -0
- package/src/packlets/metadata/metadata-store.test.ts +49 -0
- package/src/packlets/metadata/metadata-store.ts +446 -0
- package/src/packlets/metadata/sqlite-metadata-store.ts +409 -0
- package/src/packlets/network/network-service.test.ts +19 -12
- package/src/packlets/network/network-service.ts +96 -29
- package/src/packlets/pipeline/codec.ts +18 -0
- package/src/packlets/pipeline/feeds.ts +22 -0
- package/src/packlets/pipeline/index.ts +8 -0
- package/src/packlets/pipeline/message-selector.ts +35 -0
- package/src/packlets/pipeline/pipeline-stress.test.ts +230 -0
- package/src/packlets/pipeline/pipeline.test.ts +140 -0
- package/src/packlets/pipeline/pipeline.ts +439 -0
- package/src/packlets/pipeline/testing/index.ts +5 -0
- package/src/packlets/pipeline/testing/test-feed-builder.ts +19 -0
- package/src/packlets/pipeline/timeframe-clock.ts +81 -0
- package/src/packlets/services/client-services-layer.ts +186 -0
- package/src/packlets/services/cross-device-space-synchronizer.ts +132 -0
- package/src/packlets/services/effect-rpc.test.ts +314 -0
- package/src/packlets/services/feed-syncer.ts +57 -3
- package/src/packlets/services/index.ts +2 -2
- package/src/packlets/services/platform.ts +0 -6
- package/src/packlets/services/service-context.ts +219 -522
- package/src/packlets/services/service-host.test.ts +34 -11
- package/src/packlets/services/service-host.ts +693 -213
- package/src/packlets/services/spec.md +106 -0
- package/src/packlets/services/sqlite-storage.test.ts +48 -0
- package/src/packlets/services/sqlite-storage.ts +117 -20
- package/src/packlets/space/admission-discovery-extension.ts +91 -0
- package/src/packlets/space/auth.ts +92 -0
- package/src/packlets/space/control-pipeline.test.ts +165 -0
- package/src/packlets/space/control-pipeline.ts +229 -0
- package/src/packlets/space/index.ts +9 -0
- package/src/packlets/space/replication.browser.test.ts +58 -0
- package/src/packlets/space/space-manager.browser.test.ts +40 -0
- package/src/packlets/space/space-manager.ts +224 -0
- package/src/packlets/space/space-protocol.browser.test.ts +129 -0
- package/src/packlets/space/space-protocol.test.ts +158 -0
- package/src/packlets/space/space-protocol.ts +308 -0
- package/src/packlets/space/space.test.ts +181 -0
- package/src/packlets/space/space.ts +196 -0
- package/src/packlets/space/testing/change-metadata.ts +27 -0
- package/src/packlets/space/testing/index.ts +7 -0
- package/src/packlets/space/testing/test-agent-builder.ts +252 -0
- package/src/packlets/space-export/serialized-space-reader.ts +3 -1
- package/src/packlets/space-export/serialized-space-writer.ts +53 -30
- package/src/packlets/space-export/space-archive.test.ts +30 -0
- package/src/packlets/spaces/data-space-manager.test.ts +1 -1
- package/src/packlets/spaces/data-space-manager.ts +148 -33
- package/src/packlets/spaces/data-space.ts +29 -18
- package/src/packlets/spaces/edge-feed-replicator.test.ts +1 -1
- package/src/packlets/spaces/genesis.ts +1 -1
- package/src/packlets/spaces/spaces-service.test.ts +35 -22
- package/src/packlets/spaces/spaces-service.ts +259 -180
- package/src/packlets/storage/level.ts +3 -1
- package/src/packlets/system/system-service.test.ts +31 -13
- package/src/packlets/system/system-service.ts +65 -37
- package/src/packlets/testing/invitation-utils.ts +3 -3
- package/src/packlets/testing/test-builder.ts +35 -20
- package/src/packlets/worker/worker-runtime.ts +222 -260
- package/src/packlets/worker/worker-session.ts +108 -91
- package/src/testing/index.ts +1 -0
- package/src/version.ts +1 -1
- package/dist/lib/browser/chunk-QCWEHHJW.mjs +0 -24
- package/dist/lib/browser/chunk-QCWEHHJW.mjs.map +0 -7
- package/dist/lib/browser/chunk-XJRPB3GA.mjs +0 -22
- package/dist/lib/browser/chunk-XJRPB3GA.mjs.map +0 -7
- package/dist/lib/browser/chunk-XU5R2BMF.mjs +0 -8837
- package/dist/lib/browser/chunk-XU5R2BMF.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -876
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs +0 -88
- package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +0 -7
- package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs +0 -11
- package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs.map +0 -7
- package/dist/lib/browser/packlets/locks/browser.mjs +0 -86
- package/dist/lib/browser/packlets/locks/browser.mjs.map +0 -7
- package/dist/lib/browser/packlets/locks/node.mjs +0 -48
- package/dist/lib/browser/packlets/locks/node.mjs.map +0 -7
- package/dist/lib/browser/testing/index.mjs +0 -436
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2DT3MZRL.mjs +0 -22
- package/dist/lib/node-esm/chunk-2DT3MZRL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +0 -24
- package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-H5YTUD35.mjs +0 -8837
- package/dist/lib/node-esm/chunk-H5YTUD35.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -876
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs +0 -88
- package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +0 -7
- package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs +0 -11
- package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs.map +0 -7
- package/dist/lib/node-esm/packlets/locks/browser.mjs +0 -86
- package/dist/lib/node-esm/packlets/locks/browser.mjs.map +0 -7
- package/dist/lib/node-esm/packlets/locks/node.mjs +0 -48
- package/dist/lib/node-esm/packlets/locks/node.mjs.map +0 -7
- package/dist/lib/node-esm/testing/index.mjs +0 -436
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/packlets/services/client-rpc-server.d.ts +0 -24
- package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +0 -1
- package/dist/types/src/packlets/services/service-registry.d.ts +0 -15
- package/dist/types/src/packlets/services/service-registry.d.ts.map +0 -1
- package/dist/types/src/packlets/services/service-registry.test.d.ts +0 -2
- package/dist/types/src/packlets/services/service-registry.test.d.ts.map +0 -1
- package/dist/types/src/testing/setup.d.ts +0 -3
- package/dist/types/src/testing/setup.d.ts.map +0 -1
- package/src/packlets/services/client-rpc-server.ts +0 -111
- package/src/packlets/services/service-registry.test.ts +0 -78
- package/src/packlets/services/service-registry.ts +0 -36
- package/src/testing/setup.ts +0 -11
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/client-services",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "DXOS client services implementation",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"default": "./src/packlets/locks/node.ts"
|
|
20
20
|
},
|
|
21
21
|
"types": "./dist/types/src/packlets/locks/node.d.ts",
|
|
22
|
-
"browser": "./dist/lib/
|
|
23
|
-
"default": "./dist/lib/
|
|
22
|
+
"browser": "./dist/lib/packlets/locks/browser.mjs",
|
|
23
|
+
"default": "./dist/lib/packlets/locks/node.mjs"
|
|
24
24
|
},
|
|
25
25
|
"#diagnostics-broadcast": {
|
|
26
26
|
"source": {
|
|
@@ -28,22 +28,20 @@
|
|
|
28
28
|
"default": "./src/packlets/diagnostics/diagnostics-broadcast.ts"
|
|
29
29
|
},
|
|
30
30
|
"types": "./dist/types/src/packlets/diagnostics/diagnostics-broadcast.d.ts",
|
|
31
|
-
"browser": "./dist/lib/
|
|
32
|
-
"default": "./dist/lib/
|
|
31
|
+
"browser": "./dist/lib/packlets/diagnostics/browser-diagnostics-broadcast.mjs",
|
|
32
|
+
"default": "./dist/lib/packlets/diagnostics/diagnostics-broadcast.mjs"
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"exports": {
|
|
36
36
|
".": {
|
|
37
37
|
"source": "./src/index.ts",
|
|
38
38
|
"types": "./dist/types/src/index.d.ts",
|
|
39
|
-
"
|
|
40
|
-
"node": "./dist/lib/node-esm/index.mjs"
|
|
39
|
+
"import": "./dist/lib/index.mjs"
|
|
41
40
|
},
|
|
42
41
|
"./testing": {
|
|
43
42
|
"source": "./src/testing/index.ts",
|
|
44
43
|
"types": "./dist/types/src/testing/index.d.ts",
|
|
45
|
-
"
|
|
46
|
-
"node": "./dist/lib/node-esm/testing/index.mjs"
|
|
44
|
+
"import": "./dist/lib/testing.mjs"
|
|
47
45
|
}
|
|
48
46
|
},
|
|
49
47
|
"types": "dist/types/src/index.d.ts",
|
|
@@ -53,56 +51,62 @@
|
|
|
53
51
|
],
|
|
54
52
|
"dependencies": {
|
|
55
53
|
"@automerge/automerge": "3.3.0-fragments.2",
|
|
56
|
-
"@automerge/automerge-repo": "2.6.0-subduction.
|
|
54
|
+
"@automerge/automerge-repo": "2.6.0-subduction.40",
|
|
57
55
|
"@effect/experimental": "0.60.0",
|
|
56
|
+
"@effect/rpc": "0.75.1",
|
|
58
57
|
"@effect/sql": "0.51.1",
|
|
59
58
|
"@obsidize/tar-browserify": "^5.2.0",
|
|
60
59
|
"cbor-x": "^1.5.4",
|
|
60
|
+
"crc-32": "^1.2.2",
|
|
61
61
|
"effect": "3.21.4",
|
|
62
62
|
"platform": "^1.3.6",
|
|
63
|
-
"@dxos/async": "0.
|
|
64
|
-
"@dxos/client-protocol": "0.
|
|
65
|
-
"@dxos/
|
|
66
|
-
"@dxos/
|
|
67
|
-
"@dxos/context": "0.
|
|
68
|
-
"@dxos/credentials": "0.
|
|
69
|
-
"@dxos/crypto": "0.
|
|
70
|
-
"@dxos/debug": "0.
|
|
71
|
-
"@dxos/echo": "0.
|
|
72
|
-
"@dxos/echo-client": "0.
|
|
73
|
-
"@dxos/echo-host": "0.
|
|
74
|
-
"@dxos/echo-protocol": "0.
|
|
75
|
-
"@dxos/edge-client": "0.
|
|
76
|
-
"@dxos/effect": "0.
|
|
77
|
-
"@dxos/feed": "0.
|
|
78
|
-
"@dxos/feed-store": "0.
|
|
79
|
-
"@dxos/
|
|
80
|
-
"@dxos/
|
|
81
|
-
"@dxos/keyring": "0.
|
|
82
|
-
"@dxos/
|
|
83
|
-
"@dxos/
|
|
84
|
-
"@dxos/
|
|
85
|
-
"@dxos/
|
|
86
|
-
"@dxos/
|
|
87
|
-
"@dxos/
|
|
88
|
-
"@dxos/
|
|
89
|
-
"@dxos/
|
|
90
|
-
"@dxos/
|
|
91
|
-
"@dxos/
|
|
92
|
-
"@dxos/
|
|
93
|
-
"@dxos/teleport
|
|
94
|
-
"@dxos/teleport-extension-
|
|
95
|
-
"@dxos/
|
|
96
|
-
"@dxos/
|
|
97
|
-
"@dxos/
|
|
98
|
-
"@dxos/
|
|
63
|
+
"@dxos/async": "0.11.1",
|
|
64
|
+
"@dxos/client-protocol": "0.11.1",
|
|
65
|
+
"@dxos/codec-protobuf": "0.11.1",
|
|
66
|
+
"@dxos/config": "0.11.1",
|
|
67
|
+
"@dxos/context": "0.11.1",
|
|
68
|
+
"@dxos/credentials": "0.11.1",
|
|
69
|
+
"@dxos/crypto": "0.11.1",
|
|
70
|
+
"@dxos/debug": "0.11.1",
|
|
71
|
+
"@dxos/echo": "0.11.1",
|
|
72
|
+
"@dxos/echo-client": "0.11.1",
|
|
73
|
+
"@dxos/echo-host": "0.11.1",
|
|
74
|
+
"@dxos/echo-protocol": "0.11.1",
|
|
75
|
+
"@dxos/edge-client": "0.11.1",
|
|
76
|
+
"@dxos/effect": "0.11.1",
|
|
77
|
+
"@dxos/feed": "0.11.1",
|
|
78
|
+
"@dxos/feed-store": "0.11.1",
|
|
79
|
+
"@dxos/hypercore": "0.11.1",
|
|
80
|
+
"@dxos/invariant": "0.11.1",
|
|
81
|
+
"@dxos/keyring": "0.11.1",
|
|
82
|
+
"@dxos/keys": "0.11.1",
|
|
83
|
+
"@dxos/kv-store": "0.11.1",
|
|
84
|
+
"@dxos/lock-file": "0.11.1",
|
|
85
|
+
"@dxos/log": "0.11.1",
|
|
86
|
+
"@dxos/messaging": "0.11.1",
|
|
87
|
+
"@dxos/network-manager": "0.11.1",
|
|
88
|
+
"@dxos/node-std": "0.11.1",
|
|
89
|
+
"@dxos/protocols": "0.11.1",
|
|
90
|
+
"@dxos/random-access-storage": "0.11.1",
|
|
91
|
+
"@dxos/rpc": "0.11.1",
|
|
92
|
+
"@dxos/sql-sqlite": "0.11.1",
|
|
93
|
+
"@dxos/teleport": "0.11.1",
|
|
94
|
+
"@dxos/teleport-extension-gossip": "0.11.1",
|
|
95
|
+
"@dxos/teleport-extension-object-sync": "0.11.1",
|
|
96
|
+
"@dxos/teleport-extension-replicator": "0.11.1",
|
|
97
|
+
"@dxos/timeframe": "0.11.1",
|
|
98
|
+
"@dxos/tracing": "0.11.1",
|
|
99
|
+
"@dxos/util": "0.11.1",
|
|
100
|
+
"@dxos/websocket-rpc": "0.11.1"
|
|
99
101
|
},
|
|
100
102
|
"devDependencies": {
|
|
103
|
+
"@effect/platform-browser": "0.76.0",
|
|
104
|
+
"@effect/vitest": "0.29.0",
|
|
101
105
|
"@types/platform": "^1.3.4",
|
|
102
106
|
"@types/readable-stream": "^2.3.9",
|
|
107
|
+
"fast-check": "^3.19.0",
|
|
103
108
|
"get-port-please": "^3.1.1",
|
|
104
|
-
"@dxos/
|
|
105
|
-
"@dxos/test-utils": "0.10.0"
|
|
109
|
+
"@dxos/test-utils": "0.11.1"
|
|
106
110
|
},
|
|
107
111
|
"publishConfig": {
|
|
108
112
|
"access": "public"
|
package/src/index.ts
CHANGED
|
@@ -7,7 +7,9 @@ export * from './packlets/diagnostics';
|
|
|
7
7
|
export * from './packlets/identity';
|
|
8
8
|
export * from './packlets/invitations';
|
|
9
9
|
export * from './packlets/locks';
|
|
10
|
+
export * from './packlets/metadata';
|
|
10
11
|
export * from './packlets/services';
|
|
12
|
+
export * from './packlets/space';
|
|
11
13
|
export * from './packlets/space-export';
|
|
12
14
|
export * from './packlets/spaces';
|
|
13
15
|
export * from './packlets/storage';
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import * as EffectContext from 'effect/Context';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as Layer from 'effect/Layer';
|
|
8
|
+
import * as Option from 'effect/Option';
|
|
9
|
+
|
|
5
10
|
import { DeferredTask, Event, scheduleTask, synchronized } from '@dxos/async';
|
|
6
11
|
import { Context } from '@dxos/context';
|
|
7
12
|
import { Resource } from '@dxos/context';
|
|
8
|
-
import { type EdgeHttpClient } from '@dxos/edge-client';
|
|
13
|
+
import { type EdgeHttpClient, EdgeHttpClientService } from '@dxos/edge-client';
|
|
9
14
|
import { invariant } from '@dxos/invariant';
|
|
10
15
|
import { PublicKey } from '@dxos/keys';
|
|
11
16
|
import { log } from '@dxos/log';
|
|
@@ -14,15 +19,22 @@ import { SpaceState } from '@dxos/protocols/proto/dxos/client/services';
|
|
|
14
19
|
import { type Runtime } from '@dxos/protocols/proto/dxos/config';
|
|
15
20
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
16
21
|
|
|
17
|
-
import { type Identity } from '../identity';
|
|
18
|
-
import { type DataSpaceManager } from '../spaces';
|
|
19
|
-
|
|
22
|
+
import { type Identity, type IdentityProvider, IdentityProviderService } from '../identity';
|
|
23
|
+
import { type DataSpaceManager, DataSpaceManagerService } from '../spaces';
|
|
20
24
|
const AGENT_STATUS_QUERY_RETRY_INTERVAL = 5000;
|
|
21
25
|
const AGENT_STATUS_QUERY_RETRY_JITTER = 1000;
|
|
22
26
|
const AGENT_FEED_ADDED_CHECK_INTERVAL_MS = 3000;
|
|
23
27
|
|
|
24
28
|
export type EdgeAgentManagerConfig = {};
|
|
25
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Effect service tag for {@link EdgeAgentManager}.
|
|
32
|
+
*/
|
|
33
|
+
export class EdgeAgentManagerService extends EffectContext.Tag('@dxos/client-services/EdgeAgentManager')<
|
|
34
|
+
EdgeAgentManagerService,
|
|
35
|
+
EdgeAgentManager
|
|
36
|
+
>() {}
|
|
37
|
+
|
|
26
38
|
export class EdgeAgentManager extends Resource {
|
|
27
39
|
public agentStatusChanged = new Event<EdgeAgentStatus>();
|
|
28
40
|
|
|
@@ -37,11 +49,15 @@ export class EdgeAgentManager extends Resource {
|
|
|
37
49
|
private readonly _edgeFeatures: Runtime.Client.EdgeFeatures | undefined,
|
|
38
50
|
private readonly _edgeHttpClient: EdgeHttpClient | undefined,
|
|
39
51
|
private readonly _dataSpaceManager: DataSpaceManager,
|
|
40
|
-
private readonly
|
|
52
|
+
private readonly _identityProvider: IdentityProvider,
|
|
41
53
|
) {
|
|
42
54
|
super();
|
|
43
55
|
}
|
|
44
56
|
|
|
57
|
+
private get identity(): Identity {
|
|
58
|
+
return this._identityProvider();
|
|
59
|
+
}
|
|
60
|
+
|
|
45
61
|
public get agentStatus(): EdgeAgentStatus | undefined {
|
|
46
62
|
return this._agentStatus;
|
|
47
63
|
}
|
|
@@ -57,20 +73,20 @@ export class EdgeAgentManager extends Resource {
|
|
|
57
73
|
invariant(this._edgeFeatures?.agents);
|
|
58
74
|
|
|
59
75
|
const response = await this._edgeHttpClient.createAgent(ctx, {
|
|
60
|
-
identityDid: this.
|
|
61
|
-
haloSpaceId: this.
|
|
62
|
-
haloSpaceKey: this.
|
|
76
|
+
identityDid: this.identity.did,
|
|
77
|
+
haloSpaceId: this.identity.haloSpaceId,
|
|
78
|
+
haloSpaceKey: this.identity.haloSpaceKey.toHex(),
|
|
63
79
|
});
|
|
64
80
|
|
|
65
81
|
const deviceKey = PublicKey.fromHex(response.deviceKey);
|
|
66
82
|
|
|
67
|
-
if (await this.
|
|
83
|
+
if (await this.identity.authorizedDeviceKeys.has(deviceKey)) {
|
|
68
84
|
log.info('agent was already added to HALO, ignoring response', { response });
|
|
69
85
|
this._updateStatus(EdgeAgentStatus.ACTIVE, deviceKey);
|
|
70
86
|
return;
|
|
71
87
|
}
|
|
72
88
|
|
|
73
|
-
await this.
|
|
89
|
+
await this.identity.admitDevice({
|
|
74
90
|
deviceKey,
|
|
75
91
|
controlFeedKey: PublicKey.fromHex(response.feedKey),
|
|
76
92
|
// TODO: agents don't have data feed, should be removed
|
|
@@ -91,7 +107,7 @@ export class EdgeAgentManager extends Resource {
|
|
|
91
107
|
return;
|
|
92
108
|
}
|
|
93
109
|
|
|
94
|
-
this._lastKnownDeviceCount = this.
|
|
110
|
+
this._lastKnownDeviceCount = this.identity.authorizedDeviceKeys.size;
|
|
95
111
|
this._fetchAgentStatusTask = new DeferredTask(this._ctx, async () => {
|
|
96
112
|
await this._fetchAgentStatus(this._ctx);
|
|
97
113
|
});
|
|
@@ -103,12 +119,12 @@ export class EdgeAgentManager extends Resource {
|
|
|
103
119
|
}
|
|
104
120
|
});
|
|
105
121
|
|
|
106
|
-
this.
|
|
107
|
-
const maybeAgentWasCreated = this.
|
|
122
|
+
this.identity.stateUpdate.on(this._ctx, () => {
|
|
123
|
+
const maybeAgentWasCreated = this.identity.authorizedDeviceKeys.size > this._lastKnownDeviceCount;
|
|
108
124
|
if (this.agentExists || !maybeAgentWasCreated) {
|
|
109
125
|
return;
|
|
110
126
|
}
|
|
111
|
-
this._lastKnownDeviceCount = this.
|
|
127
|
+
this._lastKnownDeviceCount = this.identity.authorizedDeviceKeys.size;
|
|
112
128
|
this._fetchAgentStatusTask?.schedule();
|
|
113
129
|
});
|
|
114
130
|
}
|
|
@@ -123,7 +139,7 @@ export class EdgeAgentManager extends Resource {
|
|
|
123
139
|
try {
|
|
124
140
|
log('fetching agent status');
|
|
125
141
|
const { agent } = await this._edgeHttpClient.getAgentStatus(ctx, {
|
|
126
|
-
ownerIdentityDid: this.
|
|
142
|
+
ownerIdentityDid: this.identity.did,
|
|
127
143
|
});
|
|
128
144
|
const wasAgentCreatedDuringQuery = this._agentStatus === EdgeAgentStatus.ACTIVE;
|
|
129
145
|
if (!wasAgentCreatedDuringQuery) {
|
|
@@ -184,3 +200,28 @@ export class EdgeAgentManager extends Resource {
|
|
|
184
200
|
log.verbose('agent status update', { status });
|
|
185
201
|
}
|
|
186
202
|
}
|
|
203
|
+
|
|
204
|
+
export type EdgeAgentManagerLayerOptions = {
|
|
205
|
+
edgeFeatures?: Runtime.Client.EdgeFeatures;
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Effect Layer constructing a dormant {@link EdgeAgentManager}.
|
|
210
|
+
*/
|
|
211
|
+
export const EdgeAgentManagerLayer = (
|
|
212
|
+
options: EdgeAgentManagerLayerOptions = {},
|
|
213
|
+
): Layer.Layer<EdgeAgentManagerService, never, DataSpaceManagerService | IdentityProviderService> =>
|
|
214
|
+
Layer.effect(
|
|
215
|
+
EdgeAgentManagerService,
|
|
216
|
+
Effect.gen(function* () {
|
|
217
|
+
const dataSpaceManager = yield* DataSpaceManagerService;
|
|
218
|
+
const identityProvider = yield* IdentityProviderService;
|
|
219
|
+
const edgeHttpClient = yield* Effect.serviceOption(EdgeHttpClientService);
|
|
220
|
+
return new EdgeAgentManager(
|
|
221
|
+
options.edgeFeatures,
|
|
222
|
+
Option.getOrUndefined(edgeHttpClient),
|
|
223
|
+
dataSpaceManager,
|
|
224
|
+
identityProvider,
|
|
225
|
+
);
|
|
226
|
+
}),
|
|
227
|
+
);
|
|
@@ -2,32 +2,34 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as EffectStream from 'effect/Stream';
|
|
7
|
+
|
|
7
8
|
import { Context } from '@dxos/context';
|
|
8
9
|
import { type EdgeConnection } from '@dxos/edge-client';
|
|
9
10
|
import { EdgeAgentStatus } from '@dxos/protocols';
|
|
10
11
|
import {
|
|
11
|
-
type EdgeAgentService,
|
|
12
12
|
EdgeStatus,
|
|
13
13
|
QueryAgentStatusResponse,
|
|
14
14
|
type QueryEdgeStatusResponse,
|
|
15
15
|
} from '@dxos/protocols/proto/dxos/client/services';
|
|
16
|
+
import { type EdgeAgentService } from '@dxos/protocols/rpc';
|
|
16
17
|
|
|
17
18
|
import { type EdgeAgentManager } from './edge-agent-manager';
|
|
18
19
|
|
|
19
20
|
// TODO(wittjosiah): This service is not currently exposed on the client api, it must be called directly.
|
|
20
|
-
export class EdgeAgentServiceImpl implements EdgeAgentService {
|
|
21
|
-
constructor(
|
|
21
|
+
export class EdgeAgentServiceImpl implements EdgeAgentService.Handlers {
|
|
22
|
+
'constructor'(
|
|
22
23
|
private readonly _agentManagerProvider: () => Promise<EdgeAgentManager>,
|
|
23
24
|
private readonly _edgeConnection?: EdgeConnection,
|
|
24
25
|
) {}
|
|
25
26
|
|
|
26
27
|
// TODO(mykola): Reconcile with NetworkService.queryStatus.
|
|
27
|
-
queryEdgeStatus(): Stream<QueryEdgeStatusResponse> {
|
|
28
|
-
return
|
|
28
|
+
['EdgeAgentService.queryEdgeStatus'](): EffectStream.Stream<QueryEdgeStatusResponse, Error> {
|
|
29
|
+
return EffectStream.async<QueryEdgeStatusResponse, Error>((emit) => {
|
|
30
|
+
const ctx = Context.default();
|
|
29
31
|
const update = () => {
|
|
30
|
-
|
|
32
|
+
void emit.single({
|
|
31
33
|
status: this._edgeConnection?.status ?? {
|
|
32
34
|
state: EdgeStatus.ConnectionState.NOT_CONNECTED,
|
|
33
35
|
rtt: 0,
|
|
@@ -42,22 +44,30 @@ export class EdgeAgentServiceImpl implements EdgeAgentService {
|
|
|
42
44
|
|
|
43
45
|
this._edgeConnection?.statusChanged.on(ctx, update);
|
|
44
46
|
update();
|
|
47
|
+
|
|
48
|
+
return Effect.promise(() => ctx.dispose());
|
|
45
49
|
});
|
|
46
50
|
}
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
return
|
|
52
|
+
['EdgeAgentService.createAgent'](): Effect.Effect<void, Error> {
|
|
53
|
+
return Effect.tryPromise({
|
|
54
|
+
try: async () => (await this._agentManagerProvider()).createAgent(Context.default()),
|
|
55
|
+
catch: (error) => error as Error,
|
|
56
|
+
});
|
|
50
57
|
}
|
|
51
58
|
|
|
52
|
-
queryAgentStatus(): Stream<QueryAgentStatusResponse> {
|
|
53
|
-
return
|
|
54
|
-
|
|
59
|
+
['EdgeAgentService.queryAgentStatus'](): EffectStream.Stream<QueryAgentStatusResponse, Error> {
|
|
60
|
+
return EffectStream.async<QueryAgentStatusResponse, Error>((emit) => {
|
|
61
|
+
const ctx = Context.default();
|
|
62
|
+
void emit.single({ status: QueryAgentStatusResponse.AgentStatus.UNKNOWN });
|
|
55
63
|
void this._agentManagerProvider().then((agentManager) => {
|
|
56
|
-
|
|
64
|
+
void emit.single({ status: mapStatus(agentManager.agentStatus) });
|
|
57
65
|
agentManager.agentStatusChanged.on(ctx, (newStatus) => {
|
|
58
|
-
|
|
66
|
+
void emit.single({ status: mapStatus(newStatus) });
|
|
59
67
|
});
|
|
60
68
|
});
|
|
69
|
+
|
|
70
|
+
return Effect.promise(() => ctx.dispose());
|
|
61
71
|
});
|
|
62
72
|
}
|
|
63
73
|
}
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import * as Runtime from 'effect/Runtime';
|
|
5
6
|
import { afterEach, beforeEach, describe, expect, onTestFinished, test } from 'vitest';
|
|
6
7
|
|
|
7
8
|
import { Trigger } from '@dxos/async';
|
|
8
9
|
import { Context } from '@dxos/context';
|
|
10
|
+
import { EffectEx } from '@dxos/effect';
|
|
9
11
|
import { log } from '@dxos/log';
|
|
10
|
-
import {
|
|
12
|
+
import { subscribeStream } from '@dxos/protocols';
|
|
13
|
+
import { type Device } from '@dxos/protocols/proto/dxos/client/services';
|
|
11
14
|
|
|
12
15
|
import { type ServiceContext } from '../services';
|
|
13
16
|
import { createServiceContext } from '../testing';
|
|
@@ -15,7 +18,7 @@ import { DevicesServiceImpl } from './devices-service';
|
|
|
15
18
|
|
|
16
19
|
describe('DevicesService', () => {
|
|
17
20
|
let serviceContext: ServiceContext;
|
|
18
|
-
let devicesService:
|
|
21
|
+
let devicesService: DevicesServiceImpl;
|
|
19
22
|
|
|
20
23
|
beforeEach(async () => {
|
|
21
24
|
serviceContext = await createServiceContext();
|
|
@@ -29,38 +32,36 @@ describe('DevicesService', () => {
|
|
|
29
32
|
|
|
30
33
|
describe('updateDevice', () => {
|
|
31
34
|
test.skip('updates device profile', async () => {
|
|
32
|
-
const
|
|
33
|
-
const device = await devicesService.updateDevice({ label: 'test-device' });
|
|
35
|
+
const stream = devicesService['DevicesService.queryDevices']();
|
|
36
|
+
const device = await EffectEx.runPromise(devicesService['DevicesService.updateDevice']({ label: 'test-device' }));
|
|
34
37
|
const result = new Trigger<Device[] | undefined>();
|
|
35
|
-
|
|
36
|
-
result.wake(devices)
|
|
38
|
+
const cleanup = subscribeStream(Runtime.defaultRuntime, stream, {
|
|
39
|
+
onData: ({ devices }) => result.wake(devices),
|
|
37
40
|
});
|
|
38
|
-
onTestFinished(
|
|
41
|
+
onTestFinished(cleanup);
|
|
39
42
|
expect(device.profile?.label).to.equal('test-device');
|
|
40
43
|
});
|
|
41
44
|
});
|
|
42
45
|
|
|
43
46
|
describe('queryDevices', () => {
|
|
44
47
|
test('returns empty list if no identity is available', async () => {
|
|
45
|
-
const
|
|
48
|
+
const stream = devicesService['DevicesService.queryDevices']();
|
|
46
49
|
const result = new Trigger<Device[] | undefined>();
|
|
47
|
-
|
|
48
|
-
({ devices }) =>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
);
|
|
53
|
-
onTestFinished(() => query.close().catch((err) => log.catch(err)));
|
|
50
|
+
const cleanup = subscribeStream(Runtime.defaultRuntime, stream, {
|
|
51
|
+
onData: ({ devices }) => result.wake(devices),
|
|
52
|
+
onError: (err) => log.catch(err),
|
|
53
|
+
});
|
|
54
|
+
onTestFinished(cleanup);
|
|
54
55
|
expect(await result.wait()).to.be.length(0);
|
|
55
56
|
});
|
|
56
57
|
|
|
57
58
|
test('updates when identity is created', async () => {
|
|
58
|
-
const
|
|
59
|
+
const stream = devicesService['DevicesService.queryDevices']();
|
|
59
60
|
let result = new Trigger<Device[] | undefined>();
|
|
60
|
-
|
|
61
|
-
result.wake(devices)
|
|
61
|
+
const cleanup = subscribeStream(Runtime.defaultRuntime, stream, {
|
|
62
|
+
onData: ({ devices }) => result.wake(devices),
|
|
62
63
|
});
|
|
63
|
-
onTestFinished(
|
|
64
|
+
onTestFinished(cleanup);
|
|
64
65
|
expect(await result.wait()).to.be.length(0);
|
|
65
66
|
|
|
66
67
|
result = new Trigger<Device[] | undefined>();
|
|
@@ -2,41 +2,41 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as EffectStream from 'effect/Stream';
|
|
7
|
+
|
|
5
8
|
import { SubscriptionList } from '@dxos/async';
|
|
6
|
-
import { Stream } from '@dxos/codec-protobuf/stream';
|
|
7
9
|
import { type EdgeConnection } from '@dxos/edge-client';
|
|
8
10
|
import { invariant } from '@dxos/invariant';
|
|
9
|
-
import {
|
|
10
|
-
Device,
|
|
11
|
-
DeviceKind,
|
|
12
|
-
type DevicesService,
|
|
13
|
-
EdgeStatus,
|
|
14
|
-
type QueryDevicesResponse,
|
|
15
|
-
} from '@dxos/protocols/proto/dxos/client/services';
|
|
11
|
+
import { Device, DeviceKind, EdgeStatus, type QueryDevicesResponse } from '@dxos/protocols/proto/dxos/client/services';
|
|
16
12
|
import { type DeviceProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
13
|
+
import { type DevicesService } from '@dxos/protocols/rpc';
|
|
17
14
|
|
|
18
15
|
import { type IdentityManager } from '../identity';
|
|
19
16
|
|
|
20
|
-
export class DevicesServiceImpl implements DevicesService {
|
|
21
|
-
constructor(
|
|
17
|
+
export class DevicesServiceImpl implements DevicesService.Handlers {
|
|
18
|
+
'constructor'(
|
|
22
19
|
private readonly _identityManager: IdentityManager,
|
|
23
20
|
private readonly _edgeConnection?: EdgeConnection,
|
|
24
21
|
) {}
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
return
|
|
23
|
+
['DevicesService.updateDevice'](request: DeviceProfileDocument): Effect.Effect<Device, Error> {
|
|
24
|
+
return Effect.tryPromise({
|
|
25
|
+
try: async () => this._identityManager.updateDeviceProfile(request),
|
|
26
|
+
catch: (error) => error as Error,
|
|
27
|
+
});
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
queryDevices(): Stream<QueryDevicesResponse> {
|
|
31
|
-
return
|
|
30
|
+
['DevicesService.queryDevices'](): EffectStream.Stream<QueryDevicesResponse, Error> {
|
|
31
|
+
return EffectStream.async<QueryDevicesResponse, Error>((emit) => {
|
|
32
32
|
const update = () => {
|
|
33
33
|
const deviceKeys = this._identityManager.identity?.authorizedDeviceKeys;
|
|
34
34
|
if (!deviceKeys) {
|
|
35
|
-
|
|
35
|
+
void emit.single({ devices: [] });
|
|
36
36
|
} else {
|
|
37
37
|
invariant(this._identityManager.identity?.presence, 'presence not present');
|
|
38
38
|
const peers = this._identityManager.identity.presence.getPeersOnline();
|
|
39
|
-
|
|
39
|
+
void emit.single({
|
|
40
40
|
devices: Array.from(deviceKeys.entries()).map(([key, profile]) => {
|
|
41
41
|
const isMe = this._identityManager.identity?.deviceKey.equals(key);
|
|
42
42
|
let presence;
|
|
@@ -104,7 +104,7 @@ export class DevicesServiceImpl implements DevicesService {
|
|
|
104
104
|
|
|
105
105
|
update();
|
|
106
106
|
|
|
107
|
-
return () => subscriptions.clear();
|
|
107
|
+
return Effect.sync(() => subscriptions.clear());
|
|
108
108
|
});
|
|
109
109
|
}
|
|
110
110
|
}
|