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";
|
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);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user