import { jwkSchema } from "@repo/common/crypto-sig.ts"; import { z } from "zod/v4"; import { identIdSchema, realmIdSchema } from "./state.ts"; export const preauthAuthnMessageSchema = z.object({ msg: z.literal("preauth.authn"), pubkey: jwkSchema, }); export type PreauthAuthnMessage = z.infer; export const preauthMessageSchema = z.discriminatedUnion("msg", [ preauthAuthnMessageSchema, ]); export type PreauthMessage = z.infer; export const realmStatusMessageSchema = z.object({ msg: z.literal("realm.status"), }); export const realmStatusResponseSchema = z.object({ msg: z.literal("realm.status"), realm: realmIdSchema, identities: z.array(identIdSchema), }); export type RealmStatusMessage = z.infer; export type RealmStatusResponse = z.infer; export const realmBroadcastMessageSchema = z.object({ msg: z.literal("realm.broadcast"), payload: z.any().nonoptional(), recipients: z.array(identIdSchema), }); export type RealmBroadcastMessage = z.infer; export const realmMessageSchema = z.discriminatedUnion("msg", [ realmStatusMessageSchema, realmBroadcastMessageSchema, ]); export type RealmMessage = z.infer;