Selected by user-service.ts and follow-service.ts, and converted by
userRowToApi. It leaves out chat_read_at and tokens_valid_after,
which only the chat's read state and getSessionState query.
id: string
username: string
password_hash: string
'' for an account from another instance, which has no password.
created_at: string
updated_at: string | null
Bumped by any profile or avatar change.
avatar_mime: string | null
Null without an avatar.
description: string | null
Markdown.
invited_by: string | null
Null for the seeded admin, who had no inviter.
invited_by_username: string | null
Joined from the inviter's row rather than stored, and undefined when the query doesn't join it. The guard doesn't check it.
email: string