@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
|
@@ -2,6 +2,44 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateWebhookFiles = exports.generatePaypalWebhookCode = exports.generateStripeWebhookCode = void 0;
|
|
4
4
|
const teleport_types_1 = require("@teleporthq/teleport-types");
|
|
5
|
+
const payments_1 = require("./payments");
|
|
6
|
+
const payment_drivers_scope_1 = require("./payments/payment-drivers-scope");
|
|
7
|
+
/**
|
|
8
|
+
* The origin a legacy webhook route calls this deployment's own routes on
|
|
9
|
+
* (`/api/invoices/generate`, `/api/ecommerce/order-notification`). Those
|
|
10
|
+
* self-calls carry the app secret, so the origin must never be a host the
|
|
11
|
+
* request named — outside Vercel the Host header is whatever the caller sent.
|
|
12
|
+
* The rule of the server runtime's `trustedBaseUrl` (server-runtime-code.ts),
|
|
13
|
+
* inlined because these routes do not load the server runtime: on Vercel the
|
|
14
|
+
* request's host (the domain Vercel routed to this deployment); elsewhere
|
|
15
|
+
* NEXTAUTH_URL's origin when it is set — except that a local server on another
|
|
16
|
+
* port than a local NEXTAUTH_URL keeps its own loopback address (NEXTAUTH_URL
|
|
17
|
+
* stuck at :3000 while `next dev` runs on :3001). With no Host header at all,
|
|
18
|
+
* the configured URLs as before.
|
|
19
|
+
*/
|
|
20
|
+
const WEBHOOK_BASE_URL_CODE = `function __isLoopbackHost(host) {
|
|
21
|
+
var name = String(host || '').replace(/:[0-9]+$/, '').toLowerCase();
|
|
22
|
+
return name === 'localhost' || name === '127.0.0.1' || name === '[::1]';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function __webhookBaseUrl(req) {
|
|
26
|
+
var headers = (req && req.headers) || {};
|
|
27
|
+
var host = headers.host || '';
|
|
28
|
+
if (!host) {
|
|
29
|
+
var envBaseUrl = process.env.NEXTAUTH_URL || process.env.VERCEL_URL || '';
|
|
30
|
+
if (envBaseUrl && !envBaseUrl.startsWith('http')) envBaseUrl = 'https://' + envBaseUrl;
|
|
31
|
+
return envBaseUrl || 'http://localhost:3000';
|
|
32
|
+
}
|
|
33
|
+
var proto = headers['x-forwarded-proto'] || (__isLoopbackHost(host) ? 'http' : 'https');
|
|
34
|
+
var requestOrigin = String(proto).split(',')[0].trim() + '://' + host;
|
|
35
|
+
if (process.env.VERCEL) return requestOrigin;
|
|
36
|
+
var configured = String(process.env.NEXTAUTH_URL || '').trim();
|
|
37
|
+
if (!configured) return requestOrigin;
|
|
38
|
+
var origin;
|
|
39
|
+
try { origin = new URL(configured).origin; } catch (e) { return requestOrigin; }
|
|
40
|
+
if (__isLoopbackHost(host) && __isLoopbackHost(new URL(origin).host)) return requestOrigin;
|
|
41
|
+
return origin;
|
|
42
|
+
}`;
|
|
5
43
|
const generateStripeWebhookCode = (invoiceSettings, ecommerceSettings) => {
|
|
6
44
|
const autoGenerateInvoice = (invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.enabled) && (invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.autoGenerateOnPayment);
|
|
7
45
|
const hasEcommerce = !!ecommerceSettings;
|
|
@@ -20,26 +58,25 @@ try { invoiceGenerate = require('../invoices/generate'); } catch (e) { invoiceGe
|
|
|
20
58
|
`
|
|
21
59
|
: ''}
|
|
22
60
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
if (prefixScan) {
|
|
33
|
-
var keys = Object.keys(process.env);
|
|
34
|
-
for (var j = 0; j < keys.length; j++) {
|
|
35
|
-
if (keys[j].indexOf(prefixScan) === 0) {
|
|
36
|
-
var v2 = process.env[keys[j]];
|
|
37
|
-
if (v2 && String(v2).length > 0) return String(v2);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return '';
|
|
61
|
+
var __paymentDrivers;
|
|
62
|
+
try { __paymentDrivers = require('../../../utils/payments'); } catch (e) { __paymentDrivers = null; }
|
|
63
|
+
|
|
64
|
+
// The key is read the way the store's payment drivers read it: the deployed
|
|
65
|
+
// name, then the secret the editor saved it under (an older store's
|
|
66
|
+
// STRIPE_TEST_KEY last).
|
|
67
|
+
function __stripeSecretKey() {
|
|
68
|
+
return __paymentDrivers.core.credential('stripe', 'secretKey', ['STRIPE_TEST_KEY']);
|
|
42
69
|
}
|
|
70
|
+
${autoGenerateInvoice || hasOrderNotifications
|
|
71
|
+
? `
|
|
72
|
+
// Stripe reports money in the currency's smallest unit (JPY has none, KWD a
|
|
73
|
+
// thousandth); the store keeps the major one, converted as its drivers do.
|
|
74
|
+
function __stripeMajor(minor, currency) {
|
|
75
|
+
return __paymentDrivers.core.fromMinor(Number(minor) || 0, currency);
|
|
76
|
+
}
|
|
77
|
+
`
|
|
78
|
+
: ''}
|
|
79
|
+
${WEBHOOK_BASE_URL_CODE}
|
|
43
80
|
|
|
44
81
|
module.exports = async function handler(req, res) {
|
|
45
82
|
if (req.method !== 'POST') {
|
|
@@ -47,18 +84,21 @@ module.exports = async function handler(req, res) {
|
|
|
47
84
|
return;
|
|
48
85
|
}
|
|
49
86
|
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
87
|
+
// This deployment's own origin for the self-calls (invoice generation, order
|
|
88
|
+
// notification), which carry the app secret — never a host the request named.
|
|
89
|
+
var __baseUrl = __webhookBaseUrl(req);
|
|
90
|
+
|
|
91
|
+
// Verified by the store's Stripe driver: the signature when a signing
|
|
92
|
+
// secret is configured, else the event read back from Stripe — never the
|
|
93
|
+
// request as it arrived. Without the driver nothing can be verified.
|
|
94
|
+
var driver = __paymentDrivers ? __paymentDrivers.get('stripe') : null;
|
|
95
|
+
if (!driver) {
|
|
96
|
+
console.error('Stripe webhook rejected: this store has no Stripe payment driver');
|
|
97
|
+
res.status(400).json({ error: 'Invalid webhook signature' });
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
59
100
|
|
|
60
|
-
var stripeSecretKey =
|
|
61
|
-
var webhookSecret = __resolveStripeSecret(['STRIPE_WEBHOOK_SECRET', 'CONFIGURATION_STRIPE_WEBHOOK_SECRET'], 'CONFIGURATION_STRIPE_WEBHOOK_SECRET');
|
|
101
|
+
var stripeSecretKey = __stripeSecretKey();
|
|
62
102
|
|
|
63
103
|
if (!stripeSecretKey) {
|
|
64
104
|
res.status(500).json({ error: 'Stripe secret key not configured' });
|
|
@@ -67,26 +107,26 @@ module.exports = async function handler(req, res) {
|
|
|
67
107
|
|
|
68
108
|
try {
|
|
69
109
|
var rawBody = await getRawBody(req);
|
|
70
|
-
var
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
event = verifyStripeSignature(rawBody, sig, webhookSecret);
|
|
79
|
-
if (!event) {
|
|
80
|
-
res.status(400).json({ error: 'Invalid webhook signature' });
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
} else {
|
|
84
|
-
event = JSON.parse(rawBody.toString('utf-8'));
|
|
110
|
+
var parsed;
|
|
111
|
+
try { parsed = JSON.parse(rawBody.toString('utf-8')); } catch (_e) { parsed = {}; }
|
|
112
|
+
var verification = await driver.verifyWebhook({ headers: req.headers, rawBody: rawBody, body: parsed, secret: '' });
|
|
113
|
+
if (!verification.ok) {
|
|
114
|
+
console.error('Stripe webhook rejected: ' + (verification.reason || 'not verified'));
|
|
115
|
+
res.status(400).json({ error: 'Invalid webhook signature' });
|
|
116
|
+
return;
|
|
85
117
|
}
|
|
118
|
+
var event = verification.body;
|
|
86
119
|
|
|
87
120
|
switch (event.type) {
|
|
121
|
+
// A bank debit or a transfer completes the session UNPAID, and Stripe
|
|
122
|
+
// reports the money later (or never): only a paid session pays the order.
|
|
123
|
+
case 'checkout.session.async_payment_succeeded':
|
|
88
124
|
case 'checkout.session.completed': {
|
|
89
125
|
var session = event.data.object;
|
|
126
|
+
if (session.payment_status !== 'paid' && session.payment_status !== 'no_payment_required') {
|
|
127
|
+
console.log('Checkout session completed, payment not received yet:', session.id);
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
90
130
|
${autoGenerateInvoice
|
|
91
131
|
? `await handleInvoiceGeneration(session, 'checkout', __baseUrl, stripeSecretKey);`
|
|
92
132
|
: `console.log('Checkout session completed:', session.id);`}
|
|
@@ -97,6 +137,23 @@ module.exports = async function handler(req, res) {
|
|
|
97
137
|
|
|
98
138
|
case 'payment_intent.succeeded': {
|
|
99
139
|
var paymentIntent = event.data.object;
|
|
140
|
+
// The PaymentIntent of the store's own Checkout Session carries the
|
|
141
|
+
// order in its metadata (the driver copies it there so a refund names
|
|
142
|
+
// the order): the session's event pays and invoices that order, and
|
|
143
|
+
// this one would do it a second time.
|
|
144
|
+
if (paymentIntent.metadata && paymentIntent.metadata.orderId) {
|
|
145
|
+
console.log('Payment intent succeeded for a checkout session order:', paymentIntent.id);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
${autoGenerateInvoice
|
|
149
|
+
? `// An intent that pays a Stripe invoice (a subscription's first
|
|
150
|
+
// payment, a renewal) is invoiced from invoice.payment_succeeded,
|
|
151
|
+
// with the invoice's own lines: invoiced here too, it would be twice.
|
|
152
|
+
if (await __paysStripeInvoice(paymentIntent, stripeSecretKey)) {
|
|
153
|
+
console.log('Payment intent succeeded for a Stripe invoice:', paymentIntent.id);
|
|
154
|
+
break;
|
|
155
|
+
}`
|
|
156
|
+
: ''}
|
|
100
157
|
${autoGenerateInvoice
|
|
101
158
|
? `await handleInvoiceGeneration(paymentIntent, 'payment_intent', __baseUrl, stripeSecretKey);`
|
|
102
159
|
: `console.log('Payment intent succeeded:', paymentIntent.id);`}
|
|
@@ -118,7 +175,14 @@ module.exports = async function handler(req, res) {
|
|
|
118
175
|
case 'invoice.payment_succeeded': {
|
|
119
176
|
var stripeInvoice = event.data.object;
|
|
120
177
|
${autoGenerateInvoice
|
|
121
|
-
?
|
|
178
|
+
? `// A subscription's first invoice, from a checkout the store opened
|
|
179
|
+
// for an order, is invoiced from that checkout's own event with the
|
|
180
|
+
// order it pays: invoiced here too, it would be twice.
|
|
181
|
+
if (__opensStoreOrder(stripeInvoice)) {
|
|
182
|
+
console.log('Invoice payment succeeded for a store checkout order:', stripeInvoice.id);
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
await handleStripeInvoicePayment(stripeInvoice, __baseUrl);`
|
|
122
186
|
: `console.log('Invoice payment succeeded:', stripeInvoice.id);`}
|
|
123
187
|
break;
|
|
124
188
|
}
|
|
@@ -147,47 +211,6 @@ function getRawBody(req) {
|
|
|
147
211
|
});
|
|
148
212
|
}
|
|
149
213
|
|
|
150
|
-
function verifyStripeSignature(payload, sigHeader, secret) {
|
|
151
|
-
try {
|
|
152
|
-
var crypto = require('crypto');
|
|
153
|
-
var parts = sigHeader.split(',');
|
|
154
|
-
var timestamp = '';
|
|
155
|
-
var signatures = [];
|
|
156
|
-
|
|
157
|
-
for (var i = 0; i < parts.length; i++) {
|
|
158
|
-
var kv = parts[i].trim().split('=');
|
|
159
|
-
if (kv[0] === 't') timestamp = kv[1];
|
|
160
|
-
if (kv[0] === 'v1') signatures.push(kv[1]);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (!timestamp || signatures.length === 0) return null;
|
|
164
|
-
|
|
165
|
-
var signedPayload = timestamp + '.' + payload.toString('utf-8');
|
|
166
|
-
var expectedSignature = crypto
|
|
167
|
-
.createHmac('sha256', secret)
|
|
168
|
-
.update(signedPayload)
|
|
169
|
-
.digest('hex');
|
|
170
|
-
|
|
171
|
-
var valid = false;
|
|
172
|
-
for (var j = 0; j < signatures.length; j++) {
|
|
173
|
-
if (crypto.timingSafeEqual(Buffer.from(expectedSignature), Buffer.from(signatures[j]))) {
|
|
174
|
-
valid = true;
|
|
175
|
-
break;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
if (!valid) return null;
|
|
180
|
-
|
|
181
|
-
var tolerance = 300;
|
|
182
|
-
var now = Math.floor(Date.now() / 1000);
|
|
183
|
-
if (Math.abs(now - Number(timestamp)) > tolerance) return null;
|
|
184
|
-
|
|
185
|
-
return JSON.parse(payload.toString('utf-8'));
|
|
186
|
-
} catch (e) {
|
|
187
|
-
return null;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
214
|
module.exports.config = { api: { bodyParser: false } };
|
|
192
215
|
|
|
193
216
|
${autoGenerateInvoice ? generateInvoiceHandlerCode() : ''}
|
|
@@ -212,8 +235,9 @@ async function handleEcommerceOrderUpdate(session) {
|
|
|
212
235
|
var client = new pg.Client({ connectionString: connStr, ssl: connStr.indexOf('sslmode=require') !== -1 ? { rejectUnauthorized: false } : undefined });
|
|
213
236
|
try {
|
|
214
237
|
await client.connect();
|
|
238
|
+
// A cancelled order stays cancelled, whatever pays for it late.
|
|
215
239
|
await client.query(
|
|
216
|
-
"UPDATE teleport_orders SET status = $1, payment_status = $2, payment_intent_id = COALESCE(NULLIF($3, ''), payment_intent_id), updated_at = NOW() WHERE id = $4",
|
|
240
|
+
"UPDATE teleport_orders SET status = $1, payment_status = $2, payment_intent_id = COALESCE(NULLIF($3, ''), payment_intent_id), updated_at = NOW() WHERE id = $4 AND status IS DISTINCT FROM 'cancelled'",
|
|
217
241
|
['paid', 'paid', String(session.payment_intent || session.id || ''), orderId]
|
|
218
242
|
);
|
|
219
243
|
} finally {
|
|
@@ -235,12 +259,13 @@ async function sendOrderNotification(session, baseUrl) {
|
|
|
235
259
|
|
|
236
260
|
await fetch(resolvedBaseUrl + '/api/ecommerce/order-notification', {
|
|
237
261
|
method: 'POST',
|
|
238
|
-
|
|
262
|
+
// The route emails the merchant only for the store's own server code.
|
|
263
|
+
headers: { 'Content-Type': 'application/json', 'x-internal-data-secret': process.env.NEXTAUTH_SECRET || '' },
|
|
239
264
|
body: JSON.stringify({
|
|
240
265
|
orderId: orderId || session.id,
|
|
241
266
|
customerEmail: session.customer_email || (session.customer_details && session.customer_details.email) || '',
|
|
242
267
|
customerName: (session.customer_details && session.customer_details.name) || '',
|
|
243
|
-
totalAmount: (session.amount_total
|
|
268
|
+
totalAmount: __stripeMajor(session.amount_total, session.currency),
|
|
244
269
|
paymentMethod: 'stripe',
|
|
245
270
|
}),
|
|
246
271
|
});
|
|
@@ -260,9 +285,10 @@ async function handleInvoiceGeneration(paymentObj, source, baseUrl, stripeSecret
|
|
|
260
285
|
var currency = 'usd';
|
|
261
286
|
var paymentIntentId = paymentObj.id || '';
|
|
262
287
|
// For checkout sessions, the place-order workflow embeds the internal
|
|
263
|
-
// teleport_orders UUID in metadata.orderId.
|
|
264
|
-
//
|
|
265
|
-
//
|
|
288
|
+
// teleport_orders UUID in metadata.orderId. A payment_intent.succeeded
|
|
289
|
+
// event reaches here only for an intent that names no order (one the
|
|
290
|
+
// store's checkout opened is settled by its session's event), so '' then
|
|
291
|
+
// skips hydration cleanly.
|
|
266
292
|
var internalOrderId = (paymentObj.metadata && typeof paymentObj.metadata.orderId === 'string') ? paymentObj.metadata.orderId : '';
|
|
267
293
|
|
|
268
294
|
if (source === 'checkout') {
|
|
@@ -275,8 +301,8 @@ async function handleInvoiceGeneration(paymentObj, source, baseUrl, stripeSecret
|
|
|
275
301
|
return {
|
|
276
302
|
name: li.description || '',
|
|
277
303
|
quantity: li.quantity || 1,
|
|
278
|
-
unitPrice: (li.amount_total
|
|
279
|
-
totalPrice: (li.amount_total
|
|
304
|
+
unitPrice: __stripeMajor(li.amount_total, currency) / (li.quantity || 1),
|
|
305
|
+
totalPrice: __stripeMajor(li.amount_total, currency),
|
|
280
306
|
currency: currency.toUpperCase(),
|
|
281
307
|
};
|
|
282
308
|
});
|
|
@@ -293,8 +319,8 @@ async function handleInvoiceGeneration(paymentObj, source, baseUrl, stripeSecret
|
|
|
293
319
|
return {
|
|
294
320
|
name: li.description || '',
|
|
295
321
|
quantity: li.quantity || 1,
|
|
296
|
-
unitPrice: (li.amount_total
|
|
297
|
-
totalPrice: (li.amount_total
|
|
322
|
+
unitPrice: __stripeMajor(li.amount_total, currency) / (li.quantity || 1),
|
|
323
|
+
totalPrice: __stripeMajor(li.amount_total, currency),
|
|
298
324
|
currency: currency.toUpperCase(),
|
|
299
325
|
};
|
|
300
326
|
});
|
|
@@ -309,8 +335,8 @@ async function handleInvoiceGeneration(paymentObj, source, baseUrl, stripeSecret
|
|
|
309
335
|
items = [{
|
|
310
336
|
name: paymentObj.description || 'Payment',
|
|
311
337
|
quantity: 1,
|
|
312
|
-
unitPrice: (paymentObj.amount
|
|
313
|
-
totalPrice: (paymentObj.amount
|
|
338
|
+
unitPrice: __stripeMajor(paymentObj.amount, currency),
|
|
339
|
+
totalPrice: __stripeMajor(paymentObj.amount, currency),
|
|
314
340
|
currency: currency.toUpperCase(),
|
|
315
341
|
}];
|
|
316
342
|
|
|
@@ -352,7 +378,9 @@ async function handleInvoiceGeneration(paymentObj, source, baseUrl, stripeSecret
|
|
|
352
378
|
|
|
353
379
|
var response = await fetch(resolvedBaseUrl + '/api/invoices/generate', {
|
|
354
380
|
method: 'POST',
|
|
355
|
-
|
|
381
|
+
// The route issues invoices only for the store's own server code, which
|
|
382
|
+
// presents the app secret.
|
|
383
|
+
headers: { 'Content-Type': 'application/json', 'x-internal-data-secret': process.env.NEXTAUTH_SECRET || '' },
|
|
356
384
|
body: JSON.stringify(invoicePayload),
|
|
357
385
|
});
|
|
358
386
|
|
|
@@ -398,9 +426,10 @@ async function __linkInvoiceToOrder(internalOrderId, invoiceResp, paymentIntentI
|
|
|
398
426
|
var invoiceId = (invoiceResp && invoiceResp.invoiceId) || null;
|
|
399
427
|
var invoiceNumber = (invoiceResp && invoiceResp.invoiceNumber) || null;
|
|
400
428
|
// status / payment_status are independent: status tracks the order
|
|
401
|
-
// lifecycle (confirmed = order accepted), payment_status tracks money.
|
|
429
|
+
// lifecycle (confirmed = order accepted), payment_status tracks money. A
|
|
430
|
+
// cancelled order stays cancelled, whatever pays for it late.
|
|
402
431
|
await client.query(
|
|
403
|
-
"UPDATE teleport_orders SET status = $1, payment_status = $2, payment_intent_id = COALESCE(NULLIF($3, ''), payment_intent_id), invoice_id = COALESCE($4, invoice_id), invoice_number = COALESCE($5, invoice_number), invoice_pdf_url = COALESCE(NULLIF($6, ''), invoice_pdf_url), updated_at = NOW() WHERE id = $7",
|
|
432
|
+
"UPDATE teleport_orders SET status = $1, payment_status = $2, payment_intent_id = COALESCE(NULLIF($3, ''), payment_intent_id), invoice_id = COALESCE($4, invoice_id), invoice_number = COALESCE($5, invoice_number), invoice_pdf_url = COALESCE(NULLIF($6, ''), invoice_pdf_url), updated_at = NOW() WHERE id = $7 AND status IS DISTINCT FROM 'cancelled'",
|
|
404
433
|
['confirmed', 'paid', paymentIntentId || '', invoiceId, invoiceNumber, pdfUrl, internalOrderId]
|
|
405
434
|
);
|
|
406
435
|
console.info('[stripe webhook] order ' + internalOrderId + ' marked confirmed/paid — invoice=' + (invoiceNumber || '(none)') + ' pdf=' + (pdfUrl || '(none)'));
|
|
@@ -409,6 +438,53 @@ async function __linkInvoiceToOrder(internalOrderId, invoiceResp, paymentIntentI
|
|
|
409
438
|
}
|
|
410
439
|
}
|
|
411
440
|
|
|
441
|
+
// Whether a subscription's invoice is the first one of a subscription the
|
|
442
|
+
// store's own Checkout Session opened for an order. The session copies the
|
|
443
|
+
// order onto the subscription's metadata, which Stripe snapshots onto each
|
|
444
|
+
// invoice — on the invoice itself in the classic API, under \`parent\` from the
|
|
445
|
+
// 2025-03-31 versions on.
|
|
446
|
+
function __opensStoreOrder(stripeInvoice) {
|
|
447
|
+
if (!stripeInvoice || stripeInvoice.billing_reason !== 'subscription_create') {
|
|
448
|
+
return false;
|
|
449
|
+
}
|
|
450
|
+
var details = stripeInvoice.subscription_details ||
|
|
451
|
+
(stripeInvoice.parent && stripeInvoice.parent.subscription_details) || {};
|
|
452
|
+
var metadata = details.metadata || {};
|
|
453
|
+
return typeof metadata.orderId === 'string' && metadata.orderId !== '';
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// Whether a PaymentIntent pays a Stripe invoice. The classic API names the
|
|
457
|
+
// invoice on the intent; from the 2025-03-31 versions on the intent names none,
|
|
458
|
+
// and the invoice payments are searched by the intent instead (that search is
|
|
459
|
+
// pinned to the version that introduced it). A search Stripe does not answer
|
|
460
|
+
// fails the delivery, so Stripe sends it again: taken as a payment of its own,
|
|
461
|
+
// an invoice's payment would be invoiced twice.
|
|
462
|
+
async function __paysStripeInvoice(paymentIntent, stripeSecretKey) {
|
|
463
|
+
if (paymentIntent.invoice) {
|
|
464
|
+
return true;
|
|
465
|
+
}
|
|
466
|
+
if (!stripeSecretKey || !paymentIntent.id) {
|
|
467
|
+
return false;
|
|
468
|
+
}
|
|
469
|
+
try {
|
|
470
|
+
var params = new URLSearchParams();
|
|
471
|
+
params.append('payment[type]', 'payment_intent');
|
|
472
|
+
params.append('payment[payment_intent]', paymentIntent.id);
|
|
473
|
+
params.append('limit', '1');
|
|
474
|
+
var found = await fetch('https://api.stripe.com/v1/invoice_payments?' + params.toString(), {
|
|
475
|
+
headers: { 'Authorization': 'Bearer ' + stripeSecretKey, 'Stripe-Version': '2025-03-31.basil' },
|
|
476
|
+
});
|
|
477
|
+
if (!found.ok) {
|
|
478
|
+
throw new Error('Stripe answered ' + found.status);
|
|
479
|
+
}
|
|
480
|
+
var page = await found.json();
|
|
481
|
+
return !!(page && Array.isArray(page.data) && page.data.length > 0);
|
|
482
|
+
} catch (e) {
|
|
483
|
+
console.error('Failed to look up the invoice of payment intent ' + paymentIntent.id + ':', e.message);
|
|
484
|
+
throw new Error('Could not tell whether payment intent ' + paymentIntent.id + ' pays a Stripe invoice');
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
412
488
|
async function handleStripeInvoicePayment(stripeInvoice, baseUrl) {
|
|
413
489
|
try {
|
|
414
490
|
var items = [];
|
|
@@ -417,8 +493,8 @@ async function handleStripeInvoicePayment(stripeInvoice, baseUrl) {
|
|
|
417
493
|
return {
|
|
418
494
|
name: li.description || '',
|
|
419
495
|
quantity: li.quantity || 1,
|
|
420
|
-
unitPrice: (li.amount
|
|
421
|
-
totalPrice: (li.amount
|
|
496
|
+
unitPrice: __stripeMajor(li.amount, stripeInvoice.currency),
|
|
497
|
+
totalPrice: __stripeMajor(li.amount, stripeInvoice.currency),
|
|
422
498
|
currency: (stripeInvoice.currency || 'usd').toUpperCase(),
|
|
423
499
|
};
|
|
424
500
|
});
|
|
@@ -442,7 +518,9 @@ async function handleStripeInvoicePayment(stripeInvoice, baseUrl) {
|
|
|
442
518
|
|
|
443
519
|
var response = await fetch(resolvedBaseUrl + '/api/invoices/generate', {
|
|
444
520
|
method: 'POST',
|
|
445
|
-
|
|
521
|
+
// The route issues invoices only for the store's own server code, which
|
|
522
|
+
// presents the app secret.
|
|
523
|
+
headers: { 'Content-Type': 'application/json', 'x-internal-data-secret': process.env.NEXTAUTH_SECRET || '' },
|
|
446
524
|
body: JSON.stringify(invoicePayload),
|
|
447
525
|
});
|
|
448
526
|
|
|
@@ -473,77 +551,81 @@ try { invoiceGenerate = require('../invoices/generate'); } catch (e) { invoiceGe
|
|
|
473
551
|
`
|
|
474
552
|
: ''}
|
|
475
553
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
}
|
|
484
|
-
if (prefixScan) {
|
|
485
|
-
var keys = Object.keys(process.env);
|
|
486
|
-
for (var j = 0; j < keys.length; j++) {
|
|
487
|
-
if (keys[j].indexOf(prefixScan) === 0) {
|
|
488
|
-
var v2 = process.env[keys[j]];
|
|
489
|
-
if (v2 && String(v2).length > 0) return String(v2);
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
return '';
|
|
554
|
+
var __paymentDrivers;
|
|
555
|
+
try { __paymentDrivers = require('../../../utils/payments'); } catch (e) { __paymentDrivers = null; }
|
|
556
|
+
|
|
557
|
+
// The credentials are read the way the store's payment drivers read them:
|
|
558
|
+
// the deployed name, then the secret the editor saved them under.
|
|
559
|
+
function __paypalCredential(field) {
|
|
560
|
+
return __paymentDrivers.core.credential('paypal', field);
|
|
494
561
|
}
|
|
495
562
|
|
|
563
|
+
${WEBHOOK_BASE_URL_CODE}
|
|
564
|
+
|
|
496
565
|
module.exports = async function handler(req, res) {
|
|
497
566
|
if (req.method !== 'POST') {
|
|
498
567
|
res.status(405).json({ error: 'Method not allowed' });
|
|
499
568
|
return;
|
|
500
569
|
}
|
|
501
570
|
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
571
|
+
// Verified by the store's PayPal driver: PayPal's signature check when a
|
|
572
|
+
// webhook id is configured, else the event read back from PayPal — never
|
|
573
|
+
// the request as it arrived. Without the driver nothing can be verified.
|
|
574
|
+
var driver = __paymentDrivers ? __paymentDrivers.get('paypal') : null;
|
|
575
|
+
if (!driver) {
|
|
576
|
+
console.error('PayPal webhook rejected: this store has no PayPal payment driver');
|
|
577
|
+
res.status(400).json({ error: 'Invalid webhook signature' });
|
|
578
|
+
return;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
var clientId = __paypalCredential('clientId');
|
|
582
|
+
var clientSecret = __paypalCredential('clientSecret');
|
|
505
583
|
|
|
506
584
|
if (!clientId || !clientSecret) {
|
|
507
585
|
res.status(500).json({ error: 'PayPal credentials not configured' });
|
|
508
586
|
return;
|
|
509
587
|
}
|
|
510
588
|
|
|
511
|
-
//
|
|
512
|
-
//
|
|
513
|
-
|
|
514
|
-
// Next.js, but stays defensive). Same pattern as /api/invoices/generate.
|
|
515
|
-
var __proto = req.headers['x-forwarded-proto'] ||
|
|
516
|
-
(req.headers.host && (req.headers.host.startsWith('localhost') || req.headers.host.startsWith('127.0.0.1')) ? 'http' : 'https');
|
|
517
|
-
var __reqBaseUrl = req.headers.host ? (__proto + '://' + req.headers.host) : '';
|
|
518
|
-
var __envBaseUrl = process.env.NEXTAUTH_URL || process.env.VERCEL_URL || '';
|
|
519
|
-
if (__envBaseUrl && !__envBaseUrl.startsWith('http')) __envBaseUrl = 'https://' + __envBaseUrl;
|
|
520
|
-
var __baseUrl = __reqBaseUrl || __envBaseUrl || 'http://localhost:3000';
|
|
589
|
+
// This deployment's own origin for the self-calls (invoice generation, order
|
|
590
|
+
// notification), which carry the app secret — never a host the request named.
|
|
591
|
+
var __baseUrl = __webhookBaseUrl(req);
|
|
521
592
|
|
|
522
593
|
try {
|
|
523
|
-
var
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
594
|
+
var rawBody = await getRawBody(req);
|
|
595
|
+
var parsed;
|
|
596
|
+
try { parsed = JSON.parse(rawBody.toString('utf-8')); } catch (_e) { parsed = {}; }
|
|
597
|
+
var verification = await driver.verifyWebhook({ headers: req.headers, rawBody: rawBody, body: parsed, secret: '' });
|
|
598
|
+
if (!verification.ok) {
|
|
599
|
+
console.error('PayPal webhook rejected: ' + (verification.reason || 'not verified'));
|
|
600
|
+
res.status(400).json({ error: 'Invalid webhook signature' });
|
|
601
|
+
return;
|
|
531
602
|
}
|
|
603
|
+
var body = verification.body || {};
|
|
532
604
|
|
|
533
605
|
var eventType = body.event_type || '';
|
|
534
606
|
|
|
535
607
|
switch (eventType) {
|
|
536
|
-
|
|
608
|
+
// Only a capture moves money. An approval moves none (the driver
|
|
609
|
+
// captures an approved order as it verifies the approval), and the
|
|
610
|
+
// capture's own event, which follows, is what pays the order.
|
|
537
611
|
case 'PAYMENT.CAPTURE.COMPLETED': {
|
|
538
612
|
var resource = body.resource || {};
|
|
613
|
+
${autoGenerateInvoice || hasOrderNotifications
|
|
614
|
+
? `var capture = await __checkPaypalCapture(resource);
|
|
615
|
+
if (!capture.ok) {
|
|
616
|
+
console.error('PayPal capture ' + (resource.id || '') + ' not applied: ' + capture.reason);
|
|
617
|
+
break;
|
|
618
|
+
}`
|
|
619
|
+
: ''}
|
|
539
620
|
${autoGenerateInvoice
|
|
540
|
-
? `await handlePaypalInvoiceGeneration(resource,
|
|
621
|
+
? `await handlePaypalInvoiceGeneration(resource, __baseUrl);`
|
|
541
622
|
: `console.log('PayPal payment completed:', resource.id);`}
|
|
542
623
|
${hasOrderNotifications
|
|
543
624
|
? `try {
|
|
544
625
|
await fetch(__baseUrl + '/api/ecommerce/order-notification', {
|
|
545
626
|
method: 'POST',
|
|
546
|
-
|
|
627
|
+
// The route emails the merchant only for the store's own server code.
|
|
628
|
+
headers: { 'Content-Type': 'application/json', 'x-internal-data-secret': process.env.NEXTAUTH_SECRET || '' },
|
|
547
629
|
body: JSON.stringify({
|
|
548
630
|
// The internal order id, so the route can load the order's own
|
|
549
631
|
// lines and the rates they were charged at; the capture id is
|
|
@@ -583,58 +665,22 @@ module.exports = async function handler(req, res) {
|
|
|
583
665
|
}
|
|
584
666
|
};
|
|
585
667
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
// verifications to the live API, which then rejected the sandbox cert
|
|
592
|
-
// with verification_status=FAILURE. The cert URL itself authoritatively
|
|
593
|
-
// says "sandbox" vs production.
|
|
594
|
-
var certUrl = String(headers['paypal-cert-url'] || '');
|
|
595
|
-
var isSandbox = certUrl.indexOf('sandbox.paypal.com') !== -1 ||
|
|
596
|
-
certUrl.indexOf('api.sandbox.paypal.com') !== -1;
|
|
597
|
-
var baseUrl = isSandbox ? 'https://api-m.sandbox.paypal.com' : 'https://api-m.paypal.com';
|
|
598
|
-
|
|
599
|
-
var authResponse = await fetch(baseUrl + '/v1/oauth2/token', {
|
|
600
|
-
method: 'POST',
|
|
601
|
-
headers: {
|
|
602
|
-
'Authorization': 'Basic ' + Buffer.from(clientId + ':' + clientSecret).toString('base64'),
|
|
603
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
604
|
-
},
|
|
605
|
-
body: 'grant_type=client_credentials',
|
|
606
|
-
});
|
|
607
|
-
var authData = await authResponse.json();
|
|
608
|
-
if (!authData.access_token) return false;
|
|
609
|
-
|
|
610
|
-
var verifyResponse = await fetch(baseUrl + '/v1/notifications/verify-webhook-signature', {
|
|
611
|
-
method: 'POST',
|
|
612
|
-
headers: {
|
|
613
|
-
'Authorization': 'Bearer ' + authData.access_token,
|
|
614
|
-
'Content-Type': 'application/json',
|
|
615
|
-
},
|
|
616
|
-
body: JSON.stringify({
|
|
617
|
-
auth_algo: headers['paypal-auth-algo'] || '',
|
|
618
|
-
cert_url: headers['paypal-cert-url'] || '',
|
|
619
|
-
transmission_id: headers['paypal-transmission-id'] || '',
|
|
620
|
-
transmission_sig: headers['paypal-transmission-sig'] || '',
|
|
621
|
-
transmission_time: headers['paypal-transmission-time'] || '',
|
|
622
|
-
webhook_id: webhookId,
|
|
623
|
-
webhook_event: body,
|
|
624
|
-
}),
|
|
625
|
-
});
|
|
626
|
-
var verifyData = await verifyResponse.json();
|
|
627
|
-
var ok = verifyData.verification_status === 'SUCCESS';
|
|
628
|
-
if (!ok) {
|
|
629
|
-
console.error('PayPal webhook verification rejected by ' + baseUrl + ' — verification_status=' + (verifyData.verification_status || '(missing)') + ', name=' + (verifyData.name || '(none)') + ', message=' + (verifyData.message || '(none)'));
|
|
668
|
+
function getRawBody(req) {
|
|
669
|
+
return new Promise(function(resolve, reject) {
|
|
670
|
+
if (req.body && Buffer.isBuffer(req.body)) {
|
|
671
|
+
resolve(req.body);
|
|
672
|
+
return;
|
|
630
673
|
}
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
}
|
|
674
|
+
var chunks = [];
|
|
675
|
+
req.on('data', function(chunk) { chunks.push(chunk); });
|
|
676
|
+
req.on('end', function() { resolve(Buffer.concat(chunks)); });
|
|
677
|
+
req.on('error', function(err) { reject(err); });
|
|
678
|
+
});
|
|
636
679
|
}
|
|
637
680
|
|
|
681
|
+
// PayPal's signature check needs the event exactly as it was sent.
|
|
682
|
+
module.exports.config = { api: { bodyParser: false } };
|
|
683
|
+
|
|
638
684
|
${autoGenerateInvoice || hasOrderNotifications
|
|
639
685
|
? `
|
|
640
686
|
// Pull the internal teleport_orders UUID out of the PayPal resource's
|
|
@@ -657,65 +703,92 @@ function __extractInternalOrderId(resource) {
|
|
|
657
703
|
}
|
|
658
704
|
return '';
|
|
659
705
|
}
|
|
706
|
+
|
|
707
|
+
// Whether a completed capture may pay the store order it names: the capture
|
|
708
|
+
// took the money, and the order exists, is neither cancelled nor settled
|
|
709
|
+
// already (a redelivered event pays and announces nothing twice), and is due
|
|
710
|
+
// exactly what was captured — its total less what a gift card covered — in
|
|
711
|
+
// its own currency. A capture that names no store order has nothing to check.
|
|
712
|
+
async function __checkPaypalCapture(resource) {
|
|
713
|
+
var captureStatus = String(resource.status || 'COMPLETED').toUpperCase();
|
|
714
|
+
if (captureStatus !== 'COMPLETED') {
|
|
715
|
+
return { ok: false, reason: 'the capture is ' + captureStatus };
|
|
716
|
+
}
|
|
717
|
+
var internalOrderId = __extractInternalOrderId(resource);
|
|
718
|
+
if (!internalOrderId) {
|
|
719
|
+
return { ok: true };
|
|
720
|
+
}
|
|
721
|
+
var connStr = process.env.TELEPORT_DB_CONNECTION_STRING || process.env.DATABASE_URL || '';
|
|
722
|
+
if (!connStr) {
|
|
723
|
+
return { ok: false, reason: 'no database connection to check order ' + internalOrderId + ' against' };
|
|
724
|
+
}
|
|
725
|
+
var pg;
|
|
726
|
+
try {
|
|
727
|
+
pg = require('pg');
|
|
728
|
+
} catch (e) {
|
|
729
|
+
return { ok: false, reason: 'the pg module is unavailable to check order ' + internalOrderId };
|
|
730
|
+
}
|
|
731
|
+
var client = new pg.Client({ connectionString: connStr, ssl: connStr.indexOf('sslmode=require') !== -1 ? { rejectUnauthorized: false } : undefined });
|
|
732
|
+
var order = null;
|
|
733
|
+
try {
|
|
734
|
+
await client.connect();
|
|
735
|
+
// gift_card_amount is read through the row's JSON: a store provisioned
|
|
736
|
+
// before gift cards has no such column.
|
|
737
|
+
var found = await client.query(
|
|
738
|
+
"SELECT o.status, o.payment_status, o.currency, o.total_amount, COALESCE(to_jsonb(o) ->> 'gift_card_amount', '0') AS gift_card_amount FROM teleport_orders o WHERE o.id = $1",
|
|
739
|
+
[internalOrderId]
|
|
740
|
+
);
|
|
741
|
+
order = found && found.rows && found.rows[0] ? found.rows[0] : null;
|
|
742
|
+
} finally {
|
|
743
|
+
try { await client.end(); } catch (_e) {}
|
|
744
|
+
}
|
|
745
|
+
if (!order) {
|
|
746
|
+
return { ok: false, reason: 'the store has no order ' + internalOrderId };
|
|
747
|
+
}
|
|
748
|
+
if (String(order.status || '').toLowerCase() === 'cancelled') {
|
|
749
|
+
return { ok: false, reason: 'order ' + internalOrderId + ' was cancelled' };
|
|
750
|
+
}
|
|
751
|
+
var paymentStatus = String(order.payment_status || '').toLowerCase();
|
|
752
|
+
if (paymentStatus === 'paid' || paymentStatus === 'refunded' || paymentStatus === 'partially_refunded') {
|
|
753
|
+
return { ok: false, reason: 'order ' + internalOrderId + ' is already ' + paymentStatus };
|
|
754
|
+
}
|
|
755
|
+
var amount = resource.amount || {};
|
|
756
|
+
var capturedCurrency = String(amount.currency_code || '').toUpperCase();
|
|
757
|
+
var orderCurrency = String(order.currency || '').toUpperCase();
|
|
758
|
+
if (orderCurrency && capturedCurrency !== orderCurrency) {
|
|
759
|
+
return { ok: false, reason: 'the capture is in ' + (capturedCurrency || 'no currency') + ' and order ' + internalOrderId + ' in ' + orderCurrency };
|
|
760
|
+
}
|
|
761
|
+
// Whole cents, so 12.30 - 4.10 compares as 820 and never 8.199999999999999.
|
|
762
|
+
var due = Math.max(0, Math.round((Number(order.total_amount) - Number(order.gift_card_amount || 0)) * 100));
|
|
763
|
+
var captured = Math.round(Number(amount.value) * 100);
|
|
764
|
+
if (!isFinite(due) || captured !== due) {
|
|
765
|
+
return {
|
|
766
|
+
ok: false,
|
|
767
|
+
reason: 'the capture took ' + String(amount.value) + ' ' + capturedCurrency + ' and order ' + internalOrderId + ' is due ' + (due / 100).toFixed(2),
|
|
768
|
+
};
|
|
769
|
+
}
|
|
770
|
+
return { ok: true };
|
|
771
|
+
}
|
|
660
772
|
`
|
|
661
773
|
: ''}
|
|
662
774
|
|
|
663
775
|
${autoGenerateInvoice
|
|
664
776
|
? `
|
|
665
|
-
|
|
777
|
+
// Invoices a completed capture; the capture resource names no buyer, so the
|
|
778
|
+
// invoice route hydrates them from the order when the capture names one.
|
|
779
|
+
async function handlePaypalInvoiceGeneration(resource, baseUrl) {
|
|
666
780
|
try {
|
|
667
781
|
var customerEmail = '';
|
|
668
782
|
var customerName = '';
|
|
669
|
-
var
|
|
670
|
-
var
|
|
671
|
-
var
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
total
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
quantity: 1,
|
|
679
|
-
unitPrice: total,
|
|
680
|
-
totalPrice: total,
|
|
681
|
-
currency: currency,
|
|
682
|
-
}];
|
|
683
|
-
} else if (eventType === 'CHECKOUT.ORDER.APPROVED') {
|
|
684
|
-
var purchaseUnit = (resource.purchase_units && resource.purchase_units[0]) || {};
|
|
685
|
-
currency = (purchaseUnit.amount && purchaseUnit.amount.currency_code) || 'USD';
|
|
686
|
-
total = Number(purchaseUnit.amount && purchaseUnit.amount.value) || 0;
|
|
687
|
-
|
|
688
|
-
if (purchaseUnit.items) {
|
|
689
|
-
items = purchaseUnit.items.map(function(item) {
|
|
690
|
-
return {
|
|
691
|
-
name: item.name || '',
|
|
692
|
-
quantity: Number(item.quantity) || 1,
|
|
693
|
-
unitPrice: Number(item.unit_amount && item.unit_amount.value) || 0,
|
|
694
|
-
totalPrice: (Number(item.quantity) || 1) * (Number(item.unit_amount && item.unit_amount.value) || 0),
|
|
695
|
-
currency: currency,
|
|
696
|
-
};
|
|
697
|
-
});
|
|
698
|
-
} else {
|
|
699
|
-
items = [{
|
|
700
|
-
name: 'PayPal Order',
|
|
701
|
-
quantity: 1,
|
|
702
|
-
unitPrice: total,
|
|
703
|
-
totalPrice: total,
|
|
704
|
-
currency: currency,
|
|
705
|
-
}];
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
if (purchaseUnit.shipping && purchaseUnit.shipping.name) {
|
|
709
|
-
customerName = purchaseUnit.shipping.name.full_name || '';
|
|
710
|
-
}
|
|
711
|
-
if (resource.payer) {
|
|
712
|
-
customerEmail = resource.payer.email_address || '';
|
|
713
|
-
if (!customerName && resource.payer.name) {
|
|
714
|
-
customerName = (resource.payer.name.given_name || '') + ' ' + (resource.payer.name.surname || '');
|
|
715
|
-
customerName = customerName.trim();
|
|
716
|
-
}
|
|
717
|
-
}
|
|
718
|
-
}
|
|
783
|
+
var currency = (resource.amount && resource.amount.currency_code) || 'USD';
|
|
784
|
+
var total = Number(resource.amount && resource.amount.value) || 0;
|
|
785
|
+
var items = [{
|
|
786
|
+
name: 'PayPal Payment',
|
|
787
|
+
quantity: 1,
|
|
788
|
+
unitPrice: total,
|
|
789
|
+
totalPrice: total,
|
|
790
|
+
currency: currency,
|
|
791
|
+
}];
|
|
719
792
|
|
|
720
793
|
// baseUrl is passed in from the request handler so the self-fetch tracks
|
|
721
794
|
// the actual port the dev server bound to. Falls back to env vars for
|
|
@@ -758,7 +831,9 @@ async function handlePaypalInvoiceGeneration(resource, eventType, clientId, clie
|
|
|
758
831
|
|
|
759
832
|
var response = await fetch(resolvedBaseUrl + '/api/invoices/generate', {
|
|
760
833
|
method: 'POST',
|
|
761
|
-
|
|
834
|
+
// The route issues invoices only for the store's own server code, which
|
|
835
|
+
// presents the app secret.
|
|
836
|
+
headers: { 'Content-Type': 'application/json', 'x-internal-data-secret': process.env.NEXTAUTH_SECRET || '' },
|
|
762
837
|
body: JSON.stringify(invoicePayload),
|
|
763
838
|
});
|
|
764
839
|
|
|
@@ -822,9 +897,10 @@ async function __linkInvoiceToOrder(internalOrderId, invoiceResp, paymentIntentI
|
|
|
822
897
|
// payment_status is the MONEY state (unpaid → paid → refunded). A paid
|
|
823
898
|
// online order should set status='confirmed' (not 'paid'), matching the
|
|
824
899
|
// Stripe + COD paths so the order-details page renders a consistent
|
|
825
|
-
// "Status: Confirmed / Payment: Paid".
|
|
900
|
+
// "Status: Confirmed / Payment: Paid". A cancelled order stays
|
|
901
|
+
// cancelled, whatever pays for it late.
|
|
826
902
|
await client.query(
|
|
827
|
-
"UPDATE teleport_orders SET status = $1, payment_status = $2, payment_intent_id = COALESCE(NULLIF($3, ''), payment_intent_id), invoice_id = COALESCE($4, invoice_id), invoice_number = COALESCE($5, invoice_number), invoice_pdf_url = COALESCE(NULLIF($6, ''), invoice_pdf_url), updated_at = NOW() WHERE id = $7",
|
|
903
|
+
"UPDATE teleport_orders SET status = $1, payment_status = $2, payment_intent_id = COALESCE(NULLIF($3, ''), payment_intent_id), invoice_id = COALESCE($4, invoice_id), invoice_number = COALESCE($5, invoice_number), invoice_pdf_url = COALESCE(NULLIF($6, ''), invoice_pdf_url), updated_at = NOW() WHERE id = $7 AND status IS DISTINCT FROM 'cancelled'",
|
|
828
904
|
['confirmed', 'paid', paymentIntentId || '', invoiceId, invoiceNumber, pdfUrl, internalOrderId]
|
|
829
905
|
);
|
|
830
906
|
console.info('[paypal webhook] order ' + internalOrderId + ' marked confirmed/paid — invoice=' + (invoiceNumber || '(none)') + ' pdf=' + (pdfUrl || '(none)'));
|
|
@@ -845,9 +921,21 @@ const generateWebhookFiles = (structure, invoiceSettings, options = {}) => {
|
|
|
845
921
|
const ecommerceProviders = (ecommerceSettings === null || ecommerceSettings === void 0 ? void 0 : ecommerceSettings.paymentProviders) || [];
|
|
846
922
|
const providerTypes = ecommerceProviders.map((p) => p.type);
|
|
847
923
|
const skipProviders = options.skipProviders || new Set();
|
|
848
|
-
const
|
|
849
|
-
|
|
850
|
-
|
|
924
|
+
const emitStripe = (Object.keys(env).some((k) => k.includes('STRIPE_SECRET_KEY') || k.includes('STRIPE_WEBHOOK_SECRET')) ||
|
|
925
|
+
providerTypes.includes('stripe')) &&
|
|
926
|
+
!skipProviders.has('stripe');
|
|
927
|
+
const emitPaypal = (Object.keys(env).some((k) => k.includes('PAYPAL_CLIENT_ID') || k.includes('PAYPAL_CLIENT_SECRET')) ||
|
|
928
|
+
providerTypes.includes('paypal')) &&
|
|
929
|
+
!skipProviders.has('paypal');
|
|
930
|
+
if (!emitStripe && !emitPaypal) {
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
933
|
+
// Both routes verify through the store's drivers. The module is written
|
|
934
|
+
// once, by whichever emitter comes first, so it carries every provider the
|
|
935
|
+
// store uses — not only the two these routes need.
|
|
936
|
+
const storeDriverIds = (0, payments_1.resolveStorePaymentDriverIds)(uidl, []);
|
|
937
|
+
(0, payments_1.ensurePaymentDriversModule)(structure, storeDriverIds.length > 0 ? storeDriverIds : payment_drivers_scope_1.DEFAULT_PAYMENT_DRIVER_IDS);
|
|
938
|
+
if (emitStripe) {
|
|
851
939
|
files.set('webhook-stripe', {
|
|
852
940
|
path: ['pages', 'api', 'webhooks'],
|
|
853
941
|
files: [
|
|
@@ -859,7 +947,7 @@ const generateWebhookFiles = (structure, invoiceSettings, options = {}) => {
|
|
|
859
947
|
],
|
|
860
948
|
});
|
|
861
949
|
}
|
|
862
|
-
if (
|
|
950
|
+
if (emitPaypal) {
|
|
863
951
|
files.set('webhook-paypal', {
|
|
864
952
|
path: ['pages', 'api', 'webhooks'],
|
|
865
953
|
files: [
|