import { didSchema } from "@/lib/types/atproto"; import { z } from "zod"; export const websocketMessageSchema = z .object({ type: z.union([ z.literal("shard/message"), z.literal("shard/history"), z.literal("shard/requestHistory"), ]), }) .loose(); export type WebsocketMessage = z.infer; export const shardMessageSchema = websocketMessageSchema .safeExtend({ type: z.literal("shard/message"), channel: z.string(), content: z.string(), sentBy: didSchema, routedThrough: didSchema, sentAt: z.coerce.date(), }) .strict(); export type ShardMessage = z.infer; export const historyMessageSchema = websocketMessageSchema .safeExtend({ type: z.literal("shard/history"), messages: z.optional(z.array(shardMessageSchema)), channel: z.string(), forClient: didSchema, }) .strict(); export type HistoryMessage = z.infer; export const requestHistoryMessageSchema = websocketMessageSchema .safeExtend({ type: z.literal("shard/requestHistory"), channel: z.string(), requestedBy: didSchema, }) .strict(); export type RequestHistoryMessage = z.infer;