n8n 2.16.0 → 2.17.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 (323) hide show
  1. package/README.md +1 -1
  2. package/dist/active-workflow-manager.d.ts +3 -1
  3. package/dist/active-workflow-manager.js +37 -4
  4. package/dist/active-workflow-manager.js.map +1 -1
  5. package/dist/auth/auth.service.d.ts +5 -2
  6. package/dist/auth/auth.service.js +10 -6
  7. package/dist/auth/auth.service.js.map +1 -1
  8. package/dist/build.tsbuildinfo +1 -1
  9. package/dist/commands/base-command.js +8 -2
  10. package/dist/commands/base-command.js.map +1 -1
  11. package/dist/commands/start.d.ts +1 -0
  12. package/dist/commands/start.js +7 -0
  13. package/dist/commands/start.js.map +1 -1
  14. package/dist/constants.d.ts +2 -0
  15. package/dist/constants.js +5 -1
  16. package/dist/constants.js.map +1 -1
  17. package/dist/controllers/ai.controller.d.ts +11 -2
  18. package/dist/controllers/ai.controller.js +54 -2
  19. package/dist/controllers/ai.controller.js.map +1 -1
  20. package/dist/controllers/auth.controller.js +1 -1
  21. package/dist/controllers/auth.controller.js.map +1 -1
  22. package/dist/controllers/e2e.controller.js +3 -0
  23. package/dist/controllers/e2e.controller.js.map +1 -1
  24. package/dist/controllers/me.controller.d.ts +1 -0
  25. package/dist/controllers/me.controller.js +12 -0
  26. package/dist/controllers/me.controller.js.map +1 -1
  27. package/dist/controllers/project.controller.d.ts +3 -1
  28. package/dist/controllers/project.controller.js +9 -2
  29. package/dist/controllers/project.controller.js.map +1 -1
  30. package/dist/controllers/role.controller.d.ts +6 -4
  31. package/dist/controllers/role.controller.js +28 -8
  32. package/dist/controllers/role.controller.js.map +1 -1
  33. package/dist/controllers/users.controller.d.ts +4 -1
  34. package/dist/controllers/users.controller.js +8 -2
  35. package/dist/controllers/users.controller.js.map +1 -1
  36. package/dist/credentials/credentials.controller.js +3 -0
  37. package/dist/credentials/credentials.controller.js.map +1 -1
  38. package/dist/credentials/credentials.service.d.ts +3 -2
  39. package/dist/credentials/credentials.service.js +21 -10
  40. package/dist/credentials/credentials.service.js.map +1 -1
  41. package/dist/credentials/validation.js +2 -2
  42. package/dist/credentials/validation.js.map +1 -1
  43. package/dist/credentials-helper.d.ts +3 -1
  44. package/dist/credentials-helper.js +14 -2
  45. package/dist/credentials-helper.js.map +1 -1
  46. package/dist/eventbus/event-message-classes/index.d.ts +2 -2
  47. package/dist/eventbus/event-message-classes/index.js +7 -0
  48. package/dist/eventbus/event-message-classes/index.js.map +1 -1
  49. package/dist/events/maps/relay.event-map.d.ts +92 -0
  50. package/dist/events/relays/log-streaming.event-relay.d.ts +7 -0
  51. package/dist/events/relays/log-streaming.event-relay.js +87 -2
  52. package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
  53. package/dist/events/relays/telemetry.event-relay.d.ts +5 -0
  54. package/dist/events/relays/telemetry.event-relay.js +58 -5
  55. package/dist/events/relays/telemetry.event-relay.js.map +1 -1
  56. package/dist/execution-lifecycle/execution-lifecycle-hooks.d.ts +1 -1
  57. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +22 -9
  58. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  59. package/dist/instance-settings-loader/instance-settings-loader.service.d.ts +9 -0
  60. package/dist/instance-settings-loader/instance-settings-loader.service.js +36 -0
  61. package/dist/instance-settings-loader/instance-settings-loader.service.js.map +1 -0
  62. package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.d.ts +10 -0
  63. package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.js +72 -0
  64. package/dist/instance-settings-loader/loaders/owner.instance-settings-loader.js.map +1 -0
  65. package/dist/modules/chat-hub/stream-capturer.js +3 -0
  66. package/dist/modules/chat-hub/stream-capturer.js.map +1 -1
  67. package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.d.ts +2 -2
  68. package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.d.ts +5 -2
  69. package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.js +10 -3
  70. package/dist/modules/external-secrets.ee/external-secrets-settings.controller.ee.js.map +1 -1
  71. package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js +5 -5
  72. package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js.map +1 -1
  73. package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.d.ts +6 -6
  74. package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js +14 -9
  75. package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js.map +1 -1
  76. package/dist/modules/external-secrets.ee/secrets-providers-project.controller.ee.js +3 -3
  77. package/dist/modules/external-secrets.ee/secrets-providers-project.controller.ee.js.map +1 -1
  78. package/dist/modules/instance-ai/eval/api-docs.d.ts +1 -0
  79. package/dist/modules/instance-ai/eval/api-docs.js +78 -0
  80. package/dist/modules/instance-ai/eval/api-docs.js.map +1 -0
  81. package/dist/modules/instance-ai/eval/execution.service.d.ts +25 -0
  82. package/dist/modules/instance-ai/eval/execution.service.js +291 -0
  83. package/dist/modules/instance-ai/eval/execution.service.js.map +1 -0
  84. package/dist/modules/instance-ai/eval/mock-handler.d.ts +9 -0
  85. package/dist/modules/instance-ai/eval/mock-handler.js +264 -0
  86. package/dist/modules/instance-ai/eval/mock-handler.js.map +1 -0
  87. package/dist/modules/instance-ai/eval/node-config.d.ts +2 -0
  88. package/dist/modules/instance-ai/eval/node-config.js +15 -0
  89. package/dist/modules/instance-ai/eval/node-config.js.map +1 -0
  90. package/dist/modules/instance-ai/eval/pin-data-generator.d.ts +12 -0
  91. package/dist/modules/instance-ai/eval/pin-data-generator.js +301 -0
  92. package/dist/modules/instance-ai/eval/pin-data-generator.js.map +1 -0
  93. package/dist/modules/instance-ai/eval/request-sanitizer.d.ts +3 -0
  94. package/dist/modules/instance-ai/eval/request-sanitizer.js +50 -0
  95. package/dist/modules/instance-ai/eval/request-sanitizer.js.map +1 -0
  96. package/dist/modules/instance-ai/eval/workflow-analysis.d.ts +16 -0
  97. package/dist/modules/instance-ai/eval/workflow-analysis.js +217 -0
  98. package/dist/modules/instance-ai/eval/workflow-analysis.js.map +1 -0
  99. package/dist/modules/instance-ai/filesystem/index.d.ts +0 -1
  100. package/dist/modules/instance-ai/filesystem/index.js +1 -3
  101. package/dist/modules/instance-ai/filesystem/index.js.map +1 -1
  102. package/dist/modules/instance-ai/filesystem/local-gateway.js +1 -1
  103. package/dist/modules/instance-ai/instance-ai-memory.service.d.ts +11 -7
  104. package/dist/modules/instance-ai/instance-ai-memory.service.js +21 -41
  105. package/dist/modules/instance-ai/instance-ai-memory.service.js.map +1 -1
  106. package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +4 -0
  107. package/dist/modules/instance-ai/instance-ai-settings.service.js +26 -6
  108. package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
  109. package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +8 -3
  110. package/dist/modules/instance-ai/instance-ai.adapter.service.js +189 -35
  111. package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
  112. package/dist/modules/instance-ai/instance-ai.controller.d.ts +10 -11
  113. package/dist/modules/instance-ai/instance-ai.controller.js +101 -44
  114. package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
  115. package/dist/modules/instance-ai/instance-ai.module.d.ts +1 -2
  116. package/dist/modules/instance-ai/instance-ai.module.js +4 -5
  117. package/dist/modules/instance-ai/instance-ai.module.js.map +1 -1
  118. package/dist/modules/instance-ai/instance-ai.service.d.ts +9 -8
  119. package/dist/modules/instance-ai/instance-ai.service.js +189 -61
  120. package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
  121. package/dist/modules/instance-ai/internal-messages.js +1 -1
  122. package/dist/modules/instance-ai/internal-messages.js.map +1 -1
  123. package/dist/modules/instance-ai/proxy-token-manager.d.ts +15 -0
  124. package/dist/modules/instance-ai/proxy-token-manager.js +64 -0
  125. package/dist/modules/instance-ai/proxy-token-manager.js.map +1 -0
  126. package/dist/modules/instance-ai/snapshot-pruning.service.d.ts +4 -1
  127. package/dist/modules/instance-ai/snapshot-pruning.service.js +18 -6
  128. package/dist/modules/instance-ai/snapshot-pruning.service.js.map +1 -1
  129. package/dist/modules/instance-ai/storage/db-snapshot-storage.d.ts +4 -0
  130. package/dist/modules/instance-ai/storage/db-snapshot-storage.js +25 -0
  131. package/dist/modules/instance-ai/storage/db-snapshot-storage.js.map +1 -1
  132. package/dist/modules/instance-ai/storage/typeorm-memory-storage.js +1 -1
  133. package/dist/modules/instance-ai/storage/typeorm-memory-storage.js.map +1 -1
  134. package/dist/modules/instance-ai/web-research/brave-search.d.ts +1 -1
  135. package/dist/modules/instance-ai/web-research/brave-search.js +2 -1
  136. package/dist/modules/instance-ai/web-research/brave-search.js.map +1 -1
  137. package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.d.ts +7 -0
  138. package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.js +37 -0
  139. package/dist/modules/instance-version-history/database/entities/instance-version-history.entity.js.map +1 -0
  140. package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.d.ts +5 -0
  141. package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.js +26 -0
  142. package/dist/modules/instance-version-history/database/repositories/instance-version-history.repository.js.map +1 -0
  143. package/dist/modules/instance-version-history/instance-version-history.controller.d.ts +26 -0
  144. package/dist/modules/instance-version-history/instance-version-history.controller.js +85 -0
  145. package/dist/modules/instance-version-history/instance-version-history.controller.js.map +1 -0
  146. package/dist/modules/instance-version-history/instance-version-history.module.d.ts +5 -0
  147. package/dist/modules/instance-version-history/instance-version-history.module.js +60 -0
  148. package/dist/modules/instance-version-history/instance-version-history.module.js.map +1 -0
  149. package/dist/modules/instance-version-history/instance-version-history.service.d.ts +18 -0
  150. package/dist/modules/instance-version-history/instance-version-history.service.js +120 -0
  151. package/dist/modules/instance-version-history/instance-version-history.service.js.map +1 -0
  152. package/dist/modules/instance-version-history/instance-version-history.types.d.ts +12 -0
  153. package/dist/modules/instance-version-history/instance-version-history.types.js +27 -0
  154. package/dist/modules/instance-version-history/instance-version-history.types.js.map +1 -0
  155. package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +5 -2
  156. package/dist/modules/provisioning.ee/provisioning.service.ee.js +55 -11
  157. package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
  158. package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.d.ts +7 -5
  159. package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js +40 -10
  160. package/dist/modules/provisioning.ee/role-mapping-rule.controller.ee.js.map +1 -1
  161. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.d.ts +3 -1
  162. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js +1 -0
  163. package/dist/modules/provisioning.ee/role-mapping-rule.service.ee.js.map +1 -1
  164. package/dist/modules/provisioning.ee/role-resolver-types.d.ts +14 -2
  165. package/dist/modules/provisioning.ee/role-resolver.service.ee.js +16 -6
  166. package/dist/modules/provisioning.ee/role-resolver.service.ee.js.map +1 -1
  167. package/dist/modules/source-control.ee/source-control-context.factory.d.ts +12 -0
  168. package/dist/modules/source-control.ee/source-control-context.factory.js +112 -0
  169. package/dist/modules/source-control.ee/source-control-context.factory.js.map +1 -0
  170. package/dist/modules/source-control.ee/source-control-export.service.ee.d.ts +2 -2
  171. package/dist/modules/source-control.ee/source-control-export.service.ee.js +9 -11
  172. package/dist/modules/source-control.ee/source-control-export.service.ee.js.map +1 -1
  173. package/dist/modules/source-control.ee/source-control-git.service.ee.js +3 -3
  174. package/dist/modules/source-control.ee/source-control-git.service.ee.js.map +1 -1
  175. package/dist/modules/source-control.ee/source-control-import.service.ee.d.ts +6 -4
  176. package/dist/modules/source-control.ee/source-control-import.service.ee.js +29 -85
  177. package/dist/modules/source-control.ee/source-control-import.service.ee.js.map +1 -1
  178. package/dist/modules/source-control.ee/source-control-scoped.service.d.ts +4 -4
  179. package/dist/modules/source-control.ee/source-control-scoped.service.js +9 -40
  180. package/dist/modules/source-control.ee/source-control-scoped.service.js.map +1 -1
  181. package/dist/modules/source-control.ee/source-control-status.service.ee.d.ts +3 -1
  182. package/dist/modules/source-control.ee/source-control-status.service.ee.js +99 -59
  183. package/dist/modules/source-control.ee/source-control-status.service.ee.js.map +1 -1
  184. package/dist/modules/source-control.ee/source-control.service.ee.d.ts +3 -1
  185. package/dist/modules/source-control.ee/source-control.service.ee.js +6 -4
  186. package/dist/modules/source-control.ee/source-control.service.ee.js.map +1 -1
  187. package/dist/modules/source-control.ee/types/source-control-context.d.ts +12 -4
  188. package/dist/modules/source-control.ee/types/source-control-context.js +32 -6
  189. package/dist/modules/source-control.ee/types/source-control-context.js.map +1 -1
  190. package/dist/modules/sso-saml/saml.controller.ee.d.ts +2 -3
  191. package/dist/modules/sso-saml/saml.controller.ee.js +3 -15
  192. package/dist/modules/sso-saml/saml.controller.ee.js.map +1 -1
  193. package/dist/modules/token-exchange/controllers/embed-auth.controller.d.ts +5 -1
  194. package/dist/modules/token-exchange/controllers/embed-auth.controller.js +50 -11
  195. package/dist/modules/token-exchange/controllers/embed-auth.controller.js.map +1 -1
  196. package/dist/modules/token-exchange/{token-exchange.controller.d.ts → controllers/token-exchange.controller.d.ts} +1 -1
  197. package/dist/modules/token-exchange/{token-exchange.controller.js → controllers/token-exchange.controller.js} +50 -5
  198. package/dist/modules/token-exchange/controllers/token-exchange.controller.js.map +1 -0
  199. package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.d.ts +10 -0
  200. package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.js +45 -0
  201. package/dist/modules/token-exchange/database/entities/trusted-key-source.entity.js.map +1 -0
  202. package/dist/modules/token-exchange/database/entities/trusted-key.entity.d.ts +9 -0
  203. package/dist/modules/token-exchange/database/entities/trusted-key.entity.js +43 -0
  204. package/dist/modules/token-exchange/database/entities/trusted-key.entity.js.map +1 -0
  205. package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.d.ts +5 -0
  206. package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.js +26 -0
  207. package/dist/modules/token-exchange/database/repositories/trusted-key-source.repository.js.map +1 -0
  208. package/dist/modules/token-exchange/database/repositories/trusted-key.repository.d.ts +7 -0
  209. package/dist/modules/token-exchange/database/repositories/trusted-key.repository.js +32 -0
  210. package/dist/modules/token-exchange/database/repositories/trusted-key.repository.js.map +1 -0
  211. package/dist/modules/token-exchange/services/identity-resolution.service.d.ts +20 -2
  212. package/dist/modules/token-exchange/services/identity-resolution.service.js +178 -4
  213. package/dist/modules/token-exchange/services/identity-resolution.service.js.map +1 -1
  214. package/dist/modules/token-exchange/services/jti-cleanup.service.js +1 -1
  215. package/dist/modules/token-exchange/services/jti-cleanup.service.js.map +1 -1
  216. package/dist/modules/token-exchange/services/jwks-resolver.d.ts +30 -0
  217. package/dist/modules/token-exchange/services/jwks-resolver.js +190 -0
  218. package/dist/modules/token-exchange/services/jwks-resolver.js.map +1 -0
  219. package/dist/modules/token-exchange/services/scoped-jwt.strategy.d.ts +12 -0
  220. package/dist/modules/token-exchange/services/scoped-jwt.strategy.js +92 -0
  221. package/dist/modules/token-exchange/services/scoped-jwt.strategy.js.map +1 -0
  222. package/dist/modules/token-exchange/services/token-exchange.service.d.ts +18 -4
  223. package/dist/modules/token-exchange/services/token-exchange.service.js +65 -6
  224. package/dist/modules/token-exchange/services/token-exchange.service.js.map +1 -1
  225. package/dist/modules/token-exchange/services/trusted-key.service.d.ts +40 -6
  226. package/dist/modules/token-exchange/services/trusted-key.service.js +374 -32
  227. package/dist/modules/token-exchange/services/trusted-key.service.js.map +1 -1
  228. package/dist/modules/token-exchange/token-exchange.config.d.ts +4 -0
  229. package/dist/modules/token-exchange/token-exchange.config.js +20 -0
  230. package/dist/modules/token-exchange/token-exchange.config.js.map +1 -1
  231. package/dist/modules/token-exchange/token-exchange.module.js +7 -2
  232. package/dist/modules/token-exchange/token-exchange.module.js.map +1 -1
  233. package/dist/modules/token-exchange/token-exchange.schemas.d.ts +35 -5
  234. package/dist/modules/token-exchange/token-exchange.schemas.js +16 -7
  235. package/dist/modules/token-exchange/token-exchange.schemas.js.map +1 -1
  236. package/dist/modules/token-exchange/token-exchange.types.d.ts +5 -2
  237. package/dist/modules/token-exchange/token-exchange.types.js +2 -0
  238. package/dist/modules/token-exchange/token-exchange.types.js.map +1 -1
  239. package/dist/oauth/oauth.service.d.ts +1 -0
  240. package/dist/oauth/oauth.service.js +39 -2
  241. package/dist/oauth/oauth.service.js.map +1 -1
  242. package/dist/public-api/index.js +32 -4
  243. package/dist/public-api/index.js.map +1 -1
  244. package/dist/public-api/types.d.ts +11 -1
  245. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.d.ts +1 -0
  246. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js +5 -5
  247. package/dist/public-api/v1/handlers/community-packages/community-packages.handler.js.map +1 -1
  248. package/dist/public-api/v1/handlers/credentials/credentials.handler.js +7 -12
  249. package/dist/public-api/v1/handlers/credentials/credentials.handler.js.map +1 -1
  250. package/dist/public-api/v1/handlers/credentials/credentials.service.d.ts +3 -4
  251. package/dist/public-api/v1/handlers/credentials/credentials.service.js +21 -33
  252. package/dist/public-api/v1/handlers/credentials/credentials.service.js.map +1 -1
  253. package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js +5 -5
  254. package/dist/public-api/v1/handlers/data-tables/data-tables.rows.handler.js +5 -5
  255. package/dist/public-api/v1/handlers/executions/executions.handler.js +8 -8
  256. package/dist/public-api/v1/handlers/insights/insights.handler.d.ts +6 -0
  257. package/dist/public-api/v1/handlers/insights/insights.handler.js +57 -0
  258. package/dist/public-api/v1/handlers/insights/insights.handler.js.map +1 -0
  259. package/dist/public-api/v1/handlers/workflows/workflows.handler.js +14 -35
  260. package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
  261. package/dist/public-api/v1/handlers/workflows/workflows.service.d.ts +6 -4
  262. package/dist/public-api/v1/handlers/workflows/workflows.service.js +7 -15
  263. package/dist/public-api/v1/handlers/workflows/workflows.service.js.map +1 -1
  264. package/dist/public-api/v1/openapi.yml +322 -7
  265. package/dist/public-api/v1/shared/middlewares/global.middleware.d.ts +1 -1
  266. package/dist/public-api/v1/shared/middlewares/global.middleware.js +19 -8
  267. package/dist/public-api/v1/shared/middlewares/global.middleware.js.map +1 -1
  268. package/dist/security-audit/risk-reporters/credentials-risk-reporter.d.ts +2 -3
  269. package/dist/security-audit/risk-reporters/credentials-risk-reporter.js +2 -5
  270. package/dist/security-audit/risk-reporters/credentials-risk-reporter.js.map +1 -1
  271. package/dist/services/ai-gateway.service.d.ts +44 -0
  272. package/dist/services/ai-gateway.service.js +228 -0
  273. package/dist/services/ai-gateway.service.js.map +1 -0
  274. package/dist/services/api-key-auth.strategy.d.ts +10 -0
  275. package/dist/services/api-key-auth.strategy.js +71 -0
  276. package/dist/services/api-key-auth.strategy.js.map +1 -0
  277. package/dist/services/frontend.service.js +7 -0
  278. package/dist/services/frontend.service.js.map +1 -1
  279. package/dist/services/import.service.d.ts +1 -0
  280. package/dist/services/import.service.js +25 -2
  281. package/dist/services/import.service.js.map +1 -1
  282. package/dist/services/ownership.service.d.ts +4 -1
  283. package/dist/services/ownership.service.js +11 -5
  284. package/dist/services/ownership.service.js.map +1 -1
  285. package/dist/services/project.service.ee.js +1 -1
  286. package/dist/services/project.service.ee.js.map +1 -1
  287. package/dist/services/pruning/workflow-history-compaction.service.js +4 -4
  288. package/dist/services/pruning/workflow-history-compaction.service.js.map +1 -1
  289. package/dist/services/public-api-key.service.d.ts +6 -13
  290. package/dist/services/public-api-key.service.js +12 -80
  291. package/dist/services/public-api-key.service.js.map +1 -1
  292. package/dist/services/user.service.js +6 -0
  293. package/dist/services/user.service.js.map +1 -1
  294. package/dist/utils/validate-redirect-url.d.ts +1 -0
  295. package/dist/utils/validate-redirect-url.js +17 -0
  296. package/dist/utils/validate-redirect-url.js.map +1 -0
  297. package/dist/webhooks/webhook-form-data.js +6 -2
  298. package/dist/webhooks/webhook-form-data.js.map +1 -1
  299. package/dist/webhooks/webhook.service.js +19 -4
  300. package/dist/webhooks/webhook.service.js.map +1 -1
  301. package/dist/workflow-execute-additional-data.js +2 -0
  302. package/dist/workflow-execute-additional-data.js.map +1 -1
  303. package/dist/workflow-helpers.d.ts +1 -0
  304. package/dist/workflow-helpers.js +21 -0
  305. package/dist/workflow-helpers.js.map +1 -1
  306. package/dist/workflow-runner.js +25 -1
  307. package/dist/workflow-runner.js.map +1 -1
  308. package/dist/workflows/workflow-creation.service.d.ts +8 -5
  309. package/dist/workflows/workflow-creation.service.js +36 -17
  310. package/dist/workflows/workflow-creation.service.js.map +1 -1
  311. package/dist/workflows/workflow.service.ee.js +4 -1
  312. package/dist/workflows/workflow.service.ee.js.map +1 -1
  313. package/dist/workflows/workflow.service.js +4 -1
  314. package/dist/workflows/workflow.service.js.map +1 -1
  315. package/dist/workflows/workflows.controller.d.ts +2 -2
  316. package/package.json +25 -26
  317. package/dist/modules/instance-ai/filesystem/local-fs-provider.d.ts +0 -26
  318. package/dist/modules/instance-ai/filesystem/local-fs-provider.js +0 -321
  319. package/dist/modules/instance-ai/filesystem/local-fs-provider.js.map +0 -1
  320. package/dist/modules/token-exchange/token-exchange.controller.js.map +0 -1
  321. package/dist/modules/token-exchange/token-exchange.service.d.ts +0 -9
  322. package/dist/modules/token-exchange/token-exchange.service.js +0 -66
  323. package/dist/modules/token-exchange/token-exchange.service.js.map +0 -1
