@dxos/plugin-client 0.7.5-labs.a279d8c → 0.7.5-labs.f5080a1

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 (141) hide show
  1. package/dist/lib/browser/{app-graph-builder-6LOTDB4T.mjs → app-graph-builder-ZC2XASZM.mjs} +2 -2
  2. package/dist/lib/browser/chunk-BL7RMTCN.mjs +271 -0
  3. package/dist/lib/browser/chunk-BL7RMTCN.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-SVBQRT7I.mjs → chunk-MSK3TLIH.mjs} +1 -1
  5. package/dist/lib/browser/{chunk-SVBQRT7I.mjs.map → chunk-MSK3TLIH.mjs.map} +2 -2
  6. package/dist/lib/browser/{chunk-R4Q6H7RD.mjs → chunk-RGMLBYIF.mjs} +2 -2
  7. package/dist/lib/browser/{chunk-R4Q6H7RD.mjs.map → chunk-RGMLBYIF.mjs.map} +2 -2
  8. package/dist/lib/browser/{chunk-E3OUNOEL.mjs → chunk-S5RA7VCJ.mjs} +7 -1
  9. package/dist/lib/browser/{chunk-E3OUNOEL.mjs.map → chunk-S5RA7VCJ.mjs.map} +3 -3
  10. package/dist/lib/browser/{client-25GYH6TN.mjs → client-BY3RGW3H.mjs} +4 -13
  11. package/dist/lib/browser/client-BY3RGW3H.mjs.map +7 -0
  12. package/dist/lib/browser/index.mjs +27 -14
  13. package/dist/lib/browser/index.mjs.map +3 -3
  14. package/dist/lib/browser/intent-resolver-JWBGBN5W.mjs +229 -0
  15. package/dist/lib/browser/intent-resolver-JWBGBN5W.mjs.map +7 -0
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/{react-context-M3RT6SSG.mjs → react-context-PHX2CVI7.mjs} +2 -2
  18. package/dist/lib/browser/{react-surface-XXONPG5T.mjs → react-surface-BYR3FEBZ.mjs} +23 -7
  19. package/dist/lib/browser/react-surface-BYR3FEBZ.mjs.map +7 -0
  20. package/dist/lib/browser/schema-AL34NY2M.mjs +33 -0
  21. package/dist/lib/browser/schema-AL34NY2M.mjs.map +7 -0
  22. package/dist/lib/browser/types.mjs +1 -1
  23. package/dist/lib/node/{app-graph-builder-JCND3P6G.cjs → app-graph-builder-KJRHSGZI.cjs} +6 -6
  24. package/dist/lib/node/chunk-JXRPLNW4.cjs +299 -0
  25. package/dist/lib/node/chunk-JXRPLNW4.cjs.map +7 -0
  26. package/dist/lib/node/{chunk-IXVWJCYB.cjs → chunk-XPC4JOPP.cjs} +5 -5
  27. package/dist/lib/node/{chunk-IXVWJCYB.cjs.map → chunk-XPC4JOPP.cjs.map} +2 -2
  28. package/dist/lib/node/{chunk-3OB25QN2.cjs → chunk-ZI7AV5RP.cjs} +4 -4
  29. package/dist/lib/node/{chunk-3OB25QN2.cjs.map → chunk-ZI7AV5RP.cjs.map} +2 -2
  30. package/dist/lib/node/{chunk-NVYWMDF3.cjs → chunk-ZZQOY2DR.cjs} +10 -4
  31. package/dist/lib/node/{chunk-NVYWMDF3.cjs.map → chunk-ZZQOY2DR.cjs.map} +3 -3
  32. package/dist/lib/node/{client-52L4TUYU.cjs → client-JCI7A3IV.cjs} +9 -18
  33. package/dist/lib/node/client-JCI7A3IV.cjs.map +7 -0
  34. package/dist/lib/node/index.cjs +29 -16
  35. package/dist/lib/node/index.cjs.map +3 -3
  36. package/dist/lib/node/intent-resolver-MXB5UAG2.cjs +237 -0
  37. package/dist/lib/node/intent-resolver-MXB5UAG2.cjs.map +7 -0
  38. package/dist/lib/node/meta.json +1 -1
  39. package/dist/lib/node/{react-context-B2DNULH4.cjs → react-context-WMOFXPT4.cjs} +6 -6
  40. package/dist/lib/node/{react-surface-7USN5NOO.cjs → react-surface-XRKRQ6SU.cjs} +28 -16
  41. package/dist/lib/node/react-surface-XRKRQ6SU.cjs.map +7 -0
  42. package/dist/lib/node/schema-HW4W3QYU.cjs +49 -0
  43. package/dist/lib/node/schema-HW4W3QYU.cjs.map +7 -0
  44. package/dist/lib/node/types.cjs +2 -2
  45. package/dist/lib/node/types.cjs.map +1 -1
  46. package/dist/lib/node-esm/{app-graph-builder-ZLGKFBLY.mjs → app-graph-builder-BUQOWBIC.mjs} +2 -2
  47. package/dist/lib/node-esm/chunk-3MN2GGX3.mjs +272 -0
  48. package/dist/lib/node-esm/chunk-3MN2GGX3.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-OBGRL3DF.mjs → chunk-B73LKPGU.mjs} +1 -1
  50. package/dist/lib/node-esm/{chunk-OBGRL3DF.mjs.map → chunk-B73LKPGU.mjs.map} +2 -2
  51. package/dist/lib/node-esm/{chunk-74T33KTB.mjs → chunk-HWAZ7QK3.mjs} +7 -1
  52. package/dist/lib/node-esm/{chunk-74T33KTB.mjs.map → chunk-HWAZ7QK3.mjs.map} +3 -3
  53. package/dist/lib/node-esm/{chunk-73M5MK5Q.mjs → chunk-QR72BXJK.mjs} +2 -2
  54. package/dist/lib/node-esm/{chunk-73M5MK5Q.mjs.map → chunk-QR72BXJK.mjs.map} +2 -2
  55. package/dist/lib/node-esm/{client-K52NWOUN.mjs → client-XWK653HB.mjs} +4 -13
  56. package/dist/lib/node-esm/client-XWK653HB.mjs.map +7 -0
  57. package/dist/lib/node-esm/index.mjs +27 -14
  58. package/dist/lib/node-esm/index.mjs.map +3 -3
  59. package/dist/lib/node-esm/intent-resolver-IVP2U2NS.mjs +230 -0
  60. package/dist/lib/node-esm/intent-resolver-IVP2U2NS.mjs.map +7 -0
  61. package/dist/lib/node-esm/meta.json +1 -1
  62. package/dist/lib/node-esm/{react-context-IGEHJQK5.mjs → react-context-EEGDXBWA.mjs} +2 -2
  63. package/dist/lib/node-esm/{react-surface-CXLBCMPN.mjs → react-surface-JB3PGT5D.mjs} +23 -7
  64. package/dist/lib/node-esm/react-surface-JB3PGT5D.mjs.map +7 -0
  65. package/dist/lib/node-esm/schema-74LVJ3EU.mjs +34 -0
  66. package/dist/lib/node-esm/schema-74LVJ3EU.mjs.map +7 -0
  67. package/dist/lib/node-esm/types.mjs +1 -1
  68. package/dist/types/src/ClientPlugin.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts +22 -22
  70. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  72. package/dist/types/src/capabilities/client.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/index.d.ts +31 -29
  74. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -1
  76. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/schema.d.ts +4 -0
  79. package/dist/types/src/capabilities/schema.d.ts.map +1 -0
  80. package/dist/types/src/components/IdentityDialog.d.ts.map +1 -1
  81. package/dist/types/src/components/ManageCredentialsDialog.d.ts +4 -0
  82. package/dist/types/src/components/ManageCredentialsDialog.d.ts.map +1 -0
  83. package/dist/types/src/components/ManageCredentialsDialog.stories.d.ts +8 -0
  84. package/dist/types/src/components/ManageCredentialsDialog.stories.d.ts.map +1 -0
  85. package/dist/types/src/components/RecoveryCodeDialog.d.ts.map +1 -1
  86. package/dist/types/src/components/RecoverySetupDialog.d.ts +4 -0
  87. package/dist/types/src/components/RecoverySetupDialog.d.ts.map +1 -0
  88. package/dist/types/src/components/RecoverySetupDialog.stories.d.ts +8 -0
  89. package/dist/types/src/components/RecoverySetupDialog.stories.d.ts.map +1 -0
  90. package/dist/types/src/components/index.d.ts +1 -0
  91. package/dist/types/src/components/index.d.ts.map +1 -1
  92. package/dist/types/src/events.d.ts +1 -1
  93. package/dist/types/src/translations.d.ts +7 -0
  94. package/dist/types/src/translations.d.ts.map +1 -1
  95. package/dist/types/src/types.d.ts +8 -0
  96. package/dist/types/src/types.d.ts.map +1 -1
  97. package/dist/types/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +22 -17
  99. package/src/ClientPlugin.ts +10 -5
  100. package/src/capabilities/capabilities.ts +1 -0
  101. package/src/capabilities/client.ts +1 -9
  102. package/src/capabilities/index.ts +1 -0
  103. package/src/capabilities/intent-resolver.ts +136 -67
  104. package/src/capabilities/react-surface.tsx +21 -6
  105. package/src/capabilities/schema.ts +36 -0
  106. package/src/components/IdentityDialog.tsx +15 -3
  107. package/src/components/JoinDialog.tsx +1 -1
  108. package/src/components/ManageCredentialsDialog.stories.tsx +57 -0
  109. package/src/components/ManageCredentialsDialog.tsx +64 -0
  110. package/src/components/RecoveryCodeDialog.stories.tsx +5 -5
  111. package/src/components/RecoveryCodeDialog.tsx +2 -1
  112. package/src/components/RecoverySetupDialog.stories.tsx +77 -0
  113. package/src/components/RecoverySetupDialog.tsx +52 -0
  114. package/src/components/index.ts +1 -0
  115. package/src/events.ts +1 -1
  116. package/src/translations.ts +10 -1
  117. package/src/types.ts +5 -0
  118. package/dist/lib/browser/chunk-6IF6PREG.mjs +0 -158
  119. package/dist/lib/browser/chunk-6IF6PREG.mjs.map +0 -7
  120. package/dist/lib/browser/client-25GYH6TN.mjs.map +0 -7
  121. package/dist/lib/browser/intent-resolver-IWWLWOZD.mjs +0 -132
  122. package/dist/lib/browser/intent-resolver-IWWLWOZD.mjs.map +0 -7
  123. package/dist/lib/browser/react-surface-XXONPG5T.mjs.map +0 -7
  124. package/dist/lib/node/chunk-N3U7KVO3.cjs +0 -186
  125. package/dist/lib/node/chunk-N3U7KVO3.cjs.map +0 -7
  126. package/dist/lib/node/client-52L4TUYU.cjs.map +0 -7
  127. package/dist/lib/node/intent-resolver-H3Y64MIP.cjs +0 -140
  128. package/dist/lib/node/intent-resolver-H3Y64MIP.cjs.map +0 -7
  129. package/dist/lib/node/react-surface-7USN5NOO.cjs.map +0 -7
  130. package/dist/lib/node-esm/chunk-EHGD3UJH.mjs +0 -159
  131. package/dist/lib/node-esm/chunk-EHGD3UJH.mjs.map +0 -7
  132. package/dist/lib/node-esm/client-K52NWOUN.mjs.map +0 -7
  133. package/dist/lib/node-esm/intent-resolver-JCKD6R6L.mjs +0 -133
  134. package/dist/lib/node-esm/intent-resolver-JCKD6R6L.mjs.map +0 -7
  135. package/dist/lib/node-esm/react-surface-CXLBCMPN.mjs.map +0 -7
  136. /package/dist/lib/browser/{app-graph-builder-6LOTDB4T.mjs.map → app-graph-builder-ZC2XASZM.mjs.map} +0 -0
  137. /package/dist/lib/browser/{react-context-M3RT6SSG.mjs.map → react-context-PHX2CVI7.mjs.map} +0 -0
  138. /package/dist/lib/node/{app-graph-builder-JCND3P6G.cjs.map → app-graph-builder-KJRHSGZI.cjs.map} +0 -0
  139. /package/dist/lib/node/{react-context-B2DNULH4.cjs.map → react-context-WMOFXPT4.cjs.map} +0 -0
  140. /package/dist/lib/node-esm/{app-graph-builder-ZLGKFBLY.mjs.map → app-graph-builder-BUQOWBIC.mjs.map} +0 -0
  141. /package/dist/lib/node-esm/{react-context-IGEHJQK5.mjs.map → react-context-EEGDXBWA.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"intent-resolver.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/intent-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EAKZ,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAElE,KAAK,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG;IAClE,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;+CAEoC,qBAAqB;AAA3D,wBA2EK"}
