@dxos/plugin-client 0.8.4-main.84f28bd → 0.8.4-main.ae835ea

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 (162) hide show
  1. package/dist/lib/browser/{app-graph-builder-3EILEBWW.mjs → app-graph-builder-KCCH45OW.mjs} +23 -22
  2. package/dist/lib/browser/app-graph-builder-KCCH45OW.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-4LRO3Y2O.mjs +19 -0
  4. package/dist/lib/browser/chunk-4LRO3Y2O.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-N5UR2HOE.mjs +18 -0
  6. package/dist/lib/browser/chunk-N5UR2HOE.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-Q7TFRFHI.mjs → chunk-RDIG75CA.mjs} +15 -16
  8. package/dist/lib/browser/chunk-RDIG75CA.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-64ANQXYZ.mjs → chunk-SCNW6KMG.mjs} +48 -55
  10. package/dist/lib/browser/chunk-SCNW6KMG.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-ZRVMXLDR.mjs +15 -0
  12. package/dist/lib/browser/chunk-ZRVMXLDR.mjs.map +7 -0
  13. package/dist/lib/browser/{client-JFNMEFOK.mjs → client-O7U3MQ6J.mjs} +14 -8
  14. package/dist/lib/browser/client-O7U3MQ6J.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +23 -19
  16. package/dist/lib/browser/index.mjs.map +4 -4
  17. package/dist/lib/browser/{intent-resolver-YGAQVXI2.mjs → intent-resolver-SPZU2X4O.mjs} +18 -18
  18. package/dist/lib/browser/intent-resolver-SPZU2X4O.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{migrations-5COKGS4E.mjs → migrations-FQYDKKYO.mjs} +5 -5
  21. package/dist/lib/{node-esm/migrations-FE4PDX6W.mjs.map → browser/migrations-FQYDKKYO.mjs.map} +2 -2
  22. package/dist/lib/browser/{react-context-GBNYT5QK.mjs → react-context-QCKETSRF.mjs} +7 -7
  23. package/dist/lib/browser/react-context-QCKETSRF.mjs.map +7 -0
  24. package/dist/lib/browser/{react-surface-YKQAUE2M.mjs → react-surface-SLGNIGL6.mjs} +7 -7
  25. package/dist/lib/browser/{react-surface-YKQAUE2M.mjs.map → react-surface-SLGNIGL6.mjs.map} +3 -3
  26. package/dist/lib/browser/{schema-defs-6L7W2RHL.mjs → schema-defs-SPPWTZRH.mjs} +5 -5
  27. package/dist/lib/browser/schema-defs-SPPWTZRH.mjs.map +7 -0
  28. package/dist/lib/browser/types/index.mjs +10 -0
  29. package/dist/lib/node-esm/{app-graph-builder-GINHOE7A.mjs → app-graph-builder-B5IOYV4W.mjs} +23 -22
  30. package/dist/lib/node-esm/app-graph-builder-B5IOYV4W.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-6ANOJ7ZM.mjs +19 -0
  32. package/dist/lib/node-esm/chunk-6ANOJ7ZM.mjs.map +7 -0
  33. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs +20 -0
  34. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs.map +7 -0
  35. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs +17 -0
  36. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs.map +7 -0
  37. package/dist/lib/node-esm/{chunk-K4PIKBQQ.mjs → chunk-RHMYXMKB.mjs} +48 -55
  38. package/dist/lib/node-esm/chunk-RHMYXMKB.mjs.map +7 -0
  39. package/dist/lib/node-esm/{chunk-GDJMDBWM.mjs → chunk-VENKFPBC.mjs} +15 -16
  40. package/dist/lib/node-esm/chunk-VENKFPBC.mjs.map +7 -0
  41. package/dist/lib/node-esm/{client-XDYQARBL.mjs → client-6MTNT7M6.mjs} +14 -8
  42. package/dist/lib/node-esm/client-6MTNT7M6.mjs.map +7 -0
  43. package/dist/lib/node-esm/index.mjs +23 -19
  44. package/dist/lib/node-esm/index.mjs.map +4 -4
  45. package/dist/lib/node-esm/{intent-resolver-IN7YG7N7.mjs → intent-resolver-4HEQTR5X.mjs} +18 -18
  46. package/dist/lib/node-esm/intent-resolver-4HEQTR5X.mjs.map +7 -0
  47. package/dist/lib/node-esm/meta.json +1 -1
  48. package/dist/lib/node-esm/{migrations-FE4PDX6W.mjs → migrations-2D5ENOAB.mjs} +5 -5
  49. package/dist/lib/{browser/migrations-5COKGS4E.mjs.map → node-esm/migrations-2D5ENOAB.mjs.map} +2 -2
  50. package/dist/lib/node-esm/{react-context-UCK43H3Z.mjs → react-context-ZVUDFBCH.mjs} +7 -7
  51. package/dist/lib/node-esm/react-context-ZVUDFBCH.mjs.map +7 -0
  52. package/dist/lib/node-esm/{react-surface-HDHC6XHQ.mjs → react-surface-FFOAE7HL.mjs} +7 -7
  53. package/dist/lib/node-esm/{react-surface-HDHC6XHQ.mjs.map → react-surface-FFOAE7HL.mjs.map} +3 -3
  54. package/dist/lib/node-esm/{schema-defs-GZIVMHLW.mjs → schema-defs-FIV7SETB.mjs} +5 -5
  55. package/dist/lib/node-esm/schema-defs-FIV7SETB.mjs.map +7 -0
  56. package/dist/lib/node-esm/{types.mjs → types/index.mjs} +3 -3
  57. package/dist/types/src/ClientPlugin.d.ts +1 -1
  58. package/dist/types/src/ClientPlugin.d.ts.map +1 -1
  59. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  60. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  61. package/dist/types/src/capabilities/capabilities.d.ts +2 -3
  62. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/client.d.ts +1 -1
  64. package/dist/types/src/capabilities/client.d.ts.map +1 -1
  65. package/dist/types/src/capabilities/index.d.ts +10 -10
  66. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  68. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/migrations.d.ts +1 -1
  70. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/react-context.d.ts +2 -2
  72. package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  74. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  76. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  77. package/dist/types/src/components/DevicesContainer.d.ts.map +1 -1
  78. package/dist/types/src/components/DevicesContainer.stories.d.ts +224 -5
  79. package/dist/types/src/components/DevicesContainer.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/JoinDialog.d.ts +1 -1
  81. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  82. package/dist/types/src/components/ProfileContainer.d.ts.map +1 -1
  83. package/dist/types/src/components/ProfileContainer.stories.d.ts +57 -5
  84. package/dist/types/src/components/ProfileContainer.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/RecoveryCodeDialog.d.ts +1 -1
  86. package/dist/types/src/components/RecoveryCodeDialog.d.ts.map +1 -1
  87. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts +59 -5
  88. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts +1 -1
  90. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts +57 -5
  92. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/ResetDialog.d.ts +1 -1
  94. package/dist/types/src/components/ResetDialog.d.ts.map +1 -1
  95. package/dist/types/src/components/ResetDialog.stories.d.ts +59 -4
  96. package/dist/types/src/components/ResetDialog.stories.d.ts.map +1 -1
  97. package/dist/types/src/events.d.ts.map +1 -1
  98. package/dist/types/src/index.d.ts +3 -2
  99. package/dist/types/src/index.d.ts.map +1 -1
  100. package/dist/types/src/meta.d.ts +0 -1
  101. package/dist/types/src/meta.d.ts.map +1 -1
  102. package/dist/types/src/types/index.d.ts +2 -0
  103. package/dist/types/src/types/index.d.ts.map +1 -0
  104. package/dist/types/src/{types.d.ts → types/schema.d.ts} +31 -25
  105. package/dist/types/src/types/schema.d.ts.map +1 -0
  106. package/dist/types/tsconfig.tsbuildinfo +1 -1
  107. package/package.json +40 -41
  108. package/src/ClientPlugin.ts +57 -59
  109. package/src/capabilities/app-graph-builder.ts +20 -18
  110. package/src/capabilities/capabilities.ts +7 -6
  111. package/src/capabilities/client.ts +6 -4
  112. package/src/capabilities/intent-resolver.ts +7 -6
  113. package/src/capabilities/migrations.ts +1 -1
  114. package/src/capabilities/react-context.tsx +3 -2
  115. package/src/capabilities/react-surface.tsx +3 -3
  116. package/src/capabilities/schema-defs.ts +3 -3
  117. package/src/components/DevicesContainer.stories.tsx +9 -11
  118. package/src/components/DevicesContainer.tsx +59 -71
  119. package/src/components/JoinDialog.tsx +4 -4
  120. package/src/components/ProfileContainer.stories.tsx +8 -9
  121. package/src/components/ProfileContainer.tsx +23 -26
  122. package/src/components/RecoveryCodeDialog.stories.tsx +9 -10
  123. package/src/components/RecoveryCodeDialog.tsx +3 -3
  124. package/src/components/RecoveryCredentialsContainer.stories.tsx +9 -11
  125. package/src/components/RecoveryCredentialsContainer.tsx +47 -50
  126. package/src/components/ResetDialog.stories.tsx +10 -11
  127. package/src/components/ResetDialog.tsx +4 -4
  128. package/src/events.ts +6 -6
  129. package/src/index.ts +4 -3
  130. package/src/meta.ts +6 -3
  131. package/src/types/index.ts +5 -0
  132. package/src/{types.ts → types/schema.ts} +15 -16
  133. package/dist/lib/browser/app-graph-builder-3EILEBWW.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-64ANQXYZ.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-AWXKL4UR.mjs +0 -18
  136. package/dist/lib/browser/chunk-AWXKL4UR.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-CAF2COXW.mjs +0 -19
  138. package/dist/lib/browser/chunk-CAF2COXW.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-GS3LDHYD.mjs +0 -12
  140. package/dist/lib/browser/chunk-GS3LDHYD.mjs.map +0 -7
  141. package/dist/lib/browser/chunk-Q7TFRFHI.mjs.map +0 -7
  142. package/dist/lib/browser/client-JFNMEFOK.mjs.map +0 -7
  143. package/dist/lib/browser/intent-resolver-YGAQVXI2.mjs.map +0 -7
  144. package/dist/lib/browser/react-context-GBNYT5QK.mjs.map +0 -7
  145. package/dist/lib/browser/schema-defs-6L7W2RHL.mjs.map +0 -7
  146. package/dist/lib/browser/types.mjs +0 -10
  147. package/dist/lib/node-esm/app-graph-builder-GINHOE7A.mjs.map +0 -7
  148. package/dist/lib/node-esm/chunk-3BUB64JB.mjs +0 -19
  149. package/dist/lib/node-esm/chunk-3BUB64JB.mjs.map +0 -7
  150. package/dist/lib/node-esm/chunk-GDJMDBWM.mjs.map +0 -7
  151. package/dist/lib/node-esm/chunk-K4PIKBQQ.mjs.map +0 -7
  152. package/dist/lib/node-esm/chunk-SZLX4BVJ.mjs +0 -14
  153. package/dist/lib/node-esm/chunk-SZLX4BVJ.mjs.map +0 -7
  154. package/dist/lib/node-esm/chunk-UMO3ETDV.mjs +0 -20
  155. package/dist/lib/node-esm/chunk-UMO3ETDV.mjs.map +0 -7
  156. package/dist/lib/node-esm/client-XDYQARBL.mjs.map +0 -7
  157. package/dist/lib/node-esm/intent-resolver-IN7YG7N7.mjs.map +0 -7
  158. package/dist/lib/node-esm/react-context-UCK43H3Z.mjs.map +0 -7
  159. package/dist/lib/node-esm/schema-defs-GZIVMHLW.mjs.map +0 -7
  160. package/dist/types/src/types.d.ts.map +0 -1
  161. /package/dist/lib/browser/{types.mjs.map → types/index.mjs.map} +0 -0
  162. /package/dist/lib/node-esm/{types.mjs.map → types/index.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-client",
3
- "version": "0.8.4-main.84f28bd",
3
+ "version": "0.8.4-main.ae835ea",
4
4
  "description": "DXOS Surface plugin for DXOS Client",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,21 +10,23 @@
10
10
  "type": "module",
11
11
  "exports": {
12
12
  ".": {
13
+ "source": "./src/index.ts",
13
14
  "types": "./dist/types/src/index.d.ts",
14
15
  "browser": "./dist/lib/browser/index.mjs",
15
16
  "node": "./dist/lib/node-esm/index.mjs"
16
17
  },
17
18
  "./types": {
18
- "types": "./dist/types/src/types.d.ts",
19
- "browser": "./dist/lib/browser/types.mjs",
20
- "node": "./dist/lib/node-esm/types.mjs"
19
+ "source": "./src/types/index.ts",
20
+ "types": "./dist/types/src/types/index.d.ts",
21
+ "browser": "./dist/lib/browser/types/index.mjs",
22
+ "node": "./dist/lib/node-esm/types/index.mjs"
21
23
  }
22
24
  },
23
25
  "types": "dist/types/src/index.d.ts",
24
26
  "typesVersions": {
25
27
  "*": {
26
28
  "types": [
27
- "dist/types/src/types.d.ts"
29
+ "dist/types/src/types/index.d.ts"
28
30
  ]
29
31
  }
30
32
  },
@@ -34,50 +36,47 @@
34
36
  ],