@@ -1,13 +1,49 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
2
18
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
19
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
20
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
21
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
22
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
23
  };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
8
41
  var __metadata = (this && this.__metadata) || function (k, v) {
9
42
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
43
  };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
11
47
  Object.defineProperty(exports, "__esModule", { value: true });
12
48
  exports.InstanceAiAdapterService = void 0;
13
49
  exports.truncateResultData = truncateResultData;
@@ -16,6 +52,8 @@ exports.truncateNodeOutput = truncateNodeOutput;
16
52
  exports.extractNodeOutput = extractNodeOutput;
17
53
  exports.extractExecutionDebugInfo = extractExecutionDebugInfo;
18
54
  const node_crypto_1 = require("node:crypto");
55
+ const promises_1 = require("node:fs/promises");
56
+ const node_path_1 = __importDefault(require("node:path"));
19
57
  const instance_ai_1 = require("@n8n/instance-ai");
20
58
  const config_1 = require("@n8n/config");
21
59
  const constants_1 = require("@n8n/constants");
@@ -28,6 +66,7 @@ const di_1 = require("@n8n/di");
28
66
  const permissions_1 = require("@n8n/permissions");
29
67
  const typeorm_1 = require("@n8n/typeorm");
30
68
  const n8n_workflow_1 = require("n8n-workflow");
