n8n 2.30.5 → 2.31.1

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 (532) hide show
  1. package/dist/agent-library-bundle.js +9 -0
  2. package/dist/auth/auth.service.js +1 -0
  3. package/dist/auth/auth.service.js.map +1 -1
  4. package/dist/blob-storage/azure-byte-store.ee.d.ts +1 -1
  5. package/dist/blob-storage/azure-byte-store.ee.js +3 -18
  6. package/dist/blob-storage/azure-byte-store.ee.js.map +1 -1
  7. package/dist/blob-storage/json-store.js +3 -0
  8. package/dist/blob-storage/json-store.js.map +1 -1
  9. package/dist/blob-storage/s3-byte-store.ee.d.ts +1 -1
  10. package/dist/blob-storage/s3-byte-store.ee.js +2 -17
  11. package/dist/blob-storage/s3-byte-store.ee.js.map +1 -1
  12. package/dist/build.tsbuildinfo +1 -1
  13. package/dist/commands/base-command.d.ts +2 -2
  14. package/dist/commands/base-command.js +5 -5
  15. package/dist/commands/base-command.js.map +1 -1
  16. package/dist/commands/start.js +2 -0
  17. package/dist/commands/start.js.map +1 -1
  18. package/dist/constants/workflow-reviews.d.ts +4 -0
  19. package/dist/constants/workflow-reviews.js +14 -0
  20. package/dist/constants/workflow-reviews.js.map +1 -0
  21. package/dist/constants.js +2 -0
  22. package/dist/constants.js.map +1 -1
  23. package/dist/controllers/e2e.controller.js +1 -0
  24. package/dist/controllers/e2e.controller.js.map +1 -1
  25. package/dist/controllers/security-settings.controller.d.ts +15 -10
  26. package/dist/controllers/security-settings.controller.js +41 -65
  27. package/dist/controllers/security-settings.controller.js.map +1 -1
  28. package/dist/controllers/users.controller.d.ts +2 -2
  29. package/dist/credentials/credential-connection-status-provider.interface.d.ts +2 -1
  30. package/dist/credentials/credential-connection-status-proxy.d.ts +2 -1
  31. package/dist/credentials/credential-connection-status-proxy.js +7 -2
  32. package/dist/credentials/credential-connection-status-proxy.js.map +1 -1
  33. package/dist/credentials/credentials.controller.js +5 -5
  34. package/dist/credentials/credentials.controller.js.map +1 -1
  35. package/dist/credentials/credentials.service.d.ts +1 -0
  36. package/dist/credentials/credentials.service.ee.d.ts +3 -1
  37. package/dist/credentials/credentials.service.ee.js +10 -2
  38. package/dist/credentials/credentials.service.ee.js.map +1 -1
  39. package/dist/credentials/credentials.service.js +14 -0
  40. package/dist/credentials/credentials.service.js.map +1 -1
  41. package/dist/eventbus/event-message-classes/index.d.ts +2 -2
  42. package/dist/eventbus/event-message-classes/index.js +5 -2
  43. package/dist/eventbus/event-message-classes/index.js.map +1 -1
  44. package/dist/events/maps/relay.event-map.d.ts +23 -2
  45. package/dist/events/relays/log-streaming.event-relay.d.ts +3 -0
  46. package/dist/events/relays/log-streaming.event-relay.js +37 -2
  47. package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
  48. package/dist/events/relays/telemetry.event-relay.d.ts +3 -0
  49. package/dist/events/relays/telemetry.event-relay.js +88 -10
  50. package/dist/events/relays/telemetry.event-relay.js.map +1 -1
  51. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +21 -4
  52. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  53. package/dist/executions/execution-data/db-store.d.ts +8 -15
  54. package/dist/executions/execution-data/db-store.js +12 -25
  55. package/dist/executions/execution-data/db-store.js.map +1 -1
  56. package/dist/executions/execution-data/execution-data-json-store.d.ts +7 -0
  57. package/dist/executions/execution-data/execution-data-json-store.js +45 -0
  58. package/dist/executions/execution-data/execution-data-json-store.js.map +1 -0
  59. package/dist/executions/execution-data/types.d.ts +3 -14
  60. package/dist/executions/execution-data/types.js.map +1 -1
  61. package/dist/executions/execution-persistence.d.ts +7 -14
  62. package/dist/executions/execution-persistence.js +40 -88
  63. package/dist/executions/execution-persistence.js.map +1 -1
  64. package/dist/interfaces.d.ts +4 -1
  65. package/dist/load-nodes-and-credentials.js +1 -1
  66. package/dist/load-nodes-and-credentials.js.map +1 -1
  67. package/dist/metrics/prometheus/prometheus.service.d.ts +2 -1
  68. package/dist/metrics/prometheus/prometheus.service.js +5 -2
  69. package/dist/metrics/prometheus/prometheus.service.js.map +1 -1
  70. package/dist/metrics/prometheus/scheduler-metrics.service.d.ts +35 -0
  71. package/dist/metrics/prometheus/scheduler-metrics.service.js +187 -0
  72. package/dist/metrics/prometheus/scheduler-metrics.service.js.map +1 -0
  73. package/dist/modules/agents/adapters/agents-credential-provider.d.ts +1 -0
  74. package/dist/modules/agents/adapters/agents-credential-provider.js +13 -3
  75. package/dist/modules/agents/adapters/agents-credential-provider.js.map +1 -1
  76. package/dist/modules/agents/agent-config.service.js +11 -1
  77. package/dist/modules/agents/agent-config.service.js.map +1 -1
  78. package/dist/modules/agents/agent-knowledge.controller.js +1 -1
  79. package/dist/modules/agents/agent-knowledge.controller.js.map +1 -1
  80. package/dist/modules/agents/agent-upload.middleware.d.ts +2 -0
  81. package/dist/modules/agents/agent-upload.middleware.js +11 -0
  82. package/dist/modules/agents/agent-upload.middleware.js.map +1 -1
  83. package/dist/modules/agents/agent-validation.service.js +19 -2
  84. package/dist/modules/agents/agent-validation.service.js.map +1 -1
  85. package/dist/modules/agents/agent-vector-stores.controller.d.ts +11 -0
  86. package/dist/modules/agents/agent-vector-stores.controller.js +41 -0
  87. package/dist/modules/agents/agent-vector-stores.controller.js.map +1 -0
  88. package/dist/modules/agents/agent-vector-stores.service.d.ts +9 -0
  89. package/dist/modules/agents/agent-vector-stores.service.js +195 -0
  90. package/dist/modules/agents/agent-vector-stores.service.js.map +1 -0
  91. package/dist/modules/agents/agents-config.controller.d.ts +112 -69
  92. package/dist/modules/agents/agents.controller.d.ts +5 -1
  93. package/dist/modules/agents/agents.controller.js +11 -0
  94. package/dist/modules/agents/agents.controller.js.map +1 -1
  95. package/dist/modules/agents/agents.module.js +1 -0
  96. package/dist/modules/agents/agents.module.js.map +1 -1
  97. package/dist/modules/agents/agents.service.d.ts +7 -2
  98. package/dist/modules/agents/agents.service.js +65 -2
  99. package/dist/modules/agents/agents.service.js.map +1 -1
  100. package/dist/modules/agents/attachable-workflows.service.d.ts +12 -0
  101. package/dist/modules/agents/attachable-workflows.service.js +58 -0
  102. package/dist/modules/agents/attachable-workflows.service.js.map +1 -0
  103. package/dist/modules/agents/builder/agents-builder-model-recommendations.js +3 -2
  104. package/dist/modules/agents/builder/agents-builder-model-recommendations.js.map +1 -1
  105. package/dist/modules/agents/builder/agents-builder-prompts.d.ts +4 -4
  106. package/dist/modules/agents/builder/agents-builder-prompts.js +40 -27
  107. package/dist/modules/agents/builder/agents-builder-prompts.js.map +1 -1
  108. package/dist/modules/agents/builder/agents-builder-tools.service.d.ts +3 -5
  109. package/dist/modules/agents/builder/agents-builder-tools.service.js +48 -194
  110. package/dist/modules/agents/builder/agents-builder-tools.service.js.map +1 -1
  111. package/dist/modules/agents/builder/agents-builder.service.d.ts +10 -3
  112. package/dist/modules/agents/builder/agents-builder.service.js +22 -12
  113. package/dist/modules/agents/builder/agents-builder.service.js.map +1 -1
  114. package/dist/modules/agents/builder/builder-tool-names.js.map +1 -1
  115. package/dist/modules/agents/builder/errors.d.ts +3 -2
  116. package/dist/modules/agents/builder/errors.js +3 -2
  117. package/dist/modules/agents/builder/errors.js.map +1 -1
  118. package/dist/modules/agents/builder/get-resource-locator-options.tool.d.ts +99 -2
  119. package/dist/modules/agents/builder/get-resource-locator-options.tool.js +103 -101
  120. package/dist/modules/agents/builder/get-resource-locator-options.tool.js.map +1 -1
  121. package/dist/modules/agents/builder/interactive/ask-credential.tool.js +48 -32
  122. package/dist/modules/agents/builder/interactive/ask-credential.tool.js.map +1 -1
  123. package/dist/modules/agents/builder/interactive/ask-questions.tool.d.ts +2 -0
  124. package/dist/modules/agents/builder/interactive/ask-questions.tool.js +108 -0
  125. package/dist/modules/agents/builder/interactive/ask-questions.tool.js.map +1 -0
  126. package/dist/modules/agents/builder/interactive/configure-channel.tool.d.ts +7 -0
  127. package/dist/modules/agents/builder/interactive/configure-channel.tool.js +52 -0
  128. package/dist/modules/agents/builder/interactive/configure-channel.tool.js.map +1 -0
  129. package/dist/modules/agents/builder/interactive/index.d.ts +2 -2
  130. package/dist/modules/agents/builder/interactive/index.js +5 -5
  131. package/dist/modules/agents/builder/interactive/index.js.map +1 -1
  132. package/dist/modules/agents/builder/interactive/resolve-llm.tool.js +2 -2
  133. package/dist/modules/agents/builder/interactive/resolve-llm.tool.js.map +1 -1
  134. package/dist/modules/agents/builder/prompts/config-mutation.prompt.js +1 -1
  135. package/dist/modules/agents/builder/prompts/config-rules.prompt.js +2 -2
  136. package/dist/modules/agents/builder/prompts/llm-selection.prompt.js +10 -10
  137. package/dist/modules/agents/builder/prompts/llm-selection.prompt.js.map +1 -1
  138. package/dist/modules/agents/builder/prompts/memory.prompt.d.ts +1 -1
  139. package/dist/modules/agents/builder/prompts/memory.prompt.js +1 -1
  140. package/dist/modules/agents/builder/search-mcp-servers.tool.js +1 -63
  141. package/dist/modules/agents/builder/search-mcp-servers.tool.js.map +1 -1
  142. package/dist/modules/agents/builder/skills/index.d.ts +1 -1
  143. package/dist/modules/agents/builder/skills/index.js +5 -1
  144. package/dist/modules/agents/builder/skills/index.js.map +1 -1
  145. package/dist/modules/agents/builder/skills/integrations.skill.js +15 -6
  146. package/dist/modules/agents/builder/skills/integrations.skill.js.map +1 -1
  147. package/dist/modules/agents/builder/skills/mcp.skill.js +2 -2
  148. package/dist/modules/agents/builder/skills/mcp.skill.js.map +1 -1
  149. package/dist/modules/agents/builder/skills/resource-locators.skill.js +2 -2
  150. package/dist/modules/agents/builder/skills/resource-locators.skill.js.map +1 -1
  151. package/dist/modules/agents/builder/skills/sub-agents.skill.js +7 -5
  152. package/dist/modules/agents/builder/skills/sub-agents.skill.js.map +1 -1
  153. package/dist/modules/agents/builder/skills/target-skills.skill.js +5 -4
  154. package/dist/modules/agents/builder/skills/target-skills.skill.js.map +1 -1
  155. package/dist/modules/agents/builder/skills/target-tasks.skill.js +5 -5
  156. package/dist/modules/agents/builder/skills/target-tasks.skill.js.map +1 -1
  157. package/dist/modules/agents/instance-ai-builder-delegate.adapter.d.ts +14 -0
  158. package/dist/modules/agents/instance-ai-builder-delegate.adapter.js +96 -0
  159. package/dist/modules/agents/instance-ai-builder-delegate.adapter.js.map +1 -0
  160. package/dist/modules/agents/integrations/integration-action-executor.d.ts +72 -72
  161. package/dist/modules/agents/integrations/integration-tool-definitions.d.ts +574 -574
  162. package/dist/modules/agents/json-config/embedding-credential.d.ts +4 -0
  163. package/dist/modules/agents/json-config/embedding-credential.js +25 -0
  164. package/dist/modules/agents/json-config/embedding-credential.js.map +1 -0
  165. package/dist/modules/agents/json-config/from-json-config.d.ts +2 -6
  166. package/dist/modules/agents/json-config/from-json-config.js +16 -16
  167. package/dist/modules/agents/json-config/from-json-config.js.map +1 -1
  168. package/dist/modules/agents/json-config/model-config.js +2 -2
  169. package/dist/modules/agents/json-config/model-config.js.map +1 -1
  170. package/dist/modules/agents/json-config/vector-store-factory.d.ts +5 -0
  171. package/dist/modules/agents/json-config/vector-store-factory.js +138 -0
  172. package/dist/modules/agents/json-config/vector-store-factory.js.map +1 -0
  173. package/dist/modules/breaking-changes/rules/index.d.ts +8 -0
  174. package/dist/modules/breaking-changes/rules/index.js +8 -0
  175. package/dist/modules/breaking-changes/rules/index.js.map +1 -1
  176. package/dist/modules/breaking-changes/rules/v3/compression-node-limits.rule.d.ts +6 -0
  177. package/dist/modules/breaking-changes/rules/v3/compression-node-limits.rule.js +59 -0
  178. package/dist/modules/breaking-changes/rules/v3/compression-node-limits.rule.js.map +1 -0
  179. package/dist/modules/breaking-changes/rules/v3/docker-only-deployment.rule.d.ts +9 -0
  180. package/dist/modules/breaking-changes/rules/v3/docker-only-deployment.rule.js +57 -0
  181. package/dist/modules/breaking-changes/rules/v3/docker-only-deployment.rule.js.map +1 -0
  182. package/dist/modules/breaking-changes/rules/v3/get-paired-item.rule.d.ts +10 -0
  183. package/dist/modules/breaking-changes/rules/v3/get-paired-item.rule.js +53 -0
  184. package/dist/modules/breaking-changes/rules/v3/get-paired-item.rule.js.map +1 -0
  185. package/dist/modules/breaking-changes/rules/v3/in-memory-binary-data.rule.d.ts +9 -0
  186. package/dist/modules/breaking-changes/rules/v3/in-memory-binary-data.rule.js +56 -0
  187. package/dist/modules/breaking-changes/rules/v3/in-memory-binary-data.rule.js.map +1 -0
  188. package/dist/modules/breaking-changes/rules/v3/offload-manual-executions.rule.d.ts +9 -0
  189. package/dist/modules/breaking-changes/rules/v3/offload-manual-executions.rule.js +57 -0
  190. package/dist/modules/breaking-changes/rules/v3/offload-manual-executions.rule.js.map +1 -0
  191. package/dist/modules/breaking-changes/rules/v3/task-runner-task-timeout.rule.d.ts +6 -0
  192. package/dist/modules/breaking-changes/rules/v3/task-runner-task-timeout.rule.js +50 -0
  193. package/dist/modules/breaking-changes/rules/v3/task-runner-task-timeout.rule.js.map +1 -0
  194. package/dist/modules/breaking-changes/rules/v3/unverified-packages.rule.d.ts +9 -0
  195. package/dist/modules/breaking-changes/rules/v3/unverified-packages.rule.js +57 -0
  196. package/dist/modules/breaking-changes/rules/v3/unverified-packages.rule.js.map +1 -0
  197. package/dist/modules/breaking-changes/rules/v3/workflow-import-url-removed.rule.d.ts +6 -0
  198. package/dist/modules/breaking-changes/rules/v3/workflow-import-url-removed.rule.js +47 -0
  199. package/dist/modules/breaking-changes/rules/v3/workflow-import-url-removed.rule.js.map +1 -0
  200. package/dist/modules/chat-hub/chat-hub.module.d.ts +1 -1
  201. package/dist/modules/chat-hub/chat-hub.settings.controller.d.ts +3 -3
  202. package/dist/modules/data-table/data-table-ddl.service.d.ts +2 -0
  203. package/dist/modules/data-table/data-table-ddl.service.js +16 -0
  204. package/dist/modules/data-table/data-table-ddl.service.js.map +1 -1
  205. package/dist/modules/data-table/data-table.service.d.ts +6 -3
  206. package/dist/modules/data-table/data-table.service.js +19 -0
  207. package/dist/modules/data-table/data-table.service.js.map +1 -1
  208. package/dist/modules/data-table/utils/sql-utils.d.ts +1 -0
  209. package/dist/modules/data-table/utils/sql-utils.js +4 -0
  210. package/dist/modules/data-table/utils/sql-utils.js.map +1 -1
  211. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.d.ts +5 -2
  212. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js +32 -4
  213. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js.map +1 -1
  214. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.module.d.ts +0 -2
  215. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.module.js +1 -14
  216. package/dist/modules/dynamic-credentials.ee/dynamic-credentials.module.js.map +1 -1
  217. package/dist/modules/dynamic-credentials.ee/services/authorize-intent.service.d.ts +1 -0
  218. package/dist/modules/dynamic-credentials.ee/services/authorize-intent.service.js.map +1 -1
  219. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.d.ts +3 -1
  220. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js +8 -1
  221. package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js.map +1 -1
  222. package/dist/modules/dynamic-credentials.ee/services/credential-connection-status.service.d.ts +5 -3
  223. package/dist/modules/dynamic-credentials.ee/services/credential-connection-status.service.js +19 -7
  224. package/dist/modules/dynamic-credentials.ee/services/credential-connection-status.service.js.map +1 -1
  225. package/dist/modules/dynamic-credentials.ee/services/dynamic-credential-storage.service.js +1 -1
  226. package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.d.ts +9 -1
  227. package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.js +21 -1
  228. package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.js.map +1 -1
  229. package/dist/modules/favorites/dto/add-favorite.dto.d.ts +2 -2
  230. package/dist/modules/favorites/favorites.event-relay.js +2 -3
  231. package/dist/modules/favorites/favorites.event-relay.js.map +1 -1
  232. package/dist/modules/favorites/favorites.service.d.ts +4 -1
  233. package/dist/modules/favorites/favorites.service.js +28 -3
  234. package/dist/modules/favorites/favorites.service.js.map +1 -1
  235. package/dist/modules/instance-ai/eval/execution.service.d.ts +4 -1
  236. package/dist/modules/instance-ai/eval/execution.service.js +26 -3
  237. package/dist/modules/instance-ai/eval/execution.service.js.map +1 -1
  238. package/dist/modules/instance-ai/eval/mock-handler.js +1 -1
  239. package/dist/modules/instance-ai/eval/mock-handler.js.map +1 -1
  240. package/dist/modules/instance-ai/eval/mock-quirks.js +7 -0
  241. package/dist/modules/instance-ai/eval/mock-quirks.js.map +1 -1
  242. package/dist/modules/instance-ai/eval/pin-data-generator.js +17 -17
  243. package/dist/modules/instance-ai/eval/pin-data-generator.js.map +1 -1
  244. package/dist/modules/instance-ai/event-bus/in-process-event-bus.d.ts +17 -6
  245. package/dist/modules/instance-ai/event-bus/in-process-event-bus.js +153 -30
  246. package/dist/modules/instance-ai/event-bus/in-process-event-bus.js.map +1 -1
  247. package/dist/modules/instance-ai/instance-ai-memory.service.d.ts +7 -2
  248. package/dist/modules/instance-ai/instance-ai-memory.service.js +12 -1
  249. package/dist/modules/instance-ai/instance-ai-memory.service.js.map +1 -1
  250. package/dist/modules/instance-ai/instance-ai-settings.service.js +0 -7
  251. package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
  252. package/dist/modules/instance-ai/instance-ai-terminal-outcome.service.d.ts +4 -1
  253. package/dist/modules/instance-ai/instance-ai-terminal-outcome.service.js +1 -0
  254. package/dist/modules/instance-ai/instance-ai-terminal-outcome.service.js.map +1 -1
  255. package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +89 -3
  256. package/dist/modules/instance-ai/instance-ai.adapter.service.js +264 -29
  257. package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
  258. package/dist/modules/instance-ai/instance-ai.controller.js +9 -2
  259. package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
  260. package/dist/modules/instance-ai/instance-ai.service.d.ts +1 -1
  261. package/dist/modules/instance-ai/instance-ai.service.js +61 -108
  262. package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
  263. package/dist/modules/instance-ai/workflow-templates.service.d.ts +17 -0
  264. package/dist/modules/instance-ai/workflow-templates.service.js +63 -0
  265. package/dist/modules/instance-ai/workflow-templates.service.js.map +1 -0
  266. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination.ee.d.ts +1 -0
  267. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination.ee.js +2 -0
  268. package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination.ee.js.map +1 -1
  269. package/dist/modules/mcp/dto/update-workflows-availability.dto.d.ts +2 -0
  270. package/dist/modules/mcp/dto/update-workflows-availability.dto.js +1 -0
  271. package/dist/modules/mcp/dto/update-workflows-availability.dto.js.map +1 -1
  272. package/dist/modules/mcp/mcp-protected-resource.d.ts +4 -1
  273. package/dist/modules/mcp/mcp-protected-resource.js +13 -3
  274. package/dist/modules/mcp/mcp-protected-resource.js.map +1 -1
  275. package/dist/modules/mcp/mcp.config.d.ts +1 -0
  276. package/dist/modules/mcp/mcp.config.js +20 -0
  277. package/dist/modules/mcp/mcp.config.js.map +1 -1
  278. package/dist/modules/mcp/mcp.module.d.ts +1 -0
  279. package/dist/modules/mcp/mcp.module.js +3 -1
  280. package/dist/modules/mcp/mcp.module.js.map +1 -1
  281. package/dist/modules/mcp/mcp.settings.service.d.ts +1 -1
  282. package/dist/modules/mcp/mcp.settings.service.js +33 -18
  283. package/dist/modules/mcp/mcp.settings.service.js.map +1 -1
  284. package/dist/modules/mcp/tools/search-workflows.tool.js +4 -2
  285. package/dist/modules/mcp/tools/search-workflows.tool.js.map +1 -1
  286. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.d.ts +2 -0
  287. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +10 -5
  288. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -1
  289. package/dist/modules/mcp/tools/workflow-builder/restore-workflow-version.tool.js +4 -0
  290. package/dist/modules/mcp/tools/workflow-builder/restore-workflow-version.tool.js.map +1 -1
  291. package/dist/modules/mcp/tools/workflow-builder/skills-used.d.ts +1 -0
  292. package/dist/modules/mcp/tools/workflow-builder/skills-used.js +5 -1
  293. package/dist/modules/mcp/tools/workflow-builder/skills-used.js.map +1 -1
  294. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js +10 -5
  295. package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js.map +1 -1
  296. package/dist/modules/mcp/tools/workflow-builder/version-metadata.d.ts +27 -0
  297. package/dist/modules/mcp/tools/workflow-builder/version-metadata.js +109 -0
  298. package/dist/modules/mcp/tools/workflow-builder/version-metadata.js.map +1 -0
  299. package/dist/modules/mcp-registry/registry/mcp-registry-search.d.ts +18 -0
  300. package/dist/modules/mcp-registry/registry/mcp-registry-search.js +64 -0
  301. package/dist/modules/mcp-registry/registry/mcp-registry-search.js.map +1 -0
  302. package/dist/modules/mcp-registry/registry/mcp-registry.service.d.ts +2 -0
  303. package/dist/modules/mcp-registry/registry/mcp-registry.service.js +4 -0
  304. package/dist/modules/mcp-registry/registry/mcp-registry.service.js.map +1 -1
  305. package/dist/modules/n8n-packages/engine/import-blocked.error.js +2 -1
  306. package/dist/modules/n8n-packages/engine/import-blocked.error.js.map +1 -1
  307. package/dist/modules/n8n-packages/engine/import-orchestrator.d.ts +30 -0
  308. package/dist/modules/n8n-packages/engine/import-orchestrator.js +86 -0
  309. package/dist/modules/n8n-packages/engine/import-orchestrator.js.map +1 -0
  310. package/dist/modules/n8n-packages/engine/import-result.d.ts +14 -0
  311. package/dist/modules/n8n-packages/engine/import-result.js +43 -0
  312. package/dist/modules/n8n-packages/engine/import-result.js.map +1 -0
  313. package/dist/modules/n8n-packages/engine/n8n-package-parser.d.ts +7 -0
  314. package/dist/modules/n8n-packages/engine/n8n-package-parser.js +72 -13
  315. package/dist/modules/n8n-packages/engine/n8n-package-parser.js.map +1 -1
  316. package/dist/modules/n8n-packages/engine/package-layout.d.ts +11 -0
  317. package/dist/modules/n8n-packages/engine/package-layout.js +21 -0
  318. package/dist/modules/n8n-packages/engine/package-layout.js.map +1 -0
  319. package/dist/modules/n8n-packages/engine/project-package-importer.d.ts +11 -0
  320. package/dist/modules/n8n-packages/engine/project-package-importer.js +44 -0
  321. package/dist/modules/n8n-packages/engine/project-package-importer.js.map +1 -0
  322. package/dist/modules/n8n-packages/engine/workflow-package-importer.d.ts +24 -0
  323. package/dist/modules/n8n-packages/engine/workflow-package-importer.js +168 -0
  324. package/dist/modules/n8n-packages/engine/workflow-package-importer.js.map +1 -0
  325. package/dist/modules/n8n-packages/entities/credential/credential-matcher-factory.d.ts +3 -1
  326. package/dist/modules/n8n-packages/entities/credential/credential-matcher-factory.js +8 -2
  327. package/dist/modules/n8n-packages/entities/credential/credential-matcher-factory.js.map +1 -1
  328. package/dist/modules/n8n-packages/entities/credential/credential-matcher.d.ts +6 -6
  329. package/dist/modules/n8n-packages/entities/credential/credential-matcher.js +34 -4
  330. package/dist/modules/n8n-packages/entities/credential/credential-matcher.js.map +1 -1
  331. package/dist/modules/n8n-packages/entities/credential/credential-tier-selection.d.ts +3 -0
  332. package/dist/modules/n8n-packages/entities/credential/credential-tier-selection.js +27 -0
  333. package/dist/modules/n8n-packages/entities/credential/credential-tier-selection.js.map +1 -0
  334. package/dist/modules/n8n-packages/entities/credential/credential.exporter.d.ts +2 -0
  335. package/dist/modules/n8n-packages/entities/credential/credential.exporter.js +18 -2
  336. package/dist/modules/n8n-packages/entities/credential/credential.exporter.js.map +1 -1
  337. package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.d.ts +3 -7
  338. package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.js +8 -23
  339. package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.js.map +1 -1
  340. package/dist/modules/n8n-packages/entities/credential/name-and-type-credential-matcher.d.ts +8 -0
  341. package/dist/modules/n8n-packages/entities/credential/name-and-type-credential-matcher.js +31 -0
  342. package/dist/modules/n8n-packages/entities/credential/name-and-type-credential-matcher.js.map +1 -0
  343. package/dist/modules/n8n-packages/entities/credential/type-only-credential-matcher.d.ts +8 -0
  344. package/dist/modules/n8n-packages/entities/credential/type-only-credential-matcher.js +31 -0
  345. package/dist/modules/n8n-packages/entities/credential/type-only-credential-matcher.js.map +1 -0
  346. package/dist/modules/n8n-packages/entities/data-table/data-table-requirements.extractor.d.ts +6 -0
  347. package/dist/modules/n8n-packages/entities/data-table/data-table-requirements.extractor.js +38 -0
  348. package/dist/modules/n8n-packages/entities/data-table/data-table-requirements.extractor.js.map +1 -0
  349. package/dist/modules/n8n-packages/entities/data-table/data-table.exporter.d.ts +26 -0
  350. package/dist/modules/n8n-packages/entities/data-table/data-table.exporter.js +97 -0
  351. package/dist/modules/n8n-packages/entities/data-table/data-table.exporter.js.map +1 -0
  352. package/dist/modules/n8n-packages/entities/data-table/data-table.serializer.d.ts +5 -0
  353. package/dist/modules/n8n-packages/entities/data-table/data-table.serializer.js +31 -0
  354. package/dist/modules/n8n-packages/entities/data-table/data-table.serializer.js.map +1 -0
  355. package/dist/modules/n8n-packages/entities/data-table/data-table.types.d.ts +4 -0
  356. package/dist/modules/n8n-packages/entities/data-table/data-table.types.js +3 -0
  357. package/dist/modules/n8n-packages/entities/data-table/data-table.types.js.map +1 -0
  358. package/dist/modules/n8n-packages/entities/folder/folder-conflict-policy.d.ts +5 -0
  359. package/dist/modules/n8n-packages/entities/folder/folder-conflict-policy.js +11 -0
  360. package/dist/modules/n8n-packages/entities/folder/folder-conflict-policy.js.map +1 -0
  361. package/dist/modules/n8n-packages/entities/folder/folder-import.types.d.ts +20 -0
  362. package/dist/modules/n8n-packages/entities/folder/folder-import.types.js +3 -0
  363. package/dist/modules/n8n-packages/entities/folder/folder-import.types.js.map +1 -0
  364. package/dist/modules/n8n-packages/entities/folder/folder-importer.d.ts +10 -0
  365. package/dist/modules/n8n-packages/entities/folder/folder-importer.js +140 -0
  366. package/dist/modules/n8n-packages/entities/folder/folder-importer.js.map +1 -0
  367. package/dist/modules/n8n-packages/entities/folder/folder.exporter.d.ts +5 -2
  368. package/dist/modules/n8n-packages/entities/folder/folder.exporter.js +48 -44
  369. package/dist/modules/n8n-packages/entities/folder/folder.exporter.js.map +1 -1
  370. package/dist/modules/n8n-packages/entities/folder/folder.serializer.js.map +1 -1
  371. package/dist/modules/n8n-packages/entities/package-export.errors.d.ts +8 -0
  372. package/dist/modules/n8n-packages/entities/package-export.errors.js +27 -0
  373. package/dist/modules/n8n-packages/entities/package-export.errors.js.map +1 -0
  374. package/dist/modules/n8n-packages/entities/project/project-import.types.d.ts +15 -0
  375. package/dist/modules/n8n-packages/entities/project/project-import.types.js +3 -0
  376. package/dist/modules/n8n-packages/entities/project/project-import.types.js.map +1 -0
  377. package/dist/modules/n8n-packages/entities/project/project-importer.d.ts +13 -0
  378. package/dist/modules/n8n-packages/entities/project/project-importer.js +97 -0
  379. package/dist/modules/n8n-packages/entities/project/project-importer.js.map +1 -0
  380. package/dist/modules/n8n-packages/entities/project/project.exporter.d.ts +22 -4
  381. package/dist/modules/n8n-packages/entities/project/project.exporter.js +71 -26
  382. package/dist/modules/n8n-packages/entities/project/project.exporter.js.map +1 -1
  383. package/dist/modules/n8n-packages/entities/requirements.types.d.ts +2 -0
  384. package/dist/modules/n8n-packages/entities/requirements.types.js +1 -0
  385. package/dist/modules/n8n-packages/entities/requirements.types.js.map +1 -1
  386. package/dist/modules/n8n-packages/entities/workflow/workflow.exporter.d.ts +4 -3
  387. package/dist/modules/n8n-packages/entities/workflow/workflow.exporter.js +11 -17
  388. package/dist/modules/n8n-packages/entities/workflow/workflow.exporter.js.map +1 -1
  389. package/dist/modules/n8n-packages/n8n-packages.service.d.ts +12 -3
  390. package/dist/modules/n8n-packages/n8n-packages.service.js +51 -11
  391. package/dist/modules/n8n-packages/n8n-packages.service.js.map +1 -1
  392. package/dist/modules/n8n-packages/n8n-packages.types.d.ts +47 -22
  393. package/dist/modules/n8n-packages/n8n-packages.types.js +5 -1
  394. package/dist/modules/n8n-packages/n8n-packages.types.js.map +1 -1
  395. package/dist/modules/n8n-packages/package-failure-classifier.d.ts +2 -0
  396. package/dist/modules/n8n-packages/package-failure-classifier.js +29 -0
  397. package/dist/modules/n8n-packages/package-failure-classifier.js.map +1 -0
  398. package/dist/modules/n8n-packages/spec/manifest.schema.d.ts +62 -0
  399. package/dist/modules/n8n-packages/spec/requirements.schema.d.ts +55 -0
  400. package/dist/modules/n8n-packages/spec/requirements.schema.js +26 -15
  401. package/dist/modules/n8n-packages/spec/requirements.schema.js.map +1 -1
  402. package/dist/modules/n8n-packages/spec/serialized/data-table.schema.d.ts +49 -0
  403. package/dist/modules/n8n-packages/spec/serialized/data-table.schema.js +20 -0
  404. package/dist/modules/n8n-packages/spec/serialized/data-table.schema.js.map +1 -0
  405. package/dist/modules/redaction/executions/execution-redaction.service.js +1 -1
  406. package/dist/modules/redaction/executions/execution-redaction.service.js.map +1 -1
  407. package/dist/modules/source-control.ee/constants.d.ts +1 -0
  408. package/dist/modules/source-control.ee/constants.js +2 -1
  409. package/dist/modules/source-control.ee/constants.js.map +1 -1
  410. package/dist/modules/source-control.ee/source-control-git.service.ee.d.ts +0 -1
  411. package/dist/modules/source-control.ee/source-control-git.service.ee.js +0 -22
  412. package/dist/modules/source-control.ee/source-control-git.service.ee.js.map +1 -1
  413. package/dist/modules/source-control.ee/source-control-helper.ee.d.ts +3 -1
  414. package/dist/modules/source-control.ee/source-control-helper.ee.js +13 -0
  415. package/dist/modules/source-control.ee/source-control-helper.ee.js.map +1 -1
  416. package/dist/modules/source-control.ee/source-control-import.service.ee.d.ts +10 -2
  417. package/dist/modules/source-control.ee/source-control-import.service.ee.js +94 -59
  418. package/dist/modules/source-control.ee/source-control-import.service.ee.js.map +1 -1
  419. package/dist/modules/source-control.ee/source-control-status.service.ee.d.ts +0 -1
  420. package/dist/modules/source-control.ee/source-control-status.service.ee.js +30 -30
  421. package/dist/modules/source-control.ee/source-control-status.service.ee.js.map +1 -1
  422. package/dist/modules/source-control.ee/source-control.controller.ee.d.ts +6 -6
  423. package/dist/modules/source-control.ee/source-control.service.ee.d.ts +3 -3
  424. package/dist/modules/source-control.ee/source-control.service.ee.js +8 -1
  425. package/dist/modules/source-control.ee/source-control.service.ee.js.map +1 -1
  426. package/dist/public-api/types.d.ts +5 -1
  427. package/dist/public-api/v1/handlers/credentials/credentials.handler.js +9 -0
  428. package/dist/public-api/v1/handlers/credentials/credentials.handler.js.map +1 -1
  429. package/dist/public-api/v1/handlers/n8n-packages/n8n-packages.handler.js +87 -38
  430. package/dist/public-api/v1/handlers/n8n-packages/n8n-packages.handler.js.map +1 -1
  431. package/dist/public-api/v1/handlers/security-policy/security-policy.handler.d.ts +8 -0
  432. package/dist/public-api/v1/handlers/security-policy/security-policy.handler.js +39 -0
  433. package/dist/public-api/v1/handlers/security-policy/security-policy.handler.js.map +1 -0
  434. package/dist/public-api/v1/openapi.yml +243 -12
  435. package/dist/scaling/job-processor.js +44 -6
  436. package/dist/scaling/job-processor.js.map +1 -1
  437. package/dist/scaling/pubsub/pubsub.event-map.d.ts +4 -1
  438. package/dist/scheduling/durable-job-provisioner.d.ts +16 -0
  439. package/dist/scheduling/durable-job-provisioner.js +135 -0
  440. package/dist/scheduling/durable-job-provisioner.js.map +1 -0
  441. package/dist/scheduling/durable-scheduler.d.ts +16 -0
  442. package/dist/scheduling/durable-scheduler.js +117 -0
  443. package/dist/scheduling/durable-scheduler.js.map +1 -0
  444. package/dist/scheduling/schedule-trigger-node/schedule-trigger-task-handler.d.ts +23 -0
  445. package/dist/scheduling/schedule-trigger-node/schedule-trigger-task-handler.js +149 -0
  446. package/dist/scheduling/schedule-trigger-node/schedule-trigger-task-handler.js.map +1 -0
  447. package/dist/scheduling/schedule-trigger-node/schedule-trigger-task.d.ts +10 -0
  448. package/dist/scheduling/schedule-trigger-node/schedule-trigger-task.js +33 -0
  449. package/dist/scheduling/schedule-trigger-node/schedule-trigger-task.js.map +1 -0
  450. package/dist/scheduling/scheduler-tracer.d.ts +3 -0
  451. package/dist/scheduling/scheduler-tracer.js +11 -0
  452. package/dist/scheduling/scheduler-tracer.js.map +1 -0
  453. package/dist/services/folder-finder.service.d.ts +2 -0
  454. package/dist/services/folder-finder.service.js +16 -0
  455. package/dist/services/folder-finder.service.js.map +1 -1
  456. package/dist/services/folder.service.d.ts +3 -2
  457. package/dist/services/folder.service.js +11 -1
  458. package/dist/services/folder.service.js.map +1 -1
  459. package/dist/services/frontend.service.d.ts +3 -1
  460. package/dist/services/frontend.service.js +14 -2
  461. package/dist/services/frontend.service.js.map +1 -1
  462. package/dist/services/project.service.ee.d.ts +7 -1
  463. package/dist/services/project.service.ee.js +21 -4
  464. package/dist/services/project.service.ee.js.map +1 -1
  465. package/dist/services/protected-resource.registry.d.ts +1 -0
  466. package/dist/services/protected-resource.registry.js +11 -7
  467. package/dist/services/protected-resource.registry.js.map +1 -1
  468. package/dist/services/security-settings.service.d.ts +31 -1
  469. package/dist/services/security-settings.service.js +75 -2
  470. package/dist/services/security-settings.service.js.map +1 -1
  471. package/dist/services/workflow-review-policy.service.d.ts +11 -0
  472. package/dist/services/workflow-review-policy.service.js +52 -0
  473. package/dist/services/workflow-review-policy.service.js.map +1 -0
  474. package/dist/telemetry/index.js +2 -2
  475. package/dist/telemetry/index.js.map +1 -1
  476. package/dist/workflow-execute-additional-data.js +5 -4
  477. package/dist/workflow-execute-additional-data.js.map +1 -1
  478. package/dist/workflow-helpers.js +26 -0
  479. package/dist/workflow-helpers.js.map +1 -1
  480. package/dist/workflows/triggers/webhook-trigger-registrar.js +22 -15
  481. package/dist/workflows/triggers/webhook-trigger-registrar.js.map +1 -1
  482. package/dist/workflows/triggers/workflow-trigger-activator.js +1 -7
  483. package/dist/workflows/triggers/workflow-trigger-activator.js.map +1 -1
  484. package/dist/workflows/workflow-creation.service.d.ts +2 -0
  485. package/dist/workflows/workflow-creation.service.js +4 -2
  486. package/dist/workflows/workflow-creation.service.js.map +1 -1
  487. package/dist/workflows/workflow-execution.service.js +8 -5
  488. package/dist/workflows/workflow-execution.service.js.map +1 -1
  489. package/dist/workflows/workflow-finder.service.d.ts +5 -2
  490. package/dist/workflows/workflow-finder.service.js +25 -2
  491. package/dist/workflows/workflow-finder.service.js.map +1 -1
  492. package/dist/workflows/workflow-history/workflow-history.service.d.ts +4 -1
  493. package/dist/workflows/workflow-history/workflow-history.service.js +3 -1
  494. package/dist/workflows/workflow-history/workflow-history.service.js.map +1 -1
  495. package/dist/workflows/workflow-validation.service.js +3 -3
  496. package/dist/workflows/workflow-validation.service.js.map +1 -1
  497. package/dist/workflows/workflow.request.d.ts +7 -22
  498. package/dist/workflows/workflow.service.d.ts +2 -0
  499. package/dist/workflows/workflow.service.js +4 -2
  500. package/dist/workflows/workflow.service.js.map +1 -1
  501. package/dist/workflows/workflows.controller.d.ts +1 -1
  502. package/dist/workflows/workflows.controller.js +8 -3
  503. package/dist/workflows/workflows.controller.js.map +1 -1
  504. package/package.json +44 -39
  505. package/templates/form-trigger-completion.handlebars +6 -6
  506. package/dist/executions/execution-data/azure-store.ee.d.ts +0 -15
  507. package/dist/executions/execution-data/azure-store.ee.js +0 -117
  508. package/dist/executions/execution-data/azure-store.ee.js.map +0 -1
  509. package/dist/executions/execution-data/fs-store.d.ts +0 -16
  510. package/dist/executions/execution-data/fs-store.js +0 -118
  511. package/dist/executions/execution-data/fs-store.js.map +0 -1
  512. package/dist/executions/execution-data/s3-store.ee.d.ts +0 -15
  513. package/dist/executions/execution-data/s3-store.ee.js +0 -116
  514. package/dist/executions/execution-data/s3-store.ee.js.map +0 -1
  515. package/dist/modules/agents/builder/from-ai-node-parameters.d.ts +0 -7
  516. package/dist/modules/agents/builder/from-ai-node-parameters.js +0 -43
  517. package/dist/modules/agents/builder/from-ai-node-parameters.js.map +0 -1
  518. package/dist/modules/agents/builder/interactive/ask-llm.tool.d.ts +0 -2
  519. package/dist/modules/agents/builder/interactive/ask-llm.tool.js +0 -25
  520. package/dist/modules/agents/builder/interactive/ask-llm.tool.js.map +0 -1
  521. package/dist/modules/agents/builder/interactive/ask-question.tool.d.ts +0 -2
  522. package/dist/modules/agents/builder/interactive/ask-question.tool.js +0 -27
  523. package/dist/modules/agents/builder/interactive/ask-question.tool.js.map +0 -1
  524. package/dist/modules/agents/json-config/model-id.d.ts +0 -1
  525. package/dist/modules/agents/json-config/model-id.js +0 -8
  526. package/dist/modules/agents/json-config/model-id.js.map +0 -1
  527. package/dist/modules/agents/json-config/native-web-search-provider-tools.d.ts +0 -7
  528. package/dist/modules/agents/json-config/native-web-search-provider-tools.js +0 -55
  529. package/dist/modules/agents/json-config/native-web-search-provider-tools.js.map +0 -1
  530. package/dist/modules/n8n-packages/engine/import-pipeline.d.ts +0 -28
  531. package/dist/modules/n8n-packages/engine/import-pipeline.js +0 -204
  532. package/dist/modules/n8n-packages/engine/import-pipeline.js.map +0 -1
