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,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: OpenAPI Support in Zuplo
|
|
3
|
+
sidebar_label: OpenAPI
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo natively supports the OpenAPI 3.1 (and is compatible with 3.0)
|
|
7
|
+
specification standard as the core way to configure the gateway.
|
|
8
|
+
|
|
9
|
+
When you create a new project you will see a `routes.oas.json` file. This is
|
|
10
|
+
your default OpenAPI routing file. The file extension `.oas.json` indicates that
|
|
11
|
+
this is an OpenAPI document used for routing.
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
You can use the Route Designer to build your routes, which will be creating an
|
|
16
|
+
OpenAPI document in the background for you (check it out in the **JSON View**).
|
|
17
|
+
|
|
18
|
+
You can also **import an OpenAPI** document by clicking the **Open API** tab.
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+
|
|
22
|
+
This will merge your imported file with any routes you already have in your
|
|
23
|
+
.oas.json file. By default, operations will be merged by path & method - but you
|
|
24
|
+
can choose to merge on `operationId` instead if you prefer.
|
|
25
|
+
|
|
26
|
+
## OpenAPI Workflow
|
|
27
|
+
|
|
28
|
+
Having a source of truth when embracing design-first and OpenAPI is critical.
|
|
29
|
+
Zuplo offers the best workflow for OpenAPI friendly businesses because its
|
|
30
|
+
support for OpenAPI is native.
|
|
31
|
+
|
|
32
|
+
You can start your OpenAPI document in Zuplo and export that to other sources,
|
|
33
|
+
or you can generate your OpenAPI elsewhere (by hand, using
|
|
34
|
+
[stoplight.io](https://stoplight.io), etc.) and sync your changes into Zuplo
|
|
35
|
+
using our import feature.
|
|
36
|
+
|
|
37
|
+
The import feature will merge changes from an external source-of-truth OpenAPI
|
|
38
|
+
document and will keep your Zuplo settings intact, while overwriting everything
|
|
39
|
+
else from your imported OpenAPI docs. This creates a great workflow, whatever
|
|
40
|
+
toolset you use.
|
|
41
|
+
|
|
42
|
+

|
|
43
|
+
|
|
44
|
+
What's more, you can now have more confidence that your OpenAPI represents the
|
|
45
|
+
truth of your API implementation - because it now drives the configuration of
|
|
46
|
+
your gateway.
|
|
47
|
+
|
|
48
|
+
## Zuplo extensions
|
|
49
|
+
|
|
50
|
+
Zuplo extends the OpenAPI spec using **vendor extensions**. You will see two
|
|
51
|
+
vendor extensions:
|
|
52
|
+
|
|
53
|
+
### x-zuplo-path
|
|
54
|
+
|
|
55
|
+
`x-zuplo-path` is used to specify the type of
|
|
56
|
+
[path matching mode](./routing.mdx) you want to use; **open-api** is the default
|
|
57
|
+
and uses the standard OpenAPI slugs for tokens (for example `/pizza/{size}`).
|
|
58
|
+
You can change the `pathMode` to `url-pattern` to use the web standards
|
|
59
|
+
[URLPattern](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern)
|
|
60
|
+
approach to path matching which is much more powerful and supports regular
|
|
61
|
+
expressions.
|
|
62
|
+
|
|
63
|
+
This extension is defined below the **path** property:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
"paths": {
|
|
67
|
+
"/path-0": {
|
|
68
|
+
"x-zuplo-path": {
|
|
69
|
+
"pathMode": "url-pattern"
|
|
70
|
+
},
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### x-zuplo-route
|
|
76
|
+
|
|
77
|
+
`x-zuplo-route` is where all of your route settings are configured, including
|
|
78
|
+
[policies](/docs/policies), [handlers](/docs/handlers/openapi.mdx),
|
|
79
|
+
[CORS](../programmable-api/custom-cors-policy.mdx) and more.
|
|
80
|
+
|
|
81
|
+
This extension is defined inside the operation, below the method:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
"get": {
|
|
85
|
+
"summary": "New Route",
|
|
86
|
+
"description": "Lorem ipsum dolor sit amet, **consectetur adipiscing** elit, sed do `eiusmod tempor` incididunt ut labore et dolore magna aliqua.",
|
|
87
|
+
"x-zuplo-route": {
|
|
88
|
+
"corsPolicy": "none",
|
|
89
|
+
"handler": {
|
|
90
|
+
"export": "urlForwardHandler",
|
|
91
|
+
"module": "$import(@zuplo/runtime)",
|
|
92
|
+
"options": {
|
|
93
|
+
"baseUrl": "https://echo.zuplo.io"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"policies": {
|
|
97
|
+
"inbound": []
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"operationId": "e73d0713-b894-494d-8796-2c50b8634d47"
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Other Supported Extensions
|
|
105
|
+
|
|
106
|
+
Zuplo also supports other popular extensions in order to better integrate with
|
|
107
|
+
your existing tooling.
|
|
108
|
+
|
|
109
|
+
### x-internal
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
"get": {
|
|
113
|
+
"summary": "Internal Route",
|
|
114
|
+
"x-internal": true,
|
|
115
|
+
"x-zuplo-route": {
|
|
116
|
+
//...
|
|
117
|
+
},
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
You can set this property to `true` in order to hide a route from the Developer
|
|
122
|
+
Portal. If you are using the [OpenAPI Spec Handler](../handlers/openapi.mdx),
|
|
123
|
+
internal routes won't be present in the generated OpenAPI file.
|
|
124
|
+
|
|
125
|
+
## Multiple File Support
|
|
126
|
+
|
|
127
|
+
You can have multiple `.oas.json` files if you wish to break up your route
|
|
128
|
+
definitions. Note that routes will be executed in document order, based on the
|
|
129
|
+
`.oas.json` files being sorted alphabetically. For more details see
|
|
130
|
+
[routing](./routing.mdx).
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Zuplo OpenTelemetry
|
|
3
|
+
sidebar_label: OpenTelemetry
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo ships with an OpenTelemetry plugin that allows you to collect and export
|
|
7
|
+
telemetry data from your Zuplo API. The OpenTelemetry plugin supports tracing
|
|
8
|
+
and logging. Metrics support is planned for future releases.
|
|
9
|
+
|
|
10
|
+
<EnterpriseFeature name="OpenTelemetry" />
|
|
11
|
+
|
|
12
|
+
## Tracing
|
|
13
|
+
|
|
14
|
+
Tracing enables you to monitor performance, identify bottlenecks, and
|
|
15
|
+
troubleshoot issues in your Zuplo API. The OpenTelemetry plugin automatically
|
|
16
|
+
instruments your API to collect trace data. You can send trace data any
|
|
17
|
+
OpenTelemetry service such as [Honeycomb](https://honeycomb.io),
|
|
18
|
+
[Middleware](https://middleware.io/), [Dynatrace](https://dynatrace.com),
|
|
19
|
+
[Jaeger](https://www.jaegertracing.io/), and
|
|
20
|
+
[many more](https://opentelemetry.io/ecosystem/).
|
|
21
|
+
|
|
22
|
+
With tracing enabled on your Zuplo API you will see timings for each request as
|
|
23
|
+
well as spans for plugins, handlers, and policies. The OpenTelemetry plugin
|
|
24
|
+
supports trace propagation (W3C headers by default) so you can trace requests
|
|
25
|
+
all the way from the client to your backend.
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
### What's Traced?
|
|
30
|
+
|
|
31
|
+
By default, when the OpenTelemetry plugin is enabled, the following is traced:
|
|
32
|
+
|
|
33
|
+
- Request: The entire request lifecycle is traced, including the time taken to
|
|
34
|
+
process the request and send the response.
|
|
35
|
+
- Inbound Policies: The time taken to execute all inbound policies as well as
|
|
36
|
+
each policy is traced.
|
|
37
|
+
- Handler: The request handler is traced
|
|
38
|
+
- Outbound Policies: The time taken to execute all outbound policies as well as
|
|
39
|
+
each policy is traced.
|
|
40
|
+
- Subrequests: Any use of `fetch` within your custom policies or handlers will
|
|
41
|
+
be traced.
|
|
42
|
+
|
|
43
|
+
### Limitations
|
|
44
|
+
|
|
45
|
+
One important limitation to keep in mind is that the clock will only increment
|
|
46
|
+
when performing I/O operations (for example when calling `fetch`, using the
|
|
47
|
+
Cache APIs, etc.). This is a limitation imposed as a security measure due
|
|
48
|
+
Zuplo's serverless, multi-tenant architecture. In practice this shouldn't impact
|
|
49
|
+
your ability to trace as virtually any code that isn't I/O bound is fast.
|
|
50
|
+
|
|
51
|
+
### Custom Tracing
|
|
52
|
+
|
|
53
|
+
You can add custom tracing to your Zuplo API by using the OpenTelemetry API. The
|
|
54
|
+
example below shows how to implement tracing in a custom policy.
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
58
|
+
import { trace } from "@opentelemetry/api";
|
|
59
|
+
|
|
60
|
+
export default async function policy(
|
|
61
|
+
request: ZuploRequest,
|
|
62
|
+
context: ZuploContext,
|
|
63
|
+
) {
|
|
64
|
+
const tracer = trace.getTracer("my-tracer");
|
|
65
|
+
return tracer.startActiveSpan("my-span", async (span) => {
|
|
66
|
+
span.setAttribute("key", "value");
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
const results = await Promise.all([
|
|
70
|
+
fetch("https://api.example.com/hello"),
|
|
71
|
+
fetch("https://api.example.com/world"),
|
|
72
|
+
]);
|
|
73
|
+
// ...
|
|
74
|
+
|
|
75
|
+
return request;
|
|
76
|
+
} finally {
|
|
77
|
+
span.end();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
This will result in a span that has the following spans:
|
|
84
|
+
|
|
85
|
+
```txt
|
|
86
|
+
|--- my-policy
|
|
87
|
+
| |
|
|
88
|
+
| |--- my-span
|
|
89
|
+
| | |
|
|
90
|
+
| | |--- GET https://api.example.com/hello
|
|
91
|
+
| | |
|
|
92
|
+
| | |--- GET https://api.example.com/world
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Logging
|
|
96
|
+
|
|
97
|
+
Logging can be enabled by configuring the `logUrl` property in the OpenTelemetry
|
|
98
|
+
plugin configuration, as shown in
|
|
99
|
+
[Tracing and Logging Configuration](#tracing-and-logging-configuration). When
|
|
100
|
+
enabled, logs will be exported to the specified endpoint in OpenTelemetry
|
|
101
|
+
format.
|
|
102
|
+
|
|
103
|
+
To add OpenTelemetry logs in your Zuplo handlers and policies, you can use the
|
|
104
|
+
`context.log` object as shown below:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
108
|
+
|
|
109
|
+
export default async function policy(
|
|
110
|
+
request: ZuploRequest,
|
|
111
|
+
context: ZuploContext,
|
|
112
|
+
) {
|
|
113
|
+
context.log.info("Hello World");
|
|
114
|
+
return request;
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
You can also set additional custom log properties using
|
|
119
|
+
`context.log.setLogProperties!`:
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
123
|
+
|
|
124
|
+
export default async function policy(
|
|
125
|
+
request: ZuploRequest,
|
|
126
|
+
context: ZuploContext,
|
|
127
|
+
) {
|
|
128
|
+
context.log.setLogProperties!({ customProperty: "value" });
|
|
129
|
+
context.log.info("Hello World");
|
|
130
|
+
return request;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
After setting a custom property, all subsequent log messages will include that
|
|
135
|
+
property.
|
|
136
|
+
|
|
137
|
+
These logs will be exported to the configured log endpoint in OpenTelemetry
|
|
138
|
+
format. The log message will be in the `message` field and the custom properties
|
|
139
|
+
will be in the `attributes` field.
|
|
140
|
+
|
|
141
|
+
## Setup
|
|
142
|
+
|
|
143
|
+
Adding OpenTelemetry to your Zuplo API is done by adding the
|
|
144
|
+
`OpenTelemetryPlugin` in the `zuplo.runtime.ts` file as shown below.
|
|
145
|
+
|
|
146
|
+
:::warning{title="OpenTelemetry Protocol"}
|
|
147
|
+
|
|
148
|
+
The Zuplo OpenTelemetry plugin only supports sending data in JSON format. Not
|
|
149
|
+
all OpenTelemetry services support the JSON format. If you are using a service
|
|
150
|
+
that doesn't support JSON, you will need to use a tool like the
|
|
151
|
+
[OpenTelemetry Collector](https://opentelemetry.io/docs/collector/) that can
|
|
152
|
+
convert the JSON format to the format required by your service.
|
|
153
|
+
|
|
154
|
+
:::
|
|
155
|
+
|
|
156
|
+
### Basic Tracing Configuration
|
|
157
|
+
|
|
158
|
+
For most providers you will set values for `exporter.url` and
|
|
159
|
+
`exporter.headers`. It's common for providers to use a header for authorization.
|
|
160
|
+
|
|
161
|
+
```ts title="zuplo.runtime.ts"
|
|
162
|
+
import { OpenTelemetryPlugin } from "@zuplo/otel";
|
|
163
|
+
import { RuntimeExtensions, environment } from "@zuplo/runtime";
|
|
164
|
+
|
|
165
|
+
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
166
|
+
runtime.addPlugin(
|
|
167
|
+
new OpenTelemetryPlugin({
|
|
168
|
+
exporter: {
|
|
169
|
+
url: "https://otel-collector.example.com/v1/traces",
|
|
170
|
+
headers: {
|
|
171
|
+
"api-key": environment.OTEL_API_KEY,
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
service: {
|
|
175
|
+
name: "my-api",
|
|
176
|
+
version: "1.0.0",
|
|
177
|
+
},
|
|
178
|
+
}),
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Advanced Tracing Configuration
|
|
184
|
+
|
|
185
|
+
The OpenTelemetry plugin supports additional configuration options for advanced
|
|
186
|
+
use cases, including sampling and post-processing of spans.
|
|
187
|
+
|
|
188
|
+
```ts title="zuplo.runtime.ts"
|
|
189
|
+
import { OpenTelemetryPlugin } from "@zuplo/otel";
|
|
190
|
+
import { RuntimeExtensions, environment } from "@zuplo/runtime";
|
|
191
|
+
|
|
192
|
+
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
193
|
+
runtime.addPlugin(
|
|
194
|
+
new OpenTelemetryPlugin({
|
|
195
|
+
exporter: {
|
|
196
|
+
url: "https://otel-collector.example.com/v1/traces",
|
|
197
|
+
headers: { "api-key": environment.OTEL_API_KEY },
|
|
198
|
+
},
|
|
199
|
+
service: {
|
|
200
|
+
name: "my-api",
|
|
201
|
+
version: "1.0.0",
|
|
202
|
+
},
|
|
203
|
+
// Optional post processor to modify spans before export
|
|
204
|
+
postProcessor: (spans) => {
|
|
205
|
+
for (const span of spans) {
|
|
206
|
+
(
|
|
207
|
+
span as unknown as { attributes: Record<string, unknown> }
|
|
208
|
+
).attributes["post.processed"] = true;
|
|
209
|
+
}
|
|
210
|
+
return spans;
|
|
211
|
+
},
|
|
212
|
+
sampling: {
|
|
213
|
+
headSampler: {
|
|
214
|
+
ratio: 0.1, // Sample 10% of requests
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
}),
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Tracing and Logging Configuration
|
|
223
|
+
|
|
224
|
+
Logging is only enabled when specifically configured with its own endpoint using
|
|
225
|
+
the `logUrl` property. When using both tracing and logging, you can configure
|
|
226
|
+
them with separate endpoints.
|
|
227
|
+
|
|
228
|
+
```ts title="zuplo.runtime.ts"
|
|
229
|
+
import { OpenTelemetryPlugin } from "@zuplo/otel";
|
|
230
|
+
import { RuntimeExtensions, environment } from "@zuplo/runtime";
|
|
231
|
+
|
|
232
|
+
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
233
|
+
runtime.addPlugin(
|
|
234
|
+
new OpenTelemetryPlugin({
|
|
235
|
+
logUrl: "https://otel-collector.example.com/v1/logs",
|
|
236
|
+
traceUrl: "https://otel-collector.example.com/v1/traces",
|
|
237
|
+
headers: { "api-key": environment.OTEL_API_KEY },
|
|
238
|
+
service: {
|
|
239
|
+
name: "my-api",
|
|
240
|
+
version: "1.0.0",
|
|
241
|
+
},
|
|
242
|
+
sampling: {
|
|
243
|
+
headSampler: {
|
|
244
|
+
ratio: 0.1, // Sample 10% of requests
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
}),
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
```
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Per user rate-limiting using a database and the ZoneCache
|
|
3
|
+
sidebar_label: "Per-User Rate Limits"
|
|
4
|
+
description:
|
|
5
|
+
Learn how to implement advanced dynamic rate limiting with database lookups
|
|
6
|
+
and ZoneCache for improved performance.
|
|
7
|
+
tags:
|
|
8
|
+
- rate-limiting
|
|
9
|
+
- caching
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
In this example we show a more advanced implementation of
|
|
13
|
+
[dynamic rate limiting](../articles/per-user-rate-limits-using-db.mdx). It uses
|
|
14
|
+
a database lookup to get the customer details and combines that with the
|
|
15
|
+
ZoneCache to improve performance, reduce latency and lower the load on the
|
|
16
|
+
database.
|
|
17
|
+
|
|
18
|
+
In this example we use [Supabase](https://supabase.com) as the database but you
|
|
19
|
+
could use your own API, [Xata](https://xata.io),
|
|
20
|
+
[Firebase](https://firebase.com) etc. The implementation will be similar for
|
|
21
|
+
all.
|
|
22
|
+
|
|
23
|
+
If you haven't already, check out the
|
|
24
|
+
[rate-limiting policy](../policies/rate-limit-inbound.mdx) and the
|
|
25
|
+
[dynamic rate limiting quickstart](../articles/per-user-rate-limits-using-db.mdx).
|
|
26
|
+
Then you should be oriented to how dynamic rate limiting works.
|
|
27
|
+
|
|
28
|
+
Below is a full implementation of a custom rate limiting function. In our
|
|
29
|
+
example this is a module called `per-user-rate-limiting.ts`.
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import {
|
|
33
|
+
CustomRateLimitDetails,
|
|
34
|
+
ZoneCache,
|
|
35
|
+
ZuploContext,
|
|
36
|
+
ZuploRequest,
|
|
37
|
+
environment,
|
|
38
|
+
} from "@zuplo/runtime";
|
|
39
|
+
import { createClient } from "@supabase/supabase-js";
|
|
40
|
+
|
|
41
|
+
const CACHE_NAME = "rate-limit-requests-allowed-cache";
|
|
42
|
+
const SB_URL = "https://YOUR_SUPABASE_URL.supabase.co";
|
|
43
|
+
const SB_SERVICE_ROLE_KEY = environment.SB_SERVICE_ROLE_KEY;
|
|
44
|
+
const FALLBACK_REQUESTS_ALLOWED = 100;
|
|
45
|
+
|
|
46
|
+
export async function rateLimitKey(
|
|
47
|
+
request: ZuploRequest,
|
|
48
|
+
context: ZuploContext,
|
|
49
|
+
policyName: string,
|
|
50
|
+
): Promise<CustomRateLimitDetails> {
|
|
51
|
+
// We'll get the customer ID from the user data.
|
|
52
|
+
// This might be from a JWT or API Key metadata
|
|
53
|
+
const customerId = request.user.data.customerId;
|
|
54
|
+
|
|
55
|
+
// We don't want to hit the database on every request
|
|
56
|
+
// So we'll use the fast zone cache to cache this data
|
|
57
|
+
const cache = new ZoneCache(CACHE_NAME, context);
|
|
58
|
+
let requestsAllowed = await cache.get(customerId);
|
|
59
|
+
|
|
60
|
+
// If we didn't get a value, we'll need to go to the database
|
|
61
|
+
// In this example we're using supabase, but you could use your
|
|
62
|
+
// own API, Xata, etc.
|
|
63
|
+
if (requestsAllowed === undefined) {
|
|
64
|
+
// create the supabase client and read the customer's
|
|
65
|
+
const supabase = createClient(SB_URL, SB_SERVICE_ROLE_KEY);
|
|
66
|
+
let { data, error } = await supabase
|
|
67
|
+
.from("customer_rate_limits")
|
|
68
|
+
.select("requestsAllowed")
|
|
69
|
+
.eq("customerId", customerId);
|
|
70
|
+
|
|
71
|
+
// If something goes wrong, we probably want to log an
|
|
72
|
+
// error and assume a default, vs go down
|
|
73
|
+
if (error) {
|
|
74
|
+
context.log.error(error);
|
|
75
|
+
requestsAllowed = FALLBACK_REQUESTS_ALLOWED;
|
|
76
|
+
} else {
|
|
77
|
+
context.log.info(data);
|
|
78
|
+
requestsAllowed = data[0].requestsAllowed;
|
|
79
|
+
}
|
|
80
|
+
// store the read value in the ZoneCache
|
|
81
|
+
// do this asynchronously to improve performance
|
|
82
|
+
cache
|
|
83
|
+
.put(customerId, requestsAllowed, 60)
|
|
84
|
+
.catch((err) => context.log.error(err));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
key: customerId,
|
|
89
|
+
requestsAllowed: requestsAllowed,
|
|
90
|
+
timeWindowMinutes: 1,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The above function can be applied to a rate limiter with the following
|
|
96
|
+
configuration in policies
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"export": "RateLimitInboundPolicy",
|
|
101
|
+
"module": "$import(@zuplo/runtime)",
|
|
102
|
+
"options": {
|
|
103
|
+
"rateLimitBy": "function",
|
|
104
|
+
"requestsAllowed": 2,
|
|
105
|
+
"timeWindowMinutes": 1,
|
|
106
|
+
"identifier": {
|
|
107
|
+
"export": "rateLimitKey",
|
|
108
|
+
"module": "$import(./modules/per-user-rate-limiting)"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|