n8n-workflow 2.31.1 → 2.32.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 (408) hide show
  1. package/dist/cjs/augment-object.js +136 -146
  2. package/dist/cjs/augment-object.js.map +1 -1
  3. package/dist/cjs/build.tsbuildinfo +1 -1
  4. package/dist/cjs/common/find-ai-root-node-names.js +36 -46
  5. package/dist/cjs/common/find-ai-root-node-names.js.map +1 -1
  6. package/dist/cjs/common/get-child-nodes.js +8 -18
  7. package/dist/cjs/common/get-child-nodes.js.map +1 -1
  8. package/dist/cjs/common/get-connected-nodes.js +84 -94
  9. package/dist/cjs/common/get-connected-nodes.js.map +1 -1
  10. package/dist/cjs/common/get-node-by-name.js +16 -26
  11. package/dist/cjs/common/get-node-by-name.js.map +1 -1
  12. package/dist/cjs/common/get-parent-nodes.js +14 -24
  13. package/dist/cjs/common/get-parent-nodes.js.map +1 -1
  14. package/dist/cjs/common/index.js +9 -19
  15. package/dist/cjs/common/index.js.map +1 -1
  16. package/dist/cjs/common/map-connections-by-destination.js +31 -41
  17. package/dist/cjs/common/map-connections-by-destination.js.map +1 -1
  18. package/dist/cjs/common/resolve-variables.d.ts +8 -0
  19. package/dist/cjs/common/resolve-variables.d.ts.map +1 -1
  20. package/dist/cjs/common/resolve-variables.js +46 -33
  21. package/dist/cjs/common/resolve-variables.js.map +1 -1
  22. package/dist/cjs/connections-diff.js +58 -68
  23. package/dist/cjs/connections-diff.js.map +1 -1
  24. package/dist/cjs/constants.d.ts +3 -3
  25. package/dist/cjs/constants.d.ts.map +1 -1
  26. package/dist/cjs/constants.js +157 -166
  27. package/dist/cjs/constants.js.map +1 -1
  28. package/dist/cjs/credential-domain-restrictions.js +153 -163
  29. package/dist/cjs/credential-domain-restrictions.js.map +1 -1
  30. package/dist/cjs/cron.d.ts.map +1 -1
  31. package/dist/cjs/cron.js +25 -35
  32. package/dist/cjs/cron.js.map +1 -1
  33. package/dist/cjs/data-table.types.js +10 -20
  34. package/dist/cjs/data-table.types.js.map +1 -1
  35. package/dist/cjs/dynamic-credentials-helpers.js +93 -103
  36. package/dist/cjs/dynamic-credentials-helpers.js.map +1 -1
  37. package/dist/cjs/errors/abstract/execution-base.error.d.ts.map +1 -1
  38. package/dist/cjs/errors/abstract/execution-base.error.js +41 -51
  39. package/dist/cjs/errors/abstract/execution-base.error.js.map +1 -1
  40. package/dist/cjs/errors/abstract/node.error.d.ts.map +1 -1
  41. package/dist/cjs/errors/abstract/node.error.js +142 -152
  42. package/dist/cjs/errors/abstract/node.error.js.map +1 -1
  43. package/dist/cjs/errors/base/base.error.d.ts.map +1 -1
  44. package/dist/cjs/errors/base/base.error.js +35 -45
  45. package/dist/cjs/errors/base/base.error.js.map +1 -1
  46. package/dist/cjs/errors/base/operational.error.d.ts.map +1 -1
  47. package/dist/cjs/errors/base/operational.error.js +17 -27
  48. package/dist/cjs/errors/base/operational.error.js.map +1 -1
  49. package/dist/cjs/errors/base/unexpected.error.d.ts.map +1 -1
  50. package/dist/cjs/errors/base/unexpected.error.js +17 -27
  51. package/dist/cjs/errors/base/unexpected.error.js.map +1 -1
  52. package/dist/cjs/errors/base/user.error.d.ts.map +1 -1
  53. package/dist/cjs/errors/base/user.error.js +17 -27
  54. package/dist/cjs/errors/base/user.error.js.map +1 -1
  55. package/dist/cjs/errors/cli-subworkflow-operation.error.js +7 -17
  56. package/dist/cjs/errors/cli-subworkflow-operation.error.js.map +1 -1
  57. package/dist/cjs/errors/db-connection-timeout-error.d.ts.map +1 -1
  58. package/dist/cjs/errors/db-connection-timeout-error.js +11 -21
  59. package/dist/cjs/errors/db-connection-timeout-error.js.map +1 -1
  60. package/dist/cjs/errors/execution-cancelled.error.d.ts.map +1 -1
  61. package/dist/cjs/errors/execution-cancelled.error.js +33 -43
  62. package/dist/cjs/errors/execution-cancelled.error.js.map +1 -1
  63. package/dist/cjs/errors/expression-class-extension.error.d.ts.map +1 -1
  64. package/dist/cjs/errors/expression-class-extension.error.js +9 -19
  65. package/dist/cjs/errors/expression-class-extension.error.js.map +1 -1
  66. package/dist/cjs/errors/expression-computed-destructuring.error.d.ts.map +1 -1
  67. package/dist/cjs/errors/expression-computed-destructuring.error.js +9 -19
  68. package/dist/cjs/errors/expression-computed-destructuring.error.js.map +1 -1
  69. package/dist/cjs/errors/expression-destructuring.error.d.ts.map +1 -1
  70. package/dist/cjs/errors/expression-destructuring.error.js +9 -19
  71. package/dist/cjs/errors/expression-destructuring.error.js.map +1 -1
  72. package/dist/cjs/errors/expression-extension.error.js +7 -17
  73. package/dist/cjs/errors/expression-extension.error.js.map +1 -1
  74. package/dist/cjs/errors/expression-reserved-variable.error.d.ts.map +1 -1
  75. package/dist/cjs/errors/expression-reserved-variable.error.js +9 -19
  76. package/dist/cjs/errors/expression-reserved-variable.error.js.map +1 -1
  77. package/dist/cjs/errors/expression-with-statement.error.d.ts.map +1 -1
  78. package/dist/cjs/errors/expression-with-statement.error.js +9 -19
  79. package/dist/cjs/errors/expression-with-statement.error.js.map +1 -1
  80. package/dist/cjs/errors/expression.error.d.ts.map +1 -1
  81. package/dist/cjs/errors/expression.error.js +33 -43
  82. package/dist/cjs/errors/expression.error.js.map +1 -1
  83. package/dist/cjs/errors/index.js +62 -72
  84. package/dist/cjs/errors/index.js.map +1 -1
  85. package/dist/cjs/errors/node-api.error.d.ts.map +1 -1
  86. package/dist/cjs/errors/node-api.error.js +227 -237
  87. package/dist/cjs/errors/node-api.error.js.map +1 -1
  88. package/dist/cjs/errors/node-operation.error.d.ts.map +1 -1
  89. package/dist/cjs/errors/node-operation.error.js +43 -53
  90. package/dist/cjs/errors/node-operation.error.js.map +1 -1
  91. package/dist/cjs/errors/node-ssl.error.d.ts.map +1 -1
  92. package/dist/cjs/errors/node-ssl.error.js +9 -19
  93. package/dist/cjs/errors/node-ssl.error.js.map +1 -1
  94. package/dist/cjs/errors/subworkflow-operation.error.d.ts.map +1 -1
  95. package/dist/cjs/errors/subworkflow-operation.error.js +18 -28
  96. package/dist/cjs/errors/subworkflow-operation.error.js.map +1 -1
  97. package/dist/cjs/errors/trigger-close.error.d.ts.map +1 -1
  98. package/dist/cjs/errors/trigger-close.error.js +11 -21
  99. package/dist/cjs/errors/trigger-close.error.js.map +1 -1
  100. package/dist/cjs/errors/webhook-taken.error.d.ts.map +1 -1
  101. package/dist/cjs/errors/webhook-taken.error.js +9 -19
  102. package/dist/cjs/errors/webhook-taken.error.js.map +1 -1
  103. package/dist/cjs/errors/workflow-activation.error.d.ts.map +1 -1
  104. package/dist/cjs/errors/workflow-activation.error.js +54 -64
  105. package/dist/cjs/errors/workflow-activation.error.js.map +1 -1
  106. package/dist/cjs/errors/workflow-configuration.error.js +10 -20
  107. package/dist/cjs/errors/workflow-configuration.error.js.map +1 -1
  108. package/dist/cjs/errors/workflow-deactivation.error.js +7 -17
  109. package/dist/cjs/errors/workflow-deactivation.error.js.map +1 -1
  110. package/dist/cjs/errors/workflow-operation.error.d.ts.map +1 -1
  111. package/dist/cjs/errors/workflow-operation.error.js +20 -30
  112. package/dist/cjs/errors/workflow-operation.error.js.map +1 -1
  113. package/dist/cjs/evaluation-helpers.js +16 -26
  114. package/dist/cjs/evaluation-helpers.js.map +1 -1
  115. package/dist/cjs/execution-context-establishment-hooks.d.ts.map +1 -1
  116. package/dist/cjs/execution-context-establishment-hooks.js +43 -49
  117. package/dist/cjs/execution-context-establishment-hooks.js.map +1 -1
  118. package/dist/cjs/execution-context.d.ts +14 -14
  119. package/dist/cjs/execution-context.d.ts.map +1 -1
  120. package/dist/cjs/execution-context.js +203 -213
  121. package/dist/cjs/execution-context.js.map +1 -1
  122. package/dist/cjs/execution-status.d.ts +2 -2
  123. package/dist/cjs/execution-status.d.ts.map +1 -1
  124. package/dist/cjs/execution-status.js +27 -37
  125. package/dist/cjs/execution-status.js.map +1 -1
  126. package/dist/cjs/expression-evaluator-proxy.d.ts.map +1 -1
  127. package/dist/cjs/expression-evaluator-proxy.js +18 -28
  128. package/dist/cjs/expression-evaluator-proxy.js.map +1 -1
  129. package/dist/cjs/expression-sandboxing.d.ts.map +1 -1
  130. package/dist/cjs/expression-sandboxing.js +447 -457
  131. package/dist/cjs/expression-sandboxing.js.map +1 -1
  132. package/dist/cjs/expression.d.ts.map +1 -1
  133. package/dist/cjs/expression.js +535 -546
  134. package/dist/cjs/expression.js.map +1 -1
  135. package/dist/cjs/expressions/expression-helpers.d.ts.map +1 -1
  136. package/dist/cjs/expressions/expression-helpers.js +13 -23
  137. package/dist/cjs/expressions/expression-helpers.js.map +1 -1
  138. package/dist/cjs/extensions/array-extensions.js +591 -601
  139. package/dist/cjs/extensions/array-extensions.js.map +1 -1
  140. package/dist/cjs/extensions/boolean-extensions.d.ts +1 -1
  141. package/dist/cjs/extensions/boolean-extensions.js +38 -48
  142. package/dist/cjs/extensions/boolean-extensions.js.map +1 -1
  143. package/dist/cjs/extensions/date-extensions.js +507 -517
  144. package/dist/cjs/extensions/date-extensions.js.map +1 -1
  145. package/dist/cjs/extensions/expression-extension.d.ts.map +1 -1
  146. package/dist/cjs/extensions/expression-extension.js +455 -465
  147. package/dist/cjs/extensions/expression-extension.js.map +1 -1
  148. package/dist/cjs/extensions/expression-parser.d.ts.map +1 -1
  149. package/dist/cjs/extensions/expression-parser.js +82 -92
  150. package/dist/cjs/extensions/expression-parser.js.map +1 -1
  151. package/dist/cjs/extensions/extended-functions.d.ts +10 -18
  152. package/dist/cjs/extensions/extended-functions.d.ts.map +1 -1
  153. package/dist/cjs/extensions/extended-functions.js +80 -90
  154. package/dist/cjs/extensions/extended-functions.js.map +1 -1
  155. package/dist/cjs/extensions/extensions.js +2 -12
  156. package/dist/cjs/extensions/index.js +10 -20
  157. package/dist/cjs/extensions/index.js.map +1 -1
  158. package/dist/cjs/extensions/number-extensions.js +226 -236
  159. package/dist/cjs/extensions/number-extensions.js.map +1 -1
  160. package/dist/cjs/extensions/object-extensions.js +274 -284
  161. package/dist/cjs/extensions/object-extensions.js.map +1 -1
  162. package/dist/cjs/extensions/string-extensions.d.ts +1 -1
  163. package/dist/cjs/extensions/string-extensions.d.ts.map +1 -1
  164. package/dist/cjs/extensions/string-extensions.js +769 -779
  165. package/dist/cjs/extensions/string-extensions.js.map +1 -1
  166. package/dist/cjs/extensions/utils.d.ts.map +1 -1
  167. package/dist/cjs/extensions/utils.js +35 -45
  168. package/dist/cjs/extensions/utils.js.map +1 -1
  169. package/dist/cjs/from-ai-parse-utils.js +393 -403
  170. package/dist/cjs/from-ai-parse-utils.js.map +1 -1
  171. package/dist/cjs/global-state.js +12 -22
  172. package/dist/cjs/global-state.js.map +1 -1
  173. package/dist/cjs/graph/graph-utils.js +166 -176
  174. package/dist/cjs/graph/graph-utils.js.map +1 -1
  175. package/dist/cjs/highlighted-data.js +13 -23
  176. package/dist/cjs/highlighted-data.js.map +1 -1
  177. package/dist/cjs/index.js +105 -115
  178. package/dist/cjs/index.js.map +1 -1
  179. package/dist/cjs/interfaces.d.ts +112 -22
  180. package/dist/cjs/interfaces.d.ts.map +1 -1
  181. package/dist/cjs/interfaces.js +62 -72
  182. package/dist/cjs/interfaces.js.map +1 -1
  183. package/dist/cjs/jmespath-query.js +26 -36
  184. package/dist/cjs/jmespath-query.js.map +1 -1
  185. package/dist/cjs/logger-proxy.d.ts.map +1 -1
  186. package/dist/cjs/logger-proxy.js +15 -25
  187. package/dist/cjs/logger-proxy.js.map +1 -1
  188. package/dist/cjs/mcp-helpers.js +10 -20
  189. package/dist/cjs/mcp-helpers.js.map +1 -1
  190. package/dist/cjs/message-event-bus.d.ts +184 -165
  191. package/dist/cjs/message-event-bus.d.ts.map +1 -1
  192. package/dist/cjs/message-event-bus.js +207 -217
  193. package/dist/cjs/message-event-bus.js.map +1 -1
  194. package/dist/cjs/metadata-utils.js +35 -45
  195. package/dist/cjs/metadata-utils.js.map +1 -1
  196. package/dist/cjs/native-methods/array.methods.js +527 -537
  197. package/dist/cjs/native-methods/array.methods.js.map +1 -1
  198. package/dist/cjs/native-methods/boolean.methods.js +18 -28
  199. package/dist/cjs/native-methods/boolean.methods.js.map +1 -1
  200. package/dist/cjs/native-methods/index.js +16 -26
  201. package/dist/cjs/native-methods/index.js.map +1 -1
  202. package/dist/cjs/native-methods/number.methods.js +79 -89
  203. package/dist/cjs/native-methods/number.methods.js.map +1 -1
  204. package/dist/cjs/native-methods/object.methods.js +7 -17
  205. package/dist/cjs/native-methods/object.methods.js.map +1 -1
  206. package/dist/cjs/native-methods/string.methods.js +474 -484
  207. package/dist/cjs/native-methods/string.methods.js.map +1 -1
  208. package/dist/cjs/node-grouping-validation.d.ts +6 -0
  209. package/dist/cjs/node-grouping-validation.d.ts.map +1 -1
  210. package/dist/cjs/node-grouping-validation.js +165 -144
  211. package/dist/cjs/node-grouping-validation.js.map +1 -1
  212. package/dist/cjs/node-helpers.d.ts.map +1 -1
  213. package/dist/cjs/node-helpers.js +1486 -1493
  214. package/dist/cjs/node-helpers.js.map +1 -1
  215. package/dist/cjs/node-parameters/filter-parameter.d.ts.map +1 -1
  216. package/dist/cjs/node-parameters/filter-parameter.js +315 -325
  217. package/dist/cjs/node-parameters/filter-parameter.js.map +1 -1
  218. package/dist/cjs/node-parameters/node-parameter-value-type-guard.js +105 -115
  219. package/dist/cjs/node-parameters/node-parameter-value-type-guard.js.map +1 -1
  220. package/dist/cjs/node-parameters/parameter-type-validation.js +120 -130
  221. package/dist/cjs/node-parameters/parameter-type-validation.js.map +1 -1
  222. package/dist/cjs/node-parameters/path-utils.js +21 -31
  223. package/dist/cjs/node-parameters/path-utils.js.map +1 -1
  224. package/dist/cjs/node-parameters/rename-node-utils.js +22 -32
  225. package/dist/cjs/node-parameters/rename-node-utils.js.map +1 -1
  226. package/dist/cjs/node-reference-parser-utils.js +472 -482
  227. package/dist/cjs/node-reference-parser-utils.js.map +1 -1
  228. package/dist/cjs/node-validation.js +59 -69
  229. package/dist/cjs/node-validation.js.map +1 -1
  230. package/dist/cjs/observable-object.js +56 -66
  231. package/dist/cjs/observable-object.js.map +1 -1
  232. package/dist/cjs/redaction-channels.js +36 -46
  233. package/dist/cjs/redaction-channels.js.map +1 -1
  234. package/dist/cjs/run-execution-data/run-execution-data.js +15 -25
  235. package/dist/cjs/run-execution-data/run-execution-data.js.map +1 -1
  236. package/dist/cjs/run-execution-data/run-execution-data.v0.js +2 -12
  237. package/dist/cjs/run-execution-data/run-execution-data.v1.js +26 -36
  238. package/dist/cjs/run-execution-data/run-execution-data.v1.js.map +1 -1
  239. package/dist/cjs/run-execution-data-factory.js +113 -123
  240. package/dist/cjs/run-execution-data-factory.js.map +1 -1
  241. package/dist/cjs/schemas.d.ts +13 -13
  242. package/dist/cjs/schemas.d.ts.map +1 -1
  243. package/dist/cjs/schemas.js +351 -360
  244. package/dist/cjs/schemas.js.map +1 -1
  245. package/dist/cjs/sub-workflow-output.js +10 -20
  246. package/dist/cjs/sub-workflow-output.js.map +1 -1
  247. package/dist/cjs/telemetry-helpers.d.ts.map +1 -1
  248. package/dist/cjs/telemetry-helpers.js +716 -726
  249. package/dist/cjs/telemetry-helpers.js.map +1 -1
  250. package/dist/cjs/tool-helpers.js +18 -28
  251. package/dist/cjs/tool-helpers.js.map +1 -1
  252. package/dist/cjs/trigger-identity.js +41 -51
  253. package/dist/cjs/trigger-identity.js.map +1 -1
  254. package/dist/cjs/trimmed-task-data.js +21 -31
  255. package/dist/cjs/trimmed-task-data.js.map +1 -1
  256. package/dist/cjs/type-guards.d.ts +3 -3
  257. package/dist/cjs/type-guards.d.ts.map +1 -1
  258. package/dist/cjs/type-guards.js +74 -84
  259. package/dist/cjs/type-guards.js.map +1 -1
  260. package/dist/cjs/type-validation.d.ts.map +1 -1
  261. package/dist/cjs/type-validation.js +383 -393
  262. package/dist/cjs/type-validation.js.map +1 -1
  263. package/dist/cjs/utils.d.ts +2 -2
  264. package/dist/cjs/utils.d.ts.map +1 -1
  265. package/dist/cjs/utils.js +430 -440
  266. package/dist/cjs/utils.js.map +1 -1
  267. package/dist/cjs/versioned-node-type.d.ts.map +1 -1
  268. package/dist/cjs/versioned-node-type.js +20 -30
  269. package/dist/cjs/versioned-node-type.js.map +1 -1
  270. package/dist/cjs/workflow-checksum.js +67 -77
  271. package/dist/cjs/workflow-checksum.js.map +1 -1
  272. package/dist/cjs/workflow-data-proxy-env-provider.js +58 -68
  273. package/dist/cjs/workflow-data-proxy-env-provider.js.map +1 -1
  274. package/dist/cjs/workflow-data-proxy-helpers.js +8 -18
  275. package/dist/cjs/workflow-data-proxy-helpers.js.map +1 -1
  276. package/dist/cjs/workflow-data-proxy.d.ts.map +1 -1
  277. package/dist/cjs/workflow-data-proxy.js +1162 -1172
  278. package/dist/cjs/workflow-data-proxy.js.map +1 -1
  279. package/dist/cjs/workflow-diff.d.ts +2 -1
  280. package/dist/cjs/workflow-diff.d.ts.map +1 -1
  281. package/dist/cjs/workflow-diff.js +292 -300
  282. package/dist/cjs/workflow-diff.js.map +1 -1
  283. package/dist/cjs/workflow-environments-helper.js +23 -33
  284. package/dist/cjs/workflow-environments-helper.js.map +1 -1
  285. package/dist/cjs/workflow-expression.d.ts.map +1 -1
  286. package/dist/cjs/workflow-expression.js +97 -107
  287. package/dist/cjs/workflow-expression.js.map +1 -1
  288. package/dist/cjs/workflow-structure-validation.d.ts.map +1 -1
  289. package/dist/cjs/workflow-structure-validation.js +140 -150
  290. package/dist/cjs/workflow-structure-validation.js.map +1 -1
  291. package/dist/cjs/workflow-validation.js +40 -50
  292. package/dist/cjs/workflow-validation.js.map +1 -1
  293. package/dist/cjs/workflow.d.ts.map +1 -1
  294. package/dist/cjs/workflow.js +612 -622
  295. package/dist/cjs/workflow.js.map +1 -1
  296. package/dist/esm/common/get-child-nodes.js.map +1 -1
  297. package/dist/esm/common/get-connected-nodes.js.map +1 -1
  298. package/dist/esm/common/get-parent-nodes.js.map +1 -1
  299. package/dist/esm/common/resolve-variables.d.ts +8 -0
  300. package/dist/esm/common/resolve-variables.d.ts.map +1 -1
  301. package/dist/esm/common/resolve-variables.js +22 -0
  302. package/dist/esm/common/resolve-variables.js.map +1 -1
  303. package/dist/esm/constants.d.ts +3 -3
  304. package/dist/esm/constants.d.ts.map +1 -1
  305. package/dist/esm/cron.d.ts.map +1 -1
  306. package/dist/esm/errors/abstract/execution-base.error.d.ts.map +1 -1
  307. package/dist/esm/errors/abstract/execution-base.error.js.map +1 -1
  308. package/dist/esm/errors/abstract/node.error.d.ts.map +1 -1
  309. package/dist/esm/errors/abstract/node.error.js.map +1 -1
  310. package/dist/esm/errors/base/base.error.d.ts.map +1 -1
  311. package/dist/esm/errors/base/base.error.js.map +1 -1
  312. package/dist/esm/errors/base/operational.error.d.ts.map +1 -1
  313. package/dist/esm/errors/base/operational.error.js.map +1 -1
  314. package/dist/esm/errors/base/unexpected.error.d.ts.map +1 -1
  315. package/dist/esm/errors/base/unexpected.error.js.map +1 -1
  316. package/dist/esm/errors/base/user.error.d.ts.map +1 -1
  317. package/dist/esm/errors/base/user.error.js.map +1 -1
  318. package/dist/esm/errors/db-connection-timeout-error.d.ts.map +1 -1
  319. package/dist/esm/errors/execution-cancelled.error.d.ts.map +1 -1
  320. package/dist/esm/errors/expression-class-extension.error.d.ts.map +1 -1
  321. package/dist/esm/errors/expression-computed-destructuring.error.d.ts.map +1 -1
  322. package/dist/esm/errors/expression-destructuring.error.d.ts.map +1 -1
  323. package/dist/esm/errors/expression-reserved-variable.error.d.ts.map +1 -1
  324. package/dist/esm/errors/expression-with-statement.error.d.ts.map +1 -1
  325. package/dist/esm/errors/expression.error.d.ts.map +1 -1
  326. package/dist/esm/errors/node-api.error.d.ts.map +1 -1
  327. package/dist/esm/errors/node-api.error.js.map +1 -1
  328. package/dist/esm/errors/node-operation.error.d.ts.map +1 -1
  329. package/dist/esm/errors/node-operation.error.js.map +1 -1
  330. package/dist/esm/errors/node-ssl.error.d.ts.map +1 -1
  331. package/dist/esm/errors/subworkflow-operation.error.d.ts.map +1 -1
  332. package/dist/esm/errors/trigger-close.error.d.ts.map +1 -1
  333. package/dist/esm/errors/trigger-close.error.js.map +1 -1
  334. package/dist/esm/errors/webhook-taken.error.d.ts.map +1 -1
  335. package/dist/esm/errors/workflow-activation.error.d.ts.map +1 -1
  336. package/dist/esm/errors/workflow-activation.error.js.map +1 -1
  337. package/dist/esm/errors/workflow-operation.error.d.ts.map +1 -1
  338. package/dist/esm/execution-context-establishment-hooks.d.ts.map +1 -1
  339. package/dist/esm/execution-context-establishment-hooks.js +7 -3
  340. package/dist/esm/execution-context-establishment-hooks.js.map +1 -1
  341. package/dist/esm/execution-context.d.ts +14 -14
  342. package/dist/esm/execution-context.d.ts.map +1 -1
  343. package/dist/esm/execution-status.d.ts +2 -2
  344. package/dist/esm/execution-status.d.ts.map +1 -1
  345. package/dist/esm/expression-evaluator-proxy.d.ts.map +1 -1
  346. package/dist/esm/expression-sandboxing.d.ts.map +1 -1
  347. package/dist/esm/expression-sandboxing.js.map +1 -1
  348. package/dist/esm/expression.d.ts.map +1 -1
  349. package/dist/esm/expression.js.map +1 -1
  350. package/dist/esm/expressions/expression-helpers.d.ts.map +1 -1
  351. package/dist/esm/extensions/boolean-extensions.d.ts +1 -1
  352. package/dist/esm/extensions/expression-extension.d.ts.map +1 -1
  353. package/dist/esm/extensions/expression-parser.d.ts.map +1 -1
  354. package/dist/esm/extensions/extended-functions.d.ts +10 -18
  355. package/dist/esm/extensions/extended-functions.d.ts.map +1 -1
  356. package/dist/esm/extensions/number-extensions.js.map +1 -1
  357. package/dist/esm/extensions/string-extensions.d.ts +1 -1
  358. package/dist/esm/extensions/string-extensions.d.ts.map +1 -1
  359. package/dist/esm/extensions/string-extensions.js.map +1 -1
  360. package/dist/esm/extensions/utils.d.ts.map +1 -1
  361. package/dist/esm/from-ai-parse-utils.js.map +1 -1
  362. package/dist/esm/interfaces.d.ts +112 -22
  363. package/dist/esm/interfaces.d.ts.map +1 -1
  364. package/dist/esm/interfaces.js.map +1 -1
  365. package/dist/esm/logger-proxy.d.ts.map +1 -1
  366. package/dist/esm/message-event-bus.d.ts +184 -165
  367. package/dist/esm/message-event-bus.d.ts.map +1 -1
  368. package/dist/esm/message-event-bus.js +2 -2
  369. package/dist/esm/message-event-bus.js.map +1 -1
  370. package/dist/esm/node-grouping-validation.d.ts +6 -0
  371. package/dist/esm/node-grouping-validation.d.ts.map +1 -1
  372. package/dist/esm/node-grouping-validation.js +34 -5
  373. package/dist/esm/node-grouping-validation.js.map +1 -1
  374. package/dist/esm/node-helpers.d.ts.map +1 -1
  375. package/dist/esm/node-helpers.js +3 -0
  376. package/dist/esm/node-helpers.js.map +1 -1
  377. package/dist/esm/node-parameters/filter-parameter.d.ts.map +1 -1
  378. package/dist/esm/node-parameters/filter-parameter.js.map +1 -1
  379. package/dist/esm/node-reference-parser-utils.js.map +1 -1
  380. package/dist/esm/run-execution-data-factory.js.map +1 -1
  381. package/dist/esm/schemas.d.ts +13 -13
  382. package/dist/esm/schemas.d.ts.map +1 -1
  383. package/dist/esm/schemas.js +1 -0
  384. package/dist/esm/schemas.js.map +1 -1
  385. package/dist/esm/telemetry-helpers.d.ts.map +1 -1
  386. package/dist/esm/telemetry-helpers.js.map +1 -1
  387. package/dist/esm/type-guards.d.ts +3 -3
  388. package/dist/esm/type-guards.d.ts.map +1 -1
  389. package/dist/esm/type-validation.d.ts.map +1 -1
  390. package/dist/esm/type-validation.js.map +1 -1
  391. package/dist/esm/typecheck.tsbuildinfo +1 -1
  392. package/dist/esm/utils.d.ts +2 -2
  393. package/dist/esm/utils.d.ts.map +1 -1
  394. package/dist/esm/utils.js.map +1 -1
  395. package/dist/esm/versioned-node-type.d.ts.map +1 -1
  396. package/dist/esm/workflow-data-proxy.d.ts.map +1 -1
  397. package/dist/esm/workflow-data-proxy.js.map +1 -1
  398. package/dist/esm/workflow-diff.d.ts +2 -1
  399. package/dist/esm/workflow-diff.d.ts.map +1 -1
  400. package/dist/esm/workflow-diff.js +3 -1
  401. package/dist/esm/workflow-diff.js.map +1 -1
  402. package/dist/esm/workflow-expression.d.ts.map +1 -1
  403. package/dist/esm/workflow-expression.js.map +1 -1
  404. package/dist/esm/workflow-structure-validation.d.ts.map +1 -1
  405. package/dist/esm/workflow-structure-validation.js.map +1 -1
  406. package/dist/esm/workflow.d.ts.map +1 -1
  407. package/dist/esm/workflow.js.map +1 -1
  408. package/package.json +9 -8
