zuplo 6.67.32 → 6.68.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/README.md +9 -0
- package/docs/_index.md +44 -0
- package/docs/ai-gateway/apps.mdx +28 -0
- package/docs/ai-gateway/custom-providers.mdx +54 -0
- package/docs/ai-gateway/getting-started.mdx +224 -0
- package/docs/ai-gateway/guardrails.mdx +65 -0
- package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
- package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
- package/docs/ai-gateway/integrations/codex.mdx +78 -0
- package/docs/ai-gateway/integrations/goose.mdx +104 -0
- package/docs/ai-gateway/integrations/langchain.mdx +66 -0
- package/docs/ai-gateway/integrations/openai.mdx +99 -0
- package/docs/ai-gateway/introduction.mdx +85 -0
- package/docs/ai-gateway/managing-apps.mdx +46 -0
- package/docs/ai-gateway/managing-providers.mdx +66 -0
- package/docs/ai-gateway/managing-teams.mdx +63 -0
- package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
- package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
- package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
- package/docs/ai-gateway/providers.mdx +32 -0
- package/docs/ai-gateway/teams.mdx +38 -0
- package/docs/ai-gateway/universal-api.mdx +43 -0
- package/docs/ai-gateway/usage-limits.mdx +89 -0
- package/docs/api-management/introduction.md +127 -0
- package/docs/articles/accounts/audit-logs.mdx +227 -0
- package/docs/articles/accounts/billing.mdx +25 -0
- package/docs/articles/accounts/default-api-key.mdx +30 -0
- package/docs/articles/accounts/delete-account.mdx +36 -0
- package/docs/articles/accounts/enterprise-sso.mdx +116 -0
- package/docs/articles/accounts/managing-account-members.mdx +45 -0
- package/docs/articles/accounts/managing-project-members.mdx +37 -0
- package/docs/articles/accounts/members-and-roles.mdx +21 -0
- package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
- package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
- package/docs/articles/add-api-to-backstage.mdx +216 -0
- package/docs/articles/advanced-path-matching.mdx +139 -0
- package/docs/articles/api-key-administration.mdx +47 -0
- package/docs/articles/api-key-api.mdx +220 -0
- package/docs/articles/api-key-authentication.mdx +195 -0
- package/docs/articles/api-key-buckets.mdx +61 -0
- package/docs/articles/api-key-end-users.mdx +52 -0
- package/docs/articles/api-key-leak-detection.mdx +75 -0
- package/docs/articles/api-key-management.mdx +100 -0
- package/docs/articles/api-key-react-component.mdx +90 -0
- package/docs/articles/api-key-service-limits.mdx +14 -0
- package/docs/articles/archiving-requests-to-storage.mdx +119 -0
- package/docs/articles/branch-based-deployments.mdx +184 -0
- package/docs/articles/bypass-policy-for-testing.mdx +117 -0
- package/docs/articles/check-ip-address.mdx +17 -0
- package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
- package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
- package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
- package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
- package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
- package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
- package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
- package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
- package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
- package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
- package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
- package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
- package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
- package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
- package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
- package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
- package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
- package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
- package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
- package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
- package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
- package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
- package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
- package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
- package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
- package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
- package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
- package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
- package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
- package/docs/articles/composite-policy-reference.mdx +284 -0
- package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
- package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
- package/docs/articles/convert-urls-to-openapi.mdx +62 -0
- package/docs/articles/cors.mdx +447 -0
- package/docs/articles/custom-audit-log-policy.mdx +95 -0
- package/docs/articles/custom-ci-cd-azure.mdx +81 -0
- package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
- package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
- package/docs/articles/custom-ci-cd-github.mdx +99 -0
- package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
- package/docs/articles/custom-ci-cd.mdx +82 -0
- package/docs/articles/custom-code-patterns.md +418 -0
- package/docs/articles/custom-domains.mdx +258 -0
- package/docs/articles/custom-logging-example.mdx +139 -0
- package/docs/articles/ddos-protection.mdx +138 -0
- package/docs/articles/development-options.mdx +49 -0
- package/docs/articles/environment-variables.mdx +134 -0
- package/docs/articles/environments.mdx +143 -0
- package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
- package/docs/articles/github-deployment-testing.mdx +101 -0
- package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
- package/docs/articles/graphql-security.mdx +180 -0
- package/docs/articles/handling-form-data.mdx +61 -0
- package/docs/articles/health-checks.mdx +109 -0
- package/docs/articles/hosting-options.mdx +70 -0
- package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
- package/docs/articles/limits.mdx +98 -0
- package/docs/articles/local-development-debugging.mdx +44 -0
- package/docs/articles/local-development-env-variables.mdx +23 -0
- package/docs/articles/local-development-installing-packages.mdx +23 -0
- package/docs/articles/local-development-routes-designer.mdx +27 -0
- package/docs/articles/local-development-services.mdx +40 -0
- package/docs/articles/local-development-troubleshooting.mdx +56 -0
- package/docs/articles/local-development.mdx +81 -0
- package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
- package/docs/articles/log-plugin-datadog.mdx +84 -0
- package/docs/articles/log-plugin-dynatrace.mdx +75 -0
- package/docs/articles/log-plugin-gcp.mdx +75 -0
- package/docs/articles/log-plugin-loki.mdx +136 -0
- package/docs/articles/log-plugin-new-relic.mdx +84 -0
- package/docs/articles/log-plugin-splunk.mdx +104 -0
- package/docs/articles/log-plugin-sumo.mdx +73 -0
- package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
- package/docs/articles/log-request-response-data.mdx +398 -0
- package/docs/articles/logging.mdx +115 -0
- package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
- package/docs/articles/mcp-quickstart.mdx +135 -0
- package/docs/articles/metrics-plugins.mdx +371 -0
- package/docs/articles/migrate-from-apigee.md +408 -0
- package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
- package/docs/articles/migrate-from-azure-apim.md +292 -0
- package/docs/articles/migrate-from-kong.md +300 -0
- package/docs/articles/migration-overview.md +81 -0
- package/docs/articles/monetization/api-access.mdx +69 -0
- package/docs/articles/monetization/billing-models.md +520 -0
- package/docs/articles/monetization/developer-portal.md +167 -0
- package/docs/articles/monetization/features.mdx +98 -0
- package/docs/articles/monetization/index.mdx +113 -0
- package/docs/articles/monetization/meters.mdx +135 -0
- package/docs/articles/monetization/monetization-policy.md +314 -0
- package/docs/articles/monetization/plan-examples.mdx +366 -0
- package/docs/articles/monetization/plans.mdx +266 -0
- package/docs/articles/monetization/pricing-models.mdx +225 -0
- package/docs/articles/monetization/private-plans.md +154 -0
- package/docs/articles/monetization/quickstart.md +355 -0
- package/docs/articles/monetization/rate-cards.mdx +171 -0
- package/docs/articles/monetization/stripe-integration.md +195 -0
- package/docs/articles/monetization/subscription-lifecycle.md +298 -0
- package/docs/articles/monetization/tax-collection.md +166 -0
- package/docs/articles/monetization/troubleshooting.md +272 -0
- package/docs/articles/monetization-custom.mdx +71 -0
- package/docs/articles/monetization-integrations.mdx +104 -0
- package/docs/articles/monitoring-your-gateway.mdx +53 -0
- package/docs/articles/monorepo-deployment.mdx +350 -0
- package/docs/articles/multiple-auth-policies.mdx +81 -0
- package/docs/articles/non-standard-ports.mdx +30 -0
- package/docs/articles/oauth-authentication.mdx +54 -0
- package/docs/articles/openapi-server-urls.mdx +60 -0
- package/docs/articles/openapi.mdx +130 -0
- package/docs/articles/opentelemetry.mdx +250 -0
- package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
- package/docs/articles/performance-testing.mdx +304 -0
- package/docs/articles/plugin-akamai-api-security.mdx +76 -0
- package/docs/articles/plugin-azure-blob.mdx +73 -0
- package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
- package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
- package/docs/articles/policies.mdx +33 -0
- package/docs/articles/rename-or-move-project.mdx +39 -0
- package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
- package/docs/articles/routing.mdx +193 -0
- package/docs/articles/s3-signed-url-uploads.mdx +521 -0
- package/docs/articles/secure-tunnel.mdx +84 -0
- package/docs/articles/securing-backend-mtls.mdx +268 -0
- package/docs/articles/securing-your-backend.mdx +148 -0
- package/docs/articles/security.mdx +105 -0
- package/docs/articles/sharing-code-across-projects.mdx +412 -0
- package/docs/articles/source-control-setup-azure.mdx +13 -0
- package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
- package/docs/articles/source-control-setup-github.mdx +172 -0
- package/docs/articles/source-control-setup-gitlab.mdx +12 -0
- package/docs/articles/source-control.mdx +80 -0
- package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
- package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
- package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
- package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
- package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
- package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
- package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
- package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
- package/docs/articles/support.mdx +144 -0
- package/docs/articles/terraform.mdx +114 -0
- package/docs/articles/testing-graphql.mdx +34 -0
- package/docs/articles/testing.mdx +522 -0
- package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
- package/docs/articles/troubleshooting.md +302 -0
- package/docs/articles/tsconfig.mdx +105 -0
- package/docs/articles/tunnel-setup.mdx +195 -0
- package/docs/articles/tunnel-troubleshooting.mdx +50 -0
- package/docs/articles/update-zup-in-github-action.mdx +110 -0
- package/docs/articles/use-openapi-extension-data.mdx +79 -0
- package/docs/articles/users/multifactor-authentication.mdx +64 -0
- package/docs/articles/users/profile.mdx +13 -0
- package/docs/articles/versioning-on-zuplo.mdx +89 -0
- package/docs/articles/waf-ddos-akamai.md +133 -0
- package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
- package/docs/articles/waf-ddos-fastly.mdx +251 -0
- package/docs/articles/waf-ddos.mdx +140 -0
- package/docs/articles/zuplo-waf.mdx +156 -0
- package/docs/ask.mdx +3 -0
- package/docs/cli/authentication.mdx +56 -0
- package/docs/cli/connectivity.mdx +38 -0
- package/docs/cli/create-zuplo-api.mdx +80 -0
- package/docs/cli/delete.mdx +79 -0
- package/docs/cli/deploy.mdx +156 -0
- package/docs/cli/deploy.partial.mdx +46 -0
- package/docs/cli/dev.mdx +115 -0
- package/docs/cli/docs.mdx +66 -0
- package/docs/cli/editor.mdx +50 -0
- package/docs/cli/global-options.mdx +19 -0
- package/docs/cli/init.mdx +74 -0
- package/docs/cli/link.mdx +74 -0
- package/docs/cli/list.mdx +55 -0
- package/docs/cli/mtls-certificate-create.mdx +94 -0
- package/docs/cli/mtls-certificate-delete.mdx +55 -0
- package/docs/cli/mtls-certificate-describe.mdx +55 -0
- package/docs/cli/mtls-certificate-disable.mdx +55 -0
- package/docs/cli/mtls-certificate-list.mdx +47 -0
- package/docs/cli/mtls-certificate-update.mdx +72 -0
- package/docs/cli/openapi-convert.mdx +111 -0
- package/docs/cli/openapi-merge.mdx +138 -0
- package/docs/cli/openapi-merge.partial.mdx +29 -0
- package/docs/cli/openapi-overlay.mdx +123 -0
- package/docs/cli/overview.mdx +78 -0
- package/docs/cli/project-create.mdx +43 -0
- package/docs/cli/source-migrate.mdx +18 -0
- package/docs/cli/source-upgrade.mdx +41 -0
- package/docs/cli/test.mdx +70 -0
- package/docs/cli/test.partial.mdx +7 -0
- package/docs/cli/tunnel-create.mdx +53 -0
- package/docs/cli/tunnel-create.partial.mdx +9 -0
- package/docs/cli/tunnel-delete.mdx +35 -0
- package/docs/cli/tunnel-delete.partial.mdx +9 -0
- package/docs/cli/tunnel-describe.mdx +45 -0
- package/docs/cli/tunnel-describe.partial.mdx +5 -0
- package/docs/cli/tunnel-list.mdx +35 -0
- package/docs/cli/tunnel-list.partial.mdx +9 -0
- package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
- package/docs/cli/tunnel-rotate-token.mdx +39 -0
- package/docs/cli/tunnel-services-describe.mdx +45 -0
- package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
- package/docs/cli/tunnel-services-update.mdx +48 -0
- package/docs/cli/variable-create.mdx +91 -0
- package/docs/cli/variable-create.partial.mdx +5 -0
- package/docs/cli/variable-update.mdx +75 -0
- package/docs/cli/variable-update.partial.mdx +5 -0
- package/docs/concepts/api-keys.md +146 -0
- package/docs/concepts/authentication.mdx +109 -0
- package/docs/concepts/how-zuplo-works.mdx +120 -0
- package/docs/concepts/project-structure.mdx +174 -0
- package/docs/concepts/rate-limiting.md +246 -0
- package/docs/concepts/request-lifecycle.mdx +56 -0
- package/docs/concepts/source-control-and-deployment.mdx +229 -0
- package/docs/conferences/conference-prize-terms.mdx +80 -0
- package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
- package/docs/dedicated/akamai/architecture.mdx +280 -0
- package/docs/dedicated/akamai/caching.mdx +212 -0
- package/docs/dedicated/akamai/cdn.mdx +156 -0
- package/docs/dedicated/architecture.mdx +208 -0
- package/docs/dedicated/custom-domains.mdx +31 -0
- package/docs/dedicated/federated-gateways.mdx +80 -0
- package/docs/dedicated/networking.mdx +69 -0
- package/docs/dedicated/overview.mdx +80 -0
- package/docs/dedicated/source-control.mdx +63 -0
- package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
- package/docs/dev-portal/introduction.mdx +65 -0
- package/docs/dev-portal/local-development.mdx +72 -0
- package/docs/dev-portal/migration.mdx +526 -0
- package/docs/dev-portal/node-modules.mdx +45 -0
- package/docs/dev-portal/updating.mdx +28 -0
- package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
- package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
- package/docs/dev-portal/zudoku/components/button.mdx +132 -0
- package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
- package/docs/dev-portal/zudoku/components/card.mdx +104 -0
- package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
- package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
- package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
- package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
- package/docs/dev-portal/zudoku/components/head.mdx +199 -0
- package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
- package/docs/dev-portal/zudoku/components/input.mdx +96 -0
- package/docs/dev-portal/zudoku/components/label.mdx +86 -0
- package/docs/dev-portal/zudoku/components/link.mdx +242 -0
- package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
- package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
- package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
- package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
- package/docs/dev-portal/zudoku/components/select.mdx +176 -0
- package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
- package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
- package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
- package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
- package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
- package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
- package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
- package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
- package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
- package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
- package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
- package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
- package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
- package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
- package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
- package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
- package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
- package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
- package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
- package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
- package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
- package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
- package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
- package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
- package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
- package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
- package/docs/dev-portal/zudoku/configuration/search.md +169 -0
- package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
- package/docs/dev-portal/zudoku/configuration/site.md +124 -0
- package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
- package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
- package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
- package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
- package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
- package/docs/dev-portal/zudoku/extending/events.md +124 -0
- package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
- package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
- package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
- package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
- package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
- package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
- package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
- package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
- package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
- package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
- package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
- package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
- package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
- package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
- package/docs/dev-portal/zudoku/plugins.md +5 -0
- package/docs/dev-portal/zudoku/writing.mdx +72 -0
- package/docs/errors/bad-request.mdx +39 -0
- package/docs/errors/build-error.mdx +45 -0
- package/docs/errors/fatal-project-error.mdx +39 -0
- package/docs/errors/gateway-timeout.mdx +33 -0
- package/docs/errors/get-head-body-error.mdx +41 -0
- package/docs/errors/main-mod-error.mdx +40 -0
- package/docs/errors/no-project-set.mdx +41 -0
- package/docs/errors/not-found.mdx +43 -0
- package/docs/errors/rate-limit-exceeded.mdx +31 -0
- package/docs/errors/schema-validation-failed.mdx +51 -0
- package/docs/errors/system-configuration-error.mdx +44 -0
- package/docs/errors/unauthorized.mdx +50 -0
- package/docs/errors/unknown-error.mdx +42 -0
- package/docs/errors.mdx +14 -0
- package/docs/guides/canary-routing-for-employees.mdx +385 -0
- package/docs/guides/geolocation-backend-routing.mdx +404 -0
- package/docs/guides/modify-openapi-paths.mdx +371 -0
- package/docs/guides/openapi-overlays.mdx +492 -0
- package/docs/guides/overview.mdx +12 -0
- package/docs/guides/user-based-backend-routing.mdx +437 -0
- package/docs/handlers/aws-lambda.mdx +201 -0
- package/docs/handlers/custom-handler.mdx +112 -0
- package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
- package/docs/handlers/mcp-server.mdx +730 -0
- package/docs/handlers/openapi.mdx +78 -0
- package/docs/handlers/redirect.mdx +115 -0
- package/docs/handlers/system-handlers.mdx +41 -0
- package/docs/handlers/url-forward.mdx +204 -0
- package/docs/handlers/url-rewrite.mdx +224 -0
- package/docs/handlers/websocket-handler.mdx +154 -0
- package/docs/home.mdx +6 -0
- package/docs/managed-edge/overview.md +78 -0
- package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
- package/docs/mcp-server/custom-tools.mdx +487 -0
- package/docs/mcp-server/graphql.mdx +241 -0
- package/docs/mcp-server/introduction.mdx +122 -0
- package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
- package/docs/mcp-server/prompts.mdx +283 -0
- package/docs/mcp-server/resources.mdx +288 -0
- package/docs/mcp-server/testing.mdx +53 -0
- package/docs/mcp-server/tools.mdx +306 -0
- package/docs/policies/_index.md +92 -0
- package/docs/policies/ab-test-inbound/intro.md +8 -0
- package/docs/policies/ab-test-inbound/policy.ts +14 -0
- package/docs/policies/ab-test-inbound/schema.json +27 -0
- package/docs/policies/ab-test-outbound/intro.md +8 -0
- package/docs/policies/ab-test-outbound/policy.ts +26 -0
- package/docs/policies/ab-test-outbound/schema.json +27 -0
- package/docs/policies/acl-policy-inbound/intro.md +5 -0
- package/docs/policies/acl-policy-inbound/policy.ts +32 -0
- package/docs/policies/acl-policy-inbound/schema.json +52 -0
- package/docs/policies/akamai-ai-firewall/schema.json +98 -0
- package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
- package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
- package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
- package/docs/policies/api-key-inbound/doc.md +77 -0
- package/docs/policies/api-key-inbound/intro.md +30 -0
- package/docs/policies/api-key-inbound/schema.json +84 -0
- package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
- package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
- package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
- package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
- package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
- package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
- package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
- package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
- package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
- package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
- package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
- package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
- package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
- package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
- package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
- package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
- package/docs/policies/audit-log-inbound/doc.md +78 -0
- package/docs/policies/audit-log-inbound/intro.md +10 -0
- package/docs/policies/audit-log-inbound/schema.json +81 -0
- package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
- package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
- package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/authzen-inbound/doc.md +24 -0
- package/docs/policies/authzen-inbound/intro.md +31 -0
- package/docs/policies/authzen-inbound/schema.json +126 -0
- package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
- package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
- package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
- package/docs/policies/basic-auth-inbound/intro.md +9 -0
- package/docs/policies/basic-auth-inbound/schema.json +99 -0
- package/docs/policies/bot-detection-inbound/intro.md +4 -0
- package/docs/policies/bot-detection-inbound/schema.json +56 -0
- package/docs/policies/brownout-inbound/doc.md +55 -0
- package/docs/policies/brownout-inbound/intro.md +12 -0
- package/docs/policies/brownout-inbound/schema.json +115 -0
- package/docs/policies/caching-inbound/doc.md +209 -0
- package/docs/policies/caching-inbound/intro.md +23 -0
- package/docs/policies/caching-inbound/schema.json +98 -0
- package/docs/policies/change-method-inbound/schema.json +56 -0
- package/docs/policies/clear-headers-inbound/schema.json +59 -0
- package/docs/policies/clear-headers-outbound/schema.json +59 -0
- package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
- package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
- package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
- package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
- package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
- package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
- package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
- package/docs/policies/composite-inbound/doc.md +69 -0
- package/docs/policies/composite-inbound/intro.md +15 -0
- package/docs/policies/composite-inbound/schema.json +59 -0
- package/docs/policies/composite-outbound/intro.md +6 -0
- package/docs/policies/composite-outbound/schema.json +59 -0
- package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
- package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
- package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
- package/docs/policies/custom-code-inbound/doc.md +267 -0
- package/docs/policies/custom-code-inbound/intro.md +2 -0
- package/docs/policies/custom-code-inbound/schema.json +48 -0
- package/docs/policies/custom-code-outbound/doc.md +235 -0
- package/docs/policies/custom-code-outbound/intro.md +2 -0
- package/docs/policies/custom-code-outbound/schema.json +43 -0
- package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
- package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
- package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
- package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
- package/docs/policies/geo-filter-inbound/doc.md +33 -0
- package/docs/policies/geo-filter-inbound/schema.json +108 -0
- package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
- package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
- package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
- package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
- package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
- package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
- package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
- package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
- package/docs/policies/hmac-auth-inbound/doc.md +30 -0
- package/docs/policies/hmac-auth-inbound/intro.md +10 -0
- package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
- package/docs/policies/hmac-auth-inbound/schema.json +53 -0
- package/docs/policies/http-deprecation-outbound/doc.md +73 -0
- package/docs/policies/http-deprecation-outbound/schema.json +83 -0
- package/docs/policies/ip-restriction-inbound/intro.md +8 -0
- package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
- package/docs/policies/ip-restriction-inbound/schema.json +58 -0
- package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
- package/docs/policies/ldap-auth-inbound/schema.json +56 -0
- package/docs/policies/mock-api-inbound/schema.json +72 -0
- package/docs/policies/moesif-inbound/doc.md +44 -0
- package/docs/policies/moesif-inbound/intro.md +6 -0
- package/docs/policies/moesif-inbound/schema.json +68 -0
- package/docs/policies/monetization-inbound/doc.md +87 -0
- package/docs/policies/monetization-inbound/intro.md +6 -0
- package/docs/policies/monetization-inbound/schema.json +102 -0
- package/docs/policies/mtls-auth-inbound/intro.md +6 -0
- package/docs/policies/mtls-auth-inbound/schema.json +68 -0
- package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
- package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
- package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
- package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
- package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
- package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
- package/docs/policies/openfga-authz-inbound/doc.md +207 -0
- package/docs/policies/openfga-authz-inbound/intro.md +17 -0
- package/docs/policies/openfga-authz-inbound/schema.json +191 -0
- package/docs/policies/openmeter-inbound/doc.md +163 -0
- package/docs/policies/openmeter-inbound/intro.md +18 -0
- package/docs/policies/openmeter-inbound/schema.json +183 -0
- package/docs/policies/prompt-injection-outbound/doc.md +106 -0
- package/docs/policies/prompt-injection-outbound/intro.md +4 -0
- package/docs/policies/prompt-injection-outbound/schema.json +74 -0
- package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
- package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
- package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
- package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
- package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
- package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
- package/docs/policies/quota-inbound/doc.md +235 -0
- package/docs/policies/quota-inbound/intro.md +7 -0
- package/docs/policies/quota-inbound/schema.json +133 -0
- package/docs/policies/rate-limit-inbound/doc.md +78 -0
- package/docs/policies/rate-limit-inbound/intro.md +30 -0
- package/docs/policies/rate-limit-inbound/schema.json +134 -0
- package/docs/policies/rbac-policy-inbound/intro.md +3 -0
- package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
- package/docs/policies/rbac-policy-inbound/schema.json +52 -0
- package/docs/policies/readme-metrics-inbound/doc.md +1 -0
- package/docs/policies/readme-metrics-inbound/intro.md +3 -0
- package/docs/policies/readme-metrics-inbound/schema.json +84 -0
- package/docs/policies/remove-headers-inbound/schema.json +59 -0
- package/docs/policies/remove-headers-outbound/schema.json +59 -0
- package/docs/policies/remove-query-params-inbound/schema.json +59 -0
- package/docs/policies/replace-string-outbound/schema.json +69 -0
- package/docs/policies/request-size-limit-inbound/schema.json +60 -0
- package/docs/policies/request-validation-inbound/doc.md +72 -0
- package/docs/policies/request-validation-inbound/intro.md +24 -0
- package/docs/policies/request-validation-inbound/schema.json +98 -0
- package/docs/policies/require-origin-inbound/intro.md +12 -0
- package/docs/policies/require-origin-inbound/schema.json +65 -0
- package/docs/policies/secret-masking-outbound/doc.md +41 -0
- package/docs/policies/secret-masking-outbound/intro.md +13 -0
- package/docs/policies/secret-masking-outbound/schema.json +65 -0
- package/docs/policies/semantic-cache-inbound/doc.md +63 -0
- package/docs/policies/semantic-cache-inbound/intro.md +4 -0
- package/docs/policies/semantic-cache-inbound/schema.json +179 -0
- package/docs/policies/set-body-inbound/intro.md +7 -0
- package/docs/policies/set-body-inbound/schema.json +56 -0
- package/docs/policies/set-headers-inbound/doc.md +41 -0
- package/docs/policies/set-headers-inbound/intro.md +2 -0
- package/docs/policies/set-headers-inbound/schema.json +83 -0
- package/docs/policies/set-headers-outbound/schema.json +83 -0
- package/docs/policies/set-query-params-inbound/schema.json +83 -0
- package/docs/policies/set-status-outbound/schema.json +62 -0
- package/docs/policies/sleep-inbound/schema.json +56 -0
- package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
- package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
- package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
- package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
- package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
- package/docs/policies/transform-body-inbound/intro.md +8 -0
- package/docs/policies/transform-body-inbound/policy.ts +16 -0
- package/docs/policies/transform-body-inbound/schema.json +27 -0
- package/docs/policies/transform-body-outbound/intro.md +8 -0
- package/docs/policies/transform-body-outbound/policy.ts +19 -0
- package/docs/policies/transform-body-outbound/schema.json +27 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
- package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
- package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
- package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
- package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
- package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
- package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
- package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
- package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
- package/docs/policies/xml-to-json-outbound/doc.md +71 -0
- package/docs/policies/xml-to-json-outbound/intro.md +4 -0
- package/docs/policies/xml-to-json-outbound/schema.json +117 -0
- package/docs/programmable-api/audit-log.mdx +74 -0
- package/docs/programmable-api/background-dispatcher.mdx +124 -0
- package/docs/programmable-api/background-loader.mdx +104 -0
- package/docs/programmable-api/cache.mdx +186 -0
- package/docs/programmable-api/compatibility-dates.mdx +201 -0
- package/docs/programmable-api/console-logging.mdx +48 -0
- package/docs/programmable-api/context-data.mdx +127 -0
- package/docs/programmable-api/custom-cors-policy.mdx +64 -0
- package/docs/programmable-api/environment.mdx +328 -0
- package/docs/programmable-api/hooks.mdx +569 -0
- package/docs/programmable-api/http-problems.mdx +385 -0
- package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
- package/docs/programmable-api/logger.mdx +223 -0
- package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
- package/docs/programmable-api/node-modules.mdx +67 -0
- package/docs/programmable-api/not-found-handler.mdx +47 -0
- package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
- package/docs/programmable-api/overview.mdx +213 -0
- package/docs/programmable-api/problem-response-formatter.mdx +183 -0
- package/docs/programmable-api/request-user.mdx +289 -0
- package/docs/programmable-api/reusing-code.mdx +26 -0
- package/docs/programmable-api/route-raw.mdx +55 -0
- package/docs/programmable-api/runtime-behaviors.mdx +25 -0
- package/docs/programmable-api/runtime-errors.mdx +246 -0
- package/docs/programmable-api/runtime-extensions.mdx +340 -0
- package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
- package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
- package/docs/programmable-api/web-crypto-apis.mdx +219 -0
- package/docs/programmable-api/web-standard-apis.mdx +109 -0
- package/docs/programmable-api/zone-cache.mdx +131 -0
- package/docs/programmable-api/zp-body-removed.mdx +32 -0
- package/docs/programmable-api/zuplo-context.mdx +414 -0
- package/docs/programmable-api/zuplo-id-token.mdx +90 -0
- package/docs/programmable-api/zuplo-json.mdx +91 -0
- package/docs/programmable-api/zuplo-request.mdx +200 -0
- package/docs/sample-apis.mdx +78 -0
- package/docs/self-hosted/overview.md +60 -0
- package/package.json +6 -5
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Troubleshooting Slow API Response Times
|
|
3
|
+
sidebar_label: Troubleshooting Slow Responses
|
|
4
|
+
description:
|
|
5
|
+
Diagnose and fix slow API response times through your Zuplo gateway. Covers
|
|
6
|
+
backend latency, cold starts, DNS, policy overhead, and geographic routing.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
When API responses through your Zuplo gateway are slower than expected, a
|
|
10
|
+
systematic approach helps you identify the root cause quickly. This guide walks
|
|
11
|
+
you through diagnosing latency issues — whether the source is the gateway, your
|
|
12
|
+
backend, the network, or something else entirely.
|
|
13
|
+
|
|
14
|
+
## Understanding API Gateway Latency
|
|
15
|
+
|
|
16
|
+
Every API gateway adds some processing overhead to requests. For Zuplo, this
|
|
17
|
+
overhead is minimal:
|
|
18
|
+
|
|
19
|
+
- **Base latency**: Approximately 20–30ms with no policies enabled
|
|
20
|
+
- **Per policy**: Most policies add 1–5ms each
|
|
21
|
+
- **Complex policies**: Authentication, rate limiting, or custom code that makes
|
|
22
|
+
external calls can add 5–15ms
|
|
23
|
+
|
|
24
|
+
Zuplo runs at the edge across 300+ data centers worldwide, so requests are
|
|
25
|
+
processed close to the caller. In many cases, edge deployment actually _reduces_
|
|
26
|
+
total latency compared to routing all traffic to a single-region backend.
|
|
27
|
+
|
|
28
|
+
If you're seeing response times significantly higher than your backend's
|
|
29
|
+
response time plus the expected gateway overhead, something else is contributing
|
|
30
|
+
to the latency. The sections below help you identify what.
|
|
31
|
+
|
|
32
|
+
## Diagnostic Checklist
|
|
33
|
+
|
|
34
|
+
Work through these steps in order. Each one helps narrow down the source of the
|
|
35
|
+
slowness.
|
|
36
|
+
|
|
37
|
+
### 1. Measure Your Backend Directly
|
|
38
|
+
|
|
39
|
+
Before investigating the gateway, confirm your backend's baseline response time
|
|
40
|
+
by calling it directly (bypassing Zuplo):
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
curl -o /dev/null -s -w "Total time: %{time_total}s\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\n" https://your-backend.example.com/endpoint
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Record the total time and time-to-first-byte (TTFB). The gateway cannot respond
|
|
47
|
+
faster than the backend — if your backend takes 2 seconds, the response through
|
|
48
|
+
Zuplo takes at least 2 seconds plus gateway overhead.
|
|
49
|
+
|
|
50
|
+
### 2. Measure the Same Request Through Zuplo
|
|
51
|
+
|
|
52
|
+
Run the same curl command against your Zuplo endpoint:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
curl -o /dev/null -s -w "Total time: %{time_total}s\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\n" -H "Authorization: Bearer YOUR_TOKEN" https://your-api.zuplo.app/endpoint
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Compare the two results. If the difference is within 20–50ms, the gateway is
|
|
59
|
+
performing normally. If the difference is hundreds of milliseconds or more,
|
|
60
|
+
continue with the steps below.
|
|
61
|
+
|
|
62
|
+
### 3. Check Whether the Slowness Is Consistent
|
|
63
|
+
|
|
64
|
+
Run the request through Zuplo multiple times:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
for i in {1..10}; do
|
|
68
|
+
curl -o /dev/null -s -w "Request $i: %{time_total}s\n" -H "Authorization: Bearer YOUR_TOKEN" https://your-api.zuplo.app/endpoint
|
|
69
|
+
done
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Look at the pattern:
|
|
73
|
+
|
|
74
|
+
- **Only the first request is slow**: This likely indicates a
|
|
75
|
+
[cold start](#cold-starts).
|
|
76
|
+
- **Every request is slow**: The issue is probably your backend, network path,
|
|
77
|
+
or policy configuration.
|
|
78
|
+
- **Intermittent slowness**: This could be DNS resolution, backend variability,
|
|
79
|
+
or geographic routing differences.
|
|
80
|
+
|
|
81
|
+
### 4. Test from Multiple Locations
|
|
82
|
+
|
|
83
|
+
Your latency experience depends on where requests originate. A request from the
|
|
84
|
+
same continent as your backend has a very different network path than one from
|
|
85
|
+
across the globe. Use tools like
|
|
86
|
+
[curl from different machines](https://www.whatsmydns.net/) or distributed
|
|
87
|
+
testing services to confirm whether the slowness is location-specific.
|
|
88
|
+
|
|
89
|
+
## Common Causes and Solutions
|
|
90
|
+
|
|
91
|
+
### Backend Response Time
|
|
92
|
+
|
|
93
|
+
The most common cause of slow responses through any API gateway is a slow
|
|
94
|
+
backend. The gateway adds its processing time _on top of_ whatever the backend
|
|
95
|
+
takes.
|
|
96
|
+
|
|
97
|
+
**How to identify**: Compare direct backend response times with gateway response
|
|
98
|
+
times. If both are slow, the issue is the backend.
|
|
99
|
+
|
|
100
|
+
**Solution**: Optimize your backend endpoints. Consider using Zuplo's
|
|
101
|
+
[Caching policy](../policies/caching-inbound.mdx) to cache responses for
|
|
102
|
+
endpoints that don't change frequently:
|
|
103
|
+
|
|
104
|
+
```json title="config/policies.json"
|
|
105
|
+
{
|
|
106
|
+
"name": "my-caching-inbound-policy",
|
|
107
|
+
"policyType": "caching-inbound",
|
|
108
|
+
"handler": {
|
|
109
|
+
"export": "CachingInboundPolicy",
|
|
110
|
+
"module": "$import(@zuplo/runtime)",
|
|
111
|
+
"options": {
|
|
112
|
+
"expirationSecondsTtl": 300,
|
|
113
|
+
"statusCodes": [200]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
For more fine-grained caching in custom code, use
|
|
120
|
+
[ZoneCache](../programmable-api/zone-cache.mdx) to cache frequently accessed
|
|
121
|
+
data like configuration or session information with low latency.
|
|
122
|
+
|
|
123
|
+
### Geographic Distance Between Edge and Backend
|
|
124
|
+
|
|
125
|
+
Zuplo processes requests at the edge location closest to the caller. If your
|
|
126
|
+
backend is in a single region (for example, `us-east-1`), requests from users in
|
|
127
|
+
Asia or Europe still need to travel to that region after reaching the nearest
|
|
128
|
+
edge node.
|
|
129
|
+
|
|
130
|
+
**How to identify**: Test from locations near your backend versus locations far
|
|
131
|
+
from it. If latency scales with geographic distance, this is the cause.
|
|
132
|
+
|
|
133
|
+
**Solutions**:
|
|
134
|
+
|
|
135
|
+
- Deploy your backend in multiple regions
|
|
136
|
+
- Use Zuplo's [Caching policy](../policies/caching-inbound.mdx) to serve cached
|
|
137
|
+
responses from the edge without reaching the backend
|
|
138
|
+
- For internal or single-cloud traffic, consider
|
|
139
|
+
[Managed Dedicated](../dedicated/overview.mdx) deployment, which runs Zuplo
|
|
140
|
+
within your cloud provider's network for reduced latency by keeping traffic
|
|
141
|
+
within your infrastructure
|
|
142
|
+
|
|
143
|
+
### DNS Resolution Delays
|
|
144
|
+
|
|
145
|
+
Slow DNS resolution can add hundreds of milliseconds to request times,
|
|
146
|
+
especially on the first request or when DNS records have short TTLs.
|
|
147
|
+
|
|
148
|
+
**How to identify**: In the curl output, check the `time_namelookup` value. If
|
|
149
|
+
it's over 100ms, DNS resolution is contributing to the latency.
|
|
150
|
+
|
|
151
|
+
**Solution**: Ensure your backend's DNS records have reasonable TTL values (at
|
|
152
|
+
least 60 seconds). If you're using a custom domain with Zuplo, verify the DNS
|
|
153
|
+
configuration follows the [custom domains setup guide](./custom-domains.mdx).
|
|
154
|
+
|
|
155
|
+
### Large Response Bodies
|
|
156
|
+
|
|
157
|
+
Large response payloads take longer to transfer and serialize. A 10MB JSON
|
|
158
|
+
response takes significantly longer than a 1KB response, regardless of the
|
|
159
|
+
gateway.
|
|
160
|
+
|
|
161
|
+
**How to identify**: Check the response body size of slow endpoints. If
|
|
162
|
+
responses are consistently large (over 1MB), this may be a factor.
|
|
163
|
+
|
|
164
|
+
**Solutions**:
|
|
165
|
+
|
|
166
|
+
- Implement pagination in your API to return smaller response payloads
|
|
167
|
+
- Use compression to reduce the size of response payloads over the network
|
|
168
|
+
- Return only the fields the caller needs
|
|
169
|
+
|
|
170
|
+
### Policy Execution Overhead
|
|
171
|
+
|
|
172
|
+
While individual policies add minimal latency, a long chain of policies — or
|
|
173
|
+
policies that make external API calls — can accumulate overhead.
|
|
174
|
+
|
|
175
|
+
**How to identify**: Temporarily remove or disable policies one at a time and
|
|
176
|
+
measure the response time after each change. If removing a specific policy
|
|
177
|
+
significantly improves performance, that policy is the bottleneck.
|
|
178
|
+
|
|
179
|
+
**Policy performance tiers**:
|
|
180
|
+
|
|
181
|
+
- **Low impact (0–3ms)**: Header manipulation, simple validation, basic routing,
|
|
182
|
+
response caching (cache hits)
|
|
183
|
+
- **Medium impact (3–10ms)**: API key authentication, rate limiting, request
|
|
184
|
+
logging, simple transformations
|
|
185
|
+
- **Higher impact (10–20ms+)**: Large payload transformations, custom code with
|
|
186
|
+
external API calls
|
|
187
|
+
|
|
188
|
+
:::tip
|
|
189
|
+
|
|
190
|
+
Order your policies from least to most expensive, and use early-exit conditions
|
|
191
|
+
where possible. For example, validate API keys before performing complex
|
|
192
|
+
transformations. This way, unauthorized requests are rejected quickly without
|
|
193
|
+
incurring the cost of downstream policies.
|
|
194
|
+
|
|
195
|
+
:::
|
|
196
|
+
|
|
197
|
+
### Cold Starts
|
|
198
|
+
|
|
199
|
+
:::note
|
|
200
|
+
|
|
201
|
+
Cold starts apply only to Zuplo's managed edge (serverless) deployment. If
|
|
202
|
+
you're running Zuplo in a [Managed Dedicated](../dedicated/overview.mdx)
|
|
203
|
+
environment, cold starts don't apply.
|
|
204
|
+
|
|
205
|
+
:::
|
|
206
|
+
|
|
207
|
+
On Zuplo's managed edge platform, the first request after a period of inactivity
|
|
208
|
+
may experience a "cold start" — an additional 100–200ms of latency while a new
|
|
209
|
+
worker initializes. After the first request, subsequent requests are served from
|
|
210
|
+
warm workers with normal latency.
|
|
211
|
+
|
|
212
|
+
**How to identify**: Only the first request (or first few requests) after a
|
|
213
|
+
period of inactivity is slow. Subsequent requests are fast.
|
|
214
|
+
|
|
215
|
+
**Solutions**:
|
|
216
|
+
|
|
217
|
+
- **Keep-warm requests**: Send periodic synthetic requests to your API during
|
|
218
|
+
low-traffic periods to prevent workers from going cold. A simple scheduled
|
|
219
|
+
health check every few minutes is usually sufficient.
|
|
220
|
+
- **Health check endpoints**: Set up a
|
|
221
|
+
[health check handler](./health-checks.mdx) and configure an external
|
|
222
|
+
monitoring service to ping it regularly. This keeps your gateway warm while
|
|
223
|
+
also monitoring availability.
|
|
224
|
+
|
|
225
|
+
## Using Zuplo Observability Tools
|
|
226
|
+
|
|
227
|
+
### Analytics Dashboard
|
|
228
|
+
|
|
229
|
+
Zuplo's analytics dashboard provides at-a-glance visibility into your API's
|
|
230
|
+
performance. Use it to:
|
|
231
|
+
|
|
232
|
+
- Identify slow endpoints by reviewing request latency data
|
|
233
|
+
- Filter by route, API key, or time period to isolate patterns
|
|
234
|
+
- Spot error rate spikes that may correlate with latency issues
|
|
235
|
+
- Track request volume trends that may indicate capacity-related slowness
|
|
236
|
+
|
|
237
|
+
### Logging Integrations
|
|
238
|
+
|
|
239
|
+
For deeper analysis, configure one of Zuplo's
|
|
240
|
+
[logging integrations](./logging.mdx) to send request data to your preferred
|
|
241
|
+
observability platform. Supported integrations include Datadog, New Relic,
|
|
242
|
+
Splunk, AWS CloudWatch, Google Cloud Logging, and others.
|
|
243
|
+
|
|
244
|
+
Each log entry includes the request ID (`zp-rid` header), which you can use to
|
|
245
|
+
trace a specific request through the system. You can also measure and log
|
|
246
|
+
execution time within custom policies to identify performance bottlenecks:
|
|
247
|
+
|
|
248
|
+
```ts
|
|
249
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
250
|
+
|
|
251
|
+
export default async function policy(
|
|
252
|
+
request: ZuploRequest,
|
|
253
|
+
context: ZuploContext,
|
|
254
|
+
) {
|
|
255
|
+
const start = Date.now();
|
|
256
|
+
|
|
257
|
+
// ... policy logic ...
|
|
258
|
+
|
|
259
|
+
const duration = Date.now() - start;
|
|
260
|
+
context.log.info(`Policy executed in ${duration}ms`);
|
|
261
|
+
|
|
262
|
+
return request;
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Proactive Monitoring
|
|
267
|
+
|
|
268
|
+
Set up [proactive monitoring](./monitoring-your-gateway.mdx) with health check
|
|
269
|
+
endpoints for each backend and network configuration. Use an external monitoring
|
|
270
|
+
service like Checkly, API Context, or Datadog Synthetics to continuously monitor
|
|
271
|
+
response times and alert on degradation.
|
|
272
|
+
|
|
273
|
+
## When to Contact Support
|
|
274
|
+
|
|
275
|
+
If you've worked through the steps above and can't identify the source of
|
|
276
|
+
latency, [contact Zuplo support](./support.mdx) with the following information:
|
|
277
|
+
|
|
278
|
+
- **Your Zuplo project name and environment** (production, preview, etc.)
|
|
279
|
+
- **The specific endpoint(s)** experiencing slow response times
|
|
280
|
+
- **Curl output** showing both direct backend timing and timing through Zuplo
|
|
281
|
+
(use the curl commands from the [diagnostic checklist](#diagnostic-checklist)
|
|
282
|
+
above)
|
|
283
|
+
- **Whether the issue is consistent or intermittent**, and if intermittent, any
|
|
284
|
+
patterns you've noticed (time of day, specific geographic regions, etc.)
|
|
285
|
+
- **Your backend's geographic location** (cloud provider and region)
|
|
286
|
+
- **The policies configured** on the affected route(s)
|
|
287
|
+
|
|
288
|
+
This information helps the support team investigate efficiently and avoid
|
|
289
|
+
back-and-forth diagnostic questions.
|
|
290
|
+
|
|
291
|
+
## Related Resources
|
|
292
|
+
|
|
293
|
+
- [Performance Testing Your API Gateway](./performance-testing.mdx) — How to
|
|
294
|
+
benchmark and compare gateway performance accurately
|
|
295
|
+
- [Proactive Monitoring](./monitoring-your-gateway.mdx) — Setting up health
|
|
296
|
+
checks and monitoring for your gateway
|
|
297
|
+
- [ZoneCache](../programmable-api/zone-cache.mdx) — Low-latency caching API for
|
|
298
|
+
frequently accessed data
|
|
299
|
+
- [Caching Policy](../policies/caching-inbound.mdx) — Built-in response caching
|
|
300
|
+
to reduce backend load and improve response times
|
|
301
|
+
- [Logging](./logging.mdx) — Configuring log integrations for observability
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Troubleshooting
|
|
3
|
+
sidebar_label: Troubleshooting
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
This guide covers common errors you may encounter when building, deploying, and
|
|
7
|
+
running your Zuplo API gateway, along with steps to diagnose and fix them.
|
|
8
|
+
|
|
9
|
+
## Build errors
|
|
10
|
+
|
|
11
|
+
Build errors prevent your project from compiling during deployment. The gateway
|
|
12
|
+
returns a `BUILD_ERROR` when this happens.
|
|
13
|
+
|
|
14
|
+
### TypeScript compilation errors
|
|
15
|
+
|
|
16
|
+
Type mismatches, missing type definitions, or invalid syntax prevent the build
|
|
17
|
+
from completing. Check the deployment logs for the file name, line number, and
|
|
18
|
+
error description.
|
|
19
|
+
|
|
20
|
+
**Fix:** Run the build locally before deploying to catch these errors early:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx zuplo build
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
You can also add TypeScript to your project and run type checking directly:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install -D typescript
|
|
30
|
+
npx tsc --noEmit
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This catches type errors before you deploy and integrates with most editors for
|
|
34
|
+
inline feedback.
|
|
35
|
+
|
|
36
|
+
### Module resolution failures
|
|
37
|
+
|
|
38
|
+
Imports that do not start with `./` or `../` and have no matching `paths`
|
|
39
|
+
mapping in `tsconfig.json` fail to resolve.
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
// This fails if there is no paths mapping
|
|
43
|
+
import { myFunction } from "modules/my-module";
|
|
44
|
+
|
|
45
|
+
// Use a relative path instead
|
|
46
|
+
import { myFunction } from "./modules/my-module";
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Fix:** Use relative paths for local modules, or configure
|
|
50
|
+
`compilerOptions.paths` in your `tsconfig.json`. See
|
|
51
|
+
[TypeScript Configuration](./tsconfig.mdx) for details.
|
|
52
|
+
|
|
53
|
+
### Missing or incompatible packages
|
|
54
|
+
|
|
55
|
+
Zuplo does not run Node.js and does not run `npm install` during deployment.
|
|
56
|
+
Only npm packages that don't use native code or Node.js-specific APIs (like the
|
|
57
|
+
filesystem or `child_process`) are compatible. Packages must be installed
|
|
58
|
+
locally and their bundled output checked into source control.
|
|
59
|
+
|
|
60
|
+
**Fix:** Install the package locally, verify it works with `zuplo dev`, and
|
|
61
|
+
ensure the compiled output is committed to your repository. See
|
|
62
|
+
[Node Modules](../programmable-api/node-modules.mdx) for details on package
|
|
63
|
+
compatibility and limitations.
|
|
64
|
+
|
|
65
|
+
### Invalid route configuration
|
|
66
|
+
|
|
67
|
+
The `routes.oas.json` file contains syntax errors or references handlers and
|
|
68
|
+
policies that do not exist.
|
|
69
|
+
|
|
70
|
+
**Fix:** Validate that all `handler.module` and `handler.export` values in your
|
|
71
|
+
route configuration match actual modules and exported functions. Check for typos
|
|
72
|
+
in policy names referenced in the `policies.inbound` and `policies.outbound`
|
|
73
|
+
arrays.
|
|
74
|
+
|
|
75
|
+
## Deployment errors
|
|
76
|
+
|
|
77
|
+
### FATAL_PROJECT_ERROR
|
|
78
|
+
|
|
79
|
+
The gateway returns this error when the project has a critical configuration
|
|
80
|
+
issue that prevents it from starting.
|
|
81
|
+
|
|
82
|
+
**Fix:** Check the deployment logs in the Zuplo Portal for the specific error
|
|
83
|
+
message. Common causes include invalid `zuplo.runtime.ts` configuration or
|
|
84
|
+
broken runtime extensions.
|
|
85
|
+
|
|
86
|
+
### MAIN_MOD_ERROR
|
|
87
|
+
|
|
88
|
+
This error indicates that the main module failed to load at startup.
|
|
89
|
+
|
|
90
|
+
**Fix:** Verify that your `zuplo.runtime.ts` file (if present) exports valid
|
|
91
|
+
configuration and that all plugins are properly initialized. Check for runtime
|
|
92
|
+
errors in module-level code that runs during startup.
|
|
93
|
+
|
|
94
|
+
### NO_PROJECT_SET
|
|
95
|
+
|
|
96
|
+
This error typically occurs in local development when trying to run a project
|
|
97
|
+
that cannot build or is invalid.
|
|
98
|
+
|
|
99
|
+
**Fix:** Verify that your project structure is correct and that the project
|
|
100
|
+
builds successfully. See
|
|
101
|
+
[Local Development Troubleshooting](./local-development-troubleshooting.mdx) for
|
|
102
|
+
more details.
|
|
103
|
+
|
|
104
|
+
## Runtime errors
|
|
105
|
+
|
|
106
|
+
### Policy errors
|
|
107
|
+
|
|
108
|
+
When a policy throws an unhandled error, the gateway returns a `500` response.
|
|
109
|
+
Use `RuntimeError` or `ConfigurationError` from `@zuplo/runtime` to return
|
|
110
|
+
structured error responses instead.
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
import { RuntimeError, ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
114
|
+
|
|
115
|
+
export default async function policy(
|
|
116
|
+
request: ZuploRequest,
|
|
117
|
+
context: ZuploContext,
|
|
118
|
+
) {
|
|
119
|
+
const apiKey = request.headers.get("x-api-key");
|
|
120
|
+
if (!apiKey) {
|
|
121
|
+
throw new RuntimeError("Missing API key", { status: 401 });
|
|
122
|
+
}
|
|
123
|
+
return request;
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
See [Runtime Errors](../programmable-api/runtime-errors.mdx) for the full API.
|
|
128
|
+
|
|
129
|
+
### Handler errors
|
|
130
|
+
|
|
131
|
+
If a request handler throws an unhandled exception, the gateway returns a
|
|
132
|
+
generic error response. Wrap handler logic in try/catch blocks and return
|
|
133
|
+
meaningful error responses.
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
137
|
+
|
|
138
|
+
export default async function handler(
|
|
139
|
+
request: ZuploRequest,
|
|
140
|
+
context: ZuploContext,
|
|
141
|
+
) {
|
|
142
|
+
try {
|
|
143
|
+
const response = await fetch("https://api.example.com/data");
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
context.log.error("Upstream request failed", {
|
|
146
|
+
status: response.status,
|
|
147
|
+
});
|
|
148
|
+
return new Response("Bad Gateway", { status: 502 });
|
|
149
|
+
}
|
|
150
|
+
return response;
|
|
151
|
+
} catch (err) {
|
|
152
|
+
context.log.error("Handler error", { error: String(err) });
|
|
153
|
+
return new Response("Internal Server Error", { status: 500 });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Timeout errors
|
|
159
|
+
|
|
160
|
+
Requests to upstream services can time out if the backend is slow or
|
|
161
|
+
unresponsive. The gateway enforces platform-level timeouts on outbound requests.
|
|
162
|
+
|
|
163
|
+
**Fix:** Check that your upstream service is healthy and responding within
|
|
164
|
+
acceptable timeframes. Add timeout handling in custom handlers using
|
|
165
|
+
`AbortSignal.timeout()`:
|
|
166
|
+
|
|
167
|
+
```ts
|
|
168
|
+
const response = await fetch("https://api.example.com/data", {
|
|
169
|
+
signal: AbortSignal.timeout(5000), // 5 second timeout
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Debugging with logs
|
|
174
|
+
|
|
175
|
+
### Portal live logs
|
|
176
|
+
|
|
177
|
+
The Zuplo Portal provides real-time log viewing for deployed environments.
|
|
178
|
+
Navigate to your project in the portal and open the logs tab to see live request
|
|
179
|
+
logs and any messages logged with `context.log`.
|
|
180
|
+
|
|
181
|
+
### Using context.log
|
|
182
|
+
|
|
183
|
+
The `context.log` object is available in all handlers and policies. It supports
|
|
184
|
+
`debug`, `info`, `warn`, and `error` levels:
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
context.log.debug("Detailed debug information");
|
|
188
|
+
context.log.info("Request received", { path: request.url });
|
|
189
|
+
context.log.warn("Deprecated endpoint accessed");
|
|
190
|
+
context.log.error("Failed to process request", { error: "Invalid input" });
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
You can also attach custom properties to all subsequent log entries for a
|
|
194
|
+
request using `context.log.setLogProperties`:
|
|
195
|
+
|
|
196
|
+
```ts
|
|
197
|
+
context.log.setLogProperties({ customerId: "cust_123" });
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Log shipping
|
|
201
|
+
|
|
202
|
+
For production observability, ship logs to an external provider by configuring a
|
|
203
|
+
log plugin in your `zuplo.runtime.ts` file. Supported providers include AWS
|
|
204
|
+
CloudWatch, Datadog, Dynatrace, Google Cloud Logging, Loki, New Relic, Splunk,
|
|
205
|
+
and Sumo Logic.
|
|
206
|
+
|
|
207
|
+
See [Logging](./logging.mdx) for setup instructions.
|
|
208
|
+
|
|
209
|
+
## Request tracing with zp-rid
|
|
210
|
+
|
|
211
|
+
Every request processed by Zuplo is assigned a unique request ID. This ID is
|
|
212
|
+
returned in the `zp-rid` response header and is available in code as
|
|
213
|
+
`context.requestId`.
|
|
214
|
+
|
|
215
|
+
To trace a failed request:
|
|
216
|
+
|
|
217
|
+
1. Copy the `zp-rid` value from the response headers.
|
|
218
|
+
2. Search your log provider (Datadog, Loki, Splunk, etc.) for that `requestId`
|
|
219
|
+
value.
|
|
220
|
+
3. All log entries for that request share the same `requestId`, so you can see
|
|
221
|
+
the full request lifecycle.
|
|
222
|
+
|
|
223
|
+
You can also log the request ID explicitly for correlation:
|
|
224
|
+
|
|
225
|
+
```ts
|
|
226
|
+
context.log.info(`Processing request ${context.requestId}`);
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Default log fields include `requestId`, `environment`, `environmentType`,
|
|
230
|
+
`environmentStage`, `buildId`, and `rayId`, which you can use to filter and
|
|
231
|
+
correlate across requests.
|
|
232
|
+
|
|
233
|
+
## Common gotchas
|
|
234
|
+
|
|
235
|
+
### Environment variables not set
|
|
236
|
+
|
|
237
|
+
Environment variables are only applied on new deployments. If you change a
|
|
238
|
+
variable value, you must redeploy the environment for the change to take effect.
|
|
239
|
+
|
|
240
|
+
Variables return `undefined` if not set. Always validate required variables
|
|
241
|
+
early:
|
|
242
|
+
|
|
243
|
+
```ts
|
|
244
|
+
import { environment, ConfigurationError } from "@zuplo/runtime";
|
|
245
|
+
|
|
246
|
+
const apiKey = environment.API_KEY;
|
|
247
|
+
if (!apiKey) {
|
|
248
|
+
throw new ConfigurationError("API_KEY environment variable is not set");
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
See [Configuring Environment Variables](./environment-variables.mdx) for more
|
|
253
|
+
details.
|
|
254
|
+
|
|
255
|
+
### CORS misconfiguration
|
|
256
|
+
|
|
257
|
+
Common CORS issues include:
|
|
258
|
+
|
|
259
|
+
- **No CORS headers in response** - Verify the route has a `corsPolicy` set (not
|
|
260
|
+
`none`) and that the request `Origin` matches one of the `allowedOrigins`.
|
|
261
|
+
- **Preflight returns 404** - Ensure the CORS policy is not set to `none` and
|
|
262
|
+
the request method matches a method configured on the route.
|
|
263
|
+
- **Wildcard subdomain not matching** - The `*.` pattern only matches a single
|
|
264
|
+
subdomain level. `https://*.example.com` does not match
|
|
265
|
+
`https://v2.api.example.com` or `https://example.com`.
|
|
266
|
+
- **Credentials not working** - Set `allowCredentials` to `true` in the CORS
|
|
267
|
+
policy.
|
|
268
|
+
|
|
269
|
+
See [Configuring CORS](./cors.mdx) for the full configuration reference.
|
|
270
|
+
|
|
271
|
+
### Rate limit surprises
|
|
272
|
+
|
|
273
|
+
Rate limiting policies apply per-environment. Preview and development
|
|
274
|
+
environments have their own rate limit counters separate from production.
|
|
275
|
+
|
|
276
|
+
If requests are unexpectedly rate limited, check:
|
|
277
|
+
|
|
278
|
+
- The rate limit policy configuration for the correct `requestsAllowed` and
|
|
279
|
+
`timeWindowMinutes` values.
|
|
280
|
+
- Whether a per-user or per-IP rate limit is in use and the identifier is
|
|
281
|
+
resolving correctly.
|
|
282
|
+
- Whether multiple rate limit policies are applied to the same route.
|
|
283
|
+
|
|
284
|
+
See [Rate Limiting](../policies/rate-limit-inbound.mdx) for configuration
|
|
285
|
+
details.
|
|
286
|
+
|
|
287
|
+
### GET or HEAD requests with a body
|
|
288
|
+
|
|
289
|
+
Sending a body with a `GET` or `HEAD` request results in a `GET_HEAD_BODY_ERROR`
|
|
290
|
+
response. Some HTTP clients attach a body by default.
|
|
291
|
+
|
|
292
|
+
**Fix:** Remove the request body for `GET` and `HEAD` requests, or change the
|
|
293
|
+
HTTP method to `POST` or `PUT` if a body is required.
|
|
294
|
+
|
|
295
|
+
## Getting help
|
|
296
|
+
|
|
297
|
+
If you cannot resolve an issue using this guide:
|
|
298
|
+
|
|
299
|
+
- Check the [Zuplo Errors](../errors.mdx) reference for detailed error
|
|
300
|
+
descriptions.
|
|
301
|
+
- Reach out to support@zuplo.com or join the
|
|
302
|
+
[Zuplo Discord server](https://discord.gg/8QbEjr2MgZ).
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: TypeScript Configuration (tsconfig.json)
|
|
3
|
+
sidebar_label: TypeScript Config
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo projects use TypeScript for custom code. At the root of every project is a
|
|
7
|
+
`tsconfig.json` file that specifies the configuration for the TypeScript
|
|
8
|
+
compiler. This file is used by the TypeScript compiler to compile the TypeScript
|
|
9
|
+
code into JavaScript.
|
|
10
|
+
|
|
11
|
+
This file is automatically generated by Zuplo and shouldn't be modified. If you
|
|
12
|
+
do modify the file, you will receive build warnings indicating the settings that
|
|
13
|
+
have been changed.
|
|
14
|
+
|
|
15
|
+
When developing in the Zuplo Portal or running the `zuplo dev` command locally,
|
|
16
|
+
the build will automatically fix this file for you. If you were using
|
|
17
|
+
unsupported settings, the modifications to this file may cause the build to
|
|
18
|
+
fail. If this happens, we recommend that you fix your code instead of reverting
|
|
19
|
+
the changes to the `tsconfig.json` file.
|
|
20
|
+
|
|
21
|
+
The recommended `tsconfig.json` file is shown below.
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"include": ["modules/**/*", ".zuplo/**/*", "tests/**/*"],
|
|
26
|
+
"exclude": ["./node_modules", "./dist"],
|
|
27
|
+
"compilerOptions": {
|
|
28
|
+
"module": "ESNext",
|
|
29
|
+
"target": "ES2022",
|
|
30
|
+
"lib": ["ESNext", "WebWorker", "Webworker.Iterable"],
|
|
31
|
+
"preserveConstEnums": true,
|
|
32
|
+
"moduleResolution": "Bundler",
|
|
33
|
+
"useUnknownInCatchVariables": false,
|
|
34
|
+
"forceConsistentCasingInFileNames": true,
|
|
35
|
+
"importHelpers": true,
|
|
36
|
+
"removeComments": true,
|
|
37
|
+
"esModuleInterop": true,
|
|
38
|
+
"noEmit": true,
|
|
39
|
+
"strictNullChecks": true,
|
|
40
|
+
"experimentalDecorators": true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Updating the tsconfig.json File
|
|
46
|
+
|
|
47
|
+
The `tsconfig.json` file isn't shown in the Zuplo Portal. If you need to update
|
|
48
|
+
it you can do so connecting your project to
|
|
49
|
+
[Source Control](./source-control.mdx) and editing the file in your source
|
|
50
|
+
control provider or locally.
|
|
51
|
+
|
|
52
|
+
## Troubleshooting
|
|
53
|
+
|
|
54
|
+
This section contains common issues that you may encounter if you have used
|
|
55
|
+
unsupported settings in the `tsconfig.json` file and are migrating to the
|
|
56
|
+
recommended configuration.
|
|
57
|
+
|
|
58
|
+
### Build Warning: This project's tsconfig.json wasn't set to the recommended settings. Custom settings may cause build issues.
|
|
59
|
+
|
|
60
|
+

|
|
61
|
+
|
|
62
|
+
This warning is shown when the `tsconfig.json` file isn't set to the recommended
|
|
63
|
+
settings. If you see this warning, but your build is successful, then you aren't
|
|
64
|
+
required to do anything. However, we still encourage you to update your
|
|
65
|
+
`tsconfig.json` file to the recommended settings. This will ensure that your
|
|
66
|
+
build continues to work in the future and that you don't encounter any issues.
|
|
67
|
+
|
|
68
|
+
:::info{title="Note"}
|
|
69
|
+
|
|
70
|
+
Depending on when your project was created, you might see this warning even if
|
|
71
|
+
you never edited the `tsconfig.json` file. Older project templates used various
|
|
72
|
+
different configurations in the tsconfig.json. This warning is just telling you
|
|
73
|
+
that your settings are different from the **current** recommended settings.
|
|
74
|
+
|
|
75
|
+
:::
|
|
76
|
+
|
|
77
|
+
### Build Error: Couldn't resolve "modules/my-module"
|
|
78
|
+
|
|
79
|
+
If you have a module that isn't being resolved and the module doesn't start with
|
|
80
|
+
a path indicator like `./` or `../`, you either need to change the import to use
|
|
81
|
+
the path indicator or add a `paths` setting to your `tsconfig.json` file.
|
|
82
|
+
|
|
83
|
+
For example, if you have the following import:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { myFunction } from "modules/my-module";
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
You can either change the import to:
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import { myFunction } from "./modules/my-module";
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Or add the `baseUrl` and `paths` setting to your `tsconfig.json` file:
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"compilerOptions": {
|
|
100
|
+
"paths": {
|
|
101
|
+
"modules/*": ["./modules/*"]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|