@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,748 @@
1
+ /**
2
+ * `utils/newsletter/newsletter.js`: the one place the generated app changes a
3
+ * person's newsletter state. The public sign-up route, the `newsletter-subscribe`
4
+ * node, the sign-up route's consent box and the confirm / unsubscribe routes all
5
+ * go through it, so the policy is written once:
6
+ *
7
+ * - nobody is subscribed without their own action: a submit (single opt-in),
8
+ * or the emailed confirmation link (double opt-in);
9
+ * - a form never undoes an opt-out: anyone can type anyone's address, so an
10
+ * unsubscribed address is only ever sent a confirmation link;
11
+ * - every sign-up answers the same (`{ ok: true, pending }`, `pending` decided
12
+ * by the settings alone), so the answer never tells whether an address is
13
+ * known;
14
+ * - the links are stateless HMAC tokens keyed by the app secret
15
+ * (`newsletterTokenSpec`), which the services worker reproduces for the
16
+ * unsubscribe links of the newsletters it sends.
17
+ *
18
+ * CommonJS, server-only. The TeleportHQ database (`TELEPORT_DB_*`), through the
19
+ * same Postgres client the account routes open.
20
+ */
21
+ import type { UIDLNewsletterSettings } from '@teleporthq/teleport-types'
22
+ import {
23
+ SUPPORTED_EMAIL_PROVIDERS,
24
+ generateEmailLocaleRequire,
25
+ generateFillTemplateFn,
26
+ generateProviderSendFunction,
27
+ } from '../transactional-email-code'
28
+ import { generateLazyPgClientCode } from '../pg-client-code'
29
+ import { securityRuntimeSpecifier } from '../security-runtime/security-runtime-code'
30
+ import { TRUSTED_ORIGIN_CODE } from '../password-reset-route-generator'
31
+ import { AUTOMATIONS_PATH } from '../automations/automations-scope'
32
+ import {
33
+ DEFAULT_NEWSLETTER_CONFIRM_PATH,
34
+ DEFAULT_NEWSLETTER_UNSUBSCRIBE_PATH,
35
+ NEWSLETTER_ADDRESS_LIMIT,
36
+ NEWSLETTER_MIN_RESPONSE_MS,
37
+ NEWSLETTER_OPTED_OUT_CONFIRMATIONS_PER_DAY,
38
+ NEWSLETTER_SOURCES,
39
+ NEWSLETTER_UNSUBSCRIBE_URL,
40
+ NEWSLETTER_USERS_TABLE,
41
+ PUBLIC_ROUTE_SIGN_UP_POINTS,
42
+ VISITOR_SIGN_UP_POINTS,
43
+ } from './newsletter-scope'
44
+
45
+ /** From `utils/newsletter/` to the project root. */
46
+ const RELATIVE_PREFIX = '../..'
47
+
48
+ /**
49
+ * The confirmation and unsubscribe links' token, exactly, so the services
50
+ * worker (the unsubscribe links in the newsletters it sends, R-N7) mints the
51
+ * same bytes as the site:
52
+ *
53
+ * key = HMAC-SHA256(key: NEXTAUTH_SECRET (UTF-8), message: 'teleport-newsletter:v1') → 32 bytes
54
+ * payload = UTF-8 of `${email}|${purpose}|${issuedAt}`
55
+ * email: trimmed, lower-cased; purpose: 'confirm' | 'unsubscribe';
56
+ * issuedAt: whole seconds since the Unix epoch, in decimal
57
+ * token = base64url(payload) + '.' + base64url(HMAC-SHA256(key, payload))
58
+ * base64url = RFC 4648 §5, no '=' padding
59
+ *
60
+ * Verification: exactly one '.'; both parts base64url; a 32-byte MAC compared
61
+ * in constant time; the payload split at its LAST two '|'; the purpose the
62
+ * caller expects; issuedAt at most `futureSkewSeconds` ahead of now; a
63
+ * `confirm` token at most `confirmMaxAgeSeconds` old; an `unsubscribe` token
64
+ * never expires. No app secret: nothing is signed and nothing verifies. The
65
+ * links carry the token in the `t` query parameter of the site's confirm and
66
+ * unsubscribe pages.
67
+ */
68
+ export const newsletterTokenSpec = {
69
+ keyLabel: 'teleport-newsletter:v1',
70
+ keySecretEnv: 'NEXTAUTH_SECRET',
71
+ separator: '|',
72
+ purposes: ['confirm', 'unsubscribe'] as const,
73
+ confirmMaxAgeSeconds: 7 * 24 * 3600,
74
+ futureSkewSeconds: 300,
75
+ unsubscribeExpires: false,
76
+ maxTokenLength: 1024,
77
+ queryParameter: 't',
78
+ /** One token, for a byte-for-byte check of any other implementation. */
79
+ testVector: {
80
+ secret: 'newsletter-test-vector-secret',
81
+ email: 'reader@example.com',
82
+ purpose: 'unsubscribe' as const,
83
+ issuedAt: 1790000000,
84
+ token:
85
+ 'cmVhZGVyQGV4YW1wbGUuY29tfHVuc3Vic2NyaWJlfDE3OTAwMDAwMDA.9xqxAQkmupu1AK9wbvBzMEbua-rdFAsjJHmRS6xrUwk',
86
+ },
87
+ }
88
+
89
+ /** The person columns every statement answers. */
90
+ const PERSON_COLUMNS =
91
+ 'id, email, source, email_unsubscribed, newsletter_status, newsletter_source, newsletter_unsubscribed_at'
92
+ const USERS = NEWSLETTER_USERS_TABLE
93
+
94
+ /**
95
+ * Every statement the helper runs. Each change of state is guarded in its own
96
+ * WHERE, so two requests at once can never take a row anywhere the policy
97
+ * does not allow (an unsubscribed person subscribed by a form, an event
98
+ * recorded twice). Consent is always written explicitly: a `users` table made
99
+ * before 2026-10-26 still defaults `marketing_consent` to TRUE.
100
+ */
101
+ export const NEWSLETTER_SQL = {
102
+ /** `$1`: the address, lower-cased. The exact spelling first, else any case. */
103
+ findPerson: `SELECT ${PERSON_COLUMNS} FROM ${USERS} WHERE LOWER(email) = $1 ORDER BY CASE WHEN email = $1 THEN 0 ELSE 1 END LIMIT 1`,
104
+ /** `$1` address, `$2` `users.source`, `$3` `newsletter_source`. */
105
+ insertPending: `INSERT INTO ${USERS} (email, source, marketing_consent, newsletter_status, newsletter_source) VALUES ($1, $2, FALSE, 'pending', $3) ON CONFLICT DO NOTHING RETURNING ${PERSON_COLUMNS}`,
106
+ insertSubscribed: `INSERT INTO ${USERS} (email, source, marketing_consent, email_unsubscribed, newsletter_status, newsletter_source, newsletter_subscribed_at) VALUES ($1, $2, TRUE, FALSE, 'subscribed', $3, CURRENT_TIMESTAMP) ON CONFLICT DO NOTHING RETURNING ${PERSON_COLUMNS}`,
107
+ /**
108
+ * `$1` id, `$2` `newsletter_source`: only a person never on the list, or
109
+ * still pending, and not opted out of email (an opt-out is undone only by
110
+ * the person's own confirmation click).
111
+ */
112
+ markPending: `UPDATE ${USERS} SET newsletter_status = 'pending', newsletter_source = $2 WHERE id = $1 AND (newsletter_status IS NULL OR newsletter_status = 'pending') AND email_unsubscribed IS NOT TRUE RETURNING ${PERSON_COLUMNS}`,
113
+ markSubscribed: `UPDATE ${USERS} SET newsletter_status = 'subscribed', newsletter_subscribed_at = CURRENT_TIMESTAMP, newsletter_source = $2, marketing_consent = TRUE, email_unsubscribed = FALSE WHERE id = $1 AND (newsletter_status IS NULL OR newsletter_status = 'pending') AND email_unsubscribed IS NOT TRUE RETURNING ${PERSON_COLUMNS}`,
114
+ /** `$1` id: the confirmation link, the person's own click. */
115
+ confirm: `UPDATE ${USERS} SET newsletter_status = 'subscribed', newsletter_subscribed_at = CURRENT_TIMESTAMP, marketing_consent = TRUE, email_unsubscribed = FALSE WHERE id = $1 AND newsletter_status IS DISTINCT FROM 'subscribed' RETURNING ${PERSON_COLUMNS}`,
116
+ unsubscribe: `UPDATE ${USERS} SET newsletter_status = 'unsubscribed', newsletter_unsubscribed_at = CURRENT_TIMESTAMP, marketing_consent = FALSE, email_unsubscribed = TRUE WHERE id = $1 AND newsletter_status IS DISTINCT FROM 'unsubscribed' RETURNING ${PERSON_COLUMNS}`,
117
+ }
118
+
119
+ /** What the confirmation email says when the project's template has no body. */
120
+ export const DEFAULT_NEWSLETTER_CONFIRMATION_EMAIL = {
121
+ subject: 'Confirm you want our newsletter',
122
+ body:
123
+ '<p>Please confirm that you want to receive the {{site_name}} newsletter at {{email}}.</p>' +
124
+ '<p><a href="{{confirm_url}}">Yes, send me the newsletter</a></p>' +
125
+ '<p>The link works for 7 days. Did not sign up? Ignore this email: you will not be subscribed unless you click the link.</p>',
126
+ }
127
+
128
+ export interface NewsletterHelperOptions {
129
+ settings: UIDLNewsletterSettings
130
+ /** The `{{site_name}}` of the emails; the request's host when empty. */
131
+ siteName?: string
132
+ /** The project has the in-app event bus (`hasAutomationsBus`). */
133
+ withAutomations?: boolean
134
+ /**
135
+ * The sign-up route sends the account's own welcome email: a person who
136
+ * joins through the sign-up form's box is not sent the newsletter's too.
137
+ */
138
+ signupSendsAccountWelcome?: boolean
139
+ }
140
+
141
+ /** A same-site path without a query or fragment, else `fallback`. */
142
+ export const resolveNewsletterPagePath = (value: unknown, fallback: string): string => {
143
+ const path = typeof value === 'string' ? value.trim() : ''
144
+ if (
145
+ !path.startsWith('/') ||
146
+ path.startsWith('//') ||
147
+ /[\\?#\s"'<>]/.test(path) ||
148
+ path.indexOf('..') !== -1
149
+ ) {
150
+ return fallback
151
+ }
152
+ return path.length > 1 ? path.replace(/\/+$/, '') : path
153
+ }
154
+
155
+ const envNameOf = (value: unknown): string =>
156
+ typeof value === 'string' && /^[A-Za-z_][A-Za-z0-9_]*$/.test(value) ? value : ''
157
+
158
+ interface EmailCopy {
159
+ subject: string
160
+ body: string
161
+ localized: Record<string, { subject: string; body: string }>
162
+ }
163
+
164
+ const copyOf = (value: unknown): EmailCopy => {
165
+ const template = (value && typeof value === 'object' ? value : {}) as Record<string, unknown>
166
+ const localized: Record<string, { subject: string; body: string }> = {}
167
+ const copies =
168
+ template.localized && typeof template.localized === 'object'
169
+ ? (template.localized as Record<string, unknown>)
170
+ : {}
171
+ for (const [locale, copy] of Object.entries(copies)) {
172
+ const entry = (copy && typeof copy === 'object' ? copy : {}) as Record<string, unknown>
173
+ if (typeof entry.body === 'string' && entry.body) {
174
+ localized[locale] = {
175
+ subject: typeof entry.subject === 'string' ? entry.subject : '',
176
+ body: entry.body,
177
+ }
178
+ }
179
+ }
180
+ return {
181
+ subject: typeof template.subject === 'string' ? template.subject : '',
182
+ body: typeof template.body === 'string' ? template.body : '',
183
+ localized,
184
+ }
185
+ }
186
+
187
+ /** What a welcome email whose body has no `{{unsubscribe_url}}` gets, before `</body>`. */
188
+ export const NEWSLETTER_UNSUBSCRIBE_FOOTER =
189
+ '<p style="font-size:12px;color:#6b7280;margin-top:24px">You receive this email because you subscribed to the {{site_name}} newsletter. <a href="{{unsubscribe_url}}">Unsubscribe</a></p>'
190
+
191
+ /** A newsletter email body that always carries its unsubscribe link. */
192
+ export const withUnsubscribeLink = (body: string): string => {
193
+ if (!body || body.indexOf('{{unsubscribe_url}}') !== -1) {
194
+ return body
195
+ }
196
+ const close = body.search(/<\/body>/i)
197
+ return close === -1
198
+ ? body + NEWSLETTER_UNSUBSCRIBE_FOOTER
199
+ : body.slice(0, close) + NEWSLETTER_UNSUBSCRIBE_FOOTER + body.slice(close)
200
+ }
201
+
202
+ const MAILGUN_DOMAIN_READ = "var domain = process.env.MAILGUN_DOMAIN || '';"
203
+
204
+ /**
205
+ * Each provider's send call, and the same call with the message's own headers
206
+ * (`msg.headers`, the welcome email's `List-Unsubscribe`). MailerSend sets
207
+ * custom headers only on some plans: its emails carry the footer link alone.
208
+ */
209
+ const PROVIDER_HEADER_CALLS: Record<string, [string, string]> = {
210
+ resend: [
211
+ 'resend.emails.send({ from: sender.header, to: [msg.to], subject: msg.subject, html: msg.html })',
212
+ 'resend.emails.send({ from: sender.header, to: [msg.to], subject: msg.subject, html: msg.html, headers: msg.headers || undefined })',
213
+ ],
214
+ sendgrid: [
215
+ 'sgMail.send({ to: msg.to, from: from, subject: msg.subject, html: msg.html })',
216
+ 'sgMail.send({ to: msg.to, from: from, subject: msg.subject, html: msg.html, headers: msg.headers || undefined })',
217
+ ],
218
+ postmark: [
219
+ 'client.sendEmail({ From: sender.header, To: msg.to, Subject: msg.subject, HtmlBody: msg.html })',
220
+ 'client.sendEmail({ From: sender.header, To: msg.to, Subject: msg.subject, HtmlBody: msg.html, Headers: msg.headers ? Object.keys(msg.headers).map(function (name) { return { Name: name, Value: msg.headers[name] }; }) : undefined })',
221
+ ],
222
+ mailgun: [
223
+ 'mg.messages.create(domain, { from: sender.header, to: [msg.to], subject: msg.subject, html: msg.html })',
224
+ "mg.messages.create(domain, Object.keys(msg.headers || {}).reduce(function (message, name) { message['h:' + name] = msg.headers[name]; return message; }, { from: sender.header, to: [msg.to], subject: msg.subject, html: msg.html }))",
225
+ ],
226
+ }
227
+
228
+ /**
229
+ * The provider send, with the message's headers, and Mailgun's domain read
230
+ * from the env var the settings name. Fails the generation when the shared
231
+ * send no longer reads as expected, so a change there cannot drop them.
232
+ */
233
+ const providerSendCode = (provider: string | null): string => {
234
+ let code = generateProviderSendFunction(provider)
235
+ const call = provider ? PROVIDER_HEADER_CALLS[provider] : undefined
236
+ if (call) {
237
+ if (code.indexOf(call[0]) === -1) {
238
+ throw new Error(`The ${provider} send no longer reads as the newsletter expects`)
239
+ }
240
+ code = code.replace(call[0], call[1])
241
+ }
242
+ if (provider !== 'mailgun') {
243
+ return code
244
+ }
245
+ if (code.indexOf(MAILGUN_DOMAIN_READ) === -1) {
246
+ throw new Error('The Mailgun send no longer reads MAILGUN_DOMAIN as the newsletter expects')
247
+ }
248
+ return code.replace(
249
+ MAILGUN_DOMAIN_READ,
250
+ "var domain = (EMAIL_DOMAIN_ENV_NAME ? process.env[EMAIL_DOMAIN_ENV_NAME] : process.env.MAILGUN_DOMAIN) || '';"
251
+ )
252
+ }
253
+
254
+ const eventRecorderCode = (withAutomations: boolean): string =>
255
+ withAutomations
256
+ ? `// The project has automations: joining and leaving wake them. Best effort:
257
+ // recording can never fail the request. One event per person per minute
258
+ // (the dedupe key's minute), so a later re-subscribe is an event of its own.
259
+ async function recordNewsletterEvent(type, row, req) {
260
+ try {
261
+ var id = row && row.id != null ? String(row.id) : '';
262
+ if (!id) { return; }
263
+ var email = row.email ? String(row.email) : '';
264
+ var bus = require('${RELATIVE_PREFIX}/${AUTOMATIONS_PATH.join('/')}/event-bus');
265
+ await bus.emitBusinessEvent({
266
+ type: type,
267
+ entityType: 'subscriber',
268
+ entityId: id,
269
+ payload: {
270
+ subscriber: {
271
+ email: email,
272
+ source: row.source ? String(row.source) : null,
273
+ consent: type === 'newsletter-subscribed',
274
+ },
275
+ },
276
+ actor: email,
277
+ actorType: 'customer',
278
+ dedupeKey: type + ':' + id + ':' + Math.floor(Date.now() / 60000),
279
+ }, req);
280
+ } catch (eventErr) {
281
+ console.error('[newsletter] could not record the ' + type + ' event:', eventErr && eventErr.message ? eventErr.message : eventErr);
282
+ }
283
+ }`
284
+ : `// The project has no automations: nothing listens for newsletter events.
285
+ async function recordNewsletterEvent() {}`
286
+
287
+ export const generateNewsletterHelperCode = (options: NewsletterHelperOptions): string => {
288
+ const { settings } = options
289
+ const email = settings.email || ({} as UIDLNewsletterSettings['email'])
290
+ const provider =
291
+ email.provider && SUPPORTED_EMAIL_PROVIDERS.has(email.provider) ? email.provider : null
292
+ const confirmation = copyOf(settings.templates && settings.templates.confirmation)
293
+ if (!confirmation.body) {
294
+ confirmation.subject = confirmation.subject || DEFAULT_NEWSLETTER_CONFIRMATION_EMAIL.subject
295
+ confirmation.body = DEFAULT_NEWSLETTER_CONFIRMATION_EMAIL.body
296
+ }
297
+ const welcome = copyOf(settings.templates && settings.templates.welcome)
298
+ // A newsletter email always carries its way out.
299
+ welcome.body = withUnsubscribeLink(welcome.body)
300
+ for (const locale of Object.keys(welcome.localized)) {
301
+ welcome.localized[locale].body = withUnsubscribeLink(welcome.localized[locale].body)
302
+ }
303
+ const sender = settings.sender || { name: '', email: '' }
304
+ const pages = settings.pages || ({} as UIDLNewsletterSettings['pages'])
305
+
306
+ return `'use strict';
307
+ /**
308
+ * The newsletter (generated): how a person joins it and leaves it. Every
309
+ * writer of the newsletter state goes through this module.
310
+ */
311
+ var crypto = require('crypto');
312
+ var __security = require('${securityRuntimeSpecifier(RELATIVE_PREFIX)}');
313
+ ${generateEmailLocaleRequire(RELATIVE_PREFIX)}
314
+ ${
315
+ provider
316
+ ? `var __sentEmailLog = require('${RELATIVE_PREFIX}/utils/email/sent-email-log');`
317
+ : 'var __sentEmailLog = null;'
318
+ }
319
+
320
+ ${generateLazyPgClientCode()}
321
+
322
+ var CONFIRMATION_REQUIRED = ${settings.confirmation === true};
323
+ var WELCOME_ENABLED = ${settings.welcome === true && !!welcome.body};
324
+ var SIGNUP_SENDS_ACCOUNT_WELCOME = ${options.signupSendsAccountWelcome === true};
325
+ var SITE_NAME = ${JSON.stringify(options.siteName || '')};
326
+ var SENDER_NAME = ${JSON.stringify(typeof sender.name === 'string' ? sender.name : '')};
327
+ var SENDER_EMAIL = ${JSON.stringify(typeof sender.email === 'string' ? sender.email : '')};
328
+ var EMAIL_PROVIDER = ${JSON.stringify(provider)};
329
+ var EMAIL_SECRET_ENV_NAME = ${JSON.stringify(envNameOf(email.apiKeyEnv))};
330
+ var EMAIL_DOMAIN_ENV_NAME = ${JSON.stringify(envNameOf(email.domainEnv))};
331
+ var CONFIRMATION_EMAIL = ${JSON.stringify({
332
+ subject: confirmation.subject,
333
+ body: confirmation.body,
334
+ })};
335
+ var CONFIRMATION_EMAIL_LOCALIZED = ${JSON.stringify(confirmation.localized)};
336
+ var WELCOME_EMAIL = ${JSON.stringify({ subject: welcome.subject, body: welcome.body })};
337
+ var WELCOME_EMAIL_LOCALIZED = ${JSON.stringify(welcome.localized)};
338
+ var CONFIRM_PAGE_PATH = ${JSON.stringify(
339
+ resolveNewsletterPagePath(pages.confirm, DEFAULT_NEWSLETTER_CONFIRM_PATH)
340
+ )};
341
+ var UNSUBSCRIBE_PAGE_PATH = ${JSON.stringify(
342
+ resolveNewsletterPagePath(pages.unsubscribe, DEFAULT_NEWSLETTER_UNSUBSCRIBE_PATH)
343
+ )};
344
+ var UNSUBSCRIBE_ROUTE = ${JSON.stringify(NEWSLETTER_UNSUBSCRIBE_URL)};
345
+
346
+ // Every sign-up answers after at least this long, whatever happened.
347
+ var NEWSLETTER_MIN_RESPONSE_MS = ${NEWSLETTER_MIN_RESPONSE_MS};
348
+ // Sign-ups one address may make per hour (counted for every address).
349
+ var ADDRESS_LIMIT = ${NEWSLETTER_ADDRESS_LIMIT};
350
+ var NEWSLETTER_SOURCES = ${JSON.stringify(NEWSLETTER_SOURCES)};
351
+ var VISITOR_SIGN_UP_POINTS = ${JSON.stringify(VISITOR_SIGN_UP_POINTS)};
352
+ // The sign-up points of the site's pages: all the public sign-up route takes.
353
+ var PUBLIC_ROUTE_SIGN_UP_POINTS = ${JSON.stringify(PUBLIC_ROUTE_SIGN_UP_POINTS)};
354
+ // An address that opted out is sent at most this many confirmation links a day.
355
+ var OPTED_OUT_CONFIRMATIONS_PER_DAY = ${NEWSLETTER_OPTED_OUT_CONFIRMATIONS_PER_DAY};
356
+ // Where a row the newsletter adds came from (users.source); 'newsletter' for
357
+ // the newsletter's own sign-up points.
358
+ var ACCOUNT_SOURCE_OF_POINT = { signup: 'signup', checkout: 'checkout', booking: 'booking', form: 'form', import: 'import', manual: 'manual' };
359
+
360
+ var TOKEN_KEY_LABEL = ${JSON.stringify(newsletterTokenSpec.keyLabel)};
361
+ var TOKEN_PURPOSES = ${JSON.stringify(newsletterTokenSpec.purposes)};
362
+ var CONFIRM_TOKEN_MAX_AGE_SECONDS = ${newsletterTokenSpec.confirmMaxAgeSeconds};
363
+ var TOKEN_FUTURE_SKEW_SECONDS = ${newsletterTokenSpec.futureSkewSeconds};
364
+ var TOKEN_MAX_LENGTH = ${newsletterTokenSpec.maxTokenLength};
365
+
366
+ var SQL = ${JSON.stringify(NEWSLETTER_SQL, null, 2)};
367
+
368
+ /** The address as the newsletter keeps it (trimmed, lower-cased), or '' when it is not one. */
369
+ function normalizeEmail(value) {
370
+ var email = typeof value === 'string' ? value.trim().toLowerCase() : '';
371
+ if (email.length < 3 || email.length > 254 || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) { return ''; }
372
+ return email;
373
+ }
374
+
375
+ /** A sign-up point a visitor's request names; 'block' for anything else. */
376
+ function visitorSignUpPoint(value) {
377
+ return VISITOR_SIGN_UP_POINTS.indexOf(value) !== -1 ? value : 'block';
378
+ }
379
+
380
+ /** The sign-up point the public route takes from its body: a page's own, else 'block'. */
381
+ function publicRouteSignUpPoint(value) {
382
+ return PUBLIC_ROUTE_SIGN_UP_POINTS.indexOf(value) !== -1 ? value : 'block';
383
+ }
384
+
385
+ /**
386
+ * What a log line may keep of an error: its code and message, never a
387
+ * database row (pg's \`detail\`) or anything else it carries.
388
+ */
389
+ function safeError(err) {
390
+ return {
391
+ code: err && err.code ? String(err.code) : null,
392
+ message: err && err.message ? String(err.message) : String(err),
393
+ };
394
+ }
395
+
396
+ function signUpPointOf(value) {
397
+ return NEWSLETTER_SOURCES.indexOf(value) !== -1 ? value : 'block';
398
+ }
399
+
400
+ /**
401
+ * What every sign-up answers: the same for a new address, a known one, an
402
+ * unsubscribed one, a limited one and a bot. \`pending\` is the settings' (a
403
+ * confirmation email is on its way when double opt-in is on), never the
404
+ * address's.
405
+ */
406
+ function publicSubscribeAnswer() {
407
+ return { ok: true, pending: CONFIRMATION_REQUIRED };
408
+ }
409
+
410
+ function waitUntilElapsed(startedAt, ms) {
411
+ var left = ms - (Date.now() - startedAt);
412
+ return left > 0 ? new Promise(function (resolve) { setTimeout(resolve, left); }) : Promise.resolve();
413
+ }
414
+
415
+ /** Runs \`fn(db)\` on one connection to the site's database, closed afterwards. */
416
+ async function withNewsletterDb(fn) {
417
+ var client = getClient();
418
+ if (typeof client.on === 'function') { client.on('error', function () {}); }
419
+ await client.connect();
420
+ try {
421
+ return await fn(client);
422
+ } finally {
423
+ try { await client.end(); } catch (_e) {}
424
+ }
425
+ }
426
+
427
+ function rowOf(result) {
428
+ return result && result.rows && result.rows[0] ? result.rows[0] : null;
429
+ }
430
+
431
+ // ---------------------------------------------------------------------------
432
+ // The links' tokens (see newsletterTokenSpec in the code generator)
433
+ // ---------------------------------------------------------------------------
434
+
435
+ var __tokenKeyCache = { secret: null, key: null };
436
+
437
+ function newsletterTokenKey() {
438
+ var secret = process.env.NEXTAUTH_SECRET || '';
439
+ if (!secret) { return null; }
440
+ if (__tokenKeyCache.secret !== secret) {
441
+ __tokenKeyCache = { secret: secret, key: crypto.createHmac('sha256', secret).update(TOKEN_KEY_LABEL).digest() };
442
+ }
443
+ return __tokenKeyCache.key;
444
+ }
445
+
446
+ function toBase64Url(buffer) {
447
+ return buffer.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');
448
+ }
449
+
450
+ function fromBase64Url(text) {
451
+ if (typeof text !== 'string' || !text || !/^[A-Za-z0-9_-]+$/.test(text)) { return null; }
452
+ var base64 = text.replace(/-/g, '+').replace(/_/g, '/');
453
+ while (base64.length % 4) { base64 += '='; }
454
+ return Buffer.from(base64, 'base64');
455
+ }
456
+
457
+ function nowSeconds() {
458
+ return Math.floor(Date.now() / 1000);
459
+ }
460
+
461
+ /** The token of a confirm or unsubscribe link for \`email\`; null without the app secret. */
462
+ function signNewsletterToken(email, purpose, issuedAt) {
463
+ var key = newsletterTokenKey();
464
+ var address = normalizeEmail(email);
465
+ if (!key || !address || TOKEN_PURPOSES.indexOf(purpose) === -1) { return null; }
466
+ var at = issuedAt === undefined ? nowSeconds() : Math.floor(Number(issuedAt));
467
+ if (!isFinite(at) || at < 0) { return null; }
468
+ var payload = Buffer.from(address + '|' + purpose + '|' + at, 'utf8');
469
+ return toBase64Url(payload) + '.' + toBase64Url(crypto.createHmac('sha256', key).update(payload).digest());
470
+ }
471
+
472
+ /** \`{ email, purpose, issuedAt }\` for a live token of \`purpose\`, else null. */
473
+ function verifyNewsletterToken(token, purpose) {
474
+ var key = newsletterTokenKey();
475
+ if (!key || typeof token !== 'string' || token.length > TOKEN_MAX_LENGTH || TOKEN_PURPOSES.indexOf(purpose) === -1) { return null; }
476
+ var parts = token.trim().split('.');
477
+ if (parts.length !== 2) { return null; }
478
+ var payload = fromBase64Url(parts[0]);
479
+ var mac = fromBase64Url(parts[1]);
480
+ if (!payload || !mac || mac.length !== 32) { return null; }
481
+ var expected = crypto.createHmac('sha256', key).update(payload).digest();
482
+ if (!crypto.timingSafeEqual(mac, expected)) { return null; }
483
+ var text = payload.toString('utf8');
484
+ var last = text.lastIndexOf('|');
485
+ var middle = last > 0 ? text.lastIndexOf('|', last - 1) : -1;
486
+ if (middle <= 0) { return null; }
487
+ var email = text.slice(0, middle);
488
+ var issued = text.slice(last + 1);
489
+ if (text.slice(middle + 1, last) !== purpose || !/^[0-9]{1,12}$/.test(issued) || normalizeEmail(email) !== email) { return null; }
490
+ var issuedAt = Number(issued);
491
+ var now = nowSeconds();
492
+ if (issuedAt > now + TOKEN_FUTURE_SKEW_SECONDS) { return null; }
493
+ if (purpose === 'confirm' && now - issuedAt > CONFIRM_TOKEN_MAX_AGE_SECONDS) { return null; }
494
+ return { email: email, purpose: purpose, issuedAt: issuedAt };
495
+ }
496
+
497
+ // ---------------------------------------------------------------------------
498
+ // Emails
499
+ // ---------------------------------------------------------------------------
500
+
501
+ ${TRUSTED_ORIGIN_CODE}
502
+
503
+ ${generateFillTemplateFn()}
504
+
505
+ ${providerSendCode(provider)}
506
+
507
+ function siteNameOf(req) {
508
+ if (SITE_NAME) { return SITE_NAME; }
509
+ var host = req && req.headers && req.headers.host ? String(req.headers.host) : '';
510
+ return host.replace(/^www\\./, '').split(':')[0];
511
+ }
512
+
513
+ function senderAddress() {
514
+ var email = String(SENDER_EMAIL || process.env.EMAIL_FROM || '').trim();
515
+ if (!email) { return ''; }
516
+ var name = String(SENDER_NAME || '').replace(/[\\r\\n<>"]/g, '').trim();
517
+ return name && email.indexOf('<') === -1 ? name + ' <' + email + '>' : email;
518
+ }
519
+
520
+ function emailCredential() {
521
+ var apiKey = EMAIL_SECRET_ENV_NAME ? process.env[EMAIL_SECRET_ENV_NAME] : '';
522
+ if (apiKey && String(apiKey).indexOf('teleporthq.secrets.') === 0) { apiKey = ''; }
523
+ return apiKey ? String(apiKey) : '';
524
+ }
525
+
526
+ /** Whether the site can mail a newsletter email at all (a provider, its credential, a sender). */
527
+ function canSendNewsletterEmail() {
528
+ return !!EMAIL_PROVIDER && !!emailCredential() && !!senderAddress();
529
+ }
530
+
531
+ // A link to one of the site's pages carries the token in its fragment: a
532
+ // fragment never reaches a server, a CDN log or a Referer (the page's first
533
+ // head script keeps it). The site's own unsubscribe route reads it on the
534
+ // server, so a link to it carries it in the query.
535
+ function pageLink(path, token) {
536
+ return path + (path.indexOf('/api/') === 0 ? '?t=' : '#t=') + encodeURIComponent(token);
537
+ }
538
+
539
+ // The token, wherever it appears, for what the sent-email log keeps: whoever
540
+ // reads the log cannot confirm or unsubscribe someone else with it.
541
+ function hideToken(text, token) {
542
+ return String(text == null ? '' : text).split(token).join('[hidden]');
543
+ }
544
+
545
+ /**
546
+ * Mails the \`confirmation\` (its link confirms the subscription) or the
547
+ * \`welcome\` (its link unsubscribes) email to \`toEmail\`, in \`locale\`'s copy,
548
+ * with links to this site's pages. Recorded in the sent-email log, the
549
+ * token hidden. Resolves whether it was sent; never throws.
550
+ */
551
+ async function sendNewsletterEmail(kind, toEmail, locale, req, userId) {
552
+ var to = normalizeEmail(toEmail);
553
+ var template = kind === 'confirmation' ? CONFIRMATION_EMAIL : kind === 'welcome' ? WELCOME_EMAIL : null;
554
+ if (!template || !to) { return false; }
555
+ if (!EMAIL_PROVIDER) { console.warn('[newsletter] ' + kind + ' email not sent: no email provider is configured'); return false; }
556
+ var apiKey = emailCredential();
557
+ if (!apiKey) { console.warn('[newsletter] ' + kind + ' email not sent: the email credential is not set'); return false; }
558
+ var from = senderAddress();
559
+ if (!from) { console.warn('[newsletter] ' + kind + ' email not sent: no sender is configured'); return false; }
560
+ var purpose = kind === 'confirmation' ? 'confirm' : 'unsubscribe';
561
+ var token = signNewsletterToken(to, purpose);
562
+ if (!token) { console.warn('[newsletter] ' + kind + ' email not sent: the app secret is not set'); return false; }
563
+ var link = trustedOrigin(req) + pageLink(kind === 'confirmation' ? CONFIRM_PAGE_PATH : UNSUBSCRIBE_PAGE_PATH, token);
564
+ var values = kind === 'confirmation'
565
+ ? { confirm_url: link, site_name: siteNameOf(req), email: to }
566
+ : { unsubscribe_url: link, site_name: siteNameOf(req), email: to };
567
+ var copy = __emailLocale.pickLocalizedTemplate(template, kind === 'confirmation' ? CONFIRMATION_EMAIL_LOCALIZED : WELCOME_EMAIL_LOCALIZED, locale);
568
+ if (!copy.body) { return false; }
569
+ var subject = fillSubjectTemplate(copy.subject, values);
570
+ var html = fillTemplate(copy.body, values);
571
+ // The welcome is a newsletter message: mail clients offer its way out too,
572
+ // through the route that reads the token on the server and asks first.
573
+ var headers = kind === 'welcome' ? { 'List-Unsubscribe': '<' + trustedOrigin(req) + UNSUBSCRIBE_ROUTE + '?t=' + encodeURIComponent(token) + '>' } : undefined;
574
+ var failure = null;
575
+ try {
576
+ await __sendProviderEmail({ from: from, to: to, subject: subject, html: html, apiKey: apiKey, headers: headers });
577
+ } catch (err) {
578
+ failure = err;
579
+ }
580
+ if (__sentEmailLog) {
581
+ __sentEmailLog.recordSentEmail({
582
+ emailType: 'newsletter-' + kind,
583
+ audience: 'customer',
584
+ to: to,
585
+ from: from,
586
+ subject: hideToken(subject, token),
587
+ html: hideToken(html, token),
588
+ payload: { recipientEmail: to },
589
+ provider: EMAIL_PROVIDER,
590
+ status: failure ? 'failed' : 'sent',
591
+ error: failure ? (failure.message || String(failure)) : null,
592
+ source: 'newsletter',
593
+ sourceRef: 'utils/newsletter',
594
+ userId: userId != null ? userId : null,
595
+ });
596
+ await __sentEmailLog.settleSentEmailLog();
597
+ }
598
+ if (failure) {
599
+ // A provider may echo the recipient: the log never keeps it.
600
+ console.error('[newsletter] the ' + kind + ' email could not be sent:', String(failure.message || failure).split(to).join('[address]'));
601
+ return false;
602
+ }
603
+ return true;
604
+ }
605
+
606
+ // ---------------------------------------------------------------------------
607
+ // Events
608
+ // ---------------------------------------------------------------------------
609
+
610
+ ${eventRecorderCode(options.withAutomations === true)}
611
+
612
+ // ---------------------------------------------------------------------------
613
+ // Joining and leaving
614
+ // ---------------------------------------------------------------------------
615
+
616
+ async function findPerson(db, email) {
617
+ return rowOf(await db.query(SQL.findPerson, [email]));
618
+ }
619
+
620
+ // The person is on the list now: the automations hear of it, and they are
621
+ // welcomed (not when they joined through the sign-up form whose route sends
622
+ // the account's own welcome; an \`account\` sign-up, the account page's
623
+ // switch, is welcomed like any other).
624
+ async function joinedNewsletter(row, point, locale, req) {
625
+ await recordNewsletterEvent('newsletter-subscribed', row, req);
626
+ if (WELCOME_ENABLED && !(point === 'signup' && SIGNUP_SENDS_ACCOUNT_WELCOME)) {
627
+ await sendNewsletterEmail('welcome', row.email, locale, req, row.id);
628
+ }
629
+ }
630
+
631
+ /**
632
+ * Adds \`email\` to the newsletter from \`signUpPoint\` (a \`newsletter_source\`).
633
+ * The caller handled the honeypot and answers \`publicSubscribeAnswer()\`
634
+ * whatever this resolves: \`{ outcome }\`, one of
635
+ * 'invalid' not an address;
636
+ * 'limited' this address signed up ${NEWSLETTER_ADDRESS_LIMIT} times this hour, or an
637
+ * opted-out address was already sent its confirmation today;
638
+ * 'already' already subscribed: nothing changes, nothing is sent;
639
+ * 'confirm-sent' a confirmation link was mailed (double opt-in, or an
640
+ * address that unsubscribed or opted out of email: nothing
641
+ * is written);
642
+ * 'pending' double opt-in, but no confirmation email could go out;
643
+ * 'noop' an unsubscribed address and no way to mail it;
644
+ * 'subscribed' single opt-in: on the list now (event, welcome email).
645
+ */
646
+ async function subscribeNewsletterPerson(input) {
647
+ var o = input || {};
648
+ var db = o.db;
649
+ var req = o.req;
650
+ var email = normalizeEmail(o.email);
651
+ if (!email) { return { outcome: 'invalid' }; }
652
+ var point = signUpPointOf(o.signUpPoint);
653
+ var limit = await __security.rateLimit({ key: 'newsletter:' + email, limit: ADDRESS_LIMIT, windowSeconds: 3600 });
654
+ if (!limit.allowed) { return { outcome: 'limited' }; }
655
+ var locale = __emailLocale.resolveRequestLocale(req);
656
+ var accountSource = ACCOUNT_SOURCE_OF_POINT[point] || 'newsletter';
657
+ // Twice at most: a row that changed between the read and the write is read again.
658
+ for (var attempt = 0; attempt < 2; attempt++) {
659
+ var person = await findPerson(db, email);
660
+ if (person && person.newsletter_status === 'subscribed') { return { outcome: 'already' }; }
661
+ if (person && (person.newsletter_status === 'unsubscribed' || person.email_unsubscribed === true)) {
662
+ // Anyone can type anyone's address: a form never undoes an opt-out (off
663
+ // the newsletter, or off every marketing email). The address's owner is
664
+ // asked to confirm instead, at most once a day, and nothing is written.
665
+ if (!canSendNewsletterEmail()) { return { outcome: 'noop' }; }
666
+ var daily = await __security.rateLimit({ key: 'newsletter-resubscribe:' + email, limit: OPTED_OUT_CONFIRMATIONS_PER_DAY, windowSeconds: 86400 });
667
+ if (!daily.allowed) { return { outcome: 'limited' }; }
668
+ var resent = await sendNewsletterEmail('confirmation', email, locale, req, person.id);
669
+ return { outcome: resent ? 'confirm-sent' : 'noop' };
670
+ }
671
+ if (CONFIRMATION_REQUIRED) {
672
+ var pending = rowOf(person
673
+ ? await db.query(SQL.markPending, [person.id, point])
674
+ : await db.query(SQL.insertPending, [email, accountSource, point]));
675
+ if (!pending) { continue; }
676
+ var sent = await sendNewsletterEmail('confirmation', email, locale, req, pending.id);
677
+ return { outcome: sent ? 'confirm-sent' : 'pending' };
678
+ }
679
+ var joined = rowOf(person
680
+ ? await db.query(SQL.markSubscribed, [person.id, point])
681
+ : await db.query(SQL.insertSubscribed, [email, accountSource, point]));
682
+ if (!joined) { continue; }
683
+ await joinedNewsletter(joined, point, locale, req);
684
+ return { outcome: 'subscribed' };
685
+ }
686
+ return { outcome: 'noop' };
687
+ }
688
+
689
+ /**
690
+ * The confirmation link: \`{ ok: true, email }\` once the person is subscribed
691
+ * (opening it again answers the same), \`{ ok: false }\` for a link that is
692
+ * not one, expired (${
693
+ newsletterTokenSpec.confirmMaxAgeSeconds / 86400
694
+ } days), or mailed before the person last unsubscribed.
695
+ */
696
+ async function confirmNewsletter(input) {
697
+ var o = input || {};
698
+ var claim = verifyNewsletterToken(o.token, 'confirm');
699
+ if (!claim) { return { ok: false }; }
700
+ var person = await findPerson(o.db, claim.email);
701
+ if (!person) { return { ok: false }; }
702
+ if (person.newsletter_status === 'subscribed') { return { ok: true, email: claim.email }; }
703
+ var leftAt = person.newsletter_unsubscribed_at ? new Date(person.newsletter_unsubscribed_at).getTime() : NaN;
704
+ if (isFinite(leftAt) && claim.issuedAt < Math.floor(leftAt / 1000)) { return { ok: false }; }
705
+ var confirmed = rowOf(await o.db.query(SQL.confirm, [person.id]));
706
+ if (confirmed) {
707
+ await joinedNewsletter(confirmed, confirmed.newsletter_source, __emailLocale.resolveRequestLocale(o.req), o.req);
708
+ }
709
+ return { ok: true, email: claim.email };
710
+ }
711
+
712
+ /**
713
+ * The unsubscribe link: \`{ ok: true, email }\` once the person is off the list
714
+ * (idempotent: the event is recorded once, when a subscriber leaves),
715
+ * \`{ ok: false }\` for a link that is not one.
716
+ */
717
+ async function unsubscribeNewsletter(input) {
718
+ var o = input || {};
719
+ var claim = verifyNewsletterToken(o.token, 'unsubscribe');
720
+ if (!claim) { return { ok: false }; }
721
+ var person = await findPerson(o.db, claim.email);
722
+ if (!person || person.newsletter_status === 'unsubscribed') { return { ok: true, email: claim.email }; }
723
+ var left = rowOf(await o.db.query(SQL.unsubscribe, [person.id]));
724
+ if (left && person.newsletter_status === 'subscribed') {
725
+ await recordNewsletterEvent('newsletter-unsubscribed', left, o.req);
726
+ }
727
+ return { ok: true, email: claim.email };
728
+ }
729
+
730
+ module.exports = {
731
+ NEWSLETTER_MIN_RESPONSE_MS: NEWSLETTER_MIN_RESPONSE_MS,
732
+ normalizeEmail: normalizeEmail,
733
+ visitorSignUpPoint: visitorSignUpPoint,
734
+ publicRouteSignUpPoint: publicRouteSignUpPoint,
735
+ safeError: safeError,
736
+ publicSubscribeAnswer: publicSubscribeAnswer,
737
+ waitUntilElapsed: waitUntilElapsed,
738
+ withNewsletterDb: withNewsletterDb,
739
+ subscribeNewsletterPerson: subscribeNewsletterPerson,
740
+ confirmNewsletter: confirmNewsletter,
741
+ unsubscribeNewsletter: unsubscribeNewsletter,
742
+ signNewsletterToken: signNewsletterToken,
743
+ verifyNewsletterToken: verifyNewsletterToken,
744
+ sendNewsletterEmail: sendNewsletterEmail,
745
+ recordNewsletterEvent: recordNewsletterEvent,
746
+ };
747
+ `
748
+ }