Files
Aurora-SpotiRip/endpoints/lyrics_POST.schema.ts
T

30 lines
835 B
TypeScript
Raw Normal View History

2026-09-25 23:20:57 -05:00
import { z } from "zod";
import superjson from "superjson";
export const schema = z.object({
title: z.string().min(1),
artist: z.string().min(1),
album: z.string().optional(),
durationMs: z.number().nonnegative().optional(),
});
export type InputType = z.infer<typeof schema>;
export type OutputType = {
plain?: string;
synced?: string;
instrumental?: boolean;
};
export async function postLyrics(body: InputType): Promise<OutputType> {
const response = await fetch("/_api/lyrics", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: superjson.stringify(schema.parse(body)),
});
if (!response.ok) {
const parsed = superjson.parse<{ error: string }>(await response.text());
throw new Error(parsed.error);
}
return superjson.parse<OutputType>(await response.text());
}