'use client';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { type PropsWithChildren, useContext, useMemo } from 'react';
import { Config, WagmiProvider } from 'wagmi';
import { baseAccount } from 'wagmi/connectors';
import { farcasterMiniApp } from '@farcaster/miniapp-wagmi-connector';
import { MiniKitContext } from '@/minikit/MiniKitProvider';
import { createWagmiConfig } from './core/createWagmiConfig';
import { useProviderDependencies } from './internal/hooks/useProviderDependencies';
import { useOnchainKit } from './useOnchainKit';
export function DefaultOnchainKitProviders({ children }: PropsWithChildren) {
// Check the React context for WagmiProvider and QueryClientProvider
const { providedWagmiConfig, providedQueryClient } =
useProviderDependencies();
return (
{children}
);
}
function WagmiProviderWithDefault({
children,
providedWagmiConfig,
}: PropsWithChildren<{
providedWagmiConfig: Config | null;
}>) {
const onchainKitConfig = useOnchainKit();
// Using useContext here because useMiniKit throws if MiniKit is not enabled
const miniKit = useContext(MiniKitContext);
const apiKey = onchainKitConfig.apiKey ?? undefined;
const appName = onchainKitConfig.config?.appearance?.name ?? undefined;
const appLogoUrl = onchainKitConfig.config?.appearance?.logo ?? undefined;
const defaultConnector = useMemo(() => {
if (miniKit?.context) {
return farcasterMiniApp();
}
return baseAccount({
appName,
appLogoUrl,
});
}, [appName, appLogoUrl, miniKit?.context]);
const defaultConfig = useMemo(() => {
if (providedWagmiConfig) return providedWagmiConfig;
return createWagmiConfig({
apiKey,
appName,
appLogoUrl,
connectors: [defaultConnector],
});
}, [providedWagmiConfig, defaultConnector, apiKey, appName, appLogoUrl]);
if (providedWagmiConfig) {
return children;
}
return {children};
}
function QueryClientProviderWithDefault({
children,
providedQueryClient,
}: PropsWithChildren<{ providedQueryClient: QueryClient | null }>) {
const queryClient = useMemo(() => {
return providedQueryClient || new QueryClient();
}, [providedQueryClient]);
if (providedQueryClient) return children;
return (
{children}
);
}