export default function createClient()

in lib/ghapi.js [12:56]


export default function createClient() {
  const headers = {};
  /* istanbul ignore next */
  if (process.env.NODE_ENV !== 'test') {
    if (process.env.GH_TOKEN) {
      headers.Authorization = `token ${process.env.GH_TOKEN}`;
    } else {
      throw new Error('No GH_TOKEN found');
    }
  }

  const fragmentMatcher = new IntrospectionFragmentMatcher({
    introspectionQueryResultData,
  });

  // For fetches to work correctly we use a new client instance for
  // each request to avoid stale data.
  const gqlClient = new ApolloClient({
    link: createHttpLink({
      uri: 'https://api.github.com/graphql',
      headers,
    }),
    cache: new InMemoryCache({
      fragmentMatcher,
    }),
  });

  // Client with serverSWR wrapper to carry out in memory caching of the original API response
  // from githubs GraphQL API.
  const client = {
    query: async ({ query, variables }) => {
      // Create a hash based on the query with variables.
      const keyHash = hash(
        { queryAsString: query.loc.source.body.toString(), variables },
        { algorithm: 'sha256' },
      );
      return serverSWR(keyHash, async () => {
        const result = await gqlClient.query({ query, variables });
        return result;
      });
    },
  };

  return client;
}