export function getCsrfToken() { const element = document.querySelector(`meta[name='csrf-token']`); return element !== null ? element.content : undefined; } const getWaitOnUserDataHandler = ({ resolve, reject, waitTime = 20 }) => { let totalTimeWaiting = 0; return function waitingOnUserData() { if (totalTimeWaiting === 3000) { reject(new Error("Couldn't find user data on page.")); return; } const csrfToken = getCsrfToken(document); const { user } = document.body.dataset; if (user && csrfToken !== undefined) { const currentUser = JSON.parse(user); resolve({ currentUser, csrfToken }); return; } totalTimeWaiting += waitTime; setTimeout(waitingOnUserData, waitTime); }; }; export function getUserDataAndCsrfToken() { return new Promise((resolve, reject) => { getWaitOnUserDataHandler({ resolve, reject })(); }); }