69
+ const n8n_core_1 = require("n8n-core");
31
70
  const active_executions_1 = require("../../active-executions");
32
71
  const credentials_finder_service_1 = require("../../credentials/credentials-finder.service");
33
72
  const credentials_service_1 = require("../../credentials/credentials.service");
@@ -48,6 +87,7 @@ const workflow_finder_service_1 = require("../../workflows/workflow-finder.servi
48
87
  const workflow_history_service_1 = require("../../workflows/workflow-history/workflow-history.service");
49
88
  const workflow_service_1 = require("../../workflows/workflow.service");
50
89
  const workflow_service_ee_1 = require("../../workflows/workflow.service.ee");
90
+ const telemetry_1 = require("../../telemetry");
51
91
  const workflow_runner_1 = require("../../workflow-runner");
52
92
  const workflow_execute_additional_data_1 = require("../../workflow-execute-additional-data");
53
93
  let InstanceAiAdapterService = class InstanceAiAdapterService {
@@ -55,14 +95,15 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
55
95
  if (this.nodesCache && Date.now() < this.nodesCache.expiresAt) {
56
96
  return await this.nodesCache.promise;
57
97
  }
58
- const promise = this.loadNodesAndCredentials.collectTypes().then((result) => result.nodes);
98
+ const filePath = node_path_1.default.join(this.instanceSettings.staticCacheDir, 'types/nodes.json');
99
+ const promise = (0, promises_1.readFile)(filePath, 'utf-8').then((json) => (0, n8n_workflow_1.jsonParse)(json));
59
100
  this.nodesCache = { promise, expiresAt: Date.now() + this.NODES_CACHE_TTL_MS };
60
101
  promise.catch(() => {
61
102
  this.nodesCache = null;
62
103
  });
63
104
  return await promise;
64
105
  }
65
- constructor(logger, globalConfig, workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, projectRepository, executionRepository, credentialsService, credentialsFinderService, activeExecutions, workflowRunner, loadNodesAndCredentials, dataTableService, dataTableRepository, dynamicNodeParametersService, folderService, projectService, tagService, sourceControlPreferencesService, settingsService, workflowHistoryService, enterpriseWorkflowService, license, executionPersistence, eventService, roleService) {
106
+ constructor(logger, globalConfig, workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, projectRepository, executionRepository, credentialsService, credentialsFinderService, activeExecutions, workflowRunner, loadNodesAndCredentials, instanceSettings, dataTableService, dataTableRepository, dynamicNodeParametersService, folderService, projectService, tagService, sourceControlPreferencesService, settingsService, workflowHistoryService, enterpriseWorkflowService, license, executionPersistence, eventService, roleService, telemetry) {
66
107
  this.workflowService = workflowService;
67
108
  this.workflowFinderService = workflowFinderService;
68
109
  this.workflowRepository = workflowRepository;
@@ -74,6 +115,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
74
115
  this.activeExecutions = activeExecutions;
75
116
  this.workflowRunner = workflowRunner;
76
117
  this.loadNodesAndCredentials = loadNodesAndCredentials;
118
+ this.instanceSettings = instanceSettings;
77
119
  this.dataTableService = dataTableService;
78
120
  this.dataTableRepository = dataTableRepository;
79
121
  this.dynamicNodeParametersService = dynamicNodeParametersService;
@@ -88,6 +130,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
88
130
  this.executionPersistence = executionPersistence;
89
131
  this.eventService = eventService;
90
132
  this.roleService = roleService;
133
+ this.telemetry = telemetry;
91
134
  this.nodesCache = null;
92
135
  this.NODES_CACHE_TTL_MS = 5 * 60 * 1000;
93
136
  this.webResearchCache = new web_research_1.LRUCache({
@@ -102,18 +145,17 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
102
145
  this.allowSendingParameterValues = globalConfig.ai.allowSendingParameterValues;
103
146
  }
104
147
  createContext(user, options) {
105
- const { filesystemService, searchProxyConfig, pushRef } = options ?? {};
148
+ const { searchProxyConfig, pushRef, threadId } = options ?? {};
106
149
  return {
107
150
  userId: user.id,
108
- workflowService: this.createWorkflowAdapter(user),
109
- executionService: this.createExecutionAdapter(user, pushRef),
151
+ workflowService: this.createWorkflowAdapter(user, threadId),
152
+ executionService: this.createExecutionAdapter(user, pushRef, threadId),
110
153
  credentialService: this.createCredentialAdapter(user),
111
154
  nodeService: this.createNodeAdapter(user),
112
155
  dataTableService: this.createDataTableAdapter(user),
113
156
  webResearchService: this.createWebResearchAdapter(user, searchProxyConfig),
114
157
  workspaceService: this.createWorkspaceAdapter(user),
115
158
  licenseHints: this.buildLicenseHints(),
116
- ...(filesystemService ? { filesystemService } : {}),
117
159
  };
118
160
  }
119
161
  buildLicenseHints() {
@@ -126,6 +168,11 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
126
168
  }
127
169
  return hints;
128
170
  }
171
+ assertInstanceNotReadOnly(resourceType) {
172
+ if (this.sourceControlPreferencesService.getPreferences().branchReadOnly) {
173
+ throw new Error(`Cannot modify ${resourceType} on a protected instance. This instance is in read-only mode.`);
174
+ }
175
+ }
129
176
  createProjectScopeHelpers(user) {
130
177
  const { projectRepository } = this;
131
178
  let personalProjectIdPromise = null;
@@ -148,8 +195,9 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
148
195
  };
149
196
  return { getPersonalProjectId, assertProjectScope, resolveProjectId };
150
197
  }
151
- createWorkflowAdapter(user) {
152
- const { workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, workflowHistoryService, enterpriseWorkflowService, license, allowSendingParameterValues, } = this;
198
+ createWorkflowAdapter(user, threadId) {
199
+ const { workflowService, workflowFinderService, workflowRepository, sharedWorkflowRepository, workflowHistoryService, enterpriseWorkflowService, license, allowSendingParameterValues, telemetry, } = this;
200
+ const assertNotReadOnly = () => this.assertInstanceNotReadOnly('workflows');
153
201
  const { resolveProjectId } = this.createProjectScopeHelpers(user);
154
202
  const redactParameters = !allowSendingParameterValues;
155
203
  return {
@@ -182,9 +230,11 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
182
230
  return toWorkflowDetail(workflow, { redactParameters });
183
231
  },
184
232
  async archive(workflowId) {
233
+ assertNotReadOnly();
185
234
  await workflowService.archive(user, workflowId, { skipArchived: true });
186
235
  },
187
236
  async delete(workflowId) {
237
+ assertNotReadOnly();
188
238
  await workflowService.delete(user, workflowId);
189
239
  },
190
240
  async publish(workflowId, options) {
@@ -196,6 +246,12 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
196
246
  if (!wf.activeVersionId) {
197
247
  throw new Error(`Workflow ${workflowId} was not activated — no active version set`);
198
248
  }
249
+ if (threadId) {
250
+ telemetry.track('Builder published workflow', {
251
+ thread_id: threadId,
252
+ executed_by: 'ai',
253
+ });
254
+ }
199
255
  return { activeVersionId: wf.activeVersionId };
200
256
  },
201
257
  async unpublish(workflowId) {
@@ -210,6 +266,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
210
266
  return toWorkflowJSON(wf, { redactParameters });
211
267
  },
212
268
  async createFromWorkflowJSON(json, options) {
269
+ assertNotReadOnly();
213
270
  const projectId = await resolveProjectId(['workflow:create'], options?.projectId);
214
271
  const settings = (json.settings ?? {});
215
272
  if (settings.redactionPolicy !== undefined) {
@@ -243,9 +300,16 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
243
300
  updateData = await enterpriseWorkflowService.preventTampering(updateData, saved.id, user);
244
301
  }
245
302
  const updated = await workflowService.update(user, updateData, saved.id);
303
+ if (threadId) {
304
+ telemetry.track('Builder created workflow', {
305
+ thread_id: threadId,
306
+ workflow_id: updated.id,
307
+ });
308
+ }
246
309
  return toWorkflowDetail(updated, { redactParameters });
247
310
  },
248
311
  async updateFromWorkflowJSON(workflowId, json, _options) {
312
+ assertNotReadOnly();
249
313
  const settings = (json.settings ?? {});
250
314
  if (settings.redactionPolicy !== undefined) {
251
315
  const canUpdateRedaction = await (0, check_access_1.userHasScopes)(user, ['workflow:updateRedactionSetting'], false, { workflowId });
@@ -264,6 +328,12 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
264
328
  updateData = await enterpriseWorkflowService.preventTampering(updateData, workflowId, user);
265
329
  }
266
330
  const updated = await workflowService.update(user, updateData, workflowId);
331
+ if (threadId) {
332
+ telemetry.track('Builder modified workflow', {
333
+ thread_id: threadId,
334
+ workflow_id: workflowId,
335
+ });
336
+ }
267
337
  return toWorkflowDetail(updated, { redactParameters });
268
338
  },
269
339
  async listVersions(workflowId, options) {
@@ -328,8 +398,9 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
328
398
  : {}),
329
399
  };
330
400
  }
331
- createExecutionAdapter(user, pushRef) {
332
- const { workflowFinderService, workflowRunner, activeExecutions, executionRepository, allowSendingParameterValues, license, roleService, } = this;
401
+ createExecutionAdapter(user, pushRef, threadId) {
402
+ const { workflowFinderService, workflowRunner, activeExecutions, executionRepository, allowSendingParameterValues, license, roleService, telemetry, } = this;
403
+ const assertNotReadOnly = () => this.assertInstanceNotReadOnly('executions');
333
404
  const DEFAULT_TIMEOUT_MS = 5 * constants_1.Time.minutes.toMilliseconds;
334
405
  const MAX_TIMEOUT_MS = 10 * constants_1.Time.minutes.toMilliseconds;
335
406
  const assertExecutionAccess = async (executionId, scopes = ['workflow:read']) => {
@@ -385,6 +456,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
385
456
  }));
386
457
  },
387
458
  async run(workflowId, inputData, options) {
459
+ assertNotReadOnly();
388
460
  const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [
389
461
  'workflow:execute',
390
462
  ]);
@@ -473,6 +545,14 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
473
545
  throw error;
474
546
  }
