n8n 1.120.4 → 1.121.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 (256) hide show
  1. package/dist/abstract-server.d.ts +1 -1
  2. package/dist/abstract-server.js +4 -4
  3. package/dist/abstract-server.js.map +1 -1
  4. package/dist/build.tsbuildinfo +1 -1
  5. package/dist/chat/utils.js +5 -3
  6. package/dist/chat/utils.js.map +1 -1
  7. package/dist/commands/base-command.js +2 -2
  8. package/dist/commands/base-command.js.map +1 -1
  9. package/dist/commands/execute-batch.d.ts +1 -1
  10. package/dist/commands/execute.d.ts +2 -2
  11. package/dist/commands/export/credentials.d.ts +2 -2
  12. package/dist/commands/export/entities.d.ts +3 -0
  13. package/dist/commands/export/entities.js +9 -2
  14. package/dist/commands/export/entities.js.map +1 -1
  15. package/dist/commands/export/workflow.d.ts +2 -2
  16. package/dist/commands/import/credentials.d.ts +2 -2
  17. package/dist/commands/import/entities.d.ts +3 -0
  18. package/dist/commands/import/entities.js +10 -2
  19. package/dist/commands/import/entities.js.map +1 -1
  20. package/dist/commands/import/workflow.d.ts +2 -2
  21. package/dist/commands/ttwf/generate.d.ts +3 -3
  22. package/dist/constants.js +1 -0
  23. package/dist/constants.js.map +1 -1
  24. package/dist/controllers/auth.controller.js +4 -0
  25. package/dist/controllers/auth.controller.js.map +1 -1
  26. package/dist/controllers/e2e.controller.js +0 -1
  27. package/dist/controllers/e2e.controller.js.map +1 -1
  28. package/dist/controllers/invitation.controller.js +8 -4
  29. package/dist/controllers/invitation.controller.js.map +1 -1
  30. package/dist/credentials/credentials.service.d.ts +2 -0
  31. package/dist/credentials/credentials.service.js +33 -10
  32. package/dist/credentials/credentials.service.js.map +1 -1
  33. package/dist/evaluation.ee/test-runner/test-runner.service.ee.js +11 -23
  34. package/dist/evaluation.ee/test-runner/test-runner.service.ee.js.map +1 -1
  35. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-sentry.ee.js +1 -0
  36. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-sentry.ee.js.map +1 -1
  37. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-syslog.ee.js +1 -0
  38. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-syslog.ee.js.map +1 -1
  39. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-webhook.ee.d.ts +4 -2
  40. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-webhook.ee.js +55 -29
  41. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-webhook.ee.js.map +1 -1
  42. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination.ee.d.ts +2 -0
  43. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination.ee.js +23 -1
  44. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination.ee.js.map +1 -1
  45. package/dist/execution-lifecycle/execute-error-workflow.js +1 -0
  46. package/dist/execution-lifecycle/execute-error-workflow.js.map +1 -1
  47. package/dist/execution-lifecycle/save-execution-progress.d.ts +1 -1
  48. package/dist/execution-lifecycle/save-execution-progress.js +2 -13
  49. package/dist/execution-lifecycle/save-execution-progress.js.map +1 -1
  50. package/dist/executions/execution.service.js +1 -45
  51. package/dist/executions/execution.service.js.map +1 -1
  52. package/dist/interfaces.d.ts +2 -1
  53. package/dist/ldap.ee/constants.d.ts +3 -0
  54. package/dist/ldap.ee/constants.js +4 -0
  55. package/dist/ldap.ee/constants.js.map +1 -1
  56. package/dist/ldap.ee/ldap.service.ee.d.ts +1 -0
  57. package/dist/ldap.ee/ldap.service.ee.js +26 -0
  58. package/dist/ldap.ee/ldap.service.ee.js.map +1 -1
  59. package/dist/license.d.ts +0 -1
  60. package/dist/license.js +2 -4
  61. package/dist/license.js.map +1 -1
  62. package/dist/manual-execution.service.js +6 -5
  63. package/dist/manual-execution.service.js.map +1 -1
  64. package/dist/modules/breaking-changes/breaking-changes.controller.d.ts +1 -2
  65. package/dist/modules/breaking-changes/breaking-changes.controller.js +1 -1
  66. package/dist/modules/breaking-changes/breaking-changes.controller.js.map +1 -1
  67. package/dist/modules/breaking-changes/breaking-changes.service.d.ts +3 -3
  68. package/dist/modules/breaking-changes/breaking-changes.service.js +16 -11
  69. package/dist/modules/breaking-changes/breaking-changes.service.js.map +1 -1
  70. package/dist/modules/breaking-changes/rules/index.d.ts +1 -1
  71. package/dist/modules/breaking-changes/rules/v2/binary-data-storage.rule.d.ts +9 -0
  72. package/dist/modules/breaking-changes/rules/v2/binary-data-storage.rule.js +70 -0
  73. package/dist/modules/breaking-changes/rules/v2/binary-data-storage.rule.js.map +1 -0
  74. package/dist/modules/breaking-changes/rules/v2/cli-activate-all-workflows.rule.d.ts +6 -0
  75. package/dist/modules/breaking-changes/rules/v2/cli-activate-all-workflows.rule.js +53 -0
  76. package/dist/modules/breaking-changes/rules/v2/cli-activate-all-workflows.rule.js.map +1 -0
  77. package/dist/modules/breaking-changes/rules/v2/disabled-nodes.rule.d.ts +11 -0
  78. package/dist/modules/breaking-changes/rules/v2/disabled-nodes.rule.js +64 -0
  79. package/dist/modules/breaking-changes/rules/v2/disabled-nodes.rule.js.map +1 -0
  80. package/dist/modules/breaking-changes/rules/v2/dotenv-upgrade.rule.d.ts +7 -0
  81. package/dist/modules/breaking-changes/rules/v2/dotenv-upgrade.rule.js +74 -0
  82. package/dist/modules/breaking-changes/rules/v2/dotenv-upgrade.rule.js.map +1 -0
  83. package/dist/modules/breaking-changes/rules/v2/file-access.rule.d.ts +4 -4
  84. package/dist/modules/breaking-changes/rules/v2/file-access.rule.js +3 -2
  85. package/dist/modules/breaking-changes/rules/v2/file-access.rule.js.map +1 -1
  86. package/dist/modules/breaking-changes/rules/v2/git-node-bare-repos.rule.d.ts +10 -0
  87. package/dist/modules/breaking-changes/rules/v2/git-node-bare-repos.rule.js +66 -0
  88. package/dist/modules/breaking-changes/rules/v2/git-node-bare-repos.rule.js.map +1 -0
  89. package/dist/modules/breaking-changes/rules/v2/index.d.ts +8 -2
  90. package/dist/modules/breaking-changes/rules/v2/index.js +35 -1
  91. package/dist/modules/breaking-changes/rules/v2/index.js.map +1 -1
  92. package/dist/modules/breaking-changes/rules/v2/oauth-callback-auth.rule.d.ts +6 -0
  93. package/dist/modules/breaking-changes/rules/v2/oauth-callback-auth.rule.js +51 -0
  94. package/dist/modules/breaking-changes/rules/v2/oauth-callback-auth.rule.js.map +1 -0
  95. package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.js +8 -1
  96. package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.js.map +1 -1
  97. package/dist/modules/breaking-changes/rules/v2/pyodide-removed.rule.d.ts +10 -0
  98. package/dist/modules/breaking-changes/rules/v2/pyodide-removed.rule.js +65 -0
  99. package/dist/modules/breaking-changes/rules/v2/pyodide-removed.rule.js.map +1 -0
  100. package/dist/modules/breaking-changes/rules/v2/queue-worker-max-stalled-count.rule.d.ts +6 -0
  101. package/dist/modules/breaking-changes/rules/v2/queue-worker-max-stalled-count.rule.js +51 -0
  102. package/dist/modules/breaking-changes/rules/v2/queue-worker-max-stalled-count.rule.js.map +1 -0
  103. package/dist/modules/breaking-changes/rules/v2/removed-database-types.rule.d.ts +9 -0
  104. package/dist/modules/breaking-changes/rules/v2/removed-database-types.rule.js +57 -0
  105. package/dist/modules/breaking-changes/rules/v2/removed-database-types.rule.js.map +1 -0
  106. package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.d.ts +3 -3
  107. package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.js +3 -2
  108. package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.js.map +1 -1
  109. package/dist/modules/breaking-changes/rules/v2/settings-file-permissions.rule.d.ts +9 -0
  110. package/dist/modules/breaking-changes/rules/v2/settings-file-permissions.rule.js +70 -0
  111. package/dist/modules/breaking-changes/rules/v2/settings-file-permissions.rule.js.map +1 -0
  112. package/dist/modules/breaking-changes/rules/v2/sqlite-legacy-driver.rule.d.ts +9 -0
  113. package/dist/modules/breaking-changes/rules/v2/sqlite-legacy-driver.rule.js +75 -0
  114. package/dist/modules/breaking-changes/rules/v2/sqlite-legacy-driver.rule.js.map +1 -0
  115. package/dist/modules/breaking-changes/rules/v2/task-runner-docker-image.rule.d.ts +6 -0
  116. package/dist/modules/breaking-changes/rules/v2/task-runner-docker-image.rule.js +57 -0
  117. package/dist/modules/breaking-changes/rules/v2/task-runner-docker-image.rule.js.map +1 -0
  118. package/dist/modules/breaking-changes/rules/v2/task-runners.rule.d.ts +9 -0
  119. package/dist/modules/breaking-changes/rules/v2/task-runners.rule.js +64 -0
  120. package/dist/modules/breaking-changes/rules/v2/task-runners.rule.js.map +1 -0
  121. package/dist/modules/breaking-changes/rules/v2/tunnel-option.rule.d.ts +6 -0
  122. package/dist/modules/breaking-changes/rules/v2/tunnel-option.rule.js +44 -0
  123. package/dist/modules/breaking-changes/rules/v2/tunnel-option.rule.js.map +1 -0
  124. package/dist/modules/breaking-changes/rules/v2/wait-node-subworkflow.rule.d.ts +12 -0
  125. package/dist/modules/breaking-changes/rules/v2/wait-node-subworkflow.rule.js +112 -0
  126. package/dist/modules/breaking-changes/rules/v2/wait-node-subworkflow.rule.js.map +1 -0
  127. package/dist/modules/breaking-changes/types/rule.types.d.ts +1 -2
  128. package/dist/modules/breaking-changes/types/rule.types.js.map +1 -1
  129. package/dist/modules/chat-hub/chat-hub-agent.entity.d.ts +2 -0
  130. package/dist/modules/chat-hub/chat-hub-agent.entity.js +4 -0
  131. package/dist/modules/chat-hub/chat-hub-agent.entity.js.map +1 -1
  132. package/dist/modules/chat-hub/chat-hub-agent.service.d.ts +3 -0
  133. package/dist/modules/chat-hub/chat-hub-agent.service.js +3 -0
  134. package/dist/modules/chat-hub/chat-hub-agent.service.js.map +1 -1
  135. package/dist/modules/chat-hub/chat-hub-session.entity.d.ts +2 -0
  136. package/dist/modules/chat-hub/chat-hub-session.entity.js +4 -0
  137. package/dist/modules/chat-hub/chat-hub-session.entity.js.map +1 -1
  138. package/dist/modules/chat-hub/chat-hub-workflow.service.d.ts +3 -2
  139. package/dist/modules/chat-hub/chat-hub-workflow.service.js +64 -30
  140. package/dist/modules/chat-hub/chat-hub-workflow.service.js.map +1 -1
  141. package/dist/modules/chat-hub/chat-hub.controller.d.ts +1 -1
  142. package/dist/modules/chat-hub/chat-hub.controller.js +2 -2
  143. package/dist/modules/chat-hub/chat-hub.controller.js.map +1 -1
  144. package/dist/modules/chat-hub/chat-hub.service.d.ts +8 -7
  145. package/dist/modules/chat-hub/chat-hub.service.js +65 -70
  146. package/dist/modules/chat-hub/chat-hub.service.js.map +1 -1
  147. package/dist/modules/chat-hub/chat-hub.types.d.ts +3 -10
  148. package/dist/modules/data-table/data-table-rows.repository.d.ts +2 -1
  149. package/dist/modules/data-table/data-table-rows.repository.js +38 -3
  150. package/dist/modules/data-table/data-table-rows.repository.js.map +1 -1
  151. package/dist/modules/data-table/data-table.service.d.ts +1 -1
  152. package/dist/modules/data-table/data-table.service.js +2 -2
  153. package/dist/modules/data-table/data-table.service.js.map +1 -1
  154. package/dist/modules/mcp/mcp.constants.d.ts +6 -0
  155. package/dist/modules/mcp/mcp.constants.js +8 -1
  156. package/dist/modules/mcp/mcp.constants.js.map +1 -1
  157. package/dist/modules/mcp/mcp.errors.d.ts +6 -0
  158. package/dist/modules/mcp/mcp.errors.js +16 -0
  159. package/dist/modules/mcp/mcp.errors.js.map +1 -0
  160. package/dist/modules/mcp/mcp.service.d.ts +5 -1
  161. package/dist/modules/mcp/mcp.service.js +11 -2
  162. package/dist/modules/mcp/mcp.service.js.map +1 -1
  163. package/dist/modules/mcp/mcp.settings.controller.js +5 -4
  164. package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
  165. package/dist/modules/mcp/mcp.types.d.ts +18 -0
  166. package/dist/modules/mcp/mcp.utils.d.ts +3 -1
  167. package/dist/modules/mcp/mcp.utils.js +7 -1
  168. package/dist/modules/mcp/mcp.utils.js.map +1 -1
  169. package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +107 -0
  170. package/dist/modules/mcp/tools/execute-workflow.tool.js +308 -0
  171. package/dist/modules/mcp/tools/execute-workflow.tool.js.map +1 -0
  172. package/dist/modules/mcp/tools/get-workflow-details.tool.js +11 -5
  173. package/dist/modules/mcp/tools/get-workflow-details.tool.js.map +1 -1
  174. package/dist/modules/mcp/tools/schemas.d.ts +5 -0
  175. package/dist/modules/mcp/tools/schemas.js +1 -0
  176. package/dist/modules/mcp/tools/schemas.js.map +1 -1
  177. package/dist/modules/mcp/tools/search-workflows.tool.js +24 -8
  178. package/dist/modules/mcp/tools/search-workflows.tool.js.map +1 -1
  179. package/dist/modules/mcp/tools/webhook-utils.d.ts +2 -1
  180. package/dist/modules/mcp/tools/webhook-utils.js +68 -4
  181. package/dist/modules/mcp/tools/webhook-utils.js.map +1 -1
  182. package/dist/public-api/v1/handlers/workflows/workflows.handler.js +3 -3
  183. package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
  184. package/dist/server.d.ts +1 -1
  185. package/dist/server.js +1 -1
  186. package/dist/server.js.map +1 -1
  187. package/dist/services/credentials-tester.service.js +1 -5
  188. package/dist/services/credentials-tester.service.js.map +1 -1
  189. package/dist/services/dynamic-node-parameters.service.js +1 -1
  190. package/dist/services/dynamic-node-parameters.service.js.map +1 -1
  191. package/dist/services/export.service.d.ts +1 -1
  192. package/dist/services/export.service.js +16 -5
  193. package/dist/services/export.service.js.map +1 -1
  194. package/dist/services/frontend.service.js +3 -11
  195. package/dist/services/frontend.service.js.map +1 -1
  196. package/dist/services/import.service.d.ts +4 -4
  197. package/dist/services/import.service.js +20 -9
  198. package/dist/services/import.service.js.map +1 -1
  199. package/dist/sso.ee/oidc/oidc.service.ee.d.ts +1 -1
  200. package/dist/sso.ee/oidc/oidc.service.ee.js +5 -0
  201. package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
  202. package/dist/sso.ee/oidc/routes/oidc.controller.ee.d.ts +1 -1
  203. package/dist/sso.ee/sso-helpers.d.ts +1 -0
  204. package/dist/sso.ee/sso-helpers.js +6 -0
  205. package/dist/sso.ee/sso-helpers.js.map +1 -1
  206. package/dist/task-runners/errors/task-request-timeout.error.d.ts +8 -0
  207. package/dist/task-runners/errors/task-request-timeout.error.js +19 -0
  208. package/dist/task-runners/errors/task-request-timeout.error.js.map +1 -0
  209. package/dist/task-runners/task-broker/task-broker.service.d.ts +3 -0
  210. package/dist/task-runners/task-broker/task-broker.service.js +22 -0
  211. package/dist/task-runners/task-broker/task-broker.service.js.map +1 -1
  212. package/dist/task-runners/task-managers/local-task-requester.d.ts +3 -1
  213. package/dist/task-runners/task-managers/local-task-requester.js +9 -3
  214. package/dist/task-runners/task-managers/local-task-requester.js.map +1 -1
  215. package/dist/task-runners/task-managers/task-requester.d.ts +8 -2
  216. package/dist/task-runners/task-managers/task-requester.js +34 -2
  217. package/dist/task-runners/task-managers/task-requester.js.map +1 -1
  218. package/dist/utils/circuit-breaker.d.ts +36 -0
  219. package/dist/utils/circuit-breaker.js +118 -0
  220. package/dist/utils/circuit-breaker.js.map +1 -0
  221. package/dist/utils/sliding-window.d.ts +13 -0
  222. package/dist/utils/sliding-window.js +27 -0
  223. package/dist/utils/sliding-window.js.map +1 -0
  224. package/dist/webhooks/webhook-helpers.js +5 -17
  225. package/dist/webhooks/webhook-helpers.js.map +1 -1
  226. package/dist/webhooks/webhook.service.js +26 -3
  227. package/dist/webhooks/webhook.service.js.map +1 -1
  228. package/dist/workflow-execute-additional-data.d.ts +1 -1
  229. package/dist/workflow-execute-additional-data.js +4 -13
  230. package/dist/workflow-execute-additional-data.js.map +1 -1
  231. package/dist/workflows/workflow-execution.service.js +12 -25
  232. package/dist/workflows/workflow-execution.service.js.map +1 -1
  233. package/dist/workflows/{workflow-history.ee/workflow-history-helper.ee.d.ts → workflow-history/workflow-history-helper.d.ts} +0 -2
  234. package/dist/workflows/{workflow-history.ee/workflow-history-helper.ee.js → workflow-history/workflow-history-helper.js} +1 -10
  235. package/dist/workflows/workflow-history/workflow-history-helper.js.map +1 -0
  236. package/dist/workflows/{workflow-history.ee/workflow-history-manager.ee.js → workflow-history/workflow-history-manager.js} +4 -7
  237. package/dist/workflows/workflow-history/workflow-history-manager.js.map +1 -0
  238. package/dist/workflows/{workflow-history.ee/workflow-history.controller.ee.d.ts → workflow-history/workflow-history.controller.d.ts} +1 -4
  239. package/dist/workflows/{workflow-history.ee/workflow-history.controller.ee.js → workflow-history/workflow-history.controller.js} +4 -33
  240. package/dist/workflows/workflow-history/workflow-history.controller.js.map +1 -0
  241. package/dist/workflows/{workflow-history.ee/workflow-history.service.ee.js → workflow-history/workflow-history.service.js} +18 -18
  242. package/dist/workflows/workflow-history/workflow-history.service.js.map +1 -0
  243. package/dist/workflows/workflow.service.d.ts +1 -1
  244. package/dist/workflows/workflow.service.js +15 -8
  245. package/dist/workflows/workflow.service.js.map +1 -1
  246. package/dist/workflows/workflows.controller.d.ts +1 -1
  247. package/dist/workflows/workflows.controller.js +2 -2
  248. package/dist/workflows/workflows.controller.js.map +1 -1
  249. package/package.json +16 -16
  250. package/templates/form-trigger.handlebars +2 -3
  251. package/dist/workflows/workflow-history.ee/workflow-history-helper.ee.js.map +0 -1
  252. package/dist/workflows/workflow-history.ee/workflow-history-manager.ee.js.map +0 -1
  253. package/dist/workflows/workflow-history.ee/workflow-history.controller.ee.js.map +0 -1
  254. package/dist/workflows/workflow-history.ee/workflow-history.service.ee.js.map +0 -1
  255. /package/dist/workflows/{workflow-history.ee/workflow-history-manager.ee.d.ts → workflow-history/workflow-history-manager.d.ts} +0 -0
  256. /package/dist/workflows/{workflow-history.ee/workflow-history.service.ee.d.ts → workflow-history/workflow-history.service.d.ts} +0 -0
