summaryrefslogtreecommitdiff
path: root/src/teawie.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/teawie.ts')
-rw-r--r--src/teawie.ts98
1 files changed, 0 insertions, 98 deletions
diff --git a/src/teawie.ts b/src/teawie.ts
deleted file mode 100644
index 65d6617..0000000
--- a/src/teawie.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import { USER_AGENT } from "./consts";
-import { Endpoints } from "@octokit/types";
-
-type repositoryPathContentsResponse =
- Endpoints["GET /repos/{owner}/{repo}/contents/{path}"]["response"];
-
-const GITHUB_API = "https://api.github.com";
-
-// Teawie repository owner and name
-const REPO_OWNER = "SympathyTea";
-const REPO_NAME = "Teawie-Archive";
-
-// Subdirectories of the above repository containing files we want
-const SUBDIRS = [
- "teawie-media/Original Teawies",
- "teawie-media/Teawie Variants",
- "teawie-media/Teawie in Places",
- "teawie-media/Unfinished Teawies",
-];
-
-// File extensions we consider to be images
-const IMAGE_EXTENSIONS = ["gif", "jpg", "jpeg", "png", "svg", "webp"];
-
-const contentsOf = (
- path: string,
-): Promise<repositoryPathContentsResponse["data"]> =>
- fetch(`${GITHUB_API}/repos/${REPO_OWNER}/${REPO_NAME}/contents/${path}`, {
- headers: {
- accept: "application/vnd.github+json",
- "user-agent": USER_AGENT,
- },
- })
- .then((response) => {
- if (!response.ok) {
- throw new Error(
- `HTTP Error ${response.status}: ${response.statusText}`,
- );
- }
-
- return response.json();
- })
- .then((json) => {
- return json as repositoryPathContentsResponse["data"];
- });
-
-const imageUrlsIn = (
- files: repositoryPathContentsResponse["data"],
-): string[] => {
- // NOTE: This is done because the response may only contain data
- // for a single file's path
- const filesArray = Array.isArray(files) ? files : [files];
-
- return (
- filesArray
- // Find *files* that are (probably) images and have a download URL
- .filter(
- (file) =>
- !Array.isArray(file) &&
- file.download_url &&
- file.type == "file" &&
- IMAGE_EXTENSIONS.includes(file.name.split(".").at(-1) ?? ""),
- )
- .map((file) => {
- // Should this happen? No
- // Could it? I don't know
- // But let's be safe :steamhappy:
- if (!file.download_url) {
- throw new Error(
- `Could not find download URL for file "${file.name}"`,
- );
- }
-
- return file.download_url;
- })
- );
-};
-
-export const imageUrls = async (kv: KVNamespace): Promise<string[]> => {
- const cached = await kv.get("urls");
- if (cached) {
- console.trace("Found Teawie URLs in cache!");
- return JSON.parse(cached);
- }
-
- console.warn("Couldn't find Teawie URLs in cache! Fetching fresh ones");
- const fresh = await Promise.all(SUBDIRS.map(contentsOf)).then((responses) => {
- // See the note above
- const flatResponses = responses.flatMap((response) =>
- Array.isArray(response) ? response : [response],
- );
-
- return imageUrlsIn(flatResponses);
- });
-
- await kv.put("urls", JSON.stringify(fresh), { expirationTtl: 60 * 60 });
-
- return fresh;
-};