475
547
  }
548
+ if (threadId) {
549
+ telemetry.track('Builder executed workflow', {
550
+ thread_id: threadId,
551
+ executed_by: 'ai',
552
+ pinned_node_count: Object.keys(runData.pinData ?? {}).length,
553
+ exec_type: runData.executionMode,
554
+ });
555
+ }
476
556
  return await extractExecutionResult(executionRepository, executionId, allowSendingParameterValues);
477
557
  },
478
558
  async getStatus(executionId) {
@@ -491,6 +571,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
491
571
  return await extractExecutionResult(executionRepository, executionId, allowSendingParameterValues);
492
572
  },
493
573
  async stop(executionId) {
574
+ assertNotReadOnly();
494
575
  await assertExecutionAccess(executionId, ['workflow:execute']);
495
576
  if (!activeExecutions.has(executionId)) {
496
577
  return {
@@ -541,8 +622,6 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
541
622
  id: c.id,
542
623
  name: c.name,
543
624
  type: c.type,
544
- createdAt: c.createdAt.toISOString(),
545
- updatedAt: c.updatedAt.toISOString(),
546
625
  }));
547
626
  },
548
627
  async get(credentialId) {
@@ -551,8 +630,6 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
551
630
  id: credential.id,
552
631
  name: credential.name,
553
632
  type: credential.type,
554
- createdAt: credential.createdAt.toISOString(),
555
- updatedAt: credential.updatedAt.toISOString(),
556
633
  };