35
37
  "dependencies": {
36
38
  "@preact-signals/safe-react": "^0.9.0",
37
- "@preact/signals-core": "^1.9.0",
39
+ "@preact/signals-core": "^1.12.1",
38
40
  "react-qr-rounded": "^1.0.0",
39
- "@dxos/app-framework": "0.8.4-main.84f28bd",
40
- "@dxos/async": "0.8.4-main.84f28bd",
41
- "@dxos/config": "0.8.4-main.84f28bd",
42
- "@dxos/echo-schema": "0.8.4-main.84f28bd",
43
- "@dxos/echo": "0.8.4-main.84f28bd",
44
- "@dxos/echo-signals": "0.8.4-main.84f28bd",
45
- "@dxos/invariant": "0.8.4-main.84f28bd",
46
- "@dxos/local-storage": "0.8.4-main.84f28bd",
47
- "@dxos/plugin-graph": "0.8.4-main.84f28bd",
48
- "@dxos/log": "0.8.4-main.84f28bd",
49
- "@dxos/plugin-observability": "0.8.4-main.84f28bd",
50
- "@dxos/react-client": "0.8.4-main.84f28bd",
51
- "@dxos/react-ui-form": "0.8.4-main.84f28bd",
52
- "@dxos/react-ui-pickers": "0.8.4-main.84f28bd",
53
- "@dxos/react-ui-stack": "0.8.4-main.84f28bd",
54
- "@dxos/shell": "0.8.4-main.84f28bd",
55
- "@dxos/util": "0.8.4-main.84f28bd"
41
+ "@dxos/app-framework": "0.8.4-main.ae835ea",
42
+ "@dxos/async": "0.8.4-main.ae835ea",
43
+ "@dxos/config": "0.8.4-main.ae835ea",
44
+ "@dxos/echo": "0.8.4-main.ae835ea",
45
+ "@dxos/echo-signals": "0.8.4-main.ae835ea",
46
+ "@dxos/local-storage": "0.8.4-main.ae835ea",
47
+ "@dxos/log": "0.8.4-main.ae835ea",
48
+ "@dxos/plugin-graph": "0.8.4-main.ae835ea",
49
+ "@dxos/plugin-observability": "0.8.4-main.ae835ea",
50
+ "@dxos/invariant": "0.8.4-main.ae835ea",
51
+ "@dxos/react-client": "0.8.4-main.ae835ea",
52
+ "@dxos/react-ui-form": "0.8.4-main.ae835ea",
53
+ "@dxos/react-ui-pickers": "0.8.4-main.ae835ea",
54
+ "@dxos/shell": "0.8.4-main.ae835ea",
55
+ "@dxos/react-ui-stack": "0.8.4-main.ae835ea",
56
+ "@dxos/util": "0.8.4-main.ae835ea"
56
57
  },
