@teleporthq/teleport-plugin-next-workflows 0.43.67 → 0.43.69

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 (787) hide show
  1. package/__tests__/_helpers/bind-workflow-utils.ts +16 -1
  2. package/__tests__/_helpers/fake-fetch.ts +96 -0
  3. package/__tests__/_helpers/fake-stripe.ts +52 -0
  4. package/__tests__/_helpers/load-handler.ts +22 -3
  5. package/__tests__/_helpers/load-invoice-route.ts +75 -0
  6. package/__tests__/_helpers/load-payment-drivers.ts +69 -0
  7. package/__tests__/_helpers/load-server-runtime.ts +33 -0
  8. package/__tests__/_helpers/run-generated-middleware.ts +50 -9
  9. package/__tests__/admin-form-hydration-target.test.ts +39 -0
  10. package/__tests__/admin-form-row-hydration.test.ts +58 -0
  11. package/__tests__/ai-select-database-data-handler.test.ts +14 -3
  12. package/__tests__/api-route-file-name-segments.test.ts +33 -0
  13. package/__tests__/app-secret-env.test.ts +55 -0
  14. package/__tests__/auth-env-secret-preservation.test.ts +22 -3
  15. package/__tests__/auth-nextauth-url.test.ts +134 -50
  16. package/__tests__/cart-add-item-kinds.test.ts +259 -0
  17. package/__tests__/cart-add-item-line-fields.test.ts +328 -0
  18. package/__tests__/cart-availability-add-to-cart.test.ts +108 -0
  19. package/__tests__/cart-get-total-discounts.test.ts +499 -0
  20. package/__tests__/cart-get-total-product-options.test.ts +195 -0
  21. package/__tests__/cart-get-total-subscriptions.test.ts +221 -0
  22. package/__tests__/cart-price-order.test.ts +283 -0
  23. package/__tests__/cart-update-item-quantity-recurring.test.ts +75 -0
  24. package/__tests__/client-loop-current-item.test.ts +164 -0
  25. package/__tests__/cron-route-loop-custom-node.test.ts +123 -0
  26. package/__tests__/cron-route-loop-templateparams.test.ts +7 -0
  27. package/__tests__/cron-route-verification.test.ts +252 -0
  28. package/__tests__/custom-js-runtime-base-url.test.ts +64 -0
  29. package/__tests__/custom-nodes-admin-module.test.ts +310 -0
  30. package/__tests__/data-api-browser-reads.test.ts +341 -0
  31. package/__tests__/data-api-low-stock-autofire.test.ts +67 -17
  32. package/__tests__/data-api-optional-feature-columns.test.ts +240 -0
  33. package/__tests__/data-api-protected-tables.test.ts +948 -0
  34. package/__tests__/data-node-not-awaited.test.ts +7 -3
  35. package/__tests__/data-write-missing-filter.test.ts +119 -0
  36. package/__tests__/ecommerce-rewriter-product-options.test.ts +143 -0
  37. package/__tests__/email-locale-senders.test.ts +1 -1
  38. package/__tests__/file-storage-upload-picked-files.test.ts +20 -0
  39. package/__tests__/input-debounce-per-field.test.ts +141 -0
  40. package/__tests__/internal-request-headers.test.ts +7 -3
  41. package/__tests__/invoice-data-access-replace.test.ts +340 -0
  42. package/__tests__/invoice-delivery-fee.test.ts +3 -2
  43. package/__tests__/invoice-generate-hydration.test.ts +20 -12
  44. package/__tests__/invoice-order-items-settle.test.ts +51 -46
  45. package/__tests__/invoice-product-options.test.ts +177 -0
  46. package/__tests__/invoice-regenerate-route.test.ts +488 -0
  47. package/__tests__/invoice-regional-tax.test.ts +3 -2
  48. package/__tests__/invoice-reservation.test.ts +195 -0
  49. package/__tests__/invoice-route-access.test.ts +275 -0
  50. package/__tests__/invoice-self-call-origin.test.ts +117 -0
  51. package/__tests__/invoice-tender.test.ts +550 -0
  52. package/__tests__/legacy-webhook-self-calls.test.ts +187 -0
  53. package/__tests__/locale-aware-redirects.test.ts +55 -26
  54. package/__tests__/loop-collection-unwrap.test.ts +6 -1
  55. package/__tests__/middleware-subscriber-access.test.ts +269 -0
  56. package/__tests__/payment-charge-user-earlier-attempt.test.ts +267 -0
  57. package/__tests__/payment-charge-user-handler-serialization.test.ts +47 -82
  58. package/__tests__/payment-charge-user-line-descriptions.test.ts +124 -0
  59. package/__tests__/payment-charge-user-report-refusal.test.ts +105 -0
  60. package/__tests__/payment-close-checkout-node.test.ts +127 -0
  61. package/__tests__/payment-driver-close-checkout.test.ts +1163 -0
  62. package/__tests__/payment-driver-coingate.test.ts +470 -0
  63. package/__tests__/payment-driver-inspect-checkout.test.ts +648 -0
  64. package/__tests__/payment-driver-mollie.test.ts +864 -0
  65. package/__tests__/payment-driver-paddle.test.ts +870 -0
  66. package/__tests__/payment-driver-paypal-capture.test.ts +158 -0
  67. package/__tests__/payment-driver-paypal-webhook.test.ts +367 -0
  68. package/__tests__/payment-driver-razorpay.test.ts +895 -0
  69. package/__tests__/payment-driver-square.test.ts +977 -0
  70. package/__tests__/payment-driver-stripe.test.ts +267 -0
  71. package/__tests__/payment-drivers-module.test.ts +429 -0
  72. package/__tests__/payment-legacy-webhook-routes.test.ts +588 -0
  73. package/__tests__/payment-redirect-and-order-notification.test.ts +98 -39
  74. package/__tests__/payment-refund.test.ts +523 -22
  75. package/__tests__/payment-subscription-nodes.test.ts +1360 -0
  76. package/__tests__/payment-webhook-route.test.ts +523 -0
  77. package/__tests__/paypal-webhook-signature-verification.test.ts +205 -0
  78. package/__tests__/prune-context-oversized-leaf.test.ts +1 -0
  79. package/__tests__/prune-context-state-keys.test.ts +89 -0
  80. package/__tests__/push-node-handlers.test.ts +291 -0
  81. package/__tests__/route-changed-trigger.test.ts +40 -0
  82. package/__tests__/runtime-storage-upload-access.test.ts +255 -0
  83. package/__tests__/security-runtime-shadow.test.ts +103 -1
  84. package/__tests__/segment-reply-changed-keys.test.ts +146 -0
  85. package/__tests__/segment-state-keys-emission.test.ts +185 -0
  86. package/__tests__/segment-state-needs.test.ts +102 -0
  87. package/__tests__/server-segment-context-integrity.test.ts +210 -0
  88. package/__tests__/server-step-signing.test.ts +371 -0
  89. package/__tests__/session-cookie-resolver.test.ts +59 -0
  90. package/__tests__/stock-decrement-audit.test.ts +17 -0
  91. package/__tests__/subscriber-access-route.test.ts +406 -0
  92. package/__tests__/webhook-delivery-lease.test.ts +316 -0
  93. package/__tests__/workflow-auth-guard.test.ts +253 -2
  94. package/dist/cjs/admin-form-hydration.d.ts +10 -0
  95. package/dist/cjs/admin-form-hydration.d.ts.map +1 -0
  96. package/dist/cjs/admin-form-hydration.js +25 -0
  97. package/dist/cjs/admin-form-hydration.js.map +1 -0
  98. package/dist/cjs/api-route-generator.d.ts +19 -3
  99. package/dist/cjs/api-route-generator.d.ts.map +1 -1
  100. package/dist/cjs/api-route-generator.js +190 -70
  101. package/dist/cjs/api-route-generator.js.map +1 -1
  102. package/dist/cjs/auth-generator.d.ts +4 -1
  103. package/dist/cjs/auth-generator.d.ts.map +1 -1
  104. package/dist/cjs/auth-generator.js +241 -62
  105. package/dist/cjs/auth-generator.js.map +1 -1
  106. package/dist/cjs/auth-return/signed-in-destination-code.d.ts +17 -0
  107. package/dist/cjs/auth-return/signed-in-destination-code.d.ts.map +1 -0
  108. package/dist/cjs/auth-return/signed-in-destination-code.js +37 -0
  109. package/dist/cjs/auth-return/signed-in-destination-code.js.map +1 -0
  110. package/dist/cjs/cart-pricing-preamble.d.ts +12 -0
  111. package/dist/cjs/cart-pricing-preamble.d.ts.map +1 -0
  112. package/dist/cjs/cart-pricing-preamble.js +23 -0
  113. package/dist/cjs/cart-pricing-preamble.js.map +1 -0
  114. package/dist/cjs/cron-request-verification.d.ts +24 -0
  115. package/dist/cjs/cron-request-verification.d.ts.map +1 -0
  116. package/dist/cjs/cron-request-verification.js +84 -0
  117. package/dist/cjs/cron-request-verification.js.map +1 -0
  118. package/dist/cjs/custom-node-modules.d.ts +30 -0
  119. package/dist/cjs/custom-node-modules.d.ts.map +1 -0
  120. package/dist/cjs/custom-node-modules.js +90 -0
  121. package/dist/cjs/custom-node-modules.js.map +1 -0
  122. package/dist/cjs/data-api-route-generator.d.ts +27 -0
  123. package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
  124. package/dist/cjs/data-api-route-generator.js +366 -29
  125. package/dist/cjs/data-api-route-generator.js.map +1 -1
  126. package/dist/cjs/ecommerce/cart-availability.d.ts.map +1 -1
  127. package/dist/cjs/ecommerce/cart-availability.js +22 -13
  128. package/dist/cjs/ecommerce/cart-availability.js.map +1 -1
  129. package/dist/cjs/ecommerce/stock-decrement.d.ts +2 -1
  130. package/dist/cjs/ecommerce/stock-decrement.d.ts.map +1 -1
  131. package/dist/cjs/ecommerce/stock-decrement.js +6 -0
  132. package/dist/cjs/ecommerce/stock-decrement.js.map +1 -1
  133. package/dist/cjs/executor-generator.d.ts +0 -1
  134. package/dist/cjs/executor-generator.d.ts.map +1 -1
  135. package/dist/cjs/executor-generator.js +213 -20
  136. package/dist/cjs/executor-generator.js.map +1 -1
  137. package/dist/cjs/index.d.ts +12 -4
  138. package/dist/cjs/index.d.ts.map +1 -1
  139. package/dist/cjs/index.js +25 -2
  140. package/dist/cjs/index.js.map +1 -1
  141. package/dist/cjs/invoice/api-routes-code.d.ts +26 -0
  142. package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
  143. package/dist/cjs/invoice/api-routes-code.js +423 -391
  144. package/dist/cjs/invoice/api-routes-code.js.map +1 -1
  145. package/dist/cjs/invoice/data-access-code.d.ts.map +1 -1
  146. package/dist/cjs/invoice/data-access-code.js +420 -107
  147. package/dist/cjs/invoice/data-access-code.js.map +1 -1
  148. package/dist/cjs/invoice/index.d.ts.map +1 -1
  149. package/dist/cjs/invoice/index.js +24 -0
  150. package/dist/cjs/invoice/index.js.map +1 -1
  151. package/dist/cjs/invoice/invoice-assembly-code.d.ts +12 -0
  152. package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -0
  153. package/dist/cjs/invoice/invoice-assembly-code.js +517 -0
  154. package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -0
  155. package/dist/cjs/invoice/invoice-html-code.d.ts.map +1 -1
  156. package/dist/cjs/invoice/invoice-html-code.js +111 -9
  157. package/dist/cjs/invoice/invoice-html-code.js.map +1 -1
  158. package/dist/cjs/invoice/pdf-service-client-code.d.ts.map +1 -1
  159. package/dist/cjs/invoice/pdf-service-client-code.js +3 -4
  160. package/dist/cjs/invoice/pdf-service-client-code.js.map +1 -1
  161. package/dist/cjs/nodes/account/account-login.d.ts.map +1 -1
  162. package/dist/cjs/nodes/account/account-login.js +4 -3
  163. package/dist/cjs/nodes/account/account-login.js.map +1 -1
  164. package/dist/cjs/nodes/account/account-signup.d.ts.map +1 -1
  165. package/dist/cjs/nodes/account/account-signup.js +7 -4
  166. package/dist/cjs/nodes/account/account-signup.js.map +1 -1
  167. package/dist/cjs/nodes/ai/ai-select-database-data.d.ts.map +1 -1
  168. package/dist/cjs/nodes/ai/ai-select-database-data.js +6 -1
  169. package/dist/cjs/nodes/ai/ai-select-database-data.js.map +1 -1
  170. package/dist/cjs/nodes/browser/browser-get-push-subscription.d.ts +9 -0
  171. package/dist/cjs/nodes/browser/browser-get-push-subscription.d.ts.map +1 -0
  172. package/dist/cjs/nodes/browser/browser-get-push-subscription.js +25 -0
  173. package/dist/cjs/nodes/browser/browser-get-push-subscription.js.map +1 -0
  174. package/dist/cjs/nodes/browser/browser-show-notification.d.ts +10 -0
  175. package/dist/cjs/nodes/browser/browser-show-notification.d.ts.map +1 -1
  176. package/dist/cjs/nodes/browser/browser-show-notification.js +65 -40
  177. package/dist/cjs/nodes/browser/browser-show-notification.js.map +1 -1
  178. package/dist/cjs/nodes/browser/browser-subscribe-to-push.d.ts +11 -0
  179. package/dist/cjs/nodes/browser/browser-subscribe-to-push.d.ts.map +1 -1
  180. package/dist/cjs/nodes/browser/browser-subscribe-to-push.js +21 -31
  181. package/dist/cjs/nodes/browser/browser-subscribe-to-push.js.map +1 -1
  182. package/dist/cjs/nodes/browser/browser-unsubscribe-from-push.d.ts +8 -0
  183. package/dist/cjs/nodes/browser/browser-unsubscribe-from-push.d.ts.map +1 -0
  184. package/dist/cjs/nodes/browser/browser-unsubscribe-from-push.js +24 -0
  185. package/dist/cjs/nodes/browser/browser-unsubscribe-from-push.js.map +1 -0
  186. package/dist/cjs/nodes/browser/push-api-access.d.ts +12 -0
  187. package/dist/cjs/nodes/browser/push-api-access.d.ts.map +1 -0
  188. package/dist/cjs/nodes/browser/push-api-access.js +19 -0
  189. package/dist/cjs/nodes/browser/push-api-access.js.map +1 -0
  190. package/dist/cjs/nodes/cart/cart-add-item.d.ts.map +1 -1
  191. package/dist/cjs/nodes/cart/cart-add-item.js +174 -10
  192. package/dist/cjs/nodes/cart/cart-add-item.js.map +1 -1
  193. package/dist/cjs/nodes/cart/cart-clear.d.ts.map +1 -1
  194. package/dist/cjs/nodes/cart/cart-clear.js +11 -0
  195. package/dist/cjs/nodes/cart/cart-clear.js.map +1 -1
  196. package/dist/cjs/nodes/cart/cart-get-total.d.ts.map +1 -1
  197. package/dist/cjs/nodes/cart/cart-get-total.js +260 -3
  198. package/dist/cjs/nodes/cart/cart-get-total.js.map +1 -1
  199. package/dist/cjs/nodes/cart/cart-price-order.d.ts +3 -0
  200. package/dist/cjs/nodes/cart/cart-price-order.d.ts.map +1 -0
  201. package/dist/cjs/nodes/cart/cart-price-order.js +281 -0
  202. package/dist/cjs/nodes/cart/cart-price-order.js.map +1 -0
  203. package/dist/cjs/nodes/cart/cart-update-item-quantity.d.ts.map +1 -1
  204. package/dist/cjs/nodes/cart/cart-update-item-quantity.js +7 -0
  205. package/dist/cjs/nodes/cart/cart-update-item-quantity.js.map +1 -1
  206. package/dist/cjs/nodes/data/data-count.d.ts.map +1 -1
  207. package/dist/cjs/nodes/data/data-count.js +6 -1
  208. package/dist/cjs/nodes/data/data-count.js.map +1 -1
  209. package/dist/cjs/nodes/data/data-create-item.d.ts.map +1 -1
  210. package/dist/cjs/nodes/data/data-create-item.js +11 -1
  211. package/dist/cjs/nodes/data/data-create-item.js.map +1 -1
  212. package/dist/cjs/nodes/data/data-delete-item.d.ts.map +1 -1
  213. package/dist/cjs/nodes/data/data-delete-item.js +29 -0
  214. package/dist/cjs/nodes/data/data-delete-item.js.map +1 -1
  215. package/dist/cjs/nodes/data/data-raw-query.d.ts.map +1 -1
  216. package/dist/cjs/nodes/data/data-raw-query.js +6 -1
  217. package/dist/cjs/nodes/data/data-raw-query.js.map +1 -1
  218. package/dist/cjs/nodes/data/data-select.d.ts.map +1 -1
  219. package/dist/cjs/nodes/data/data-select.js +6 -1
  220. package/dist/cjs/nodes/data/data-select.js.map +1 -1
  221. package/dist/cjs/nodes/data/data-update-item.d.ts.map +1 -1
  222. package/dist/cjs/nodes/data/data-update-item.js +29 -0
  223. package/dist/cjs/nodes/data/data-update-item.js.map +1 -1
  224. package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.d.ts.map +1 -1
  225. package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.js +7 -1
  226. package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.js.map +1 -1
  227. package/dist/cjs/nodes/file-storage/file-storage-upload.d.ts.map +1 -1
  228. package/dist/cjs/nodes/file-storage/file-storage-upload.js +7 -0
  229. package/dist/cjs/nodes/file-storage/file-storage-upload.js.map +1 -1
  230. package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
  231. package/dist/cjs/nodes/general/general-custom-js.js +21 -5
  232. package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
  233. package/dist/cjs/nodes/index.d.ts.map +1 -1
  234. package/dist/cjs/nodes/index.js +9 -4
  235. package/dist/cjs/nodes/index.js.map +1 -1
  236. package/dist/cjs/nodes/payment/payment-billing-portal.d.ts +3 -0
  237. package/dist/cjs/nodes/payment/payment-billing-portal.d.ts.map +1 -0
  238. package/dist/cjs/nodes/payment/payment-billing-portal.js +52 -0
  239. package/dist/cjs/nodes/payment/payment-billing-portal.js.map +1 -0
  240. package/dist/cjs/nodes/payment/payment-charge-user.d.ts.map +1 -1
  241. package/dist/cjs/nodes/payment/payment-charge-user.js +227 -360
  242. package/dist/cjs/nodes/payment/payment-charge-user.js.map +1 -1
  243. package/dist/cjs/nodes/payment/payment-close-checkout.d.ts +3 -0
  244. package/dist/cjs/nodes/payment/payment-close-checkout.d.ts.map +1 -0
  245. package/dist/cjs/nodes/payment/payment-close-checkout.js +141 -0
  246. package/dist/cjs/nodes/payment/payment-close-checkout.js.map +1 -0
  247. package/dist/cjs/nodes/payment/payment-ensure-subscription-plan.d.ts +3 -0
  248. package/dist/cjs/nodes/payment/payment-ensure-subscription-plan.d.ts.map +1 -0
  249. package/dist/cjs/nodes/payment/payment-ensure-subscription-plan.js +67 -0
  250. package/dist/cjs/nodes/payment/payment-ensure-subscription-plan.js.map +1 -0
  251. package/dist/cjs/nodes/payment/payment-manage-subscription.d.ts +3 -0
  252. package/dist/cjs/nodes/payment/payment-manage-subscription.d.ts.map +1 -0
  253. package/dist/cjs/nodes/payment/payment-manage-subscription.js +89 -0
  254. package/dist/cjs/nodes/payment/payment-manage-subscription.js.map +1 -0
  255. package/dist/cjs/nodes/payment/payment-refund.d.ts.map +1 -1
  256. package/dist/cjs/nodes/payment/payment-refund.js +50 -404
  257. package/dist/cjs/nodes/payment/payment-refund.js.map +1 -1
  258. package/dist/cjs/nodes/push/push-send-notification.d.ts +14 -0
  259. package/dist/cjs/nodes/push/push-send-notification.d.ts.map +1 -0
  260. package/dist/cjs/nodes/push/push-send-notification.js +83 -0
  261. package/dist/cjs/nodes/push/push-send-notification.js.map +1 -0
  262. package/dist/cjs/payments/drivers/coingate-driver-code.d.ts +16 -0
  263. package/dist/cjs/payments/drivers/coingate-driver-code.d.ts.map +1 -0
  264. package/dist/cjs/payments/drivers/coingate-driver-code.js +471 -0
  265. package/dist/cjs/payments/drivers/coingate-driver-code.js.map +1 -0
  266. package/dist/cjs/payments/drivers/mollie-driver-code.d.ts +16 -0
  267. package/dist/cjs/payments/drivers/mollie-driver-code.d.ts.map +1 -0
  268. package/dist/cjs/payments/drivers/mollie-driver-code.js +623 -0
  269. package/dist/cjs/payments/drivers/mollie-driver-code.js.map +1 -0
  270. package/dist/cjs/payments/drivers/paddle-driver-code.d.ts +12 -0
  271. package/dist/cjs/payments/drivers/paddle-driver-code.d.ts.map +1 -0
  272. package/dist/cjs/payments/drivers/paddle-driver-code.js +683 -0
  273. package/dist/cjs/payments/drivers/paddle-driver-code.js.map +1 -0
  274. package/dist/cjs/payments/drivers/paypal-driver-code.d.ts +12 -0
  275. package/dist/cjs/payments/drivers/paypal-driver-code.d.ts.map +1 -0
  276. package/dist/cjs/payments/drivers/paypal-driver-code.js +1261 -0
  277. package/dist/cjs/payments/drivers/paypal-driver-code.js.map +1 -0
  278. package/dist/cjs/payments/drivers/razorpay-driver-code.d.ts +12 -0
  279. package/dist/cjs/payments/drivers/razorpay-driver-code.d.ts.map +1 -0
  280. package/dist/cjs/payments/drivers/razorpay-driver-code.js +732 -0
  281. package/dist/cjs/payments/drivers/razorpay-driver-code.js.map +1 -0
  282. package/dist/cjs/payments/drivers/square-driver-code.d.ts +14 -0
  283. package/dist/cjs/payments/drivers/square-driver-code.d.ts.map +1 -0
  284. package/dist/cjs/payments/drivers/square-driver-code.js +931 -0
  285. package/dist/cjs/payments/drivers/square-driver-code.js.map +1 -0
  286. package/dist/cjs/payments/drivers/stripe-driver-code.d.ts +12 -0
  287. package/dist/cjs/payments/drivers/stripe-driver-code.d.ts.map +1 -0
  288. package/dist/cjs/payments/drivers/stripe-driver-code.js +778 -0
  289. package/dist/cjs/payments/drivers/stripe-driver-code.js.map +1 -0
  290. package/dist/cjs/payments/index.d.ts +66 -0
  291. package/dist/cjs/payments/index.d.ts.map +1 -0
  292. package/dist/cjs/payments/index.js +175 -0
  293. package/dist/cjs/payments/index.js.map +1 -0
  294. package/dist/cjs/payments/payment-core-code.d.ts +19 -0
  295. package/dist/cjs/payments/payment-core-code.d.ts.map +1 -0
  296. package/dist/cjs/payments/payment-core-code.js +422 -0
  297. package/dist/cjs/payments/payment-core-code.js.map +1 -0
  298. package/dist/cjs/payments/payment-driver-code-map.d.ts +4 -0
  299. package/dist/cjs/payments/payment-driver-code-map.d.ts.map +1 -0
  300. package/dist/cjs/payments/payment-driver-code-map.js +21 -0
  301. package/dist/cjs/payments/payment-driver-code-map.js.map +1 -0
  302. package/dist/cjs/payments/payment-drivers-scope.d.ts +35 -0
  303. package/dist/cjs/payments/payment-drivers-scope.d.ts.map +1 -0
  304. package/dist/cjs/payments/payment-drivers-scope.js +56 -0
  305. package/dist/cjs/payments/payment-drivers-scope.js.map +1 -0
  306. package/dist/cjs/payments/payment-registry-code.d.ts +8 -0
  307. package/dist/cjs/payments/payment-registry-code.d.ts.map +1 -0
  308. package/dist/cjs/payments/payment-registry-code.js +41 -0
  309. package/dist/cjs/payments/payment-registry-code.js.map +1 -0
  310. package/dist/cjs/pg-client-code.d.ts +10 -0
  311. package/dist/cjs/pg-client-code.d.ts.map +1 -1
  312. package/dist/cjs/pg-client-code.js +27 -1
  313. package/dist/cjs/pg-client-code.js.map +1 -1
  314. package/dist/cjs/runtime-storage-generator.d.ts +28 -0
  315. package/dist/cjs/runtime-storage-generator.d.ts.map +1 -1
  316. package/dist/cjs/runtime-storage-generator.js +240 -5
  317. package/dist/cjs/runtime-storage-generator.js.map +1 -1
  318. package/dist/cjs/secret-collector.d.ts.map +1 -1
  319. package/dist/cjs/secret-collector.js +8 -3
  320. package/dist/cjs/secret-collector.js.map +1 -1
  321. package/dist/cjs/security-scanner.d.ts +10 -1
  322. package/dist/cjs/security-scanner.d.ts.map +1 -1
  323. package/dist/cjs/security-scanner.js +19 -1
  324. package/dist/cjs/security-scanner.js.map +1 -1
  325. package/dist/cjs/segment-context-needs.d.ts +38 -0
  326. package/dist/cjs/segment-context-needs.d.ts.map +1 -0
  327. package/dist/cjs/segment-context-needs.js +129 -0
  328. package/dist/cjs/segment-context-needs.js.map +1 -0
  329. package/dist/cjs/segment-splitter.d.ts.map +1 -1
  330. package/dist/cjs/segment-splitter.js +6 -1
  331. package/dist/cjs/segment-splitter.js.map +1 -1
  332. package/dist/cjs/segment-trust.d.ts +50 -0
  333. package/dist/cjs/segment-trust.d.ts.map +1 -0
  334. package/dist/cjs/segment-trust.js +115 -0
  335. package/dist/cjs/segment-trust.js.map +1 -0
  336. package/dist/cjs/sent-email-log/sent-email-log-code.d.ts +19 -0
  337. package/dist/cjs/sent-email-log/sent-email-log-code.d.ts.map +1 -1
  338. package/dist/cjs/sent-email-log/sent-email-log-code.js +1 -24
  339. package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -1
  340. package/dist/cjs/server-runtime-code.d.ts +34 -0
  341. package/dist/cjs/server-runtime-code.d.ts.map +1 -0
  342. package/dist/cjs/server-runtime-code.js +303 -0
  343. package/dist/cjs/server-runtime-code.js.map +1 -0
  344. package/dist/cjs/session-cookie-resolver.d.ts +3 -78
  345. package/dist/cjs/session-cookie-resolver.d.ts.map +1 -1
  346. package/dist/cjs/session-cookie-resolver.js +7 -276
  347. package/dist/cjs/session-cookie-resolver.js.map +1 -1
  348. package/dist/cjs/subscriber-access-route-generator.d.ts +71 -0
  349. package/dist/cjs/subscriber-access-route-generator.d.ts.map +1 -0
  350. package/dist/cjs/subscriber-access-route-generator.js +301 -0
  351. package/dist/cjs/subscriber-access-route-generator.js.map +1 -0
  352. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  353. package/dist/cjs/types.d.ts +6 -0
  354. package/dist/cjs/types.d.ts.map +1 -1
  355. package/dist/cjs/webhook-delivery-lease/index.d.ts +8 -0
  356. package/dist/cjs/webhook-delivery-lease/index.d.ts.map +1 -0
  357. package/dist/cjs/webhook-delivery-lease/index.js +41 -0
  358. package/dist/cjs/webhook-delivery-lease/index.js.map +1 -0
  359. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.d.ts +26 -0
  360. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.d.ts.map +1 -0
  361. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.js +151 -0
  362. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.js.map +1 -0
  363. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-scope.d.ts +16 -0
  364. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-scope.d.ts.map +1 -0
  365. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-scope.js +19 -0
  366. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-scope.js.map +1 -0
  367. package/dist/cjs/webhook-generator.d.ts +1 -1
  368. package/dist/cjs/webhook-generator.d.ts.map +1 -1
  369. package/dist/cjs/webhook-generator.js +342 -254
  370. package/dist/cjs/webhook-generator.js.map +1 -1
  371. package/dist/cjs/webhook-signature-verification.d.ts +17 -1
  372. package/dist/cjs/webhook-signature-verification.d.ts.map +1 -1
  373. package/dist/cjs/webhook-signature-verification.js +182 -27
  374. package/dist/cjs/webhook-signature-verification.js.map +1 -1
  375. package/dist/cjs/workflow-auth-generator.d.ts +9 -6
  376. package/dist/cjs/workflow-auth-generator.d.ts.map +1 -1
  377. package/dist/cjs/workflow-auth-generator.js +133 -29
  378. package/dist/cjs/workflow-auth-generator.js.map +1 -1
  379. package/dist/cjs/workflow-component-plugin.d.ts.map +1 -1
  380. package/dist/cjs/workflow-component-plugin.js +65 -28
  381. package/dist/cjs/workflow-component-plugin.js.map +1 -1
  382. package/dist/cjs/workflow-project-plugin.d.ts +13 -0
  383. package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
  384. package/dist/cjs/workflow-project-plugin.js +215 -65
  385. package/dist/cjs/workflow-project-plugin.js.map +1 -1
  386. package/dist/esm/admin-form-hydration.d.ts +10 -0
  387. package/dist/esm/admin-form-hydration.d.ts.map +1 -0
  388. package/dist/esm/admin-form-hydration.js +21 -0
  389. package/dist/esm/admin-form-hydration.js.map +1 -0
  390. package/dist/esm/api-route-generator.d.ts +19 -3
  391. package/dist/esm/api-route-generator.d.ts.map +1 -1
  392. package/dist/esm/api-route-generator.js +189 -70
  393. package/dist/esm/api-route-generator.js.map +1 -1
  394. package/dist/esm/auth-generator.d.ts +4 -1
  395. package/dist/esm/auth-generator.d.ts.map +1 -1
  396. package/dist/esm/auth-generator.js +241 -62
  397. package/dist/esm/auth-generator.js.map +1 -1
  398. package/dist/esm/auth-return/signed-in-destination-code.d.ts +17 -0
  399. package/dist/esm/auth-return/signed-in-destination-code.d.ts.map +1 -0
  400. package/dist/esm/auth-return/signed-in-destination-code.js +33 -0
  401. package/dist/esm/auth-return/signed-in-destination-code.js.map +1 -0
  402. package/dist/esm/cart-pricing-preamble.d.ts +12 -0
  403. package/dist/esm/cart-pricing-preamble.d.ts.map +1 -0
  404. package/dist/esm/cart-pricing-preamble.js +19 -0
  405. package/dist/esm/cart-pricing-preamble.js.map +1 -0
  406. package/dist/esm/cron-request-verification.d.ts +24 -0
  407. package/dist/esm/cron-request-verification.d.ts.map +1 -0
  408. package/dist/esm/cron-request-verification.js +80 -0
  409. package/dist/esm/cron-request-verification.js.map +1 -0
  410. package/dist/esm/custom-node-modules.d.ts +30 -0
  411. package/dist/esm/custom-node-modules.d.ts.map +1 -0
  412. package/dist/esm/custom-node-modules.js +84 -0
  413. package/dist/esm/custom-node-modules.js.map +1 -0
  414. package/dist/esm/data-api-route-generator.d.ts +27 -0
  415. package/dist/esm/data-api-route-generator.d.ts.map +1 -1
  416. package/dist/esm/data-api-route-generator.js +365 -28
  417. package/dist/esm/data-api-route-generator.js.map +1 -1
  418. package/dist/esm/ecommerce/cart-availability.d.ts.map +1 -1
  419. package/dist/esm/ecommerce/cart-availability.js +22 -13
  420. package/dist/esm/ecommerce/cart-availability.js.map +1 -1
  421. package/dist/esm/ecommerce/stock-decrement.d.ts +2 -1
  422. package/dist/esm/ecommerce/stock-decrement.d.ts.map +1 -1
  423. package/dist/esm/ecommerce/stock-decrement.js +6 -0
  424. package/dist/esm/ecommerce/stock-decrement.js.map +1 -1
  425. package/dist/esm/executor-generator.d.ts +0 -1
  426. package/dist/esm/executor-generator.d.ts.map +1 -1
  427. package/dist/esm/executor-generator.js +212 -18
  428. package/dist/esm/executor-generator.js.map +1 -1
  429. package/dist/esm/index.d.ts +12 -4
  430. package/dist/esm/index.d.ts.map +1 -1
  431. package/dist/esm/index.js +10 -4
  432. package/dist/esm/index.js.map +1 -1
  433. package/dist/esm/invoice/api-routes-code.d.ts +26 -0
  434. package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
  435. package/dist/esm/invoice/api-routes-code.js +421 -390
  436. package/dist/esm/invoice/api-routes-code.js.map +1 -1
  437. package/dist/esm/invoice/data-access-code.d.ts.map +1 -1
  438. package/dist/esm/invoice/data-access-code.js +420 -107
  439. package/dist/esm/invoice/data-access-code.js.map +1 -1
  440. package/dist/esm/invoice/index.d.ts.map +1 -1
  441. package/dist/esm/invoice/index.js +25 -1
  442. package/dist/esm/invoice/index.js.map +1 -1
  443. package/dist/esm/invoice/invoice-assembly-code.d.ts +12 -0
  444. package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -0
  445. package/dist/esm/invoice/invoice-assembly-code.js +513 -0
  446. package/dist/esm/invoice/invoice-assembly-code.js.map +1 -0
  447. package/dist/esm/invoice/invoice-html-code.d.ts.map +1 -1
  448. package/dist/esm/invoice/invoice-html-code.js +111 -9
  449. package/dist/esm/invoice/invoice-html-code.js.map +1 -1
  450. package/dist/esm/invoice/pdf-service-client-code.d.ts.map +1 -1
  451. package/dist/esm/invoice/pdf-service-client-code.js +3 -4
  452. package/dist/esm/invoice/pdf-service-client-code.js.map +1 -1
  453. package/dist/esm/nodes/account/account-login.d.ts.map +1 -1
  454. package/dist/esm/nodes/account/account-login.js +4 -3
  455. package/dist/esm/nodes/account/account-login.js.map +1 -1
  456. package/dist/esm/nodes/account/account-signup.d.ts.map +1 -1
  457. package/dist/esm/nodes/account/account-signup.js +7 -4
  458. package/dist/esm/nodes/account/account-signup.js.map +1 -1
  459. package/dist/esm/nodes/ai/ai-select-database-data.d.ts.map +1 -1
  460. package/dist/esm/nodes/ai/ai-select-database-data.js +6 -1
  461. package/dist/esm/nodes/ai/ai-select-database-data.js.map +1 -1
  462. package/dist/esm/nodes/browser/browser-get-push-subscription.d.ts +9 -0
  463. package/dist/esm/nodes/browser/browser-get-push-subscription.d.ts.map +1 -0
  464. package/dist/esm/nodes/browser/browser-get-push-subscription.js +22 -0
  465. package/dist/esm/nodes/browser/browser-get-push-subscription.js.map +1 -0
  466. package/dist/esm/nodes/browser/browser-show-notification.d.ts +10 -0
  467. package/dist/esm/nodes/browser/browser-show-notification.d.ts.map +1 -1
  468. package/dist/esm/nodes/browser/browser-show-notification.js +65 -40
  469. package/dist/esm/nodes/browser/browser-show-notification.js.map +1 -1
  470. package/dist/esm/nodes/browser/browser-subscribe-to-push.d.ts +11 -0
  471. package/dist/esm/nodes/browser/browser-subscribe-to-push.d.ts.map +1 -1
  472. package/dist/esm/nodes/browser/browser-subscribe-to-push.js +21 -31
  473. package/dist/esm/nodes/browser/browser-subscribe-to-push.js.map +1 -1
  474. package/dist/esm/nodes/browser/browser-unsubscribe-from-push.d.ts +8 -0
  475. package/dist/esm/nodes/browser/browser-unsubscribe-from-push.d.ts.map +1 -0
  476. package/dist/esm/nodes/browser/browser-unsubscribe-from-push.js +21 -0
  477. package/dist/esm/nodes/browser/browser-unsubscribe-from-push.js.map +1 -0
  478. package/dist/esm/nodes/browser/push-api-access.d.ts +12 -0
  479. package/dist/esm/nodes/browser/push-api-access.d.ts.map +1 -0
  480. package/dist/esm/nodes/browser/push-api-access.js +13 -0
  481. package/dist/esm/nodes/browser/push-api-access.js.map +1 -0
  482. package/dist/esm/nodes/cart/cart-add-item.d.ts.map +1 -1
  483. package/dist/esm/nodes/cart/cart-add-item.js +174 -10
  484. package/dist/esm/nodes/cart/cart-add-item.js.map +1 -1
  485. package/dist/esm/nodes/cart/cart-clear.d.ts.map +1 -1
  486. package/dist/esm/nodes/cart/cart-clear.js +11 -0
  487. package/dist/esm/nodes/cart/cart-clear.js.map +1 -1
  488. package/dist/esm/nodes/cart/cart-get-total.d.ts.map +1 -1
  489. package/dist/esm/nodes/cart/cart-get-total.js +261 -4
  490. package/dist/esm/nodes/cart/cart-get-total.js.map +1 -1
  491. package/dist/esm/nodes/cart/cart-price-order.d.ts +3 -0
  492. package/dist/esm/nodes/cart/cart-price-order.d.ts.map +1 -0
  493. package/dist/esm/nodes/cart/cart-price-order.js +278 -0
  494. package/dist/esm/nodes/cart/cart-price-order.js.map +1 -0
  495. package/dist/esm/nodes/cart/cart-update-item-quantity.d.ts.map +1 -1
  496. package/dist/esm/nodes/cart/cart-update-item-quantity.js +7 -0
  497. package/dist/esm/nodes/cart/cart-update-item-quantity.js.map +1 -1
  498. package/dist/esm/nodes/data/data-count.d.ts.map +1 -1
  499. package/dist/esm/nodes/data/data-count.js +6 -1
  500. package/dist/esm/nodes/data/data-count.js.map +1 -1
  501. package/dist/esm/nodes/data/data-create-item.d.ts.map +1 -1
  502. package/dist/esm/nodes/data/data-create-item.js +11 -1
  503. package/dist/esm/nodes/data/data-create-item.js.map +1 -1
  504. package/dist/esm/nodes/data/data-delete-item.d.ts.map +1 -1
  505. package/dist/esm/nodes/data/data-delete-item.js +29 -0
  506. package/dist/esm/nodes/data/data-delete-item.js.map +1 -1
  507. package/dist/esm/nodes/data/data-raw-query.d.ts.map +1 -1
  508. package/dist/esm/nodes/data/data-raw-query.js +6 -1
  509. package/dist/esm/nodes/data/data-raw-query.js.map +1 -1
  510. package/dist/esm/nodes/data/data-select.d.ts.map +1 -1
  511. package/dist/esm/nodes/data/data-select.js +6 -1
  512. package/dist/esm/nodes/data/data-select.js.map +1 -1
  513. package/dist/esm/nodes/data/data-update-item.d.ts.map +1 -1
  514. package/dist/esm/nodes/data/data-update-item.js +29 -0
  515. package/dist/esm/nodes/data/data-update-item.js.map +1 -1
  516. package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.d.ts.map +1 -1
  517. package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.js +7 -1
  518. package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.js.map +1 -1
  519. package/dist/esm/nodes/file-storage/file-storage-upload.d.ts.map +1 -1
  520. package/dist/esm/nodes/file-storage/file-storage-upload.js +7 -0
  521. package/dist/esm/nodes/file-storage/file-storage-upload.js.map +1 -1
  522. package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
  523. package/dist/esm/nodes/general/general-custom-js.js +21 -5
  524. package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
  525. package/dist/esm/nodes/index.d.ts.map +1 -1
  526. package/dist/esm/nodes/index.js +9 -4
  527. package/dist/esm/nodes/index.js.map +1 -1
  528. package/dist/esm/nodes/payment/payment-billing-portal.d.ts +3 -0
  529. package/dist/esm/nodes/payment/payment-billing-portal.d.ts.map +1 -0
  530. package/dist/esm/nodes/payment/payment-billing-portal.js +49 -0
  531. package/dist/esm/nodes/payment/payment-billing-portal.js.map +1 -0
  532. package/dist/esm/nodes/payment/payment-charge-user.d.ts.map +1 -1
  533. package/dist/esm/nodes/payment/payment-charge-user.js +227 -360
  534. package/dist/esm/nodes/payment/payment-charge-user.js.map +1 -1
  535. package/dist/esm/nodes/payment/payment-close-checkout.d.ts +3 -0
  536. package/dist/esm/nodes/payment/payment-close-checkout.d.ts.map +1 -0
  537. package/dist/esm/nodes/payment/payment-close-checkout.js +138 -0
  538. package/dist/esm/nodes/payment/payment-close-checkout.js.map +1 -0
  539. package/dist/esm/nodes/payment/payment-ensure-subscription-plan.d.ts +3 -0
  540. package/dist/esm/nodes/payment/payment-ensure-subscription-plan.d.ts.map +1 -0
  541. package/dist/esm/nodes/payment/payment-ensure-subscription-plan.js +64 -0
  542. package/dist/esm/nodes/payment/payment-ensure-subscription-plan.js.map +1 -0
  543. package/dist/esm/nodes/payment/payment-manage-subscription.d.ts +3 -0
  544. package/dist/esm/nodes/payment/payment-manage-subscription.d.ts.map +1 -0
  545. package/dist/esm/nodes/payment/payment-manage-subscription.js +86 -0
  546. package/dist/esm/nodes/payment/payment-manage-subscription.js.map +1 -0
  547. package/dist/esm/nodes/payment/payment-refund.d.ts.map +1 -1
  548. package/dist/esm/nodes/payment/payment-refund.js +50 -404
  549. package/dist/esm/nodes/payment/payment-refund.js.map +1 -1
  550. package/dist/esm/nodes/push/push-send-notification.d.ts +14 -0
  551. package/dist/esm/nodes/push/push-send-notification.d.ts.map +1 -0
  552. package/dist/esm/nodes/push/push-send-notification.js +80 -0
  553. package/dist/esm/nodes/push/push-send-notification.js.map +1 -0
  554. package/dist/esm/payments/drivers/coingate-driver-code.d.ts +16 -0
  555. package/dist/esm/payments/drivers/coingate-driver-code.d.ts.map +1 -0
  556. package/dist/esm/payments/drivers/coingate-driver-code.js +467 -0
  557. package/dist/esm/payments/drivers/coingate-driver-code.js.map +1 -0
  558. package/dist/esm/payments/drivers/mollie-driver-code.d.ts +16 -0
  559. package/dist/esm/payments/drivers/mollie-driver-code.d.ts.map +1 -0
  560. package/dist/esm/payments/drivers/mollie-driver-code.js +619 -0
  561. package/dist/esm/payments/drivers/mollie-driver-code.js.map +1 -0
  562. package/dist/esm/payments/drivers/paddle-driver-code.d.ts +12 -0
  563. package/dist/esm/payments/drivers/paddle-driver-code.d.ts.map +1 -0
  564. package/dist/esm/payments/drivers/paddle-driver-code.js +679 -0
  565. package/dist/esm/payments/drivers/paddle-driver-code.js.map +1 -0
  566. package/dist/esm/payments/drivers/paypal-driver-code.d.ts +12 -0
  567. package/dist/esm/payments/drivers/paypal-driver-code.d.ts.map +1 -0
  568. package/dist/esm/payments/drivers/paypal-driver-code.js +1257 -0
  569. package/dist/esm/payments/drivers/paypal-driver-code.js.map +1 -0
  570. package/dist/esm/payments/drivers/razorpay-driver-code.d.ts +12 -0
  571. package/dist/esm/payments/drivers/razorpay-driver-code.d.ts.map +1 -0
  572. package/dist/esm/payments/drivers/razorpay-driver-code.js +728 -0
  573. package/dist/esm/payments/drivers/razorpay-driver-code.js.map +1 -0
  574. package/dist/esm/payments/drivers/square-driver-code.d.ts +14 -0
  575. package/dist/esm/payments/drivers/square-driver-code.d.ts.map +1 -0
  576. package/dist/esm/payments/drivers/square-driver-code.js +927 -0
  577. package/dist/esm/payments/drivers/square-driver-code.js.map +1 -0
  578. package/dist/esm/payments/drivers/stripe-driver-code.d.ts +12 -0
  579. package/dist/esm/payments/drivers/stripe-driver-code.d.ts.map +1 -0
  580. package/dist/esm/payments/drivers/stripe-driver-code.js +774 -0
  581. package/dist/esm/payments/drivers/stripe-driver-code.js.map +1 -0
  582. package/dist/esm/payments/index.d.ts +66 -0
  583. package/dist/esm/payments/index.d.ts.map +1 -0
  584. package/dist/esm/payments/index.js +164 -0
  585. package/dist/esm/payments/index.js.map +1 -0
  586. package/dist/esm/payments/payment-core-code.d.ts +19 -0
  587. package/dist/esm/payments/payment-core-code.d.ts.map +1 -0
  588. package/dist/esm/payments/payment-core-code.js +418 -0
  589. package/dist/esm/payments/payment-core-code.js.map +1 -0
  590. package/dist/esm/payments/payment-driver-code-map.d.ts +4 -0
  591. package/dist/esm/payments/payment-driver-code-map.d.ts.map +1 -0
  592. package/dist/esm/payments/payment-driver-code-map.js +18 -0
  593. package/dist/esm/payments/payment-driver-code-map.js.map +1 -0
  594. package/dist/esm/payments/payment-drivers-scope.d.ts +35 -0
  595. package/dist/esm/payments/payment-drivers-scope.d.ts.map +1 -0
  596. package/dist/esm/payments/payment-drivers-scope.js +51 -0
  597. package/dist/esm/payments/payment-drivers-scope.js.map +1 -0
  598. package/dist/esm/payments/payment-registry-code.d.ts +8 -0
  599. package/dist/esm/payments/payment-registry-code.d.ts.map +1 -0
  600. package/dist/esm/payments/payment-registry-code.js +37 -0
  601. package/dist/esm/payments/payment-registry-code.js.map +1 -0
  602. package/dist/esm/pg-client-code.d.ts +10 -0
  603. package/dist/esm/pg-client-code.d.ts.map +1 -1
  604. package/dist/esm/pg-client-code.js +25 -0
  605. package/dist/esm/pg-client-code.js.map +1 -1
  606. package/dist/esm/runtime-storage-generator.d.ts +28 -0
  607. package/dist/esm/runtime-storage-generator.d.ts.map +1 -1
  608. package/dist/esm/runtime-storage-generator.js +239 -4
  609. package/dist/esm/runtime-storage-generator.js.map +1 -1
  610. package/dist/esm/secret-collector.d.ts.map +1 -1
  611. package/dist/esm/secret-collector.js +8 -3
  612. package/dist/esm/secret-collector.js.map +1 -1
  613. package/dist/esm/security-scanner.d.ts +10 -1
  614. package/dist/esm/security-scanner.d.ts.map +1 -1
  615. package/dist/esm/security-scanner.js +18 -0
  616. package/dist/esm/security-scanner.js.map +1 -1
  617. package/dist/esm/segment-context-needs.d.ts +38 -0
  618. package/dist/esm/segment-context-needs.d.ts.map +1 -0
  619. package/dist/esm/segment-context-needs.js +125 -0
  620. package/dist/esm/segment-context-needs.js.map +1 -0
  621. package/dist/esm/segment-splitter.d.ts.map +1 -1
  622. package/dist/esm/segment-splitter.js +6 -1
  623. package/dist/esm/segment-splitter.js.map +1 -1
  624. package/dist/esm/segment-trust.d.ts +50 -0
  625. package/dist/esm/segment-trust.d.ts.map +1 -0
  626. package/dist/esm/segment-trust.js +111 -0
  627. package/dist/esm/segment-trust.js.map +1 -0
  628. package/dist/esm/sent-email-log/sent-email-log-code.d.ts +19 -0
  629. package/dist/esm/sent-email-log/sent-email-log-code.d.ts.map +1 -1
  630. package/dist/esm/sent-email-log/sent-email-log-code.js +2 -25
  631. package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -1
  632. package/dist/esm/server-runtime-code.d.ts +34 -0
  633. package/dist/esm/server-runtime-code.d.ts.map +1 -0
  634. package/dist/esm/server-runtime-code.js +299 -0
  635. package/dist/esm/server-runtime-code.js.map +1 -0
  636. package/dist/esm/session-cookie-resolver.d.ts +3 -78
  637. package/dist/esm/session-cookie-resolver.d.ts.map +1 -1
  638. package/dist/esm/session-cookie-resolver.js +7 -274
  639. package/dist/esm/session-cookie-resolver.js.map +1 -1
  640. package/dist/esm/subscriber-access-route-generator.d.ts +71 -0
  641. package/dist/esm/subscriber-access-route-generator.d.ts.map +1 -0
  642. package/dist/esm/subscriber-access-route-generator.js +292 -0
  643. package/dist/esm/subscriber-access-route-generator.js.map +1 -0
  644. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  645. package/dist/esm/types.d.ts +6 -0
  646. package/dist/esm/types.d.ts.map +1 -1
  647. package/dist/esm/webhook-delivery-lease/index.d.ts +8 -0
  648. package/dist/esm/webhook-delivery-lease/index.d.ts.map +1 -0
  649. package/dist/esm/webhook-delivery-lease/index.js +37 -0
  650. package/dist/esm/webhook-delivery-lease/index.js.map +1 -0
  651. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.d.ts +26 -0
  652. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.d.ts.map +1 -0
  653. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.js +147 -0
  654. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.js.map +1 -0
  655. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-scope.d.ts +16 -0
  656. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-scope.d.ts.map +1 -0
  657. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-scope.js +16 -0
  658. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-scope.js.map +1 -0
  659. package/dist/esm/webhook-generator.d.ts +1 -1
  660. package/dist/esm/webhook-generator.d.ts.map +1 -1
  661. package/dist/esm/webhook-generator.js +342 -254
  662. package/dist/esm/webhook-generator.js.map +1 -1
  663. package/dist/esm/webhook-signature-verification.d.ts +17 -1
  664. package/dist/esm/webhook-signature-verification.d.ts.map +1 -1
  665. package/dist/esm/webhook-signature-verification.js +179 -25
  666. package/dist/esm/webhook-signature-verification.js.map +1 -1
  667. package/dist/esm/workflow-auth-generator.d.ts +9 -6
  668. package/dist/esm/workflow-auth-generator.d.ts.map +1 -1
  669. package/dist/esm/workflow-auth-generator.js +132 -28
  670. package/dist/esm/workflow-auth-generator.js.map +1 -1
  671. package/dist/esm/workflow-component-plugin.d.ts.map +1 -1
  672. package/dist/esm/workflow-component-plugin.js +65 -28
  673. package/dist/esm/workflow-component-plugin.js.map +1 -1
  674. package/dist/esm/workflow-project-plugin.d.ts +13 -0
  675. package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
  676. package/dist/esm/workflow-project-plugin.js +212 -63
  677. package/dist/esm/workflow-project-plugin.js.map +1 -1
  678. package/package.json +4 -4
  679. package/src/admin-form-hydration.ts +28 -0
  680. package/src/api-route-generator.ts +251 -64
  681. package/src/auth-generator.ts +273 -53
  682. package/src/auth-return/signed-in-destination-code.ts +32 -0
  683. package/src/cart-pricing-preamble.ts +22 -0
  684. package/src/cron-request-verification.ts +79 -0
  685. package/src/custom-node-modules.ts +102 -0
  686. package/src/data-api-route-generator.ts +370 -28
  687. package/src/ecommerce/cart-availability.ts +22 -13
  688. package/src/ecommerce/stock-decrement.ts +13 -1
  689. package/src/executor-generator.ts +212 -19
  690. package/src/index.ts +28 -7
  691. package/src/invoice/api-routes-code.ts +424 -391
  692. package/src/invoice/data-access-code.ts +431 -110
  693. package/src/invoice/index.ts +31 -1
  694. package/src/invoice/invoice-assembly-code.ts +514 -0
  695. package/src/invoice/invoice-html-code.ts +111 -9
  696. package/src/invoice/pdf-service-client-code.ts +3 -4
  697. package/src/nodes/account/account-login.ts +4 -3
  698. package/src/nodes/account/account-signup.ts +7 -4
  699. package/src/nodes/ai/ai-select-database-data.ts +10 -1
  700. package/src/nodes/browser/browser-get-push-subscription.ts +23 -0
  701. package/src/nodes/browser/browser-show-notification.ts +61 -38
  702. package/src/nodes/browser/browser-subscribe-to-push.ts +26 -36
  703. package/src/nodes/browser/browser-unsubscribe-from-push.ts +22 -0
  704. package/src/nodes/browser/push-api-access.ts +20 -0
  705. package/src/nodes/cart/cart-add-item.ts +200 -9
  706. package/src/nodes/cart/cart-clear.ts +11 -0
  707. package/src/nodes/cart/cart-get-total.ts +279 -7
  708. package/src/nodes/cart/cart-price-order.ts +351 -0
  709. package/src/nodes/cart/cart-update-item-quantity.ts +7 -0
  710. package/src/nodes/data/data-count.ts +9 -1
  711. package/src/nodes/data/data-create-item.ts +15 -1
  712. package/src/nodes/data/data-delete-item.ts +32 -0
  713. package/src/nodes/data/data-raw-query.ts +9 -1
  714. package/src/nodes/data/data-select.ts +9 -1
  715. package/src/nodes/data/data-update-item.ts +32 -0
  716. package/src/nodes/ecommerce/ecommerce-generate-invoice.ts +11 -1
  717. package/src/nodes/file-storage/file-storage-upload.ts +8 -0
  718. package/src/nodes/general/general-custom-js.ts +21 -5
  719. package/src/nodes/index.ts +16 -6
  720. package/src/nodes/payment/payment-billing-portal.ts +51 -0
  721. package/src/nodes/payment/payment-charge-user.ts +236 -442
  722. package/src/nodes/payment/payment-close-checkout.ts +137 -0
  723. package/src/nodes/payment/payment-ensure-subscription-plan.ts +66 -0
  724. package/src/nodes/payment/payment-manage-subscription.ts +89 -0
  725. package/src/nodes/payment/payment-refund.ts +52 -467
  726. package/src/nodes/payment-drivers-global.d.ts +13 -0
  727. package/src/nodes/push/push-send-notification.ts +83 -0
  728. package/src/nodes/workflow-utils-global.d.ts +5 -0
  729. package/src/payments/drivers/coingate-driver-code.ts +466 -0
  730. package/src/payments/drivers/mollie-driver-code.ts +618 -0
  731. package/src/payments/drivers/paddle-driver-code.ts +678 -0
  732. package/src/payments/drivers/paypal-driver-code.ts +1256 -0
  733. package/src/payments/drivers/razorpay-driver-code.ts +727 -0
  734. package/src/payments/drivers/square-driver-code.ts +926 -0
  735. package/src/payments/drivers/stripe-driver-code.ts +773 -0
  736. package/src/payments/index.ts +204 -0
  737. package/src/payments/payment-core-code.ts +421 -0
  738. package/src/payments/payment-driver-code-map.ts +19 -0
  739. package/src/payments/payment-drivers-scope.ts +66 -0
  740. package/src/payments/payment-registry-code.ts +38 -0
  741. package/src/pg-client-code.ts +30 -0
  742. package/src/runtime-storage-generator.ts +241 -4
  743. package/src/secret-collector.ts +8 -3
  744. package/src/security-scanner.ts +22 -0
  745. package/src/segment-context-needs.ts +148 -0
  746. package/src/segment-splitter.ts +6 -1
  747. package/src/segment-trust.ts +170 -0
  748. package/src/sent-email-log/sent-email-log-code.ts +2 -32
  749. package/src/server-runtime-code.ts +298 -0
  750. package/src/session-cookie-resolver.ts +9 -277
  751. package/src/subscriber-access-route-generator.ts +351 -0
  752. package/src/types.ts +6 -0
  753. package/src/webhook-delivery-lease/index.ts +44 -0
  754. package/src/webhook-delivery-lease/webhook-delivery-lease-code.ts +151 -0
  755. package/src/webhook-delivery-lease/webhook-delivery-lease-scope.ts +18 -0
  756. package/src/webhook-generator.ts +359 -260
  757. package/src/webhook-signature-verification.ts +180 -25
  758. package/src/workflow-auth-generator.ts +137 -28
  759. package/src/workflow-component-plugin.ts +77 -20
  760. package/src/workflow-project-plugin.ts +247 -44
  761. package/dist/cjs/nodes/payment/payment-cancel-plan.d.ts +0 -3
  762. package/dist/cjs/nodes/payment/payment-cancel-plan.d.ts.map +0 -1
  763. package/dist/cjs/nodes/payment/payment-cancel-plan.js +0 -33
  764. package/dist/cjs/nodes/payment/payment-cancel-plan.js.map +0 -1
  765. package/dist/cjs/nodes/payment/payment-create-subscription.d.ts +0 -3
  766. package/dist/cjs/nodes/payment/payment-create-subscription.d.ts.map +0 -1
  767. package/dist/cjs/nodes/payment/payment-create-subscription.js +0 -41
  768. package/dist/cjs/nodes/payment/payment-create-subscription.js.map +0 -1
  769. package/dist/cjs/nodes/payment/payment-subscribe-to-plan.d.ts +0 -3
  770. package/dist/cjs/nodes/payment/payment-subscribe-to-plan.d.ts.map +0 -1
  771. package/dist/cjs/nodes/payment/payment-subscribe-to-plan.js +0 -45
  772. package/dist/cjs/nodes/payment/payment-subscribe-to-plan.js.map +0 -1
  773. package/dist/esm/nodes/payment/payment-cancel-plan.d.ts +0 -3
  774. package/dist/esm/nodes/payment/payment-cancel-plan.d.ts.map +0 -1
  775. package/dist/esm/nodes/payment/payment-cancel-plan.js +0 -30
  776. package/dist/esm/nodes/payment/payment-cancel-plan.js.map +0 -1
  777. package/dist/esm/nodes/payment/payment-create-subscription.d.ts +0 -3
  778. package/dist/esm/nodes/payment/payment-create-subscription.d.ts.map +0 -1
  779. package/dist/esm/nodes/payment/payment-create-subscription.js +0 -38
  780. package/dist/esm/nodes/payment/payment-create-subscription.js.map +0 -1
  781. package/dist/esm/nodes/payment/payment-subscribe-to-plan.d.ts +0 -3
  782. package/dist/esm/nodes/payment/payment-subscribe-to-plan.d.ts.map +0 -1
  783. package/dist/esm/nodes/payment/payment-subscribe-to-plan.js +0 -42
  784. package/dist/esm/nodes/payment/payment-subscribe-to-plan.js.map +0 -1
  785. package/src/nodes/payment/payment-cancel-plan.ts +0 -33
  786. package/src/nodes/payment/payment-create-subscription.ts +0 -42
  787. package/src/nodes/payment/payment-subscribe-to-plan.ts +0 -46
