debounce session fetch as it literally ddoses cloudflare

This commit is contained in:
41666 2022-02-01 21:05:48 -05:00
parent fcaf3af875
commit 140f9d566b

View file

@ -31,6 +31,16 @@ const SessionContext = React.createContext<SessionContextT>({
setupSession: () => {}, setupSession: () => {},
}); });
const debounce = (func: Function, timeout = 300) => {
let timer: any | undefined = undefined;
return (...args: any) => {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, timeout);
};
};
export const useSessionContext = () => React.useContext(SessionContext); export const useSessionContext = () => React.useContext(SessionContext);
export const SessionContextProvider = (props: { children: React.ReactNode }) => { export const SessionContextProvider = (props: { children: React.ReactNode }) => {
@ -108,34 +118,36 @@ export const SessionContextProvider = (props: { children: React.ReactNode }) =>
// If not, lets fetch it from the server // If not, lets fetch it from the server
setLock(true); setLock(true);
fetchSession(session.sessionID) debounce(async (sessionID: string) => {
.then((sessionData) => { fetchSession(sessionID)
if (sessionData) { .then((sessionData) => {
setSession({ if (sessionData) {
...session, setSession({
isAuthenticated: true, ...session,
session: { isAuthenticated: true,
user: sessionData.user, session: {
guilds: sessionData.guilds, user: sessionData.user,
}, guilds: sessionData.guilds,
}); },
saveSessionData({ });
sessionID: session.sessionID!, saveSessionData({
session: { sessionID: session.sessionID!,
user: sessionData.user, session: {
guilds: sessionData.guilds, user: sessionData.user,
}, guilds: sessionData.guilds,
}); },
} else { });
} else {
session.setupSession(null);
setLock(false);
}
})
.catch((e) => {
console.error(e);
session.setupSession(null); session.setupSession(null);
setLock(false); setLock(false);
} });
}) }, 2000)(session.sessionID!);
.catch((e) => {
console.error(e);
session.setupSession(null);
setLock(false);
});
} }
}, [session, locked, setLock, fetch]); }, [session, locked, setLock, fetch]);