Tighten broker session expiry gating

This commit is contained in:
Thigazhezhilan J 2026-04-14 10:13:40 +05:30
parent 8f34b1bfd3
commit 02c48ae91b

View File

@ -167,6 +167,19 @@ function formatBrokerName(broker?: string | null) {
return normalized || "broker"; return normalized || "broker";
} }
function isBrokerAuthError(error: unknown) {
const message = String((error as { message?: string } | null)?.message || "").toLowerCase();
if (!message) {
return false;
}
return (
message.includes("401:") ||
message.includes("session expired") ||
message.includes("please reconnect") ||
message.includes("broker session expired")
);
}
function firstNumber(...values: unknown[]) { function firstNumber(...values: unknown[]) {
for (const value of values) { for (const value of values) {
const parsed = Number(value); const parsed = Number(value);
@ -679,19 +692,34 @@ export default function PortfolioSection() {
}, [positionsQuery.data]); }, [positionsQuery.data]);
useEffect(() => { useEffect(() => {
if ( if (!brokerStatus?.connected) {
brokerStatus?.connected && return;
(holdingsQuery.isError || fundsQuery.isError || equityCurveQuery.isError || positionsQuery.isError) }
) {
const authIssue =
isBrokerAuthError(holdingsQuery.error) ||
isBrokerAuthError(fundsQuery.error) ||
isBrokerAuthError(positionsQuery.error) ||
isBrokerAuthError(equityCurveQuery.error);
if (authIssue) {
setSessionExpired(true); setSessionExpired(true);
} }
}, [ }, [
brokerStatus?.connected, brokerStatus?.connected,
holdingsQuery.isError, holdingsQuery.error,
fundsQuery.isError, fundsQuery.error,
equityCurveQuery.isError, positionsQuery.error,
positionsQuery.isError, equityCurveQuery.error,
]); ]);
useEffect(() => {
const authState = (brokerStatus?.authState || "").trim().toUpperCase();
if (!isConnected || !authState || authState === "VALID") {
setSessionExpired(false);
setReconnectAttempted(false);
}
}, [isConnected, brokerStatus?.authState]);
useEffect(() => { useEffect(() => {
if (!isConnected) { if (!isConnected) {
setSessionExpired(false); setSessionExpired(false);