chore: update atoms retry mechanism (#27450)
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
This commit is contained in:
@@ -1,16 +1,42 @@
|
||||
"use client";
|
||||
|
||||
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
||||
import { useEffect } from "react";
|
||||
|
||||
import { VERSION_2024_06_14 } from "@calcom/platform-constants";
|
||||
|
||||
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
||||
import { isAxiosError } from "axios";
|
||||
import { useEffect } from "react";
|
||||
import http from "../lib/http";
|
||||
import type { CalProviderProps } from "./BaseCalProvider";
|
||||
import { BaseCalProvider } from "./BaseCalProvider";
|
||||
import type { translationKeys } from "./languages";
|
||||
|
||||
const queryClient = new QueryClient();
|
||||
function isRetryableError(error: unknown): boolean {
|
||||
if (!isAxiosError(error) || !error.response) {
|
||||
// network errors or timeouts — retryable
|
||||
return true;
|
||||
}
|
||||
const status = error.response.status;
|
||||
// retry on 408 (timeout), 429 (rate limit), and 5xx (server errors)
|
||||
return status === 408 || status === 429 || status >= 500;
|
||||
}
|
||||
|
||||
const queryClient: QueryClient = new QueryClient({
|
||||
defaultOptions: {
|
||||
queries: {
|
||||
retry: (failureCount: number, error: unknown): boolean => {
|
||||
if (!isRetryableError(error)) return false;
|
||||
return failureCount < 3;
|
||||
},
|
||||
retryDelay: (attempt: number) => Math.min(1000 * 2 ** attempt, 30000),
|
||||
},
|
||||
mutations: {
|
||||
retry: (failureCount: number, error: unknown): boolean => {
|
||||
if (!isRetryableError(error)) return false;
|
||||
return failureCount < 1;
|
||||
},
|
||||
retryDelay: (attempt: number) => Math.min(1000 * 2 ** attempt, 30000),
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Renders a CalProvider component.
|
||||
@@ -44,7 +70,7 @@ export function CalProvider({
|
||||
version = VERSION_2024_06_14,
|
||||
organizationId,
|
||||
isEmbed = false,
|
||||
}: CalProviderProps) {
|
||||
}: CalProviderProps): JSX.Element {
|
||||
useEffect(() => {
|
||||
http.setVersionHeader(version);
|
||||
}, [version]);
|
||||
@@ -74,7 +100,8 @@ export function CalProvider({
|
||||
version={version}
|
||||
labels={labels as Record<translationKeys, string>}
|
||||
language={language}
|
||||
organizationId={organizationId}>
|
||||
organizationId={organizationId}
|
||||
>
|
||||
{children}
|
||||
</BaseCalProvider>
|
||||
</QueryClientProvider>
|
||||
|
||||
Reference in New Issue
Block a user