@multiplatform.one/keycloak 0.3.5 → 0.3.7

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.
@@ -95,7 +95,7 @@ function KeycloakProvider({
95
95
  if (token !== true && refreshToken !== true && idToken !== true)
96
96
  return;
97
97
  if (debug)
98
- logger.debug("post message", { type: "LOADED" });
98
+ logger.debug("post message", JSON.stringify({ type: "LOADED" }));
99
99
  (messageHandlerKeys || []).forEach((key) => {
100
100
  var _a3, _b3, _c2;
101
101
  (_c2 = (_b3 = (_a3 = window == null ? void 0 : window.webkit) == null ? void 0 : _a3.messageHandlers) == null ? void 0 : _b3[key]) == null ? void 0 : _c2.postMessage(JSON.stringify({ type: "LOADED" }));
@@ -124,12 +124,16 @@ function KeycloakProvider({
124
124
  logger.debug("setting refresh token", message.payload);
125
125
  setRefreshToken(validToken(message.payload));
126
126
  }
127
+ window.removeEventListener("message", messageCallback);
127
128
  };
128
129
  if (debug) {
129
- logger.debug("listening for message", {
130
- type: "REFRESH_TOKEN",
131
- payload: "<some_refresh_token>"
132
- });
130
+ logger.debug(
131
+ "listening for message",
132
+ JSON.stringify({
133
+ type: "REFRESH_TOKEN",
134
+ payload: "<some_refresh_token>"
135
+ })
136
+ );
133
137
  }
134
138
  window.addEventListener("message", messageCallback);
135
139
  return () => {
@@ -157,12 +161,16 @@ function KeycloakProvider({
157
161
  logger.debug("setting token", message.payload);
158
162
  setToken(validToken(message.payload, refreshToken));
159
163
  }
164
+ window.removeEventListener("message", messageCallback);
160
165
  };
161
166
  if (debug) {
162
- logger.debug("listening for message", {
163
- type: "TOKEN",
164
- payload: "<some_token>"
165
- });
167
+ logger.debug(
168
+ "listening for message",
169
+ JSON.stringify({
170
+ type: "TOKEN",
171
+ payload: "<some_token>"
172
+ })
173
+ );
166
174
  }
167
175
  window.addEventListener("message", messageCallback);
168
176
  return () => {
@@ -190,12 +198,16 @@ function KeycloakProvider({
190
198
  logger.debug("setting id token", message.payload);
191
199
  setIdToken(validToken(message.payload, refreshToken));
192
200
  }
201
+ window.removeEventListener("message", messageCallback);
193
202
  };
194
203
  if (debug) {
195
- logger.debug("listening for message", {
196
- type: "ID_TOKEN",
197
- payload: "<some_id_token>"
198
- });
204
+ logger.debug(
205
+ "listening for message",
206
+ JSON.stringify({
207
+ type: "ID_TOKEN",
208
+ payload: "<some_id_token>"
209
+ })
210
+ );
199
211
  }
200
212
  window.addEventListener("message", messageCallback);
201
213
  return () => {
@@ -233,14 +245,12 @@ function KeycloakProvider({
233
245
  initOptions2.refreshToken = refreshToken;
234
246
  if (isPassedInToken) {
235
247
  initOptions2.checkLoginIframe = false;
248
+ initOptions2.flow = "implicit";
236
249
  initOptions2.onLoad = void 0;
237
250
  }
238
251
  }
239
252
  return initOptions2;
240
253
  }, [keycloakInitOptions, token, refreshToken, idToken]);
241
- console.log("token", token);
242
- console.log("idToken", idToken);
243
- console.log("refreshToken", refreshToken);
244
254
  if (token === true || idToken === true || refreshToken === true)
245
255
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadingComponent, {});
246
256
  if (!isPassedInToken && cookies && ssr) {
@@ -265,7 +275,6 @@ function KeycloakProvider({
265
275
  )
266
276
  );
267
277
  }
268
- console.log("keycloak", keycloak);
269
278
  if (!keycloak)
270
279
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children });
271
280
  return /* @__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', 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.onLoad = undefined;\n }\n }\n return initOptions;\n }, [keycloakInitOptions, token, refreshToken, idToken]);\n\n console.log('token', token);\n console.log('idToken', idToken);\n console.log('refreshToken', refreshToken);\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 console.log('keycloak', keycloak);\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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",
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', JSON.stringify({ 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 window.removeEventListener('message', messageCallback);\n };\n if (debug) {\n logger.debug(\n 'listening for message',\n JSON.stringify({\n type: 'REFRESH_TOKEN',\n payload: '<some_refresh_token>',\n }),\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 window.removeEventListener('message', messageCallback);\n };\n if (debug) {\n logger.debug(\n 'listening for message',\n JSON.stringify({\n type: 'TOKEN',\n payload: '<some_token>',\n }),\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 window.removeEventListener('message', messageCallback);\n };\n if (debug) {\n logger.debug(\n 'listening for message',\n JSON.stringify({\n type: 'ID_TOKEN',\n payload: '<some_id_token>',\n }),\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
  }