@@ -46,6 +46,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
46
46
  };
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.InstanceAiAdapterService = void 0;
49
+ exports.buildEvaluationConfigDto = buildEvaluationConfigDto;
50
+ exports.evaluationConfigToSummary = evaluationConfigToSummary;
49
51
  exports.resolveDataTableByIdOrName = resolveDataTableByIdOrName;
50
52
  exports.truncateResultData = truncateResultData;
51
53
  exports.extractExecutionResult = extractExecutionResult;
@@ -58,10 +60,13 @@ const promises_1 = require("node:fs/promises");
58
60
  const node_path_1 = __importDefault(require("node:path"));
59
61
  const ai_utilities_1 = require("@n8n/ai-utilities");
60
62
  const instance_ai_1 = require("@n8n/instance-ai");
63
+ const api_types_1 = require("@n8n/api-types");
61
64
  const config_1 = require("@n8n/config");
62
65
  const constants_1 = require("@n8n/constants");
66
+ const nanoid_1 = require("nanoid");
63
67
  const extract_resolved_node_parameters_1 = require("./extract-resolved-node-parameters");
64
68
  const instance_ai_settings_service_1 = require("./instance-ai-settings.service");
69
+ const workflow_templates_service_1 = require("./workflow-templates.service");
65
70
  const instance_ai_run_pin_data_1 = require("./instance-ai-run-pin-data");