@@ -16,10 +16,10 @@ const constants_1 = require("@n8n/constants");
16
16
  const db_1 = require("@n8n/db");
17
17
  const di_1 = require("@n8n/di");
18
18
  const n8n_core_1 = require("n8n-core");
19
- const cache_service_1 = require("../../services/cache/cache.service");
20
19
  const breaking_changes_rule_registry_service_1 = require("./breaking-changes.rule-registry.service");
21
20
  const rules_1 = require("./rules");
22
21
  const constants_2 = require("../../constants");
22
+ const cache_service_1 = require("../../services/cache/cache.service");
23
23
  let BreakingChangeService = BreakingChangeService_1 = class BreakingChangeService {
24
24
  constructor(ruleRegistry, workflowRepository, cacheService, logger, errorReporter) {
25
25
  this.ruleRegistry = ruleRegistry;
@@ -41,7 +41,6 @@ let BreakingChangeService = BreakingChangeService_1 = class BreakingChangeServic
41
41
  for (const rule of instanceLevelRules) {
42
42
  try {
43
43
  const ruleResult = await rule.detect();
44
- console.log('ruleResult', ruleResult);
45
44
  if (ruleResult.isAffected) {
46
45
  instanceLevelResults.push({
47
46
  ruleId: rule.id,
@@ -61,11 +60,10 @@ let BreakingChangeService = BreakingChangeService_1 = class BreakingChangeServic
61
60
  }
62
61
  return instanceLevelResults;
63
62
  }
64
- async getAllWorkflowRulesResults(workflowLevelRules) {
65
- const totalWorkflows = await this.workflowRepository.count();
63
+ async getAllWorkflowRulesResults(workflowLevelRules, totalWorkflows) {
66
64
  const allAffectedWorkflowsByRule = new Map();
67
65
  const allResults = [];
68
- this.logger.info('Processing workflows in batches', {
66
+ this.logger.debug('Processing workflows in batches', {
69
67
  totalWorkflows,
70
68
  batchSize: this.batchSize,
71
69
  });
@@ -122,6 +120,7 @@ let BreakingChangeService = BreakingChangeService_1 = class BreakingChangeServic
122
120
  ruleTitle: rule.getMetadata().title,
123
121
  ruleDescription: rule.getMetadata().description,
124
122
  ruleSeverity: rule.getMetadata().severity,
123
+ ruleDocumentationUrl: rule.getMetadata().documentationUrl,
125
124
  affectedWorkflows: workflowResults,
126
125
  recommendations: await rule.getRecommendations(workflowResults),
127
126
  });
@@ -144,7 +143,7 @@ let BreakingChangeService = BreakingChangeService_1 = class BreakingChangeServic
144
143
  void (async () => {
145
144
  const cachedResult = await this.cacheService.get(cacheKey);
146
145
  if (cachedResult) {
147
- this.logger.info('Using cached breaking change detection results', {
146
+ this.logger.debug('Using cached breaking change detection results', {
148
147
  targetVersion,
149
148
  });
150
149
  return resolve(cachedResult);
@@ -170,20 +169,25 @@ let BreakingChangeService = BreakingChangeService_1 = class BreakingChangeServic
170
169
  }
171
170
  async detect(targetVersion) {
172
171
  const startTime = Date.now();
173
- this.logger.info('Starting breaking change detection', { targetVersion });
172
+ this.logger.debug('Starting breaking change detection', { targetVersion });
174
173
  const rules = this.ruleRegistry.getRules(targetVersion);
175
174
  const workflowLevelRules = rules.filter((rule) => 'detectWorkflow' in rule);
176
175
  const instanceLevelRules = rules.filter((rule) => 'detect' in rule);
176
+ const totalWorkflows = await this.workflowRepository.count();
177
177
  const [instanceLevelResults, workflowLevelResults] = await Promise.all([
178
178
  this.getAllInstanceRulesResults(instanceLevelRules),
179
- this.getAllWorkflowRulesResults(workflowLevelRules),
179
+ this.getAllWorkflowRulesResults(workflowLevelRules, totalWorkflows),
180
180
  ]);
181
181
  const report = this.createDetectionReport(targetVersion, instanceLevelResults, workflowLevelResults);
182
182
  const duration = Date.now() - startTime;
183
- this.logger.info('Breaking change detection completed', {
183
+ this.logger.debug('Breaking change detection completed', {
184
184
  duration,
185
185
  });
186
- return { report, shouldCache: this.shouldCacheDetection(duration) };
186
+ return {
187
+ report,
188
+ totalWorkflows,
189
+ shouldCache: this.shouldCacheDetection(duration),
190
+ };
187
191
  }
188
192
  async getDetectionReportForRule(ruleId) {
189
193
  const rule = this.ruleRegistry.getRule(ruleId);
@@ -191,7 +195,8 @@ let BreakingChangeService = BreakingChangeService_1 = class BreakingChangeServic
191
195
  return undefined;
192
196
  }
193
197
  if ('detectWorkflow' in rule) {
194
- return (await this.getAllWorkflowRulesResults([rule]))[0];
198
+ const totalWorkflows = await this.workflowRepository.count();
199
+ return (await this.getAllWorkflowRulesResults([rule], totalWorkflows))[0];
195
200
  }
196
201
  return (await this.getAllInstanceRulesResults([rule]))[0];
197
202
  }
@@ -1 +1 @@
1
- {"version":3,"file":"breaking-changes.service.js","sourceRoot":"","sources":["../../../src/modules/breaking-changes/breaking-changes.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"breaking-changes.service.js","sourceRoot":"","sources":["../../../src/modules/breaking-changes/breaking-changes.service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- declare const allRules: typeof import("./v2/process-env-access.rule").ProcessEnvAccessRule[];
1
+ declare const allRules: (typeof import("./v2/binary-data-storage.rule").BinaryDataStorageRule | typeof import("./v2/cli-activate-all-workflows.rule").CliActivateAllWorkflowsRule | typeof import("./v2/git-node-bare-repos.rule").GitNodeBareReposRule | typeof import("./v2/removed-database-types.rule").RemovedDatabaseTypesRule | typeof import("./v2/settings-file-permissions.rule").SettingsFilePermissionsRule | typeof import("./v2/sqlite-legacy-driver.rule").SqliteLegacyDriverRule | typeof import("./v2/task-runners.rule").TaskRunnersRule)[];
2
2
  type RuleConstructors = (typeof allRules)[number];
3
3
  type RuleInstances = InstanceType<RuleConstructors>;
4
4
  export { allRules, type RuleInstances };
@@ -0,0 +1,9 @@
1
+ import { BinaryDataConfig } from 'n8n-core';
2
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
3
+ export declare class BinaryDataStorageRule implements IBreakingChangeInstanceRule {
4
+ private readonly config;
5
+ constructor(config: BinaryDataConfig);
6
+ id: string;
7
+ getMetadata(): BreakingChangeRuleMetadata;
8
+ detect(): Promise<InstanceDetectionReport>;
9
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BinaryDataStorageRule = void 0;
13
+ const di_1 = require("@n8n/di");
14
+ const n8n_core_1 = require("n8n-core");
15
+ let BinaryDataStorageRule = class BinaryDataStorageRule {
16
+ constructor(config) {
17
+ this.config = config;
18
+ this.id = 'binary-data-storage-v2';
19
+ }
20
+ getMetadata() {
21
+ return {
22
+ version: 'v2',
23
+ title: 'Disable binary data in-memory mode by default',
24
+ description: 'Binary files are now stored on disk by default instead of in memory, removing the 512MB file size limit',
25
+ category: "infrastructure",
26
+ severity: 'low',
27
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#remove-in-memory-binary-data-mode',
28
+ };
29
+ }
30
+ async detect() {
31
+ if (this.config.mode !== 'default') {
32
+ return {
33
+ isAffected: false,
34
+ instanceIssues: [],
35
+ recommendations: [],
36
+ };
37
+ }
38
+ const result = {
39
+ isAffected: true,
40
+ instanceIssues: [
41
+ {
42
+ title: 'Binary data storage mode changed',
43
+ description: `Binary files are now stored in ${this.config.localStoragePath} directory by default instead of in memory. This removes the previous 512MB file size limit but increases disk usage.`,
44
+ level: 'info',
45
+ },
46
+ ],
47
+ recommendations: [
48
+ {
49
+ action: 'Ensure adequate disk space',
50
+ description: `Verify sufficient disk space is available for binary file storage in the ${this.config.localStoragePath} directory`,
51
+ },
52
+ {
53
+ action: 'Configure persistent storage',
54
+ description: 'If using containers, ensure the binary data directory is mounted on a persistent volume',
55
+ },
56
+ {
57
+ action: 'Include in backups',
58
+ description: 'Add the binary data folder to your backup procedures',
59
+ },
60
+ ],
61
+ };
62
+ return result;
63
+ }
64
+ };
65
+ exports.BinaryDataStorageRule = BinaryDataStorageRule;
66
+ exports.BinaryDataStorageRule = BinaryDataStorageRule = __decorate([
67
+ (0, di_1.Service)(),
68
+ __metadata("design:paramtypes", [n8n_core_1.BinaryDataConfig])
69
+ ], BinaryDataStorageRule);
70
+ //# sourceMappingURL=binary-data-storage.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-data-storage.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/binary-data-storage.rule.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,uCAA4C;AAUrC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACjC,YAA6B,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;QAErD,OAAE,GAAW,wBAAwB,CAAC;IAFkB,CAAC;IAIzD,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,+CAA+C;YACtD,WAAW,EACV,yGAAyG;YAC1G,QAAQ,kBAAuC;YAC/C,QAAQ,EAAE,KAAK;YACf,gBAAgB,EACf,6EAA6E;SAC9E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACX,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO;gBACN,UAAU,EAAE,KAAK;gBACjB,cAAc,EAAE,EAAE;gBAClB,eAAe,EAAE,EAAE;aACnB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAA4B;YACvC,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE;gBACf;oBACC,KAAK,EAAE,kCAAkC;oBACzC,WAAW,EAAE,kCAAkC,IAAI,CAAC,MAAM,CAAC,gBAAgB,uHAAuH;oBAClM,KAAK,EAAE,MAAM;iBACb;aACD;YACD,eAAe,EAAE;gBAChB;oBACC,MAAM,EAAE,4BAA4B;oBACpC,WAAW,EAAE,4EAA4E,IAAI,CAAC,MAAM,CAAC,gBAAgB,YAAY;iBACjI;gBACD;oBACC,MAAM,EAAE,8BAA8B;oBACtC,WAAW,EACV,yFAAyF;iBAC1F;gBACD;oBACC,MAAM,EAAE,oBAAoB;oBAC5B,WAAW,EAAE,sDAAsD;iBACnE;aACD;SACD,CAAC;QAEF,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AAvDY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,YAAO,GAAE;qCAE4B,2BAAgB;GADzC,qBAAqB,CAuDjC"}
@@ -0,0 +1,6 @@
1
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
2
+ export declare class CliActivateAllWorkflowsRule implements IBreakingChangeInstanceRule {
3
+ id: string;
4
+ getMetadata(): BreakingChangeRuleMetadata;
5
+ detect(): Promise<InstanceDetectionReport>;
6
+ }
@@ -0,0 +1,53 @@
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.CliActivateAllWorkflowsRule = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ let CliActivateAllWorkflowsRule = class CliActivateAllWorkflowsRule {
12
+ constructor() {
13
+ this.id = 'cli-activate-all-workflows-v2';
14
+ }
15
+ getMetadata() {
16
+ return {
17
+ version: 'v2',
18
+ title: 'Remove CLI command operation to activate all workflows',
19
+ description: 'The CLI command to activate all workflows has been removed for simplification',
20
+ category: "instance",
21
+ severity: 'low',
22
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#remove-cli-command-operation-to-activate-all-workflows',
23
+ };
24
+ }
25
+ async detect() {
26
+ const result = {
27
+ isAffected: true,
28
+ instanceIssues: [
29
+ {
30
+ title: 'CLI command to activate all workflows removed',
31
+ description: 'The CLI command to activate all workflows in bulk has been removed. If you were using this command in scripts or automation, you will need to update your approach.',
32
+ level: 'info',
33
+ },
34
+ ],
35
+ recommendations: [
36
+ {
37
+ action: 'Use the API to activate workflows',
38
+ description: 'Update automation scripts to use the public API to activate workflows individually instead of the CLI command',
39
+ },
40
+ {
41
+ action: 'Review deployment scripts',
42
+ description: 'Check any deployment or automation scripts that may have used the CLI command to activate all workflows and update them accordingly',
43
+ },
44
+ ],
45
+ };
46
+ return result;
47
+ }
48
+ };
49
+ exports.CliActivateAllWorkflowsRule = CliActivateAllWorkflowsRule;
50
+ exports.CliActivateAllWorkflowsRule = CliActivateAllWorkflowsRule = __decorate([
51
+ (0, di_1.Service)()
52
+ ], CliActivateAllWorkflowsRule);
53
+ //# sourceMappingURL=cli-activate-all-workflows.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-activate-all-workflows.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/cli-activate-all-workflows.rule.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gCAAkC;AAU3B,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAAjC;QACN,OAAE,GAAW,+BAA+B,CAAC;IAyC9C,CAAC;IAvCA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,wDAAwD;YAC/D,WAAW,EAAE,+EAA+E;YAC5F,QAAQ,YAAiC;YACzC,QAAQ,EAAE,KAAK;YACf,gBAAgB,EACf,kGAAkG;SACnG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,MAAM,GAA4B;YACvC,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE;gBACf;oBACC,KAAK,EAAE,+CAA+C;oBACtD,WAAW,EACV,qKAAqK;oBACtK,KAAK,EAAE,MAAM;iBACb;aACD;YACD,eAAe,EAAE;gBAChB;oBACC,MAAM,EAAE,mCAAmC;oBAC3C,WAAW,EACV,+GAA+G;iBAChH;gBACD;oBACC,MAAM,EAAE,2BAA2B;oBACnC,WAAW,EACV,qIAAqI;iBACtI;aACD;SACD,CAAC;QAEF,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AA1CY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,YAAO,GAAE;GACG,2BAA2B,CA0CvC"}
@@ -0,0 +1,11 @@
1
+ import type { BreakingChangeAffectedWorkflow, BreakingChangeRecommendation } from '@n8n/api-types';
2
+ import type { WorkflowEntity } from '@n8n/db';
3
+ import type { INode } from 'n8n-workflow';
4
+ import type { BreakingChangeRuleMetadata, IBreakingChangeWorkflowRule, WorkflowDetectionReport } from '../../types';
5
+ export declare class DisabledNodesRule implements IBreakingChangeWorkflowRule {
6
+ private readonly DISABLED_NODES;
7
+ id: string;
8
+ getMetadata(): BreakingChangeRuleMetadata;
9
+ getRecommendations(_workflowResults: BreakingChangeAffectedWorkflow[]): Promise<BreakingChangeRecommendation[]>;
10
+ detectWorkflow(_workflow: WorkflowEntity, nodesGroupedByType: Map<string, INode[]>): Promise<WorkflowDetectionReport>;
11
+ }
@@ -0,0 +1,64 @@
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.DisabledNodesRule = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ let DisabledNodesRule = class DisabledNodesRule {
12
+ constructor() {
13
+ this.DISABLED_NODES = [
14
+ 'n8n-nodes-base.executeCommand',
15
+ 'n8n-nodes-base.localFileTrigger',
16
+ ];
17
+ this.id = 'disabled-nodes-v2';
18
+ }
19
+ getMetadata() {
20
+ return {
21
+ version: 'v2',
22
+ title: 'Disable ExecuteCommand and LocalFileTrigger nodes by default',
23
+ description: 'ExecuteCommand and LocalFileTrigger nodes are now disabled by default for security reasons',
24
+ category: "workflow",
25
+ severity: 'medium',
26
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#disable-executecommand-and-localfiletrigger-nodes-by-default',
27
+ };
28
+ }
29
+ async getRecommendations(_workflowResults) {
30
+ return [
31
+ {
32
+ action: 'Enable nodes if required',
33
+ description: 'Set the appropriate environment variables or settings to enable these nodes if they are required for your workflows',
34
+ },
35
+ {
36
+ action: 'Replace with alternatives',
37
+ description: 'Consider replacing these nodes with safer alternatives that achieve the same functionality',
38
+ },
39
+ ];
40
+ }
41
+ async detectWorkflow(_workflow, nodesGroupedByType) {
42
+ if (process.env.NODES_EXCLUDE) {
43
+ return { isAffected: false, issues: [] };
44
+ }
45
+ const disabledNodes = this.DISABLED_NODES.flatMap((type) => nodesGroupedByType.get(type) ?? []);
46
+ if (disabledNodes.length === 0)
47
+ return { isAffected: false, issues: [] };
48
+ return {
49
+ isAffected: true,
50
+ issues: disabledNodes.map((node) => ({
51
+ title: `Node '${node.type}' with name '${node.name}' will be disabled`,
52
+ description: `This node is disabled by default in v2. If you want to keep using ${node.type} node, you can configure NODES_EXCLUDE=[].`,
53
+ level: 'error',
54
+ nodeId: node.id,
55
+ nodeName: node.name,
56
+ })),
57
+ };
58
+ }
59
+ };
60
+ exports.DisabledNodesRule = DisabledNodesRule;
61
+ exports.DisabledNodesRule = DisabledNodesRule = __decorate([
62
+ (0, di_1.Service)()
63
+ ], DisabledNodesRule);
64
+ //# sourceMappingURL=disabled-nodes.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disabled-nodes.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/disabled-nodes.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAAvB;QACW,mBAAc,GAAG;YACjC,+BAA+B;YAC/B,iCAAiC;SACjC,CAAC;QAEF,OAAE,GAAW,mBAAmB,CAAC;IAsDlC,CAAC;IApDA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,8DAA8D;YACrE,WAAW,EACV,4FAA4F;YAC7F,QAAQ,YAAiC;YACzC,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EACf,wGAAwG;SACzG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,gBAAkD;QAElD,OAAO;YACN;gBACC,MAAM,EAAE,0BAA0B;gBAClC,WAAW,EACV,qHAAqH;aACtH;YACD;gBACC,MAAM,EAAE,2BAA2B;gBACnC,WAAW,EACV,4FAA4F;aAC7F;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,SAAyB,EACzB,kBAAwC;QAExC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC/B,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC1C,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChG,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAEzE,OAAO;YACN,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACpC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,IAAI,oBAAoB;gBACtE,WAAW,EAAE,qEAAqE,IAAI,CAAC,IAAI,4CAA4C;gBACvI,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;SACH,CAAC;IACH,CAAC;CACD,CAAA;AA5DY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,YAAO,GAAE;GACG,iBAAiB,CA4D7B"}
@@ -0,0 +1,7 @@
1
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
2
+ export declare class DotenvUpgradeRule implements IBreakingChangeInstanceRule {
3
+ id: string;
4
+ getMetadata(): BreakingChangeRuleMetadata;
5
+ private fileExists;
6
+ detect(): Promise<InstanceDetectionReport>;
7
+ }
@@ -0,0 +1,74 @@
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.DotenvUpgradeRule = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ const node_fs_1 = require("node:fs");
12
+ const promises_1 = require("node:fs/promises");
13
+ const node_path_1 = require("node:path");
14
+ let DotenvUpgradeRule = class DotenvUpgradeRule {
15
+ constructor() {
16
+ this.id = 'dotenv-upgrade-v2';
17
+ }
18
+ getMetadata() {
19
+ return {
20
+ version: 'v2',
21
+ title: 'Upgrade dotenv',
22
+ description: 'The dotenv library has been upgraded, which may affect how .env files are parsed',
23
+ category: "environment",
24
+ severity: 'low',
25
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#upgrade-dotenv',
26
+ };
27
+ }
28
+ async fileExists(path) {
29
+ try {
30
+ await (0, promises_1.access)(path, node_fs_1.constants.F_OK);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ async detect() {
38
+ const result = {
39
+ isAffected: false,
40
+ instanceIssues: [],
41
+ recommendations: [],
42
+ };
43
+ const possibleEnvPaths = [
44
+ (0, node_path_1.join)(process.cwd(), '.env'),
45
+ (0, node_path_1.join)(process.cwd(), '.env.local'),
46
+ (0, node_path_1.join)(process.cwd(), '.env.development'),
47
+ (0, node_path_1.join)(process.cwd(), '.env.production'),
48
+ ];
49
+ const existsChecks = await Promise.all(possibleEnvPaths.map(async (path) => ({
50
+ path,
51
+ exists: await this.fileExists(path),
52
+ })));
53
+ const existingEnvFiles = existsChecks.filter((check) => check.exists);
54
+ if (existingEnvFiles.length === 0) {
55
+ return result;
56
+ }
57
+ result.isAffected = true;
58
+ result.instanceIssues.push({
59
+ title: 'dotenv library upgrade detected',
60
+ description: 'The dotenv library has been upgraded, which changes how values containing # or newlines are parsed. This may affect .env file parsing.',
61
+ level: 'warning',
62
+ });
63
+ result.recommendations.push({
64
+ action: 'Review .env files',
65
+ description: 'Ensure any values containing # or newlines are quoted appropriately. Avoid ambiguous unquoted usages that might now be interpreted differently.',
66
+ });
67
+ return result;
68
+ }
69
+ };
70
+ exports.DotenvUpgradeRule = DotenvUpgradeRule;
71
+ exports.DotenvUpgradeRule = DotenvUpgradeRule = __decorate([
72
+ (0, di_1.Service)()
73
+ ], DotenvUpgradeRule);
74
+ //# sourceMappingURL=dotenv-upgrade.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dotenv-upgrade.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/dotenv-upgrade.rule.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gCAAkC;AAClC,qCAAoC;AACpC,+CAA0C;AAC1C,yCAAiC;AAU1B,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAAvB;QACN,OAAE,GAAW,mBAAmB,CAAC;IAoElC,CAAC;IAnEA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,gBAAgB;YACvB,WAAW,EACV,kFAAkF;YACnF,QAAQ,eAAoC;YAC5C,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,0DAA0D;SAC5E,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,IAAY;QACpC,IAAI,CAAC;YACJ,MAAM,IAAA,iBAAM,EAAC,IAAI,EAAE,mBAAS,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,MAAM,GAA4B;YACvC,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,EAAE;SACnB,CAAC;QAGF,MAAM,gBAAgB,GAAG;YACxB,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC;YAC3B,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC;YACjC,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC;YACvC,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;SACtC,CAAC;QAGF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;SACnC,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAGtE,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;YAC1B,KAAK,EAAE,iCAAiC;YACxC,WAAW,EACV,wIAAwI;YACzI,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3B,MAAM,EAAE,mBAAmB;YAC3B,WAAW,EACV,iJAAiJ;SAClJ,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AArEY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,YAAO,GAAE;GACG,iBAAiB,CAqE7B"}
@@ -1,11 +1,11 @@
1
- import { BreakingChangeRecommendation } from '@n8n/api-types';
2
- import { WorkflowEntity } from '@n8n/db';
3
- import { INode } from 'n8n-workflow';
1
+ import type { BreakingChangeAffectedWorkflow, BreakingChangeRecommendation } from '@n8n/api-types';
2
+ import type { WorkflowEntity } from '@n8n/db';
3
+ import type { INode } from 'n8n-workflow';
4
4
  import type { BreakingChangeRuleMetadata, IBreakingChangeWorkflowRule, WorkflowDetectionReport } from '../../types';
5
5
  export declare class FileAccessRule implements IBreakingChangeWorkflowRule {
6
6
  private readonly FILE_NODES;
7
7
  id: string;
8
8
  getMetadata(): BreakingChangeRuleMetadata;
9
- getRecommendations(): Promise<BreakingChangeRecommendation[]>;
9
+ getRecommendations(_workflowResults: BreakingChangeAffectedWorkflow[]): Promise<BreakingChangeRecommendation[]>;
10
10
  detectWorkflow(_workflow: WorkflowEntity, nodesGroupedByType: Map<string, INode[]>): Promise<WorkflowDetectionReport>;
11
11
  }
@@ -19,10 +19,11 @@ let FileAccessRule = class FileAccessRule {
19
19
  title: 'File Access Restrictions',
20
20
  description: 'File access is now restricted to a default directory for security purposes',
21
21
  category: "workflow",
22
- severity: 'high',
22
+ severity: 'medium',
23
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#set-default-value-for-n8n_restrict_file_access_to',
23
24
  };
24
25
  }
25
- async getRecommendations() {
26
+ async getRecommendations(_workflowResults) {
26
27
  return [
27
28
  {
28
29
  action: 'Configure file access paths',
@@ -1 +1 @@
1
- {"version":3,"file":"file-access.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/file-access.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QACW,eAAU,GAAG,CAAC,8BAA8B,EAAE,gCAAgC,CAAC,CAAC;QAEjG,OAAE,GAAW,4BAA4B,CAAC;IAwC3C,CAAC;IAtCA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,4EAA4E;YACzF,QAAQ,YAAiC;YACzC,QAAQ,EAAE,MAAM;SAChB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACvB,OAAO;YACN;gBACC,MAAM,EAAE,6BAA6B;gBACrC,WAAW,EACV,gJAAgJ;aACjJ;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,SAAyB,EACzB,kBAAwC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAChG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAErE,OAAO;YACN,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChC,KAAK,EAAE,qBAAqB,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,IAAI,YAAY;gBAC1E,WAAW,EAAE,wEAAwE;gBACrF,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;SACH,CAAC;IACH,CAAC;CACD,CAAA;AA3CY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,YAAO,GAAE;GACG,cAAc,CA2C1B"}
1
+ {"version":3,"file":"file-access.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/file-access.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QACW,eAAU,GAAG,CAAC,8BAA8B,EAAE,gCAAgC,CAAC,CAAC;QAEjG,OAAE,GAAW,4BAA4B,CAAC;IA4C3C,CAAC;IA1CA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,4EAA4E;YACzF,QAAQ,YAAiC;YACzC,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EACf,6FAA6F;SAC9F,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,gBAAkD;QAElD,OAAO;YACN;gBACC,MAAM,EAAE,6BAA6B;gBACrC,WAAW,EACV,gJAAgJ;aACjJ;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,SAAyB,EACzB,kBAAwC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAChG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAErE,OAAO;YACN,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChC,KAAK,EAAE,qBAAqB,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,IAAI,YAAY;gBAC1E,WAAW,EAAE,wEAAwE;gBACrF,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;SACH,CAAC;IACH,CAAC;CACD,CAAA;AA/CY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,YAAO,GAAE;GACG,cAAc,CA+C1B"}
@@ -0,0 +1,10 @@
1
+ import type { BreakingChangeAffectedWorkflow, BreakingChangeRecommendation } from '@n8n/api-types';
2
+ import type { WorkflowEntity } from '@n8n/db';
3
+ import type { INode } from 'n8n-workflow';
4
+ import type { BreakingChangeRuleMetadata, IBreakingChangeWorkflowRule, WorkflowDetectionReport } from '../../types';
5
+ export declare class GitNodeBareReposRule implements IBreakingChangeWorkflowRule {
6
+ id: string;
7
+ getMetadata(): BreakingChangeRuleMetadata;
8
+ getRecommendations(_workflowResults: BreakingChangeAffectedWorkflow[]): Promise<BreakingChangeRecommendation[]>;
9
+ detectWorkflow(_workflow: WorkflowEntity, nodesGroupedByType: Map<string, INode[]>): Promise<WorkflowDetectionReport>;
10
+ }
@@ -0,0 +1,66 @@
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.GitNodeBareReposRule = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ let GitNodeBareReposRule = class GitNodeBareReposRule {
12
+ constructor() {
13
+ this.id = 'git-node-bare-repos-v2';
14
+ }
15
+ getMetadata() {
16
+ return {
17
+ version: 'v2',
18
+ title: 'Git node bare repositories disabled by default',
19
+ description: 'N8N_GIT_NODE_DISABLE_BARE_REPOS now defaults to true for security. Bare repositories are disabled to prevent RCE attacks via Git hooks',
20
+ category: "workflow",
21
+ severity: 'medium',
22
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#change-the-default-value-of-n8n_git_node_disable_bare_repos-to-true',
23
+ };
24
+ }
25
+ async getRecommendations(_workflowResults) {
26
+ return [
27
+ {
28
+ action: 'Review Git node usage',
29
+ description: 'Check if any Git nodes in your workflows use bare repositories. Bare repositories are now disabled by default for security reasons.',
30
+ },
31
+ {
32
+ action: 'Migrate away from bare repositories',
33
+ description: 'If possible, update your workflows to use regular Git repositories instead of bare repositories.',
34
+ },
35
+ {
36
+ action: 'Enable bare repositories if required (not recommended)',
37
+ description: 'If you absolutely need bare repository support and understand the security risks, set N8N_GIT_NODE_DISABLE_BARE_REPOS=false. This is not recommended as it exposes your instance to potential RCE attacks via Git hooks.',
38
+ },
39
+ ];
40
+ }
41
+ async detectWorkflow(_workflow, nodesGroupedByType) {
42
+ const disableBareRepos = process.env.N8N_GIT_NODE_DISABLE_BARE_REPOS;
43
+ if (disableBareRepos === 'false') {
44
+ return { isAffected: false, issues: [] };
45
+ }
46
+ const gitNodes = nodesGroupedByType.get('n8n-nodes-base.git') ?? [];
47
+ if (gitNodes.length === 0) {
48
+ return { isAffected: false, issues: [] };
49
+ }
50
+ return {
51
+ isAffected: true,
52
+ issues: gitNodes.map((node) => ({
53
+ title: `Git node '${node.name}' may be affected by bare repository restrictions`,
54
+ description: 'This workflow contains a Git node. Bare repositories are now disabled by default for security reasons. If this node uses bare repositories, it may fail. Review your Git node configuration and migrate to regular repositories if needed, or set N8N_GIT_NODE_DISABLE_BARE_REPOS=false (not recommended) to re-enable bare repository support.',
55
+ level: 'warning',
56
+ nodeId: node.id,
57
+ nodeName: node.name,
58
+ })),
59
+ };
60
+ }
61
+ };
62
+ exports.GitNodeBareReposRule = GitNodeBareReposRule;
63
+ exports.GitNodeBareReposRule = GitNodeBareReposRule = __decorate([
64
+ (0, di_1.Service)()
65
+ ], GitNodeBareReposRule);
66
+ //# sourceMappingURL=git-node-bare-repos.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-node-bare-repos.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/git-node-bare-repos.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAA1B;QACN,OAAE,GAAW,wBAAwB,CAAC;IAsEvC,CAAC;IApEA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,gDAAgD;YACvD,WAAW,EACV,wIAAwI;YACzI,QAAQ,YAAiC;YACzC,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EACf,+GAA+G;SAChH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,gBAAkD;QAElD,OAAO;YACN;gBACC,MAAM,EAAE,uBAAuB;gBAC/B,WAAW,EACV,qIAAqI;aACtI;YACD;gBACC,MAAM,EAAE,qCAAqC;gBAC7C,WAAW,EACV,kGAAkG;aACnG;YACD;gBACC,MAAM,EAAE,wDAAwD;gBAChE,WAAW,EACV,0NAA0N;aAC3N;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,SAAyB,EACzB,kBAAwC;QAIxC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;QACrE,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;YAElC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC1C,CAAC;QAGD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAEpE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC1C,CAAC;QAID,OAAO;YACN,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC/B,KAAK,EAAE,aAAa,IAAI,CAAC,IAAI,mDAAmD;gBAChF,WAAW,EACV,iVAAiV;gBAClV,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;SACH,CAAC;IACH,CAAC;CACD,CAAA;AAvEY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,YAAO,GAAE;GACG,oBAAoB,CAuEhC"}
@@ -1,3 +1,9 @@
1
- import { ProcessEnvAccessRule } from './process-env-access.rule';
2
- declare const v2Rules: (typeof ProcessEnvAccessRule)[];
1
+ import { BinaryDataStorageRule } from './binary-data-storage.rule';
2
+ import { CliActivateAllWorkflowsRule } from './cli-activate-all-workflows.rule';
3
+ import { GitNodeBareReposRule } from './git-node-bare-repos.rule';
4
+ import { RemovedDatabaseTypesRule } from './removed-database-types.rule';
5
+ import { SettingsFilePermissionsRule } from './settings-file-permissions.rule';
6
+ import { SqliteLegacyDriverRule } from './sqlite-legacy-driver.rule';
7
+ import { TaskRunnersRule } from './task-runners.rule';
8
+ declare const v2Rules: (typeof BinaryDataStorageRule | typeof CliActivateAllWorkflowsRule | typeof GitNodeBareReposRule | typeof RemovedDatabaseTypesRule | typeof SettingsFilePermissionsRule | typeof SqliteLegacyDriverRule | typeof TaskRunnersRule)[];
3
9
  export { v2Rules };