fix(canvas): 资源引用 - 校验递归素材并修复断链
This commit is contained in:
@@ -7,6 +7,7 @@ export type BackendEnvelope<T> = {
|
||||
data: T;
|
||||
msg: string;
|
||||
reason?: string;
|
||||
details?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -18,16 +19,18 @@ export class ApiError extends Error {
|
||||
readonly status?: number;
|
||||
readonly code?: number;
|
||||
readonly reason?: string;
|
||||
readonly details?: Record<string, unknown>;
|
||||
readonly retryable: boolean;
|
||||
readonly retryAfterMs?: number;
|
||||
readonly cause?: unknown;
|
||||
|
||||
constructor(message: string, options: { status?: number; code?: number; reason?: string; retryable?: boolean; retryAfterMs?: number; cause?: unknown } = {}) {
|
||||
constructor(message: string, options: { status?: number; code?: number; reason?: string; details?: Record<string, unknown>; retryable?: boolean; retryAfterMs?: number; cause?: unknown } = {}) {
|
||||
super(message);
|
||||
this.name = "ApiError";
|
||||
this.status = options.status;
|
||||
this.code = options.code;
|
||||
this.reason = options.reason;
|
||||
this.details = options.details;
|
||||
this.retryable = options.retryable ?? isRetryableStatus(options.status ?? options.code);
|
||||
this.retryAfterMs = options.retryAfterMs;
|
||||
this.cause = options.cause;
|
||||
@@ -51,6 +54,7 @@ export async function request<T>(promise: Promise<{ data: BackendEnvelope<T>; st
|
||||
status: response.status,
|
||||
code: response.data.code,
|
||||
reason: response.data.reason,
|
||||
details: response.data.details,
|
||||
retryable: isRetryableStatus(response.status) || isRetryableStatus(response.data.code),
|
||||
retryAfterMs: retryAfterMilliseconds(response.headers),
|
||||
});
|
||||
@@ -75,6 +79,7 @@ function unwrapTransportError(error: unknown): never {
|
||||
status,
|
||||
code,
|
||||
reason: error.response?.data?.reason,
|
||||
details: error.response?.data?.details,
|
||||
retryable: isRetryableStatus(status) || isRetryableStatus(code),
|
||||
retryAfterMs: retryAfterMilliseconds(error.response?.headers),
|
||||
cause: error,
|
||||
|
||||
Reference in New Issue
Block a user