import { Type } from "@sinclair/typebox"; import { FirRouteInput, FirRouteOptions } from "../util/routewrap"; import {git} from "../util/git.ts"; import { randomUUID } from "crypto"; import path from "path"; import {fileURLToPath} from 'url'; import { getCarts } from "../util/carts.ts"; import { getRelease, insertRelease } from "../dbal/dbal.ts"; import { ManifestType } from "../types.ts"; const __dirname = fileURLToPath(new URL('.', import.meta.url)); const reposPath = path.resolve(__dirname, "..", "..", "..", "repos"); const method = "POST"; const url = "/api/release"; const payloadT = Type.Any(); const handler = async ({payload}: FirRouteInput) => { const {manifest, token} = payload; if (!ManifestType.Check(manifest)) { return false; } const release = await getRelease({author: manifest.author, slug: manifest.id, version: manifest.version}); if (release) { return false; } const uuid = randomUUID(); const repoPath = path.join(reposPath, uuid); await git.clone({ from: manifest.repo, to: repoPath, auth: token, }); const carts = await getCarts(repoPath, manifest.carts); await insertRelease({ manifest, carts, }); console.log({ manifest, carts, }); return true; }; export default { method, url, payloadT, handler, } as const satisfies FirRouteOptions;