n8n 1.120.2 → 1.121.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) 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/community-packages/community-packages.controller.js +7 -0
  149. package/dist/modules/community-packages/community-packages.controller.js.map +1 -1
  150. package/dist/modules/community-packages/community-packages.service.js +4 -0
  151. package/dist/modules/community-packages/community-packages.service.js.map +1 -1
  152. package/dist/modules/data-table/data-table-rows.repository.d.ts +2 -1
  153. package/dist/modules/data-table/data-table-rows.repository.js +38 -3
  154. package/dist/modules/data-table/data-table-rows.repository.js.map +1 -1
  155. package/dist/modules/data-table/data-table.service.d.ts +1 -1
  156. package/dist/modules/data-table/data-table.service.js +2 -2
  157. package/dist/modules/data-table/data-table.service.js.map +1 -1
  158. package/dist/modules/mcp/mcp.constants.d.ts +6 -0
  159. package/dist/modules/mcp/mcp.constants.js +8 -1
  160. package/dist/modules/mcp/mcp.constants.js.map +1 -1
  161. package/dist/modules/mcp/mcp.errors.d.ts +6 -0
  162. package/dist/modules/mcp/mcp.errors.js +16 -0
  163. package/dist/modules/mcp/mcp.errors.js.map +1 -0
  164. package/dist/modules/mcp/mcp.service.d.ts +5 -1
  165. package/dist/modules/mcp/mcp.service.js +11 -2
  166. package/dist/modules/mcp/mcp.service.js.map +1 -1
  167. package/dist/modules/mcp/mcp.settings.controller.js +5 -4
  168. package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
  169. package/dist/modules/mcp/mcp.types.d.ts +18 -0
  170. package/dist/modules/mcp/mcp.utils.d.ts +3 -1
  171. package/dist/modules/mcp/mcp.utils.js +7 -1
  172. package/dist/modules/mcp/mcp.utils.js.map +1 -1
  173. package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +107 -0
  174. package/dist/modules/mcp/tools/execute-workflow.tool.js +308 -0
  175. package/dist/modules/mcp/tools/execute-workflow.tool.js.map +1 -0
  176. package/dist/modules/mcp/tools/get-workflow-details.tool.js +11 -5
  177. package/dist/modules/mcp/tools/get-workflow-details.tool.js.map +1 -1
  178. package/dist/modules/mcp/tools/schemas.d.ts +5 -0
  179. package/dist/modules/mcp/tools/schemas.js +1 -0
  180. package/dist/modules/mcp/tools/schemas.js.map +1 -1
  181. package/dist/modules/mcp/tools/search-workflows.tool.js +24 -8
  182. package/dist/modules/mcp/tools/search-workflows.tool.js.map +1 -1
  183. package/dist/modules/mcp/tools/webhook-utils.d.ts +2 -1
  184. package/dist/modules/mcp/tools/webhook-utils.js +68 -4
  185. package/dist/modules/mcp/tools/webhook-utils.js.map +1 -1
  186. package/dist/public-api/v1/handlers/workflows/workflows.handler.js +3 -3
  187. package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
  188. package/dist/server.d.ts +1 -1
  189. package/dist/server.js +1 -1
  190. package/dist/server.js.map +1 -1
  191. package/dist/services/credentials-tester.service.js +1 -5
  192. package/dist/services/credentials-tester.service.js.map +1 -1
  193. package/dist/services/dynamic-node-parameters.service.js +1 -1
  194. package/dist/services/dynamic-node-parameters.service.js.map +1 -1
  195. package/dist/services/export.service.d.ts +1 -1
  196. package/dist/services/export.service.js +16 -5
  197. package/dist/services/export.service.js.map +1 -1
  198. package/dist/services/frontend.service.js +3 -11
  199. package/dist/services/frontend.service.js.map +1 -1
  200. package/dist/services/import.service.d.ts +4 -4
  201. package/dist/services/import.service.js +20 -9
  202. package/dist/services/import.service.js.map +1 -1
  203. package/dist/sso.ee/oidc/oidc.service.ee.d.ts +1 -1
  204. package/dist/sso.ee/oidc/oidc.service.ee.js +5 -0
  205. package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
  206. package/dist/sso.ee/oidc/routes/oidc.controller.ee.d.ts +1 -1
  207. package/dist/sso.ee/sso-helpers.d.ts +1 -0
  208. package/dist/sso.ee/sso-helpers.js +6 -0
  209. package/dist/sso.ee/sso-helpers.js.map +1 -1
  210. package/dist/task-runners/errors/task-request-timeout.error.d.ts +8 -0
  211. package/dist/task-runners/errors/task-request-timeout.error.js +19 -0
  212. package/dist/task-runners/errors/task-request-timeout.error.js.map +1 -0
  213. package/dist/task-runners/task-broker/task-broker.service.d.ts +3 -0
  214. package/dist/task-runners/task-broker/task-broker.service.js +22 -0
  215. package/dist/task-runners/task-broker/task-broker.service.js.map +1 -1
  216. package/dist/task-runners/task-managers/local-task-requester.d.ts +3 -1
  217. package/dist/task-runners/task-managers/local-task-requester.js +9 -3
  218. package/dist/task-runners/task-managers/local-task-requester.js.map +1 -1
  219. package/dist/task-runners/task-managers/task-requester.d.ts +8 -2
  220. package/dist/task-runners/task-managers/task-requester.js +34 -2
  221. package/dist/task-runners/task-managers/task-requester.js.map +1 -1
  222. package/dist/utils/circuit-breaker.d.ts +36 -0
  223. package/dist/utils/circuit-breaker.js +118 -0
  224. package/dist/utils/circuit-breaker.js.map +1 -0
  225. package/dist/utils/sliding-window.d.ts +13 -0
  226. package/dist/utils/sliding-window.js +27 -0
  227. package/dist/utils/sliding-window.js.map +1 -0
  228. package/dist/webhooks/webhook-helpers.js +5 -17
  229. package/dist/webhooks/webhook-helpers.js.map +1 -1
  230. package/dist/webhooks/webhook.service.js +26 -3
  231. package/dist/webhooks/webhook.service.js.map +1 -1
  232. package/dist/workflow-execute-additional-data.d.ts +1 -1
  233. package/dist/workflow-execute-additional-data.js +4 -13
  234. package/dist/workflow-execute-additional-data.js.map +1 -1
  235. package/dist/workflows/workflow-execution.service.js +12 -25
  236. package/dist/workflows/workflow-execution.service.js.map +1 -1
  237. package/dist/workflows/{workflow-history.ee/workflow-history-helper.ee.d.ts → workflow-history/workflow-history-helper.d.ts} +0 -2
  238. package/dist/workflows/{workflow-history.ee/workflow-history-helper.ee.js → workflow-history/workflow-history-helper.js} +1 -10
  239. package/dist/workflows/workflow-history/workflow-history-helper.js.map +1 -0
  240. package/dist/workflows/{workflow-history.ee/workflow-history-manager.ee.js → workflow-history/workflow-history-manager.js} +4 -7
  241. package/dist/workflows/workflow-history/workflow-history-manager.js.map +1 -0
  242. package/dist/workflows/{workflow-history.ee/workflow-history.controller.ee.d.ts → workflow-history/workflow-history.controller.d.ts} +1 -4
  243. package/dist/workflows/{workflow-history.ee/workflow-history.controller.ee.js → workflow-history/workflow-history.controller.js} +4 -33
  244. package/dist/workflows/workflow-history/workflow-history.controller.js.map +1 -0
  245. package/dist/workflows/{workflow-history.ee/workflow-history.service.ee.js → workflow-history/workflow-history.service.js} +18 -18
  246. package/dist/workflows/workflow-history/workflow-history.service.js.map +1 -0
  247. package/dist/workflows/workflow.service.d.ts +1 -1
  248. package/dist/workflows/workflow.service.js +15 -8
  249. package/dist/workflows/workflow.service.js.map +1 -1
  250. package/dist/workflows/workflows.controller.d.ts +1 -1
  251. package/dist/workflows/workflows.controller.js +2 -2
  252. package/dist/workflows/workflows.controller.js.map +1 -1
  253. package/package.json +17 -17
  254. package/templates/form-trigger.handlebars +2 -3
  255. package/dist/workflows/workflow-history.ee/workflow-history-helper.ee.js.map +0 -1
  256. package/dist/workflows/workflow-history.ee/workflow-history-manager.ee.js.map +0 -1
  257. package/dist/workflows/workflow-history.ee/workflow-history.controller.ee.js.map +0 -1
  258. package/dist/workflows/workflow-history.ee/workflow-history.service.ee.js.map +0 -1
  259. /package/dist/workflows/{workflow-history.ee/workflow-history-manager.ee.d.ts → workflow-history/workflow-history-manager.d.ts} +0 -0
  260. /package/dist/workflows/{workflow-history.ee/workflow-history.service.ee.d.ts → workflow-history/workflow-history.service.d.ts} +0 -0
