@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
package/src/security-scanner.ts
CHANGED
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
* SINGLE SOURCE OF TRUTH for the protected names — keep in sync with:
|
|
17
17
|
* - teleport-gui/packages/workflow-schema/src/security/protected-env-names.ts
|
|
18
18
|
* - teleport-services-worker/src/modules/vercel/security/protected-env-names.ts
|
|
19
|
+
* - the runtime shadow in nodes/general/general-custom-js.ts
|
|
20
|
+
* (`__tests__/security-lists-parity.test.ts` fails when they drift). Every
|
|
21
|
+
* secret TeleportHQ keeps for the site (`SYSTEM_MANAGED_SECRET_NAMES`, GUI and
|
|
22
|
+
* worker) is one of them: the app secret signs every session and is what the
|
|
23
|
+
* site's own server code presents to its routes.
|
|
19
24
|
*/
|
|
20
25
|
|
|
21
26
|
export const PROTECTED_ENV_NAMES = [
|
|
@@ -29,6 +34,15 @@ export const PROTECTED_ENV_NAMES = [
|
|
|
29
34
|
'PDF_SERVICE_API_KEY',
|
|
30
35
|
'TELEPORT_CRON_SECRET',
|
|
31
36
|
'TELEPORT_CRON_SECRET_PREVIOUS',
|
|
37
|
+
'NEXTAUTH_SECRET',
|
|
38
|
+
'AUTH_PEPPER_SECRET',
|
|
39
|
+
'VERCEL_AUTOMATION_BYPASS_SECRET',
|
|
40
|
+
'TQ_CACHE_SECRET',
|
|
41
|
+
// The site's newsletter service key and the services worker's address: only
|
|
42
|
+
// the admin panel's newsletter route reads them.
|
|
43
|
+
'NEWSLETTER_SERVICE_TOKEN',
|
|
44
|
+
'NEWSLETTER_SERVICE_URL',
|
|
45
|
+
// The password wall's secret. Only the wall reads it.
|
|
32
46
|
'TELEPORT_WALL_SECRET',
|
|
33
47
|
] as const
|
|
34
48
|
|
|
@@ -43,6 +57,112 @@ export const PROTECTED_ENV_NAMES = [
|
|
|
43
57
|
export const PROTECTED_ENV_NAME_PATTERN =
|
|
44
58
|
/^(?:CONFIGURATION_)?(?:STRIPE|PAYPAL|MOLLIE|RAZORPAY|SQUARE|PADDLE|COINGATE)_[A-Z0-9_]+$/
|
|
45
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Every `TELEPORT_DB_` name: the TeleportHQ database the platform provisions —
|
|
62
|
+
* `TELEPORT_DB_CONNECTION_STRING`, the HOST / PORT / USER / PASSWORD / NAME /
|
|
63
|
+
* SSL parts a self-hosted site may set instead, and whatever part a later one
|
|
64
|
+
* names. Platform secrets like the list above (the GUI refuses them in a node
|
|
65
|
+
* config too). Mirror of the GUI's `PLATFORM_ENV_NAME_PATTERN`; the runtime
|
|
66
|
+
* guard in `general-custom-js.ts` denies the same names.
|
|
67
|
+
*/
|
|
68
|
+
export const PLATFORM_ENV_NAME_PATTERN = /^TELEPORT_DB_[A-Z0-9_]+$/
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Every `__` name: what TeleportHQ's integrations keep for the editor
|
|
72
|
+
* (`__gsc_*`, `__google_merchant_*`, `__social_oauth_<platform>_*`, another
|
|
73
|
+
* member's sign-in). A build published before 2026-10-26 carries them in its
|
|
74
|
+
* environment. Mirror of the GUI's `INTEGRATION_ENV_NAME_PATTERN`; the runtime
|
|
75
|
+
* guard in `general-custom-js.ts` denies the same names.
|
|
76
|
+
*/
|
|
77
|
+
export const INTEGRATION_ENV_NAME_PATTERN = /^__[A-Za-z0-9_]+$/
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Such a name read from `env` (`env.__x`, `env['__x']`). Only in that
|
|
81
|
+
* position: `__proto__` or `__dirname` elsewhere in the code is not one.
|
|
82
|
+
*/
|
|
83
|
+
const INTEGRATION_ENV_READ = /\benv\s*(?:\.\s*|\[\s*["'`])(__[A-Za-z0-9_]+)/g
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Sandbox escapes the runtime's `process` shadow cannot stop: the Function
|
|
87
|
+
* constructor reached through any function's `constructor` runs in the real
|
|
88
|
+
* global scope (`(function(){}).constructor('return process')()`,
|
|
89
|
+
* `Function.prototype.constructor(...)`, an async or generator function's),
|
|
90
|
+
* `process.env` read through a property descriptor or `Reflect`, and a scan of
|
|
91
|
+
* the global object for something that looks like `process`. Matched against
|
|
92
|
+
* the code with comments stripped and escapes decoded.
|
|
93
|
+
*
|
|
94
|
+
* SAME ENTRIES, kept in sync with:
|
|
95
|
+
* - teleport-gui/packages/workflow-schema/src/security/sandbox-escape-patterns.ts
|
|
96
|
+
* - teleport-services-worker/src/modules/vercel/security/sandbox-escape-patterns.ts
|
|
97
|
+
*/
|
|
98
|
+
export const SANDBOX_ESCAPE_PATTERNS: ReadonlyArray<{
|
|
99
|
+
ruleId: 'sandbox-escape-constructor' | 'indirect-process-access' | 'global-enumeration'
|
|
100
|
+
message: string
|
|
101
|
+
pattern: RegExp
|
|
102
|
+
}> = [
|
|
103
|
+
{
|
|
104
|
+
ruleId: 'sandbox-escape-constructor',
|
|
105
|
+
message:
|
|
106
|
+
'reaches a function constructor through .constructor (compare it or read .name instead)',
|
|
107
|
+
pattern: /\.\s*constructor\b(?!\s*(?:[!=]==?|\.\s*name\b))/,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
ruleId: 'sandbox-escape-constructor',
|
|
111
|
+
message: 'names "constructor" as a key',
|
|
112
|
+
pattern: /["'`]constructor["'`]/,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
ruleId: 'sandbox-escape-constructor',
|
|
116
|
+
message: 'destructures constructor',
|
|
117
|
+
pattern: /[{,]\s*constructor\s*[:,}=]/,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
ruleId: 'indirect-process-access',
|
|
121
|
+
message: 'reads process through a property descriptor or Reflect',
|
|
122
|
+
pattern:
|
|
123
|
+
/\b(?:Object\s*\.\s*getOwnPropertyDescriptors?|Reflect\s*\.\s*(?:get|getOwnPropertyDescriptor|ownKeys|has))\s*\(\s*(?:(?:globalThis|global)\s*\.\s*)?process\b/,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
ruleId: 'indirect-process-access',
|
|
127
|
+
message: 'returns this from a plain function (the global object outside strict mode)',
|
|
128
|
+
pattern: /\bfunction\b[^{}]*\{\s*return\s+this\s*;?\s*\}/,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
ruleId: 'global-enumeration',
|
|
132
|
+
message: 'enumerates the global object',
|
|
133
|
+
pattern:
|
|
134
|
+
/\b(?:Object\s*\.\s*(?:keys|values|entries|getOwnPropertyNames|getOwnPropertyDescriptors)|Reflect\s*\.\s*ownKeys)\s*\(\s*(?:globalThis|global)\s*\)/,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
ruleId: 'global-enumeration',
|
|
138
|
+
message: 'iterates the global object',
|
|
139
|
+
pattern: /\bfor\s*\(\s*(?:var|let|const)?\s*\w+\s+(?:in|of)\s+(?:globalThis|global)\b/,
|
|
140
|
+
},
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Joins adjacent string literals (`'const' + 'ructor'` → `'constructor'`), so a
|
|
145
|
+
* name split to slip past the patterns is matched whole. The patterns are
|
|
146
|
+
* matched against the folded code. Same function in the two other copies.
|
|
147
|
+
*/
|
|
148
|
+
export const foldStringConcatenations = (code: string): string => {
|
|
149
|
+
const pair = /(["'])((?:(?!\1)[^\\\n])*)\1\s*\+\s*(["'])((?:(?!\3)[^\\\n])*)\3/g
|
|
150
|
+
let previous = ''
|
|
151
|
+
let folded = code
|
|
152
|
+
while (folded !== previous) {
|
|
153
|
+
previous = folded
|
|
154
|
+
folded = folded.replace(
|
|
155
|
+
pair,
|
|
156
|
+
(whole: string, _open: string, left: string, _next: string, right: string) => {
|
|
157
|
+
const joined = left + right
|
|
158
|
+
const quote = joined.indexOf("'") === -1 ? "'" : joined.indexOf('"') === -1 ? '"' : ''
|
|
159
|
+
return quote ? quote + joined + quote : whole
|
|
160
|
+
}
|
|
161
|
+
)
|
|
162
|
+
}
|
|
163
|
+
return folded
|
|
164
|
+
}
|
|
165
|
+
|
|
46
166
|
export interface CodegenSecurityViolation {
|
|
47
167
|
workflowId: string
|
|
48
168
|
workflowName?: string
|
|
@@ -78,20 +198,28 @@ interface WorkflowLike {
|
|
|
78
198
|
|
|
79
199
|
interface WorkflowsContainer {
|
|
80
200
|
workflows?: Record<string, WorkflowLike>
|
|
201
|
+
customNodes?: Record<string, WorkflowLike>
|
|
81
202
|
}
|
|
82
203
|
|
|
83
204
|
/**
|
|
84
|
-
* Walks the UIDL workflow definitions and
|
|
85
|
-
* any `general-custom-js` body trips the scanner.
|
|
205
|
+
* Walks the UIDL workflow definitions and custom nodes and throws
|
|
206
|
+
* `CodegenSecurityError` if any `general-custom-js` body trips the scanner.
|
|
207
|
+
* A custom node's code runs on the server too (its own segment routes, and
|
|
208
|
+
* in process inside the cron, webhook and automation routes that call it):
|
|
209
|
+
* its violation names the custom node (`workflowId` is the custom node's id).
|
|
86
210
|
*
|
|
87
211
|
* Per `general-custom-js` the only place a user can write JS is the `code`
|
|
88
212
|
* config field, so we look only there. Other node types use structured
|
|
89
213
|
* configs we don't touch.
|
|
90
214
|
*/
|
|
91
215
|
export function assertWorkflowsAreSecure(workflowsContainer: WorkflowsContainer | undefined): void {
|
|
92
|
-
if (!workflowsContainer
|
|
216
|
+
if (!workflowsContainer) return
|
|
93
217
|
const violations: CodegenSecurityViolation[] = []
|
|
94
|
-
|
|
218
|
+
const owners = [
|
|
219
|
+
...Object.entries(workflowsContainer.workflows || {}),
|
|
220
|
+
...Object.entries(workflowsContainer.customNodes || {}),
|
|
221
|
+
]
|
|
222
|
+
for (const [wfId, wf] of owners) {
|
|
95
223
|
if (!wf || !Array.isArray(wf.nodes)) continue
|
|
96
224
|
for (const node of wf.nodes) {
|
|
97
225
|
const nodeAsUnknown = node as unknown as {
|
|
@@ -100,9 +228,13 @@ export function assertWorkflowsAreSecure(workflowsContainer: WorkflowsContainer
|
|
|
100
228
|
id?: string
|
|
101
229
|
}
|
|
102
230
|
if (nodeAsUnknown?.type !== 'general-custom-js') continue
|
|
103
|
-
const code = nodeAsUnknown.config?.code
|
|
104
|
-
if (
|
|
105
|
-
|
|
231
|
+
const code = nodeAsUnknown.config?.code as unknown
|
|
232
|
+
if (code === undefined || code === null || code === '') continue
|
|
233
|
+
// Code the runtime would resolve before compiling it (a token, a context
|
|
234
|
+
// value, a secret, an inserted value) is whatever it resolves to.
|
|
235
|
+
const findings = isAuthoredText(code)
|
|
236
|
+
? scanForObviousViolations(code)
|
|
237
|
+
: [{ rule: 'unreadable-step-code', message: REFERENCE_CODE_MESSAGE }]
|
|
106
238
|
for (const finding of findings) {
|
|
107
239
|
violations.push({
|
|
108
240
|
workflowId: wfId,
|
|
@@ -122,13 +254,92 @@ interface ScannerFinding {
|
|
|
122
254
|
message: string
|
|
123
255
|
}
|
|
124
256
|
|
|
257
|
+
/**
|
|
258
|
+
* `process.env` read as a value — the whole environment — or with a key the
|
|
259
|
+
* code does not spell out: the editor's `process-without-property` and
|
|
260
|
+
* `dynamic-env-access` (teleport-gui `workflow-schema/src/security/scan-custom-js.ts`,
|
|
261
|
+
* and the worker's copy), read from the text. A `process.env` only tested for
|
|
262
|
+
* its truth (`!process.env`, `process.env ? … : …`, `process.env && …`), or
|
|
263
|
+
* named into a variable whose properties are read, is not one; a key written
|
|
264
|
+
* as a string, or as a variable the code sets to one, is spelled out.
|
|
265
|
+
*/
|
|
266
|
+
const ENV_READ = /\bprocess\s*(?:\?\.|\.)\s*env\b/g
|
|
267
|
+
|
|
268
|
+
function envReadFindings(code: string): ScannerFinding[] {
|
|
269
|
+
let bare = false
|
|
270
|
+
let dynamic = false
|
|
271
|
+
ENV_READ.lastIndex = 0
|
|
272
|
+
for (let match = ENV_READ.exec(code); match !== null; match = ENV_READ.exec(code)) {
|
|
273
|
+
const before = code.slice(0, match.index)
|
|
274
|
+
const after = code.slice(match.index + match[0].length)
|
|
275
|
+
const key = /^\s*(?:\?\.\s*)?\[\s*([^\]]*?)\s*\]/.exec(after)
|
|
276
|
+
if (key) {
|
|
277
|
+
const spelled =
|
|
278
|
+
/^(["'`])[^"'`\\]*\1$/.test(key[1]) ||
|
|
279
|
+
(/^[A-Za-z_$][\w$]*$/.test(key[1]) &&
|
|
280
|
+
new RegExp(
|
|
281
|
+
`\\b(?:const|let|var)\\s+${key[1].replace(/\$/g, '\\$')}\\s*=\\s*(["'\`])[^"'\`]*\\1`
|
|
282
|
+
).test(code))
|
|
283
|
+
if (!spelled) {
|
|
284
|
+
dynamic = true
|
|
285
|
+
}
|
|
286
|
+
continue
|
|
287
|
+
}
|
|
288
|
+
if (/^\s*(?:\?\.|\.|\[)/.test(after)) {
|
|
289
|
+
continue
|
|
290
|
+
}
|
|
291
|
+
if (/^\s*(?:\?(?![.?])|&&|\|\||[!=]==?)/.test(after)) {
|
|
292
|
+
continue
|
|
293
|
+
}
|
|
294
|
+
if (
|
|
295
|
+
/(?:!|\btypeof|\bif\s*\(|\bwhile\s*\(|\bBoolean\s*\(|&&|\|\||\b(?:const|let|var)\s+[\w$]+\s*=)\s*$/.test(
|
|
296
|
+
before
|
|
297
|
+
)
|
|
298
|
+
) {
|
|
299
|
+
continue
|
|
300
|
+
}
|
|
301
|
+
bare = true
|
|
302
|
+
}
|
|
303
|
+
const out: ScannerFinding[] = []
|
|
304
|
+
if (bare) {
|
|
305
|
+
out.push({
|
|
306
|
+
rule: 'process-without-property',
|
|
307
|
+
message: 'uses process.env as a value, which exposes every variable',
|
|
308
|
+
})
|
|
309
|
+
}
|
|
310
|
+
if (dynamic) {
|
|
311
|
+
out.push({
|
|
312
|
+
rule: 'dynamic-env-access',
|
|
313
|
+
message: 'reads process.env with a key it does not spell out',
|
|
314
|
+
})
|
|
315
|
+
}
|
|
316
|
+
return out
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const REFERENCE_CODE_MESSAGE =
|
|
320
|
+
'uses a reference as its code (a {{…}} token, a context value, a secret or an inserted value): the server would compile whatever it resolves to'
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Text the author wrote, which the runtime compiles as it is
|
|
324
|
+
* (`isAuthoredText` / `resolveNodeConfig` in executor-generator.ts): a string with no inserted
|
|
325
|
+
* value, not a whole `{{…}}` token, not a secret reference. Mirrors
|
|
326
|
+
* teleport-gui `workflow-schema/src/security/compiled-code.ts` and the worker's
|
|
327
|
+
* `security-precheck.ts` (`isAuthoredText`).
|
|
328
|
+
*/
|
|
329
|
+
export const isAuthoredText = (value: unknown): value is string =>
|
|
330
|
+
typeof value === 'string' &&
|
|
331
|
+
value.indexOf('context-value-inline') === -1 &&
|
|
332
|
+
!/^\s*\{\{[\s\S]*\}\}\s*$/.test(value) &&
|
|
333
|
+
value.indexOf('WORKFLOW_SECRET_') !== 0 &&
|
|
334
|
+
value.indexOf('teleporthq.secrets.') !== 0
|
|
335
|
+
|
|
125
336
|
/**
|
|
126
337
|
* Regex-based scan. Sufficient at the codegen layer because:
|
|
127
338
|
* - the GUI's AST scanner has already vetted the code.
|
|
128
339
|
* - the services-worker re-runs the full AST scan on the publish payload.
|
|
129
340
|
* - the runtime `process` Proxy preamble denies even successful escapes.
|
|
130
341
|
*/
|
|
131
|
-
function scanForObviousViolations(rawCode: string): ScannerFinding[] {
|
|
342
|
+
export function scanForObviousViolations(rawCode: string): ScannerFinding[] {
|
|
132
343
|
const out: ScannerFinding[] = []
|
|
133
344
|
const code = stripCommentsAndDecodeEscapes(rawCode)
|
|
134
345
|
|
|
@@ -140,15 +351,40 @@ function scanForObviousViolations(rawCode: string): ScannerFinding[] {
|
|
|
140
351
|
})
|
|
141
352
|
}
|
|
142
353
|
}
|
|
143
|
-
const
|
|
144
|
-
|
|
354
|
+
const words = code.match(/\b[A-Z][A-Z0-9_]+\b/g) || []
|
|
355
|
+
const platformNames = words.filter(
|
|
356
|
+
(word) =>
|
|
357
|
+
PLATFORM_ENV_NAME_PATTERN.test(word) &&
|
|
358
|
+
(PROTECTED_ENV_NAMES as ReadonlyArray<string>).indexOf(word) === -1
|
|
145
359
|
)
|
|
360
|
+
for (const name of Array.from(new Set(platformNames))) {
|
|
361
|
+
out.push({
|
|
362
|
+
rule: 'protected-env-access',
|
|
363
|
+
message: `references protected platform secret "${name}"`,
|
|
364
|
+
})
|
|
365
|
+
}
|
|
366
|
+
const credentialNames = words.filter((word) => PROTECTED_ENV_NAME_PATTERN.test(word))
|
|
146
367
|
for (const name of Array.from(new Set(credentialNames))) {
|
|
147
368
|
out.push({
|
|
148
369
|
rule: 'protected-env-access',
|
|
149
370
|
message: `references payment credential "${name}"`,
|
|
150
371
|
})
|
|
151
372
|
}
|
|
373
|
+
const integrationNames: string[] = []
|
|
374
|
+
INTEGRATION_ENV_READ.lastIndex = 0
|
|
375
|
+
for (
|
|
376
|
+
let read = INTEGRATION_ENV_READ.exec(code);
|
|
377
|
+
read !== null;
|
|
378
|
+
read = INTEGRATION_ENV_READ.exec(code)
|
|
379
|
+
) {
|
|
380
|
+
integrationNames.push(read[1])
|
|
381
|
+
}
|
|
382
|
+
for (const name of Array.from(new Set(integrationNames))) {
|
|
383
|
+
out.push({
|
|
384
|
+
rule: 'protected-env-access',
|
|
385
|
+
message: `reads integration secret "${name}"`,
|
|
386
|
+
})
|
|
387
|
+
}
|
|
152
388
|
if (/\beval\s*\(/.test(code)) {
|
|
153
389
|
out.push({ rule: 'sandbox-escape-eval', message: 'calls eval(...)' })
|
|
154
390
|
}
|
|
@@ -187,6 +423,13 @@ function scanForObviousViolations(rawCode: string): ScannerFinding[] {
|
|
|
187
423
|
message: 'reaches process via globalThis / global',
|
|
188
424
|
})
|
|
189
425
|
}
|
|
426
|
+
const folded = foldStringConcatenations(code)
|
|
427
|
+
for (const escape of SANDBOX_ESCAPE_PATTERNS) {
|
|
428
|
+
if (escape.pattern.test(folded)) {
|
|
429
|
+
out.push({ rule: escape.ruleId, message: escape.message })
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
out.push(...envReadFindings(code))
|
|
190
433
|
// Mass enumeration of process.env
|
|
191
434
|
if (
|
|
192
435
|
/\bObject\.(?:keys|values|entries|assign|fromEntries|getOwnProperty(?:Names|Symbols|Descriptors))\s*\(\s*(?:[^)]*,\s*)?process\.env\b/.test(
|
package/src/segment-splitter.ts
CHANGED
|
@@ -25,8 +25,11 @@ const resolveExecutionEnv = (
|
|
|
25
25
|
// function (which has its own client/server segments). The server handler is
|
|
26
26
|
// a stub — if this node is placed in a server segment the nested workflow
|
|
27
27
|
// never runs and downstream references to its output resolve to the marker.
|
|
28
|
+
// The exception is a call of a node only server code may run (`serverOnly`,
|
|
29
|
+
// which the editor marks `executionEnv: 'server'`): it stays in its caller's
|
|
30
|
+
// server segment, whose route runs it (server-custom-node-call.ts).
|
|
28
31
|
if (node.type === 'general-custom-node') {
|
|
29
|
-
return 'client'
|
|
32
|
+
return node.executionEnv === 'server' ? 'server' : 'client'
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
const registered = nodeRegistry[node.type]
|
|
@@ -412,9 +415,14 @@ const ROUTE_ONLY_ACCOUNT_CONFIG_KEYS = new Set<string>([
|
|
|
412
415
|
...WELCOME_EMAIL_CONFIG_KEYS,
|
|
413
416
|
'domain',
|
|
414
417
|
'deletedEmailPattern',
|
|
418
|
+
'resetPagePath',
|
|
415
419
|
])
|
|
416
420
|
|
|
417
|
-
const ROUTE_BACKED_ACCOUNT_NODE_TYPES = new Set([
|
|
421
|
+
const ROUTE_BACKED_ACCOUNT_NODE_TYPES = new Set([
|
|
422
|
+
'account-signup',
|
|
423
|
+
'account-delete-current',
|
|
424
|
+
'account-request-password-reset',
|
|
425
|
+
])
|
|
418
426
|
|
|
419
427
|
const redactRouteOnlyAccountConfig = (config: Record<string, unknown>): Record<string, unknown> => {
|
|
420
428
|
const safe: Record<string, unknown> = {}
|
package/src/segment-trust.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { UIDLWorkflowEdge, UIDLWorkflowNode } from '@teleporthq/teleport-types'
|
|
2
2
|
import { isFireAndForgetSegment } from './await-result'
|
|
3
3
|
import { WorkflowSegment } from './types'
|
|
4
|
+
import { collectMessageTrust, MessageTrust } from './nodes/email/message-trust'
|
|
5
|
+
import { isOutboundMessageNodeType } from './nodes/general/visitor-request'
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* What a server segment route may believe about the context a request hands
|
|
@@ -22,8 +24,26 @@ import { WorkflowSegment } from './types'
|
|
|
22
24
|
* - `previousFrom`: when the segment right before this one runs on the
|
|
23
25
|
* server, the node whose result the caller must hand on as
|
|
24
26
|
* `__previousNodeResult` (the runtime sets it from that node's signed result).
|
|
27
|
+
*
|
|
28
|
+
* What a signature binds (see the server runtime): the workflow (`workflowId`),
|
|
29
|
+
* the segment that produced the result (`signedBy`, and `segmentId` for this
|
|
30
|
+
* route's own), the run it belongs to and when it was made. A run is opened by
|
|
31
|
+
* the first server segment of the graph (`opensRun`), which never adopts one a
|
|
32
|
+
* request names; every later segment continues the run its request carries.
|
|
33
|
+
*
|
|
34
|
+
* `session` says which of the visitor's identity this route reads, so it is
|
|
35
|
+
* taken from the session cookie on the server and never from the request:
|
|
36
|
+
* - `identityNodes`: the graph's current-user readers (`account-get-current`,
|
|
37
|
+
* `account-refresh-session`). They run in the browser; the route rebuilds
|
|
38
|
+
* their result from the session.
|
|
39
|
+
* - `identityReads`: the `data-select` / `data-count` nodes of this segment
|
|
40
|
+
* filtered by the visitor's identity, with those columns. Without an
|
|
41
|
+
* identity (a guest) such a read matches nothing, never the whole table.
|
|
42
|
+
* Absent when the segment reads no identity.
|
|
25
43
|
*/
|
|
26
44
|
export interface SegmentGraph {
|
|
45
|
+
/** The workflow (or custom node) the graph belongs to. */
|
|
46
|
+
id?: string
|
|
27
47
|
nodes: UIDLWorkflowNode[]
|
|
28
48
|
edges: UIDLWorkflowEdge[]
|
|
29
49
|
/** Every segment of the graph, in the order the runtime executes them. */
|
|
@@ -36,11 +56,164 @@ export interface SegmentBranchGate {
|
|
|
36
56
|
branches: Array<{ when: string; nodeIds: string[] }>
|
|
37
57
|
}
|
|
38
58
|
|
|
59
|
+
export interface SegmentSessionNeeds {
|
|
60
|
+
identityNodes: Record<string, string>
|
|
61
|
+
identityReads: Record<string, string[]>
|
|
62
|
+
}
|
|
63
|
+
|
|
39
64
|
export interface SegmentTrust {
|
|
40
65
|
signedNodeIds: string[]
|
|
66
|
+
signedBy: Record<string, string>
|
|
41
67
|
branchGates: SegmentBranchGate[]
|
|
42
68
|
loopBodies: Record<string, string[]>
|
|
43
69
|
previousFrom: { nodeId: string; fireAndForget: boolean } | null
|
|
70
|
+
workflowId: string
|
|
71
|
+
segmentId: string
|
|
72
|
+
opensRun: boolean
|
|
73
|
+
session?: SegmentSessionNeeds
|
|
74
|
+
/**
|
|
75
|
+
* Only for a segment with an email/SMS node: the graph's node results the
|
|
76
|
+
* send guard may trust (owner recipients, trusted HTML; see
|
|
77
|
+
* nodes/email/message-trust).
|
|
78
|
+
*/
|
|
79
|
+
messageTrust?: MessageTrust
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** The nodes whose result is the signed-in visitor (see `session` above). */
|
|
83
|
+
export const IDENTITY_NODE_TYPES: ReadonlySet<string> = new Set([
|
|
84
|
+
'account-get-current',
|
|
85
|
+
'account-refresh-session',
|
|
86
|
+
'account-login',
|
|
87
|
+
])
|
|
88
|
+
|
|
89
|
+
const IDENTITY_READ_NODE_TYPES: ReadonlySet<string> = new Set(['data-select', 'data-count'])
|
|
90
|
+
|
|
91
|
+
/** A `{{Current User.<field>}}` / `{{currentUser.<field>}}` / `{{state.currentUser…}}` token. */
|
|
92
|
+
const CURRENT_USER_TOKEN = /\{\{\s*(?:Current User|currentUser|state\.currentUser)\b/
|
|
93
|
+
|
|
94
|
+
/** Any mention of the visitor's identity or of the page state that carries it. */
|
|
95
|
+
const READS_IDENTITY = /Current User|currentUser|__stateValues/
|
|
96
|
+
|
|
97
|
+
const asContextRef = (value: unknown): { nodeId: string; path: unknown[] } | null => {
|
|
98
|
+
const ref = value as { type?: unknown; nodeId?: unknown; path?: unknown } | null
|
|
99
|
+
return ref && typeof ref === 'object' && ref.type === 'workflowContext'
|
|
100
|
+
? {
|
|
101
|
+
nodeId: typeof ref.nodeId === 'string' ? ref.nodeId : '',
|
|
102
|
+
path: Array.isArray(ref.path) ? ref.path : [],
|
|
103
|
+
}
|
|
104
|
+
: null
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Whether a filter value names the visitor: a current-user token or a reader's result. */
|
|
108
|
+
/** The node ids the inline context chips of a rich-text value point at. */
|
|
109
|
+
const chipNodeIds = (value: string): string[] => {
|
|
110
|
+
const ids: string[] = []
|
|
111
|
+
const chip = /data-ctx-node-id=(["'])([^"']*)\1/g
|
|
112
|
+
let match = chip.exec(value)
|
|
113
|
+
while (match) {
|
|
114
|
+
ids.push(match[2])
|
|
115
|
+
match = chip.exec(value)
|
|
116
|
+
}
|
|
117
|
+
return ids
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const isIdentityValue = (value: unknown, identityNodes: Record<string, string>): boolean => {
|
|
121
|
+
if (typeof value === 'string') {
|
|
122
|
+
return (
|
|
123
|
+
CURRENT_USER_TOKEN.test(value) ||
|
|
124
|
+
chipNodeIds(value).some((id) => Object.prototype.hasOwnProperty.call(identityNodes, id))
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
if (Array.isArray(value)) {
|
|
128
|
+
return value.some((part) => isIdentityValue(part, identityNodes))
|
|
129
|
+
}
|
|
130
|
+
const ref = asContextRef(value)
|
|
131
|
+
if (!ref) {
|
|
132
|
+
return false
|
|
133
|
+
}
|
|
134
|
+
if (Object.prototype.hasOwnProperty.call(identityNodes, ref.nodeId)) {
|
|
135
|
+
return true
|
|
136
|
+
}
|
|
137
|
+
// A read of the page state's `currentUser`, wherever the bag is reached from.
|
|
138
|
+
const walk = [ref.nodeId, ...ref.path]
|
|
139
|
+
for (let i = 0; i < walk.length - 1; i++) {
|
|
140
|
+
if (walk[i] === '__stateValues' && walk[i + 1] === 'currentUser') {
|
|
141
|
+
return true
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return false
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const identityColumnsOf = (
|
|
148
|
+
node: UIDLWorkflowNode,
|
|
149
|
+
identityNodes: Record<string, string>
|
|
150
|
+
): string[] => {
|
|
151
|
+
const filters = (node.config as { filters?: unknown } | undefined)?.filters
|
|
152
|
+
if (!Array.isArray(filters)) {
|
|
153
|
+
return []
|
|
154
|
+
}
|
|
155
|
+
const columns: string[] = []
|
|
156
|
+
for (const filter of filters) {
|
|
157
|
+
const f = (filter || {}) as Record<string, unknown>
|
|
158
|
+
// Read as data-select reads a filter: `destination` before `value`.
|
|
159
|
+
const column = f.column || f.source || f.field
|
|
160
|
+
const value = f.destination !== undefined ? f.destination : f.value
|
|
161
|
+
if (typeof column === 'string' && column && isIdentityValue(value, identityNodes)) {
|
|
162
|
+
if (columns.indexOf(column) === -1) {
|
|
163
|
+
columns.push(column)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return columns
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const buildSessionNeeds = (
|
|
171
|
+
segment: WorkflowSegment,
|
|
172
|
+
graph: SegmentGraph
|
|
173
|
+
): SegmentSessionNeeds | undefined => {
|
|
174
|
+
const identityNodes: Record<string, string> = {}
|
|
175
|
+
for (const node of graph.nodes) {
|
|
176
|
+
if (IDENTITY_NODE_TYPES.has(node.type)) {
|
|
177
|
+
identityNodes[node.id] = node.type
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const identityReads: Record<string, string[]> = {}
|
|
181
|
+
let readsIdentity = Object.keys(identityNodes).length > 0
|
|
182
|
+
for (const node of segment.nodes) {
|
|
183
|
+
if (IDENTITY_READ_NODE_TYPES.has(node.type)) {
|
|
184
|
+
const columns = identityColumnsOf(node, identityNodes)
|
|
185
|
+
if (columns.length > 0) {
|
|
186
|
+
identityReads[node.id] = columns
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (!readsIdentity && READS_IDENTITY.test(JSON.stringify(node.config || {}))) {
|
|
190
|
+
readsIdentity = true
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return readsIdentity || Object.keys(identityReads).length > 0
|
|
194
|
+
? { identityNodes, identityReads }
|
|
195
|
+
: undefined
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* The graph's id when the caller names it; otherwise one derived from its
|
|
200
|
+
* node ids, so two different graphs never share signatures.
|
|
201
|
+
*/
|
|
202
|
+
const graphIdOf = (graph: SegmentGraph): string => {
|
|
203
|
+
if (typeof graph.id === 'string' && graph.id) {
|
|
204
|
+
return graph.id
|
|
205
|
+
}
|
|
206
|
+
const text = graph.nodes
|
|
207
|
+
.map((n) => n.id)
|
|
208
|
+
.sort()
|
|
209
|
+
.join('|')
|
|
210
|
+
let hash = 5381
|
|
211
|
+
for (let i = 0; i < text.length; i++) {
|
|
212
|
+
// tslint:disable-next-line:no-bitwise
|
|
213
|
+
hash = ((hash << 5) + hash + text.charCodeAt(i)) | 0
|
|
214
|
+
}
|
|
215
|
+
// tslint:disable-next-line:no-bitwise
|
|
216
|
+
return `graph-${(hash >>> 0).toString(16)}-${graph.nodes.length}`
|
|
44
217
|
}
|
|
45
218
|
|
|
46
219
|
/** A switch branch is taken by a case id; this prefix keeps it apart from 'default'. */
|
|
@@ -112,13 +285,21 @@ const lastNodeByStep = (segment: WorkflowSegment): UIDLWorkflowNode | undefined
|
|
|
112
285
|
export const buildSegmentTrust = (segment: WorkflowSegment, graph: SegmentGraph): SegmentTrust => {
|
|
113
286
|
const inSegment = new Set(segment.nodes.map((n) => n.id))
|
|
114
287
|
const serverNodeIds = new Set<string>()
|
|
288
|
+
const producedBy: Record<string, string> = {}
|
|
115
289
|
for (const seg of graph.segments) {
|
|
116
290
|
if (seg.env === 'server') {
|
|
117
|
-
seg.nodes.forEach((n) =>
|
|
291
|
+
seg.nodes.forEach((n) => {
|
|
292
|
+
serverNodeIds.add(n.id)
|
|
293
|
+
producedBy[n.id] = seg.id
|
|
294
|
+
})
|
|
118
295
|
}
|
|
119
296
|
}
|
|
120
297
|
|
|
121
298
|
const signedNodeIds = Array.from(serverNodeIds).filter((id) => !inSegment.has(id))
|
|
299
|
+
const signedBy: Record<string, string> = {}
|
|
300
|
+
for (const id of signedNodeIds) {
|
|
301
|
+
signedBy[id] = producedBy[id]
|
|
302
|
+
}
|
|
122
303
|
|
|
123
304
|
const branchGates: SegmentBranchGate[] = []
|
|
124
305
|
for (const node of graph.nodes) {
|
|
@@ -166,5 +347,27 @@ export const buildSegmentTrust = (segment: WorkflowSegment, graph: SegmentGraph)
|
|
|
166
347
|
}
|
|
167
348
|
: null
|
|
168
349
|
|
|
169
|
-
|
|
350
|
+
const firstServer = graph.segments.find((s) => s.env === 'server')
|
|
351
|
+
const session = buildSessionNeeds(segment, graph)
|
|
352
|
+
|
|
353
|
+
return {
|
|
354
|
+
signedNodeIds,
|
|
355
|
+
signedBy,
|
|
356
|
+
branchGates,
|
|
357
|
+
loopBodies,
|
|
358
|
+
previousFrom,
|
|
359
|
+
workflowId: graphIdOf(graph),
|
|
360
|
+
segmentId: segment.id,
|
|
361
|
+
opensRun: !firstServer || firstServer.id === segment.id,
|
|
362
|
+
...(session ? { session } : {}),
|
|
363
|
+
...(segment.nodes.some((n) => isOutboundMessageNodeType(n.type))
|
|
364
|
+
? {
|
|
365
|
+
messageTrust: collectMessageTrust({
|
|
366
|
+
nodes: graph.nodes,
|
|
367
|
+
edges: graph.edges,
|
|
368
|
+
serverNodeIds,
|
|
369
|
+
}),
|
|
370
|
+
}
|
|
371
|
+
: {}),
|
|
372
|
+
}
|
|
170
373
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a generated site's server code calls its own API routes outside the
|
|
3
|
+
* workflow runtime (whose nodes get the same from `internalRequestHeaders`,
|
|
4
|
+
* executor-generator): the data API's low-stock alert, the legacy payment
|
|
5
|
+
* webhooks' invoice and order-notification calls, the invoice PDF upload, the
|
|
6
|
+
* automations' dispatch kick.
|
|
7
|
+
*
|
|
8
|
+
* Every such call presents the app secret (only server code can read
|
|
9
|
+
* NEXTAUTH_SECRET) and, on a deployment behind Vercel's password wall (a
|
|
10
|
+
* workspace not paying for hosting, or an owner's own password), the
|
|
11
|
+
* deployment's protection bypass — `VERCEL_AUTOMATION_BYPASS_SECRET`, which
|
|
12
|
+
* the services worker sets on such a deployment. Without it the site's own
|
|
13
|
+
* call meets the wall and answers 401, and nothing it should do happens.
|
|
14
|
+
*
|
|
15
|
+
* One emitted function, `__selfCallHeaders(headers)`: the headers given
|
|
16
|
+
* (`Content-Type`, for one), plus those. Inlined into each route that calls
|
|
17
|
+
* itself, so no route needs another module to exist.
|
|
18
|
+
*/
|
|
19
|
+
export const SELF_CALL_HEADERS_FUNCTION = '__selfCallHeaders'
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Emitted statements that add the deployment's protection bypass to the
|
|
23
|
+
* headers object named `target`, where the deployment has one — the one place
|
|
24
|
+
* the bypass header is built. `__selfCallHeaders` below, the workflow
|
|
25
|
+
* runtime's `internalRequestHeaders` (executor-generator.ts: the visitor's
|
|
26
|
+
* cookies and the bypass, never the app secret) and the push send route's
|
|
27
|
+
* relay (web-push/routes-source.ts in the Next project generator) all emit it.
|
|
28
|
+
* `indent` is the indentation of the `if`.
|
|
29
|
+
*/
|
|
30
|
+
export const generateProtectionBypassHeaderStatements = (target: string, indent = ' '): string =>
|
|
31
|
+
`${indent}if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) {
|
|
32
|
+
${indent} ${target}['x-vercel-protection-bypass'] = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;
|
|
33
|
+
${indent} // Vercel would otherwise hand the bypass back as a cookie.
|
|
34
|
+
${indent} ${target}['x-vercel-set-bypass-cookie'] = 'false';
|
|
35
|
+
${indent}}`
|
|
36
|
+
|
|
37
|
+
export const generateSelfCallHeadersCode =
|
|
38
|
+
(): string => `// The headers this deployment's server code calls its own routes with: the app
|
|
39
|
+
// secret, and the password wall's bypass where the deployment has one (see
|
|
40
|
+
// self-call-headers.ts in the code generators).
|
|
41
|
+
function ${SELF_CALL_HEADERS_FUNCTION}(headers) {
|
|
42
|
+
var out = Object.assign({}, headers || {});
|
|
43
|
+
out['x-internal-data-secret'] = process.env.NEXTAUTH_SECRET || '';
|
|
44
|
+
${generateProtectionBypassHeaderStatements('out')}
|
|
45
|
+
return out;
|
|
46
|
+
}`
|
|
@@ -55,3 +55,19 @@ export const ensureSentEmailLogModule = (structure: ProjectPluginStructure): voi
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* In a project with automations, files a send made by an automation handler
|
|
61
|
+
* under the automation and the event's order (see the `attribution` option of
|
|
62
|
+
* `generateSentEmailLogCode`). Rewrites the module when something already
|
|
63
|
+
* required it; a project whose automations send no mail has none to rewrite.
|
|
64
|
+
*/
|
|
65
|
+
export const enableSentEmailAttribution = (structure: ProjectPluginStructure): void => {
|
|
66
|
+
const entry = structure.files.get(SENT_EMAIL_LOG_FILE_KEY)
|
|
67
|
+
if (!entry || !entry.files[0]) {
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
const { dataSourceType } = resolveInvoiceDataSource(structure)
|
|
71
|
+
const pgSupported = 'pg' in getDatabaseDriverDependencies(dataSourceType)
|
|
72
|
+
entry.files[0].content = generateSentEmailLogCode({ pgSupported, attribution: true })
|
|
73
|
+
}
|