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.

Functions

f
isRole(value: unknown): value is Role

Checks whether value is a Role, as the role endpoint and the row guards must before trusting one.

Interfaces

I
AuthResponse

Returned by sign-up and sign-in.

I
AuthTokens

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.

I
Invitee

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.

I
InviteResponse

Returned by POST /api/invites to the profile page, which builds the invite link from token.

I
LoginUserRequest

Sent to POST /api/sessions by the login page.

I
PublicUser

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.

I
RegisterUserRequest

Sent to POST /api/users by the register page.

I
SelfUser

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.

I
UpdateUserRequest

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.

I
UserSuggestion

Returned by GET /api/users?q= to the editor's @mention autocomplete.

Type Aliases

T
MediaTokenResponse = Pick<AuthTokens, "mediaToken">

Returned by GET /api/me/media-token to a session from before media tokens, which has none.

T
Role = "user" | "moderator" | "admin"

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.

Variables

v
ROLES: readonly Role[]

Every Role, least to most privileged.