Tighten broker session expiry gating
This commit is contained in:
parent
8f34b1bfd3
commit
02c48ae91b
@ -167,6 +167,19 @@ function formatBrokerName(broker?: string | null) {
|
||||
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[]) {
|
||||
for (const value of values) {
|
||||
const parsed = Number(value);
|
||||
@ -679,19 +692,34 @@ export default function PortfolioSection() {
|
||||
}, [positionsQuery.data]);
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
brokerStatus?.connected &&
|
||||
(holdingsQuery.isError || fundsQuery.isError || equityCurveQuery.isError || positionsQuery.isError)
|
||||
) {
|
||||
if (!brokerStatus?.connected) {
|
||||
return;
|
||||
}
|
||||
|
||||
const authIssue =
|
||||
isBrokerAuthError(holdingsQuery.error) ||
|
||||
isBrokerAuthError(fundsQuery.error) ||
|
||||
isBrokerAuthError(positionsQuery.error) ||
|
||||
isBrokerAuthError(equityCurveQuery.error);
|
||||
|
||||
if (authIssue) {
|
||||
setSessionExpired(true);
|
||||
}
|
||||
}, [
|
||||
brokerStatus?.connected,
|
||||
holdingsQuery.isError,
|
||||
fundsQuery.isError,
|
||||
equityCurveQuery.isError,
|
||||
positionsQuery.isError,
|
||||
holdingsQuery.error,
|
||||
fundsQuery.error,
|
||||
positionsQuery.error,
|
||||
equityCurveQuery.error,
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
const authState = (brokerStatus?.authState || "").trim().toUpperCase();
|
||||
if (!isConnected || !authState || authState === "VALID") {
|
||||
setSessionExpired(false);
|
||||
setReconnectAttempted(false);
|
||||
}
|
||||
}, [isConnected, brokerStatus?.authState]);
|
||||
useEffect(() => {
|
||||
if (!isConnected) {
|
||||
setSessionExpired(false);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user