66
71
  const node_definition_resolver_1 = require("./node-definition-resolver");
67
72
  const web_research_1 = require("./web-research");
@@ -73,13 +78,17 @@ const permissions_1 = require("@n8n/permissions");
73
78
  const typeorm_1 = require("@n8n/typeorm");
74
79
  const n8n_workflow_1 = require("n8n-workflow");
75
80
  const active_executions_1 = require("../../active-executions");
81
+ const conflict_error_1 = require("../../errors/response-errors/conflict.error");
76
82
  const credentials_finder_service_1 = require("../../credentials/credentials-finder.service");
77
83
  const credentials_service_1 = require("../../credentials/credentials.service");
84
+ const evaluation_config_service_1 = require("../../evaluation.ee/evaluation-config.service");
78
85
  const event_service_1 = require("../../events/event.service");
79
86
  const execution_persistence_1 = require("../../executions/execution-persistence");
80
87
  const license_1 = require("../../license");
81
88
  const load_nodes_and_credentials_1 = require("../../load-nodes-and-credentials");
82
89
  const node_types_1 = require("../../node-types");
90
+ const agents_credential_provider_1 = require("../../modules/agents/adapters/agents-credential-provider");
91
+ const instance_ai_builder_delegate_adapter_1 = require("../../modules/agents/instance-ai-builder-delegate.adapter");
83
92
  const node_catalog_1 = require("../../node-catalog");
