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,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Key Manager React Component
|
|
3
|
+
sidebar_label: React Component
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo provides an open source react component that can be used on your own UI to
|
|
7
|
+
provider users with self-serve access to API Keys for your Zuplo powered API.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
To see a demo of the component visit https://api-key-manager.com.
|
|
12
|
+
|
|
13
|
+
## Getting Started
|
|
14
|
+
|
|
15
|
+
This component can be used with any React framework. It's compatible with
|
|
16
|
+
Tailwind CSS, but Tailwind isn't required.
|
|
17
|
+
|
|
18
|
+
:::tip
|
|
19
|
+
|
|
20
|
+
See our blog for an
|
|
21
|
+
[end to end tutorial](https://zuplo.com/blog/2023/08/08/open-source-release) on
|
|
22
|
+
using this React component and the translation API.
|
|
23
|
+
|
|
24
|
+
:::
|
|
25
|
+
|
|
26
|
+
### Install
|
|
27
|
+
|
|
28
|
+
Install the component in your React project
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install @zuplo/react-api-key-manager
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### With Tailwind
|
|
35
|
+
|
|
36
|
+
Import the component's stylesheet into your `global.css` or equivalent file. The
|
|
37
|
+
styles will use your project's tailwind configuration to provide a consistent
|
|
38
|
+
theme.
|
|
39
|
+
|
|
40
|
+
```css
|
|
41
|
+
@tailwind base;
|
|
42
|
+
@tailwind components;
|
|
43
|
+
@tailwind utilities;
|
|
44
|
+
@import "@zuplo/react-api-key-manager/tailwind.css";
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Without Tailwind
|
|
48
|
+
|
|
49
|
+
Import the component's stylesheet into your root component (for example,
|
|
50
|
+
`App.jsx`), typically below your other stylesheets.
|
|
51
|
+
|
|
52
|
+
```jsx
|
|
53
|
+
import "./styles/globals.css";
|
|
54
|
+
import "@zuplo/react-api-key-manager/index.css";
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Custom Styles
|
|
58
|
+
|
|
59
|
+
The component's CSS can be completely customized by copying either the
|
|
60
|
+
`tailwind.css` or `index.css` files from
|
|
61
|
+
`node_modules/@zuplo/react-api-key-manager/dist/` and modifying the styles to
|
|
62
|
+
suite your needs.
|
|
63
|
+
|
|
64
|
+
## Usage
|
|
65
|
+
|
|
66
|
+
You can import the `ReactAPIKeyManager` into your React project directly.
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import {
|
|
70
|
+
ApiKeyManager,
|
|
71
|
+
DefaultApiKeyManagerProvider,
|
|
72
|
+
} from "@zuplo/react-api-key-manager";
|
|
73
|
+
|
|
74
|
+
const MyComponent = () => {
|
|
75
|
+
const defaultProvider = new DefaultApiKeyManagerProvider(
|
|
76
|
+
"<BASE_URL>",
|
|
77
|
+
"<ACCESS_TOKEN>"
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
return <ApiKeyManager provider={provider} />;
|
|
81
|
+
};
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Backend API
|
|
85
|
+
|
|
86
|
+
The API Key Manager component interacts with an API that allows authorized users
|
|
87
|
+
to manage their own keys. The easiest way to get started is to use the
|
|
88
|
+
[Auth Translation API](https://github.com/zuplo/sample-auth-translation-api)
|
|
89
|
+
sample and deploy it to [Zuplo](https://zuplo.com). By default this sample
|
|
90
|
+
connects the [Zuplo API Key Management Service](./api-key-management.mdx).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Service Limits
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Zuplo's API Key Service can handle billions of requests and tokens. The service
|
|
6
|
+
can accommodate even virtually any scale required. However, by default the
|
|
7
|
+
service is set with limits to ensure that each Zuplo customer has a performant
|
|
8
|
+
and reliable experience.
|
|
9
|
+
|
|
10
|
+
For customers who need limits beyond what's set in this document, reach out to
|
|
11
|
+
our sales team and we'll be happy to design a plan that fits your needs. Email
|
|
12
|
+
[sales@zuplo.com](mailto:sales@zuplo.com).
|
|
13
|
+
|
|
14
|
+
For more details see [Zuplo Platform Limits](./limits.mdx).
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Archiving requests to storage
|
|
3
|
+
sidebar_label: "Archiving Requests"
|
|
4
|
+
description:
|
|
5
|
+
Learn how to archive incoming request text bodies to Azure Blob Storage using
|
|
6
|
+
custom policies in Zuplo.
|
|
7
|
+
tags:
|
|
8
|
+
- request-handling
|
|
9
|
+
- observability
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
> Note - this sample uses Policies, read [this guide](../policies) first.
|
|
13
|
+
|
|
14
|
+
In this sample, we'll show how you can archive the text body of incoming
|
|
15
|
+
requests to Azure Blob Storage. We also have a post on
|
|
16
|
+
[Archiving to AWS S3 Storage](https://zuplo.com/blog/2022/03/22/custom-policies-in-code-archiving-requests-to-s3).
|
|
17
|
+
|
|
18
|
+
First, let's set up Azure. You'll need a container in Azure storage
|
|
19
|
+
([docs](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-create?tabs=azure-portal)).
|
|
20
|
+
Once you have your container you'll need the URL - click the **Properties** tab
|
|
21
|
+
of your container as shown below.
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
This URL will be the `blobPath` in our policy options.
|
|
26
|
+
|
|
27
|
+
Next, we'll need a SAS (Shared Access Secret) to authenticate with Azure. You
|
|
28
|
+
can generate one of these on the `Shared access tokens` tab.
|
|
29
|
+
|
|
30
|
+
Note, you should minimize the permissions - and select only the `Create`
|
|
31
|
+
permission. Choose a sensible start and expiration time for your token. Note, we
|
|
32
|
+
don't recommend restricting IP addresses because Zuplo runs at the edge in over
|
|
33
|
+
200 data-centers world-wide.
|
|
34
|
+
|
|
35
|
+

|
|
36
|
+
|
|
37
|
+
Then generate your SAS token - copy the token (not the URL) to the clipboard and
|
|
38
|
+
enter it into a new environment variable in your API called `BLOB_CREATE_SAS`.
|
|
39
|
+
You'll need another environment variable called `BLOB_CONTAINER_PATH`.
|
|
40
|
+
|
|
41
|
+

|
|
42
|
+
|
|
43
|
+
> Note - production customers should talk to a Zuplo representative to get help
|
|
44
|
+
> managing their secure keys.
|
|
45
|
+
|
|
46
|
+
We'll write a policy called `request-archive-policy` that can be used on all
|
|
47
|
+
routes.
|
|
48
|
+
|
|
49
|
+
```ts title="file-archive-policy.ts"
|
|
50
|
+
import { ZuploRequest, ZuploContext } from "@zuplo/runtime";
|
|
51
|
+
|
|
52
|
+
export type RequestArchivePolicyOptions = {
|
|
53
|
+
blobContainerPath: string;
|
|
54
|
+
blobCreateSas: string;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export default async function (
|
|
58
|
+
request: ZuploRequest,
|
|
59
|
+
context: ZuploContext,
|
|
60
|
+
options: RequestArchivePolicyOptions,
|
|
61
|
+
) {
|
|
62
|
+
// because we will read the body, we need to
|
|
63
|
+
// create a clone of this request first, otherwise
|
|
64
|
+
// there may be two attempts to read the body
|
|
65
|
+
// causing a runtime error
|
|
66
|
+
const clone = request.clone();
|
|
67
|
+
const body = await clone.text();
|
|
68
|
+
|
|
69
|
+
// let's generate a unique blob name based on the date and requestId
|
|
70
|
+
const blobName = `${Date.now()}-${request.requestId}.req.txt`;
|
|
71
|
+
|
|
72
|
+
const url = `${options.blobContainerPath}/${blobName}?${options.blobCreateSas}`;
|
|
73
|
+
|
|
74
|
+
const result = await fetch(url, {
|
|
75
|
+
method: "PUT",
|
|
76
|
+
body: body,
|
|
77
|
+
headers: {
|
|
78
|
+
"x-ms-blob-type": "BlockBlob",
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
if (result.status > 201) {
|
|
83
|
+
const err = {
|
|
84
|
+
message: `Error archiving file`,
|
|
85
|
+
status: result.status,
|
|
86
|
+
body: await result.text(),
|
|
87
|
+
};
|
|
88
|
+
request.logger.error(err);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// continue
|
|
92
|
+
return request;
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Finally, you need to configure your policies.json file to include the policy,
|
|
97
|
+
example below:
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"name": "request-archive-policy",
|
|
102
|
+
"policyType": "code-policy",
|
|
103
|
+
"handler": {
|
|
104
|
+
"export": "default",
|
|
105
|
+
"module": "$import(./modules/archive-request-policy)",
|
|
106
|
+
"options": {
|
|
107
|
+
"blobCreateSas": "$env(BLOB_CREATE_SAS)",
|
|
108
|
+
"blobContainerPath": "$env(BLOB_CONTAINER_PATH)"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Don't forget to reference the `file-archive-policy` in the policies.inbound
|
|
115
|
+
property of your routes.
|
|
116
|
+
|
|
117
|
+
Here's the policy in action:
|
|
118
|
+
|
|
119
|
+

|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Branch-Based Deployments
|
|
3
|
+
sidebar_label: Branch-Based Deployments
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo uses a branch-based deployment model that automatically maps Git branches
|
|
7
|
+
to environments. This GitOps approach allows teams to manage API deployments
|
|
8
|
+
using familiar version control workflows.
|
|
9
|
+
|
|
10
|
+
## How Branch-Based Deployments Work
|
|
11
|
+
|
|
12
|
+
When you connect your Zuplo project to a Git repository (GitHub, GitLab,
|
|
13
|
+
Bitbucket, or Azure DevOps), Zuplo automatically deploys your API whenever
|
|
14
|
+
changes are pushed to a branch. The deployment model follows these rules:
|
|
15
|
+
|
|
16
|
+
1. **One branch = One environment**: Each Git branch creates a corresponding
|
|
17
|
+
Zuplo environment
|
|
18
|
+
2. **Default branch = Production**: The repository's default branch (typically
|
|
19
|
+
`main` or `master`) deploys to the **Production** environment
|
|
20
|
+
3. **All other branches = Preview**: Any branch that's not the default branch
|
|
21
|
+
deploys to a **Preview** environment
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
Git Repository Zuplo Environments
|
|
25
|
+
───────────────── ──────────────────
|
|
26
|
+
main ─────────────────► Production (main)
|
|
27
|
+
staging ─────────────────► Preview (staging)
|
|
28
|
+
feature/auth ─────────────────► Preview (feature/auth)
|
|
29
|
+
bugfix/123 ─────────────────► Preview (bugfix/123)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Environment Names and URLs
|
|
33
|
+
|
|
34
|
+
When Zuplo deploys an environment from a branch, the environment name matches
|
|
35
|
+
the branch name. For example:
|
|
36
|
+
|
|
37
|
+
| Branch Name | Environment Name | Example URL |
|
|
38
|
+
| -------------- | ---------------- | --------------------------------------------------- |
|
|
39
|
+
| `main` | main | `https://my-project-main-abc1234.zuplo.app` |
|
|
40
|
+
| `staging` | staging | `https://my-project-staging-def5678.zuplo.app` |
|
|
41
|
+
| `feature/auth` | feature/auth | `https://my-project-feature-auth-ghi9012.zuplo.app` |
|
|
42
|
+
|
|
43
|
+
:::note
|
|
44
|
+
|
|
45
|
+
The environment URL includes a unique identifier to ensure each deployment has a
|
|
46
|
+
distinct address. Configure [custom domains](./custom-domains.mdx) for your
|
|
47
|
+
environments.
|
|
48
|
+
|
|
49
|
+
:::
|
|
50
|
+
|
|
51
|
+
## Production vs Preview Environments
|
|
52
|
+
|
|
53
|
+
### What Determines the Production Environment
|
|
54
|
+
|
|
55
|
+
The **Production** environment is determined by your repository's **default
|
|
56
|
+
branch** setting. This is configured in your Git provider (GitHub, GitLab,
|
|
57
|
+
etc.), not in Zuplo. When you change your repository's default branch, Zuplo
|
|
58
|
+
automatically treats the new default branch as Production.
|
|
59
|
+
|
|
60
|
+
To change which branch is your Production environment:
|
|
61
|
+
|
|
62
|
+
1. Go to your Git repository settings (for example, GitHub > Settings >
|
|
63
|
+
General > Default branch)
|
|
64
|
+
2. Change the default branch to your desired branch
|
|
65
|
+
3. Zuplo will now treat deployments from this branch as Production
|
|
66
|
+
|
|
67
|
+
### Technical Differences
|
|
68
|
+
|
|
69
|
+
There is **no technical difference** between Production and Preview
|
|
70
|
+
environments. Both:
|
|
71
|
+
|
|
72
|
+
- Have identical performance characteristics
|
|
73
|
+
- Support all Zuplo features
|
|
74
|
+
- Run on the same infrastructure
|
|
75
|
+
|
|
76
|
+
The distinction is primarily for:
|
|
77
|
+
|
|
78
|
+
- **Environment variable management**: You can set different values for
|
|
79
|
+
Production vs Preview environments
|
|
80
|
+
- **API key buckets**: Production and Preview environments use separate API key
|
|
81
|
+
buckets by default
|
|
82
|
+
- **Organization**: Helps teams distinguish between live and test deployments
|
|
83
|
+
|
|
84
|
+
### Using Preview Environments as Production
|
|
85
|
+
|
|
86
|
+
Some customers choose to use Preview environments as additional "production"
|
|
87
|
+
deployments. For example, you might have:
|
|
88
|
+
|
|
89
|
+
- `main` → Production (US customers)
|
|
90
|
+
- `eu-production` → Preview, but serving EU customers
|
|
91
|
+
- `staging` → Preview for testing
|
|
92
|
+
|
|
93
|
+
This works because Preview environments have identical capabilities to
|
|
94
|
+
Production. You can override
|
|
95
|
+
[environment variables](./environment-variables.mdx) and
|
|
96
|
+
[API key buckets](./api-key-buckets.mdx) for specific Preview environments to
|
|
97
|
+
support this pattern.
|
|
98
|
+
|
|
99
|
+
## Creating New Environments
|
|
100
|
+
|
|
101
|
+
Creating a new environment is as simple as creating a new Git branch:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Create and push a new branch
|
|
105
|
+
git checkout -b my-new-feature
|
|
106
|
+
git push -u origin my-new-feature
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Within seconds, Zuplo deploys a new environment named `my-new-feature`. You can
|
|
110
|
+
see the new environment in the Zuplo portal's environment selector.
|
|
111
|
+
|
|
112
|
+
## Deleting Environments
|
|
113
|
+
|
|
114
|
+
When you delete a branch in your Git repository, the corresponding Zuplo
|
|
115
|
+
environment is **not automatically deleted**. To delete an environment:
|
|
116
|
+
|
|
117
|
+
1. Go to the Zuplo portal
|
|
118
|
+
2. Navigate to **Settings** > **Environments**
|
|
119
|
+
3. Select the environment and delete it
|
|
120
|
+
|
|
121
|
+
Alternatively, use the [Zuplo CLI](../cli/delete.mdx):
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npx zuplo delete --url https://your-environment-url.zuplo.app --api-key $ZUPLO_API_KEY
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Automatic Deployments on Push
|
|
128
|
+
|
|
129
|
+
With the Git integration enabled, every push to a branch triggers an automatic
|
|
130
|
+
deployment:
|
|
131
|
+
|
|
132
|
+
1. **Push to default branch**: Updates the Production environment
|
|
133
|
+
2. **Push to other branches**: Updates the corresponding Preview environment
|
|
134
|
+
3. **Create new branch**: Creates a new Preview environment
|
|
135
|
+
4. **Merge pull request**: Updates the target branch's environment
|
|
136
|
+
|
|
137
|
+
This enables powerful GitOps workflows:
|
|
138
|
+
|
|
139
|
+
- **Feature branches**: Each feature gets its own testable environment
|
|
140
|
+
- **Pull request previews**: Review changes in a live environment before merging
|
|
141
|
+
- **Protected branches**: Use branch protection rules to gate Production
|
|
142
|
+
deployments
|
|
143
|
+
|
|
144
|
+
## Environment Variables Per Branch
|
|
145
|
+
|
|
146
|
+
Environment variables can be scoped to specific environments:
|
|
147
|
+
|
|
148
|
+
| Scope | Description |
|
|
149
|
+
| ---------------- | ---------------------------------------------------------- |
|
|
150
|
+
| Production | Only applies to the Production environment |
|
|
151
|
+
| Preview | Applies to all Preview environments |
|
|
152
|
+
| Specific Preview | Applies to a specific Preview environment (by branch name) |
|
|
153
|
+
| Working Copy | Only applies to development environments |
|
|
154
|
+
|
|
155
|
+
See [Environment Variables](./environment-variables.mdx) for configuration
|
|
156
|
+
details.
|
|
157
|
+
|
|
158
|
+
## Switching the Production Branch
|
|
159
|
+
|
|
160
|
+
If you need to change which branch serves as Production:
|
|
161
|
+
|
|
162
|
+
1. **Update your Git repository's default branch**:
|
|
163
|
+
- GitHub: Settings > General > Default branch
|
|
164
|
+
- GitLab: Settings > Repository > Branch defaults
|
|
165
|
+
- Bitbucket: Repository settings > Branching model
|
|
166
|
+
- Azure DevOps: Project settings > Repositories > Default branch
|
|
167
|
+
|
|
168
|
+
2. **Verify the change in Zuplo**: The environment deployed from your new
|
|
169
|
+
default branch will now be labeled as Production
|
|
170
|
+
|
|
171
|
+
:::caution
|
|
172
|
+
|
|
173
|
+
Changing the default branch affects which environment receives Production
|
|
174
|
+
environment variables and uses the Production API key bucket. Plan this change
|
|
175
|
+
carefully to avoid service disruption.
|
|
176
|
+
|
|
177
|
+
:::
|
|
178
|
+
|
|
179
|
+
## Next Steps
|
|
180
|
+
|
|
181
|
+
- [Environments Overview](./environments.mdx) - Learn about environment types
|
|
182
|
+
- [Source Control Integration](./source-control.mdx) - Set up Git integration
|
|
183
|
+
- [Custom CI/CD Pipelines](./custom-ci-cd.mdx) - Build custom deployment
|
|
184
|
+
workflows
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Bypass a Policy for Testing
|
|
3
|
+
sidebar_label: Bypass a Policy
|
|
4
|
+
description:
|
|
5
|
+
Learn how to bypass policies for testing and debugging using API key metadata
|
|
6
|
+
or custom policies in Zuplo.
|
|
7
|
+
tags:
|
|
8
|
+
- testing
|
|
9
|
+
- authentication
|
|
10
|
+
- custom-code
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
There are times when you need to bypass a policy for purposes such as testing,
|
|
14
|
+
debugging, writing health checks, etc. This guide will show you a few ways to
|
|
15
|
+
bypass a policy.
|
|
16
|
+
|
|
17
|
+
## Bypass a Policy Using a Test API Key
|
|
18
|
+
|
|
19
|
+
If you are using Zuplo API Key Authentication and want to create a test API Key
|
|
20
|
+
that can bypass a policy, you can quickly do so by using the API Key metadata
|
|
21
|
+
and a custom policy.
|
|
22
|
+
|
|
23
|
+
### Step 1: Create a Custom Policy
|
|
24
|
+
|
|
25
|
+
The
|
|
26
|
+
[Custom Code Inbound Policy](../policies/custom-code-inbound.mdx#writing-a-policy)
|
|
27
|
+
is essentially a wrapper around whatever policy you want to bypass. In this
|
|
28
|
+
example, we will create a custom policy that bypasses the `monetization-inbound`
|
|
29
|
+
policy.
|
|
30
|
+
|
|
31
|
+
This policy first checks for the presence of a `testApiKey` flag in the user's
|
|
32
|
+
`data` (which is the API Key metadata). If the flag is present, the policy
|
|
33
|
+
returns the request as is. Otherwise, it invokes the `monetization-inbound`
|
|
34
|
+
policy using the `invokeInboundPolicy` method on the `ZuploContext` object.
|
|
35
|
+
|
|
36
|
+
Create the custom policy configuration in the `policies.json` file.
|
|
37
|
+
|
|
38
|
+
```json title="config/policies.json"
|
|
39
|
+
{
|
|
40
|
+
"policies": [{
|
|
41
|
+
{
|
|
42
|
+
"name": "monetization-with-bypass-inbound",
|
|
43
|
+
"policyType": "custom-code-inbound",
|
|
44
|
+
"handler": {
|
|
45
|
+
"export": "default",
|
|
46
|
+
"module": "$import(./modules/monetization-with-bypass)",
|
|
47
|
+
"options": {
|
|
48
|
+
"config1": "YOUR_VALUE",
|
|
49
|
+
"config2": true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
}
|
|
53
|
+
}]
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Create a new module for the policy code.
|
|
58
|
+
|
|
59
|
+
```ts title="modules/monetization-with-bypass.ts"
|
|
60
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
61
|
+
|
|
62
|
+
export default async function policy(
|
|
63
|
+
request: ZuploRequest,
|
|
64
|
+
context: ZuploContext,
|
|
65
|
+
) {
|
|
66
|
+
if (request.user.data.testApiKey === true) {
|
|
67
|
+
context.log.info("Bypassing monetization-inbound policy for testing.");
|
|
68
|
+
return request;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return context.invokeInboundPolicy("monetization-inbound", request);
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Step 2: Replace the Monetization Policy with the Custom Policy
|
|
76
|
+
|
|
77
|
+
Wherever you use the `monetization-inbound` policy, replace it with the custom
|
|
78
|
+
the custom policy.
|
|
79
|
+
|
|
80
|
+
```json title="config/routes.oas.json"
|
|
81
|
+
"x-zuplo-route": {
|
|
82
|
+
"corsPolicy": "none",
|
|
83
|
+
"handler": {
|
|
84
|
+
"export": "default",
|
|
85
|
+
"module": "$import(./modules/todos-and-users)",
|
|
86
|
+
"options": {}
|
|
87
|
+
},
|
|
88
|
+
"policies": {
|
|
89
|
+
"inbound": ["monetization-with-bypass-inbound"]
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Step 3: Create a Test API Key
|
|
95
|
+
|
|
96
|
+
To create a test API Key, navigate to **Services** in your Zuplo Project. Select
|
|
97
|
+
the API Key Bucket you want to use and click **Create Consumer**. Enter a name
|
|
98
|
+
for the consumer. Set the metadata to include the `testApiKey` flag as shown
|
|
99
|
+
below.
|
|
100
|
+
|
|
101
|
+

|
|
102
|
+
|
|
103
|
+
Now when you call the API with the test API Key, the `monetization-inbound`
|
|
104
|
+
policy will be bypassed.
|
|
105
|
+
|
|
106
|
+
## Use a JWT Token Claim
|
|
107
|
+
|
|
108
|
+
In the above example, we used the API Key metadata to bypass the policy.
|
|
109
|
+
However, if you are using JWT authentication, you can follow the same principle
|
|
110
|
+
by adding a custom claim to the JWT token. Many providers, like
|
|
111
|
+
[Auth0](https://auth0.com/docs/secure/tokens/json-web-tokens/create-custom-claims),
|
|
112
|
+
allow you to add custom claims to the JWT token.
|
|
113
|
+
|
|
114
|
+
The claims for a JWT token are added to the `request.user.data` object when you
|
|
115
|
+
use one of the Zuplo JWT Authentication policies. So you can use the same code
|
|
116
|
+
as the previous API Token example, by adding a custom `testApiKey` claim to the
|
|
117
|
+
JWT token.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: How to check an incoming IP address
|
|
3
|
+
sidebar_label: "Check IP Address"
|
|
4
|
+
description:
|
|
5
|
+
Learn how to access the true client IP address of requests using the
|
|
6
|
+
true-client-ip header.
|
|
7
|
+
tags:
|
|
8
|
+
- request-handling
|
|
9
|
+
- deployment
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
Sometimes you want to access the true IP address of the gateway's client making
|
|
13
|
+
the current request. To do this you can read the `true-client-ip` header:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const ip = request.headers.get("true-client-ip");
|
|
17
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Azure Pipelines: 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="azure-pipelines.yml"
|
|
9
|
+
trigger:
|
|
10
|
+
- main
|
|
11
|
+
|
|
12
|
+
pool:
|
|
13
|
+
vmImage: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- task: NodeTool@0
|
|
17
|
+
inputs:
|
|
18
|
+
versionSpec: "20.x"
|
|
19
|
+
displayName: "Install Node.js"
|
|
20
|
+
|
|
21
|
+
- script: npm install
|
|
22
|
+
displayName: "Install dependencies"
|
|
23
|
+
|
|
24
|
+
- script: npx zuplo deploy --api-key $(ZUPLO_API_KEY)
|
|
25
|
+
displayName: "Deploy to Zuplo"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This pipeline:
|
|
29
|
+
|
|
30
|
+
1. Triggers on pushes to the `main` branch
|
|
31
|
+
2. Sets up Node.js 20
|
|
32
|
+
3. Installs dependencies
|
|
33
|
+
4. Deploys to Zuplo using the branch name as the environment name
|
|
34
|
+
|
|
35
|
+
## Adding the API Key
|
|
36
|
+
|
|
37
|
+
Add `ZUPLO_API_KEY` as a pipeline variable:
|
|
38
|
+
|
|
39
|
+
1. Edit your pipeline in Azure DevOps
|
|
40
|
+
2. Click **Variables**
|
|
41
|
+
3. Add `ZUPLO_API_KEY` with your API key
|
|
42
|
+
4. Check **Keep this value secret**
|
|
43
|
+
|
|
44
|
+
Or use a variable group for sharing across pipelines.
|
|
45
|
+
|
|
46
|
+
## Next Steps
|
|
47
|
+
|
|
48
|
+
- Add [testing after deployment](./deploy-and-test.mdx)
|
|
49
|
+
- Set up [PR preview environments](./pr-preview-environments.mdx)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Azure Pipelines: 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="azure-pipelines.yml"
|
|
9
|
+
trigger:
|
|
10
|
+
- main
|
|
11
|
+
|
|
12
|
+
pr:
|
|
13
|
+
- main
|
|
14
|
+
|
|
15
|
+
pool:
|
|
16
|
+
vmImage: ubuntu-latest
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- task: NodeTool@0
|
|
20
|
+
inputs:
|
|
21
|
+
versionSpec: "20.x"
|
|
22
|
+
displayName: "Install Node.js"
|
|
23
|
+
|
|
24
|
+
- script: npm install
|
|
25
|
+
displayName: "Install dependencies"
|
|
26
|
+
|
|
27
|
+
- script: |
|
|
28
|
+
set -o pipefail
|
|
29
|
+
npx zuplo deploy --api-key $(ZUPLO_API_KEY) 2>&1 | tee ./DEPLOYMENT_STDOUT
|
|
30
|
+
displayName: "Deploy to Zuplo"
|
|
31
|
+
|
|
32
|
+
- script: |
|
|
33
|
+
DEPLOYMENT_URL=$(grep -oP 'Deployed to \K(https://[^ ]+)' ./DEPLOYMENT_STDOUT)
|
|
34
|
+
npx zuplo test --endpoint "$DEPLOYMENT_URL"
|
|
35
|
+
displayName: "Run tests"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
This pipeline:
|
|
39
|
+
|
|
40
|
+
1. Deploys to Zuplo and captures the output
|
|
41
|
+
2. Extracts the deployment URL from the output
|
|
42
|
+
3. Runs tests against the deployed environment
|
|
43
|
+
|
|
44
|
+
## Next Steps
|
|
45
|
+
|
|
46
|
+
- Add [PR preview environments](./pr-preview-environments.mdx) with cleanup
|
|
47
|
+
- Run [local tests](./local-testing.mdx) before deploying
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Azure Pipelines: 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="azure-pipelines.yml"
|
|
9
|
+
trigger:
|
|
10
|
+
- main
|
|
11
|
+
|
|
12
|
+
pool:
|
|
13
|
+
vmImage: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
stages:
|
|
16
|
+
- stage: LocalTest
|
|
17
|
+
displayName: "Local Testing"
|
|
18
|
+
jobs:
|
|
19
|
+
- job: Test
|
|
20
|
+
steps:
|
|
21
|
+
- task: NodeTool@0
|
|
22
|
+
inputs:
|
|
23
|
+
versionSpec: "20.x"
|
|
24
|
+
displayName: "Install Node.js"
|
|
25
|
+
|
|
26
|
+
- script: npm install
|
|
27
|
+
displayName: "Install dependencies"
|
|
28
|
+
|
|
29
|
+
- script: |
|
|
30
|
+
npx zuplo dev &
|
|
31
|
+
DEV_PID=$!
|
|
32
|
+
sleep 10
|
|
33
|
+
npx zuplo test --endpoint http://localhost:9000
|
|
34
|
+
kill $DEV_PID
|
|
35
|
+
displayName: "Start local server and run tests"
|
|
36
|
+
|
|
37
|
+
- stage: Deploy
|
|
38
|
+
displayName: "Deploy to Zuplo"
|
|
39
|
+
dependsOn: LocalTest
|
|
40
|
+
condition:
|
|
41
|
+
and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
|
|
42
|
+
jobs:
|
|
43
|
+
- job: Deploy
|
|
44
|
+
steps:
|
|
45
|
+
- task: NodeTool@0
|
|
46
|
+
inputs:
|
|
47
|
+
versionSpec: "20.x"
|
|
48
|
+
|
|
49
|
+
- script: npm install
|
|
50
|
+
|
|
51
|
+
- script: npx zuplo deploy --api-key $(ZUPLO_API_KEY)
|
|
52
|
+
displayName: "Deploy to Zuplo"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Local tests run first. Only if they pass does deployment proceed.
|
|
56
|
+
|
|
57
|
+
## Next Steps
|
|
58
|
+
|
|
59
|
+
- Add [multi-stage deployment](./multi-stage-deployment.mdx) with staging
|