import { z } from 'zod' import { DecryptedMessageSchema, ScratchlistEntrySchema, SessionSchema } from './schemas' /** * Session export schema version. * * v1: session + messages only (#793 / #808) * v2: adds scratchlist text + attachment metadata (#1235). Attachment * bytes are intentionally omitted - metadata (id/filename/mime/size/path) * is enough for cold archive; download URLs only work while the session * still exists on the hub. */ export const HAPI_SESSION_EXPORT_SCHEMA_VERSION = 2 export const SESSION_EXPORT_MESSAGE_LIMIT = 20_000 export const HapiSessionExportSchema = z.object({ schemaVersion: z.literal(HAPI_SESSION_EXPORT_SCHEMA_VERSION), exportedAt: z.number().int().nonnegative(), session: SessionSchema, messages: z.array(DecryptedMessageSchema), scratchlist: z.array(ScratchlistEntrySchema) }) export type HapiSessionExport = z.infer export type HapiSessionExportResult = | { type: 'success'; payload: HapiSessionExport } | { type: 'too-large'; count: number; limit: number }