@dxos/react-client 2.21.2-dev.2c52f4b6 → 2.21.3-dev.33d9f475

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 (38) hide show
  1. package/.rush/temp/package-deps_build.json +1 -1
  2. package/.rush/temp/package-deps_build:test.json +8 -6
  3. package/dist/src/hooks/invitations/index.d.ts +1 -0
  4. package/dist/src/hooks/invitations/index.d.ts.map +1 -1
  5. package/dist/src/hooks/invitations/index.js +1 -0
  6. package/dist/src/hooks/invitations/index.js.map +1 -1
  7. package/dist/src/hooks/invitations/useHaloInvitations.d.ts +3 -0
  8. package/dist/src/hooks/invitations/useHaloInvitations.d.ts.map +1 -0
  9. package/dist/src/hooks/invitations/useHaloInvitations.js +12 -0
  10. package/dist/src/hooks/invitations/useHaloInvitations.js.map +1 -0
  11. package/dist/src/hooks/invitations/useInvitations.d.ts +3 -0
  12. package/dist/src/hooks/invitations/useInvitations.d.ts.map +1 -0
  13. package/dist/src/hooks/invitations/useInvitations.js +21 -0
  14. package/dist/src/hooks/invitations/useInvitations.js.map +1 -0
  15. package/dist/src/hooks/invitations/usePartyInvitations.d.ts +1 -2
  16. package/dist/src/hooks/invitations/usePartyInvitations.d.ts.map +1 -1
  17. package/dist/src/hooks/invitations/usePartyInvitations.js +2 -11
  18. package/dist/src/hooks/invitations/usePartyInvitations.js.map +1 -1
  19. package/dist/src/hooks/invitations/useSecretProvider.d.ts +5 -1
  20. package/dist/src/hooks/invitations/useSecretProvider.d.ts.map +1 -1
  21. package/dist/src/hooks/invitations/useSecretProvider.js +3 -2
  22. package/dist/src/hooks/invitations/useSecretProvider.js.map +1 -1
  23. package/dist/stories/halo-invitations.stories.d.ts.map +1 -1
  24. package/dist/stories/halo-invitations.stories.js +18 -17
  25. package/dist/stories/halo-invitations.stories.js.map +1 -1
  26. package/dist/stories/party-invitations.stories.d.ts.map +1 -1
  27. package/dist/stories/party-invitations.stories.js +6 -18
  28. package/dist/stories/party-invitations.stories.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +12 -12
  31. package/react-client.build.log +5 -5
  32. package/src/hooks/invitations/index.ts +1 -0
  33. package/src/hooks/invitations/useHaloInvitations.ts +11 -0
  34. package/src/hooks/invitations/useInvitations.ts +21 -0
  35. package/src/hooks/invitations/usePartyInvitations.ts +2 -14
  36. package/src/hooks/invitations/useSecretProvider.ts +9 -3
  37. package/stories/halo-invitations.stories.tsx +21 -21
  38. package/stories/party-invitations.stories.tsx +11 -21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-client",
3
- "version": "2.21.2-dev.2c52f4b6",
3
+ "version": "2.21.3-dev.33d9f475",
4
4
  "description": "React client API",
5
5
  "keywords": [],
6
6
  "license": "AGPL-3.0",
@@ -8,24 +8,24 @@
8
8
  "main": "dist/src/index.js",
9
9
  "types": "dist/src/index.d.ts",
