@teleporthq/teleport-plugin-next-workflows 0.44.11 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/_helpers/fake-fetch.ts +75 -0
- package/__tests__/_helpers/gui-place-order-statements.ts +17 -0
- package/__tests__/_helpers/inserted-lines.ts +22 -0
- package/__tests__/_helpers/invoice-store.ts +10 -1
- package/__tests__/_helpers/load-security-runtime.ts +45 -0
- package/__tests__/_helpers/load-server-runtime.ts +26 -3
- package/__tests__/_helpers/run-account-delete-route.ts +3 -1
- package/__tests__/_helpers/run-generated-middleware.ts +7 -2
- package/__tests__/account-delete-owned-rows.test.ts +3 -1
- package/__tests__/adopted-element-trigger-code.test.ts +128 -0
- package/__tests__/analytics-track-outcome.test.ts +145 -0
- package/__tests__/auth-password-change-ends-sessions.test.ts +8 -1
- package/__tests__/auth-password-security.test.ts +2275 -0
- package/__tests__/auth-session-cost.test.ts +31 -0
- package/__tests__/auth-signup-route.test.ts +960 -0
- package/__tests__/authored-code-every-path.test.ts +247 -0
- package/__tests__/automations-bus.test.ts +3820 -0
- package/__tests__/automations-catalog-drift.test.ts +97 -0
- package/__tests__/booking-calendar-feed-route.test.ts +20 -3
- package/__tests__/cart-price-order.test.ts +336 -1
- package/__tests__/code-lookup-rate-limit-route.test.ts +189 -0
- package/__tests__/cost-bearing-node-types.test.ts +119 -0
- package/__tests__/credential-columns-reply.test.ts +9 -0
- package/__tests__/credential-result-reply.test.ts +19 -5
- package/__tests__/cron-route-loop-templateparams.test.ts +6 -3
- package/__tests__/custom-js-authored-code.test.ts +304 -0
- package/__tests__/custom-node-custom-code-gate.test.ts +136 -0
- package/__tests__/custom-node-step-handlers.test.ts +251 -0
- package/__tests__/custom-node-step-reach.test.ts +63 -0
- package/__tests__/data-api-anon-user-id-fallback.test.ts +7 -2
- package/__tests__/data-api-browser-reads.test.ts +7 -0
- package/__tests__/data-api-business-events.test.ts +403 -0
- package/__tests__/data-api-invalid-body.test.ts +7 -0
- package/__tests__/data-api-low-stock-autofire.test.ts +30 -4
- package/__tests__/data-api-optional-feature-columns.test.ts +44 -0
- package/__tests__/data-api-owner-scope-credentials.test.ts +1324 -0
- package/__tests__/data-api-protected-tables.test.ts +48 -15
- package/__tests__/data-api-retired-table-and-account-fields.test.ts +208 -0
- package/__tests__/email-locale-senders.test.ts +5 -3
- package/__tests__/expression-injection.test.ts +343 -0
- package/__tests__/fixtures/admin-file-workflows.json +242 -0
- package/__tests__/form-confirmation-email-template.test.ts +44 -0
- package/__tests__/internal-request-headers.test.ts +25 -0
- package/__tests__/invoice-pdf-service-project-header.test.ts +120 -0
- package/__tests__/invoice-self-call-origin.test.ts +57 -1
- package/__tests__/legacy-webhook-self-calls.test.ts +86 -1
- package/__tests__/middleware-home-route-protection.test.ts +3 -1
- package/__tests__/middleware-subscriber-access.test.ts +1 -1
- package/__tests__/newsletter-admin-route.test.ts +649 -0
- package/__tests__/newsletter-plugin.test.ts +1248 -0
- package/__tests__/outbound-nodes-security.test.ts +1929 -0
- package/__tests__/page-access-guard.test.ts +217 -0
- package/__tests__/page-access-route-table.test.ts +231 -0
- package/__tests__/payment-drivers-module.test.ts +23 -0
- package/__tests__/payment-legacy-webhook-routes.test.ts +100 -5
- package/__tests__/payment-webhook-route.test.ts +4 -1
- package/__tests__/paypal-webhook-signature-verification.test.ts +44 -0
- package/__tests__/place-order-guards.test.ts +506 -0
- package/__tests__/public-step-guards.test.ts +310 -0
- package/__tests__/publish-refusals.test.ts +505 -0
- package/__tests__/realtime-identity-routes.test.ts +492 -0
- package/__tests__/record-event-writer-server-only.test.ts +975 -0
- package/__tests__/resolve-config-template-params.test.ts +3 -3
- package/__tests__/runtime-storage-upload-access.test.ts +280 -17
- package/__tests__/security-integration-env-names.test.ts +74 -0
- package/__tests__/security-lists-parity.test.ts +245 -0
- package/__tests__/security-runtime-shadow.test.ts +224 -1
- package/__tests__/security-runtime.test.ts +893 -0
- package/__tests__/segment-rate-limit-error-branch.test.ts +284 -0
- package/__tests__/segment-route-abuse-gate.test.ts +309 -0
- package/__tests__/server-job-hops-real-data-api.test.ts +669 -0
- package/__tests__/server-session-identity.test.ts +522 -0
- package/__tests__/server-step-chain.test.ts +222 -0
- package/__tests__/server-step-signing.test.ts +107 -2
- package/__tests__/session-cookie-resolver.test.ts +62 -106
- package/__tests__/signup-event.test.ts +649 -0
- package/__tests__/signup-reply-identical.test.ts +144 -0
- package/__tests__/slack-message-escaping.test.ts +123 -0
- package/__tests__/visitor-step-limits.test.ts +318 -0
- package/__tests__/webhook-delivery-lease.test.ts +4 -1
- package/__tests__/webpack-safe-handlers.test.ts +57 -8
- package/__tests__/workflow-auth-guard.test.ts +9 -1
- package/dist/cjs/account-delete-route-generator.d.ts +1 -0
- package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
- package/dist/cjs/account-delete-route-generator.js +18 -3
- package/dist/cjs/account-delete-route-generator.js.map +1 -1
- package/dist/cjs/api-route-generator.d.ts +52 -3
- package/dist/cjs/api-route-generator.d.ts.map +1 -1
- package/dist/cjs/api-route-generator.js +600 -145
- package/dist/cjs/api-route-generator.js.map +1 -1
- package/dist/cjs/auth-generator.d.ts +126 -3
- package/dist/cjs/auth-generator.d.ts.map +1 -1
- package/dist/cjs/auth-generator.js +1353 -139
- package/dist/cjs/auth-generator.js.map +1 -1
- package/dist/cjs/automations/activity-kicks.d.ts +12 -0
- package/dist/cjs/automations/activity-kicks.d.ts.map +1 -0
- package/dist/cjs/automations/activity-kicks.js +123 -0
- package/dist/cjs/automations/activity-kicks.js.map +1 -0
- package/dist/cjs/automations/app-events-source.d.ts +33 -0
- package/dist/cjs/automations/app-events-source.d.ts.map +1 -0
- package/dist/cjs/automations/app-events-source.js +109 -0
- package/dist/cjs/automations/app-events-source.js.map +1 -0
- package/dist/cjs/automations/automations-project-plugin.d.ts +21 -0
- package/dist/cjs/automations/automations-project-plugin.d.ts.map +1 -0
- package/dist/cjs/automations/automations-project-plugin.js +102 -0
- package/dist/cjs/automations/automations-project-plugin.js.map +1 -0
- package/dist/cjs/automations/automations-scope.d.ts +104 -0
- package/dist/cjs/automations/automations-scope.d.ts.map +1 -0
- package/dist/cjs/automations/automations-scope.js +176 -0
- package/dist/cjs/automations/automations-scope.js.map +1 -0
- package/dist/cjs/automations/dispatcher-source.d.ts +72 -0
- package/dist/cjs/automations/dispatcher-source.d.ts.map +1 -0
- package/dist/cjs/automations/dispatcher-source.js +1008 -0
- package/dist/cjs/automations/dispatcher-source.js.map +1 -0
- package/dist/cjs/automations/event-bus-source.d.ts +44 -0
- package/dist/cjs/automations/event-bus-source.d.ts.map +1 -0
- package/dist/cjs/automations/event-bus-source.js +427 -0
- package/dist/cjs/automations/event-bus-source.js.map +1 -0
- package/dist/cjs/automations/handler-module-generator.d.ts +25 -0
- package/dist/cjs/automations/handler-module-generator.d.ts.map +1 -0
- package/dist/cjs/automations/handler-module-generator.js +78 -0
- package/dist/cjs/automations/handler-module-generator.js.map +1 -0
- package/dist/cjs/automations/hydrators-source.d.ts +33 -0
- package/dist/cjs/automations/hydrators-source.d.ts.map +1 -0
- package/dist/cjs/automations/hydrators-source.js +571 -0
- package/dist/cjs/automations/hydrators-source.js.map +1 -0
- package/dist/cjs/booking-calendar-feed-route-generator.d.ts.map +1 -1
- package/dist/cjs/booking-calendar-feed-route-generator.js +8 -0
- package/dist/cjs/booking-calendar-feed-route-generator.js.map +1 -1
- package/dist/cjs/configured-nextauth-url.d.ts +17 -0
- package/dist/cjs/configured-nextauth-url.d.ts.map +1 -0
- package/dist/cjs/configured-nextauth-url.js +20 -0
- package/dist/cjs/configured-nextauth-url.js.map +1 -0
- package/dist/cjs/cron-request-verification.d.ts +22 -1
- package/dist/cjs/cron-request-verification.d.ts.map +1 -1
- package/dist/cjs/cron-request-verification.js +50 -6
- package/dist/cjs/cron-request-verification.js.map +1 -1
- package/dist/cjs/data-api-route-generator.d.ts +19 -0
- package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
- package/dist/cjs/data-api-route-generator.js +711 -43
- package/dist/cjs/data-api-route-generator.js.map +1 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts +3 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.js +45 -5
- package/dist/cjs/ecommerce/parameterized-stock-chain.js.map +1 -1
- package/dist/cjs/ecommerce/place-order-guards.d.ts +126 -0
- package/dist/cjs/ecommerce/place-order-guards.d.ts.map +1 -0
- package/dist/cjs/ecommerce/place-order-guards.js +670 -0
- package/dist/cjs/ecommerce/place-order-guards.js.map +1 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts +2 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/cjs/ecommerce-customhandler-rewriter.js +38 -2
- package/dist/cjs/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +368 -60
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/graph-utils.d.ts +9 -0
- package/dist/cjs/graph-utils.d.ts.map +1 -1
- package/dist/cjs/graph-utils.js +32 -1
- package/dist/cjs/graph-utils.js.map +1 -1
- package/dist/cjs/index.d.ts +20 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +72 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/invoice/api-routes-code.d.ts +9 -3
- package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/cjs/invoice/api-routes-code.js +9 -7
- package/dist/cjs/invoice/api-routes-code.js.map +1 -1
- package/dist/cjs/invoice/index.d.ts.map +1 -1
- package/dist/cjs/invoice/index.js +12 -7
- package/dist/cjs/invoice/index.js.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.js +8 -3
- package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/cjs/invoice/pdf-generator-code.d.ts.map +1 -1
- package/dist/cjs/invoice/pdf-generator-code.js +2 -1
- package/dist/cjs/invoice/pdf-generator-code.js.map +1 -1
- package/dist/cjs/invoice/pdf-service-client-code.d.ts.map +1 -1
- package/dist/cjs/invoice/pdf-service-client-code.js +15 -7
- package/dist/cjs/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/cjs/newsletter/admin-route-code.d.ts +60 -0
- package/dist/cjs/newsletter/admin-route-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/admin-route-code.js +300 -0
- package/dist/cjs/newsletter/admin-route-code.js.map +1 -0
- package/dist/cjs/newsletter/helper-code.d.ts +109 -0
- package/dist/cjs/newsletter/helper-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/helper-code.js +662 -0
- package/dist/cjs/newsletter/helper-code.js.map +1 -0
- package/dist/cjs/newsletter/newsletter-scope.d.ts +65 -0
- package/dist/cjs/newsletter/newsletter-scope.d.ts.map +1 -0
- package/dist/cjs/newsletter/newsletter-scope.js +103 -0
- package/dist/cjs/newsletter/newsletter-scope.js.map +1 -0
- package/dist/cjs/newsletter/project-plugin.d.ts +18 -0
- package/dist/cjs/newsletter/project-plugin.d.ts.map +1 -0
- package/dist/cjs/newsletter/project-plugin.js +97 -0
- package/dist/cjs/newsletter/project-plugin.js.map +1 -0
- package/dist/cjs/newsletter/routes-code.d.ts +6 -0
- package/dist/cjs/newsletter/routes-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/routes-code.js +181 -0
- package/dist/cjs/newsletter/routes-code.js.map +1 -0
- package/dist/cjs/nodes/account/account-compare-passwords.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-compare-passwords.js +16 -6
- package/dist/cjs/nodes/account/account-compare-passwords.js.map +1 -1
- package/dist/cjs/nodes/account/account-delete-current.js +1 -1
- package/dist/cjs/nodes/account/account-get-current.js +1 -1
- package/dist/cjs/nodes/account/account-hash-password.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-hash-password.js +15 -3
- package/dist/cjs/nodes/account/account-hash-password.js.map +1 -1
- package/dist/cjs/nodes/account/account-login.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-login.js +23 -6
- package/dist/cjs/nodes/account/account-login.js.map +1 -1
- package/dist/cjs/nodes/account/account-logout.js +1 -1
- package/dist/cjs/nodes/account/account-refresh-session.js +1 -1
- package/dist/cjs/nodes/account/account-request-password-reset.d.ts +3 -0
- package/dist/cjs/nodes/account/account-request-password-reset.d.ts.map +1 -0
- package/dist/cjs/nodes/account/account-request-password-reset.js +46 -0
- package/dist/cjs/nodes/account/account-request-password-reset.js.map +1 -0
- package/dist/cjs/nodes/account/account-reset-password.d.ts +3 -0
- package/dist/cjs/nodes/account/account-reset-password.d.ts.map +1 -0
- package/dist/cjs/nodes/account/account-reset-password.js +44 -0
- package/dist/cjs/nodes/account/account-reset-password.js.map +1 -0
- package/dist/cjs/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-signup.js +82 -19
- package/dist/cjs/nodes/account/account-signup.js.map +1 -1
- package/dist/cjs/nodes/account/account-social-login.js +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.js +20 -5
- package/dist/cjs/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.js +20 -5
- package/dist/cjs/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js +10 -2
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
- package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts +31 -2
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.js +125 -11
- package/dist/cjs/nodes/ai/ai-provider-utils.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.js +6 -2
- package/dist/cjs/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js +20 -5
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.js +20 -5
- package/dist/cjs/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.js +20 -5
- package/dist/cjs/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.js +20 -5
- package/dist/cjs/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts +3 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.js +110 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.js.map +1 -0
- package/dist/cjs/nodes/cart/cart-price-order.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-price-order.js +161 -2
- package/dist/cjs/nodes/cart/cart-price-order.js.map +1 -1
- package/dist/cjs/nodes/cost-bearing-node-types.d.ts +4 -0
- package/dist/cjs/nodes/cost-bearing-node-types.d.ts.map +1 -0
- package/dist/cjs/nodes/cost-bearing-node-types.js +43 -0
- package/dist/cjs/nodes/cost-bearing-node-types.js.map +1 -0
- package/dist/cjs/nodes/data/data-select.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-select.js +12 -2
- package/dist/cjs/nodes/data/data-select.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.js +15 -11
- package/dist/cjs/nodes/email/email-mailersend.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.js +15 -15
- package/dist/cjs/nodes/email/email-mailgun.js.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.js +15 -15
- package/dist/cjs/nodes/email/email-postmark.js.map +1 -1
- package/dist/cjs/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-resend.js +15 -15
- package/dist/cjs/nodes/email/email-resend.js.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.js +15 -15
- package/dist/cjs/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/cjs/nodes/email/html-escape-code.d.ts +3 -0
- package/dist/cjs/nodes/email/html-escape-code.d.ts.map +1 -0
- package/dist/cjs/nodes/email/html-escape-code.js +23 -0
- package/dist/cjs/nodes/email/html-escape-code.js.map +1 -0
- package/dist/cjs/nodes/email/message-trust.d.ts +40 -0
- package/dist/cjs/nodes/email/message-trust.d.ts.map +1 -0
- package/dist/cjs/nodes/email/message-trust.js +167 -0
- package/dist/cjs/nodes/email/message-trust.js.map +1 -0
- package/dist/cjs/nodes/email/outbound-message-guard.d.ts +113 -0
- package/dist/cjs/nodes/email/outbound-message-guard.d.ts.map +1 -0
- package/dist/cjs/nodes/email/outbound-message-guard.js +460 -0
- package/dist/cjs/nodes/email/outbound-message-guard.js.map +1 -0
- package/dist/cjs/nodes/email/trusted-html-code.d.ts +22 -0
- package/dist/cjs/nodes/email/trusted-html-code.d.ts.map +1 -0
- package/dist/cjs/nodes/email/trusted-html-code.js +52 -0
- package/dist/cjs/nodes/email/trusted-html-code.js.map +1 -0
- package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.js +44 -7
- package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
- package/dist/cjs/nodes/general/general-http-request.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-http-request.js +431 -45
- package/dist/cjs/nodes/general/general-http-request.js.map +1 -1
- package/dist/cjs/nodes/general/general-rate-limiter.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-rate-limiter.js +46 -78
- package/dist/cjs/nodes/general/general-rate-limiter.js.map +1 -1
- package/dist/cjs/nodes/general/general-wait.d.ts +3 -0
- package/dist/cjs/nodes/general/general-wait.d.ts.map +1 -0
- package/dist/cjs/nodes/general/general-wait.js +81 -0
- package/dist/cjs/nodes/general/general-wait.js.map +1 -0
- package/dist/cjs/nodes/general/visitor-request.d.ts +44 -0
- package/dist/cjs/nodes/general/visitor-request.d.ts.map +1 -0
- package/dist/cjs/nodes/general/visitor-request.js +72 -0
- package/dist/cjs/nodes/general/visitor-request.js.map +1 -0
- package/dist/cjs/nodes/index.d.ts.map +1 -1
- package/dist/cjs/nodes/index.js +7 -1
- package/dist/cjs/nodes/index.js.map +1 -1
- package/dist/cjs/nodes/integrations/integration-slack.d.ts.map +1 -1
- package/dist/cjs/nodes/integrations/integration-slack.js +17 -6
- package/dist/cjs/nodes/integrations/integration-slack.js.map +1 -1
- package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts +3 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.js +41 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.js.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.js +69 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.js.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js +42 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
- package/dist/cjs/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-join-channel.js +5 -4
- package/dist/cjs/nodes/realtime/realtime-join-channel.js.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.js +11 -2
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.js.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.js +11 -2
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-infobip.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-infobip.js +11 -8
- package/dist/cjs/nodes/sms/sms-infobip.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-smsapi.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-smsapi.js +11 -8
- package/dist/cjs/nodes/sms/sms-smsapi.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-textmagic.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-textmagic.js +11 -8
- package/dist/cjs/nodes/sms/sms-textmagic.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-twilio.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-twilio.js +12 -10
- package/dist/cjs/nodes/sms/sms-twilio.js.map +1 -1
- package/dist/cjs/nodes/types.d.ts +8 -1
- package/dist/cjs/nodes/types.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js +29 -10
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/cjs/page-access-guard-generator.d.ts +23 -0
- package/dist/cjs/page-access-guard-generator.d.ts.map +1 -0
- package/dist/cjs/page-access-guard-generator.js +135 -0
- package/dist/cjs/page-access-guard-generator.js.map +1 -0
- package/dist/cjs/password-reset-route-generator.d.ts +119 -0
- package/dist/cjs/password-reset-route-generator.d.ts.map +1 -0
- package/dist/cjs/password-reset-route-generator.js +460 -0
- package/dist/cjs/password-reset-route-generator.js.map +1 -0
- package/dist/cjs/payments/payment-core-code.d.ts.map +1 -1
- package/dist/cjs/payments/payment-core-code.js +12 -7
- package/dist/cjs/payments/payment-core-code.js.map +1 -1
- package/dist/cjs/project-code-scanner.d.ts +11 -0
- package/dist/cjs/project-code-scanner.d.ts.map +1 -0
- package/dist/cjs/project-code-scanner.js +80 -0
- package/dist/cjs/project-code-scanner.js.map +1 -0
- package/dist/cjs/public-step-guards.d.ts +122 -0
- package/dist/cjs/public-step-guards.d.ts.map +1 -0
- package/dist/cjs/public-step-guards.js +288 -0
- package/dist/cjs/public-step-guards.js.map +1 -0
- package/dist/cjs/publish-refusals.d.ts +66 -0
- package/dist/cjs/publish-refusals.d.ts.map +1 -0
- package/dist/cjs/publish-refusals.js +278 -0
- package/dist/cjs/publish-refusals.js.map +1 -0
- package/dist/cjs/realtime-generator.d.ts +63 -1
- package/dist/cjs/realtime-generator.d.ts.map +1 -1
- package/dist/cjs/realtime-generator.js +404 -230
- package/dist/cjs/realtime-generator.js.map +1 -1
- package/dist/cjs/runtime-storage-generator.d.ts +32 -1
- package/dist/cjs/runtime-storage-generator.d.ts.map +1 -1
- package/dist/cjs/runtime-storage-generator.js +265 -12
- package/dist/cjs/runtime-storage-generator.js.map +1 -1
- package/dist/cjs/security-runtime/index.d.ts +14 -0
- package/dist/cjs/security-runtime/index.d.ts.map +1 -0
- package/dist/cjs/security-runtime/index.js +48 -0
- package/dist/cjs/security-runtime/index.js.map +1 -0
- package/dist/cjs/security-runtime/security-runtime-code.d.ts +53 -0
- package/dist/cjs/security-runtime/security-runtime-code.d.ts.map +1 -0
- package/dist/cjs/security-runtime/security-runtime-code.js +580 -0
- package/dist/cjs/security-runtime/security-runtime-code.js.map +1 -0
- package/dist/cjs/security-scanner.d.ts +72 -3
- package/dist/cjs/security-scanner.d.ts.map +1 -1
- package/dist/cjs/security-scanner.js +220 -8
- package/dist/cjs/security-scanner.js.map +1 -1
- package/dist/cjs/segment-splitter.d.ts.map +1 -1
- package/dist/cjs/segment-splitter.js +10 -2
- package/dist/cjs/segment-splitter.js.map +1 -1
- package/dist/cjs/segment-trust.d.ts +36 -0
- package/dist/cjs/segment-trust.d.ts.map +1 -1
- package/dist/cjs/segment-trust.js +147 -3
- package/dist/cjs/segment-trust.js.map +1 -1
- package/dist/cjs/self-call-headers.d.ts +31 -0
- package/dist/cjs/self-call-headers.d.ts.map +1 -0
- package/dist/cjs/self-call-headers.js +48 -0
- package/dist/cjs/self-call-headers.js.map +1 -0
- package/dist/cjs/sent-email-log/index.d.ts +7 -0
- package/dist/cjs/sent-email-log/index.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/index.js +17 -1
- package/dist/cjs/sent-email-log/index.js.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts +7 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.js +17 -3
- package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/cjs/server-custom-node-call.d.ts +79 -0
- package/dist/cjs/server-custom-node-call.d.ts.map +1 -0
- package/dist/cjs/server-custom-node-call.js +285 -0
- package/dist/cjs/server-custom-node-call.js.map +1 -0
- package/dist/cjs/server-runtime-code.d.ts +39 -12
- package/dist/cjs/server-runtime-code.d.ts.map +1 -1
- package/dist/cjs/server-runtime-code.js +484 -41
- package/dist/cjs/server-runtime-code.js.map +1 -1
- package/dist/cjs/session-cookie-resolver.d.ts +3 -1
- package/dist/cjs/session-cookie-resolver.d.ts.map +1 -1
- package/dist/cjs/session-revocation-generator.d.ts +39 -0
- package/dist/cjs/session-revocation-generator.d.ts.map +1 -0
- package/dist/cjs/session-revocation-generator.js +177 -0
- package/dist/cjs/session-revocation-generator.js.map +1 -0
- package/dist/cjs/slack-message-values.d.ts +6 -0
- package/dist/cjs/slack-message-values.d.ts.map +1 -0
- package/dist/cjs/slack-message-values.js +73 -0
- package/dist/cjs/slack-message-values.js.map +1 -0
- package/dist/cjs/transactional-email-code.d.ts +11 -0
- package/dist/cjs/transactional-email-code.d.ts.map +1 -1
- package/dist/cjs/transactional-email-code.js +29 -5
- package/dist/cjs/transactional-email-code.js.map +1 -1
- package/dist/cjs/trigger-generator.d.ts +2 -0
- package/dist/cjs/trigger-generator.d.ts.map +1 -1
- package/dist/cjs/trigger-generator.js +17 -4
- package/dist/cjs/trigger-generator.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/visitor-step-limits.d.ts +66 -0
- package/dist/cjs/visitor-step-limits.d.ts.map +1 -0
- package/dist/cjs/visitor-step-limits.js +187 -0
- package/dist/cjs/visitor-step-limits.js.map +1 -0
- package/dist/cjs/webhook-generator.d.ts.map +1 -1
- package/dist/cjs/webhook-generator.js +93 -15
- package/dist/cjs/webhook-generator.js.map +1 -1
- package/dist/cjs/webhook-signature-verification.d.ts.map +1 -1
- package/dist/cjs/webhook-signature-verification.js +13 -3
- package/dist/cjs/webhook-signature-verification.js.map +1 -1
- package/dist/cjs/workflow-auth-generator.d.ts +4 -1
- package/dist/cjs/workflow-auth-generator.d.ts.map +1 -1
- package/dist/cjs/workflow-auth-generator.js +8 -3
- package/dist/cjs/workflow-auth-generator.js.map +1 -1
- package/dist/cjs/workflow-component-plugin.js +11 -3
- package/dist/cjs/workflow-component-plugin.js.map +1 -1
- package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-project-plugin.js +302 -56
- package/dist/cjs/workflow-project-plugin.js.map +1 -1
- package/dist/cjs/workflow-scope.d.ts.map +1 -1
- package/dist/cjs/workflow-scope.js +5 -0
- package/dist/cjs/workflow-scope.js.map +1 -1
- package/dist/esm/account-delete-route-generator.d.ts +1 -0
- package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
- package/dist/esm/account-delete-route-generator.js +18 -3
- package/dist/esm/account-delete-route-generator.js.map +1 -1
- package/dist/esm/api-route-generator.d.ts +52 -3
- package/dist/esm/api-route-generator.d.ts.map +1 -1
- package/dist/esm/api-route-generator.js +595 -142
- package/dist/esm/api-route-generator.js.map +1 -1
- package/dist/esm/auth-generator.d.ts +126 -3
- package/dist/esm/auth-generator.d.ts.map +1 -1
- package/dist/esm/auth-generator.js +1350 -140
- package/dist/esm/auth-generator.js.map +1 -1
- package/dist/esm/automations/activity-kicks.d.ts +12 -0
- package/dist/esm/automations/activity-kicks.d.ts.map +1 -0
- package/dist/esm/automations/activity-kicks.js +118 -0
- package/dist/esm/automations/activity-kicks.js.map +1 -0
- package/dist/esm/automations/app-events-source.d.ts +33 -0
- package/dist/esm/automations/app-events-source.d.ts.map +1 -0
- package/dist/esm/automations/app-events-source.js +104 -0
- package/dist/esm/automations/app-events-source.js.map +1 -0
- package/dist/esm/automations/automations-project-plugin.d.ts +21 -0
- package/dist/esm/automations/automations-project-plugin.d.ts.map +1 -0
- package/dist/esm/automations/automations-project-plugin.js +98 -0
- package/dist/esm/automations/automations-project-plugin.js.map +1 -0
- package/dist/esm/automations/automations-scope.d.ts +104 -0
- package/dist/esm/automations/automations-scope.d.ts.map +1 -0
- package/dist/esm/automations/automations-scope.js +165 -0
- package/dist/esm/automations/automations-scope.js.map +1 -0
- package/dist/esm/automations/dispatcher-source.d.ts +72 -0
- package/dist/esm/automations/dispatcher-source.d.ts.map +1 -0
- package/dist/esm/automations/dispatcher-source.js +999 -0
- package/dist/esm/automations/dispatcher-source.js.map +1 -0
- package/dist/esm/automations/event-bus-source.d.ts +44 -0
- package/dist/esm/automations/event-bus-source.d.ts.map +1 -0
- package/dist/esm/automations/event-bus-source.js +421 -0
- package/dist/esm/automations/event-bus-source.js.map +1 -0
- package/dist/esm/automations/handler-module-generator.d.ts +25 -0
- package/dist/esm/automations/handler-module-generator.d.ts.map +1 -0
- package/dist/esm/automations/handler-module-generator.js +71 -0
- package/dist/esm/automations/handler-module-generator.js.map +1 -0
- package/dist/esm/automations/hydrators-source.d.ts +33 -0
- package/dist/esm/automations/hydrators-source.d.ts.map +1 -0
- package/dist/esm/automations/hydrators-source.js +567 -0
- package/dist/esm/automations/hydrators-source.js.map +1 -0
- package/dist/esm/booking-calendar-feed-route-generator.d.ts.map +1 -1
- package/dist/esm/booking-calendar-feed-route-generator.js +8 -0
- package/dist/esm/booking-calendar-feed-route-generator.js.map +1 -1
- package/dist/esm/configured-nextauth-url.d.ts +17 -0
- package/dist/esm/configured-nextauth-url.d.ts.map +1 -0
- package/dist/esm/configured-nextauth-url.js +17 -0
- package/dist/esm/configured-nextauth-url.js.map +1 -0
- package/dist/esm/cron-request-verification.d.ts +22 -1
- package/dist/esm/cron-request-verification.d.ts.map +1 -1
- package/dist/esm/cron-request-verification.js +48 -5
- package/dist/esm/cron-request-verification.js.map +1 -1
- package/dist/esm/data-api-route-generator.d.ts +19 -0
- package/dist/esm/data-api-route-generator.d.ts.map +1 -1
- package/dist/esm/data-api-route-generator.js +710 -43
- package/dist/esm/data-api-route-generator.js.map +1 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.d.ts +3 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.js +43 -4
- package/dist/esm/ecommerce/parameterized-stock-chain.js.map +1 -1
- package/dist/esm/ecommerce/place-order-guards.d.ts +126 -0
- package/dist/esm/ecommerce/place-order-guards.d.ts.map +1 -0
- package/dist/esm/ecommerce/place-order-guards.js +655 -0
- package/dist/esm/ecommerce/place-order-guards.js.map +1 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts +2 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/esm/ecommerce-customhandler-rewriter.js +38 -2
- package/dist/esm/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +368 -60
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/graph-utils.d.ts +9 -0
- package/dist/esm/graph-utils.d.ts.map +1 -1
- package/dist/esm/graph-utils.js +30 -0
- package/dist/esm/graph-utils.js.map +1 -1
- package/dist/esm/index.d.ts +20 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +27 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/invoice/api-routes-code.d.ts +9 -3
- package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/esm/invoice/api-routes-code.js +9 -7
- package/dist/esm/invoice/api-routes-code.js.map +1 -1
- package/dist/esm/invoice/index.d.ts.map +1 -1
- package/dist/esm/invoice/index.js +12 -7
- package/dist/esm/invoice/index.js.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.js +8 -3
- package/dist/esm/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/esm/invoice/pdf-generator-code.d.ts.map +1 -1
- package/dist/esm/invoice/pdf-generator-code.js +2 -1
- package/dist/esm/invoice/pdf-generator-code.js.map +1 -1
- package/dist/esm/invoice/pdf-service-client-code.d.ts.map +1 -1
- package/dist/esm/invoice/pdf-service-client-code.js +15 -7
- package/dist/esm/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/esm/newsletter/admin-route-code.d.ts +60 -0
- package/dist/esm/newsletter/admin-route-code.d.ts.map +1 -0
- package/dist/esm/newsletter/admin-route-code.js +295 -0
- package/dist/esm/newsletter/admin-route-code.js.map +1 -0
- package/dist/esm/newsletter/helper-code.d.ts +109 -0
- package/dist/esm/newsletter/helper-code.d.ts.map +1 -0
- package/dist/esm/newsletter/helper-code.js +656 -0
- package/dist/esm/newsletter/helper-code.js.map +1 -0
- package/dist/esm/newsletter/newsletter-scope.d.ts +65 -0
- package/dist/esm/newsletter/newsletter-scope.d.ts.map +1 -0
- package/dist/esm/newsletter/newsletter-scope.js +97 -0
- package/dist/esm/newsletter/newsletter-scope.js.map +1 -0
- package/dist/esm/newsletter/project-plugin.d.ts +18 -0
- package/dist/esm/newsletter/project-plugin.d.ts.map +1 -0
- package/dist/esm/newsletter/project-plugin.js +93 -0
- package/dist/esm/newsletter/project-plugin.js.map +1 -0
- package/dist/esm/newsletter/routes-code.d.ts +6 -0
- package/dist/esm/newsletter/routes-code.d.ts.map +1 -0
- package/dist/esm/newsletter/routes-code.js +175 -0
- package/dist/esm/newsletter/routes-code.js.map +1 -0
- package/dist/esm/nodes/account/account-compare-passwords.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-compare-passwords.js +16 -6
- package/dist/esm/nodes/account/account-compare-passwords.js.map +1 -1
- package/dist/esm/nodes/account/account-delete-current.js +1 -1
- package/dist/esm/nodes/account/account-get-current.js +1 -1
- package/dist/esm/nodes/account/account-hash-password.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-hash-password.js +15 -3
- package/dist/esm/nodes/account/account-hash-password.js.map +1 -1
- package/dist/esm/nodes/account/account-login.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-login.js +23 -6
- package/dist/esm/nodes/account/account-login.js.map +1 -1
- package/dist/esm/nodes/account/account-logout.js +1 -1
- package/dist/esm/nodes/account/account-refresh-session.js +1 -1
- package/dist/esm/nodes/account/account-request-password-reset.d.ts +3 -0
- package/dist/esm/nodes/account/account-request-password-reset.d.ts.map +1 -0
- package/dist/esm/nodes/account/account-request-password-reset.js +43 -0
- package/dist/esm/nodes/account/account-request-password-reset.js.map +1 -0
- package/dist/esm/nodes/account/account-reset-password.d.ts +3 -0
- package/dist/esm/nodes/account/account-reset-password.d.ts.map +1 -0
- package/dist/esm/nodes/account/account-reset-password.js +41 -0
- package/dist/esm/nodes/account/account-reset-password.js.map +1 -0
- package/dist/esm/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-signup.js +82 -19
- package/dist/esm/nodes/account/account-signup.js.map +1 -1
- package/dist/esm/nodes/account/account-social-login.js +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.js +20 -5
- package/dist/esm/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.js +20 -5
- package/dist/esm/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js +10 -2
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
- package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts +31 -2
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.js +124 -10
- package/dist/esm/nodes/ai/ai-provider-utils.js.map +1 -1
- package/dist/esm/nodes/ai/ai-select-database-data.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-select-database-data.js +6 -2
- package/dist/esm/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js +20 -5
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.js +20 -5
- package/dist/esm/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.js +20 -5
- package/dist/esm/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.js +20 -5
- package/dist/esm/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts +3 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.js +107 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.js.map +1 -0
- package/dist/esm/nodes/cart/cart-price-order.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-price-order.js +161 -2
- package/dist/esm/nodes/cart/cart-price-order.js.map +1 -1
- package/dist/esm/nodes/cost-bearing-node-types.d.ts +4 -0
- package/dist/esm/nodes/cost-bearing-node-types.d.ts.map +1 -0
- package/dist/esm/nodes/cost-bearing-node-types.js +39 -0
- package/dist/esm/nodes/cost-bearing-node-types.js.map +1 -0
- package/dist/esm/nodes/data/data-select.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-select.js +12 -2
- package/dist/esm/nodes/data/data-select.js.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.js +15 -11
- package/dist/esm/nodes/email/email-mailersend.js.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.js +15 -15
- package/dist/esm/nodes/email/email-mailgun.js.map +1 -1
- package/dist/esm/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-postmark.js +15 -15
- package/dist/esm/nodes/email/email-postmark.js.map +1 -1
- package/dist/esm/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-resend.js +15 -15
- package/dist/esm/nodes/email/email-resend.js.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.js +15 -15
- package/dist/esm/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/esm/nodes/email/html-escape-code.d.ts +3 -0
- package/dist/esm/nodes/email/html-escape-code.d.ts.map +1 -0
- package/dist/esm/nodes/email/html-escape-code.js +18 -0
- package/dist/esm/nodes/email/html-escape-code.js.map +1 -0
- package/dist/esm/nodes/email/message-trust.d.ts +40 -0
- package/dist/esm/nodes/email/message-trust.d.ts.map +1 -0
- package/dist/esm/nodes/email/message-trust.js +161 -0
- package/dist/esm/nodes/email/message-trust.js.map +1 -0
- package/dist/esm/nodes/email/outbound-message-guard.d.ts +113 -0
- package/dist/esm/nodes/email/outbound-message-guard.d.ts.map +1 -0
- package/dist/esm/nodes/email/outbound-message-guard.js +452 -0
- package/dist/esm/nodes/email/outbound-message-guard.js.map +1 -0
- package/dist/esm/nodes/email/trusted-html-code.d.ts +22 -0
- package/dist/esm/nodes/email/trusted-html-code.d.ts.map +1 -0
- package/dist/esm/nodes/email/trusted-html-code.js +49 -0
- package/dist/esm/nodes/email/trusted-html-code.js.map +1 -0
- package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.js +44 -7
- package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
- package/dist/esm/nodes/general/general-http-request.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-http-request.js +431 -45
- package/dist/esm/nodes/general/general-http-request.js.map +1 -1
- package/dist/esm/nodes/general/general-rate-limiter.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-rate-limiter.js +46 -78
- package/dist/esm/nodes/general/general-rate-limiter.js.map +1 -1
- package/dist/esm/nodes/general/general-wait.d.ts +3 -0
- package/dist/esm/nodes/general/general-wait.d.ts.map +1 -0
- package/dist/esm/nodes/general/general-wait.js +78 -0
- package/dist/esm/nodes/general/general-wait.js.map +1 -0
- package/dist/esm/nodes/general/visitor-request.d.ts +44 -0
- package/dist/esm/nodes/general/visitor-request.d.ts.map +1 -0
- package/dist/esm/nodes/general/visitor-request.js +65 -0
- package/dist/esm/nodes/general/visitor-request.js.map +1 -0
- package/dist/esm/nodes/index.d.ts.map +1 -1
- package/dist/esm/nodes/index.js +7 -1
- package/dist/esm/nodes/index.js.map +1 -1
- package/dist/esm/nodes/integrations/integration-slack.d.ts.map +1 -1
- package/dist/esm/nodes/integrations/integration-slack.js +17 -6
- package/dist/esm/nodes/integrations/integration-slack.js.map +1 -1
- package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts +3 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.js +38 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.js.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.js +66 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.js.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js +39 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
- package/dist/esm/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-join-channel.js +5 -4
- package/dist/esm/nodes/realtime/realtime-join-channel.js.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-event.js +11 -2
- package/dist/esm/nodes/realtime/realtime-send-channel-event.js.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-message.js +11 -2
- package/dist/esm/nodes/realtime/realtime-send-channel-message.js.map +1 -1
- package/dist/esm/nodes/sms/sms-infobip.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-infobip.js +11 -8
- package/dist/esm/nodes/sms/sms-infobip.js.map +1 -1
- package/dist/esm/nodes/sms/sms-smsapi.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-smsapi.js +11 -8
- package/dist/esm/nodes/sms/sms-smsapi.js.map +1 -1
- package/dist/esm/nodes/sms/sms-textmagic.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-textmagic.js +11 -8
- package/dist/esm/nodes/sms/sms-textmagic.js.map +1 -1
- package/dist/esm/nodes/sms/sms-twilio.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-twilio.js +12 -10
- package/dist/esm/nodes/sms/sms-twilio.js.map +1 -1
- package/dist/esm/nodes/types.d.ts +8 -1
- package/dist/esm/nodes/types.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.js +29 -10
- package/dist/esm/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/esm/page-access-guard-generator.d.ts +23 -0
- package/dist/esm/page-access-guard-generator.d.ts.map +1 -0
- package/dist/esm/page-access-guard-generator.js +131 -0
- package/dist/esm/page-access-guard-generator.js.map +1 -0
- package/dist/esm/password-reset-route-generator.d.ts +119 -0
- package/dist/esm/password-reset-route-generator.d.ts.map +1 -0
- package/dist/esm/password-reset-route-generator.js +448 -0
- package/dist/esm/password-reset-route-generator.js.map +1 -0
- package/dist/esm/payments/payment-core-code.d.ts.map +1 -1
- package/dist/esm/payments/payment-core-code.js +12 -7
- package/dist/esm/payments/payment-core-code.js.map +1 -1
- package/dist/esm/project-code-scanner.d.ts +11 -0
- package/dist/esm/project-code-scanner.d.ts.map +1 -0
- package/dist/esm/project-code-scanner.js +75 -0
- package/dist/esm/project-code-scanner.js.map +1 -0
- package/dist/esm/public-step-guards.d.ts +122 -0
- package/dist/esm/public-step-guards.d.ts.map +1 -0
- package/dist/esm/public-step-guards.js +280 -0
- package/dist/esm/public-step-guards.js.map +1 -0
- package/dist/esm/publish-refusals.d.ts +66 -0
- package/dist/esm/publish-refusals.d.ts.map +1 -0
- package/dist/esm/publish-refusals.js +271 -0
- package/dist/esm/publish-refusals.js.map +1 -0
- package/dist/esm/realtime-generator.d.ts +63 -1
- package/dist/esm/realtime-generator.d.ts.map +1 -1
- package/dist/esm/realtime-generator.js +401 -229
- package/dist/esm/realtime-generator.js.map +1 -1
- package/dist/esm/runtime-storage-generator.d.ts +32 -1
- package/dist/esm/runtime-storage-generator.d.ts.map +1 -1
- package/dist/esm/runtime-storage-generator.js +264 -11
- package/dist/esm/runtime-storage-generator.js.map +1 -1
- package/dist/esm/security-runtime/index.d.ts +14 -0
- package/dist/esm/security-runtime/index.d.ts.map +1 -0
- package/dist/esm/security-runtime/index.js +37 -0
- package/dist/esm/security-runtime/index.js.map +1 -0
- package/dist/esm/security-runtime/security-runtime-code.d.ts +53 -0
- package/dist/esm/security-runtime/security-runtime-code.d.ts.map +1 -0
- package/dist/esm/security-runtime/security-runtime-code.js +575 -0
- package/dist/esm/security-runtime/security-runtime-code.js.map +1 -0
- package/dist/esm/security-scanner.d.ts +72 -3
- package/dist/esm/security-scanner.d.ts.map +1 -1
- package/dist/esm/security-scanner.js +217 -8
- package/dist/esm/security-scanner.js.map +1 -1
- package/dist/esm/segment-splitter.d.ts.map +1 -1
- package/dist/esm/segment-splitter.js +10 -2
- package/dist/esm/segment-splitter.js.map +1 -1
- package/dist/esm/segment-trust.d.ts +36 -0
- package/dist/esm/segment-trust.d.ts.map +1 -1
- package/dist/esm/segment-trust.js +146 -2
- package/dist/esm/segment-trust.js.map +1 -1
- package/dist/esm/self-call-headers.d.ts +31 -0
- package/dist/esm/self-call-headers.d.ts.map +1 -0
- package/dist/esm/self-call-headers.js +43 -0
- package/dist/esm/self-call-headers.js.map +1 -0
- package/dist/esm/sent-email-log/index.d.ts +7 -0
- package/dist/esm/sent-email-log/index.d.ts.map +1 -1
- package/dist/esm/sent-email-log/index.js +15 -0
- package/dist/esm/sent-email-log/index.js.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts +7 -0
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.js +17 -3
- package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/esm/server-custom-node-call.d.ts +79 -0
- package/dist/esm/server-custom-node-call.d.ts.map +1 -0
- package/dist/esm/server-custom-node-call.js +278 -0
- package/dist/esm/server-custom-node-call.js.map +1 -0
- package/dist/esm/server-runtime-code.d.ts +39 -12
- package/dist/esm/server-runtime-code.d.ts.map +1 -1
- package/dist/esm/server-runtime-code.js +483 -40
- package/dist/esm/server-runtime-code.js.map +1 -1
- package/dist/esm/session-cookie-resolver.d.ts +3 -1
- package/dist/esm/session-cookie-resolver.d.ts.map +1 -1
- package/dist/esm/session-revocation-generator.d.ts +39 -0
- package/dist/esm/session-revocation-generator.d.ts.map +1 -0
- package/dist/esm/session-revocation-generator.js +172 -0
- package/dist/esm/session-revocation-generator.js.map +1 -0
- package/dist/esm/slack-message-values.d.ts +6 -0
- package/dist/esm/slack-message-values.d.ts.map +1 -0
- package/dist/esm/slack-message-values.js +68 -0
- package/dist/esm/slack-message-values.js.map +1 -0
- package/dist/esm/transactional-email-code.d.ts +11 -0
- package/dist/esm/transactional-email-code.d.ts.map +1 -1
- package/dist/esm/transactional-email-code.js +28 -4
- package/dist/esm/transactional-email-code.js.map +1 -1
- package/dist/esm/trigger-generator.d.ts +2 -0
- package/dist/esm/trigger-generator.d.ts.map +1 -1
- package/dist/esm/trigger-generator.js +15 -3
- package/dist/esm/trigger-generator.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/visitor-step-limits.d.ts +66 -0
- package/dist/esm/visitor-step-limits.d.ts.map +1 -0
- package/dist/esm/visitor-step-limits.js +181 -0
- package/dist/esm/visitor-step-limits.js.map +1 -0
- package/dist/esm/webhook-generator.d.ts.map +1 -1
- package/dist/esm/webhook-generator.js +93 -15
- package/dist/esm/webhook-generator.js.map +1 -1
- package/dist/esm/webhook-signature-verification.d.ts.map +1 -1
- package/dist/esm/webhook-signature-verification.js +13 -3
- package/dist/esm/webhook-signature-verification.js.map +1 -1
- package/dist/esm/workflow-auth-generator.d.ts +4 -1
- package/dist/esm/workflow-auth-generator.d.ts.map +1 -1
- package/dist/esm/workflow-auth-generator.js +8 -3
- package/dist/esm/workflow-auth-generator.js.map +1 -1
- package/dist/esm/workflow-component-plugin.js +12 -4
- package/dist/esm/workflow-component-plugin.js.map +1 -1
- package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-project-plugin.js +306 -60
- package/dist/esm/workflow-project-plugin.js.map +1 -1
- package/dist/esm/workflow-scope.d.ts.map +1 -1
- package/dist/esm/workflow-scope.js +5 -0
- package/dist/esm/workflow-scope.js.map +1 -1
- package/package.json +4 -4
- package/src/account-delete-route-generator.ts +28 -4
- package/src/api-route-generator.ts +712 -134
- package/src/auth-generator.ts +1471 -142
- package/src/automations/activity-kicks.ts +139 -0
- package/src/automations/app-events-source.ts +117 -0
- package/src/automations/automations-project-plugin.ts +202 -0
- package/src/automations/automations-scope.ts +196 -0
- package/src/automations/dispatcher-source.ts +1072 -0
- package/src/automations/event-bus-source.ts +428 -0
- package/src/automations/handler-module-generator.ts +107 -0
- package/src/automations/hydrators-source.ts +647 -0
- package/src/booking-calendar-feed-route-generator.ts +8 -0
- package/src/configured-nextauth-url.ts +17 -0
- package/src/cron-request-verification.ts +55 -5
- package/src/data-api-route-generator.ts +780 -43
- package/src/ecommerce/parameterized-stock-chain.ts +52 -5
- package/src/ecommerce/place-order-guards.ts +785 -0
- package/src/ecommerce-customhandler-rewriter.ts +55 -2
- package/src/executor-generator.ts +372 -60
- package/src/graph-utils.ts +33 -0
- package/src/index.ts +70 -0
- package/src/invoice/api-routes-code.ts +20 -7
- package/src/invoice/index.ts +11 -6
- package/src/invoice/invoice-assembly-code.ts +8 -3
- package/src/invoice/pdf-generator-code.ts +2 -1
- package/src/invoice/pdf-service-client-code.ts +15 -7
- package/src/newsletter/admin-route-code.ts +319 -0
- package/src/newsletter/helper-code.ts +748 -0
- package/src/newsletter/newsletter-scope.ts +116 -0
- package/src/newsletter/project-plugin.ts +119 -0
- package/src/newsletter/routes-code.ts +186 -0
- package/src/nodes/account/account-compare-passwords.ts +17 -6
- package/src/nodes/account/account-delete-current.ts +1 -1
- package/src/nodes/account/account-get-current.ts +1 -1
- package/src/nodes/account/account-hash-password.ts +19 -3
- package/src/nodes/account/account-login.ts +24 -7
- package/src/nodes/account/account-logout.ts +1 -1
- package/src/nodes/account/account-refresh-session.ts +1 -1
- package/src/nodes/account/account-request-password-reset.ts +47 -0
- package/src/nodes/account/account-reset-password.ts +45 -0
- package/src/nodes/account/account-signup.ts +86 -20
- package/src/nodes/account/account-social-login.ts +1 -1
- package/src/nodes/ai/ai-custom-prompt.ts +25 -6
- package/src/nodes/ai/ai-detect-language.ts +25 -6
- package/src/nodes/ai/ai-generate-text-embedding.ts +16 -3
- package/src/nodes/ai/ai-provider-utils-sources.generated.ts +2 -2
- package/src/nodes/ai/ai-provider-utils.ts +135 -10
- package/src/nodes/ai/ai-select-database-data.ts +8 -3
- package/src/nodes/ai/ai-sentiment-analysis.ts +25 -6
- package/src/nodes/ai/ai-summarization.ts +25 -6
- package/src/nodes/ai/ai-text-classifier.ts +25 -6
- package/src/nodes/ai/ai-text-transform.ts +25 -6
- package/src/nodes/analytics/analytics-track-outcome.ts +111 -0
- package/src/nodes/cart/cart-price-order.ts +200 -2
- package/src/nodes/cost-bearing-node-types.ts +45 -0
- package/src/nodes/data/data-select.ts +11 -2
- package/src/nodes/email/email-mailersend.ts +16 -8
- package/src/nodes/email/email-mailgun.ts +17 -12
- package/src/nodes/email/email-postmark.ts +17 -12
- package/src/nodes/email/email-resend.ts +17 -12
- package/src/nodes/email/email-sendgrid.ts +17 -12
- package/src/nodes/email/html-escape-code.ts +21 -0
- package/src/nodes/email/message-trust.ts +198 -0
- package/src/nodes/email/outbound-message-guard.ts +572 -0
- package/src/nodes/email/trusted-html-code.ts +49 -0
- package/src/nodes/general/general-custom-js.ts +46 -7
- package/src/nodes/general/general-http-request.ts +449 -46
- package/src/nodes/general/general-rate-limiter.ts +54 -81
- package/src/nodes/general/general-wait.ts +80 -0
- package/src/nodes/general/visitor-request.ts +79 -0
- package/src/nodes/index.ts +12 -0
- package/src/nodes/integrations/integration-slack.ts +21 -6
- package/src/nodes/newsletter/newsletter-confirm.ts +44 -0
- package/src/nodes/newsletter/newsletter-subscribe.ts +78 -0
- package/src/nodes/newsletter/newsletter-unsubscribe.ts +43 -0
- package/src/nodes/realtime/realtime-join-channel.ts +5 -4
- package/src/nodes/realtime/realtime-send-channel-event.ts +13 -2
- package/src/nodes/realtime/realtime-send-channel-message.ts +13 -2
- package/src/nodes/sms/sms-infobip.ts +14 -4
- package/src/nodes/sms/sms-smsapi.ts +14 -4
- package/src/nodes/sms/sms-textmagic.ts +14 -4
- package/src/nodes/sms/sms-twilio.ts +14 -4
- package/src/nodes/types.ts +9 -1
- package/src/nodes/utility/utility-similarity-scoring.ts +33 -12
- package/src/page-access-guard-generator.ts +154 -0
- package/src/password-reset-route-generator.ts +531 -0
- package/src/payments/payment-core-code.ts +12 -7
- package/src/project-code-scanner.ts +98 -0
- package/src/public-step-guards.ts +448 -0
- package/src/publish-refusals.ts +459 -0
- package/src/realtime-generator.ts +457 -234
- package/src/runtime-storage-generator.ts +270 -11
- package/src/security-runtime/index.ts +53 -0
- package/src/security-runtime/security-runtime-code.ts +579 -0
- package/src/security-scanner.ts +253 -10
- package/src/segment-splitter.ts +10 -2
- package/src/segment-trust.ts +205 -2
- package/src/self-call-headers.ts +46 -0
- package/src/sent-email-log/index.ts +16 -0
- package/src/sent-email-log/sent-email-log-code.ts +30 -4
- package/src/server-custom-node-call.ts +331 -0
- package/src/server-runtime-code.ts +488 -40
- package/src/session-revocation-generator.ts +177 -0
- package/src/slack-message-values.ts +84 -0
- package/src/transactional-email-code.ts +30 -4
- package/src/trigger-generator.ts +19 -3
- package/src/visitor-step-limits.ts +228 -0
- package/src/webhook-generator.ts +94 -14
- package/src/webhook-signature-verification.ts +13 -3
- package/src/workflow-auth-generator.ts +9 -4
- package/src/workflow-component-plugin.ts +14 -4
- package/src/workflow-project-plugin.ts +374 -61
- package/src/workflow-scope.ts +6 -0
|
@@ -1,77 +1,17 @@
|
|
|
1
|
-
import { NodeHandlerGenerator } from '../types'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
});
|
|
16
|
-
for (var d = 0; d < keysToDelete.length; d++) {
|
|
17
|
-
__rateLimitStore.delete(keysToDelete[d]);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function __getClientIp(req) {
|
|
22
|
-
if (!req) return 'unknown';
|
|
23
|
-
var forwarded = req.headers && req.headers['x-forwarded-for'];
|
|
24
|
-
if (forwarded) {
|
|
25
|
-
var first = (typeof forwarded === 'string' ? forwarded : forwarded[0] || '').split(',')[0].trim();
|
|
26
|
-
if (first) return __normalizeIp(first);
|
|
27
|
-
}
|
|
28
|
-
var realIp = req.headers && req.headers['x-real-ip'];
|
|
29
|
-
if (realIp) {
|
|
30
|
-
var val = typeof realIp === 'string' ? realIp : realIp[0] || '';
|
|
31
|
-
if (val) return __normalizeIp(val.trim());
|
|
32
|
-
}
|
|
33
|
-
if (req.socket && req.socket.remoteAddress) {
|
|
34
|
-
return __normalizeIp(req.socket.remoteAddress);
|
|
35
|
-
}
|
|
36
|
-
if (req.connection && req.connection.remoteAddress) {
|
|
37
|
-
return __normalizeIp(req.connection.remoteAddress);
|
|
38
|
-
}
|
|
39
|
-
return 'unknown';
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function __normalizeIp(ip) {
|
|
43
|
-
if (!ip) return 'unknown';
|
|
44
|
-
var cleaned = ip.replace(/^\\[|\\]$/g, '').toLowerCase();
|
|
45
|
-
if (cleaned === '::1' || cleaned === '::ffff:127.0.0.1') return '127.0.0.1';
|
|
46
|
-
if (cleaned.indexOf('::ffff:') === 0) return cleaned.substring(7);
|
|
47
|
-
return cleaned;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function __checkRateLimit(key, maxRequests, windowMs) {
|
|
51
|
-
var now = Date.now();
|
|
52
|
-
var windowKey = Math.floor(now / windowMs);
|
|
53
|
-
var storeKey = key + ':' + windowKey;
|
|
54
|
-
var windowExpiresSec = Math.ceil((((windowKey + 1) * windowMs) - now) / 1000);
|
|
55
|
-
|
|
56
|
-
var entry = __rateLimitStore.get(storeKey);
|
|
57
|
-
if (!entry) {
|
|
58
|
-
entry = { count: 0 };
|
|
59
|
-
}
|
|
60
|
-
entry.count += 1;
|
|
61
|
-
__rateLimitStore.set(storeKey, entry);
|
|
62
|
-
|
|
63
|
-
__rateLimitCleanup(windowKey);
|
|
64
|
-
|
|
65
|
-
var allowed = entry.count <= maxRequests;
|
|
66
|
-
var remaining = Math.max(0, maxRequests - entry.count);
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
allowed: allowed,
|
|
70
|
-
remaining: remaining,
|
|
71
|
-
retryAfter: allowed ? 0 : windowExpiresSec
|
|
72
|
-
};
|
|
73
|
-
}`
|
|
74
|
-
|
|
1
|
+
import { NodeHandlerGenerator, ServerHandlerOptions } from '../types'
|
|
2
|
+
import {
|
|
3
|
+
generateSecurityRuntimeVar,
|
|
4
|
+
serverHandlerPrefix,
|
|
5
|
+
VISITOR_KEY_CODE,
|
|
6
|
+
} from './visitor-request'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Counts in the app's shared, durable limiter (`rateLimit` in
|
|
10
|
+
* `utils/security-runtime.js`), so every instance of a serverless app counts
|
|
11
|
+
* together and a redeploy or cold start resets nothing. The 'ip' strategy
|
|
12
|
+
* reads the visitor's address only where the host guarantees it (an IPv6
|
|
13
|
+
* visitor counts by its /64). Without the runtime the request is refused.
|
|
14
|
+
*/
|
|
75
15
|
const RATE_LIMIT_HANDLER_CODE = `
|
|
76
16
|
async function general_rate_limiter(config, context) {
|
|
77
17
|
var strategy = config.strategy;
|
|
@@ -89,7 +29,7 @@ async function general_rate_limiter(config, context) {
|
|
|
89
29
|
};
|
|
90
30
|
}
|
|
91
31
|
|
|
92
|
-
if (!maxRequests || typeof maxRequests !== 'number' || maxRequests
|
|
32
|
+
if (!maxRequests || typeof maxRequests !== 'number' || maxRequests < 1) {
|
|
93
33
|
return {
|
|
94
34
|
__earlyResponse: {
|
|
95
35
|
status: 500,
|
|
@@ -109,9 +49,21 @@ async function general_rate_limiter(config, context) {
|
|
|
109
49
|
};
|
|
110
50
|
}
|
|
111
51
|
|
|
52
|
+
var security = __rateLimitSecurity;
|
|
53
|
+
if (!security || typeof security.rateLimit !== 'function' || typeof security.clientIp !== 'function') {
|
|
54
|
+
console.error('[rate-limiter] request refused: the security runtime is not available');
|
|
55
|
+
return {
|
|
56
|
+
__earlyResponse: {
|
|
57
|
+
status: 500,
|
|
58
|
+
headers: {},
|
|
59
|
+
body: { error: 'Internal Server Error', message: 'Rate limiting is not available.' }
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
112
64
|
var identifier;
|
|
113
65
|
if (strategy === 'ip') {
|
|
114
|
-
identifier = (
|
|
66
|
+
identifier = __visitorKeyOf(security, context.__request);
|
|
115
67
|
} else {
|
|
116
68
|
identifier = config.key;
|
|
117
69
|
if (identifier === undefined || identifier === null || identifier === '') {
|
|
@@ -126,8 +78,23 @@ async function general_rate_limiter(config, context) {
|
|
|
126
78
|
identifier = String(identifier);
|
|
127
79
|
}
|
|
128
80
|
|
|
129
|
-
var
|
|
130
|
-
|
|
81
|
+
var result;
|
|
82
|
+
try {
|
|
83
|
+
result = await security.rateLimit({
|
|
84
|
+
key: JSON.stringify(['workflow-rate-limiter', String(config.__nodeId), strategy, identifier]),
|
|
85
|
+
limit: Math.floor(maxRequests),
|
|
86
|
+
windowSeconds: Math.max(1, Math.ceil(windowMs / 1000))
|
|
87
|
+
});
|
|
88
|
+
} catch (err) {
|
|
89
|
+
console.error('[rate-limiter] request refused:', err && err.message ? err.message : err);
|
|
90
|
+
return {
|
|
91
|
+
__earlyResponse: {
|
|
92
|
+
status: 500,
|
|
93
|
+
headers: {},
|
|
94
|
+
body: { error: 'Internal Server Error', message: 'Rate limiting is not available.' }
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
131
98
|
|
|
132
99
|
if (!result.allowed) {
|
|
133
100
|
return {
|
|
@@ -143,7 +110,7 @@ async function general_rate_limiter(config, context) {
|
|
|
143
110
|
};
|
|
144
111
|
}
|
|
145
112
|
|
|
146
|
-
return { allowed: true
|
|
113
|
+
return { allowed: true };
|
|
147
114
|
}`
|
|
148
115
|
|
|
149
116
|
export const generalRateLimiter: NodeHandlerGenerator = {
|
|
@@ -154,7 +121,13 @@ export const generalRateLimiter: NodeHandlerGenerator = {
|
|
|
154
121
|
throw new Error('general-rate-limiter must run on the server');
|
|
155
122
|
}`
|
|
156
123
|
},
|
|
157
|
-
generateServerHandler(): string {
|
|
158
|
-
return
|
|
124
|
+
generateServerHandler(options?: ServerHandlerOptions): string {
|
|
125
|
+
return (
|
|
126
|
+
generateSecurityRuntimeVar('__rateLimitSecurity', serverHandlerPrefix(options)) +
|
|
127
|
+
'\n' +
|
|
128
|
+
VISITOR_KEY_CODE +
|
|
129
|
+
'\n' +
|
|
130
|
+
RATE_LIMIT_HANDLER_CODE
|
|
131
|
+
)
|
|
159
132
|
},
|
|
160
133
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { NodeHandlerGenerator } from '../types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wait (`general-wait { amount, unit } | { until }`): pauses an automation and
|
|
5
|
+
* resumes it later (spec §5.2). Server only, and only inside an automation
|
|
6
|
+
* handler module (`lib/automations/handlers/*.js`), which hands the node its
|
|
7
|
+
* run through `context.__automation`:
|
|
8
|
+
*
|
|
9
|
+
* - the node works out when the run resumes and stores its output
|
|
10
|
+
* (`{ until }`, the node-context schema) on the context first, so the nodes
|
|
11
|
+
* after it read it once the run resumes;
|
|
12
|
+
* - `context.__automation.park(nodeId, until)` stores the run — a
|
|
13
|
+
* `teleport_automation_waits` row with the event, the workflow, the next
|
|
14
|
+
* node and the context — and the node answers `{ __wait: true }`, which
|
|
15
|
+
* stops the handler's node loop: nothing after it runs now. A Wait with no
|
|
16
|
+
* step after it parks nothing (`park` answers null): the node answers
|
|
17
|
+
* `{ until }` and the run ends there, delivered, instead of waiting for a
|
|
18
|
+
* resume that would never come.
|
|
19
|
+
*
|
|
20
|
+
* A test event (`context.__automation.test`) parks nothing: the node answers
|
|
21
|
+
* `{ __wait: true, wouldWait: { amount, unit } | { until } }` and the run stops
|
|
22
|
+
* there, so a test never leaves a run behind.
|
|
23
|
+
*
|
|
24
|
+
* The dispatcher resumes the row once `until` has passed, at the next node,
|
|
25
|
+
* with the stored context. Not in the node registry: no other route can run
|
|
26
|
+
* it, and one that met it would fail with "No implementation" — a Wait is
|
|
27
|
+
* refused outside automations by the editor's validation.
|
|
28
|
+
*
|
|
29
|
+
* Authored as a string so a consumer's minifier cannot rename the entry
|
|
30
|
+
* function (see resolveHandlerEntryName).
|
|
31
|
+
*/
|
|
32
|
+
const GENERAL_WAIT_HANDLER = `async function general_wait(config, context) {
|
|
33
|
+
var automation = context && context.__automation;
|
|
34
|
+
if (!automation || typeof automation.park !== 'function') {
|
|
35
|
+
throw new Error('A Wait runs only in an automation');
|
|
36
|
+
}
|
|
37
|
+
// Checked before anything else, a test included, so a test fails exactly
|
|
38
|
+
// where the live run would: a Wait in a loop has no single place to resume.
|
|
39
|
+
if (context.__loopScopeStack && context.__loopScopeStack.length > 0) {
|
|
40
|
+
throw new Error('A Wait cannot run inside a loop');
|
|
41
|
+
}
|
|
42
|
+
var runAt;
|
|
43
|
+
var untilMode = config.until !== undefined && config.until !== null && config.until !== '';
|
|
44
|
+
if (untilMode) {
|
|
45
|
+
runAt = new Date(config.until);
|
|
46
|
+
if (isNaN(runAt.getTime())) {
|
|
47
|
+
throw new Error('The Wait is set to a date that is not one: ' + String(config.until));
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
var unitMs = { minutes: 60000, hours: 3600000, days: 86400000 }[config.unit || 'minutes'];
|
|
51
|
+
var amount = Number(config.amount);
|
|
52
|
+
if (!unitMs || !isFinite(amount) || amount < 0) {
|
|
53
|
+
throw new Error('Set how many minutes, hours or days the Wait lasts');
|
|
54
|
+
}
|
|
55
|
+
runAt = new Date(Date.now() + amount * unitMs);
|
|
56
|
+
}
|
|
57
|
+
var until = runAt.toISOString();
|
|
58
|
+
// A test event shows where the run would pause, and stops there: nothing is stored.
|
|
59
|
+
if (automation.test) {
|
|
60
|
+
return {
|
|
61
|
+
__wait: true,
|
|
62
|
+
until: until,
|
|
63
|
+
wouldWait: untilMode ? { until: until } : { amount: Number(config.amount), unit: config.unit || 'minutes' },
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
context[config.__nodeId] = { until: until };
|
|
67
|
+
var parked = await automation.park(config.__nodeId, until);
|
|
68
|
+
return parked ? { __wait: true, until: until } : { until: until };
|
|
69
|
+
}`
|
|
70
|
+
|
|
71
|
+
export const generalWait: NodeHandlerGenerator = {
|
|
72
|
+
nodeType: 'general-wait',
|
|
73
|
+
executionEnv: 'server',
|
|
74
|
+
generateHandler(): string {
|
|
75
|
+
return GENERAL_WAIT_HANDLER
|
|
76
|
+
},
|
|
77
|
+
generateServerHandler(): string {
|
|
78
|
+
return GENERAL_WAIT_HANDLER
|
|
79
|
+
},
|
|
80
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ServerHandlerOptions } from '../types'
|
|
2
|
+
import { securityRuntimeSpecifier } from '../../security-runtime/security-runtime-code'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* What the server handlers that limit or send on a visitor's behalf share:
|
|
6
|
+
* where the route they are inlined into sits, the shared security runtime
|
|
7
|
+
* (`utils/security-runtime.js`), and the visitor a request comes from.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The prefix from the route a server handler is inlined into to the project
|
|
12
|
+
* root. Segment routes (`pages/api/workflows/<file>.js`) pass none.
|
|
13
|
+
*/
|
|
14
|
+
export const serverHandlerPrefix = (options?: ServerHandlerOptions): string =>
|
|
15
|
+
(options && options.relativePrefix) || '../../..'
|
|
16
|
+
|
|
17
|
+
/** Email and SMS provider nodes: `email-resend`, `sms-twilio`, … */
|
|
18
|
+
export const isOutboundMessageNodeType = (nodeType: string): boolean =>
|
|
19
|
+
nodeType.startsWith('email-') || nodeType.startsWith('sms-')
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A route running one of these hands its nodes the visitor's request
|
|
23
|
+
* (`context.__request`). The newsletter sign-up reads it for the links it
|
|
24
|
+
* mails (the site's origin) and the email's language.
|
|
25
|
+
*/
|
|
26
|
+
export const needsVisitorRequest = (nodeTypes: Iterable<string>): boolean => {
|
|
27
|
+
for (const nodeType of nodeTypes) {
|
|
28
|
+
if (
|
|
29
|
+
nodeType === 'general-rate-limiter' ||
|
|
30
|
+
nodeType === 'newsletter-subscribe' ||
|
|
31
|
+
isOutboundMessageNodeType(nodeType)
|
|
32
|
+
) {
|
|
33
|
+
return true
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The route statement that hands the nodes the request they serve: its
|
|
41
|
+
* headers and socket address (the visitor's address is read from them by the
|
|
42
|
+
* security runtime's `clientIp`, only where the host guarantees it), and
|
|
43
|
+
* whether this deployment's own server code made the call. Set after the
|
|
44
|
+
* request context is copied, so a body cannot supply it.
|
|
45
|
+
*/
|
|
46
|
+
export const VISITOR_REQUEST_INJECTION =
|
|
47
|
+
"\n context.__request = { headers: req.headers || {}, remoteAddress: (req.socket && req.socket.remoteAddress) || '', internal: utils.isInternalCall(req) };"
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Emitted: `var <name>` holding the security runtime. Without a prefix (a
|
|
51
|
+
* handler emitted for no known route) it is `null`, and whatever needs it
|
|
52
|
+
* refuses. The `require` is a static one, so the bundler includes the file; it
|
|
53
|
+
* is only emitted where the prefix is known to be right.
|
|
54
|
+
*/
|
|
55
|
+
export const generateSecurityRuntimeVar = (name: string, relativePrefix?: string): string => {
|
|
56
|
+
const value = relativePrefix
|
|
57
|
+
? `(function () { try { return require('${securityRuntimeSpecifier(
|
|
58
|
+
relativePrefix
|
|
59
|
+
)}'); } catch (_e) { return null; } })()`
|
|
60
|
+
: 'null'
|
|
61
|
+
return `var ${name} = typeof ${name} !== 'undefined' ? ${name} : ${value};`
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Emitted: `__visitorKeyOf(security, request)` — the visitor a request comes
|
|
66
|
+
* from, read by `security.clientIp` from what the route put in
|
|
67
|
+
* `context.__request` and keyed by `security.visitorKey` (an IPv6 visitor by
|
|
68
|
+
* its /64: one visitor holds the whole block), the one rule every limiter of
|
|
69
|
+
* the app keys a visitor by. 'unknown' when there is no request, so every
|
|
70
|
+
* such call shares one bucket.
|
|
71
|
+
*/
|
|
72
|
+
export const VISITOR_KEY_CODE = `var __visitorKeyOf = typeof __visitorKeyOf !== 'undefined' ? __visitorKeyOf : function __visitorKeyOf(security, request) {
|
|
73
|
+
if (!request || typeof request !== 'object') return 'unknown';
|
|
74
|
+
var ip = security.clientIp({
|
|
75
|
+
headers: request.headers && typeof request.headers === 'object' ? request.headers : {},
|
|
76
|
+
socket: { remoteAddress: typeof request.remoteAddress === 'string' ? request.remoteAddress : '' }
|
|
77
|
+
});
|
|
78
|
+
return security.visitorKey(ip) || 'unknown';
|
|
79
|
+
};`
|
package/src/nodes/index.ts
CHANGED
|
@@ -8,6 +8,8 @@ import { accountHashPassword } from './account/account-hash-password'
|
|
|
8
8
|
import { accountLogin } from './account/account-login'
|
|
9
9
|
import { accountLogout } from './account/account-logout'
|
|
10
10
|
import { accountRefreshSession } from './account/account-refresh-session'
|
|
11
|
+
import { accountRequestPasswordReset } from './account/account-request-password-reset'
|
|
12
|
+
import { accountResetPassword } from './account/account-reset-password'
|
|
11
13
|
import { accountSignup } from './account/account-signup'
|
|
12
14
|
import { accountSocialLogin } from './account/account-social-login'
|
|
13
15
|
import { audioPlay } from './audio/audio-play'
|
|
@@ -20,6 +22,7 @@ import { aiSentimentAnalysis } from './ai/ai-sentiment-analysis'
|
|
|
20
22
|
import { aiSummarization } from './ai/ai-summarization'
|
|
21
23
|
import { aiTextClassifier } from './ai/ai-text-classifier'
|
|
22
24
|
import { aiTextTransform } from './ai/ai-text-transform'
|
|
25
|
+
import { analyticsTrackOutcome } from './analytics/analytics-track-outcome'
|
|
23
26
|
import { browserAskPermission } from './browser/browser-ask-permission'
|
|
24
27
|
import { browserFullscreen } from './browser/browser-fullscreen'
|
|
25
28
|
import { browserGetDeviceInfo } from './browser/browser-get-device-info'
|
|
@@ -99,6 +102,9 @@ import { navigationGoBack } from './navigation/navigation-go-back'
|
|
|
99
102
|
import { navigationGoToPage } from './navigation/navigation-go-to-page'
|
|
100
103
|
import { navigationNavigateToUrl } from './navigation/navigation-navigate-to-url'
|
|
101
104
|
import { navigationRefreshPage } from './navigation/navigation-refresh-page'
|
|
105
|
+
import { newsletterConfirm } from './newsletter/newsletter-confirm'
|
|
106
|
+
import { newsletterSubscribe } from './newsletter/newsletter-subscribe'
|
|
107
|
+
import { newsletterUnsubscribe } from './newsletter/newsletter-unsubscribe'
|
|
102
108
|
import { pushSendNotification } from './push/push-send-notification'
|
|
103
109
|
import { paymentChargeUser } from './payment/payment-charge-user'
|
|
104
110
|
import { paymentCreateCustomer } from './payment/payment-create-customer'
|
|
@@ -185,6 +191,8 @@ export const nodeRegistry: Record<string, NodeHandlerGenerator> = {
|
|
|
185
191
|
'account-login': accountLogin,
|
|
186
192
|
'account-logout': accountLogout,
|
|
187
193
|
'account-refresh-session': accountRefreshSession,
|
|
194
|
+
'account-request-password-reset': accountRequestPasswordReset,
|
|
195
|
+
'account-reset-password': accountResetPassword,
|
|
188
196
|
'account-signup': accountSignup,
|
|
189
197
|
'account-social-login': accountSocialLogin,
|
|
190
198
|
'audio-play': audioPlay,
|
|
@@ -197,6 +205,7 @@ export const nodeRegistry: Record<string, NodeHandlerGenerator> = {
|
|
|
197
205
|
'ai-summarization': aiSummarization,
|
|
198
206
|
'ai-text-classifier': aiTextClassifier,
|
|
199
207
|
'ai-text-transform': aiTextTransform,
|
|
208
|
+
'analytics-track-outcome': analyticsTrackOutcome,
|
|
200
209
|
'browser-ask-permission': browserAskPermission,
|
|
201
210
|
'browser-fullscreen': browserFullscreen,
|
|
202
211
|
'browser-get-device-info': browserGetDeviceInfo,
|
|
@@ -272,6 +281,9 @@ export const nodeRegistry: Record<string, NodeHandlerGenerator> = {
|
|
|
272
281
|
'navigation-go-to-page': navigationGoToPage,
|
|
273
282
|
'navigation-navigate-to-url': navigationNavigateToUrl,
|
|
274
283
|
'navigation-refresh-page': navigationRefreshPage,
|
|
284
|
+
'newsletter-confirm': newsletterConfirm,
|
|
285
|
+
'newsletter-subscribe': newsletterSubscribe,
|
|
286
|
+
'newsletter-unsubscribe': newsletterUnsubscribe,
|
|
275
287
|
'push-send-notification': pushSendNotification,
|
|
276
288
|
'payment-charge-user': paymentChargeUser,
|
|
277
289
|
'payment-refund': paymentRefund,
|
|
@@ -17,6 +17,21 @@ async function integration_slack(config: any, context: Record<string, unknown>)
|
|
|
17
17
|
return { error_summary: text, error: text, message: text, raw: text }
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
// A value embedded in a message reaches it HTML-escaped (the runtime's
|
|
21
|
+
// resolveRichTextContext): `&`, `<` and `>` are Slack's own escapes
|
|
22
|
+
// and stay, so a value can never open a link or a mention. A quote is no
|
|
23
|
+
// Slack control character and Slack shows its entity as typed, so it is put back.
|
|
24
|
+
const slackText = (value: any) =>
|
|
25
|
+
typeof value === 'string'
|
|
26
|
+
? value.replace(/"|"|'|'/g, (entity: string) =>
|
|
27
|
+
entity === '"' || entity === '"' ? '"' : "'"
|
|
28
|
+
)
|
|
29
|
+
: value
|
|
30
|
+
// The same for the text inside Block Kit blocks.
|
|
31
|
+
const slackBlocks = (blocks: any) =>
|
|
32
|
+
blocks && typeof blocks === 'object'
|
|
33
|
+
? JSON.parse(JSON.stringify(blocks), (_key: string, value: any) => slackText(value))
|
|
34
|
+
: blocks
|
|
20
35
|
const token = config.token
|
|
21
36
|
const action = config.action
|
|
22
37
|
const baseUrl = 'https://slack.com/api/'
|
|
@@ -29,10 +44,10 @@ async function integration_slack(config: any, context: Record<string, unknown>)
|
|
|
29
44
|
case 'send-message': {
|
|
30
45
|
const body: Record<string, any> = {
|
|
31
46
|
channel: config.channel,
|
|
32
|
-
text: config.text,
|
|
47
|
+
text: slackText(config.text),
|
|
33
48
|
}
|
|
34
49
|
if (config.blocks) {
|
|
35
|
-
body.blocks = config.blocks
|
|
50
|
+
body.blocks = slackBlocks(config.blocks)
|
|
36
51
|
}
|
|
37
52
|
if (config.threadTs) {
|
|
38
53
|
body.thread_ts = config.threadTs
|
|
@@ -112,10 +127,10 @@ async function integration_slack(config: any, context: Record<string, unknown>)
|
|
|
112
127
|
const body: Record<string, any> = {
|
|
113
128
|
channel: config.channel,
|
|
114
129
|
ts: config.ts,
|
|
115
|
-
text: config.text,
|
|
130
|
+
text: slackText(config.text),
|
|
116
131
|
}
|
|
117
132
|
if (config.blocks) {
|
|
118
|
-
body.blocks = config.blocks
|
|
133
|
+
body.blocks = slackBlocks(config.blocks)
|
|
119
134
|
}
|
|
120
135
|
const response = await fetch(baseUrl + 'chat.update', {
|
|
121
136
|
method: 'POST',
|
|
@@ -376,11 +391,11 @@ async function integration_slack(config: any, context: Record<string, unknown>)
|
|
|
376
391
|
case 'schedule-message': {
|
|
377
392
|
const body: Record<string, any> = {
|
|
378
393
|
channel: config.channel,
|
|
379
|
-
text: config.text,
|
|
394
|
+
text: slackText(config.text),
|
|
380
395
|
post_at: config.postAt || Math.floor(Date.now() / 1000) + 60,
|
|
381
396
|
}
|
|
382
397
|
if (config.blocks) {
|
|
383
|
-
body.blocks = config.blocks
|
|
398
|
+
body.blocks = slackBlocks(config.blocks)
|
|
384
399
|
}
|
|
385
400
|
const response = await fetch(baseUrl + 'chat.scheduleMessage', {
|
|
386
401
|
method: 'POST',
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { NodeHandlerGenerator, handlerToString } from '../types'
|
|
2
|
+
|
|
3
|
+
// Client node, for the newsletter's confirm page. It hands the link's token
|
|
4
|
+
// (from the page URL) to the dedicated /api/newsletter/confirm route, which
|
|
5
|
+
// checks it and subscribes the person on the server. `{ ok, email? }`: a link
|
|
6
|
+
// that is expired or not one is `{ ok: false }`, never an error.
|
|
7
|
+
async function newsletter_confirm(config: any, context: Record<string, unknown>) {
|
|
8
|
+
const token = config && config.token != null ? String(config.token).trim() : ''
|
|
9
|
+
if (!token) {
|
|
10
|
+
return { ok: false }
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const baseUrl = (context && (context as any).__baseUrl) || ''
|
|
14
|
+
const response = await fetch(baseUrl + '/api/newsletter/confirm', {
|
|
15
|
+
method: 'POST',
|
|
16
|
+
headers: { 'Content-Type': 'application/json' },
|
|
17
|
+
body: JSON.stringify({ token }),
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
let data: any = {}
|
|
21
|
+
try {
|
|
22
|
+
data = await response.json()
|
|
23
|
+
} catch (_e) {}
|
|
24
|
+
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
(data && data.error) || 'We could not confirm the subscription. Please try again.'
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const result: any = { ok: !!data && data.ok === true }
|
|
32
|
+
if (result.ok && typeof data.email === 'string') {
|
|
33
|
+
result.email = data.email
|
|
34
|
+
}
|
|
35
|
+
return result
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const newsletterConfirm: NodeHandlerGenerator = {
|
|
39
|
+
nodeType: 'newsletter-confirm',
|
|
40
|
+
executionEnv: 'client',
|
|
41
|
+
generateHandler(): string {
|
|
42
|
+
return handlerToString(newsletter_confirm)
|
|
43
|
+
},
|
|
44
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { NodeHandlerGenerator, ServerHandlerOptions } from '../types'
|
|
2
|
+
import { serverHandlerPrefix } from '../general/visitor-request'
|
|
3
|
+
import { newsletterHelperSpecifier } from '../../newsletter/newsletter-scope'
|
|
4
|
+
|
|
5
|
+
/** What the step fails with on a site whose newsletter is not generated. */
|
|
6
|
+
export const NEWSLETTER_NOT_SET_UP_MESSAGE =
|
|
7
|
+
'The newsletter is not set up on this site. Switch on Newsletter, then publish again.'
|
|
8
|
+
|
|
9
|
+
/** What the step fails with when the site's database does not answer. */
|
|
10
|
+
export const NEWSLETTER_TRY_AGAIN_MESSAGE =
|
|
11
|
+
'We could not add you to the newsletter. Please try again in a moment.'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Server node. Adds the address a visitor typed to the newsletter through the
|
|
15
|
+
* site's helper (`utils/newsletter/newsletter.js`), which decides everything:
|
|
16
|
+
* double opt-in, an unsubscribed address only ever mailed a confirmation link,
|
|
17
|
+
* the per-address limit, the event and the welcome email. `website` is the
|
|
18
|
+
* form's honeypot: filled, nothing is written. Every run answers
|
|
19
|
+
* `{ ok: true, pending }` after the same minimum time, whatever happened to
|
|
20
|
+
* the address. The visitor limit is the step's `visitorLimit` (scope
|
|
21
|
+
* `newsletter-signup`), which the feature builders declare.
|
|
22
|
+
*
|
|
23
|
+
* The helper is a static `require` (Next's server build bundles it), emitted
|
|
24
|
+
* only where the route's place is known; elsewhere the step refuses.
|
|
25
|
+
*/
|
|
26
|
+
const generateSubscribeHandler = (
|
|
27
|
+
relativePrefix: string | null
|
|
28
|
+
): string => `var __newsletterHelper = typeof __newsletterHelper !== 'undefined' ? __newsletterHelper : ${
|
|
29
|
+
relativePrefix
|
|
30
|
+
? `(function () { try { return require('${newsletterHelperSpecifier(
|
|
31
|
+
relativePrefix
|
|
32
|
+
)}'); } catch (_e) { return null; } })()`
|
|
33
|
+
: 'null'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
async function newsletter_subscribe(config, context) {
|
|
37
|
+
var newsletter = __newsletterHelper;
|
|
38
|
+
if (!newsletter) {
|
|
39
|
+
throw new Error(${JSON.stringify(NEWSLETTER_NOT_SET_UP_MESSAGE)});
|
|
40
|
+
}
|
|
41
|
+
var startedAt = Date.now();
|
|
42
|
+
var answer = newsletter.publicSubscribeAnswer();
|
|
43
|
+
var trap = config && config.website != null ? String(config.website).trim() : '';
|
|
44
|
+
if (!trap) {
|
|
45
|
+
var email = newsletter.normalizeEmail(config && config.email);
|
|
46
|
+
if (!email) {
|
|
47
|
+
throw new Error('Enter a valid email address.');
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
await newsletter.withNewsletterDb(function (db) {
|
|
51
|
+
return newsletter.subscribeNewsletterPerson({
|
|
52
|
+
db: db,
|
|
53
|
+
email: email,
|
|
54
|
+
signUpPoint: newsletter.visitorSignUpPoint(config && config.signUpPoint),
|
|
55
|
+
req: context && context.__request,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
} catch (err) {
|
|
59
|
+
// Logged by code and message only (never a database row); the visitor
|
|
60
|
+
// is told nothing about the database.
|
|
61
|
+
console.error('[newsletter] sign-up failed:', newsletter.safeError(err));
|
|
62
|
+
throw new Error(${JSON.stringify(NEWSLETTER_TRY_AGAIN_MESSAGE)});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
await newsletter.waitUntilElapsed(startedAt, newsletter.NEWSLETTER_MIN_RESPONSE_MS);
|
|
66
|
+
return { ok: answer.ok === true, pending: answer.pending === true };
|
|
67
|
+
}`
|
|
68
|
+
|
|
69
|
+
export const newsletterSubscribe: NodeHandlerGenerator = {
|
|
70
|
+
nodeType: 'newsletter-subscribe',
|
|
71
|
+
executionEnv: 'server',
|
|
72
|
+
generateHandler(): string {
|
|
73
|
+
return generateSubscribeHandler(null)
|
|
74
|
+
},
|
|
75
|
+
generateServerHandler(options?: ServerHandlerOptions): string {
|
|
76
|
+
return generateSubscribeHandler(serverHandlerPrefix(options))
|
|
77
|
+
},
|
|
78
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { NodeHandlerGenerator, handlerToString } from '../types'
|
|
2
|
+
|
|
3
|
+
// Client node, for the newsletter's unsubscribe page. It hands the link's
|
|
4
|
+
// token (from the page URL) to the dedicated /api/newsletter/unsubscribe
|
|
5
|
+
// route, which checks it and takes the person off the list on the server
|
|
6
|
+
// (idempotent). `{ ok, email? }`: a link that is not one is `{ ok: false }`,
|
|
7
|
+
// never an error; `email` lets the page offer to subscribe again.
|
|
8
|
+
async function newsletter_unsubscribe(config: any, context: Record<string, unknown>) {
|
|
9
|
+
const token = config && config.token != null ? String(config.token).trim() : ''
|
|
10
|
+
if (!token) {
|
|
11
|
+
return { ok: false }
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const baseUrl = (context && (context as any).__baseUrl) || ''
|
|
15
|
+
const response = await fetch(baseUrl + '/api/newsletter/unsubscribe', {
|
|
16
|
+
method: 'POST',
|
|
17
|
+
headers: { 'Content-Type': 'application/json' },
|
|
18
|
+
body: JSON.stringify({ token }),
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
let data: any = {}
|
|
22
|
+
try {
|
|
23
|
+
data = await response.json()
|
|
24
|
+
} catch (_e) {}
|
|
25
|
+
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new Error((data && data.error) || 'We could not unsubscribe you. Please try again.')
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const result: any = { ok: !!data && data.ok === true }
|
|
31
|
+
if (result.ok && typeof data.email === 'string') {
|
|
32
|
+
result.email = data.email
|
|
33
|
+
}
|
|
34
|
+
return result
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const newsletterUnsubscribe: NodeHandlerGenerator = {
|
|
38
|
+
nodeType: 'newsletter-unsubscribe',
|
|
39
|
+
executionEnv: 'client',
|
|
40
|
+
generateHandler(): string {
|
|
41
|
+
return handlerToString(newsletter_unsubscribe)
|
|
42
|
+
},
|
|
43
|
+
}
|
|
@@ -7,8 +7,6 @@ async function realtime_join_channel(config: any, context: Record<string, unknow
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
const rt = typeof window !== 'undefined' ? (window as any).__teleportRealtime : null
|
|
10
|
-
const userId = rt ? rt.getUserId() : 'anon'
|
|
11
|
-
const userName = rt ? rt.getUserName() : 'Anonymous'
|
|
12
10
|
const channelData = config.channelData || undefined
|
|
13
11
|
let parsedChannelData
|
|
14
12
|
if (channelData && typeof channelData === 'string') {
|
|
@@ -26,14 +24,17 @@ async function realtime_join_channel(config: any, context: Record<string, unknow
|
|
|
26
24
|
const joinRes = await fetch(baseUrl + '/api/realtime/join', {
|
|
27
25
|
method: 'POST',
|
|
28
26
|
headers: { 'Content-Type': 'application/json' },
|
|
27
|
+
// Who joins is the server's call (the site's session, or an opaque id
|
|
28
|
+
// it issues): the body carries no user.
|
|
29
29
|
body: JSON.stringify({
|
|
30
30
|
channelName,
|
|
31
|
-
userId,
|
|
32
|
-
userName,
|
|
33
31
|
userData: parsedChannelData,
|
|
34
32
|
}),
|
|
35
33
|
})
|
|
36
34
|
const joinData = await joinRes.json()
|
|
35
|
+
const identity = (joinData && joinData.identity) || {}
|
|
36
|
+
const userId = identity.id || (rt ? rt.getUserId() : '')
|
|
37
|
+
const userName = identity.name || (rt ? rt.getUserName() : 'Anonymous')
|
|
37
38
|
|
|
38
39
|
if (!joinRes.ok) {
|
|
39
40
|
return {
|
|
@@ -4,8 +4,19 @@ async function realtime_send_channel_event(config: any, context: Record<string,
|
|
|
4
4
|
const channelName = config.channelName
|
|
5
5
|
const eventName = config.eventName
|
|
6
6
|
const eventData = config.eventData || null
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// Run for a signed-in visitor, the send goes out as that visitor — the
|
|
8
|
+
// session the segment route verified, never a value the request carries.
|
|
9
|
+
// Otherwise (a guest, a cron, an automation) as the author configured, or
|
|
10
|
+
// "System".
|
|
11
|
+
const ctx = (context || {}) as any
|
|
12
|
+
const sessionId =
|
|
13
|
+
ctx.__sessionUserId != null && ctx.__sessionUserId !== '' ? String(ctx.__sessionUserId) : ''
|
|
14
|
+
const sessionName =
|
|
15
|
+
ctx.__sessionUser && typeof ctx.__sessionUser.name === 'string' && ctx.__sessionUser.name
|
|
16
|
+
? ctx.__sessionUser.name
|
|
17
|
+
: 'Member'
|
|
18
|
+
const senderId = sessionId || config.senderId || 'system'
|
|
19
|
+
const senderName = sessionId ? sessionName : config.senderName || 'System'
|
|
9
20
|
|
|
10
21
|
if (!channelName) {
|
|
11
22
|
return { success: false, error: 'channelName is required' }
|