@@ -1,9 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.v2Rules = void 0;
4
+ const binary_data_storage_rule_1 = require("./binary-data-storage.rule");
5
+ const cli_activate_all_workflows_rule_1 = require("./cli-activate-all-workflows.rule");
6
+ const disabled_nodes_rule_1 = require("./disabled-nodes.rule");
7
+ const dotenv_upgrade_rule_1 = require("./dotenv-upgrade.rule");
4
8
  const file_access_rule_1 = require("./file-access.rule");
9
+ const git_node_bare_repos_rule_1 = require("./git-node-bare-repos.rule");
10
+ const oauth_callback_auth_rule_1 = require("./oauth-callback-auth.rule");
5
11
  const process_env_access_rule_1 = require("./process-env-access.rule");
12
+ const pyodide_removed_rule_1 = require("./pyodide-removed.rule");
13
+ const queue_worker_max_stalled_count_rule_1 = require("./queue-worker-max-stalled-count.rule");
14
+ const removed_database_types_rule_1 = require("./removed-database-types.rule");
6
15
  const removed_nodes_rule_1 = require("./removed-nodes.rule");
7
- const v2Rules = [removed_nodes_rule_1.RemovedNodesRule, process_env_access_rule_1.ProcessEnvAccessRule, file_access_rule_1.FileAccessRule];
16
+ const settings_file_permissions_rule_1 = require("./settings-file-permissions.rule");
17
+ const sqlite_legacy_driver_rule_1 = require("./sqlite-legacy-driver.rule");
18
+ const task_runner_docker_image_rule_1 = require("./task-runner-docker-image.rule");
19
+ const task_runners_rule_1 = require("./task-runners.rule");
20
+ const tunnel_option_rule_1 = require("./tunnel-option.rule");
21
+ const wait_node_subworkflow_rule_1 = require("./wait-node-subworkflow.rule");
22
+ const v2Rules = [
23
+ removed_nodes_rule_1.RemovedNodesRule,
24
+ process_env_access_rule_1.ProcessEnvAccessRule,
25
+ pyodide_removed_rule_1.PyodideRemovedRule,
26
+ file_access_rule_1.FileAccessRule,
27
+ disabled_nodes_rule_1.DisabledNodesRule,
28
+ wait_node_subworkflow_rule_1.WaitNodeSubworkflowRule,
29
+ git_node_bare_repos_rule_1.GitNodeBareReposRule,
30
+ dotenv_upgrade_rule_1.DotenvUpgradeRule,
31
+ oauth_callback_auth_rule_1.OAuthCallbackAuthRule,
32
+ cli_activate_all_workflows_rule_1.CliActivateAllWorkflowsRule,
33
+ queue_worker_max_stalled_count_rule_1.QueueWorkerMaxStalledCountRule,
34
+ tunnel_option_rule_1.TunnelOptionRule,
35
+ removed_database_types_rule_1.RemovedDatabaseTypesRule,
36
+ settings_file_permissions_rule_1.SettingsFilePermissionsRule,
37
+ task_runners_rule_1.TaskRunnersRule,
38
+ task_runner_docker_image_rule_1.TaskRunnerDockerImageRule,
39
+ sqlite_legacy_driver_rule_1.SqliteLegacyDriverRule,
40
+ binary_data_storage_rule_1.BinaryDataStorageRule,
41
+ ];
8
42
  exports.v2Rules = v2Rules;
