zudoku 0.0.0-f40ea27 → 0.0.0-f42e3678
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 +2 -2
- package/dist/app/demo.js +16 -1
- package/dist/app/demo.js.map +1 -1
- package/dist/app/main.js +3 -9
- package/dist/app/main.js.map +1 -1
- package/dist/cli/build/handler.js +9 -1
- package/dist/cli/build/handler.js.map +1 -1
- package/dist/config/config.d.ts +1 -0
- package/dist/config/loader.js +2 -5
- package/dist/config/loader.js.map +1 -1
- package/dist/config/validators/BuildSchema.js +5 -0
- package/dist/config/validators/BuildSchema.js.map +1 -1
- package/dist/config/validators/InputNavigationSchema.d.ts +254 -163
- package/dist/config/validators/InputNavigationSchema.js +4 -4
- package/dist/config/validators/InputNavigationSchema.js.map +1 -1
- package/dist/config/validators/InputNavigationSchema.test-d.js +0 -1
- package/dist/config/validators/InputNavigationSchema.test-d.js.map +1 -1
- package/dist/config/validators/NavigationSchema.js +3 -2
- package/dist/config/validators/NavigationSchema.js.map +1 -1
- package/dist/config/validators/ProtectedRoutesSchema.d.ts +12 -0
- package/dist/config/validators/ProtectedRoutesSchema.js +19 -0
- package/dist/config/validators/ProtectedRoutesSchema.js.map +1 -0
- package/dist/config/validators/icon-types.d.ts +1 -1
- package/dist/config/validators/icon-types.js +16 -0
- package/dist/config/validators/icon-types.js.map +1 -1
- package/dist/config/validators/validate.d.ts +36 -20
- package/dist/config/validators/validate.js +18 -4
- package/dist/config/validators/validate.js.map +1 -1
- package/dist/config/validators/validate.test.js +65 -2
- package/dist/config/validators/validate.test.js.map +1 -1
- package/dist/flat-config.d.ts +8 -6
- package/dist/lib/authentication/authentication.d.ts +2 -0
- package/dist/lib/authentication/components/CallbackHandler.js +11 -9
- package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
- package/dist/lib/authentication/components/OAuthErrorPage.d.ts +3 -0
- package/dist/lib/authentication/components/OAuthErrorPage.js +99 -0
- package/dist/lib/authentication/components/OAuthErrorPage.js.map +1 -0
- package/dist/lib/authentication/components/SignIn.js +4 -3
- package/dist/lib/authentication/components/SignIn.js.map +1 -1
- package/dist/lib/authentication/errors.d.ts +6 -12
- package/dist/lib/authentication/errors.js +2 -1
- package/dist/lib/authentication/errors.js.map +1 -1
- package/dist/lib/authentication/hook.d.ts +1 -0
- package/dist/lib/authentication/hook.js.map +1 -1
- package/dist/lib/authentication/providers/azureb2c.js +4 -2
- package/dist/lib/authentication/providers/azureb2c.js.map +1 -1
- package/dist/lib/authentication/providers/clerk.js +4 -2
- package/dist/lib/authentication/providers/clerk.js.map +1 -1
- package/dist/lib/authentication/providers/openid.d.ts +4 -2
- package/dist/lib/authentication/providers/openid.js +14 -6
- package/dist/lib/authentication/providers/openid.js.map +1 -1
- package/dist/lib/components/Banner.js +1 -1
- package/dist/lib/components/Banner.js.map +1 -1
- package/dist/lib/components/CategoryHeading.js +1 -1
- package/dist/lib/components/CategoryHeading.js.map +1 -1
- package/dist/lib/components/Header.js +1 -1
- package/dist/lib/components/Header.js.map +1 -1
- package/dist/lib/components/Heading.js +1 -1
- package/dist/lib/components/Heading.js.map +1 -1
- package/dist/lib/components/Markdown.js +2 -2
- package/dist/lib/components/Markdown.js.map +1 -1
- package/dist/lib/components/MobileTopNavigation.js +11 -6
- package/dist/lib/components/MobileTopNavigation.js.map +1 -1
- package/dist/lib/components/NotFoundPage.js +1 -1
- package/dist/lib/components/NotFoundPage.js.map +1 -1
- package/dist/lib/components/Pagination.js +1 -1
- package/dist/lib/components/Pagination.js.map +1 -1
- package/dist/lib/components/StatusPage.js +4 -0
- package/dist/lib/components/StatusPage.js.map +1 -1
- package/dist/lib/components/TopNavigation.d.ts +5 -0
- package/dist/lib/components/TopNavigation.js +20 -15
- package/dist/lib/components/TopNavigation.js.map +1 -1
- package/dist/lib/components/Typography.d.ts +1 -1
- package/dist/lib/components/Typography.js +1 -1
- package/dist/lib/components/Typography.js.map +1 -1
- package/dist/lib/components/context/ZudokuContext.js +21 -13
- package/dist/lib/components/context/ZudokuContext.js.map +1 -1
- package/dist/lib/components/navigation/NavigationItem.d.ts +1 -1
- package/dist/lib/components/navigation/NavigationItem.js +8 -1
- package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
- package/dist/lib/components/navigation/NavigationWrapper.js +1 -1
- package/dist/lib/components/navigation/NavigationWrapper.js.map +1 -1
- package/dist/lib/components/navigation/utils.d.ts +3 -1
- package/dist/lib/components/navigation/utils.js +6 -3
- package/dist/lib/components/navigation/utils.js.map +1 -1
- package/dist/lib/core/RouteGuard.js +9 -9
- package/dist/lib/core/RouteGuard.js.map +1 -1
- package/dist/lib/core/ZudokuContext.d.ts +5 -2
- package/dist/lib/core/ZudokuContext.js +27 -2
- package/dist/lib/core/ZudokuContext.js.map +1 -1
- package/dist/lib/core/plugins.d.ts +2 -1
- package/dist/lib/core/plugins.js.map +1 -1
- package/dist/lib/errors/ErrorAlert.js +1 -1
- package/dist/lib/errors/ErrorAlert.js.map +1 -1
- package/dist/lib/plugins/api-keys/CreateApiKey.js +7 -3
- package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -1
- package/dist/lib/plugins/api-keys/SettingsApiKeys.js +6 -4
- package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
- package/dist/lib/plugins/api-keys/index.d.ts +1 -0
- package/dist/lib/plugins/api-keys/index.js +4 -8
- package/dist/lib/plugins/api-keys/index.js.map +1 -1
- package/dist/lib/plugins/markdown/MdxPage.js +4 -3
- package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationList.js +2 -1
- package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
- package/dist/lib/plugins/openapi/Sidecar.js +1 -1
- package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
- package/dist/lib/plugins/openapi/SidecarExamples.js +1 -1
- package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/graphql.d.ts +1 -0
- package/dist/lib/plugins/openapi/graphql/graphql.js +1 -0
- package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
- package/dist/lib/plugins/openapi/index.js +43 -11
- package/dist/lib/plugins/openapi/index.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/PathParams.js +1 -1
- package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/Playground.js +4 -2
- package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
- package/dist/lib/plugins/search-inkeep/index.d.ts +5 -22
- package/dist/lib/plugins/search-inkeep/index.js +35 -29
- package/dist/lib/plugins/search-inkeep/index.js.map +1 -1
- package/dist/lib/plugins/search-inkeep/inkeep.d.ts +5 -21
- package/dist/lib/plugins/search-inkeep/inkeep.js +10 -19
- package/dist/lib/plugins/search-inkeep/inkeep.js.map +1 -1
- package/dist/lib/plugins/search-pagefind/PagefindSearch.js +1 -1
- package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
- package/dist/lib/plugins/search-pagefind/ResultList.d.ts +1 -1
- package/dist/lib/plugins/search-pagefind/ResultList.js +12 -5
- package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
- package/dist/lib/ui/ActionButton.js +1 -1
- package/dist/lib/ui/ActionButton.js.map +1 -1
- package/dist/lib/ui/Alert.d.ts +1 -1
- package/dist/lib/ui/Badge.d.ts +1 -1
- package/dist/lib/ui/Button.d.ts +2 -2
- package/dist/lib/ui/CodeBlock.js +1 -1
- package/dist/lib/ui/CodeBlock.js.map +1 -1
- package/dist/lib/ui/Command.d.ts +1 -1
- package/dist/lib/ui/EmbeddedCodeBlock.js +1 -1
- package/dist/lib/ui/EmbeddedCodeBlock.js.map +1 -1
- package/dist/lib/util/invariant.d.ts +6 -5
- package/dist/lib/util/invariant.js +1 -1
- package/dist/lib/util/invariant.js.map +1 -1
- package/dist/vite/build.js +7 -1
- package/dist/vite/build.js.map +1 -1
- package/dist/vite/dev-server.js +9 -1
- package/dist/vite/dev-server.js.map +1 -1
- package/dist/vite/mdx/remark-last-modified.js +1 -28
- package/dist/vite/mdx/remark-last-modified.js.map +1 -1
- package/dist/vite/plugin-docs.js +20 -13
- package/dist/vite/plugin-docs.js.map +1 -1
- package/dist/vite/plugin-mdx.js +2 -3
- package/dist/vite/plugin-mdx.js.map +1 -1
- package/dist/vite/plugin-theme.js +88 -49
- package/dist/vite/plugin-theme.js.map +1 -1
- package/dist/vite/plugin-theme.test.js +25 -4
- package/dist/vite/plugin-theme.test.js.map +1 -1
- package/dist/vite/prerender/worker.js +5 -1
- package/dist/vite/prerender/worker.js.map +1 -1
- package/dist/vite/shadcn-registry.d.ts +8 -8
- package/lib/{Button-BE9IVkWV.js → Button-B3o-2Xdf.js} +2 -2
- package/lib/{Button-BE9IVkWV.js.map → Button-B3o-2Xdf.js.map} +1 -1
- package/lib/{Card-DPhGbYUM.js → Card-CMDQUPM4.js} +2 -2
- package/lib/{Card-DPhGbYUM.js.map → Card-CMDQUPM4.js.map} +1 -1
- package/lib/ClientOnly-E7hGysn1.js.map +1 -1
- package/lib/{CodeBlock-DAKxs_Tu.js → CodeBlock-B-G0eKtw.js} +3 -3
- package/lib/{CodeBlock-DAKxs_Tu.js.map → CodeBlock-B-G0eKtw.js.map} +1 -1
- package/lib/{Command-xsbs2uhf.js → Command-BYukybsa.js} +3 -3
- package/lib/{Command-xsbs2uhf.js.map → Command-BYukybsa.js.map} +1 -1
- package/lib/{Dialog-CiIdyz6a.js → Dialog-u9Uz9sTt.js} +5 -5
- package/lib/{Dialog-CiIdyz6a.js.map → Dialog-u9Uz9sTt.js.map} +1 -1
- package/lib/{Drawer-BzkOKwgC.js → Drawer-DJ05s2pH.js} +86 -86
- package/lib/{Drawer-BzkOKwgC.js.map → Drawer-DJ05s2pH.js.map} +1 -1
- package/lib/{MdxPage-swXPJ0gf.js → MdxPage-Bsko6_kb.js} +34 -34
- package/lib/MdxPage-Bsko6_kb.js.map +1 -0
- package/lib/OAuthErrorPage-DJzGiIBt.js +150 -0
- package/lib/OAuthErrorPage-DJzGiIBt.js.map +1 -0
- package/lib/{OasProvider-CDAM3TB1.js → OasProvider-DQQRt3oS.js} +3 -3
- package/lib/{OasProvider-CDAM3TB1.js.map → OasProvider-DQQRt3oS.js.map} +1 -1
- package/lib/{OperationList-C9Hb9ql8.js → OperationList-DpmkHf26.js} +212 -210
- package/lib/OperationList-DpmkHf26.js.map +1 -0
- package/lib/{Pagination-VGlgeCmS.js → Pagination-kqFNgtnI.js} +10 -9
- package/lib/Pagination-kqFNgtnI.js.map +1 -0
- package/lib/{RouteGuard-CbKd7_9h.js → RouteGuard-0wPUKdxJ.js} +166 -165
- package/lib/{RouteGuard-CbKd7_9h.js.map → RouteGuard-0wPUKdxJ.js.map} +1 -1
- package/lib/{SchemaList-BAbh1BXO.js → SchemaList-DS-pMd6B.js} +9 -9
- package/lib/{SchemaList-BAbh1BXO.js.map → SchemaList-DS-pMd6B.js.map} +1 -1
- package/lib/{SchemaView-C2Io712T.js → SchemaView-BnN6WHjw.js} +6 -6
- package/lib/{SchemaView-C2Io712T.js.map → SchemaView-BnN6WHjw.js.map} +1 -1
- package/lib/Select-BmTTKNPp.js +273 -0
- package/lib/Select-BmTTKNPp.js.map +1 -0
- package/lib/SignUp-BwOSCD-6.js +56 -0
- package/lib/SignUp-BwOSCD-6.js.map +1 -0
- package/lib/{Slot-DwZlQ-vX.js → Slot-DAyXieeZ.js} +1634 -1643
- package/lib/Slot-DAyXieeZ.js.map +1 -0
- package/lib/Spinner-mNLZ6awP.js.map +1 -1
- package/lib/{SyntaxHighlight-CrjhGEwT.js → SyntaxHighlight-BMKR4pl6.js} +757 -757
- package/lib/SyntaxHighlight-BMKR4pl6.js.map +1 -0
- package/lib/{Toc-WCmwFkX-.js → Toc-BKDRCQzU.js} +3 -3
- package/lib/{Toc-WCmwFkX-.js.map → Toc-BKDRCQzU.js.map} +1 -1
- package/lib/ZudokuContext-CLl5w57E.js +1278 -0
- package/lib/ZudokuContext-CLl5w57E.js.map +1 -0
- package/lib/{chunk-DQRVZFIR-DHK7_Ilc.js → chunk-QMGIS6GS-CEOk3lro.js} +3 -3
- package/lib/chunk-QMGIS6GS-CEOk3lro.js.map +1 -0
- package/lib/{circular-B42RaanD.js → circular-8GWQDvCW.js} +2 -2
- package/lib/{circular-B42RaanD.js.map → circular-8GWQDvCW.js.map} +1 -1
- package/lib/{cn-wvCW-ho6.js → cn-dYga0KKN.js} +2 -2
- package/lib/cn-dYga0KKN.js.map +1 -0
- package/lib/{createServer-BKFsRuuk.js → createServer-BsezSzvV.js} +3398 -3552
- package/lib/createServer-BsezSzvV.js.map +1 -0
- package/lib/errors-Cs7hKmdL.js +45 -0
- package/lib/errors-Cs7hKmdL.js.map +1 -0
- package/lib/hook-DbUCLQNg.js +247 -0
- package/lib/hook-DbUCLQNg.js.map +1 -0
- package/lib/index-A5Qdwj1B.js +4081 -0
- package/lib/index-A5Qdwj1B.js.map +1 -0
- package/lib/{index-B6Re5_cx.js → index-Bg7Js3jB.js} +873 -951
- package/lib/index-Bg7Js3jB.js.map +1 -0
- package/lib/{index-CcV90rin.js → index-BkW9tJ6j.js} +2 -2
- package/lib/{index-CcV90rin.js.map → index-BkW9tJ6j.js.map} +1 -1
- package/lib/index-Bm35Tkgf.js +107 -0
- package/lib/index-Bm35Tkgf.js.map +1 -0
- package/lib/index-CrcNWbel.js.map +1 -1
- package/lib/index-DI5SPFK9.js.map +1 -1
- package/lib/index-DmNq2fbN.js.map +1 -1
- package/lib/index.esm-CdzlRw50.js +1254 -0
- package/lib/index.esm-CdzlRw50.js.map +1 -0
- package/lib/{invariant-DAFpPywt.js → invariant-Bm-FVUQE.js} +2 -6
- package/lib/invariant-Bm-FVUQE.js.map +1 -0
- package/lib/jsx-runtime-C5mzlN2N.js.map +1 -1
- package/lib/processors/removeExtensions.js.map +1 -1
- package/lib/processors/removeParameters.js.map +1 -1
- package/lib/processors/removePaths.js.map +1 -1
- package/lib/processors/traverse.js.map +1 -1
- package/lib/ui/Accordion.js +1 -1
- package/lib/ui/Accordion.js.map +1 -1
- package/lib/ui/ActionButton.js +10 -10
- package/lib/ui/ActionButton.js.map +1 -1
- package/lib/ui/Alert.js +1 -1
- package/lib/ui/Alert.js.map +1 -1
- package/lib/ui/AlertDialog.js +1 -1
- package/lib/ui/AlertDialog.js.map +1 -1
- package/lib/ui/Badge.js +1 -1
- package/lib/ui/Badge.js.map +1 -1
- package/lib/ui/Breadcrumb.js +1 -1
- package/lib/ui/Breadcrumb.js.map +1 -1
- package/lib/ui/Button.js +1 -1
- package/lib/ui/Button.js.map +1 -1
- package/lib/ui/Callout.js +1 -1
- package/lib/ui/Callout.js.map +1 -1
- package/lib/ui/Card.js +1 -1
- package/lib/ui/Card.js.map +1 -1
- package/lib/ui/Carousel.js +1 -1
- package/lib/ui/Carousel.js.map +1 -1
- package/lib/ui/Checkbox.js +1 -1
- package/lib/ui/Checkbox.js.map +1 -1
- package/lib/ui/CodeBlock.js +2 -2
- package/lib/ui/Command.js +2 -2
- package/lib/ui/Command.js.map +1 -1
- package/lib/ui/Dialog.js +1 -1
- package/lib/ui/Dialog.js.map +1 -1
- package/lib/ui/Drawer.js +2 -2
- package/lib/ui/DropdownMenu.js +1 -1
- package/lib/ui/DropdownMenu.js.map +1 -1
- package/lib/ui/EmbeddedCodeBlock.js +2 -2
- package/lib/ui/EmbeddedCodeBlock.js.map +1 -1
- package/lib/ui/Form.js +2 -2
- package/lib/ui/Form.js.map +1 -1
- package/lib/ui/HoverCard.js +1 -1
- package/lib/ui/HoverCard.js.map +1 -1
- package/lib/ui/Input.js +1 -1
- package/lib/ui/Input.js.map +1 -1
- package/lib/ui/Label.js +1 -1
- package/lib/ui/Label.js.map +1 -1
- package/lib/ui/Pagination.js +1 -1
- package/lib/ui/Pagination.js.map +1 -1
- package/lib/ui/Popover.js +1 -1
- package/lib/ui/Popover.js.map +1 -1
- package/lib/ui/Progress.js +1 -1
- package/lib/ui/Progress.js.map +1 -1
- package/lib/ui/RadioGroup.js +1 -1
- package/lib/ui/RadioGroup.js.map +1 -1
- package/lib/ui/ScrollArea.js +1 -1
- package/lib/ui/ScrollArea.js.map +1 -1
- package/lib/ui/Select.js +1 -1
- package/lib/ui/Select.js.map +1 -1
- package/lib/ui/Skeleton.js +1 -1
- package/lib/ui/Skeleton.js.map +1 -1
- package/lib/ui/Slider.js +1 -1
- package/lib/ui/Slider.js.map +1 -1
- package/lib/ui/Stepper.js.map +1 -1
- package/lib/ui/Switch.js +1 -1
- package/lib/ui/Switch.js.map +1 -1
- package/lib/ui/SyntaxHighlight.js +4 -4
- package/lib/ui/Tabs.js +1 -1
- package/lib/ui/Tabs.js.map +1 -1
- package/lib/ui/Textarea.js +1 -1
- package/lib/ui/Textarea.js.map +1 -1
- package/lib/ui/Toggle.js +1 -1
- package/lib/ui/Toggle.js.map +1 -1
- package/lib/ui/ToggleGroup.js +1 -1
- package/lib/ui/ToggleGroup.js.map +1 -1
- package/lib/ui/Tooltip.js +1 -1
- package/lib/ui/Tooltip.js.map +1 -1
- package/lib/ui/util.js +1 -1
- package/lib/{useExposedProps-BIYjecPD.js → useExposedProps-KcgXHKeE.js} +2 -2
- package/lib/{useExposedProps-BIYjecPD.js.map → useExposedProps-KcgXHKeE.js.map} +1 -1
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-auth0.js.map +1 -1
- package/lib/zudoku.auth-azureb2c.js +46 -9883
- package/lib/zudoku.auth-azureb2c.js.map +1 -1
- package/lib/zudoku.auth-clerk.js +25 -22
- package/lib/zudoku.auth-clerk.js.map +1 -1
- package/lib/zudoku.auth-openid.js +249 -231
- package/lib/zudoku.auth-openid.js.map +1 -1
- package/lib/zudoku.auth-supabase.js +97 -0
- package/lib/zudoku.auth-supabase.js.map +1 -0
- package/lib/zudoku.components.js +30 -29
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.hooks.js +17 -16
- package/lib/zudoku.hooks.js.map +1 -1
- package/lib/zudoku.icons.js.map +1 -1
- package/lib/zudoku.plugin-api-catalog.js +26 -25
- package/lib/zudoku.plugin-api-catalog.js.map +1 -1
- package/lib/zudoku.plugin-api-keys.js +428 -299
- package/lib/zudoku.plugin-api-keys.js.map +1 -1
- package/lib/zudoku.plugin-custom-pages.js +1 -1
- package/lib/zudoku.plugin-custom-pages.js.map +1 -1
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-markdown.js.map +1 -1
- package/lib/zudoku.plugin-openapi.js +7 -6
- package/lib/zudoku.plugin-openapi.js.map +1 -1
- package/lib/zudoku.plugin-redirect.js +1 -1
- package/lib/zudoku.plugin-redirect.js.map +1 -1
- package/lib/zudoku.plugin-search-inkeep.js +54 -57
- package/lib/zudoku.plugin-search-inkeep.js.map +1 -1
- package/lib/zudoku.plugin-search-pagefind.js +123 -118
- package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
- package/lib/zudoku.plugins.js.map +1 -1
- package/package.json +34 -33
- package/src/app/demo.tsx +19 -2
- package/src/app/main.css +26 -5
- package/src/app/main.tsx +6 -14
- package/src/lib/authentication/authentication.ts +2 -2
- package/src/lib/authentication/components/CallbackHandler.tsx +22 -15
- package/src/lib/authentication/components/OAuthErrorPage.tsx +171 -0
- package/src/lib/authentication/components/SignIn.tsx +5 -12
- package/src/lib/authentication/errors.ts +27 -13
- package/src/lib/authentication/hook.ts +2 -0
- package/src/lib/authentication/providers/azureb2c.tsx +8 -3
- package/src/lib/authentication/providers/clerk.tsx +4 -1
- package/src/lib/authentication/providers/openid.tsx +30 -5
- package/src/lib/components/Banner.tsx +0 -1
- package/src/lib/components/CategoryHeading.tsx +4 -1
- package/src/lib/components/Header.tsx +5 -2
- package/src/lib/components/Heading.tsx +1 -1
- package/src/lib/components/Markdown.tsx +3 -3
- package/src/lib/components/MobileTopNavigation.tsx +60 -8
- package/src/lib/components/NotFoundPage.tsx +3 -2
- package/src/lib/components/Pagination.tsx +1 -0
- package/src/lib/components/StatusPage.tsx +5 -0
- package/src/lib/components/TopNavigation.tsx +34 -18
- package/src/lib/components/Typography.tsx +1 -1
- package/src/lib/components/context/ZudokuContext.ts +25 -18
- package/src/lib/components/navigation/NavigationItem.tsx +9 -1
- package/src/lib/components/navigation/NavigationWrapper.tsx +4 -1
- package/src/lib/components/navigation/utils.ts +9 -3
- package/src/lib/core/RouteGuard.tsx +13 -13
- package/src/lib/core/ZudokuContext.ts +40 -5
- package/src/lib/core/plugins.ts +2 -1
- package/src/lib/errors/ErrorAlert.tsx +5 -7
- package/src/lib/plugins/api-keys/CreateApiKey.tsx +12 -1
- package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +37 -13
- package/src/lib/plugins/api-keys/index.tsx +8 -9
- package/src/lib/plugins/markdown/MdxPage.tsx +4 -3
- package/src/lib/plugins/openapi/OperationList.tsx +4 -2
- package/src/lib/plugins/openapi/Sidecar.tsx +1 -1
- package/src/lib/plugins/openapi/SidecarExamples.tsx +1 -1
- package/src/lib/plugins/openapi/graphql/gql.ts +3 -3
- package/src/lib/plugins/openapi/graphql/graphql.ts +2 -0
- package/src/lib/plugins/openapi/index.tsx +67 -17
- package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -1
- package/src/lib/plugins/openapi/playground/Playground.tsx +8 -2
- package/src/lib/plugins/search-inkeep/index.tsx +54 -58
- package/src/lib/plugins/search-inkeep/inkeep.ts +19 -21
- package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +1 -0
- package/src/lib/plugins/search-pagefind/ResultList.tsx +13 -4
- package/src/lib/ui/ActionButton.tsx +3 -1
- package/src/lib/ui/Alert.tsx +1 -1
- package/src/lib/ui/CodeBlock.tsx +1 -1
- package/src/lib/ui/EmbeddedCodeBlock.tsx +1 -1
- package/src/lib/util/invariant.ts +7 -5
- package/lib/Alert-CT_ViLrJ.js +0 -161
- package/lib/Alert-CT_ViLrJ.js.map +0 -1
- package/lib/MdxPage-swXPJ0gf.js.map +0 -1
- package/lib/OperationList-C9Hb9ql8.js.map +0 -1
- package/lib/Pagination-VGlgeCmS.js.map +0 -1
- package/lib/SignUp-5RUdVhnq.js +0 -63
- package/lib/SignUp-5RUdVhnq.js.map +0 -1
- package/lib/Slot-DwZlQ-vX.js.map +0 -1
- package/lib/SyntaxHighlight-CrjhGEwT.js.map +0 -1
- package/lib/chunk-DQRVZFIR-DHK7_Ilc.js.map +0 -1
- package/lib/clerk-BDZ31hjU.js +0 -25190
- package/lib/clerk-BDZ31hjU.js.map +0 -1
- package/lib/cn-wvCW-ho6.js.map +0 -1
- package/lib/createServer-BKFsRuuk.js.map +0 -1
- package/lib/errors-CF2X_x5o.js +0 -78
- package/lib/errors-CF2X_x5o.js.map +0 -1
- package/lib/hook-Bd0yS8M0.js +0 -1503
- package/lib/hook-Bd0yS8M0.js.map +0 -1
- package/lib/index-B6Re5_cx.js.map +0 -1
- package/lib/index-CLy1XyH0.js +0 -3919
- package/lib/index-CLy1XyH0.js.map +0 -1
- package/lib/index-ClhS5TxS.js +0 -107
- package/lib/index-ClhS5TxS.js.map +0 -1
- package/lib/index.esm-Cp4wkyud.js +0 -1236
- package/lib/index.esm-Cp4wkyud.js.map +0 -1
- package/lib/invariant-DAFpPywt.js.map +0 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
|
|
2
2
|
import { createContext, useContext } from "react";
|
|
3
3
|
import { matchPath, useLocation } from "react-router";
|
|
4
|
-
import { useAuth } from "../../authentication/hook.js";
|
|
5
4
|
import { joinUrl } from "../../util/joinUrl.js";
|
|
6
5
|
import { CACHE_KEYS } from "../cache.js";
|
|
7
6
|
import { traverseNavigation } from "../navigation/utils.js";
|
|
@@ -34,11 +33,24 @@ const getItemPath = (item) => {
|
|
|
34
33
|
return undefined;
|
|
35
34
|
}
|
|
36
35
|
};
|
|
36
|
+
const extractAllPaths = (items) => {
|
|
37
|
+
const paths = new Set();
|
|
38
|
+
const collectPaths = (items) => {
|
|
39
|
+
for (const item of items) {
|
|
40
|
+
const itemPath = getItemPath(item)?.split("?").at(0)?.split("#").at(0);
|
|
41
|
+
if (itemPath)
|
|
42
|
+
paths.add(itemPath);
|
|
43
|
+
if (item.type === "category") {
|
|
44
|
+
collectPaths(item.items);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
collectPaths(items);
|
|
49
|
+
return [...paths];
|
|
50
|
+
};
|
|
37
51
|
export const useCurrentNavigation = () => {
|
|
38
|
-
const { getPluginNavigation, navigation
|
|
52
|
+
const { getPluginNavigation, navigation } = useZudoku();
|
|
39
53
|
const location = useLocation();
|
|
40
|
-
const auth = useAuth();
|
|
41
|
-
const isProtectedRoute = options.protectedRoutes?.some((route) => matchPath(route, location.pathname));
|
|
42
54
|
const navItem = traverseNavigation(navigation, (item, parentCategories) => {
|
|
43
55
|
if (getItemPath(item) === location.pathname) {
|
|
44
56
|
return parentCategories.at(0) ?? item;
|
|
@@ -50,11 +62,7 @@ export const useCurrentNavigation = () => {
|
|
|
50
62
|
});
|
|
51
63
|
let topNavItem = navItem;
|
|
52
64
|
if (!navItem && data.length > 0) {
|
|
53
|
-
|
|
54
|
-
const pluginBasePaths = data.flatMap((item) => {
|
|
55
|
-
return getItemPath(item)?.split("?").at(0)?.split("#").at(0) ?? [];
|
|
56
|
-
});
|
|
57
|
-
// Find top-level nav item that matches any plugin base path
|
|
65
|
+
const pluginBasePaths = extractAllPaths(data);
|
|
58
66
|
topNavItem = navigation
|
|
59
67
|
.flatMap((item) => {
|
|
60
68
|
const itemPath = getItemPath(item);
|
|
@@ -66,11 +74,11 @@ export const useCurrentNavigation = () => {
|
|
|
66
74
|
matchPath({ path: basePath, end: false }, path));
|
|
67
75
|
})?.item;
|
|
68
76
|
}
|
|
69
|
-
const hasNavigation = auth.isAuthEnabled && !auth.isAuthenticated && isProtectedRoute;
|
|
70
77
|
return {
|
|
71
|
-
navigation:
|
|
72
|
-
? []
|
|
73
|
-
|
|
78
|
+
navigation: [
|
|
79
|
+
...(navItem?.type === "category" ? navItem.items : []),
|
|
80
|
+
...data,
|
|
81
|
+
],
|
|
74
82
|
topNavItem,
|
|
75
83
|
};
|
|
76
84
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZudokuContext.js","sourceRoot":"","sources":["../../../../src/lib/components/context/ZudokuContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ZudokuContext.js","sourceRoot":"","sources":["../../../../src/lib/components/context/ZudokuContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,4 @@ export declare const DATA_ANCHOR_ATTR = "data-anchor";
|
|
|
3
3
|
export declare const NavigationItem: ({ item, onRequestClose, }: {
|
|
4
4
|
item: NavigationItemType;
|
|
5
5
|
onRequestClose?: () => void;
|
|
6
|
-
}) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -3,13 +3,15 @@ import { ExternalLinkIcon } from "lucide-react";
|
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import { NavLink, useLocation } from "react-router";
|
|
5
5
|
import { Tooltip, TooltipArrow, TooltipContent, TooltipProvider, TooltipTrigger, } from "zudoku/ui/Tooltip.js";
|
|
6
|
+
import { useAuth } from "../../authentication/hook.js";
|
|
6
7
|
import { cn } from "../../util/cn.js";
|
|
7
8
|
import { joinUrl } from "../../util/joinUrl.js";
|
|
8
9
|
import { AnchorLink } from "../AnchorLink.js";
|
|
9
10
|
import { useViewportAnchor } from "../context/ViewportAnchorContext.js";
|
|
11
|
+
import { useZudoku } from "../context/ZudokuContext.js";
|
|
10
12
|
import { NavigationBadge } from "./NavigationBadge.js";
|
|
11
13
|
import { NavigationCategory } from "./NavigationCategory.js";
|
|
12
|
-
import { navigationListItem } from "./utils.js";
|
|
14
|
+
import { isHiddenItem, navigationListItem } from "./utils.js";
|
|
13
15
|
const TruncatedLabel = ({ label, className, }) => {
|
|
14
16
|
const ref = useRef(null);
|
|
15
17
|
const [isTruncated, setIsTruncated] = useState(false);
|
|
@@ -26,6 +28,11 @@ export const DATA_ANCHOR_ATTR = "data-anchor";
|
|
|
26
28
|
export const NavigationItem = ({ item, onRequestClose, }) => {
|
|
27
29
|
const location = useLocation();
|
|
28
30
|
const { activeAnchor } = useViewportAnchor();
|
|
31
|
+
const auth = useAuth();
|
|
32
|
+
const context = useZudoku();
|
|
33
|
+
if (!isHiddenItem(auth, context)(item)) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
29
36
|
switch (item.type) {
|
|
30
37
|
case "category":
|
|
31
38
|
return (_jsx(NavigationCategory, { category: item, onRequestClose: onRequestClose }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationItem.js","sourceRoot":"","sources":["../../../../src/lib/components/navigation/NavigationItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"NavigationItem.js","sourceRoot":"","sources":["../../../../src/lib/components/navigation/NavigationItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ export const NavigationWrapper = ({ children, className, }) => {
|
|
|
11
11
|
const active = navRef.current?.querySelector('[aria-current="page"]');
|
|
12
12
|
scrollIntoViewIfNeeded(active ?? null);
|
|
13
13
|
}, []);
|
|
14
|
-
return (_jsxs("div", { className: "grid sticky top-(--header-height) lg:h-[calc(100vh-var(--header-height))] grid-rows-[1fr_min-content] border-r", children: [_jsx("nav", { ref: navRef, className: cn("hidden max-w-[calc(var(--side-nav-width)+var(--padding-nav-item))] lg:flex scrollbar flex-col overflow-y-auto shrink-0 text-sm pe-3 ps-4 lg:ps-8", "-mx-(--padding-nav-item) pb-[8vh] pt-(--padding-content-top) scroll-pt-2 gap-1",
|
|
14
|
+
return (_jsxs("div", { className: "grid sticky top-(--header-height) lg:h-[calc(100vh-var(--header-height))] grid-rows-[1fr_min-content] border-r", "data-pagefind-ignore": "all", children: [_jsx("nav", { ref: navRef, className: cn("hidden max-w-[calc(var(--side-nav-width)+var(--padding-nav-item))] lg:flex scrollbar flex-col overflow-y-auto shrink-0 text-sm pe-3 ps-4 lg:ps-8", "-mx-(--padding-nav-item) pb-[8vh] pt-(--padding-content-top) scroll-pt-2 gap-1",
|
|
15
15
|
// Revert the padding/margin on the first child
|
|
16
16
|
"-mt-2.5", className), style: {
|
|
17
17
|
maskImage: `linear-gradient(180deg, transparent 1%, rgba(0, 0, 0, 1) 20px, rgba(0, 0, 0, 1) 90%, transparent 99%)`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationWrapper.js","sourceRoot":"","sources":["../../../../src/lib/components/navigation/NavigationWrapper.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAA0B,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,QAAQ,EACR,SAAS,GAGT,EAAE,EAAE;IACJ,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACtE,sBAAsB,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,
|
|
1
|
+
{"version":3,"file":"NavigationWrapper.js","sourceRoot":"","sources":["../../../../src/lib/components/navigation/NavigationWrapper.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAA0B,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,QAAQ,EACR,SAAS,GAGT,EAAE,EAAE;IACJ,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACtE,sBAAsB,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,eACE,SAAS,EAAC,gHAAgH,0BACrG,KAAK,aAE1B,cACE,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,EAAE,CACX,kJAAkJ,EAClJ,gFAAgF;gBAChF,+CAA+C;gBAC/C,SAAS,EACT,SAAS,CACV,EACD,KAAK,EAAE;oBACL,SAAS,EAAE,uGAAuG;iBACnH,YAEA,QAAQ,GACL,EAEN,cAAK,SAAS,EAAC,wJAAwJ,YACpK,OAAO,CAAC,IAAI,EAAE,aAAa,KAAK,KAAK,IAAI,KAAC,eAAe,KAAG,GACzD,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { NavigationCategory, NavigationItem } from "../../../config/validators/NavigationSchema.js";
|
|
2
|
+
import type { UseAuthReturn } from "../../authentication/hook.js";
|
|
3
|
+
import type { ZudokuContext } from "../../core/ZudokuContext.js";
|
|
2
4
|
export type TraverseCallback<T> = (item: NavigationItem, parentCategories: NavigationItem[]) => T | void;
|
|
3
5
|
export declare const traverseNavigation: <T>(navigation: NavigationItem[], callback: TraverseCallback<T>) => T | undefined;
|
|
4
6
|
export declare const traverseNavigationItem: <T>(item: NavigationItem, callback: TraverseCallback<T>, parentCategories?: NavigationItem[]) => T | undefined;
|
|
@@ -19,4 +21,4 @@ export declare const navigationListItem: (props?: ({
|
|
|
19
21
|
isMuted?: boolean | null | undefined;
|
|
20
22
|
isPending?: boolean | null | undefined;
|
|
21
23
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
22
|
-
export declare const isHiddenItem: (
|
|
24
|
+
export declare const isHiddenItem: (auth: UseAuthReturn, context: ZudokuContext) => (item: NavigationItem) => boolean;
|
|
@@ -96,13 +96,16 @@ export const navigationListItem = cva("relative flex items-center gap-2 px-(--pa
|
|
|
96
96
|
isActive: false,
|
|
97
97
|
},
|
|
98
98
|
});
|
|
99
|
-
export const isHiddenItem = (
|
|
99
|
+
export const isHiddenItem = (auth, context) => (item) => {
|
|
100
|
+
if (typeof item.display === "function") {
|
|
101
|
+
return item.display({ context, auth });
|
|
102
|
+
}
|
|
100
103
|
if (item.display === "hide")
|
|
101
104
|
return false;
|
|
102
105
|
if (!item.label)
|
|
103
106
|
return false;
|
|
104
|
-
return ((item.display === "auth" && isAuthenticated) ||
|
|
105
|
-
(item.display === "anon" && !isAuthenticated) ||
|
|
107
|
+
return ((item.display === "auth" && auth.isAuthenticated) ||
|
|
108
|
+
(item.display === "anon" && !auth.isAuthenticated) ||
|
|
106
109
|
!item.display ||
|
|
107
110
|
item.display === "always");
|
|
108
111
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/components/navigation/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/components/navigation/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,9 +17,12 @@ export const RouteGuard = () => {
|
|
|
17
17
|
const location = useLocation();
|
|
18
18
|
const latestPath = useLatest(location.pathname);
|
|
19
19
|
const shouldBypass = use(BypassProtectedRoutesContext);
|
|
20
|
-
const { protectedRoutes
|
|
21
|
-
const
|
|
22
|
-
protectedRoutes.
|
|
20
|
+
const { protectedRoutes } = zudoku.options;
|
|
21
|
+
const authCheckFn = !shouldBypass && protectedRoutes
|
|
22
|
+
? Object.entries(protectedRoutes).find(([path]) => matchPath({ path, end: true }, location.pathname))?.[1]
|
|
23
|
+
: undefined;
|
|
24
|
+
const isProtectedRoute = authCheckFn !== undefined;
|
|
25
|
+
const needsToSignIn = isProtectedRoute && !authCheckFn({ auth, context: zudoku });
|
|
23
26
|
useQuery({
|
|
24
27
|
queryKey: ["login-redirect"],
|
|
25
28
|
queryFn: async () => {
|
|
@@ -29,19 +32,16 @@ export const RouteGuard = () => {
|
|
|
29
32
|
});
|
|
30
33
|
return true;
|
|
31
34
|
},
|
|
32
|
-
enabled: typeof window !== "undefined" &&
|
|
33
|
-
isProtected &&
|
|
34
|
-
!auth.isPending &&
|
|
35
|
-
!auth.isAuthenticated,
|
|
35
|
+
enabled: typeof window !== "undefined" && needsToSignIn && !auth.isPending,
|
|
36
36
|
});
|
|
37
|
-
if (
|
|
37
|
+
if (needsToSignIn) {
|
|
38
38
|
return (_jsx(Dialog, { open: true, onOpenChange: (open) => {
|
|
39
39
|
if (!open) {
|
|
40
40
|
void navigate(-1);
|
|
41
41
|
}
|
|
42
42
|
}, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Logging you in..." }) }), _jsx(DialogDescription, { children: "Please wait while we log you in." })] }) }));
|
|
43
43
|
}
|
|
44
|
-
if (
|
|
44
|
+
if (isProtectedRoute && !auth.isAuthEnabled) {
|
|
45
45
|
throw new ZudokuError("Authentication is not enabled", {
|
|
46
46
|
title: "Authentication is not enabled",
|
|
47
47
|
developerHint: "To use protectedRoutes you need authentication to be enabled",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteGuard.js","sourceRoot":"","sources":["../../../src/lib/core/RouteGuard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uDAAuD,CAAC;AACrG,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"RouteGuard.js","sourceRoot":"","sources":["../../../src/lib/core/RouteGuard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,14 @@ import type { Location } from "react-router";
|
|
|
4
4
|
import type { BundledTheme, HighlighterCore } from "shiki";
|
|
5
5
|
import type { z } from "zod/v4";
|
|
6
6
|
import type { Navigation } from "../../config/validators/NavigationSchema.js";
|
|
7
|
+
import { type ProtectedRoutesInput } from "../../config/validators/ProtectedRoutesSchema.js";
|
|
7
8
|
import type { FooterSchema } from "../../config/validators/validate.js";
|
|
8
9
|
import type { AuthenticationPlugin } from "../authentication/authentication.js";
|
|
9
10
|
import { type AuthState } from "../authentication/state.js";
|
|
10
11
|
import type { ComponentsContextType } from "../components/context/ComponentsContext.js";
|
|
11
12
|
import type { SlotType } from "../components/context/SlotProvider.js";
|
|
12
13
|
import type { MdxComponentsType } from "../util/MdxComponents.js";
|
|
13
|
-
import { type ZudokuPlugin } from "./plugins.js";
|
|
14
|
+
import { type ProfileNavigationItem, type ZudokuPlugin } from "./plugins.js";
|
|
14
15
|
export interface ZudokuEvents {
|
|
15
16
|
location: (event: {
|
|
16
17
|
from?: Location;
|
|
@@ -55,6 +56,7 @@ type Site = Partial<{
|
|
|
55
56
|
};
|
|
56
57
|
width?: string | number;
|
|
57
58
|
alt?: string;
|
|
59
|
+
href?: string;
|
|
58
60
|
};
|
|
59
61
|
banner?: {
|
|
60
62
|
message: ReactNode;
|
|
@@ -80,7 +82,7 @@ export type ZudokuContextOptions = {
|
|
|
80
82
|
components?: MdxComponentsType;
|
|
81
83
|
};
|
|
82
84
|
overrides?: ComponentsContextType;
|
|
83
|
-
protectedRoutes?:
|
|
85
|
+
protectedRoutes?: ProtectedRoutesInput;
|
|
84
86
|
syntaxHighlighting?: {
|
|
85
87
|
highlighter: HighlighterCore;
|
|
86
88
|
themes?: {
|
|
@@ -105,6 +107,7 @@ export declare class ZudokuContext {
|
|
|
105
107
|
addEventListener<E extends keyof ZudokuEvents>(event: E, callback: ZudokuEvents[E]): import("nanoevents").Unsubscribe;
|
|
106
108
|
emitEvent: <E extends keyof ZudokuEvents>(event: E, ...data: Parameters<ZudokuEvents[E]>) => void;
|
|
107
109
|
getPluginNavigation: (path: string) => Promise<import("../../config/validators/NavigationSchema.js").NavigationItem[]>;
|
|
110
|
+
getProfileMenuItems: () => ProfileNavigationItem[];
|
|
108
111
|
signRequest: (request: Request) => Promise<Request>;
|
|
109
112
|
}
|
|
110
113
|
export {};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createNanoEvents } from "nanoevents";
|
|
2
|
+
import { ProtectedRoutesSchema, } from "../../config/validators/ProtectedRoutesSchema.js";
|
|
2
3
|
import { useAuthState } from "../authentication/state.js";
|
|
3
4
|
import { joinUrl } from "../util/joinUrl.js";
|
|
4
5
|
import { objectEntries } from "../util/objectEntries.js";
|
|
5
|
-
import { isApiIdentityPlugin, isAuthenticationPlugin, isEventConsumerPlugin, isNavigationPlugin, needsInitialization, } from "./plugins.js";
|
|
6
|
+
import { isApiIdentityPlugin, isAuthenticationPlugin, isEventConsumerPlugin, isNavigationPlugin, isProfileMenuPlugin, needsInitialization, } from "./plugins.js";
|
|
6
7
|
export class ZudokuContext {
|
|
7
8
|
plugins;
|
|
8
9
|
navigation;
|
|
@@ -14,7 +15,18 @@ export class ZudokuContext {
|
|
|
14
15
|
navigationPlugins;
|
|
15
16
|
emitter = createNanoEvents();
|
|
16
17
|
constructor(options, queryClient) {
|
|
17
|
-
const
|
|
18
|
+
const pluginProtectedRoutes = Object.fromEntries((options.plugins ?? []).flatMap((plugin) => {
|
|
19
|
+
if (!isNavigationPlugin(plugin))
|
|
20
|
+
return [];
|
|
21
|
+
const routes = plugin.getProtectedRoutes?.();
|
|
22
|
+
if (!routes)
|
|
23
|
+
return [];
|
|
24
|
+
return Object.entries(ProtectedRoutesSchema.parse(routes) ?? {});
|
|
25
|
+
}));
|
|
26
|
+
const protectedRoutes = {
|
|
27
|
+
...pluginProtectedRoutes,
|
|
28
|
+
...ProtectedRoutesSchema.parse(options.protectedRoutes),
|
|
29
|
+
};
|
|
18
30
|
this.queryClient = queryClient;
|
|
19
31
|
this.options = { ...options, protectedRoutes };
|
|
20
32
|
this.plugins = options.plugins ?? [];
|
|
@@ -58,6 +70,14 @@ export class ZudokuContext {
|
|
|
58
70
|
const navigations = await Promise.all(this.navigationPlugins.map((plugin) => plugin.getNavigation?.(joinUrl(path), this)));
|
|
59
71
|
return navigations.flatMap((nav) => nav ?? []);
|
|
60
72
|
};
|
|
73
|
+
getProfileMenuItems = () => {
|
|
74
|
+
const accountItems = this.plugins
|
|
75
|
+
.filter((p) => isProfileMenuPlugin(p))
|
|
76
|
+
.flatMap((p) => p.getProfileMenuItems(this))
|
|
77
|
+
.sort(sortByCategory(["top", "middle", "bottom"]))
|
|
78
|
+
.sort((i) => i.weight ?? 0);
|
|
79
|
+
return accountItems;
|
|
80
|
+
};
|
|
61
81
|
signRequest = async (request) => {
|
|
62
82
|
if (!this.authentication) {
|
|
63
83
|
throw new Error("No authentication provider configured");
|
|
@@ -65,4 +85,9 @@ export class ZudokuContext {
|
|
|
65
85
|
return await this.authentication.signRequest(request);
|
|
66
86
|
};
|
|
67
87
|
}
|
|
88
|
+
const sortByCategory = (categories) => (a, b) => {
|
|
89
|
+
const aIndex = categories.indexOf(a.category ?? "middle");
|
|
90
|
+
const bIndex = categories.indexOf(b.category ?? "middle");
|
|
91
|
+
return aIndex - bIndex;
|
|
92
|
+
};
|
|
68
93
|
//# sourceMappingURL=ZudokuContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZudokuContext.js","sourceRoot":"","sources":["../../../src/lib/core/ZudokuContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ZudokuContext.js","sourceRoot":"","sources":["../../../src/lib/core/ZudokuContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { LucideIcon } from "lucide-react";
|
|
|
2
2
|
import type { ReactElement } from "react";
|
|
3
3
|
import type { Location, RouteObject } from "react-router";
|
|
4
4
|
import type { Navigation } from "../../config/validators/NavigationSchema.js";
|
|
5
|
+
import type { ProtectedRoutesInput } from "../../config/validators/ProtectedRoutesSchema.js";
|
|
5
6
|
import type { AuthenticationPlugin } from "../authentication/authentication.js";
|
|
6
7
|
import type { MdxComponentsType } from "../util/MdxComponents.js";
|
|
7
8
|
import type { ApiIdentity, ZudokuContext, ZudokuEvents } from "./ZudokuContext.js";
|
|
@@ -10,7 +11,7 @@ export type { AuthenticationPlugin, RouteObject };
|
|
|
10
11
|
export interface NavigationPlugin {
|
|
11
12
|
getRoutes: () => RouteObject[];
|
|
12
13
|
getNavigation?: (path: string, context: ZudokuContext) => Promise<Navigation>;
|
|
13
|
-
getProtectedRoutes?: () =>
|
|
14
|
+
getProtectedRoutes?: () => ProtectedRoutesInput;
|
|
14
15
|
}
|
|
15
16
|
export declare const createApiIdentityPlugin: (plugin: ApiIdentityPlugin) => ApiIdentityPlugin;
|
|
16
17
|
export declare const createProfileMenuPlugin: (plugin: ProfileMenuPlugin) => ProfileMenuPlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/lib/core/plugins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/lib/core/plugins.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,MAAyB,EACN,EAAE,CAAC,MAAM,CAAC;AAE/B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,MAAyB,EACN,EAAE,CAAC,MAAM,CAAC;AAsC/B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,GAAiB,EACW,EAAE,CAC9B,QAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;AAEpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,GAAiB,EACS,EAAE,CAC5B,qBAAqB,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,mBAAmB,KAAK,UAAU,CAAC;AAEhF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,GAAiB,EACQ,EAAE,CAC3B,WAAW,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC;AAE5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,GAAiB,EACY,EAAE,CAC/B,QAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,GAAiB,EACY,EAAE,CAC/B,cAAc,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAiB,EAAuB,EAAE,CAC5E,YAAY,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAiB,EAAuB,EAAE,CAChE,SAAS,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC;AAExD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAiB,EAAuB,EAAE,CAC5E,kBAAkB,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,gBAAgB,KAAK,UAAU,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,GAAiB,EACS,EAAE,CAC5B,eAAe,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,UAAU,CAAC"}
|
|
@@ -12,6 +12,6 @@ export function ErrorAlert({ error }) {
|
|
|
12
12
|
const stack = error instanceof Error ? error.stack : undefined;
|
|
13
13
|
const cause = error instanceof Error ? error.cause : undefined;
|
|
14
14
|
const stringError = cause instanceof Error ? String(cause.stack) : stack;
|
|
15
|
-
return (_jsxs(Typography, { className: "grid grid-cols-1 !max-w-none pt-(--padding-content-top)", children: [_jsx(Heading, { level: 1, children: title }), "Error: ", message, hint && _jsx(DeveloperHint, { className: "mb-4", children: hint }), stringError && (_jsx(
|
|
15
|
+
return (_jsxs(Typography, { className: "grid grid-cols-1 !max-w-none pt-(--padding-content-top)", children: [_jsx(Heading, { level: 1, children: title }), "Error: ", message, hint && _jsx(DeveloperHint, { className: "mb-4", children: hint }), stringError && (_jsx(SyntaxHighlight, { className: "max-h-[400px] [&>pre]:p-4", language: "js", code: stringError }))] }));
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=ErrorAlert.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorAlert.js","sourceRoot":"","sources":["../../../src/lib/errors/ErrorAlert.tsx"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAsB;IACtD,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAElE,MAAM,IAAI,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,KAAK,GACT,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC;IACtE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,MAAM,WAAW,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEzE,OAAO,CACL,MAAC,UAAU,IAAC,SAAS,EAAC,yDAAyD,aAC7E,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,YAAG,KAAK,GAAW,aAC5B,OAAO,EACd,IAAI,IAAI,KAAC,aAAa,IAAC,SAAS,EAAC,MAAM,YAAE,IAAI,GAAiB,EAC9D,WAAW,IAAI,CACd,
|
|
1
|
+
{"version":3,"file":"ErrorAlert.js","sourceRoot":"","sources":["../../../src/lib/errors/ErrorAlert.tsx"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAsB;IACtD,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAElE,MAAM,IAAI,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,KAAK,GACT,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC;IACtE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,MAAM,WAAW,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEzE,OAAO,CACL,MAAC,UAAU,IAAC,SAAS,EAAC,yDAAyD,aAC7E,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,YAAG,KAAK,GAAW,aAC5B,OAAO,EACd,IAAI,IAAI,KAAC,aAAa,IAAC,SAAS,EAAC,MAAM,YAAE,IAAI,GAAiB,EAC9D,WAAW,IAAI,CACd,KAAC,eAAe,IACd,SAAS,EAAC,2BAA2B,EACrC,QAAQ,EAAC,IAAI,EACb,IAAI,EAAE,WAAW,GACjB,CACH,IACU,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
|
3
3
|
import { useForm } from "react-hook-form";
|
|
4
4
|
import { useNavigate } from "react-router";
|
|
5
5
|
import { ActionButton } from "zudoku/ui/ActionButton.js";
|
|
6
|
+
import { Alert, AlertDescription, AlertTitle } from "zudoku/ui/Alert.js";
|
|
6
7
|
import { DialogClose, DialogFooter } from "zudoku/ui/Dialog.js";
|
|
7
8
|
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "zudoku/ui/Select.js";
|
|
8
9
|
import { useZudoku } from "../../components/context/ZudokuContext.js";
|
|
@@ -23,7 +24,10 @@ export const CreateApiKey = ({ service, onOpenChange, }) => {
|
|
|
23
24
|
throw new Error("createKey not implemented");
|
|
24
25
|
}
|
|
25
26
|
const expiresOnDate = expiresOn !== "never" ? addDaysToDate(Number(expiresOn)) : undefined;
|
|
26
|
-
return service.createKey({
|
|
27
|
+
return service.createKey({
|
|
28
|
+
description: description || "Secret Key",
|
|
29
|
+
expiresOn: expiresOnDate,
|
|
30
|
+
}, context);
|
|
27
31
|
},
|
|
28
32
|
onSuccess: async () => {
|
|
29
33
|
await queryClient.invalidateQueries({ queryKey: ["api-keys"] });
|
|
@@ -33,9 +37,9 @@ export const CreateApiKey = ({ service, onOpenChange, }) => {
|
|
|
33
37
|
if (!service.createKey) {
|
|
34
38
|
return null;
|
|
35
39
|
}
|
|
36
|
-
return (
|
|
40
|
+
return (_jsxs("form", { onSubmit: form.handleSubmit((data) => createKeyMutation.mutate({ ...data }, {
|
|
37
41
|
onSuccess: () => onOpenChange(false),
|
|
38
|
-
})), children: _jsxs("div", { className: "flex gap-2 flex-col text-sm font-medium", children: ["Name", _jsx(Input, { ...form.register("description") }), "Expiration", _jsxs(Select, { onValueChange: (value) => form.setValue("expiresOn", value), defaultValue: form.getValues("expiresOn"), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: _jsxs(SelectGroup, { children: [[7, 30, 60, 90].map((option) => (_jsxs(SelectItem, { value: String(option), children: [option, " days"] }, option))), _jsx(SelectItem, { value: "never", children: "Never" })] }) })] }), _jsxs(DialogFooter, { children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(ActionButton, { isPending: createKeyMutation.isPending, children: "Generate Key" })] })] }) }));
|
|
42
|
+
})), children: [createKeyMutation.error && (_jsxs(Alert, { variant: "destructive", className: "mb-4", children: [_jsx(AlertTitle, { children: "Error" }), _jsx(AlertDescription, { children: createKeyMutation.error.message })] })), _jsxs("div", { className: "flex gap-2 flex-col text-sm font-medium", children: ["Name", _jsx(Input, { ...form.register("description") }), "Expiration", _jsxs(Select, { onValueChange: (value) => form.setValue("expiresOn", value), defaultValue: form.getValues("expiresOn"), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: _jsxs(SelectGroup, { children: [[7, 30, 60, 90].map((option) => (_jsxs(SelectItem, { value: String(option), children: [option, " days"] }, option))), _jsx(SelectItem, { value: "never", children: "Never" })] }) })] }), _jsxs(DialogFooter, { children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(ActionButton, { isPending: createKeyMutation.isPending, children: "Generate Key" })] })] })] }));
|
|
39
43
|
};
|
|
40
44
|
const addDaysToDate = (days) => {
|
|
41
45
|
const date = new Date();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateApiKey.js","sourceRoot":"","sources":["../../../../src/lib/plugins/api-keys/CreateApiKey.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK1C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,OAAO,EACP,YAAY,GAIb,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAe;QACjC,aAAa,EAAE;YACb,SAAS,EAAE,IAAI;SAChB;KACF,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CreateApiKey.js","sourceRoot":"","sources":["../../../../src/lib/plugins/api-keys/CreateApiKey.tsx"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { Button } from "../../ui/Button.js";
|
|
|
13
13
|
import { Input } from "../../ui/Input.js";
|
|
14
14
|
import { cn } from "../../util/cn.js";
|
|
15
15
|
import { useCopyToClipboard } from "../../util/useCopyToClipboard.js";
|
|
16
|
+
import { CreateApiKey } from "./CreateApiKey.js";
|
|
16
17
|
export const SettingsApiKeys = ({ service }) => {
|
|
17
18
|
const context = useZudoku();
|
|
18
19
|
const queryClient = useQueryClient();
|
|
@@ -23,6 +24,7 @@ export const SettingsApiKeys = ({ service }) => {
|
|
|
23
24
|
queryKey: ["api-keys"],
|
|
24
25
|
retry: false,
|
|
25
26
|
});
|
|
27
|
+
const [isCreateApiKeyOpen, setIsCreateApiKeyOpen] = useState(false);
|
|
26
28
|
const deleteKeyMutation = useMutation({
|
|
27
29
|
mutationFn: ({ consumerId, keyId, }) => {
|
|
28
30
|
if (!service.deleteKey) {
|
|
@@ -122,7 +124,7 @@ export const SettingsApiKeys = ({ service }) => {
|
|
|
122
124
|
setEditingConsumerId(null);
|
|
123
125
|
setEditingLabel("");
|
|
124
126
|
};
|
|
125
|
-
return (_jsxs("div", { className: "max-w-screen-md h-full pt-(--padding-content-top) pb-(--padding-content-bottom)", children: [_jsx(Slot.Target, { name: "api-keys-list-page" }), _jsxs("div", { className: "flex justify-between pb-3", children: [
|
|
127
|
+
return (_jsxs("div", { className: "max-w-screen-md h-full pt-(--padding-content-top) pb-(--padding-content-bottom)", children: [_jsx(Slot.Target, { name: "api-keys-list-page" }), _jsxs("div", { className: "flex justify-between pb-3", children: [_jsxs("h1", { className: "font-medium text-2xl", children: ["API Keys ", typeof service.createKey] }), service.createKey && (_jsxs(Dialog, { open: isCreateApiKeyOpen, onOpenChange: setIsCreateApiKeyOpen, children: [_jsx(DialogTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Create API Key" }) }), _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Create API Key" }) }), _jsx(CreateApiKey, { service: service, onOpenChange: setIsCreateApiKeyOpen })] })] }))] }), _jsx("p", { children: "Create, manage, and monitor your API keys" }), _jsx(Slot.Target, { name: "api-keys-list-page-before-keys" }), _jsx("div", { className: "h-8" }), rollKeyMutation.isError && (_jsxs(Alert, { variant: "destructive", className: "mb-4", children: [_jsx(CircleSlashIcon, { size: 16 }), _jsx(AlertTitle, { children: rollKeyMutation.error.message })] })), updateConsumerMutation.isError && (_jsxs(Alert, { variant: "destructive", className: "mb-4", children: [_jsx(CircleSlashIcon, { size: 16 }), _jsx(AlertTitle, { children: updateConsumerMutation.error.message })] })), deleteKeyMutation.isError && (_jsxs(Alert, { variant: "destructive", className: "mb-4", children: [_jsx(CircleSlashIcon, { size: 16 }), _jsx(AlertTitle, { children: deleteKeyMutation.error.message })] })), _jsx("div", { className: "", children: data.length === 0 ? (_jsxs("div", { className: "flex col-span-full flex-col justify-center gap-4 items-center p-8 border rounded-sm bg-muted/30 text-muted-foreground", children: [_jsxs("p", { className: "text-center", children: ["You have no API keys yet.", _jsx("br", {}), service.createKey && "Get started and create your first key."] }), service.createKey && (_jsx(Button, { asChild: true, variant: "outline", children: _jsx(Link, { to: "/settings/api-keys/new", children: "Create API Key" }) }))] })) : (_jsx("ul", { className: cn("grid grid-cols-[1fr_min-content] divide-y divide-border col-span-6"), children: data.map((consumers) => (_jsxs(Card, { className: "grid grid-cols-subgrid col-span-full items-center mb-4 group", children: [_jsxs(CardHeader, { className: "border-b col-span-full grid-cols-subgrid grid", children: [_jsxs("div", { className: "h-10 flex flex-col text-sm justify-center", children: [_jsxs("div", { className: "font-medium text-lg flex items-center gap-2", children: [editingConsumerId === consumers.id ? (_jsxs("div", { className: "flex items-center gap-2 w-full", children: [_jsx(Input, { maxLength: 32, value: editingLabel, onChange: (e) => setEditingLabel(e.target.value), onKeyDown: (e) => {
|
|
126
128
|
if (e.key === "Enter") {
|
|
127
129
|
handleSaveEdit(consumers.id);
|
|
128
130
|
}
|
|
@@ -130,9 +132,9 @@ export const SettingsApiKeys = ({ service }) => {
|
|
|
130
132
|
handleCancelEdit();
|
|
131
133
|
}
|
|
132
134
|
}, className: "text-lg font-medium", autoFocus: true }), _jsxs("div", { className: "flex items-center", children: [_jsx(Button, { size: "icon", variant: "ghost", onClick: () => handleSaveEdit(consumers.id), disabled: !editingLabel.trim(), children: _jsx(CheckIcon, { size: 16 }) }), _jsx(Button, { size: "icon", variant: "ghost", onClick: handleCancelEdit, children: _jsx(XIcon, { size: 16 }) })] })] })) : (_jsx(_Fragment, { children: consumers.label })), _jsx("div", { className: "text-muted-foreground text-xs", children: consumers.createdOn })] }), _jsxs("div", { className: "text-muted-foreground text-xs", children: [consumers.createdOn && (_jsxs("div", { children: ["Created on", " ", new Date(consumers.createdOn).toLocaleDateString()] })), consumers.expiresOn && (_jsxs("div", { children: ["Expires on", " ", new Date(consumers.expiresOn).toLocaleDateString()] }))] })] }), _jsxs("div", { className: "flex justify-end", children: [service.updateConsumer && (_jsxs(Button, { variant: "ghost", onClick: () => handleStartEdit(consumers.id, consumers.label), className: cn("flex gap-2", editingConsumerId === consumers.id &&
|
|
133
|
-
"opacity-0! pointer-events-none"), disabled: editingConsumerId === consumers.id, children: [_jsx(PencilLineIcon, { size: 16 }), "Edit label"] })), service.rollKey && (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsxs(Button, { title: "Roll this key", variant: "ghost", disabled: rollKeyMutation.isPending, className: "flex items-center gap-2", children: [_jsx(RefreshCwIcon, { size: 16, className: rollKeyMutation.isPending
|
|
135
|
+
"opacity-0! pointer-events-none"), disabled: editingConsumerId === consumers.id, children: [_jsx(PencilLineIcon, { size: 16 }), _jsx("span", { className: "hidden md:block", children: "Edit label" })] })), service.rollKey && (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsxs(Button, { title: "Roll this key", variant: "ghost", disabled: rollKeyMutation.isPending, className: "flex items-center gap-2", children: [_jsx(RefreshCwIcon, { size: 16, className: rollKeyMutation.isPending
|
|
134
136
|
? "animate-spin"
|
|
135
|
-
: undefined }), "Roll key"] }) }), _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Roll API Key" }), _jsx(DialogDescription, { children: "Are you sure you want to roll this API key?" })] }), _jsxs(DialogFooter, { children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(DialogClose, { asChild: true, children: _jsx(Button, { onClick: () => {
|
|
137
|
+
: undefined }), _jsx("span", { className: "hidden md:block", children: "Roll key" })] }) }), _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Roll API Key" }), _jsx(DialogDescription, { children: "Are you sure you want to roll this API key?" })] }), _jsxs(DialogFooter, { children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(DialogClose, { asChild: true, children: _jsx(Button, { onClick: () => {
|
|
136
138
|
rollKeyMutation.mutate(consumers.id);
|
|
137
139
|
}, children: "Roll Key" }) })] })] })] }))] })] }), _jsx("div", { className: "col-span-full grid-cols-subgrid grid", children: _jsx(AnimatePresence, { children: consumers.apiKeys.map((apiKey) => (_jsxs(React.Fragment, { children: [_jsx(RevealApiKey, { apiKey: apiKey, onDeleteKey: () => {
|
|
138
140
|
deleteKeyMutation.mutate({
|
|
@@ -171,7 +173,7 @@ const RevealApiKey = ({ apiKey, onDeleteKey, className, }) => {
|
|
|
171
173
|
(1000 * 60 * 60 * 24))
|
|
172
174
|
: Infinity;
|
|
173
175
|
const expiresSoon = daysUntilExpiry <= 7 && !isExpired;
|
|
174
|
-
return (_jsxs("div", { className: cn("grid col-span-full grid-cols-subgrid p-6", className), children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("div", { className: "flex gap-2 items-center text-sm border rounded-md w-fit px-1", children: [_jsxs("div", { className: "font-mono
|
|
176
|
+
return (_jsxs("div", { className: cn("grid col-span-full grid-cols-subgrid p-6", className), children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("div", { className: "flex gap-2 items-center text-sm border rounded-md w-full max-w-fit px-1", children: [_jsxs("div", { className: "font-mono w-full h-9 items-center flex px-2 text-xs gap-2", children: [_jsx("div", { className: cn("rounded-full w-2 h-2 bg-emerald-400 mr-2", (expiresSoon || isExpired) && "bg-neutral-200") }), _jsxs("span", { className: "w-full truncate", children: [_jsx("div", { className: cn("w-40 inline-block md:w-full truncate", revealed ? "" : "opacity-20"), children: revealed
|
|
175
177
|
? key.slice(0, -5)
|
|
176
178
|
: "**** ".repeat(key.slice(0, -5).length / 5) +
|
|
177
179
|
"*".repeat(key.slice(0, -5).length % 5) }), _jsx("span", { children: key.slice(-5) })] })] }), _jsx(Button, { variant: "ghost", onClick: () => setRevealed((prev) => !prev), size: "icon", children: revealed ? _jsx(EyeOffIcon, { size: 16 }) : _jsx(EyeIcon, { size: 16 }) }), _jsx(Button, { variant: "ghost", onClick: () => copyToClipboard(key), size: "icon", children: isCopied ? _jsx(CheckIcon, { size: 16 }) : _jsx(CopyIcon, { size: 16 }) })] }), _jsxs("div", { className: "flex gap-1 mt-0.5 text-nowrap", children: [createdOn && (_jsxs("span", { className: "text-xs text-muted-foreground", children: ["Created ", getTimeAgo(createdOn), "."] })), " ", expiresOn && expiresSoon && (_jsxs("span", { className: "text-xs text-primary", children: ["Expires in ", daysUntilExpiry, " ", daysUntilExpiry === 1 ? "day" : "days", "."] })), expiresOn && isExpired && (_jsxs("span", { className: "text-xs text-primary", children: ["Expired", " ", daysUntilExpiry === 0
|