Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | 16x 16x 16x 48x 48x 976x 976x 976x 48x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x | // Generated by tools/gen-errors.mjs from spec/errors.json version 2026-10-08. Do not edit.
// ES2017-safe on purpose (no Object.fromEntries): the mini program runtime targets ES2017.
const rows = (list) => {
const out = {};
for (let i = 0; i < list.length; i++) {
const [code, name, category, retryable, http, message] = list[i];
out[code] = Object.freeze({ code, name, category, retryable, http, message });
}
return Object.freeze(out);
};
export const ERROR_TABLE = rows([
[40001, "VALIDATION_ERROR", "INVALID_PARAM", false, 400, "请求参数校验失败"],
[40100, "UNAUTHORIZED", "AUTH", false, 401, "未认证,缺少或无效的凭据"],
[40300, "FORBIDDEN", "PERMISSION", false, 403, "无权限,例如 API Key 未授权该 coreType"],
[40400, "NOT_FOUND", "NOT_FOUND", false, 404, "资源不存在"],
[40900, "CONFLICT", "CONFLICT", false, 409, "资源冲突"],
[40901, "IDEMPOTENCY_IN_PROGRESS", "CONFLICT", true, 409, "同一幂等键的请求仍在处理中,稍后用同一个键重试"],
[40902, "QUOTA_INSUFFICIENT", "QUOTA", false, 409, "套餐额度和账户余额均不足"],
[40903, "IDEMPOTENCY_KEY_REUSED", "CONFLICT", false, 409, "幂等键已用于另一个不同的请求"],
[42900, "TOO_MANY_REQUESTS", "RATE_LIMIT", true, 429, "请求过多或评测排队超时,按 Retry-After 稍后重试"],
[42901, "CONCURRENCY_LIMIT", "RATE_LIMIT", true, 429, "并发评测数超出套餐层级限制"],
[42902, "TRIAL_REPORT_DAILY_LIMIT", "QUOTA", false, 429, "试用层 AI 报告达到每日上限"],
[42903, "SANDBOX_DAILY_LIMIT", "QUOTA", false, 429, "沙箱密钥当日调用次数达到上限"],
[50000, "INTERNAL_ERROR", "SERVER", true, 500, "服务器内部错误"],
[50010, "FEATURE_NOT_IMPLEMENTED", "SERVER", false, 500, "功能未实现"],
[50200, "UPSTREAM_SERVICE_ERROR", "UPSTREAM", true, 502, "上游评测服务暂不可用"],
[2001, "TOKEN_EXPIRED", "AUTH", false, 401, "token 已过期,兼容层早期引擎接口也用此码表示缺少鉴权三元组或签名不匹配"],
[2002, "TOKEN_INVALID", "AUTH", false, 401, "token 无效,兼容层早期引擎接口也用此码表示时间戳超窗"],
[2003, "SIGNATURE_VERIFICATION_FAILED", "AUTH", false, 401, "签名验证失败,兼容层早期引擎接口也用此码表示 appKey 不存在"],
[2004, "SESSION_EXPIRED", "AUTH", false, 401, "会话已过期"],
[2005, "TOKEN_BLACKLISTED", "AUTH", false, 401, "token 已被列入黑名单"],
[2006, "API_KEY_INVALID", "AUTH", false, 401, "API Key 无效"],
[2007, "API_KEY_EXPIRED", "AUTH", false, 401, "API Key 已过期"],
[2008, "TOKEN_METADATA_NOT_FOUND", "AUTH", false, 401, "token 元数据丢失"],
[2009, "TOKEN_REFRESH_FAILED", "AUTH", false, 401, "token 刷新失败"],
[2010, "API_KEY_NOT_FOUND", "AUTH", false, 401, "API Key 不存在"],
[2011, "API_KEY_DISABLED", "AUTH", false, 401, "API Key 已禁用"],
[2012, "API_KEY_QUOTA_EXCEEDED", "QUOTA", false, 400, "API Key 配额已超限"],
[3001, "RATE_LIMIT_EXCEEDED_IP", "RATE_LIMIT", true, 429, "请求过于频繁,按来源地址限流"],
[3002, "RATE_LIMIT_EXCEEDED_USER", "RATE_LIMIT", true, 429, "请求过于频繁,按用户限流"],
[3003, "RATE_LIMIT_EXCEEDED_API_KEY", "RATE_LIMIT", true, 429, "请求过于频繁,按 API Key 限流"],
[1004, "USER_DISABLED", "PERMISSION", false, 400, "用户已禁用"],
[1005, "USER_LOCKED", "PERMISSION", false, 400, "用户已锁定"],
[1012, "ACCOUNT_DISABLED", "PERMISSION", false, 400, "账户已禁用"],
[1013, "ACCOUNT_FROZEN", "PERMISSION", false, 400, "账户已冻结"],
[1310, "ACCOUNT_BALANCE_INSUFFICIENT", "QUOTA", false, 400, "账户余额不足"],
[1311, "ACCOUNT_LEDGER_CONFLICT", "CONFLICT", true, 400, "账目并发冲突,重试即可"],
]);
export const WARNING_TABLE = rows([
[1001, "NO_VALID_AUDIO", "AUDIO", false, 0, "No valid audio detected!"],
[1002, "VOLUME_TOO_LOW", "AUDIO", false, 0, "Audio volume too low!"],
[1003, "VOLUME_TOO_HIGH", "AUDIO", false, 0, "Audio volume too high!"],
[1004, "AUDIO_NOISY", "AUDIO", false, 0, "Audio noisy!"],
[1005, "AUDIO_INCOMPLETE", "AUDIO", false, 0, "Audio not complete!"],
[1009, "SCORER_DEGRADED", "AUDIO", true, 0, "scorer degraded"],
]);
export const LOCAL_TABLE = rows([
[90001, "NETWORK_ERROR", "NETWORK", true, 0, "网络错误,连接失败或被重置"],
[90002, "TIMEOUT", "TIMEOUT", true, 0, "连接或读取超时"],
[90003, "CANCELLED", "CANCELLED", false, 0, "调用方取消了请求"],
[90004, "CLIENT_CLOSED", "STATE", false, 0, "客户端已关闭"],
[90005, "PROTOCOL_ERROR", "PROTOCOL", false, 0, "响应或帧无法解析"],
[90006, "RECONNECT_EXHAUSTED", "NETWORK", false, 0, "实时连接重连次数用尽"],
[90007, "RESULT_TIMEOUT", "TIMEOUT", true, 0, "结束后等待终评结果超时"],
[90008, "REPLAY_BUFFER_OVERFLOW", "STATE", false, 0, "重连重放缓冲超过上限"],
[90009, "INVALID_STATE", "STATE", false, 0, "当前会话状态不允许该操作"],
[90010, "INVALID_ARGUMENT", "INVALID_PARAM", false, 0, "调用参数不合法"],
[90011, "TLS_ERROR", "NETWORK", false, 0, "证书校验失败"],
[90101, "AUDIO_TOO_SHORT", "AUDIO", false, 0, "音频短于 1 秒"],
[90102, "AUDIO_TOO_LONG", "AUDIO", false, 0, "音频长于 300 秒,整段上传大于 50 MB,或实时评测一轮大于 10 MB"],
[90103, "AUDIO_SILENT", "AUDIO", false, 0, "音频全程静音"],
[90104, "AUDIO_LOW_VOLUME", "AUDIO", false, 0, "音量过低"],
[90105, "AUDIO_FORMAT_UNSUPPORTED", "AUDIO", false, 0, "不是 16 位 PCM 或采样率低于 16000"],
[90201, "RECORDER_PERMISSION_DENIED", "PERMISSION", false, 0, "没有麦克风权限"],
[90202, "RECORDER_UNAVAILABLE", "STATE", false, 0, "麦克风被占用或不可用"],
[90203, "RECORDER_ERROR", "STATE", false, 0, "录音过程出错"],
]);
export const HTTP_FALLBACK = Object.freeze({
400: "INVALID_PARAM",
401: "AUTH",
403: "PERMISSION",
404: "NOT_FOUND",
405: "INVALID_PARAM",
408: "TIMEOUT",
409: "CONFLICT",
413: "INVALID_PARAM",
415: "INVALID_PARAM",
422: "INVALID_PARAM",
425: "RATE_LIMIT",
429: "RATE_LIMIT",
500: "SERVER",
501: "SERVER",
502: "UPSTREAM",
503: "UPSTREAM",
504: "UPSTREAM",
});
export const RETRYABLE_HTTP = Object.freeze([408, 425, 429, 500, 502, 503, 504]);
export const ErrorCodes = Object.freeze({
VALIDATION_ERROR: 40001,
UNAUTHORIZED: 40100,
FORBIDDEN: 40300,
NOT_FOUND: 40400,
CONFLICT: 40900,
IDEMPOTENCY_IN_PROGRESS: 40901,
QUOTA_INSUFFICIENT: 40902,
IDEMPOTENCY_KEY_REUSED: 40903,
TOO_MANY_REQUESTS: 42900,
CONCURRENCY_LIMIT: 42901,
TRIAL_REPORT_DAILY_LIMIT: 42902,
SANDBOX_DAILY_LIMIT: 42903,
INTERNAL_ERROR: 50000,
FEATURE_NOT_IMPLEMENTED: 50010,
UPSTREAM_SERVICE_ERROR: 50200,
TOKEN_EXPIRED: 2001,
TOKEN_INVALID: 2002,
SIGNATURE_VERIFICATION_FAILED: 2003,
SESSION_EXPIRED: 2004,
TOKEN_BLACKLISTED: 2005,
API_KEY_INVALID: 2006,
API_KEY_EXPIRED: 2007,
TOKEN_METADATA_NOT_FOUND: 2008,
TOKEN_REFRESH_FAILED: 2009,
API_KEY_NOT_FOUND: 2010,
API_KEY_DISABLED: 2011,
API_KEY_QUOTA_EXCEEDED: 2012,
RATE_LIMIT_EXCEEDED_IP: 3001,
RATE_LIMIT_EXCEEDED_USER: 3002,
RATE_LIMIT_EXCEEDED_API_KEY: 3003,
USER_DISABLED: 1004,
USER_LOCKED: 1005,
ACCOUNT_DISABLED: 1012,
ACCOUNT_FROZEN: 1013,
ACCOUNT_BALANCE_INSUFFICIENT: 1310,
ACCOUNT_LEDGER_CONFLICT: 1311,
W_NO_VALID_AUDIO: 1001,
W_VOLUME_TOO_LOW: 1002,
W_VOLUME_TOO_HIGH: 1003,
W_AUDIO_NOISY: 1004,
W_AUDIO_INCOMPLETE: 1005,
W_SCORER_DEGRADED: 1009,
NETWORK_ERROR: 90001,
TIMEOUT: 90002,
CANCELLED: 90003,
CLIENT_CLOSED: 90004,
PROTOCOL_ERROR: 90005,
RECONNECT_EXHAUSTED: 90006,
RESULT_TIMEOUT: 90007,
REPLAY_BUFFER_OVERFLOW: 90008,
INVALID_STATE: 90009,
INVALID_ARGUMENT: 90010,
TLS_ERROR: 90011,
AUDIO_TOO_SHORT: 90101,
AUDIO_TOO_LONG: 90102,
AUDIO_SILENT: 90103,
AUDIO_LOW_VOLUME: 90104,
AUDIO_FORMAT_UNSUPPORTED: 90105,
RECORDER_PERMISSION_DENIED: 90201,
RECORDER_UNAVAILABLE: 90202,
RECORDER_ERROR: 90203,
});
|