GraphQL

Plugin do GraphQL para o OpenReplay.

GraphQL

Este plugin permite capturar requisições GraphQL e inspecioná-las depois ao reproduzir as gravações de sessões. Isso é muito útil para entender e corrigir problemas. O plugin GraphQL é compatível com as implementações do Apollo e do Relay.

npm i @openreplay/tracker-graphql

Inicialize o pacote @openreplay/tracker normalmente e carregue o plugin nele. A chamada de plugin retornará a função, que recebe as variáveis operationKind, operationName, variables, result e duration (padrão 0) e retorna result sem alterações.

import Tracker from '@openreplay/tracker';
import { createGraphqlMiddleware } from '@openreplay/tracker-graphql';

const tracker = new Tracker({
  projectKey: YOUR_PROJECT_KEY,
});

export const recordGraphQL = tracker.use(createGraphqlMiddleware());

Se você usa as ferramentas de rede do Relay, basta criar um middleware

import { createRelayMiddleware } from '@openreplay/tracker-graphql';

const trackerMiddleware = tracker.use(createRelayMiddleware());
const network = new RelayNetworkLayer([
  // your middleware
  // ,
  trackerMiddleware,
]);

Você pode passar uma função Sanitizer para createRelayMiddleware para sanitizar as variáveis e os dados antes de enviá-los ao OpenReplay.

const trackerLink = tracker.use(
  createRelayMiddleware((variables) => {
    return {
      ...variables,
      password: '***',
    };
  }),
);

Ou você pode colocar manualmente a chamada recordGraphQL na implementação do NetworkLayer. Se você usa a forma padrão com Network.create para implementá-lo, faça algo como o exemplo abaixo:

import { createGraphqlMiddleware } from '@openreplay/tracker-graphql'; // see above for recordGraphQL definition
import { Environment } from 'relay-runtime';

const handler = tracker.use(createGraphqlMiddleware());

function fetchQuery(operation, variables, cacheConfig, uploadables) {
  return fetch('www.myapi.com/resource', {
    // ...
  })
    .then((response) => response.json())
    .then((result) =>
      handler(
        // op kind, name, variables, response, duration (default 0)
        operation.operationKind,
        operation.name,
        variables,
        result,
        duration,
      ),
    );
}

const network = Network.create(fetchQuery);

Consulte Relay Network Layer para mais detalhes.

Para o Apollo, você deve criar um novo ApolloLink:

import { createTrackerLink } from '@openreplay/tracker-graphql';

const trackerLink = tracker.use(createTrackerLink());
const yourLink = new ApolloLink(trackerLink);

Você pode passar uma função Sanitizer para createRelayMiddleware para sanitizar as variáveis e os dados antes de enviá-los ao OpenReplay.

const trackerLink = tracker.use(
  createTrackerLink((variables) => {
    return {
      ...variables,
      password: '***',
    };
  }),
);

Como alternativa, você pode usar o handler genérico do graphql:

import { createGraphqlMiddleware } from '@openreplay/tracker-graphql'; // see above for recordGraphQL definition
import { ApolloLink } from 'apollo-link';

const handler = tracker.use(createGraphqlMiddleware());

const trackerApolloLink = new ApolloLink((operation, forward) => {
  operation.setContext({ start: performance.now() });
  return forward(operation).map((result) => {
    const time = performance.now() - operation.getContext().start;
    return handler(
      // op kind, name, variables, response, duration (default 0)
      operation.query.definitions[0].operation,
      operation.operationName,
      operation.variables,
      result,
      time,
    );
  });
});

const link = ApolloLink.from([
  trackerApolloLink,
  // ...
]);

Consulte Apollo Link e Apollo Networking para mais detalhes.

Se você procura um exemplo prático de como usar este plugin para capturar dados de operações (mutations e queries) nos seus session replays, confira nosso tutorial detalhado aqui.

Está com dificuldade para configurar este plugin? Conecte-se ao nosso Slack e receba ajuda da nossa comunidade.