@teleporthq/teleport-plugin-next-workflows 0.44.11 → 0.44.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/_helpers/fake-fetch.ts +75 -0
- package/__tests__/_helpers/gui-place-order-statements.ts +17 -0
- package/__tests__/_helpers/inserted-lines.ts +22 -0
- package/__tests__/_helpers/invoice-store.ts +10 -1
- package/__tests__/_helpers/load-security-runtime.ts +45 -0
- package/__tests__/_helpers/load-server-runtime.ts +26 -3
- package/__tests__/_helpers/run-account-delete-route.ts +3 -1
- package/__tests__/_helpers/run-generated-middleware.ts +7 -2
- package/__tests__/account-delete-owned-rows.test.ts +3 -1
- package/__tests__/adopted-element-trigger-code.test.ts +128 -0
- package/__tests__/analytics-track-outcome.test.ts +145 -0
- package/__tests__/auth-password-change-ends-sessions.test.ts +8 -1
- package/__tests__/auth-password-security.test.ts +2275 -0
- package/__tests__/auth-session-cost.test.ts +31 -0
- package/__tests__/auth-signup-route.test.ts +960 -0
- package/__tests__/authored-code-every-path.test.ts +247 -0
- package/__tests__/automations-bus.test.ts +3820 -0
- package/__tests__/automations-catalog-drift.test.ts +97 -0
- package/__tests__/booking-calendar-feed-route.test.ts +20 -3
- package/__tests__/cart-price-order.test.ts +336 -1
- package/__tests__/code-lookup-rate-limit-route.test.ts +189 -0
- package/__tests__/cost-bearing-node-types.test.ts +119 -0
- package/__tests__/credential-columns-reply.test.ts +9 -0
- package/__tests__/credential-result-reply.test.ts +19 -5
- package/__tests__/cron-route-loop-templateparams.test.ts +6 -3
- package/__tests__/custom-js-authored-code.test.ts +304 -0
- package/__tests__/custom-node-custom-code-gate.test.ts +136 -0
- package/__tests__/custom-node-step-handlers.test.ts +251 -0
- package/__tests__/custom-node-step-reach.test.ts +63 -0
- package/__tests__/data-api-anon-user-id-fallback.test.ts +7 -2
- package/__tests__/data-api-browser-reads.test.ts +7 -0
- package/__tests__/data-api-business-events.test.ts +403 -0
- package/__tests__/data-api-invalid-body.test.ts +7 -0
- package/__tests__/data-api-low-stock-autofire.test.ts +30 -4
- package/__tests__/data-api-optional-feature-columns.test.ts +44 -0
- package/__tests__/data-api-owner-scope-credentials.test.ts +1324 -0
- package/__tests__/data-api-protected-tables.test.ts +48 -15
- package/__tests__/data-api-retired-table-and-account-fields.test.ts +208 -0
- package/__tests__/email-locale-senders.test.ts +5 -3
- package/__tests__/expression-injection.test.ts +343 -0
- package/__tests__/fixtures/admin-file-workflows.json +242 -0
- package/__tests__/form-confirmation-email-template.test.ts +44 -0
- package/__tests__/internal-request-headers.test.ts +25 -0
- package/__tests__/invoice-pdf-service-project-header.test.ts +120 -0
- package/__tests__/invoice-self-call-origin.test.ts +57 -1
- package/__tests__/legacy-webhook-self-calls.test.ts +86 -1
- package/__tests__/middleware-home-route-protection.test.ts +3 -1
- package/__tests__/middleware-subscriber-access.test.ts +1 -1
- package/__tests__/newsletter-admin-route.test.ts +649 -0
- package/__tests__/newsletter-plugin.test.ts +1248 -0
- package/__tests__/outbound-nodes-security.test.ts +1929 -0
- package/__tests__/page-access-guard.test.ts +217 -0
- package/__tests__/page-access-route-table.test.ts +231 -0
- package/__tests__/payment-drivers-module.test.ts +23 -0
- package/__tests__/payment-legacy-webhook-routes.test.ts +100 -5
- package/__tests__/payment-webhook-route.test.ts +4 -1
- package/__tests__/paypal-webhook-signature-verification.test.ts +44 -0
- package/__tests__/place-order-guards.test.ts +506 -0
- package/__tests__/public-step-guards.test.ts +310 -0
- package/__tests__/publish-refusals.test.ts +505 -0
- package/__tests__/realtime-identity-routes.test.ts +492 -0
- package/__tests__/record-event-writer-server-only.test.ts +975 -0
- package/__tests__/resolve-config-template-params.test.ts +3 -3
- package/__tests__/runtime-storage-upload-access.test.ts +280 -17
- package/__tests__/security-integration-env-names.test.ts +74 -0
- package/__tests__/security-lists-parity.test.ts +245 -0
- package/__tests__/security-runtime-shadow.test.ts +224 -1
- package/__tests__/security-runtime.test.ts +893 -0
- package/__tests__/segment-rate-limit-error-branch.test.ts +284 -0
- package/__tests__/segment-route-abuse-gate.test.ts +309 -0
- package/__tests__/server-job-hops-real-data-api.test.ts +669 -0
- package/__tests__/server-session-identity.test.ts +522 -0
- package/__tests__/server-step-chain.test.ts +222 -0
- package/__tests__/server-step-signing.test.ts +107 -2
- package/__tests__/session-cookie-resolver.test.ts +62 -106
- package/__tests__/signup-event.test.ts +649 -0
- package/__tests__/signup-reply-identical.test.ts +144 -0
- package/__tests__/slack-message-escaping.test.ts +123 -0
- package/__tests__/visitor-step-limits.test.ts +318 -0
- package/__tests__/webhook-delivery-lease.test.ts +4 -1
- package/__tests__/webpack-safe-handlers.test.ts +57 -8
- package/__tests__/workflow-auth-guard.test.ts +9 -1
- package/dist/cjs/account-delete-route-generator.d.ts +1 -0
- package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
- package/dist/cjs/account-delete-route-generator.js +18 -3
- package/dist/cjs/account-delete-route-generator.js.map +1 -1
- package/dist/cjs/api-route-generator.d.ts +52 -3
- package/dist/cjs/api-route-generator.d.ts.map +1 -1
- package/dist/cjs/api-route-generator.js +600 -145
- package/dist/cjs/api-route-generator.js.map +1 -1
- package/dist/cjs/auth-generator.d.ts +126 -3
- package/dist/cjs/auth-generator.d.ts.map +1 -1
- package/dist/cjs/auth-generator.js +1353 -139
- package/dist/cjs/auth-generator.js.map +1 -1
- package/dist/cjs/automations/activity-kicks.d.ts +12 -0
- package/dist/cjs/automations/activity-kicks.d.ts.map +1 -0
- package/dist/cjs/automations/activity-kicks.js +123 -0
- package/dist/cjs/automations/activity-kicks.js.map +1 -0
- package/dist/cjs/automations/app-events-source.d.ts +33 -0
- package/dist/cjs/automations/app-events-source.d.ts.map +1 -0
- package/dist/cjs/automations/app-events-source.js +109 -0
- package/dist/cjs/automations/app-events-source.js.map +1 -0
- package/dist/cjs/automations/automations-project-plugin.d.ts +21 -0
- package/dist/cjs/automations/automations-project-plugin.d.ts.map +1 -0
- package/dist/cjs/automations/automations-project-plugin.js +102 -0
- package/dist/cjs/automations/automations-project-plugin.js.map +1 -0
- package/dist/cjs/automations/automations-scope.d.ts +104 -0
- package/dist/cjs/automations/automations-scope.d.ts.map +1 -0
- package/dist/cjs/automations/automations-scope.js +176 -0
- package/dist/cjs/automations/automations-scope.js.map +1 -0
- package/dist/cjs/automations/dispatcher-source.d.ts +72 -0
- package/dist/cjs/automations/dispatcher-source.d.ts.map +1 -0
- package/dist/cjs/automations/dispatcher-source.js +1008 -0
- package/dist/cjs/automations/dispatcher-source.js.map +1 -0
- package/dist/cjs/automations/event-bus-source.d.ts +44 -0
- package/dist/cjs/automations/event-bus-source.d.ts.map +1 -0
- package/dist/cjs/automations/event-bus-source.js +427 -0
- package/dist/cjs/automations/event-bus-source.js.map +1 -0
- package/dist/cjs/automations/handler-module-generator.d.ts +25 -0
- package/dist/cjs/automations/handler-module-generator.d.ts.map +1 -0
- package/dist/cjs/automations/handler-module-generator.js +78 -0
- package/dist/cjs/automations/handler-module-generator.js.map +1 -0
- package/dist/cjs/automations/hydrators-source.d.ts +33 -0
- package/dist/cjs/automations/hydrators-source.d.ts.map +1 -0
- package/dist/cjs/automations/hydrators-source.js +571 -0
- package/dist/cjs/automations/hydrators-source.js.map +1 -0
- package/dist/cjs/booking-calendar-feed-route-generator.d.ts.map +1 -1
- package/dist/cjs/booking-calendar-feed-route-generator.js +8 -0
- package/dist/cjs/booking-calendar-feed-route-generator.js.map +1 -1
- package/dist/cjs/configured-nextauth-url.d.ts +17 -0
- package/dist/cjs/configured-nextauth-url.d.ts.map +1 -0
- package/dist/cjs/configured-nextauth-url.js +20 -0
- package/dist/cjs/configured-nextauth-url.js.map +1 -0
- package/dist/cjs/cron-request-verification.d.ts +22 -1
- package/dist/cjs/cron-request-verification.d.ts.map +1 -1
- package/dist/cjs/cron-request-verification.js +50 -6
- package/dist/cjs/cron-request-verification.js.map +1 -1
- package/dist/cjs/data-api-route-generator.d.ts +19 -0
- package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
- package/dist/cjs/data-api-route-generator.js +711 -43
- package/dist/cjs/data-api-route-generator.js.map +1 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts +3 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.js +45 -5
- package/dist/cjs/ecommerce/parameterized-stock-chain.js.map +1 -1
- package/dist/cjs/ecommerce/place-order-guards.d.ts +126 -0
- package/dist/cjs/ecommerce/place-order-guards.d.ts.map +1 -0
- package/dist/cjs/ecommerce/place-order-guards.js +670 -0
- package/dist/cjs/ecommerce/place-order-guards.js.map +1 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts +2 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/cjs/ecommerce-customhandler-rewriter.js +38 -2
- package/dist/cjs/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +368 -60
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/graph-utils.d.ts +9 -0
- package/dist/cjs/graph-utils.d.ts.map +1 -1
- package/dist/cjs/graph-utils.js +32 -1
- package/dist/cjs/graph-utils.js.map +1 -1
- package/dist/cjs/index.d.ts +20 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +72 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/invoice/api-routes-code.d.ts +9 -3
- package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/cjs/invoice/api-routes-code.js +9 -7
- package/dist/cjs/invoice/api-routes-code.js.map +1 -1
- package/dist/cjs/invoice/index.d.ts.map +1 -1
- package/dist/cjs/invoice/index.js +12 -7
- package/dist/cjs/invoice/index.js.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.js +8 -3
- package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/cjs/invoice/pdf-generator-code.d.ts.map +1 -1
- package/dist/cjs/invoice/pdf-generator-code.js +2 -1
- package/dist/cjs/invoice/pdf-generator-code.js.map +1 -1
- package/dist/cjs/invoice/pdf-service-client-code.d.ts.map +1 -1
- package/dist/cjs/invoice/pdf-service-client-code.js +15 -7
- package/dist/cjs/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/cjs/newsletter/admin-route-code.d.ts +60 -0
- package/dist/cjs/newsletter/admin-route-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/admin-route-code.js +300 -0
- package/dist/cjs/newsletter/admin-route-code.js.map +1 -0
- package/dist/cjs/newsletter/helper-code.d.ts +109 -0
- package/dist/cjs/newsletter/helper-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/helper-code.js +662 -0
- package/dist/cjs/newsletter/helper-code.js.map +1 -0
- package/dist/cjs/newsletter/newsletter-scope.d.ts +65 -0
- package/dist/cjs/newsletter/newsletter-scope.d.ts.map +1 -0
- package/dist/cjs/newsletter/newsletter-scope.js +103 -0
- package/dist/cjs/newsletter/newsletter-scope.js.map +1 -0
- package/dist/cjs/newsletter/project-plugin.d.ts +18 -0
- package/dist/cjs/newsletter/project-plugin.d.ts.map +1 -0
- package/dist/cjs/newsletter/project-plugin.js +97 -0
- package/dist/cjs/newsletter/project-plugin.js.map +1 -0
- package/dist/cjs/newsletter/routes-code.d.ts +6 -0
- package/dist/cjs/newsletter/routes-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/routes-code.js +181 -0
- package/dist/cjs/newsletter/routes-code.js.map +1 -0
- package/dist/cjs/nodes/account/account-compare-passwords.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-compare-passwords.js +16 -6
- package/dist/cjs/nodes/account/account-compare-passwords.js.map +1 -1
- package/dist/cjs/nodes/account/account-delete-current.js +1 -1
- package/dist/cjs/nodes/account/account-get-current.js +1 -1
- package/dist/cjs/nodes/account/account-hash-password.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-hash-password.js +15 -3
- package/dist/cjs/nodes/account/account-hash-password.js.map +1 -1
- package/dist/cjs/nodes/account/account-login.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-login.js +23 -6
- package/dist/cjs/nodes/account/account-login.js.map +1 -1
- package/dist/cjs/nodes/account/account-logout.js +1 -1
- package/dist/cjs/nodes/account/account-refresh-session.js +1 -1
- package/dist/cjs/nodes/account/account-request-password-reset.d.ts +3 -0
- package/dist/cjs/nodes/account/account-request-password-reset.d.ts.map +1 -0
- package/dist/cjs/nodes/account/account-request-password-reset.js +46 -0
- package/dist/cjs/nodes/account/account-request-password-reset.js.map +1 -0
- package/dist/cjs/nodes/account/account-reset-password.d.ts +3 -0
- package/dist/cjs/nodes/account/account-reset-password.d.ts.map +1 -0
- package/dist/cjs/nodes/account/account-reset-password.js +44 -0
- package/dist/cjs/nodes/account/account-reset-password.js.map +1 -0
- package/dist/cjs/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-signup.js +82 -19
- package/dist/cjs/nodes/account/account-signup.js.map +1 -1
- package/dist/cjs/nodes/account/account-social-login.js +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.js +20 -5
- package/dist/cjs/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.js +20 -5
- package/dist/cjs/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js +10 -2
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
- package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts +31 -2
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.js +125 -11
- package/dist/cjs/nodes/ai/ai-provider-utils.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.js +6 -2
- package/dist/cjs/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js +20 -5
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.js +20 -5
- package/dist/cjs/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.js +20 -5
- package/dist/cjs/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.js +20 -5
- package/dist/cjs/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts +3 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.js +110 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.js.map +1 -0
- package/dist/cjs/nodes/cart/cart-price-order.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-price-order.js +161 -2
- package/dist/cjs/nodes/cart/cart-price-order.js.map +1 -1
- package/dist/cjs/nodes/cost-bearing-node-types.d.ts +4 -0
- package/dist/cjs/nodes/cost-bearing-node-types.d.ts.map +1 -0
- package/dist/cjs/nodes/cost-bearing-node-types.js +43 -0
- package/dist/cjs/nodes/cost-bearing-node-types.js.map +1 -0
- package/dist/cjs/nodes/data/data-select.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-select.js +12 -2
- package/dist/cjs/nodes/data/data-select.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.js +15 -11
- package/dist/cjs/nodes/email/email-mailersend.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.js +15 -15
- package/dist/cjs/nodes/email/email-mailgun.js.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.js +15 -15
- package/dist/cjs/nodes/email/email-postmark.js.map +1 -1
- package/dist/cjs/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-resend.js +15 -15
- package/dist/cjs/nodes/email/email-resend.js.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.js +15 -15
- package/dist/cjs/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/cjs/nodes/email/html-escape-code.d.ts +3 -0
- package/dist/cjs/nodes/email/html-escape-code.d.ts.map +1 -0
- package/dist/cjs/nodes/email/html-escape-code.js +23 -0
- package/dist/cjs/nodes/email/html-escape-code.js.map +1 -0
- package/dist/cjs/nodes/email/message-trust.d.ts +40 -0
- package/dist/cjs/nodes/email/message-trust.d.ts.map +1 -0
- package/dist/cjs/nodes/email/message-trust.js +167 -0
- package/dist/cjs/nodes/email/message-trust.js.map +1 -0
- package/dist/cjs/nodes/email/outbound-message-guard.d.ts +113 -0
- package/dist/cjs/nodes/email/outbound-message-guard.d.ts.map +1 -0
- package/dist/cjs/nodes/email/outbound-message-guard.js +460 -0
- package/dist/cjs/nodes/email/outbound-message-guard.js.map +1 -0
- package/dist/cjs/nodes/email/trusted-html-code.d.ts +22 -0
- package/dist/cjs/nodes/email/trusted-html-code.d.ts.map +1 -0
- package/dist/cjs/nodes/email/trusted-html-code.js +52 -0
- package/dist/cjs/nodes/email/trusted-html-code.js.map +1 -0
- package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.js +44 -7
- package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
- package/dist/cjs/nodes/general/general-http-request.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-http-request.js +431 -45
- package/dist/cjs/nodes/general/general-http-request.js.map +1 -1
- package/dist/cjs/nodes/general/general-rate-limiter.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-rate-limiter.js +46 -78
- package/dist/cjs/nodes/general/general-rate-limiter.js.map +1 -1
- package/dist/cjs/nodes/general/general-wait.d.ts +3 -0
- package/dist/cjs/nodes/general/general-wait.d.ts.map +1 -0
- package/dist/cjs/nodes/general/general-wait.js +81 -0
- package/dist/cjs/nodes/general/general-wait.js.map +1 -0
- package/dist/cjs/nodes/general/visitor-request.d.ts +44 -0
- package/dist/cjs/nodes/general/visitor-request.d.ts.map +1 -0
- package/dist/cjs/nodes/general/visitor-request.js +72 -0
- package/dist/cjs/nodes/general/visitor-request.js.map +1 -0
- package/dist/cjs/nodes/index.d.ts.map +1 -1
- package/dist/cjs/nodes/index.js +7 -1
- package/dist/cjs/nodes/index.js.map +1 -1
- package/dist/cjs/nodes/integrations/integration-slack.d.ts.map +1 -1
- package/dist/cjs/nodes/integrations/integration-slack.js +17 -6
- package/dist/cjs/nodes/integrations/integration-slack.js.map +1 -1
- package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts +3 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.js +41 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.js.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.js +69 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.js.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js +42 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
- package/dist/cjs/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-join-channel.js +5 -4
- package/dist/cjs/nodes/realtime/realtime-join-channel.js.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.js +11 -2
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.js.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.js +11 -2
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-infobip.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-infobip.js +11 -8
- package/dist/cjs/nodes/sms/sms-infobip.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-smsapi.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-smsapi.js +11 -8
- package/dist/cjs/nodes/sms/sms-smsapi.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-textmagic.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-textmagic.js +11 -8
- package/dist/cjs/nodes/sms/sms-textmagic.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-twilio.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-twilio.js +12 -10
- package/dist/cjs/nodes/sms/sms-twilio.js.map +1 -1
- package/dist/cjs/nodes/types.d.ts +8 -1
- package/dist/cjs/nodes/types.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js +29 -10
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/cjs/page-access-guard-generator.d.ts +23 -0
- package/dist/cjs/page-access-guard-generator.d.ts.map +1 -0
- package/dist/cjs/page-access-guard-generator.js +135 -0
- package/dist/cjs/page-access-guard-generator.js.map +1 -0
- package/dist/cjs/password-reset-route-generator.d.ts +119 -0
- package/dist/cjs/password-reset-route-generator.d.ts.map +1 -0
- package/dist/cjs/password-reset-route-generator.js +460 -0
- package/dist/cjs/password-reset-route-generator.js.map +1 -0
- package/dist/cjs/payments/payment-core-code.d.ts.map +1 -1
- package/dist/cjs/payments/payment-core-code.js +12 -7
- package/dist/cjs/payments/payment-core-code.js.map +1 -1
- package/dist/cjs/project-code-scanner.d.ts +11 -0
- package/dist/cjs/project-code-scanner.d.ts.map +1 -0
- package/dist/cjs/project-code-scanner.js +80 -0
- package/dist/cjs/project-code-scanner.js.map +1 -0
- package/dist/cjs/public-step-guards.d.ts +122 -0
- package/dist/cjs/public-step-guards.d.ts.map +1 -0
- package/dist/cjs/public-step-guards.js +288 -0
- package/dist/cjs/public-step-guards.js.map +1 -0
- package/dist/cjs/publish-refusals.d.ts +66 -0
- package/dist/cjs/publish-refusals.d.ts.map +1 -0
- package/dist/cjs/publish-refusals.js +278 -0
- package/dist/cjs/publish-refusals.js.map +1 -0
- package/dist/cjs/realtime-generator.d.ts +63 -1
- package/dist/cjs/realtime-generator.d.ts.map +1 -1
- package/dist/cjs/realtime-generator.js +404 -230
- package/dist/cjs/realtime-generator.js.map +1 -1
- package/dist/cjs/runtime-storage-generator.d.ts +32 -1
- package/dist/cjs/runtime-storage-generator.d.ts.map +1 -1
- package/dist/cjs/runtime-storage-generator.js +265 -12
- package/dist/cjs/runtime-storage-generator.js.map +1 -1
- package/dist/cjs/security-runtime/index.d.ts +14 -0
- package/dist/cjs/security-runtime/index.d.ts.map +1 -0
- package/dist/cjs/security-runtime/index.js +48 -0
- package/dist/cjs/security-runtime/index.js.map +1 -0
- package/dist/cjs/security-runtime/security-runtime-code.d.ts +53 -0
- package/dist/cjs/security-runtime/security-runtime-code.d.ts.map +1 -0
- package/dist/cjs/security-runtime/security-runtime-code.js +580 -0
- package/dist/cjs/security-runtime/security-runtime-code.js.map +1 -0
- package/dist/cjs/security-scanner.d.ts +72 -3
- package/dist/cjs/security-scanner.d.ts.map +1 -1
- package/dist/cjs/security-scanner.js +220 -8
- package/dist/cjs/security-scanner.js.map +1 -1
- package/dist/cjs/segment-splitter.d.ts.map +1 -1
- package/dist/cjs/segment-splitter.js +10 -2
- package/dist/cjs/segment-splitter.js.map +1 -1
- package/dist/cjs/segment-trust.d.ts +36 -0
- package/dist/cjs/segment-trust.d.ts.map +1 -1
- package/dist/cjs/segment-trust.js +147 -3
- package/dist/cjs/segment-trust.js.map +1 -1
- package/dist/cjs/self-call-headers.d.ts +31 -0
- package/dist/cjs/self-call-headers.d.ts.map +1 -0
- package/dist/cjs/self-call-headers.js +48 -0
- package/dist/cjs/self-call-headers.js.map +1 -0
- package/dist/cjs/sent-email-log/index.d.ts +7 -0
- package/dist/cjs/sent-email-log/index.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/index.js +17 -1
- package/dist/cjs/sent-email-log/index.js.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts +7 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.js +17 -3
- package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/cjs/server-custom-node-call.d.ts +79 -0
- package/dist/cjs/server-custom-node-call.d.ts.map +1 -0
- package/dist/cjs/server-custom-node-call.js +285 -0
- package/dist/cjs/server-custom-node-call.js.map +1 -0
- package/dist/cjs/server-runtime-code.d.ts +39 -12
- package/dist/cjs/server-runtime-code.d.ts.map +1 -1
- package/dist/cjs/server-runtime-code.js +484 -41
- package/dist/cjs/server-runtime-code.js.map +1 -1
- package/dist/cjs/session-cookie-resolver.d.ts +3 -1
- package/dist/cjs/session-cookie-resolver.d.ts.map +1 -1
- package/dist/cjs/session-revocation-generator.d.ts +39 -0
- package/dist/cjs/session-revocation-generator.d.ts.map +1 -0
- package/dist/cjs/session-revocation-generator.js +177 -0
- package/dist/cjs/session-revocation-generator.js.map +1 -0
- package/dist/cjs/slack-message-values.d.ts +6 -0
- package/dist/cjs/slack-message-values.d.ts.map +1 -0
- package/dist/cjs/slack-message-values.js +73 -0
- package/dist/cjs/slack-message-values.js.map +1 -0
- package/dist/cjs/transactional-email-code.d.ts +11 -0
- package/dist/cjs/transactional-email-code.d.ts.map +1 -1
- package/dist/cjs/transactional-email-code.js +29 -5
- package/dist/cjs/transactional-email-code.js.map +1 -1
- package/dist/cjs/trigger-generator.d.ts +2 -0
- package/dist/cjs/trigger-generator.d.ts.map +1 -1
- package/dist/cjs/trigger-generator.js +17 -4
- package/dist/cjs/trigger-generator.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/visitor-step-limits.d.ts +66 -0
- package/dist/cjs/visitor-step-limits.d.ts.map +1 -0
- package/dist/cjs/visitor-step-limits.js +187 -0
- package/dist/cjs/visitor-step-limits.js.map +1 -0
- package/dist/cjs/webhook-generator.d.ts.map +1 -1
- package/dist/cjs/webhook-generator.js +93 -15
- package/dist/cjs/webhook-generator.js.map +1 -1
- package/dist/cjs/webhook-signature-verification.d.ts.map +1 -1
- package/dist/cjs/webhook-signature-verification.js +13 -3
- package/dist/cjs/webhook-signature-verification.js.map +1 -1
- package/dist/cjs/workflow-auth-generator.d.ts +4 -1
- package/dist/cjs/workflow-auth-generator.d.ts.map +1 -1
- package/dist/cjs/workflow-auth-generator.js +8 -3
- package/dist/cjs/workflow-auth-generator.js.map +1 -1
- package/dist/cjs/workflow-component-plugin.js +11 -3
- package/dist/cjs/workflow-component-plugin.js.map +1 -1
- package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-project-plugin.js +302 -56
- package/dist/cjs/workflow-project-plugin.js.map +1 -1
- package/dist/cjs/workflow-scope.d.ts.map +1 -1
- package/dist/cjs/workflow-scope.js +5 -0
- package/dist/cjs/workflow-scope.js.map +1 -1
- package/dist/esm/account-delete-route-generator.d.ts +1 -0
- package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
- package/dist/esm/account-delete-route-generator.js +18 -3
- package/dist/esm/account-delete-route-generator.js.map +1 -1
- package/dist/esm/api-route-generator.d.ts +52 -3
- package/dist/esm/api-route-generator.d.ts.map +1 -1
- package/dist/esm/api-route-generator.js +595 -142
- package/dist/esm/api-route-generator.js.map +1 -1
- package/dist/esm/auth-generator.d.ts +126 -3
- package/dist/esm/auth-generator.d.ts.map +1 -1
- package/dist/esm/auth-generator.js +1350 -140
- package/dist/esm/auth-generator.js.map +1 -1
- package/dist/esm/automations/activity-kicks.d.ts +12 -0
- package/dist/esm/automations/activity-kicks.d.ts.map +1 -0
- package/dist/esm/automations/activity-kicks.js +118 -0
- package/dist/esm/automations/activity-kicks.js.map +1 -0
- package/dist/esm/automations/app-events-source.d.ts +33 -0
- package/dist/esm/automations/app-events-source.d.ts.map +1 -0
- package/dist/esm/automations/app-events-source.js +104 -0
- package/dist/esm/automations/app-events-source.js.map +1 -0
- package/dist/esm/automations/automations-project-plugin.d.ts +21 -0
- package/dist/esm/automations/automations-project-plugin.d.ts.map +1 -0
- package/dist/esm/automations/automations-project-plugin.js +98 -0
- package/dist/esm/automations/automations-project-plugin.js.map +1 -0
- package/dist/esm/automations/automations-scope.d.ts +104 -0
- package/dist/esm/automations/automations-scope.d.ts.map +1 -0
- package/dist/esm/automations/automations-scope.js +165 -0
- package/dist/esm/automations/automations-scope.js.map +1 -0
- package/dist/esm/automations/dispatcher-source.d.ts +72 -0
- package/dist/esm/automations/dispatcher-source.d.ts.map +1 -0
- package/dist/esm/automations/dispatcher-source.js +999 -0
- package/dist/esm/automations/dispatcher-source.js.map +1 -0
- package/dist/esm/automations/event-bus-source.d.ts +44 -0
- package/dist/esm/automations/event-bus-source.d.ts.map +1 -0
- package/dist/esm/automations/event-bus-source.js +421 -0
- package/dist/esm/automations/event-bus-source.js.map +1 -0
- package/dist/esm/automations/handler-module-generator.d.ts +25 -0
- package/dist/esm/automations/handler-module-generator.d.ts.map +1 -0
- package/dist/esm/automations/handler-module-generator.js +71 -0
- package/dist/esm/automations/handler-module-generator.js.map +1 -0
- package/dist/esm/automations/hydrators-source.d.ts +33 -0
- package/dist/esm/automations/hydrators-source.d.ts.map +1 -0
- package/dist/esm/automations/hydrators-source.js +567 -0
- package/dist/esm/automations/hydrators-source.js.map +1 -0
- package/dist/esm/booking-calendar-feed-route-generator.d.ts.map +1 -1
- package/dist/esm/booking-calendar-feed-route-generator.js +8 -0
- package/dist/esm/booking-calendar-feed-route-generator.js.map +1 -1
- package/dist/esm/configured-nextauth-url.d.ts +17 -0
- package/dist/esm/configured-nextauth-url.d.ts.map +1 -0
- package/dist/esm/configured-nextauth-url.js +17 -0
- package/dist/esm/configured-nextauth-url.js.map +1 -0
- package/dist/esm/cron-request-verification.d.ts +22 -1
- package/dist/esm/cron-request-verification.d.ts.map +1 -1
- package/dist/esm/cron-request-verification.js +48 -5
- package/dist/esm/cron-request-verification.js.map +1 -1
- package/dist/esm/data-api-route-generator.d.ts +19 -0
- package/dist/esm/data-api-route-generator.d.ts.map +1 -1
- package/dist/esm/data-api-route-generator.js +710 -43
- package/dist/esm/data-api-route-generator.js.map +1 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.d.ts +3 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.js +43 -4
- package/dist/esm/ecommerce/parameterized-stock-chain.js.map +1 -1
- package/dist/esm/ecommerce/place-order-guards.d.ts +126 -0
- package/dist/esm/ecommerce/place-order-guards.d.ts.map +1 -0
- package/dist/esm/ecommerce/place-order-guards.js +655 -0
- package/dist/esm/ecommerce/place-order-guards.js.map +1 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts +2 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/esm/ecommerce-customhandler-rewriter.js +38 -2
- package/dist/esm/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +368 -60
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/graph-utils.d.ts +9 -0
- package/dist/esm/graph-utils.d.ts.map +1 -1
- package/dist/esm/graph-utils.js +30 -0
- package/dist/esm/graph-utils.js.map +1 -1
- package/dist/esm/index.d.ts +20 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +27 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/invoice/api-routes-code.d.ts +9 -3
- package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/esm/invoice/api-routes-code.js +9 -7
- package/dist/esm/invoice/api-routes-code.js.map +1 -1
- package/dist/esm/invoice/index.d.ts.map +1 -1
- package/dist/esm/invoice/index.js +12 -7
- package/dist/esm/invoice/index.js.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.js +8 -3
- package/dist/esm/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/esm/invoice/pdf-generator-code.d.ts.map +1 -1
- package/dist/esm/invoice/pdf-generator-code.js +2 -1
- package/dist/esm/invoice/pdf-generator-code.js.map +1 -1
- package/dist/esm/invoice/pdf-service-client-code.d.ts.map +1 -1
- package/dist/esm/invoice/pdf-service-client-code.js +15 -7
- package/dist/esm/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/esm/newsletter/admin-route-code.d.ts +60 -0
- package/dist/esm/newsletter/admin-route-code.d.ts.map +1 -0
- package/dist/esm/newsletter/admin-route-code.js +295 -0
- package/dist/esm/newsletter/admin-route-code.js.map +1 -0
- package/dist/esm/newsletter/helper-code.d.ts +109 -0
- package/dist/esm/newsletter/helper-code.d.ts.map +1 -0
- package/dist/esm/newsletter/helper-code.js +656 -0
- package/dist/esm/newsletter/helper-code.js.map +1 -0
- package/dist/esm/newsletter/newsletter-scope.d.ts +65 -0
- package/dist/esm/newsletter/newsletter-scope.d.ts.map +1 -0
- package/dist/esm/newsletter/newsletter-scope.js +97 -0
- package/dist/esm/newsletter/newsletter-scope.js.map +1 -0
- package/dist/esm/newsletter/project-plugin.d.ts +18 -0
- package/dist/esm/newsletter/project-plugin.d.ts.map +1 -0
- package/dist/esm/newsletter/project-plugin.js +93 -0
- package/dist/esm/newsletter/project-plugin.js.map +1 -0
- package/dist/esm/newsletter/routes-code.d.ts +6 -0
- package/dist/esm/newsletter/routes-code.d.ts.map +1 -0
- package/dist/esm/newsletter/routes-code.js +175 -0
- package/dist/esm/newsletter/routes-code.js.map +1 -0
- package/dist/esm/nodes/account/account-compare-passwords.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-compare-passwords.js +16 -6
- package/dist/esm/nodes/account/account-compare-passwords.js.map +1 -1
- package/dist/esm/nodes/account/account-delete-current.js +1 -1
- package/dist/esm/nodes/account/account-get-current.js +1 -1
- package/dist/esm/nodes/account/account-hash-password.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-hash-password.js +15 -3
- package/dist/esm/nodes/account/account-hash-password.js.map +1 -1
- package/dist/esm/nodes/account/account-login.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-login.js +23 -6
- package/dist/esm/nodes/account/account-login.js.map +1 -1
- package/dist/esm/nodes/account/account-logout.js +1 -1
- package/dist/esm/nodes/account/account-refresh-session.js +1 -1
- package/dist/esm/nodes/account/account-request-password-reset.d.ts +3 -0
- package/dist/esm/nodes/account/account-request-password-reset.d.ts.map +1 -0
- package/dist/esm/nodes/account/account-request-password-reset.js +43 -0
- package/dist/esm/nodes/account/account-request-password-reset.js.map +1 -0
- package/dist/esm/nodes/account/account-reset-password.d.ts +3 -0
- package/dist/esm/nodes/account/account-reset-password.d.ts.map +1 -0
- package/dist/esm/nodes/account/account-reset-password.js +41 -0
- package/dist/esm/nodes/account/account-reset-password.js.map +1 -0
- package/dist/esm/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-signup.js +82 -19
- package/dist/esm/nodes/account/account-signup.js.map +1 -1
- package/dist/esm/nodes/account/account-social-login.js +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.js +20 -5
- package/dist/esm/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.js +20 -5
- package/dist/esm/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js +10 -2
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
- package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts +31 -2
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.js +124 -10
- package/dist/esm/nodes/ai/ai-provider-utils.js.map +1 -1
- package/dist/esm/nodes/ai/ai-select-database-data.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-select-database-data.js +6 -2
- package/dist/esm/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js +20 -5
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.js +20 -5
- package/dist/esm/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.js +20 -5
- package/dist/esm/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.js +20 -5
- package/dist/esm/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts +3 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.js +107 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.js.map +1 -0
- package/dist/esm/nodes/cart/cart-price-order.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-price-order.js +161 -2
- package/dist/esm/nodes/cart/cart-price-order.js.map +1 -1
- package/dist/esm/nodes/cost-bearing-node-types.d.ts +4 -0
- package/dist/esm/nodes/cost-bearing-node-types.d.ts.map +1 -0
- package/dist/esm/nodes/cost-bearing-node-types.js +39 -0
- package/dist/esm/nodes/cost-bearing-node-types.js.map +1 -0
- package/dist/esm/nodes/data/data-select.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-select.js +12 -2
- package/dist/esm/nodes/data/data-select.js.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.js +15 -11
- package/dist/esm/nodes/email/email-mailersend.js.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.js +15 -15
- package/dist/esm/nodes/email/email-mailgun.js.map +1 -1
- package/dist/esm/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-postmark.js +15 -15
- package/dist/esm/nodes/email/email-postmark.js.map +1 -1
- package/dist/esm/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-resend.js +15 -15
- package/dist/esm/nodes/email/email-resend.js.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.js +15 -15
- package/dist/esm/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/esm/nodes/email/html-escape-code.d.ts +3 -0
- package/dist/esm/nodes/email/html-escape-code.d.ts.map +1 -0
- package/dist/esm/nodes/email/html-escape-code.js +18 -0
- package/dist/esm/nodes/email/html-escape-code.js.map +1 -0
- package/dist/esm/nodes/email/message-trust.d.ts +40 -0
- package/dist/esm/nodes/email/message-trust.d.ts.map +1 -0
- package/dist/esm/nodes/email/message-trust.js +161 -0
- package/dist/esm/nodes/email/message-trust.js.map +1 -0
- package/dist/esm/nodes/email/outbound-message-guard.d.ts +113 -0
- package/dist/esm/nodes/email/outbound-message-guard.d.ts.map +1 -0
- package/dist/esm/nodes/email/outbound-message-guard.js +452 -0
- package/dist/esm/nodes/email/outbound-message-guard.js.map +1 -0
- package/dist/esm/nodes/email/trusted-html-code.d.ts +22 -0
- package/dist/esm/nodes/email/trusted-html-code.d.ts.map +1 -0
- package/dist/esm/nodes/email/trusted-html-code.js +49 -0
- package/dist/esm/nodes/email/trusted-html-code.js.map +1 -0
- package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.js +44 -7
- package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
- package/dist/esm/nodes/general/general-http-request.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-http-request.js +431 -45
- package/dist/esm/nodes/general/general-http-request.js.map +1 -1
- package/dist/esm/nodes/general/general-rate-limiter.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-rate-limiter.js +46 -78
- package/dist/esm/nodes/general/general-rate-limiter.js.map +1 -1
- package/dist/esm/nodes/general/general-wait.d.ts +3 -0
- package/dist/esm/nodes/general/general-wait.d.ts.map +1 -0
- package/dist/esm/nodes/general/general-wait.js +78 -0
- package/dist/esm/nodes/general/general-wait.js.map +1 -0
- package/dist/esm/nodes/general/visitor-request.d.ts +44 -0
- package/dist/esm/nodes/general/visitor-request.d.ts.map +1 -0
- package/dist/esm/nodes/general/visitor-request.js +65 -0
- package/dist/esm/nodes/general/visitor-request.js.map +1 -0
- package/dist/esm/nodes/index.d.ts.map +1 -1
- package/dist/esm/nodes/index.js +7 -1
- package/dist/esm/nodes/index.js.map +1 -1
- package/dist/esm/nodes/integrations/integration-slack.d.ts.map +1 -1
- package/dist/esm/nodes/integrations/integration-slack.js +17 -6
- package/dist/esm/nodes/integrations/integration-slack.js.map +1 -1
- package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts +3 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.js +38 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.js.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.js +66 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.js.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js +39 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
- package/dist/esm/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-join-channel.js +5 -4
- package/dist/esm/nodes/realtime/realtime-join-channel.js.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-event.js +11 -2
- package/dist/esm/nodes/realtime/realtime-send-channel-event.js.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-message.js +11 -2
- package/dist/esm/nodes/realtime/realtime-send-channel-message.js.map +1 -1
- package/dist/esm/nodes/sms/sms-infobip.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-infobip.js +11 -8
- package/dist/esm/nodes/sms/sms-infobip.js.map +1 -1
- package/dist/esm/nodes/sms/sms-smsapi.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-smsapi.js +11 -8
- package/dist/esm/nodes/sms/sms-smsapi.js.map +1 -1
- package/dist/esm/nodes/sms/sms-textmagic.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-textmagic.js +11 -8
- package/dist/esm/nodes/sms/sms-textmagic.js.map +1 -1
- package/dist/esm/nodes/sms/sms-twilio.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-twilio.js +12 -10
- package/dist/esm/nodes/sms/sms-twilio.js.map +1 -1
- package/dist/esm/nodes/types.d.ts +8 -1
- package/dist/esm/nodes/types.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.js +29 -10
- package/dist/esm/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/esm/page-access-guard-generator.d.ts +23 -0
- package/dist/esm/page-access-guard-generator.d.ts.map +1 -0
- package/dist/esm/page-access-guard-generator.js +131 -0
- package/dist/esm/page-access-guard-generator.js.map +1 -0
- package/dist/esm/password-reset-route-generator.d.ts +119 -0
- package/dist/esm/password-reset-route-generator.d.ts.map +1 -0
- package/dist/esm/password-reset-route-generator.js +448 -0
- package/dist/esm/password-reset-route-generator.js.map +1 -0
- package/dist/esm/payments/payment-core-code.d.ts.map +1 -1
- package/dist/esm/payments/payment-core-code.js +12 -7
- package/dist/esm/payments/payment-core-code.js.map +1 -1
- package/dist/esm/project-code-scanner.d.ts +11 -0
- package/dist/esm/project-code-scanner.d.ts.map +1 -0
- package/dist/esm/project-code-scanner.js +75 -0
- package/dist/esm/project-code-scanner.js.map +1 -0
- package/dist/esm/public-step-guards.d.ts +122 -0
- package/dist/esm/public-step-guards.d.ts.map +1 -0
- package/dist/esm/public-step-guards.js +280 -0
- package/dist/esm/public-step-guards.js.map +1 -0
- package/dist/esm/publish-refusals.d.ts +66 -0
- package/dist/esm/publish-refusals.d.ts.map +1 -0
- package/dist/esm/publish-refusals.js +271 -0
- package/dist/esm/publish-refusals.js.map +1 -0
- package/dist/esm/realtime-generator.d.ts +63 -1
- package/dist/esm/realtime-generator.d.ts.map +1 -1
- package/dist/esm/realtime-generator.js +401 -229
- package/dist/esm/realtime-generator.js.map +1 -1
- package/dist/esm/runtime-storage-generator.d.ts +32 -1
- package/dist/esm/runtime-storage-generator.d.ts.map +1 -1
- package/dist/esm/runtime-storage-generator.js +264 -11
- package/dist/esm/runtime-storage-generator.js.map +1 -1
- package/dist/esm/security-runtime/index.d.ts +14 -0
- package/dist/esm/security-runtime/index.d.ts.map +1 -0
- package/dist/esm/security-runtime/index.js +37 -0
- package/dist/esm/security-runtime/index.js.map +1 -0
- package/dist/esm/security-runtime/security-runtime-code.d.ts +53 -0
- package/dist/esm/security-runtime/security-runtime-code.d.ts.map +1 -0
- package/dist/esm/security-runtime/security-runtime-code.js +575 -0
- package/dist/esm/security-runtime/security-runtime-code.js.map +1 -0
- package/dist/esm/security-scanner.d.ts +72 -3
- package/dist/esm/security-scanner.d.ts.map +1 -1
- package/dist/esm/security-scanner.js +217 -8
- package/dist/esm/security-scanner.js.map +1 -1
- package/dist/esm/segment-splitter.d.ts.map +1 -1
- package/dist/esm/segment-splitter.js +10 -2
- package/dist/esm/segment-splitter.js.map +1 -1
- package/dist/esm/segment-trust.d.ts +36 -0
- package/dist/esm/segment-trust.d.ts.map +1 -1
- package/dist/esm/segment-trust.js +146 -2
- package/dist/esm/segment-trust.js.map +1 -1
- package/dist/esm/self-call-headers.d.ts +31 -0
- package/dist/esm/self-call-headers.d.ts.map +1 -0
- package/dist/esm/self-call-headers.js +43 -0
- package/dist/esm/self-call-headers.js.map +1 -0
- package/dist/esm/sent-email-log/index.d.ts +7 -0
- package/dist/esm/sent-email-log/index.d.ts.map +1 -1
- package/dist/esm/sent-email-log/index.js +15 -0
- package/dist/esm/sent-email-log/index.js.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts +7 -0
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.js +17 -3
- package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/esm/server-custom-node-call.d.ts +79 -0
- package/dist/esm/server-custom-node-call.d.ts.map +1 -0
- package/dist/esm/server-custom-node-call.js +278 -0
- package/dist/esm/server-custom-node-call.js.map +1 -0
- package/dist/esm/server-runtime-code.d.ts +39 -12
- package/dist/esm/server-runtime-code.d.ts.map +1 -1
- package/dist/esm/server-runtime-code.js +483 -40
- package/dist/esm/server-runtime-code.js.map +1 -1
- package/dist/esm/session-cookie-resolver.d.ts +3 -1
- package/dist/esm/session-cookie-resolver.d.ts.map +1 -1
- package/dist/esm/session-revocation-generator.d.ts +39 -0
- package/dist/esm/session-revocation-generator.d.ts.map +1 -0
- package/dist/esm/session-revocation-generator.js +172 -0
- package/dist/esm/session-revocation-generator.js.map +1 -0
- package/dist/esm/slack-message-values.d.ts +6 -0
- package/dist/esm/slack-message-values.d.ts.map +1 -0
- package/dist/esm/slack-message-values.js +68 -0
- package/dist/esm/slack-message-values.js.map +1 -0
- package/dist/esm/transactional-email-code.d.ts +11 -0
- package/dist/esm/transactional-email-code.d.ts.map +1 -1
- package/dist/esm/transactional-email-code.js +28 -4
- package/dist/esm/transactional-email-code.js.map +1 -1
- package/dist/esm/trigger-generator.d.ts +2 -0
- package/dist/esm/trigger-generator.d.ts.map +1 -1
- package/dist/esm/trigger-generator.js +15 -3
- package/dist/esm/trigger-generator.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/visitor-step-limits.d.ts +66 -0
- package/dist/esm/visitor-step-limits.d.ts.map +1 -0
- package/dist/esm/visitor-step-limits.js +181 -0
- package/dist/esm/visitor-step-limits.js.map +1 -0
- package/dist/esm/webhook-generator.d.ts.map +1 -1
- package/dist/esm/webhook-generator.js +93 -15
- package/dist/esm/webhook-generator.js.map +1 -1
- package/dist/esm/webhook-signature-verification.d.ts.map +1 -1
- package/dist/esm/webhook-signature-verification.js +13 -3
- package/dist/esm/webhook-signature-verification.js.map +1 -1
- package/dist/esm/workflow-auth-generator.d.ts +4 -1
- package/dist/esm/workflow-auth-generator.d.ts.map +1 -1
- package/dist/esm/workflow-auth-generator.js +8 -3
- package/dist/esm/workflow-auth-generator.js.map +1 -1
- package/dist/esm/workflow-component-plugin.js +12 -4
- package/dist/esm/workflow-component-plugin.js.map +1 -1
- package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-project-plugin.js +306 -60
- package/dist/esm/workflow-project-plugin.js.map +1 -1
- package/dist/esm/workflow-scope.d.ts.map +1 -1
- package/dist/esm/workflow-scope.js +5 -0
- package/dist/esm/workflow-scope.js.map +1 -1
- package/package.json +4 -4
- package/src/account-delete-route-generator.ts +28 -4
- package/src/api-route-generator.ts +712 -134
- package/src/auth-generator.ts +1471 -142
- package/src/automations/activity-kicks.ts +139 -0
- package/src/automations/app-events-source.ts +117 -0
- package/src/automations/automations-project-plugin.ts +202 -0
- package/src/automations/automations-scope.ts +196 -0
- package/src/automations/dispatcher-source.ts +1072 -0
- package/src/automations/event-bus-source.ts +428 -0
- package/src/automations/handler-module-generator.ts +107 -0
- package/src/automations/hydrators-source.ts +647 -0
- package/src/booking-calendar-feed-route-generator.ts +8 -0
- package/src/configured-nextauth-url.ts +17 -0
- package/src/cron-request-verification.ts +55 -5
- package/src/data-api-route-generator.ts +780 -43
- package/src/ecommerce/parameterized-stock-chain.ts +52 -5
- package/src/ecommerce/place-order-guards.ts +785 -0
- package/src/ecommerce-customhandler-rewriter.ts +55 -2
- package/src/executor-generator.ts +372 -60
- package/src/graph-utils.ts +33 -0
- package/src/index.ts +70 -0
- package/src/invoice/api-routes-code.ts +20 -7
- package/src/invoice/index.ts +11 -6
- package/src/invoice/invoice-assembly-code.ts +8 -3
- package/src/invoice/pdf-generator-code.ts +2 -1
- package/src/invoice/pdf-service-client-code.ts +15 -7
- package/src/newsletter/admin-route-code.ts +319 -0
- package/src/newsletter/helper-code.ts +748 -0
- package/src/newsletter/newsletter-scope.ts +116 -0
- package/src/newsletter/project-plugin.ts +119 -0
- package/src/newsletter/routes-code.ts +186 -0
- package/src/nodes/account/account-compare-passwords.ts +17 -6
- package/src/nodes/account/account-delete-current.ts +1 -1
- package/src/nodes/account/account-get-current.ts +1 -1
- package/src/nodes/account/account-hash-password.ts +19 -3
- package/src/nodes/account/account-login.ts +24 -7
- package/src/nodes/account/account-logout.ts +1 -1
- package/src/nodes/account/account-refresh-session.ts +1 -1
- package/src/nodes/account/account-request-password-reset.ts +47 -0
- package/src/nodes/account/account-reset-password.ts +45 -0
- package/src/nodes/account/account-signup.ts +86 -20
- package/src/nodes/account/account-social-login.ts +1 -1
- package/src/nodes/ai/ai-custom-prompt.ts +25 -6
- package/src/nodes/ai/ai-detect-language.ts +25 -6
- package/src/nodes/ai/ai-generate-text-embedding.ts +16 -3
- package/src/nodes/ai/ai-provider-utils-sources.generated.ts +2 -2
- package/src/nodes/ai/ai-provider-utils.ts +135 -10
- package/src/nodes/ai/ai-select-database-data.ts +8 -3
- package/src/nodes/ai/ai-sentiment-analysis.ts +25 -6
- package/src/nodes/ai/ai-summarization.ts +25 -6
- package/src/nodes/ai/ai-text-classifier.ts +25 -6
- package/src/nodes/ai/ai-text-transform.ts +25 -6
- package/src/nodes/analytics/analytics-track-outcome.ts +111 -0
- package/src/nodes/cart/cart-price-order.ts +200 -2
- package/src/nodes/cost-bearing-node-types.ts +45 -0
- package/src/nodes/data/data-select.ts +11 -2
- package/src/nodes/email/email-mailersend.ts +16 -8
- package/src/nodes/email/email-mailgun.ts +17 -12
- package/src/nodes/email/email-postmark.ts +17 -12
- package/src/nodes/email/email-resend.ts +17 -12
- package/src/nodes/email/email-sendgrid.ts +17 -12
- package/src/nodes/email/html-escape-code.ts +21 -0
- package/src/nodes/email/message-trust.ts +198 -0
- package/src/nodes/email/outbound-message-guard.ts +572 -0
- package/src/nodes/email/trusted-html-code.ts +49 -0
- package/src/nodes/general/general-custom-js.ts +46 -7
- package/src/nodes/general/general-http-request.ts +449 -46
- package/src/nodes/general/general-rate-limiter.ts +54 -81
- package/src/nodes/general/general-wait.ts +80 -0
- package/src/nodes/general/visitor-request.ts +79 -0
- package/src/nodes/index.ts +12 -0
- package/src/nodes/integrations/integration-slack.ts +21 -6
- package/src/nodes/newsletter/newsletter-confirm.ts +44 -0
- package/src/nodes/newsletter/newsletter-subscribe.ts +78 -0
- package/src/nodes/newsletter/newsletter-unsubscribe.ts +43 -0
- package/src/nodes/realtime/realtime-join-channel.ts +5 -4
- package/src/nodes/realtime/realtime-send-channel-event.ts +13 -2
- package/src/nodes/realtime/realtime-send-channel-message.ts +13 -2
- package/src/nodes/sms/sms-infobip.ts +14 -4
- package/src/nodes/sms/sms-smsapi.ts +14 -4
- package/src/nodes/sms/sms-textmagic.ts +14 -4
- package/src/nodes/sms/sms-twilio.ts +14 -4
- package/src/nodes/types.ts +9 -1
- package/src/nodes/utility/utility-similarity-scoring.ts +33 -12
- package/src/page-access-guard-generator.ts +154 -0
- package/src/password-reset-route-generator.ts +531 -0
- package/src/payments/payment-core-code.ts +12 -7
- package/src/project-code-scanner.ts +98 -0
- package/src/public-step-guards.ts +448 -0
- package/src/publish-refusals.ts +459 -0
- package/src/realtime-generator.ts +457 -234
- package/src/runtime-storage-generator.ts +270 -11
- package/src/security-runtime/index.ts +53 -0
- package/src/security-runtime/security-runtime-code.ts +579 -0
- package/src/security-scanner.ts +253 -10
- package/src/segment-splitter.ts +10 -2
- package/src/segment-trust.ts +205 -2
- package/src/self-call-headers.ts +46 -0
- package/src/sent-email-log/index.ts +16 -0
- package/src/sent-email-log/sent-email-log-code.ts +30 -4
- package/src/server-custom-node-call.ts +331 -0
- package/src/server-runtime-code.ts +488 -40
- package/src/session-revocation-generator.ts +177 -0
- package/src/slack-message-values.ts +84 -0
- package/src/transactional-email-code.ts +30 -4
- package/src/trigger-generator.ts +19 -3
- package/src/visitor-step-limits.ts +228 -0
- package/src/webhook-generator.ts +94 -14
- package/src/webhook-signature-verification.ts +13 -3
- package/src/workflow-auth-generator.ts +9 -4
- package/src/workflow-component-plugin.ts +14 -4
- package/src/workflow-project-plugin.ts +374 -61
- package/src/workflow-scope.ts +6 -0
|
@@ -0,0 +1,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,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildVisitorStepLimitGuard = exports.collectVisitorStepLimits = exports.readVisitorStepLimit = exports.VISITOR_LIMIT_CONFIG_KEY = void 0;
|
|
4
|
+
const security_runtime_1 = require("./security-runtime");
|
|
5
|
+
const newsletter_scope_1 = require("./newsletter/newsletter-scope");
|
|
6
|
+
/**
|
|
7
|
+
* A step any visitor may run, but not without end: a guest booking (which
|
|
8
|
+
* takes a place in the calendar and emails a confirmation), a newsletter
|
|
9
|
+
* signup (which adds an address to the merchant's audience). The feature that
|
|
10
|
+
* builds such a step declares how often one visitor may run it, on the step:
|
|
11
|
+
*
|
|
12
|
+
* config.visitorLimit = { limit: 10, windowSeconds: 3600 } // 429 past the limit
|
|
13
|
+
* config.visitorLimit = { limit: 5, windowSeconds: 3600, onLimit: 'skip' } // the step quietly does nothing
|
|
14
|
+
* config.visitorLimit = { …, scope: 'newsletter-signup' } // one budget for every such step
|
|
15
|
+
*
|
|
16
|
+
* Without `scope` the budget is the step's own (`workflow-step:<node id>`).
|
|
17
|
+
* With one, every step that names the same scope shares one budget per
|
|
18
|
+
* visitor (`visitor-limit:<scope>`): two signup blocks, or two booking pages,
|
|
19
|
+
* do not give a visitor twice the signups or bookings.
|
|
20
|
+
*
|
|
21
|
+
* The segment route that runs the step counts every request it answers for
|
|
22
|
+
* the visitor (IPv6 by its /64), in the app's database through the shared
|
|
23
|
+
* security runtime, BEFORE any step of the segment runs — so the count cannot
|
|
24
|
+
* be dodged by calling the route directly or by marking the step skipped.
|
|
25
|
+
* This deployment's own server code (the internal-call token) is not counted.
|
|
26
|
+
*
|
|
27
|
+
* ⛔ So a declared limit holds only in a route a BROWSER calls: a limited step
|
|
28
|
+
* inside a custom node that another server segment runs with the internal
|
|
29
|
+
* token is not counted there. Declare the limit on the step the visitor's
|
|
30
|
+
* request reaches (the feature builders do).
|
|
31
|
+
*
|
|
32
|
+
* `onLimit: 'skip'` is for a step whose visitor must see the same answer either
|
|
33
|
+
* way (a signup thanks a bot and a person alike): past the limit the step, and
|
|
34
|
+
* every step after it in the segment, is skipped and the route answers as it
|
|
35
|
+
* would for a request that changed nothing. A step marked `continueOnError`
|
|
36
|
+
* is optional: past its limit only that step is skipped, and what follows it
|
|
37
|
+
* (a booking's checkout after its newsletter tick) still runs. The skip is logged server-side
|
|
38
|
+
* (the scope only — never the visitor's address or input), so an owner can
|
|
39
|
+
* tell lost signups from no signups: at most one line per scope per minute
|
|
40
|
+
* and per instance, the line saying how many more were skipped since the
|
|
41
|
+
* last one — a bot past its limit does not flood the log.
|
|
42
|
+
*
|
|
43
|
+
* A declaration that cannot be read limits at the defaults (10 per hour): a
|
|
44
|
+
* step that asked for a limit never runs without one.
|
|
45
|
+
*/
|
|
46
|
+
exports.VISITOR_LIMIT_CONFIG_KEY = 'visitorLimit';
|
|
47
|
+
const DEFAULT_LIMIT = 10;
|
|
48
|
+
const DEFAULT_WINDOW_SECONDS = 3600;
|
|
49
|
+
const MAX_LIMIT = 10000;
|
|
50
|
+
const MAX_WINDOW_SECONDS = 7 * 86400;
|
|
51
|
+
const SCOPE_RE = /^[A-Za-z0-9_-]{1,60}$/;
|
|
52
|
+
const MAX_MESSAGE_LENGTH = 200;
|
|
53
|
+
const wholeInRange = (value, max) => typeof value === 'number' && Number.isInteger(value) && value >= 1 && value <= max ? value : null;
|
|
54
|
+
/** The limit a step's config declares, or null when it declares none. */
|
|
55
|
+
const readVisitorStepLimit = (config) => {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
const declared = config ? config[exports.VISITOR_LIMIT_CONFIG_KEY] : undefined;
|
|
58
|
+
if (declared === undefined || declared === null || declared === false) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const spec = typeof declared === 'object' ? declared : {};
|
|
62
|
+
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()
|
|
63
|
+
? { message: spec.message.trim().slice(0, MAX_MESSAGE_LENGTH) }
|
|
64
|
+
: {}));
|
|
65
|
+
};
|
|
66
|
+
exports.readVisitorStepLimit = readVisitorStepLimit;
|
|
67
|
+
const downstreamInSegment = (segment, startId) => {
|
|
68
|
+
const inSegment = new Set(segment.nodes.map((n) => n.id));
|
|
69
|
+
const seen = new Set();
|
|
70
|
+
const queue = [startId];
|
|
71
|
+
while (queue.length > 0) {
|
|
72
|
+
const current = queue.shift();
|
|
73
|
+
if (seen.has(current) || !inSegment.has(current)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
seen.add(current);
|
|
77
|
+
for (const edge of segment.edges || []) {
|
|
78
|
+
if (edge.source === current) {
|
|
79
|
+
queue.push(edge.target);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return Array.from(seen);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* The limit a step of these types has when its config declares none: the
|
|
87
|
+
* newsletter sign-up mails through the site's provider for every address a
|
|
88
|
+
* visitor types, so a step from the add-node menu, the AI or an import is
|
|
89
|
+
* held to the public sign-up route's own budget.
|
|
90
|
+
*/
|
|
91
|
+
const DEFAULT_VISITOR_STEP_LIMITS = {
|
|
92
|
+
'newsletter-subscribe': {
|
|
93
|
+
limit: newsletter_scope_1.NEWSLETTER_VISITOR_LIMIT,
|
|
94
|
+
windowSeconds: 3600,
|
|
95
|
+
onLimit: 'skip',
|
|
96
|
+
scope: newsletter_scope_1.NEWSLETTER_VISITOR_SCOPE,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
/** Every declared limit of a segment's steps (or its type's default), in step order. */
|
|
100
|
+
const collectVisitorStepLimits = (segment) => segment.nodes
|
|
101
|
+
.slice()
|
|
102
|
+
.sort((a, b) => (a.stepNumber || 0) - (b.stepNumber || 0))
|
|
103
|
+
.reduce((limits, node) => {
|
|
104
|
+
var _a;
|
|
105
|
+
const declared = (0, exports.readVisitorStepLimit)(node.config) ||
|
|
106
|
+
DEFAULT_VISITOR_STEP_LIMITS[node.type] ||
|
|
107
|
+
null;
|
|
108
|
+
if (declared) {
|
|
109
|
+
// An optional step (continueOnError) past its limit never stops what
|
|
110
|
+
// follows it: only the step itself is skipped.
|
|
111
|
+
const optional = ((_a = node.config) === null || _a === void 0 ? void 0 : _a.continueOnError) === true;
|
|
112
|
+
limits.push(Object.assign(Object.assign({ nodeId: node.id }, declared), { skipIds: declared.onLimit !== 'skip'
|
|
113
|
+
? []
|
|
114
|
+
: optional
|
|
115
|
+
? [node.id]
|
|
116
|
+
: downstreamInSegment(segment, node.id) }));
|
|
117
|
+
}
|
|
118
|
+
return limits;
|
|
119
|
+
}, []);
|
|
120
|
+
exports.collectVisitorStepLimits = collectVisitorStepLimits;
|
|
121
|
+
const SKIP_LOG_INTERVAL_MS = 60000;
|
|
122
|
+
/** One log line per scope per minute (per instance); the rest are counted into the next line. */
|
|
123
|
+
const SKIP_LOG_CODE = `
|
|
124
|
+
const __logStepLimitSkip = function (scope) {
|
|
125
|
+
var log = globalThis.__tqStepLimitSkipLog || (globalThis.__tqStepLimitSkipLog = {});
|
|
126
|
+
var now = Date.now();
|
|
127
|
+
var entry = log[scope];
|
|
128
|
+
if (entry && now - entry.since < ${SKIP_LOG_INTERVAL_MS}) {
|
|
129
|
+
entry.skipped += 1;
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
var more = entry && entry.skipped > 0 ? ' (and ' + entry.skipped + ' more since the last line)' : '';
|
|
133
|
+
console.warn('[workflow-step-limit] skipped past its visitor limit: ' + scope + more);
|
|
134
|
+
log[scope] = { since: now, skipped: 0 };
|
|
135
|
+
};`;
|
|
136
|
+
/**
|
|
137
|
+
* The route code that counts a segment's declared limits: '' for a segment
|
|
138
|
+
* without one, so every other route is byte-identical. Placed after the
|
|
139
|
+
* request context is claimed and the auth guard has run, before any step.
|
|
140
|
+
* `relativePrefix` leads from the route's folder to the project root.
|
|
141
|
+
*/
|
|
142
|
+
const buildVisitorStepLimitGuard = (segment, relativePrefix = '../../..') => {
|
|
143
|
+
const limits = (0, exports.collectVisitorStepLimits)(segment);
|
|
144
|
+
if (limits.length === 0) {
|
|
145
|
+
return '';
|
|
146
|
+
}
|
|
147
|
+
const checks = limits.map((step) => {
|
|
148
|
+
const scope = step.scope ? `visitor-limit:${step.scope}` : `workflow-step:${step.nodeId}`;
|
|
149
|
+
const options = JSON.stringify({
|
|
150
|
+
scope,
|
|
151
|
+
limit: step.limit,
|
|
152
|
+
windowSeconds: step.windowSeconds,
|
|
153
|
+
});
|
|
154
|
+
if (step.onLimit === 'skip') {
|
|
155
|
+
// No response object: past the limit the runtime answers nothing itself.
|
|
156
|
+
return `
|
|
157
|
+
if (!(await __stepLimiter.rateLimitRequest(req, null, ${options}))) {
|
|
158
|
+
__logStepLimitSkip(${JSON.stringify(scope)});
|
|
159
|
+
if (!context.__skippedNodes || typeof context.__skippedNodes !== 'object') context.__skippedNodes = {};
|
|
160
|
+
${JSON.stringify(step.skipIds)}.forEach(function (id) { context.__skippedNodes[id] = true; });
|
|
161
|
+
}`;
|
|
162
|
+
}
|
|
163
|
+
if (step.message) {
|
|
164
|
+
// Counted like any refused step; the 429 carries the step's own words.
|
|
165
|
+
return `
|
|
166
|
+
if (!(await __stepLimiter.rateLimitRequest(req, null, ${options}))) {
|
|
167
|
+
var __stepRetry = typeof __stepLimiter.peekRateLimitRequest === 'function' ? await __stepLimiter.peekRateLimitRequest(req, ${options}) : null;
|
|
168
|
+
if (__stepRetry && __stepRetry.retryAfter) res.setHeader('Retry-After', String(__stepRetry.retryAfter));
|
|
169
|
+
return res.status(429).json({ error: ${JSON.stringify(step.message)} });
|
|
170
|
+
}`;
|
|
171
|
+
}
|
|
172
|
+
return `
|
|
173
|
+
if (!(await __stepLimiter.rateLimitRequest(req, res, ${options}))) {
|
|
174
|
+
return;
|
|
175
|
+
}`;
|
|
176
|
+
});
|
|
177
|
+
return `
|
|
178
|
+
// Steps that declare how often one visitor may run them (a guest booking,
|
|
179
|
+
// a newsletter signup — see visitor-step-limits.ts): counted per visitor in
|
|
180
|
+
// the app's database for every request this route answers, before any step
|
|
181
|
+
// runs. This deployment's own server code is not counted.
|
|
182
|
+
if (!require('${relativePrefix}/utils/workflows/server-runtime').isInternalCall(req)) {
|
|
183
|
+
const __stepLimiter = require('${(0, security_runtime_1.securityRuntimeSpecifier)(relativePrefix)}');${limits.some((step) => step.onLimit === 'skip') ? SKIP_LOG_CODE : ''}${checks.join('')}
|
|
184
|
+
}`;
|
|
185
|
+
};
|
|
186
|
+
exports.buildVisitorStepLimitGuard = buildVisitorStepLimitGuard;
|
|
187
|
+
//# 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"}
|
|
@@ -4,6 +4,8 @@ exports.generateWebhookFiles = exports.generatePaypalWebhookCode = exports.gener
|
|
|
4
4
|
const teleport_types_1 = require("@teleporthq/teleport-types");
|
|
5
5
|
const payments_1 = require("./payments");
|
|
6
6
|
const payment_drivers_scope_1 = require("./payments/payment-drivers-scope");
|
|
7
|
+
const configured_nextauth_url_1 = require("./configured-nextauth-url");
|
|
8
|
+
const self_call_headers_1 = require("./self-call-headers");
|
|
7
9
|
/**
|
|
8
10
|
* The origin a legacy webhook route calls this deployment's own routes on
|
|
9
11
|
* (`/api/invoices/generate`, `/api/ecommerce/order-notification`). Those
|
|
@@ -15,7 +17,8 @@ const payment_drivers_scope_1 = require("./payments/payment-drivers-scope");
|
|
|
15
17
|
* NEXTAUTH_URL's origin when it is set — except that a local server on another
|
|
16
18
|
* port than a local NEXTAUTH_URL keeps its own loopback address (NEXTAUTH_URL
|
|
17
19
|
* stuck at :3000 while `next dev` runs on :3001). With no Host header at all,
|
|
18
|
-
* the configured URLs as before.
|
|
20
|
+
* the configured URLs as before. NEXTAUTH_URL is read as configured, never as
|
|
21
|
+
* the auth route rewrote it from a request (configured-nextauth-url.ts).
|
|
19
22
|
*/
|
|
20
23
|
const WEBHOOK_BASE_URL_CODE = `function __isLoopbackHost(host) {
|
|
21
24
|
var name = String(host || '').replace(/:[0-9]+$/, '').toLowerCase();
|
|
@@ -26,20 +29,22 @@ function __webhookBaseUrl(req) {
|
|
|
26
29
|
var headers = (req && req.headers) || {};
|
|
27
30
|
var host = headers.host || '';
|
|
28
31
|
if (!host) {
|
|
29
|
-
var envBaseUrl =
|
|
32
|
+
var envBaseUrl = ${configured_nextauth_url_1.CONFIGURED_NEXTAUTH_URL_EXPRESSION} || process.env.VERCEL_URL || '';
|
|
30
33
|
if (envBaseUrl && !envBaseUrl.startsWith('http')) envBaseUrl = 'https://' + envBaseUrl;
|
|
31
34
|
return envBaseUrl || 'http://localhost:3000';
|
|
32
35
|
}
|
|
33
36
|
var proto = headers['x-forwarded-proto'] || (__isLoopbackHost(host) ? 'http' : 'https');
|
|
34
37
|
var requestOrigin = String(proto).split(',')[0].trim() + '://' + host;
|
|
35
38
|
if (process.env.VERCEL) return requestOrigin;
|
|
36
|
-
var configured = String(
|
|
39
|
+
var configured = String(${configured_nextauth_url_1.CONFIGURED_NEXTAUTH_URL_EXPRESSION} || '').trim();
|
|
37
40
|
if (!configured) return requestOrigin;
|
|
38
41
|
var origin;
|
|
39
42
|
try { origin = new URL(configured).origin; } catch (e) { return requestOrigin; }
|
|
40
43
|
if (__isLoopbackHost(host) && __isLoopbackHost(new URL(origin).host)) return requestOrigin;
|
|
41
44
|
return origin;
|
|
42
|
-
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
${(0, self_call_headers_1.generateSelfCallHeadersCode)()}`;
|
|
43
48
|
const generateStripeWebhookCode = (invoiceSettings, ecommerceSettings) => {
|
|
44
49
|
const autoGenerateInvoice = (invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.enabled) && (invoiceSettings === null || invoiceSettings === void 0 ? void 0 : invoiceSettings.autoGenerateOnPayment);
|
|
45
50
|
const hasEcommerce = !!ecommerceSettings;
|
|
@@ -67,7 +72,7 @@ try { __paymentDrivers = require('../../../utils/payments'); } catch (e) { __pay
|
|
|
67
72
|
function __stripeSecretKey() {
|
|
68
73
|
return __paymentDrivers.core.credential('stripe', 'secretKey', ['STRIPE_TEST_KEY']);
|
|
69
74
|
}
|
|
70
|
-
${autoGenerateInvoice ||
|
|
75
|
+
${autoGenerateInvoice || hasEcommerce
|
|
71
76
|
? `
|
|
72
77
|
// Stripe reports money in the currency's smallest unit (JPY has none, KWD a
|
|
73
78
|
// thousandth); the store keeps the major one, converted as its drivers do.
|
|
@@ -126,7 +131,22 @@ module.exports = async function handler(req, res) {
|
|
|
126
131
|
if (session.payment_status !== 'paid' && session.payment_status !== 'no_payment_required') {
|
|
127
132
|
console.log('Checkout session completed, payment not received yet:', session.id);
|
|
128
133
|
break;
|
|
129
|
-
}
|
|
134
|
+
}${hasEcommerce
|
|
135
|
+
? `
|
|
136
|
+
// A session that took less than its order is due, or another
|
|
137
|
+
// currency, pays nothing: no paid mark, no invoice, no order email.
|
|
138
|
+
var sessionCheck = await __checkStripeSession(session);
|
|
139
|
+
if (!sessionCheck.ok) {
|
|
140
|
+
console.error('Stripe webhook: checkout ' + session.id + ' does not pay its order: ' + sessionCheck.reason);
|
|
141
|
+
// The order could not be read: Stripe retries a 500, so a database
|
|
142
|
+
// blip delays the paid mark instead of losing it.
|
|
143
|
+
if (sessionCheck.retry) {
|
|
144
|
+
res.status(500).json({ error: 'Webhook processing failed' });
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
}`
|
|
149
|
+
: ''}
|
|
130
150
|
${autoGenerateInvoice
|
|
131
151
|
? `await handleInvoiceGeneration(session, 'checkout', __baseUrl, stripeSecretKey);`
|
|
132
152
|
: `console.log('Checkout session completed:', session.id);`}
|
|
@@ -220,11 +240,69 @@ ${hasOrderNotifications ? generateOrderNotificationWebhookCode() : ''}
|
|
|
220
240
|
};
|
|
221
241
|
exports.generateStripeWebhookCode = generateStripeWebhookCode;
|
|
222
242
|
function generateEcommerceOrderUpdateCode() {
|
|
223
|
-
//
|
|
224
|
-
//
|
|
225
|
-
// mark-paid update plus invoice
|
|
226
|
-
// avoid two writes that race for the row.
|
|
243
|
+
// handleEcommerceOrderUpdate is used ONLY when invoice auto-generation is
|
|
244
|
+
// OFF — when invoices are on, handleInvoiceGeneration calls
|
|
245
|
+
// __linkInvoiceToOrder which does the same mark-paid update plus invoice
|
|
246
|
+
// linkage, so it is skipped to avoid two writes that race for the row.
|
|
247
|
+
// __checkStripeSession runs before either, the way the PayPal route's
|
|
248
|
+
// __checkPaypalCapture does, with the rule the workflow-driven "Process
|
|
249
|
+
// Payment Webhook" applies (a payment may not take less than is due).
|
|
227
250
|
return `
|
|
251
|
+
// Whether a paid checkout session may pay the store order it names: the order
|
|
252
|
+
// exists and the session took, in the order's currency, at least what the
|
|
253
|
+
// order is due — its total less what a gift card covered. A session that names
|
|
254
|
+
// no store order has nothing to check.
|
|
255
|
+
async function __checkStripeSession(session) {
|
|
256
|
+
var orderId = session && session.metadata && session.metadata.orderId;
|
|
257
|
+
if (!orderId) {
|
|
258
|
+
return { ok: true };
|
|
259
|
+
}
|
|
260
|
+
var connStr = process.env.TELEPORT_DB_CONNECTION_STRING || process.env.DATABASE_URL || '';
|
|
261
|
+
if (!connStr) {
|
|
262
|
+
return { ok: false, retry: true, reason: 'no database connection to check order ' + orderId + ' against' };
|
|
263
|
+
}
|
|
264
|
+
var pg;
|
|
265
|
+
try {
|
|
266
|
+
pg = require('pg');
|
|
267
|
+
} catch (e) {
|
|
268
|
+
return { ok: false, retry: true, reason: 'the pg module is unavailable to check order ' + orderId };
|
|
269
|
+
}
|
|
270
|
+
var client = new pg.Client({ connectionString: connStr, ssl: connStr.indexOf('sslmode=require') !== -1 ? { rejectUnauthorized: false } : undefined });
|
|
271
|
+
var order = null;
|
|
272
|
+
try {
|
|
273
|
+
await client.connect();
|
|
274
|
+
// gift_card_amount and currency are read through the row's JSON: a store
|
|
275
|
+
// provisioned before them has no such column.
|
|
276
|
+
var found = await client.query(
|
|
277
|
+
"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",
|
|
278
|
+
[String(orderId)]
|
|
279
|
+
);
|
|
280
|
+
order = found && found.rows && found.rows[0] ? found.rows[0] : null;
|
|
281
|
+
} catch (err) {
|
|
282
|
+
return { ok: false, retry: true, reason: 'order ' + orderId + ' could not be read (' + (err && err.message) + ')' };
|
|
283
|
+
} finally {
|
|
284
|
+
try { await client.end(); } catch (_e) {}
|
|
285
|
+
}
|
|
286
|
+
if (!order) {
|
|
287
|
+
return { ok: false, reason: 'the store has no order ' + orderId };
|
|
288
|
+
}
|
|
289
|
+
var paidCurrency = String(session.currency || '').toUpperCase();
|
|
290
|
+
var orderCurrency = String(order.currency || '').toUpperCase();
|
|
291
|
+
if (orderCurrency && paidCurrency !== orderCurrency) {
|
|
292
|
+
return { ok: false, reason: 'the session is in ' + (paidCurrency || 'no currency') + ' and order ' + orderId + ' in ' + orderCurrency };
|
|
293
|
+
}
|
|
294
|
+
// Whole cents, so 12.30 - 4.10 compares as 820 and never 8.199999999999999.
|
|
295
|
+
var due = Math.max(0, Math.round((Number(order.total_amount) - Number(order.gift_card_amount || 0)) * 100));
|
|
296
|
+
var paid = session.amount_total == null ? NaN : Math.round(__stripeMajor(session.amount_total, session.currency) * 100);
|
|
297
|
+
if (!isFinite(due) || !isFinite(paid) || paid < due) {
|
|
298
|
+
return {
|
|
299
|
+
ok: false,
|
|
300
|
+
reason: 'the session took ' + (isFinite(paid) ? (paid / 100).toFixed(2) : 'an unknown amount') + ' ' + paidCurrency + ' and order ' + orderId + ' is due ' + (due / 100).toFixed(2),
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
return { ok: true };
|
|
304
|
+
}
|
|
305
|
+
|
|
228
306
|
async function handleEcommerceOrderUpdate(session) {
|
|
229
307
|
try {
|
|
230
308
|
var orderId = session.metadata && session.metadata.orderId;
|
|
@@ -260,7 +338,7 @@ async function sendOrderNotification(session, baseUrl) {
|
|
|
260
338
|
await fetch(resolvedBaseUrl + '/api/ecommerce/order-notification', {
|
|
261
339
|
method: 'POST',
|
|
262
340
|
// The route emails the merchant only for the store's own server code.
|
|
263
|
-
headers: { 'Content-Type': 'application/json'
|
|
341
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
264
342
|
body: JSON.stringify({
|
|
265
343
|
orderId: orderId || session.id,
|
|
266
344
|
customerEmail: session.customer_email || (session.customer_details && session.customer_details.email) || '',
|
|
@@ -380,7 +458,7 @@ async function handleInvoiceGeneration(paymentObj, source, baseUrl, stripeSecret
|
|
|
380
458
|
method: 'POST',
|
|
381
459
|
// The route issues invoices only for the store's own server code, which
|
|
382
460
|
// presents the app secret.
|
|
383
|
-
headers: { 'Content-Type': 'application/json'
|
|
461
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
384
462
|
body: JSON.stringify(invoicePayload),
|
|
385
463
|
});
|
|
386
464
|
|
|
@@ -520,7 +598,7 @@ async function handleStripeInvoicePayment(stripeInvoice, baseUrl) {
|
|
|
520
598
|
method: 'POST',
|
|
521
599
|
// The route issues invoices only for the store's own server code, which
|
|
522
600
|
// presents the app secret.
|
|
523
|
-
headers: { 'Content-Type': 'application/json'
|
|
601
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
524
602
|
body: JSON.stringify(invoicePayload),
|
|
525
603
|
});
|
|
526
604
|
|
|
@@ -625,7 +703,7 @@ module.exports = async function handler(req, res) {
|
|
|
625
703
|
await fetch(__baseUrl + '/api/ecommerce/order-notification', {
|
|
626
704
|
method: 'POST',
|
|
627
705
|
// The route emails the merchant only for the store's own server code.
|
|
628
|
-
headers: { 'Content-Type': 'application/json'
|
|
706
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
629
707
|
body: JSON.stringify({
|
|
630
708
|
// The internal order id, so the route can load the order's own
|
|
631
709
|
// lines and the rates they were charged at; the capture id is
|
|
@@ -833,7 +911,7 @@ async function handlePaypalInvoiceGeneration(resource, baseUrl) {
|
|
|
833
911
|
method: 'POST',
|
|
834
912
|
// The route issues invoices only for the store's own server code, which
|
|
835
913
|
// presents the app secret.
|
|
836
|
-
headers: { 'Content-Type': 'application/json'
|
|
914
|
+
headers: __selfCallHeaders({ 'Content-Type': 'application/json' }),
|
|
837
915
|
body: JSON.stringify(invoicePayload),
|
|
838
916
|
});
|
|
839
917
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-generator.js","sourceRoot":"","sources":["../../src/webhook-generator.ts"],"names":[],"mappings":";;;AAAA,+DAKmC;AACnC,yCAAqF;AACrF,4EAA6E;
|
|
1
|
+
{"version":3,"file":"webhook-generator.js","sourceRoot":"","sources":["../../src/webhook-generator.ts"],"names":[],"mappings":";;;AAAA,+DAKmC;AACnC,yCAAqF;AACrF,4EAA6E;AAC7E,uEAA8E;AAC9E,2DAAiE;AAEjE;;;;;;;;;;;;;GAaG;AACH,MAAM,qBAAqB,GAAG;;;;;;;;;uBASP,4DAAkC;;;;;;;4BAO7B,4DAAkC;;;;;;;;EAQ5D,IAAA,+CAA2B,GAAE,EAAE,CAAA;AAE1B,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;AAlNY,QAAA,yBAAyB,6BAkNrC;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;AAEM,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;AAzYY,QAAA,yBAAyB,6BAyYrC;AAUM,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,IAAA,uCAA4B,EAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC7D,IAAA,qCAA0B,EACxB,SAAS,EACT,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kDAA0B,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,yBAAQ,CAAC,EAAE;oBACrB,OAAO,EAAE,IAAA,iCAAyB,EAAC,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,yBAAQ,CAAC,EAAE;oBACrB,OAAO,EAAE,IAAA,iCAAyB,EAAC,eAAe,EAAE,iBAAiB,CAAC;iBACvE;aACF;SACF,CAAC,CAAA;KACH;AACH,CAAC,CAAA;AA/DY,QAAA,oBAAoB,wBA+DhC"}
|
|
@@ -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"}
|
|
@@ -96,19 +96,29 @@ exports.generateStripeSignatureVerificationCode = generateStripeSignatureVerific
|
|
|
96
96
|
// sandbox verification to the live API, which rejected it.
|
|
97
97
|
const generatePaypalSignatureVerificationCode = () => {
|
|
98
98
|
return `
|
|
99
|
+
// The named variables first, then a NUMBERED copy of the stored name (the
|
|
100
|
+
// editor numbers a re-typed secret: …_CLIENT_ID2), the highest number being
|
|
101
|
+
// the newest. Never any other variable that merely starts with the name.
|
|
99
102
|
function resolvePaypalEnv(candidates, prefix) {
|
|
100
103
|
var env = process.env;
|
|
101
104
|
for (var i = 0; i < candidates.length; i++) {
|
|
102
105
|
var value = candidates[i] ? env[candidates[i]] : '';
|
|
103
106
|
if (value && String(value).length > 0) return String(value);
|
|
104
107
|
}
|
|
108
|
+
var best = '';
|
|
109
|
+
var bestNumber = -1;
|
|
105
110
|
var keys = Object.keys(env);
|
|
106
111
|
for (var k = 0; k < keys.length; k++) {
|
|
107
|
-
if (keys[k].indexOf(prefix)
|
|
108
|
-
|
|
112
|
+
if (keys[k].indexOf(prefix) !== 0) continue;
|
|
113
|
+
var suffix = keys[k].slice(prefix.length);
|
|
114
|
+
if (!/^[0-9]+$/.test(suffix)) continue;
|
|
115
|
+
var number = parseInt(suffix, 10);
|
|
116
|
+
if (env[keys[k]] && String(env[keys[k]]).length > 0 && number > bestNumber) {
|
|
117
|
+
best = String(env[keys[k]]);
|
|
118
|
+
bestNumber = number;
|
|
109
119
|
}
|
|
110
120
|
}
|
|
111
|
-
return
|
|
121
|
+
return best;
|
|
112
122
|
}
|
|
113
123
|
|
|
114
124
|
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;AAC1E,MAAM,uBAAuB,GAAG,GAAW,EAAE;IAClD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCP,CAAA;AACF,CAAC,CAAA;AArCY,QAAA,uBAAuB,2BAqCnC;AAEM,MAAM,uCAAuC,GAAG,GAAW,EAAE;IAClE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CP,CAAA;AACF,CAAC,CAAA;AA5CY,QAAA,uCAAuC,2CA4CnD;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,0EAA0E;AAC1E,6EAA6E;AAC7E,yEAAyE;AACzE,2DAA2D;AACpD,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;AAC1E,MAAM,uBAAuB,GAAG,GAAW,EAAE;IAClD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCP,CAAA;AACF,CAAC,CAAA;AArCY,QAAA,uBAAuB,2BAqCnC;AAEM,MAAM,uCAAuC,GAAG,GAAW,EAAE;IAClE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CP,CAAA;AACF,CAAC,CAAA;AA5CY,QAAA,uCAAuC,2CA4CnD;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,0EAA0E;AAC1E,6EAA6E;AAC7E,yEAAyE;AACzE,2DAA2D;AACpD,MAAM,uCAAuC,GAAG,GAAW,EAAE;IAClE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwFP,CAAA;AACF,CAAC,CAAA;AA1FY,QAAA,uCAAuC,2CA0FnD;AAEM,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;AA7BY,QAAA,qCAAqC,yCA6BjD;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,wEAAwE;AACjE,MAAM,+BAA+B,GAAG,GAAW,EAAE;IAC1D,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCP,CAAA;AACF,CAAC,CAAA;AAvCY,QAAA,+BAA+B,mCAuC3C;AAED;;;;;;;;;;;;;GAaG;AACI,MAAM,sCAAsC,GAAG,GAAW,EAAE;IACjE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyDP,CAAA;AACF,CAAC,CAAA;AA3DY,QAAA,sCAAsC,0CA2DlD;AAEM,MAAM,oCAAoC,GAAG,GAAW,EAAE;IAC/D,OAAO;QACL,IAAA,+CAAuC,GAAE;QACzC,IAAA,+CAAuC,GAAE;QACzC,IAAA,6CAAqC,EAAC,QAAQ,CAAC;QAC/C,IAAA,6CAAqC,EAAC,MAAM,CAAC;QAC7C,IAAA,uCAA+B,GAAE;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA;AARY,QAAA,oCAAoC,wCAQhD"}
|
|
@@ -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"}
|
|
@@ -30,7 +30,9 @@ exports.ROLE_OF_TOKEN_CODE = `function roleOf(token) {
|
|
|
30
30
|
* protection + a scan of its graph for user-owned writes), so enforcement is a
|
|
31
31
|
* single local JWT decode — `getToken` reads the session cookie the browser
|
|
32
32
|
* already sends and verifies it with `NEXTAUTH_SECRET`. No DB, no network, no
|
|
33
|
-
* round trip
|
|
33
|
+
* round trip — except the shared reader's session-stamp check, which reads a
|
|
34
|
+
* stamped session's account at most once a minute per instance
|
|
35
|
+
* (`session-revocation-generator.ts`). `next-auth/jwt` is required LAZILY so a project generated without
|
|
34
36
|
* authentication (where the package is absent) never fails to load this file —
|
|
35
37
|
* such projects also carry no protected workflows, so the guard no-ops.
|
|
36
38
|
*
|
|
@@ -50,9 +52,12 @@ const generateWorkflowAuthHelperFile = (options = {}) => {
|
|
|
50
52
|
// (const __WF_AUTH) computed by the GUI mapper from the protection of the
|
|
51
53
|
// page(s) that trigger the workflow plus a graph scan for user-owned writes.
|
|
52
54
|
|
|
53
|
-
${(0, session_cookie_resolver_1.generateCommonJsSessionTokenResolverCode)(
|
|
55
|
+
${(0, session_cookie_resolver_1.generateCommonJsSessionTokenResolverCode)('../..', {
|
|
56
|
+
withRevocation: options.withSessionRevocation !== false,
|
|
57
|
+
})}
|
|
54
58
|
function getSessionToken(req) {
|
|
55
|
-
// Local cookie decode
|
|
59
|
+
// Local cookie decode, then the shared session-stamp check of the reader
|
|
60
|
+
// (a session revoked by a password change is no session).
|
|
56
61
|
return __tqSessionToken(req);
|
|
57
62
|
}
|
|
58
63
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-auth-generator.js","sourceRoot":"","sources":["../../src/workflow-auth-generator.ts"],"names":[],"mappings":";;;AACA,uEAAoF;AAEpF;;;;GAIG;AACU,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;EAchC,CAAA;AAEF
|
|
1
|
+
{"version":3,"file":"workflow-auth-generator.js","sourceRoot":"","sources":["../../src/workflow-auth-generator.ts"],"names":[],"mappings":";;;AACA,uEAAoF;AAEpF;;;;GAIG;AACU,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;EAchC,CAAA;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACI,MAAM,8BAA8B,GAAG,CAC5C,UAA+E,EAAE,EACzE,EAAE;IACV,OAAO;;;;;;;;;EASP,IAAA,kEAAwC,EAAC,OAAO,EAAE;QAClD,cAAc,EAAE,OAAO,CAAC,qBAAqB,KAAK,KAAK;KACxD,CAAC;;;;;;;;;;;;;;EAcA,0BAAkB;;EAElB,8BAA8B,CAAC,OAAO,CAAC,oBAAoB,KAAK,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsItE,CAAA;AACD,CAAC,CAAA;AArKY,QAAA,8BAA8B,kCAqK1C;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;AAE3F,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;AA7CY,QAAA,0BAA0B,8BA6CtC"}
|