557
634
  },
558
635
  async delete(credentialId) {
@@ -686,15 +763,54 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
686
763
  }
687
764
  return results;
688
765
  },
766
+ async getAccountContext(credentialId) {
767
+ const credential = await credentialsFinderService.findCredentialForUser(credentialId, user, ['credential:read']);
768
+ if (!credential) {
769
+ return { accountIdentifier: undefined };
770
+ }
771
+ const mask = (id) => {
772
+ const atIdx = id.indexOf('@');
773
+ if (atIdx > 0) {
774
+ const local = id.slice(0, atIdx);
775
+ const domain = id.slice(atIdx);
776
+ const keep = Math.min(2, local.length);
777
+ return local.slice(0, keep) + '***' + domain;
778
+ }
779
+ if (id.length <= 3)
780
+ return id;
781
+ return id.slice(0, 2) + '***' + id.slice(-1);
782
+ };
783
+ try {
784
+ const redacted = credentialsService.decrypt(credential, false);
785
+ if (typeof redacted.accountIdentifier === 'string' && redacted.accountIdentifier) {
786
+ return { accountIdentifier: mask(redacted.accountIdentifier) };
787
+ }
788
+ for (const key of ['email', 'user', 'username', 'account', 'serviceAccountEmail']) {
789
+ const value = redacted[key];
790
+ if (typeof value === 'string' && value) {
791
+ return { accountIdentifier: mask(value) };
792
+ }
793
+ }
794
+ const raw = credentialsService.decrypt(credential, true);
795
+ const tokenData = raw.oauthTokenData;
796
+ if (tokenData && typeof tokenData === 'object') {
797
+ const { OauthService } = await Promise.resolve().then(() => __importStar(require('../../oauth/oauth.service')));
798
+ const identifier = OauthService.extractAccountIdentifier(tokenData);
799
+ if (identifier) {
800
+ return { accountIdentifier: mask(identifier) };
801
+ }
802
+ }
803
+ return { accountIdentifier: undefined };
804
+ }
805
+ catch {
806
+ return { accountIdentifier: undefined };
807
+ }
808
+ },
689
809
  };
