@teleporthq/teleport-plugin-next-workflows 0.44.11 → 0.45.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 (976) hide show
  1. package/__tests__/_helpers/fake-fetch.ts +75 -0
  2. package/__tests__/_helpers/gui-place-order-statements.ts +17 -0
  3. package/__tests__/_helpers/inserted-lines.ts +22 -0
  4. package/__tests__/_helpers/invoice-store.ts +10 -1
  5. package/__tests__/_helpers/load-security-runtime.ts +45 -0
  6. package/__tests__/_helpers/load-server-runtime.ts +26 -3
  7. package/__tests__/_helpers/run-account-delete-route.ts +3 -1
  8. package/__tests__/_helpers/run-generated-middleware.ts +7 -2
  9. package/__tests__/account-delete-owned-rows.test.ts +3 -1
  10. package/__tests__/adopted-element-trigger-code.test.ts +128 -0
  11. package/__tests__/analytics-track-outcome.test.ts +145 -0
  12. package/__tests__/auth-password-change-ends-sessions.test.ts +8 -1
  13. package/__tests__/auth-password-security.test.ts +2275 -0
  14. package/__tests__/auth-session-cost.test.ts +31 -0
  15. package/__tests__/auth-signup-route.test.ts +960 -0
  16. package/__tests__/authored-code-every-path.test.ts +247 -0
  17. package/__tests__/automations-bus.test.ts +3820 -0
  18. package/__tests__/automations-catalog-drift.test.ts +97 -0
  19. package/__tests__/booking-calendar-feed-route.test.ts +20 -3
  20. package/__tests__/cart-price-order.test.ts +336 -1
  21. package/__tests__/code-lookup-rate-limit-route.test.ts +189 -0
  22. package/__tests__/cost-bearing-node-types.test.ts +119 -0
  23. package/__tests__/credential-columns-reply.test.ts +9 -0
  24. package/__tests__/credential-result-reply.test.ts +19 -5
  25. package/__tests__/cron-route-loop-templateparams.test.ts +6 -3
  26. package/__tests__/custom-js-authored-code.test.ts +304 -0
  27. package/__tests__/custom-node-custom-code-gate.test.ts +136 -0
  28. package/__tests__/custom-node-step-handlers.test.ts +251 -0
  29. package/__tests__/custom-node-step-reach.test.ts +63 -0
  30. package/__tests__/data-api-anon-user-id-fallback.test.ts +7 -2
  31. package/__tests__/data-api-browser-reads.test.ts +7 -0
  32. package/__tests__/data-api-business-events.test.ts +403 -0
  33. package/__tests__/data-api-invalid-body.test.ts +7 -0
  34. package/__tests__/data-api-low-stock-autofire.test.ts +30 -4
  35. package/__tests__/data-api-optional-feature-columns.test.ts +44 -0
  36. package/__tests__/data-api-owner-scope-credentials.test.ts +1324 -0
  37. package/__tests__/data-api-protected-tables.test.ts +48 -15
  38. package/__tests__/data-api-retired-table-and-account-fields.test.ts +208 -0
  39. package/__tests__/email-locale-senders.test.ts +5 -3
  40. package/__tests__/expression-injection.test.ts +343 -0
  41. package/__tests__/fixtures/admin-file-workflows.json +242 -0
  42. package/__tests__/form-confirmation-email-template.test.ts +44 -0
  43. package/__tests__/internal-request-headers.test.ts +25 -0
  44. package/__tests__/invoice-pdf-service-project-header.test.ts +120 -0
  45. package/__tests__/invoice-self-call-origin.test.ts +57 -1
  46. package/__tests__/legacy-webhook-self-calls.test.ts +86 -1
  47. package/__tests__/middleware-home-route-protection.test.ts +3 -1
  48. package/__tests__/middleware-subscriber-access.test.ts +1 -1
  49. package/__tests__/newsletter-admin-route.test.ts +649 -0
  50. package/__tests__/newsletter-plugin.test.ts +1248 -0
  51. package/__tests__/outbound-nodes-security.test.ts +1929 -0
  52. package/__tests__/page-access-guard.test.ts +217 -0
  53. package/__tests__/page-access-route-table.test.ts +231 -0
  54. package/__tests__/payment-drivers-module.test.ts +23 -0
  55. package/__tests__/payment-legacy-webhook-routes.test.ts +100 -5
  56. package/__tests__/payment-webhook-route.test.ts +4 -1
  57. package/__tests__/paypal-webhook-signature-verification.test.ts +44 -0
  58. package/__tests__/place-order-guards.test.ts +506 -0
  59. package/__tests__/public-step-guards.test.ts +310 -0
  60. package/__tests__/publish-refusals.test.ts +505 -0
  61. package/__tests__/realtime-identity-routes.test.ts +492 -0
  62. package/__tests__/record-event-writer-server-only.test.ts +975 -0
  63. package/__tests__/resolve-config-template-params.test.ts +3 -3
  64. package/__tests__/runtime-storage-upload-access.test.ts +280 -17
  65. package/__tests__/security-integration-env-names.test.ts +74 -0
  66. package/__tests__/security-lists-parity.test.ts +245 -0
  67. package/__tests__/security-runtime-shadow.test.ts +224 -1
  68. package/__tests__/security-runtime.test.ts +893 -0
  69. package/__tests__/segment-rate-limit-error-branch.test.ts +284 -0
  70. package/__tests__/segment-route-abuse-gate.test.ts +309 -0
  71. package/__tests__/server-job-hops-real-data-api.test.ts +669 -0
  72. package/__tests__/server-session-identity.test.ts +522 -0
  73. package/__tests__/server-step-chain.test.ts +222 -0
  74. package/__tests__/server-step-signing.test.ts +107 -2
  75. package/__tests__/session-cookie-resolver.test.ts +62 -106
  76. package/__tests__/signup-event.test.ts +649 -0
  77. package/__tests__/signup-reply-identical.test.ts +144 -0
  78. package/__tests__/slack-message-escaping.test.ts +123 -0
  79. package/__tests__/visitor-step-limits.test.ts +318 -0
  80. package/__tests__/webhook-delivery-lease.test.ts +4 -1
  81. package/__tests__/webpack-safe-handlers.test.ts +57 -8
  82. package/__tests__/workflow-auth-guard.test.ts +9 -1
  83. package/dist/cjs/account-delete-route-generator.d.ts +1 -0
  84. package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
  85. package/dist/cjs/account-delete-route-generator.js +18 -3
  86. package/dist/cjs/account-delete-route-generator.js.map +1 -1
  87. package/dist/cjs/api-route-generator.d.ts +52 -3
  88. package/dist/cjs/api-route-generator.d.ts.map +1 -1
  89. package/dist/cjs/api-route-generator.js +600 -145
  90. package/dist/cjs/api-route-generator.js.map +1 -1
  91. package/dist/cjs/auth-generator.d.ts +126 -3
  92. package/dist/cjs/auth-generator.d.ts.map +1 -1
  93. package/dist/cjs/auth-generator.js +1353 -139
  94. package/dist/cjs/auth-generator.js.map +1 -1
  95. package/dist/cjs/automations/activity-kicks.d.ts +12 -0
  96. package/dist/cjs/automations/activity-kicks.d.ts.map +1 -0
  97. package/dist/cjs/automations/activity-kicks.js +123 -0
  98. package/dist/cjs/automations/activity-kicks.js.map +1 -0
  99. package/dist/cjs/automations/app-events-source.d.ts +33 -0
  100. package/dist/cjs/automations/app-events-source.d.ts.map +1 -0
  101. package/dist/cjs/automations/app-events-source.js +109 -0
  102. package/dist/cjs/automations/app-events-source.js.map +1 -0
  103. package/dist/cjs/automations/automations-project-plugin.d.ts +21 -0
  104. package/dist/cjs/automations/automations-project-plugin.d.ts.map +1 -0
  105. package/dist/cjs/automations/automations-project-plugin.js +102 -0
  106. package/dist/cjs/automations/automations-project-plugin.js.map +1 -0
  107. package/dist/cjs/automations/automations-scope.d.ts +104 -0
  108. package/dist/cjs/automations/automations-scope.d.ts.map +1 -0
  109. package/dist/cjs/automations/automations-scope.js +176 -0
  110. package/dist/cjs/automations/automations-scope.js.map +1 -0
  111. package/dist/cjs/automations/dispatcher-source.d.ts +72 -0
  112. package/dist/cjs/automations/dispatcher-source.d.ts.map +1 -0
  113. package/dist/cjs/automations/dispatcher-source.js +1008 -0
  114. package/dist/cjs/automations/dispatcher-source.js.map +1 -0
  115. package/dist/cjs/automations/event-bus-source.d.ts +44 -0
  116. package/dist/cjs/automations/event-bus-source.d.ts.map +1 -0
  117. package/dist/cjs/automations/event-bus-source.js +427 -0
  118. package/dist/cjs/automations/event-bus-source.js.map +1 -0
  119. package/dist/cjs/automations/handler-module-generator.d.ts +25 -0
  120. package/dist/cjs/automations/handler-module-generator.d.ts.map +1 -0
  121. package/dist/cjs/automations/handler-module-generator.js +78 -0
  122. package/dist/cjs/automations/handler-module-generator.js.map +1 -0
  123. package/dist/cjs/automations/hydrators-source.d.ts +33 -0
  124. package/dist/cjs/automations/hydrators-source.d.ts.map +1 -0
  125. package/dist/cjs/automations/hydrators-source.js +571 -0
  126. package/dist/cjs/automations/hydrators-source.js.map +1 -0
  127. package/dist/cjs/booking-calendar-feed-route-generator.d.ts.map +1 -1
  128. package/dist/cjs/booking-calendar-feed-route-generator.js +8 -0
  129. package/dist/cjs/booking-calendar-feed-route-generator.js.map +1 -1
  130. package/dist/cjs/configured-nextauth-url.d.ts +17 -0
  131. package/dist/cjs/configured-nextauth-url.d.ts.map +1 -0
  132. package/dist/cjs/configured-nextauth-url.js +20 -0
  133. package/dist/cjs/configured-nextauth-url.js.map +1 -0
  134. package/dist/cjs/cron-request-verification.d.ts +22 -1
  135. package/dist/cjs/cron-request-verification.d.ts.map +1 -1
  136. package/dist/cjs/cron-request-verification.js +50 -6
  137. package/dist/cjs/cron-request-verification.js.map +1 -1
  138. package/dist/cjs/data-api-route-generator.d.ts +19 -0
  139. package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
  140. package/dist/cjs/data-api-route-generator.js +711 -43
  141. package/dist/cjs/data-api-route-generator.js.map +1 -1
  142. package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts +3 -1
  143. package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
  144. package/dist/cjs/ecommerce/parameterized-stock-chain.js +45 -5
  145. package/dist/cjs/ecommerce/parameterized-stock-chain.js.map +1 -1
  146. package/dist/cjs/ecommerce/place-order-guards.d.ts +126 -0
  147. package/dist/cjs/ecommerce/place-order-guards.d.ts.map +1 -0
  148. package/dist/cjs/ecommerce/place-order-guards.js +670 -0
  149. package/dist/cjs/ecommerce/place-order-guards.js.map +1 -0
  150. package/dist/cjs/ecommerce-customhandler-rewriter.d.ts +2 -0
  151. package/dist/cjs/ecommerce-customhandler-rewriter.d.ts.map +1 -1
  152. package/dist/cjs/ecommerce-customhandler-rewriter.js +38 -2
  153. package/dist/cjs/ecommerce-customhandler-rewriter.js.map +1 -1
  154. package/dist/cjs/executor-generator.d.ts.map +1 -1
  155. package/dist/cjs/executor-generator.js +368 -60
  156. package/dist/cjs/executor-generator.js.map +1 -1
  157. package/dist/cjs/graph-utils.d.ts +9 -0
  158. package/dist/cjs/graph-utils.d.ts.map +1 -1
  159. package/dist/cjs/graph-utils.js +32 -1
  160. package/dist/cjs/graph-utils.js.map +1 -1
  161. package/dist/cjs/index.d.ts +20 -1
  162. package/dist/cjs/index.d.ts.map +1 -1
  163. package/dist/cjs/index.js +72 -2
  164. package/dist/cjs/index.js.map +1 -1
  165. package/dist/cjs/invoice/api-routes-code.d.ts +9 -3
  166. package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
  167. package/dist/cjs/invoice/api-routes-code.js +9 -7
  168. package/dist/cjs/invoice/api-routes-code.js.map +1 -1
  169. package/dist/cjs/invoice/index.d.ts.map +1 -1
  170. package/dist/cjs/invoice/index.js +12 -7
  171. package/dist/cjs/invoice/index.js.map +1 -1
  172. package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -1
  173. package/dist/cjs/invoice/invoice-assembly-code.js +8 -3
  174. package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -1
  175. package/dist/cjs/invoice/pdf-generator-code.d.ts.map +1 -1
  176. package/dist/cjs/invoice/pdf-generator-code.js +2 -1
  177. package/dist/cjs/invoice/pdf-generator-code.js.map +1 -1
  178. package/dist/cjs/invoice/pdf-service-client-code.d.ts.map +1 -1
  179. package/dist/cjs/invoice/pdf-service-client-code.js +15 -7
  180. package/dist/cjs/invoice/pdf-service-client-code.js.map +1 -1
  181. package/dist/cjs/newsletter/admin-route-code.d.ts +60 -0
  182. package/dist/cjs/newsletter/admin-route-code.d.ts.map +1 -0
  183. package/dist/cjs/newsletter/admin-route-code.js +300 -0
  184. package/dist/cjs/newsletter/admin-route-code.js.map +1 -0
  185. package/dist/cjs/newsletter/helper-code.d.ts +109 -0
  186. package/dist/cjs/newsletter/helper-code.d.ts.map +1 -0
  187. package/dist/cjs/newsletter/helper-code.js +662 -0
  188. package/dist/cjs/newsletter/helper-code.js.map +1 -0
  189. package/dist/cjs/newsletter/newsletter-scope.d.ts +65 -0
  190. package/dist/cjs/newsletter/newsletter-scope.d.ts.map +1 -0
  191. package/dist/cjs/newsletter/newsletter-scope.js +103 -0
  192. package/dist/cjs/newsletter/newsletter-scope.js.map +1 -0
  193. package/dist/cjs/newsletter/project-plugin.d.ts +18 -0
  194. package/dist/cjs/newsletter/project-plugin.d.ts.map +1 -0
  195. package/dist/cjs/newsletter/project-plugin.js +97 -0
  196. package/dist/cjs/newsletter/project-plugin.js.map +1 -0
  197. package/dist/cjs/newsletter/routes-code.d.ts +6 -0
  198. package/dist/cjs/newsletter/routes-code.d.ts.map +1 -0
  199. package/dist/cjs/newsletter/routes-code.js +181 -0
  200. package/dist/cjs/newsletter/routes-code.js.map +1 -0
  201. package/dist/cjs/nodes/account/account-compare-passwords.d.ts.map +1 -1
  202. package/dist/cjs/nodes/account/account-compare-passwords.js +16 -6
  203. package/dist/cjs/nodes/account/account-compare-passwords.js.map +1 -1
  204. package/dist/cjs/nodes/account/account-delete-current.js +1 -1
  205. package/dist/cjs/nodes/account/account-get-current.js +1 -1
  206. package/dist/cjs/nodes/account/account-hash-password.d.ts.map +1 -1
  207. package/dist/cjs/nodes/account/account-hash-password.js +15 -3
  208. package/dist/cjs/nodes/account/account-hash-password.js.map +1 -1
  209. package/dist/cjs/nodes/account/account-login.d.ts.map +1 -1
  210. package/dist/cjs/nodes/account/account-login.js +23 -6
  211. package/dist/cjs/nodes/account/account-login.js.map +1 -1
  212. package/dist/cjs/nodes/account/account-logout.js +1 -1
  213. package/dist/cjs/nodes/account/account-refresh-session.js +1 -1
  214. package/dist/cjs/nodes/account/account-request-password-reset.d.ts +3 -0
  215. package/dist/cjs/nodes/account/account-request-password-reset.d.ts.map +1 -0
  216. package/dist/cjs/nodes/account/account-request-password-reset.js +46 -0
  217. package/dist/cjs/nodes/account/account-request-password-reset.js.map +1 -0
  218. package/dist/cjs/nodes/account/account-reset-password.d.ts +3 -0
  219. package/dist/cjs/nodes/account/account-reset-password.d.ts.map +1 -0
  220. package/dist/cjs/nodes/account/account-reset-password.js +44 -0
  221. package/dist/cjs/nodes/account/account-reset-password.js.map +1 -0
  222. package/dist/cjs/nodes/account/account-signup.d.ts.map +1 -1
  223. package/dist/cjs/nodes/account/account-signup.js +82 -19
  224. package/dist/cjs/nodes/account/account-signup.js.map +1 -1
  225. package/dist/cjs/nodes/account/account-social-login.js +1 -1
  226. package/dist/cjs/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
  227. package/dist/cjs/nodes/ai/ai-custom-prompt.js +20 -5
  228. package/dist/cjs/nodes/ai/ai-custom-prompt.js.map +1 -1
  229. package/dist/cjs/nodes/ai/ai-detect-language.d.ts.map +1 -1
  230. package/dist/cjs/nodes/ai/ai-detect-language.js +20 -5
  231. package/dist/cjs/nodes/ai/ai-detect-language.js.map +1 -1
  232. package/dist/cjs/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
  233. package/dist/cjs/nodes/ai/ai-generate-text-embedding.js +10 -2
  234. package/dist/cjs/nodes/ai/ai-generate-text-embedding.js.map +1 -1
  235. package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
  236. package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
  237. package/dist/cjs/nodes/ai/ai-provider-utils.d.ts +31 -2
  238. package/dist/cjs/nodes/ai/ai-provider-utils.d.ts.map +1 -1
  239. package/dist/cjs/nodes/ai/ai-provider-utils.js +125 -11
  240. package/dist/cjs/nodes/ai/ai-provider-utils.js.map +1 -1
  241. package/dist/cjs/nodes/ai/ai-select-database-data.d.ts.map +1 -1
  242. package/dist/cjs/nodes/ai/ai-select-database-data.js +6 -2
  243. package/dist/cjs/nodes/ai/ai-select-database-data.js.map +1 -1
  244. package/dist/cjs/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
  245. package/dist/cjs/nodes/ai/ai-sentiment-analysis.js +20 -5
  246. package/dist/cjs/nodes/ai/ai-sentiment-analysis.js.map +1 -1
  247. package/dist/cjs/nodes/ai/ai-summarization.d.ts.map +1 -1
  248. package/dist/cjs/nodes/ai/ai-summarization.js +20 -5
  249. package/dist/cjs/nodes/ai/ai-summarization.js.map +1 -1
  250. package/dist/cjs/nodes/ai/ai-text-classifier.d.ts.map +1 -1
  251. package/dist/cjs/nodes/ai/ai-text-classifier.js +20 -5
  252. package/dist/cjs/nodes/ai/ai-text-classifier.js.map +1 -1
  253. package/dist/cjs/nodes/ai/ai-text-transform.d.ts.map +1 -1
  254. package/dist/cjs/nodes/ai/ai-text-transform.js +20 -5
  255. package/dist/cjs/nodes/ai/ai-text-transform.js.map +1 -1
  256. package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts +3 -0
  257. package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
  258. package/dist/cjs/nodes/analytics/analytics-track-outcome.js +110 -0
  259. package/dist/cjs/nodes/analytics/analytics-track-outcome.js.map +1 -0
  260. package/dist/cjs/nodes/cart/cart-price-order.d.ts.map +1 -1
  261. package/dist/cjs/nodes/cart/cart-price-order.js +161 -2
  262. package/dist/cjs/nodes/cart/cart-price-order.js.map +1 -1
  263. package/dist/cjs/nodes/cost-bearing-node-types.d.ts +4 -0
  264. package/dist/cjs/nodes/cost-bearing-node-types.d.ts.map +1 -0
  265. package/dist/cjs/nodes/cost-bearing-node-types.js +43 -0
  266. package/dist/cjs/nodes/cost-bearing-node-types.js.map +1 -0
  267. package/dist/cjs/nodes/data/data-select.d.ts.map +1 -1
  268. package/dist/cjs/nodes/data/data-select.js +12 -2
  269. package/dist/cjs/nodes/data/data-select.js.map +1 -1
  270. package/dist/cjs/nodes/email/email-mailersend.d.ts.map +1 -1
  271. package/dist/cjs/nodes/email/email-mailersend.js +15 -11
  272. package/dist/cjs/nodes/email/email-mailersend.js.map +1 -1
  273. package/dist/cjs/nodes/email/email-mailgun.d.ts.map +1 -1
  274. package/dist/cjs/nodes/email/email-mailgun.js +15 -15
  275. package/dist/cjs/nodes/email/email-mailgun.js.map +1 -1
  276. package/dist/cjs/nodes/email/email-postmark.d.ts.map +1 -1
  277. package/dist/cjs/nodes/email/email-postmark.js +15 -15
  278. package/dist/cjs/nodes/email/email-postmark.js.map +1 -1
  279. package/dist/cjs/nodes/email/email-resend.d.ts.map +1 -1
  280. package/dist/cjs/nodes/email/email-resend.js +15 -15
  281. package/dist/cjs/nodes/email/email-resend.js.map +1 -1
  282. package/dist/cjs/nodes/email/email-sendgrid.d.ts.map +1 -1
  283. package/dist/cjs/nodes/email/email-sendgrid.js +15 -15
  284. package/dist/cjs/nodes/email/email-sendgrid.js.map +1 -1
  285. package/dist/cjs/nodes/email/html-escape-code.d.ts +3 -0
  286. package/dist/cjs/nodes/email/html-escape-code.d.ts.map +1 -0
  287. package/dist/cjs/nodes/email/html-escape-code.js +23 -0
  288. package/dist/cjs/nodes/email/html-escape-code.js.map +1 -0
  289. package/dist/cjs/nodes/email/message-trust.d.ts +40 -0
  290. package/dist/cjs/nodes/email/message-trust.d.ts.map +1 -0
  291. package/dist/cjs/nodes/email/message-trust.js +167 -0
  292. package/dist/cjs/nodes/email/message-trust.js.map +1 -0
  293. package/dist/cjs/nodes/email/outbound-message-guard.d.ts +113 -0
  294. package/dist/cjs/nodes/email/outbound-message-guard.d.ts.map +1 -0
  295. package/dist/cjs/nodes/email/outbound-message-guard.js +460 -0
  296. package/dist/cjs/nodes/email/outbound-message-guard.js.map +1 -0
  297. package/dist/cjs/nodes/email/trusted-html-code.d.ts +22 -0
  298. package/dist/cjs/nodes/email/trusted-html-code.d.ts.map +1 -0
  299. package/dist/cjs/nodes/email/trusted-html-code.js +52 -0
  300. package/dist/cjs/nodes/email/trusted-html-code.js.map +1 -0
  301. package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
  302. package/dist/cjs/nodes/general/general-custom-js.js +44 -7
  303. package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
  304. package/dist/cjs/nodes/general/general-http-request.d.ts.map +1 -1
  305. package/dist/cjs/nodes/general/general-http-request.js +431 -45
  306. package/dist/cjs/nodes/general/general-http-request.js.map +1 -1
  307. package/dist/cjs/nodes/general/general-rate-limiter.d.ts.map +1 -1
  308. package/dist/cjs/nodes/general/general-rate-limiter.js +46 -78
  309. package/dist/cjs/nodes/general/general-rate-limiter.js.map +1 -1
  310. package/dist/cjs/nodes/general/general-wait.d.ts +3 -0
  311. package/dist/cjs/nodes/general/general-wait.d.ts.map +1 -0
  312. package/dist/cjs/nodes/general/general-wait.js +81 -0
  313. package/dist/cjs/nodes/general/general-wait.js.map +1 -0
  314. package/dist/cjs/nodes/general/visitor-request.d.ts +44 -0
  315. package/dist/cjs/nodes/general/visitor-request.d.ts.map +1 -0
  316. package/dist/cjs/nodes/general/visitor-request.js +72 -0
  317. package/dist/cjs/nodes/general/visitor-request.js.map +1 -0
  318. package/dist/cjs/nodes/index.d.ts.map +1 -1
  319. package/dist/cjs/nodes/index.js +7 -1
  320. package/dist/cjs/nodes/index.js.map +1 -1
  321. package/dist/cjs/nodes/integrations/integration-slack.d.ts.map +1 -1
  322. package/dist/cjs/nodes/integrations/integration-slack.js +17 -6
  323. package/dist/cjs/nodes/integrations/integration-slack.js.map +1 -1
  324. package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts +3 -0
  325. package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
  326. package/dist/cjs/nodes/newsletter/newsletter-confirm.js +41 -0
  327. package/dist/cjs/nodes/newsletter/newsletter-confirm.js.map +1 -0
  328. package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
  329. package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
  330. package/dist/cjs/nodes/newsletter/newsletter-subscribe.js +69 -0
  331. package/dist/cjs/nodes/newsletter/newsletter-subscribe.js.map +1 -0
  332. package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
  333. package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
  334. package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js +42 -0
  335. package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
  336. package/dist/cjs/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
  337. package/dist/cjs/nodes/realtime/realtime-join-channel.js +5 -4
  338. package/dist/cjs/nodes/realtime/realtime-join-channel.js.map +1 -1
  339. package/dist/cjs/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
  340. package/dist/cjs/nodes/realtime/realtime-send-channel-event.js +11 -2
  341. package/dist/cjs/nodes/realtime/realtime-send-channel-event.js.map +1 -1
  342. package/dist/cjs/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
  343. package/dist/cjs/nodes/realtime/realtime-send-channel-message.js +11 -2
  344. package/dist/cjs/nodes/realtime/realtime-send-channel-message.js.map +1 -1
  345. package/dist/cjs/nodes/sms/sms-infobip.d.ts.map +1 -1
  346. package/dist/cjs/nodes/sms/sms-infobip.js +11 -8
  347. package/dist/cjs/nodes/sms/sms-infobip.js.map +1 -1
  348. package/dist/cjs/nodes/sms/sms-smsapi.d.ts.map +1 -1
  349. package/dist/cjs/nodes/sms/sms-smsapi.js +11 -8
  350. package/dist/cjs/nodes/sms/sms-smsapi.js.map +1 -1
  351. package/dist/cjs/nodes/sms/sms-textmagic.d.ts.map +1 -1
  352. package/dist/cjs/nodes/sms/sms-textmagic.js +11 -8
  353. package/dist/cjs/nodes/sms/sms-textmagic.js.map +1 -1
  354. package/dist/cjs/nodes/sms/sms-twilio.d.ts.map +1 -1
  355. package/dist/cjs/nodes/sms/sms-twilio.js +12 -10
  356. package/dist/cjs/nodes/sms/sms-twilio.js.map +1 -1
  357. package/dist/cjs/nodes/types.d.ts +8 -1
  358. package/dist/cjs/nodes/types.d.ts.map +1 -1
  359. package/dist/cjs/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
  360. package/dist/cjs/nodes/utility/utility-similarity-scoring.js +29 -10
  361. package/dist/cjs/nodes/utility/utility-similarity-scoring.js.map +1 -1
  362. package/dist/cjs/page-access-guard-generator.d.ts +23 -0
  363. package/dist/cjs/page-access-guard-generator.d.ts.map +1 -0
  364. package/dist/cjs/page-access-guard-generator.js +135 -0
  365. package/dist/cjs/page-access-guard-generator.js.map +1 -0
  366. package/dist/cjs/password-reset-route-generator.d.ts +119 -0
  367. package/dist/cjs/password-reset-route-generator.d.ts.map +1 -0
  368. package/dist/cjs/password-reset-route-generator.js +460 -0
  369. package/dist/cjs/password-reset-route-generator.js.map +1 -0
  370. package/dist/cjs/payments/payment-core-code.d.ts.map +1 -1
  371. package/dist/cjs/payments/payment-core-code.js +12 -7
  372. package/dist/cjs/payments/payment-core-code.js.map +1 -1
  373. package/dist/cjs/project-code-scanner.d.ts +11 -0
  374. package/dist/cjs/project-code-scanner.d.ts.map +1 -0
  375. package/dist/cjs/project-code-scanner.js +80 -0
  376. package/dist/cjs/project-code-scanner.js.map +1 -0
  377. package/dist/cjs/public-step-guards.d.ts +122 -0
  378. package/dist/cjs/public-step-guards.d.ts.map +1 -0
  379. package/dist/cjs/public-step-guards.js +288 -0
  380. package/dist/cjs/public-step-guards.js.map +1 -0
  381. package/dist/cjs/publish-refusals.d.ts +66 -0
  382. package/dist/cjs/publish-refusals.d.ts.map +1 -0
  383. package/dist/cjs/publish-refusals.js +278 -0
  384. package/dist/cjs/publish-refusals.js.map +1 -0
  385. package/dist/cjs/realtime-generator.d.ts +63 -1
  386. package/dist/cjs/realtime-generator.d.ts.map +1 -1
  387. package/dist/cjs/realtime-generator.js +404 -230
  388. package/dist/cjs/realtime-generator.js.map +1 -1
  389. package/dist/cjs/runtime-storage-generator.d.ts +32 -1
  390. package/dist/cjs/runtime-storage-generator.d.ts.map +1 -1
  391. package/dist/cjs/runtime-storage-generator.js +265 -12
  392. package/dist/cjs/runtime-storage-generator.js.map +1 -1
  393. package/dist/cjs/security-runtime/index.d.ts +14 -0
  394. package/dist/cjs/security-runtime/index.d.ts.map +1 -0
  395. package/dist/cjs/security-runtime/index.js +48 -0
  396. package/dist/cjs/security-runtime/index.js.map +1 -0
  397. package/dist/cjs/security-runtime/security-runtime-code.d.ts +53 -0
  398. package/dist/cjs/security-runtime/security-runtime-code.d.ts.map +1 -0
  399. package/dist/cjs/security-runtime/security-runtime-code.js +580 -0
  400. package/dist/cjs/security-runtime/security-runtime-code.js.map +1 -0
  401. package/dist/cjs/security-scanner.d.ts +72 -3
  402. package/dist/cjs/security-scanner.d.ts.map +1 -1
  403. package/dist/cjs/security-scanner.js +220 -8
  404. package/dist/cjs/security-scanner.js.map +1 -1
  405. package/dist/cjs/segment-splitter.d.ts.map +1 -1
  406. package/dist/cjs/segment-splitter.js +10 -2
  407. package/dist/cjs/segment-splitter.js.map +1 -1
  408. package/dist/cjs/segment-trust.d.ts +36 -0
  409. package/dist/cjs/segment-trust.d.ts.map +1 -1
  410. package/dist/cjs/segment-trust.js +147 -3
  411. package/dist/cjs/segment-trust.js.map +1 -1
  412. package/dist/cjs/self-call-headers.d.ts +31 -0
  413. package/dist/cjs/self-call-headers.d.ts.map +1 -0
  414. package/dist/cjs/self-call-headers.js +48 -0
  415. package/dist/cjs/self-call-headers.js.map +1 -0
  416. package/dist/cjs/sent-email-log/index.d.ts +7 -0
  417. package/dist/cjs/sent-email-log/index.d.ts.map +1 -1
  418. package/dist/cjs/sent-email-log/index.js +17 -1
  419. package/dist/cjs/sent-email-log/index.js.map +1 -1
  420. package/dist/cjs/sent-email-log/sent-email-log-code.d.ts +7 -0
  421. package/dist/cjs/sent-email-log/sent-email-log-code.d.ts.map +1 -1
  422. package/dist/cjs/sent-email-log/sent-email-log-code.js +17 -3
  423. package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -1
  424. package/dist/cjs/server-custom-node-call.d.ts +79 -0
  425. package/dist/cjs/server-custom-node-call.d.ts.map +1 -0
  426. package/dist/cjs/server-custom-node-call.js +285 -0
  427. package/dist/cjs/server-custom-node-call.js.map +1 -0
  428. package/dist/cjs/server-runtime-code.d.ts +39 -12
  429. package/dist/cjs/server-runtime-code.d.ts.map +1 -1
  430. package/dist/cjs/server-runtime-code.js +484 -41
  431. package/dist/cjs/server-runtime-code.js.map +1 -1
  432. package/dist/cjs/session-cookie-resolver.d.ts +3 -1
  433. package/dist/cjs/session-cookie-resolver.d.ts.map +1 -1
  434. package/dist/cjs/session-revocation-generator.d.ts +39 -0
  435. package/dist/cjs/session-revocation-generator.d.ts.map +1 -0
  436. package/dist/cjs/session-revocation-generator.js +177 -0
  437. package/dist/cjs/session-revocation-generator.js.map +1 -0
  438. package/dist/cjs/slack-message-values.d.ts +6 -0
  439. package/dist/cjs/slack-message-values.d.ts.map +1 -0
  440. package/dist/cjs/slack-message-values.js +73 -0
  441. package/dist/cjs/slack-message-values.js.map +1 -0
  442. package/dist/cjs/transactional-email-code.d.ts +11 -0
  443. package/dist/cjs/transactional-email-code.d.ts.map +1 -1
  444. package/dist/cjs/transactional-email-code.js +29 -5
  445. package/dist/cjs/transactional-email-code.js.map +1 -1
  446. package/dist/cjs/trigger-generator.d.ts +2 -0
  447. package/dist/cjs/trigger-generator.d.ts.map +1 -1
  448. package/dist/cjs/trigger-generator.js +17 -4
  449. package/dist/cjs/trigger-generator.js.map +1 -1
  450. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  451. package/dist/cjs/visitor-step-limits.d.ts +66 -0
  452. package/dist/cjs/visitor-step-limits.d.ts.map +1 -0
  453. package/dist/cjs/visitor-step-limits.js +187 -0
  454. package/dist/cjs/visitor-step-limits.js.map +1 -0
  455. package/dist/cjs/webhook-generator.d.ts.map +1 -1
  456. package/dist/cjs/webhook-generator.js +93 -15
  457. package/dist/cjs/webhook-generator.js.map +1 -1
  458. package/dist/cjs/webhook-signature-verification.d.ts.map +1 -1
  459. package/dist/cjs/webhook-signature-verification.js +13 -3
  460. package/dist/cjs/webhook-signature-verification.js.map +1 -1
  461. package/dist/cjs/workflow-auth-generator.d.ts +4 -1
  462. package/dist/cjs/workflow-auth-generator.d.ts.map +1 -1
  463. package/dist/cjs/workflow-auth-generator.js +8 -3
  464. package/dist/cjs/workflow-auth-generator.js.map +1 -1
  465. package/dist/cjs/workflow-component-plugin.js +11 -3
  466. package/dist/cjs/workflow-component-plugin.js.map +1 -1
  467. package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
  468. package/dist/cjs/workflow-project-plugin.js +302 -56
  469. package/dist/cjs/workflow-project-plugin.js.map +1 -1
  470. package/dist/cjs/workflow-scope.d.ts.map +1 -1
  471. package/dist/cjs/workflow-scope.js +5 -0
  472. package/dist/cjs/workflow-scope.js.map +1 -1
  473. package/dist/esm/account-delete-route-generator.d.ts +1 -0
  474. package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
  475. package/dist/esm/account-delete-route-generator.js +18 -3
  476. package/dist/esm/account-delete-route-generator.js.map +1 -1
  477. package/dist/esm/api-route-generator.d.ts +52 -3
  478. package/dist/esm/api-route-generator.d.ts.map +1 -1
  479. package/dist/esm/api-route-generator.js +595 -142
  480. package/dist/esm/api-route-generator.js.map +1 -1
  481. package/dist/esm/auth-generator.d.ts +126 -3
  482. package/dist/esm/auth-generator.d.ts.map +1 -1
  483. package/dist/esm/auth-generator.js +1350 -140
  484. package/dist/esm/auth-generator.js.map +1 -1
  485. package/dist/esm/automations/activity-kicks.d.ts +12 -0
  486. package/dist/esm/automations/activity-kicks.d.ts.map +1 -0
  487. package/dist/esm/automations/activity-kicks.js +118 -0
  488. package/dist/esm/automations/activity-kicks.js.map +1 -0
  489. package/dist/esm/automations/app-events-source.d.ts +33 -0
  490. package/dist/esm/automations/app-events-source.d.ts.map +1 -0
  491. package/dist/esm/automations/app-events-source.js +104 -0
  492. package/dist/esm/automations/app-events-source.js.map +1 -0
  493. package/dist/esm/automations/automations-project-plugin.d.ts +21 -0
  494. package/dist/esm/automations/automations-project-plugin.d.ts.map +1 -0
  495. package/dist/esm/automations/automations-project-plugin.js +98 -0
  496. package/dist/esm/automations/automations-project-plugin.js.map +1 -0
  497. package/dist/esm/automations/automations-scope.d.ts +104 -0
  498. package/dist/esm/automations/automations-scope.d.ts.map +1 -0
  499. package/dist/esm/automations/automations-scope.js +165 -0
  500. package/dist/esm/automations/automations-scope.js.map +1 -0
  501. package/dist/esm/automations/dispatcher-source.d.ts +72 -0
  502. package/dist/esm/automations/dispatcher-source.d.ts.map +1 -0
  503. package/dist/esm/automations/dispatcher-source.js +999 -0
  504. package/dist/esm/automations/dispatcher-source.js.map +1 -0
  505. package/dist/esm/automations/event-bus-source.d.ts +44 -0
  506. package/dist/esm/automations/event-bus-source.d.ts.map +1 -0
  507. package/dist/esm/automations/event-bus-source.js +421 -0
  508. package/dist/esm/automations/event-bus-source.js.map +1 -0
  509. package/dist/esm/automations/handler-module-generator.d.ts +25 -0
  510. package/dist/esm/automations/handler-module-generator.d.ts.map +1 -0
  511. package/dist/esm/automations/handler-module-generator.js +71 -0
  512. package/dist/esm/automations/handler-module-generator.js.map +1 -0
  513. package/dist/esm/automations/hydrators-source.d.ts +33 -0
  514. package/dist/esm/automations/hydrators-source.d.ts.map +1 -0
  515. package/dist/esm/automations/hydrators-source.js +567 -0
  516. package/dist/esm/automations/hydrators-source.js.map +1 -0
  517. package/dist/esm/booking-calendar-feed-route-generator.d.ts.map +1 -1
  518. package/dist/esm/booking-calendar-feed-route-generator.js +8 -0
  519. package/dist/esm/booking-calendar-feed-route-generator.js.map +1 -1
  520. package/dist/esm/configured-nextauth-url.d.ts +17 -0
  521. package/dist/esm/configured-nextauth-url.d.ts.map +1 -0
  522. package/dist/esm/configured-nextauth-url.js +17 -0
  523. package/dist/esm/configured-nextauth-url.js.map +1 -0
  524. package/dist/esm/cron-request-verification.d.ts +22 -1
  525. package/dist/esm/cron-request-verification.d.ts.map +1 -1
  526. package/dist/esm/cron-request-verification.js +48 -5
  527. package/dist/esm/cron-request-verification.js.map +1 -1
  528. package/dist/esm/data-api-route-generator.d.ts +19 -0
  529. package/dist/esm/data-api-route-generator.d.ts.map +1 -1
  530. package/dist/esm/data-api-route-generator.js +710 -43
  531. package/dist/esm/data-api-route-generator.js.map +1 -1
  532. package/dist/esm/ecommerce/parameterized-stock-chain.d.ts +3 -1
  533. package/dist/esm/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
  534. package/dist/esm/ecommerce/parameterized-stock-chain.js +43 -4
  535. package/dist/esm/ecommerce/parameterized-stock-chain.js.map +1 -1
  536. package/dist/esm/ecommerce/place-order-guards.d.ts +126 -0
  537. package/dist/esm/ecommerce/place-order-guards.d.ts.map +1 -0
  538. package/dist/esm/ecommerce/place-order-guards.js +655 -0
  539. package/dist/esm/ecommerce/place-order-guards.js.map +1 -0
  540. package/dist/esm/ecommerce-customhandler-rewriter.d.ts +2 -0
  541. package/dist/esm/ecommerce-customhandler-rewriter.d.ts.map +1 -1
  542. package/dist/esm/ecommerce-customhandler-rewriter.js +38 -2
  543. package/dist/esm/ecommerce-customhandler-rewriter.js.map +1 -1
  544. package/dist/esm/executor-generator.d.ts.map +1 -1
  545. package/dist/esm/executor-generator.js +368 -60
  546. package/dist/esm/executor-generator.js.map +1 -1
  547. package/dist/esm/graph-utils.d.ts +9 -0
  548. package/dist/esm/graph-utils.d.ts.map +1 -1
  549. package/dist/esm/graph-utils.js +30 -0
  550. package/dist/esm/graph-utils.js.map +1 -1
  551. package/dist/esm/index.d.ts +20 -1
  552. package/dist/esm/index.d.ts.map +1 -1
  553. package/dist/esm/index.js +27 -1
  554. package/dist/esm/index.js.map +1 -1
  555. package/dist/esm/invoice/api-routes-code.d.ts +9 -3
  556. package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
  557. package/dist/esm/invoice/api-routes-code.js +9 -7
  558. package/dist/esm/invoice/api-routes-code.js.map +1 -1
  559. package/dist/esm/invoice/index.d.ts.map +1 -1
  560. package/dist/esm/invoice/index.js +12 -7
  561. package/dist/esm/invoice/index.js.map +1 -1
  562. package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -1
  563. package/dist/esm/invoice/invoice-assembly-code.js +8 -3
  564. package/dist/esm/invoice/invoice-assembly-code.js.map +1 -1
  565. package/dist/esm/invoice/pdf-generator-code.d.ts.map +1 -1
  566. package/dist/esm/invoice/pdf-generator-code.js +2 -1
  567. package/dist/esm/invoice/pdf-generator-code.js.map +1 -1
  568. package/dist/esm/invoice/pdf-service-client-code.d.ts.map +1 -1
  569. package/dist/esm/invoice/pdf-service-client-code.js +15 -7
  570. package/dist/esm/invoice/pdf-service-client-code.js.map +1 -1
  571. package/dist/esm/newsletter/admin-route-code.d.ts +60 -0
  572. package/dist/esm/newsletter/admin-route-code.d.ts.map +1 -0
  573. package/dist/esm/newsletter/admin-route-code.js +295 -0
  574. package/dist/esm/newsletter/admin-route-code.js.map +1 -0
  575. package/dist/esm/newsletter/helper-code.d.ts +109 -0
  576. package/dist/esm/newsletter/helper-code.d.ts.map +1 -0
  577. package/dist/esm/newsletter/helper-code.js +656 -0
  578. package/dist/esm/newsletter/helper-code.js.map +1 -0
  579. package/dist/esm/newsletter/newsletter-scope.d.ts +65 -0
  580. package/dist/esm/newsletter/newsletter-scope.d.ts.map +1 -0
  581. package/dist/esm/newsletter/newsletter-scope.js +97 -0
  582. package/dist/esm/newsletter/newsletter-scope.js.map +1 -0
  583. package/dist/esm/newsletter/project-plugin.d.ts +18 -0
  584. package/dist/esm/newsletter/project-plugin.d.ts.map +1 -0
  585. package/dist/esm/newsletter/project-plugin.js +93 -0
  586. package/dist/esm/newsletter/project-plugin.js.map +1 -0
  587. package/dist/esm/newsletter/routes-code.d.ts +6 -0
  588. package/dist/esm/newsletter/routes-code.d.ts.map +1 -0
  589. package/dist/esm/newsletter/routes-code.js +175 -0
  590. package/dist/esm/newsletter/routes-code.js.map +1 -0
  591. package/dist/esm/nodes/account/account-compare-passwords.d.ts.map +1 -1
  592. package/dist/esm/nodes/account/account-compare-passwords.js +16 -6
  593. package/dist/esm/nodes/account/account-compare-passwords.js.map +1 -1
  594. package/dist/esm/nodes/account/account-delete-current.js +1 -1
  595. package/dist/esm/nodes/account/account-get-current.js +1 -1
  596. package/dist/esm/nodes/account/account-hash-password.d.ts.map +1 -1
  597. package/dist/esm/nodes/account/account-hash-password.js +15 -3
  598. package/dist/esm/nodes/account/account-hash-password.js.map +1 -1
  599. package/dist/esm/nodes/account/account-login.d.ts.map +1 -1
  600. package/dist/esm/nodes/account/account-login.js +23 -6
  601. package/dist/esm/nodes/account/account-login.js.map +1 -1
  602. package/dist/esm/nodes/account/account-logout.js +1 -1
  603. package/dist/esm/nodes/account/account-refresh-session.js +1 -1
  604. package/dist/esm/nodes/account/account-request-password-reset.d.ts +3 -0
  605. package/dist/esm/nodes/account/account-request-password-reset.d.ts.map +1 -0
  606. package/dist/esm/nodes/account/account-request-password-reset.js +43 -0
  607. package/dist/esm/nodes/account/account-request-password-reset.js.map +1 -0
  608. package/dist/esm/nodes/account/account-reset-password.d.ts +3 -0
  609. package/dist/esm/nodes/account/account-reset-password.d.ts.map +1 -0
  610. package/dist/esm/nodes/account/account-reset-password.js +41 -0
  611. package/dist/esm/nodes/account/account-reset-password.js.map +1 -0
  612. package/dist/esm/nodes/account/account-signup.d.ts.map +1 -1
  613. package/dist/esm/nodes/account/account-signup.js +82 -19
  614. package/dist/esm/nodes/account/account-signup.js.map +1 -1
  615. package/dist/esm/nodes/account/account-social-login.js +1 -1
  616. package/dist/esm/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
  617. package/dist/esm/nodes/ai/ai-custom-prompt.js +20 -5
  618. package/dist/esm/nodes/ai/ai-custom-prompt.js.map +1 -1
  619. package/dist/esm/nodes/ai/ai-detect-language.d.ts.map +1 -1
  620. package/dist/esm/nodes/ai/ai-detect-language.js +20 -5
  621. package/dist/esm/nodes/ai/ai-detect-language.js.map +1 -1
  622. package/dist/esm/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
  623. package/dist/esm/nodes/ai/ai-generate-text-embedding.js +10 -2
  624. package/dist/esm/nodes/ai/ai-generate-text-embedding.js.map +1 -1
  625. package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
  626. package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
  627. package/dist/esm/nodes/ai/ai-provider-utils.d.ts +31 -2
  628. package/dist/esm/nodes/ai/ai-provider-utils.d.ts.map +1 -1
  629. package/dist/esm/nodes/ai/ai-provider-utils.js +124 -10
  630. package/dist/esm/nodes/ai/ai-provider-utils.js.map +1 -1
  631. package/dist/esm/nodes/ai/ai-select-database-data.d.ts.map +1 -1
  632. package/dist/esm/nodes/ai/ai-select-database-data.js +6 -2
  633. package/dist/esm/nodes/ai/ai-select-database-data.js.map +1 -1
  634. package/dist/esm/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
  635. package/dist/esm/nodes/ai/ai-sentiment-analysis.js +20 -5
  636. package/dist/esm/nodes/ai/ai-sentiment-analysis.js.map +1 -1
  637. package/dist/esm/nodes/ai/ai-summarization.d.ts.map +1 -1
  638. package/dist/esm/nodes/ai/ai-summarization.js +20 -5
  639. package/dist/esm/nodes/ai/ai-summarization.js.map +1 -1
  640. package/dist/esm/nodes/ai/ai-text-classifier.d.ts.map +1 -1
  641. package/dist/esm/nodes/ai/ai-text-classifier.js +20 -5
  642. package/dist/esm/nodes/ai/ai-text-classifier.js.map +1 -1
  643. package/dist/esm/nodes/ai/ai-text-transform.d.ts.map +1 -1
  644. package/dist/esm/nodes/ai/ai-text-transform.js +20 -5
  645. package/dist/esm/nodes/ai/ai-text-transform.js.map +1 -1
  646. package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts +3 -0
  647. package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
  648. package/dist/esm/nodes/analytics/analytics-track-outcome.js +107 -0
  649. package/dist/esm/nodes/analytics/analytics-track-outcome.js.map +1 -0
  650. package/dist/esm/nodes/cart/cart-price-order.d.ts.map +1 -1
  651. package/dist/esm/nodes/cart/cart-price-order.js +161 -2
  652. package/dist/esm/nodes/cart/cart-price-order.js.map +1 -1
  653. package/dist/esm/nodes/cost-bearing-node-types.d.ts +4 -0
  654. package/dist/esm/nodes/cost-bearing-node-types.d.ts.map +1 -0
  655. package/dist/esm/nodes/cost-bearing-node-types.js +39 -0
  656. package/dist/esm/nodes/cost-bearing-node-types.js.map +1 -0
  657. package/dist/esm/nodes/data/data-select.d.ts.map +1 -1
  658. package/dist/esm/nodes/data/data-select.js +12 -2
  659. package/dist/esm/nodes/data/data-select.js.map +1 -1
  660. package/dist/esm/nodes/email/email-mailersend.d.ts.map +1 -1
  661. package/dist/esm/nodes/email/email-mailersend.js +15 -11
  662. package/dist/esm/nodes/email/email-mailersend.js.map +1 -1
  663. package/dist/esm/nodes/email/email-mailgun.d.ts.map +1 -1
  664. package/dist/esm/nodes/email/email-mailgun.js +15 -15
  665. package/dist/esm/nodes/email/email-mailgun.js.map +1 -1
  666. package/dist/esm/nodes/email/email-postmark.d.ts.map +1 -1
  667. package/dist/esm/nodes/email/email-postmark.js +15 -15
  668. package/dist/esm/nodes/email/email-postmark.js.map +1 -1
  669. package/dist/esm/nodes/email/email-resend.d.ts.map +1 -1
  670. package/dist/esm/nodes/email/email-resend.js +15 -15
  671. package/dist/esm/nodes/email/email-resend.js.map +1 -1
  672. package/dist/esm/nodes/email/email-sendgrid.d.ts.map +1 -1
  673. package/dist/esm/nodes/email/email-sendgrid.js +15 -15
  674. package/dist/esm/nodes/email/email-sendgrid.js.map +1 -1
  675. package/dist/esm/nodes/email/html-escape-code.d.ts +3 -0
  676. package/dist/esm/nodes/email/html-escape-code.d.ts.map +1 -0
  677. package/dist/esm/nodes/email/html-escape-code.js +18 -0
  678. package/dist/esm/nodes/email/html-escape-code.js.map +1 -0
  679. package/dist/esm/nodes/email/message-trust.d.ts +40 -0
  680. package/dist/esm/nodes/email/message-trust.d.ts.map +1 -0
  681. package/dist/esm/nodes/email/message-trust.js +161 -0
  682. package/dist/esm/nodes/email/message-trust.js.map +1 -0
  683. package/dist/esm/nodes/email/outbound-message-guard.d.ts +113 -0
  684. package/dist/esm/nodes/email/outbound-message-guard.d.ts.map +1 -0
  685. package/dist/esm/nodes/email/outbound-message-guard.js +452 -0
  686. package/dist/esm/nodes/email/outbound-message-guard.js.map +1 -0
  687. package/dist/esm/nodes/email/trusted-html-code.d.ts +22 -0
  688. package/dist/esm/nodes/email/trusted-html-code.d.ts.map +1 -0
  689. package/dist/esm/nodes/email/trusted-html-code.js +49 -0
  690. package/dist/esm/nodes/email/trusted-html-code.js.map +1 -0
  691. package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
  692. package/dist/esm/nodes/general/general-custom-js.js +44 -7
  693. package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
  694. package/dist/esm/nodes/general/general-http-request.d.ts.map +1 -1
  695. package/dist/esm/nodes/general/general-http-request.js +431 -45
  696. package/dist/esm/nodes/general/general-http-request.js.map +1 -1
  697. package/dist/esm/nodes/general/general-rate-limiter.d.ts.map +1 -1
  698. package/dist/esm/nodes/general/general-rate-limiter.js +46 -78
  699. package/dist/esm/nodes/general/general-rate-limiter.js.map +1 -1
  700. package/dist/esm/nodes/general/general-wait.d.ts +3 -0
  701. package/dist/esm/nodes/general/general-wait.d.ts.map +1 -0
  702. package/dist/esm/nodes/general/general-wait.js +78 -0
  703. package/dist/esm/nodes/general/general-wait.js.map +1 -0
  704. package/dist/esm/nodes/general/visitor-request.d.ts +44 -0
  705. package/dist/esm/nodes/general/visitor-request.d.ts.map +1 -0
  706. package/dist/esm/nodes/general/visitor-request.js +65 -0
  707. package/dist/esm/nodes/general/visitor-request.js.map +1 -0
  708. package/dist/esm/nodes/index.d.ts.map +1 -1
  709. package/dist/esm/nodes/index.js +7 -1
  710. package/dist/esm/nodes/index.js.map +1 -1
  711. package/dist/esm/nodes/integrations/integration-slack.d.ts.map +1 -1
  712. package/dist/esm/nodes/integrations/integration-slack.js +17 -6
  713. package/dist/esm/nodes/integrations/integration-slack.js.map +1 -1
  714. package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts +3 -0
  715. package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
  716. package/dist/esm/nodes/newsletter/newsletter-confirm.js +38 -0
  717. package/dist/esm/nodes/newsletter/newsletter-confirm.js.map +1 -0
  718. package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
  719. package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
  720. package/dist/esm/nodes/newsletter/newsletter-subscribe.js +66 -0
  721. package/dist/esm/nodes/newsletter/newsletter-subscribe.js.map +1 -0
  722. package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
  723. package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
  724. package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js +39 -0
  725. package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
  726. package/dist/esm/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
  727. package/dist/esm/nodes/realtime/realtime-join-channel.js +5 -4
  728. package/dist/esm/nodes/realtime/realtime-join-channel.js.map +1 -1
  729. package/dist/esm/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
  730. package/dist/esm/nodes/realtime/realtime-send-channel-event.js +11 -2
  731. package/dist/esm/nodes/realtime/realtime-send-channel-event.js.map +1 -1
  732. package/dist/esm/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
  733. package/dist/esm/nodes/realtime/realtime-send-channel-message.js +11 -2
  734. package/dist/esm/nodes/realtime/realtime-send-channel-message.js.map +1 -1
  735. package/dist/esm/nodes/sms/sms-infobip.d.ts.map +1 -1
  736. package/dist/esm/nodes/sms/sms-infobip.js +11 -8
  737. package/dist/esm/nodes/sms/sms-infobip.js.map +1 -1
  738. package/dist/esm/nodes/sms/sms-smsapi.d.ts.map +1 -1
  739. package/dist/esm/nodes/sms/sms-smsapi.js +11 -8
  740. package/dist/esm/nodes/sms/sms-smsapi.js.map +1 -1
  741. package/dist/esm/nodes/sms/sms-textmagic.d.ts.map +1 -1
  742. package/dist/esm/nodes/sms/sms-textmagic.js +11 -8
  743. package/dist/esm/nodes/sms/sms-textmagic.js.map +1 -1
  744. package/dist/esm/nodes/sms/sms-twilio.d.ts.map +1 -1
  745. package/dist/esm/nodes/sms/sms-twilio.js +12 -10
  746. package/dist/esm/nodes/sms/sms-twilio.js.map +1 -1
  747. package/dist/esm/nodes/types.d.ts +8 -1
  748. package/dist/esm/nodes/types.d.ts.map +1 -1
  749. package/dist/esm/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
  750. package/dist/esm/nodes/utility/utility-similarity-scoring.js +29 -10
  751. package/dist/esm/nodes/utility/utility-similarity-scoring.js.map +1 -1
  752. package/dist/esm/page-access-guard-generator.d.ts +23 -0
  753. package/dist/esm/page-access-guard-generator.d.ts.map +1 -0
  754. package/dist/esm/page-access-guard-generator.js +131 -0
  755. package/dist/esm/page-access-guard-generator.js.map +1 -0
  756. package/dist/esm/password-reset-route-generator.d.ts +119 -0
  757. package/dist/esm/password-reset-route-generator.d.ts.map +1 -0
  758. package/dist/esm/password-reset-route-generator.js +448 -0
  759. package/dist/esm/password-reset-route-generator.js.map +1 -0
  760. package/dist/esm/payments/payment-core-code.d.ts.map +1 -1
  761. package/dist/esm/payments/payment-core-code.js +12 -7
  762. package/dist/esm/payments/payment-core-code.js.map +1 -1
  763. package/dist/esm/project-code-scanner.d.ts +11 -0
  764. package/dist/esm/project-code-scanner.d.ts.map +1 -0
  765. package/dist/esm/project-code-scanner.js +75 -0
  766. package/dist/esm/project-code-scanner.js.map +1 -0
  767. package/dist/esm/public-step-guards.d.ts +122 -0
  768. package/dist/esm/public-step-guards.d.ts.map +1 -0
  769. package/dist/esm/public-step-guards.js +280 -0
  770. package/dist/esm/public-step-guards.js.map +1 -0
  771. package/dist/esm/publish-refusals.d.ts +66 -0
  772. package/dist/esm/publish-refusals.d.ts.map +1 -0
  773. package/dist/esm/publish-refusals.js +271 -0
  774. package/dist/esm/publish-refusals.js.map +1 -0
  775. package/dist/esm/realtime-generator.d.ts +63 -1
  776. package/dist/esm/realtime-generator.d.ts.map +1 -1
  777. package/dist/esm/realtime-generator.js +401 -229
  778. package/dist/esm/realtime-generator.js.map +1 -1
  779. package/dist/esm/runtime-storage-generator.d.ts +32 -1
  780. package/dist/esm/runtime-storage-generator.d.ts.map +1 -1
  781. package/dist/esm/runtime-storage-generator.js +264 -11
  782. package/dist/esm/runtime-storage-generator.js.map +1 -1
  783. package/dist/esm/security-runtime/index.d.ts +14 -0
  784. package/dist/esm/security-runtime/index.d.ts.map +1 -0
  785. package/dist/esm/security-runtime/index.js +37 -0
  786. package/dist/esm/security-runtime/index.js.map +1 -0
  787. package/dist/esm/security-runtime/security-runtime-code.d.ts +53 -0
  788. package/dist/esm/security-runtime/security-runtime-code.d.ts.map +1 -0
  789. package/dist/esm/security-runtime/security-runtime-code.js +575 -0
  790. package/dist/esm/security-runtime/security-runtime-code.js.map +1 -0
  791. package/dist/esm/security-scanner.d.ts +72 -3
  792. package/dist/esm/security-scanner.d.ts.map +1 -1
  793. package/dist/esm/security-scanner.js +217 -8
  794. package/dist/esm/security-scanner.js.map +1 -1
  795. package/dist/esm/segment-splitter.d.ts.map +1 -1
  796. package/dist/esm/segment-splitter.js +10 -2
  797. package/dist/esm/segment-splitter.js.map +1 -1
  798. package/dist/esm/segment-trust.d.ts +36 -0
  799. package/dist/esm/segment-trust.d.ts.map +1 -1
  800. package/dist/esm/segment-trust.js +146 -2
  801. package/dist/esm/segment-trust.js.map +1 -1
  802. package/dist/esm/self-call-headers.d.ts +31 -0
  803. package/dist/esm/self-call-headers.d.ts.map +1 -0
  804. package/dist/esm/self-call-headers.js +43 -0
  805. package/dist/esm/self-call-headers.js.map +1 -0
  806. package/dist/esm/sent-email-log/index.d.ts +7 -0
  807. package/dist/esm/sent-email-log/index.d.ts.map +1 -1
  808. package/dist/esm/sent-email-log/index.js +15 -0
  809. package/dist/esm/sent-email-log/index.js.map +1 -1
  810. package/dist/esm/sent-email-log/sent-email-log-code.d.ts +7 -0
  811. package/dist/esm/sent-email-log/sent-email-log-code.d.ts.map +1 -1
  812. package/dist/esm/sent-email-log/sent-email-log-code.js +17 -3
  813. package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -1
  814. package/dist/esm/server-custom-node-call.d.ts +79 -0
  815. package/dist/esm/server-custom-node-call.d.ts.map +1 -0
  816. package/dist/esm/server-custom-node-call.js +278 -0
  817. package/dist/esm/server-custom-node-call.js.map +1 -0
  818. package/dist/esm/server-runtime-code.d.ts +39 -12
  819. package/dist/esm/server-runtime-code.d.ts.map +1 -1
  820. package/dist/esm/server-runtime-code.js +483 -40
  821. package/dist/esm/server-runtime-code.js.map +1 -1
  822. package/dist/esm/session-cookie-resolver.d.ts +3 -1
  823. package/dist/esm/session-cookie-resolver.d.ts.map +1 -1
  824. package/dist/esm/session-revocation-generator.d.ts +39 -0
  825. package/dist/esm/session-revocation-generator.d.ts.map +1 -0
  826. package/dist/esm/session-revocation-generator.js +172 -0
  827. package/dist/esm/session-revocation-generator.js.map +1 -0
  828. package/dist/esm/slack-message-values.d.ts +6 -0
  829. package/dist/esm/slack-message-values.d.ts.map +1 -0
  830. package/dist/esm/slack-message-values.js +68 -0
  831. package/dist/esm/slack-message-values.js.map +1 -0
  832. package/dist/esm/transactional-email-code.d.ts +11 -0
  833. package/dist/esm/transactional-email-code.d.ts.map +1 -1
  834. package/dist/esm/transactional-email-code.js +28 -4
  835. package/dist/esm/transactional-email-code.js.map +1 -1
  836. package/dist/esm/trigger-generator.d.ts +2 -0
  837. package/dist/esm/trigger-generator.d.ts.map +1 -1
  838. package/dist/esm/trigger-generator.js +15 -3
  839. package/dist/esm/trigger-generator.js.map +1 -1
  840. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  841. package/dist/esm/visitor-step-limits.d.ts +66 -0
  842. package/dist/esm/visitor-step-limits.d.ts.map +1 -0
  843. package/dist/esm/visitor-step-limits.js +181 -0
  844. package/dist/esm/visitor-step-limits.js.map +1 -0
  845. package/dist/esm/webhook-generator.d.ts.map +1 -1
  846. package/dist/esm/webhook-generator.js +93 -15
  847. package/dist/esm/webhook-generator.js.map +1 -1
  848. package/dist/esm/webhook-signature-verification.d.ts.map +1 -1
  849. package/dist/esm/webhook-signature-verification.js +13 -3
  850. package/dist/esm/webhook-signature-verification.js.map +1 -1
  851. package/dist/esm/workflow-auth-generator.d.ts +4 -1
  852. package/dist/esm/workflow-auth-generator.d.ts.map +1 -1
  853. package/dist/esm/workflow-auth-generator.js +8 -3
  854. package/dist/esm/workflow-auth-generator.js.map +1 -1
  855. package/dist/esm/workflow-component-plugin.js +12 -4
  856. package/dist/esm/workflow-component-plugin.js.map +1 -1
  857. package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
  858. package/dist/esm/workflow-project-plugin.js +306 -60
  859. package/dist/esm/workflow-project-plugin.js.map +1 -1
  860. package/dist/esm/workflow-scope.d.ts.map +1 -1
  861. package/dist/esm/workflow-scope.js +5 -0
  862. package/dist/esm/workflow-scope.js.map +1 -1
  863. package/package.json +4 -4
  864. package/src/account-delete-route-generator.ts +28 -4
  865. package/src/api-route-generator.ts +712 -134
  866. package/src/auth-generator.ts +1471 -142
  867. package/src/automations/activity-kicks.ts +139 -0
  868. package/src/automations/app-events-source.ts +117 -0
  869. package/src/automations/automations-project-plugin.ts +202 -0
  870. package/src/automations/automations-scope.ts +196 -0
  871. package/src/automations/dispatcher-source.ts +1072 -0
  872. package/src/automations/event-bus-source.ts +428 -0
  873. package/src/automations/handler-module-generator.ts +107 -0
  874. package/src/automations/hydrators-source.ts +647 -0
  875. package/src/booking-calendar-feed-route-generator.ts +8 -0
  876. package/src/configured-nextauth-url.ts +17 -0
  877. package/src/cron-request-verification.ts +55 -5
  878. package/src/data-api-route-generator.ts +780 -43
  879. package/src/ecommerce/parameterized-stock-chain.ts +52 -5
  880. package/src/ecommerce/place-order-guards.ts +785 -0
  881. package/src/ecommerce-customhandler-rewriter.ts +55 -2
  882. package/src/executor-generator.ts +372 -60
  883. package/src/graph-utils.ts +33 -0
  884. package/src/index.ts +70 -0
  885. package/src/invoice/api-routes-code.ts +20 -7
  886. package/src/invoice/index.ts +11 -6
  887. package/src/invoice/invoice-assembly-code.ts +8 -3
  888. package/src/invoice/pdf-generator-code.ts +2 -1
  889. package/src/invoice/pdf-service-client-code.ts +15 -7
  890. package/src/newsletter/admin-route-code.ts +319 -0
  891. package/src/newsletter/helper-code.ts +748 -0
  892. package/src/newsletter/newsletter-scope.ts +116 -0
  893. package/src/newsletter/project-plugin.ts +119 -0
  894. package/src/newsletter/routes-code.ts +186 -0
  895. package/src/nodes/account/account-compare-passwords.ts +17 -6
  896. package/src/nodes/account/account-delete-current.ts +1 -1
  897. package/src/nodes/account/account-get-current.ts +1 -1
  898. package/src/nodes/account/account-hash-password.ts +19 -3
  899. package/src/nodes/account/account-login.ts +24 -7
  900. package/src/nodes/account/account-logout.ts +1 -1
  901. package/src/nodes/account/account-refresh-session.ts +1 -1
  902. package/src/nodes/account/account-request-password-reset.ts +47 -0
  903. package/src/nodes/account/account-reset-password.ts +45 -0
  904. package/src/nodes/account/account-signup.ts +86 -20
  905. package/src/nodes/account/account-social-login.ts +1 -1
  906. package/src/nodes/ai/ai-custom-prompt.ts +25 -6
  907. package/src/nodes/ai/ai-detect-language.ts +25 -6
  908. package/src/nodes/ai/ai-generate-text-embedding.ts +16 -3
  909. package/src/nodes/ai/ai-provider-utils-sources.generated.ts +2 -2
  910. package/src/nodes/ai/ai-provider-utils.ts +135 -10
  911. package/src/nodes/ai/ai-select-database-data.ts +8 -3
  912. package/src/nodes/ai/ai-sentiment-analysis.ts +25 -6
  913. package/src/nodes/ai/ai-summarization.ts +25 -6
  914. package/src/nodes/ai/ai-text-classifier.ts +25 -6
  915. package/src/nodes/ai/ai-text-transform.ts +25 -6
  916. package/src/nodes/analytics/analytics-track-outcome.ts +111 -0
  917. package/src/nodes/cart/cart-price-order.ts +200 -2
  918. package/src/nodes/cost-bearing-node-types.ts +45 -0
  919. package/src/nodes/data/data-select.ts +11 -2
  920. package/src/nodes/email/email-mailersend.ts +16 -8
  921. package/src/nodes/email/email-mailgun.ts +17 -12
  922. package/src/nodes/email/email-postmark.ts +17 -12
  923. package/src/nodes/email/email-resend.ts +17 -12
  924. package/src/nodes/email/email-sendgrid.ts +17 -12
  925. package/src/nodes/email/html-escape-code.ts +21 -0
  926. package/src/nodes/email/message-trust.ts +198 -0
  927. package/src/nodes/email/outbound-message-guard.ts +572 -0
  928. package/src/nodes/email/trusted-html-code.ts +49 -0
  929. package/src/nodes/general/general-custom-js.ts +46 -7
  930. package/src/nodes/general/general-http-request.ts +449 -46
  931. package/src/nodes/general/general-rate-limiter.ts +54 -81
  932. package/src/nodes/general/general-wait.ts +80 -0
  933. package/src/nodes/general/visitor-request.ts +79 -0
  934. package/src/nodes/index.ts +12 -0
  935. package/src/nodes/integrations/integration-slack.ts +21 -6
  936. package/src/nodes/newsletter/newsletter-confirm.ts +44 -0
  937. package/src/nodes/newsletter/newsletter-subscribe.ts +78 -0
  938. package/src/nodes/newsletter/newsletter-unsubscribe.ts +43 -0
  939. package/src/nodes/realtime/realtime-join-channel.ts +5 -4
  940. package/src/nodes/realtime/realtime-send-channel-event.ts +13 -2
  941. package/src/nodes/realtime/realtime-send-channel-message.ts +13 -2
  942. package/src/nodes/sms/sms-infobip.ts +14 -4
  943. package/src/nodes/sms/sms-smsapi.ts +14 -4
  944. package/src/nodes/sms/sms-textmagic.ts +14 -4
  945. package/src/nodes/sms/sms-twilio.ts +14 -4
  946. package/src/nodes/types.ts +9 -1
  947. package/src/nodes/utility/utility-similarity-scoring.ts +33 -12
  948. package/src/page-access-guard-generator.ts +154 -0
  949. package/src/password-reset-route-generator.ts +531 -0
  950. package/src/payments/payment-core-code.ts +12 -7
  951. package/src/project-code-scanner.ts +98 -0
  952. package/src/public-step-guards.ts +448 -0
  953. package/src/publish-refusals.ts +459 -0
  954. package/src/realtime-generator.ts +457 -234
  955. package/src/runtime-storage-generator.ts +270 -11
  956. package/src/security-runtime/index.ts +53 -0
  957. package/src/security-runtime/security-runtime-code.ts +579 -0
  958. package/src/security-scanner.ts +253 -10
  959. package/src/segment-splitter.ts +10 -2
  960. package/src/segment-trust.ts +205 -2
  961. package/src/self-call-headers.ts +46 -0
  962. package/src/sent-email-log/index.ts +16 -0
  963. package/src/sent-email-log/sent-email-log-code.ts +30 -4
  964. package/src/server-custom-node-call.ts +331 -0
  965. package/src/server-runtime-code.ts +488 -40
  966. package/src/session-revocation-generator.ts +177 -0
  967. package/src/slack-message-values.ts +84 -0
  968. package/src/transactional-email-code.ts +30 -4
  969. package/src/trigger-generator.ts +19 -3
  970. package/src/visitor-step-limits.ts +228 -0
  971. package/src/webhook-generator.ts +94 -14
  972. package/src/webhook-signature-verification.ts +13 -3
  973. package/src/workflow-auth-generator.ts +9 -4
  974. package/src/workflow-component-plugin.ts +14 -4
  975. package/src/workflow-project-plugin.ts +374 -61
  976. package/src/workflow-scope.ts +6 -0
