n8n
Version:
n8n Workflow Automation Tool
57 lines • 3.49 kB
JavaScript
;
const api_types_1 = require("@n8n/api-types");
const backend_common_1 = require("@n8n/backend-common");
const di_1 = require("@n8n/di");
const bad_request_error_1 = require("../../../../errors/response-errors/bad-request.error");
const conflict_error_1 = require("../../../../errors/response-errors/conflict.error");
const otel_lifecycle_handler_1 = require("../../../../modules/otel/otel-lifecycle-handler");
const otel_settings_service_1 = require("../../../../modules/otel/otel-settings.service");
const otel_service_1 = require("../../../../modules/otel/otel.service");
const publisher_service_1 = require("../../../../scaling/pubsub/publisher.service");
const otel_mapper_1 = require("./otel.mapper");
const global_middleware_1 = require("../../shared/middlewares/global.middleware");
const otelHandlers = {
getOtelSettings: [
(0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'otel:manage' }),
async (_req, res) => {
const settings = await di_1.Container.get(otel_settings_service_1.OtelSettingsService).loadSettings();
return res.json((0, otel_mapper_1.toOtelSettingsResponse)(settings));
},
],
updateOtelSettings: [
(0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'otel:manage' }),
async (req, res) => {
const payload = api_types_1.UpdateOtelSettingsDto.safeParse(req.body);
if (!payload.success) {
throw new bad_request_error_1.BadRequestError(payload.error.errors[0]?.message ?? 'Invalid request body');
}
const settingsService = di_1.Container.get(otel_settings_service_1.OtelSettingsService);
await settingsService.loadSettings();
const current = settingsService.getSettings();
const conflicts = current.envManagedFields.filter((key) => payload.data[key] !== current[key]);
if (conflicts.length > 0) {
throw new conflict_error_1.ConflictError(`The following field(s) are managed by environment variables and cannot be changed through the API: ${conflicts.join(', ')}`);
}
await settingsService.saveSettings(payload.data);
await di_1.Container.get(otel_lifecycle_handler_1.OtelLifecycleHandler).onReloadOtelConfig();
await di_1.Container.get(backend_common_1.ModuleRegistry).refreshModuleSettings('otel');
void di_1.Container.get(publisher_service_1.Publisher).publishCommand({ command: 'reload-otel-config' });
return res.json((0, otel_mapper_1.toOtelSettingsResponse)(settingsService.getSettings()));
},
],
testOtelTrace: [
(0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'otel:manage' }),
async (req, res) => {
const payload = api_types_1.TestOtelTraceDto.safeParse(req.body);
if (!payload.success) {
throw new bad_request_error_1.BadRequestError(payload.error.errors[0]?.message ?? 'Invalid request body');
}
const settingsService = di_1.Container.get(otel_settings_service_1.OtelSettingsService);
const connection = settingsService.resolveTestConnection(payload.data);
const result = await di_1.Container.get(otel_service_1.OtelService).sendTestTrace(connection);
return res.json(result);
},
],
};
module.exports = otelHandlers;
//# sourceMappingURL=otel.handler.js.map