n8n 2.15.0 → 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.
Files changed (414) hide show
  1. package/dist/active-workflow-manager.js +25 -12
  2. package/dist/active-workflow-manager.js.map +1 -1
  3. package/dist/auth/auth.service.js +1 -0
  4. package/dist/auth/auth.service.js.map +1 -1
  5. package/dist/build.tsbuildinfo +1 -1
  6. package/dist/commands/base-command.js +7 -1
  7. package/dist/commands/base-command.js.map +1 -1
  8. package/dist/controllers/ai.controller.js +2 -2
  9. package/dist/controllers/ai.controller.js.map +1 -1
  10. package/dist/controllers/e2e.controller.js +2 -0
  11. package/dist/controllers/e2e.controller.js.map +1 -1
  12. package/dist/credentials/credentials.controller.js +1 -1
  13. package/dist/credentials/credentials.controller.js.map +1 -1
  14. package/dist/credentials/credentials.service.d.ts +7 -4
  15. package/dist/credentials/credentials.service.js +77 -16
  16. package/dist/credentials/credentials.service.js.map +1 -1
  17. package/dist/credentials-helper.js +7 -1
  18. package/dist/credentials-helper.js.map +1 -1
  19. package/dist/errors/http-error-classifier.d.ts +31 -0
  20. package/dist/errors/http-error-classifier.js +60 -0
  21. package/dist/errors/http-error-classifier.js.map +1 -0
  22. package/dist/errors/http-error-serializers.d.ts +18 -0
  23. package/dist/errors/http-error-serializers.js +64 -0
  24. package/dist/errors/http-error-serializers.js.map +1 -0
  25. package/dist/eventbus/event-message-classes/index.d.ts +2 -2
  26. package/dist/eventbus/event-message-classes/index.js +3 -0
  27. package/dist/eventbus/event-message-classes/index.js.map +1 -1
  28. package/dist/events/maps/relay.event-map.d.ts +22 -0
  29. package/dist/events/relays/log-streaming.event-relay.d.ts +3 -0
  30. package/dist/events/relays/log-streaming.event-relay.js +21 -0
  31. package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
  32. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +2 -0
  33. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  34. package/dist/executions/execution.service.js +2 -1
  35. package/dist/executions/execution.service.js.map +1 -1
  36. package/dist/modules/chat-hub/chat-hub-workflow.service.d.ts +1 -0
  37. package/dist/modules/chat-hub/chat-hub-workflow.service.js +18 -2
  38. package/dist/modules/chat-hub/chat-hub-workflow.service.js.map +1 -1
  39. package/dist/modules/chat-hub/chat-hub.types.d.ts +5 -0
  40. package/dist/modules/chat-hub/chat-hub.types.js +1 -0
  41. package/dist/modules/chat-hub/chat-hub.types.js.map +1 -1
  42. package/dist/modules/chat-hub/context-limits.js +10 -0
  43. package/dist/modules/chat-hub/context-limits.js.map +1 -1
  44. package/dist/modules/community-packages/community-node-types-utils.d.ts +2 -2
  45. package/dist/modules/community-packages/community-node-types-utils.js +4 -4
  46. package/dist/modules/community-packages/community-node-types-utils.js.map +1 -1
  47. package/dist/modules/community-packages/strapi-utils.d.ts +1 -1
  48. package/dist/modules/data-table/data-table-proxy.service.d.ts +44 -2
  49. package/dist/modules/data-table/data-table-proxy.service.js +86 -2
  50. package/dist/modules/data-table/data-table-proxy.service.js.map +1 -1
  51. package/dist/modules/dynamic-credentials.ee/services/resolver-config-expression.service.js +10 -4
  52. package/dist/modules/dynamic-credentials.ee/services/resolver-config-expression.service.js.map +1 -1
  53. package/dist/modules/instance-ai/compaction.service.d.ts +19 -0
  54. package/dist/modules/instance-ai/compaction.service.js +213 -0
  55. package/dist/modules/instance-ai/compaction.service.js.map +1 -0
  56. package/dist/modules/instance-ai/entities/index.d.ts +7 -0
  57. package/dist/modules/instance-ai/entities/index.js +18 -0
  58. package/dist/modules/instance-ai/entities/index.js.map +1 -0
  59. package/dist/modules/instance-ai/entities/instance-ai-iteration-log.entity.d.ts +7 -0
  60. package/dist/modules/instance-ai/entities/instance-ai-iteration-log.entity.js +38 -0
  61. package/dist/modules/instance-ai/entities/instance-ai-iteration-log.entity.js.map +1 -0
  62. package/dist/modules/instance-ai/entities/instance-ai-message.entity.d.ts +9 -0
  63. package/dist/modules/instance-ai/entities/instance-ai-message.entity.js +47 -0
  64. package/dist/modules/instance-ai/entities/instance-ai-message.entity.js.map +1 -0
  65. package/dist/modules/instance-ai/entities/instance-ai-observational-memory.entity.d.ts +33 -0
  66. package/dist/modules/instance-ai/entities/instance-ai-observational-memory.entity.js +145 -0
  67. package/dist/modules/instance-ai/entities/instance-ai-observational-memory.entity.js.map +1 -0
  68. package/dist/modules/instance-ai/entities/instance-ai-resource.entity.d.ts +6 -0
  69. package/dist/modules/instance-ai/entities/instance-ai-resource.entity.js +33 -0
  70. package/dist/modules/instance-ai/entities/instance-ai-resource.entity.js.map +1 -0
  71. package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.d.ts +8 -0
  72. package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.js +43 -0
  73. package/dist/modules/instance-ai/entities/instance-ai-run-snapshot.entity.js.map +1 -0
  74. package/dist/modules/instance-ai/entities/instance-ai-thread.entity.d.ts +7 -0
  75. package/dist/modules/instance-ai/entities/instance-ai-thread.entity.js +38 -0
  76. package/dist/modules/instance-ai/entities/instance-ai-thread.entity.js.map +1 -0
  77. package/dist/modules/instance-ai/entities/instance-ai-workflow-snapshot.entity.d.ts +8 -0
  78. package/dist/modules/instance-ai/entities/instance-ai-workflow-snapshot.entity.js +41 -0
  79. package/dist/modules/instance-ai/entities/instance-ai-workflow-snapshot.entity.js.map +1 -0
  80. package/dist/modules/instance-ai/event-bus/in-process-event-bus.d.ts +19 -0
  81. package/dist/modules/instance-ai/event-bus/in-process-event-bus.js +98 -0
  82. package/dist/modules/instance-ai/event-bus/in-process-event-bus.js.map +1 -0
  83. package/dist/modules/instance-ai/filesystem/index.d.ts +4 -0
  84. package/dist/modules/instance-ai/filesystem/index.js +10 -0
  85. package/dist/modules/instance-ai/filesystem/index.js.map +1 -0
  86. package/dist/modules/instance-ai/filesystem/local-fs-provider.d.ts +26 -0
  87. package/dist/modules/instance-ai/filesystem/local-fs-provider.js +321 -0
  88. package/dist/modules/instance-ai/filesystem/local-fs-provider.js.map +1 -0
  89. package/dist/modules/instance-ai/filesystem/local-gateway-registry.d.ts +29 -0
  90. package/dist/modules/instance-ai/filesystem/local-gateway-registry.js +137 -0
  91. package/dist/modules/instance-ai/filesystem/local-gateway-registry.js.map +1 -0
  92. package/dist/modules/instance-ai/filesystem/local-gateway.d.ts +35 -0
  93. package/dist/modules/instance-ai/filesystem/local-gateway.js +99 -0
  94. package/dist/modules/instance-ai/filesystem/local-gateway.js.map +1 -0
  95. package/dist/modules/instance-ai/instance-ai-memory.service.d.ts +36 -0
  96. package/dist/modules/instance-ai/instance-ai-memory.service.js +265 -0
  97. package/dist/modules/instance-ai/instance-ai-memory.service.js.map +1 -0
  98. package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +55 -0
  99. package/dist/modules/instance-ai/instance-ai-settings.service.js +430 -0
  100. package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -0
  101. package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +86 -0
  102. package/dist/modules/instance-ai/instance-ai.adapter.service.js +1731 -0
  103. package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -0
  104. package/dist/modules/instance-ai/instance-ai.controller.d.ts +102 -0
  105. package/dist/modules/instance-ai/instance-ai.controller.js +613 -0
  106. package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -0
  107. package/dist/modules/instance-ai/instance-ai.module.d.ts +13 -0
  108. package/dist/modules/instance-ai/instance-ai.module.js +119 -0
  109. package/dist/modules/instance-ai/instance-ai.module.js.map +1 -0
  110. package/dist/modules/instance-ai/instance-ai.service.d.ts +132 -0
  111. package/dist/modules/instance-ai/instance-ai.service.js +1674 -0
  112. package/dist/modules/instance-ai/instance-ai.service.js.map +1 -0
  113. package/dist/modules/instance-ai/internal-messages.d.ts +2 -0
  114. package/dist/modules/instance-ai/internal-messages.js +11 -0
  115. package/dist/modules/instance-ai/internal-messages.js.map +1 -0
  116. package/dist/modules/instance-ai/message-parser.d.ts +12 -0
  117. package/dist/modules/instance-ai/message-parser.js +171 -0
  118. package/dist/modules/instance-ai/message-parser.js.map +1 -0
  119. package/dist/modules/instance-ai/node-definition-resolver.d.ts +19 -0
  120. package/dist/modules/instance-ai/node-definition-resolver.js +290 -0
  121. package/dist/modules/instance-ai/node-definition-resolver.js.map +1 -0
  122. package/dist/modules/instance-ai/repositories/index.d.ts +7 -0
  123. package/dist/modules/instance-ai/repositories/index.js +18 -0
  124. package/dist/modules/instance-ai/repositories/index.js.map +1 -0
  125. package/dist/modules/instance-ai/repositories/instance-ai-iteration-log.repository.d.ts +5 -0
  126. package/dist/modules/instance-ai/repositories/instance-ai-iteration-log.repository.js +26 -0
  127. package/dist/modules/instance-ai/repositories/instance-ai-iteration-log.repository.js.map +1 -0
  128. package/dist/modules/instance-ai/repositories/instance-ai-message.repository.d.ts +5 -0
  129. package/dist/modules/instance-ai/repositories/instance-ai-message.repository.js +26 -0
  130. package/dist/modules/instance-ai/repositories/instance-ai-message.repository.js.map +1 -0
  131. package/dist/modules/instance-ai/repositories/instance-ai-observational-memory.repository.d.ts +5 -0
  132. package/dist/modules/instance-ai/repositories/instance-ai-observational-memory.repository.js +26 -0
  133. package/dist/modules/instance-ai/repositories/instance-ai-observational-memory.repository.js.map +1 -0
  134. package/dist/modules/instance-ai/repositories/instance-ai-resource.repository.d.ts +5 -0
  135. package/dist/modules/instance-ai/repositories/instance-ai-resource.repository.js +26 -0
  136. package/dist/modules/instance-ai/repositories/instance-ai-resource.repository.js.map +1 -0
  137. package/dist/modules/instance-ai/repositories/instance-ai-run-snapshot.repository.d.ts +5 -0
  138. package/dist/modules/instance-ai/repositories/instance-ai-run-snapshot.repository.js +26 -0
  139. package/dist/modules/instance-ai/repositories/instance-ai-run-snapshot.repository.js.map +1 -0
  140. package/dist/modules/instance-ai/repositories/instance-ai-thread.repository.d.ts +5 -0
  141. package/dist/modules/instance-ai/repositories/instance-ai-thread.repository.js +26 -0
  142. package/dist/modules/instance-ai/repositories/instance-ai-thread.repository.js.map +1 -0
  143. package/dist/modules/instance-ai/repositories/instance-ai-workflow-snapshot.repository.d.ts +5 -0
  144. package/dist/modules/instance-ai/repositories/instance-ai-workflow-snapshot.repository.js +26 -0
  145. package/dist/modules/instance-ai/repositories/instance-ai-workflow-snapshot.repository.js.map +1 -0
  146. package/dist/modules/instance-ai/snapshot-pruning.service.d.ts +14 -0
  147. package/dist/modules/instance-ai/snapshot-pruning.service.js +77 -0
  148. package/dist/modules/instance-ai/snapshot-pruning.service.js.map +1 -0
  149. package/dist/modules/instance-ai/storage/db-iteration-log-storage.d.ts +9 -0
  150. package/dist/modules/instance-ai/storage/db-iteration-log-storage.js +45 -0
  151. package/dist/modules/instance-ai/storage/db-iteration-log-storage.js.map +1 -0
  152. package/dist/modules/instance-ai/storage/db-snapshot-storage.d.ts +10 -0
  153. package/dist/modules/instance-ai/storage/db-snapshot-storage.js +74 -0
  154. package/dist/modules/instance-ai/storage/db-snapshot-storage.js.map +1 -0
  155. package/dist/modules/instance-ai/storage/index.d.ts +5 -0
  156. package/dist/modules/instance-ai/storage/index.js +14 -0
  157. package/dist/modules/instance-ai/storage/index.js.map +1 -0
  158. package/dist/modules/instance-ai/storage/typeorm-composite-store.d.ts +9 -0
  159. package/dist/modules/instance-ai/storage/typeorm-composite-store.js +33 -0
  160. package/dist/modules/instance-ai/storage/typeorm-composite-store.js.map +1 -0
  161. package/dist/modules/instance-ai/storage/typeorm-memory-storage.d.ts +96 -0
  162. package/dist/modules/instance-ai/storage/typeorm-memory-storage.js +853 -0
  163. package/dist/modules/instance-ai/storage/typeorm-memory-storage.js.map +1 -0
  164. package/dist/modules/instance-ai/storage/typeorm-workflows-storage.d.ts +44 -0
  165. package/dist/modules/instance-ai/storage/typeorm-workflows-storage.js +156 -0
  166. package/dist/modules/instance-ai/storage/typeorm-workflows-storage.js.map +1 -0
  167. package/dist/modules/instance-ai/web-research/brave-search.d.ts +10 -0
  168. package/dist/modules/instance-ai/web-research/brave-search.js +43 -0
  169. package/dist/modules/instance-ai/web-research/brave-search.js.map +1 -0
  170. package/dist/modules/instance-ai/web-research/cache.d.ts +13 -0
  171. package/dist/modules/instance-ai/web-research/cache.js +43 -0
  172. package/dist/modules/instance-ai/web-research/cache.js.map +1 -0
  173. package/dist/modules/instance-ai/web-research/fetch-and-extract.d.ts +8 -0
  174. package/dist/modules/instance-ai/web-research/fetch-and-extract.js +231 -0
  175. package/dist/modules/instance-ai/web-research/fetch-and-extract.js.map +1 -0
  176. package/dist/modules/instance-ai/web-research/index.d.ts +7 -0
  177. package/dist/modules/instance-ai/web-research/index.js +16 -0
  178. package/dist/modules/instance-ai/web-research/index.js.map +1 -0
  179. package/dist/modules/instance-ai/web-research/searxng-search.d.ts +6 -0
  180. package/dist/modules/instance-ai/web-research/searxng-search.js +39 -0
  181. package/dist/modules/instance-ai/web-research/searxng-search.js.map +1 -0
  182. package/dist/modules/instance-ai/web-research/ssrf-guard.d.ts +1 -0
  183. package/dist/modules/instance-ai/web-research/ssrf-guard.js +85 -0
  184. package/dist/modules/instance-ai/web-research/ssrf-guard.js.map +1 -0
  185. package/dist/modules/instance-ai/web-research/summarize-content.d.ts +4 -0
  186. package/dist/modules/instance-ai/web-research/summarize-content.js +34 -0
  187. package/dist/modules/instance-ai/web-research/summarize-content.js.map +1 -0
  188. package/dist/modules/instance-registry/instance-registry.types.d.ts +1 -0
  189. package/dist/modules/instance-registry/instance-registry.types.js +2 -1
  190. package/dist/modules/instance-registry/instance-registry.types.js.map +1 -1
  191. package/dist/modules/instance-registry/storage/instance-storage.interface.d.ts +1 -0
  192. package/dist/modules/instance-registry/storage/lua-scripts.d.ts +4 -0
  193. package/dist/modules/instance-registry/storage/lua-scripts.js +39 -0
  194. package/dist/modules/instance-registry/storage/lua-scripts.js.map +1 -0
  195. package/dist/modules/instance-registry/storage/memory-storage.d.ts +1 -0
  196. package/dist/modules/instance-registry/storage/memory-storage.js +1 -0
  197. package/dist/modules/instance-registry/storage/memory-storage.js.map +1 -1
  198. package/dist/modules/instance-registry/storage/redis-instance-storage.d.ts +25 -0
  199. package/dist/modules/instance-registry/storage/redis-instance-storage.js +185 -0
  200. package/dist/modules/instance-registry/storage/redis-instance-storage.js.map +1 -0
  201. package/dist/modules/log-streaming.ee/log-streaming.controller.js.map +1 -1
  202. package/dist/modules/mcp/mcp.service.d.ts +3 -1
  203. package/dist/modules/mcp/mcp.service.js +22 -3
  204. package/dist/modules/mcp/mcp.service.js.map +1 -1
  205. package/dist/modules/mcp/mcp.types.d.ts +1 -1
  206. package/dist/modules/mcp/tools/data-table/add-data-table-column.tool.d.ts +13 -0
  207. package/dist/modules/mcp/tools/data-table/add-data-table-column.tool.js +69 -0
  208. package/dist/modules/mcp/tools/data-table/add-data-table-column.tool.js.map +1 -0
  209. package/dist/modules/mcp/tools/data-table/add-data-table-rows.tool.d.ts +12 -0
  210. package/dist/modules/mcp/tools/data-table/add-data-table-rows.tool.js +77 -0
  211. package/dist/modules/mcp/tools/data-table/add-data-table-rows.tool.js.map +1 -0
  212. package/dist/modules/mcp/tools/data-table/create-data-table.tool.d.ts +21 -0
  213. package/dist/modules/mcp/tools/data-table/create-data-table.tool.js +92 -0
  214. package/dist/modules/mcp/tools/data-table/create-data-table.tool.js.map +1 -0
  215. package/dist/modules/mcp/tools/data-table/delete-data-table-column.tool.d.ts +12 -0
  216. package/dist/modules/mcp/tools/data-table/delete-data-table-column.tool.js +60 -0
  217. package/dist/modules/mcp/tools/data-table/delete-data-table-column.tool.js.map +1 -0
  218. package/dist/modules/mcp/tools/data-table/index.d.ts +7 -0
  219. package/dist/modules/mcp/tools/data-table/index.js +18 -0
  220. package/dist/modules/mcp/tools/data-table/index.js.map +1 -0
  221. package/dist/modules/mcp/tools/data-table/rename-data-table-column.tool.d.ts +13 -0
  222. package/dist/modules/mcp/tools/data-table/rename-data-table-column.tool.js +70 -0
  223. package/dist/modules/mcp/tools/data-table/rename-data-table-column.tool.js.map +1 -0
  224. package/dist/modules/mcp/tools/data-table/rename-data-table.tool.d.ts +12 -0
  225. package/dist/modules/mcp/tools/data-table/rename-data-table.tool.js +60 -0
  226. package/dist/modules/mcp/tools/data-table/rename-data-table.tool.js.map +1 -0
  227. package/dist/modules/mcp/tools/data-table/search-data-tables.tool.d.ts +12 -0
  228. package/dist/modules/mcp/tools/data-table/search-data-tables.tool.js +93 -0
  229. package/dist/modules/mcp/tools/data-table/search-data-tables.tool.js.map +1 -0
  230. package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +3 -4
  231. package/dist/modules/mcp/tools/execute-workflow.tool.js +10 -25
  232. package/dist/modules/mcp/tools/execute-workflow.tool.js.map +1 -1
  233. package/dist/modules/mcp/tools/get-execution.tool.js +4 -8
  234. package/dist/modules/mcp/tools/get-execution.tool.js.map +1 -1
  235. package/dist/modules/mcp/tools/schemas.d.ts +73 -2
  236. package/dist/modules/mcp/tools/schemas.js +41 -1
  237. package/dist/modules/mcp/tools/schemas.js.map +1 -1
  238. package/dist/modules/mcp/tools/search-folders.tool.js +2 -7
  239. package/dist/modules/mcp/tools/search-folders.tool.js.map +1 -1
  240. package/dist/modules/mcp/tools/search-projects.tool.js +2 -7
  241. package/dist/modules/mcp/tools/search-projects.tool.js.map +1 -1
  242. package/dist/modules/mcp/tools/search-workflows.tool.js +2 -7
  243. package/dist/modules/mcp/tools/search-workflows.tool.js.map +1 -1
  244. package/dist/modules/mcp/tools/workflow-builder/get-suggested-workflow-nodes.tool.js +1 -37
  245. package/dist/modules/mcp/tools/workflow-builder/get-suggested-workflow-nodes.tool.js.map +1 -1
  246. package/dist/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.js +1 -37
  247. package/dist/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.js.map +1 -1
  248. package/dist/modules/mcp/tools/workflow-builder/search-workflow-nodes.tool.js +1 -37
  249. package/dist/modules/mcp/tools/workflow-builder/search-workflow-nodes.tool.js.map +1 -1
  250. package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.d.ts +17 -0
  251. package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.js +48 -0
  252. package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.js.map +1 -1
  253. package/dist/modules/otel/handlers/node-end.handler.d.ts +8 -0
  254. package/dist/modules/otel/handlers/node-end.handler.js +71 -0
  255. package/dist/modules/otel/handlers/node-end.handler.js.map +1 -0
  256. package/dist/modules/otel/handlers/node-start.handler.d.ts +7 -0
  257. package/dist/modules/otel/handlers/node-start.handler.js +37 -0
  258. package/dist/modules/otel/handlers/node-start.handler.js.map +1 -0
  259. package/dist/modules/otel/handlers/workflow-end.handler.d.ts +1 -0
  260. package/dist/modules/otel/handlers/workflow-end.handler.js +8 -0
  261. package/dist/modules/otel/handlers/workflow-end.handler.js.map +1 -1
  262. package/dist/modules/otel/n8n-instrumentation.d.ts +8 -2
  263. package/dist/modules/otel/n8n-instrumentation.js +32 -1
  264. package/dist/modules/otel/n8n-instrumentation.js.map +1 -1
  265. package/dist/modules/otel/otel.config.d.ts +1 -0
  266. package/dist/modules/otel/otel.config.js +5 -0
  267. package/dist/modules/otel/otel.config.js.map +1 -1
  268. package/dist/modules/otel/otel.constants.d.ts +7 -0
  269. package/dist/modules/otel/otel.constants.js +7 -0
  270. package/dist/modules/otel/otel.constants.js.map +1 -1
  271. package/dist/modules/otel/otel.service.d.ts +1 -1
  272. package/dist/modules/otel/otel.service.js +20 -23
  273. package/dist/modules/otel/otel.service.js.map +1 -1
  274. package/dist/modules/otel/span-registry.d.ts +1 -0
  275. package/dist/modules/otel/span-registry.js +11 -0
  276. package/dist/modules/otel/span-registry.js.map +1 -1
  277. package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +13 -2
  278. package/dist/modules/provisioning.ee/provisioning.service.ee.js +145 -2
  279. package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
  280. package/dist/modules/redaction/executions/execution-redaction.service.d.ts +3 -2
  281. package/dist/modules/redaction/executions/execution-redaction.service.js +5 -1
  282. package/dist/modules/redaction/executions/execution-redaction.service.js.map +1 -1
  283. package/dist/modules/redaction/redaction.module.js +0 -6
  284. package/dist/modules/redaction/redaction.module.js.map +1 -1
  285. package/dist/modules/sso-oidc/oidc.controller.ee.d.ts +4 -1
  286. package/dist/modules/sso-oidc/oidc.controller.ee.js +39 -3
  287. package/dist/modules/sso-oidc/oidc.controller.ee.js.map +1 -1
  288. package/dist/modules/sso-oidc/oidc.service.ee.d.ts +14 -2
  289. package/dist/modules/sso-oidc/oidc.service.ee.js +86 -8
  290. package/dist/modules/sso-oidc/oidc.service.ee.js.map +1 -1
  291. package/dist/modules/sso-oidc/views/oidc-test-result.d.ts +5 -0
  292. package/dist/modules/sso-oidc/views/oidc-test-result.js +58 -0
  293. package/dist/modules/sso-oidc/views/oidc-test-result.js.map +1 -0
  294. package/dist/modules/sso-saml/saml-helpers.d.ts +1 -0
  295. package/dist/modules/sso-saml/saml-helpers.js +2 -0
  296. package/dist/modules/sso-saml/saml-helpers.js.map +1 -1
  297. package/dist/modules/sso-saml/saml.service.ee.d.ts +4 -1
  298. package/dist/modules/sso-saml/saml.service.ee.js +13 -7
  299. package/dist/modules/sso-saml/saml.service.ee.js.map +1 -1
  300. package/dist/modules/token-exchange/controllers/embed-auth.controller.d.ts +15 -0
  301. package/dist/modules/token-exchange/controllers/embed-auth.controller.js +67 -0
  302. package/dist/modules/token-exchange/controllers/embed-auth.controller.js.map +1 -0
  303. package/dist/modules/token-exchange/database/entities/token-exchange-jti.entity.d.ts +5 -0
  304. package/dist/modules/token-exchange/database/entities/token-exchange-jti.entity.js +33 -0
  305. package/dist/modules/token-exchange/database/entities/token-exchange-jti.entity.js.map +1 -0
  306. package/dist/modules/token-exchange/database/repositories/token-exchange-jti.repository.d.ts +10 -0
  307. package/dist/modules/token-exchange/database/repositories/token-exchange-jti.repository.js +106 -0
  308. package/dist/modules/token-exchange/database/repositories/token-exchange-jti.repository.js.map +1 -0
  309. package/dist/modules/token-exchange/services/identity-resolution.service.d.ts +5 -0
  310. package/dist/modules/token-exchange/services/identity-resolution.service.js +21 -0
  311. package/dist/modules/token-exchange/services/identity-resolution.service.js.map +1 -0
  312. package/dist/modules/token-exchange/services/jti-cleanup.service.d.ts +18 -0
  313. package/dist/modules/token-exchange/services/jti-cleanup.service.js +90 -0
  314. package/dist/modules/token-exchange/services/jti-cleanup.service.js.map +1 -0
  315. package/dist/modules/token-exchange/services/jti-store.service.d.ts +6 -0
  316. package/dist/modules/token-exchange/services/jti-store.service.js +30 -0
  317. package/dist/modules/token-exchange/services/jti-store.service.js.map +1 -0
  318. package/dist/modules/token-exchange/services/token-exchange.service.d.ts +17 -0
  319. package/dist/modules/token-exchange/services/token-exchange.service.js +93 -0
  320. package/dist/modules/token-exchange/services/token-exchange.service.js.map +1 -0
  321. package/dist/modules/token-exchange/services/trusted-key.service.d.ts +13 -0
  322. package/dist/modules/token-exchange/services/trusted-key.service.js +123 -0
  323. package/dist/modules/token-exchange/services/trusted-key.service.js.map +1 -0
  324. package/dist/modules/token-exchange/token-exchange.config.d.ts +7 -0
  325. package/dist/modules/token-exchange/token-exchange.config.js +47 -0
  326. package/dist/modules/token-exchange/token-exchange.config.js.map +1 -0
  327. package/dist/modules/token-exchange/token-exchange.controller.d.ts +9 -0
  328. package/dist/modules/token-exchange/token-exchange.controller.js +103 -0
  329. package/dist/modules/token-exchange/token-exchange.controller.js.map +1 -0
  330. package/dist/modules/token-exchange/token-exchange.module.d.ts +5 -0
  331. package/dist/modules/token-exchange/token-exchange.module.js +74 -0
  332. package/dist/modules/token-exchange/token-exchange.module.js.map +1 -0
  333. package/dist/modules/token-exchange/token-exchange.schemas.d.ts +131 -0
  334. package/dist/modules/token-exchange/token-exchange.schemas.js +60 -0
  335. package/dist/modules/token-exchange/token-exchange.schemas.js.map +1 -0
  336. package/dist/modules/token-exchange/token-exchange.service.d.ts +9 -0
  337. package/dist/modules/token-exchange/token-exchange.service.js +66 -0
  338. package/dist/modules/token-exchange/token-exchange.service.js.map +1 -0
  339. package/dist/modules/token-exchange/token-exchange.types.d.ts +50 -0
  340. package/dist/modules/token-exchange/token-exchange.types.js +3 -0
  341. package/dist/modules/token-exchange/token-exchange.types.js.map +1 -0
  342. package/dist/public-api/index.js +5 -5
  343. package/dist/public-api/index.js.map +1 -1
  344. package/dist/public-api/types.d.ts +17 -0
  345. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.d.ts +18 -0
  346. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js +71 -0
  347. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js.map +1 -0
  348. package/dist/public-api/v1/handlers/community-packages/community-packages.mapper.d.ts +27 -0
  349. package/dist/public-api/v1/handlers/community-packages/community-packages.mapper.js +35 -0
  350. package/dist/public-api/v1/handlers/community-packages/community-packages.mapper.js.map +1 -0
  351. package/dist/public-api/v1/handlers/executions/executions.handler.js +48 -4
  352. package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
  353. package/dist/public-api/v1/openapi.yml +208 -2
  354. package/dist/public-api/v1/public-api-error-response.d.ts +2 -0
  355. package/dist/public-api/v1/public-api-error-response.js +11 -0
  356. package/dist/public-api/v1/public-api-error-response.js.map +1 -0
  357. package/dist/push/abstract.push.d.ts +1 -0
  358. package/dist/push/abstract.push.js +3 -0
  359. package/dist/push/abstract.push.js.map +1 -1
  360. package/dist/push/sse.push.js +5 -1
  361. package/dist/push/sse.push.js.map +1 -1
  362. package/dist/push/websocket.push.js +3 -1
  363. package/dist/push/websocket.push.js.map +1 -1
  364. package/dist/response-helper.js +6 -29
  365. package/dist/response-helper.js.map +1 -1
  366. package/dist/scaling/pubsub/subscriber.service.d.ts +2 -0
  367. package/dist/scaling/pubsub/subscriber.service.js +17 -8
  368. package/dist/scaling/pubsub/subscriber.service.js.map +1 -1
  369. package/dist/scaling/redis/redis.types.d.ts +1 -1
  370. package/dist/services/ai-workflow-builder.service.d.ts +2 -2
  371. package/dist/services/ai-workflow-builder.service.js +4 -4
  372. package/dist/services/ai-workflow-builder.service.js.map +1 -1
  373. package/dist/services/ai.service.d.ts +4 -0
  374. package/dist/services/ai.service.js +20 -18
  375. package/dist/services/ai.service.js.map +1 -1
  376. package/dist/services/auth-strategy.registry.d.ts +7 -0
  377. package/dist/services/auth-strategy.registry.js +32 -0
  378. package/dist/services/auth-strategy.registry.js.map +1 -0
  379. package/dist/services/auth-strategy.types.d.ts +4 -0
  380. package/dist/services/auth-strategy.types.js +3 -0
  381. package/dist/services/auth-strategy.types.js.map +1 -0
  382. package/dist/services/credentials-tester.service.js +2 -0
  383. package/dist/services/credentials-tester.service.js.map +1 -1
  384. package/dist/services/db-clock.service.d.ts +10 -0
  385. package/dist/services/db-clock.service.js +48 -0
  386. package/dist/services/db-clock.service.js.map +1 -0
  387. package/dist/services/frontend.service.js +2 -0
  388. package/dist/services/frontend.service.js.map +1 -1
  389. package/dist/wait-tracker.d.ts +6 -2
  390. package/dist/wait-tracker.js +94 -63
  391. package/dist/wait-tracker.js.map +1 -1
  392. package/dist/webhooks/live-webhooks.js +24 -18
  393. package/dist/webhooks/live-webhooks.js.map +1 -1
  394. package/dist/webhooks/test-webhooks.js +96 -78
  395. package/dist/webhooks/test-webhooks.js.map +1 -1
  396. package/dist/webhooks/waiting-webhooks.js +27 -21
  397. package/dist/webhooks/waiting-webhooks.js.map +1 -1
  398. package/dist/webhooks/webhook-helpers.js +21 -6
  399. package/dist/webhooks/webhook-helpers.js.map +1 -1
  400. package/dist/webhooks/webhook-last-node-response-extractor.d.ts +5 -2
  401. package/dist/webhooks/webhook-last-node-response-extractor.js +5 -8
  402. package/dist/webhooks/webhook-last-node-response-extractor.js.map +1 -1
  403. package/dist/workflows/workflow-creation.service.js +4 -0
  404. package/dist/workflows/workflow-creation.service.js.map +1 -1
  405. package/dist/workflows/workflow-execution.service.js +1 -1
  406. package/dist/workflows/workflow-execution.service.js.map +1 -1
  407. package/dist/workflows/workflow-history/workflow-history.service.js +1 -0
  408. package/dist/workflows/workflow-history/workflow-history.service.js.map +1 -1
  409. package/dist/workflows/workflow-validation.service.js +3 -3
  410. package/dist/workflows/workflow-validation.service.js.map +1 -1
  411. package/dist/workflows/workflow.service.js +12 -1
  412. package/dist/workflows/workflow.service.js.map +1 -1
  413. package/dist/workflows/workflows.controller.d.ts +2 -2
  414. package/package.json +28 -25