@@ -0,0 +1,975 @@
1
+ import * as nodePath from 'path'
2
+ import { NextWorkflowProjectPlugin } from '../src/workflow-project-plugin'
3
+ import { splitIntoSegments } from '../src/segment-splitter'
4
+ import { buildSegmentTrust } from '../src/segment-trust'
5
+ import { assertServerBoundCallParameters } from '../src/server-custom-node-call'
6
+ import { TableAccess } from '@teleporthq/teleport-shared'
7
+ import { withEnv } from './_helpers/fake-fetch'
8
+
9
+ /**
10
+ * The shared "Record Event" writer (teleport-gui
11
+ * `features/shared/builders/record-event-node.ts`) is a custom node only this
12
+ * deployment's own server code may run (`protection.serverOnly`): a browser
13
+ * POST to its route is refused. A public page flow — the guest checkout —
14
+ * still records its event: the editor marks every call of such a node
15
+ * `executionEnv: 'server'`, so the call runs inside the server segment that
16
+ * writes the order, which calls the writer with the internal-call token. The
17
+ * event type is a literal of that segment's own config and the entity is the
18
+ * row the segment just wrote: nothing a browser sends names either.
19
+ */
20
+
21
+ type Row = Record<string, unknown>
22
+
23
+ interface GeneratedFile {
24
+ name: string
25
+ fileType?: string
26
+ content: unknown
27
+ }
28
+
29
+ interface GeneratedEntry {
30
+ path: string[]
31
+ files: GeneratedFile[]
32
+ }
33
+
34
+ const ref = (nodeId: string, path: string[]) => ({ type: 'workflowContext', nodeId, path })
35
+
36
+ // The editor's writer, step for step (record-event-node.ts), reduced to the
37
+ // columns this proof reads.
38
+ const BUILD_ROW_SCRIPT = [
39
+ 'function customHandler(previousContext, params) {',
40
+ ' var p = params || {};',
41
+ ' var eventType = p.eventType == null ? "" : String(p.eventType);',
42
+ ' var entityId = p.entityId == null ? "" : String(p.entityId);',
43
+ ' var subject = p.dedupeSubject == null ? "" : String(p.dedupeSubject);',
44
+ ' return {',
45
+ ' eventType: eventType,',
46
+ ' orderId: p.orderId == null ? "" : String(p.orderId),',
47
+ ' entityType: p.entityType == null ? "" : String(p.entityType),',
48
+ ' entityId: entityId,',
49
+ ' dedupeKey: eventType + ":" + (subject || entityId),',
50
+ ' actor: p.actor == null ? "" : String(p.actor),',
51
+ ' actorType: p.actorType ? String(p.actorType) : "system"',
52
+ ' };',
53
+ '}',
54
+ ].join('\n')
55
+
56
+ const IS_NEW_SCRIPT = [
57
+ 'function customHandler(previousContext, params) {',
58
+ ' var selectResult = (params && params[1]) || {};',
59
+ ' var rows = selectResult && selectResult.rows',
60
+ ' ? selectResult.rows',
61
+ ' : (Array.isArray(selectResult) ? selectResult : []);',
62
+ ' return { isNew: rows.length === 0 };',
63
+ '}',
64
+ ].join('\n')
65
+
66
+ const WRITER_ID = 'cn-writer'
67
+ const WRITER = {
68
+ id: WRITER_ID,
69
+ name: 'Record Order Event',
70
+ parameters: [],
71
+ // What the editor stamps on the writer (custom-node-protection.ts).
72
+ protection: {
73
+ requiresAuth: false,
74
+ allowedRoles: [],
75
+ serverOnly: true,
76
+ derivedFrom: 'server-callers',
77
+ },
78
+ nodes: [
79
+ {
80
+ id: 'w-build',
81
+ type: 'general-custom-js',
82
+ label: 'Build Order Event Row',
83
+ config: { code: BUILD_ROW_SCRIPT, context: 'server' },
84
+ executionEnv: 'server',
85
+ stepNumber: 1,
86
+ },
87
+ {
88
+ id: 'w-find',
89
+ type: 'data-select',
90
+ label: 'Find Existing Order Event',
91
+ config: {
92
+ dataSourceId: 'ds-1',
93
+ tableName: 'teleport_events',
94
+ filters: [{ field: 'dedupe_key', operator: '=', value: ref('w-build', ['dedupeKey']) }],
95
+ limit: 1,
96
+ continueOnError: true,
97
+ },
98
+ executionEnv: 'server',
99
+ stepNumber: 2,
100
+ },
101
+ {
102
+ id: 'w-is-new',
103
+ type: 'general-custom-js',
104
+ label: 'Check Order Event Is New',
105
+ config: { code: IS_NEW_SCRIPT, context: 'server' },
106
+ executionEnv: 'server',
107
+ stepNumber: 3,
108
+ },
109
+ {
110
+ id: 'w-gate',
111
+ type: 'general-if-statement',
112
+ label: 'Is Order Event New?',
113
+ config: {
114
+ conditionType: 'simple-comparison',
115
+ leftValue: ref('w-is-new', ['isNew']),
116
+ operator: '=',
117
+ rightValue: true,
118
+ },
119
+ executionEnv: 'universal',
120
+ stepNumber: 4,
121
+ },
122
+ {
123
+ id: 'w-insert',
124
+ type: 'data-create-item',
125
+ label: 'Insert Order Event',
126
+ config: {
127
+ dataSourceId: 'ds-1',
128
+ tableName: 'teleport_events',
129
+ columnMappings: [
130
+ { column: 'event_type', value: ref('w-build', ['eventType']) },
131
+ { column: 'dedupe_key', value: ref('w-build', ['dedupeKey']) },
132
+ { column: 'order_id', value: ref('w-build', ['orderId']) },
133
+ { column: 'entity_type', value: ref('w-build', ['entityType']) },
134
+ { column: 'entity_id', value: ref('w-build', ['entityId']) },
135
+ { column: 'actor', value: ref('w-build', ['actor']) },
136
+ { column: 'actor_type', value: ref('w-build', ['actorType']) },
137
+ { column: 'status', value: 'recorded' },
138
+ ],
139
+ continueOnError: true,
140
+ },
141
+ executionEnv: 'server',
142
+ stepNumber: 5,
143
+ },
144
+ ],
145
+ edges: [
146
+ { id: 'we1', source: 'w-build', target: 'w-find' },
147
+ { id: 'we2', source: 'w-find', target: 'w-is-new' },
148
+ { id: 'we3', source: 'w-is-new', target: 'w-gate' },
149
+ { id: 'we4', source: 'w-gate', target: 'w-insert', sourceHandle: 'true' },
150
+ ],
151
+ }
152
+
153
+ // The tail of the guest checkout (checkout-workflow-builder.ts): the order row
154
+ // is written, then "Record Order Placed" calls the writer, then the page
155
+ // carries on in the browser.
156
+ const recordPlaced = (executionEnv: string) => ({
157
+ id: 'record-placed',
158
+ type: 'general-custom-node',
159
+ label: 'Record Order Placed',
160
+ config: {
161
+ customNodeId: WRITER_ID,
162
+ parameters: [
163
+ { key: 'eventType', value: 'order-placed' },
164
+ { key: 'entityType', value: 'order' },
165
+ { key: 'entityId', value: ref('create-order', ['id']) },
166
+ { key: 'orderId', value: ref('create-order', ['id']) },
167
+ { key: 'dedupeSubject', value: ref('create-order', ['id']) },
168
+ { key: 'actorType', value: 'customer' },
169
+ { key: 'actor', value: ref('create-order', ['billing_email']) },
170
+ ],
171
+ },
172
+ executionEnv,
173
+ stepNumber: 3,
174
+ })
175
+
176
+ const checkout = (executionEnv: string) => ({
177
+ id: 'wf-checkout',
178
+ name: 'Place Order',
179
+ trigger: { type: 'event-page-loaded', nodeId: 't', scope: 'page', config: { allPages: true } },
180
+ nodes: [
181
+ {
182
+ id: 'mark',
183
+ type: 'state-update-local-state',
184
+ label: 'Mark Placing',
185
+ config: {},
186
+ executionEnv: 'client',
187
+ stepNumber: 1,
188
+ },
189
+ {
190
+ id: 'create-order',
191
+ type: 'data-create-item',
192
+ label: 'Create Order',
193
+ config: {
194
+ dataSourceId: 'ds-1',
195
+ tableName: 'teleport_orders',
196
+ columnMappings: [
197
+ { column: 'billing_email', value: 'ava@example.com' },
198
+ { column: 'total_amount', value: 53.2 },
199
+ ],
200
+ },
201
+ executionEnv: 'server',
202
+ stepNumber: 2,
203
+ },
204
+ recordPlaced(executionEnv),
205
+ {
206
+ id: 'done',
207
+ type: 'state-update-local-state',
208
+ label: 'Mark Placed',
209
+ config: {},
210
+ executionEnv: 'client',
211
+ stepNumber: 4,
212
+ },
213
+ ],
214
+ edges: [
215
+ { id: 'e1', source: 't', target: 'mark' },
216
+ { id: 'e2', source: 'mark', target: 'create-order' },
217
+ { id: 'e3', source: 'create-order', target: 'record-placed' },
218
+ { id: 'e4', source: 'record-placed', target: 'done' },
219
+ ],
220
+ })
221
+
222
+ const generate = (executionEnv = 'server'): Promise<Map<string, string>> =>
223
+ generateProject({ 'wf-checkout': checkout(executionEnv) }, { [WRITER_ID]: WRITER })
224
+
225
+ const generateProject = async (
226
+ workflows: Record<string, unknown>,
227
+ customNodes: Record<string, unknown>
228
+ ): Promise<Map<string, string>> => {
229
+ const structure = {
230
+ uidl: {
231
+ name: 'Store',
232
+ globals: { settings: { title: 'Store', language: 'en' }, env: { NEXTAUTH_SECRET: 'k' } },
233
+ root: {
234
+ name: 'Root',
235
+ stateDefinitions: {
236
+ route: { type: 'string', defaultValue: 'Home', values: [{ value: 'Home' }] },
237
+ },
238
+ node: { type: 'element', content: { elementType: 'container', children: [] } },
239
+ },
240
+ components: {},
241
+ dataSources: { 'ds-1': { id: 'ds-1', type: 'teleport', name: 'Store', config: {} } },
242
+ workflows: {
243
+ workflows: JSON.parse(JSON.stringify(workflows)),
244
+ customNodes: JSON.parse(JSON.stringify(customNodes)),
245
+ },
246
+ },
247
+ strategy: { pages: { options: {} } },
248
+ files: new Map<string, GeneratedEntry>(),
249
+ dependencies: {} as Record<string, string>,
250
+ devDependencies: {},
251
+ }
252
+ await new NextWorkflowProjectPlugin().runAfter(structure as never)
253
+ const files = new Map<string, string>()
254
+ for (const entry of structure.files.values()) {
255
+ for (const file of entry.files) {
256
+ files.set(
257
+ [...entry.path, `${file.name}.${file.fileType || 'js'}`].join('/'),
258
+ String(file.content)
259
+ )
260
+ }
261
+ }
262
+ return files
263
+ }
264
+
265
+ const routeFiles = (files: Map<string, string>) =>
266
+ Array.from(files.keys()).filter((path) => path.startsWith('pages/api/workflows/'))
267
+
268
+ const writerRoute = (files: Map<string, string>): string => {
269
+ const found = routeFiles(files).filter((path) => path.includes('record-order-event'))
270
+ expect(found).toHaveLength(1)
271
+ return found[0]
272
+ }
273
+
274
+ const checkoutRoute = (files: Map<string, string>): string => {
275
+ const found = routeFiles(files).filter((path) => path.includes('place-order'))
276
+ expect(found).toHaveLength(1)
277
+ return found[0]
278
+ }
279
+
280
+ const resolveRelative = (fromDir: string, id: string): string => {
281
+ const joined = nodePath.posix.normalize(nodePath.posix.join(fromDir, id))
282
+ return joined.endsWith('.js') ? joined : `${joined}.js`
283
+ }
284
+
285
+ /** A CommonJS loader over the generated files. */
286
+ const createApp = (files: Map<string, string>) => {
287
+ const cache = new Map<string, { exports: unknown }>()
288
+ const load = (path: string): unknown => {
289
+ const cached = cache.get(path)
290
+ if (cached) {
291
+ return cached.exports
292
+ }
293
+ const source = files.get(path)
294
+ if (source === undefined) {
295
+ throw new Error(`Cannot find module '${path}'`)
296
+ }
297
+ const module = { exports: {} as unknown }
298
+ cache.set(path, module)
299
+ const dir = nodePath.posix.dirname(path)
300
+ const localRequire = (id: string): unknown => {
301
+ if (id.startsWith('.')) {
302
+ return load(resolveRelative(dir, id))
303
+ }
304
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
305
+ return require(id)
306
+ }
307
+ // eslint-disable-next-line no-new-func
308
+ new Function('module', 'exports', 'require', source)(module, module.exports, localRequire)
309
+ return module.exports
310
+ }
311
+ return load
312
+ }
313
+
314
+ type Handler = (req: unknown, res: unknown) => Promise<void>
315
+
316
+ interface Reply {
317
+ status: number
318
+ body: any
319
+ }
320
+
321
+ const call = async (handler: Handler, headers: Record<string, string>, body: unknown) => {
322
+ const reply: Reply = { status: 0, body: null }
323
+ const res = {
324
+ setHeader: () => undefined,
325
+ status(code: number) {
326
+ reply.status = code
327
+ return {
328
+ json(payload: unknown) {
329
+ reply.body = payload
330
+ },
331
+ }
332
+ },
333
+ }
334
+ const req = {
335
+ method: 'POST',
336
+ url: '/api/workflows/x',
337
+ headers: { host: 'shop.test', 'x-forwarded-proto': 'https', ...headers },
338
+ body,
339
+ }
340
+ await handler(req, res)
341
+ return reply
342
+ }
343
+
344
+ interface Sent {
345
+ url: string
346
+ headers: Record<string, string>
347
+ json: any
348
+ }
349
+
350
+ /**
351
+ * Runs `run` with every fetch answered as the deployment would: the data API
352
+ * (rows written are kept), and this app's own workflow routes, run in process
353
+ * with the headers the caller sent.
354
+ */
355
+ const asTheDeployment = async <T>(
356
+ files: Map<string, string>,
357
+ run: (app: (path: string) => unknown, sent: Sent[]) => Promise<T>
358
+ ): Promise<T> => {
359
+ const app = createApp(files)
360
+ const sent: Sent[] = []
361
+ const scope = globalThis as Record<string, unknown>
362
+ const previous = scope.fetch
363
+ scope.fetch = async (
364
+ url: string,
365
+ init: { headers?: Record<string, string>; body?: string } = {}
366
+ ) => {
367
+ const headers: Record<string, string> = {}
368
+ Object.keys(init.headers || {}).forEach((name) => {
369
+ headers[name.toLowerCase()] = (init.headers || {})[name]
370
+ })
371
+ const json = init.body ? JSON.parse(init.body) : null
372
+ sent.push({ url, headers, json })
373
+ const answer = (status: number, body: unknown) => ({
374
+ ok: status >= 200 && status < 300,
375
+ status,
376
+ statusText: String(status),
377
+ headers: new Map([['content-type', 'application/json']]),
378
+ json: async () => body,
379
+ text: async () => JSON.stringify(body),
380
+ })
381
+ const pathname = new URL(url).pathname
382
+ if (pathname === '/api/data/ds-1/create') {
383
+ return json.tableName === 'teleport_orders'
384
+ ? answer(200, { item: { id: 'ord-1', billing_email: 'ava@example.com' } })
385
+ : answer(200, { item: { id: 'evt-1' } })
386
+ }
387
+ if (pathname === '/api/data/ds-1/select') {
388
+ return answer(200, { rows: [] })
389
+ }
390
+ if (pathname.startsWith('/api/workflows/')) {
391
+ const handler = app(`pages${pathname}.js`) as Handler
392
+ const reply = await call(handler, headers, json)
393
+ return answer(reply.status, reply.body)
394
+ }
395
+ return answer(200, {})
396
+ }
397
+ try {
398
+ return await run(app, sent)
399
+ } finally {
400
+ scope.fetch = previous
401
+ }
402
+ }
403
+
404
+ /** Runs `run` with the generated code's logging muted. */
405
+ const silenced = async <T>(run: () => Promise<T>): Promise<T> => {
406
+ const sink = console as unknown as Record<string, unknown>
407
+ const levels = ['warn', 'error', 'log']
408
+ const saved = levels.map((level) => sink[level])
409
+ levels.forEach((level) => {
410
+ sink[level] = () => undefined
411
+ })
412
+ try {
413
+ return await run()
414
+ } finally {
415
+ levels.forEach((level, index) => {
416
+ sink[level] = saved[index]
417
+ })
418
+ }
419
+ }
420
+
421
+ const ENV = {
422
+ NEXTAUTH_SECRET: 'app-secret',
423
+ NEXTAUTH_URL: 'https://shop.test',
424
+ VERCEL: undefined,
425
+ VERCEL_AUTOMATION_BYPASS_SECRET: undefined,
426
+ }
427
+
428
+ afterEach(() => {
429
+ delete (globalThis as Row).__tqConfiguredNextAuthUrl
430
+ })
431
+
432
+ describe('the Record Event writer runs only from the server', () => {
433
+ it('puts a call the editor marked for the server into the server segment that wrote the record', () => {
434
+ const onServer = splitIntoSegments(checkout('server') as never)
435
+ expect(onServer.map((segment) => [segment.env, segment.nodeIds])).toEqual([
436
+ ['client', ['mark']],
437
+ ['server', ['create-order', 'record-placed']],
438
+ ['client', ['done']],
439
+ ])
440
+
441
+ // An ordinary custom-node call still runs in the browser.
442
+ const inBrowser = splitIntoSegments(checkout('universal') as never)
443
+ expect(inBrowser.map((segment) => [segment.env, segment.nodeIds])).toEqual([
444
+ ['client', ['mark']],
445
+ ['server', ['create-order']],
446
+ ['client', ['record-placed', 'done']],
447
+ ])
448
+ })
449
+
450
+ it('refuses a browser POST to the writer route, before anything runs', async () => {
451
+ const files = await generate()
452
+ expect(files.get(writerRoute(files))).toContain('"serverOnly":true')
453
+
454
+ const reply = await withEnv(ENV, () =>
455
+ asTheDeployment(files, async (app, sent) => {
456
+ const handler = app(writerRoute(files)) as Handler
457
+ const answered = await silenced(() =>
458
+ call(
459
+ handler,
460
+ {},
461
+ {
462
+ context: {
463
+ __isInsideCustomNode: true,
464
+ __customNodeIds: WRITER.nodes.map((node) => node.id),
465
+ __customParams: [
466
+ { key: 'eventType', value: 'order-shipment-delivered' },
467
+ { key: 'entityId', value: 'ord-1' },
468
+ { key: 'dedupeSubject', value: 'forged' },
469
+ ],
470
+ },
471
+ }
472
+ )
473
+ )
474
+ return { answered, sent }
475
+ })
476
+ )
477
+ expect(reply.answered).toEqual({ status: 401, body: { error: 'Unauthenticated' } })
478
+ expect(reply.sent).toEqual([])
479
+ })
480
+
481
+ it('records the guest checkout order-placed from the segment that wrote the order', async () => {
482
+ const files = await generate()
483
+ const route = files.get(checkoutRoute(files)) as string
484
+ // The call's event type lives in the route, never in the browser bundle.
485
+ expect(route).toContain('"order-placed"')
486
+ expect(files.get('utils/workflows/custom-nodes.js')).not.toContain('order-placed')
487
+
488
+ const outcome = await withEnv({ ...ENV, VERCEL_AUTOMATION_BYPASS_SECRET: 'bypass-1' }, () =>
489
+ asTheDeployment(files, async (app, sent) => {
490
+ const handler = app(checkoutRoute(files)) as Handler
491
+ const answered = await silenced(() => call(handler, {}, { context: { t: {}, mark: null } }))
492
+ return { answered, sent }
493
+ })
494
+ )
495
+
496
+ expect(outcome.answered.status).toBe(200)
497
+ expect(outcome.answered.body.success).toBe(true)
498
+
499
+ // The writer was called by this deployment's own server code.
500
+ const writerCalls = outcome.sent.filter((sent) => sent.url.includes('record-order-event'))
501
+ expect(writerCalls).toHaveLength(1)
502
+ expect(writerCalls[0].url.startsWith('https://shop.test/api/workflows/')).toBe(true)
503
+ expect(typeof writerCalls[0].headers['x-teleport-internal']).toBe('string')
504
+ expect(writerCalls[0].headers['x-teleport-internal'].length).toBeGreaterThan(0)
505
+ // A password-walled deployment lets its own calls through.
506
+ expect(writerCalls[0].headers['x-vercel-protection-bypass']).toBe('bypass-1')
507
+
508
+ // The event row: the segment's own literal type, the order it just wrote.
509
+ const eventInserts = outcome.sent.filter(
510
+ (sent) =>
511
+ sent.url.endsWith('/api/data/ds-1/create') && sent.json.tableName === 'teleport_events'
512
+ )
513
+ expect(eventInserts).toHaveLength(1)
514
+ const columns = Object.fromEntries(
515
+ eventInserts[0].json.columnMappings.map((m: Row) => [m.column, m.value])
516
+ )
517
+ expect(columns).toMatchObject({
518
+ event_type: 'order-placed',
519
+ entity_type: 'order',
520
+ entity_id: 'ord-1',
521
+ order_id: 'ord-1',
522
+ dedupe_key: 'order-placed:ord-1',
523
+ actor: 'ava@example.com',
524
+ actor_type: 'customer',
525
+ status: 'recorded',
526
+ })
527
+ // The browser gets the writer's answer like any other result of the segment.
528
+ expect(outcome.answered.body.results).toHaveProperty('record-placed')
529
+ })
530
+ })
531
+
532
+ describe('only the calls the editor marked run with the internal-call token', () => {
533
+ // The review's probe: a public page loops over a database read and calls an
534
+ // admin-only custom node. The read pulls the loop onto the server, and the
535
+ // call with it — unmarked, it must stay the inert marker it always was.
536
+ const GATED_ID = 'cn-gated'
537
+ const GATED = {
538
+ id: GATED_ID,
539
+ name: 'Members Only Action',
540
+ parameters: [],
541
+ protection: { requiresAuth: true, allowedRoles: ['admin'], derivedFrom: 'page' },
542
+ nodes: [
543
+ {
544
+ id: 'g-write',
545
+ type: 'data-create-item',
546
+ label: 'Admin Write',
547
+ config: {
548
+ dataSourceId: 'ds-1',
549
+ tableName: 'admin_things',
550
+ columnMappings: [{ column: 'x', value: 'y' }],
551
+ },
552
+ executionEnv: 'server',
553
+ stepNumber: 1,
554
+ },
555
+ ],
556
+ edges: [],
557
+ }
558
+ const publicLoop = (callEnv: string) => ({
559
+ id: 'wf-public',
560
+ name: 'Public Loop',
561
+ trigger: { type: 'event-page-loaded', nodeId: 't', scope: 'page', config: { allPages: true } },
562
+ nodes: [
563
+ {
564
+ id: 'loop',
565
+ type: 'general-loop',
566
+ label: 'Loop',
567
+ config: { collection: [1, 2], loopType: 'forEach' },
568
+ executionEnv: 'universal',
569
+ stepNumber: 1,
570
+ },
571
+ {
572
+ id: 'read',
573
+ type: 'data-select',
574
+ label: 'Read',
575
+ config: { dataSourceId: 'ds-1', tableName: 'products', limit: 1 },
576
+ executionEnv: 'server',
577
+ stepNumber: 2,
578
+ },
579
+ {
580
+ id: 'call',
581
+ type: 'general-custom-node',
582
+ label: 'Call Gated',
583
+ config: { customNodeId: GATED_ID, parameters: [] },
584
+ executionEnv: callEnv,
585
+ stepNumber: 3,
586
+ },
587
+ ],
588
+ edges: [
589
+ { id: 'e0', source: 't', target: 'loop' },
590
+ {
591
+ id: 'e1',
592
+ source: 'loop',
593
+ target: 'read',
594
+ sourceHandle: 'loop',
595
+ targetHandle: 'loop-body-in',
596
+ },
597
+ {
598
+ id: 'e2',
599
+ source: 'read',
600
+ target: 'call',
601
+ sourceHandle: 'loop-body-out',
602
+ targetHandle: 'loop-body-in',
603
+ },
604
+ {
605
+ id: 'e3',
606
+ source: 'call',
607
+ target: 'loop',
608
+ sourceHandle: 'loop-body-out',
609
+ targetHandle: 'loop-back',
610
+ },
611
+ ],
612
+ })
613
+
614
+ it('refuses an anonymous visitor an admin-only custom node pulled onto the server by a loop', async () => {
615
+ const files = await generateProject(
616
+ { 'wf-public': publicLoop('universal') },
617
+ { [GATED_ID]: GATED }
618
+ )
619
+ const pageRoute = routeFiles(files).find((path) => path.includes('public-loop')) as string
620
+ expect(splitIntoSegments(publicLoop('universal') as never).map((s) => s.env)).toEqual([
621
+ 'server',
622
+ ])
623
+ // No call is marked, so the route is what it was before the writer moved to the server.
624
+ expect(files.get(pageRoute)).not.toContain('__SERVER_RUN_CALLS')
625
+
626
+ const outcome = await withEnv(ENV, () =>
627
+ asTheDeployment(files, async (app, sent) => {
628
+ const answered = await silenced(() =>
629
+ call(app(pageRoute) as Handler, {}, { context: { t: {} } })
630
+ )
631
+ return { answered, sent }
632
+ })
633
+ )
634
+ expect(outcome.answered.status).toBe(200)
635
+ expect(outcome.sent.filter((sent) => sent.url.includes('members-only'))).toEqual([])
636
+ expect(
637
+ outcome.sent.filter((sent) => sent.json && sent.json.tableName === 'admin_things')
638
+ ).toEqual([])
639
+ // The call's result is the marker, as in a browser.
640
+ expect(outcome.answered.body.results.call).toMatchObject({
641
+ __customNode: true,
642
+ customNodeId: GATED_ID,
643
+ })
644
+ })
645
+
646
+ it('runs a marked call only for the node and custom node it was baked with', async () => {
647
+ const files = await generate()
648
+ const route = files.get(checkoutRoute(files)) as string
649
+ expect(route).toContain(`var __SERVER_RUN_CALLS = {"record-placed":"${WRITER_ID}"};`)
650
+ })
651
+ })
652
+
653
+ describe('a marked call records only what the server did', () => {
654
+ const withParameter = (key: string, value: unknown) => {
655
+ const workflow = checkout('server')
656
+ const record = workflow.nodes.find((node) => node.id === 'record-placed') as {
657
+ config: { parameters: Array<{ key: string; value: unknown }> }
658
+ }
659
+ record.config.parameters = record.config.parameters.map((parameter) =>
660
+ parameter.key === key ? { key, value } : parameter
661
+ )
662
+ return { 'wf-checkout': workflow }
663
+ }
664
+
665
+ it('refuses the export when a parameter is a browser step’s result, naming the step', async () => {
666
+ await expect(
667
+ generateProject(withParameter('entityId', ref('mark', ['id'])), { [WRITER_ID]: WRITER })
668
+ ).rejects.toThrow(
669
+ /The step "Record Order Placed" \(record-placed\) in "Place Order" records an event with the result of "Mark Placing" \(mark\), which runs in the visitor's browser/
670
+ )
671
+ })
672
+
673
+ it('refuses the trigger, the page state and a chip of a browser step', async () => {
674
+ for (const value of [
675
+ ref('t', ['formData', 'email']),
676
+ '{{state.orderId}}',
677
+ `<span class="context-value-inline" data-ctx-node-id="mark" data-ctx-path='["mark","id"]'>Id</span>`,
678
+ // Read the way the runtime reads a chip: no node id, or an empty one,
679
+ // and the node is the first segment of the path.
680
+ `<span class="context-value-inline" data-ctx-path='["mark","id"]'>Id</span>`,
681
+ `<span class="context-value-inline" data-ctx-node-id="" data-ctx-path="[&quot;mark&quot;,&quot;id&quot;]">Id</span>`,
682
+ ]) {
683
+ await expect(
684
+ generateProject(withParameter('actor', value), { [WRITER_ID]: WRITER })
685
+ ).rejects.toThrow(/An event can only be recorded from what the site's server did/)
686
+ }
687
+ })
688
+
689
+ it('takes literals, this segment’s results and an earlier server segment’s signed results', async () => {
690
+ const workflow = checkout('server')
691
+ // The order is read on the server before the browser step, then recorded.
692
+ workflow.nodes.splice(0, 0, {
693
+ id: 'read-settings',
694
+ type: 'data-select',
695
+ label: 'Read Settings',
696
+ config: { dataSourceId: 'ds-1', tableName: 'settings', limit: 1 },
697
+ executionEnv: 'server',
698
+ stepNumber: 0,
699
+ } as never)
700
+ workflow.edges = [
701
+ { id: 'e0', source: 't', target: 'read-settings' },
702
+ { id: 'e0b', source: 'read-settings', target: 'mark' },
703
+ ...workflow.edges.filter((edge) => edge.source !== 't'),
704
+ ]
705
+ const record = workflow.nodes.find((node) => node.id === 'record-placed') as {
706
+ config: { parameters: Array<{ key: string; value: unknown }> }
707
+ }
708
+ record.config.parameters.push({
709
+ key: 'currency',
710
+ value: ref('read-settings', ['rows', '0', 'currency']),
711
+ })
712
+ await expect(
713
+ generateProject({ 'wf-checkout': workflow }, { [WRITER_ID]: WRITER })
714
+ ).resolves.toBeDefined()
715
+ })
716
+
717
+ it('leaves a custom node only server code calls alone: its browser steps run on the server', async () => {
718
+ const SETTLE_ID = 'cn-settle'
719
+ const settle = {
720
+ id: SETTLE_ID,
721
+ name: 'Settle Cash Order',
722
+ parameters: [],
723
+ protection: {
724
+ requiresAuth: false,
725
+ allowedRoles: [],
726
+ serverOnly: true,
727
+ derivedFrom: 'server-callers',
728
+ },
729
+ nodes: [
730
+ {
731
+ id: 's-params',
732
+ type: 'general-custom-js',
733
+ label: 'Extract Parameters',
734
+ config: {
735
+ code: 'function customHandler(previousContext, params) { return params || {} }',
736
+ context: 'client',
737
+ },
738
+ executionEnv: 'client',
739
+ stepNumber: 1,
740
+ },
741
+ {
742
+ id: 's-write',
743
+ type: 'data-update-item',
744
+ label: 'Settle',
745
+ config: {
746
+ dataSourceId: 'ds-1',
747
+ tableName: 'teleport_orders',
748
+ filters: [],
749
+ columnMappings: [],
750
+ },
751
+ executionEnv: 'server',
752
+ stepNumber: 2,
753
+ },
754
+ {
755
+ ...recordPlaced('server'),
756
+ id: 's-record',
757
+ config: {
758
+ customNodeId: WRITER_ID,
759
+ parameters: [
760
+ { key: 'eventType', value: 'order-paid' },
761
+ { key: 'entityId', value: ref('s-params', ['orderId']) },
762
+ ],
763
+ },
764
+ stepNumber: 3,
765
+ },
766
+ ],
767
+ edges: [
768
+ { id: 's1', source: 's-params', target: 's-write' },
769
+ { id: 's2', source: 's-write', target: 's-record' },
770
+ ],
771
+ }
772
+ await expect(
773
+ generateProject({}, { [WRITER_ID]: WRITER, [SETTLE_ID]: settle })
774
+ ).resolves.toBeDefined()
775
+ // The same node called from a page any signed-in customer opens is checked…
776
+ await expect(
777
+ generateProject(
778
+ {},
779
+ {
780
+ [WRITER_ID]: WRITER,
781
+ [SETTLE_ID]: {
782
+ ...settle,
783
+ protection: { requiresAuth: true, allowedRoles: [], derivedFrom: 'page' },
784
+ },
785
+ }
786
+ )
787
+ ).rejects.toThrow(/"Extract Parameters" \(s-params\), which runs in the visitor's browser/)
788
+ // …and one only the business's admins run is not: they can do what the event says anyway.
789
+ await expect(
790
+ generateProject(
791
+ {},
792
+ {
793
+ [WRITER_ID]: WRITER,
794
+ [SETTLE_ID]: {
795
+ ...settle,
796
+ protection: { requiresAuth: true, allowedRoles: ['admin'], derivedFrom: 'page' },
797
+ },
798
+ }
799
+ )
800
+ ).resolves.toBeDefined()
801
+ })
802
+ })
803
+
804
+ describe('only the business’s staff roles skip the check', () => {
805
+ // A route only signed-in visitors reach, with a browser value in the call.
806
+ const gated = (allowedRoles: string[]) => {
807
+ const workflow = checkout('server') as Record<string, unknown> & {
808
+ nodes: Array<{ id: string; config: { parameters?: Array<{ key: string; value: unknown }> } }>
809
+ }
810
+ workflow.protection = { requiresAuth: true, allowedRoles, derivedFrom: 'page' }
811
+ const record = workflow.nodes.find((node) => node.id === 'record-placed')!
812
+ record.config.parameters = record.config.parameters!.map((parameter) =>
813
+ parameter.key === 'actor' ? { key: 'actor', value: ref('mark', ['email']) } : parameter
814
+ )
815
+ return workflow
816
+ }
817
+ const check = (allowedRoles: string[], staffRoles: string[]) => {
818
+ const workflow = gated(allowedRoles)
819
+ const segments = splitIntoSegments(workflow as never)
820
+ const segment = segments.find((candidate) => candidate.nodeIds.includes('record-placed'))!
821
+ assertServerBoundCallParameters(
822
+ segment,
823
+ buildSegmentTrust(segment, {
824
+ nodes: workflow.nodes as never,
825
+ edges: (workflow as unknown as { edges: never }).edges,
826
+ segments,
827
+ }),
828
+ {
829
+ owner: 'Place Order',
830
+ graphNodes: workflow.nodes as never,
831
+ protection: workflow.protection as never,
832
+ staffRoles,
833
+ }
834
+ )
835
+ }
836
+
837
+ it('refuses a route a visitor with a role of their own can reach', async () => {
838
+ await expect(
839
+ generateProject({ 'wf-checkout': gated(['user']) }, { [WRITER_ID]: WRITER })
840
+ ).rejects.toThrow(/"Mark Placing" \(mark\), which runs in the visitor's browser/)
841
+ const staff = TableAccess.resolveStaffRoles(null)
842
+ expect(() => check(['customer'], staff)).toThrow(/which runs in the visitor's browser/)
843
+ expect(() => check(['admin', 'user'], staff)).toThrow(/which runs in the visitor's browser/)
844
+ })
845
+
846
+ it('leaves the generated admin’s routes alone: the admin role and the admin panel’s own roles', async () => {
847
+ await expect(
848
+ generateProject({ 'wf-checkout': gated(['admin']) }, { [WRITER_ID]: WRITER })
849
+ ).resolves.toBeDefined()
850
+ const withPanelRoles = TableAccess.resolveStaffRoles({
851
+ folderProtection: {
852
+ panel: { folderName: 'admin-panel', allowedRoles: ['manager'] },
853
+ },
854
+ } as never)
855
+ expect(withPanelRoles).toEqual(['admin', 'manager'])
856
+ expect(() => check(['manager'], withPanelRoles)).not.toThrow()
857
+ expect(() => check(['manager'], TableAccess.resolveStaffRoles(null))).toThrow()
858
+ })
859
+ })
860
+
861
+ describe('a call nested inside the marked node keeps its own gates', () => {
862
+ // The re-review's probe: a node that writes the ledger and then calls an
863
+ // admin-only node, called — marked — from a public page.
864
+ const GATED_ID = 'cn-gated'
865
+ const GATED = {
866
+ id: GATED_ID,
867
+ name: 'Members Only Action',
868
+ parameters: [] as unknown[],
869
+ protection: { requiresAuth: true, allowedRoles: ['admin'], derivedFrom: 'page' },
870
+ nodes: [
871
+ {
872
+ id: 'g-write',
873
+ type: 'data-create-item',
874
+ label: 'Admin Write',
875
+ config: {
876
+ dataSourceId: 'ds-1',
877
+ tableName: 'admin_things',
878
+ columnMappings: [{ column: 'x', value: 'y' }],
879
+ },
880
+ executionEnv: 'server',
881
+ stepNumber: 1,
882
+ },
883
+ ],
884
+ edges: [] as unknown[],
885
+ }
886
+ const LOGGER_ID = 'cn-logger'
887
+ const LOGGER = {
888
+ id: LOGGER_ID,
889
+ name: 'My Logger',
890
+ parameters: [] as unknown[],
891
+ protection: {
892
+ requiresAuth: false,
893
+ allowedRoles: [] as string[],
894
+ serverOnly: true,
895
+ derivedFrom: 'server-callers',
896
+ },
897
+ nodes: [
898
+ {
899
+ id: 'l-write',
900
+ type: 'data-create-item',
901
+ label: 'Log It',
902
+ config: {
903
+ dataSourceId: 'ds-1',
904
+ tableName: 'teleport_events',
905
+ columnMappings: [{ column: 'event_type', value: 'x' }],
906
+ },
907
+ executionEnv: 'server',
908
+ stepNumber: 1,
909
+ },
910
+ {
911
+ id: 'l-call',
912
+ type: 'general-custom-node',
913
+ label: 'Then Gated',
914
+ config: { customNodeId: GATED_ID, parameters: [] as unknown[] },
915
+ executionEnv: 'universal',
916
+ stepNumber: 2,
917
+ },
918
+ ],
919
+ edges: [{ id: 'le1', source: 'l-write', target: 'l-call' }],
920
+ }
921
+ const page = {
922
+ id: 'wf-public',
923
+ name: 'Public Page',
924
+ trigger: { type: 'event-page-loaded', nodeId: 't', scope: 'page', config: { allPages: true } },
925
+ nodes: [
926
+ {
927
+ id: 'read',
928
+ type: 'data-select',
929
+ label: 'Read',
930
+ config: { dataSourceId: 'ds-1', tableName: 'products', limit: 1 },
931
+ executionEnv: 'server',
932
+ stepNumber: 1,
933
+ },
934
+ {
935
+ id: 'call',
936
+ type: 'general-custom-node',
937
+ label: 'Record Something',
938
+ config: { customNodeId: LOGGER_ID, parameters: [{ key: 'eventType', value: 'x' }] },
939
+ executionEnv: 'server',
940
+ stepNumber: 2,
941
+ },
942
+ ],
943
+ edges: [
944
+ { id: 'e0', source: 't', target: 'read' },
945
+ { id: 'e1', source: 'read', target: 'call' },
946
+ ],
947
+ }
948
+
949
+ it('runs the nested admin-only node without the internal-call token: an anonymous visitor is refused', async () => {
950
+ const files = await generateProject(
951
+ { 'wf-public': page },
952
+ { [GATED_ID]: GATED, [LOGGER_ID]: LOGGER }
953
+ )
954
+ const pageRoute = routeFiles(files).find((path) => path.includes('public-page')) as string
955
+ const outcome = await withEnv(ENV, () =>
956
+ asTheDeployment(files, async (app, sent) => {
957
+ const answered = await silenced(() =>
958
+ call(app(pageRoute) as Handler, {}, { context: { t: {} } })
959
+ )
960
+ return { answered, sent }
961
+ })
962
+ )
963
+ // The marked node itself ran on the server, with the token…
964
+ const loggerCalls = outcome.sent.filter((sent) => sent.url.includes('my-logger'))
965
+ expect(loggerCalls).toHaveLength(1)
966
+ expect(loggerCalls[0].headers['x-teleport-internal']).toBeTruthy()
967
+ // …the node it calls was asked as the visitor, and refused them.
968
+ const gatedCalls = outcome.sent.filter((sent) => sent.url.includes('members-only'))
969
+ expect(gatedCalls).toHaveLength(1)
970
+ expect(gatedCalls[0].headers).not.toHaveProperty('x-teleport-internal')
971
+ expect(
972
+ outcome.sent.filter((sent) => sent.json && sent.json.tableName === 'admin_things')
973
+ ).toEqual([])
974
+ })
975
+ })