2024-09-11 15:38:04 +01:00
|
|
|
import ky from "ky";
|
2024-09-13 20:04:04 +01:00
|
|
|
import { isRunningAsWorker } from "@/common/browser-utils";
|
2024-09-11 15:38:04 +01:00
|
|
|
|
2024-09-13 20:04:04 +01:00
|
|
|
export default class Service {
|
2024-09-11 15:38:04 +01:00
|
|
|
/**
|
2024-09-13 20:04:04 +01:00
|
|
|
* The name of the service.
|
2024-09-11 15:38:04 +01:00
|
|
|
*/
|
|
|
|
private name: string;
|
|
|
|
|
|
|
|
constructor(name: string) {
|
|
|
|
this.name = name;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Logs a message to the console.
|
|
|
|
*
|
|
|
|
* @param data the data to log
|
|
|
|
*/
|
|
|
|
public log(data: unknown) {
|
2024-09-30 22:16:55 +01:00
|
|
|
console.log(`[${isRunningAsWorker() ? "Worker - " : ""}${this.name}]: ${data}`);
|
2024-09-11 15:38:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Builds a request url.
|
|
|
|
*
|
|
|
|
* @param useProxy whether to use proxy or not
|
|
|
|
* @param url the url to fetch
|
|
|
|
* @returns the request url
|
|
|
|
*/
|
|
|
|
private buildRequestUrl(useProxy: boolean, url: string): string {
|
|
|
|
return (useProxy ? "https://proxy.fascinated.cc/" : "") + url;
|
2024-09-12 11:35:37 +01:00
|
|
|
// return (useProxy ? config.siteUrl + "/api/proxy?url=" : "") + url;
|
2024-09-11 15:38:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fetches data from the given url.
|
|
|
|
*
|
|
|
|
* @param useProxy whether to use proxy or not
|
|
|
|
* @param url the url to fetch
|
|
|
|
* @returns the fetched data
|
|
|
|
*/
|
2024-09-30 22:16:55 +01:00
|
|
|
public async fetch<T>(useProxy: boolean, url: string): Promise<T | undefined> {
|
2024-09-11 20:10:27 +01:00
|
|
|
try {
|
|
|
|
return await ky
|
|
|
|
.get<T>(this.buildRequestUrl(useProxy, url), {
|
|
|
|
next: {
|
|
|
|
revalidate: 60, // 1 minute
|
|
|
|
},
|
|
|
|
})
|
|
|
|
.json();
|
|
|
|
} catch (error) {
|
2024-09-12 00:20:50 +01:00
|
|
|
console.error(`Error fetching data from ${url}:`, error);
|
|
|
|
return undefined;
|
2024-09-11 20:10:27 +01:00
|
|
|
}
|
2024-09-11 15:38:04 +01:00
|
|
|
}
|
|
|
|
}
|