@multiplatform.one/keycloak 0.2.1 → 0.2.3

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 (42) hide show
  1. package/dist/esm/authConfig.mjs +1 -0
  2. package/dist/esm/authConfig.mjs.map +2 -2
  3. package/dist/esm/hooks/useKeycloak/index.mjs.map +1 -1
  4. package/dist/esm/hooks/useKeycloak/useKeycloak.mjs.map +1 -1
  5. package/dist/esm/provider/afterAuth.mjs +21 -7
  6. package/dist/esm/provider/afterAuth.mjs.map +2 -2
  7. package/dist/esm/provider/keycloakProvider.mjs +45 -7
  8. package/dist/esm/provider/keycloakProvider.mjs.map +2 -2
  9. package/dist/esm/state/index.mjs +3 -2
  10. package/dist/esm/state/index.mjs.map +2 -2
  11. package/dist/jsx/authConfig.mjs +1 -0
  12. package/dist/jsx/authConfig.mjs.map +2 -2
  13. package/dist/jsx/hooks/useKeycloak/index.mjs.map +1 -1
  14. package/dist/jsx/hooks/useKeycloak/useKeycloak.mjs.map +1 -1
  15. package/dist/jsx/provider/afterAuth.mjs +21 -7
  16. package/dist/jsx/provider/afterAuth.mjs.map +2 -2
  17. package/dist/jsx/provider/keycloakProvider.mjs +45 -5
  18. package/dist/jsx/provider/keycloakProvider.mjs.map +2 -2
  19. package/dist/jsx/state/index.mjs +3 -2
  20. package/dist/jsx/state/index.mjs.map +2 -2
  21. package/dist/lib/authConfig.d.ts +2 -1
  22. package/dist/lib/authConfig.js +1 -0
  23. package/dist/lib/authConfig.js.map +2 -2
  24. package/dist/lib/hooks/useKeycloak/index.d.ts +2 -1
  25. package/dist/lib/hooks/useKeycloak/index.js.map +1 -1
  26. package/dist/lib/hooks/useKeycloak/useKeycloak.d.ts +1 -1
  27. package/dist/lib/hooks/useKeycloak/useKeycloak.js.map +1 -1
  28. package/dist/lib/provider/afterAuth.js +21 -7
  29. package/dist/lib/provider/afterAuth.js.map +2 -2
  30. package/dist/lib/provider/keycloakProvider.js +49 -9
  31. package/dist/lib/provider/keycloakProvider.js.map +3 -3
  32. package/dist/lib/state/index.d.ts +5 -3
  33. package/dist/lib/state/index.js +3 -2
  34. package/dist/lib/state/index.js.map +2 -2
  35. package/dist/lib/tsconfig.build.tsbuildinfo +1 -1
  36. package/package.json +1 -1
  37. package/src/authConfig.ts +3 -1
  38. package/src/hooks/useKeycloak/index.ts +2 -1
  39. package/src/hooks/useKeycloak/useKeycloak.ts +1 -1
  40. package/src/provider/afterAuth.tsx +20 -7
  41. package/src/provider/keycloakProvider.tsx +42 -5
  42. package/src/state/index.ts +3 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/keycloak",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "keycloak client for multiplatform.one ecosystem",
5
5
  "main": "dist/lib",
6
6
  "module": "dist/esm",
package/src/authConfig.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * File Created: 08-11-2022 09:21:15
5
5
  * Author: Clay Risser
6
6
  * -----
7
- * Last Modified: 25-11-2022 10:29:29
7
+ * Last Modified: 17-04-2023 22:55:41
8
8
  * Modified By: Clay Risser
9
9
  * -----
10
10
  * Risser Labs LLC (c) Copyright 2021 - 2022
@@ -25,6 +25,7 @@
25
25
  import { createContext } from 'react';
26
26
 
27
27
  export const defaultAuthConfig: AuthConfig = {
28
+ ensureFreshness: true,
28
29
  ssr: true,
29
30
  };
30
31
 
@@ -32,6 +33,7 @@ export const AuthConfigContext = createContext<AuthConfig>(defaultAuthConfig);
32
33
 
