Files
livedash-node/components/providers/TRPCProvider.tsx
Kaj Kowalski e1abedb148 feat: implement cache layer, CSP improvements, and database performance optimizations
- Add Redis cache implementation with LRU eviction
- Enhance Content Security Policy with nonce generation
- Optimize database queries with connection pooling
- Add cache invalidation API endpoints
- Improve security monitoring performance
2025-07-13 11:52:49 +02:00

68 lines
2.1 KiB
TypeScript

/**
* tRPC Provider Component
*
* Simplified provider for tRPC integration.
* The tRPC client is configured in trpc-client.ts and used directly in components.
*/
"use client";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import { useState } from "react";
interface TRPCProviderProps {
children: React.ReactNode;
}
export function TRPCProvider({ children }: TRPCProviderProps) {
const [queryClient] = useState(
() =>
new QueryClient({
defaultOptions: {
queries: {
// Optimize refetching behavior for better performance
refetchOnWindowFocus: false,
refetchOnReconnect: true,
refetchOnMount: false, // Only refetch if stale
retry: (failureCount, error) => {
// Smart retry logic based on error type
if (
error?.message?.includes("401") ||
error?.message?.includes("403")
) {
return false; // Don't retry auth errors
}
return failureCount < 3;
},
retryDelay: (attemptIndex) =>
Math.min(1000 * 2 ** attemptIndex, 30000),
// Optimized cache times based on data type
staleTime: 2 * 60 * 1000, // 2 minutes - data is fresh for 2 minutes
gcTime: 10 * 60 * 1000, // 10 minutes - keep unused data for 10 minutes
// Performance optimizations
networkMode: "online", // Only run queries when online
notifyOnChangeProps: ["data", "error", "isLoading"], // Reduce re-renders
},
mutations: {
// Optimize mutation behavior
retry: 2,
networkMode: "online",
throwOnError: false, // Handle errors gracefully in components
},
},
})
);
return (
<QueryClientProvider client={queryClient}>
{children}
{process.env.NODE_ENV === "development" && (
<ReactQueryDevtools initialIsOpen={false} />
)}
</QueryClientProvider>
);
}