690
810
  }
691
811
  createDataTableAdapter(user) {
692
- const { dataTableService, dataTableRepository, sourceControlPreferencesService } = this;
693
- const assertInstanceNotReadOnly = () => {
694
- if (sourceControlPreferencesService.getPreferences().branchReadOnly) {
695
- throw new Error('Cannot modify data tables on a protected instance. This instance is in read-only mode.');
696
- }
697
- };
812
+ const { dataTableService, dataTableRepository } = this;
813
+ const assertNotReadOnly = () => this.assertInstanceNotReadOnly('data tables');
698
814
  const { resolveProjectId } = this.createProjectScopeHelpers(user);
699
815
  const resolveProjectIdForTable = async (scopes, dataTableId) => {
700
816
  const allowed = await (0, check_access_1.userHasScopes)(user, scopes, false, { dataTableId });
@@ -704,6 +820,14 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
704
820
  const table = await dataTableRepository.findOneByOrFail({ id: dataTableId });
705
821
  return table.projectId;
706
822
  };
823
+ const resolveTableMeta = async (scopes, dataTableId) => {
824
+ const allowed = await (0, check_access_1.userHasScopes)(user, scopes, false, { dataTableId });
825
+ if (!allowed) {
826
+ throw new Error(`Data table "${dataTableId}" not found`);
827
+ }
828
+ const table = await dataTableRepository.findOneByOrFail({ id: dataTableId });
829
+ return { projectId: table.projectId, tableName: table.name };
830
+ };
707
831
  return {
708
832
  async list(options) {
709
833
  const projectId = await resolveProjectId(['dataTable:listProject'], options?.projectId);
@@ -720,7 +844,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
720
844
  }));
