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.
Files changed (644) hide show
  1. package/README.md +9 -0
  2. package/docs/_index.md +44 -0
  3. package/docs/ai-gateway/apps.mdx +28 -0
  4. package/docs/ai-gateway/custom-providers.mdx +54 -0
  5. package/docs/ai-gateway/getting-started.mdx +224 -0
  6. package/docs/ai-gateway/guardrails.mdx +65 -0
  7. package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
  8. package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
  9. package/docs/ai-gateway/integrations/codex.mdx +78 -0
  10. package/docs/ai-gateway/integrations/goose.mdx +104 -0
  11. package/docs/ai-gateway/integrations/langchain.mdx +66 -0
  12. package/docs/ai-gateway/integrations/openai.mdx +99 -0
  13. package/docs/ai-gateway/introduction.mdx +85 -0
  14. package/docs/ai-gateway/managing-apps.mdx +46 -0
  15. package/docs/ai-gateway/managing-providers.mdx +66 -0
  16. package/docs/ai-gateway/managing-teams.mdx +63 -0
  17. package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
  18. package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
  19. package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
  20. package/docs/ai-gateway/providers.mdx +32 -0
  21. package/docs/ai-gateway/teams.mdx +38 -0
  22. package/docs/ai-gateway/universal-api.mdx +43 -0
  23. package/docs/ai-gateway/usage-limits.mdx +89 -0
  24. package/docs/api-management/introduction.md +127 -0
  25. package/docs/articles/accounts/audit-logs.mdx +227 -0
  26. package/docs/articles/accounts/billing.mdx +25 -0
  27. package/docs/articles/accounts/default-api-key.mdx +30 -0
  28. package/docs/articles/accounts/delete-account.mdx +36 -0
  29. package/docs/articles/accounts/enterprise-sso.mdx +116 -0
  30. package/docs/articles/accounts/managing-account-members.mdx +45 -0
  31. package/docs/articles/accounts/managing-project-members.mdx +37 -0
  32. package/docs/articles/accounts/members-and-roles.mdx +21 -0
  33. package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
  34. package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
  35. package/docs/articles/add-api-to-backstage.mdx +216 -0
  36. package/docs/articles/advanced-path-matching.mdx +139 -0
  37. package/docs/articles/api-key-administration.mdx +47 -0
  38. package/docs/articles/api-key-api.mdx +220 -0
  39. package/docs/articles/api-key-authentication.mdx +195 -0
  40. package/docs/articles/api-key-buckets.mdx +61 -0
  41. package/docs/articles/api-key-end-users.mdx +52 -0
  42. package/docs/articles/api-key-leak-detection.mdx +75 -0
  43. package/docs/articles/api-key-management.mdx +100 -0
  44. package/docs/articles/api-key-react-component.mdx +90 -0
  45. package/docs/articles/api-key-service-limits.mdx +14 -0
  46. package/docs/articles/archiving-requests-to-storage.mdx +119 -0
  47. package/docs/articles/branch-based-deployments.mdx +184 -0
  48. package/docs/articles/bypass-policy-for-testing.mdx +117 -0
  49. package/docs/articles/check-ip-address.mdx +17 -0
  50. package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
  51. package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
  52. package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
  53. package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
  54. package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
  55. package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
  56. package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
  57. package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
  58. package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
  59. package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
  60. package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
  61. package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
  62. package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
  63. package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
  64. package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
  65. package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
  66. package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
  67. package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
  68. package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
  69. package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
  70. package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
  71. package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
  72. package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
  73. package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
  74. package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
  75. package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
  76. package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
  77. package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
  78. package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
  79. package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
  80. package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
  81. package/docs/articles/composite-policy-reference.mdx +284 -0
  82. package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
  83. package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
  84. package/docs/articles/convert-urls-to-openapi.mdx +62 -0
  85. package/docs/articles/cors.mdx +447 -0
  86. package/docs/articles/custom-audit-log-policy.mdx +95 -0
  87. package/docs/articles/custom-ci-cd-azure.mdx +81 -0
  88. package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
  89. package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
  90. package/docs/articles/custom-ci-cd-github.mdx +99 -0
  91. package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
  92. package/docs/articles/custom-ci-cd.mdx +82 -0
  93. package/docs/articles/custom-code-patterns.md +418 -0
  94. package/docs/articles/custom-domains.mdx +258 -0
  95. package/docs/articles/custom-logging-example.mdx +139 -0
  96. package/docs/articles/ddos-protection.mdx +138 -0
  97. package/docs/articles/development-options.mdx +49 -0
  98. package/docs/articles/environment-variables.mdx +134 -0
  99. package/docs/articles/environments.mdx +143 -0
  100. package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
  101. package/docs/articles/github-deployment-testing.mdx +101 -0
  102. package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
  103. package/docs/articles/graphql-security.mdx +180 -0
  104. package/docs/articles/handling-form-data.mdx +61 -0
  105. package/docs/articles/health-checks.mdx +109 -0
  106. package/docs/articles/hosting-options.mdx +70 -0
  107. package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
  108. package/docs/articles/limits.mdx +98 -0
  109. package/docs/articles/local-development-debugging.mdx +44 -0
  110. package/docs/articles/local-development-env-variables.mdx +23 -0
  111. package/docs/articles/local-development-installing-packages.mdx +23 -0
  112. package/docs/articles/local-development-routes-designer.mdx +27 -0
  113. package/docs/articles/local-development-services.mdx +40 -0
  114. package/docs/articles/local-development-troubleshooting.mdx +56 -0
  115. package/docs/articles/local-development.mdx +81 -0
  116. package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
  117. package/docs/articles/log-plugin-datadog.mdx +84 -0
  118. package/docs/articles/log-plugin-dynatrace.mdx +75 -0
  119. package/docs/articles/log-plugin-gcp.mdx +75 -0
  120. package/docs/articles/log-plugin-loki.mdx +136 -0
  121. package/docs/articles/log-plugin-new-relic.mdx +84 -0
  122. package/docs/articles/log-plugin-splunk.mdx +104 -0
  123. package/docs/articles/log-plugin-sumo.mdx +73 -0
  124. package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
  125. package/docs/articles/log-request-response-data.mdx +398 -0
  126. package/docs/articles/logging.mdx +115 -0
  127. package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
  128. package/docs/articles/mcp-quickstart.mdx +135 -0
  129. package/docs/articles/metrics-plugins.mdx +371 -0
  130. package/docs/articles/migrate-from-apigee.md +408 -0
  131. package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
  132. package/docs/articles/migrate-from-azure-apim.md +292 -0
  133. package/docs/articles/migrate-from-kong.md +300 -0
  134. package/docs/articles/migration-overview.md +81 -0
  135. package/docs/articles/monetization/api-access.mdx +69 -0
  136. package/docs/articles/monetization/billing-models.md +520 -0
  137. package/docs/articles/monetization/developer-portal.md +167 -0
  138. package/docs/articles/monetization/features.mdx +98 -0
  139. package/docs/articles/monetization/index.mdx +113 -0
  140. package/docs/articles/monetization/meters.mdx +135 -0
  141. package/docs/articles/monetization/monetization-policy.md +314 -0
  142. package/docs/articles/monetization/plan-examples.mdx +366 -0
  143. package/docs/articles/monetization/plans.mdx +266 -0
  144. package/docs/articles/monetization/pricing-models.mdx +225 -0
  145. package/docs/articles/monetization/private-plans.md +154 -0
  146. package/docs/articles/monetization/quickstart.md +355 -0
  147. package/docs/articles/monetization/rate-cards.mdx +171 -0
  148. package/docs/articles/monetization/stripe-integration.md +195 -0
  149. package/docs/articles/monetization/subscription-lifecycle.md +298 -0
  150. package/docs/articles/monetization/tax-collection.md +166 -0
  151. package/docs/articles/monetization/troubleshooting.md +272 -0
  152. package/docs/articles/monetization-custom.mdx +71 -0
  153. package/docs/articles/monetization-integrations.mdx +104 -0
  154. package/docs/articles/monitoring-your-gateway.mdx +53 -0
  155. package/docs/articles/monorepo-deployment.mdx +350 -0
  156. package/docs/articles/multiple-auth-policies.mdx +81 -0
  157. package/docs/articles/non-standard-ports.mdx +30 -0
  158. package/docs/articles/oauth-authentication.mdx +54 -0
  159. package/docs/articles/openapi-server-urls.mdx +60 -0
  160. package/docs/articles/openapi.mdx +130 -0
  161. package/docs/articles/opentelemetry.mdx +250 -0
  162. package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
  163. package/docs/articles/performance-testing.mdx +304 -0
  164. package/docs/articles/plugin-akamai-api-security.mdx +76 -0
  165. package/docs/articles/plugin-azure-blob.mdx +73 -0
  166. package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
  167. package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
  168. package/docs/articles/policies.mdx +33 -0
  169. package/docs/articles/rename-or-move-project.mdx +39 -0
  170. package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
  171. package/docs/articles/routing.mdx +193 -0
  172. package/docs/articles/s3-signed-url-uploads.mdx +521 -0
  173. package/docs/articles/secure-tunnel.mdx +84 -0
  174. package/docs/articles/securing-backend-mtls.mdx +268 -0
  175. package/docs/articles/securing-your-backend.mdx +148 -0
  176. package/docs/articles/security.mdx +105 -0
  177. package/docs/articles/sharing-code-across-projects.mdx +412 -0
  178. package/docs/articles/source-control-setup-azure.mdx +13 -0
  179. package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
  180. package/docs/articles/source-control-setup-github.mdx +172 -0
  181. package/docs/articles/source-control-setup-gitlab.mdx +12 -0
  182. package/docs/articles/source-control.mdx +80 -0
  183. package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
  184. package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
  185. package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
  186. package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
  187. package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
  188. package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
  189. package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
  190. package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
  191. package/docs/articles/support.mdx +144 -0
  192. package/docs/articles/terraform.mdx +114 -0
  193. package/docs/articles/testing-graphql.mdx +34 -0
  194. package/docs/articles/testing.mdx +522 -0
  195. package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
  196. package/docs/articles/troubleshooting.md +302 -0
  197. package/docs/articles/tsconfig.mdx +105 -0
  198. package/docs/articles/tunnel-setup.mdx +195 -0
  199. package/docs/articles/tunnel-troubleshooting.mdx +50 -0
  200. package/docs/articles/update-zup-in-github-action.mdx +110 -0
  201. package/docs/articles/use-openapi-extension-data.mdx +79 -0
  202. package/docs/articles/users/multifactor-authentication.mdx +64 -0
  203. package/docs/articles/users/profile.mdx +13 -0
  204. package/docs/articles/versioning-on-zuplo.mdx +89 -0
  205. package/docs/articles/waf-ddos-akamai.md +133 -0
  206. package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
  207. package/docs/articles/waf-ddos-fastly.mdx +251 -0
  208. package/docs/articles/waf-ddos.mdx +140 -0
  209. package/docs/articles/zuplo-waf.mdx +156 -0
  210. package/docs/ask.mdx +3 -0
  211. package/docs/cli/authentication.mdx +56 -0
  212. package/docs/cli/connectivity.mdx +38 -0
  213. package/docs/cli/create-zuplo-api.mdx +80 -0
  214. package/docs/cli/delete.mdx +79 -0
  215. package/docs/cli/deploy.mdx +156 -0
  216. package/docs/cli/deploy.partial.mdx +46 -0
  217. package/docs/cli/dev.mdx +115 -0
  218. package/docs/cli/docs.mdx +66 -0
  219. package/docs/cli/editor.mdx +50 -0
  220. package/docs/cli/global-options.mdx +19 -0
  221. package/docs/cli/init.mdx +74 -0
  222. package/docs/cli/link.mdx +74 -0
  223. package/docs/cli/list.mdx +55 -0
  224. package/docs/cli/mtls-certificate-create.mdx +94 -0
  225. package/docs/cli/mtls-certificate-delete.mdx +55 -0
  226. package/docs/cli/mtls-certificate-describe.mdx +55 -0
  227. package/docs/cli/mtls-certificate-disable.mdx +55 -0
  228. package/docs/cli/mtls-certificate-list.mdx +47 -0
  229. package/docs/cli/mtls-certificate-update.mdx +72 -0
  230. package/docs/cli/openapi-convert.mdx +111 -0
  231. package/docs/cli/openapi-merge.mdx +138 -0
  232. package/docs/cli/openapi-merge.partial.mdx +29 -0
  233. package/docs/cli/openapi-overlay.mdx +123 -0
  234. package/docs/cli/overview.mdx +78 -0
  235. package/docs/cli/project-create.mdx +43 -0
  236. package/docs/cli/source-migrate.mdx +18 -0
  237. package/docs/cli/source-upgrade.mdx +41 -0
  238. package/docs/cli/test.mdx +70 -0
  239. package/docs/cli/test.partial.mdx +7 -0
  240. package/docs/cli/tunnel-create.mdx +53 -0
  241. package/docs/cli/tunnel-create.partial.mdx +9 -0
  242. package/docs/cli/tunnel-delete.mdx +35 -0
  243. package/docs/cli/tunnel-delete.partial.mdx +9 -0
  244. package/docs/cli/tunnel-describe.mdx +45 -0
  245. package/docs/cli/tunnel-describe.partial.mdx +5 -0
  246. package/docs/cli/tunnel-list.mdx +35 -0
  247. package/docs/cli/tunnel-list.partial.mdx +9 -0
  248. package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
  249. package/docs/cli/tunnel-rotate-token.mdx +39 -0
  250. package/docs/cli/tunnel-services-describe.mdx +45 -0
  251. package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
  252. package/docs/cli/tunnel-services-update.mdx +48 -0
  253. package/docs/cli/variable-create.mdx +91 -0
  254. package/docs/cli/variable-create.partial.mdx +5 -0
  255. package/docs/cli/variable-update.mdx +75 -0
  256. package/docs/cli/variable-update.partial.mdx +5 -0
  257. package/docs/concepts/api-keys.md +146 -0
  258. package/docs/concepts/authentication.mdx +109 -0
  259. package/docs/concepts/how-zuplo-works.mdx +120 -0
  260. package/docs/concepts/project-structure.mdx +174 -0
  261. package/docs/concepts/rate-limiting.md +246 -0
  262. package/docs/concepts/request-lifecycle.mdx +56 -0
  263. package/docs/concepts/source-control-and-deployment.mdx +229 -0
  264. package/docs/conferences/conference-prize-terms.mdx +80 -0
  265. package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
  266. package/docs/dedicated/akamai/architecture.mdx +280 -0
  267. package/docs/dedicated/akamai/caching.mdx +212 -0
  268. package/docs/dedicated/akamai/cdn.mdx +156 -0
  269. package/docs/dedicated/architecture.mdx +208 -0
  270. package/docs/dedicated/custom-domains.mdx +31 -0
  271. package/docs/dedicated/federated-gateways.mdx +80 -0
  272. package/docs/dedicated/networking.mdx +69 -0
  273. package/docs/dedicated/overview.mdx +80 -0
  274. package/docs/dedicated/source-control.mdx +63 -0
  275. package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
  276. package/docs/dev-portal/introduction.mdx +65 -0
  277. package/docs/dev-portal/local-development.mdx +72 -0
  278. package/docs/dev-portal/migration.mdx +526 -0
  279. package/docs/dev-portal/node-modules.mdx +45 -0
  280. package/docs/dev-portal/updating.mdx +28 -0
  281. package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
  282. package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
  283. package/docs/dev-portal/zudoku/components/button.mdx +132 -0
  284. package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
  285. package/docs/dev-portal/zudoku/components/card.mdx +104 -0
  286. package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
  287. package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
  288. package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
  289. package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
  290. package/docs/dev-portal/zudoku/components/head.mdx +199 -0
  291. package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
  292. package/docs/dev-portal/zudoku/components/input.mdx +96 -0
  293. package/docs/dev-portal/zudoku/components/label.mdx +86 -0
  294. package/docs/dev-portal/zudoku/components/link.mdx +242 -0
  295. package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
  296. package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
  297. package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
  298. package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
  299. package/docs/dev-portal/zudoku/components/select.mdx +176 -0
  300. package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
  301. package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
  302. package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
  303. package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
  304. package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
  305. package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
  306. package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
  307. package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
  308. package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
  309. package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
  310. package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
  311. package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
  312. package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
  313. package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
  314. package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
  315. package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
  316. package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
  317. package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
  318. package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
  319. package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
  320. package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
  321. package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
  322. package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
  323. package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
  324. package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
  325. package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
  326. package/docs/dev-portal/zudoku/configuration/search.md +169 -0
  327. package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
  328. package/docs/dev-portal/zudoku/configuration/site.md +124 -0
  329. package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
  330. package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
  331. package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
  332. package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
  333. package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
  334. package/docs/dev-portal/zudoku/extending/events.md +124 -0
  335. package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
  336. package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
  337. package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
  338. package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
  339. package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
  340. package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
  341. package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
  342. package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
  343. package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
  344. package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
  345. package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
  346. package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
  347. package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
  348. package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
  349. package/docs/dev-portal/zudoku/plugins.md +5 -0
  350. package/docs/dev-portal/zudoku/writing.mdx +72 -0
  351. package/docs/errors/bad-request.mdx +39 -0
  352. package/docs/errors/build-error.mdx +45 -0
  353. package/docs/errors/fatal-project-error.mdx +39 -0
  354. package/docs/errors/gateway-timeout.mdx +33 -0
  355. package/docs/errors/get-head-body-error.mdx +41 -0
  356. package/docs/errors/main-mod-error.mdx +40 -0
  357. package/docs/errors/no-project-set.mdx +41 -0
  358. package/docs/errors/not-found.mdx +43 -0
  359. package/docs/errors/rate-limit-exceeded.mdx +31 -0
  360. package/docs/errors/schema-validation-failed.mdx +51 -0
  361. package/docs/errors/system-configuration-error.mdx +44 -0
  362. package/docs/errors/unauthorized.mdx +50 -0
  363. package/docs/errors/unknown-error.mdx +42 -0
  364. package/docs/errors.mdx +14 -0
  365. package/docs/guides/canary-routing-for-employees.mdx +385 -0
  366. package/docs/guides/geolocation-backend-routing.mdx +404 -0
  367. package/docs/guides/modify-openapi-paths.mdx +371 -0
  368. package/docs/guides/openapi-overlays.mdx +492 -0
  369. package/docs/guides/overview.mdx +12 -0
  370. package/docs/guides/user-based-backend-routing.mdx +437 -0
  371. package/docs/handlers/aws-lambda.mdx +201 -0
  372. package/docs/handlers/custom-handler.mdx +112 -0
  373. package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
  374. package/docs/handlers/mcp-server.mdx +730 -0
  375. package/docs/handlers/openapi.mdx +78 -0
  376. package/docs/handlers/redirect.mdx +115 -0
  377. package/docs/handlers/system-handlers.mdx +41 -0
  378. package/docs/handlers/url-forward.mdx +204 -0
  379. package/docs/handlers/url-rewrite.mdx +224 -0
  380. package/docs/handlers/websocket-handler.mdx +154 -0
  381. package/docs/home.mdx +6 -0
  382. package/docs/managed-edge/overview.md +78 -0
  383. package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
  384. package/docs/mcp-server/custom-tools.mdx +487 -0
  385. package/docs/mcp-server/graphql.mdx +241 -0
  386. package/docs/mcp-server/introduction.mdx +122 -0
  387. package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
  388. package/docs/mcp-server/prompts.mdx +283 -0
  389. package/docs/mcp-server/resources.mdx +288 -0
  390. package/docs/mcp-server/testing.mdx +53 -0
  391. package/docs/mcp-server/tools.mdx +306 -0
  392. package/docs/policies/_index.md +92 -0
  393. package/docs/policies/ab-test-inbound/intro.md +8 -0
  394. package/docs/policies/ab-test-inbound/policy.ts +14 -0
  395. package/docs/policies/ab-test-inbound/schema.json +27 -0
  396. package/docs/policies/ab-test-outbound/intro.md +8 -0
  397. package/docs/policies/ab-test-outbound/policy.ts +26 -0
  398. package/docs/policies/ab-test-outbound/schema.json +27 -0
  399. package/docs/policies/acl-policy-inbound/intro.md +5 -0
  400. package/docs/policies/acl-policy-inbound/policy.ts +32 -0
  401. package/docs/policies/acl-policy-inbound/schema.json +52 -0
  402. package/docs/policies/akamai-ai-firewall/schema.json +98 -0
  403. package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
  404. package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
  405. package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
  406. package/docs/policies/api-key-inbound/doc.md +77 -0
  407. package/docs/policies/api-key-inbound/intro.md +30 -0
  408. package/docs/policies/api-key-inbound/schema.json +84 -0
  409. package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
  410. package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
  411. package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
  412. package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
  413. package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
  414. package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
  415. package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
  416. package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
  417. package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
  418. package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
  419. package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
  420. package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
  421. package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
  422. package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
  423. package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
  424. package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
  425. package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
  426. package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
  427. package/docs/policies/audit-log-inbound/doc.md +78 -0
  428. package/docs/policies/audit-log-inbound/intro.md +10 -0
  429. package/docs/policies/audit-log-inbound/schema.json +81 -0
  430. package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
  431. package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
  432. package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
  433. package/docs/policies/authzen-inbound/doc.md +24 -0
  434. package/docs/policies/authzen-inbound/intro.md +31 -0
  435. package/docs/policies/authzen-inbound/schema.json +126 -0
  436. package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
  437. package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
  438. package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
  439. package/docs/policies/basic-auth-inbound/intro.md +9 -0
  440. package/docs/policies/basic-auth-inbound/schema.json +99 -0
  441. package/docs/policies/bot-detection-inbound/intro.md +4 -0
  442. package/docs/policies/bot-detection-inbound/schema.json +56 -0
  443. package/docs/policies/brownout-inbound/doc.md +55 -0
  444. package/docs/policies/brownout-inbound/intro.md +12 -0
  445. package/docs/policies/brownout-inbound/schema.json +115 -0
  446. package/docs/policies/caching-inbound/doc.md +209 -0
  447. package/docs/policies/caching-inbound/intro.md +23 -0
  448. package/docs/policies/caching-inbound/schema.json +98 -0
  449. package/docs/policies/change-method-inbound/schema.json +56 -0
  450. package/docs/policies/clear-headers-inbound/schema.json +59 -0
  451. package/docs/policies/clear-headers-outbound/schema.json +59 -0
  452. package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
  453. package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
  454. package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
  455. package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
  456. package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
  457. package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
  458. package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
  459. package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
  460. package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
  461. package/docs/policies/composite-inbound/doc.md +69 -0
  462. package/docs/policies/composite-inbound/intro.md +15 -0
  463. package/docs/policies/composite-inbound/schema.json +59 -0
  464. package/docs/policies/composite-outbound/intro.md +6 -0
  465. package/docs/policies/composite-outbound/schema.json +59 -0
  466. package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
  467. package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
  468. package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
  469. package/docs/policies/custom-code-inbound/doc.md +267 -0
  470. package/docs/policies/custom-code-inbound/intro.md +2 -0
  471. package/docs/policies/custom-code-inbound/schema.json +48 -0
  472. package/docs/policies/custom-code-outbound/doc.md +235 -0
  473. package/docs/policies/custom-code-outbound/intro.md +2 -0
  474. package/docs/policies/custom-code-outbound/schema.json +43 -0
  475. package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
  476. package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
  477. package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
  478. package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
  479. package/docs/policies/geo-filter-inbound/doc.md +33 -0
  480. package/docs/policies/geo-filter-inbound/schema.json +108 -0
  481. package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
  482. package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
  483. package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
  484. package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
  485. package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
  486. package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
  487. package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
  488. package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
  489. package/docs/policies/hmac-auth-inbound/doc.md +30 -0
  490. package/docs/policies/hmac-auth-inbound/intro.md +10 -0
  491. package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
  492. package/docs/policies/hmac-auth-inbound/schema.json +53 -0
  493. package/docs/policies/http-deprecation-outbound/doc.md +73 -0
  494. package/docs/policies/http-deprecation-outbound/schema.json +83 -0
  495. package/docs/policies/ip-restriction-inbound/intro.md +8 -0
  496. package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
  497. package/docs/policies/ip-restriction-inbound/schema.json +58 -0
  498. package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
  499. package/docs/policies/ldap-auth-inbound/schema.json +56 -0
  500. package/docs/policies/mock-api-inbound/schema.json +72 -0
  501. package/docs/policies/moesif-inbound/doc.md +44 -0
  502. package/docs/policies/moesif-inbound/intro.md +6 -0
  503. package/docs/policies/moesif-inbound/schema.json +68 -0
  504. package/docs/policies/monetization-inbound/doc.md +87 -0
  505. package/docs/policies/monetization-inbound/intro.md +6 -0
  506. package/docs/policies/monetization-inbound/schema.json +102 -0
  507. package/docs/policies/mtls-auth-inbound/intro.md +6 -0
  508. package/docs/policies/mtls-auth-inbound/schema.json +68 -0
  509. package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
  510. package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
  511. package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
  512. package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
  513. package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
  514. package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
  515. package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
  516. package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
  517. package/docs/policies/openfga-authz-inbound/doc.md +207 -0
  518. package/docs/policies/openfga-authz-inbound/intro.md +17 -0
  519. package/docs/policies/openfga-authz-inbound/schema.json +191 -0
  520. package/docs/policies/openmeter-inbound/doc.md +163 -0
  521. package/docs/policies/openmeter-inbound/intro.md +18 -0
  522. package/docs/policies/openmeter-inbound/schema.json +183 -0
  523. package/docs/policies/prompt-injection-outbound/doc.md +106 -0
  524. package/docs/policies/prompt-injection-outbound/intro.md +4 -0
  525. package/docs/policies/prompt-injection-outbound/schema.json +74 -0
  526. package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
  527. package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
  528. package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
  529. package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
  530. package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
  531. package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
  532. package/docs/policies/quota-inbound/doc.md +235 -0
  533. package/docs/policies/quota-inbound/intro.md +7 -0
  534. package/docs/policies/quota-inbound/schema.json +133 -0
  535. package/docs/policies/rate-limit-inbound/doc.md +78 -0
  536. package/docs/policies/rate-limit-inbound/intro.md +30 -0
  537. package/docs/policies/rate-limit-inbound/schema.json +134 -0
  538. package/docs/policies/rbac-policy-inbound/intro.md +3 -0
  539. package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
  540. package/docs/policies/rbac-policy-inbound/schema.json +52 -0
  541. package/docs/policies/readme-metrics-inbound/doc.md +1 -0
  542. package/docs/policies/readme-metrics-inbound/intro.md +3 -0
  543. package/docs/policies/readme-metrics-inbound/schema.json +84 -0
  544. package/docs/policies/remove-headers-inbound/schema.json +59 -0
  545. package/docs/policies/remove-headers-outbound/schema.json +59 -0
  546. package/docs/policies/remove-query-params-inbound/schema.json +59 -0
  547. package/docs/policies/replace-string-outbound/schema.json +69 -0
  548. package/docs/policies/request-size-limit-inbound/schema.json +60 -0
  549. package/docs/policies/request-validation-inbound/doc.md +72 -0
  550. package/docs/policies/request-validation-inbound/intro.md +24 -0
  551. package/docs/policies/request-validation-inbound/schema.json +98 -0
  552. package/docs/policies/require-origin-inbound/intro.md +12 -0
  553. package/docs/policies/require-origin-inbound/schema.json +65 -0
  554. package/docs/policies/secret-masking-outbound/doc.md +41 -0
  555. package/docs/policies/secret-masking-outbound/intro.md +13 -0
  556. package/docs/policies/secret-masking-outbound/schema.json +65 -0
  557. package/docs/policies/semantic-cache-inbound/doc.md +63 -0
  558. package/docs/policies/semantic-cache-inbound/intro.md +4 -0
  559. package/docs/policies/semantic-cache-inbound/schema.json +179 -0
  560. package/docs/policies/set-body-inbound/intro.md +7 -0
  561. package/docs/policies/set-body-inbound/schema.json +56 -0
  562. package/docs/policies/set-headers-inbound/doc.md +41 -0
  563. package/docs/policies/set-headers-inbound/intro.md +2 -0
  564. package/docs/policies/set-headers-inbound/schema.json +83 -0
  565. package/docs/policies/set-headers-outbound/schema.json +83 -0
  566. package/docs/policies/set-query-params-inbound/schema.json +83 -0
  567. package/docs/policies/set-status-outbound/schema.json +62 -0
  568. package/docs/policies/sleep-inbound/schema.json +56 -0
  569. package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
  570. package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
  571. package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
  572. package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
  573. package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
  574. package/docs/policies/transform-body-inbound/intro.md +8 -0
  575. package/docs/policies/transform-body-inbound/policy.ts +16 -0
  576. package/docs/policies/transform-body-inbound/schema.json +27 -0
  577. package/docs/policies/transform-body-outbound/intro.md +8 -0
  578. package/docs/policies/transform-body-outbound/policy.ts +19 -0
  579. package/docs/policies/transform-body-outbound/schema.json +27 -0
  580. package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
  581. package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
  582. package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
  583. package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
  584. package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
  585. package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
  586. package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
  587. package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
  588. package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
  589. package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
  590. package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
  591. package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
  592. package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
  593. package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
  594. package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
  595. package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
  596. package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
  597. package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
  598. package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
  599. package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
  600. package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
  601. package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
  602. package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
  603. package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
  604. package/docs/policies/xml-to-json-outbound/doc.md +71 -0
  605. package/docs/policies/xml-to-json-outbound/intro.md +4 -0
  606. package/docs/policies/xml-to-json-outbound/schema.json +117 -0
  607. package/docs/programmable-api/audit-log.mdx +74 -0
  608. package/docs/programmable-api/background-dispatcher.mdx +124 -0
  609. package/docs/programmable-api/background-loader.mdx +104 -0
  610. package/docs/programmable-api/cache.mdx +186 -0
  611. package/docs/programmable-api/compatibility-dates.mdx +201 -0
  612. package/docs/programmable-api/console-logging.mdx +48 -0
  613. package/docs/programmable-api/context-data.mdx +127 -0
  614. package/docs/programmable-api/custom-cors-policy.mdx +64 -0
  615. package/docs/programmable-api/environment.mdx +328 -0
  616. package/docs/programmable-api/hooks.mdx +569 -0
  617. package/docs/programmable-api/http-problems.mdx +385 -0
  618. package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
  619. package/docs/programmable-api/logger.mdx +223 -0
  620. package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
  621. package/docs/programmable-api/node-modules.mdx +67 -0
  622. package/docs/programmable-api/not-found-handler.mdx +47 -0
  623. package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
  624. package/docs/programmable-api/overview.mdx +213 -0
  625. package/docs/programmable-api/problem-response-formatter.mdx +183 -0
  626. package/docs/programmable-api/request-user.mdx +289 -0
  627. package/docs/programmable-api/reusing-code.mdx +26 -0
  628. package/docs/programmable-api/route-raw.mdx +55 -0
  629. package/docs/programmable-api/runtime-behaviors.mdx +25 -0
  630. package/docs/programmable-api/runtime-errors.mdx +246 -0
  631. package/docs/programmable-api/runtime-extensions.mdx +340 -0
  632. package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
  633. package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
  634. package/docs/programmable-api/web-crypto-apis.mdx +219 -0
  635. package/docs/programmable-api/web-standard-apis.mdx +109 -0
  636. package/docs/programmable-api/zone-cache.mdx +131 -0
  637. package/docs/programmable-api/zp-body-removed.mdx +32 -0
  638. package/docs/programmable-api/zuplo-context.mdx +414 -0
  639. package/docs/programmable-api/zuplo-id-token.mdx +90 -0
  640. package/docs/programmable-api/zuplo-json.mdx +91 -0
  641. package/docs/programmable-api/zuplo-request.mdx +200 -0
  642. package/docs/sample-apis.mdx +78 -0
  643. package/docs/self-hosted/overview.md +60 -0
  644. 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
