This commit was merged in pull request #8.
This commit is contained in:
16
schema/commands/JOIN.json
Normal file
16
schema/commands/JOIN.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/JOIN.json",
|
||||
"title": "JOIN",
|
||||
"description": "Join a channel. C2S: request to join. S2C: notification that a user joined. RFC 1459 §4.2.1.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "JOIN" },
|
||||
"from": { "type": "string", "description": "Nick that joined (S2C)." },
|
||||
"to": { "type": "string", "description": "Channel name.", "pattern": "^#[a-zA-Z0-9_-]+$" }
|
||||
},
|
||||
"required": ["command", "to"],
|
||||
"examples": [
|
||||
{ "command": "JOIN", "from": "alice", "to": "#general" }
|
||||
]
|
||||
}
|
||||
29
schema/commands/KICK.json
Normal file
29
schema/commands/KICK.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/KICK.json",
|
||||
"title": "KICK",
|
||||
"description": "Kick a user from a channel. RFC 1459 §4.2.8.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "KICK" },
|
||||
"from": { "type": "string", "description": "Nick that performed the kick." },
|
||||
"to": { "type": "string", "description": "Channel name.", "pattern": "^#[a-zA-Z0-9_-]+$" },
|
||||
"params": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Kicked nick. e.g. [\"alice\"].",
|
||||
"minItems": 1,
|
||||
"maxItems": 1
|
||||
},
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Optional kick reason.",
|
||||
"maxItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["command", "to", "params"],
|
||||
"examples": [
|
||||
{ "command": "KICK", "from": "op1", "to": "#general", "params": ["troll"], "body": ["Behave"] }
|
||||
]
|
||||
}
|
||||
29
schema/commands/MODE.json
Normal file
29
schema/commands/MODE.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/MODE.json",
|
||||
"title": "MODE",
|
||||
"description": "Set or query channel/user modes. RFC 1459 §4.2.3.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "MODE" },
|
||||
"from": {
|
||||
"type": "string",
|
||||
"description": "Nick that set the mode (S2C only)."
|
||||
},
|
||||
"to": {
|
||||
"type": "string",
|
||||
"description": "Channel name.",
|
||||
"pattern": "^#[a-zA-Z0-9_-]+$"
|
||||
},
|
||||
"params": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Mode string and optional target nick. e.g. [\"+o\", \"alice\"].",
|
||||
"examples": [["+o", "alice"], ["-m"], ["+v", "bob"]]
|
||||
}
|
||||
},
|
||||
"required": ["command", "to", "params"],
|
||||
"examples": [
|
||||
{ "command": "MODE", "from": "op1", "to": "#general", "params": ["+o", "alice"] }
|
||||
]
|
||||
}
|
||||
22
schema/commands/NICK.json
Normal file
22
schema/commands/NICK.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/NICK.json",
|
||||
"title": "NICK",
|
||||
"description": "Change nickname. C2S: request new nick. S2C: notification of nick change. RFC 1459 §4.1.2.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "NICK" },
|
||||
"from": { "type": "string", "description": "Old nick (S2C)." },
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "New nick (single-element array).",
|
||||
"minItems": 1,
|
||||
"maxItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["command", "body"],
|
||||
"examples": [
|
||||
{ "command": "NICK", "from": "oldnick", "body": ["newnick"] }
|
||||
]
|
||||
}
|
||||
21
schema/commands/NOTICE.json
Normal file
21
schema/commands/NOTICE.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/NOTICE.json",
|
||||
"title": "NOTICE",
|
||||
"description": "Send a notice. Like PRIVMSG but must not trigger automatic replies. RFC 1459 §4.4.2.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "NOTICE" },
|
||||
"from": { "type": "string" },
|
||||
"to": { "type": "string", "description": "Target: #channel, nick, or * (global)." },
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Notice text lines."
|
||||
}
|
||||
},
|
||||
"required": ["command", "to", "body"],
|
||||
"examples": [
|
||||
{ "command": "NOTICE", "from": "server.example.com", "to": "*", "body": ["Server restarting in 5 minutes"] }
|
||||
]
|
||||
}
|
||||
22
schema/commands/PART.json
Normal file
22
schema/commands/PART.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/PART.json",
|
||||
"title": "PART",
|
||||
"description": "Leave a channel. C2S: request to leave. S2C: notification that a user left. RFC 1459 §4.2.2.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "PART" },
|
||||
"from": { "type": "string", "description": "Nick that left (S2C)." },
|
||||
"to": { "type": "string", "description": "Channel name.", "pattern": "^#[a-zA-Z0-9_-]+$" },
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Optional part reason.",
|
||||
"maxItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["command", "to"],
|
||||
"examples": [
|
||||
{ "command": "PART", "from": "alice", "to": "#general", "body": ["later"] }
|
||||
]
|
||||
}
|
||||
20
schema/commands/PING.json
Normal file
20
schema/commands/PING.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/PING.json",
|
||||
"title": "PING",
|
||||
"description": "Keepalive. C2S or S2S. Server responds with PONG. RFC 1459 §4.6.2.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "PING" },
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Opaque token to be echoed in PONG (single-element array).",
|
||||
"maxItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["command"],
|
||||
"examples": [
|
||||
{ "command": "PING", "body": ["1707580000"] }
|
||||
]
|
||||
}
|
||||
21
schema/commands/PONG.json
Normal file
21
schema/commands/PONG.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/PONG.json",
|
||||
"title": "PONG",
|
||||
"description": "Keepalive response. S2C or S2S. RFC 1459 §4.6.3.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "PONG" },
|
||||
"from": { "type": "string", "description": "Responding server name." },
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Echoed token from PING (single-element array).",
|
||||
"maxItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["command"],
|
||||
"examples": [
|
||||
{ "command": "PONG", "from": "server.example.com", "body": ["1707580000"] }
|
||||
]
|
||||
}
|
||||
24
schema/commands/PRIVMSG.json
Normal file
24
schema/commands/PRIVMSG.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/PRIVMSG.json",
|
||||
"title": "PRIVMSG",
|
||||
"description": "Send a message to a channel or user. C2S: client sends to server. S2C: server relays to recipients. RFC 1459 §4.4.1.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "PRIVMSG" },
|
||||
"from": { "type": "string", "description": "Sender nick (set by server on relay)." },
|
||||
"to": { "type": "string", "description": "Target: #channel or nick.", "examples": ["#general", "alice"] },
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Message lines. One string per line.",
|
||||
"minItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["command", "to", "body"],
|
||||
"examples": [
|
||||
{ "command": "PRIVMSG", "from": "bob", "to": "#general", "body": ["hello world"] },
|
||||
{ "command": "PRIVMSG", "from": "bob", "to": "#general", "body": ["line one", "line two"] },
|
||||
{ "command": "PRIVMSG", "from": "bob", "to": "alice", "body": ["hey"], "meta": { "sig": "base64...", "alg": "ed25519" } }
|
||||
]
|
||||
}
|
||||
37
schema/commands/PUBKEY.json
Normal file
37
schema/commands/PUBKEY.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/PUBKEY.json",
|
||||
"title": "PUBKEY",
|
||||
"description": "Announce or relay a user's public signing key. C2S: client announces key to channel or server. S2C: server relays to channel members. Protocol extension (not in RFC 1459). Body is a structured object (not an array) containing the key material.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "PUBKEY" },
|
||||
"from": { "type": "string", "description": "Nick announcing the key (set by server on relay)." },
|
||||
"to": {
|
||||
"type": "string",
|
||||
"description": "Target: #channel to announce to channel members, or omit for server-wide announcement."
|
||||
},
|
||||
"body": {
|
||||
"type": "object",
|
||||
"description": "Key material.",
|
||||
"properties": {
|
||||
"alg": {
|
||||
"type": "string",
|
||||
"description": "Key algorithm.",
|
||||
"enum": ["ed25519"]
|
||||
},
|
||||
"key": {
|
||||
"type": "string",
|
||||
"description": "Base64-encoded public key."
|
||||
}
|
||||
},
|
||||
"required": ["alg", "key"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["command", "body"],
|
||||
"examples": [
|
||||
{ "command": "PUBKEY", "from": "alice", "body": { "alg": "ed25519", "key": "base64-encoded-pubkey" } },
|
||||
{ "command": "PUBKEY", "from": "alice", "to": "#general", "body": { "alg": "ed25519", "key": "base64-encoded-pubkey" } }
|
||||
]
|
||||
}
|
||||
21
schema/commands/QUIT.json
Normal file
21
schema/commands/QUIT.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/QUIT.json",
|
||||
"title": "QUIT",
|
||||
"description": "User disconnected. S2C only. RFC 1459 §4.1.6.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "QUIT" },
|
||||
"from": { "type": "string", "description": "Nick that quit." },
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Optional quit reason.",
|
||||
"maxItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["command", "from"],
|
||||
"examples": [
|
||||
{ "command": "QUIT", "from": "alice", "body": ["Connection reset"] }
|
||||
]
|
||||
}
|
||||
22
schema/commands/TOPIC.json
Normal file
22
schema/commands/TOPIC.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://git.eeqj.de/sneak/chat/schema/commands/TOPIC.json",
|
||||
"title": "TOPIC",
|
||||
"description": "Get or set channel topic. C2S: set topic (body present) or query (body absent). S2C: topic change notification. RFC 1459 §4.2.4.",
|
||||
"$ref": "../message.json",
|
||||
"properties": {
|
||||
"command": { "const": "TOPIC" },
|
||||
"from": { "type": "string", "description": "Nick that changed the topic (S2C)." },
|
||||
"to": { "type": "string", "description": "Channel name.", "pattern": "^#[a-zA-Z0-9_-]+$" },
|
||||
"body": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "New topic text (single-element array). Empty array clears the topic.",
|
||||
"maxItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["command", "to"],
|
||||
"examples": [
|
||||
{ "command": "TOPIC", "from": "alice", "to": "#general", "body": ["Welcome to the chat"] }
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user