antaeus.keycloak.react 2.1.3 → 2.2.1

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/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
2
2
  import { useAuth as useAuth$1, AuthProvider } from 'react-oidc-context';
3
+ import { WebStorageStateStore, User } from 'oidc-client-ts';
3
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
5
  import { useLocation } from 'react-router-dom';
5
6
  import { QRCodeSVG } from 'qrcode.react';
6
- import { User } from 'oidc-client-ts';
7
7
 
8
8
  // src/components/KeycloakProvider.tsx
9
9
 
@@ -33,7 +33,8 @@ var defaultConfig = {
33
33
  responseType: "code",
34
34
  codeChallengeMethod: "S256",
35
35
  loadUserInfo: true,
36
- automaticSilentSignIn: false
36
+ automaticSilentSignIn: false,
37
+ storageType: "session"
37
38
  },
38
39
  events: {}
39
40
  };
@@ -50,6 +51,8 @@ var KeycloakConfigBuilder = class {
50
51
  static build(userConfig) {
51
52
  this.validate(userConfig);
52
53
  const config = this.mergeWithDefaults(userConfig);
54
+ const storageType = config.advanced.storageType || "session";
55
+ const storage = storageType === "local" ? window.localStorage : window.sessionStorage;
53
56
  const oidcSettings = {
54
57
  authority: config.authority,
55
58
  client_id: config.clientId,
@@ -60,6 +63,8 @@ var KeycloakConfigBuilder = class {
60
63
  automaticSilentRenew: config.silentRenew.enabled,
61
64
  loadUserInfo: config.advanced.loadUserInfo,
62
65
  silent_redirect_uri: config.silentRenew.silentRedirectUri,
66
+ // Configure storage for user data and tokens
67
+ userStore: new WebStorageStateStore({ store: storage }),
63
68
  // Add PKCE support (required for public clients)
64
69
  ...config.advanced.codeChallengeMethod && {
65
70
  response_mode: "query"
@@ -1382,6 +1387,15 @@ var DeviceLogin = ({
1382
1387
  useEffect(() => {
1383
1388
  if (!deviceData) return;
1384
1389
  userManagerRef.current = auth.userManager;
1390
+ if (userManagerRef.current) {
1391
+ const settings = userManagerRef.current.settings;
1392
+ console.log("[DeviceLogin] UserManager storage configured:", {
1393
+ hasUserStore: !!settings.userStore,
1394
+ storeType: settings.userStore ? "configured" : "default"
1395
+ });
1396
+ } else {
1397
+ console.error("[DeviceLogin] UserManager is not available in auth context");
1398
+ }
1385
1399
  const poll = async () => {
1386
1400
  try {
1387
1401
  const tokenResponse = await pollForToken(apiBaseUrl, deviceData.device_code);
@@ -1393,18 +1407,39 @@ var DeviceLogin = ({
1393
1407
  const user = new User({
1394
1408
  id_token: tokenResponse.id_token || "",
1395
1409
  access_token: tokenResponse.access_token,
1396
- token_type: tokenResponse.token_type,
1410
+ token_type: tokenResponse.token_type || "Bearer",
1397
1411
  profile: userInfo,
1398
1412
  expires_at: Math.floor(Date.now() / 1e3) + tokenResponse.expires_in,
1399
1413
  scope: tokenResponse.scope,
1400
- refresh_token: tokenResponse.refresh_token
1414
+ refresh_token: tokenResponse.refresh_token,
1415
+ session_state: null
1416
+ // Device flow doesn't have session_state
1401
1417
  });
1402
1418
  if (userManagerRef.current) {
1419
+ console.log("[DeviceLogin] Storing user in UserManager...", {
1420
+ hasAccessToken: !!user.access_token,
1421
+ hasRefreshToken: !!user.refresh_token,
1422
+ expiresAt: user.expires_at
1423
+ });
1403
1424
  await userManagerRef.current.storeUser(user);
1425
+ console.log("[DeviceLogin] User stored successfully");
1426
+ const storedUser = await userManagerRef.current.getUser();
1427
+ if (!storedUser) {
1428
+ console.error("[DeviceLogin] Failed to retrieve stored user!");
1429
+ throw new Error("Failed to store user session. Please try again.");
1430
+ }
1431
+ console.log("[DeviceLogin] Verified user in storage:", {
1432
+ hasAccessToken: !!storedUser.access_token,
1433
+ profile: storedUser.profile?.preferred_username
1434
+ });
1404
1435
  const events = userManagerRef.current.events;
1405
1436
  if (events && events._userLoaded) {
1406
1437
  events._userLoaded.raise(user);
1438
+ console.log("[DeviceLogin] Triggered user loaded event");
1407
1439
  }
1440
+ } else {
1441
+ console.error("[DeviceLogin] UserManager not available, cannot store user");
1442
+ throw new Error("UserManager not available. Cannot complete login.");
1408
1443
  }
1409
1444
  if (onSuccess) {
1410
1445
  await new Promise((resolve) => setTimeout(resolve, 100));