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,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitHub Actions: Tag-Based Releases"
|
|
3
|
+
sidebar_label: Tag-Based Releases
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Deploy only when you explicitly tag a release. This gives you complete control
|
|
7
|
+
over what reaches production—no accidental deployments from work in progress.
|
|
8
|
+
|
|
9
|
+
```yaml title=".github/workflows/tag-deploy.yaml"
|
|
10
|
+
name: Tag-Based Deploy
|
|
11
|
+
|
|
12
|
+
on:
|
|
13
|
+
push:
|
|
14
|
+
tags:
|
|
15
|
+
- "v*"
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
deploy:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
env:
|
|
21
|
+
ZUPLO_API_KEY: ${{ secrets.ZUPLO_API_KEY }}
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: 20
|
|
29
|
+
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: npm install
|
|
32
|
+
|
|
33
|
+
- name: Deploy with tag as environment name
|
|
34
|
+
run: |
|
|
35
|
+
# Extract tag name (e.g., v1.2.3 -> v1.2.3)
|
|
36
|
+
TAG_NAME="${GITHUB_REF#refs/tags/}"
|
|
37
|
+
|
|
38
|
+
npx zuplo deploy \
|
|
39
|
+
--api-key "$ZUPLO_API_KEY" \
|
|
40
|
+
--environment "$TAG_NAME"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This workflow:
|
|
44
|
+
|
|
45
|
+
1. Triggers only when you push a tag matching `v*` (like `v1.0.0`, `v2.1.3`)
|
|
46
|
+
2. Creates an environment named after the tag
|
|
47
|
+
3. Deploys your API to that environment
|
|
48
|
+
|
|
49
|
+
## Creating a Release
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Tag the current commit
|
|
53
|
+
git tag v1.0.0
|
|
54
|
+
|
|
55
|
+
# Push the tag to trigger deployment
|
|
56
|
+
git push origin v1.0.0
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Deploying to Production
|
|
60
|
+
|
|
61
|
+
If you want tags to update your production environment instead of creating new
|
|
62
|
+
environments:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
- name: Deploy to production
|
|
66
|
+
run: |
|
|
67
|
+
npx zuplo deploy \
|
|
68
|
+
--api-key "$ZUPLO_API_KEY" \
|
|
69
|
+
--environment main # or your production environment name
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## With GitHub Releases
|
|
73
|
+
|
|
74
|
+
Combine with GitHub Releases for a complete release workflow:
|
|
75
|
+
|
|
76
|
+
```yaml
|
|
77
|
+
on:
|
|
78
|
+
release:
|
|
79
|
+
types: [published]
|
|
80
|
+
|
|
81
|
+
jobs:
|
|
82
|
+
deploy:
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
steps:
|
|
85
|
+
# ... setup steps ...
|
|
86
|
+
|
|
87
|
+
- name: Deploy release
|
|
88
|
+
run: |
|
|
89
|
+
npx zuplo deploy \
|
|
90
|
+
--api-key "$ZUPLO_API_KEY" \
|
|
91
|
+
--environment "${{ github.event.release.tag_name }}"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Next Steps
|
|
95
|
+
|
|
96
|
+
- Add [multi-stage deployment](./multi-stage-deployment.mdx) with staging
|
|
97
|
+
validation
|
|
98
|
+
- Set up [automatic cleanup](./cleanup-on-branch-delete.mdx) for old
|
|
99
|
+
environments
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitLab CI/CD: Basic Deployment"
|
|
3
|
+
sidebar_label: Basic Deployment
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The simplest pipeline deploys your API to Zuplo on every push to main.
|
|
7
|
+
|
|
8
|
+
```yaml title=".gitlab-ci.yml"
|
|
9
|
+
image: node:20
|
|
10
|
+
|
|
11
|
+
stages:
|
|
12
|
+
- deploy
|
|
13
|
+
|
|
14
|
+
deploy:
|
|
15
|
+
stage: deploy
|
|
16
|
+
script:
|
|
17
|
+
- npm install
|
|
18
|
+
- npx zuplo deploy --api-key "$ZUPLO_API_KEY"
|
|
19
|
+
only:
|
|
20
|
+
- main
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Store `ZUPLO_API_KEY` in **Settings** > **CI/CD** > **Variables**.
|
|
24
|
+
|
|
25
|
+
## Next Steps
|
|
26
|
+
|
|
27
|
+
- Add [automated testing](./deploy-and-test.mdx) after deployment
|
|
28
|
+
- Set up [MR preview environments](./mr-preview-environments.mdx)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitLab CI/CD: Deploy and Test"
|
|
3
|
+
sidebar_label: Deploy and Test
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Run your test suite against the deployed environment to validate changes.
|
|
7
|
+
|
|
8
|
+
```yaml title=".gitlab-ci.yml"
|
|
9
|
+
image: node:20
|
|
10
|
+
|
|
11
|
+
stages:
|
|
12
|
+
- deploy
|
|
13
|
+
- test
|
|
14
|
+
|
|
15
|
+
deploy:
|
|
16
|
+
stage: deploy
|
|
17
|
+
script:
|
|
18
|
+
- npm install
|
|
19
|
+
- npx zuplo deploy --api-key "$ZUPLO_API_KEY" 2>&1 | tee ./DEPLOYMENT_STDOUT
|
|
20
|
+
- echo "DEPLOYMENT_URL=$(grep -oP 'Deployed to \K(https://[^ ]+)'
|
|
21
|
+
./DEPLOYMENT_STDOUT)" >> deploy.env
|
|
22
|
+
artifacts:
|
|
23
|
+
reports:
|
|
24
|
+
dotenv: deploy.env
|
|
25
|
+
|
|
26
|
+
test:
|
|
27
|
+
stage: test
|
|
28
|
+
needs:
|
|
29
|
+
- deploy
|
|
30
|
+
script:
|
|
31
|
+
- npm install
|
|
32
|
+
- npx zuplo test --endpoint "$DEPLOYMENT_URL"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
This pipeline:
|
|
36
|
+
|
|
37
|
+
1. Deploys to Zuplo and captures the output
|
|
38
|
+
2. Extracts the deployment URL and passes it to the test stage
|
|
39
|
+
3. Runs tests against the deployed environment
|
|
40
|
+
|
|
41
|
+
## Next Steps
|
|
42
|
+
|
|
43
|
+
- Add [MR preview environments](./mr-preview-environments.mdx) with cleanup
|
|
44
|
+
- Run [local tests](./local-testing.mdx) before deploying
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitLab CI/CD: Local Testing in CI"
|
|
3
|
+
sidebar_label: Local Testing in CI
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Test against a local Zuplo server before deploying anywhere.
|
|
7
|
+
|
|
8
|
+
```yaml title=".gitlab-ci.yml"
|
|
9
|
+
image: node:20
|
|
10
|
+
|
|
11
|
+
stages:
|
|
12
|
+
- test
|
|
13
|
+
- deploy
|
|
14
|
+
|
|
15
|
+
local-test:
|
|
16
|
+
stage: test
|
|
17
|
+
script:
|
|
18
|
+
- npm install
|
|
19
|
+
- npx zuplo dev &
|
|
20
|
+
- sleep 10
|
|
21
|
+
- npx zuplo test --endpoint http://localhost:9000
|
|
22
|
+
- kill %1
|
|
23
|
+
|
|
24
|
+
deploy:
|
|
25
|
+
stage: deploy
|
|
26
|
+
needs:
|
|
27
|
+
- local-test
|
|
28
|
+
script:
|
|
29
|
+
- npm install
|
|
30
|
+
- npx zuplo deploy --api-key "$ZUPLO_API_KEY"
|
|
31
|
+
only:
|
|
32
|
+
- main
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Local tests run first. Only if they pass does deployment proceed.
|
|
36
|
+
|
|
37
|
+
## Next Steps
|
|
38
|
+
|
|
39
|
+
- Add [multi-stage deployment](./multi-stage-deployment.mdx) with staging
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitLab CI/CD: MR Preview Environments"
|
|
3
|
+
sidebar_label: MR Preview Environments
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Deploy preview environments for merge requests and clean up when they close.
|
|
7
|
+
|
|
8
|
+
```yaml title=".gitlab-ci.yml"
|
|
9
|
+
image: node:20
|
|
10
|
+
|
|
11
|
+
stages:
|
|
12
|
+
- deploy
|
|
13
|
+
- test
|
|
14
|
+
- cleanup
|
|
15
|
+
|
|
16
|
+
deploy:
|
|
17
|
+
stage: deploy
|
|
18
|
+
script:
|
|
19
|
+
- npm install
|
|
20
|
+
- npx zuplo deploy --api-key "$ZUPLO_API_KEY" 2>&1 | tee ./DEPLOYMENT_STDOUT
|
|
21
|
+
- echo "DEPLOYMENT_URL=$(grep -oP 'Deployed to \K(https://[^ ]+)'
|
|
22
|
+
./DEPLOYMENT_STDOUT)" >> deploy.env
|
|
23
|
+
artifacts:
|
|
24
|
+
reports:
|
|
25
|
+
dotenv: deploy.env
|
|
26
|
+
|
|
27
|
+
test:
|
|
28
|
+
stage: test
|
|
29
|
+
needs:
|
|
30
|
+
- deploy
|
|
31
|
+
script:
|
|
32
|
+
- npm install
|
|
33
|
+
- npx zuplo test --endpoint "$DEPLOYMENT_URL"
|
|
34
|
+
|
|
35
|
+
cleanup:
|
|
36
|
+
stage: cleanup
|
|
37
|
+
needs:
|
|
38
|
+
- test
|
|
39
|
+
script:
|
|
40
|
+
- npm install
|
|
41
|
+
- npx zuplo delete --url "$DEPLOYMENT_URL" --api-key "$ZUPLO_API_KEY" --wait
|
|
42
|
+
rules:
|
|
43
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The cleanup job only runs for merge request pipelines, deleting the preview
|
|
47
|
+
environment after tests pass.
|
|
48
|
+
|
|
49
|
+
## Next Steps
|
|
50
|
+
|
|
51
|
+
- Implement [multi-stage deployment](./multi-stage-deployment.mdx) for
|
|
52
|
+
production
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitLab CI/CD: Multi-Stage Deployment"
|
|
3
|
+
sidebar_label: Multi-Stage Deployment
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Deploy to staging, test, then promote to production with approval.
|
|
7
|
+
|
|
8
|
+
```yaml title=".gitlab-ci.yml"
|
|
9
|
+
image: node:20
|
|
10
|
+
|
|
11
|
+
stages:
|
|
12
|
+
- deploy-staging
|
|
13
|
+
- test
|
|
14
|
+
- deploy-production
|
|
15
|
+
|
|
16
|
+
deploy-staging:
|
|
17
|
+
stage: deploy-staging
|
|
18
|
+
script:
|
|
19
|
+
- npm install
|
|
20
|
+
- npx zuplo deploy --api-key "$ZUPLO_API_KEY" --environment staging 2>&1 |
|
|
21
|
+
tee ./DEPLOYMENT_STDOUT
|
|
22
|
+
- echo "STAGING_URL=$(grep -oP 'Deployed to \K(https://[^ ]+)'
|
|
23
|
+
./DEPLOYMENT_STDOUT)" >> staging.env
|
|
24
|
+
artifacts:
|
|
25
|
+
reports:
|
|
26
|
+
dotenv: staging.env
|
|
27
|
+
only:
|
|
28
|
+
- main
|
|
29
|
+
|
|
30
|
+
test-staging:
|
|
31
|
+
stage: test
|
|
32
|
+
needs:
|
|
33
|
+
- deploy-staging
|
|
34
|
+
script:
|
|
35
|
+
- npm install
|
|
36
|
+
- npx zuplo test --endpoint "$STAGING_URL"
|
|
37
|
+
only:
|
|
38
|
+
- main
|
|
39
|
+
|
|
40
|
+
deploy-production:
|
|
41
|
+
stage: deploy-production
|
|
42
|
+
needs:
|
|
43
|
+
- test-staging
|
|
44
|
+
script:
|
|
45
|
+
- npm install
|
|
46
|
+
- npx zuplo deploy --api-key "$ZUPLO_API_KEY" --environment production
|
|
47
|
+
only:
|
|
48
|
+
- main
|
|
49
|
+
when: manual
|
|
50
|
+
environment:
|
|
51
|
+
name: production
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Setting Up Approval
|
|
55
|
+
|
|
56
|
+
The `when: manual` setting requires someone to click "Play" in the GitLab UI to
|
|
57
|
+
trigger production deployment.
|
|
58
|
+
|
|
59
|
+
For more control, use
|
|
60
|
+
[Protected Environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html):
|
|
61
|
+
|
|
62
|
+
1. Go to **Settings** > **CI/CD** > **Protected environments**
|
|
63
|
+
2. Add `production` as a protected environment
|
|
64
|
+
3. Specify which users or groups can deploy
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitLab CI/CD: Tag-Based Releases"
|
|
3
|
+
sidebar_label: Tag-Based Releases
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Deploy only when tags are pushed for controlled releases.
|
|
7
|
+
|
|
8
|
+
```yaml title=".gitlab-ci.yml"
|
|
9
|
+
image: node:20
|
|
10
|
+
|
|
11
|
+
stages:
|
|
12
|
+
- deploy
|
|
13
|
+
|
|
14
|
+
deploy:
|
|
15
|
+
stage: deploy
|
|
16
|
+
script:
|
|
17
|
+
- npm install
|
|
18
|
+
- npx zuplo deploy --api-key "$ZUPLO_API_KEY" --environment "$CI_COMMIT_TAG"
|
|
19
|
+
only:
|
|
20
|
+
- tags
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This pipeline triggers only on tags and creates an environment named after the
|
|
24
|
+
tag (e.g., `v1.0.0`).
|
|
25
|
+
|
|
26
|
+
## Next Steps
|
|
27
|
+
|
|
28
|
+
- Add [multi-stage deployment](./multi-stage-deployment.mdx) with approval
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Composite Policy: Limitations and Patterns"
|
|
3
|
+
sidebar_label: Composite Policy Patterns
|
|
4
|
+
description:
|
|
5
|
+
Understand the limitations of composite policies in Zuplo, including nesting
|
|
6
|
+
restrictions, and learn recommended patterns for reusing policy chains across
|
|
7
|
+
routes.
|
|
8
|
+
tags:
|
|
9
|
+
- policies
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
Composite policies let you group multiple policies into a single reusable unit
|
|
13
|
+
that you can apply across routes. While they simplify configuration and keep
|
|
14
|
+
your `policies.json` organized, there are important limitations to understand —
|
|
15
|
+
especially around nesting composite policies inside other composite policies.
|
|
16
|
+
|
|
17
|
+
This guide covers those limitations, explains the error messages you might
|
|
18
|
+
encounter, and provides recommended patterns for scaling policy management.
|
|
19
|
+
|
|
20
|
+
## How composite policies work
|
|
21
|
+
|
|
22
|
+
A composite policy references other policies by their `name` as defined in your
|
|
23
|
+
`policies.json` file. When a route uses a composite policy, Zuplo executes each
|
|
24
|
+
referenced policy in order, just as if you had listed them individually on the
|
|
25
|
+
route.
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"name": "security-group",
|
|
30
|
+
"policyType": "composite-inbound",
|
|
31
|
+
"handler": {
|
|
32
|
+
"export": "CompositeInboundPolicy",
|
|
33
|
+
"module": "$import(@zuplo/runtime)",
|
|
34
|
+
"options": {
|
|
35
|
+
"policies": ["api-key-auth", "rate-limit", "request-validation"]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
In this example, any route that references `security-group` runs the
|
|
42
|
+
`api-key-auth`, `rate-limit`, and `request-validation` policies in sequence.
|
|
43
|
+
|
|
44
|
+
For full configuration details, see the
|
|
45
|
+
[Composite Inbound Policy](../policies/composite-inbound.mdx) and
|
|
46
|
+
[Composite Outbound Policy](../policies/composite-outbound.mdx) reference pages.
|
|
47
|
+
|
|
48
|
+
## Limitations
|
|
49
|
+
|
|
50
|
+
### Nested composite policies are not supported
|
|
51
|
+
|
|
52
|
+
You cannot place a composite policy inside another composite policy. While
|
|
53
|
+
Zuplo's configuration does not prevent you from referencing one composite policy
|
|
54
|
+
in another composite policy's `policies` array, doing so leads to unexpected
|
|
55
|
+
behavior at runtime.
|
|
56
|
+
|
|
57
|
+
:::warning
|
|
58
|
+
|
|
59
|
+
Nested composite policies are not supported. Always list all required policies
|
|
60
|
+
directly in a single, flat composite policy. Nesting composites inside other
|
|
61
|
+
composites can cause policies to malfunction or produce confusing errors.
|
|
62
|
+
|
|
63
|
+
:::
|
|
64
|
+
|
|
65
|
+
For example, the following configuration **does not work** as expected:
|
|
66
|
+
|
|
67
|
+
```json title="❌ Unsupported: nested composites"
|
|
68
|
+
[
|
|
69
|
+
{
|
|
70
|
+
"name": "shared-template",
|
|
71
|
+
"policyType": "composite-inbound",
|
|
72
|
+
"handler": {
|
|
73
|
+
"export": "CompositeInboundPolicy",
|
|
74
|
+
"module": "$import(@zuplo/runtime)",
|
|
75
|
+
"options": {
|
|
76
|
+
"policies": ["api-key-auth", "rate-limit"]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "project-template",
|
|
82
|
+
"policyType": "composite-inbound",
|
|
83
|
+
"handler": {
|
|
84
|
+
"export": "CompositeInboundPolicy",
|
|
85
|
+
"module": "$import(@zuplo/runtime)",
|
|
86
|
+
"options": {
|
|
87
|
+
"policies": ["shared-template", "request-validation"]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
In this example, `project-template` references `shared-template`, which is
|
|
95
|
+
itself a composite policy. This nesting causes the inner policies to not execute
|
|
96
|
+
correctly.
|
|
97
|
+
|
|
98
|
+
### Request validation inside nested composites
|
|
99
|
+
|
|
100
|
+
One specific failure mode involves the
|
|
101
|
+
[Request Validation policy](../policies/request-validation-inbound.mdx). When
|
|
102
|
+
used inside a nested composite policy, the Request Validation policy may not be
|
|
103
|
+
able to resolve the OpenAPI schema for the current route. You may see an error
|
|
104
|
+
similar to:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
No schema defined for method ...
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This error does not mean your schema is missing from your OpenAPI specification.
|
|
111
|
+
It indicates that the validation policy lost access to the route's schema
|
|
112
|
+
context because of the unsupported nesting.
|
|
113
|
+
|
|
114
|
+
### Circular references
|
|
115
|
+
|
|
116
|
+
Composite policies that reference each other (directly or indirectly) create
|
|
117
|
+
circular references that can cause your gateway to fail. Always verify that your
|
|
118
|
+
composite policy chains do not form loops.
|
|
119
|
+
|
|
120
|
+
## Recommended patterns for policy reuse
|
|
121
|
+
|
|
122
|
+
### Use flat composite policies
|
|
123
|
+
|
|
124
|
+
Instead of nesting composite policies, list every policy directly in a single
|
|
125
|
+
composite:
|
|
126
|
+
|
|
127
|
+
```json title="✅ Flat composite with all policies listed"
|
|
128
|
+
{
|
|
129
|
+
"name": "project-template",
|
|
130
|
+
"policyType": "composite-inbound",
|
|
131
|
+
"handler": {
|
|
132
|
+
"export": "CompositeInboundPolicy",
|
|
133
|
+
"module": "$import(@zuplo/runtime)",
|
|
134
|
+
"options": {
|
|
135
|
+
"policies": [
|
|
136
|
+
"api-key-auth",
|
|
137
|
+
"rate-limit",
|
|
138
|
+
"request-validation",
|
|
139
|
+
"custom-logging"
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
This approach is explicit and avoids any nesting issues. The trade-off is that
|
|
147
|
+
when a "shared" set of policies changes, you need to update every composite
|
|
148
|
+
policy that includes them.
|
|
149
|
+
|
|
150
|
+
### Create purpose-specific composite policies
|
|
151
|
+
|
|
152
|
+
Group policies by function or security level. Rather than one universal
|
|
153
|
+
composite, define composites that map to specific route requirements:
|
|
154
|
+
|
|
155
|
+
```json title="policies.json"
|
|
156
|
+
[
|
|
157
|
+
{
|
|
158
|
+
"name": "public-api-policies",
|
|
159
|
+
"policyType": "composite-inbound",
|
|
160
|
+
"handler": {
|
|
161
|
+
"export": "CompositeInboundPolicy",
|
|
162
|
+
"module": "$import(@zuplo/runtime)",
|
|
163
|
+
"options": {
|
|
164
|
+
"policies": ["rate-limit", "request-validation"]
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "authenticated-api-policies",
|
|
170
|
+
"policyType": "composite-inbound",
|
|
171
|
+
"handler": {
|
|
172
|
+
"export": "CompositeInboundPolicy",
|
|
173
|
+
"module": "$import(@zuplo/runtime)",
|
|
174
|
+
"options": {
|
|
175
|
+
"policies": [
|
|
176
|
+
"api-key-auth",
|
|
177
|
+
"rate-limit",
|
|
178
|
+
"request-validation",
|
|
179
|
+
"audit-log"
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
]
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Routes can then reference the appropriate composite by name without needing to
|
|
188
|
+
repeat individual policy lists.
|
|
189
|
+
|
|
190
|
+
### Use custom policies for advanced composition
|
|
191
|
+
|
|
192
|
+
When you need conditional logic or dynamic policy invocation, write a
|
|
193
|
+
[custom code inbound policy](../policies/custom-code-inbound.mdx) that calls
|
|
194
|
+
`context.invokeInboundPolicy()` programmatically:
|
|
195
|
+
|
|
196
|
+
```ts title="modules/conditional-policies.ts"
|
|
197
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
198
|
+
|
|
199
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
200
|
+
// Always run authentication
|
|
201
|
+
const authResult = await context.invokeInboundPolicy("api-key-auth", request);
|
|
202
|
+
if (authResult instanceof Response) {
|
|
203
|
+
return authResult;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Always run rate limiting
|
|
207
|
+
const rateLimitResult = await context.invokeInboundPolicy(
|
|
208
|
+
"rate-limit",
|
|
209
|
+
authResult,
|
|
210
|
+
);
|
|
211
|
+
if (rateLimitResult instanceof Response) {
|
|
212
|
+
return rateLimitResult;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Conditionally run validation based on method
|
|
216
|
+
if (request.method === "POST" || request.method === "PUT") {
|
|
217
|
+
const validationResult = await context.invokeInboundPolicy(
|
|
218
|
+
"request-validation",
|
|
219
|
+
rateLimitResult,
|
|
220
|
+
);
|
|
221
|
+
if (validationResult instanceof Response) {
|
|
222
|
+
return validationResult;
|
|
223
|
+
}
|
|
224
|
+
return validationResult;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Skip validation for GET, DELETE, etc.
|
|
228
|
+
return rateLimitResult;
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
This approach gives you full control over execution order and conditional logic.
|
|
233
|
+
See
|
|
234
|
+
[Conditional Policy Execution](../programmable-api/zuplo-context.mdx#conditional-policy-execution)
|
|
235
|
+
for more examples.
|
|
236
|
+
|
|
237
|
+
:::tip
|
|
238
|
+
|
|
239
|
+
Use `context.invokeInboundPolicy()` when you need to programmatically decide
|
|
240
|
+
which policies to run. Use composite policies when you have a fixed set of
|
|
241
|
+
policies that always run together.
|
|
242
|
+
|
|
243
|
+
:::
|
|
244
|
+
|
|
245
|
+
## Error messages and troubleshooting
|
|
246
|
+
|
|
247
|
+
### "No schema defined for method..."
|
|
248
|
+
|
|
249
|
+
**Cause:** The Request Validation policy cannot find the OpenAPI schema for the
|
|
250
|
+
current route. This commonly occurs when the validation policy runs inside a
|
|
251
|
+
nested composite policy.
|
|
252
|
+
|
|
253
|
+
**Fix:** Move the Request Validation policy out of any nested composite
|
|
254
|
+
structure. List it directly in a flat composite policy or directly on the route.
|
|
255
|
+
|
|
256
|
+
### Gateway may fail due to circular references
|
|
257
|
+
|
|
258
|
+
**Cause:** Circular references in composite policy configuration. For example,
|
|
259
|
+
policy A references policy B, and policy B references policy A.
|
|
260
|
+
|
|
261
|
+
**Fix:** Review your `policies.json` and verify that no composite policy
|
|
262
|
+
references another composite that eventually references it back. Trace the full
|
|
263
|
+
chain of policy references to identify the loop.
|
|
264
|
+
|
|
265
|
+
### Policies execute in unexpected order
|
|
266
|
+
|
|
267
|
+
**Cause:** Policies within a composite run in the order listed in the `policies`
|
|
268
|
+
array. If you have multiple composites on a route, each composite runs its
|
|
269
|
+
policies sequentially, and the composites themselves run in the order they
|
|
270
|
+
appear on the route.
|
|
271
|
+
|
|
272
|
+
**Fix:** Verify the order of policies in your composite's `policies` array and
|
|
273
|
+
the order of policies assigned to your route.
|
|
274
|
+
|
|
275
|
+
## Summary
|
|
276
|
+
|
|
277
|
+
- Composite policies group multiple policies into a single reusable reference.
|
|
278
|
+
- **Nested composite policies are not supported.** Always use flat composites
|
|
279
|
+
that list all required policies directly.
|
|
280
|
+
- The Request Validation policy produces a "No schema defined" error when used
|
|
281
|
+
inside nested composites.
|
|
282
|
+
- For advanced composition logic, use `context.invokeInboundPolicy()` in a
|
|
283
|
+
custom code policy.
|
|
284
|
+
- Avoid circular references between composite policies.
|