@teleporthq/teleport-plugin-next-workflows 0.43.67 → 0.43.68
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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EmailLocaleConfig, generateEmailLocaleModuleCode } from '../../src/email-locale'
|
|
2
|
+
import { generateSignedInDestinationCode } from '../../src/auth-return/signed-in-destination-code'
|
|
2
3
|
import { WORKFLOW_UTILS_ALIAS } from '../../src/workflow-utils-alias'
|
|
3
4
|
|
|
4
5
|
// A node handler evaluated on its own has no generated file around it to bind
|
|
@@ -20,10 +21,24 @@ export const loadEmailLocaleModule = (
|
|
|
20
21
|
return moduleShim.exports
|
|
21
22
|
}
|
|
22
23
|
|
|
24
|
+
/**
|
|
25
|
+
* The runtime's `signedInDestination`, over the given `localizeHref`. It reads
|
|
26
|
+
* `window` when called, so a test can install its browser stub afterwards.
|
|
27
|
+
*/
|
|
28
|
+
const loadSignedInDestination = (localizeHref: unknown): unknown =>
|
|
29
|
+
// eslint-disable-next-line no-new-func
|
|
30
|
+
new Function('localizeHref', `${generateSignedInDestinationCode()}\nreturn signedInDestination`)(
|
|
31
|
+
localizeHref
|
|
32
|
+
)
|
|
33
|
+
|
|
23
34
|
/** Binds the alias on the global scope; returns the function that unbinds it. */
|
|
24
35
|
export const bindWorkflowUtils = (config: EmailLocaleConfig = TEST_LOCALES): (() => void) => {
|
|
25
36
|
const globalRef = global as unknown as Record<string, unknown>
|
|
26
|
-
|
|
37
|
+
const localeHelpers = loadEmailLocaleModule(config)
|
|
38
|
+
globalRef[WORKFLOW_UTILS_ALIAS] = {
|
|
39
|
+
...localeHelpers,
|
|
40
|
+
signedInDestination: loadSignedInDestination(localeHelpers.localizeHref),
|
|
41
|
+
}
|
|
27
42
|
return () => {
|
|
28
43
|
delete globalRef[WORKFLOW_UTILS_ALIAS]
|
|
29
44
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export interface FetchCall {
|
|
2
|
+
url: string
|
|
3
|
+
method: string
|
|
4
|
+
headers: Record<string, string>
|
|
5
|
+
body: string
|
|
6
|
+
/** The body parsed as JSON, or null when it is not JSON. */
|
|
7
|
+
json: any
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface FakeAnswer {
|
|
11
|
+
status?: number
|
|
12
|
+
body?: unknown
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type FetchResponder = (call: FetchCall) => FakeAnswer
|
|
16
|
+
|
|
17
|
+
/** Process-wide caches the drivers keep, cleared around every fake-fetch run. */
|
|
18
|
+
const DRIVER_CACHES = ['__paypalBaseUrlCache', '__coingateBaseUrlCache', '__squareBaseUrlCache']
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Runs `run` with `globalThis.fetch` answered by `respond` (status 200 unless
|
|
22
|
+
* it says otherwise), recording every call, then restores fetch and clears the
|
|
23
|
+
* drivers' environment caches so no test leaks into the next.
|
|
24
|
+
*/
|
|
25
|
+
export const withFetch = async <T>(
|
|
26
|
+
respond: FetchResponder,
|
|
27
|
+
run: (calls: FetchCall[]) => Promise<T>
|
|
28
|
+
): Promise<T> => {
|
|
29
|
+
const calls: FetchCall[] = []
|
|
30
|
+
const scope = globalThis as Record<string, unknown>
|
|
31
|
+
const previous = scope.fetch
|
|
32
|
+
scope.fetch = async (
|
|
33
|
+
url: string,
|
|
34
|
+
init: { method?: string; headers?: Record<string, string>; body?: string } = {}
|
|
35
|
+
) => {
|
|
36
|
+
const body = typeof init.body === 'string' ? init.body : ''
|
|
37
|
+
let json: any = null
|
|
38
|
+
try {
|
|
39
|
+
json = body ? JSON.parse(body) : null
|
|
40
|
+
} catch (_e) {
|
|
41
|
+
json = null
|
|
42
|
+
}
|
|
43
|
+
const call: FetchCall = {
|
|
44
|
+
url,
|
|
45
|
+
method: init.method || 'GET',
|
|
46
|
+
headers: init.headers || {},
|
|
47
|
+
body,
|
|
48
|
+
json,
|
|
49
|
+
}
|
|
50
|
+
calls.push(call)
|
|
51
|
+
const answer = respond(call)
|
|
52
|
+
const status = answer.status ?? 200
|
|
53
|
+
return {
|
|
54
|
+
ok: status >= 200 && status < 300,
|
|
55
|
+
status,
|
|
56
|
+
headers: new Map([['content-type', 'application/json']]),
|
|
57
|
+
json: async () => answer.body,
|
|
58
|
+
text: async () => JSON.stringify(answer.body ?? null),
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
return await run(calls)
|
|
63
|
+
} finally {
|
|
64
|
+
scope.fetch = previous
|
|
65
|
+
DRIVER_CACHES.forEach((key) => {
|
|
66
|
+
delete scope[key]
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Runs `run` with `env` set (an `undefined` value removes the variable), then restores. */
|
|
72
|
+
export const withEnv = async <T>(
|
|
73
|
+
env: Record<string, string | undefined>,
|
|
74
|
+
run: () => Promise<T>
|
|
75
|
+
): Promise<T> => {
|
|
76
|
+
const saved: Record<string, string | undefined> = {}
|
|
77
|
+
for (const key of Object.keys(env)) {
|
|
78
|
+
saved[key] = process.env[key]
|
|
79
|
+
if (env[key] === undefined) {
|
|
80
|
+
delete process.env[key]
|
|
81
|
+
} else {
|
|
82
|
+
process.env[key] = env[key]
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
return await run()
|
|
87
|
+
} finally {
|
|
88
|
+
for (const key of Object.keys(env)) {
|
|
89
|
+
if (saved[key] === undefined) {
|
|
90
|
+
delete process.env[key]
|
|
91
|
+
} else {
|
|
92
|
+
process.env[key] = saved[key]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface StripeCall {
|
|
2
|
+
method: string
|
|
3
|
+
params: unknown
|
|
4
|
+
options?: unknown
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/** What each fake SDK method answers; a function may throw to act as a refusal. */
|
|
8
|
+
export type StripeScript = Record<string, (params: unknown, options?: unknown) => unknown>
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A recording stand-in for the `stripe` package: every method the store's
|
|
12
|
+
* Stripe driver calls, each recorded as `'<resource>.<method>'` and answered
|
|
13
|
+
* from `script` (or with an empty object).
|
|
14
|
+
*/
|
|
15
|
+
export const createFakeStripe = (
|
|
16
|
+
script: StripeScript = {}
|
|
17
|
+
): { FakeStripe: unknown; calls: StripeCall[] } => {
|
|
18
|
+
const calls: StripeCall[] = []
|
|
19
|
+
const method = (name: string) => async (params: unknown, options?: unknown) => {
|
|
20
|
+
calls.push(options === undefined ? { method: name, params } : { method: name, params, options })
|
|
21
|
+
const answer = script[name]
|
|
22
|
+
return answer ? answer(params, options) : {}
|
|
23
|
+
}
|
|
24
|
+
function FakeStripe(this: Record<string, unknown>, key: string) {
|
|
25
|
+
this.key = key
|
|
26
|
+
this.checkout = {
|
|
27
|
+
sessions: {
|
|
28
|
+
create: method('checkout.sessions.create'),
|
|
29
|
+
retrieve: method('checkout.sessions.retrieve'),
|
|
30
|
+
expire: method('checkout.sessions.expire'),
|
|
31
|
+
list: method('checkout.sessions.list'),
|
|
32
|
+
},
|
|
33
|
+
}
|
|
34
|
+
this.coupons = { create: method('coupons.create') }
|
|
35
|
+
this.paymentIntents = { retrieve: method('paymentIntents.retrieve') }
|
|
36
|
+
this.invoices = { retrieve: method('invoices.retrieve') }
|
|
37
|
+
this.refunds = { create: method('refunds.create') }
|
|
38
|
+
this.subscriptions = {
|
|
39
|
+
retrieve: method('subscriptions.retrieve'),
|
|
40
|
+
cancel: method('subscriptions.cancel'),
|
|
41
|
+
update: method('subscriptions.update'),
|
|
42
|
+
}
|
|
43
|
+
this.billingPortal = {
|
|
44
|
+
sessions: { create: method('billingPortal.sessions.create') },
|
|
45
|
+
configurations: {
|
|
46
|
+
list: method('billingPortal.configurations.list'),
|
|
47
|
+
create: method('billingPortal.configurations.create'),
|
|
48
|
+
},
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { FakeStripe, calls }
|
|
52
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { nodeRegistry } from '../../src'
|
|
2
|
+
import { PAYMENT_DRIVER_NODE_TYPES } from '../../src/payments/payment-drivers-scope'
|
|
3
|
+
import { loadPaymentDrivers, PaymentDriverRegistry } from './load-payment-drivers'
|
|
2
4
|
|
|
3
5
|
// Shared loader for re-evaluating a runtime handler in the test process.
|
|
4
6
|
//
|
|
@@ -78,15 +80,32 @@ const handlerSymbolFor = (nodeType: string): string => nodeType.replace(/-/g, '_
|
|
|
78
80
|
* Throws if the type isn't registered. The returned function captures the
|
|
79
81
|
* eval scope, so `__awaiter`/`__generator` references inside it resolve to
|
|
80
82
|
* the helpers piped in here.
|
|
83
|
+
*
|
|
84
|
+
* A payment node reaches its provider through `__paymentDrivers`, which a
|
|
85
|
+
* generated route binds before its handlers: it is bound here to the store's
|
|
86
|
+
* emitted drivers (every provider, a missing Stripe SDK) unless a test hands
|
|
87
|
+
* its own registry.
|
|
81
88
|
*/
|
|
82
|
-
export const loadHandler = (
|
|
89
|
+
export const loadHandler = (
|
|
90
|
+
nodeType: string,
|
|
91
|
+
options: { paymentDrivers?: PaymentDriverRegistry; cartPricingSettings?: unknown } = {}
|
|
92
|
+
): HandlerFn => {
|
|
83
93
|
const generator = nodeRegistry[nodeType]
|
|
84
94
|
if (!generator) {
|
|
85
95
|
throw new Error(`No handler registered for node type: ${nodeType}`)
|
|
86
96
|
}
|
|
87
97
|
const src = generator.generateHandler()
|
|
88
98
|
const symbol = handlerSymbolFor(nodeType)
|
|
99
|
+
const paymentDrivers =
|
|
100
|
+
options.paymentDrivers ||
|
|
101
|
+
(PAYMENT_DRIVER_NODE_TYPES.has(nodeType) ? loadPaymentDrivers() : undefined)
|
|
89
102
|
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
90
|
-
|
|
91
|
-
|
|
103
|
+
// `__cartPricingSettings` stands in for the route preamble's require of
|
|
104
|
+
// `utils/ecommerce/cart-pricing-settings` (cart-pricing-preamble.ts).
|
|
105
|
+
const factory = new Function(
|
|
106
|
+
'__paymentDrivers',
|
|
107
|
+
'__cartPricingSettings',
|
|
108
|
+
`${TS_EMIT_HELPERS}\n${src}\nreturn ${symbol};`
|
|
109
|
+
)
|
|
110
|
+
return factory(paymentDrivers, options.cartPricingSettings) as HandlerFn
|
|
92
111
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* tslint:disable:function-constructor */
|
|
2
|
+
import type { UIDLInvoiceSettings } from '@teleporthq/teleport-types'
|
|
3
|
+
import { generateInvoiceAssemblyCode } from '../../src/invoice/invoice-assembly-code'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Evaluates EMITTED CommonJS source (a generated route or util) as a real
|
|
7
|
+
* module, resolving its `require` calls through `requireFn`.
|
|
8
|
+
*/
|
|
9
|
+
export function evaluateEmittedModule<T>(code: string, requireFn: NodeRequire): T {
|
|
10
|
+
const factory = new Function(
|
|
11
|
+
'require',
|
|
12
|
+
'module',
|
|
13
|
+
'exports',
|
|
14
|
+
`${code}; return module.exports;`
|
|
15
|
+
) as (req: NodeRequire, mod: { exports: unknown }, exp: unknown) => T
|
|
16
|
+
const moduleObject = { exports: {} as unknown }
|
|
17
|
+
return factory(requireFn, moduleObject, moduleObject.exports)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface InvoiceRouteStubs {
|
|
21
|
+
/** Stands in for `utils/invoices/data-access.js`. */
|
|
22
|
+
dataAccess: unknown
|
|
23
|
+
/** Stands in for `utils/invoices/pdf-generator.js`. */
|
|
24
|
+
pdfGenerator: unknown
|
|
25
|
+
/** Any other module id the code under test requires, e.g. `next-auth/jwt`. */
|
|
26
|
+
modules?: Record<string, unknown>
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The `require` an emitted invoice route sees: the two stubs, the REAL emitted
|
|
31
|
+
* `utils/invoices/invoice-assembly.js` built from `settings` (wired to the same
|
|
32
|
+
* stubs), a no-op `pg`, and Node's own resolution for everything else.
|
|
33
|
+
*/
|
|
34
|
+
export function createInvoiceRouteRequire(
|
|
35
|
+
settings: UIDLInvoiceSettings,
|
|
36
|
+
stubs: InvoiceRouteStubs
|
|
37
|
+
): NodeRequire {
|
|
38
|
+
let assembly: unknown = null
|
|
39
|
+
const requireFn = ((id: string) => {
|
|
40
|
+
if (id.indexOf('data-access') !== -1) {
|
|
41
|
+
return stubs.dataAccess
|
|
42
|
+
}
|
|
43
|
+
if (id.indexOf('pdf-generator') !== -1) {
|
|
44
|
+
return stubs.pdfGenerator
|
|
45
|
+
}
|
|
46
|
+
if (id.indexOf('invoice-assembly') !== -1) {
|
|
47
|
+
if (!assembly) {
|
|
48
|
+
assembly = evaluateEmittedModule(generateInvoiceAssemblyCode(settings), requireFn)
|
|
49
|
+
}
|
|
50
|
+
return assembly
|
|
51
|
+
}
|
|
52
|
+
if (stubs.modules && id in stubs.modules) {
|
|
53
|
+
return stubs.modules[id]
|
|
54
|
+
}
|
|
55
|
+
if (id === 'pg') {
|
|
56
|
+
return { Client: class {} }
|
|
57
|
+
}
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
59
|
+
return require(id)
|
|
60
|
+
}) as unknown as NodeRequire
|
|
61
|
+
return requireFn
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The app secret the invoice routes' own server callers present (the invoice
|
|
66
|
+
* node and the payment webhooks send it as `x-internal-data-secret`). Tests
|
|
67
|
+
* that play such a caller set it as NEXTAUTH_SECRET and send it.
|
|
68
|
+
*/
|
|
69
|
+
export const INVOICE_TEST_APP_SECRET = 'invoice-test-app-secret'
|
|
70
|
+
|
|
71
|
+
/** Headers of a request from this deployment's own server code. */
|
|
72
|
+
export const serverCallHeaders = (): Record<string, string> => ({
|
|
73
|
+
host: 'localhost:3000',
|
|
74
|
+
'x-internal-data-secret': INVOICE_TEST_APP_SECRET,
|
|
75
|
+
})
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { evaluateEmittedModule } from './load-invoice-route'
|
|
2
|
+
import { generatePaymentCoreCode } from '../../src/payments/payment-core-code'
|
|
3
|
+
import { generatePaymentRegistryCode } from '../../src/payments/payment-registry-code'
|
|
4
|
+
import { PAYMENT_DRIVER_CODE } from '../../src/payments/payment-driver-code-map'
|
|
5
|
+
import { PAYMENT_DRIVER_IDS, PaymentDriverId } from '../../src/payments/payment-drivers-scope'
|
|
6
|
+
|
|
7
|
+
export interface PaymentDriverRegistry {
|
|
8
|
+
ids: string[]
|
|
9
|
+
core: any
|
|
10
|
+
get(providerId: string): any
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface LoadPaymentDriversOptions {
|
|
14
|
+
/** The providers the store carries; every driver by default. */
|
|
15
|
+
ids?: PaymentDriverId[]
|
|
16
|
+
/**
|
|
17
|
+
* What the Stripe driver's `require('stripe')` returns — a fake SDK
|
|
18
|
+
* constructor. Absent, a fake a test put on
|
|
19
|
+
* `globalThis.__non_webpack_require__` answers (resolved at call time, so a
|
|
20
|
+
* test can install it after loading), else the require throws exactly as it
|
|
21
|
+
* would in a store whose `stripe` package is missing.
|
|
22
|
+
*/
|
|
23
|
+
stripe?: unknown
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The store's `utils/payments` registry, evaluated from the EMITTED module
|
|
28
|
+
* sources exactly as a generated route requires it.
|
|
29
|
+
*/
|
|
30
|
+
export const loadPaymentDrivers = (
|
|
31
|
+
options: LoadPaymentDriversOptions = {}
|
|
32
|
+
): PaymentDriverRegistry => {
|
|
33
|
+
const ids = options.ids || [...PAYMENT_DRIVER_IDS]
|
|
34
|
+
const driverRequire = ((id: string) => {
|
|
35
|
+
if (id === 'stripe') {
|
|
36
|
+
if (options.stripe) {
|
|
37
|
+
return options.stripe
|
|
38
|
+
}
|
|
39
|
+
const injected = (globalThis as { __non_webpack_require__?: (name: string) => unknown })
|
|
40
|
+
.__non_webpack_require__
|
|
41
|
+
if (typeof injected === 'function') {
|
|
42
|
+
return injected('stripe')
|
|
43
|
+
}
|
|
44
|
+
throw new Error("Cannot find module 'stripe'")
|
|
45
|
+
}
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
47
|
+
return require(id)
|
|
48
|
+
}) as unknown as NodeRequire
|
|
49
|
+
const core = evaluateEmittedModule(generatePaymentCoreCode(), driverRequire)
|
|
50
|
+
const drivers: Record<string, unknown> = {}
|
|
51
|
+
for (const id of ids) {
|
|
52
|
+
drivers[id] = evaluateEmittedModule(PAYMENT_DRIVER_CODE[id](), driverRequire)
|
|
53
|
+
}
|
|
54
|
+
const registryRequire = ((id: string) => {
|
|
55
|
+
if (id === './core') {
|
|
56
|
+
return core
|
|
57
|
+
}
|
|
58
|
+
const driver = /^\.\/drivers\/([a-z]+)$/.exec(id)
|
|
59
|
+
if (driver) {
|
|
60
|
+
return drivers[driver[1]]
|
|
61
|
+
}
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
63
|
+
return require(id)
|
|
64
|
+
}) as unknown as NodeRequire
|
|
65
|
+
return evaluateEmittedModule<PaymentDriverRegistry>(
|
|
66
|
+
generatePaymentRegistryCode(ids),
|
|
67
|
+
registryRequire
|
|
68
|
+
)
|
|
69
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as crypto from 'crypto'
|
|
2
|
+
import { generateSharedRuntimeUtilsCode } from '../../src/executor-generator'
|
|
3
|
+
import { generateServerRuntimeCode } from '../../src/server-runtime-code'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The generated `utils/workflows/server-runtime.js` exactly as a route loads
|
|
7
|
+
* it: the shared runtime utilities plus the server-only signed hand-off,
|
|
8
|
+
* internal-call token and trusted base URL.
|
|
9
|
+
*/
|
|
10
|
+
export function loadServerRuntime(): Record<string, any> {
|
|
11
|
+
const shared: { exports: Record<string, unknown> } = { exports: {} }
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
13
|
+
new Function('module', 'exports', generateSharedRuntimeUtilsCode())(shared, shared.exports)
|
|
14
|
+
const server: { exports: Record<string, any> } = { exports: {} }
|
|
15
|
+
const requireFn = (id: string): unknown => {
|
|
16
|
+
if (id === 'crypto') {
|
|
17
|
+
return crypto
|
|
18
|
+
}
|
|
19
|
+
if (id === './runtime-utils') {
|
|
20
|
+
return shared.exports
|
|
21
|
+
}
|
|
22
|
+
throw new Error(`Unexpected require in server runtime: ${id}`)
|
|
23
|
+
}
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
25
|
+
new Function('module', 'exports', 'require', 'process', 'Buffer', generateServerRuntimeCode())(
|
|
26
|
+
server,
|
|
27
|
+
server.exports,
|
|
28
|
+
requireFn,
|
|
29
|
+
process,
|
|
30
|
+
Buffer
|
|
31
|
+
)
|
|
32
|
+
return server.exports
|
|
33
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UIDLAuthentication } from '@teleporthq/teleport-types'
|
|
2
|
-
import { generateMiddlewareFile } from '../../src/auth-generator'
|
|
2
|
+
import { generateMiddlewareFile, MiddlewareOptions } from '../../src/auth-generator'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Loads the middleware `generateMiddlewareFile` emits and runs it against a
|
|
@@ -25,6 +25,20 @@ export interface MiddlewareSessionUser {
|
|
|
25
25
|
role?: string
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* What the stubbed `/api/auth/subscriber-access` answers: a body, a non-2xx
|
|
30
|
+
* status, or a thrown network error. Omitted, the route answers "not entitled".
|
|
31
|
+
*/
|
|
32
|
+
export type SubscriberAccessStub =
|
|
33
|
+
| { entitled: boolean; redirectTo?: string }
|
|
34
|
+
| { status: number }
|
|
35
|
+
| { throws: true }
|
|
36
|
+
|
|
37
|
+
export interface MiddlewareFetchCall {
|
|
38
|
+
url: string
|
|
39
|
+
cookie: string
|
|
40
|
+
}
|
|
41
|
+
|
|
28
42
|
export interface MiddlewareRequestOptions {
|
|
29
43
|
/** Session user the stubbed `/api/auth/session` returns; omit for a guest. */
|
|
30
44
|
sessionUser?: MiddlewareSessionUser | null
|
|
@@ -36,6 +50,10 @@ export interface MiddlewareRequestOptions {
|
|
|
36
50
|
*/
|
|
37
51
|
locale?: string
|
|
38
52
|
defaultLocale?: string
|
|
53
|
+
/** The subscriber-access route's answer for this request. */
|
|
54
|
+
subscriberAccess?: SubscriberAccessStub
|
|
55
|
+
/** Receives every `fetch` the middleware makes, in order. */
|
|
56
|
+
fetchCalls?: MiddlewareFetchCall[]
|
|
39
57
|
}
|
|
40
58
|
|
|
41
59
|
interface RawMiddlewareResult {
|
|
@@ -65,7 +83,15 @@ const stripModuleSyntax = (code: string): string =>
|
|
|
65
83
|
*/
|
|
66
84
|
export const extractProtectedRoutes = (
|
|
67
85
|
code: string
|
|
68
|
-
): Record<
|
|
86
|
+
): Record<
|
|
87
|
+
string,
|
|
88
|
+
{
|
|
89
|
+
requiresAuth: boolean
|
|
90
|
+
allowedRoles: string[]
|
|
91
|
+
requiresSubscription?: boolean
|
|
92
|
+
subscriptionProductIds?: string[]
|
|
93
|
+
}
|
|
94
|
+
> => {
|
|
69
95
|
// Non-greedy up to the first `};`. `JSON.stringify(…, null, 2)` never emits
|
|
70
96
|
// that sequence inside the object, so the first hit is the real terminator —
|
|
71
97
|
// and the empty-map case (`= {};`) is covered by the same pattern.
|
|
@@ -97,12 +123,15 @@ const NEXT_RESPONSE_STUB = {
|
|
|
97
123
|
* Compiles the middleware once for an auth config. Reuse the returned function
|
|
98
124
|
* across requests in a test to avoid re-generating the file per assertion.
|
|
99
125
|
*/
|
|
100
|
-
export const compileGeneratedMiddleware = (
|
|
126
|
+
export const compileGeneratedMiddleware = (
|
|
127
|
+
auth: UIDLAuthentication,
|
|
128
|
+
middlewareOptions: MiddlewareOptions = {}
|
|
129
|
+
) => {
|
|
101
130
|
const factory = new Function(
|
|
102
131
|
'NextResponse',
|
|
103
132
|
'getToken',
|
|
104
133
|
'fetch',
|
|
105
|
-
`${stripModuleSyntax(generateMiddlewareFile(auth))}; return middleware;`
|
|
134
|
+
`${stripModuleSyntax(generateMiddlewareFile(auth, middlewareOptions))}; return middleware;`
|
|
106
135
|
) as unknown as MiddlewareFactory
|
|
107
136
|
|
|
108
137
|
return async (
|
|
@@ -112,11 +141,23 @@ export const compileGeneratedMiddleware = (auth: UIDLAuthentication) => {
|
|
|
112
141
|
const origin = options.origin || 'https://shop.test'
|
|
113
142
|
const sessionUser = options.sessionUser ?? null
|
|
114
143
|
const cookieHeader = sessionUser ? 'next-auth.session-token=stub' : ''
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
144
|
+
const subscriberAccess: SubscriberAccessStub = options.subscriberAccess ?? { entitled: false }
|
|
145
|
+
|
|
146
|
+
const fetchImpl = async (url: string, init?: { headers?: { cookie?: string } }) => {
|
|
147
|
+
if (options.fetchCalls) {
|
|
148
|
+
options.fetchCalls.push({ url: String(url), cookie: init?.headers?.cookie ?? '' })
|
|
149
|
+
}
|
|
150
|
+
if (String(url).indexOf('/api/auth/subscriber-access') === -1) {
|
|
151
|
+
return { ok: true, json: async () => ({ user: sessionUser }) }
|
|
152
|
+
}
|
|
153
|
+
if ('throws' in subscriberAccess) {
|
|
154
|
+
throw new Error('network down')
|
|
155
|
+
}
|
|
156
|
+
if ('status' in subscriberAccess) {
|
|
157
|
+
return { ok: false, status: subscriberAccess.status, json: async () => ({}) }
|
|
158
|
+
}
|
|
159
|
+
return { ok: true, json: async () => subscriberAccess }
|
|
160
|
+
}
|
|
120
161
|
|
|
121
162
|
const getTokenStub = async (): Promise<null> => null
|
|
122
163
|
const middleware = factory(NEXT_RESPONSE_STUB, getTokenStub, fetchImpl)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { UIDLStateDefinition } from '@teleporthq/teleport-types'
|
|
2
|
+
import { findFormStateKeyForHydration } from '../src/admin-form-hydration'
|
|
3
|
+
|
|
4
|
+
const objectState = (defaultValue: Record<string, unknown>): UIDLStateDefinition => ({
|
|
5
|
+
type: 'object',
|
|
6
|
+
defaultValue,
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
describe('findFormStateKeyForHydration', () => {
|
|
10
|
+
it('copies the loaded row into the selected-item form, whatever order the states arrive in', () => {
|
|
11
|
+
// The editor stores a page's states by id, so the product update page's
|
|
12
|
+
// options editor states can come before its form.
|
|
13
|
+
const states: Record<string, UIDLStateDefinition> = {
|
|
14
|
+
productsUpdateOptionsPriceBy: objectState({ mode: 'fixed', open: 'false' }),
|
|
15
|
+
productsUpdateOptionsMeta: objectState({ isEmpty: 'false' }),
|
|
16
|
+
productsSelectedItemData: objectState({ name: '', price: '' }),
|
|
17
|
+
productsSelectedItemId: { type: 'string', defaultValue: '' },
|
|
18
|
+
productsUpdateOptionsEdit: objectState({ label: '' }),
|
|
19
|
+
}
|
|
20
|
+
expect(findFormStateKeyForHydration(states)).toBe('productsSelectedItemData')
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('keeps the only object state of a page without a selected-item form', () => {
|
|
24
|
+
const states: Record<string, UIDLStateDefinition> = {
|
|
25
|
+
isOpen: { type: 'boolean', defaultValue: false },
|
|
26
|
+
initialAccountFormData: objectState({ first_name: '' }),
|
|
27
|
+
}
|
|
28
|
+
expect(findFormStateKeyForHydration(states)).toBe('initialAccountFormData')
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
it('never picks an empty object, an array or a missing state', () => {
|
|
32
|
+
expect(
|
|
33
|
+
findFormStateKeyForHydration({
|
|
34
|
+
rows: { type: 'array', defaultValue: [] },
|
|
35
|
+
emptyObject: objectState({}),
|
|
36
|
+
})
|
|
37
|
+
).toBeUndefined()
|
|
38
|
+
})
|
|
39
|
+
})
|
|
@@ -53,3 +53,61 @@ describe('__normalizeAdminFormRow', () => {
|
|
|
53
53
|
})
|
|
54
54
|
})
|
|
55
55
|
})
|
|
56
|
+
|
|
57
|
+
describe('__normalizeAdminFormRow — a product loaded as stored', () => {
|
|
58
|
+
const PRODUCT_DEFAULTS = {
|
|
59
|
+
name: '',
|
|
60
|
+
gallery_images: '',
|
|
61
|
+
is_digital: false,
|
|
62
|
+
is_gift_card: false,
|
|
63
|
+
discounts: '',
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
it('shows a JSON gallery one URL per line, and keeps anything else as typed', () => {
|
|
67
|
+
const row = { gallery_images: '["https://a.io/1.png","https://a.io/2.png"]' }
|
|
68
|
+
expect(helpers.normalizeRow(row, PRODUCT_DEFAULTS).gallery_images).toBe(
|
|
69
|
+
'https://a.io/1.png\nhttps://a.io/2.png'
|
|
70
|
+
)
|
|
71
|
+
expect(
|
|
72
|
+
helpers.normalizeRow({ gallery_images: 'https://a.io/1.png' }, PRODUCT_DEFAULTS)
|
|
73
|
+
.gallery_images
|
|
74
|
+
).toBe('https://a.io/1.png')
|
|
75
|
+
expect(
|
|
76
|
+
helpers.normalizeRow({ gallery_images: '[not json' }, PRODUCT_DEFAULTS).gallery_images
|
|
77
|
+
).toBe('[not json')
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('reads a flag that arrives as text as the boolean it is — "false" is not a ticked box', () => {
|
|
81
|
+
const fromView = helpers.normalizeRow(
|
|
82
|
+
{ isDigital: 'true', isGiftCard: 'false' },
|
|
83
|
+
PRODUCT_DEFAULTS
|
|
84
|
+
)
|
|
85
|
+
expect(fromView.is_digital).toBe(true)
|
|
86
|
+
expect(fromView.is_gift_card).toBe(false)
|
|
87
|
+
const fromPostgres = helpers.normalizeRow(
|
|
88
|
+
{ is_digital: 't', is_gift_card: 'f' },
|
|
89
|
+
PRODUCT_DEFAULTS
|
|
90
|
+
)
|
|
91
|
+
expect(fromPostgres).toMatchObject({ is_digital: true, is_gift_card: false })
|
|
92
|
+
const stored = helpers.normalizeRow({ is_digital: true, is_gift_card: false }, PRODUCT_DEFAULTS)
|
|
93
|
+
expect(stored).toMatchObject({ is_digital: true, is_gift_card: false })
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('keeps the stored discounts, and a text field that merely says "true"', () => {
|
|
97
|
+
const discounts = '[{"id":"d1","type":"fixed","value":10}]'
|
|
98
|
+
const out = helpers.normalizeRow({ discounts, name: 'true' }, PRODUCT_DEFAULTS)
|
|
99
|
+
expect(out.discounts).toBe(discounts)
|
|
100
|
+
expect(out.name).toBe('true')
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
describe('__normalizeTagsForFormInput', () => {
|
|
105
|
+
it('shows the editor’s JSON list, a Postgres array and an array alike, and keeps plain text', () => {
|
|
106
|
+
expect(helpers.normalizeTags('["light","desk"]')).toBe('light, desk')
|
|
107
|
+
expect(helpers.normalizeTags('{"light","desk"}')).toBe('light, desk')
|
|
108
|
+
expect(helpers.normalizeTags(['light', 'desk'])).toBe('light, desk')
|
|
109
|
+
expect(helpers.normalizeTags('light, desk')).toBe('light, desk')
|
|
110
|
+
expect(helpers.normalizeTags('[not json]')).toBe('[not json]')
|
|
111
|
+
expect(helpers.normalizeTags(null)).toBe('')
|
|
112
|
+
})
|
|
113
|
+
})
|
|
@@ -13,7 +13,11 @@ import { generateSharedRuntimeUtilsCode } from '../src/executor-generator'
|
|
|
13
13
|
interface MockState {
|
|
14
14
|
aiResponses: string[]
|
|
15
15
|
aiCalls: Array<{ systemMessage: string; userMessage: string; jsonMode: boolean }>
|
|
16
|
-
fetchCalls: Array<{
|
|
16
|
+
fetchCalls: Array<{
|
|
17
|
+
url: string
|
|
18
|
+
body: { query: string; params: unknown[] }
|
|
19
|
+
headers: Record<string, string>
|
|
20
|
+
}>
|
|
17
21
|
fetchResponse: { ok: boolean; json: unknown }
|
|
18
22
|
}
|
|
19
23
|
|
|
@@ -27,8 +31,11 @@ function loadHandler(state: MockState) {
|
|
|
27
31
|
};
|
|
28
32
|
`
|
|
29
33
|
const source = aiSelectDatabaseData.generateServerHandler!()
|
|
30
|
-
const fetchMock = async (
|
|
31
|
-
|
|
34
|
+
const fetchMock = async (
|
|
35
|
+
url: string,
|
|
36
|
+
init: { body: string; headers: Record<string, string> }
|
|
37
|
+
) => {
|
|
38
|
+
state.fetchCalls.push({ url, body: JSON.parse(init.body), headers: init.headers })
|
|
32
39
|
return {
|
|
33
40
|
ok: state.fetchResponse.ok,
|
|
34
41
|
json: async () => state.fetchResponse.json,
|
|
@@ -92,6 +99,10 @@ describe('happy path', () => {
|
|
|
92
99
|
expect(state.aiCalls[0].systemMessage).toContain('TABLE "teleport_products"')
|
|
93
100
|
expect(state.fetchCalls).toHaveLength(1)
|
|
94
101
|
expect(state.fetchCalls[0].url).toBe('/api/data/ds1/raw-query')
|
|
102
|
+
// A server-side call, marked as SQL it did not write: the data route lets
|
|
103
|
+
// it run raw SQL but keeps it off the money tables and the users' roles.
|
|
104
|
+
expect(state.fetchCalls[0].headers['x-tq-restricted-sql']).toBe('1')
|
|
105
|
+
expect(state.fetchCalls[0].headers).toHaveProperty('x-internal-data-secret')
|
|
95
106
|
// The executed SQL carries the enforced LIMIT
|
|
96
107
|
expect(state.fetchCalls[0].body.query).toBe('SELECT "id" FROM "teleport_products" LIMIT 100')
|
|
97
108
|
})
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getAPIRouteFileName } from '../src/api-route-generator'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A workflow's server segments each get their own API route file, and the
|
|
5
|
+
* client's URL map is built from the same names. Capping the segment id at
|
|
6
|
+
* eight characters spelled `server-10`, `server-11` and `server-12` as
|
|
7
|
+
* `server-1`: the tenth segment's file overwrote the first, and the client
|
|
8
|
+
* sent the first call of the workflow to whatever the last segment held. On
|
|
9
|
+
* the checkout that was the payment charge, reached before the cart was
|
|
10
|
+
* validated or the order written.
|
|
11
|
+
*/
|
|
12
|
+
describe('getAPIRouteFileName', () => {
|
|
13
|
+
it('gives every server segment its own file, past the ninth', () => {
|
|
14
|
+
const names = Array.from({ length: 14 }, (_, index) =>
|
|
15
|
+
getAPIRouteFileName(
|
|
16
|
+
'19df4d9e-6409-40a4-bbb9-3645b2afcf3b',
|
|
17
|
+
`server-${index + 1}`,
|
|
18
|
+
'Place Order 2'
|
|
19
|
+
)
|
|
20
|
+
)
|
|
21
|
+
expect(new Set(names).size).toBe(names.length)
|
|
22
|
+
expect(names[0]).toBe('place-order-2-19df4d9e-seg-server-1')
|
|
23
|
+
expect(names[9]).toBe('place-order-2-19df4d9e-seg-server-10')
|
|
24
|
+
expect(names[11]).toBe('place-order-2-19df4d9e-seg-server-12')
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('keeps the workflow-id suffix that tells two same-named workflows apart', () => {
|
|
28
|
+
const a = getAPIRouteFileName('aaaaaaaa-1111', 'server-1', 'Place Order')
|
|
29
|
+
const b = getAPIRouteFileName('bbbbbbbb-2222', 'server-1', 'Place Order')
|
|
30
|
+
expect(a).not.toBe(b)
|
|
31
|
+
expect(a).toBe('place-order-aaaaaaaa-seg-server-1')
|
|
32
|
+
})
|
|
33
|
+
})
|