84
93
  const data_table_repository_1 = require("../../modules/data-table/data-table.repository");
85
94
  const data_table_service_1 = require("../../modules/data-table/data-table.service");
@@ -126,7 +135,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
126
135
  });
127
136
  return await promise;
128
137
  }
129
- constructor(logger, globalConfig, workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, projectRepository, executionRepository, credentialsService, credentialsFinderService, activeExecutions, workflowRunner, loadNodesAndCredentials, nodeTypes, instanceSettings, dataTableService, dataTableRepository, nodeResourceExplorerService, folderService, projectService, tagService, sourceControlPreferencesService, settingsService, workflowHistoryService, enterpriseWorkflowService, license, executionPersistence, eventService, roleService, telemetry, aiBuilderTemporaryWorkflowRepository, ssrfProtectionService, outboundHttp, aiGatewayService, nodeCatalogService) {
138
+ constructor(logger, globalConfig, workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, projectRepository, executionRepository, credentialsService, credentialsFinderService, activeExecutions, workflowRunner, loadNodesAndCredentials, nodeTypes, instanceSettings, dataTableService, dataTableRepository, nodeResourceExplorerService, folderService, projectService, tagService, sourceControlPreferencesService, settingsService, workflowHistoryService, enterpriseWorkflowService, license, executionPersistence, eventService, roleService, telemetry, aiBuilderTemporaryWorkflowRepository, ssrfProtectionService, outboundHttp, aiGatewayService, workflowTemplatesService, nodeCatalogService, evaluationConfigService) {
130
139
  this.globalConfig = globalConfig;
131
140
  this.workflowService = workflowService;
132
141
  this.workflowFinderService = workflowFinderService;
@@ -160,7 +169,9 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
160
169
  this.ssrfProtectionService = ssrfProtectionService;
161
170
  this.outboundHttp = outboundHttp;
162
171
  this.aiGatewayService = aiGatewayService;
172
+ this.workflowTemplatesService = workflowTemplatesService;
163
173
  this.nodeCatalogService = nodeCatalogService;
174
+ this.evaluationConfigService = evaluationConfigService;
164
175
  this.nodesCache = null;
165
176
  this.NODES_CACHE_TTL_MS = 5 * 60 * 1000;
166
177
  this.webResearchCache = new web_research_1.LRUCache({
@@ -178,7 +189,9 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
178
189
  });
179
190
  }
180
191
  createContext(user, options) {
181
- const { searchProxyConfig, pushRef, threadId, projectId, credentialIdAllowlist } = options ?? {};
192
+ const { searchProxyConfig, pushRef, threadId, projectId, credentialIdAllowlist, agentId } = options ?? {};
193
+ void this.trackGatewayAvailability();
194
+ const builderDelegateAdapter = this.getBuilderDelegateAdapter();
182
195
  return {
183
196
  userId: user.id,
184
197
  projectId,
@@ -187,15 +200,66 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
187
200
  credentialService: this.createCredentialAdapter(user, projectId, credentialIdAllowlist),
188
201
  nodeService: this.createNodeAdapter(user),
189
202
  dataTableService: this.createDataTableAdapter(user, projectId),
203
+ ...(this.evaluationConfigService
204
+ ? {
205
+ evaluationConfigService: this.createEvaluationConfigAdapter(this.evaluationConfigService, user),
206
+ }
207
+ : {}),
190
208
  webResearchService: this.createWebResearchAdapter(user, searchProxyConfig),
191
209
  workspaceService: this.createWorkspaceAdapter(user),
192
210
  templatesService: this.getTemplatesService(),
211
+ workflowTemplateService: this.createWorkflowTemplateAdapter(),
193
212
  licenseHints: this.buildLicenseHints(),
194
213
  logger: this.logger,
195
214
  nodeTypesProvider: this.nodeTypes,
196
215
  allowSendingParameterValues: this.allowSendingParameterValues,
216
+ ...(builderDelegateAdapter && agentId && projectId
217
+ ? { agentBuilderTarget: { agentId, projectId } }
218
+ : {}),
219
+ ...(builderDelegateAdapter && projectId
220
+ ? {
221
+ builderDelegate: builderDelegateAdapter.createDelegate(user, projectId, new agents_credential_provider_1.AgentsCredentialProvider(this.credentialsService, projectId, user)),
222
+ }
223
+ : {}),
197
224
  };
198
225
  }
226
+ getBuilderDelegateAdapter() {
227
+ if (!di_1.Container.get(backend_common_1.ModuleRegistry).isActive('agents'))
228
+ return null;
229
+ try {
230
+ return di_1.Container.get(instance_ai_builder_delegate_adapter_1.InstanceAiBuilderDelegateAdapterService);
231
+ }
232
+ catch {
233
+ return null;
234
+ }
235
+ }
236
+ async getGatewayConfigOrNull() {
237
+ if (!this.license.isLicensed(constants_1.LICENSE_FEATURES.AI_GATEWAY))
238
+ return null;
239
+ try {
240
+ return await this.aiGatewayService.getGatewayConfig();
241
+ }
242
+ catch {
243
+ return null;
244
+ }
245
+ }
246
+ buildAiGatewayNodeMeta(config, nodeName) {
247
+ if (!config)
248
+ return undefined;
249
+ if (!config.nodes.includes(nodeName))
250
+ return undefined;
251
+ const meta = { supported: true };
252
+ const operations = config.supportedActions?.[nodeName];
253
+ if (operations && Object.keys(operations).length > 0)
254
+ meta.operations = operations;
255
+ const minVersion = config.minNodeTypeVersion?.[nodeName];
256
+ if (minVersion !== undefined)
257
+ meta.minVersion = minVersion;
258
+ const hiddenProperties = config.hiddenNodeProperties?.[nodeName];
259
+ if (hiddenProperties && hiddenProperties.length > 0)
260
+ meta.hiddenProperties = hiddenProperties;
261
+ return meta;
262
+ }
199
263
  getTemplatesService() {
200
264
  if (!this.templatesService) {
201
265
  this.templatesService = new instance_ai_1.BuilderTemplatesService({
@@ -206,6 +270,14 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
206
270
  }
207
271
  return this.templatesService;
208
272
  }
273
+ createWorkflowTemplateAdapter() {
274
+ const workflowTemplatesService = this.workflowTemplatesService;
275
+ return {
276
+ async getTemplate(templateId) {
277
+ return await workflowTemplatesService.getTemplate(templateId);
278
+ },
279
+ };
280
+ }
209
281
  buildLicenseHints() {
210
282
  const hints = [];
211
283
  if (!this.license.isLicensed('feat:namedVersions')) {
@@ -216,6 +288,15 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
216
288
  }
217
289
  return hints;
218
290
  }
291
+ async trackGatewayAvailability() {
292
+ const config = await this.getGatewayConfigOrNull();
293
+ if (!config)
294
+ return;
295
+ this.telemetry.track('instance_ai_gateway_available', {
296
+ nodeCount: config.nodes.length,
297
+ credentialTypeCount: config.credentialTypes.length,
298
+ });
299
+ }
219
300
  assertInstanceNotReadOnly(resourceType) {
220
301
  if (this.sourceControlPreferencesService.getPreferences().branchReadOnly) {
221
302
  throw new Error(`Cannot modify ${resourceType} on a protected instance. This instance is in read-only mode.`);
@@ -286,7 +367,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
286
367
  if (!workflow) {
287
368
  throw new Error(`Workflow ${workflowId} not found or not accessible`);
288
369
  }
289
- return toWorkflowDetail(workflow, { redactParameters });
370
+ return await toWorkflowDetailWithChecksum(workflow, { redactParameters });
290
371
  },
291
372
  async archive(workflowId) {
292
373
  assertNotReadOnly();
@@ -480,9 +561,9 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
480
561
  workflow_id: updated.id,
481
562
  });
482
563
  }
483
- return toWorkflowDetail(updated, { redactParameters });
564
+ return await toWorkflowDetailWithChecksum(updated, { redactParameters });
484
565
  },
485
- async updateFromWorkflowJSON(workflowId, json, _options) {
566
+ async updateFromWorkflowJSON(workflowId, json, options) {
486
567
  assertNotReadOnly();
487
568
  const settings = (json.settings ?? {});
488
569
  if (settings.redactionPolicy !== undefined) {
@@ -516,9 +597,13 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
516
597
  }
517
598
  updated = await workflowService.update(user, updateData, workflowId, {
518
599
  source: 'n8n-ai',
600
+ ...(options?.expectedChecksum ? { expectedChecksum: options.expectedChecksum } : {}),
519
601
  });
520
602
  }
521
603
  catch (error) {
604
+ if (error instanceof conflict_error_1.ConflictError) {
605
+ throw new instance_ai_1.WorkflowSaveConflictError(workflowId);
606
+ }
522
607
  logger.warn('AI-builder workflow save failed', {
523
608
  threadId,
524
609
  workflowId,
@@ -532,7 +617,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
532
617
  workflow_id: workflowId,
533
618
  });
534
619
  }
535
- return toWorkflowDetail(updated, { redactParameters });
620
+ return await toWorkflowDetailWithChecksum(updated, { redactParameters });
536
621
  },
537
622
  async listVersions(workflowId, options) {
538
623
  const take = options?.limit ?? 20;
@@ -871,7 +956,8 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
871
956
  };
872
957
  }
