@envelop/sentry
Version:
This plugin collects errors and performance tracing for your execution flow, and reports it to [Sentry](https://sentry.io).
36 lines (35 loc) • 1.58 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useSentry = void 0;
const tslib_1 = require("tslib");
const opentelemetry_1 = require("@envelop/opentelemetry");
const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
const Sentry = tslib_1.__importStar(require("@sentry/node"));
const opentelemetry_2 = require("@sentry/opentelemetry");
const useSentry = ({ otel = {}, tracingProvider, spanKind, spanAdditionalAttributes, serviceName, spanPrefix, } = {}) => {
const client = Sentry.getClient();
if (!client) {
throw new Error("Sentry is not initialized. This plugin doesn't initialize Sentry automatically" +
'Please call `Sentry.init` as describe in Sentry documentation');
}
if (!tracingProvider) {
const provider = new sdk_trace_base_1.BasicTracerProvider({
sampler: new opentelemetry_2.SentrySampler(client),
});
provider.addSpanProcessor(new opentelemetry_2.SentrySpanProcessor());
provider.register({
propagator: new opentelemetry_2.SentryPropagator(),
contextManager: new Sentry.SentryContextManager(),
});
Sentry.validateOpenTelemetrySetup();
tracingProvider = provider;
}
return {
onPluginInit({ addPlugin }) {
addPlugin(
// @ts-expect-error TODO: fix types
(0, opentelemetry_1.useOpenTelemetry)(otel ?? {}, tracingProvider, spanKind, spanAdditionalAttributes, serviceName, spanPrefix));
},
};
};
exports.useSentry = useSentry;
;