@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.
- package/__tests__/_helpers/bind-workflow-utils.ts +16 -1
- package/__tests__/_helpers/fake-fetch.ts +96 -0
- package/__tests__/_helpers/fake-stripe.ts +52 -0
- package/__tests__/_helpers/load-handler.ts +22 -3
- package/__tests__/_helpers/load-invoice-route.ts +75 -0
- package/__tests__/_helpers/load-payment-drivers.ts +69 -0
- package/__tests__/_helpers/load-server-runtime.ts +33 -0
- package/__tests__/_helpers/run-generated-middleware.ts +50 -9
- package/__tests__/admin-form-hydration-target.test.ts +39 -0
- package/__tests__/admin-form-row-hydration.test.ts +58 -0
- package/__tests__/ai-select-database-data-handler.test.ts +14 -3
- package/__tests__/api-route-file-name-segments.test.ts +33 -0
- package/__tests__/app-secret-env.test.ts +55 -0
- package/__tests__/auth-env-secret-preservation.test.ts +22 -3
- package/__tests__/auth-nextauth-url.test.ts +134 -50
- package/__tests__/cart-add-item-kinds.test.ts +259 -0
- package/__tests__/cart-add-item-line-fields.test.ts +328 -0
- package/__tests__/cart-availability-add-to-cart.test.ts +108 -0
- package/__tests__/cart-get-total-discounts.test.ts +499 -0
- package/__tests__/cart-get-total-product-options.test.ts +195 -0
- package/__tests__/cart-get-total-subscriptions.test.ts +221 -0
- package/__tests__/cart-price-order.test.ts +283 -0
- package/__tests__/cart-update-item-quantity-recurring.test.ts +75 -0
- package/__tests__/client-loop-current-item.test.ts +164 -0
- package/__tests__/cron-route-loop-custom-node.test.ts +123 -0
- package/__tests__/cron-route-loop-templateparams.test.ts +7 -0
- package/__tests__/cron-route-verification.test.ts +252 -0
- package/__tests__/custom-js-runtime-base-url.test.ts +64 -0
- package/__tests__/custom-nodes-admin-module.test.ts +310 -0
- package/__tests__/data-api-browser-reads.test.ts +341 -0
- package/__tests__/data-api-low-stock-autofire.test.ts +67 -17
- package/__tests__/data-api-optional-feature-columns.test.ts +240 -0
- package/__tests__/data-api-protected-tables.test.ts +948 -0
- package/__tests__/data-node-not-awaited.test.ts +7 -3
- package/__tests__/data-write-missing-filter.test.ts +119 -0
- package/__tests__/ecommerce-rewriter-product-options.test.ts +143 -0
- package/__tests__/email-locale-senders.test.ts +1 -1
- package/__tests__/file-storage-upload-picked-files.test.ts +20 -0
- package/__tests__/input-debounce-per-field.test.ts +141 -0
- package/__tests__/internal-request-headers.test.ts +7 -3
- package/__tests__/invoice-data-access-replace.test.ts +340 -0
- package/__tests__/invoice-delivery-fee.test.ts +3 -2
- package/__tests__/invoice-generate-hydration.test.ts +20 -12
- package/__tests__/invoice-order-items-settle.test.ts +51 -46
- package/__tests__/invoice-product-options.test.ts +177 -0
- package/__tests__/invoice-regenerate-route.test.ts +488 -0
- package/__tests__/invoice-regional-tax.test.ts +3 -2
- package/__tests__/invoice-reservation.test.ts +195 -0
- package/__tests__/invoice-route-access.test.ts +275 -0
- package/__tests__/invoice-self-call-origin.test.ts +117 -0
- package/__tests__/invoice-tender.test.ts +550 -0
- package/__tests__/legacy-webhook-self-calls.test.ts +187 -0
- package/__tests__/locale-aware-redirects.test.ts +55 -26
- package/__tests__/loop-collection-unwrap.test.ts +6 -1
- package/__tests__/middleware-subscriber-access.test.ts +269 -0
- package/__tests__/payment-charge-user-earlier-attempt.test.ts +267 -0
- package/__tests__/payment-charge-user-handler-serialization.test.ts +47 -82
- package/__tests__/payment-charge-user-line-descriptions.test.ts +124 -0
- package/__tests__/payment-charge-user-report-refusal.test.ts +105 -0
- package/__tests__/payment-close-checkout-node.test.ts +127 -0
- package/__tests__/payment-driver-close-checkout.test.ts +1163 -0
- package/__tests__/payment-driver-coingate.test.ts +470 -0
- package/__tests__/payment-driver-inspect-checkout.test.ts +648 -0
- package/__tests__/payment-driver-mollie.test.ts +864 -0
- package/__tests__/payment-driver-paddle.test.ts +870 -0
- package/__tests__/payment-driver-paypal-capture.test.ts +158 -0
- package/__tests__/payment-driver-paypal-webhook.test.ts +367 -0
- package/__tests__/payment-driver-razorpay.test.ts +895 -0
- package/__tests__/payment-driver-square.test.ts +977 -0
- package/__tests__/payment-driver-stripe.test.ts +267 -0
- package/__tests__/payment-drivers-module.test.ts +429 -0
- package/__tests__/payment-legacy-webhook-routes.test.ts +588 -0
- package/__tests__/payment-redirect-and-order-notification.test.ts +98 -39
- package/__tests__/payment-refund.test.ts +523 -22
- package/__tests__/payment-subscription-nodes.test.ts +1360 -0
- package/__tests__/payment-webhook-route.test.ts +523 -0
- package/__tests__/paypal-webhook-signature-verification.test.ts +205 -0
- package/__tests__/prune-context-oversized-leaf.test.ts +1 -0
- package/__tests__/prune-context-state-keys.test.ts +89 -0
- package/__tests__/push-node-handlers.test.ts +291 -0
- package/__tests__/route-changed-trigger.test.ts +40 -0
- package/__tests__/runtime-storage-upload-access.test.ts +255 -0
- package/__tests__/security-runtime-shadow.test.ts +103 -1
- package/__tests__/segment-reply-changed-keys.test.ts +146 -0
- package/__tests__/segment-state-keys-emission.test.ts +185 -0
- package/__tests__/segment-state-needs.test.ts +102 -0
- package/__tests__/server-segment-context-integrity.test.ts +210 -0
- package/__tests__/server-step-signing.test.ts +371 -0
- package/__tests__/session-cookie-resolver.test.ts +59 -0
- package/__tests__/stock-decrement-audit.test.ts +17 -0
- package/__tests__/subscriber-access-route.test.ts +406 -0
- package/__tests__/webhook-delivery-lease.test.ts +316 -0
- package/__tests__/workflow-auth-guard.test.ts +253 -2
- package/dist/cjs/admin-form-hydration.d.ts +10 -0
- package/dist/cjs/admin-form-hydration.d.ts.map +1 -0
- package/dist/cjs/admin-form-hydration.js +25 -0
- package/dist/cjs/admin-form-hydration.js.map +1 -0
- package/dist/cjs/api-route-generator.d.ts +19 -3
- package/dist/cjs/api-route-generator.d.ts.map +1 -1
- package/dist/cjs/api-route-generator.js +190 -70
- package/dist/cjs/api-route-generator.js.map +1 -1
- package/dist/cjs/auth-generator.d.ts +4 -1
- package/dist/cjs/auth-generator.d.ts.map +1 -1
- package/dist/cjs/auth-generator.js +241 -62
- package/dist/cjs/auth-generator.js.map +1 -1
- package/dist/cjs/auth-return/signed-in-destination-code.d.ts +17 -0
- package/dist/cjs/auth-return/signed-in-destination-code.d.ts.map +1 -0
- package/dist/cjs/auth-return/signed-in-destination-code.js +37 -0
- package/dist/cjs/auth-return/signed-in-destination-code.js.map +1 -0
- package/dist/cjs/cart-pricing-preamble.d.ts +12 -0
- package/dist/cjs/cart-pricing-preamble.d.ts.map +1 -0
- package/dist/cjs/cart-pricing-preamble.js +23 -0
- package/dist/cjs/cart-pricing-preamble.js.map +1 -0
- package/dist/cjs/cron-request-verification.d.ts +24 -0
- package/dist/cjs/cron-request-verification.d.ts.map +1 -0
- package/dist/cjs/cron-request-verification.js +84 -0
- package/dist/cjs/cron-request-verification.js.map +1 -0
- package/dist/cjs/custom-node-modules.d.ts +30 -0
- package/dist/cjs/custom-node-modules.d.ts.map +1 -0
- package/dist/cjs/custom-node-modules.js +90 -0
- package/dist/cjs/custom-node-modules.js.map +1 -0
- package/dist/cjs/data-api-route-generator.d.ts +27 -0
- package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
- package/dist/cjs/data-api-route-generator.js +366 -29
- package/dist/cjs/data-api-route-generator.js.map +1 -1
- package/dist/cjs/ecommerce/cart-availability.d.ts.map +1 -1
- package/dist/cjs/ecommerce/cart-availability.js +22 -13
- package/dist/cjs/ecommerce/cart-availability.js.map +1 -1
- package/dist/cjs/ecommerce/stock-decrement.d.ts +2 -1
- package/dist/cjs/ecommerce/stock-decrement.d.ts.map +1 -1
- package/dist/cjs/ecommerce/stock-decrement.js +6 -0
- package/dist/cjs/ecommerce/stock-decrement.js.map +1 -1
- package/dist/cjs/executor-generator.d.ts +0 -1
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +213 -20
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/index.d.ts +12 -4
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +25 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/invoice/api-routes-code.d.ts +26 -0
- package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/cjs/invoice/api-routes-code.js +423 -391
- package/dist/cjs/invoice/api-routes-code.js.map +1 -1
- package/dist/cjs/invoice/data-access-code.d.ts.map +1 -1
- package/dist/cjs/invoice/data-access-code.js +420 -107
- package/dist/cjs/invoice/data-access-code.js.map +1 -1
- package/dist/cjs/invoice/index.d.ts.map +1 -1
- package/dist/cjs/invoice/index.js +24 -0
- package/dist/cjs/invoice/index.js.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.d.ts +12 -0
- package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -0
- package/dist/cjs/invoice/invoice-assembly-code.js +517 -0
- package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -0
- package/dist/cjs/invoice/invoice-html-code.d.ts.map +1 -1
- package/dist/cjs/invoice/invoice-html-code.js +111 -9
- package/dist/cjs/invoice/invoice-html-code.js.map +1 -1
- package/dist/cjs/invoice/pdf-service-client-code.d.ts.map +1 -1
- package/dist/cjs/invoice/pdf-service-client-code.js +3 -4
- package/dist/cjs/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/cjs/nodes/account/account-login.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-login.js +4 -3
- package/dist/cjs/nodes/account/account-login.js.map +1 -1
- package/dist/cjs/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-signup.js +7 -4
- package/dist/cjs/nodes/account/account-signup.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.js +6 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/cjs/nodes/browser/browser-get-push-subscription.d.ts +9 -0
- package/dist/cjs/nodes/browser/browser-get-push-subscription.d.ts.map +1 -0
- package/dist/cjs/nodes/browser/browser-get-push-subscription.js +25 -0
- package/dist/cjs/nodes/browser/browser-get-push-subscription.js.map +1 -0
- package/dist/cjs/nodes/browser/browser-show-notification.d.ts +10 -0
- package/dist/cjs/nodes/browser/browser-show-notification.d.ts.map +1 -1
- package/dist/cjs/nodes/browser/browser-show-notification.js +65 -40
- package/dist/cjs/nodes/browser/browser-show-notification.js.map +1 -1
- package/dist/cjs/nodes/browser/browser-subscribe-to-push.d.ts +11 -0
- package/dist/cjs/nodes/browser/browser-subscribe-to-push.d.ts.map +1 -1
- package/dist/cjs/nodes/browser/browser-subscribe-to-push.js +21 -31
- package/dist/cjs/nodes/browser/browser-subscribe-to-push.js.map +1 -1
- package/dist/cjs/nodes/browser/browser-unsubscribe-from-push.d.ts +8 -0
- package/dist/cjs/nodes/browser/browser-unsubscribe-from-push.d.ts.map +1 -0
- package/dist/cjs/nodes/browser/browser-unsubscribe-from-push.js +24 -0
- package/dist/cjs/nodes/browser/browser-unsubscribe-from-push.js.map +1 -0
- package/dist/cjs/nodes/browser/push-api-access.d.ts +12 -0
- package/dist/cjs/nodes/browser/push-api-access.d.ts.map +1 -0
- package/dist/cjs/nodes/browser/push-api-access.js +19 -0
- package/dist/cjs/nodes/browser/push-api-access.js.map +1 -0
- package/dist/cjs/nodes/cart/cart-add-item.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-add-item.js +174 -10
- package/dist/cjs/nodes/cart/cart-add-item.js.map +1 -1
- package/dist/cjs/nodes/cart/cart-clear.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-clear.js +11 -0
- package/dist/cjs/nodes/cart/cart-clear.js.map +1 -1
- package/dist/cjs/nodes/cart/cart-get-total.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-get-total.js +260 -3
- package/dist/cjs/nodes/cart/cart-get-total.js.map +1 -1
- package/dist/cjs/nodes/cart/cart-price-order.d.ts +3 -0
- package/dist/cjs/nodes/cart/cart-price-order.d.ts.map +1 -0
- package/dist/cjs/nodes/cart/cart-price-order.js +281 -0
- package/dist/cjs/nodes/cart/cart-price-order.js.map +1 -0
- package/dist/cjs/nodes/cart/cart-update-item-quantity.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-update-item-quantity.js +7 -0
- package/dist/cjs/nodes/cart/cart-update-item-quantity.js.map +1 -1
- package/dist/cjs/nodes/data/data-count.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-count.js +6 -1
- package/dist/cjs/nodes/data/data-count.js.map +1 -1
- package/dist/cjs/nodes/data/data-create-item.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-create-item.js +11 -1
- package/dist/cjs/nodes/data/data-create-item.js.map +1 -1
- package/dist/cjs/nodes/data/data-delete-item.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-delete-item.js +29 -0
- package/dist/cjs/nodes/data/data-delete-item.js.map +1 -1
- package/dist/cjs/nodes/data/data-raw-query.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-raw-query.js +6 -1
- package/dist/cjs/nodes/data/data-raw-query.js.map +1 -1
- package/dist/cjs/nodes/data/data-select.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-select.js +6 -1
- package/dist/cjs/nodes/data/data-select.js.map +1 -1
- package/dist/cjs/nodes/data/data-update-item.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-update-item.js +29 -0
- package/dist/cjs/nodes/data/data-update-item.js.map +1 -1
- package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.d.ts.map +1 -1
- package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.js +7 -1
- package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.js.map +1 -1
- package/dist/cjs/nodes/file-storage/file-storage-upload.d.ts.map +1 -1
- package/dist/cjs/nodes/file-storage/file-storage-upload.js +7 -0
- package/dist/cjs/nodes/file-storage/file-storage-upload.js.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.js +21 -5
- package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
- package/dist/cjs/nodes/index.d.ts.map +1 -1
- package/dist/cjs/nodes/index.js +9 -4
- package/dist/cjs/nodes/index.js.map +1 -1
- package/dist/cjs/nodes/payment/payment-billing-portal.d.ts +3 -0
- package/dist/cjs/nodes/payment/payment-billing-portal.d.ts.map +1 -0
- package/dist/cjs/nodes/payment/payment-billing-portal.js +52 -0
- package/dist/cjs/nodes/payment/payment-billing-portal.js.map +1 -0
- package/dist/cjs/nodes/payment/payment-charge-user.d.ts.map +1 -1
- package/dist/cjs/nodes/payment/payment-charge-user.js +227 -360
- package/dist/cjs/nodes/payment/payment-charge-user.js.map +1 -1
- package/dist/cjs/nodes/payment/payment-close-checkout.d.ts +3 -0
- package/dist/cjs/nodes/payment/payment-close-checkout.d.ts.map +1 -0
- package/dist/cjs/nodes/payment/payment-close-checkout.js +141 -0
- package/dist/cjs/nodes/payment/payment-close-checkout.js.map +1 -0
- package/dist/cjs/nodes/payment/payment-ensure-subscription-plan.d.ts +3 -0
- package/dist/cjs/nodes/payment/payment-ensure-subscription-plan.d.ts.map +1 -0
- package/dist/cjs/nodes/payment/payment-ensure-subscription-plan.js +67 -0
- package/dist/cjs/nodes/payment/payment-ensure-subscription-plan.js.map +1 -0
- package/dist/cjs/nodes/payment/payment-manage-subscription.d.ts +3 -0
- package/dist/cjs/nodes/payment/payment-manage-subscription.d.ts.map +1 -0
- package/dist/cjs/nodes/payment/payment-manage-subscription.js +89 -0
- package/dist/cjs/nodes/payment/payment-manage-subscription.js.map +1 -0
- package/dist/cjs/nodes/payment/payment-refund.d.ts.map +1 -1
- package/dist/cjs/nodes/payment/payment-refund.js +50 -404
- package/dist/cjs/nodes/payment/payment-refund.js.map +1 -1
- package/dist/cjs/nodes/push/push-send-notification.d.ts +14 -0
- package/dist/cjs/nodes/push/push-send-notification.d.ts.map +1 -0
- package/dist/cjs/nodes/push/push-send-notification.js +83 -0
- package/dist/cjs/nodes/push/push-send-notification.js.map +1 -0
- package/dist/cjs/payments/drivers/coingate-driver-code.d.ts +16 -0
- package/dist/cjs/payments/drivers/coingate-driver-code.d.ts.map +1 -0
- package/dist/cjs/payments/drivers/coingate-driver-code.js +471 -0
- package/dist/cjs/payments/drivers/coingate-driver-code.js.map +1 -0
- package/dist/cjs/payments/drivers/mollie-driver-code.d.ts +16 -0
- package/dist/cjs/payments/drivers/mollie-driver-code.d.ts.map +1 -0
- package/dist/cjs/payments/drivers/mollie-driver-code.js +623 -0
- package/dist/cjs/payments/drivers/mollie-driver-code.js.map +1 -0
- package/dist/cjs/payments/drivers/paddle-driver-code.d.ts +12 -0
- package/dist/cjs/payments/drivers/paddle-driver-code.d.ts.map +1 -0
- package/dist/cjs/payments/drivers/paddle-driver-code.js +683 -0
- package/dist/cjs/payments/drivers/paddle-driver-code.js.map +1 -0
- package/dist/cjs/payments/drivers/paypal-driver-code.d.ts +12 -0
- package/dist/cjs/payments/drivers/paypal-driver-code.d.ts.map +1 -0
- package/dist/cjs/payments/drivers/paypal-driver-code.js +1261 -0
- package/dist/cjs/payments/drivers/paypal-driver-code.js.map +1 -0
- package/dist/cjs/payments/drivers/razorpay-driver-code.d.ts +12 -0
- package/dist/cjs/payments/drivers/razorpay-driver-code.d.ts.map +1 -0
- package/dist/cjs/payments/drivers/razorpay-driver-code.js +732 -0
- package/dist/cjs/payments/drivers/razorpay-driver-code.js.map +1 -0
- package/dist/cjs/payments/drivers/square-driver-code.d.ts +14 -0
- package/dist/cjs/payments/drivers/square-driver-code.d.ts.map +1 -0
- package/dist/cjs/payments/drivers/square-driver-code.js +931 -0
- package/dist/cjs/payments/drivers/square-driver-code.js.map +1 -0
- package/dist/cjs/payments/drivers/stripe-driver-code.d.ts +12 -0
- package/dist/cjs/payments/drivers/stripe-driver-code.d.ts.map +1 -0
- package/dist/cjs/payments/drivers/stripe-driver-code.js +778 -0
- package/dist/cjs/payments/drivers/stripe-driver-code.js.map +1 -0
- package/dist/cjs/payments/index.d.ts +66 -0
- package/dist/cjs/payments/index.d.ts.map +1 -0
- package/dist/cjs/payments/index.js +175 -0
- package/dist/cjs/payments/index.js.map +1 -0
- package/dist/cjs/payments/payment-core-code.d.ts +19 -0
- package/dist/cjs/payments/payment-core-code.d.ts.map +1 -0
- package/dist/cjs/payments/payment-core-code.js +422 -0
- package/dist/cjs/payments/payment-core-code.js.map +1 -0
- package/dist/cjs/payments/payment-driver-code-map.d.ts +4 -0
- package/dist/cjs/payments/payment-driver-code-map.d.ts.map +1 -0
- package/dist/cjs/payments/payment-driver-code-map.js +21 -0
- package/dist/cjs/payments/payment-driver-code-map.js.map +1 -0
- package/dist/cjs/payments/payment-drivers-scope.d.ts +35 -0
- package/dist/cjs/payments/payment-drivers-scope.d.ts.map +1 -0
- package/dist/cjs/payments/payment-drivers-scope.js +56 -0
- package/dist/cjs/payments/payment-drivers-scope.js.map +1 -0
- package/dist/cjs/payments/payment-registry-code.d.ts +8 -0
- package/dist/cjs/payments/payment-registry-code.d.ts.map +1 -0
- package/dist/cjs/payments/payment-registry-code.js +41 -0
- package/dist/cjs/payments/payment-registry-code.js.map +1 -0
- package/dist/cjs/pg-client-code.d.ts +10 -0
- package/dist/cjs/pg-client-code.d.ts.map +1 -1
- package/dist/cjs/pg-client-code.js +27 -1
- package/dist/cjs/pg-client-code.js.map +1 -1
- package/dist/cjs/runtime-storage-generator.d.ts +28 -0
- package/dist/cjs/runtime-storage-generator.d.ts.map +1 -1
- package/dist/cjs/runtime-storage-generator.js +240 -5
- package/dist/cjs/runtime-storage-generator.js.map +1 -1
- package/dist/cjs/secret-collector.d.ts.map +1 -1
- package/dist/cjs/secret-collector.js +8 -3
- package/dist/cjs/secret-collector.js.map +1 -1
- package/dist/cjs/security-scanner.d.ts +10 -1
- package/dist/cjs/security-scanner.d.ts.map +1 -1
- package/dist/cjs/security-scanner.js +19 -1
- package/dist/cjs/security-scanner.js.map +1 -1
- package/dist/cjs/segment-context-needs.d.ts +38 -0
- package/dist/cjs/segment-context-needs.d.ts.map +1 -0
- package/dist/cjs/segment-context-needs.js +129 -0
- package/dist/cjs/segment-context-needs.js.map +1 -0
- package/dist/cjs/segment-splitter.d.ts.map +1 -1
- package/dist/cjs/segment-splitter.js +6 -1
- package/dist/cjs/segment-splitter.js.map +1 -1
- package/dist/cjs/segment-trust.d.ts +50 -0
- package/dist/cjs/segment-trust.d.ts.map +1 -0
- package/dist/cjs/segment-trust.js +115 -0
- package/dist/cjs/segment-trust.js.map +1 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts +19 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.js +1 -24
- package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/cjs/server-runtime-code.d.ts +34 -0
- package/dist/cjs/server-runtime-code.d.ts.map +1 -0
- package/dist/cjs/server-runtime-code.js +303 -0
- package/dist/cjs/server-runtime-code.js.map +1 -0
- package/dist/cjs/session-cookie-resolver.d.ts +3 -78
- package/dist/cjs/session-cookie-resolver.d.ts.map +1 -1
- package/dist/cjs/session-cookie-resolver.js +7 -276
- package/dist/cjs/session-cookie-resolver.js.map +1 -1
- package/dist/cjs/subscriber-access-route-generator.d.ts +71 -0
- package/dist/cjs/subscriber-access-route-generator.d.ts.map +1 -0
- package/dist/cjs/subscriber-access-route-generator.js +301 -0
- package/dist/cjs/subscriber-access-route-generator.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +6 -0
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/webhook-delivery-lease/index.d.ts +8 -0
- package/dist/cjs/webhook-delivery-lease/index.d.ts.map +1 -0
- package/dist/cjs/webhook-delivery-lease/index.js +41 -0
- package/dist/cjs/webhook-delivery-lease/index.js.map +1 -0
- package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.d.ts +26 -0
- package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.d.ts.map +1 -0
- package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.js +151 -0
- package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.js.map +1 -0
- package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-scope.d.ts +16 -0
- package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-scope.d.ts.map +1 -0
- package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-scope.js +19 -0
- package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-scope.js.map +1 -0
- package/dist/cjs/webhook-generator.d.ts +1 -1
- package/dist/cjs/webhook-generator.d.ts.map +1 -1
- package/dist/cjs/webhook-generator.js +342 -254
- package/dist/cjs/webhook-generator.js.map +1 -1
- package/dist/cjs/webhook-signature-verification.d.ts +17 -1
- package/dist/cjs/webhook-signature-verification.d.ts.map +1 -1
- package/dist/cjs/webhook-signature-verification.js +182 -27
- package/dist/cjs/webhook-signature-verification.js.map +1 -1
- package/dist/cjs/workflow-auth-generator.d.ts +9 -6
- package/dist/cjs/workflow-auth-generator.d.ts.map +1 -1
- package/dist/cjs/workflow-auth-generator.js +133 -29
- package/dist/cjs/workflow-auth-generator.js.map +1 -1
- package/dist/cjs/workflow-component-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-component-plugin.js +65 -28
- package/dist/cjs/workflow-component-plugin.js.map +1 -1
- package/dist/cjs/workflow-project-plugin.d.ts +13 -0
- package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-project-plugin.js +215 -65
- package/dist/cjs/workflow-project-plugin.js.map +1 -1
- package/dist/esm/admin-form-hydration.d.ts +10 -0
- package/dist/esm/admin-form-hydration.d.ts.map +1 -0
- package/dist/esm/admin-form-hydration.js +21 -0
- package/dist/esm/admin-form-hydration.js.map +1 -0
- package/dist/esm/api-route-generator.d.ts +19 -3
- package/dist/esm/api-route-generator.d.ts.map +1 -1
- package/dist/esm/api-route-generator.js +189 -70
- package/dist/esm/api-route-generator.js.map +1 -1
- package/dist/esm/auth-generator.d.ts +4 -1
- package/dist/esm/auth-generator.d.ts.map +1 -1
- package/dist/esm/auth-generator.js +241 -62
- package/dist/esm/auth-generator.js.map +1 -1
- package/dist/esm/auth-return/signed-in-destination-code.d.ts +17 -0
- package/dist/esm/auth-return/signed-in-destination-code.d.ts.map +1 -0
- package/dist/esm/auth-return/signed-in-destination-code.js +33 -0
- package/dist/esm/auth-return/signed-in-destination-code.js.map +1 -0
- package/dist/esm/cart-pricing-preamble.d.ts +12 -0
- package/dist/esm/cart-pricing-preamble.d.ts.map +1 -0
- package/dist/esm/cart-pricing-preamble.js +19 -0
- package/dist/esm/cart-pricing-preamble.js.map +1 -0
- package/dist/esm/cron-request-verification.d.ts +24 -0
- package/dist/esm/cron-request-verification.d.ts.map +1 -0
- package/dist/esm/cron-request-verification.js +80 -0
- package/dist/esm/cron-request-verification.js.map +1 -0
- package/dist/esm/custom-node-modules.d.ts +30 -0
- package/dist/esm/custom-node-modules.d.ts.map +1 -0
- package/dist/esm/custom-node-modules.js +84 -0
- package/dist/esm/custom-node-modules.js.map +1 -0
- package/dist/esm/data-api-route-generator.d.ts +27 -0
- package/dist/esm/data-api-route-generator.d.ts.map +1 -1
- package/dist/esm/data-api-route-generator.js +365 -28
- package/dist/esm/data-api-route-generator.js.map +1 -1
- package/dist/esm/ecommerce/cart-availability.d.ts.map +1 -1
- package/dist/esm/ecommerce/cart-availability.js +22 -13
- package/dist/esm/ecommerce/cart-availability.js.map +1 -1
- package/dist/esm/ecommerce/stock-decrement.d.ts +2 -1
- package/dist/esm/ecommerce/stock-decrement.d.ts.map +1 -1
- package/dist/esm/ecommerce/stock-decrement.js +6 -0
- package/dist/esm/ecommerce/stock-decrement.js.map +1 -1
- package/dist/esm/executor-generator.d.ts +0 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +212 -18
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/index.d.ts +12 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +10 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/invoice/api-routes-code.d.ts +26 -0
- package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/esm/invoice/api-routes-code.js +421 -390
- package/dist/esm/invoice/api-routes-code.js.map +1 -1
- package/dist/esm/invoice/data-access-code.d.ts.map +1 -1
- package/dist/esm/invoice/data-access-code.js +420 -107
- package/dist/esm/invoice/data-access-code.js.map +1 -1
- package/dist/esm/invoice/index.d.ts.map +1 -1
- package/dist/esm/invoice/index.js +25 -1
- package/dist/esm/invoice/index.js.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.d.ts +12 -0
- package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -0
- package/dist/esm/invoice/invoice-assembly-code.js +513 -0
- package/dist/esm/invoice/invoice-assembly-code.js.map +1 -0
- package/dist/esm/invoice/invoice-html-code.d.ts.map +1 -1
- package/dist/esm/invoice/invoice-html-code.js +111 -9
- package/dist/esm/invoice/invoice-html-code.js.map +1 -1
- package/dist/esm/invoice/pdf-service-client-code.d.ts.map +1 -1
- package/dist/esm/invoice/pdf-service-client-code.js +3 -4
- package/dist/esm/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/esm/nodes/account/account-login.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-login.js +4 -3
- package/dist/esm/nodes/account/account-login.js.map +1 -1
- package/dist/esm/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-signup.js +7 -4
- package/dist/esm/nodes/account/account-signup.js.map +1 -1
- package/dist/esm/nodes/ai/ai-select-database-data.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-select-database-data.js +6 -1
- package/dist/esm/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/esm/nodes/browser/browser-get-push-subscription.d.ts +9 -0
- package/dist/esm/nodes/browser/browser-get-push-subscription.d.ts.map +1 -0
- package/dist/esm/nodes/browser/browser-get-push-subscription.js +22 -0
- package/dist/esm/nodes/browser/browser-get-push-subscription.js.map +1 -0
- package/dist/esm/nodes/browser/browser-show-notification.d.ts +10 -0
- package/dist/esm/nodes/browser/browser-show-notification.d.ts.map +1 -1
- package/dist/esm/nodes/browser/browser-show-notification.js +65 -40
- package/dist/esm/nodes/browser/browser-show-notification.js.map +1 -1
- package/dist/esm/nodes/browser/browser-subscribe-to-push.d.ts +11 -0
- package/dist/esm/nodes/browser/browser-subscribe-to-push.d.ts.map +1 -1
- package/dist/esm/nodes/browser/browser-subscribe-to-push.js +21 -31
- package/dist/esm/nodes/browser/browser-subscribe-to-push.js.map +1 -1
- package/dist/esm/nodes/browser/browser-unsubscribe-from-push.d.ts +8 -0
- package/dist/esm/nodes/browser/browser-unsubscribe-from-push.d.ts.map +1 -0
- package/dist/esm/nodes/browser/browser-unsubscribe-from-push.js +21 -0
- package/dist/esm/nodes/browser/browser-unsubscribe-from-push.js.map +1 -0
- package/dist/esm/nodes/browser/push-api-access.d.ts +12 -0
- package/dist/esm/nodes/browser/push-api-access.d.ts.map +1 -0
- package/dist/esm/nodes/browser/push-api-access.js +13 -0
- package/dist/esm/nodes/browser/push-api-access.js.map +1 -0
- package/dist/esm/nodes/cart/cart-add-item.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-add-item.js +174 -10
- package/dist/esm/nodes/cart/cart-add-item.js.map +1 -1
- package/dist/esm/nodes/cart/cart-clear.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-clear.js +11 -0
- package/dist/esm/nodes/cart/cart-clear.js.map +1 -1
- package/dist/esm/nodes/cart/cart-get-total.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-get-total.js +261 -4
- package/dist/esm/nodes/cart/cart-get-total.js.map +1 -1
- package/dist/esm/nodes/cart/cart-price-order.d.ts +3 -0
- package/dist/esm/nodes/cart/cart-price-order.d.ts.map +1 -0
- package/dist/esm/nodes/cart/cart-price-order.js +278 -0
- package/dist/esm/nodes/cart/cart-price-order.js.map +1 -0
- package/dist/esm/nodes/cart/cart-update-item-quantity.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-update-item-quantity.js +7 -0
- package/dist/esm/nodes/cart/cart-update-item-quantity.js.map +1 -1
- package/dist/esm/nodes/data/data-count.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-count.js +6 -1
- package/dist/esm/nodes/data/data-count.js.map +1 -1
- package/dist/esm/nodes/data/data-create-item.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-create-item.js +11 -1
- package/dist/esm/nodes/data/data-create-item.js.map +1 -1
- package/dist/esm/nodes/data/data-delete-item.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-delete-item.js +29 -0
- package/dist/esm/nodes/data/data-delete-item.js.map +1 -1
- package/dist/esm/nodes/data/data-raw-query.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-raw-query.js +6 -1
- package/dist/esm/nodes/data/data-raw-query.js.map +1 -1
- package/dist/esm/nodes/data/data-select.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-select.js +6 -1
- package/dist/esm/nodes/data/data-select.js.map +1 -1
- package/dist/esm/nodes/data/data-update-item.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-update-item.js +29 -0
- package/dist/esm/nodes/data/data-update-item.js.map +1 -1
- package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.d.ts.map +1 -1
- package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.js +7 -1
- package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.js.map +1 -1
- package/dist/esm/nodes/file-storage/file-storage-upload.d.ts.map +1 -1
- package/dist/esm/nodes/file-storage/file-storage-upload.js +7 -0
- package/dist/esm/nodes/file-storage/file-storage-upload.js.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.js +21 -5
- package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
- package/dist/esm/nodes/index.d.ts.map +1 -1
- package/dist/esm/nodes/index.js +9 -4
- package/dist/esm/nodes/index.js.map +1 -1
- package/dist/esm/nodes/payment/payment-billing-portal.d.ts +3 -0
- package/dist/esm/nodes/payment/payment-billing-portal.d.ts.map +1 -0
- package/dist/esm/nodes/payment/payment-billing-portal.js +49 -0
- package/dist/esm/nodes/payment/payment-billing-portal.js.map +1 -0
- package/dist/esm/nodes/payment/payment-charge-user.d.ts.map +1 -1
- package/dist/esm/nodes/payment/payment-charge-user.js +227 -360
- package/dist/esm/nodes/payment/payment-charge-user.js.map +1 -1
- package/dist/esm/nodes/payment/payment-close-checkout.d.ts +3 -0
- package/dist/esm/nodes/payment/payment-close-checkout.d.ts.map +1 -0
- package/dist/esm/nodes/payment/payment-close-checkout.js +138 -0
- package/dist/esm/nodes/payment/payment-close-checkout.js.map +1 -0
- package/dist/esm/nodes/payment/payment-ensure-subscription-plan.d.ts +3 -0
- package/dist/esm/nodes/payment/payment-ensure-subscription-plan.d.ts.map +1 -0
- package/dist/esm/nodes/payment/payment-ensure-subscription-plan.js +64 -0
- package/dist/esm/nodes/payment/payment-ensure-subscription-plan.js.map +1 -0
- package/dist/esm/nodes/payment/payment-manage-subscription.d.ts +3 -0
- package/dist/esm/nodes/payment/payment-manage-subscription.d.ts.map +1 -0
- package/dist/esm/nodes/payment/payment-manage-subscription.js +86 -0
- package/dist/esm/nodes/payment/payment-manage-subscription.js.map +1 -0
- package/dist/esm/nodes/payment/payment-refund.d.ts.map +1 -1
- package/dist/esm/nodes/payment/payment-refund.js +50 -404
- package/dist/esm/nodes/payment/payment-refund.js.map +1 -1
- package/dist/esm/nodes/push/push-send-notification.d.ts +14 -0
- package/dist/esm/nodes/push/push-send-notification.d.ts.map +1 -0
- package/dist/esm/nodes/push/push-send-notification.js +80 -0
- package/dist/esm/nodes/push/push-send-notification.js.map +1 -0
- package/dist/esm/payments/drivers/coingate-driver-code.d.ts +16 -0
- package/dist/esm/payments/drivers/coingate-driver-code.d.ts.map +1 -0
- package/dist/esm/payments/drivers/coingate-driver-code.js +467 -0
- package/dist/esm/payments/drivers/coingate-driver-code.js.map +1 -0
- package/dist/esm/payments/drivers/mollie-driver-code.d.ts +16 -0
- package/dist/esm/payments/drivers/mollie-driver-code.d.ts.map +1 -0
- package/dist/esm/payments/drivers/mollie-driver-code.js +619 -0
- package/dist/esm/payments/drivers/mollie-driver-code.js.map +1 -0
- package/dist/esm/payments/drivers/paddle-driver-code.d.ts +12 -0
- package/dist/esm/payments/drivers/paddle-driver-code.d.ts.map +1 -0
- package/dist/esm/payments/drivers/paddle-driver-code.js +679 -0
- package/dist/esm/payments/drivers/paddle-driver-code.js.map +1 -0
- package/dist/esm/payments/drivers/paypal-driver-code.d.ts +12 -0
- package/dist/esm/payments/drivers/paypal-driver-code.d.ts.map +1 -0
- package/dist/esm/payments/drivers/paypal-driver-code.js +1257 -0
- package/dist/esm/payments/drivers/paypal-driver-code.js.map +1 -0
- package/dist/esm/payments/drivers/razorpay-driver-code.d.ts +12 -0
- package/dist/esm/payments/drivers/razorpay-driver-code.d.ts.map +1 -0
- package/dist/esm/payments/drivers/razorpay-driver-code.js +728 -0
- package/dist/esm/payments/drivers/razorpay-driver-code.js.map +1 -0
- package/dist/esm/payments/drivers/square-driver-code.d.ts +14 -0
- package/dist/esm/payments/drivers/square-driver-code.d.ts.map +1 -0
- package/dist/esm/payments/drivers/square-driver-code.js +927 -0
- package/dist/esm/payments/drivers/square-driver-code.js.map +1 -0
- package/dist/esm/payments/drivers/stripe-driver-code.d.ts +12 -0
- package/dist/esm/payments/drivers/stripe-driver-code.d.ts.map +1 -0
- package/dist/esm/payments/drivers/stripe-driver-code.js +774 -0
- package/dist/esm/payments/drivers/stripe-driver-code.js.map +1 -0
- package/dist/esm/payments/index.d.ts +66 -0
- package/dist/esm/payments/index.d.ts.map +1 -0
- package/dist/esm/payments/index.js +164 -0
- package/dist/esm/payments/index.js.map +1 -0
- package/dist/esm/payments/payment-core-code.d.ts +19 -0
- package/dist/esm/payments/payment-core-code.d.ts.map +1 -0
- package/dist/esm/payments/payment-core-code.js +418 -0
- package/dist/esm/payments/payment-core-code.js.map +1 -0
- package/dist/esm/payments/payment-driver-code-map.d.ts +4 -0
- package/dist/esm/payments/payment-driver-code-map.d.ts.map +1 -0
- package/dist/esm/payments/payment-driver-code-map.js +18 -0
- package/dist/esm/payments/payment-driver-code-map.js.map +1 -0
- package/dist/esm/payments/payment-drivers-scope.d.ts +35 -0
- package/dist/esm/payments/payment-drivers-scope.d.ts.map +1 -0
- package/dist/esm/payments/payment-drivers-scope.js +51 -0
- package/dist/esm/payments/payment-drivers-scope.js.map +1 -0
- package/dist/esm/payments/payment-registry-code.d.ts +8 -0
- package/dist/esm/payments/payment-registry-code.d.ts.map +1 -0
- package/dist/esm/payments/payment-registry-code.js +37 -0
- package/dist/esm/payments/payment-registry-code.js.map +1 -0
- package/dist/esm/pg-client-code.d.ts +10 -0
- package/dist/esm/pg-client-code.d.ts.map +1 -1
- package/dist/esm/pg-client-code.js +25 -0
- package/dist/esm/pg-client-code.js.map +1 -1
- package/dist/esm/runtime-storage-generator.d.ts +28 -0
- package/dist/esm/runtime-storage-generator.d.ts.map +1 -1
- package/dist/esm/runtime-storage-generator.js +239 -4
- package/dist/esm/runtime-storage-generator.js.map +1 -1
- package/dist/esm/secret-collector.d.ts.map +1 -1
- package/dist/esm/secret-collector.js +8 -3
- package/dist/esm/secret-collector.js.map +1 -1
- package/dist/esm/security-scanner.d.ts +10 -1
- package/dist/esm/security-scanner.d.ts.map +1 -1
- package/dist/esm/security-scanner.js +18 -0
- package/dist/esm/security-scanner.js.map +1 -1
- package/dist/esm/segment-context-needs.d.ts +38 -0
- package/dist/esm/segment-context-needs.d.ts.map +1 -0
- package/dist/esm/segment-context-needs.js +125 -0
- package/dist/esm/segment-context-needs.js.map +1 -0
- package/dist/esm/segment-splitter.d.ts.map +1 -1
- package/dist/esm/segment-splitter.js +6 -1
- package/dist/esm/segment-splitter.js.map +1 -1
- package/dist/esm/segment-trust.d.ts +50 -0
- package/dist/esm/segment-trust.d.ts.map +1 -0
- package/dist/esm/segment-trust.js +111 -0
- package/dist/esm/segment-trust.js.map +1 -0
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts +19 -0
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.js +2 -25
- package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/esm/server-runtime-code.d.ts +34 -0
- package/dist/esm/server-runtime-code.d.ts.map +1 -0
- package/dist/esm/server-runtime-code.js +299 -0
- package/dist/esm/server-runtime-code.js.map +1 -0
- package/dist/esm/session-cookie-resolver.d.ts +3 -78
- package/dist/esm/session-cookie-resolver.d.ts.map +1 -1
- package/dist/esm/session-cookie-resolver.js +7 -274
- package/dist/esm/session-cookie-resolver.js.map +1 -1
- package/dist/esm/subscriber-access-route-generator.d.ts +71 -0
- package/dist/esm/subscriber-access-route-generator.d.ts.map +1 -0
- package/dist/esm/subscriber-access-route-generator.js +292 -0
- package/dist/esm/subscriber-access-route-generator.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +6 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/webhook-delivery-lease/index.d.ts +8 -0
- package/dist/esm/webhook-delivery-lease/index.d.ts.map +1 -0
- package/dist/esm/webhook-delivery-lease/index.js +37 -0
- package/dist/esm/webhook-delivery-lease/index.js.map +1 -0
- package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.d.ts +26 -0
- package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.d.ts.map +1 -0
- package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.js +147 -0
- package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.js.map +1 -0
- package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-scope.d.ts +16 -0
- package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-scope.d.ts.map +1 -0
- package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-scope.js +16 -0
- package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-scope.js.map +1 -0
- package/dist/esm/webhook-generator.d.ts +1 -1
- package/dist/esm/webhook-generator.d.ts.map +1 -1
- package/dist/esm/webhook-generator.js +342 -254
- package/dist/esm/webhook-generator.js.map +1 -1
- package/dist/esm/webhook-signature-verification.d.ts +17 -1
- package/dist/esm/webhook-signature-verification.d.ts.map +1 -1
- package/dist/esm/webhook-signature-verification.js +179 -25
- package/dist/esm/webhook-signature-verification.js.map +1 -1
- package/dist/esm/workflow-auth-generator.d.ts +9 -6
- package/dist/esm/workflow-auth-generator.d.ts.map +1 -1
- package/dist/esm/workflow-auth-generator.js +132 -28
- package/dist/esm/workflow-auth-generator.js.map +1 -1
- package/dist/esm/workflow-component-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-component-plugin.js +65 -28
- package/dist/esm/workflow-component-plugin.js.map +1 -1
- package/dist/esm/workflow-project-plugin.d.ts +13 -0
- package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-project-plugin.js +212 -63
- package/dist/esm/workflow-project-plugin.js.map +1 -1
- package/package.json +4 -4
- package/src/admin-form-hydration.ts +28 -0
- package/src/api-route-generator.ts +251 -64
- package/src/auth-generator.ts +273 -53
- package/src/auth-return/signed-in-destination-code.ts +32 -0
- package/src/cart-pricing-preamble.ts +22 -0
- package/src/cron-request-verification.ts +79 -0
- package/src/custom-node-modules.ts +102 -0
- package/src/data-api-route-generator.ts +370 -28
- package/src/ecommerce/cart-availability.ts +22 -13
- package/src/ecommerce/stock-decrement.ts +13 -1
- package/src/executor-generator.ts +212 -19
- package/src/index.ts +28 -7
- package/src/invoice/api-routes-code.ts +424 -391
- package/src/invoice/data-access-code.ts +431 -110
- package/src/invoice/index.ts +31 -1
- package/src/invoice/invoice-assembly-code.ts +514 -0
- package/src/invoice/invoice-html-code.ts +111 -9
- package/src/invoice/pdf-service-client-code.ts +3 -4
- package/src/nodes/account/account-login.ts +4 -3
- package/src/nodes/account/account-signup.ts +7 -4
- package/src/nodes/ai/ai-select-database-data.ts +10 -1
- package/src/nodes/browser/browser-get-push-subscription.ts +23 -0
- package/src/nodes/browser/browser-show-notification.ts +61 -38
- package/src/nodes/browser/browser-subscribe-to-push.ts +26 -36
- package/src/nodes/browser/browser-unsubscribe-from-push.ts +22 -0
- package/src/nodes/browser/push-api-access.ts +20 -0
- package/src/nodes/cart/cart-add-item.ts +200 -9
- package/src/nodes/cart/cart-clear.ts +11 -0
- package/src/nodes/cart/cart-get-total.ts +279 -7
- package/src/nodes/cart/cart-price-order.ts +351 -0
- package/src/nodes/cart/cart-update-item-quantity.ts +7 -0
- package/src/nodes/data/data-count.ts +9 -1
- package/src/nodes/data/data-create-item.ts +15 -1
- package/src/nodes/data/data-delete-item.ts +32 -0
- package/src/nodes/data/data-raw-query.ts +9 -1
- package/src/nodes/data/data-select.ts +9 -1
- package/src/nodes/data/data-update-item.ts +32 -0
- package/src/nodes/ecommerce/ecommerce-generate-invoice.ts +11 -1
- package/src/nodes/file-storage/file-storage-upload.ts +8 -0
- package/src/nodes/general/general-custom-js.ts +21 -5
- package/src/nodes/index.ts +16 -6
- package/src/nodes/payment/payment-billing-portal.ts +51 -0
- package/src/nodes/payment/payment-charge-user.ts +236 -442
- package/src/nodes/payment/payment-close-checkout.ts +137 -0
- package/src/nodes/payment/payment-ensure-subscription-plan.ts +66 -0
- package/src/nodes/payment/payment-manage-subscription.ts +89 -0
- package/src/nodes/payment/payment-refund.ts +52 -467
- package/src/nodes/payment-drivers-global.d.ts +13 -0
- package/src/nodes/push/push-send-notification.ts +83 -0
- package/src/nodes/workflow-utils-global.d.ts +5 -0
- package/src/payments/drivers/coingate-driver-code.ts +466 -0
- package/src/payments/drivers/mollie-driver-code.ts +618 -0
- package/src/payments/drivers/paddle-driver-code.ts +678 -0
- package/src/payments/drivers/paypal-driver-code.ts +1256 -0
- package/src/payments/drivers/razorpay-driver-code.ts +727 -0
- package/src/payments/drivers/square-driver-code.ts +926 -0
- package/src/payments/drivers/stripe-driver-code.ts +773 -0
- package/src/payments/index.ts +204 -0
- package/src/payments/payment-core-code.ts +421 -0
- package/src/payments/payment-driver-code-map.ts +19 -0
- package/src/payments/payment-drivers-scope.ts +66 -0
- package/src/payments/payment-registry-code.ts +38 -0
- package/src/pg-client-code.ts +30 -0
- package/src/runtime-storage-generator.ts +241 -4
- package/src/secret-collector.ts +8 -3
- package/src/security-scanner.ts +22 -0
- package/src/segment-context-needs.ts +148 -0
- package/src/segment-splitter.ts +6 -1
- package/src/segment-trust.ts +170 -0
- package/src/sent-email-log/sent-email-log-code.ts +2 -32
- package/src/server-runtime-code.ts +298 -0
- package/src/session-cookie-resolver.ts +9 -277
- package/src/subscriber-access-route-generator.ts +351 -0
- package/src/types.ts +6 -0
- package/src/webhook-delivery-lease/index.ts +44 -0
- package/src/webhook-delivery-lease/webhook-delivery-lease-code.ts +151 -0
- package/src/webhook-delivery-lease/webhook-delivery-lease-scope.ts +18 -0
- package/src/webhook-generator.ts +359 -260
- package/src/webhook-signature-verification.ts +180 -25
- package/src/workflow-auth-generator.ts +137 -28
- package/src/workflow-component-plugin.ts +77 -20
- package/src/workflow-project-plugin.ts +247 -44
- package/dist/cjs/nodes/payment/payment-cancel-plan.d.ts +0 -3
- package/dist/cjs/nodes/payment/payment-cancel-plan.d.ts.map +0 -1
- package/dist/cjs/nodes/payment/payment-cancel-plan.js +0 -33
- package/dist/cjs/nodes/payment/payment-cancel-plan.js.map +0 -1
- package/dist/cjs/nodes/payment/payment-create-subscription.d.ts +0 -3
- package/dist/cjs/nodes/payment/payment-create-subscription.d.ts.map +0 -1
- package/dist/cjs/nodes/payment/payment-create-subscription.js +0 -41
- package/dist/cjs/nodes/payment/payment-create-subscription.js.map +0 -1
- package/dist/cjs/nodes/payment/payment-subscribe-to-plan.d.ts +0 -3
- package/dist/cjs/nodes/payment/payment-subscribe-to-plan.d.ts.map +0 -1
- package/dist/cjs/nodes/payment/payment-subscribe-to-plan.js +0 -45
- package/dist/cjs/nodes/payment/payment-subscribe-to-plan.js.map +0 -1
- package/dist/esm/nodes/payment/payment-cancel-plan.d.ts +0 -3
- package/dist/esm/nodes/payment/payment-cancel-plan.d.ts.map +0 -1
- package/dist/esm/nodes/payment/payment-cancel-plan.js +0 -30
- package/dist/esm/nodes/payment/payment-cancel-plan.js.map +0 -1
- package/dist/esm/nodes/payment/payment-create-subscription.d.ts +0 -3
- package/dist/esm/nodes/payment/payment-create-subscription.d.ts.map +0 -1
- package/dist/esm/nodes/payment/payment-create-subscription.js +0 -38
- package/dist/esm/nodes/payment/payment-create-subscription.js.map +0 -1
- package/dist/esm/nodes/payment/payment-subscribe-to-plan.d.ts +0 -3
- package/dist/esm/nodes/payment/payment-subscribe-to-plan.d.ts.map +0 -1
- package/dist/esm/nodes/payment/payment-subscribe-to-plan.js +0 -42
- package/dist/esm/nodes/payment/payment-subscribe-to-plan.js.map +0 -1
- package/src/nodes/payment/payment-cancel-plan.ts +0 -33
- package/src/nodes/payment/payment-create-subscription.ts +0 -42
- package/src/nodes/payment/payment-subscribe-to-plan.ts +0 -46
|
@@ -0,0 +1,778 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateStripeDriverCode = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Emits `utils/payments/drivers/stripe.js`: hosted Checkout (one-time and
|
|
6
|
+
* subscription), refunds, subscription management, the billing portal and
|
|
7
|
+
* webhook verification, through the official SDK.
|
|
8
|
+
*
|
|
9
|
+
* `payment_method_types` is never sent: Stripe then shows every method the
|
|
10
|
+
* merchant enabled in the Dashboard (cards, wallets, Link, bank debits and the
|
|
11
|
+
* stablecoin `crypto` method) — which is also why an asynchronous method can
|
|
12
|
+
* complete a session unpaid and settle later (see the webhook extract script).
|
|
13
|
+
*/
|
|
14
|
+
const generateStripeDriverCode = () => `'use strict';
|
|
15
|
+
/**
|
|
16
|
+
* Stripe driver. Generated by TeleportHQ — changes are overwritten on the next export.
|
|
17
|
+
*/
|
|
18
|
+
module.exports = function createStripeDriver(core) {
|
|
19
|
+
// An older store's test key, read after the names the editor saves.
|
|
20
|
+
var LEGACY_SECRET_KEY_NAMES = ['STRIPE_TEST_KEY'];
|
|
21
|
+
var MISSING_KEY = 'STRIPE_SECRET_KEY is not configured';
|
|
22
|
+
var INTERVALS = ['day', 'week', 'month', 'year'];
|
|
23
|
+
// Checkout tolerates a signature this old, as Stripe's own libraries do.
|
|
24
|
+
var SIGNATURE_TOLERANCE_SECONDS = 300;
|
|
25
|
+
// Three-decimal currencies Stripe takes only in whole tens of the smallest unit.
|
|
26
|
+
var TENS_ONLY = ['BHD', 'JOD', 'KWD', 'OMR', 'TND'];
|
|
27
|
+
|
|
28
|
+
function secretKey() {
|
|
29
|
+
return core.credential('stripe', 'secretKey', LEGACY_SECRET_KEY_NAMES);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// An amount in Stripe's smallest unit: the thousandth first, as everywhere,
|
|
33
|
+
// then the nearest ten where Stripe requires it.
|
|
34
|
+
function minorUnits(major, currency) {
|
|
35
|
+
var value = core.toMinor(major, currency);
|
|
36
|
+
return TENS_ONLY.indexOf(String(currency || '').toUpperCase()) >= 0 ? Math.round(value / 10) * 10 : value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function client(key) {
|
|
40
|
+
var Stripe = require('stripe');
|
|
41
|
+
return new Stripe(key);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function idOf(value) {
|
|
45
|
+
if (typeof value === 'string') {
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
return value && value.id ? String(value.id) : '';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function unixToIso(value) {
|
|
52
|
+
var seconds = Number(value);
|
|
53
|
+
return isFinite(seconds) && seconds > 0 ? new Date(seconds * 1000).toISOString() : '';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async function createCheckout(input) {
|
|
57
|
+
var key = secretKey();
|
|
58
|
+
if (!key) {
|
|
59
|
+
return { checkoutUrl: '', sessionId: '', error: MISSING_KEY };
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
var stripe = client(key);
|
|
63
|
+
var currency = input.currency;
|
|
64
|
+
var params = {
|
|
65
|
+
mode: 'payment',
|
|
66
|
+
success_url: input.successUrl || undefined,
|
|
67
|
+
cancel_url: input.cancelUrl || undefined,
|
|
68
|
+
};
|
|
69
|
+
var lineItems = input.lineItems;
|
|
70
|
+
if (lineItems && Array.isArray(lineItems) && lineItems.length > 0) {
|
|
71
|
+
params.line_items = lineItems.map(function (item) {
|
|
72
|
+
var productData = { name: item.name || 'Item' };
|
|
73
|
+
// The options the shopper chose, under the line on Stripe's page and
|
|
74
|
+
// receipt. Stripe rejects an empty description and caps it at 500.
|
|
75
|
+
var lineDescription = typeof item.description === 'string' ? item.description.trim().slice(0, 500) : '';
|
|
76
|
+
if (lineDescription) {
|
|
77
|
+
productData.description = lineDescription;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
price_data: {
|
|
81
|
+
currency: currency,
|
|
82
|
+
product_data: productData,
|
|
83
|
+
unit_amount: minorUnits(item.unitAmount, currency),
|
|
84
|
+
},
|
|
85
|
+
quantity: Number(item.quantity) || 1,
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
} else {
|
|
89
|
+
params.line_items = [
|
|
90
|
+
{
|
|
91
|
+
price_data: {
|
|
92
|
+
currency: currency,
|
|
93
|
+
product_data: { name: input.description },
|
|
94
|
+
unit_amount: minorUnits(input.amount, currency),
|
|
95
|
+
},
|
|
96
|
+
quantity: 1,
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
if (input.metadata) {
|
|
101
|
+
params.metadata = input.metadata;
|
|
102
|
+
// On the PaymentIntent too, which Stripe copies onto the charge: a
|
|
103
|
+
// refund event carries the CHARGE, and without this it names no order.
|
|
104
|
+
params.payment_intent_data = { metadata: input.metadata };
|
|
105
|
+
}
|
|
106
|
+
if (input.customerEmail) {
|
|
107
|
+
params.customer_email = String(input.customerEmail);
|
|
108
|
+
}
|
|
109
|
+
var session = await stripe.checkout.sessions.create(params);
|
|
110
|
+
return { checkoutUrl: session.url || '', sessionId: session.id || '' };
|
|
111
|
+
} catch (err) {
|
|
112
|
+
return { checkoutUrl: '', sessionId: '', error: err && err.message ? err.message : String(err) };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// ONE recurring line, priced inline (\`price_data.recurring\`), so no price
|
|
117
|
+
// object has to exist first. \`amountDue\` below \`amount\` is what the FIRST
|
|
118
|
+
// invoice charges after a gift card paid the rest: a one-shot coupon.
|
|
119
|
+
async function createSubscriptionCheckout(input) {
|
|
120
|
+
var key = secretKey();
|
|
121
|
+
if (!key) {
|
|
122
|
+
return { checkoutUrl: '', sessionId: '', error: MISSING_KEY };
|
|
123
|
+
}
|
|
124
|
+
var currency = input.currency;
|
|
125
|
+
var interval = String(input.recurringInterval || 'month').toLowerCase();
|
|
126
|
+
if (INTERVALS.indexOf(interval) === -1) {
|
|
127
|
+
return { checkoutUrl: '', sessionId: '', error: 'Unknown billing interval "' + interval + '"' };
|
|
128
|
+
}
|
|
129
|
+
var intervalCount = Math.max(1, Math.floor(Number(input.recurringIntervalCount) || 1));
|
|
130
|
+
var trialDays = Math.max(0, Math.floor(Number(input.trialDays) || 0));
|
|
131
|
+
var unitAmount = minorUnits(input.amount, currency);
|
|
132
|
+
if (unitAmount <= 0) {
|
|
133
|
+
return { checkoutUrl: '', sessionId: '', error: 'A subscription needs a positive amount to bill' };
|
|
134
|
+
}
|
|
135
|
+
var firstChargeDue = Number(input.amountDue);
|
|
136
|
+
var firstChargeAmount =
|
|
137
|
+
isFinite(firstChargeDue) && firstChargeDue < Number(input.amount) ? minorUnits(firstChargeDue, currency) : unitAmount;
|
|
138
|
+
if (firstChargeAmount <= 0) {
|
|
139
|
+
// The tender rule leaves at least the provider minimum due; a first charge
|
|
140
|
+
// of nothing would collect no payment method for the cycles after it.
|
|
141
|
+
return { checkoutUrl: '', sessionId: '', error: 'A gift card cannot cover the whole first payment of a subscription' };
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
var stripe = client(key);
|
|
145
|
+
var subscriptionData = {};
|
|
146
|
+
if (trialDays > 0) {
|
|
147
|
+
subscriptionData.trial_period_days = trialDays;
|
|
148
|
+
}
|
|
149
|
+
if (input.metadata) {
|
|
150
|
+
// On the subscription too, so every later invoice names the order.
|
|
151
|
+
subscriptionData.metadata = input.metadata;
|
|
152
|
+
}
|
|
153
|
+
var params = {
|
|
154
|
+
mode: 'subscription',
|
|
155
|
+
success_url: input.successUrl || undefined,
|
|
156
|
+
cancel_url: input.cancelUrl || undefined,
|
|
157
|
+
line_items: [
|
|
158
|
+
{
|
|
159
|
+
price_data: {
|
|
160
|
+
currency: currency,
|
|
161
|
+
product_data: { name: input.description },
|
|
162
|
+
unit_amount: unitAmount,
|
|
163
|
+
recurring: { interval: interval, interval_count: intervalCount },
|
|
164
|
+
},
|
|
165
|
+
quantity: 1,
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
subscription_data: subscriptionData,
|
|
169
|
+
};
|
|
170
|
+
if (input.customerEmail) {
|
|
171
|
+
params.customer_email = String(input.customerEmail);
|
|
172
|
+
}
|
|
173
|
+
if (input.metadata) {
|
|
174
|
+
params.metadata = input.metadata;
|
|
175
|
+
}
|
|
176
|
+
if (firstChargeAmount < unitAmount) {
|
|
177
|
+
var coupon = await stripe.coupons.create({
|
|
178
|
+
amount_off: unitAmount - firstChargeAmount,
|
|
179
|
+
currency: currency,
|
|
180
|
+
duration: 'once',
|
|
181
|
+
max_redemptions: 1,
|
|
182
|
+
name: 'Gift card',
|
|
183
|
+
metadata: input.metadata || {},
|
|
184
|
+
});
|
|
185
|
+
params.discounts = [{ coupon: coupon.id }];
|
|
186
|
+
}
|
|
187
|
+
var session = await stripe.checkout.sessions.create(params);
|
|
188
|
+
return { checkoutUrl: session.url || '', sessionId: session.id || '', providerSubscriptionId: '' };
|
|
189
|
+
} catch (err) {
|
|
190
|
+
return { checkoutUrl: '', sessionId: '', error: err && err.message ? err.message : String(err) };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Checkout takes the price inline, so Stripe needs no plan of its own.
|
|
195
|
+
async function ensurePlan() {
|
|
196
|
+
return { ok: 'true', planId: '', providerProductId: '', created: 'false' };
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// What became of a Checkout Session the store opened earlier: still open (its
|
|
200
|
+
// page is where the buyer pays), complete (paid, or an asynchronous method
|
|
201
|
+
// still settling) or expired. A reference that is no session, or one Stripe
|
|
202
|
+
// does not know, can take no more money.
|
|
203
|
+
async function inspectCheckout(input) {
|
|
204
|
+
var reference = String((input && input.reference) || '').trim();
|
|
205
|
+
if (reference.indexOf('cs_') !== 0) {
|
|
206
|
+
return { state: 'closed', checkoutUrl: '' };
|
|
207
|
+
}
|
|
208
|
+
var key = secretKey();
|
|
209
|
+
if (!key) {
|
|
210
|
+
return { state: '', checkoutUrl: '', error: MISSING_KEY };
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
var stripe = client(key);
|
|
214
|
+
var session = await stripe.checkout.sessions.retrieve(reference);
|
|
215
|
+
var found = await sessionState(stripe, session);
|
|
216
|
+
return { state: found.state, checkoutUrl: found.checkoutUrl };
|
|
217
|
+
} catch (err) {
|
|
218
|
+
if (isMissing(err)) {
|
|
219
|
+
return { state: 'closed', checkoutUrl: '' };
|
|
220
|
+
}
|
|
221
|
+
return { state: '', checkoutUrl: '', error: core.describeError(err) };
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function isMissing(err) {
|
|
226
|
+
return !!err && (err.statusCode === 404 || err.code === 'resource_missing');
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// A session as a checkout state: open (with the page and when it runs out),
|
|
230
|
+
// complete (paid, or an asynchronous method still settling) or expired.
|
|
231
|
+
async function sessionState(stripe, session) {
|
|
232
|
+
var status = String((session && session.status) || '');
|
|
233
|
+
if (status === 'open' && session.url) {
|
|
234
|
+
return { state: 'open', checkoutUrl: String(session.url), openUntil: unixToIso(session.expires_at) };
|
|
235
|
+
}
|
|
236
|
+
if (status === 'complete') {
|
|
237
|
+
var paid = String(session.payment_status || '') !== 'unpaid';
|
|
238
|
+
return { state: paid ? 'paid' : await unpaidSessionState(stripe, session), checkoutUrl: '', openUntil: '' };
|
|
239
|
+
}
|
|
240
|
+
return { state: 'closed', checkoutUrl: '', openUntil: '' };
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// A session an asynchronous method completed UNPAID stays that way whether
|
|
244
|
+
// the money settles or not: its PaymentIntent says which. One whose payment
|
|
245
|
+
// failed or was cancelled takes no more money (its page is complete); one
|
|
246
|
+
// still processing, or waiting for the buyer's transfer, is on its way. A
|
|
247
|
+
// session with no intent (a subscription's) is settled by its invoice.
|
|
248
|
+
async function unpaidSessionState(stripe, session) {
|
|
249
|
+
var intent = session.payment_intent;
|
|
250
|
+
if (!intent) {
|
|
251
|
+
return 'confirming';
|
|
252
|
+
}
|
|
253
|
+
if (typeof intent === 'string') {
|
|
254
|
+
intent = await stripe.paymentIntents.retrieve(intent);
|
|
255
|
+
}
|
|
256
|
+
var status = String((intent && intent.status) || '');
|
|
257
|
+
if (status === 'succeeded') {
|
|
258
|
+
return 'paid';
|
|
259
|
+
}
|
|
260
|
+
if (status === 'requires_payment_method' || status === 'canceled') {
|
|
261
|
+
return 'closed';
|
|
262
|
+
}
|
|
263
|
+
return 'confirming';
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Closes a session the order no longer needs: an open one is expired, so its
|
|
267
|
+
// page takes no more money. A buyer who finished paying between the read and
|
|
268
|
+
// the expiry leaves it complete, and that is what is answered.
|
|
269
|
+
async function closeCheckout(input) {
|
|
270
|
+
var reference = String((input && input.reference) || '').trim();
|
|
271
|
+
if (reference.indexOf('cs_') !== 0) {
|
|
272
|
+
return { state: 'closed', checkoutUrl: '', openUntil: '' };
|
|
273
|
+
}
|
|
274
|
+
var key = secretKey();
|
|
275
|
+
if (!key) {
|
|
276
|
+
return { state: '', error: MISSING_KEY };
|
|
277
|
+
}
|
|
278
|
+
try {
|
|
279
|
+
var stripe = client(key);
|
|
280
|
+
var session = await stripe.checkout.sessions.retrieve(reference);
|
|
281
|
+
if (String(session.status || '') === 'open') {
|
|
282
|
+
try {
|
|
283
|
+
session = await stripe.checkout.sessions.expire(reference);
|
|
284
|
+
} catch (_expireError) {
|
|
285
|
+
session = await stripe.checkout.sessions.retrieve(reference);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
var found = await sessionState(stripe, session);
|
|
289
|
+
if (found.state === 'open') {
|
|
290
|
+
return { state: '', error: 'Stripe did not expire checkout ' + reference + '.' };
|
|
291
|
+
}
|
|
292
|
+
return found;
|
|
293
|
+
} catch (err) {
|
|
294
|
+
if (isMissing(err)) {
|
|
295
|
+
return { state: 'closed', checkoutUrl: '', openUntil: '' };
|
|
296
|
+
}
|
|
297
|
+
return { state: '', error: core.describeError(err) };
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// The Checkout Sessions opened for an order around the moment it was placed
|
|
302
|
+
// (sessions carry the order in their metadata): how an order that recorded
|
|
303
|
+
// no checkout finds the one its placing opened.
|
|
304
|
+
async function findCheckouts(input) {
|
|
305
|
+
var orderId = String((input && input.orderId) || '').trim();
|
|
306
|
+
var span = core.searchWindow(input && input.placedAt);
|
|
307
|
+
if (!orderId || !span) {
|
|
308
|
+
return { error: 'The order to look up names no id or no time it was placed.' };
|
|
309
|
+
}
|
|
310
|
+
var key = secretKey();
|
|
311
|
+
if (!key) {
|
|
312
|
+
return { error: MISSING_KEY };
|
|
313
|
+
}
|
|
314
|
+
try {
|
|
315
|
+
var stripe = client(key);
|
|
316
|
+
var references = [];
|
|
317
|
+
var startingAfter = '';
|
|
318
|
+
for (var page = 0; page < core.SEARCH_PAGE_LIMIT; page++) {
|
|
319
|
+
var params = { created: { gte: Math.floor(span.from / 1000), lte: Math.ceil(span.to / 1000) }, limit: 100 };
|
|
320
|
+
if (startingAfter) {
|
|
321
|
+
params.starting_after = startingAfter;
|
|
322
|
+
}
|
|
323
|
+
var list = await stripe.checkout.sessions.list(params);
|
|
324
|
+
var sessions = list && Array.isArray(list.data) ? list.data : [];
|
|
325
|
+
sessions.forEach(function (session) {
|
|
326
|
+
if (session && session.id && String(core.readMetadata(session.metadata).orderId || '') === orderId) {
|
|
327
|
+
references.push(String(session.id));
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
if (!list || !list.has_more || sessions.length === 0) {
|
|
331
|
+
return { references: references };
|
|
332
|
+
}
|
|
333
|
+
startingAfter = String(sessions[sessions.length - 1].id);
|
|
334
|
+
}
|
|
335
|
+
return { error: 'Stripe has more checkouts around the time this order was placed than the store can search.' };
|
|
336
|
+
} catch (err) {
|
|
337
|
+
return { error: core.describeError(err) };
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// The payment behind a subscription invoice: \`payment_intent\` on the classic
|
|
342
|
+
// shape, \`payments.data[0].payment.payment_intent\` from the 2025 versions,
|
|
343
|
+
// only \`charge\` on the oldest rows.
|
|
344
|
+
function invoicePaymentTarget(invoice) {
|
|
345
|
+
if (!invoice) {
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
var classic = idOf(invoice.payment_intent);
|
|
349
|
+
if (classic) {
|
|
350
|
+
return { paymentIntent: classic };
|
|
351
|
+
}
|
|
352
|
+
var payments = invoice.payments && invoice.payments.data ? invoice.payments.data : [];
|
|
353
|
+
var latest = payments.length > 0 && payments[0].payment ? idOf(payments[0].payment.payment_intent) : '';
|
|
354
|
+
if (latest) {
|
|
355
|
+
return { paymentIntent: latest };
|
|
356
|
+
}
|
|
357
|
+
var charge = idOf(invoice.charge);
|
|
358
|
+
return charge ? { charge: charge } : null;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function refundFailure(currency, message, extra) {
|
|
362
|
+
var result = { success: false, refundId: '', amount: 0, currency: currency, status: '', error: message };
|
|
363
|
+
if (extra) {
|
|
364
|
+
Object.keys(extra).forEach(function (key) {
|
|
365
|
+
result[key] = extra[key];
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
return result;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// The order row stores whatever the webhook saw — a PaymentIntent, a Checkout
|
|
372
|
+
// Session, a Charge, a subscription Invoice — and \`refunds.create\` takes an
|
|
373
|
+
// intent or a charge, so each is resolved to one first.
|
|
374
|
+
async function refund(input) {
|
|
375
|
+
var currency = input.currency;
|
|
376
|
+
var key = secretKey();
|
|
377
|
+
if (!key) {
|
|
378
|
+
return refundFailure(currency, MISSING_KEY);
|
|
379
|
+
}
|
|
380
|
+
var reference = input.paymentReference;
|
|
381
|
+
try {
|
|
382
|
+
var stripe = client(key);
|
|
383
|
+
var params = {};
|
|
384
|
+
if (reference.indexOf('ch_') === 0 || reference.indexOf('py_') === 0) {
|
|
385
|
+
params.charge = reference;
|
|
386
|
+
} else if (reference.indexOf('cs_') === 0) {
|
|
387
|
+
var session = await stripe.checkout.sessions.retrieve(reference);
|
|
388
|
+
var intentId = session ? idOf(session.payment_intent) : '';
|
|
389
|
+
if (!intentId) {
|
|
390
|
+
return refundFailure(currency, 'The Stripe checkout session for this order has no payment to refund.');
|
|
391
|
+
}
|
|
392
|
+
params.payment_intent = intentId;
|
|
393
|
+
} else if (reference.indexOf('in_') === 0) {
|
|
394
|
+
var target = invoicePaymentTarget(await stripe.invoices.retrieve(reference));
|
|
395
|
+
if (!target) {
|
|
396
|
+
return refundFailure(currency, 'This Stripe invoice has no payment to refund.');
|
|
397
|
+
}
|
|
398
|
+
if (target.charge) {
|
|
399
|
+
params.charge = target.charge;
|
|
400
|
+
} else {
|
|
401
|
+
params.payment_intent = target.paymentIntent;
|
|
402
|
+
}
|
|
403
|
+
} else if (reference.indexOf('sub_') === 0) {
|
|
404
|
+
return refundFailure(currency, "A subscription id cannot be refunded; refund the order's invoice instead.");
|
|
405
|
+
} else if (reference.indexOf('re_') === 0) {
|
|
406
|
+
return refundFailure(currency, 'This payment reference is already a refund id, so there is nothing to refund.');
|
|
407
|
+
} else {
|
|
408
|
+
params.payment_intent = reference;
|
|
409
|
+
}
|
|
410
|
+
var minor = minorUnits(input.amount, currency);
|
|
411
|
+
if (input.amount > 0 && minor <= 0) {
|
|
412
|
+
// A missing amount means "refund everything", so an amount too small
|
|
413
|
+
// to express in this currency is refused rather than rounded away.
|
|
414
|
+
return refundFailure(currency, 'The amount is smaller than the smallest unit of ' + String(currency || '').toUpperCase() + '.');
|
|
415
|
+
}
|
|
416
|
+
if (minor > 0) {
|
|
417
|
+
params.amount = minor;
|
|
418
|
+
}
|
|
419
|
+
// Stripe accepts three reasons and rejects the call for anything else;
|
|
420
|
+
// the merchant's free text stays in the store's own record.
|
|
421
|
+
var normalizedReason = String(input.reason || '').trim().toLowerCase().replace(/\\s+/g, '_');
|
|
422
|
+
if (['duplicate', 'fraudulent', 'requested_by_customer'].indexOf(normalizedReason) >= 0) {
|
|
423
|
+
params.reason = normalizedReason;
|
|
424
|
+
}
|
|
425
|
+
if (input.orderId) {
|
|
426
|
+
params.metadata = { orderId: input.orderId };
|
|
427
|
+
}
|
|
428
|
+
var created = await stripe.refunds.create(params, { idempotencyKey: input.idempotencyKey });
|
|
429
|
+
var refundCurrency = String(created.currency || currency).toUpperCase();
|
|
430
|
+
var status = String(created.status || '');
|
|
431
|
+
if (status === 'failed' || status === 'canceled') {
|
|
432
|
+
var detail = created.failure_reason ? ': ' + String(created.failure_reason).replace(/_/g, ' ') : '';
|
|
433
|
+
return refundFailure(refundCurrency, 'Stripe reported the refund as ' + status + detail + '.', {
|
|
434
|
+
refundId: created.id || '',
|
|
435
|
+
status: status,
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
if (status === 'requires_action') {
|
|
439
|
+
// Some payment methods need the buyer to name where the money goes
|
|
440
|
+
// back to (Stripe asks them); none has gone back yet, and the refund
|
|
441
|
+
// is cancelled if they never answer.
|
|
442
|
+
return refundFailure(
|
|
443
|
+
refundCurrency,
|
|
444
|
+
'Stripe is waiting for the buyer to act before it can pay this refund out, so nothing has been refunded yet.',
|
|
445
|
+
{ refundId: created.id || '', status: status }
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
return {
|
|
449
|
+
success: true,
|
|
450
|
+
refundId: created.id || '',
|
|
451
|
+
amount: core.fromMinor(created.amount, refundCurrency),
|
|
452
|
+
currency: refundCurrency,
|
|
453
|
+
status: status,
|
|
454
|
+
error: '',
|
|
455
|
+
};
|
|
456
|
+
} catch (err) {
|
|
457
|
+
return refundFailure(currency, err && err.message ? err.message : String(err));
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// A paused collection is Stripe's own status with \`pause_collection\` set,
|
|
462
|
+
// which the store calls paused; an ended subscription stays ended. A status
|
|
463
|
+
// the store does not know is '' (keep what the store has).
|
|
464
|
+
function subscriptionStatus(status, pauseCollection) {
|
|
465
|
+
var value = String(status || '').toLowerCase();
|
|
466
|
+
var map = {
|
|
467
|
+
active: 'active',
|
|
468
|
+
trialing: 'trialing',
|
|
469
|
+
past_due: 'past_due',
|
|
470
|
+
unpaid: 'past_due',
|
|
471
|
+
paused: 'paused',
|
|
472
|
+
canceled: 'cancelled',
|
|
473
|
+
incomplete_expired: 'expired',
|
|
474
|
+
incomplete: 'pending',
|
|
475
|
+
};
|
|
476
|
+
var mapped = map[value] || '';
|
|
477
|
+
if (pauseCollection && pauseCollection.behavior && mapped !== 'cancelled' && mapped !== 'expired') {
|
|
478
|
+
return 'paused';
|
|
479
|
+
}
|
|
480
|
+
return mapped;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// 2025 API versions carry the period on the item, not the subscription.
|
|
484
|
+
function periodOf(subscription, field) {
|
|
485
|
+
var firstItem = subscription && subscription.items && subscription.items.data && subscription.items.data[0];
|
|
486
|
+
return (subscription && subscription[field]) || (firstItem && firstItem[field]);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
// The Dashboard can schedule a cancellation as a DATE (\`cancel_at\`); a date
|
|
490
|
+
// inside the current period is the same as cancel-at-period-end. An ended
|
|
491
|
+
// subscription has nothing left to cancel.
|
|
492
|
+
function cancelScheduled(subscription, status) {
|
|
493
|
+
if (status === 'cancelled') {
|
|
494
|
+
return false;
|
|
495
|
+
}
|
|
496
|
+
if (subscription && subscription.cancel_at_period_end) {
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
var cancelAt = Number(subscription && subscription.cancel_at);
|
|
500
|
+
var periodEnd = Number(periodOf(subscription, 'current_period_end'));
|
|
501
|
+
return isFinite(cancelAt) && cancelAt > 0 && (!(periodEnd > 0) || cancelAt <= periodEnd);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
function manageFailure(message) {
|
|
505
|
+
return { ok: 'false', status: '', cancelAtPeriodEnd: 'false', currentPeriodStart: '', currentPeriodEnd: '', error: message };
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
async function manageSubscription(input) {
|
|
509
|
+
var key = secretKey();
|
|
510
|
+
if (!key) {
|
|
511
|
+
return manageFailure(MISSING_KEY);
|
|
512
|
+
}
|
|
513
|
+
var subscriptionId = input.subscriptionId;
|
|
514
|
+
var action = input.action;
|
|
515
|
+
try {
|
|
516
|
+
var stripe = client(key);
|
|
517
|
+
var subscription;
|
|
518
|
+
if (action === 'refresh') {
|
|
519
|
+
subscription = await stripe.subscriptions.retrieve(subscriptionId);
|
|
520
|
+
} else if (action === 'cancel') {
|
|
521
|
+
subscription = await stripe.subscriptions.cancel(subscriptionId);
|
|
522
|
+
} else if (action === 'cancel_at_period_end') {
|
|
523
|
+
subscription = await stripe.subscriptions.update(subscriptionId, { cancel_at_period_end: true });
|
|
524
|
+
} else if (action === 'pause') {
|
|
525
|
+
// Collection pauses; \`void\` marks the paused invoices uncollectible.
|
|
526
|
+
subscription = await stripe.subscriptions.update(subscriptionId, { pause_collection: { behavior: 'void' } });
|
|
527
|
+
} else {
|
|
528
|
+
subscription = await stripe.subscriptions.update(subscriptionId, { pause_collection: '', cancel_at_period_end: false });
|
|
529
|
+
}
|
|
530
|
+
var status = subscriptionStatus(subscription && subscription.status, subscription && subscription.pause_collection);
|
|
531
|
+
return {
|
|
532
|
+
ok: 'true',
|
|
533
|
+
status: status,
|
|
534
|
+
cancelAtPeriodEnd: cancelScheduled(subscription, status) ? 'true' : 'false',
|
|
535
|
+
currentPeriodStart: unixToIso(periodOf(subscription, 'current_period_start')),
|
|
536
|
+
currentPeriodEnd: unixToIso(periodOf(subscription, 'current_period_end')),
|
|
537
|
+
};
|
|
538
|
+
} catch (err) {
|
|
539
|
+
return manageFailure(err && err.message ? err.message : String(err));
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// An account whose portal settings were never saved has no default
|
|
544
|
+
// configuration; the store creates (once) its own: payment methods and
|
|
545
|
+
// invoices only, so the subscription itself changes from the store.
|
|
546
|
+
async function ensurePortalConfiguration(stripe) {
|
|
547
|
+
var tag = 'teleport-store-billing-portal';
|
|
548
|
+
var existing = await stripe.billingPortal.configurations.list({ active: true, limit: 100 });
|
|
549
|
+
var list = (existing && existing.data) || [];
|
|
550
|
+
for (var i = 0; i < list.length; i++) {
|
|
551
|
+
var metadata = list[i] && list[i].metadata;
|
|
552
|
+
if (metadata && metadata.teleport === tag) {
|
|
553
|
+
return String(list[i].id);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
var created = await stripe.billingPortal.configurations.create({
|
|
557
|
+
business_profile: { headline: 'Manage your payment method and invoices' },
|
|
558
|
+
features: { payment_method_update: { enabled: true }, invoice_history: { enabled: true } },
|
|
559
|
+
metadata: { teleport: tag },
|
|
560
|
+
});
|
|
561
|
+
return String(created.id);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
async function billingPortal(input) {
|
|
565
|
+
var failure = function (message) {
|
|
566
|
+
return { ok: 'false', url: '', error: message };
|
|
567
|
+
};
|
|
568
|
+
var customerId = String(input.customerId || '').trim();
|
|
569
|
+
var returnUrl = String(input.returnUrl || '').trim();
|
|
570
|
+
if (!customerId) {
|
|
571
|
+
return failure('No Stripe customer is attached to this subscription yet.');
|
|
572
|
+
}
|
|
573
|
+
if (!/^https?:\\/\\/[^\\s]+$/i.test(returnUrl)) {
|
|
574
|
+
return failure('A return URL (http or https) is required to open the billing portal.');
|
|
575
|
+
}
|
|
576
|
+
var key = secretKey();
|
|
577
|
+
if (!key) {
|
|
578
|
+
return failure(MISSING_KEY);
|
|
579
|
+
}
|
|
580
|
+
try {
|
|
581
|
+
var stripe = client(key);
|
|
582
|
+
var cache = globalThis;
|
|
583
|
+
var createSession = function (configurationId) {
|
|
584
|
+
return stripe.billingPortal.sessions.create(
|
|
585
|
+
configurationId
|
|
586
|
+
? { customer: customerId, return_url: returnUrl, configuration: configurationId }
|
|
587
|
+
: { customer: customerId, return_url: returnUrl }
|
|
588
|
+
);
|
|
589
|
+
};
|
|
590
|
+
var session;
|
|
591
|
+
try {
|
|
592
|
+
session = await createSession(cache.__stripeBillingPortalConfigurationId || '');
|
|
593
|
+
} catch (err) {
|
|
594
|
+
// Only a missing (or since-deleted) configuration is worth a retry.
|
|
595
|
+
if (!/configuration/i.test(String(err && err.message))) {
|
|
596
|
+
throw err;
|
|
597
|
+
}
|
|
598
|
+
cache.__stripeBillingPortalConfigurationId = await ensurePortalConfiguration(stripe);
|
|
599
|
+
session = await createSession(cache.__stripeBillingPortalConfigurationId);
|
|
600
|
+
}
|
|
601
|
+
if (!session || !session.url) {
|
|
602
|
+
return failure('Stripe did not return a billing portal link.');
|
|
603
|
+
}
|
|
604
|
+
return { ok: 'true', url: String(session.url) };
|
|
605
|
+
} catch (err) {
|
|
606
|
+
return failure(err && err.message ? err.message : String(err));
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
// A checkout whose webhook never came (a store Stripe cannot reach, an
|
|
611
|
+
// endpoint missing an event) is settled from Stripe itself: the session is
|
|
612
|
+
// READ with the store's key and answered as the event Stripe sends for its
|
|
613
|
+
// current state. Nothing but the session id comes from the request.
|
|
614
|
+
var SESSION_ID_PATTERN = /^cs_[A-Za-z0-9_]{8,250}$/;
|
|
615
|
+
// What an asynchronous method did with a session it completed unpaid.
|
|
616
|
+
var ASYNC_SESSION_EVENTS = {
|
|
617
|
+
paid: 'checkout.session.async_payment_succeeded',
|
|
618
|
+
closed: 'checkout.session.async_payment_failed',
|
|
619
|
+
};
|
|
620
|
+
|
|
621
|
+
function settledEvent(type, object) {
|
|
622
|
+
return { ok: true, body: { id: 'teleport-settle:' + String(object.id || ''), object: 'event', type: type, data: { object: object } } };
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// Stripe could not be asked (a network failure, an outage, a rate limit):
|
|
626
|
+
// worth asking again. Any other refusal stands.
|
|
627
|
+
function unreachable(err) {
|
|
628
|
+
var status = Number(err && err.statusCode);
|
|
629
|
+
return !(status >= 400) || status >= 500 || status === 429;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// A subscription session answers its completion too, which activates the
|
|
633
|
+
// subscription (and pays the order when its first invoice is paid).
|
|
634
|
+
async function settleSession(stripe, session) {
|
|
635
|
+
var status = String(session.status || '');
|
|
636
|
+
if (status === 'expired') {
|
|
637
|
+
return settledEvent('checkout.session.expired', session);
|
|
638
|
+
}
|
|
639
|
+
if (status !== 'complete') {
|
|
640
|
+
return { ok: false, reason: 'Stripe checkout ' + session.id + ' is still open.' };
|
|
641
|
+
}
|
|
642
|
+
if (String(session.payment_status || '') !== 'unpaid') {
|
|
643
|
+
return settledEvent('checkout.session.completed', session);
|
|
644
|
+
}
|
|
645
|
+
// Completed unpaid, it stays that way: its PaymentIntent says what the
|
|
646
|
+
// money did since, and one still on its way is the completion itself.
|
|
647
|
+
var settled = await unpaidSessionState(stripe, session);
|
|
648
|
+
return settledEvent(ASYNC_SESSION_EVENTS[settled] || 'checkout.session.completed', session);
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
// A subscription session's first invoice, once paid: the \`invoice.paid\`
|
|
652
|
+
// that pays the order (the completion only replays it).
|
|
653
|
+
async function settleSessionInvoice(stripe, session) {
|
|
654
|
+
var invoiceId = session.mode === 'subscription' ? idOf(session.invoice) : '';
|
|
655
|
+
if (!invoiceId) {
|
|
656
|
+
return { ok: false, reason: 'Stripe checkout ' + session.id + ' has no subscription invoice to settle.' };
|
|
657
|
+
}
|
|
658
|
+
var invoice = await stripe.invoices.retrieve(invoiceId);
|
|
659
|
+
if (String((invoice && invoice.status) || '') !== 'paid') {
|
|
660
|
+
return { ok: false, reason: 'Stripe invoice ' + invoiceId + ' is not paid yet.' };
|
|
661
|
+
}
|
|
662
|
+
return settledEvent('invoice.paid', invoice);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
async function reconcile(request) {
|
|
666
|
+
var kind = String((request && request.kind) || '');
|
|
667
|
+
var id = String((request && request.id) || '').trim();
|
|
668
|
+
if ((kind !== 'checkout' && kind !== 'checkout-invoice') || !SESSION_ID_PATTERN.test(id)) {
|
|
669
|
+
return { ok: false, reason: 'The request names no Stripe checkout to settle.' };
|
|
670
|
+
}
|
|
671
|
+
var key = secretKey();
|
|
672
|
+
if (!key) {
|
|
673
|
+
return { ok: false, retry: true, reason: MISSING_KEY };
|
|
674
|
+
}
|
|
675
|
+
try {
|
|
676
|
+
var stripe = client(key);
|
|
677
|
+
var session = await stripe.checkout.sessions.retrieve(id);
|
|
678
|
+
return kind === 'checkout' ? await settleSession(stripe, session) : await settleSessionInvoice(stripe, session);
|
|
679
|
+
} catch (err) {
|
|
680
|
+
if (isMissing(err)) {
|
|
681
|
+
return { ok: false, reason: 'Stripe does not know ' + id + '.' };
|
|
682
|
+
}
|
|
683
|
+
return { ok: false, retry: unreachable(err), reason: core.describeError(err) };
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// What \`reconcile\` settles a checkout the store recorded by, in order: the
|
|
688
|
+
// session, then the first invoice a subscription session opened.
|
|
689
|
+
function reconcileKinds(reference) {
|
|
690
|
+
return SESSION_ID_PATTERN.test(String(reference || '').trim()) ? ['checkout', 'checkout-invoice'] : [];
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
function signatureMatches(rawBody, signatureHeader, secret) {
|
|
694
|
+
try {
|
|
695
|
+
var parts = String(signatureHeader || '').split(',');
|
|
696
|
+
var timestamp = '';
|
|
697
|
+
var signatures = [];
|
|
698
|
+
for (var i = 0; i < parts.length; i++) {
|
|
699
|
+
var pair = parts[i].trim().split('=');
|
|
700
|
+
if (pair[0] === 't') {
|
|
701
|
+
timestamp = pair[1];
|
|
702
|
+
}
|
|
703
|
+
if (pair[0] === 'v1') {
|
|
704
|
+
signatures.push(pair[1]);
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
if (!timestamp || signatures.length === 0) {
|
|
708
|
+
return false;
|
|
709
|
+
}
|
|
710
|
+
if (Math.abs(Math.floor(Date.now() / 1000) - Number(timestamp)) > SIGNATURE_TOLERANCE_SECONDS) {
|
|
711
|
+
return false;
|
|
712
|
+
}
|
|
713
|
+
var expected = core.hmac('sha256', secret, timestamp + '.' + rawBody.toString('utf8'), 'hex');
|
|
714
|
+
for (var j = 0; j < signatures.length; j++) {
|
|
715
|
+
if (core.safeEqual(expected, signatures[j])) {
|
|
716
|
+
return true;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
return false;
|
|
720
|
+
} catch (_e) {
|
|
721
|
+
return false;
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// With a signing secret the Stripe-Signature header decides. Without one the
|
|
726
|
+
// event is read back from Stripe with the store's own key, and THAT copy is
|
|
727
|
+
// what the store acts on — a forged body names no event Stripe has.
|
|
728
|
+
async function verifyWebhook(input) {
|
|
729
|
+
var secret = input.secret || core.credential('stripe', 'webhookSecret');
|
|
730
|
+
if (secret) {
|
|
731
|
+
var signature = core.header(input.headers, 'stripe-signature');
|
|
732
|
+
if (!signature) {
|
|
733
|
+
return { ok: false, reason: 'The Stripe-Signature header is missing.' };
|
|
734
|
+
}
|
|
735
|
+
return signatureMatches(input.rawBody, signature, secret)
|
|
736
|
+
? { ok: true, body: input.body }
|
|
737
|
+
: { ok: false, reason: 'The Stripe signature does not match the webhook signing secret.' };
|
|
738
|
+
}
|
|
739
|
+
var eventId = input.body && typeof input.body.id === 'string' ? input.body.id : '';
|
|
740
|
+
if (eventId.indexOf('evt_') !== 0) {
|
|
741
|
+
return { ok: false, reason: 'The request names no Stripe event.' };
|
|
742
|
+
}
|
|
743
|
+
var key = secretKey();
|
|
744
|
+
if (!key) {
|
|
745
|
+
return { ok: false, reason: MISSING_KEY };
|
|
746
|
+
}
|
|
747
|
+
try {
|
|
748
|
+
var answer = await core.request('https://api.stripe.com/v1/events/' + encodeURIComponent(eventId), {
|
|
749
|
+
headers: { Authorization: 'Bearer ' + key },
|
|
750
|
+
});
|
|
751
|
+
if (!answer.ok || !answer.data || answer.data.id !== eventId) {
|
|
752
|
+
return { ok: false, reason: 'Stripe does not know the event ' + eventId + '.' };
|
|
753
|
+
}
|
|
754
|
+
return { ok: true, body: answer.data };
|
|
755
|
+
} catch (err) {
|
|
756
|
+
return { ok: false, reason: core.describeError(err) };
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
return {
|
|
761
|
+
id: 'stripe',
|
|
762
|
+
createCheckout: createCheckout,
|
|
763
|
+
createSubscriptionCheckout: createSubscriptionCheckout,
|
|
764
|
+
inspectCheckout: inspectCheckout,
|
|
765
|
+
closeCheckout: closeCheckout,
|
|
766
|
+
findCheckouts: findCheckouts,
|
|
767
|
+
ensurePlan: ensurePlan,
|
|
768
|
+
refund: refund,
|
|
769
|
+
manageSubscription: manageSubscription,
|
|
770
|
+
billingPortal: billingPortal,
|
|
771
|
+
reconcile: reconcile,
|
|
772
|
+
reconcileKinds: reconcileKinds,
|
|
773
|
+
verifyWebhook: verifyWebhook,
|
|
774
|
+
};
|
|
775
|
+
};
|
|
776
|
+
`;
|
|
777
|
+
exports.generateStripeDriverCode = generateStripeDriverCode;
|
|
778
|
+
//# sourceMappingURL=stripe-driver-code.js.map
|