@@ -0,0 +1,37 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.NodeStartHandler = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ const api_1 = require("@opentelemetry/api");
12
+ const otel_constants_1 = require("../otel.constants");
13
+ let NodeStartHandler = class NodeStartHandler {
14
+ handle(ctx, spans, tracer) {
15
+ const node = ctx.workflow.nodes.find((n) => n.name === ctx.nodeName);
16
+ if (!node)
17
+ return;
18
+ const workflowSpan = spans.getWorkflow(ctx.executionId);
19
+ const parentCtx = workflowSpan
20
+ ? api_1.trace.setSpan(api_1.context.active(), workflowSpan)
21
+ : api_1.context.active();
22
+ const span = tracer.startSpan('node.execute', {
23
+ attributes: {
24
+ [otel_constants_1.ATTR.NODE_ID]: node.id,
25
+ [otel_constants_1.ATTR.NODE_NAME]: node.name,
26
+ [otel_constants_1.ATTR.NODE_TYPE]: node.type,
27
+ [otel_constants_1.ATTR.NODE_TYPE_VERSION]: node.typeVersion,
28
+ },
29
+ }, parentCtx);
30
+ spans.addNode(ctx.executionId, node.id, span);
31
+ }
32
+ };
33
+ exports.NodeStartHandler = NodeStartHandler;
34
+ exports.NodeStartHandler = NodeStartHandler = __decorate([
35
+ (0, di_1.Service)()
36
+ ], NodeStartHandler);
37
+ //# sourceMappingURL=node-start.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-start.handler.js","sourceRoot":"","sources":["../../../../src/modules/otel/handlers/node-start.handler.ts"],"names":[],"mappings":";;;;;;;;;AACA,gCAAkC;AAClC,4CAAoD;AAGpD,sDAAyC;AAKlC,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC5B,MAAM,CAAC,GAA6B,EAAE,KAAmB,EAAE,MAAc;QACxE,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,YAAY;YAC7B,CAAC,CAAC,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC;YAC/C,CAAC,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC;QAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAC5B,cAAc,EACd;YACC,UAAU,EAAE;gBACX,CAAC,qBAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;gBACvB,CAAC,qBAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI;gBAC3B,CAAC,qBAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI;gBAC3B,CAAC,qBAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,WAAW;aAC1C;SACD,EACD,SAAS,CACT,CAAC;QAEF,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;CACD,CAAA;AAzBY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,YAAO,GAAE;GACG,gBAAgB,CAyB5B"}
@@ -3,5 +3,6 @@ import type { SpanHandler } from './interfaces';
3
3
  import type { SpanRegistry } from '../span-registry';
