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,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Keys
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Zuplo includes a fully managed API key system with global edge validation,
|
|
6
|
+
self-serve developer access, and leak detection. This page explains how the
|
|
7
|
+
system works.
|
|
8
|
+
|
|
9
|
+
## Core objects
|
|
10
|
+
|
|
11
|
+
The API key system has three core objects:
|
|
12
|
+
|
|
13
|
+
- **Buckets** group consumers for an environment. Each Zuplo project has buckets
|
|
14
|
+
for production, preview, and development. Buckets can be shared across
|
|
15
|
+
projects so consumers can authenticate to multiple APIs with a single key.
|
|
16
|
+
- **Consumers** are the identities that own API keys. Each consumer has a unique
|
|
17
|
+
name within its bucket, optional metadata (available at runtime), and optional
|
|
18
|
+
tags (for management queries).
|
|
19
|
+
- **API Keys** are the credential strings used to authenticate. Each consumer
|
|
20
|
+
can have multiple keys. All keys for a consumer share the same identity and
|
|
21
|
+
metadata.
|
|
22
|
+
|
|
23
|
+
See [API Key Management](../articles/api-key-management.mdx) for a full
|
|
24
|
+
overview, and [API Key Administration](../articles/api-key-administration.mdx)
|
|
25
|
+
for managing consumers in the portal.
|
|
26
|
+
|
|
27
|
+
## How validation works
|
|
28
|
+
|
|
29
|
+
When a request includes an API key, the
|
|
30
|
+
[API Key Authentication](../policies/api-key-inbound.mdx) policy validates it
|
|
31
|
+
against Zuplo's globally distributed key service. Validation happens at the edge
|
|
32
|
+
in 300+ data centers, keeping latency low and load off your backend.
|
|
33
|
+
|
|
34
|
+
Key changes (creation, revocation, deletion) replicate globally in seconds.
|
|
35
|
+
|
|
36
|
+
After successful validation, the policy populates `request.user`:
|
|
37
|
+
|
|
38
|
+
- `request.user.sub` is set to the consumer's name
|
|
39
|
+
- `request.user.data` contains the consumer's metadata (plan, customerId, etc.)
|
|
40
|
+
|
|
41
|
+
This lets downstream policies and handlers make authorization decisions, apply
|
|
42
|
+
per-consumer [rate limits](./rate-limiting.md), or forward identity to your
|
|
43
|
+
backend.
|
|
44
|
+
|
|
45
|
+
See [Authentication](./authentication.mdx) for how `request.user` works across
|
|
46
|
+
all auth methods, and [RequestUser](../programmable-api/request-user.mdx) for
|
|
47
|
+
the full type reference.
|
|
48
|
+
|
|
49
|
+
## Consumer metadata
|
|
50
|
+
|
|
51
|
+
Metadata is a JSON object stored on each consumer that is available at runtime
|
|
52
|
+
when the consumer's key is used. Common uses:
|
|
53
|
+
|
|
54
|
+
- **Plan/tier**: `{"plan": "gold"}` for per-plan rate limiting or feature gating
|
|
55
|
+
- **Customer ID**: `{"customerId": "cust_123"}` for forwarding identity to your
|
|
56
|
+
backend
|
|
57
|
+
- **Organization**: `{"orgId": 456}` for multi-tenant routing
|
|
58
|
+
|
|
59
|
+
Metadata is set when creating a consumer via the
|
|
60
|
+
[portal](../articles/api-key-administration.mdx),
|
|
61
|
+
[Developer API](../articles/api-key-api.mdx), or
|
|
62
|
+
[developer portal self-serve](#self-serve-key-management).
|
|
63
|
+
|
|
64
|
+
## Tags vs metadata
|
|
65
|
+
|
|
66
|
+
**Metadata** is sent to the runtime on every request and is used for
|
|
67
|
+
authorization and routing. Keep it small.
|
|
68
|
+
|
|
69
|
+
**Tags** are key-value pairs used only for management (querying, filtering,
|
|
70
|
+
organizing consumers via the API). Tags are not sent to the runtime.
|
|
71
|
+
|
|
72
|
+
## API key format and leak detection
|
|
73
|
+
|
|
74
|
+
Zuplo API keys use a structured format prefixed with `zpka_` followed by
|
|
75
|
+
cryptographically random characters and a signature. This format enables
|
|
76
|
+
automatic [leak detection](../articles/api-key-leak-detection.mdx): if one of
|
|
77
|
+
your keys appears in a public GitHub repository, Zuplo sends an alert with the
|
|
78
|
+
token and the URL where it was found.
|
|
79
|
+
|
|
80
|
+
Leak detection is enabled automatically for all keys using the standard format.
|
|
81
|
+
|
|
82
|
+
See [API Key Leak Detection](../articles/api-key-leak-detection.mdx) for
|
|
83
|
+
details.
|
|
84
|
+
|
|
85
|
+
## Self-serve key management
|
|
86
|
+
|
|
87
|
+
The [Developer Portal](../dev-portal/introduction.mdx) includes built-in
|
|
88
|
+
self-serve API key management. Your API consumers can sign in to the portal and
|
|
89
|
+
create, view, and delete their own keys without contacting your team.
|
|
90
|
+
|
|
91
|
+
To enable self-serve access, assign a **manager** to a consumer. Managers are
|
|
92
|
+
identified by email and identity provider subject. This can be done in the
|
|
93
|
+
portal, via the [Developer API](../articles/api-key-api.mdx), or automatically
|
|
94
|
+
when a user signs in using
|
|
95
|
+
[Auth0](../dev-portal/dev-portal-create-consumer-on-auth.mdx) or another
|
|
96
|
+
identity provider.
|
|
97
|
+
|
|
98
|
+
You can also embed the key management UI directly in your own application using
|
|
99
|
+
the [API Key React Component](../articles/api-key-react-component.mdx).
|
|
100
|
+
|
|
101
|
+
## Buckets and environments
|
|
102
|
+
|
|
103
|
+
Each project has separate buckets for production, preview, and working copy
|
|
104
|
+
environments. This means API keys created in production don't work in preview,
|
|
105
|
+
and vice versa.
|
|
106
|
+
|
|
107
|
+
For testing, you can specify a custom bucket name on the
|
|
108
|
+
[API Key Authentication](../policies/api-key-inbound.mdx) policy to share keys
|
|
109
|
+
across environments. Enterprise customers can share buckets across projects or
|
|
110
|
+
accounts.
|
|
111
|
+
|
|
112
|
+
See [API Key Buckets](../articles/api-key-buckets.mdx) for details on bucket
|
|
113
|
+
configuration and [Service Limits](../articles/api-key-service-limits.mdx) for
|
|
114
|
+
limits on consumers and keys.
|
|
115
|
+
|
|
116
|
+
## Managing keys programmatically
|
|
117
|
+
|
|
118
|
+
The [Zuplo Developer API](../articles/api-key-api.mdx) provides full CRUD
|
|
119
|
+
operations for buckets, consumers, keys, and managers. Use it to:
|
|
120
|
+
|
|
121
|
+
- Create consumers and keys as part of your onboarding flow
|
|
122
|
+
- Sync consumers with your billing system
|
|
123
|
+
- Bulk-create keys for migration
|
|
124
|
+
- Query consumers by tags
|
|
125
|
+
|
|
126
|
+
See the [API Reference](/docs/api) for the complete endpoint documentation.
|
|
127
|
+
|
|
128
|
+
## Related documentation
|
|
129
|
+
|
|
130
|
+
- [API Key Management](../articles/api-key-management.mdx) -- Overview and
|
|
131
|
+
getting started
|
|
132
|
+
- [API Key Authentication Policy](../policies/api-key-inbound.mdx) -- Policy
|
|
133
|
+
configuration reference
|
|
134
|
+
- [API Key Administration](../articles/api-key-administration.mdx) -- Managing
|
|
135
|
+
keys in the portal
|
|
136
|
+
- [Using the API Key API](../articles/api-key-api.mdx) -- Programmatic
|
|
137
|
+
management
|
|
138
|
+
- [End User Access](../articles/api-key-end-users.mdx) -- Self-serve in the
|
|
139
|
+
developer portal
|
|
140
|
+
- [React Component](../articles/api-key-react-component.mdx) -- Embed key
|
|
141
|
+
management in your app
|
|
142
|
+
- [Leak Detection](../articles/api-key-leak-detection.mdx) -- GitHub secret
|
|
143
|
+
scanning
|
|
144
|
+
- [Buckets](../articles/api-key-buckets.mdx) -- Bucket configuration
|
|
145
|
+
- [Service Limits](../articles/api-key-service-limits.mdx) -- Rate limits and
|
|
146
|
+
quotas
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Authentication
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Zuplo supports multiple authentication methods through inbound policies. All
|
|
6
|
+
authentication policies follow the same pattern: validate credentials, then
|
|
7
|
+
populate `request.user` with the authenticated identity.
|
|
8
|
+
|
|
9
|
+
## How authentication works
|
|
10
|
+
|
|
11
|
+
Authentication policies are inbound policies that run before your handler. When
|
|
12
|
+
a request arrives:
|
|
13
|
+
|
|
14
|
+
1. The auth policy extracts credentials (API key, JWT token, etc.)
|
|
15
|
+
2. It validates the credentials against the configured provider
|
|
16
|
+
3. On success, it populates `request.user` with the identity
|
|
17
|
+
4. On failure, it returns a 401 Unauthorized response (short-circuiting the
|
|
18
|
+
pipeline)
|
|
19
|
+
|
|
20
|
+
After authentication, all downstream policies and handlers can access
|
|
21
|
+
`request.user` to make authorization decisions, apply per-user rate limits, or
|
|
22
|
+
forward identity to your backend.
|
|
23
|
+
|
|
24
|
+
## The `request.user` object
|
|
25
|
+
|
|
26
|
+
All authentication methods populate the same interface:
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
interface RequestUser {
|
|
30
|
+
sub: string; // Unique subject identifier
|
|
31
|
+
data: Record<string, unknown>; // Provider-specific claims or metadata
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
For **JWT/OAuth** authentication, `sub` comes from the token's `sub` claim and
|
|
36
|
+
`data` contains the remaining token claims (email, roles, org, etc.).
|
|
37
|
+
|
|
38
|
+
For **API key** authentication, `sub` is the consumer identifier and `data`
|
|
39
|
+
contains the metadata you set when creating the consumer (plan, customerId,
|
|
40
|
+
etc.).
|
|
41
|
+
|
|
42
|
+
See [RequestUser](../programmable-api/request-user.mdx) for the full type
|
|
43
|
+
reference.
|
|
44
|
+
|
|
45
|
+
## Supported methods
|
|
46
|
+
|
|
47
|
+
### API key authentication
|
|
48
|
+
|
|
49
|
+
Zuplo's built-in [API key management](../articles/api-key-management.mdx)
|
|
50
|
+
provides a complete system for issuing, managing, and validating API keys.
|
|
51
|
+
Consumers (API key holders) can be created via the portal, API, or developer
|
|
52
|
+
portal self-serve.
|
|
53
|
+
|
|
54
|
+
Best for: B2B APIs, developer platforms, and any API where you manage consumer
|
|
55
|
+
access.
|
|
56
|
+
|
|
57
|
+
### JWT / OAuth authentication
|
|
58
|
+
|
|
59
|
+
Zuplo validates JWTs from any OpenID Connect-compatible identity provider.
|
|
60
|
+
Built-in policies exist for common providers:
|
|
61
|
+
|
|
62
|
+
- [Auth0](../policies/auth0-jwt-auth-inbound.mdx)
|
|
63
|
+
- [Clerk](../policies/clerk-jwt-auth-inbound.mdx)
|
|
64
|
+
- [Okta](../policies/okta-jwt-auth-inbound.mdx)
|
|
65
|
+
- [AWS Cognito](../policies/cognito-jwt-auth-inbound.mdx)
|
|
66
|
+
- [Firebase](../policies/firebase-jwt-inbound.mdx)
|
|
67
|
+
- [Supabase](../policies/supabase-jwt-auth-inbound.mdx)
|
|
68
|
+
- [PropelAuth](../policies/propel-auth-jwt-inbound.mdx)
|
|
69
|
+
- [OpenID Connect (generic)](../policies/open-id-jwt-auth-inbound.mdx)
|
|
70
|
+
|
|
71
|
+
Best for: APIs consumed by your own frontend, mobile apps, or services where
|
|
72
|
+
users already authenticate with an identity provider.
|
|
73
|
+
|
|
74
|
+
### Other methods
|
|
75
|
+
|
|
76
|
+
- [Basic Auth](../policies/basic-auth-inbound.mdx) - Username/password
|
|
77
|
+
authentication
|
|
78
|
+
- [mTLS](../policies/mtls-auth-inbound.mdx) - Mutual TLS certificate
|
|
79
|
+
authentication
|
|
80
|
+
- [LDAP](../policies/ldap-auth-inbound.mdx) - LDAP directory authentication
|
|
81
|
+
- [HMAC](../policies/hmac-auth-inbound.mdx) - Hash-based message authentication
|
|
82
|
+
|
|
83
|
+
## Combining authentication methods
|
|
84
|
+
|
|
85
|
+
You can support multiple auth methods on the same route (e.g., both API keys and
|
|
86
|
+
JWT tokens). The pattern is:
|
|
87
|
+
|
|
88
|
+
1. Add each auth policy to the route's inbound policies
|
|
89
|
+
2. Set `allowUnauthenticatedRequests: true` on each so they don't immediately
|
|
90
|
+
return 401
|
|
91
|
+
3. Add a custom policy after them that checks `request.user` and returns 401 if
|
|
92
|
+
no method succeeded
|
|
93
|
+
|
|
94
|
+
See [Multiple Auth Policies](../articles/multiple-auth-policies.mdx) for a
|
|
95
|
+
detailed walkthrough.
|
|
96
|
+
|
|
97
|
+
## Choosing an authentication method
|
|
98
|
+
|
|
99
|
+
| Method | Use Case |
|
|
100
|
+
| ------------------------ | ---------------------------------------------- |
|
|
101
|
+
| API Keys | B2B APIs, developer platforms, metered access |
|
|
102
|
+
| JWT (Auth0, Clerk, etc.) | User-facing APIs, SPAs, mobile apps |
|
|
103
|
+
| mTLS | Service-to-service, high-security environments |
|
|
104
|
+
| Basic Auth | Internal APIs, simple integrations |
|
|
105
|
+
| HMAC | Webhook verification, signed requests |
|
|
106
|
+
|
|
107
|
+
For most API products, **API key authentication** is the recommended starting
|
|
108
|
+
point. It provides self-serve key management, per-consumer rate limiting, and
|
|
109
|
+
usage tracking out of the box.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: How Zuplo Works
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Zuplo is a programmable API gateway that runs at the edge. This page explains
|
|
6
|
+
the architecture, runtime, and deployment model.
|
|
7
|
+
|
|
8
|
+
## Architecture
|
|
9
|
+
|
|
10
|
+
Zuplo sits between your clients and your backend APIs. Clients send requests to
|
|
11
|
+
Zuplo, which applies policies (authentication, rate limiting, validation, etc.),
|
|
12
|
+
then forwards the request to your backend. Responses pass back through outbound
|
|
13
|
+
policies before reaching the client.
|
|
14
|
+
|
|
15
|
+
<Diagram height="h-96">
|
|
16
|
+
<DiagramNode id="clients">Clients</DiagramNode>
|
|
17
|
+
<DiagramGroup id="zuplo" label="Zuplo API Gateway">
|
|
18
|
+
<DiagramNode id="inbound" variant="zuplo">
|
|
19
|
+
Inbound Policies
|
|
20
|
+
</DiagramNode>
|
|
21
|
+
<DiagramNode id="handler" variant="zuplo">
|
|
22
|
+
Handler
|
|
23
|
+
</DiagramNode>
|
|
24
|
+
<DiagramNode id="outbound" variant="zuplo">
|
|
25
|
+
Outbound Policies
|
|
26
|
+
</DiagramNode>
|
|
27
|
+
</DiagramGroup>
|
|
28
|
+
<DiagramNode id="backend">Your Backend API</DiagramNode>
|
|
29
|
+
<DiagramEdge from="clients" to="zuplo" />
|
|
30
|
+
<DiagramEdge from="inbound" to="handler" fromSide="bottom" toSide="top" />
|
|
31
|
+
<DiagramEdge from="handler" to="outbound" fromSide="bottom" toSide="top" />
|
|
32
|
+
<DiagramEdge from="zuplo" to="backend" />
|
|
33
|
+
</Diagram>
|
|
34
|
+
|
|
35
|
+
Zuplo is cloud-agnostic. It works with backends running on any cloud provider or
|
|
36
|
+
private infrastructure. Multiple
|
|
37
|
+
[secure connectivity options](../articles/securing-your-backend.mdx) are
|
|
38
|
+
available including mTLS, shared secrets, and secure tunnels.
|
|
39
|
+
|
|
40
|
+
## Edge runtime
|
|
41
|
+
|
|
42
|
+
Zuplo's runtime is based on Web Worker technology, the same foundational
|
|
43
|
+
approach used by platforms like Deno Deploy, Vercel Edge Functions, and
|
|
44
|
+
Cloudflare Workers. Code runs in lightweight V8 isolates rather than containers
|
|
45
|
+
or virtual machines.
|
|
46
|
+
|
|
47
|
+
This architecture provides:
|
|
48
|
+
|
|
49
|
+
- **Near-zero cold starts** - isolates start in milliseconds, not seconds
|
|
50
|
+
- **High throughput** - tested at over 10,000 requests per second with policies
|
|
51
|
+
enabled
|
|
52
|
+
- **Low latency** - the gateway typically adds 20-30ms for basic request
|
|
53
|
+
processing
|
|
54
|
+
- **Web Standards** - built on familiar browser APIs like
|
|
55
|
+
[fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API),
|
|
56
|
+
[Request](https://developer.mozilla.org/en-US/docs/Web/API/Request),
|
|
57
|
+
[Response](https://developer.mozilla.org/en-US/docs/Web/API/Response), and
|
|
58
|
+
[Web Crypto](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API)
|
|
59
|
+
|
|
60
|
+
Custom code is written in TypeScript or JavaScript. Your backend can be written
|
|
61
|
+
in any language that speaks HTTP.
|
|
62
|
+
|
|
63
|
+
See [Web Standard APIs](../programmable-api/web-standard-apis.mdx) and
|
|
64
|
+
[Platform Limits](../articles/limits.mdx) for specifics on available APIs and
|
|
65
|
+
constraints.
|
|
66
|
+
|
|
67
|
+
## Deployment model
|
|
68
|
+
|
|
69
|
+
Zuplo offers three hosting options:
|
|
70
|
+
|
|
71
|
+
- **[Managed Edge](../managed-edge/overview.md)** - Runs in 300+ data centers
|
|
72
|
+
worldwide. Deploys in seconds via Git. Best for most use cases.
|
|
73
|
+
- **[Managed Dedicated](../dedicated/overview.mdx)** - Dedicated infrastructure
|
|
74
|
+
in your preferred cloud region. For teams with compliance, data residency, or
|
|
75
|
+
performance isolation requirements.
|
|
76
|
+
- **[Self-Hosted](../self-hosted/overview.md)** - Run Zuplo in your own
|
|
77
|
+
infrastructure.
|
|
78
|
+
|
|
79
|
+
All hosting options use the same runtime, configuration, and APIs. Your project
|
|
80
|
+
code works identically across all three.
|
|
81
|
+
|
|
82
|
+
## GitOps workflow
|
|
83
|
+
|
|
84
|
+
Everything in Zuplo is defined as code and stored in source control. The typical
|
|
85
|
+
workflow is:
|
|
86
|
+
|
|
87
|
+
1. **Develop** locally or in the Zuplo Portal
|
|
88
|
+
2. **Push** to your Git repository (GitHub, GitLab, Bitbucket, or Azure DevOps)
|
|
89
|
+
3. **Deploy** automatically - Zuplo builds and deploys your gateway globally
|
|
90
|
+
|
|
91
|
+
Deployments complete in seconds. Each Git branch gets its own isolated
|
|
92
|
+
environment with its own URL, making it easy to test changes before merging to
|
|
93
|
+
production.
|
|
94
|
+
|
|
95
|
+
See [Environments](../articles/environments.mdx) and
|
|
96
|
+
[Source Control](../articles/source-control.mdx) for details.
|
|
97
|
+
|
|
98
|
+
## Protocols
|
|
99
|
+
|
|
100
|
+
Zuplo can proxy any HTTP traffic including REST, GraphQL, WebSockets, and other
|
|
101
|
+
HTTP-based protocols. HTTP/2 is fully supported.
|
|
102
|
+
|
|
103
|
+
## Programmability
|
|
104
|
+
|
|
105
|
+
While most API gateways limit you to configuration, Zuplo lets you write custom
|
|
106
|
+
logic that runs in-process at the gateway layer:
|
|
107
|
+
|
|
108
|
+
- **[Custom policies](../policies/custom-code-inbound.mdx)** - intercept
|
|
109
|
+
requests and responses with TypeScript
|
|
110
|
+
- **[Custom handlers](../handlers/custom-handler.mdx)** - implement entire
|
|
111
|
+
request handlers in code
|
|
112
|
+
- **[Runtime extensions](../programmable-api/runtime-extensions.mdx)** - add
|
|
113
|
+
global hooks that run on every request
|
|
114
|
+
|
|
115
|
+
Custom code has access to the full
|
|
116
|
+
[Programming API](../programmable-api/overview.mdx) including caching, logging,
|
|
117
|
+
environment variables, and more.
|
|
118
|
+
|
|
119
|
+
See [Request Lifecycle](./request-lifecycle.md) for details on how these
|
|
120
|
+
extension points compose together.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Project Structure
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A Zuplo project is a standard Node.js-style project managed via Git. Here is the
|
|
6
|
+
typical layout:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
my-api/
|
|
10
|
+
├── config/
|
|
11
|
+
│ ├── routes.oas.json # Route definitions (OpenAPI format)
|
|
12
|
+
│ └── policies.json # Policy configuration
|
|
13
|
+
├── modules/
|
|
14
|
+
│ └── my-handler.ts # Custom handlers and policies
|
|
15
|
+
├── docs/ # Developer portal (optional)
|
|
16
|
+
│ └── zudoku.config.ts
|
|
17
|
+
├── zuplo.jsonc # Project configuration
|
|
18
|
+
├── package.json
|
|
19
|
+
├── .env # Local environment variables (do not commit)
|
|
20
|
+
└── .env.zuplo # Generated by `zuplo link` (do not commit)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Core files
|
|
24
|
+
|
|
25
|
+
### `config/routes.oas.json`
|
|
26
|
+
|
|
27
|
+
This is an OpenAPI 3.1 specification that defines your API routes. Each route
|
|
28
|
+
specifies the HTTP method, path, handler, and which policies to apply. Zuplo
|
|
29
|
+
extends the OpenAPI spec with `x-zuplo-route` to attach handlers and policies to
|
|
30
|
+
each operation.
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"paths": {
|
|
35
|
+
"/users/{userId}": {
|
|
36
|
+
"get": {
|
|
37
|
+
"operationId": "get-user",
|
|
38
|
+
"x-zuplo-route": {
|
|
39
|
+
"corsPolicy": "anything-goes",
|
|
40
|
+
"handler": {
|
|
41
|
+
"export": "urlForwardHandler",
|
|
42
|
+
"module": "$import(@zuplo/runtime)",
|
|
43
|
+
"options": {
|
|
44
|
+
"baseUrl": "https://api.example.com"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"policies": {
|
|
48
|
+
"inbound": ["api-key-inbound", "rate-limit-inbound"]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
You can have multiple OpenAPI files. They are processed in alphabetical order
|
|
58
|
+
during route matching.
|
|
59
|
+
|
|
60
|
+
See [OpenAPI](../articles/openapi.mdx) and [Routing](../articles/routing.mdx)
|
|
61
|
+
for details.
|
|
62
|
+
|
|
63
|
+
### `config/policies.json`
|
|
64
|
+
|
|
65
|
+
This file defines policy instances by name, type, and configuration. Routes
|
|
66
|
+
reference policies by name in their `policies.inbound` and `policies.outbound`
|
|
67
|
+
arrays.
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"policies": [
|
|
72
|
+
{
|
|
73
|
+
"name": "api-key-inbound",
|
|
74
|
+
"policyType": "api-key-inbound",
|
|
75
|
+
"handler": {
|
|
76
|
+
"export": "ApiKeyInboundPolicy",
|
|
77
|
+
"module": "$import(@zuplo/runtime)"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "rate-limit-inbound",
|
|
82
|
+
"policyType": "rate-limit-inbound",
|
|
83
|
+
"handler": {
|
|
84
|
+
"export": "RateLimitInboundPolicy",
|
|
85
|
+
"module": "$import(@zuplo/runtime)",
|
|
86
|
+
"options": {
|
|
87
|
+
"rateLimitBy": "ip",
|
|
88
|
+
"requestsAllowed": 100,
|
|
89
|
+
"timeWindowMinutes": 1
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### `zuplo.jsonc`
|
|
98
|
+
|
|
99
|
+
Project-level configuration including the runtime compatibility date and
|
|
100
|
+
deployment type.
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"version": 1,
|
|
105
|
+
"compatibilityDate": "2025-02-06",
|
|
106
|
+
"projectType": "managed-edge"
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
The `projectType` can be `managed-edge`, `managed-dedicated`, or `self-hosted`.
|
|
111
|
+
The `compatibilityDate` locks runtime behavior so updates don't break your
|
|
112
|
+
project unexpectedly.
|
|
113
|
+
|
|
114
|
+
See [Project Configuration](../programmable-api/zuplo-json.mdx) for all options.
|
|
115
|
+
|
|
116
|
+
### `modules/`
|
|
117
|
+
|
|
118
|
+
Contains your custom TypeScript code for handlers and policies. These modules
|
|
119
|
+
are referenced from `routes.oas.json` and `policies.json` using
|
|
120
|
+
`$import(./modules/...)`.
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"handler": {
|
|
125
|
+
"export": "default",
|
|
126
|
+
"module": "$import(./modules/my-handler)"
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### `docs/` (optional)
|
|
132
|
+
|
|
133
|
+
If you use the Zuplo Developer Portal, this directory contains the portal
|
|
134
|
+
configuration and custom pages. See
|
|
135
|
+
[Developer Portal](../dev-portal/introduction.mdx) for details.
|
|
136
|
+
|
|
137
|
+
## How the files relate
|
|
138
|
+
|
|
139
|
+
1. **`zuplo.jsonc`** sets project-wide configuration (runtime version,
|
|
140
|
+
deployment type)
|
|
141
|
+
2. **`config/routes.oas.json`** defines API routes and wires each route to a
|
|
142
|
+
handler and policies by name
|
|
143
|
+
3. **`config/policies.json`** defines the named policy instances with their
|
|
144
|
+
configuration and points to either built-in modules (`@zuplo/runtime`) or
|
|
145
|
+
custom modules in `./modules`
|
|
146
|
+
4. **`modules/`** contains the TypeScript implementations for custom handlers
|
|
147
|
+
and policies
|
|
148
|
+
|
|
149
|
+
All of this lives in Git and deploys automatically when you push.
|
|
150
|
+
|
|
151
|
+
## The `$import()` syntax
|
|
152
|
+
|
|
153
|
+
JSON configuration files (`routes.oas.json` and `policies.json`) use the
|
|
154
|
+
`$import()` syntax to reference code modules. This is a Zuplo-specific syntax
|
|
155
|
+
that resolves module references at build time.
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"module": "$import(@zuplo/runtime)"
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
References starting with `@zuplo/runtime` point to built-in Zuplo modules
|
|
164
|
+
(policies, handlers, and utilities).
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"module": "$import(./modules/my-handler)"
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
References starting with `./modules/` point to your custom TypeScript files in
|
|
173
|
+
the `modules/` directory. The `export` field specifies which named export to use
|
|
174
|
+
from that module.
|