@dxos/client-services 0.3.2-main.de57e73 → 0.3.2-main.e5374ab

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.
Files changed (154) hide show
  1. package/dist/lib/browser/{chunk-XEZCTVLQ.mjs → chunk-HQ4UBZ3F.mjs} +122 -112
  2. package/dist/lib/browser/chunk-HQ4UBZ3F.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +2 -2
  4. package/dist/lib/browser/index.mjs.map +2 -2
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/packlets/testing/index.mjs +1 -1
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +2 -2
  8. package/dist/lib/node/index.cjs +158 -138
  9. package/dist/lib/node/index.cjs.map +3 -3
  10. package/dist/lib/node/meta.json +1 -1
  11. package/dist/lib/node/packlets/testing/index.cjs +155 -135
  12. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  13. package/dist/types/src/packlets/devices/devices-service.d.ts +4 -4
  14. package/dist/types/src/packlets/devices/devices-service.d.ts.map +1 -1
  15. package/dist/types/src/packlets/devtools/devtools.d.ts +4 -4
  16. package/dist/types/src/packlets/devtools/devtools.d.ts.map +1 -1
  17. package/dist/types/src/packlets/devtools/feeds.d.ts +3 -3
  18. package/dist/types/src/packlets/devtools/feeds.d.ts.map +1 -1
  19. package/dist/types/src/packlets/devtools/keys.d.ts +2 -2
  20. package/dist/types/src/packlets/devtools/keys.d.ts.map +1 -1
  21. package/dist/types/src/packlets/devtools/metadata.d.ts +2 -2
  22. package/dist/types/src/packlets/devtools/metadata.d.ts.map +1 -1
  23. package/dist/types/src/packlets/devtools/network.d.ts +3 -3
  24. package/dist/types/src/packlets/devtools/network.d.ts.map +1 -1
  25. package/dist/types/src/packlets/devtools/spaces.d.ts +2 -2
  26. package/dist/types/src/packlets/devtools/spaces.d.ts.map +1 -1
  27. package/dist/types/src/packlets/identity/authenticator.d.ts +5 -5
  28. package/dist/types/src/packlets/identity/authenticator.d.ts.map +1 -1
  29. package/dist/types/src/packlets/identity/identity-manager.d.ts +5 -5
  30. package/dist/types/src/packlets/identity/identity-manager.d.ts.map +1 -1
  31. package/dist/types/src/packlets/identity/identity-service.d.ts +4 -4
  32. package/dist/types/src/packlets/identity/identity-service.d.ts.map +1 -1
  33. package/dist/types/src/packlets/identity/identity.d.ts +8 -8
  34. package/dist/types/src/packlets/identity/identity.d.ts.map +1 -1
  35. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts +4 -4
  36. package/dist/types/src/packlets/invitations/device-invitation-protocol.d.ts.map +1 -1
  37. package/dist/types/src/packlets/invitations/invitation-extension.d.ts +3 -3
  38. package/dist/types/src/packlets/invitations/invitation-extension.d.ts.map +1 -1
  39. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts +3 -3
  40. package/dist/types/src/packlets/invitations/invitation-protocol.d.ts.map +1 -1
  41. package/dist/types/src/packlets/invitations/invitations-handler.d.ts +1 -1
  42. package/dist/types/src/packlets/invitations/invitations-handler.d.ts.map +1 -1
  43. package/dist/types/src/packlets/invitations/invitations-service.d.ts +3 -3
  44. package/dist/types/src/packlets/invitations/invitations-service.d.ts.map +1 -1
  45. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts +6 -6
  46. package/dist/types/src/packlets/invitations/space-invitation-protocol.d.ts.map +1 -1
  47. package/dist/types/src/packlets/locks/browser.d.ts +1 -1
  48. package/dist/types/src/packlets/locks/browser.d.ts.map +1 -1
  49. package/dist/types/src/packlets/locks/node.d.ts +1 -1
  50. package/dist/types/src/packlets/locks/node.d.ts.map +1 -1
  51. package/dist/types/src/packlets/locks/resource-lock.d.ts +1 -1
  52. package/dist/types/src/packlets/locks/resource-lock.d.ts.map +1 -1
  53. package/dist/types/src/packlets/logging/logging-service.d.ts +1 -1
  54. package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
  55. package/dist/types/src/packlets/network/network-service.d.ts +3 -3
  56. package/dist/types/src/packlets/network/network-service.d.ts.map +1 -1
  57. package/dist/types/src/packlets/services/client-rpc-server.d.ts +5 -5
  58. package/dist/types/src/packlets/services/client-rpc-server.d.ts.map +1 -1
  59. package/dist/types/src/packlets/services/diagnostics.d.ts +8 -8
  60. package/dist/types/src/packlets/services/diagnostics.d.ts.map +1 -1
  61. package/dist/types/src/packlets/services/service-context.d.ts +6 -6
  62. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  63. package/dist/types/src/packlets/services/service-host.d.ts +5 -5
  64. package/dist/types/src/packlets/services/service-host.d.ts.map +1 -1
  65. package/dist/types/src/packlets/services/service-registry.d.ts +1 -1
  66. package/dist/types/src/packlets/services/service-registry.d.ts.map +1 -1
  67. package/dist/types/src/packlets/spaces/data-space-manager.d.ts +7 -7
  68. package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
  69. package/dist/types/src/packlets/spaces/data-space.d.ts +9 -9
  70. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  71. package/dist/types/src/packlets/spaces/genesis.d.ts +3 -3
  72. package/dist/types/src/packlets/spaces/genesis.d.ts.map +1 -1
  73. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts +5 -5
  74. package/dist/types/src/packlets/spaces/notarization-plugin.d.ts.map +1 -1
  75. package/dist/types/src/packlets/spaces/spaces-service.d.ts +7 -7
  76. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  77. package/dist/types/src/packlets/system/system-service.d.ts +5 -5
  78. package/dist/types/src/packlets/system/system-service.d.ts.map +1 -1
  79. package/dist/types/src/packlets/testing/credential-utils.d.ts +2 -2
  80. package/dist/types/src/packlets/testing/credential-utils.d.ts.map +1 -1
  81. package/dist/types/src/packlets/testing/invitation-utils.d.ts +1 -1
  82. package/dist/types/src/packlets/testing/invitation-utils.d.ts.map +1 -1
  83. package/dist/types/src/packlets/testing/test-builder.d.ts +4 -4
  84. package/dist/types/src/packlets/testing/test-builder.d.ts.map +1 -1
  85. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts +4 -4
  86. package/dist/types/src/packlets/vault/iframe-host-runtime.d.ts.map +1 -1
  87. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts +4 -4
  88. package/dist/types/src/packlets/vault/iframe-proxy-runtime.d.ts.map +1 -1
  89. package/dist/types/src/packlets/vault/shell-runtime.d.ts +4 -4
  90. package/dist/types/src/packlets/vault/shell-runtime.d.ts.map +1 -1
  91. package/dist/types/src/packlets/vault/worker-runtime.d.ts +3 -3
  92. package/dist/types/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  93. package/dist/types/src/packlets/vault/worker-session.d.ts +3 -3
  94. package/dist/types/src/packlets/vault/worker-session.d.ts.map +1 -1
  95. package/dist/types/src/version.d.ts +1 -1
  96. package/package.json +37 -35
  97. package/src/packlets/devices/devices-service.test.ts +2 -2
  98. package/src/packlets/devices/devices-service.ts +11 -5
  99. package/src/packlets/devtools/devtools.ts +35 -35
  100. package/src/packlets/devtools/feeds.ts +6 -6
  101. package/src/packlets/devtools/keys.ts +2 -2
  102. package/src/packlets/devtools/metadata.ts +2 -2
  103. package/src/packlets/devtools/network.ts +8 -8
  104. package/src/packlets/devtools/spaces.ts +8 -5
  105. package/src/packlets/identity/authenticator.ts +5 -5
  106. package/src/packlets/identity/identity-manager.test.ts +13 -1
  107. package/src/packlets/identity/identity-manager.ts +18 -6
  108. package/src/packlets/identity/identity-service.test.ts +2 -2
  109. package/src/packlets/identity/identity-service.ts +8 -8
  110. package/src/packlets/identity/identity.test.ts +4 -4
  111. package/src/packlets/identity/identity.ts +16 -10
  112. package/src/packlets/invitations/device-invitation-protocol.test.ts +1 -1
  113. package/src/packlets/invitations/device-invitation-protocol.ts +8 -4
  114. package/src/packlets/invitations/invitation-extension.ts +6 -6
  115. package/src/packlets/invitations/invitation-protocol.ts +7 -3
  116. package/src/packlets/invitations/invitations-handler.ts +7 -2
  117. package/src/packlets/invitations/invitations-service.ts +5 -7
  118. package/src/packlets/invitations/space-invitation-protocol.test.ts +1 -1
  119. package/src/packlets/invitations/space-invitation-protocol.ts +12 -8
  120. package/src/packlets/locks/browser.ts +1 -1
  121. package/src/packlets/locks/node.ts +2 -2
  122. package/src/packlets/locks/resource-lock.ts +1 -1
  123. package/src/packlets/logging/logging-service.ts +14 -8
  124. package/src/packlets/logging/logging.test.ts +1 -1
  125. package/src/packlets/network/network-service.test.ts +2 -2
  126. package/src/packlets/network/network-service.ts +7 -3
  127. package/src/packlets/services/client-rpc-server.ts +5 -5
  128. package/src/packlets/services/diagnostics.ts +13 -13
  129. package/src/packlets/services/service-context.test.ts +2 -2
  130. package/src/packlets/services/service-context.ts +9 -9
  131. package/src/packlets/services/service-host.test.ts +3 -3
  132. package/src/packlets/services/service-host.ts +9 -9
  133. package/src/packlets/services/service-registry.test.ts +2 -2
  134. package/src/packlets/services/service-registry.ts +1 -1
  135. package/src/packlets/spaces/data-space-manager.test.ts +4 -4
  136. package/src/packlets/spaces/data-space-manager.ts +8 -8
  137. package/src/packlets/spaces/data-space.ts +10 -10
  138. package/src/packlets/spaces/genesis.ts +3 -3
  139. package/src/packlets/spaces/notarization-plugin.test.ts +2 -2
  140. package/src/packlets/spaces/notarization-plugin.ts +5 -5
  141. package/src/packlets/spaces/spaces-service.test.ts +2 -2
  142. package/src/packlets/spaces/spaces-service.ts +17 -17
  143. package/src/packlets/system/system-service.test.ts +1 -1
  144. package/src/packlets/system/system-service.ts +9 -9
  145. package/src/packlets/testing/credential-utils.ts +2 -2
  146. package/src/packlets/testing/invitation-utils.ts +1 -1
  147. package/src/packlets/testing/test-builder.ts +4 -4
  148. package/src/packlets/vault/iframe-host-runtime.ts +6 -6
  149. package/src/packlets/vault/iframe-proxy-runtime.ts +10 -5
  150. package/src/packlets/vault/shell-runtime.ts +4 -4
  151. package/src/packlets/vault/worker-runtime.ts +3 -3
  152. package/src/packlets/vault/worker-session.ts +5 -5
  153. package/src/version.ts +1 -1
  154. package/dist/lib/browser/chunk-XEZCTVLQ.mjs.map +0 -7
