@burdenoff/fe-libs 2026.518.6 → 2026.519.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.
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/shell/AuthProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/shell/AuthProvider.tsx"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
1
  import { resolveGatewayUrls as e } from "../../config/gatewayUrls.js";
2
- import { PROFILE_STORAGE_CHANGE_EVENT as t, addProfile as n, getActiveProfileId as r, getProfileTokens as i, getProfileUser as a, getProfileWorkspaceToken as o, getProfiles as s, loginProfile as c, logoutAllProfiles as ee, removeProfile as l, resolveActiveProfileId as u, setActiveProfileId as d, setProfileTokens as f, setProfileUser as te, setProfileWorkspaceToken as ne, setProfiles as p, switchProfile as re } from "./ProfileStorageManager.js";
3
- import { clearShellSsoCookies as m, isSharedSsoCookieDomain as ie, isTrustedSsoOrigin as h, readShellSsoCookie as g, setShellSsoCookies as ae } from "../../utils/authCookie.js";
4
- import { getAuthBridge as _, initAuthBridge as oe, isAuthBridgeInitialized as se } from "./AuthBridgeClient.js";
5
- import { checkRemoteSLO as ce, checkSLO as le, clearLocalAuthState as v, hasRecentSSORedirectAttempt as y, markSSORedirectAttempt as b, shouldSkipSSORedirect as x } from "../../components/SSORedirectGuard.js";
6
- import { createContext as S, useCallback as C, useContext as w, useEffect as T, useMemo as ue, useRef as de, useState as E } from "react";
7
- import { jsx as fe } from "react/jsx-runtime";
2
+ import { resolveAuthBridgeConfig as t } from "../../config/authBridgeUrls.js";
3
+ import { PROFILE_STORAGE_CHANGE_EVENT as n, addProfile as r, getActiveProfileId as i, getProfileTokens as a, getProfileUser as o, getProfileWorkspaceToken as s, getProfiles as c, loginProfile as ee, logoutAllProfiles as te, removeProfile as l, resolveActiveProfileId as u, setActiveProfileId as d, setProfileTokens as f, setProfileUser as p, setProfileWorkspaceToken as m, setProfiles as h, switchProfile as ne } from "./ProfileStorageManager.js";
4
+ import { clearShellSsoCookies as g, isSharedSsoCookieDomain as re, isTrustedSsoOrigin as _, readShellSsoCookie as v, setShellSsoCookies as ie } from "../../utils/authCookie.js";
5
+ import { getAuthBridge as y, initAuthBridge as ae, isAuthBridgeInitialized as oe } from "./AuthBridgeClient.js";
6
+ import { checkRemoteSLO as se, checkSLO as ce, clearLocalAuthState as b, hasRecentSSORedirectAttempt as x, markSSORedirectAttempt as S, shouldSkipSSORedirect as C } from "../../components/SSORedirectGuard.js";
7
+ import { createContext as w, useCallback as T, useContext as E, useEffect as D, useMemo as le, useRef as ue, useState as O } from "react";
8
+ import { jsx as de } from "react/jsx-runtime";
8
9
  //#region src/shared/providers/shell/AuthProvider.tsx
