@multiplatform.one/keycloak 0.3.4 → 0.3.6
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/keycloakProvider.mjs +6 -5
- package/dist/esm/provider/keycloakProvider.mjs.map +2 -2
- package/dist/jsx/provider/keycloakProvider.mjs +6 -5
- package/dist/jsx/provider/keycloakProvider.mjs.map +2 -2
- package/dist/lib/provider/keycloakProvider.js +6 -5
- 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/keycloakProvider.tsx +6 -5
|
@@ -167,7 +167,7 @@ function KeycloakProvider(_ref) {
|
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
if (debug)
|
|
170
|
-
logger.debug("received message", data);
|
|
170
|
+
logger.debug("received message", JSON.stringify(data));
|
|
171
171
|
var message = data;
|
|
172
172
|
if (!message.type)
|
|
173
173
|
return;
|
|
@@ -200,7 +200,7 @@ function KeycloakProvider(_ref) {
|
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
if (debug)
|
|
203
|
-
logger.debug("received message", data);
|
|
203
|
+
logger.debug("received message", JSON.stringify(data));
|
|
204
204
|
var message = data;
|
|
205
205
|
if (!message.type)
|
|
206
206
|
return;
|
|
@@ -233,7 +233,7 @@ function KeycloakProvider(_ref) {
|
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
235
|
if (debug)
|
|
236
|
-
logger.debug("received message", data);
|
|
236
|
+
logger.debug("received message", JSON.stringify(data));
|
|
237
237
|
var message = data;
|
|
238
238
|
if (!message.type)
|
|
239
239
|
return;
|
|
@@ -271,7 +271,7 @@ function KeycloakProvider(_ref) {
|
|
|
271
271
|
realm: keycloakConfig.realm,
|
|
272
272
|
clientId: keycloakConfig.clientId
|
|
273
273
|
});
|
|
274
|
-
}, []);
|
|
274
|
+
}, [keycloakInitOptions, token, refreshToken, idToken]);
|
|
275
275
|
var initOptions = useMemo(function() {
|
|
276
276
|
var initOptions2 = _objectSpread(_objectSpread({}, defaultKeycloakInitOptions), keycloakInitOptions);
|
|
277
277
|
if (debug)
|
|
@@ -284,6 +284,7 @@ function KeycloakProvider(_ref) {
|
|
|
284
284
|
initOptions2.refreshToken = refreshToken;
|
|
285
285
|
if (isPassedInToken) {
|
|
286
286
|
initOptions2.checkLoginIframe = false;
|
|
287
|
+
initOptions2.flow = "implicit";
|
|
287
288
|
initOptions2.onLoad = void 0;
|
|
288
289
|
}
|
|
289
290
|
}
|
|
@@ -291,7 +292,7 @@ function KeycloakProvider(_ref) {
|
|
|
291
292
|
}, [keycloakInitOptions, token, refreshToken, idToken]);
|
|
292
293
|
if (token === true || idToken === true || refreshToken === true)
|
|
293
294
|
return /* @__PURE__ */ React.createElement(LoadingComponent, null);
|
|
294
|
-
if (cookies && ssr) {
|
|
295
|
+
if (!isPassedInToken && cookies && ssr) {
|
|
295
296
|
return (
|
|
296
297
|
// @ts-ignore
|
|
297
298
|
/* @__PURE__ */ React.createElement(SSRKeycloakProvider, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/provider/keycloakProvider.tsx"],
|
|
4
|
-
"sourcesContent": ["function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * File: /auth/provider/keycloakProvider.tsx\n * Project: app\n * File Created: 08-11-2022 03:12:43\n * Author: Clay Risser\n * -----\n * Last Modified: 22-11-2022 18:07:46\n * Modified By: Clay Risser\n * -----\n * Risser Labs LLC (c) Copyright 2021 - 2022\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Keycloak from '@bitspur/keycloak-js';\nimport React, { useMemo, useEffect, useState, useCallback } from 'react';\nimport { AfterAuth } from \"./afterAuth.mjs\";\nimport { MultiPlatform } from 'multiplatform.one';\nimport { ReactKeycloakProvider } from '@bitspur/react-keycloak-web';\nimport { SSRKeycloakProvider, SSRCookies } from '@bitspur/react-keycloak-ssr';\nimport { useAuthConfig } from \"../hooks/useAuthConfig.mjs\";\nimport { useAuthState } from \"../state/index.mjs\";\nimport { useIsPassedInToken } from \"../hooks/index.mjs\";\nimport { useRouter } from 'next/router';\nvar logger = console;\nexport function KeycloakProvider(_ref) {\n var _query$refreshToken, _query$idToken, _query$token;\n var children = _ref.children,\n cookies = _ref.cookies,\n keycloakConfig = _ref.keycloakConfig,\n keycloakInitOptions = _ref.keycloakInitOptions,\n loadingComponent = _ref.loadingComponent,\n onEvent = _ref.onEvent,\n onTokens = _ref.onTokens;\n var _useAuthConfig = useAuthConfig(),\n debug = _useAuthConfig.debug,\n ensureFreshness = _useAuthConfig.ensureFreshness,\n persist = _useAuthConfig.persist,\n messageHandlerKeys = _useAuthConfig.messageHandlerKeys,\n ssr = _useAuthConfig.ssr;\n var authState = useAuthState();\n var LoadingComponent = loadingComponent || function () {\n return /*#__PURE__*/React.createElement(React.Fragment, null, debug ? 'authenticating' : null);\n };\n var _ref2 = MultiPlatform.isNext ? useRouter() : {\n query: {}\n },\n query = _ref2.query;\n var _useState = useState(validToken(ensureFreshness && ('refreshToken' in query && (((_query$refreshToken = query.refreshToken) === null || _query$refreshToken === void 0 ? void 0 : _query$refreshToken.toString()) || true) || persist && authState.refreshToken) || false)),\n _useState2 = _slicedToArray(_useState, 2),\n refreshToken = _useState2[0],\n setRefreshToken = _useState2[1];\n var _useState3 = useState(validToken('idToken' in query && (((_query$idToken = query.idToken) === null || _query$idToken === void 0 ? void 0 : _query$idToken.toString()) || true) || persist && authState.idToken || false, refreshToken)),\n _useState4 = _slicedToArray(_useState3, 2),\n idToken = _useState4[0],\n setIdToken = _useState4[1];\n var _useState5 = useState(validToken('token' in query && (((_query$token = query.token) === null || _query$token === void 0 ? void 0 : _query$token.toString()) || true) || persist && authState.token || false, refreshToken)),\n _useState6 = _slicedToArray(_useState5, 2),\n token = _useState6[0],\n setToken = _useState6[1];\n var isPassedInToken = useIsPassedInToken();\n useEffect(function () {\n var _window2, _window2$ReactNativeW, _window3, _window3$parent;\n if (token !== true && refreshToken !== true && idToken !== true) return;\n if (debug) logger.debug('post message', {\n type: 'LOADED'\n });\n (messageHandlerKeys || []).forEach(function (key) {\n var _window, _window$webkit, _window$webkit$messag, _window$webkit$messag2;\n (_window = window) === null || _window === void 0 ? void 0 : (_window$webkit = _window.webkit) === null || _window$webkit === void 0 ? void 0 : (_window$webkit$messag = _window$webkit.messageHandlers) === null || _window$webkit$messag === void 0 ? void 0 : (_window$webkit$messag2 = _window$webkit$messag[key]) === null || _window$webkit$messag2 === void 0 ? void 0 : _window$webkit$messag2.postMessage(JSON.stringify({\n type: 'LOADED'\n }));\n });\n (_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$ReactNativeW = _window2.ReactNativeWebView) === null || _window2$ReactNativeW === void 0 ? void 0 : _window2$ReactNativeW.postMessage(JSON.stringify({\n type: 'LOADED'\n }));\n (_window3 = window) === null || _window3 === void 0 ? void 0 : (_window3$parent = _window3.parent) === null || _window3$parent === void 0 ? void 0 : _window3$parent.postMessage(JSON.stringify({\n type: 'LOADED'\n }));\n }, []);\n useEffect(function () {\n if (refreshToken !== true) return;\n var messageCallback = function messageCallback(e) {\n var data = (e === null || e === void 0 ? void 0 : e.data) || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n var message = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'REFRESH_TOKEN' && message.payload) {\n if (debug) logger.debug('setting refresh token', message.payload);\n setRefreshToken(validToken(message.payload));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'REFRESH_TOKEN',\n payload: '<some_refresh_token>'\n });\n }\n window.addEventListener('message', messageCallback);\n return function () {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n useEffect(function () {\n if (token !== true) return;\n var messageCallback = function messageCallback(e) {\n var data = (e === null || e === void 0 ? void 0 : e.data) || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n var message = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'TOKEN' && message.payload) {\n if (debug) logger.debug('setting token', message.payload);\n setToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'TOKEN',\n payload: '<some_token>'\n });\n }\n window.addEventListener('message', messageCallback);\n return function () {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n useEffect(function () {\n if (idToken !== true) return;\n var messageCallback = function messageCallback(e) {\n var data = (e === null || e === void 0 ? void 0 : e.data) || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n var message = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {\n if (debug) logger.debug('setting id token', message.payload);\n setIdToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'ID_TOKEN',\n payload: '<some_id_token>'\n });\n }\n window.addEventListener('message', messageCallback);\n return function () {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n var handleEvent = useCallback(function (eventType, error) {\n if (error) {\n if (typeof error === 'string') throw new Error(error);\n var err = new Error(error.error);\n err.errorDescription = error.error_description;\n throw err;\n }\n if (onEvent) onEvent(eventType, error);\n }, []);\n var keycloak = useMemo(function () {\n return typeof window !== 'undefined' && new Keycloak({\n url: keycloakConfig.url,\n realm: keycloakConfig.realm,\n clientId: keycloakConfig.clientId\n });\n }, []);\n var initOptions = useMemo(function () {\n var initOptions = _objectSpread(_objectSpread({}, defaultKeycloakInitOptions), keycloakInitOptions);\n if (debug) initOptions.enableLogging = true;\n if (token && typeof token === 'string') {\n initOptions.token = token;\n if (idToken && typeof idToken === 'string') initOptions.idToken = idToken;\n if (refreshToken && typeof refreshToken === 'string') initOptions.refreshToken = refreshToken;\n if (isPassedInToken) {\n initOptions.checkLoginIframe = false;\n initOptions.onLoad = undefined;\n }\n }\n return initOptions;\n }, [keycloakInitOptions, token, refreshToken, idToken]);\n if (token === true || idToken === true || refreshToken === true) return /*#__PURE__*/React.createElement(LoadingComponent, null);\n if (cookies && ssr) {\n return (\n /*#__PURE__*/\n // @ts-ignore\n React.createElement(SSRKeycloakProvider, {\n LoadingComponent: /*#__PURE__*/React.createElement(LoadingComponent, null)\n // keycloak-js already handles refreshing tokens\n ,\n autoRefreshToken: false,\n initOptions: initOptions,\n onEvent: handleEvent,\n onTokens: onTokens,\n persistor: SSRCookies(cookies),\n keycloakConfig: {\n clientId: keycloakConfig.clientId,\n realm: keycloakConfig.realm,\n url: keycloakConfig.url\n }\n }, /*#__PURE__*/React.createElement(AfterAuth, null, children))\n );\n }\n if (!keycloak) return /*#__PURE__*/React.createElement(React.Fragment, null, children);\n return /*#__PURE__*/React.createElement(ReactKeycloakProvider, {\n LoadingComponent: /*#__PURE__*/React.createElement(LoadingComponent, null),\n authClient: keycloak\n // keycloak-js already handles refreshing tokens\n ,\n autoRefreshToken: false,\n initOptions: initOptions,\n onEvent: handleEvent,\n onTokens: onTokens\n }, /*#__PURE__*/React.createElement(AfterAuth, null, children));\n}\nfunction validToken(token, refreshToken) {\n if (typeof token !== 'string') return token;\n if (refreshToken) {\n if (refreshToken === true || isTokenValid(refreshToken)) return token;\n return false;\n }\n return isTokenValid(token) ? token : false;\n}\nfunction isTokenValid(token) {\n try {\n var _token$split;\n var _JSON$parse = JSON.parse(Buffer.from(((_token$split = token.split('.')) === null || _token$split === void 0 ? void 0 : _token$split[1]) || '', 'base64').toString() || '{}'),\n exp = _JSON$parse.exp;\n return Math.floor(Date.now() / 1000) <= exp;\n } catch (err) {\n if (err instanceof SyntaxError) return false;\n throw err;\n }\n}\nexport var defaultKeycloakInitOptions = {\n checkLoginIframe: true,\n checkLoginIframeInterval: 5,\n enableLogging: false,\n onLoad: 'check-sso',\n pkceMethod: 'S256'\n};"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * File: /auth/provider/keycloakProvider.tsx\n * Project: app\n * File Created: 08-11-2022 03:12:43\n * Author: Clay Risser\n * -----\n * Last Modified: 22-11-2022 18:07:46\n * Modified By: Clay Risser\n * -----\n * Risser Labs LLC (c) Copyright 2021 - 2022\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Keycloak from '@bitspur/keycloak-js';\nimport React, { useMemo, useEffect, useState, useCallback } from 'react';\nimport { AfterAuth } from \"./afterAuth.mjs\";\nimport { MultiPlatform } from 'multiplatform.one';\nimport { ReactKeycloakProvider } from '@bitspur/react-keycloak-web';\nimport { SSRKeycloakProvider, SSRCookies } from '@bitspur/react-keycloak-ssr';\nimport { useAuthConfig } from \"../hooks/useAuthConfig.mjs\";\nimport { useAuthState } from \"../state/index.mjs\";\nimport { useIsPassedInToken } from \"../hooks/index.mjs\";\nimport { useRouter } from 'next/router';\nvar logger = console;\nexport function KeycloakProvider(_ref) {\n var _query$refreshToken, _query$idToken, _query$token;\n var children = _ref.children,\n cookies = _ref.cookies,\n keycloakConfig = _ref.keycloakConfig,\n keycloakInitOptions = _ref.keycloakInitOptions,\n loadingComponent = _ref.loadingComponent,\n onEvent = _ref.onEvent,\n onTokens = _ref.onTokens;\n var _useAuthConfig = useAuthConfig(),\n debug = _useAuthConfig.debug,\n ensureFreshness = _useAuthConfig.ensureFreshness,\n persist = _useAuthConfig.persist,\n messageHandlerKeys = _useAuthConfig.messageHandlerKeys,\n ssr = _useAuthConfig.ssr;\n var authState = useAuthState();\n var LoadingComponent = loadingComponent || function () {\n return /*#__PURE__*/React.createElement(React.Fragment, null, debug ? 'authenticating' : null);\n };\n var _ref2 = MultiPlatform.isNext ? useRouter() : {\n query: {}\n },\n query = _ref2.query;\n var _useState = useState(validToken(ensureFreshness && ('refreshToken' in query && (((_query$refreshToken = query.refreshToken) === null || _query$refreshToken === void 0 ? void 0 : _query$refreshToken.toString()) || true) || persist && authState.refreshToken) || false)),\n _useState2 = _slicedToArray(_useState, 2),\n refreshToken = _useState2[0],\n setRefreshToken = _useState2[1];\n var _useState3 = useState(validToken('idToken' in query && (((_query$idToken = query.idToken) === null || _query$idToken === void 0 ? void 0 : _query$idToken.toString()) || true) || persist && authState.idToken || false, refreshToken)),\n _useState4 = _slicedToArray(_useState3, 2),\n idToken = _useState4[0],\n setIdToken = _useState4[1];\n var _useState5 = useState(validToken('token' in query && (((_query$token = query.token) === null || _query$token === void 0 ? void 0 : _query$token.toString()) || true) || persist && authState.token || false, refreshToken)),\n _useState6 = _slicedToArray(_useState5, 2),\n token = _useState6[0],\n setToken = _useState6[1];\n var isPassedInToken = useIsPassedInToken();\n useEffect(function () {\n var _window2, _window2$ReactNativeW, _window3, _window3$parent;\n if (token !== true && refreshToken !== true && idToken !== true) return;\n if (debug) logger.debug('post message', {\n type: 'LOADED'\n });\n (messageHandlerKeys || []).forEach(function (key) {\n var _window, _window$webkit, _window$webkit$messag, _window$webkit$messag2;\n (_window = window) === null || _window === void 0 ? void 0 : (_window$webkit = _window.webkit) === null || _window$webkit === void 0 ? void 0 : (_window$webkit$messag = _window$webkit.messageHandlers) === null || _window$webkit$messag === void 0 ? void 0 : (_window$webkit$messag2 = _window$webkit$messag[key]) === null || _window$webkit$messag2 === void 0 ? void 0 : _window$webkit$messag2.postMessage(JSON.stringify({\n type: 'LOADED'\n }));\n });\n (_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$ReactNativeW = _window2.ReactNativeWebView) === null || _window2$ReactNativeW === void 0 ? void 0 : _window2$ReactNativeW.postMessage(JSON.stringify({\n type: 'LOADED'\n }));\n (_window3 = window) === null || _window3 === void 0 ? void 0 : (_window3$parent = _window3.parent) === null || _window3$parent === void 0 ? void 0 : _window3$parent.postMessage(JSON.stringify({\n type: 'LOADED'\n }));\n }, []);\n useEffect(function () {\n if (refreshToken !== true) return;\n var messageCallback = function messageCallback(e) {\n var data = (e === null || e === void 0 ? void 0 : e.data) || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n var message = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'REFRESH_TOKEN' && message.payload) {\n if (debug) logger.debug('setting refresh token', message.payload);\n setRefreshToken(validToken(message.payload));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'REFRESH_TOKEN',\n payload: '<some_refresh_token>'\n });\n }\n window.addEventListener('message', messageCallback);\n return function () {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n useEffect(function () {\n if (token !== true) return;\n var messageCallback = function messageCallback(e) {\n var data = (e === null || e === void 0 ? void 0 : e.data) || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n var message = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'TOKEN' && message.payload) {\n if (debug) logger.debug('setting token', message.payload);\n setToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'TOKEN',\n payload: '<some_token>'\n });\n }\n window.addEventListener('message', messageCallback);\n return function () {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n useEffect(function () {\n if (idToken !== true) return;\n var messageCallback = function messageCallback(e) {\n var data = (e === null || e === void 0 ? void 0 : e.data) || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n var message = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {\n if (debug) logger.debug('setting id token', message.payload);\n setIdToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'ID_TOKEN',\n payload: '<some_id_token>'\n });\n }\n window.addEventListener('message', messageCallback);\n return function () {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n var handleEvent = useCallback(function (eventType, error) {\n if (error) {\n if (typeof error === 'string') throw new Error(error);\n var err = new Error(error.error);\n err.errorDescription = error.error_description;\n throw err;\n }\n if (onEvent) onEvent(eventType, error);\n }, []);\n var keycloak = useMemo(function () {\n return typeof window !== 'undefined' && new Keycloak({\n url: keycloakConfig.url,\n realm: keycloakConfig.realm,\n clientId: keycloakConfig.clientId\n });\n }, [keycloakInitOptions, token, refreshToken, idToken]);\n var initOptions = useMemo(function () {\n var initOptions = _objectSpread(_objectSpread({}, defaultKeycloakInitOptions), keycloakInitOptions);\n if (debug) initOptions.enableLogging = true;\n if (token && typeof token === 'string') {\n initOptions.token = token;\n if (idToken && typeof idToken === 'string') initOptions.idToken = idToken;\n if (refreshToken && typeof refreshToken === 'string') initOptions.refreshToken = refreshToken;\n if (isPassedInToken) {\n initOptions.checkLoginIframe = false;\n initOptions.flow = 'implicit';\n initOptions.onLoad = undefined;\n }\n }\n return initOptions;\n }, [keycloakInitOptions, token, refreshToken, idToken]);\n if (token === true || idToken === true || refreshToken === true) return /*#__PURE__*/React.createElement(LoadingComponent, null);\n if (!isPassedInToken && cookies && ssr) {\n return (\n /*#__PURE__*/\n // @ts-ignore\n React.createElement(SSRKeycloakProvider, {\n LoadingComponent: /*#__PURE__*/React.createElement(LoadingComponent, null)\n // keycloak-js already handles refreshing tokens\n ,\n autoRefreshToken: false,\n initOptions: initOptions,\n onEvent: handleEvent,\n onTokens: onTokens,\n persistor: SSRCookies(cookies),\n keycloakConfig: {\n clientId: keycloakConfig.clientId,\n realm: keycloakConfig.realm,\n url: keycloakConfig.url\n }\n }, /*#__PURE__*/React.createElement(AfterAuth, null, children))\n );\n }\n if (!keycloak) return /*#__PURE__*/React.createElement(React.Fragment, null, children);\n return /*#__PURE__*/React.createElement(ReactKeycloakProvider, {\n LoadingComponent: /*#__PURE__*/React.createElement(LoadingComponent, null),\n authClient: keycloak\n // keycloak-js already handles refreshing tokens\n ,\n autoRefreshToken: false,\n initOptions: initOptions,\n onEvent: handleEvent,\n onTokens: onTokens\n }, /*#__PURE__*/React.createElement(AfterAuth, null, children));\n}\nfunction validToken(token, refreshToken) {\n if (typeof token !== 'string') return token;\n if (refreshToken) {\n if (refreshToken === true || isTokenValid(refreshToken)) return token;\n return false;\n }\n return isTokenValid(token) ? token : false;\n}\nfunction isTokenValid(token) {\n try {\n var _token$split;\n var _JSON$parse = JSON.parse(Buffer.from(((_token$split = token.split('.')) === null || _token$split === void 0 ? void 0 : _token$split[1]) || '', 'base64').toString() || '{}'),\n exp = _JSON$parse.exp;\n return Math.floor(Date.now() / 1000) <= exp;\n } catch (err) {\n if (err instanceof SyntaxError) return false;\n throw err;\n }\n}\nexport var defaultKeycloakInitOptions = {\n checkLoginIframe: true,\n checkLoginIframeInterval: 5,\n enableLogging: false,\n onLoad: 'check-sso',\n pkceMethod: 'S256'\n};"],
|
|
5
|
+
"mappings": "AAAA,SAAS,QAAQ,KAAK;AAAE;AAA2B,SAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,OAAO,WAAW,SAAUA,MAAK;AAAE,WAAO,OAAOA;AAAA,EAAK,IAAI,SAAUA,MAAK;AAAE,WAAOA,QAAO,cAAc,OAAO,UAAUA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,EAAK,GAAG,QAAQ,GAAG;AAAG;AAC/U,SAAS,QAAQ,QAAQ,gBAAgB;AAAE,MAAI,OAAO,OAAO,KAAK,MAAM;AAAG,MAAI,OAAO,uBAAuB;AAAE,QAAI,UAAU,OAAO,sBAAsB,MAAM;AAAG,uBAAmB,UAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,aAAO,OAAO,yBAAyB,QAAQ,GAAG,EAAE;AAAA,IAAY,CAAC,IAAI,KAAK,KAAK,MAAM,MAAM,OAAO;AAAA,EAAG;AAAE,SAAO;AAAM;AACpV,SAAS,cAAc,QAAQ;AAAE,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,QAAI,SAAS,QAAQ,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;AAAG,QAAI,IAAI,QAAQ,OAAO,MAAM,GAAG,IAAE,EAAE,QAAQ,SAAU,KAAK;AAAE,sBAAgB,QAAQ,KAAK,OAAO,GAAG,CAAC;AAAA,IAAG,CAAC,IAAI,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,MAAM,CAAC,IAAI,QAAQ,OAAO,MAAM,CAAC,EAAE,QAAQ,SAAU,KAAK;AAAE,aAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ,GAAG,CAAC;AAAA,IAAG,CAAC;AAAA,EAAG;AAAE,SAAO;AAAQ;AACzf,SAAS,gBAAgB,KAAK,KAAK,OAAO;AAAE,QAAM,eAAe,GAAG;AAAG,MAAI,OAAO,KAAK;AAAE,WAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;AAAA,EAAG,OAAO;AAAE,QAAI,GAAG,IAAI;AAAA,EAAO;AAAE,SAAO;AAAK;AAC3O,SAAS,eAAe,KAAK;AAAE,MAAI,MAAM,aAAa,KAAK,QAAQ;AAAG,SAAO,QAAQ,GAAG,MAAM,WAAW,MAAM,OAAO,GAAG;AAAG;AAC5H,SAAS,aAAa,OAAO,MAAM;AAAE,MAAI,QAAQ,KAAK,MAAM,YAAY,UAAU;AAAM,WAAO;AAAO,MAAI,OAAO,MAAM,OAAO,WAAW;AAAG,MAAI,SAAS,QAAW;AAAE,QAAI,MAAM,KAAK,KAAK,OAAO,QAAQ,SAAS;AAAG,QAAI,QAAQ,GAAG,MAAM;AAAU,aAAO;AAAK,UAAM,IAAI,UAAU,8CAA8C;AAAA,EAAG;AAAE,UAAQ,SAAS,WAAW,SAAS,QAAQ,KAAK;AAAG;AAC5X,SAAS,eAAe,KAAK,GAAG;AAAE,SAAO,gBAAgB,GAAG,KAAK,sBAAsB,KAAK,CAAC,KAAK,4BAA4B,KAAK,CAAC,KAAK,iBAAiB;AAAG;AAC7J,SAAS,mBAAmB;AAAE,QAAM,IAAI,UAAU,2IAA2I;AAAG;AAChM,SAAS,4BAA4B,GAAG,QAAQ;AAAE,MAAI,CAAC;AAAG;AAAQ,MAAI,OAAO,MAAM;AAAU,WAAO,kBAAkB,GAAG,MAAM;AAAG,MAAI,IAAI,OAAO,UAAU,SAAS,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE;AAAG,MAAI,MAAM,YAAY,EAAE;AAAa,QAAI,EAAE,YAAY;AAAM,MAAI,MAAM,SAAS,MAAM;AAAO,WAAO,MAAM,KAAK,CAAC;AAAG,MAAI,MAAM,eAAe,2CAA2C,KAAK,CAAC;AAAG,WAAO,kBAAkB,GAAG,MAAM;AAAG;AAC/Z,SAAS,kBAAkB,KAAK,KAAK;AAAE,MAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,UAAM,IAAI;AAAQ,WAAS,IAAI,GAAG,OAAO,IAAI,MAAM,GAAG,GAAG,IAAI,KAAK;AAAK,SAAK,CAAC,IAAI,IAAI,CAAC;AAAG,SAAO;AAAM;AAClL,SAAS,sBAAsB,KAAK,GAAG;AAAE,MAAI,KAAK,QAAQ,MAAM,OAAO,eAAe,OAAO,UAAU,IAAI,OAAO,QAAQ,KAAK,IAAI,YAAY;AAAG,MAAI,QAAQ,IAAI;AAAE,QAAI,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,MAAI,KAAK;AAAI,QAAI;AAAE,UAAI,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,MAAM,MAAM,GAAG;AAAE,YAAI,OAAO,EAAE,MAAM;AAAI;AAAQ,aAAK;AAAA,MAAI;AAAO,eAAO,EAAE,MAAM,KAAK,GAAG,KAAK,EAAE,GAAG,UAAU,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,WAAW,IAAI,KAAK;AAAG;AAAA,IAAE,SAAS,KAAP;AAAc,WAAK,MAAI,KAAK;AAAA,IAAK,UAAE;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,QAAQ,GAAG,QAAQ,MAAM,KAAK,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,MAAM;AAAK;AAAA,MAAQ,UAAE;AAAU,YAAI;AAAI,gBAAM;AAAA,MAAI;AAAA,IAAE;AAAE,WAAO;AAAA,EAAM;AAAE;AACjlB,SAAS,gBAAgB,KAAK;AAAE,MAAI,MAAM,QAAQ,GAAG;AAAG,WAAO;AAAK;AAyBpE,OAAO,cAAc;AACrB,OAAO,SAAS,SAAS,WAAW,UAAU,mBAAmB;AACjE,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,6BAA6B;AACtC,SAAS,qBAAqB,kBAAkB;AAChD,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAC1B,IAAI,SAAS;AACN,SAAS,iBAAiB,MAAM;AACrC,MAAI,qBAAqB,gBAAgB;AACzC,MAAI,WAAW,KAAK,UAClB,UAAU,KAAK,SACf,iBAAiB,KAAK,gBACtB,sBAAsB,KAAK,qBAC3B,mBAAmB,KAAK,kBACxB,UAAU,KAAK,SACf,WAAW,KAAK;AAClB,MAAI,iBAAiB,cAAc,GACjC,QAAQ,eAAe,OACvB,kBAAkB,eAAe,iBACjC,UAAU,eAAe,SACzB,qBAAqB,eAAe,oBACpC,MAAM,eAAe;AACvB,MAAI,YAAY,aAAa;AAC7B,MAAI,mBAAmB,oBAAoB,WAAY;AACrD,WAAoB,sBAAM,cAAc,MAAM,UAAU,MAAM,QAAQ,mBAAmB,IAAI;AAAA,EAC/F;AACA,MAAI,QAAQ,cAAc,SAAS,UAAU,IAAI;AAAA,IAC7C,OAAO,CAAC;AAAA,EACV,GACA,QAAQ,MAAM;AAChB,MAAI,YAAY,SAAS,WAAW,oBAAoB,kBAAkB,YAAY,sBAAsB,MAAM,kBAAkB,QAAQ,wBAAwB,SAAS,SAAS,oBAAoB,SAAS,MAAM,SAAS,WAAW,UAAU,iBAAiB,KAAK,CAAC,GAC5Q,aAAa,eAAe,WAAW,CAAC,GACxC,eAAe,WAAW,CAAC,GAC3B,kBAAkB,WAAW,CAAC;AAChC,MAAI,aAAa,SAAS,WAAW,aAAa,YAAY,iBAAiB,MAAM,aAAa,QAAQ,mBAAmB,SAAS,SAAS,eAAe,SAAS,MAAM,SAAS,WAAW,UAAU,WAAW,OAAO,YAAY,CAAC,GACxO,aAAa,eAAe,YAAY,CAAC,GACzC,UAAU,WAAW,CAAC,GACtB,aAAa,WAAW,CAAC;AAC3B,MAAI,aAAa,SAAS,WAAW,WAAW,YAAY,eAAe,MAAM,WAAW,QAAQ,iBAAiB,SAAS,SAAS,aAAa,SAAS,MAAM,SAAS,WAAW,UAAU,SAAS,OAAO,YAAY,CAAC,GAC5N,aAAa,eAAe,YAAY,CAAC,GACzC,QAAQ,WAAW,CAAC,GACpB,WAAW,WAAW,CAAC;AACzB,MAAI,kBAAkB,mBAAmB;AACzC,YAAU,WAAY;AACpB,QAAI,UAAU,uBAAuB,UAAU;AAC/C,QAAI,UAAU,QAAQ,iBAAiB,QAAQ,YAAY;AAAM;AACjE,QAAI;AAAO,aAAO,MAAM,gBAAgB;AAAA,QACtC,MAAM;AAAA,MACR,CAAC;AACD,KAAC,sBAAsB,CAAC,GAAG,QAAQ,SAAU,KAAK;AAChD,UAAI,SAAS,gBAAgB,uBAAuB;AACpD,OAAC,UAAU,YAAY,QAAQ,YAAY,SAAS,UAAU,iBAAiB,QAAQ,YAAY,QAAQ,mBAAmB,SAAS,UAAU,wBAAwB,eAAe,qBAAqB,QAAQ,0BAA0B,SAAS,UAAU,yBAAyB,sBAAsB,GAAG,OAAO,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB,YAAY,KAAK,UAAU;AAAA,QACha,MAAM;AAAA,MACR,CAAC,CAAC;AAAA,IACJ,CAAC;AACD,KAAC,WAAW,YAAY,QAAQ,aAAa,SAAS,UAAU,wBAAwB,SAAS,wBAAwB,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB,YAAY,KAAK,UAAU;AAAA,MAC5N,MAAM;AAAA,IACR,CAAC,CAAC;AACF,KAAC,WAAW,YAAY,QAAQ,aAAa,SAAS,UAAU,kBAAkB,SAAS,YAAY,QAAQ,oBAAoB,SAAS,SAAS,gBAAgB,YAAY,KAAK,UAAU;AAAA,MAC9L,MAAM;AAAA,IACR,CAAC,CAAC;AAAA,EACJ,GAAG,CAAC,CAAC;AACL,YAAU,WAAY;AACpB,QAAI,iBAAiB;AAAM;AAC3B,QAAI,kBAAkB,SAASC,iBAAgB,GAAG;AAChD,UAAI,QAAQ,MAAM,QAAQ,MAAM,SAAS,SAAS,EAAE,SAAS;AAC7D,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI;AACF,iBAAO,KAAK,MAAM,IAAI;AAAA,QACxB,SAAS,KAAP;AAAA,QAAa;AAAA,MACjB;AACA,UAAI;AAAO,eAAO,MAAM,oBAAoB,KAAK,UAAU,IAAI,CAAC;AAChE,UAAI,UAAU;AACd,UAAI,CAAC,QAAQ;AAAM;AACnB,UAAI,QAAQ,KAAK,YAAY,MAAM,mBAAmB,QAAQ,SAAS;AACrE,YAAI;AAAO,iBAAO,MAAM,yBAAyB,QAAQ,OAAO;AAChE,wBAAgB,WAAW,QAAQ,OAAO,CAAC;AAAA,MAC7C;AAAA,IACF;AACA,QAAI,OAAO;AACT,aAAO,MAAM,yBAAyB;AAAA,QACpC,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,WAAO,iBAAiB,WAAW,eAAe;AAClD,WAAO,WAAY;AACjB,aAAO,oBAAoB,WAAW,eAAe;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,CAAC;AACL,YAAU,WAAY;AACpB,QAAI,UAAU;AAAM;AACpB,QAAI,kBAAkB,SAASA,iBAAgB,GAAG;AAChD,UAAI,QAAQ,MAAM,QAAQ,MAAM,SAAS,SAAS,EAAE,SAAS;AAC7D,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI;AACF,iBAAO,KAAK,MAAM,IAAI;AAAA,QACxB,SAAS,KAAP;AAAA,QAAa;AAAA,MACjB;AACA,UAAI;AAAO,eAAO,MAAM,oBAAoB,KAAK,UAAU,IAAI,CAAC;AAChE,UAAI,UAAU;AACd,UAAI,CAAC,QAAQ;AAAM;AACnB,UAAI,QAAQ,KAAK,YAAY,MAAM,WAAW,QAAQ,SAAS;AAC7D,YAAI;AAAO,iBAAO,MAAM,iBAAiB,QAAQ,OAAO;AACxD,iBAAS,WAAW,QAAQ,SAAS,YAAY,CAAC;AAAA,MACpD;AAAA,IACF;AACA,QAAI,OAAO;AACT,aAAO,MAAM,yBAAyB;AAAA,QACpC,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,WAAO,iBAAiB,WAAW,eAAe;AAClD,WAAO,WAAY;AACjB,aAAO,oBAAoB,WAAW,eAAe;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,CAAC;AACL,YAAU,WAAY;AACpB,QAAI,YAAY;AAAM;AACtB,QAAI,kBAAkB,SAASA,iBAAgB,GAAG;AAChD,UAAI,QAAQ,MAAM,QAAQ,MAAM,SAAS,SAAS,EAAE,SAAS;AAC7D,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI;AACF,iBAAO,KAAK,MAAM,IAAI;AAAA,QACxB,SAAS,KAAP;AAAA,QAAa;AAAA,MACjB;AACA,UAAI;AAAO,eAAO,MAAM,oBAAoB,KAAK,UAAU,IAAI,CAAC;AAChE,UAAI,UAAU;AACd,UAAI,CAAC,QAAQ;AAAM;AACnB,UAAI,QAAQ,KAAK,YAAY,MAAM,cAAc,QAAQ,SAAS;AAChE,YAAI;AAAO,iBAAO,MAAM,oBAAoB,QAAQ,OAAO;AAC3D,mBAAW,WAAW,QAAQ,SAAS,YAAY,CAAC;AAAA,MACtD;AAAA,IACF;AACA,QAAI,OAAO;AACT,aAAO,MAAM,yBAAyB;AAAA,QACpC,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,WAAO,iBAAiB,WAAW,eAAe;AAClD,WAAO,WAAY;AACjB,aAAO,oBAAoB,WAAW,eAAe;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,CAAC;AACL,MAAI,cAAc,YAAY,SAAU,WAAW,OAAO;AACxD,QAAI,OAAO;AACT,UAAI,OAAO,UAAU;AAAU,cAAM,IAAI,MAAM,KAAK;AACpD,UAAI,MAAM,IAAI,MAAM,MAAM,KAAK;AAC/B,UAAI,mBAAmB,MAAM;AAC7B,YAAM;AAAA,IACR;AACA,QAAI;AAAS,cAAQ,WAAW,KAAK;AAAA,EACvC,GAAG,CAAC,CAAC;AACL,MAAI,WAAW,QAAQ,WAAY;AACjC,WAAO,OAAO,WAAW,eAAe,IAAI,SAAS;AAAA,MACnD,KAAK,eAAe;AAAA,MACpB,OAAO,eAAe;AAAA,MACtB,UAAU,eAAe;AAAA,IAC3B,CAAC;AAAA,EACH,GAAG,CAAC,qBAAqB,OAAO,cAAc,OAAO,CAAC;AACtD,MAAI,cAAc,QAAQ,WAAY;AACpC,QAAIC,eAAc,cAAc,cAAc,CAAC,GAAG,0BAA0B,GAAG,mBAAmB;AAClG,QAAI;AAAO,MAAAA,aAAY,gBAAgB;AACvC,QAAI,SAAS,OAAO,UAAU,UAAU;AACtC,MAAAA,aAAY,QAAQ;AACpB,UAAI,WAAW,OAAO,YAAY;AAAU,QAAAA,aAAY,UAAU;AAClE,UAAI,gBAAgB,OAAO,iBAAiB;AAAU,QAAAA,aAAY,eAAe;AACjF,UAAI,iBAAiB;AACnB,QAAAA,aAAY,mBAAmB;AAC/B,QAAAA,aAAY,OAAO;AACnB,QAAAA,aAAY,SAAS;AAAA,MACvB;AAAA,IACF;AACA,WAAOA;AAAA,EACT,GAAG,CAAC,qBAAqB,OAAO,cAAc,OAAO,CAAC;AACtD,MAAI,UAAU,QAAQ,YAAY,QAAQ,iBAAiB;AAAM,WAAoB,sBAAM,cAAc,kBAAkB,IAAI;AAC/H,MAAI,CAAC,mBAAmB,WAAW,KAAK;AACtC;AAAA;AAAA,MAGE,sBAAM,cAAc,qBAAqB;AAAA,QACvC,kBAA+B,sBAAM,cAAc,kBAAkB,IAAI;AAAA,QAGzE,kBAAkB;AAAA,QAClB;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,WAAW,WAAW,OAAO;AAAA,QAC7B,gBAAgB;AAAA,UACd,UAAU,eAAe;AAAA,UACzB,OAAO,eAAe;AAAA,UACtB,KAAK,eAAe;AAAA,QACtB;AAAA,MACF,GAAgB,sBAAM,cAAc,WAAW,MAAM,QAAQ,CAAC;AAAA;AAAA,EAElE;AACA,MAAI,CAAC;AAAU,WAAoB,sBAAM,cAAc,MAAM,UAAU,MAAM,QAAQ;AACrF,SAAoB,sBAAM,cAAc,uBAAuB;AAAA,IAC7D,kBAA+B,sBAAM,cAAc,kBAAkB,IAAI;AAAA,IACzE,YAAY;AAAA,IAGZ,kBAAkB;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF,GAAgB,sBAAM,cAAc,WAAW,MAAM,QAAQ,CAAC;AAChE;AACA,SAAS,WAAW,OAAO,cAAc;AACvC,MAAI,OAAO,UAAU;AAAU,WAAO;AACtC,MAAI,cAAc;AAChB,QAAI,iBAAiB,QAAQ,aAAa,YAAY;AAAG,aAAO;AAChE,WAAO;AAAA,EACT;AACA,SAAO,aAAa,KAAK,IAAI,QAAQ;AACvC;AACA,SAAS,aAAa,OAAO;AAC3B,MAAI;AACF,QAAI;AACJ,QAAI,cAAc,KAAK,MAAM,OAAO,OAAO,eAAe,MAAM,MAAM,GAAG,OAAO,QAAQ,iBAAiB,SAAS,SAAS,aAAa,CAAC,MAAM,IAAI,QAAQ,EAAE,SAAS,KAAK,IAAI,GAC7K,MAAM,YAAY;AACpB,WAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,KAAK;AAAA,EAC1C,SAAS,KAAP;AACA,QAAI,eAAe;AAAa,aAAO;AACvC,UAAM;AAAA,EACR;AACF;AACO,IAAI,6BAA6B;AAAA,EACtC,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,YAAY;AACd;",
|
|
6
6
|
"names": ["obj", "messageCallback", "initOptions"]
|
|
7
7
|
}
|
|
@@ -63,7 +63,7 @@ function KeycloakProvider({
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
if (debug)
|
|
66
|
-
logger.debug("received message", data);
|
|
66
|
+
logger.debug("received message", JSON.stringify(data));
|
|
67
67
|
const message = data;
|
|
68
68
|
if (!message.type)
|
|
69
69
|
return;
|
|
@@ -96,7 +96,7 @@ function KeycloakProvider({
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
if (debug)
|
|
99
|
-
logger.debug("received message", data);
|
|
99
|
+
logger.debug("received message", JSON.stringify(data));
|
|
100
100
|
const message = data;
|
|
101
101
|
if (!message.type)
|
|
102
102
|
return;
|
|
@@ -129,7 +129,7 @@ function KeycloakProvider({
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
if (debug)
|
|
132
|
-
logger.debug("received message", data);
|
|
132
|
+
logger.debug("received message", JSON.stringify(data));
|
|
133
133
|
const message = data;
|
|
134
134
|
if (!message.type)
|
|
135
135
|
return;
|
|
@@ -167,7 +167,7 @@ function KeycloakProvider({
|
|
|
167
167
|
realm: keycloakConfig.realm,
|
|
168
168
|
clientId: keycloakConfig.clientId
|
|
169
169
|
}),
|
|
170
|
-
[]
|
|
170
|
+
[keycloakInitOptions, token, refreshToken, idToken]
|
|
171
171
|
);
|
|
172
172
|
const initOptions = useMemo(() => {
|
|
173
173
|
const initOptions2 = {
|
|
@@ -184,6 +184,7 @@ function KeycloakProvider({
|
|
|
184
184
|
initOptions2.refreshToken = refreshToken;
|
|
185
185
|
if (isPassedInToken) {
|
|
186
186
|
initOptions2.checkLoginIframe = false;
|
|
187
|
+
initOptions2.flow = "implicit";
|
|
187
188
|
initOptions2.onLoad = void 0;
|
|
188
189
|
}
|
|
189
190
|
}
|
|
@@ -191,7 +192,7 @@ function KeycloakProvider({
|
|
|
191
192
|
}, [keycloakInitOptions, token, refreshToken, idToken]);
|
|
192
193
|
if (token === true || idToken === true || refreshToken === true)
|
|
193
194
|
return <LoadingComponent />;
|
|
194
|
-
if (cookies && ssr) {
|
|
195
|
+
if (!isPassedInToken && cookies && ssr) {
|
|
195
196
|
return (
|
|
196
197
|
// @ts-ignore
|
|
197
198
|
<SSRKeycloakProvider
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/provider/keycloakProvider.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * File: /auth/provider/keycloakProvider.tsx\n * Project: app\n * File Created: 08-11-2022 03:12:43\n * Author: Clay Risser\n * -----\n * Last Modified: 22-11-2022 18:07:46\n * Modified By: Clay Risser\n * -----\n * Risser Labs LLC (c) Copyright 2021 - 2022\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Keycloak from '@bitspur/keycloak-js';\nimport React, { useMemo, useEffect, useState, useCallback } from 'react';\nimport type { AuthClientEvent, AuthClientError, AuthClientTokens } from '@bitspur/react-keycloak-core';\nimport type { KeycloakInitOptions, KeycloakConfig } from '@bitspur/keycloak-js';\nimport type { ReactNode, ComponentType } from 'react';\nimport { AfterAuth } from './afterAuth';\nimport { MultiPlatform } from 'multiplatform.one';\nimport { ReactKeycloakProvider } from '@bitspur/react-keycloak-web';\nimport { SSRKeycloakProvider, SSRCookies } from '@bitspur/react-keycloak-ssr';\nimport { useAuthConfig } from '../hooks/useAuthConfig';\nimport { useAuthState } from '../state';\nimport { useIsPassedInToken } from '../hooks';\nimport { useRouter } from 'next/router';\n\nexport interface KeycloakProviderProps {\n children: ReactNode;\n cookies?: unknown;\n keycloakConfig: KeycloakConfig;\n keycloakInitOptions?: KeycloakInitOptions;\n loadingComponent?: ComponentType;\n onEvent?: (eventType: AuthClientEvent, error?: AuthClientError) => void;\n onTokens?: (tokens: AuthClientTokens) => void;\n}\n\nconst logger = console;\n\nexport function KeycloakProvider({\n children,\n cookies,\n keycloakConfig,\n keycloakInitOptions,\n loadingComponent,\n onEvent,\n onTokens,\n}: KeycloakProviderProps) {\n const { debug, ensureFreshness, persist, messageHandlerKeys, ssr } = useAuthConfig();\n const authState = useAuthState();\n const LoadingComponent = loadingComponent || (() => <>{debug ? 'authenticating' : null}</>);\n const { query } = MultiPlatform.isNext ? useRouter() : { query: {} };\n const [refreshToken, setRefreshToken] = useState<string | boolean>(\n validToken(\n (ensureFreshness &&\n (('refreshToken' in query && (query.refreshToken?.toString() || true)) ||\n (persist && authState.refreshToken))) ||\n false,\n ),\n );\n const [idToken, setIdToken] = useState<string | boolean>(\n validToken(\n ('idToken' in query && (query.idToken?.toString() || true)) || (persist && authState.idToken) || false,\n refreshToken,\n ),\n );\n const [token, setToken] = useState<string | boolean>(\n validToken(\n ('token' in query && (query.token?.toString() || true)) || (persist && authState.token) || false,\n refreshToken,\n ),\n );\n const isPassedInToken = useIsPassedInToken();\n\n useEffect(() => {\n if (token !== true && refreshToken !== true && idToken !== true) return;\n if (debug) logger.debug('post message', { type: 'LOADED' });\n (messageHandlerKeys || []).forEach((key: string) => {\n window?.webkit?.messageHandlers?.[key]?.postMessage(JSON.stringify({ type: 'LOADED' }));\n });\n window?.ReactNativeWebView?.postMessage(JSON.stringify({ type: 'LOADED' }));\n window?.parent?.postMessage(JSON.stringify({ type: 'LOADED' }));\n }, []);\n\n useEffect(() => {\n if (refreshToken !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'REFRESH_TOKEN' && message.payload) {\n if (debug) logger.debug('setting refresh token', message.payload);\n setRefreshToken(validToken(message.payload));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'REFRESH_TOKEN',\n payload: '<some_refresh_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n useEffect(() => {\n if (token !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'TOKEN' && message.payload) {\n if (debug) logger.debug('setting token', message.payload);\n setToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'TOKEN',\n payload: '<some_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n useEffect(() => {\n if (idToken !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {\n if (debug) logger.debug('setting id token', message.payload);\n setIdToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'ID_TOKEN',\n payload: '<some_id_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n const handleEvent = useCallback((eventType: AuthClientEvent, error?: AuthClientError) => {\n if (error) {\n if (typeof error === 'string') throw new Error(error);\n const err: Error & { errorDescription?: string } = new Error(error.error);\n err.errorDescription = error.error_description;\n throw err;\n }\n if (onEvent) onEvent(eventType, error);\n }, []);\n\n const keycloak = useMemo(\n () =>\n typeof window !== 'undefined' &&\n new Keycloak({\n url: keycloakConfig.url,\n realm: keycloakConfig.realm,\n clientId: keycloakConfig.clientId,\n }),\n [],\n );\n\n const initOptions = useMemo(() => {\n const initOptions = {\n ...defaultKeycloakInitOptions,\n ...keycloakInitOptions,\n };\n if (debug) initOptions.enableLogging = true;\n if (token && typeof token === 'string') {\n initOptions.token = token;\n if (idToken && typeof idToken === 'string') initOptions.idToken = idToken;\n if (refreshToken && typeof refreshToken === 'string') initOptions.refreshToken = refreshToken;\n if (isPassedInToken) {\n initOptions.checkLoginIframe = false;\n initOptions.onLoad = undefined;\n }\n }\n return initOptions;\n }, [keycloakInitOptions, token, refreshToken, idToken]);\n\n if (token === true || idToken === true || refreshToken === true) return <LoadingComponent />;\n if (cookies && ssr) {\n return (\n // @ts-ignore\n <SSRKeycloakProvider\n LoadingComponent={<LoadingComponent />}\n // keycloak-js already handles refreshing tokens\n autoRefreshToken={false}\n initOptions={initOptions}\n onEvent={handleEvent}\n onTokens={onTokens}\n persistor={SSRCookies(cookies)}\n keycloakConfig={{\n clientId: keycloakConfig.clientId,\n realm: keycloakConfig.realm,\n url: keycloakConfig.url,\n }}\n >\n <AfterAuth>{children}</AfterAuth>\n </SSRKeycloakProvider>\n );\n }\n if (!keycloak) return <>{children}</>;\n return (\n <ReactKeycloakProvider\n LoadingComponent={<LoadingComponent />}\n authClient={keycloak}\n // keycloak-js already handles refreshing tokens\n autoRefreshToken={false}\n initOptions={initOptions}\n onEvent={handleEvent}\n onTokens={onTokens}\n >\n <AfterAuth>{children}</AfterAuth>\n </ReactKeycloakProvider>\n );\n}\n\nfunction validToken(token: string | boolean, refreshToken?: string | boolean) {\n if (typeof token !== 'string') return token;\n if (refreshToken) {\n if (refreshToken === true || isTokenValid(refreshToken)) return token;\n return false;\n }\n return isTokenValid(token) ? token : false;\n}\n\nfunction isTokenValid(token: string) {\n try {\n const { exp } = JSON.parse(Buffer.from(token.split('.')?.[1] || '', 'base64').toString() || '{}');\n return Math.floor(Date.now() / 1000) <= exp;\n } catch (err) {\n if (err instanceof SyntaxError) return false;\n throw err;\n }\n}\n\nexport const defaultKeycloakInitOptions: KeycloakInitOptions = {\n checkLoginIframe: true,\n checkLoginIframeInterval: 5,\n enableLogging: false,\n onLoad: 'check-sso',\n pkceMethod: 'S256',\n};\n\nexport interface MessageSchema {\n type: string;\n payload?: string;\n}\n"],
|
|
5
|
-
"mappings": "AAwBA,OAAO,cAAc;AACrB,SAAgB,SAAS,WAAW,UAAU,mBAAmB;AAIjE,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,6BAA6B;AACtC,SAAS,qBAAqB,kBAAkB;AAChD,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAY1B,MAAM,SAAS;AAER,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,EAAE,OAAO,iBAAiB,SAAS,oBAAoB,IAAI,IAAI,cAAc;AACnF,QAAM,YAAY,aAAa;AAC/B,QAAM,mBAAmB,qBAAqB,MAAM,GAAG,QAAQ,mBAAmB,KAAK;AACvF,QAAM,EAAE,MAAM,IAAI,cAAc,SAAS,UAAU,IAAI,EAAE,OAAO,CAAC,EAAE;AACnE,QAAM,CAAC,cAAc,eAAe,IAAI;AAAA,IACtC;AAAA,MACG,oBACG,kBAAkB,UAAU,MAAM,cAAc,SAAS,KAAK,SAC7D,WAAW,UAAU,iBACxB;AAAA,IACJ;AAAA,EACF;AACA,QAAM,CAAC,SAAS,UAAU,IAAI;AAAA,IAC5B;AAAA,MACG,aAAa,UAAU,MAAM,SAAS,SAAS,KAAK,SAAW,WAAW,UAAU,WAAY;AAAA,MACjG;AAAA,IACF;AAAA,EACF;AACA,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IACxB;AAAA,MACG,WAAW,UAAU,MAAM,OAAO,SAAS,KAAK,SAAW,WAAW,UAAU,SAAU;AAAA,MAC3F;AAAA,IACF;AAAA,EACF;AACA,QAAM,kBAAkB,mBAAmB;AAE3C,YAAU,MAAM;AACd,QAAI,UAAU,QAAQ,iBAAiB,QAAQ,YAAY;AAAM;AACjE,QAAI;AAAO,aAAO,MAAM,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC1D,KAAC,sBAAsB,CAAC,GAAG,QAAQ,CAAC,QAAgB;AAClD,cAAQ,QAAQ,kBAAkB,GAAG,GAAG,YAAY,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC,CAAC;AAAA,IACxF,CAAC;AACD,YAAQ,oBAAoB,YAAY,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC,CAAC;AAC1E,YAAQ,QAAQ,YAAY,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC,CAAC;AAAA,EAChE,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,iBAAiB;AAAM;AAC3B,UAAM,kBAAkB,CAAC,MAAyB;AAChD,UAAI,OAAO,GAAG,QAAQ;AACtB,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI;AACF,iBAAO,KAAK,MAAM,IAAI;AAAA,QACxB,SAAS,KAAP;AAAA,QAAa;AAAA,MACjB;AACA,UAAI;AAAO,eAAO,MAAM,oBAAoB,IAAI;
|
|
4
|
+
"sourcesContent": ["/**\n * File: /auth/provider/keycloakProvider.tsx\n * Project: app\n * File Created: 08-11-2022 03:12:43\n * Author: Clay Risser\n * -----\n * Last Modified: 22-11-2022 18:07:46\n * Modified By: Clay Risser\n * -----\n * Risser Labs LLC (c) Copyright 2021 - 2022\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Keycloak from '@bitspur/keycloak-js';\nimport React, { useMemo, useEffect, useState, useCallback } from 'react';\nimport type { AuthClientEvent, AuthClientError, AuthClientTokens } from '@bitspur/react-keycloak-core';\nimport type { KeycloakInitOptions, KeycloakConfig } from '@bitspur/keycloak-js';\nimport type { ReactNode, ComponentType } from 'react';\nimport { AfterAuth } from './afterAuth';\nimport { MultiPlatform } from 'multiplatform.one';\nimport { ReactKeycloakProvider } from '@bitspur/react-keycloak-web';\nimport { SSRKeycloakProvider, SSRCookies } from '@bitspur/react-keycloak-ssr';\nimport { useAuthConfig } from '../hooks/useAuthConfig';\nimport { useAuthState } from '../state';\nimport { useIsPassedInToken } from '../hooks';\nimport { useRouter } from 'next/router';\n\nexport interface KeycloakProviderProps {\n children: ReactNode;\n cookies?: unknown;\n keycloakConfig: KeycloakConfig;\n keycloakInitOptions?: KeycloakInitOptions;\n loadingComponent?: ComponentType;\n onEvent?: (eventType: AuthClientEvent, error?: AuthClientError) => void;\n onTokens?: (tokens: AuthClientTokens) => void;\n}\n\nconst logger = console;\n\nexport function KeycloakProvider({\n children,\n cookies,\n keycloakConfig,\n keycloakInitOptions,\n loadingComponent,\n onEvent,\n onTokens,\n}: KeycloakProviderProps) {\n const { debug, ensureFreshness, persist, messageHandlerKeys, ssr } = useAuthConfig();\n const authState = useAuthState();\n const LoadingComponent = loadingComponent || (() => <>{debug ? 'authenticating' : null}</>);\n const { query } = MultiPlatform.isNext ? useRouter() : { query: {} };\n const [refreshToken, setRefreshToken] = useState<string | boolean>(\n validToken(\n (ensureFreshness &&\n (('refreshToken' in query && (query.refreshToken?.toString() || true)) ||\n (persist && authState.refreshToken))) ||\n false,\n ),\n );\n const [idToken, setIdToken] = useState<string | boolean>(\n validToken(\n ('idToken' in query && (query.idToken?.toString() || true)) || (persist && authState.idToken) || false,\n refreshToken,\n ),\n );\n const [token, setToken] = useState<string | boolean>(\n validToken(\n ('token' in query && (query.token?.toString() || true)) || (persist && authState.token) || false,\n refreshToken,\n ),\n );\n const isPassedInToken = useIsPassedInToken();\n\n useEffect(() => {\n if (token !== true && refreshToken !== true && idToken !== true) return;\n if (debug) logger.debug('post message', { type: 'LOADED' });\n (messageHandlerKeys || []).forEach((key: string) => {\n window?.webkit?.messageHandlers?.[key]?.postMessage(JSON.stringify({ type: 'LOADED' }));\n });\n window?.ReactNativeWebView?.postMessage(JSON.stringify({ type: 'LOADED' }));\n window?.parent?.postMessage(JSON.stringify({ type: 'LOADED' }));\n }, []);\n\n useEffect(() => {\n if (refreshToken !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'REFRESH_TOKEN' && message.payload) {\n if (debug) logger.debug('setting refresh token', message.payload);\n setRefreshToken(validToken(message.payload));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'REFRESH_TOKEN',\n payload: '<some_refresh_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n useEffect(() => {\n if (token !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'TOKEN' && message.payload) {\n if (debug) logger.debug('setting token', message.payload);\n setToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'TOKEN',\n payload: '<some_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n useEffect(() => {\n if (idToken !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {\n if (debug) logger.debug('setting id token', message.payload);\n setIdToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'ID_TOKEN',\n payload: '<some_id_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n const handleEvent = useCallback((eventType: AuthClientEvent, error?: AuthClientError) => {\n if (error) {\n if (typeof error === 'string') throw new Error(error);\n const err: Error & { errorDescription?: string } = new Error(error.error);\n err.errorDescription = error.error_description;\n throw err;\n }\n if (onEvent) onEvent(eventType, error);\n }, []);\n\n const keycloak = useMemo(\n () =>\n typeof window !== 'undefined' &&\n new Keycloak({\n url: keycloakConfig.url,\n realm: keycloakConfig.realm,\n clientId: keycloakConfig.clientId,\n }),\n [keycloakInitOptions, token, refreshToken, idToken],\n );\n\n const initOptions = useMemo(() => {\n const initOptions = {\n ...defaultKeycloakInitOptions,\n ...keycloakInitOptions,\n };\n if (debug) initOptions.enableLogging = true;\n if (token && typeof token === 'string') {\n initOptions.token = token;\n if (idToken && typeof idToken === 'string') initOptions.idToken = idToken;\n if (refreshToken && typeof refreshToken === 'string') initOptions.refreshToken = refreshToken;\n if (isPassedInToken) {\n initOptions.checkLoginIframe = false;\n initOptions.flow = 'implicit';\n initOptions.onLoad = undefined;\n }\n }\n return initOptions;\n }, [keycloakInitOptions, token, refreshToken, idToken]);\n\n if (token === true || idToken === true || refreshToken === true) return <LoadingComponent />;\n if (!isPassedInToken && cookies && ssr) {\n return (\n // @ts-ignore\n <SSRKeycloakProvider\n LoadingComponent={<LoadingComponent />}\n // keycloak-js already handles refreshing tokens\n autoRefreshToken={false}\n initOptions={initOptions}\n onEvent={handleEvent}\n onTokens={onTokens}\n persistor={SSRCookies(cookies)}\n keycloakConfig={{\n clientId: keycloakConfig.clientId,\n realm: keycloakConfig.realm,\n url: keycloakConfig.url,\n }}\n >\n <AfterAuth>{children}</AfterAuth>\n </SSRKeycloakProvider>\n );\n }\n if (!keycloak) return <>{children}</>;\n return (\n <ReactKeycloakProvider\n LoadingComponent={<LoadingComponent />}\n authClient={keycloak}\n // keycloak-js already handles refreshing tokens\n autoRefreshToken={false}\n initOptions={initOptions}\n onEvent={handleEvent}\n onTokens={onTokens}\n >\n <AfterAuth>{children}</AfterAuth>\n </ReactKeycloakProvider>\n );\n}\n\nfunction validToken(token: string | boolean, refreshToken?: string | boolean) {\n if (typeof token !== 'string') return token;\n if (refreshToken) {\n if (refreshToken === true || isTokenValid(refreshToken)) return token;\n return false;\n }\n return isTokenValid(token) ? token : false;\n}\n\nfunction isTokenValid(token: string) {\n try {\n const { exp } = JSON.parse(Buffer.from(token.split('.')?.[1] || '', 'base64').toString() || '{}');\n return Math.floor(Date.now() / 1000) <= exp;\n } catch (err) {\n if (err instanceof SyntaxError) return false;\n throw err;\n }\n}\n\nexport const defaultKeycloakInitOptions: KeycloakInitOptions = {\n checkLoginIframe: true,\n checkLoginIframeInterval: 5,\n enableLogging: false,\n onLoad: 'check-sso',\n pkceMethod: 'S256',\n};\n\nexport interface MessageSchema {\n type: string;\n payload?: string;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["initOptions"]
|
|
7
7
|
}
|
|
@@ -115,7 +115,7 @@ function KeycloakProvider({
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
if (debug)
|
|
118
|
-
logger.debug("received message", data);
|
|
118
|
+
logger.debug("received message", JSON.stringify(data));
|
|
119
119
|
const message = data;
|
|
120
120
|
if (!message.type)
|
|
121
121
|
return;
|
|
@@ -148,7 +148,7 @@ function KeycloakProvider({
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
if (debug)
|
|
151
|
-
logger.debug("received message", data);
|
|
151
|
+
logger.debug("received message", JSON.stringify(data));
|
|
152
152
|
const message = data;
|
|
153
153
|
if (!message.type)
|
|
154
154
|
return;
|
|
@@ -181,7 +181,7 @@ function KeycloakProvider({
|
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
if (debug)
|
|
184
|
-
logger.debug("received message", data);
|
|
184
|
+
logger.debug("received message", JSON.stringify(data));
|
|
185
185
|
const message = data;
|
|
186
186
|
if (!message.type)
|
|
187
187
|
return;
|
|
@@ -219,7 +219,7 @@ function KeycloakProvider({
|
|
|
219
219
|
realm: keycloakConfig.realm,
|
|
220
220
|
clientId: keycloakConfig.clientId
|
|
221
221
|
}),
|
|
222
|
-
[]
|
|
222
|
+
[keycloakInitOptions, token, refreshToken, idToken]
|
|
223
223
|
);
|
|
224
224
|
const initOptions = (0, import_react.useMemo)(() => {
|
|
225
225
|
const initOptions2 = __spreadValues(__spreadValues({}, defaultKeycloakInitOptions), keycloakInitOptions);
|
|
@@ -233,6 +233,7 @@ function KeycloakProvider({
|
|
|
233
233
|
initOptions2.refreshToken = refreshToken;
|
|
234
234
|
if (isPassedInToken) {
|
|
235
235
|
initOptions2.checkLoginIframe = false;
|
|
236
|
+
initOptions2.flow = "implicit";
|
|
236
237
|
initOptions2.onLoad = void 0;
|
|
237
238
|
}
|
|
238
239
|
}
|
|
@@ -240,7 +241,7 @@ function KeycloakProvider({
|
|
|
240
241
|
}, [keycloakInitOptions, token, refreshToken, idToken]);
|
|
241
242
|
if (token === true || idToken === true || refreshToken === true)
|
|
242
243
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadingComponent, {});
|
|
243
|
-
if (cookies && ssr) {
|
|
244
|
+
if (!isPassedInToken && cookies && ssr) {
|
|
244
245
|
return (
|
|
245
246
|
// @ts-ignore
|
|
246
247
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/provider/keycloakProvider.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * File: /auth/provider/keycloakProvider.tsx\n * Project: app\n * File Created: 08-11-2022 03:12:43\n * Author: Clay Risser\n * -----\n * Last Modified: 22-11-2022 18:07:46\n * Modified By: Clay Risser\n * -----\n * Risser Labs LLC (c) Copyright 2021 - 2022\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Keycloak from '@bitspur/keycloak-js';\nimport React, { useMemo, useEffect, useState, useCallback } from 'react';\nimport type { AuthClientEvent, AuthClientError, AuthClientTokens } from '@bitspur/react-keycloak-core';\nimport type { KeycloakInitOptions, KeycloakConfig } from '@bitspur/keycloak-js';\nimport type { ReactNode, ComponentType } from 'react';\nimport { AfterAuth } from './afterAuth';\nimport { MultiPlatform } from 'multiplatform.one';\nimport { ReactKeycloakProvider } from '@bitspur/react-keycloak-web';\nimport { SSRKeycloakProvider, SSRCookies } from '@bitspur/react-keycloak-ssr';\nimport { useAuthConfig } from '../hooks/useAuthConfig';\nimport { useAuthState } from '../state';\nimport { useIsPassedInToken } from '../hooks';\nimport { useRouter } from 'next/router';\n\nexport interface KeycloakProviderProps {\n children: ReactNode;\n cookies?: unknown;\n keycloakConfig: KeycloakConfig;\n keycloakInitOptions?: KeycloakInitOptions;\n loadingComponent?: ComponentType;\n onEvent?: (eventType: AuthClientEvent, error?: AuthClientError) => void;\n onTokens?: (tokens: AuthClientTokens) => void;\n}\n\nconst logger = console;\n\nexport function KeycloakProvider({\n children,\n cookies,\n keycloakConfig,\n keycloakInitOptions,\n loadingComponent,\n onEvent,\n onTokens,\n}: KeycloakProviderProps) {\n const { debug, ensureFreshness, persist, messageHandlerKeys, ssr } = useAuthConfig();\n const authState = useAuthState();\n const LoadingComponent = loadingComponent || (() => <>{debug ? 'authenticating' : null}</>);\n const { query } = MultiPlatform.isNext ? useRouter() : { query: {} };\n const [refreshToken, setRefreshToken] = useState<string | boolean>(\n validToken(\n (ensureFreshness &&\n (('refreshToken' in query && (query.refreshToken?.toString() || true)) ||\n (persist && authState.refreshToken))) ||\n false,\n ),\n );\n const [idToken, setIdToken] = useState<string | boolean>(\n validToken(\n ('idToken' in query && (query.idToken?.toString() || true)) || (persist && authState.idToken) || false,\n refreshToken,\n ),\n );\n const [token, setToken] = useState<string | boolean>(\n validToken(\n ('token' in query && (query.token?.toString() || true)) || (persist && authState.token) || false,\n refreshToken,\n ),\n );\n const isPassedInToken = useIsPassedInToken();\n\n useEffect(() => {\n if (token !== true && refreshToken !== true && idToken !== true) return;\n if (debug) logger.debug('post message', { type: 'LOADED' });\n (messageHandlerKeys || []).forEach((key: string) => {\n window?.webkit?.messageHandlers?.[key]?.postMessage(JSON.stringify({ type: 'LOADED' }));\n });\n window?.ReactNativeWebView?.postMessage(JSON.stringify({ type: 'LOADED' }));\n window?.parent?.postMessage(JSON.stringify({ type: 'LOADED' }));\n }, []);\n\n useEffect(() => {\n if (refreshToken !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'REFRESH_TOKEN' && message.payload) {\n if (debug) logger.debug('setting refresh token', message.payload);\n setRefreshToken(validToken(message.payload));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'REFRESH_TOKEN',\n payload: '<some_refresh_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n useEffect(() => {\n if (token !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'TOKEN' && message.payload) {\n if (debug) logger.debug('setting token', message.payload);\n setToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'TOKEN',\n payload: '<some_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n useEffect(() => {\n if (idToken !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', data);\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {\n if (debug) logger.debug('setting id token', message.payload);\n setIdToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'ID_TOKEN',\n payload: '<some_id_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n const handleEvent = useCallback((eventType: AuthClientEvent, error?: AuthClientError) => {\n if (error) {\n if (typeof error === 'string') throw new Error(error);\n const err: Error & { errorDescription?: string } = new Error(error.error);\n err.errorDescription = error.error_description;\n throw err;\n }\n if (onEvent) onEvent(eventType, error);\n }, []);\n\n const keycloak = useMemo(\n () =>\n typeof window !== 'undefined' &&\n new Keycloak({\n url: keycloakConfig.url,\n realm: keycloakConfig.realm,\n clientId: keycloakConfig.clientId,\n }),\n [],\n );\n\n const initOptions = useMemo(() => {\n const initOptions = {\n ...defaultKeycloakInitOptions,\n ...keycloakInitOptions,\n };\n if (debug) initOptions.enableLogging = true;\n if (token && typeof token === 'string') {\n initOptions.token = token;\n if (idToken && typeof idToken === 'string') initOptions.idToken = idToken;\n if (refreshToken && typeof refreshToken === 'string') initOptions.refreshToken = refreshToken;\n if (isPassedInToken) {\n initOptions.checkLoginIframe = false;\n initOptions.onLoad = undefined;\n }\n }\n return initOptions;\n }, [keycloakInitOptions, token, refreshToken, idToken]);\n\n if (token === true || idToken === true || refreshToken === true) return <LoadingComponent />;\n if (cookies && ssr) {\n return (\n // @ts-ignore\n <SSRKeycloakProvider\n LoadingComponent={<LoadingComponent />}\n // keycloak-js already handles refreshing tokens\n autoRefreshToken={false}\n initOptions={initOptions}\n onEvent={handleEvent}\n onTokens={onTokens}\n persistor={SSRCookies(cookies)}\n keycloakConfig={{\n clientId: keycloakConfig.clientId,\n realm: keycloakConfig.realm,\n url: keycloakConfig.url,\n }}\n >\n <AfterAuth>{children}</AfterAuth>\n </SSRKeycloakProvider>\n );\n }\n if (!keycloak) return <>{children}</>;\n return (\n <ReactKeycloakProvider\n LoadingComponent={<LoadingComponent />}\n authClient={keycloak}\n // keycloak-js already handles refreshing tokens\n autoRefreshToken={false}\n initOptions={initOptions}\n onEvent={handleEvent}\n onTokens={onTokens}\n >\n <AfterAuth>{children}</AfterAuth>\n </ReactKeycloakProvider>\n );\n}\n\nfunction validToken(token: string | boolean, refreshToken?: string | boolean) {\n if (typeof token !== 'string') return token;\n if (refreshToken) {\n if (refreshToken === true || isTokenValid(refreshToken)) return token;\n return false;\n }\n return isTokenValid(token) ? token : false;\n}\n\nfunction isTokenValid(token: string) {\n try {\n const { exp } = JSON.parse(Buffer.from(token.split('.')?.[1] || '', 'base64').toString() || '{}');\n return Math.floor(Date.now() / 1000) <= exp;\n } catch (err) {\n if (err instanceof SyntaxError) return false;\n throw err;\n }\n}\n\nexport const defaultKeycloakInitOptions: KeycloakInitOptions = {\n checkLoginIframe: true,\n checkLoginIframeInterval: 5,\n enableLogging: false,\n onLoad: 'check-sso',\n pkceMethod: 'S256',\n};\n\nexport interface MessageSchema {\n type: string;\n payload?: string;\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6DsD;AArCtD,yBAAqB;AACrB,mBAAiE;AAIjE,uBAA0B;AAC1B,2BAA8B;AAC9B,gCAAsC;AACtC,gCAAgD;AAChD,2BAA8B;AAC9B,mBAA6B;AAC7B,mBAAmC;AACnC,oBAA0B;AAY1B,MAAM,SAAS;AAER,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AA1D1B;AA2DE,QAAM,EAAE,OAAO,iBAAiB,SAAS,oBAAoB,IAAI,QAAI,oCAAc;AACnF,QAAM,gBAAY,2BAAa;AAC/B,QAAM,mBAAmB,qBAAqB,MAAM,2EAAG,kBAAQ,mBAAmB,MAAK;AACvF,QAAM,EAAE,MAAM,IAAI,mCAAc,aAAS,yBAAU,IAAI,EAAE,OAAO,CAAC,EAAE;AACnE,QAAM,CAAC,cAAc,eAAe,QAAI;AAAA,IACtC;AAAA,MACG,oBACG,kBAAkB,YAAU,WAAM,iBAAN,mBAAoB,eAAc,SAC7D,WAAW,UAAU,iBACxB;AAAA,IACJ;AAAA,EACF;AACA,QAAM,CAAC,SAAS,UAAU,QAAI;AAAA,IAC5B;AAAA,MACG,aAAa,YAAU,WAAM,YAAN,mBAAe,eAAc,SAAW,WAAW,UAAU,WAAY;AAAA,MACjG;AAAA,IACF;AAAA,EACF;AACA,QAAM,CAAC,OAAO,QAAQ,QAAI;AAAA,IACxB;AAAA,MACG,WAAW,YAAU,WAAM,UAAN,mBAAa,eAAc,SAAW,WAAW,UAAU,SAAU;AAAA,MAC3F;AAAA,IACF;AAAA,EACF;AACA,QAAM,sBAAkB,iCAAmB;AAE3C,8BAAU,MAAM;AArFlB,QAAAA,KAAAC;AAsFI,QAAI,UAAU,QAAQ,iBAAiB,QAAQ,YAAY;AAAM;AACjE,QAAI;AAAO,aAAO,MAAM,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC1D,KAAC,sBAAsB,CAAC,GAAG,QAAQ,CAAC,QAAgB;AAxFxD,UAAAD,KAAAC,KAAAC;AAyFM,OAAAA,OAAAD,OAAAD,MAAA,iCAAQ,WAAR,gBAAAA,IAAgB,oBAAhB,gBAAAC,IAAkC,SAAlC,gBAAAC,IAAwC,YAAY,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAAA,IACvF,CAAC;AACD,KAAAF,MAAA,iCAAQ,uBAAR,gBAAAA,IAA4B,YAAY,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACzE,KAAAC,MAAA,iCAAQ,WAAR,gBAAAA,IAAgB,YAAY,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAAA,EAC/D,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,QAAI,iBAAiB;AAAM;AAC3B,UAAM,kBAAkB,CAAC,MAAyB;AAChD,UAAI,QAAO,uBAAG,SAAQ;AACtB,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI;AACF,iBAAO,KAAK,MAAM,IAAI;AAAA,QACxB,SAAS,KAAP;AAAA,QAAa;AAAA,MACjB;AACA,UAAI;AAAO,eAAO,MAAM,oBAAoB,IAAI;
|
|
4
|
+
"sourcesContent": ["/**\n * File: /auth/provider/keycloakProvider.tsx\n * Project: app\n * File Created: 08-11-2022 03:12:43\n * Author: Clay Risser\n * -----\n * Last Modified: 22-11-2022 18:07:46\n * Modified By: Clay Risser\n * -----\n * Risser Labs LLC (c) Copyright 2021 - 2022\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Keycloak from '@bitspur/keycloak-js';\nimport React, { useMemo, useEffect, useState, useCallback } from 'react';\nimport type { AuthClientEvent, AuthClientError, AuthClientTokens } from '@bitspur/react-keycloak-core';\nimport type { KeycloakInitOptions, KeycloakConfig } from '@bitspur/keycloak-js';\nimport type { ReactNode, ComponentType } from 'react';\nimport { AfterAuth } from './afterAuth';\nimport { MultiPlatform } from 'multiplatform.one';\nimport { ReactKeycloakProvider } from '@bitspur/react-keycloak-web';\nimport { SSRKeycloakProvider, SSRCookies } from '@bitspur/react-keycloak-ssr';\nimport { useAuthConfig } from '../hooks/useAuthConfig';\nimport { useAuthState } from '../state';\nimport { useIsPassedInToken } from '../hooks';\nimport { useRouter } from 'next/router';\n\nexport interface KeycloakProviderProps {\n children: ReactNode;\n cookies?: unknown;\n keycloakConfig: KeycloakConfig;\n keycloakInitOptions?: KeycloakInitOptions;\n loadingComponent?: ComponentType;\n onEvent?: (eventType: AuthClientEvent, error?: AuthClientError) => void;\n onTokens?: (tokens: AuthClientTokens) => void;\n}\n\nconst logger = console;\n\nexport function KeycloakProvider({\n children,\n cookies,\n keycloakConfig,\n keycloakInitOptions,\n loadingComponent,\n onEvent,\n onTokens,\n}: KeycloakProviderProps) {\n const { debug, ensureFreshness, persist, messageHandlerKeys, ssr } = useAuthConfig();\n const authState = useAuthState();\n const LoadingComponent = loadingComponent || (() => <>{debug ? 'authenticating' : null}</>);\n const { query } = MultiPlatform.isNext ? useRouter() : { query: {} };\n const [refreshToken, setRefreshToken] = useState<string | boolean>(\n validToken(\n (ensureFreshness &&\n (('refreshToken' in query && (query.refreshToken?.toString() || true)) ||\n (persist && authState.refreshToken))) ||\n false,\n ),\n );\n const [idToken, setIdToken] = useState<string | boolean>(\n validToken(\n ('idToken' in query && (query.idToken?.toString() || true)) || (persist && authState.idToken) || false,\n refreshToken,\n ),\n );\n const [token, setToken] = useState<string | boolean>(\n validToken(\n ('token' in query && (query.token?.toString() || true)) || (persist && authState.token) || false,\n refreshToken,\n ),\n );\n const isPassedInToken = useIsPassedInToken();\n\n useEffect(() => {\n if (token !== true && refreshToken !== true && idToken !== true) return;\n if (debug) logger.debug('post message', { type: 'LOADED' });\n (messageHandlerKeys || []).forEach((key: string) => {\n window?.webkit?.messageHandlers?.[key]?.postMessage(JSON.stringify({ type: 'LOADED' }));\n });\n window?.ReactNativeWebView?.postMessage(JSON.stringify({ type: 'LOADED' }));\n window?.parent?.postMessage(JSON.stringify({ type: 'LOADED' }));\n }, []);\n\n useEffect(() => {\n if (refreshToken !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'REFRESH_TOKEN' && message.payload) {\n if (debug) logger.debug('setting refresh token', message.payload);\n setRefreshToken(validToken(message.payload));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'REFRESH_TOKEN',\n payload: '<some_refresh_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n useEffect(() => {\n if (token !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'TOKEN' && message.payload) {\n if (debug) logger.debug('setting token', message.payload);\n setToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'TOKEN',\n payload: '<some_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n useEffect(() => {\n if (idToken !== true) return;\n const messageCallback = (e: MessageEvent<any>) => {\n let data = e?.data || null;\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (err) {}\n }\n if (debug) logger.debug('received message', JSON.stringify(data));\n const message: MessageSchema = data;\n if (!message.type) return;\n if (message.type.toUpperCase() === 'ID_TOKEN' && message.payload) {\n if (debug) logger.debug('setting id token', message.payload);\n setIdToken(validToken(message.payload, refreshToken));\n }\n };\n if (debug) {\n logger.debug('listening for message', {\n type: 'ID_TOKEN',\n payload: '<some_id_token>',\n });\n }\n window.addEventListener('message', messageCallback);\n return () => {\n window.removeEventListener('message', messageCallback);\n };\n }, []);\n\n const handleEvent = useCallback((eventType: AuthClientEvent, error?: AuthClientError) => {\n if (error) {\n if (typeof error === 'string') throw new Error(error);\n const err: Error & { errorDescription?: string } = new Error(error.error);\n err.errorDescription = error.error_description;\n throw err;\n }\n if (onEvent) onEvent(eventType, error);\n }, []);\n\n const keycloak = useMemo(\n () =>\n typeof window !== 'undefined' &&\n new Keycloak({\n url: keycloakConfig.url,\n realm: keycloakConfig.realm,\n clientId: keycloakConfig.clientId,\n }),\n [keycloakInitOptions, token, refreshToken, idToken],\n );\n\n const initOptions = useMemo(() => {\n const initOptions = {\n ...defaultKeycloakInitOptions,\n ...keycloakInitOptions,\n };\n if (debug) initOptions.enableLogging = true;\n if (token && typeof token === 'string') {\n initOptions.token = token;\n if (idToken && typeof idToken === 'string') initOptions.idToken = idToken;\n if (refreshToken && typeof refreshToken === 'string') initOptions.refreshToken = refreshToken;\n if (isPassedInToken) {\n initOptions.checkLoginIframe = false;\n initOptions.flow = 'implicit';\n initOptions.onLoad = undefined;\n }\n }\n return initOptions;\n }, [keycloakInitOptions, token, refreshToken, idToken]);\n\n if (token === true || idToken === true || refreshToken === true) return <LoadingComponent />;\n if (!isPassedInToken && cookies && ssr) {\n return (\n // @ts-ignore\n <SSRKeycloakProvider\n LoadingComponent={<LoadingComponent />}\n // keycloak-js already handles refreshing tokens\n autoRefreshToken={false}\n initOptions={initOptions}\n onEvent={handleEvent}\n onTokens={onTokens}\n persistor={SSRCookies(cookies)}\n keycloakConfig={{\n clientId: keycloakConfig.clientId,\n realm: keycloakConfig.realm,\n url: keycloakConfig.url,\n }}\n >\n <AfterAuth>{children}</AfterAuth>\n </SSRKeycloakProvider>\n );\n }\n if (!keycloak) return <>{children}</>;\n return (\n <ReactKeycloakProvider\n LoadingComponent={<LoadingComponent />}\n authClient={keycloak}\n // keycloak-js already handles refreshing tokens\n autoRefreshToken={false}\n initOptions={initOptions}\n onEvent={handleEvent}\n onTokens={onTokens}\n >\n <AfterAuth>{children}</AfterAuth>\n </ReactKeycloakProvider>\n );\n}\n\nfunction validToken(token: string | boolean, refreshToken?: string | boolean) {\n if (typeof token !== 'string') return token;\n if (refreshToken) {\n if (refreshToken === true || isTokenValid(refreshToken)) return token;\n return false;\n }\n return isTokenValid(token) ? token : false;\n}\n\nfunction isTokenValid(token: string) {\n try {\n const { exp } = JSON.parse(Buffer.from(token.split('.')?.[1] || '', 'base64').toString() || '{}');\n return Math.floor(Date.now() / 1000) <= exp;\n } catch (err) {\n if (err instanceof SyntaxError) return false;\n throw err;\n }\n}\n\nexport const defaultKeycloakInitOptions: KeycloakInitOptions = {\n checkLoginIframe: true,\n checkLoginIframeInterval: 5,\n enableLogging: false,\n onLoad: 'check-sso',\n pkceMethod: 'S256',\n};\n\nexport interface MessageSchema {\n type: string;\n payload?: string;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["_a", "_b", "_c", "Keycloak", "initOptions"]
|
|
7
7
|
}
|