ce54c729e8
- 新增 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
31 lines
1.2 KiB
TypeScript
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;
|
|
}
|
|
}
|