@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.
- package/dist/esm/hooks/useKeycloak/index.mjs.map +1 -1
- package/dist/esm/hooks/useKeycloak/useKeycloak.mjs.map +1 -1
- package/dist/esm/provider/afterAuth.mjs +20 -6
- package/dist/esm/provider/afterAuth.mjs.map +2 -2
- package/dist/esm/provider/keycloakProvider.mjs +50 -9
- package/dist/esm/provider/keycloakProvider.mjs.map +2 -2
- package/dist/esm/state/index.mjs +3 -2
- package/dist/esm/state/index.mjs.map +2 -2
- package/dist/jsx/hooks/useKeycloak/index.mjs.map +1 -1
- package/dist/jsx/hooks/useKeycloak/useKeycloak.mjs.map +1 -1
- package/dist/jsx/provider/afterAuth.mjs +20 -6
- package/dist/jsx/provider/afterAuth.mjs.map +2 -2
- package/dist/jsx/provider/keycloakProvider.mjs +50 -7
- package/dist/jsx/provider/keycloakProvider.mjs.map +2 -2
- package/dist/jsx/state/index.mjs +3 -2
- package/dist/jsx/state/index.mjs.map +2 -2
- package/dist/lib/hooks/useKeycloak/index.d.ts +2 -1
- package/dist/lib/hooks/useKeycloak/index.js.map +1 -1
- package/dist/lib/hooks/useKeycloak/useKeycloak.d.ts +1 -1
- package/dist/lib/hooks/useKeycloak/useKeycloak.js.map +1 -1
- package/dist/lib/provider/afterAuth.js +20 -6
- package/dist/lib/provider/afterAuth.js.map +2 -2
- package/dist/lib/provider/keycloakProvider.js +54 -11
- package/dist/lib/provider/keycloakProvider.js.map +3 -3
- package/dist/lib/state/index.d.ts +5 -3
- package/dist/lib/state/index.js +3 -2
- package/dist/lib/state/index.js.map +2 -2
- package/dist/lib/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/hooks/useKeycloak/index.ts +2 -1
- package/src/hooks/useKeycloak/useKeycloak.ts +1 -1
- package/src/provider/afterAuth.tsx +19 -6
- package/src/provider/keycloakProvider.tsx +47 -7
- package/src/state/index.ts +3 -2
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* File Created: 08-11-2022 14:10:44
|
|
5
5
|
* Author: Clay Risser
|
|
6
6
|
* -----
|
|
7
|
-
* Last Modified:
|
|
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;
|
|
@@ -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
|
-
(
|
|
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
|
-
|
|
154
|
-
|
|
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) {
|
package/src/state/index.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* File Created: 22-11-2022 17:40:53
|
|
5
5
|
* Author: Clay Risser
|
|
6
6
|
* -----
|
|
7
|
-
* Last Modified:
|
|
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
|
-
|
|
30
|
+
idToken: '',
|
|
31
31
|
refreshToken: '',
|
|
32
|
+
token: '',
|
|
32
33
|
},
|
|
33
34
|
undefined,
|
|
34
35
|
{ persist: true },
|