@teleporthq/teleport-plugin-next-workflows 0.44.11 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/_helpers/fake-fetch.ts +75 -0
- package/__tests__/_helpers/gui-place-order-statements.ts +17 -0
- package/__tests__/_helpers/inserted-lines.ts +22 -0
- package/__tests__/_helpers/invoice-store.ts +10 -1
- package/__tests__/_helpers/load-security-runtime.ts +45 -0
- package/__tests__/_helpers/load-server-runtime.ts +26 -3
- package/__tests__/_helpers/run-account-delete-route.ts +3 -1
- package/__tests__/_helpers/run-generated-middleware.ts +7 -2
- package/__tests__/account-delete-owned-rows.test.ts +3 -1
- package/__tests__/adopted-element-trigger-code.test.ts +128 -0
- package/__tests__/analytics-track-outcome.test.ts +145 -0
- package/__tests__/auth-password-change-ends-sessions.test.ts +8 -1
- package/__tests__/auth-password-security.test.ts +2275 -0
- package/__tests__/auth-session-cost.test.ts +31 -0
- package/__tests__/auth-signup-route.test.ts +960 -0
- package/__tests__/authored-code-every-path.test.ts +247 -0
- package/__tests__/automations-bus.test.ts +3820 -0
- package/__tests__/automations-catalog-drift.test.ts +97 -0
- package/__tests__/booking-calendar-feed-route.test.ts +20 -3
- package/__tests__/cart-price-order.test.ts +336 -1
- package/__tests__/code-lookup-rate-limit-route.test.ts +189 -0
- package/__tests__/cost-bearing-node-types.test.ts +119 -0
- package/__tests__/credential-columns-reply.test.ts +9 -0
- package/__tests__/credential-result-reply.test.ts +19 -5
- package/__tests__/cron-route-loop-templateparams.test.ts +6 -3
- package/__tests__/custom-js-authored-code.test.ts +304 -0
- package/__tests__/custom-node-custom-code-gate.test.ts +136 -0
- package/__tests__/custom-node-step-handlers.test.ts +251 -0
- package/__tests__/custom-node-step-reach.test.ts +63 -0
- package/__tests__/data-api-anon-user-id-fallback.test.ts +7 -2
- package/__tests__/data-api-browser-reads.test.ts +7 -0
- package/__tests__/data-api-business-events.test.ts +403 -0
- package/__tests__/data-api-invalid-body.test.ts +7 -0
- package/__tests__/data-api-low-stock-autofire.test.ts +30 -4
- package/__tests__/data-api-optional-feature-columns.test.ts +44 -0
- package/__tests__/data-api-owner-scope-credentials.test.ts +1324 -0
- package/__tests__/data-api-protected-tables.test.ts +48 -15
- package/__tests__/data-api-retired-table-and-account-fields.test.ts +208 -0
- package/__tests__/email-locale-senders.test.ts +5 -3
- package/__tests__/expression-injection.test.ts +343 -0
- package/__tests__/fixtures/admin-file-workflows.json +242 -0
- package/__tests__/form-confirmation-email-template.test.ts +44 -0
- package/__tests__/internal-request-headers.test.ts +25 -0
- package/__tests__/invoice-pdf-service-project-header.test.ts +120 -0
- package/__tests__/invoice-self-call-origin.test.ts +57 -1
- package/__tests__/legacy-webhook-self-calls.test.ts +86 -1
- package/__tests__/middleware-home-route-protection.test.ts +3 -1
- package/__tests__/middleware-subscriber-access.test.ts +1 -1
- package/__tests__/newsletter-admin-route.test.ts +649 -0
- package/__tests__/newsletter-plugin.test.ts +1248 -0
- package/__tests__/outbound-nodes-security.test.ts +1929 -0
- package/__tests__/page-access-guard.test.ts +217 -0
- package/__tests__/page-access-route-table.test.ts +231 -0
- package/__tests__/payment-drivers-module.test.ts +23 -0
- package/__tests__/payment-legacy-webhook-routes.test.ts +100 -5
- package/__tests__/payment-webhook-route.test.ts +4 -1
- package/__tests__/paypal-webhook-signature-verification.test.ts +44 -0
- package/__tests__/place-order-guards.test.ts +506 -0
- package/__tests__/public-step-guards.test.ts +310 -0
- package/__tests__/publish-refusals.test.ts +505 -0
- package/__tests__/realtime-identity-routes.test.ts +492 -0
- package/__tests__/record-event-writer-server-only.test.ts +975 -0
- package/__tests__/resolve-config-template-params.test.ts +3 -3
- package/__tests__/runtime-storage-upload-access.test.ts +280 -17
- package/__tests__/security-integration-env-names.test.ts +74 -0
- package/__tests__/security-lists-parity.test.ts +245 -0
- package/__tests__/security-runtime-shadow.test.ts +224 -1
- package/__tests__/security-runtime.test.ts +893 -0
- package/__tests__/segment-rate-limit-error-branch.test.ts +284 -0
- package/__tests__/segment-route-abuse-gate.test.ts +309 -0
- package/__tests__/server-job-hops-real-data-api.test.ts +669 -0
- package/__tests__/server-session-identity.test.ts +522 -0
- package/__tests__/server-step-chain.test.ts +222 -0
- package/__tests__/server-step-signing.test.ts +107 -2
- package/__tests__/session-cookie-resolver.test.ts +62 -106
- package/__tests__/signup-event.test.ts +649 -0
- package/__tests__/signup-reply-identical.test.ts +144 -0
- package/__tests__/slack-message-escaping.test.ts +123 -0
- package/__tests__/visitor-step-limits.test.ts +318 -0
- package/__tests__/webhook-delivery-lease.test.ts +4 -1
- package/__tests__/webpack-safe-handlers.test.ts +57 -8
- package/__tests__/workflow-auth-guard.test.ts +9 -1
- package/dist/cjs/account-delete-route-generator.d.ts +1 -0
- package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
- package/dist/cjs/account-delete-route-generator.js +18 -3
- package/dist/cjs/account-delete-route-generator.js.map +1 -1
- package/dist/cjs/api-route-generator.d.ts +52 -3
- package/dist/cjs/api-route-generator.d.ts.map +1 -1
- package/dist/cjs/api-route-generator.js +600 -145
- package/dist/cjs/api-route-generator.js.map +1 -1
- package/dist/cjs/auth-generator.d.ts +126 -3
- package/dist/cjs/auth-generator.d.ts.map +1 -1
- package/dist/cjs/auth-generator.js +1353 -139
- package/dist/cjs/auth-generator.js.map +1 -1
- package/dist/cjs/automations/activity-kicks.d.ts +12 -0
- package/dist/cjs/automations/activity-kicks.d.ts.map +1 -0
- package/dist/cjs/automations/activity-kicks.js +123 -0
- package/dist/cjs/automations/activity-kicks.js.map +1 -0
- package/dist/cjs/automations/app-events-source.d.ts +33 -0
- package/dist/cjs/automations/app-events-source.d.ts.map +1 -0
- package/dist/cjs/automations/app-events-source.js +109 -0
- package/dist/cjs/automations/app-events-source.js.map +1 -0
- package/dist/cjs/automations/automations-project-plugin.d.ts +21 -0
- package/dist/cjs/automations/automations-project-plugin.d.ts.map +1 -0
- package/dist/cjs/automations/automations-project-plugin.js +102 -0
- package/dist/cjs/automations/automations-project-plugin.js.map +1 -0
- package/dist/cjs/automations/automations-scope.d.ts +104 -0
- package/dist/cjs/automations/automations-scope.d.ts.map +1 -0
- package/dist/cjs/automations/automations-scope.js +176 -0
- package/dist/cjs/automations/automations-scope.js.map +1 -0
- package/dist/cjs/automations/dispatcher-source.d.ts +72 -0
- package/dist/cjs/automations/dispatcher-source.d.ts.map +1 -0
- package/dist/cjs/automations/dispatcher-source.js +1008 -0
- package/dist/cjs/automations/dispatcher-source.js.map +1 -0
- package/dist/cjs/automations/event-bus-source.d.ts +44 -0
- package/dist/cjs/automations/event-bus-source.d.ts.map +1 -0
- package/dist/cjs/automations/event-bus-source.js +427 -0
- package/dist/cjs/automations/event-bus-source.js.map +1 -0
- package/dist/cjs/automations/handler-module-generator.d.ts +25 -0
- package/dist/cjs/automations/handler-module-generator.d.ts.map +1 -0
- package/dist/cjs/automations/handler-module-generator.js +78 -0
- package/dist/cjs/automations/handler-module-generator.js.map +1 -0
- package/dist/cjs/automations/hydrators-source.d.ts +33 -0
- package/dist/cjs/automations/hydrators-source.d.ts.map +1 -0
- package/dist/cjs/automations/hydrators-source.js +571 -0
- package/dist/cjs/automations/hydrators-source.js.map +1 -0
- package/dist/cjs/booking-calendar-feed-route-generator.d.ts.map +1 -1
- package/dist/cjs/booking-calendar-feed-route-generator.js +8 -0
- package/dist/cjs/booking-calendar-feed-route-generator.js.map +1 -1
- package/dist/cjs/configured-nextauth-url.d.ts +17 -0
- package/dist/cjs/configured-nextauth-url.d.ts.map +1 -0
- package/dist/cjs/configured-nextauth-url.js +20 -0
- package/dist/cjs/configured-nextauth-url.js.map +1 -0
- package/dist/cjs/cron-request-verification.d.ts +22 -1
- package/dist/cjs/cron-request-verification.d.ts.map +1 -1
- package/dist/cjs/cron-request-verification.js +50 -6
- package/dist/cjs/cron-request-verification.js.map +1 -1
- package/dist/cjs/data-api-route-generator.d.ts +19 -0
- package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
- package/dist/cjs/data-api-route-generator.js +711 -43
- package/dist/cjs/data-api-route-generator.js.map +1 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts +3 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
- package/dist/cjs/ecommerce/parameterized-stock-chain.js +45 -5
- package/dist/cjs/ecommerce/parameterized-stock-chain.js.map +1 -1
- package/dist/cjs/ecommerce/place-order-guards.d.ts +126 -0
- package/dist/cjs/ecommerce/place-order-guards.d.ts.map +1 -0
- package/dist/cjs/ecommerce/place-order-guards.js +670 -0
- package/dist/cjs/ecommerce/place-order-guards.js.map +1 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts +2 -0
- package/dist/cjs/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/cjs/ecommerce-customhandler-rewriter.js +38 -2
- package/dist/cjs/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +368 -60
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/graph-utils.d.ts +9 -0
- package/dist/cjs/graph-utils.d.ts.map +1 -1
- package/dist/cjs/graph-utils.js +32 -1
- package/dist/cjs/graph-utils.js.map +1 -1
- package/dist/cjs/index.d.ts +20 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +72 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/invoice/api-routes-code.d.ts +9 -3
- package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/cjs/invoice/api-routes-code.js +9 -7
- package/dist/cjs/invoice/api-routes-code.js.map +1 -1
- package/dist/cjs/invoice/index.d.ts.map +1 -1
- package/dist/cjs/invoice/index.js +12 -7
- package/dist/cjs/invoice/index.js.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.js +8 -3
- package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/cjs/invoice/pdf-generator-code.d.ts.map +1 -1
- package/dist/cjs/invoice/pdf-generator-code.js +2 -1
- package/dist/cjs/invoice/pdf-generator-code.js.map +1 -1
- package/dist/cjs/invoice/pdf-service-client-code.d.ts.map +1 -1
- package/dist/cjs/invoice/pdf-service-client-code.js +15 -7
- package/dist/cjs/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/cjs/newsletter/admin-route-code.d.ts +60 -0
- package/dist/cjs/newsletter/admin-route-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/admin-route-code.js +300 -0
- package/dist/cjs/newsletter/admin-route-code.js.map +1 -0
- package/dist/cjs/newsletter/helper-code.d.ts +109 -0
- package/dist/cjs/newsletter/helper-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/helper-code.js +662 -0
- package/dist/cjs/newsletter/helper-code.js.map +1 -0
- package/dist/cjs/newsletter/newsletter-scope.d.ts +65 -0
- package/dist/cjs/newsletter/newsletter-scope.d.ts.map +1 -0
- package/dist/cjs/newsletter/newsletter-scope.js +103 -0
- package/dist/cjs/newsletter/newsletter-scope.js.map +1 -0
- package/dist/cjs/newsletter/project-plugin.d.ts +18 -0
- package/dist/cjs/newsletter/project-plugin.d.ts.map +1 -0
- package/dist/cjs/newsletter/project-plugin.js +97 -0
- package/dist/cjs/newsletter/project-plugin.js.map +1 -0
- package/dist/cjs/newsletter/routes-code.d.ts +6 -0
- package/dist/cjs/newsletter/routes-code.d.ts.map +1 -0
- package/dist/cjs/newsletter/routes-code.js +181 -0
- package/dist/cjs/newsletter/routes-code.js.map +1 -0
- package/dist/cjs/nodes/account/account-compare-passwords.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-compare-passwords.js +16 -6
- package/dist/cjs/nodes/account/account-compare-passwords.js.map +1 -1
- package/dist/cjs/nodes/account/account-delete-current.js +1 -1
- package/dist/cjs/nodes/account/account-get-current.js +1 -1
- package/dist/cjs/nodes/account/account-hash-password.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-hash-password.js +15 -3
- package/dist/cjs/nodes/account/account-hash-password.js.map +1 -1
- package/dist/cjs/nodes/account/account-login.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-login.js +23 -6
- package/dist/cjs/nodes/account/account-login.js.map +1 -1
- package/dist/cjs/nodes/account/account-logout.js +1 -1
- package/dist/cjs/nodes/account/account-refresh-session.js +1 -1
- package/dist/cjs/nodes/account/account-request-password-reset.d.ts +3 -0
- package/dist/cjs/nodes/account/account-request-password-reset.d.ts.map +1 -0
- package/dist/cjs/nodes/account/account-request-password-reset.js +46 -0
- package/dist/cjs/nodes/account/account-request-password-reset.js.map +1 -0
- package/dist/cjs/nodes/account/account-reset-password.d.ts +3 -0
- package/dist/cjs/nodes/account/account-reset-password.d.ts.map +1 -0
- package/dist/cjs/nodes/account/account-reset-password.js +44 -0
- package/dist/cjs/nodes/account/account-reset-password.js.map +1 -0
- package/dist/cjs/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-signup.js +82 -19
- package/dist/cjs/nodes/account/account-signup.js.map +1 -1
- package/dist/cjs/nodes/account/account-social-login.js +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-custom-prompt.js +20 -5
- package/dist/cjs/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-detect-language.js +20 -5
- package/dist/cjs/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js +10 -2
- package/dist/cjs/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
- package/dist/cjs/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts +31 -2
- package/dist/cjs/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-provider-utils.js +125 -11
- package/dist/cjs/nodes/ai/ai-provider-utils.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-select-database-data.js +6 -2
- package/dist/cjs/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js +20 -5
- package/dist/cjs/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-summarization.js +20 -5
- package/dist/cjs/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-classifier.js +20 -5
- package/dist/cjs/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.d.ts.map +1 -1
- package/dist/cjs/nodes/ai/ai-text-transform.js +20 -5
- package/dist/cjs/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts +3 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.js +110 -0
- package/dist/cjs/nodes/analytics/analytics-track-outcome.js.map +1 -0
- package/dist/cjs/nodes/cart/cart-price-order.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-price-order.js +161 -2
- package/dist/cjs/nodes/cart/cart-price-order.js.map +1 -1
- package/dist/cjs/nodes/cost-bearing-node-types.d.ts +4 -0
- package/dist/cjs/nodes/cost-bearing-node-types.d.ts.map +1 -0
- package/dist/cjs/nodes/cost-bearing-node-types.js +43 -0
- package/dist/cjs/nodes/cost-bearing-node-types.js.map +1 -0
- package/dist/cjs/nodes/data/data-select.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-select.js +12 -2
- package/dist/cjs/nodes/data/data-select.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.js +15 -11
- package/dist/cjs/nodes/email/email-mailersend.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.js +15 -15
- package/dist/cjs/nodes/email/email-mailgun.js.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.js +15 -15
- package/dist/cjs/nodes/email/email-postmark.js.map +1 -1
- package/dist/cjs/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-resend.js +15 -15
- package/dist/cjs/nodes/email/email-resend.js.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.js +15 -15
- package/dist/cjs/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/cjs/nodes/email/html-escape-code.d.ts +3 -0
- package/dist/cjs/nodes/email/html-escape-code.d.ts.map +1 -0
- package/dist/cjs/nodes/email/html-escape-code.js +23 -0
- package/dist/cjs/nodes/email/html-escape-code.js.map +1 -0
- package/dist/cjs/nodes/email/message-trust.d.ts +40 -0
- package/dist/cjs/nodes/email/message-trust.d.ts.map +1 -0
- package/dist/cjs/nodes/email/message-trust.js +167 -0
- package/dist/cjs/nodes/email/message-trust.js.map +1 -0
- package/dist/cjs/nodes/email/outbound-message-guard.d.ts +113 -0
- package/dist/cjs/nodes/email/outbound-message-guard.d.ts.map +1 -0
- package/dist/cjs/nodes/email/outbound-message-guard.js +460 -0
- package/dist/cjs/nodes/email/outbound-message-guard.js.map +1 -0
- package/dist/cjs/nodes/email/trusted-html-code.d.ts +22 -0
- package/dist/cjs/nodes/email/trusted-html-code.d.ts.map +1 -0
- package/dist/cjs/nodes/email/trusted-html-code.js +52 -0
- package/dist/cjs/nodes/email/trusted-html-code.js.map +1 -0
- package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.js +44 -7
- package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
- package/dist/cjs/nodes/general/general-http-request.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-http-request.js +431 -45
- package/dist/cjs/nodes/general/general-http-request.js.map +1 -1
- package/dist/cjs/nodes/general/general-rate-limiter.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-rate-limiter.js +46 -78
- package/dist/cjs/nodes/general/general-rate-limiter.js.map +1 -1
- package/dist/cjs/nodes/general/general-wait.d.ts +3 -0
- package/dist/cjs/nodes/general/general-wait.d.ts.map +1 -0
- package/dist/cjs/nodes/general/general-wait.js +81 -0
- package/dist/cjs/nodes/general/general-wait.js.map +1 -0
- package/dist/cjs/nodes/general/visitor-request.d.ts +44 -0
- package/dist/cjs/nodes/general/visitor-request.d.ts.map +1 -0
- package/dist/cjs/nodes/general/visitor-request.js +72 -0
- package/dist/cjs/nodes/general/visitor-request.js.map +1 -0
- package/dist/cjs/nodes/index.d.ts.map +1 -1
- package/dist/cjs/nodes/index.js +7 -1
- package/dist/cjs/nodes/index.js.map +1 -1
- package/dist/cjs/nodes/integrations/integration-slack.d.ts.map +1 -1
- package/dist/cjs/nodes/integrations/integration-slack.js +17 -6
- package/dist/cjs/nodes/integrations/integration-slack.js.map +1 -1
- package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts +3 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.js +41 -0
- package/dist/cjs/nodes/newsletter/newsletter-confirm.js.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.js +69 -0
- package/dist/cjs/nodes/newsletter/newsletter-subscribe.js.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js +42 -0
- package/dist/cjs/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
- package/dist/cjs/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-join-channel.js +5 -4
- package/dist/cjs/nodes/realtime/realtime-join-channel.js.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.js +11 -2
- package/dist/cjs/nodes/realtime/realtime-send-channel-event.js.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.js +11 -2
- package/dist/cjs/nodes/realtime/realtime-send-channel-message.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-infobip.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-infobip.js +11 -8
- package/dist/cjs/nodes/sms/sms-infobip.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-smsapi.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-smsapi.js +11 -8
- package/dist/cjs/nodes/sms/sms-smsapi.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-textmagic.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-textmagic.js +11 -8
- package/dist/cjs/nodes/sms/sms-textmagic.js.map +1 -1
- package/dist/cjs/nodes/sms/sms-twilio.d.ts.map +1 -1
- package/dist/cjs/nodes/sms/sms-twilio.js +12 -10
- package/dist/cjs/nodes/sms/sms-twilio.js.map +1 -1
- package/dist/cjs/nodes/types.d.ts +8 -1
- package/dist/cjs/nodes/types.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js +29 -10
- package/dist/cjs/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/cjs/page-access-guard-generator.d.ts +23 -0
- package/dist/cjs/page-access-guard-generator.d.ts.map +1 -0
- package/dist/cjs/page-access-guard-generator.js +135 -0
- package/dist/cjs/page-access-guard-generator.js.map +1 -0
- package/dist/cjs/password-reset-route-generator.d.ts +119 -0
- package/dist/cjs/password-reset-route-generator.d.ts.map +1 -0
- package/dist/cjs/password-reset-route-generator.js +460 -0
- package/dist/cjs/password-reset-route-generator.js.map +1 -0
- package/dist/cjs/payments/payment-core-code.d.ts.map +1 -1
- package/dist/cjs/payments/payment-core-code.js +12 -7
- package/dist/cjs/payments/payment-core-code.js.map +1 -1
- package/dist/cjs/project-code-scanner.d.ts +11 -0
- package/dist/cjs/project-code-scanner.d.ts.map +1 -0
- package/dist/cjs/project-code-scanner.js +80 -0
- package/dist/cjs/project-code-scanner.js.map +1 -0
- package/dist/cjs/public-step-guards.d.ts +122 -0
- package/dist/cjs/public-step-guards.d.ts.map +1 -0
- package/dist/cjs/public-step-guards.js +288 -0
- package/dist/cjs/public-step-guards.js.map +1 -0
- package/dist/cjs/publish-refusals.d.ts +66 -0
- package/dist/cjs/publish-refusals.d.ts.map +1 -0
- package/dist/cjs/publish-refusals.js +278 -0
- package/dist/cjs/publish-refusals.js.map +1 -0
- package/dist/cjs/realtime-generator.d.ts +63 -1
- package/dist/cjs/realtime-generator.d.ts.map +1 -1
- package/dist/cjs/realtime-generator.js +404 -230
- package/dist/cjs/realtime-generator.js.map +1 -1
- package/dist/cjs/runtime-storage-generator.d.ts +32 -1
- package/dist/cjs/runtime-storage-generator.d.ts.map +1 -1
- package/dist/cjs/runtime-storage-generator.js +265 -12
- package/dist/cjs/runtime-storage-generator.js.map +1 -1
- package/dist/cjs/security-runtime/index.d.ts +14 -0
- package/dist/cjs/security-runtime/index.d.ts.map +1 -0
- package/dist/cjs/security-runtime/index.js +48 -0
- package/dist/cjs/security-runtime/index.js.map +1 -0
- package/dist/cjs/security-runtime/security-runtime-code.d.ts +53 -0
- package/dist/cjs/security-runtime/security-runtime-code.d.ts.map +1 -0
- package/dist/cjs/security-runtime/security-runtime-code.js +580 -0
- package/dist/cjs/security-runtime/security-runtime-code.js.map +1 -0
- package/dist/cjs/security-scanner.d.ts +72 -3
- package/dist/cjs/security-scanner.d.ts.map +1 -1
- package/dist/cjs/security-scanner.js +220 -8
- package/dist/cjs/security-scanner.js.map +1 -1
- package/dist/cjs/segment-splitter.d.ts.map +1 -1
- package/dist/cjs/segment-splitter.js +10 -2
- package/dist/cjs/segment-splitter.js.map +1 -1
- package/dist/cjs/segment-trust.d.ts +36 -0
- package/dist/cjs/segment-trust.d.ts.map +1 -1
- package/dist/cjs/segment-trust.js +147 -3
- package/dist/cjs/segment-trust.js.map +1 -1
- package/dist/cjs/self-call-headers.d.ts +31 -0
- package/dist/cjs/self-call-headers.d.ts.map +1 -0
- package/dist/cjs/self-call-headers.js +48 -0
- package/dist/cjs/self-call-headers.js.map +1 -0
- package/dist/cjs/sent-email-log/index.d.ts +7 -0
- package/dist/cjs/sent-email-log/index.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/index.js +17 -1
- package/dist/cjs/sent-email-log/index.js.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts +7 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.js +17 -3
- package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/cjs/server-custom-node-call.d.ts +79 -0
- package/dist/cjs/server-custom-node-call.d.ts.map +1 -0
- package/dist/cjs/server-custom-node-call.js +285 -0
- package/dist/cjs/server-custom-node-call.js.map +1 -0
- package/dist/cjs/server-runtime-code.d.ts +39 -12
- package/dist/cjs/server-runtime-code.d.ts.map +1 -1
- package/dist/cjs/server-runtime-code.js +484 -41
- package/dist/cjs/server-runtime-code.js.map +1 -1
- package/dist/cjs/session-cookie-resolver.d.ts +3 -1
- package/dist/cjs/session-cookie-resolver.d.ts.map +1 -1
- package/dist/cjs/session-revocation-generator.d.ts +39 -0
- package/dist/cjs/session-revocation-generator.d.ts.map +1 -0
- package/dist/cjs/session-revocation-generator.js +177 -0
- package/dist/cjs/session-revocation-generator.js.map +1 -0
- package/dist/cjs/slack-message-values.d.ts +6 -0
- package/dist/cjs/slack-message-values.d.ts.map +1 -0
- package/dist/cjs/slack-message-values.js +73 -0
- package/dist/cjs/slack-message-values.js.map +1 -0
- package/dist/cjs/transactional-email-code.d.ts +11 -0
- package/dist/cjs/transactional-email-code.d.ts.map +1 -1
- package/dist/cjs/transactional-email-code.js +29 -5
- package/dist/cjs/transactional-email-code.js.map +1 -1
- package/dist/cjs/trigger-generator.d.ts +2 -0
- package/dist/cjs/trigger-generator.d.ts.map +1 -1
- package/dist/cjs/trigger-generator.js +17 -4
- package/dist/cjs/trigger-generator.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/visitor-step-limits.d.ts +66 -0
- package/dist/cjs/visitor-step-limits.d.ts.map +1 -0
- package/dist/cjs/visitor-step-limits.js +187 -0
- package/dist/cjs/visitor-step-limits.js.map +1 -0
- package/dist/cjs/webhook-generator.d.ts.map +1 -1
- package/dist/cjs/webhook-generator.js +93 -15
- package/dist/cjs/webhook-generator.js.map +1 -1
- package/dist/cjs/webhook-signature-verification.d.ts.map +1 -1
- package/dist/cjs/webhook-signature-verification.js +13 -3
- package/dist/cjs/webhook-signature-verification.js.map +1 -1
- package/dist/cjs/workflow-auth-generator.d.ts +4 -1
- package/dist/cjs/workflow-auth-generator.d.ts.map +1 -1
- package/dist/cjs/workflow-auth-generator.js +8 -3
- package/dist/cjs/workflow-auth-generator.js.map +1 -1
- package/dist/cjs/workflow-component-plugin.js +11 -3
- package/dist/cjs/workflow-component-plugin.js.map +1 -1
- package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-project-plugin.js +302 -56
- package/dist/cjs/workflow-project-plugin.js.map +1 -1
- package/dist/cjs/workflow-scope.d.ts.map +1 -1
- package/dist/cjs/workflow-scope.js +5 -0
- package/dist/cjs/workflow-scope.js.map +1 -1
- package/dist/esm/account-delete-route-generator.d.ts +1 -0
- package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
- package/dist/esm/account-delete-route-generator.js +18 -3
- package/dist/esm/account-delete-route-generator.js.map +1 -1
- package/dist/esm/api-route-generator.d.ts +52 -3
- package/dist/esm/api-route-generator.d.ts.map +1 -1
- package/dist/esm/api-route-generator.js +595 -142
- package/dist/esm/api-route-generator.js.map +1 -1
- package/dist/esm/auth-generator.d.ts +126 -3
- package/dist/esm/auth-generator.d.ts.map +1 -1
- package/dist/esm/auth-generator.js +1350 -140
- package/dist/esm/auth-generator.js.map +1 -1
- package/dist/esm/automations/activity-kicks.d.ts +12 -0
- package/dist/esm/automations/activity-kicks.d.ts.map +1 -0
- package/dist/esm/automations/activity-kicks.js +118 -0
- package/dist/esm/automations/activity-kicks.js.map +1 -0
- package/dist/esm/automations/app-events-source.d.ts +33 -0
- package/dist/esm/automations/app-events-source.d.ts.map +1 -0
- package/dist/esm/automations/app-events-source.js +104 -0
- package/dist/esm/automations/app-events-source.js.map +1 -0
- package/dist/esm/automations/automations-project-plugin.d.ts +21 -0
- package/dist/esm/automations/automations-project-plugin.d.ts.map +1 -0
- package/dist/esm/automations/automations-project-plugin.js +98 -0
- package/dist/esm/automations/automations-project-plugin.js.map +1 -0
- package/dist/esm/automations/automations-scope.d.ts +104 -0
- package/dist/esm/automations/automations-scope.d.ts.map +1 -0
- package/dist/esm/automations/automations-scope.js +165 -0
- package/dist/esm/automations/automations-scope.js.map +1 -0
- package/dist/esm/automations/dispatcher-source.d.ts +72 -0
- package/dist/esm/automations/dispatcher-source.d.ts.map +1 -0
- package/dist/esm/automations/dispatcher-source.js +999 -0
- package/dist/esm/automations/dispatcher-source.js.map +1 -0
- package/dist/esm/automations/event-bus-source.d.ts +44 -0
- package/dist/esm/automations/event-bus-source.d.ts.map +1 -0
- package/dist/esm/automations/event-bus-source.js +421 -0
- package/dist/esm/automations/event-bus-source.js.map +1 -0
- package/dist/esm/automations/handler-module-generator.d.ts +25 -0
- package/dist/esm/automations/handler-module-generator.d.ts.map +1 -0
- package/dist/esm/automations/handler-module-generator.js +71 -0
- package/dist/esm/automations/handler-module-generator.js.map +1 -0
- package/dist/esm/automations/hydrators-source.d.ts +33 -0
- package/dist/esm/automations/hydrators-source.d.ts.map +1 -0
- package/dist/esm/automations/hydrators-source.js +567 -0
- package/dist/esm/automations/hydrators-source.js.map +1 -0
- package/dist/esm/booking-calendar-feed-route-generator.d.ts.map +1 -1
- package/dist/esm/booking-calendar-feed-route-generator.js +8 -0
- package/dist/esm/booking-calendar-feed-route-generator.js.map +1 -1
- package/dist/esm/configured-nextauth-url.d.ts +17 -0
- package/dist/esm/configured-nextauth-url.d.ts.map +1 -0
- package/dist/esm/configured-nextauth-url.js +17 -0
- package/dist/esm/configured-nextauth-url.js.map +1 -0
- package/dist/esm/cron-request-verification.d.ts +22 -1
- package/dist/esm/cron-request-verification.d.ts.map +1 -1
- package/dist/esm/cron-request-verification.js +48 -5
- package/dist/esm/cron-request-verification.js.map +1 -1
- package/dist/esm/data-api-route-generator.d.ts +19 -0
- package/dist/esm/data-api-route-generator.d.ts.map +1 -1
- package/dist/esm/data-api-route-generator.js +710 -43
- package/dist/esm/data-api-route-generator.js.map +1 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.d.ts +3 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.d.ts.map +1 -1
- package/dist/esm/ecommerce/parameterized-stock-chain.js +43 -4
- package/dist/esm/ecommerce/parameterized-stock-chain.js.map +1 -1
- package/dist/esm/ecommerce/place-order-guards.d.ts +126 -0
- package/dist/esm/ecommerce/place-order-guards.d.ts.map +1 -0
- package/dist/esm/ecommerce/place-order-guards.js +655 -0
- package/dist/esm/ecommerce/place-order-guards.js.map +1 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts +2 -0
- package/dist/esm/ecommerce-customhandler-rewriter.d.ts.map +1 -1
- package/dist/esm/ecommerce-customhandler-rewriter.js +38 -2
- package/dist/esm/ecommerce-customhandler-rewriter.js.map +1 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +368 -60
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/graph-utils.d.ts +9 -0
- package/dist/esm/graph-utils.d.ts.map +1 -1
- package/dist/esm/graph-utils.js +30 -0
- package/dist/esm/graph-utils.js.map +1 -1
- package/dist/esm/index.d.ts +20 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +27 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/invoice/api-routes-code.d.ts +9 -3
- package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/esm/invoice/api-routes-code.js +9 -7
- package/dist/esm/invoice/api-routes-code.js.map +1 -1
- package/dist/esm/invoice/index.d.ts.map +1 -1
- package/dist/esm/invoice/index.js +12 -7
- package/dist/esm/invoice/index.js.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.js +8 -3
- package/dist/esm/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/esm/invoice/pdf-generator-code.d.ts.map +1 -1
- package/dist/esm/invoice/pdf-generator-code.js +2 -1
- package/dist/esm/invoice/pdf-generator-code.js.map +1 -1
- package/dist/esm/invoice/pdf-service-client-code.d.ts.map +1 -1
- package/dist/esm/invoice/pdf-service-client-code.js +15 -7
- package/dist/esm/invoice/pdf-service-client-code.js.map +1 -1
- package/dist/esm/newsletter/admin-route-code.d.ts +60 -0
- package/dist/esm/newsletter/admin-route-code.d.ts.map +1 -0
- package/dist/esm/newsletter/admin-route-code.js +295 -0
- package/dist/esm/newsletter/admin-route-code.js.map +1 -0
- package/dist/esm/newsletter/helper-code.d.ts +109 -0
- package/dist/esm/newsletter/helper-code.d.ts.map +1 -0
- package/dist/esm/newsletter/helper-code.js +656 -0
- package/dist/esm/newsletter/helper-code.js.map +1 -0
- package/dist/esm/newsletter/newsletter-scope.d.ts +65 -0
- package/dist/esm/newsletter/newsletter-scope.d.ts.map +1 -0
- package/dist/esm/newsletter/newsletter-scope.js +97 -0
- package/dist/esm/newsletter/newsletter-scope.js.map +1 -0
- package/dist/esm/newsletter/project-plugin.d.ts +18 -0
- package/dist/esm/newsletter/project-plugin.d.ts.map +1 -0
- package/dist/esm/newsletter/project-plugin.js +93 -0
- package/dist/esm/newsletter/project-plugin.js.map +1 -0
- package/dist/esm/newsletter/routes-code.d.ts +6 -0
- package/dist/esm/newsletter/routes-code.d.ts.map +1 -0
- package/dist/esm/newsletter/routes-code.js +175 -0
- package/dist/esm/newsletter/routes-code.js.map +1 -0
- package/dist/esm/nodes/account/account-compare-passwords.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-compare-passwords.js +16 -6
- package/dist/esm/nodes/account/account-compare-passwords.js.map +1 -1
- package/dist/esm/nodes/account/account-delete-current.js +1 -1
- package/dist/esm/nodes/account/account-get-current.js +1 -1
- package/dist/esm/nodes/account/account-hash-password.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-hash-password.js +15 -3
- package/dist/esm/nodes/account/account-hash-password.js.map +1 -1
- package/dist/esm/nodes/account/account-login.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-login.js +23 -6
- package/dist/esm/nodes/account/account-login.js.map +1 -1
- package/dist/esm/nodes/account/account-logout.js +1 -1
- package/dist/esm/nodes/account/account-refresh-session.js +1 -1
- package/dist/esm/nodes/account/account-request-password-reset.d.ts +3 -0
- package/dist/esm/nodes/account/account-request-password-reset.d.ts.map +1 -0
- package/dist/esm/nodes/account/account-request-password-reset.js +43 -0
- package/dist/esm/nodes/account/account-request-password-reset.js.map +1 -0
- package/dist/esm/nodes/account/account-reset-password.d.ts +3 -0
- package/dist/esm/nodes/account/account-reset-password.d.ts.map +1 -0
- package/dist/esm/nodes/account/account-reset-password.js +41 -0
- package/dist/esm/nodes/account/account-reset-password.js.map +1 -0
- package/dist/esm/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-signup.js +82 -19
- package/dist/esm/nodes/account/account-signup.js.map +1 -1
- package/dist/esm/nodes/account/account-social-login.js +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-custom-prompt.js +20 -5
- package/dist/esm/nodes/ai/ai-custom-prompt.js.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-detect-language.js +20 -5
- package/dist/esm/nodes/ai/ai-detect-language.js.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js +10 -2
- package/dist/esm/nodes/ai/ai-generate-text-embedding.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js +2 -2
- package/dist/esm/nodes/ai/ai-provider-utils-sources.generated.js.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts +31 -2
- package/dist/esm/nodes/ai/ai-provider-utils.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-provider-utils.js +124 -10
- package/dist/esm/nodes/ai/ai-provider-utils.js.map +1 -1
- package/dist/esm/nodes/ai/ai-select-database-data.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-select-database-data.js +6 -2
- package/dist/esm/nodes/ai/ai-select-database-data.js.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js +20 -5
- package/dist/esm/nodes/ai/ai-sentiment-analysis.js.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-summarization.js +20 -5
- package/dist/esm/nodes/ai/ai-summarization.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-text-classifier.js +20 -5
- package/dist/esm/nodes/ai/ai-text-classifier.js.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.d.ts.map +1 -1
- package/dist/esm/nodes/ai/ai-text-transform.js +20 -5
- package/dist/esm/nodes/ai/ai-text-transform.js.map +1 -1
- package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts +3 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts.map +1 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.js +107 -0
- package/dist/esm/nodes/analytics/analytics-track-outcome.js.map +1 -0
- package/dist/esm/nodes/cart/cart-price-order.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-price-order.js +161 -2
- package/dist/esm/nodes/cart/cart-price-order.js.map +1 -1
- package/dist/esm/nodes/cost-bearing-node-types.d.ts +4 -0
- package/dist/esm/nodes/cost-bearing-node-types.d.ts.map +1 -0
- package/dist/esm/nodes/cost-bearing-node-types.js +39 -0
- package/dist/esm/nodes/cost-bearing-node-types.js.map +1 -0
- package/dist/esm/nodes/data/data-select.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-select.js +12 -2
- package/dist/esm/nodes/data/data-select.js.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.js +15 -11
- package/dist/esm/nodes/email/email-mailersend.js.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.js +15 -15
- package/dist/esm/nodes/email/email-mailgun.js.map +1 -1
- package/dist/esm/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-postmark.js +15 -15
- package/dist/esm/nodes/email/email-postmark.js.map +1 -1
- package/dist/esm/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-resend.js +15 -15
- package/dist/esm/nodes/email/email-resend.js.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.js +15 -15
- package/dist/esm/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/esm/nodes/email/html-escape-code.d.ts +3 -0
- package/dist/esm/nodes/email/html-escape-code.d.ts.map +1 -0
- package/dist/esm/nodes/email/html-escape-code.js +18 -0
- package/dist/esm/nodes/email/html-escape-code.js.map +1 -0
- package/dist/esm/nodes/email/message-trust.d.ts +40 -0
- package/dist/esm/nodes/email/message-trust.d.ts.map +1 -0
- package/dist/esm/nodes/email/message-trust.js +161 -0
- package/dist/esm/nodes/email/message-trust.js.map +1 -0
- package/dist/esm/nodes/email/outbound-message-guard.d.ts +113 -0
- package/dist/esm/nodes/email/outbound-message-guard.d.ts.map +1 -0
- package/dist/esm/nodes/email/outbound-message-guard.js +452 -0
- package/dist/esm/nodes/email/outbound-message-guard.js.map +1 -0
- package/dist/esm/nodes/email/trusted-html-code.d.ts +22 -0
- package/dist/esm/nodes/email/trusted-html-code.d.ts.map +1 -0
- package/dist/esm/nodes/email/trusted-html-code.js +49 -0
- package/dist/esm/nodes/email/trusted-html-code.js.map +1 -0
- package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.js +44 -7
- package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
- package/dist/esm/nodes/general/general-http-request.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-http-request.js +431 -45
- package/dist/esm/nodes/general/general-http-request.js.map +1 -1
- package/dist/esm/nodes/general/general-rate-limiter.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-rate-limiter.js +46 -78
- package/dist/esm/nodes/general/general-rate-limiter.js.map +1 -1
- package/dist/esm/nodes/general/general-wait.d.ts +3 -0
- package/dist/esm/nodes/general/general-wait.d.ts.map +1 -0
- package/dist/esm/nodes/general/general-wait.js +78 -0
- package/dist/esm/nodes/general/general-wait.js.map +1 -0
- package/dist/esm/nodes/general/visitor-request.d.ts +44 -0
- package/dist/esm/nodes/general/visitor-request.d.ts.map +1 -0
- package/dist/esm/nodes/general/visitor-request.js +65 -0
- package/dist/esm/nodes/general/visitor-request.js.map +1 -0
- package/dist/esm/nodes/index.d.ts.map +1 -1
- package/dist/esm/nodes/index.js +7 -1
- package/dist/esm/nodes/index.js.map +1 -1
- package/dist/esm/nodes/integrations/integration-slack.d.ts.map +1 -1
- package/dist/esm/nodes/integrations/integration-slack.js +17 -6
- package/dist/esm/nodes/integrations/integration-slack.js.map +1 -1
- package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts +3 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.js +38 -0
- package/dist/esm/nodes/newsletter/newsletter-confirm.js.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts +7 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.js +66 -0
- package/dist/esm/nodes/newsletter/newsletter-subscribe.js.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts +3 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.d.ts.map +1 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js +39 -0
- package/dist/esm/nodes/newsletter/newsletter-unsubscribe.js.map +1 -0
- package/dist/esm/nodes/realtime/realtime-join-channel.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-join-channel.js +5 -4
- package/dist/esm/nodes/realtime/realtime-join-channel.js.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-event.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-event.js +11 -2
- package/dist/esm/nodes/realtime/realtime-send-channel-event.js.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-message.d.ts.map +1 -1
- package/dist/esm/nodes/realtime/realtime-send-channel-message.js +11 -2
- package/dist/esm/nodes/realtime/realtime-send-channel-message.js.map +1 -1
- package/dist/esm/nodes/sms/sms-infobip.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-infobip.js +11 -8
- package/dist/esm/nodes/sms/sms-infobip.js.map +1 -1
- package/dist/esm/nodes/sms/sms-smsapi.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-smsapi.js +11 -8
- package/dist/esm/nodes/sms/sms-smsapi.js.map +1 -1
- package/dist/esm/nodes/sms/sms-textmagic.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-textmagic.js +11 -8
- package/dist/esm/nodes/sms/sms-textmagic.js.map +1 -1
- package/dist/esm/nodes/sms/sms-twilio.d.ts.map +1 -1
- package/dist/esm/nodes/sms/sms-twilio.js +12 -10
- package/dist/esm/nodes/sms/sms-twilio.js.map +1 -1
- package/dist/esm/nodes/types.d.ts +8 -1
- package/dist/esm/nodes/types.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.d.ts.map +1 -1
- package/dist/esm/nodes/utility/utility-similarity-scoring.js +29 -10
- package/dist/esm/nodes/utility/utility-similarity-scoring.js.map +1 -1
- package/dist/esm/page-access-guard-generator.d.ts +23 -0
- package/dist/esm/page-access-guard-generator.d.ts.map +1 -0
- package/dist/esm/page-access-guard-generator.js +131 -0
- package/dist/esm/page-access-guard-generator.js.map +1 -0
- package/dist/esm/password-reset-route-generator.d.ts +119 -0
- package/dist/esm/password-reset-route-generator.d.ts.map +1 -0
- package/dist/esm/password-reset-route-generator.js +448 -0
- package/dist/esm/password-reset-route-generator.js.map +1 -0
- package/dist/esm/payments/payment-core-code.d.ts.map +1 -1
- package/dist/esm/payments/payment-core-code.js +12 -7
- package/dist/esm/payments/payment-core-code.js.map +1 -1
- package/dist/esm/project-code-scanner.d.ts +11 -0
- package/dist/esm/project-code-scanner.d.ts.map +1 -0
- package/dist/esm/project-code-scanner.js +75 -0
- package/dist/esm/project-code-scanner.js.map +1 -0
- package/dist/esm/public-step-guards.d.ts +122 -0
- package/dist/esm/public-step-guards.d.ts.map +1 -0
- package/dist/esm/public-step-guards.js +280 -0
- package/dist/esm/public-step-guards.js.map +1 -0
- package/dist/esm/publish-refusals.d.ts +66 -0
- package/dist/esm/publish-refusals.d.ts.map +1 -0
- package/dist/esm/publish-refusals.js +271 -0
- package/dist/esm/publish-refusals.js.map +1 -0
- package/dist/esm/realtime-generator.d.ts +63 -1
- package/dist/esm/realtime-generator.d.ts.map +1 -1
- package/dist/esm/realtime-generator.js +401 -229
- package/dist/esm/realtime-generator.js.map +1 -1
- package/dist/esm/runtime-storage-generator.d.ts +32 -1
- package/dist/esm/runtime-storage-generator.d.ts.map +1 -1
- package/dist/esm/runtime-storage-generator.js +264 -11
- package/dist/esm/runtime-storage-generator.js.map +1 -1
- package/dist/esm/security-runtime/index.d.ts +14 -0
- package/dist/esm/security-runtime/index.d.ts.map +1 -0
- package/dist/esm/security-runtime/index.js +37 -0
- package/dist/esm/security-runtime/index.js.map +1 -0
- package/dist/esm/security-runtime/security-runtime-code.d.ts +53 -0
- package/dist/esm/security-runtime/security-runtime-code.d.ts.map +1 -0
- package/dist/esm/security-runtime/security-runtime-code.js +575 -0
- package/dist/esm/security-runtime/security-runtime-code.js.map +1 -0
- package/dist/esm/security-scanner.d.ts +72 -3
- package/dist/esm/security-scanner.d.ts.map +1 -1
- package/dist/esm/security-scanner.js +217 -8
- package/dist/esm/security-scanner.js.map +1 -1
- package/dist/esm/segment-splitter.d.ts.map +1 -1
- package/dist/esm/segment-splitter.js +10 -2
- package/dist/esm/segment-splitter.js.map +1 -1
- package/dist/esm/segment-trust.d.ts +36 -0
- package/dist/esm/segment-trust.d.ts.map +1 -1
- package/dist/esm/segment-trust.js +146 -2
- package/dist/esm/segment-trust.js.map +1 -1
- package/dist/esm/self-call-headers.d.ts +31 -0
- package/dist/esm/self-call-headers.d.ts.map +1 -0
- package/dist/esm/self-call-headers.js +43 -0
- package/dist/esm/self-call-headers.js.map +1 -0
- package/dist/esm/sent-email-log/index.d.ts +7 -0
- package/dist/esm/sent-email-log/index.d.ts.map +1 -1
- package/dist/esm/sent-email-log/index.js +15 -0
- package/dist/esm/sent-email-log/index.js.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts +7 -0
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.js +17 -3
- package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/esm/server-custom-node-call.d.ts +79 -0
- package/dist/esm/server-custom-node-call.d.ts.map +1 -0
- package/dist/esm/server-custom-node-call.js +278 -0
- package/dist/esm/server-custom-node-call.js.map +1 -0
- package/dist/esm/server-runtime-code.d.ts +39 -12
- package/dist/esm/server-runtime-code.d.ts.map +1 -1
- package/dist/esm/server-runtime-code.js +483 -40
- package/dist/esm/server-runtime-code.js.map +1 -1
- package/dist/esm/session-cookie-resolver.d.ts +3 -1
- package/dist/esm/session-cookie-resolver.d.ts.map +1 -1
- package/dist/esm/session-revocation-generator.d.ts +39 -0
- package/dist/esm/session-revocation-generator.d.ts.map +1 -0
- package/dist/esm/session-revocation-generator.js +172 -0
- package/dist/esm/session-revocation-generator.js.map +1 -0
- package/dist/esm/slack-message-values.d.ts +6 -0
- package/dist/esm/slack-message-values.d.ts.map +1 -0
- package/dist/esm/slack-message-values.js +68 -0
- package/dist/esm/slack-message-values.js.map +1 -0
- package/dist/esm/transactional-email-code.d.ts +11 -0
- package/dist/esm/transactional-email-code.d.ts.map +1 -1
- package/dist/esm/transactional-email-code.js +28 -4
- package/dist/esm/transactional-email-code.js.map +1 -1
- package/dist/esm/trigger-generator.d.ts +2 -0
- package/dist/esm/trigger-generator.d.ts.map +1 -1
- package/dist/esm/trigger-generator.js +15 -3
- package/dist/esm/trigger-generator.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/visitor-step-limits.d.ts +66 -0
- package/dist/esm/visitor-step-limits.d.ts.map +1 -0
- package/dist/esm/visitor-step-limits.js +181 -0
- package/dist/esm/visitor-step-limits.js.map +1 -0
- package/dist/esm/webhook-generator.d.ts.map +1 -1
- package/dist/esm/webhook-generator.js +93 -15
- package/dist/esm/webhook-generator.js.map +1 -1
- package/dist/esm/webhook-signature-verification.d.ts.map +1 -1
- package/dist/esm/webhook-signature-verification.js +13 -3
- package/dist/esm/webhook-signature-verification.js.map +1 -1
- package/dist/esm/workflow-auth-generator.d.ts +4 -1
- package/dist/esm/workflow-auth-generator.d.ts.map +1 -1
- package/dist/esm/workflow-auth-generator.js +8 -3
- package/dist/esm/workflow-auth-generator.js.map +1 -1
- package/dist/esm/workflow-component-plugin.js +12 -4
- package/dist/esm/workflow-component-plugin.js.map +1 -1
- package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-project-plugin.js +306 -60
- package/dist/esm/workflow-project-plugin.js.map +1 -1
- package/dist/esm/workflow-scope.d.ts.map +1 -1
- package/dist/esm/workflow-scope.js +5 -0
- package/dist/esm/workflow-scope.js.map +1 -1
- package/package.json +4 -4
- package/src/account-delete-route-generator.ts +28 -4
- package/src/api-route-generator.ts +712 -134
- package/src/auth-generator.ts +1471 -142
- package/src/automations/activity-kicks.ts +139 -0
- package/src/automations/app-events-source.ts +117 -0
- package/src/automations/automations-project-plugin.ts +202 -0
- package/src/automations/automations-scope.ts +196 -0
- package/src/automations/dispatcher-source.ts +1072 -0
- package/src/automations/event-bus-source.ts +428 -0
- package/src/automations/handler-module-generator.ts +107 -0
- package/src/automations/hydrators-source.ts +647 -0
- package/src/booking-calendar-feed-route-generator.ts +8 -0
- package/src/configured-nextauth-url.ts +17 -0
- package/src/cron-request-verification.ts +55 -5
- package/src/data-api-route-generator.ts +780 -43
- package/src/ecommerce/parameterized-stock-chain.ts +52 -5
- package/src/ecommerce/place-order-guards.ts +785 -0
- package/src/ecommerce-customhandler-rewriter.ts +55 -2
- package/src/executor-generator.ts +372 -60
- package/src/graph-utils.ts +33 -0
- package/src/index.ts +70 -0
- package/src/invoice/api-routes-code.ts +20 -7
- package/src/invoice/index.ts +11 -6
- package/src/invoice/invoice-assembly-code.ts +8 -3
- package/src/invoice/pdf-generator-code.ts +2 -1
- package/src/invoice/pdf-service-client-code.ts +15 -7
- package/src/newsletter/admin-route-code.ts +319 -0
- package/src/newsletter/helper-code.ts +748 -0
- package/src/newsletter/newsletter-scope.ts +116 -0
- package/src/newsletter/project-plugin.ts +119 -0
- package/src/newsletter/routes-code.ts +186 -0
- package/src/nodes/account/account-compare-passwords.ts +17 -6
- package/src/nodes/account/account-delete-current.ts +1 -1
- package/src/nodes/account/account-get-current.ts +1 -1
- package/src/nodes/account/account-hash-password.ts +19 -3
- package/src/nodes/account/account-login.ts +24 -7
- package/src/nodes/account/account-logout.ts +1 -1
- package/src/nodes/account/account-refresh-session.ts +1 -1
- package/src/nodes/account/account-request-password-reset.ts +47 -0
- package/src/nodes/account/account-reset-password.ts +45 -0
- package/src/nodes/account/account-signup.ts +86 -20
- package/src/nodes/account/account-social-login.ts +1 -1
- package/src/nodes/ai/ai-custom-prompt.ts +25 -6
- package/src/nodes/ai/ai-detect-language.ts +25 -6
- package/src/nodes/ai/ai-generate-text-embedding.ts +16 -3
- package/src/nodes/ai/ai-provider-utils-sources.generated.ts +2 -2
- package/src/nodes/ai/ai-provider-utils.ts +135 -10
- package/src/nodes/ai/ai-select-database-data.ts +8 -3
- package/src/nodes/ai/ai-sentiment-analysis.ts +25 -6
- package/src/nodes/ai/ai-summarization.ts +25 -6
- package/src/nodes/ai/ai-text-classifier.ts +25 -6
- package/src/nodes/ai/ai-text-transform.ts +25 -6
- package/src/nodes/analytics/analytics-track-outcome.ts +111 -0
- package/src/nodes/cart/cart-price-order.ts +200 -2
- package/src/nodes/cost-bearing-node-types.ts +45 -0
- package/src/nodes/data/data-select.ts +11 -2
- package/src/nodes/email/email-mailersend.ts +16 -8
- package/src/nodes/email/email-mailgun.ts +17 -12
- package/src/nodes/email/email-postmark.ts +17 -12
- package/src/nodes/email/email-resend.ts +17 -12
- package/src/nodes/email/email-sendgrid.ts +17 -12
- package/src/nodes/email/html-escape-code.ts +21 -0
- package/src/nodes/email/message-trust.ts +198 -0
- package/src/nodes/email/outbound-message-guard.ts +572 -0
- package/src/nodes/email/trusted-html-code.ts +49 -0
- package/src/nodes/general/general-custom-js.ts +46 -7
- package/src/nodes/general/general-http-request.ts +449 -46
- package/src/nodes/general/general-rate-limiter.ts +54 -81
- package/src/nodes/general/general-wait.ts +80 -0
- package/src/nodes/general/visitor-request.ts +79 -0
- package/src/nodes/index.ts +12 -0
- package/src/nodes/integrations/integration-slack.ts +21 -6
- package/src/nodes/newsletter/newsletter-confirm.ts +44 -0
- package/src/nodes/newsletter/newsletter-subscribe.ts +78 -0
- package/src/nodes/newsletter/newsletter-unsubscribe.ts +43 -0
- package/src/nodes/realtime/realtime-join-channel.ts +5 -4
- package/src/nodes/realtime/realtime-send-channel-event.ts +13 -2
- package/src/nodes/realtime/realtime-send-channel-message.ts +13 -2
- package/src/nodes/sms/sms-infobip.ts +14 -4
- package/src/nodes/sms/sms-smsapi.ts +14 -4
- package/src/nodes/sms/sms-textmagic.ts +14 -4
- package/src/nodes/sms/sms-twilio.ts +14 -4
- package/src/nodes/types.ts +9 -1
- package/src/nodes/utility/utility-similarity-scoring.ts +33 -12
- package/src/page-access-guard-generator.ts +154 -0
- package/src/password-reset-route-generator.ts +531 -0
- package/src/payments/payment-core-code.ts +12 -7
- package/src/project-code-scanner.ts +98 -0
- package/src/public-step-guards.ts +448 -0
- package/src/publish-refusals.ts +459 -0
- package/src/realtime-generator.ts +457 -234
- package/src/runtime-storage-generator.ts +270 -11
- package/src/security-runtime/index.ts +53 -0
- package/src/security-runtime/security-runtime-code.ts +579 -0
- package/src/security-scanner.ts +253 -10
- package/src/segment-splitter.ts +10 -2
- package/src/segment-trust.ts +205 -2
- package/src/self-call-headers.ts +46 -0
- package/src/sent-email-log/index.ts +16 -0
- package/src/sent-email-log/sent-email-log-code.ts +30 -4
- package/src/server-custom-node-call.ts +331 -0
- package/src/server-runtime-code.ts +488 -40
- package/src/session-revocation-generator.ts +177 -0
- package/src/slack-message-values.ts +84 -0
- package/src/transactional-email-code.ts +30 -4
- package/src/trigger-generator.ts +19 -3
- package/src/visitor-step-limits.ts +228 -0
- package/src/webhook-generator.ts +94 -14
- package/src/webhook-signature-verification.ts +13 -3
- package/src/workflow-auth-generator.ts +9 -4
- package/src/workflow-component-plugin.ts +14 -4
- package/src/workflow-project-plugin.ts +374 -61
- package/src/workflow-scope.ts +6 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import type { ProjectPluginStructure } from '@teleporthq/teleport-types'
|
|
2
|
+
import { AUTOMATIONS_PATH } from './automations-scope'
|
|
3
|
+
import { dueWaitsSql, retriableEventsSql } from './dispatcher-source'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Activity kicks (spec §5.2): a due Wait, a failed run waiting for its retry,
|
|
7
|
+
* and the work a stopped dispatcher left behind (a stale `pending` event, a
|
|
8
|
+
* stale resume) have no event of their own to wake the queue, so the site's
|
|
9
|
+
* activity does. `lib/automations/due-check.js` exports `kickWhenDue(req?)`, called by
|
|
10
|
+
* every server read of the TeleportHQ database (the data-source modules a
|
|
11
|
+
* page's server render and the admin's lists go through) and by the data API:
|
|
12
|
+
*
|
|
13
|
+
* - at most one check per minute per process (the rest return null at once);
|
|
14
|
+
* - never on the request's path: the check is a cheap EXISTS query run after
|
|
15
|
+
* the call returns, kept alive by the platform's `waitUntil` on Vercel;
|
|
16
|
+
* - when work is due it wakes the queue the way an emitter does
|
|
17
|
+
* (`scheduleDispatch`);
|
|
18
|
+
* - never while `next build` renders the pages.
|
|
19
|
+
*
|
|
20
|
+
* Generated only with the event bus (generateAutomationFiles), like every
|
|
21
|
+
* file of `lib/automations/`.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
const CHECK_EVERY_MS = 60 * 1000
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Work a dispatch pass would act on now, by the claims' own rules (shared with
|
|
28
|
+
* the dispatcher), so the kick never wakes a pass with nothing to do: a Wait
|
|
29
|
+
* that is due or whose resume went stale, and a failed or stale `pending`
|
|
30
|
+
* event, of an automation of this build ($1: its workflow ids, $2: its event
|
|
31
|
+
* types). New events are woken by their emitters.
|
|
32
|
+
*/
|
|
33
|
+
const DUE_SQL =
|
|
34
|
+
`SELECT (EXISTS (SELECT 1 FROM teleport_automation_waits w WHERE ${dueWaitsSql('$1')}) ` +
|
|
35
|
+
`OR EXISTS (SELECT 1 FROM teleport_events e WHERE ${retriableEventsSql('$2', '$1')})) AS due`
|
|
36
|
+
|
|
37
|
+
/** `lib/automations/due-check.js`, for the automations of this build. */
|
|
38
|
+
export const generateAutomationDueCheckCode = (
|
|
39
|
+
workflowIds: string[],
|
|
40
|
+
eventTypes: string[]
|
|
41
|
+
): string => `'use strict';
|
|
42
|
+
/**
|
|
43
|
+
* Automations: the activity kick (generated). The site's server reads call
|
|
44
|
+
* kickWhenDue(req): once a minute at most, off the request, it looks for a
|
|
45
|
+
* Wait that is due, a failed run waiting for its retry, or work a stopped
|
|
46
|
+
* dispatcher left behind, and wakes the queue when there is some.
|
|
47
|
+
*/
|
|
48
|
+
var store = require('./store');
|
|
49
|
+
var bus = require('./event-bus');
|
|
50
|
+
|
|
51
|
+
var CHECK_EVERY_MS = ${CHECK_EVERY_MS};
|
|
52
|
+
var WORKFLOW_IDS = ${JSON.stringify(workflowIds)};
|
|
53
|
+
var EVENT_TYPES = ${JSON.stringify(eventTypes)};
|
|
54
|
+
var DUE_SQL = ${JSON.stringify(DUE_SQL)};
|
|
55
|
+
|
|
56
|
+
var lastCheckAt = 0;
|
|
57
|
+
|
|
58
|
+
async function check(req) {
|
|
59
|
+
try {
|
|
60
|
+
var result = await store.withClient(function (client) {
|
|
61
|
+
return client.query(DUE_SQL, [WORKFLOW_IDS, EVENT_TYPES]);
|
|
62
|
+
});
|
|
63
|
+
var row = result && result.rows && result.rows[0];
|
|
64
|
+
var due = !!row && (row.due === true || row.due === 't');
|
|
65
|
+
if (due) bus.scheduleDispatch(req);
|
|
66
|
+
return due;
|
|
67
|
+
} catch (error) {
|
|
68
|
+
console.warn('[automations] could not check for due work: ' + store.errorMessage(error));
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Resolves whether it woke the queue; null when this minute's check ran already.
|
|
74
|
+
function kickWhenDue(req) {
|
|
75
|
+
if (process.env.NEXT_PHASE === 'phase-production-build') return null;
|
|
76
|
+
var now = Date.now();
|
|
77
|
+
if (now - lastCheckAt < CHECK_EVERY_MS) return null;
|
|
78
|
+
lastCheckAt = now;
|
|
79
|
+
var work = Promise.resolve().then(function () { return check(req); });
|
|
80
|
+
var waitUntil = process.env.VERCEL && typeof globalThis.__tqWaitUntil === 'function' ? globalThis.__tqWaitUntil : null;
|
|
81
|
+
if (waitUntil) {
|
|
82
|
+
try { waitUntil(work); } catch (_e) {}
|
|
83
|
+
}
|
|
84
|
+
return work;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
module.exports = { kickWhenDue: kickWhenDue };
|
|
88
|
+
`
|
|
89
|
+
|
|
90
|
+
/** From a data-source module (`utils/data-sources/`, `pages/api/`) to the project root. */
|
|
91
|
+
const DUE_CHECK_IMPORT = `import { kickWhenDue as __tqKickDueAutomations } from '../../${AUTOMATIONS_PATH.join(
|
|
92
|
+
'/'
|
|
93
|
+
)}/due-check'`
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The handler every data-source module of the data-source plugin runs for a
|
|
97
|
+
* read (`generateDataSourceFetcherWithCore`: an API route, and a page's
|
|
98
|
+
* server render through `fetchData`).
|
|
99
|
+
*/
|
|
100
|
+
const HANDLER_OPENING = '\nasync function handler(req, res) {\n'
|
|
101
|
+
|
|
102
|
+
const KICK_CALL =
|
|
103
|
+
' // Activity on the site: due automation work (a Wait, a retry) starts off this request.\n' +
|
|
104
|
+
' __tqKickDueAutomations(req)\n'
|
|
105
|
+
|
|
106
|
+
/** Where the data-source plugin writes the modules that read a table. */
|
|
107
|
+
const DATA_SOURCE_MODULE_FOLDERS = ['utils/data-sources', 'pages/api']
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Starts the due check from every module that reads the TeleportHQ database
|
|
111
|
+
* (the data-source plugin names them `teleport-<table>-<id>`), the only one
|
|
112
|
+
* automations run on: one import, one call at the top of its handler. A module
|
|
113
|
+
* of another database, or one that only re-exports another's handler, is left
|
|
114
|
+
* as it is. Runs after the page plugins wrote them.
|
|
115
|
+
*/
|
|
116
|
+
export const installAutomationActivityKicks = (structure: ProjectPluginStructure): void => {
|
|
117
|
+
for (const entry of structure.files.values()) {
|
|
118
|
+
if (DATA_SOURCE_MODULE_FOLDERS.indexOf(entry.path.join('/')) === -1) {
|
|
119
|
+
continue
|
|
120
|
+
}
|
|
121
|
+
for (const file of entry.files) {
|
|
122
|
+
const content = typeof file.content === 'string' ? file.content : ''
|
|
123
|
+
const at = content.indexOf(HANDLER_OPENING)
|
|
124
|
+
if (
|
|
125
|
+
!file.name.startsWith('teleport-') ||
|
|
126
|
+
at === -1 ||
|
|
127
|
+
content.indexOf(HANDLER_OPENING, at + 1) !== -1 ||
|
|
128
|
+
content.indexOf(DUE_CHECK_IMPORT) !== -1
|
|
129
|
+
) {
|
|
130
|
+
continue
|
|
131
|
+
}
|
|
132
|
+
const bodyStart = at + HANDLER_OPENING.length
|
|
133
|
+
file.content = `${DUE_CHECK_IMPORT}\n${content.slice(
|
|
134
|
+
0,
|
|
135
|
+
bodyStart
|
|
136
|
+
)}${KICK_CALL}${content.slice(bodyStart)}`
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { FileType, ProjectPluginStructure } from '@teleporthq/teleport-types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `utils/app-events.js`: how a generated route records a business event
|
|
5
|
+
* (spec §5.1) on its own database connection — the data API's low-stock
|
|
6
|
+
* alert:
|
|
7
|
+
*
|
|
8
|
+
* const { recordAppEvent } = require('<root>/utils/app-events');
|
|
9
|
+
* await recordAppEvent(db, { type, entityType, entityId, orderId?, payload,
|
|
10
|
+
* actor, actorType, dedupeKey }, req);
|
|
11
|
+
*
|
|
12
|
+
* `db` is the route's own Postgres client (anything with `query(text,
|
|
13
|
+
* values)` resolving `{ rows }`), so the row is written on the route's
|
|
14
|
+
* connection; call it once the route's own writes are committed, or the queue
|
|
15
|
+
* cannot see the row yet. A replayed `dedupeKey` writes nothing. Never
|
|
16
|
+
* throws: it resolves `{ recorded, id }`, so the event ledger can never fail
|
|
17
|
+
* the operation it records.
|
|
18
|
+
*
|
|
19
|
+
* The row is always written: it is the record timelines and the editor's
|
|
20
|
+
* history read. When the project has automations (`withAutomations`, decided
|
|
21
|
+
* at generation: the in-app event bus `lib/automations/event-bus.js` exists)
|
|
22
|
+
* a new row also wakes the queue, off the request path, on the app's own
|
|
23
|
+
* origin as `req` reached it (never a URL a caller hands in). Without them
|
|
24
|
+
* the module never names the bus.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
export const APP_EVENTS_FILE_KEY = 'app-events'
|
|
28
|
+
export const APP_EVENTS_PATH = ['utils']
|
|
29
|
+
export const APP_EVENTS_FILE_NAME = 'app-events'
|
|
30
|
+
|
|
31
|
+
/** From `utils/app-events.js` to the bus the automations plugin generates. */
|
|
32
|
+
const EVENT_BUS_REQUIRE_PATH = '../lib/automations/event-bus'
|
|
33
|
+
|
|
34
|
+
const INSERT_EVENT_SQL =
|
|
35
|
+
'INSERT INTO teleport_events (event_type, dedupe_key, order_id, entity_type, entity_id, payload, actor, actor_type) ' +
|
|
36
|
+
'VALUES ($1, $2, $3, $4, $5, $6, $7, $8) ON CONFLICT (dedupe_key) DO NOTHING RETURNING id'
|
|
37
|
+
|
|
38
|
+
const KICK_WITH_AUTOMATIONS = `// The project has automations: a new event wakes their queue.
|
|
39
|
+
function kick(req) {
|
|
40
|
+
try {
|
|
41
|
+
require('${EVENT_BUS_REQUIRE_PATH}').scheduleDispatch(req);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.warn('[app-events] could not wake the automations: ' + errorMessage(error));
|
|
44
|
+
}
|
|
45
|
+
}`
|
|
46
|
+
|
|
47
|
+
const KICK_WITHOUT_AUTOMATIONS = `// The project has no automations: the row is the whole record.
|
|
48
|
+
function kick() {}`
|
|
49
|
+
|
|
50
|
+
export const generateAppEventsModuleCode = (options: {
|
|
51
|
+
withAutomations: boolean
|
|
52
|
+
}): string => `'use strict';
|
|
53
|
+
/**
|
|
54
|
+
* Business events recorded by the app's routes (generated).
|
|
55
|
+
*/
|
|
56
|
+
var crypto = require('crypto');
|
|
57
|
+
|
|
58
|
+
var INSERT_EVENT_SQL = ${JSON.stringify(INSERT_EVENT_SQL)};
|
|
59
|
+
|
|
60
|
+
function errorMessage(error) {
|
|
61
|
+
return error && error.message ? String(error.message) : String(error);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
${options.withAutomations ? KICK_WITH_AUTOMATIONS : KICK_WITHOUT_AUTOMATIONS}
|
|
65
|
+
|
|
66
|
+
function column(value, maxLength) {
|
|
67
|
+
if (value === undefined || value === null || value === '') return null;
|
|
68
|
+
return String(value).slice(0, maxLength);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function recordAppEvent(db, event, req) {
|
|
72
|
+
var input = event || {};
|
|
73
|
+
try {
|
|
74
|
+
var type = column(input.type, 100);
|
|
75
|
+
if (!type) throw new Error('An event needs its type');
|
|
76
|
+
var result = await db.query(INSERT_EVENT_SQL, [
|
|
77
|
+
type,
|
|
78
|
+
column(input.dedupeKey, 255) || type + ':' + crypto.randomUUID(),
|
|
79
|
+
column(input.orderId, 64),
|
|
80
|
+
column(input.entityType, 40),
|
|
81
|
+
column(input.entityId, 64),
|
|
82
|
+
input.payload === undefined || input.payload === null ? null : JSON.stringify(input.payload),
|
|
83
|
+
column(input.actor, 255),
|
|
84
|
+
column(input.actorType, 50) || 'system',
|
|
85
|
+
]);
|
|
86
|
+
var row = result && result.rows && result.rows[0];
|
|
87
|
+
if (!row) return { recorded: false, id: null };
|
|
88
|
+
kick(req);
|
|
89
|
+
return { recorded: true, id: String(row.id) };
|
|
90
|
+
} catch (error) {
|
|
91
|
+
console.error('[app-events] could not record the ' + String(input.type) + ' event: ' + errorMessage(error));
|
|
92
|
+
return { recorded: false, id: null };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
module.exports = { recordAppEvent: recordAppEvent };
|
|
97
|
+
`
|
|
98
|
+
|
|
99
|
+
/** Writes `utils/app-events.js` into the project, once. */
|
|
100
|
+
export const ensureAppEventsModule = (
|
|
101
|
+
structure: ProjectPluginStructure,
|
|
102
|
+
withAutomations: boolean
|
|
103
|
+
): void => {
|
|
104
|
+
if (structure.files.has(APP_EVENTS_FILE_KEY)) {
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
structure.files.set(APP_EVENTS_FILE_KEY, {
|
|
108
|
+
path: APP_EVENTS_PATH,
|
|
109
|
+
files: [
|
|
110
|
+
{
|
|
111
|
+
name: APP_EVENTS_FILE_NAME,
|
|
112
|
+
fileType: FileType.JS,
|
|
113
|
+
content: generateAppEventsModuleCode({ withAutomations }),
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
})
|
|
117
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FileType,
|
|
3
|
+
ProjectPluginStructure,
|
|
4
|
+
UIDLCustomWorkflowNode,
|
|
5
|
+
UIDLWorkflow,
|
|
6
|
+
} from '@teleporthq/teleport-types'
|
|
7
|
+
import { getDatabaseDriverDependencies } from '../auth-generator'
|
|
8
|
+
import { declareCronSecretEnv } from '../cron-request-verification'
|
|
9
|
+
import { enableSentEmailAttribution } from '../sent-email-log'
|
|
10
|
+
import {
|
|
11
|
+
AUTOMATION_HANDLERS_PATH,
|
|
12
|
+
AUTOMATION_HYDRATE_PATH,
|
|
13
|
+
AUTOMATIONS_DISPATCH_ROUTE_PATH,
|
|
14
|
+
AUTOMATIONS_FILE_KEY_PREFIX,
|
|
15
|
+
AUTOMATIONS_PATH,
|
|
16
|
+
AUTOMATIONS_UNAVAILABLE_REASON,
|
|
17
|
+
VERCEL_FUNCTIONS_DEPENDENCY,
|
|
18
|
+
automationEntityOf,
|
|
19
|
+
automationEnvelopeKeys,
|
|
20
|
+
automationEventType,
|
|
21
|
+
resolveAutomationsDatabase,
|
|
22
|
+
} from './automations-scope'
|
|
23
|
+
import {
|
|
24
|
+
generateAutomationEventBusCode,
|
|
25
|
+
generateAutomationStoreCode,
|
|
26
|
+
generateAutomationWaitUntilCode,
|
|
27
|
+
} from './event-bus-source'
|
|
28
|
+
import {
|
|
29
|
+
generateAutomationDispatchRouteCode,
|
|
30
|
+
generateAutomationDispatcherCode,
|
|
31
|
+
generateAutomationsUnavailableRouteCode,
|
|
32
|
+
} from './dispatcher-source'
|
|
33
|
+
import { generateAutomationHydratorCode } from './hydrators-source'
|
|
34
|
+
import { generateAutomationDueCheckCode, installAutomationActivityKicks } from './activity-kicks'
|
|
35
|
+
import {
|
|
36
|
+
generateAutomationHandlerModule,
|
|
37
|
+
generateAutomationRegistryCode,
|
|
38
|
+
resolveAutomationHandlerFileNames,
|
|
39
|
+
toRegistryEntry,
|
|
40
|
+
} from './handler-module-generator'
|
|
41
|
+
|
|
42
|
+
export interface AutomationFilesOptions {
|
|
43
|
+
customNodes?: Record<string, UIDLCustomWorkflowNode>
|
|
44
|
+
/** The auth users table, read for the `user` block of account events. */
|
|
45
|
+
usersTable: string
|
|
46
|
+
/** The order details page's route prefix, for `order.pageUrl` (null: no link). */
|
|
47
|
+
orderPagePrefix: string | null
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const setFile = (
|
|
51
|
+
structure: ProjectPluginStructure,
|
|
52
|
+
key: string,
|
|
53
|
+
path: string[],
|
|
54
|
+
name: string,
|
|
55
|
+
content: string
|
|
56
|
+
): void => {
|
|
57
|
+
structure.files.set(`${AUTOMATIONS_FILE_KEY_PREFIX}${key}`, {
|
|
58
|
+
path,
|
|
59
|
+
files: [{ name, fileType: FileType.JS, content }],
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Emits the in-app event bus for the project's automations (see
|
|
65
|
+
* automations-scope.ts). Nothing at all without one: an automation whose
|
|
66
|
+
* trigger names no event is skipped, with a warning, like a mis-scoped page
|
|
67
|
+
* workflow. No bus either when the UIDL names no TeleportHQ database for the
|
|
68
|
+
* automation tables (`uidl.automations`, the only database automations run
|
|
69
|
+
* on): a bus that opened another database than the one the editor writes the
|
|
70
|
+
* switches to would run nothing the owner sees. The build says why, and the
|
|
71
|
+
* dispatch route answers why (503), so a test sent from the editor shows the
|
|
72
|
+
* reason instead of a missing page.
|
|
73
|
+
*/
|
|
74
|
+
export const generateAutomationFiles = (
|
|
75
|
+
structure: ProjectPluginStructure,
|
|
76
|
+
workflows: UIDLWorkflow[],
|
|
77
|
+
options: AutomationFilesOptions
|
|
78
|
+
): void => {
|
|
79
|
+
const automations = workflows.filter((workflow) => {
|
|
80
|
+
if (automationEventType(workflow)) {
|
|
81
|
+
return true
|
|
82
|
+
}
|
|
83
|
+
console.warn(
|
|
84
|
+
`[teleport-plugin-next-workflows] Automation "${
|
|
85
|
+
workflow.name || workflow.id
|
|
86
|
+
}" names no business event - skipping code generation for it. Pick the event in its trigger.`
|
|
87
|
+
)
|
|
88
|
+
return false
|
|
89
|
+
})
|
|
90
|
+
if (automations.length === 0) {
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
const database = resolveAutomationsDatabase(structure.uidl.automations)
|
|
94
|
+
if (!database) {
|
|
95
|
+
console.warn(
|
|
96
|
+
`[teleport-plugin-next-workflows] The project has automations but ${AUTOMATIONS_UNAVAILABLE_REASON} (uidl.automations) - no event bus is generated, so they do not run. Create the TeleportHQ database in Automations.`
|
|
97
|
+
)
|
|
98
|
+
setFile(
|
|
99
|
+
structure,
|
|
100
|
+
'dispatch-route',
|
|
101
|
+
AUTOMATIONS_DISPATCH_ROUTE_PATH,
|
|
102
|
+
'dispatch',
|
|
103
|
+
generateAutomationsUnavailableRouteCode(AUTOMATIONS_UNAVAILABLE_REASON)
|
|
104
|
+
)
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const fileNames = resolveAutomationHandlerFileNames(automations)
|
|
109
|
+
const entries = automations.map((workflow) => {
|
|
110
|
+
const fileName = fileNames.get(workflow.id) as string
|
|
111
|
+
setFile(
|
|
112
|
+
structure,
|
|
113
|
+
`handler-${workflow.id}`,
|
|
114
|
+
AUTOMATION_HANDLERS_PATH,
|
|
115
|
+
fileName,
|
|
116
|
+
generateAutomationHandlerModule(workflow, options.customNodes)
|
|
117
|
+
)
|
|
118
|
+
return toRegistryEntry(workflow, fileName)
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
const entityByType: Record<string, string | null> = {}
|
|
122
|
+
const envelopeKeysByType: Record<string, string[] | null> = {}
|
|
123
|
+
const hydratedEntities: string[] = []
|
|
124
|
+
for (const { eventType } of entries) {
|
|
125
|
+
const entity = automationEntityOf(eventType)
|
|
126
|
+
entityByType[eventType] = entity
|
|
127
|
+
envelopeKeysByType[eventType] = automationEnvelopeKeys(eventType)
|
|
128
|
+
if (!entity || hydratedEntities.indexOf(entity) !== -1) {
|
|
129
|
+
continue
|
|
130
|
+
}
|
|
131
|
+
const hydrator = generateAutomationHydratorCode(entity, {
|
|
132
|
+
usersTable: options.usersTable,
|
|
133
|
+
orderPagePrefix: options.orderPagePrefix,
|
|
134
|
+
})
|
|
135
|
+
if (hydrator) {
|
|
136
|
+
hydratedEntities.push(entity)
|
|
137
|
+
setFile(structure, `hydrate-${entity}`, AUTOMATION_HYDRATE_PATH, entity, hydrator)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
setFile(
|
|
142
|
+
structure,
|
|
143
|
+
'registry',
|
|
144
|
+
AUTOMATIONS_PATH,
|
|
145
|
+
'registry',
|
|
146
|
+
generateAutomationRegistryCode(entries)
|
|
147
|
+
)
|
|
148
|
+
setFile(structure, 'store', AUTOMATIONS_PATH, 'store', generateAutomationStoreCode())
|
|
149
|
+
setFile(
|
|
150
|
+
structure,
|
|
151
|
+
'wait-until',
|
|
152
|
+
AUTOMATIONS_PATH,
|
|
153
|
+
'wait-until',
|
|
154
|
+
generateAutomationWaitUntilCode()
|
|
155
|
+
)
|
|
156
|
+
setFile(structure, 'event-bus', AUTOMATIONS_PATH, 'event-bus', generateAutomationEventBusCode())
|
|
157
|
+
setFile(
|
|
158
|
+
structure,
|
|
159
|
+
'dispatcher',
|
|
160
|
+
AUTOMATIONS_PATH,
|
|
161
|
+
'dispatcher',
|
|
162
|
+
generateAutomationDispatcherCode({ entityByType, envelopeKeysByType, hydratedEntities })
|
|
163
|
+
)
|
|
164
|
+
setFile(
|
|
165
|
+
structure,
|
|
166
|
+
'dispatch-route',
|
|
167
|
+
AUTOMATIONS_DISPATCH_ROUTE_PATH,
|
|
168
|
+
'dispatch',
|
|
169
|
+
generateAutomationDispatchRouteCode()
|
|
170
|
+
)
|
|
171
|
+
// Due Waits and retries resume on the site's activity: the server reads of
|
|
172
|
+
// the TeleportHQ database (and the data API, see data-api-route-generator)
|
|
173
|
+
// start the due check.
|
|
174
|
+
setFile(
|
|
175
|
+
structure,
|
|
176
|
+
'due-check',
|
|
177
|
+
AUTOMATIONS_PATH,
|
|
178
|
+
'due-check',
|
|
179
|
+
generateAutomationDueCheckCode(
|
|
180
|
+
entries.map((entry) => entry.workflowId),
|
|
181
|
+
Array.from(new Set(entries.map((entry) => entry.eventType)))
|
|
182
|
+
)
|
|
183
|
+
)
|
|
184
|
+
installAutomationActivityKicks(structure)
|
|
185
|
+
// The route verifies the editor's signed test requests (and any signed
|
|
186
|
+
// kick) with the project's cron signing keys, which the deploy fills only
|
|
187
|
+
// where the env declares them.
|
|
188
|
+
declareCronSecretEnv(structure.uidl)
|
|
189
|
+
// The mail automations send is filed under them (and the event's order).
|
|
190
|
+
enableSentEmailAttribution(structure)
|
|
191
|
+
|
|
192
|
+
// The queue is Postgres (spec §5.1): the editor offers automations only on
|
|
193
|
+
// a Postgres data source.
|
|
194
|
+
const { pg } = getDatabaseDriverDependencies('postgresql')
|
|
195
|
+
if (!structure.dependencies.pg) {
|
|
196
|
+
structure.dependencies.pg = pg
|
|
197
|
+
}
|
|
198
|
+
// Vercel's waitUntil keeps a dispatch alive after the response (wait-until.js).
|
|
199
|
+
if (!structure.dependencies[VERCEL_FUNCTIONS_DEPENDENCY.name]) {
|
|
200
|
+
structure.dependencies[VERCEL_FUNCTIONS_DEPENDENCY.name] = VERCEL_FUNCTIONS_DEPENDENCY.version
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ProjectUIDL,
|
|
3
|
+
UIDLAutomationsDataSourceType,
|
|
4
|
+
UIDLAutomationsSettings,
|
|
5
|
+
UIDLWorkflow,
|
|
6
|
+
UIDLWorkflows,
|
|
7
|
+
} from '@teleporthq/teleport-types'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Automations: workflows started by a business event (`event-business-event
|
|
11
|
+
* { eventType }`, spec §5.2). They never run in a browser; the generated app
|
|
12
|
+
* runs them itself, off the request path, from a Postgres-backed queue:
|
|
13
|
+
*
|
|
14
|
+
* - `lib/automations/event-bus.js` records an event and kicks the queue;
|
|
15
|
+
* - `lib/automations/dispatcher.js` is the queue worker;
|
|
16
|
+
* - `lib/automations/registry.js` maps each event type to its handlers;
|
|
17
|
+
* - `lib/automations/handlers/<slug>-<id8>.js`, one per automation;
|
|
18
|
+
* - `lib/automations/hydrate/<entity>.js` reads the record an event is about;
|
|
19
|
+
* - `pages/api/automations/dispatch.js` runs the queue for the app itself;
|
|
20
|
+
* - `lib/automations/due-check.js` wakes it on the site's activity
|
|
21
|
+
* (activity-kicks.ts).
|
|
22
|
+
*
|
|
23
|
+
* All of it is generated only when the project has at least one automation.
|
|
24
|
+
*
|
|
25
|
+
* Event types only generated routes record: `user-signed-up` and
|
|
26
|
+
* `user-deleted` (the signup and account-deletion routes, the signup node),
|
|
27
|
+
* `product-low-stock` (the data API), `waitlist-joined` and
|
|
28
|
+
* `waitlist-spot-opened` (the waitlist routes). The editor's shared event
|
|
29
|
+
* writer (teleport-gui `features/shared/builders/record-event-node.ts`, the
|
|
30
|
+
* one writer a browser can reach) refuses these types, so a row of one of
|
|
31
|
+
* them was written by the generated app itself. The `user` hydrator relies on
|
|
32
|
+
* it for `user-deleted`: the account's row is gone before the route records
|
|
33
|
+
* the event, so the snapshot the route recorded (`payload.user`, naming the
|
|
34
|
+
* event's own `entity_id`) stands in for the record. Any other event whose
|
|
35
|
+
* record is missing is refused ("No such <entity>").
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
export const BUSINESS_EVENT_TRIGGER = 'event-business-event'
|
|
39
|
+
export const WAIT_NODE_TYPE = 'general-wait'
|
|
40
|
+
|
|
41
|
+
export const AUTOMATIONS_PATH = ['lib', 'automations']
|
|
42
|
+
export const AUTOMATION_HANDLERS_PATH = [...AUTOMATIONS_PATH, 'handlers']
|
|
43
|
+
export const AUTOMATION_HYDRATE_PATH = [...AUTOMATIONS_PATH, 'hydrate']
|
|
44
|
+
export const AUTOMATIONS_DISPATCH_ROUTE_PATH = ['pages', 'api', 'automations']
|
|
45
|
+
export const AUTOMATIONS_DISPATCH_URL = '/api/automations/dispatch'
|
|
46
|
+
|
|
47
|
+
/** Every generated file's key in the project structure starts with this. */
|
|
48
|
+
export const AUTOMATIONS_FILE_KEY_PREFIX = 'automations-'
|
|
49
|
+
|
|
50
|
+
/** The queue's limits (spec §5.2). */
|
|
51
|
+
export const AUTOMATION_QUEUE_LIMITS = {
|
|
52
|
+
/** Events claimed, and Waits resumed, per pass. */
|
|
53
|
+
batchSize: 20,
|
|
54
|
+
/** An event is tried at most this many times. */
|
|
55
|
+
maxAttempts: 5,
|
|
56
|
+
/** Older events are left alone. */
|
|
57
|
+
maxAgeDays: 3,
|
|
58
|
+
/**
|
|
59
|
+
* How long the dispatcher waits for one handler. A handler still running
|
|
60
|
+
* then is left running (its delivery stays `running`): it is only taken
|
|
61
|
+
* over once its claim is stale, never while it may still be at work.
|
|
62
|
+
*/
|
|
63
|
+
handlerTimeoutMs: 25000,
|
|
64
|
+
/**
|
|
65
|
+
* A dispatch starts no handler after this long, and hands back the claims
|
|
66
|
+
* it did not start, so one call stays inside a serverless time limit.
|
|
67
|
+
*/
|
|
68
|
+
passDeadlineMs: 50000,
|
|
69
|
+
/** A claim older than this was left by a run that died, and is taken over. */
|
|
70
|
+
staleClaimMinutes: 15,
|
|
71
|
+
/** The dispatch route's time limit on hosts that read it (Vercel). */
|
|
72
|
+
routeMaxDurationSeconds: 60,
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The platform `waitUntil` the bus uses on Vercel (lib/automations/wait-until.js).
|
|
77
|
+
* 2.x is the line that still runs on Node 18.
|
|
78
|
+
*/
|
|
79
|
+
export const VERCEL_FUNCTIONS_DEPENDENCY = { name: '@vercel/functions', version: '^2.2.13' }
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The database the bus opens, from `uidl.automations` (the data source the
|
|
83
|
+
* editor keeps the automation tables in). Automations run only on the
|
|
84
|
+
* TeleportHQ-managed database (v1): the platform fills `TELEPORT_DB_*` for
|
|
85
|
+
* it, and the data API every event writer goes through opens it. Null for
|
|
86
|
+
* anything else: no bus is generated then.
|
|
87
|
+
*/
|
|
88
|
+
export const resolveAutomationsDatabase = (
|
|
89
|
+
settings: UIDLAutomationsSettings | undefined | null
|
|
90
|
+
): UIDLAutomationsDataSourceType | null =>
|
|
91
|
+
settings && settings.dataSourceType === 'teleport' ? 'teleport' : null
|
|
92
|
+
|
|
93
|
+
/** Why a project with automations got no bus (the stub dispatch route answers it). */
|
|
94
|
+
export const AUTOMATIONS_UNAVAILABLE_REASON = 'no TeleportHQ database holds the automation tables'
|
|
95
|
+
|
|
96
|
+
export const isAutomationWorkflow = (workflow: UIDLWorkflow | undefined | null): boolean =>
|
|
97
|
+
!!workflow && !!workflow.trigger && workflow.trigger.type === BUSINESS_EVENT_TRIGGER
|
|
98
|
+
|
|
99
|
+
/** The event an automation reacts to; empty when the trigger names none. */
|
|
100
|
+
export const automationEventType = (workflow: UIDLWorkflow): string => {
|
|
101
|
+
const eventType = workflow.trigger.config ? workflow.trigger.config.eventType : undefined
|
|
102
|
+
return typeof eventType === 'string' ? eventType.trim() : ''
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export const collectAutomationWorkflows = (workflows?: UIDLWorkflows | null): UIDLWorkflow[] =>
|
|
106
|
+
Object.values((workflows && workflows.workflows) || {}).filter(isAutomationWorkflow)
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Whether the project gets the in-app event bus (`lib/automations/event-bus.js`):
|
|
110
|
+
* `generateAutomationFiles` writes it for the automations that name their
|
|
111
|
+
* event. The routes that record or wake business events (signup, account
|
|
112
|
+
* deletion, the data API) carry that code only then, so a project without
|
|
113
|
+
* automations keeps them byte for byte. Takes the project's workflows, or the
|
|
114
|
+
* automations `collectAutomationWorkflows` already found.
|
|
115
|
+
*/
|
|
116
|
+
export const hasAutomationEventBus = (
|
|
117
|
+
workflows?: UIDLWorkflows | UIDLWorkflow[] | null
|
|
118
|
+
): boolean => {
|
|
119
|
+
const automations = Array.isArray(workflows)
|
|
120
|
+
? workflows.filter(isAutomationWorkflow)
|
|
121
|
+
: collectAutomationWorkflows(workflows)
|
|
122
|
+
return automations.some((workflow) => automationEventType(workflow) !== '')
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Whether the generated app has the in-app event bus: an automation that names
|
|
127
|
+
* its event (`hasAutomationEventBus`) and a database the queue runs on
|
|
128
|
+
* (`resolveAutomationsDatabase`). The one gate of every plugin whose routes
|
|
129
|
+
* record or wake business events, so those routes, `utils/app-events.js` and
|
|
130
|
+
* `lib/automations/*` always agree.
|
|
131
|
+
*/
|
|
132
|
+
export const hasAutomationsBus = (uidl: Pick<ProjectUIDL, 'workflows' | 'automations'>): boolean =>
|
|
133
|
+
hasAutomationEventBus(uidl.workflows) && resolveAutomationsDatabase(uidl.automations) !== null
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The envelope key of the record an event type is about — the catalog's
|
|
137
|
+
* `entity` (teleport-gui `packages/workflow-schema/src/constants/business-events.ts`),
|
|
138
|
+
* which this package cannot import. Types are named `<area>-<what happened>`,
|
|
139
|
+
* so the prefix decides, except for the two gift-card events, whose blocks
|
|
140
|
+
* differ. Null for an event without a known record (a plugin's own events):
|
|
141
|
+
* its details come from the event's payload alone.
|
|
142
|
+
*/
|
|
143
|
+
const ENTITY_BY_PREFIX: Array<[string, string]> = [
|
|
144
|
+
['order-', 'order'],
|
|
145
|
+
['subscription-', 'subscription'],
|
|
146
|
+
['booking-', 'booking'],
|
|
147
|
+
['invoice-', 'invoice'],
|
|
148
|
+
['cart-', 'cart'],
|
|
149
|
+
['product-', 'product'],
|
|
150
|
+
['user-', 'user'],
|
|
151
|
+
['form-', 'form'],
|
|
152
|
+
['newsletter-', 'subscriber'],
|
|
153
|
+
['review-', 'review'],
|
|
154
|
+
// The waitlist plugin's events (waitlist-joined, waitlist-spot-opened).
|
|
155
|
+
['waitlist-', 'waitlist'],
|
|
156
|
+
]
|
|
157
|
+
|
|
158
|
+
export const automationEntityOf = (eventType: string): string | null => {
|
|
159
|
+
if (eventType === 'gift-card-issued') {
|
|
160
|
+
return 'giftCards'
|
|
161
|
+
}
|
|
162
|
+
if (eventType === 'gift-card-credited') {
|
|
163
|
+
return 'giftCard'
|
|
164
|
+
}
|
|
165
|
+
const match = ENTITY_BY_PREFIX.find(([prefix]) => eventType.startsWith(prefix))
|
|
166
|
+
return match ? match[1] : null
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* The envelope keys besides `event` and `actor` an event type carries — the
|
|
171
|
+
* top-level blocks of the catalog's details: the entity, plus what some types
|
|
172
|
+
* add (a refund, a parcel, the status it moved from). Null for an event the
|
|
173
|
+
* catalog does not describe (a plugin's own): its payload is kept whole.
|
|
174
|
+
*/
|
|
175
|
+
const EXTRA_ENVELOPE_KEYS: Record<string, string[]> = {
|
|
176
|
+
'order-awaiting-confirmation': ['payment'],
|
|
177
|
+
'order-late-payment': ['payment'],
|
|
178
|
+
'order-duplicate-payment': ['payment'],
|
|
179
|
+
'order-underpaid': ['payment'],
|
|
180
|
+
'order-refunded': ['refund'],
|
|
181
|
+
'order-partially-refunded': ['refund'],
|
|
182
|
+
'order-refund-failed': ['refund'],
|
|
183
|
+
'order-status-changed': ['from', 'to'],
|
|
184
|
+
'order-shipment-created': ['shipment'],
|
|
185
|
+
'order-shipment-updated': ['shipment'],
|
|
186
|
+
'order-shipment-delivered': ['shipment'],
|
|
187
|
+
'order-digital-delivered': ['delivery'],
|
|
188
|
+
'gift-card-issued': ['order'],
|
|
189
|
+
'gift-card-credited': ['order'],
|
|
190
|
+
'booking-moved': ['from'],
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export const automationEnvelopeKeys = (eventType: string): string[] | null => {
|
|
194
|
+
const entity = automationEntityOf(eventType)
|
|
195
|
+
return entity ? [entity, ...(EXTRA_ENVELOPE_KEYS[eventType] || [])] : null
|
|
196
|
+
}
|