Apollo Client Mux

0.0.3 · active · verified Wed Apr 22

apollo-client-mux is an early-stage library, currently at version 0.0.3, designed for advanced GraphQL client configurations. It enables a single Apollo Client instance to manage interactions with multiple distinct GraphQL endpoints. The library achieves this by allowing developers to define separate ApolloCache and ApolloLink instances for each endpoint, which are then integrated into a 'muxed' cache and link. This approach is particularly useful in microservice architectures or when integrating with multiple third-party GraphQL APIs, where different data models and network configurations necessitate isolated caching and request routing. It integrates with `@graphql-codegen` via a transformation utility to automatically apply an `@endpoint` directive to operation documents, ensuring queries and mutations are routed to the correct endpoint. Its current low version suggests active development and potential for API changes.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates configuring graphql-codegen to add an `@endpoint` directive and then setting up an Apollo Client instance with a multiplexed cache and link for multiple GraphQL endpoints.

import { ApolloClient, HttpLink, InMemoryCache } from '@apollo/client';
import { ApolloCacheMux, withCacheMux, createApolloLinkMux } from 'apollo-client-mux';
import type { CodegenConfig } from '@graphql-codegen/cli';
import { addEndpointDirectiveForCodegen } from 'apollo-client-mux/transform';

// --- GraphQL Codegen Configuration (for your endpoint) ---
// This config snippet assumes you have graphql-codegen setup
// and want to route operations for 'yourEndpoint' through the mux.
const codegenConfig: CodegenConfig = {
  schema: 'http://localhost:4000/graphql', // Your endpoint's schema
  generates: {
    'src/gql/yourEndpoint/': {
      preset: 'client',
      documentTransforms: [
        {
          transform: addEndpointDirectiveForCodegen({
            endpointName: 'yourEndpoint' // Must match the name used in client setup
          })
        }
      ]
    }
  }
};

// --- Apollo Client Mux Setup ---

// 1. Create muxed cache
const InMemoryCacheMux = withCacheMux(InMemoryCache);
const yourEndpointCache = new InMemoryCache();
const defaultCache = new InMemoryCache();

const cache = new InMemoryCacheMux({
  mux: {
    caches: {
      yourEndpoint: yourEndpointCache // Cache specifically for 'yourEndpoint'
    }
  },
  // Options for the default cache (used when no @endpoint directive is present)
  ...defaultCache.extract()
});

// 2. Create muxed link
const yourEndpointHttpLink = new HttpLink({ uri: 'http://localhost:4001/graphql' });
const defaultHttpLink = new HttpLink({ uri: 'http://localhost:4000/graphql' });

const link = createApolloLinkMux({
  links: {
    yourEndpoint: yourEndpointHttpLink // Link specifically for 'yourEndpoint'
  },
  defaultLink: defaultHttpLink // Link for operations without @endpoint
});

// 3. Create Apollo Client instance with muxed cache and link
const client = new ApolloClient({
  cache,
  link
});

console.log('Apollo Client with Muxed Endpoints initialized:', client);

// Example: Execute a query (assuming your codegen generated this)
// client.query({ query: YourEndpointQueryDocument });

view raw JSON →