@@ -4,41 +4,41 @@
4
4
 
5
5
  import { Event as AsyncEvent } from '@dxos/async';
6
6
  import { Stream } from '@dxos/codec-protobuf';
7
- import { Config } from '@dxos/config';
7
+ import { type Config } from '@dxos/config';
8
8
  import {
9
- ClearSnapshotsRequest,
10
- DevtoolsHost, // TODO(burdon): Rename DevtoolsService
11
- EnableDebugLoggingRequest,
12
- EnableDebugLoggingResponse,
13
- Event,
14
- GetConfigResponse,
15
- GetNetworkPeersRequest,
16
- GetNetworkPeersResponse,
17
- GetSpaceSnapshotRequest,
18
- GetSpaceSnapshotResponse,
19
- ResetStorageRequest,
20
- SaveSpaceSnapshotRequest,
21
- SaveSpaceSnapshotResponse,
22
- SubscribeToCredentialMessagesRequest,
23
- SubscribeToCredentialMessagesResponse,
24
- SubscribeToFeedBlocksRequest,
25
- SubscribeToFeedBlocksResponse,
26
- SubscribeToFeedsRequest,
27
- SubscribeToFeedsResponse,
28
- SubscribeToItemsRequest,
29
- SubscribeToItemsResponse,
30
- SubscribeToKeyringKeysRequest,
31
- SubscribeToKeyringKeysResponse,
32
- SubscribeToNetworkTopicsResponse,
33
- SubscribeToSpacesRequest,
34
- SubscribeToSpacesResponse,
35
- SubscribeToSignalStatusResponse,
36
- SignalResponse,
37
- SubscribeToSwarmInfoResponse,
38
- StorageInfo,
39
- GetSnapshotsResponse,
40
- SubscribeToMetadataResponse,
41
- GetBlobsResponse,
9
+ type ClearSnapshotsRequest,
10
+ type DevtoolsHost, // TODO(burdon): Rename DevtoolsService
11
+ type EnableDebugLoggingRequest,
12
+ type EnableDebugLoggingResponse,
13
+ type Event,
14
+ type GetConfigResponse,
15
+ type GetNetworkPeersRequest,
16
+ type GetNetworkPeersResponse,
17
+ type GetSpaceSnapshotRequest,
18
+ type GetSpaceSnapshotResponse,
19
+ type ResetStorageRequest,
20
+ type SaveSpaceSnapshotRequest,
21
+ type SaveSpaceSnapshotResponse,
22
+ type SubscribeToCredentialMessagesRequest,
23
+ type SubscribeToCredentialMessagesResponse,
24
+ type SubscribeToFeedBlocksRequest,
25
+ type SubscribeToFeedBlocksResponse,
26
+ type SubscribeToFeedsRequest,
27
+ type SubscribeToFeedsResponse,
28
+ type SubscribeToItemsRequest,
29
+ type SubscribeToItemsResponse,
30
+ type SubscribeToKeyringKeysRequest,
31
+ type SubscribeToKeyringKeysResponse,
32
+ type SubscribeToNetworkTopicsResponse,
33
+ type SubscribeToSpacesRequest,
34
+ type SubscribeToSpacesResponse,
35
+ type SubscribeToSignalStatusResponse,
36
+ type SignalResponse,
37
+ type SubscribeToSwarmInfoResponse,
38
+ type StorageInfo,
39
+ type GetSnapshotsResponse,
40
+ type SubscribeToMetadataResponse,
41
+ type GetBlobsResponse,
42
42
  } from '@dxos/protocols/proto/dxos/devtools/host';
