error.js 586 Bytes
import * as v from 'valibot'

/**
 * 统一错误形状:全 API 失败响应同形。
 * `code` 与 `retryable` 的语义与各能力包的结构化错误(如 `TtsError`)对齐,
 * 前端可一套分支处理全部失败(401 / 限流 / 校验失败等)。
 * @typedef {{
 *   error: { code: string, message: string, retryable: boolean, details?: object }
 * }} ApiErrorT
 */
export const ApiError = v.object({
  error: v.object({
    code: v.string(),
    message: v.string(),
    retryable: v.boolean(),
    details: v.optional(v.record(v.string(), v.unknown())),
  }),
})