4
4
  export declare class WorkflowEndHandler implements SpanHandler<WorkflowExecuteAfterContext> {
5
5
  handle(ctx: WorkflowExecuteAfterContext, spans: SpanRegistry): void;
6
+ private endDanglingNodeSpans;
6
7
  private getErrorType;
7
8
  }
@@ -35,8 +35,16 @@ let WorkflowEndHandler = class WorkflowEndHandler {
35
35
  span.setStatus({ code: api_1.SpanStatusCode.OK });
36
36
  }
37
37
  span.end();
38
+ this.endDanglingNodeSpans(ctx.executionId, spans);
38
39
  spans.cleanup(ctx.executionId);
39
40
  }
41
+ endDanglingNodeSpans(executionId, spans) {
42
+ for (const span of spans.findUnendedNodeSpans(executionId)) {
43
+ span.setAttribute(otel_constants_1.ATTR.NODE_TERMINATION_REASON, 'workflow_cancelled');
44
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR });
45
+ span.end();
46
+ }
47
+ }
40
48
  getErrorType(error) {
41
49
  if (!isRecord(error))
42
50
  return 'UnknownError';
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-end.handler.js","sourceRoot":"","sources":["../../../../src/modules/otel/handlers/workflow-end.handler.ts"],"names":[],"mappings":";;;;;;;;;AACA,gCAAkC;AAClC,4CAAoD;AAEpD,sDAAyC;AAKlC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC9B,MAAM,CAAC,GAAgC,EAAE,KAAmB;QAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,UAAU,GAAqC;YACpD,CAAC,qBAAI,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;YACvC,CAAC,qBAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;YAC3C,CAAC,qBAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;SACvD,CAAC;QACF,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,UAAU,CAAC,qBAAI,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE/B,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YAE/C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAChD,IAAI,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,CAAC,qBAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACxE,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAEO,YAAY,CAAC,KAAc;QAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,cAAc,CAAC;QAE5C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QAE/E,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACtC,IAAI,OAAO,WAAW,KAAK,UAAU;YAAE,OAAO,cAAc,CAAC;QAE7D,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC;QACzC,IACC,OAAO,eAAe,KAAK,QAAQ;YACnC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE;YAC7B,eAAe,KAAK,QAAQ,EAC3B,CAAC;YACF,OAAO,eAAe,CAAC;QACxB,CAAC;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;CACD,CAAA;AAlDY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,YAAO,GAAE;GACG,kBAAkB,CAkD9B;AAED,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"workflow-end.handler.js","sourceRoot":"","sources":["../../../../src/modules/otel/handlers/workflow-end.handler.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,21 @@
1
1
  import { Logger } from '@n8n/backend-common';
2
- import type { WorkflowExecuteBeforeContext, WorkflowExecuteAfterContext } from '@n8n/decorators';
2
+ import type { WorkflowExecuteBeforeContext, WorkflowExecuteAfterContext, NodeExecuteBeforeContext, NodeExecuteAfterContext } from '@n8n/decorators';
3
+ import { NodeEndHandler } from './handlers/node-end.handler';
4
+ import { NodeStartHandler } from './handlers/node-start.handler';
3
5
  import { WorkflowEndHandler } from './handlers/workflow-end.handler';
4
6
  import { WorkflowStartHandler } from './handlers/workflow-start.handler';
7
+ import { OtelConfig } from './otel.config';
5
8
  export declare class N8nInstrumentation {
9
+ private readonly config;
6
10
  private readonly logger;
7
11
  private readonly spans;
8
12
  private readonly tracer;
9
13
  private readonly lifecycleDispatchers;
10
14
  private readonly loggedFailureEvents;
11
- constructor(workflowStartHandler: WorkflowStartHandler, workflowEndHandler: WorkflowEndHandler, logger: Logger);
15
+ constructor(workflowStartHandler: WorkflowStartHandler, workflowEndHandler: WorkflowEndHandler, nodeStartHandler: NodeStartHandler, nodeEndHandler: NodeEndHandler, config: OtelConfig, logger: Logger);
12
16
  onWorkflowStart(ctx: WorkflowExecuteBeforeContext): void;
13
17
  onWorkflowEnd(ctx: WorkflowExecuteAfterContext): void;
18
+ onNodeStart(ctx: NodeExecuteBeforeContext): void;
19
+ onNodeEnd(ctx: NodeExecuteAfterContext): void;
14
20
  private executeLifecycleHandler;
15
21
  }
@@ -14,12 +14,16 @@ const backend_common_1 = require("@n8n/backend-common");
14
14
  const decorators_1 = require("@n8n/decorators");
15
15
  const di_1 = require("@n8n/di");
16
16
  const api_1 = require("@opentelemetry/api");
17
+ const node_end_handler_1 = require("./handlers/node-end.handler");
18
+ const node_start_handler_1 = require("./handlers/node-start.handler");
17
19
  const workflow_end_handler_1 = require("./handlers/workflow-end.handler");
18
20
  const workflow_start_handler_1 = require("./handlers/workflow-start.handler");
21
+ const otel_config_1 = require("./otel.config");
19
22
  const span_registry_1 = require("./span-registry");
20
23
  const TRACER_NAME = 'n8n-workflow';
21
24
  let N8nInstrumentation = class N8nInstrumentation {
22
- constructor(workflowStartHandler, workflowEndHandler, logger) {
25
+ constructor(workflowStartHandler, workflowEndHandler, nodeStartHandler, nodeEndHandler, config, logger) {
26
+ this.config = config;
23
27
  this.logger = logger;
24
28
  this.spans = new span_registry_1.SpanRegistry();
25
29
  this.tracer = api_1.trace.getTracer(TRACER_NAME);
@@ -27,6 +31,8 @@ let N8nInstrumentation = class N8nInstrumentation {
27
31
  this.lifecycleDispatchers = {
28
32
  workflowExecuteBefore: (ctx) => workflowStartHandler.handle(ctx, this.spans, this.tracer),
29
33
  workflowExecuteAfter: (ctx) => workflowEndHandler.handle(ctx, this.spans),
34
+ nodeExecuteBefore: (ctx) => nodeStartHandler.handle(ctx, this.spans, this.tracer),
35
+ nodeExecuteAfter: (ctx) => nodeEndHandler.handle(ctx, this.spans),
30
36
  };
31
37
  }
32
38
  onWorkflowStart(ctx) {
@@ -35,6 +41,16 @@ let N8nInstrumentation = class N8nInstrumentation {
35
41
  onWorkflowEnd(ctx) {
36
42
  this.executeLifecycleHandler('workflowExecuteAfter', ctx);
37
43
  }
44
+ onNodeStart(ctx) {
45
+ if (!this.config.includeNodeSpans)
46
+ return;
47
+ this.executeLifecycleHandler('nodeExecuteBefore', ctx);
48
+ }
49
+ onNodeEnd(ctx) {
50
+ if (!this.config.includeNodeSpans)
51
+ return;
52
+ this.executeLifecycleHandler('nodeExecuteAfter', ctx);
53
+ }
38
54
  executeLifecycleHandler(event, ctx) {
39
55
  try {
40
56
  this.lifecycleDispatchers[event](ctx);
@@ -63,10 +79,25 @@ __decorate([
63
79
  __metadata("design:paramtypes", [Object]),
64
80
  __metadata("design:returntype", void 0)
65
81
  ], N8nInstrumentation.prototype, "onWorkflowEnd", null);
82
+ __decorate([
83
+ (0, decorators_1.OnLifecycleEvent)('nodeExecuteBefore'),
84
+ __metadata("design:type", Function),
85
+ __metadata("design:paramtypes", [Object]),
86
+ __metadata("design:returntype", void 0)
87
+ ], N8nInstrumentation.prototype, "onNodeStart", null);
88
+ __decorate([
89
+ (0, decorators_1.OnLifecycleEvent)('nodeExecuteAfter'),
90
+ __metadata("design:type", Function),
91
+ __metadata("design:paramtypes", [Object]),
92
+ __metadata("design:returntype", void 0)
93
+ ], N8nInstrumentation.prototype, "onNodeEnd", null);
66
94
  exports.N8nInstrumentation = N8nInstrumentation = __decorate([
67
95
  (0, di_1.Service)(),
68
96
  __metadata("design:paramtypes", [workflow_start_handler_1.WorkflowStartHandler,
69
97
  workflow_end_handler_1.WorkflowEndHandler,
98
+ node_start_handler_1.NodeStartHandler,
99
+ node_end_handler_1.NodeEndHandler,
100
+ otel_config_1.OtelConfig,
70
101
  backend_common_1.Logger])
71
102
  ], N8nInstrumentation);
72
103
  //# sourceMappingURL=n8n-instrumentation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"n8n-instrumentation.js","sourceRoot":"","sources":["../../../src/modules/otel/n8n-instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,gDAAmD;AAEnD,gCAAkC;AAClC,4CAA2C;AAE3C,0EAAqE;AACrE,8EAAyE;AACzE,mDAA+C;AAE/C,MAAM,WAAW,GAAG,cAAc,CAAC;AAU5B,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAM9B,YACC,oBAA0C,EAC1C,kBAAsC,EACrB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QARf,UAAK,GAAG,IAAI,4BAAY,EAAE,CAAC;QAC3B,WAAM,GAAG,WAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEtC,wBAAmB,GAAG,IAAI,GAAG,EAAkC,CAAC;QAOhF,IAAI,CAAC,oBAAoB,GAAG;YAC3B,qBAAqB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACzF,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;SACzE,CAAC;IACH,CAAC;IAGD,eAAe,CAAC,GAAiC;QAChD,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAGD,aAAa,CAAC,GAAgC;QAC7C,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAEO,uBAAuB,CAC9B,KAAQ,EACR,GAA6B;QAE7B,IAAI,CAAC;YACJ,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAO;YAEhD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;gBAC9D,KAAK;gBACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;CACD,CAAA;AA3CY,gDAAkB;AAkB9B;IADC,IAAA,6BAAgB,EAAC,uBAAuB,CAAC;;;;yDAGzC;AAGD;IADC,IAAA,6BAAgB,EAAC,sBAAsB,CAAC;;;;uDAGxC;6BAzBW,kBAAkB;IAD9B,IAAA,YAAO,GAAE;qCAQc,6CAAoB;QACtB,yCAAkB;QACb,uBAAM;GATpB,kBAAkB,CA2C9B"}
1
+ {"version":3,"file":"n8n-instrumentation.js","sourceRoot":"","sources":["../../../src/modules/otel/n8n-instrumentation.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,5 @@ export declare class OtelConfig {
6
6
  exporterServiceName: string;
7
7
  tracesSampleRate: number;
8
8
  startupConnectivityTimeoutMs: number;
9
+ includeNodeSpans: boolean;
9
10
  }
@@ -20,6 +20,7 @@ let OtelConfig = class OtelConfig {
20
20
  this.exporterServiceName = 'n8n';
21
21
  this.tracesSampleRate = 1.0;
22
22
  this.startupConnectivityTimeoutMs = 2_000;
23
+ this.includeNodeSpans = true;
23
24
  }
24
25
  };
25
26
  exports.OtelConfig = OtelConfig;
@@ -51,6 +52,10 @@ __decorate([
51
52
  (0, config_1.Env)('N8N_OTEL_STARTUP_CONNECTIVITY_TIMEOUT_MS'),
52
53
  __metadata("design:type", Number)
53
54
  ], OtelConfig.prototype, "startupConnectivityTimeoutMs", void 0);
55
+ __decorate([
56
+ (0, config_1.Env)('N8N_OTEL_TRACES_INCLUDE_NODE_SPANS'),
57
+ __metadata("design:type", Boolean)
58
+ ], OtelConfig.prototype, "includeNodeSpans", void 0);
54
59
  exports.OtelConfig = OtelConfig = __decorate([
55
60
  config_1.Config
56
61
  ], OtelConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"otel.config.js","sourceRoot":"","sources":["../../../src/modules/otel/otel.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAGnC,IAAM,UAAU,GAAhB,MAAM,UAAU;IAAhB;QAEN,YAAO,GAAY,KAAK,CAAC;QAGzB,qBAAgB,GAAW,uBAAuB,CAAC;QAGnD,wBAAmB,GAAW,YAAY,CAAC;QAG3C,oBAAe,GAAW,EAAE,CAAC;QAG7B,wBAAmB,GAAW,KAAK,CAAC;QAGpC,qBAAgB,GAAW,GAAG,CAAC;QAG/B,iCAA4B,GAAW,KAAK,CAAC;IAC9C,CAAC;CAAA,CAAA;AArBY,gCAAU;AAEtB;IADC,IAAA,YAAG,EAAC,kBAAkB,CAAC;;2CACC;AAGzB;IADC,IAAA,YAAG,EAAC,iCAAiC,CAAC;;oDACY;AAGnD;IADC,IAAA,YAAG,EAAC,qCAAqC,CAAC;;uDACA;AAG3C;IADC,IAAA,YAAG,EAAC,gCAAgC,CAAC;;mDACT;AAG7B;IADC,IAAA,YAAG,EAAC,gCAAgC,CAAC;;uDACF;AAGpC;IADC,IAAA,YAAG,EAAC,6BAA6B,CAAC;;oDACJ;AAG/B;IADC,IAAA,YAAG,EAAC,0CAA0C,CAAC;;gEACH;qBApBjC,UAAU;IADtB,eAAM;GACM,UAAU,CAqBtB"}
1
+ {"version":3,"file":"otel.config.js","sourceRoot":"","sources":["../../../src/modules/otel/otel.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAGnC,IAAM,UAAU,GAAhB,MAAM,UAAU;IAAhB;QAEN,YAAO,GAAY,KAAK,CAAC;QAGzB,qBAAgB,GAAW,uBAAuB,CAAC;QAGnD,wBAAmB,GAAW,YAAY,CAAC;QAG3C,oBAAe,GAAW,EAAE,CAAC;QAG7B,wBAAmB,GAAW,KAAK,CAAC;QAGpC,qBAAgB,GAAW,GAAG,CAAC;QAG/B,iCAA4B,GAAW,KAAK,CAAC;QAG7C,qBAAgB,GAAY,IAAI,CAAC;IAClC,CAAC;CAAA,CAAA;AAxBY,gCAAU;AAEtB;IADC,IAAA,YAAG,EAAC,kBAAkB,CAAC;;2CACC;AAGzB;IADC,IAAA,YAAG,EAAC,iCAAiC,CAAC;;oDACY;AAGnD;IADC,IAAA,YAAG,EAAC,qCAAqC,CAAC;;uDACA;AAG3C;IADC,IAAA,YAAG,EAAC,gCAAgC,CAAC;;mDACT;AAG7B;IADC,IAAA,YAAG,EAAC,gCAAgC,CAAC;;uDACF;AAGpC;IADC,IAAA,YAAG,EAAC,6BAA6B,CAAC;;oDACJ;AAG/B;IADC,IAAA,YAAG,EAAC,0CAA0C,CAAC;;gEACH;AAG7C;IADC,IAAA,YAAG,EAAC,oCAAoC,CAAC;;oDACT;qBAvBrB,UAAU;IADtB,eAAM;GACM,UAAU,CAwBtB"}
@@ -12,4 +12,11 @@ export declare const ATTR: {
12
12
  readonly EXECUTION_IS_RETRY: "n8n.execution.is_retry";
13
13
  readonly EXECUTION_RETRY_OF: "n8n.execution.retry_of";
14
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";
15
22
  };
@@ -16,5 +16,12 @@ exports.ATTR = {
16
16
  EXECUTION_IS_RETRY: 'n8n.execution.is_retry',
17
17
  EXECUTION_RETRY_OF: 'n8n.execution.retry_of',
18
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',
19
26
  };
20
27
  //# sourceMappingURL=otel.constants.js.map
@@ -1 +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;CACvC,CAAC"}
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"}
@@ -11,8 +11,8 @@ export declare class OtelService {
11
11
  constructor(config: OtelConfig, instanceSettings: InstanceSettings, logger: Logger);
12
12
  init(): void;
13
13
  shutdown(): Promise<void>;
14
+ parseOtlpHeaders(headersToSplit: string): Record<string, string>;
14
15
  private configureDiagnosticsLogger;
15
- private parseOtlpHeaders;
16
16
  private buildOtlpTracesUrl;
17
17
  private checkEndpointReachability;
18
18
  }
@@ -33,8 +33,8 @@ let OtelService = OtelService_1 = class OtelService {
33
33
  if (!this.config.enabled)
34
34
  return;
35
35
  this.configureDiagnosticsLogger();
36
- const otlpTracesUrl = this.buildOtlpTracesUrl();
37
- const otlpHeaders = this.parseOtlpHeaders();
36
+ const otlpTracesUrl = this.buildOtlpTracesUrl(this.config.exporterEndpoint, this.config.exporterTracingPath);
37
+ const otlpHeaders = this.parseOtlpHeaders(this.config.exporterHeaders);
38
38
  this.sdk = new sdk_node_1.NodeSDK({
39
39
  resource: (0, resources_1.resourceFromAttributes)({
40
40
  [otel_constants_1.ATTR.OTEL_SERVICE_NAME]: this.config.exporterServiceName,
@@ -54,23 +54,9 @@ let OtelService = OtelService_1 = class OtelService {
54
54
  async shutdown() {
55
55
  await this.sdk?.shutdown();
56
56
  }
57
- configureDiagnosticsLogger() {
58
- if (OtelService_1.isDiagnosticsLoggerConfigured)
59
- return;
60
- const diagnosticsLogger = {
61
- error: (...args) => this.logger.error('OpenTelemetry diagnostics error', { args }),
62
- warn: (...args) => this.logger.warn('OpenTelemetry diagnostics warning', { args }),
63
- info: (...args) => this.logger.info('OpenTelemetry diagnostics info', { args }),
64
- debug: (...args) => this.logger.debug('OpenTelemetry diagnostics debug', { args }),
65
- verbose: (...args) => this.logger.debug('OpenTelemetry diagnostics verbose', { args }),
66
- };
67
- api_1.diag.setLogger(diagnosticsLogger, api_1.DiagLogLevel.WARN);
68
- OtelService_1.isDiagnosticsLoggerConfigured = true;
69
- }
70
- parseOtlpHeaders() {
71
- const exporterHeaders = this.config.exporterHeaders;
57
+ parseOtlpHeaders(headersToSplit) {
72
58
  const headers = {};
73
- for (const pair of exporterHeaders.split(',')) {
59
+ for (const pair of headersToSplit.split(',')) {
74
60
  const trimmedPair = pair.trim();
75
61
  if (!trimmedPair)
76
62
  continue;
@@ -88,11 +74,22 @@ let OtelService = OtelService_1 = class OtelService {
88
74
  }
89
75
  return headers;
90
76
  }
91
- buildOtlpTracesUrl() {
92
- const exporterEndpoint = this.config.exporterEndpoint;
93
- const exporterTracingPath = this.config.exporterTracingPath;
94
- const exporterEndpointWithoutTrailingSlash = exporterEndpoint.replace(/\/+$/, '');
95
- return `${exporterEndpointWithoutTrailingSlash}${exporterTracingPath}`;
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}`;
96
93
  }
97
94
  async checkEndpointReachability(url) {
98
95
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"otel.service.js","sourceRoot":"","sources":["../../../src/modules/otel/otel.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otel.service.js","sourceRoot":"","sources":["../../../src/modules/otel/otel.service.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,6 @@ export declare class SpanRegistry {
9
9
  addNode(executionId: string, nodeId: string, span: Span): void;
10
10
  getNode(executionId: string, nodeId: string): Span | undefined;
11
11
  removeNode(executionId: string, nodeId: string): Span | undefined;
12
+ findUnendedNodeSpans(executionId: string): Span[];
12
13
  cleanup(executionId: string): void;
13
14
  }
@@ -35,6 +35,17 @@ class SpanRegistry {
35
35
  this.spans.delete(key);
36
36
  return span;
37
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
+ }
38
49
  cleanup(executionId) {
39
50
  for (const key of this.spans.keys()) {
40
51
  if (key === executionId || key.startsWith(`${executionId}:`)) {
@@ -1 +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;IA+CzC,CAAC;IA7CA,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,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;AAhDD,oCAgDC"}
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"}
@@ -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