@dxos/client-services 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5
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-ERQJUBAW.mjs → chunk-HYGNOM23.mjs} +4279 -3342
- package/dist/lib/browser/chunk-HYGNOM23.mjs.map +7 -0
- package/dist/lib/browser/chunk-NQSC7HOE.mjs +22 -0
- package/dist/lib/browser/chunk-NQSC7HOE.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/index.mjs +539 -98
- 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 +93 -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 +126 -0
- package/dist/lib/browser/packlets/locks/browser.mjs.map +7 -0
- package/dist/lib/browser/packlets/locks/node.mjs +66 -0
- package/dist/lib/browser/packlets/locks/node.mjs.map +7 -0
- package/dist/lib/browser/testing/index.mjs +45 -26
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- 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-TMEG7JOG.mjs → chunk-GFT7MAQE.mjs} +3764 -2695
- package/dist/lib/node-esm/chunk-GFT7MAQE.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-PKEGMOQ4.mjs +22 -0
- package/dist/lib/node-esm/chunk-PKEGMOQ4.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +539 -98
- 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 +93 -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 +126 -0
- package/dist/lib/node-esm/packlets/locks/browser.mjs.map +7 -0
- package/dist/lib/node-esm/packlets/locks/node.mjs +66 -0
- package/dist/lib/node-esm/packlets/locks/node.mjs.map +7 -0
- package/dist/lib/node-esm/testing/index.mjs +45 -26
- 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 +3 -2
- 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 +20 -20
- 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 +1 -1
- package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
- package/dist/types/src/packlets/diagnostics/browser-diagnostics-broadcast.d.ts +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 +1 -1
- package/dist/types/src/packlets/diagnostics/diagnostics-broadcast.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 +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 +7 -7
- package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/identity/identity-recovery-manager.d.ts +7 -6
- 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 +9 -12
- 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 +2 -2
- package/dist/types/src/packlets/invitations/edge-invitation-handler.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/index.d.ts +1 -1
- package/dist/types/src/packlets/invitations/index.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 +8 -5
- 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/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 +4 -4
- package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
- package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +5 -4
- 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/index.d.ts +2 -2
- package/dist/types/src/packlets/locks/index.d.ts.map +1 -1
- package/dist/types/src/packlets/logging/logging-service.d.ts +5 -1
- package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
- package/dist/types/src/packlets/network/network-service.d.ts +7 -6
- 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 +14 -9
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-host.d.ts +21 -8
- package/dist/types/src/packlets/services/service-host.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 +8 -2
- 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 +1 -1
- 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 +29 -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 +30 -13
- 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/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 -6
- package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +18 -8
- package/dist/types/src/packlets/spaces/spaces-service.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/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/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 +8 -7
- 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/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 +72 -48
- package/src/index.ts +1 -0
- package/src/packlets/agents/edge-agent-manager.ts +10 -7
- package/src/packlets/agents/edge-agent-service.ts +17 -5
- package/src/packlets/devices/devices-service.test.ts +3 -3
- package/src/packlets/devices/devices-service.ts +2 -2
- package/src/packlets/devtools/devtools.ts +29 -29
- package/src/packlets/devtools/feeds.ts +2 -2
- package/src/packlets/devtools/network.ts +1 -1
- package/src/packlets/diagnostics/browser-diagnostics-broadcast.ts +1 -1
- package/src/packlets/diagnostics/diagnostics-broadcast.ts +1 -1
- package/src/packlets/diagnostics/diagnostics-collector.ts +1 -1
- package/src/packlets/diagnostics/diagnostics.ts +2 -3
- package/src/packlets/diagnostics/index.ts +1 -1
- package/src/packlets/identity/authenticator.node.test.ts +1 -1
- package/src/packlets/identity/authenticator.ts +3 -3
- package/src/packlets/identity/contacts-service.ts +2 -2
- package/src/packlets/identity/identity-manager.test.ts +8 -8
- package/src/packlets/identity/identity-manager.ts +23 -20
- package/src/packlets/identity/identity-recovery-manager.ts +22 -18
- package/src/packlets/identity/identity-service.test.ts +8 -28
- package/src/packlets/identity/identity-service.ts +13 -80
- package/src/packlets/identity/identity.test.ts +11 -11
- package/src/packlets/identity/identity.ts +17 -39
- package/src/packlets/invitations/device-invitation-protocol.test.ts +4 -4
- package/src/packlets/invitations/device-invitation-protocol.ts +8 -6
- package/src/packlets/invitations/edge-invitation-handler.ts +10 -6
- package/src/packlets/invitations/index.ts +1 -1
- package/src/packlets/invitations/invitation-guest-extenstion.ts +7 -5
- package/src/packlets/invitations/invitation-host-extension.ts +8 -6
- package/src/packlets/invitations/invitation-protocol.ts +8 -5
- package/src/packlets/invitations/invitation-state.ts +0 -10
- package/src/packlets/invitations/invitations-handler.test.ts +301 -292
- package/src/packlets/invitations/invitations-handler.ts +72 -16
- package/src/packlets/invitations/invitations-manager.ts +43 -18
- package/src/packlets/invitations/invitations-service.ts +10 -10
- package/src/packlets/invitations/space-invitation-protocol.test.ts +26 -25
- package/src/packlets/invitations/space-invitation-protocol.ts +13 -17
- package/src/packlets/invitations/utils.ts +1 -1
- package/src/packlets/locks/browser.ts +1 -1
- package/src/packlets/locks/index.ts +2 -2
- package/src/packlets/logging/logging-service.ts +8 -3
- package/src/packlets/logging/logging.test.ts +1 -1
- package/src/packlets/network/network-service.test.ts +3 -3
- package/src/packlets/network/network-service.ts +12 -10
- package/src/packlets/services/client-rpc-server.ts +20 -17
- 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 +4 -3
- package/src/packlets/services/service-context.ts +145 -59
- package/src/packlets/services/service-host.test.ts +10 -9
- package/src/packlets/services/service-host.ts +85 -38
- package/src/packlets/services/service-registry.test.ts +1 -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 +246 -0
- package/src/packlets/space-export/space-archive-reader.ts +65 -4
- package/src/packlets/space-export/space-archive-writer.ts +44 -6
- package/src/packlets/space-export/space-archive.test.ts +461 -0
- package/src/packlets/space-export/tar.test.ts +1 -1
- package/src/packlets/spaces/automerge-space-state.ts +1 -1
- package/src/packlets/spaces/data-space-manager.test.ts +79 -13
- package/src/packlets/spaces/data-space-manager.ts +131 -118
- package/src/packlets/spaces/data-space.ts +65 -39
- package/src/packlets/spaces/edge-feed-replicator.test.ts +4 -4
- package/src/packlets/spaces/edge-feed-replicator.ts +13 -11
- 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 +3 -3
- package/src/packlets/spaces/notarization-plugin.ts +13 -12
- package/src/packlets/spaces/spaces-service.test.ts +20 -12
- package/src/packlets/spaces/spaces-service.ts +138 -38
- package/src/packlets/storage/profile-archive.ts +1 -1
- package/src/packlets/storage/storage.ts +7 -8
- package/src/packlets/system/system-service.test.ts +1 -1
- package/src/packlets/system/system-service.ts +4 -4
- package/src/packlets/testing/invitation-utils.ts +11 -7
- package/src/packlets/testing/test-builder.ts +39 -13
- package/src/packlets/worker/worker-runtime.ts +180 -17
- package/src/packlets/worker/worker-session.ts +15 -21
- package/src/version.ts +1 -1
- package/dist/lib/browser/chunk-ERQJUBAW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TMEG7JOG.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
|
@@ -3,43 +3,36 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Doc } from '@automerge/automerge';
|
|
6
|
-
import {
|
|
6
|
+
import { type AutomergeUrl, type DocumentId, interpretAsDocumentId } from '@automerge/automerge-repo';
|
|
7
7
|
|
|
8
8
|
import { Event, synchronized, trackLeaks } from '@dxos/async';
|
|
9
|
-
import {
|
|
9
|
+
import { LegacySpaceProperties, SpaceProperties } from '@dxos/client-protocol';
|
|
10
10
|
import { Context, LifecycleState, Resource, cancelWithContext } from '@dxos/context';
|
|
11
11
|
import {
|
|
12
|
-
createAdmissionCredentials,
|
|
13
|
-
getCredentialAssertion,
|
|
14
12
|
type CredentialSigner,
|
|
15
13
|
type DelegateInvitationCredential,
|
|
16
14
|
type MemberInfo,
|
|
15
|
+
createAdmissionCredentials,
|
|
16
|
+
getCredentialAssertion,
|
|
17
17
|
} from '@dxos/credentials';
|
|
18
|
+
import { Type } from '@dxos/echo';
|
|
18
19
|
import {
|
|
20
|
+
AuthStatus,
|
|
21
|
+
CredentialServerExtension,
|
|
19
22
|
DatabaseRoot,
|
|
20
|
-
findInlineObjectOfType,
|
|
21
23
|
type EchoEdgeReplicator,
|
|
22
24
|
type EchoHost,
|
|
23
|
-
AuthStatus,
|
|
24
|
-
CredentialServerExtension,
|
|
25
25
|
type MeshEchoReplicator,
|
|
26
26
|
type MetadataStore,
|
|
27
27
|
type Space,
|
|
28
28
|
type SpaceManager,
|
|
29
29
|
type SpaceProtocol,
|
|
30
30
|
type SpaceProtocolSession,
|
|
31
|
-
|
|
31
|
+
findInlineObjectOfType,
|
|
32
32
|
} from '@dxos/echo-pipeline';
|
|
33
|
-
import {
|
|
34
|
-
SpaceDocVersion,
|
|
35
|
-
createIdFromSpaceKey,
|
|
36
|
-
encodeReference,
|
|
37
|
-
type ObjectStructure,
|
|
38
|
-
type DatabaseDirectory,
|
|
39
|
-
} from '@dxos/echo-protocol';
|
|
40
|
-
import { ObjectId, getTypeReference } from '@dxos/echo-schema';
|
|
33
|
+
import { type DatabaseDirectory, createIdFromSpaceKey } from '@dxos/echo-protocol';
|
|
41
34
|
import type { EdgeConnection, EdgeHttpClient } from '@dxos/edge-client';
|
|
42
|
-
import {
|
|
35
|
+
import { type FeedStore, writeMessages } from '@dxos/feed-store';
|
|
43
36
|
import { assertArgument, assertState, failedInvariant, invariant } from '@dxos/invariant';
|
|
44
37
|
import { type Keyring } from '@dxos/keyring';
|
|
45
38
|
import { PublicKey, type SpaceId } from '@dxos/keys';
|
|
@@ -48,27 +41,29 @@ import { AlreadyJoinedError, trace as Trace } from '@dxos/protocols';
|
|
|
48
41
|
import { Invitation, SpaceState } from '@dxos/protocols/proto/dxos/client/services';
|
|
49
42
|
import { type Runtime } from '@dxos/protocols/proto/dxos/config';
|
|
50
43
|
import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
51
|
-
import { type SpaceMetadata
|
|
52
|
-
import {
|
|
44
|
+
import { EdgeReplicationSetting, type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
45
|
+
import {
|
|
46
|
+
type Credential,
|
|
47
|
+
MembershipPolicy,
|
|
48
|
+
type ProfileDocument,
|
|
49
|
+
SpaceMember,
|
|
50
|
+
} from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
53
51
|
import { type DelegateSpaceInvitation } from '@dxos/protocols/proto/dxos/halo/invitations';
|
|
54
52
|
import { type PeerState } from '@dxos/protocols/proto/dxos/mesh/presence';
|
|
55
53
|
import { type Teleport } from '@dxos/teleport';
|
|
56
54
|
import { Gossip, Presence } from '@dxos/teleport-extension-gossip';
|
|
57
55
|
import { type Timeframe } from '@dxos/timeframe';
|
|
58
56
|
import { trace } from '@dxos/tracing';
|
|
59
|
-
import { ComplexMap,
|
|
57
|
+
import { ComplexMap, deferFunction, forEachAsync } from '@dxos/util';
|
|
60
58
|
|
|
61
|
-
import { DataSpace } from './data-space';
|
|
62
|
-
import { spaceGenesis } from './genesis';
|
|
63
59
|
import { createAuthProvider } from '../identity';
|
|
64
60
|
import { type InvitationsManager } from '../invitations';
|
|
61
|
+
import { DataSpace } from './data-space';
|
|
62
|
+
import { spaceGenesis } from './genesis';
|
|
65
63
|
|
|
66
64
|
const PRESENCE_ANNOUNCE_INTERVAL = 10_000;
|
|
67
65
|
const PRESENCE_OFFLINE_TIMEOUT = 20_000;
|
|
68
66
|
|
|
69
|
-
// Space properties key for default metadata.
|
|
70
|
-
const DEFAULT_SPACE_KEY = '__DEFAULT__';
|
|
71
|
-
|
|
72
67
|
export interface SigningContext {
|
|
73
68
|
identityKey: PublicKey;
|
|
74
69
|
deviceKey: PublicKey;
|
|
@@ -93,6 +88,9 @@ export type AcceptSpaceOptions = {
|
|
|
93
88
|
* We will try to catch up to this timeframe before initializing the database.
|
|
94
89
|
*/
|
|
95
90
|
dataTimeframe?: Timeframe;
|
|
91
|
+
|
|
92
|
+
/** Tags assigned to the space member. */
|
|
93
|
+
tags?: string[];
|
|
96
94
|
};
|
|
97
95
|
|
|
98
96
|
export type AdmitMemberOptions = {
|
|
@@ -101,9 +99,10 @@ export type AdmitMemberOptions = {
|
|
|
101
99
|
role: SpaceMember.Role;
|
|
102
100
|
profile?: ProfileDocument;
|
|
103
101
|
delegationCredentialId?: PublicKey;
|
|
102
|
+
tags?: string[];
|
|
104
103
|
};
|
|
105
104
|
|
|
106
|
-
export type
|
|
105
|
+
export type DataSpaceManagerProps = {
|
|
107
106
|
spaceManager: SpaceManager;
|
|
108
107
|
metadataStore: MetadataStore;
|
|
109
108
|
keyring: Keyring;
|
|
@@ -115,23 +114,31 @@ export type DataSpaceManagerParams = {
|
|
|
115
114
|
edgeHttpClient?: EdgeHttpClient;
|
|
116
115
|
meshReplicator?: MeshEchoReplicator;
|
|
117
116
|
echoEdgeReplicator?: EchoEdgeReplicator;
|
|
118
|
-
|
|
117
|
+
runtimeProps?: DataSpaceManagerRuntimeProps;
|
|
119
118
|
edgeFeatures?: Runtime.Client.EdgeFeatures;
|
|
120
119
|
};
|
|
121
120
|
|
|
122
|
-
export type
|
|
121
|
+
export type DataSpaceManagerRuntimeProps = {
|
|
123
122
|
spaceMemberPresenceAnnounceInterval?: number;
|
|
124
123
|
spaceMemberPresenceOfflineTimeout?: number;
|
|
125
124
|
activeEdgeNotarizationPollingInterval?: number;
|
|
126
125
|
disableP2pReplication?: boolean;
|
|
126
|
+
/**
|
|
127
|
+
* If true, spaces that were previously SPACE_ACTIVE will be automatically activated on startup.
|
|
128
|
+
* This is used in dedicated worker mode to restore space state after leader changeover.
|
|
129
|
+
*/
|
|
130
|
+
autoActivateSpaces?: boolean;
|
|
127
131
|
};
|
|
128
132
|
|
|
129
133
|
export type CreateSpaceOptions = {
|
|
130
134
|
rootUrl?: AutomergeUrl;
|
|
131
135
|
documents?: Record<DocumentId, Uint8Array>;
|
|
136
|
+
tags?: string[];
|
|
137
|
+
membershipPolicy?: MembershipPolicy;
|
|
132
138
|
};
|
|
133
139
|
|
|
134
140
|
@trackLeaks('open', 'close')
|
|
141
|
+
@trace.resource({ lifecycle: true })
|
|
135
142
|
export class DataSpaceManager extends Resource {
|
|
136
143
|
public readonly updated = new Event();
|
|
137
144
|
|
|
@@ -151,9 +158,9 @@ export class DataSpaceManager extends Resource {
|
|
|
151
158
|
private readonly _edgeFeatures?: Runtime.Client.EdgeFeatures = undefined;
|
|
152
159
|
private readonly _meshReplicator?: MeshEchoReplicator = undefined;
|
|
153
160
|
private readonly _echoEdgeReplicator?: EchoEdgeReplicator = undefined;
|
|
154
|
-
private readonly
|
|
161
|
+
private readonly _runtimeProps?: DataSpaceManagerRuntimeProps = undefined;
|
|
155
162
|
|
|
156
|
-
constructor(params:
|
|
163
|
+
constructor(params: DataSpaceManagerProps) {
|
|
157
164
|
super();
|
|
158
165
|
|
|
159
166
|
this._spaceManager = params.spaceManager;
|
|
@@ -168,7 +175,7 @@ export class DataSpaceManager extends Resource {
|
|
|
168
175
|
this._edgeFeatures = params.edgeFeatures;
|
|
169
176
|
this._echoEdgeReplicator = params.echoEdgeReplicator;
|
|
170
177
|
this._edgeHttpClient = params.edgeHttpClient;
|
|
171
|
-
this.
|
|
178
|
+
this._runtimeProps = params.runtimeProps;
|
|
172
179
|
|
|
173
180
|
trace.diagnostic({
|
|
174
181
|
id: 'spaces',
|
|
@@ -178,12 +185,15 @@ export class DataSpaceManager extends Resource {
|
|
|
178
185
|
Array.from(this._spaces.values()).map(async (space) => {
|
|
179
186
|
const rootUrl = space.automergeSpaceState.rootUrl;
|
|
180
187
|
const rootHandle = rootUrl
|
|
181
|
-
? await this._echoHost.
|
|
188
|
+
? await this._echoHost.loadDoc<Doc<DatabaseDirectory>>(this._ctx, rootUrl as AutomergeUrl)
|
|
182
189
|
: undefined;
|
|
183
190
|
await rootHandle?.whenReady();
|
|
184
191
|
const rootDoc = rootHandle?.doc();
|
|
185
192
|
|
|
186
|
-
const properties =
|
|
193
|
+
const properties =
|
|
194
|
+
rootDoc &&
|
|
195
|
+
(findInlineObjectOfType(rootDoc, Type.getTypename(SpaceProperties)) ??
|
|
196
|
+
findInlineObjectOfType(rootDoc, Type.getTypename(LegacySpaceProperties)));
|
|
187
197
|
|
|
188
198
|
return {
|
|
189
199
|
key: space.key.toHex(),
|
|
@@ -211,30 +221,44 @@ export class DataSpaceManager extends Resource {
|
|
|
211
221
|
}
|
|
212
222
|
|
|
213
223
|
@synchronized
|
|
214
|
-
|
|
224
|
+
@trace.span({ showInBrowserTimeline: true, op: 'lifecycle' })
|
|
225
|
+
protected override async _open(ctx: Context): Promise<void> {
|
|
215
226
|
log('open');
|
|
216
227
|
log.trace('dxos.echo.data-space-manager.open', Trace.begin({ id: this._instanceId }));
|
|
217
228
|
log('metadata loaded', { spaces: this._metadataStore.spaces.length });
|
|
218
229
|
|
|
230
|
+
const spacesToActivate: DataSpace[] = [];
|
|
219
231
|
await forEachAsync(this._metadataStore.spaces, async (spaceMetadata) => {
|
|
220
232
|
try {
|
|
221
233
|
log('load space', { spaceMetadata });
|
|
222
|
-
await this._constructSpace(spaceMetadata);
|
|
234
|
+
const space = await this._constructSpace(ctx, spaceMetadata);
|
|
235
|
+
// Track spaces that were previously active for auto-activation (used in dedicated worker mode).
|
|
236
|
+
if (this._runtimeProps?.autoActivateSpaces && spaceMetadata.state === SpaceState.SPACE_ACTIVE) {
|
|
237
|
+
spacesToActivate.push(space);
|
|
238
|
+
}
|
|
223
239
|
} catch (err) {
|
|
224
240
|
log.error('Error loading space', { spaceMetadata, err });
|
|
225
241
|
}
|
|
226
242
|
});
|
|
227
243
|
|
|
244
|
+
// Auto-activate spaces that were previously active (used in dedicated worker mode after leader changeover).
|
|
245
|
+
for (const space of spacesToActivate) {
|
|
246
|
+
log('auto-activating space', { spaceKey: space.key });
|
|
247
|
+
space.activate(ctx).catch((err) => {
|
|
248
|
+
log.error('Error auto-activating space', { spaceKey: space.key, err });
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
228
252
|
this.updated.emit();
|
|
229
253
|
|
|
230
254
|
log.trace('dxos.echo.data-space-manager.open', Trace.end({ id: this._instanceId }));
|
|
231
255
|
}
|
|
232
256
|
|
|
233
257
|
@synchronized
|
|
234
|
-
protected override async _close(): Promise<void> {
|
|
258
|
+
protected override async _close(ctx: Context): Promise<void> {
|
|
235
259
|
log('close');
|
|
236
260
|
for (const space of this._spaces.values()) {
|
|
237
|
-
await space.close();
|
|
261
|
+
await space.close(ctx);
|
|
238
262
|
}
|
|
239
263
|
this._spaces.clear();
|
|
240
264
|
}
|
|
@@ -243,10 +267,17 @@ export class DataSpaceManager extends Resource {
|
|
|
243
267
|
* Creates a new space writing the genesis credentials to the control feed.
|
|
244
268
|
*/
|
|
245
269
|
@synchronized
|
|
246
|
-
|
|
247
|
-
|
|
270
|
+
@trace.span({ showInBrowserTimeline: true, op: 'lifecycle' })
|
|
271
|
+
async createSpace(ctx: Context, options: CreateSpaceOptions = {}): Promise<DataSpace> {
|
|
272
|
+
assertArgument(
|
|
273
|
+
!!options.rootUrl === !!options.documents,
|
|
274
|
+
'options',
|
|
275
|
+
'root url must be required when providing documents',
|
|
276
|
+
);
|
|
248
277
|
|
|
249
278
|
assertState(this._lifecycleState === LifecycleState.OPEN, 'Not open.');
|
|
279
|
+
|
|
280
|
+
const tags = options.tags ? Array.from(options.tags) : [];
|
|
250
281
|
const spaceKey = await this._keyring.createKey();
|
|
251
282
|
const controlFeedKey = await this._keyring.createKey();
|
|
252
283
|
const dataFeedKey = await this._keyring.createKey();
|
|
@@ -259,6 +290,7 @@ export class DataSpaceManager extends Resource {
|
|
|
259
290
|
controlFeedKey,
|
|
260
291
|
dataFeedKey,
|
|
261
292
|
state: SpaceState.SPACE_ACTIVE,
|
|
293
|
+
tags,
|
|
262
294
|
};
|
|
263
295
|
|
|
264
296
|
log('creating space...', { spaceId, spaceKey });
|
|
@@ -274,7 +306,18 @@ export class DataSpaceManager extends Resource {
|
|
|
274
306
|
await Promise.all(
|
|
275
307
|
Object.entries(options.documents).map(async ([documentId, data]) => {
|
|
276
308
|
log('creating document...', { documentId });
|
|
277
|
-
|
|
309
|
+
// TODO(dmaretskyi): Broken types -- the bytes get interpreted as CRDT data.
|
|
310
|
+
const newDoc = await this._echoHost.createDoc(data as any as DatabaseDirectory, {
|
|
311
|
+
preserveHistory: true,
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
// The archived documents might have the spaceKey from the space they were expored from, we need to update it to the new spaceKey.
|
|
315
|
+
if (newDoc.doc().access !== undefined && newDoc.doc().access!.spaceKey !== spaceKey.toHex()) {
|
|
316
|
+
newDoc.change((doc) => {
|
|
317
|
+
doc.access!.spaceKey = spaceKey.toHex();
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
|
|
278
321
|
documentIdMapping[documentId as DocumentId] = newDoc.documentId;
|
|
279
322
|
}),
|
|
280
323
|
);
|
|
@@ -285,29 +328,37 @@ export class DataSpaceManager extends Resource {
|
|
|
285
328
|
let root: DatabaseRoot;
|
|
286
329
|
if (options.rootUrl) {
|
|
287
330
|
const newRootDocId = documentIdMapping[interpretAsDocumentId(options.rootUrl)] ?? failedInvariant();
|
|
288
|
-
const rootDocHandle = await this._echoHost.loadDoc<DatabaseDirectory>(
|
|
331
|
+
const rootDocHandle = await this._echoHost.loadDoc<DatabaseDirectory>(ctx, newRootDocId);
|
|
289
332
|
DatabaseRoot.mapLinks(rootDocHandle, documentIdMapping);
|
|
290
333
|
|
|
291
|
-
root = await this._echoHost.openSpaceRoot(spaceId, `automerge:${newRootDocId}` as AutomergeUrl);
|
|
334
|
+
root = await this._echoHost.openSpaceRoot(ctx, spaceId, `automerge:${newRootDocId}` as AutomergeUrl);
|
|
292
335
|
} else {
|
|
293
|
-
root = await this._echoHost.createSpaceRoot(spaceKey);
|
|
336
|
+
root = await this._echoHost.createSpaceRoot(ctx, spaceKey);
|
|
294
337
|
}
|
|
338
|
+
await this._echoHost.flush(ctx);
|
|
295
339
|
|
|
296
340
|
log('constructing space...', { spaceKey });
|
|
297
341
|
|
|
298
|
-
const space = await this._constructSpace(metadata);
|
|
299
|
-
await space.open();
|
|
342
|
+
const space = await this._constructSpace(ctx, metadata);
|
|
343
|
+
await space.open(ctx);
|
|
300
344
|
|
|
301
345
|
log('adding space...', { spaceKey });
|
|
302
346
|
|
|
303
|
-
const credentials = await spaceGenesis(
|
|
347
|
+
const credentials = await spaceGenesis(
|
|
348
|
+
this._keyring,
|
|
349
|
+
this._signingContext,
|
|
350
|
+
space.inner,
|
|
351
|
+
root.url,
|
|
352
|
+
tags,
|
|
353
|
+
options.membershipPolicy,
|
|
354
|
+
);
|
|
304
355
|
await this._metadataStore.addSpace(metadata);
|
|
305
356
|
|
|
306
357
|
const memberCredential = credentials[1];
|
|
307
358
|
invariant(getCredentialAssertion(memberCredential)['@type'] === 'dxos.halo.credentials.SpaceMember');
|
|
308
359
|
await this._signingContext.recordCredential(memberCredential);
|
|
309
360
|
|
|
310
|
-
await space.initializeDataPipeline();
|
|
361
|
+
await space.initializeDataPipeline(ctx);
|
|
311
362
|
|
|
312
363
|
log('space ready.', { spaceId, spaceKey });
|
|
313
364
|
|
|
@@ -315,81 +366,36 @@ export class DataSpaceManager extends Resource {
|
|
|
315
366
|
return space;
|
|
316
367
|
}
|
|
317
368
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
case SpaceDocVersion.CURRENT: {
|
|
324
|
-
if (!space.databaseRoot.handle.isReady()) {
|
|
325
|
-
log.warn('waiting for space root to be ready', { spaceId: space.id });
|
|
326
|
-
await space.databaseRoot.handle.whenReady();
|
|
327
|
-
}
|
|
328
|
-
const [_, properties] = findInlineObjectOfType(space.databaseRoot.doc()!, TYPE_PROPERTIES) ?? [];
|
|
329
|
-
return properties?.data?.[DEFAULT_SPACE_KEY] === this._signingContext.identityKey.toHex();
|
|
330
|
-
}
|
|
331
|
-
case SpaceDocVersion.LEGACY: {
|
|
332
|
-
throw new Error('Legacy space version is not supported');
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
default:
|
|
336
|
-
log.warn('unknown space version', { version: space.databaseRoot.getVersion(), spaceId: space.id });
|
|
337
|
-
return false;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
async createDefaultSpace(): Promise<DataSpace> {
|
|
342
|
-
const space = await this.createSpace();
|
|
343
|
-
const document = await this._getSpaceRootDocument(space);
|
|
344
|
-
|
|
345
|
-
// TODO(dmaretskyi): Better API for low-level data access.
|
|
346
|
-
const properties: ObjectStructure = {
|
|
347
|
-
system: {
|
|
348
|
-
type: encodeReference(getTypeReference(PropertiesType)!),
|
|
349
|
-
},
|
|
350
|
-
data: {
|
|
351
|
-
[DEFAULT_SPACE_KEY]: this._signingContext.identityKey.toHex(),
|
|
352
|
-
},
|
|
353
|
-
meta: {
|
|
354
|
-
keys: [],
|
|
355
|
-
},
|
|
356
|
-
};
|
|
357
|
-
|
|
358
|
-
const propertiesId = ObjectId.random();
|
|
359
|
-
document.change((doc: DatabaseDirectory) => {
|
|
360
|
-
setDeep(doc, ['objects', propertiesId], properties);
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
await this._echoHost.flush();
|
|
364
|
-
return space;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
private async _getSpaceRootDocument(space: DataSpace): Promise<DocHandle<DatabaseDirectory>> {
|
|
368
|
-
const automergeIndex = space.automergeSpaceState.rootUrl;
|
|
369
|
-
invariant(automergeIndex);
|
|
370
|
-
const document = await this._echoHost.automergeRepo.find<DatabaseDirectory>(automergeIndex as any, FIND_PARAMS);
|
|
371
|
-
await document.whenReady();
|
|
372
|
-
return document;
|
|
373
|
-
}
|
|
374
|
-
|
|
369
|
+
/**
|
|
370
|
+
* Accepts an existing space by joining its swarm and initializing the data pipeline.
|
|
371
|
+
* @param ctx - Caller context for cancellation and tracing.
|
|
372
|
+
* @param opts - Space keys and optional timeframes for catch-up.
|
|
373
|
+
*/
|
|
375
374
|
// TODO(burdon): Rename join space.
|
|
376
375
|
@synchronized
|
|
377
|
-
|
|
376
|
+
@trace.span({ showInBrowserTimeline: true, op: 'lifecycle' })
|
|
377
|
+
async acceptSpace(ctx: Context, opts: AcceptSpaceOptions): Promise<DataSpace> {
|
|
378
378
|
log('accept space', { opts });
|
|
379
379
|
invariant(this._lifecycleState === LifecycleState.OPEN, 'Not open.');
|
|
380
380
|
invariant(!this._spaces.has(opts.spaceKey), 'Space already exists.');
|
|
381
381
|
|
|
382
|
+
const tags = opts.tags ? Array.from(opts.tags) : [];
|
|
382
383
|
const metadata: SpaceMetadata = {
|
|
383
384
|
key: opts.spaceKey,
|
|
384
385
|
genesisFeedKey: opts.genesisFeedKey,
|
|
385
386
|
controlTimeframe: opts.controlTimeframe,
|
|
386
387
|
dataTimeframe: opts.dataTimeframe,
|
|
388
|
+
tags,
|
|
387
389
|
};
|
|
388
390
|
|
|
389
|
-
const space = await this._constructSpace(metadata);
|
|
390
|
-
await space.open();
|
|
391
|
+
const space = await this._constructSpace(ctx, metadata);
|
|
392
|
+
await space.open(ctx);
|
|
391
393
|
await this._metadataStore.addSpace(metadata);
|
|
392
|
-
|
|
394
|
+
// Use DSM lifecycle ctx: the invitation accept flow disposes `ctx` as soon as
|
|
395
|
+
// `acceptSpace` returns (guardedState.complete -> ctx.dispose). Detached data-pipeline
|
|
396
|
+
// initialization must outlive the invitation flow, and its span must be parented to a
|
|
397
|
+
// long-lived context.
|
|
398
|
+
space.initializeDataPipelineAsync(this._ctx);
|
|
393
399
|
|
|
394
400
|
this.updated.emit();
|
|
395
401
|
return space;
|
|
@@ -413,6 +419,7 @@ export class DataSpaceManager extends Resource {
|
|
|
413
419
|
space.spaceState.membershipChainHeads,
|
|
414
420
|
options.profile,
|
|
415
421
|
options.delegationCredentialId,
|
|
422
|
+
space.spaceState.tags,
|
|
416
423
|
);
|
|
417
424
|
|
|
418
425
|
// TODO(dmaretskyi): Refactor.
|
|
@@ -439,8 +446,8 @@ export class DataSpaceManager extends Resource {
|
|
|
439
446
|
);
|
|
440
447
|
}
|
|
441
448
|
|
|
442
|
-
public async requestSpaceAdmissionCredential(spaceKey: PublicKey): Promise<Credential> {
|
|
443
|
-
return this._spaceManager.requestSpaceAdmissionCredential({
|
|
449
|
+
public async requestSpaceAdmissionCredential(ctx: Context, spaceKey: PublicKey): Promise<Credential> {
|
|
450
|
+
return this._spaceManager.requestSpaceAdmissionCredential(ctx, {
|
|
444
451
|
spaceKey,
|
|
445
452
|
identityKey: this._signingContext.identityKey,
|
|
446
453
|
timeout: 15_000,
|
|
@@ -453,7 +460,11 @@ export class DataSpaceManager extends Resource {
|
|
|
453
460
|
});
|
|
454
461
|
}
|
|
455
462
|
|
|
456
|
-
async setSpaceEdgeReplicationSetting(
|
|
463
|
+
async setSpaceEdgeReplicationSetting(
|
|
464
|
+
ctx: Context,
|
|
465
|
+
spaceKey: PublicKey,
|
|
466
|
+
setting: EdgeReplicationSetting,
|
|
467
|
+
): Promise<void> {
|
|
457
468
|
const space = this._spaces.get(spaceKey);
|
|
458
469
|
invariant(space, 'Space not found.');
|
|
459
470
|
|
|
@@ -465,7 +476,7 @@ export class DataSpaceManager extends Resource {
|
|
|
465
476
|
await this._echoEdgeReplicator?.disconnectFromSpace(space.id);
|
|
466
477
|
break;
|
|
467
478
|
case EdgeReplicationSetting.ENABLED:
|
|
468
|
-
await this._echoEdgeReplicator?.connectToSpace(space.id);
|
|
479
|
+
await this._echoEdgeReplicator?.connectToSpace(ctx, space.id);
|
|
469
480
|
break;
|
|
470
481
|
}
|
|
471
482
|
}
|
|
@@ -473,14 +484,14 @@ export class DataSpaceManager extends Resource {
|
|
|
473
484
|
space.stateUpdate.emit();
|
|
474
485
|
}
|
|
475
486
|
|
|
476
|
-
private async _constructSpace(metadata: SpaceMetadata): Promise<DataSpace> {
|
|
487
|
+
private async _constructSpace(ctx: Context, metadata: SpaceMetadata): Promise<DataSpace> {
|
|
477
488
|
log('construct space', { metadata });
|
|
478
489
|
const gossip = new Gossip({
|
|
479
490
|
localPeerId: this._signingContext.deviceKey,
|
|
480
491
|
});
|
|
481
492
|
const presence = new Presence({
|
|
482
|
-
announceInterval: this.
|
|
483
|
-
offlineTimeout: this.
|
|
493
|
+
announceInterval: this._runtimeProps?.spaceMemberPresenceAnnounceInterval ?? PRESENCE_ANNOUNCE_INTERVAL,
|
|
494
|
+
offlineTimeout: this._runtimeProps?.spaceMemberPresenceOfflineTimeout ?? PRESENCE_OFFLINE_TIMEOUT,
|
|
484
495
|
identityKey: this._signingContext.identityKey,
|
|
485
496
|
gossip,
|
|
486
497
|
});
|
|
@@ -563,15 +574,17 @@ export class DataSpaceManager extends Resource {
|
|
|
563
574
|
},
|
|
564
575
|
},
|
|
565
576
|
cache: metadata.cache,
|
|
577
|
+
tags: metadata.tags,
|
|
566
578
|
edgeConnection: this._edgeConnection,
|
|
567
579
|
edgeHttpClient: this._edgeHttpClient,
|
|
568
580
|
edgeFeatures: this._edgeFeatures,
|
|
569
|
-
activeEdgeNotarizationPollingInterval: this.
|
|
581
|
+
activeEdgeNotarizationPollingInterval: this._runtimeProps?.activeEdgeNotarizationPollingInterval,
|
|
570
582
|
});
|
|
571
583
|
dataSpace.postOpen.append(async () => {
|
|
572
584
|
const setting = dataSpace.getEdgeReplicationSetting();
|
|
573
585
|
if (!setting || setting === EdgeReplicationSetting.ENABLED) {
|
|
574
|
-
|
|
586
|
+
// Use lifecycle ctx: the caller ctx from _constructSpace may be disposed by the time postOpen fires.
|
|
587
|
+
await this._echoEdgeReplicator?.connectToSpace(this._ctx, dataSpace.id);
|
|
575
588
|
} else if (this._echoEdgeReplicator) {
|
|
576
589
|
log('not connecting EchoEdgeReplicator because of EdgeReplicationSetting', { spaceId: dataSpace.id });
|
|
577
590
|
}
|
|
@@ -668,7 +681,7 @@ export class DataSpaceManager extends Resource {
|
|
|
668
681
|
invitations: Array<[PublicKey, DelegateSpaceInvitation]>,
|
|
669
682
|
): Promise<void> {
|
|
670
683
|
const tasks = invitations.map(([credentialId, invitation]) => {
|
|
671
|
-
return this._invitationsManager.createInvitation({
|
|
684
|
+
return this._invitationsManager.createInvitation(this._ctx, {
|
|
672
685
|
type: Invitation.Type.DELEGATED,
|
|
673
686
|
kind: Invitation.Kind.SPACE,
|
|
674
687
|
spaceKey: space.key,
|