@teleporthq/teleport-plugin-next-workflows 0.44.10 → 0.44.17

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