873
958
  createCredentialAdapter(user, boundProjectId, credentialIdAllowlist) {
874
- const { credentialsService, credentialsFinderService, loadNodesAndCredentials, aiGatewayService, } = this;
959
+ const { credentialsService, credentialsFinderService, loadNodesAndCredentials } = this;
960
+ const getGatewayConfig = async () => await this.getGatewayConfigOrNull();
875
961
  const adapter = {
876
962
  async list(options) {
877
963
  if (boundProjectId) {
@@ -1116,13 +1202,12 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1116
1202
  }
1117
1203
  },
1118
1204
  async isAiGatewayCredentialType(credType) {
1119
- try {
1120
- const config = await aiGatewayService.getGatewayConfig();
1121
- return config.credentialTypes.includes(credType);
1122
- }
1123
- catch {
1124
- return false;
1125
- }
1205
+ const config = await getGatewayConfig();
1206
+ return config?.credentialTypes.includes(credType) ?? false;
1207
+ },
1208
+ async listAiGatewayCredentialTypes() {
1209
+ const config = await getGatewayConfig();
1210
+ return config?.credentialTypes ?? [];
1126
1211
  },
1127
1212
  };
1128
1213
  if (!credentialIdAllowlist)
@@ -1133,6 +1218,46 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1133
1218
  list: async (options) => allowed.size === 0 ? [] : (await adapter.list(options)).filter((c) => allowed.has(c.id)),
1134
1219
  };
