@multiplatform.one/keycloak 0.2.10 → 0.2.11

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/keycloak",
3
- "version": "0.2.10",
3
+ "version": "0.2.11",
4
4
  "description": "keycloak client for multiplatform.one ecosystem",
5
5
  "main": "dist/lib",
6
6
  "module": "dist/esm",
@@ -23,7 +23,8 @@
23
23
  */
24
24
 
25
25
  import Keycloak from '@bitspur/keycloak-js';
26
- import React, { useMemo, useEffect, useState } from 'react';
26
+ import React, { useMemo, useEffect, useState, useCallback } from 'react';
27
+ import type { AuthClientEvent, AuthClientError, AuthClientTokens } from '@bitspur/react-keycloak-core';
27
28
  import type { KeycloakInitOptions } from '@bitspur/keycloak-js';
28
29
  import type { ReactNode, ComponentType } from 'react';
29
30
  import { AfterAuth } from './afterAuth';
@@ -42,6 +43,8 @@ export interface KeycloakProviderProps {
42
43
  keycloakConfig: KeycloakConfig;
43
44
  keycloakInitOptions?: KeycloakInitOptions;
44
45
  loadingComponent?: ComponentType;
46
+ onEvent?: (eventType: AuthClientEvent, error?: AuthClientError) => void;
47
+ onTokens?: (tokens: AuthClientTokens) => void;
45
48
  }
46
49
 
47
50
  const logger = console;
@@ -53,6 +56,8 @@ export function KeycloakProvider({
53
56
  keycloakConfig,
54
57
  keycloakInitOptions,
55
58
  loadingComponent,
59
+ onEvent,
60
+ onTokens,
56
61
  }: KeycloakProviderProps) {
57
62
  const authState = useAuthState();
58
63
  const LoadingComponent = loadingComponent || (() => <>{debug ? 'authenticating' : null}</>);
@@ -169,6 +174,15 @@ export function KeycloakProvider({
169
174
  };
170
175
  }, []);
171
176
 
177
+ const handleEvent = useCallback((eventType: AuthClientEvent, error?: AuthClientError) => {
178
+ if (error) {
179
+ const err: Error & { errorDescription?: string } = new Error(error.error);
180
+ err.errorDescription = error.error_description;
181
+ throw err;
182
+ }
183
+ if (onEvent) onEvent(eventType, error);
184
+ }, []);
185
+
172
186
  const keycloak = useMemo(
173
187
  () =>
174
188
  typeof window !== 'undefined' &&
@@ -203,14 +217,16 @@ export function KeycloakProvider({
203
217
  return (
204
218
  // @ts-ignore
205
219
  <SSRKeycloakProvider
220
+ LoadingComponent={<LoadingComponent />}
206
221
  initOptions={initOptions}
222
+ onEvent={handleEvent}
223
+ onTokens={onTokens}
224
+ persistor={SSRCookies(cookies)}
207
225
  keycloakConfig={{
208
- url: keycloakConfig.baseUrl,
209
- realm: keycloakConfig.realm,
210
226
  clientId: keycloakConfig.clientId,
227
+ realm: keycloakConfig.realm,
228
+ url: keycloakConfig.baseUrl,
211
229
  }}
212
- persistor={SSRCookies(cookies)}
213
- LoadingComponent={<LoadingComponent />}
214
230
  >
215
231
  <AfterAuth>{children}</AfterAuth>
216
232
  </SSRKeycloakProvider>
@@ -218,7 +234,13 @@ export function KeycloakProvider({
218
234
  }
219
235
  if (!keycloak) return <>{children}</>;
220
236
  return (
221
- <ReactKeycloakProvider initOptions={initOptions} authClient={keycloak} LoadingComponent={<LoadingComponent />}>
237
+ <ReactKeycloakProvider
238
+ LoadingComponent={<LoadingComponent />}
239
+ authClient={keycloak}
240
+ initOptions={initOptions}
241
+ onEvent={handleEvent}
242
+ onTokens={onTokens}
243
+ >
222
244
  <AfterAuth>{children}</AfterAuth>
223
245
  </ReactKeycloakProvider>
224
246
  );