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,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: MemoryZoneReadThroughCache
|
|
3
|
+
sidebar_label: MemoryZoneReadThroughCache
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The `MemoryZoneReadThroughCache` class provides an in-memory caching solution
|
|
7
|
+
with automatic read-through capabilities. This cache stores data in memory for
|
|
8
|
+
fast access and automatically handles cache misses.
|
|
9
|
+
|
|
10
|
+
## Constructor
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
new MemoryZoneReadThroughCache<T = unknown>(name: string, context: ZuploContext)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Creates a new instance of the memory cache with read-through capabilities.
|
|
17
|
+
|
|
18
|
+
- `name` - A unique identifier for the cache instance
|
|
19
|
+
- `context` - The [ZuploContext](./zuplo-context.mdx) object
|
|
20
|
+
- `T` - The type of data stored in the cache (defaults to `unknown`)
|
|
21
|
+
|
|
22
|
+
## Methods
|
|
23
|
+
|
|
24
|
+
**`get`**
|
|
25
|
+
|
|
26
|
+
Retrieves a value from the cache by its key. Returns `undefined` if not found.
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
get(key: string): Promise<T | undefined>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**`put`**
|
|
33
|
+
|
|
34
|
+
Stores a value in the cache with a time-to-live (TTL) in seconds.
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
put(key: string, data: T, ttlSeconds: number): void
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**`delete`**
|
|
41
|
+
|
|
42
|
+
Removes a value from the cache.
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
delete(key: string): Promise<void>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Example
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
import {
|
|
52
|
+
MemoryZoneReadThroughCache,
|
|
53
|
+
ZuploContext,
|
|
54
|
+
ZuploRequest,
|
|
55
|
+
} from "@zuplo/runtime";
|
|
56
|
+
|
|
57
|
+
export default async function handler(
|
|
58
|
+
request: ZuploRequest,
|
|
59
|
+
context: ZuploContext,
|
|
60
|
+
) {
|
|
61
|
+
// Create a cache instance for user data
|
|
62
|
+
const userCache = new MemoryZoneReadThroughCache<{
|
|
63
|
+
name: string;
|
|
64
|
+
email: string;
|
|
65
|
+
}>("user-cache", context);
|
|
66
|
+
|
|
67
|
+
// Try to get user from cache
|
|
68
|
+
const userId = "user-123";
|
|
69
|
+
let user = await userCache.get(userId);
|
|
70
|
+
|
|
71
|
+
if (!user) {
|
|
72
|
+
// User not in cache, fetch from database
|
|
73
|
+
user = await fetchUserFromDatabase(userId);
|
|
74
|
+
|
|
75
|
+
// Cache the user data for 5 minutes (300 seconds)
|
|
76
|
+
userCache.put(userId, user, 300);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return new Response(JSON.stringify(user));
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Best Practices
|
|
84
|
+
|
|
85
|
+
- Use descriptive cache names to avoid collisions between different cache
|
|
86
|
+
instances
|
|
87
|
+
- Set appropriate TTL values based on your data freshness requirements
|
|
88
|
+
- Consider memory usage when caching large objects
|
|
89
|
+
- The cache is scoped to the current worker instance and not shared across
|
|
90
|
+
instances
|
|
91
|
+
|
|
92
|
+
## See Also
|
|
93
|
+
|
|
94
|
+
- [ZoneCache](./zone-cache.mdx) - For distributed caching across zones
|
|
95
|
+
- [StreamingZoneCache](./streaming-zone-cache.mdx) - For caching streaming data
|
|
96
|
+
- [BackgroundLoader](./background-loader.mdx) - For automatic cache population
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Node Modules
|
|
3
|
+
sidebar_label: Node Modules
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo itself doesn't run Node.js, but instead runs a custom JavaScript engine
|
|
7
|
+
that's designed to be fast and secure. However, the Zuplo engine is compatible
|
|
8
|
+
with certain node modules that don't use native code or certain Node.js specific
|
|
9
|
+
features like the file system.
|
|
10
|
+
|
|
11
|
+
## Custom Modules
|
|
12
|
+
|
|
13
|
+
If you would like to use a node module, you can bundle modules inside of your
|
|
14
|
+
own project. This process is straightforward using standard tools like
|
|
15
|
+
[ESBuild](https://esbuild.github.io/) or [TSDown](https://tsdown.dev) to bundle
|
|
16
|
+
your code along with any dependencies into a single file that's included in your
|
|
17
|
+
Zuplo project.
|
|
18
|
+
|
|
19
|
+
You can find a complete example of how to bundle your own node modules in the
|
|
20
|
+
[Bundling Custom Node Modules example](https://github.com/zuplo/zuplo/tree/main/examples/custom-module).
|
|
21
|
+
|
|
22
|
+
The process is typically as quick as running the following commands:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install your-package-name
|
|
26
|
+
npx tsdown ./node_modules/your-package-name --format esm --platform browser --out-dir ./modules/third-party/your-package-name
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The module can then be imported and used in your Zuplo project like so:
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { YourPackage } from "./modules/third-party/your-package-name.mjs";
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Be sure to test your bundled code thoroughly to ensure it works as expected in
|
|
36
|
+
the Zuplo environment.
|
|
37
|
+
|
|
38
|
+
## Bundled Node Modules
|
|
39
|
+
|
|
40
|
+
:::danger{title="Deprecated"}
|
|
41
|
+
|
|
42
|
+
Using the bundled node modules is no longer recommended. As these modules are
|
|
43
|
+
used by multiple customers, they may not be the version you need or may not work
|
|
44
|
+
as you expect. Instead, we recommend bundling your own node modules inside of
|
|
45
|
+
your project. See the section on [custom modules](#custom-modules)
|
|
46
|
+
|
|
47
|
+
:::
|
|
48
|
+
|
|
49
|
+
Below are the currently installed modules.
|
|
50
|
+
|
|
51
|
+
:::caution{title="Test Carefully"}
|
|
52
|
+
|
|
53
|
+
It's important to test your use of any node module carefully. Zuplo doesn't run
|
|
54
|
+
Node.js, it runs a custom JavaScript engine that's designed to be fast and
|
|
55
|
+
secure. This means that these modules may not work as you expect or certain
|
|
56
|
+
functionality in these modules may not work at all. Even when we say a module is
|
|
57
|
+
"Working", that doesn't guarantee it will work in your specific use case. Test
|
|
58
|
+
your code thoroughly before deploying it to production.
|
|
59
|
+
|
|
60
|
+
:::
|
|
61
|
+
|
|
62
|
+
When developing in the Zuplo portal using the bundled modules, you will see a
|
|
63
|
+
red underline on the module types. We do not provide type definitions for these
|
|
64
|
+
modules. You can ignore these editor errors as this won't impact the build
|
|
65
|
+
(assuming the modules are used correctly).
|
|
66
|
+
|
|
67
|
+
<BundlesTable />
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Custom Not Found Handler
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
By default, Zuplo will return a 404 (using
|
|
6
|
+
[problem details](./http-problems.mdx)) if no matching `path/method` combination
|
|
7
|
+
is found. You can override this behavior by adding code to the
|
|
8
|
+
`zuplo.runtime.ts` file (see [runtime extensions](./runtime-extensions.mdx)).
|
|
9
|
+
|
|
10
|
+
For example - a custom not found handler can be used to return a
|
|
11
|
+
`405 - Method Not Allowed` if a matching path is found, but no matching METHOD,
|
|
12
|
+
here is an example function that would implement this behavior:
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
import { HttpProblems, RuntimeExtensions } from "@zuplo/runtime";
|
|
16
|
+
|
|
17
|
+
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
18
|
+
//add a custom not found handler
|
|
19
|
+
runtime.notFoundHandler = async (request, context, notFoundOptions) => {
|
|
20
|
+
if (notFoundOptions.routesMatchedByPathOnly.length > 0) {
|
|
21
|
+
// It's required to have an 'Allow' header with a 405 response
|
|
22
|
+
// Generate a string of allowed methods
|
|
23
|
+
const allowedMethods = notFoundOptions.routesMatchedByPathOnly
|
|
24
|
+
.map((route) => route.methods)
|
|
25
|
+
.reduce((acc, val) => acc.concat(val), [])
|
|
26
|
+
.join(", ");
|
|
27
|
+
|
|
28
|
+
return HttpProblems.methodNotAllowed(
|
|
29
|
+
request,
|
|
30
|
+
context,
|
|
31
|
+
{},
|
|
32
|
+
{ allow: allowedMethods },
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return HttpProblems.notFound(request, context);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
:::warning
|
|
42
|
+
|
|
43
|
+
An error in your `zuplo.runtime.ts` can break your gateway for all requests. Be
|
|
44
|
+
sure to carefully review any custom code in this file and add generous error
|
|
45
|
+
handling where appropriate.
|
|
46
|
+
|
|
47
|
+
:::
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: OAuth Protected Resource Plugin
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The `OAuthProtectedResourcePlugin` allows you to configure your Zuplo gateway to
|
|
6
|
+
support OAuth protected resources through the
|
|
7
|
+
`.well-known/oauth-protected-resource` endpoint. See
|
|
8
|
+
[RFC9728](https://datatracker.ietf.org/doc/rfc9728/) for more details.
|
|
9
|
+
|
|
10
|
+
This is particularly useful when building an MCP Server on Zuplo. See the
|
|
11
|
+
[MCP Server Handler docs](../handlers/mcp-server.mdx#oauth-authentication) for
|
|
12
|
+
more details.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
This runtime plugin will register the `.well-known/oauth-protected-resource`
|
|
17
|
+
route on your behalf. If you configure an
|
|
18
|
+
[OAuth Policy](../articles/oauth-authentication.mdx) on a route with the
|
|
19
|
+
`oAuthResourceMetadataEnabled` option set to `true`, then the OAuth policy will
|
|
20
|
+
automatically add the necessary `WWW-Authenticate` header to 401 responses, with
|
|
21
|
+
the `resource_metadata` parameter set to the URL of the
|
|
22
|
+
`.well-known/oauth-protected-resource` endpoint.
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import {
|
|
26
|
+
RuntimeExtensions,
|
|
27
|
+
OAuthProtectedResourcePlugin,
|
|
28
|
+
} from "@zuplo/runtime";
|
|
29
|
+
|
|
30
|
+
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
31
|
+
runtime.addPlugin(
|
|
32
|
+
new OAuthProtectedResourcePlugin({
|
|
33
|
+
authorizationServers: ["https://your-auth0-domain.us.auth0.com"],
|
|
34
|
+
resourceName: "My MCP OAuth Resource",
|
|
35
|
+
}),
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
As per the MCP OAuth specification, you _must_ use the canonical URL of your
|
|
41
|
+
authorization server as the `authorizationServers` value. The `resourceName` is
|
|
42
|
+
a human readable name for the resource.
|
|
43
|
+
|
|
44
|
+
Note that the `.well-known/oauth-protected-resource` endpoint explicitly has a
|
|
45
|
+
CORS policy of `anything-goes` since this is a public endpoint that should be
|
|
46
|
+
accessible to anyone to check the server's OAuth configuration.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Programmable API
|
|
3
|
+
sidebar_label: Overview
|
|
4
|
+
description:
|
|
5
|
+
"This section provides a comprehensive index of all public APIs available in
|
|
6
|
+
the Zuplo runtime. The APIs are organized by category for easy reference."
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
This section provides a comprehensive index of all public APIs available in the
|
|
10
|
+
Zuplo runtime. The APIs are organized by category for easy reference.
|
|
11
|
+
|
|
12
|
+
## Core Request/Response APIs
|
|
13
|
+
|
|
14
|
+
### ZuploRequest
|
|
15
|
+
|
|
16
|
+
- **Status**: Documented ([ZuploRequest](./zuplo-request.mdx))
|
|
17
|
+
- **Description**: Extended Request class with additional properties for
|
|
18
|
+
parameters, query, and user data
|
|
19
|
+
- **Key Features**: Type-safe parameters and query access, user authentication
|
|
20
|
+
data
|
|
21
|
+
|
|
22
|
+
### ZuploContext
|
|
23
|
+
|
|
24
|
+
- **Status**: Documented ([ZuploContext](./zuplo-context.mdx))
|
|
25
|
+
- **Description**: Context object available in all handlers and policies
|
|
26
|
+
- **Key Features**: Request ID, logging, route information, event hooks
|
|
27
|
+
|
|
28
|
+
### HttpProblems
|
|
29
|
+
|
|
30
|
+
- **Status**: Documented ([HttpProblems](./http-problems.mdx))
|
|
31
|
+
- **Description**: Utility class for generating RFC 7807 compliant problem
|
|
32
|
+
responses
|
|
33
|
+
- **Methods**: Static methods for all HTTP status codes (for example,
|
|
34
|
+
`badRequest`, `unauthorized`, `notFound`)
|
|
35
|
+
|
|
36
|
+
### HttpStatusCode
|
|
37
|
+
|
|
38
|
+
- **Status**: Documented ([HttpProblems](./http-problems.mdx))
|
|
39
|
+
- **Description**: All standard HTTP status codes
|
|
40
|
+
|
|
41
|
+
### ProblemResponseFormatter
|
|
42
|
+
|
|
43
|
+
- **Status**: Documented
|
|
44
|
+
([ProblemResponseFormatter](./problem-response-formatter.mdx))
|
|
45
|
+
- **Description**: Utility class for formatting RFC 7807 compliant problem
|
|
46
|
+
responses
|
|
47
|
+
- **Methods**: `format` - Formats problem details into standard responses
|
|
48
|
+
|
|
49
|
+
## Handlers
|
|
50
|
+
|
|
51
|
+
See the [Handlers documentation](../handlers/url-forward.mdx) for information
|
|
52
|
+
about built-in request handlers.
|
|
53
|
+
|
|
54
|
+
### Available Handlers
|
|
55
|
+
|
|
56
|
+
- `awsLambdaHandler` - [AWS Lambda Handler](/docs/handlers/aws-lambda)
|
|
57
|
+
- `mcpServerHandler` - [MCP Server Handler](/docs/handlers/mcp-server)
|
|
58
|
+
- `openApiSpecHandler` - [OpenAPI Spec Handler](/docs/handlers/openapi)
|
|
59
|
+
- `redirectHandler` - [Redirect Handler](/docs/handlers/redirect)
|
|
60
|
+
- `urlForwardHandler` - [URL Forward Handler](/docs/handlers/url-forward)
|
|
61
|
+
- `urlRewriteHandler` - [URL Rewrite Handler](/docs/handlers/url-rewrite)
|
|
62
|
+
- `webSocketHandler` - [WebSocket Handler](/docs/handlers/websocket-handler)
|
|
63
|
+
- Custom handlers - [Function Handler](/docs/handlers/custom-handler)
|
|
64
|
+
|
|
65
|
+
## Caching APIs
|
|
66
|
+
|
|
67
|
+
### ZoneCache
|
|
68
|
+
|
|
69
|
+
- **Status**: Documented ([Zone Cache](./zone-cache.mdx))
|
|
70
|
+
- **Description**: Key-value cache with zone-level storage
|
|
71
|
+
- **Key Methods**: `get`, `put`, `delete`
|
|
72
|
+
|
|
73
|
+
### MemoryZoneReadThroughCache
|
|
74
|
+
|
|
75
|
+
- **Status**: Documented
|
|
76
|
+
([Memory Zone Read Through Cache](./memory-zone-read-through-cache.mdx))
|
|
77
|
+
- **Description**: In-memory cache with automatic loading
|
|
78
|
+
- **Key Methods**: `get`, `put`
|
|
79
|
+
|
|
80
|
+
### StreamingZoneCache
|
|
81
|
+
|
|
82
|
+
- **Status**: Documented ([Streaming Zone Cache](./streaming-zone-cache.mdx))
|
|
83
|
+
- **Description**: Cache for streaming responses
|
|
84
|
+
- **Key Methods**: `get`, `put`, `delete`
|
|
85
|
+
|
|
86
|
+
## Data Management
|
|
87
|
+
|
|
88
|
+
### ContextData
|
|
89
|
+
|
|
90
|
+
- **Status**: Documented ([Context Data](./context-data.mdx))
|
|
91
|
+
- **Description**: Type-safe context data storage
|
|
92
|
+
- **Key Methods**: `get`, `set`
|
|
93
|
+
|
|
94
|
+
### BackgroundLoader
|
|
95
|
+
|
|
96
|
+
- **Status**: Documented ([Background Loader](./background-loader.mdx))
|
|
97
|
+
- **Description**: Background data loading with caching
|
|
98
|
+
- **Key Methods**: `get`
|
|
99
|
+
|
|
100
|
+
### BackgroundDispatcher
|
|
101
|
+
|
|
102
|
+
- **Status**: Documented ([Background Dispatcher](./background-dispatcher.mdx))
|
|
103
|
+
- **Description**: Batch processing for background tasks
|
|
104
|
+
- **Key Methods**: `enqueue`
|
|
105
|
+
|
|
106
|
+
## Runtime Extensions
|
|
107
|
+
|
|
108
|
+
### RuntimeExtensions
|
|
109
|
+
|
|
110
|
+
- **Status**: Documented ([Runtime Extensions](./runtime-extensions.mdx))
|
|
111
|
+
- **Description**: API for extending runtime behavior
|
|
112
|
+
- **Key Features**: Plugin support, request/response hooks, custom error
|
|
113
|
+
handling
|
|
114
|
+
|
|
115
|
+
### RuntimeError
|
|
116
|
+
|
|
117
|
+
- **Status**: Documented ([Runtime Errors](./runtime-errors.mdx))
|
|
118
|
+
- **Description**: Base error class for runtime errors
|
|
119
|
+
|
|
120
|
+
### ConfigurationError
|
|
121
|
+
|
|
122
|
+
- **Status**: Documented ([Runtime Errors](./runtime-errors.mdx))
|
|
123
|
+
- **Description**: Error class for configuration issues
|
|
124
|
+
|
|
125
|
+
## Plugins
|
|
126
|
+
|
|
127
|
+
### AuditLogPlugin
|
|
128
|
+
|
|
129
|
+
- **Status**: Documented ([Audit Log](./audit-log.mdx))
|
|
130
|
+
- **Description**: Comprehensive request/response logging
|
|
131
|
+
- **Key Features**: Configurable request/response capture, custom output
|
|
132
|
+
providers
|
|
133
|
+
|
|
134
|
+
### Logging Plugins
|
|
135
|
+
|
|
136
|
+
See [Logging documentation](/docs/articles/logging.mdx) for details on logging
|
|
137
|
+
plugins:
|
|
138
|
+
|
|
139
|
+
- `AWSLoggingPlugin` - AWS CloudWatch logging
|
|
140
|
+
- `DataDogLoggingPlugin` - Datadog logging
|
|
141
|
+
- `DynaTraceLoggingPlugin` - Dynatrace logging
|
|
142
|
+
- `GoogleCloudLoggingPlugin` - Google Cloud logging
|
|
143
|
+
- `LokiLoggingPlugin` - Grafana Loki logging
|
|
144
|
+
- `NewRelicLoggingPlugin` - New Relic logging
|
|
145
|
+
- `SplunkLoggingPlugin` - Splunk logging
|
|
146
|
+
- `SumoLogicLoggingPlugin` - Sumo Logic logging
|
|
147
|
+
- `VMWareLogInsightLoggingPlugin` - VMware Log Insight logging
|
|
148
|
+
|
|
149
|
+
### Metrics Plugins
|
|
150
|
+
|
|
151
|
+
See [Metrics documentation](/docs/articles/metrics-plugins.mdx) for details on
|
|
152
|
+
metrics plugins:
|
|
153
|
+
|
|
154
|
+
- `DataDogMetricsPlugin` - Datadog metrics
|
|
155
|
+
- `DynatraceMetricsPlugin` - Dynatrace metrics
|
|
156
|
+
- `NewRelicMetricsPlugin` - New Relic metrics
|
|
157
|
+
|
|
158
|
+
### Storage Plugins
|
|
159
|
+
|
|
160
|
+
- `AzureBlobPlugin` - Azure Blob Storage integration
|
|
161
|
+
- `AzureEventHubsRequestLoggerPlugin` - Azure Event Hubs logging
|
|
162
|
+
- `HydrolixRequestLoggerPlugin` - Hydrolix data platform integration
|
|
163
|
+
|
|
164
|
+
### Special Plugins
|
|
165
|
+
|
|
166
|
+
- `AkamaiApiSecurityPlugin` - Akamai API security integration
|
|
167
|
+
- `StripeMonetizationPlugin` - Stripe billing integration
|
|
168
|
+
|
|
169
|
+
## Utility APIs
|
|
170
|
+
|
|
171
|
+
### environment
|
|
172
|
+
|
|
173
|
+
- **Status**: Documented ([Environment Variables](./environment.mdx))
|
|
174
|
+
- **Description**: Access to environment variables
|
|
175
|
+
|
|
176
|
+
### ZuploServices
|
|
177
|
+
|
|
178
|
+
- **Status**: Documented ([Zuplo ID Token](./zuplo-id-token.mdx))
|
|
179
|
+
- **Description**: Zuplo platform services
|
|
180
|
+
|
|
181
|
+
## Types and Interfaces
|
|
182
|
+
|
|
183
|
+
### RequestUser
|
|
184
|
+
|
|
185
|
+
- **Status**: Documented ([Request User](./request-user.mdx))
|
|
186
|
+
- **Description**: User data structure for authenticated requests
|
|
187
|
+
|
|
188
|
+
### Logger
|
|
189
|
+
|
|
190
|
+
- **Status**: Documented ([Logger](./logger.mdx))
|
|
191
|
+
- **Description**: Structured logging interface
|
|
192
|
+
|
|
193
|
+
### ContextData
|
|
194
|
+
|
|
195
|
+
- **Status**: Documented ([Context Data](./context-data.mdx))
|
|
196
|
+
- **Description**: Type-safe context data storage
|
|
197
|
+
|
|
198
|
+
### CorsPolicyConfiguration
|
|
199
|
+
|
|
200
|
+
- **Status**: Documented ([Custom CORS Policy](./custom-cors-policy.mdx))
|
|
201
|
+
- **Description**: CORS policy configuration
|
|
202
|
+
|
|
203
|
+
## Hooks and Events
|
|
204
|
+
|
|
205
|
+
### ZuploContextHooks
|
|
206
|
+
|
|
207
|
+
- **Status**: Documented ([Hooks](./hooks.mdx))
|
|
208
|
+
- **Description**: Request/response lifecycle hooks
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
This index provides an overview of the runtime APIs available in Zuplo. For
|
|
213
|
+
detailed information about each API, follow the documentation links provided.
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ProblemResponseFormatter
|
|
3
|
+
sidebar_label: ProblemResponseFormatter
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The `ProblemResponseFormatter` class provides a way to customize the format of
|
|
7
|
+
problem responses in your API. This allows you to maintain consistent error
|
|
8
|
+
response formats across your API while adhering to the
|
|
9
|
+
[RFC 7807 Problem Details](https://httpproblems.com/) specification.
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The `ProblemResponseFormatter` class works in conjunction with the
|
|
14
|
+
`HttpProblems` helper to format error responses. It can be used to customize how
|
|
15
|
+
problem details are serialized and presented to API consumers.
|
|
16
|
+
|
|
17
|
+
## Static Methods
|
|
18
|
+
|
|
19
|
+
### format
|
|
20
|
+
|
|
21
|
+
Formats a problem response with the provided details.
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
static format(
|
|
25
|
+
problemDetails: ProblemResponseDetails,
|
|
26
|
+
request: ZuploRequest,
|
|
27
|
+
context: ZuploContext
|
|
28
|
+
): Promise<Response>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
#### Parameters
|
|
32
|
+
|
|
33
|
+
- **problemDetails**: `ProblemResponseDetails` - The problem details to format
|
|
34
|
+
- **request**: `ZuploRequest` - The current request object
|
|
35
|
+
- **context**: `ZuploContext` - The current context object
|
|
36
|
+
|
|
37
|
+
#### Returns
|
|
38
|
+
|
|
39
|
+
A `Promise<Response>` containing the formatted problem response.
|
|
40
|
+
|
|
41
|
+
## Usage
|
|
42
|
+
|
|
43
|
+
### Basic Usage
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import {
|
|
47
|
+
ProblemResponseFormatter,
|
|
48
|
+
ZuploRequest,
|
|
49
|
+
ZuploContext,
|
|
50
|
+
} from "@zuplo/runtime";
|
|
51
|
+
|
|
52
|
+
export default async function handler(
|
|
53
|
+
request: ZuploRequest,
|
|
54
|
+
context: ZuploContext,
|
|
55
|
+
) {
|
|
56
|
+
try {
|
|
57
|
+
// Your handler logic
|
|
58
|
+
} catch (error) {
|
|
59
|
+
const problemDetails = {
|
|
60
|
+
type: "https://example.com/errors/validation-failed",
|
|
61
|
+
title: "Validation Failed",
|
|
62
|
+
status: 400,
|
|
63
|
+
detail: "The request body contains invalid fields",
|
|
64
|
+
instance: request.url,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
return ProblemResponseFormatter.format(problemDetails, request, context);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Custom Error Handler
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import {
|
|
76
|
+
ProblemResponseFormatter,
|
|
77
|
+
RuntimeExtensions,
|
|
78
|
+
ProblemResponseDetails,
|
|
79
|
+
} from "@zuplo/runtime";
|
|
80
|
+
|
|
81
|
+
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
82
|
+
runtime.addErrorHandler(async (error, request, context) => {
|
|
83
|
+
// Map errors to problem details
|
|
84
|
+
const problemDetails: ProblemResponseDetails = {
|
|
85
|
+
type: "https://api.example.com/errors/internal",
|
|
86
|
+
title: "Internal Server Error",
|
|
87
|
+
status: 500,
|
|
88
|
+
detail: error.message,
|
|
89
|
+
instance: request.url,
|
|
90
|
+
// Add custom extensions
|
|
91
|
+
extensions: {
|
|
92
|
+
errorId: crypto.randomUUID(),
|
|
93
|
+
timestamp: new Date().toISOString(),
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
return ProblemResponseFormatter.format(problemDetails, request, context);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Problem Response Details Interface
|
|
103
|
+
|
|
104
|
+
The `ProblemResponseDetails` interface defines the structure of problem details:
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
interface ProblemResponseDetails {
|
|
108
|
+
type?: string; // URI reference for the problem type
|
|
109
|
+
title: string; // Short, human-readable summary
|
|
110
|
+
status: number; // HTTP status code
|
|
111
|
+
detail?: string; // Human-readable explanation
|
|
112
|
+
instance?: string; // URI reference for the specific occurrence
|
|
113
|
+
extensions?: Record<string, any>; // Additional problem-specific details
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Integration with HttpProblems
|
|
118
|
+
|
|
119
|
+
The `ProblemResponseFormatter` is used internally by the `HttpProblems` helper
|
|
120
|
+
class. When you use `HttpProblems` methods, they utilize
|
|
121
|
+
`ProblemResponseFormatter` to ensure consistent formatting:
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// This internally uses ProblemResponseFormatter
|
|
125
|
+
return HttpProblems.badRequest(request, context, {
|
|
126
|
+
detail: "Invalid request parameters",
|
|
127
|
+
});
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Custom Formatting Example
|
|
131
|
+
|
|
132
|
+
You can extend problem responses with custom fields:
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
import { ProblemResponseFormatter } from "@zuplo/runtime";
|
|
136
|
+
|
|
137
|
+
export async function customErrorHandler(
|
|
138
|
+
error: Error,
|
|
139
|
+
request: ZuploRequest,
|
|
140
|
+
context: ZuploContext,
|
|
141
|
+
) {
|
|
142
|
+
const problemDetails = {
|
|
143
|
+
type: "https://api.example.com/errors/business-rule",
|
|
144
|
+
title: "Business Rule Violation",
|
|
145
|
+
status: 422,
|
|
146
|
+
detail: error.message,
|
|
147
|
+
instance: request.url,
|
|
148
|
+
// Custom extensions
|
|
149
|
+
extensions: {
|
|
150
|
+
code: "BRV_001",
|
|
151
|
+
timestamp: new Date().toISOString(),
|
|
152
|
+
requestId: context.requestId,
|
|
153
|
+
supportUrl: "https://support.example.com",
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
return ProblemResponseFormatter.format(problemDetails, request, context);
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Response Format
|
|
162
|
+
|
|
163
|
+
The formatter produces responses in the standard Problem Details format:
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"type": "https://api.example.com/errors/validation-failed",
|
|
168
|
+
"title": "Validation Failed",
|
|
169
|
+
"status": 400,
|
|
170
|
+
"detail": "The 'email' field is invalid",
|
|
171
|
+
"instance": "/api/users",
|
|
172
|
+
"code": "VAL_001",
|
|
173
|
+
"timestamp": "2024-01-15T10:30:00Z",
|
|
174
|
+
"requestId": "req_123abc"
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## See Also
|
|
179
|
+
|
|
180
|
+
- [HttpProblems](./http-problems.mdx)
|
|
181
|
+
- [Runtime Extensions](./runtime-extensions.mdx)
|
|
182
|
+
- [Runtime Errors](./runtime-errors.mdx) - Error handling with RuntimeError and
|
|
183
|
+
ConfigurationError
|