@sentry/remix
Version:
Official Sentry SDK for Remix
61 lines (48 loc) • 1.69 kB
JavaScript
import { isNodeEnv, getTraceData, debug } from '@sentry/core';
import { DEBUG_BUILD } from '../utils/debug-build.js';
import { isCloudflareEnv } from '../utils/utils.js';
/** Generate a Server-Timing header value containing Sentry trace context. */
function generateSentryServerTimingHeader() {
if (!isNodeEnv() && !isCloudflareEnv()) {
return null;
}
try {
const traceData = 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) {
DEBUG_BUILD && 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) {
DEBUG_BUILD && debug.warn('Failed to add Server-Timing header to response', e);
return response;
}
}
export { generateSentryServerTimingHeader, injectServerTimingHeaderValue };
//# sourceMappingURL=serverTimingTracePropagation.js.map