1
+ {"version":3,"file":"intent-resolver.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/intent-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EAKZ,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAElE,KAAK,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG;IAClE,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;wDAE0D,qBAAqB;AAAjF,wBA8IK"}
@@ -1 +1 @@
1
- {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAiB,YAAY,EAAe,MAAM,qBAAqB,CAAC;AAa/E,KAAK,mBAAmB,GAAG;IACzB,mBAAmB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,CAAC;CACzD,CAAC;kDAEuC,mBAAmB;AAA5D,wBAoBK"}
1
+ {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAiB,YAAY,EAAe,MAAM,qBAAqB,CAAC;AAgB/E,KAAK,mBAAmB,GAAG;IACzB,mBAAmB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,CAAC;CACzD,CAAC;kDAEuC,mBAAmB;AAA5D,wBAgCK"}
@@ -0,0 +1,4 @@
1
+ import { type PluginsContext } from '@dxos/app-framework';
2
+ declare const _default: (context: PluginsContext) => import("@dxos/app-framework").Capability<null>;
3
+ export default _default;
4
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/schema.ts"],"names":[],"mappings":"AAMA,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;kCAM5D,cAAc;AAAvC,wBAuBE"}
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/IdentityDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAK3C,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAK3E,eAAO,MAAM,eAAe,0CAAoC,CAAC;AAEjE,eAAO,MAAM,cAAc,UAAW,kBAAkB,sBA4CvD,CAAC"}
1
+ {"version":3,"file":"IdentityDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/IdentityDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAK3C,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM3E,eAAO,MAAM,eAAe,0CAAoC,CAAC;AAEjE,eAAO,MAAM,cAAc,UAAW,kBAAkB,sBAuDvD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const MANAGE_CREDENTIALS_DIALOG = "dxos.org/plugin/client/ManageCredentialsDialog";
3
+ export declare const ManageCredentialsDialog: () => React.JSX.Element;
4
+ //# sourceMappingURL=ManageCredentialsDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageCredentialsDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/ManageCredentialsDialog.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAUvC,eAAO,MAAM,yBAAyB,mDAA6C,CAAC;AAGpF,eAAO,MAAM,uBAAuB,yBA6CnC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import '@dxos-theme';
2
+ import { type StoryObj, type Meta } from '@storybook/react';
3
+ import { ManageCredentialsDialog } from './ManageCredentialsDialog';
4
+ declare const meta: Meta;
5
+ export default meta;
6
+ type Story = StoryObj<typeof ManageCredentialsDialog>;
7
+ export declare const Default: Story;
8
+ //# sourceMappingURL=ManageCredentialsDialog.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageCredentialsDialog.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/ManageCredentialsDialog.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAQ5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAcpE,QAAA,MAAM,IAAI,EAAE,IAsBX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEtD,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecoveryCodeDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/RecoveryCodeDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,eAAO,MAAM,mBAAmB,8CAAwC,CAAC;AAEzE,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,kBAAkB,aAAc,uBAAuB,sBAoCnE,CAAC"}
1
+ {"version":3,"file":"RecoveryCodeDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/RecoveryCodeDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,eAAO,MAAM,mBAAmB,8CAAwC,CAAC;AAEzE,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAGF,eAAO,MAAM,kBAAkB,aAAc,uBAAuB,sBAoCnE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const RECOVER_SETUP_DIALOG = "dxos.org/plugin/client/RecoverySetupDialog";
3
+ export declare const RecoverySetupDialog: () => React.JSX.Element;
4
+ //# sourceMappingURL=RecoverySetupDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecoverySetupDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/RecoverySetupDialog.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAC;AASvC,eAAO,MAAM,oBAAoB,+CAAyC,CAAC;AAG3E,eAAO,MAAM,mBAAmB,yBAkC/B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import '@dxos-theme';
2
+ import { type StoryObj, type Meta } from '@storybook/react';
3
+ import { RecoverySetupDialog } from './RecoverySetupDialog';
4
+ declare const meta: Meta;
5
+ export default meta;
6
+ type Story = StoryObj<typeof RecoverySetupDialog>;
7
+ export declare const Default: Story;
8
+ //# sourceMappingURL=RecoverySetupDialog.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecoverySetupDialog.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/RecoverySetupDialog.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAW5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAgB5D,QAAA,MAAM,IAAI,EAAE,IAqCX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAElD,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './IdentityDialog';
2
2
  export * from './JoinDialog';
3
3
  export * from './RecoveryCodeDialog';
4
+ export * from './RecoverySetupDialog';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export declare namespace ClientEvents {
2
- const SetupClient: import("@dxos/app-framework").ActivationEvent;
3
2
  const ClientReady: import("@dxos/app-framework").ActivationEvent;
3
+ const SetupSchema: import("@dxos/app-framework").ActivationEvent;
4
4
  const IdentityCreated: import("@dxos/app-framework").ActivationEvent;
5
5
  const SpacesReady: import("@dxos/app-framework").ActivationEvent;
6
6
  }
@@ -2,6 +2,13 @@ declare const _default: {
2
2
  'en-US': {
3
3
  "dxos.org/plugin/client": {
4
4
  'open shell label': string;
5
+ 'manage credentials dialog title': string;
6
+ 'recovery setup dialog title': string;
7
+ 'recovery setup dialog description': string;
8
+ 'create passkey label': string;
9
+ 'create passkey description': string;
10
+ 'create recovery code label': string;
11
+ 'create recovery code description': string;
5
12
  'recovery code dialog title': string;
6
13
  'recovery code dialog description': string;
7
14
  'recovery code dialog warning 1': string;
@@ -1 +1 @@
1
- {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAMA,wBAgBE"}
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAMA,wBAyBE"}
@@ -73,6 +73,14 @@ export declare namespace ClientAction {
73
73
  }>;
74
74
  export class CreateRecoveryCode extends CreateRecoveryCode_base {
75
75
  }
76
+ const CreatePasskey_base: S.TaggedClass<CreatePasskey, "dxos.org/plugin/client/action/create-passkey", {
77
+ readonly _tag: S.tag<"dxos.org/plugin/client/action/create-passkey">;
78
+ } & {
79
+ input: typeof S.Void;
80
+ output: typeof S.Void;
81
+ }>;
82
+ export class CreatePasskey extends CreatePasskey_base {
83
+ }
76
84
  export {};
77
85
  }
78
86
  export type ClientPluginOptions = ClientOptions & {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAkB/C,yBAAiB,YAAY,CAAC;;;;;;;;;;;;;;;;;IAC5B,MAAM,OAAO,cAAe,SAAQ,mBAKlC;KAAG;;;;;;;;;IAEL,MAAM,OAAO,YAAa,SAAQ,iBAKhC;KAAG;;;;;;;IAEL,MAAM,OAAO,aAAc,SAAQ,kBAGjC;KAAG;;;;;;;IAEL,MAAM,OAAO,eAAgB,SAAQ,oBAGnC;KAAG;;;;;;;;;IAEL,MAAM,OAAO,YAAa,SAAQ,iBAKhC;KAAG;;;;;;;IAEL,MAAM,OAAO,WAAY,SAAQ,gBAG/B;KAAG;;;;;;;IAEL,MAAM,OAAO,kBAAmB,SAAQ,uBAGtC;KAAG;;CACN;AAED,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG;IAChD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtF;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAC/D,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,KAAK,MAAM,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAkB/C,yBAAiB,YAAY,CAAC;;;;;;;;;;;;;;;;;IAC5B,MAAM,OAAO,cAAe,SAAQ,mBAKlC;KAAG;;;;;;;;;IAEL,MAAM,OAAO,YAAa,SAAQ,iBAKhC;KAAG;;;;;;;IAEL,MAAM,OAAO,aAAc,SAAQ,kBAGjC;KAAG;;;;;;;IAEL,MAAM,OAAO,eAAgB,SAAQ,oBAGnC;KAAG;;;;;;;;;IAEL,MAAM,OAAO,YAAa,SAAQ,iBAKhC;KAAG;;;;;;;IAEL,MAAM,OAAO,WAAY,SAAQ,gBAG/B;KAAG;;;;;;;IAEL,MAAM,OAAO,kBAAmB,SAAQ,uBAGtC;KAAG;;;;;;;IAEL,MAAM,OAAO,aAAc,SAAQ,kBAGjC;KAAG;;CACN;AAED,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG;IAChD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtF;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAC/D,CAAC"}
@@ -1 +1 @@
1
- {"version":"5.7.2"}
1
+ {"version":"5.7.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-client",
3
- "version": "0.7.5-labs.a279d8c",
3
+ "version": "0.7.5-labs.f5080a1",
4
4
  "description": "DXOS Surface plugin for DXOS Client",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -32,33 +32,38 @@
32
32
  "src"
33
33
  ],
34
34
  "dependencies": {
35
- "@phosphor-icons/react": "^2.1.5",
36
- "@dxos/app-framework": "0.7.5-labs.a279d8c",
37
- "@dxos/echo-schema": "0.7.5-labs.a279d8c",
38
- "@dxos/config": "0.7.5-labs.a279d8c",
39
- "@dxos/echo-signals": "0.7.5-labs.a279d8c",
40
- "@dxos/local-storage": "0.7.5-labs.a279d8c",
41
- "@dxos/invariant": "0.7.5-labs.a279d8c",
42
- "@dxos/log": "0.7.5-labs.a279d8c",
43
- "@dxos/plugin-graph": "0.7.5-labs.a279d8c",
44
- "@dxos/plugin-observability": "0.7.5-labs.a279d8c",
45
- "@dxos/react-client": "0.7.5-labs.a279d8c",
46
- "@dxos/react-ui": "0.7.5-labs.a279d8c",
47
- "@dxos/shell": "0.7.5-labs.a279d8c",
48
- "@dxos/util": "0.7.5-labs.a279d8c"
35
+ "@preact/signals-core": "^1.6.0",
36
+ "@dxos/config": "0.7.5-labs.f5080a1",
37
+ "@dxos/echo-schema": "0.7.5-labs.f5080a1",
38
+ "@dxos/app-framework": "0.7.5-labs.f5080a1",
39
+ "@dxos/echo-signals": "0.7.5-labs.f5080a1",
40
+ "@dxos/local-storage": "0.7.5-labs.f5080a1",
41
+ "@dxos/invariant": "0.7.5-labs.f5080a1",
42
+ "@dxos/plugin-graph": "0.7.5-labs.f5080a1",
43
+ "@dxos/log": "0.7.5-labs.f5080a1",
44
+ "@dxos/plugin-observability": "0.7.5-labs.f5080a1",
45
+ "@dxos/react-client": "0.7.5-labs.f5080a1",
46
+ "@dxos/shell": "0.7.5-labs.f5080a1",
47
+ "@dxos/util": "0.7.5-labs.f5080a1"
49
48
  },
50
49
  "devDependencies": {
50
+ "@phosphor-icons/react": "^2.1.5",
51
51
  "@types/react": "~18.2.0",
52
52
  "@types/react-dom": "~18.2.0",
53
53
  "react": "~18.2.0",
54
54
  "react-dom": "~18.2.0",
55
55
  "vite": "5.4.7",
56
- "@dxos/storybook-utils": "0.7.5-labs.a279d8c"
56
+ "@dxos/react-ui": "0.7.5-labs.f5080a1",
57
+ "@dxos/live-object": "0.7.5-labs.f5080a1",
58
+ "@dxos/storybook-utils": "0.7.5-labs.f5080a1",
59
+ "@dxos/react-ui-theme": "0.7.5-labs.f5080a1"
57
60
  },
58
61
  "peerDependencies": {
59
62
  "@phosphor-icons/react": "^2.1.5",
60
63
  "react": "~18.2.0",
61
- "react-dom": "~18.2.0"
64
+ "react-dom": "~18.2.0",
65
+ "@dxos/react-ui-theme": "0.7.5-labs.f5080a1",
66
+ "@dxos/react-ui": "0.7.5-labs.f5080a1"
62
67
  },
63
68
  "publishConfig": {
64
69
  "access": "public"
@@ -2,9 +2,9 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, defineModule, definePlugin, Events } from '@dxos/app-framework';
5
+ import { Capabilities, contributes, defineModule, definePlugin, Events, oneOf } from '@dxos/app-framework';
6
6
 
7
- import { Client, AppGraphBuilder, IntentResolver, ReactContext, ReactSurface } from './capabilities';
7
+ import { Client, AppGraphBuilder, IntentResolver, ReactContext, ReactSurface, Schema } from './capabilities';
8
8
  import { ClientEvents } from './events';
9
9
  import { meta } from './meta';
10
10
  import translations from './translations';
@@ -25,11 +25,16 @@ export const ClientPlugin = ({
25
25
  return definePlugin(meta, [
26
26
  defineModule({
27
27
  id: `${meta.id}/module/client`,
28
- activatesOn: Events.Startup,
29
- activatesBefore: [ClientEvents.SetupClient],
28
+ activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
30
29
  activatesAfter: [ClientEvents.ClientReady],
31
30
  activate: (context) => Client({ ...options, context }),
32
31
  }),
32
+ defineModule({
33
+ id: `${meta.id}/module/schema`,
34
+ activatesOn: ClientEvents.ClientReady,
35
+ activatesBefore: [ClientEvents.SetupSchema],
36
+ activate: Schema,
37
+ }),
33
38
  defineModule({
34
39
  id: `${meta.id}/module/react-context`,
35
40
  activatesOn: Events.Startup,
@@ -37,7 +42,7 @@ export const ClientPlugin = ({
37
42
  }),
38
43
  defineModule({
39
44
  id: `${meta.id}/module/react-surface`,
40
- activatesOn: Events.Startup,
45
+ activatesOn: Events.SetupSurfaces,
41
46
  activate: () => ReactSurface({ createInvitationUrl }),
42
47
  }),
43
48
  defineModule({
@@ -11,5 +11,6 @@ import { CLIENT_PLUGIN } from '../meta';
11
11
  export namespace ClientCapabilities {
12
12
  export const Client = defineCapability<Client>(`${CLIENT_PLUGIN}/capability/client`);
13
13
  export const Schema = defineCapability<TypedObject[]>(`${CLIENT_PLUGIN}/capability/schema`);
14
+ // TODO(wittjosiah): Rename this. Reserve "system" nomenclature for internal use.
14
15
  export const SystemSchema = defineCapability<TypedObject[]>(`${CLIENT_PLUGIN}/capability/system-schema`);
15
16
  }
@@ -3,7 +3,6 @@
3
3
  //
4
4
 
5
5
  import { contributes, type PluginsContext } from '@dxos/app-framework';
6
- import { Config, Defaults, Envs, Local, Storage } from '@dxos/config';
7
6
  import { Client } from '@dxos/react-client';
8
7
 
9
8
  import { ClientCapabilities } from './capabilities';
@@ -15,17 +14,10 @@ type ClientCapabilityOptions = Omit<ClientPluginOptions, 'appKey' | 'invitationU
15
14
  };
16
15
 
17
16
  export default async ({ context, onClientInitialized, ...options }: ClientCapabilityOptions) => {
18
- const config = new Config(await Storage(), Envs(), Local(), Defaults());
19
- const client = new Client({ config, ...options });
20
-
17
+ const client = new Client(options);
21
18
  await client.initialize();
22
19
  await onClientInitialized?.(context, client);
23
20
 
24
- const systemSchemas = Array.from(new Set(context.requestCapabilities(ClientCapabilities.SystemSchema).flat()));
25
- const schemas = Array.from(new Set(context.requestCapabilities(ClientCapabilities.Schema).flat()));
26
- client.addTypes(systemSchemas);
27
- client.addTypes(schemas);
28
-
29
21
  // TODO(wittjosiah): Remove. This is a hack to get the app to boot with the new identity after a reset.
30
22
  client.reloaded.on(() => {
31
23
  client.halo.identity.subscribe(async (identity) => {
@@ -9,5 +9,6 @@ export const Client = lazy(async () => import('./client'));
9
9
  export const IntentResolver = lazy(async () => import('./intent-resolver'));
10
10
  export const ReactContext = lazy(async () => import('./react-context'));
11
11
  export const ReactSurface = lazy(async () => import('./react-surface'));
12
+ export const Schema = lazy(async () => import('./schema'));
12
13
 
13
14
  export * from './capabilities';
@@ -12,6 +12,7 @@ import {
12
12
  } from '@dxos/app-framework';
13
13
  import { invariant } from '@dxos/invariant';
14
14
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
15
+ import { PublicKey } from '@dxos/react-client';
15
16
  import { type JoinPanelProps } from '@dxos/shell/react';
16
17
 
17
18
  import { ClientCapabilities } from './capabilities';
@@ -21,81 +22,149 @@ import { ClientAction, type ClientPluginOptions } from '../types';
21
22
 
22
23
  type IntentResolverOptions = Pick<ClientPluginOptions, 'onReset'> & {
23
24
  context: PluginsContext;
25
+ appName?: string;
24
26
  };
25
27
 
26
- export default ({ context, onReset }: IntentResolverOptions) =>
28
+ export default ({ context, appName = 'Composer', onReset }: IntentResolverOptions) =>
27
29
  contributes(Capabilities.IntentResolver, [
28
- createResolver(ClientAction.CreateIdentity, async () => {
29
- const manager = context.requestCapability(Capabilities.PluginManager);
30
- const client = context.requestCapability(ClientCapabilities.Client);
31
- const data = await client.halo.createIdentity();
32
- await manager.activate(ClientEvents.IdentityCreated);
33
- return { data, intents: [createIntent(ObservabilityAction.SendEvent, { name: 'identity.create' })] };
30
+ createResolver({
31
+ intent: ClientAction.CreateIdentity,
32
+ resolve: async () => {
33
+ const manager = context.requestCapability(Capabilities.PluginManager);
34
+ const client = context.requestCapability(ClientCapabilities.Client);
35
+ const data = await client.halo.createIdentity();
36
+ await manager.activate(ClientEvents.IdentityCreated);
37
+ return { data, intents: [createIntent(ObservabilityAction.SendEvent, { name: 'identity.create' })] };
38
+ },
34
39
  }),
35
- createResolver(ClientAction.JoinIdentity, async (data) => {
36
- return {
37
- intents: [
38
- createIntent(LayoutAction.SetLayout, {
39
- element: 'dialog',
40
- component: JOIN_DIALOG,
41
- dialogBlockAlign: 'start',
42
- subject: {
43
- initialInvitationCode: data.invitationCode,
44
- initialDisposition: 'accept-halo-invitation',
45
- } satisfies Partial<JoinPanelProps>,
46
- }),
47
- ],
48
- };
40
+ createResolver({
41
+ intent: ClientAction.JoinIdentity,
42
+ resolve: async (data) => {
43
+ return {
44
+ intents: [
45
+ createIntent(LayoutAction.UpdateDialog, {
46
+ part: 'dialog',
47
+ subject: JOIN_DIALOG,
48
+ options: {
49
+ blockAlign: 'start',
50
+ props: {
51
+ initialInvitationCode: data.invitationCode,
52
+ initialDisposition: 'accept-halo-invitation',
53
+ },
54
+ },
55
+ }),
56
+ ],
57
+ };
58
+ },
49
59
  }),
50
- createResolver(ClientAction.ShareIdentity, async () => {
51
- return {
52
- intents: [
53
- createIntent(LayoutAction.SetLayout, {
54
- element: 'dialog',
55
- component: IDENTITY_DIALOG,
56
- dialogBlockAlign: 'start',
57
- }),
58
- createIntent(ObservabilityAction.SendEvent, { name: 'identity.share' }),
59
- ],
60
- };
60
+ createResolver({
61
+ intent: ClientAction.ShareIdentity,
62
+ resolve: async () => {
63
+ return {
64
+ intents: [
65
+ createIntent(LayoutAction.UpdateDialog, {
66
+ part: 'dialog',
67
+ subject: IDENTITY_DIALOG,
68
+ options: {
69
+ blockAlign: 'start',
70
+ },
71
+ }),
72
+ createIntent(ObservabilityAction.SendEvent, { name: 'identity.share' }),
73
+ ],
74
+ };
75
+ },
61
76
  }),
62
- createResolver(ClientAction.RecoverIdentity, async () => {
63
- return {
64
- intents: [
65
- createIntent(LayoutAction.SetLayout, {
66
- element: 'dialog',
67
- component: JOIN_DIALOG,
68
- dialogBlockAlign: 'start',
69
- subject: { initialDisposition: 'recover-identity' } satisfies Partial<JoinPanelProps>,
70
- }),
71
- ],
72
- };
77
+ createResolver({
78
+ intent: ClientAction.RecoverIdentity,
79
+ resolve: async () => {
80
+ return {
81
+ intents: [
82
+ createIntent(LayoutAction.UpdateDialog, {
83
+ part: 'dialog',
84
+ subject: JOIN_DIALOG,
85
+ options: {
86
+ blockAlign: 'start',
87
+ props: {
88
+ initialDisposition: 'recover-identity',
89
+ } satisfies Partial<JoinPanelProps>,
90
+ },
91
+ }),
92
+ ],
93
+ };
94
+ },
73
95
  }),
74
- createResolver(ClientAction.ResetStorage, async (data) => {
75
- await onReset?.({ target: data.target });
76
- return {};
96
+ createResolver({
97
+ intent: ClientAction.ResetStorage,
98
+ resolve: async (data) => {
99
+ await onReset?.({ target: data.target });
100
+ },
77
101
  }),
78
- createResolver(ClientAction.CreateAgent, async () => {
79
- const client = context.requestCapability(ClientCapabilities.Client);
80
- invariant(client.services.services.EdgeAgentService, 'Missing EdgeAgentService');
81
- await client.services.services.EdgeAgentService.createAgent(null as any, { timeout: 10_000 });
102
+ createResolver({
103
+ intent: ClientAction.CreateAgent,
104
+ resolve: async () => {
105
+ const client = context.requestCapability(ClientCapabilities.Client);
106
+ invariant(client.services.services.EdgeAgentService, 'Missing EdgeAgentService');
107
+ await client.services.services.EdgeAgentService.createAgent(null as any, { timeout: 10_000 });
108
+ },
82
109
  }),
83
- createResolver(ClientAction.CreateRecoveryCode, async () => {
84
- const client = context.requestCapability(ClientCapabilities.Client);
85
- invariant(client.services.services.IdentityService, 'IdentityService not available');
86
- // TODO(wittjosiah): This needs a proper api. Rename property.
87
- const { seedphrase } = await client.services.services.IdentityService.createRecoveryPhrase();
88
- return {
89
- intents: [
90
- createIntent(LayoutAction.SetLayout, {
91
- element: 'dialog',
92
- dialogBlockAlign: 'start',
93
- dialogType: 'alert',
94
- state: true,
95
- component: RECOVER_CODE_DIALOG,
96
- subject: { code: seedphrase },
97
- }),
98
- ],
99
- };
110
+ createResolver({
111
+ intent: ClientAction.CreateRecoveryCode,
112
+ resolve: async () => {
113
+ const client = context.requestCapability(ClientCapabilities.Client);
114
+ invariant(client.services.services.IdentityService, 'IdentityService not available');
115
+ // TODO(wittjosiah): This needs a proper api.
116
+ const { recoveryCode } = await client.services.services.IdentityService.createRecoveryCredential({});
117
+ return {
118
+ intents: [
119
+ createIntent(LayoutAction.UpdateDialog, {
120
+ part: 'dialog',
121
+ subject: RECOVER_CODE_DIALOG,
122
+ options: {
123
+ blockAlign: 'start',
124
+ type: 'alert',
125
+ props: { code: recoveryCode },
126
+ },
127
+ }),
128
+ ],
129
+ };
130
+ },
131
+ }),
132
+ createResolver({
133
+ intent: ClientAction.CreatePasskey,
134
+ resolve: async () => {
135
+ const client = context.requestCapability(ClientCapabilities.Client);
136
+ const identity = client.halo.identity.get();
137
+ invariant(identity, 'Identity not available');
138
+
139
+ // TODO(wittjosiah): Consider factoring out passkey creation to the halo api.
140
+ const credential = await navigator.credentials.create({
141
+ publicKey: {
142
+ challenge: new Uint8Array(),
143
+ rp: { id: location.hostname, name: appName },
144
+ user: {
145
+ id: new TextEncoder().encode(identity.did),
146
+ name: identity.did,
147
+ displayName: identity.profile?.displayName ?? '',
148
+ },
149
+ pubKeyCredParams: [
150
+ { type: 'public-key', alg: -8 }, // Ed25519 (not yet supported across all browsers)
151
+ { type: 'public-key', alg: -7 }, // ES256
152
+ ],
153
+ // https://web.dev/articles/webauthn-discoverable-credentials#resident-key
154
+ authenticatorSelection: {
155
+ residentKey: 'required',
156
+ requireResidentKey: true,
157
+ },
158
+ },
159
+ });
160
+
161
+ invariant(credential, 'Credential not available');
162
+ const recoveryKey = PublicKey.from(new Uint8Array((credential as any).response.getPublicKey()));
163
+ const algorithm = (credential as any).response.getPublicKeyAlgorithm() === -7 ? 'ES256' : 'ED25519';
164
+
165
+ invariant(client.services.services.IdentityService, 'IdentityService not available');
166
+ // TODO(wittjosiah): This needs a proper api.
167
+ await client.services.services.IdentityService.createRecoveryCredential({ recoveryKey, algorithm });
168
+ },
100
169
  }),
101
170
  ]);
@@ -13,9 +13,12 @@ import {
13
13
  JOIN_DIALOG,
14
14
  JoinDialog,
15
15
  RECOVER_CODE_DIALOG,
16
+ RECOVER_SETUP_DIALOG,
16
17
  RecoveryCodeDialog,
18
+ RecoverySetupDialog,
17
19
  type RecoveryCodeDialogProps,
18
20
  } from '../components';
21
+ import { MANAGE_CREDENTIALS_DIALOG, ManageCredentialsDialog } from '../components/ManageCredentialsDialog';
19
22
 
20
23
  type ReactSurfaceOptions = {
21
24
  createInvitationUrl: (invitationCode: string) => string;
@@ -26,19 +29,31 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
26
29
  createSurface({
27
30
  id: IDENTITY_DIALOG,
28
31
  role: 'dialog',
29
- filter: (data): data is { subject: IdentityPanelProps } => data.component === IDENTITY_DIALOG,
30
- component: ({ data }) => <IdentityDialog {...data.subject} createInvitationUrl={createInvitationUrl} />,
32
+ filter: (data): data is { props: IdentityPanelProps } => data.component === IDENTITY_DIALOG,
33
+ component: ({ data }) => <IdentityDialog {...data.props} createInvitationUrl={createInvitationUrl} />,
31
34
  }),
32
35
  createSurface({
33
36
  id: JOIN_DIALOG,
34
37
  role: 'dialog',
35
- filter: (data): data is { subject: JoinPanelProps } => data.component === JOIN_DIALOG,
36
- component: ({ data }) => <JoinDialog {...data.subject} />,
38
+ filter: (data): data is { props: JoinPanelProps } => data.component === JOIN_DIALOG,
39
+ component: ({ data }) => <JoinDialog {...data.props} />,
37
40
  }),
38
41
  createSurface({
39
42
  id: RECOVER_CODE_DIALOG,
40
43
  role: 'dialog',
41
- filter: (data): data is { subject: RecoveryCodeDialogProps } => data.component === RECOVER_CODE_DIALOG,
42
- component: ({ data }) => <RecoveryCodeDialog {...data.subject} />,
44
+ filter: (data): data is { props: RecoveryCodeDialogProps } => data.component === RECOVER_CODE_DIALOG,
45
+ component: ({ data }) => <RecoveryCodeDialog {...data.props} />,
46
+ }),
47
+ createSurface({
48
+ id: RECOVER_SETUP_DIALOG,
49
+ role: 'dialog',
50
+ filter: (data): data is any => data.component === RECOVER_SETUP_DIALOG,
51
+ component: () => <RecoverySetupDialog />,
52
+ }),
53
+ createSurface({
54
+ id: MANAGE_CREDENTIALS_DIALOG,
55
+ role: 'dialog',
56
+ filter: (data): data is any => data.component === MANAGE_CREDENTIALS_DIALOG,
57
+ component: () => <ManageCredentialsDialog />,
43
58
  }),
44
59
  ]);
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { effect } from '@preact/signals-core';
6
+
7
+ import { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';
8
+ import { type TypedObject } from '@dxos/echo-schema';
9
+
10
+ import { ClientCapabilities } from './capabilities';
11
+
12
+ // TODO(wittjosiah): Remove types?
13
+ export default (context: PluginsContext) => {
14
+ const client = context.requestCapability(ClientCapabilities.Client);
15
+
16
+ let previousSystem: TypedObject[] = [];
17
+ const unsubscribeSystem = effect(() => {
18
+ const systemSchemas = Array.from(new Set(context.requestCapabilities(ClientCapabilities.SystemSchema).flat()));
19
+ const newSchemas = systemSchemas.filter((schema) => !previousSystem.includes(schema));
20
+ previousSystem = systemSchemas;
21
+ client.addTypes(newSchemas);
22
+ });
23
+
24
+ let previous: TypedObject[] = [];
25
+ const unsubscribe = effect(() => {
26
+ const schemas = Array.from(new Set(context.requestCapabilities(ClientCapabilities.Schema).flat()));
27
+ const newSchemas = schemas.filter((schema) => !previous.includes(schema));
28
+ previous = schemas;
29
+ client.addTypes(newSchemas);
30
+ });
31
+
32
+ return contributes(Capabilities.Null, null, () => {
33
+ unsubscribeSystem();
34
+ unsubscribe();
35
+ });
36
+ };