import { z } from "zod"; import { base64urlToUuid } from "./Base64"; export const RefreshResponseSchema = z.object({ token: z.string(), }); export type RefreshResponse = z.infer; export const TokenPayloadSchema = z.object({ jti: z.string(), sub: z .string() .refine( (val) => { const uuid = base64urlToUuid(val); return !!uuid; }, { message: "Invalid base64-encoded UUID", }, ) .transform((val) => { const uuid = base64urlToUuid(val); if (!uuid) throw new Error("Invalid base64 UUID"); return uuid; }), iat: z.number(), iss: z.string(), aud: z.string(), exp: z.number(), }); export type TokenPayload = z.infer; export const UserMeResponseSchema = z.object({ user: z.object({ id: z.string(), avatar: z.string().nullable(), username: z.string(), global_name: z.string().nullable(), discriminator: z.string(), locale: z.string().optional(), }), player: z.object({ publicId: z.string(), roles: z.string().array().optional(), }), }); export type UserMeResponse = z.infer;