1135
1220
  }
1221
+ createEvaluationConfigAdapter(evaluationConfigService, user) {
1222
+ const { workflowFinderService } = this;
1223
+ const assertNotReadOnly = () => this.assertInstanceNotReadOnly('evaluations');
1224
+ const findWorkflow = async (workflowId, scope) => {
1225
+ const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [scope]);
1226
+ if (!workflow) {
1227
+ throw new Error(`Workflow ${workflowId} not found or not accessible`);
1228
+ }
1229
+ return workflow;
1230
+ };
1231
+ return {
1232
+ async list(workflowId) {
1233
+ await findWorkflow(workflowId, 'workflow:read');
1234
+ const configs = await evaluationConfigService.list(workflowId);
1235
+ return configs.map(evaluationConfigToSummary);
1236
+ },
1237
+ async get(workflowId, configId) {
1238
+ await findWorkflow(workflowId, 'workflow:read');
1239
+ const config = await evaluationConfigService.get(workflowId, configId);
1240
+ return config ? evaluationConfigToSummary(config) : null;
1241
+ },
1242
+ async create(workflowId, input) {
1243
+ assertNotReadOnly();
1244
+ const workflow = await findWorkflow(workflowId, 'workflow:update');
1245
+ const config = await evaluationConfigService.create(workflowId, workflow, user, buildEvaluationConfigDto(input));
1246
+ return evaluationConfigToSummary(config);
1247
+ },
1248
+ async update(workflowId, configId, input) {
1249
+ assertNotReadOnly();
1250
+ const workflow = await findWorkflow(workflowId, 'workflow:update');
1251
+ const config = await evaluationConfigService.update(workflowId, configId, workflow, user, buildEvaluationConfigDto(input));
1252
+ return evaluationConfigToSummary(config);
1253
+ },
1254
+ async delete(workflowId, configId) {
1255
+ assertNotReadOnly();
1256
+ await findWorkflow(workflowId, 'workflow:update');
1257
+ await evaluationConfigService.delete(workflowId, configId);
1258
+ },
1259
+ };
1260
+ }
1136
1261
  createDataTableAdapter(user, boundProjectId) {
1137
1262
  const { dataTableService, dataTableRepository } = this;
1138
1263
  const assertNotReadOnly = () => this.assertInstanceNotReadOnly('data tables');
@@ -1394,6 +1519,8 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1394
1519
  }
