Files
explore/lib/api/useQueryClientConfig.tsx
T
tom goriunovandGitHub e924bbd7d8 Release v2.3.3 (#3010)
* check address for GasHawk integration

* validate invalid API schema payload

* Invalid API schema: enhance request handling

* don't throw 429 error for noves_describe_txs resource
2025-09-12 17:44:41 +02:00

54 lines
1.7 KiB
TypeScript

import { QueryClient } from '@tanstack/react-query';
import React from 'react';
import getErrorObjPayload from 'lib/errors/getErrorObjPayload';
import getErrorObjStatusCode from 'lib/errors/getErrorObjStatusCode';
import type { ResourceName } from './resources';
export const retry = (failureCount: number, error: unknown) => {
const errorPayload = getErrorObjPayload<{ status: number }>(error);
const status = errorPayload?.status || getErrorObjStatusCode(error);
if (status && status >= 400 && status < 500) {
// don't do retry for client error responses
return false;
}
return failureCount < 2;
};
export default function useQueryClientConfig() {
const [ queryClient ] = React.useState(() => new QueryClient({
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
retry,
throwOnError: (error, query) => {
const status = getErrorObjStatusCode(error);
// we don't catch error only for "Too many requests" response
if (status !== 429) {
return false;
}
const EXTERNAL_API_RESOURCES: Array<ResourceName> = [
'general:contract_solidity_scan_report',
'general:address_xstar_score',
'general:address_3rd_party_info',
'general:noves_transaction',
'general:noves_address_history',
'general:noves_describe_txs',
// these resources are not proxied by the backend
'external:safe_transaction_api',
'external:gas_hawk_saving_potential',
];
const isExternalApiResource = EXTERNAL_API_RESOURCES.some((resource) => query.queryKey[0] === resource);
return !isExternalApiResource;
},
},
},
}));
return queryClient;
}