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,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: VMware Log Insight Log Plugin
|
|
3
|
+
sidebar_label: VMware Log Insight
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The VMware Log Insight plugin enables pushing logs to your VMware Log Insights
|
|
7
|
+
via the REST API.
|
|
8
|
+
|
|
9
|
+
<EnterpriseFeature name="Custom logging" />
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
To add the VMware Log Insight logging plugin to your Zuplo project, add the
|
|
14
|
+
following code to your `zuplo.runtime.ts` file.
|
|
15
|
+
|
|
16
|
+
```ts title="modules/zuplo.runtime.ts"
|
|
17
|
+
import {
|
|
18
|
+
RuntimeExtensions,
|
|
19
|
+
VMwareLogInsightLoggingPlugin,
|
|
20
|
+
environment,
|
|
21
|
+
} from "@zuplo/runtime";
|
|
22
|
+
|
|
23
|
+
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
24
|
+
runtime.addPlugin(
|
|
25
|
+
new VMwareLogInsightLoggingPlugin({
|
|
26
|
+
// This is the URL of your VMware Log Insight host
|
|
27
|
+
url: "https://loginsight.example.com",
|
|
28
|
+
fields: {
|
|
29
|
+
appname: "zuplo",
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Configuration Options
|
|
37
|
+
|
|
38
|
+
The `VMwareLogInsightLoggingPlugin` constructor accepts an options object with
|
|
39
|
+
the following properties:
|
|
40
|
+
|
|
41
|
+
- `url` - (required) The URL of your VMware Log Insight host (for example,
|
|
42
|
+
`https://loginsight.example.com`)
|
|
43
|
+
- `agentId` - (optional) The unique agent identifier of the logger
|
|
44
|
+
- `fields` - (optional) Custom fields to include in each log entry. Can contain
|
|
45
|
+
string, number, or boolean values
|
|
46
|
+
- `textReplacements` - (optional) An array of string tuples to replace within
|
|
47
|
+
the text field of a log entry
|
|
48
|
+
- `onMessageSending` - (optional) A callback function to modify log entries
|
|
49
|
+
before sending
|
|
50
|
+
|
|
51
|
+
### Custom Fields
|
|
52
|
+
|
|
53
|
+
Any custom fields you want to include in the log entry can be added to the
|
|
54
|
+
`fields` property. These values will be appended to every log entry.
|
|
55
|
+
|
|
56
|
+
### Text Replacements
|
|
57
|
+
|
|
58
|
+
The `textReplacements` option allows you to specify character replacements in
|
|
59
|
+
the log text. For example: `[["'", ""], ['"', ""], ["\\n", ""], [":", "="]]`
|
|
60
|
+
|
|
61
|
+
## Default Fields
|
|
62
|
+
|
|
63
|
+
Every log entry will have a `timestamp` and a `text` field. The text field
|
|
64
|
+
contains the log message, which may be JSON encoded for complex data.
|
|
65
|
+
|
|
66
|
+
Default fields are (in snake_case format):
|
|
67
|
+
|
|
68
|
+
- `severity` - The log level (for example, `ERROR`, `INFO`, `DEBUG`, `WARN`)
|
|
69
|
+
- `request_id` - The UUID of the request (the value of the `zp-rid` header)
|
|
70
|
+
- `environment_type` - Where the Zuplo API is running. Values are `edge`,
|
|
71
|
+
`working-copy`, or `local`
|
|
72
|
+
- `environment_stage` - The deployment stage: `working-copy`, `preview`, or
|
|
73
|
+
`production`
|
|
74
|
+
- `log_source` - The source of the log. Either `user` or `system`
|
|
75
|
+
- `atomic_counter` - An atomic counter used to order logs with identical
|
|
76
|
+
timestamps
|
|
77
|
+
- `environment` - The environment name of the Zuplo API
|
|
78
|
+
- `request_ray_id` - The network provider identifier (for example, Cloudflare
|
|
79
|
+
Ray ID) of the request
|
|
80
|
+
|
|
81
|
+
:::note
|
|
82
|
+
|
|
83
|
+
VMware Log Insight uses snake_case naming convention for field names.
|
|
84
|
+
|
|
85
|
+
:::
|
|
86
|
+
|
|
87
|
+
## Log Format
|
|
88
|
+
|
|
89
|
+
The shape of the logs sent from Zuplo will be in the following format:
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"timestamp": 1696596905883,
|
|
94
|
+
"text": "hello world",
|
|
95
|
+
"fields": [
|
|
96
|
+
{ "name": "severity", "content": "INFO" },
|
|
97
|
+
{
|
|
98
|
+
"name": "request_id",
|
|
99
|
+
"content": "709d2491-0703-4ea9-86ea-d2af548cd4d9"
|
|
100
|
+
},
|
|
101
|
+
{ "name": "environment_type", "content": "working-copy" },
|
|
102
|
+
{ "name": "log_source", "content": "request" },
|
|
103
|
+
{ "name": "atomic_counter", "content": 1 }
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Example Logs
|
|
109
|
+
|
|
110
|
+
When objects are logged, they will be converted to a key value string format as
|
|
111
|
+
shown below.
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"timestamp": 1696603735057,
|
|
116
|
+
"text": "hello=\"hello world\" foo=1 baz=true",
|
|
117
|
+
"fields": [
|
|
118
|
+
{ "name": "severity", "content": "INFO" },
|
|
119
|
+
{
|
|
120
|
+
"name": "request_id",
|
|
121
|
+
"content": "709d2491-0703-4ea9-86ea-d2af548cd4d9"
|
|
122
|
+
},
|
|
123
|
+
{ "name": "environment_type", "content": "working-copy" },
|
|
124
|
+
{ "name": "log_source", "content": "request" },
|
|
125
|
+
{ "name": "atomic_counter", "content": 1 }
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Errors will be included as fields in the log. The fields are `error_name`,
|
|
131
|
+
`error_message`, and `error_stack`.
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"timestamp": 1696603735055,
|
|
136
|
+
"text": "Something bad happened",
|
|
137
|
+
"fields": [
|
|
138
|
+
{ "name": "severity", "content": "INFO" },
|
|
139
|
+
{
|
|
140
|
+
"name": "request_id",
|
|
141
|
+
"content": "709d2491-0703-4ea9-86ea-d2af548cd4d9"
|
|
142
|
+
},
|
|
143
|
+
{ "name": "environment_type", "content": "working-copy" },
|
|
144
|
+
{ "name": "log_source", "content": "request" },
|
|
145
|
+
{ "name": "atomic_counter", "content": 1 },
|
|
146
|
+
{ "name": "error_name", "content": "Error" },
|
|
147
|
+
{ "name": "error_message", "content": "This is an error" },
|
|
148
|
+
{
|
|
149
|
+
"name": "error_stack",
|
|
150
|
+
"content": "Error: This is an error\n at exampleFunction (module/foo.ts:32:21)"
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
```
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Log Custom Request and Response Data
|
|
3
|
+
sidebar_label: Log Request/Response Data
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Logging request and response data is useful for debugging API issues, monitoring
|
|
7
|
+
traffic patterns, and auditing API usage. This guide shows how to create custom
|
|
8
|
+
policies that log various parts of requests and responses while redacting
|
|
9
|
+
sensitive information.
|
|
10
|
+
|
|
11
|
+
## Logging Request Headers
|
|
12
|
+
|
|
13
|
+
Create an inbound policy to log headers from incoming requests. This policy
|
|
14
|
+
redacts sensitive headers like `Authorization` and `Cookie` to prevent exposing
|
|
15
|
+
credentials in logs.
|
|
16
|
+
|
|
17
|
+
```ts title="modules/log-request-headers.ts"
|
|
18
|
+
import type { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
19
|
+
|
|
20
|
+
export default async function policy(
|
|
21
|
+
request: ZuploRequest,
|
|
22
|
+
context: ZuploContext,
|
|
23
|
+
) {
|
|
24
|
+
const headers: Record<string, string> = {};
|
|
25
|
+
for (const [key, value] of request.headers.entries()) {
|
|
26
|
+
const k = key.toLowerCase();
|
|
27
|
+
headers[key] =
|
|
28
|
+
k === "authorization" ||
|
|
29
|
+
k === "cookie" ||
|
|
30
|
+
k === "set-cookie" ||
|
|
31
|
+
k === "x-api-key"
|
|
32
|
+
? "[REDACTED]"
|
|
33
|
+
: value;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
context.log.info({ headers }, "Incoming request headers");
|
|
37
|
+
|
|
38
|
+
return request;
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Logging Query Parameters
|
|
43
|
+
|
|
44
|
+
Log query parameters from the request URL:
|
|
45
|
+
|
|
46
|
+
```ts title="modules/log-query-params.ts"
|
|
47
|
+
import type { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
48
|
+
|
|
49
|
+
export default async function policy(
|
|
50
|
+
request: ZuploRequest,
|
|
51
|
+
context: ZuploContext,
|
|
52
|
+
) {
|
|
53
|
+
const url = new URL(request.url);
|
|
54
|
+
const queryParams = Object.fromEntries(url.searchParams);
|
|
55
|
+
|
|
56
|
+
context.log.info(
|
|
57
|
+
{
|
|
58
|
+
path: url.pathname,
|
|
59
|
+
query: queryParams,
|
|
60
|
+
},
|
|
61
|
+
"Request query parameters",
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
return request;
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Logging Request Body
|
|
69
|
+
|
|
70
|
+
Log the request body for POST, PUT, or PATCH requests. Clone the request first
|
|
71
|
+
to avoid consuming the body stream.
|
|
72
|
+
|
|
73
|
+
```ts title="modules/log-request-body.ts"
|
|
74
|
+
import type { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
75
|
+
|
|
76
|
+
export default async function policy(
|
|
77
|
+
request: ZuploRequest,
|
|
78
|
+
context: ZuploContext,
|
|
79
|
+
) {
|
|
80
|
+
if (["POST", "PUT", "PATCH"].includes(request.method)) {
|
|
81
|
+
const clone = request.clone();
|
|
82
|
+
const body = await clone.text();
|
|
83
|
+
|
|
84
|
+
// Parse JSON if applicable
|
|
85
|
+
let parsedBody: unknown;
|
|
86
|
+
try {
|
|
87
|
+
parsedBody = JSON.parse(body);
|
|
88
|
+
} catch {
|
|
89
|
+
parsedBody = body;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
context.log.info({ body: parsedBody }, "Request body");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return request;
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
:::warning
|
|
100
|
+
|
|
101
|
+
Logging request bodies can expose sensitive data like passwords, tokens, or
|
|
102
|
+
personal information. Always sanitize or redact sensitive fields before logging.
|
|
103
|
+
|
|
104
|
+
:::
|
|
105
|
+
|
|
106
|
+
## Logging Response Headers and Status
|
|
107
|
+
|
|
108
|
+
Create an outbound policy to log response information:
|
|
109
|
+
|
|
110
|
+
```ts title="modules/log-response-headers.ts"
|
|
111
|
+
import type { ZuploContext, ZuploRequest, ZuploResponse } from "@zuplo/runtime";
|
|
112
|
+
|
|
113
|
+
export default async function outboundPolicy(
|
|
114
|
+
response: ZuploResponse,
|
|
115
|
+
request: ZuploRequest,
|
|
116
|
+
context: ZuploContext,
|
|
117
|
+
) {
|
|
118
|
+
const headers: Record<string, string> = {};
|
|
119
|
+
for (const [key, value] of response.headers.entries()) {
|
|
120
|
+
const k = key.toLowerCase();
|
|
121
|
+
headers[key] = k === "set-cookie" ? "[REDACTED]" : value;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
context.log.info(
|
|
125
|
+
{ status: response.status, headers },
|
|
126
|
+
"Outgoing response headers",
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
return response;
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Logging Response Body
|
|
134
|
+
|
|
135
|
+
Log the response body from your backend. Clone the response first to avoid
|
|
136
|
+
consuming the body stream.
|
|
137
|
+
|
|
138
|
+
```ts title="modules/log-response-body.ts"
|
|
139
|
+
import type { ZuploContext, ZuploRequest, ZuploResponse } from "@zuplo/runtime";
|
|
140
|
+
|
|
141
|
+
export default async function outboundPolicy(
|
|
142
|
+
response: ZuploResponse,
|
|
143
|
+
request: ZuploRequest,
|
|
144
|
+
context: ZuploContext,
|
|
145
|
+
) {
|
|
146
|
+
const clone = response.clone();
|
|
147
|
+
const body = await clone.text();
|
|
148
|
+
|
|
149
|
+
let parsedBody: unknown;
|
|
150
|
+
try {
|
|
151
|
+
parsedBody = JSON.parse(body);
|
|
152
|
+
} catch {
|
|
153
|
+
parsedBody = body;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
context.log.info(
|
|
157
|
+
{
|
|
158
|
+
status: response.status,
|
|
159
|
+
body: parsedBody,
|
|
160
|
+
},
|
|
161
|
+
"Response body",
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
return response;
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Comprehensive Request Logging
|
|
169
|
+
|
|
170
|
+
Combine multiple data points into a single log entry:
|
|
171
|
+
|
|
172
|
+
```ts title="modules/log-request-details.ts"
|
|
173
|
+
import type { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
174
|
+
|
|
175
|
+
export default async function policy(
|
|
176
|
+
request: ZuploRequest,
|
|
177
|
+
context: ZuploContext,
|
|
178
|
+
) {
|
|
179
|
+
const url = new URL(request.url);
|
|
180
|
+
|
|
181
|
+
context.log.info(
|
|
182
|
+
{
|
|
183
|
+
method: request.method,
|
|
184
|
+
path: url.pathname,
|
|
185
|
+
query: Object.fromEntries(url.searchParams),
|
|
186
|
+
headers: sanitizeHeaders(request.headers),
|
|
187
|
+
userId: request.user?.sub,
|
|
188
|
+
params: request.params,
|
|
189
|
+
},
|
|
190
|
+
"Incoming request",
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
return request;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function sanitizeHeaders(headers: Headers): Record<string, string> {
|
|
197
|
+
const sensitiveHeaders = [
|
|
198
|
+
"authorization",
|
|
199
|
+
"cookie",
|
|
200
|
+
"set-cookie",
|
|
201
|
+
"x-api-key",
|
|
202
|
+
];
|
|
203
|
+
const result: Record<string, string> = {};
|
|
204
|
+
|
|
205
|
+
for (const [key, value] of headers.entries()) {
|
|
206
|
+
result[key] = sensitiveHeaders.includes(key.toLowerCase())
|
|
207
|
+
? "[REDACTED]"
|
|
208
|
+
: value;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Policy Configuration
|
|
216
|
+
|
|
217
|
+
Configure the policy in your `policies.json`:
|
|
218
|
+
|
|
219
|
+
```json title="config/policies.json"
|
|
220
|
+
{
|
|
221
|
+
"name": "log-request-data",
|
|
222
|
+
"policyType": "custom-code-inbound",
|
|
223
|
+
"handler": {
|
|
224
|
+
"export": "default",
|
|
225
|
+
"module": "$import(./modules/log-request-details)"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
For outbound policies:
|
|
231
|
+
|
|
232
|
+
```json title="config/policies.json"
|
|
233
|
+
{
|
|
234
|
+
"name": "log-response-data",
|
|
235
|
+
"policyType": "custom-code-outbound",
|
|
236
|
+
"handler": {
|
|
237
|
+
"export": "default",
|
|
238
|
+
"module": "$import(./modules/log-response-headers)"
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Wiring Up the Policies
|
|
244
|
+
|
|
245
|
+
Add the policies to your routes in `routes.oas.json`:
|
|
246
|
+
|
|
247
|
+
```json title="config/routes.oas.json"
|
|
248
|
+
{
|
|
249
|
+
"paths": {
|
|
250
|
+
"/my-route": {
|
|
251
|
+
"get": {
|
|
252
|
+
"x-zuplo-route": {
|
|
253
|
+
"handler": {
|
|
254
|
+
"export": "urlForwardHandler",
|
|
255
|
+
"module": "$import(@zuplo/runtime)",
|
|
256
|
+
"options": {
|
|
257
|
+
"baseUrl": "https://api.example.com"
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"policies": {
|
|
261
|
+
"inbound": ["log-request-data"],
|
|
262
|
+
"outbound": ["log-response-data"]
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Configurable Options
|
|
272
|
+
|
|
273
|
+
Make the logging behavior configurable using policy options:
|
|
274
|
+
|
|
275
|
+
```ts title="modules/log-request-configurable.ts"
|
|
276
|
+
import type { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
277
|
+
|
|
278
|
+
type PolicyOptions = {
|
|
279
|
+
logHeaders?: boolean;
|
|
280
|
+
logQuery?: boolean;
|
|
281
|
+
logBody?: boolean;
|
|
282
|
+
redactedHeaders?: string[];
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
const DEFAULT_REDACTED = ["authorization", "cookie", "set-cookie", "x-api-key"];
|
|
286
|
+
|
|
287
|
+
export default async function policy(
|
|
288
|
+
request: ZuploRequest,
|
|
289
|
+
context: ZuploContext,
|
|
290
|
+
options: PolicyOptions,
|
|
291
|
+
policyName: string,
|
|
292
|
+
) {
|
|
293
|
+
const url = new URL(request.url);
|
|
294
|
+
const logData: Record<string, unknown> = {
|
|
295
|
+
method: request.method,
|
|
296
|
+
path: url.pathname,
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
if (options.logQuery !== false) {
|
|
300
|
+
logData.query = Object.fromEntries(url.searchParams);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (options.logHeaders !== false) {
|
|
304
|
+
const redacted = (options.redactedHeaders ?? DEFAULT_REDACTED).map((h) =>
|
|
305
|
+
h.toLowerCase(),
|
|
306
|
+
);
|
|
307
|
+
logData.headers = sanitizeHeaders(request.headers, redacted);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (options.logBody && ["POST", "PUT", "PATCH"].includes(request.method)) {
|
|
311
|
+
const clone = request.clone();
|
|
312
|
+
const body = await clone.text();
|
|
313
|
+
try {
|
|
314
|
+
logData.body = JSON.parse(body);
|
|
315
|
+
} catch {
|
|
316
|
+
logData.body = body;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
context.log.info(logData, "Incoming request");
|
|
321
|
+
|
|
322
|
+
return request;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
function sanitizeHeaders(
|
|
326
|
+
headers: Headers,
|
|
327
|
+
redacted: string[],
|
|
328
|
+
): Record<string, string> {
|
|
329
|
+
const result: Record<string, string> = {};
|
|
330
|
+
for (const [key, value] of headers.entries()) {
|
|
331
|
+
result[key] = redacted.includes(key.toLowerCase()) ? "[REDACTED]" : value;
|
|
332
|
+
}
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Configure with options:
|
|
338
|
+
|
|
339
|
+
```json title="config/policies.json"
|
|
340
|
+
{
|
|
341
|
+
"name": "log-request-data",
|
|
342
|
+
"policyType": "custom-code-inbound",
|
|
343
|
+
"handler": {
|
|
344
|
+
"export": "default",
|
|
345
|
+
"module": "$import(./modules/log-request-configurable)",
|
|
346
|
+
"options": {
|
|
347
|
+
"logHeaders": true,
|
|
348
|
+
"logQuery": true,
|
|
349
|
+
"logBody": false,
|
|
350
|
+
"redactedHeaders": ["authorization", "cookie", "x-api-key", "x-secret"]
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
## Best Practices
|
|
357
|
+
|
|
358
|
+
:::warning
|
|
359
|
+
|
|
360
|
+
Always redact sensitive data before logging. Credentials, tokens, passwords, and
|
|
361
|
+
personal information should never appear in logs.
|
|
362
|
+
|
|
363
|
+
:::
|
|
364
|
+
|
|
365
|
+
1. **Redact sensitive data** - Always redact `Authorization`, `Cookie`,
|
|
366
|
+
`Set-Cookie`, API keys, passwords, and any fields containing secrets or
|
|
367
|
+
personal data.
|
|
368
|
+
|
|
369
|
+
2. **Use structured logging** - Pass objects to `context.log` instead of string
|
|
370
|
+
concatenation. This enables better log searching and filtering.
|
|
371
|
+
|
|
372
|
+
3. **Clone before reading** - Always clone requests and responses before reading
|
|
373
|
+
their body to avoid consuming the stream.
|
|
374
|
+
|
|
375
|
+
4. **Consider log volume** - Logging bodies can generate significant log volume
|
|
376
|
+
and storage costs. Consider enabling body logging only for specific routes or
|
|
377
|
+
in development environments.
|
|
378
|
+
|
|
379
|
+
5. **Use appropriate log levels** - Use `debug` for verbose development logging
|
|
380
|
+
and `info` for production audit trails.
|
|
381
|
+
|
|
382
|
+
6. **Limit body size** - Consider truncating large bodies to avoid excessive log
|
|
383
|
+
storage:
|
|
384
|
+
|
|
385
|
+
```ts
|
|
386
|
+
const body = await clone.text();
|
|
387
|
+
const truncated = body.length > 1000 ? body.slice(0, 1000) + "..." : body;
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## See Also
|
|
391
|
+
|
|
392
|
+
- [Logger](../programmable-api/logger.mdx) - Logger interface documentation
|
|
393
|
+
- [Custom Code Inbound Policy](../policies/custom-code-inbound.mdx) - Writing
|
|
394
|
+
custom inbound policies
|
|
395
|
+
- [Custom Code Outbound Policy](../policies/custom-code-outbound.mdx) - Writing
|
|
396
|
+
custom outbound policies
|
|
397
|
+
- [Custom Logging Policy](./custom-logging-example.mdx) - Full request/response
|
|
398
|
+
logging to external services
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Logging
|
|
3
|
+
sidebar_label: Overview
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo provides real-time logging out of the box. If you would like your logs to
|
|
7
|
+
be sent to your own logging service, you can enable one of Zuplo's logging
|
|
8
|
+
plugins.
|
|
9
|
+
|
|
10
|
+
To configure your logging, you need to create a `zuplo.runtime.ts` file in the
|
|
11
|
+
`modules`. The examples below show the content of the file with each of the
|
|
12
|
+
different logging plugins.
|
|
13
|
+
|
|
14
|
+
## Log Integrations
|
|
15
|
+
|
|
16
|
+
Zuplo offers out-of-the box integrations with many common logging vendors. For
|
|
17
|
+
instructions on how to configure logging, see the documentation for each plugin:
|
|
18
|
+
|
|
19
|
+
- [AWS CloudWatch](./log-plugin-aws-cloudwatch.mdx)
|
|
20
|
+
- [Datadog](./log-plugin-datadog.mdx)
|
|
21
|
+
- [Dynatrace](./log-plugin-dynatrace.mdx)
|
|
22
|
+
- [New Relic](./log-plugin-new-relic.mdx)
|
|
23
|
+
- [Google Cloud Logging](./log-plugin-gcp.mdx)
|
|
24
|
+
- [Loki](./log-plugin-loki.mdx)
|
|
25
|
+
- [Splunk](./log-plugin-splunk.mdx)
|
|
26
|
+
- [Sumo Logic](./log-plugin-sumo.mdx)
|
|
27
|
+
- [VMware Log Insight](./log-plugin-vmware-log-insight.mdx)
|
|
28
|
+
|
|
29
|
+
:::info
|
|
30
|
+
|
|
31
|
+
Not seeing the logging plugin you need? Reach out to
|
|
32
|
+
[support@zuplo.com](mailto:support@zuplo.com) and we'd be happy to work with you
|
|
33
|
+
to add a new logging plugin.
|
|
34
|
+
|
|
35
|
+
:::
|
|
36
|
+
|
|
37
|
+
## Custom Logging
|
|
38
|
+
|
|
39
|
+
In addition to the logging plugins, you can also create your own custom logging
|
|
40
|
+
plugin. For more information, see the
|
|
41
|
+
[Custom Logging Plugin](./custom-logging-example.mdx) documentation.
|
|
42
|
+
|
|
43
|
+
## Log Fields
|
|
44
|
+
|
|
45
|
+
Below is a list of the default fields that are sent with log messages. Note that
|
|
46
|
+
the names of these fields may differ depending on your logger as we follow the
|
|
47
|
+
conventions of each log service. So `environmentType` may be `environmentType`,
|
|
48
|
+
`environment_type`, or `environment-type`. See the specific log plugin for
|
|
49
|
+
details.
|
|
50
|
+
|
|
51
|
+
- `severity`: The log level of the message. Values are `debug`, `info`, `warn`,
|
|
52
|
+
`error`
|
|
53
|
+
- `requestId`: The value of the `zp-rid` header. This is used for tracing issues
|
|
54
|
+
across Zuplo systems.
|
|
55
|
+
- `atomicCounter`: This is a counter that indicates log ordering. Because of the
|
|
56
|
+
shared nature of the edge environments the clock doesn't incriment unless an
|
|
57
|
+
I/O operation is performed. As such, you may notice that you have several
|
|
58
|
+
messages with the same timestamp. You can use the value of this counter to
|
|
59
|
+
determine order. This value will be an integer between 0 and the max integer
|
|
60
|
+
value. It will cycle back to 0 when the maximum is reached. This number isn't
|
|
61
|
+
persistent across restarts or shared across environments.
|
|
62
|
+
- `environment`: This is the name of your Zuplo environment. This will be the
|
|
63
|
+
same as your Zuplo subdomain. for example if your Zuplo URL is
|
|
64
|
+
`https://silver-lemming-main-b0cef33.zuplo.app`, the environment is
|
|
65
|
+
`silver-lemming-main-b0cef33`
|
|
66
|
+
- `environmentType`: This indicates where your environment is running. Possible
|
|
67
|
+
values are:
|
|
68
|
+
- `edge`: Environments deployed to our 300+ edge locations
|
|
69
|
+
- `working-copy`: Environments deployed to your single-instance dev server
|
|
70
|
+
- `local`: When running with Zuplo local development
|
|
71
|
+
- `environmentStage`: This indicates the deployment stage of your environment.
|
|
72
|
+
Possible values are:
|
|
73
|
+
- `production`: Environments deployed from your default git branch
|
|
74
|
+
- `preview`: Environments deployed from any other git branch
|
|
75
|
+
- `working-copy`: Environments deployed to your single-instance dev server
|
|
76
|
+
- `local`: When running with Zuplo local development
|
|
77
|
+
- `loggingId`: This string is a unique identifier that combines your environment
|
|
78
|
+
name, branch name, and project name into one string. We advise against using
|
|
79
|
+
this value and instead recommend using the `environment` and
|
|
80
|
+
`environmentStage` values for filtering. This value will likely be deprecated
|
|
81
|
+
in future releases.
|
|
82
|
+
- `buildId`: A UUID representing the unique build of your API. This value
|
|
83
|
+
changes every time a new version of your API is built and deployed.
|
|
84
|
+
- `logSource`: Whether the log originated from a request (`request`) or from
|
|
85
|
+
outside of a request (`runtime`)
|
|
86
|
+
- `rayId`: The value of the network provider request ID (that is Cloudflare Ray
|
|
87
|
+
ID). This value is used internally to coordinate log event in Zuplo to log
|
|
88
|
+
events in the environment where your API runs. It's provided in your logs for
|
|
89
|
+
potential troubleshooting. Normally, it's recommended to rely on the
|
|
90
|
+
`requestId` for tracing.
|
|
91
|
+
|
|
92
|
+
## Custom Log Properties
|
|
93
|
+
|
|
94
|
+
In addition to the default fields, you can also add custom fields to your logs.
|
|
95
|
+
This can be done using the `context.log.setLogProperties!` method.
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
99
|
+
|
|
100
|
+
export default async function policy(
|
|
101
|
+
request: ZuploRequest,
|
|
102
|
+
context: ZuploContext,
|
|
103
|
+
) {
|
|
104
|
+
context.log.setLogProperties!({ customProperty: "value" });
|
|
105
|
+
context.log.info("Hello World");
|
|
106
|
+
return request;
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
These properties will be included in all subsequent log messages for that
|
|
111
|
+
request. If the property already exists, it will be overwritten.
|
|
112
|
+
|
|
113
|
+
The log properties will be exported in a format native to the plugin you are
|
|
114
|
+
using. For example, in the case of the OpenTelemetry plugin, the properties will
|
|
115
|
+
be included in the `attributes` field of the log record.
|