Роутер users отвечает за профиль текущего пользователя (получение данных, настройка 2FA, загрузка косметики), а также за публичное получение профилей по ID и имени. Путь: trpc.users.*

Процедуры

getMy

Получение профиля текущего пользователя.
  • Тип: query
  • Доступ: protectedProcedure
Ответ:
id
number
ID пользователя
username
string
Имя пользователя
email
string
Email
verified
boolean
Подтверждён ли email
avatar
string | null
URL аватара
skin
string | null
URL скина
cape
string | null
URL плаща
createdAt
Date
Дата регистрации
isBanned
boolean
Заблокирован ли аккаунт

startTotpSetup

Начало настройки двухфакторной аутентификации. Генерирует секрет и QR-код.
  • Тип: mutation
  • Доступ: protectedProcedure
Ответ:
secret
string
TOTP-секрет для ручного ввода
otpauthUrl
string
URL для генерации QR-кода (otpauth://)

confirmTotpSetup

Подтверждение настройки 2FA. Пользователь вводит код из приложения-аутентификатора.
  • Тип: mutation
  • Доступ: protectedProcedure
token
string
required
6-значный TOTP-код
Ответ:
success
boolean
Признак успешного подтверждения
backupCodes
string[]
Список из 8 одноразовых резервных кодов (формат XXXXX-XXXXX)

disableTotp

Отключение двухфакторной аутентификации. Подтверждается кодом из приложения или резервным кодом — нужно указать хотя бы одно из полей.
  • Тип: mutation
  • Доступ: protectedProcedure
token
string
6-значный TOTP-код для подтверждения
backupCode
string
Резервный код (от 8 до 64 символов)
Ответ:
success
boolean
Признак успешного отключения

getById

Публичное получение профиля пользователя по ID.
  • Тип: query
  • Доступ: publicProcedure
id
number
required
ID пользователя
Ответ:
id
number
ID пользователя
username
string
Имя пользователя
avatar
string | null
URL аватара
skin
string | null
URL скина
cape
string | null
URL плаща
createdAt
Date
Дата регистрации

getByUsername

Публичное получение профиля пользователя по имени.
  • Тип: query
  • Доступ: publicProcedure
username
string
required
Имя пользователя
Ответ: те же поля, что и у getById (id, username, avatar, skin, cape, createdAt).

profile

Полный профиль текущего пользователя: основные данные, кошелёк, привилегии, статистика онлайна, активность, методы 2FA и привязанные аккаунты.
  • Тип: query
  • Доступ: protectedProcedure
Ответ:
user
object
Данные пользователя: id, uuid, username, email, verified, avatar, skin, cape, createdAt, lastPasswordChangeAt, isBanned
wallet
object
Кошелёк: balance (number), updatedAt (Date | null)
privileges
object[]
Привилегии пользователя: id, privilegeId, privilegeName, displayName, serverId, serverName, icon, color, grantedAt, expiresAt
onlineStats
Record<string, number>
Часы онлайна по периодам (ключ — период, значение — число часов)
activity
object[]
Последние записи активности (до 50): id, type, label, details, metadata, occurredAt, createdAt
twoFactor
object[]
Методы 2FA: id, method, enabled, lastUsedAt, createdAt, updatedAt
connections
object[]
Привязанные аккаунты: id, provider, providerUserId, metadata, linkedAt, updatedAt

uploadCosmetic

Загрузка косметики (аватар, скин или плащ). Файл передаётся в base64, сохраняется в хранилище, после чего URL записывается в профиль.
  • Тип: mutation
  • Доступ: protectedProcedure
type
'avatar' | 'skin' | 'cape'
required
Тип косметики
filename
string
required
Имя исходного файла
contentType
string
required
MIME-тип файла (допустимы только image/png, image/jpeg, image/gif, image/webp)
data
string
required
Содержимое файла в base64 (максимум 2 МБ)
Ответ:
url
string
Публичный URL загруженного файла