diff --git a/packages/network-support/CHANGELOG.md b/packages/network-support/CHANGELOG.md index 36bc9623..0d91bcf8 100644 --- a/packages/network-support/CHANGELOG.md +++ b/packages/network-support/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.2.6] 2024-05-20 + ## [1.2.5] 2024-05-16 ## [1.2.4] 2024-05-13 @@ -37,7 +39,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - It's a internal library. -[unreleased]: https://github.com/subquery/network-support/compare/v1.2.5...HEAD +[unreleased]: https://github.com/subquery/network-support/compare/v1.2.6...HEAD +[1.2.6]: https://github.com/subquery/network-support/releases/tag/v1.2.6 [1.2.5]: https://github.com/subquery/network-support/releases/tag/v1.2.5 [1.2.4]: https://github.com/subquery/network-support/releases/tag/v1.2.4 [1.2.3]: https://github.com/subquery/network-support/releases/tag/v1.2.3 diff --git a/packages/network-support/package.json b/packages/network-support/package.json index cc1790e3..81e7addb 100644 --- a/packages/network-support/package.json +++ b/packages/network-support/package.json @@ -1,6 +1,6 @@ { "name": "@subql/network-support", - "version": "1.2.5", + "version": "1.2.6", "main": "dist/index.js", "author": "SubQuery Pte Limited", "license": "Apache-2.0", diff --git a/packages/network-support/src/fetch.ts b/packages/network-support/src/fetch.ts index f8ed779d..b7296d24 100644 --- a/packages/network-support/src/fetch.ts +++ b/packages/network-support/src/fetch.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { OrderManager } from './orderManager'; -import { customFetch, generateUniqueId, Logger } from './utils'; +import { customFetch, generateUniqueId, Logger, safeJSONParse } from './utils'; import { OrderType } from './types'; import { ScoreType } from './scoreManager'; import { Base64 } from 'js-base64'; @@ -38,6 +38,7 @@ export function createFetch( ): (init: RequestInit) => Promise { let retries = 0; let triedFallback = false; + let errorMsg = ''; return async function fetch(init: RequestInit): Promise { const requestId = generateUniqueId(); const requestResult: () => Promise = async () => { @@ -60,7 +61,10 @@ export function createFetch( }; logger?.warn(`fallback to ${orderManager.fallbackServiceUrl}`); } else { - throw new FetchError(`no available order`, 'sqn'); + throw new FetchError( + `no available order. retries: ${retries}.${errorMsg ? ' error: ' + errorMsg : ''}`, + 'sqn' + ); } } const { url, headers, type, runner, channelId } = requestParams; @@ -114,12 +118,16 @@ export function createFetch( } as unknown as Response; } catch (e) { logger?.warn(e); + errorMsg = (e as Error)?.message || ''; if (retries < maxRetries || (orderManager.fallbackServiceUrl && !triedFallback)) { - orderManager.updateScore(runner, ScoreType.RPC); + const errorObj = safeJSONParse(errorMsg); + if (!(errorObj?.code === 1140 && errorObj?.error === 'Invalid request')) { + orderManager.updateScore(runner, ScoreType.RPC); + } retries += 1; return requestResult(); } - throw new FetchError(`reach max retries`, 'SQN'); + throw new FetchError(`reach max retries.${errorMsg ? ' error: ' + errorMsg : ''}`, 'SQN'); } }; diff --git a/packages/network-support/src/utils/common.ts b/packages/network-support/src/utils/common.ts new file mode 100644 index 00000000..217d0c80 --- /dev/null +++ b/packages/network-support/src/utils/common.ts @@ -0,0 +1,10 @@ +// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +export function safeJSONParse(json: string) { + try { + return JSON.parse(json); + } catch (e) { + return undefined; + } +} diff --git a/packages/network-support/src/utils/index.ts b/packages/network-support/src/utils/index.ts index b6336f5f..2b9bc3e2 100644 --- a/packages/network-support/src/utils/index.ts +++ b/packages/network-support/src/utils/index.ts @@ -6,3 +6,4 @@ export * from './query'; export * from './store'; export * from './auth'; export * from './uniqueId'; +export * from './common';