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/README.md +210 -2
- package/dist/index.d.mts +22 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +39 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +39 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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));
|