43
43
 
44
44
  import { subscribeToFeedBlocks, subscribeToFeeds } from './feeds';
@@ -46,7 +46,7 @@ import { subscribeToKeyringKeys } from './keys';
46
46
  import { subscribeToMetadata } from './metadata';
47
47
  import { subscribeToNetworkStatus, subscribeToSignal, subscribeToSwarmInfo } from './network';
48
48
  import { subscribeToSpaces } from './spaces';
49
- import { ServiceContext } from '../services';
49
+ import { type ServiceContext } from '../services';
50
50
 
51
51
  export class DevtoolsHostEvents {
52
52
  readonly ready = new AsyncEvent();
@@ -4,15 +4,15 @@
4
4
 
5
5
  import { EventSubscriptions } from '@dxos/async';
6
6
  import { Stream } from '@dxos/codec-protobuf';
7
- import { FeedIterator, FeedStore, FeedWrapper } from '@dxos/feed-store';
7
+ import { FeedIterator, type FeedStore, type FeedWrapper } from '@dxos/feed-store';
8
8
  import { PublicKey } from '@dxos/keys';
9
9
  import {
10
- SubscribeToFeedsRequest,
11
- SubscribeToFeedsResponse,
12
- SubscribeToFeedBlocksRequest,
13
- SubscribeToFeedBlocksResponse,
10
+ type SubscribeToFeedsRequest,
11
+ type SubscribeToFeedsResponse,
12
+ type SubscribeToFeedBlocksRequest,
13
+ type SubscribeToFeedBlocksResponse,
14
14
  } from '@dxos/protocols/proto/dxos/devtools/host';
15
- import { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
15
+ import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
16
16
  import { ComplexMap } from '@dxos/util';
17
17
 
18
18
  export const subscribeToFeeds = (
@@ -4,8 +4,8 @@
4
4
 
5
5
  import { scheduleTask } from '@dxos/async';
6
6
  import { Stream } from '@dxos/codec-protobuf';
7
- import { Keyring } from '@dxos/keyring';
8
- import { SubscribeToKeyringKeysResponse } from '@dxos/protocols/proto/dxos/devtools/host';
7
+ import { type Keyring } from '@dxos/keyring';
8
+ import { type SubscribeToKeyringKeysResponse } from '@dxos/protocols/proto/dxos/devtools/host';
9
9
 
10
10
  export const subscribeToKeyringKeys = ({ keyring }: { keyring: Keyring }) =>
11
11
  new Stream<SubscribeToKeyringKeysResponse>(({ next, ctx }) => {
@@ -3,9 +3,9 @@
3
3
  //
4
4
 
5
5
  import { Stream } from '@dxos/codec-protobuf';
6
- import { SubscribeToMetadataResponse } from '@dxos/protocols/proto/dxos/devtools/host';
6
+ import { type SubscribeToMetadataResponse } from '@dxos/protocols/proto/dxos/devtools/host';
7
7
 
8
- import { ServiceContext } from '../services';
8
+ import { type ServiceContext } from '../services';
9
9
 
10
10
  export const subscribeToMetadata = ({ context }: { context: ServiceContext }) =>
11
11
  new Stream<SubscribeToMetadataResponse>(({ next, ctx }) => {
@@ -5,15 +5,15 @@
5
5
  import { Stream } from '@dxos/codec-protobuf';
6
6
  import { Context } from '@dxos/context';
7
7
  import { PublicKey } from '@dxos/keys';
8
- import { SignalManager } from '@dxos/messaging';
9
- import { NetworkManager } from '@dxos/network-manager';
8
+ import { type SignalManager } from '@dxos/messaging';
9
+ import { type NetworkManager } from '@dxos/network-manager';
10
10
  import {
11
- GetNetworkPeersRequest,
12
- GetNetworkPeersResponse,
13
- SubscribeToNetworkTopicsResponse,
14
- SubscribeToSignalStatusResponse,
15
- SignalResponse,
16
- SubscribeToSwarmInfoResponse,
11
+ type GetNetworkPeersRequest,
12
+ type GetNetworkPeersResponse,
13
+ type SubscribeToNetworkTopicsResponse,
14
+ type SubscribeToSignalStatusResponse,
15
+ type SignalResponse,
16
+ type SubscribeToSwarmInfoResponse,
17
17
  } from '@dxos/protocols/proto/dxos/devtools/host';
18
18
 
19
19
  export const subscribeToNetworkStatus = ({ signalManager }: { signalManager: SignalManager }) =>
@@ -3,11 +3,14 @@
3
3
  //
4
4
 
5
5
  import { Stream } from '@dxos/codec-protobuf';
6
- import { Space } from '@dxos/echo-pipeline';
7
- import { SubscribeToSpacesRequest, SubscribeToSpacesResponse } from '@dxos/protocols/proto/dxos/devtools/host';
8
- import { SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
9
-
10
- import { ServiceContext } from '../services';
6
+ import { type Space } from '@dxos/echo-pipeline';
7
+ import {
8
+ type SubscribeToSpacesRequest,
9
+ type SubscribeToSpacesResponse,
10
+ } from '@dxos/protocols/proto/dxos/devtools/host';
11
+ import { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
12
+
13
+ import { type ServiceContext } from '../services';
11
14
 
12
15
  export const subscribeToSpaces = (context: ServiceContext, { spaceKeys = [] }: SubscribeToSpacesRequest) => {
13
16
  return new Stream<SubscribeToSpacesResponse>(({ next }) => {
@@ -2,14 +2,14 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { Event, Trigger } from '@dxos/async';
5
+ import { type Event, Trigger } from '@dxos/async';
6
6
  import { Context } from '@dxos/context';
7
- import { verifyCredential, CredentialSigner } from '@dxos/credentials';
8
- import { AuthProvider, AuthVerifier } from '@dxos/echo-pipeline';
9
- import { PublicKey } from '@dxos/keys';
7
+ import { verifyCredential, type CredentialSigner } from '@dxos/credentials';
8
+ import { type AuthProvider, type AuthVerifier } from '@dxos/echo-pipeline';
9
+ import { type PublicKey } from '@dxos/keys';
10
10
  import { log } from '@dxos/log';
11
11
  import { schema } from '@dxos/protocols';
12
- import { ComplexSet } from '@dxos/util';
12
+ import { type ComplexSet } from '@dxos/util';
13
13
 
14
14
  const Credential = schema.getCodecForType('dxos.halo.credentials.Credential');
15
15
 
@@ -11,7 +11,7 @@ import { Keyring } from '@dxos/keyring';
11
11
  import { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';
12
12
  import { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';
13
13
  import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
14
- import { createStorage, Storage, StorageType } from '@dxos/random-access-storage';
14
+ import { createStorage, type Storage, StorageType } from '@dxos/random-access-storage';
15
15
  import { BlobStore } from '@dxos/teleport-extension-object-sync';
16
16
  import { describe, test, afterTest } from '@dxos/test';
17
17
 
@@ -151,4 +151,16 @@ describe('identity/identity-manager', () => {
151
151
  expect(identity2.space.protocol.sessions.get(identity1.deviceKey)).to.exist;
152
152
  expect(identity2.space.protocol.sessions.get(identity1.deviceKey)?.authStatus).to.equal(AuthStatus.SUCCESS);
153
153
  });
154
+
155
+ test('sets device profile', async () => {
156
+ const signalContext = new MemorySignalManagerContext();
157
+
158
+ const peer = await setupPeer({ signalContext });
159
+ const identity = await peer.identityManager.createIdentity();
160
+
161
+ // Note: Waiting for device profile credential to be processed.
162
+ await identity.stateUpdate.waitForCount(1);
163
+
164
+ expect(!!identity.authorizedDeviceKeys.get(identity.deviceKey)?.platform).is.true;
165
+ });
154
166
  });
@@ -2,19 +2,21 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
+ import platform from 'platform';
6
+
5
7
  import { Event } from '@dxos/async';
6
8
  import { Context } from '@dxos/context';
7
9
  import { createCredentialSignerWithKey, CredentialGenerator } from '@dxos/credentials';
8
- import { MetadataStore, SpaceManager, SwarmIdentity } from '@dxos/echo-pipeline';
9
- import { FeedStore } from '@dxos/feed-store';
10
+ import { type MetadataStore, type SpaceManager, type SwarmIdentity } from '@dxos/echo-pipeline';
11
+ import { type FeedStore } from '@dxos/feed-store';
10
12
  import { invariant } from '@dxos/invariant';
11
- import { Keyring } from '@dxos/keyring';
13
+ import { type Keyring } from '@dxos/keyring';
12
14
  import { PublicKey } from '@dxos/keys';
13
15
  import { log } from '@dxos/log';
14
16
  import { trace } from '@dxos/protocols';
15
- import { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
16
- import { IdentityRecord, SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
17
- import { AdmittedFeed, ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
17
+ import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
18
+ import { type IdentityRecord, type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
19
+ import { AdmittedFeed, type ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
18
20
  import { Timeframe } from '@dxos/timeframe';
19
21
  import { trace as Trace } from '@dxos/tracing';
20
22
  import { deferFunction } from '@dxos/util';
@@ -134,6 +136,16 @@ export class IdentityManager {
134
136
  // NOTE: This credential is written last. This is a hack to make sure that display name is set before identity is "ready".
135
137
  credentials.push(await generator.createDeviceAuthorization(identityRecord.deviceKey));
136
138
 
139
+ // Write device metadata to profile.
140
+ credentials.push(
141
+ await generator.createDeviceProfile({
142
+ platform: platform.name,
143
+ platformVersion: platform.version,
144
+ architecture: typeof platform.os?.architecture === 'number' ? String(platform.os.architecture) : undefined,
145
+ os: platform.os?.family,
146
+ osVersion: platform.os?.version,
147
+ }),
148
+ );
137
149
  for (const credential of credentials) {
138
150
  await identity.controlPipeline.writer.write({
139
151
  credential: { credential },
@@ -8,11 +8,11 @@ import chaiAsPromised from 'chai-as-promised';
8
8
  import { Trigger } from '@dxos/async';
9
9
  import { Context } from '@dxos/context';
10
10
  import { PublicKey } from '@dxos/keys';
11
- import { Identity, IdentityService } from '@dxos/protocols/proto/dxos/client/services';
11
+ import { type Identity, type IdentityService } from '@dxos/protocols/proto/dxos/client/services';
12
12
  import { afterEach, afterTest, beforeEach, describe, test } from '@dxos/test';
13
13
 
14
14
  import { IdentityServiceImpl } from './identity-service';
15
- import { ServiceContext } from '../services';
15
+ import { type ServiceContext } from '../services';
16
16
  import { createServiceContext } from '../testing';
17
17
 
18
18
  chai.use(chaiAsPromised);
@@ -6,17 +6,17 @@ import { Stream } from '@dxos/codec-protobuf';
6
6
  import { signPresentation } from '@dxos/credentials';
7
7
  import { todo } from '@dxos/debug';
8
8
  import { invariant } from '@dxos/invariant';
9
- import { Keyring } from '@dxos/keyring';
9
+ import { type Keyring } from '@dxos/keyring';
10
10
  import {
11
- Identity,
12
- IdentityService,
13
- QueryIdentityResponse,
14
- RecoverIdentityRequest,
15
- SignPresentationRequest,
11
+ type Identity,
12
+ type IdentityService,
13
+ type QueryIdentityResponse,
14
+ type RecoverIdentityRequest,
15
+ type SignPresentationRequest,
16
16
  } from '@dxos/protocols/proto/dxos/client/services';
17
- import { Presentation, ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
17
+ import { type Presentation, type ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
18
18
 
19
- import { CreateIdentityOptions, IdentityManager } from './identity-manager';
19
+ import { type CreateIdentityOptions, type IdentityManager } from './identity-manager';
20
20
 
21
21
  export class IdentityServiceImpl implements IdentityService {
22
22
  constructor(
@@ -18,10 +18,10 @@ import {
18
18
  } from '@dxos/echo-pipeline';
19
19
  import { FeedFactory, FeedStore } from '@dxos/feed-store';
20
20
  import { Keyring } from '@dxos/keyring';
21
- import { PublicKey } from '@dxos/keys';
21
+ import { type PublicKey } from '@dxos/keys';
22
22
  import { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';
23
23
  import { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';
24
- import { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
24
+ import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
25
25
  import { AdmittedFeed } from '@dxos/protocols/proto/dxos/halo/credentials';
26
26
  import { createStorage, StorageType } from '@dxos/random-access-storage';
27
27
  import { BlobStore } from '@dxos/teleport-extension-object-sync';
@@ -336,7 +336,7 @@ describe('identity/identity', () => {
336
336
  await identity2.ready();
337
337
  }
338
338
 
339
- expect(Array.from(identity1.authorizedDeviceKeys.values())).toEqual([identity1.deviceKey, identity2.deviceKey]);
340
- expect(Array.from(identity2.authorizedDeviceKeys.values())).toEqual([identity1.deviceKey, identity2.deviceKey]);
339
+ expect(Array.from(identity1.authorizedDeviceKeys.keys())).toEqual([identity1.deviceKey, identity2.deviceKey]);
340
+ expect(Array.from(identity2.authorizedDeviceKeys.keys())).toEqual([identity1.deviceKey, identity2.deviceKey]);
341
341
  });
342
342
  });
@@ -4,26 +4,30 @@
4
4
 
5
5
  import { Event } from '@dxos/async';
6
6
  import { AUTH_TIMEOUT, LOAD_CONTROL_FEEDS_TIMEOUT } from '@dxos/client-protocol';
7
- import { Context } from '@dxos/context';
7
+ import { type Context } from '@dxos/context';
8
8
  import {
9
9
  DeviceStateMachine,
10
- CredentialSigner,
10
+ type CredentialSigner,
11
11
  createCredentialSignerWithKey,
12
12
  createCredentialSignerWithChain,
13
13
  ProfileStateMachine,
14
14
  } from '@dxos/credentials';
15
- import { Signer } from '@dxos/crypto';
15
+ import { type Signer } from '@dxos/crypto';
16
16
  import { failUndefined } from '@dxos/debug';
17
- import { Space } from '@dxos/echo-pipeline';
17
+ import { type Space } from '@dxos/echo-pipeline';
18
18
  import { writeMessages } from '@dxos/feed-store';
19
19
  import { invariant } from '@dxos/invariant';
20
20
  import { PublicKey } from '@dxos/keys';
21
21
  import { log } from '@dxos/log';
22
- import { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
23
- import { AdmittedFeed, ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
24
- import { DeviceAdmissionRequest } from '@dxos/protocols/proto/dxos/halo/invitations';
22
+ import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
23
+ import {
24
+ AdmittedFeed,
25
+ type DeviceProfileDocument,
26
+ type ProfileDocument,
27
+ } from '@dxos/protocols/proto/dxos/halo/credentials';
28
+ import { type DeviceAdmissionRequest } from '@dxos/protocols/proto/dxos/halo/invitations';
25
29
  import { trace } from '@dxos/tracing';
26
- import { ComplexSet } from '@dxos/util';
30
+ import { type ComplexMap, ComplexSet } from '@dxos/util';
27
31
 
28
32
  import { TrustedKeySetAuthVerifier } from './authenticator';
29
33
 
@@ -57,6 +61,8 @@ export class Identity {
57
61
  this.identityKey = identityKey;
58
62
  this.deviceKey = deviceKey;
59
63
 
64
+ log.trace('dxos.halo.device', { deviceKey });
65
+
60
66
  this._deviceStateMachine = new DeviceStateMachine({
61
67
  identityKey: this.identityKey,
62
68
  deviceKey: this.deviceKey,
@@ -68,14 +74,14 @@ export class Identity {
68
74
  });
69
75
 
70
76
  this.authVerifier = new TrustedKeySetAuthVerifier({
71
- trustedKeysProvider: () => this.authorizedDeviceKeys,
77
+ trustedKeysProvider: () => new ComplexSet(PublicKey.hash, this.authorizedDeviceKeys.keys()),
72
78
  update: this.stateUpdate,
73
79
  authTimeout: AUTH_TIMEOUT,
74
80
  });
75
81
  }
76
82
 
77
83
  // TODO(burdon): Expose state object?
78
- get authorizedDeviceKeys(): ComplexSet<PublicKey> {
84
+ get authorizedDeviceKeys(): ComplexMap<PublicKey, DeviceProfileDocument> {
79
85
  return this._deviceStateMachine.authorizedDeviceKeys;
80
86
  }
81
87
 
@@ -9,7 +9,7 @@ import { Context } from '@dxos/context';
9
9
  import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
10
10
  import { describe, test, afterTest } from '@dxos/test';
11
11
 
12
- import { ServiceContext } from '../services';
12
+ import { type ServiceContext } from '../services';
13
13
  import { createPeers, createServiceContext, performInvitation } from '../testing';
14
14
 
15
15
  const closeAfterTest = async (peer: ServiceContext) => {
@@ -3,12 +3,16 @@
3
3
  //
4
4
 
5
5
  import { invariant } from '@dxos/invariant';
6
- import { Keyring } from '@dxos/keyring';
6
+ import { type Keyring } from '@dxos/keyring';
7
7
  import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
8
- import { AdmissionRequest, AdmissionResponse, IntroductionRequest } from '@dxos/protocols/proto/dxos/halo/invitations';
8
+ import {
9
+ type AdmissionRequest,
10
+ type AdmissionResponse,
11
+ type IntroductionRequest,
12
+ } from '@dxos/protocols/proto/dxos/halo/invitations';
9
13
 
10
- import { InvitationProtocol } from './invitation-protocol';
11
- import { Identity, JoinIdentityParams } from '../identity';
14
+ import { type InvitationProtocol } from './invitation-protocol';
15
+ import { type Identity, type JoinIdentityParams } from '../identity';
12
16
 
13
17
  export class DeviceInvitationProtocol implements InvitationProtocol {
14
18
  constructor(
@@ -9,16 +9,16 @@ import { PublicKey } from '@dxos/keys';
9
9
  import { log } from '@dxos/log';
10
10
  import { InvalidInvitationExtensionRoleError, schema, trace } from '@dxos/protocols';
11
11
  import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
12
- import { ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
12
+ import { type ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
13
13
  import {
14
- AdmissionRequest,
15
- AdmissionResponse,
14
+ type AdmissionRequest,
15
+ type AdmissionResponse,
16
16
  AuthenticationResponse,
17
- IntroductionRequest,
18
- InvitationHostService,
17
+ type IntroductionRequest,
18
+ type InvitationHostService,
19
19
  Options,
20
20
  } from '@dxos/protocols/proto/dxos/halo/invitations';
21
- import { ExtensionContext, RpcExtension } from '@dxos/teleport';
21
+ import { type ExtensionContext, RpcExtension } from '@dxos/teleport';
22
22
 
23
23
  /// Timeout for the options exchange.
24
24
  const OPTIONS_TIMEOUT = 10_000;
@@ -2,9 +2,13 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
6
- import { ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
7
- import { AdmissionRequest, AdmissionResponse, IntroductionRequest } from '@dxos/protocols/proto/dxos/halo/invitations';
5
+ import { type Invitation } from '@dxos/protocols/proto/dxos/client/services';
6
+ import { type ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
7
+ import {
8
+ type AdmissionRequest,
9
+ type AdmissionResponse,
10
+ type IntroductionRequest,
11
+ } from '@dxos/protocols/proto/dxos/halo/invitations';
8
12
 
9
13
  export interface InvitationProtocol {
10
14
  // Debugging
@@ -14,7 +14,12 @@ import { generatePasscode } from '@dxos/credentials';
14
14
  import { invariant } from '@dxos/invariant';
15
15
  import { PublicKey } from '@dxos/keys';
16
16
  import { log } from '@dxos/log';
17
- import { createTeleportProtocolFactory, NetworkManager, StarTopology, SwarmConnection } from '@dxos/network-manager';
17
+ import {
18
+ createTeleportProtocolFactory,
19
+ type NetworkManager,
20
+ StarTopology,
21
+ type SwarmConnection,
22
+ } from '@dxos/network-manager';
18
23
  import { InvalidInvitationExtensionRoleError, trace } from '@dxos/protocols';
19
24
  import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
20
25
  import { AuthenticationResponse } from '@dxos/protocols/proto/dxos/halo/invitations';
@@ -25,7 +30,7 @@ import {
25
30
  isAuthenticationRequired,
26
31
  MAX_OTP_ATTEMPTS,
27
32
  } from './invitation-extension';
28
- import { InvitationProtocol } from './invitation-protocol';
33
+ import { type InvitationProtocol } from './invitation-protocol';
29
34
 
30
35
  /**
31
36
  * Generic handler for Halo and Space invitations.
@@ -3,19 +3,19 @@
3
3
  //
4
4
 
5
5
  import { Event } from '@dxos/async';
6
- import { AuthenticatingInvitation, CancellableInvitation } from '@dxos/client-protocol';
6
+ import { type AuthenticatingInvitation, type CancellableInvitation } from '@dxos/client-protocol';
7
7
  import { Stream } from '@dxos/codec-protobuf';
8
8
  import { invariant } from '@dxos/invariant';
9
9
  import { log } from '@dxos/log';
10
10
  import {
11
- AuthenticationRequest,
11
+ type AuthenticationRequest,
12
12
  Invitation,
13
- InvitationsService,
13
+ type InvitationsService,
14
14
  QueryInvitationsResponse,
15
15
  } from '@dxos/protocols/proto/dxos/client/services';
16
16
 
17
- import { InvitationProtocol } from './invitation-protocol';
18
- import { InvitationsHandler } from './invitations-handler';
17
+ import { type InvitationProtocol } from './invitation-protocol';
18
+ import { type InvitationsHandler } from './invitations-handler';
19
19
 
20
20
  /**
21
21
  * Adapts invitation service observable to client/service stream.
@@ -128,8 +128,6 @@ export class InvitationsServiceImpl implements InvitationsService {
128
128
  await accepted.cancel();
129
129
  this._acceptInvitations.delete(invitationId);
130
130
  this._removedAccepted.emit(accepted.get());
131
- } else {
132
- log.warn('invalid invitation', { invitationId });
133
131
  }
134
132
  }
135
133
 
@@ -10,7 +10,7 @@ import { testLocalDatabase } from '@dxos/echo-pipeline/testing';
10
10
  import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
11
11
  import { afterTest, describe, test } from '@dxos/test';
12
12
 
13
- import { ServiceContext } from '../services';
13
+ import { type ServiceContext } from '../services';
14
14
  import { createIdentity, createPeers, syncItemsLocal } from '../testing';
15
15
  import { performInvitation } from '../testing/invitation-utils';
16
16
 
@@ -5,16 +5,20 @@
5
5
  import { createAdmissionCredentials, getCredentialAssertion } from '@dxos/credentials';
6
6
  import { writeMessages } from '@dxos/feed-store';
7
7
  import { invariant } from '@dxos/invariant';
8
- import { Keyring } from '@dxos/keyring';
9
- import { PublicKey } from '@dxos/keys';
8
+ import { type Keyring } from '@dxos/keyring';
9
+ import { type PublicKey } from '@dxos/keys';
10
10
  import { log } from '@dxos/log';
11
11
  import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
12
- import { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
13
- import { ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
14
- import { AdmissionRequest, AdmissionResponse, IntroductionRequest } from '@dxos/protocols/proto/dxos/halo/invitations';
15
-
16
- import { InvitationProtocol } from './invitation-protocol';
17
- import { DataSpaceManager, SigningContext } from '../spaces';
12
+ import { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
13
+ import { type ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
14
+ import {
15
+ type AdmissionRequest,
16
+ type AdmissionResponse,
17
+ type IntroductionRequest,
18
+ } from '@dxos/protocols/proto/dxos/halo/invitations';
19
+
20
+ import { type InvitationProtocol } from './invitation-protocol';
21
+ import { type DataSpaceManager, type SigningContext } from '../spaces';
18
22
 
19
23
  export class SpaceInvitationProtocol implements InvitationProtocol {
20
24
  constructor(
@@ -6,7 +6,7 @@ import { asyncTimeout, Trigger } from '@dxos/async';
6
6
  import { RESOURCE_LOCK_TIMEOUT } from '@dxos/client-protocol';
7
7
  import { log, logInfo } from '@dxos/log';
8
8
 
9
- import { ResourceLock, ResourceLockOptions } from './resource-lock';
9
+ import { type ResourceLock, type ResourceLockOptions } from './resource-lock';
10
10
 
11
11
  enum Message {
12
12
  ACQUIRING = 'acquiring',
@@ -2,13 +2,13 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { FileHandle } from 'node:fs/promises';
5
+ import { type FileHandle } from 'node:fs/promises';
6
6
 
7
7
  import { invariant } from '@dxos/invariant';
8
8
  import { LockFile } from '@dxos/lock-file';
9
9
  import { log, logInfo } from '@dxos/log';
10
10
 
11
- import { ResourceLock, ResourceLockOptions } from './resource-lock';
11
+ import { type ResourceLock, type ResourceLockOptions } from './resource-lock';
12
12
 
13
13
  // TODO(mykola): Factor out.
14
14
  export class Lock implements ResourceLock {
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { MaybePromise } from '@dxos/util';
5
+ import { type MaybePromise } from '@dxos/util';
6
6
 
7
7
  export type ResourceLockOptions = {
8
8
  lockKey: string;