@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.
- package/README.md +94 -94
- package/cli.js +13 -13
- package/client.d.ts +8 -8
- package/dist/cli/cli.js +561 -232
- package/dist/declarations/cli/platform/client/platform-api.d.ts +18 -0
- package/dist/declarations/config/validators/InputNavigationSchema.d.ts +7 -7
- package/dist/declarations/config/validators/ZudokuConfig.d.ts +1 -1
- package/docs/cli/commands.md +75 -75
- package/docs/cli/go-live.md +123 -123
- package/docs/cli/overview.md +91 -91
- package/docs/cli/setup.md +141 -141
- package/docs/cli/shape.md +127 -127
- package/docs/components/alert.mdx +130 -130
- package/docs/components/badge.mdx +70 -70
- package/docs/components/button.mdx +132 -132
- package/docs/components/callout.mdx +112 -112
- package/docs/components/card.mdx +104 -104
- package/docs/components/checkbox.mdx +72 -72
- package/docs/components/client-only.mdx +79 -79
- package/docs/components/code-tabs.mdx +179 -179
- package/docs/components/dialog.mdx +167 -167
- package/docs/components/head.mdx +200 -200
- package/docs/components/icons.mdx +27 -27
- package/docs/components/input.mdx +96 -96
- package/docs/components/label.mdx +86 -86
- package/docs/components/link.mdx +242 -242
- package/docs/components/markdown.mdx +151 -151
- package/docs/components/mermaid.mdx +81 -81
- package/docs/components/playground.mdx +85 -85
- package/docs/components/secret.mdx +79 -79
- package/docs/components/select.mdx +176 -176
- package/docs/components/shadcn.mdx +73 -73
- package/docs/components/slider.mdx +108 -108
- package/docs/components/slot.mdx +119 -119
- package/docs/components/stepper.mdx +138 -138
- package/docs/components/switch.mdx +96 -96
- package/docs/components/syntax-highlight.mdx +602 -602
- package/docs/components/textarea.mdx +78 -78
- package/docs/components/tooltip.mdx +195 -195
- package/docs/components/typography.mdx +61 -61
- package/docs/components.mdx +60 -60
- package/docs/concepts/auth-provider-api-identities.md +105 -105
- package/docs/configuration/ai-assistants.md +65 -65
- package/docs/configuration/api-catalog.md +109 -109
- package/docs/configuration/api-reference.md +397 -397
- package/docs/configuration/authentication-auth0.md +181 -181
- package/docs/configuration/authentication-azure-ad.md +245 -245
- package/docs/configuration/authentication-clerk.md +117 -117
- package/docs/configuration/authentication-firebase.md +69 -69
- package/docs/configuration/authentication-pingfederate.md +143 -143
- package/docs/configuration/authentication-supabase.md +233 -233
- package/docs/configuration/authentication.md +159 -159
- package/docs/configuration/build-configuration.mdx +147 -147
- package/docs/configuration/docs.md +282 -282
- package/docs/configuration/footer.mdx +118 -118
- package/docs/configuration/gateway.md +221 -221
- package/docs/configuration/llms.md +90 -90
- package/docs/configuration/make-config.mdx +124 -124
- package/docs/configuration/manifest.md +128 -128
- package/docs/configuration/navigation.mdx +421 -421
- package/docs/configuration/overview.md +166 -166
- package/docs/configuration/plans.md +153 -153
- package/docs/configuration/protected-routes.md +150 -150
- package/docs/configuration/search.md +164 -164
- package/docs/configuration/sentry.mdx +44 -44
- package/docs/configuration/site.md +124 -124
- package/docs/configuration/slots.mdx +125 -125
- package/docs/configuration/vite-config.md +18 -18
- package/docs/custom-plugins.md +285 -285
- package/docs/customization/colors-theme.mdx +278 -278
- package/docs/customization/fonts.md +110 -110
- package/docs/customization/landing-page.md +188 -188
- package/docs/deploy/apache-nginx.md +41 -41
- package/docs/deploy/apitogo.md +17 -17
- package/docs/deploy/cloudflare-pages.md +74 -74
- package/docs/deploy/direct-upload.md +17 -17
- package/docs/deploy/github-pages.md +49 -49
- package/docs/deploy/vercel.md +101 -101
- package/docs/deployment.md +9 -9
- package/docs/extending/events.md +124 -124
- package/docs/guides/custom-pages.md +110 -110
- package/docs/guides/environment-variables.md +94 -94
- package/docs/guides/managing-api-keys-and-identities.md +89 -89
- package/docs/guides/mermaid.mdx +70 -70
- package/docs/guides/navigation-rules.mdx +203 -203
- package/docs/guides/processors.mdx +234 -234
- package/docs/guides/static-files.md +55 -55
- package/docs/guides/transforming-examples.md +156 -156
- package/docs/guides/using-multiple-apis.md +87 -87
- package/docs/markdown/admonitions.md +128 -128
- package/docs/markdown/code-blocks.md +196 -196
- package/docs/markdown/frontmatter.md +173 -173
- package/docs/markdown/mdx.md +68 -68
- package/docs/markdown/overview.md +275 -275
- package/docs/mcp/go-live.md +100 -100
- package/docs/mcp/overview.md +76 -76
- package/docs/mcp/setup.md +173 -173
- package/docs/mcp/shape.md +77 -77
- package/docs/mcp/tools.md +102 -102
- package/docs/plugins.md +24 -24
- package/docs/quickstart.md +72 -72
- package/docs/writing.mdx +72 -72
- package/package.json +1 -1
- package/src/app/ZuploBuildConfig.ts +36 -36
- package/src/app/apitogoBrandTheme.ts +47 -47
- package/src/app/defaultTheme.css +77 -77
- package/src/app/demo-cdn.html +37 -37
- package/src/app/demo.html +21 -21
- package/src/app/demo.tsx +77 -77
- package/src/app/entry.client.tsx +107 -107
- package/src/app/entry.server.tsx +160 -160
- package/src/app/env.ts +40 -40
- package/src/app/main.css +400 -400
- package/src/app/main.tsx +167 -167
- package/src/app/polyfills.ts +47 -47
- package/src/app/processRoutes.tsx +51 -51
- package/src/app/sentry.ts +24 -24
- package/src/app/standalone.html +23 -23
- package/src/app/standalone.tsx +60 -60
- package/src/app/utils/createRedirectRoutes.ts +11 -11
- package/src/config/apitogo-config-core.ts +7 -3
- package/src/config/apitogo-config-loader.browser.ts +17 -17
- package/src/config/apitogo-config-loader.node.ts +88 -88
- package/src/config/apitogo-config-loader.ts +6 -6
- package/src/config/build-apitogo-config.ts +61 -61
- package/src/config/config.ts +74 -74
- package/src/config/create-plugin.ts +71 -71
- package/src/config/default-landing-content.ts +149 -149
- package/src/config/file-exists.ts +6 -6
- package/src/config/gateway-limits.ts +128 -128
- package/src/config/landing-manifest.ts +11 -11
- package/src/config/landing-openapi-showcase.ts +124 -124
- package/src/config/loader.ts +375 -375
- package/src/config/local-manifest.ts +545 -545
- package/src/config/resolve-modules.ts +354 -354
- package/src/config/v2/__fixtures__/scenario-a-docs-only.json +6 -6
- package/src/config/v2/__fixtures__/scenario-b-managed-origin.json +14 -14
- package/src/config/v2/__fixtures__/scenario-c-proxy-oidc.json +15 -15
- package/src/config/v2/__fixtures__/scenario-h-full-stack.json +28 -28
- package/src/config/v2/docs-navigation.ts +72 -72
- package/src/config/v2/errors.ts +42 -42
- package/src/config/v2/gateway-reference.ts +220 -220
- package/src/config/v2/gateway-request.ts +123 -123
- package/src/config/v2/home-redirect.ts +98 -98
- package/src/config/v2/index.ts +126 -126
- package/src/config/v2/init.ts +273 -273
- package/src/config/v2/layout.ts +237 -237
- package/src/config/v2/ledger.ts +235 -235
- package/src/config/v2/link-directory.ts +34 -0
- package/src/config/v2/load.ts +70 -70
- package/src/config/v2/manifest.ts +452 -452
- package/src/config/v2/parse.ts +214 -214
- package/src/config/v2/paths.ts +54 -54
- package/src/config/v2/portal-profile.ts +88 -88
- package/src/config/v2/resolve.ts +188 -188
- package/src/config/v2/rules.ts +714 -714
- package/src/config/v2/schema.ts +245 -245
- package/src/config/v2/services.ts +663 -663
- package/src/config/v2/workspace.ts +3 -2
- package/src/config/v2/wrapper.ts +24 -2
- package/src/config/validators/BuildSchema.ts +95 -95
- package/src/config/validators/HeaderNavigationSchema.ts +44 -44
- package/src/config/validators/InputNavigationSchema.test-d.ts +178 -178
- package/src/config/validators/InputNavigationSchema.ts +206 -206
- package/src/config/validators/ModulesSchema.ts +502 -502
- package/src/config/validators/NavigationSchema.ts +352 -352
- package/src/config/validators/ProtectedRoutesSchema.ts +35 -35
- package/src/config/validators/ZudokuConfig.ts +792 -792
- package/src/config/validators/auth.ts +3 -3
- package/src/config/validators/reason-codes.ts +7 -7
- package/src/env.d.ts +11 -11
- package/src/index.ts +83 -83
- package/src/lib/MissingIcon.tsx +22 -22
- package/src/lib/assets/language-icons/bun.tsx +50 -50
- package/src/lib/assets/language-icons/c.tsx +31 -31
- package/src/lib/assets/language-icons/commonlisp.tsx +22 -22
- package/src/lib/assets/language-icons/cpp.tsx +35 -35
- package/src/lib/assets/language-icons/csharp.tsx +35 -35
- package/src/lib/assets/language-icons/css.tsx +36 -36
- package/src/lib/assets/language-icons/dart.tsx +39 -39
- package/src/lib/assets/language-icons/elixir.tsx +19 -19
- package/src/lib/assets/language-icons/go.tsx +19 -19
- package/src/lib/assets/language-icons/graphql.tsx +19 -19
- package/src/lib/assets/language-icons/html.tsx +24 -24
- package/src/lib/assets/language-icons/java.tsx +35 -35
- package/src/lib/assets/language-icons/javascript.tsx +11 -11
- package/src/lib/assets/language-icons/json.tsx +19 -19
- package/src/lib/assets/language-icons/kotlin.tsx +30 -30
- package/src/lib/assets/language-icons/markdown.tsx +19 -19
- package/src/lib/assets/language-icons/mdx.tsx +23 -23
- package/src/lib/assets/language-icons/npm.tsx +15 -15
- package/src/lib/assets/language-icons/objectivec.tsx +23 -23
- package/src/lib/assets/language-icons/ocaml.tsx +34 -34
- package/src/lib/assets/language-icons/php.tsx +19 -19
- package/src/lib/assets/language-icons/pnpm.tsx +32 -32
- package/src/lib/assets/language-icons/powershell.tsx +27 -27
- package/src/lib/assets/language-icons/python.tsx +23 -23
- package/src/lib/assets/language-icons/react.tsx +21 -21
- package/src/lib/assets/language-icons/ruby.tsx +19 -19
- package/src/lib/assets/language-icons/rust.tsx +19 -19
- package/src/lib/assets/language-icons/scala.tsx +19 -19
- package/src/lib/assets/language-icons/shell.tsx +19 -19
- package/src/lib/assets/language-icons/swift.tsx +19 -19
- package/src/lib/assets/language-icons/toml.tsx +23 -23
- package/src/lib/assets/language-icons/typescript.tsx +23 -23
- package/src/lib/assets/language-icons/xml.tsx +19 -19
- package/src/lib/assets/language-icons/yaml.tsx +23 -23
- package/src/lib/assets/language-icons/yarn.tsx +17 -17
- package/src/lib/assets/language-icons/zig.tsx +32 -32
- package/src/lib/auth/issuer.ts +34 -34
- package/src/lib/authentication/AuthenticationPlugin.tsx +33 -33
- package/src/lib/authentication/auth-header-nav.ts +46 -46
- package/src/lib/authentication/authentication.ts +51 -51
- package/src/lib/authentication/components/CallbackHandler.tsx +45 -45
- package/src/lib/authentication/components/OAuthErrorPage.tsx +197 -197
- package/src/lib/authentication/components/ProductionUnlockPage.tsx +26 -26
- package/src/lib/authentication/components/SignIn.tsx +46 -46
- package/src/lib/authentication/components/SignOut.tsx +15 -15
- package/src/lib/authentication/components/SignUp.tsx +48 -48
- package/src/lib/authentication/constants.ts +1 -1
- package/src/lib/authentication/errors.ts +34 -34
- package/src/lib/authentication/header-nav-filter.ts +35 -35
- package/src/lib/authentication/hook.ts +141 -141
- package/src/lib/authentication/providers/auth0.tsx +91 -91
- package/src/lib/authentication/providers/azureb2c.tsx +223 -223
- package/src/lib/authentication/providers/clerk.tsx +224 -224
- package/src/lib/authentication/providers/dev-portal-auth-pages.tsx +602 -602
- package/src/lib/authentication/providers/dev-portal-constants.ts +38 -38
- package/src/lib/authentication/providers/dev-portal-demo.ts +151 -151
- package/src/lib/authentication/providers/dev-portal-utils.ts +279 -279
- package/src/lib/authentication/providers/dev-portal.tsx +448 -448
- package/src/lib/authentication/providers/firebase.tsx +486 -486
- package/src/lib/authentication/providers/openid.tsx +516 -516
- package/src/lib/authentication/providers/supabase.tsx +412 -412
- package/src/lib/authentication/providers/util.ts +26 -26
- package/src/lib/authentication/state.ts +180 -180
- package/src/lib/authentication/ui/AuthCard.tsx +7 -7
- package/src/lib/authentication/ui/EmailLinkCallbackUi.tsx +129 -129
- package/src/lib/authentication/ui/EmailLinkSentUi.tsx +105 -105
- package/src/lib/authentication/ui/EmailLinkSignInUi.tsx +100 -100
- package/src/lib/authentication/ui/EmailVerificationUi.tsx +128 -128
- package/src/lib/authentication/ui/ZudokuAuthUi.tsx +620 -620
- package/src/lib/authentication/ui/icons/Apple.tsx +10 -10
- package/src/lib/authentication/ui/icons/Facebook.tsx +15 -15
- package/src/lib/authentication/ui/icons/Github.tsx +16 -16
- package/src/lib/authentication/ui/icons/Google.tsx +16 -16
- package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -12
- package/src/lib/authentication/ui/icons/X.tsx +10 -10
- package/src/lib/authentication/utils/relativeRedirectUrl.ts +16 -16
- package/src/lib/components/AiAssistantMenuItems.tsx +102 -102
- package/src/lib/components/AnchorLink.tsx +24 -24
- package/src/lib/components/Autocomplete.tsx +123 -123
- package/src/lib/components/Banner.tsx +52 -52
- package/src/lib/components/Bootstrap.tsx +77 -77
- package/src/lib/components/BuildCheck.tsx +87 -87
- package/src/lib/components/CategoryHeading.tsx +19 -19
- package/src/lib/components/ClientOnly.tsx +19 -19
- package/src/lib/components/DeveloperHint.tsx +39 -39
- package/src/lib/components/ErrorPage.tsx +26 -26
- package/src/lib/components/Footer.tsx +146 -146
- package/src/lib/components/Framed.tsx +51 -51
- package/src/lib/components/Header.tsx +261 -261
- package/src/lib/components/HeaderAuthActions.tsx +32 -32
- package/src/lib/components/HeaderNavigation.tsx +176 -176
- package/src/lib/components/Heading.tsx +84 -84
- package/src/lib/components/InlineCode.tsx +15 -15
- package/src/lib/components/LandingLayout.tsx +27 -27
- package/src/lib/components/LanguageIcon.tsx +199 -199
- package/src/lib/components/Layout.tsx +59 -59
- package/src/lib/components/Main.tsx +52 -52
- package/src/lib/components/Markdown.tsx +55 -55
- package/src/lib/components/Mermaid.tsx +74 -74
- package/src/lib/components/Meta.tsx +46 -46
- package/src/lib/components/MobileTopNavigation.tsx +283 -283
- package/src/lib/components/MultiSelect.tsx +86 -86
- package/src/lib/components/NotFoundPage.tsx +37 -37
- package/src/lib/components/PageProgress.tsx +28 -28
- package/src/lib/components/PagefindSearchMeta.tsx +14 -14
- package/src/lib/components/Pagination.tsx +44 -44
- package/src/lib/components/PathRenderer.tsx +61 -61
- package/src/lib/components/PluginHeads.tsx +17 -17
- package/src/lib/components/Search.tsx +70 -70
- package/src/lib/components/SiteTitle.tsx +58 -58
- package/src/lib/components/Slot.tsx +65 -65
- package/src/lib/components/Spinner.tsx +5 -5
- package/src/lib/components/StatusPage.tsx +96 -96
- package/src/lib/components/ThemeSwitch.tsx +99 -99
- package/src/lib/components/TopNavigation.tsx +90 -90
- package/src/lib/components/Typography.tsx +12 -12
- package/src/lib/components/Zudoku.tsx +105 -105
- package/src/lib/components/cache.ts +27 -27
- package/src/lib/components/context/RenderContext.ts +11 -11
- package/src/lib/components/context/RouterEventsEmitter.tsx +19 -19
- package/src/lib/components/context/SlotProvider.tsx +149 -149
- package/src/lib/components/context/ViewportAnchorContext.tsx +137 -137
- package/src/lib/components/context/ZudokuContext.ts +140 -140
- package/src/lib/components/context/ZudokuProvider.tsx +20 -20
- package/src/lib/components/context/ZudokuReactContext.tsx +17 -17
- package/src/lib/components/index.ts +36 -36
- package/src/lib/components/navigation/Navigation.tsx +51 -51
- package/src/lib/components/navigation/NavigationBadge.tsx +48 -48
- package/src/lib/components/navigation/NavigationCategory.tsx +157 -157
- package/src/lib/components/navigation/NavigationFilterContext.tsx +28 -28
- package/src/lib/components/navigation/NavigationFilterInput.tsx +35 -35
- package/src/lib/components/navigation/NavigationItem.tsx +181 -181
- package/src/lib/components/navigation/NavigationWrapper.tsx +49 -49
- package/src/lib/components/navigation/PoweredByZudoku.tsx +39 -39
- package/src/lib/components/navigation/Toc.tsx +137 -137
- package/src/lib/components/navigation/ZudokuLogo.tsx +25 -25
- package/src/lib/components/navigation/ZuploLogo.tsx +14 -14
- package/src/lib/components/navigation/utils.ts +234 -234
- package/src/lib/core/RouteGuard.tsx +260 -260
- package/src/lib/core/ZudokuContext.ts +272 -272
- package/src/lib/core/plugins.ts +139 -139
- package/src/lib/core/react-query.ts +1 -1
- package/src/lib/core/router.ts +1 -1
- package/src/lib/core/transform-config.ts +67 -67
- package/src/lib/demo/DemoAnnouncement.tsx +17 -17
- package/src/lib/errors/ErrorAlert.tsx +28 -28
- package/src/lib/errors/ErrorMessage.tsx +50 -50
- package/src/lib/errors/RouterError.tsx +18 -18
- package/src/lib/errors/ServerError.tsx +5 -5
- package/src/lib/errors/TopLevelError.tsx +6 -6
- package/src/lib/hooks/index.ts +13 -13
- package/src/lib/hooks/useEvent.ts +41 -41
- package/src/lib/hooks/useHighlighter.ts +15 -15
- package/src/lib/hooks/useHotkey.ts +70 -70
- package/src/lib/icons.ts +2 -2
- package/src/lib/navigation/applyRules.ts +127 -127
- package/src/lib/navigation/pathMatcher.ts +81 -81
- package/src/lib/oas/graphql/circular.ts +69 -69
- package/src/lib/oas/graphql/constants.ts +2 -2
- package/src/lib/oas/graphql/index.ts +791 -791
- package/src/lib/oas/parser/dereference/index.ts +84 -84
- package/src/lib/oas/parser/dereference/resolveRef.ts +32 -32
- package/src/lib/oas/parser/index.ts +129 -129
- package/src/lib/oas/parser/schemas/v3.0.json +1489 -1489
- package/src/lib/oas/parser/schemas/v3.1.json +1298 -1298
- package/src/lib/oas/parser/upgrade/index.ts +174 -174
- package/src/lib/plugins/api-catalog/Catalog.tsx +80 -80
- package/src/lib/plugins/api-catalog/index.tsx +119 -119
- package/src/lib/plugins/api-keys/CreateApiKey.tsx +128 -128
- package/src/lib/plugins/api-keys/CreateApiKeyDialog.tsx +49 -49
- package/src/lib/plugins/api-keys/ProtectedRoute.tsx +33 -33
- package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +72 -72
- package/src/lib/plugins/api-keys/index.tsx +274 -274
- package/src/lib/plugins/api-keys/settings/ApiKeyItem.tsx +342 -342
- package/src/lib/plugins/api-keys/settings/ApiKeyList.tsx +67 -67
- package/src/lib/plugins/api-keys/settings/RevealApiKey.tsx +127 -127
- package/src/lib/plugins/custom-pages/index.tsx +32 -32
- package/src/lib/plugins/markdown/MdxPage.tsx +260 -260
- package/src/lib/plugins/markdown/assets/ChatGPTLogo.tsx +11 -11
- package/src/lib/plugins/markdown/assets/ClaudeLogo.tsx +19 -19
- package/src/lib/plugins/markdown/index.tsx +82 -82
- package/src/lib/plugins/openapi/ApiHeader.tsx +96 -96
- package/src/lib/plugins/openapi/CollapsibleCode.tsx +88 -88
- package/src/lib/plugins/openapi/ColorizedParam.tsx +115 -115
- package/src/lib/plugins/openapi/DownloadSchemaButton.tsx +94 -94
- package/src/lib/plugins/openapi/Endpoint.tsx +85 -85
- package/src/lib/plugins/openapi/GeneratedExampleSidecarBox.tsx +52 -52
- package/src/lib/plugins/openapi/MCPEndpoint.tsx +273 -273
- package/src/lib/plugins/openapi/OasProvider.tsx +74 -74
- package/src/lib/plugins/openapi/OperationList.tsx +275 -275
- package/src/lib/plugins/openapi/OperationListItem.tsx +183 -183
- package/src/lib/plugins/openapi/ParamInfos.tsx +96 -96
- package/src/lib/plugins/openapi/ParameterList.tsx +53 -53
- package/src/lib/plugins/openapi/ParameterListItem.tsx +161 -161
- package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +67 -67
- package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +63 -63
- package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +120 -120
- package/src/lib/plugins/openapi/SchemaInfo.tsx +344 -344
- package/src/lib/plugins/openapi/SchemaList.tsx +113 -113
- package/src/lib/plugins/openapi/Sidecar.tsx +314 -314
- package/src/lib/plugins/openapi/SidecarBox.tsx +57 -57
- package/src/lib/plugins/openapi/SidecarExamples.tsx +177 -177
- package/src/lib/plugins/openapi/SimpleSelect.tsx +46 -46
- package/src/lib/plugins/openapi/client/GraphQLClient.tsx +73 -73
- package/src/lib/plugins/openapi/client/GraphQLContext.tsx +16 -16
- package/src/lib/plugins/openapi/client/createServer.ts +35 -35
- package/src/lib/plugins/openapi/client/useCreateQuery.ts +44 -44
- package/src/lib/plugins/openapi/components/ConstValue.tsx +24 -24
- package/src/lib/plugins/openapi/components/EnumValues.tsx +58 -58
- package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -22
- package/src/lib/plugins/openapi/components/ResponseContent.tsx +117 -117
- package/src/lib/plugins/openapi/components/SelectOnClick.tsx +29 -29
- package/src/lib/plugins/openapi/context.tsx +16 -16
- package/src/lib/plugins/openapi/graphql/fragment-masking.ts +104 -104
- package/src/lib/plugins/openapi/graphql/gql.ts +95 -95
- package/src/lib/plugins/openapi/graphql/graphql.ts +835 -835
- package/src/lib/plugins/openapi/graphql/index.ts +2 -2
- package/src/lib/plugins/openapi/index.tsx +221 -221
- package/src/lib/plugins/openapi/interfaces.ts +100 -100
- package/src/lib/plugins/openapi/playground/BodyPanel.tsx +274 -274
- package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +51 -51
- package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +60 -60
- package/src/lib/plugins/openapi/playground/Headers.tsx +194 -194
- package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +75 -75
- package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +38 -38
- package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +45 -45
- package/src/lib/plugins/openapi/playground/PathParams.tsx +53 -53
- package/src/lib/plugins/openapi/playground/Playground.tsx +602 -602
- package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +62 -62
- package/src/lib/plugins/openapi/playground/QueryParams.tsx +151 -151
- package/src/lib/plugins/openapi/playground/RequestLoginDialog.tsx +70 -70
- package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -87
- package/src/lib/plugins/openapi/playground/createUrl.ts +25 -25
- package/src/lib/plugins/openapi/playground/fileUtils.ts +36 -36
- package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -26
- package/src/lib/plugins/openapi/playground/request-panel/MultipartField.tsx +91 -91
- package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -31
- package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +29 -29
- package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +340 -340
- package/src/lib/plugins/openapi/playground/result-panel/AudioPlayer.tsx +50 -50
- package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +117 -117
- package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +355 -355
- package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +106 -106
- package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts +36 -36
- package/src/lib/plugins/openapi/playground/serializeQueryParams.ts +125 -125
- package/src/lib/plugins/openapi/playground/useRememberSkipLoginDialog.tsx +23 -23
- package/src/lib/plugins/openapi/processors/injectApitogoGatewayServer.ts +36 -36
- package/src/lib/plugins/openapi/processors/removeExtensions.ts +29 -29
- package/src/lib/plugins/openapi/processors/removeParameters.ts +103 -103
- package/src/lib/plugins/openapi/processors/removePaths.ts +57 -57
- package/src/lib/plugins/openapi/processors/traverse.ts +1 -1
- package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +39 -39
- package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +189 -189
- package/src/lib/plugins/openapi/schema/SchemaView.tsx +299 -299
- package/src/lib/plugins/openapi/schema/UnionView.tsx +132 -132
- package/src/lib/plugins/openapi/schema/union-helpers.ts +123 -123
- package/src/lib/plugins/openapi/schema/utils.ts +49 -49
- package/src/lib/plugins/openapi/state.ts +36 -36
- package/src/lib/plugins/openapi/util/buildTagCategories.ts +54 -54
- package/src/lib/plugins/openapi/util/createHttpSnippet.ts +135 -135
- package/src/lib/plugins/openapi/util/createNavigationCategory.tsx +39 -39
- package/src/lib/plugins/openapi/util/generateSchemaExample.ts +191 -191
- package/src/lib/plugins/openapi/util/getRoutes.tsx +265 -265
- package/src/lib/plugins/openapi/util/methodColorMap.tsx +11 -11
- package/src/lib/plugins/openapi/util/methodToColor.ts +27 -27
- package/src/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.tsx +32 -32
- package/src/lib/plugins/openapi/util/useWarmupSchema.ts +23 -23
- package/src/lib/plugins/search-inkeep/index.tsx +108 -108
- package/src/lib/plugins/search-inkeep/inkeep.ts +24 -24
- package/src/lib/plugins/search-pagefind/IndexingDialog.tsx +162 -162
- package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +202 -202
- package/src/lib/plugins/search-pagefind/ResultList.tsx +122 -122
- package/src/lib/plugins/search-pagefind/get-results.tsx +74 -74
- package/src/lib/plugins/search-pagefind/index.tsx +21 -21
- package/src/lib/plugins/search-pagefind/types.ts +118 -118
- package/src/lib/shiki-constants.ts +24 -24
- package/src/lib/shiki.ts +179 -179
- package/src/lib/testing/index.tsx +147 -147
- package/src/lib/ui/Accordion.tsx +55 -55
- package/src/lib/ui/ActionButton.tsx +21 -21
- package/src/lib/ui/Alert.tsx +84 -84
- package/src/lib/ui/AlertDialog.tsx +195 -195
- package/src/lib/ui/AspectRatio.tsx +5 -5
- package/src/lib/ui/Badge.tsx +48 -48
- package/src/lib/ui/Breadcrumb.tsx +115 -115
- package/src/lib/ui/Button.tsx +65 -65
- package/src/lib/ui/ButtonGroup.tsx +80 -80
- package/src/lib/ui/Callout.tsx +113 -113
- package/src/lib/ui/Card.tsx +95 -95
- package/src/lib/ui/Carousel.tsx +259 -259
- package/src/lib/ui/Checkbox.tsx +28 -28
- package/src/lib/ui/CodeBlock.tsx +92 -92
- package/src/lib/ui/CodeTabPanel.tsx +13 -13
- package/src/lib/ui/CodeTabs.tsx +161 -161
- package/src/lib/ui/Collapsible.tsx +31 -31
- package/src/lib/ui/Command.tsx +191 -191
- package/src/lib/ui/Dialog.tsx +138 -138
- package/src/lib/ui/DismissibleAlert.tsx +74 -74
- package/src/lib/ui/Drawer.tsx +121 -121
- package/src/lib/ui/DropdownMenu.tsx +254 -254
- package/src/lib/ui/EmbeddedCodeBlock.tsx +99 -99
- package/src/lib/ui/Form.tsx +176 -176
- package/src/lib/ui/Frame.tsx +81 -81
- package/src/lib/ui/HoverCard.tsx +26 -26
- package/src/lib/ui/Input.tsx +23 -23
- package/src/lib/ui/InputGroup.tsx +168 -168
- package/src/lib/ui/Item.tsx +213 -213
- package/src/lib/ui/Kbd.tsx +28 -28
- package/src/lib/ui/Label.tsx +23 -23
- package/src/lib/ui/NativeSelect.tsx +48 -48
- package/src/lib/ui/NavigationMenu.tsx +169 -169
- package/src/lib/ui/Pagination.tsx +115 -115
- package/src/lib/ui/Popover.tsx +28 -28
- package/src/lib/ui/Progress.tsx +25 -25
- package/src/lib/ui/RadioGroup.tsx +41 -41
- package/src/lib/ui/ReactComponentDoc.tsx +68 -68
- package/src/lib/ui/ScrollArea.tsx +45 -45
- package/src/lib/ui/Secret.tsx +133 -133
- package/src/lib/ui/Select.tsx +184 -184
- package/src/lib/ui/Separator.tsx +25 -25
- package/src/lib/ui/Skeleton.tsx +15 -15
- package/src/lib/ui/Slider.tsx +25 -25
- package/src/lib/ui/Stepper.tsx +8 -8
- package/src/lib/ui/Switch.tsx +26 -26
- package/src/lib/ui/SyntaxHighlight.tsx +54 -54
- package/src/lib/ui/Tabs.tsx +52 -52
- package/src/lib/ui/Textarea.tsx +22 -22
- package/src/lib/ui/Toggle.tsx +42 -42
- package/src/lib/ui/ToggleGroup.tsx +58 -58
- package/src/lib/ui/Tooltip.tsx +65 -65
- package/src/lib/ui/Value.tsx +42 -42
- package/src/lib/ui/util.tsx +8 -8
- package/src/lib/util/MdxComponents.tsx +150 -150
- package/src/lib/util/cn.ts +6 -6
- package/src/lib/util/createVariantComponent.tsx +61 -61
- package/src/lib/util/ensureArray.ts +3 -3
- package/src/lib/util/flattenAllOf.ts +72 -72
- package/src/lib/util/flattenAllOfProcessor.ts +74 -74
- package/src/lib/util/hastToJsx.tsx +67 -67
- package/src/lib/util/humanFileSize.ts +15 -15
- package/src/lib/util/invariant.ts +52 -52
- package/src/lib/util/joinUrl.ts +60 -60
- package/src/lib/util/logInit.ts +9 -9
- package/src/lib/util/objectEntries.ts +5 -5
- package/src/lib/util/os.ts +18 -18
- package/src/lib/util/pastellize.ts +25 -25
- package/src/lib/util/problemJson.ts +63 -63
- package/src/lib/util/readFrontmatter.ts +14 -14
- package/src/lib/util/renderIf.ts +4 -4
- package/src/lib/util/scrollIntoViewIfNeeded.ts +18 -18
- package/src/lib/util/slugify.ts +21 -21
- package/src/lib/util/syncZustandState.ts +22 -22
- package/src/lib/util/traverse.ts +70 -70
- package/src/lib/util/types.ts +7 -7
- package/src/lib/util/url.ts +18 -18
- package/src/lib/util/useCopyToClipboard.ts +17 -17
- package/src/lib/util/useExposedProps.tsx +27 -27
- package/src/lib/util/useIsomorphicLayoutEffect.ts +6 -6
- package/src/lib/util/useLatest.ts +18 -18
- package/src/lib/util/useOnScreen.ts +34 -34
- package/src/lib/util/useScrollToAnchor.ts +75 -75
- package/src/lib/util/useScrollToTop.ts +18 -18
- package/src/types.d.ts +66 -66
- package/src/vite/api/SchemaManager.ts +371 -371
- package/src/vite/api/schema-codegen.ts +163 -163
- package/src/vite/build.ts +237 -237
- package/src/vite/config.ts +273 -273
- package/src/vite/css/collect.ts +42 -42
- package/src/vite/css/plugin.ts +105 -105
- package/src/vite/debug.ts +18 -18
- package/src/vite/dev-portal-env.ts +29 -29
- package/src/vite/dev-server.ts +294 -294
- package/src/vite/html.ts +52 -52
- package/src/vite/index.ts +2 -2
- package/src/vite/llms.ts +99 -99
- package/src/vite/mdx/rehype-extract-toc-with-jsx-export.ts +19 -19
- package/src/vite/mdx/rehype-extract-toc-with-jsx.ts +70 -70
- package/src/vite/mdx/remark-code-tabs.ts +47 -47
- package/src/vite/mdx/remark-inject-filepath.ts +13 -13
- package/src/vite/mdx/remark-last-modified.ts +103 -103
- package/src/vite/mdx/remark-link-rewrite.ts +23 -23
- package/src/vite/mdx/remark-normalize-image-url.ts +15 -15
- package/src/vite/mdx/remark-static-generation.ts +149 -149
- package/src/vite/mdx/utils.ts +32 -32
- package/src/vite/output.ts +261 -261
- package/src/vite/package-root.ts +12 -12
- package/src/vite/pagefind-dev-index.ts +100 -100
- package/src/vite/pagefind-dev-stub.ts +17 -17
- package/src/vite/plugin-api-keys.ts +55 -55
- package/src/vite/plugin-api.ts +328 -328
- package/src/vite/plugin-auth.ts +41 -41
- package/src/vite/plugin-component.ts +45 -45
- package/src/vite/plugin-config-reload.ts +47 -47
- package/src/vite/plugin-config.ts +131 -131
- package/src/vite/plugin-custom-pages.ts +36 -36
- package/src/vite/plugin-doc-metadata.ts +45 -45
- package/src/vite/plugin-docs.ts +205 -205
- package/src/vite/plugin-local-manifest.ts +100 -100
- package/src/vite/plugin-markdown-export.ts +214 -214
- package/src/vite/plugin-mdx.ts +149 -149
- package/src/vite/plugin-metadata.ts +30 -30
- package/src/vite/plugin-modules.ts +188 -188
- package/src/vite/plugin-navigation.ts +106 -106
- package/src/vite/plugin-offroot-resolve.ts +67 -67
- package/src/vite/plugin-search.ts +59 -59
- package/src/vite/plugin-shiki-register.ts +97 -97
- package/src/vite/plugin-theme.ts +458 -458
- package/src/vite/plugin.ts +48 -48
- package/src/vite/prerender/prerender.ts +242 -242
- package/src/vite/prerender/utils.ts +76 -76
- package/src/vite/prerender/worker.ts +118 -118
- package/src/vite/reporter.ts +34 -34
- package/src/vite/shadcn-registry.ts +48 -48
- package/src/vite/sitemap.ts +78 -78
- package/src/vite/ssr-templates/cloudflare.ts +19 -19
- package/src/vite/ssr-templates/node.ts +25 -25
- package/src/vite/ssr-templates/vercel.ts +22 -22
- package/src/vite/watch-ignore.ts +70 -70
- package/src/vite/zuplo.ts +30 -30
- package/src/vite-env.d.ts +6 -6
- package/src/zuplo/enrich-with-zuplo-mcp.ts +168 -168
- package/src/zuplo/enrich-with-zuplo.ts +256 -256
- package/src/zuplo/policy-types.ts +46 -46
- package/src/zuplo/with-zuplo-processors.ts +36 -36
- package/src/zuplo/with-zuplo.ts +14 -14
- 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.
|