apollo-link-sentry
Version:
[Apollo Link](https://www.apollographql.com/docs/react/api/link/introduction) to enrich [Sentry](https://sentry.io) events with [GraphQL](https://graphql.org) data
45 lines (44 loc) • 1.32 kB
JavaScript
import dotProp from 'dot-prop';
import { print } from 'graphql';
import { extractDefinition } from './operation';
export function makeBreadcrumb(operation, options) {
const attachBreadcrumbs = options.attachBreadcrumbs;
const definition = extractDefinition(operation);
const data = {};
const uri = options.uri;
if (uri) {
data.url = uri;
}
const operationName = definition.name?.value;
if (operationName) {
data.operationName = operationName;
}
if (attachBreadcrumbs.includeQuery) {
data.query =
definition.loc?.source?.body ?? print(definition);
}
if (attachBreadcrumbs.includeVariables) {
data.variables = operation.variables;
}
if (attachBreadcrumbs.includeCache) {
data.cache =
operation.getContext().cache?.data?.data ??
undefined;
}
const contextKeys = attachBreadcrumbs.includeContext;
if (contextKeys) {
data.context = extractKeys(operation.getContext(), contextKeys);
}
return {
type: 'http',
category: `graphql.${definition.operation}`,
data,
};
}
function extractKeys(context, keys) {
const result = {};
keys.forEach((key) => {
result[key] = dotProp.get(context, key);
});
return result;
}