@burdenoff/fe-libs 2026.1014.1 → 2026.1014.3
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/chrome/notificationCenter/NotificationPanel.js +12 -8
- package/dist/shared/assistant/index.d.ts +1 -0
- package/dist/shared/assistant/ui/AssistantOverlay.js +1 -1
- package/dist/shared/assistant/ui/assistantOverlayState.d.ts +10 -0
- package/dist/shared/assistant/ui/assistantOverlayState.js +18 -14
- package/dist/shared/assistant/ui/useAssistantLauncherLift.d.ts +6 -0
- package/dist/shared/assistant/ui/useAssistantLauncherLift.js +17 -0
- package/dist/shared/providers/shell/AuthProvider.js +92 -97
- package/dist/shared/providers/shell/ProfileStorageManager.d.ts +20 -0
- package/dist/shared/providers/shell/ProfileStorageManager.js +88 -71
- package/dist/shared-assistant.js +128 -127
- package/package.json +2 -2
|
@@ -3,29 +3,33 @@ import { SHELL_OVERLAY_LAYER_CLASS as t } from "../shellOverlayLayer.js";
|
|
|
3
3
|
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
4
|
import { createPortal as i } from "react-dom";
|
|
5
5
|
//#region src/chrome/notificationCenter/NotificationPanel.tsx
|
|
6
|
-
var a = (
|
|
7
|
-
|
|
6
|
+
var a = "calc(max(var(--safe-top, 0px), env(safe-area-inset-top, 0px)) + var(--native-topbar-height, 0px))", o = {
|
|
7
|
+
top: a,
|
|
8
|
+
maxHeight: `calc(100dvh - ${a} - max(var(--mobile-tabbar-height, 0px), var(--safe-bottom, 0px), env(safe-area-inset-bottom, 0px)))`
|
|
9
|
+
}, s = ({ isMobile: a, onClose: s, children: c }) => a ? typeof document > "u" ? null : i(/* @__PURE__ */ n(e, {
|
|
10
|
+
onDismiss: s,
|
|
8
11
|
children: /* @__PURE__ */ r("div", {
|
|
9
12
|
className: `fixed inset-0 ${t}`,
|
|
10
13
|
role: "dialog",
|
|
11
14
|
"aria-label": "Notifications panel",
|
|
12
15
|
children: [/* @__PURE__ */ n("div", {
|
|
13
16
|
className: "absolute inset-0 bg-bg-overlay backdrop-blur-sm",
|
|
14
|
-
onClick:
|
|
17
|
+
onClick: s,
|
|
15
18
|
"aria-hidden": "true"
|
|
16
19
|
}), /* @__PURE__ */ n("div", {
|
|
17
|
-
className: "absolute inset-0 bg-bg-elevated
|
|
18
|
-
|
|
20
|
+
className: "absolute inset-x-0 flex flex-col overflow-hidden bg-bg-elevated rounded-b-2xl shadow-[var(--shadow-elevation-4)]",
|
|
21
|
+
style: o,
|
|
22
|
+
children: c
|
|
19
23
|
})]
|
|
20
24
|
})
|
|
21
25
|
}), document.body) : /* @__PURE__ */ n(e, {
|
|
22
|
-
onDismiss:
|
|
26
|
+
onDismiss: s,
|
|
23
27
|
children: /* @__PURE__ */ n("div", {
|
|
24
28
|
className: "absolute right-0 top-full mt-2 w-[calc(100vw-1.5rem)] sm:w-[420px] max-h-[600px] bg-bg-elevated border border-border-subtle rounded-card shadow-[var(--shadow-elevation-4)] z-50 overflow-hidden flex flex-col",
|
|
25
29
|
role: "dialog",
|
|
26
30
|
"aria-label": "Notifications panel",
|
|
27
|
-
children:
|
|
31
|
+
children: c
|
|
28
32
|
})
|
|
29
33
|
});
|
|
30
34
|
//#endregion
|
|
31
|
-
export {
|
|
35
|
+
export { s as NotificationPanel };
|
|
@@ -308,6 +308,7 @@ export * from './ui/AssistantApiCallsConsentDialog';
|
|
|
308
308
|
export * from './ui/AssistantChatArea';
|
|
309
309
|
export * from './ui/AIAssistantPanel';
|
|
310
310
|
export * from './ui/assistantOverlayState';
|
|
311
|
+
export * from './ui/useAssistantLauncherLift';
|
|
311
312
|
export * from './ui/AssistantOverlay';
|
|
312
313
|
export * from './workflowApi';
|
|
313
314
|
export * from './ui/WorkflowAssistantPanel';
|
|
@@ -2,7 +2,7 @@ import { useAssistantTr as e } from "../i18n.js";
|
|
|
2
2
|
import { quotaExhaustedEventName as t } from "../quota.js";
|
|
3
3
|
import { assistantPanelOwnsEscape as n } from "./panelOverlays.js";
|
|
4
4
|
import { AssistantPreviewBridgeHost as r } from "../preview/bridgeHost.js";
|
|
5
|
-
import { ASSISTANT_DOCK_WIDTH_VAR as i, ASSISTANT_OVERLAY_DESKTOP_QUERY as a, ASSISTANT_OVERLAY_TOP_VAR as o, ASSISTANT_PANEL_INSET_VAR as s, ASSISTANT_SHEET_BOTTOM_VAR as c,
|
|
5
|
+
import { ASSISTANT_DOCK_WIDTH_VAR as i, ASSISTANT_OVERLAY_DESKTOP_QUERY as a, ASSISTANT_OVERLAY_TOP_VAR as o, ASSISTANT_PANEL_INSET_VAR as s, ASSISTANT_SHEET_BOTTOM_VAR as c, assistantLauncherBottom as l, assistantOverlayClassName as u, assistantOverlayEscapeAction as d, assistantOverlayKeys as f, assistantQuotaKindOf as p, closestAround as m, createAssistantNavigate as h, isAssistantToggleShortcut as g, nextAssistantOpenState as _, publishedAssistantDockWidth as v, publishedAssistantPanelInset as y, readAssistantOverlayFlag as b, requestedAssistantOpenState as x, writeAssistantOverlayFlag as S } from "./assistantOverlayState.js";
|
|
6
6
|
import { useAssistantServerHistory as C } from "../history/useAssistantServerHistory.js";
|
|
7
7
|
import { AIAssistantPanel as w } from "./AIAssistantPanel.js";
|
|
8
8
|
import { createContext as T, useCallback as E, useContext as D, useEffect as O, useMemo as k, useRef as A, useState as j, useSyncExternalStore as M } from "react";
|
|
@@ -114,6 +114,16 @@ export declare const ASSISTANT_BOTTOM_CHROME_CLEARANCE = "max(var(--mobile-tabba
|
|
|
114
114
|
* whatever sat above it.
|
|
115
115
|
*/
|
|
116
116
|
export declare function aboveAssistantBottomChrome(inset: string): string;
|
|
117
|
+
/**
|
|
118
|
+
* Extra lift a PAGE asks of the launcher. The launcher is a fixed bottom-right
|
|
119
|
+
* button, so on a phone it paints over whatever the page keeps in that corner —
|
|
120
|
+
* a chat composer's send button, for one. A page that owns a bottom composer
|
|
121
|
+
* sets this var on <html> (see `useAssistantLauncherLift`) and the launcher
|
|
122
|
+
* rests above it. Unset = 0px, so every other page is untouched.
|
|
123
|
+
*/
|
|
124
|
+
export declare const ASSISTANT_LAUNCHER_LIFT_VAR = "--assistant-launcher-lift";
|
|
125
|
+
/** The launcher's CSS `bottom`: clears the chrome, then the page's own lift. */
|
|
126
|
+
export declare function assistantLauncherBottom(inset: string): string;
|
|
117
127
|
/** Width of the docked side panel. Must match `sm:w-[440px]` below. */
|
|
118
128
|
export declare const ASSISTANT_DOCK_WIDTH_PX = 440;
|
|
119
129
|
/**
|
|
@@ -33,23 +33,27 @@ var u = "max(var(--mobile-tabbar-height, 0px), var(--safe-bottom, 0px), env(safe
|
|
|
33
33
|
function d(e) {
|
|
34
34
|
return `calc(${e} + ${u})`;
|
|
35
35
|
}
|
|
36
|
-
var f =
|
|
37
|
-
function
|
|
36
|
+
var f = "--assistant-launcher-lift";
|
|
37
|
+
function p(e) {
|
|
38
|
+
return `calc(var(${f}, 0px) + ${d(e)})`;
|
|
39
|
+
}
|
|
40
|
+
var m = 440, h = "--assistant-dock-width", g = "--assistant-sheet-bottom", _ = "--assistant-overlay-top", v = 56, y = "(min-width: 640px)";
|
|
41
|
+
function b(e) {
|
|
38
42
|
return e.isOpen && e.docked && e.isDesktop ? 440 : 0;
|
|
39
43
|
}
|
|
40
|
-
var
|
|
41
|
-
function
|
|
44
|
+
var x = 520, S = 24, C = "--assistant-panel-inset";
|
|
45
|
+
function w(e) {
|
|
42
46
|
return !e.isOpen || !e.isDesktop ? 0 : e.docked ? 440 : 544;
|
|
43
47
|
}
|
|
44
|
-
var
|
|
45
|
-
function
|
|
48
|
+
var T = "fixed z-50 flex flex-col overflow-hidden border border-border-default bg-bg-surface shadow-2xl inset-x-0 bottom-[var(--assistant-sheet-bottom,0px)] top-auto rounded-t-2xl animate-in slide-in-from-bottom-4 fade-in duration-200", E = "h-[60vh] max-h-[60vh]", D = "h-[88vh] max-h-[88vh]", O = "sm:inset-auto sm:top-auto sm:bottom-24 sm:right-6 sm:rounded-2xl sm:h-[680px] sm:max-h-[calc(100vh-6rem-var(--assistant-overlay-top,56px)-0.5rem)] sm:w-[520px] sm:max-w-[calc(100vw-2rem)]", k = "sm:left-auto sm:right-0 sm:top-[var(--assistant-overlay-top)] sm:bottom-0 sm:rounded-none sm:h-auto sm:max-h-none sm:w-[440px] sm:max-w-[calc(100vw-2rem)]";
|
|
49
|
+
function A(e) {
|
|
46
50
|
return [
|
|
47
|
-
|
|
48
|
-
e.expanded ?
|
|
49
|
-
e.docked ?
|
|
51
|
+
T,
|
|
52
|
+
e.expanded ? D : E,
|
|
53
|
+
e.docked ? k : O
|
|
50
54
|
].join(" ");
|
|
51
55
|
}
|
|
52
|
-
function
|
|
56
|
+
function j(t) {
|
|
53
57
|
return (n, r) => {
|
|
54
58
|
if (t.isShellLessTarget?.(n)) return t.openInNewTab(n), { kind: "new-tab" };
|
|
55
59
|
let i = e(r);
|
|
@@ -60,22 +64,22 @@ function k(t) {
|
|
|
60
64
|
} : (t.navigate(n), t.isDesktop() || t.collapseSheet(), { kind: "routed" });
|
|
61
65
|
};
|
|
62
66
|
}
|
|
63
|
-
function
|
|
67
|
+
function M(e) {
|
|
64
68
|
if (typeof CustomEvent > "u" || !(e instanceof CustomEvent)) return "generic";
|
|
65
69
|
let t = e.detail;
|
|
66
70
|
return typeof t != "object" || !t || !("kind" in t) ? "generic" : t.kind === "sandbox" || t.kind === "ai-credits" ? t.kind : "generic";
|
|
67
71
|
}
|
|
68
|
-
function
|
|
72
|
+
function N(e, t) {
|
|
69
73
|
try {
|
|
70
74
|
return e()?.getItem(t) === "1";
|
|
71
75
|
} catch {
|
|
72
76
|
return !1;
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
|
-
function
|
|
79
|
+
function P(e, t, n) {
|
|
76
80
|
try {
|
|
77
81
|
e()?.setItem(t, n ? "1" : "0");
|
|
78
82
|
} catch {}
|
|
79
83
|
}
|
|
80
84
|
//#endregion
|
|
81
|
-
export { u as ASSISTANT_BOTTOM_CHROME_CLEARANCE, o as ASSISTANT_DIALOG_SELECTOR,
|
|
85
|
+
export { u as ASSISTANT_BOTTOM_CHROME_CLEARANCE, o as ASSISTANT_DIALOG_SELECTOR, k as ASSISTANT_DOCKED_DESKTOP_CLASS, m as ASSISTANT_DOCK_WIDTH_PX, h as ASSISTANT_DOCK_WIDTH_VAR, O as ASSISTANT_FLOATING_DESKTOP_CLASS, S as ASSISTANT_FLOATING_RIGHT_PX, x as ASSISTANT_FLOATING_WIDTH_PX, f as ASSISTANT_LAUNCHER_LIFT_VAR, v as ASSISTANT_OVERLAY_DEFAULT_TOP_PX, y as ASSISTANT_OVERLAY_DESKTOP_QUERY, _ as ASSISTANT_OVERLAY_TOP_VAR, C as ASSISTANT_PANEL_INSET_VAR, T as ASSISTANT_SHEET_BASE_CLASS, g as ASSISTANT_SHEET_BOTTOM_VAR, E as ASSISTANT_SHEET_COMPACT_CLASS, D as ASSISTANT_SHEET_EXPANDED_CLASS, i as ASSISTANT_TOGGLE_SHORTCUT_LABEL, d as aboveAssistantBottomChrome, p as assistantLauncherBottom, A as assistantOverlayClassName, l as assistantOverlayEscapeAction, t as assistantOverlayKeys, M as assistantQuotaKindOf, s as closestAround, j as createAssistantNavigate, a as isAssistantToggleShortcut, r as nextAssistantOpenState, b as publishedAssistantDockWidth, w as publishedAssistantPanelInset, N as readAssistantOverlayFlag, n as requestedAssistantOpenState, P as writeAssistantOverlayFlag };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lift the assistant launcher above a page's own bottom-right control (a chat
|
|
3
|
+
* composer's send button) while the page is mounted, on phones only. `lift` is
|
|
4
|
+
* any CSS length. Restores the previous value on unmount.
|
|
5
|
+
*/
|
|
6
|
+
export declare function useAssistantLauncherLift(lift: string): void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ASSISTANT_LAUNCHER_LIFT_VAR as e } from "./assistantOverlayState.js";
|
|
2
|
+
import { useEffect as t } from "react";
|
|
3
|
+
//#region src/shared/assistant/ui/useAssistantLauncherLift.ts
|
|
4
|
+
var n = "(max-width: 639px)";
|
|
5
|
+
function r(r) {
|
|
6
|
+
t(() => {
|
|
7
|
+
if (typeof window > "u" || typeof window.matchMedia != "function") return;
|
|
8
|
+
let t = document.documentElement, i = window.matchMedia(n), a = t.style.getPropertyValue(e), o = () => {
|
|
9
|
+
i.matches ? t.style.setProperty(e, r) : t.style.removeProperty(e);
|
|
10
|
+
};
|
|
11
|
+
return o(), i.addEventListener("change", o), () => {
|
|
12
|
+
i.removeEventListener("change", o), a ? t.style.setProperty(e, a) : t.style.removeProperty(e);
|
|
13
|
+
};
|
|
14
|
+
}, [r]);
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { r as useAssistantLauncherLift };
|
|
@@ -1,152 +1,147 @@
|
|
|
1
|
-
import { getActiveProfileId as e, getProfileTokens as t, getProfileUser as n, getProfileWorkspaceToken as
|
|
2
|
-
import { readShellSsoCookie as
|
|
3
|
-
import { useBridgeInitialization as
|
|
4
|
-
import { useTokenExpiryTimer as
|
|
5
|
-
import { useStorageSync as
|
|
6
|
-
import { useRemoteSLO as
|
|
7
|
-
import { useAuthActions as
|
|
8
|
-
import { useSsoDepositBootGuard as
|
|
9
|
-
import { createContext as
|
|
10
|
-
import { jsx as
|
|
1
|
+
import { getActiveProfileId as e, getProfileTokens as t, getProfileUser as n, getProfileWorkspaceToken as ee, getSwitchableProfiles as r, resolveActiveProfileId as te } from "./ProfileStorageManager.js";
|
|
2
|
+
import { readShellSsoCookie as i } from "../../utils/authCookie.js";
|
|
3
|
+
import { useBridgeInitialization as a } from "./authProvider/useBridgeInitialization.js";
|
|
4
|
+
import { useTokenExpiryTimer as o } from "./authProvider/useTokenExpiryTimer.js";
|
|
5
|
+
import { useStorageSync as ne } from "./authProvider/useStorageSync.js";
|
|
6
|
+
import { useRemoteSLO as s } from "./authProvider/useRemoteSLO.js";
|
|
7
|
+
import { useAuthActions as c } from "./authProvider/useAuthActions.js";
|
|
8
|
+
import { useSsoDepositBootGuard as l } from "./authProvider/useSsoDepositBootGuard.js";
|
|
9
|
+
import { createContext as u, use as d, useCallback as f, useMemo as p, useRef as m, useState as h } from "react";
|
|
10
|
+
import { jsx as g } from "react/jsx-runtime";
|
|
11
11
|
//#region src/shared/providers/shell/AuthProvider.tsx
|
|
12
|
-
var
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
var _ = u(null);
|
|
13
|
+
function v(e) {
|
|
14
|
+
return r(e).map((t) => ({
|
|
15
|
+
id: t.id,
|
|
16
|
+
email: t.email,
|
|
17
|
+
name: t.name,
|
|
18
|
+
avatar: t.avatar,
|
|
19
|
+
isActive: t.id === e,
|
|
20
|
+
lastLogin: t.lastLogin
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
function y({ children: r, onTokenExpired: u, onSessionExpiringSoon: d, onRefreshToken: y, bridgeUrl: b, bridgeAllowedOrigins: x, bridgeDebug: S, onBridgeReady: C }) {
|
|
24
|
+
let w = m(!1), [T, E] = h(() => te()), [D, O] = h(() => T ? n(T) : null), [k, A] = h(() => T ? t(T) : null), [j, M] = h(() => T ? ee(T) : null), [N, P] = h(() => {
|
|
25
|
+
if (T && n(T)) return !1;
|
|
26
|
+
if (b) try {
|
|
27
|
+
let e = i()?.id ?? null;
|
|
18
28
|
if (e && localStorage.getItem(`bf-p-${e}-tokens`)) return !1;
|
|
19
29
|
} catch {}
|
|
20
|
-
return !!
|
|
21
|
-
}), [
|
|
22
|
-
id: e.id,
|
|
23
|
-
email: e.email,
|
|
24
|
-
name: e.name,
|
|
25
|
-
avatar: e.avatar,
|
|
26
|
-
isActive: e.id === E,
|
|
27
|
-
lastLogin: e.lastLogin
|
|
28
|
-
}))), B = p(() => {
|
|
30
|
+
return !!b;
|
|
31
|
+
}), [F, I] = h(!1), [L, re] = h(null), [R, z] = h(() => v(T)), B = f(() => {
|
|
29
32
|
z([]);
|
|
30
|
-
}, []), V =
|
|
31
|
-
|
|
32
|
-
z(i().map((e) => ({
|
|
33
|
-
id: e.id,
|
|
34
|
-
email: e.email,
|
|
35
|
-
name: e.name,
|
|
36
|
-
avatar: e.avatar,
|
|
37
|
-
isActive: e.id === t,
|
|
38
|
-
lastLogin: e.lastLogin
|
|
39
|
-
})));
|
|
33
|
+
}, []), V = f(() => {
|
|
34
|
+
z(v(e()));
|
|
40
35
|
}, []);
|
|
41
|
-
|
|
42
|
-
bridgeUrl:
|
|
43
|
-
bridgeAllowedOrigins:
|
|
44
|
-
bridgeDebug:
|
|
45
|
-
onBridgeReady:
|
|
46
|
-
bridgeSyncInProgress:
|
|
47
|
-
setIsLoading:
|
|
48
|
-
setActiveId:
|
|
49
|
-
setUser:
|
|
50
|
-
setTokens:
|
|
51
|
-
setWorkspaceTokenLocal:
|
|
36
|
+
a({
|
|
37
|
+
bridgeUrl: b,
|
|
38
|
+
bridgeAllowedOrigins: x,
|
|
39
|
+
bridgeDebug: S,
|
|
40
|
+
onBridgeReady: C,
|
|
41
|
+
bridgeSyncInProgress: w,
|
|
42
|
+
setIsLoading: P,
|
|
43
|
+
setActiveId: E,
|
|
44
|
+
setUser: O,
|
|
45
|
+
setTokens: A,
|
|
46
|
+
setWorkspaceTokenLocal: M,
|
|
52
47
|
clearAccounts: B,
|
|
53
48
|
refreshAccounts: V
|
|
54
49
|
});
|
|
55
|
-
let { login: H, logout: U, logoutAll: W, updateUser: G, refreshAccessToken: K, hasPermission: q, setWorkspaceToken: J, setMfaState: Y, switchAccount: X, addAccount: Z, removeAccount: Q } =
|
|
56
|
-
user:
|
|
57
|
-
tokens:
|
|
58
|
-
activeId:
|
|
59
|
-
bridgeSyncInProgress:
|
|
60
|
-
onRefreshToken:
|
|
61
|
-
onTokenExpired:
|
|
62
|
-
setActiveId:
|
|
63
|
-
setUser:
|
|
64
|
-
setTokens:
|
|
65
|
-
setWorkspaceTokenLocal:
|
|
66
|
-
setMfaRequiredState:
|
|
50
|
+
let { login: H, logout: U, logoutAll: W, updateUser: G, refreshAccessToken: K, hasPermission: q, setWorkspaceToken: J, setMfaState: Y, switchAccount: X, addAccount: Z, removeAccount: Q } = c({
|
|
51
|
+
user: D,
|
|
52
|
+
tokens: k,
|
|
53
|
+
activeId: T,
|
|
54
|
+
bridgeSyncInProgress: w,
|
|
55
|
+
onRefreshToken: y,
|
|
56
|
+
onTokenExpired: u,
|
|
57
|
+
setActiveId: E,
|
|
58
|
+
setUser: O,
|
|
59
|
+
setTokens: A,
|
|
60
|
+
setWorkspaceTokenLocal: M,
|
|
61
|
+
setMfaRequiredState: I,
|
|
67
62
|
setMfaChallengeIdState: re,
|
|
68
|
-
setIsLoading:
|
|
63
|
+
setIsLoading: P,
|
|
69
64
|
clearAccounts: B,
|
|
70
65
|
refreshAccounts: V
|
|
71
66
|
});
|
|
72
|
-
|
|
73
|
-
tokens:
|
|
74
|
-
onRefreshToken:
|
|
75
|
-
onTokenExpired:
|
|
76
|
-
onSessionExpiringSoon:
|
|
67
|
+
o({
|
|
68
|
+
tokens: k,
|
|
69
|
+
onRefreshToken: y,
|
|
70
|
+
onTokenExpired: u,
|
|
71
|
+
onSessionExpiringSoon: d,
|
|
77
72
|
refreshAccessToken: K
|
|
78
|
-
}),
|
|
79
|
-
user:
|
|
80
|
-
tokens:
|
|
81
|
-
workspaceToken:
|
|
82
|
-
activeId:
|
|
83
|
-
setUser:
|
|
84
|
-
setTokens:
|
|
85
|
-
setWorkspaceTokenLocal:
|
|
86
|
-
setActiveId:
|
|
73
|
+
}), ne({
|
|
74
|
+
user: D,
|
|
75
|
+
tokens: k,
|
|
76
|
+
workspaceToken: j,
|
|
77
|
+
activeId: T,
|
|
78
|
+
setUser: O,
|
|
79
|
+
setTokens: A,
|
|
80
|
+
setWorkspaceTokenLocal: M,
|
|
81
|
+
setActiveId: E,
|
|
87
82
|
clearAccounts: B,
|
|
88
83
|
refreshAccounts: V
|
|
89
|
-
}),
|
|
90
|
-
tokens:
|
|
91
|
-
bridgeUrl:
|
|
84
|
+
}), l(), s({
|
|
85
|
+
tokens: k,
|
|
86
|
+
bridgeUrl: b,
|
|
92
87
|
logout: U,
|
|
93
|
-
setActiveId:
|
|
94
|
-
setUser:
|
|
95
|
-
setTokens:
|
|
96
|
-
setWorkspaceTokenLocal:
|
|
88
|
+
setActiveId: E,
|
|
89
|
+
setUser: O,
|
|
90
|
+
setTokens: A,
|
|
91
|
+
setWorkspaceTokenLocal: M,
|
|
97
92
|
clearAccounts: B
|
|
98
93
|
});
|
|
99
|
-
let $ =
|
|
100
|
-
user:
|
|
101
|
-
tokens:
|
|
94
|
+
let $ = p(() => !!D && !!k, [D, k]), ie = p(() => ({
|
|
95
|
+
user: D,
|
|
96
|
+
tokens: k,
|
|
102
97
|
isAuthenticated: $,
|
|
103
|
-
isLoading:
|
|
98
|
+
isLoading: N,
|
|
104
99
|
login: H,
|
|
105
100
|
logout: U,
|
|
106
101
|
updateUser: G,
|
|
107
102
|
refreshAccessToken: K,
|
|
108
103
|
hasPermission: q,
|
|
109
104
|
setWorkspaceToken: J,
|
|
110
|
-
workspaceToken:
|
|
111
|
-
mfaRequired:
|
|
105
|
+
workspaceToken: j,
|
|
106
|
+
mfaRequired: F,
|
|
112
107
|
mfaChallengeId: L,
|
|
113
108
|
setMfaState: Y,
|
|
114
|
-
activeProfileId:
|
|
109
|
+
activeProfileId: T,
|
|
115
110
|
accounts: R,
|
|
116
111
|
switchAccount: X,
|
|
117
112
|
addAccount: Z,
|
|
118
113
|
removeAccount: Q,
|
|
119
114
|
logoutAll: W,
|
|
120
|
-
currentUser:
|
|
115
|
+
currentUser: D
|
|
121
116
|
}), [
|
|
122
|
-
|
|
123
|
-
|
|
117
|
+
D,
|
|
118
|
+
k,
|
|
124
119
|
$,
|
|
125
|
-
|
|
120
|
+
N,
|
|
126
121
|
H,
|
|
127
122
|
U,
|
|
128
123
|
G,
|
|
129
124
|
K,
|
|
130
125
|
q,
|
|
131
126
|
J,
|
|
132
|
-
|
|
133
|
-
|
|
127
|
+
j,
|
|
128
|
+
F,
|
|
134
129
|
L,
|
|
135
130
|
Y,
|
|
136
|
-
|
|
131
|
+
T,
|
|
137
132
|
R,
|
|
138
133
|
X,
|
|
139
134
|
Z,
|
|
140
135
|
Q,
|
|
141
136
|
W
|
|
142
137
|
]);
|
|
143
|
-
return /* @__PURE__ */ _
|
|
138
|
+
return /* @__PURE__ */ g(_.Provider, {
|
|
144
139
|
value: ie,
|
|
145
|
-
children:
|
|
140
|
+
children: r
|
|
146
141
|
});
|
|
147
142
|
}
|
|
148
143
|
function b() {
|
|
149
|
-
let e =
|
|
144
|
+
let e = d(_);
|
|
150
145
|
if (!e) throw Error("useAuth must be used within an AuthProvider");
|
|
151
146
|
return e;
|
|
152
147
|
}
|
|
@@ -58,6 +58,26 @@ export interface ProfileUser {
|
|
|
58
58
|
*/
|
|
59
59
|
export declare const PROFILE_STORAGE_CHANGE_EVENT = "bf-profile-storage-change";
|
|
60
60
|
export declare function getProfiles(): ProfileMeta[];
|
|
61
|
+
/**
|
|
62
|
+
* True when the stored user for a profile is an account whose email was never
|
|
63
|
+
* verified. Such an account can't sign in (the backend rejects it with
|
|
64
|
+
* EMAIL_NOT_VERIFIED), so it is never a valid active or switchable profile —
|
|
65
|
+
* older auth builds wrote one to the list on signup alone (BOFF-7215).
|
|
66
|
+
*/
|
|
67
|
+
export declare function isPendingVerificationProfile(profileId: string): boolean;
|
|
68
|
+
/** True when a profile holds credentials from a completed sign-in. */
|
|
69
|
+
export declare function hasProfileCredentials(profileId: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Profiles that may become the active profile. Excludes pending-verification
|
|
72
|
+
* accounts only: a verified profile may briefly lack tokens mid-sign-in (user
|
|
73
|
+
* is written before tokens), and must still resolve as active then.
|
|
74
|
+
*/
|
|
75
|
+
export declare function getSelectableProfiles(): ProfileMeta[];
|
|
76
|
+
/**
|
|
77
|
+
* Profiles to list in the account switcher: selectable profiles that hold
|
|
78
|
+
* credentials, plus the active profile (whose tokens may be mid-write).
|
|
79
|
+
*/
|
|
80
|
+
export declare function getSwitchableProfiles(activeProfileId: string | null): ProfileMeta[];
|
|
61
81
|
export declare function setProfiles(profiles: ProfileMeta[]): void;
|
|
62
82
|
export declare function addProfile(meta: ProfileMeta): void;
|
|
63
83
|
export declare function removeProfile(profileId: string): void;
|