FuelLabs/fuels-ts · error · Error
Provider not found
Error message
Provider not found
What it means
Thrown by the useBaseAssetId React hook (nextjs template) inside its react-query queryFn when useProvider() returns no provider. Identical logic to the other templates: the hook requires a connected Provider in the @fuels/react context to call provider.getBaseAssetId(); without it, the queryFn throws a plain Error 'Provider not found'.
Source
Thrown at templates/nextjs/src/hooks/useBaseAssetId.tsx:10
import { useNamedQuery, useProvider } from "@fuels/react";
export const useBaseAssetId = () => {
const { provider } = useProvider();
return useNamedQuery("baseAssetId", {
queryKey: ["baseAssetId"],
queryFn: async () => {
if (!provider) {
throw new Error("Provider not found");
}
return await provider.getBaseAssetId();
},
placeholderData: undefined,
});
};
View on GitHub (pinned to b3f37c91ac)
Solutions
- Wrap the Next.js app (e.g. in _app.tsx or a root layout) with the Fuel provider.
- Make components using this hook Client Components ('use client') and ensure they render only after the provider connects.
- Gate the hook usage behind the provider's connection-ready flag.
- Confirm @fuels/react's provider is an ancestor in the React tree.
Example fix
// before
// pages/_app.tsx
export default function App({ Component }) {
return <Component />; // useBaseAssetId has no provider
}
// after
import { FuelProvider } from '@fuels/react';
export default function App({ Component }) {
return <FuelProvider><Component /></FuelProvider>;
} Defensive patterns
Strategy: try-catch
Validate before calling
import { useProvider } from '@fuels/react';
const { provider } = useProvider();
if (!provider) throw new Error('Wrap the app with <FuelProvider> in _app/layout'); Type guard
const hasProvider = (ctx: ReturnType<typeof useProvider>): boolean => ctx.provider != null;
Try / catch
const q = useBaseAssetId(); if (q.isError) return <FallbackUI reason="Provider not connected" />;
Prevention
- Wrap the Next.js app (root layout / _app) with the Fuel provider.
- Mark hook consumers 'use client' and render them only after connection.
- Keep the provider ancestor order correct when composing multiple context providers.
When it happens
Trigger: Calling useBaseAssetId() in a Next.js component that is not mounted under the Fuel provider context, so useProvider() returns undefined. The queryFn runs and immediately throws the guard error.
Common situations: Next.js pages/_app not wrapped with the Fuel provider. Server Component rendering a client hook before the provider is mounted. Provider connection still pending on first render. Mis-ordered providers after a Next.js upgrade.
Related errors
AI-assisted analysis of FuelLabs/fuels-ts@b3f37c91ac (2026-08-12).
Data as JSON: /api/errors/394c78b867dfc719.
Report an issue: GitHub.