Load server config on react app

This commit is contained in:
2023-06-06 15:47:30 +02:00
parent ec98e728d8
commit 8f0a3e1f07
10 changed files with 170 additions and 38 deletions

View File

@ -0,0 +1,52 @@
interface APIResponse {
data: any;
status: number;
}
export class ApiError extends Error {
constructor(message: string, public code: number, public data: any) {
super(message);
}
}
export class APIClient {
/**
* Get backend URL
*/
static backendURL(): string {
const URL = process.env.REACT_APP_BACKEND ?? "";
if (URL.length === 0) throw new Error("Backend URL undefined!");
return URL;
}
/**
* Perform a request on the backend
*/
static async exec(args: {
uri: string;
method: "GET" | "POST" | "DELETE";
allowFail?: boolean;
jsonData?: any;
}): Promise<APIResponse> {
const res = await fetch(this.backendURL() + args.uri, {
method: args.method,
body: args.jsonData ? JSON.stringify(args.jsonData) : undefined,
headers: {
"Content-Type": args.jsonData ? "application/json" : "text/plain",
},
});
let data;
if (res.headers.get("content-type") === "application/json")
data = await res.json();
else data = await res.blob();
if (!args.allowFail && !res.ok)
throw new ApiError("Request failed!", res.status, data);
return {
data: data,
status: res.status,
};
}
}