2.7 KiB
2.7 KiB
Invites & Join Requests
Status: Active Last updated: 2026-07-05
Overview
Invite links and join-request approval let users join private or moderated chat-servers without public listing. Spans signaling server REST + HTML invite pages and the product client server-directory invite feature.
Responsibilities
- Server: create time-limited invites, resolve invite metadata, record join requests, notify requesters on moderation decisions.
- Client: create/copy invite links, render invite landing UX, call join API with invite codes/passwords.
- It does NOT own: WebSocket room membership (
join_serverafter REST join succeeds).
Key concepts
- Invite: opaque id mapping to a server; may expire.
- Join request: pending membership when server requires approval.
- request_update: server-pushed WebSocket notification when a moderator approves/denies.
REST API
Invites
| Method | Path | Auth | Purpose |
|---|---|---|---|
| POST | /api/servers/:id/invites |
Bearer | Create invite (moderator) |
| GET | /api/invites/:id |
Public | Resolve invite metadata + server card |
| GET | /invite/:id |
Public | HTML invite landing page (browser) |
Join
| Method | Path | Auth | Purpose |
|---|---|---|---|
| POST | /api/servers/:id/join |
Bearer | Join with password, invite id, or public access; may create join request |
Join requests (moderation)
| Method | Path | Auth | Purpose |
|---|---|---|---|
| GET | /api/servers/:id/requests |
Bearer (manageServer) |
List pending requests |
| PUT | /api/requests/:id |
Bearer (manageServer) |
Approve or deny; body { status } |
PUT /api/requests/:id validates optional ownerId matches authenticated user, checks manageServer permission, updates status, and sends notifyUser(request.userId, { type: 'request_update', request }).
Client flow
- Moderator creates invite via
ServerDirectoryFacade.createInvite(). - Recipient opens
/invite/:idor deep link; client resolvesGET /api/invites/:id. - Authenticated user calls
POST /api/servers/:id/joinwith invite payload. - On approval-required servers, user waits for
request_updateor polls requests list (moderator UI).
Related
- server-directory.md — join/leave REST
- authentication.md — bearer on mutations
- signaling.md —
join_serverafter join - Domain README:
toju-app/src/app/domains/server-directory/README.md
Changelog
| Date | Change |
|---|---|
| 2026-07-05 | Initial cross-context invite/join-request contract |