@spidy092/auth-client 3.1.3 → 3.1.5

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.
@@ -5,8 +5,10 @@ import { useEffect as useEffect3, useCallback } from "react";
5
5
  // token.js
6
6
  import { jwtDecode } from "jwt-decode";
7
7
  var accessToken = null;
8
+ var idToken = null;
8
9
  var listeners = /* @__PURE__ */ new Set();
9
10
  var REFRESH_COOKIE = "account_refresh_token";
11
+ var ID_TOKEN_KEY = "auth_id_token";
10
12
  var COOKIE_MAX_AGE = 7 * 24 * 60 * 60;
11
13
  function secureAttribute() {
12
14
  var _a;
@@ -85,12 +87,14 @@ function getToken() {
85
87
  function clearToken() {
86
88
  if (!accessToken) {
87
89
  writeAccessToken(null);
90
+ clearIdToken();
88
91
  clearRefreshToken();
89
92
  return;
90
93
  }
91
94
  const previousToken = accessToken;
92
95
  accessToken = null;
93
96
  writeAccessToken(null);
97
+ clearIdToken();
94
98
  clearRefreshToken();
95
99
  listeners.forEach((listener) => {
96
100
  try {
@@ -100,6 +104,30 @@ function clearToken() {
100
104
  }
101
105
  });
102
106
  }
107
+ function setIdToken(token) {
108
+ idToken = token || null;
109
+ try {
110
+ if (idToken) sessionStorage.setItem(ID_TOKEN_KEY, idToken);
111
+ else sessionStorage.removeItem(ID_TOKEN_KEY);
112
+ } catch {
113
+ }
114
+ }
115
+ function getIdToken() {
116
+ if (idToken) return idToken;
117
+ try {
118
+ idToken = sessionStorage.getItem(ID_TOKEN_KEY) || null;
119
+ } catch {
120
+ idToken = null;
121
+ }
122
+ return idToken;
123
+ }
124
+ function clearIdToken() {
125
+ idToken = null;
126
+ try {
127
+ sessionStorage.removeItem(ID_TOKEN_KEY);
128
+ } catch {
129
+ }
130
+ }
103
131
  var REFRESH_TOKEN_KEY = "auth_refresh_token";
104
132
  var _persistRefreshToken = false;
105
133
  function enableRefreshTokenPersistence(enabled) {
@@ -344,6 +372,28 @@ function clearLoginLock() {
344
372
  } catch {
345
373
  }
346
374
  }
375
+ async function reportClientDiagnostic(safe) {
376
+ if (typeof fetch !== "function" || typeof getToken !== "function") return;
377
+ if (safe.outcome === "SUCCESS" && !safe.event.startsWith("PROFILE_") && !safe.event.startsWith("SESSION_")) return;
378
+ const { authBaseUrl } = getConfig();
379
+ const token = getToken();
380
+ if (!authBaseUrl || !token) return;
381
+ try {
382
+ await fetch(`${authBaseUrl.replace(/\/+$/, "")}/client-telemetry`, {
383
+ method: "POST",
384
+ credentials: "include",
385
+ keepalive: true,
386
+ headers: {
387
+ "Content-Type": "application/json",
388
+ Authorization: `Bearer ${token}`,
389
+ "X-Correlation-ID": safe.correlationId,
390
+ "X-Request-ID": safe.correlationId
391
+ },
392
+ body: JSON.stringify(safe)
393
+ });
394
+ } catch {
395
+ }
396
+ }
347
397
  async function emitAuthDiagnostic(event, outcome, reasonCode, details = {}) {
348
398
  const context = getDiagnosticContext();
349
399
  const safe = {
@@ -360,6 +410,7 @@ async function emitAuthDiagnostic(event, outcome, reasonCode, details = {}) {
360
410
  };
361
411
  const method = outcome === "FAILURE" ? "error" : outcome === "WARNING" ? "warn" : "info";
362
412
  console[method]("[auth-client]", safe);
413
+ void reportClientDiagnostic(safe);
363
414
  return safe;
364
415
  }
365
416
 
@@ -422,6 +473,7 @@ async function logout(options = {}) {
422
473
  const { clientKey, authBaseUrl, accountUiUrl } = getConfig();
423
474
  const scope = options.scope === "client" ? "client" : "sso";
424
475
  const token = getToken();
476
+ const idToken2 = getIdToken();
425
477
  const refreshToken2 = getRefreshToken();
426
478
  console.log("\u{1F6AA} Smart Logout initiated", {
427
479
  mode: isRouterMode() ? "ROUTER" : "CLIENT",
@@ -430,6 +482,7 @@ async function logout(options = {}) {
430
482
  });
431
483
  emitAuthDiagnostic("LOGOUT_INITIATED", "PENDING", "NONE", { clientKey });
432
484
  clearToken();
485
+ clearIdToken();
433
486
  clearRefreshToken();
434
487
  sessionStorage.removeItem("originalApp");
435
488
  sessionStorage.removeItem("returnUrl");
@@ -442,7 +495,7 @@ async function logout(options = {}) {
442
495
  "Authorization": token ? `Bearer ${token}` : "",
443
496
  "Content-Type": "application/json"
444
497
  },
445
- body: JSON.stringify({ refreshToken: refreshToken2, scope })
498
+ body: JSON.stringify({ refreshToken: refreshToken2, idToken: idToken2, scope })
446
499
  });
447
500
  if (!response.ok) {
448
501
  throw new Error(`Logout failed: ${response.status}`);
@@ -476,9 +529,11 @@ async function logout(options = {}) {
476
529
  function handleCallback() {
477
530
  const params = new URLSearchParams(window.location.search);
478
531
  const accessToken2 = params.get("access_token");
532
+ const idToken2 = params.get("id_token");
479
533
  const error = params.get("error");
480
534
  console.log("\u{1F504} Callback handling:", {
481
535
  hasAccessToken: !!accessToken2,
536
+ hasIdToken: !!idToken2,
482
537
  error
483
538
  });
484
539
  if (callbackProcessed) {
@@ -506,6 +561,7 @@ function handleCallback() {
506
561
  }
507
562
  if (accessToken2) {
508
563
  setToken(accessToken2);
564
+ if (idToken2) setIdToken(idToken2);
509
565
  const refreshTokenInUrl = params.get("refresh_token");
510
566
  if (refreshTokenInUrl) {
511
567
  emitAuthDiagnostic("CALLBACK_REFRESH_TOKEN_IGNORED", "WARNING", "REFRESH_TOKEN_IN_URL", {
@@ -514,6 +570,7 @@ function handleCallback() {
514
570
  }
515
571
  const url = new URL(window.location);
516
572
  url.searchParams.delete("access_token");
573
+ url.searchParams.delete("id_token");
517
574
  url.searchParams.delete("refresh_token");
518
575
  url.searchParams.delete("state");
519
576
  url.searchParams.delete("error");
@@ -1218,6 +1275,9 @@ var auth = {
1218
1275
  getToken,
1219
1276
  setToken,
1220
1277
  clearToken,
1278
+ setIdToken,
1279
+ getIdToken,
1280
+ clearIdToken,
1221
1281
  setRefreshToken,
1222
1282
  // ✅ Refresh token for HTTP dev
1223
1283
  getRefreshToken,