A user crosses the wire in several shapes: as anyone sees them, as they see
themselves, and in the bodies and answers of the /api/users and
/api/invites endpoints. This module types them all, with the roles, for the
server and the client alike.
Checks whether value is a Role, as the role endpoint and the row
guards must before trusting one.
Returned by sign-up, sign-in and a password change. The client keeps both tokens with its session.
-
mediaToken: string
Carried as
?token=by the URLs of private media. It can read media and nothing else. -
token: string
Sent as
Authorization: Bearer …, and as?token=to the WebSocket.
Returned, as a flat list in sign-up order, by
GET /api/users/:key/invitees. The profile page nests it into a tree
by invitedById.
-
avatarMime: string
Undefined without an avatar.
- createdAt: Date
- id: string
- invitedById: string
- username: string
Returned by POST /api/invites to the profile page, which builds the invite
link from token.
Returned by every endpoint that shows a user to others: profiles, the users
one follows, search results, and the user_updated socket message. The
server makes it with toPublicUser, which drops the email.
-
avatarMime: string
Undefined without an avatar.
- createdAt: Date
-
description: string
Markdown.
- id: string
- invitedByUsername: string
- role: Role
-
updatedAt: Date
Bumped by any profile or avatar change. The client uses it to reload the avatar.
-
username: string
Picked at sign-up, and changeable since, a former name staying an alias of the user for good. Pages write it as
@name(userPath).
Sent to POST /api/users by the register page.
- email: string
-
inviteToken: string
From the invite link the register page was opened with.
- password: string
- username: string
Returned to a user about themselves: by sign-up and sign-in in
AuthResponse, by GET /api/me, and by an avatar upload.
-
email: string
Where password reset links go. It belongs to this account only.
Passed to updateUser by the users routes and the password reset, and sent
by a client to PATCH /api/me, which takes only description and email;
the role and the password change through their own endpoints, and the
username through renameUser, by a moderator only.
-
description: string | null
An empty string clears it. Null, like undefined, keeps it.
- email: string
- password: string
- role: Role
Returned by GET /api/users?q= to the editor's @mention autocomplete.
-
avatarMime: string | null
Null without an avatar.
- id: string
- username: string
Returned by GET /api/me/media-token to a session from before media
tokens, which has none.
Sets what a user may do beyond the basics, through ROLE_PERMISSIONS
(shared/permissions.ts). An admin changes it with
PATCH /api/users/:key/role.
Every Role, least to most privileged.
Usage
import * as mod from "shared/user.ts";