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,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Custom Logging Policy
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Some of our customers want to build custom logging for their gateway runtime.
|
|
6
|
+
This is an example of just how powerful the programmability of Zuplo is.
|
|
7
|
+
|
|
8
|
+
In this custom inbound policy we show how you could post to a service (in this
|
|
9
|
+
case we just use RequestBin.com).
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { ZuploContext, ZuploRequest, ResponseSentEvent } from "@zuplo/runtime";
|
|
13
|
+
|
|
14
|
+
type CustomLoggingOptions = {
|
|
15
|
+
endpoint: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const serializableHeaders = (headers: Headers) => {
|
|
19
|
+
const output = {};
|
|
20
|
+
headers.forEach((value, key) => {
|
|
21
|
+
output[key] = value;
|
|
22
|
+
});
|
|
23
|
+
return output;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const serializableRequest = async (request: ZuploRequest) => {
|
|
27
|
+
// if we're going to read the body, we need to clone
|
|
28
|
+
// the request first - otherwise the response pipeline will
|
|
29
|
+
// encounter a drained stream
|
|
30
|
+
const clone = request.clone();
|
|
31
|
+
const body = await clone.text(); // read as text
|
|
32
|
+
const data = {
|
|
33
|
+
method: request.method,
|
|
34
|
+
url: request.url,
|
|
35
|
+
headers: serializableHeaders(request.headers),
|
|
36
|
+
body,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return data;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const serializableResponse = async (response: Response) => {
|
|
43
|
+
// if we're going to read the body, we need to clone
|
|
44
|
+
// the response first - otherwise the response pipeline will
|
|
45
|
+
// encounter a drained stream
|
|
46
|
+
const clone = response.clone();
|
|
47
|
+
const body = await clone.text(); // read as text
|
|
48
|
+
|
|
49
|
+
const data = {
|
|
50
|
+
status: response.status,
|
|
51
|
+
headers: serializableHeaders(response.headers),
|
|
52
|
+
body,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
return data;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const logReqRes = async (
|
|
59
|
+
endpoint: string,
|
|
60
|
+
req: any,
|
|
61
|
+
response: Response,
|
|
62
|
+
context: ZuploContext,
|
|
63
|
+
start: number,
|
|
64
|
+
) => {
|
|
65
|
+
// we don't want any errors thrown that might impact
|
|
66
|
+
// our consumers experience so catch everything and
|
|
67
|
+
// use context.log
|
|
68
|
+
try {
|
|
69
|
+
const data = {
|
|
70
|
+
req,
|
|
71
|
+
res: await serializableResponse(response),
|
|
72
|
+
timeMs: Date.now() - start,
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
return fetch(endpoint, {
|
|
76
|
+
method: "POST",
|
|
77
|
+
body: JSON.stringify(data),
|
|
78
|
+
});
|
|
79
|
+
} catch (err) {
|
|
80
|
+
context.log.error(err, "error in custom-logging policy");
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default async function (
|
|
85
|
+
request: ZuploRequest,
|
|
86
|
+
context: ZuploContext,
|
|
87
|
+
options: CustomLoggingOptions,
|
|
88
|
+
policyName: string,
|
|
89
|
+
) {
|
|
90
|
+
// We need to read the body of the request before it's used by the handler
|
|
91
|
+
// so let's serialize the request now
|
|
92
|
+
const req = await serializableRequest(request);
|
|
93
|
+
const start = Date.now();
|
|
94
|
+
|
|
95
|
+
// The 'responseSent' event will fire at the very last stage in the response
|
|
96
|
+
// pipeline, when no more mutations can be made - so you can be confident
|
|
97
|
+
// this was the response sent by Zuplo
|
|
98
|
+
context.addEventListener("responseSent", async (event: ResponseSentEvent) => {
|
|
99
|
+
const promise = logReqRes(
|
|
100
|
+
options.endpoint,
|
|
101
|
+
req,
|
|
102
|
+
event.response,
|
|
103
|
+
context,
|
|
104
|
+
start,
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
// We need to ask the runtime now to shut down until this is complete,
|
|
108
|
+
// as this will run asynchronously to our response
|
|
109
|
+
context.waitUntil(promise);
|
|
110
|
+
});
|
|
111
|
+
return request;
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
We would then configure the policy as follows
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"name": "custom-logging-policy",
|
|
120
|
+
"policyType": "custom-code-inbound",
|
|
121
|
+
"handler": {
|
|
122
|
+
"export": "default",
|
|
123
|
+
"module": "$import(./modules/custom-logging)",
|
|
124
|
+
"options": {
|
|
125
|
+
"endpoint": "https://YOUR_MOCKIN_URL_HERE"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
And don't forget to register your new custom policy on your routes! This should
|
|
132
|
+
be the first inbound policy to see the incoming request, unmodified by other
|
|
133
|
+
policies (or blocked by auth, rate-limiting, etc.).
|
|
134
|
+
|
|
135
|
+
You'll then see live entries with details of the requests and responses for your
|
|
136
|
+
test calls/
|
|
137
|
+
|
|
138
|
+
You can create a free Mockbin at [mockbin.io](https://mockbin.io) - to get
|
|
139
|
+
started quickly look for the link to create a new bin (not OpenAPI bin).
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Managed DDoS Protection
|
|
3
|
+
sidebar_label: DDoS Protection
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- vale Vale.Spelling["slowloris","Unmetered"] = NO -->
|
|
7
|
+
|
|
8
|
+
Zuplo provides automatic DDoS (Distributed Denial of Service) protection for all
|
|
9
|
+
APIs deployed on the platform. This service detects and mitigates attacks in
|
|
10
|
+
real-time, ensuring your APIs remain available even under attack.
|
|
11
|
+
|
|
12
|
+
:::note
|
|
13
|
+
|
|
14
|
+
Zuplo Managed DDoS is only available for customers using Zuplo's managed edge
|
|
15
|
+
deployment model. Customers using managed dedicated deployments should refer to
|
|
16
|
+
the
|
|
17
|
+
[Managed Dedicated WAF Options](./zuplo-waf.mdx#managed-dedicated-waf-options)
|
|
18
|
+
document.
|
|
19
|
+
|
|
20
|
+
:::
|
|
21
|
+
|
|
22
|
+
## What's DDoS?
|
|
23
|
+
|
|
24
|
+
DDoS attacks attempt to overwhelm your API by flooding it with malicious traffic
|
|
25
|
+
from multiple sources. Zuplo's protection covers both:
|
|
26
|
+
|
|
27
|
+
- **Network Layer Attacks (Layer 3/4)**: UDP floods, SYN floods, and other
|
|
28
|
+
network-level attacks
|
|
29
|
+
- **Application Layer Attacks (Layer 7)**: HTTP floods, slowloris, and other
|
|
30
|
+
application-level attacks
|
|
31
|
+
|
|
32
|
+
## Key Benefits
|
|
33
|
+
|
|
34
|
+
- **Always-On**: Protection is automatic from deployment—no configuration needed
|
|
35
|
+
- **Multi-Layer Defense**: Covers both network and application layer attacks
|
|
36
|
+
- **Unmetered Protection**: No bandwidth limits during attacks
|
|
37
|
+
- **Adaptive**: Continuously updated to handle new attack patterns
|
|
38
|
+
- **Minimal False Positives**: Smart detection reduces blocking of legitimate
|
|
39
|
+
traffic
|
|
40
|
+
- **Avoid Unexpected Costs**: Zuplo never charges for requests that are blocked
|
|
41
|
+
by DDoS protection protecting you from unexpected overage fees.
|
|
42
|
+
|
|
43
|
+
## Protection Levels
|
|
44
|
+
|
|
45
|
+
Zuplo offers different sensitivity levels for DDoS protection, allowing you to
|
|
46
|
+
balance security with accessibility based on your specific needs.
|
|
47
|
+
|
|
48
|
+
### Working Copy Environments
|
|
49
|
+
|
|
50
|
+
All Working Copy environments (`.zuplo.dev` domains) are automatically protected
|
|
51
|
+
with **Medium** sensitivity. This provides robust protection while minimizing
|
|
52
|
+
the risk of blocking legitimate traffic during development and testing.
|
|
53
|
+
|
|
54
|
+
### Preview and Production Environments
|
|
55
|
+
|
|
56
|
+
Preview and production deployments benefit from advanced DDoS protection
|
|
57
|
+
capabilities:
|
|
58
|
+
|
|
59
|
+
- **Default Setting**: Medium sensitivity (balanced protection)
|
|
60
|
+
- **Enterprise Customization**: Optional enterprise add-on allowing
|
|
61
|
+
configuration of protection levels
|
|
62
|
+
|
|
63
|
+
### Sensitivity Levels Explained
|
|
64
|
+
|
|
65
|
+
Enterprise customers with the DDoS customization add-on can choose from four
|
|
66
|
+
sensitivity levels:
|
|
67
|
+
|
|
68
|
+
#### High Sensitivity
|
|
69
|
+
|
|
70
|
+
- Most aggressive protection with the lowest threshold for triggering mitigation
|
|
71
|
+
- Ideal for APIs that face frequent attacks or handle highly sensitive data
|
|
72
|
+
- May occasionally block legitimate traffic during unusual usage patterns
|
|
73
|
+
|
|
74
|
+
#### Medium Sensitivity (Default)
|
|
75
|
+
|
|
76
|
+
- Balanced approach providing strong protection with moderate thresholds
|
|
77
|
+
- Recommended for most production APIs
|
|
78
|
+
- Optimizes for both security and accessibility
|
|
79
|
+
|
|
80
|
+
#### Low Sensitivity
|
|
81
|
+
|
|
82
|
+
- Higher threshold for triggering mitigation
|
|
83
|
+
- Suitable for APIs with highly variable traffic patterns
|
|
84
|
+
- Reduces false positives for legitimate traffic spikes
|
|
85
|
+
|
|
86
|
+
#### Essentially Off
|
|
87
|
+
|
|
88
|
+
- Minimal protection with the highest threshold
|
|
89
|
+
- Protection still activates for extremely large attacks to maintain network
|
|
90
|
+
stability
|
|
91
|
+
- Recommended only when you have alternative DDoS protection mechanisms.
|
|
92
|
+
|
|
93
|
+
## How Protection Works
|
|
94
|
+
|
|
95
|
+
### Detection
|
|
96
|
+
|
|
97
|
+
Zuplo's DDoS protection uses sophisticated algorithms to analyze traffic
|
|
98
|
+
patterns in real-time. The system examines multiple factors including:
|
|
99
|
+
|
|
100
|
+
- Request rates and patterns
|
|
101
|
+
- Source IP reputation
|
|
102
|
+
- Geographic distribution
|
|
103
|
+
- Protocol compliance
|
|
104
|
+
- Behavioral anomalies
|
|
105
|
+
|
|
106
|
+
### Mitigation
|
|
107
|
+
|
|
108
|
+
When an attack is detected, the system automatically applies appropriate
|
|
109
|
+
mitigation techniques:
|
|
110
|
+
|
|
111
|
+
1. **Traffic Filtering**: Malicious traffic is filtered at the edge before
|
|
112
|
+
reaching your API
|
|
113
|
+
2. **Rate Limiting**: Excessive requests from suspicious sources are throttled
|
|
114
|
+
3. **Connection Management**: Advanced TCP protection handles sophisticated
|
|
115
|
+
connection-based attacks
|
|
116
|
+
|
|
117
|
+
### Continuous Improvement
|
|
118
|
+
|
|
119
|
+
The protection system continuously evolves:
|
|
120
|
+
|
|
121
|
+
- Managed rulesets are regularly updated
|
|
122
|
+
- New attack patterns are incorporated into detection algorithms
|
|
123
|
+
- Protection mechanisms adapt based on the global threat landscape
|
|
124
|
+
|
|
125
|
+
## Enterprise Customization
|
|
126
|
+
|
|
127
|
+
Enterprise customers can enhance their DDoS protection with:
|
|
128
|
+
|
|
129
|
+
- **Custom Sensitivity Levels**: Adjust protection thresholds per environment
|
|
130
|
+
- **Advanced Analytics**: Detailed attack reports and traffic analysis
|
|
131
|
+
- **Custom Rule Configuration**: Tailor protection to specific traffic patterns
|
|
132
|
+
|
|
133
|
+
:::tip
|
|
134
|
+
|
|
135
|
+
Contact your Zuplo account team to learn more about Enterprise DDoS
|
|
136
|
+
customization options.
|
|
137
|
+
|
|
138
|
+
:::
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Development Options
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Zuplo offers both a local and web-based development experiences. For most
|
|
6
|
+
customers, we recommend the local developer experience as this is the most
|
|
7
|
+
flexible and fastest way to work with your Zuplo API and Developer Portal.
|
|
8
|
+
|
|
9
|
+
## Local Development
|
|
10
|
+
|
|
11
|
+
The [local experience](./local-development.mdx) allows users to run both the API
|
|
12
|
+
Gateway and Dev Portal locally. It also includes a local version of the Route
|
|
13
|
+
Designer that's integrated into the Zuplo Portal (portal.zuplo.com). Local
|
|
14
|
+
development allows customers to use the IDE of their choice and run everything
|
|
15
|
+
locally.
|
|
16
|
+
|
|
17
|
+
Local development is available for all customers regardless of their deployment
|
|
18
|
+
model. It's designed to be fast and lightweight, allowing developers to quickly
|
|
19
|
+
iterate on their APIs without needing to deploy to the cloud.
|
|
20
|
+
|
|
21
|
+
Local development is the fastest way to develop and test your APIs as you can
|
|
22
|
+
test changes immediately without waiting for a deployment. Changes to your API
|
|
23
|
+
are automatically loaded into the local API Gateway and Dev Portal.
|
|
24
|
+
|
|
25
|
+
## Web-Based Development Experience
|
|
26
|
+
|
|
27
|
+
:::note{title="Managed Dedicated"}
|
|
28
|
+
|
|
29
|
+
Working copy environments aren't available for customers using the
|
|
30
|
+
[managed dedicated deployment model](../dedicated/overview.mdx).
|
|
31
|
+
|
|
32
|
+
:::
|
|
33
|
+
|
|
34
|
+
The web-based development experience on (portal.zuplo.com) allows customers on
|
|
35
|
+
our managed-edge deployment model to make edits to their project right from
|
|
36
|
+
within the browser. This experience is designed to be fast and light-weight. The
|
|
37
|
+
web-based experience provides each developer their own
|
|
38
|
+
[developer environment](./environments.mdx) (called **working copy**)
|
|
39
|
+
environment.
|
|
40
|
+
|
|
41
|
+
The working copy environment is a special environment that's unique to each
|
|
42
|
+
developer. It's optimized for development which means it has slightly different
|
|
43
|
+
configurations than the standard environments. For example, it doesn't cache
|
|
44
|
+
resources as aggressively so changes are reflected more quickly. You can tell if
|
|
45
|
+
an environment is a working copy as it will be deployed to the `zuplo.dev`
|
|
46
|
+
domain. Working copy environments can't have custom domains.
|
|
47
|
+
|
|
48
|
+
The working copy environment isn't intended for production use and shouldn't be
|
|
49
|
+
used as such. It's designed for development and testing purposes only.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Configuring Environment Variables
|
|
3
|
+
sidebar_label: Environment Variables
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Environment variables are key-value pairs that are stored outside of source
|
|
7
|
+
code. The values of environment variables can be applied to particular
|
|
8
|
+
environments in order to change behavior or configuration.
|
|
9
|
+
|
|
10
|
+
Environment variables can be read into source code and many configuration files
|
|
11
|
+
in your project. Variables are only applied to environments on new deployments.
|
|
12
|
+
If you change an environment variable, you must redeploy the environment in
|
|
13
|
+
order for the updated value to take effect.
|
|
14
|
+
|
|
15
|
+
Environment variables can be configuration or secrets. While all values are
|
|
16
|
+
stored encrypted at rest, only non-secret values can be read. Secrets are
|
|
17
|
+
write-only, meaning the value can't be retrieved once it's set.
|
|
18
|
+
|
|
19
|
+
:::tip
|
|
20
|
+
|
|
21
|
+
API Reference For detailed information about accessing environment variables in
|
|
22
|
+
code, see the
|
|
23
|
+
[Environment Variables API Reference](../programmable-api/environment.mdx).
|
|
24
|
+
|
|
25
|
+
:::
|
|
26
|
+
|
|
27
|
+
## Environment Variable Editor
|
|
28
|
+
|
|
29
|
+
To set environment variables in your project, click **Settings** and then select
|
|
30
|
+
**Environment Variables**.
|
|
31
|
+
|
|
32
|
+
To create a new variable, click **Add new variable**.
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
Enter the name and value of your environment variable and select if you would
|
|
37
|
+
like the value to be a secret or a regular value.
|
|
38
|
+
|
|
39
|
+
## Environments
|
|
40
|
+
|
|
41
|
+
Environment variables can be applied to one or many different environments. You
|
|
42
|
+
can select one or more environments in which to apply the variable.
|
|
43
|
+
|
|
44
|
+
| Environment | Description |
|
|
45
|
+
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
46
|
+
| Prod | The environment that's deployed from your **default** branch in source control. This is usually called `main`. |
|
|
47
|
+
| Preview | Any environment that's deployed from source control that's **not the default** branch. (for example `staging` or `preview`). This also includes any branch that's created from a pull request. |
|
|
48
|
+
| Development (Working Copy) | Any environment that's deployed while developing with the portal. Each developer gets their own development environment. These environments are always deployed to `zuplo.dev` |
|
|
49
|
+
|
|
50
|
+
For the **Preview** environment option, a specific named environment can be
|
|
51
|
+
selected. For example, if you want a variable set only for the environment
|
|
52
|
+
deployed from the `staging` branch in source control.
|
|
53
|
+
|
|
54
|
+
For the **Working Copy** option, developers can set a personal override. This
|
|
55
|
+
value **ONLY** applies to the developer who set the value.
|
|
56
|
+
|
|
57
|
+
:::info
|
|
58
|
+
|
|
59
|
+
A single environment variable name can't overlap environments. For example, if
|
|
60
|
+
you set a variable named `MY_VAR` and select all the environments a second
|
|
61
|
+
variable named `MY_VAR` can't be set on say the **Production** environments.
|
|
62
|
+
|
|
63
|
+
:::
|
|
64
|
+
|
|
65
|
+
## Reserved Environment Variables
|
|
66
|
+
|
|
67
|
+
Environment variables can't start with `ZUPLO` or `__ZUPLO`.
|
|
68
|
+
|
|
69
|
+
## Using Environment Variables
|
|
70
|
+
|
|
71
|
+
Environment variables can be used in several places within your Zuplo project:
|
|
72
|
+
|
|
73
|
+
### In Code
|
|
74
|
+
|
|
75
|
+
Variables are accessed through the `environment` object from `@zuplo/runtime`.
|
|
76
|
+
See the
|
|
77
|
+
[Environment Variables API Reference](../programmable-api/environment.mdx) for
|
|
78
|
+
detailed usage examples and patterns.
|
|
79
|
+
|
|
80
|
+
### In Configuration Files
|
|
81
|
+
|
|
82
|
+
Inside some configuration files, environment variables can be referenced with
|
|
83
|
+
the pattern `$env(MY_VAR)`.
|
|
84
|
+
|
|
85
|
+
For example, in the `policies.json` file, an environment variable could be set
|
|
86
|
+
on a policy option.
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"name": "my-custom-code-inbound-policy",
|
|
91
|
+
"policyType": "custom-code-inbound",
|
|
92
|
+
"handler": {
|
|
93
|
+
"export": "default",
|
|
94
|
+
"module": "$import(./modules/YOUR_MODULE)",
|
|
95
|
+
"options": {
|
|
96
|
+
"config1": "$env(MY_CONFIG_VAR)",
|
|
97
|
+
"config2": true
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Rewrite & Forwarding Handler
|
|
104
|
+
|
|
105
|
+
When referencing environment variables inside of the URL Rewrite handler and the
|
|
106
|
+
URL Forward handler, variables are substituted using JavaScript style string
|
|
107
|
+
interpolation.
|
|
108
|
+
|
|
109
|
+
```txt
|
|
110
|
+
https://${env.API_URL}/path/to/call
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## System Environment Variables
|
|
114
|
+
|
|
115
|
+
The following variables are automatically set by the system and are available to
|
|
116
|
+
use in your code:
|
|
117
|
+
|
|
118
|
+
- `ZUPLO_ENVIRONMENT_TYPE` - The current environment type the API is running.
|
|
119
|
+
Values are `edge`, `local`.
|
|
120
|
+
- `ZUPLO_ENVIRONMENT_STAGE` - The stage of the environment. Values are
|
|
121
|
+
`production`, `preview`, `working-copy`, and `local`.
|
|
122
|
+
- `ZUPLO_ENVIRONMENT_NAME` - The name of the environment. This is a globally
|
|
123
|
+
unique name for the environment. This is the same name that's used in the URL
|
|
124
|
+
of the environment. For example, `my-project-main-1235.zuplo.app`. Setting a
|
|
125
|
+
custom domain on the environment won't change this value.
|
|
126
|
+
- `ZUPLO_ACCOUNT_NAME` - The name of the Zuplo account where the environment is
|
|
127
|
+
deployed.
|
|
128
|
+
- `ZUPLO_PROJECT_NAME` - The name of the project where the environment is
|
|
129
|
+
deployed.
|
|
130
|
+
- `ZUPLO_BUILD_ID` - The build ID of the environment. This is a unique ID for
|
|
131
|
+
each build of the environment. This is a UUID.
|
|
132
|
+
- `ZUPLO_COMPATIBILITY_DATE` - The
|
|
133
|
+
[compatibility date](../programmable-api/compatibility-dates.mdx) of runtime
|
|
134
|
+
environment.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Environments
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
One of the things that makes Zuplo different from most API gateways, and API
|
|
6
|
+
management platforms is that you can rapidly deploy many environments. Some of
|
|
7
|
+
our customers have hundreds of deployed environments! This facilitates
|
|
8
|
+
collaboration, where teams can collaborate on new features with a dedicated
|
|
9
|
+
environment, deployed for no additional cost in under 20 seconds.
|
|
10
|
+
|
|
11
|
+
:::tip
|
|
12
|
+
|
|
13
|
+
For a comprehensive guide to how branches map to environments, see
|
|
14
|
+
[Branch-Based Deployments](./branch-based-deployments.mdx).
|
|
15
|
+
|
|
16
|
+
:::
|
|
17
|
+
|
|
18
|
+
## Environment Types
|
|
19
|
+
|
|
20
|
+
There are three types of environments on Zuplo - Production, Preview, and
|
|
21
|
+
Development (called Working Copy). Each environment has a unique URL and every
|
|
22
|
+
environment is deployed to 300+ edge locations around the world.
|
|
23
|
+
|
|
24
|
+
### Development (Working Copy)
|
|
25
|
+
|
|
26
|
+
This is your development environment. You can think of this as your personal
|
|
27
|
+
cloud laptop. To deploy to this environment you just need to save a change in
|
|
28
|
+
portal.zuplo.com, that will automatically trigger a build and deploy of your
|
|
29
|
+
working-copy. A working-copy environment ends in a `.dev` URL. While these
|
|
30
|
+
environments are deployed to the edge in 300+ data centers around the world,
|
|
31
|
+
they're optimized for development purposes. There are some minor differences
|
|
32
|
+
with production and preview environments with caching and other features.
|
|
33
|
+
|
|
34
|
+
### Preview
|
|
35
|
+
|
|
36
|
+
These are environments that are deployed using the
|
|
37
|
+
[GitHub integration](/docs/articles/source-control.mdx) or building a
|
|
38
|
+
[custom CI/CD pipeline](/docs/articles/custom-ci-cd.mdx). Preview environments
|
|
39
|
+
are deployed from any branch that isn't set as your default (for example
|
|
40
|
+
production branch). Preview environments are deployed to the edge and have the
|
|
41
|
+
same behavior as production environments, but are typically used for staging,
|
|
42
|
+
testing pull requests, etc.
|
|
43
|
+
|
|
44
|
+
### Production
|
|
45
|
+
|
|
46
|
+
These are environments that are deployed using the
|
|
47
|
+
[GitHub integration](/docs/articles/source-control.mdx) or building a
|
|
48
|
+
[custom CI/CD pipeline](/docs/articles/custom-ci-cd.mdx). Each project has only
|
|
49
|
+
one Production environment and is deployed from the git branch that's set as
|
|
50
|
+
your production branch in your source control settings.
|
|
51
|
+
|
|
52
|
+
#### Changing the Production Environment
|
|
53
|
+
|
|
54
|
+
The Production environment is determined by your repository's **default branch**
|
|
55
|
+
setting (configured in your Git provider, not Zuplo). To change which branch
|
|
56
|
+
deploys to Production:
|
|
57
|
+
|
|
58
|
+
1. Go to your Git repository settings:
|
|
59
|
+
- **GitHub**: Settings > General > Default branch
|
|
60
|
+
- **GitLab**: Settings > Repository > Branch defaults
|
|
61
|
+
- **Bitbucket**: Repository settings > Branching model
|
|
62
|
+
- **Azure DevOps**: Project settings > Repositories > Default branch
|
|
63
|
+
2. Change the default branch to your desired branch
|
|
64
|
+
3. Zuplo automatically treats the new default branch as Production
|
|
65
|
+
|
|
66
|
+
:::caution
|
|
67
|
+
|
|
68
|
+
Changing the default branch affects which environment receives Production
|
|
69
|
+
environment variables and uses the Production API key bucket. Plan this change
|
|
70
|
+
carefully.
|
|
71
|
+
|
|
72
|
+
:::
|
|
73
|
+
|
|
74
|
+
### Preview vs Production Environments (or multiple Production Environments)
|
|
75
|
+
|
|
76
|
+
:::note
|
|
77
|
+
|
|
78
|
+
There is **no technical difference** between a Production environment and a
|
|
79
|
+
Preview environment. Both deploy to the same infrastructure, run in the same
|
|
80
|
+
300+ edge locations, and have identical performance characteristics. The
|
|
81
|
+
"production" label simply means "deployed from the default branch." It controls
|
|
82
|
+
which set of [environment variables](/docs/articles/environment-variables.mdx)
|
|
83
|
+
and [API key buckets](/docs/articles/api-key-buckets.mdx) apply by default, but
|
|
84
|
+
the underlying deployment is exactly the same.
|
|
85
|
+
|
|
86
|
+
:::
|
|
87
|
+
|
|
88
|
+
Some customers choose to use a specific (or multiple) Preview environments as
|
|
89
|
+
"production" deployments of their API. For example, you might deploy your US
|
|
90
|
+
traffic from `main` (Production) and your EU traffic from an `eu-production`
|
|
91
|
+
branch (Preview). This works because the environments are technically identical.
|
|
92
|
+
Environment variables and API key buckets can be overridden for specific Preview
|
|
93
|
+
environments to support this pattern.
|
|
94
|
+
|
|
95
|
+
For a comprehensive overview of how source control, branches, and environments
|
|
96
|
+
relate to each other, see
|
|
97
|
+
[Source Control and Deployment](/docs/concepts/source-control-and-deployment.mdx).
|
|
98
|
+
|
|
99
|
+
## Navigating Environments
|
|
100
|
+
|
|
101
|
+
On the bottom toolbar of the Zuplo portal you will see a selector for the
|
|
102
|
+
current environment. You can switch between environments by clicking on the name
|
|
103
|
+
of the current environment and then selecting another environment.
|
|
104
|
+
|
|
105
|
+

|
|
106
|
+
|
|
107
|
+
Your development (working copy) environment will be listed at the top in a
|
|
108
|
+
separate section. Your git deployed environments will be listed next with the
|
|
109
|
+
production environment on top.
|
|
110
|
+
|
|
111
|
+
For users using [source control integration](/docs/articles/source-control.mdx)
|
|
112
|
+
the name of the deployment matches the branch name (yes - creating a new
|
|
113
|
+
environment is literally as easy as creating a new branch).
|
|
114
|
+
|
|
115
|
+
You can't edit the code of an production or preview environment in
|
|
116
|
+
portal.zuplo.com but you can switch into those environments to perform a number
|
|
117
|
+
of functions, such as:
|
|
118
|
+
|
|
119
|
+
- edit API consumers for this environment
|
|
120
|
+
- view analytics for this environment
|
|
121
|
+
- view Live Logs for this environment
|
|
122
|
+
|
|
123
|
+
## Different Backends per Environment
|
|
124
|
+
|
|
125
|
+
It's common to want a different backend for your production, staging and preview
|
|
126
|
+
environments. This can be easily achieved by using
|
|
127
|
+
[environment variables](./environment-variables.mdx) to specify the origin of
|
|
128
|
+
the backend and then using that in your
|
|
129
|
+
[URL Rewrite Handlers](../handlers/url-rewrite.mdx).
|
|
130
|
+
|
|
131
|
+
For example,
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
${env.BASE_PATH}${pathname}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
A url rewrite like this will combine the `BASE_PATH` environment variable, say
|
|
138
|
+
`https://example.com` with the incoming path, for example `/foo/bar` to create a
|
|
139
|
+
re-written URL:
|
|
140
|
+
|
|
141
|
+
```json
|
|
142
|
+
https://example.com/foo/bar
|
|
143
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Using Zuplo as a Fastly Host
|
|
3
|
+
sidebar_label: Fastly Setup
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
This document outlines how to use Zuplo as a host for Fastly. While this isn't a
|
|
7
|
+
necessary setup for most people as Zuplo already runs at the edge and can be
|
|
8
|
+
used for CDN like caching. However, there are some scenarios where you may want
|
|
9
|
+
to put Zuplo behind Fastly. For example, if you are using Fastly's
|
|
10
|
+
[WAF or DDoS protection](./waf-ddos-fastly.mdx) and want to ensure that all
|
|
11
|
+
traffic goes through Fastly before hitting your Zuplo API Gateway.
|
|
12
|
+
|
|
13
|
+
## Configuring Zuplo as a Fastly Host
|
|
14
|
+
|
|
15
|
+
The following settings will allow you to run Zuplo as a host behind Fastly.
|
|
16
|
+
|
|
17
|
+
### Zuplo Configuration
|
|
18
|
+
|
|
19
|
+
It's recommended that you use a custom domain for your Zuplo API Gateway. This
|
|
20
|
+
will allow you to more configure your Fastly host as well as ensure that your
|
|
21
|
+
domain is stable regardless of your Zuplo configuration.
|
|
22
|
+
|
|
23
|
+
### Fastly Configuration
|
|
24
|
+
|
|
25
|
+
1. Create a new Fastly CDN service or use an existing one.
|
|
26
|
+
2. Create a new Origin and name it whatever you like.
|
|
27
|
+
3. Set the **Address** to your Zuplo API Gateway domain. For example,
|
|
28
|
+
`api.example.com` if using a custom domain, or
|
|
29
|
+
`my-project-main-021839d.zuplo.app` without a custom domain.
|
|
30
|
+
4. Enable TLS and keep the port as `443`.
|
|
31
|
+
5. Select Yes on Verify the Certificate.
|
|
32
|
+
6. If using a custom domain, set the _Certificate Hostname_ to your custom
|
|
33
|
+
domain. If using a `zuplo.app` domain, set the set the _Certificate Hostname_
|
|
34
|
+
to `zuplo.app`.
|
|
35
|
+
7. Set the **SNI hostname** to your custom domain or full `zuplo.app` domain
|
|
36
|
+
(for example, `my-project-main-021839d.zuplo.app`)
|
|
37
|
+
8. Set the **Override Host** to your custom domain or full `zuplo.app` domain
|
|
38
|
+
(for example, `my-project-main-021839d.zuplo.app`)
|
|
39
|
+
|
|
40
|
+
Additional settings like mTLS are also supported. Please refer to the Fastly
|
|
41
|
+
documentation for more information.
|