Files
picobook/src/server/api/getGame.ts
T
2026-06-10 21:47:30 -04:00

59 lines
1.2 KiB
TypeScript

import { Type } from "@sinclair/typebox";
import { FirRouteInput, FirRouteOptions } from "../util/routewrap.ts";
import { authors } from "../../data/authors.ts";
import { Octokit } from "octokit";
import { decrypt } from "../util/crypt.ts";
const method = "GET";
const url = "/api/game";
const payloadT = Type.Any();
const handler = async ({ payload }: FirRouteInput<typeof payloadT>) => {
const { author, name } = payload;
const authorData = authors.find((x) => x.username === author);
if (!authorData) {
return null;
}
console.log("author", authorData);
const pat = decrypt({
password: process.env.ENCRYPTION_PASSWORD!,
cyphertext: authorData.auth.pat,
});
const octokit = new Octokit({
auth: pat,
});
const gameData = (
await octokit.rest.repos.getContent({
owner: authorData.username,
repo: authorData.repo,
path: `.picobook/${name}.p8.png`,
})
).data;
console.log(gameData);
if (Array.isArray(gameData)) {
return null;
}
if (gameData.type !== "file") {
return null;
}
return {
carts: [{ src: `data:image/png;base64,${gameData.content}` }],
};
};
export default {
method,
url,
payloadT,
handler,
} as const satisfies FirRouteOptions<typeof payloadT>;