decentralised message store
at main 1.4 kB view raw
1import { didSchema } from "@/lib/types/atproto"; 2import { z } from "zod"; 3 4export const websocketMessageSchema = z 5 .object({ 6 type: z.union([ 7 z.literal("shard/message"), 8 z.literal("shard/history"), 9 z.literal("shard/requestHistory"), 10 ]), 11 }) 12 .loose(); 13export type WebsocketMessage = z.infer<typeof websocketMessageSchema>; 14 15export const shardMessageSchema = websocketMessageSchema 16 .safeExtend({ 17 type: z.literal("shard/message"), 18 channel: z.string(), 19 content: z.string(), 20 sentBy: didSchema, 21 routedThrough: didSchema, 22 sentAt: z.coerce.date(), 23 }) 24 .strict(); 25export type ShardMessage = z.infer<typeof shardMessageSchema>; 26 27export const historyMessageSchema = websocketMessageSchema 28 .safeExtend({ 29 type: z.literal("shard/history"), 30 messages: z.optional(z.array(shardMessageSchema)), 31 channel: z.string(), 32 forClient: didSchema, 33 }) 34 .strict(); 35export type HistoryMessage = z.infer<typeof historyMessageSchema>; 36 37export const requestHistoryMessageSchema = websocketMessageSchema 38 .safeExtend({ 39 type: z.literal("shard/requestHistory"), 40 channel: z.string(), 41 requestedBy: didSchema, 42 }) 43 .strict(); 44export type RequestHistoryMessage = z.infer<typeof requestHistoryMessageSchema>;