ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 50s
ci / ts / ts (packages + web) (push) Successful in 43s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 27s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m22s
- core: AuthSession keeps the access token in memory, refreshes it once for all parallel requests (single-flight) and retries them; refresh races between tabs are retried, reuse signs out; ApiError carries problem+json codes and field errors - web: TanStack Router with guards — guests go to /login, the bootstrap admin to /setup/admin, temporary passwords to /setup/password, admin pages by role - login, setup screens, Classic shell (top bar, role-based sidebar, empty player), settings: name, theme, language, password, devices - users admin: search, role filter, create with a one-time temporary password, reset, block, role change, delete as the policy allows; audit log for admins - ru/en strings for auth, admin and error codes; language and theme are saved in the profile Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
48 lines
2.5 KiB
JSON
48 lines
2.5 KiB
JSON
{
|
|
"common": {
|
|
"internal": "Something went wrong on the server. Please try again",
|
|
"bad_request": "Invalid request",
|
|
"not_found": "Not found",
|
|
"method_not_allowed": "This action is not supported",
|
|
"network": "Cannot reach the server. Check your network"
|
|
},
|
|
"auth": {
|
|
"invalid_credentials": "Wrong username or password",
|
|
"too_many_attempts": "Too many sign-in attempts. Please wait a bit",
|
|
"user_blocked": "This account is blocked. Contact your administrator",
|
|
"unauthorized": "Sign in to continue",
|
|
"token_expired": "Your session has expired, please sign in again",
|
|
"token_invalid": "Your session is invalid, please sign in again",
|
|
"token_revoked": "Your session has ended, please sign in again",
|
|
"refresh_invalid": "Your session has ended, please sign in again",
|
|
"refresh_reused": "Your session was ended for security reasons, please sign in again",
|
|
"refresh_race": "Your session is being refreshed, please retry",
|
|
"credentials_change_required": "Change the administrator username and password first",
|
|
"password_change_required": "Change your temporary password first",
|
|
"current_password_required": "Enter your current password",
|
|
"current_password_invalid": "The current password is wrong",
|
|
"bootstrap_not_required": "The administrator credentials have already been changed",
|
|
"session_not_found": "Session not found",
|
|
"forbidden": "You don't have permission to do this"
|
|
},
|
|
"validation": {
|
|
"password_too_short": "The password must be at least {{min}} characters",
|
|
"password_too_long": "The password must be at most {{max}} characters",
|
|
"password_same_as_username": "The password must not match the username",
|
|
"password_too_common": "This password is too common — choose another one",
|
|
"password_unchanged": "The new password must differ from the current one",
|
|
"username_invalid": "Username: {{min}} to {{max}} characters — Latin letters, digits, \".\", \"_\", \"-\"",
|
|
"username_taken": "This username is already taken",
|
|
"locale_unsupported": "This language is not supported",
|
|
"display_name_too_long": "The name must be at most {{max}} characters",
|
|
"ui_prefs_invalid": "Invalid setting value",
|
|
"client_type_invalid": "Unknown app type",
|
|
"role_invalid": "Unknown role",
|
|
"cursor_invalid": "The list is outdated, please reload"
|
|
},
|
|
"users": {
|
|
"not_found": "User not found",
|
|
"last_admin": "The last administrator cannot be demoted, blocked or deleted"
|
|
}
|
|
}
|