@lukoweb/apitogo 0.2.22 → 0.2.24

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 (599) hide show
  1. package/README.md +94 -94
  2. package/cli.js +13 -13
  3. package/client.d.ts +8 -8
  4. package/dist/cli/cli.js +561 -232
  5. package/dist/declarations/cli/platform/client/platform-api.d.ts +18 -0
  6. package/dist/declarations/config/validators/InputNavigationSchema.d.ts +7 -7
  7. package/dist/declarations/config/validators/ZudokuConfig.d.ts +1 -1
  8. package/docs/cli/commands.md +75 -75
  9. package/docs/cli/go-live.md +123 -123
  10. package/docs/cli/overview.md +91 -91
  11. package/docs/cli/setup.md +141 -141
  12. package/docs/cli/shape.md +127 -127
  13. package/docs/components/alert.mdx +130 -130
  14. package/docs/components/badge.mdx +70 -70
  15. package/docs/components/button.mdx +132 -132
  16. package/docs/components/callout.mdx +112 -112
  17. package/docs/components/card.mdx +104 -104
  18. package/docs/components/checkbox.mdx +72 -72
  19. package/docs/components/client-only.mdx +79 -79
  20. package/docs/components/code-tabs.mdx +179 -179
  21. package/docs/components/dialog.mdx +167 -167
  22. package/docs/components/head.mdx +200 -200
  23. package/docs/components/icons.mdx +27 -27
  24. package/docs/components/input.mdx +96 -96
  25. package/docs/components/label.mdx +86 -86
  26. package/docs/components/link.mdx +242 -242
  27. package/docs/components/markdown.mdx +151 -151
  28. package/docs/components/mermaid.mdx +81 -81
  29. package/docs/components/playground.mdx +85 -85
  30. package/docs/components/secret.mdx +79 -79
  31. package/docs/components/select.mdx +176 -176
  32. package/docs/components/shadcn.mdx +73 -73
  33. package/docs/components/slider.mdx +108 -108
  34. package/docs/components/slot.mdx +119 -119
  35. package/docs/components/stepper.mdx +138 -138
  36. package/docs/components/switch.mdx +96 -96
  37. package/docs/components/syntax-highlight.mdx +602 -602
  38. package/docs/components/textarea.mdx +78 -78
  39. package/docs/components/tooltip.mdx +195 -195
  40. package/docs/components/typography.mdx +61 -61
  41. package/docs/components.mdx +60 -60
  42. package/docs/concepts/auth-provider-api-identities.md +105 -105
  43. package/docs/configuration/ai-assistants.md +65 -65
  44. package/docs/configuration/api-catalog.md +109 -109
  45. package/docs/configuration/api-reference.md +397 -397
  46. package/docs/configuration/authentication-auth0.md +181 -181
  47. package/docs/configuration/authentication-azure-ad.md +245 -245
  48. package/docs/configuration/authentication-clerk.md +117 -117
  49. package/docs/configuration/authentication-firebase.md +69 -69
  50. package/docs/configuration/authentication-pingfederate.md +143 -143
  51. package/docs/configuration/authentication-supabase.md +233 -233
  52. package/docs/configuration/authentication.md +159 -159
  53. package/docs/configuration/build-configuration.mdx +147 -147
  54. package/docs/configuration/docs.md +282 -282
  55. package/docs/configuration/footer.mdx +118 -118
  56. package/docs/configuration/gateway.md +221 -221
  57. package/docs/configuration/llms.md +90 -90
  58. package/docs/configuration/make-config.mdx +124 -124
  59. package/docs/configuration/manifest.md +128 -128
  60. package/docs/configuration/navigation.mdx +421 -421
  61. package/docs/configuration/overview.md +166 -166
  62. package/docs/configuration/plans.md +153 -153
  63. package/docs/configuration/protected-routes.md +150 -150
  64. package/docs/configuration/search.md +164 -164
  65. package/docs/configuration/sentry.mdx +44 -44
  66. package/docs/configuration/site.md +124 -124
  67. package/docs/configuration/slots.mdx +125 -125
  68. package/docs/configuration/vite-config.md +18 -18
  69. package/docs/custom-plugins.md +285 -285
  70. package/docs/customization/colors-theme.mdx +278 -278
  71. package/docs/customization/fonts.md +110 -110
  72. package/docs/customization/landing-page.md +188 -188
  73. package/docs/deploy/apache-nginx.md +41 -41
  74. package/docs/deploy/apitogo.md +17 -17
  75. package/docs/deploy/cloudflare-pages.md +74 -74
  76. package/docs/deploy/direct-upload.md +17 -17
  77. package/docs/deploy/github-pages.md +49 -49
  78. package/docs/deploy/vercel.md +101 -101
  79. package/docs/deployment.md +9 -9
  80. package/docs/extending/events.md +124 -124
  81. package/docs/guides/custom-pages.md +110 -110
  82. package/docs/guides/environment-variables.md +94 -94
  83. package/docs/guides/managing-api-keys-and-identities.md +89 -89
  84. package/docs/guides/mermaid.mdx +70 -70
  85. package/docs/guides/navigation-rules.mdx +203 -203
  86. package/docs/guides/processors.mdx +234 -234
  87. package/docs/guides/static-files.md +55 -55
  88. package/docs/guides/transforming-examples.md +156 -156
  89. package/docs/guides/using-multiple-apis.md +87 -87
  90. package/docs/markdown/admonitions.md +128 -128
  91. package/docs/markdown/code-blocks.md +196 -196
  92. package/docs/markdown/frontmatter.md +173 -173
  93. package/docs/markdown/mdx.md +68 -68
  94. package/docs/markdown/overview.md +275 -275
  95. package/docs/mcp/go-live.md +100 -100
  96. package/docs/mcp/overview.md +76 -76
  97. package/docs/mcp/setup.md +173 -173
  98. package/docs/mcp/shape.md +77 -77
  99. package/docs/mcp/tools.md +102 -102
  100. package/docs/plugins.md +24 -24
  101. package/docs/quickstart.md +72 -72
  102. package/docs/writing.mdx +72 -72
  103. package/package.json +1 -1
  104. package/src/app/ZuploBuildConfig.ts +36 -36
  105. package/src/app/apitogoBrandTheme.ts +47 -47
  106. package/src/app/defaultTheme.css +77 -77
  107. package/src/app/demo-cdn.html +37 -37
  108. package/src/app/demo.html +21 -21
  109. package/src/app/demo.tsx +77 -77
  110. package/src/app/entry.client.tsx +107 -107
  111. package/src/app/entry.server.tsx +160 -160
  112. package/src/app/env.ts +40 -40
  113. package/src/app/main.css +400 -400
  114. package/src/app/main.tsx +167 -167
  115. package/src/app/polyfills.ts +47 -47
  116. package/src/app/processRoutes.tsx +51 -51
  117. package/src/app/sentry.ts +24 -24
  118. package/src/app/standalone.html +23 -23
  119. package/src/app/standalone.tsx +60 -60
  120. package/src/app/utils/createRedirectRoutes.ts +11 -11
  121. package/src/config/apitogo-config-core.ts +7 -3
  122. package/src/config/apitogo-config-loader.browser.ts +17 -17
  123. package/src/config/apitogo-config-loader.node.ts +88 -88
  124. package/src/config/apitogo-config-loader.ts +6 -6
  125. package/src/config/build-apitogo-config.ts +61 -61
  126. package/src/config/config.ts +74 -74
  127. package/src/config/create-plugin.ts +71 -71
  128. package/src/config/default-landing-content.ts +149 -149
  129. package/src/config/file-exists.ts +6 -6
  130. package/src/config/gateway-limits.ts +128 -128
  131. package/src/config/landing-manifest.ts +11 -11
  132. package/src/config/landing-openapi-showcase.ts +124 -124
  133. package/src/config/loader.ts +375 -375
  134. package/src/config/local-manifest.ts +545 -545
  135. package/src/config/resolve-modules.ts +354 -354
  136. package/src/config/v2/__fixtures__/scenario-a-docs-only.json +6 -6
  137. package/src/config/v2/__fixtures__/scenario-b-managed-origin.json +14 -14
  138. package/src/config/v2/__fixtures__/scenario-c-proxy-oidc.json +15 -15
  139. package/src/config/v2/__fixtures__/scenario-h-full-stack.json +28 -28
  140. package/src/config/v2/docs-navigation.ts +72 -72
  141. package/src/config/v2/errors.ts +42 -42
  142. package/src/config/v2/gateway-reference.ts +220 -220
  143. package/src/config/v2/gateway-request.ts +123 -123
  144. package/src/config/v2/home-redirect.ts +98 -98
  145. package/src/config/v2/index.ts +126 -126
  146. package/src/config/v2/init.ts +273 -273
  147. package/src/config/v2/layout.ts +237 -237
  148. package/src/config/v2/ledger.ts +235 -235
  149. package/src/config/v2/link-directory.ts +34 -0
  150. package/src/config/v2/load.ts +70 -70
  151. package/src/config/v2/manifest.ts +452 -452
  152. package/src/config/v2/parse.ts +214 -214
  153. package/src/config/v2/paths.ts +54 -54
  154. package/src/config/v2/portal-profile.ts +88 -88
  155. package/src/config/v2/resolve.ts +188 -188
  156. package/src/config/v2/rules.ts +714 -714
  157. package/src/config/v2/schema.ts +245 -245
  158. package/src/config/v2/services.ts +663 -663
  159. package/src/config/v2/workspace.ts +3 -2
  160. package/src/config/v2/wrapper.ts +24 -2
  161. package/src/config/validators/BuildSchema.ts +95 -95
  162. package/src/config/validators/HeaderNavigationSchema.ts +44 -44
  163. package/src/config/validators/InputNavigationSchema.test-d.ts +178 -178
  164. package/src/config/validators/InputNavigationSchema.ts +206 -206
  165. package/src/config/validators/ModulesSchema.ts +502 -502
  166. package/src/config/validators/NavigationSchema.ts +352 -352
  167. package/src/config/validators/ProtectedRoutesSchema.ts +35 -35
  168. package/src/config/validators/ZudokuConfig.ts +792 -792
  169. package/src/config/validators/auth.ts +3 -3
  170. package/src/config/validators/reason-codes.ts +7 -7
  171. package/src/env.d.ts +11 -11
  172. package/src/index.ts +83 -83
  173. package/src/lib/MissingIcon.tsx +22 -22
  174. package/src/lib/assets/language-icons/bun.tsx +50 -50
  175. package/src/lib/assets/language-icons/c.tsx +31 -31
  176. package/src/lib/assets/language-icons/commonlisp.tsx +22 -22
  177. package/src/lib/assets/language-icons/cpp.tsx +35 -35
  178. package/src/lib/assets/language-icons/csharp.tsx +35 -35
  179. package/src/lib/assets/language-icons/css.tsx +36 -36
  180. package/src/lib/assets/language-icons/dart.tsx +39 -39
  181. package/src/lib/assets/language-icons/elixir.tsx +19 -19
  182. package/src/lib/assets/language-icons/go.tsx +19 -19
  183. package/src/lib/assets/language-icons/graphql.tsx +19 -19
  184. package/src/lib/assets/language-icons/html.tsx +24 -24
  185. package/src/lib/assets/language-icons/java.tsx +35 -35
  186. package/src/lib/assets/language-icons/javascript.tsx +11 -11
  187. package/src/lib/assets/language-icons/json.tsx +19 -19
  188. package/src/lib/assets/language-icons/kotlin.tsx +30 -30
  189. package/src/lib/assets/language-icons/markdown.tsx +19 -19
  190. package/src/lib/assets/language-icons/mdx.tsx +23 -23
  191. package/src/lib/assets/language-icons/npm.tsx +15 -15
  192. package/src/lib/assets/language-icons/objectivec.tsx +23 -23
  193. package/src/lib/assets/language-icons/ocaml.tsx +34 -34
  194. package/src/lib/assets/language-icons/php.tsx +19 -19
  195. package/src/lib/assets/language-icons/pnpm.tsx +32 -32
  196. package/src/lib/assets/language-icons/powershell.tsx +27 -27
  197. package/src/lib/assets/language-icons/python.tsx +23 -23
  198. package/src/lib/assets/language-icons/react.tsx +21 -21
  199. package/src/lib/assets/language-icons/ruby.tsx +19 -19
  200. package/src/lib/assets/language-icons/rust.tsx +19 -19
  201. package/src/lib/assets/language-icons/scala.tsx +19 -19
  202. package/src/lib/assets/language-icons/shell.tsx +19 -19
  203. package/src/lib/assets/language-icons/swift.tsx +19 -19
  204. package/src/lib/assets/language-icons/toml.tsx +23 -23
  205. package/src/lib/assets/language-icons/typescript.tsx +23 -23
  206. package/src/lib/assets/language-icons/xml.tsx +19 -19
  207. package/src/lib/assets/language-icons/yaml.tsx +23 -23
  208. package/src/lib/assets/language-icons/yarn.tsx +17 -17
  209. package/src/lib/assets/language-icons/zig.tsx +32 -32
  210. package/src/lib/auth/issuer.ts +34 -34
  211. package/src/lib/authentication/AuthenticationPlugin.tsx +33 -33
  212. package/src/lib/authentication/auth-header-nav.ts +46 -46
  213. package/src/lib/authentication/authentication.ts +51 -51
  214. package/src/lib/authentication/components/CallbackHandler.tsx +45 -45
  215. package/src/lib/authentication/components/OAuthErrorPage.tsx +197 -197
  216. package/src/lib/authentication/components/ProductionUnlockPage.tsx +26 -26
  217. package/src/lib/authentication/components/SignIn.tsx +46 -46
  218. package/src/lib/authentication/components/SignOut.tsx +15 -15
  219. package/src/lib/authentication/components/SignUp.tsx +48 -48
  220. package/src/lib/authentication/constants.ts +1 -1
  221. package/src/lib/authentication/errors.ts +34 -34
  222. package/src/lib/authentication/header-nav-filter.ts +35 -35
  223. package/src/lib/authentication/hook.ts +141 -141
  224. package/src/lib/authentication/providers/auth0.tsx +91 -91
  225. package/src/lib/authentication/providers/azureb2c.tsx +223 -223
  226. package/src/lib/authentication/providers/clerk.tsx +224 -224
  227. package/src/lib/authentication/providers/dev-portal-auth-pages.tsx +602 -602
  228. package/src/lib/authentication/providers/dev-portal-constants.ts +38 -38
  229. package/src/lib/authentication/providers/dev-portal-demo.ts +151 -151
  230. package/src/lib/authentication/providers/dev-portal-utils.ts +279 -279
  231. package/src/lib/authentication/providers/dev-portal.tsx +448 -448
  232. package/src/lib/authentication/providers/firebase.tsx +486 -486
  233. package/src/lib/authentication/providers/openid.tsx +516 -516
  234. package/src/lib/authentication/providers/supabase.tsx +412 -412
  235. package/src/lib/authentication/providers/util.ts +26 -26
  236. package/src/lib/authentication/state.ts +180 -180
  237. package/src/lib/authentication/ui/AuthCard.tsx +7 -7
  238. package/src/lib/authentication/ui/EmailLinkCallbackUi.tsx +129 -129
  239. package/src/lib/authentication/ui/EmailLinkSentUi.tsx +105 -105
  240. package/src/lib/authentication/ui/EmailLinkSignInUi.tsx +100 -100
  241. package/src/lib/authentication/ui/EmailVerificationUi.tsx +128 -128
  242. package/src/lib/authentication/ui/ZudokuAuthUi.tsx +620 -620
  243. package/src/lib/authentication/ui/icons/Apple.tsx +10 -10
  244. package/src/lib/authentication/ui/icons/Facebook.tsx +15 -15
  245. package/src/lib/authentication/ui/icons/Github.tsx +16 -16
  246. package/src/lib/authentication/ui/icons/Google.tsx +16 -16
  247. package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -12
  248. package/src/lib/authentication/ui/icons/X.tsx +10 -10
  249. package/src/lib/authentication/utils/relativeRedirectUrl.ts +16 -16
  250. package/src/lib/components/AiAssistantMenuItems.tsx +102 -102
  251. package/src/lib/components/AnchorLink.tsx +24 -24
  252. package/src/lib/components/Autocomplete.tsx +123 -123
  253. package/src/lib/components/Banner.tsx +52 -52
  254. package/src/lib/components/Bootstrap.tsx +77 -77
  255. package/src/lib/components/BuildCheck.tsx +87 -87
  256. package/src/lib/components/CategoryHeading.tsx +19 -19
  257. package/src/lib/components/ClientOnly.tsx +19 -19
  258. package/src/lib/components/DeveloperHint.tsx +39 -39
  259. package/src/lib/components/ErrorPage.tsx +26 -26
  260. package/src/lib/components/Footer.tsx +146 -146
  261. package/src/lib/components/Framed.tsx +51 -51
  262. package/src/lib/components/Header.tsx +261 -261
  263. package/src/lib/components/HeaderAuthActions.tsx +32 -32
  264. package/src/lib/components/HeaderNavigation.tsx +176 -176
  265. package/src/lib/components/Heading.tsx +84 -84
  266. package/src/lib/components/InlineCode.tsx +15 -15
  267. package/src/lib/components/LandingLayout.tsx +27 -27
  268. package/src/lib/components/LanguageIcon.tsx +199 -199
  269. package/src/lib/components/Layout.tsx +59 -59
  270. package/src/lib/components/Main.tsx +52 -52
  271. package/src/lib/components/Markdown.tsx +55 -55
  272. package/src/lib/components/Mermaid.tsx +74 -74
  273. package/src/lib/components/Meta.tsx +46 -46
  274. package/src/lib/components/MobileTopNavigation.tsx +283 -283
  275. package/src/lib/components/MultiSelect.tsx +86 -86
  276. package/src/lib/components/NotFoundPage.tsx +37 -37
  277. package/src/lib/components/PageProgress.tsx +28 -28
  278. package/src/lib/components/PagefindSearchMeta.tsx +14 -14
  279. package/src/lib/components/Pagination.tsx +44 -44
  280. package/src/lib/components/PathRenderer.tsx +61 -61
  281. package/src/lib/components/PluginHeads.tsx +17 -17
  282. package/src/lib/components/Search.tsx +70 -70
  283. package/src/lib/components/SiteTitle.tsx +58 -58
  284. package/src/lib/components/Slot.tsx +65 -65
  285. package/src/lib/components/Spinner.tsx +5 -5
  286. package/src/lib/components/StatusPage.tsx +96 -96
  287. package/src/lib/components/ThemeSwitch.tsx +99 -99
  288. package/src/lib/components/TopNavigation.tsx +90 -90
  289. package/src/lib/components/Typography.tsx +12 -12
  290. package/src/lib/components/Zudoku.tsx +105 -105
  291. package/src/lib/components/cache.ts +27 -27
  292. package/src/lib/components/context/RenderContext.ts +11 -11
  293. package/src/lib/components/context/RouterEventsEmitter.tsx +19 -19
  294. package/src/lib/components/context/SlotProvider.tsx +149 -149
  295. package/src/lib/components/context/ViewportAnchorContext.tsx +137 -137
  296. package/src/lib/components/context/ZudokuContext.ts +140 -140
  297. package/src/lib/components/context/ZudokuProvider.tsx +20 -20
  298. package/src/lib/components/context/ZudokuReactContext.tsx +17 -17
  299. package/src/lib/components/index.ts +36 -36
  300. package/src/lib/components/navigation/Navigation.tsx +51 -51
  301. package/src/lib/components/navigation/NavigationBadge.tsx +48 -48
  302. package/src/lib/components/navigation/NavigationCategory.tsx +157 -157
  303. package/src/lib/components/navigation/NavigationFilterContext.tsx +28 -28
  304. package/src/lib/components/navigation/NavigationFilterInput.tsx +35 -35
  305. package/src/lib/components/navigation/NavigationItem.tsx +181 -181
  306. package/src/lib/components/navigation/NavigationWrapper.tsx +49 -49
  307. package/src/lib/components/navigation/PoweredByZudoku.tsx +39 -39
  308. package/src/lib/components/navigation/Toc.tsx +137 -137
  309. package/src/lib/components/navigation/ZudokuLogo.tsx +25 -25
  310. package/src/lib/components/navigation/ZuploLogo.tsx +14 -14
  311. package/src/lib/components/navigation/utils.ts +234 -234
  312. package/src/lib/core/RouteGuard.tsx +260 -260
  313. package/src/lib/core/ZudokuContext.ts +272 -272
  314. package/src/lib/core/plugins.ts +139 -139
  315. package/src/lib/core/react-query.ts +1 -1
  316. package/src/lib/core/router.ts +1 -1
  317. package/src/lib/core/transform-config.ts +67 -67
  318. package/src/lib/demo/DemoAnnouncement.tsx +17 -17
  319. package/src/lib/errors/ErrorAlert.tsx +28 -28
  320. package/src/lib/errors/ErrorMessage.tsx +50 -50
  321. package/src/lib/errors/RouterError.tsx +18 -18
  322. package/src/lib/errors/ServerError.tsx +5 -5
  323. package/src/lib/errors/TopLevelError.tsx +6 -6
  324. package/src/lib/hooks/index.ts +13 -13
  325. package/src/lib/hooks/useEvent.ts +41 -41
  326. package/src/lib/hooks/useHighlighter.ts +15 -15
  327. package/src/lib/hooks/useHotkey.ts +70 -70
  328. package/src/lib/icons.ts +2 -2
  329. package/src/lib/navigation/applyRules.ts +127 -127
  330. package/src/lib/navigation/pathMatcher.ts +81 -81
  331. package/src/lib/oas/graphql/circular.ts +69 -69
  332. package/src/lib/oas/graphql/constants.ts +2 -2
  333. package/src/lib/oas/graphql/index.ts +791 -791
  334. package/src/lib/oas/parser/dereference/index.ts +84 -84
  335. package/src/lib/oas/parser/dereference/resolveRef.ts +32 -32
  336. package/src/lib/oas/parser/index.ts +129 -129
  337. package/src/lib/oas/parser/schemas/v3.0.json +1489 -1489
  338. package/src/lib/oas/parser/schemas/v3.1.json +1298 -1298
  339. package/src/lib/oas/parser/upgrade/index.ts +174 -174
  340. package/src/lib/plugins/api-catalog/Catalog.tsx +80 -80
  341. package/src/lib/plugins/api-catalog/index.tsx +119 -119
  342. package/src/lib/plugins/api-keys/CreateApiKey.tsx +128 -128
  343. package/src/lib/plugins/api-keys/CreateApiKeyDialog.tsx +49 -49
  344. package/src/lib/plugins/api-keys/ProtectedRoute.tsx +33 -33
  345. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +72 -72
  346. package/src/lib/plugins/api-keys/index.tsx +274 -274
  347. package/src/lib/plugins/api-keys/settings/ApiKeyItem.tsx +342 -342
  348. package/src/lib/plugins/api-keys/settings/ApiKeyList.tsx +67 -67
  349. package/src/lib/plugins/api-keys/settings/RevealApiKey.tsx +127 -127
  350. package/src/lib/plugins/custom-pages/index.tsx +32 -32
  351. package/src/lib/plugins/markdown/MdxPage.tsx +260 -260
  352. package/src/lib/plugins/markdown/assets/ChatGPTLogo.tsx +11 -11
  353. package/src/lib/plugins/markdown/assets/ClaudeLogo.tsx +19 -19
  354. package/src/lib/plugins/markdown/index.tsx +82 -82
  355. package/src/lib/plugins/openapi/ApiHeader.tsx +96 -96
  356. package/src/lib/plugins/openapi/CollapsibleCode.tsx +88 -88
  357. package/src/lib/plugins/openapi/ColorizedParam.tsx +115 -115
  358. package/src/lib/plugins/openapi/DownloadSchemaButton.tsx +94 -94
  359. package/src/lib/plugins/openapi/Endpoint.tsx +85 -85
  360. package/src/lib/plugins/openapi/GeneratedExampleSidecarBox.tsx +52 -52
  361. package/src/lib/plugins/openapi/MCPEndpoint.tsx +273 -273
  362. package/src/lib/plugins/openapi/OasProvider.tsx +74 -74
  363. package/src/lib/plugins/openapi/OperationList.tsx +275 -275
  364. package/src/lib/plugins/openapi/OperationListItem.tsx +183 -183
  365. package/src/lib/plugins/openapi/ParamInfos.tsx +96 -96
  366. package/src/lib/plugins/openapi/ParameterList.tsx +53 -53
  367. package/src/lib/plugins/openapi/ParameterListItem.tsx +161 -161
  368. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +67 -67
  369. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +63 -63
  370. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +120 -120
  371. package/src/lib/plugins/openapi/SchemaInfo.tsx +344 -344
  372. package/src/lib/plugins/openapi/SchemaList.tsx +113 -113
  373. package/src/lib/plugins/openapi/Sidecar.tsx +314 -314
  374. package/src/lib/plugins/openapi/SidecarBox.tsx +57 -57
  375. package/src/lib/plugins/openapi/SidecarExamples.tsx +177 -177
  376. package/src/lib/plugins/openapi/SimpleSelect.tsx +46 -46
  377. package/src/lib/plugins/openapi/client/GraphQLClient.tsx +73 -73
  378. package/src/lib/plugins/openapi/client/GraphQLContext.tsx +16 -16
  379. package/src/lib/plugins/openapi/client/createServer.ts +35 -35
  380. package/src/lib/plugins/openapi/client/useCreateQuery.ts +44 -44
  381. package/src/lib/plugins/openapi/components/ConstValue.tsx +24 -24
  382. package/src/lib/plugins/openapi/components/EnumValues.tsx +58 -58
  383. package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -22
  384. package/src/lib/plugins/openapi/components/ResponseContent.tsx +117 -117
  385. package/src/lib/plugins/openapi/components/SelectOnClick.tsx +29 -29
  386. package/src/lib/plugins/openapi/context.tsx +16 -16
  387. package/src/lib/plugins/openapi/graphql/fragment-masking.ts +104 -104
  388. package/src/lib/plugins/openapi/graphql/gql.ts +95 -95
  389. package/src/lib/plugins/openapi/graphql/graphql.ts +835 -835
  390. package/src/lib/plugins/openapi/graphql/index.ts +2 -2
  391. package/src/lib/plugins/openapi/index.tsx +221 -221
  392. package/src/lib/plugins/openapi/interfaces.ts +100 -100
  393. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +274 -274
  394. package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +51 -51
  395. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +60 -60
  396. package/src/lib/plugins/openapi/playground/Headers.tsx +194 -194
  397. package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +75 -75
  398. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +38 -38
  399. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +45 -45
  400. package/src/lib/plugins/openapi/playground/PathParams.tsx +53 -53
  401. package/src/lib/plugins/openapi/playground/Playground.tsx +602 -602
  402. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +62 -62
  403. package/src/lib/plugins/openapi/playground/QueryParams.tsx +151 -151
  404. package/src/lib/plugins/openapi/playground/RequestLoginDialog.tsx +70 -70
  405. package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -87
  406. package/src/lib/plugins/openapi/playground/createUrl.ts +25 -25
  407. package/src/lib/plugins/openapi/playground/fileUtils.ts +36 -36
  408. package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -26
  409. package/src/lib/plugins/openapi/playground/request-panel/MultipartField.tsx +91 -91
  410. package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -31
  411. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +29 -29
  412. package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +340 -340
  413. package/src/lib/plugins/openapi/playground/result-panel/AudioPlayer.tsx +50 -50
  414. package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +117 -117
  415. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +355 -355
  416. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +106 -106
  417. package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts +36 -36
  418. package/src/lib/plugins/openapi/playground/serializeQueryParams.ts +125 -125
  419. package/src/lib/plugins/openapi/playground/useRememberSkipLoginDialog.tsx +23 -23
  420. package/src/lib/plugins/openapi/processors/injectApitogoGatewayServer.ts +36 -36
  421. package/src/lib/plugins/openapi/processors/removeExtensions.ts +29 -29
  422. package/src/lib/plugins/openapi/processors/removeParameters.ts +103 -103
  423. package/src/lib/plugins/openapi/processors/removePaths.ts +57 -57
  424. package/src/lib/plugins/openapi/processors/traverse.ts +1 -1
  425. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +39 -39
  426. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +189 -189
  427. package/src/lib/plugins/openapi/schema/SchemaView.tsx +299 -299
  428. package/src/lib/plugins/openapi/schema/UnionView.tsx +132 -132
  429. package/src/lib/plugins/openapi/schema/union-helpers.ts +123 -123
  430. package/src/lib/plugins/openapi/schema/utils.ts +49 -49
  431. package/src/lib/plugins/openapi/state.ts +36 -36
  432. package/src/lib/plugins/openapi/util/buildTagCategories.ts +54 -54
  433. package/src/lib/plugins/openapi/util/createHttpSnippet.ts +135 -135
  434. package/src/lib/plugins/openapi/util/createNavigationCategory.tsx +39 -39
  435. package/src/lib/plugins/openapi/util/generateSchemaExample.ts +191 -191
  436. package/src/lib/plugins/openapi/util/getRoutes.tsx +265 -265
  437. package/src/lib/plugins/openapi/util/methodColorMap.tsx +11 -11
  438. package/src/lib/plugins/openapi/util/methodToColor.ts +27 -27
  439. package/src/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.tsx +32 -32
  440. package/src/lib/plugins/openapi/util/useWarmupSchema.ts +23 -23
  441. package/src/lib/plugins/search-inkeep/index.tsx +108 -108
  442. package/src/lib/plugins/search-inkeep/inkeep.ts +24 -24
  443. package/src/lib/plugins/search-pagefind/IndexingDialog.tsx +162 -162
  444. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +202 -202
  445. package/src/lib/plugins/search-pagefind/ResultList.tsx +122 -122
  446. package/src/lib/plugins/search-pagefind/get-results.tsx +74 -74
  447. package/src/lib/plugins/search-pagefind/index.tsx +21 -21
  448. package/src/lib/plugins/search-pagefind/types.ts +118 -118
  449. package/src/lib/shiki-constants.ts +24 -24
  450. package/src/lib/shiki.ts +179 -179
  451. package/src/lib/testing/index.tsx +147 -147
  452. package/src/lib/ui/Accordion.tsx +55 -55
  453. package/src/lib/ui/ActionButton.tsx +21 -21
  454. package/src/lib/ui/Alert.tsx +84 -84
  455. package/src/lib/ui/AlertDialog.tsx +195 -195
  456. package/src/lib/ui/AspectRatio.tsx +5 -5
  457. package/src/lib/ui/Badge.tsx +48 -48
  458. package/src/lib/ui/Breadcrumb.tsx +115 -115
  459. package/src/lib/ui/Button.tsx +65 -65
  460. package/src/lib/ui/ButtonGroup.tsx +80 -80
  461. package/src/lib/ui/Callout.tsx +113 -113
  462. package/src/lib/ui/Card.tsx +95 -95
  463. package/src/lib/ui/Carousel.tsx +259 -259
  464. package/src/lib/ui/Checkbox.tsx +28 -28
  465. package/src/lib/ui/CodeBlock.tsx +92 -92
  466. package/src/lib/ui/CodeTabPanel.tsx +13 -13
  467. package/src/lib/ui/CodeTabs.tsx +161 -161
  468. package/src/lib/ui/Collapsible.tsx +31 -31
  469. package/src/lib/ui/Command.tsx +191 -191
  470. package/src/lib/ui/Dialog.tsx +138 -138
  471. package/src/lib/ui/DismissibleAlert.tsx +74 -74
  472. package/src/lib/ui/Drawer.tsx +121 -121
  473. package/src/lib/ui/DropdownMenu.tsx +254 -254
  474. package/src/lib/ui/EmbeddedCodeBlock.tsx +99 -99
  475. package/src/lib/ui/Form.tsx +176 -176
  476. package/src/lib/ui/Frame.tsx +81 -81
  477. package/src/lib/ui/HoverCard.tsx +26 -26
  478. package/src/lib/ui/Input.tsx +23 -23
  479. package/src/lib/ui/InputGroup.tsx +168 -168
  480. package/src/lib/ui/Item.tsx +213 -213
  481. package/src/lib/ui/Kbd.tsx +28 -28
  482. package/src/lib/ui/Label.tsx +23 -23
  483. package/src/lib/ui/NativeSelect.tsx +48 -48
  484. package/src/lib/ui/NavigationMenu.tsx +169 -169
  485. package/src/lib/ui/Pagination.tsx +115 -115
  486. package/src/lib/ui/Popover.tsx +28 -28
  487. package/src/lib/ui/Progress.tsx +25 -25
  488. package/src/lib/ui/RadioGroup.tsx +41 -41
  489. package/src/lib/ui/ReactComponentDoc.tsx +68 -68
  490. package/src/lib/ui/ScrollArea.tsx +45 -45
  491. package/src/lib/ui/Secret.tsx +133 -133
  492. package/src/lib/ui/Select.tsx +184 -184
  493. package/src/lib/ui/Separator.tsx +25 -25
  494. package/src/lib/ui/Skeleton.tsx +15 -15
  495. package/src/lib/ui/Slider.tsx +25 -25
  496. package/src/lib/ui/Stepper.tsx +8 -8
  497. package/src/lib/ui/Switch.tsx +26 -26
  498. package/src/lib/ui/SyntaxHighlight.tsx +54 -54
  499. package/src/lib/ui/Tabs.tsx +52 -52
  500. package/src/lib/ui/Textarea.tsx +22 -22
  501. package/src/lib/ui/Toggle.tsx +42 -42
  502. package/src/lib/ui/ToggleGroup.tsx +58 -58
  503. package/src/lib/ui/Tooltip.tsx +65 -65
  504. package/src/lib/ui/Value.tsx +42 -42
  505. package/src/lib/ui/util.tsx +8 -8
  506. package/src/lib/util/MdxComponents.tsx +150 -150
  507. package/src/lib/util/cn.ts +6 -6
  508. package/src/lib/util/createVariantComponent.tsx +61 -61
  509. package/src/lib/util/ensureArray.ts +3 -3
  510. package/src/lib/util/flattenAllOf.ts +72 -72
  511. package/src/lib/util/flattenAllOfProcessor.ts +74 -74
  512. package/src/lib/util/hastToJsx.tsx +67 -67
  513. package/src/lib/util/humanFileSize.ts +15 -15
  514. package/src/lib/util/invariant.ts +52 -52
  515. package/src/lib/util/joinUrl.ts +60 -60
  516. package/src/lib/util/logInit.ts +9 -9
  517. package/src/lib/util/objectEntries.ts +5 -5
  518. package/src/lib/util/os.ts +18 -18
  519. package/src/lib/util/pastellize.ts +25 -25
  520. package/src/lib/util/problemJson.ts +63 -63
  521. package/src/lib/util/readFrontmatter.ts +14 -14
  522. package/src/lib/util/renderIf.ts +4 -4
  523. package/src/lib/util/scrollIntoViewIfNeeded.ts +18 -18
  524. package/src/lib/util/slugify.ts +21 -21
  525. package/src/lib/util/syncZustandState.ts +22 -22
  526. package/src/lib/util/traverse.ts +70 -70
  527. package/src/lib/util/types.ts +7 -7
  528. package/src/lib/util/url.ts +18 -18
  529. package/src/lib/util/useCopyToClipboard.ts +17 -17
  530. package/src/lib/util/useExposedProps.tsx +27 -27
  531. package/src/lib/util/useIsomorphicLayoutEffect.ts +6 -6
  532. package/src/lib/util/useLatest.ts +18 -18
  533. package/src/lib/util/useOnScreen.ts +34 -34
  534. package/src/lib/util/useScrollToAnchor.ts +75 -75
  535. package/src/lib/util/useScrollToTop.ts +18 -18
  536. package/src/types.d.ts +66 -66
  537. package/src/vite/api/SchemaManager.ts +371 -371
  538. package/src/vite/api/schema-codegen.ts +163 -163
  539. package/src/vite/build.ts +237 -237
  540. package/src/vite/config.ts +273 -273
  541. package/src/vite/css/collect.ts +42 -42
  542. package/src/vite/css/plugin.ts +105 -105
  543. package/src/vite/debug.ts +18 -18
  544. package/src/vite/dev-portal-env.ts +29 -29
  545. package/src/vite/dev-server.ts +294 -294
  546. package/src/vite/html.ts +52 -52
  547. package/src/vite/index.ts +2 -2
  548. package/src/vite/llms.ts +99 -99
  549. package/src/vite/mdx/rehype-extract-toc-with-jsx-export.ts +19 -19
  550. package/src/vite/mdx/rehype-extract-toc-with-jsx.ts +70 -70
  551. package/src/vite/mdx/remark-code-tabs.ts +47 -47
  552. package/src/vite/mdx/remark-inject-filepath.ts +13 -13
  553. package/src/vite/mdx/remark-last-modified.ts +103 -103
  554. package/src/vite/mdx/remark-link-rewrite.ts +23 -23
  555. package/src/vite/mdx/remark-normalize-image-url.ts +15 -15
  556. package/src/vite/mdx/remark-static-generation.ts +149 -149
  557. package/src/vite/mdx/utils.ts +32 -32
  558. package/src/vite/output.ts +261 -261
  559. package/src/vite/package-root.ts +12 -12
  560. package/src/vite/pagefind-dev-index.ts +100 -100
  561. package/src/vite/pagefind-dev-stub.ts +17 -17
  562. package/src/vite/plugin-api-keys.ts +55 -55
  563. package/src/vite/plugin-api.ts +328 -328
  564. package/src/vite/plugin-auth.ts +41 -41
  565. package/src/vite/plugin-component.ts +45 -45
  566. package/src/vite/plugin-config-reload.ts +47 -47
  567. package/src/vite/plugin-config.ts +131 -131
  568. package/src/vite/plugin-custom-pages.ts +36 -36
  569. package/src/vite/plugin-doc-metadata.ts +45 -45
  570. package/src/vite/plugin-docs.ts +205 -205
  571. package/src/vite/plugin-local-manifest.ts +100 -100
  572. package/src/vite/plugin-markdown-export.ts +214 -214
  573. package/src/vite/plugin-mdx.ts +149 -149
  574. package/src/vite/plugin-metadata.ts +30 -30
  575. package/src/vite/plugin-modules.ts +188 -188
  576. package/src/vite/plugin-navigation.ts +106 -106
  577. package/src/vite/plugin-offroot-resolve.ts +67 -67
  578. package/src/vite/plugin-search.ts +59 -59
  579. package/src/vite/plugin-shiki-register.ts +97 -97
  580. package/src/vite/plugin-theme.ts +458 -458
  581. package/src/vite/plugin.ts +48 -48
  582. package/src/vite/prerender/prerender.ts +242 -242
  583. package/src/vite/prerender/utils.ts +76 -76
  584. package/src/vite/prerender/worker.ts +118 -118
  585. package/src/vite/reporter.ts +34 -34
  586. package/src/vite/shadcn-registry.ts +48 -48
  587. package/src/vite/sitemap.ts +78 -78
  588. package/src/vite/ssr-templates/cloudflare.ts +19 -19
  589. package/src/vite/ssr-templates/node.ts +25 -25
  590. package/src/vite/ssr-templates/vercel.ts +22 -22
  591. package/src/vite/watch-ignore.ts +70 -70
  592. package/src/vite/zuplo.ts +30 -30
  593. package/src/vite-env.d.ts +6 -6
  594. package/src/zuplo/enrich-with-zuplo-mcp.ts +168 -168
  595. package/src/zuplo/enrich-with-zuplo.ts +256 -256
  596. package/src/zuplo/policy-types.ts +46 -46
  597. package/src/zuplo/with-zuplo-processors.ts +36 -36
  598. package/src/zuplo/with-zuplo.ts +14 -14
  599. package/dist/declarations/cli/platform/client/deploy-server.d.ts +0 -16
