Files
frontend/src/shared/api/csrf.ts
2026-05-22 22:14:15 +03:00

34 lines
739 B
TypeScript

import { API_URL } from '@shared/config/env'
interface CsrfResponse {
header_name: string
token: string
}
let cachedToken: string | null = null
let inflight: Promise<string> | null = null
export function clearCsrfCache(): void {
cachedToken = null
inflight = null
}
export function getCsrfToken(): Promise<string> {
if (cachedToken) return Promise.resolve(cachedToken)
if (inflight) return inflight
inflight = fetch(`${API_URL}/csrf/token`, { credentials: 'include' })
.then((res) => res.json() as Promise<CsrfResponse>)
.then((data) => {
cachedToken = data.token
inflight = null
return cachedToken
})
.catch((err) => {
inflight = null
throw err
})
return inflight
}