mirror of
https://github.com/vladmandic/automatic
synced 2026-08-27 23:51:00 +02:00
ca955ba1c2
Signed-off-by: Vladimir Mandic <mandic00@live.com>
56 lines
1.6 KiB
TypeScript
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;
|