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,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Web Crypto
|
|
3
|
+
sidebar_label: Web Crypto
|
|
4
|
+
original: https://github.com/cloudflare/cloudflare-docs/blob/production/content/workers/runtime-apis/web-crypto.md
|
|
5
|
+
license: https://github.com/cloudflare/cloudflare-docs/blob/production/LICENSE
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<style type="text/css">{`
|
|
9
|
+
/* This is here to make the table not scroll on full screen */
|
|
10
|
+
table th, table td {
|
|
11
|
+
padding: 6px;
|
|
12
|
+
}
|
|
13
|
+
`}</style>
|
|
14
|
+
|
|
15
|
+
The Web Crypto API provides a set of low-level functions for common
|
|
16
|
+
cryptographic tasks. The Workers Runtime implements the full surface of this
|
|
17
|
+
API, but with some differences in the
|
|
18
|
+
[supported algorithms](#supported-algorithms) compared to those implemented in
|
|
19
|
+
most browsers.
|
|
20
|
+
|
|
21
|
+
Performing cryptographic operations using the Web Crypto API is significantly
|
|
22
|
+
faster than performing them purely in JavaScript. If you want to perform
|
|
23
|
+
CPU-intensive cryptographic operations, you should consider using the Web Crypto
|
|
24
|
+
API.
|
|
25
|
+
|
|
26
|
+
The Web Crypto API is implemented through the `SubtleCrypto` interface,
|
|
27
|
+
accessible via the global `crypto.subtle` binding. A simple example of
|
|
28
|
+
calculating a digest (also known as a hash) is:
|
|
29
|
+
|
|
30
|
+
```js
|
|
31
|
+
const myText = new TextEncoder().encode("Hello world!");
|
|
32
|
+
|
|
33
|
+
const myDigest = await crypto.subtle.digest(
|
|
34
|
+
{
|
|
35
|
+
name: "SHA-256",
|
|
36
|
+
},
|
|
37
|
+
myText, // The data you want to hash as an ArrayBuffer
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
console.log(new Uint8Array(myDigest));
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
:::caution
|
|
44
|
+
|
|
45
|
+
The Web Crypto API differs significantly from Node’s Crypto API. If you want to
|
|
46
|
+
port JavaScript code that relies on Node’s Crypto API, you will need to adapt it
|
|
47
|
+
to use Web Crypto primitives.
|
|
48
|
+
|
|
49
|
+
:::
|
|
50
|
+
|
|
51
|
+
## Methods
|
|
52
|
+
|
|
53
|
+
### `Crypto.getRandomValues()`
|
|
54
|
+
|
|
55
|
+
The `Crypto.getRandomValues()` method lets you get cryptographically strong
|
|
56
|
+
random values.
|
|
57
|
+
|
|
58
|
+
[Refer to the MDN documentation for more information](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues)
|
|
59
|
+
|
|
60
|
+
### `Crypto.randomUUID()`
|
|
61
|
+
|
|
62
|
+
Generates a v4 UUID using a cryptographically secure random number generator.
|
|
63
|
+
|
|
64
|
+
[Refer to the MDN documentation for more information](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID)
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
const uuid = crypto.randomUUID();
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## HMAC Signatures
|
|
71
|
+
|
|
72
|
+
The following code blocks show how to sign and verify a string using HMAC.
|
|
73
|
+
|
|
74
|
+
### Sign a Value
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
/**
|
|
78
|
+
* Creates a signature for a value and a given secret
|
|
79
|
+
* @param value - The value to check
|
|
80
|
+
* @param secret - the secret
|
|
81
|
+
* @returns The base64 encoded signature
|
|
82
|
+
**/
|
|
83
|
+
async function sign(value: string, secret: string) {
|
|
84
|
+
// You will need some super-secret data to use as a symmetric key.
|
|
85
|
+
const encoder = new TextEncoder();
|
|
86
|
+
const secretKeyData = encoder.encode(secret);
|
|
87
|
+
const key = await crypto.subtle.importKey(
|
|
88
|
+
"raw",
|
|
89
|
+
secretKeyData,
|
|
90
|
+
{ name: "HMAC", hash: "SHA-256" },
|
|
91
|
+
false,
|
|
92
|
+
["sign"],
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
const mac = await crypto.subtle.sign("HMAC", key, encoder.encode(value));
|
|
96
|
+
|
|
97
|
+
// `mac` is an ArrayBuffer, so you need to make a few changes to get
|
|
98
|
+
// it into a ByteString, and then a Base64-encoded string.
|
|
99
|
+
let base64Mac = btoa(String.fromCharCode(...new Uint8Array(mac)));
|
|
100
|
+
|
|
101
|
+
// must convert "+" to "-" as urls encode "+" as " "
|
|
102
|
+
base64Mac = base64Mac.replaceAll("+", "-");
|
|
103
|
+
|
|
104
|
+
return base64Mac;
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Verify a Value
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
/**
|
|
112
|
+
* Verifies a value against a signature and secret
|
|
113
|
+
* @param signature - The base64 encoded signature
|
|
114
|
+
* @param value - The value to check
|
|
115
|
+
* @param secret - the secret
|
|
116
|
+
* @returns true if the signature is value against the given value and secret
|
|
117
|
+
**/
|
|
118
|
+
async function verify(signature: string, value: string, secret: string) {
|
|
119
|
+
// You will need some super-secret data to use as a symmetric key.
|
|
120
|
+
const encoder = new TextEncoder();
|
|
121
|
+
const secretKeyData = encoder.encode(secret);
|
|
122
|
+
|
|
123
|
+
// Convert a ByteString (a string whose code units are all in the range
|
|
124
|
+
// [0, 255]), to a Uint8Array. If you pass in a string with code units larger
|
|
125
|
+
// than 255, their values will overflow.
|
|
126
|
+
function byteStringToUint8Array(byteString) {
|
|
127
|
+
const ui = new Uint8Array(byteString.length);
|
|
128
|
+
for (let i = 0; i < byteString.length; ++i) {
|
|
129
|
+
ui[i] = byteString.charCodeAt(i);
|
|
130
|
+
}
|
|
131
|
+
return ui;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const key = await crypto.subtle.importKey(
|
|
135
|
+
"raw",
|
|
136
|
+
secretKeyData,
|
|
137
|
+
{ name: "HMAC", hash: "SHA-256" },
|
|
138
|
+
false,
|
|
139
|
+
["verify"],
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
// The received MAC is Base64-encoded, so you have to go to some trouble to
|
|
143
|
+
// get it into a buffer type that crypto.subtle.verify() can read.
|
|
144
|
+
const receivedMac = byteStringToUint8Array(atob(signature));
|
|
145
|
+
|
|
146
|
+
// Use crypto.subtle.verify() to guard against timing attacks. Since HMACs use
|
|
147
|
+
// symmetric keys, you could implement this by calling crypto.subtle.sign() and
|
|
148
|
+
// then doing a string comparison -- this is insecure, as string comparisons
|
|
149
|
+
// bail out on the first mismatch, which leaks information to potential
|
|
150
|
+
// attackers.
|
|
151
|
+
const verified = await crypto.subtle.verify(
|
|
152
|
+
"HMAC",
|
|
153
|
+
key,
|
|
154
|
+
receivedMac,
|
|
155
|
+
encoder.encode(value),
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
return verified;
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Supported algorithms
|
|
163
|
+
|
|
164
|
+
The runtime implements all operations of the
|
|
165
|
+
[WebCrypto standard](https://www.w3.org/TR/WebCryptoAPI/), as shown in the
|
|
166
|
+
following table.
|
|
167
|
+
|
|
168
|
+
A checkmark (✓) indicates that this feature is believed to be fully supported
|
|
169
|
+
according to the spec.
|
|
170
|
+
|
|
171
|
+
An x (✘) indicates that this feature is part of the specification but not
|
|
172
|
+
implemented.
|
|
173
|
+
|
|
174
|
+
If a feature only implements the operation partially, details are listed.
|
|
175
|
+
|
|
176
|
+
| Algorithm | sign()<br/>verify() | encrypt()<br/>decrypt() | digest() | deriveBits()<br/>deriveKey() | generateKey() | wrapKey()<br/>unwrapKey() | exportKey() | importKey() |
|
|
177
|
+
| :---------------- | :------------------ | :---------------------- | :------- | :--------------------------- | :------------ | :------------------------ | :---------- | :---------- |
|
|
178
|
+
| RSASSA PKCS1 v1.5 | ✓ | | | | ✓ | | ✓ | ✓ |
|
|
179
|
+
| RSA PSS | ✓ | | | | ✓ | | ✓ | ✓ |
|
|
180
|
+
| RSA OAEP | | ✓ | | | ✓ | ✓ | ✓ | ✓ |
|
|
181
|
+
| ECDSA | ✓ | | | | ✓ | | ✓ | ✓ |
|
|
182
|
+
| ECDH | | | | ✓ | ✓ | | ✓ | ✓ |
|
|
183
|
+
| Ed25519[^1] | ✓ | | | | ✓ | | ✓ | ✓ |
|
|
184
|
+
| X25519[^1] | | | | ✓ | ✓ | | ✓ | ✓ |
|
|
185
|
+
| NODE ED25519[^2] | ✓ | | | | ✓ | | ✓ | ✓ |
|
|
186
|
+
| AES CTR | | ✓ | | | ✓ | ✓ | ✓ | ✓ |
|
|
187
|
+
| AES CBC | | ✓ | | | ✓ | ✓ | ✓ | ✓ |
|
|
188
|
+
| AES GCM | | ✓ | | | ✓ | ✓ | ✓ | ✓ |
|
|
189
|
+
| AES KW | | | | | ✓ | ✓ | ✓ | ✓ |
|
|
190
|
+
| HMAC | ✓ | | | | ✓ | | ✓ | ✓ |
|
|
191
|
+
| SHA 1 | | | ✓ | | | | | |
|
|
192
|
+
| SHA 256 | | | ✓ | | | | | |
|
|
193
|
+
| SHA 384 | | | ✓ | | | | | |
|
|
194
|
+
| SHA 512 | | | ✓ | | | | | |
|
|
195
|
+
| MD5[^3] | | | ✓ | | | | | |
|
|
196
|
+
| HKDF | | | | ✓ | | | | ✓ |
|
|
197
|
+
| PBKDF2 | | | | ✓ | | | | ✓ |
|
|
198
|
+
|
|
199
|
+
[^1]:
|
|
200
|
+
Algorithms as specified in the
|
|
201
|
+
[Secure Curves API](https://wicg.github.io/webcrypto-secure-curves).
|
|
202
|
+
|
|
203
|
+
[^2]:
|
|
204
|
+
Legacy non-standard EdDSA is supported for the Ed25519 curve in addition to
|
|
205
|
+
the Secure Curves version. Since this algorithm is non-standard, note the
|
|
206
|
+
following while using it:
|
|
207
|
+
|
|
208
|
+
- Use `NODE-ED25519` as the algorithm and `namedCurve` parameters.
|
|
209
|
+
- Unlike NodeJS, Cloudflare won't support raw import of private keys.
|
|
210
|
+
- The algorithm implementation may change over time. While Cloudflare can't
|
|
211
|
+
guarantee it at this time, Cloudflare will strive to maintain backward
|
|
212
|
+
compatibility and compatibility with NodeJS's behavior. Any notable
|
|
213
|
+
compatibility notes will be communicated in release notes and via this
|
|
214
|
+
developer documentation.
|
|
215
|
+
|
|
216
|
+
[^3]:
|
|
217
|
+
MD5 isn't part of the WebCrypto standard but is supported in Cloudflare
|
|
218
|
+
Workers for interacting with legacy systems that require MD5. MD5 is
|
|
219
|
+
considered a weak algorithm. Don't rely upon MD5 for security.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Web Standard APIs
|
|
3
|
+
sidebar_label: Web Standard APIs
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo's runtime supports the standards
|
|
7
|
+
[Web Workers API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API).
|
|
8
|
+
This means that you can rely on the same set of JavaScript APIs you would find
|
|
9
|
+
in a browser environment.
|
|
10
|
+
|
|
11
|
+
## Built-In Objects
|
|
12
|
+
|
|
13
|
+
All of the
|
|
14
|
+
[standard built-in objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference)
|
|
15
|
+
supported by the current Google Chrome stable release are supported, with a few
|
|
16
|
+
notable exceptions:
|
|
17
|
+
|
|
18
|
+
- `eval()` isn't allowed for security reasons.
|
|
19
|
+
- `new Function` isn't allowed for security reasons.
|
|
20
|
+
- `Date.now()` returns the time of the last I/O; it doesn't advance during code
|
|
21
|
+
execution.
|
|
22
|
+
|
|
23
|
+
## Compression Streams
|
|
24
|
+
|
|
25
|
+
The CompressionStream and DecompressionStream classes support gzip and deflate
|
|
26
|
+
compression methods.
|
|
27
|
+
|
|
28
|
+
[Refer to the MDN documentation for more information](https://developer.mozilla.org/en-US/docs/Web/API/Compression_Streams_API)
|
|
29
|
+
|
|
30
|
+
## Cryptography
|
|
31
|
+
|
|
32
|
+
The
|
|
33
|
+
[Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API)
|
|
34
|
+
enables the use cryptographic primitives in order to build systems using
|
|
35
|
+
cryptography.
|
|
36
|
+
|
|
37
|
+
For more details see the [Web Crypto documentation](./web-crypto-apis.mdx)
|
|
38
|
+
|
|
39
|
+
## Encoding API
|
|
40
|
+
|
|
41
|
+
Both `TextEncoder` and `TextDecoder` support UTF-8 encoding/decoding.
|
|
42
|
+
|
|
43
|
+
[Refer to the MDN documentation for more information.](https://developer.mozilla.org/en-US/docs/Web/API/Encoding_API)
|
|
44
|
+
|
|
45
|
+
## Encoding: Base64
|
|
46
|
+
|
|
47
|
+
- [`atob()`](https://developer.mozilla.org/en-US/docs/web/api/atob): Decodes a
|
|
48
|
+
string of data which has been encoded using base-64 encoding.
|
|
49
|
+
- [`btoa()`](https://developer.mozilla.org/en-US/docs/web/api/btoa): Creates a
|
|
50
|
+
base-64 encoded ASCII string from a string of binary data.
|
|
51
|
+
|
|
52
|
+
## Fetch
|
|
53
|
+
|
|
54
|
+
The [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
|
|
55
|
+
provides an interface for fetching resources (including across the network).
|
|
56
|
+
|
|
57
|
+
[Refer to the MDN documentation for more information](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
const response = await fetch("https://echo.zuplo.io");
|
|
61
|
+
const body = await response.json();
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The Fetch API includes standard objects like
|
|
65
|
+
[`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers),
|
|
66
|
+
[`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request), and
|
|
67
|
+
[`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response).
|
|
68
|
+
|
|
69
|
+
See Also: [`ZuploRequest`](./zuplo-request.mdx)
|
|
70
|
+
|
|
71
|
+
## Streams API
|
|
72
|
+
|
|
73
|
+
The Streams API allows JavaScript to programmatically access streams of data
|
|
74
|
+
received over the network and process them as desired by the developer.
|
|
75
|
+
|
|
76
|
+
- [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream)
|
|
77
|
+
- [`ReadableStream BYOBReader`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamBYOBReader)
|
|
78
|
+
- [`ReadableStream DefaultReader`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultReader)
|
|
79
|
+
- [`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream)
|
|
80
|
+
- [`WritableStream`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream)
|
|
81
|
+
- [`WritableStream DefaultWriter`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter)
|
|
82
|
+
|
|
83
|
+
## Timers
|
|
84
|
+
|
|
85
|
+
- [`setInterval()`](https://developer.mozilla.org/en-US/docs/web/api/setinterval):
|
|
86
|
+
Schedules a function to execute every time a given number of milliseconds
|
|
87
|
+
elapses.
|
|
88
|
+
- [`clearInterval()`](https://developer.mozilla.org/en-US/docs/web/api/clearinterval):
|
|
89
|
+
Cancels the repeated execution set using setInterval().
|
|
90
|
+
- [`setTimeout()`](https://developer.mozilla.org/en-US/docs/web/api/settimeout):
|
|
91
|
+
Schedules a function to execute in a given amount of time.
|
|
92
|
+
- [`clearTimeout()`](https://developer.mozilla.org/en-US/docs/web/api/cleartimeout):
|
|
93
|
+
Cancels the delayed execution set using setTimeout().
|
|
94
|
+
|
|
95
|
+
## URL
|
|
96
|
+
|
|
97
|
+
The [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL) interface is
|
|
98
|
+
used to parse, construct, normalize, and encode URLs. It works by providing
|
|
99
|
+
properties which allow you to easily read and modify the components of a URL.
|
|
100
|
+
|
|
101
|
+
[Refer to the MDN documentation for more information](https://developer.mozilla.org/en-US/docs/Web/API/URL)
|
|
102
|
+
|
|
103
|
+
## URLPattern API
|
|
104
|
+
|
|
105
|
+
The
|
|
106
|
+
[URLPattern API](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern)
|
|
107
|
+
provides a mechanism for matching URLs based on a convenient pattern syntax.
|
|
108
|
+
|
|
109
|
+
[Refer to the MDN documentation for more information.](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ZoneCache
|
|
3
|
+
sidebar_label: ZoneCache
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The ZoneCache stores data in a shared cache. This cache is in the same zone (the
|
|
7
|
+
same data center or cluster) as your API - it's not globally distributed, but
|
|
8
|
+
rather designed to be low-latency. Common uses include caching configuration,
|
|
9
|
+
session, or other data that needs to be frequently accessed with low latency.
|
|
10
|
+
|
|
11
|
+
The ZoneCache can store any JSON serializable data. Each cached item has a
|
|
12
|
+
time-to-live (TTL) after which it expires and is removed from the cache. Each
|
|
13
|
+
cached object can be up to 512 MB in size.
|
|
14
|
+
|
|
15
|
+
There's an demonstration of ZoneCache use in the
|
|
16
|
+
[Per User Rate Limits Using a Database](../articles/per-user-rate-limits-using-db.mdx)
|
|
17
|
+
example.
|
|
18
|
+
|
|
19
|
+
## Constructor
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
new ZoneCache<T = unknown>(name: string, context: ZuploContext)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Creates a new cache instance for the specified zone.
|
|
26
|
+
|
|
27
|
+
- `name` - A unique identifier for the cache
|
|
28
|
+
- `context` - The [ZuploContext](./zuplo-context.mdx) object
|
|
29
|
+
- `T` - The type of data stored in the cache (defaults to `unknown`)
|
|
30
|
+
|
|
31
|
+
## Methods
|
|
32
|
+
|
|
33
|
+
**`get`**
|
|
34
|
+
|
|
35
|
+
Retrieves a value from the cache. Returns `undefined` if the key doesn't exist
|
|
36
|
+
or has expired.
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
get(key: string): Promise<T | undefined>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**`put`**
|
|
43
|
+
|
|
44
|
+
Stores a value in the cache with a time-to-live (TTL) in seconds. The data will
|
|
45
|
+
be JSON serialized.
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
put(key: string, data: T, ttlSeconds: number): Promise<void>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
:::note
|
|
52
|
+
|
|
53
|
+
Objects that don't serialize cleanly to JSON (like the `Headers` object) won't
|
|
54
|
+
be readable after storage.
|
|
55
|
+
|
|
56
|
+
:::
|
|
57
|
+
|
|
58
|
+
**`delete`**
|
|
59
|
+
|
|
60
|
+
Removes a value from the cache.
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
delete(key: string): Promise<void>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Example
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { ZoneCache, ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
70
|
+
|
|
71
|
+
interface UserData {
|
|
72
|
+
id: string;
|
|
73
|
+
name: string;
|
|
74
|
+
email: string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export default async function handler(
|
|
78
|
+
request: ZuploRequest,
|
|
79
|
+
context: ZuploContext,
|
|
80
|
+
) {
|
|
81
|
+
const cache = new ZoneCache<UserData>("user-cache", context);
|
|
82
|
+
|
|
83
|
+
// Try to get user from cache
|
|
84
|
+
const userId = request.params.userId;
|
|
85
|
+
let userData = await cache.get(userId);
|
|
86
|
+
|
|
87
|
+
if (!userData) {
|
|
88
|
+
// Not in cache, fetch from API
|
|
89
|
+
const response = await fetch(`https://api.example.com/users/${userId}`);
|
|
90
|
+
userData = await response.json();
|
|
91
|
+
|
|
92
|
+
// Cache for 5 minutes
|
|
93
|
+
await cache.put(userId, userData, 300);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return new Response(JSON.stringify(userData));
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Performance tips
|
|
101
|
+
|
|
102
|
+
When writing to the cache, you may not want to `await` the operation to
|
|
103
|
+
complete. This can improve response times:
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
// Fire and forget pattern - don't wait for cache write
|
|
107
|
+
cache.put("key", data, 60).catch((err) => context.log.error(err));
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Always catch errors when using the fire-and-forget pattern to avoid unhandled
|
|
111
|
+
promise rejections.
|
|
112
|
+
|
|
113
|
+
## When to use ZoneCache
|
|
114
|
+
|
|
115
|
+
Use ZoneCache when you need low-latency access to frequently used data that's
|
|
116
|
+
stored in a single zone. It's ideal for caching configuration data, session
|
|
117
|
+
information, or results from external API calls that are expensive or slow to
|
|
118
|
+
retrieve.
|
|
119
|
+
|
|
120
|
+
Avoid using ZoneCache for large datasets or data that needs to be globally
|
|
121
|
+
distributed, as it's designed for small, simple objects within a single zone. It
|
|
122
|
+
is also not suitable to be used as an OLTP to read/write important data, it's
|
|
123
|
+
just a cache - very useful but not a database or key/value store.
|
|
124
|
+
|
|
125
|
+
## Limits
|
|
126
|
+
|
|
127
|
+
For full Zuplo platform limits see the
|
|
128
|
+
[Zuplo Limits documentation](../articles/limits.mdx).
|
|
129
|
+
|
|
130
|
+
- Maximum size per cached item: 512 MB
|
|
131
|
+
- Maximum cache calls per request: 1000
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: zp-body-removed
|
|
3
|
+
sidebar_label: zp-body-removed
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Zuplo doesn't support GET or HEAD requests with bodies. This is because the
|
|
7
|
+
product is based on web standards and our stack makes heavy use of
|
|
8
|
+
[fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) which
|
|
9
|
+
explicitly doesn't support GET, HEAD requests with a body.
|
|
10
|
+
|
|
11
|
+
For this reason, any body of a GET/HEAD request is stripped on entry into Zuplo
|
|
12
|
+
infrastructure and a header `zp-body-removed` is added to the request.
|
|
13
|
+
|
|
14
|
+
This allows your origin/backend server to know that a body was removed. If you
|
|
15
|
+
want to enforce this and reject such requests it's easy to write a custom policy
|
|
16
|
+
that looks for a `zp-body-removed` header and return a response. An example is
|
|
17
|
+
below:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { HttpProblems, ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
21
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
22
|
+
const bodyRemoved = request.headers.get("zp-body-removed");
|
|
23
|
+
|
|
24
|
+
if (bodyRemoved) {
|
|
25
|
+
return HttpProblems.badRequest(request, context, {
|
|
26
|
+
detail: `GET or HEAD requests can't have a body.`,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return request;
|
|
31
|
+
}
|
|
32
|
+
```
|