10
10
  "dependencies": {
11
- "@dxos/async": "2.21.2-dev.2c52f4b6",
12
- "@dxos/bot-factory-client": "2.21.2-dev.2c52f4b6",
13
- "@dxos/client": "2.21.2-dev.2c52f4b6",
14
- "@dxos/config": "2.21.2-dev.2c52f4b6",
15
- "@dxos/credentials": "2.21.2-dev.2c52f4b6",
16
- "@dxos/crypto": "2.21.2-dev.2c52f4b6",
17
- "@dxos/debug": "2.21.2-dev.2c52f4b6",
18
- "@dxos/echo-db": "2.21.2-dev.2c52f4b6",
19
- "@dxos/util": "2.21.2-dev.2c52f4b6",
11
+ "@dxos/async": "2.21.3-dev.33d9f475",
12
+ "@dxos/bot-factory-client": "2.21.3-dev.33d9f475",
13
+ "@dxos/client": "2.21.3-dev.33d9f475",
14
+ "@dxos/config": "2.21.3-dev.33d9f475",
15
+ "@dxos/credentials": "2.21.3-dev.33d9f475",
16
+ "@dxos/crypto": "2.21.3-dev.33d9f475",
17
+ "@dxos/debug": "2.21.3-dev.33d9f475",
18
+ "@dxos/echo-db": "2.21.3-dev.33d9f475",
19
+ "@dxos/util": "2.21.3-dev.33d9f475",
20
20
  "assert": "^2.0.0",
21
21
  "debug": "^4.3.3",
22
22
  "react-display-name": "^0.2.5",
23
23
  "use-subscription": "^1.4.1"
24
24
  },