33
34
  export interface AuthConfig {
34
35
  debug?: boolean;
36
+ ensureFreshness?: boolean;
35
37
  loginRoute?: string;
36
38
  messageHandlerKeys?: string[];
37
39
  ssr?: boolean;
@@ -4,7 +4,7 @@
4
4
  * File Created: 08-11-2022 14:10:44
5
5
  * Author: Clay Risser
6
6
  * -----
7
- * Last Modified: 17-04-2023 19:14:28
7
+ * Last Modified: 18-04-2023 00:28:11
8
8
  * Modified By: Clay Risser
9
9
  * -----
10
10
  * Risser Labs LLC (c) Copyright 2021 - 2022
@@ -27,6 +27,7 @@ export * from './useKeycloak';
27
27
 
28
28
  export interface IKeycloak {
29
29
  authenticated?: boolean;
30
+ idToken?: string;
30
31
  realmAccess?: KeycloakRoles;
31
32
  refreshToken?: string;
32
33
  refreshTokenParsed?: KeycloakTokenParsed;
@@ -4,7 +4,7 @@
4
4
  * File Created: 08-11-2022 06:04:59
5
5
  * Author: Clay Risser
6
6
  * -----
7
- * Last Modified: 24-02-2023 06:22:07
7
+ * Last Modified: 18-04-2023 02:57:42
8
8
  * Modified By: Clay Risser
9
9
  * -----
10
10
  * Risser Labs LLC (c) Copyright 2021 - 2022
@@ -36,20 +36,33 @@ const logger = console;
36
36
 
37
37
  export const AfterAuth: FC<AfterAuthProps> = ({ children }: AfterAuthProps) => {
38
38
  const authConfig = useAuthConfig();
39
- const { token, refreshToken, authenticated } = useKeycloak();
39
+ const { token, refreshToken, authenticated, idToken } = useKeycloak();
40
40
  const authState = useAuthState();
41
41
 
42
42
  useEffect(() => {
43
43
  if (!authenticated) return;
44
44
  if (token) {
45
45
  authState.setToken(token);
46
- if (refreshToken) authState.setRefreshToken(refreshToken);
46
+ if (idToken) authState.setIdToken(idToken);
47
+ if (authConfig.ensureFreshness && refreshToken) authState.setRefreshToken(refreshToken);
47
48
  }
48
- }, [token, refreshToken]);
49
+ }, [token, refreshToken, idToken]);
50
+
51
+ useEffect(() => {
52
+ if (authConfig.debug && authState.token) logger.debug('token', authState.token);
53
+ }, [authState.token]);
54
+
55
+ useEffect(() => {
56
+ if (authConfig.debug && authState.idToken) logger.debug('idToken', authState.idToken);
57
+ }, [authState.idToken]);
58
+
59
+ useEffect(() => {
60
+ if (authConfig.debug && authState.refreshToken) logger.debug(authState.refreshToken);
61
+ }, [authState.refreshToken]);
62
+
63
+ useEffect(() => {
64
+ if (authConfig.debug) logger.debug('authenticated', authenticated);
65
+ }, [authenticated]);
49
66
 
50
- if (authConfig.debug) {
51
- logger.debug('authenticated', authenticated);
52
- logger.debug('token', token);
53
- }
54
67
  return <>{children}</>;
55
68
  };