721
845
  },
722
846
  async create(name, columns, options) {
723
- assertInstanceNotReadOnly();
847
+ assertNotReadOnly();
724
848
  const projectId = await resolveProjectId(['dataTable:create'], options?.projectId);
725
849
  const result = await dataTableService.createDataTable(projectId, { name, columns });
726
850
  return {
@@ -733,7 +857,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
733
857
  };
734
858
  },
735
859
  async delete(dataTableId) {
736
- assertInstanceNotReadOnly();
860
+ assertNotReadOnly();
737
861
  const projectId = await resolveProjectIdForTable(['dataTable:delete'], dataTableId);
738
862
  await dataTableService.deleteDataTable(dataTableId, projectId);
739
863
  },
@@ -748,7 +872,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
748
872
  }));
749
873
  },
750
874
  async addColumn(dataTableId, column) {
751
- assertInstanceNotReadOnly();
875
+ assertNotReadOnly();
752
876
  const projectId = await resolveProjectIdForTable(['dataTable:update'], dataTableId);
753
877
  const result = await dataTableService.addColumn(dataTableId, projectId, column);
754
878
  return {
@@ -759,12 +883,12 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
759
883
  };
760
884
  },
761
885
  async deleteColumn(dataTableId, columnId) {
762
- assertInstanceNotReadOnly();
886
+ assertNotReadOnly();
763
887
  const projectId = await resolveProjectIdForTable(['dataTable:update'], dataTableId);
764
888
  await dataTableService.deleteColumn(dataTableId, projectId, columnId);
765
889
  },
766
890
  async renameColumn(dataTableId, columnId, newName) {
767
- assertInstanceNotReadOnly();
891
+ assertNotReadOnly();
768
892
  const projectId = await resolveProjectIdForTable(['dataTable:update'], dataTableId);
769
893
  await dataTableService.renameColumn(dataTableId, projectId, columnId, {
770
894
  name: newName,
@@ -779,22 +903,37 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
779
903
  });
780
904
  },
