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,139 @@
1
+ ---
2
+ title: Custom Logging Policy
3
+ ---
4
+
5
+ Some of our customers want to build custom logging for their gateway runtime.
6
+ This is an example of just how powerful the programmability of Zuplo is.
7
+
8
+ In this custom inbound policy we show how you could post to a service (in this
9
+ case we just use RequestBin.com).
10
+
11
+ ```ts
12
+ import { ZuploContext, ZuploRequest, ResponseSentEvent } from "@zuplo/runtime";
13
+
14
+ type CustomLoggingOptions = {
15
+ endpoint: string;
16
+ };
17
+
18
+ const serializableHeaders = (headers: Headers) => {
19
+ const output = {};
20
+ headers.forEach((value, key) => {
21
+ output[key] = value;
22
+ });
23
+ return output;
24
+ };
25
+
26
+ const serializableRequest = async (request: ZuploRequest) => {
27
+ // if we're going to read the body, we need to clone
28
+ // the request first - otherwise the response pipeline will
29
+ // encounter a drained stream
30
+ const clone = request.clone();
31
+ const body = await clone.text(); // read as text
32
+ const data = {
33
+ method: request.method,
34
+ url: request.url,
35
+ headers: serializableHeaders(request.headers),
36
+ body,
37
+ };
38
+
39
+ return data;
40
+ };
41
+
42
+ const serializableResponse = async (response: Response) => {
43
+ // if we're going to read the body, we need to clone
44
+ // the response first - otherwise the response pipeline will
45
+ // encounter a drained stream
46
+ const clone = response.clone();
47
+ const body = await clone.text(); // read as text
48
+
49
+ const data = {
50
+ status: response.status,
51
+ headers: serializableHeaders(response.headers),
52
+ body,
53
+ };
54
+
55
+ return data;
56
+ };
57
+
58
+ const logReqRes = async (
59
+ endpoint: string,
60
+ req: any,
61
+ response: Response,
62
+ context: ZuploContext,
63
+ start: number,
64
+ ) => {
65
+ // we don't want any errors thrown that might impact
66
+ // our consumers experience so catch everything and
67
+ // use context.log
68
+ try {
69
+ const data = {
70
+ req,
71
+ res: await serializableResponse(response),
72
+ timeMs: Date.now() - start,
73
+ };
74
+
75
+ return fetch(endpoint, {
76
+ method: "POST",
77
+ body: JSON.stringify(data),
78
+ });
79
+ } catch (err) {
80
+ context.log.error(err, "error in custom-logging policy");
81
+ }
82
+ };
83
+
84
+ export default async function (
85
+ request: ZuploRequest,
86
+ context: ZuploContext,
87
+ options: CustomLoggingOptions,
88
+ policyName: string,
89
+ ) {
90
+ // We need to read the body of the request before it's used by the handler
91
+ // so let's serialize the request now
92
+ const req = await serializableRequest(request);
93
+ const start = Date.now();
94
+
95
+ // The 'responseSent' event will fire at the very last stage in the response
96
+ // pipeline, when no more mutations can be made - so you can be confident
97
+ // this was the response sent by Zuplo
98
+ context.addEventListener("responseSent", async (event: ResponseSentEvent) => {
99
+ const promise = logReqRes(
100
+ options.endpoint,
101
+ req,
102
+ event.response,
103
+ context,
104
+ start,
105
+ );
106
+
107
+ // We need to ask the runtime now to shut down until this is complete,
108
+ // as this will run asynchronously to our response
109
+ context.waitUntil(promise);
110
+ });
111
+ return request;
112
+ }
113
+ ```
114
+
115
+ We would then configure the policy as follows
116
+
117
+ ```json
118
+ {
119
+ "name": "custom-logging-policy",
120
+ "policyType": "custom-code-inbound",
121
+ "handler": {
122
+ "export": "default",
123
+ "module": "$import(./modules/custom-logging)",
124
+ "options": {
125
+ "endpoint": "https://YOUR_MOCKIN_URL_HERE"
126
+ }
127
+ }
128
+ }
129
+ ```
130
+
131
+ And don't forget to register your new custom policy on your routes! This should
132
+ be the first inbound policy to see the incoming request, unmodified by other
133
+ policies (or blocked by auth, rate-limiting, etc.).
134
+
135
+ You'll then see live entries with details of the requests and responses for your
136
+ test calls/
137
+
138
+ You can create a free Mockbin at [mockbin.io](https://mockbin.io) - to get
139
+ started quickly look for the link to create a new bin (not OpenAPI bin).
@@ -0,0 +1,138 @@
1
+ ---
2
+ title: Managed DDoS Protection
3
+ sidebar_label: DDoS Protection
4
+ ---
5
+
6
+ <!-- vale Vale.Spelling["slowloris","Unmetered"] = NO -->
7
+
8
+ Zuplo provides automatic DDoS (Distributed Denial of Service) protection for all
9
+ APIs deployed on the platform. This service detects and mitigates attacks in
10
+ real-time, ensuring your APIs remain available even under attack.
11
+
12
+ :::note
13
+
14
+ Zuplo Managed DDoS is only available for customers using Zuplo's managed edge
15
+ deployment model. Customers using managed dedicated deployments should refer to
16
+ the
17
+ [Managed Dedicated WAF Options](./zuplo-waf.mdx#managed-dedicated-waf-options)
18
+ document.
19
+
20
+ :::
21
+
22
+ ## What's DDoS?
23
+
24
+ DDoS attacks attempt to overwhelm your API by flooding it with malicious traffic
25
+ from multiple sources. Zuplo's protection covers both:
26
+
27
+ - **Network Layer Attacks (Layer 3/4)**: UDP floods, SYN floods, and other
28
+ network-level attacks
29
+ - **Application Layer Attacks (Layer 7)**: HTTP floods, slowloris, and other
30
+ application-level attacks
31
+
32
+ ## Key Benefits
33
+
34
+ - **Always-On**: Protection is automatic from deployment—no configuration needed
35
+ - **Multi-Layer Defense**: Covers both network and application layer attacks
36
+ - **Unmetered Protection**: No bandwidth limits during attacks
37
+ - **Adaptive**: Continuously updated to handle new attack patterns
38
+ - **Minimal False Positives**: Smart detection reduces blocking of legitimate
39
+ traffic
40
+ - **Avoid Unexpected Costs**: Zuplo never charges for requests that are blocked
41
+ by DDoS protection protecting you from unexpected overage fees.
42
+
43
+ ## Protection Levels
44
+
45
+ Zuplo offers different sensitivity levels for DDoS protection, allowing you to
46
+ balance security with accessibility based on your specific needs.
47
+
48
+ ### Working Copy Environments
49
+
50
+ All Working Copy environments (`.zuplo.dev` domains) are automatically protected
51
+ with **Medium** sensitivity. This provides robust protection while minimizing
52
+ the risk of blocking legitimate traffic during development and testing.
53
+
54
+ ### Preview and Production Environments
55
+
56
+ Preview and production deployments benefit from advanced DDoS protection
57
+ capabilities:
58
+
59
+ - **Default Setting**: Medium sensitivity (balanced protection)
60
+ - **Enterprise Customization**: Optional enterprise add-on allowing
61
+ configuration of protection levels
62
+
63
+ ### Sensitivity Levels Explained
64
+
65
+ Enterprise customers with the DDoS customization add-on can choose from four
66
+ sensitivity levels:
67
+
68
+ #### High Sensitivity
69
+
70
+ - Most aggressive protection with the lowest threshold for triggering mitigation
71
+ - Ideal for APIs that face frequent attacks or handle highly sensitive data
72
+ - May occasionally block legitimate traffic during unusual usage patterns
73
+
74
+ #### Medium Sensitivity (Default)
75
+
76
+ - Balanced approach providing strong protection with moderate thresholds
77
+ - Recommended for most production APIs
78
+ - Optimizes for both security and accessibility
79
+
80
+ #### Low Sensitivity
81
+
82
+ - Higher threshold for triggering mitigation
83
+ - Suitable for APIs with highly variable traffic patterns
84
+ - Reduces false positives for legitimate traffic spikes
85
+
86
+ #### Essentially Off
87
+
88
+ - Minimal protection with the highest threshold
89
+ - Protection still activates for extremely large attacks to maintain network
90
+ stability
91
+ - Recommended only when you have alternative DDoS protection mechanisms.
92
+
93
+ ## How Protection Works
94
+
95
+ ### Detection
96
+
97
+ Zuplo's DDoS protection uses sophisticated algorithms to analyze traffic
98
+ patterns in real-time. The system examines multiple factors including:
99
+
100
+ - Request rates and patterns
101
+ - Source IP reputation
102
+ - Geographic distribution
103
+ - Protocol compliance
104
+ - Behavioral anomalies
105
+
106
+ ### Mitigation
107
+
108
+ When an attack is detected, the system automatically applies appropriate
109
+ mitigation techniques:
110
+
111
+ 1. **Traffic Filtering**: Malicious traffic is filtered at the edge before
112
+ reaching your API
113
+ 2. **Rate Limiting**: Excessive requests from suspicious sources are throttled
114
+ 3. **Connection Management**: Advanced TCP protection handles sophisticated
115
+ connection-based attacks
116
+
117
+ ### Continuous Improvement
118
+
119
+ The protection system continuously evolves:
120
+
121
+ - Managed rulesets are regularly updated
122
+ - New attack patterns are incorporated into detection algorithms
123
+ - Protection mechanisms adapt based on the global threat landscape
124
+
125
+ ## Enterprise Customization
126
+
127
+ Enterprise customers can enhance their DDoS protection with:
128
+
129
+ - **Custom Sensitivity Levels**: Adjust protection thresholds per environment
130
+ - **Advanced Analytics**: Detailed attack reports and traffic analysis
131
+ - **Custom Rule Configuration**: Tailor protection to specific traffic patterns
132
+
133
+ :::tip
134
+
135
+ Contact your Zuplo account team to learn more about Enterprise DDoS
136
+ customization options.
137
+
138
+ :::
@@ -0,0 +1,49 @@
1
+ ---
2
+ title: Development Options
3
+ ---
4
+
5
+ Zuplo offers both a local and web-based development experiences. For most
6
+ customers, we recommend the local developer experience as this is the most
7
+ flexible and fastest way to work with your Zuplo API and Developer Portal.
8
+
9
+ ## Local Development
10
+
11
+ The [local experience](./local-development.mdx) allows users to run both the API
12
+ Gateway and Dev Portal locally. It also includes a local version of the Route
13
+ Designer that's integrated into the Zuplo Portal (portal.zuplo.com). Local
14
+ development allows customers to use the IDE of their choice and run everything
15
+ locally.
16
+
17
+ Local development is available for all customers regardless of their deployment
18
+ model. It's designed to be fast and lightweight, allowing developers to quickly
19
+ iterate on their APIs without needing to deploy to the cloud.
20
+
21
+ Local development is the fastest way to develop and test your APIs as you can
22
+ test changes immediately without waiting for a deployment. Changes to your API
23
+ are automatically loaded into the local API Gateway and Dev Portal.
24
+
25
+ ## Web-Based Development Experience
26
+
27
+ :::note{title="Managed Dedicated"}
28
+
29
+ Working copy environments aren't available for customers using the
30
+ [managed dedicated deployment model](../dedicated/overview.mdx).
31
+
32
+ :::
33
+
34
+ The web-based development experience on (portal.zuplo.com) allows customers on
35
+ our managed-edge deployment model to make edits to their project right from
36
+ within the browser. This experience is designed to be fast and light-weight. The
37
+ web-based experience provides each developer their own
38
+ [developer environment](./environments.mdx) (called **working copy**)
39
+ environment.
40
+
41
+ The working copy environment is a special environment that's unique to each
42
+ developer. It's optimized for development which means it has slightly different
43
+ configurations than the standard environments. For example, it doesn't cache
44
+ resources as aggressively so changes are reflected more quickly. You can tell if
45
+ an environment is a working copy as it will be deployed to the `zuplo.dev`
46
+ domain. Working copy environments can't have custom domains.
47
+
48
+ The working copy environment isn't intended for production use and shouldn't be
49
+ used as such. It's designed for development and testing purposes only.
@@ -0,0 +1,134 @@
1
+ ---
2
+ title: Configuring Environment Variables
3
+ sidebar_label: Environment Variables
4
+ ---
5
+
6
+ Environment variables are key-value pairs that are stored outside of source
7
+ code. The values of environment variables can be applied to particular
8
+ environments in order to change behavior or configuration.
9
+
10
+ Environment variables can be read into source code and many configuration files
11
+ in your project. Variables are only applied to environments on new deployments.
12
+ If you change an environment variable, you must redeploy the environment in
13
+ order for the updated value to take effect.
14
+
15
+ Environment variables can be configuration or secrets. While all values are
16
+ stored encrypted at rest, only non-secret values can be read. Secrets are
17
+ write-only, meaning the value can't be retrieved once it's set.
18
+
19
+ :::tip
20
+
21
+ API Reference For detailed information about accessing environment variables in
22
+ code, see the
23
+ [Environment Variables API Reference](../programmable-api/environment.mdx).
24
+
25
+ :::
26
+
27
+ ## Environment Variable Editor
28
+
29
+ To set environment variables in your project, click **Settings** and then select
30
+ **Environment Variables**.
31
+
32
+ To create a new variable, click **Add new variable**.
33
+
34
+ ![Adding a new environment variable](../../public/media/environment-variables/bec84962-0139-4371-b3fd-a30e70860169.png)
35
+
36
+ Enter the name and value of your environment variable and select if you would
37
+ like the value to be a secret or a regular value.
38
+
39
+ ## Environments
40
+
41
+ Environment variables can be applied to one or many different environments. You
42
+ can select one or more environments in which to apply the variable.
43
+
44
+ | Environment | Description |
45
+ | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
46
+ | Prod | The environment that's deployed from your **default** branch in source control. This is usually called `main`. |
47
+ | Preview | Any environment that's deployed from source control that's **not the default** branch. (for example `staging` or `preview`). This also includes any branch that's created from a pull request. |
48
+ | Development (Working Copy) | Any environment that's deployed while developing with the portal. Each developer gets their own development environment. These environments are always deployed to `zuplo.dev` |
49
+
50
+ For the **Preview** environment option, a specific named environment can be
51
+ selected. For example, if you want a variable set only for the environment
52
+ deployed from the `staging` branch in source control.
53
+
54
+ For the **Working Copy** option, developers can set a personal override. This
55
+ value **ONLY** applies to the developer who set the value.
56
+
57
+ :::info
58
+
59
+ A single environment variable name can't overlap environments. For example, if
60
+ you set a variable named `MY_VAR` and select all the environments a second
61
+ variable named `MY_VAR` can't be set on say the **Production** environments.
62
+
63
+ :::
64
+
65
+ ## Reserved Environment Variables
66
+
67
+ Environment variables can't start with `ZUPLO` or `__ZUPLO`.
68
+
69
+ ## Using Environment Variables
70
+
71
+ Environment variables can be used in several places within your Zuplo project:
72
+
73
+ ### In Code
74
+
75
+ Variables are accessed through the `environment` object from `@zuplo/runtime`.
76
+ See the
77
+ [Environment Variables API Reference](../programmable-api/environment.mdx) for
78
+ detailed usage examples and patterns.
79
+
80
+ ### In Configuration Files
81
+
82
+ Inside some configuration files, environment variables can be referenced with
83
+ the pattern `$env(MY_VAR)`.
84
+
85
+ For example, in the `policies.json` file, an environment variable could be set
86
+ on a policy option.
87
+
88
+ ```json
89
+ {
90
+ "name": "my-custom-code-inbound-policy",
91
+ "policyType": "custom-code-inbound",
92
+ "handler": {
93
+ "export": "default",
94
+ "module": "$import(./modules/YOUR_MODULE)",
95
+ "options": {
96
+ "config1": "$env(MY_CONFIG_VAR)",
97
+ "config2": true
98
+ }
99
+ }
100
+ }
101
+ ```
102
+
103
+ ### Rewrite & Forwarding Handler
104
+
105
+ When referencing environment variables inside of the URL Rewrite handler and the
106
+ URL Forward handler, variables are substituted using JavaScript style string
107
+ interpolation.
108
+
109
+ ```txt
110
+ https://${env.API_URL}/path/to/call
111
+ ```
112
+
113
+ ## System Environment Variables
114
+
115
+ The following variables are automatically set by the system and are available to
116
+ use in your code:
117
+
118
+ - `ZUPLO_ENVIRONMENT_TYPE` - The current environment type the API is running.
119
+ Values are `edge`, `local`.
120
+ - `ZUPLO_ENVIRONMENT_STAGE` - The stage of the environment. Values are
121
+ `production`, `preview`, `working-copy`, and `local`.
122
+ - `ZUPLO_ENVIRONMENT_NAME` - The name of the environment. This is a globally
123
+ unique name for the environment. This is the same name that's used in the URL
124
+ of the environment. For example, `my-project-main-1235.zuplo.app`. Setting a
125
+ custom domain on the environment won't change this value.
126
+ - `ZUPLO_ACCOUNT_NAME` - The name of the Zuplo account where the environment is
127
+ deployed.
128
+ - `ZUPLO_PROJECT_NAME` - The name of the project where the environment is
129
+ deployed.
130
+ - `ZUPLO_BUILD_ID` - The build ID of the environment. This is a unique ID for
131
+ each build of the environment. This is a UUID.
132
+ - `ZUPLO_COMPATIBILITY_DATE` - The
133
+ [compatibility date](../programmable-api/compatibility-dates.mdx) of runtime
134
+ environment.
@@ -0,0 +1,143 @@
1
+ ---
2
+ title: Environments
3
+ ---
4
+
5
+ One of the things that makes Zuplo different from most API gateways, and API
6
+ management platforms is that you can rapidly deploy many environments. Some of
7
+ our customers have hundreds of deployed environments! This facilitates
8
+ collaboration, where teams can collaborate on new features with a dedicated
9
+ environment, deployed for no additional cost in under 20 seconds.
10
+
11
+ :::tip
12
+
13
+ For a comprehensive guide to how branches map to environments, see
14
+ [Branch-Based Deployments](./branch-based-deployments.mdx).
15
+
16
+ :::
17
+
18
+ ## Environment Types
19
+
20
+ There are three types of environments on Zuplo - Production, Preview, and
21
+ Development (called Working Copy). Each environment has a unique URL and every
22
+ environment is deployed to 300+ edge locations around the world.
23
+
24
+ ### Development (Working Copy)
25
+
26
+ This is your development environment. You can think of this as your personal
27
+ cloud laptop. To deploy to this environment you just need to save a change in
28
+ portal.zuplo.com, that will automatically trigger a build and deploy of your
29
+ working-copy. A working-copy environment ends in a `.dev` URL. While these
30
+ environments are deployed to the edge in 300+ data centers around the world,
31
+ they're optimized for development purposes. There are some minor differences
32
+ with production and preview environments with caching and other features.
33
+
34
+ ### Preview
35
+
36
+ These are environments that are deployed using the
37
+ [GitHub integration](/docs/articles/source-control.mdx) or building a
38
+ [custom CI/CD pipeline](/docs/articles/custom-ci-cd.mdx). Preview environments
39
+ are deployed from any branch that isn't set as your default (for example
40
+ production branch). Preview environments are deployed to the edge and have the
41
+ same behavior as production environments, but are typically used for staging,
42
+ testing pull requests, etc.
43
+
44
+ ### Production
45
+
46
+ These are environments that are deployed using the
47
+ [GitHub integration](/docs/articles/source-control.mdx) or building a
48
+ [custom CI/CD pipeline](/docs/articles/custom-ci-cd.mdx). Each project has only
49
+ one Production environment and is deployed from the git branch that's set as
50
+ your production branch in your source control settings.
51
+
52
+ #### Changing the Production Environment
53
+
54
+ The Production environment is determined by your repository's **default branch**
55
+ setting (configured in your Git provider, not Zuplo). To change which branch
56
+ deploys to Production:
57
+
58
+ 1. Go to your Git repository settings:
59
+ - **GitHub**: Settings > General > Default branch
60
+ - **GitLab**: Settings > Repository > Branch defaults
61
+ - **Bitbucket**: Repository settings > Branching model
62
+ - **Azure DevOps**: Project settings > Repositories > Default branch
63
+ 2. Change the default branch to your desired branch
64
+ 3. Zuplo automatically treats the new default branch as Production
65
+
66
+ :::caution
67
+
68
+ Changing the default branch affects which environment receives Production
69
+ environment variables and uses the Production API key bucket. Plan this change
70
+ carefully.
71
+
72
+ :::
73
+
74
+ ### Preview vs Production Environments (or multiple Production Environments)
75
+
76
+ :::note
77
+
78
+ There is **no technical difference** between a Production environment and a
79
+ Preview environment. Both deploy to the same infrastructure, run in the same
80
+ 300+ edge locations, and have identical performance characteristics. The
81
+ "production" label simply means "deployed from the default branch." It controls
82
+ which set of [environment variables](/docs/articles/environment-variables.mdx)
83
+ and [API key buckets](/docs/articles/api-key-buckets.mdx) apply by default, but
84
+ the underlying deployment is exactly the same.
85
+
86
+ :::
87
+
88
+ Some customers choose to use a specific (or multiple) Preview environments as
89
+ "production" deployments of their API. For example, you might deploy your US
90
+ traffic from `main` (Production) and your EU traffic from an `eu-production`
91
+ branch (Preview). This works because the environments are technically identical.
92
+ Environment variables and API key buckets can be overridden for specific Preview
93
+ environments to support this pattern.
94
+
95
+ For a comprehensive overview of how source control, branches, and environments
96
+ relate to each other, see
97
+ [Source Control and Deployment](/docs/concepts/source-control-and-deployment.mdx).
98
+
99
+ ## Navigating Environments
100
+
101
+ On the bottom toolbar of the Zuplo portal you will see a selector for the
102
+ current environment. You can switch between environments by clicking on the name
103
+ of the current environment and then selecting another environment.
104
+
105
+ ![Environments](../../public/media/environments/image.png)
106
+
107
+ Your development (working copy) environment will be listed at the top in a
108
+ separate section. Your git deployed environments will be listed next with the
109
+ production environment on top.
110
+
111
+ For users using [source control integration](/docs/articles/source-control.mdx)
112
+ the name of the deployment matches the branch name (yes - creating a new
113
+ environment is literally as easy as creating a new branch).
114
+
115
+ You can't edit the code of an production or preview environment in
116
+ portal.zuplo.com but you can switch into those environments to perform a number
117
+ of functions, such as:
118
+
119
+ - edit API consumers for this environment
120
+ - view analytics for this environment
121
+ - view Live Logs for this environment
122
+
123
+ ## Different Backends per Environment
124
+
125
+ It's common to want a different backend for your production, staging and preview
126
+ environments. This can be easily achieved by using
127
+ [environment variables](./environment-variables.mdx) to specify the origin of
128
+ the backend and then using that in your
129
+ [URL Rewrite Handlers](../handlers/url-rewrite.mdx).
130
+
131
+ For example,
132
+
133
+ ```json
134
+ ${env.BASE_PATH}${pathname}
135
+ ```
136
+
137
+ A url rewrite like this will combine the `BASE_PATH` environment variable, say
138
+ `https://example.com` with the incoming path, for example `/foo/bar` to create a
139
+ re-written URL:
140
+
141
+ ```json
142
+ https://example.com/foo/bar
143
+ ```
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: Using Zuplo as a Fastly Host
3
+ sidebar_label: Fastly Setup
4
+ ---
5
+
6
+ This document outlines how to use Zuplo as a host for Fastly. While this isn't a
7
+ necessary setup for most people as Zuplo already runs at the edge and can be
8
+ used for CDN like caching. However, there are some scenarios where you may want
9
+ to put Zuplo behind Fastly. For example, if you are using Fastly's
10
+ [WAF or DDoS protection](./waf-ddos-fastly.mdx) and want to ensure that all
11
+ traffic goes through Fastly before hitting your Zuplo API Gateway.
12
+
13
+ ## Configuring Zuplo as a Fastly Host
14
+
15
+ The following settings will allow you to run Zuplo as a host behind Fastly.
16
+
17
+ ### Zuplo Configuration
18
+
19
+ It's recommended that you use a custom domain for your Zuplo API Gateway. This
20
+ will allow you to more configure your Fastly host as well as ensure that your
21
+ domain is stable regardless of your Zuplo configuration.
22
+
23
+ ### Fastly Configuration
24
+
25
+ 1. Create a new Fastly CDN service or use an existing one.
26
+ 2. Create a new Origin and name it whatever you like.
27
+ 3. Set the **Address** to your Zuplo API Gateway domain. For example,
28
+ `api.example.com` if using a custom domain, or
29
+ `my-project-main-021839d.zuplo.app` without a custom domain.
30
+ 4. Enable TLS and keep the port as `443`.
31
+ 5. Select Yes on Verify the Certificate.
32
+ 6. If using a custom domain, set the _Certificate Hostname_ to your custom
33
+ domain. If using a `zuplo.app` domain, set the set the _Certificate Hostname_
34
+ to `zuplo.app`.
35
+ 7. Set the **SNI hostname** to your custom domain or full `zuplo.app` domain
36
+ (for example, `my-project-main-021839d.zuplo.app`)
37
+ 8. Set the **Override Host** to your custom domain or full `zuplo.app` domain
38
+ (for example, `my-project-main-021839d.zuplo.app`)
39
+
40
+ Additional settings like mTLS are also supported. Please refer to the Fastly
41
+ documentation for more information.