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,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "http://zuplo.com/schemas/policies/auth0-jwt-auth-inbound.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"title": "Curity Phantom Token Auth",
|
|
6
|
+
"isDeprecated": false,
|
|
7
|
+
"isPaidAddOn": false,
|
|
8
|
+
"isEnterprise": false,
|
|
9
|
+
"isInternal": false,
|
|
10
|
+
"isBeta": false,
|
|
11
|
+
"isHidden": false,
|
|
12
|
+
"products": ["api-gateway"],
|
|
13
|
+
"description": "Authenticate users using the Curity Phantom Token Pattern.",
|
|
14
|
+
"deprecatedMessage": "",
|
|
15
|
+
"required": ["handler"],
|
|
16
|
+
"properties": {
|
|
17
|
+
"handler": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"default": {},
|
|
20
|
+
"required": ["export", "module", "options"],
|
|
21
|
+
"properties": {
|
|
22
|
+
"export": {
|
|
23
|
+
"const": "CurityPhantomTokenInboundPolicy",
|
|
24
|
+
"description": "The name of the exported type"
|
|
25
|
+
},
|
|
26
|
+
"module": {
|
|
27
|
+
"const": "$import(@zuplo/runtime)",
|
|
28
|
+
"description": "The module containing the policy"
|
|
29
|
+
},
|
|
30
|
+
"options": {
|
|
31
|
+
"title": "CurityPhantomTokenInboundPolicyOptions",
|
|
32
|
+
"type": "object",
|
|
33
|
+
"description": "The options for this policy.",
|
|
34
|
+
"additionalProperties": false,
|
|
35
|
+
"required": ["clientId", "clientSecret", "introspectionUrl"],
|
|
36
|
+
"properties": {
|
|
37
|
+
"clientId": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "The client ID of the Curity application."
|
|
40
|
+
},
|
|
41
|
+
"clientSecret": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "The client secret of the Curity application."
|
|
44
|
+
},
|
|
45
|
+
"introspectionUrl": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "The introspection URL of the Curity application."
|
|
48
|
+
},
|
|
49
|
+
"cacheDurationSeconds": {
|
|
50
|
+
"type": "number",
|
|
51
|
+
"description": "The duration in seconds to cache the introspected response.",
|
|
52
|
+
"default": 600
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"examples": [
|
|
58
|
+
{
|
|
59
|
+
"export": "CurityPhantomTokenInboundPolicy",
|
|
60
|
+
"module": "$import(@zuplo/runtime)",
|
|
61
|
+
"options": {
|
|
62
|
+
"cacheDurationSeconds": 600
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
## Writing A Policy
|
|
2
|
+
|
|
3
|
+
Custom policies can be written to extend the functionality of your gateway. This
|
|
4
|
+
document is about inbound policies that can intercept the request and, if
|
|
5
|
+
required, modify it before passing down the chain.
|
|
6
|
+
|
|
7
|
+
Policies have a similar but subtly different signature to a
|
|
8
|
+
[request handler](/docs/handlers/custom-handler.mdx).
|
|
9
|
+
|
|
10
|
+
They also accept a `ZuploRequest` parameter but they must return either a
|
|
11
|
+
`ZuploRequest` or a `Response`.
|
|
12
|
+
|
|
13
|
+
:::tip
|
|
14
|
+
|
|
15
|
+
Note that both `ZuploRequest` and `Response` are based on the web standards
|
|
16
|
+
[Request](https://developer.mozilla.org/en-US/docs/Web/API/request) and
|
|
17
|
+
[Response](https://developer.mozilla.org/en-US/docs/Web/API/Response).
|
|
18
|
+
ZuploRequest adds a few additional properties for convenience, like `user` and
|
|
19
|
+
`params`.
|
|
20
|
+
|
|
21
|
+
:::
|
|
22
|
+
|
|
23
|
+
Returning a `ZuploRequest` is a signal to continue the request pipeline and what
|
|
24
|
+
you return will be passed to the next policy, and finally the request handler.
|
|
25
|
+
|
|
26
|
+
If you return a `Response` that tells Zuplo to short-circuit this request and
|
|
27
|
+
immediately respond to the client.
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
export type InboundPolicyHandler<TOptions = any> = (
|
|
31
|
+
request: ZuploRequest,
|
|
32
|
+
context: ZuploContext,
|
|
33
|
+
options: TOptions,
|
|
34
|
+
policyName: string,
|
|
35
|
+
) => Promise<ZuploRequest | Response>;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
A common use case for policies is authentication. In the following example we'll
|
|
39
|
+
create a simple auth policy that checks for an `api-key` header:
|
|
40
|
+
|
|
41
|
+
## A simple auth policy
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
// my-first-policy.ts
|
|
45
|
+
import { ZuploRequest } from "@zuplo/runtime";
|
|
46
|
+
|
|
47
|
+
export default async function(
|
|
48
|
+
request: ZuploRequest,
|
|
49
|
+
context: ZuploContext
|
|
50
|
+
options: any,
|
|
51
|
+
policyName: string) {
|
|
52
|
+
const apiKeyHeader = request.headers.get("api-key");
|
|
53
|
+
if (!apiKeyHeader) {
|
|
54
|
+
return new Response(`No api-key header`, { status: 401});
|
|
55
|
+
}
|
|
56
|
+
if (apiKeyHeader !== `magic-password`) {
|
|
57
|
+
return new Response(`Incorrect API Key`, { status: 401});
|
|
58
|
+
}
|
|
59
|
+
// TODO - lets set the user property on the request for
|
|
60
|
+
// downstream consumption
|
|
61
|
+
return request;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This policy checks for an `api-key` header and rejects requests that don't have
|
|
66
|
+
one. If such a header is found, it then checks the content of the header for a
|
|
67
|
+
magic password. This example shouldn't be used in a real API but is
|
|
68
|
+
demonstrative of how you might build custom authentication.
|
|
69
|
+
|
|
70
|
+
## Wiring up the policy on routes
|
|
71
|
+
|
|
72
|
+
Policies are activated by specifying them on routes in the route.oas.json file.
|
|
73
|
+
Here's how we could wire up our new auth route:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
// /config/policies.json
|
|
77
|
+
{
|
|
78
|
+
"policies": [
|
|
79
|
+
{
|
|
80
|
+
"name": "my-first-policy",
|
|
81
|
+
"policyType": "custom-code-inbound",
|
|
82
|
+
"handler": {
|
|
83
|
+
"export": "default",
|
|
84
|
+
"module": "$import(./modules/my-first-policy)"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
// /config/routes.oas.json
|
|
93
|
+
{
|
|
94
|
+
...
|
|
95
|
+
"paths": {
|
|
96
|
+
"/redirect-test": {
|
|
97
|
+
"x-zuplo-path": {
|
|
98
|
+
"pathMode": "open-api"
|
|
99
|
+
},
|
|
100
|
+
"get": {
|
|
101
|
+
"summary": "Testing rewrite handler",
|
|
102
|
+
"x-zuplo-route": {
|
|
103
|
+
"corsPolicy": "none",
|
|
104
|
+
"handler": {
|
|
105
|
+
"module": "$import(@zuplo/runtime)",
|
|
106
|
+
"export": "redirectHandler",
|
|
107
|
+
"options": {
|
|
108
|
+
"location": "/docs"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"policies": {
|
|
113
|
+
"inbound": ["my-first-policy"]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Policy Options
|
|
123
|
+
|
|
124
|
+
In your policy configuration, you can specify additional information to
|
|
125
|
+
configure your policy on the options property. In the example below we set an
|
|
126
|
+
example object with some properties of type string and number. Note these
|
|
127
|
+
objects can be as complicated as you like.
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"name": "my-first-policy",
|
|
132
|
+
"policyType": "custom-code-inbound",
|
|
133
|
+
"handler": {
|
|
134
|
+
"export": "default",
|
|
135
|
+
"module": "$import(./modules/my-first-policy)",
|
|
136
|
+
"options": {
|
|
137
|
+
"you": "can",
|
|
138
|
+
"specify": "anything",
|
|
139
|
+
"here": 0
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
The value of this property will be passed to your policy's handler as the
|
|
146
|
+
`options` parameter. Sometimes it's useful to create a type as shown below.
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
type MyPolicyOptionsType = {
|
|
150
|
+
you: string;
|
|
151
|
+
specify: string;
|
|
152
|
+
here: number;
|
|
153
|
+
};
|
|
154
|
+
export default async function (
|
|
155
|
+
request: ZuploRequest,
|
|
156
|
+
context: ZuploContext,
|
|
157
|
+
options: MyPolicyOptionsType,
|
|
158
|
+
policyName: string,
|
|
159
|
+
) {
|
|
160
|
+
// your policy code goes here, and can use the options to perform any
|
|
161
|
+
// configuration
|
|
162
|
+
context.log.info(options.you);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
You can also use the `any` type if you prefer not to create a type.
|
|
167
|
+
|
|
168
|
+
## Setting the user property
|
|
169
|
+
|
|
170
|
+
When building a policy it's common to modify the request object in some way
|
|
171
|
+
before passing control downstream. The `ZuploRequest` type has a `user` property
|
|
172
|
+
that isn't set for unauthenticated requests. Authenticated requests should have
|
|
173
|
+
a valid `user` property. Since this is an authentication policy, we should set
|
|
174
|
+
that property before passing control to the next in line.
|
|
175
|
+
|
|
176
|
+
The user object should have a `sub` property which is a unique user id. Let's
|
|
177
|
+
use Zuplo's policy `options` to extend our example.
|
|
178
|
+
|
|
179
|
+
You can pass options to a policy from the policies.json file. In this case,
|
|
180
|
+
we'll create a dictionary of API keys to `sub` ids.
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
"policies": [
|
|
184
|
+
{
|
|
185
|
+
"name": "my-first-policy",
|
|
186
|
+
"policyType": "custom-code-inbound",
|
|
187
|
+
"handler": {
|
|
188
|
+
"export": "default",
|
|
189
|
+
"module": "$import(./modules/my-first-policy)",
|
|
190
|
+
// some options that will be passed to our Policy
|
|
191
|
+
"options": {
|
|
192
|
+
"123" : "sub-1",
|
|
193
|
+
"abc" : "sub-2"
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Now let's update the policy to read these options and use the dictionary keys as
|
|
201
|
+
the `api-key` and to map the sub identifier.
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
import { ZuploRequest, ZuploContext } from "@zuplo/runtime";
|
|
205
|
+
|
|
206
|
+
export default async function (
|
|
207
|
+
request: ZuploRequest,
|
|
208
|
+
context: ZuploContext,
|
|
209
|
+
options: any,
|
|
210
|
+
policyName: string,
|
|
211
|
+
) {
|
|
212
|
+
const apiKeyHeader = request.headers.get("api-key");
|
|
213
|
+
if (!apiKeyHeader) {
|
|
214
|
+
return new Response(`No api-key header`, { status: 401 });
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const matchedKey = options[apiKeyHeader];
|
|
218
|
+
|
|
219
|
+
if (matchedKey === undefined) {
|
|
220
|
+
return new Response(`Incorrect API Key`, { status: 401 });
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
request.user = { sub: matchedKey };
|
|
224
|
+
|
|
225
|
+
return request;
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
We can then use this user object in the request handler
|
|
230
|
+
|
|
231
|
+
```ts
|
|
232
|
+
import { ZuploRequest } from "@zuplo/runtime";
|
|
233
|
+
|
|
234
|
+
export default async function (request: ZuploRequest) {
|
|
235
|
+
// let's return the user sub to the client as proof it's working
|
|
236
|
+
return `User sub ${request.user.sub}`;
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Here is this example working as a gif
|
|
241
|
+
|
|
242
|
+

|
|
243
|
+
|
|
244
|
+
## Modifying the request headers
|
|
245
|
+
|
|
246
|
+
Sometimes we need to modify the request more significantly, and this will
|
|
247
|
+
require creating a new request object. In this case, let's imagine we want to
|
|
248
|
+
convert incoming parameters to headers.
|
|
249
|
+
|
|
250
|
+
```ts
|
|
251
|
+
export default async function (request: ZuploRequest) {
|
|
252
|
+
// create a new request based on the old one,
|
|
253
|
+
// this is required because the original request's
|
|
254
|
+
// headers are immutable
|
|
255
|
+
const newRequest = new ZuploRequest(request);
|
|
256
|
+
// enumerate over the params object and copy to the new
|
|
257
|
+
// request
|
|
258
|
+
Object.keys(request.params).forEach((param) => {
|
|
259
|
+
newRequest.headers.set(param, request.params[param]);
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
return newRequest;
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
For a more complex example, check out the
|
|
267
|
+
[custom logging implementation](/docs/articles/custom-logging-example.mdx).
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "http://zuplo.com/schemas/policies/custom-code-inbound.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"title": "Custom Code Inbound",
|
|
6
|
+
"products": ["api-gateway"],
|
|
7
|
+
"description": "Enables a custom code policy written in TypeScript. Change YOUR_MODULE to the name of your module (without .ts extension)",
|
|
8
|
+
"required": ["handler"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"handler": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"default": {},
|
|
13
|
+
"required": ["export", "module", "options"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"export": {
|
|
16
|
+
"const": "YOUR_EXPORT",
|
|
17
|
+
"description": "The name of the exported type"
|
|
18
|
+
},
|
|
19
|
+
"module": {
|
|
20
|
+
"const": "$import(./modules/YOUR_MODULE)",
|
|
21
|
+
"description": "The module containing the policy"
|
|
22
|
+
},
|
|
23
|
+
"options": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"description": "Options to be passed to the custom policy",
|
|
26
|
+
"required": [],
|
|
27
|
+
"properties": {
|
|
28
|
+
"*": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"description": "Any object your custom policy consumes"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"examples": [
|
|
36
|
+
{
|
|
37
|
+
"_name": "basic",
|
|
38
|
+
"export": "default",
|
|
39
|
+
"module": "$import(./modules/YOUR_MODULE)",
|
|
40
|
+
"options": {
|
|
41
|
+
"config1": "YOUR_VALUE",
|
|
42
|
+
"config2": true
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
:::tip{title="The outbound policy will only execute if the response status code
|
|
2
|
+
is 'ok'"}
|
|
3
|
+
|
|
4
|
+
(e.g. `response.ok === true` or the status code is 200-299) - see
|
|
5
|
+
[response.ok on MDN](https://developer.mozilla.org/en-US/docs/Web/API/Response/ok).
|
|
6
|
+
|
|
7
|
+
:::
|
|
8
|
+
|
|
9
|
+
### Writing A Policy
|
|
10
|
+
|
|
11
|
+
Custom policies can be written to extend the functionality of your gateway. This
|
|
12
|
+
document is about outbound policies that can intercept the request and, if
|
|
13
|
+
required, modify it before passing down the chain.
|
|
14
|
+
|
|
15
|
+
The outbound custom policy is similar to the inbound custom policy but also
|
|
16
|
+
accepts a `Response` parameter. The outbound policy must return a valid
|
|
17
|
+
`Response` (or throw an error, which will result in a 500 Internal Server Error
|
|
18
|
+
for your consumer, not recommended).
|
|
19
|
+
|
|
20
|
+
:::tip
|
|
21
|
+
|
|
22
|
+
Note that both `ZuploRequest` and `Response` are based on the web standards
|
|
23
|
+
[Request](https://developer.mozilla.org/en-US/docs/Web/API/request) and
|
|
24
|
+
[Response](https://developer.mozilla.org/en-US/docs/Web/API/Response).
|
|
25
|
+
ZuploRequest adds a few additional properties for convenience, like `user` and
|
|
26
|
+
`params`.
|
|
27
|
+
|
|
28
|
+
:::
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
export type OutboundPolicyHandler<TOptions = any> = (
|
|
32
|
+
response: Response,
|
|
33
|
+
request: ZuploRequest,
|
|
34
|
+
context: ZuploContext,
|
|
35
|
+
options: TOptions,
|
|
36
|
+
policyName: string,
|
|
37
|
+
) => Promise<ZuploRequest | Response>;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
A common use case for outbound policies is to change the body of the response.
|
|
41
|
+
In this example, we'll imagine we are proxying the `/todos` example api at
|
|
42
|
+
[https://jsonplaceholder.typicode.com/todos](https://jsonplaceholder.typicode.com/todos).
|
|
43
|
+
|
|
44
|
+
The format of the /todos response looks like this
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
[
|
|
48
|
+
{
|
|
49
|
+
"userId": 1,
|
|
50
|
+
"id": 1,
|
|
51
|
+
"title": "delectus aut autem",
|
|
52
|
+
"completed": false
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"userId": 1,
|
|
56
|
+
"id": 2,
|
|
57
|
+
"title": "quis ut nam facilis et officia qui",
|
|
58
|
+
"completed": false
|
|
59
|
+
},
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
We will write an outbound policy that does two things
|
|
63
|
+
|
|
64
|
+
1. Removes the `userId` property
|
|
65
|
+
2. Adds a new outbound header called `color`
|
|
66
|
+
|
|
67
|
+
Here's the code:
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
// /modules/my-first-policy.ts
|
|
71
|
+
export default async function (
|
|
72
|
+
response: Response,
|
|
73
|
+
request: ZuploRequest,
|
|
74
|
+
context: ZuploContext,
|
|
75
|
+
options: any,
|
|
76
|
+
policyName: string,
|
|
77
|
+
) {
|
|
78
|
+
if (response.status !== 200) {
|
|
79
|
+
// if we get an unexpected response code, something went wrong, just let the response flow
|
|
80
|
+
return response;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const data = (await response.json()) as any[]; // we know this is JSON and an array
|
|
84
|
+
data.forEach((item) => {
|
|
85
|
+
delete item.userId;
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// create a new response
|
|
89
|
+
const newResponse = new Response(JSON.stringify(data), {
|
|
90
|
+
status: response.status,
|
|
91
|
+
headers: response.headers,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// let's add an additional header as an example, for good measure
|
|
95
|
+
newResponse.headers.set("color", "yellow");
|
|
96
|
+
|
|
97
|
+
return newResponse;
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
:::tip
|
|
102
|
+
|
|
103
|
+
Note, that because we're not using the original response here (we just use the
|
|
104
|
+
new one called `newResponse`) we didn't need to `clone` the original response
|
|
105
|
+
before reading the body with `.json()`. If you need to read the body and use
|
|
106
|
+
that same instance you must first `clone()` to avoid runtime errors such as
|
|
107
|
+
"Body is unusable".
|
|
108
|
+
|
|
109
|
+
:::
|
|
110
|
+
|
|
111
|
+
## Wiring up the policy on routes
|
|
112
|
+
|
|
113
|
+
Policies are activated by specifying them on routes in the route.oas.json file.
|
|
114
|
+
Here's how we could wire up our new route:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
// /config/policies.json
|
|
118
|
+
{
|
|
119
|
+
"policies": [
|
|
120
|
+
{
|
|
121
|
+
"name": "my-first-policy",
|
|
122
|
+
"policyType": "custom-code-outbound",
|
|
123
|
+
"handler": {
|
|
124
|
+
"export": "default",
|
|
125
|
+
"module": "$import(./modules/my-first-policy)"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
// /config/routes.oas.json
|
|
134
|
+
{
|
|
135
|
+
...
|
|
136
|
+
"paths": {
|
|
137
|
+
"x-zuplo-path": {
|
|
138
|
+
"pathMode": "open-api"
|
|
139
|
+
},
|
|
140
|
+
"get": {
|
|
141
|
+
"summary": "New Route",
|
|
142
|
+
"description": "",
|
|
143
|
+
"x-zuplo-route": {
|
|
144
|
+
"corsPolicy": "none",
|
|
145
|
+
"handler": {
|
|
146
|
+
"export": "urlForwardHandler",
|
|
147
|
+
"module": "$import(@zuplo/runtime)",
|
|
148
|
+
"options": {
|
|
149
|
+
"baseUrl": "https://getting-started.zuplo.io"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"policies": {
|
|
153
|
+
"inbound": [],
|
|
154
|
+
"outbound": [
|
|
155
|
+
"my-first-policy",
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Custom Policy Options
|
|
165
|
+
|
|
166
|
+
In your policy configuration, you can specify additional information to
|
|
167
|
+
configure your policy on the options property. In the example below we set an
|
|
168
|
+
example object with some properties of type string and number. Note these
|
|
169
|
+
objects can be as complicated as you like.
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"name": "my-first-policy",
|
|
174
|
+
"policyType": "custom-code-outbound",
|
|
175
|
+
"handler": {
|
|
176
|
+
"export": "default",
|
|
177
|
+
"module": "$import(./modules/my-first-policy)",
|
|
178
|
+
"options": {
|
|
179
|
+
"you": "can",
|
|
180
|
+
"specify": "anything",
|
|
181
|
+
"here": 0
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
The value of this property will be passed to your policy's handler as the
|
|
188
|
+
`options` parameter. Sometimes it's useful to create a type as shown below.
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
type MyPolicyOptionsType = {
|
|
192
|
+
you: string;
|
|
193
|
+
specify: string;
|
|
194
|
+
here: number;
|
|
195
|
+
};
|
|
196
|
+
export default async function (
|
|
197
|
+
response: Response,
|
|
198
|
+
request: ZuploRequest,
|
|
199
|
+
context: ZuploContext,
|
|
200
|
+
options: MyPolicyOptionsType,
|
|
201
|
+
policyName: string,
|
|
202
|
+
) {
|
|
203
|
+
// your policy code goes here, and can use the options to perform any
|
|
204
|
+
// configuration
|
|
205
|
+
context.log.info(options.you);
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
You can also use the `any` type if you prefer not to create a type.
|
|
210
|
+
|
|
211
|
+
## Adding headers
|
|
212
|
+
|
|
213
|
+
Note if you just need to add headers, it more efficient not read the body stream
|
|
214
|
+
and reuse it, e.g.
|
|
215
|
+
|
|
216
|
+
```ts
|
|
217
|
+
export default async function (
|
|
218
|
+
response: Response,
|
|
219
|
+
request: ZuploRequest,
|
|
220
|
+
context: ZuploContext,
|
|
221
|
+
options: any,
|
|
222
|
+
policyName: string,
|
|
223
|
+
) {
|
|
224
|
+
// create a new response
|
|
225
|
+
const newResponse = new Response(response.body, {
|
|
226
|
+
status: response.status,
|
|
227
|
+
headers: response.headers,
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
// let's add an additional header as an example, for good measure
|
|
231
|
+
newResponse.headers.set("color", "yellow");
|
|
232
|
+
|
|
233
|
+
return newResponse;
|
|
234
|
+
}
|
|
235
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "http://zuplo.com/schemas/policies/custom-code-outbound.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"title": "Custom Code Outbound",
|
|
6
|
+
"products": ["api-gateway"],
|
|
7
|
+
"description": "A custom outbound response policy.",
|
|
8
|
+
"required": ["handler"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"handler": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"default": {},
|
|
13
|
+
"required": ["export", "module", "options"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"export": {
|
|
16
|
+
"const": "YOUR_EXPORT",
|
|
17
|
+
"description": "The name of the exported type"
|
|
18
|
+
},
|
|
19
|
+
"module": {
|
|
20
|
+
"const": "$import(./modules/YOUR_MODULE)",
|
|
21
|
+
"description": "The module containing the policy"
|
|
22
|
+
},
|
|
23
|
+
"options": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"description": "Options to be passed to the custom policy",
|
|
26
|
+
"required": [],
|
|
27
|
+
"properties": {}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"examples": [
|
|
31
|
+
{
|
|
32
|
+
"_name": "basic",
|
|
33
|
+
"export": "default",
|
|
34
|
+
"module": "$import(./modules/YOUR_MODULE)",
|
|
35
|
+
"options": {
|
|
36
|
+
"config1": "YOUR_VALUE",
|
|
37
|
+
"config2": true
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Authenticate requests with JWT tokens issued by Firebase. The payload of the JWT
|
|
2
|
+
token, if successfully authenticated, with be on the `request.user.data` object
|
|
3
|
+
accessible to the runtime.
|
|
4
|
+
|
|
5
|
+
See [this document](https://zuplo.com/docs/articles/oauth-authentication) for
|
|
6
|
+
more information about OAuth authorization in Zuplo.
|