@@ -58,15 +58,20 @@ export const KeycloakProvider: FC<KeycloakProviderProps> = ({
58
58
  const LoadingComponent = loadingComponent || (() => <>{debug ? 'authenticating' : null}</>);
59
59
  const { query } = MultiPlatform.isNext ? useRouter() : { query: {} };
60
60
  const authConfig = useAuthConfig();
61
+ const [idToken, setIdToken] = useState<string | boolean>(
62
+ ('idToken' in query && (query.idToken?.toString() || true)) || authState.idToken || false,
63
+ );
61
64
  const [token, setToken] = useState<string | boolean>(
62
65
  ('token' in query && (query.token?.toString() || true)) || authState.token || false,
63
66
  );
64
67
  const [refreshToken, setRefreshToken] = useState<string | boolean>(
65
- ('refreshToken' in query && (query.refreshToken?.toString() || true)) || authState.refreshToken || false,
68
+ (authConfig.ensureFreshness &&
69
+ (('refreshToken' in query && (query.refreshToken?.toString() || true)) || authState.refreshToken)) ||
70
+ false,
66
71
  );
67
72
 
68
73
  useEffect(() => {
69
- if (token !== true && refreshToken !== true) return;
74
+ if (token !== true && refreshToken !== true && idToken !== true) return;
70
75
  if (debug) logger.debug('post message', { type: 'LOADED' });
71
76
  (authConfig.messageHandlerKeys || []).forEach((key: string) => {
72
77
  window?.webkit?.messageHandlers?.[key]?.postMessage(JSON.stringify({ type: 'LOADED' }));
@@ -92,11 +97,41 @@ export const KeycloakProvider: FC<KeycloakProviderProps> = ({
92
97
  setToken(message.payload);
93
98
  }
94
99
  };
95
- if (debug)
100
+ if (debug) {
96
101
  logger.debug('listening for message', {
97
102
  type: 'TOKEN',
98
103
  payload: '<some_token>',
99
104
  });
105
+ }
106
+ window.addEventListener('message', messageCallback);
107
+ return () => {
108
+ window.removeEventListener('message', messageCallback);
109
+ };
110
+ }, []);
111
+
112
+ useEffect(() => {
113
+ if (idToken !== true) return;
114
+ const messageCallback = (e: MessageEvent<any>) => {
115
+ let data = e?.data;
116
+ if (typeof data === 'string') {
117
+ try {
118
+ data = JSON.parse(data);
119
+ } catch (err) {}
120
+ }
121
+ if (debug) logger.debug('received message', data);
122
+ const message: MessageSchema = data;
123
+ if (!message.type) return;
124
+ if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {
125
+ if (debug) logger.debug('setting id token', message.payload);
126
+ setIdToken(message.payload);
127
+ }
128
+ };
129
+ if (debug) {
130
+ logger.debug('listening for message', {
131
+ type: 'ID_TOKEN',
132
+ payload: '<some_id_token>',
133
+ });
134
+ }
100
135
  window.addEventListener('message', messageCallback);
101
136
  return () => {
102
137
  window.removeEventListener('message', messageCallback);
@@ -120,11 +155,12 @@ export const KeycloakProvider: FC<KeycloakProviderProps> = ({
120
155
  setRefreshToken(message.payload);
121
156
  }
122
157
  };
123
- if (debug)
158
+ if (debug) {
124
159
  logger.debug('listening for message', {
125
160
  type: 'REFRESH_TOKEN',
126
161
  payload: '<some_refresh_token>',
127
162
  });
163
+ }
128
164
  window.addEventListener('message', messageCallback);
129
165
  return () => {
130
166
  window.removeEventListener('message', messageCallback);
@@ -147,6 +183,7 @@ export const KeycloakProvider: FC<KeycloakProviderProps> = ({
147
183
  ...defaultKeycloakInitOptions,
148
184
  ...keycloakInitOptions,
149
185
  };
186
+ if (idToken && typeof idToken === 'string') initOptions.idToken = idToken;
150
187
  if (token && typeof token === 'string') {
151
188
  initOptions.token = token;
152
189
  if (refreshToken && typeof refreshToken === 'string') initOptions.refreshToken = refreshToken;
@@ -154,7 +191,7 @@ export const KeycloakProvider: FC<KeycloakProviderProps> = ({
154
191
  initOptions.onLoad = undefined;
155
192
  }
156
193
  return initOptions;
157
- }, [keycloakInitOptions, token, refreshToken]);
194
+ }, [keycloakInitOptions, token, refreshToken, idToken]);
158
195
 
159
196
  if (token === true || refreshToken === true) return <LoadingComponent />;
160
197
  if (cookies && authConfig.ssr) {
@@ -4,7 +4,7 @@
4
4
  * File Created: 22-11-2022 17:40:53
5
5
  * Author: Clay Risser
6
6
  * -----
7
- * Last Modified: 24-02-2023 06:26:51
7
+ * Last Modified: 18-04-2023 00:27:22
8
8
  * Modified By: Clay Risser
9
9
  * -----
10
10
  * Risser Labs LLC (c) Copyright 2021 - 2022
@@ -27,8 +27,9 @@ import { createStateStore } from 'multiplatform.one/zustand';
27
27
  const { useStore } = createStateStore(
28
28
  'auth',
29
29
  {
30
- token: '',
30
+ idToken: '',
31
31
  refreshToken: '',
32
+ token: '',
32
33
  },
33
34
  undefined,
34
35
  { persist: true },