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,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Mermaid Diagrams
|
|
3
|
+
sidebar_icon: chart-network
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Dev Portal supports rendering [Mermaid diagrams](https://mermaid.js.org/) in two ways:
|
|
7
|
+
|
|
8
|
+
| Approach | Pros | Cons |
|
|
9
|
+
| ------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
10
|
+
| **Build-Time** (rehype-mermaid) | • Faster page loads<br/>• No client-side JS needed<br/>• SEO friendly | • Requires playwright<br/>• Slower builds<br/>• Static only |
|
|
11
|
+
| **Client-Side** (`<Mermaid />`) | • Fast builds<br/>• Can be dynamic<br/>• No build dependencies | • Requires client-side JS<br/>• Slight render delay |
|
|
12
|
+
|
|
13
|
+
## Client-Side Rendering
|
|
14
|
+
|
|
15
|
+
For the [`<Mermaid />` component](/dev-portal/zudoku/components/mermaid), install the peer dependency:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install mermaid
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Then use in your MDX files (no import needed):
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
<Mermaid
|
|
25
|
+
chart={`graph TD;
|
|
26
|
+
A-->B;
|
|
27
|
+
A-->C;`}
|
|
28
|
+
/>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Outside of MDX, import from `zudoku/mermaid`:
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Mermaid } from "zudoku/mermaid";
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
See the [Mermaid component documentation](/dev-portal/zudoku/components/mermaid) for full details.
|
|
38
|
+
|
|
39
|
+
## Build-Time Rendering
|
|
40
|
+
|
|
41
|
+
<Stepper>
|
|
42
|
+
|
|
43
|
+
1. Install dependencies:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install rehype-mermaid
|
|
47
|
+
npm install -D playwright
|
|
48
|
+
npx playwright install
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
1. Add to `zudoku.build.ts`:
|
|
52
|
+
|
|
53
|
+
```tsx title="zudoku.build.ts"
|
|
54
|
+
import rehypeMermaid from "rehype-mermaid";
|
|
55
|
+
|
|
56
|
+
export default {
|
|
57
|
+
rehypePlugins: (plugins) => [[rehypeMermaid, { strategy: "inline-svg" }], ...plugins],
|
|
58
|
+
};
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
1. Use in markdown with code blocks:
|
|
62
|
+
|
|
63
|
+
````mdx
|
|
64
|
+
```mermaid
|
|
65
|
+
graph TD;
|
|
66
|
+
A-->B;
|
|
67
|
+
```
|
|
68
|
+
````
|
|
69
|
+
|
|
70
|
+
</Stepper>
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Navigation Migration
|
|
3
|
+
navigation_icon: arrow-right-left
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
This guide explains how to migrate existing configurations that used `topNavigation`, `sidebar` and
|
|
7
|
+
`customPages` to the new unified `navigation` configuration introduced in vNEXT.
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Navigation is now configured through a single `navigation` array. Items at the root level become top
|
|
12
|
+
navigation tabs, while nested categories automatically form the sidebar. Custom pages are added
|
|
13
|
+
using the `custom-page` item type.
|
|
14
|
+
|
|
15
|
+
## Before and After
|
|
16
|
+
|
|
17
|
+
```tsx title="Before"
|
|
18
|
+
const config: ZudokuConfig = {
|
|
19
|
+
topNavigation: [
|
|
20
|
+
{ id: "docs", label: "Docs" },
|
|
21
|
+
{ id: "api", label: "API" },
|
|
22
|
+
],
|
|
23
|
+
sidebar: {
|
|
24
|
+
docs: [{ type: "doc", id: "introduction" }],
|
|
25
|
+
},
|
|
26
|
+
customPages: [{ path: "/playground", render: Playground, prose: false }],
|
|
27
|
+
apis: {
|
|
28
|
+
type: "file",
|
|
29
|
+
input: "./openapi.json",
|
|
30
|
+
navigationId: "api",
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```tsx title="After"
|
|
36
|
+
const config: ZudokuConfig = {
|
|
37
|
+
navigation: [
|
|
38
|
+
{
|
|
39
|
+
type: "category",
|
|
40
|
+
label: "Docs",
|
|
41
|
+
items: ["introduction"],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: "custom-page",
|
|
45
|
+
path: "/playground",
|
|
46
|
+
element: <Playground />,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: "link",
|
|
50
|
+
to: "/api",
|
|
51
|
+
label: "API",
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
apis: [
|
|
55
|
+
{
|
|
56
|
+
path: "/api",
|
|
57
|
+
type: "file",
|
|
58
|
+
input: "./openapi.json",
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Migration steps
|
|
65
|
+
|
|
66
|
+
<Stepper>
|
|
67
|
+
|
|
68
|
+
1. **Create a `navigation` array**
|
|
69
|
+
|
|
70
|
+
Move all items from `topNavigation` and your sidebar into a new `navigation` array.
|
|
71
|
+
|
|
72
|
+
1. **Convert custom pages**
|
|
73
|
+
|
|
74
|
+
Replace entries in `customPages` with `type: "custom-page"` items inside `navigation`.
|
|
75
|
+
|
|
76
|
+
1. **Update plugin configs**
|
|
77
|
+
|
|
78
|
+
Replace all uses of `navigationId` with `path` in plugin options like `apis` or `catalogs`.
|
|
79
|
+
Navigation items of type `link` should use the `to` property to reference the path of the API or
|
|
80
|
+
catalog.
|
|
81
|
+
|
|
82
|
+
1. **Reference plugin paths in navigation**
|
|
83
|
+
|
|
84
|
+
Items produced by plugins are not added automatically. Add links or categories in your
|
|
85
|
+
`navigation` so users can access them.
|
|
86
|
+
|
|
87
|
+
</Stepper>
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Navigation Rules
|
|
3
|
+
sidebar_icon: list-tree
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
import { LayersPlusIcon, PencilIcon, SortAscIcon, ArrowUpDownIcon, TrashIcon } from "zudoku/icons";
|
|
7
|
+
|
|
8
|
+
Plugins like the OpenAPI plugin generate sidebar navigation automatically. Navigation rules let you
|
|
9
|
+
customize that generated sidebar without changing the source. You can:
|
|
10
|
+
|
|
11
|
+
- <LayersPlusIcon className="inline-block size-3.5 me-1" /> **Insert** items at a specific position
|
|
12
|
+
- <PencilIcon className="inline-block size-3.5 me-1" /> **Modify** items
|
|
13
|
+
- <SortAscIcon className="inline-block size-3.5 me-1" /> **Sort** items with a custom comparator
|
|
14
|
+
- <ArrowUpDownIcon className="inline-block size-3.5 me-1" /> **Move** items to a different position
|
|
15
|
+
- <TrashIcon className="inline-block size-3.5 me-1" /> **Remove** items
|
|
16
|
+
|
|
17
|
+
## Setup
|
|
18
|
+
|
|
19
|
+
Add a `navigationRules` array to your `zudoku.config.tsx`:
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import type { ZudokuConfig } from "zudoku";
|
|
23
|
+
|
|
24
|
+
const config: ZudokuConfig = {
|
|
25
|
+
apis: [{ type: "file", input: "./api.json", path: "api-shipments" }],
|
|
26
|
+
navigation: [{ type: "link", label: "Shipments", to: "/api-shipments" }],
|
|
27
|
+
navigationRules: [
|
|
28
|
+
// rules go here
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Inserting docs
|
|
34
|
+
|
|
35
|
+
Use `type: "insert"` to add items before or after a matched sidebar item. The `match` string uses
|
|
36
|
+
the tab label as the first segment and navigates into the sidebar tree.
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
navigationRules: [
|
|
40
|
+
{
|
|
41
|
+
type: "insert",
|
|
42
|
+
match: "Shipments/0",
|
|
43
|
+
position: "before",
|
|
44
|
+
items: [
|
|
45
|
+
{
|
|
46
|
+
type: "doc",
|
|
47
|
+
file: "api-shipments/getting-started",
|
|
48
|
+
icon: "plane-takeoff",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
This inserts a "Getting Started" doc before the first item in the Shipments sidebar.
|
|
56
|
+
|
|
57
|
+

|
|
58
|
+
|
|
59
|
+
The MDX file lives at `pages/api-shipments/getting-started.mdx` (under your configured docs
|
|
60
|
+
directory, matching the API's base path).
|
|
61
|
+
|
|
62
|
+
## Adding links
|
|
63
|
+
|
|
64
|
+
You can insert external or internal links the same way:
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
{
|
|
68
|
+
type: "insert",
|
|
69
|
+
match: "Shipments/-1",
|
|
70
|
+
position: "after",
|
|
71
|
+
items: [
|
|
72
|
+
{
|
|
73
|
+
type: "link",
|
|
74
|
+
label: "System Status",
|
|
75
|
+
to: "/status",
|
|
76
|
+
icon: "satellite",
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The `-1` index targets the last item, and `position: "after"` places the link at the very end of the
|
|
83
|
+
sidebar.
|
|
84
|
+
|
|
85
|
+

|
|
86
|
+
|
|
87
|
+
## Modifying items
|
|
88
|
+
|
|
89
|
+
Use `type: "modify"` to change properties of existing sidebar items like their icon, label, or
|
|
90
|
+
collapsed state:
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
{
|
|
94
|
+
type: "modify",
|
|
95
|
+
match: "Shipments/Shipment Management",
|
|
96
|
+
set: { icon: "box", collapsed: true },
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+

|
|
101
|
+
|
|
102
|
+
## Removing items
|
|
103
|
+
|
|
104
|
+
`type: "remove"` hides items from the sidebar. This is rarely needed since it's usually better to
|
|
105
|
+
fix the underlying source, but can be useful as a quick workaround:
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
{
|
|
109
|
+
type: "remove",
|
|
110
|
+
match: "Shipments/Deprecated Endpoint",
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Sorting items
|
|
115
|
+
|
|
116
|
+
Use `type: "sort"` to reorder children of a category alphabetically or with any custom comparator:
|
|
117
|
+
|
|
118
|
+
```tsx
|
|
119
|
+
{
|
|
120
|
+
type: "sort",
|
|
121
|
+
match: "Shipments",
|
|
122
|
+
by: (a, b) => a.label.localeCompare(b.label),
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The `by` function receives two navigation items and works like a standard `Array.sort` comparator.
|
|
127
|
+
|
|
128
|
+
## Moving items
|
|
129
|
+
|
|
130
|
+
Use `type: "move"` to relocate an existing item to a different position in the sidebar:
|
|
131
|
+
|
|
132
|
+
```tsx
|
|
133
|
+
{
|
|
134
|
+
type: "move",
|
|
135
|
+
match: "Shipments/Track a Shipment",
|
|
136
|
+
to: "Shipments/0",
|
|
137
|
+
position: "before",
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
This moves "Track a Shipment" to the top of the Shipments category. You can also move items between
|
|
142
|
+
different levels, for example from inside a category to the root level.
|
|
143
|
+
|
|
144
|
+
## Rule order
|
|
145
|
+
|
|
146
|
+
Rules are applied sequentially, so order matters. For example, sorting first and then inserting
|
|
147
|
+
places the new item at an exact position in the already-sorted list. Inserting first and then
|
|
148
|
+
sorting will sort the new item along with everything else.
|
|
149
|
+
|
|
150
|
+
## Complete example
|
|
151
|
+
|
|
152
|
+
This is the configuration used in the Cosmo Cargo demo shown above:
|
|
153
|
+
|
|
154
|
+
```tsx
|
|
155
|
+
navigationRules: [
|
|
156
|
+
{
|
|
157
|
+
type: "sort",
|
|
158
|
+
match: "Shipments",
|
|
159
|
+
by: (a, b) => a.label.localeCompare(b.label),
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: "insert",
|
|
163
|
+
match: "Shipments/Shipment",
|
|
164
|
+
position: "before",
|
|
165
|
+
items: [
|
|
166
|
+
{
|
|
167
|
+
type: "doc",
|
|
168
|
+
file: "api-shipments/getting-started",
|
|
169
|
+
icon: "plane-takeoff",
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
type: "insert",
|
|
175
|
+
match: "Shipments/-1",
|
|
176
|
+
position: "after",
|
|
177
|
+
items: [
|
|
178
|
+
{
|
|
179
|
+
type: "link",
|
|
180
|
+
label: "System Status",
|
|
181
|
+
to: "/status",
|
|
182
|
+
icon: "satellite",
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
type: "modify",
|
|
188
|
+
match: "Shipments/1",
|
|
189
|
+
set: { icon: "box" },
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Match syntax reference
|
|
195
|
+
|
|
196
|
+
For the full match syntax including label matching, index selectors, and nested paths, see the
|
|
197
|
+
[Navigation Rules reference](/dev-portal/zudoku/configuration/navigation#navigation-rules).
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_icon: cpu
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Schema Processors
|
|
6
|
+
|
|
7
|
+
Schema processors are functions that transform your OpenAPI schemas before they are used in the
|
|
8
|
+
documentation. They are defined in your `zudoku.build.ts` file and can be used to modify schemas in
|
|
9
|
+
various ways.
|
|
10
|
+
|
|
11
|
+
:::tip
|
|
12
|
+
|
|
13
|
+
For information on how to configure processors in your project, see the
|
|
14
|
+
[Build Configuration](../configuration/build-configuration) guide.
|
|
15
|
+
|
|
16
|
+
:::
|
|
17
|
+
|
|
18
|
+
## Built-in Processors
|
|
19
|
+
|
|
20
|
+
Dev Portal provides several built-in processors that you can use to transform your schemas:
|
|
21
|
+
|
|
22
|
+
### `removeExtensions`
|
|
23
|
+
|
|
24
|
+
Removes OpenAPI extensions (`x-` prefixed properties) from your schema:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { removeExtensions } from "zudoku/processors/removeExtensions";
|
|
28
|
+
import type { ZudokuBuildConfig } from "zudoku";
|
|
29
|
+
|
|
30
|
+
const buildConfig: ZudokuBuildConfig = {
|
|
31
|
+
processors: [
|
|
32
|
+
// Remove all x- prefixed properties
|
|
33
|
+
removeExtensions(),
|
|
34
|
+
|
|
35
|
+
// Remove specific extensions
|
|
36
|
+
removeExtensions({
|
|
37
|
+
keys: ["x-internal", "x-deprecated"],
|
|
38
|
+
}),
|
|
39
|
+
|
|
40
|
+
// Remove extensions based on a custom filter
|
|
41
|
+
removeExtensions({
|
|
42
|
+
shouldRemove: (key) => key.startsWith("x-zuplo"),
|
|
43
|
+
}),
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export default buildConfig;
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### `removeParameters`
|
|
51
|
+
|
|
52
|
+
Removes parameters from your schema:
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import { removeParameters } from "zudoku/processors/removeParameters";
|
|
56
|
+
import type { ZudokuBuildConfig } from "zudoku";
|
|
57
|
+
|
|
58
|
+
const buildConfig: ZudokuBuildConfig = {
|
|
59
|
+
processors: [
|
|
60
|
+
// Remove parameters by name
|
|
61
|
+
removeParameters({
|
|
62
|
+
names: ["apiKey", "secret"],
|
|
63
|
+
}),
|
|
64
|
+
|
|
65
|
+
// Remove parameters by location
|
|
66
|
+
removeParameters({
|
|
67
|
+
in: ["header", "query"],
|
|
68
|
+
}),
|
|
69
|
+
|
|
70
|
+
// Remove parameters based on a custom filter
|
|
71
|
+
removeParameters({
|
|
72
|
+
shouldRemove: ({ parameter }) => parameter["x-internal"],
|
|
73
|
+
}),
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export default buildConfig;
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### `removePaths`
|
|
81
|
+
|
|
82
|
+
Removes paths or operations from your schema:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import { removePaths } from "zudoku/processors/removePaths";
|
|
86
|
+
import type { ZudokuBuildConfig } from "zudoku";
|
|
87
|
+
|
|
88
|
+
const buildConfig: ZudokuBuildConfig = {
|
|
89
|
+
processors: [
|
|
90
|
+
// Remove entire paths
|
|
91
|
+
removePaths({
|
|
92
|
+
paths: {
|
|
93
|
+
"/internal": true,
|
|
94
|
+
"/admin": ["get", "post"],
|
|
95
|
+
},
|
|
96
|
+
}),
|
|
97
|
+
|
|
98
|
+
// Remove paths based on a custom filter
|
|
99
|
+
removePaths({
|
|
100
|
+
shouldRemove: ({ path, method, operation }) => operation["x-internal"],
|
|
101
|
+
}),
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export default buildConfig;
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
:::info
|
|
109
|
+
|
|
110
|
+
If you are missing a processor that you think should be built-in, please don't hesitate to
|
|
111
|
+
[open an issue on GitHub](https://github.com/zuplo/zudoku/issues/new).
|
|
112
|
+
|
|
113
|
+
:::
|
|
114
|
+
|
|
115
|
+
## Custom Processors
|
|
116
|
+
|
|
117
|
+
You can also create your own processors. Here's a simple example that adds a description to all
|
|
118
|
+
operations:
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
import type { ZudokuBuildConfig } from "zudoku";
|
|
122
|
+
|
|
123
|
+
async function addDescriptionProcessor({ schema }) {
|
|
124
|
+
if (!schema.paths) return schema;
|
|
125
|
+
|
|
126
|
+
// Add a description to all operations
|
|
127
|
+
Object.values(schema.paths).forEach((path) => {
|
|
128
|
+
Object.values(path).forEach((operation) => {
|
|
129
|
+
if (typeof operation === "object") {
|
|
130
|
+
operation.description = "This is a public API endpoint";
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
return schema;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const buildConfig: ZudokuBuildConfig = {
|
|
139
|
+
processors: [addDescriptionProcessor],
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
export default buildConfig;
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Adding Server URLs
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
import type { ZudokuBuildConfig } from "zudoku";
|
|
149
|
+
|
|
150
|
+
async function addServerUrl({ schema }) {
|
|
151
|
+
return {
|
|
152
|
+
...schema,
|
|
153
|
+
servers: [{ url: "https://api.example.com" }],
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const buildConfig: ZudokuBuildConfig = {
|
|
158
|
+
processors: [addServerUrl],
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export default buildConfig;
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Using Query Parameters to Split Schemas
|
|
165
|
+
|
|
166
|
+
You can use the same OpenAPI file multiple times with different processing by appending query
|
|
167
|
+
parameters to the file input string. These parameters are passed to your processors via the `params`
|
|
168
|
+
argument, allowing you to filter or transform the schema differently for each variant.
|
|
169
|
+
|
|
170
|
+
This is useful when you have a single schema containing multiple API versions or groups that you
|
|
171
|
+
want to split into separate pages.
|
|
172
|
+
|
|
173
|
+
Plain strings work out of the box. Version paths and dropdown labels are auto-generated from the
|
|
174
|
+
query parameter values. For more control, use the object form with explicit `path` and `label`.
|
|
175
|
+
|
|
176
|
+
```ts title=zudoku.config.ts
|
|
177
|
+
const config = {
|
|
178
|
+
apis: {
|
|
179
|
+
type: "file",
|
|
180
|
+
input: [
|
|
181
|
+
// Object form: explicit path and label
|
|
182
|
+
{
|
|
183
|
+
input: "openapi.json?prefix=/v2",
|
|
184
|
+
path: "latest",
|
|
185
|
+
label: "Latest (v2)",
|
|
186
|
+
},
|
|
187
|
+
// Object form: explicit path, label auto-generated from params
|
|
188
|
+
{
|
|
189
|
+
input: "openapi.json?prefix=/v1.1",
|
|
190
|
+
path: "v1.1",
|
|
191
|
+
},
|
|
192
|
+
// Plain string: both path and label auto-generated from params
|
|
193
|
+
"openapi.json?prefix=/v1",
|
|
194
|
+
],
|
|
195
|
+
path: "/api",
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
```ts title=zudoku.build.ts
|
|
201
|
+
import type { ZudokuBuildConfig } from "zudoku";
|
|
202
|
+
|
|
203
|
+
const buildConfig: ZudokuBuildConfig = {
|
|
204
|
+
processors: [
|
|
205
|
+
({ schema, params }) => {
|
|
206
|
+
const prefix = params.prefix;
|
|
207
|
+
if (!prefix) return schema;
|
|
208
|
+
|
|
209
|
+
return {
|
|
210
|
+
...schema,
|
|
211
|
+
paths: Object.fromEntries(
|
|
212
|
+
Object.entries(schema.paths ?? {}).filter(([path]) => path.startsWith(prefix)),
|
|
213
|
+
),
|
|
214
|
+
};
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
export default buildConfig;
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Each version tab will show only the endpoints matching that prefix. The query parameters are
|
|
223
|
+
arbitrary key-value pairs that you define and consume in your processors.
|
|
224
|
+
|
|
225
|
+
When schema download is enabled, param variants serve the processed (filtered) schema rather than
|
|
226
|
+
the original file.
|
|
227
|
+
|
|
228
|
+
## Best Practices
|
|
229
|
+
|
|
230
|
+
- **Handle missing properties**: Check for the existence of properties before accessing them
|
|
231
|
+
- **Return the schema**: Always return the transformed schema, even if no changes were made
|
|
232
|
+
- **Use async/await**: Processors can be async functions, which is useful for more complex
|
|
233
|
+
transformations
|
|
234
|
+
- **Chain processors**: Processors are executed in order, so you can chain multiple transformations
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Static Files
|
|
3
|
+
sidebar_icon: folder-open
|
|
4
|
+
description:
|
|
5
|
+
Learn how to serve and reference static files like images and PDFs in your Dev Portal documentation
|
|
6
|
+
using the public directory.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Dev Portal makes it easy to serve static files like images, PDFs, or any other assets alongside your
|
|
10
|
+
documentation. Any files placed in the `public` directory will be served at the root path `/` during
|
|
11
|
+
dev, and copied to the root of the dist directory as-is.
|
|
12
|
+
|
|
13
|
+
Note that you should always reference `public` assets using root absolute path - for example,
|
|
14
|
+
`public/icon.png` should be referenced in source code as `/icon.png`.
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
1. Create a `public` directory in your project root if it doesn't exist already
|
|
19
|
+
2. Place any static files in this directory
|
|
20
|
+
3. Reference these files in your documentation using the root path `/`
|
|
21
|
+
|
|
22
|
+
## Example
|
|
23
|
+
|
|
24
|
+
If you have the following structure:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
your-project/
|
|
28
|
+
├── public/
|
|
29
|
+
│ ├── images/
|
|
30
|
+
│ │ └── diagram.png
|
|
31
|
+
│ └── documents/
|
|
32
|
+
│ └── api-spec.pdf
|
|
33
|
+
└── ...
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
You can reference these files using markdown like this:
|
|
37
|
+
|
|
38
|
+
```md
|
|
39
|
+

|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
If you want users to download a file like a PDF, you can use an anchor tag like this:
|
|
43
|
+
|
|
44
|
+
```html
|
|
45
|
+
<a href="/documents/api-spec.pdf" download="/documents/api-spec.pdf">Download API specification</a>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Relative paths
|
|
49
|
+
|
|
50
|
+
If you want to reference a file that is in the same directory as the current file, you can also use
|
|
51
|
+
a relative path:
|
|
52
|
+
|
|
53
|
+
```md title="page.mdx"
|
|
54
|
+

|
|
55
|
+
```
|