@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,895 @@
1
+ import * as crypto from 'crypto'
2
+ import { loadPaymentDrivers } from './_helpers/load-payment-drivers'
3
+ import { withEnv, withFetch } from './_helpers/fake-fetch'
4
+
5
+ /**
6
+ * The Razorpay driver EXECUTED against Razorpay's documented answers:
7
+ * integer sub-units, Payment Links with a unique reference, immutable Plans,
8
+ * subscriptions authorised on the store's page, and a webhook the store only
9
+ * accepts signed.
10
+ */
11
+
12
+ const razorpay = loadPaymentDrivers({ ids: ['razorpay'] }).get('razorpay')
13
+ const ENV = {
14
+ RAZORPAY_KEY_ID: 'rzp_test_abc',
15
+ RAZORPAY_KEY_SECRET: 'secret',
16
+ RAZORPAY_WEBHOOK_SECRET: 'whsecret',
17
+ }
18
+ const API = 'https://api.razorpay.com/v1'
19
+ const BASIC = 'Basic ' + Buffer.from('rzp_test_abc:secret').toString('base64')
20
+
21
+ describe('Razorpay driver — payment links', () => {
22
+ it('creates a link in paise with the order as its reference and a day to pay', async () => {
23
+ await withEnv(ENV, () =>
24
+ withFetch(
25
+ () => ({
26
+ status: 200,
27
+ body: { id: 'plink_1', short_url: 'https://rzp.io/i/abc', status: 'created' },
28
+ }),
29
+ async (calls) => {
30
+ const before = Math.floor(Date.now() / 1000)
31
+ const result = await razorpay.createCheckout({
32
+ amount: 299,
33
+ currency: 'inr',
34
+ description: 'Order ORD-3',
35
+ successUrl: 'https://shop.test/order-details/ORD-3?payment=success',
36
+ metadata: { orderId: 'order-3', orderNumber: 'ORD-3' },
37
+ })
38
+ expect(result).toEqual({ checkoutUrl: 'https://rzp.io/i/abc', sessionId: 'plink_1' })
39
+ expect(calls[0].url).toBe(API + '/payment_links')
40
+ expect(calls[0].headers.Authorization).toBe(BASIC)
41
+ expect(calls[0].json).toMatchObject({
42
+ amount: 29900,
43
+ currency: 'INR',
44
+ reference_id: 'order-3',
45
+ callback_url: 'https://shop.test/order-details/ORD-3?payment=success',
46
+ callback_method: 'get',
47
+ notes: { orderId: 'order-3', orderNumber: 'ORD-3' },
48
+ })
49
+ expect(calls[0].json.expire_by - before).toBeGreaterThanOrEqual(24 * 60 * 60)
50
+ }
51
+ )
52
+ )
53
+ })
54
+
55
+ it('rounds a three-decimal amount so it ends in 0', async () => {
56
+ await withEnv(ENV, () =>
57
+ withFetch(
58
+ () => ({ status: 200, body: { id: 'plink_1', short_url: 'https://rzp.io/i/x' } }),
59
+ async (calls) => {
60
+ await razorpay.createCheckout({
61
+ amount: 99.999,
62
+ currency: 'KWD',
63
+ metadata: { orderId: 'o' },
64
+ })
65
+ expect(calls[0].json.amount).toBe(100000)
66
+ }
67
+ )
68
+ )
69
+ })
70
+
71
+ it('finds the link a retried place-order created before instead of failing on the duplicate', async () => {
72
+ await withEnv(ENV, () =>
73
+ withFetch(
74
+ (call) =>
75
+ call.method === 'POST'
76
+ ? {
77
+ status: 400,
78
+ body: {
79
+ error: {
80
+ code: 'BAD_REQUEST_ERROR',
81
+ description: 'payment link creation with reference ID already attempted',
82
+ },
83
+ },
84
+ }
85
+ : {
86
+ status: 200,
87
+ body: {
88
+ payment_links: [
89
+ { id: 'plink_old', short_url: 'https://rzp.io/i/old', status: 'created' },
90
+ ],
91
+ },
92
+ },
93
+ async (calls) => {
94
+ const result = await razorpay.createCheckout({
95
+ amount: 10,
96
+ currency: 'INR',
97
+ metadata: { orderId: 'order-3' },
98
+ })
99
+ expect(result).toEqual({ checkoutUrl: 'https://rzp.io/i/old', sessionId: 'plink_old' })
100
+ expect(calls[1].url).toBe(API + '/payment_links?reference_id=order-3')
101
+ expect(calls).toHaveLength(2)
102
+ }
103
+ )
104
+ )
105
+ })
106
+
107
+ it("opens a new link under a suffixed reference when the order's link expired", async () => {
108
+ let posts = 0
109
+ await withEnv(ENV, () =>
110
+ withFetch(
111
+ (call) => {
112
+ if (call.method !== 'POST') {
113
+ return {
114
+ status: 200,
115
+ body: {
116
+ payment_links: [
117
+ { id: 'plink_old', short_url: 'https://rzp.io/i/old', status: 'expired' },
118
+ ],
119
+ },
120
+ }
121
+ }
122
+ posts += 1
123
+ return posts === 1
124
+ ? {
125
+ status: 400,
126
+ body: {
127
+ error: {
128
+ description: 'payment link creation with reference ID already attempted',
129
+ },
130
+ },
131
+ }
132
+ : {
133
+ status: 200,
134
+ body: { id: 'plink_new', short_url: 'https://rzp.io/i/new', status: 'created' },
135
+ }
136
+ },
137
+ async (calls) => {
138
+ const orderId = '5f0c1a52-8f53-4c3e-9d8e-3b0a3f1d2e4c'
139
+ const result = await razorpay.createCheckout({
140
+ amount: 10,
141
+ currency: 'INR',
142
+ metadata: { orderId },
143
+ })
144
+ expect(result).toEqual({ checkoutUrl: 'https://rzp.io/i/new', sessionId: 'plink_new' })
145
+ const retried = calls[2].json
146
+ // The first number: the order's links can be searched in turn.
147
+ expect(retried.reference_id).toBe(orderId.slice(0, 32) + '-1')
148
+ // The webhook still names the order from the notes.
149
+ expect(retried.notes.orderId).toBe(orderId)
150
+ }
151
+ )
152
+ )
153
+ })
154
+ })
155
+
156
+ describe('Razorpay driver — payment links opened again', () => {
157
+ it('takes the next number no link carries, and reuses a numbered link still taking money', async () => {
158
+ const existing: Record<string, string> = {
159
+ 'order-9': 'expired',
160
+ 'order-9-1': 'cancelled',
161
+ 'order-9-2': 'created',
162
+ }
163
+ await withEnv(ENV, () =>
164
+ withFetch(
165
+ (call) => {
166
+ if (call.method === 'GET') {
167
+ const reference = new URL(call.url).searchParams.get('reference_id') || ''
168
+ return {
169
+ status: 200,
170
+ body: {
171
+ payment_links: [
172
+ {
173
+ id: 'plink_' + reference,
174
+ short_url: 'https://rzp.io/i/' + reference,
175
+ status: existing[reference],
176
+ },
177
+ ],
178
+ },
179
+ }
180
+ }
181
+ return existing[call.json.reference_id]
182
+ ? {
183
+ status: 400,
184
+ body: {
185
+ error: {
186
+ description: 'payment link creation with reference ID already attempted',
187
+ },
188
+ },
189
+ }
190
+ : {
191
+ status: 200,
192
+ body: { id: 'plink_fresh', short_url: 'https://rzp.io/i/fresh', status: 'created' },
193
+ }
194
+ },
195
+ async (calls) => {
196
+ const result = await razorpay.createCheckout({
197
+ amount: 10,
198
+ currency: 'INR',
199
+ metadata: { orderId: 'order-9' },
200
+ })
201
+ expect(result).toEqual({
202
+ checkoutUrl: 'https://rzp.io/i/order-9-2',
203
+ sessionId: 'plink_order-9-2',
204
+ })
205
+ expect(
206
+ calls.filter((call) => call.method === 'POST').map((call) => call.json.reference_id)
207
+ ).toEqual(['order-9', 'order-9-1', 'order-9-2'])
208
+ }
209
+ )
210
+ )
211
+ })
212
+
213
+ it('refuses to open more links than it can search for the order', async () => {
214
+ await withEnv(ENV, () =>
215
+ withFetch(
216
+ (call) =>
217
+ call.method === 'GET'
218
+ ? { status: 200, body: { payment_links: [{ id: 'plink_old', status: 'expired' }] } }
219
+ : {
220
+ status: 400,
221
+ body: {
222
+ error: {
223
+ description: 'payment link creation with reference ID already attempted',
224
+ },
225
+ },
226
+ },
227
+ async (calls) => {
228
+ const result = await razorpay.createCheckout({
229
+ amount: 10,
230
+ currency: 'INR',
231
+ metadata: { orderId: 'order-9' },
232
+ })
233
+ expect(result.error).toBe(
234
+ 'This order has opened more Razorpay payment links than the store allows.'
235
+ )
236
+ expect(calls.filter((call) => call.method === 'POST')).toHaveLength(21)
237
+ }
238
+ )
239
+ )
240
+ })
241
+ })
242
+
243
+ describe('Razorpay driver — plans and subscriptions', () => {
244
+ it('creates a plan once per product and price, and reuses a cached one', async () => {
245
+ await withEnv(ENV, () =>
246
+ withFetch(
247
+ () => ({ status: 200, body: { id: 'plan_abc' } }),
248
+ async (calls) => {
249
+ const created = await razorpay.ensurePlan({
250
+ amount: 499,
251
+ currency: 'INR',
252
+ interval: 'week',
253
+ intervalCount: 2,
254
+ productName: 'Box',
255
+ productId: 'p1',
256
+ })
257
+ expect(created).toEqual({
258
+ ok: 'true',
259
+ planId: 'plan_abc',
260
+ providerProductId: '',
261
+ created: 'true',
262
+ })
263
+ expect(calls[0].json).toEqual({
264
+ period: 'weekly',
265
+ interval: 2,
266
+ item: { name: 'Box', amount: 49900, currency: 'INR' },
267
+ notes: { productId: 'p1' },
268
+ })
269
+ const cached = await razorpay.ensurePlan({
270
+ planId: 'plan_cached',
271
+ amount: 499,
272
+ currency: 'INR',
273
+ interval: 'week',
274
+ })
275
+ expect(cached).toEqual({
276
+ ok: 'true',
277
+ planId: 'plan_cached',
278
+ providerProductId: '',
279
+ created: 'false',
280
+ })
281
+ // The cached plan is checked against the current keys, never re-created.
282
+ expect(calls.map((call) => call.method + ' ' + call.url.replace(API, ''))).toEqual([
283
+ 'POST /plans',
284
+ 'GET /plans/plan_cached',
285
+ ])
286
+ const daily = await razorpay.ensurePlan({
287
+ amount: 499,
288
+ currency: 'INR',
289
+ interval: 'day',
290
+ intervalCount: 3,
291
+ })
292
+ expect(daily.error).toBe('Razorpay bills a daily plan at most once every 7 days.')
293
+ }
294
+ )
295
+ )
296
+ })
297
+
298
+ it('creates the plan again when the cached one belongs to the other mode, and keeps it through an outage', async () => {
299
+ await withEnv(ENV, () =>
300
+ withFetch(
301
+ (call) =>
302
+ call.method === 'GET'
303
+ ? { status: 400, body: { error: { description: 'The id provided does not exist' } } }
304
+ : { status: 200, body: { id: 'plan_new' } },
305
+ async (calls) => {
306
+ const result = await razorpay.ensurePlan({
307
+ planId: 'plan_live_cached',
308
+ amount: 499,
309
+ currency: 'INR',
310
+ interval: 'month',
311
+ productName: 'Box',
312
+ productId: 'p1',
313
+ })
314
+ expect(result).toEqual({
315
+ ok: 'true',
316
+ planId: 'plan_new',
317
+ providerProductId: '',
318
+ created: 'true',
319
+ })
320
+ expect(calls.map((call) => call.method + ' ' + call.url.replace(API, ''))).toEqual([
321
+ 'GET /plans/plan_live_cached',
322
+ 'POST /plans',
323
+ ])
324
+ }
325
+ )
326
+ )
327
+ await withEnv(ENV, () =>
328
+ withFetch(
329
+ () => ({ status: 502, body: null }),
330
+ async (calls) => {
331
+ expect(
332
+ (await razorpay.ensurePlan({ planId: 'plan_cached', amount: 499, currency: 'INR' }))
333
+ .planId
334
+ ).toBe('plan_cached')
335
+ expect(calls).toHaveLength(1)
336
+ }
337
+ )
338
+ )
339
+ })
340
+
341
+ it('creates the subscription and sends the buyer to the store page that authorises it', async () => {
342
+ await withEnv(ENV, () =>
343
+ withFetch(
344
+ () => ({
345
+ status: 200,
346
+ body: { id: 'sub_1', status: 'created', short_url: 'https://rzp.io/s/1' },
347
+ }),
348
+ async (calls) => {
349
+ const result = await razorpay.createSubscriptionCheckout({
350
+ planId: 'plan_abc',
351
+ amount: 499,
352
+ currency: 'INR',
353
+ recurringInterval: 'month',
354
+ recurringIntervalCount: 1,
355
+ trialDays: 7,
356
+ successUrl: 'https://shop.test/ok',
357
+ cancelUrl: 'https://shop.test/checkout',
358
+ metadata: { orderId: 'order-1', subscriptionId: 'sub-row-1' },
359
+ baseUrl: 'https://shop.test',
360
+ })
361
+ expect(result).toEqual({
362
+ checkoutUrl: 'https://shop.test/pay/razorpay?subscription=sub_1',
363
+ sessionId: 'sub_1',
364
+ providerSubscriptionId: 'sub_1',
365
+ })
366
+ expect(calls[0].json).toMatchObject({
367
+ plan_id: 'plan_abc',
368
+ total_count: 99 * 12,
369
+ customer_notify: false,
370
+ notes: {
371
+ orderId: 'order-1',
372
+ subscriptionId: 'sub-row-1',
373
+ successUrl: 'https://shop.test/ok',
374
+ cancelUrl: 'https://shop.test/checkout',
375
+ },
376
+ })
377
+ expect(calls[0].json.start_at).toBeGreaterThan(
378
+ Math.floor(Date.now() / 1000) + 6 * 24 * 60 * 60
379
+ )
380
+ // The buyer has a day to authorise it, never Razorpay's default of 30 years.
381
+ const now = Math.floor(Date.now() / 1000)
382
+ expect(calls[0].json.expire_by).toBeGreaterThan(now + 23 * 60 * 60)
383
+ expect(calls[0].json.expire_by).toBeLessThanOrEqual(now + 24 * 60 * 60)
384
+ expect(calls[0].json.expire_by).toBeLessThan(calls[0].json.start_at)
385
+ const gift = await razorpay.createSubscriptionCheckout({
386
+ planId: 'plan_abc',
387
+ amount: 499,
388
+ amountDue: 100,
389
+ currency: 'INR',
390
+ })
391
+ expect(gift.error).toBe('Razorpay cannot take a gift card toward a subscription payment.')
392
+ }
393
+ )
394
+ )
395
+ })
396
+
397
+ it('maps cancel, cancel at cycle end, pause and resume onto Razorpay, reading the subscription first where it matters', async () => {
398
+ await withEnv(ENV, () =>
399
+ withFetch(
400
+ (call) => ({
401
+ status: 200,
402
+ body: {
403
+ id: 'sub_1',
404
+ status: call.url.endsWith('/pause')
405
+ ? 'paused'
406
+ : call.url.endsWith('/cancel') && call.json.cancel_at_cycle_end === false
407
+ ? 'cancelled'
408
+ : 'active',
409
+ has_scheduled_changes:
410
+ call.url.endsWith('/cancel') && call.json.cancel_at_cycle_end === true,
411
+ current_start: 1700000000,
412
+ current_end: 1702592000,
413
+ },
414
+ }),
415
+ async (calls) => {
416
+ expect(
417
+ (await razorpay.manageSubscription({ subscriptionId: 'sub_1', action: 'cancel' }))
418
+ .status
419
+ ).toBe('cancelled')
420
+ const scheduled = await razorpay.manageSubscription({
421
+ subscriptionId: 'sub_1',
422
+ action: 'cancel_at_period_end',
423
+ })
424
+ expect(scheduled).toMatchObject({
425
+ status: 'active',
426
+ cancelAtPeriodEnd: 'true',
427
+ currentPeriodEnd: new Date(1702592000 * 1000).toISOString(),
428
+ })
429
+ expect(scheduled.message).toBeUndefined()
430
+ expect(
431
+ (await razorpay.manageSubscription({ subscriptionId: 'sub_1', action: 'pause' })).status
432
+ ).toBe('paused')
433
+ expect(
434
+ (await razorpay.manageSubscription({ subscriptionId: 'sub_1', action: 'resume' }))
435
+ .status
436
+ ).toBe('active')
437
+ expect(calls.map((call) => [call.method, call.url.replace(API, ''), call.json])).toEqual([
438
+ ['POST', '/subscriptions/sub_1/cancel', { cancel_at_cycle_end: false }],
439
+ ['GET', '/subscriptions/sub_1', null],
440
+ ['POST', '/subscriptions/sub_1/cancel', { cancel_at_cycle_end: true }],
441
+ ['GET', '/subscriptions/sub_1', null],
442
+ ['POST', '/subscriptions/sub_1/pause', { pause_at: 'now' }],
443
+ ['POST', '/subscriptions/sub_1/resume', { resume_at: 'now' }],
444
+ ])
445
+ }
446
+ )
447
+ )
448
+ })
449
+
450
+ it('never pauses a subscription that is not active: a paused trial would be cancelled for good', async () => {
451
+ for (const status of ['authenticated', 'pending', 'halted', 'created']) {
452
+ await withEnv(ENV, () =>
453
+ withFetch(
454
+ () => ({ status: 200, body: { id: 'sub_1', status } }),
455
+ async (calls) => {
456
+ const result = await razorpay.manageSubscription({
457
+ subscriptionId: 'sub_1',
458
+ action: 'pause',
459
+ })
460
+ expect(result).toMatchObject({
461
+ ok: 'false',
462
+ error:
463
+ 'Razorpay can pause only an active subscription: one still in its free trial would be cancelled for good, and one with a payment due cannot be paused.',
464
+ })
465
+ expect(calls.map((call) => call.method)).toEqual(['GET'])
466
+ }
467
+ )
468
+ )
469
+ }
470
+ })
471
+
472
+ it('cancels a subscription still in its trial at once, since Razorpay schedules nothing before the first cycle', async () => {
473
+ for (const status of ['authenticated', 'created']) {
474
+ await withEnv(ENV, () =>
475
+ withFetch(
476
+ (call) => ({
477
+ status: 200,
478
+ body:
479
+ call.method === 'GET'
480
+ ? { id: 'sub_1', status, charge_at: 1702592000 }
481
+ : { id: 'sub_1', status: 'cancelled', charge_at: 1702592000 },
482
+ }),
483
+ async (calls) => {
484
+ const result = await razorpay.manageSubscription({
485
+ subscriptionId: 'sub_1',
486
+ action: 'cancel_at_period_end',
487
+ })
488
+ expect(result).toMatchObject({
489
+ ok: 'true',
490
+ status: 'cancelled',
491
+ cancelAtPeriodEnd: 'false',
492
+ message:
493
+ 'Razorpay cannot schedule a cancellation before the first billing cycle has started, so the subscription was cancelled immediately. No payment will be taken.',
494
+ })
495
+ expect(calls[1].json).toEqual({ cancel_at_cycle_end: false })
496
+ }
497
+ )
498
+ )
499
+ }
500
+ })
501
+
502
+ it('reports a subscription it could not read instead of acting blind', async () => {
503
+ await withEnv(ENV, () =>
504
+ withFetch(
505
+ () => ({ status: 500, body: { error: { description: 'Server error' } } }),
506
+ async (calls) => {
507
+ const result = await razorpay.manageSubscription({
508
+ subscriptionId: 'sub_1',
509
+ action: 'cancel_at_period_end',
510
+ })
511
+ expect(result).toMatchObject({ ok: 'false', error: 'Server error' })
512
+ expect(calls).toHaveLength(1)
513
+ }
514
+ )
515
+ )
516
+ })
517
+
518
+ it('gives the store page the public key id and the return URLs, and a 404 for an unknown subscription', async () => {
519
+ await withEnv(ENV, () =>
520
+ withFetch(
521
+ (call) =>
522
+ call.url.endsWith('/sub_1') || call.url.endsWith('/sub_3')
523
+ ? {
524
+ status: 200,
525
+ body: {
526
+ id: 'sub_1',
527
+ status: call.url.endsWith('/sub_1') ? 'created' : 'authenticated',
528
+ notes: {
529
+ successUrl: 'https://shop.test/ok',
530
+ cancelUrl: 'https://shop.test/checkout',
531
+ },
532
+ },
533
+ }
534
+ : { status: 400, body: { error: { description: 'The id provided does not exist' } } },
535
+ async () => {
536
+ expect(await razorpay.checkoutPage('sub_1')).toEqual({
537
+ subscriptionId: 'sub_1',
538
+ keyId: 'rzp_test_abc',
539
+ successUrl: 'https://shop.test/ok',
540
+ cancelUrl: 'https://shop.test/checkout',
541
+ })
542
+ expect(await razorpay.checkoutPage('sub_2')).toBeNull()
543
+ expect(await razorpay.checkoutPage('plink_1')).toBeNull()
544
+ // Authorised already (or cancelled, or expired): nothing to open again.
545
+ expect(await razorpay.checkoutPage('sub_3')).toBeNull()
546
+ }
547
+ )
548
+ )
549
+ })
550
+ })
551
+
552
+ describe('Razorpay driver — refunds', () => {
553
+ it('refunds a payment with a sanitised idempotency header, the whole of it when no amount is given', async () => {
554
+ await withEnv(ENV, () =>
555
+ withFetch(
556
+ () => ({
557
+ status: 200,
558
+ body: { id: 'rfnd_1', status: 'processed', amount: 29900, currency: 'INR' },
559
+ }),
560
+ async (calls) => {
561
+ const result = await razorpay.refund({
562
+ paymentReference: 'pay_1',
563
+ amount: 0,
564
+ currency: 'INR',
565
+ idempotencyKey: 'refund:pay_1:0',
566
+ orderId: 'o1',
567
+ })
568
+ expect(result).toEqual({
569
+ success: true,
570
+ refundId: 'rfnd_1',
571
+ amount: 299,
572
+ currency: 'INR',
573
+ status: 'processed',
574
+ error: '',
575
+ })
576
+ expect(calls[0].url).toBe(API + '/payments/pay_1/refund')
577
+ expect(calls[0].headers['X-Refund-Idempotency']).toBe('refund-pay_1-0')
578
+ expect(calls[0].json).toEqual({ notes: { orderId: 'o1' } })
579
+ }
580
+ )
581
+ )
582
+ })
583
+
584
+ it('resolves a stored payment link to its captured payment, and refuses one never paid', async () => {
585
+ await withEnv(ENV, () =>
586
+ withFetch(
587
+ (call) =>
588
+ call.url.endsWith('/plink_1')
589
+ ? {
590
+ status: 200,
591
+ body: { id: 'plink_1', payments: [{ payment_id: 'pay_9', status: 'captured' }] },
592
+ }
593
+ : call.url.endsWith('/plink_2')
594
+ ? { status: 200, body: { id: 'plink_2', payments: null } }
595
+ : {
596
+ status: 200,
597
+ body: { id: 'rfnd_2', status: 'pending', amount: 1000, currency: 'INR' },
598
+ },
599
+ async (calls) => {
600
+ const paid = await razorpay.refund({
601
+ paymentReference: 'plink_1',
602
+ amount: 10,
603
+ currency: 'INR',
604
+ idempotencyKey: 'refund-key-1',
605
+ })
606
+ expect(paid).toMatchObject({ success: true, refundId: 'rfnd_2', amount: 10 })
607
+ expect(calls[1].url).toBe(API + '/payments/pay_9/refund')
608
+ expect(calls[1].json.amount).toBe(1000)
609
+ const unpaid = await razorpay.refund({
610
+ paymentReference: 'plink_2',
611
+ amount: 10,
612
+ currency: 'INR',
613
+ idempotencyKey: 'refund-key-2',
614
+ })
615
+ expect(unpaid.error).toBe('This order has no captured Razorpay payment to refund.')
616
+ }
617
+ )
618
+ )
619
+ })
620
+ })
621
+
622
+ describe('Razorpay driver — webhook', () => {
623
+ const raw = Buffer.from('{"event":"payment_link.paid","payload":{}}')
624
+ const signature = crypto.createHmac('sha256', 'whsecret').update(raw).digest('hex')
625
+
626
+ it('accepts only a body signed with the webhook secret', async () => {
627
+ await withEnv(ENV, async () => {
628
+ expect(
629
+ await razorpay.verifyWebhook({
630
+ headers: { 'x-razorpay-signature': signature },
631
+ rawBody: raw,
632
+ body: { event: 'payment_link.paid' },
633
+ })
634
+ ).toEqual({
635
+ ok: true,
636
+ body: { event: 'payment_link.paid' },
637
+ })
638
+ expect(
639
+ (
640
+ await razorpay.verifyWebhook({
641
+ headers: { 'x-razorpay-signature': 'ab' + signature.slice(2) },
642
+ rawBody: raw,
643
+ body: {},
644
+ })
645
+ ).ok
646
+ ).toBe(false)
647
+ expect((await razorpay.verifyWebhook({ headers: {}, rawBody: raw, body: {} })).reason).toBe(
648
+ 'The X-Razorpay-Signature header is missing.'
649
+ )
650
+ })
651
+ })
652
+
653
+ it('refuses everything while no webhook secret is configured', async () => {
654
+ await withEnv(
655
+ {
656
+ ...ENV,
657
+ RAZORPAY_WEBHOOK_SECRET: undefined,
658
+ CONFIGURATION_RAZORPAY_WEBHOOK_SECRET: undefined,
659
+ },
660
+ async () => {
661
+ const result = await razorpay.verifyWebhook({
662
+ headers: { 'x-razorpay-signature': signature },
663
+ rawBody: raw,
664
+ body: {},
665
+ })
666
+ expect(result.ok).toBe(false)
667
+ expect(result.reason).toContain('RAZORPAY_WEBHOOK_SECRET')
668
+ }
669
+ )
670
+ })
671
+ })
672
+
673
+ describe('Razorpay driver — settling a checkout from Razorpay', () => {
674
+ const LINK = 'plink_Ks1TzoWbVEhD6c'
675
+ const SUBSCRIPTION = 'sub_00000000000001'
676
+ const link = (status: string, payments: unknown[] = []) => ({
677
+ id: LINK,
678
+ status,
679
+ amount: 240000,
680
+ amount_paid: status === 'paid' ? 240000 : 0,
681
+ currency: 'INR',
682
+ reference_id: 'order-1',
683
+ notes: { orderId: 'order-1', orderNumber: 'ORD-1' },
684
+ payments,
685
+ })
686
+ const settle = (respond: (url: string) => { status?: number; body?: unknown }, id: string) =>
687
+ withEnv(ENV, () =>
688
+ withFetch(
689
+ (call) => respond(call.url),
690
+ async (calls) => ({
691
+ result: await razorpay.reconcile({ kind: 'checkout', id }),
692
+ urls: calls.map((call) => call.url),
693
+ })
694
+ )
695
+ )
696
+
697
+ it('settles a payment link or a subscription by itself', () => {
698
+ expect(razorpay.reconcileKinds(LINK)).toEqual(['checkout'])
699
+ expect(razorpay.reconcileKinds(' ' + SUBSCRIPTION + ' ')).toEqual(['checkout'])
700
+ for (const foreign of ['pay_29QQoUBi66xm2f', 'cs_test_a1b2c3d4e5', '538', 'plink_', '']) {
701
+ expect(razorpay.reconcileKinds(foreign)).toEqual([])
702
+ }
703
+ })
704
+
705
+ it('answers a paid link as payment_link.paid, with the payment that paid it', async () => {
706
+ const paid = link('paid', [
707
+ { payment_id: 'pay_failed0001', status: 'failed' },
708
+ { payment_id: 'pay_29QQoUBi66xm2f', status: 'captured' },
709
+ ])
710
+ const payment = {
711
+ id: 'pay_29QQoUBi66xm2f',
712
+ amount: 240000,
713
+ currency: 'INR',
714
+ status: 'captured',
715
+ }
716
+ const { result, urls } = await settle(
717
+ (url) =>
718
+ url.endsWith('/payment_links/' + LINK)
719
+ ? { body: paid }
720
+ : url.endsWith('/payments/pay_29QQoUBi66xm2f')
721
+ ? { body: payment }
722
+ : { status: 404, body: {} },
723
+ LINK
724
+ )
725
+ expect(result).toEqual({
726
+ ok: true,
727
+ body: {
728
+ entity: 'event',
729
+ event: 'payment_link.paid',
730
+ contains: ['payment_link', 'payment'],
731
+ payload: { payment_link: { entity: paid }, payment: { entity: payment } },
732
+ created_at: expect.any(Number),
733
+ },
734
+ })
735
+ expect(urls).toEqual([API + '/payment_links/' + LINK, API + '/payments/pay_29QQoUBi66xm2f'])
736
+ })
737
+
738
+ it('answers an expired or cancelled link as itself, and settles nothing for one still taking money', async () => {
739
+ for (const status of ['expired', 'cancelled']) {
740
+ const { result } = await settle(() => ({ body: link(status) }), LINK)
741
+ expect(result).toEqual({
742
+ ok: true,
743
+ body: {
744
+ entity: 'event',
745
+ event: 'payment_link.' + status,
746
+ contains: ['payment_link'],
747
+ payload: { payment_link: { entity: link(status) } },
748
+ created_at: expect.any(Number),
749
+ },
750
+ })
751
+ }
752
+ for (const status of ['created', 'partially_paid']) {
753
+ const { result, urls } = await settle(() => ({ body: link(status) }), LINK)
754
+ expect(result).toEqual({
755
+ ok: false,
756
+ reason: 'Razorpay payment link ' + LINK + ' is ' + status + ', with no payment to settle.',
757
+ })
758
+ expect(urls).toHaveLength(1)
759
+ }
760
+ })
761
+
762
+ it("answers a charged subscription as subscription.charged, with its FIRST paid invoice's payment", async () => {
763
+ const subscription = {
764
+ id: SUBSCRIPTION,
765
+ status: 'active',
766
+ notes: { orderId: 'order-1', subscriptionId: 'sub-row-1' },
767
+ }
768
+ const payment = { id: 'pay_first0001', invoice_id: 'inv_first', amount: 49900, currency: 'INR' }
769
+ const { result, urls } = await settle((url) => {
770
+ if (url.endsWith('/subscriptions/' + SUBSCRIPTION)) {
771
+ return { body: subscription }
772
+ }
773
+ if (url.includes('/invoices?')) {
774
+ return {
775
+ body: {
776
+ entity: 'collection',
777
+ items: [
778
+ {
779
+ id: 'inv_second',
780
+ status: 'paid',
781
+ payment_id: 'pay_second0001',
782
+ paid_at: 1790000000,
783
+ },
784
+ { id: 'inv_next', status: 'issued', payment_id: null },
785
+ { id: 'inv_first', status: 'paid', payment_id: 'pay_first0001', paid_at: 1780000000 },
786
+ ],
787
+ },
788
+ }
789
+ }
790
+ return url.endsWith('/payments/pay_first0001') ? { body: payment } : { status: 404, body: {} }
791
+ }, SUBSCRIPTION)
792
+ expect(result).toEqual({
793
+ ok: true,
794
+ body: {
795
+ entity: 'event',
796
+ event: 'subscription.charged',
797
+ contains: ['subscription', 'payment'],
798
+ payload: { subscription: { entity: subscription }, payment: { entity: payment } },
799
+ created_at: expect.any(Number),
800
+ },
801
+ })
802
+ expect(urls[1]).toBe(API + '/invoices?subscription_id=' + SUBSCRIPTION + '&count=100')
803
+ })
804
+
805
+ it('answers the mandate of a subscription in its trial, and settles nothing before it is authorised or charged', async () => {
806
+ const authenticated = { id: SUBSCRIPTION, status: 'authenticated' }
807
+ expect((await settle(() => ({ body: authenticated }), SUBSCRIPTION)).result).toMatchObject({
808
+ ok: true,
809
+ body: {
810
+ event: 'subscription.authenticated',
811
+ payload: { subscription: { entity: authenticated } },
812
+ },
813
+ })
814
+ const created = await settle(
815
+ () => ({ body: { id: SUBSCRIPTION, status: 'created' } }),
816
+ SUBSCRIPTION
817
+ )
818
+ expect(created.result).toEqual({
819
+ ok: false,
820
+ reason: 'Razorpay subscription ' + SUBSCRIPTION + ' is not authorised yet.',
821
+ })
822
+ expect(created.urls).toHaveLength(1)
823
+ const uncharged = await settle(
824
+ (url) =>
825
+ url.includes('/invoices?')
826
+ ? { body: { items: [{ id: 'inv_1', status: 'issued' }] } }
827
+ : { body: { id: SUBSCRIPTION, status: 'active' } },
828
+ SUBSCRIPTION
829
+ )
830
+ expect(uncharged.result).toEqual({
831
+ ok: false,
832
+ reason: 'Razorpay has not charged subscription ' + SUBSCRIPTION + ' yet.',
833
+ })
834
+ })
835
+
836
+ it('retries an outage, never an id Razorpay does not know', async () => {
837
+ const outage = await settle(() => ({ status: 502, body: null }), LINK)
838
+ expect(outage.result).toMatchObject({ ok: false, retry: true })
839
+ const unknown = await settle(
840
+ () => ({
841
+ status: 400,
842
+ body: {
843
+ error: { code: 'BAD_REQUEST_ERROR', description: 'The id provided does not exist' },
844
+ },
845
+ }),
846
+ LINK
847
+ )
848
+ expect(unknown.result).toEqual({
849
+ ok: false,
850
+ retry: false,
851
+ reason: 'The id provided does not exist',
852
+ })
853
+ // The link read, its payment not: the settlement waits for both.
854
+ const paymentDown = await settle(
855
+ (url) =>
856
+ url.includes('/payment_links/')
857
+ ? { body: link('paid', [{ payment_id: 'pay_29QQoUBi66xm2f', status: 'captured' }]) }
858
+ : { status: 503, body: null },
859
+ LINK
860
+ )
861
+ expect(paymentDown.result).toMatchObject({ ok: false, retry: true })
862
+ })
863
+
864
+ it('asks Razorpay nothing for a request naming no checkout, and retries without keys', async () => {
865
+ for (const request of [
866
+ { kind: 'checkout', id: 'plink_../../payments' },
867
+ { kind: 'checkout', id: 'pay_29QQoUBi66xm2f' },
868
+ { kind: 'refund', id: LINK },
869
+ null,
870
+ ]) {
871
+ const answered = await withEnv(ENV, () =>
872
+ withFetch(
873
+ () => ({ status: 200, body: {} }),
874
+ async (calls) => ({ result: await razorpay.reconcile(request), calls: calls.length })
875
+ )
876
+ )
877
+ expect(answered).toEqual({
878
+ result: { ok: false, reason: 'The request names no Razorpay checkout to settle.' },
879
+ calls: 0,
880
+ })
881
+ }
882
+ const unconfigured = await withEnv(
883
+ { RAZORPAY_KEY_ID: undefined, CONFIGURATION_RAZORPAY_KEY_ID: undefined },
884
+ () =>
885
+ withFetch(
886
+ () => ({ status: 200, body: {} }),
887
+ async (calls) => ({
888
+ result: await razorpay.reconcile({ kind: 'checkout', id: LINK }),
889
+ calls: calls.length,
890
+ })
891
+ )
892
+ )
893
+ expect(unconfigured).toMatchObject({ result: { ok: false, retry: true }, calls: 0 })
894
+ })
895
+ })