@teleporthq/teleport-plugin-next-workflows 0.44.11 → 0.44.17
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/fake-fetch.ts +75 -0
- package/__tests__/_helpers/gui-place-order-statements.ts +17 -0
- package/__tests__/_helpers/inserted-lines.ts +22 -0
- package/__tests__/_helpers/invoice-store.ts +10 -1
- package/__tests__/_helpers/load-security-runtime.ts +45 -0
- package/__tests__/_helpers/load-server-runtime.ts +26 -3
- package/__tests__/_helpers/run-account-delete-route.ts +3 -1
- package/__tests__/_helpers/run-generated-middleware.ts +7 -2
- package/__tests__/account-delete-owned-rows.test.ts +3 -1
- package/__tests__/adopted-element-trigger-code.test.ts +128 -0
- package/__tests__/analytics-track-outcome.test.ts +145 -0
- package/__tests__/auth-password-change-ends-sessions.test.ts +8 -1
- package/__tests__/auth-password-security.test.ts +2275 -0
- package/__tests__/auth-session-cost.test.ts +31 -0
- package/__tests__/auth-signup-route.test.ts +960 -0
- package/__tests__/authored-code-every-path.test.ts +247 -0
- package/__tests__/automations-bus.test.ts +3820 -0
- package/__tests__/automations-catalog-drift.test.ts +97 -0
- package/__tests__/booking-calendar-feed-route.test.ts +20 -3
- package/__tests__/cart-price-order.test.ts +336 -1
- package/__tests__/code-lookup-rate-limit-route.test.ts +189 -0
- package/__tests__/cost-bearing-node-types.test.ts +119 -0
- package/__tests__/credential-columns-reply.test.ts +9 -0
- package/__tests__/credential-result-reply.test.ts +19 -5
- package/__tests__/cron-route-loop-templateparams.test.ts +6 -3
- package/__tests__/custom-js-authored-code.test.ts +304 -0
- package/__tests__/custom-node-custom-code-gate.test.ts +136 -0
- package/__tests__/custom-node-step-handlers.test.ts +251 -0
- package/__tests__/custom-node-step-reach.test.ts +63 -0
- package/__tests__/data-api-anon-user-id-fallback.test.ts +7 -2
- package/__tests__/data-api-browser-reads.test.ts +7 -0
- package/__tests__/data-api-business-events.test.ts +403 -0
- package/__tests__/data-api-invalid-body.test.ts +7 -0
- package/__tests__/data-api-low-stock-autofire.test.ts +30 -4
- package/__tests__/data-api-optional-feature-columns.test.ts +44 -0
- package/__tests__/data-api-owner-scope-credentials.test.ts +1324 -0
- package/__tests__/data-api-protected-tables.test.ts +48 -15
- package/__tests__/data-api-retired-table-and-account-fields.test.ts +208 -0
- package/__tests__/email-locale-senders.test.ts +5 -3
- package/__tests__/expression-injection.test.ts +343 -0
- package/__tests__/fixtures/admin-file-workflows.json +242 -0
- package/__tests__/form-confirmation-email-template.test.ts +44 -0
- package/__tests__/internal-request-headers.test.ts +25 -0
- package/__tests__/invoice-pdf-service-project-header.test.ts +120 -0
- package/__tests__/invoice-self-call-origin.test.ts +57 -1
- package/__tests__/legacy-webhook-self-calls.test.ts +86 -1
- package/__tests__/middleware-home-route-protection.test.ts +3 -1
- package/__tests__/middleware-subscriber-access.test.ts +1 -1
- package/__tests__/newsletter-admin-route.test.ts +649 -0
- package/__tests__/newsletter-plugin.test.ts +1248 -0
- package/__tests__/outbound-nodes-security.test.ts +1929 -0
- package/__tests__/page-access-guard.test.ts +217 -0
- package/__tests__/page-access-route-table.test.ts +231 -0
- package/__tests__/payment-drivers-module.test.ts +23 -0
- package/__tests__/payment-legacy-webhook-routes.test.ts +100 -5
- package/__tests__/payment-webhook-route.test.ts +4 -1
- package/__tests__/paypal-webhook-signature-verification.test.ts +44 -0
- package/__tests__/place-order-guards.test.ts +506 -0
- package/__tests__/public-step-guards.test.ts +310 -0
- package/__tests__/publish-refusals.test.ts +505 -0
- package/__tests__/realtime-identity-routes.test.ts +492 -0
- package/__tests__/record-event-writer-server-only.test.ts +975 -0
- package/__tests__/resolve-config-template-params.test.ts +3 -3
- package/__tests__/runtime-storage-upload-access.test.ts +280 -17
- package/__tests__/security-integration-env-names.test.ts +74 -0
- package/__tests__/security-lists-parity.test.ts +245 -0
- package/__tests__/security-runtime-shadow.test.ts +224 -1
- package/__tests__/security-runtime.test.ts +893 -0
- package/__tests__/segment-rate-limit-error-branch.test.ts +284 -0
- package/__tests__/segment-route-abuse-gate.test.ts +309 -0
- package/__tests__/server-job-hops-real-data-api.test.ts +669 -0
- package/__tests__/server-session-identity.test.ts +522 -0
- package/__tests__/server-step-chain.test.ts +222 -0
- package/__tests__/server-step-signing.test.ts +107 -2
- package/__tests__/session-cookie-resolver.test.ts +62 -106
- package/__tests__/signup-event.test.ts +649 -0
- package/__tests__/signup-reply-identical.test.ts +144 -0
- package/__tests__/slack-message-escaping.test.ts +123 -0
- package/__tests__/visitor-step-limits.test.ts +318 -0
- package/__tests__/webhook-delivery-lease.test.ts +4 -1
- package/__tests__/webpack-safe-handlers.test.ts +57 -8
- package/__tests__/workflow-auth-guard.test.ts +9 -1
- package/dist/cjs/account-delete-route-generator.d.ts +1 -0
- package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
- package/dist/cjs/account-delete-route-generator.js +18 -3
- package/dist/cjs/account-delete-route-generator.js.map +1 -1
- package/dist/cjs/api-route-generator.d.ts +52 -3
- package/dist/cjs/api-route-generator.d.ts.map +1 -1
- package/dist/cjs/api-route-generator.js +600 -145
- package/dist/cjs/api-route-generator.js.map +1 -1
- package/dist/cjs/auth-generator.d.ts +126 -3
- package/dist/cjs/auth-generator.d.ts.map +1 -1
- package/dist/cjs/auth-generator.js +1353 -139
- package/dist/cjs/auth-generator.js.map +1 -1
- package/dist/cjs/automations/activity-kicks.d.ts +12 -0
- package/dist/cjs/automations/activity-kicks.d.ts.map +1 -0
- package/dist/cjs/automations/activity-kicks.js +123 -0
- package/dist/cjs/automations/activity-kicks.js.map +1 -0
- package/dist/cjs/automations/app-events-source.d.ts +33 -0
- package/dist/cjs/automations/app-events-source.d.ts.map +1 -0
- package/dist/cjs/automations/app-events-source.js +109 -0
- package/dist/cjs/automations/app-events-source.js.map +1 -0
- package/dist/cjs/automations/automations-project-plugin.d.ts +21 -0
- package/dist/cjs/automations/automations-project-plugin.d.ts.map +1 -0
- package/dist/cjs/automations/automations-project-plugin.js +102 -0
- package/dist/cjs/automations/automations-project-plugin.js.map +1 -0
- package/dist/cjs/automations/automations-scope.d.ts +104 -0
- package/dist/cjs/automations/automations-scope.d.ts.map +1 -0
- package/dist/cjs/automations/automations-scope.js +176 -0
- package/dist/cjs/automations/automations-scope.js.map +1 -0
- package/dist/cjs/automations/dispatcher-source.d.ts +72 -0
- package/dist/cjs/automations/dispatcher-source.d.ts.map +1 -0
- package/dist/cjs/automations/dispatcher-source.js +1008 -0
- package/dist/cjs/automations/dispatcher-source.js.map +1 -0
- package/dist/cjs/automations/event-bus-source.d.ts +44 -0
- package/dist/cjs/automations/event-bus-source.d.ts.map +1 -0
- package/dist/cjs/automations/event-bus-source.js +427 -0
- package/dist/cjs/automations/event-bus-source.js.map +1 -0
- package/dist/cjs/automations/handler-module-generator.d.ts +25 -0
- package/dist/cjs/automations/handler-module-generator.d.ts.map +1 -0
- package/dist/cjs/automations/handler-module-generator.js +78 -0
- package/dist/cjs/automations/handler-module-generator.js.map +1 -0
- package/dist/cjs/automations/hydrators-source.d.ts +33 -0
- package/dist/cjs/automations/hydrators-source.d.ts.map +1 -0
- package/dist/cjs/automations/hydrators-source.js +571 -0
- package/dist/cjs/automations/hydrators-source.js.map +1 -0
- package/dist/cjs/booking-calendar-feed-route-generator.d.ts.map +1 -1
- package/dist/cjs/booking-calendar-feed-route-generator.js +8 -0
- package/dist/cjs/booking-calendar-feed-route-generator.js.map +1 -1
- package/dist/cjs/configured-nextauth-url.d.ts +17 -0
- package/dist/cjs/configured-nextauth-url.d.ts.map +1 -0
- package/dist/cjs/configured-nextauth-url.js +20 -0
- package/dist/cjs/configured-nextauth-url.js.map +1 -0
- package/dist/cjs/cron-request-verification.d.ts +22 -1
- package/dist/cjs/cron-request-verification.d.ts.map +1 -1
- package/dist/cjs/cron-request-verification.js +50 -6
- package/dist/cjs/cron-request-verification.js.map +1 -1
- package/dist/cjs/data-api-route-generator.d.ts +19 -0
- package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
- package/dist/cjs/data-api-route-generator.js +711 -43
- package/dist/cjs/data-api-route-generator.js.map +1 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts +3 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.js +45 -5
- package/dist/cjs/ecommerce/parameterized-stock-chain.js.map +1 -1
- package/dist/cjs/ecommerce/place-order-guards.d.ts +126 -0
- package/dist/cjs/ecommerce/place-order-guards.d.ts.map +1 -0
- package/dist/cjs/ecommerce/place-order-guards.js +670 -0
- package/dist/cjs/ecommerce/place-order-guards.js.map +1 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts +2 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/cjs/ecommerce-customhandler-rewriter.js +38 -2
- package/dist/cjs/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +368 -60
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/graph-utils.d.ts +9 -0
- package/dist/cjs/graph-utils.d.ts.map +1 -1
- package/dist/cjs/graph-utils.js +32 -1
- package/dist/cjs/graph-utils.js.map +1 -1
- package/dist/cjs/index.d.ts +20 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +72 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/invoice/api-routes-code.d.ts +9 -3
- package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/cjs/invoice/api-routes-code.js +9 -7
- package/dist/cjs/invoice/api-routes-code.js.map +1 -1
- package/dist/cjs/invoice/index.d.ts.map +1 -1
- package/dist/cjs/invoice/index.js +12 -7
- package/dist/cjs/invoice/index.js.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.js +8 -3
- package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/cjs/invoice/pdf-generator-code.d.ts.map +1 -1
- package/dist/cjs/invoice/pdf-generator-code.js +2 -1
- package/dist/cjs/invoice/pdf-generator-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 +15 -7
- package/dist/cjs/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/cjs/newsletter/admin-route-code.d.ts +60 -0
- package/dist/cjs/newsletter/admin-route-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/admin-route-code.js +300 -0
- package/dist/cjs/newsletter/admin-route-code.js.map +1 -0
- package/dist/cjs/newsletter/helper-code.d.ts +109 -0
- package/dist/cjs/newsletter/helper-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/helper-code.js +662 -0
- package/dist/cjs/newsletter/helper-code.js.map +1 -0
- package/dist/cjs/newsletter/newsletter-scope.d.ts +65 -0
- package/dist/cjs/newsletter/newsletter-scope.d.ts.map +1 -0
- package/dist/cjs/newsletter/newsletter-scope.js +103 -0
- package/dist/cjs/newsletter/newsletter-scope.js.map +1 -0
- package/dist/cjs/newsletter/project-plugin.d.ts +18 -0
- package/dist/cjs/newsletter/project-plugin.d.ts.map +1 -0
- package/dist/cjs/newsletter/project-plugin.js +97 -0
- package/dist/cjs/newsletter/project-plugin.js.map +1 -0
- package/dist/cjs/newsletter/routes-code.d.ts +6 -0
- package/dist/cjs/newsletter/routes-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/routes-code.js +181 -0
- package/dist/cjs/newsletter/routes-code.js.map +1 -0
- package/dist/cjs/nodes/account/account-compare-passwords.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-compare-passwords.js +16 -6
- package/dist/cjs/nodes/account/account-compare-passwords.js.map +1 -1
- package/dist/cjs/nodes/account/account-delete-current.js +1 -1
- package/dist/cjs/nodes/account/account-get-current.js +1 -1
- package/dist/cjs/nodes/account/account-hash-password.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-hash-password.js +15 -3
- package/dist/cjs/nodes/account/account-hash-password.js.map +1 -1
- package/dist/cjs/nodes/account/account-login.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-login.js +23 -6
- package/dist/cjs/nodes/account/account-login.js.map +1 -1
- package/dist/cjs/nodes/account/account-logout.js +1 -1
- package/dist/cjs/nodes/account/account-refresh-session.js +1 -1
- package/dist/cjs/nodes/account/account-request-password-reset.d.ts +3 -0
- package/dist/cjs/nodes/account/account-request-password-reset.d.ts.map +1 -0
- package/dist/cjs/nodes/account/account-request-password-reset.js +46 -0
- package/dist/cjs/nodes/account/account-request-password-reset.js.map +1 -0
- package/dist/cjs/nodes/account/account-reset-password.d.ts +3 -0
- package/dist/cjs/nodes/account/account-reset-password.d.ts.map +1 -0
- package/dist/cjs/nodes/account/account-reset-password.js +44 -0
- package/dist/cjs/nodes/account/account-reset-password.js.map +1 -0
- package/dist/cjs/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-signup.js +82 -19
- package/dist/cjs/nodes/account/account-signup.js.map +1 -1
- package/dist/cjs/nodes/account/account-social-login.js +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.js +20 -5
- package/dist/cjs/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.js +20 -5
- package/dist/cjs/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js +10 -2
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
- package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts +31 -2
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.js +125 -11
- package/dist/cjs/nodes/ai/ai-provider-utils.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 -2
- package/dist/cjs/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js +20 -5
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.js +20 -5
- package/dist/cjs/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.js +20 -5
- package/dist/cjs/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.js +20 -5
- package/dist/cjs/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts +3 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.js +110 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.js.map +1 -0
- package/dist/cjs/nodes/cart/cart-price-order.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-price-order.js +161 -2
- package/dist/cjs/nodes/cart/cart-price-order.js.map +1 -1
- package/dist/cjs/nodes/cost-bearing-node-types.d.ts +4 -0
- package/dist/cjs/nodes/cost-bearing-node-types.d.ts.map +1 -0
- package/dist/cjs/nodes/cost-bearing-node-types.js +43 -0
- package/dist/cjs/nodes/cost-bearing-node-types.js.map +1 -0
- package/dist/cjs/nodes/data/data-select.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-select.js +12 -2
- package/dist/cjs/nodes/data/data-select.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.js +15 -11
- package/dist/cjs/nodes/email/email-mailersend.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.js +15 -15
- package/dist/cjs/nodes/email/email-mailgun.js.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.js +15 -15
- package/dist/cjs/nodes/email/email-postmark.js.map +1 -1
- package/dist/cjs/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-resend.js +15 -15
- package/dist/cjs/nodes/email/email-resend.js.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.js +15 -15
- package/dist/cjs/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/cjs/nodes/email/html-escape-code.d.ts +3 -0
- package/dist/cjs/nodes/email/html-escape-code.d.ts.map +1 -0
- package/dist/cjs/nodes/email/html-escape-code.js +23 -0
- package/dist/cjs/nodes/email/html-escape-code.js.map +1 -0
- package/dist/cjs/nodes/email/message-trust.d.ts +40 -0
- package/dist/cjs/nodes/email/message-trust.d.ts.map +1 -0
- package/dist/cjs/nodes/email/message-trust.js +167 -0
- package/dist/cjs/nodes/email/message-trust.js.map +1 -0
- package/dist/cjs/nodes/email/outbound-message-guard.d.ts +113 -0
- package/dist/cjs/nodes/email/outbound-message-guard.d.ts.map +1 -0
- package/dist/cjs/nodes/email/outbound-message-guard.js +460 -0
- package/dist/cjs/nodes/email/outbound-message-guard.js.map +1 -0
- package/dist/cjs/nodes/email/trusted-html-code.d.ts +22 -0
- package/dist/cjs/nodes/email/trusted-html-code.d.ts.map +1 -0
- package/dist/cjs/nodes/email/trusted-html-code.js +52 -0
- package/dist/cjs/nodes/email/trusted-html-code.js.map +1 -0
- package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.js +44 -7
- package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
- package/dist/cjs/nodes/general/general-http-request.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-http-request.js +431 -45
- package/dist/cjs/nodes/general/general-http-request.js.map +1 -1
- package/dist/cjs/nodes/general/general-rate-limiter.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-rate-limiter.js +46 -78
- package/dist/cjs/nodes/general/general-rate-limiter.js.map +1 -1
- package/dist/cjs/nodes/general/general-wait.d.ts +3 -0
- package/dist/cjs/nodes/general/general-wait.d.ts.map +1 -0
- package/dist/cjs/nodes/general/general-wait.js +81 -0
- package/dist/cjs/nodes/general/general-wait.js.map +1 -0
- package/dist/cjs/nodes/general/visitor-request.d.ts +44 -0
- package/dist/cjs/nodes/general/visitor-request.d.ts.map +1 -0
- package/dist/cjs/nodes/general/visitor-request.js +72 -0
- package/dist/cjs/nodes/general/visitor-request.js.map +1 -0
- package/dist/cjs/nodes/index.d.ts.map +1 -1
- package/dist/cjs/nodes/index.js +7 -1
- package/dist/cjs/nodes/index.js.map +1 -1
- package/dist/cjs/nodes/integrations/integration-slack.d.ts.map +1 -1
- package/dist/cjs/nodes/integrations/integration-slack.js +17 -6
- package/dist/cjs/nodes/integrations/integration-slack.js.map +1 -1
- package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts +3 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.js +41 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.js.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.js +69 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.js.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js +42 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
- package/dist/cjs/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-join-channel.js +5 -4
- package/dist/cjs/nodes/realtime/realtime-join-channel.js.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.js +11 -2
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.js.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.js +11 -2
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-infobip.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-infobip.js +11 -8
- package/dist/cjs/nodes/sms/sms-infobip.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-smsapi.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-smsapi.js +11 -8
- package/dist/cjs/nodes/sms/sms-smsapi.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-textmagic.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-textmagic.js +11 -8
- package/dist/cjs/nodes/sms/sms-textmagic.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-twilio.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-twilio.js +12 -10
- package/dist/cjs/nodes/sms/sms-twilio.js.map +1 -1
- package/dist/cjs/nodes/types.d.ts +8 -1
- package/dist/cjs/nodes/types.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js +29 -10
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/cjs/page-access-guard-generator.d.ts +23 -0
- package/dist/cjs/page-access-guard-generator.d.ts.map +1 -0
- package/dist/cjs/page-access-guard-generator.js +135 -0
- package/dist/cjs/page-access-guard-generator.js.map +1 -0
- package/dist/cjs/password-reset-route-generator.d.ts +119 -0
- package/dist/cjs/password-reset-route-generator.d.ts.map +1 -0
- package/dist/cjs/password-reset-route-generator.js +460 -0
- package/dist/cjs/password-reset-route-generator.js.map +1 -0
- package/dist/cjs/payments/payment-core-code.d.ts.map +1 -1
- package/dist/cjs/payments/payment-core-code.js +12 -7
- package/dist/cjs/payments/payment-core-code.js.map +1 -1
- package/dist/cjs/project-code-scanner.d.ts +11 -0
- package/dist/cjs/project-code-scanner.d.ts.map +1 -0
- package/dist/cjs/project-code-scanner.js +80 -0
- package/dist/cjs/project-code-scanner.js.map +1 -0
- package/dist/cjs/public-step-guards.d.ts +122 -0
- package/dist/cjs/public-step-guards.d.ts.map +1 -0
- package/dist/cjs/public-step-guards.js +288 -0
- package/dist/cjs/public-step-guards.js.map +1 -0
- package/dist/cjs/publish-refusals.d.ts +66 -0
- package/dist/cjs/publish-refusals.d.ts.map +1 -0
- package/dist/cjs/publish-refusals.js +278 -0
- package/dist/cjs/publish-refusals.js.map +1 -0
- package/dist/cjs/realtime-generator.d.ts +63 -1
- package/dist/cjs/realtime-generator.d.ts.map +1 -1
- package/dist/cjs/realtime-generator.js +404 -230
- package/dist/cjs/realtime-generator.js.map +1 -1
- package/dist/cjs/runtime-storage-generator.d.ts +32 -1
- package/dist/cjs/runtime-storage-generator.d.ts.map +1 -1
- package/dist/cjs/runtime-storage-generator.js +265 -12
- package/dist/cjs/runtime-storage-generator.js.map +1 -1
- package/dist/cjs/security-runtime/index.d.ts +14 -0
- package/dist/cjs/security-runtime/index.d.ts.map +1 -0
- package/dist/cjs/security-runtime/index.js +48 -0
- package/dist/cjs/security-runtime/index.js.map +1 -0
- package/dist/cjs/security-runtime/security-runtime-code.d.ts +53 -0
- package/dist/cjs/security-runtime/security-runtime-code.d.ts.map +1 -0
- package/dist/cjs/security-runtime/security-runtime-code.js +580 -0
- package/dist/cjs/security-runtime/security-runtime-code.js.map +1 -0
- package/dist/cjs/security-scanner.d.ts +72 -3
- package/dist/cjs/security-scanner.d.ts.map +1 -1
- package/dist/cjs/security-scanner.js +220 -8
- package/dist/cjs/security-scanner.js.map +1 -1
- package/dist/cjs/segment-splitter.d.ts.map +1 -1
- package/dist/cjs/segment-splitter.js +10 -2
- package/dist/cjs/segment-splitter.js.map +1 -1
- package/dist/cjs/segment-trust.d.ts +36 -0
- package/dist/cjs/segment-trust.d.ts.map +1 -1
- package/dist/cjs/segment-trust.js +147 -3
- package/dist/cjs/segment-trust.js.map +1 -1
- package/dist/cjs/self-call-headers.d.ts +31 -0
- package/dist/cjs/self-call-headers.d.ts.map +1 -0
- package/dist/cjs/self-call-headers.js +48 -0
- package/dist/cjs/self-call-headers.js.map +1 -0
- package/dist/cjs/sent-email-log/index.d.ts +7 -0
- package/dist/cjs/sent-email-log/index.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/index.js +17 -1
- package/dist/cjs/sent-email-log/index.js.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts +7 -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 +17 -3
- package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/cjs/server-custom-node-call.d.ts +79 -0
- package/dist/cjs/server-custom-node-call.d.ts.map +1 -0
- package/dist/cjs/server-custom-node-call.js +285 -0
- package/dist/cjs/server-custom-node-call.js.map +1 -0
- package/dist/cjs/server-runtime-code.d.ts +39 -12
- package/dist/cjs/server-runtime-code.d.ts.map +1 -1
- package/dist/cjs/server-runtime-code.js +484 -41
- package/dist/cjs/server-runtime-code.js.map +1 -1
- package/dist/cjs/session-cookie-resolver.d.ts +3 -1
- package/dist/cjs/session-cookie-resolver.d.ts.map +1 -1
- package/dist/cjs/session-revocation-generator.d.ts +39 -0
- package/dist/cjs/session-revocation-generator.d.ts.map +1 -0
- package/dist/cjs/session-revocation-generator.js +177 -0
- package/dist/cjs/session-revocation-generator.js.map +1 -0
- package/dist/cjs/slack-message-values.d.ts +6 -0
- package/dist/cjs/slack-message-values.d.ts.map +1 -0
- package/dist/cjs/slack-message-values.js +73 -0
- package/dist/cjs/slack-message-values.js.map +1 -0
- package/dist/cjs/transactional-email-code.d.ts +11 -0
- package/dist/cjs/transactional-email-code.d.ts.map +1 -1
- package/dist/cjs/transactional-email-code.js +29 -5
- package/dist/cjs/transactional-email-code.js.map +1 -1
- package/dist/cjs/trigger-generator.d.ts +2 -0
- package/dist/cjs/trigger-generator.d.ts.map +1 -1
- package/dist/cjs/trigger-generator.js +17 -4
- package/dist/cjs/trigger-generator.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/visitor-step-limits.d.ts +66 -0
- package/dist/cjs/visitor-step-limits.d.ts.map +1 -0
- package/dist/cjs/visitor-step-limits.js +187 -0
- package/dist/cjs/visitor-step-limits.js.map +1 -0
- package/dist/cjs/webhook-generator.d.ts.map +1 -1
- package/dist/cjs/webhook-generator.js +93 -15
- package/dist/cjs/webhook-generator.js.map +1 -1
- package/dist/cjs/webhook-signature-verification.d.ts.map +1 -1
- package/dist/cjs/webhook-signature-verification.js +13 -3
- package/dist/cjs/webhook-signature-verification.js.map +1 -1
- package/dist/cjs/workflow-auth-generator.d.ts +4 -1
- package/dist/cjs/workflow-auth-generator.d.ts.map +1 -1
- package/dist/cjs/workflow-auth-generator.js +8 -3
- package/dist/cjs/workflow-auth-generator.js.map +1 -1
- package/dist/cjs/workflow-component-plugin.js +11 -3
- package/dist/cjs/workflow-component-plugin.js.map +1 -1
- package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-project-plugin.js +302 -56
- package/dist/cjs/workflow-project-plugin.js.map +1 -1
- package/dist/cjs/workflow-scope.d.ts.map +1 -1
- package/dist/cjs/workflow-scope.js +5 -0
- package/dist/cjs/workflow-scope.js.map +1 -1
- package/dist/esm/account-delete-route-generator.d.ts +1 -0
- package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
- package/dist/esm/account-delete-route-generator.js +18 -3
- package/dist/esm/account-delete-route-generator.js.map +1 -1
- package/dist/esm/api-route-generator.d.ts +52 -3
- package/dist/esm/api-route-generator.d.ts.map +1 -1
- package/dist/esm/api-route-generator.js +595 -142
- package/dist/esm/api-route-generator.js.map +1 -1
- package/dist/esm/auth-generator.d.ts +126 -3
- package/dist/esm/auth-generator.d.ts.map +1 -1
- package/dist/esm/auth-generator.js +1350 -140
- package/dist/esm/auth-generator.js.map +1 -1
- package/dist/esm/automations/activity-kicks.d.ts +12 -0
- package/dist/esm/automations/activity-kicks.d.ts.map +1 -0
- package/dist/esm/automations/activity-kicks.js +118 -0
- package/dist/esm/automations/activity-kicks.js.map +1 -0
- package/dist/esm/automations/app-events-source.d.ts +33 -0
- package/dist/esm/automations/app-events-source.d.ts.map +1 -0
- package/dist/esm/automations/app-events-source.js +104 -0
- package/dist/esm/automations/app-events-source.js.map +1 -0
- package/dist/esm/automations/automations-project-plugin.d.ts +21 -0
- package/dist/esm/automations/automations-project-plugin.d.ts.map +1 -0
- package/dist/esm/automations/automations-project-plugin.js +98 -0
- package/dist/esm/automations/automations-project-plugin.js.map +1 -0
- package/dist/esm/automations/automations-scope.d.ts +104 -0
- package/dist/esm/automations/automations-scope.d.ts.map +1 -0
- package/dist/esm/automations/automations-scope.js +165 -0
- package/dist/esm/automations/automations-scope.js.map +1 -0
- package/dist/esm/automations/dispatcher-source.d.ts +72 -0
- package/dist/esm/automations/dispatcher-source.d.ts.map +1 -0
- package/dist/esm/automations/dispatcher-source.js +999 -0
- package/dist/esm/automations/dispatcher-source.js.map +1 -0
- package/dist/esm/automations/event-bus-source.d.ts +44 -0
- package/dist/esm/automations/event-bus-source.d.ts.map +1 -0
- package/dist/esm/automations/event-bus-source.js +421 -0
- package/dist/esm/automations/event-bus-source.js.map +1 -0
- package/dist/esm/automations/handler-module-generator.d.ts +25 -0
- package/dist/esm/automations/handler-module-generator.d.ts.map +1 -0
- package/dist/esm/automations/handler-module-generator.js +71 -0
- package/dist/esm/automations/handler-module-generator.js.map +1 -0
- package/dist/esm/automations/hydrators-source.d.ts +33 -0
- package/dist/esm/automations/hydrators-source.d.ts.map +1 -0
- package/dist/esm/automations/hydrators-source.js +567 -0
- package/dist/esm/automations/hydrators-source.js.map +1 -0
- package/dist/esm/booking-calendar-feed-route-generator.d.ts.map +1 -1
- package/dist/esm/booking-calendar-feed-route-generator.js +8 -0
- package/dist/esm/booking-calendar-feed-route-generator.js.map +1 -1
- package/dist/esm/configured-nextauth-url.d.ts +17 -0
- package/dist/esm/configured-nextauth-url.d.ts.map +1 -0
- package/dist/esm/configured-nextauth-url.js +17 -0
- package/dist/esm/configured-nextauth-url.js.map +1 -0
- package/dist/esm/cron-request-verification.d.ts +22 -1
- package/dist/esm/cron-request-verification.d.ts.map +1 -1
- package/dist/esm/cron-request-verification.js +48 -5
- package/dist/esm/cron-request-verification.js.map +1 -1
- package/dist/esm/data-api-route-generator.d.ts +19 -0
- package/dist/esm/data-api-route-generator.d.ts.map +1 -1
- package/dist/esm/data-api-route-generator.js +710 -43
- package/dist/esm/data-api-route-generator.js.map +1 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.d.ts +3 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.js +43 -4
- package/dist/esm/ecommerce/parameterized-stock-chain.js.map +1 -1
- package/dist/esm/ecommerce/place-order-guards.d.ts +126 -0
- package/dist/esm/ecommerce/place-order-guards.d.ts.map +1 -0
- package/dist/esm/ecommerce/place-order-guards.js +655 -0
- package/dist/esm/ecommerce/place-order-guards.js.map +1 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts +2 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/esm/ecommerce-customhandler-rewriter.js +38 -2
- package/dist/esm/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +368 -60
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/graph-utils.d.ts +9 -0
- package/dist/esm/graph-utils.d.ts.map +1 -1
- package/dist/esm/graph-utils.js +30 -0
- package/dist/esm/graph-utils.js.map +1 -1
- package/dist/esm/index.d.ts +20 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +27 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/invoice/api-routes-code.d.ts +9 -3
- package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/esm/invoice/api-routes-code.js +9 -7
- package/dist/esm/invoice/api-routes-code.js.map +1 -1
- package/dist/esm/invoice/index.d.ts.map +1 -1
- package/dist/esm/invoice/index.js +12 -7
- package/dist/esm/invoice/index.js.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.js +8 -3
- package/dist/esm/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/esm/invoice/pdf-generator-code.d.ts.map +1 -1
- package/dist/esm/invoice/pdf-generator-code.js +2 -1
- package/dist/esm/invoice/pdf-generator-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 +15 -7
- package/dist/esm/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/esm/newsletter/admin-route-code.d.ts +60 -0
- package/dist/esm/newsletter/admin-route-code.d.ts.map +1 -0
- package/dist/esm/newsletter/admin-route-code.js +295 -0
- package/dist/esm/newsletter/admin-route-code.js.map +1 -0
- package/dist/esm/newsletter/helper-code.d.ts +109 -0
- package/dist/esm/newsletter/helper-code.d.ts.map +1 -0
- package/dist/esm/newsletter/helper-code.js +656 -0
- package/dist/esm/newsletter/helper-code.js.map +1 -0
- package/dist/esm/newsletter/newsletter-scope.d.ts +65 -0
- package/dist/esm/newsletter/newsletter-scope.d.ts.map +1 -0
- package/dist/esm/newsletter/newsletter-scope.js +97 -0
- package/dist/esm/newsletter/newsletter-scope.js.map +1 -0
- package/dist/esm/newsletter/project-plugin.d.ts +18 -0
- package/dist/esm/newsletter/project-plugin.d.ts.map +1 -0
- package/dist/esm/newsletter/project-plugin.js +93 -0
- package/dist/esm/newsletter/project-plugin.js.map +1 -0
- package/dist/esm/newsletter/routes-code.d.ts +6 -0
- package/dist/esm/newsletter/routes-code.d.ts.map +1 -0
- package/dist/esm/newsletter/routes-code.js +175 -0
- package/dist/esm/newsletter/routes-code.js.map +1 -0
- package/dist/esm/nodes/account/account-compare-passwords.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-compare-passwords.js +16 -6
- package/dist/esm/nodes/account/account-compare-passwords.js.map +1 -1
- package/dist/esm/nodes/account/account-delete-current.js +1 -1
- package/dist/esm/nodes/account/account-get-current.js +1 -1
- package/dist/esm/nodes/account/account-hash-password.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-hash-password.js +15 -3
- package/dist/esm/nodes/account/account-hash-password.js.map +1 -1
- package/dist/esm/nodes/account/account-login.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-login.js +23 -6
- package/dist/esm/nodes/account/account-login.js.map +1 -1
- package/dist/esm/nodes/account/account-logout.js +1 -1
- package/dist/esm/nodes/account/account-refresh-session.js +1 -1
- package/dist/esm/nodes/account/account-request-password-reset.d.ts +3 -0
- package/dist/esm/nodes/account/account-request-password-reset.d.ts.map +1 -0
- package/dist/esm/nodes/account/account-request-password-reset.js +43 -0
- package/dist/esm/nodes/account/account-request-password-reset.js.map +1 -0
- package/dist/esm/nodes/account/account-reset-password.d.ts +3 -0
- package/dist/esm/nodes/account/account-reset-password.d.ts.map +1 -0
- package/dist/esm/nodes/account/account-reset-password.js +41 -0
- package/dist/esm/nodes/account/account-reset-password.js.map +1 -0
- package/dist/esm/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-signup.js +82 -19
- package/dist/esm/nodes/account/account-signup.js.map +1 -1
- package/dist/esm/nodes/account/account-social-login.js +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.js +20 -5
- package/dist/esm/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.js +20 -5
- package/dist/esm/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js +10 -2
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
- package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts +31 -2
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.js +124 -10
- package/dist/esm/nodes/ai/ai-provider-utils.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 -2
- package/dist/esm/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js +20 -5
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.js +20 -5
- package/dist/esm/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.js +20 -5
- package/dist/esm/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.js +20 -5
- package/dist/esm/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts +3 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.js +107 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.js.map +1 -0
- package/dist/esm/nodes/cart/cart-price-order.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-price-order.js +161 -2
- package/dist/esm/nodes/cart/cart-price-order.js.map +1 -1
- package/dist/esm/nodes/cost-bearing-node-types.d.ts +4 -0
- package/dist/esm/nodes/cost-bearing-node-types.d.ts.map +1 -0
- package/dist/esm/nodes/cost-bearing-node-types.js +39 -0
- package/dist/esm/nodes/cost-bearing-node-types.js.map +1 -0
- package/dist/esm/nodes/data/data-select.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-select.js +12 -2
- package/dist/esm/nodes/data/data-select.js.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.js +15 -11
- package/dist/esm/nodes/email/email-mailersend.js.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.js +15 -15
- package/dist/esm/nodes/email/email-mailgun.js.map +1 -1
- package/dist/esm/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-postmark.js +15 -15
- package/dist/esm/nodes/email/email-postmark.js.map +1 -1
- package/dist/esm/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-resend.js +15 -15
- package/dist/esm/nodes/email/email-resend.js.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.js +15 -15
- package/dist/esm/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/esm/nodes/email/html-escape-code.d.ts +3 -0
- package/dist/esm/nodes/email/html-escape-code.d.ts.map +1 -0
- package/dist/esm/nodes/email/html-escape-code.js +18 -0
- package/dist/esm/nodes/email/html-escape-code.js.map +1 -0
- package/dist/esm/nodes/email/message-trust.d.ts +40 -0
- package/dist/esm/nodes/email/message-trust.d.ts.map +1 -0
- package/dist/esm/nodes/email/message-trust.js +161 -0
- package/dist/esm/nodes/email/message-trust.js.map +1 -0
- package/dist/esm/nodes/email/outbound-message-guard.d.ts +113 -0
- package/dist/esm/nodes/email/outbound-message-guard.d.ts.map +1 -0
- package/dist/esm/nodes/email/outbound-message-guard.js +452 -0
- package/dist/esm/nodes/email/outbound-message-guard.js.map +1 -0
- package/dist/esm/nodes/email/trusted-html-code.d.ts +22 -0
- package/dist/esm/nodes/email/trusted-html-code.d.ts.map +1 -0
- package/dist/esm/nodes/email/trusted-html-code.js +49 -0
- package/dist/esm/nodes/email/trusted-html-code.js.map +1 -0
- package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.js +44 -7
- package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
- package/dist/esm/nodes/general/general-http-request.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-http-request.js +431 -45
- package/dist/esm/nodes/general/general-http-request.js.map +1 -1
- package/dist/esm/nodes/general/general-rate-limiter.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-rate-limiter.js +46 -78
- package/dist/esm/nodes/general/general-rate-limiter.js.map +1 -1
- package/dist/esm/nodes/general/general-wait.d.ts +3 -0
- package/dist/esm/nodes/general/general-wait.d.ts.map +1 -0
- package/dist/esm/nodes/general/general-wait.js +78 -0
- package/dist/esm/nodes/general/general-wait.js.map +1 -0
- package/dist/esm/nodes/general/visitor-request.d.ts +44 -0
- package/dist/esm/nodes/general/visitor-request.d.ts.map +1 -0
- package/dist/esm/nodes/general/visitor-request.js +65 -0
- package/dist/esm/nodes/general/visitor-request.js.map +1 -0
- package/dist/esm/nodes/index.d.ts.map +1 -1
- package/dist/esm/nodes/index.js +7 -1
- package/dist/esm/nodes/index.js.map +1 -1
- package/dist/esm/nodes/integrations/integration-slack.d.ts.map +1 -1
- package/dist/esm/nodes/integrations/integration-slack.js +17 -6
- package/dist/esm/nodes/integrations/integration-slack.js.map +1 -1
- package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts +3 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.js +38 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.js.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.js +66 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.js.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js +39 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
- package/dist/esm/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-join-channel.js +5 -4
- package/dist/esm/nodes/realtime/realtime-join-channel.js.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-event.js +11 -2
- package/dist/esm/nodes/realtime/realtime-send-channel-event.js.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-message.js +11 -2
- package/dist/esm/nodes/realtime/realtime-send-channel-message.js.map +1 -1
- package/dist/esm/nodes/sms/sms-infobip.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-infobip.js +11 -8
- package/dist/esm/nodes/sms/sms-infobip.js.map +1 -1
- package/dist/esm/nodes/sms/sms-smsapi.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-smsapi.js +11 -8
- package/dist/esm/nodes/sms/sms-smsapi.js.map +1 -1
- package/dist/esm/nodes/sms/sms-textmagic.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-textmagic.js +11 -8
- package/dist/esm/nodes/sms/sms-textmagic.js.map +1 -1
- package/dist/esm/nodes/sms/sms-twilio.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-twilio.js +12 -10
- package/dist/esm/nodes/sms/sms-twilio.js.map +1 -1
- package/dist/esm/nodes/types.d.ts +8 -1
- package/dist/esm/nodes/types.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.js +29 -10
- package/dist/esm/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/esm/page-access-guard-generator.d.ts +23 -0
- package/dist/esm/page-access-guard-generator.d.ts.map +1 -0
- package/dist/esm/page-access-guard-generator.js +131 -0
- package/dist/esm/page-access-guard-generator.js.map +1 -0
- package/dist/esm/password-reset-route-generator.d.ts +119 -0
- package/dist/esm/password-reset-route-generator.d.ts.map +1 -0
- package/dist/esm/password-reset-route-generator.js +448 -0
- package/dist/esm/password-reset-route-generator.js.map +1 -0
- package/dist/esm/payments/payment-core-code.d.ts.map +1 -1
- package/dist/esm/payments/payment-core-code.js +12 -7
- package/dist/esm/payments/payment-core-code.js.map +1 -1
- package/dist/esm/project-code-scanner.d.ts +11 -0
- package/dist/esm/project-code-scanner.d.ts.map +1 -0
- package/dist/esm/project-code-scanner.js +75 -0
- package/dist/esm/project-code-scanner.js.map +1 -0
- package/dist/esm/public-step-guards.d.ts +122 -0
- package/dist/esm/public-step-guards.d.ts.map +1 -0
- package/dist/esm/public-step-guards.js +280 -0
- package/dist/esm/public-step-guards.js.map +1 -0
- package/dist/esm/publish-refusals.d.ts +66 -0
- package/dist/esm/publish-refusals.d.ts.map +1 -0
- package/dist/esm/publish-refusals.js +271 -0
- package/dist/esm/publish-refusals.js.map +1 -0
- package/dist/esm/realtime-generator.d.ts +63 -1
- package/dist/esm/realtime-generator.d.ts.map +1 -1
- package/dist/esm/realtime-generator.js +401 -229
- package/dist/esm/realtime-generator.js.map +1 -1
- package/dist/esm/runtime-storage-generator.d.ts +32 -1
- package/dist/esm/runtime-storage-generator.d.ts.map +1 -1
- package/dist/esm/runtime-storage-generator.js +264 -11
- package/dist/esm/runtime-storage-generator.js.map +1 -1
- package/dist/esm/security-runtime/index.d.ts +14 -0
- package/dist/esm/security-runtime/index.d.ts.map +1 -0
- package/dist/esm/security-runtime/index.js +37 -0
- package/dist/esm/security-runtime/index.js.map +1 -0
- package/dist/esm/security-runtime/security-runtime-code.d.ts +53 -0
- package/dist/esm/security-runtime/security-runtime-code.d.ts.map +1 -0
- package/dist/esm/security-runtime/security-runtime-code.js +575 -0
- package/dist/esm/security-runtime/security-runtime-code.js.map +1 -0
- package/dist/esm/security-scanner.d.ts +72 -3
- package/dist/esm/security-scanner.d.ts.map +1 -1
- package/dist/esm/security-scanner.js +217 -8
- package/dist/esm/security-scanner.js.map +1 -1
- package/dist/esm/segment-splitter.d.ts.map +1 -1
- package/dist/esm/segment-splitter.js +10 -2
- package/dist/esm/segment-splitter.js.map +1 -1
- package/dist/esm/segment-trust.d.ts +36 -0
- package/dist/esm/segment-trust.d.ts.map +1 -1
- package/dist/esm/segment-trust.js +146 -2
- package/dist/esm/segment-trust.js.map +1 -1
- package/dist/esm/self-call-headers.d.ts +31 -0
- package/dist/esm/self-call-headers.d.ts.map +1 -0
- package/dist/esm/self-call-headers.js +43 -0
- package/dist/esm/self-call-headers.js.map +1 -0
- package/dist/esm/sent-email-log/index.d.ts +7 -0
- package/dist/esm/sent-email-log/index.d.ts.map +1 -1
- package/dist/esm/sent-email-log/index.js +15 -0
- package/dist/esm/sent-email-log/index.js.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts +7 -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 +17 -3
- package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/esm/server-custom-node-call.d.ts +79 -0
- package/dist/esm/server-custom-node-call.d.ts.map +1 -0
- package/dist/esm/server-custom-node-call.js +278 -0
- package/dist/esm/server-custom-node-call.js.map +1 -0
- package/dist/esm/server-runtime-code.d.ts +39 -12
- package/dist/esm/server-runtime-code.d.ts.map +1 -1
- package/dist/esm/server-runtime-code.js +483 -40
- package/dist/esm/server-runtime-code.js.map +1 -1
- package/dist/esm/session-cookie-resolver.d.ts +3 -1
- package/dist/esm/session-cookie-resolver.d.ts.map +1 -1
- package/dist/esm/session-revocation-generator.d.ts +39 -0
- package/dist/esm/session-revocation-generator.d.ts.map +1 -0
- package/dist/esm/session-revocation-generator.js +172 -0
- package/dist/esm/session-revocation-generator.js.map +1 -0
- package/dist/esm/slack-message-values.d.ts +6 -0
- package/dist/esm/slack-message-values.d.ts.map +1 -0
- package/dist/esm/slack-message-values.js +68 -0
- package/dist/esm/slack-message-values.js.map +1 -0
- package/dist/esm/transactional-email-code.d.ts +11 -0
- package/dist/esm/transactional-email-code.d.ts.map +1 -1
- package/dist/esm/transactional-email-code.js +28 -4
- package/dist/esm/transactional-email-code.js.map +1 -1
- package/dist/esm/trigger-generator.d.ts +2 -0
- package/dist/esm/trigger-generator.d.ts.map +1 -1
- package/dist/esm/trigger-generator.js +15 -3
- package/dist/esm/trigger-generator.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/visitor-step-limits.d.ts +66 -0
- package/dist/esm/visitor-step-limits.d.ts.map +1 -0
- package/dist/esm/visitor-step-limits.js +181 -0
- package/dist/esm/visitor-step-limits.js.map +1 -0
- package/dist/esm/webhook-generator.d.ts.map +1 -1
- package/dist/esm/webhook-generator.js +93 -15
- package/dist/esm/webhook-generator.js.map +1 -1
- package/dist/esm/webhook-signature-verification.d.ts.map +1 -1
- package/dist/esm/webhook-signature-verification.js +13 -3
- package/dist/esm/webhook-signature-verification.js.map +1 -1
- package/dist/esm/workflow-auth-generator.d.ts +4 -1
- package/dist/esm/workflow-auth-generator.d.ts.map +1 -1
- package/dist/esm/workflow-auth-generator.js +8 -3
- package/dist/esm/workflow-auth-generator.js.map +1 -1
- package/dist/esm/workflow-component-plugin.js +12 -4
- package/dist/esm/workflow-component-plugin.js.map +1 -1
- package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-project-plugin.js +306 -60
- package/dist/esm/workflow-project-plugin.js.map +1 -1
- package/dist/esm/workflow-scope.d.ts.map +1 -1
- package/dist/esm/workflow-scope.js +5 -0
- package/dist/esm/workflow-scope.js.map +1 -1
- package/package.json +4 -4
- package/src/account-delete-route-generator.ts +28 -4
- package/src/api-route-generator.ts +712 -134
- package/src/auth-generator.ts +1471 -142
- package/src/automations/activity-kicks.ts +139 -0
- package/src/automations/app-events-source.ts +117 -0
- package/src/automations/automations-project-plugin.ts +202 -0
- package/src/automations/automations-scope.ts +196 -0
- package/src/automations/dispatcher-source.ts +1072 -0
- package/src/automations/event-bus-source.ts +428 -0
- package/src/automations/handler-module-generator.ts +107 -0
- package/src/automations/hydrators-source.ts +647 -0
- package/src/booking-calendar-feed-route-generator.ts +8 -0
- package/src/configured-nextauth-url.ts +17 -0
- package/src/cron-request-verification.ts +55 -5
- package/src/data-api-route-generator.ts +780 -43
- package/src/ecommerce/parameterized-stock-chain.ts +52 -5
- package/src/ecommerce/place-order-guards.ts +785 -0
- package/src/ecommerce-customhandler-rewriter.ts +55 -2
- package/src/executor-generator.ts +372 -60
- package/src/graph-utils.ts +33 -0
- package/src/index.ts +70 -0
- package/src/invoice/api-routes-code.ts +20 -7
- package/src/invoice/index.ts +11 -6
- package/src/invoice/invoice-assembly-code.ts +8 -3
- package/src/invoice/pdf-generator-code.ts +2 -1
- package/src/invoice/pdf-service-client-code.ts +15 -7
- package/src/newsletter/admin-route-code.ts +319 -0
- package/src/newsletter/helper-code.ts +748 -0
- package/src/newsletter/newsletter-scope.ts +116 -0
- package/src/newsletter/project-plugin.ts +119 -0
- package/src/newsletter/routes-code.ts +186 -0
- package/src/nodes/account/account-compare-passwords.ts +17 -6
- package/src/nodes/account/account-delete-current.ts +1 -1
- package/src/nodes/account/account-get-current.ts +1 -1
- package/src/nodes/account/account-hash-password.ts +19 -3
- package/src/nodes/account/account-login.ts +24 -7
- package/src/nodes/account/account-logout.ts +1 -1
- package/src/nodes/account/account-refresh-session.ts +1 -1
- package/src/nodes/account/account-request-password-reset.ts +47 -0
- package/src/nodes/account/account-reset-password.ts +45 -0
- package/src/nodes/account/account-signup.ts +86 -20
- package/src/nodes/account/account-social-login.ts +1 -1
- package/src/nodes/ai/ai-custom-prompt.ts +25 -6
- package/src/nodes/ai/ai-detect-language.ts +25 -6
- package/src/nodes/ai/ai-generate-text-embedding.ts +16 -3
- package/src/nodes/ai/ai-provider-utils-sources.generated.ts +2 -2
- package/src/nodes/ai/ai-provider-utils.ts +135 -10
- package/src/nodes/ai/ai-select-database-data.ts +8 -3
- package/src/nodes/ai/ai-sentiment-analysis.ts +25 -6
- package/src/nodes/ai/ai-summarization.ts +25 -6
- package/src/nodes/ai/ai-text-classifier.ts +25 -6
- package/src/nodes/ai/ai-text-transform.ts +25 -6
- package/src/nodes/analytics/analytics-track-outcome.ts +111 -0
- package/src/nodes/cart/cart-price-order.ts +200 -2
- package/src/nodes/cost-bearing-node-types.ts +45 -0
- package/src/nodes/data/data-select.ts +11 -2
- package/src/nodes/email/email-mailersend.ts +16 -8
- package/src/nodes/email/email-mailgun.ts +17 -12
- package/src/nodes/email/email-postmark.ts +17 -12
- package/src/nodes/email/email-resend.ts +17 -12
- package/src/nodes/email/email-sendgrid.ts +17 -12
- package/src/nodes/email/html-escape-code.ts +21 -0
- package/src/nodes/email/message-trust.ts +198 -0
- package/src/nodes/email/outbound-message-guard.ts +572 -0
- package/src/nodes/email/trusted-html-code.ts +49 -0
- package/src/nodes/general/general-custom-js.ts +46 -7
- package/src/nodes/general/general-http-request.ts +449 -46
- package/src/nodes/general/general-rate-limiter.ts +54 -81
- package/src/nodes/general/general-wait.ts +80 -0
- package/src/nodes/general/visitor-request.ts +79 -0
- package/src/nodes/index.ts +12 -0
- package/src/nodes/integrations/integration-slack.ts +21 -6
- package/src/nodes/newsletter/newsletter-confirm.ts +44 -0
- package/src/nodes/newsletter/newsletter-subscribe.ts +78 -0
- package/src/nodes/newsletter/newsletter-unsubscribe.ts +43 -0
- package/src/nodes/realtime/realtime-join-channel.ts +5 -4
- package/src/nodes/realtime/realtime-send-channel-event.ts +13 -2
- package/src/nodes/realtime/realtime-send-channel-message.ts +13 -2
- package/src/nodes/sms/sms-infobip.ts +14 -4
- package/src/nodes/sms/sms-smsapi.ts +14 -4
- package/src/nodes/sms/sms-textmagic.ts +14 -4
- package/src/nodes/sms/sms-twilio.ts +14 -4
- package/src/nodes/types.ts +9 -1
- package/src/nodes/utility/utility-similarity-scoring.ts +33 -12
- package/src/page-access-guard-generator.ts +154 -0
- package/src/password-reset-route-generator.ts +531 -0
- package/src/payments/payment-core-code.ts +12 -7
- package/src/project-code-scanner.ts +98 -0
- package/src/public-step-guards.ts +448 -0
- package/src/publish-refusals.ts +459 -0
- package/src/realtime-generator.ts +457 -234
- package/src/runtime-storage-generator.ts +270 -11
- package/src/security-runtime/index.ts +53 -0
- package/src/security-runtime/security-runtime-code.ts +579 -0
- package/src/security-scanner.ts +253 -10
- package/src/segment-splitter.ts +10 -2
- package/src/segment-trust.ts +205 -2
- package/src/self-call-headers.ts +46 -0
- package/src/sent-email-log/index.ts +16 -0
- package/src/sent-email-log/sent-email-log-code.ts +30 -4
- package/src/server-custom-node-call.ts +331 -0
- package/src/server-runtime-code.ts +488 -40
- package/src/session-revocation-generator.ts +177 -0
- package/src/slack-message-values.ts +84 -0
- package/src/transactional-email-code.ts +30 -4
- package/src/trigger-generator.ts +19 -3
- package/src/visitor-step-limits.ts +228 -0
- package/src/webhook-generator.ts +94 -14
- package/src/webhook-signature-verification.ts +13 -3
- package/src/workflow-auth-generator.ts +9 -4
- package/src/workflow-component-plugin.ts +14 -4
- package/src/workflow-project-plugin.ts +374 -61
- package/src/workflow-scope.ts +6 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { generateServerSegmentAPIRoute } from '../src'
|
|
2
|
+
import { splitIntoSegments } from '../src/segment-splitter'
|
|
3
|
+
import { buildSegmentTrust } from '../src/segment-trust'
|
|
4
|
+
import type { WorkflowSegment } from '../src/types'
|
|
5
|
+
import { loadServerRuntime } from './_helpers/load-server-runtime'
|
|
6
|
+
|
|
7
|
+
// A run of server segments is ONE chain: every reply signs the results the
|
|
8
|
+
// caller may hand on, and a later call accepts a relayed result only with the
|
|
9
|
+
// very signature its link lists. A crafted client that calls a segment twice in
|
|
10
|
+
// one run (a cheap cart and a big one, a refused payment method and an
|
|
11
|
+
// accepted one) can continue either fork, never a mix of the two — which used
|
|
12
|
+
// to reach an underpriced or unpaid "settled" order (Task 4 review, X1).
|
|
13
|
+
|
|
14
|
+
type Context = Record<string, any>
|
|
15
|
+
|
|
16
|
+
const runtime = loadServerRuntime()
|
|
17
|
+
const savedSecret = process.env.NEXTAUTH_SECRET
|
|
18
|
+
beforeAll(() => {
|
|
19
|
+
process.env.NEXTAUTH_SECRET = 'step-chain-test-secret'
|
|
20
|
+
})
|
|
21
|
+
afterAll(() => {
|
|
22
|
+
if (savedSecret === undefined) {
|
|
23
|
+
delete process.env.NEXTAUTH_SECRET
|
|
24
|
+
} else {
|
|
25
|
+
process.env.NEXTAUTH_SECRET = savedSecret
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const script = (body: string) => `function customHandler(params) { ${body} }`
|
|
30
|
+
const server = (
|
|
31
|
+
id: string,
|
|
32
|
+
stepNumber: number,
|
|
33
|
+
body: string,
|
|
34
|
+
params?: Record<string, unknown>
|
|
35
|
+
) => ({
|
|
36
|
+
id,
|
|
37
|
+
type: 'general-custom-js',
|
|
38
|
+
label: id,
|
|
39
|
+
stepNumber,
|
|
40
|
+
config: { context: 'server', code: script(body), ...(params ? { params } : {}) },
|
|
41
|
+
})
|
|
42
|
+
const browser = (id: string, stepNumber: number) => ({
|
|
43
|
+
id,
|
|
44
|
+
type: 'state-update-local-state',
|
|
45
|
+
label: id,
|
|
46
|
+
stepNumber,
|
|
47
|
+
config: { property: id, value: true },
|
|
48
|
+
})
|
|
49
|
+
const ref = (nodeId: string, ...path: string[]) => ({
|
|
50
|
+
type: 'workflowContext',
|
|
51
|
+
nodeId,
|
|
52
|
+
path: [nodeId, ...path],
|
|
53
|
+
})
|
|
54
|
+
const named = 'var named = params[params.length - 1] || {};'
|
|
55
|
+
|
|
56
|
+
function bootWorkflow(id: string, nodes: any[]) {
|
|
57
|
+
const edges = nodes
|
|
58
|
+
.slice(1)
|
|
59
|
+
.map((node, i) => ({ id: `e${i}`, source: nodes[i].id, target: node.id }))
|
|
60
|
+
const workflow = { id, nodes, edges, trigger: { type: 'event-element-clicked' } } as any
|
|
61
|
+
const segments = splitIntoSegments(workflow)
|
|
62
|
+
const routes: Record<string, (context: Context) => Promise<{ status: number; body: any }>> = {}
|
|
63
|
+
for (const segment of segments.filter((s) => s.env === 'server') as WorkflowSegment[]) {
|
|
64
|
+
const source = generateServerSegmentAPIRoute(segment, id, undefined, {
|
|
65
|
+
trust: buildSegmentTrust(segment, { id, nodes, edges, segments }),
|
|
66
|
+
})
|
|
67
|
+
const routeModule: { exports: any } = { exports: {} }
|
|
68
|
+
const requireStub = (name: string) => (name.endsWith('server-runtime') ? runtime : {})
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
70
|
+
new Function('module', 'exports', 'require', source)(
|
|
71
|
+
routeModule,
|
|
72
|
+
routeModule.exports,
|
|
73
|
+
requireStub
|
|
74
|
+
)
|
|
75
|
+
routes[segment.nodes[0].id] = async (context: Context) => {
|
|
76
|
+
const reply = { status: 0, body: null as any }
|
|
77
|
+
const res = {
|
|
78
|
+
setHeader: (): undefined => undefined,
|
|
79
|
+
status(code: number) {
|
|
80
|
+
reply.status = code
|
|
81
|
+
return this
|
|
82
|
+
},
|
|
83
|
+
json(payload: unknown) {
|
|
84
|
+
reply.body = payload
|
|
85
|
+
return this
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
await routeModule.exports(
|
|
89
|
+
{
|
|
90
|
+
method: 'POST',
|
|
91
|
+
body: { context: JSON.parse(JSON.stringify(context)) },
|
|
92
|
+
headers: { host: 'shop.test' },
|
|
93
|
+
},
|
|
94
|
+
res
|
|
95
|
+
)
|
|
96
|
+
return reply
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return routes
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const merge = (context: Context, results: Context = {}): Context => ({ ...context, ...results })
|
|
103
|
+
|
|
104
|
+
describe('the reviewer probe: one segment called twice in a run', () => {
|
|
105
|
+
// open → (browser) → price → (browser) → use
|
|
106
|
+
const routes = bootWorkflow('wf-mix', [
|
|
107
|
+
server('open', 1, 'return { opened: true }'),
|
|
108
|
+
browser('cart', 2),
|
|
109
|
+
server('price', 3, `${named} return { value: named.cart }`, { cart: ref('trigger', 'cart') }),
|
|
110
|
+
browser('gap', 4),
|
|
111
|
+
server('use', 5, `${named} return { used: named.value }`, { value: ref('price', 'value') }),
|
|
112
|
+
])
|
|
113
|
+
|
|
114
|
+
it('lets a later step continue one fork, never a mix of two', async () => {
|
|
115
|
+
const opened = merge({}, (await routes.open({})).body.results)
|
|
116
|
+
const cheap = merge(
|
|
117
|
+
merge(opened, { trigger: { cart: 'CHEAP' }, cart: {} }),
|
|
118
|
+
(await routes.price(merge(opened, { trigger: { cart: 'CHEAP' }, cart: {} }))).body.results
|
|
119
|
+
)
|
|
120
|
+
const big = merge(
|
|
121
|
+
merge(opened, { trigger: { cart: 'BIG' }, cart: {} }),
|
|
122
|
+
(await routes.price(merge(opened, { trigger: { cart: 'BIG' }, cart: {} }))).body.results
|
|
123
|
+
)
|
|
124
|
+
expect(cheap.__sigRun.id).toBe(big.__sigRun.id)
|
|
125
|
+
|
|
126
|
+
// The crafted client continues the CHEAP fork with the BIG result and its signature.
|
|
127
|
+
const crafted = {
|
|
128
|
+
...cheap,
|
|
129
|
+
gap: {},
|
|
130
|
+
price: big.price,
|
|
131
|
+
__sig: { ...cheap.__sig, price: big.__sig.price },
|
|
132
|
+
}
|
|
133
|
+
const mixed = await routes.use(crafted)
|
|
134
|
+
expect(mixed.status).toBe(200)
|
|
135
|
+
expect(mixed.body.results.use).toEqual({})
|
|
136
|
+
expect(JSON.stringify(mixed.body.results)).not.toContain('BIG')
|
|
137
|
+
|
|
138
|
+
// Each fork, continued whole, is a run of its own.
|
|
139
|
+
expect((await routes.use({ ...cheap, gap: {} })).body.results.use).toEqual({ used: 'CHEAP' })
|
|
140
|
+
expect((await routes.use({ ...big, gap: {} })).body.results.use).toEqual({ used: 'BIG' })
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
it('also refuses the BIG result presented under the CHEAP link with its own order', async () => {
|
|
144
|
+
const opened = merge({}, (await routes.open({})).body.results)
|
|
145
|
+
const ask = (cart: string) => merge(opened, { trigger: { cart }, cart: {} })
|
|
146
|
+
const cheap = merge(ask('CHEAP'), (await routes.price(ask('CHEAP'))).body.results)
|
|
147
|
+
const big = merge(ask('BIG'), (await routes.price(ask('BIG'))).body.results)
|
|
148
|
+
// BIG's link over CHEAP's value: the value no longer matches the listed signature.
|
|
149
|
+
const crafted = { ...cheap, gap: {}, __sigOrder: big.__sigOrder, __sig: big.__sig }
|
|
150
|
+
expect((await routes.use(crafted)).body.results.use).toEqual({})
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
describe('the checkout shape: pricing called twice', () => {
|
|
155
|
+
// price → (browser) → assemble → (browser) → settle. The assemble refuses an
|
|
156
|
+
// order without a priced result; settle writes the priced lines and settles
|
|
157
|
+
// what the assemble said needs no payment.
|
|
158
|
+
const routes = bootWorkflow('wf-checkout', [
|
|
159
|
+
server('form', 1, 'return { ok: true }'),
|
|
160
|
+
browser('method', 2),
|
|
161
|
+
server(
|
|
162
|
+
'price',
|
|
163
|
+
3,
|
|
164
|
+
`${named} return named.method === 'stripe' ? { priced: true, total: 90, lines: ['TV'] } : { priced: false, total: 0, lines: [] }`,
|
|
165
|
+
{ method: ref('trigger', 'method') }
|
|
166
|
+
),
|
|
167
|
+
browser('review', 4),
|
|
168
|
+
server(
|
|
169
|
+
'assemble',
|
|
170
|
+
5,
|
|
171
|
+
`${named} var p = named.price || {}; if (p.priced !== true && p.total !== 0) { return { refused: true } } ` +
|
|
172
|
+
`if (!p.lines) { return { refused: true } } return { refused: false, total: p.total, requiresPayment: p.total > 0 }`,
|
|
173
|
+
{ price: ref('price') }
|
|
174
|
+
),
|
|
175
|
+
browser('confirm', 6),
|
|
176
|
+
server(
|
|
177
|
+
'settle',
|
|
178
|
+
7,
|
|
179
|
+
`${named} var p = named.price || {}; var a = named.assemble || {}; ` +
|
|
180
|
+
`return { items: p.lines || [], settled: a.requiresPayment === false }`,
|
|
181
|
+
{ price: ref('price'), assemble: ref('assemble') }
|
|
182
|
+
),
|
|
183
|
+
])
|
|
184
|
+
|
|
185
|
+
it('refuses to assemble or settle from two pricing calls of one run', async () => {
|
|
186
|
+
const formed = merge({}, (await routes.form({})).body.results)
|
|
187
|
+
const ask = (method: string) => merge(formed, { trigger: { method }, method: {} })
|
|
188
|
+
const refused = merge(
|
|
189
|
+
ask('cash_on_delivery'),
|
|
190
|
+
(await routes.price(ask('cash_on_delivery'))).body.results
|
|
191
|
+
)
|
|
192
|
+
const accepted = merge(ask('stripe'), (await routes.price(ask('stripe'))).body.results)
|
|
193
|
+
expect(refused.price).toMatchObject({ priced: false })
|
|
194
|
+
expect(accepted.price).toMatchObject({ priced: true })
|
|
195
|
+
|
|
196
|
+
// The assemble is handed the accepted price under the refused call's link.
|
|
197
|
+
const assembleMix = await routes.assemble({
|
|
198
|
+
...refused,
|
|
199
|
+
review: {},
|
|
200
|
+
price: accepted.price,
|
|
201
|
+
__sig: { ...refused.__sig, price: accepted.__sig.price },
|
|
202
|
+
})
|
|
203
|
+
expect(assembleMix.body.results.assemble).toEqual({ refused: true })
|
|
204
|
+
|
|
205
|
+
// The honest refused fork assembles a 0-total order...
|
|
206
|
+
const afterRefused = merge(
|
|
207
|
+
{ ...refused, review: {} },
|
|
208
|
+
(await routes.assemble({ ...refused, review: {} })).body.results
|
|
209
|
+
)
|
|
210
|
+
expect(afterRefused.assemble).toMatchObject({ requiresPayment: false })
|
|
211
|
+
// ...and settle, handed the accepted call's lines under that fork's link,
|
|
212
|
+
// never sees them: it settles the refused fork's empty order, no goods.
|
|
213
|
+
const settleMix = await routes.settle({
|
|
214
|
+
...afterRefused,
|
|
215
|
+
confirm: {},
|
|
216
|
+
price: accepted.price,
|
|
217
|
+
__sig: { ...afterRefused.__sig, price: accepted.__sig.price },
|
|
218
|
+
})
|
|
219
|
+
expect(settleMix.body.results.settle.items).toEqual([])
|
|
220
|
+
expect(JSON.stringify(settleMix.body.results)).not.toContain('TV')
|
|
221
|
+
})
|
|
222
|
+
})
|
|
@@ -3,6 +3,7 @@ import { splitIntoSegments } from '../src/segment-splitter'
|
|
|
3
3
|
import { buildSegmentTrust } from '../src/segment-trust'
|
|
4
4
|
import type { WorkflowSegment } from '../src/types'
|
|
5
5
|
import { loadServerRuntime } from './_helpers/load-server-runtime'
|
|
6
|
+
import { STEP_EXPIRED_MESSAGE } from '../src/server-runtime-code'
|
|
6
7
|
|
|
7
8
|
// The results of every server segment reach the next one through the caller
|
|
8
9
|
// (the browser relays them), so each segment signs what it produced and the
|
|
@@ -90,9 +91,14 @@ const workflow = {
|
|
|
90
91
|
const segments = splitIntoSegments(workflow)
|
|
91
92
|
const serverSegments = segments.filter((s) => s.env === 'server')
|
|
92
93
|
|
|
93
|
-
function bootRoute(segment: WorkflowSegment) {
|
|
94
|
+
function bootRoute(segment: WorkflowSegment, graphId?: string) {
|
|
94
95
|
const source = generateServerSegmentAPIRoute(segment, 'Signing', undefined, {
|
|
95
|
-
trust: buildSegmentTrust(segment, {
|
|
96
|
+
trust: buildSegmentTrust(segment, {
|
|
97
|
+
id: graphId,
|
|
98
|
+
nodes: workflow.nodes,
|
|
99
|
+
edges: workflow.edges,
|
|
100
|
+
segments,
|
|
101
|
+
}),
|
|
96
102
|
})
|
|
97
103
|
const routeModule: { exports: unknown } = { exports: {} }
|
|
98
104
|
const requireStub = (id: string) => (id.endsWith('server-runtime') ? runtime : {})
|
|
@@ -212,6 +218,81 @@ describe('signed hand-off between server segments', () => {
|
|
|
212
218
|
})
|
|
213
219
|
})
|
|
214
220
|
|
|
221
|
+
describe('signatures belong to one run of one workflow, for ten minutes', () => {
|
|
222
|
+
afterEach(() => {
|
|
223
|
+
jest.restoreAllMocks()
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
it('opens a new run at the first server segment, whatever run the request names', async () => {
|
|
227
|
+
const { afterGuard } = await honestRun('good')
|
|
228
|
+
const again = await guardRoute(afterGuard)
|
|
229
|
+
expect((again.body.results?.__sigRun as { id: string }).id).not.toBe(
|
|
230
|
+
(afterGuard.__sigRun as { id: string }).id
|
|
231
|
+
)
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
it('refuses the results of one run handed on under another run', async () => {
|
|
235
|
+
const { afterGuard: runA } = await honestRun('good')
|
|
236
|
+
const { afterGuard: runB } = await honestRun('bad')
|
|
237
|
+
// A's passed guard, presented as part of run B.
|
|
238
|
+
const reply = await writeRoute({ ...runA, __sigRun: runB.__sigRun, ui: {} })
|
|
239
|
+
expect(reply.body.results?.write).toBeUndefined()
|
|
240
|
+
// B's own run, with A's verdict and signatures spliced in.
|
|
241
|
+
const spliced = await writeRoute({
|
|
242
|
+
...runB,
|
|
243
|
+
check: runA.check,
|
|
244
|
+
gate: runA.gate,
|
|
245
|
+
__sig: runA.__sig,
|
|
246
|
+
ui: {},
|
|
247
|
+
})
|
|
248
|
+
expect(spliced.body.results?.write).toBeUndefined()
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
it('refuses a run the request made up', async () => {
|
|
252
|
+
const { afterGuard } = await honestRun('good')
|
|
253
|
+
const forgedRun = { id: 'a'.repeat(32), mac: (afterGuard.__sigRun as { mac: string }).mac }
|
|
254
|
+
const reply = await writeRoute({ ...afterGuard, __sigRun: forgedRun, ui: {} })
|
|
255
|
+
expect(reply.body.results?.write).toBeUndefined()
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
it('takes a result up to ten minutes old and refuses it after', async () => {
|
|
259
|
+
const start = Date.now()
|
|
260
|
+
const { afterGuard } = await honestRun('good')
|
|
261
|
+
const later = (ms: number) => jest.spyOn(Date, 'now').mockReturnValue(start + ms)
|
|
262
|
+
|
|
263
|
+
later(9 * 60 * 1000)
|
|
264
|
+
const fresh = await writeRoute({ ...afterGuard, ui: {} })
|
|
265
|
+
expect(fresh.body.results?.write).toEqual({ wrote: 'owner@shop.test' })
|
|
266
|
+
|
|
267
|
+
later(10 * 60 * 1000 + 1000)
|
|
268
|
+
const stale = await writeRoute({ ...afterGuard, ui: {} })
|
|
269
|
+
expect(stale.body.results?.write).toBeUndefined()
|
|
270
|
+
// Said, not silent: the visitor is told to start again.
|
|
271
|
+
expect(stale.status).toBe(409)
|
|
272
|
+
expect(stale.body).toMatchObject({ error: STEP_EXPIRED_MESSAGE })
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
it('refuses a signature dated more than a minute ahead of the route, and takes clock skew below it', async () => {
|
|
276
|
+
const start = Date.now()
|
|
277
|
+
const { afterGuard } = await honestRun('good')
|
|
278
|
+
jest.spyOn(Date, 'now').mockReturnValue(start - 30 * 1000)
|
|
279
|
+
expect((await writeRoute({ ...afterGuard, ui: {} })).body.results?.write).toEqual({
|
|
280
|
+
wrote: 'owner@shop.test',
|
|
281
|
+
})
|
|
282
|
+
jest.spyOn(Date, 'now').mockReturnValue(start - 2 * 60 * 1000)
|
|
283
|
+
const ahead = await writeRoute({ ...afterGuard, ui: {} })
|
|
284
|
+
expect(ahead.status).toBe(409)
|
|
285
|
+
expect(ahead.body.results?.write).toBeUndefined()
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
it('refuses a result another workflow signed for the same node ids', async () => {
|
|
289
|
+
const { afterGuard } = await honestRun('good')
|
|
290
|
+
const otherWorkflowWrite = bootRoute(serverSegments[1], 'another-workflow')
|
|
291
|
+
const reply = await otherWorkflowWrite({ ...afterGuard, ui: {} })
|
|
292
|
+
expect(reply.body.results?.write).toBeUndefined()
|
|
293
|
+
})
|
|
294
|
+
})
|
|
295
|
+
|
|
215
296
|
describe('claimSegmentContext — what a request cannot carry', () => {
|
|
216
297
|
const plainConfig = {
|
|
217
298
|
nodes: [{ id: 'n', type: 'general-custom-js' }],
|
|
@@ -219,6 +300,12 @@ describe('claimSegmentContext — what a request cannot carry', () => {
|
|
|
219
300
|
entryNodeIds: ['n'],
|
|
220
301
|
}
|
|
221
302
|
|
|
303
|
+
it('drops a request-supplied __request (the route sets its own)', () => {
|
|
304
|
+
const context: Context = { __request: { ip: '10.0.0.1', headers: { 'x-forged': '1' } } }
|
|
305
|
+
runtime.claimSegmentContext(plainConfig, context)
|
|
306
|
+
expect(context.__request).toBeUndefined()
|
|
307
|
+
})
|
|
308
|
+
|
|
222
309
|
it('drops custom-node bookkeeping outside a custom node segment', () => {
|
|
223
310
|
const context: Context = {
|
|
224
311
|
__isInsideCustomNode: true,
|
|
@@ -344,6 +431,24 @@ describe('trustedBaseUrl', () => {
|
|
|
344
431
|
const env = process.env
|
|
345
432
|
afterEach(() => {
|
|
346
433
|
process.env = env
|
|
434
|
+
delete (globalThis as Record<string, unknown>).__tqConfiguredNextAuthUrl
|
|
435
|
+
})
|
|
436
|
+
|
|
437
|
+
it('reads NEXTAUTH_URL as configured, never as the auth route rewrote it from a request', () => {
|
|
438
|
+
const scope = globalThis as Record<string, unknown>
|
|
439
|
+
// /api/auth keeps the configured value, then rewrites the live one from X-Forwarded-Host.
|
|
440
|
+
process.env = { ...env, NEXTAUTH_URL: 'https://evil.example', VERCEL: '' }
|
|
441
|
+
scope.__tqConfiguredNextAuthUrl = 'https://shop.example'
|
|
442
|
+
expect(runtime.trustedBaseUrl({ headers: { host: 'evil.example' } })).toBe(
|
|
443
|
+
'https://shop.example'
|
|
444
|
+
)
|
|
445
|
+
scope.__tqConfiguredNextAuthUrl = 'http://localhost:3000'
|
|
446
|
+
expect(runtime.trustedBaseUrl({ headers: { host: 'evil.example' } })).toBe(
|
|
447
|
+
'http://localhost:3000'
|
|
448
|
+
)
|
|
449
|
+
expect(runtime.trustedBaseUrl({ headers: { host: 'localhost:3001' } })).toBe(
|
|
450
|
+
'http://localhost:3001'
|
|
451
|
+
)
|
|
347
452
|
})
|
|
348
453
|
|
|
349
454
|
it('never calls a host the request named when the canonical origin is configured', () => {
|
|
@@ -182,10 +182,13 @@ describe('the emitted session-cookie resolver', () => {
|
|
|
182
182
|
})
|
|
183
183
|
|
|
184
184
|
describe('__tqSessionTokenCandidates', () => {
|
|
185
|
-
it('names the
|
|
185
|
+
it('names the __Host- cookie on an https request', () => {
|
|
186
186
|
expect(
|
|
187
|
-
resolver.__tqSessionTokenCandidates(httpsReq('
|
|
188
|
-
).toEqual([{ cookieName: '
|
|
187
|
+
resolver.__tqSessionTokenCandidates(httpsReq('__Host-next-auth.session-token=abc'))
|
|
188
|
+
).toEqual([{ cookieName: '__Host-next-auth.session-token', secureCookie: true }])
|
|
189
|
+
expect(
|
|
190
|
+
resolver.__tqSessionTokenCandidates(httpsReq('__Host-next-auth.session-token.0=abc'))
|
|
191
|
+
).toEqual([{ cookieName: '__Host-next-auth.session-token', secureCookie: true }])
|
|
189
192
|
})
|
|
190
193
|
|
|
191
194
|
it('names the plain cookie on a local http request', () => {
|
|
@@ -196,51 +199,51 @@ describe('the emitted session-cookie resolver', () => {
|
|
|
196
199
|
).toEqual([{ cookieName: 'next-auth.session-token', secureCookie: false }])
|
|
197
200
|
})
|
|
198
201
|
|
|
199
|
-
it('
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
202
|
+
it('COOKIE TOSSING: never takes another name for a session on https', () => {
|
|
203
|
+
// A sibling site on the shared parent domain can set any of these for it.
|
|
204
|
+
for (const planted of [
|
|
205
|
+
'__Secure-next-auth.session-token=evil',
|
|
206
|
+
'next-auth.session-token=evil',
|
|
207
|
+
'__Secure-authjs.session-token=evil',
|
|
208
|
+
'authjs.session-token=evil',
|
|
209
|
+
]) {
|
|
210
|
+
expect(resolver.__tqSessionTokenCandidates(httpsReq(planted))).toEqual([])
|
|
211
|
+
}
|
|
212
|
+
expect(
|
|
213
|
+
resolver.__tqSessionTokenCandidates(
|
|
214
|
+
httpsReq('next-auth.session-token=evil; __Host-next-auth.session-token=mine')
|
|
215
|
+
)
|
|
216
|
+
).toEqual([{ cookieName: '__Host-next-auth.session-token', secureCookie: true }])
|
|
205
217
|
})
|
|
206
218
|
|
|
207
|
-
it('
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
).toEqual([
|
|
219
|
+
it('treats a non-local host without a proto header as https, like the auth route does', () => {
|
|
220
|
+
const req = { headers: { host: 'shop.teleporthq.app', cookie: 'next-auth.session-token=x' } }
|
|
221
|
+
expect(resolver.__tqRequestIsSecure(req)).toBe(true)
|
|
222
|
+
expect(resolver.__tqSessionTokenCandidates(req)).toEqual([])
|
|
223
|
+
expect(resolver.__tqRequestIsSecure({ headers: { host: 'localhost:3000' } })).toBe(false)
|
|
211
224
|
})
|
|
212
225
|
|
|
213
|
-
it('
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
// with the REQUEST's protocol, not a localhost env var.
|
|
217
|
-
expect(resolver.__tqSessionTokenCandidates(httpsReq('unrelated=1'))).toEqual([
|
|
218
|
-
{ secureCookie: true },
|
|
219
|
-
])
|
|
220
|
-
expect(resolver.__tqSessionTokenCandidates({ headers: {} })).toEqual([
|
|
221
|
-
{ secureCookie: false },
|
|
222
|
-
])
|
|
226
|
+
it('names nothing when no session cookie is present', () => {
|
|
227
|
+
expect(resolver.__tqSessionTokenCandidates(httpsReq('unrelated=1'))).toEqual([])
|
|
228
|
+
expect(resolver.__tqSessionTokenCandidates({ headers: {} })).toEqual([])
|
|
223
229
|
})
|
|
224
230
|
})
|
|
225
231
|
|
|
226
232
|
describe('__tqResolveSessionToken', () => {
|
|
227
233
|
it('THE DEFECT: resolves the session that the env-derived default would miss', async () => {
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
// the plain name.
|
|
234
|
+
// The lambda holds NEXTAUTH_URL=http://localhost:3000, so next-auth's own
|
|
235
|
+
// default is the plain name; the browser holds the __Host- cookie.
|
|
231
236
|
const getToken = realisticGetToken('next-auth.session-token')
|
|
232
|
-
const req = httpsReq('
|
|
237
|
+
const req = httpsReq('__Host-next-auth.session-token=abc')
|
|
233
238
|
|
|
234
|
-
// What the old code did — one call, no cookieName — still returns null…
|
|
235
239
|
expect(await getToken({ req } as never)).toBeNull()
|
|
236
|
-
// …and the resolver finds the session.
|
|
237
240
|
expect(await resolver.__tqResolveSessionToken(getToken, req, 'secret')).toEqual({
|
|
238
241
|
id: 'user-1',
|
|
239
242
|
sub: 'user-1',
|
|
240
243
|
})
|
|
241
244
|
})
|
|
242
245
|
|
|
243
|
-
it('still resolves on plain http
|
|
246
|
+
it('still resolves on plain http', async () => {
|
|
244
247
|
const getToken = realisticGetToken('next-auth.session-token')
|
|
245
248
|
const req = { headers: { cookie: 'next-auth.session-token=abc' } }
|
|
246
249
|
expect(await resolver.__tqResolveSessionToken(getToken, req, 'secret')).toEqual({
|
|
@@ -254,79 +257,34 @@ describe('the emitted session-cookie resolver', () => {
|
|
|
254
257
|
expect(await resolver.__tqResolveSessionToken(getToken, httpsReq(''), 'secret')).toBeNull()
|
|
255
258
|
})
|
|
256
259
|
|
|
257
|
-
it('
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
260
|
+
it('COOKIE TOSSING: a planted cookie of the old name is never decoded on https', async () => {
|
|
261
|
+
const getToken = jest.fn(async () => ({ id: 'attacker' }))
|
|
262
|
+
for (const planted of [
|
|
263
|
+
'__Secure-next-auth.session-token=evil',
|
|
264
|
+
'next-auth.session-token=evil',
|
|
265
|
+
]) {
|
|
266
|
+
expect(
|
|
267
|
+
await resolver.__tqResolveSessionToken(getToken, httpsReq(planted), 'secret')
|
|
268
|
+
).toBeNull()
|
|
266
269
|
}
|
|
267
|
-
expect(
|
|
268
|
-
id: 'user-1',
|
|
269
|
-
sub: 'user-1',
|
|
270
|
-
})
|
|
270
|
+
expect(getToken).not.toHaveBeenCalled()
|
|
271
271
|
})
|
|
272
272
|
|
|
273
|
-
it('
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
// first — and used to be returned.
|
|
280
|
-
const tokens: Record<string, { email: string; role: string; iat: number }> = {
|
|
281
|
-
'next-auth.session-token': { email: 'a@shop.test', role: 'user', iat: 1790000000 },
|
|
282
|
-
'__Secure-next-auth.session-token': {
|
|
283
|
-
email: 'a@shop.test',
|
|
284
|
-
role: 'admin',
|
|
285
|
-
iat: 1790336037,
|
|
286
|
-
},
|
|
287
|
-
}
|
|
288
|
-
const getToken = jest.fn(async (params: { cookieName?: string }) =>
|
|
289
|
-
params.cookieName ? tokens[params.cookieName] || null : null
|
|
273
|
+
it('asks getToken for exactly the __Host- cookie', async () => {
|
|
274
|
+
const getToken = jest.fn(async () => ({ id: 'u1' }))
|
|
275
|
+
await resolver.__tqResolveSessionToken(
|
|
276
|
+
getToken,
|
|
277
|
+
httpsReq('__Host-next-auth.session-token=b'),
|
|
278
|
+
'secret'
|
|
290
279
|
)
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
role: string
|
|
300
|
-
}
|
|
301
|
-
expect(token.role).toBe('admin')
|
|
302
|
-
expect(getToken).toHaveBeenCalledTimes(2)
|
|
303
|
-
|
|
304
|
-
// And the other way round: the plain cookie is the live one.
|
|
305
|
-
tokens['next-auth.session-token'].iat = 1790400000
|
|
306
|
-
const again = (await resolver.__tqResolveSessionToken(getToken, req, 'secret')) as {
|
|
307
|
-
role: string
|
|
308
|
-
}
|
|
309
|
-
expect(again.role).toBe('user')
|
|
310
|
-
})
|
|
311
|
-
|
|
312
|
-
it('keeps the protocol-matching cookie on a tie, and a token without iat still beats none', async () => {
|
|
313
|
-
const getToken = async (params: { cookieName?: string }) =>
|
|
314
|
-
params.cookieName === '__Secure-next-auth.session-token'
|
|
315
|
-
? { id: 'secure', iat: 5 }
|
|
316
|
-
: params.cookieName === 'next-auth.session-token'
|
|
317
|
-
? { id: 'plain', iat: 5 }
|
|
318
|
-
: null
|
|
319
|
-
const both = httpsReq('next-auth.session-token=a; __Secure-next-auth.session-token=b')
|
|
320
|
-
expect(await resolver.__tqResolveSessionToken(getToken, both, 'secret')).toEqual({
|
|
321
|
-
id: 'secure',
|
|
322
|
-
iat: 5,
|
|
323
|
-
})
|
|
324
|
-
|
|
325
|
-
const noIat = async (params: { cookieName?: string }) =>
|
|
326
|
-
params.cookieName === 'next-auth.session-token' ? { id: 'plain' } : null
|
|
327
|
-
expect(await resolver.__tqResolveSessionToken(noIat, both, 'secret')).toEqual({
|
|
328
|
-
id: 'plain',
|
|
329
|
-
})
|
|
280
|
+
expect(getToken).toHaveBeenCalledTimes(1)
|
|
281
|
+
expect(getToken.mock.calls[0]).toEqual([
|
|
282
|
+
expect.objectContaining({
|
|
283
|
+
cookieName: '__Host-next-auth.session-token',
|
|
284
|
+
secureCookie: true,
|
|
285
|
+
secret: 'secret',
|
|
286
|
+
}),
|
|
287
|
+
])
|
|
330
288
|
})
|
|
331
289
|
|
|
332
290
|
it('returns null rather than throwing when getToken throws', async () => {
|
|
@@ -336,7 +294,7 @@ describe('the emitted session-cookie resolver', () => {
|
|
|
336
294
|
await expect(
|
|
337
295
|
resolver.__tqResolveSessionToken(
|
|
338
296
|
throwing,
|
|
339
|
-
httpsReq('
|
|
297
|
+
httpsReq('__Host-next-auth.session-token=a'),
|
|
340
298
|
'secret'
|
|
341
299
|
)
|
|
342
300
|
).resolves.toBeNull()
|
|
@@ -354,12 +312,12 @@ describe('the emitted session-cookie resolver', () => {
|
|
|
354
312
|
})
|
|
355
313
|
|
|
356
314
|
describe('the CommonJS wrapper', () => {
|
|
357
|
-
it('reads NEXTAUTH_SECRET itself and resolves the
|
|
315
|
+
it('reads NEXTAUTH_SECRET itself and resolves the __Host- cookie', async () => {
|
|
358
316
|
const cjs = bootCommonJsResolver({
|
|
359
317
|
secret: 'server-secret',
|
|
360
318
|
getToken: realisticGetToken('next-auth.session-token'),
|
|
361
319
|
})
|
|
362
|
-
expect(await cjs.__tqSessionToken(httpsReq('
|
|
320
|
+
expect(await cjs.__tqSessionToken(httpsReq('__Host-next-auth.session-token=abc'))).toEqual({
|
|
363
321
|
id: 'user-1',
|
|
364
322
|
sub: 'user-1',
|
|
365
323
|
})
|
|
@@ -369,15 +327,13 @@ describe('the emitted session-cookie resolver', () => {
|
|
|
369
327
|
const cjs = bootCommonJsResolver({
|
|
370
328
|
getToken: realisticGetToken('next-auth.session-token'),
|
|
371
329
|
})
|
|
372
|
-
expect(
|
|
373
|
-
await cjs.__tqSessionToken(httpsReq('__Secure-next-auth.session-token=abc'))
|
|
374
|
-
).toBeNull()
|
|
330
|
+
expect(await cjs.__tqSessionToken(httpsReq('__Host-next-auth.session-token=abc'))).toBeNull()
|
|
375
331
|
})
|
|
376
332
|
|
|
377
333
|
it('is null — not a crash — for a project generated without next-auth', async () => {
|
|
378
334
|
const cjs = bootCommonJsResolver({ secret: 'server-secret', nextAuthPresent: false })
|
|
379
335
|
await expect(
|
|
380
|
-
cjs.__tqSessionToken(httpsReq('
|
|
336
|
+
cjs.__tqSessionToken(httpsReq('__Host-next-auth.session-token=abc'))
|
|
381
337
|
).resolves.toBeNull()
|
|
382
338
|
})
|
|
383
339
|
})
|