@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,205 @@
|
|
|
1
|
+
import { generatePaypalSignatureVerificationCode } from '../src/webhook-signature-verification'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The PayPal verifier emitted into every workflow webhook route (the
|
|
5
|
+
* `paypal-payment` route the store's payments, refunds and subscriptions all
|
|
6
|
+
* arrive through). Executed, not pattern-matched: what matters is which
|
|
7
|
+
* PayPal environment it calls and where it finds its credentials.
|
|
8
|
+
*
|
|
9
|
+
* Both PayPal environments issue client ids starting with "A", so the earlier
|
|
10
|
+
* `startsWith('sb-')` check sent every sandbox verification to the live API,
|
|
11
|
+
* which rejected the sandbox certificate — no sandbox webhook ever reached a
|
|
12
|
+
* workflow. And a standalone run has only the `CONFIGURATION_*` names the
|
|
13
|
+
* provider panel stores, which the verifier never read.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
type Verify = (
|
|
17
|
+
req: { headers: Record<string, string> },
|
|
18
|
+
rawBody: Buffer,
|
|
19
|
+
webhookConfig: { signatureSecret?: string }
|
|
20
|
+
) => Promise<boolean>
|
|
21
|
+
|
|
22
|
+
interface Call {
|
|
23
|
+
url: string
|
|
24
|
+
body: string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const ENV_KEYS = [
|
|
28
|
+
'PAYPAL_CLIENT_ID',
|
|
29
|
+
'PAYPAL_CLIENT_SECRET',
|
|
30
|
+
'PAYPAL_WEBHOOK_ID',
|
|
31
|
+
'CONFIGURATION_PAYPAL_CLIENT_ID',
|
|
32
|
+
'CONFIGURATION_PAYPAL_CLIENT_SECRET',
|
|
33
|
+
'CONFIGURATION_PAYPAL_WEBHOOK_ID',
|
|
34
|
+
'CONFIGURATION_PAYPAL_WEBHOOK_ID_5F2A',
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
function load(): Verify {
|
|
38
|
+
// eslint-disable-next-line no-new-func
|
|
39
|
+
return new Function(
|
|
40
|
+
`${generatePaypalSignatureVerificationCode()}; return verifyPaypalSignature;`
|
|
41
|
+
)() as Verify
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function installFetch(verificationStatus: string, calls: Call[]): void {
|
|
45
|
+
;(globalThis as any).fetch = async (url: string, init: { body: string }) => {
|
|
46
|
+
calls.push({ url, body: init.body })
|
|
47
|
+
if (url.endsWith('/v1/oauth2/token')) {
|
|
48
|
+
return { json: async () => ({ access_token: 'tok' }) }
|
|
49
|
+
}
|
|
50
|
+
return { json: async () => ({ verification_status: verificationStatus }) }
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const event = { event_type: 'PAYMENT.SALE.COMPLETED', resource: { id: 'SALE1' } }
|
|
55
|
+
const headersFor = (certHost: string) => ({
|
|
56
|
+
'paypal-auth-algo': 'SHA256withRSA',
|
|
57
|
+
'paypal-cert-url': `https://${certHost}/cert/cert-1`,
|
|
58
|
+
'paypal-transmission-id': 'tid',
|
|
59
|
+
'paypal-transmission-sig': 'sig',
|
|
60
|
+
'paypal-transmission-time': '2026-09-24T10:00:00Z',
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
describe('generated PayPal webhook verifier', () => {
|
|
64
|
+
const savedEnv: Record<string, string | undefined> = {}
|
|
65
|
+
const savedFetch = (globalThis as any).fetch
|
|
66
|
+
let errors: jest.SpyInstance
|
|
67
|
+
|
|
68
|
+
beforeEach(() => {
|
|
69
|
+
for (const key of ENV_KEYS) {
|
|
70
|
+
savedEnv[key] = process.env[key]
|
|
71
|
+
delete process.env[key]
|
|
72
|
+
}
|
|
73
|
+
errors = jest.spyOn(console, 'error').mockImplementation(() => undefined)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
afterEach(() => {
|
|
77
|
+
for (const key of ENV_KEYS) {
|
|
78
|
+
if (savedEnv[key] === undefined) {
|
|
79
|
+
delete process.env[key]
|
|
80
|
+
} else {
|
|
81
|
+
process.env[key] = savedEnv[key]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
;(globalThis as any).fetch = savedFetch
|
|
85
|
+
errors.mockRestore()
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it('verifies a sandbox event against the sandbox API, whatever the client id looks like', async () => {
|
|
89
|
+
process.env.PAYPAL_CLIENT_ID = 'AbCsandboxLooksLikeLive'
|
|
90
|
+
process.env.PAYPAL_CLIENT_SECRET = 'secret'
|
|
91
|
+
process.env.PAYPAL_WEBHOOK_ID = 'WH-1'
|
|
92
|
+
const calls: Call[] = []
|
|
93
|
+
installFetch('SUCCESS', calls)
|
|
94
|
+
const verify = load()
|
|
95
|
+
const ok = await verify(
|
|
96
|
+
{ headers: headersFor('api.sandbox.paypal.com') },
|
|
97
|
+
Buffer.from(JSON.stringify(event)),
|
|
98
|
+
{ signatureSecret: 'PAYPAL_WEBHOOK_ID' }
|
|
99
|
+
)
|
|
100
|
+
expect(ok).toBe(true)
|
|
101
|
+
expect(calls.map((c) => c.url)).toEqual([
|
|
102
|
+
'https://api-m.sandbox.paypal.com/v1/oauth2/token',
|
|
103
|
+
'https://api-m.sandbox.paypal.com/v1/notifications/verify-webhook-signature',
|
|
104
|
+
])
|
|
105
|
+
const sent = JSON.parse(calls[1].body)
|
|
106
|
+
expect(sent.webhook_id).toBe('WH-1')
|
|
107
|
+
expect(sent.cert_url).toBe('https://api.sandbox.paypal.com/cert/cert-1')
|
|
108
|
+
expect(sent.webhook_event).toEqual(event)
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
// PayPal signs the bytes it sent: parsed and serialised again, `1.50` comes
|
|
112
|
+
// back `1.5` and an escaped character comes back unescaped.
|
|
113
|
+
it('posts the event back exactly as it arrived', async () => {
|
|
114
|
+
process.env.PAYPAL_CLIENT_ID = 'AbC'
|
|
115
|
+
process.env.PAYPAL_CLIENT_SECRET = 'secret'
|
|
116
|
+
process.env.PAYPAL_WEBHOOK_ID = 'WH-1'
|
|
117
|
+
const escaped = '\\' + 'u00e9'
|
|
118
|
+
const raw =
|
|
119
|
+
'{ "event_type": "PAYMENT.SALE.COMPLETED", "resource": { "id": "SALE1", "total": 1.50, ' +
|
|
120
|
+
'"note": "caf' +
|
|
121
|
+
escaped +
|
|
122
|
+
' $& $$ $\'" } }\n'
|
|
123
|
+
const calls: Call[] = []
|
|
124
|
+
installFetch('SUCCESS', calls)
|
|
125
|
+
const ok = await load()({ headers: headersFor('api.paypal.com') }, Buffer.from(raw), {
|
|
126
|
+
signatureSecret: 'PAYPAL_WEBHOOK_ID',
|
|
127
|
+
})
|
|
128
|
+
expect(ok).toBe(true)
|
|
129
|
+
expect(calls[1].body.endsWith(',"webhook_event":' + raw + '}')).toBe(true)
|
|
130
|
+
const sent = JSON.parse(calls[1].body)
|
|
131
|
+
expect(sent.webhook_id).toBe('WH-1')
|
|
132
|
+
expect(sent.transmission_sig).toBe('sig')
|
|
133
|
+
expect(sent.webhook_event.resource.note).toBe("café $& $$ $'")
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
it('verifies a live event against the live API', async () => {
|
|
137
|
+
process.env.PAYPAL_CLIENT_ID = 'AbC'
|
|
138
|
+
process.env.PAYPAL_CLIENT_SECRET = 'secret'
|
|
139
|
+
process.env.PAYPAL_WEBHOOK_ID = 'WH-1'
|
|
140
|
+
const calls: Call[] = []
|
|
141
|
+
installFetch('SUCCESS', calls)
|
|
142
|
+
const ok = await load()(
|
|
143
|
+
{ headers: headersFor('api.paypal.com') },
|
|
144
|
+
Buffer.from(JSON.stringify(event)),
|
|
145
|
+
{ signatureSecret: 'PAYPAL_WEBHOOK_ID' }
|
|
146
|
+
)
|
|
147
|
+
expect(ok).toBe(true)
|
|
148
|
+
expect(calls[0].url).toBe('https://api-m.paypal.com/v1/oauth2/token')
|
|
149
|
+
expect(calls[1].url).toBe('https://api-m.paypal.com/v1/notifications/verify-webhook-signature')
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
it('reads the CONFIGURATION_* names a standalone run has, and the webhook id under the stored secret name', async () => {
|
|
153
|
+
process.env.PAYPAL_CLIENT_ID = ''
|
|
154
|
+
process.env.CONFIGURATION_PAYPAL_CLIENT_ID = 'AbC'
|
|
155
|
+
process.env.CONFIGURATION_PAYPAL_CLIENT_SECRET = 'secret'
|
|
156
|
+
process.env.CONFIGURATION_PAYPAL_WEBHOOK_ID_5F2A = 'WH-stored'
|
|
157
|
+
const calls: Call[] = []
|
|
158
|
+
installFetch('SUCCESS', calls)
|
|
159
|
+
const ok = await load()(
|
|
160
|
+
{ headers: headersFor('api.sandbox.paypal.com') },
|
|
161
|
+
Buffer.from(JSON.stringify(event)),
|
|
162
|
+
{ signatureSecret: 'CONFIGURATION_PAYPAL_WEBHOOK_ID_5F2A' }
|
|
163
|
+
)
|
|
164
|
+
expect(ok).toBe(true)
|
|
165
|
+
expect(JSON.parse(calls[1].body).webhook_id).toBe('WH-stored')
|
|
166
|
+
expect(calls[0].url).toBe('https://api-m.sandbox.paypal.com/v1/oauth2/token')
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
it('refuses without calling PayPal when the credentials or the webhook id are missing, and says which', async () => {
|
|
170
|
+
const calls: Call[] = []
|
|
171
|
+
installFetch('SUCCESS', calls)
|
|
172
|
+
expect(
|
|
173
|
+
await load()({ headers: headersFor('api.paypal.com') }, Buffer.from('{}'), {
|
|
174
|
+
signatureSecret: 'PAYPAL_WEBHOOK_ID',
|
|
175
|
+
})
|
|
176
|
+
).toBe(false)
|
|
177
|
+
expect(errors.mock.calls[0][0]).toContain('PAYPAL_CLIENT_ID')
|
|
178
|
+
|
|
179
|
+
process.env.PAYPAL_CLIENT_ID = 'AbC'
|
|
180
|
+
process.env.PAYPAL_CLIENT_SECRET = 'secret'
|
|
181
|
+
expect(
|
|
182
|
+
await load()({ headers: headersFor('api.paypal.com') }, Buffer.from('{}'), {
|
|
183
|
+
signatureSecret: 'PAYPAL_WEBHOOK_ID',
|
|
184
|
+
})
|
|
185
|
+
).toBe(false)
|
|
186
|
+
expect(errors.mock.calls[1][0]).toContain('PAYPAL_WEBHOOK_ID')
|
|
187
|
+
expect(calls).toEqual([])
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
it('reports a rejection with the environment it asked', async () => {
|
|
191
|
+
process.env.PAYPAL_CLIENT_ID = 'AbC'
|
|
192
|
+
process.env.PAYPAL_CLIENT_SECRET = 'secret'
|
|
193
|
+
process.env.PAYPAL_WEBHOOK_ID = 'WH-1'
|
|
194
|
+
const calls: Call[] = []
|
|
195
|
+
installFetch('FAILURE', calls)
|
|
196
|
+
const ok = await load()(
|
|
197
|
+
{ headers: headersFor('api.sandbox.paypal.com') },
|
|
198
|
+
Buffer.from(JSON.stringify(event)),
|
|
199
|
+
{ signatureSecret: 'PAYPAL_WEBHOOK_ID' }
|
|
200
|
+
)
|
|
201
|
+
expect(ok).toBe(false)
|
|
202
|
+
expect(errors.mock.calls[0][0]).toContain('https://api-m.sandbox.paypal.com')
|
|
203
|
+
expect(errors.mock.calls[0][0]).toContain('verification_status=FAILURE')
|
|
204
|
+
})
|
|
205
|
+
})
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { generateClientRuntimeCode } from '../src/executor-generator'
|
|
2
|
+
|
|
3
|
+
// A server segment receives the page state it can read and nothing more: the
|
|
4
|
+
// segment descriptor names the state keys (`stateKeys`, see
|
|
5
|
+
// segment-context-needs) and `pruneContext` keeps exactly those — at the top
|
|
6
|
+
// level and inside the trigger context, which carries the page's own copy of
|
|
7
|
+
// the bag. Every other page state stayed in the request before this: a
|
|
8
|
+
// checkout page's country list, product grid and order history travelled with
|
|
9
|
+
// every voucher check.
|
|
10
|
+
|
|
11
|
+
type PruneFn = (ctx: Record<string, unknown>, stateKeys?: string[] | '*') => Record<string, any>
|
|
12
|
+
|
|
13
|
+
function loadPruneContext(): PruneFn {
|
|
14
|
+
const src = generateClientRuntimeCode()
|
|
15
|
+
const grab = (pattern: RegExp, label: string): string => {
|
|
16
|
+
const match = src.match(pattern)
|
|
17
|
+
if (!match) {
|
|
18
|
+
throw new Error(`${label} not found in generated client runtime`)
|
|
19
|
+
}
|
|
20
|
+
return match[0]
|
|
21
|
+
}
|
|
22
|
+
const parts = [
|
|
23
|
+
grab(/const PRUNE_MAX_SERIALIZED_LENGTH = \d+;/, 'PRUNE_MAX_SERIALIZED_LENGTH'),
|
|
24
|
+
grab(/const PRUNE_MAX_DEPTH = \d+;/, 'PRUNE_MAX_DEPTH'),
|
|
25
|
+
...[
|
|
26
|
+
'isDomNode',
|
|
27
|
+
'snapshotDomNode',
|
|
28
|
+
'domSerializationReplacer',
|
|
29
|
+
'serializeForPrune',
|
|
30
|
+
'prunedValue',
|
|
31
|
+
'pruneStateValues',
|
|
32
|
+
'pruneContext',
|
|
33
|
+
].map((fn) => grab(new RegExp(`function ${fn}\\b[\\s\\S]*?\\n\\}`), fn)),
|
|
34
|
+
]
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
36
|
+
return new Function(`${parts.join('\n')}\nreturn pruneContext;`)() as PruneFn
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const pageState = {
|
|
40
|
+
countryCode: 'RO',
|
|
41
|
+
billingCountryInitialItems: [{ label: 'Romania', value: 'RO' }],
|
|
42
|
+
cartItems: [{ id: 'p1' }],
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const context = () => ({
|
|
46
|
+
trigger: { formData: { code: 'SAVE10' }, __stateValues: { ...pageState } },
|
|
47
|
+
__stateValues: { ...pageState },
|
|
48
|
+
__locale: 'en',
|
|
49
|
+
earlier: { rows: [1, 2] },
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
describe('pruneContext keeps only the page state the segment reads', () => {
|
|
53
|
+
const pruneContext = loadPruneContext()
|
|
54
|
+
|
|
55
|
+
it('keeps the named keys, at the top level and inside the trigger context', () => {
|
|
56
|
+
const pruned = pruneContext(context(), ['countryCode'])
|
|
57
|
+
expect(pruned.__stateValues).toEqual({ countryCode: 'RO' })
|
|
58
|
+
expect(pruned.trigger.__stateValues).toEqual({ countryCode: 'RO' })
|
|
59
|
+
// Everything that is not the bag travels as before.
|
|
60
|
+
expect(pruned.trigger.formData).toEqual({ code: 'SAVE10' })
|
|
61
|
+
expect(pruned.earlier).toEqual({ rows: [1, 2] })
|
|
62
|
+
expect(pruned.__locale).toBe('en')
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('drops the bag altogether when the segment reads no state', () => {
|
|
66
|
+
const pruned = pruneContext(context(), [])
|
|
67
|
+
expect(pruned).not.toHaveProperty('__stateValues')
|
|
68
|
+
expect(pruned.trigger).not.toHaveProperty('__stateValues')
|
|
69
|
+
expect(pruned.trigger.formData).toEqual({ code: 'SAVE10' })
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('names a key the page does not hold without inventing it', () => {
|
|
73
|
+
const pruned = pruneContext(context(), ['missing', 'cartItems'])
|
|
74
|
+
expect(pruned.__stateValues).toEqual({ cartItems: [{ id: 'p1' }] })
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it('sends the whole bag for "*" and for a caller that names nothing', () => {
|
|
78
|
+
expect(pruneContext(context(), '*').__stateValues).toEqual(pageState)
|
|
79
|
+
expect(pruneContext(context()).__stateValues).toEqual(pageState)
|
|
80
|
+
expect(pruneContext(context()).trigger.__stateValues).toEqual(pageState)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('never touches the live context it prunes from', () => {
|
|
84
|
+
const live = context()
|
|
85
|
+
pruneContext(live, ['countryCode'])
|
|
86
|
+
expect(live.__stateValues).toEqual(pageState)
|
|
87
|
+
expect(live.trigger.__stateValues).toEqual(pageState)
|
|
88
|
+
})
|
|
89
|
+
})
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import crypto from 'crypto'
|
|
2
|
+
import { loadHandler } from './_helpers/load-handler'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The push and notification nodes are thin adapters over the page-side API the
|
|
6
|
+
* generated service-worker module publishes on `window`, plus the server node
|
|
7
|
+
* that calls the app's internal send route. Every handler here runs for real.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
type Globals = Record<string, unknown>
|
|
11
|
+
const globalScope = globalThis as unknown as Globals
|
|
12
|
+
const GLOBAL_KEYS = ['window', 'Notification', 'fetch', '__non_webpack_require__']
|
|
13
|
+
|
|
14
|
+
let saved: Globals = {}
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
saved = {}
|
|
17
|
+
GLOBAL_KEYS.forEach((key) => {
|
|
18
|
+
saved[key] = globalScope[key]
|
|
19
|
+
})
|
|
20
|
+
})
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
GLOBAL_KEYS.forEach((key) => {
|
|
23
|
+
if (saved[key] === undefined) {
|
|
24
|
+
delete globalScope[key]
|
|
25
|
+
} else {
|
|
26
|
+
globalScope[key] = saved[key]
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
delete process.env.WEB_PUSH_VAPID_PRIVATE_KEY
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
const withNotification = (permission: string, answer = permission) => {
|
|
33
|
+
const shown: Array<{ title: string; options: Record<string, unknown> }> = []
|
|
34
|
+
const NotificationFake = function (
|
|
35
|
+
this: unknown,
|
|
36
|
+
title: string,
|
|
37
|
+
options: Record<string, unknown>
|
|
38
|
+
) {
|
|
39
|
+
shown.push({ title, options })
|
|
40
|
+
} as unknown as { permission: string; requestPermission: () => Promise<string> }
|
|
41
|
+
NotificationFake.permission = permission
|
|
42
|
+
NotificationFake.requestPermission = async () => {
|
|
43
|
+
NotificationFake.permission = answer
|
|
44
|
+
return answer
|
|
45
|
+
}
|
|
46
|
+
globalScope.Notification = NotificationFake
|
|
47
|
+
return shown
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
describe('push nodes on a site without push', () => {
|
|
51
|
+
it('subscribe and unsubscribe report that push is not set up; the status is simply unsupported', async () => {
|
|
52
|
+
globalScope.window = {}
|
|
53
|
+
withNotification('default')
|
|
54
|
+
|
|
55
|
+
expect(await loadHandler('browser-subscribe-to-push')({}, {})).toEqual({
|
|
56
|
+
success: false,
|
|
57
|
+
subscribed: false,
|
|
58
|
+
permission: 'default',
|
|
59
|
+
error: 'Push notifications are not set up for this site.',
|
|
60
|
+
})
|
|
61
|
+
expect(await loadHandler('browser-unsubscribe-from-push')({}, {})).toEqual({
|
|
62
|
+
success: false,
|
|
63
|
+
unsubscribed: false,
|
|
64
|
+
error: 'Push notifications are not set up for this site.',
|
|
65
|
+
})
|
|
66
|
+
expect(await loadHandler('browser-get-push-subscription')({}, {})).toEqual({
|
|
67
|
+
success: true,
|
|
68
|
+
supported: false,
|
|
69
|
+
permission: 'default',
|
|
70
|
+
subscribed: false,
|
|
71
|
+
endpoint: '',
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
describe('push nodes on a site with push', () => {
|
|
77
|
+
it('delegate to the service-worker module', async () => {
|
|
78
|
+
const calls: string[] = []
|
|
79
|
+
globalScope.window = {
|
|
80
|
+
__teleportServiceWorker: {
|
|
81
|
+
push: {
|
|
82
|
+
subscribe: async () => {
|
|
83
|
+
calls.push('subscribe')
|
|
84
|
+
return { success: true, subscribed: true }
|
|
85
|
+
},
|
|
86
|
+
unsubscribe: async () => {
|
|
87
|
+
calls.push('unsubscribe')
|
|
88
|
+
return { success: true, unsubscribed: true }
|
|
89
|
+
},
|
|
90
|
+
getSubscription: async () => {
|
|
91
|
+
calls.push('status')
|
|
92
|
+
return { success: true, supported: true, subscribed: true }
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
expect(await loadHandler('browser-subscribe-to-push')({}, {})).toEqual({
|
|
99
|
+
success: true,
|
|
100
|
+
subscribed: true,
|
|
101
|
+
})
|
|
102
|
+
expect(await loadHandler('browser-unsubscribe-from-push')({}, {})).toEqual({
|
|
103
|
+
success: true,
|
|
104
|
+
unsubscribed: true,
|
|
105
|
+
})
|
|
106
|
+
expect(await loadHandler('browser-get-push-subscription')({}, {})).toMatchObject({
|
|
107
|
+
subscribed: true,
|
|
108
|
+
})
|
|
109
|
+
expect(calls).toEqual(['subscribe', 'unsubscribe', 'status'])
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
describe('browser-show-notification', () => {
|
|
114
|
+
const config = {
|
|
115
|
+
title: 'Saved',
|
|
116
|
+
body: 'Your list was saved',
|
|
117
|
+
tag: 'list',
|
|
118
|
+
requireInteraction: 'true',
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
it('reports a browser without notifications', async () => {
|
|
122
|
+
globalScope.window = {}
|
|
123
|
+
delete globalScope.Notification
|
|
124
|
+
expect(await loadHandler('browser-show-notification')(config, {})).toEqual({
|
|
125
|
+
success: false,
|
|
126
|
+
permission: 'default',
|
|
127
|
+
error: 'This browser cannot show notifications.',
|
|
128
|
+
})
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
it('asks for permission once, and reports a refusal', async () => {
|
|
132
|
+
globalScope.window = {}
|
|
133
|
+
withNotification('default', 'denied')
|
|
134
|
+
expect(await loadHandler('browser-show-notification')(config, {})).toEqual({
|
|
135
|
+
success: false,
|
|
136
|
+
permission: 'denied',
|
|
137
|
+
error: 'Notifications are blocked for this site.',
|
|
138
|
+
})
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
it('shows the notification through the service worker when the site has one', async () => {
|
|
142
|
+
const viaWorker: Array<{ title: string; options: Record<string, unknown> }> = []
|
|
143
|
+
globalScope.window = {
|
|
144
|
+
__teleportServiceWorker: {
|
|
145
|
+
showNotification: async (title: string, options: Record<string, unknown>) => {
|
|
146
|
+
viaWorker.push({ title, options })
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
}
|
|
150
|
+
const onPage = withNotification('granted')
|
|
151
|
+
|
|
152
|
+
expect(await loadHandler('browser-show-notification')(config, {})).toEqual({
|
|
153
|
+
success: true,
|
|
154
|
+
permission: 'granted',
|
|
155
|
+
})
|
|
156
|
+
expect(viaWorker).toEqual([
|
|
157
|
+
{
|
|
158
|
+
title: 'Saved',
|
|
159
|
+
options: { body: 'Your list was saved', tag: 'list', requireInteraction: true },
|
|
160
|
+
},
|
|
161
|
+
])
|
|
162
|
+
expect(onPage).toEqual([])
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
it('falls back to the page when the worker is unavailable, and reports a page that refuses too', async () => {
|
|
166
|
+
globalScope.window = {
|
|
167
|
+
__teleportServiceWorker: {
|
|
168
|
+
showNotification: async () => {
|
|
169
|
+
throw new Error('Service workers are not available on this page.')
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
}
|
|
173
|
+
const onPage = withNotification('granted')
|
|
174
|
+
expect((await loadHandler('browser-show-notification')(config, {})).success).toBe(true)
|
|
175
|
+
expect(onPage).toHaveLength(1)
|
|
176
|
+
|
|
177
|
+
globalScope.window = {}
|
|
178
|
+
globalScope.Notification = Object.assign(
|
|
179
|
+
function () {
|
|
180
|
+
throw new TypeError(
|
|
181
|
+
'Illegal constructor. Use ServiceWorkerRegistration.showNotification() instead.'
|
|
182
|
+
)
|
|
183
|
+
},
|
|
184
|
+
{ permission: 'granted', requestPermission: async () => 'granted' }
|
|
185
|
+
)
|
|
186
|
+
expect(await loadHandler('browser-show-notification')(config, {})).toEqual({
|
|
187
|
+
success: false,
|
|
188
|
+
permission: 'granted',
|
|
189
|
+
error: 'Illegal constructor. Use ServiceWorkerRegistration.showNotification() instead.',
|
|
190
|
+
})
|
|
191
|
+
})
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
describe('push-send-notification', () => {
|
|
195
|
+
const PRIVATE_KEY = 'vapid-private-key'
|
|
196
|
+
const context = {
|
|
197
|
+
__baseUrl: 'https://shop.test',
|
|
198
|
+
__internalHeaders: { cookie: 'session=abc', 'x-vercel-protection-bypass': 'bypass' },
|
|
199
|
+
}
|
|
200
|
+
const config = {
|
|
201
|
+
title: 'Order shipped',
|
|
202
|
+
body: 'On its way',
|
|
203
|
+
url: '/orders/1',
|
|
204
|
+
audience: 'user',
|
|
205
|
+
userId: 'user-1',
|
|
206
|
+
ttl: '3600',
|
|
207
|
+
urgency: 'high',
|
|
208
|
+
requireInteraction: 'true',
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const respondWith = (status: number, body: unknown) => {
|
|
212
|
+
const requests: Array<{ url: string; init: Record<string, unknown> }> = []
|
|
213
|
+
globalScope.fetch = async (url: string, init: Record<string, unknown>) => {
|
|
214
|
+
requests.push({ url, init })
|
|
215
|
+
return { ok: status < 400, status, json: async () => body }
|
|
216
|
+
}
|
|
217
|
+
globalScope.__non_webpack_require__ = require
|
|
218
|
+
return requests
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
it('refuses to run before the push keys reach the environment', async () => {
|
|
222
|
+
respondWith(200, {})
|
|
223
|
+
const missing = await loadHandler('push-send-notification')(config, context)
|
|
224
|
+
process.env.WEB_PUSH_VAPID_PRIVATE_KEY = 'teleporthq.secrets.WEB_PUSH_VAPID_PRIVATE_KEY'
|
|
225
|
+
const placeholder = await loadHandler('push-send-notification')(config, context)
|
|
226
|
+
|
|
227
|
+
const failure = {
|
|
228
|
+
success: false,
|
|
229
|
+
sent: 0,
|
|
230
|
+
failed: 0,
|
|
231
|
+
removed: 0,
|
|
232
|
+
complete: false,
|
|
233
|
+
error: 'Push notifications are not set up for this site.',
|
|
234
|
+
}
|
|
235
|
+
expect(missing).toEqual(failure)
|
|
236
|
+
expect(placeholder).toEqual(failure)
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
it('calls the internal send route with the derived token and returns its counts', async () => {
|
|
240
|
+
process.env.WEB_PUSH_VAPID_PRIVATE_KEY = PRIVATE_KEY
|
|
241
|
+
const requests = respondWith(200, {
|
|
242
|
+
success: true,
|
|
243
|
+
sent: 2,
|
|
244
|
+
failed: 1,
|
|
245
|
+
removed: 1,
|
|
246
|
+
complete: true,
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
const result = await loadHandler('push-send-notification')(config, context)
|
|
250
|
+
|
|
251
|
+
expect(result).toEqual({ success: true, sent: 2, failed: 1, removed: 1, complete: true })
|
|
252
|
+
expect(requests[0].url).toBe('https://shop.test/api/push/send')
|
|
253
|
+
expect(requests[0].init.headers).toEqual({
|
|
254
|
+
'Content-Type': 'application/json',
|
|
255
|
+
cookie: 'session=abc',
|
|
256
|
+
'x-vercel-protection-bypass': 'bypass',
|
|
257
|
+
'x-teleport-push-token': crypto
|
|
258
|
+
.createHmac('sha256', PRIVATE_KEY)
|
|
259
|
+
.update('teleport-web-push-send')
|
|
260
|
+
.digest('hex'),
|
|
261
|
+
})
|
|
262
|
+
expect(JSON.parse(requests[0].init.body as string)).toEqual({
|
|
263
|
+
audience: 'user',
|
|
264
|
+
userId: 'user-1',
|
|
265
|
+
ttl: '3600',
|
|
266
|
+
urgency: 'high',
|
|
267
|
+
notification: {
|
|
268
|
+
title: 'Order shipped',
|
|
269
|
+
body: 'On its way',
|
|
270
|
+
url: '/orders/1',
|
|
271
|
+
requireInteraction: true,
|
|
272
|
+
silent: false,
|
|
273
|
+
},
|
|
274
|
+
})
|
|
275
|
+
})
|
|
276
|
+
|
|
277
|
+
it('reports what the route refused', async () => {
|
|
278
|
+
process.env.WEB_PUSH_VAPID_PRIVATE_KEY = PRIVATE_KEY
|
|
279
|
+
respondWith(400, { success: false, error: 'A push notification needs a title.' })
|
|
280
|
+
expect(await loadHandler('push-send-notification')({}, context)).toMatchObject({
|
|
281
|
+
success: false,
|
|
282
|
+
error: 'A push notification needs a title.',
|
|
283
|
+
})
|
|
284
|
+
|
|
285
|
+
respondWith(502, null)
|
|
286
|
+
expect(await loadHandler('push-send-notification')(config, context)).toMatchObject({
|
|
287
|
+
success: false,
|
|
288
|
+
error: 'The push notification could not be sent (HTTP 502).',
|
|
289
|
+
})
|
|
290
|
+
})
|
|
291
|
+
})
|
|
@@ -75,6 +75,46 @@ describe('event-route-changed — component scope', () => {
|
|
|
75
75
|
})
|
|
76
76
|
})
|
|
77
77
|
|
|
78
|
+
describe('event-route-changed — page scope', () => {
|
|
79
|
+
// A page's component stays mounted between two routes of the same page
|
|
80
|
+
// (`/products/a` → `/products/b`); a route change bound to that page runs in
|
|
81
|
+
// its lifecycle effect, next to the page's own state setters.
|
|
82
|
+
const generatePage = async (pageId: string) => {
|
|
83
|
+
const workflow = routeChangedWorkflow('page', { pageId: 'page-product' })
|
|
84
|
+
const plugin = createNextWorkflowPlugin({ isPage: true })
|
|
85
|
+
const structure: any = {
|
|
86
|
+
uidl: {
|
|
87
|
+
name: 'ProductDetails',
|
|
88
|
+
outputOptions: { pageId },
|
|
89
|
+
node: { type: 'element', content: { elementType: 'container', name: 'Container' } },
|
|
90
|
+
stateDefinitions: { currentRoute: { type: 'string', defaultValue: '' } },
|
|
91
|
+
},
|
|
92
|
+
chunks: [jsxComponentChunk()],
|
|
93
|
+
options: {
|
|
94
|
+
workflows: { workflows: { [workflow.id]: workflow }, customNodes: {} },
|
|
95
|
+
},
|
|
96
|
+
dependencies: {},
|
|
97
|
+
}
|
|
98
|
+
await plugin(structure)
|
|
99
|
+
const moduleChunk = (structure.chunks as any[]).find((c: any) => c.name === 'workflow-module')
|
|
100
|
+
return { code: moduleChunk ? String(moduleChunk.content) : '', structure }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
it('registers Router.events with an .off cleanup in its page lifecycle', async () => {
|
|
104
|
+
const { code, structure } = await generatePage('page-product')
|
|
105
|
+
const setup = code.slice(code.indexOf('const setupLifecycleTriggers'))
|
|
106
|
+
expect(setup).toContain("Router.events.on('routeChangeComplete'")
|
|
107
|
+
expect(setup).toContain("Router.events.off('routeChangeComplete'")
|
|
108
|
+
expect(setup).toContain('cleanups.push')
|
|
109
|
+
expect(structure.dependencies.Router).toMatchObject({ path: 'next/router' })
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it('stays out of every other page', async () => {
|
|
113
|
+
const { code } = await generatePage('page-home')
|
|
114
|
+
expect(code).not.toContain("Router.events.on('routeChangeComplete'")
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
|
+
|
|
78
118
|
describe('event-route-changed — global scope', () => {
|
|
79
119
|
const plugin = new NextWorkflowProjectPlugin()
|
|
80
120
|
// generateGlobalWorkflowsHook is private; call it directly for a unit test.
|