+ ![Connect GitHub](../../public/media/step-4-deploying-to-the-edge/image-1.png)
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
+ ![Zuplo GitHub permission](../../public/media/source-control-setup-github/d6194a80-b6d6-429e-85a6-ae1cb4a3375e.png)
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
+ ![Installing Zuplo app](../../public/media/source-control-setup-github/eef76bd7-4d26-4f86-96e8-89ebede03beb.png)
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
+ ![Giving Zuplo repository access](../../public/media/source-control-setup-github/ff482269-9aa2-44c3-8266-b2682b3d6ea5.png)
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
+ ![Connect Org](../../public/media/step-4-deploying-to-the-edge/image-2.png)
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
+ ![Create Repository](../../public/media/step-4-deploying-to-the-edge/image-3.png)
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
+ ![Connect](../../public/media/step-4-deploying-to-the-edge/image-4.png)
105
+
106
+ After the connection succeeds you will see a link to your GitHub repository.
107
+
108
+ ![Connected Repository](../../public/media/step-4-deploying-to-the-edge/image-5.png)
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
+ ![Zuplo deployment running](../../public/media/source-control-setup-github/0a9932eb-7c16-49cf-9720-0beb450724eb.png)
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
+ ![Zuplo deployment result](../../public/media/source-control-setup-github/26fa58b6-7a5a-4627-bd9f-246972639f12.png)
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
+ ![Import existing project to Zuplo](../../public/media/source-control/image-1.png)
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.