Libraries
    Preparing search index...
    • Creates a unified typed client from an API contract.

      Each endpoint on the returned object is callable (direct HTTP fetch, identical to @cleverbrush/web's createClient) and also exposes TanStack Query hooks as properties:

      • Call directly: await client.todos.list() — returns a Promise
      • useQuery: client.todos.list.useQuery(args?, options?) — reactive fetch
      • useSuspenseQuery: client.todos.list.useSuspenseQuery(args?, options?) — Suspense fetch
      • useInfiniteQuery: client.todos.list.useInfiniteQuery(getArgs, options) — paginated fetch
      • useMutation: client.todos.create.useMutation(options?) — mutations
      • queryKey: client.todos.list.queryKey(args?) — cache key for manual ops
      • prefetch: client.todos.list.prefetch(queryClient, args?) — pre-populate cache
      • stream: client.todos.export.stream(args?) — NDJSON streaming

      Each group also exposes a queryKey() method for group-level cache invalidation.

      When the cacheTags middleware is active, useMutation hooks automatically invalidate TanStack Query entries for the affected group.

      Type Parameters

      Parameters

      • contract: T

        An API contract created with defineApi().

      • Optionaloptions: ClientOptions

        Client options passed to @cleverbrush/web's createClient().

      Returns UnifiedClient<T>

      A fully typed unified client proxy.

      import { createClient } from '@cleverbrush/client/react';
      import { api } from './contract';

      const client = createClient(api, {
      baseUrl: 'https://api.example.com',
      getToken: () => localStorage.getItem('token'),
      });

      // Direct fetch
      const todos = await client.todos.list();

      // React Query hooks
      function TodoList() {
      const { data } = client.todos.list.useQuery();
      const mutation = client.todos.create.useMutation({
      onSuccess: () => {
      queryClient.invalidateQueries({
      queryKey: client.todos.queryKey()
      });
      }
      });
      }

      // Streaming
      for await (const line of client.todos.export.stream()) { ... }