Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/swarm-matrix-client
Repository files (latest commit first)
Filename Latest commit message Latest commit date
atlas cf88fbba9d operator admin sync: cap the grant at one send, split out response verdicts
The admin-room command stays in #admins' history, so a grant tuwunel
ignores must not be re-sent every five minutes. The controller now
sends `make-user-admin` at most once per operator per process; an
operator still missing from the room on a later pass is logged as
"make-user-admin for an operator failed to take" and left alone until
the controller restarts. The cap lives in the pure `plan()`.

swarm-matrix-client's `user_exists` and `joined_members` read their
responses through pure `profile_verdict` / `joined_verdict`, the shape
`whoami` / `whoami_verdict` already has, with every branch tested: only
M_NOT_FOUND is "no account", and a 403 or a list without `joined` is an
error rather than an answer.

The bridge's handling after authentication moves into `respond()`,
which takes the config and write lock instead of the whole AppState, so
a test can drive ListOperators through the real request path and see
the 403 without an HTTP client or an authelia.

docs/integrations/matrix.md no longer says @swarm is the only homeserver
admin.
2026-10-04 16:45:08 +02:00
..
src operator admin sync: cap the grant at one send, split out response verdicts 2026-10-04 16:45:08 +02:00
Cargo.toml swarm-matrix-ctl: mint the swarm's own appservice registration 2026-09-25 08:31:01 +02:00
README.md swarm-matrix-ctl: mint the swarm's own appservice registration 2026-09-25 08:31:01 +02:00

swarm-matrix-client

The appservice calls against the swarm's homeserver, shared by the two binaries that make them: swarm-matrix-ctl (inside the matrix container, for a hive's sender account) and swarm-controller (for each agent's account, with the swarm's own appservice token).

Three calls, all client-server API: register an account as the appservice, log in to an existing one as the appservice, and ask a token who it is. Both mints pin the device id hyperhive-<localpart>, so a second login replaces that device's token instead of adding a device.

🩸 A secret is a path, never a value

Every error here is built from the response's status and its errcode, never its body: a successful /register or /login body is an access token, and an error body is one malformed response away from being the same bytes.