{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://git.eeqj.de/sneak/chat/schema/message.json", "title": "IRC Message Envelope", "description": "Base envelope for all messages. Mirrors IRC wire format (RFC 1459/2812) encoded as JSON over HTTP. The 'command' field carries either an IRC command name (PRIVMSG, JOIN, etc.) or a three-digit numeric reply code (001, 353, 433, etc.).", "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "description": "Server-assigned message UUID. Present on all server-originated messages." }, "command": { "type": "string", "description": "IRC command name (PRIVMSG, JOIN, NICK, etc.) or three-digit numeric reply code (001, 353, 433, etc.).", "examples": ["PRIVMSG", "JOIN", "001", "353", "433"] }, "from": { "type": "string", "description": "Source — nick for user messages, server name for server messages. Equivalent to IRC prefix." }, "to": { "type": "string", "description": "Target — channel (#name) or nick. Equivalent to first IRC parameter for most commands." }, "params": { "type": "array", "items": { "type": "string" }, "description": "Additional parameters (used primarily by numeric replies). Equivalent to IRC middle parameters." }, "body": { "oneOf": [ { "type": "array", "items": { "type": "string" }, "description": "Array of strings (one per line for text messages)." }, { "type": "object", "description": "Structured data (e.g. PUBKEY key material).", "additionalProperties": true } ], "description": "Message body. MUST be an array or object, never a raw string. Arrays represent lines of text; objects carry structured data. This enables deterministic canonicalization (RFC 8785 JCS) for signing." }, "ts": { "type": "string", "format": "date-time", "description": "Server-assigned timestamp (ISO 8601). Not present in original IRC; added for HTTP transport." }, "meta": { "type": "object", "description": "Extensible metadata. Used for signatures (meta.sig, meta.alg), hashes (meta.hash), and client extensions.", "properties": { "sig": { "type": "string", "description": "Base64-encoded cryptographic signature over the canonical message form." }, "alg": { "type": "string", "description": "Signature algorithm (e.g. 'ed25519')." }, "hash": { "type": "string", "description": "Hash of the canonical message form (e.g. 'sha256:base64...')." } }, "additionalProperties": true } }, "required": ["command"] }