package/dist/cjs/utils.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
3
  if (k2 === undefined) k2 = k;
3
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -34,475 +35,464 @@ var __importStar = (this && this.__importStar) || (function () {
34
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
35
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
37
  };
37
- (function (factory) {
38
- if (typeof module === "object" && typeof module.exports === "object") {
39
- var v = factory(require, exports);
40
- if (v !== undefined) module.exports = v;
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.removeCircularRefs = exports.isTraversableObject = exports.sleepWithAbort = exports.sleep = exports.jsonStringify = exports.replaceCircularReferences = exports.base64DecodeUTF8 = exports.jsonParse = exports.deepCopy = exports.isObjectEmpty = void 0;
40
+ exports.isObject = isObject;
41
+ exports.fileTypeFromMimeType = fileTypeFromMimeType;
42
+ exports.assert = assert;
43
+ exports.updateDisplayOptions = updateDisplayOptions;
44
+ exports.randomInt = randomInt;
45
+ exports.randomString = randomString;
46
+ exports.hasKey = hasKey;
47
+ exports.isSafeObjectProperty = isSafeObjectProperty;
48
+ exports.containsUnsafeObjectPropertyToken = containsUnsafeObjectPropertyToken;
49
+ exports.setSafeObjectProperty = setSafeObjectProperty;
50
+ exports.sanitizeXmlName = sanitizeXmlName;
51
+ exports.isCommunityPackageName = isCommunityPackageName;
52
+ exports.dedupe = dedupe;
53
+ exports.sanitizeFilename = sanitizeFilename;
54
+ exports.generateSecureToken = generateSecureToken;
55
+ const esprima_next_1 = require("esprima-next");
56
+ const form_data_1 = __importDefault(require("form-data"));
57
+ const jsonrepair_1 = require("jsonrepair");
58
+ const merge_1 = __importDefault(require("lodash/merge"));
59
+ const path_1 = __importDefault(require("path"));
60
+ const constants_1 = require("./constants");
61
+ const user_error_1 = require("./errors/base/user.error");
62
+ const execution_cancelled_error_1 = require("./errors/execution-cancelled.error");
63
+ const LoggerProxy = __importStar(require("./logger-proxy"));
64
+ const readStreamClasses = new Set(['ReadStream', 'Readable', 'ReadableStream']);
65
+ // NOTE: BigInt.prototype.toJSON is not available, which causes JSON.stringify to throw an error
66
+ // as well as the flatted stringify method. This is a workaround for that.
67
+ BigInt.prototype.toJSON = function () {
68
+ return this.toString();
69
+ };
70
+ /**
71
+ * Type guard for plain objects suitable for key-based traversal/serialization.
72
+ *
73
+ * Returns `true` for objects whose prototype is `Object.prototype` (object literals)
74
+ * or `null` (`Object.create(null)`), and `false` for arrays and non-plain objects
75
+ * such as `Date`, `Map`, `Set`, and class instances.
76
+ */
77
+ function isObject(value) {
78
+ if (value === null || typeof value !== 'object')
79
+ return false;
80
+ if (Array.isArray(value))
81
+ return false;
82
+ if (Object.prototype.toString.call(value) !== '[object Object]')
83
+ return false;
84
+ return Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null;
85
+ }
86
+ const isObjectEmpty = (obj) => {
87
+ if (obj === undefined || obj === null)
88
+ return true;
89
+ if (typeof obj === 'object') {
90
+ if (obj instanceof form_data_1.default)
91
+ return obj.getLengthSync() === 0;
92
+ if (Array.isArray(obj))
93
+ return obj.length === 0;
94
+ if (obj instanceof Set || obj instanceof Map)
95
+ return obj.size === 0;
96
+ if (ArrayBuffer.isView(obj) || obj instanceof ArrayBuffer)
97
+ return obj.byteLength === 0;
98
+ if (Symbol.iterator in obj || readStreamClasses.has(obj.constructor.name))
99
+ return false;
100
+ return Object.keys(obj).length === 0;
41
101
  }
42
- else if (typeof define === "function" && define.amd) {
43
- define(["require", "exports", "esprima-next", "form-data", "jsonrepair", "lodash/merge", "path", "./constants", "./errors/base/user.error", "./errors/execution-cancelled.error", "./logger-proxy"], factory);
102
+ return true;
103
+ };
104
+ exports.isObjectEmpty = isObjectEmpty;
105
+ // Property keys that must never be copied onto a clone: assigning `__proto__`
106
+ // reassigns the clone's prototype, and `constructor`/`prototype` can shadow
107
+ // built-ins. Source data parsed from JSON can carry these as own properties.
108
+ const reservedCopyKeys = new Set(['__proto__', 'constructor', 'prototype']);
109
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument */
110
+ const deepCopy = (source, hash = new WeakMap(), path = '') => {
111
+ const hasOwnProp = Object.prototype.hasOwnProperty.bind(source);
112
+ // Primitives & Null & Function
113
+ if (typeof source !== 'object' || source === null || typeof source === 'function') {
114
+ return source;
44
115
  }
45
- })(function (require, exports) {
46
- "use strict";
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.removeCircularRefs = exports.isTraversableObject = exports.sleepWithAbort = exports.sleep = exports.jsonStringify = exports.replaceCircularReferences = exports.base64DecodeUTF8 = exports.jsonParse = exports.deepCopy = exports.isObjectEmpty = void 0;
49
- exports.isObject = isObject;
50
- exports.fileTypeFromMimeType = fileTypeFromMimeType;
51
- exports.assert = assert;
52
- exports.updateDisplayOptions = updateDisplayOptions;
53
- exports.randomInt = randomInt;
54
- exports.randomString = randomString;
55
- exports.hasKey = hasKey;
56
- exports.isSafeObjectProperty = isSafeObjectProperty;
57
- exports.containsUnsafeObjectPropertyToken = containsUnsafeObjectPropertyToken;
58
- exports.setSafeObjectProperty = setSafeObjectProperty;
59
- exports.sanitizeXmlName = sanitizeXmlName;
60
- exports.isCommunityPackageName = isCommunityPackageName;
61
- exports.dedupe = dedupe;
62
- exports.sanitizeFilename = sanitizeFilename;
63
- exports.generateSecureToken = generateSecureToken;
64
- const esprima_next_1 = require("esprima-next");
65
- const form_data_1 = __importDefault(require("form-data"));
66
- const jsonrepair_1 = require("jsonrepair");
67
- const merge_1 = __importDefault(require("lodash/merge"));
68
- const path_1 = __importDefault(require("path"));
69
- const constants_1 = require("./constants");
70
- const user_error_1 = require("./errors/base/user.error");
71
- const execution_cancelled_error_1 = require("./errors/execution-cancelled.error");
72
- const LoggerProxy = __importStar(require("./logger-proxy"));
73
- const readStreamClasses = new Set(['ReadStream', 'Readable', 'ReadableStream']);
74
- // NOTE: BigInt.prototype.toJSON is not available, which causes JSON.stringify to throw an error
75
- // as well as the flatted stringify method. This is a workaround for that.
76
- BigInt.prototype.toJSON = function () {
77
- return this.toString();
78
- };
79
- /**
80
- * Type guard for plain objects suitable for key-based traversal/serialization.
81
- *
82
- * Returns `true` for objects whose prototype is `Object.prototype` (object literals)
83
- * or `null` (`Object.create(null)`), and `false` for arrays and non-plain objects
84
- * such as `Date`, `Map`, `Set`, and class instances.
85
- */
86
- function isObject(value) {
87
- if (value === null || typeof value !== 'object')
88
- return false;
89
- if (Array.isArray(value))
90
- return false;
91
- if (Object.prototype.toString.call(value) !== '[object Object]')
92
- return false;
93
- return Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null;
116
+ // Date and other objects with toJSON method
117
+ // TODO: remove this when other code parts not expecting objects with `.toJSON` method called and add back checking for Date and cloning it properly
118
+ if (typeof source.toJSON === 'function') {
119
+ return source.toJSON();
94
120
  }
95
- const isObjectEmpty = (obj) => {
96
- if (obj === undefined || obj === null)
97
- return true;
98
- if (typeof obj === 'object') {
99
- if (obj instanceof form_data_1.default)
100
- return obj.getLengthSync() === 0;
101
- if (Array.isArray(obj))
102
- return obj.length === 0;
103
- if (obj instanceof Set || obj instanceof Map)
104
- return obj.size === 0;
105
- if (ArrayBuffer.isView(obj) || obj instanceof ArrayBuffer)
106
- return obj.byteLength === 0;
107
- if (Symbol.iterator in obj || readStreamClasses.has(obj.constructor.name))
108
- return false;
109
- return Object.keys(obj).length === 0;
110
- }
111
- return true;
112
- };
113
- exports.isObjectEmpty = isObjectEmpty;
114
- // Property keys that must never be copied onto a clone: assigning `__proto__`
115
- // reassigns the clone's prototype, and `constructor`/`prototype` can shadow
116
- // built-ins. Source data parsed from JSON can carry these as own properties.
117
- const reservedCopyKeys = new Set(['__proto__', 'constructor', 'prototype']);
118
- /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument */
119
- const deepCopy = (source, hash = new WeakMap(), path = '') => {
120
- const hasOwnProp = Object.prototype.hasOwnProperty.bind(source);
121
- // Primitives & Null & Function
122
- if (typeof source !== 'object' || source === null || typeof source === 'function') {
123
- return source;
121
+ if (hash.has(source)) {
122
+ return hash.get(source);
123
+ }
124
+ // Array
125
+ if (Array.isArray(source)) {
126
+ const clone = [];
127
+ const len = source.length;
128
+ for (let i = 0; i < len; i++) {
129
+ clone[i] = (0, exports.deepCopy)(source[i], hash, path + `[${i}]`);
124
130
  }
125
- // Date and other objects with toJSON method
126
- // TODO: remove this when other code parts not expecting objects with `.toJSON` method called and add back checking for Date and cloning it properly
127
- if (typeof source.toJSON === 'function') {
128
- return source.toJSON();
131
+ return clone;
132
+ }
133
+ // Object
134
+ const clone = Object.create(Object.getPrototypeOf({}));
135
+ hash.set(source, clone);
136
+ for (const i in source) {
137
+ if (hasOwnProp(i) && !reservedCopyKeys.has(i)) {
138
+ clone[i] = (0, exports.deepCopy)(source[i], hash, path + `.${i}`);
129
139
  }
130
- if (hash.has(source)) {
131
- return hash.get(source);
140
+ }
141
+ return clone;
142
+ };
143
+ exports.deepCopy = deepCopy;
144
+ // eslint-enable
145
+ function syntaxNodeToValue(expression) {
146
+ switch (expression?.type) {
147
+ case esprima_next_1.Syntax.ObjectExpression:
148
+ return Object.fromEntries(expression.properties
149
+ .filter((prop) => prop.type === esprima_next_1.Syntax.Property)
150
+ .map(({ key, value }) => [syntaxNodeToValue(key), syntaxNodeToValue(value)]));
151
+ case esprima_next_1.Syntax.Identifier:
152
+ return expression.name;
153
+ case esprima_next_1.Syntax.Literal:
154
+ return expression.value;
155
+ case esprima_next_1.Syntax.ArrayExpression:
156
+ return expression.elements.map((exp) => syntaxNodeToValue(exp));
157
+ case esprima_next_1.Syntax.UnaryExpression: {
158
+ const value = syntaxNodeToValue(expression.argument);
159
+ if (typeof value === 'number' && expression.operator === '-') {
160
+ return -value;
161
+ }
162
+ return value;
132
163
  }
133
- // Array
134
- if (Array.isArray(source)) {
135
- const clone = [];
136
- const len = source.length;
137
- for (let i = 0; i < len; i++) {
138
- clone[i] = (0, exports.deepCopy)(source[i], hash, path + `[${i}]`);
164
+ default:
165
+ return undefined;
166
+ }
167
+ }
168
+ /**
169
+ * Parse any JavaScript ObjectExpression, including:
170
+ * - single quoted keys
171
+ * - unquoted keys
172
+ */
173
+ function parseJSObject(objectAsString) {
174
+ const jsExpression = (0, esprima_next_1.parse)(`(${objectAsString})`).body.find((node) => node.type === esprima_next_1.Syntax.ExpressionStatement && node.expression.type === esprima_next_1.Syntax.ObjectExpression);
175
+ return syntaxNodeToValue(jsExpression?.expression);
176
+ }
177
+ /**
178
+ * Parses a JSON string into an object with optional error handling and recovery mechanisms.
179
+ *
180
+ * @param {string} jsonString - The JSON string to parse.
181
+ * @param {Object} [options] - Optional settings for parsing the JSON string. Either `fallbackValue` or `errorMessage` can be set, but not both.
182
+ * @param {boolean} [options.acceptJSObject=false] - If true, attempts to recover from common JSON format errors by parsing the JSON string as a JavaScript Object.
183
+ * @param {boolean} [options.repairJSON=false] - If true, attempts to repair common JSON format errors by repairing the JSON string.
184
+ * @param {string} [options.errorMessage] - A custom error message to throw if the JSON string cannot be parsed.
185
+ * @param {*} [options.fallbackValue] - A fallback value to return if the JSON string cannot be parsed.
186
+ * @returns {Object} - The parsed object, or the fallback value if parsing fails and `fallbackValue` is set.
187
+ */
188
+ const jsonParse = (jsonString, options) => {
189
+ try {
190
+ return JSON.parse(jsonString);
191
+ }
192
+ catch (error) {
193
+ if (options?.acceptJSObject) {
194
+ try {
195
+ const jsonStringCleaned = parseJSObject(jsonString);
196
+ return jsonStringCleaned;
197
+ }
198
+ catch (e) {
199
+ // Ignore this error and return the original error or the fallback value
139
200
  }
140
- return clone;
141
201
  }
142
- // Object
143
- const clone = Object.create(Object.getPrototypeOf({}));
144
- hash.set(source, clone);
145
- for (const i in source) {
146
- if (hasOwnProp(i) && !reservedCopyKeys.has(i)) {
147
- clone[i] = (0, exports.deepCopy)(source[i], hash, path + `.${i}`);
202
+ if (options?.repairJSON) {
203
+ try {
204
+ const jsonStringCleaned = (0, jsonrepair_1.jsonrepair)(jsonString);
205
+ return JSON.parse(jsonStringCleaned);
206
+ }
207
+ catch (e) {
208
+ // Ignore this error and return the original error or the fallback value
148
209
  }
149
210
  }
150
- return clone;
151
- };
152
- exports.deepCopy = deepCopy;
153
- // eslint-enable
154
- function syntaxNodeToValue(expression) {
155
- switch (expression?.type) {
156
- case esprima_next_1.Syntax.ObjectExpression:
157
- return Object.fromEntries(expression.properties
158
- .filter((prop) => prop.type === esprima_next_1.Syntax.Property)
159
- .map(({ key, value }) => [syntaxNodeToValue(key), syntaxNodeToValue(value)]));
160
- case esprima_next_1.Syntax.Identifier:
161
- return expression.name;
162
- case esprima_next_1.Syntax.Literal:
163
- return expression.value;
164
- case esprima_next_1.Syntax.ArrayExpression:
165
- return expression.elements.map((exp) => syntaxNodeToValue(exp));
166
- case esprima_next_1.Syntax.UnaryExpression: {
167
- const value = syntaxNodeToValue(expression.argument);
168
- if (typeof value === 'number' && expression.operator === '-') {
169
- return -value;
170
- }
171
- return value;
211
+ if (options?.fallbackValue !== undefined) {
212
+ if (options.fallbackValue instanceof Function) {
213
+ return options.fallbackValue();
172
214
  }
173
- default:
174
- return undefined;
215
+ return options.fallbackValue;
216
+ }
217
+ else if (options?.errorMessage) {
218
+ throw new user_error_1.UserError(options.errorMessage);
175
219
  }
220
+ throw error;
176
221
  }
177
- /**
178
- * Parse any JavaScript ObjectExpression, including:
179
- * - single quoted keys
180
- * - unquoted keys
181
- */
182
- function parseJSObject(objectAsString) {
183
- const jsExpression = (0, esprima_next_1.parse)(`(${objectAsString})`).body.find((node) => node.type === esprima_next_1.Syntax.ExpressionStatement && node.expression.type === esprima_next_1.Syntax.ObjectExpression);
184
- return syntaxNodeToValue(jsExpression?.expression);
222
+ };
223
+ exports.jsonParse = jsonParse;
224
+ /**
225
+ * Decodes a Base64 string with proper UTF-8 character handling.
226
+ *
227
+ * @param str - The Base64 string to decode
228
+ * @returns The decoded UTF-8 string
229
+ */
230
+ const base64DecodeUTF8 = (str) => {
231
+ try {
232
+ // Use modern TextDecoder for proper UTF-8 handling
233
+ const bytes = new Uint8Array(atob(str)
234
+ .split('')
235
+ .map((char) => char.charCodeAt(0)));
236
+ return new TextDecoder('utf-8').decode(bytes);
237
+ }
238
+ catch (error) {
239
+ // Fallback method for older browsers
240
+ console.warn('TextDecoder not available, using fallback method');
241
+ return atob(str);
185
242
  }
186
- /**
187
- * Parses a JSON string into an object with optional error handling and recovery mechanisms.
188
- *
189
- * @param {string} jsonString - The JSON string to parse.
190
- * @param {Object} [options] - Optional settings for parsing the JSON string. Either `fallbackValue` or `errorMessage` can be set, but not both.
191
- * @param {boolean} [options.acceptJSObject=false] - If true, attempts to recover from common JSON format errors by parsing the JSON string as a JavaScript Object.
192
- * @param {boolean} [options.repairJSON=false] - If true, attempts to repair common JSON format errors by repairing the JSON string.
193
- * @param {string} [options.errorMessage] - A custom error message to throw if the JSON string cannot be parsed.
194
- * @param {*} [options.fallbackValue] - A fallback value to return if the JSON string cannot be parsed.
195
- * @returns {Object} - The parsed object, or the fallback value if parsing fails and `fallbackValue` is set.
196
- */
197
- const jsonParse = (jsonString, options) => {
243
+ };
244
+ exports.base64DecodeUTF8 = base64DecodeUTF8;
245
+ const replaceCircularReferences = (value, knownObjects = new WeakSet()) => {
246
+ if (typeof value !== 'object' || value === null || value instanceof RegExp)
247
+ return value;
248
+ if ('toJSON' in value && typeof value.toJSON === 'function')
249
+ return value.toJSON();
250
+ if (knownObjects.has(value))
251
+ return '[Circular Reference]';
252
+ knownObjects.add(value);
253
+ const copy = (Array.isArray(value) ? [] : {});
254
+ for (const key in value) {
255
+ if (reservedCopyKeys.has(key))
256
+ continue;
198
257
  try {
199
- return JSON.parse(jsonString);
258
+ copy[key] = (0, exports.replaceCircularReferences)(value[key], knownObjects);
200
259
  }
201
260
  catch (error) {
202
- if (options?.acceptJSObject) {
203
- try {
204
- const jsonStringCleaned = parseJSObject(jsonString);
205
- return jsonStringCleaned;
206
- }
207
- catch (e) {
208
- // Ignore this error and return the original error or the fallback value
209
- }
210
- }
211
- if (options?.repairJSON) {
212
- try {
213
- const jsonStringCleaned = (0, jsonrepair_1.jsonrepair)(jsonString);
214
- return JSON.parse(jsonStringCleaned);
215
- }
216
- catch (e) {
217
- // Ignore this error and return the original error or the fallback value
218
- }
219
- }
220
- if (options?.fallbackValue !== undefined) {
221
- if (options.fallbackValue instanceof Function) {
222
- return options.fallbackValue();
223
- }
224
- return options.fallbackValue;
225
- }
226
- else if (options?.errorMessage) {
227
- throw new user_error_1.UserError(options.errorMessage);
261
+ if (error instanceof TypeError &&
262
+ error.message.includes('Cannot assign to read only property')) {
263
+ LoggerProxy.error('Error while replacing circular references: ' + error.message, { error });
264
+ continue; // Skip properties that cannot be assigned to (readonly, non-configurable, etc.)
228
265
  }
229
266
  throw error;
230
267
  }
268
+ }
269
+ knownObjects.delete(value);
270
+ return copy;
271
+ };
272
+ exports.replaceCircularReferences = replaceCircularReferences;
273
+ const jsonStringify = (obj, options = {}) => {
274
+ return JSON.stringify(options?.replaceCircularRefs ? (0, exports.replaceCircularReferences)(obj) : obj);
275
+ };
276
+ exports.jsonStringify = jsonStringify;
277
+ const sleep = async (ms) => await new Promise((resolve) => {
278
+ setTimeout(resolve, ms);
279
+ });
280
+ exports.sleep = sleep;
281
+ const sleepWithAbort = async (ms, abortSignal) => await new Promise((resolve, reject) => {
282
+ if (abortSignal?.aborted) {
283
+ reject(new execution_cancelled_error_1.ManualExecutionCancelledError(''));
284
+ return;
285
+ }
286
+ const timeout = setTimeout(resolve, ms);
287
+ const abortHandler = () => {
288
+ clearTimeout(timeout);
289
+ reject(new execution_cancelled_error_1.ManualExecutionCancelledError(''));
231
290
  };
232
- exports.jsonParse = jsonParse;
233
- /**
234
- * Decodes a Base64 string with proper UTF-8 character handling.
235
- *
236
- * @param str - The Base64 string to decode
237
- * @returns The decoded UTF-8 string
238
- */
239
- const base64DecodeUTF8 = (str) => {
240
- try {
241
- // Use modern TextDecoder for proper UTF-8 handling
242
- const bytes = new Uint8Array(atob(str)
243
- .split('')
244
- .map((char) => char.charCodeAt(0)));
245
- return new TextDecoder('utf-8').decode(bytes);
291
+ abortSignal?.addEventListener('abort', abortHandler, { once: true });
292
+ });
293
+ exports.sleepWithAbort = sleepWithAbort;
294
+ function fileTypeFromMimeType(mimeType) {
295
+ if (mimeType.startsWith('application/json'))
296
+ return 'json';
297
+ if (mimeType.startsWith('text/html'))
298
+ return 'html';
299
+ if (mimeType.startsWith('image/'))
300
+ return 'image';
301
+ if (mimeType.startsWith('audio/'))
302
+ return 'audio';
303
+ if (mimeType.startsWith('video/'))
304
+ return 'video';
305
+ if (mimeType.startsWith('text/') || mimeType.startsWith('application/javascript'))
306
+ return 'text';
307
+ if (mimeType.startsWith('application/pdf'))
308
+ return 'pdf';
309
+ return;
310
+ }
311
+ function assert(condition, msg) {
312
+ if (!condition) {
313
+ const error = new Error(msg ?? 'Invalid assertion');
314
+ // hide assert stack frame if supported
315
+ if (Error.hasOwnProperty('captureStackTrace')) {
316
+ // V8 only - https://nodejs.org/api/errors.html#errors_error_capturestacktrace_targetobject_constructoropt
317
+ Error.captureStackTrace(error, assert);
246
318
  }
247
- catch (error) {
248
- // Fallback method for older browsers
249
- console.warn('TextDecoder not available, using fallback method');
250
- return atob(str);
319
+ else if (error.stack) {
320
+ // fallback for IE and Firefox
321
+ error.stack = error.stack
322
+ .split('\n')
323
+ .slice(1) // skip assert function from stack frames
324
+ .join('\n');
251
325
  }
252
- };
253
- exports.base64DecodeUTF8 = base64DecodeUTF8;
254
- const replaceCircularReferences = (value, knownObjects = new WeakSet()) => {
255
- if (typeof value !== 'object' || value === null || value instanceof RegExp)
256
- return value;
257
- if ('toJSON' in value && typeof value.toJSON === 'function')
258
- return value.toJSON();
259
- if (knownObjects.has(value))
260
- return '[Circular Reference]';
261
- knownObjects.add(value);
262
- const copy = (Array.isArray(value) ? [] : {});
263
- for (const key in value) {
264
- if (reservedCopyKeys.has(key))
265
- continue;
266
- try {
267
- copy[key] = (0, exports.replaceCircularReferences)(value[key], knownObjects);
268
- }
269
- catch (error) {
270
- if (error instanceof TypeError &&
271
- error.message.includes('Cannot assign to read only property')) {
272
- LoggerProxy.error('Error while replacing circular references: ' + error.message, { error });
273
- continue; // Skip properties that cannot be assigned to (readonly, non-configurable, etc.)
326
+ throw error;
327
+ }
328
+ }
329
+ const isTraversableObject = (value) => {
330
+ return value && typeof value === 'object' && !Array.isArray(value) && !!Object.keys(value).length;
331
+ };
332
+ exports.isTraversableObject = isTraversableObject;
333
+ const removeCircularRefs = (obj, seen = new Set()) => {
334
+ seen.add(obj);
335
+ Object.entries(obj).forEach(([key, value]) => {
336
+ if ((0, exports.isTraversableObject)(value)) {
337
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
338
+ seen.has(value) ? (obj[key] = { circularReference: true }) : (0, exports.removeCircularRefs)(value, seen);
339
+ return;
340
+ }
341
+ if (Array.isArray(value)) {
342
+ value.forEach((val, index) => {
343
+ if (seen.has(val)) {
344
+ value[index] = { circularReference: true };
345
+ return;
274
346
  }
275
- throw error;
276
- }
347
+ if ((0, exports.isTraversableObject)(val)) {
348
+ (0, exports.removeCircularRefs)(val, seen);
349
+ }
350
+ });
277
351
  }
278
- knownObjects.delete(value);
279
- return copy;
280
- };
281
- exports.replaceCircularReferences = replaceCircularReferences;
282
- const jsonStringify = (obj, options = {}) => {
283
- return JSON.stringify(options?.replaceCircularRefs ? (0, exports.replaceCircularReferences)(obj) : obj);
284
- };
285
- exports.jsonStringify = jsonStringify;
286
- const sleep = async (ms) => await new Promise((resolve) => {
287
- setTimeout(resolve, ms);
288
352
  });
289
- exports.sleep = sleep;
290
- const sleepWithAbort = async (ms, abortSignal) => await new Promise((resolve, reject) => {
291
- if (abortSignal?.aborted) {
292
- reject(new execution_cancelled_error_1.ManualExecutionCancelledError(''));
293
- return;
294
- }
295
- const timeout = setTimeout(resolve, ms);
296
- const abortHandler = () => {
297
- clearTimeout(timeout);
298
- reject(new execution_cancelled_error_1.ManualExecutionCancelledError(''));
353
+ };
354
+ exports.removeCircularRefs = removeCircularRefs;
355
+ function updateDisplayOptions(displayOptions, properties) {
356
+ return properties.map((nodeProperty) => {
357
+ return {
358
+ ...nodeProperty,
359
+ displayOptions: (0, merge_1.default)({}, nodeProperty.displayOptions, displayOptions),
299
360
  };
300
- abortSignal?.addEventListener('abort', abortHandler, { once: true });
301
361
  });
302
- exports.sleepWithAbort = sleepWithAbort;
303
- function fileTypeFromMimeType(mimeType) {
304
- if (mimeType.startsWith('application/json'))
305
- return 'json';
306
- if (mimeType.startsWith('text/html'))
307
- return 'html';
308
- if (mimeType.startsWith('image/'))
309
- return 'image';
310
- if (mimeType.startsWith('audio/'))
311
- return 'audio';
312
- if (mimeType.startsWith('video/'))
313
- return 'video';
314
- if (mimeType.startsWith('text/') || mimeType.startsWith('application/javascript'))
315
- return 'text';
316
- if (mimeType.startsWith('application/pdf'))
317
- return 'pdf';
318
- return;
362
+ }
363
+ /**
364
+ * Generates a random integer within a specified range.
365
+ *
366
+ * @param {number} min - The lower bound of the range. If `max` is not provided, this value is used as the upper bound and the lower bound is set to 0.
367
+ * @param {number} [max] - The upper bound of the range, not inclusive.
368
+ * @returns {number} A random integer within the specified range.
369
+ */
370
+ function randomInt(min, max) {
371
+ if (max === undefined) {
372
+ max = min;
373
+ min = 0;
319
374
  }
320
- function assert(condition, msg) {
321
- if (!condition) {
322
- const error = new Error(msg ?? 'Invalid assertion');
323
- // hide assert stack frame if supported
324
- if (Error.hasOwnProperty('captureStackTrace')) {
325
- // V8 only - https://nodejs.org/api/errors.html#errors_error_capturestacktrace_targetobject_constructoropt
326
- Error.captureStackTrace(error, assert);
327
- }
328
- else if (error.stack) {
329
- // fallback for IE and Firefox
330
- error.stack = error.stack
331
- .split('\n')
332
- .slice(1) // skip assert function from stack frames
333
- .join('\n');
334
- }
335
- throw error;
336
- }
337
- }
338
- const isTraversableObject = (value) => {
339
- return value && typeof value === 'object' && !Array.isArray(value) && !!Object.keys(value).length;
340
- };
341
- exports.isTraversableObject = isTraversableObject;
342
- const removeCircularRefs = (obj, seen = new Set()) => {
343
- seen.add(obj);
344
- Object.entries(obj).forEach(([key, value]) => {
345
- if ((0, exports.isTraversableObject)(value)) {
346
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
347
- seen.has(value) ? (obj[key] = { circularReference: true }) : (0, exports.removeCircularRefs)(value, seen);
348
- return;
349
- }
350
- if (Array.isArray(value)) {
351
- value.forEach((val, index) => {
352
- if (seen.has(val)) {
353
- value[index] = { circularReference: true };
354
- return;
355
- }
356
- if ((0, exports.isTraversableObject)(val)) {
357
- (0, exports.removeCircularRefs)(val, seen);
358
- }
359
- });
360
- }
361
- });
362
- };
363
- exports.removeCircularRefs = removeCircularRefs;
364
- function updateDisplayOptions(displayOptions, properties) {
365
- return properties.map((nodeProperty) => {
366
- return {
367
- ...nodeProperty,
368
- displayOptions: (0, merge_1.default)({}, nodeProperty.displayOptions, displayOptions),
369
- };
370
- });
371
- }
372
- /**
373
- * Generates a random integer within a specified range.
374
- *
375
- * @param {number} min - The lower bound of the range. If `max` is not provided, this value is used as the upper bound and the lower bound is set to 0.
376
- * @param {number} [max] - The upper bound of the range, not inclusive.
377
- * @returns {number} A random integer within the specified range.
378
- */
379
- function randomInt(min, max) {
380
- if (max === undefined) {
381
- max = min;
382
- min = 0;
383
- }
384
- return min + (crypto.getRandomValues(new Uint32Array(1))[0] % (max - min));
385
- }
386
- /**
387
- * Generates a random alphanumeric string of a specified length, or within a range of lengths.
388
- *
389
- * @param {number} minLength - If `maxLength` is not provided, this is the length of the string to generate. Otherwise, this is the lower bound of the range of possible lengths.
390
- * @param {number} [maxLength] - The upper bound of the range of possible lengths. If provided, the actual length of the string will be a random number between `minLength` and `maxLength`, inclusive.
391
- * @returns {string} A random alphanumeric string of the specified length or within the specified range of lengths.
392
- */
393
- function randomString(minLength, maxLength) {
394
- const length = maxLength === undefined ? minLength : randomInt(minLength, maxLength + 1);
395
- return [...crypto.getRandomValues(new Uint32Array(length))]
396
- .map((byte) => constants_1.ALPHABET[byte % constants_1.ALPHABET.length])
397
- .join('');
398
- }
399
- /**
400
- * Checks if a value is an object with a specific key and provides a type guard for the key.
401
- */
402
- function hasKey(value, key) {
403
- return value !== null && typeof value === 'object' && value.hasOwnProperty(key);
375
+ return min + (crypto.getRandomValues(new Uint32Array(1))[0] % (max - min));
376
+ }
377
+ /**
378
+ * Generates a random alphanumeric string of a specified length, or within a range of lengths.
379
+ *
380
+ * @param {number} minLength - If `maxLength` is not provided, this is the length of the string to generate. Otherwise, this is the lower bound of the range of possible lengths.
381
+ * @param {number} [maxLength] - The upper bound of the range of possible lengths. If provided, the actual length of the string will be a random number between `minLength` and `maxLength`, inclusive.
382
+ * @returns {string} A random alphanumeric string of the specified length or within the specified range of lengths.
383
+ */
384
+ function randomString(minLength, maxLength) {
385
+ const length = maxLength === undefined ? minLength : randomInt(minLength, maxLength + 1);
386
+ return [...crypto.getRandomValues(new Uint32Array(length))]
387
+ .map((byte) => constants_1.ALPHABET[byte % constants_1.ALPHABET.length])
388
+ .join('');
389
+ }
390
+ /**
391
+ * Checks if a value is an object with a specific key and provides a type guard for the key.
392
+ */
393
+ function hasKey(value, key) {
394
+ return value !== null && typeof value === 'object' && value.hasOwnProperty(key);
395
+ }
396
+ const unsafeObjectProperties = new Set([
397
+ '__proto__',
398
+ 'prototype',
399
+ 'constructor',
400
+ 'getPrototypeOf',
401
+ 'setPrototypeOf',
402
+ 'getOwnPropertyDescriptor',
403
+ 'getOwnPropertyDescriptors',
404
+ 'defineProperty',
405
+ 'defineProperties',
406
+ 'mainModule',
407
+ 'binding',
408
+ '_linkedBinding',
409
+ '_load',
410
+ 'prepareStackTrace',
411
+ '__lookupGetter__',
412
+ '__lookupSetter__',
413
+ '__defineGetter__',
414
+ '__defineSetter__',
415
+ 'caller',
416
+ 'callee',
417
+ 'arguments',
418
+ 'getBuiltinModule',
419
+ 'dlopen',
420
+ 'execve',
421
+ 'loadEnvFile',
422
+ ]);
423
+ /**
424
+ * Checks if a property key is safe to use on an object, preventing prototype pollution.
425
+ * setting untrusted properties can alter the object's prototype chain and introduce vulnerabilities.
426
+ *
427
+ * @see setSafeObjectProperty
428
+ */
429
+ function isSafeObjectProperty(property) {
430
+ return !unsafeObjectProperties.has(property);
431
+ }
432
+ const unsafeObjectPropertyTokenPattern = new RegExp(`\\b(?:${[...unsafeObjectProperties]
433
+ .map((p) => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
434
+ .join('|')})\\b`);
435
+ function containsUnsafeObjectPropertyToken(input) {
436
+ return unsafeObjectPropertyTokenPattern.test(input);
437
+ }
438
+ /**
439
+ * Safely sets a property on an object, preventing prototype pollution.
440
+ *
441
+ * @see isSafeObjectProperty
442
+ */
443
+ function setSafeObjectProperty(target, property, value) {
444
+ if (isSafeObjectProperty(property)) {
445
+ target[property] = value;
404
446
  }
405
- const unsafeObjectProperties = new Set([
406
- '__proto__',
407
- 'prototype',
408
- 'constructor',
409
- 'getPrototypeOf',
410
- 'setPrototypeOf',
411
- 'getOwnPropertyDescriptor',
412
- 'getOwnPropertyDescriptors',
413
- 'defineProperty',
414
- 'defineProperties',
415
- 'mainModule',
416
- 'binding',
417
- '_linkedBinding',
418
- '_load',
419
- 'prepareStackTrace',
420
- '__lookupGetter__',
421
- '__lookupSetter__',
422
- '__defineGetter__',
423
- '__defineSetter__',
424
- 'caller',
425
- 'callee',
426
- 'arguments',
427
- 'getBuiltinModule',
428
- 'dlopen',
429
- 'execve',
430
- 'loadEnvFile',
431
- ]);
432
- /**
433
- * Checks if a property key is safe to use on an object, preventing prototype pollution.
434
- * setting untrusted properties can alter the object's prototype chain and introduce vulnerabilities.
435
- *
436
- * @see setSafeObjectProperty
437
- */
438
- function isSafeObjectProperty(property) {
439
- return !unsafeObjectProperties.has(property);
447
+ }
448
+ const DANGEROUS_XML_NAMES = new Set(['__proto__', 'constructor', 'prototype']);
449
+ function sanitizeXmlName(name) {
450
+ if (DANGEROUS_XML_NAMES.has(name))
451
+ return `sanitized_${name}`;
452
+ return name;
453
+ }
454
+ const COMMUNITY_PACKAGE_NAME_REGEX = /^(?!@n8n\/)(@[\w.-]+\/)?n8n-nodes-(?!base\b)\b\w+/g;
455
+ function isCommunityPackageName(packageName) {
456
+ COMMUNITY_PACKAGE_NAME_REGEX.lastIndex = 0;
457
+ // Community packages names start with <@username/>n8n-nodes- not followed by word 'base'
458
+ const nameMatch = COMMUNITY_PACKAGE_NAME_REGEX.exec(packageName);
459
+ return !!nameMatch;
460
+ }
461
+ function dedupe(arr) {
462
+ return [...new Set(arr)];
463
+ }
464
+ /**
465
+ * Extracts a safe filename from a path or filename string.
466
+ *
467
+ * Handles both Unix and Windows path separators, removing directory
468
+ * components and null bytes to return just the filename.
469
+ *
470
+ * @param fileName - The filename or path to sanitize
471
+ * @returns The extracted filename without path components
472
+ *
473
+ * @example
474
+ * sanitizeFilename('path/to/file.txt') // returns 'file.txt'
475
+ * sanitizeFilename('/tmp/upload/doc.pdf') // returns 'doc.pdf'
476
+ * sanitizeFilename('C:\\Users\\file.txt') // returns 'file.txt'
477
+ * sanitizeFilename('../../../etc/passwd') // returns 'passwd'
478
+ */
479
+ function sanitizeFilename(fileName) {
480
+ // Normalize to forward slashes first to handle Windows paths on Unix
481
+ const normalized = fileName.replace(/\\/g, '/');
482
+ // Extract just the filename, stripping all directory components
483
+ let sanitized = path_1.default.basename(normalized);
484
+ // Remove null bytes which could be used for null byte injection attacks
485
+ sanitized = sanitized.replace(/\0/g, '');
486
+ // If the result is empty or just dots, use a default name
487
+ if (!sanitized || /^\.+$/.test(sanitized)) {
488
+ sanitized = 'untitled';
440
489
  }
441
- const unsafeObjectPropertyTokenPattern = new RegExp(`\\b(?:${[...unsafeObjectProperties]
442
- .map((p) => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
443
- .join('|')})\\b`);
444
- function containsUnsafeObjectPropertyToken(input) {
445
- return unsafeObjectPropertyTokenPattern.test(input);
446
- }
447
- /**
448
- * Safely sets a property on an object, preventing prototype pollution.
449
- *
450
- * @see isSafeObjectProperty
451
- */
452
- function setSafeObjectProperty(target, property, value) {
453
- if (isSafeObjectProperty(property)) {
454
- target[property] = value;
455
- }
456
- }
457
- const DANGEROUS_XML_NAMES = new Set(['__proto__', 'constructor', 'prototype']);
458
- function sanitizeXmlName(name) {
459
- if (DANGEROUS_XML_NAMES.has(name))
460
- return `sanitized_${name}`;
461
- return name;
462
- }
463
- const COMMUNITY_PACKAGE_NAME_REGEX = /^(?!@n8n\/)(@[\w.-]+\/)?n8n-nodes-(?!base\b)\b\w+/g;
464
- function isCommunityPackageName(packageName) {
465
- COMMUNITY_PACKAGE_NAME_REGEX.lastIndex = 0;
466
- // Community packages names start with <@username/>n8n-nodes- not followed by word 'base'
467
- const nameMatch = COMMUNITY_PACKAGE_NAME_REGEX.exec(packageName);
468
- return !!nameMatch;
469
- }
470
- function dedupe(arr) {
471
- return [...new Set(arr)];
472
- }
473
- /**
474
- * Extracts a safe filename from a path or filename string.
475
- *
476
- * Handles both Unix and Windows path separators, removing directory
477
- * components and null bytes to return just the filename.
478
- *
479
- * @param fileName - The filename or path to sanitize
480
- * @returns The extracted filename without path components
481
- *
482
- * @example
483
- * sanitizeFilename('path/to/file.txt') // returns 'file.txt'
484
- * sanitizeFilename('/tmp/upload/doc.pdf') // returns 'doc.pdf'
485
- * sanitizeFilename('C:\\Users\\file.txt') // returns 'file.txt'
486
- * sanitizeFilename('../../../etc/passwd') // returns 'passwd'
487
- */
488
- function sanitizeFilename(fileName) {
489
- // Normalize to forward slashes first to handle Windows paths on Unix
490
- const normalized = fileName.replace(/\\/g, '/');
491
- // Extract just the filename, stripping all directory components
492
- let sanitized = path_1.default.basename(normalized);
493
- // Remove null bytes which could be used for null byte injection attacks
494
- sanitized = sanitized.replace(/\0/g, '');
495
- // If the result is empty or just dots, use a default name
496
- if (!sanitized || /^\.+$/.test(sanitized)) {
497
- sanitized = 'untitled';
498
- }
499
- return sanitized;
500
- }
501
- /** Generates a cryptographically secure 64-character hex token (256 bits). */
502
- function generateSecureToken() {
503
- const bytes = new Uint8Array(32);
504
- crypto.getRandomValues(bytes);
505
- return bytes.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');
506
- }
507
- });
490
+ return sanitized;
491
+ }
492
+ /** Generates a cryptographically secure 64-character hex token (256 bits). */
493
+ function generateSecureToken() {
494
+ const bytes = new Uint8Array(32);
495
+ crypto.getRandomValues(bytes);
496
+ return bytes.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');
497
+ }
508
498
  //# sourceMappingURL=utils.js.map