Files
Vladimir Mandic ca955ba1c2 update handlers for all authenticated workflows
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-09 22:47:17 +02:00

56 lines
1.6 KiB
TypeScript

import { log, error, initLoggerAuth } from './logger';
interface TokenResponse {
user?: string;
token?: string;
}
let user: string | undefined;
let token: string | undefined;
let baseURL: string | undefined;
export async function getToken(): Promise<{ user: string | undefined; token: string | undefined }> {
if (token === undefined || user === undefined) {
const res = await fetch(`${window.subpath}/token`);
if (res.ok) {
const data = (await res.json()) as TokenResponse;
user = data.user;
token = data.token;
log('getToken', { user });
initLoggerAuth(user, token);
}
}
return { user, token };
}
export async function getUser(): Promise<string | undefined> {
if (!user) await getToken();
return user;
}
export async function authFetch(url: RequestInfo | URL, options: RequestInit = {}): Promise<Response | undefined> {
await getToken();
if (user && token) {
const encoded = btoa(`${user}:${token}`);
const headers = new Headers(options.headers);
headers.set('Authorization', `Basic ${encoded}`);
options.headers = headers;
}
let res: Response | undefined;
try {
res = await fetch(url, options);
if (!res.ok) error('fetch', { status: res?.status || 503, url, user, token });
} catch (err) {
if (navigator.onLine) {
error('fetch', { status: res?.status || 503, url, user, token, error: err });
}
}
if (!baseURL) {
// baseURL = `${window.location.protocol}//${window.location.host}:${window.location.port}`;
baseURL = window.location.origin;
log('origin', baseURL);
}
return res;
}
window.authFetch = authFetch;