781
905
  async insertRows(dataTableId, rows) {
782
- assertInstanceNotReadOnly();
783
- const projectId = await resolveProjectIdForTable(['dataTable:writeRow'], dataTableId);
906
+ assertNotReadOnly();
907
+ const { projectId, tableName } = await resolveTableMeta(['dataTable:writeRow'], dataTableId);
784
908
  const result = await dataTableService.insertRows(dataTableId, projectId, rows, 'count');
785
- return { insertedCount: typeof result === 'number' ? result : rows.length };
909
+ return {
910
+ insertedCount: typeof result === 'number' ? result : rows.length,
911
+ dataTableId,
912
+ tableName,
913
+ projectId,
914
+ };
786
915
  },
787
916
  async updateRows(dataTableId, filter, data) {
788
- assertInstanceNotReadOnly();
789
- const projectId = await resolveProjectIdForTable(['dataTable:writeRow'], dataTableId);
917
+ assertNotReadOnly();
918
+ const { projectId, tableName } = await resolveTableMeta(['dataTable:writeRow'], dataTableId);
790
919
  const result = await dataTableService.updateRows(dataTableId, projectId, { filter: filter, data: data }, true);
791
- return { updatedCount: Array.isArray(result) ? result.length : 0 };
920
+ return {
921
+ updatedCount: Array.isArray(result) ? result.length : 0,
922
+ dataTableId,
923
+ tableName,
924
+ projectId,
925
+ };
792
926
  },
793
927
  async deleteRows(dataTableId, filter) {
794
- assertInstanceNotReadOnly();
795
- const projectId = await resolveProjectIdForTable(['dataTable:writeRow'], dataTableId);
928
+ assertNotReadOnly();
929
+ const { projectId, tableName } = await resolveTableMeta(['dataTable:writeRow'], dataTableId);
796
930
  const result = await dataTableService.deleteRows(dataTableId, projectId, { filter: filter }, true);
797
- return { deletedCount: Array.isArray(result) ? result.length : 0 };
931
+ return {
932
+ deletedCount: Array.isArray(result) ? result.length : 0,
933
+ dataTableId,
934
+ tableName,
935
+ projectId,
936
+ };
798
937
  },
799
938
  };
800
939
  }
@@ -1123,6 +1262,13 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1123
1262
  for (const credType of Object.keys(credentialIssues)) {
1124
1263
  credentialTypes.add(credType);
1125
1264
  }
1265
+ if (parameters.authentication === 'genericCredentialType' && parameters.genericAuthType) {
1266
+ credentialTypes.add(parameters.genericAuthType);
1267
+ }
1268
+ else if (parameters.authentication === 'predefinedCredentialType' &&
1269
+ parameters.nodeCredentialType) {
1270
+ credentialTypes.add(parameters.nodeCredentialType);
1271
+ }
1126
1272
  if (existingCredentials) {
1127
1273
  for (const credType of Object.keys(existingCredentials)) {
1128
1274
  credentialTypes.add(credType);
@@ -1204,6 +1350,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1204
1350
  }
1205
1351
  createWorkspaceAdapter(user) {
1206
1352
  const { projectService, folderService, tagService, workflowFinderService, workflowService, executionRepository, executionPersistence, eventService, } = this;
1353
+ const assertNotReadOnly = (resource) => this.assertInstanceNotReadOnly(resource);
1207
1354
  const { assertProjectScope } = this.createProjectScopeHelpers(user);
1208
1355
  const adapter = {
1209
1356
  async getProject(projectId) {
@@ -1232,6 +1379,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1232
1379
  }));
1233
1380
  },
1234
1381
  async createFolder(name, projectId, parentFolderId) {
1382
+ assertNotReadOnly('folders');
1235
1383
  await assertProjectScope(['folder:create'], projectId);
1236
1384
  const folder = await folderService.createFolder({ name, parentFolderId: parentFolderId ?? undefined }, projectId);
1237
1385
  return {
@@ -1241,12 +1389,14 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1241
1389
  };
1242
1390
  },
1243
1391
  async deleteFolder(folderId, projectId, transferToFolderId) {
1392
+ assertNotReadOnly('folders');
1244
1393
  await assertProjectScope(['folder:delete'], projectId);
1245
1394
  await folderService.deleteFolder(user, folderId, projectId, {
1246
1395
  transferToFolderId: transferToFolderId ?? undefined,
1247
1396
  });
1248
1397
  },
1249
1398
  async moveWorkflowToFolder(workflowId, folderId) {
1399
+ assertNotReadOnly('workflows');
1250
1400
  const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [
1251
1401
  'workflow:update',
1252
1402
  ]);
@@ -1260,6 +1410,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1260
1410
  }
1261
1411
  : {}),
1262
1412
  async tagWorkflow(workflowId, tagNames) {
1413
+ assertNotReadOnly('workflows');
1263
1414
  const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [
1264
1415
  'workflow:update',
1265
1416
  ]);
@@ -1305,6 +1456,7 @@ let InstanceAiAdapterService = class InstanceAiAdapterService {
1305
1456
  return { id: saved.id, name: saved.name };
1306
1457
  },
1307
1458
  async cleanupTestExecutions(workflowId, options) {
1459
+ assertNotReadOnly('executions');
1308
1460
  const workflow = await workflowFinderService.findWorkflowForUser(workflowId, user, [
1309
1461
  'workflow:execute',
1310
1462
  ]);
@@ -1363,6 +1515,7 @@ exports.InstanceAiAdapterService = InstanceAiAdapterService = __decorate([
1363
1515
  active_executions_1.ActiveExecutions,
1364
1516
  workflow_runner_1.WorkflowRunner,
1365
1517
  load_nodes_and_credentials_1.LoadNodesAndCredentials,
1518
+ n8n_core_1.InstanceSettings,
1366
1519
  data_table_service_1.DataTableService,
1367
1520
  data_table_repository_1.DataTableRepository,
1368
1521
  dynamic_node_parameters_service_1.DynamicNodeParametersService,
@@ -1376,7 +1529,8 @@ exports.InstanceAiAdapterService = InstanceAiAdapterService = __decorate([
1376
1529
  license_1.License,
1377
1530
  execution_persistence_1.ExecutionPersistence,
1378
1531
  event_service_1.EventService,
1379
- role_service_1.RoleService])
1532
+ role_service_1.RoleService,
1533
+ telemetry_1.Telemetry])
1380
1534
  ], InstanceAiAdapterService);
1381
1535
  const MAX_RESULT_CHARS = 20_000;
1382
1536
  const MAX_NODE_OUTPUT_CHARS = 1_000;