systemquery/docs/protocol.md

52 lines
1.3 KiB
Markdown

# systemquery protocol
This document details the protocol implemented by systemquery. The protocol has multiple layers to it - these are documented each in their own sections:
1. Framed transport
2. Encryption
3. JSON messages
- Also handles key exchange
The protocol aims to have the following properties:
- It's peer-to-peer
- It's decentralised (i.e. there's no leading peer)
- This may change in the future if there's a need for a leading peer
- It follows existing established standards where possible
- All communication is encrypted
- In order to join, peers must know the same join secret (aka a pre-shared key)
- In the future, full mesh network routing
The following properties are out-of-scope:
- Tolerate malicious nodes
## Framed Transport
## JSON messages
JSON messages look like this:
```json
{
"event": "EVENT_NAME",
"message": { "message_object": "here" }
}
```
The following event names and their associated message objects are listed below:
### Event `query`
The sender requests a table from the receiver.
Properties:
- **string `name`:** The name of the table being requested.
### Event `query-response`
The send response to the receiver's earlier `query` message.
Properties:
- **string `name`:** The name of the table.
- **object `table`:** The requested table.