aboutsummaryrefslogtreecommitdiff
path: root/docs.txt
blob: 620b29d14293416d67fe593c69e3730b8899a152 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
-- news

2026-04-05 #0.2.6b, #0.2.6b2
adds expiring mail, with command 'H'
new, experimental docs.
index-preserving delete command (ALWAYS DELETE LAST TO FIRST!)
slightly hardened login paths


-- proto
v=2 (this is sent as a byte, not ascii)


CONNECT
if lastlogin <5s, sleep(1)
< "laim{v}\n"


SYMBOLS                                          DESCRIPTION
O                                                success
?                                                unknown command
I                                                bad username / password
K                                                mismatch
.                                                body truncated at 65536
4-9                                              operational errors
!                                                general failure
:                                                prefix a room name with this to make it ephemeral


FIELD TYPES                                      DESCRIPTION
str                                              printable alphanum + [-_.$ :], newline-terminated
num                                              printable u64, newline-terminated
body                                             raw bytes, EOF-terminated, max 65536
csv                                              comma-separated strings, newline-terminated (default max = 16)


PRE-AUTH COMMANDS    ARGS                        DESCRIPTION
M                                                returns the server motd.
L                    str:user str:password       attempt a login (penalty for wrong password)


COMMANDS             ARGS                        DESCRIPTION                                               RETURN
G                                                returns all mail                                          mail[]+O
T                    num:timestamp               returns mail after a timestamp                            mail[]+O
S                    csv:targets body            sends mail                                                7|.|!|O
H                    csv:targets num:ttl body    sends mail with an expiry date (targets, ttl, body)       7|.|!|O
W                                                returns who you are (may get funky)                       str+\n
E                                                count inbox size (including deleted mail)                 num+\n
Z                                                print room topic                                          (str+\n)|!
U                                                list all users on this instance                           "name lastlogin\n"[]+O
R                                                list all rooms on this instance                           "title onlinecount\n"[]+O
B                    [str]:roomname              enter a room                                              O
Q                                                leave a room                                              O
P                                                poll and print mail as it arrives. exit with any input    > entry, O exit
D                    num:index                   delete mail at index (ALWAYS delete highest first)        8|O
C                    str:new str:repeat          change your password (new, repeat)                        6|7|K|O
K                                                disconnect                                                nothing. it exits


DIR NAME             PURPOSE

users                user database.
|                    filename=user
|                    contents=password

mail                 mail database.
|                    folder=user
|                    ~folder=room
|                    x/.count=num:index
|                    x/.login=bin:lastlogin
|                    x/num=mail


MAIL FORMAT
index\n timestamp\n expiry\n sender\n ...body...\n\neof\n
note: expiry is on-disk only