9
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/index.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AACpD,uEAAiE;AACjE,6DAAwD;AAExD,MAAM,OAAO,GAAG,CAAC,qCAAgB,EAAE,8CAAoB,EAAE,iCAAc,CAAC,CAAC;AAChE,0BAAO"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/index.ts"],"names":[],"mappings":";;;AAAA,yEAAmE;AACnE,uFAAgF;AAChF,+DAA0D;AAC1D,+DAA0D;AAC1D,yDAAoD;AACpD,yEAAkE;AAClE,yEAAmE;AACnE,uEAAiE;AACjE,iEAA4D;AAC5D,+FAAuF;AACvF,+EAAyE;AACzE,6DAAwD;AACxD,qFAA+E;AAC/E,2EAAqE;AACrE,mFAA4E;AAC5E,2DAAsD;AACtD,6DAAwD;AACxD,6EAAuE;AAEvE,MAAM,OAAO,GAAG;IAEf,qCAAgB;IAChB,8CAAoB;IACpB,yCAAkB;IAClB,iCAAc;IACd,uCAAiB;IACjB,oDAAuB;IACvB,+CAAoB;IAEpB,uCAAiB;IACjB,gDAAqB;IACrB,6DAA2B;IAC3B,oEAA8B;IAC9B,qCAAgB;IAChB,sDAAwB;IACxB,4DAA2B;IAC3B,mCAAe;IACf,yDAAyB;IACzB,kDAAsB;IACtB,gDAAqB;CACrB,CAAC;AACO,0BAAO"}
@@ -0,0 +1,6 @@
1
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
2
+ export declare class OAuthCallbackAuthRule implements IBreakingChangeInstanceRule {
3
+ id: string;
4
+ getMetadata(): BreakingChangeRuleMetadata;
5
+ detect(): Promise<InstanceDetectionReport>;
6
+ }
@@ -0,0 +1,51 @@
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.OAuthCallbackAuthRule = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ let OAuthCallbackAuthRule = class OAuthCallbackAuthRule {
12
+ constructor() {
13
+ this.id = 'oauth-callback-auth-v2';
14
+ }
15
+ getMetadata() {
16
+ return {
17
+ version: 'v2',
18
+ title: 'Require auth on OAuth callback URLs by default',
19
+ description: 'OAuth callbacks now enforce n8n user authentication by default for improved security',
20
+ category: "instance",
21
+ severity: 'medium',
22
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#require-authentication-on-oauth-callback-urls-by-default',
23
+ };
24
+ }
25
+ async detect() {
26
+ if (process.env.N8N_SKIP_AUTH_ON_OAUTH_CALLBACK) {
27
+ return { isAffected: false, instanceIssues: [], recommendations: [] };
28
+ }
29
+ return {
30
+ isAffected: true,
31
+ instanceIssues: [
32
+ {
33
+ title: 'OAuth callback authentication now required',
34
+ description: 'OAuth callbacks will now enforce n8n user authentication by default unless N8N_SKIP_AUTH_ON_OAUTH_CALLBACK is explicitly set to true.',
35
+ level: 'warning',
36
+ },
37
+ ],
38
+ recommendations: [
39
+ {
40
+ action: 'Review OAuth workflows',
41
+ description: 'If you need to skip authentication on OAuth callbacks (e.g., for embed mode), set N8N_SKIP_AUTH_ON_OAUTH_CALLBACK=true',
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ };
47
+ exports.OAuthCallbackAuthRule = OAuthCallbackAuthRule;
48
+ exports.OAuthCallbackAuthRule = OAuthCallbackAuthRule = __decorate([
49
+ (0, di_1.Service)()
50
+ ], OAuthCallbackAuthRule);
51
+ //# sourceMappingURL=oauth-callback-auth.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-callback-auth.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/oauth-callback-auth.rule.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gCAAkC;AAU3B,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAA3B;QACN,OAAE,GAAW,wBAAwB,CAAC;IAyCvC,CAAC;IAvCA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,gDAAgD;YACvD,WAAW,EACV,sFAAsF;YACvF,QAAQ,YAAiC;YACzC,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EACf,oGAAoG;SACrG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QAGX,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC;YACjD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;QACvE,CAAC;QAED,OAAO;YACN,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE;gBACf;oBACC,KAAK,EAAE,4CAA4C;oBACnD,WAAW,EACV,uIAAuI;oBACxI,KAAK,EAAE,SAAS;iBAChB;aACD;YACD,eAAe,EAAE;gBAChB;oBACC,MAAM,EAAE,wBAAwB;oBAChC,WAAW,EACV,wHAAwH;iBACzH;aACD;SACD,CAAC;IACH,CAAC;CACD,CAAA;AA1CY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,YAAO,GAAE;GACG,qBAAqB,CA0CjC"}
@@ -18,10 +18,17 @@ let ProcessEnvAccessRule = class ProcessEnvAccessRule {
18
18
  title: 'Block process.env Access in Expressions and Code nodes',
19
19
  description: 'Direct access to process.env is blocked by default for security',
20
20
  category: "workflow",
21
- severity: 'high',
21
+ severity: 'low',
22
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#block-environment-variable-access-from-code-node-by-default',
22
23
  };
23
24
  }
24
25
  async detectWorkflow(workflow, _nodesGroupedByType) {
26
+ if (process.env.N8N_BLOCK_ENV_ACCESS_IN_NODE) {
27
+ return {
28
+ isAffected: false,
29
+ issues: [],
30
+ };
31
+ }
25
32
  const processEnvPattern = /process\s*(?:\/\*[\s\S]*?\*\/)?\s*\??\.?\s*env\b/;
26
33
  const affectedNodes = [];
27
34
  workflow.nodes.forEach((node) => {
@@ -1 +1 @@
1
- {"version":3,"file":"process-env-access.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/process-env-access.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAA1B;QACN,OAAE,GAAW,uBAAuB,CAAC;IA+DtC,CAAC;IA9DA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,wDAAwD;YAC/D,WAAW,EAAE,iEAAiE;YAC9E,QAAQ,YAAiC;YACzC,QAAQ,EAAE,MAAM;SAChB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,QAAwB,EACxB,mBAAyC;QAKzC,MAAM,iBAAiB,GAAG,kDAAkD,CAAC;QAE7E,MAAM,aAAa,GAAgD,EAAE,CAAC;QAEtE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAE/B,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1F,IAAI,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACF,CAAC;iBAAM,CAAC;gBAEP,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjD,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC1F,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,OAAO;YACN,UAAU,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;YACpC,MAAM,EACL,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzB,KAAK,EAAE,6BAA6B;gBACpC,WAAW,EAAE,mBAAmB,CAAC,CAAC,QAAQ,0EAA0E;gBACpH,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACpB,CAAC,CAAC,IAAI,EAAE;SACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACvB,OAAO;YACN;gBACC,MAAM,EAAE,0BAA0B;gBAClC,WAAW,EAAE,kEAAkE;aAC/E;YACD;gBACC,MAAM,EAAE,2BAA2B;gBACnC,WAAW,EAAE,wDAAwD;aACrE;SACD,CAAC;IACH,CAAC;CACD,CAAA;AAhEY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,YAAO,GAAE;GACG,oBAAoB,CAgEhC"}
1
+ {"version":3,"file":"process-env-access.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/process-env-access.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAA1B;QACN,OAAE,GAAW,uBAAuB,CAAC;IA0EtC,CAAC;IAzEA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,wDAAwD;YAC/D,WAAW,EAAE,iEAAiE;YAC9E,QAAQ,YAAiC;YACzC,QAAQ,EAAE,KAAK;YACf,gBAAgB,EACf,uGAAuG;SACxG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,QAAwB,EACxB,mBAAyC;QAIzC,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;YAC9C,OAAO;gBACN,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,EAAE;aACV,CAAC;QACH,CAAC;QAKD,MAAM,iBAAiB,GAAG,kDAAkD,CAAC;QAE7E,MAAM,aAAa,GAAgD,EAAE,CAAC;QAEtE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAE/B,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1F,IAAI,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACF,CAAC;iBAAM,CAAC;gBAEP,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjD,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC1F,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,OAAO;YACN,UAAU,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;YACpC,MAAM,EACL,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzB,KAAK,EAAE,6BAA6B;gBACpC,WAAW,EAAE,mBAAmB,CAAC,CAAC,QAAQ,0EAA0E;gBACpH,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACpB,CAAC,CAAC,IAAI,EAAE;SACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACvB,OAAO;YACN;gBACC,MAAM,EAAE,0BAA0B;gBAClC,WAAW,EAAE,kEAAkE;aAC/E;YACD;gBACC,MAAM,EAAE,2BAA2B;gBACnC,WAAW,EAAE,wDAAwD;aACrE;SACD,CAAC;IACH,CAAC;CACD,CAAA;AA3EY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,YAAO,GAAE;GACG,oBAAoB,CA2EhC"}
@@ -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 PyodideRemovedRule 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,65 @@
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.PyodideRemovedRule = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ let PyodideRemovedRule = class PyodideRemovedRule {
12
+ constructor() {
13
+ this.id = 'pyodide-removed-v2';
14
+ }
15
+ getMetadata() {
16
+ return {
17
+ version: 'v2',
18
+ title: 'Remove Pyodide-based Python in Code node',
19
+ description: 'The Pyodide-based Python implementation in the Code node has been removed and replaced with a native Python task runner implementation',
20
+ category: "workflow",
21
+ severity: 'medium',
22
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#remove-pyodide-based-python-code-node',
23
+ };
24
+ }
25
+ async getRecommendations(_workflowResults) {
26
+ return [
27
+ {
28
+ action: 'Update Code nodes to use native Python',
29
+ description: 'Manually update affected Code nodes from the legacy python parameter to the new pythonNative parameter',
30
+ },
31
+ {
32
+ action: 'Review and adjust Python scripts',
33
+ description: 'Review Code node scripts relying on Pyodide syntax and adjust for breaking changes. See: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/#python-native-beta',
34
+ },
35
+ {
36
+ action: 'Set up Python task runner',
37
+ description: 'Ensure a Python task runner is available and configured. Native Python task runners are enabled by default in v2',
38
+ },
39
+ ];
40
+ }
41
+ async detectWorkflow(_workflow, nodesGroupedByType) {
42
+ const codeNodes = nodesGroupedByType.get('n8n-nodes-base.code') ?? [];
43
+ const affectedNodes = codeNodes.filter((node) => {
44
+ const language = node.parameters?.language;
45
+ return language === 'python';
46
+ });
47
+ if (affectedNodes.length === 0)
48
+ return { isAffected: false, issues: [] };
49
+ return {
50
+ isAffected: true,
51
+ issues: affectedNodes.map((node) => ({
52
+ title: `Code node '${node.name}' uses removed Pyodide Python implementation`,
53
+ description: 'The Pyodide-based Python implementation (language="python") is no longer supported. This node must be migrated to use the task runner-based implementation (language="pythonNative").',
54
+ level: 'error',
55
+ nodeId: node.id,
56
+ nodeName: node.name,
57
+ })),
58
+ };
59
+ }
60
+ };
61
+ exports.PyodideRemovedRule = PyodideRemovedRule;
62
+ exports.PyodideRemovedRule = PyodideRemovedRule = __decorate([
63
+ (0, di_1.Service)()
64
+ ], PyodideRemovedRule);
65
+ //# sourceMappingURL=pyodide-removed.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyodide-removed.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/pyodide-removed.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAAxB;QACN,OAAE,GAAW,oBAAoB,CAAC;IAqEnC,CAAC;IAnEA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,0CAA0C;YACjD,WAAW,EACV,wIAAwI;YACzI,QAAQ,YAAiC;YACzC,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EACf,iFAAiF;SAClF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,gBAAkD;QAElD,OAAO;YACN;gBACC,MAAM,EAAE,wCAAwC;gBAChD,WAAW,EACV,wGAAwG;aACzG;YACD;gBACC,MAAM,EAAE,kCAAkC;gBAC1C,WAAW,EACV,sLAAsL;aACvL;YACD;gBACC,MAAM,EAAE,2BAA2B;gBACnC,WAAW,EACV,kHAAkH;aACnH;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,SAAyB,EACzB,kBAAwC;QAGxC,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;QAOtE,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;YAE3C,OAAO,QAAQ,KAAK,QAAQ,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,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,cAAc,IAAI,CAAC,IAAI,8CAA8C;gBAC5E,WAAW,EACV,uLAAuL;gBACxL,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;SACH,CAAC;IACH,CAAC;CACD,CAAA;AAtEY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,YAAO,GAAE;GACG,kBAAkB,CAsE9B"}
@@ -0,0 +1,6 @@
1
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
2
+ export declare class QueueWorkerMaxStalledCountRule implements IBreakingChangeInstanceRule {
3
+ id: string;
4
+ getMetadata(): BreakingChangeRuleMetadata;
5
+ detect(): Promise<InstanceDetectionReport>;
6
+ }
@@ -0,0 +1,51 @@
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.QueueWorkerMaxStalledCountRule = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ let QueueWorkerMaxStalledCountRule = class QueueWorkerMaxStalledCountRule {
12
+ constructor() {
13
+ this.id = 'queue-worker-max-stalled-count-v2';
14
+ }
15
+ getMetadata() {
16
+ return {
17
+ version: 'v2',
18
+ title: 'Remove QUEUE_WORKER_MAX_STALLED_COUNT',
19
+ description: 'The QUEUE_WORKER_MAX_STALLED_COUNT environment variable has been removed and will be ignored',
20
+ category: "environment",
21
+ severity: 'low',
22
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#remove-queue_worker_max_stalled_count',
23
+ };
24
+ }
25
+ async detect() {
26
+ const result = {
27
+ isAffected: false,
28
+ instanceIssues: [],
29
+ recommendations: [],
30
+ };
31
+ if (!process.env.QUEUE_WORKER_MAX_STALLED_COUNT) {
32
+ return result;
33
+ }
34
+ result.isAffected = true;
35
+ result.instanceIssues.push({
36
+ title: 'QUEUE_WORKER_MAX_STALLED_COUNT is deprecated',
37
+ description: 'The QUEUE_WORKER_MAX_STALLED_COUNT environment variable has been removed. Any customization will be ignored in v2.',
38
+ level: 'warning',
39
+ });
40
+ result.recommendations.push({
41
+ action: 'Remove environment variable',
42
+ description: 'Remove QUEUE_WORKER_MAX_STALLED_COUNT from your environment configuration as it no longer has any effect',
43
+ });
44
+ return result;
45
+ }
46
+ };
47
+ exports.QueueWorkerMaxStalledCountRule = QueueWorkerMaxStalledCountRule;
48
+ exports.QueueWorkerMaxStalledCountRule = QueueWorkerMaxStalledCountRule = __decorate([
49
+ (0, di_1.Service)()
50
+ ], QueueWorkerMaxStalledCountRule);
51
+ //# sourceMappingURL=queue-worker-max-stalled-count.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-worker-max-stalled-count.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/queue-worker-max-stalled-count.rule.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gCAAkC;AAU3B,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;IAApC;QACN,OAAE,GAAW,mCAAmC,CAAC;IA4ClD,CAAC;IA1CA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,uCAAuC;YAC9C,WAAW,EACV,8FAA8F;YAC/F,QAAQ,eAAoC;YAC5C,QAAQ,EAAE,KAAK;YACf,gBAAgB,EACf,iFAAiF;SAClF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,MAAM,GAA4B;YACvC,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,EAAE;SACnB,CAAC;QAIF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC;YACjD,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;YAC1B,KAAK,EAAE,8CAA8C;YACrD,WAAW,EACV,oHAAoH;YACrH,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3B,MAAM,EAAE,6BAA6B;YACrC,WAAW,EACV,0GAA0G;SAC3G,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AA7CY,wEAA8B;yCAA9B,8BAA8B;IAD1C,IAAA,YAAO,GAAE;GACG,8BAA8B,CA6C1C"}
@@ -0,0 +1,9 @@
1
+ import { GlobalConfig } from '@n8n/config';
2
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
3
+ export declare class RemovedDatabaseTypesRule implements IBreakingChangeInstanceRule {
4
+ private readonly globalConfig;
5
+ constructor(globalConfig: GlobalConfig);
6
+ id: string;
7
+ getMetadata(): BreakingChangeRuleMetadata;
8
+ detect(): Promise<InstanceDetectionReport>;
9
+ }
@@ -0,0 +1,57 @@
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.RemovedDatabaseTypesRule = void 0;
13
+ const config_1 = require("@n8n/config");
14
+ const di_1 = require("@n8n/di");
15
+ let RemovedDatabaseTypesRule = class RemovedDatabaseTypesRule {
16
+ constructor(globalConfig) {
17
+ this.globalConfig = globalConfig;
18
+ this.id = 'removed-database-types-v2';
19
+ }
20
+ getMetadata() {
21
+ return {
22
+ version: 'v2',
23
+ title: 'MySQL/MariaDB database types removed',
24
+ description: 'MySQL and MariaDB database types have been completely removed and will cause n8n to fail on startup',
25
+ category: "database",
26
+ severity: 'critical',
27
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#drop-mysqlmariadb-support',
28
+ };
29
+ }
30
+ async detect() {
31
+ const result = {
32
+ isAffected: false,
33
+ instanceIssues: [],
34
+ recommendations: [],
35
+ };
36
+ const dbType = this.globalConfig.database.type;
37
+ if (dbType === 'mysqldb' || dbType === 'mariadb') {
38
+ result.isAffected = true;
39
+ result.instanceIssues.push({
40
+ title: `${dbType === 'mysqldb' ? 'MySQL' : 'MariaDB'} database type removed`,
41
+ description: 'MySQL and MariaDB database types have been completely removed in v2. n8n will fail to start with this database configuration.',
42
+ level: 'error',
43
+ });
44
+ result.recommendations.push({
45
+ action: 'Migrate to PostgreSQL or SQLite before upgrading',
46
+ description: 'You must migrate your database to PostgreSQL or SQLite before upgrading to v2. Use the database migration tool if available, or export/import your workflows and credentials.',
47
+ });
48
+ }
49
+ return result;
50
+ }
51
+ };
52
+ exports.RemovedDatabaseTypesRule = RemovedDatabaseTypesRule;
53
+ exports.RemovedDatabaseTypesRule = RemovedDatabaseTypesRule = __decorate([
54
+ (0, di_1.Service)(),
55
+ __metadata("design:paramtypes", [config_1.GlobalConfig])
56
+ ], RemovedDatabaseTypesRule);
57
+ //# sourceMappingURL=removed-database-types.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removed-database-types.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/removed-database-types.rule.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA2C;AAC3C,gCAAkC;AAU3B,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACpC,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAEvD,OAAE,GAAW,2BAA2B,CAAC;IAFiB,CAAC;IAI3D,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,sCAAsC;YAC7C,WAAW,EACV,qGAAqG;YACtG,QAAQ,YAAiC;YACzC,QAAQ,EAAE,UAAU;YACpB,gBAAgB,EAAE,qEAAqE;SACvF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,MAAM,GAA4B;YACvC,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,EAAE;SACnB,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;QAE/C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,wBAAwB;gBAC5E,WAAW,EACV,+HAA+H;gBAChI,KAAK,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC3B,MAAM,EAAE,kDAAkD;gBAC1D,WAAW,EACV,+KAA+K;aAChL,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AA5CY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,YAAO,GAAE;qCAEkC,qBAAY;GAD3C,wBAAwB,CA4CpC"}
@@ -1,11 +1,11 @@
1
- import { BreakingChangeRecommendation } from '@n8n/api-types';
1
+ import type { BreakingChangeAffectedWorkflow, BreakingChangeRecommendation } from '@n8n/api-types';
2
2
  import type { WorkflowEntity } from '@n8n/db';
3
- import { INode } from 'n8n-workflow';
3
+ import type { INode } from 'n8n-workflow';
4
4
  import type { BreakingChangeRuleMetadata, IBreakingChangeWorkflowRule, WorkflowDetectionReport } from '../../types';
5
5
  export declare class RemovedNodesRule implements IBreakingChangeWorkflowRule {
6
6
  private readonly REMOVED_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
  }
@@ -23,10 +23,11 @@ let RemovedNodesRule = class RemovedNodesRule {
23
23
  title: 'Removed Deprecated Nodes',
24
24
  description: 'Several deprecated nodes have been removed and will no longer work',
25
25
  category: "workflow",
26
- severity: 'critical',
26
+ severity: 'low',
27
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#removed-nodes-for-retired-services',
27
28
  };
28
29
  }
29
- async getRecommendations() {
30
+ async getRecommendations(_workflowResults) {
30
31
  return [
31
32
  {
32
33
  action: 'Update affected workflows',
@@ -1 +1 @@
1
- {"version":3,"file":"removed-nodes.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/removed-nodes.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAAtB;QACW,kBAAa,GAAG;YAChC,wBAAwB;YACxB,yBAAyB;YACzB,0BAA0B;SAC1B,CAAC;QAEF,OAAE,GAAW,kBAAkB,CAAC;IAuCjC,CAAC;IArCA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,oEAAoE;YACjF,QAAQ,YAAiC;YACzC,QAAQ,EAAE,UAAU;SACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACvB,OAAO;YACN;gBACC,MAAM,EAAE,2BAA2B;gBACnC,WAAW,EAAE,mEAAmE;aAChF;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,SAAyB,EACzB,kBAAwC;QAExC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9F,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAExE,OAAO;YACN,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,IAAI,oBAAoB;gBACtE,WAAW,EAAE,kBAAkB,IAAI,CAAC,IAAI,kEAAkE;gBAC1G,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;SACH,CAAC;IACH,CAAC;CACD,CAAA;AA9CY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,YAAO,GAAE;GACG,gBAAgB,CA8C5B"}
1
+ {"version":3,"file":"removed-nodes.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/removed-nodes.rule.ts"],"names":[],"mappings":";;;;;;;;;AAEA,gCAAkC;AAW3B,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAAtB;QACW,kBAAa,GAAG;YAChC,wBAAwB;YACxB,yBAAyB;YACzB,0BAA0B;SAC1B,CAAC;QAEF,OAAE,GAAW,kBAAkB,CAAC;IA2CjC,CAAC;IAzCA,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,oEAAoE;YACjF,QAAQ,YAAiC;YACzC,QAAQ,EAAE,KAAK;YACf,gBAAgB,EACf,8EAA8E;SAC/E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,gBAAkD;QAElD,OAAO;YACN;gBACC,MAAM,EAAE,2BAA2B;gBACnC,WAAW,EAAE,mEAAmE;aAChF;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,SAAyB,EACzB,kBAAwC;QAExC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9F,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAExE,OAAO;YACN,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,IAAI,oBAAoB;gBACtE,WAAW,EAAE,kBAAkB,IAAI,CAAC,IAAI,kEAAkE;gBAC1G,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAC;SACH,CAAC;IACH,CAAC;CACD,CAAA;AAlDY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,YAAO,GAAE;GACG,gBAAgB,CAkD5B"}
@@ -0,0 +1,9 @@
1
+ import { InstanceSettingsConfig } from '@n8n/config';
2
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
3
+ export declare class SettingsFilePermissionsRule implements IBreakingChangeInstanceRule {
4
+ private readonly instanceSettingsConfig;
5
+ constructor(instanceSettingsConfig: InstanceSettingsConfig);
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.SettingsFilePermissionsRule = void 0;
13
+ const config_1 = require("@n8n/config");
14
+ const di_1 = require("@n8n/di");
15
+ let SettingsFilePermissionsRule = class SettingsFilePermissionsRule {
16
+ constructor(instanceSettingsConfig) {
17
+ this.instanceSettingsConfig = instanceSettingsConfig;
18
+ this.id = 'settings-file-permissions-v2';
19
+ }
20
+ getMetadata() {
21
+ return {
22
+ version: 'v2',
23
+ title: 'Enforce settings file permissions',
24
+ description: 'n8n now enforces stricter permissions on configuration files for improved security',
25
+ category: "infrastructure",
26
+ severity: 'low',
27
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#enforce-settings-file-permissions',
28
+ };
29
+ }
30
+ async detect() {
31
+ if (!this.instanceSettingsConfig.enforceSettingsFilePermissions) {
32
+ return {
33
+ isAffected: false,
34
+ instanceIssues: [],
35
+ recommendations: [],
36
+ };
37
+ }
38
+ const result = {
39
+ isAffected: true,
40
+ instanceIssues: [
41
+ {
42
+ title: 'Settings file permissions will be enforced',
43
+ description: 'n8n will now enforce chmod 600 permissions on configuration files. This may affect Docker/Kubernetes setups with volume mounts.',
44
+ level: 'warning',
45
+ },
46
+ ],
47
+ recommendations: [
48
+ {
49
+ action: 'Configure volume permissions',
50
+ description: 'If using Docker or Kubernetes with volume mounts for .n8n directory, ensure the mounted volume has proper ownership and chmod 600 can be enforced on the config file',
51
+ },
52
+ {
53
+ action: 'Disable enforcement if needed',
54
+ description: 'Set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false to disable permission enforcement',
55
+ },
56
+ {
57
+ action: 'Separate configs for multi-instance setups',
58
+ description: 'In multi-main or queue setups, give each instance its own .n8n directory or use N8N_ENCRYPTION_KEY environment variable instead of relying on the config file',
59
+ },
60
+ ],
61
+ };
62
+ return result;
63
+ }
64
+ };
65
+ exports.SettingsFilePermissionsRule = SettingsFilePermissionsRule;
66
+ exports.SettingsFilePermissionsRule = SettingsFilePermissionsRule = __decorate([
67
+ (0, di_1.Service)(),
68
+ __metadata("design:paramtypes", [config_1.InstanceSettingsConfig])
69
+ ], SettingsFilePermissionsRule);
70
+ //# sourceMappingURL=settings-file-permissions.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-file-permissions.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/settings-file-permissions.rule.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAqD;AACrD,gCAAkC;AAU3B,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACvC,YAA6B,sBAA8C;QAA9C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAE3E,OAAE,GAAW,8BAA8B,CAAC;IAFkC,CAAC;IAI/E,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,mCAAmC;YAC1C,WAAW,EACV,oFAAoF;YACrF,QAAQ,kBAAuC;YAC/C,QAAQ,EAAE,KAAK;YACf,gBAAgB,EACf,6EAA6E;SAC9E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QAGX,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,8BAA8B,EAAE,CAAC;YACjE,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,4CAA4C;oBACnD,WAAW,EACV,iIAAiI;oBAClI,KAAK,EAAE,SAAS;iBAChB;aACD;YACD,eAAe,EAAE;gBAChB;oBACC,MAAM,EAAE,8BAA8B;oBACtC,WAAW,EACV,sKAAsK;iBACvK;gBACD;oBACC,MAAM,EAAE,+BAA+B;oBACvC,WAAW,EACV,mFAAmF;iBACpF;gBACD;oBACC,MAAM,EAAE,4CAA4C;oBACpD,WAAW,EACV,+JAA+J;iBAChK;aACD;SACD,CAAC;QAEF,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AA5DY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,YAAO,GAAE;qCAE4C,+BAAsB;GAD/D,2BAA2B,CA4DvC"}
@@ -0,0 +1,9 @@
1
+ import { GlobalConfig } from '@n8n/config';
2
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
3
+ export declare class SqliteLegacyDriverRule implements IBreakingChangeInstanceRule {
4
+ private readonly globalConfig;
5
+ constructor(globalConfig: GlobalConfig);
6
+ id: string;
7
+ getMetadata(): BreakingChangeRuleMetadata;
8
+ detect(): Promise<InstanceDetectionReport>;
9
+ }
@@ -0,0 +1,75 @@
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.SqliteLegacyDriverRule = void 0;
13
+ const config_1 = require("@n8n/config");
14
+ const di_1 = require("@n8n/di");
15
+ let SqliteLegacyDriverRule = class SqliteLegacyDriverRule {
16
+ constructor(globalConfig) {
17
+ this.globalConfig = globalConfig;
18
+ this.id = 'sqlite-legacy-driver-v2';
19
+ }
20
+ getMetadata() {
21
+ return {
22
+ version: 'v2',
23
+ title: 'Remove SQLite legacy driver',
24
+ description: 'SQLite now uses WAL (Write-Ahead Logging) mode exclusively, with additional database files',
25
+ category: "database",
26
+ severity: 'low',
27
+ documentationUrl: 'https://docs.n8n.io/2-0-breaking-changes/#remove-sqlite-legacy-driver',
28
+ };
29
+ }
30
+ async detect() {
31
+ const result = {
32
+ isAffected: false,
33
+ instanceIssues: [],
34
+ recommendations: [],
35
+ };
36
+ const dbType = this.globalConfig.database.type;
37
+ const enableWAL = this.globalConfig.database.sqlite.enableWAL;
38
+ if (dbType === 'sqlite' && !enableWAL) {
39
+ result.isAffected = true;
40
+ result.instanceIssues.push({
41
+ title: 'SQLite legacy driver removed',
42
+ description: 'SQLite now uses WAL (Write-Ahead Logging) mode exclusively. The legacy driver (DB_SQLITE_POOL_SIZE=0) has been removed. Three database files will be created: database.sqlite (main), database.sqlite-wal (write-ahead log), and database.sqlite-shm (shared memory).',
43
+ level: 'warning',
44
+ });
45
+ result.instanceIssues.push({
46
+ title: 'File system compatibility requirements',
47
+ description: 'Incompatible file systems include: NFS versions < 4, CIFS/SMB network shares, read-only file systems, and some container overlay filesystems.',
48
+ level: 'warning',
49
+ });
50
+ result.recommendations.push({
51
+ action: 'Set DB_SQLITE_POOL_SIZE to enable WAL mode',
52
+ description: 'Set DB_SQLITE_POOL_SIZE to a value >= 1 (recommended: 3) to use the modern SQLite driver with WAL mode',
53
+ });
54
+ result.recommendations.push({
55
+ action: 'Update backup procedures',
56
+ description: 'Ensure backups include all three SQLite files (database.sqlite, database.sqlite-wal, database.sqlite-shm) or use the online backup API',
57
+ });
58
+ result.recommendations.push({
59
+ action: 'Verify file system compatibility',
60
+ description: 'Verify Docker volumes and file systems support shared memory operations required by WAL mode',
61
+ });
62
+ result.recommendations.push({
63
+ action: 'Rollback procedure if needed',
64
+ description: 'If rolling back to v1.x, convert back to rollback journal mode using: sqlite3 ~/.n8n/database.sqlite "PRAGMA journal_mode=DELETE;"',
65
+ });
66
+ }
67
+ return result;
68
+ }
69
+ };
70
+ exports.SqliteLegacyDriverRule = SqliteLegacyDriverRule;
71
+ exports.SqliteLegacyDriverRule = SqliteLegacyDriverRule = __decorate([
72
+ (0, di_1.Service)(),
73
+ __metadata("design:paramtypes", [config_1.GlobalConfig])
74
+ ], SqliteLegacyDriverRule);
75
+ //# sourceMappingURL=sqlite-legacy-driver.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-legacy-driver.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v2/sqlite-legacy-driver.rule.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA2C;AAC3C,gCAAkC;AAU3B,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAClC,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAEvD,OAAE,GAAW,yBAAyB,CAAC;IAFmB,CAAC;IAI3D,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,6BAA6B;YACpC,WAAW,EACV,4FAA4F;YAC7F,QAAQ,YAAiC;YACzC,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,uEAAuE;SACzF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,MAAM,GAA4B;YACvC,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,EAAE;SACnB,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAG9D,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,8BAA8B;gBACrC,WAAW,EACV,uQAAuQ;gBACxQ,KAAK,EAAE,SAAS;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,wCAAwC;gBAC/C,WAAW,EACV,+IAA+I;gBAChJ,KAAK,EAAE,SAAS;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC3B,MAAM,EAAE,4CAA4C;gBACpD,WAAW,EACV,wGAAwG;aACzG,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC3B,MAAM,EAAE,0BAA0B;gBAClC,WAAW,EACV,wIAAwI;aACzI,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC3B,MAAM,EAAE,kCAAkC;gBAC1C,WAAW,EACV,8FAA8F;aAC/F,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC3B,MAAM,EAAE,8BAA8B;gBACtC,WAAW,EACV,oIAAoI;aACrI,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AAxEY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,YAAO,GAAE;qCAEkC,qBAAY;GAD3C,sBAAsB,CAwElC"}
@@ -0,0 +1,6 @@
1
+ import type { BreakingChangeRuleMetadata, IBreakingChangeInstanceRule, InstanceDetectionReport } from '../../types';
2
+ export declare class TaskRunnerDockerImageRule implements IBreakingChangeInstanceRule {
3
+ id: string;
4
+ getMetadata(): BreakingChangeRuleMetadata;
5
+ detect(): Promise<InstanceDetectionReport>;
6
+ }