2024-09-27 17:35:50 +02:00
|
|
|
import { CodexError } from "../errors/errors";
|
2024-08-15 12:08:51 +02:00
|
|
|
import { Promises } from "../promise-safe/promise-safe";
|
2024-08-15 12:08:45 +02:00
|
|
|
import { type SafeValue } from "../values/values";
|
2024-08-15 12:08:15 +02:00
|
|
|
|
|
|
|
|
export const Fetch = {
|
2024-08-15 12:08:51 +02:00
|
|
|
async safe(url: string, init: RequestInit): Promise<SafeValue<Response>> {
|
|
|
|
|
const res = await Promises.safe(() => fetch(url, init));
|
2024-08-15 12:08:15 +02:00
|
|
|
|
2024-08-15 12:08:51 +02:00
|
|
|
if (res.error) {
|
2024-08-15 12:08:45 +02:00
|
|
|
return {
|
|
|
|
|
error: true,
|
2024-09-27 17:35:50 +02:00
|
|
|
data: new CodexError(res.data.message, {
|
2024-08-15 12:08:51 +02:00
|
|
|
code: 502,
|
2024-09-27 17:35:50 +02:00
|
|
|
}),
|
2024-08-15 12:08:45 +02:00
|
|
|
};
|
|
|
|
|
}
|
2024-08-15 12:08:15 +02:00
|
|
|
|
2024-08-15 12:08:51 +02:00
|
|
|
if (!res.data.ok) {
|
2024-10-07 13:14:49 +02:00
|
|
|
const message = await Promises.safe(() => res.data.text());
|
2024-08-15 12:08:51 +02:00
|
|
|
|
|
|
|
|
if (message.error) {
|
|
|
|
|
return message;
|
|
|
|
|
}
|
2024-08-15 12:08:15 +02:00
|
|
|
|
2024-08-15 12:08:45 +02:00
|
|
|
return {
|
|
|
|
|
error: true,
|
2024-09-27 17:35:50 +02:00
|
|
|
data: new CodexError(message.data, {
|
2024-08-15 12:08:51 +02:00
|
|
|
code: res.data.status,
|
2024-09-27 17:35:50 +02:00
|
|
|
}),
|
2024-08-15 12:08:45 +02:00
|
|
|
};
|
|
|
|
|
}
|
2024-08-15 12:08:51 +02:00
|
|
|
|
|
|
|
|
return { error: false, data: res.data };
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
async safeJson<T extends Object>(
|
|
|
|
|
url: string,
|
|
|
|
|
init: RequestInit
|
|
|
|
|
): Promise<SafeValue<T>> {
|
|
|
|
|
const res = await this.safe(url, init);
|
|
|
|
|
|
|
|
|
|
if (res.error) {
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Promises.safe(() => res.data.json());
|
2024-08-15 12:08:45 +02:00
|
|
|
},
|
|
|
|
|
};
|