auth { mode: bearer } auth:bearer { token: {{access_token}} } script:pre-request { const axios = require("axios"); const baseUrl = bru.getEnvVar("base_url"); // Before each request, check and refresh access_token if needed. if (req.getAuthMode() === "bearer") { await checkAuth(); } async function checkAuth() { const access_token = bru.getEnvVar("access_token"); if (!access_token || access_token === "null") { console.info("No access token is present, refreshing..."); await refreshAuth(); return; } // Access token exists, check that it's still valid. try { const resp = await axios.get(baseUrl + "/me", { headers: {"Authorization": "Bearer " + access_token} }); if (resp.status === 200) { return; } else if (resp.status === 401) { await refreshAuth(); } else { throw resp; } } catch (error) { console.error(error); } } async function refreshAuth() { const payload = { username: bru.getEnvVar("username"), password: bru.getEnvVar("password") }; const resp = await axios.post(baseUrl + "/login", payload, { headers: {"Content-Type": "application/json"} }); if (resp.status === 200) { bru.setEnvVar("access_token", resp.data.token); console.info("Refreshed access token."); } else { throw resp; } } }