49 lines
1.0 KiB
TypeScript
Raw Normal View History

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) {
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
},
};