@multiplatform.one/keycloak 0.2.2 → 0.2.4

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 (34) hide show
  1. package/dist/esm/hooks/useKeycloak/index.mjs.map +1 -1
  2. package/dist/esm/hooks/useKeycloak/useKeycloak.mjs.map +1 -1
  3. package/dist/esm/provider/afterAuth.mjs +20 -6
  4. package/dist/esm/provider/afterAuth.mjs.map +2 -2
  5. package/dist/esm/provider/keycloakProvider.mjs +50 -9
  6. package/dist/esm/provider/keycloakProvider.mjs.map +2 -2
  7. package/dist/esm/state/index.mjs +3 -2
  8. package/dist/esm/state/index.mjs.map +2 -2
  9. package/dist/jsx/hooks/useKeycloak/index.mjs.map +1 -1
  10. package/dist/jsx/hooks/useKeycloak/useKeycloak.mjs.map +1 -1
  11. package/dist/jsx/provider/afterAuth.mjs +20 -6
  12. package/dist/jsx/provider/afterAuth.mjs.map +2 -2
  13. package/dist/jsx/provider/keycloakProvider.mjs +50 -7
  14. package/dist/jsx/provider/keycloakProvider.mjs.map +2 -2
  15. package/dist/jsx/state/index.mjs +3 -2
  16. package/dist/jsx/state/index.mjs.map +2 -2
  17. package/dist/lib/hooks/useKeycloak/index.d.ts +2 -1
  18. package/dist/lib/hooks/useKeycloak/index.js.map +1 -1
  19. package/dist/lib/hooks/useKeycloak/useKeycloak.d.ts +1 -1
  20. package/dist/lib/hooks/useKeycloak/useKeycloak.js.map +1 -1
  21. package/dist/lib/provider/afterAuth.js +20 -6
  22. package/dist/lib/provider/afterAuth.js.map +2 -2
  23. package/dist/lib/provider/keycloakProvider.js +54 -11
  24. package/dist/lib/provider/keycloakProvider.js.map +3 -3
  25. package/dist/lib/state/index.d.ts +5 -3
  26. package/dist/lib/state/index.js +3 -2
  27. package/dist/lib/state/index.js.map +2 -2
  28. package/dist/lib/tsconfig.build.tsbuildinfo +1 -1
  29. package/package.json +1 -1
  30. package/src/hooks/useKeycloak/index.ts +2 -1
  31. package/src/hooks/useKeycloak/useKeycloak.ts +1 -1
  32. package/src/provider/afterAuth.tsx +19 -6
  33. package/src/provider/keycloakProvider.tsx +47 -7
  34. 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.2",
3
+ "version": "0.2.4",
4
4
  "description": "keycloak client for multiplatform.one ecosystem",
5
5
  "main": "dist/lib",
6
6
  "module": "dist/esm",
@@ -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 04:08:56
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 (idToken) authState.setIdToken(idToken);
46
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,21 @@ 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
  );
72
+ const explicitToken = 'idToken' in query || 'token' in query || 'refreshToken' in query;
67
73
 
68
74
  useEffect(() => {
69
- if (token !== true && refreshToken !== true) return;
75
+ if (token !== true && refreshToken !== true && idToken !== true) return;
70
76
  if (debug) logger.debug('post message', { type: 'LOADED' });
71
77
  (authConfig.messageHandlerKeys || []).forEach((key: string) => {
72
78
  window?.webkit?.messageHandlers?.[key]?.postMessage(JSON.stringify({ type: 'LOADED' }));
@@ -92,11 +98,41 @@ export const KeycloakProvider: FC<KeycloakProviderProps> = ({
92
98
  setToken(message.payload);
93
99
  }
94
100
  };
95
- if (debug)
101
+ if (debug) {
96
102
  logger.debug('listening for message', {
97
103
  type: 'TOKEN',
98
104
  payload: '<some_token>',
99
105
  });
106
+ }
107
+ window.addEventListener('message', messageCallback);
108
+ return () => {
109
+ window.removeEventListener('message', messageCallback);
110
+ };
111
+ }, []);
112
+
113
+ useEffect(() => {
114
+ if (idToken !== true) return;
115
+ const messageCallback = (e: MessageEvent<any>) => {
116
+ let data = e?.data;
117
+ if (typeof data === 'string') {
118
+ try {
119
+ data = JSON.parse(data);
120
+ } catch (err) {}
121
+ }
122
+ if (debug) logger.debug('received message', data);
123
+ const message: MessageSchema = data;
124
+ if (!message.type) return;
125
+ if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {
126
+ if (debug) logger.debug('setting id token', message.payload);
127
+ setIdToken(message.payload);
128
+ }
129
+ };
130
+ if (debug) {
131
+ logger.debug('listening for message', {
132
+ type: 'ID_TOKEN',
133
+ payload: '<some_id_token>',
134
+ });
135
+ }
100
136
  window.addEventListener('message', messageCallback);
101
137
  return () => {
102
138
  window.removeEventListener('message', messageCallback);
@@ -120,11 +156,12 @@ export const KeycloakProvider: FC<KeycloakProviderProps> = ({
120
156
  setRefreshToken(message.payload);
121
157
  }
122
158
  };
123
- if (debug)
159
+ if (debug) {
124
160
  logger.debug('listening for message', {
125
161
  type: 'REFRESH_TOKEN',
126
162
  payload: '<some_refresh_token>',
127
163
  });
164
+ }
128
165
  window.addEventListener('message', messageCallback);
129
166
  return () => {
130
167
  window.removeEventListener('message', messageCallback);
@@ -149,12 +186,15 @@ export const KeycloakProvider: FC<KeycloakProviderProps> = ({
149
186
  };
150
187
  if (token && typeof token === 'string') {
151
188
  initOptions.token = token;
189
+ if (idToken && typeof idToken === 'string') initOptions.idToken = idToken;
152
190
  if (refreshToken && typeof refreshToken === 'string') initOptions.refreshToken = refreshToken;
153
- initOptions.checkLoginIframe = false;
154
- initOptions.onLoad = undefined;
191
+ if (explicitToken) {
192
+ initOptions.checkLoginIframe = false;
193
+ initOptions.onLoad = undefined;
194
+ }
155
195
  }
156
196
  return initOptions;
157
- }, [keycloakInitOptions, token, refreshToken]);
197
+ }, [keycloakInitOptions, token, refreshToken, idToken]);
158
198
 
159
199
  if (token === true || refreshToken === true) return <LoadingComponent />;
160
200
  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 },