ciphermesh 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/README.pt-BR.md +8 -2
- package/docs/ARCHITECTURE.md +4 -1
- package/package.json +3 -3
- package/src/client/ChatController.js +485 -139
- package/src/client/UI.js +135 -3
- package/src/protocol/messages.js +45 -4
- package/src/protocol/validators.js +40 -1
- package/src/server/SessionManager.js +98 -14
- package/src/server/WebSocketServer.js +213 -52
package/README.md
CHANGED
|
@@ -133,13 +133,19 @@ QR code) to whoever you want to pull in.
|
|
|
133
133
|
|
|
134
134
|
| Command | Description |
|
|
135
135
|
|---------|-------------|
|
|
136
|
-
| `/join <room> [password]` |
|
|
136
|
+
| `/join <room> [password]` | Open a room as a **new buffer** — you stay in your other rooms (IRC style) |
|
|
137
|
+
| `/leave [room]` | Leave a room; its buffer closes (the last room is protected) |
|
|
137
138
|
| `/create <room> <password>` | Create a **private room** 🔒 — see below |
|
|
138
139
|
| `/rooms` | List rooms (🔒 marks private ones) |
|
|
139
|
-
| `/room` | Current room |
|
|
140
|
+
| `/room` | Current room + your buffer list |
|
|
140
141
|
| `/owner` | Room owner |
|
|
141
142
|
| `/kick` `/mute` `/ban` | Owner moderation |
|
|
142
143
|
|
|
144
|
+
**Buffers:** be in several rooms at once — **Alt+1..9** switches, and the status
|
|
145
|
+
bar shows `[1:general] [2:dev •3]` with per-room unread badges. Because the
|
|
146
|
+
relay is blind (sealed sender), which room a message belongs to travels
|
|
147
|
+
*inside* the encrypted payload — the server never learns it.
|
|
148
|
+
|
|
143
149
|
**Private rooms** are zero-knowledge: the password never leaves your machine.
|
|
144
150
|
Joining derives an Ed25519 key from the password (Argon2id) and answers a
|
|
145
151
|
server challenge with a signature — the server stores only a verifier, in
|
package/README.pt-BR.md
CHANGED
|
@@ -133,13 +133,19 @@ quem você quiser puxar pra conversa.
|
|
|
133
133
|
|
|
134
134
|
| Comando | Descrição |
|
|
135
135
|
|---------|-----------|
|
|
136
|
-
| `/join <sala> [senha]` |
|
|
136
|
+
| `/join <sala> [senha]` | Abre a sala como um **novo buffer** — você continua nas outras (estilo IRC) |
|
|
137
|
+
| `/leave [sala]` | Sai de uma sala; o buffer fecha (a última sala é protegida) |
|
|
137
138
|
| `/create <sala> <senha>` | Cria uma **sala privada** 🔒 — veja abaixo |
|
|
138
139
|
| `/rooms` | Lista salas (🔒 marca as privadas) |
|
|
139
|
-
| `/room` | Sala atual |
|
|
140
|
+
| `/room` | Sala atual + sua lista de buffers |
|
|
140
141
|
| `/owner` | Dono da sala |
|
|
141
142
|
| `/kick` `/mute` `/ban` | Moderação (dono da sala) |
|
|
142
143
|
|
|
144
|
+
**Buffers:** esteja em várias salas ao mesmo tempo — **Alt+1..9** alterna, e a
|
|
145
|
+
barra de status mostra `[1:general] [2:dev •3]` com não-lidas por sala. Como o
|
|
146
|
+
relay é cego (sealed sender), a qual sala cada mensagem pertence viaja *dentro*
|
|
147
|
+
do payload cifrado — o servidor nunca fica sabendo.
|
|
148
|
+
|
|
143
149
|
**Salas privadas** são zero-knowledge: a senha nunca sai da sua máquina. Ao
|
|
144
150
|
entrar, o cliente deriva uma chave Ed25519 da senha (Argon2id) e responde um
|
|
145
151
|
desafio do servidor com uma assinatura — o servidor guarda só um verificador,
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -448,8 +448,11 @@ Types:
|
|
|
448
448
|
| `peer_left` | Server -> Clients | A peer left |
|
|
449
449
|
| `key_exchange` | Client -> Server -> Client | Public key exchange between peers |
|
|
450
450
|
| `encrypted_message` | Client -> Server -> Client | Encrypted message |
|
|
451
|
-
| `change_room` | Client -> Server |
|
|
451
|
+
| `change_room` | Client -> Server | Legacy single-room switch: leave every room, enter one (+ optional `roomAuthPk` when creating a private room) |
|
|
452
452
|
| `room_changed` | Server -> Client | Room switch confirmed (+ `private` flag) |
|
|
453
|
+
| `join_room` | Client -> Server | Multi-room: join an ADDITIONAL room, keeping current ones (same `roomAuthPk` option) |
|
|
454
|
+
| `room_joined` | Server -> Client | Additive join confirmed (`room`, `peers`, `private`, `roomOwner`) |
|
|
455
|
+
| `leave_room` / `room_left` | Client <-> Server | Leave one room (the last one is refused — a session is always somewhere) |
|
|
453
456
|
| `list_rooms` / `room_list` | Client <-> Server | Room list (each room carries a `private` flag) |
|
|
454
457
|
| `room_challenge` | Server -> Client | Target room is private — sign this nonce (see 6.9) |
|
|
455
458
|
| `room_auth` | Client -> Server | Ed25519 signature proving password knowledge (see 6.9) |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ciphermesh",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Secure terminal chat for the local network (LAN) with real end-to-end encryption (E2EE) using libsodium",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/client/index.js",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"bonjour-service": "1.4.3",
|
|
56
56
|
"boxen": "8.0.1",
|
|
57
57
|
"chalk": "^5.4.1",
|
|
58
|
-
"figlet": "1.11.
|
|
58
|
+
"figlet": "1.11.3",
|
|
59
59
|
"gradient-string": "3.0.0",
|
|
60
60
|
"jimp": "1.6.1",
|
|
61
61
|
"node-notifier": "10.0.1",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@eslint/js": "10.0.1",
|
|
68
|
-
"eslint": "10.
|
|
68
|
+
"eslint": "10.8.0",
|
|
69
69
|
"globals": "^17.7.0",
|
|
70
70
|
"prettier": "^3.9.5"
|
|
71
71
|
},
|