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,412 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Sharing Code Across Zuplo Projects
|
|
3
|
+
sidebar_label: Sharing Code Across Projects
|
|
4
|
+
description:
|
|
5
|
+
Learn how to create a shared npm package containing TypeScript modules that
|
|
6
|
+
can be reused across multiple Zuplo projects.
|
|
7
|
+
tags:
|
|
8
|
+
- custom-code
|
|
9
|
+
- deployment
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
When you have multiple Zuplo projects that share common functionality like
|
|
13
|
+
custom policies, handlers, or utility functions, you can create a shared npm
|
|
14
|
+
package to avoid duplicating code. This guide shows how to create a reusable
|
|
15
|
+
TypeScript module package and automatically copy the source files into your
|
|
16
|
+
Zuplo projects.
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
The approach is straightforward:
|
|
21
|
+
|
|
22
|
+
1. Create an npm package containing your shared TypeScript code and a
|
|
23
|
+
`postinstall` script that copies files to the consumer's `modules` folder
|
|
24
|
+
2. Publish it to npm or a private registry (or reference it directly via Git)
|
|
25
|
+
3. Install the package in your Zuplo projects - the `postinstall` script
|
|
26
|
+
automatically copies the `.ts` files into `./modules`
|
|
27
|
+
|
|
28
|
+
:::note
|
|
29
|
+
|
|
30
|
+
Since Zuplo compiles TypeScript at deployment time, you ship raw TypeScript
|
|
31
|
+
source files rather than pre-compiled JavaScript. This ensures your shared code
|
|
32
|
+
integrates seamlessly with Zuplo's build process.
|
|
33
|
+
|
|
34
|
+
:::
|
|
35
|
+
|
|
36
|
+
## Creating the Shared Package
|
|
37
|
+
|
|
38
|
+
### Project Structure
|
|
39
|
+
|
|
40
|
+
Create a new npm package with the following structure:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
my-shared-zuplo-modules/
|
|
44
|
+
├── package.json
|
|
45
|
+
├── scripts/
|
|
46
|
+
│ └── copy-to-modules.mjs
|
|
47
|
+
├── src/
|
|
48
|
+
│ ├── policies/
|
|
49
|
+
│ │ └── custom-auth-policy.ts
|
|
50
|
+
│ ├── handlers/
|
|
51
|
+
│ │ └── custom-handler.ts
|
|
52
|
+
│ └── utils/
|
|
53
|
+
│ └── helpers.ts
|
|
54
|
+
└── README.md
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Package Configuration
|
|
58
|
+
|
|
59
|
+
Configure your `package.json` to include the TypeScript source files and a
|
|
60
|
+
`postinstall` script that copies them to the consumer's `modules` folder:
|
|
61
|
+
|
|
62
|
+
```json title="my-shared-zuplo-modules/package.json"
|
|
63
|
+
{
|
|
64
|
+
"name": "@your-org/shared-zuplo-modules",
|
|
65
|
+
"version": "1.0.0",
|
|
66
|
+
"description": "Shared Zuplo modules for custom policies and handlers",
|
|
67
|
+
"files": ["src/**/*.ts", "scripts/**/*.mjs"],
|
|
68
|
+
"scripts": {
|
|
69
|
+
"postinstall": "node ./scripts/copy-to-modules.mjs"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"@zuplo/runtime": "^1.0.0"
|
|
73
|
+
},
|
|
74
|
+
"devDependencies": {
|
|
75
|
+
"@zuplo/runtime": "^1.0.0",
|
|
76
|
+
"typescript": "^5.0.0"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Key points:
|
|
82
|
+
|
|
83
|
+
- The `files` array includes both the source files and the copy script
|
|
84
|
+
- The `postinstall` script runs automatically when the package is installed
|
|
85
|
+
- Use `peerDependencies` for `@zuplo/runtime` since consumers provide this
|
|
86
|
+
- No build step is needed because you're shipping raw TypeScript
|
|
87
|
+
|
|
88
|
+
### Copy Script
|
|
89
|
+
|
|
90
|
+
Create a script in your shared package that copies files to the consumer's
|
|
91
|
+
`modules` folder. The script adds a header comment to each file indicating it
|
|
92
|
+
was auto-generated and should not be edited directly:
|
|
93
|
+
|
|
94
|
+
```js title="my-shared-zuplo-modules/scripts/copy-to-modules.mjs"
|
|
95
|
+
import {
|
|
96
|
+
cpSync,
|
|
97
|
+
existsSync,
|
|
98
|
+
mkdirSync,
|
|
99
|
+
readdirSync,
|
|
100
|
+
readFileSync,
|
|
101
|
+
statSync,
|
|
102
|
+
writeFileSync,
|
|
103
|
+
} from "fs";
|
|
104
|
+
import { dirname, join, resolve } from "path";
|
|
105
|
+
import { fileURLToPath } from "url";
|
|
106
|
+
|
|
107
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
108
|
+
|
|
109
|
+
// Source: the src directory in this package
|
|
110
|
+
const sourceDir = resolve(__dirname, "..", "src");
|
|
111
|
+
|
|
112
|
+
// Destination: the modules/shared folder in the consuming project
|
|
113
|
+
// Navigate up from node_modules/@your-org/shared-zuplo-modules/scripts
|
|
114
|
+
const projectRoot = resolve(__dirname, "..", "..", "..", "..");
|
|
115
|
+
const destDir = join(projectRoot, "modules", "shared");
|
|
116
|
+
|
|
117
|
+
// Read package.json to get package name and version
|
|
118
|
+
const packageJson = JSON.parse(
|
|
119
|
+
readFileSync(resolve(__dirname, "..", "package.json"), "utf-8"),
|
|
120
|
+
);
|
|
121
|
+
const packageInfo = `${packageJson.name}@${packageJson.version}`;
|
|
122
|
+
|
|
123
|
+
// Header comment to add to copied files
|
|
124
|
+
const header = `/**
|
|
125
|
+
* AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY
|
|
126
|
+
*
|
|
127
|
+
* This file was copied from ${packageInfo}
|
|
128
|
+
* Any changes made here will be overwritten when the package is updated.
|
|
129
|
+
*
|
|
130
|
+
* To modify this code, edit the source in the shared package and republish.
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
`;
|
|
134
|
+
|
|
135
|
+
// Recursively process and copy files
|
|
136
|
+
function copyWithHeader(src, dest) {
|
|
137
|
+
if (!existsSync(dest)) {
|
|
138
|
+
mkdirSync(dest, { recursive: true });
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const entries = readdirSync(src);
|
|
142
|
+
|
|
143
|
+
for (const entry of entries) {
|
|
144
|
+
const srcPath = join(src, entry);
|
|
145
|
+
const destPath = join(dest, entry);
|
|
146
|
+
|
|
147
|
+
if (statSync(srcPath).isDirectory()) {
|
|
148
|
+
copyWithHeader(srcPath, destPath);
|
|
149
|
+
} else if (entry.endsWith(".ts")) {
|
|
150
|
+
// Add header to TypeScript files
|
|
151
|
+
const content = readFileSync(srcPath, "utf-8");
|
|
152
|
+
writeFileSync(destPath, header + content);
|
|
153
|
+
} else {
|
|
154
|
+
// Copy other files as-is
|
|
155
|
+
cpSync(srcPath, destPath);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Copy all files with headers
|
|
161
|
+
if (existsSync(sourceDir)) {
|
|
162
|
+
copyWithHeader(sourceDir, destDir);
|
|
163
|
+
console.log(`✅ Copied shared modules to ${destDir}`);
|
|
164
|
+
} else {
|
|
165
|
+
console.warn(`⚠️ Source directory not found: ${sourceDir}`);
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
This script runs automatically when someone installs your package, copying your
|
|
170
|
+
TypeScript source files directly into their Zuplo project's `modules/shared`
|
|
171
|
+
folder with a header comment indicating the source.
|
|
172
|
+
|
|
173
|
+
### Example Shared Code
|
|
174
|
+
|
|
175
|
+
Create your shared modules using standard Zuplo patterns:
|
|
176
|
+
|
|
177
|
+
```ts title="my-shared-zuplo-modules/src/policies/custom-auth-policy.ts"
|
|
178
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
179
|
+
|
|
180
|
+
export interface CustomAuthOptions {
|
|
181
|
+
headerName: string;
|
|
182
|
+
allowedValues: string[];
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export default async function customAuthPolicy(
|
|
186
|
+
request: ZuploRequest,
|
|
187
|
+
context: ZuploContext,
|
|
188
|
+
options: CustomAuthOptions,
|
|
189
|
+
policyName: string,
|
|
190
|
+
): Promise<ZuploRequest | Response> {
|
|
191
|
+
const headerValue = request.headers.get(options.headerName);
|
|
192
|
+
|
|
193
|
+
if (!headerValue) {
|
|
194
|
+
return new Response(`Missing ${options.headerName} header`, {
|
|
195
|
+
status: 401,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (!options.allowedValues.includes(headerValue)) {
|
|
200
|
+
return new Response("Unauthorized", { status: 403 });
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return request;
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
```ts title="my-shared-zuplo-modules/src/utils/helpers.ts"
|
|
208
|
+
import { ZuploContext } from "@zuplo/runtime";
|
|
209
|
+
|
|
210
|
+
export function formatRequestId(context: ZuploContext): string {
|
|
211
|
+
return `req-${context.requestId.slice(0, 8)}`;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export function parseJsonSafely<T>(text: string): T | null {
|
|
215
|
+
try {
|
|
216
|
+
return JSON.parse(text) as T;
|
|
217
|
+
} catch {
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Publishing the Package
|
|
224
|
+
|
|
225
|
+
Publish to npm or your private registry:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# Public npm
|
|
229
|
+
npm publish --access public
|
|
230
|
+
|
|
231
|
+
# Private npm registry
|
|
232
|
+
npm publish --registry https://your-registry.example.com
|
|
233
|
+
|
|
234
|
+
# Or use npm link for local development
|
|
235
|
+
npm link
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Alternatively, you can reference the package directly from a Git repository
|
|
239
|
+
without publishing:
|
|
240
|
+
|
|
241
|
+
```json title="package.json"
|
|
242
|
+
{
|
|
243
|
+
"dependencies": {
|
|
244
|
+
"@your-org/shared-zuplo-modules": "github:your-org/shared-zuplo-modules#v1.0.0"
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Using the Shared Package in Zuplo Projects
|
|
250
|
+
|
|
251
|
+
### Install the Package
|
|
252
|
+
|
|
253
|
+
In your Zuplo project, install the shared package:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
npm install @your-org/shared-zuplo-modules
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
The package's `postinstall` script automatically copies the TypeScript files to
|
|
260
|
+
your `modules/shared` folder. After installation, your project structure looks
|
|
261
|
+
like this:
|
|
262
|
+
|
|
263
|
+
```
|
|
264
|
+
your-zuplo-project/
|
|
265
|
+
├── modules/
|
|
266
|
+
│ ├── shared/ # Automatically copied from the shared package
|
|
267
|
+
│ │ ├── policies/
|
|
268
|
+
│ │ │ └── custom-auth-policy.ts
|
|
269
|
+
│ │ ├── handlers/
|
|
270
|
+
│ │ │ └── custom-handler.ts
|
|
271
|
+
│ │ └── utils/
|
|
272
|
+
│ │ └── helpers.ts
|
|
273
|
+
│ └── my-handler.ts # Your project-specific modules
|
|
274
|
+
├── config/
|
|
275
|
+
│ ├── routes.oas.json
|
|
276
|
+
│ └── policies.json
|
|
277
|
+
└── package.json
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Import and Use the Shared Code
|
|
281
|
+
|
|
282
|
+
Import the shared modules using relative paths from your project modules:
|
|
283
|
+
|
|
284
|
+
```ts title="modules/my-handler.ts"
|
|
285
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
286
|
+
import { formatRequestId, parseJsonSafely } from "./shared/utils/helpers";
|
|
287
|
+
|
|
288
|
+
export default async function myHandler(
|
|
289
|
+
request: ZuploRequest,
|
|
290
|
+
context: ZuploContext,
|
|
291
|
+
): Promise<Response> {
|
|
292
|
+
const requestId = formatRequestId(context);
|
|
293
|
+
context.log.info(`Processing request: ${requestId}`);
|
|
294
|
+
|
|
295
|
+
const body = parseJsonSafely<{ name: string }>(await request.text());
|
|
296
|
+
|
|
297
|
+
return new Response(JSON.stringify({ requestId, data: body }), {
|
|
298
|
+
headers: { "content-type": "application/json" },
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Reference shared policies in your `policies.json`:
|
|
304
|
+
|
|
305
|
+
```json title="config/policies.json"
|
|
306
|
+
{
|
|
307
|
+
"policies": [
|
|
308
|
+
{
|
|
309
|
+
"name": "custom-auth",
|
|
310
|
+
"policyType": "custom-code-inbound",
|
|
311
|
+
"handler": {
|
|
312
|
+
"export": "default",
|
|
313
|
+
"module": "$import(./modules/shared/policies/custom-auth-policy)",
|
|
314
|
+
"options": {
|
|
315
|
+
"headerName": "x-api-key",
|
|
316
|
+
"allowedValues": ["key1", "key2"]
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
]
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Version Management
|
|
325
|
+
|
|
326
|
+
To ensure consistency, pin your shared package versions:
|
|
327
|
+
|
|
328
|
+
```json title="package.json"
|
|
329
|
+
{
|
|
330
|
+
"dependencies": {
|
|
331
|
+
"@your-org/shared-zuplo-modules": "1.2.3"
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Use a lockfile (`package-lock.json` or `pnpm-lock.yaml`) and commit it to ensure
|
|
337
|
+
all team members and CI/CD pipelines use the same version.
|
|
338
|
+
|
|
339
|
+
## Source Control
|
|
340
|
+
|
|
341
|
+
### Commit the Copied Files
|
|
342
|
+
|
|
343
|
+
The copied shared modules must be committed to your Git repository. Zuplo
|
|
344
|
+
deployments require all source files to be present in the repository - they are
|
|
345
|
+
not generated during the build process.
|
|
346
|
+
|
|
347
|
+
After installing or updating the shared package, commit the changes:
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
npm install @your-org/shared-zuplo-modules
|
|
351
|
+
git add modules/shared/
|
|
352
|
+
git commit -m "Update shared modules to v1.2.3"
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
The header comments added by the copy script help identify these files as
|
|
356
|
+
generated code that should not be edited directly. If you need to make changes,
|
|
357
|
+
update the source in the shared package and republish.
|
|
358
|
+
|
|
359
|
+
### Updating Shared Modules
|
|
360
|
+
|
|
361
|
+
When you update the shared package version, the `postinstall` script overwrites
|
|
362
|
+
the existing files with the new version. Review the changes before committing:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
npm update @your-org/shared-zuplo-modules
|
|
366
|
+
git diff modules/shared/
|
|
367
|
+
git add modules/shared/
|
|
368
|
+
git commit -m "Update shared modules to v1.3.0"
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
## Troubleshooting
|
|
372
|
+
|
|
373
|
+
### Files Not Copying
|
|
374
|
+
|
|
375
|
+
If files aren't being copied after installing the shared package:
|
|
376
|
+
|
|
377
|
+
1. Verify the shared package is installed:
|
|
378
|
+
`ls node_modules/@your-org/shared-zuplo-modules`
|
|
379
|
+
2. Check the package's `postinstall` script ran by looking for the success
|
|
380
|
+
message in the install output
|
|
381
|
+
3. Verify the `scripts/copy-to-modules.mjs` file is included in the package's
|
|
382
|
+
`files` array
|
|
383
|
+
4. Check the path calculations in the copy script are correct for your package
|
|
384
|
+
structure
|
|
385
|
+
|
|
386
|
+
### TypeScript Errors
|
|
387
|
+
|
|
388
|
+
If you see TypeScript errors after copying:
|
|
389
|
+
|
|
390
|
+
1. Ensure `@zuplo/runtime` versions match between the shared package and your
|
|
391
|
+
project
|
|
392
|
+
2. Check that all required dependencies are available
|
|
393
|
+
3. Run `npm run typecheck` to identify specific issues
|
|
394
|
+
|
|
395
|
+
### Import Path Issues
|
|
396
|
+
|
|
397
|
+
Use relative imports from your modules:
|
|
398
|
+
|
|
399
|
+
```ts
|
|
400
|
+
// ✅ Correct - relative path from your module
|
|
401
|
+
import { helper } from "./shared/utils/helpers";
|
|
402
|
+
|
|
403
|
+
// ❌ Incorrect - absolute or package-style import
|
|
404
|
+
import { helper } from "@your-org/shared-zuplo-modules/utils/helpers";
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
## Related Resources
|
|
408
|
+
|
|
409
|
+
- [Share code across request handlers and policies](../programmable-api/reusing-code.mdx)
|
|
410
|
+
- [Node Modules](../programmable-api/node-modules.mdx)
|
|
411
|
+
- [Custom Code Inbound Policy](../policies/custom-code-inbound.mdx)
|
|
412
|
+
- [Custom Handler](../handlers/custom-handler.mdx)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Azure DevOps Setup
|
|
3
|
+
sidebar_label: Setup
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Azure DevOps integration is available on
|
|
7
|
+
[enterprise plans](https://zuplo.com/pricing). Contact
|
|
8
|
+
[support@zuplo.com](mailto:support@zuplo.com) to enable Azure DevOps for your
|
|
9
|
+
account.
|
|
10
|
+
|
|
11
|
+
Azure DevOps provides source control integration (push/pull between portal and
|
|
12
|
+
repository) but does not include automatic deployments. Use
|
|
13
|
+
[Azure Pipelines](./custom-ci-cd-azure.mdx) to deploy your API.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Bitbucket Setup
|
|
3
|
+
sidebar_label: Setup
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Bitbucket integration is available on
|
|
7
|
+
[enterprise plans](https://zuplo.com/pricing). Bitbucket provides source control
|
|
8
|
+
integration (push/pull between portal and repository) but does not include
|
|
9
|
+
automatic deployments. Use [Bitbucket Pipelines](./custom-ci-cd-bitbucket.mdx)
|
|
10
|
+
to deploy your API.
|
|
11
|
+
|
|
12
|
+
## Bitbucket.org
|
|
13
|
+
|
|
14
|
+
If you are using the SaaS Bitbucket hosted at bitbucket.org, contact
|
|
15
|
+
[support@zuplo.com](mailto:support@zuplo.com) to enable Bitbucket on your
|
|
16
|
+
account.
|
|
17
|
+
|
|
18
|
+
Provide support with your Bitbucket Workspace ID, found on your Workspace
|
|
19
|
+
Settings page.
|
|
20
|
+
|
|
21
|
+
## Self-Hosted Bitbucket
|
|
22
|
+
|
|
23
|
+
For self-hosted Bitbucket, you need to
|
|
24
|
+
[set up a custom Bitbucket OAuth App](https://support.atlassian.com/bitbucket-cloud/docs/integrate-another-application-through-oauth/)
|
|
25
|
+
and provide Zuplo support with the following values:
|
|
26
|
+
|
|
27
|
+
- **Bitbucket Server URL** — Something like `https://bitbucket.example.com`
|
|
28
|
+
- **Client ID** — The client ID of the Bitbucket app you created
|
|
29
|
+
- **Client Secret** — The client secret of the Bitbucket app you created
|
|
30
|
+
|
|
31
|
+
When configuring your app you will need to set the following values:
|
|
32
|
+
|
|
33
|
+
- **Callback URL** - `https://portal.zuplo.com`
|
|
34
|
+
- **Permissions** - `repo user read:org`
|
|
35
|
+
|
|
36
|
+
## Limiting Access
|
|
37
|
+
|
|
38
|
+
Bitbucket doesn't support scoping OAuth app access to specific repositories.
|
|
39
|
+
This is a Bitbucket limitation. To limit Zuplo's access:
|
|
40
|
+
|
|
41
|
+
1. Create a new workspace and install the Zuplo app only in that workspace
|
|
42
|
+
2. Create a service account user with limited repository access and use that
|
|
43
|
+
user to connect Bitbucket to Zuplo
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GitHub Setup
|
|
3
|
+
sidebar_label: Setup
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Connect your Zuplo project to GitHub for source control and automatic
|
|
7
|
+
deployments. Every push to your repository deploys automatically — no CI/CD
|
|
8
|
+
configuration required.
|
|
9
|
+
|
|
10
|
+
## Connect Your Project to GitHub
|
|
11
|
+
|
|
12
|
+
This guide assumes you have a Zuplo project created. If you don't have one yet,
|
|
13
|
+
follow the steps in
|
|
14
|
+
[Step 1 - Setup a Basic Gateway](./step-1-setup-basic-gateway.mdx) to create a
|
|
15
|
+
new Zuplo project.
|
|
16
|
+
|
|
17
|
+
<Stepper>
|
|
18
|
+
|
|
19
|
+
1. Connect to GitHub
|
|
20
|
+
|
|
21
|
+
Go to your project in the Zuplo portal, click **Settings**, then select
|
|
22
|
+
**Source Control**. If your project isn't already connected to GitHub click
|
|
23
|
+
the **Connect to GitHub** button and follow the auth flow. You'll need to
|
|
24
|
+
grant permissions for any GitHub organizations you want to work with.
|
|
25
|
+
|
|
26
|
+

|
|
27
|
+
|
|
28
|
+
1. **Authorize Zuplo**
|
|
29
|
+
|
|
30
|
+
A dialog will open asking you to authorize Zuplo. Click the **Authorize
|
|
31
|
+
Zuplo** button.
|
|
32
|
+
|
|
33
|
+
<Framed size="sm">
|
|
34
|
+
|
|
35
|
+

|
|
36
|
+
|
|
37
|
+
</Framed>
|
|
38
|
+
|
|
39
|
+
:::tip{title="GitHub Permissions"}
|
|
40
|
+
|
|
41
|
+
The permission "Act on your behalf" sounds a bit scary - however, this is a
|
|
42
|
+
standard GitHub permission and by default Zuplo can't actually do anything
|
|
43
|
+
with this. In order to perform actions on your behalf you must grant Zuplo
|
|
44
|
+
access to a specific repository (shown in the next steps).
|
|
45
|
+
|
|
46
|
+
You can
|
|
47
|
+
[read more about this permission on GitHub's docs](https://docs.github.com/en/apps/using-github-apps/authorizing-github-apps#about-github-apps-acting-on-your-behalf).
|
|
48
|
+
|
|
49
|
+
:::
|
|
50
|
+
|
|
51
|
+
1. **Select a GitHub organization**
|
|
52
|
+
|
|
53
|
+
After you have connected the GitHub app, it needs to be granted permission to
|
|
54
|
+
edit a repository. If this is your first time connecting Zuplo, you will be
|
|
55
|
+
immediately asked to select a GitHub Org to install Zuplo. Select the org you
|
|
56
|
+
want to use.
|
|
57
|
+
|
|
58
|
+
<Framed size="sm">
|
|
59
|
+
|
|
60
|
+

|
|
61
|
+
|
|
62
|
+
</Framed>
|
|
63
|
+
|
|
64
|
+
1. **Select repositories**
|
|
65
|
+
|
|
66
|
+
You will be asked to select the repositories that you want Zuplo to access.
|
|
67
|
+
The easiest thing is to just select **All Repositories**, but if you want
|
|
68
|
+
fine-grain control, you can select a specific repository.
|
|
69
|
+
|
|
70
|
+
<Framed size="sm">
|
|
71
|
+
|
|
72
|
+

|
|
73
|
+
|
|
74
|
+
</Framed>
|
|
75
|
+
|
|
76
|
+
:::caution{title="Existing Installation"}
|
|
77
|
+
|
|
78
|
+
If you weren't prompted to select a GitHub org, it's likely that you are
|
|
79
|
+
already a member of an account that has authorized Zuplo. To add Zuplo to a
|
|
80
|
+
new organization click **Add GitHub Account** in the org picker list.
|
|
81
|
+
|
|
82
|
+

|
|
83
|
+
|
|
84
|
+
:::
|
|
85
|
+
|
|
86
|
+
1. **Create a repository**
|
|
87
|
+
|
|
88
|
+
With your GitHub App configured, return to the Zuplo portal. In the **Source
|
|
89
|
+
Control** settings you should now see a list of GitHub repositories. Create a
|
|
90
|
+
new repository by clicking the **Create new repository** button. You will be
|
|
91
|
+
prompted that this will open GitHub. Click to continue.
|
|
92
|
+
|
|
93
|
+

|
|
94
|
+
|
|
95
|
+
In the GitHub UI, you can rename your repository if you want. Click the
|
|
96
|
+
**Create repository** button at the bottom of the page and return to the
|
|
97
|
+
Zuplo Portal.
|
|
98
|
+
|
|
99
|
+
1. **Connect your repository**
|
|
100
|
+
|
|
101
|
+
The portal will reload and you will see your new repository listed. Click
|
|
102
|
+
**Connect** to connect Zuplo to that repository.
|
|
103
|
+
|
|
104
|
+

|
|
105
|
+
|
|
106
|
+
After the connection succeeds you will see a link to your GitHub repository.
|
|
107
|
+
|
|
108
|
+

|
|
109
|
+
|
|
110
|
+
1. **Verify deployment**
|
|
111
|
+
|
|
112
|
+
Click the link to return to GitHub. You should see a green check next to the
|
|
113
|
+
commit hash (1). When you hover your mouse over that you'll see the Zuplo
|
|
114
|
+
deployment was successful. Click **Details** (2) to open the deployment info.
|
|
115
|
+
|
|
116
|
+

|
|
117
|
+
|
|
118
|
+
On the deployment page, you will see **Deployment has Completed!!** and below
|
|
119
|
+
that's the link to your new environment.
|
|
120
|
+
|
|
121
|
+

|
|
122
|
+
|
|
123
|
+
</Stepper>
|
|
124
|
+
|
|
125
|
+
## Connecting Existing Repositories
|
|
126
|
+
|
|
127
|
+
If you have an existing GitHub repository that contains a Zuplo project, you can
|
|
128
|
+
connect to that repository when you create a new project. Select **Import
|
|
129
|
+
existing project** then select your GitHub organization and repository.
|
|
130
|
+
|
|
131
|
+

|
|
132
|
+
|
|
133
|
+
## What's Included
|
|
134
|
+
|
|
135
|
+
With GitHub connected, you get:
|
|
136
|
+
|
|
137
|
+
- **Automatic deployments** — Every push deploys to Zuplo automatically
|
|
138
|
+
- **Branch environments** — Each branch gets its own isolated environment
|
|
139
|
+
- **Deployment status** — See deploy results as GitHub checks on commits and PRs
|
|
140
|
+
- **Portal sync** — Push and pull changes between the Zuplo portal and GitHub
|
|
141
|
+
|
|
142
|
+
## Next Steps
|
|
143
|
+
|
|
144
|
+
- **[Testing Deployments](./github-deployment-testing.mdx)** — Run tests
|
|
145
|
+
automatically after each deploy
|
|
146
|
+
- **[Custom GitHub Actions](./custom-ci-cd-github.mdx)** — Advanced workflows
|
|
147
|
+
with approval gates and multi-stage deployments
|
|
148
|
+
- **[Branch-Based Deployments](./branch-based-deployments.mdx)** — How branches
|
|
149
|
+
map to environments
|
|
150
|
+
|
|
151
|
+
## Frequently Asked Questions
|
|
152
|
+
|
|
153
|
+
<Faq>
|
|
154
|
+
<FaqItem question="What happens if I disconnect my repository?">
|
|
155
|
+
If you disconnect your repository, you can go back to source control
|
|
156
|
+
settings and reconnect it.
|
|
157
|
+
</FaqItem>
|
|
158
|
+
<FaqItem question="What happens if I rename my repository?">
|
|
159
|
+
Renaming your repository will break the connection. You must disconnect and
|
|
160
|
+
reconnect to restore the link.
|
|
161
|
+
</FaqItem>
|
|
162
|
+
<FaqItem question="Can I connect multiple Zuplo projects to the same repo?">
|
|
163
|
+
No, each Zuplo project must be connected to a unique GitHub repository.
|
|
164
|
+
</FaqItem>
|
|
165
|
+
<FaqItem question="My project isn't deploying, what do I do?">
|
|
166
|
+
First, check the deployment status in GitHub. If there is an error message,
|
|
167
|
+
follow the instructions to resolve it. Next, check that the [Zuplo GitHub
|
|
168
|
+
app](https://github.com/apps/zuplo) is installed in your organization and
|
|
169
|
+
has access to the repository where your Zuplo projects are located. If you
|
|
170
|
+
need help, contact Zuplo support.
|
|
171
|
+
</FaqItem>
|
|
172
|
+
</Faq>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GitLab Setup
|
|
3
|
+
sidebar_label: Setup
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
GitLab integration is available on
|
|
7
|
+
[enterprise plans](https://zuplo.com/pricing). Contact
|
|
8
|
+
[support@zuplo.com](mailto:support@zuplo.com) to enable GitLab for your account.
|
|
9
|
+
|
|
10
|
+
GitLab provides source control integration (push/pull between portal and
|
|
11
|
+
repository) but does not include automatic deployments. Use
|
|
12
|
+
[GitLab CI/CD pipelines](./custom-ci-cd-gitlab.mdx) to deploy your API.
|