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,195 @@
1
+ ---
2
+ title: Tunnel Setup & Use
3
+ ---
4
+
5
+ <EnterpriseFeature name="Secure tunneling" />
6
+
7
+ ## Setting up Tunnels
8
+
9
+ A tunnel is a way to expose your _internal services_ to the Zuplo gateway
10
+ without exposing it to the public internet. Your Zuplo Gateway accesses those
11
+ services through the `service://` protocol.
12
+
13
+ The easiest way to deploy your tunnel is using a Docker container. The three
14
+ basic requirements for deploying a secure tunnel with Docker are:
15
+
16
+ 1. A tunnel secret that's provided to the Docker container as an environment
17
+ variable named `TUNNEL_TOKEN` (the secret is provided by the Zuplo CLI when
18
+ you create the tunnel. See [creating a tunnel](../cli/tunnel-create.mdx))
19
+ 1. The ability for the tunnel service to make an outbound connection to the
20
+ public internet to establish the secure tunnel.
21
+ 1. The ability for the tunnel service to make a request to your internal API by
22
+ a DNS address. (for example `https://my-service.local/api`).
23
+
24
+ The tunnel can run anywhere you can deploy a Docker container. Where you deploy
25
+ depends on your specific setup. To run the Docker container on your own
26
+ infrastructure, refer to instructions from your cloud provider or contact
27
+ [Zuplo support](mailto:support@zuplo.com) for assistance.
28
+
29
+ Below are a few option for deploying the tunnel.
30
+
31
+ - [Deploying Docker containers on Azure](https://docs.microsoft.com/en-us/learn/modules/run-docker-with-azure-container-instances/)
32
+ - [Deploying Docker containers on AWS ECS](https://docs.aws.amazon.com/AmazonECS/latest/userguide/getting-started.html)
33
+ - [Deploying container images to GCP](https://cloud.google.com/compute/docs/containers/deploying-containers)
34
+
35
+ The docker container is `zuplo/tunnel` and is available on
36
+ [Docker Hub](https://hub.docker.com/r/zuplo/tunnel).
37
+
38
+ Your running container needs a single environment variable named `TUNNEL_TOKEN`.
39
+ You should store the value as a secret using the recommended means of secret
40
+ storage and environment variable injection for your platform.
41
+
42
+ ## Configuring services
43
+
44
+ Once you have created a tunnel, you can
45
+ [configure which services](../cli/tunnel-services-update.mdx) it should expose
46
+ using a configuration file. Below is a sample configuration file. The properties
47
+ in the `services` objects are explained below.
48
+
49
+ - `name` - This is the name of the service that you will use from your Zuplo
50
+ project
51
+ - `endpoint` - This is the local endpoint of your service that you tunnel can
52
+ connect to
53
+ - `configurations` - This object specifies which projects and which environments
54
+ can access this service.
55
+ - `project` - The name of the Zuplo project
56
+ - `accessibleBy` - The environments which can use the tunnel. Valid values are
57
+ `production`, `preview`, and `working-copy`.
58
+
59
+ ```json title="tunnel-config.json"
60
+ {
61
+ "version": 1,
62
+ "services": [
63
+ {
64
+ "name": "my-awesome-service-prod",
65
+ "endpoint": "http://localhost:8000",
66
+ "configurations": [
67
+ {
68
+ "project": "my-project",
69
+ "accessibleBy": ["production"]
70
+ },
71
+ {
72
+ "project": "my-other-project",
73
+ "accessibleBy": ["production"]
74
+ }
75
+ ]
76
+ },
77
+ {
78
+ "name": "my-awesome-service-staging",
79
+ "endpoint": "http://localhost:9000",
80
+ "configurations": [
81
+ {
82
+ "project": "my-project",
83
+ "accessibleBy": ["preview", "working-copy"]
84
+ },
85
+ {
86
+ "project": "my-other-project",
87
+ "accessibleBy": ["preview", "working-copy"]
88
+ }
89
+ ]
90
+ }
91
+ ]
92
+ }
93
+ ```
94
+
95
+ ```bash
96
+ zuplo tunnel services update \
97
+ --configuration-file <path-to-your-configuration-file> \
98
+ --tunnel-id <your-tunnel-id>
99
+ ```
100
+
101
+ ## Using Services Exposed through Tunnels in Code
102
+
103
+ Once set up, the services in the tunnels can be treated like any API host that
104
+ you call from your Zuplo gateway. Each service exposed through tunnels is called
105
+ with the URL schema `service://`, so if your service is named
106
+ `my-awesome-service` you will call it using the URL
107
+ `service://my-awesome-service`.
108
+
109
+ This URL can be used in code as shown below.
110
+
111
+ ```ts
112
+ import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
113
+
114
+ export default async function (request: ZuploRequest, context: ZuploContext) {
115
+ const response = await fetch("service://my-awesome-service/hello-world");
116
+ if (response.status > 399) {
117
+ return "It didn't work. :(";
118
+ } else {
119
+ return response;
120
+ }
121
+ }
122
+ ```
123
+
124
+ It's common to have multiple services for each of your internal environments.
125
+ Each service can be restricted so that it's only accessible by specific Zuplo
126
+ environments. For example, you might have two services one for production and
127
+ one for staging.
128
+
129
+ - `service://my-awesome-service-prod` (Production)
130
+ - `service://my-awesome-service-staging` (Staging)
131
+
132
+ ## Using Services Exposed through Tunnels in Configuration
133
+
134
+ Services can also be used in routes.oas.json file such as with the URL Rewrite
135
+ handler. To call a tunnel service simply use it as part of the rewrite URL as
136
+ shown in the image below.
137
+
138
+ ![Zuplo route handling](../../public/media/tunnel-setup/0c91be91-a591-4cef-ac29-d266e8a3181e.png)
139
+
140
+ ## Service Environment Variables
141
+
142
+ When using these services in your code or configuration, it's often useful to
143
+ store the values as an environment variable. This way you can change which
144
+ environment calls which tunnel without changing code or configuration.
145
+
146
+ For the production environment you would set the `BASE_SERVICE_URL` to the
147
+ production service name. See
148
+ [this document](../articles/environment-variables.mdx) for more about
149
+ [Environment Variables](../articles/environment-variables.mdx)
150
+
151
+ ```text
152
+ BASE_SERVICE_URL=service://my-awesome-service-prod
153
+ ```
154
+
155
+ And for staging, you would use the staging service name.
156
+
157
+ ```text
158
+ BASE_SERVICE_URL=service://my-awesome-service-staging
159
+ ```
160
+
161
+ In your handler code or other configuration, the service can be accessed using
162
+ the environment variable.
163
+
164
+ ```ts
165
+ import { ZuploContext, ZuploRequest, environment } from "@zuplo/runtime";
166
+
167
+ export default async function (request: ZuploRequest, context: ZuploContext) {
168
+ const response = await fetch(`${environment.BASE_SERVICE_URL}/hello-world`);
169
+ if (response.status > 399) {
170
+ return "It didn't work. :(";
171
+ } else {
172
+ return response;
173
+ }
174
+ }
175
+ ```
176
+
177
+ Environment variables can also be used in configuration, such as the URL Rewrite
178
+ handler as shown below.
179
+
180
+ ![Zuplo environment variables](../../public/media/tunnel-setup/16b93099-511d-435b-af85-167fab5814b2.png)
181
+
182
+ ## Tunnel Upgrades
183
+
184
+ Zuplo publishes a new release of the tunnel Docker image about once per month or
185
+ whenever Cloudflare ships a release to their underlying tunnel tools. The most
186
+ recent version of the Docker Image is always tagged with the `latest` tag. We
187
+ recommend periodically checking and upgrading the tunnel to the latest release
188
+ to ensure you have the latest security and performance updates.
189
+
190
+ We recommend testing each release of the tunnel in a staging environment before
191
+ rolling out to production.
192
+
193
+ ## Troubleshooting
194
+
195
+ For troubleshooting see [this document](./tunnel-troubleshooting.mdx).
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: Tunnel Troubleshooting
3
+ ---
4
+
5
+ Setting up a secure tunnel involves configuring several different networks to
6
+ work together. When setting up your tunnel it's common for traffic to initially
7
+ not reach your destination initially. This is almost always caused by
8
+ configurations (firewalls, VPCs, IAM rules, etc.) in your internal network.
9
+
10
+ ## Tunnel status
11
+
12
+ As a first step, check if the tunnel is up and running. You can use the
13
+ following CLI command to check the status of the tunnel:
14
+
15
+ ```bash
16
+ # For brevity, the commands assume that you have exported your API key as an environment variable,
17
+ # export ZUPLO_API_KEY=zpka_d67b7e241bb948758f415b79aa8exxxx_2efbxxxx
18
+
19
+ zuplo tunnel list # Get the list of tunnels
20
+ zuplo tunnel describe --tunnel-id tnl_xxxxxxxxxxx # Narrow it down to the problematic tunnel
21
+ ```
22
+
23
+ Check the `status` field from the output of `zuplo tunnel describe`. If it's
24
+ "down" that means that your tunnel isn't up. If you are using a Docker
25
+ container, check the container for errors. It takes a few seconds for new
26
+ tunnels to register with the Cloudflare network for the first time.
27
+
28
+ ## Tunnel Logging
29
+
30
+ If the tunnel is up (as verified in the previous step) but you aren't seeing any
31
+ traffic, you can inspect the logs to see if there are any network or IAM issues
32
+ that might be blocking a connection.
33
+
34
+ The tunnel by default logs only errors. For the purposes of debugging, it's
35
+ useful to set a more verbose log level. To set logging to a different level,
36
+ simply set the environment variable `TUNNEL_LOGLEVEL` on your Zuplo tunnel
37
+ instance to `debug`. Other log levels available are `info`, `warn`, `error`, and
38
+ `fatal`, but `debug` is recommended for troubleshooting.
39
+
40
+ The way you set an environment variable will vary depending on where you
41
+ deployed the tunnel. If you are using a Docker container, you can set it as the
42
+ environment variables for the container. See your cloud provider's documentation
43
+ for more details.
44
+
45
+ ```txt
46
+ TUNNEL_LOGLEVEL=debug
47
+ ```
48
+
49
+ Once you are done debugging, we recommend resetting the log level to something
50
+ less verbose since the `debug` level can generate a lot of logs.
@@ -0,0 +1,110 @@
1
+ ---
2
+ title: Automate Zuplo API Updates with GitHub Actions
3
+ sidebar_label: GitHub Action Automation
4
+ ---
5
+
6
+ <!-- vale Vale.Spelling["Huma"] = NO -->
7
+
8
+ Because Zuplo is OpenAPI native, you can automate the process of updating your
9
+ Zuplo API when a downstream OpenAPI file changes. For example, if you have an
10
+ API built in Go that uses [Huma](https://github.com/danielgtaylor/huma) you can
11
+ easily generate an OpenAPI file for your API. Then using that generated OpenAPI
12
+ file, you can write a script that updates your Zuplo API based on changes in
13
+ your generated file.
14
+
15
+ This example shows a GitHub Action that updates a Zuplo API from an OpenAPI file
16
+ that's generated in your API.
17
+
18
+ You would run this GitHub Action in the repository that contains your downstream
19
+ API. When you push changes to your API, the action will run, generate the
20
+ OpenAPI file. Then it will clone the Zuplo API repository, update the Zuplo
21
+ OpenAPI file, commit and push the changes to a new branch, and open a pull
22
+ request. It will also generate an
23
+ [Action Summary](https://github.blog/2022-05-09-supercharging-github-actions-with-job-summaries/)
24
+ that links to the Pull Request.
25
+
26
+ ```yaml
27
+ name: Update Zuplo API
28
+ on:
29
+ push:
30
+ branches:
31
+ - main
32
+
33
+ jobs:
34
+ release:
35
+ name: Update Zuplo from OpenAPI
36
+ runs-on: ubuntu-latest
37
+
38
+ env:
39
+ REPO_OWNER: my-org
40
+ # the repository with your Zuplo API
41
+ REPO_NAME: my-zuplo-api
42
+ # the branch you want to update
43
+ REPO_BRANCH: main
44
+
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+ with:
48
+ # Override the default token because the built
49
+ # in token can't trigger other workflows
50
+ # https://github.community/t/github-actions-workflow-not-triggering-with-tag-push/17053/2
51
+ token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
52
+
53
+ - uses: actions/checkout@v4
54
+ with:
55
+ repository: ${{ env.REPO_OWNER }}/${{ env.REPO_NAME }}
56
+ path: temp
57
+ ref: ${{ env.REPO_BRANCH }}
58
+ token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
59
+
60
+ - name: Use Node.js
61
+ uses: actions/setup-node@v4
62
+ with:
63
+ node-version: 20.x
64
+ cache: "npm"
65
+
66
+ # Run your build/generate scripts here to generate the OpenAPI file
67
+ - run: GENERATE OPEN API FILE HERE
68
+
69
+ # Run your script to update the Zuplo API from the OpenAPI file
70
+ # NOTE: This script is something you write based on your requirements
71
+ - name: Update the OpenAPI File
72
+ run: node ./scripts/update-zup-from-openapi.mjs
73
+
74
+ - run: git config --global user.email "bot@example.com"
75
+ - run: git config --global user.name "Updater Bot"
76
+
77
+ - name: Commit Changes
78
+ run: |
79
+ git checkout -b "zup_${{ github.action_ref}}"
80
+ git add -A
81
+ git commit -m "Update OpenAPI File From ${{ github.repository }}"
82
+ git push origin head
83
+
84
+ - name: Open a Pull Request
85
+ uses: actions/github-script@v7
86
+ with:
87
+ github-token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
88
+ script: |
89
+ const result = await github.rest.pulls.create({
90
+ title: "Update OpenAPI File From ${{ github.repository }}",
91
+ owner: "${{ env.REPO_OWNER }}",
92
+ repo: "${{ env.REPO_NAME }}",
93
+ head: "zup_${{ github.action_ref}}",
94
+ base: "${{ env.REPO_BRANCH }}",
95
+ body: [
96
+ 'This PR is auto-generated by a GitHub Action.',
97
+ 'Add more information here.'
98
+ ].join('\n')
99
+ });
100
+
101
+ // Update the Summary
102
+ // You can do a lot more with this, see the core toolkit documentation
103
+ // SEE: https://github.com/actions/toolkit/tree/main/packages/core#populating-job-summary
104
+ await core.summary.addRaw(`GitHub Pull Request Opened. [Pull Request](${result.data.html_url})`, true)
105
+ ```
106
+
107
+ This script is a starting point. You will need to modify it to fit your needs.
108
+ You might want to add more checks, tests, or other steps to ensure the update is
109
+ correct. You can also add more information to the pull request body to help your
110
+ team understand the changes.
@@ -0,0 +1,79 @@
1
+ ---
2
+ title: Using the OpenAPI Extension Data in Code
3
+ sidebar_label: "OpenAPI Extension Data"
4
+ description:
5
+ Learn how to add custom vendor-specific extensions to OpenAPI files and access
6
+ that data in your Zuplo API Gateway code.
7
+ tags:
8
+ - openapi
9
+ - custom-code
10
+ ---
11
+
12
+ The OpenAPI specification allows for the use of vendor-specific extensions to
13
+ add custom configuration to the API definition. An example of this is the
14
+ `x-internal` extension, which can be used to mark an API as internal and not
15
+ intended for public use.
16
+
17
+ This same type of extensibility can be used to add custom data to the OpenAPI
18
+ file which can then be used inside of your Zuplo API Gateway. This data can be
19
+ used to configure the behavior of the API Gateway, such as setting up rate
20
+ limiting, authentication, or other custom behavior.
21
+
22
+ In this article, we will show you how to use the OpenAPI extension data in your
23
+ code.
24
+
25
+ ## Custom Data in the OpenAPI File
26
+
27
+ To add custom data to your OpenAPI file, you can use the `x-` prefix followed by
28
+ the name of the extension. Add this extension to the operation (for example the
29
+ `get`, `post`, etc. section). For example, to add a custom field called
30
+ `my-custom-config` to the OpenAPI file, you would use the following syntax:
31
+
32
+ ```json title="config/routes.oas.json"
33
+ {
34
+ "paths": {
35
+ "/hello": {
36
+ "x-zuplo-path": {
37
+ "pathMode": "open-api"
38
+ },
39
+
40
+ "get": {
41
+ "summary": "Hello World",
42
+ "x-my-custom-config": 10,
43
+ "x-zuplo-route": {
44
+ "corsPolicy": "none",
45
+ "handler": {
46
+ "export": "default",
47
+ "module": "$import(./modules/route-data)",
48
+ "options": {}
49
+ },
50
+ "policies": {
51
+ "inbound": []
52
+ }
53
+ },
54
+ "operationId": "8914135b-d7b5-49fc-9e41-a8256a0dcf93"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ ```
60
+
61
+ ## Using the Custom Data in Code
62
+
63
+ To use the custom data in your code, you can access it through the
64
+ `ZuploContext` object via the `route.raw` method. The `route.raw` method returns
65
+ an object that contains all of the values in the operation.
66
+
67
+ ```ts title="modules/route-data.ts"
68
+ import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
69
+
70
+ export default async function (request: ZuploRequest, context: ZuploContext) {
71
+ const routeData = context.route.raw();
72
+ const myCustomConfig = routeData["x-my-custom-config"];
73
+
74
+ // Logs "Customer config, 10"
75
+ context.log.debug("Custom config", myCustomConfig);
76
+
77
+ return "Hello";
78
+ }
79
+ ```
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: Multifactor Authentication
3
+ sidebar_label: Multifactor Auth
4
+ ---
5
+
6
+ Zuplo supports multifactor authentication (MFA) to help keep your account
7
+ secure. MFA adds an extra layer of security by requiring a second form of
8
+ verification in addition to your password. This can be done using an
9
+ authenticator app or security keys.
10
+
11
+ ## Enabling Multifactor Authentication
12
+
13
+ To enable multifactor authentication for your account, follow these steps:
14
+
15
+ <Stepper>
16
+
17
+ 1. Go to your user profile by clicking on your avatar in the top right corner of
18
+ the Zuplo Portal and selecting **Profile**.
19
+ 1. Find the **Multifactor Authentication** section and click **Enroll** on the
20
+ type of multifactor authentication you want to use.
21
+ 1. Follow the instructions to set up your chosen method of multifactor
22
+ authentication.
23
+ 1. The next time you log in, you will be prompted to enter your second form of
24
+ verification in addition.
25
+
26
+ </Stepper>
27
+
28
+ ## Disabling Multifactor Authentication
29
+
30
+ To disable multifactor authentication for your account, simply navigate to the
31
+ **Multifactor Authentication** section of your user profile and click
32
+ **Disable** next to the multifactor authentication method you want to remove.
33
+
34
+ ## Enforcing Multifactor Authentication for Tenant Members
35
+
36
+ If you have MFA enabled and you are an admin of a tenant account, you can
37
+ enforce all members of that account to use multifactor authentication. This adds
38
+ an additional layer of security for your entire organization.
39
+
40
+ ### Enabling MFA Enforcement
41
+
42
+ To enforce multifactor authentication for all tenant members:
43
+
44
+ <Stepper>
45
+
46
+ 1. Navigate to **Settings** → **Members** in the Zuplo Portal.
47
+ 1. Find the **Multi-Factor Authentication** section.
48
+ 1. Toggle the enforcement setting to **On**.
49
+
50
+ </Stepper>
51
+
52
+ ### What Happens When MFA is Enforced
53
+
54
+ When MFA enforcement is enabled:
55
+
56
+ - All existing tenant members who don't have MFA set up will be redirected to
57
+ the MFA enrollment page when they next log in
58
+ - New members joining the tenant will be required to set up MFA before they can
59
+ access the portal
60
+ - Members can't bypass or skip the MFA setup process
61
+
62
+ Members will need to complete the MFA enrollment process using either an
63
+ authenticator app or security keys before they can continue using the Zuplo
64
+ Portal.
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: User Profile
3
+ sidebar_label: Profile
4
+ ---
5
+
6
+ Your user profile is set automatically by your identity provider when you sign
7
+ in to your Zuplo account. To set your profile picture, name, and email address,
8
+ you must update your profile in your identity provider. Zuplo doesn't control
9
+ this information, and it's not stored in Zuplo.
10
+
11
+ If you are authenticating with a username and password, you won't have a profile
12
+ picture or name. Currently, Zuplo doesn't support setting a profile picture or
13
+ name for accounts that authenticate with a username and password.
@@ -0,0 +1,89 @@
1
+ ---
2
+ title: Versioning on Zuplo
3
+ sidebar_label: "API Versioning"
4
+ description: >-
5
+ Learn how to version your APIs using URL-based versioning with separate
6
+ OpenAPI files and custom policies on Zuplo.
7
+ tags:
8
+ - openapi
9
+ - custom-code
10
+ ---
11
+
12
+ This guide explains how to approach versioning APIs on Zuplo.
13
+
14
+ The recommended versioning approach uses URL-based versioning. Read more at
15
+ [How to version an API](https://zuplo.com/blog/2022/05/17/how-to-version-an-api).
16
+
17
+ ## Separate OpenAPI files
18
+
19
+ A best practice is to have separate OpenAPI files for different major versions
20
+ of an API. A single Zuplo project can have as many OpenAPI routing files as
21
+ needed. The default `routes.oas.json` file can be renamed, as shown here:
22
+
23
+ ![Multiple OpenAPI files](../../public/media/versioning-on-zuplo/multiple-openapi-files.png)
24
+
25
+ Note you can create a new OpenAPI file by clicking the '+' icon shown.
26
+
27
+ Each routing file would now have its own routes, each prefixed by `/v1` and
28
+ `/v2`.
29
+
30
+ Also update the `info` properties in the OpenAPI file to include the version.
31
+ This helps users disambiguate versions in the developer portal:
32
+
33
+ ```json
34
+ {
35
+ "openapi": "3.1.0",
36
+ "info": {
37
+ "title": "My Api (v2)",
38
+ "version": "2.0.0"
39
+ }
40
+ }
41
+ ```
42
+
43
+ When Zuplo generates the developer portal, each OpenAPI version appears in its
44
+ own document, allowing users to select the version. This is presented as a
45
+ dropdown:
46
+
47
+ ![Multiple APIs in docs](../../public/media/versioning-on-zuplo/multiple-apis-in-docs.png)
48
+
49
+ ## Using Zuplo as a versioning layer
50
+
51
+ Because Zuplo is a programmable gateway it's a powerful tool in your versioning
52
+ arsenal. For example, let's imagine you want to make a breaking change between
53
+ v1 and v2 of your `todos` API where the `todoItems` in v2 won't include a piece
54
+ of information in the previous version.
55
+
56
+ This can be entirely achieved in Zuplo by adding a v2 OpenAPI file and adding an
57
+ identical route from v1 but changing the path:
58
+
59
+ `/v1/todos` ==> `/v2/todos`
60
+
61
+ The only other change you'd need to make to this new version is to add an
62
+ outbound custom policy that removes the property, e.g.
63
+
64
+ ```ts
65
+ export default async function policy(
66
+ response: Response,
67
+ request: ZuploRequest,
68
+ context: ZuploContext,
69
+ options: never,
70
+ policyName: string,
71
+ ) {
72
+ if (response.status === 200) {
73
+ const json = await response.json();
74
+ json.forEach((item) => {
75
+ delete item.userId;
76
+ });
77
+
78
+ return new Response(JSON.stringify(json), response);
79
+ }
80
+
81
+ return response;
82
+ }
83
+ ```
84
+
85
+ And QED - your Zuplo gateway is being used to update your old API and make it
86
+ shiny and new.
87
+
88
+ There's a video accompaniment for this document on YouTube here:
89
+ [Versioning an API on Zuplo](https://youtu.be/U0_sfNf5x18)