Files
Genarrative/apps/ai-game-creator-shell/src/services/clientAuthFailure.ts
T
k88936 ce54c729e8 AGC 认证命令失败改为 JS 侧载体并只按变体分流
- 新增 ClientAuthFailure:payload 为 ts-rs 判别联合,context 固定 source=auth + 命令名,cause 为原始拒绝值
- clientAuth 的六个命令统一走 invokeClientAuth:结构化拒绝转成 ClientAuthFailure,非结构化拒绝原样抛出,不兜底文案
- 删除 clientAuthError.ts 的形状读取与 getClientAuthErrorMessage 文案回落层
- AuthenticatedClient 的两个 catch 内联 19 个变体的 switch:业务 / 会话变体原样展示载荷 message,系统变体原样抛出经 unhandledrejection 入池,default: expectNever 保证漏接变体编译失败
- hydrateAuth 失败先离开 loading 态;系统变体不再伪装成 unavailable 投影
- ClientAuthState 收窄为 authenticated / unauthenticated,ClientAuthRefreshResult 收窄为 refreshed / unauthenticated / stale
- platformSession 续期只保留 refreshed / unauthenticated / stale 三条路径
- check-config 的 App 调用扫描登记 invokeClientAuth,继续静态证明命令名可达
- 测试:新增 clientAuthFailure 载体与编译期穷尽用例、jsdom unhandledrejection 桥;删除 clientAuthError.test.ts;clientAuthHost / authFailureReporting / authSurface 跟改新口径
- 共享记忆记录 check-config 扫描形态新增 invokeClientAuth
2026-10-01 20:49:48 +08:00

31 lines
1.2 KiB
TypeScript

import { ClientActionError } from './clientActionError';
import type { ClientAuthError } from './generated/ClientAuthError';
/**
* 认证命令失败在 JS 侧的载体。
*
* Tauri 的 `invoke` 拒绝值是普通对象(Rust 序列化的结构化错误),不是 `Error`;直接抛出会被
* 上报链路降级成 `String(obj)`,类型与文案一起丢掉。`invokeClientAuth` 统一把它转成本类:
*
* - `payload` 是 ts-rs 生成的判别联合,`payload.type` 是唯一的稳定分流键;
* - `context` 固定为 `{ source: 'auth', action: 命令名 }`,给错误池定指纹;
* - `cause` 是原始拒绝值,保留给上报链路取栈与排障。
*
* 本类只承载事实,**不做分类、不产派生值、不兜底文案**:要不要上报、给不给用户提示,由调用方
* 在 catch 里按 `payload.type` 判。
*/
export class ClientAuthFailure extends ClientActionError {
readonly payload: ClientAuthError;
constructor(
message: string,
payload: ClientAuthError,
command: string,
cause: unknown,
) {
super(message, { source: 'auth', action: command }, cause);
this.name = 'ClientAuthFailure';
this.payload = payload;
}
}