@dxos/react-client 0.5.3-main.f752aaa → 0.5.3-main.fffc127

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 (50) hide show
  1. package/dist/lib/browser/{chunk-BQ4BAP42.mjs → chunk-26VFTP7R.mjs} +38 -30
  2. package/dist/lib/browser/chunk-26VFTP7R.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-KR6MTIAK.mjs → chunk-RXX5XM6Z.mjs} +8 -8
  4. package/dist/lib/browser/chunk-RXX5XM6Z.mjs.map +7 -0
  5. package/dist/lib/browser/devtools/index.mjs +1 -1
  6. package/dist/lib/browser/echo/index.mjs +4 -4
  7. package/dist/lib/browser/echo/index.mjs.map +3 -3
  8. package/dist/lib/browser/halo/index.mjs +2 -2
  9. package/dist/lib/browser/index.mjs +1 -1
  10. package/dist/lib/browser/invitations/index.mjs +1 -1
  11. package/dist/lib/browser/mesh/index.mjs +1 -1
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/testing/index.mjs +2 -2
  14. package/dist/lib/browser/testing/index.mjs.map +3 -3
  15. package/dist/lib/node/{chunk-HVU2FX77.cjs → chunk-BZPBZFOR.cjs} +11 -11
  16. package/dist/lib/node/chunk-BZPBZFOR.cjs.map +7 -0
  17. package/dist/lib/node/{chunk-X5URYLUS.cjs → chunk-TQWLADVH.cjs} +41 -33
  18. package/dist/lib/node/chunk-TQWLADVH.cjs.map +7 -0
  19. package/dist/lib/node/devtools/index.cjs +2 -2
  20. package/dist/lib/node/echo/index.cjs +6 -6
  21. package/dist/lib/node/echo/index.cjs.map +3 -3
  22. package/dist/lib/node/halo/index.cjs +7 -7
  23. package/dist/lib/node/index.cjs +11 -11
  24. package/dist/lib/node/invitations/index.cjs +7 -7
  25. package/dist/lib/node/invitations/index.cjs.map +1 -1
  26. package/dist/lib/node/mesh/index.cjs +2 -2
  27. package/dist/lib/node/meta.json +1 -1
  28. package/dist/lib/node/testing/index.cjs +3 -3
  29. package/dist/lib/node/testing/index.cjs.map +3 -3
  30. package/dist/types/src/client/ClientContext.d.ts +3 -0
  31. package/dist/types/src/client/ClientContext.d.ts.map +1 -1
  32. package/dist/types/src/client/useConfig.d.ts +1 -1
  33. package/dist/types/src/client/useConfig.d.ts.map +1 -1
  34. package/dist/types/src/devtools/useStream.d.ts.map +1 -1
  35. package/dist/types/src/echo/useMembers.d.ts +1 -1
  36. package/dist/types/src/echo/useMembers.d.ts.map +1 -1
  37. package/dist/types/src/halo/useKeyStore.d.ts.map +1 -1
  38. package/dist/types/src/invitations/useInvitationStatus.d.ts +10 -6
  39. package/dist/types/src/invitations/useInvitationStatus.d.ts.map +1 -1
  40. package/dist/types/src/testing/ClientRepeater.d.ts.map +1 -1
  41. package/package.json +17 -17
  42. package/src/client/ClientContext.tsx +3 -0
  43. package/src/echo/useMembers.ts +2 -2
  44. package/src/invitations/useInvitationStatus.ts +46 -36
  45. package/src/testing/ClientRepeater.tsx +1 -1
  46. package/typedoc.json +1 -1
  47. package/dist/lib/browser/chunk-BQ4BAP42.mjs.map +0 -7
  48. package/dist/lib/browser/chunk-KR6MTIAK.mjs.map +0 -7
  49. package/dist/lib/node/chunk-HVU2FX77.cjs.map +0 -7
  50. package/dist/lib/node/chunk-X5URYLUS.cjs.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"useInvitationStatus.d.ts","sourceRoot":"","sources":["../../../../src/invitations/useInvitationStatus.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEL,KAAK,+BAA+B,EACpC,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAGlC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAcF,MAAM,MAAM,gBAAgB,GACxB;IACE,MAAM,EACF,UAAU,CAAC,KAAK,CAAC,IAAI,GACrB,UAAU,CAAC,KAAK,CAAC,SAAS,GAC1B,UAAU,CAAC,KAAK,CAAC,wBAAwB,GACzC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;CACrC,GACD;IACE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;IACpC,UAAU,EAAE,+BAA+B,CAAC;CAC7C,GACD;IACE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;IACjC,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GACD;IACE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9D,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;CAC5B,GACD;IACE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;CAC5B,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,IAAI,IAAI,CAAC;IAEf,OAAO,CAAC,UAAU,EAAE,+BAA+B,GAAG,IAAI,CAAC;IAC3D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,uBAAwB,+BAA+B,KAAG,gBAmHzF,CAAC"}