57
58
  "devDependencies": {
58
- "@effect-rx/rx-react": "0.38.0",
59
- "@effect/platform": "0.88.0",
60
- "@phosphor-icons/react": "^2.1.5",
61
- "@types/react": "~18.2.0",
62
- "@types/react-dom": "~18.2.0",
63
- "effect": "3.16.13",
64
- "react": "~18.2.0",
65
- "react-dom": "~18.2.0",
66
- "vite": "5.4.7",
67
- "@dxos/live-object": "0.8.4-main.84f28bd",
68
- "@dxos/react-ui": "0.8.4-main.84f28bd",
69
- "@dxos/react-ui-theme": "0.8.4-main.84f28bd",
70
- "@dxos/storybook-utils": "0.8.4-main.84f28bd"
59
+ "@effect-rx/rx-react": "0.42.4",
60
+ "@effect/platform": "0.92.1",
61
+ "@types/react": "~19.2.2",
62
+ "@types/react-dom": "~19.2.2",
63
+ "effect": "3.18.3",
64
+ "react": "~19.2.0",
65
+ "react-dom": "~19.2.0",
66
+ "vite": "7.1.9",
67
+ "@dxos/live-object": "0.8.4-main.ae835ea",
68
+ "@dxos/react-ui": "0.8.4-main.ae835ea",
69
+ "@dxos/react-ui-theme": "0.8.4-main.ae835ea",
70
+ "@dxos/storybook-utils": "0.8.4-main.ae835ea"
71
71
  },
