24 lines
724 B
TypeScript
24 lines
724 B
TypeScript
|
|
/**
|
||
|
|
* Direct session update that bypasses useSession().update()'s `if (loading) return;` guard.
|
||
|
|
* This ensures the JWT cookie is always updated, even when another session refresh is in-flight.
|
||
|
|
*/
|
||
|
|
export async function directSessionUpdate(data: Record<string, unknown>): Promise<boolean> {
|
||
|
|
try {
|
||
|
|
// Get CSRF token
|
||
|
|
const csrfResp = await fetch('/api/auth/csrf')
|
||
|
|
if (!csrfResp.ok) return false
|
||
|
|
const { csrfToken } = await csrfResp.json()
|
||
|
|
|
||
|
|
// POST session update
|
||
|
|
const resp = await fetch('/api/auth/session', {
|
||
|
|
method: 'POST',
|
||
|
|
headers: { 'Content-Type': 'application/json' },
|
||
|
|
body: JSON.stringify({ csrfToken, data }),
|
||
|
|
})
|
||
|
|
|
||
|
|
return resp.ok
|
||
|
|
} catch {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
}
|