@spidy092/auth-client 3.1.4 → 3.1.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/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  // token.js
2
2
  import { jwtDecode } from "jwt-decode";
3
3
  var accessToken = null;
4
+ var idToken = null;
4
5
  var listeners = /* @__PURE__ */ new Set();
5
6
  var REFRESH_COOKIE = "account_refresh_token";
7
+ var ID_TOKEN_KEY = "auth_id_token";
6
8
  var COOKIE_MAX_AGE = 7 * 24 * 60 * 60;
7
9
  function secureAttribute() {
8
10
  var _a;
@@ -81,12 +83,14 @@ function getToken() {
81
83
  function clearToken() {
82
84
  if (!accessToken) {
83
85
  writeAccessToken(null);
86
+ clearIdToken();
84
87
  clearRefreshToken();
85
88
  return;
86
89
  }
87
90
  const previousToken = accessToken;
88
91
  accessToken = null;
89
92
  writeAccessToken(null);
93
+ clearIdToken();
90
94
  clearRefreshToken();
91
95
  listeners.forEach((listener) => {
92
96
  try {
@@ -96,6 +100,30 @@ function clearToken() {
96
100
  }
97
101
  });
98
102
  }
103
+ function setIdToken(token) {
104
+ idToken = token || null;
105
+ try {
106
+ if (idToken) sessionStorage.setItem(ID_TOKEN_KEY, idToken);
107
+ else sessionStorage.removeItem(ID_TOKEN_KEY);
108
+ } catch {
109
+ }
110
+ }
111
+ function getIdToken() {
112
+ if (idToken) return idToken;
113
+ try {
114
+ idToken = sessionStorage.getItem(ID_TOKEN_KEY) || null;
115
+ } catch {
116
+ idToken = null;
117
+ }
118
+ return idToken;
119
+ }
120
+ function clearIdToken() {
121
+ idToken = null;
122
+ try {
123
+ sessionStorage.removeItem(ID_TOKEN_KEY);
124
+ } catch {
125
+ }
126
+ }
99
127
  var REFRESH_TOKEN_KEY = "auth_refresh_token";
100
128
  var _persistRefreshToken = false;
101
129
  function enableRefreshTokenPersistence(enabled) {
@@ -441,6 +469,7 @@ async function logout(options = {}) {
441
469
  const { clientKey, authBaseUrl, accountUiUrl } = getConfig();
442
470
  const scope = options.scope === "client" ? "client" : "sso";
443
471
  const token = getToken();
472
+ const idToken2 = getIdToken();
444
473
  const refreshToken2 = getRefreshToken();
445
474
  console.log("\u{1F6AA} Smart Logout initiated", {
446
475
  mode: isRouterMode() ? "ROUTER" : "CLIENT",
@@ -449,6 +478,7 @@ async function logout(options = {}) {
449
478
  });
450
479
  emitAuthDiagnostic("LOGOUT_INITIATED", "PENDING", "NONE", { clientKey });
451
480
  clearToken();
481
+ clearIdToken();
452
482
  clearRefreshToken();
453
483
  sessionStorage.removeItem("originalApp");
454
484
  sessionStorage.removeItem("returnUrl");
@@ -461,7 +491,7 @@ async function logout(options = {}) {
461
491
  "Authorization": token ? `Bearer ${token}` : "",
462
492
  "Content-Type": "application/json"
463
493
  },
464
- body: JSON.stringify({ refreshToken: refreshToken2, scope })
494
+ body: JSON.stringify({ refreshToken: refreshToken2, idToken: idToken2, scope })
465
495
  });
466
496
  if (!response.ok) {
467
497
  throw new Error(`Logout failed: ${response.status}`);
@@ -495,9 +525,11 @@ async function logout(options = {}) {
495
525
  function handleCallback() {
496
526
  const params = new URLSearchParams(window.location.search);
497
527
  const accessToken2 = params.get("access_token");
528
+ const idToken2 = params.get("id_token");
498
529
  const error = params.get("error");
499
530
  console.log("\u{1F504} Callback handling:", {
500
531
  hasAccessToken: !!accessToken2,
532
+ hasIdToken: !!idToken2,
501
533
  error
502
534
  });
503
535
  if (callbackProcessed) {
@@ -525,6 +557,7 @@ function handleCallback() {
525
557
  }
526
558
  if (accessToken2) {
527
559
  setToken(accessToken2);
560
+ if (idToken2) setIdToken(idToken2);
528
561
  const refreshTokenInUrl = params.get("refresh_token");
529
562
  if (refreshTokenInUrl) {
530
563
  emitAuthDiagnostic("CALLBACK_REFRESH_TOKEN_IGNORED", "WARNING", "REFRESH_TOKEN_IN_URL", {
@@ -533,6 +566,7 @@ function handleCallback() {
533
566
  }
534
567
  const url = new URL(window.location);
535
568
  url.searchParams.delete("access_token");
569
+ url.searchParams.delete("id_token");
536
570
  url.searchParams.delete("refresh_token");
537
571
  url.searchParams.delete("state");
538
572
  url.searchParams.delete("error");
@@ -1217,6 +1251,7 @@ function AuthProvider({ children, onSessionExpired, manageSessionSecurity = true
1217
1251
  const onSessionExpiredRef = useRef(onSessionExpired);
1218
1252
  const recoveryInFlightRef = useRef(null);
1219
1253
  const profileRecoveryTokensRef = useRef(/* @__PURE__ */ new Set());
1254
+ const profileLoadedRef = useRef(false);
1220
1255
  useEffect(() => {
1221
1256
  onSessionExpiredRef.current = onSessionExpired;
1222
1257
  }, [onSessionExpired]);
@@ -1226,8 +1261,9 @@ function AuthProvider({ children, onSessionExpired, manageSessionSecurity = true
1226
1261
  setTokenState(nextToken);
1227
1262
  if (nextToken) {
1228
1263
  setSessionValid(true);
1229
- setLoading(true);
1264
+ if (!profileLoadedRef.current) setLoading(true);
1230
1265
  } else {
1266
+ profileLoadedRef.current = false;
1231
1267
  setSessionValid(false);
1232
1268
  setUser(null);
1233
1269
  setLoading(false);
@@ -1239,6 +1275,7 @@ function AuthProvider({ children, onSessionExpired, manageSessionSecurity = true
1239
1275
  clearToken();
1240
1276
  setTokenState(null);
1241
1277
  setUser(null);
1278
+ profileLoadedRef.current = false;
1242
1279
  setSessionValid(false);
1243
1280
  setLoading(false);
1244
1281
  };
@@ -1254,7 +1291,7 @@ function AuthProvider({ children, onSessionExpired, manageSessionSecurity = true
1254
1291
  if (recoveredToken) {
1255
1292
  setTokenState(recoveredToken);
1256
1293
  setSessionValid(true);
1257
- setLoading(true);
1294
+ if (!profileLoadedRef.current) setLoading(true);
1258
1295
  return true;
1259
1296
  }
1260
1297
  } catch (error) {
@@ -1331,6 +1368,7 @@ function AuthProvider({ children, onSessionExpired, manageSessionSecurity = true
1331
1368
  const userData = (responseBody == null ? void 0 : responseBody.data) ?? responseBody;
1332
1369
  console.log("\u2705 Profile fetched successfully:", userData.email);
1333
1370
  setUser(userData);
1371
+ profileLoadedRef.current = true;
1334
1372
  setSessionValid(true);
1335
1373
  setLoading(false);
1336
1374
  } catch (error) {
@@ -1365,6 +1403,7 @@ function AuthProvider({ children, onSessionExpired, manageSessionSecurity = true
1365
1403
  if (cancelled) return;
1366
1404
  const userData = (responseBody == null ? void 0 : responseBody.data) ?? responseBody;
1367
1405
  setUser(userData);
1406
+ profileLoadedRef.current = true;
1368
1407
  setSessionValid(true);
1369
1408
  setLoading(false);
1370
1409
  return;
@@ -1411,7 +1450,7 @@ function AuthProvider({ children, onSessionExpired, manageSessionSecurity = true
1411
1450
  setToken(newToken);
1412
1451
  setTokenState(newToken);
1413
1452
  setSessionValid(true);
1414
- if (newToken) setLoading(true);
1453
+ if (newToken && !profileLoadedRef.current) setLoading(true);
1415
1454
  },
1416
1455
  clearToken: () => {
1417
1456
  stopSessionSecurity();
@@ -1419,6 +1458,7 @@ function AuthProvider({ children, onSessionExpired, manageSessionSecurity = true
1419
1458
  clearToken();
1420
1459
  setTokenState(null);
1421
1460
  setUser(null);
1461
+ profileLoadedRef.current = false;
1422
1462
  }
1423
1463
  };
1424
1464
  return /* @__PURE__ */ React.createElement(AuthContext.Provider, { value }, children);
@@ -1596,6 +1636,9 @@ var auth = {
1596
1636
  getToken,
1597
1637
  setToken,
1598
1638
  clearToken,
1639
+ setIdToken,
1640
+ getIdToken,
1641
+ clearIdToken,
1599
1642
  setRefreshToken,
1600
1643
  // ✅ Refresh token for HTTP dev
1601
1644
  getRefreshToken,