@mandaputtra/fastify-sentry
Version:
Simple fastify plugin to integrates Sentry error reporting into your services, a fork to address hasEnabledTracing issue
115 lines (97 loc) • 2.95 kB
JavaScript
;
const { normalize, isString, isPlainObject } = require('@sentry/utils');
const cookie = require('cookie');
/* istanbul ignore next */
function isAutoSessionTrackingEnabled(client) {
if (client === undefined) {
return false;
}
const clientOptions = client && client.getOptions();
if (clientOptions && clientOptions.autoSessionTracking !== undefined) {
return clientOptions.autoSessionTracking;
}
return false;
}
exports.isAutoSessionTrackingEnabled = isAutoSessionTrackingEnabled;
function tryToExtractBody(req) {
if (req.body !== undefined) {
return isString(req.body) ? req.body : JSON.stringify(normalize(req.body));
}
}
exports.tryToExtractBody = tryToExtractBody;
function extractRequestData(req, keys) {
const extracted = {};
for (const key of keys) {
switch (key) {
case 'headers':
extracted.headers = req.headers;
break;
case 'method':
extracted.method = req.method;
break;
case 'url':
{
const host = req.hostname;
extracted.url = `${req.protocol}://${host}${req.url}`;
}
break;
case 'cookies':
if (extracted.headers) {
extracted.cookies = cookie.parse(extracted.headers.cookie || '');
}
break;
case 'query_string':
extracted.query_string = req.query;
break;
case 'data':
if (req.method === 'GET' || req.method === 'HEAD') {
break;
}
if (req.body !== undefined) {
extracted.data = tryToExtractBody(req);
}
break;
}
}
return extracted;
}
exports.extractRequestData = extractRequestData;
/** Default user keys that'll be used to extract data from the request */
const DEFAULT_USER_KEYS = ['id', 'username', 'email'];
function extractUserData(request) {
if (!isPlainObject(request.user)) {
return {};
}
const extractedUser = {};
const user = request.user;
for (const key of DEFAULT_USER_KEYS) {
if (key in user) {
extractedUser[key] = user[key];
}
}
return extractedUser;
}
exports.extractUserData = extractUserData;
const getTransactionName = (request) => {
return `${request.method} ${request.routeOptions.url}`;
};
exports.getTransactionName = getTransactionName;
const extractPathForTransaction = (request, getName = getTransactionName) => {
const name = getName(request);
let source = 'url';
return [name, source];
};
exports.extractPathForTransaction = extractPathForTransaction;
const shouldHandleError = function (error, request, reply) {
return reply.statusCode >= 500;
};
exports.shouldHandleError = shouldHandleError;
const errorResponse = function (error, request, reply) {
// @fastify/sensible explicit internal errors support
if (reply.statusCode === 500) {
reply.send(new Error('Something went wrong'));
} else {
reply.send(error);
}
};
exports.errorResponse = errorResponse;