import z from "zod/v4"; import type { YoutubeLiveInfo } from "@/app/api/live/route"; import { sseEndpoint, sseEndpointMap } from "./redis"; import type { auditLog, tierlistStates, TTrackingKey } from "./schema"; export const sse = sseEndpointMap({ // Artifact Admin Listener artifact: { update: z.object({ type: z.enum(["setLimit", "wipe", "submit", "toggleCheck", "toggleLock"]), }), }, // Rubgram Admin Listener rubgram: { update: z .object({ type: z.enum([ "setLimit", "wipe", "toggleCheck", "toggleLock", "setFree", "cancel", "uploadSlip", ]), }) .or( z.object({ type: z.enum(["submit", "paid"]), sub: z.string(), }), ), }, donate: { ping: z.object({ id: z.string(), name: z.string(), amount: z.number(), image: z.string().optional(), message: z.string(), }), // roundtrip SSE system check heartbeat: z.number(), update: z.null(), refresh: z.null(), }, // Passive Update Checker active: { version: z.string(), live: z.custom(), refresh: z.string().nullable(), announcement: z.object({ severity: z.enum(["info", "success", "warning", "error"]), message: z.string(), prefix: z.string().default("/"), }), }, // Admin Live Log log: { update: z.custom(), }, slip_sync: { complete: z.custom(), connected: z.custom(), }, }); export const adminSseList: (keyof typeof sse)[] = ["log"]; export function tlSse(list: T) { return sseEndpoint(`tl.${list}`, { update_states: z.custom<(typeof tierlistStates.$inferSelect)[]>(), update_placements: z.record(z.string(), z.string().array()), }); }