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,304 @@
1
+ ---
2
+ title: Performance Testing Your API Gateway
3
+ sidebar_label: Performance Testing
4
+ ---
5
+
6
+ <!-- vale Vale.Spelling["Blazemeter","JMeter","wrk"] = NO -->
7
+
8
+ Performance testing is critical for understanding the real-world performance of
9
+ your API when using an API gateway like Zuplo. This guide helps you create fair
10
+ and accurate performance tests that properly measure latency and throughput.
11
+
12
+ ## Creating Fair Comparison Tests
13
+
14
+ When evaluating API gateway performance, it's essential to ensure your tests
15
+ accurately reflect real-world conditions and provide a fair comparison between
16
+ direct backend calls and calls through your gateway.
17
+
18
+ ### Test Location Matters
19
+
20
+ One of the most common mistakes in performance testing is running tests from
21
+ within the same cloud provider network as your backend. This creates
22
+ artificially low latency results that don't reflect real-world usage.
23
+
24
+ :::warning
25
+
26
+ Never run performance tests from the same cloud provider as your backend. If
27
+ your backend runs on AWS, don't test from AWS. The same applies to GCP, Azure,
28
+ or any other provider. If you are using a third-party tool such as K8 or
29
+ Blazemeter, be sure to check where their test nodes are located.
30
+
31
+ :::
32
+
33
+ **Why this matters:** When traffic stays within a cloud provider's network,
34
+ latency is dramatically reduced and more consistent, especially within the same
35
+ geographical region. Intra-cloud network latency benefits from:
36
+
37
+ - Dedicated high-speed interconnects between data centers
38
+ - Optimized routing within the provider's backbone
39
+ - Minimal network hops
40
+ - Consistent, predictable performance with low jitter
41
+
42
+ You can see real-world latency differences using tools like:
43
+
44
+ - [AWS CloudPing](https://www.cloudping.co/) - Shows inter-region latency for
45
+ AWS
46
+ - [Google Cloud Network Intelligence Center](https://cloud.google.com/network-intelligence-center/docs/performance-dashboard/how-to/view-google-cloud-latency) -
47
+ Provides detailed GCP network performance metrics
48
+
49
+ The difference is stark: intra-cloud latency within the same region (for
50
+ example, within North America) can be 50-70% lower than traffic traversing the
51
+ public internet or between different cloud providers. Additionally, internet
52
+ traffic experiences significantly higher jitter (variance), making response
53
+ times less predictable.
54
+
55
+ This artificial performance boost from testing within the same cloud provider
56
+ can make it appear that an API gateway adds substantially more latency than it
57
+ actually does in real-world scenarios where traffic crosses network boundaries.
58
+
59
+ ### Ensure Test Equality
60
+
61
+ Fair comparisons require testing under identical conditions. Here are the key
62
+ factors to consider:
63
+
64
+ #### Authentication Methods
65
+
66
+ Different authentication methods have different performance characteristics. If
67
+ you're testing:
68
+
69
+ - **Backend with IAM/JWT:** Processing time varies but is typically minimal for
70
+ JWT validation
71
+ - **Zuplo with API Key authentication:** Adds approximately 5-10ms for key
72
+ validation
73
+
74
+ To ensure fair testing, use the same authentication method for both tests, or
75
+ account for the difference in your analysis.
76
+
77
+ #### Request Parameters and Payloads
78
+
79
+ Always use identical:
80
+
81
+ - Request headers
82
+ - Query parameters
83
+ - Request body size and complexity
84
+ - Response size expectations
85
+
86
+ #### Scaling Patterns
87
+
88
+ Test both your backend and gateway-fronted API with the same:
89
+
90
+ - Ramp-up patterns
91
+ - Concurrent connection counts
92
+ - Request rates
93
+ - Test duration
94
+
95
+ ### Account for Additional Layers
96
+
97
+ Your architecture may include additional layers that affect performance:
98
+
99
+ - **CDN (CloudFlare, Fastly, etc.):** Adds 5-15ms for cache misses
100
+ - **WAF (Web Application Firewall):** Adds 10-20ms depending on rule complexity
101
+ - **DDoS Protection:** Usually minimal impact (1-5ms) unless under attack
102
+ - **Load Balancers:** Adds 1-5ms
103
+
104
+ Include these layers in both test scenarios or explicitly account for their
105
+ impact in your analysis.
106
+
107
+ ## Understanding Gateway Latency
108
+
109
+ API gateways necessarily add some latency to process requests. For Zuplo:
110
+
111
+ - **Base latency:** Approximately 20-30ms with no policies
112
+ - **Per policy:** Most policies add 1-5ms each
113
+ - **Complex policies:** Authentication, rate limiting, or custom code can add
114
+ 5-15ms
115
+
116
+ This latency is the trade-off for the benefits an API gateway provides:
117
+
118
+ - Centralized authentication and authorization
119
+ - Rate limiting and quota management
120
+ - Request/response transformation
121
+ - Analytics and monitoring
122
+ - Developer portal and documentation
123
+
124
+ ## Policy Impact on Performance
125
+
126
+ Different policies have varying performance impacts:
127
+
128
+ ### Low Impact (0-3ms)
129
+
130
+ - Header manipulation
131
+ - Simple request validation
132
+ - Basic routing rules
133
+ - Response caching (for cache hits)
134
+
135
+ ### Medium Impact (3-10ms)
136
+
137
+ - API key authentication (Varies depending on cache hits/replication)
138
+ - Rate limiting checks (0ms with asynchronous mode)
139
+ - Request/response logging
140
+ - Simple transformations
141
+
142
+ ### Higher Impact (10-20ms)
143
+
144
+ - Large payload transformations
145
+ - Custom code that makes external calls
146
+
147
+ :::tip
148
+
149
+ For optimal performance, order your policies from least to most expensive, and
150
+ use early-exit conditions where possible. For example, validate API keys before
151
+ performing complex transformations.
152
+
153
+ :::
154
+
155
+ ## Performance Testing Best Practices
156
+
157
+ ### 1. Choose the Right Testing Tool
158
+
159
+ Use professional load testing tools that can:
160
+
161
+ - Generate consistent load patterns
162
+ - Measure percentile latencies (p50, p95, p99)
163
+ - Handle connection pooling properly
164
+ - Report detailed metrics
165
+
166
+ Recommended tools:
167
+
168
+ - [k6](https://k6.io/) - Modern load testing tool with excellent reporting
169
+ - [Apache JMeter](https://jmeter.apache.org/) - Comprehensive but complex
170
+ - [Gatling](https://gatling.io/) - High-performance testing framework
171
+ - [wrk](https://github.com/wg/wrk) - Simple but powerful for basic tests
172
+
173
+ ### 2. Test from Multiple Locations
174
+
175
+ Run tests from various geographic locations to understand global performance:
176
+
177
+ - Use cloud providers different from your backend
178
+ - Test from regions where your users are located
179
+ - Consider using distributed load testing services
180
+
181
+ ### 3. Measure the Right Metrics
182
+
183
+ Focus on metrics that matter:
184
+
185
+ - **Latency percentiles:** p50, p95, p99 (not just averages)
186
+ - **Throughput:** Requests per second at various concurrency levels
187
+ - **Error rates:** Both 4xx and 5xx responses
188
+ - **Time to first byte (TTFB)**
189
+ - **Total request time**
190
+
191
+ ### 4. Test Realistic Scenarios
192
+
193
+ Design tests that reflect actual usage:
194
+
195
+ - Mix of different endpoints
196
+ - Realistic payload sizes
197
+ - Actual authentication flows
198
+ - Expected traffic patterns (steady, burst, ramp-up)
199
+
200
+ ## Interpreting Results
201
+
202
+ When analyzing your performance test results:
203
+
204
+ 1. **Compare percentiles, not averages:** p95 and p99 latencies better represent
205
+ user experience
206
+ 2. **Account for geographic distribution:** Users farther from your
207
+ infrastructure will see higher latency
208
+ 3. **Look for anomalies:** Sudden spikes might indicate rate limiting or
209
+ capacity issues
210
+
211
+ :::note
212
+
213
+ Remember that Zuplo's edge deployment means your API is served from locations
214
+ globally, which can actually reduce latency for geographically distributed users
215
+ compared to a single-region backend.
216
+
217
+ :::
218
+
219
+ ## Optimizing for Intra-Cloud Traffic
220
+
221
+ If your primary use case involves API traffic that stays within a particular
222
+ cloud provider's network, consider Zuplo's
223
+ [Managed Dedicated deployment](/docs/dedicated/overview.mdx) options. With
224
+ Managed Dedicated, Zuplo can be deployed directly to:
225
+
226
+ - Your chosen cloud provider (AWS, GCP, Azure, etc.)
227
+ - Your specific regions
228
+ - Your VPC or private network configurations
229
+
230
+ This deployment model provides:
231
+
232
+ - **Minimal latency:** Your API gateway runs in the same cloud network as your
233
+ backend
234
+ - **Predictable performance:** Consistent sub-10ms latency for intra-region
235
+ traffic
236
+ - **Network isolation:** Traffic never leaves your cloud provider's backbone
237
+ - **Compliance benefits:** Data remains within your controlled infrastructure
238
+
239
+ Managed Dedicated is ideal for organizations with:
240
+
241
+ - High-volume internal API traffic
242
+ - Strict latency requirements for service-to-service communication
243
+ - Regulatory requirements for data locality
244
+ - Existing investments in specific cloud providers
245
+
246
+ :::tip
247
+
248
+ For most use cases, where API traffic comes from multiple providers, networks,
249
+ and geographic locations (mobile apps, web applications, third-party
250
+ integrations), Zuplo's edge-deployed instances typically provide better overall
251
+ performance. Edge deployment ensures your API is served from locations closest
252
+ to your users globally, reducing latency for the majority of real-world traffic
253
+ patterns.
254
+
255
+ :::
256
+
257
+ ## Cold Starts (Managed Edge Deployments Only)
258
+
259
+ :::note
260
+
261
+ This section applies only to Zuplo's managed edge (serverless) deployment. If
262
+ you're running Zuplo in a dedicated environment, cold starts don't apply.
263
+
264
+ :::
265
+
266
+ Zuplo's serverless platform automatically scales to handle any load, from zero
267
+ to billions of requests. However, the first requests after a period of
268
+ inactivity may experience "cold starts."
269
+
270
+ ### Understanding Cold Starts
271
+
272
+ - **Initial latency:** First request may be 100-200ms slower
273
+ - **Node lifecycle:** Once warm, nodes can serve requests for hours or days
274
+ - **Scaling behavior:** New nodes spin up automatically based on traffic
275
+
276
+ ### Testing with Cold Starts
277
+
278
+ To accurately test performance:
279
+
280
+ 1. **Run a warm-up phase:** Send 100-1000 requests before measuring
281
+ 2. **Measure steady-state:** After warm-up, measure consistent performance
282
+ 3. **Test scaling:** Gradually increase load to observe scaling behavior
283
+ 4. **Account for real-world patterns:** Most production APIs stay warm during
284
+ business hours
285
+
286
+ :::tip
287
+
288
+ For APIs with predictable traffic patterns, consider implementing a simple
289
+ keep-warm strategy using scheduled synthetic requests during low-traffic
290
+ periods.
291
+
292
+ :::
293
+
294
+ ## Summary
295
+
296
+ Creating fair performance tests requires careful attention to test conditions,
297
+ understanding of network topology, and realistic expectations about API gateway
298
+ overhead. By following these guidelines, you'll get accurate measurements that
299
+ help you make informed decisions about your API architecture.
300
+
301
+ Remember: Zuplo typically adds only 20-30ms of latency for basic request
302
+ processing, with additional small increments for some policies. This overhead is
303
+ often offset by the operational benefits and can even result in better global
304
+ performance due to edge deployment.
@@ -0,0 +1,76 @@
1
+ ---
2
+ title: Akamai API Security (AKA NONAME) plugin
3
+ sidebar_label: Akamai API Security
4
+ ---
5
+
6
+ This plugin pushes request/response data to Akamai API Security, formerly known
7
+ as "NONAME" API Security. It can also pull data from Akamai API Security to
8
+ actively block traffic based on the blocklist rules provided by Akamai API
9
+ Security; known as "Protection".
10
+
11
+ <EnterpriseFeature name="Custom logging" />
12
+
13
+ ## Setup
14
+
15
+ To get started, you'll need to configure the Zuplo Integration in Akamai API
16
+ Security. Once this step is completed you'll have a 'key' to allow us to connect
17
+ to Akamai API Security on your behalf.
18
+
19
+ In Zuplo you configure the plugin in the
20
+ [Runtime Extensions](../programmable-api/runtime-extensions.mdx) file
21
+ `zuplo.runtime.ts`, as follows:
22
+
23
+ ```ts title="modules/zuplo.runtime.ts"
24
+ import {
25
+ environment,
26
+ AkamaiApiSecurityPlugin,
27
+ RuntimeExtensions,
28
+ ZuploContext,
29
+ ZuploRequest,
30
+ } from "@zuplo/runtime";
31
+
32
+ export function runtimeInit(runtime: RuntimeExtensions) {
33
+ runtime.addPlugin(
34
+ new AkamaiApiSecurityPlugin({
35
+ hostname: "your-akamai-api-security-hostname.com",
36
+ // index, provided by Akamai API Security
37
+ index: 1,
38
+ // Key provided by Akamai API Security
39
+ key: environment.AKAMAI_API_SECURITY_KEY,
40
+ // Enable the active prevention/protection feature
41
+ enableProtection: true,
42
+ }),
43
+ );
44
+ }
45
+ ```
46
+
47
+ It's recommended to store your key in an
48
+ [Environment Variable](./environment-variables.mdx) shown in the example above
49
+ `AKAMAI_API_SECURITY_KEY`. If you want the active protection feature enabled,
50
+ set `enableProtection` to `true`.
51
+
52
+ The plugin also supports an optional `shouldLog` parameter which is a function
53
+ that returns true or false and, if false, stops the request/response from
54
+ logging to Akamai API Security.
55
+
56
+ ```ts
57
+ runtime.addPlugin(
58
+ new AkamaiApiSecurityPlugin({
59
+ hostname: "your-akamai-api-security-hostname.com",
60
+ // index, provided by Akamai API Security
61
+ index: 1,
62
+ // Key provided by Akamai API Security
63
+ key: environment.AKAMAI_API_SECURITY_KEY,
64
+ // Enable the active prevention/protection feature
65
+ enableProtection: true,
66
+ // optional filter function to exclude requests
67
+ shouldLog: async (request: ZuploRequest, context: ZuploContext) => {
68
+ if (request.headers.get("content-type") !== "application/json") {
69
+ return false;
70
+ }
71
+
72
+ return true;
73
+ },
74
+ }),
75
+ );
76
+ ```
@@ -0,0 +1,73 @@
1
+ ---
2
+ title: Azure Blob Plugin
3
+ sidebar_label: Azure Blob
4
+ ---
5
+
6
+ This plugin pushes request/response logs to Azure Blob Storage. This can be used
7
+ to save request data generated by your API Gateway to use for monitoring,
8
+ analytics, auditing, or debugging purposes.
9
+
10
+ <EnterpriseFeature name="Custom logging" />
11
+
12
+ ## Setup
13
+
14
+ You can define the fields created in the CSV by creating a custom type in
15
+ TypeScript and a function to extract the field data from the `Response`,
16
+ `ZuploRequest`, and `ZuploContext`.
17
+
18
+ The plugin is configured in the
19
+ [Runtime Extensions](../programmable-api/runtime-extensions.mdx) file
20
+ `zuplo.runtime.ts`:
21
+
22
+ ```ts title="modules/zuplo.runtime.ts"
23
+ // The interface that describes the rows
24
+ // in the output
25
+ interface AzureBlobLogEntry {
26
+ timestamp: string;
27
+ method: string;
28
+ url: string;
29
+ status: number;
30
+ statusText: string;
31
+ sub: string | null;
32
+ contentLength: string | null;
33
+ }
34
+
35
+ // Add the plugin - use a SAS URL
36
+ runtime.addPlugin(
37
+ new AzureBlobPlugin<AzureBlobLogEntry>({
38
+ sasUrl:
39
+ "https://YOUR_ACCOUNT.blob.core.windows.net/YOUR_CONTAINER?sv=2022-11-02&ss=b&srt=co&sp=wactfx&se=2045-11-17T13:50:53Z&st=2024-11-17T05:50:53Z&spr=https&sig=YOUR_SIG",
40
+ batchPeriodSeconds: 1,
41
+ generateLogEntry: (
42
+ response: Response,
43
+ request: ZuploRequest,
44
+ context: ZuploContext,
45
+ ) => ({
46
+ // You can customize the log entry here by adding new fields
47
+ timestamp: new Date().toISOString(),
48
+ url: request.url,
49
+ method: request.method,
50
+ status: response.status,
51
+ statusText: response.statusText,
52
+ sub: request.user?.sub ?? null,
53
+ contentLength: request.headers.get("content-length"),
54
+ }),
55
+ }),
56
+ );
57
+ ```
58
+
59
+ The plugin writes Block Blobs using SAS signatures. Ensure that your SAS URL has
60
+ the correct structure and contains the container name, and the SAS has the
61
+ appropriate permissions.
62
+
63
+ ## Writing the response or request
64
+
65
+ Writing the full request or response body can be expensive but is supported.
66
+ Alternatively, you may want to parse the body for a particular property to log,
67
+ in this case it's important that the request or response is cloned so that the
68
+ stream is available for the response.
69
+
70
+ Also, note that the `generateLogEntry` function will be called **after** the
71
+ request stream has been read. So if you need to read the request, you will need
72
+ to store the cloned response before it reaches the request handler and store it,
73
+ ideally using [ContextData](../programmable-api/context-data.mdx).
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: Azure Event Hubs Request Logger Plugin
3
+ sidebar_label: Azure Event Hubs
4
+ ---
5
+
6
+ This plugin pushes request/response logs to Azure Event Hubs. This can be used
7
+ to stream the request data generated by your API Gateway to use for monitoring,
8
+ analytics, auditing, or debugging purposes.
9
+
10
+ <EnterpriseFeature name="Custom logging" />
11
+
12
+ ## Setup
13
+
14
+ You can define the fields created in the JSON object by creating a custom type
15
+ in TypeScript and a function to extract the field data from the `Response`,
16
+ `ZuploRequest`, and `ZuploContext`.
17
+
18
+ The plugin is configured in the
19
+ [Runtime Extensions](../programmable-api/runtime-extensions.mdx) file
20
+ `zuplo.runtime.ts`: git sta
21
+
22
+ ```ts title="modules/zuplo.runtime.ts"
23
+ // The interface that describes the rows
24
+ // in the output
25
+ interface LogEntry {
26
+ timestamp: string;
27
+ method: string;
28
+ url: string;
29
+ status: number;
30
+ statusText: string;
31
+ sub: string | null;
32
+ contentLength: string | null;
33
+ }
34
+
35
+ // Add the plugin
36
+ runtime.addPlugin(
37
+ new AzureEventHubsRequestLoggerPlugin<LogEntry>({
38
+ connectionString: environment.AZURE_EVENT_HUBS_CONNECTION_STRING,
39
+ // for example "Endpoint=sb://your-namespace.servicebus.windows.net/;SharedAccessKeyName=key-name;SharedAccessKey=YOUR_SHARED_ACCESS_KEY"
40
+ batchPeriodSeconds: 1,
41
+ entityPath: "your-event-hub-name",
42
+ generateLogEntry: (response: Response, request: ZuploRequest) => ({
43
+ // You can customize the log entry here by adding new fields
44
+ timestamp: new Date().toISOString(),
45
+ url: request.url,
46
+ method: request.method,
47
+ status: response.status,
48
+ statusText: response.statusText,
49
+ sub: request.user?.sub ?? null,
50
+ contentLength: request.headers.get("content-length"),
51
+ }),
52
+ }),
53
+ );
54
+ ```
55
+
56
+ The configuration requires a `connectionString` which you can get from the Azure
57
+ portal "Shared access policies" section in Event Hubs. If the connection string
58
+ contains an EntityPath property the separate `entityPath` option to define the
59
+ event hub's name isn't required.
60
+
61
+ Entries will be batched and sent as an array, they will be sent every
62
+ `batchPeriodSeconds`. If not specified it will be sent very frequently (~every
63
+ 10ms) to avoid data loss. Note that `batchPeriodSeconds` can be specified as a
64
+ fraction, for example `0.1` for every 100ms.
@@ -0,0 +1,147 @@
1
+ ---
2
+ title: Hydrolix / Akamai Traffic Peak Plugin
3
+ sidebar_label: Hydrolix / Traffic Peak
4
+ ---
5
+
6
+ This plugin pushes request/response logs to Hydrolix AKA Akamai Traffic Peak.
7
+
8
+ <EnterpriseFeature name="Custom logging" />
9
+
10
+ ## Setup
11
+
12
+ You can define the fields created in the JSON object by creating a custom type
13
+ in TypeScript and a function to extract the field data from the `Response`,
14
+ `ZuploRequest`, and `ZuploContext`.
15
+
16
+ The plugin is configured in the
17
+ [Runtime Extensions](../programmable-api/runtime-extensions.mdx) file
18
+ `zuplo.runtime.ts`:
19
+
20
+ This logger includes a default type and function that logs the following fields:
21
+
22
+ - **deploymentName** <CodeType>string</CodeType> - The name of the deployment.
23
+ - **timestamp** <CodeType>string</CodeType> - The time the log was created.
24
+ - **requestId** <CodeType>string</CodeType> - The UUID of the request (the value
25
+ of the `zp-rid` header).
26
+ - **routePath** <CodeType>string</CodeType> - The path of the route.
27
+ - **operationId** <CodeType>string | undefined</CodeType> - The operation ID.
28
+ - **url** <CodeType>string | undefined</CodeType> - The URL of the request.
29
+ - **statusCode** <CodeType>number | undefined</CodeType> - The status code of
30
+ the response.
31
+ - **durationMs** <CodeType>number | undefined</CodeType> - The duration of the
32
+ request in milliseconds.
33
+ - **method** <CodeType>string</CodeType> - The HTTP method of the request.
34
+ - **userSub** <CodeType>string | undefined</CodeType> - The user sub.
35
+ - **instanceId** <CodeType>string | undefined</CodeType> - The instance ID.
36
+ - **colo** <CodeType>string | undefined</CodeType> - The data center of the
37
+ request.
38
+ - **city** <CodeType>string | undefined</CodeType> - The city the request
39
+ origin.
40
+ - **country** <CodeType>string | undefined</CodeType> - The country the request
41
+ origin.
42
+ - **continent** <CodeType>string | undefined</CodeType> - The continent the
43
+ request origin.
44
+ - **latitude** <CodeType>string | undefined</CodeType> - The latitude of the
45
+ request origin.
46
+ - **longitude** <CodeType>string | undefined</CodeType> - The longitude of the
47
+ request origin.
48
+ - **postalCode** <CodeType>string | undefined</CodeType> - The postal code of
49
+ the request origin.
50
+ - **metroCode** <CodeType>string | undefined</CodeType> - The metro code of the
51
+ request origin.
52
+ - **region** <CodeType>string | undefined</CodeType> - The region of the request
53
+ origin.
54
+ - **regionCode** <CodeType>string | undefined</CodeType> - The region code of
55
+ the request origin.
56
+ - **timezone** <CodeType>string | undefined</CodeType> - The timezone of the
57
+ request origin.
58
+ - **asn** <CodeType>string | undefined</CodeType> - The ASN of the request
59
+ origin.
60
+ - **asOrganization** <CodeType>string | undefined</CodeType> - The AS
61
+ organization of the request origin.
62
+ - **clientIP** <CodeType>string | undefined</CodeType> - The client IP of the
63
+ requester.
64
+ - **zuploUserAgent** <CodeType>string | undefined</CodeType> - The Zuplo user
65
+ agent.
66
+
67
+ To use this default setup add the following code to your `zuplo.runtime.ts`
68
+ file:
69
+
70
+ ```ts title="modules/zuplo.runtime.ts"
71
+ import {
72
+ defaultGenerateHydrolixEntry,
73
+ environment,
74
+ HydrolixDefaultEntry,
75
+ HydrolixRequestLoggerPlugin,
76
+ RuntimeExtensions,
77
+ } from "@zuplo/runtime";
78
+
79
+ export function runtimeInit(runtime: RuntimeExtensions) {
80
+ runtime.addPlugin(
81
+ new HydrolixRequestLoggerPlugin<HydrolixDefaultEntry>({
82
+ hostname: "your-hydrolix-hostname.com",
83
+ username: "your-hydrolix-username",
84
+ password: environment.HYDROLIX_PASSWORD,
85
+ token: environment.HYDROLIX_TOKEN,
86
+ table: "your-table.name",
87
+ transform: "your-transform-name",
88
+ generateLogEntry: defaultGenerateHydrolixEntry,
89
+ }),
90
+ );
91
+ }
92
+ ```
93
+
94
+ Note, the `token` (HYDROLIX_TOKEN above) is a
95
+ [Streaming Auth Token](https://docs.hydrolix.io/docs/stream-authentication).
96
+
97
+ If you want to customize the data written to Hydrolix, you can define the fields
98
+ and entry generation function yourself as follows:
99
+
100
+ ```ts title="modules/zuplo.runtime.ts"
101
+ import {
102
+ ZuploRequest,
103
+ HydrolixRequestLoggerPlugin,
104
+ environment,
105
+ } from "@zuplo/runtime";
106
+
107
+ // The interface that describes the rows
108
+ // in the output
109
+ interface LogEntry {
110
+ timestamp: string;
111
+ method: string;
112
+ url: string;
113
+ status: number;
114
+ statusText: string;
115
+ sub: string | null;
116
+ contentLength: string | null;
117
+ }
118
+
119
+ export function runtimeInit(runtime: RuntimeExtensions) {
120
+ runtime.addPlugin(
121
+ new HydrolixRequestLoggerPlugin<LogEntry>({
122
+ hostname: "your-hydrolix-hostname.com",
123
+ username: "your-hydrolix-username",
124
+ password: environment.HYDROLIX_PASSWORD,
125
+ token: environment.HYDROLIX_TOKEN,
126
+ table: "your-table.name",
127
+ transform: "your-transform-name",
128
+ batchPeriodSeconds: 0.1,
129
+ generateLogEntry: (response: Response, request: ZuploRequest) => ({
130
+ // You can customize the log entry here by adding new fields
131
+ timestamp: new Date().toISOString(),
132
+ url: request.url,
133
+ method: request.method,
134
+ status: response.status,
135
+ statusText: response.statusText,
136
+ sub: request.user?.sub ?? null,
137
+ contentLength: request.headers.get("content-length"),
138
+ }),
139
+ }),
140
+ );
141
+ }
142
+ ```
143
+
144
+ Entries will be batched and sent as an array, they will be sent every
145
+ `batchPeriodSeconds`. If not specified the will be dispatched very frequently
146
+ (~every 10ms) to avoid data loss. Note that `batchPeriodSeconds` can be
147
+ specified as a fraction, for example `0.1` for every 100ms.
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: Policy Fundamentals
3
+ ---
4
+
5
+ Policies are modules that can intercept an incoming request or outgoing
6
+ response. You can have multiple policies and apply them to multiple routes.
7
+ There are built-in policies but of course, being a developer-focused platform
8
+ you can easily create custom policies.
9
+
10
+ ## How policies work
11
+
12
+ ![How Policies Work](../../public/media/policies/103f37f8-9801-4f37-8962-d516b9e12fbd.png)
13
+
14
+ An `inbound` policy can intercept a request and modify the request before it
15
+ reaches the request handler (or the next policy). It can also short-circuit the
16
+ whole request lifecycle and immediately respond to the client.
17
+
18
+ An `outbound` policy intercepts the response from your request handler, allowing
19
+ you to transform your response, or return a new one entirely.
20
+
21
+ ## Built-In Policies
22
+
23
+ Zuplo includes many built-in policies that make it easy to handle things like
24
+ authentication, validation, and request modification.
25
+
26
+ Explore the navigation to see all of the built-in policies.
27
+
28
+ ## Custom Policies
29
+
30
+ The ability to write custom policies that run in-process of your Gateway is at
31
+ the core of what makes Zuplo the Programmable API Gateway. You can write
32
+ policies to handle virtually any task. To learn more about
33
+ [writing custom policies see the documentation](../policies/custom-code-inbound.mdx).