aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-common/src/meshbay_common/protocol.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-common/src/meshbay_common/protocol.py')
-rw-r--r--packages/meshbay-common/src/meshbay_common/protocol.py31
1 files changed, 15 insertions, 16 deletions
diff --git a/packages/meshbay-common/src/meshbay_common/protocol.py b/packages/meshbay-common/src/meshbay_common/protocol.py
index c444711..5374742 100644
--- a/packages/meshbay-common/src/meshbay_common/protocol.py
+++ b/packages/meshbay-common/src/meshbay_common/protocol.py
@@ -32,12 +32,11 @@ which local promise a reply belongs to.
import os
from dataclasses import dataclass, field
-from typing import Any
# The wire versions live in meshbay_common/__init__.py — one source, because a
# second copy here said "0.1" while every message on the wire carried "0.2".
# Nothing imported it, which is the only reason it was harmless.
-from meshbay_common import MNP_VERSION, MHP_VERSION # noqa: F401 (re-export)
+from meshbay_common import MHP_VERSION, MNP_VERSION # noqa: F401 (re-export)
from meshbay_common.groupbox import PURPOSE_UPLOAD, seal, unseal
from meshbay_common.webcrypto import (
chunk_key_aes,
@@ -45,7 +44,6 @@ from meshbay_common.webcrypto import (
encrypt_chunk_aes,
)
-
# ── MNP message types ─────────────────────────────────────────────────────────
class MNP:
@@ -70,7 +68,8 @@ class MNP:
# and no client: removed rather than repaired.
#
# Not a Double Ratchet message, and never was — finding C1
- # (`docs/MESHBAY_DESIGN.md` §13.1) rejected exactly that for groups. Since MNP 2.0 it is AES-256-GCM under a
+ # (`docs/MESHBAY_DESIGN.md` §13.1) rejected exactly that for groups. Since
+ # MNP 2.0 it is AES-256-GCM under a
# per-device subkey of the group's chat epoch key, signed over the
# ciphertext with the sending device's pinned Ed25519 key. There is no
# plaintext form on the wire (`chatbox.py`, docs/MESHBAY_DESIGN.md §4.5);
@@ -160,21 +159,21 @@ class MNP:
MEMBER_UNPIN_ACK = "member_unpin_ack"
APPS_ENABLED = "apps_enabled" # operator → node: which group apps to show
APPS_ENABLED_ACK = "apps_enabled_ack"
- TRANSFER_LIMITS = "transfer_limits" # operator → node: per-member caps for this group
+ TRANSFER_LIMITS = "transfer_limits" # operator → node: per-member caps here
TRANSFER_LIMITS_ACK = "transfer_limits_ack" # node → this group: the new caps
SET_SCAN_SETTINGS = "set_scan_settings" # operator → node: reconcile/debounce timing
SET_SCAN_SETTINGS_ACK = "set_scan_settings_ack"
MEDIA_META_REQ = "media_meta_req" # client → node: TMDB metadata for a path
MEDIA_META_RESP = "media_meta_resp" # node → client: TMDB metadata (or none)
- TMDB_CONFIG = "tmdb_config" # operator → node: set custom TMDB token/language (node-wide)
- TMDB_CONFIG_ACK = "tmdb_config_ack" # node → everyone: new TMDB config (never the token)
- TMDB_ENABLED = "tmdb_enabled" # operator → node: enable/disable TMDB for this group
- TMDB_ENABLED_ACK = "tmdb_enabled_ack" # node → this group: new per-group TMDB enabled state
- SEASON_META_REQ = "season_meta_req" # client → node: TMDB overview/poster for one season
- SEASON_META_RESP = "season_meta_resp" # node → client: season-level TMDB fields (or none)
- TMDB_SEARCH_REQ = "tmdb_search_req" # client → node: candidate TMDB matches for a query
- TMDB_SEARCH_RESP = "tmdb_search_resp" # node → client: candidate list (id, title, year, poster)
- TMDB_OVERRIDE = "tmdb_override" # operator → node: replace a show/movie's TMDB match
+ TMDB_CONFIG = "tmdb_config" # operator → node: token/language, node-wide
+ TMDB_CONFIG_ACK = "tmdb_config_ack" # node → everyone: config, never the token
+ TMDB_ENABLED = "tmdb_enabled" # operator → node: TMDB on/off here
+ TMDB_ENABLED_ACK = "tmdb_enabled_ack" # node → this group: TMDB on/off here
+ SEASON_META_REQ = "season_meta_req" # client → node: one season's overview
+ SEASON_META_RESP = "season_meta_resp" # node → client: season fields, or none
+ TMDB_SEARCH_REQ = "tmdb_search_req" # client → node: candidates for a query
+ TMDB_SEARCH_RESP = "tmdb_search_resp" # node → client: id, title, year, poster
+ TMDB_OVERRIDE = "tmdb_override" # operator → node: replace a match
TMDB_OVERRIDE_ACK = "tmdb_override_ack"
TMDB_REMATCH = "tmdb_rematch" # operator → node: drop one file's match
TMDB_REMATCH_ACK = "tmdb_rematch_ack"
@@ -257,7 +256,7 @@ class MNP:
# key without having to reconnect.
CHAT_EPOCH = "chat_epoch"
CHAT_EPOCH_ACK = "chat_epoch_ack"
- ROOT_UPDATE = "root_update" # operator → node: change writable/removable on a root
+ ROOT_UPDATE = "root_update" # operator → node: a root's flags
ROOT_UPDATE_ACK = "root_update_ack"
ROOT_EJECT = "root_eject" # operator → node: mark removable root as ejected
ROOT_EJECT_ACK = "root_eject_ack"
@@ -271,7 +270,7 @@ class MNP:
# node's `sender_id` (Tier 2, docs/MESHBAY_DESIGN.md §3.3).
GROUP_ROSTER_REQ = "group_roster_req"
GROUP_ROSTER_RESP = "group_roster_resp"
- ROSTER_READ = "roster_read" # operator → node: list pinned identities + members
+ ROSTER_READ = "roster_read" # operator → node: identities + members
ROSTER_READ_ACK = "roster_read_ack"
DENYLIST_READ = "denylist_read" # operator → node: show denylist entries
DENYLIST_READ_ACK = "denylist_read_ack"