@dxos/client-services 0.8.4-main.a4bbb77 → 0.8.4-main.abd8ff62ef
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-FZDVFED2.mjs → chunk-KW4WMU5R.mjs} +2698 -4599
- package/dist/lib/browser/chunk-KW4WMU5R.mjs.map +7 -0
- package/dist/lib/browser/chunk-QCWEHHJW.mjs +24 -0
- package/dist/lib/browser/chunk-QCWEHHJW.mjs.map +7 -0
- package/dist/lib/browser/chunk-XJRPB3GA.mjs +22 -0
- package/dist/lib/browser/chunk-XJRPB3GA.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +490 -228
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs +88 -0
- package/dist/lib/browser/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +7 -0
- package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs +11 -0
- package/dist/lib/browser/packlets/diagnostics/diagnostics-broadcast.mjs.map +7 -0
- package/dist/lib/browser/packlets/locks/browser.mjs +86 -0
- package/dist/lib/browser/packlets/locks/browser.mjs.map +7 -0
- package/dist/lib/browser/packlets/locks/node.mjs +48 -0
- package/dist/lib/browser/packlets/locks/node.mjs.map +7 -0
- package/dist/lib/browser/testing/index.mjs +60 -90
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/chunk-2DT3MZRL.mjs +22 -0
- package/dist/lib/node-esm/chunk-2DT3MZRL.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-2SZHAWBN.mjs +24 -0
- package/dist/lib/node-esm/chunk-2SZHAWBN.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-JDTIU3EP.mjs → chunk-NDMKP2CH.mjs} +2621 -4391
- package/dist/lib/node-esm/chunk-NDMKP2CH.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +490 -228
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs +88 -0
- package/dist/lib/node-esm/packlets/diagnostics/browser-diagnostics-broadcast.mjs.map +7 -0
- package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs +11 -0
- package/dist/lib/node-esm/packlets/diagnostics/diagnostics-broadcast.mjs.map +7 -0
- package/dist/lib/node-esm/packlets/locks/browser.mjs +86 -0
- package/dist/lib/node-esm/packlets/locks/browser.mjs.map +7 -0
- package/dist/lib/node-esm/packlets/locks/node.mjs +48 -0
- package/dist/lib/node-esm/packlets/locks/node.mjs.map +7 -0
- package/dist/lib/node-esm/testing/index.mjs +60 -90
- 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/agents/edge-agent-service.d.ts +2 -1
- package/dist/types/src/packlets/agents/edge-agent-service.d.ts.map +1 -1
- package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/devtools.d.ts +2 -2
- package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/feeds.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/keys.d.ts.map +1 -1
- package/dist/types/src/packlets/devtools/metadata.d.ts.map +1 -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/browser-diagnostics-broadcast.d.ts.map +1 -1
- 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 +2 -3
- package/dist/types/src/packlets/diagnostics/diagnostics.d.ts.map +1 -1
- package/dist/types/src/packlets/diagnostics/index.d.ts +1 -1
- package/dist/types/src/packlets/diagnostics/index.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/authenticator.d.ts +2 -2
- package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/contacts-service.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-manager.d.ts +6 -6
- package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts +8 -7
- package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-service.d.ts +6 -10
- package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity.d.ts +8 -11
- package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts +6 -5
- package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts +1 -1
- package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-guest-extenstion.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-host-extension.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-protocol.d.ts +7 -4
- package/dist/types/src/packlets/invitations/invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-state.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitation-topology.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/invitations-handler.d.ts +4 -4
- package/dist/types/src/packlets/invitations/invitations-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/invitations-service.d.ts +3 -3
- package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +4 -3
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/utils.d.ts.map +1 -1
- package/dist/types/src/packlets/locks/browser.d.ts.map +1 -1
- package/dist/types/src/packlets/locks/index.d.ts +1 -1
- package/dist/types/src/packlets/locks/index.d.ts.map +1 -1
- package/dist/types/src/packlets/locks/node.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 +5 -4
- package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
- package/dist/types/src/packlets/services/client-rpc-server.d.ts +5 -5
- package/dist/types/src/packlets/services/client-rpc-server.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 +13 -9
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +20 -7
- package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-registry.d.ts.map +1 -1
- package/dist/types/src/packlets/services/util.d.ts.map +1 -1
- package/dist/types/src/packlets/space-export/archive-format.d.ts +9 -0
- package/dist/types/src/packlets/space-export/archive-format.d.ts.map +1 -0
- package/dist/types/src/packlets/space-export/index.d.ts +4 -1
- package/dist/types/src/packlets/space-export/index.d.ts.map +1 -1
- package/dist/types/src/packlets/space-export/serialized-space-reader.d.ts +23 -0
- package/dist/types/src/packlets/space-export/serialized-space-reader.d.ts.map +1 -0
- package/dist/types/src/packlets/space-export/serialized-space-writer.d.ts +36 -0
- package/dist/types/src/packlets/space-export/serialized-space-writer.d.ts.map +1 -0
- 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 +7 -1
- 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/automerge-space-state.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts +28 -17
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space.d.ts +26 -9
- package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts +2 -2
- package/dist/types/src/packlets/spaces/edge-feed-replicator.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/epoch-migrations.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 +6 -9
- package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +10 -7
- 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/storage/profile-archive.d.ts.map +1 -1
- package/dist/types/src/packlets/storage/storage.d.ts.map +1 -1
- package/dist/types/src/packlets/storage/util.d.ts.map +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts +1 -1
- package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/credential-utils.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/invitation-utils.d.ts +6 -3
- package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
- package/dist/types/src/packlets/testing/test-builder.d.ts +6 -5
- package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/packlets/worker/worker-runtime.d.ts +41 -4
- package/dist/types/src/packlets/worker/worker-runtime.d.ts.map +1 -1
- package/dist/types/src/packlets/worker/worker-session.d.ts +2 -4
- package/dist/types/src/packlets/worker/worker-session.d.ts.map +1 -1
- package/dist/types/src/testing/setup.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 +70 -55
- package/src/index.ts +1 -0
- package/src/packlets/agents/edge-agent-manager.ts +8 -5
- package/src/packlets/agents/edge-agent-service.ts +15 -3
- package/src/packlets/devices/devices-service.test.ts +0 -1
- package/src/packlets/devices/devices-service.ts +1 -1
- package/src/packlets/devtools/devtools.ts +2 -3
- package/src/packlets/diagnostics/diagnostics.ts +1 -2
- package/src/packlets/diagnostics/index.ts +1 -1
- package/src/packlets/identity/authenticator.ts +2 -2
- package/src/packlets/identity/contacts-service.ts +0 -1
- package/src/packlets/identity/identity-manager.test.ts +5 -5
- package/src/packlets/identity/identity-manager.ts +23 -22
- package/src/packlets/identity/identity-recovery-manager.ts +22 -18
- package/src/packlets/identity/identity-service.test.ts +6 -27
- package/src/packlets/identity/identity-service.ts +13 -81
- package/src/packlets/identity/identity.test.ts +6 -6
- package/src/packlets/identity/identity.ts +11 -34
- package/src/packlets/invitations/device-invitation-protocol.ts +8 -7
- package/src/packlets/invitations/edge-invitation-handler.ts +9 -5
- package/src/packlets/invitations/invitation-guest-extenstion.ts +6 -4
- package/src/packlets/invitations/invitation-host-extension.ts +13 -14
- package/src/packlets/invitations/invitation-protocol.ts +7 -4
- package/src/packlets/invitations/invitation-state.ts +1 -15
- package/src/packlets/invitations/invitations-handler.test.ts +4 -5
- package/src/packlets/invitations/invitations-handler.ts +74 -22
- package/src/packlets/invitations/invitations-manager.ts +40 -15
- package/src/packlets/invitations/invitations-service.ts +9 -9
- package/src/packlets/invitations/space-invitation-protocol.test.ts +17 -16
- package/src/packlets/invitations/space-invitation-protocol.ts +11 -16
- package/src/packlets/locks/index.ts +1 -1
- package/src/packlets/logging/logging-service.ts +20 -16
- package/src/packlets/network/network-service.test.ts +0 -1
- package/src/packlets/network/network-service.ts +10 -8
- package/src/packlets/services/client-rpc-server.ts +19 -16
- 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 +138 -56
- package/src/packlets/services/service-host.test.ts +8 -8
- package/src/packlets/services/service-host.ts +70 -40
- package/src/packlets/services/service-registry.test.ts +0 -1
- package/src/packlets/space-export/archive-format.ts +42 -0
- package/src/packlets/space-export/index.ts +4 -1
- package/src/packlets/space-export/serialized-space-reader.ts +111 -0
- package/src/packlets/space-export/serialized-space-writer.ts +253 -0
- package/src/packlets/space-export/space-archive-reader.ts +64 -3
- package/src/packlets/space-export/space-archive-writer.ts +41 -3
- package/src/packlets/space-export/space-archive.test.ts +461 -0
- package/src/packlets/spaces/data-space-manager.test.ts +79 -13
- package/src/packlets/spaces/data-space-manager.ts +115 -115
- package/src/packlets/spaces/data-space.ts +58 -33
- package/src/packlets/spaces/edge-feed-replicator.test.ts +2 -2
- package/src/packlets/spaces/edge-feed-replicator.ts +12 -10
- package/src/packlets/spaces/epoch-migrations.ts +5 -5
- package/src/packlets/spaces/genesis.ts +6 -1
- package/src/packlets/spaces/notarization-plugin.test.ts +2 -2
- package/src/packlets/spaces/notarization-plugin.ts +10 -9
- package/src/packlets/spaces/spaces-service.test.ts +18 -11
- package/src/packlets/spaces/spaces-service.ts +123 -24
- package/src/packlets/storage/storage.ts +4 -4
- package/src/packlets/testing/invitation-utils.ts +10 -6
- package/src/packlets/testing/test-builder.ts +36 -10
- package/src/packlets/worker/worker-runtime.ts +188 -17
- package/src/packlets/worker/worker-session.ts +12 -18
- package/src/version.ts +1 -1
- package/dist/lib/browser/chunk-FZDVFED2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JDTIU3EP.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
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { describe, expect, onTestFinished, test } from 'vitest';
|
|
6
6
|
|
|
7
7
|
import { Trigger, chain } from '@dxos/async';
|
|
8
|
+
import { Context } from '@dxos/context';
|
|
8
9
|
import { raise } from '@dxos/debug';
|
|
9
10
|
import { AlreadyJoinedError } from '@dxos/protocols';
|
|
10
11
|
import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
|
|
@@ -24,26 +25,26 @@ describe('services/space-invitations-protocol', () => {
|
|
|
24
25
|
test('genesis', async () => {
|
|
25
26
|
const [peer] = await chain<ServiceContext>([createIdentity, closeAfterTest])(createPeers(1));
|
|
26
27
|
|
|
27
|
-
const space = await peer.dataSpaceManager!.createSpace();
|
|
28
|
+
const space = await peer.dataSpaceManager!.createSpace(new Context());
|
|
28
29
|
expect(peer.dataSpaceManager!.spaces.has(space.key)).to.be.true;
|
|
29
30
|
|
|
30
|
-
await space.close();
|
|
31
|
+
await space.close(new Context());
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
test('genesis & ready', async () => {
|
|
34
35
|
const [peer] = await chain<ServiceContext>([createIdentity, closeAfterTest])(createPeers(1));
|
|
35
36
|
|
|
36
|
-
const space = await peer.dataSpaceManager!.createSpace();
|
|
37
|
+
const space = await peer.dataSpaceManager!.createSpace(new Context());
|
|
37
38
|
expect(peer.dataSpaceManager!.spaces.has(space.key)).to.be.true;
|
|
38
39
|
|
|
39
40
|
await peer.dataSpaceManager?.waitUntilSpaceReady(space.key);
|
|
40
|
-
await space.close();
|
|
41
|
+
await space.close(new Context());
|
|
41
42
|
});
|
|
42
43
|
|
|
43
44
|
test('invitation with no auth', async () => {
|
|
44
45
|
const [host, guest] = await chain<ServiceContext>([createIdentity, closeAfterTest])(createPeers(2));
|
|
45
46
|
|
|
46
|
-
const space1 = await host.dataSpaceManager!.createSpace();
|
|
47
|
+
const space1 = await host.dataSpaceManager!.createSpace(new Context());
|
|
47
48
|
const spaceKey = space1.key;
|
|
48
49
|
|
|
49
50
|
await Promise.all(performInvitation({ host, guest, options: { kind: Invitation.Kind.SPACE, spaceKey } }));
|
|
@@ -59,15 +60,15 @@ describe('services/space-invitations-protocol', () => {
|
|
|
59
60
|
|
|
60
61
|
await space2.inner.controlPipeline.state.waitUntilTimeframe(space1.inner.controlPipeline.state.timeframe);
|
|
61
62
|
|
|
62
|
-
await space1.close();
|
|
63
|
-
await space2.close();
|
|
63
|
+
await space1.close(new Context());
|
|
64
|
+
await space2.close(new Context());
|
|
64
65
|
}
|
|
65
66
|
});
|
|
66
67
|
|
|
67
68
|
test('invitation when already joined', async () => {
|
|
68
69
|
const [host, guest] = await chain<ServiceContext>([createIdentity, closeAfterTest])(createPeers(2));
|
|
69
70
|
|
|
70
|
-
const space1 = await host.dataSpaceManager!.createSpace();
|
|
71
|
+
const space1 = await host.dataSpaceManager!.createSpace(new Context());
|
|
71
72
|
const spaceKey = space1.key;
|
|
72
73
|
|
|
73
74
|
await Promise.all(performInvitation({ host, guest, options: { kind: Invitation.Kind.SPACE, spaceKey } }));
|
|
@@ -96,7 +97,7 @@ describe('services/space-invitations-protocol', () => {
|
|
|
96
97
|
|
|
97
98
|
let attempt = 0;
|
|
98
99
|
|
|
99
|
-
const space1 = await host.dataSpaceManager!.createSpace();
|
|
100
|
+
const space1 = await host.dataSpaceManager!.createSpace(new Context());
|
|
100
101
|
|
|
101
102
|
const [{ invitation: invitation1, error: error1 }, { invitation: invitation2, error: error2 }] = await Promise.all(
|
|
102
103
|
performInvitation({
|
|
@@ -143,8 +144,8 @@ describe('services/space-invitations-protocol', () => {
|
|
|
143
144
|
|
|
144
145
|
await space2.inner.controlPipeline.state.waitUntilTimeframe(space1.inner.controlPipeline.state.timeframe);
|
|
145
146
|
|
|
146
|
-
await space1.close();
|
|
147
|
-
await space2.close();
|
|
147
|
+
await space1.close(new Context());
|
|
148
|
+
await space2.close(new Context());
|
|
148
149
|
}
|
|
149
150
|
|
|
150
151
|
expect(
|
|
@@ -154,14 +155,14 @@ describe('services/space-invitations-protocol', () => {
|
|
|
154
155
|
|
|
155
156
|
test('timeout', async () => {
|
|
156
157
|
const [host, guest] = await chain<ServiceContext>([createIdentity, closeAfterTest])(createPeers(2));
|
|
157
|
-
const space = await host.dataSpaceManager!.createSpace();
|
|
158
|
+
const space = await host.dataSpaceManager!.createSpace(new Context());
|
|
158
159
|
const hostInvitation = await createInvitation(host, {
|
|
159
160
|
kind: Invitation.Kind.SPACE,
|
|
160
161
|
spaceKey: space.key,
|
|
161
162
|
timeout: 100,
|
|
162
163
|
});
|
|
163
164
|
const invitation = hostInvitation.get();
|
|
164
|
-
await host.close();
|
|
165
|
+
await host.close(Context.default());
|
|
165
166
|
|
|
166
167
|
const guestTimeout = new Trigger();
|
|
167
168
|
const guestInvitation = await acceptInvitation(guest, invitation);
|
|
@@ -180,7 +181,7 @@ describe('services/space-invitations-protocol', () => {
|
|
|
180
181
|
const hostConnected = new Trigger<Invitation>();
|
|
181
182
|
const guestConnected = new Trigger<Invitation>();
|
|
182
183
|
|
|
183
|
-
const space1 = await host.dataSpaceManager!.createSpace();
|
|
184
|
+
const space1 = await host.dataSpaceManager!.createSpace(new Context());
|
|
184
185
|
|
|
185
186
|
const invitationPromises = performInvitation({
|
|
186
187
|
host,
|
|
@@ -213,7 +214,7 @@ describe('services/space-invitations-protocol', () => {
|
|
|
213
214
|
expect(invitation1?.state).to.eq(Invitation.State.CANCELLED);
|
|
214
215
|
expect(error).to.exist;
|
|
215
216
|
|
|
216
|
-
await space1.close();
|
|
217
|
+
await space1.close(new Context());
|
|
217
218
|
});
|
|
218
219
|
|
|
219
220
|
// TODO(burdon): Flaky.
|
|
@@ -223,7 +224,7 @@ describe('services/space-invitations-protocol', () => {
|
|
|
223
224
|
// createPeers(GUEST_COUNT + 1)
|
|
224
225
|
// );
|
|
225
226
|
|
|
226
|
-
// const hostSpace = await host.dataSpaceManager!.createSpace();
|
|
227
|
+
// const hostSpace = await host.dataSpaceManager!.createSpace(new Context());
|
|
227
228
|
// const swarmKey = PublicKey.random();
|
|
228
229
|
// const hostObservable = await host.spaceInvitations!.createInvitation(hostSpace, {
|
|
229
230
|
// swarmKey,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { type Context } from '@dxos/context';
|
|
5
6
|
import {
|
|
6
7
|
createCancelDelegatedSpaceInvitationCredential,
|
|
7
8
|
createDelegatedSpaceInvitationCredential,
|
|
@@ -12,13 +13,7 @@ import { invariant } from '@dxos/invariant';
|
|
|
12
13
|
import { type Keyring } from '@dxos/keyring';
|
|
13
14
|
import { type PublicKey } from '@dxos/keys';
|
|
14
15
|
import { log } from '@dxos/log';
|
|
15
|
-
import {
|
|
16
|
-
AlreadyJoinedError,
|
|
17
|
-
type ApiError,
|
|
18
|
-
AuthorizationError,
|
|
19
|
-
InvalidInvitationError,
|
|
20
|
-
SpaceNotFoundError,
|
|
21
|
-
} from '@dxos/protocols';
|
|
16
|
+
import { AlreadyJoinedError, AuthorizationError, InvalidInvitationError, SpaceNotFoundError } from '@dxos/protocols';
|
|
22
17
|
import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
|
|
23
18
|
import { type ProfileDocument, SpaceMember } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
24
19
|
import {
|
|
@@ -28,7 +23,6 @@ import {
|
|
|
28
23
|
} from '@dxos/protocols/proto/dxos/halo/invitations';
|
|
29
24
|
|
|
30
25
|
import { type DataSpaceManager, type SigningContext } from '../spaces';
|
|
31
|
-
|
|
32
26
|
import { type InvitationProtocol } from './invitation-protocol';
|
|
33
27
|
import { computeExpirationTime } from './utils';
|
|
34
28
|
|
|
@@ -48,16 +42,16 @@ export class SpaceInvitationProtocol implements InvitationProtocol {
|
|
|
48
42
|
};
|
|
49
43
|
}
|
|
50
44
|
|
|
51
|
-
checkCanInviteNewMembers():
|
|
45
|
+
checkCanInviteNewMembers(): Error | undefined {
|
|
52
46
|
if (this._spaceKey == null) {
|
|
53
|
-
return new InvalidInvitationError('No spaceKey was provided for a space invitation.');
|
|
47
|
+
return new InvalidInvitationError({ message: 'No spaceKey was provided for a space invitation.' });
|
|
54
48
|
}
|
|
55
49
|
const space = this._spaceManager.spaces.get(this._spaceKey);
|
|
56
50
|
if (space == null) {
|
|
57
51
|
return new SpaceNotFoundError(this._spaceKey);
|
|
58
52
|
}
|
|
59
53
|
if (!space?.inner.spaceState.hasMembershipManagementPermission(this._signingContext.identityKey)) {
|
|
60
|
-
return new AuthorizationError('No member management permission.');
|
|
54
|
+
return new AuthorizationError({ message: 'No member management permission.' });
|
|
61
55
|
}
|
|
62
56
|
return undefined;
|
|
63
57
|
}
|
|
@@ -148,10 +142,10 @@ export class SpaceInvitationProtocol implements InvitationProtocol {
|
|
|
148
142
|
|
|
149
143
|
checkInvitation(invitation: Partial<Invitation>): InvalidInvitationError | AlreadyJoinedError | undefined {
|
|
150
144
|
if (invitation.spaceKey == null) {
|
|
151
|
-
return new InvalidInvitationError('No spaceKey was provided for a space invitation.');
|
|
145
|
+
return new InvalidInvitationError({ message: 'No spaceKey was provided for a space invitation.' });
|
|
152
146
|
}
|
|
153
147
|
if (this._spaceManager.spaces.has(invitation.spaceKey)) {
|
|
154
|
-
return new AlreadyJoinedError('Already joined space.');
|
|
148
|
+
return new AlreadyJoinedError({ message: 'Already joined space.' });
|
|
155
149
|
}
|
|
156
150
|
}
|
|
157
151
|
|
|
@@ -176,7 +170,7 @@ export class SpaceInvitationProtocol implements InvitationProtocol {
|
|
|
176
170
|
};
|
|
177
171
|
}
|
|
178
172
|
|
|
179
|
-
async accept(response: AdmissionResponse): Promise<Partial<Invitation>> {
|
|
173
|
+
async accept(ctx: Context, response: AdmissionResponse): Promise<Partial<Invitation>> {
|
|
180
174
|
invariant(response.space);
|
|
181
175
|
const { credential, controlTimeframe, dataTimeframe } = response.space;
|
|
182
176
|
const assertion = getCredentialAssertion(credential);
|
|
@@ -184,15 +178,16 @@ export class SpaceInvitationProtocol implements InvitationProtocol {
|
|
|
184
178
|
invariant(credential.subject.id.equals(this._signingContext.identityKey));
|
|
185
179
|
|
|
186
180
|
if (this._spaceManager.spaces.has(assertion.spaceKey)) {
|
|
187
|
-
throw new AlreadyJoinedError('Already joined space.');
|
|
181
|
+
throw new AlreadyJoinedError({ message: 'Already joined space.' });
|
|
188
182
|
}
|
|
189
183
|
|
|
190
184
|
// Create local space.
|
|
191
|
-
await this._spaceManager.acceptSpace({
|
|
185
|
+
await this._spaceManager.acceptSpace(ctx, {
|
|
192
186
|
spaceKey: assertion.spaceKey,
|
|
193
187
|
genesisFeedKey: assertion.genesisFeedKey,
|
|
194
188
|
controlTimeframe,
|
|
195
189
|
dataTimeframe,
|
|
190
|
+
tags: assertion.tags,
|
|
196
191
|
});
|
|
197
192
|
|
|
198
193
|
await this._signingContext.recordCredential(credential);
|
|
@@ -5,13 +5,7 @@
|
|
|
5
5
|
import { Event } from '@dxos/async';
|
|
6
6
|
import { Stream } from '@dxos/codec-protobuf/stream';
|
|
7
7
|
import { PublicKey } from '@dxos/keys';
|
|
8
|
-
import {
|
|
9
|
-
type LogLevel,
|
|
10
|
-
type LogProcessor,
|
|
11
|
-
type LogEntry as NaturalLogEntry,
|
|
12
|
-
getContextFromEntry,
|
|
13
|
-
log,
|
|
14
|
-
} from '@dxos/log';
|
|
8
|
+
import { type LogLevel, type LogProcessor, type LogEntry as NaturalLogEntry, log } from '@dxos/log';
|
|
15
9
|
import {
|
|
16
10
|
type ControlMetricsRequest,
|
|
17
11
|
type ControlMetricsResponse,
|
|
@@ -22,10 +16,14 @@ import {
|
|
|
22
16
|
type QueryMetricsRequest,
|
|
23
17
|
type QueryMetricsResponse,
|
|
24
18
|
} from '@dxos/protocols/proto/dxos/client/services';
|
|
25
|
-
import {
|
|
19
|
+
import { numericalValues, tracer } from '@dxos/util';
|
|
26
20
|
|
|
27
21
|
/**
|
|
28
22
|
* Logging service used to spy on logs of the host.
|
|
23
|
+
*
|
|
24
|
+
* @deprecated This was created so that logs from the shared worker (WorkerClientServices) could be
|
|
25
|
+
* seen in the main window console without opening the shared worker DevTools. Shared worker client
|
|
26
|
+
* services is deprecated; dedicated worker logs already show in the main window console.
|
|
29
27
|
*/
|
|
30
28
|
export class LoggingServiceImpl implements LoggingService {
|
|
31
29
|
private readonly _logs = new Event<NaturalLogEntry>();
|
|
@@ -37,7 +35,7 @@ export class LoggingServiceImpl implements LoggingService {
|
|
|
37
35
|
}
|
|
38
36
|
|
|
39
37
|
async close(): Promise<void> {
|
|
40
|
-
const index = log.runtimeConfig.processors.findIndex((processor) => processor === this._logProcessor);
|
|
38
|
+
const index = log.runtimeConfig.processors.findIndex((processor: LogProcessor) => processor === this._logProcessor);
|
|
41
39
|
log.runtimeConfig.processors.splice(index, 1);
|
|
42
40
|
}
|
|
43
41
|
|
|
@@ -110,19 +108,25 @@ export class LoggingServiceImpl implements LoggingService {
|
|
|
110
108
|
return;
|
|
111
109
|
}
|
|
112
110
|
|
|
111
|
+
const { filename, line, context: scopeName } = entry.computedMeta;
|
|
112
|
+
const recordContext: Record<string, any> = { ...entry.computedContext };
|
|
113
|
+
if (entry.computedError !== undefined) {
|
|
114
|
+
recordContext.error = entry.computedError;
|
|
115
|
+
}
|
|
116
|
+
|
|
113
117
|
const record: LogEntry = {
|
|
114
|
-
|
|
115
|
-
message: entry.message ??
|
|
116
|
-
context:
|
|
117
|
-
timestamp: new Date(),
|
|
118
|
+
level: entry.level,
|
|
119
|
+
message: entry.message ?? entry.computedError ?? '',
|
|
120
|
+
context: recordContext,
|
|
121
|
+
timestamp: new Date(entry.timestamp),
|
|
118
122
|
meta: {
|
|
119
123
|
// TODO(dmaretskyi): Fix proto.
|
|
120
|
-
file:
|
|
121
|
-
line:
|
|
124
|
+
file: filename ?? '',
|
|
125
|
+
line: line ?? 0,
|
|
122
126
|
scope: {
|
|
123
127
|
hostSessionId: this._sessionId,
|
|
124
128
|
uptimeSeconds: (Date.now() - this._started) / 1000,
|
|
125
|
-
name:
|
|
129
|
+
name: scopeName ?? '',
|
|
126
130
|
},
|
|
127
131
|
},
|
|
128
132
|
};
|
|
@@ -10,7 +10,6 @@ import { ConnectionState, type NetworkService } from '@dxos/protocols/proto/dxos
|
|
|
10
10
|
|
|
11
11
|
import { type ServiceContext } from '../services';
|
|
12
12
|
import { createServiceContext } from '../testing';
|
|
13
|
-
|
|
14
13
|
import { NetworkServiceImpl } from './network-service';
|
|
15
14
|
|
|
16
15
|
describe('NetworkService', () => {
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { type RequestOptions } from '@dxos/codec-protobuf';
|
|
5
6
|
import { Stream } from '@dxos/codec-protobuf/stream';
|
|
7
|
+
import { Context } from '@dxos/context';
|
|
6
8
|
import { type EdgeConnection } from '@dxos/edge-client';
|
|
7
9
|
import { type SignalManager } from '@dxos/messaging';
|
|
8
10
|
import { type SwarmNetworkManager } from '@dxos/network-manager';
|
|
@@ -47,16 +49,16 @@ export class NetworkServiceImpl implements NetworkService {
|
|
|
47
49
|
await this.networkManager.setConnectionState(request.swarm);
|
|
48
50
|
}
|
|
49
51
|
|
|
50
|
-
async joinSwarm(request: JoinRequest): Promise<void> {
|
|
51
|
-
return this.signalManager.join(request);
|
|
52
|
+
async joinSwarm(request: JoinRequest, options?: RequestOptions): Promise<void> {
|
|
53
|
+
return this.signalManager.join(options?.ctx ?? Context.default(), request);
|
|
52
54
|
}
|
|
53
55
|
|
|
54
|
-
async leaveSwarm(request: LeaveRequest): Promise<void> {
|
|
55
|
-
return this.signalManager.leave(request);
|
|
56
|
+
async leaveSwarm(request: LeaveRequest, options?: RequestOptions): Promise<void> {
|
|
57
|
+
return this.signalManager.leave(options?.ctx ?? Context.default(), request);
|
|
56
58
|
}
|
|
57
59
|
|
|
58
|
-
async querySwarm(request: QueryRequest): Promise<SwarmResponse> {
|
|
59
|
-
return this.signalManager.query(request);
|
|
60
|
+
async querySwarm(request: QueryRequest, options?: RequestOptions): Promise<SwarmResponse> {
|
|
61
|
+
return this.signalManager.query(options?.ctx ?? Context.default(), request);
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
subscribeSwarmState(request: SubscribeSwarmStateRequest): Stream<SwarmResponse> {
|
|
@@ -69,8 +71,8 @@ export class NetworkServiceImpl implements NetworkService {
|
|
|
69
71
|
});
|
|
70
72
|
}
|
|
71
73
|
|
|
72
|
-
async sendMessage(message: Message): Promise<void> {
|
|
73
|
-
return this.signalManager.sendMessage(message);
|
|
74
|
+
async sendMessage(message: Message, options?: RequestOptions): Promise<void> {
|
|
75
|
+
return this.signalManager.sendMessage(options?.ctx ?? Context.default(), message);
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
subscribeMessages(peer: Peer): Stream<Message> {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type ClientServices } from '@dxos/client-protocol';
|
|
6
|
-
import { type Any, type ServiceHandler, Stream } from '@dxos/codec-protobuf';
|
|
6
|
+
import { type Any, type RequestOptions, type ServiceHandler, Stream } from '@dxos/codec-protobuf';
|
|
7
7
|
import { raise } from '@dxos/debug';
|
|
8
8
|
import { RpcPeer, type RpcPeerOptions, type ServiceBundle, parseMethodName } from '@dxos/rpc';
|
|
9
9
|
import { MapCounter, trace } from '@dxos/tracing';
|
|
@@ -11,17 +11,19 @@ import { type MaybePromise } from '@dxos/util';
|
|
|
11
11
|
|
|
12
12
|
import { type ServiceRegistry } from './service-registry';
|
|
13
13
|
|
|
14
|
-
export type
|
|
14
|
+
export type ClientRpcServerProps = {
|
|
15
15
|
serviceRegistry: ServiceRegistry<ClientServices>;
|
|
16
16
|
handleCall?: (
|
|
17
17
|
method: string,
|
|
18
18
|
params: Any,
|
|
19
|
-
handler: (method: string, params: Any) => MaybePromise<Any>,
|
|
19
|
+
handler: (method: string, params: Any, options?: RequestOptions) => MaybePromise<Any>,
|
|
20
|
+
options?: RequestOptions,
|
|
20
21
|
) => Promise<Any>;
|
|
21
22
|
handleStream?: (
|
|
22
23
|
method: string,
|
|
23
24
|
params: Any,
|
|
24
|
-
handler: (method: string, params: Any) => Stream<Any>,
|
|
25
|
+
handler: (method: string, params: Any, options?: RequestOptions) => Stream<Any>,
|
|
26
|
+
options?: RequestOptions,
|
|
25
27
|
) => MaybePromise<Stream<Any>>;
|
|
26
28
|
} & Omit<RpcPeerOptions, 'callHandler' | 'streamHandler'>;
|
|
27
29
|
|
|
@@ -30,8 +32,8 @@ export class ClientRpcServer {
|
|
|
30
32
|
private readonly _serviceRegistry: ServiceRegistry<ClientServices>;
|
|
31
33
|
private readonly _rpcPeer: RpcPeer;
|
|
32
34
|
private readonly _handlerCache = new Map<string, ServiceHandler<any>>();
|
|
33
|
-
private readonly _handleCall:
|
|
34
|
-
private readonly _handleStream:
|
|
35
|
+
private readonly _handleCall: ClientRpcServerProps['handleCall'];
|
|
36
|
+
private readonly _handleStream: ClientRpcServerProps['handleStream'];
|
|
35
37
|
|
|
36
38
|
@trace.metricsCounter()
|
|
37
39
|
private readonly _callMetrics = new MapCounter();
|
|
@@ -41,7 +43,7 @@ export class ClientRpcServer {
|
|
|
41
43
|
return Object.keys(this._serviceRegistry.services);
|
|
42
44
|
}
|
|
43
45
|
|
|
44
|
-
constructor(params:
|
|
46
|
+
constructor(params: ClientRpcServerProps) {
|
|
45
47
|
const { serviceRegistry, handleCall, handleStream, ...rpcOptions } = params;
|
|
46
48
|
this._handleCall = handleCall;
|
|
47
49
|
this._handleStream = handleStream;
|
|
@@ -49,32 +51,33 @@ export class ClientRpcServer {
|
|
|
49
51
|
this._serviceRegistry = serviceRegistry;
|
|
50
52
|
this._rpcPeer = new RpcPeer({
|
|
51
53
|
...rpcOptions,
|
|
52
|
-
callHandler: (method, params) => {
|
|
54
|
+
callHandler: (method, params, options) => {
|
|
53
55
|
const [serviceName, methodName] = parseMethodName(method);
|
|
54
|
-
const handler = (method: string, params: Any
|
|
56
|
+
const handler = (method: string, params: Any, handlerOptions?: RequestOptions) =>
|
|
57
|
+
this._getServiceHandler(serviceName).call(method, params, handlerOptions);
|
|
55
58
|
|
|
56
59
|
this._callMetrics.inc(`${serviceName}.${methodName} request`);
|
|
57
60
|
|
|
58
61
|
if (this._handleCall) {
|
|
59
|
-
return this._handleCall(methodName, params, handler);
|
|
62
|
+
return this._handleCall(methodName, params, handler, options);
|
|
60
63
|
} else {
|
|
61
|
-
return handler(methodName, params);
|
|
64
|
+
return handler(methodName, params, options);
|
|
62
65
|
}
|
|
63
66
|
},
|
|
64
|
-
streamHandler: (method, params) => {
|
|
67
|
+
streamHandler: (method, params, options) => {
|
|
65
68
|
const [serviceName, methodName] = parseMethodName(method);
|
|
66
|
-
const handler = (method: string, params: Any) =>
|
|
67
|
-
this._getServiceHandler(serviceName).callStream(method, params);
|
|
69
|
+
const handler = (method: string, params: Any, handlerOptions?: RequestOptions) =>
|
|
70
|
+
this._getServiceHandler(serviceName).callStream(method, params, handlerOptions);
|
|
68
71
|
|
|
69
72
|
this._callMetrics.inc(`${serviceName}.${methodName} request stream`);
|
|
70
73
|
|
|
71
74
|
if (this._handleStream) {
|
|
72
|
-
return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params, handler)), (data) => {
|
|
75
|
+
return Stream.map(Stream.unwrapPromise(this._handleStream(methodName, params, handler, options)), (data) => {
|
|
73
76
|
this._callMetrics.inc(`${serviceName}.${methodName} response stream`);
|
|
74
77
|
return data;
|
|
75
78
|
});
|
|
76
79
|
} else {
|
|
77
|
-
return handler(methodName, params);
|
|
80
|
+
return handler(methodName, params, options);
|
|
78
81
|
}
|
|
79
82
|
},
|
|
80
83
|
});
|