@teleporthq/teleport-plugin-next-workflows 0.44.11 → 0.45.0
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,66 @@
|
|
|
1
|
+
import { WorkflowSegment } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* A step any visitor may run, but not without end: a guest booking (which
|
|
4
|
+
* takes a place in the calendar and emails a confirmation), a newsletter
|
|
5
|
+
* signup (which adds an address to the merchant's audience). The feature that
|
|
6
|
+
* builds such a step declares how often one visitor may run it, on the step:
|
|
7
|
+
*
|
|
8
|
+
* config.visitorLimit = { limit: 10, windowSeconds: 3600 } // 429 past the limit
|
|
9
|
+
* config.visitorLimit = { limit: 5, windowSeconds: 3600, onLimit: 'skip' } // the step quietly does nothing
|
|
10
|
+
* config.visitorLimit = { …, scope: 'newsletter-signup' } // one budget for every such step
|
|
11
|
+
*
|
|
12
|
+
* Without `scope` the budget is the step's own (`workflow-step:<node id>`).
|
|
13
|
+
* With one, every step that names the same scope shares one budget per
|
|
14
|
+
* visitor (`visitor-limit:<scope>`): two signup blocks, or two booking pages,
|
|
15
|
+
* do not give a visitor twice the signups or bookings.
|
|
16
|
+
*
|
|
17
|
+
* The segment route that runs the step counts every request it answers for
|
|
18
|
+
* the visitor (IPv6 by its /64), in the app's database through the shared
|
|
19
|
+
* security runtime, BEFORE any step of the segment runs — so the count cannot
|
|
20
|
+
* be dodged by calling the route directly or by marking the step skipped.
|
|
21
|
+
* This deployment's own server code (the internal-call token) is not counted.
|
|
22
|
+
*
|
|
23
|
+
* ⛔ So a declared limit holds only in a route a BROWSER calls: a limited step
|
|
24
|
+
* inside a custom node that another server segment runs with the internal
|
|
25
|
+
* token is not counted there. Declare the limit on the step the visitor's
|
|
26
|
+
* request reaches (the feature builders do).
|
|
27
|
+
*
|
|
28
|
+
* `onLimit: 'skip'` is for a step whose visitor must see the same answer either
|
|
29
|
+
* way (a signup thanks a bot and a person alike): past the limit the step, and
|
|
30
|
+
* every step after it in the segment, is skipped and the route answers as it
|
|
31
|
+
* would for a request that changed nothing. A step marked `continueOnError`
|
|
32
|
+
* is optional: past its limit only that step is skipped, and what follows it
|
|
33
|
+
* (a booking's checkout after its newsletter tick) still runs. The skip is logged server-side
|
|
34
|
+
* (the scope only — never the visitor's address or input), so an owner can
|
|
35
|
+
* tell lost signups from no signups: at most one line per scope per minute
|
|
36
|
+
* and per instance, the line saying how many more were skipped since the
|
|
37
|
+
* last one — a bot past its limit does not flood the log.
|
|
38
|
+
*
|
|
39
|
+
* A declaration that cannot be read limits at the defaults (10 per hour): a
|
|
40
|
+
* step that asked for a limit never runs without one.
|
|
41
|
+
*/
|
|
42
|
+
export declare const VISITOR_LIMIT_CONFIG_KEY = "visitorLimit";
|
|
43
|
+
export interface VisitorStepLimit {
|
|
44
|
+
nodeId: string;
|
|
45
|
+
/** The shared budget the step names, if any. */
|
|
46
|
+
scope?: string;
|
|
47
|
+
limit: number;
|
|
48
|
+
windowSeconds: number;
|
|
49
|
+
onLimit: 'refuse' | 'skip';
|
|
50
|
+
/** What a refused visitor is told (the 429's public `error`), when the step names one. */
|
|
51
|
+
message?: string;
|
|
52
|
+
/** The step and every step after it in the same segment (only the step when it is `continueOnError`). */
|
|
53
|
+
skipIds: string[];
|
|
54
|
+
}
|
|
55
|
+
/** The limit a step's config declares, or null when it declares none. */
|
|
56
|
+
export declare const readVisitorStepLimit: (config: Record<string, unknown> | undefined) => Omit<VisitorStepLimit, 'nodeId' | 'skipIds'> | null;
|
|
57
|
+
/** Every declared limit of a segment's steps (or its type's default), in step order. */
|
|
58
|
+
export declare const collectVisitorStepLimits: (segment: WorkflowSegment) => VisitorStepLimit[];
|
|
59
|
+
/**
|
|
60
|
+
* The route code that counts a segment's declared limits: '' for a segment
|
|
61
|
+
* without one, so every other route is byte-identical. Placed after the
|
|
62
|
+
* request context is claimed and the auth guard has run, before any step.
|
|
63
|
+
* `relativePrefix` leads from the route's folder to the project root.
|
|
64
|
+
*/
|
|
65
|
+
export declare const buildVisitorStepLimitGuard: (segment: WorkflowSegment, relativePrefix?: string) => string;
|
|
66
|
+
//# sourceMappingURL=visitor-step-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor-step-limits.d.ts","sourceRoot":"","sources":["../../src/visitor-step-limits.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAGzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,eAAO,MAAM,wBAAwB,iBAAiB,CAAA;AAOtD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC1B,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yGAAyG;IACzG,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAQD,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,WACvB,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAC1C,KAAK,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC,GAAG,IAejD,CAAA;AAoCD,wFAAwF;AACxF,eAAO,MAAM,wBAAwB,YAAa,eAAe,KAAG,gBAAgB,EA0B1E,CAAA;AAmBV;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,YAC5B,eAAe,8BAEvB,MA+CF,CAAA"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { securityRuntimeSpecifier } from './security-runtime';
|
|
2
|
+
import { NEWSLETTER_VISITOR_LIMIT, NEWSLETTER_VISITOR_SCOPE } from './newsletter/newsletter-scope';
|
|
3
|
+
/**
|
|
4
|
+
* A step any visitor may run, but not without end: a guest booking (which
|
|
5
|
+
* takes a place in the calendar and emails a confirmation), a newsletter
|
|
6
|
+
* signup (which adds an address to the merchant's audience). The feature that
|
|
7
|
+
* builds such a step declares how often one visitor may run it, on the step:
|
|
8
|
+
*
|
|
9
|
+
* config.visitorLimit = { limit: 10, windowSeconds: 3600 } // 429 past the limit
|
|
10
|
+
* config.visitorLimit = { limit: 5, windowSeconds: 3600, onLimit: 'skip' } // the step quietly does nothing
|
|
11
|
+
* config.visitorLimit = { …, scope: 'newsletter-signup' } // one budget for every such step
|
|
12
|
+
*
|
|
13
|
+
* Without `scope` the budget is the step's own (`workflow-step:<node id>`).
|
|
14
|
+
* With one, every step that names the same scope shares one budget per
|
|
15
|
+
* visitor (`visitor-limit:<scope>`): two signup blocks, or two booking pages,
|
|
16
|
+
* do not give a visitor twice the signups or bookings.
|
|
17
|
+
*
|
|
18
|
+
* The segment route that runs the step counts every request it answers for
|
|
19
|
+
* the visitor (IPv6 by its /64), in the app's database through the shared
|
|
20
|
+
* security runtime, BEFORE any step of the segment runs — so the count cannot
|
|
21
|
+
* be dodged by calling the route directly or by marking the step skipped.
|
|
22
|
+
* This deployment's own server code (the internal-call token) is not counted.
|
|
23
|
+
*
|
|
24
|
+
* ⛔ So a declared limit holds only in a route a BROWSER calls: a limited step
|
|
25
|
+
* inside a custom node that another server segment runs with the internal
|
|
26
|
+
* token is not counted there. Declare the limit on the step the visitor's
|
|
27
|
+
* request reaches (the feature builders do).
|
|
28
|
+
*
|
|
29
|
+
* `onLimit: 'skip'` is for a step whose visitor must see the same answer either
|
|
30
|
+
* way (a signup thanks a bot and a person alike): past the limit the step, and
|
|
31
|
+
* every step after it in the segment, is skipped and the route answers as it
|
|
32
|
+
* would for a request that changed nothing. A step marked `continueOnError`
|
|
33
|
+
* is optional: past its limit only that step is skipped, and what follows it
|
|
34
|
+
* (a booking's checkout after its newsletter tick) still runs. The skip is logged server-side
|
|
35
|
+
* (the scope only — never the visitor's address or input), so an owner can
|
|
36
|
+
* tell lost signups from no signups: at most one line per scope per minute
|
|
37
|
+
* and per instance, the line saying how many more were skipped since the
|
|
38
|
+
* last one — a bot past its limit does not flood the log.
|
|
39
|
+
*
|
|
40
|
+
* A declaration that cannot be read limits at the defaults (10 per hour): a
|
|
41
|
+
* step that asked for a limit never runs without one.
|
|
42
|
+
*/
|
|
43
|
+
export const VISITOR_LIMIT_CONFIG_KEY = 'visitorLimit';
|
|
44
|
+
const DEFAULT_LIMIT = 10;
|
|
45
|
+
const DEFAULT_WINDOW_SECONDS = 3600;
|
|
46
|
+
const MAX_LIMIT = 10000;
|
|
47
|
+
const MAX_WINDOW_SECONDS = 7 * 86400;
|
|
48
|
+
const SCOPE_RE = /^[A-Za-z0-9_-]{1,60}$/;
|
|
49
|
+
const MAX_MESSAGE_LENGTH = 200;
|
|
50
|
+
const wholeInRange = (value, max) => typeof value === 'number' && Number.isInteger(value) && value >= 1 && value <= max ? value : null;
|
|
51
|
+
/** The limit a step's config declares, or null when it declares none. */
|
|
52
|
+
export const readVisitorStepLimit = (config) => {
|
|
53
|
+
var _a, _b;
|
|
54
|
+
const declared = config ? config[VISITOR_LIMIT_CONFIG_KEY] : undefined;
|
|
55
|
+
if (declared === undefined || declared === null || declared === false) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const spec = typeof declared === 'object' ? declared : {};
|
|
59
|
+
return Object.assign(Object.assign({ limit: (_a = wholeInRange(spec.limit, MAX_LIMIT)) !== null && _a !== void 0 ? _a : DEFAULT_LIMIT, windowSeconds: (_b = wholeInRange(spec.windowSeconds, MAX_WINDOW_SECONDS)) !== null && _b !== void 0 ? _b : DEFAULT_WINDOW_SECONDS, onLimit: spec.onLimit === 'skip' ? 'skip' : 'refuse' }, (typeof spec.scope === 'string' && SCOPE_RE.test(spec.scope) ? { scope: spec.scope } : {})), (typeof spec.message === 'string' && spec.message.trim()
|
|
60
|
+
? { message: spec.message.trim().slice(0, MAX_MESSAGE_LENGTH) }
|
|
61
|
+
: {}));
|
|
62
|
+
};
|
|
63
|
+
const downstreamInSegment = (segment, startId) => {
|
|
64
|
+
const inSegment = new Set(segment.nodes.map((n) => n.id));
|
|
65
|
+
const seen = new Set();
|
|
66
|
+
const queue = [startId];
|
|
67
|
+
while (queue.length > 0) {
|
|
68
|
+
const current = queue.shift();
|
|
69
|
+
if (seen.has(current) || !inSegment.has(current)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
seen.add(current);
|
|
73
|
+
for (const edge of segment.edges || []) {
|
|
74
|
+
if (edge.source === current) {
|
|
75
|
+
queue.push(edge.target);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return Array.from(seen);
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* The limit a step of these types has when its config declares none: the
|
|
83
|
+
* newsletter sign-up mails through the site's provider for every address a
|
|
84
|
+
* visitor types, so a step from the add-node menu, the AI or an import is
|
|
85
|
+
* held to the public sign-up route's own budget.
|
|
86
|
+
*/
|
|
87
|
+
const DEFAULT_VISITOR_STEP_LIMITS = {
|
|
88
|
+
'newsletter-subscribe': {
|
|
89
|
+
limit: NEWSLETTER_VISITOR_LIMIT,
|
|
90
|
+
windowSeconds: 3600,
|
|
91
|
+
onLimit: 'skip',
|
|
92
|
+
scope: NEWSLETTER_VISITOR_SCOPE,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
/** Every declared limit of a segment's steps (or its type's default), in step order. */
|
|
96
|
+
export const collectVisitorStepLimits = (segment) => segment.nodes
|
|
97
|
+
.slice()
|
|
98
|
+
.sort((a, b) => (a.stepNumber || 0) - (b.stepNumber || 0))
|
|
99
|
+
.reduce((limits, node) => {
|
|
100
|
+
var _a;
|
|
101
|
+
const declared = readVisitorStepLimit(node.config) ||
|
|
102
|
+
DEFAULT_VISITOR_STEP_LIMITS[node.type] ||
|
|
103
|
+
null;
|
|
104
|
+
if (declared) {
|
|
105
|
+
// An optional step (continueOnError) past its limit never stops what
|
|
106
|
+
// follows it: only the step itself is skipped.
|
|
107
|
+
const optional = ((_a = node.config) === null || _a === void 0 ? void 0 : _a.continueOnError) === true;
|
|
108
|
+
limits.push(Object.assign(Object.assign({ nodeId: node.id }, declared), { skipIds: declared.onLimit !== 'skip'
|
|
109
|
+
? []
|
|
110
|
+
: optional
|
|
111
|
+
? [node.id]
|
|
112
|
+
: downstreamInSegment(segment, node.id) }));
|
|
113
|
+
}
|
|
114
|
+
return limits;
|
|
115
|
+
}, []);
|
|
116
|
+
const SKIP_LOG_INTERVAL_MS = 60000;
|
|
117
|
+
/** One log line per scope per minute (per instance); the rest are counted into the next line. */
|
|
118
|
+
const SKIP_LOG_CODE = `
|
|
119
|
+
const __logStepLimitSkip = function (scope) {
|
|
120
|
+
var log = globalThis.__tqStepLimitSkipLog || (globalThis.__tqStepLimitSkipLog = {});
|
|
121
|
+
var now = Date.now();
|
|
122
|
+
var entry = log[scope];
|
|
123
|
+
if (entry && now - entry.since < ${SKIP_LOG_INTERVAL_MS}) {
|
|
124
|
+
entry.skipped += 1;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
var more = entry && entry.skipped > 0 ? ' (and ' + entry.skipped + ' more since the last line)' : '';
|
|
128
|
+
console.warn('[workflow-step-limit] skipped past its visitor limit: ' + scope + more);
|
|
129
|
+
log[scope] = { since: now, skipped: 0 };
|
|
130
|
+
};`;
|
|
131
|
+
/**
|
|
132
|
+
* The route code that counts a segment's declared limits: '' for a segment
|
|
133
|
+
* without one, so every other route is byte-identical. Placed after the
|
|
134
|
+
* request context is claimed and the auth guard has run, before any step.
|
|
135
|
+
* `relativePrefix` leads from the route's folder to the project root.
|
|
136
|
+
*/
|
|
137
|
+
export const buildVisitorStepLimitGuard = (segment, relativePrefix = '../../..') => {
|
|
138
|
+
const limits = collectVisitorStepLimits(segment);
|
|
139
|
+
if (limits.length === 0) {
|
|
140
|
+
return '';
|
|
141
|
+
}
|
|
142
|
+
const checks = limits.map((step) => {
|
|
143
|
+
const scope = step.scope ? `visitor-limit:${step.scope}` : `workflow-step:${step.nodeId}`;
|
|
144
|
+
const options = JSON.stringify({
|
|
145
|
+
scope,
|
|
146
|
+
limit: step.limit,
|
|
147
|
+
windowSeconds: step.windowSeconds,
|
|
148
|
+
});
|
|
149
|
+
if (step.onLimit === 'skip') {
|
|
150
|
+
// No response object: past the limit the runtime answers nothing itself.
|
|
151
|
+
return `
|
|
152
|
+
if (!(await __stepLimiter.rateLimitRequest(req, null, ${options}))) {
|
|
153
|
+
__logStepLimitSkip(${JSON.stringify(scope)});
|
|
154
|
+
if (!context.__skippedNodes || typeof context.__skippedNodes !== 'object') context.__skippedNodes = {};
|
|
155
|
+
${JSON.stringify(step.skipIds)}.forEach(function (id) { context.__skippedNodes[id] = true; });
|
|
156
|
+
}`;
|
|
157
|
+
}
|
|
158
|
+
if (step.message) {
|
|
159
|
+
// Counted like any refused step; the 429 carries the step's own words.
|
|
160
|
+
return `
|
|
161
|
+
if (!(await __stepLimiter.rateLimitRequest(req, null, ${options}))) {
|
|
162
|
+
var __stepRetry = typeof __stepLimiter.peekRateLimitRequest === 'function' ? await __stepLimiter.peekRateLimitRequest(req, ${options}) : null;
|
|
163
|
+
if (__stepRetry && __stepRetry.retryAfter) res.setHeader('Retry-After', String(__stepRetry.retryAfter));
|
|
164
|
+
return res.status(429).json({ error: ${JSON.stringify(step.message)} });
|
|
165
|
+
}`;
|
|
166
|
+
}
|
|
167
|
+
return `
|
|
168
|
+
if (!(await __stepLimiter.rateLimitRequest(req, res, ${options}))) {
|
|
169
|
+
return;
|
|
170
|
+
}`;
|
|
171
|
+
});
|
|
172
|
+
return `
|
|
173
|
+
// Steps that declare how often one visitor may run them (a guest booking,
|
|
174
|
+
// a newsletter signup — see visitor-step-limits.ts): counted per visitor in
|
|
175
|
+
// the app's database for every request this route answers, before any step
|
|
176
|
+
// runs. This deployment's own server code is not counted.
|
|
177
|
+
if (!require('${relativePrefix}/utils/workflows/server-runtime').isInternalCall(req)) {
|
|
178
|
+
const __stepLimiter = require('${securityRuntimeSpecifier(relativePrefix)}');${limits.some((step) => step.onLimit === 'skip') ? SKIP_LOG_CODE : ''}${checks.join('')}
|
|
179
|
+
}`;
|
|
180
|
+
};
|
|
181
|
+
//# sourceMappingURL=visitor-step-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor-step-limits.js","sourceRoot":"","sources":["../../src/visitor-step-limits.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-generator.d.ts","sourceRoot":"","sources":["../../src/webhook-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAEtB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"webhook-generator.d.ts","sourceRoot":"","sources":["../../src/webhook-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAEtB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,4BAA4B,CAAA;AA8CnC,eAAO,MAAM,yBAAyB,oBACnB,mBAAmB,GAAG,SAAS,sBAC5B,qBAAqB,KACxC,MA+MF,CAAA;AA0XD,eAAO,MAAM,yBAAyB,oBACnB,mBAAmB,GAAG,SAAS,sBAC5B,qBAAqB,KACxC,MAsYF,CAAA;AAED,MAAM,WAAW,2BAA2B;IAK1C,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACpC;AAED,eAAO,MAAM,oBAAoB,cACpB,sBAAsB,mBAChB,mBAAmB,GAAG,SAAS,YACvC,2BAA2B,KACnC,IA2DF,CAAA"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { FileType, } from '@teleporthq/teleport-types';
|
|
2
2
|
import { ensurePaymentDriversModule, resolveStorePaymentDriverIds } from './payments';
|
|
3
3
|
import { DEFAULT_PAYMENT_DRIVER_IDS } from './payments/payment-drivers-scope';
|
|
4
|
+
import { CONFIGURED_NEXTAUTH_URL_EXPRESSION } from './configured-nextauth-url';
|
|
5
|
+
import { generateSelfCallHeadersCode } from './self-call-headers';
|
|
4
6
|
/**
|
|
5
7
|
* The origin a legacy webhook route calls this deployment's own routes on
|
|
6
8
|
* (`/api/invoices/generate`, `/api/ecommerce/order-notification`). Those
|
|
@@ -12,7 +14,8 @@ import { DEFAULT_PAYMENT_DRIVER_IDS } from './payments/payment-drivers-scope';
|
|
|
12
14
|
* NEXTAUTH_URL's origin when it is set — except that a local server on another
|
|
13
15
|
* port than a local NEXTAUTH_URL keeps its own loopback address (NEXTAUTH_URL
|
|
14
16
|
* stuck at :3000 while `next dev` runs on :3001). With no Host header at all,
|
|
15
|
-
* the configured URLs as before.
|
|
17
|
+
* the configured URLs as before. NEXTAUTH_URL is read as configured, never as
|
|
18
|
+
* the auth route rewrote it from a request (configured-nextauth-url.ts).
|
|
16
19
|
*/
|
|
17
20
|
const WEBHOOK_BASE_URL_CODE = `function __isLoopbackHost(host) {
|
|
18
21
|
var name = String(host || '').replace(/:[0-9]+$/, '').toLowerCase();
|
|
@@ -23,20 +26,22 @@ function __webhookBaseUrl(req) {
|
|
|
23
26
|
var headers = (req && req.headers) || {};
|
|
24
27
|
var host = headers.host || '';
|
|
25
28
|
if (!host) {
|
|
26
|
-
var envBaseUrl =
|
|
29
|
+
var envBaseUrl = ${CONFIGURED_NEXTAUTH_URL_EXPRESSION} || process.env.VERCEL_URL || '';
|
|
27
30
|
if (envBaseUrl && !envBaseUrl.startsWith('http')) envBaseUrl = 'https://' + envBaseUrl;
|
|
28
31
|
return envBaseUrl || 'http://localhost:3000';
|
|
29
32
|
}
|
|
30
33
|
var proto = headers['x-forwarded-proto'] || (__isLoopbackHost(host) ? 'http' : 'https');
|
|
31
34
|
var requestOrigin = String(proto).split(',')[0].trim() + '://' + host;
|
|
32
35
|
if (process.env.VERCEL) return requestOrigin;
|
|
33
|
-
var configured = String(
|
|
36
|
+
var configured = String(${CONFIGURED_NEXTAUTH_URL_EXPRESSION} || '').trim();
|
|
34
37
|
if (!configured) return requestOrigin;
|
|
35
38
|
var origin;
|
|
36
39
|
try { origin = new URL(configured).origin; } catch (e) { return requestOrigin; }
|
|
37
40
|
if (__isLoopbackHost(host) && __isLoopbackHost(new URL(origin).host)) return requestOrigin;
|
|
38
41
|
return origin;
|
|
39
|
-
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
${generateSelfCallHeadersCode()}`;
|
|
40
45
|
export const generateStripeWebhookCode = (invoiceSettings, ecommerceSettings) => {
|
|
41
46
|
const autoGenerateInvoice = (invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.enabled) && (invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.autoGenerateOnPayment);
|
|
42
47
|
const hasEcommerce = !!ecommerceSettings;
|
|
@@ -64,7 +69,7 @@ try { __paymentDrivers = require('../../../utils/payments'); } catch (e) { __pay
|
|
|
64
69
|
function __stripeSecretKey() {
|
|
65
70
|
return __paymentDrivers.core.credential('stripe', 'secretKey', ['STRIPE_TEST_KEY']);
|
|
66
71
|
}
|
|
67
|
-
${autoGenerateInvoice ||
|
|
72
|
+
${autoGenerateInvoice || hasEcommerce
|
|
68
73
|
? `
|
|
69
74
|
// Stripe reports money in the currency's smallest unit (JPY has none, KWD a
|
|
70
75
|
// thousandth); the store keeps the major one, converted as its drivers do.
|
|
@@ -123,7 +128,22 @@ module.exports = async function handler(req, res) {
|
|
|
123
128
|
if (session.payment_status !== 'paid' && session.payment_status !== 'no_payment_required') {
|
|
124
129
|
console.log('Checkout session completed, payment not received yet:', session.id);
|
|
125
130
|
break;
|
|
126
|
-
}
|
|
131
|
+
}${hasEcommerce
|
|
132
|
+
? `
|
|
133
|
+
// A session that took less than its order is due, or another
|
|
134
|
+
// currency, pays nothing: no paid mark, no invoice, no order email.
|
|
135
|
+
var sessionCheck = await __checkStripeSession(session);
|
|
136
|
+
if (!sessionCheck.ok) {
|
|
137
|
+
console.error('Stripe webhook: checkout ' + session.id + ' does not pay its order: ' + sessionCheck.reason);
|
|
138
|
+
// The order could not be read: Stripe retries a 500, so a database
|
|
139
|
+
// blip delays the paid mark instead of losing it.
|
|
140
|
+
if (sessionCheck.retry) {
|
|
141
|
+
res.status(500).json({ error: 'Webhook processing failed' });
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
}`
|
|
146
|
+
: ''}
|
|
127
147
|
${autoGenerateInvoice
|
|
128
148
|
? `await handleInvoiceGeneration(session, 'checkout', __baseUrl, stripeSecretKey);`
|
|
129
149
|
: `console.log('Checkout session completed:', session.id);`}
|
|
@@ -216,11 +236,69 @@ ${hasOrderNotifications ? generateOrderNotificationWebhookCode() : ''}
|
|
|
216
236
|
`;
|
|
217
237
|
};
|
|
218
238
|
function generateEcommerceOrderUpdateCode() {
|
|
219
|
-
//
|
|
220
|
-
//
|
|
221
|
-
// mark-paid update plus invoice
|
|
222
|
-
// avoid two writes that race for the row.
|
|
239
|
+
// handleEcommerceOrderUpdate is used ONLY when invoice auto-generation is
|
|
240
|
+
// OFF — when invoices are on, handleInvoiceGeneration calls
|
|
241
|
+
// __linkInvoiceToOrder which does the same mark-paid update plus invoice
|
|
242
|
+
// linkage, so it is skipped to avoid two writes that race for the row.
|
|
243
|
+
// __checkStripeSession runs before either, the way the PayPal route's
|
|
244
|
+
// __checkPaypalCapture does, with the rule the workflow-driven "Process
|
|
245
|
+
// Payment Webhook" applies (a payment may not take less than is due).
|
|
223
246
|
return `
|
|
247
|
+
// Whether a paid checkout session may pay the store order it names: the order
|
|
248
|
+
// exists and the session took, in the order's currency, at least what the
|
|
249
|
+
// order is due — its total less what a gift card covered. A session that names
|
|
250
|
+
// no store order has nothing to check.
|
|
251
|
+
async function __checkStripeSession(session) {
|
|
252
|
+
var orderId = session && session.metadata && session.metadata.orderId;
|
|
253
|
+
if (!orderId) {
|
|
254
|
+
return { ok: true };
|
|
255
|
+
}
|
|
256
|
+
var connStr = process.env.TELEPORT_DB_CONNECTION_STRING || process.env.DATABASE_URL || '';
|
|
257
|
+
if (!connStr) {
|
|
258
|
+
return { ok: false, retry: true, reason: 'no database connection to check order ' + orderId + ' against' };
|
|
259
|
+
}
|
|
260
|
+
var pg;
|
|
261
|
+
try {
|
|
262
|
+
pg = require('pg');
|
|
263
|
+
} catch (e) {
|
|
264
|
+
return { ok: false, retry: true, reason: 'the pg module is unavailable to check order ' + orderId };
|
|
265
|
+
}
|
|
266
|
+
var client = new pg.Client({ connectionString: connStr, ssl: connStr.indexOf('sslmode=require') !== -1 ? { rejectUnauthorized: false } : undefined });
|
|
267
|
+
var order = null;
|
|
268
|
+
try {
|
|
269
|
+
await client.connect();
|
|
270
|
+
// gift_card_amount and currency are read through the row's JSON: a store
|
|
271
|
+
// provisioned before them has no such column.
|
|
272
|
+
var found = await client.query(
|
|
273
|
+
"SELECT o.total_amount, COALESCE(to_jsonb(o) ->> 'gift_card_amount', '0') AS gift_card_amount, COALESCE(to_jsonb(o) ->> 'currency', '') AS currency FROM teleport_orders o WHERE o.id::text = $1",
|
|
274
|
+
[String(orderId)]
|
|
275
|
+
);
|
|
276
|
+
order = found && found.rows && found.rows[0] ? found.rows[0] : null;
|
|
277
|
+
} catch (err) {
|
|
278
|
+
return { ok: false, retry: true, reason: 'order ' + orderId + ' could not be read (' + (err && err.message) + ')' };
|
|
279
|
+
} finally {
|
|
280
|
+
try { await client.end(); } catch (_e) {}
|
|
281
|
+
}
|
|
282
|
+
if (!order) {
|
|
283
|
+
return { ok: false, reason: 'the store has no order ' + orderId };
|
|
284
|
+
}
|
|
285
|
+
var paidCurrency = String(session.currency || '').toUpperCase();
|
|
286
|
+
var orderCurrency = String(order.currency || '').toUpperCase();
|
|
287
|
+
if (orderCurrency && paidCurrency !== orderCurrency) {
|
|
288
|
+
return { ok: false, reason: 'the session is in ' + (paidCurrency || 'no currency') + ' and order ' + orderId + ' in ' + orderCurrency };
|
|
289
|
+
}
|
|
290
|
+
// Whole cents, so 12.30 - 4.10 compares as 820 and never 8.199999999999999.
|
|
291
|
+
var due = Math.max(0, Math.round((Number(order.total_amount) - Number(order.gift_card_amount || 0)) * 100));
|
|
292
|
+
var paid = session.amount_total == null ? NaN : Math.round(__stripeMajor(session.amount_total, session.currency) * 100);
|
|
293
|
+
if (!isFinite(due) || !isFinite(paid) || paid < due) {
|
|
294
|
+
return {
|
|
295
|
+
ok: false,
|
|
296
|
+
reason: 'the session took ' + (isFinite(paid) ? (paid / 100).toFixed(2) : 'an unknown amount') + ' ' + paidCurrency + ' and order ' + orderId + ' is due ' + (due / 100).toFixed(2),
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
return { ok: true };
|
|
300
|
+
}
|
|
301
|
+
|
|
224
302
|
async function handleEcommerceOrderUpdate(session) {
|
|
225
303
|
try {
|
|
226
304
|
var orderId = session.metadata && session.metadata.orderId;
|
|
@@ -256,7 +334,7 @@ async function sendOrderNotification(session, baseUrl) {
|
|
|
256
334
|
await fetch(resolvedBaseUrl + '/api/ecommerce/order-notification', {
|
|
257
335
|
method: 'POST',
|
|
258
336
|
// The route emails the merchant only for the store's own server code.
|
|
259
|
-
headers: { 'Content-Type': 'application/json'
|
|
337
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
260
338
|
body: JSON.stringify({
|
|
261
339
|
orderId: orderId || session.id,
|
|
262
340
|
customerEmail: session.customer_email || (session.customer_details && session.customer_details.email) || '',
|
|
@@ -376,7 +454,7 @@ async function handleInvoiceGeneration(paymentObj, source, baseUrl, stripeSecret
|
|
|
376
454
|
method: 'POST',
|
|
377
455
|
// The route issues invoices only for the store's own server code, which
|
|
378
456
|
// presents the app secret.
|
|
379
|
-
headers: { 'Content-Type': 'application/json'
|
|
457
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
380
458
|
body: JSON.stringify(invoicePayload),
|
|
381
459
|
});
|
|
382
460
|
|
|
@@ -516,7 +594,7 @@ async function handleStripeInvoicePayment(stripeInvoice, baseUrl) {
|
|
|
516
594
|
method: 'POST',
|
|
517
595
|
// The route issues invoices only for the store's own server code, which
|
|
518
596
|
// presents the app secret.
|
|
519
|
-
headers: { 'Content-Type': 'application/json'
|
|
597
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
520
598
|
body: JSON.stringify(invoicePayload),
|
|
521
599
|
});
|
|
522
600
|
|
|
@@ -621,7 +699,7 @@ module.exports = async function handler(req, res) {
|
|
|
621
699
|
await fetch(__baseUrl + '/api/ecommerce/order-notification', {
|
|
622
700
|
method: 'POST',
|
|
623
701
|
// The route emails the merchant only for the store's own server code.
|
|
624
|
-
headers: { 'Content-Type': 'application/json'
|
|
702
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
625
703
|
body: JSON.stringify({
|
|
626
704
|
// The internal order id, so the route can load the order's own
|
|
627
705
|
// lines and the rates they were charged at; the capture id is
|
|
@@ -829,7 +907,7 @@ async function handlePaypalInvoiceGeneration(resource, baseUrl) {
|
|
|
829
907
|
method: 'POST',
|
|
830
908
|
// The route issues invoices only for the store's own server code, which
|
|
831
909
|
// presents the app secret.
|
|
832
|
-
headers: { 'Content-Type': 'application/json'
|
|
910
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
833
911
|
body: JSON.stringify(invoicePayload),
|
|
834
912
|
});
|
|
835
913
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-generator.js","sourceRoot":"","sources":["../../src/webhook-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,GAGT,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"webhook-generator.js","sourceRoot":"","sources":["../../src/webhook-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,GAGT,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,EAAE,kCAAkC,EAAE,MAAM,2BAA2B,CAAA;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AAEjE;;;;;;;;;;;;;GAaG;AACH,MAAM,qBAAqB,GAAG;;;;;;;;;uBASP,kCAAkC;;;;;;;4BAO7B,kCAAkC;;;;;;;;EAQ5D,2BAA2B,EAAE,EAAE,CAAA;AAEjC,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,eAAgD,EAChD,iBAAyC,EACjC,EAAE;IACV,MAAM,mBAAmB,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,OAAO,MAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,qBAAqB,CAAA,CAAA;IAC9F,MAAM,YAAY,GAAG,CAAC,CAAC,iBAAiB,CAAA;IACxC,MAAM,qBAAqB,GAAG,YAAY,IAAI,iBAAiB,CAAC,kBAAkB,CAAA;IAElF,OAAO;;;;;;;;EASP,mBAAmB;QACjB,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;;;;;;;;;;;EAYE,mBAAmB,IAAI,YAAY;QACjC,CAAC,CAAC;;;;;;CAML;QACG,CAAC,CAAC,EACN;EACE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAmDb,YAAY;QACV,CAAC,CAAC;;;;;;;;;;;;;UAaJ;QACE,CAAC,CAAC,EACN;UAEE,mBAAmB;QACjB,CAAC,CAAC,iFAAiF;QACnF,CAAC,CAAC,yDACN;UACE,CAAC,mBAAmB,IAAI,YAAY,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE;UACxF,qBAAqB,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;UAe/E,mBAAmB;QACjB,CAAC,CAAC;;;;;;UAMJ;QACE,CAAC,CAAC,EACN;UAEE,mBAAmB;QACjB,CAAC,CAAC,6FAA6F;QAC/F,CAAC,CAAC,6DACN;;;;;;;;;;;;;;;;;;UAmBE,mBAAmB;QACjB,CAAC,CAAC;;;;;;;oEAOsD;QACxD,CAAC,CAAC,8DACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BN,mBAAmB,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC,EAAE;EACvD,YAAY,CAAC,CAAC,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC,EAAE;EACtD,qBAAqB,CAAC,CAAC,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC,EAAE;CACpE,CAAA;AACD,CAAC,CAAA;AAED,SAAS,gCAAgC;IACvC,0EAA0E;IAC1E,4DAA4D;IAC5D,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,sEAAsE;IACtE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ER,CAAA;AACD,CAAC;AAED,SAAS,oCAAoC;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuBR,CAAA;AACD,CAAC;AAED,SAAS,0BAA0B;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgQR,CAAA;AACD,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,eAAgD,EAChD,iBAAyC,EACjC,EAAE;IACV,MAAM,mBAAmB,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,OAAO,MAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,qBAAqB,CAAA,CAAA;IAC9F,MAAM,qBAAqB,GAAG,CAAC,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,kBAAkB,CAAA;IAEzF,OAAO;;;;;;;;EASP,mBAAmB;QACjB,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;;;;;;;;;;;EAWE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAmDb,mBAAmB,IAAI,qBAAqB;QAC1C,CAAC,CAAC;;;;UAIJ;QACE,CAAC,CAAC,EACN;UAEE,mBAAmB;QACjB,CAAC,CAAC,2DAA2D;QAC7D,CAAC,CAAC,wDACN;UAEE,qBAAqB;QACnB,CAAC,CAAC;;;;;;;;;;;;;;;;qGAgBuF;QACzF,CAAC,CAAC,EACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CN,mBAAmB,IAAI,qBAAqB;QAC1C,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFL;QACG,CAAC,CAAC,EACN;;EAGE,mBAAmB;QACjB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuIL;QACG,CAAC,CAAC,EACN;CACC,CAAA;AACD,CAAC,CAAA;AAUD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,SAAiC,EACjC,eAAgD,EAChD,UAAuC,EAAE,EACnC,EAAE;;IACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;IACjC,MAAM,GAAG,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,GAAG,KAAI,EAAE,CAAA;IACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAA;IAChD,MAAM,kBAAkB,GAAG,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,gBAAgB,KAAI,EAAE,CAAA;IACpE,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,GAAG,EAAU,CAAA;IAEhE,MAAM,UAAU,GACd,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAC9E;QACC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAE9B,MAAM,UAAU,GACd,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAC5E;QACC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAE9B,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE;QAC9B,OAAM;KACP;IACD,wEAAwE;IACxE,2EAA2E;IAC3E,mDAAmD;IACnD,MAAM,cAAc,GAAG,4BAA4B,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC7D,0BAA0B,CACxB,SAAS,EACT,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,0BAA0B,CACxE,CAAA;IAED,IAAI,UAAU,EAAE;QACd,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE;YAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;YAClC,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,QAAQ,CAAC,EAAE;oBACrB,OAAO,EAAE,yBAAyB,CAAC,eAAe,EAAE,iBAAiB,CAAC;iBACvE;aACF;SACF,CAAC,CAAA;KACH;IAED,IAAI,UAAU,EAAE;QACd,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE;YAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;YAClC,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,QAAQ,CAAC,EAAE;oBACrB,OAAO,EAAE,yBAAyB,CAAC,eAAe,EAAE,iBAAiB,CAAC;iBACvE;aACF;SACF,CAAC,CAAA;KACH;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-signature-verification.d.ts","sourceRoot":"","sources":["../../src/webhook-signature-verification.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,QAAO,MAqC1C,CAAA;AAED,eAAO,MAAM,uCAAuC,QAAO,MA4C1D,CAAA;AASD,eAAO,MAAM,uCAAuC,QAAO,
|
|
1
|
+
{"version":3,"file":"webhook-signature-verification.d.ts","sourceRoot":"","sources":["../../src/webhook-signature-verification.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,QAAO,MAqC1C,CAAA;AAED,eAAO,MAAM,uCAAuC,QAAO,MA4C1D,CAAA;AASD,eAAO,MAAM,uCAAuC,QAAO,MA0F1D,CAAA;AAED,eAAO,MAAM,qCAAqC,eACrC,QAAQ,GAAG,MAAM,KAC3B,MA2BF,CAAA;AAOD,eAAO,MAAM,+BAA+B,QAAO,MAuClD,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sCAAsC,QAAO,MA2DzD,CAAA;AAED,eAAO,MAAM,oCAAoC,QAAO,MAQvD,CAAA"}
|
|
@@ -91,19 +91,29 @@ function verifyStripeSignature(rawBody, sigHeader, secret) {
|
|
|
91
91
|
// sandbox verification to the live API, which rejected it.
|
|
92
92
|
export const generatePaypalSignatureVerificationCode = () => {
|
|
93
93
|
return `
|
|
94
|
+
// The named variables first, then a NUMBERED copy of the stored name (the
|
|
95
|
+
// editor numbers a re-typed secret: …_CLIENT_ID2), the highest number being
|
|
96
|
+
// the newest. Never any other variable that merely starts with the name.
|
|
94
97
|
function resolvePaypalEnv(candidates, prefix) {
|
|
95
98
|
var env = process.env;
|
|
96
99
|
for (var i = 0; i < candidates.length; i++) {
|
|
97
100
|
var value = candidates[i] ? env[candidates[i]] : '';
|
|
98
101
|
if (value && String(value).length > 0) return String(value);
|
|
99
102
|
}
|
|
103
|
+
var best = '';
|
|
104
|
+
var bestNumber = -1;
|
|
100
105
|
var keys = Object.keys(env);
|
|
101
106
|
for (var k = 0; k < keys.length; k++) {
|
|
102
|
-
if (keys[k].indexOf(prefix)
|
|
103
|
-
|
|
107
|
+
if (keys[k].indexOf(prefix) !== 0) continue;
|
|
108
|
+
var suffix = keys[k].slice(prefix.length);
|
|
109
|
+
if (!/^[0-9]+$/.test(suffix)) continue;
|
|
110
|
+
var number = parseInt(suffix, 10);
|
|
111
|
+
if (env[keys[k]] && String(env[keys[k]]).length > 0 && number > bestNumber) {
|
|
112
|
+
best = String(env[keys[k]]);
|
|
113
|
+
bestNumber = number;
|
|
104
114
|
}
|
|
105
115
|
}
|
|
106
|
-
return
|
|
116
|
+
return best;
|
|
107
117
|
}
|
|
108
118
|
|
|
109
119
|
async function verifyPaypalSignature(req, rawBody, webhookConfig) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-signature-verification.js","sourceRoot":"","sources":["../../src/webhook-signature-verification.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAW,EAAE;IAClD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCP,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAW,EAAE;IAClE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CP,CAAA;AACF,CAAC,CAAA;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,0EAA0E;AAC1E,6EAA6E;AAC7E,yEAAyE;AACzE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAW,EAAE;IAClE,OAAO
|
|
1
|
+
{"version":3,"file":"webhook-signature-verification.js","sourceRoot":"","sources":["../../src/webhook-signature-verification.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAW,EAAE;IAClD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCP,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAW,EAAE;IAClE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CP,CAAA;AACF,CAAC,CAAA;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,0EAA0E;AAC1E,6EAA6E;AAC7E,yEAAyE;AACzE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAW,EAAE;IAClE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwFP,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qCAAqC,GAAG,CACnD,YAA+B,QAAQ,EAC/B,EAAE;IACV,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;IACvD,OAAO;qBAEL,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAClC;;;;qBAImB,MAAM;;;;+CAIoB,MAAM;;;;;;;;;;;;;EAanD,CAAA;AACF,CAAC,CAAA;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,wEAAwE;AACxE,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAW,EAAE;IAC1D,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCP,CAAA;AACF,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,GAAW,EAAE;IACjE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyDP,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAW,EAAE;IAC/D,OAAO;QACL,uCAAuC,EAAE;QACzC,uCAAuC,EAAE;QACzC,qCAAqC,CAAC,QAAQ,CAAC;QAC/C,qCAAqC,CAAC,MAAM,CAAC;QAC7C,+BAA+B,EAAE;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA"}
|
|
@@ -13,7 +13,9 @@ export declare const ROLE_OF_TOKEN_CODE = "function roleOf(token) {\n if (!toke
|
|
|
13
13
|
* protection + a scan of its graph for user-owned writes), so enforcement is a
|
|
14
14
|
* single local JWT decode — `getToken` reads the session cookie the browser
|
|
15
15
|
* already sends and verifies it with `NEXTAUTH_SECRET`. No DB, no network, no
|
|
16
|
-
* round trip
|
|
16
|
+
* round trip — except the shared reader's session-stamp check, which reads a
|
|
17
|
+
* stamped session's account at most once a minute per instance
|
|
18
|
+
* (`session-revocation-generator.ts`). `next-auth/jwt` is required LAZILY so a project generated without
|
|
17
19
|
* authentication (where the package is absent) never fails to load this file —
|
|
18
20
|
* such projects also carry no protected workflows, so the guard no-ops.
|
|
19
21
|
*
|
|
@@ -25,6 +27,7 @@ export declare const ROLE_OF_TOKEN_CODE = "function roleOf(token) {\n if (!toke
|
|
|
25
27
|
*/
|
|
26
28
|
export declare const generateWorkflowAuthHelperFile: (options?: {
|
|
27
29
|
withSubscriberAccess?: boolean;
|
|
30
|
+
withSessionRevocation?: boolean;
|
|
28
31
|
}) => string;
|
|
29
32
|
export interface WorkflowAuthInjection {
|
|
30
33
|
requireLine: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-auth-generator.d.ts","sourceRoot":"","sources":["../../src/workflow-auth-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAGnE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,+YAc7B,CAAA;AAEF
|
|
1
|
+
{"version":3,"file":"workflow-auth-generator.d.ts","sourceRoot":"","sources":["../../src/workflow-auth-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAGnE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,+YAc7B,CAAA;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,8BAA8B,aAChC;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAE,KAC3E,MAmKF,CAAA;AA2BD,MAAM,WAAW,qBAAqB;IAEpC,WAAW,EAAE,MAAM,CAAA;IAEnB,WAAW,EAAE,MAAM,CAAA;IAGnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAID,eAAO,MAAM,0BAA0B,eACzB,sBAAsB,GAAG,SAAS,KAC7C,qBA2CF,CAAA"}
|
|
@@ -27,7 +27,9 @@ export const ROLE_OF_TOKEN_CODE = `function roleOf(token) {
|
|
|
27
27
|
* protection + a scan of its graph for user-owned writes), so enforcement is a
|
|
28
28
|
* single local JWT decode — `getToken` reads the session cookie the browser
|
|
29
29
|
* already sends and verifies it with `NEXTAUTH_SECRET`. No DB, no network, no
|
|
30
|
-
* round trip
|
|
30
|
+
* round trip — except the shared reader's session-stamp check, which reads a
|
|
31
|
+
* stamped session's account at most once a minute per instance
|
|
32
|
+
* (`session-revocation-generator.ts`). `next-auth/jwt` is required LAZILY so a project generated without
|
|
31
33
|
* authentication (where the package is absent) never fails to load this file —
|
|
32
34
|
* such projects also carry no protected workflows, so the guard no-ops.
|
|
33
35
|
*
|
|
@@ -47,9 +49,12 @@ export const generateWorkflowAuthHelperFile = (options = {}) => {
|
|
|
47
49
|
// (const __WF_AUTH) computed by the GUI mapper from the protection of the
|
|
48
50
|
// page(s) that trigger the workflow plus a graph scan for user-owned writes.
|
|
49
51
|
|
|
50
|
-
${generateCommonJsSessionTokenResolverCode(
|
|
52
|
+
${generateCommonJsSessionTokenResolverCode('../..', {
|
|
53
|
+
withRevocation: options.withSessionRevocation !== false,
|
|
54
|
+
})}
|
|
51
55
|
function getSessionToken(req) {
|
|
52
|
-
// Local cookie decode
|
|
56
|
+
// Local cookie decode, then the shared session-stamp check of the reader
|
|
57
|
+
// (a session revoked by a password change is no session).
|
|
53
58
|
return __tqSessionToken(req);
|
|
54
59
|
}
|
|
55
60
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-auth-generator.js","sourceRoot":"","sources":["../../src/workflow-auth-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wCAAwC,EAAE,MAAM,2BAA2B,CAAA;AAEpF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;EAchC,CAAA;AAEF
|
|
1
|
+
{"version":3,"file":"workflow-auth-generator.js","sourceRoot":"","sources":["../../src/workflow-auth-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wCAAwC,EAAE,MAAM,2BAA2B,CAAA;AAEpF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;EAchC,CAAA;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,UAA+E,EAAE,EACzE,EAAE;IACV,OAAO;;;;;;;;;EASP,wCAAwC,CAAC,OAAO,EAAE;QAClD,cAAc,EAAE,OAAO,CAAC,qBAAqB,KAAK,KAAK;KACxD,CAAC;;;;;;;;;;;;;;EAcA,kBAAkB;;EAElB,8BAA8B,CAAC,OAAO,CAAC,oBAAoB,KAAK,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsItE,CAAA;AACD,CAAC,CAAA;AAED;;;;GAIG;AACH;;;;;;;GAOG;AACH,MAAM,8BAA8B,GAAG,CAAC,oBAA6B,EAAU,EAAE,CAC/E,oBAAoB;IAClB,CAAC,CAAC;;;EAGJ;IACE,CAAC,CAAC;;;;EAIJ,CAAA;AAYF,MAAM,eAAe,GAA0B,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAA;AAElG,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,UAA8C,EACvB,EAAE;IACzB,IACE,CAAC,UAAU;QACX,CAAC,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAC9E;QACA,OAAO,eAAe,CAAA;KACvB;IAED,8EAA8E;IAC9E,MAAM,MAAM,GAOR;QACF,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY;QACvC,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,EAAE;KAC5C,CAAA;IACD,IAAI,UAAU,CAAC,UAAU,EAAE;QACzB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAA;KACzB;IACD,IAAI,UAAU,CAAC,UAAU,EAAE;QACzB,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAA;KAC1C;IACD,IAAI,UAAU,CAAC,oBAAoB,EAAE;QACnC,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAA;QAClC,MAAM,CAAC,sBAAsB,GAAG,CAAC,UAAU,CAAC,sBAAsB,IAAI,EAAE,CAAC;aACtE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;aAC9B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;KACjC;IAED,OAAO;QACL,WAAW,EAAE,uEAAuE;QACpF,WAAW,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;QAC7D,SAAS,EAAE;;;;;MAKT;KACH,CAAA;AACH,CAAC,CAAA"}
|