Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | 24x 24x 22x 22x 22x 22x 22x 22x 12x 12x 12x 4x 22x 24x 16x 16x 16x 16x 16x 14x 14x 24x 5x 5x 5x 5x 5x 5x 4x 4x 3x 2x 2x 1x 1x 1x 1x | import { getAuthToken } from './tokenHelpers';
/**
* Construit les en-têtes HTTP pour une requête API
* @param requiresAuth - Indique si la requête nécessite une authentification
* @param baseHeaders - En-têtes de base à inclure (optionnel)
* @returns Headers configurés pour la requête
* @example
* const headers = buildHeaders(true, { 'Custom-Header': 'value' });
*/
export function buildHeaders(
requiresAuth: boolean,
baseHeaders: HeadersInit = {}
): HeadersInit {
const headers: Record<string, string> = {
"Content-Type": "application/json",
};
if (baseHeaders) {
Iif (baseHeaders instanceof Headers) {
baseHeaders.forEach((value, key) => {
headers[key] = value;
});
} else Iif (Array.isArray(baseHeaders)) {
baseHeaders.forEach(([key, value]) => {
headers[key] = value;
});
} else {
Object.assign(headers, baseHeaders);
}
}
if (requiresAuth) {
const token = getAuthToken();
console.log('[buildHeaders] Token utilisé:', token);
if (token) {
headers['Authorization'] = `Bearer ${token}`;
}
}
return headers;
}
/**
* Effectue une requête HTTP vers l'API avec gestion des en-têtes et de l'authentification
* @param endpoint - Point de terminaison de l'API
* @param options - Options de la requête fetch
* @param requiresAuth - Indique si la requête nécessite une authentification
* @returns Promise contenant la réponse Response
* @throws Error - En cas d'erreur réseau ou de configuration
*/
export async function makeRequest(
endpoint: string,
options: RequestInit = {},
requiresAuth: boolean = true
): Promise<Response> {
const headers = buildHeaders(requiresAuth, options.headers);
const baseUrl = process.env.NEXT_PUBLIC_API_URL;
const cleanEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;
console.log('[makeRequest] URL:', baseUrl + cleanEndpoint, 'Headers:', headers);
const response = await fetch(baseUrl + cleanEndpoint, {
...options,
headers,
});
console.log(headers)
// Ne pas lever d'erreur ici, laisser fetchApi gérer le 401 et autres erreurs
return response;
}
/**
* Tente de rafraîchir le token d'authentification en utilisant le refresh token
* @returns Promise<boolean> - true si le token a été rafraîchi avec succès, false sinon
* @example
* const success = await tryRefreshToken();
* if (success) {
* // Token rafraîchi, on peut réessayer la requête
* }
*/
export async function tryRefreshToken(): Promise<boolean> {
console.log("[tryRefreshToken] Tentative de rafraîchissement du token");
const refreshTokenKey = process.env.NEXT_PUBLIC_AUTH_REFRESH_TOKEN_KEY!;
const tokenKey = process.env.NEXT_PUBLIC_AUTH_TOKEN_KEY!;
const baseUrl = process.env.NEXT_PUBLIC_API_URL!;
const refreshToken = localStorage.getItem(refreshTokenKey);
if (!refreshToken) return false;
try {
const response = await fetch(`${baseUrl}/auth/refresh/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ refresh: refreshToken }),
});
if (!response.ok) return false;
const data = await response.json();
if (data.access) {
localStorage.setItem(tokenKey, data.access);
return true;
}
return false;
} catch {
return false;
}
}
|