Files

35 lines
893 B
TypeScript
Raw Permalink Normal View History

2026-09-25 23:20:57 -05:00
import { z } from "zod";
import superjson from "superjson";
export const schema = z.object({
code: z.string().min(1),
state: z.string().min(1),
});
export type InputType = z.infer<typeof schema>;
export type OutputType = {
connected: true;
desktop?: boolean;
profile: {
id: string;
displayName: string;
email?: string;
imageUrl?: string;
product?: string;
};
};
export async function postSpotifyExchange(body: InputType): Promise<OutputType> {
const validated = schema.parse(body);
const result = await fetch("/_api/spotify-exchange", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: superjson.stringify(validated),
});
if (!result.ok) {
const parsed = superjson.parse<{ error: string }>(await result.text());
throw new Error(parsed.error);
}
return superjson.parse<OutputType>(await result.text());
}