n8n 2.14.2 → 2.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstract-server.js +1 -1
- package/dist/abstract-server.js.map +1 -1
- package/dist/active-workflow-manager.js +25 -12
- package/dist/active-workflow-manager.js.map +1 -1
- package/dist/auth/auth.service.js +1 -0
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/commands/base-command.d.ts +1 -0
- package/dist/commands/base-command.js +15 -7
- package/dist/commands/base-command.js.map +1 -1
- package/dist/commands/execute-batch.js +2 -0
- package/dist/commands/execute-batch.js.map +1 -1
- package/dist/commands/execute.js +2 -0
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/start.js +1 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/webhook.js +1 -0
- package/dist/commands/webhook.js.map +1 -1
- package/dist/commands/worker.js +1 -0
- package/dist/commands/worker.js.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/controllers/ai.controller.js +2 -2
- package/dist/controllers/ai.controller.js.map +1 -1
- package/dist/controllers/binary-data.controller.js +1 -1
- package/dist/controllers/binary-data.controller.js.map +1 -1
- package/dist/controllers/e2e.controller.js +2 -0
- package/dist/controllers/e2e.controller.js.map +1 -1
- package/dist/controllers/me.controller.d.ts +3 -1
- package/dist/controllers/me.controller.js +6 -3
- package/dist/controllers/me.controller.js.map +1 -1
- package/dist/controllers/project.controller.d.ts +2 -0
- package/dist/credentials/credentials.controller.js +1 -1
- package/dist/credentials/credentials.controller.js.map +1 -1
- package/dist/credentials/credentials.service.d.ts +7 -4
- package/dist/credentials/credentials.service.js +78 -17
- package/dist/credentials/credentials.service.js.map +1 -1
- package/dist/credentials-helper.js +7 -1
- package/dist/credentials-helper.js.map +1 -1
- package/dist/errors/http-error-classifier.d.ts +31 -0
- package/dist/errors/http-error-classifier.js +60 -0
- package/dist/errors/http-error-classifier.js.map +1 -0
- package/dist/errors/http-error-serializers.d.ts +18 -0
- package/dist/errors/http-error-serializers.js +64 -0
- package/dist/errors/http-error-serializers.js.map +1 -0
- package/dist/eventbus/event-message-classes/index.d.ts +2 -2
- package/dist/eventbus/event-message-classes/index.js +3 -0
- package/dist/eventbus/event-message-classes/index.js.map +1 -1
- package/dist/events/maps/relay.event-map.d.ts +22 -0
- package/dist/events/relays/log-streaming.event-relay.d.ts +3 -0
- package/dist/events/relays/log-streaming.event-relay.js +21 -0
- package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js +11 -8
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
- package/dist/executions/execution-persistence.d.ts +4 -1
- package/dist/executions/execution-persistence.js +16 -2
- package/dist/executions/execution-persistence.js.map +1 -1
- package/dist/executions/execution.service.js +2 -1
- package/dist/executions/execution.service.js.map +1 -1
- package/dist/executions/executions.controller.d.ts +3 -5
- package/dist/executions/executions.controller.js +17 -9
- package/dist/executions/executions.controller.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-workflow.service.d.ts +1 -0
- package/dist/modules/chat-hub/chat-hub-workflow.service.js +18 -2
- package/dist/modules/chat-hub/chat-hub-workflow.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.types.d.ts +5 -0
- package/dist/modules/chat-hub/chat-hub.types.js +1 -0
- package/dist/modules/chat-hub/chat-hub.types.js.map +1 -1
- package/dist/modules/chat-hub/context-limits.js +10 -0
- package/dist/modules/chat-hub/context-limits.js.map +1 -1
- package/dist/modules/community-packages/community-node-types-utils.d.ts +2 -2
- package/dist/modules/community-packages/community-node-types-utils.js +4 -4
- package/dist/modules/community-packages/community-node-types-utils.js.map +1 -1
- package/dist/modules/community-packages/community-packages.controller.d.ts +6 -19
- package/dist/modules/community-packages/community-packages.controller.js +8 -231
- package/dist/modules/community-packages/community-packages.controller.js.map +1 -1
- package/dist/modules/community-packages/community-packages.lifecycle.service.d.ts +32 -0
- package/dist/modules/community-packages/community-packages.lifecycle.service.js +282 -0
- package/dist/modules/community-packages/community-packages.lifecycle.service.js.map +1 -0
- package/dist/modules/community-packages/community-packages.service.js +8 -8
- package/dist/modules/community-packages/community-packages.service.js.map +1 -1
- package/dist/modules/community-packages/npm-utils.d.ts +4 -0
- package/dist/modules/community-packages/npm-utils.js +4 -0
- package/dist/modules/community-packages/npm-utils.js.map +1 -1
- package/dist/modules/community-packages/strapi-utils.d.ts +1 -1
- package/dist/modules/data-table/data-table-proxy.service.d.ts +44 -2
- package/dist/modules/data-table/data-table-proxy.service.js +86 -2
- package/dist/modules/data-table/data-table-proxy.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/index.d.ts +1 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/index.js +1 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/index.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/slack-signature-extractor.d.ts +11 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/slack-signature-extractor.js +88 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/slack-signature-extractor.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/slack-signature-identifier.d.ts +28 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/slack-signature-identifier.js +158 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/slack-signature-identifier.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/index.d.ts +1 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/index.js +1 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/index.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/slack-credential-resolver.d.ts +50 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/slack-credential-resolver.js +118 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/slack-credential-resolver.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/services/resolver-config-expression.service.js +10 -4
- package/dist/modules/dynamic-credentials.ee/services/resolver-config-expression.service.js.map +1 -1
- package/dist/modules/instance-ai/compaction.service.d.ts +19 -0
- package/dist/modules/instance-ai/compaction.service.js +213 -0
- package/dist/modules/instance-ai/compaction.service.js.map +1 -0
- package/dist/modules/instance-ai/entities/index.d.ts +7 -0
- package/dist/modules/instance-ai/entities/index.js +18 -0
- package/dist/modules/instance-ai/entities/index.js.map +1 -0
- package/dist/modules/instance-ai/entities/instance-ai-iteration-log.entity.d.ts +7 -0
- package/dist/modules/instance-ai/entities/instance-ai-iteration-log.entity.js +38 -0
- package/dist/modules/instance-ai/entities/instance-ai-iteration-log.entity.js.map +1 -0
- package/dist/modules/instance-ai/entities/instance-ai-message.entity.d.ts +9 -0
- package/dist/modules/instance-ai/entities/instance-ai-message.entity.js +47 -0
- package/dist/modules/instance-ai/entities/instance-ai-message.entity.js.map +1 -0
- package/dist/modules/instance-ai/entities/instance-ai-observational-memory.entity.d.ts +33 -0
- package/dist/modules/instance-ai/entities/instance-ai-observational-memory.entity.js +145 -0
- package/dist/modules/instance-ai/entities/instance-ai-observational-memory.entity.js.map +1 -0
- package/dist/modules/instance-ai/entities/instance-ai-resource.entity.d.ts +6 -0
- package/dist/modules/instance-ai/entities/instance-ai-resource.entity.js +33 -0
- package/dist/modules/instance-ai/entities/instance-ai-resource.entity.js.map +1 -0
- package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.d.ts +8 -0
- package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.js +43 -0
- package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.js.map +1 -0
- package/dist/modules/instance-ai/entities/instance-ai-thread.entity.d.ts +7 -0
- package/dist/modules/instance-ai/entities/instance-ai-thread.entity.js +38 -0
- package/dist/modules/instance-ai/entities/instance-ai-thread.entity.js.map +1 -0
- package/dist/modules/instance-ai/entities/instance-ai-workflow-snapshot.entity.d.ts +8 -0
- package/dist/modules/instance-ai/entities/instance-ai-workflow-snapshot.entity.js +41 -0
- package/dist/modules/instance-ai/entities/instance-ai-workflow-snapshot.entity.js.map +1 -0
- package/dist/modules/instance-ai/event-bus/in-process-event-bus.d.ts +19 -0
- package/dist/modules/instance-ai/event-bus/in-process-event-bus.js +98 -0
- package/dist/modules/instance-ai/event-bus/in-process-event-bus.js.map +1 -0
- package/dist/modules/instance-ai/filesystem/index.d.ts +4 -0
- package/dist/modules/instance-ai/filesystem/index.js +10 -0
- package/dist/modules/instance-ai/filesystem/index.js.map +1 -0
- package/dist/modules/instance-ai/filesystem/local-fs-provider.d.ts +26 -0
- package/dist/modules/instance-ai/filesystem/local-fs-provider.js +321 -0
- package/dist/modules/instance-ai/filesystem/local-fs-provider.js.map +1 -0
- package/dist/modules/instance-ai/filesystem/local-gateway-registry.d.ts +29 -0
- package/dist/modules/instance-ai/filesystem/local-gateway-registry.js +137 -0
- package/dist/modules/instance-ai/filesystem/local-gateway-registry.js.map +1 -0
- package/dist/modules/instance-ai/filesystem/local-gateway.d.ts +35 -0
- package/dist/modules/instance-ai/filesystem/local-gateway.js +99 -0
- package/dist/modules/instance-ai/filesystem/local-gateway.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai-memory.service.d.ts +36 -0
- package/dist/modules/instance-ai/instance-ai-memory.service.js +265 -0
- package/dist/modules/instance-ai/instance-ai-memory.service.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +55 -0
- package/dist/modules/instance-ai/instance-ai-settings.service.js +430 -0
- package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +86 -0
- package/dist/modules/instance-ai/instance-ai.adapter.service.js +1731 -0
- package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai.controller.d.ts +102 -0
- package/dist/modules/instance-ai/instance-ai.controller.js +613 -0
- package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai.module.d.ts +13 -0
- package/dist/modules/instance-ai/instance-ai.module.js +119 -0
- package/dist/modules/instance-ai/instance-ai.module.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai.service.d.ts +132 -0
- package/dist/modules/instance-ai/instance-ai.service.js +1674 -0
- package/dist/modules/instance-ai/instance-ai.service.js.map +1 -0
- package/dist/modules/instance-ai/internal-messages.d.ts +2 -0
- package/dist/modules/instance-ai/internal-messages.js +11 -0
- package/dist/modules/instance-ai/internal-messages.js.map +1 -0
- package/dist/modules/instance-ai/message-parser.d.ts +12 -0
- package/dist/modules/instance-ai/message-parser.js +171 -0
- package/dist/modules/instance-ai/message-parser.js.map +1 -0
- package/dist/modules/instance-ai/node-definition-resolver.d.ts +19 -0
- package/dist/modules/instance-ai/node-definition-resolver.js +290 -0
- package/dist/modules/instance-ai/node-definition-resolver.js.map +1 -0
- package/dist/modules/instance-ai/repositories/index.d.ts +7 -0
- package/dist/modules/instance-ai/repositories/index.js +18 -0
- package/dist/modules/instance-ai/repositories/index.js.map +1 -0
- package/dist/modules/instance-ai/repositories/instance-ai-iteration-log.repository.d.ts +5 -0
- package/dist/modules/instance-ai/repositories/instance-ai-iteration-log.repository.js +26 -0
- package/dist/modules/instance-ai/repositories/instance-ai-iteration-log.repository.js.map +1 -0
- package/dist/modules/instance-ai/repositories/instance-ai-message.repository.d.ts +5 -0
- package/dist/modules/instance-ai/repositories/instance-ai-message.repository.js +26 -0
- package/dist/modules/instance-ai/repositories/instance-ai-message.repository.js.map +1 -0
- package/dist/modules/instance-ai/repositories/instance-ai-observational-memory.repository.d.ts +5 -0
- package/dist/modules/instance-ai/repositories/instance-ai-observational-memory.repository.js +26 -0
- package/dist/modules/instance-ai/repositories/instance-ai-observational-memory.repository.js.map +1 -0
- package/dist/modules/instance-ai/repositories/instance-ai-resource.repository.d.ts +5 -0
- package/dist/modules/instance-ai/repositories/instance-ai-resource.repository.js +26 -0
- package/dist/modules/instance-ai/repositories/instance-ai-resource.repository.js.map +1 -0
- package/dist/modules/instance-ai/repositories/instance-ai-run-snapshot.repository.d.ts +5 -0
- package/dist/modules/instance-ai/repositories/instance-ai-run-snapshot.repository.js +26 -0
- package/dist/modules/instance-ai/repositories/instance-ai-run-snapshot.repository.js.map +1 -0
- package/dist/modules/instance-ai/repositories/instance-ai-thread.repository.d.ts +5 -0
- package/dist/modules/instance-ai/repositories/instance-ai-thread.repository.js +26 -0
- package/dist/modules/instance-ai/repositories/instance-ai-thread.repository.js.map +1 -0
- package/dist/modules/instance-ai/repositories/instance-ai-workflow-snapshot.repository.d.ts +5 -0
- package/dist/modules/instance-ai/repositories/instance-ai-workflow-snapshot.repository.js +26 -0
- package/dist/modules/instance-ai/repositories/instance-ai-workflow-snapshot.repository.js.map +1 -0
- package/dist/modules/instance-ai/snapshot-pruning.service.d.ts +14 -0
- package/dist/modules/instance-ai/snapshot-pruning.service.js +77 -0
- package/dist/modules/instance-ai/snapshot-pruning.service.js.map +1 -0
- package/dist/modules/instance-ai/storage/db-iteration-log-storage.d.ts +9 -0
- package/dist/modules/instance-ai/storage/db-iteration-log-storage.js +45 -0
- package/dist/modules/instance-ai/storage/db-iteration-log-storage.js.map +1 -0
- package/dist/modules/instance-ai/storage/db-snapshot-storage.d.ts +10 -0
- package/dist/modules/instance-ai/storage/db-snapshot-storage.js +74 -0
- package/dist/modules/instance-ai/storage/db-snapshot-storage.js.map +1 -0
- package/dist/modules/instance-ai/storage/index.d.ts +5 -0
- package/dist/modules/instance-ai/storage/index.js +14 -0
- package/dist/modules/instance-ai/storage/index.js.map +1 -0
- package/dist/modules/instance-ai/storage/typeorm-composite-store.d.ts +9 -0
- package/dist/modules/instance-ai/storage/typeorm-composite-store.js +33 -0
- package/dist/modules/instance-ai/storage/typeorm-composite-store.js.map +1 -0
- package/dist/modules/instance-ai/storage/typeorm-memory-storage.d.ts +96 -0
- package/dist/modules/instance-ai/storage/typeorm-memory-storage.js +853 -0
- package/dist/modules/instance-ai/storage/typeorm-memory-storage.js.map +1 -0
- package/dist/modules/instance-ai/storage/typeorm-workflows-storage.d.ts +44 -0
- package/dist/modules/instance-ai/storage/typeorm-workflows-storage.js +156 -0
- package/dist/modules/instance-ai/storage/typeorm-workflows-storage.js.map +1 -0
- package/dist/modules/instance-ai/web-research/brave-search.d.ts +10 -0
- package/dist/modules/instance-ai/web-research/brave-search.js +43 -0
- package/dist/modules/instance-ai/web-research/brave-search.js.map +1 -0
- package/dist/modules/instance-ai/web-research/cache.d.ts +13 -0
- package/dist/modules/instance-ai/web-research/cache.js +43 -0
- package/dist/modules/instance-ai/web-research/cache.js.map +1 -0
- package/dist/modules/instance-ai/web-research/fetch-and-extract.d.ts +8 -0
- package/dist/modules/instance-ai/web-research/fetch-and-extract.js +231 -0
- package/dist/modules/instance-ai/web-research/fetch-and-extract.js.map +1 -0
- package/dist/modules/instance-ai/web-research/index.d.ts +7 -0
- package/dist/modules/instance-ai/web-research/index.js +16 -0
- package/dist/modules/instance-ai/web-research/index.js.map +1 -0
- package/dist/modules/instance-ai/web-research/searxng-search.d.ts +6 -0
- package/dist/modules/instance-ai/web-research/searxng-search.js +39 -0
- package/dist/modules/instance-ai/web-research/searxng-search.js.map +1 -0
- package/dist/modules/instance-ai/web-research/ssrf-guard.d.ts +1 -0
- package/dist/modules/instance-ai/web-research/ssrf-guard.js +85 -0
- package/dist/modules/instance-ai/web-research/ssrf-guard.js.map +1 -0
- package/dist/modules/instance-ai/web-research/summarize-content.d.ts +4 -0
- package/dist/modules/instance-ai/web-research/summarize-content.js +34 -0
- package/dist/modules/instance-ai/web-research/summarize-content.js.map +1 -0
- package/dist/modules/instance-registry/instance-registry.types.d.ts +1 -0
- package/dist/modules/instance-registry/instance-registry.types.js +2 -1
- package/dist/modules/instance-registry/instance-registry.types.js.map +1 -1
- package/dist/modules/instance-registry/storage/instance-storage.interface.d.ts +1 -0
- package/dist/modules/instance-registry/storage/lua-scripts.d.ts +4 -0
- package/dist/modules/instance-registry/storage/lua-scripts.js +39 -0
- package/dist/modules/instance-registry/storage/lua-scripts.js.map +1 -0
- package/dist/modules/instance-registry/storage/memory-storage.d.ts +16 -0
- package/dist/modules/instance-registry/storage/memory-storage.js +42 -0
- package/dist/modules/instance-registry/storage/memory-storage.js.map +1 -0
- package/dist/modules/instance-registry/storage/redis-instance-storage.d.ts +25 -0
- package/dist/modules/instance-registry/storage/redis-instance-storage.js +185 -0
- package/dist/modules/instance-registry/storage/redis-instance-storage.js.map +1 -0
- package/dist/modules/log-streaming.ee/log-streaming.controller.js.map +1 -1
- package/dist/modules/mcp/mcp-oauth-service.d.ts +1 -1
- package/dist/modules/mcp/mcp-oauth-service.js +5 -1
- package/dist/modules/mcp/mcp-oauth-service.js.map +1 -1
- package/dist/modules/mcp/mcp.errors.js +1 -1
- package/dist/modules/mcp/mcp.oauth-clients.controller.js +1 -1
- package/dist/modules/mcp/mcp.oauth-clients.controller.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +5 -1
- package/dist/modules/mcp/mcp.service.js +33 -5
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/mcp.types.d.ts +1 -1
- package/dist/modules/mcp/tools/data-table/add-data-table-column.tool.d.ts +13 -0
- package/dist/modules/mcp/tools/data-table/add-data-table-column.tool.js +69 -0
- package/dist/modules/mcp/tools/data-table/add-data-table-column.tool.js.map +1 -0
- package/dist/modules/mcp/tools/data-table/add-data-table-rows.tool.d.ts +12 -0
- package/dist/modules/mcp/tools/data-table/add-data-table-rows.tool.js +77 -0
- package/dist/modules/mcp/tools/data-table/add-data-table-rows.tool.js.map +1 -0
- package/dist/modules/mcp/tools/data-table/create-data-table.tool.d.ts +21 -0
- package/dist/modules/mcp/tools/data-table/create-data-table.tool.js +92 -0
- package/dist/modules/mcp/tools/data-table/create-data-table.tool.js.map +1 -0
- package/dist/modules/mcp/tools/data-table/delete-data-table-column.tool.d.ts +12 -0
- package/dist/modules/mcp/tools/data-table/delete-data-table-column.tool.js +60 -0
- package/dist/modules/mcp/tools/data-table/delete-data-table-column.tool.js.map +1 -0
- package/dist/modules/mcp/tools/data-table/index.d.ts +7 -0
- package/dist/modules/mcp/tools/data-table/index.js +18 -0
- package/dist/modules/mcp/tools/data-table/index.js.map +1 -0
- package/dist/modules/mcp/tools/data-table/rename-data-table-column.tool.d.ts +13 -0
- package/dist/modules/mcp/tools/data-table/rename-data-table-column.tool.js +70 -0
- package/dist/modules/mcp/tools/data-table/rename-data-table-column.tool.js.map +1 -0
- package/dist/modules/mcp/tools/data-table/rename-data-table.tool.d.ts +12 -0
- package/dist/modules/mcp/tools/data-table/rename-data-table.tool.js +60 -0
- package/dist/modules/mcp/tools/data-table/rename-data-table.tool.js.map +1 -0
- package/dist/modules/mcp/tools/data-table/search-data-tables.tool.d.ts +12 -0
- package/dist/modules/mcp/tools/data-table/search-data-tables.tool.js +93 -0
- package/dist/modules/mcp/tools/data-table/search-data-tables.tool.js.map +1 -0
- package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +3 -4
- package/dist/modules/mcp/tools/execute-workflow.tool.js +15 -66
- package/dist/modules/mcp/tools/execute-workflow.tool.js.map +1 -1
- package/dist/modules/mcp/tools/execution-utils.d.ts +5 -0
- package/dist/modules/mcp/tools/execution-utils.js +45 -0
- package/dist/modules/mcp/tools/execution-utils.js.map +1 -0
- package/dist/modules/mcp/tools/get-execution.tool.js +4 -8
- package/dist/modules/mcp/tools/get-execution.tool.js.map +1 -1
- package/dist/modules/mcp/tools/prepare-workflow-pin-data.tool.d.ts +31 -0
- package/dist/modules/mcp/tools/prepare-workflow-pin-data.tool.js +165 -0
- package/dist/modules/mcp/tools/prepare-workflow-pin-data.tool.js.map +1 -0
- package/dist/modules/mcp/tools/schemas.d.ts +73 -2
- package/dist/modules/mcp/tools/schemas.js +41 -1
- package/dist/modules/mcp/tools/schemas.js.map +1 -1
- package/dist/modules/mcp/tools/search-folders.tool.js +2 -7
- package/dist/modules/mcp/tools/search-folders.tool.js.map +1 -1
- package/dist/modules/mcp/tools/search-projects.tool.js +2 -7
- package/dist/modules/mcp/tools/search-projects.tool.js.map +1 -1
- package/dist/modules/mcp/tools/search-workflows.tool.js +2 -7
- package/dist/modules/mcp/tools/search-workflows.tool.js.map +1 -1
- package/dist/modules/mcp/tools/test-workflow.tool.d.ts +31 -0
- package/dist/modules/mcp/tools/test-workflow.tool.js +178 -0
- package/dist/modules/mcp/tools/test-workflow.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +1 -0
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/credentials-auto-assign.d.ts +2 -1
- package/dist/modules/mcp/tools/workflow-builder/credentials-auto-assign.js +15 -0
- package/dist/modules/mcp/tools/workflow-builder/credentials-auto-assign.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/get-suggested-workflow-nodes.tool.js +1 -37
- package/dist/modules/mcp/tools/workflow-builder/get-suggested-workflow-nodes.tool.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.js +1 -37
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/search-workflow-nodes.tool.js +1 -37
- package/dist/modules/mcp/tools/workflow-builder/search-workflow-nodes.tool.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js +1 -0
- package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.d.ts +17 -0
- package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.js +48 -0
- package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.js.map +1 -1
- package/dist/modules/otel/handlers/interfaces.d.ts +5 -0
- package/dist/modules/otel/handlers/interfaces.js +3 -0
- package/dist/modules/otel/handlers/interfaces.js.map +1 -0
- package/dist/modules/otel/handlers/node-end.handler.d.ts +8 -0
- package/dist/modules/otel/handlers/node-end.handler.js +71 -0
- package/dist/modules/otel/handlers/node-end.handler.js.map +1 -0
- package/dist/modules/otel/handlers/node-start.handler.d.ts +7 -0
- package/dist/modules/otel/handlers/node-start.handler.js +37 -0
- package/dist/modules/otel/handlers/node-start.handler.js.map +1 -0
- package/dist/modules/otel/handlers/workflow-end.handler.d.ts +8 -0
- package/dist/modules/otel/handlers/workflow-end.handler.js +73 -0
- package/dist/modules/otel/handlers/workflow-end.handler.js.map +1 -0
- package/dist/modules/otel/handlers/workflow-start.handler.d.ts +7 -0
- package/dist/modules/otel/handlers/workflow-start.handler.js +29 -0
- package/dist/modules/otel/handlers/workflow-start.handler.js.map +1 -0
- package/dist/modules/otel/n8n-instrumentation.d.ts +21 -0
- package/dist/modules/otel/n8n-instrumentation.js +103 -0
- package/dist/modules/otel/n8n-instrumentation.js.map +1 -0
- package/dist/modules/otel/otel.config.d.ts +10 -0
- package/dist/modules/otel/otel.config.js +62 -0
- package/dist/modules/otel/otel.config.js.map +1 -0
- package/dist/modules/otel/otel.constants.d.ts +22 -0
- package/dist/modules/otel/otel.constants.js +27 -0
- package/dist/modules/otel/otel.constants.js.map +1 -0
- package/dist/modules/otel/otel.module.d.ts +5 -0
- package/dist/modules/otel/otel.module.js +80 -0
- package/dist/modules/otel/otel.module.js.map +1 -0
- package/dist/modules/otel/otel.service.d.ts +18 -0
- package/dist/modules/otel/otel.service.js +120 -0
- package/dist/modules/otel/otel.service.js.map +1 -0
- package/dist/modules/otel/span-registry.d.ts +14 -0
- package/dist/modules/otel/span-registry.js +58 -0
- package/dist/modules/otel/span-registry.js.map +1 -0
- package/dist/modules/provisioning.ee/provisioning.module.js +1 -0
- package/dist/modules/provisioning.ee/provisioning.module.js.map +1 -1
- package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +13 -2
- package/dist/modules/provisioning.ee/provisioning.service.ee.js +145 -2
- package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
- package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.d.ts +18 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js +105 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js.map +1 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.d.ts +34 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js +221 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js.map +1 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.validation.d.ts +3 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.validation.js +29 -0
- package/dist/modules/provisioning.ee/role-mapping-rule.validation.js.map +1 -0
- package/dist/modules/redaction/executions/execution-redaction.service.d.ts +3 -2
- package/dist/modules/redaction/executions/execution-redaction.service.js +5 -1
- package/dist/modules/redaction/executions/execution-redaction.service.js.map +1 -1
- package/dist/modules/redaction/redaction.module.js +0 -6
- package/dist/modules/redaction/redaction.module.js.map +1 -1
- package/dist/modules/source-control.ee/source-control-import.service.ee.js +6 -0
- package/dist/modules/source-control.ee/source-control-import.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/types/source-control-preferences.js +3 -0
- package/dist/modules/source-control.ee/types/source-control-preferences.js.map +1 -1
- package/dist/modules/sso-oidc/oidc.controller.ee.d.ts +4 -1
- package/dist/modules/sso-oidc/oidc.controller.ee.js +39 -3
- package/dist/modules/sso-oidc/oidc.controller.ee.js.map +1 -1
- package/dist/modules/sso-oidc/oidc.service.ee.d.ts +14 -2
- package/dist/modules/sso-oidc/oidc.service.ee.js +86 -8
- package/dist/modules/sso-oidc/oidc.service.ee.js.map +1 -1
- package/dist/modules/sso-oidc/views/oidc-test-result.d.ts +5 -0
- package/dist/modules/sso-oidc/views/oidc-test-result.js +58 -0
- package/dist/modules/sso-oidc/views/oidc-test-result.js.map +1 -0
- package/dist/modules/sso-saml/saml-helpers.d.ts +1 -0
- package/dist/modules/sso-saml/saml-helpers.js +2 -0
- package/dist/modules/sso-saml/saml-helpers.js.map +1 -1
- package/dist/modules/sso-saml/saml.service.ee.d.ts +4 -1
- package/dist/modules/sso-saml/saml.service.ee.js +13 -7
- package/dist/modules/sso-saml/saml.service.ee.js.map +1 -1
- package/dist/modules/token-exchange/controllers/embed-auth.controller.d.ts +15 -0
- package/dist/modules/token-exchange/controllers/embed-auth.controller.js +67 -0
- package/dist/modules/token-exchange/controllers/embed-auth.controller.js.map +1 -0
- package/dist/modules/token-exchange/database/entities/token-exchange-jti.entity.d.ts +5 -0
- package/dist/modules/token-exchange/database/entities/token-exchange-jti.entity.js +33 -0
- package/dist/modules/token-exchange/database/entities/token-exchange-jti.entity.js.map +1 -0
- package/dist/modules/token-exchange/database/repositories/token-exchange-jti.repository.d.ts +10 -0
- package/dist/modules/token-exchange/database/repositories/token-exchange-jti.repository.js +106 -0
- package/dist/modules/token-exchange/database/repositories/token-exchange-jti.repository.js.map +1 -0
- package/dist/modules/token-exchange/services/identity-resolution.service.d.ts +5 -0
- package/dist/modules/token-exchange/services/identity-resolution.service.js +21 -0
- package/dist/modules/token-exchange/services/identity-resolution.service.js.map +1 -0
- package/dist/modules/token-exchange/services/jti-cleanup.service.d.ts +18 -0
- package/dist/modules/token-exchange/services/jti-cleanup.service.js +90 -0
- package/dist/modules/token-exchange/services/jti-cleanup.service.js.map +1 -0
- package/dist/modules/token-exchange/services/jti-store.service.d.ts +6 -0
- package/dist/modules/token-exchange/services/jti-store.service.js +30 -0
- package/dist/modules/token-exchange/services/jti-store.service.js.map +1 -0
- package/dist/modules/token-exchange/services/token-exchange.service.d.ts +17 -0
- package/dist/modules/token-exchange/services/token-exchange.service.js +93 -0
- package/dist/modules/token-exchange/services/token-exchange.service.js.map +1 -0
- package/dist/modules/token-exchange/services/trusted-key.service.d.ts +13 -0
- package/dist/modules/token-exchange/services/trusted-key.service.js +123 -0
- package/dist/modules/token-exchange/services/trusted-key.service.js.map +1 -0
- package/dist/modules/token-exchange/token-exchange.config.d.ts +7 -0
- package/dist/modules/token-exchange/token-exchange.config.js +47 -0
- package/dist/modules/token-exchange/token-exchange.config.js.map +1 -0
- package/dist/modules/token-exchange/token-exchange.controller.d.ts +9 -0
- package/dist/modules/token-exchange/token-exchange.controller.js +103 -0
- package/dist/modules/token-exchange/token-exchange.controller.js.map +1 -0
- package/dist/modules/token-exchange/token-exchange.module.d.ts +5 -0
- package/dist/modules/token-exchange/token-exchange.module.js +74 -0
- package/dist/modules/token-exchange/token-exchange.module.js.map +1 -0
- package/dist/modules/token-exchange/token-exchange.schemas.d.ts +131 -0
- package/dist/modules/token-exchange/token-exchange.schemas.js +60 -0
- package/dist/modules/token-exchange/token-exchange.schemas.js.map +1 -0
- package/dist/modules/token-exchange/token-exchange.service.d.ts +9 -0
- package/dist/modules/token-exchange/token-exchange.service.js +66 -0
- package/dist/modules/token-exchange/token-exchange.service.js.map +1 -0
- package/dist/modules/token-exchange/token-exchange.types.d.ts +50 -0
- package/dist/modules/token-exchange/token-exchange.types.js +3 -0
- package/dist/modules/token-exchange/token-exchange.types.js.map +1 -0
- package/dist/modules/workflow-builder/workflow-builder-session.entity.d.ts +4 -0
- package/dist/modules/workflow-builder/workflow-builder-session.entity.js +8 -0
- package/dist/modules/workflow-builder/workflow-builder-session.entity.js.map +1 -1
- package/dist/modules/workflow-builder/workflow-builder-session.repository.js +14 -2
- package/dist/modules/workflow-builder/workflow-builder-session.repository.js.map +1 -1
- package/dist/modules/workflow-index/workflow-dependency-query.service.js +26 -3
- package/dist/modules/workflow-index/workflow-dependency-query.service.js.map +1 -1
- package/dist/modules/workflow-index/workflow-index.service.d.ts +1 -0
- package/dist/modules/workflow-index/workflow-index.service.js +15 -3
- package/dist/modules/workflow-index/workflow-index.service.js.map +1 -1
- package/dist/posthog/index.d.ts +1 -0
- package/dist/posthog/index.js +32 -8
- package/dist/posthog/index.js.map +1 -1
- package/dist/public-api/index.js +5 -5
- package/dist/public-api/index.js.map +1 -1
- package/dist/public-api/types.d.ts +17 -0
- package/dist/public-api/v1/handlers/community-packages/community-packages.handler.d.ts +18 -0
- package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js +71 -0
- package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js.map +1 -0
- package/dist/public-api/v1/handlers/community-packages/community-packages.mapper.d.ts +27 -0
- package/dist/public-api/v1/handlers/community-packages/community-packages.mapper.js +35 -0
- package/dist/public-api/v1/handlers/community-packages/community-packages.mapper.js.map +1 -0
- package/dist/public-api/v1/handlers/credentials/credentials.handler.js +6 -5
- package/dist/public-api/v1/handlers/credentials/credentials.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/credentials/credentials.service.d.ts +2 -2
- package/dist/public-api/v1/handlers/credentials/credentials.service.js +3 -6
- package/dist/public-api/v1/handlers/credentials/credentials.service.js.map +1 -1
- package/dist/public-api/v1/handlers/executions/executions.handler.js +48 -4
- package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/workflows/workflows.handler.d.ts +8 -0
- package/dist/public-api/v1/handlers/workflows/workflows.handler.js +44 -0
- package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
- package/dist/public-api/v1/openapi.yml +262 -3
- package/dist/public-api/v1/public-api-error-response.d.ts +2 -0
- package/dist/public-api/v1/public-api-error-response.js +11 -0
- package/dist/public-api/v1/public-api-error-response.js.map +1 -0
- package/dist/push/abstract.push.d.ts +1 -0
- package/dist/push/abstract.push.js +3 -0
- package/dist/push/abstract.push.js.map +1 -1
- package/dist/push/sse.push.js +5 -1
- package/dist/push/sse.push.js.map +1 -1
- package/dist/push/websocket.push.js +3 -1
- package/dist/push/websocket.push.js.map +1 -1
- package/dist/response-helper.js +6 -29
- package/dist/response-helper.js.map +1 -1
- package/dist/scaling/job-processor.js +3 -0
- package/dist/scaling/job-processor.js.map +1 -1
- package/dist/scaling/pubsub/subscriber.service.d.ts +2 -0
- package/dist/scaling/pubsub/subscriber.service.js +17 -8
- package/dist/scaling/pubsub/subscriber.service.js.map +1 -1
- package/dist/scaling/redis/redis.types.d.ts +1 -1
- package/dist/scaling/scaling.service.js +1 -2
- package/dist/scaling/scaling.service.js.map +1 -1
- package/dist/scaling/worker-server.js +1 -1
- package/dist/scaling/worker-server.js.map +1 -1
- package/dist/services/ai-workflow-builder.service.d.ts +2 -2
- package/dist/services/ai-workflow-builder.service.js +5 -8
- package/dist/services/ai-workflow-builder.service.js.map +1 -1
- package/dist/services/ai.service.d.ts +4 -0
- package/dist/services/ai.service.js +20 -18
- package/dist/services/ai.service.js.map +1 -1
- package/dist/services/auth-strategy.registry.d.ts +7 -0
- package/dist/services/auth-strategy.registry.js +32 -0
- package/dist/services/auth-strategy.registry.js.map +1 -0
- package/dist/services/auth-strategy.types.d.ts +4 -0
- package/dist/services/auth-strategy.types.js +3 -0
- package/dist/services/auth-strategy.types.js.map +1 -0
- package/dist/services/credentials-tester.service.js +2 -0
- package/dist/services/credentials-tester.service.js.map +1 -1
- package/dist/services/db-clock.service.d.ts +10 -0
- package/dist/services/db-clock.service.js +48 -0
- package/dist/services/db-clock.service.js.map +1 -0
- package/dist/services/frontend.service.js +4 -1
- package/dist/services/frontend.service.js.map +1 -1
- package/dist/utils/health-endpoint.util.d.ts +2 -1
- package/dist/utils/health-endpoint.util.js +11 -3
- package/dist/utils/health-endpoint.util.js.map +1 -1
- package/dist/wait-tracker.d.ts +6 -2
- package/dist/wait-tracker.js +94 -63
- package/dist/wait-tracker.js.map +1 -1
- package/dist/webhooks/live-webhooks.js +24 -18
- package/dist/webhooks/live-webhooks.js.map +1 -1
- package/dist/webhooks/test-webhooks.js +96 -78
- package/dist/webhooks/test-webhooks.js.map +1 -1
- package/dist/webhooks/waiting-forms.js +3 -1
- package/dist/webhooks/waiting-forms.js.map +1 -1
- package/dist/webhooks/waiting-webhooks.js +27 -21
- package/dist/webhooks/waiting-webhooks.js.map +1 -1
- package/dist/webhooks/webhook-helpers.js +21 -6
- package/dist/webhooks/webhook-helpers.js.map +1 -1
- package/dist/webhooks/webhook-last-node-response-extractor.d.ts +5 -2
- package/dist/webhooks/webhook-last-node-response-extractor.js +5 -8
- package/dist/webhooks/webhook-last-node-response-extractor.js.map +1 -1
- package/dist/webhooks/webhook-request-handler.js +1 -1
- package/dist/webhooks/webhook-request-handler.js.map +1 -1
- package/dist/workflows/workflow-creation.service.js +4 -0
- package/dist/workflows/workflow-creation.service.js.map +1 -1
- package/dist/workflows/workflow-execution.service.js +1 -1
- package/dist/workflows/workflow-execution.service.js.map +1 -1
- package/dist/workflows/workflow-history/workflow-history.service.js +1 -0
- package/dist/workflows/workflow-history/workflow-history.service.js.map +1 -1
- package/dist/workflows/workflow-validation.service.js +3 -3
- package/dist/workflows/workflow-validation.service.js.map +1 -1
- package/dist/workflows/workflow.service.d.ts +6 -1
- package/dist/workflows/workflow.service.js +34 -7
- package/dist/workflows/workflow.service.js.map +1 -1
- package/dist/workflows/workflows.controller.d.ts +2 -2
- package/package.json +39 -29
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const ATTR: {
|
|
2
|
+
readonly OTEL_SERVICE_NAME: "service.name";
|
|
3
|
+
readonly OTEL_SERVICE_VERSION: "service.version";
|
|
4
|
+
readonly INSTANCE_ID: "n8n.instance.id";
|
|
5
|
+
readonly INSTANCE_ROLE: "n8n.instance.role";
|
|
6
|
+
readonly WORKFLOW_ID: "n8n.workflow.id";
|
|
7
|
+
readonly WORKFLOW_NAME: "n8n.workflow.name";
|
|
8
|
+
readonly WORKFLOW_NODE_COUNT: "n8n.workflow.node_count";
|
|
9
|
+
readonly EXECUTION_ID: "n8n.execution.id";
|
|
10
|
+
readonly EXECUTION_MODE: "n8n.execution.mode";
|
|
11
|
+
readonly EXECUTION_STATUS: "n8n.execution.status";
|
|
12
|
+
readonly EXECUTION_IS_RETRY: "n8n.execution.is_retry";
|
|
13
|
+
readonly EXECUTION_RETRY_OF: "n8n.execution.retry_of";
|
|
14
|
+
readonly EXECUTION_ERROR_TYPE: "n8n.execution.error_type";
|
|
15
|
+
readonly NODE_ID: "n8n.node.id";
|
|
16
|
+
readonly NODE_NAME: "n8n.node.name";
|
|
17
|
+
readonly NODE_TYPE: "n8n.node.type";
|
|
18
|
+
readonly NODE_TYPE_VERSION: "n8n.node.type_version";
|
|
19
|
+
readonly NODE_ITEMS_INPUT: "n8n.node.items.input";
|
|
20
|
+
readonly NODE_ITEMS_OUTPUT: "n8n.node.items.output";
|
|
21
|
+
readonly NODE_TERMINATION_REASON: "n8n.node.termination_reason";
|
|
22
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ATTR = void 0;
|
|
4
|
+
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
|
|
5
|
+
exports.ATTR = {
|
|
6
|
+
OTEL_SERVICE_NAME: semantic_conventions_1.ATTR_SERVICE_NAME,
|
|
7
|
+
OTEL_SERVICE_VERSION: semantic_conventions_1.ATTR_SERVICE_VERSION,
|
|
8
|
+
INSTANCE_ID: 'n8n.instance.id',
|
|
9
|
+
INSTANCE_ROLE: 'n8n.instance.role',
|
|
10
|
+
WORKFLOW_ID: 'n8n.workflow.id',
|
|
11
|
+
WORKFLOW_NAME: 'n8n.workflow.name',
|
|
12
|
+
WORKFLOW_NODE_COUNT: 'n8n.workflow.node_count',
|
|
13
|
+
EXECUTION_ID: 'n8n.execution.id',
|
|
14
|
+
EXECUTION_MODE: 'n8n.execution.mode',
|
|
15
|
+
EXECUTION_STATUS: 'n8n.execution.status',
|
|
16
|
+
EXECUTION_IS_RETRY: 'n8n.execution.is_retry',
|
|
17
|
+
EXECUTION_RETRY_OF: 'n8n.execution.retry_of',
|
|
18
|
+
EXECUTION_ERROR_TYPE: 'n8n.execution.error_type',
|
|
19
|
+
NODE_ID: 'n8n.node.id',
|
|
20
|
+
NODE_NAME: 'n8n.node.name',
|
|
21
|
+
NODE_TYPE: 'n8n.node.type',
|
|
22
|
+
NODE_TYPE_VERSION: 'n8n.node.type_version',
|
|
23
|
+
NODE_ITEMS_INPUT: 'n8n.node.items.input',
|
|
24
|
+
NODE_ITEMS_OUTPUT: 'n8n.node.items.output',
|
|
25
|
+
NODE_TERMINATION_REASON: 'n8n.node.termination_reason',
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=otel.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.constants.js","sourceRoot":"","sources":["../../../src/modules/otel/otel.constants.ts"],"names":[],"mappings":";;;AAAA,8EAA8F;AAEjF,QAAA,IAAI,GAAG;IACnB,iBAAiB,EAAE,wCAAiB;IACpC,oBAAoB,EAAE,2CAAoB;IAE1C,WAAW,EAAE,iBAAiB;IAC9B,aAAa,EAAE,mBAAmB;IAElC,WAAW,EAAE,iBAAiB;IAC9B,aAAa,EAAE,mBAAmB;IAClC,mBAAmB,EAAE,yBAAyB;IAE9C,YAAY,EAAE,kBAAkB;IAChC,cAAc,EAAE,oBAAoB;IACpC,gBAAgB,EAAE,sBAAsB;IACxC,kBAAkB,EAAE,wBAAwB;IAC5C,kBAAkB,EAAE,wBAAwB;IAC5C,oBAAoB,EAAE,0BAA0B;IAEhD,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,eAAe;IAC1B,iBAAiB,EAAE,uBAAuB;IAC1C,gBAAgB,EAAE,sBAAsB;IACxC,iBAAiB,EAAE,uBAAuB;IAC1C,uBAAuB,EAAE,6BAA6B;CAC7C,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.OtelModule = void 0;
|
|
46
|
+
const decorators_1 = require("@n8n/decorators");
|
|
47
|
+
const di_1 = require("@n8n/di");
|
|
48
|
+
let OtelModule = class OtelModule {
|
|
49
|
+
async init() {
|
|
50
|
+
const { OtelConfig } = await Promise.resolve().then(() => __importStar(require('./otel.config')));
|
|
51
|
+
const config = di_1.Container.get(OtelConfig);
|
|
52
|
+
if (!config.enabled)
|
|
53
|
+
return;
|
|
54
|
+
const { OtelService } = await Promise.resolve().then(() => __importStar(require('./otel.service')));
|
|
55
|
+
di_1.Container.get(OtelService).init();
|
|
56
|
+
await Promise.resolve().then(() => __importStar(require('./n8n-instrumentation')));
|
|
57
|
+
}
|
|
58
|
+
async shutdown() {
|
|
59
|
+
const { OtelConfig } = await Promise.resolve().then(() => __importStar(require('./otel.config')));
|
|
60
|
+
const config = di_1.Container.get(OtelConfig);
|
|
61
|
+
if (!config.enabled)
|
|
62
|
+
return;
|
|
63
|
+
const { OtelService } = await Promise.resolve().then(() => __importStar(require('./otel.service')));
|
|
64
|
+
await di_1.Container.get(OtelService).shutdown();
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
exports.OtelModule = OtelModule;
|
|
68
|
+
__decorate([
|
|
69
|
+
(0, decorators_1.OnShutdown)(),
|
|
70
|
+
__metadata("design:type", Function),
|
|
71
|
+
__metadata("design:paramtypes", []),
|
|
72
|
+
__metadata("design:returntype", Promise)
|
|
73
|
+
], OtelModule.prototype, "shutdown", null);
|
|
74
|
+
exports.OtelModule = OtelModule = __decorate([
|
|
75
|
+
(0, decorators_1.BackendModule)({
|
|
76
|
+
name: 'otel',
|
|
77
|
+
instanceTypes: ['main', 'worker', 'webhook'],
|
|
78
|
+
})
|
|
79
|
+
], OtelModule);
|
|
80
|
+
//# sourceMappingURL=otel.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.module.js","sourceRoot":"","sources":["../../../src/modules/otel/otel.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAA4D;AAC5D,gCAAoC;AAM7B,IAAM,UAAU,GAAhB,MAAM,UAAU;IACtB,KAAK,CAAC,IAAI;QACT,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QACrD,MAAM,MAAM,GAAG,cAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAE5B,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,gBAAgB,GAAC,CAAC;QACvD,cAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAGlC,wDAAa,uBAAuB,GAAC,CAAC;IACvC,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ;QACb,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QACrD,MAAM,MAAM,GAAG,cAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAE5B,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,gBAAgB,GAAC,CAAC;QACvD,MAAM,cAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;CACD,CAAA;AAtBY,gCAAU;AAchB;IADL,IAAA,uBAAU,GAAE;;;;0CAQZ;qBArBW,UAAU;IAJtB,IAAA,0BAAa,EAAC;QACd,IAAI,EAAE,MAAM;QACZ,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;KAC5C,CAAC;GACW,UAAU,CAsBtB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Logger } from '@n8n/backend-common';
|
|
2
|
+
import { InstanceSettings } from 'n8n-core';
|
|
3
|
+
import { OtelConfig } from './otel.config';
|
|
4
|
+
export declare class OtelService {
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly instanceSettings;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
private static isDiagnosticsLoggerConfigured;
|
|
9
|
+
private sdk?;
|
|
10
|
+
private hasLoggedStartupConnectivityFailure;
|
|
11
|
+
constructor(config: OtelConfig, instanceSettings: InstanceSettings, logger: Logger);
|
|
12
|
+
init(): void;
|
|
13
|
+
shutdown(): Promise<void>;
|
|
14
|
+
parseOtlpHeaders(headersToSplit: string): Record<string, string>;
|
|
15
|
+
private configureDiagnosticsLogger;
|
|
16
|
+
private buildOtlpTracesUrl;
|
|
17
|
+
private checkEndpointReachability;
|
|
18
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var OtelService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.OtelService = void 0;
|
|
14
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
15
|
+
const di_1 = require("@n8n/di");
|
|
16
|
+
const api_1 = require("@opentelemetry/api");
|
|
17
|
+
const exporter_trace_otlp_proto_1 = require("@opentelemetry/exporter-trace-otlp-proto");
|
|
18
|
+
const resources_1 = require("@opentelemetry/resources");
|
|
19
|
+
const sdk_node_1 = require("@opentelemetry/sdk-node");
|
|
20
|
+
const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
|
|
21
|
+
const n8n_core_1 = require("n8n-core");
|
|
22
|
+
const constants_1 = require("../../constants");
|
|
23
|
+
const otel_config_1 = require("./otel.config");
|
|
24
|
+
const otel_constants_1 = require("./otel.constants");
|
|
25
|
+
let OtelService = OtelService_1 = class OtelService {
|
|
26
|
+
constructor(config, instanceSettings, logger) {
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.instanceSettings = instanceSettings;
|
|
29
|
+
this.logger = logger;
|
|
30
|
+
this.hasLoggedStartupConnectivityFailure = false;
|
|
31
|
+
}
|
|
32
|
+
init() {
|
|
33
|
+
if (!this.config.enabled)
|
|
34
|
+
return;
|
|
35
|
+
this.configureDiagnosticsLogger();
|
|
36
|
+
const otlpTracesUrl = this.buildOtlpTracesUrl(this.config.exporterEndpoint, this.config.exporterTracingPath);
|
|
37
|
+
const otlpHeaders = this.parseOtlpHeaders(this.config.exporterHeaders);
|
|
38
|
+
this.sdk = new sdk_node_1.NodeSDK({
|
|
39
|
+
resource: (0, resources_1.resourceFromAttributes)({
|
|
40
|
+
[otel_constants_1.ATTR.OTEL_SERVICE_NAME]: this.config.exporterServiceName,
|
|
41
|
+
[otel_constants_1.ATTR.OTEL_SERVICE_VERSION]: constants_1.N8N_VERSION,
|
|
42
|
+
[otel_constants_1.ATTR.INSTANCE_ID]: this.instanceSettings.instanceId,
|
|
43
|
+
[otel_constants_1.ATTR.INSTANCE_ROLE]: this.instanceSettings.instanceType,
|
|
44
|
+
}),
|
|
45
|
+
traceExporter: new exporter_trace_otlp_proto_1.OTLPTraceExporter({
|
|
46
|
+
url: otlpTracesUrl,
|
|
47
|
+
headers: otlpHeaders,
|
|
48
|
+
}),
|
|
49
|
+
sampler: new sdk_trace_node_1.TraceIdRatioBasedSampler(this.config.tracesSampleRate),
|
|
50
|
+
});
|
|
51
|
+
this.sdk.start();
|
|
52
|
+
void this.checkEndpointReachability(otlpTracesUrl);
|
|
53
|
+
}
|
|
54
|
+
async shutdown() {
|
|
55
|
+
await this.sdk?.shutdown();
|
|
56
|
+
}
|
|
57
|
+
parseOtlpHeaders(headersToSplit) {
|
|
58
|
+
const headers = {};
|
|
59
|
+
for (const pair of headersToSplit.split(',')) {
|
|
60
|
+
const trimmedPair = pair.trim();
|
|
61
|
+
if (!trimmedPair)
|
|
62
|
+
continue;
|
|
63
|
+
if (!trimmedPair.includes('=')) {
|
|
64
|
+
this.logger.warn(`Skipping invalid OTEL exporter header "${trimmedPair}": missing "=" separator. Expected format: "key=value".`);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const [key, ...rest] = trimmedPair.split('=');
|
|
68
|
+
const trimmedKey = key.trim();
|
|
69
|
+
if (!trimmedKey) {
|
|
70
|
+
this.logger.warn(`Skipping invalid OTEL exporter header "${trimmedPair}": empty key. Expected format: "key=value".`);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
headers[trimmedKey] = rest.join('=').trim();
|
|
74
|
+
}
|
|
75
|
+
return headers;
|
|
76
|
+
}
|
|
77
|
+
configureDiagnosticsLogger() {
|
|
78
|
+
if (OtelService_1.isDiagnosticsLoggerConfigured)
|
|
79
|
+
return;
|
|
80
|
+
const diagnosticsLogger = {
|
|
81
|
+
error: (...args) => this.logger.error('OpenTelemetry diagnostics error', { args }),
|
|
82
|
+
warn: (...args) => this.logger.warn('OpenTelemetry diagnostics warning', { args }),
|
|
83
|
+
info: (...args) => this.logger.info('OpenTelemetry diagnostics info', { args }),
|
|
84
|
+
debug: (...args) => this.logger.debug('OpenTelemetry diagnostics debug', { args }),
|
|
85
|
+
verbose: (...args) => this.logger.debug('OpenTelemetry diagnostics verbose', { args }),
|
|
86
|
+
};
|
|
87
|
+
api_1.diag.setLogger(diagnosticsLogger, api_1.DiagLogLevel.WARN);
|
|
88
|
+
OtelService_1.isDiagnosticsLoggerConfigured = true;
|
|
89
|
+
}
|
|
90
|
+
buildOtlpTracesUrl(endpoint, path) {
|
|
91
|
+
const exporterEndpointWithoutTrailingSlash = endpoint.replace(/\/+$/, '');
|
|
92
|
+
return `${exporterEndpointWithoutTrailingSlash}${path}`;
|
|
93
|
+
}
|
|
94
|
+
async checkEndpointReachability(url) {
|
|
95
|
+
try {
|
|
96
|
+
await fetch(url, {
|
|
97
|
+
method: 'HEAD',
|
|
98
|
+
signal: AbortSignal.timeout(this.config.startupConnectivityTimeoutMs),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (this.hasLoggedStartupConnectivityFailure)
|
|
103
|
+
return;
|
|
104
|
+
this.hasLoggedStartupConnectivityFailure = true;
|
|
105
|
+
this.logger.error('Failed to connect to OpenTelemetry OTLP endpoint during startup', {
|
|
106
|
+
endpoint: url,
|
|
107
|
+
error: error instanceof Error ? error.message : String(error),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
exports.OtelService = OtelService;
|
|
113
|
+
OtelService.isDiagnosticsLoggerConfigured = false;
|
|
114
|
+
exports.OtelService = OtelService = OtelService_1 = __decorate([
|
|
115
|
+
(0, di_1.Service)(),
|
|
116
|
+
__metadata("design:paramtypes", [otel_config_1.OtelConfig,
|
|
117
|
+
n8n_core_1.InstanceSettings,
|
|
118
|
+
backend_common_1.Logger])
|
|
119
|
+
], OtelService);
|
|
120
|
+
//# sourceMappingURL=otel.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.service.js","sourceRoot":"","sources":["../../../src/modules/otel/otel.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Span } from '@opentelemetry/api';
|
|
2
|
+
export declare class SpanRegistry {
|
|
3
|
+
private spans;
|
|
4
|
+
static workflowKey(executionId: string): string;
|
|
5
|
+
static nodeKey(executionId: string, nodeId: string): string;
|
|
6
|
+
addWorkflow(executionId: string, span: Span): void;
|
|
7
|
+
getWorkflow(executionId: string): Span | undefined;
|
|
8
|
+
removeWorkflow(executionId: string): Span | undefined;
|
|
9
|
+
addNode(executionId: string, nodeId: string, span: Span): void;
|
|
10
|
+
getNode(executionId: string, nodeId: string): Span | undefined;
|
|
11
|
+
removeNode(executionId: string, nodeId: string): Span | undefined;
|
|
12
|
+
findUnendedNodeSpans(executionId: string): Span[];
|
|
13
|
+
cleanup(executionId: string): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SpanRegistry = void 0;
|
|
4
|
+
class SpanRegistry {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.spans = new Map();
|
|
7
|
+
}
|
|
8
|
+
static workflowKey(executionId) {
|
|
9
|
+
return executionId;
|
|
10
|
+
}
|
|
11
|
+
static nodeKey(executionId, nodeId) {
|
|
12
|
+
return `${executionId}:${nodeId}`;
|
|
13
|
+
}
|
|
14
|
+
addWorkflow(executionId, span) {
|
|
15
|
+
this.spans.set(SpanRegistry.workflowKey(executionId), span);
|
|
16
|
+
}
|
|
17
|
+
getWorkflow(executionId) {
|
|
18
|
+
return this.spans.get(SpanRegistry.workflowKey(executionId));
|
|
19
|
+
}
|
|
20
|
+
removeWorkflow(executionId) {
|
|
21
|
+
const key = SpanRegistry.workflowKey(executionId);
|
|
22
|
+
const span = this.spans.get(key);
|
|
23
|
+
this.spans.delete(key);
|
|
24
|
+
return span;
|
|
25
|
+
}
|
|
26
|
+
addNode(executionId, nodeId, span) {
|
|
27
|
+
this.spans.set(SpanRegistry.nodeKey(executionId, nodeId), span);
|
|
28
|
+
}
|
|
29
|
+
getNode(executionId, nodeId) {
|
|
30
|
+
return this.spans.get(SpanRegistry.nodeKey(executionId, nodeId));
|
|
31
|
+
}
|
|
32
|
+
removeNode(executionId, nodeId) {
|
|
33
|
+
const key = SpanRegistry.nodeKey(executionId, nodeId);
|
|
34
|
+
const span = this.spans.get(key);
|
|
35
|
+
this.spans.delete(key);
|
|
36
|
+
return span;
|
|
37
|
+
}
|
|
38
|
+
findUnendedNodeSpans(executionId) {
|
|
39
|
+
const prefix = `${executionId}:`;
|
|
40
|
+
const dangling = [];
|
|
41
|
+
for (const [key, span] of this.spans.entries()) {
|
|
42
|
+
if (key.startsWith(prefix)) {
|
|
43
|
+
dangling.push(span);
|
|
44
|
+
this.spans.delete(key);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return dangling;
|
|
48
|
+
}
|
|
49
|
+
cleanup(executionId) {
|
|
50
|
+
for (const key of this.spans.keys()) {
|
|
51
|
+
if (key === executionId || key.startsWith(`${executionId}:`)) {
|
|
52
|
+
this.spans.delete(key);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.SpanRegistry = SpanRegistry;
|
|
58
|
+
//# sourceMappingURL=span-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-registry.js","sourceRoot":"","sources":["../../../src/modules/otel/span-registry.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IAAzB;QACS,UAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IA6DzC,CAAC;IA3DA,MAAM,CAAC,WAAW,CAAC,WAAmB;QACrC,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAc;QACjD,OAAO,GAAG,WAAW,IAAI,MAAM,EAAE,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,WAAmB,EAAE,IAAU;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,WAAmB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,cAAc,CAAC,WAAmB;QACjC,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,MAAc,EAAE,IAAU;QACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,MAAc;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,UAAU,CAAC,WAAmB,EAAE,MAAc;QAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,oBAAoB,CAAC,WAAmB;QACvC,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG,CAAC;QACjC,MAAM,QAAQ,GAAW,EAAE,CAAC;QAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;QAED,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,WAAmB;QAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;IACF,CAAC;CACD;AA9DD,oCA8DC"}
|
|
@@ -44,6 +44,7 @@ const decorators_1 = require("@n8n/decorators");
|
|
|
44
44
|
let ProvisioningModule = class ProvisioningModule {
|
|
45
45
|
async init() {
|
|
46
46
|
await Promise.resolve().then(() => __importStar(require('./provisioning.controller.ee')));
|
|
47
|
+
await Promise.resolve().then(() => __importStar(require('./role-mapping-rule.controller.ee')));
|
|
47
48
|
}
|
|
48
49
|
};
|
|
49
50
|
exports.ProvisioningModule = ProvisioningModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisioning.module.js","sourceRoot":"","sources":["../../../src/modules/provisioning.ee/provisioning.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAgD;AAOzC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC9B,KAAK,CAAC,IAAI;QACT,wDAAa,8BAA8B,GAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"provisioning.module.js","sourceRoot":"","sources":["../../../src/modules/provisioning.ee/provisioning.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAgD;AAOzC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC9B,KAAK,CAAC,IAAI;QACT,wDAAa,8BAA8B,GAAC,CAAC;QAC7C,wDAAa,mCAAmC,GAAC,CAAC;IACnD,CAAC;CACD,CAAA;AALY,gDAAkB;6BAAlB,kBAAkB;IAL9B,IAAA,0BAAa,EAAC;QACd,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;QACpD,aAAa,EAAE,CAAC,MAAM,CAAC;KACvB,CAAC;GACW,kBAAkB,CAK9B"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { ProvisioningConfigDto } from '@n8n/api-types';
|
|
2
2
|
import { Logger } from '@n8n/backend-common';
|
|
3
3
|
import { GlobalConfig } from '@n8n/config';
|
|
4
|
-
import { RoleRepository, SettingsRepository, User, UserRepository, ProjectRepository } from '@n8n/db';
|
|
4
|
+
import { RoleRepository, RoleMappingRuleRepository, SettingsRepository, User, UserRepository, ProjectRepository } from '@n8n/db';
|
|
5
5
|
import { EventService } from '../../events/event.service';
|
|
6
6
|
import { Publisher } from '../../scaling/pubsub/publisher.service';
|
|
7
7
|
import { ProjectService } from '../../services/project.service.ee';
|
|
8
8
|
import { InstanceSettings } from 'n8n-core';
|
|
9
9
|
import { UserService } from '../../services/user.service';
|
|
10
|
+
import { RoleResolverService } from './role-resolver.service.ee';
|
|
11
|
+
import type { RoleResolverContext } from './role-resolver-types';
|
|
12
|
+
export declare function isExpressionMappingFlagEnabled(): boolean;
|
|
10
13
|
export declare class ProvisioningService {
|
|
11
14
|
private readonly eventService;
|
|
12
15
|
private readonly globalConfig;
|
|
@@ -19,8 +22,10 @@ export declare class ProvisioningService {
|
|
|
19
22
|
private readonly logger;
|
|
20
23
|
private readonly publisher;
|
|
21
24
|
private readonly instanceSettings;
|
|
25
|
+
private readonly roleMappingRuleRepository;
|
|
26
|
+
private readonly roleResolverService;
|
|
22
27
|
private provisioningConfig;
|
|
23
|
-
constructor(eventService: EventService, globalConfig: GlobalConfig, settingsRepository: SettingsRepository, projectRepository: ProjectRepository, projectService: ProjectService, roleRepository: RoleRepository, userRepository: UserRepository, userService: UserService, logger: Logger, publisher: Publisher, instanceSettings: InstanceSettings);
|
|
28
|
+
constructor(eventService: EventService, globalConfig: GlobalConfig, settingsRepository: SettingsRepository, projectRepository: ProjectRepository, projectService: ProjectService, roleRepository: RoleRepository, userRepository: UserRepository, userService: UserService, logger: Logger, publisher: Publisher, instanceSettings: InstanceSettings, roleMappingRuleRepository: RoleMappingRuleRepository, roleResolverService: RoleResolverService);
|
|
24
29
|
init(): Promise<void>;
|
|
25
30
|
getConfig(): Promise<ProvisioningConfigDto>;
|
|
26
31
|
provisionInstanceRoleForUser(user: User, roleSlug: unknown): Promise<void>;
|
|
@@ -34,4 +39,10 @@ export declare class ProvisioningService {
|
|
|
34
39
|
isProvisioningEnabled(): Promise<boolean>;
|
|
35
40
|
private isInstanceRoleProvisioningEnabled;
|
|
36
41
|
private isProjectRolesProvisioningEnabled;
|
|
42
|
+
isExpressionMappingEnabled(): Promise<boolean>;
|
|
43
|
+
private buildRoleMappingConfig;
|
|
44
|
+
private applyExpressionMappedRoles;
|
|
45
|
+
private applyExpressionMappedInstanceRole;
|
|
46
|
+
private applyExpressionMappedProjectRoles;
|
|
47
|
+
provisionExpressionMappedRolesForUser(user: User, context: RoleResolverContext): Promise<void>;
|
|
37
48
|
}
|
|
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.ProvisioningService = void 0;
|
|
13
|
+
exports.isExpressionMappingFlagEnabled = isExpressionMappingFlagEnabled;
|
|
13
14
|
const api_types_1 = require("@n8n/api-types");
|
|
14
15
|
const backend_common_1 = require("@n8n/backend-common");
|
|
15
16
|
const config_1 = require("@n8n/config");
|
|
@@ -26,8 +27,12 @@ const zod_1 = require("zod");
|
|
|
26
27
|
const project_service_ee_1 = require("../../services/project.service.ee");
|
|
27
28
|
const n8n_core_1 = require("n8n-core");
|
|
28
29
|
const user_service_1 = require("../../services/user.service");
|
|
30
|
+
const role_resolver_service_ee_1 = require("./role-resolver.service.ee");
|
|
31
|
+
function isExpressionMappingFlagEnabled() {
|
|
32
|
+
return process.env.N8N_ENV_FEAT_ROLE_MAPPING_STRATEGY === 'true';
|
|
33
|
+
}
|
|
29
34
|
let ProvisioningService = class ProvisioningService {
|
|
30
|
-
constructor(eventService, globalConfig, settingsRepository, projectRepository, projectService, roleRepository, userRepository, userService, logger, publisher, instanceSettings) {
|
|
35
|
+
constructor(eventService, globalConfig, settingsRepository, projectRepository, projectService, roleRepository, userRepository, userService, logger, publisher, instanceSettings, roleMappingRuleRepository, roleResolverService) {
|
|
31
36
|
this.eventService = eventService;
|
|
32
37
|
this.globalConfig = globalConfig;
|
|
33
38
|
this.settingsRepository = settingsRepository;
|
|
@@ -39,6 +44,8 @@ let ProvisioningService = class ProvisioningService {
|
|
|
39
44
|
this.logger = logger;
|
|
40
45
|
this.publisher = publisher;
|
|
41
46
|
this.instanceSettings = instanceSettings;
|
|
47
|
+
this.roleMappingRuleRepository = roleMappingRuleRepository;
|
|
48
|
+
this.roleResolverService = roleResolverService;
|
|
42
49
|
}
|
|
43
50
|
async init() {
|
|
44
51
|
this.provisioningConfig = await this.loadConfig();
|
|
@@ -197,6 +204,7 @@ let ProvisioningService = class ProvisioningService {
|
|
|
197
204
|
'scopesName',
|
|
198
205
|
'scopesInstanceRoleClaimName',
|
|
199
206
|
'scopesProjectsRolesClaimName',
|
|
207
|
+
'scopesUseExpressionMapping',
|
|
200
208
|
];
|
|
201
209
|
const updatedConfig = {
|
|
202
210
|
...currentConfig,
|
|
@@ -207,6 +215,10 @@ let ProvisioningService = class ProvisioningService {
|
|
|
207
215
|
delete updatedConfig[supportedPatchField];
|
|
208
216
|
}
|
|
209
217
|
}
|
|
218
|
+
if (updatedConfig.scopesUseExpressionMapping &&
|
|
219
|
+
(updatedConfig.scopesProvisionInstanceRole || updatedConfig.scopesProvisionProjectRoles)) {
|
|
220
|
+
throw new bad_request_error_1.BadRequestError('Expression-based mapping and direct-claim provisioning cannot both be enabled at the same time.');
|
|
221
|
+
}
|
|
210
222
|
api_types_1.ProvisioningConfigDto.parse(updatedConfig);
|
|
211
223
|
await this.settingsRepository.upsert({
|
|
212
224
|
key: constants_1.PROVISIONING_PREFERENCES_DB_KEY,
|
|
@@ -273,6 +285,135 @@ let ProvisioningService = class ProvisioningService {
|
|
|
273
285
|
const provisioningConfig = await this.getConfig();
|
|
274
286
|
return provisioningConfig.scopesProvisionProjectRoles;
|
|
275
287
|
}
|
|
288
|
+
async isExpressionMappingEnabled() {
|
|
289
|
+
if (!isExpressionMappingFlagEnabled())
|
|
290
|
+
return false;
|
|
291
|
+
const provisioningConfig = await this.getConfig();
|
|
292
|
+
return provisioningConfig.scopesUseExpressionMapping;
|
|
293
|
+
}
|
|
294
|
+
async buildRoleMappingConfig() {
|
|
295
|
+
const dbRules = await this.roleMappingRuleRepository.find({
|
|
296
|
+
relations: ['role', 'projects'],
|
|
297
|
+
order: { order: 'ASC' },
|
|
298
|
+
});
|
|
299
|
+
const instanceRoleRules = [];
|
|
300
|
+
const projectRoleRules = [];
|
|
301
|
+
for (const dbRule of dbRules) {
|
|
302
|
+
if (dbRule.type === 'instance') {
|
|
303
|
+
instanceRoleRules.push({
|
|
304
|
+
id: dbRule.id,
|
|
305
|
+
expression: dbRule.expression,
|
|
306
|
+
role: dbRule.role.slug,
|
|
307
|
+
enabled: true,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
for (const project of dbRule.projects) {
|
|
312
|
+
projectRoleRules.push({
|
|
313
|
+
id: `${dbRule.id}:${project.id}`,
|
|
314
|
+
expression: dbRule.expression,
|
|
315
|
+
role: dbRule.role.slug,
|
|
316
|
+
projectId: project.id,
|
|
317
|
+
enabled: true,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return { instanceRoleRules, projectRoleRules, fallbackInstanceRole: 'global:member' };
|
|
323
|
+
}
|
|
324
|
+
async applyExpressionMappedRoles(user, resolvedRoles) {
|
|
325
|
+
await this.applyExpressionMappedInstanceRole(user, resolvedRoles.instanceRole);
|
|
326
|
+
await this.applyExpressionMappedProjectRoles(user.id, resolvedRoles.projectRoles);
|
|
327
|
+
}
|
|
328
|
+
async applyExpressionMappedInstanceRole(user, instanceRoleSlug) {
|
|
329
|
+
let dbRole;
|
|
330
|
+
try {
|
|
331
|
+
dbRole = await this.roleRepository.findOneOrFail({ where: { slug: instanceRoleSlug } });
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
this.logger.warn(`Expression mapping: skipping instance role, slug "${instanceRoleSlug}" not found`, { userId: user.id });
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
if (dbRole.roleType !== 'global') {
|
|
338
|
+
this.logger.warn(`Expression mapping: skipping instance role, "${instanceRoleSlug}" is not a global role`, { userId: user.id });
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
const globalOwnerRoleSlug = 'global:owner';
|
|
342
|
+
if (user.role.slug === globalOwnerRoleSlug && dbRole.slug !== globalOwnerRoleSlug) {
|
|
343
|
+
const otherOwners = await this.userRepository.count({
|
|
344
|
+
where: { role: { slug: globalOwnerRoleSlug }, id: (0, typeorm_1.Not)(user.id) },
|
|
345
|
+
});
|
|
346
|
+
if (otherOwners === 0) {
|
|
347
|
+
this.logger.warn('Expression mapping: skipping instance role update, cannot demote last owner', { userId: user.id });
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (user.role.slug !== dbRole.slug) {
|
|
352
|
+
await this.userService.changeUserRole(user, { newRoleName: dbRole.slug });
|
|
353
|
+
this.eventService.emit('sso-user-instance-role-updated', {
|
|
354
|
+
userId: user.id,
|
|
355
|
+
role: dbRole.slug,
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
async applyExpressionMappedProjectRoles(userId, projectRoleMap) {
|
|
360
|
+
const currentlyAccessibleProjects = await this.projectRepository.find({
|
|
361
|
+
where: { type: (0, typeorm_1.Not)('personal'), projectRelations: { userId } },
|
|
362
|
+
relations: ['projectRelations'],
|
|
363
|
+
});
|
|
364
|
+
const validMappings = [];
|
|
365
|
+
if (projectRoleMap.size > 0) {
|
|
366
|
+
const projectIds = [...projectRoleMap.keys()];
|
|
367
|
+
const roleSlugs = [...new Set(projectRoleMap.values())];
|
|
368
|
+
const [existingProjects, existingRoles] = await Promise.all([
|
|
369
|
+
this.projectRepository.find({
|
|
370
|
+
where: { id: (0, typeorm_1.In)(projectIds), type: (0, typeorm_1.Not)('personal') },
|
|
371
|
+
select: ['id'],
|
|
372
|
+
}),
|
|
373
|
+
this.roleRepository.find({
|
|
374
|
+
where: { slug: (0, typeorm_1.In)(roleSlugs), roleType: 'project' },
|
|
375
|
+
select: ['displayName', 'slug'],
|
|
376
|
+
}),
|
|
377
|
+
]);
|
|
378
|
+
const existingProjectIds = new Set(existingProjects.map((p) => p.id));
|
|
379
|
+
for (const [projectId, roleSlug] of projectRoleMap.entries()) {
|
|
380
|
+
if (!existingProjectIds.has(projectId)) {
|
|
381
|
+
this.logger.warn(`Expression mapping: skipping project ${projectId}, not found or is a personal project`, { userId, projectId, roleSlug });
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
const role = existingRoles.find((r) => r.slug === roleSlug);
|
|
385
|
+
if (!role) {
|
|
386
|
+
this.logger.warn(`Expression mapping: skipping role "${roleSlug}", not found or not a project role`, { userId, projectId, roleSlug });
|
|
387
|
+
continue;
|
|
388
|
+
}
|
|
389
|
+
validMappings.push({ projectId, roleSlug: role.slug });
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
const validProjectIds = new Set(validMappings.map((m) => m.projectId));
|
|
393
|
+
const projectsToRemoveAccessFrom = currentlyAccessibleProjects.filter((p) => !validProjectIds.has(p.id));
|
|
394
|
+
if (projectsToRemoveAccessFrom.length === 0 && validMappings.length === 0)
|
|
395
|
+
return;
|
|
396
|
+
await this.projectRepository.manager.transaction(async (tx) => {
|
|
397
|
+
for (const project of projectsToRemoveAccessFrom) {
|
|
398
|
+
await tx.delete(db_1.ProjectRelation, { projectId: project.id, userId });
|
|
399
|
+
}
|
|
400
|
+
for (const { projectId, roleSlug } of validMappings) {
|
|
401
|
+
await this.projectService.addUser(projectId, { userId, role: roleSlug }, tx);
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
this.eventService.emit('sso-user-project-access-updated', {
|
|
405
|
+
projectsAdded: validProjectIds.size,
|
|
406
|
+
projectsRemoved: projectsToRemoveAccessFrom.length,
|
|
407
|
+
userId,
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
async provisionExpressionMappedRolesForUser(user, context) {
|
|
411
|
+
if (!(await this.isExpressionMappingEnabled()))
|
|
412
|
+
return;
|
|
413
|
+
const config = await this.buildRoleMappingConfig();
|
|
414
|
+
const resolvedRoles = await this.roleResolverService.resolveRoles(config, context);
|
|
415
|
+
await this.applyExpressionMappedRoles(user, resolvedRoles);
|
|
416
|
+
}
|
|
276
417
|
};
|
|
277
418
|
exports.ProvisioningService = ProvisioningService;
|
|
278
419
|
__decorate([
|
|
@@ -293,6 +434,8 @@ exports.ProvisioningService = ProvisioningService = __decorate([
|
|
|
293
434
|
user_service_1.UserService,
|
|
294
435
|
backend_common_1.Logger,
|
|
295
436
|
publisher_service_1.Publisher,
|
|
296
|
-
n8n_core_1.InstanceSettings
|
|
437
|
+
n8n_core_1.InstanceSettings,
|
|
438
|
+
db_1.RoleMappingRuleRepository,
|
|
439
|
+
role_resolver_service_ee_1.RoleResolverService])
|
|
297
440
|
], ProvisioningService);
|
|
298
441
|
//# sourceMappingURL=provisioning.service.ee.js.map
|