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,350 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Deploying Zuplo from a Monorepo
|
|
3
|
+
sidebar_label: Monorepo Deployment
|
|
4
|
+
description:
|
|
5
|
+
"Deploy a Zuplo API gateway from a monorepo subdirectory using the Zuplo CLI
|
|
6
|
+
and GitHub Actions."
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
If your Zuplo API gateway lives inside a monorepo alongside other services, you
|
|
10
|
+
can deploy it using the [Zuplo CLI](../cli/overview.mdx) and your CI/CD
|
|
11
|
+
provider. Zuplo's
|
|
12
|
+
[built-in GitHub integration](./source-control-setup-github.mdx) connects each
|
|
13
|
+
project to a dedicated repository and deploys automatically on every push.
|
|
14
|
+
Because it doesn't natively support projects located in a subdirectory, you need
|
|
15
|
+
to use the Zuplo CLI with a [custom CI/CD pipeline](./custom-ci-cd.mdx) to
|
|
16
|
+
deploy from the correct directory.
|
|
17
|
+
|
|
18
|
+
This guide covers the project structure requirements, CI/CD configuration, local
|
|
19
|
+
development, and common troubleshooting steps for monorepo setups.
|
|
20
|
+
|
|
21
|
+
## Project structure
|
|
22
|
+
|
|
23
|
+
A monorepo with a Zuplo project in a subdirectory typically looks like this:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
my-monorepo/
|
|
27
|
+
├── apps/
|
|
28
|
+
│ ├── web/ # Frontend application
|
|
29
|
+
│ └── backend/ # Backend service
|
|
30
|
+
├── packages/
|
|
31
|
+
│ └── api-gateway/ # Zuplo project
|
|
32
|
+
│ ├── config/
|
|
33
|
+
│ │ ├── routes.oas.json
|
|
34
|
+
│ │ └── policies.json
|
|
35
|
+
│ ├── modules/ # Custom TypeScript handlers and policies
|
|
36
|
+
│ ├── tests/ # API tests
|
|
37
|
+
│ ├── zuplo.jsonc
|
|
38
|
+
│ └── package.json
|
|
39
|
+
├── package.json # Root package.json (workspaces)
|
|
40
|
+
└── ...
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The Zuplo subdirectory must contain these files at minimum:
|
|
44
|
+
|
|
45
|
+
- **`zuplo.jsonc`** — Project configuration including `version`,
|
|
46
|
+
`compatibilityDate`, and `projectType`
|
|
47
|
+
- **`package.json`** — Dependencies (must include `zuplo` as a dependency)
|
|
48
|
+
- **`config/routes.oas.json`** — Route definitions in OpenAPI format
|
|
49
|
+
- **`config/policies.json`** — Policy configuration
|
|
50
|
+
|
|
51
|
+
The `config/policies.json` file must be valid JSON with a `policies` array. Each
|
|
52
|
+
policy entry requires a `name`, `policyType`, and a `handler` object with
|
|
53
|
+
`export`, `module`, and `options` fields. Here's an example:
|
|
54
|
+
|
|
55
|
+
```json title="config/policies.json"
|
|
56
|
+
{
|
|
57
|
+
"policies": [
|
|
58
|
+
{
|
|
59
|
+
"name": "my-rate-limit-inbound-policy",
|
|
60
|
+
"policyType": "rate-limit-inbound",
|
|
61
|
+
"handler": {
|
|
62
|
+
"export": "RateLimitInboundPolicy",
|
|
63
|
+
"module": "$import(@zuplo/runtime)",
|
|
64
|
+
"options": {
|
|
65
|
+
"rateLimitBy": "ip",
|
|
66
|
+
"requestsAllowed": 100,
|
|
67
|
+
"timeWindowMinutes": 1
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
:::caution
|
|
76
|
+
|
|
77
|
+
Every policy in `policies.json` must include the `handler` block with `export`,
|
|
78
|
+
`module`, and `options`. Omitting the `handler` block causes schema validation
|
|
79
|
+
errors during `zuplo deploy`.
|
|
80
|
+
|
|
81
|
+
:::
|
|
82
|
+
|
|
83
|
+
## GitHub Actions configuration
|
|
84
|
+
|
|
85
|
+
The key to deploying from a subdirectory is setting `working-directory` on your
|
|
86
|
+
job steps so the Zuplo CLI runs in the correct folder.
|
|
87
|
+
|
|
88
|
+
### Basic deployment
|
|
89
|
+
|
|
90
|
+
```yaml title=".github/workflows/deploy.yaml"
|
|
91
|
+
name: Deploy Zuplo API
|
|
92
|
+
|
|
93
|
+
on:
|
|
94
|
+
push:
|
|
95
|
+
branches:
|
|
96
|
+
- main
|
|
97
|
+
paths:
|
|
98
|
+
- "packages/api-gateway/**"
|
|
99
|
+
|
|
100
|
+
jobs:
|
|
101
|
+
deploy:
|
|
102
|
+
runs-on: ubuntu-latest
|
|
103
|
+
defaults:
|
|
104
|
+
run:
|
|
105
|
+
working-directory: packages/api-gateway
|
|
106
|
+
steps:
|
|
107
|
+
- uses: actions/checkout@v4
|
|
108
|
+
|
|
109
|
+
- uses: actions/setup-node@v4
|
|
110
|
+
with:
|
|
111
|
+
node-version: 20
|
|
112
|
+
|
|
113
|
+
- name: Install dependencies
|
|
114
|
+
run: npm install
|
|
115
|
+
|
|
116
|
+
- name: Deploy to Zuplo
|
|
117
|
+
run: npx zuplo deploy --api-key "$ZUPLO_API_KEY"
|
|
118
|
+
env:
|
|
119
|
+
ZUPLO_API_KEY: ${{ secrets.ZUPLO_API_KEY }}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
This workflow:
|
|
123
|
+
|
|
124
|
+
1. Triggers only when files in the Zuplo subdirectory change (via the `paths`
|
|
125
|
+
filter)
|
|
126
|
+
2. Sets `working-directory` at the job level so every `run` step executes inside
|
|
127
|
+
the Zuplo project folder
|
|
128
|
+
3. Installs dependencies and deploys using the Zuplo CLI
|
|
129
|
+
|
|
130
|
+
:::tip
|
|
131
|
+
|
|
132
|
+
Set `working-directory` at the `defaults.run` level of the job rather than on
|
|
133
|
+
each individual step. This avoids accidentally running CLI commands from the
|
|
134
|
+
repository root.
|
|
135
|
+
|
|
136
|
+
:::
|
|
137
|
+
|
|
138
|
+
### PR preview environments
|
|
139
|
+
|
|
140
|
+
For preview deployments on pull requests, combine `working-directory` with
|
|
141
|
+
environment cleanup:
|
|
142
|
+
|
|
143
|
+
```yaml title=".github/workflows/pr-preview.yaml"
|
|
144
|
+
name: PR Preview
|
|
145
|
+
|
|
146
|
+
on:
|
|
147
|
+
pull_request:
|
|
148
|
+
types: [opened, synchronize, reopened, closed]
|
|
149
|
+
paths:
|
|
150
|
+
- "packages/api-gateway/**"
|
|
151
|
+
|
|
152
|
+
jobs:
|
|
153
|
+
deploy:
|
|
154
|
+
if: github.event.action != 'closed'
|
|
155
|
+
runs-on: ubuntu-latest
|
|
156
|
+
defaults:
|
|
157
|
+
run:
|
|
158
|
+
working-directory: packages/api-gateway
|
|
159
|
+
env:
|
|
160
|
+
ZUPLO_API_KEY: ${{ secrets.ZUPLO_API_KEY }}
|
|
161
|
+
steps:
|
|
162
|
+
- uses: actions/checkout@v4
|
|
163
|
+
|
|
164
|
+
- uses: actions/setup-node@v4
|
|
165
|
+
with:
|
|
166
|
+
node-version: 20
|
|
167
|
+
|
|
168
|
+
- name: Install dependencies
|
|
169
|
+
run: npm install
|
|
170
|
+
|
|
171
|
+
- name: Deploy to Zuplo
|
|
172
|
+
id: deploy
|
|
173
|
+
shell: bash
|
|
174
|
+
run: |
|
|
175
|
+
OUTPUT=$(npx zuplo deploy --api-key "$ZUPLO_API_KEY" 2>&1)
|
|
176
|
+
echo "$OUTPUT"
|
|
177
|
+
DEPLOYMENT_URL=$(echo "$OUTPUT" | grep -oP 'Deployed to \K(https://[^ ]+)')
|
|
178
|
+
echo "url=$DEPLOYMENT_URL" >> $GITHUB_OUTPUT
|
|
179
|
+
|
|
180
|
+
- name: Comment PR with deployment URL
|
|
181
|
+
uses: actions/github-script@v7
|
|
182
|
+
with:
|
|
183
|
+
script: |
|
|
184
|
+
github.rest.issues.createComment({
|
|
185
|
+
issue_number: context.issue.number,
|
|
186
|
+
owner: context.repo.owner,
|
|
187
|
+
repo: context.repo.repo,
|
|
188
|
+
body: `🚀 Deployed to: ${{ steps.deploy.outputs.url }}`
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
cleanup:
|
|
192
|
+
if: github.event.action == 'closed'
|
|
193
|
+
runs-on: ubuntu-latest
|
|
194
|
+
defaults:
|
|
195
|
+
run:
|
|
196
|
+
working-directory: packages/api-gateway
|
|
197
|
+
env:
|
|
198
|
+
ZUPLO_API_KEY: ${{ secrets.ZUPLO_API_KEY }}
|
|
199
|
+
steps:
|
|
200
|
+
- uses: actions/checkout@v4
|
|
201
|
+
|
|
202
|
+
- uses: actions/setup-node@v4
|
|
203
|
+
with:
|
|
204
|
+
node-version: 20
|
|
205
|
+
|
|
206
|
+
- name: Install dependencies
|
|
207
|
+
run: npm install
|
|
208
|
+
|
|
209
|
+
- name: Delete environment
|
|
210
|
+
run: |
|
|
211
|
+
BRANCH_NAME="${{ github.head_ref }}"
|
|
212
|
+
ENV_NAME="${BRANCH_NAME//\//-}"
|
|
213
|
+
npx zuplo delete \
|
|
214
|
+
--environment "$ENV_NAME" \
|
|
215
|
+
--api-key "$ZUPLO_API_KEY" \
|
|
216
|
+
--wait
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Secrets and environment variables
|
|
220
|
+
|
|
221
|
+
Store your Zuplo API key as a GitHub Actions secret:
|
|
222
|
+
|
|
223
|
+
1. Go to [portal.zuplo.com](https://portal.zuplo.com) and navigate to your
|
|
224
|
+
account **Settings** > **API Keys**
|
|
225
|
+
2. Copy the API key
|
|
226
|
+
3. In your GitHub repository, go to **Settings** > **Secrets and variables** >
|
|
227
|
+
**Actions**
|
|
228
|
+
4. Create a secret named `ZUPLO_API_KEY`
|
|
229
|
+
|
|
230
|
+
For more details on CI/CD authentication, see the
|
|
231
|
+
[Custom CI/CD](./custom-ci-cd.mdx) guide.
|
|
232
|
+
|
|
233
|
+
:::note
|
|
234
|
+
|
|
235
|
+
The examples above use GitHub Actions. If you use GitLab, Bitbucket, Azure
|
|
236
|
+
DevOps, or CircleCI, the same principles apply — set the working directory to
|
|
237
|
+
your Zuplo subdirectory and run `npx zuplo deploy`. See the provider-specific
|
|
238
|
+
guides under [Custom CI/CD Pipelines](./custom-ci-cd.mdx) for detailed workflow
|
|
239
|
+
examples.
|
|
240
|
+
|
|
241
|
+
:::
|
|
242
|
+
|
|
243
|
+
## Local development
|
|
244
|
+
|
|
245
|
+
To run local development from a monorepo subdirectory, navigate to the Zuplo
|
|
246
|
+
project folder and start the development server:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
cd packages/api-gateway
|
|
250
|
+
npm install
|
|
251
|
+
npx zuplo dev
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
The `zuplo dev` command looks for `zuplo.jsonc` and the `config/` directory in
|
|
255
|
+
the current working directory. Running it from the repository root instead of
|
|
256
|
+
the Zuplo subdirectory causes resolution errors.
|
|
257
|
+
|
|
258
|
+
If you use npm or pnpm workspaces, you can add a script to your root
|
|
259
|
+
`package.json` to run local development from the workspace:
|
|
260
|
+
|
|
261
|
+
```json title="Root package.json"
|
|
262
|
+
{
|
|
263
|
+
"scripts": {
|
|
264
|
+
"dev:api-gateway": "npm -w packages/api-gateway run dev"
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
For troubleshooting local development issues, see the
|
|
270
|
+
[local development troubleshooting guide](./local-development-troubleshooting.mdx).
|
|
271
|
+
|
|
272
|
+
## Troubleshooting
|
|
273
|
+
|
|
274
|
+
### Schema validation errors in policies.json
|
|
275
|
+
|
|
276
|
+
**Error**: `zuplo deploy` exits with code 1 and reports schema validation
|
|
277
|
+
errors.
|
|
278
|
+
|
|
279
|
+
This typically happens when `policies.json` is missing required fields. Every
|
|
280
|
+
policy entry must include the full `handler` object:
|
|
281
|
+
|
|
282
|
+
```json
|
|
283
|
+
{
|
|
284
|
+
"name": "my-policy",
|
|
285
|
+
"policyType": "rate-limit-inbound",
|
|
286
|
+
"handler": {
|
|
287
|
+
"export": "RateLimitInboundPolicy",
|
|
288
|
+
"module": "$import(@zuplo/runtime)",
|
|
289
|
+
"options": {}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Common causes:**
|
|
295
|
+
|
|
296
|
+
- Missing the `handler` block entirely
|
|
297
|
+
- Missing `export` or `module` inside the `handler` block
|
|
298
|
+
- Using an invalid `policyType` value
|
|
299
|
+
|
|
300
|
+
### "Could not resolve .zuplo/worker.ts"
|
|
301
|
+
|
|
302
|
+
**Error**: `npx zuplo dev` fails with "Could not resolve .zuplo/worker.ts".
|
|
303
|
+
|
|
304
|
+
This error occurs when the CLI can't locate the project files. Verify that:
|
|
305
|
+
|
|
306
|
+
- You're running the command from the Zuplo project directory (not the monorepo
|
|
307
|
+
root)
|
|
308
|
+
- The `zuplo.jsonc` file exists in the current directory
|
|
309
|
+
- Dependencies are installed (`npm install`)
|
|
310
|
+
|
|
311
|
+
### Deployment health check timeouts
|
|
312
|
+
|
|
313
|
+
**Error**: The build succeeds but the deployment fails with a health check
|
|
314
|
+
timeout.
|
|
315
|
+
|
|
316
|
+
After the CLI builds and uploads your project, Zuplo runs a health check against
|
|
317
|
+
the deployed environment. Timeouts can indicate:
|
|
318
|
+
|
|
319
|
+
- **Invalid route configuration** — Check `config/routes.oas.json` for syntax
|
|
320
|
+
errors or invalid handler references
|
|
321
|
+
- **Missing modules** — Verify that any custom handler modules referenced in
|
|
322
|
+
`routes.oas.json` or `policies.json` exist in the `modules/` directory
|
|
323
|
+
- **Missing environment variables** — If your policies or handlers reference
|
|
324
|
+
environment variables with `$env(VAR_NAME)`, make sure those variables are
|
|
325
|
+
configured in the Zuplo portal under your project's
|
|
326
|
+
[environment variables](./environment-variables.mdx)
|
|
327
|
+
|
|
328
|
+
### Build succeeds but deploy fails
|
|
329
|
+
|
|
330
|
+
If `npm install` and the build step complete successfully but `zuplo deploy`
|
|
331
|
+
fails:
|
|
332
|
+
|
|
333
|
+
- Confirm your `ZUPLO_API_KEY` is set correctly in your CI/CD secrets
|
|
334
|
+
- Verify the project is correctly linked by running `npx zuplo link` or by
|
|
335
|
+
passing explicit `--project` and `--account` flags to `zuplo deploy`
|
|
336
|
+
- Check that `working-directory` points to the correct subdirectory in your
|
|
337
|
+
workflow file
|
|
338
|
+
|
|
339
|
+
## Next steps
|
|
340
|
+
|
|
341
|
+
Once your monorepo deployment is working, consider these follow-up tasks:
|
|
342
|
+
|
|
343
|
+
- **Set up branch-based environments** for staging and production with
|
|
344
|
+
[Branch-Based Deployments](./branch-based-deployments.mdx)
|
|
345
|
+
- **Add API tests** to your CI pipeline using the patterns in
|
|
346
|
+
[Custom CI/CD Pipelines](./custom-ci-cd.mdx)
|
|
347
|
+
- **Explore the full CLI** for additional commands in the
|
|
348
|
+
[Zuplo CLI Reference](../cli/overview.mdx)
|
|
349
|
+
- **Configure local development** to work alongside your other services with
|
|
350
|
+
[Local Development](./local-development.mdx)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Handling Multiple Authentication Policies
|
|
3
|
+
sidebar_label: Multiple Auth Policies
|
|
4
|
+
description:
|
|
5
|
+
Learn how to configure multiple authentication methods like JWT and API Key on
|
|
6
|
+
a single API route in Zuplo.
|
|
7
|
+
tags:
|
|
8
|
+
- authentication
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Sometimes multiple types of authentication are needed on an API. For example, an
|
|
12
|
+
API could support JWT Authentication and API Key authentication or two different
|
|
13
|
+
OAuth providers (for example Azure AD for employees and Auth0 for partners).
|
|
14
|
+
Configuring multiple policies in Zuplo can be done in several ways.
|
|
15
|
+
|
|
16
|
+
## JWT and API Key Authentication
|
|
17
|
+
|
|
18
|
+
JWT and API Key authentication can be handled by adding three policies to a
|
|
19
|
+
route (or using [composite policies](../policies/composite-inbound.mdx) to keep
|
|
20
|
+
everything organized). The three policies required are:
|
|
21
|
+
|
|
22
|
+
1. [API Key Authentication Policy](../policies/api-key-inbound.mdx)
|
|
23
|
+
1. [Any JWT Authentication Policy](../policies/open-id-jwt-auth-inbound.mdx)
|
|
24
|
+
1. [A Custom Policy](../policies/custom-code-inbound.mdx)
|
|
25
|
+
|
|
26
|
+
:::warning
|
|
27
|
+
|
|
28
|
+
The order of these policies is critical. Placing them in the wrong order can
|
|
29
|
+
cause errors or lead to security issues.
|
|
30
|
+
|
|
31
|
+
:::
|
|
32
|
+
|
|
33
|
+
All of the Zuplo built-in authentication policies have an option called
|
|
34
|
+
`allowUnauthenticatedRequests`. This option is `true` by default, meaning for an
|
|
35
|
+
anonymous request, the policy will immediately return a response with a 401:
|
|
36
|
+
Unauthorized status. **In the case of multiple policies, this setting must be
|
|
37
|
+
`false`.** This means that even if the request isn't authenticated, the policy
|
|
38
|
+
will still let the request through.
|
|
39
|
+
|
|
40
|
+
:::tip
|
|
41
|
+
|
|
42
|
+
The option `allowUnauthenticatedRequests` can also be used to make a route work
|
|
43
|
+
for both authenticated and anonymous users. Allowing unauthenticated requests on
|
|
44
|
+
a public API allows modifying behaviors based on the type of user. For example,
|
|
45
|
+
rate limits could be set higher for authenticated users.
|
|
46
|
+
|
|
47
|
+
:::
|
|
48
|
+
|
|
49
|
+
In the route that handles multiple authentication policies, add the API Key
|
|
50
|
+
Authentication policy and the JWT Authentication policy of your choice (for
|
|
51
|
+
example Auth0, Okta, Cognito, etc.). For both policies, set the option
|
|
52
|
+
`allowUnauthenticatedRequests` to `true`.
|
|
53
|
+
|
|
54
|
+
Configure the other options as usual.
|
|
55
|
+
|
|
56
|
+
Finally, if the route **requires** authentication, a third policy is necessary
|
|
57
|
+
to enforce that after both authentication policies run, the request has been
|
|
58
|
+
authenticated. Generally, this policy would come immediately **after** the two
|
|
59
|
+
authentication policies.
|
|
60
|
+
|
|
61
|
+
To enforce authentication, check that the value of `request.user.sub` is as
|
|
62
|
+
expected. Additional checks can be added as your API requires. Below is an
|
|
63
|
+
example of a simple authentication check policy.
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
67
|
+
|
|
68
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
69
|
+
if (!request.user?.sub) {
|
|
70
|
+
return new Response("Unauthorized", { status: 401 });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Multiple JWT Authentication Policies
|
|
76
|
+
|
|
77
|
+
Multiple JWT authentication policies is slightly more challenging than adding
|
|
78
|
+
JWT and API key authentication because JWT authentication performs validation on
|
|
79
|
+
the token value. In some cases, the easiest approach is to write a custom policy
|
|
80
|
+
that checks the issuer of the token first then applies validation appropriate
|
|
81
|
+
for each issuer.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Non-Standard Ports
|
|
3
|
+
description:
|
|
4
|
+
Learn how to make requests to non-standard ports in Zuplo with compatibility
|
|
5
|
+
dates 2024-09-02 or later.
|
|
6
|
+
tags:
|
|
7
|
+
- deployment
|
|
8
|
+
- request-handling
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Zuplo supports making requests to non-standard ports when your runtime is
|
|
12
|
+
configured with a
|
|
13
|
+
[compatibility date](../programmable-api/compatibility-dates.mdx) of
|
|
14
|
+
[2024-09-02](../programmable-api/compatibility-dates.mdx#2024-09-02) or later.
|
|
15
|
+
|
|
16
|
+
## Making a Request to a Non-Supported Port
|
|
17
|
+
|
|
18
|
+
Making requests to non-standard ports can be done using the built in handlers or
|
|
19
|
+
`fetch` API. Simply set the URL to use the port, for example
|
|
20
|
+
`http://example.com:8080`.
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
const response = await fetch("http://example.com:8080");
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Older Compatibility Dates
|
|
27
|
+
|
|
28
|
+
Before [2024-09-02](../programmable-api/compatibility-dates.mdx#2024-09-02),
|
|
29
|
+
Zuplo didn't support making requests to non-standard ports. If you make a
|
|
30
|
+
request to a non-standard port on an older runtime, the port will be ignored.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: OAuth Authentication
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Zuplo comes with build-in and extensible OAuth policies out of the box. These
|
|
6
|
+
policies allow you to easily authenticate requests using popular services like
|
|
7
|
+
Auth0, AWS Cognito, and more.
|
|
8
|
+
|
|
9
|
+
Some of the built-in policies are listed below.
|
|
10
|
+
|
|
11
|
+
- [OpenId JWT Authentication Policy](../policies/open-id-jwt-auth-inbound.mdx)
|
|
12
|
+
- [Auth0 JWT Authentication Policy](../policies/auth0-jwt-auth-inbound.mdx)
|
|
13
|
+
- [Okta JWT Authentication Policy](../policies/okta-jwt-auth-inbound.mdx)
|
|
14
|
+
- [AWS Cognito JWT Authentication Policy](../policies/cognito-jwt-auth-inbound.mdx)
|
|
15
|
+
|
|
16
|
+
## Request User
|
|
17
|
+
|
|
18
|
+
The OAuth policies will validate and decode the incoming JWT and add the data
|
|
19
|
+
from the JWT. If the user is successfully authenticated the claims of their JWT
|
|
20
|
+
`access_token` will be available on the `request.user` object.
|
|
21
|
+
|
|
22
|
+
The user's identifier (also known as the `sub` or subject) is available on the
|
|
23
|
+
`request.user.sub` property. Other claims can be found on the
|
|
24
|
+
`request.user.data` object as demonstrated below.
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
async function (request: ZuploRequest, context: ZuploContext) {
|
|
28
|
+
// Log the user's sub
|
|
29
|
+
context.log.debug(`User ${request.user.sub} is authenticated`)
|
|
30
|
+
|
|
31
|
+
// Check a custom claim
|
|
32
|
+
if (request.user.data["orgId"] === "1234") {
|
|
33
|
+
// do something
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Authorization Header
|
|
39
|
+
|
|
40
|
+
The built-in policies will validate the incoming JWT on the Authorization
|
|
41
|
+
header. By default, the Authorization header will be left on the request and
|
|
42
|
+
forwarded on to your backend.
|
|
43
|
+
|
|
44
|
+
It isn't recommended to validate the Access Token on both the gateway and the
|
|
45
|
+
backend. However, by forwarding the header to the backend you can transition
|
|
46
|
+
your API from doing authentication on your backend to authorizing at the
|
|
47
|
+
Gateway. See
|
|
48
|
+
[this blog post](https://zuplo.com/blog/2023/07/16/zero-downtime-api-auth-migration)
|
|
49
|
+
for more details.
|
|
50
|
+
|
|
51
|
+
If you would like to remove the authorization header after you use one of the
|
|
52
|
+
authorization policies, simply add the
|
|
53
|
+
[Remove Request Headers](/docs/policies/remove-headers-inbound) policy after the
|
|
54
|
+
authorization policy and set it to remove the `Authorization` header.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: OpenAPI Server URLs in Zuplo
|
|
3
|
+
sidebar_label: OpenAPI Server URLs
|
|
4
|
+
description:
|
|
5
|
+
Learn how Zuplo automatically manages server URLs in OpenAPI specs across
|
|
6
|
+
environments and custom domains.
|
|
7
|
+
tags:
|
|
8
|
+
- openapi
|
|
9
|
+
- deployment
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
When working with OpenAPI specifications in Zuplo, it's important to understand
|
|
13
|
+
how server URLs are handled across different environments.
|
|
14
|
+
|
|
15
|
+
## Automatic Server URL Overwriting
|
|
16
|
+
|
|
17
|
+
Zuplo automatically overwrites the server URLs in your OpenAPI specification
|
|
18
|
+
files with the URL of the current environment. This automatic behavior ensures
|
|
19
|
+
that:
|
|
20
|
+
|
|
21
|
+
- You don't need to manually update server URLs when creating new branches
|
|
22
|
+
- Each environment uses its correct API endpoint
|
|
23
|
+
- The developer portal always displays the appropriate URL for that environment
|
|
24
|
+
|
|
25
|
+
## Default Behavior
|
|
26
|
+
|
|
27
|
+
By default, every Zuplo environment receives its own unique API URL in the
|
|
28
|
+
format:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
https://[environment-name].zuplo.app
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
This URL is automatically reflected in:
|
|
35
|
+
|
|
36
|
+
- The OpenAPI specification file
|
|
37
|
+
- The developer portal for that environment
|
|
38
|
+
- All API documentation
|
|
39
|
+
|
|
40
|
+
## Custom Domains
|
|
41
|
+
|
|
42
|
+
If you need to use a [custom domain](./custom-domains.mdx) instead of the
|
|
43
|
+
default Zuplo URL, you can configure one on a per-environment basis. When a
|
|
44
|
+
custom domain is configured:
|
|
45
|
+
|
|
46
|
+
- The OpenAPI server URL will show your custom domain (for example,
|
|
47
|
+
`developer-dev.accuweather.com`)
|
|
48
|
+
- The developer portal will display the custom domain
|
|
49
|
+
- All documentation will reflect the custom domain URL
|
|
50
|
+
|
|
51
|
+
## Important Considerations
|
|
52
|
+
|
|
53
|
+
- The server URL specified in your original OpenAPI file is never used directly
|
|
54
|
+
- Each environment maintains its own server URL configuration
|
|
55
|
+
- Changes to custom domains require configuration through Zuplo support or the
|
|
56
|
+
API
|
|
57
|
+
- Cache invalidation may be needed when switching from direct Zuplo URLs to
|
|
58
|
+
custom domains served through CDNs
|
|
59
|
+
|
|
60
|
+
For assistance with custom domain configuration, please contact Zuplo support.
|