9
- var D = S(null);
10
- function O(e) {
10
+ var k = w(null);
11
+ function A(e) {
11
12
  try {
12
13
  let t = e.split(".");
13
14
  if (t.length !== 3) return null;
@@ -17,10 +18,10 @@ function O(e) {
17
18
  return null;
18
19
  }
19
20
  }
20
- function k(e) {
21
+ function j(e) {
21
22
  return e.trigger;
22
23
  }
23
- function A(e, t, n) {
24
+ function M(e, t, n) {
24
25
  let r = (Array.isArray(e.profiles) ? e.profiles : []).map((e) => {
25
26
  let t = typeof e.id == "string" ? e.id : null, n = typeof e.email == "string" ? e.email : null;
26
27
  return !t || !n ? null : {
@@ -39,14 +40,25 @@ function A(e, t, n) {
39
40
  lastLogin: (/* @__PURE__ */ new Date()).toISOString()
40
41
  }];
41
42
  }
42
- function pe(e) {
43
- let n = k(e);
44
- if (n === "logout" || n === "logout_all") return v(), !0;
43
+ function fe(e) {
44
+ let t = j(e);
45
+ if (t === "logout" || t === "logout_all") return b(), !0;
45
46
  if (!e.activeProfileId || !e.user || !e.tokens) return !1;
46
47
  let r = e.activeProfileId, i = e.user, { workspaceToken: a, ...o } = e.tokens;
47
- return p(A(e, r, i)), te(r, i), f(r, o), ne(r, a ?? null), d(r), window.dispatchEvent(new Event(t)), !0;
48
+ return h(M(e, r, i)), p(r, i), f(r, o), m(r, a ?? null), d(r), window.dispatchEvent(new Event(n)), !0;
48
49
  }
49
- function j(e) {
50
+ function N() {
51
+ if (typeof window > "u") return null;
52
+ try {
53
+ let e = t(), n = new URL(e.url).origin;
54
+ if (n === window.location.origin) return null;
55
+ let r = `${window.location.origin}/auth/login?reason=logout`;
56
+ return `${n}/auth/sso-clear?returnTo=${encodeURIComponent(r)}`;
57
+ } catch {
58
+ return null;
59
+ }
60
+ }
61
+ function P(e) {
50
62
  if (!e) return !1;
51
63
  try {
52
64
  return !!(localStorage.getItem(`bf-p-${e}-tokens`) && localStorage.getItem(`bf-p-${e}-user`));
@@ -54,37 +66,37 @@ function j(e) {
54
66
  return !1;
55
67
  }
56
68
  }
57
- function M(e) {
69
+ function F(e) {
58
70
  try {
59
- if (x()) return null;
60
- let t = g();
61
- if (!t?.origin || !h(t.origin)) return null;
71
+ if (C()) return null;
72
+ let t = v();
73
+ if (!t?.origin || !_(t.origin)) return null;
62
74
  let n = new URL(t.origin).origin, r = new URL(e).origin;
63
- if (n === window.location.origin || n === r || j(t.id)) return null;
75
+ if (n === window.location.origin || n === r || P(t.id)) return null;
64
76
  let i = window.location.href;
65
- return y(n, i) ? null : (b(n, i), `${n}/auth/sso-relay?returnTo=${encodeURIComponent(i)}`);
77
+ return x(n, i) ? null : (S(n, i), `${n}/auth/sso-relay?returnTo=${encodeURIComponent(i)}`);
66
78
  } catch {
67
79
  return null;
68
80
  }
69
81
  }
70
- function N({ children: p, onTokenExpired: h, onSessionExpiringSoon: v, onRefreshToken: S, bridgeUrl: w, bridgeAllowedOrigins: k, bridgeDebug: A, onBridgeReady: j }) {
71
- let N = de(!1), [P, F] = E(() => u()), [I, L] = E(() => P ? a(P) : null), [R, z] = E(() => P ? i(P) : null), [B, V] = E(() => P ? o(P) : null), [H, U] = E(() => {
72
- if (P && a(P)) return !1;
82
+ function I({ children: t, onTokenExpired: h, onSessionExpiringSoon: _, onRefreshToken: b, bridgeUrl: w, bridgeAllowedOrigins: E, bridgeDebug: j, onBridgeReady: M }) {
83
+ let P = ue(!1), [I, L] = O(() => u()), [R, z] = O(() => I ? o(I) : null), [B, V] = O(() => I ? a(I) : null), [H, U] = O(() => I ? s(I) : null), [W, G] = O(() => {
84
+ if (I && o(I)) return !1;
73
85
  if (w) try {
74
- let e = g()?.id ?? null;
86
+ let e = v()?.id ?? null;
75
87
  if (e && localStorage.getItem(`bf-p-${e}-tokens`)) return !1;
76
88
  } catch {}
77
89
  return !!w;
78
- }), [me, W] = E(!1), [G, K] = E(null), [q, J] = E(() => s().map((e) => ({
90
+ }), [pe, K] = O(!1), [me, q] = O(null), [he, J] = O(() => c().map((e) => ({
79
91
  id: e.id,
80
92
  email: e.email,
81
93
  name: e.name,
82
94
  avatar: e.avatar,
83
- isActive: e.id === P,
95
+ isActive: e.id === I,
84
96
  lastLogin: e.lastLogin
85
- }))), Y = C(() => {
86
- let e = r();
87
- J(s().map((t) => ({
97
+ }))), Y = T(() => {
98
+ let e = i();
99
+ J(c().map((t) => ({
88
100
  id: t.id,
89
101
  email: t.email,
90
102
  name: t.name,
@@ -93,85 +105,85 @@ function N({ children: p, onTokenExpired: h, onSessionExpiringSoon: v, onRefresh
93
105
  lastLogin: t.lastLogin
94
106
  })));
95
107
  }, []);
96
- T(() => {
108
+ D(() => {
97
109
  if (!w) return;
98
110
  try {
99
111
  let e = new URL(w).pathname;
100
112
  if (window.location.pathname === e) {
101
- U(!1), j?.();
113
+ G(!1), M?.();
102
114
  return;
103
115
  }
104
116
  } catch {
105
- U(!1), j?.();
117
+ G(!1), M?.();
106
118
  return;
107
119
  }
108
- if (se()) {
109
- U(!1), j?.();
120
+ if (oe()) {
121
+ G(!1), M?.();
110
122
  return;
111
123
  }
112
124
  let e = () => {
113
- U(!1), j?.();
125
+ G(!1), M?.();
114
126
  }, t = (t) => {
115
- N.current = !0;
127
+ P.current = !0;
116
128
  try {
117
129
  if (w) {
118
- let e = M(w);
130
+ let e = F(w);
119
131
  if (e) {
120
132
  window.location.replace(e);
121
133
  return;
122
134
  }
123
135
  }
124
- pe(t);
136
+ fe(t);
125
137
  let e = u();
126
- if (e) F(e), L(a(e)), z(i(e)), V(o(e)), Y();
138
+ if (e) L(e), z(o(e)), V(a(e)), U(s(e)), Y();
127
139
  else {
128
140
  if (w && !t.user && !t.tokens) try {
129
- let e = new URL(w).origin, t = window.location.origin, n = M(w);
141
+ let e = new URL(w).origin, t = window.location.origin, n = F(w);
130
142
  if (n) {
131
143
  window.location.replace(n);
132
144
  return;
133
145
  }
134
- if (e !== t && !x()) {
146
+ if (e !== t && !C()) {
135
147
  let t = window.location.href;
136
- if (y(e, t)) return;
137
- b(e, t), window.location.replace(`${e}/auth/sso-relay?returnTo=${encodeURIComponent(t)}`);
148
+ if (x(e, t)) return;
149
+ S(e, t), window.location.replace(`${e}/auth/sso-relay?returnTo=${encodeURIComponent(t)}`);
138
150
  return;
139
151
  }
140
152
  } catch {}
141
- F(null), L(null), z(null), V(null), J([]);
153
+ L(null), z(null), V(null), U(null), J([]);
142
154
  }
143
155
  } finally {
144
- N.current = !1, e();
156
+ P.current = !1, e();
145
157
  }
146
158
  }, n = setTimeout(() => {
147
159
  e();
148
160
  }, 5e3);
149
- return oe({
161
+ return ae({
150
162
  bridgeUrl: w,
151
- allowedOrigins: k,
163
+ allowedOrigins: E,
152
164
  onStateChanged: t,
153
- debug: A ?? !1
165
+ debug: j ?? !1
154
166
  }), () => {
155
167
  clearTimeout(n);
156
168
  };
157
169
  }, [
158
170
  w,
159
- k,
160
- A,
171
+ E,
161
172
  j,
173
+ M,
162
174
  Y
163
175
  ]);
164
- let he = C((e, t, n) => {
165
- let r = O(t) ?? Date.now() + 3600 * 1e3, i = {
176
+ let ge = T((e, t, n) => {
177
+ let r = A(t) ?? Date.now() + 3600 * 1e3, i = {
166
178
  accessToken: t,
167
179
  refreshToken: n,
168
180
  expiresAt: r
169
- }, a = c(e, i);
170
- F(a), L(e), z(i), V(null), W(!1), K(null), Y();
181
+ }, a = ee(e, i);
182
+ L(a), z(e), V(i), U(null), K(!1), q(null), Y();
171
183
  try {
172
- ae(a, window.location.origin);
184
+ ie(a, window.location.origin);
173
185
  } catch {}
174
- N.current || _()?.notifyLogin({
186
+ P.current || y()?.notifyLogin({
175
187
  user: e,
176
188
  tokens: {
177
189
  accessToken: t,
@@ -180,43 +192,45 @@ function N({ children: p, onTokenExpired: h, onSessionExpiringSoon: v, onRefresh
180
192
  },
181
193
  activeAccountId: a,
182
194
  activeProfileId: a,
183
- profiles: s()
195
+ profiles: c()
184
196
  });
185
- }, [Y]), X = C(() => {
186
- P && l(P);
197
+ }, [Y]), X = T(() => {
198
+ I && l(I);
187
199
  let e = u();
188
- e ? (F(e), L(a(e)), z(i(e)), V(o(e))) : (F(null), L(null), z(null), V(null)), W(!1), K(null), Y();
200
+ e ? (L(e), z(o(e)), V(a(e)), U(s(e))) : (L(null), z(null), V(null), U(null)), K(!1), q(null), Y();
189
201
  try {
190
- m();
202
+ g();
191
203
  } catch {}
192
- N.current || _()?.notifyLogout();
193
- }, [P, Y]), ge = C((e) => {
194
- if (!I || !P) return;
204
+ P.current || y()?.notifyLogout();
205
+ let t = N();
206
+ t && !P.current && window.location.replace(t);
207
+ }, [I, Y]), _e = T((e) => {
208
+ if (!R || !I) return;
195
209
  let t = {
196
- ...I,
210
+ ...R,
197
211
  ...e
198
212
  };
199
- L(t), te(P, t), n({
200
- id: P,
213
+ z(t), p(I, t), r({
214
+ id: I,
201
215
  email: t.email,
202
216
  name: t.name ?? `${t.firstName ?? ""} ${t.lastName ?? ""}`.trim(),
203
217
  avatar: t.avatar,
204
218
  lastLogin: (/* @__PURE__ */ new Date()).toISOString()
205
219
  }), Y();
206
220
  }, [
221
+ R,
207
222
  I,
208
- P,
209
223
  Y
210
- ]), Z = C(async () => {
211
- if (!(!R?.refreshToken || !S || !P)) {
212
- U(!0);
224
+ ]), Z = T(async () => {
225
+ if (!(!B?.refreshToken || !b || !I)) {
226
+ G(!0);
213
227
  try {
214
- let e = await S(R.refreshToken), t = O(e.accessToken), n = e.expiresAt ?? t ?? Date.now() + 3600 * 1e3, r = {
228
+ let e = await b(B.refreshToken), t = A(e.accessToken), n = e.expiresAt ?? t ?? Date.now() + 3600 * 1e3, r = {
215
229
  accessToken: e.accessToken,
216
- refreshToken: e.refreshToken ?? R.refreshToken,
230
+ refreshToken: e.refreshToken ?? B.refreshToken,
217
231
  expiresAt: n
218
232
  };
219
- z(r), f(P, r), N.current || _()?.notifyTokenRefresh({
233
+ V(r), f(I, r), P.current || y()?.notifyTokenRefresh({
220
234
  accessToken: r.accessToken,
221
235
  refreshToken: r.refreshToken,
222
236
  expiresAt: r.expiresAt
@@ -224,168 +238,170 @@ function N({ children: p, onTokenExpired: h, onSessionExpiringSoon: v, onRefresh
224
238
  } catch (e) {
225
239
  console.error("Failed to refresh token:", e), X(), h?.();
226
240
  } finally {
227
- U(!1);
241
+ G(!1);
228
242
  }
229
243
  }
230
244
  }, [
231
- R,
232
- S,
233
- P,
245
+ B,
246
+ b,
247
+ I,
234
248
  X,
235
249
  h
236
- ]), _e = C((e) => I?.permissions ? I.permissions.includes(e) || I.permissions.includes("*") : !1, [I]), Q = C((e) => {
237
- V(e), P && ne(P, e);
238
- }, [P]), ve = C((e, t) => {
239
- W(e), K(t ?? null);
240
- }, []), ye = C((e) => {
241
- if (!re(e)) {
250
+ ]), Q = T((e) => R?.permissions ? R.permissions.includes(e) || R.permissions.includes("*") : !1, [R]), ve = T((e) => {
251
+ U(e), I && m(I, e);
252
+ }, [I]), ye = T((e, t) => {
253
+ K(e), q(t ?? null);
254
+ }, []), be = T((e) => {
255
+ if (!ne(e)) {
242
256
  console.error(`Profile ${e} not found`);
243
257
  return;
244
258
  }
245
- F(e), L(a(e)), z(i(e)), V(o(e)), W(!1), K(null), Y(), N.current || _()?.notifyAccountSwitch(e);
246
- }, [Y]), be = C((e, t, n) => {
247
- c(e, {
259
+ L(e), z(o(e)), V(a(e)), U(s(e)), K(!1), q(null), Y(), P.current || y()?.notifyAccountSwitch(e);
260
+ }, [Y]), xe = T((e, t, n) => {
261
+ ee(e, {
248
262
  accessToken: t,
249
263
  refreshToken: n,
250
- expiresAt: O(t) ?? Date.now() + 3600 * 1e3
251
- }), P && d(P), Y();
252
- }, [P, Y]), xe = C((e) => {
253
- if (e === P) {
264
+ expiresAt: A(t) ?? Date.now() + 3600 * 1e3
265
+ }), I && d(I), Y();
266
+ }, [I, Y]), Se = T((e) => {
267
+ if (e === I) {
254
268
  console.error("Cannot remove active account — logout first");
255
269
  return;
256
270
  }
257
271
  l(e), Y();
258
- }, [P, Y]), Se = C(() => {
259
- ee(), F(null), L(null), z(null), V(null), W(!1), K(null), J([]);
272
+ }, [I, Y]), Ce = T(() => {
273
+ te(), L(null), z(null), V(null), U(null), K(!1), q(null), J([]);
260
274
  try {
261
- m();
275
+ g();
262
276
  } catch {}
263
- N.current || _()?.notifyLogoutAll();
277
+ P.current || y()?.notifyLogoutAll();
278
+ let e = N();
279
+ e && !P.current && window.location.replace(e);
264
280
  }, []);
265
- T(() => {
266
- if (!R?.expiresAt) return;
267
- let e = R.expiresAt - Date.now();
281
+ D(() => {
282
+ if (!B?.expiresAt) return;
283
+ let e = B.expiresAt - Date.now();
268
284
  if (e <= 0) {
269
- S && R?.refreshToken ? Z() : h?.();
285
+ b && B?.refreshToken ? Z() : h?.();
270
286
  return;
271
287
  }
272
288
  let t = [];
273
- if (S && R?.refreshToken) {
289
+ if (b && B?.refreshToken) {
274
290
  let n = Math.max(0, e - 300 * 1e3);
275
291
  t.push(setTimeout(() => {
276
292
  Z();
277
293
  }, n));
278
294
  }
279
- if (v) {
295
+ if (_) {
280
296
  let n = Math.max(0, e - 300 * 1e3);
281
297
  t.push(setTimeout(() => {
282
- v();
298
+ _();
283
299
  }, n));
284
300
  }
285
- return (!S || !R?.refreshToken) && t.push(setTimeout(() => {
301
+ return (!b || !B?.refreshToken) && t.push(setTimeout(() => {
286
302
  h?.();
287
303
  }, e)), () => t.forEach(clearTimeout);
288
304
  }, [
289
- R?.expiresAt,
290
- R?.refreshToken,
305
+ B?.expiresAt,
306
+ B?.refreshToken,
291
307
  Z,
292
- S,
308
+ b,
293
309
  h,
294
- v
310
+ _
295
311
  ]);
296
- let Ce = C(() => {
312
+ let we = T(() => {
297
313
  let e = u();
298
314
  if (!e) {
299
- (I || R) && (L(null), z(null), V(null), F(null), J([]));
315
+ (R || B) && (z(null), V(null), U(null), L(null), J([]));
300
316
  return;
301
317
  }
302
- let t = i(e), n = o(e), r = a(e);
303
- e !== P && F(e), t?.accessToken !== R?.accessToken && z(t), n !== B && V(n), r && r.id !== I?.id && L(r), Y();
318
+ let t = a(e), n = s(e), r = o(e);
319
+ e !== I && L(e), t?.accessToken !== B?.accessToken && V(t), n !== H && U(n), r && r.id !== R?.id && z(r), Y();
304
320
  }, [
321
+ B,
305
322
  R,
323
+ H,
306
324
  I,
307
- B,
308
- P,
309
325
  Y
310
326
  ]);
311
- T(() => {
312
- let e = () => Ce();
313
- window.addEventListener(t, e), window.addEventListener("storage", e);
314
- let n = setInterval(e, 1e4);
327
+ D(() => {
328
+ let e = () => we();
329
+ window.addEventListener(n, e), window.addEventListener("storage", e);
330
+ let t = setInterval(e, 1e4);
315
331
  return () => {
316
- window.removeEventListener(t, e), window.removeEventListener("storage", e), clearInterval(n);
332
+ window.removeEventListener(n, e), window.removeEventListener("storage", e), clearInterval(t);
317
333
  };
318
- }, [Ce]), T(() => {
319
- if (!R?.accessToken || !w) return;
334
+ }, [we]), D(() => {
335
+ if (!B?.accessToken || !w) return;
320
336
  let t = async () => {
321
337
  if (document.visibilityState === "visible") try {
322
- if (le()) {
323
- F(null), L(null), z(null), V(null), J([]);
338
+ if (ce()) {
339
+ L(null), z(null), V(null), U(null), J([]);
324
340
  return;
325
341
  }
326
- if (ie()) return;
327
- await ce(`${e().globalBaseUrl}/global/graphql`, R.accessToken) && X();
342
+ if (re()) return;
343
+ await se(`${e().globalBaseUrl}/global/graphql`, B.accessToken) && X();
328
344
  } catch {}
329
345
  };
330
346
  return document.addEventListener("visibilitychange", t), () => document.removeEventListener("visibilitychange", t);
331
347
  }, [
332
- R?.accessToken,
348
+ B?.accessToken,
333
349
  w,
334
350
  X
335
351
  ]);
336
- let $ = ue(() => !!I && !!R, [I, R]), we = ue(() => ({
337
- user: I,
338
- tokens: R,
352
+ let $ = le(() => !!R && !!B, [R, B]), Te = le(() => ({
353
+ user: R,
354
+ tokens: B,
339
355
  isAuthenticated: $,
340
- isLoading: H,
341
- login: he,
356
+ isLoading: W,
357
+ login: ge,
342
358
  logout: X,
343
- updateUser: ge,
359
+ updateUser: _e,
344
360
  refreshAccessToken: Z,
345
- hasPermission: _e,
346
- setWorkspaceToken: Q,
347
- workspaceToken: B,
348
- mfaRequired: me,
349
- mfaChallengeId: G,
350
- setMfaState: ve,
351
- activeProfileId: P,
352
- accounts: q,
353
- switchAccount: ye,
354
- addAccount: be,
355
- removeAccount: xe,
356
- logoutAll: Se,
357
- currentUser: I
361
+ hasPermission: Q,
362
+ setWorkspaceToken: ve,
363
+ workspaceToken: H,
364
+ mfaRequired: pe,
365
+ mfaChallengeId: me,
366
+ setMfaState: ye,
367
+ activeProfileId: I,
368
+ accounts: he,
369
+ switchAccount: be,
370
+ addAccount: xe,
371
+ removeAccount: Se,
372
+ logoutAll: Ce,
373
+ currentUser: R
358
374
  }), [
359
- I,
360
375
  R,
376
+ B,
361
377
  $,
362
- H,
363
- he,
364
- X,
378
+ W,
365
379
  ge,
366
- Z,
380
+ X,
367
381
  _e,
382
+ Z,
368
383
  Q,
369
- B,
370
- me,
371
- G,
372
384
  ve,
373
- P,
374
- q,
385
+ H,
386
+ pe,
387
+ me,
375
388
  ye,
389
+ I,
390
+ he,
376
391
  be,
377
392
  xe,
378
- Se
393
+ Se,
394
+ Ce
379
395
  ]);
380
- return /* @__PURE__ */ fe(D.Provider, {
381
- value: we,
382
- children: p
396
+ return /* @__PURE__ */ de(k.Provider, {
397
+ value: Te,
398
+ children: t
383
399
  });
384
400
  }
385
- function P() {
386
- let e = w(D);
401
+ function L() {
402
+ let e = E(k);
387
403
  if (!e) throw Error("useAuth must be used within an AuthProvider");
388
404
  return e;
389
405
  }
390
406
  //#endregion
391
- export { N as AuthProvider, P as useAuth };
407
+ export { I as AuthProvider, L as useAuth };
@@ -9,5 +9,18 @@ export interface CreateApolloClientOptions {
9
9
  retryDelay?: number;
10
10
  }
11
11
  export declare function withBrowserTraceHeader(headersInit?: HeadersInit): Headers;
12
+ /**
13
+ * Decide whether an Apollo link error should be retried. Exported so it
14
+ * can be unit-tested independently of an ApolloClient instance.
15
+ *
16
+ * Retries any unrecognised error (default-true) so genuine transient
17
+ * network / 5xx failures still benefit from the link's retry budget;
18
+ * permanent failures are filtered via three signals, in order:
19
+ * 1. Numeric `statusCode` (Apollo Client 4's `ServerError`)
20
+ * 2. `errors[].extensions.code` (GraphQL response auth codes)
21
+ * 3. Substring match on `message` (fallback for link errors that
22
+ * surface auth codes only in their message string)
23
+ */
24
+ export declare function shouldRetryApolloError(error: unknown): boolean;
12
25
  export declare function createApolloClient(options: CreateApolloClientOptions): ApolloClient;
13
26
  //# sourceMappingURL=apollo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apollo.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/apollo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAQ,MAAM,gBAAgB,CAAC;AAYnE,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAMzE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CA0HnF"}
1
+ {"version":3,"file":"apollo.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/apollo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAQ,MAAM,gBAAgB,CAAC;AAanE,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAMzE;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiC9D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CAyHnF"}
@@ -9,48 +9,60 @@ function c(t) {
9
9
  let n = new Headers(t);
10
10
  return n.has("traceparent") || n.set("traceparent", e().traceparent), n;
11
11
  }
12
- function l(e) {
13
- let { uri: l, getAuthToken: u, onAuthError: d, onNetworkError: f, cache: p = new n(), retryAttempts: m = 3, retryDelay: h = 1e3 } = e, g = new o({
12
+ var l = new Set([
13
+ 401,
14
+ 403,
15
+ 413
16
+ ]);
17
+ function u(e) {
18
+ if (!e) return !1;
19
+ let t = e.statusCode;
20
+ if (typeof t == "number" && l.has(t) || e.errors?.some((e) => e.extensions?.code === "UNAUTHENTICATED" || e.extensions?.code === "FORBIDDEN")) return !1;
21
+ let n = e.message;
22
+ return !(n && /UNAUTHENTICATED|FORBIDDEN/.test(n));
23
+ }
24
+ function d(e) {
25
+ let { uri: l, getAuthToken: d, onAuthError: f, onNetworkError: p, cache: m = new n(), retryAttempts: h = 3, retryDelay: g = 1e3 } = e, _ = new o({
14
26
  delay: {
15
- initial: h,
16
- max: h * 4,
27
+ initial: g,
28
+ max: g * 4,
17
29
  jitter: !0
18
30
  },
19
31
  attempts: {
20
- max: m,
21
- retryIf: (e) => !!e && !e.message.includes("401") && !e.message.includes("403")
32
+ max: h,
33
+ retryIf: u
22
34
  }
23
- }), _ = a(({ error: e }) => {
35
+ }), v = a(({ error: e }) => {
24
36
  let t = e.errors;
25
37
  t ? t.forEach((e) => {
26
- console.error(`[GraphQL error]: Message: ${e.message}, Location: ${JSON.stringify(e.locations)}, Path: ${e.path}`), (e.extensions?.code === "UNAUTHENTICATED" || e.extensions?.code === "FORBIDDEN") && d?.();
27
- }) : e && (console.error(`[Network error]: ${e.message}`), f?.(e));
28
- }), v = s((e, { headers: t }) => {
29
- let n = u?.();
38
+ console.error(`[GraphQL error]: Message: ${e.message}, Location: ${JSON.stringify(e.locations)}, Path: ${e.path}`), (e.extensions?.code === "UNAUTHENTICATED" || e.extensions?.code === "FORBIDDEN") && f?.();
39
+ }) : e && (console.error(`[Network error]: ${e.message}`), p?.(e));
40
+ }), y = s((e, { headers: t }) => {
41
+ let n = d?.();
30
42
  console.log("[fe-libs apollo] getAuthToken returned:", n ? n.substring(0, 20) + "..." : "null");
31
43
  let r = { headers: {
32
44
  ...t,
33
45
  ...n ? { authorization: `Bearer ${n}` } : {}
34
46
  } };
35
47
  return console.log("[fe-libs apollo] Authorization header:", r.headers.authorization ? r.headers.authorization.substring(0, 30) + "..." : "MISSING"), r;
36
- }), y = fetch, b = ((e, t) => fetch(e, {
48
+ }), b = fetch, x = ((e, t) => fetch(e, {
37
49
  ...t,
38
50
  headers: c(t?.headers)
39
51
  }));
40
- return y.preconnect && (b.preconnect = y.preconnect), new t({
52
+ return b.preconnect && (x.preconnect = b.preconnect), new t({
41
53
  link: r([
42
- g,
43
54
  _,
44
55
  v,
56
+ y,
45
57
  new i({
46
58
  uri: l,
47
59
  credentials: "include",
48
- batchMax: 50,
60
+ batchMax: 10,
49
61
  batchInterval: 100,
50
- fetch: b
62
+ fetch: x
51
63
  })
52
64
  ]),
53
- cache: p,
65
+ cache: m,
54
66
  defaultOptions: {
55
67
  watchQuery: {
56
68
  fetchPolicy: "cache-and-network",
@@ -65,4 +77,4 @@ function l(e) {
65
77
  });
66
78
  }
67
79
  //#endregion
68
- export { l as createApolloClient };
80
+ export { d as createApolloClient };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.518.6",
3
+ "version": "2026.519.1",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "imports": {