import axios from 'axios'; import { out } from '@a2r/telemetry'; import { ApiRoutes, LoginParams } from '../../model/api'; import { CustomResponse } from '../../model/common'; import { LoginResponse } from '../../model/user'; import serverSettings from '../../settings/server'; // TODO: Cache auth token let token; const getAdminToken = async (): Promise> => { const { apiAdminPassword, apiUrl, apiAdminUser } = serverSettings(); if (token) { return { ok: true, data: token, }; } const params: LoginParams = { identifier: apiAdminUser, password: apiAdminPassword, }; try { const url = `${apiUrl}${ApiRoutes.Login}`; const response = await axios.post(url, params); const { data, status, statusText } = response; if (status !== 200) { out.error(`Token request failed with status ${status}: ${statusText}`); return { ok: false, error: statusText, }; } token = data.jwt; setTimeout(() => { token = null; }, 1000 * 60); return { ok: true, data: data.jwt, }; } catch (err) { out.error(`Error in token request: ${err.stack || err.message || err}`); return { ok: false, error: err.stack || err.message || err, }; } }; export default getAdminToken;