@burtson-labs/bandit-engine 2.0.150 → 2.0.152
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/{aiProviderStore-FTD277QP.mjs → aiProviderStore-ZQ5VVVKQ.mjs} +2 -2
- package/dist/chat-Y3WOTIKI.mjs +16 -0
- package/dist/chat-provider.js +5 -2
- package/dist/chat-provider.js.map +1 -1
- package/dist/chat-provider.mjs +5 -5
- package/dist/{chunk-7P7IS6UA.mjs → chunk-6STVJJSG.mjs} +2 -2
- package/dist/{chunk-YEPJ7DWZ.mjs → chunk-7ESJJN6D.mjs} +63 -21
- package/dist/chunk-7ESJJN6D.mjs.map +1 -0
- package/dist/{chunk-K2JGFKEB.mjs → chunk-CVFFNX7H.mjs} +2 -2
- package/dist/{chunk-43MLINPL.mjs → chunk-GWQRTUKF.mjs} +6 -3
- package/dist/chunk-GWQRTUKF.mjs.map +1 -0
- package/dist/{chunk-IJTDHBHP.mjs → chunk-LPSM62OE.mjs} +9 -9
- package/dist/{chunk-PU74BI6Y.mjs → chunk-QLATFSSO.mjs} +5 -5
- package/dist/{chunk-F7JXIW6T.mjs → chunk-RRCCSN3N.mjs} +2 -2
- package/dist/{chunk-FFVGZK5D.mjs → chunk-TYRYAAP2.mjs} +3 -3
- package/dist/{chunk-L37EUHMZ.mjs → chunk-U33KBX3Y.mjs} +4 -4
- package/dist/{chunk-NLBZZP3B.mjs → chunk-VLUXQE24.mjs} +3 -3
- package/dist/index.js +96 -51
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -10
- package/dist/management/management.js +90 -45
- package/dist/management/management.js.map +1 -1
- package/dist/management/management.mjs +8 -8
- package/dist/modals/chat-modal/chat-modal.js +5 -2
- package/dist/modals/chat-modal/chat-modal.js.map +1 -1
- package/dist/modals/chat-modal/chat-modal.mjs +4 -4
- package/package.json +1 -1
- package/dist/chat-YOT2RPWD.mjs +0 -16
- package/dist/chunk-43MLINPL.mjs.map +0 -1
- package/dist/chunk-YEPJ7DWZ.mjs.map +0 -1
- /package/dist/{aiProviderStore-FTD277QP.mjs.map → aiProviderStore-ZQ5VVVKQ.mjs.map} +0 -0
- /package/dist/{chat-YOT2RPWD.mjs.map → chat-Y3WOTIKI.mjs.map} +0 -0
- /package/dist/{chunk-7P7IS6UA.mjs.map → chunk-6STVJJSG.mjs.map} +0 -0
- /package/dist/{chunk-K2JGFKEB.mjs.map → chunk-CVFFNX7H.mjs.map} +0 -0
- /package/dist/{chunk-IJTDHBHP.mjs.map → chunk-LPSM62OE.mjs.map} +0 -0
- /package/dist/{chunk-PU74BI6Y.mjs.map → chunk-QLATFSSO.mjs.map} +0 -0
- /package/dist/{chunk-F7JXIW6T.mjs.map → chunk-RRCCSN3N.mjs.map} +0 -0
- /package/dist/{chunk-FFVGZK5D.mjs.map → chunk-TYRYAAP2.mjs.map} +0 -0
- /package/dist/{chunk-L37EUHMZ.mjs.map → chunk-U33KBX3Y.mjs.map} +0 -0
- /package/dist/{chunk-NLBZZP3B.mjs.map → chunk-VLUXQE24.mjs.map} +0 -0
package/dist/index.mjs
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import {
|
|
2
2
|
chat_default
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7ESJJN6D.mjs";
|
|
4
4
|
import {
|
|
5
5
|
chat_provider_default
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QLATFSSO.mjs";
|
|
7
7
|
import "./chunk-ONQMRE2G.mjs";
|
|
8
8
|
import {
|
|
9
9
|
management_default,
|
|
10
10
|
useGatewayHealth,
|
|
11
11
|
useGatewayMemory,
|
|
12
12
|
useGatewayModels
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-LPSM62OE.mjs";
|
|
14
|
+
import "./chunk-6STVJJSG.mjs";
|
|
15
|
+
import "./chunk-RRCCSN3N.mjs";
|
|
16
|
+
import "./chunk-CVFFNX7H.mjs";
|
|
17
17
|
import {
|
|
18
18
|
defineCustomElement
|
|
19
19
|
} from "./chunk-IXIM7BNO.mjs";
|
|
20
20
|
import {
|
|
21
21
|
FeedbackButton,
|
|
22
22
|
chat_modal_default
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-U33KBX3Y.mjs";
|
|
24
24
|
import {
|
|
25
25
|
FeedbackModal,
|
|
26
26
|
StreamingTTSClient,
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
useTTS,
|
|
38
38
|
useVoiceStore,
|
|
39
39
|
voiceService
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-TYRYAAP2.mjs";
|
|
41
41
|
import {
|
|
42
42
|
DEFAULT_TIER_FEATURES,
|
|
43
43
|
FeatureFlagContext,
|
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
useVectorStore,
|
|
57
57
|
vectorDatabaseService,
|
|
58
58
|
vectorMigrationService
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-VLUXQE24.mjs";
|
|
60
60
|
import {
|
|
61
61
|
usePackageSettingsStore,
|
|
62
62
|
usePreferencesStore
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
import {
|
|
65
65
|
authenticationService,
|
|
66
66
|
useAuthenticationStore
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-GWQRTUKF.mjs";
|
|
68
68
|
import {
|
|
69
69
|
DebugLogger,
|
|
70
70
|
debugLogger
|
|
@@ -1585,7 +1585,7 @@ function emitAuthTokenChanged(token) {
|
|
|
1585
1585
|
detail: { token }
|
|
1586
1586
|
}));
|
|
1587
1587
|
}
|
|
1588
|
-
var TOKEN_KEY2, AUTH_TOKEN_CHANGED_EVENT, AuthenticationService,
|
|
1588
|
+
var TOKEN_KEY2, AUTH_TOKEN_CHANGED_EVENT, AuthenticationService, authenticationService2;
|
|
1589
1589
|
var init_authenticationService = __esm({
|
|
1590
1590
|
"src/services/auth/authenticationService.ts"() {
|
|
1591
1591
|
"use strict";
|
|
@@ -1638,7 +1638,7 @@ var init_authenticationService = __esm({
|
|
|
1638
1638
|
}
|
|
1639
1639
|
}
|
|
1640
1640
|
};
|
|
1641
|
-
|
|
1641
|
+
authenticationService2 = new AuthenticationService();
|
|
1642
1642
|
}
|
|
1643
1643
|
});
|
|
1644
1644
|
|
|
@@ -1721,12 +1721,15 @@ var init_gateway_service = __esm({
|
|
|
1721
1721
|
return;
|
|
1722
1722
|
}
|
|
1723
1723
|
const data = error.response?.data;
|
|
1724
|
-
|
|
1725
|
-
if (
|
|
1724
|
+
let code = data?.code;
|
|
1725
|
+
if (status === 401 && !code) {
|
|
1726
|
+
code = "TOKEN_EXPIRED";
|
|
1727
|
+
}
|
|
1728
|
+
if (code !== "FORCE_RELOGIN" && code !== "ACCOUNT_LOCKED" && code !== "TOKEN_EXPIRED") {
|
|
1726
1729
|
return;
|
|
1727
1730
|
}
|
|
1728
1731
|
try {
|
|
1729
|
-
|
|
1732
|
+
authenticationService2.clearToken();
|
|
1730
1733
|
} catch {
|
|
1731
1734
|
}
|
|
1732
1735
|
if (typeof window !== "undefined" && typeof window.dispatchEvent === "function") {
|
|
@@ -8137,7 +8140,7 @@ function buildUrl(path) {
|
|
|
8137
8140
|
}
|
|
8138
8141
|
function buildHeaders() {
|
|
8139
8142
|
const headers = { "Content-Type": "application/json" };
|
|
8140
|
-
const token =
|
|
8143
|
+
const token = authenticationService2.getToken();
|
|
8141
8144
|
if (token) {
|
|
8142
8145
|
headers["Authorization"] = `Bearer ${token}`;
|
|
8143
8146
|
}
|
|
@@ -8285,7 +8288,7 @@ function resolveAuthIdentity(token) {
|
|
|
8285
8288
|
if (!token) {
|
|
8286
8289
|
return null;
|
|
8287
8290
|
}
|
|
8288
|
-
const claims =
|
|
8291
|
+
const claims = authenticationService2.parseJwtClaims(token);
|
|
8289
8292
|
if (claims?.sub) {
|
|
8290
8293
|
return claims.sub;
|
|
8291
8294
|
}
|
|
@@ -8818,7 +8821,7 @@ var init_conversationSyncStore = __esm({
|
|
|
8818
8821
|
async initialize() {
|
|
8819
8822
|
ensureTrackersInitialized();
|
|
8820
8823
|
const gatewayUrl = usePackageSettingsStore.getState().settings?.gatewayApiUrl;
|
|
8821
|
-
const token =
|
|
8824
|
+
const token = authenticationService2.getToken();
|
|
8822
8825
|
const tokenIdentity = resolveAuthIdentity(token);
|
|
8823
8826
|
const current = get();
|
|
8824
8827
|
const storedIdentity = getStoredSyncIdentity();
|
|
@@ -8944,10 +8947,10 @@ var init_conversationSyncStore = __esm({
|
|
|
8944
8947
|
});
|
|
8945
8948
|
set({
|
|
8946
8949
|
hasLoadedPreference: true,
|
|
8947
|
-
initializedForToken:
|
|
8948
|
-
initializedForIdentity: resolveAuthIdentity(
|
|
8950
|
+
initializedForToken: authenticationService2.getToken(),
|
|
8951
|
+
initializedForIdentity: resolveAuthIdentity(authenticationService2.getToken())
|
|
8949
8952
|
});
|
|
8950
|
-
setStoredSyncIdentity(resolveAuthIdentity(
|
|
8953
|
+
setStoredSyncIdentity(resolveAuthIdentity(authenticationService2.getToken()));
|
|
8951
8954
|
if (enabled) {
|
|
8952
8955
|
set({ hasCompletedInitialUpload: false });
|
|
8953
8956
|
}
|
|
@@ -8987,10 +8990,10 @@ var init_conversationSyncStore = __esm({
|
|
|
8987
8990
|
});
|
|
8988
8991
|
set({
|
|
8989
8992
|
hasLoadedPreference: true,
|
|
8990
|
-
initializedForToken:
|
|
8991
|
-
initializedForIdentity: resolveAuthIdentity(
|
|
8993
|
+
initializedForToken: authenticationService2.getToken(),
|
|
8994
|
+
initializedForIdentity: resolveAuthIdentity(authenticationService2.getToken())
|
|
8992
8995
|
});
|
|
8993
|
-
setStoredSyncIdentity(resolveAuthIdentity(
|
|
8996
|
+
setStoredSyncIdentity(resolveAuthIdentity(authenticationService2.getToken()));
|
|
8994
8997
|
if (preference.syncEnabled && preference.isAdvancedVectorFeaturesEnabled) {
|
|
8995
8998
|
await get().runSync({ force: true });
|
|
8996
8999
|
}
|
|
@@ -9030,7 +9033,7 @@ var init_conversationSyncStore = __esm({
|
|
|
9030
9033
|
debugLogger.error("conversationSyncStore: runSync error - missing gateway URL");
|
|
9031
9034
|
return;
|
|
9032
9035
|
}
|
|
9033
|
-
const token =
|
|
9036
|
+
const token = authenticationService2.getToken();
|
|
9034
9037
|
if (!token) {
|
|
9035
9038
|
set({ status: "error", lastError: "Authentication required to sync conversations." });
|
|
9036
9039
|
debugLogger.error("conversationSyncStore: runSync error - missing auth token");
|
|
@@ -11919,7 +11922,7 @@ var init_voiceService = __esm({
|
|
|
11919
11922
|
debugLogger.error("Gateway API URL not configured");
|
|
11920
11923
|
throw new Error("Gateway API URL not configured");
|
|
11921
11924
|
}
|
|
11922
|
-
const token =
|
|
11925
|
+
const token = authenticationService2.getToken();
|
|
11923
11926
|
if (!token) {
|
|
11924
11927
|
debugLogger.warn("No JWT token available - skipping voice models fetch");
|
|
11925
11928
|
const emptyModels = {
|
|
@@ -11929,7 +11932,7 @@ var init_voiceService = __esm({
|
|
|
11929
11932
|
};
|
|
11930
11933
|
return emptyModels;
|
|
11931
11934
|
}
|
|
11932
|
-
if (
|
|
11935
|
+
if (authenticationService2.isTokenExpired(token)) {
|
|
11933
11936
|
debugLogger.warn("JWT token is expired - skipping voice models fetch");
|
|
11934
11937
|
const emptyModels = {
|
|
11935
11938
|
models: [],
|
|
@@ -12018,7 +12021,7 @@ var init_tts_client = __esm({
|
|
|
12018
12021
|
init_packageSettingsStore();
|
|
12019
12022
|
init_debugLogger();
|
|
12020
12023
|
getOrAppendAuthHeader = (existing = {}) => {
|
|
12021
|
-
const token =
|
|
12024
|
+
const token = authenticationService2.getToken();
|
|
12022
12025
|
if (token) {
|
|
12023
12026
|
existing["Authorization"] = `Bearer ${token}`;
|
|
12024
12027
|
return existing;
|
|
@@ -12709,8 +12712,8 @@ var init_ai_response_action_bar = __esm({
|
|
|
12709
12712
|
const { preferences } = usePreferencesStore();
|
|
12710
12713
|
const { settings: packageSettings } = usePackageSettingsStore();
|
|
12711
12714
|
(0, import_react13.useEffect)(() => {
|
|
12712
|
-
const isAuthenticated =
|
|
12713
|
-
const token =
|
|
12715
|
+
const isAuthenticated = authenticationService2.isAuthenticated();
|
|
12716
|
+
const token = authenticationService2.getToken();
|
|
12714
12717
|
if (!initialized || availableVoices.length === 0) {
|
|
12715
12718
|
if (token && isAuthenticated) {
|
|
12716
12719
|
debugLogger.debug("AI Action Bar: Voices not initialized or unavailable, attempting to load from API");
|
|
@@ -15563,7 +15566,7 @@ var init_FeedbackModal = __esm({
|
|
|
15563
15566
|
}
|
|
15564
15567
|
const gatewayService = new GatewayService(
|
|
15565
15568
|
gatewayUrl,
|
|
15566
|
-
() =>
|
|
15569
|
+
() => authenticationService2.getToken(),
|
|
15567
15570
|
feedbackEmail || settings?.feedbackEmail
|
|
15568
15571
|
);
|
|
15569
15572
|
const feedbackRequest = {
|
|
@@ -19507,7 +19510,7 @@ var init_mcpServersService = __esm({
|
|
|
19507
19510
|
};
|
|
19508
19511
|
authHeaders2 = () => {
|
|
19509
19512
|
const headers = { "Content-Type": "application/json" };
|
|
19510
|
-
const token =
|
|
19513
|
+
const token = authenticationService2.getToken();
|
|
19511
19514
|
if (token) headers["Authorization"] = `Bearer ${token}`;
|
|
19512
19515
|
return headers;
|
|
19513
19516
|
};
|
|
@@ -20706,7 +20709,7 @@ var init_engineStore = __esm({
|
|
|
20706
20709
|
}
|
|
20707
20710
|
try {
|
|
20708
20711
|
const headers = { "Content-Type": "application/json" };
|
|
20709
|
-
const token =
|
|
20712
|
+
const token = authenticationService2.getToken();
|
|
20710
20713
|
if (token) headers["Authorization"] = `Bearer ${token}`;
|
|
20711
20714
|
const res = await fetch(`${base}/models`, { headers });
|
|
20712
20715
|
const data = await res.json();
|
|
@@ -21024,7 +21027,7 @@ var init_stt_client = __esm({
|
|
|
21024
21027
|
filename,
|
|
21025
21028
|
url: `${gatewayUrl}/stt/transcribe`
|
|
21026
21029
|
});
|
|
21027
|
-
const token =
|
|
21030
|
+
const token = authenticationService2.getToken();
|
|
21028
21031
|
const response = await fetch(`${gatewayUrl}/stt/transcribe`, {
|
|
21029
21032
|
method: "POST",
|
|
21030
21033
|
headers: {
|
|
@@ -22624,7 +22627,7 @@ function syncTelemetry() {
|
|
|
22624
22627
|
const settings = usePackageSettingsStore.getState().settings;
|
|
22625
22628
|
const cfg = resolveTelemetryConfig({
|
|
22626
22629
|
telemetry: settings?.telemetry,
|
|
22627
|
-
banditApiKey:
|
|
22630
|
+
banditApiKey: authenticationService2.getToken() ?? void 0
|
|
22628
22631
|
});
|
|
22629
22632
|
active = cfg ? new TelemetryExporter(cfg) : null;
|
|
22630
22633
|
} catch {
|
|
@@ -23275,7 +23278,7 @@ var init_mcpService = __esm({
|
|
|
23275
23278
|
}
|
|
23276
23279
|
if (tool.mcpServerId) {
|
|
23277
23280
|
const base2 = settings.gatewayApiUrl.replace(/\/$/, "");
|
|
23278
|
-
const token2 =
|
|
23281
|
+
const token2 = authenticationService2.getToken();
|
|
23279
23282
|
const controller2 = new AbortController();
|
|
23280
23283
|
const timeoutId2 = setTimeout(() => controller2.abort(), 3e4);
|
|
23281
23284
|
try {
|
|
@@ -23322,7 +23325,7 @@ var init_mcpService = __esm({
|
|
|
23322
23325
|
"Content-Type": "application/json"
|
|
23323
23326
|
}
|
|
23324
23327
|
};
|
|
23325
|
-
const token =
|
|
23328
|
+
const token = authenticationService2.getToken();
|
|
23326
23329
|
if (token) {
|
|
23327
23330
|
requestOptions.headers = {
|
|
23328
23331
|
...requestOptions.headers,
|
|
@@ -24320,6 +24323,29 @@ ${protocol}`;
|
|
|
24320
24323
|
overrideComponentStatus("Idle");
|
|
24321
24324
|
setIsSubmitting(false);
|
|
24322
24325
|
setIsStreaming(false);
|
|
24326
|
+
if (/lifetime validation|token.*(expired|invalid)|unauthorized|\b401\b/i.test(err.message || "")) {
|
|
24327
|
+
const { replaceLastAnswer: replaceLastAnswer2 } = useConversationStore.getState();
|
|
24328
|
+
replaceLastAnswer2(
|
|
24329
|
+
"_Your session ended \u2014 sign back in to continue._",
|
|
24330
|
+
lastPartialRef.current.images,
|
|
24331
|
+
false,
|
|
24332
|
+
lastPartialRef.current.usedDocs,
|
|
24333
|
+
true
|
|
24334
|
+
);
|
|
24335
|
+
setResponse("");
|
|
24336
|
+
setStreamBuffer("");
|
|
24337
|
+
setIsThinking?.(false);
|
|
24338
|
+
setPendingMessage(null);
|
|
24339
|
+
try {
|
|
24340
|
+
authenticationService.clearToken();
|
|
24341
|
+
} catch {
|
|
24342
|
+
}
|
|
24343
|
+
window.dispatchEvent(
|
|
24344
|
+
new CustomEvent("auth:force-relogin", { detail: { code: "TOKEN_EXPIRED" } })
|
|
24345
|
+
);
|
|
24346
|
+
telemetryEndTurn({ error: "auth_expired" });
|
|
24347
|
+
return;
|
|
24348
|
+
}
|
|
24323
24349
|
const rateLimit = parseRateLimitError(err);
|
|
24324
24350
|
if (rateLimit) {
|
|
24325
24351
|
debugLogger.info("Chat hit usage limit (429) \u2014 showing upgrade prompt", {
|
|
@@ -27602,7 +27628,7 @@ var init_conversation_drawer = __esm({
|
|
|
27602
27628
|
title: "Sign out",
|
|
27603
27629
|
onClick: (event) => {
|
|
27604
27630
|
event.stopPropagation();
|
|
27605
|
-
|
|
27631
|
+
authenticationService2.clearToken();
|
|
27606
27632
|
window.location.href = "/login";
|
|
27607
27633
|
},
|
|
27608
27634
|
sx: {
|
|
@@ -28718,7 +28744,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
|
|
|
28718
28744
|
title: "Sign out",
|
|
28719
28745
|
onClick: (event) => {
|
|
28720
28746
|
event.stopPropagation();
|
|
28721
|
-
|
|
28747
|
+
authenticationService2.clearToken();
|
|
28722
28748
|
window.location.href = "/login";
|
|
28723
28749
|
},
|
|
28724
28750
|
sx: {
|
|
@@ -29598,7 +29624,7 @@ var init_UnderReview = __esm({
|
|
|
29598
29624
|
const theme = (0, import_material51.useTheme)();
|
|
29599
29625
|
const navigate = (0, import_react_router_dom4.useNavigate)();
|
|
29600
29626
|
const handleResetSession = () => {
|
|
29601
|
-
|
|
29627
|
+
authenticationService2.clearToken();
|
|
29602
29628
|
navigate("/login");
|
|
29603
29629
|
};
|
|
29604
29630
|
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
@@ -30277,8 +30303,8 @@ var init_chat2 = __esm({
|
|
|
30277
30303
|
const notificationService2 = useNotificationService();
|
|
30278
30304
|
const [selectedTheme, setSelectedTheme] = (0, import_react63.useState)(null);
|
|
30279
30305
|
const [themeLoading, setThemeLoading] = (0, import_react63.useState)(true);
|
|
30280
|
-
const token =
|
|
30281
|
-
const claims = token ?
|
|
30306
|
+
const token = authenticationService2.getToken();
|
|
30307
|
+
const claims = token ? authenticationService2.parseJwtClaims(token) : null;
|
|
30282
30308
|
const baseTheme = themeMap_default[selectedTheme ?? "bandit-dark"] || banditDarkTheme;
|
|
30283
30309
|
const banditTheme = (0, import_react63.useMemo)(() => {
|
|
30284
30310
|
return (0, import_styles34.createTheme)(baseTheme, {
|
|
@@ -30351,7 +30377,7 @@ var init_chat2 = __esm({
|
|
|
30351
30377
|
} = useTTS();
|
|
30352
30378
|
(0, import_react63.useEffect)(() => {
|
|
30353
30379
|
const timer = setTimeout(() => {
|
|
30354
|
-
const isAuthenticated =
|
|
30380
|
+
const isAuthenticated = authenticationService2.isAuthenticated();
|
|
30355
30381
|
if (!initialized || availableVoices.length === 0) {
|
|
30356
30382
|
if (token && isAuthenticated) {
|
|
30357
30383
|
debugLogger.debug("Chat: Voices not initialized or unavailable, attempting to load from API");
|
|
@@ -30364,7 +30390,7 @@ var init_chat2 = __esm({
|
|
|
30364
30390
|
return () => clearTimeout(timer);
|
|
30365
30391
|
}, [initialized, availableVoices.length, loadVoicesFromAPI, token]);
|
|
30366
30392
|
(0, import_react63.useEffect)(() => {
|
|
30367
|
-
const isAuthenticated =
|
|
30393
|
+
const isAuthenticated = authenticationService2.isAuthenticated();
|
|
30368
30394
|
if (packageSettings?.gatewayApiUrl && availableVoices.length === 0 && !initialized) {
|
|
30369
30395
|
if (token && isAuthenticated) {
|
|
30370
30396
|
debugLogger.debug("Chat: Gateway URL available and no voices loaded, attempting to load from API");
|
|
@@ -30386,6 +30412,7 @@ var init_chat2 = __esm({
|
|
|
30386
30412
|
const [isMobile, setIsMobile] = (0, import_react63.useState)(false);
|
|
30387
30413
|
const [drawerOpen, setDrawerOpen] = (0, import_react63.useState)(false);
|
|
30388
30414
|
const [mobileConversationsOpen, setMobileConversationsOpen] = (0, import_react63.useState)(false);
|
|
30415
|
+
const cardSwipeStartXRef = (0, import_react63.useRef)(null);
|
|
30389
30416
|
(0, import_react63.useEffect)(() => {
|
|
30390
30417
|
if (typeof document === "undefined") return;
|
|
30391
30418
|
const meta = document.querySelector('meta[name="theme-color"]');
|
|
@@ -31260,6 +31287,10 @@ var init_chat2 = __esm({
|
|
|
31260
31287
|
// reads as full physical height with the rounded corner visible
|
|
31261
31288
|
// where it overlaps the drawer.
|
|
31262
31289
|
transform: isMobile && mobileConversationsOpen ? "translateX(calc(min(calc(100vw - 56px), 360px) - 12px))" : "none",
|
|
31290
|
+
// Rounded card corner, positioned exactly where Claude's sits: at
|
|
31291
|
+
// the top of the webview, just below the OS status strip. The strip
|
|
31292
|
+
// itself is reserved by iOS in web-app mode — no web content can
|
|
31293
|
+
// draw there, so this IS the full available height.
|
|
31263
31294
|
borderRadius: isMobile && mobileConversationsOpen ? "44px" : 0,
|
|
31264
31295
|
zIndex: isMobile && mobileConversationsOpen ? theme.zIndex.modal + 1 : 0,
|
|
31265
31296
|
// Hairline border so the rounded card reads even when the backdrop
|
|
@@ -31273,6 +31304,20 @@ var init_chat2 = __esm({
|
|
|
31273
31304
|
setMobileConversationsOpen(false);
|
|
31274
31305
|
}
|
|
31275
31306
|
} : void 0,
|
|
31307
|
+
onTouchStart: isMobile && mobileConversationsOpen ? (e) => {
|
|
31308
|
+
if (e.currentTarget.contains(e.target)) {
|
|
31309
|
+
cardSwipeStartXRef.current = e.touches[0]?.clientX ?? null;
|
|
31310
|
+
}
|
|
31311
|
+
} : void 0,
|
|
31312
|
+
onTouchMove: isMobile && mobileConversationsOpen ? (e) => {
|
|
31313
|
+
const start = cardSwipeStartXRef.current;
|
|
31314
|
+
if (start === null) return;
|
|
31315
|
+
const dx = (e.touches[0]?.clientX ?? start) - start;
|
|
31316
|
+
if (Math.abs(dx) > 40) {
|
|
31317
|
+
cardSwipeStartXRef.current = null;
|
|
31318
|
+
setMobileConversationsOpen(false);
|
|
31319
|
+
}
|
|
31320
|
+
} : void 0,
|
|
31276
31321
|
children: [
|
|
31277
31322
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
31278
31323
|
chat_app_bar_default,
|
|
@@ -31570,12 +31615,12 @@ var init_chat2 = __esm({
|
|
|
31570
31615
|
ossConfigured,
|
|
31571
31616
|
isOSSMode: isOSSMode(),
|
|
31572
31617
|
tier: featureFlag.getEvaluation()?.tier,
|
|
31573
|
-
hasToken:
|
|
31618
|
+
hasToken: authenticationService2.isAuthenticated(),
|
|
31574
31619
|
playgroundBypassAuth,
|
|
31575
31620
|
isPlaygroundRoute,
|
|
31576
31621
|
bypassAuth
|
|
31577
31622
|
});
|
|
31578
|
-
if (!allowUnauthenticated && !bypassAuth && !
|
|
31623
|
+
if (!allowUnauthenticated && !bypassAuth && !authenticationService2.isAuthenticated()) {
|
|
31579
31624
|
debugLogger.debug("User is not authenticated, redirecting to login");
|
|
31580
31625
|
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_router_dom5.Navigate, { to: "/login", replace: true });
|
|
31581
31626
|
}
|
|
@@ -36395,7 +36440,7 @@ var useGatewayClient = () => {
|
|
|
36395
36440
|
}
|
|
36396
36441
|
return new GatewayService(
|
|
36397
36442
|
gatewayUrl,
|
|
36398
|
-
() =>
|
|
36443
|
+
() => authenticationService2.getToken(),
|
|
36399
36444
|
feedbackEmail
|
|
36400
36445
|
);
|
|
36401
36446
|
}, [gatewayUrl, feedbackEmail]);
|
|
@@ -40244,7 +40289,7 @@ var buildHeaders2 = () => {
|
|
|
40244
40289
|
const headers = {
|
|
40245
40290
|
"Content-Type": "application/json"
|
|
40246
40291
|
};
|
|
40247
|
-
const token =
|
|
40292
|
+
const token = authenticationService2.getToken();
|
|
40248
40293
|
if (token) {
|
|
40249
40294
|
headers.Authorization = `Bearer ${token}`;
|
|
40250
40295
|
}
|
|
@@ -42843,7 +42888,7 @@ var AIProviderInitService = class _AIProviderInitService {
|
|
|
42843
42888
|
type: "ollama" /* OLLAMA */,
|
|
42844
42889
|
baseUrl: settings.ollamaUrl,
|
|
42845
42890
|
tokenFactory: () => {
|
|
42846
|
-
let token =
|
|
42891
|
+
let token = authenticationService2.getToken();
|
|
42847
42892
|
if (!token) {
|
|
42848
42893
|
token = localStorage.getItem("authToken");
|
|
42849
42894
|
}
|
|
@@ -42884,7 +42929,7 @@ var AIProviderInitService = class _AIProviderInitService {
|
|
|
42884
42929
|
type: "ollama" /* OLLAMA */,
|
|
42885
42930
|
baseUrl: settings.ollamaUrl || "http://localhost:11434",
|
|
42886
42931
|
tokenFactory: () => {
|
|
42887
|
-
let token =
|
|
42932
|
+
let token = authenticationService2.getToken();
|
|
42888
42933
|
if (!token) {
|
|
42889
42934
|
token = localStorage.getItem("authToken");
|
|
42890
42935
|
}
|
|
@@ -42915,7 +42960,7 @@ var AIProviderInitService = class _AIProviderInitService {
|
|
|
42915
42960
|
type: "ollama" /* OLLAMA */,
|
|
42916
42961
|
baseUrl: "http://localhost:11434",
|
|
42917
42962
|
tokenFactory: () => {
|
|
42918
|
-
let token =
|
|
42963
|
+
let token = authenticationService2.getToken();
|
|
42919
42964
|
if (!token) {
|
|
42920
42965
|
token = localStorage.getItem("authToken");
|
|
42921
42966
|
}
|
|
@@ -43005,7 +43050,7 @@ var AIProviderInitService = class _AIProviderInitService {
|
|
|
43005
43050
|
return config;
|
|
43006
43051
|
}
|
|
43007
43052
|
config.tokenFactory = () => {
|
|
43008
|
-
let token =
|
|
43053
|
+
let token = authenticationService2.getToken();
|
|
43009
43054
|
if (!token && typeof localStorage !== "undefined") {
|
|
43010
43055
|
try {
|
|
43011
43056
|
token = localStorage.getItem("authToken");
|
|
@@ -43652,7 +43697,7 @@ function buildUrl3(path) {
|
|
|
43652
43697
|
}
|
|
43653
43698
|
function authHeaders() {
|
|
43654
43699
|
const headers = { "Content-Type": "application/json" };
|
|
43655
|
-
const token =
|
|
43700
|
+
const token = authenticationService2.getToken();
|
|
43656
43701
|
if (token) headers["Authorization"] = `Bearer ${token}`;
|
|
43657
43702
|
return headers;
|
|
43658
43703
|
}
|
|
@@ -44997,7 +45042,7 @@ var Management = () => {
|
|
|
44997
45042
|
let isActive = true;
|
|
44998
45043
|
const loadCapabilities = async () => {
|
|
44999
45044
|
try {
|
|
45000
|
-
const token = authToken ??
|
|
45045
|
+
const token = authToken ?? authenticationService2.getToken();
|
|
45001
45046
|
const headers = {
|
|
45002
45047
|
"Content-Type": "application/json"
|
|
45003
45048
|
};
|
|
@@ -45133,7 +45178,7 @@ var Management = () => {
|
|
|
45133
45178
|
"admin",
|
|
45134
45179
|
"platform_admin"
|
|
45135
45180
|
]);
|
|
45136
|
-
const userRoles = (
|
|
45181
|
+
const userRoles = (authenticationService2.parseJwtClaims(authenticationService2.getToken() ?? "")?.roles ?? []).map((r) => r.toLowerCase());
|
|
45137
45182
|
const isWorkspaceAdmin = userRoles.some(
|
|
45138
45183
|
(r) => platformAdminRoles.has(r) || r.endsWith("-admin")
|
|
45139
45184
|
);
|