mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 20:29:06 +00:00
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
"use client";
|
|
|
|
import { useState, useEffect } from "react";
|
|
import useSessionStatus from "./useSessionStatus";
|
|
import { isAuthConfigured } from "./apiClient";
|
|
|
|
/**
|
|
* Hook to check if authentication is fully ready.
|
|
* This ensures both the session is authenticated AND the API client token is configured.
|
|
* Prevents race conditions where React Query fires requests before the token is set.
|
|
*/
|
|
export default function useAuthReady() {
|
|
const status = useSessionStatus();
|
|
const isAuthenticated = status === "authenticated";
|
|
const [authReady, setAuthReady] = useState(false);
|
|
|
|
useEffect(() => {
|
|
let ready_ = false;
|
|
// Check if both session is authenticated and token is configured
|
|
const checkAuthReady = () => {
|
|
const ready = isAuthenticated && isAuthConfigured();
|
|
ready_ = ready;
|
|
setAuthReady(ready);
|
|
};
|
|
|
|
// Check immediately
|
|
checkAuthReady();
|
|
|
|
// Also check periodically for a short time to catch async updates
|
|
const interval = setInterval(checkAuthReady, 100);
|
|
|
|
// Stop checking after 2 seconds (auth should be ready by then)
|
|
const timeout = setTimeout(() => {
|
|
if (ready_) {
|
|
clearInterval(interval);
|
|
return;
|
|
} else {
|
|
console.warn("Auth not ready after 2 seconds");
|
|
}
|
|
}, 2000);
|
|
|
|
return () => {
|
|
clearInterval(interval);
|
|
clearTimeout(timeout);
|
|
};
|
|
}, [isAuthenticated]);
|
|
|
|
return {
|
|
isAuthReady: authReady,
|
|
isLoading: status === "loading",
|
|
isAuthenticated,
|
|
};
|
|
}
|