@multiplatform.one/keycloak 0.3.1 → 0.3.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.
- package/dist/esm/provider/index.mjs +1 -1
- package/dist/esm/provider/index.mjs.map +2 -2
- package/dist/esm/provider/keycloakProvider.mjs +36 -35
- package/dist/esm/provider/keycloakProvider.mjs.map +2 -2
- package/dist/jsx/provider/index.mjs +1 -1
- package/dist/jsx/provider/index.mjs.map +2 -2
- package/dist/jsx/provider/keycloakProvider.mjs +45 -36
- package/dist/jsx/provider/keycloakProvider.mjs.map +2 -2
- package/dist/lib/provider/index.js +1 -1
- package/dist/lib/provider/index.js.map +2 -2
- package/dist/lib/provider/keycloakProvider.d.ts +0 -1
- package/dist/lib/provider/keycloakProvider.js +46 -38
- package/dist/lib/provider/keycloakProvider.js.map +2 -2
- package/dist/lib/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/provider/index.tsx +1 -1
- package/src/provider/keycloakProvider.tsx +47 -35
package/package.json
CHANGED
package/src/provider/index.tsx
CHANGED
|
@@ -60,16 +60,25 @@ export function KeycloakProvider({
|
|
|
60
60
|
const authState = useAuthState();
|
|
61
61
|
const LoadingComponent = loadingComponent || (() => <>{debug ? 'authenticating' : null}</>);
|
|
62
62
|
const { query } = MultiPlatform.isNext ? useRouter() : { query: {} };
|
|
63
|
+
const [refreshToken, setRefreshToken] = useState<string | boolean>(
|
|
64
|
+
validToken(
|
|
65
|
+
(ensureFreshness &&
|
|
66
|
+
(('refreshToken' in query && (query.refreshToken?.toString() || true)) ||
|
|
67
|
+
(persist && authState.refreshToken))) ||
|
|
68
|
+
false,
|
|
69
|
+
),
|
|
70
|
+
);
|
|
63
71
|
const [idToken, setIdToken] = useState<string | boolean>(
|
|
64
|
-
(
|
|
72
|
+
validToken(
|
|
73
|
+
('idToken' in query && (query.idToken?.toString() || true)) || (persist && authState.idToken) || false,
|
|
74
|
+
refreshToken,
|
|
75
|
+
),
|
|
65
76
|
);
|
|
66
77
|
const [token, setToken] = useState<string | boolean>(
|
|
67
|
-
(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
(('refreshToken' in query && (query.refreshToken?.toString() || true)) || (persist && authState.refreshToken))) ||
|
|
72
|
-
false,
|
|
78
|
+
validToken(
|
|
79
|
+
('token' in query && (query.token?.toString() || true)) || (persist && authState.token) || false,
|
|
80
|
+
refreshToken,
|
|
81
|
+
),
|
|
73
82
|
);
|
|
74
83
|
const explicitToken = 'idToken' in query || 'token' in query || 'refreshToken' in query;
|
|
75
84
|
|
|
@@ -84,15 +93,9 @@ export function KeycloakProvider({
|
|
|
84
93
|
}, []);
|
|
85
94
|
|
|
86
95
|
useEffect(() => {
|
|
87
|
-
if (
|
|
88
|
-
if (typeof refreshToken === 'string' && !isTokenValid(refreshToken)) setRefreshToken(false);
|
|
89
|
-
if (typeof token === 'string' && !isTokenValid(token)) setToken(false);
|
|
90
|
-
}, [idToken, token, refreshToken]);
|
|
91
|
-
|
|
92
|
-
useEffect(() => {
|
|
93
|
-
if (token !== true) return;
|
|
96
|
+
if (refreshToken !== true) return;
|
|
94
97
|
const messageCallback = (e: MessageEvent<any>) => {
|
|
95
|
-
let data = e?.data;
|
|
98
|
+
let data = e?.data || null;
|
|
96
99
|
if (typeof data === 'string') {
|
|
97
100
|
try {
|
|
98
101
|
data = JSON.parse(data);
|
|
@@ -101,15 +104,15 @@ export function KeycloakProvider({
|
|
|
101
104
|
if (debug) logger.debug('received message', data);
|
|
102
105
|
const message: MessageSchema = data;
|
|
103
106
|
if (!message.type) return;
|
|
104
|
-
if (message.type.toUpperCase() === '
|
|
105
|
-
if (debug) logger.debug('setting token', message.payload);
|
|
106
|
-
|
|
107
|
+
if (message.type.toUpperCase() === 'REFRESH_TOKEN' && message.payload) {
|
|
108
|
+
if (debug) logger.debug('setting refresh token', message.payload);
|
|
109
|
+
setRefreshToken(validToken(message.payload));
|
|
107
110
|
}
|
|
108
111
|
};
|
|
109
112
|
if (debug) {
|
|
110
113
|
logger.debug('listening for message', {
|
|
111
|
-
type: '
|
|
112
|
-
payload: '<
|
|
114
|
+
type: 'REFRESH_TOKEN',
|
|
115
|
+
payload: '<some_refresh_token>',
|
|
113
116
|
});
|
|
114
117
|
}
|
|
115
118
|
window.addEventListener('message', messageCallback);
|
|
@@ -119,9 +122,9 @@ export function KeycloakProvider({
|
|
|
119
122
|
}, []);
|
|
120
123
|
|
|
121
124
|
useEffect(() => {
|
|
122
|
-
if (
|
|
125
|
+
if (token !== true) return;
|
|
123
126
|
const messageCallback = (e: MessageEvent<any>) => {
|
|
124
|
-
let data = e?.data;
|
|
127
|
+
let data = e?.data || null;
|
|
125
128
|
if (typeof data === 'string') {
|
|
126
129
|
try {
|
|
127
130
|
data = JSON.parse(data);
|
|
@@ -130,15 +133,15 @@ export function KeycloakProvider({
|
|
|
130
133
|
if (debug) logger.debug('received message', data);
|
|
131
134
|
const message: MessageSchema = data;
|
|
132
135
|
if (!message.type) return;
|
|
133
|
-
if (message.type.toUpperCase() === '
|
|
134
|
-
if (debug) logger.debug('setting
|
|
135
|
-
|
|
136
|
+
if (message.type.toUpperCase() === 'TOKEN' && message.payload) {
|
|
137
|
+
if (debug) logger.debug('setting token', message.payload);
|
|
138
|
+
setToken(validToken(message.payload, refreshToken));
|
|
136
139
|
}
|
|
137
140
|
};
|
|
138
141
|
if (debug) {
|
|
139
142
|
logger.debug('listening for message', {
|
|
140
|
-
type: '
|
|
141
|
-
payload: '<
|
|
143
|
+
type: 'TOKEN',
|
|
144
|
+
payload: '<some_token>',
|
|
142
145
|
});
|
|
143
146
|
}
|
|
144
147
|
window.addEventListener('message', messageCallback);
|
|
@@ -148,9 +151,9 @@ export function KeycloakProvider({
|
|
|
148
151
|
}, []);
|
|
149
152
|
|
|
150
153
|
useEffect(() => {
|
|
151
|
-
if (
|
|
154
|
+
if (idToken !== true) return;
|
|
152
155
|
const messageCallback = (e: MessageEvent<any>) => {
|
|
153
|
-
let data = e?.data;
|
|
156
|
+
let data = e?.data || null;
|
|
154
157
|
if (typeof data === 'string') {
|
|
155
158
|
try {
|
|
156
159
|
data = JSON.parse(data);
|
|
@@ -159,15 +162,15 @@ export function KeycloakProvider({
|
|
|
159
162
|
if (debug) logger.debug('received message', data);
|
|
160
163
|
const message: MessageSchema = data;
|
|
161
164
|
if (!message.type) return;
|
|
162
|
-
if (message.type.toUpperCase() === '
|
|
163
|
-
if (debug) logger.debug('setting
|
|
164
|
-
|
|
165
|
+
if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {
|
|
166
|
+
if (debug) logger.debug('setting id token', message.payload);
|
|
167
|
+
setIdToken(validToken(message.payload, refreshToken));
|
|
165
168
|
}
|
|
166
169
|
};
|
|
167
170
|
if (debug) {
|
|
168
171
|
logger.debug('listening for message', {
|
|
169
|
-
type: '
|
|
170
|
-
payload: '<
|
|
172
|
+
type: 'ID_TOKEN',
|
|
173
|
+
payload: '<some_id_token>',
|
|
171
174
|
});
|
|
172
175
|
}
|
|
173
176
|
window.addEventListener('message', messageCallback);
|
|
@@ -253,7 +256,16 @@ export function KeycloakProvider({
|
|
|
253
256
|
);
|
|
254
257
|
}
|
|
255
258
|
|
|
256
|
-
|
|
259
|
+
function validToken(token: string | boolean, refreshToken?: string | boolean) {
|
|
260
|
+
if (typeof token !== 'string') return token;
|
|
261
|
+
if (refreshToken) {
|
|
262
|
+
if (refreshToken === true || isTokenValid(refreshToken)) return token;
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
return isTokenValid(token) ? token : false;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function isTokenValid(token: string) {
|
|
257
269
|
try {
|
|
258
270
|
const { exp } = JSON.parse(Buffer.from(token.split('.')?.[1] || '', 'base64').toString() || '{}');
|
|
259
271
|
return Math.floor(Date.now() / 1000) <= exp;
|