@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,150 +1,150 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Protected Routes
|
|
3
|
-
sidebar_icon: squares-subtract
|
|
4
|
-
description:
|
|
5
|
-
Learn how to protect specific routes in your documentation using authentication, including simple
|
|
6
|
-
array patterns, advanced authorization with reason codes, and custom callback functions.
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You can protect specific routes in your documentation by adding the `protectedRoutes` property to
|
|
10
|
-
your [APIToGo configuration](./overview.md). This requires [authentication](./authentication.md) to
|
|
11
|
-
be configured. The property supports two formats: a simple array of path patterns, or an advanced
|
|
12
|
-
object format with custom authorization logic.
|
|
13
|
-
|
|
14
|
-
:::note{title="Client-side protection only"}
|
|
15
|
-
|
|
16
|
-
`protectedRoutes` are client-side only. Do not rely on `protectedRoutes` to hide sensitive
|
|
17
|
-
information.
|
|
18
|
-
|
|
19
|
-
We are working on an additional offering that secures this data server-side.
|
|
20
|
-
|
|
21
|
-
:::
|
|
22
|
-
|
|
23
|
-
## Array Format
|
|
24
|
-
|
|
25
|
-
The simplest way to protect routes is to provide an array of path patterns. Users must be
|
|
26
|
-
authenticated to access these routes.
|
|
27
|
-
|
|
28
|
-
```typescript title="config"
|
|
29
|
-
{
|
|
30
|
-
// ...
|
|
31
|
-
protectedRoutes: [
|
|
32
|
-
"/admin/*", // Protect all routes under /admin
|
|
33
|
-
"/settings", // Protect the settings page
|
|
34
|
-
"/api/*", // Protect all API-related routes
|
|
35
|
-
"/private/:id" // Protect dynamic routes with parameters
|
|
36
|
-
],
|
|
37
|
-
// ...
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
When a user tries to access a protected route, a login dialog will appear prompting them to sign in
|
|
42
|
-
or register. After logging in, they are automatically redirected back to the route they were trying
|
|
43
|
-
to access.
|
|
44
|
-
|
|
45
|
-
## Object Format
|
|
46
|
-
|
|
47
|
-
For more complex authorization logic, you can provide a record mapping route patterns to custom
|
|
48
|
-
callback functions:
|
|
49
|
-
|
|
50
|
-
```typescript title="config"
|
|
51
|
-
{
|
|
52
|
-
// ...
|
|
53
|
-
protectedRoutes: {
|
|
54
|
-
// Only allow authenticated users with admin role
|
|
55
|
-
"/admin/*": ({ auth }) =>
|
|
56
|
-
auth.isAuthenticated && auth.user?.role === "admin",
|
|
57
|
-
|
|
58
|
-
// Check if user has enterprise access
|
|
59
|
-
"/api/enterprise/*": ({ auth }) =>
|
|
60
|
-
auth.isAuthenticated && auth.user?.subscription === "enterprise",
|
|
61
|
-
|
|
62
|
-
// Allow access to beta features based on user attributes
|
|
63
|
-
"/beta/*": ({ auth }) =>
|
|
64
|
-
auth.isAuthenticated && auth.user?.betaAccess === true,
|
|
65
|
-
},
|
|
66
|
-
// ...
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Callback Parameters
|
|
71
|
-
|
|
72
|
-
The callback function receives an object with:
|
|
73
|
-
|
|
74
|
-
- `auth` - The current authentication state, including `isAuthenticated`, `isPending`, `profile`,
|
|
75
|
-
and more
|
|
76
|
-
- `context` - The APIToGo context providing access to configuration and utilities
|
|
77
|
-
- `reasonCode` - An object containing the reason code constants `UNAUTHORIZED` and `FORBIDDEN` (see
|
|
78
|
-
[Reason Codes](#reason-codes))
|
|
79
|
-
|
|
80
|
-
### Return Values
|
|
81
|
-
|
|
82
|
-
The callback can return a `boolean` or a reason code string:
|
|
83
|
-
|
|
84
|
-
| Return value | Behavior |
|
|
85
|
-
| ------------------------- | ------------------------------------------------- |
|
|
86
|
-
| `true` | Allow access to the route |
|
|
87
|
-
| `false` | Treated as `UNAUTHORIZED` - prompts login |
|
|
88
|
-
| `reasonCode.UNAUTHORIZED` | Show a login dialog prompting the user to sign in |
|
|
89
|
-
| `reasonCode.FORBIDDEN` | Show a 403 "Access Denied" page |
|
|
90
|
-
|
|
91
|
-
## Reason Codes
|
|
92
|
-
|
|
93
|
-
Reason codes allow you to distinguish between users who need to sign in and users who are signed in
|
|
94
|
-
but lack permission. This is useful for building role-based or attribute-based access control.
|
|
95
|
-
|
|
96
|
-
- **`UNAUTHORIZED`** - The user is not authenticated. A login dialog is shown, and navigation to the
|
|
97
|
-
route is blocked until the user signs in.
|
|
98
|
-
- **`FORBIDDEN`** - The user is authenticated but does not have permission. A 403 "Access Denied"
|
|
99
|
-
page is displayed instead of the route content.
|
|
100
|
-
|
|
101
|
-
```typescript title="config"
|
|
102
|
-
{
|
|
103
|
-
// ...
|
|
104
|
-
protectedRoutes: {
|
|
105
|
-
// Members-only page: unauthenticated users see a login prompt
|
|
106
|
-
"/only-members": ({ auth, reasonCode }) =>
|
|
107
|
-
auth.isAuthenticated ? true : reasonCode.UNAUTHORIZED,
|
|
108
|
-
|
|
109
|
-
// VIP page: unauthenticated users see a login prompt,
|
|
110
|
-
// authenticated users without permission see "Access Denied"
|
|
111
|
-
"/vip-lounge": ({ auth, reasonCode }) =>
|
|
112
|
-
!auth.isAuthenticated
|
|
113
|
-
? reasonCode.UNAUTHORIZED
|
|
114
|
-
: auth.profile?.email?.endsWith("@example.com")
|
|
115
|
-
? true
|
|
116
|
-
: reasonCode.FORBIDDEN,
|
|
117
|
-
},
|
|
118
|
-
// ...
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Navigation Blocking
|
|
123
|
-
|
|
124
|
-
When a user navigates to a route that returns `false` or `UNAUTHORIZED`, navigation is intercepted
|
|
125
|
-
before the page changes. The user stays on the current page while a login dialog is displayed. If
|
|
126
|
-
the user cancels, they remain on the current page. If they log in successfully, navigation
|
|
127
|
-
automatically proceeds to the protected route.
|
|
128
|
-
|
|
129
|
-
Routes that return `FORBIDDEN` do not block navigation — the user navigates to the route and sees
|
|
130
|
-
the "Access Denied" page.
|
|
131
|
-
|
|
132
|
-
## Path Patterns
|
|
133
|
-
|
|
134
|
-
The path patterns follow the same syntax as [React Router](https://reactrouter.com):
|
|
135
|
-
|
|
136
|
-
- `:param` matches a URL segment up to the next `/`, `?`, or `#`
|
|
137
|
-
- `*` matches zero or more characters up to the next `/`, `?`, or `#`
|
|
138
|
-
- `/*` matches all characters after the pattern
|
|
139
|
-
|
|
140
|
-
For example:
|
|
141
|
-
|
|
142
|
-
- `/users/:id` matches `/users/123` or `/users/abc`
|
|
143
|
-
- `/docs/*` matches `/docs/getting-started` or `/docs/api/reference`
|
|
144
|
-
- `/settings` matches only the exact path `/settings`
|
|
145
|
-
|
|
146
|
-
## Next Steps
|
|
147
|
-
|
|
148
|
-
- Learn about [authentication providers](./authentication.md#authentication-providers) supported by
|
|
149
|
-
APIToGo
|
|
150
|
-
- Configure [user data](./authentication.md#user-data) display
|
|
1
|
+
---
|
|
2
|
+
title: Protected Routes
|
|
3
|
+
sidebar_icon: squares-subtract
|
|
4
|
+
description:
|
|
5
|
+
Learn how to protect specific routes in your documentation using authentication, including simple
|
|
6
|
+
array patterns, advanced authorization with reason codes, and custom callback functions.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You can protect specific routes in your documentation by adding the `protectedRoutes` property to
|
|
10
|
+
your [APIToGo configuration](./overview.md). This requires [authentication](./authentication.md) to
|
|
11
|
+
be configured. The property supports two formats: a simple array of path patterns, or an advanced
|
|
12
|
+
object format with custom authorization logic.
|
|
13
|
+
|
|
14
|
+
:::note{title="Client-side protection only"}
|
|
15
|
+
|
|
16
|
+
`protectedRoutes` are client-side only. Do not rely on `protectedRoutes` to hide sensitive
|
|
17
|
+
information.
|
|
18
|
+
|
|
19
|
+
We are working on an additional offering that secures this data server-side.
|
|
20
|
+
|
|
21
|
+
:::
|
|
22
|
+
|
|
23
|
+
## Array Format
|
|
24
|
+
|
|
25
|
+
The simplest way to protect routes is to provide an array of path patterns. Users must be
|
|
26
|
+
authenticated to access these routes.
|
|
27
|
+
|
|
28
|
+
```typescript title="config"
|
|
29
|
+
{
|
|
30
|
+
// ...
|
|
31
|
+
protectedRoutes: [
|
|
32
|
+
"/admin/*", // Protect all routes under /admin
|
|
33
|
+
"/settings", // Protect the settings page
|
|
34
|
+
"/api/*", // Protect all API-related routes
|
|
35
|
+
"/private/:id" // Protect dynamic routes with parameters
|
|
36
|
+
],
|
|
37
|
+
// ...
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
When a user tries to access a protected route, a login dialog will appear prompting them to sign in
|
|
42
|
+
or register. After logging in, they are automatically redirected back to the route they were trying
|
|
43
|
+
to access.
|
|
44
|
+
|
|
45
|
+
## Object Format
|
|
46
|
+
|
|
47
|
+
For more complex authorization logic, you can provide a record mapping route patterns to custom
|
|
48
|
+
callback functions:
|
|
49
|
+
|
|
50
|
+
```typescript title="config"
|
|
51
|
+
{
|
|
52
|
+
// ...
|
|
53
|
+
protectedRoutes: {
|
|
54
|
+
// Only allow authenticated users with admin role
|
|
55
|
+
"/admin/*": ({ auth }) =>
|
|
56
|
+
auth.isAuthenticated && auth.user?.role === "admin",
|
|
57
|
+
|
|
58
|
+
// Check if user has enterprise access
|
|
59
|
+
"/api/enterprise/*": ({ auth }) =>
|
|
60
|
+
auth.isAuthenticated && auth.user?.subscription === "enterprise",
|
|
61
|
+
|
|
62
|
+
// Allow access to beta features based on user attributes
|
|
63
|
+
"/beta/*": ({ auth }) =>
|
|
64
|
+
auth.isAuthenticated && auth.user?.betaAccess === true,
|
|
65
|
+
},
|
|
66
|
+
// ...
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Callback Parameters
|
|
71
|
+
|
|
72
|
+
The callback function receives an object with:
|
|
73
|
+
|
|
74
|
+
- `auth` - The current authentication state, including `isAuthenticated`, `isPending`, `profile`,
|
|
75
|
+
and more
|
|
76
|
+
- `context` - The APIToGo context providing access to configuration and utilities
|
|
77
|
+
- `reasonCode` - An object containing the reason code constants `UNAUTHORIZED` and `FORBIDDEN` (see
|
|
78
|
+
[Reason Codes](#reason-codes))
|
|
79
|
+
|
|
80
|
+
### Return Values
|
|
81
|
+
|
|
82
|
+
The callback can return a `boolean` or a reason code string:
|
|
83
|
+
|
|
84
|
+
| Return value | Behavior |
|
|
85
|
+
| ------------------------- | ------------------------------------------------- |
|
|
86
|
+
| `true` | Allow access to the route |
|
|
87
|
+
| `false` | Treated as `UNAUTHORIZED` - prompts login |
|
|
88
|
+
| `reasonCode.UNAUTHORIZED` | Show a login dialog prompting the user to sign in |
|
|
89
|
+
| `reasonCode.FORBIDDEN` | Show a 403 "Access Denied" page |
|
|
90
|
+
|
|
91
|
+
## Reason Codes
|
|
92
|
+
|
|
93
|
+
Reason codes allow you to distinguish between users who need to sign in and users who are signed in
|
|
94
|
+
but lack permission. This is useful for building role-based or attribute-based access control.
|
|
95
|
+
|
|
96
|
+
- **`UNAUTHORIZED`** - The user is not authenticated. A login dialog is shown, and navigation to the
|
|
97
|
+
route is blocked until the user signs in.
|
|
98
|
+
- **`FORBIDDEN`** - The user is authenticated but does not have permission. A 403 "Access Denied"
|
|
99
|
+
page is displayed instead of the route content.
|
|
100
|
+
|
|
101
|
+
```typescript title="config"
|
|
102
|
+
{
|
|
103
|
+
// ...
|
|
104
|
+
protectedRoutes: {
|
|
105
|
+
// Members-only page: unauthenticated users see a login prompt
|
|
106
|
+
"/only-members": ({ auth, reasonCode }) =>
|
|
107
|
+
auth.isAuthenticated ? true : reasonCode.UNAUTHORIZED,
|
|
108
|
+
|
|
109
|
+
// VIP page: unauthenticated users see a login prompt,
|
|
110
|
+
// authenticated users without permission see "Access Denied"
|
|
111
|
+
"/vip-lounge": ({ auth, reasonCode }) =>
|
|
112
|
+
!auth.isAuthenticated
|
|
113
|
+
? reasonCode.UNAUTHORIZED
|
|
114
|
+
: auth.profile?.email?.endsWith("@example.com")
|
|
115
|
+
? true
|
|
116
|
+
: reasonCode.FORBIDDEN,
|
|
117
|
+
},
|
|
118
|
+
// ...
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Navigation Blocking
|
|
123
|
+
|
|
124
|
+
When a user navigates to a route that returns `false` or `UNAUTHORIZED`, navigation is intercepted
|
|
125
|
+
before the page changes. The user stays on the current page while a login dialog is displayed. If
|
|
126
|
+
the user cancels, they remain on the current page. If they log in successfully, navigation
|
|
127
|
+
automatically proceeds to the protected route.
|
|
128
|
+
|
|
129
|
+
Routes that return `FORBIDDEN` do not block navigation — the user navigates to the route and sees
|
|
130
|
+
the "Access Denied" page.
|
|
131
|
+
|
|
132
|
+
## Path Patterns
|
|
133
|
+
|
|
134
|
+
The path patterns follow the same syntax as [React Router](https://reactrouter.com):
|
|
135
|
+
|
|
136
|
+
- `:param` matches a URL segment up to the next `/`, `?`, or `#`
|
|
137
|
+
- `*` matches zero or more characters up to the next `/`, `?`, or `#`
|
|
138
|
+
- `/*` matches all characters after the pattern
|
|
139
|
+
|
|
140
|
+
For example:
|
|
141
|
+
|
|
142
|
+
- `/users/:id` matches `/users/123` or `/users/abc`
|
|
143
|
+
- `/docs/*` matches `/docs/getting-started` or `/docs/api/reference`
|
|
144
|
+
- `/settings` matches only the exact path `/settings`
|
|
145
|
+
|
|
146
|
+
## Next Steps
|
|
147
|
+
|
|
148
|
+
- Learn about [authentication providers](./authentication.md#authentication-providers) supported by
|
|
149
|
+
APIToGo
|
|
150
|
+
- Configure [user data](./authentication.md#user-data) display
|
|
@@ -1,164 +1,164 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Search
|
|
3
|
-
sidebar_icon: search-code
|
|
4
|
-
description:
|
|
5
|
-
Learn how to configure and customize search functionality in APIToGo, including setup instructions
|
|
6
|
-
for Pagefind and Inkeep providers, result transformation, and ranking options.
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
APIToGo offers search functionality that enhances user experience by enabling content discovery
|
|
10
|
-
across your site. When configured, a search bar will appear in the header, allowing users to quickly
|
|
11
|
-
find relevant information on any page.
|
|
12
|
-
|
|
13
|
-
We currently support three search providers:
|
|
14
|
-
|
|
15
|
-
- [Pagefind](https://pagefind.app/)
|
|
16
|
-
- [Algolia DocSearch](https://docsearch.algolia.com/)
|
|
17
|
-
- [Inkeep](https://inkeep.com/)
|
|
18
|
-
|
|
19
|
-
## Pagefind
|
|
20
|
-
|
|
21
|
-
[Pagefind](https://pagefind.app/) is a lightweight, static search library that can be used to add
|
|
22
|
-
search to your APIToGo site without any external services.
|
|
23
|
-
|
|
24
|
-
To enable pagefind search, configure the `search` option in your configuration:
|
|
25
|
-
|
|
26
|
-
```typescript
|
|
27
|
-
{
|
|
28
|
-
search: {
|
|
29
|
-
type: "pagefind",
|
|
30
|
-
// Optional: Maximum number of sub results per page
|
|
31
|
-
maxSubResults: 3,
|
|
32
|
-
// Optional: Configure search result ranking (defaults shown below)
|
|
33
|
-
ranking: {
|
|
34
|
-
termFrequency: 0.8,
|
|
35
|
-
pageLength: 0.6,
|
|
36
|
-
termSimilarity: 1.2,
|
|
37
|
-
termSaturation: 1.2,
|
|
38
|
-
},
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Transforming/Filtering Search Results
|
|
44
|
-
|
|
45
|
-
You can transform or filter search results using the `transformResults` option. This function
|
|
46
|
-
receives the search result along with the current auth state and context, allowing you to:
|
|
47
|
-
|
|
48
|
-
- Filter results based on user permissions
|
|
49
|
-
- Modify result content
|
|
50
|
-
- Add custom results
|
|
51
|
-
|
|
52
|
-
The type of `result` is the same as
|
|
53
|
-
[the type returned by Pagefind's search API](https://github.com/Pagefind/pagefind/blob/03552d041d9533b09563f6c50466b25d394ece64/pagefind_web_js/types/index.d.ts#L123-L160).
|
|
54
|
-
|
|
55
|
-
```typescript
|
|
56
|
-
{
|
|
57
|
-
search: {
|
|
58
|
-
type: "pagefind",
|
|
59
|
-
transformResults: ({ result, auth, context }) => {
|
|
60
|
-
// Return false to filter out the result
|
|
61
|
-
if (!auth.isAuthenticated) return false;
|
|
62
|
-
|
|
63
|
-
// Return true or undefined to keep the original result
|
|
64
|
-
if (result.url.includes("/private/")) return true;
|
|
65
|
-
|
|
66
|
-
// Return a modified result
|
|
67
|
-
return {
|
|
68
|
-
...result,
|
|
69
|
-
title: `${result.title} (${context.meta.title})`
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
For more information about how Pagefind's ranking system works and how to customize it for your
|
|
77
|
-
content, see the [Pagefind ranking documentation](https://pagefind.app/docs/ranking/).
|
|
78
|
-
|
|
79
|
-
## Algolia DocSearch
|
|
80
|
-
|
|
81
|
-
[Algolia DocSearch](https://docsearch.algolia.com/) is a free search solution for open-source
|
|
82
|
-
documentation sites. You can apply for the free DocSearch program or use your own Algolia account.
|
|
83
|
-
|
|
84
|
-
### Installation
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
npm install @zudoku/plugin-search-algolia
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
The published package name is still `@zudoku/plugin-search-algolia` (APIToGo Algolia search plugin).
|
|
91
|
-
Add it via the `plugins` array in your site config.
|
|
92
|
-
|
|
93
|
-
### Configuration
|
|
94
|
-
|
|
95
|
-
```typescript
|
|
96
|
-
import { algoliaSearchPlugin } from "@zudoku/plugin-search-algolia";
|
|
97
|
-
|
|
98
|
-
export default {
|
|
99
|
-
plugins: [
|
|
100
|
-
algoliaSearchPlugin({
|
|
101
|
-
appId: "YOUR_APP_ID",
|
|
102
|
-
apiKey: "YOUR_SEARCH_API_KEY",
|
|
103
|
-
indices: ["YOUR_INDEX_NAME"],
|
|
104
|
-
}),
|
|
105
|
-
],
|
|
106
|
-
};
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
You can get your credentials by [applying for DocSearch](https://docsearch.algolia.com/apply/) or
|
|
110
|
-
creating an index through the [Algolia dashboard](https://www.algolia.com/dashboard).
|
|
111
|
-
|
|
112
|
-
Any additional [DocSearch options](https://docsearch.algolia.com/docs/api/) can be passed alongside
|
|
113
|
-
the required fields.
|
|
114
|
-
|
|
115
|
-
## Inkeep
|
|
116
|
-
|
|
117
|
-
[Inkeep](https://inkeep.com/) is an AI-powered search and chat platform that can index your
|
|
118
|
-
documentation and provide intelligent search capabilities to your users.
|
|
119
|
-
|
|
120
|
-
### Setting up Inkeep Integration
|
|
121
|
-
|
|
122
|
-
Before you can use Inkeep search in your APIToGo site, you need to set up an Inkeep integration and
|
|
123
|
-
have your site indexed. Here's how to get started:
|
|
124
|
-
|
|
125
|
-
#### 1. Create an Inkeep Account
|
|
126
|
-
|
|
127
|
-
1. Go to [Inkeep](https://inkeep.com/) and sign up for an account
|
|
128
|
-
2. Navigate to the [Inkeep Portal](https://portal.inkeep.com/)
|
|
129
|
-
|
|
130
|
-
#### 2. Set up Site Indexing
|
|
131
|
-
|
|
132
|
-
1. In the Inkeep Portal, create a new project or integration
|
|
133
|
-
2. Configure your site URL so Inkeep can crawl and index your documentation
|
|
134
|
-
3. Ensure your APIToGo site is deployed and publicly accessible for indexing
|
|
135
|
-
4. Wait for Inkeep to crawl and index your site content (this may take some time)
|
|
136
|
-
|
|
137
|
-
#### 3. Get Your Integration Credentials
|
|
138
|
-
|
|
139
|
-
To add Inkeep search to your site you will need to copy some variables from your
|
|
140
|
-
[Inkeep account setting](https://portal.inkeep.com/):
|
|
141
|
-
|
|
142
|
-
- API Key
|
|
143
|
-
- Integration ID
|
|
144
|
-
- Organization ID
|
|
145
|
-
|
|
146
|
-
#### 4. Configure APIToGo
|
|
147
|
-
|
|
148
|
-
Once you have your credentials and your site is indexed, you can configure the `search` option in
|
|
149
|
-
your [APIToGo Configuration](./overview.md):
|
|
150
|
-
|
|
151
|
-
```typescript
|
|
152
|
-
{
|
|
153
|
-
// ...
|
|
154
|
-
search: {
|
|
155
|
-
type: "inkeep",
|
|
156
|
-
apiKey: "<your-api-key>",
|
|
157
|
-
integrationId: "<your-integration-id>",
|
|
158
|
-
organizationId: "<your-organization-id>",
|
|
159
|
-
primaryBrandColor: "#26D6FF",
|
|
160
|
-
organizationDisplayName: "Your Organization Name",
|
|
161
|
-
}
|
|
162
|
-
// ...
|
|
163
|
-
}
|
|
164
|
-
```
|
|
1
|
+
---
|
|
2
|
+
title: Search
|
|
3
|
+
sidebar_icon: search-code
|
|
4
|
+
description:
|
|
5
|
+
Learn how to configure and customize search functionality in APIToGo, including setup instructions
|
|
6
|
+
for Pagefind and Inkeep providers, result transformation, and ranking options.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
APIToGo offers search functionality that enhances user experience by enabling content discovery
|
|
10
|
+
across your site. When configured, a search bar will appear in the header, allowing users to quickly
|
|
11
|
+
find relevant information on any page.
|
|
12
|
+
|
|
13
|
+
We currently support three search providers:
|
|
14
|
+
|
|
15
|
+
- [Pagefind](https://pagefind.app/)
|
|
16
|
+
- [Algolia DocSearch](https://docsearch.algolia.com/)
|
|
17
|
+
- [Inkeep](https://inkeep.com/)
|
|
18
|
+
|
|
19
|
+
## Pagefind
|
|
20
|
+
|
|
21
|
+
[Pagefind](https://pagefind.app/) is a lightweight, static search library that can be used to add
|
|
22
|
+
search to your APIToGo site without any external services.
|
|
23
|
+
|
|
24
|
+
To enable pagefind search, configure the `search` option in your configuration:
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
{
|
|
28
|
+
search: {
|
|
29
|
+
type: "pagefind",
|
|
30
|
+
// Optional: Maximum number of sub results per page
|
|
31
|
+
maxSubResults: 3,
|
|
32
|
+
// Optional: Configure search result ranking (defaults shown below)
|
|
33
|
+
ranking: {
|
|
34
|
+
termFrequency: 0.8,
|
|
35
|
+
pageLength: 0.6,
|
|
36
|
+
termSimilarity: 1.2,
|
|
37
|
+
termSaturation: 1.2,
|
|
38
|
+
},
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Transforming/Filtering Search Results
|
|
44
|
+
|
|
45
|
+
You can transform or filter search results using the `transformResults` option. This function
|
|
46
|
+
receives the search result along with the current auth state and context, allowing you to:
|
|
47
|
+
|
|
48
|
+
- Filter results based on user permissions
|
|
49
|
+
- Modify result content
|
|
50
|
+
- Add custom results
|
|
51
|
+
|
|
52
|
+
The type of `result` is the same as
|
|
53
|
+
[the type returned by Pagefind's search API](https://github.com/Pagefind/pagefind/blob/03552d041d9533b09563f6c50466b25d394ece64/pagefind_web_js/types/index.d.ts#L123-L160).
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
{
|
|
57
|
+
search: {
|
|
58
|
+
type: "pagefind",
|
|
59
|
+
transformResults: ({ result, auth, context }) => {
|
|
60
|
+
// Return false to filter out the result
|
|
61
|
+
if (!auth.isAuthenticated) return false;
|
|
62
|
+
|
|
63
|
+
// Return true or undefined to keep the original result
|
|
64
|
+
if (result.url.includes("/private/")) return true;
|
|
65
|
+
|
|
66
|
+
// Return a modified result
|
|
67
|
+
return {
|
|
68
|
+
...result,
|
|
69
|
+
title: `${result.title} (${context.meta.title})`
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
For more information about how Pagefind's ranking system works and how to customize it for your
|
|
77
|
+
content, see the [Pagefind ranking documentation](https://pagefind.app/docs/ranking/).
|
|
78
|
+
|
|
79
|
+
## Algolia DocSearch
|
|
80
|
+
|
|
81
|
+
[Algolia DocSearch](https://docsearch.algolia.com/) is a free search solution for open-source
|
|
82
|
+
documentation sites. You can apply for the free DocSearch program or use your own Algolia account.
|
|
83
|
+
|
|
84
|
+
### Installation
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npm install @zudoku/plugin-search-algolia
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The published package name is still `@zudoku/plugin-search-algolia` (APIToGo Algolia search plugin).
|
|
91
|
+
Add it via the `plugins` array in your site config.
|
|
92
|
+
|
|
93
|
+
### Configuration
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { algoliaSearchPlugin } from "@zudoku/plugin-search-algolia";
|
|
97
|
+
|
|
98
|
+
export default {
|
|
99
|
+
plugins: [
|
|
100
|
+
algoliaSearchPlugin({
|
|
101
|
+
appId: "YOUR_APP_ID",
|
|
102
|
+
apiKey: "YOUR_SEARCH_API_KEY",
|
|
103
|
+
indices: ["YOUR_INDEX_NAME"],
|
|
104
|
+
}),
|
|
105
|
+
],
|
|
106
|
+
};
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
You can get your credentials by [applying for DocSearch](https://docsearch.algolia.com/apply/) or
|
|
110
|
+
creating an index through the [Algolia dashboard](https://www.algolia.com/dashboard).
|
|
111
|
+
|
|
112
|
+
Any additional [DocSearch options](https://docsearch.algolia.com/docs/api/) can be passed alongside
|
|
113
|
+
the required fields.
|
|
114
|
+
|
|
115
|
+
## Inkeep
|
|
116
|
+
|
|
117
|
+
[Inkeep](https://inkeep.com/) is an AI-powered search and chat platform that can index your
|
|
118
|
+
documentation and provide intelligent search capabilities to your users.
|
|
119
|
+
|
|
120
|
+
### Setting up Inkeep Integration
|
|
121
|
+
|
|
122
|
+
Before you can use Inkeep search in your APIToGo site, you need to set up an Inkeep integration and
|
|
123
|
+
have your site indexed. Here's how to get started:
|
|
124
|
+
|
|
125
|
+
#### 1. Create an Inkeep Account
|
|
126
|
+
|
|
127
|
+
1. Go to [Inkeep](https://inkeep.com/) and sign up for an account
|
|
128
|
+
2. Navigate to the [Inkeep Portal](https://portal.inkeep.com/)
|
|
129
|
+
|
|
130
|
+
#### 2. Set up Site Indexing
|
|
131
|
+
|
|
132
|
+
1. In the Inkeep Portal, create a new project or integration
|
|
133
|
+
2. Configure your site URL so Inkeep can crawl and index your documentation
|
|
134
|
+
3. Ensure your APIToGo site is deployed and publicly accessible for indexing
|
|
135
|
+
4. Wait for Inkeep to crawl and index your site content (this may take some time)
|
|
136
|
+
|
|
137
|
+
#### 3. Get Your Integration Credentials
|
|
138
|
+
|
|
139
|
+
To add Inkeep search to your site you will need to copy some variables from your
|
|
140
|
+
[Inkeep account setting](https://portal.inkeep.com/):
|
|
141
|
+
|
|
142
|
+
- API Key
|
|
143
|
+
- Integration ID
|
|
144
|
+
- Organization ID
|
|
145
|
+
|
|
146
|
+
#### 4. Configure APIToGo
|
|
147
|
+
|
|
148
|
+
Once you have your credentials and your site is indexed, you can configure the `search` option in
|
|
149
|
+
your [APIToGo Configuration](./overview.md):
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
{
|
|
153
|
+
// ...
|
|
154
|
+
search: {
|
|
155
|
+
type: "inkeep",
|
|
156
|
+
apiKey: "<your-api-key>",
|
|
157
|
+
integrationId: "<your-integration-id>",
|
|
158
|
+
organizationId: "<your-organization-id>",
|
|
159
|
+
primaryBrandColor: "#26D6FF",
|
|
160
|
+
organizationDisplayName: "Your Organization Name",
|
|
161
|
+
}
|
|
162
|
+
// ...
|
|
163
|
+
}
|
|
164
|
+
```
|