if (!window.rustiCsrfInitialized) {
window.rustiCsrfInitialized = true;
window.getCsrfToken = function() {
const input = document.querySelector('input[name="csrf_token"]');
if (input && input.value) return input.value;
const meta = document.querySelector('meta[name="csrf-token"]');
if (meta && meta.content) return meta.content;
return window._rusti_csrf_token || null;
};
const { fetch: originalFetch } = window;
window.fetch = async (input, init = {}) => {
let headers = new Headers(init.headers || {});
const method = (init.method || 'GET').toUpperCase();
if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) {
const token = window.getCsrfToken();
if (token) {
headers.set('X-CSRF-Token', token); }
}
const response = await originalFetch(input, { ...init, headers });
const newToken = response.headers.get('X-CSRF-Token');
if (newToken) {
window._rusti_csrf_token = newToken;
document.querySelectorAll('input[name="csrf_token"]').forEach(el => el.value = newToken);
}
return response;
};
document.addEventListener('submit', async (e) => {
const form = e.target;
if (!(form instanceof HTMLFormElement)) return;
if (!form.querySelector('input[name="csrf_token"]')) return;
e.preventDefault();
try {
await fetch(window.location.href);
} catch (_) {
}
form.submit();
});
}