@sentry/remix
Version:
Official Sentry SDK for Remix
64 lines (50 loc) • 1.85 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const core = require('@sentry/core');
const debugBuild = require('../utils/debug-build.js');
const utils = require('../utils/utils.js');
/** Generate a Server-Timing header value containing Sentry trace context. */
function generateSentryServerTimingHeader() {
if (!core.isNodeEnv() && !utils.isCloudflareEnv()) {
return null;
}
try {
const traceData = core.getTraceData();
const sentryTrace = traceData['sentry-trace'];
const baggage = traceData.baggage;
if (!sentryTrace) {
return null;
}
const parts = [];
parts.push(`sentry-trace;desc="${sentryTrace}"`);
if (baggage) {
parts.push(`baggage;desc="${baggage}"`);
}
return parts.join(', ');
} catch (e) {
debugBuild.DEBUG_BUILD && core.debug.warn('Failed to generate Server-Timing header', e);
return null;
}
}
/** @internal */
function injectServerTimingHeaderValue(response, serverTimingValue) {
try {
const headers = new Headers(response.headers);
const existing = headers.get('Server-Timing');
// Avoid duplicate entries when manually injected in entry.server.tsx
if (existing?.includes('sentry-trace')) {
return response;
}
headers.set('Server-Timing', existing ? `${existing}, ${serverTimingValue}` : serverTimingValue);
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
});
} catch (e) {
debugBuild.DEBUG_BUILD && core.debug.warn('Failed to add Server-Timing header to response', e);
return response;
}
}
exports.generateSentryServerTimingHeader = generateSentryServerTimingHeader;
exports.injectServerTimingHeaderValue = injectServerTimingHeaderValue;
//# sourceMappingURL=serverTimingTracePropagation.js.map