1
+ {"version":3,"file":"useInvitationStatus.d.ts","sourceRoot":"","sources":["../../../../src/invitations/useInvitationStatus.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEL,KAAK,+BAA+B,EACpC,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAGlC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAeF,KAAK,iBAAiB,GAAG;IAAE,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,gBAAgB,GACxB,CAAC;IACC,MAAM,EACF,UAAU,CAAC,KAAK,CAAC,IAAI,GACrB,UAAU,CAAC,KAAK,CAAC,SAAS,GAC1B,UAAU,CAAC,KAAK,CAAC,wBAAwB,GACzC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;CACrC,GAAG,iBAAiB,CAAC,GACtB,CAAC;IACC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;IACpC,UAAU,EAAE,+BAA+B,CAAC;CAC7C,GAAG,iBAAiB,CAAC,GACtB,CAAC;IACC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;IACjC,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,iBAAiB,CAAC,GACtB,CAAC;IACC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9D,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;CAC5B,GAAG,iBAAiB,CAAC,GACtB;IACE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;CAC5B,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,IAAI,IAAI,CAAC;IAEf,OAAO,CAAC,UAAU,EAAE,+BAA+B,GAAG,IAAI,CAAC;IAC3D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,gBAAiB,+BAA+B,KAAG,gBA0HlF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ClientRepeater.d.ts","sourceRoot":"","sources":["../../../../src/testing/ClientRepeater.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAY,KAAK,EAAE,EAAa,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAkB,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,MAAM,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,sBAAsB,IAAI;IAClE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,EAAE,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF;;;GAGG;AAMH,eAAO,MAAM,cAAc,yFAyD1B,CAAC"}
1
+ {"version":3,"file":"ClientRepeater.d.ts","sourceRoot":"","sources":["../../../../src/testing/ClientRepeater.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAY,KAAK,EAAE,EAAa,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAkB,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,MAAM,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,sBAAsB,IAAI;IAClE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,EAAE,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF;;;GAGG;AAMH,eAAO,MAAM,cAAc,4CAA6C,oBAAoB,CAAC,CAAC,uBAyD7F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-client",
3
- "version": "0.5.3-main.f752aaa",
3
+ "version": "0.5.3-main.fffc127",
4
4
  "description": "React client API",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -91,17 +91,17 @@
91
91
  }
92
92
  },
93
93
  "dependencies": {
94
- "@dxos/async": "0.5.3-main.f752aaa",
95
- "@dxos/codec-protobuf": "0.5.3-main.f752aaa",
96
- "@dxos/client": "0.5.3-main.f752aaa",
97
- "@dxos/config": "0.5.3-main.f752aaa",
98
- "@dxos/debug": "0.5.3-main.f752aaa",
99
- "@dxos/echo-signals": "0.5.3-main.f752aaa",
100
- "@dxos/log": "0.5.3-main.f752aaa",
101
- "@dxos/node-std": "0.5.3-main.f752aaa",
102
- "@dxos/invariant": "0.5.3-main.f752aaa",
103
- "@dxos/react-async": "0.5.3-main.f752aaa",
104
- "@dxos/util": "0.5.3-main.f752aaa"
94
+ "@dxos/async": "0.5.3-main.fffc127",
95
+ "@dxos/codec-protobuf": "0.5.3-main.fffc127",
96
+ "@dxos/client": "0.5.3-main.fffc127",
97
+ "@dxos/config": "0.5.3-main.fffc127",
98
+ "@dxos/debug": "0.5.3-main.fffc127",
99
+ "@dxos/echo-signals": "0.5.3-main.fffc127",
100
+ "@dxos/log": "0.5.3-main.fffc127",
101
+ "@dxos/node-std": "0.5.3-main.fffc127",
102
+ "@dxos/invariant": "0.5.3-main.fffc127",
103
+ "@dxos/util": "0.5.3-main.fffc127",
104
+ "@dxos/react-async": "0.5.3-main.fffc127"
105
105
  },
106
106
  "devDependencies": {
107
107
  "@testing-library/dom": "^8.17.1",
@@ -112,10 +112,10 @@
112
112
  "react": "^18.2.0",
113
113
  "react-dom": "^18.2.0",
114
114
  "yjs": "^13.6.10",
115
- "@dxos/random": "0.5.3-main.f752aaa",
116
- "@dxos/react-ui": "0.5.3-main.f752aaa",
117
- "@dxos/react-ui-theme": "0.5.3-main.f752aaa",
118
- "@dxos/storybook-utils": "0.5.3-main.f752aaa"
115
+ "@dxos/random": "0.5.3-main.fffc127",
116
+ "@dxos/react-ui": "0.5.3-main.fffc127",
117
+ "@dxos/react-ui-theme": "0.5.3-main.fffc127",
118
+ "@dxos/storybook-utils": "0.5.3-main.fffc127"
119
119
  },
120
120
  "peerDependencies": {
121
121
  "react": "*",
@@ -123,7 +123,7 @@
123
123
  },
124
124
  "optionalDependencies": {
125
125
  "yjs": "^13.6.10",
126
- "@dxos/random": "0.5.3-main.f752aaa"
126
+ "@dxos/random": "0.5.3-main.fffc127"
127
127
  },
128
128
  "publishConfig": {
129
129
  "access": "public"
@@ -47,6 +47,9 @@ export const useClient = () => {
47
47
  return client;
48
48
  };
49
49
 
50
+ /**
51
+ * Properties for the ClientProvider.
52
+ */
50
53
  export type ClientProviderProps = Omit<ClientOptions, 'config' | 'services'> & {
51
54
  children?: ReactNode;
52
55
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { MulticastObservable } from '@dxos/async';
6
6
  import { type PublicKey } from '@dxos/client';
7
- import { SpaceMember } from '@dxos/client/echo';
7
+ import { HaloSpaceMember, type SpaceMember } from '@dxos/client/echo';
8
8
  import { useMulticastObservable } from '@dxos/react-async';
9
9
 
10
10
  import { useSpaces } from './useSpaces';
@@ -16,5 +16,5 @@ export const useMembers = (spaceKey: PublicKey | undefined): SpaceMember[] => {
16
16
 
17
17
  // EMPTY_OBSERVABLE needs to be a stable reference to avoid re-subscribing on every render.
18
18
  const members = useMulticastObservable(space?.members ?? MulticastObservable.empty()) ?? [];
19
- return members.filter((member) => member.presence !== SpaceMember.PresenceState.REMOVED);
19
+ return members.filter((member) => member.role !== HaloSpaceMember.Role.REMOVED);
20
20
  };
@@ -25,33 +25,36 @@ interface InvitationReducerState {
25
25
  haltedAt?: Invitation.State;
26
26
  result: InvitationResult;
27
27
  error?: number;
28
- observable?: CancellableInvitationObservable | AuthenticatingInvitationObservable;
29
28
  id?: string;
29
+ multiUse?: boolean;
30
30
  invitationCode?: string;
31
31
  authCode?: string;
32
- multiUse?: boolean;
32
+ authMethod?: Invitation.AuthMethod;
33
+ type?: Invitation.Type;
33
34
  }
34
35
 
36
+ type InvitationPayload = { invitation: Invitation };
37
+
35
38
  export type InvitationAction =
36
- | {
39
+ | ({
37
40
  status:
38
41
  | Invitation.State.INIT
39
42
  | Invitation.State.CONNECTED
40
43
  | Invitation.State.READY_FOR_AUTHENTICATION
41
44
  | Invitation.State.AUTHENTICATING;
42
- }
43
- | {
45
+ } & InvitationPayload)
46
+ | ({
44
47
  status: Invitation.State.CONNECTING;
45
48
  observable: CancellableInvitationObservable;
46
- }
47
- | {
49
+ } & InvitationPayload)
50
+ | ({
48
51
  status: Invitation.State.SUCCESS;
49
52
  result: InvitationResult;
50
- }
51
- | {
53
+ } & InvitationPayload)
54
+ | ({
52
55
  status: Invitation.State.CANCELLED | Invitation.State.TIMEOUT;
53
56
  haltedAt: Invitation.State;
54
- }
57
+ } & InvitationPayload)
55
58
  | {
56
59
  status: Invitation.State.ERROR;
57
60
  error?: Error;
@@ -75,12 +78,24 @@ export type InvitationStatus = {
75
78
  authenticate(authCode: string): Promise<void>;
76
79
  };
77
80
 
78
- export const useInvitationStatus = (initialObservable?: CancellableInvitationObservable): InvitationStatus => {
81
+ export const useInvitationStatus = (observable?: CancellableInvitationObservable): InvitationStatus => {
79
82
  const [state, dispatch] = useReducer<Reducer<InvitationReducerState, InvitationAction>, null>(
80
83
  (prev, action) => {
81
84
  log('useInvitationStatus', { action });
85
+ const invitationProps =
86
+ 'invitation' in action
87
+ ? {
88
+ id: action.invitation.invitationId,
89
+ multiUse: action.invitation.multiUse,
90
+ invitationCode: InvitationEncoder.encode(action.invitation),
91
+ authCode: action.invitation.authCode,
92
+ authMethod: action.invitation.authMethod,
93
+ type: action.invitation.type,
94
+ }
95
+ : {};
82
96
  return {
83
97
  ...prev,
98
+ ...invitationProps,
84
99
  // TODO(burdon): State.
85
100
  status: action.status,
86
101
  // `invitationObservable`, `secret`, and `result` is persisted between the status-actions that set them.
@@ -93,16 +108,20 @@ export const useInvitationStatus = (initialObservable?: CancellableInvitationObs
93
108
  action.status === Invitation.State.TIMEOUT) && {
94
109
  haltedAt: typeof prev.haltedAt === 'undefined' ? action.haltedAt : prev.haltedAt,
95
110
  }),
96
- observable:
97
- action.status === Invitation.State.CONNECTING ? action.observable ?? prev.observable : prev.observable,
98
111
  } as InvitationReducerState;
99
112
  },
100
113
  null,
101
114
  (_arg: null) => {
115
+ const invitation = observable?.get();
102
116
  return {
103
117
  status: Invitation.State.INIT,
104
118
  result: { spaceKey: null, identityKey: null, swarmKey: null, target: null },
105
- observable: initialObservable,
119
+ id: invitation?.invitationId,
120
+ multiUse: invitation?.multiUse,
121
+ invitationCode: invitation ? InvitationEncoder.encode(invitation) : undefined,
122
+ authCode: invitation?.authCode,
123
+ authMethod: invitation?.authMethod,
124
+ type: invitation?.type,
106
125
  };
107
126
  },
108
127
  );
@@ -112,10 +131,12 @@ export const useInvitationStatus = (initialObservable?: CancellableInvitationObs
112
131
  useEffect(() => {
113
132
  const update = (invitation: Invitation) => {
114
133
  switch (invitation.state) {
134
+ case Invitation.State.INIT:
115
135
  case Invitation.State.CONNECTED:
116
136
  case Invitation.State.READY_FOR_AUTHENTICATION:
117
137
  case Invitation.State.AUTHENTICATING: {
118
138
  dispatch({
139
+ invitation,
119
140
  status: invitation.state,
120
141
  });
121
142
  break;
@@ -123,6 +144,7 @@ export const useInvitationStatus = (initialObservable?: CancellableInvitationObs
123
144
 
124
145
  case Invitation.State.SUCCESS: {
125
146
  dispatch({
147
+ invitation,
126
148
  status: invitation.state,
127
149
  result: {
128
150
  spaceKey: invitation.spaceKey || null,
@@ -136,58 +158,46 @@ export const useInvitationStatus = (initialObservable?: CancellableInvitationObs
136
158
 
137
159
  case Invitation.State.CANCELLED:
138
160
  case Invitation.State.TIMEOUT: {
139
- dispatch({ status: invitation.state, haltedAt: state.status });
161
+ dispatch({ invitation, status: invitation.state, haltedAt: state.status });
140
162
  break;
141
163
  }
142
164
  }
143
165
  };
144
166
 
145
- const subscription = state.observable?.subscribe(update, (err: Error) => {
167
+ const subscription = observable?.subscribe(update, (err: Error) => {
146
168
  dispatch({ status: Invitation.State.ERROR, error: err, haltedAt: state.status });
147
169
  });
148
170
 
149
- const currentState = state.observable?.get();
171
+ const currentState = observable?.get();
150
172
  if (currentState) {
151
173
  update(currentState);
152
174
  }
153
175
 
154
176
  return () => subscription?.unsubscribe();
155
- }, [state.observable, state.status]);
177
+ }, [observable, state.status]);
156
178
 
157
179
  // Return memoized callbacks & values.
158
180
 
159
181
  const connect = useCallback((observable: CancellableInvitationObservable) => {
160
- dispatch({ status: Invitation.State.CONNECTING, observable });
182
+ dispatch({ invitation: observable.get(), status: Invitation.State.CONNECTING, observable });
161
183
  }, []);
162
184
 
163
185
  const authenticate = useCallback(
164
186
  (authCode: string) => {
165
187
  log('authenticating...', { authCode });
166
- return (state.observable as AuthenticatingInvitationObservable).authenticate(authCode);
188
+ return (observable as AuthenticatingInvitationObservable).authenticate(authCode);
167
189
  },
168
- [state.observable],
190
+ [observable],
169
191
  );
170
192
 
171
- const cancel = useCallback(async () => state.observable?.cancel(), [state.observable]);
193
+ const cancel = useCallback(async () => observable?.cancel(), [observable]);
172
194
 
173
195
  return useMemo(() => {
174
- const invitation = state.observable?.get();
175
- const result = {
176
- status: state.status,
177
- haltedAt: state.haltedAt,
178
- result: state.result,
179
- error: state.error,
196
+ return {
197
+ ...state,
180
198
  cancel,
181
199
  connect,
182
200
  authenticate,
183
- id: invitation?.invitationId,
184
- multiUse: invitation?.multiUse,
185
- invitationCode: invitation ? InvitationEncoder.encode(invitation) : undefined,
186
- authCode: invitation?.authCode,
187
- authMethod: invitation?.authMethod,
188
- type: invitation?.type,
189
201
  };
190
-
191
- return result;
192
202
  }, [state, cancel, connect, authenticate]);
193
203
  };
@@ -60,7 +60,7 @@ export const ClientRepeater = <P extends RepeatedComponentProps>(props: ClientRe
60
60
 
61
61
  useEffect(() => {
62
62
  const timeout = setTimeout(async () => {
63
- const clients = [...Array(count)].map((_) => new Client({ services: testBuilder.createLocal() }));
63
+ const clients = [...Array(count)].map((_) => new Client({ services: testBuilder.createLocalClientServices() }));
64
64
  await Promise.all(clients.map((client) => client.initialize()));
65
65
  schema && clients.map((client) => client.addSchema(...schema));
66
66
 
package/typedoc.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "$schema": "https://typedoc.org/schema.json",
3
3
  "entryPoints": [
4
+ "src/index.ts",
4
5
  "src/devtools/index.ts",
5
6
  "src/echo/index.ts",
6
7
  "src/halo/index.ts",
7
- "src/index.ts",
8
8
  "src/invitations/index.ts",
9
9
  "src/mesh/index.ts",
10
10
  "src/worker.ts"
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/invitations/index.ts", "../../../src/invitations/useInvitationStatus.ts"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\n// NOTE: Export * fails here.\nexport {\n AuthenticatingInvitationObservable,\n CancellableInvitationObservable,\n InvitationEncoder,\n Invitation,\n type Invitations,\n InvitationsProxy,\n} from '@dxos/client/invitations';\n\nexport * from './useInvitationStatus';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useReducer, type Reducer, useMemo, useCallback, useEffect } from 'react';\n\nimport { type PublicKey } from '@dxos/client';\nimport {\n type AuthenticatingInvitationObservable,\n type CancellableInvitationObservable,\n Invitation,\n InvitationEncoder,\n} from '@dxos/client/invitations';\nimport { log } from '@dxos/log';\n\nexport type InvitationResult = {\n spaceKey: PublicKey | null;\n identityKey: PublicKey | null;\n swarmKey: PublicKey | null;\n target: string | null;\n};\n\ninterface InvitationReducerState {\n status: Invitation.State; // TODO(burdon): Rename state.\n haltedAt?: Invitation.State;\n result: InvitationResult;\n error?: number;\n observable?: CancellableInvitationObservable | AuthenticatingInvitationObservable;\n id?: string;\n invitationCode?: string;\n authCode?: string;\n multiUse?: boolean;\n}\n\nexport type InvitationAction =\n | {\n status:\n | Invitation.State.INIT\n | Invitation.State.CONNECTED\n | Invitation.State.READY_FOR_AUTHENTICATION\n | Invitation.State.AUTHENTICATING;\n }\n | {\n status: Invitation.State.CONNECTING;\n observable: CancellableInvitationObservable;\n }\n | {\n status: Invitation.State.SUCCESS;\n result: InvitationResult;\n }\n | {\n status: Invitation.State.CANCELLED | Invitation.State.TIMEOUT;\n haltedAt: Invitation.State;\n }\n | {\n status: Invitation.State.ERROR;\n error?: Error;\n haltedAt: Invitation.State;\n };\n\nexport type InvitationStatus = {\n id?: string;\n invitationCode?: string;\n authCode?: string;\n authMethod?: Invitation.AuthMethod;\n type?: Invitation.Type;\n status: Invitation.State;\n haltedAt?: Invitation.State;\n multiUse?: boolean;\n result: InvitationResult;\n error?: number;\n cancel(): void;\n // TODO(wittjosiah): Remove?\n connect(observable: CancellableInvitationObservable): void;\n authenticate(authCode: string): Promise<void>;\n};\n\nexport const useInvitationStatus = (initialObservable?: CancellableInvitationObservable): InvitationStatus => {\n const [state, dispatch] = useReducer<Reducer<InvitationReducerState, InvitationAction>, null>(\n (prev, action) => {\n log('useInvitationStatus', { action });\n return {\n ...prev,\n // TODO(burdon): State.\n status: action.status,\n // `invitationObservable`, `secret`, and `result` is persisted between the status-actions that set them.\n result: action.status === Invitation.State.SUCCESS ? action.result : prev.result,\n // `error` gets set each time we enter the error state\n ...(action.status === Invitation.State.ERROR && { error: action.error }),\n // `haltedAt` gets set on only the first error/cancelled/timeout action and reset on any others.\n ...((action.status === Invitation.State.ERROR ||\n action.status === Invitation.State.CANCELLED ||\n action.status === Invitation.State.TIMEOUT) && {\n haltedAt: typeof prev.haltedAt === 'undefined' ? action.haltedAt : prev.haltedAt,\n }),\n observable:\n action.status === Invitation.State.CONNECTING ? action.observable ?? prev.observable : prev.observable,\n } as InvitationReducerState;\n },\n null,\n (_arg: null) => {\n return {\n status: Invitation.State.INIT,\n result: { spaceKey: null, identityKey: null, swarmKey: null, target: null },\n observable: initialObservable,\n };\n },\n );\n\n // Handle unmount.\n\n useEffect(() => {\n const update = (invitation: Invitation) => {\n switch (invitation.state) {\n case Invitation.State.CONNECTED:\n case Invitation.State.READY_FOR_AUTHENTICATION:\n case Invitation.State.AUTHENTICATING: {\n dispatch({\n status: invitation.state,\n });\n break;\n }\n\n case Invitation.State.SUCCESS: {\n dispatch({\n status: invitation.state,\n result: {\n spaceKey: invitation.spaceKey || null,\n identityKey: invitation.identityKey || null,\n swarmKey: invitation.swarmKey || null,\n target: invitation.target || null,\n },\n });\n break;\n }\n\n case Invitation.State.CANCELLED:\n case Invitation.State.TIMEOUT: {\n dispatch({ status: invitation.state, haltedAt: state.status });\n break;\n }\n }\n };\n\n const subscription = state.observable?.subscribe(update, (err: Error) => {\n dispatch({ status: Invitation.State.ERROR, error: err, haltedAt: state.status });\n });\n\n const currentState = state.observable?.get();\n if (currentState) {\n update(currentState);\n }\n\n return () => subscription?.unsubscribe();\n }, [state.observable, state.status]);\n\n // Return memoized callbacks & values.\n\n const connect = useCallback((observable: CancellableInvitationObservable) => {\n dispatch({ status: Invitation.State.CONNECTING, observable });\n }, []);\n\n const authenticate = useCallback(\n (authCode: string) => {\n log('authenticating...', { authCode });\n return (state.observable as AuthenticatingInvitationObservable).authenticate(authCode);\n },\n [state.observable],\n );\n\n const cancel = useCallback(async () => state.observable?.cancel(), [state.observable]);\n\n return useMemo(() => {\n const invitation = state.observable?.get();\n const result = {\n status: state.status,\n haltedAt: state.haltedAt,\n result: state.result,\n error: state.error,\n cancel,\n connect,\n authenticate,\n id: invitation?.invitationId,\n multiUse: invitation?.multiUse,\n invitationCode: invitation ? InvitationEncoder.encode(invitation) : undefined,\n authCode: invitation?.authCode,\n authMethod: invitation?.authMethod,\n type: invitation?.type,\n };\n\n return result;\n }, [state, cancel, connect, authenticate]);\n};\n"],
5
- "mappings": "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",
6
- "names": ["AuthenticatingInvitationObservable", "CancellableInvitationObservable", "InvitationEncoder", "Invitation", "InvitationsProxy", "useReducer", "useMemo", "useCallback", "useEffect", "Invitation", "InvitationEncoder", "log", "useInvitationStatus", "initialObservable", "state", "dispatch", "prev", "action", "status", "result", "State", "SUCCESS", "ERROR", "error", "CANCELLED", "TIMEOUT", "haltedAt", "observable", "CONNECTING", "_arg", "INIT", "spaceKey", "identityKey", "swarmKey", "target", "update", "invitation", "CONNECTED", "READY_FOR_AUTHENTICATION", "AUTHENTICATING", "subscription", "subscribe", "err", "currentState", "get", "unsubscribe", "connect", "authenticate", "authCode", "cancel", "id", "invitationId", "multiUse", "invitationCode", "encode", "undefined", "authMethod", "type"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/client/ClientContext.tsx", "../../../src/banner.ts", "../../../src/client/useClientServices.ts", "../../../src/client/useConfig.ts", "../../../src/client/useShell.ts", "../../../src/client/useStatus.ts", "../../../src/client/AgentHostingProvider.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport React, {\n type ReactNode,\n useState,\n type Context,\n createContext,\n useContext,\n useEffect,\n type FunctionComponent,\n useMemo,\n} from 'react';\n\nimport { Client, type ClientOptions } from '@dxos/client';\nimport { SystemStatus, type ClientServices, type ClientServicesProvider } from '@dxos/client/services';\nimport { type Config } from '@dxos/config';\nimport { raise } from '@dxos/debug';\nimport { registerSignalFactory } from '@dxos/echo-signals/react';\nimport { log } from '@dxos/log';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util'; // TODO(burdon): Deprecate \"util\"?\n\nimport { printBanner } from '../banner';\n\n// TODO(burdon): Reconcile with ClientOptions.\nexport type ClientContextProps = {\n client: Client;\n\n // Optionally expose services (e.g., for devtools).\n // TODO(burdon): Can't this just be accessed via `client.services`?\n services?: ClientServices;\n\n status?: SystemStatus | null;\n};\n\nexport const ClientContext: Context<ClientContextProps | undefined> = createContext<ClientContextProps | undefined>(\n undefined,\n);\n\n/**\n * Hook returning instance of DXOS client.\n * Requires ClientContext to be set via ClientProvider.\n */\nexport const useClient = () => {\n const { client } = useContext(ClientContext) ?? raise(new Error('Missing ClientContext.'));\n return client;\n};\n\nexport type ClientProviderProps = Omit<ClientOptions, 'config' | 'services'> & {\n children?: ReactNode;\n\n /**\n * Config object or async provider.\n */\n config?: Config | Provider<Promise<Config>>;\n\n /**\n * Callback to enable the caller to create a custom ClientServicesProvider.\n *\n * Most apps won't need this.\n */\n services?: (config?: Config) => MaybePromise<ClientServicesProvider>;\n\n /**\n * Client object or async provider to enable to caller to do custom initialization.\n *\n * Most apps won't need this.\n */\n // TODO(wittjosiah): Remove async and just use to keeping reference to client?\n // (Prefering `onInitialized` for custom initialization.)\n client?: Client | Provider<Promise<Client>>;\n\n /**\n * ReactNode to display until the client is available.\n */\n // TODO(wittjosiah): Rename to `placeholder`.\n fallback?: FunctionComponent<Partial<ClientContextProps>>;\n\n /**\n * Set to false to stop default signal factory from being registered.\n */\n registerSignalFactory?: boolean;\n\n /**\n * Post initialization hook to enable to caller to do custom initialization.\n *\n * @param Client\n */\n onInitialized?: (client: Client) => MaybePromise<void>;\n};\n\n/**\n * Root component that provides the DXOS client instance to child components.\n * To be used with the `useClient` hook.\n */\nexport const ClientProvider = ({\n children,\n config: configProvider,\n services: createServices,\n client: clientProvider,\n fallback: Fallback = () => null,\n registerSignalFactory: register = true,\n onInitialized,\n ...options\n}: ClientProviderProps) => {\n useMemo(() => {\n // TODO(wittjosiah): Ideally this should be imported asynchronosly because it is optional.\n // Unfortunately, async import seemed to break signals React instrumentation.\n register && registerSignalFactory();\n }, []);\n\n const [client, setClient] = useState(clientProvider instanceof Client ? clientProvider : undefined);\n const [status, setStatus] = useState<SystemStatus | null>(null);\n const [error, setError] = useState();\n if (error) {\n throw error;\n }\n\n useEffect(() => {\n if (!client) {\n return;\n }\n\n const subscription = client.status.subscribe((status) => setStatus(status));\n return () => subscription.unsubscribe();\n }, [client, setStatus]);\n\n useEffect(() => {\n const done = async (client: Client) => {\n await client.initialize().catch(setError);\n log('client ready');\n await onInitialized?.(client);\n log('initialization complete');\n setClient(client);\n setStatus(client.status.get() ?? SystemStatus.ACTIVE);\n printBanner(client);\n };\n\n const timeout = setTimeout(async () => {\n if (clientProvider) {\n // Asynchronously request client.\n const client = await getAsyncValue(clientProvider);\n await done(client);\n } else {\n // Asynchronously construct client (config may be undefined).\n const config = await getAsyncValue(configProvider);\n log('resolved config', { config });\n const services = await createServices?.(config);\n log('created services', { services });\n const client = new Client({ config, services, ...options });\n log('created client');\n await done(client);\n }\n });\n\n return () => {\n log('clean up');\n clearTimeout(timeout);\n void client?.destroy().catch((err) => log.catch(err));\n };\n }, [clientProvider, configProvider, createServices]);\n\n if (!client || status !== SystemStatus.ACTIVE) {\n return <Fallback client={client} status={status} />;\n }\n\n // prettier-ignore\n return (\n <ClientContext.Provider value={{ client, status }}>\n {children}\n </ClientContext.Provider>\n );\n};\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { type Client } from '@dxos/client';\n\n// http://patorjk.com/software/taag/#p=testall&f=Patorjk-HeX&t=DXOS\nconst BANNER = (client: Client) => {\n const commitHash = client.config.get('runtime.app.build.commitHash');\n const hash = commitHash ? ` App Commit ${commitHash} \\n` : '';\n\n return (\n '\\n' +\n '_/\\\\/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\______/\\\\/\\\\/\\\\/\\\\/\\\\_\\n' +\n '_/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\__/\\\\/\\\\_________\\n' +\n '_/\\\\/\\\\____/\\\\/\\\\______/\\\\/\\\\______/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\___\\n' +\n '_/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\__________/\\\\/\\\\_\\n' +\n '_/\\\\/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\/\\\\___\\n' +\n `\\n DXOS Client ${client.version} \\n${hash}`\n );\n};\n\nlet bannerPrinted = false;\n\nexport const printBanner = (client: Client) => {\n if (bannerPrinted) {\n return;\n }\n\n bannerPrinted = true;\n // eslint-disable-next-line no-console\n console.log(`%c${BANNER(client)}`, 'font-family: monospace;');\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport type { ClientServices } from '@dxos/client/services';\nimport { raise } from '@dxos/debug';\n\nimport { ClientContext } from './ClientContext';\n\nexport const useClientServices = (): ClientServices | undefined => {\n const { services } = useContext(ClientContext) ?? raise(new Error('Missing ClientContext.'));\n return services;\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { ClientContext } from './ClientContext';\n\n/**\n * Hook returning config object used to initialize the DXOS client instance.\n * Requires ClientContext to be set via ClientProvider.\n */\nexport const useConfig = () => {\n const { client } = useContext(ClientContext) ?? raise(new Error('Missing ClientContext.'));\n return client.config;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Shell } from '@dxos/client/services';\n\nimport { useClient } from './ClientContext';\n\n/**\n * Helper hook to access the shell.\n */\nexport const useShell = (): Shell => {\n const client = useClient();\n return client.shell;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport type { SystemStatus } from '@dxos/client/services';\nimport { raise } from '@dxos/debug';\n\nimport { ClientContext } from './ClientContext';\n\nexport const useStatus = (): SystemStatus | null | undefined => {\n const { status } = useContext(ClientContext) ?? raise(new Error('Missing ClientContext.'));\n return status;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext, useState } from 'react';\n\nimport { type Halo } from '@dxos/client/halo';\nimport { type AgentHostingProviderClient, AgentManagerClient, FakeAgentHostingProvider } from '@dxos/client/services';\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\n\nimport { useClient } from './ClientContext';\n\n/*\n * Interface for invoking the agent hosting provider client.\n * @experimental\n */\n\nexport type AgentHostingProviderProps = { config: Config; halo: Halo };\n\nexport const AgentHostingContext = createContext<AgentHostingProviderClient | null>(null);\n\nexport const AgentHostingProvider = (props: PropsWithChildren<{}>) => {\n const client = useClient();\n const [agentHostingProviderClient] = useState(makeClient(client));\n return (\n <AgentHostingContext.Provider value={agentHostingProviderClient}> {props.children}</AgentHostingContext.Provider>\n );\n};\n\nexport const useAgentHostingClient = () => {\n return useContext(AgentHostingContext);\n};\n\nconst makeClient = ({ config, halo }: AgentHostingProviderProps) => {\n const agentHostingConfig = config.get('runtime.services.agentHosting');\n if (!agentHostingConfig) {\n log('no agent hosting configured');\n return null;\n }\n\n // TODO(nf): Dynamically discover based on runtime config.\n let agentHostingProviderClient: AgentHostingProviderClient | null = null;\n switch (agentHostingConfig.type) {\n case 'LOCAL_TESTING': {\n log('using FakeAgentHostingProvider');\n return new FakeAgentHostingProvider(config, halo);\n }\n\n case 'AGENTHOSTING_API': {\n agentHostingProviderClient = new AgentManagerClient(config, halo);\n if (agentHostingProviderClient.init()) {\n return agentHostingProviderClient;\n } else {\n // Not authorized or error initializing\n return null;\n }\n }\n\n default: {\n log.error('Unknown agent hosting provider type: ' + agentHostingConfig.type);\n return null;\n }\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "useState", "createContext", "useContext", "useEffect", "useMemo", "Client", "SystemStatus", "raise", "registerSignalFactory", "log", "getAsyncValue", "BANNER", "client", "commitHash", "config", "get", "hash", "version", "bannerPrinted", "printBanner", "console", "log", "ClientContext", "createContext", "undefined", "useClient", "client", "useContext", "raise", "Error", "ClientProvider", "children", "config", "configProvider", "services", "createServices", "clientProvider", "fallback", "Fallback", "registerSignalFactory", "register", "onInitialized", "options", "useMemo", "setClient", "useState", "Client", "status", "setStatus", "error", "setError", "useEffect", "subscription", "subscribe", "unsubscribe", "done", "initialize", "catch", "log", "get", "SystemStatus", "ACTIVE", "printBanner", "timeout", "setTimeout", "getAsyncValue", "clearTimeout", "destroy", "err", "Provider", "value", "useContext", "raise", "useClientServices", "services", "useContext", "ClientContext", "raise", "Error", "useContext", "raise", "useConfig", "client", "useContext", "ClientContext", "raise", "Error", "config", "useShell", "client", "useClient", "shell", "useContext", "raise", "useStatus", "status", "useContext", "ClientContext", "raise", "Error", "React", "createContext", "useContext", "useState", "AgentManagerClient", "FakeAgentHostingProvider", "log", "AgentHostingContext", "createContext", "AgentHostingProvider", "props", "client", "useClient", "agentHostingProviderClient", "useState", "makeClient", "React", "Provider", "value", "children", "useAgentHostingClient", "useContext", "config", "halo", "agentHostingConfig", "get", "log", "type", "FakeAgentHostingProvider", "AgentManagerClient", "init", "error"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/client/ClientContext.tsx", "../../../src/banner.ts", "../../../src/client/useClientServices.ts", "../../../src/client/useConfig.ts", "../../../src/client/useShell.ts", "../../../src/client/useStatus.ts", "../../../src/client/AgentHostingProvider.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport React, {\n type ReactNode,\n useState,\n type Context,\n createContext,\n useContext,\n useEffect,\n type FunctionComponent,\n useMemo,\n} from 'react';\n\nimport { Client, type ClientOptions } from '@dxos/client';\nimport { SystemStatus, type ClientServices, type ClientServicesProvider } from '@dxos/client/services';\nimport { type Config } from '@dxos/config';\nimport { raise } from '@dxos/debug';\nimport { registerSignalFactory } from '@dxos/echo-signals/react';\nimport { log } from '@dxos/log';\nimport { getAsyncValue, type MaybePromise, type Provider } from '@dxos/util'; // TODO(burdon): Deprecate \"util\"?\n\nimport { printBanner } from '../banner';\n\n// TODO(burdon): Reconcile with ClientOptions.\nexport type ClientContextProps = {\n client: Client;\n\n // Optionally expose services (e.g., for devtools).\n // TODO(burdon): Can't this just be accessed via `client.services`?\n services?: ClientServices;\n\n status?: SystemStatus | null;\n};\n\nexport const ClientContext: Context<ClientContextProps | undefined> = createContext<ClientContextProps | undefined>(\n undefined,\n);\n\n/**\n * Hook returning instance of DXOS client.\n * Requires ClientContext to be set via ClientProvider.\n */\nexport const useClient = () => {\n const { client } = useContext(ClientContext) ?? raise(new Error('Missing ClientContext.'));\n return client;\n};\n\nexport type ClientProviderProps = Omit<ClientOptions, 'config' | 'services'> & {\n children?: ReactNode;\n\n /**\n * Config object or async provider.\n */\n config?: Config | Provider<Promise<Config>>;\n\n /**\n * Callback to enable the caller to create a custom ClientServicesProvider.\n *\n * Most apps won't need this.\n */\n services?: (config?: Config) => MaybePromise<ClientServicesProvider>;\n\n /**\n * Client object or async provider to enable to caller to do custom initialization.\n *\n * Most apps won't need this.\n */\n // TODO(wittjosiah): Remove async and just use to keeping reference to client?\n // (Prefering `onInitialized` for custom initialization.)\n client?: Client | Provider<Promise<Client>>;\n\n /**\n * ReactNode to display until the client is available.\n */\n // TODO(wittjosiah): Rename to `placeholder`.\n fallback?: FunctionComponent<Partial<ClientContextProps>>;\n\n /**\n * Set to false to stop default signal factory from being registered.\n */\n registerSignalFactory?: boolean;\n\n /**\n * Post initialization hook to enable to caller to do custom initialization.\n *\n * @param Client\n */\n onInitialized?: (client: Client) => MaybePromise<void>;\n};\n\n/**\n * Root component that provides the DXOS client instance to child components.\n * To be used with the `useClient` hook.\n */\nexport const ClientProvider = ({\n children,\n config: configProvider,\n services: createServices,\n client: clientProvider,\n fallback: Fallback = () => null,\n registerSignalFactory: register = true,\n onInitialized,\n ...options\n}: ClientProviderProps) => {\n useMemo(() => {\n // TODO(wittjosiah): Ideally this should be imported asynchronosly because it is optional.\n // Unfortunately, async import seemed to break signals React instrumentation.\n register && registerSignalFactory();\n }, []);\n\n const [client, setClient] = useState(clientProvider instanceof Client ? clientProvider : undefined);\n const [status, setStatus] = useState<SystemStatus | null>(null);\n const [error, setError] = useState();\n if (error) {\n throw error;\n }\n\n useEffect(() => {\n if (!client) {\n return;\n }\n\n const subscription = client.status.subscribe((status) => setStatus(status));\n return () => subscription.unsubscribe();\n }, [client, setStatus]);\n\n useEffect(() => {\n const done = async (client: Client) => {\n await client.initialize().catch(setError);\n log('client ready');\n await onInitialized?.(client);\n log('initialization complete');\n setClient(client);\n setStatus(client.status.get() ?? SystemStatus.ACTIVE);\n printBanner(client);\n };\n\n const timeout = setTimeout(async () => {\n if (clientProvider) {\n // Asynchronously request client.\n const client = await getAsyncValue(clientProvider);\n await done(client);\n } else {\n // Asynchronously construct client (config may be undefined).\n const config = await getAsyncValue(configProvider);\n log('resolved config', { config });\n const services = await createServices?.(config);\n log('created services', { services });\n const client = new Client({ config, services, ...options });\n log('created client');\n await done(client);\n }\n });\n\n return () => {\n log('clean up');\n clearTimeout(timeout);\n void client?.destroy().catch((err) => log.catch(err));\n };\n }, [clientProvider, configProvider, createServices]);\n\n if (!client || status !== SystemStatus.ACTIVE) {\n return <Fallback client={client} status={status} />;\n }\n\n // prettier-ignore\n return (\n <ClientContext.Provider value={{ client, status }}>\n {children}\n </ClientContext.Provider>\n );\n};\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { type Client } from '@dxos/client';\n\n// http://patorjk.com/software/taag/#p=testall&f=Patorjk-HeX&t=DXOS\nconst BANNER = (client: Client) => {\n const commitHash = client.config.get('runtime.app.build.commitHash');\n const hash = commitHash ? ` App Commit ${commitHash} \\n` : '';\n\n return (\n '\\n' +\n '_/\\\\/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\______/\\\\/\\\\/\\\\/\\\\/\\\\_\\n' +\n '_/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\__/\\\\/\\\\_________\\n' +\n '_/\\\\/\\\\____/\\\\/\\\\______/\\\\/\\\\______/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\___\\n' +\n '_/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\__________/\\\\/\\\\_\\n' +\n '_/\\\\/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\____/\\\\/\\\\/\\\\/\\\\/\\\\___\\n' +\n `\\n DXOS Client ${client.version} \\n${hash}`\n );\n};\n\nlet bannerPrinted = false;\n\nexport const printBanner = (client: Client) => {\n if (bannerPrinted) {\n return;\n }\n\n bannerPrinted = true;\n // eslint-disable-next-line no-console\n console.log(`%c${BANNER(client)}`, 'font-family: monospace;');\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport type { ClientServices } from '@dxos/client/services';\nimport { raise } from '@dxos/debug';\n\nimport { ClientContext } from './ClientContext';\n\nexport const useClientServices = (): ClientServices | undefined => {\n const { services } = useContext(ClientContext) ?? raise(new Error('Missing ClientContext.'));\n return services;\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { ClientContext } from './ClientContext';\n\n/**\n * Hook returning config object used to initialize the DXOS client instance.\n * Requires ClientContext to be set via ClientProvider.\n */\nexport const useConfig = () => {\n const { client } = useContext(ClientContext) ?? raise(new Error('Missing ClientContext.'));\n return client.config;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Shell } from '@dxos/client/services';\n\nimport { useClient } from './ClientContext';\n\n/**\n * Helper hook to access the shell.\n */\nexport const useShell = (): Shell => {\n const client = useClient();\n return client.shell;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport type { SystemStatus } from '@dxos/client/services';\nimport { raise } from '@dxos/debug';\n\nimport { ClientContext } from './ClientContext';\n\nexport const useStatus = (): SystemStatus | null | undefined => {\n const { status } = useContext(ClientContext) ?? raise(new Error('Missing ClientContext.'));\n return status;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext, useState } from 'react';\n\nimport { type Halo } from '@dxos/client/halo';\nimport { type AgentHostingProviderClient, AgentManagerClient, FakeAgentHostingProvider } from '@dxos/client/services';\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\n\nimport { useClient } from './ClientContext';\n\n/*\n * Interface for invoking the agent hosting provider client.\n * @experimental\n */\n\nexport type AgentHostingProviderProps = { config: Config; halo: Halo };\n\nexport const AgentHostingContext = createContext<AgentHostingProviderClient | null>(null);\n\nexport const AgentHostingProvider = (props: PropsWithChildren<{}>) => {\n const client = useClient();\n const [agentHostingProviderClient] = useState(makeClient(client));\n return (\n <AgentHostingContext.Provider value={agentHostingProviderClient}> {props.children}</AgentHostingContext.Provider>\n );\n};\n\nexport const useAgentHostingClient = () => {\n return useContext(AgentHostingContext);\n};\n\nconst makeClient = ({ config, halo }: AgentHostingProviderProps) => {\n const agentHostingConfig = config.get('runtime.services.agentHosting');\n if (!agentHostingConfig) {\n log('no agent hosting configured');\n return null;\n }\n\n // TODO(nf): Dynamically discover based on runtime config.\n let agentHostingProviderClient: AgentHostingProviderClient | null = null;\n switch (agentHostingConfig.type) {\n case 'LOCAL_TESTING': {\n log('using FakeAgentHostingProvider');\n return new FakeAgentHostingProvider(config, halo);\n }\n\n case 'AGENTHOSTING_API': {\n agentHostingProviderClient = new AgentManagerClient(config, halo);\n if (agentHostingProviderClient.init()) {\n return agentHostingProviderClient;\n } else {\n // Not authorized or error initializing\n return null;\n }\n }\n\n default: {\n log.error('Unknown agent hosting provider type: ' + agentHostingConfig.type);\n return null;\n }\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "import_debug", "import_services", "import_log", "BANNER", "client", "commitHash", "config", "get", "hash", "version", "bannerPrinted", "printBanner", "console", "log", "ClientContext", "createContext", "undefined", "useClient", "useContext", "raise", "Error", "ClientProvider", "children", "configProvider", "services", "createServices", "clientProvider", "fallback", "Fallback", "registerSignalFactory", "register", "onInitialized", "options", "useMemo", "setClient", "useState", "Client", "status", "setStatus", "error", "setError", "useEffect", "subscription", "subscribe", "unsubscribe", "done", "initialize", "catch", "SystemStatus", "ACTIVE", "timeout", "setTimeout", "getAsyncValue", "clearTimeout", "destroy", "err", "React", "Provider", "value", "useClientServices", "useConfig", "useShell", "shell", "useStatus", "AgentHostingContext", "AgentHostingProvider", "props", "agentHostingProviderClient", "makeClient", "useAgentHostingClient", "halo", "agentHostingConfig", "type", "FakeAgentHostingProvider", "AgentManagerClient", "init"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/invitations/index.ts", "../../../src/invitations/useInvitationStatus.ts"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\n// NOTE: Export * fails here.\nexport {\n AuthenticatingInvitationObservable,\n CancellableInvitationObservable,\n InvitationEncoder,\n Invitation,\n type Invitations,\n InvitationsProxy,\n} from '@dxos/client/invitations';\n\nexport * from './useInvitationStatus';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { useReducer, type Reducer, useMemo, useCallback, useEffect } from 'react';\n\nimport { type PublicKey } from '@dxos/client';\nimport {\n type AuthenticatingInvitationObservable,\n type CancellableInvitationObservable,\n Invitation,\n InvitationEncoder,\n} from '@dxos/client/invitations';\nimport { log } from '@dxos/log';\n\nexport type InvitationResult = {\n spaceKey: PublicKey | null;\n identityKey: PublicKey | null;\n swarmKey: PublicKey | null;\n target: string | null;\n};\n\ninterface InvitationReducerState {\n status: Invitation.State; // TODO(burdon): Rename state.\n haltedAt?: Invitation.State;\n result: InvitationResult;\n error?: number;\n observable?: CancellableInvitationObservable | AuthenticatingInvitationObservable;\n id?: string;\n invitationCode?: string;\n authCode?: string;\n multiUse?: boolean;\n}\n\nexport type InvitationAction =\n | {\n status:\n | Invitation.State.INIT\n | Invitation.State.CONNECTED\n | Invitation.State.READY_FOR_AUTHENTICATION\n | Invitation.State.AUTHENTICATING;\n }\n | {\n status: Invitation.State.CONNECTING;\n observable: CancellableInvitationObservable;\n }\n | {\n status: Invitation.State.SUCCESS;\n result: InvitationResult;\n }\n | {\n status: Invitation.State.CANCELLED | Invitation.State.TIMEOUT;\n haltedAt: Invitation.State;\n }\n | {\n status: Invitation.State.ERROR;\n error?: Error;\n haltedAt: Invitation.State;\n };\n\nexport type InvitationStatus = {\n id?: string;\n invitationCode?: string;\n authCode?: string;\n authMethod?: Invitation.AuthMethod;\n type?: Invitation.Type;\n status: Invitation.State;\n haltedAt?: Invitation.State;\n multiUse?: boolean;\n result: InvitationResult;\n error?: number;\n cancel(): void;\n // TODO(wittjosiah): Remove?\n connect(observable: CancellableInvitationObservable): void;\n authenticate(authCode: string): Promise<void>;\n};\n\nexport const useInvitationStatus = (initialObservable?: CancellableInvitationObservable): InvitationStatus => {\n const [state, dispatch] = useReducer<Reducer<InvitationReducerState, InvitationAction>, null>(\n (prev, action) => {\n log('useInvitationStatus', { action });\n return {\n ...prev,\n // TODO(burdon): State.\n status: action.status,\n // `invitationObservable`, `secret`, and `result` is persisted between the status-actions that set them.\n result: action.status === Invitation.State.SUCCESS ? action.result : prev.result,\n // `error` gets set each time we enter the error state\n ...(action.status === Invitation.State.ERROR && { error: action.error }),\n // `haltedAt` gets set on only the first error/cancelled/timeout action and reset on any others.\n ...((action.status === Invitation.State.ERROR ||\n action.status === Invitation.State.CANCELLED ||\n action.status === Invitation.State.TIMEOUT) && {\n haltedAt: typeof prev.haltedAt === 'undefined' ? action.haltedAt : prev.haltedAt,\n }),\n observable:\n action.status === Invitation.State.CONNECTING ? action.observable ?? prev.observable : prev.observable,\n } as InvitationReducerState;\n },\n null,\n (_arg: null) => {\n return {\n status: Invitation.State.INIT,\n result: { spaceKey: null, identityKey: null, swarmKey: null, target: null },\n observable: initialObservable,\n };\n },\n );\n\n // Handle unmount.\n\n useEffect(() => {\n const update = (invitation: Invitation) => {\n switch (invitation.state) {\n case Invitation.State.CONNECTED:\n case Invitation.State.READY_FOR_AUTHENTICATION:\n case Invitation.State.AUTHENTICATING: {\n dispatch({\n status: invitation.state,\n });\n break;\n }\n\n case Invitation.State.SUCCESS: {\n dispatch({\n status: invitation.state,\n result: {\n spaceKey: invitation.spaceKey || null,\n identityKey: invitation.identityKey || null,\n swarmKey: invitation.swarmKey || null,\n target: invitation.target || null,\n },\n });\n break;\n }\n\n case Invitation.State.CANCELLED:\n case Invitation.State.TIMEOUT: {\n dispatch({ status: invitation.state, haltedAt: state.status });\n break;\n }\n }\n };\n\n const subscription = state.observable?.subscribe(update, (err: Error) => {\n dispatch({ status: Invitation.State.ERROR, error: err, haltedAt: state.status });\n });\n\n const currentState = state.observable?.get();\n if (currentState) {\n update(currentState);\n }\n\n return () => subscription?.unsubscribe();\n }, [state.observable, state.status]);\n\n // Return memoized callbacks & values.\n\n const connect = useCallback((observable: CancellableInvitationObservable) => {\n dispatch({ status: Invitation.State.CONNECTING, observable });\n }, []);\n\n const authenticate = useCallback(\n (authCode: string) => {\n log('authenticating...', { authCode });\n return (state.observable as AuthenticatingInvitationObservable).authenticate(authCode);\n },\n [state.observable],\n );\n\n const cancel = useCallback(async () => state.observable?.cancel(), [state.observable]);\n\n return useMemo(() => {\n const invitation = state.observable?.get();\n const result = {\n status: state.status,\n haltedAt: state.haltedAt,\n result: state.result,\n error: state.error,\n cancel,\n connect,\n authenticate,\n id: invitation?.invitationId,\n multiUse: invitation?.multiUse,\n invitationCode: invitation ? InvitationEncoder.encode(invitation) : undefined,\n authCode: invitation?.authCode,\n authMethod: invitation?.authMethod,\n type: invitation?.type,\n };\n\n return result;\n }, [state, cancel, connect, authenticate]);\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_invitations", "useInvitationStatus", "initialObservable", "state", "dispatch", "useReducer", "prev", "action", "log", "status", "result", "Invitation", "State", "SUCCESS", "ERROR", "error", "CANCELLED", "TIMEOUT", "haltedAt", "observable", "CONNECTING", "_arg", "INIT", "spaceKey", "identityKey", "swarmKey", "target", "useEffect", "update", "invitation", "CONNECTED", "READY_FOR_AUTHENTICATION", "AUTHENTICATING", "subscription", "subscribe", "err", "currentState", "get", "unsubscribe", "connect", "useCallback", "authenticate", "authCode", "cancel", "useMemo", "id", "invitationId", "multiUse", "invitationCode", "InvitationEncoder", "encode", "undefined", "authMethod", "type"]
7
- }