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,275 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_icon: paintbrush
|
|
3
|
+
title: Colors & Theme
|
|
4
|
+
description:
|
|
5
|
+
Customize your Dev Portal site's colors and theme with flexible options, including light/dark modes,
|
|
6
|
+
custom CSS, and shadcn registry integration.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Dev Portal provides flexible theming options allowing you to customize colors, import themes from
|
|
10
|
+
[shadcn registries](https://ui.shadcn.com/docs/registry), and add custom CSS. You can create
|
|
11
|
+
cohesive light and dark mode experiences that match your brand.
|
|
12
|
+
|
|
13
|
+
:::tip
|
|
14
|
+
|
|
15
|
+
Try out the interactive [Theme Playground](https://zudoku.dev/docs/theme-playground) to experiment with colors and see
|
|
16
|
+
real-time previews of your theme changes.
|
|
17
|
+
|
|
18
|
+
:::
|
|
19
|
+
|
|
20
|
+
The theme system is built on [shadcn/ui theming](https://ui.shadcn.com/docs/theming) and
|
|
21
|
+
[Tailwind v4](https://tailwindcss.com), giving us a great foundation to build upon:
|
|
22
|
+
|
|
23
|
+
- **CSS variables** match `shadcn/ui` conventions
|
|
24
|
+
- **Tailwind v4** CSS variable system for modern styling
|
|
25
|
+
- **Theme editors** like [tweakcn](https://tweakcn.com/) work out of the box
|
|
26
|
+
- **Shadcn registries** are supported
|
|
27
|
+
|
|
28
|
+
## Custom Colors
|
|
29
|
+
|
|
30
|
+
You can manually define colors for both light and dark modes, either by extending the
|
|
31
|
+
[default theme](#default-theme) or creating a completely custom theme. Colors can be specified as
|
|
32
|
+
hex values, RGB, HSL, OKLCH, etc. - basically anything that is supported by
|
|
33
|
+
[Tailwind CSS](https://tailwindcss.com):
|
|
34
|
+
|
|
35
|
+
```ts title=zudoku.config.ts
|
|
36
|
+
const config = {
|
|
37
|
+
theme: {
|
|
38
|
+
light: {
|
|
39
|
+
background: "#ffffff",
|
|
40
|
+
foreground: "#020817",
|
|
41
|
+
card: "#ffffff",
|
|
42
|
+
cardForeground: "#020817",
|
|
43
|
+
popover: "#ffffff",
|
|
44
|
+
popoverForeground: "#020817",
|
|
45
|
+
primary: "#0284c7",
|
|
46
|
+
primaryForeground: "#ffffff",
|
|
47
|
+
secondary: "#f1f5f9",
|
|
48
|
+
secondaryForeground: "#020817",
|
|
49
|
+
muted: "#f1f5f9",
|
|
50
|
+
mutedForeground: "#64748b",
|
|
51
|
+
accent: "#f1f5f9",
|
|
52
|
+
accentForeground: "#020817",
|
|
53
|
+
destructive: "#ef4444",
|
|
54
|
+
destructiveForeground: "#ffffff",
|
|
55
|
+
border: "#e2e8f0",
|
|
56
|
+
input: "#e2e8f0",
|
|
57
|
+
ring: "#0284c7",
|
|
58
|
+
radius: "0.5rem",
|
|
59
|
+
},
|
|
60
|
+
dark: {
|
|
61
|
+
background: "#020817",
|
|
62
|
+
foreground: "#f8fafc",
|
|
63
|
+
card: "#020817",
|
|
64
|
+
cardForeground: "#f8fafc",
|
|
65
|
+
popover: "#020817",
|
|
66
|
+
popoverForeground: "#f8fafc",
|
|
67
|
+
primary: "#0ea5e9",
|
|
68
|
+
primaryForeground: "#f8fafc",
|
|
69
|
+
secondary: "#1e293b",
|
|
70
|
+
secondaryForeground: "#f8fafc",
|
|
71
|
+
muted: "#1e293b",
|
|
72
|
+
mutedForeground: "#94a3b8",
|
|
73
|
+
accent: "#1e293b",
|
|
74
|
+
accentForeground: "#f8fafc",
|
|
75
|
+
destructive: "#ef4444",
|
|
76
|
+
destructiveForeground: "#f8fafc",
|
|
77
|
+
border: "#1e293b",
|
|
78
|
+
input: "#1e293b",
|
|
79
|
+
ring: "#0ea5e9",
|
|
80
|
+
radius: "0.5rem",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Available Theme Variables
|
|
87
|
+
|
|
88
|
+
| Variable | Description |
|
|
89
|
+
| ----------------------- | ------------------------------------- |
|
|
90
|
+
| `background` | Main background color |
|
|
91
|
+
| `foreground` | Main text color |
|
|
92
|
+
| `card` | Card background color |
|
|
93
|
+
| `cardForeground` | Card text color |
|
|
94
|
+
| `popover` | Popover background color |
|
|
95
|
+
| `popoverForeground` | Popover text color |
|
|
96
|
+
| `primary` | Primary action color |
|
|
97
|
+
| `primaryForeground` | Text color on primary backgrounds |
|
|
98
|
+
| `secondary` | Secondary action color |
|
|
99
|
+
| `secondaryForeground` | Text color on secondary backgrounds |
|
|
100
|
+
| `muted` | Muted/subtle background color |
|
|
101
|
+
| `mutedForeground` | Text color for muted elements |
|
|
102
|
+
| `accent` | Accent color for highlights |
|
|
103
|
+
| `accentForeground` | Text color on accent backgrounds |
|
|
104
|
+
| `destructive` | Color for destructive actions |
|
|
105
|
+
| `destructiveForeground` | Text color on destructive backgrounds |
|
|
106
|
+
| `border` | Border color |
|
|
107
|
+
| `input` | Input field border color |
|
|
108
|
+
| `ring` | Focus ring color |
|
|
109
|
+
| `radius` | Border radius value |
|
|
110
|
+
|
|
111
|
+
:::note
|
|
112
|
+
|
|
113
|
+
While shadcn/ui defines additional theme variables, Dev Portal currently uses only these core variables.
|
|
114
|
+
|
|
115
|
+
:::
|
|
116
|
+
|
|
117
|
+
## shadcn Registry Integration
|
|
118
|
+
|
|
119
|
+
The easiest way to customize your theme is by using a Shadcn registry theme. For example you can use
|
|
120
|
+
the great [tweakcn](https://tweakcn.com/) visual theme editor.
|
|
121
|
+
|
|
122
|
+
### Using tweakcn Themes
|
|
123
|
+
|
|
124
|
+
<Stepper>
|
|
125
|
+
|
|
126
|
+
1. Visit [tweakcn.com](https://tweakcn.com/) to select a preset or customize your theme visually
|
|
127
|
+
|
|
128
|
+
<Framed align="start"></Framed>
|
|
129
|
+
<Framed align="start"></Framed>
|
|
130
|
+
|
|
131
|
+
1. Copy the registry URL from the "Copy" section
|
|
132
|
+
|
|
133
|
+
<Framed align="start"></Framed>
|
|
134
|
+
|
|
135
|
+
1. Add it to your configuration:
|
|
136
|
+
```ts title=zudoku.config.ts
|
|
137
|
+
const config = {
|
|
138
|
+
theme: {
|
|
139
|
+
registryUrl: "https://tweakcn.com/r/themes/northern-lights.json",
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
```
|
|
143
|
+
1. The theme will then be automatically imported with all color variables, fonts, and styling
|
|
144
|
+
configured for you 🚀
|
|
145
|
+
|
|
146
|
+
<Framed align="start"></Framed>
|
|
147
|
+
|
|
148
|
+
</Stepper>
|
|
149
|
+
|
|
150
|
+
You can still override specific values if needed:
|
|
151
|
+
|
|
152
|
+
```ts title=zudoku.config.ts
|
|
153
|
+
const config = {
|
|
154
|
+
theme: {
|
|
155
|
+
registryUrl: "https://tweakcn.com/api/registry/theme/xyz123",
|
|
156
|
+
// Override specific colors
|
|
157
|
+
light: {
|
|
158
|
+
primary: "#0066cc",
|
|
159
|
+
},
|
|
160
|
+
dark: {
|
|
161
|
+
primary: "#3399ff",
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Alternatively, you can copy the CSS code and paste it into your `customCss` configuration:
|
|
168
|
+
|
|
169
|
+
```ts title=zudoku.config.ts
|
|
170
|
+
const config = {
|
|
171
|
+
theme: {
|
|
172
|
+
customCss: `
|
|
173
|
+
/* Copied CSS code */
|
|
174
|
+
`,
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Custom CSS
|
|
180
|
+
|
|
181
|
+
For advanced styling, you can add custom CSS either as a string or structured object:
|
|
182
|
+
|
|
183
|
+
:::note
|
|
184
|
+
|
|
185
|
+
Changes to `customCss` require restarting the development server to take effect.
|
|
186
|
+
|
|
187
|
+
:::
|
|
188
|
+
|
|
189
|
+
### CSS String
|
|
190
|
+
|
|
191
|
+
```ts title=zudoku.config.ts
|
|
192
|
+
const config = {
|
|
193
|
+
theme: {
|
|
194
|
+
customCss: `
|
|
195
|
+
.custom {
|
|
196
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
197
|
+
}
|
|
198
|
+
`,
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### CSS Object
|
|
204
|
+
|
|
205
|
+
```ts title=zudoku.config.ts
|
|
206
|
+
const config = {
|
|
207
|
+
theme: {
|
|
208
|
+
customCss: {
|
|
209
|
+
".custom": {
|
|
210
|
+
background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Default Theme
|
|
218
|
+
|
|
219
|
+
Dev Portal comes with a built-in default theme based on
|
|
220
|
+
[shadcn/ui zinc base colors](https://ui.shadcn.com/docs/theming#zinc). If you want to start
|
|
221
|
+
completely from scratch without any default styling, you can disable the default theme:
|
|
222
|
+
|
|
223
|
+
```ts title=zudoku.config.ts
|
|
224
|
+
const config = {
|
|
225
|
+
theme: {
|
|
226
|
+
noDefaultTheme: true,
|
|
227
|
+
// Your custom theme configuration
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
When `noDefaultTheme` is set to `true`, no default colors or styling will be applied, giving you
|
|
233
|
+
complete control over your theme. Changing this requires to restart the development server.
|
|
234
|
+
|
|
235
|
+
## Complete Example
|
|
236
|
+
|
|
237
|
+
Here's a comprehensive example combining multiple theming approaches:
|
|
238
|
+
|
|
239
|
+
```ts title=zudoku.config.ts
|
|
240
|
+
const config = {
|
|
241
|
+
theme: {
|
|
242
|
+
// Import base theme from registry
|
|
243
|
+
registryUrl: "https://tweakcn.com/api/registry/theme/modern-blue",
|
|
244
|
+
|
|
245
|
+
// Override specific colors
|
|
246
|
+
light: {
|
|
247
|
+
primary: "#0066cc",
|
|
248
|
+
accent: "#f0f9ff",
|
|
249
|
+
},
|
|
250
|
+
dark: {
|
|
251
|
+
primary: "#3399ff",
|
|
252
|
+
accent: "#0c1b2e",
|
|
253
|
+
},
|
|
254
|
+
|
|
255
|
+
// Custom fonts
|
|
256
|
+
fonts: {
|
|
257
|
+
sans: "Inter",
|
|
258
|
+
mono: "JetBrains Mono",
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
// Additional custom styling
|
|
262
|
+
customCss: {
|
|
263
|
+
".hero-section": {
|
|
264
|
+
background: "var(--primary)",
|
|
265
|
+
color: "var(--primary-foreground)",
|
|
266
|
+
padding: "2rem",
|
|
267
|
+
"border-radius": "var(--radius)",
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
This configuration imports a base theme, customizes colors for both light and dark modes, sets
|
|
275
|
+
fonts, and adds custom component styling.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_icon: baseline
|
|
3
|
+
title: Font & Typography
|
|
4
|
+
sidebar_label: Font & Typography
|
|
5
|
+
description:
|
|
6
|
+
Learn how to customize fonts and typography in Dev Portal using predefined Google Fonts, custom font
|
|
7
|
+
URLs, or local fonts for sans, serif, and monospace text.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Dev Portal allows you to customize fonts for text (`sans`), serif content (`serif`), and code (`mono`).
|
|
11
|
+
You can use predefined Google Fonts, external sources, or local fonts.
|
|
12
|
+
|
|
13
|
+
## Predefined Google Fonts
|
|
14
|
+
|
|
15
|
+
The easiest way to use fonts is with predefined Google Fonts. Simply specify the font name as a
|
|
16
|
+
string:
|
|
17
|
+
|
|
18
|
+
```ts title=zudoku.config.ts
|
|
19
|
+
const config = {
|
|
20
|
+
theme: {
|
|
21
|
+
fonts: {
|
|
22
|
+
sans: "Inter",
|
|
23
|
+
serif: "Merriweather",
|
|
24
|
+
mono: "JetBrains Mono",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Available Google Fonts
|
|
31
|
+
|
|
32
|
+
The following fonts are available as predefined options:
|
|
33
|
+
|
|
34
|
+
**Sans Serif:** Inter, Roboto, Open Sans, Poppins, Montserrat, Outfit, Plus Jakarta Sans, DM Sans,
|
|
35
|
+
IBM Plex Sans, Geist, Oxanium, Space Grotesk
|
|
36
|
+
|
|
37
|
+
**Serif:** Architects Daughter, Merriweather, Playfair Display, Lora, Source Serif Pro, Libre
|
|
38
|
+
Baskerville
|
|
39
|
+
|
|
40
|
+
**Monospace:** JetBrains Mono, Fira Code, Source Code Pro, IBM Plex Mono, Roboto Mono, Space Mono,
|
|
41
|
+
Geist Mono
|
|
42
|
+
|
|
43
|
+
## Custom Font URLs
|
|
44
|
+
|
|
45
|
+
For more control or to use fonts not in the predefined list, you can specify a custom font URL:
|
|
46
|
+
|
|
47
|
+
```ts title=zudoku.config.ts
|
|
48
|
+
const config = {
|
|
49
|
+
theme: {
|
|
50
|
+
fonts: {
|
|
51
|
+
sans: {
|
|
52
|
+
url: "https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap",
|
|
53
|
+
fontFamily: "Roboto, sans-serif",
|
|
54
|
+
},
|
|
55
|
+
mono: {
|
|
56
|
+
url: "https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;700&display=swap",
|
|
57
|
+
fontFamily: "Roboto Mono, monospace",
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Local Fonts
|
|
65
|
+
|
|
66
|
+
To use local fonts, add them to the `public` folder and create a `fonts.css` file:
|
|
67
|
+
|
|
68
|
+
```css
|
|
69
|
+
@font-face {
|
|
70
|
+
font-family: "CustomFont";
|
|
71
|
+
font-style: normal;
|
|
72
|
+
font-weight: 400;
|
|
73
|
+
src: url("/custom-font-400.woff2") format("woff2");
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Then reference the local CSS file:
|
|
78
|
+
|
|
79
|
+
```ts title=zudoku.config.ts
|
|
80
|
+
const config = {
|
|
81
|
+
theme: {
|
|
82
|
+
fonts: {
|
|
83
|
+
sans: {
|
|
84
|
+
url: "/fonts.css",
|
|
85
|
+
fontFamily: "CustomFont, sans-serif",
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Mixed Configuration
|
|
93
|
+
|
|
94
|
+
You can mix predefined fonts with custom fonts:
|
|
95
|
+
|
|
96
|
+
```ts title=zudoku.config.ts
|
|
97
|
+
const config = {
|
|
98
|
+
theme: {
|
|
99
|
+
fonts: {
|
|
100
|
+
sans: "Inter", // Predefined Google Font
|
|
101
|
+
serif: {
|
|
102
|
+
// Custom font
|
|
103
|
+
url: "/custom-serif.css",
|
|
104
|
+
fontFamily: "CustomSerif, serif",
|
|
105
|
+
},
|
|
106
|
+
mono: "Fira Code", // Predefined Google Font
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
```
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Events
|
|
3
|
+
sidebar_icon: shuffle
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Dev Portal provides an events system that allows plugins to react to various application events. This
|
|
7
|
+
system enables you to build dynamic features that respond to user interactions and application state
|
|
8
|
+
changes.
|
|
9
|
+
|
|
10
|
+
## Available Events
|
|
11
|
+
|
|
12
|
+
Currently, Dev Portal supports the following events:
|
|
13
|
+
|
|
14
|
+
### location
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
type LocationEvent = (e: { from?: Location; to: Location }) => void;
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Emitted when the user navigates to a different route. Provides both the previous (`from`) and
|
|
21
|
+
current (`to`)
|
|
22
|
+
[Location objects](https://api.reactrouter.com/v7/interfaces/react_router.Location.html) from
|
|
23
|
+
react-router.
|
|
24
|
+
|
|
25
|
+
Note that the `from` location will be undefined on the initial page load.
|
|
26
|
+
|
|
27
|
+
## Consuming Events in Plugins
|
|
28
|
+
|
|
29
|
+
To consume events in your plugin, you can implement the events property in your plugin. This is
|
|
30
|
+
useful for performing actions like sending analytics events or anything else that's not directly
|
|
31
|
+
related to the UI.
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { ZudokuPlugin, ZudokuEvents } from "zudoku";
|
|
35
|
+
|
|
36
|
+
const navigationLoggerPlugin: ZudokuPlugin = {
|
|
37
|
+
events: {
|
|
38
|
+
location: ({ from, to }) => {
|
|
39
|
+
if (!from) {
|
|
40
|
+
console.log(`Initial navigation to: ${to.pathname}`);
|
|
41
|
+
} else {
|
|
42
|
+
console.log(`User navigated from: ${from.pathname} to: ${to.pathname}`);
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Example in Dev Portal Config
|
|
50
|
+
|
|
51
|
+
In your `zudoku.config.ts`, you can define the events like this:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
export default {
|
|
55
|
+
plugins: [
|
|
56
|
+
{
|
|
57
|
+
events: {
|
|
58
|
+
location: ({ from, to }) => {
|
|
59
|
+
if (!from) return;
|
|
60
|
+
|
|
61
|
+
// E.g. send an analytics event
|
|
62
|
+
sendAnalyticsEvent({
|
|
63
|
+
from: from.pathname,
|
|
64
|
+
to: to.pathname,
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Using Events in Components
|
|
74
|
+
|
|
75
|
+
Dev Portal provides a convenient `useEvent` hook to subscribe to events in your React components. The
|
|
76
|
+
hook can be used in three different ways:
|
|
77
|
+
|
|
78
|
+
### 1. Getting the Latest Event Data
|
|
79
|
+
|
|
80
|
+
If you just want to access the latest event data without a callback:
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
import { useEvent } from "zudoku/hooks";
|
|
84
|
+
|
|
85
|
+
function MyComponent() {
|
|
86
|
+
const locationEvent = useEvent("location");
|
|
87
|
+
return <div>Current path: {locationEvent?.to.pathname}</div>;
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 2. Using Event Data in a Component
|
|
92
|
+
|
|
93
|
+
If you want to transform the event data, return a value from the callback:
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { useEvent } from "zudoku/hooks";
|
|
97
|
+
|
|
98
|
+
function MyComponent() {
|
|
99
|
+
const pathname = useEvent("location", ({ to }) => to.pathname);
|
|
100
|
+
return <div>Current path: {pathname}</div>;
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 3. Using a Callback for Side Effects
|
|
105
|
+
|
|
106
|
+
If you just want to perform side effects when the event occurs:
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { useEvent } from "zudoku/hooks";
|
|
110
|
+
|
|
111
|
+
function MyComponent() {
|
|
112
|
+
useEvent("location", ({ from, to }) => {
|
|
113
|
+
if (from) {
|
|
114
|
+
console.log(`Navigation: ${from.pathname} → ${to.pathname}`);
|
|
115
|
+
}
|
|
116
|
+
// No return value needed for side effects
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
return <div>My Component</div>;
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The `useEvent` hook automatically handles subscription and cleanup in the React lifecycle, making it
|
|
124
|
+
easy to work with events in your components.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Custom pages
|
|
3
|
+
sidebar_icon: layers-3
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
If you want to include pages in your documentation that have greater flexibility than MDX pages, it
|
|
7
|
+
is possible to include custom pages of your own.
|
|
8
|
+
|
|
9
|
+
These pages are typically built using standard React markup and can borrow from a set of prebuilt
|
|
10
|
+
components that Dev Portal already has such as buttons, links and headers.
|
|
11
|
+
|
|
12
|
+
Start by creating the page you want to add.
|
|
13
|
+
|
|
14
|
+
## Setup a custom page
|
|
15
|
+
|
|
16
|
+
Each custom page is a page component of its own and lives in a `src` directory at the root of your
|
|
17
|
+
project. Let's create the `<MyCustomPage />` component as an example.
|
|
18
|
+
|
|
19
|
+
From the root of your project run this command:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
touch src/MyCustomPage.tsx
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
You can now open `/src/MyCustomPage.tsx` in the editor of your choice. It will be empty.
|
|
26
|
+
|
|
27
|
+
Copy and paste this code to implement the page:
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import { Button, Head, Link } from "zudoku/components";
|
|
31
|
+
|
|
32
|
+
export const MyCustomPage = () => {
|
|
33
|
+
return (
|
|
34
|
+
<section className="">
|
|
35
|
+
<Head>
|
|
36
|
+
<title>My Custom Page</title>
|
|
37
|
+
</Head>
|
|
38
|
+
<div>
|
|
39
|
+
<p>Welcome to MyCustomPage</p>
|
|
40
|
+
</div>
|
|
41
|
+
</section>
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Configuration
|
|
47
|
+
|
|
48
|
+
In the [Dev Portal Configuration](../configuration/overview.md) you will need to do the following:
|
|
49
|
+
|
|
50
|
+
### Change Your Config Extension
|
|
51
|
+
|
|
52
|
+
In order to embed `jsx`/`tsx` components into your Dev Portal config, you will need to change your file
|
|
53
|
+
extension from `ts` to `tsx` (or `js` to `jsx` if not using TypeScript).
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
zudoku.config.ts -> zudoku.config.tsx
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Import Your Module
|
|
60
|
+
|
|
61
|
+
Import the `<MyCustomPage />` component that you created.
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { MyCustomPage } from "./src/MyCustomPage";
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Add a navigation entry
|
|
68
|
+
|
|
69
|
+
Add a `custom-page` item to the `navigation` configuration. Each page you want to add to the site
|
|
70
|
+
must be its own object.
|
|
71
|
+
|
|
72
|
+
The `path` key can be set to whatever you like. This will appear as part of the URL in the address
|
|
73
|
+
bar of the browser.
|
|
74
|
+
|
|
75
|
+
The `element` key references the name of the custom page component that you want to load.
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
{
|
|
79
|
+
// ...
|
|
80
|
+
navigation: [
|
|
81
|
+
{
|
|
82
|
+
type: "custom-page",
|
|
83
|
+
path: "/a-custom-page",
|
|
84
|
+
element: <MyCustomPage />,
|
|
85
|
+
},
|
|
86
|
+
]
|
|
87
|
+
// ...
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
This configuration will allow Dev Portal to load the contents of the `<MyCustomPage />` component when a
|
|
92
|
+
user clicks on a link that points to `/a-custom-page`.
|
|
93
|
+
|
|
94
|
+
## Troubleshooting
|
|
95
|
+
|
|
96
|
+
### Updating Your `tsconfig.json`
|
|
97
|
+
|
|
98
|
+
Your `include` property in `tsconfig.json` should automatically be updated to reflect the new custom
|
|
99
|
+
pages, but in case it isn't, it should look like this:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
...
|
|
104
|
+
"include": ["src", "zudoku.config.tsx", "src/MyCustomPage.tsx"]
|
|
105
|
+
}
|
|
106
|
+
```
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Environment Variables
|
|
3
|
+
sidebar_icon: table
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Dev Portal is built on top of Vite and uses [their approach](https://vite.dev/guide/env-and-mode) for
|
|
7
|
+
managing environment variables.
|
|
8
|
+
|
|
9
|
+
Dev Portal exposes environment variables under the `import.meta.env` object as strings automatically.
|
|
10
|
+
|
|
11
|
+
To prevent accidentally leaking environment variables to the client, only variables prefixed with
|
|
12
|
+
`ZUDOKU_PUBLIC_` are exposed to your Zudoku-processed code.
|
|
13
|
+
|
|
14
|
+
:::warning{title="Security Notice"}
|
|
15
|
+
|
|
16
|
+
Environment variables prefixed with `ZUDOKU_PUBLIC_` will be exposed to the client-side code and
|
|
17
|
+
visible in the browser. Never use this prefix for sensitive information like API keys, passwords, or
|
|
18
|
+
other secrets.
|
|
19
|
+
|
|
20
|
+
:::
|
|
21
|
+
|
|
22
|
+
## Local Env Files
|
|
23
|
+
|
|
24
|
+
When developing locally, you can create a `.env` file in the root of your project and add
|
|
25
|
+
environment-specific variables. See the
|
|
26
|
+
[Vite documentation](https://vite.dev/guide/env-and-mode.html#env-files) for more information on
|
|
27
|
+
supported files.
|
|
28
|
+
|
|
29
|
+
Here is an example of a `.env.local` file:
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
ZUDOKU_PUBLIC_PAGE_TITLE=My Page Title
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
You can access this variable in your application like this:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const title = import.meta.env.ZUDOKU_PUBLIC_PAGE_TITLE;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Configuration Files
|
|
42
|
+
|
|
43
|
+
Environment variables can also be used in your configuration files. When referencing environment
|
|
44
|
+
variables in your configuration files, you can use `process.env` directly.
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import type { ZudokuConfig } from "zudoku";
|
|
48
|
+
|
|
49
|
+
const config: ZudokuConfig = {
|
|
50
|
+
authentication: {
|
|
51
|
+
type: "auth0",
|
|
52
|
+
clientId: process.env.ZUDOKU_PUBLIC_AUTH_CLIENT_ID,
|
|
53
|
+
domain: process.env.ZUDOKU_PUBLIC_AUTH_DOMAIN,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## React Components
|
|
59
|
+
|
|
60
|
+
If you need to access environment variables inside a custom react component, you can access them via
|
|
61
|
+
`import.meta.env`. Public environment variables are inlined during the build process.
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
import React from "react";
|
|
65
|
+
|
|
66
|
+
export const MyComponent = () => {
|
|
67
|
+
return <h1>{import.meta.env.ZUDOKU_PUBLIC_PAGE_TITLE}</h1>;
|
|
68
|
+
};
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## IntelliSense for TypeScript
|
|
72
|
+
|
|
73
|
+
By default, Dev Portal provides type definitions for `import.meta.env` in `zudoku/client.d.ts`. While
|
|
74
|
+
you can define more custom env variables in `.env.[mode]` files, you may want to get TypeScript
|
|
75
|
+
IntelliSense for user-defined env variables that are prefixed with `ZUDOKU_PUBLIC_`.
|
|
76
|
+
|
|
77
|
+
To achieve this, you can create a `zudoku-env.d.ts` in the src directory, then augment
|
|
78
|
+
`ImportMetaEnv` like this:
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
/// <reference types="zudoku/client" />
|
|
82
|
+
|
|
83
|
+
interface ImportMetaEnv {
|
|
84
|
+
readonly ZUDOKU_PUBLIC_APP_TITLE: string;
|
|
85
|
+
// more env variables...
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
interface ImportMeta {
|
|
89
|
+
readonly env: ImportMetaEnv;
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
:::warning{title="Imports will break type augmentation"}
|
|
94
|
+
|
|
95
|
+
If the `ImportMetaEnv` augmentation does not work, make sure you do not have any import statements
|
|
96
|
+
in `vite-env.d.ts`. A helpful explanation can be found on
|
|
97
|
+
[this StackOverflow reply](https://stackoverflow.com/a/51114250).
|
|
98
|
+
|
|
99
|
+
:::
|