AGC认证失败载体把载荷序列化进message
- ClientAuthErrorWrapper 构造时 super(JSON.stringify(error)):结构化拒绝在上报事件里是变体名与载荷,不再落成未知客户端错误 - errorReporting 注释同步:载体 message 已带载荷,Tauri 缺陷抛出的真 Error 仍优先用其自身 message/stack
This commit is contained in:
@@ -15,15 +15,19 @@ export type ClientErrorReportContext = {
|
||||
* 认证命令失败的 JS 侧载体:`error` 就是 Rust 的结构化拒绝(ts-rs 生成的 `ClientAuthError`
|
||||
* 判别联合)。
|
||||
*
|
||||
* 本类只把原始拒绝值装成 JS `Error`,不读、不产任何派生值:不读变体字段,不注入
|
||||
* `source` / `action`,`Error.message` 留空。分流只看类型化的变体,
|
||||
* 构造时把整份载荷 `JSON.stringify` 进 `Error.message`:结构化拒绝是普通对象,序列化后
|
||||
* 上报事件拿到的是机器事实(变体名与载荷),而不是 `[object Object]`;不读任何变体字段、
|
||||
* 不拼用户文案、不注入 `source` / `action`。分流只看类型化的变体,
|
||||
* **不要用文案判断**;上报上下文由调用 `captureClientError` 时的显式入参决定。
|
||||
*
|
||||
* Tauri 缺陷抛出的真 `Error` 序列化只有 `{}`,但上报链路对真 `Error` 优先用其自身
|
||||
* message/stack,不受影响。
|
||||
*/
|
||||
export class ClientAuthErrorWrapper extends Error {
|
||||
readonly error: ClientAuthError;
|
||||
|
||||
constructor(error: ClientAuthError) {
|
||||
super();
|
||||
super(JSON.stringify(error));
|
||||
this.name = 'ClientAuthErrorWrapper';
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
@@ -80,8 +80,8 @@ export async function captureClientError(
|
||||
error: unknown,
|
||||
context: Partial<ClientErrorReportContext> = {},
|
||||
) {
|
||||
// ClientAuthErrorWrapper 只把原始拒绝值装成 JS Error:真的 message / stack 在 `error` 字段里,
|
||||
// 载体自身是空文案。结构化 Rust 拒绝没有 JS Error 语义,落回默认文案。
|
||||
// ClientAuthErrorWrapper 构造时已把整份载荷序列化进 message:结构化拒绝在这里直接作为事件
|
||||
// 文案上报;真 Error 仍优先用它自己的 message / stack。
|
||||
const actionError = error instanceof ClientAuthErrorWrapper ? error : null;
|
||||
// 类型上 `error` 是 ClientAuthError;Tauri 在映射外抛 Error 属于它的缺陷,这里按 unknown 兜底取文案/栈。
|
||||
const carried: unknown = actionError?.error;
|
||||
|
||||
Reference in New Issue
Block a user