import { env } from "bun"; import logger from "src/logger"; import GelbooruApiResponse from "src/types/GelbooruApiResponse"; import GelbooruServiceResponse from "src/types/GelbooruServiceResponse"; class GelbooruApiService { async get(): Promise { const LIMIT = env.GELBOORU_IMAGES_PER_REQUEST || 100; const TAGS = encodeURIComponent(env.GELBOORU_TAGS || ""); const url: string = `https://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=${LIMIT}&json=1&tags=${TAGS}`; const response: GelbooruApiResponse = await fetch(url) .then(async res => { if (!res.ok) { logger.error(`${res.status}: ${res.statusText}, ${await res.text()}`) throw new Error("Error fetching images"); } else { return res.json(); } }) as GelbooruApiResponse; return { posts: response.post.map(post => ({ url: post.file_url, tags: post.tags.split(" ") })) }; } } export default new GelbooruApiService();