2026-09-18 09:12:45 +08:00
|
|
|
import { NETWORK_ERROR_CODE } from './client';
|
|
|
|
|
|
|
|
|
|
// 错误码 → i18n 文案键映射表:401/404 等观众可认知的码给出确定性文案,
|
|
|
|
|
// 未登记码统一走 errors.unknown(原始 message 仅用于日志/排查)。
|
2026-09-20 23:44:27 +08:00
|
|
|
//
|
|
|
|
|
// T15 全端语言验收(P4b Task 6):本表按契约枚举全集登记(机器守护见
|
|
|
|
|
// __tests__/error-coverage.spec.ts,遍历 @photo/contracts ErrorCodes 断言
|
|
|
|
|
// 无缺漏)。viewer 可达码给专属文案;管理/上传/内部域码(登录凭据、成员
|
|
|
|
|
// 冲突、上传校验、服务间鉴权——viewer 无对应界面)按移动端先例防御性
|
|
|
|
|
// 注册到通用文案,杜绝未来路由扩展时静默漏译。
|
2026-09-18 09:12:45 +08:00
|
|
|
export const errorCodeI18nKeys: Readonly<Record<string, string>> = {
|
|
|
|
|
// 客户端合成码
|
|
|
|
|
[NETWORK_ERROR_CODE]: 'errors.network',
|
|
|
|
|
// 401 域
|
|
|
|
|
AUTH_TOKEN_EXPIRED: 'errors.authExpired',
|
2026-09-20 23:44:27 +08:00
|
|
|
// 登录凭据错误:viewer 无登录面(App/admin 域),防御性注册。
|
|
|
|
|
AUTH_INVALID_CREDENTIALS: 'errors.unknown',
|
2026-09-18 09:12:45 +08:00
|
|
|
AUTH_RATE_LIMITED: 'errors.rateLimited',
|
2026-09-20 23:44:27 +08:00
|
|
|
// P2 公开互动(likes/visits)匿名限速 429——viewer 直面。
|
|
|
|
|
RATE_LIMITED: 'errors.rateLimited',
|
|
|
|
|
AUTH_FORBIDDEN: 'errors.forbidden',
|
2026-09-18 09:12:45 +08:00
|
|
|
// 404 域
|
|
|
|
|
NOT_FOUND: 'errors.notFound',
|
|
|
|
|
ALBUM_NOT_FOUND: 'errors.albumNotFound',
|
|
|
|
|
ALBUM_NOT_PUBLIC: 'errors.albumNotAvailable',
|
|
|
|
|
PHOTO_NOT_FOUND: 'errors.photoNotFound',
|
|
|
|
|
PHOTO_NOT_PUBLIC: 'errors.photoNotFound',
|
2026-09-20 23:44:27 +08:00
|
|
|
// P4a 下载两级开关(A18):相册可见但禁止下载——下载入口与文案直达。
|
|
|
|
|
DOWNLOAD_DISABLED: 'errors.downloadDisabled',
|
|
|
|
|
// 上传/成员域(admin 与 App 上传链路):viewer 不可达,防御性注册。
|
|
|
|
|
ALBUM_UPLOAD_DISABLED: 'errors.unknown',
|
|
|
|
|
MEMBER_CONFLICT: 'errors.unknown',
|
|
|
|
|
UPLOAD_SESSION_CONFLICT: 'errors.unknown',
|
|
|
|
|
UPLOAD_VERIFY_FAILED: 'errors.unknown',
|
|
|
|
|
// 服务间内部同步鉴权(/internal/**):外部客户端不可达,防御性注册。
|
|
|
|
|
SYNC_AUTH_FAILED: 'errors.unknown',
|
2026-09-18 09:12:45 +08:00
|
|
|
// 其余
|
|
|
|
|
VALIDATION_FAILED: 'errors.validationFailed',
|
|
|
|
|
INTERNAL_ERROR: 'errors.internal',
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export function errorMessageKey(code: string): string {
|
|
|
|
|
return errorCodeI18nKeys[code] ?? 'errors.unknown';
|
|
|
|
|
}
|