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,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: OpenAPI Spec Handler
|
|
3
|
+
sidebar_label: OpenAPI Spec Handler
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The OpenAPI Spec handler serves a public version of your OpenAPI specification
|
|
7
|
+
file. The handler strips Zuplo gateway configuration (such as `x-zuplo-*`
|
|
8
|
+
extensions) and enriches the spec with data based on the gateway implementation.
|
|
9
|
+
For example, if a route uses API key authentication, the handler automatically
|
|
10
|
+
documents the `Authorization` header in the generated OpenAPI spec.
|
|
11
|
+
|
|
12
|
+
## Setup via Portal
|
|
13
|
+
|
|
14
|
+
The OpenAPI Spec Handler can be added to any route using the Route Designer.
|
|
15
|
+
Open the **Route Designer** by navigating to the **Code** tab then click
|
|
16
|
+
**routes.oas.json**. Inside any route, select **OpenAPI Spec** from the
|
|
17
|
+
**Request Handlers** drop-down.
|
|
18
|
+
|
|
19
|
+
The handler defaults to the OpenAPI file currently open, but you can change it
|
|
20
|
+
to serve a different OpenAPI file via the dropdown.
|
|
21
|
+
|
|
22
|
+
## Setup via routes.oas.json
|
|
23
|
+
|
|
24
|
+
Add the OpenAPI Spec handler manually to the **routes.oas.json** file with the
|
|
25
|
+
following route configuration:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
"paths": {
|
|
29
|
+
"/openapi": {
|
|
30
|
+
"get": {
|
|
31
|
+
"summary": "OpenAPI Specification",
|
|
32
|
+
"x-zuplo-route": {
|
|
33
|
+
"corsPolicy": "none",
|
|
34
|
+
"handler": {
|
|
35
|
+
"export": "openApiSpecHandler",
|
|
36
|
+
"module": "$import(@zuplo/runtime)",
|
|
37
|
+
"options": {
|
|
38
|
+
"openApiFilePath": "./config/routes.oas.json"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"policies": {
|
|
42
|
+
"inbound": []
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Options
|
|
51
|
+
|
|
52
|
+
The OpenAPI Spec handler accepts the following options:
|
|
53
|
+
|
|
54
|
+
- **`openApiFilePath`** (required): The file path of an OpenAPI file within the
|
|
55
|
+
`config` folder.
|
|
56
|
+
- Type: `string`
|
|
57
|
+
- The file name must end with `.oas.json`.
|
|
58
|
+
- Example: `"./config/routes.oas.json"`
|
|
59
|
+
|
|
60
|
+
## How It Works
|
|
61
|
+
|
|
62
|
+
When a request hits the route with this handler, the handler:
|
|
63
|
+
|
|
64
|
+
1. Reads the specified OpenAPI file from the project configuration.
|
|
65
|
+
2. Removes all Zuplo-specific extensions (`x-zuplo-*` properties) that are not
|
|
66
|
+
relevant to API consumers.
|
|
67
|
+
3. Enriches the spec with information derived from the gateway configuration,
|
|
68
|
+
such as authentication requirements inferred from applied policies.
|
|
69
|
+
4. Returns the cleaned and enriched OpenAPI spec as a JSON response.
|
|
70
|
+
|
|
71
|
+
## Common Use Cases
|
|
72
|
+
|
|
73
|
+
- **Developer portal integration**: Serve the OpenAPI spec at a known endpoint
|
|
74
|
+
for developer portals or documentation tools to consume.
|
|
75
|
+
- **Client SDK generation**: Provide an endpoint that CI/CD pipelines or
|
|
76
|
+
developers can use to generate client SDKs from the latest API spec.
|
|
77
|
+
- **API discovery**: Expose the spec so that API consumers can explore available
|
|
78
|
+
endpoints and their requirements.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Redirect Handler
|
|
3
|
+
sidebar_label: Redirect
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The Redirect Handler sends a redirect HTTP response to the client. Use it to
|
|
7
|
+
redirect traffic from one URL to another, such as directing users from a
|
|
8
|
+
deprecated endpoint to its replacement or redirecting a root path to
|
|
9
|
+
documentation.
|
|
10
|
+
|
|
11
|
+
## Setup via Portal
|
|
12
|
+
|
|
13
|
+
The Redirect Handler can be added to any route using the Route Designer. Open
|
|
14
|
+
the **Route Designer** by navigating to the **Code** tab then click
|
|
15
|
+
**routes.oas.json**. Inside any route, select **Redirect** from the **Request
|
|
16
|
+
Handlers** drop-down.
|
|
17
|
+
|
|
18
|
+
In the text box enter the URL location for the redirect.
|
|
19
|
+
|
|
20
|
+
## Setup in routes.oas.json
|
|
21
|
+
|
|
22
|
+
Configure the Redirect Handler directly in the **routes.oas.json** file. The
|
|
23
|
+
following example redirects requests at the root of a domain to a docs page at
|
|
24
|
+
`/docs`:
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
"paths": {
|
|
28
|
+
"/redirect-test": {
|
|
29
|
+
"x-zuplo-path": {
|
|
30
|
+
"pathMode": "open-api"
|
|
31
|
+
},
|
|
32
|
+
"get": {
|
|
33
|
+
"summary": "Testing rewrite handler",
|
|
34
|
+
"x-zuplo-route": {
|
|
35
|
+
"corsPolicy": "none",
|
|
36
|
+
"handler": {
|
|
37
|
+
"module": "$import(@zuplo/runtime)",
|
|
38
|
+
"export": "redirectHandler",
|
|
39
|
+
"options": {
|
|
40
|
+
"location": "/docs"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"policies": {
|
|
45
|
+
"inbound": []
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Options
|
|
53
|
+
|
|
54
|
+
The Redirect Handler accepts the following options:
|
|
55
|
+
|
|
56
|
+
- **`location`** (required): The URL or path to redirect the client to.
|
|
57
|
+
- Type: `string`
|
|
58
|
+
- Supports absolute URLs (e.g., `https://example.com/docs`) and relative paths
|
|
59
|
+
(e.g., `/docs`)
|
|
60
|
+
|
|
61
|
+
- **`status`** (optional): The HTTP status code for the redirect response.
|
|
62
|
+
- Type: `number`
|
|
63
|
+
- Default: `302`
|
|
64
|
+
- Common values:
|
|
65
|
+
- `301` - Permanent redirect. Browsers and search engines cache this
|
|
66
|
+
redirect. Use for endpoints that have permanently moved.
|
|
67
|
+
- `302` - Temporary redirect (default). The client should continue using the
|
|
68
|
+
original URL for future requests.
|
|
69
|
+
- `307` - Temporary redirect that preserves the HTTP method. Unlike `302`,
|
|
70
|
+
the client must use the same method (POST, PUT, etc.) when following the
|
|
71
|
+
redirect.
|
|
72
|
+
- `308` - Permanent redirect that preserves the HTTP method. Like `301`, but
|
|
73
|
+
the client must use the same method when following the redirect.
|
|
74
|
+
|
|
75
|
+
### Examples
|
|
76
|
+
|
|
77
|
+
**Permanent redirect to an external URL:**
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"handler": {
|
|
82
|
+
"module": "$import(@zuplo/runtime)",
|
|
83
|
+
"export": "redirectHandler",
|
|
84
|
+
"options": {
|
|
85
|
+
"location": "https://newapi.example.com/v2",
|
|
86
|
+
"status": 301
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Temporary redirect preserving the HTTP method:**
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"handler": {
|
|
97
|
+
"module": "$import(@zuplo/runtime)",
|
|
98
|
+
"export": "redirectHandler",
|
|
99
|
+
"options": {
|
|
100
|
+
"location": "/maintenance",
|
|
101
|
+
"status": 307
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Common Use Cases
|
|
108
|
+
|
|
109
|
+
- **API versioning**: Redirect requests from an old API version to the current
|
|
110
|
+
version using a `301` permanent redirect.
|
|
111
|
+
- **Documentation entry point**: Redirect the root path (`/`) to a documentation
|
|
112
|
+
page or developer portal.
|
|
113
|
+
- **Deprecated endpoints**: Redirect traffic from removed endpoints to their
|
|
114
|
+
replacements.
|
|
115
|
+
- **Domain migration**: Redirect requests from a legacy domain to a new domain.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Internal Route Handlers
|
|
3
|
+
sidebar_label: Internal Route Handlers
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The Zuplo Runtime automatically registers certain routes on your gateway to
|
|
7
|
+
provide enhanced functionality. Requests to these routes may appear in your
|
|
8
|
+
Analytics page. Below is a list of reserved routes:
|
|
9
|
+
|
|
10
|
+
| Name | Method | Path | Description |
|
|
11
|
+
| ----------------------- | ------- | --------------------------------- | ----------------------------------------------------------- |
|
|
12
|
+
| cors-preflight | OPTIONS | `/(.*)` | Handles CORS preflight requests. |
|
|
13
|
+
| developer-portal | GET | User configured, default: `/docs` | Handles serving the legacy Developer Portal. |
|
|
14
|
+
| developer-portal-legacy | GET | `/__zuplo/dev-portal` | Legacy path for the Developer Portal. |
|
|
15
|
+
| ping | GET | `/__zuplo/ping` | Used to check liveness of deployments. |
|
|
16
|
+
| unmatched-path | All | `/(.*)` | Handles requests to endpoints that haven't been configured. |
|
|
17
|
+
|
|
18
|
+
## Behavior Details
|
|
19
|
+
|
|
20
|
+
### cors-preflight
|
|
21
|
+
|
|
22
|
+
This handler automatically responds to CORS preflight (`OPTIONS`) requests based
|
|
23
|
+
on the CORS policy configured for each route. It runs before any user-defined
|
|
24
|
+
route handlers.
|
|
25
|
+
|
|
26
|
+
### ping
|
|
27
|
+
|
|
28
|
+
The `/__zuplo/ping` endpoint returns a simple response that indicates the
|
|
29
|
+
deployment is live and accepting requests. Use this endpoint for health checks
|
|
30
|
+
and uptime monitoring.
|
|
31
|
+
|
|
32
|
+
### unmatched-path
|
|
33
|
+
|
|
34
|
+
When a request does not match any configured route, this handler returns a
|
|
35
|
+
`404 Not Found` response. It acts as a catch-all for undefined paths.
|
|
36
|
+
|
|
37
|
+
:::note
|
|
38
|
+
|
|
39
|
+
Internal routes are reserved by the Zuplo runtime.
|
|
40
|
+
|
|
41
|
+
:::
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: URL Forward Handler
|
|
3
|
+
sidebar_label: URL Forward
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The URL Forward handler proxies requests to a different API without writing any
|
|
7
|
+
code. It appends the incoming path section of the URL onto the specified
|
|
8
|
+
`baseUrl` property, making it ideal for creating API gateways and backend
|
|
9
|
+
proxying.
|
|
10
|
+
|
|
11
|
+
:::tip
|
|
12
|
+
|
|
13
|
+
Use TypeScript for an enhanced development experience with full type checking
|
|
14
|
+
and IntelliSense support when configuring handlers.
|
|
15
|
+
|
|
16
|
+
:::
|
|
17
|
+
|
|
18
|
+
## How It Works
|
|
19
|
+
|
|
20
|
+
If you have an incoming request with URL:
|
|
21
|
+
`https://my-gateway.com/pizza/cheese/size/large`
|
|
22
|
+
|
|
23
|
+
And a URL forward handler with `baseUrl` of `https://my-backend.com/folder`, the
|
|
24
|
+
gateway makes a request to:
|
|
25
|
+
`https://my-backend.com/folder/pizza/cheese/size/large`
|
|
26
|
+
|
|
27
|
+
By default, query parameters are forwarded automatically.
|
|
28
|
+
|
|
29
|
+
## Setup via Portal
|
|
30
|
+
|
|
31
|
+
The Forward Handler can be added to any route using the Route Designer. Open the
|
|
32
|
+
**Route Designer** by navigating to the **Code** tab then click
|
|
33
|
+
**routes.oas.json**. Inside any route, select **URL Forward** from the **Request
|
|
34
|
+
Handlers** drop-down.
|
|
35
|
+
|
|
36
|
+
In the text box enter the URL to rewrite the request. Values can be mixed into
|
|
37
|
+
the URL string using JavaScript string interpolation syntax. For example:
|
|
38
|
+
|
|
39
|
+
```txt
|
|
40
|
+
https://${env.BASE_HOST_NAME}/${method}/${params.productId}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The following objects are available for substitution:
|
|
44
|
+
|
|
45
|
+
- `env` - the environment object, to access
|
|
46
|
+
[Environment Variables](../articles/environment-variables.mdx)
|
|
47
|
+
- `request: ZuploRequest` - the full
|
|
48
|
+
[`ZuploRequest`](../programmable-api/zuplo-request.mdx) object
|
|
49
|
+
- `context: ZuploContext` - the
|
|
50
|
+
[`ZuploContext`](../programmable-api/zuplo-context.mdx) object without
|
|
51
|
+
functions.
|
|
52
|
+
- `params: Record<string, string>` - The parameters of the route. For example,
|
|
53
|
+
`params.productId` would be the value of `:productId` in a route.
|
|
54
|
+
- `query: Record<string, string>` - The query parameters of the route. For
|
|
55
|
+
example, `query.filterBy` would be the value of `?filterBy=VALUE`.
|
|
56
|
+
- `headers: Headers` - the incoming request's
|
|
57
|
+
[headers object](https://developer.mozilla.org/en-US/docs/Web/API/Headers)
|
|
58
|
+
- `url: string` - The full incoming request as a string
|
|
59
|
+
- `host: string` - The
|
|
60
|
+
[`host`](https://developer.mozilla.org/en-US/docs/Web/API/URL/host) portion of
|
|
61
|
+
the incoming URL
|
|
62
|
+
- `hostname: string` - The
|
|
63
|
+
[`hostname`](https://developer.mozilla.org/en-US/docs/Web/API/URL/hostname)
|
|
64
|
+
portion of the incoming URL
|
|
65
|
+
- `pathname: string` - The
|
|
66
|
+
[`pathname`](https://developer.mozilla.org/en-US/docs/Web/API/URL/pathname)
|
|
67
|
+
portion of the incoming URL
|
|
68
|
+
- `port: string` - The
|
|
69
|
+
[`port`](https://developer.mozilla.org/en-US/docs/Web/API/URL/port) portion of
|
|
70
|
+
the incoming URL
|
|
71
|
+
- `search` - The
|
|
72
|
+
[`search`](https://developer.mozilla.org/en-US/docs/Web/API/URL/search)
|
|
73
|
+
portion of the incoming URL
|
|
74
|
+
|
|
75
|
+
Use the following methods to encode portions of the URL:
|
|
76
|
+
|
|
77
|
+
- `encodeURIComponent`: The
|
|
78
|
+
[`encodeURIComponent()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent)
|
|
79
|
+
function encodes a URI by replacing each instance of certain characters with
|
|
80
|
+
escape sequences.
|
|
81
|
+
- `e`: An alias to `encodeURIComponent` to help keep URLs more readable. Can be
|
|
82
|
+
used like `${e(params.productId)}`
|
|
83
|
+
|
|
84
|
+
### Example Values
|
|
85
|
+
|
|
86
|
+
A few examples of the values of various substitutions.
|
|
87
|
+
|
|
88
|
+
- `${headers.get("content-type")}` - `"application/json"`
|
|
89
|
+
- `${host}` - `"example.com:8080"`
|
|
90
|
+
- `${hostname}` - `"example.com"`
|
|
91
|
+
- `${method}` - `"GET"`
|
|
92
|
+
- `${origin}` - `"https://example.com"`
|
|
93
|
+
- `${params.productId}` - `":productId"`
|
|
94
|
+
- `${pathname}` - `"/v1/products/:productId"`
|
|
95
|
+
- `${port}` - `"8080"`
|
|
96
|
+
- `${protocol}` - `"https:"`
|
|
97
|
+
- `${query.category}` - `"cars"`
|
|
98
|
+
- `${search}` - `"?category=cars"`
|
|
99
|
+
- `${url}` - `"https://example.com:8080/v1/products/:productId?category=cars"`
|
|
100
|
+
- `${env.BASE_URL}` - `"https://example.com"`
|
|
101
|
+
|
|
102
|
+
## Setup via routes.oas.json
|
|
103
|
+
|
|
104
|
+
The URL Forward handler can also be added manually to the **routes.oas.json**
|
|
105
|
+
file with the following route configuration.
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
"paths": {
|
|
109
|
+
"/forward-test": {
|
|
110
|
+
"x-zuplo-path": {
|
|
111
|
+
"pathMode": "open-api"
|
|
112
|
+
},
|
|
113
|
+
"get": {
|
|
114
|
+
"summary": "Testing forward handler",
|
|
115
|
+
"x-zuplo-route": {
|
|
116
|
+
"corsPolicy": "none",
|
|
117
|
+
"handler": {
|
|
118
|
+
"export": "urlForwardHandler",
|
|
119
|
+
"module": "$import(@zuplo/runtime)",
|
|
120
|
+
"options": {
|
|
121
|
+
"baseUrl": "${env.BASE_URL}"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"policies": {
|
|
125
|
+
"inbound": []
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Options
|
|
134
|
+
|
|
135
|
+
The URL Forward handler accepts the following options:
|
|
136
|
+
|
|
137
|
+
- **`baseUrl`** (required): The base URL where the incoming pathname will be
|
|
138
|
+
appended
|
|
139
|
+
- Type: `string`
|
|
140
|
+
- Supports template interpolation with environment variables and request
|
|
141
|
+
properties
|
|
142
|
+
- Example: `"https://api.example.com"` or `"${env.BACKEND_URL}"`
|
|
143
|
+
|
|
144
|
+
- **`forwardSearch`** (optional): Controls whether query parameters are
|
|
145
|
+
forwarded
|
|
146
|
+
- Type: `boolean`
|
|
147
|
+
- Default: `true`
|
|
148
|
+
- When `true`, query string is automatically included in forwarded URL
|
|
149
|
+
|
|
150
|
+
- **`followRedirects`** (optional): Controls redirect handling behavior
|
|
151
|
+
- Type: `boolean`
|
|
152
|
+
- Default: `false`
|
|
153
|
+
- When `false`, redirects aren't followed - status and `location` header are
|
|
154
|
+
returned as received
|
|
155
|
+
- When `true`, redirects are automatically followed
|
|
156
|
+
|
|
157
|
+
### Complete Example
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
// routes.oas.json handler configuration
|
|
161
|
+
{
|
|
162
|
+
"handler": {
|
|
163
|
+
"export": "urlForwardHandler",
|
|
164
|
+
"module": "$import(@zuplo/runtime)",
|
|
165
|
+
"options": {
|
|
166
|
+
"baseUrl": "${env.BACKEND_URL}",
|
|
167
|
+
"forwardSearch": true,
|
|
168
|
+
"followRedirects": false
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Different Backends per Environment
|
|
175
|
+
|
|
176
|
+
It's common to want a different backend for your production, staging and preview
|
|
177
|
+
environments. This can be achieved by using
|
|
178
|
+
[environment variables](../articles/environment-variables.mdx) to specify the
|
|
179
|
+
origin of the backend.
|
|
180
|
+
|
|
181
|
+
For example,
|
|
182
|
+
|
|
183
|
+
```js
|
|
184
|
+
${env.BASE_PATH}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
A URL rewrite like this will combine the `BASE_PATH` environment variable, say
|
|
188
|
+
`https://example.com`
|
|
189
|
+
|
|
190
|
+
```txt
|
|
191
|
+
https://example.com/foo/bar
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Related Documentation
|
|
195
|
+
|
|
196
|
+
- [URL Rewrite Handler](./url-rewrite.mdx) - For more complex URL
|
|
197
|
+
transformations
|
|
198
|
+
- [Custom Handler](./custom-handler.mdx) - Building custom request handlers
|
|
199
|
+
- [Environment Variables](../articles/environment-variables.mdx) - Configuration
|
|
200
|
+
management
|
|
201
|
+
- [ZuploRequest](../programmable-api/zuplo-request.mdx) - Request object
|
|
202
|
+
reference
|
|
203
|
+
- [ZuploContext](../programmable-api/zuplo-context.mdx) - Context object
|
|
204
|
+
reference
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: URL Rewrite Handler
|
|
3
|
+
sidebar_label: URL Rewrite
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The URL Rewrite handler proxies and rewrites requests to different APIs without
|
|
7
|
+
writing any code. It provides powerful URL transformation capabilities, allowing
|
|
8
|
+
you to map request data and parameters to custom URL patterns on other hosts.
|
|
9
|
+
|
|
10
|
+
:::tip
|
|
11
|
+
|
|
12
|
+
Combine the URL Rewrite handler with policies such as the Change Method Inbound
|
|
13
|
+
policy to modify virtually any aspect of your request.
|
|
14
|
+
|
|
15
|
+
:::
|
|
16
|
+
|
|
17
|
+
## Setup via Portal
|
|
18
|
+
|
|
19
|
+
The Rewrite Handler can be added to any route using the Route Designer. Open the
|
|
20
|
+
**Route Designer** by navigating to the **Code** tab then click
|
|
21
|
+
**routes.oas.json**. Inside any route, select **URL Rewrite** from the **Request
|
|
22
|
+
Handlers** drop-down.
|
|
23
|
+
|
|
24
|
+

|
|
25
|
+
|
|
26
|
+
In the text box enter the URL to rewrite the request. Values can be mixed into
|
|
27
|
+
the URL string using JavaScript string interpolation syntax. For example:
|
|
28
|
+
|
|
29
|
+
```txt
|
|
30
|
+
https://echo.zuplo.io/${method}/${params.productId}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The following objects are available for substitution:
|
|
34
|
+
|
|
35
|
+
- `env` - the environment object, to access
|
|
36
|
+
[Environment Variables](../articles/environment-variables.mdx)
|
|
37
|
+
- `request: ZuploRequest` - the full
|
|
38
|
+
[`ZuploRequest`](../programmable-api/zuplo-request.mdx) object
|
|
39
|
+
- `context: ZuploContext` - the
|
|
40
|
+
[`ZuploContext`](../programmable-api/zuplo-context.mdx) object without
|
|
41
|
+
functions.
|
|
42
|
+
- `params: Record<string, string>` - The parameters of the route. For example,
|
|
43
|
+
`params.productId` would be the value of `:productId` in a route.
|
|
44
|
+
- `query: Record<string, string>` - The query parameters of the route. For
|
|
45
|
+
example, `query.filterBy` would be the value of `?filterBy=VALUE`.
|
|
46
|
+
- `headers: Headers` - the incoming request's
|
|
47
|
+
[headers object](https://developer.mozilla.org/en-US/docs/Web/API/Headers)
|
|
48
|
+
- `url: string` - The full incoming request as a string
|
|
49
|
+
- `host: string` - The
|
|
50
|
+
[`host`](https://developer.mozilla.org/en-US/docs/Web/API/URL/host) portion of
|
|
51
|
+
the incoming URL
|
|
52
|
+
- `hostname: string` - The
|
|
53
|
+
[`hostname`](https://developer.mozilla.org/en-US/docs/Web/API/URL/hostname)
|
|
54
|
+
portion of the incoming URL
|
|
55
|
+
- `pathname: string` - The
|
|
56
|
+
[`pathname`](https://developer.mozilla.org/en-US/docs/Web/API/URL/pathname)
|
|
57
|
+
portion of the incoming URL
|
|
58
|
+
- `port: string` - The
|
|
59
|
+
[`port`](https://developer.mozilla.org/en-US/docs/Web/API/URL/port) portion of
|
|
60
|
+
the incoming URL
|
|
61
|
+
- `search` - The
|
|
62
|
+
[`search`](https://developer.mozilla.org/en-US/docs/Web/API/URL/search)
|
|
63
|
+
portion of the incoming URL
|
|
64
|
+
|
|
65
|
+
Use the following methods to encode portions of the URL:
|
|
66
|
+
|
|
67
|
+
- `encodeURIComponent`: The
|
|
68
|
+
[`encodeURIComponent()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent)
|
|
69
|
+
function encodes a URI by replacing each instance of certain characters with
|
|
70
|
+
escape sequences.
|
|
71
|
+
- `e`: An alias to `encodeURIComponent` to help keep URLs more readable. Can be
|
|
72
|
+
used like `${e(params.productId)}`
|
|
73
|
+
|
|
74
|
+
### Example Values
|
|
75
|
+
|
|
76
|
+
A few examples of the values of various substitutions.
|
|
77
|
+
|
|
78
|
+
- `${headers.get("content-type")}` - `"application/json"`
|
|
79
|
+
- `${host}` - `"example.com:8080"`
|
|
80
|
+
- `${hostname}` - `"example.com"`
|
|
81
|
+
- `${method}` - `"GET"`
|
|
82
|
+
- `${origin}` - `"https://example.com"`
|
|
83
|
+
- `${params.productId}` - `":productId"`
|
|
84
|
+
- `${pathname}` - `"/v1/products/:productId"`
|
|
85
|
+
- `${port}` - `"8080"`
|
|
86
|
+
- `${protocol}` - `"https:"`
|
|
87
|
+
- `${query.category}` - `"cars"`
|
|
88
|
+
- `${search}` - `"?category=cars"`
|
|
89
|
+
- `${url}` - `"https://example.com:8080/v1/products/:productId?category=cars"`
|
|
90
|
+
- `${env.BASE_URL}` - `"https://example.com"`
|
|
91
|
+
|
|
92
|
+
## Setup via routes.oas.json
|
|
93
|
+
|
|
94
|
+
The URL Rewrite handler can also be added manually to the **routes.oas.json**
|
|
95
|
+
file with the following route configuration.
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
"paths": {
|
|
99
|
+
"/rewrite-test": {
|
|
100
|
+
"summary": "Proxy Welcome API",
|
|
101
|
+
"description": "This Route will proxy the welcome.zuplo.io api",
|
|
102
|
+
"x-zuplo-path": {
|
|
103
|
+
"pathMode": "open-api"
|
|
104
|
+
},
|
|
105
|
+
"get": {
|
|
106
|
+
"summary": "Testing rewrite handler",
|
|
107
|
+
"x-zuplo-route": {
|
|
108
|
+
"corsPolicy": "none",
|
|
109
|
+
"handler": {
|
|
110
|
+
"export": "urlRewriteHandler",
|
|
111
|
+
"module": "$import(@zuplo/runtime)",
|
|
112
|
+
"options": {
|
|
113
|
+
"rewritePattern": "https://welcome.zuplo.io"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"policies": {
|
|
117
|
+
"inbound": []
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Options
|
|
126
|
+
|
|
127
|
+
The URL Rewrite handler can be configured via `options` to support common
|
|
128
|
+
use-cases.
|
|
129
|
+
|
|
130
|
+
- **`rewritePattern`** (required): The URL pattern template for rewriting
|
|
131
|
+
requests
|
|
132
|
+
- Type: `string`
|
|
133
|
+
- Supports JavaScript template interpolation with request context
|
|
134
|
+
- Available variables: `env`, `request`, `context`, `params`, `query`,
|
|
135
|
+
`headers`, `url`, `host`, `hostname`, `pathname`, `port`, `search`
|
|
136
|
+
- Example: `"https://api-${params.version}.example.com/users/${params.id}"`
|
|
137
|
+
|
|
138
|
+
- **`forwardSearch`** (optional): Controls whether query parameters are
|
|
139
|
+
forwarded
|
|
140
|
+
- Type: `boolean`
|
|
141
|
+
- Default: `true`
|
|
142
|
+
- When `true`, query string is automatically included in rewritten URL
|
|
143
|
+
|
|
144
|
+
- **`followRedirects`** (optional): Controls redirect handling behavior
|
|
145
|
+
- Type: `boolean`
|
|
146
|
+
- Default: `false`
|
|
147
|
+
- When `false`, redirects aren't followed - status and `location` header are
|
|
148
|
+
returned as received
|
|
149
|
+
- When `true`, redirects are automatically followed
|
|
150
|
+
|
|
151
|
+
### Examples
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
// Version-based routing with parameters
|
|
155
|
+
{
|
|
156
|
+
"handler": {
|
|
157
|
+
"export": "urlRewriteHandler",
|
|
158
|
+
"module": "$import(@zuplo/runtime)",
|
|
159
|
+
"options": {
|
|
160
|
+
"rewritePattern": "https://api-${params.version}.example.com${pathname}",
|
|
161
|
+
"forwardSearch": true,
|
|
162
|
+
"followRedirects": false
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Environment-based backend selection
|
|
168
|
+
{
|
|
169
|
+
"handler": {
|
|
170
|
+
"export": "urlRewriteHandler",
|
|
171
|
+
"module": "$import(@zuplo/runtime)",
|
|
172
|
+
"options": {
|
|
173
|
+
"rewritePattern": "${env.BACKEND_URL}/api${pathname}${search}",
|
|
174
|
+
"forwardSearch": false,
|
|
175
|
+
"followRedirects": true
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Complex parameter mapping with encoding
|
|
181
|
+
{
|
|
182
|
+
"handler": {
|
|
183
|
+
"export": "urlRewriteHandler",
|
|
184
|
+
"module": "$import(@zuplo/runtime)",
|
|
185
|
+
"options": {
|
|
186
|
+
"rewritePattern": "https://backend.com/v2/users/${encodeURIComponent(params.userId)}/data?type=${query.format}",
|
|
187
|
+
"forwardSearch": false
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Different Backends per Environment
|
|
194
|
+
|
|
195
|
+
It's common to want a different backend for your production, staging and preview
|
|
196
|
+
environments. This can be achieved by using
|
|
197
|
+
[environment variables](../articles/environment-variables.mdx) to specify the
|
|
198
|
+
origin of the backend.
|
|
199
|
+
|
|
200
|
+
For example,
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
${env.BASE_PATH}${pathname}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
A URL rewrite like this will combine the `BASE_PATH` environment variable, say
|
|
207
|
+
`https://example.com` with the incoming path, for example, `/foo/bar` to create
|
|
208
|
+
a re-written URL:
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
https://example.com/foo/bar
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Related Documentation
|
|
215
|
+
|
|
216
|
+
- [URL Forward Handler](./url-forward.mdx) - Simple URL forwarding without
|
|
217
|
+
transformation
|
|
218
|
+
- [Custom Handler](./custom-handler.mdx) - Building custom request handlers
|
|
219
|
+
- [Environment Variables](../articles/environment-variables.mdx) - Configuration
|
|
220
|
+
management
|
|
221
|
+
- [ZuploRequest](../programmable-api/zuplo-request.mdx) - Request object
|
|
222
|
+
reference
|
|
223
|
+
- [ZuploContext](../programmable-api/zuplo-context.mdx) - Context object
|
|
224
|
+
reference
|