1395
1520
  createNodeAdapter(user) {
1396
1521
  const getNodes = async () => await this.getNodesFromCache();
1522
+ const getGatewayConfig = async () => await this.getGatewayConfigOrNull();
1523
+ const buildMeta = (config, nodeName) => this.buildAiGatewayNodeMeta(config, nodeName);
1397
1524
  const findNodeByVersion = (nodes, nodeType, version) => {
1398
1525
  if (version !== undefined) {
1399
1526
  const exact = nodes.find((n) => {
@@ -1410,24 +1537,34 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1410
1537
  };
1411
1538
  return {
1412
1539
  async listAvailable(options) {
1413
- const nodes = await getNodes();
1540
+ const [nodes, gatewayConfig] = await Promise.all([
1541
+ getNodes(),
1542
+ options?.n8nConnectOnly ? getGatewayConfig() : Promise.resolve(null),
1543
+ ]);
1414
1544
  let filtered = nodes;
1415
1545
  if (options?.query) {
1416
1546
  const q = options.query.toLowerCase();
1417
- filtered = nodes.filter((n) => n.displayName.toLowerCase().includes(q) ||
1547
+ filtered = filtered.filter((n) => n.displayName.toLowerCase().includes(q) ||
1418
1548
  n.name.toLowerCase().includes(q) ||
1419
1549
  n.description?.toLowerCase().includes(q));
1420
1550
  }
1421
- return filtered.map((n) => ({
1422
- name: n.name,
1423
- displayName: n.displayName,
1424
- description: n.description ?? '',
1425
- group: n.group ?? [],
1426
- version: Array.isArray(n.version) ? n.version[n.version.length - 1] : n.version,
1427
- }));
1551
+ const summaries = filtered.map((n) => {
1552
+ const summary = {
1553
+ name: n.name,
1554
+ displayName: n.displayName,
1555
+ description: n.description ?? '',
1556
+ group: n.group ?? [],
1557
+ version: Array.isArray(n.version) ? n.version[n.version.length - 1] : n.version,
1558
+ };
1559
+ const meta = buildMeta(gatewayConfig, n.name);
1560
+ if (meta)
1561
+ summary.aiGateway = meta;
1562
+ return summary;
1563
+ });
1564
+ return options?.n8nConnectOnly ? summaries.filter((s) => s.aiGateway) : summaries;
1428
1565
  },
1429
1566
  async listSearchable() {
1430
- const nodes = await getNodes();
1567
+ const [nodes, gatewayConfig] = await Promise.all([getNodes(), getGatewayConfig()]);
1431
1568
  const toStringArray = (value) => {
1432
1569
  if (typeof value === 'string')
1433
1570
  return value;
@@ -1442,6 +1579,9 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1442
1579
  inputs: toStringArray(n.inputs),
1443
1580
  outputs: toStringArray(n.outputs),
1444
1581
  };
1582
+ const meta = buildMeta(gatewayConfig, n.name);
1583
+ if (meta)
1584
+ result.aiGateway = meta;
1445
1585
  if (n.codex?.alias) {
1446
1586
  result.codex = { alias: n.codex.alias };
1447
1587
  }
@@ -1479,7 +1619,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1479
1619
  });
1480
1620
  },
1481
1621
  async getDescription(nodeType, version) {
1482
- const nodes = await getNodes();
1622
+ const [nodes, gatewayConfig] = await Promise.all([getNodes(), getGatewayConfig()]);
1483
1623
  let desc = version !== undefined
1484
1624
  ? nodes.find((n) => {
1485
1625
  if (n.name !== nodeType)
@@ -1495,6 +1635,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1495
1635
  if (!desc) {
1496
1636
  throw new Error(`Node type ${nodeType} not found`);
1497
1637
  }
1638
+ const meta = buildMeta(gatewayConfig, desc.name);
1498
1639
  return {
1499
1640
  name: desc.name,
1500
1641
  displayName: desc.displayName,
@@ -1529,6 +1670,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1529
1670
  ...(desc.webhooks ? { webhooks: desc.webhooks } : {}),
1530
1671
  ...(desc.polling ? { polling: desc.polling } : {}),
1531
1672
  ...(desc.triggerPanel !== undefined ? { triggerPanel: desc.triggerPanel } : {}),
1673
+ ...(meta ? { aiGateway: meta } : {}),
1532
1674
  };
1533
1675
  },
1534
1676
  getNodeTypeDefinition: async (nodeType, options) => {
@@ -1853,10 +1995,60 @@ exports.InstanceAiAdapterService = InstanceAiAdapterService = __decorate([
1853
1995
  backend_network_1.SsrfProtectionService,
1854
1996
  backend_network_1.OutboundHttp,
1855
1997
  ai_gateway_service_1.AiGatewayService,
1856
- node_catalog_1.NodeCatalogService])
1998
+ workflow_templates_service_1.WorkflowTemplatesService,
1999
+ node_catalog_1.NodeCatalogService,
2000
+ evaluation_config_service_1.EvaluationConfigService])
1857
2001
  ], InstanceAiAdapterService);
1858
2002
  const MAX_RESULT_CHARS = 20_000;
1859
2003
  const MAX_NODE_OUTPUT_CHARS = 1_000;
2004
+ function buildEvaluationConfigDto(input) {
2005
+ return api_types_1.upsertEvaluationConfigSchema.parse({
2006
+ name: input.name,
2007
+ startNodeName: input.startNodeName,
2008
+ endNodeName: input.endNodeName,
2009
+ datasetSource: 'data_table',
2010
+ datasetRef: { dataTableId: input.dataTableId },
2011
+ metrics: input.metrics.map((metric) => ({
2012
+ id: (0, nanoid_1.nanoid)(),
2013
+ name: metric.name,
2014
+ type: 'llm_judge',
2015
+ config: {
2016
+ preset: metric.preset,
2017
+ ...(metric.prompt ? { prompt: metric.prompt } : {}),
2018
+ provider: metric.provider,
2019
+ credentialId: metric.credentialId,
2020
+ model: metric.model,
2021
+ outputType: metric.outputType,
2022
+ inputs: {
2023
+ actualAnswer: metric.actualAnswer,
2024
+ ...(metric.userQuery ? { userQuery: metric.userQuery } : {}),
2025
+ ...(metric.expectedAnswer ? { expectedAnswer: metric.expectedAnswer } : {}),
2026
+ },
2027
+ },
2028
+ })),
2029
+ });
2030
+ }
2031
+ function evaluationConfigToSummary(config) {
2032
+ const dataTableId = config.datasetSource === 'data_table' && 'dataTableId' in config.datasetRef
2033
+ ? config.datasetRef.dataTableId
2034
+ : undefined;
2035
+ return {
2036
+ id: config.id,
2037
+ workflowId: config.workflowId,
2038
+ name: config.name,
2039
+ status: config.status,
2040
+ invalidReason: config.invalidReason,
2041
+ startNodeName: config.startNodeName,
2042
+ endNodeName: config.endNodeName,
2043
+ metrics: config.metrics.map((metric) => ({
2044
+ id: metric.id,
2045
+ name: metric.name,
2046
+ type: metric.type,
2047
+ })),
2048
+ datasetSource: config.datasetSource,
2049
+ ...(dataTableId !== undefined ? { dataTableId } : {}),
2050
+ };
2051
+ }
1860
2052
  async function resolveDataTableByIdOrName(repository, logger, idOrName, options) {
1861
2053
  const byId = await repository.findOneBy({ id: idOrName });
1862
2054
  if (byId) {
@@ -1918,6 +2110,42 @@ function wrapResultDataEntries(data) {
1918
2110
  }
1919
2111
  return wrapped;
1920
2112
  }
2113
+ const MAX_NODE_ERRORS = 10;
2114
+ function isFailedNodeRun(nodeRun) {
2115
+ return (nodeRun.executionStatus === 'error' ||
2116
+ nodeRun.error !== undefined ||
2117
+ nodeRun.redactedError !== undefined);
2118
+ }
2119
+ function nodeContinuesOnError(node) {
2120
+ return (node?.continueOnFail === true ||
2121
+ node?.onError === 'continueRegularOutput' ||
2122
+ node?.onError === 'continueErrorOutput');
2123
+ }
2124
+ function extractNodeErrors(runData, includeUpstreamDetails, workflowNodes = []) {
2125
+ if (!runData)
2126
+ return [];
2127
+ const nodesByName = new Map(workflowNodes.map((node) => [node.name, node]));
2128
+ const nodeErrors = [];
2129
+ for (const [nodeName, nodeRuns] of Object.entries(runData)) {
2130
+ if (nodeErrors.length >= MAX_NODE_ERRORS)
2131
+ break;
2132
+ if (nodeContinuesOnError(nodesByName.get(nodeName)))
2133
+ continue;
2134
+ const failedRun = nodeRuns.find(isFailedNodeRun);
2135
+ if (!failedRun)
2136
+ continue;
2137
+ const message = failedRun.error
2138
+ ? formatExecutionError(failedRun.error, includeUpstreamDetails)
2139
+ : failedRun.redactedError
2140
+ ? `${failedRun.redactedError.type} error${failedRun.redactedError.httpCode ? ` (${failedRun.redactedError.httpCode})` : ''}`
2141
+ : undefined;
2142
+ nodeErrors.push({
2143
+ nodeName,
2144
+ ...(message ? { message } : {}),
2145
+ });
2146
+ }
2147
+ return nodeErrors;
2148
+ }
1921
2149
  async function extractExecutionResult(executionId, includeOutputData = true) {
1922
2150
  const execution = await di_1.Container.get(execution_persistence_1.ExecutionPersistence).findSingleExecution(executionId, {
1923
2151
  includeData: true,
@@ -1934,9 +2162,9 @@ async function extractExecutionResult(executionId, includeOutputData = true) {
1934
2162
  ? 'waiting'
1935
2163
  : 'success';
1936
2164
  const resultData = {};
1937
- const executedNodeNames = Object.keys(execution.data?.resultData?.runData ?? {});
2165
+ const runData = execution.data?.resultData?.runData;
2166
+ const executedNodeNames = Object.keys(runData ?? {});
1938
2167
  if (includeOutputData) {
1939
- const runData = execution.data?.resultData?.runData;
1940
2168
  if (runData) {
1941
2169
  for (const [nodeName, nodeRuns] of Object.entries(runData)) {
1942
2170
  const lastRun = nodeRuns[nodeRuns.length - 1];
@@ -1954,6 +2182,7 @@ async function extractExecutionResult(executionId, includeOutputData = true) {
1954
2182
  }
1955
2183
  const error = execution.data?.resultData?.error;
1956
2184
  const errorMessage = error ? formatExecutionError(error, includeOutputData) : undefined;
2185
+ const nodeErrors = extractNodeErrors(runData, includeOutputData, execution.workflowData?.nodes);
1957
2186
  return {
1958
2187
  executionId,
1959
2188
  status,
@@ -1961,6 +2190,7 @@ async function extractExecutionResult(executionId, includeOutputData = true) {
1961
2190
  ? wrapResultDataEntries(truncateResultData(resultData))
1962
2191
  : undefined,
1963
2192
  executedNodeNames: executedNodeNames.length > 0 ? executedNodeNames : undefined,
2193
+ nodeErrors: nodeErrors.length > 0 ? nodeErrors : undefined,
1964
2194
  lastNodeExecuted: execution.data?.resultData?.lastNodeExecuted,
1965
2195
  error: errorMessage,
1966
2196
  startedAt: execution.startedAt?.toISOString(),
@@ -2113,7 +2343,7 @@ async function extractExecutionDebugInfo(executionId, includeOutputData = true,
2113
2343
  nodeTrace.push({
2114
2344
  name: nodeName,
2115
2345
  type: nodeType,
2116
- status: lastRun.error !== undefined ? 'error' : 'success',
2346
+ status: isFailedNodeRun(lastRun) ? 'error' : 'success',
2117
2347
  startedAt: lastRun.startTime !== undefined ? new Date(lastRun.startTime).toISOString() : undefined,
2118
2348
  finishedAt: lastRun.startTime !== undefined && lastRun.executionTime !== undefined
2119
2349
  ? new Date(lastRun.startTime + lastRun.executionTime).toISOString()
@@ -2247,4 +2477,9 @@ function toWorkflowDetail(workflow, options) {
2247
2477
  settings: workflow.settings,
2248
2478
  };
2249
2479
  }
2480
+ async function toWorkflowDetailWithChecksum(workflow, options) {
2481
+ const detail = toWorkflowDetail(workflow, options);
2482
+ detail.checksum = await (0, n8n_workflow_1.calculateWorkflowChecksum)(workflow);
2483
+ return detail;
2484
+ }
2250
2485
  //# sourceMappingURL=instance-ai.adapter.service.js.map