UNPKG

@zerosuxx/opentelemetry-nestjs

Version:

OpenTelemetry module for Nestjs with auto instrumentation and resource detection. Initially forked from https://github.com/overbit/opentelemetry-nestjs.git

77 lines 3.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenTelemetryModule = void 0; const TraceService_1 = require("./Trace/TraceService"); const Constants_1 = require("./Constants"); const OpenTelemetryModuleConfigDefault_1 = require("./OpenTelemetryModuleConfigDefault"); const DecoratorInjector_1 = require("./Trace/Injectors/DecoratorInjector"); const core_1 = require("@nestjs/core"); const event_emitter_1 = require("@nestjs/event-emitter"); class OpenTelemetryModule { static forRoot(traceAutoInjectors) { const injectors = traceAutoInjectors ?? OpenTelemetryModuleConfigDefault_1.OpenTelemetryModuleDefaultConfig; return { global: true, module: OpenTelemetryModule, imports: [event_emitter_1.EventEmitterModule.forRoot()], providers: [ ...injectors, TraceService_1.TraceService, DecoratorInjector_1.DecoratorInjector, this.buildInjectors(injectors), ], exports: [TraceService_1.TraceService], }; } static buildInjectors(injectors = []) { return { provide: Constants_1.Constants.SDK_INJECTORS, useFactory: async (...injectors) => { for await (const injector of injectors) { if (injector['inject']) await injector.inject(); } }, inject: [ DecoratorInjector_1.DecoratorInjector, ...injectors, ], }; } static async forRootAsync(configuration = {}) { return { global: true, module: OpenTelemetryModule, imports: [...configuration?.imports, event_emitter_1.EventEmitterModule.forRoot()], providers: [ TraceService_1.TraceService, this.buildAsyncInjectors(), { provide: Constants_1.Constants.SDK_CONFIG, useFactory: configuration.useFactory, inject: configuration.inject, }, ], exports: [TraceService_1.TraceService], }; } static buildAsyncInjectors() { return { provide: Constants_1.Constants.SDK_INJECTORS, useFactory: async (traceAutoInjectors, moduleRef) => { const injectors = traceAutoInjectors ?? OpenTelemetryModuleConfigDefault_1.OpenTelemetryModuleDefaultConfig; const decoratorInjector = await moduleRef.create(DecoratorInjector_1.DecoratorInjector); await decoratorInjector.inject(); for await (const injector of injectors) { const created = await moduleRef.create(injector); if (created['inject']) await created.inject(); } return {}; }, inject: [Constants_1.Constants.SDK_CONFIG, core_1.ModuleRef], }; } } exports.OpenTelemetryModule = OpenTelemetryModule; //# sourceMappingURL=OpenTelemetryModule.js.map