72
72
  "peerDependencies": {
73
73
  "@effect-rx/rx-react": "^0.34.1",
74
74
  "@effect/platform": "^0.80.12",
75
- "@phosphor-icons/react": "^2.1.5",
76
75
  "effect": "^3.13.3",
77
- "react": "~18.2.0",
78
- "react-dom": "~18.2.0",
79
- "@dxos/react-ui": "0.8.4-main.84f28bd",
80
- "@dxos/react-ui-theme": "0.8.4-main.84f28bd"
76
+ "react": "^19.0.0",
77
+ "react-dom": "^19.0.0",
78
+ "@dxos/react-ui": "0.8.4-main.ae835ea",
79
+ "@dxos/react-ui-theme": "0.8.4-main.ae835ea"
81
80
  },
82
81
  "publishConfig": {
83
82
  "access": "public"
@@ -2,11 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, defineModule, definePlugin, Events, oneOf } from '@dxos/app-framework';
5
+ import { Capabilities, Events, contributes, defineModule, definePlugin, oneOf } from '@dxos/app-framework';
6
6
 
7
7
  import {
8
- Client,
9
8
  AppGraphBuilder,
9
+ Client,
10
10
  IntentResolver,
11
11
  Migrations,
12
12
  ReactContext,
@@ -18,61 +18,59 @@ import { meta } from './meta';
18
18
  import { translations } from './translations';
19
19
  import { type ClientPluginOptions } from './types';
20
20
 
21
- export const ClientPlugin = ({
22
- invitationUrl = window.location.origin,
23
- invitationParam = 'deviceInvitationCode',
24
- onReset,
25
- ...options
26
- }: ClientPluginOptions) => {
27
- const createInvitationUrl = (invitationCode: string) => {
28
- const baseUrl = new URL(invitationUrl);
29
- baseUrl.searchParams.set(invitationParam, invitationCode);
30
- return baseUrl.toString();
31
- };
21
+ export const ClientPlugin = definePlugin<ClientPluginOptions>(
22
+ meta,
23
+ ({ invitationUrl = window.location.origin, invitationParam = 'deviceInvitationCode', onReset, ...options }) => {
24
+ const createInvitationUrl = (invitationCode: string) => {
25
+ const baseUrl = new URL(invitationUrl);
26
+ baseUrl.searchParams.set(invitationParam, invitationCode);
27
+ return baseUrl.toString();
28
+ };
32
29
 
33
- return definePlugin(meta, [
34
- defineModule({
35
- id: `${meta.id}/module/client`,
36
- activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
37
- activatesAfter: [ClientEvents.ClientReady],
38
- activate: (context) => Client({ ...options, context }),
39
- }),
40
- defineModule({
41
- id: `${meta.id}/module/schema`,
42
- activatesOn: ClientEvents.ClientReady,
43
- activatesBefore: [ClientEvents.SetupSchema],
44
- activate: SchemaDefs,
45
- }),
46
- defineModule({
47
- id: `${meta.id}/module/migration`,
48
- activatesOn: ClientEvents.ClientReady,
49
- activatesBefore: [ClientEvents.SetupMigration],
50
- activate: Migrations,
51
- }),
52
- defineModule({
53
- id: `${meta.id}/module/react-context`,
54
- activatesOn: Events.Startup,
55
- activate: ReactContext,
56
- }),
57
- defineModule({
58
- id: `${meta.id}/module/react-surface`,
59
- activatesOn: Events.SetupReactSurface,
60
- activate: () => ReactSurface({ createInvitationUrl, onReset }),
61
- }),
62
- defineModule({
63
- id: `${meta.id}/module/app-graph-builder`,
64
- activatesOn: Events.SetupAppGraph,
65
- activate: AppGraphBuilder,
66
- }),
67
- defineModule({
68
- id: `${meta.id}/module/intent-resolver`,
69
- activatesOn: Events.SetupIntentResolver,
70
- activate: (context) => IntentResolver({ context }),
71
- }),
72
- defineModule({
73
- id: `${meta.id}/module/translations`,
74
- activatesOn: Events.SetupTranslations,
75
- activate: () => contributes(Capabilities.Translations, translations),
76
- }),
77
- ]);
78
- };
30
+ return [
31
+ defineModule({
32
+ id: `${meta.id}/module/client`,
33
+ activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
34
+ activatesAfter: [ClientEvents.ClientReady],
35
+ activate: (context) => Client({ ...options, context }),
36
+ }),
37
+ defineModule({
38
+ id: `${meta.id}/module/schema`,
39
+ activatesOn: ClientEvents.ClientReady,
40
+ activatesBefore: [ClientEvents.SetupSchema],
41
+ activate: SchemaDefs,
42
+ }),
43
+ defineModule({
44
+ id: `${meta.id}/module/migration`,
45
+ activatesOn: ClientEvents.ClientReady,
46
+ activatesBefore: [ClientEvents.SetupMigration],
47
+ activate: Migrations,
48
+ }),
49
+ defineModule({
50
+ id: `${meta.id}/module/react-context`,
51
+ activatesOn: Events.Startup,
52
+ activate: ReactContext,
53
+ }),
54
+ defineModule({
55
+ id: `${meta.id}/module/react-surface`,
56
+ activatesOn: Events.SetupReactSurface,
57
+ activate: () => ReactSurface({ createInvitationUrl, onReset }),
58
+ }),
59
+ defineModule({
60
+ id: `${meta.id}/module/app-graph-builder`,
61
+ activatesOn: Events.SetupAppGraph,
62
+ activate: AppGraphBuilder,
63
+ }),
64
+ defineModule({
65
+ id: `${meta.id}/module/intent-resolver`,
66
+ activatesOn: Events.SetupIntentResolver,
67
+ activate: (context) => IntentResolver({ context }),
68
+ }),
69
+ defineModule({
70
+ id: `${meta.id}/module/translations`,
71
+ activatesOn: Events.SetupTranslations,
72
+ activate: () => contributes(Capabilities.Translations, translations),
73
+ }),
74
+ ];
75
+ },
76
+ );
@@ -3,37 +3,39 @@
3
3
  //
4
4
 
5
5
  import { Rx } from '@effect-rx/rx-react';
6
- import { Option, pipe } from 'effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Option from 'effect/Option';
7
8
 
8
9
  import { createIntent } from '@dxos/app-framework';
9
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
10
- import { createExtension, rxFromObservable, ROOT_ID } from '@dxos/plugin-graph';
10
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
11
+ import { ROOT_ID, createExtension, rxFromObservable } from '@dxos/plugin-graph';
11
12
  import { ConnectionState } from '@dxos/react-client/mesh';
12
13
 
13
- import { ClientCapabilities } from './capabilities';
14
- import { CLIENT_PLUGIN } from '../meta';
14
+ import { meta } from '../meta';
15
15
  import { Account, ClientAction } from '../types';
16
16
 
17
+ import { ClientCapabilities } from './capabilities';
18
+
17
19
  export default (context: PluginContext) =>
18
20
  contributes(
19
21
  Capabilities.AppGraphBuilder,
20
22
  createExtension({
21
- id: CLIENT_PLUGIN,
23
+ id: meta.id,
22
24
  actions: (node) =>
23
25
  Rx.make((get) =>
24
- pipe(
26
+ Function.pipe(
25
27
  get(node),
26
28
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
27
29
  Option.map(() => {
28
30
  return [
29
31
  {
30
- id: `${CLIENT_PLUGIN}/open-user-account`,
32
+ id: `${meta.id}/open-user-account`,
31
33
  data: async () => {
32
34
  const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
33
35
  await dispatch(createIntent(ClientAction.ShareIdentity));
34
36
  },
35
37
  properties: {
36
- label: ['open user account label', { ns: CLIENT_PLUGIN }],
38
+ label: ['open user account label', { ns: meta.id }],
37
39
  icon: 'ph--user--regular',
38
40
  disposition: 'menu',
39
41
  keyBinding: {
@@ -51,7 +53,7 @@ export default (context: PluginContext) =>
51
53
  ),
52
54
  connector: (node) =>
53
55
  Rx.make((get) =>
54
- pipe(
56
+ Function.pipe(
55
57
  get(node),
56
58
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
57
59
  Option.map(() => {
@@ -62,9 +64,9 @@ export default (context: PluginContext) =>
62
64
  return [
63
65
  {
64
66
  id: Account.id,
65
- type: CLIENT_PLUGIN,
67
+ type: meta.id,
66
68
  properties: {
67
- label: ['account label', { ns: CLIENT_PLUGIN }],
69
+ label: ['account label', { ns: meta.id }],
68
70
  icon: 'ph--user--regular',
69
71
  disposition: 'user-account',
70
72
  // NOTE: This currently needs to be the identity key because the fallback is generated from hex.
@@ -77,18 +79,18 @@ export default (context: PluginContext) =>
77
79
  {
78
80
  id: Account.Profile,
79
81
  data: Account.Profile,
80
- type: CLIENT_PLUGIN,
82
+ type: meta.id,
81
83
  properties: {
82
- label: ['profile label', { ns: CLIENT_PLUGIN }],
84
+ label: ['profile label', { ns: meta.id }],
83
85
  icon: 'ph--user--regular',
84
86
  },
85
87
  },
86
88
  {
87
89
  id: Account.Devices,
88
90
  data: Account.Devices,
89
- type: CLIENT_PLUGIN,
91
+ type: meta.id,
90
92
  properties: {
91
- label: ['devices label', { ns: CLIENT_PLUGIN }],
93
+ label: ['devices label', { ns: meta.id }],
92
94
  icon: 'ph--devices--regular',
93
95
  testId: 'clientPlugin.devices',
94
96
  },
@@ -96,9 +98,9 @@ export default (context: PluginContext) =>
96
98
  {
97
99
  id: Account.Security,
98
100
  data: Account.Security,
99
- type: CLIENT_PLUGIN,
101
+ type: meta.id,
100
102
  properties: {
101
- label: ['security label', { ns: CLIENT_PLUGIN }],
103
+ label: ['security label', { ns: meta.id }],
102
104
  icon: 'ph--key--regular',
103
105
  },
104
106
  },
@@ -5,13 +5,14 @@
5
5
  import { defineCapability } from '@dxos/app-framework';
6
6
  import { type Client } from '@dxos/client';
7
7
  import { type ObjectMigration } from '@dxos/client/echo';
8
- import { type TypedObject } from '@dxos/echo-schema';
8
+ import { type Type } from '@dxos/echo';
9
9
 
10
- import { CLIENT_PLUGIN } from '../meta';
10
+ import { meta } from '../meta';
11
11
 
12
12
  export namespace ClientCapabilities {
13
- export const Client = defineCapability<Client>(`${CLIENT_PLUGIN}/capability/client`);
14
- export const Schema = defineCapability<TypedObject[]>(`${CLIENT_PLUGIN}/capability/schema`);
15
- export const SchemaWhiteList = defineCapability<TypedObject[]>(`${CLIENT_PLUGIN}/capability/schema-whitelist`);
16
- export const Migration = defineCapability<ObjectMigration[]>(`${CLIENT_PLUGIN}/capability/migration`);
13
+ export const Client = defineCapability<Client>(`${meta.id}/capability/client`);
14
+ export const Schema = defineCapability<Type.Obj.Any[]>(`${meta.id}/capability/schema`);
15
+ // TODO(wittjosiah): More descriptive name.
16
+ export const SchemaWhiteList = defineCapability<Type.Obj.Any[]>(`${meta.id}/capability/schema-whitelist`);
17
+ export const Migration = defineCapability<ObjectMigration[]>(`${meta.id}/capability/migration`);
17
18
  }
@@ -2,13 +2,14 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { type PluginContext, contributes } from '@dxos/app-framework';
6
6
  import { Client } from '@dxos/react-client';
7
7
 
8
- import { ClientCapabilities } from './capabilities';
9
8
  import { ClientEvents } from '../events';
10
9
  import { type ClientPluginOptions } from '../types';
11
10
 
11
+ import { ClientCapabilities } from './capabilities';
12
+
12
13
  type ClientCapabilityOptions = Omit<ClientPluginOptions, 'appKey' | 'invitationUrl' | 'invitationParam' | 'onReset'> & {
13
14
  context: PluginContext;
14
15
  };
@@ -16,7 +17,7 @@ type ClientCapabilityOptions = Omit<ClientPluginOptions, 'appKey' | 'invitationU
16
17
  export default async ({ context, onClientInitialized, onSpacesReady, ...options }: ClientCapabilityOptions) => {
17
18
  const client = new Client(options);
18
19
  await client.initialize();
19
- await onClientInitialized?.(context, client);
20
+ await onClientInitialized?.({ context, client });
20
21
 
21
22
  // TODO(wittjosiah): Remove. This is a hack to get the app to boot with the new identity after a reset.
22
23
  client.reloaded.on(() => {
@@ -27,10 +28,11 @@ export default async ({ context, onClientInitialized, onSpacesReady, ...options
27
28
  });
28
29
  });
29
30
 
31
+ // TODO(burdon): The callback isn't called?
30
32
  const subscription = client.spaces.isReady.subscribe(async (ready) => {
31
33
  if (ready) {
32
34
  await context.activatePromise(ClientEvents.SpacesReady);
33
- await onSpacesReady?.(context, client);
35
+ await onSpacesReady?.({ context, client });
34
36
  }
35
37
  });
36
38
 
@@ -2,27 +2,28 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { pipe } from 'effect';
5
+ import * as Function from 'effect/Function';
6
6
 
7
7
  import {
8
8
  Capabilities,
9
+ LayoutAction,
10
+ type PluginContext,
9
11
  chain,
10
12
  contributes,
11
13
  createIntent,
12
14
  createResolver,
13
- LayoutAction,
14
- type PluginContext,
15
15
  } from '@dxos/app-framework';
16
16
  import { invariant } from '@dxos/invariant';
17
17
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
18
18
  import { PublicKey } from '@dxos/react-client';
19
19
  import { type JoinPanelProps } from '@dxos/shell/react';
20
20
 
21
- import { ClientCapabilities } from './capabilities';
22
21
  import { JOIN_DIALOG, RECOVERY_CODE_DIALOG, RESET_DIALOG } from '../components';
23
22
  import { ClientEvents } from '../events';
24
23
  import { Account, ClientAction } from '../types';
25
24
 
25
+ import { ClientCapabilities } from './capabilities';
26
+
26
27
  type IntentResolverOptions = {
27
28
  context: PluginContext;
28
29
  appName?: string;
@@ -74,7 +75,7 @@ export default ({ context, appName = 'Composer' }: IntentResolverOptions) =>
74
75
  resolve: async () => {
75
76
  return {
76
77
  intents: [
77
- pipe(
78
+ Function.pipe(
78
79
  createIntent(LayoutAction.SwitchWorkspace, {
79
80
  part: 'workspace',
80
81
  subject: Account.id,
@@ -173,7 +174,7 @@ export default ({ context, appName = 'Composer' }: IntentResolverOptions) =>
173
174
  challenge: new Uint8Array(),
174
175
  rp: { id: location.hostname, name: appName },
175
176
  user: {
176
- id: lookupKey.asUint8Array(),
177
+ id: lookupKey.asUint8Array() as Uint8Array<ArrayBuffer>,
177
178
  name: identity.did,
178
179
  displayName: identity.profile?.displayName ?? '',
179
180
  },
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
6
6
 
7
7
  import { ClientCapabilities } from './capabilities';
8
8
 
@@ -7,12 +7,13 @@ import React from 'react';
7
7
  import { Capabilities, contributes, useCapability } from '@dxos/app-framework';
8
8
  import { ClientProvider } from '@dxos/react-client';
9
9
 
10
+ import { meta } from '../meta';
11
+
10
12
  import { ClientCapabilities } from './capabilities';
11
- import { CLIENT_PLUGIN } from '../meta';
12
13
 
13
14
  export default () =>
14
15
  contributes(Capabilities.ReactContext, {
15
- id: CLIENT_PLUGIN,
16
+ id: meta.id,
16
17
  context: ({ children }) => {
17
18
  const client = useCapability(ClientCapabilities.Client);
18
19
  return <ClientProvider client={client}>{children}</ClientProvider>;
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { createSurface, Capabilities, contributes } from '@dxos/app-framework';
7
+ import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
8
8
  import { type JoinPanelProps } from '@dxos/shell/react';
9
9
 
10
10
  import {
@@ -13,12 +13,12 @@ import {
13
13
  JoinDialog,
14
14
  ProfileContainer,
15
15
  RECOVERY_CODE_DIALOG,
16
+ RESET_DIALOG,
16
17
  RecoveryCodeDialog,
18
+ type RecoveryCodeDialogProps,
17
19
  RecoveryCredentialsContainer,
18
- RESET_DIALOG,
19
20
  ResetDialog,
20
21
  type ResetDialogProps,
21
- type RecoveryCodeDialogProps,
22
22
  } from '../components';
23
23
  import { Account, type ClientPluginOptions } from '../types';
24
24
 
@@ -2,8 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
6
- import { type TypedObject } from '@dxos/echo-schema';
5
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
6
+ import { type Type } from '@dxos/echo';
7
7
 
8
8
  import { ClientCapabilities } from './capabilities';
9
9
 
@@ -12,7 +12,7 @@ export default (context: PluginContext) => {
12
12
  const client = context.getCapability(ClientCapabilities.Client);
13
13
 
14
14
  // TODO(wittjosiah): Unregister schemas when they are disabled.
15
- let previous: TypedObject[] = [];
15
+ let previous: Type.Obj.Any[] = [];
16
16
  const cancel = registry.subscribe(
17
17
  context.capabilities(ClientCapabilities.Schema),
18
18
  (_schemas) => {
@@ -2,45 +2,43 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type StoryObj, type Meta } from '@storybook/react-vite';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
 
9
7
  import { IntentPlugin } from '@dxos/app-framework';
10
8
  import { withPluginManager } from '@dxos/app-framework/testing';
9
+ import { withTheme } from '@dxos/react-ui/testing';
11
10
  import { translations as shellTranslations } from '@dxos/shell/react';
12
- import { withTheme, withLayout } from '@dxos/storybook-utils';
13
11
 
14
- import { DevicesContainer } from './DevicesContainer';
15
12
  import { ClientPlugin } from '../ClientPlugin';
16
13
  import { translations } from '../translations';
17
14
 
18
- const meta: Meta = {
15
+ import { DevicesContainer } from './DevicesContainer';
16
+
17
+ const meta = {
19
18
  title: 'plugins/plugin-client/DevicesContainer',
20
19
  component: DevicesContainer,
21
20
  decorators: [
21
+ withTheme,
22
22
  withPluginManager({
23
23
  plugins: [
24
24
  ClientPlugin({
25
- onClientInitialized: async (_, client) => {
25
+ onClientInitialized: async ({ client }) => {
26
26
  await client.halo.createIdentity();
27
27
  },
28
28
  }),
29
29
  IntentPlugin(),
30
30
  ],
31
31
  }),
32
- withTheme,
33
- withLayout(),
34
32
  ],
35
33
  parameters: {
36
34
  layout: 'fullscreen',
37
35
  translations: [...translations, ...shellTranslations],
38
36
  },
39
- };
37
+ } satisfies Meta<typeof DevicesContainer>;
40
38
 
41
39
  export default meta;
42
40
 
43
- type Story = StoryObj<typeof DevicesContainer>;
41
+ type Story = StoryObj<typeof meta>;
44
42
 
45
43
  export const Default: Story = {
46
44
  args: {