25
25
  "devDependencies": {
26
- "@dxos/esbuild-plugins": "2.21.2-dev.2c52f4b6",
26
+ "@dxos/esbuild-plugins": "2.21.3-dev.33d9f475",
27
27
  "@dxos/esbuild-server": "~1.7.4",
28
- "@dxos/toolchain-node-library": "2.21.1",
28
+ "@dxos/toolchain-node-library": "2.21.2",
29
29
  "@mui/material": "^5.0.1",
30
30
  "@testing-library/react": "^11.0.4",
31
31
  "@testing-library/react-hooks": "5.1.2",
@@ -2,10 +2,10 @@ Invoking: toolchain build:test
2
2
 
3
3
 
4
4
  typescript
5
- OK in 5758 ms
5
+ OK in 8026 ms
6
6
 
7
7
  eslint
8
- OK in 6339 ms
8
+ OK in 7807 ms
9
9
 
10
10
  mocha
11
11
  This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills
@@ -26,8 +26,8 @@ This browser doesn't support cancelAnimationFrame. Make sure that you load a pol
26
26
  ✓ should return custom client config when used properly in a context
27
27
 
28
28
 
29
- 7 passing (256ms)
29
+ 7 passing (305ms)
30
30
 
31
- OK in 2209 ms
31
+ OK in 2518 ms
32
32
 
33
- CHECK COMPLETE in 14328 ms
33
+ CHECK COMPLETE in 18387 ms
@@ -2,5 +2,6 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
+ export * from './useHaloInvitations';
5
6
  export * from './usePartyInvitations';
6
7
  export * from './useSecretProvider';
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ import { Client } from '@dxos/client';
6
+
7
+ import { useInvitations } from './useInvitations';
8
+
9
+ export const useHaloInvitations = (client: Client) => {
10
+ return useInvitations(client.halo);
11
+ };
@@ -0,0 +1,21 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ import { useEffect, useState } from 'react';
6
+
7
+ import { InvitationProxy, InvitationRequest } from '@dxos/client';
8
+
9
+ export const useInvitations = (invitationProxy: InvitationProxy | undefined) => {
10
+ const [invitations, setInvitations] = useState<InvitationRequest[]>(invitationProxy?.activeInvitations ?? []);
11
+
12
+ useEffect(() => {
13
+ setInvitations(invitationProxy?.activeInvitations ?? []);
14
+
15
+ return invitationProxy?.invitationsUpdate.on(() => {
16
+ setInvitations([...invitationProxy.activeInvitations]);
17
+ });
18
+ }, [invitationProxy]);
19
+
20
+ return invitations;
21
+ };
@@ -2,24 +2,12 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { useEffect, useState } from 'react';
6
-
7
- import { InvitationRequest } from '@dxos/client';
8
5
  import { PublicKey } from '@dxos/crypto';
9
6
 
10
7
  import { useParty } from '../echo-queries';
8
+ import { useInvitations } from './useInvitations';
11
9
 
12
10
  export const usePartyInvitations = (partyKey?: PublicKey) => {
13
11
  const party = useParty(partyKey);
14
- const [invitations, setInvitations] = useState<InvitationRequest[]>(party?.activeInvitations ?? []);
15
-
16
- useEffect(() => {
17
- setInvitations(party?.activeInvitations ?? []);
18
-
19
- return party?.invitationsUpdate.on(() => {
20
- setInvitations([...party.activeInvitations]);
21
- });
22
- }, [party]);
23
-
24
- return invitations;
12
+ return useInvitations(party);
25
13
  };
@@ -6,8 +6,14 @@ import { useState } from 'react';
6
6
 
7
7
  import { trigger } from '@dxos/async';
8
8
 
9
- export const useSecretProvider = <T> (): [() => Promise<T>, (value: T) => void] => {
10
- const [[provider, resolver]] = useState(() => trigger<T>());
9
+ type Provider<T> = () => Promise<T>;
10
+ type Resolver<T> = (value: T) => void;
11
+ type Reset = () => void;
11
12
 
12
- return [provider, resolver];
13
+ export const useSecretProvider = <T> (): [Provider<T>, Resolver<T>, Reset] => {
14
+ const [[provider, resolver], setState] = useState(() => trigger<T>());
15
+
16
+ const reset = () => setState(() => trigger<T>());
17
+
18
+ return [provider, resolver, reset];
13
19
  };
@@ -8,8 +8,7 @@ import {
8
8
  Box, Button, Divider, Paper, TextField, Toolbar
9
9
  } from '@mui/material';
10
10
 
11
- import { Awaited } from '@dxos/async';
12
- import { Client, decodeInvitation, PendingInvitation } from '@dxos/client';
11
+ import { decodeInvitation, encodeInvitation, Invitation } from '@dxos/client';
13
12
 
14
13
  import {
15
14
  ClientProvider,
@@ -33,19 +32,24 @@ export default {
33
32
  */
34
33
  const HaloInvitationContainer = () => {
35
34
  const client = useClient();
36
- const [invitation, setInvitation] = useState<PendingInvitation | undefined>();
35
+ const [invitationCode, setInvitationCode] = useState<string>();
37
36
  const [pin, setPin] = useState('');
38
37
 
38
+ const resetInvitations = () => {
39
+ setInvitationCode('');
40
+ setPin('');
41
+ };
42
+
39
43
  const handleCreateInvitation = async () => {
40
- const invitation = await client.createHaloInvitation({
41
- onFinish: () => { // TODO(burdon): Normalize callbacks (error, etc.)
42
- setInvitation(undefined);
43
- setPin('');
44
- },
45
- onPinGenerated: setPin
44
+ resetInvitations();
45
+
46
+ const invitation = await client.halo.createInvitation();
47
+ invitation.finished.on(() => resetInvitations());
48
+ invitation.connected.on(() => {
49
+ setPin(invitation.secret.toString());
46
50
  });
47
51
 
48
- setInvitation(invitation);
52
+ setInvitationCode(encodeInvitation(invitation.descriptor));
49
53
  };
50
54
 
51
55
  if (!client.halo.hasProfile()) {
@@ -62,13 +66,13 @@ const HaloInvitationContainer = () => {
62
66
  </Button>
63
67
  </Toolbar>
64
68
 
65
- {invitation && (
69
+ {invitationCode && (
66
70
  <Box sx={{ marginTop: 1 }}>
67
71
  <TextField
68
72
  disabled
69
73
  multiline
70
74
  fullWidth
71
- value={invitation.invitationCode}
75
+ value={invitationCode}
72
76
  maxRows={3}
73
77
  />
74
78
  </Box>
@@ -90,7 +94,7 @@ const HaloInvitationContainer = () => {
90
94
  interface Status {
91
95
  error?: any,
92
96
  identity?: string,
93
- finishAuthentication?: Awaited<ReturnType<Client['joinHaloInvitation']>>
97
+ invitation?: Invitation
94
98
  }
95
99
 
96
100
  /**
@@ -102,13 +106,9 @@ const HaloAuthenticationContainer = () => {
102
106
 
103
107
  const handleSubmit = async (invitationCode: string) => {
104
108
  try {
105
- const invitation = decodeInvitation(invitationCode);
106
-
107
- // Claim an invitation for this device to join an existing Halo.
108
- if (invitation.identityKey) {
109
- const finishAuthentication = await client.joinHaloInvitation(invitation);
110
- setStatus({ identity: invitation.identityKey.toString(), finishAuthentication });
111
- }
109
+ const invitationDescriptor = decodeInvitation(invitationCode);
110
+ const invitation = await client.halo.acceptInvitation(invitationDescriptor);
111
+ setStatus({ identity: invitationDescriptor.identityKey?.toString(), invitation });
112
112
  } catch (err: any) {
113
113
  // TODO(burdon): Doesn't support retry. Provide hint (eg, should retry/cancel).
114
114
  setStatus({ error: err });
@@ -116,7 +116,7 @@ const HaloAuthenticationContainer = () => {
116
116
  };
117
117
 
118
118
  const handleAuthenticate = async (pin: string) => {
119
- await status.finishAuthentication?.(pin);
119
+ await status.invitation?.authenticate(Buffer.from(pin));
120
120
  };
121
121
 
122
122
  return (
@@ -8,7 +8,7 @@ import {
8
8
  Box, Button, Divider, Paper, TextField, Toolbar
9
9
  } from '@mui/material';
10
10
 
11
- import { decodeInvitation, encodeInvitation, Invitation } from '@dxos/client';
11
+ import { decodeInvitation, encodeInvitation, PartyInvitation } from '@dxos/client';
12
12
  import { PublicKey } from '@dxos/crypto';
13
13
 
14
14
  import {
@@ -56,30 +56,20 @@ const PartyInvitationContainer = () => {
56
56
  });
57
57
  };
58
58
 
59
- // const handleCreateInvitation = async () => {
60
- // const invitation = await client.createHaloInvitation({
61
- // onFinish: () => { // TODO(burdon): Normalize callbacks (error, etc.)
62
- // setInvitation(undefined);
63
- // setPin('');
64
- // },
65
- // onPinGenerated: setPin
66
- // });
67
-
68
- // setInvitation(invitation);
69
- // };
70
-
71
59
  const handleCreateInvitation = () => {
72
60
  setImmediate(async () => {
73
61
  resetInvitations();
74
- if (contact) {
75
- const invitation = await client.echo.getParty(partyKey!)!.createInvitation({ inviteeKey: PublicKey.fromHex(contact!) });
76
- setInvitationCode(encodeInvitation(invitation.descriptor));
77
- } else {
78
- const invitation = await client.echo.createInvitation(partyKey!);
62
+
63
+ const invitation = await client.echo.getParty(partyKey!)!.createInvitation({
64
+ inviteeKey: contact ? PublicKey.fromHex(contact!) : undefined
65
+ });
66
+ invitation.finished.on(() => resetInvitations());
67
+
68
+ if (!contact) {
79
69
  invitation.connected.on(() => setPin(invitation.secret.toString()));
80
- invitation.finished.on(() => resetInvitations());
81
- setInvitationCode(encodeInvitation(invitation.descriptor));
82
70
  }
71
+
72
+ setInvitationCode(encodeInvitation(invitation.descriptor));
83
73
  });
84
74
  };
85
75
 
@@ -140,7 +130,7 @@ const PartyInvitationContainer = () => {
140
130
  interface Status {
141
131
  error?: any,
142
132
  party?: string,
143
- invitation?: Invitation
133
+ invitation?: PartyInvitation
144
134
  }
145
135
 
146
136
  /**