Notes on the state machine

commandline
Marnanel Thurman 2023-09-16 15:22:23 +01:00
rodzic e3a9a22e72
commit 5788e37007
1 zmienionych plików z 49 dodań i 0 usunięć

49
state-machine.txt 100644
Wyświetl plik

@ -0,0 +1,49 @@
Incoming messages go to INBOX or UNVERIFIED, depending on whether we
have the relevant keys in cache.
All messages have a local ID formed of eight hex digits (such as "1234ABCD").
Messages generated locally have a message ID based on the local ID.
The only messages which might not have a message ID are the ones in ERRORS
(because they might be malformed). Messages can be looked up by their
local ID or their message ID.
States of a message:
- UNVERIFIED
The message has arrived, but we haven't managed to verify it yet.
In order to verify it, we need to have copies of some public keys,
which we don't currently have cached.
When we receive a key, we check to see which messages are waiting
on it. If any of them are waiting on no other keys, then we
run verification.
- INBOX
The incoming message is verified, and is currently running
through hooks.
- RECEIVED
The incoming message has been delivered, but we're keeping a copy in
the vault.
- ERRORS
Something went wrong with the message. The message might be
an incoming message that failed verification, an outgoing
message to a user that doesn't exist, a malformed message, and so on.
The wrapper dict will have an extra key "error" containing
a machine-readable explanation of why the message is in ERRORS.
- OUTBOX
The message is going to be sent, or at least we intend so,
but we need some remote items which we don't currently have cached.
When we receive an item, we check to see which messages are
waiting on it. If any of them are waiting on no other items,
we sign the message and send it.
- SENT
The message has been sent successfully.
- GONE
Anything in here represents a message that did exist, and has
been deleted, but we didn't want to forget about it completely.
They may have a "tombstone" key for the web server's benefit.