@@ -0,0 +1,316 @@
1
+ import { generateWebhookDeliveryLeaseCode } from '../src/webhook-delivery-lease/webhook-delivery-lease-code'
2
+ import { generateWebhookWorkflowAPIRoute } from '../src/api-route-generator'
3
+ import { loadServerRuntime } from './_helpers/load-server-runtime'
4
+ import { withFetch } from './_helpers/fake-fetch'
5
+
6
+ /**
7
+ * One payment webhook delivery at a time. The lease module and the route that
8
+ * uses it are EXECUTED: the module against a stubbed `pg`, the route with a
9
+ * stubbed lease, so a twin delivery is proven to be turned away while the
10
+ * first runs and every claim to be released before the route replies.
11
+ */
12
+
13
+ interface StubQuery {
14
+ sql: string
15
+ values: unknown[]
16
+ }
17
+
18
+ const noop = (): void => undefined
19
+ const silentConsole = { warn: noop, error: noop, log: noop, info: noop }
20
+
21
+ const loadLease = (options: {
22
+ queryImpl?: (sql: string, values: unknown[]) => Promise<unknown>
23
+ pgAvailable?: boolean
24
+ pgSupported?: boolean
25
+ }) => {
26
+ const queries: StubQuery[] = []
27
+ const queryImpl =
28
+ options.queryImpl ||
29
+ (async (sql: string, values: unknown[]) =>
30
+ sql.startsWith('INSERT') ? { rows: [{ claim_token: values[1] }] } : { rows: [] })
31
+ class Client {
32
+ async connect(): Promise<void> {
33
+ return undefined
34
+ }
35
+ async query(sql: string, values: unknown[]) {
36
+ queries.push({ sql, values })
37
+ return queryImpl(sql, values)
38
+ }
39
+ async end(): Promise<void> {
40
+ return undefined
41
+ }
42
+ }
43
+ const requireShim = (id: string) => {
44
+ if (id === 'pg') {
45
+ if (options.pgAvailable === false) {
46
+ throw new Error("Cannot find module 'pg'")
47
+ }
48
+ return { Client }
49
+ }
50
+ if (id === 'crypto') {
51
+ return require('crypto')
52
+ }
53
+ throw new Error('unexpected require: ' + id)
54
+ }
55
+ const savedConnection = process.env.TELEPORT_DB_CONNECTION_STRING
56
+ process.env.TELEPORT_DB_CONNECTION_STRING = 'postgresql://u:p@localhost:5432/db'
57
+ const module = { exports: {} as any }
58
+ // eslint-disable-next-line no-new-func
59
+ new Function(
60
+ 'module',
61
+ 'exports',
62
+ 'require',
63
+ 'process',
64
+ 'console',
65
+ 'Buffer',
66
+ generateWebhookDeliveryLeaseCode({ pgSupported: options.pgSupported !== false })
67
+ )(module, module.exports, requireShim, process, silentConsole, Buffer)
68
+ const restore = () => {
69
+ if (savedConnection === undefined) {
70
+ delete process.env.TELEPORT_DB_CONNECTION_STRING
71
+ } else {
72
+ process.env.TELEPORT_DB_CONNECTION_STRING = savedConnection
73
+ }
74
+ }
75
+ return { claim: module.exports.claimWebhookDelivery, queries, restore }
76
+ }
77
+
78
+ describe('webhook delivery lease module', () => {
79
+ it('creates its table once, claims with a fresh token and releases only its own claim', async () => {
80
+ const lease = loadLease({})
81
+ try {
82
+ const first = await lease.claim('webhooks/stripe-payment', Buffer.from('{"id":"evt_1"}'), {
83
+ id: 'evt_1',
84
+ })
85
+ expect(first.claimed).toBe(true)
86
+ expect(lease.queries[0].sql).toMatch(
87
+ /^CREATE TABLE IF NOT EXISTS "teleport_webhook_deliveries"/
88
+ )
89
+ const claim = lease.queries[1]
90
+ expect(claim.sql).toContain('ON CONFLICT (delivery_key) DO UPDATE')
91
+ expect(claim.sql).toContain('WHERE d.claimed_at < NOW() - make_interval(secs => $3::int)')
92
+ expect(claim.values[0]).toMatch(/^[0-9a-f]{64}$/)
93
+ expect(claim.values[2]).toBe(300)
94
+ await first.release()
95
+ const release = lease.queries[2]
96
+ expect(release.sql).toMatch(
97
+ /^DELETE FROM "teleport_webhook_deliveries" WHERE \(delivery_key = \$1 AND claim_token = \$2\)/
98
+ )
99
+ expect(release.values).toEqual([claim.values[0], claim.values[1]])
100
+ // The table is not created again by the next delivery.
101
+ await lease.claim('webhooks/stripe-payment', Buffer.from('{"id":"evt_2"}'), { id: 'evt_2' })
102
+ expect(lease.queries[3].sql).toMatch(/^INSERT INTO/)
103
+ } finally {
104
+ lease.restore()
105
+ }
106
+ })
107
+
108
+ it('reports a delivery whose twin holds the claim as not claimed', async () => {
109
+ const lease = loadLease({ queryImpl: async () => ({ rows: [] }) })
110
+ try {
111
+ const twin = await lease.claim('webhooks/paddle-payment', Buffer.from('{}'), {})
112
+ expect(twin.claimed).toBe(false)
113
+ await twin.release()
114
+ expect(lease.queries.filter((query) => query.sql.startsWith('DELETE'))).toHaveLength(0)
115
+ } finally {
116
+ lease.restore()
117
+ }
118
+ })
119
+
120
+ it('keys a delivery on the webhook, the body and the state it was verified as', async () => {
121
+ const lease = loadLease({})
122
+ try {
123
+ const keyOf = async (scope: string, raw: string, verified: unknown) => {
124
+ await lease.claim(scope, Buffer.from(raw), verified)
125
+ return lease.queries.filter((query) => query.sql.startsWith('INSERT')).pop()!.values[0]
126
+ }
127
+ const paid = await keyOf('webhooks/mollie-payment', 'id=tr_1', { status: 'paid' })
128
+ expect(await keyOf('webhooks/mollie-payment', 'id=tr_1', { status: 'paid' })).toBe(paid)
129
+ // Mollie posts the same id for every change: the fetched state tells them apart.
130
+ expect(await keyOf('webhooks/mollie-payment', 'id=tr_1', { status: 'expired' })).not.toBe(
131
+ paid
132
+ )
133
+ expect(await keyOf('webhooks/coingate-payment', 'id=tr_1', { status: 'paid' })).not.toBe(paid)
134
+ } finally {
135
+ lease.restore()
136
+ }
137
+ })
138
+
139
+ it('lets every delivery run when it cannot hold a lease', async () => {
140
+ const noDriver = loadLease({ pgAvailable: false })
141
+ try {
142
+ expect((await noDriver.claim('w', Buffer.from('{}'), {})).claimed).toBe(true)
143
+ expect(noDriver.queries).toHaveLength(0)
144
+ } finally {
145
+ noDriver.restore()
146
+ }
147
+ const failing = loadLease({
148
+ queryImpl: async () => {
149
+ throw Object.assign(new Error('permission denied'), { code: '42501' })
150
+ },
151
+ })
152
+ try {
153
+ expect((await failing.claim('w', Buffer.from('{}'), {})).claimed).toBe(true)
154
+ // Disabled for the process after a privilege error: nothing is tried again.
155
+ const tried = failing.queries.length
156
+ expect((await failing.claim('w', Buffer.from('{}'), {})).claimed).toBe(true)
157
+ expect(failing.queries).toHaveLength(tried)
158
+ } finally {
159
+ failing.restore()
160
+ }
161
+ const otherDatabase = loadLease({ pgSupported: false })
162
+ try {
163
+ expect((await otherDatabase.claim('w', Buffer.from('{}'), {})).claimed).toBe(true)
164
+ expect(otherDatabase.queries).toHaveLength(0)
165
+ } finally {
166
+ otherDatabase.restore()
167
+ }
168
+ })
169
+ })
170
+
171
+ const ECHO_URL = 'https://echo.test/received'
172
+
173
+ const workflow = (webhookConfig: Record<string, unknown>, failing = false) =>
174
+ ({
175
+ id: 'wf-1',
176
+ name: 'Payment webhook',
177
+ trigger: { type: 'event-webhook-triggered', nodeId: 't', scope: 'global', config: {} },
178
+ nodes: [
179
+ {
180
+ id: 'echo',
181
+ type: 'general-http-request',
182
+ config: {
183
+ url: failing ? 'https://echo.test/fails' : ECHO_URL,
184
+ method: 'POST',
185
+ body: { type: 'workflowContext', nodeId: 't', path: ['body'] },
186
+ },
187
+ stepNumber: 1,
188
+ label: 'Echo',
189
+ },
190
+ ],
191
+ edges: [{ id: 'e1', source: 't', target: 'echo' }],
192
+ webhookConfig: { httpMethod: 'POST', ...webhookConfig },
193
+ } as any)
194
+
195
+ interface LeaseLog {
196
+ claims: Array<{ scope: string; body: unknown }>
197
+ releases: number
198
+ events: string[]
199
+ }
200
+
201
+ const loadRoute = (source: string, claimed: boolean, log: LeaseLog) => {
202
+ const runtime = { exports: loadServerRuntime() }
203
+ const requireShim = (id: string) => {
204
+ if (id.endsWith('/utils/workflows/server-runtime')) {
205
+ return runtime.exports
206
+ }
207
+ if (id.endsWith('/utils/payments')) {
208
+ return {
209
+ get: () => ({
210
+ verifyWebhook: async (input: { body: unknown }) => ({ ok: true, body: input.body }),
211
+ }),
212
+ }
213
+ }
214
+ if (id.endsWith('/utils/workflows/webhook-delivery-lease')) {
215
+ return {
216
+ claimWebhookDelivery: async (scope: string, _raw: Buffer, body: unknown) => {
217
+ log.claims.push({ scope, body })
218
+ log.events.push('claim')
219
+ return {
220
+ claimed,
221
+ release: async () => {
222
+ log.releases += 1
223
+ log.events.push('release')
224
+ },
225
+ }
226
+ },
227
+ }
228
+ }
229
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
230
+ return require(id)
231
+ }
232
+ const module = { exports: null as any }
233
+ // eslint-disable-next-line no-new-func
234
+ new Function('module', 'exports', 'require', source)(module, {}, requireShim)
235
+ return module.exports as (req: unknown, res: unknown) => Promise<void>
236
+ }
237
+
238
+ const post = async (handler: (req: unknown, res: unknown) => Promise<void>, log: LeaseLog) => {
239
+ const reply = { status: 0, body: null as unknown, headers: {} as Record<string, string> }
240
+ const res = {
241
+ setHeader(name: string, value: string) {
242
+ reply.headers[name] = value
243
+ },
244
+ status(code: number) {
245
+ reply.status = code
246
+ return {
247
+ json(payload: unknown) {
248
+ log.events.push('reply ' + code)
249
+ reply.body = payload
250
+ },
251
+ }
252
+ },
253
+ }
254
+ const req = {
255
+ method: 'POST',
256
+ url: '/api/webhooks/paddle-payment',
257
+ query: {},
258
+ headers: { host: 'shop.test', 'content-type': 'application/json' },
259
+ body: Buffer.from('{"event_id":"evt_1"}'),
260
+ }
261
+ const ran: unknown[] = []
262
+ await withFetch(
263
+ (call) => {
264
+ if (call.url === ECHO_URL) {
265
+ ran.push(call.json)
266
+ return { status: 200, body: {} }
267
+ }
268
+ throw new Error('network down')
269
+ },
270
+ () => handler(req, res)
271
+ )
272
+ return { reply, ran }
273
+ }
274
+
275
+ describe('generated payment webhook route — delivery lease', () => {
276
+ const paymentSource = generateWebhookWorkflowAPIRoute(
277
+ workflow({ urlPath: 'webhooks/paddle-payment', verifySignature: true })
278
+ )
279
+
280
+ it('runs a claimed delivery and releases the claim before replying', async () => {
281
+ const log: LeaseLog = { claims: [], releases: 0, events: [] }
282
+ const { reply, ran } = await post(loadRoute(paymentSource, true, log), log)
283
+ expect(reply.status).toBe(200)
284
+ expect(ran).toEqual([{ event_id: 'evt_1' }])
285
+ expect(log.claims).toEqual([{ scope: 'webhooks/paddle-payment', body: { event_id: 'evt_1' } }])
286
+ expect(log.events).toEqual(['claim', 'release', 'reply 200'])
287
+ })
288
+
289
+ it('turns a twin away while the first delivery runs, asking the provider to come back', async () => {
290
+ const log: LeaseLog = { claims: [], releases: 0, events: [] }
291
+ const { reply, ran } = await post(loadRoute(paymentSource, false, log), log)
292
+ expect(reply.status).toBe(503)
293
+ expect(reply.headers['Retry-After']).toBe('60')
294
+ expect(ran).toEqual([])
295
+ expect(log.releases).toBe(0)
296
+ })
297
+
298
+ it('releases the claim of a run that failed, so the retry runs', async () => {
299
+ const failingSource = generateWebhookWorkflowAPIRoute(
300
+ workflow({ urlPath: 'webhooks/paddle-payment', verifySignature: true }, true)
301
+ )
302
+ const log: LeaseLog = { claims: [], releases: 0, events: [] }
303
+ const { reply } = await post(loadRoute(failingSource, true, log), log)
304
+ expect(reply.status).toBe(500)
305
+ expect(log.events).toEqual(['claim', 'release', 'reply 500'])
306
+ })
307
+
308
+ it('leaves every other webhook without a lease', () => {
309
+ const other = generateWebhookWorkflowAPIRoute(
310
+ workflow({ urlPath: 'webhooks/orders', verifySignature: false })
311
+ )
312
+ expect(other).not.toContain('webhook-delivery-lease')
313
+ expect(other).not.toContain('__delivery')
314
+ expect(paymentSource).toContain("require('../../../utils/workflows/webhook-delivery-lease')")
315
+ })
316
+ })
@@ -19,14 +19,45 @@ type Guard = (
19
19
  policy: any
20
20
  ) => Promise<{ status: number; message: string } | null>
