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,414 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ZuploContext
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The `ZuploContext` object provides information about the current request and
|
|
6
|
+
runtime environment. It's passed as the second parameter to request handlers and
|
|
7
|
+
policies.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
11
|
+
|
|
12
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
13
|
+
// Access context properties and methods
|
|
14
|
+
context.log.info(`Processing request ${context.requestId}`);
|
|
15
|
+
return new Response("Hello World");
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Properties
|
|
20
|
+
|
|
21
|
+
### `contextId`
|
|
22
|
+
|
|
23
|
+
A unique identifier for the current execution context. This is different from
|
|
24
|
+
`requestId` and is useful for correlating multiple operations within the same
|
|
25
|
+
execution.
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
const executionId = context.contextId;
|
|
29
|
+
context.log.info(`Execution context: ${executionId}`);
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### `custom`
|
|
33
|
+
|
|
34
|
+
A mutable object that can be used to store custom data during request
|
|
35
|
+
processing. This is useful for passing data between policies and handlers.
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// In a policy
|
|
39
|
+
context.custom.userId = "user-123";
|
|
40
|
+
context.custom.permissions = ["read", "write"];
|
|
41
|
+
context.custom.startTime = Date.now();
|
|
42
|
+
|
|
43
|
+
// In a handler
|
|
44
|
+
const userId = context.custom.userId;
|
|
45
|
+
const permissions = context.custom.permissions;
|
|
46
|
+
const elapsed = Date.now() - context.custom.startTime;
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### `incomingRequestProperties`
|
|
50
|
+
|
|
51
|
+
Information about the incoming request such as geolocation data. This is a
|
|
52
|
+
read-only object with the following properties:
|
|
53
|
+
|
|
54
|
+
- `asn` - ASN of the incoming request, for example, 395747.
|
|
55
|
+
- `asOrganization` - The organization which owns the ASN of the incoming
|
|
56
|
+
request, for example, Google Cloud.
|
|
57
|
+
- `city` - City of the incoming request, for example, "Austin".
|
|
58
|
+
- `continent` - Continent of the incoming request, for example, "NA".
|
|
59
|
+
- `country` - The
|
|
60
|
+
[two-letter country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) in
|
|
61
|
+
the request.
|
|
62
|
+
- `latitude` - Latitude of the incoming request, for example, "30.27130".
|
|
63
|
+
- `longitude` - Longitude of the incoming request, for example, "-97.74260".
|
|
64
|
+
- `colo` - The three-letter
|
|
65
|
+
[IATA airport code](https://en.wikipedia.org/wiki/IATA_airport_code) of the
|
|
66
|
+
data center that the request hit, for example, "DFW".
|
|
67
|
+
- `postalCode` - Postal code of the incoming request, for example, "78701".
|
|
68
|
+
- `httpProtocol` - The HTTP protocol of the incoming request.
|
|
69
|
+
- `metroCode` - Metro code (DMA) of the incoming request, for example, "635".
|
|
70
|
+
- `region` - If known, the
|
|
71
|
+
[ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) name for the first
|
|
72
|
+
level region associated with the IP address of the incoming request, for
|
|
73
|
+
example, "Texas".
|
|
74
|
+
- `regionCode` - If known, the
|
|
75
|
+
[ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) code for the
|
|
76
|
+
first-level region associated with the IP address of the incoming request, for
|
|
77
|
+
example, "TX".
|
|
78
|
+
- `timezone` - Timezone of the incoming request, for example, "America/Chicago".
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
const geo = context.incomingRequestProperties;
|
|
82
|
+
context.log.info({
|
|
83
|
+
city: geo.city,
|
|
84
|
+
country: geo.country,
|
|
85
|
+
coordinates: `${geo.latitude},${geo.longitude}`,
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### `log`
|
|
90
|
+
|
|
91
|
+
A logger instance for debugging and monitoring. Logs appear in your log tail in
|
|
92
|
+
the portal and in your integrated log solution (for example Datadog).
|
|
93
|
+
Pre-production environments are typically set to **Info** log level, while
|
|
94
|
+
production is set to **Error**.
|
|
95
|
+
|
|
96
|
+
:::tip
|
|
97
|
+
|
|
98
|
+
As an alternative to using the `log` property, you can also use `console.log`,
|
|
99
|
+
`console.error`, etc. to log messages. See the
|
|
100
|
+
[documentation](./console-logging.mdx) for more details.
|
|
101
|
+
|
|
102
|
+
:::
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
context.log.debug({ some: "debug-info" });
|
|
106
|
+
context.log.info("info level stuff");
|
|
107
|
+
context.log.warn(["a", "warning"]);
|
|
108
|
+
context.log.error({ Oh: "my!" });
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### `parentContext`
|
|
112
|
+
|
|
113
|
+
Reference to the parent context when using `invokeRoute`. This property is
|
|
114
|
+
`undefined` for the initial request context. This is useful for detecting
|
|
115
|
+
sub-requests and accessing parent context data.
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
if (context.parentContext) {
|
|
119
|
+
context.log.info("This is a sub-request");
|
|
120
|
+
const parentRequestId = context.parentContext.requestId;
|
|
121
|
+
context.log.info(`Parent request: ${parentRequestId}`);
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### `requestId`
|
|
126
|
+
|
|
127
|
+
A UUID for every request. This is used in logging and can be handy to tie events
|
|
128
|
+
together. The `requestId` is automatically logged with every use of the logger.
|
|
129
|
+
The request ID is also included in the `zp-rid` header of the responses from
|
|
130
|
+
your API for diagnostic and tracing purposes.
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
context.log.info(`Processing request ${context.requestId}`);
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### `route`
|
|
137
|
+
|
|
138
|
+
A read-only pointer to the configuration for the matched route. Includes the
|
|
139
|
+
label, path, methods supported, name of the version, and names of policies. This
|
|
140
|
+
type is immutable - the routing table can't be updated at runtime.
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
const routePath = context.route.path;
|
|
144
|
+
const methods = context.route.methods;
|
|
145
|
+
const version = context.route.version;
|
|
146
|
+
|
|
147
|
+
context.log.info({
|
|
148
|
+
route: routePath,
|
|
149
|
+
methods: methods.join(", "),
|
|
150
|
+
version: version,
|
|
151
|
+
});
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Methods
|
|
155
|
+
|
|
156
|
+
### `addResponseSendingHook`
|
|
157
|
+
|
|
158
|
+
Adds a hook that executes before a response is sent to the client. This hook can
|
|
159
|
+
modify the response before it's sent. Multiple hooks can be added and they
|
|
160
|
+
execute in the order they were added.
|
|
161
|
+
|
|
162
|
+
```ts
|
|
163
|
+
addResponseSendingHook(
|
|
164
|
+
hook: (response: Response, request: Request, context: ZuploContext) => Response | Promise<Response>
|
|
165
|
+
): void
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
See [Request/Response Hooks](./hooks.mdx#hook-onresponsesending) for detailed
|
|
169
|
+
examples and usage patterns.
|
|
170
|
+
|
|
171
|
+
### `addResponseSendingFinalHook`
|
|
172
|
+
|
|
173
|
+
Adds a hook that executes after all other response processing is complete but
|
|
174
|
+
before the response is sent. Unlike `addResponseSendingHook`, this hook can't
|
|
175
|
+
modify the response - it's for monitoring and logging purposes only.
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
addResponseSendingFinalHook(
|
|
179
|
+
hook: (response: Response, request: Request, context: ZuploContext) => void | Promise<void>
|
|
180
|
+
): void
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
See [Request/Response Hooks](./hooks.mdx#hook-onresponsesendingfinal) for
|
|
184
|
+
detailed examples and usage patterns.
|
|
185
|
+
|
|
186
|
+
### `invokeInboundPolicy`
|
|
187
|
+
|
|
188
|
+
Programmatically executes an inbound policy from your policy library. This is
|
|
189
|
+
useful for conditionally executing policies based on request attributes.
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
193
|
+
|
|
194
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
195
|
+
// Conditionally apply rate limiting
|
|
196
|
+
if (request.user.data.isFreeUser) {
|
|
197
|
+
const result = await context.invokeInboundPolicy(
|
|
198
|
+
"rate-limit-policy",
|
|
199
|
+
request,
|
|
200
|
+
);
|
|
201
|
+
if (result instanceof Response) {
|
|
202
|
+
return result; // Rate limit exceeded
|
|
203
|
+
}
|
|
204
|
+
request = result; // Use the new request object
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Continue processing
|
|
208
|
+
return fetch(request);
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Important Notes:**
|
|
213
|
+
|
|
214
|
+
- The method returns either a `Request` or `Response` object
|
|
215
|
+
- A `Response` indicates the policy wants to short-circuit and stop processing
|
|
216
|
+
- A `Request` is typically a new request object created by the policy
|
|
217
|
+
- The original request becomes locked after invoking a policy
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
const result = await context.invokeInboundPolicy("my-policy", request);
|
|
221
|
+
|
|
222
|
+
if (result instanceof Response) {
|
|
223
|
+
// Policy terminated the request chain
|
|
224
|
+
context.log.warn(`Policy returned status: ${result.status}`);
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Continue with the new request object
|
|
229
|
+
return fetch(result);
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### `invokeOutboundPolicy`
|
|
233
|
+
|
|
234
|
+
Programmatically executes an outbound policy from your policy library. Outbound
|
|
235
|
+
policies process responses before they're sent to the client.
|
|
236
|
+
|
|
237
|
+
```ts
|
|
238
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
239
|
+
// Make the upstream request
|
|
240
|
+
const response = await fetch(request);
|
|
241
|
+
|
|
242
|
+
// Conditionally apply response transformation
|
|
243
|
+
if (response.headers.get("content-type")?.includes("application/json")) {
|
|
244
|
+
return context.invokeOutboundPolicy(
|
|
245
|
+
"json-transform-policy",
|
|
246
|
+
response,
|
|
247
|
+
request,
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Apply caching policy for successful responses
|
|
252
|
+
if (response.ok) {
|
|
253
|
+
return context.invokeOutboundPolicy("cache-policy", response, request);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return response;
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### `invokeRoute`
|
|
261
|
+
|
|
262
|
+
Invokes another route within the same API gateway. This enables internal routing
|
|
263
|
+
and composition of multiple routes. The invoked route runs with a new context
|
|
264
|
+
that has `parentContext` set to the current context.
|
|
265
|
+
|
|
266
|
+
```ts
|
|
267
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
268
|
+
// First, validate the request using an internal route
|
|
269
|
+
const validationResponse = await context.invokeRoute("/internal/validate", {
|
|
270
|
+
method: "POST",
|
|
271
|
+
body: JSON.stringify({
|
|
272
|
+
userId: request.user?.sub,
|
|
273
|
+
resource: request.params.resourceId,
|
|
274
|
+
action: "read",
|
|
275
|
+
}),
|
|
276
|
+
headers: {
|
|
277
|
+
"Content-Type": "application/json",
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
if (!validationResponse.ok) {
|
|
282
|
+
return new Response("Access denied", { status: 403 });
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Then fetch user preferences from another internal route
|
|
286
|
+
const prefsResponse = await context.invokeRoute(
|
|
287
|
+
`/internal/users/${request.user?.sub}/preferences`,
|
|
288
|
+
);
|
|
289
|
+
const preferences = await prefsResponse.json();
|
|
290
|
+
|
|
291
|
+
// Continue with main processing using the preferences
|
|
292
|
+
const response = await fetch(request);
|
|
293
|
+
|
|
294
|
+
// Apply preferences to response
|
|
295
|
+
if (preferences.format === "xml") {
|
|
296
|
+
return context.invokeOutboundPolicy("json-to-xml", response, request);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return response;
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### `waitUntil`
|
|
304
|
+
|
|
305
|
+
Notifies the runtime to keep the process alive until the provided promise
|
|
306
|
+
resolves. This is essential for asynchronous work that continues after sending a
|
|
307
|
+
response, such as logging, analytics, or cleanup tasks.
|
|
308
|
+
|
|
309
|
+
```ts
|
|
310
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
311
|
+
const startTime = Date.now();
|
|
312
|
+
const response = await fetch(request);
|
|
313
|
+
|
|
314
|
+
// Asynchronous work that continues after response
|
|
315
|
+
const asyncWork = async () => {
|
|
316
|
+
try {
|
|
317
|
+
// Log to external service
|
|
318
|
+
await fetch("https://analytics.example.com/api/track", {
|
|
319
|
+
method: "POST",
|
|
320
|
+
headers: {
|
|
321
|
+
"Content-Type": "application/json",
|
|
322
|
+
Authorization: `Bearer ${context.secrets.ANALYTICS_API_KEY}`,
|
|
323
|
+
},
|
|
324
|
+
body: JSON.stringify({
|
|
325
|
+
event: "api_call",
|
|
326
|
+
properties: {
|
|
327
|
+
path: request.url,
|
|
328
|
+
method: request.method,
|
|
329
|
+
status: response.status,
|
|
330
|
+
duration: Date.now() - startTime,
|
|
331
|
+
country: context.incomingRequestProperties.country,
|
|
332
|
+
userId: request.user?.sub,
|
|
333
|
+
},
|
|
334
|
+
timestamp: new Date().toISOString(),
|
|
335
|
+
}),
|
|
336
|
+
});
|
|
337
|
+
} catch (error) {
|
|
338
|
+
context.log.error("Failed to send analytics", error);
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
// Tell runtime to wait for async work to complete
|
|
343
|
+
context.waitUntil(asyncWork());
|
|
344
|
+
|
|
345
|
+
return response;
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## Common Patterns
|
|
350
|
+
|
|
351
|
+
### Request Timing
|
|
352
|
+
|
|
353
|
+
```ts
|
|
354
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
355
|
+
// Store start time
|
|
356
|
+
context.custom.startTime = Date.now();
|
|
357
|
+
|
|
358
|
+
// Add response hook to measure duration
|
|
359
|
+
context.addResponseSendingHook(async (response) => {
|
|
360
|
+
const duration = Date.now() - context.custom.startTime;
|
|
361
|
+
response.headers.set("X-Response-Time", `${duration}ms`);
|
|
362
|
+
return response;
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
return fetch(request);
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
For more hook examples, see [Request/Response Hooks](./hooks.mdx).
|
|
370
|
+
|
|
371
|
+
### Conditional Policy Execution
|
|
372
|
+
|
|
373
|
+
```ts
|
|
374
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
375
|
+
// Apply different policies based on user type
|
|
376
|
+
if (request.user?.type === "internal") {
|
|
377
|
+
// Skip rate limiting for internal users
|
|
378
|
+
return fetch(request);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Apply rate limiting for external users
|
|
382
|
+
const rateLimitResult = await context.invokeInboundPolicy(
|
|
383
|
+
"rate-limit",
|
|
384
|
+
request,
|
|
385
|
+
);
|
|
386
|
+
if (rateLimitResult instanceof Response) {
|
|
387
|
+
return rateLimitResult;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// Apply additional security for untrusted users
|
|
391
|
+
if (!request.user?.verified) {
|
|
392
|
+
const securityResult = await context.invokeInboundPolicy(
|
|
393
|
+
"enhanced-security",
|
|
394
|
+
rateLimitResult,
|
|
395
|
+
);
|
|
396
|
+
if (securityResult instanceof Response) {
|
|
397
|
+
return securityResult;
|
|
398
|
+
}
|
|
399
|
+
request = securityResult;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
return fetch(request);
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## See Also
|
|
407
|
+
|
|
408
|
+
- [Request/Response Hooks](./hooks.mdx) - Detailed guide on using hooks
|
|
409
|
+
- [Custom Request Handlers](../handlers/custom-handler.mdx) - Building custom
|
|
410
|
+
handlers
|
|
411
|
+
- [Policies Overview](../articles/policies.mdx) - Understanding policies
|
|
412
|
+
- [Logger](./logger.mdx) - Detailed logging API documentation
|
|
413
|
+
- [Request User](./request-user.mdx) - Working with authenticated users
|
|
414
|
+
- [Routing](../articles/routing.mdx) - How routing works in Zuplo
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Zuplo Identity Token
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<EnterpriseFeature name="Zuplo Identity Token" />
|
|
6
|
+
|
|
7
|
+
Each deployment of Zuplo is issued a unique OAuth client identity. This identity
|
|
8
|
+
can be used to create ID Tokens that can be used to securely identify requests
|
|
9
|
+
from your Zuplo API that are made to outside services. This token can also be
|
|
10
|
+
used for purposes such as Identity Federation to securely call APIs in other
|
|
11
|
+
Cloud Services like GCP or AWS.
|
|
12
|
+
|
|
13
|
+
To create a Zuplo Identity Token simply run the following code from within a
|
|
14
|
+
policy, handler, or module in your Zuplo API.
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { ZuploServices, ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
18
|
+
|
|
19
|
+
export default async function handler(
|
|
20
|
+
request: ZuploRequest,
|
|
21
|
+
context: ZuploContext,
|
|
22
|
+
) {
|
|
23
|
+
const idToken = await ZuploServices.getIDToken(context, {
|
|
24
|
+
audience: "https://my-api.example.com",
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The `audience` argument is optional, but typically this is set to a value
|
|
30
|
+
identifying the service you are calling.
|
|
31
|
+
|
|
32
|
+
The issued JWT token contains the following claims.
|
|
33
|
+
|
|
34
|
+
| Claim | Example Value | Description |
|
|
35
|
+
| ------------------ | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
36
|
+
| `alg` | `RS256` | The signing algorithm. Always `RS256` |
|
|
37
|
+
| `kid` | `atky_8gLGDfmHkNEZNvy7PDnmr2gF` | The signing key used to generate the JWT |
|
|
38
|
+
| `account` | `my-account` | The name of your Zuplo account |
|
|
39
|
+
| `project` | `my-project` | The name of your Zuplo project |
|
|
40
|
+
| `deployment` | `copper-bedbug-main-53c4947` | The name of your Zuplo deployment. Each environment will have its own name (for example, production, preview branch `test`, etc. will all be different.). |
|
|
41
|
+
| `environment_type` | `production` | The type of environment this deployment is. Values can be `production`, `preview`, or `development` |
|
|
42
|
+
| `iss` | `https://dev.zuplo.com/v1/client-auth/auth_o8PUdhKxSTOiB794GWPwLQCD` | This is the issuer URL of the Zuplo identity provider. This value will always be the same. |
|
|
43
|
+
| `sub` | `atcl_8GLgIDYRw38Jqg0tHR8tiZfh` | The unique identity of the OAuth Client. This can be used to uniquely identify your deployment. |
|
|
44
|
+
| `iat` | `1720470928` | The epoch time the token was issued. |
|
|
45
|
+
| `exp` | `1720506928` | The epoch time the token expires. The default expiration for Zuplo Identity Tokens is 10 hours. |
|
|
46
|
+
|
|
47
|
+
## Securing Your Backend
|
|
48
|
+
|
|
49
|
+
The Zuplo ID Token can be used as a means of securing your backend API so that
|
|
50
|
+
only Zuplo can call the API. This can be done by restricting the incoming
|
|
51
|
+
requests using a standard OAuth middleware on your API. For example, if you were
|
|
52
|
+
using Fastify on your backend, you could use the
|
|
53
|
+
[Fastify JWT Middleware](https://github.com/fastify/fastify-jwt) using the
|
|
54
|
+
[JWKS verification method](https://github.com/fastify/fastify-jwt?tab=readme-ov-file#verifying-with-jwks)
|
|
55
|
+
and checking the `account`, `project`, or other claims.
|
|
56
|
+
|
|
57
|
+
## Verifying the Token Using a Library
|
|
58
|
+
|
|
59
|
+
To verify the JWT token on your own service, you can use any standard JWT
|
|
60
|
+
library. The verification method will use the JWKS hosted at
|
|
61
|
+
`https://dev.zuplo.com/v1/client-auth/auth_o8PUdhKxSTOiB794GWPwLQCD/.well-known/jwks.json`.
|
|
62
|
+
You can also use OAuth tools that handle automatic discovery.
|
|
63
|
+
|
|
64
|
+
Below is an example of how to verify the token using the
|
|
65
|
+
[`jose`](https://www.npmjs.com/package/jose) JavaScript library.
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import jose from "jose";
|
|
69
|
+
|
|
70
|
+
// Create the Remote JWK set
|
|
71
|
+
const JWKS = jose.createRemoteJWKSet(
|
|
72
|
+
new URL(
|
|
73
|
+
"https://dev.zuplo.com/v1/client-auth/auth_o8PUdhKxSTOiB794GWPwLQCD/.well-known/jwks.json",
|
|
74
|
+
),
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
// Verify the token
|
|
78
|
+
const { payload, protectedHeader } = await jose.jwtVerify(jwt, JWKS, {
|
|
79
|
+
issuer: "https://dev.zuplo.com/v1/client-auth/auth_o8PUdhKxSTOiB794GWPwLQCD",
|
|
80
|
+
audience: "https://my-api.example.com",
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// Verify the token is from your account/project/etc.
|
|
84
|
+
if (
|
|
85
|
+
payload["account"] !== "my-account" ||
|
|
86
|
+
payload["project"] !== "my-project"
|
|
87
|
+
) {
|
|
88
|
+
throw new Error("Not my account or project");
|
|
89
|
+
}
|
|
90
|
+
```
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Zuplo Project Configuration (zuplo.jsonc)
|
|
3
|
+
sidebar_label: Project Configuration
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Certain project-level settings can be configured using the `zuplo.jsonc` file at
|
|
7
|
+
the root of a project. The `zuplo.jsonc` file is created by default for new
|
|
8
|
+
projects and contains the default configuration.
|
|
9
|
+
|
|
10
|
+
The default `zuplo.jsonc` file is shown below. The only current valid `version`
|
|
11
|
+
of the file is `1`.
|
|
12
|
+
|
|
13
|
+
```jsonc
|
|
14
|
+
{
|
|
15
|
+
"version": 1,
|
|
16
|
+
"compatibilityDate": "2025-02-06",
|
|
17
|
+
"projectType": "managed-edge",
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
:::warning
|
|
22
|
+
|
|
23
|
+
The `zuplo.jsonc` file isn't currently shown or editable in the Zuplo portal.
|
|
24
|
+
Connect your project to source control and edit inside your source control
|
|
25
|
+
provider or by pushing a local change with git. If your project doesn't have a
|
|
26
|
+
`zuplo.jsonc` it can be added using source control
|
|
27
|
+
|
|
28
|
+
:::
|
|
29
|
+
|
|
30
|
+
## `compatibilityDate`
|
|
31
|
+
|
|
32
|
+
The `compatibilityDate` field in the `zuplo.jsonc` file allows you to lock in
|
|
33
|
+
the behavior of the runtime environment for your project. This is useful if you
|
|
34
|
+
want to ensure that your project continues to build, deploy and operate as you
|
|
35
|
+
expect it to.
|
|
36
|
+
|
|
37
|
+
Refer to the [documentation](./compatibility-dates.mdx) for compatibility dates
|
|
38
|
+
and their changes.
|
|
39
|
+
|
|
40
|
+
```jsonc
|
|
41
|
+
{
|
|
42
|
+
"version": 1,
|
|
43
|
+
"compatibilityDate": "2025-02-06",
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## `projectType`
|
|
48
|
+
|
|
49
|
+
The `projectType` field in the `zuplo.jsonc` file allows you to specify the type
|
|
50
|
+
of your project. This value should be set to match the
|
|
51
|
+
[hosting environment](../articles/hosting-options.mdx) the project will be
|
|
52
|
+
deployed. This configuration defaults to `managed-edge`.
|
|
53
|
+
|
|
54
|
+
- `managed-edge`: (default) Projects that are deployed to Zuplo's managed edge
|
|
55
|
+
environment.
|
|
56
|
+
- `managed-dedicated`: Projects that are deployed to your managed dedicated
|
|
57
|
+
environment.
|
|
58
|
+
- `self-hosted`: Projects that are deployed to your own infrastructure.
|
|
59
|
+
|
|
60
|
+
```jsonc
|
|
61
|
+
{
|
|
62
|
+
"version": 1,
|
|
63
|
+
"projectType": "managed-edge",
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## `allowDuplicateRoutes`
|
|
68
|
+
|
|
69
|
+
Allow duplicate routes (same method and path) to be defined. This isn't
|
|
70
|
+
recommended as it can lead to unexpected behavior. This configuration defaults
|
|
71
|
+
to `false`.
|
|
72
|
+
|
|
73
|
+
```jsonc
|
|
74
|
+
{
|
|
75
|
+
"version": 1,
|
|
76
|
+
"allowDuplicateRoutes": true,
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## `allowHostHeaderOverride`
|
|
81
|
+
|
|
82
|
+
Allow the Host header to be overridden by the client. This configuration
|
|
83
|
+
defaults to `false`. This is only supported in managed dedicated environments.
|
|
84
|
+
Only enable this setting if you understand the implications.
|
|
85
|
+
|
|
86
|
+
```jsonc
|
|
87
|
+
{
|
|
88
|
+
"version": 1,
|
|
89
|
+
"allowHostHeaderOverride": true,
|
|
90
|
+
}
|
|
91
|
+
```
|