@@ -1,221 +1,221 @@
1
- ---
2
- title: Protect your API with the gateway
3
- description:
4
- Put the APItoGo gateway in front of an API you already host. What each setting means, where to
5
- find the login values (OIDC), and how to write the rules yourself.
6
- sidebar_icon: shield
7
- ---
8
-
9
- The **gateway** sits in front of an API you already host. It checks who is calling, limits how
10
- often, and passes only the calls you allow to your API. You do not move your API.
11
-
12
- ```
13
- callers ──► APItoGo gateway ──► your API (stays where it is)
14
- │ checks the login token
15
- │ limits calls
16
- │ allows only the calls in your OpenAPI file
17
- └ your real API address stays hidden
18
- ```
19
-
20
- You set it up in one file, `apitogo.config.json`, in a `gateway` section.
21
-
22
- ## The smallest setup
23
-
24
- ```json
25
- {
26
- "version": 2,
27
- "gateway": {
28
- "origin": { "mode": "proxy", "url": "https://api.example.com", "healthPath": "/health" },
29
- "specs": ["apis/openapi.yaml"],
30
- "auth": {
31
- "mode": "oidc",
32
- "metadataUrl": "https://login.example.com/.well-known/openid-configuration",
33
- "issuers": ["https://login.example.com/"],
34
- "audiences": ["my-api"]
35
- },
36
- "policies": {
37
- "access": { "jwt": true, "apiKey": false },
38
- "rateLimit": { "calls": 60, "periodSeconds": 60 },
39
- "operations": { "public": ["GET /health"] }
40
- }
41
- }
42
- }
43
- ```
44
-
45
- `apitogo add gateway` writes the first part for you. The rest you write yourself, and the sections
46
- below explain every value.
47
-
48
- ## 1. Your API (`origin` and `specs`)
49
-
50
- | Setting | What to put there | Where to get it |
51
- | ------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
52
- | `origin.mode` | `proxy`: your API stays where it is. | Always `proxy` for an API you host. |
53
- | `origin.url` | The address of your API. It must be `https://`. | You already know it. It is where your API answers today. |
54
- | `origin.healthPath` | A path the platform can call to see that your API is alive, for example `/health`. | A cheap call on your API that needs no login. |
55
- | `specs` | The OpenAPI file or files that describe your API. | Your API's `openapi.yaml`, or the file your framework generates. |
56
-
57
- The gateway only lets through the calls listed in your OpenAPI file. A call that is not in the file
58
- is refused, so a forgotten path never leaks.
59
-
60
- ## 2. Who may call (`auth`)
61
-
62
- With `"mode": "oidc"` the caller sends a **login token** (a JWT) with each call:
63
- `Authorization: Bearer <token>`. The token comes from your own login provider, for example Auth0,
64
- Microsoft Entra ID, Okta or Keycloak. The gateway checks that the token is genuine, is from your
65
- provider and is meant for your API.
66
-
67
- You must give **all three** of these values. If one is missing, the deploy is blocked, so a settings
68
- mistake can never leave your API open.
69
-
70
- | Setting | What it is | How to find it |
71
- | ------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
72
- | `metadataUrl` | The address where the gateway reads your provider's public keys, so it can check a token's signature. | Your issuer address plus `/.well-known/openid-configuration`. |
73
- | `issuers` | Who is allowed to issue tokens. It must match the `iss` value in your tokens **exactly**. | The `issuer` field inside the metadata document (see below). |
74
- | `audiences` | Who the token is meant for. It must match the `aud` value in your tokens. | The identifier you gave your API at your provider. |
75
-
76
- ### Find the values in four steps
77
-
78
- 1. **Find your provider's issuer address.** It is on the provider's dashboard or in its docs.
79
- Typical shapes are in the table below.
80
- 2. **Open the metadata address in a browser.** Add `/.well-known/openid-configuration` to the issuer
81
- address. You see a JSON document. If you see an error, the address is wrong.
82
- 3. **Copy the `issuer` value from that document** into `issuers`, character for character, including
83
- a trailing `/` if it has one.
84
- 4. **Use the identifier of your API as `audiences`.** You create this identifier at your provider
85
- when you register your API. It is often called _API identifier_, _audience_ or _application ID
86
- URI_.
87
-
88
- ### Typical values by provider
89
-
90
- These are typical shapes. Always confirm them in your provider's dashboard.
91
-
92
- | Provider | Issuer | Audience |
93
- | ------------------ | ----------------------------------------------------------------------------- | -------------------------------------------------------------- |
94
- | Auth0 | `https://YOUR-TENANT.auth0.com/` (with the trailing `/`) | The _API identifier_ of your API in Auth0 |
95
- | Microsoft Entra ID | `https://login.microsoftonline.com/TENANT-ID/v2.0` | Your API's _Application ID URI_, for example `api://CLIENT-ID` |
96
- | Okta | `https://YOUR-ORG.okta.com/oauth2/default` (or your own authorization server) | The audience set on that authorization server |
97
- | Keycloak | `https://HOST/realms/YOUR-REALM` | The client or audience you configured for your API |
98
-
99
- In every case the metadata address is the issuer plus `/.well-known/openid-configuration`.
100
-
101
- ### Check a real token
102
-
103
- Ask your provider for a token for your API, then read what is inside it. The values `iss` and `aud`
104
- must match your `issuers` and `audiences`:
105
-
106
- ```bash
107
- node -p "JSON.parse(Buffer.from(process.argv[1].split('.')[1],'base64url').toString())" "PASTE-THE-TOKEN-HERE"
108
- ```
109
-
110
- A token is a login credential. Read it on your own computer, as above, and never share it.
111
-
112
- ### The most common mistakes
113
-
114
- | What you see | Usual cause |
115
- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
116
- | Every call answers `401` although the token looks right | `issuers` or `audiences` does not match `iss` or `aud` in the token. A trailing `/` is enough to break it. |
117
- | `apitogo check` or `deploy` says the auth settings are incomplete | One of `metadataUrl`, `issuers` or `audiences` is empty. All three are needed. |
118
- | The metadata address shows an error in the browser | The issuer address is wrong, or your provider uses a different path. Check its docs. |
119
-
120
- > **Not available yet:** `"mode": "identity"` (APItoGo's own sign-up and login for your end users)
121
- > is a planned service. For now, use `oidc` with your own provider.
122
-
123
- ## 3. The rules (`policies`)
124
-
125
- Rules go in `gateway.policies`. Write them by hand: they are a few lines each.
126
-
127
- ### `access`: who gets in
128
-
129
- ```json
130
- "access": { "jwt": true, "apiKey": false }
131
- ```
132
-
133
- | Setting | Effect |
134
- | -------- | ----------------------------------------------------------------------------------------------------------------------------- |
135
- | `jwt` | `true`: a valid login token is required. |
136
- | `apiKey` | `true`: a key in the `Ocp-Apim-Subscription-Key` header is required. Keys need the plans service, which is not available yet. |
137
-
138
- Set `access` yourself and do not rely on the default.
139
-
140
- ### `operations`: open a call to everyone, or close it
141
-
142
- ```json
143
- "operations": { "public": ["GET /health"], "deny": ["DELETE /orders"] }
144
- ```
145
-
146
- Each entry is `METHOD /path`, exactly as in your OpenAPI file.
147
-
148
- | List | Effect |
149
- | -------- | ------------------------------------------------------------------------------------ |
150
- | `public` | Anyone can call it, with no token. Use it for a health check or a public price list. |
151
- | `deny` | The gateway always refuses it, even with a valid token. |
152
-
153
- Every other call needs a login.
154
-
155
- ### `rateLimit` and `quota`: how often
156
-
157
- ```json
158
- "rateLimit": { "calls": 60, "periodSeconds": 60 },
159
- "quota": { "calls": 10000, "periodDays": 30 }
160
- ```
161
-
162
- | Setting | Effect |
163
- | ----------- | ---------------------------------------------------------------------------------------------------------------------- |
164
- | `rateLimit` | At most `calls` calls in every `periodSeconds` seconds. Extra calls get `429`. Use it to protect your API from bursts. |
165
- | `quota` | At most `calls` calls in every `periodDays` days. Use it for a monthly allowance. |
166
-
167
- ### `cors`: which websites may call from a browser
168
-
169
- ```json
170
- "cors": ["https://app.example.com"]
171
- ```
172
-
173
- A browser only lets a web page call your API if the API allows that page's site. List each site as
174
- `https://host` only: no path and no trailing `/`. An entry like `https://app.example.com/` is
175
- refused by `apitogo check`.
176
-
177
- ### Keep your API from being called directly
178
-
179
- Your API has a public address, so someone could skip the gateway. Make your API accept calls only
180
- with a secret that only the gateway sends:
181
-
182
- ```json
183
- "origin": {
184
- "mode": "proxy",
185
- "url": "https://api.example.com",
186
- "auth": { "type": "header", "name": "X-Gateway-Secret", "value": "secret:GATEWAY_SECRET" }
187
- }
188
- ```
189
-
190
- ```bash
191
- npx apitogo secrets set GATEWAY_SECRET
192
- ```
193
-
194
- The value is a reference, never the secret itself. The secret is stored encrypted and never shown
195
- again. Then make your API refuse any call without that header.
196
-
197
- ## 4. Try it and check it
198
-
199
- Run these before you deploy:
200
-
201
- ```bash
202
- npx apitogo check
203
- npx apitogo plan
204
- ```
205
-
206
- `check` finds mistakes in the file, offline. `plan` shows what a deploy would change and changes
207
- nothing. Then deploy and test the address that `apitogo status` shows:
208
-
209
- ```bash
210
- npx apitogo deploy --only gateway
211
- curl -i https://YOUR-GATEWAY-ADDRESS/health
212
- curl -i https://YOUR-GATEWAY-ADDRESS/orders
213
- ```
214
-
215
- | Answer | Meaning |
216
- | ------------------------------- | ------------------------------------------------------------- |
217
- | `200` on a public call | The call is open and your API answered. |
218
- | `401` on a call without a token | The gateway is protecting that call. |
219
- | `404` | The path is not in your OpenAPI file. |
220
- | `429` | The rate limit was reached. |
221
- | `502` or `504` | Your API did not answer. Check `origin.url` and `healthPath`. |
1
+ ---
2
+ title: Protect your API with the gateway
3
+ description:
4
+ Put the APItoGo gateway in front of an API you already host. What each setting means, where to
5
+ find the login values (OIDC), and how to write the rules yourself.
6
+ sidebar_icon: shield
7
+ ---
8
+
9
+ The **gateway** sits in front of an API you already host. It checks who is calling, limits how
10
+ often, and passes only the calls you allow to your API. You do not move your API.
11
+
12
+ ```
13
+ callers ──► APItoGo gateway ──► your API (stays where it is)
14
+ │ checks the login token
15
+ │ limits calls
16
+ │ allows only the calls in your OpenAPI file
17
+ └ your real API address stays hidden
18
+ ```
19
+
20
+ You set it up in one file, `apitogo.config.json`, in a `gateway` section.
21
+
22
+ ## The smallest setup
23
+
24
+ ```json
25
+ {
26
+ "version": 2,
27
+ "gateway": {
28
+ "origin": { "mode": "proxy", "url": "https://api.example.com", "healthPath": "/health" },
29
+ "specs": ["apis/openapi.yaml"],
30
+ "auth": {
31
+ "mode": "oidc",
32
+ "metadataUrl": "https://login.example.com/.well-known/openid-configuration",
33
+ "issuers": ["https://login.example.com/"],
34
+ "audiences": ["my-api"]
35
+ },
36
+ "policies": {
37
+ "access": { "jwt": true, "apiKey": false },
38
+ "rateLimit": { "calls": 60, "periodSeconds": 60 },
39
+ "operations": { "public": ["GET /health"] }
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ `apitogo add gateway` writes the first part for you. The rest you write yourself, and the sections
46
+ below explain every value.
47
+
48
+ ## 1. Your API (`origin` and `specs`)
49
+
50
+ | Setting | What to put there | Where to get it |
51
+ | ------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
52
+ | `origin.mode` | `proxy`: your API stays where it is. | Always `proxy` for an API you host. |
53
+ | `origin.url` | The address of your API. It must be `https://`. | You already know it. It is where your API answers today. |
54
+ | `origin.healthPath` | A path the platform can call to see that your API is alive, for example `/health`. | A cheap call on your API that needs no login. |
55
+ | `specs` | The OpenAPI file or files that describe your API. | Your API's `openapi.yaml`, or the file your framework generates. |
56
+
57
+ The gateway only lets through the calls listed in your OpenAPI file. A call that is not in the file
58
+ is refused, so a forgotten path never leaks.
59
+
60
+ ## 2. Who may call (`auth`)
61
+
62
+ With `"mode": "oidc"` the caller sends a **login token** (a JWT) with each call:
63
+ `Authorization: Bearer <token>`. The token comes from your own login provider, for example Auth0,
64
+ Microsoft Entra ID, Okta or Keycloak. The gateway checks that the token is genuine, is from your
65
+ provider and is meant for your API.
66
+
67
+ You must give **all three** of these values. If one is missing, the deploy is blocked, so a settings
68
+ mistake can never leave your API open.
69
+
70
+ | Setting | What it is | How to find it |
71
+ | ------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
72
+ | `metadataUrl` | The address where the gateway reads your provider's public keys, so it can check a token's signature. | Your issuer address plus `/.well-known/openid-configuration`. |
73
+ | `issuers` | Who is allowed to issue tokens. It must match the `iss` value in your tokens **exactly**. | The `issuer` field inside the metadata document (see below). |
74
+ | `audiences` | Who the token is meant for. It must match the `aud` value in your tokens. | The identifier you gave your API at your provider. |
75
+
76
+ ### Find the values in four steps
77
+
78
+ 1. **Find your provider's issuer address.** It is on the provider's dashboard or in its docs.
79
+ Typical shapes are in the table below.
80
+ 2. **Open the metadata address in a browser.** Add `/.well-known/openid-configuration` to the issuer
81
+ address. You see a JSON document. If you see an error, the address is wrong.
82
+ 3. **Copy the `issuer` value from that document** into `issuers`, character for character, including
83
+ a trailing `/` if it has one.
84
+ 4. **Use the identifier of your API as `audiences`.** You create this identifier at your provider
85
+ when you register your API. It is often called _API identifier_, _audience_ or _application ID
86
+ URI_.
87
+
88
+ ### Typical values by provider
89
+
90
+ These are typical shapes. Always confirm them in your provider's dashboard.
91
+
92
+ | Provider | Issuer | Audience |
93
+ | ------------------ | ----------------------------------------------------------------------------- | -------------------------------------------------------------- |
94
+ | Auth0 | `https://YOUR-TENANT.auth0.com/` (with the trailing `/`) | The _API identifier_ of your API in Auth0 |
95
+ | Microsoft Entra ID | `https://login.microsoftonline.com/TENANT-ID/v2.0` | Your API's _Application ID URI_, for example `api://CLIENT-ID` |
96
+ | Okta | `https://YOUR-ORG.okta.com/oauth2/default` (or your own authorization server) | The audience set on that authorization server |
97
+ | Keycloak | `https://HOST/realms/YOUR-REALM` | The client or audience you configured for your API |
98
+
99
+ In every case the metadata address is the issuer plus `/.well-known/openid-configuration`.
100
+
101
+ ### Check a real token
102
+
103
+ Ask your provider for a token for your API, then read what is inside it. The values `iss` and `aud`
104
+ must match your `issuers` and `audiences`:
105
+
106
+ ```bash
107
+ node -p "JSON.parse(Buffer.from(process.argv[1].split('.')[1],'base64url').toString())" "PASTE-THE-TOKEN-HERE"
108
+ ```
109
+
110
+ A token is a login credential. Read it on your own computer, as above, and never share it.
111
+
112
+ ### The most common mistakes
113
+
114
+ | What you see | Usual cause |
115
+ | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
116
+ | Every call answers `401` although the token looks right | `issuers` or `audiences` does not match `iss` or `aud` in the token. A trailing `/` is enough to break it. |
117
+ | `apitogo check` or `deploy` says the auth settings are incomplete | One of `metadataUrl`, `issuers` or `audiences` is empty. All three are needed. |
118
+ | The metadata address shows an error in the browser | The issuer address is wrong, or your provider uses a different path. Check its docs. |
119
+
120
+ > **Not available yet:** `"mode": "identity"` (APItoGo's own sign-up and login for your end users)
121
+ > is a planned service. For now, use `oidc` with your own provider.
122
+
123
+ ## 3. The rules (`policies`)
124
+
125
+ Rules go in `gateway.policies`. Write them by hand: they are a few lines each.
126
+
127
+ ### `access`: who gets in
128
+
129
+ ```json
130
+ "access": { "jwt": true, "apiKey": false }
131
+ ```
132
+
133
+ | Setting | Effect |
134
+ | -------- | ----------------------------------------------------------------------------------------------------------------------------- |
135
+ | `jwt` | `true`: a valid login token is required. |
136
+ | `apiKey` | `true`: a key in the `Ocp-Apim-Subscription-Key` header is required. Keys need the plans service, which is not available yet. |
137
+
138
+ Set `access` yourself and do not rely on the default.
139
+
140
+ ### `operations`: open a call to everyone, or close it
141
+
142
+ ```json
143
+ "operations": { "public": ["GET /health"], "deny": ["DELETE /orders"] }
144
+ ```
145
+
146
+ Each entry is `METHOD /path`, exactly as in your OpenAPI file.
147
+
148
+ | List | Effect |
149
+ | -------- | ------------------------------------------------------------------------------------ |
150
+ | `public` | Anyone can call it, with no token. Use it for a health check or a public price list. |
151
+ | `deny` | The gateway always refuses it, even with a valid token. |
152
+
153
+ Every other call needs a login.
154
+
155
+ ### `rateLimit` and `quota`: how often
156
+
157
+ ```json
158
+ "rateLimit": { "calls": 60, "periodSeconds": 60 },
159
+ "quota": { "calls": 10000, "periodDays": 30 }
160
+ ```
161
+
162
+ | Setting | Effect |
163
+ | ----------- | ---------------------------------------------------------------------------------------------------------------------- |
164
+ | `rateLimit` | At most `calls` calls in every `periodSeconds` seconds. Extra calls get `429`. Use it to protect your API from bursts. |
165
+ | `quota` | At most `calls` calls in every `periodDays` days. Use it for a monthly allowance. |
166
+
167
+ ### `cors`: which websites may call from a browser
168
+
169
+ ```json
170
+ "cors": ["https://app.example.com"]
171
+ ```
172
+
173
+ A browser only lets a web page call your API if the API allows that page's site. List each site as
174
+ `https://host` only: no path and no trailing `/`. An entry like `https://app.example.com/` is
175
+ refused by `apitogo check`.
176
+
177
+ ### Keep your API from being called directly
178
+
179
+ Your API has a public address, so someone could skip the gateway. Make your API accept calls only
180
+ with a secret that only the gateway sends:
181
+
182
+ ```json
183
+ "origin": {
184
+ "mode": "proxy",
185
+ "url": "https://api.example.com",
186
+ "auth": { "type": "header", "name": "X-Gateway-Secret", "value": "secret:GATEWAY_SECRET" }
187
+ }
188
+ ```
189
+
190
+ ```bash
191
+ npx apitogo secrets set GATEWAY_SECRET
192
+ ```
193
+
194
+ The value is a reference, never the secret itself. The secret is stored encrypted and never shown
195
+ again. Then make your API refuse any call without that header.
196
+
197
+ ## 4. Try it and check it
198
+
199
+ Run these before you deploy:
200
+
201
+ ```bash
202
+ npx apitogo check
203
+ npx apitogo plan
204
+ ```
205
+
206
+ `check` finds mistakes in the file, offline. `plan` shows what a deploy would change and changes
207
+ nothing. Then deploy and test the address that `apitogo status` shows:
208
+
209
+ ```bash
210
+ npx apitogo deploy --only gateway
211
+ curl -i https://YOUR-GATEWAY-ADDRESS/health
212
+ curl -i https://YOUR-GATEWAY-ADDRESS/orders
213
+ ```
214
+
215
+ | Answer | Meaning |
216
+ | ------------------------------- | ------------------------------------------------------------- |
217
+ | `200` on a public call | The call is open and your API answered. |
218
+ | `401` on a call without a token | The gateway is protecting that call. |
219
+ | `404` | The path is not in your OpenAPI file. |
220
+ | `429` | The rate limit was reached. |
221
+ | `502` or `504` | Your API did not answer. Check `origin.url` and `healthPath`. |
@@ -1,90 +1,90 @@
1
- ---
2
- title: LLM-Friendly Documentation Export
3
- navigation_label: llms.txt
4
- navigation_icon: bot
5
- ---
6
-
7
- APIToGo can generate LLM-friendly versions of your documentation following the
8
- [llms.txt](https://llmstxt.org/) specification.
9
-
10
- During build, you can optionally generate:
11
-
12
- - **`.md` files** - Individual pages with frontmatter removed (via `publishMarkdown`)
13
- - **`llms.txt`** - Summary with links to all pages
14
- - **`llms-full.txt`** - Complete documentation in one file
15
-
16
- All options are disabled by default.
17
-
18
- ## Configuration
19
-
20
- LLM features are configured through the `docs` section in your config:
21
-
22
- ```tsx title="config"
23
- export default {
24
- docs: {
25
- files: "pages/**/*.{md,mdx}", // Your markdown files
26
- publishMarkdown: true, // Generate .md files
27
- llms: {
28
- llmsTxt: true, // Generate llms.txt
29
- llmsTxtFull: true, // Generate llms-full.txt
30
- includeProtected: false, // Exclude protected routes
31
- },
32
- },
33
- };
34
- ```
35
-
36
- All options are disabled by default.
37
-
38
- :::tip
39
-
40
- When enabled, markdown files are generated during build and deleted after creating the `llms.txt`
41
- files unless `publishMarkdown: true` is set (see
42
- [`publishMarkdown` docs](/docs/configuration/docs#publishmarkdown)).
43
-
44
- :::
45
-
46
- ### `llmsTxt`
47
-
48
- **Type:** `boolean` **Default:** `false`
49
-
50
- Generates an `llms.txt` file with links to all documentation pages:
51
-
52
- ```markdown title="llms.txt"
53
- # Documentation
54
-
55
- - [Quickstart](/docs/quickstart.md): Get started with APIToGo
56
- - [Writing](/docs/writing.md): A guide to writing documentation
57
- ```
58
-
59
- ### `llmsTxtFull`
60
-
61
- **Type:** `boolean` **Default:** `false`
62
-
63
- Generates `llms-full.txt` containing the complete content of all pages.
64
-
65
- ### `includeProtected`
66
-
67
- **Type:** `boolean` **Default:** `false`
68
-
69
- By default, protected routes are excluded. Set to `true` to include them in the generated files.
70
-
71
- ## Output
72
-
73
- Generated files are available in the output directory after build:
74
-
75
- ```text
76
- dist/
77
- ├── llms.txt # Generated if llmsTxt: true
78
- ├── llms-full.txt # Generated if llmsTxtFull: true
79
- └── docs/
80
- ├── quickstart.md # Generated if publishMarkdown: true
81
- ├── writing.md
82
- └── ...
83
- ```
84
-
85
- **Important:** Individual `.md` files are only kept in the final build if `publishMarkdown: true`.
86
- If only `llmsTxt` or `llmsTxtFull` is enabled, the `.md` files are generated temporarily during the
87
- build but deleted after the `llms.txt` files are created.
88
-
89
- Redirect pages, error pages (400, 404, 500), and protected routes (unless `includeProtected: true`)
90
- are automatically excluded from all generated files.
1
+ ---
2
+ title: LLM-Friendly Documentation Export
3
+ navigation_label: llms.txt
4
+ navigation_icon: bot
5
+ ---
6
+
7
+ APIToGo can generate LLM-friendly versions of your documentation following the
8
+ [llms.txt](https://llmstxt.org/) specification.
9
+
10
+ During build, you can optionally generate:
11
+
12
+ - **`.md` files** - Individual pages with frontmatter removed (via `publishMarkdown`)
13
+ - **`llms.txt`** - Summary with links to all pages
14
+ - **`llms-full.txt`** - Complete documentation in one file
15
+
16
+ All options are disabled by default.
17
+
18
+ ## Configuration
19
+
20
+ LLM features are configured through the `docs` section in your config:
21
+
22
+ ```tsx title="config"
23
+ export default {
24
+ docs: {
25
+ files: "pages/**/*.{md,mdx}", // Your markdown files
26
+ publishMarkdown: true, // Generate .md files
27
+ llms: {
28
+ llmsTxt: true, // Generate llms.txt
29
+ llmsTxtFull: true, // Generate llms-full.txt
30
+ includeProtected: false, // Exclude protected routes
31
+ },
32
+ },
33
+ };
34
+ ```
35
+
36
+ All options are disabled by default.
37
+
38
+ :::tip
39
+
40
+ When enabled, markdown files are generated during build and deleted after creating the `llms.txt`
41
+ files unless `publishMarkdown: true` is set (see
42
+ [`publishMarkdown` docs](/docs/configuration/docs#publishmarkdown)).
43
+
44
+ :::
45
+
46
+ ### `llmsTxt`
47
+
48
+ **Type:** `boolean` **Default:** `false`
49
+
50
+ Generates an `llms.txt` file with links to all documentation pages:
51
+
52
+ ```markdown title="llms.txt"
53
+ # Documentation
54
+
55
+ - [Quickstart](/docs/quickstart.md): Get started with APIToGo
56
+ - [Writing](/docs/writing.md): A guide to writing documentation
57
+ ```
58
+
59
+ ### `llmsTxtFull`
60
+
61
+ **Type:** `boolean` **Default:** `false`
62
+
63
+ Generates `llms-full.txt` containing the complete content of all pages.
64
+
65
+ ### `includeProtected`
66
+
67
+ **Type:** `boolean` **Default:** `false`
68
+
69
+ By default, protected routes are excluded. Set to `true` to include them in the generated files.
70
+
71
+ ## Output
72
+
73
+ Generated files are available in the output directory after build:
74
+
75
+ ```text
76
+ dist/
77
+ ├── llms.txt # Generated if llmsTxt: true
78
+ ├── llms-full.txt # Generated if llmsTxtFull: true
79
+ └── docs/
80
+ ├── quickstart.md # Generated if publishMarkdown: true
81
+ ├── writing.md
82
+ └── ...
83
+ ```
84
+
85
+ **Important:** Individual `.md` files are only kept in the final build if `publishMarkdown: true`.
86
+ If only `llmsTxt` or `llmsTxtFull` is enabled, the `.md` files are generated temporarily during the
87
+ build but deleted after the `llms.txt` files are created.
88
+
89
+ Redirect pages, error pages (400, 404, 500), and protected routes (unless `includeProtected: true`)
90
+ are automatically excluded from all generated files.