21
21
 
22
+ /** What the stubbed `utils/auth/subscriber-access` module answers, and what it was asked. */
23
+ interface SubscriberAccessStub {
24
+ entitled?: boolean
25
+ throws?: boolean
26
+ /** `null` boots the guard with the module ABSENT (a project with no subscriber-only page). */
27
+ absent?: boolean
28
+ calls: Array<{ userId: string; productIds: string[] }>
29
+ }
30
+
31
+ /** What the stubbed server runtime accepts as this deployment's internal-call token. */
32
+ const INTERNAL_TOKEN = 'internal-call-token'
33
+
22
34
  /** Boots the emitted guard file with getToken stubbed to read `req.__token`. */
23
- function bootGuard(secret: string | undefined): Guard {
24
- const code = generateWorkflowAuthHelperFile()
35
+ function bootGuard(secret: string | undefined, subscriberAccess?: SubscriberAccessStub): Guard {
36
+ const code = generateWorkflowAuthHelperFile({
37
+ withSubscriberAccess: Boolean(subscriberAccess && !subscriberAccess.absent),
38
+ })
25
39
  const moduleObj: { exports: any } = { exports: {} }
26
40
  const fakeRequire = (name: string): any => {
27
41
  if (name === 'next-auth/jwt') {
28
42
  return { getToken: async ({ req }: any) => (req && req.__token) || null }
29
43
  }
44
+ if (name === './server-runtime') {
45
+ return { isInternalCall: (req: any) => req.headers['x-teleport-internal'] === INTERNAL_TOKEN }
46
+ }
47
+ if (name === '../auth/subscriber-access') {
48
+ if (!subscriberAccess || subscriberAccess.absent) {
49
+ throw new Error(`Cannot find module '${name}'`)
50
+ }
51
+ return {
52
+ isSubscriberEntitled: async (userId: string, productIds: string[]) => {
53
+ subscriberAccess.calls.push({ userId, productIds })
54
+ if (subscriberAccess.throws) {
55
+ throw new Error('database down')
56
+ }
57
+ return subscriberAccess.entitled === true
58
+ },
59
+ }
60
+ }
30
61
  // eslint-disable-next-line @typescript-eslint/no-var-requires
31
62
  return require(name)
32
63
  }
@@ -42,6 +73,40 @@ function bootGuard(secret: string | undefined): Guard {
42
73
 
43
74
  const reqWith = (extra: Record<string, unknown> = {}): any => ({ headers: {}, ...extra })
44
75
 
76
+ describe("guardWorkflowRequest — calls from this deployment's own server code", () => {
77
+ const serverOnly = { requiresAuth: false, allowedRoles: [], serverOnly: true }
78
+ const adminOnly = { requiresAuth: true, allowedRoles: ['admin'] }
79
+
80
+ it('answers a server-only route to the internal-call token alone', async () => {
81
+ const guard = bootGuard('server-secret')
82
+ expect(await guard(reqWith(), {}, serverOnly)).toEqual({
83
+ status: 401,
84
+ message: 'Unauthenticated',
85
+ })
86
+ expect(await guard(reqWith({ __token: { id: 'u1', role: 'admin' } }), {}, serverOnly)).toEqual({
87
+ status: 401,
88
+ message: 'Unauthenticated',
89
+ })
90
+ expect(
91
+ await guard(reqWith({ headers: { 'x-teleport-internal': 'forged' } }), {}, serverOnly)
92
+ ).toEqual({ status: 401, message: 'Unauthenticated' })
93
+ expect(
94
+ await guard(reqWith({ headers: { 'x-teleport-internal': INTERNAL_TOKEN } }), {}, serverOnly)
95
+ ).toBeNull()
96
+ })
97
+
98
+ it('lets the internal-call token through a gated route (a webhook running an admin node)', async () => {
99
+ const guard = bootGuard('server-secret')
100
+ expect(await guard(reqWith(), {}, adminOnly)).toEqual({
101
+ status: 401,
102
+ message: 'Unauthenticated',
103
+ })
104
+ expect(
105
+ await guard(reqWith({ headers: { 'x-teleport-internal': INTERNAL_TOKEN } }), {}, adminOnly)
106
+ ).toBeNull()
107
+ })
108
+ })
109
+
45
110
  describe('guardWorkflowRequest (runtime enforcement)', () => {
46
111
  const guard = bootGuard('server-secret')
47
112
 
@@ -108,6 +173,77 @@ describe('guardWorkflowRequest (runtime enforcement)', () => {
108
173
  expect(context.resolver.email).toBe('x') // other fields untouched
109
174
  })
110
175
 
176
+ it('binds a role claim to the SESSION role, never the one the browser sent', async () => {
177
+ const policy = {
178
+ requiresAuth: true,
179
+ allowedRoles: [],
180
+ userScoped: {
181
+ ownerColumn: 'user_id',
182
+ bindings: [
183
+ { nodeId: 'evaluate', path: ['role'], claim: 'role' },
184
+ { nodeId: 'evaluate', path: ['userId'] },
185
+ ],
186
+ },
187
+ }
188
+ const shopper = { evaluate: { role: 'admin', userId: 'victim-id' } }
189
+ expect(
190
+ await guard(reqWith({ __token: { id: 'shopper-id', role: 'user' } }), shopper, policy)
191
+ ).toBeNull()
192
+ expect(shopper.evaluate).toEqual({ role: 'user', userId: 'shopper-id' })
193
+
194
+ // A session without a role binds '' — an admin check can only fail.
195
+ const roleless = { evaluate: { role: 'admin', userId: 'x' } }
196
+ await guard(reqWith({ __token: { id: 'roleless-id' } }), roleless, policy)
197
+ expect(roleless.evaluate).toEqual({ role: '', userId: 'roleless-id' })
198
+
199
+ const admin = { evaluate: { role: '', userId: '' } }
200
+ await guard(reqWith({ __token: { id: 'admin-id', roleName: 'admin' } }), admin, policy)
201
+ expect(admin.evaluate).toEqual({ role: 'admin', userId: 'admin-id' })
202
+ })
203
+
204
+ it('binds a GUEST role claim to an empty role, so a signed-out request cannot claim admin', async () => {
205
+ // A public (no requiresAuth) route: the guest gets through, but the role it
206
+ // posted must not reach the query. Its anonymous user id is kept.
207
+ const guest = { evaluate: { role: 'admin', userId: 'guest-anon-uuid' } }
208
+ const res = await guard(reqWith(), guest, {
209
+ requiresAuth: false,
210
+ allowedRoles: [],
211
+ userScoped: {
212
+ ownerColumn: 'user_id',
213
+ bindings: [
214
+ { nodeId: 'evaluate', path: ['role'], claim: 'role' },
215
+ { nodeId: 'evaluate', path: ['userId'] },
216
+ ],
217
+ },
218
+ })
219
+ expect(res).toBeNull()
220
+ expect(guest.evaluate).toEqual({ role: '', userId: 'guest-anon-uuid' })
221
+ })
222
+
223
+ it('binds a signedInUserId claim to the session id, and to an empty id for a guest', async () => {
224
+ const policy = {
225
+ requiresAuth: false,
226
+ allowedRoles: [],
227
+ userScoped: {
228
+ ownerColumn: 'user_id',
229
+ bindings: [{ nodeId: 'collect', path: ['signedInUserId'], claim: 'signedInUserId' }],
230
+ },
231
+ }
232
+ const shopper = { collect: { signedInUserId: 'victim-id', city: 'Austin' } }
233
+ await guard(reqWith({ __token: { id: 'shopper-id' } }), shopper, policy)
234
+ expect(shopper.collect).toEqual({ signedInUserId: 'shopper-id', city: 'Austin' })
235
+
236
+ const guest = { collect: { signedInUserId: 'victim-id', city: 'Austin' } }
237
+ expect(await guard(reqWith(), guest, policy)).toBeNull()
238
+ expect(guest.collect).toEqual({ signedInUserId: '', city: 'Austin' })
239
+
240
+ // A segment that runs before the node produced its result still gets the
241
+ // binding, so the node's own later output is what overwrites it.
242
+ const early: any = {}
243
+ await guard(reqWith(), early, policy)
244
+ expect(early.collect).toEqual({ signedInUserId: '' })
245
+ })
246
+
111
247
  it('binds a nested path and creates missing context nodes', async () => {
112
248
  const context: any = {}
113
249
  await guard(reqWith({ __token: { id: 'sess-1' } }), context, {
@@ -274,4 +410,119 @@ describe('buildWorkflowAuthInjection', () => {
274
410
  expect(injection.policyConst).toContain('"userScoped"')
275
411
  expect(injection.guardCall).toContain('guardWorkflowRequest')
276
412
  })
413
+
414
+ it('bakes the subscription requirement and its product ids into the policy', () => {
415
+ const injection = buildWorkflowAuthInjection({
416
+ requiresAuth: true,
417
+ allowedRoles: [],
418
+ requiresSubscription: true,
419
+ subscriptionProductIds: [' prod-1 ', 'prod-2', ''],
420
+ derivedFrom: 'page',
421
+ })
422
+ const policy = JSON.parse(
423
+ injection.policyConst.replace('const __WF_AUTH = ', '').replace(/;\s*$/, '')
424
+ )
425
+ expect(policy).toEqual({
426
+ requiresAuth: true,
427
+ allowedRoles: [],
428
+ requiresSubscription: true,
429
+ subscriptionProductIds: ['prod-1', 'prod-2'],
430
+ })
431
+ const plain = buildWorkflowAuthInjection({
432
+ requiresAuth: true,
433
+ allowedRoles: [],
434
+ derivedFrom: 'page',
435
+ })
436
+ expect(plain.policyConst).not.toContain('requiresSubscription')
437
+ })
438
+ })
439
+
440
+ describe('guardWorkflowRequest on a subscriber-only page', () => {
441
+ const policy = {
442
+ requiresAuth: true,
443
+ allowedRoles: [] as string[],
444
+ requiresSubscription: true,
445
+ subscriptionProductIds: ['prod-1'],
446
+ }
447
+ const anyProduct = {
448
+ requiresAuth: true,
449
+ allowedRoles: [] as string[],
450
+ requiresSubscription: true,
451
+ }
452
+
453
+ it('still answers 401 to a guest before asking about any subscription', async () => {
454
+ const access: SubscriberAccessStub = { entitled: true, calls: [] }
455
+ const res = await bootGuard('server-secret', access)(reqWith(), {}, policy)
456
+ expect(res).toEqual({ status: 401, message: 'Unauthenticated' })
457
+ expect(access.calls).toHaveLength(0)
458
+ })
459
+
460
+ it('lets an entitled member through, asking with the SESSION id and the product ids', async () => {
461
+ const access: SubscriberAccessStub = { entitled: true, calls: [] }
462
+ const guard = bootGuard('server-secret', access)
463
+ expect(await guard(reqWith({ __token: { id: 'u1' } }), {}, policy)).toBeNull()
464
+ expect(access.calls).toEqual([{ userId: 'u1', productIds: ['prod-1'] }])
465
+ expect(await guard(reqWith({ __token: { sub: 'u2' } }), {}, anyProduct)).toBeNull()
466
+ expect(access.calls[1]).toEqual({ userId: 'u2', productIds: [] })
467
+ })
468
+
469
+ it('answers 403 Subscription required to a member without one', async () => {
470
+ const access: SubscriberAccessStub = { entitled: false, calls: [] }
471
+ const res = await bootGuard('server-secret', access)(
472
+ reqWith({ __token: { id: 'u1' } }),
473
+ {},
474
+ policy
475
+ )
476
+ expect(res).toEqual({ status: 403, message: 'Subscription required' })
477
+ })
478
+
479
+ it('checks the role first, and fails closed when the check itself fails or is missing', async () => {
480
+ const access: SubscriberAccessStub = { entitled: true, calls: [] }
481
+ const wrongRole = await bootGuard('server-secret', access)(
482
+ reqWith({ __token: { id: 'u1', role: 'user' } }),
483
+ {},
484
+ { ...policy, allowedRoles: ['admin'] }
485
+ )
486
+ expect(wrongRole).toEqual({ status: 403, message: 'Forbidden' })
487
+ expect(access.calls).toHaveLength(0)
488
+
489
+ const down = await bootGuard('server-secret', { throws: true, calls: [] })(
490
+ reqWith({ __token: { id: 'u1' } }),
491
+ {},
492
+ policy
493
+ )
494
+ expect(down).toEqual({ status: 403, message: 'Subscription required' })
495
+ const absent = await bootGuard('server-secret', { absent: true, calls: [] })(
496
+ reqWith({ __token: { id: 'u1' } }),
497
+ {},
498
+ policy
499
+ )
500
+ expect(absent).toEqual({ status: 403, message: 'Subscription required' })
501
+ })
502
+
503
+ it('never asks for a policy without the requirement, and lets an internal caller through', async () => {
504
+ const access: SubscriberAccessStub = { entitled: false, calls: [] }
505
+ const guard = bootGuard('server-secret', access)
506
+ expect(
507
+ await guard(reqWith({ __token: { id: 'u1' } }), {}, { requiresAuth: true, allowedRoles: [] })
508
+ ).toBeNull()
509
+ expect(
510
+ await guard(reqWith({ headers: { 'x-internal-data-secret': 'server-secret' } }), {}, policy)
511
+ ).toBeNull()
512
+ expect(access.calls).toHaveLength(0)
513
+ })
514
+ })
515
+
516
+ describe('subscriber-access require', () => {
517
+ // A require is a static import to the bundler even inside a function, so it
518
+ // must not appear when utils/auth/subscriber-access.js is not emitted.
519
+ it('is absent from a project with no subscriber-only page', () => {
520
+ expect(generateWorkflowAuthHelperFile()).not.toContain('../auth/subscriber-access')
521
+ })
522
+
523
+ it('is present when a page is subscriber-only', () => {
524
+ expect(generateWorkflowAuthHelperFile({ withSubscriberAccess: true })).toContain(
525
+ "require('../auth/subscriber-access')"
526
+ )
527
+ })
277
528
  })
@@ -0,0 +1,10 @@
1
+ import { UIDLStateDefinition } from '@teleporthq/teleport-types';
2
+ /**
3
+ * The state a page's initial props are copied into on mount. The page's states
4
+ * arrive in no particular order (the editor stores them by id), so an update
5
+ * page with several object states — a form and an editor's view state — must
6
+ * name its form: the `<entity>SelectedItemData` state wins, and a page without
7
+ * one keeps its only (first) object state.
8
+ */
9
+ export declare function findFormStateKeyForHydration(stateDefinitions: Record<string, UIDLStateDefinition>): string | undefined;
10
+ //# sourceMappingURL=admin-form-hydration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-form-hydration.d.ts","sourceRoot":"","sources":["../../src/admin-form-hydration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAahE;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GACpD,MAAM,GAAG,SAAS,CAKpB"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findFormStateKeyForHydration = void 0;
4
+ /** An admin update page keeps the row it loads in `<entity>SelectedItemData`. */
5
+ const SELECTED_ITEM_DATA_STATE = /SelectedItemData$/;
6
+ const isFormDataState = (definition) => !!definition &&
7
+ definition.type === 'object' &&
8
+ typeof definition.defaultValue === 'object' &&
9
+ definition.defaultValue !== null &&
10
+ !Array.isArray(definition.defaultValue) &&
11
+ Object.keys(definition.defaultValue).length > 0;
12
+ /**
13
+ * The state a page's initial props are copied into on mount. The page's states
14
+ * arrive in no particular order (the editor stores them by id), so an update
15
+ * page with several object states — a form and an editor's view state — must
16
+ * name its form: the `<entity>SelectedItemData` state wins, and a page without
17
+ * one keeps its only (first) object state.
18
+ */
19
+ function findFormStateKeyForHydration(stateDefinitions) {
20
+ var _a;
21
+ const candidates = Object.keys(stateDefinitions).filter((key) => isFormDataState(stateDefinitions[key]));
22
+ return (_a = candidates.find((key) => SELECTED_ITEM_DATA_STATE.test(key))) !== null && _a !== void 0 ? _a : candidates[0];
23
+ }
24
+ exports.findFormStateKeyForHydration = findFormStateKeyForHydration;
25
+ //# sourceMappingURL=admin-form-hydration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-form-hydration.js","sourceRoot":"","sources":["../../src/admin-form-hydration.ts"],"names":[],"mappings":";;;AAEA,iFAAiF;AACjF,MAAM,wBAAwB,GAAG,mBAAmB,CAAA;AAEpD,MAAM,eAAe,GAAG,CAAC,UAA2C,EAAW,EAAE,CAC/E,CAAC,CAAC,UAAU;IACZ,UAAU,CAAC,IAAI,KAAK,QAAQ;IAC5B,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ;IAC3C,UAAU,CAAC,YAAY,KAAK,IAAI;IAChC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;IACvC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAuC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AAE5E;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAC1C,gBAAqD;;IAErD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9D,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CACvC,CAAA;IACD,OAAO,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mCAAI,UAAU,CAAC,CAAC,CAAC,CAAA;AACtF,CAAC;AAPD,oEAOC"}
@@ -1,12 +1,28 @@
1
- import { UIDLWorkflow, UIDLCustomWorkflowNode, UIDLWorkflowProtection } from '@teleporthq/teleport-types';
1
+ import { UIDLWorkflow, UIDLWorkflows, UIDLCustomWorkflowNode, UIDLWorkflowProtection } from '@teleporthq/teleport-types';
2
2
  import { WorkflowSegment } from './types';
3
- export declare const generateServerSegmentAPIRoute: (segment: WorkflowSegment, workflowName?: string, protection?: UIDLWorkflowProtection) => string;
3
+ import { SegmentTrust } from './segment-trust';
4
+ export interface ServerSegmentRouteOptions {
5
+ /** A custom node's inner node ids, in the order its runner lists them. */
6
+ customNodeIds?: string[];
7
+ /**
8
+ * What the route may believe about results earlier segments of the same
9
+ * graph hand it (see segment-trust.ts). Every route the project plugin
10
+ * emits carries it.
11
+ */
12
+ trust?: SegmentTrust;
13
+ }
14
+ export declare const generateServerSegmentAPIRoute: (segment: WorkflowSegment, workflowName?: string, protection?: UIDLWorkflowProtection, options?: ServerSegmentRouteOptions) => string;
4
15
  export declare const hasStreamingAINode: (segment: WorkflowSegment) => boolean;
5
- export declare const generateStreamingServerSegmentAPIRoute: (segment: WorkflowSegment, workflowName?: string, protection?: UIDLWorkflowProtection) => string;
16
+ export declare const generateStreamingServerSegmentAPIRoute: (segment: WorkflowSegment, workflowName?: string, protection?: UIDLWorkflowProtection, options?: ServerSegmentRouteOptions) => string;
6
17
  export declare const generateCronAPIRoute: (workflow: UIDLWorkflow, customNodes?: Record<string, UIDLCustomWorkflowNode>) => string;
7
18
  export declare const getAPIRouteFileName: (workflowId: string, segmentId: string, workflowName?: string) => string;
8
19
  export declare const getCronRouteFileName: (workflow: UIDLWorkflow) => string;
9
20
  export declare const generateWebhookWorkflowAPIRoute: (workflow: UIDLWorkflow, customNodes?: Record<string, UIDLCustomWorkflowNode>) => string;
10
21
  export declare const getWebhookRouteFileName: (workflow: UIDLWorkflow) => string;
22
+ /**
23
+ * The address the store serves a provider's payment webhook at
24
+ * (`/api/webhooks/paypal-payment`), or null when no workflow receives it.
25
+ */
26
+ export declare const findPaymentWebhookRouteUrl: (workflows: UIDLWorkflows | undefined, providerId: string) => string | null;
11
27
  export declare const getWebhookRoutePath: (workflow: UIDLWorkflow) => string[];
12
28
  //# sourceMappingURL=api-route-generator.d.ts.map