feat(edit): 编辑页上报ozon 开发
This commit is contained in:
@@ -11,6 +11,10 @@ export class OzonRequestError extends Error {
|
||||
}
|
||||
}
|
||||
export class OzonRetryableError extends Error {}
|
||||
/** 429 明确未受理写请求,可按平台要求延迟重试。 */
|
||||
export class OzonRateLimitError extends OzonRetryableError {
|
||||
constructor(public readonly retryAfterSeconds: number) { super('Ozon request rate limited'); }
|
||||
}
|
||||
|
||||
export type OzonCategoryNode = {
|
||||
/** 类型叶子会省略这两个字段,继承最近的父类目。 */
|
||||
@@ -193,7 +197,13 @@ export async function requestOzon(
|
||||
if (response.status === 401 || response.status === 403) {
|
||||
throw new OzonCredentialError(response.status);
|
||||
}
|
||||
if (response.status === 429 || response.status >= 500) {
|
||||
if (response.status === 429) {
|
||||
const header = response.headers.get('Item-Retry-After') ?? response.headers.get('Retry-After');
|
||||
const parsed = Number(header);
|
||||
const date = header ? (Date.parse(header)-Date.now())/1000 : NaN;
|
||||
throw new OzonRateLimitError(Number.isFinite(parsed) && parsed > 0 ? Math.min(86400,Math.ceil(parsed)) : Number.isFinite(date) && date > 0 ? Math.min(86400,Math.ceil(date)) : 60);
|
||||
}
|
||||
if (response.status >= 500) {
|
||||
throw new OzonRetryableError(`Ozon temporarily unavailable (${response.status})`);
|
||||
}
|
||||
throw new OzonRequestError(response.status);
|
||||
|
||||
Reference in New Issue
Block a user