studiocms 0.1.0-beta.10
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/CHANGELOG.md +501 -0
- package/LICENSE +21 -0
- package/README.md +59 -0
- package/custom-renderers/index.ts +4 -0
- package/custom-renderers/markdocRenderers/markdocReact-components/MarkDocReactRenderer.tsx +8 -0
- package/custom-renderers/markdocRenderers/markdocReact-components/MarkDocReactWrapper.astro +13 -0
- package/custom-renderers/markdocRenderers/markdocReact.ts +56 -0
- package/dist/auth.d.js +0 -0
- package/dist/auth.d.ts +397 -0
- package/dist/cli/cmds/get-turso.d.ts +1 -0
- package/dist/cli/cmds/get-turso.js +10 -0
- package/dist/cli/cmds/init/index.d.ts +4 -0
- package/dist/cli/cmds/init/index.js +52 -0
- package/dist/cli/cmds/init/steps/data/studiocmsEnv.d.ts +3 -0
- package/dist/cli/cmds/init/steps/data/studiocmsEnv.js +71 -0
- package/dist/cli/cmds/init/steps/envBuilder.d.ts +21 -0
- package/dist/cli/cmds/init/steps/envBuilder.js +368 -0
- package/dist/cli/cmds/init/steps/nextSteps.d.ts +2 -0
- package/dist/cli/cmds/init/steps/nextSteps.js +38 -0
- package/dist/cli/cmds/init.d.ts +1 -0
- package/dist/cli/cmds/init.js +4 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/lib/commander.d.ts +39 -0
- package/dist/cli/lib/commander.js +87 -0
- package/dist/cli/lib/context.d.ts +28 -0
- package/dist/cli/lib/context.js +55 -0
- package/dist/cli/lib/pathUtil.d.ts +5 -0
- package/dist/cli/lib/pathUtil.js +14 -0
- package/dist/cli/lib/runExternal.d.ts +20 -0
- package/dist/cli/lib/runExternal.js +40 -0
- package/dist/cli/lib/seasonal.d.ts +5 -0
- package/dist/cli/lib/seasonal.js +88 -0
- package/dist/cli/lib/utils.d.ts +55 -0
- package/dist/cli/lib/utils.js +310 -0
- package/dist/cli/shared/intro.d.ts +2 -0
- package/dist/cli/shared/intro.js +24 -0
- package/dist/components/DefaultEditor.astro +138 -0
- package/dist/components/FormattedDate.astro +12 -0
- package/dist/components/Generator.astro +7 -0
- package/dist/components/Renderer.astro +13 -0
- package/dist/components/auth/OAuthButton.astro +21 -0
- package/dist/components/auth/OAuthButtonStack.astro +36 -0
- package/dist/components/auth/StaticAuthCheck.astro +20 -0
- package/dist/components/auth/StudioCMSLogoSVG.astro +13 -0
- package/dist/components/auth/oAuthButtonProviders.d.ts +8 -0
- package/dist/components/auth/oAuthButtonProviders.js +35 -0
- package/dist/components/dashboard/AstroCodeDiffsScript.astro +25 -0
- package/dist/components/dashboard/BaseHead.astro +41 -0
- package/dist/components/dashboard/Code.astro +23 -0
- package/dist/components/dashboard/DashboardPageHeader.astro +77 -0
- package/dist/components/dashboard/DoubleSidebar.astro +26 -0
- package/dist/components/dashboard/Footer.astro +16 -0
- package/dist/components/dashboard/MainSidebarContent.astro +317 -0
- package/dist/components/dashboard/PageHeader.astro +52 -0
- package/dist/components/dashboard/SidebarLink.astro +61 -0
- package/dist/components/dashboard/SidebarModals.astro +6 -0
- package/dist/components/dashboard/SidebarPluginLink.astro +45 -0
- package/dist/components/dashboard/SingleSidebar.astro +23 -0
- package/dist/components/dashboard/StudioCMSLogo.astro +12 -0
- package/dist/components/dashboard/ThemeManager.astro +53 -0
- package/dist/components/dashboard/component-scripts/TinyMDE.astro +6 -0
- package/dist/components/dashboard/component-scripts/dateTimeListener.d.ts +1 -0
- package/dist/components/dashboard/component-scripts/dateTimeListener.js +14 -0
- package/dist/components/dashboard/component-scripts/dateWithTimeAndZone.d.ts +1 -0
- package/dist/components/dashboard/component-scripts/dateWithTimeAndZone.js +12 -0
- package/dist/components/dashboard/component-scripts/makeClientRoutable.d.ts +1 -0
- package/dist/components/dashboard/component-scripts/makeClientRoutable.js +9 -0
- package/dist/components/dashboard/component-scripts/timeAgo.d.ts +1 -0
- package/dist/components/dashboard/component-scripts/timeAgo.js +21 -0
- package/dist/components/dashboard/islands/LoginChecker.astro +52 -0
- package/dist/components/dashboard/islands/configuration/ConfigForm.astro +317 -0
- package/dist/components/dashboard/islands/configuration/LightVsDark.astro +67 -0
- package/dist/components/dashboard/islands/content-mgmt/CreateFolder.astro +118 -0
- package/dist/components/dashboard/islands/content-mgmt/CreatePage.astro +380 -0
- package/dist/components/dashboard/islands/content-mgmt/EditFolder.astro +138 -0
- package/dist/components/dashboard/islands/content-mgmt/EditPage.astro +432 -0
- package/dist/components/dashboard/islands/content-mgmt/InnerSidebarElement.astro +299 -0
- package/dist/components/dashboard/islands/content-mgmt/PageHeader.astro +455 -0
- package/dist/components/dashboard/islands/content-mgmt/PageList.astro +49 -0
- package/dist/components/dashboard/islands/content-mgmt/PluginFields.astro +29 -0
- package/dist/components/dashboard/islands/content-mgmt/TreeRenderer.astro +75 -0
- package/dist/components/dashboard/islands/content-mgmt/TreeSidebarFolder.astro +53 -0
- package/dist/components/dashboard/islands/content-mgmt/TreeSidebarLink.astro +51 -0
- package/dist/components/dashboard/islands/content-mgmt/runtime.d.ts +10 -0
- package/dist/components/dashboard/islands/content-mgmt/runtime.js +33 -0
- package/dist/components/dashboard/islands/content-mgmt/shared.d.ts +27 -0
- package/dist/components/dashboard/islands/content-mgmt/shared.js +31 -0
- package/dist/components/dashboard/islands/dashboard/DashboardGrid.astro +39 -0
- package/dist/components/dashboard/islands/dashboard/DashboardGridItem.astro +34 -0
- package/dist/components/dashboard/islands/dashboard/Test.astro +5 -0
- package/dist/components/dashboard/islands/dashboard/UserName.astro +6 -0
- package/dist/components/dashboard/islands/dashboard/shared.d.ts +2 -0
- package/dist/components/dashboard/islands/dashboard/shared.js +0 -0
- package/dist/components/dashboard/islands/plugins/SettingsRenderer.astro +29 -0
- package/dist/components/dashboard/islands/profile/APITokens.astro +306 -0
- package/dist/components/dashboard/islands/profile/BasicInfo.astro +140 -0
- package/dist/components/dashboard/islands/profile/BasicInfoFallback.astro +43 -0
- package/dist/components/dashboard/islands/profile/SocialSignin.astro +181 -0
- package/dist/components/dashboard/islands/profile/SocialSigninFallback.astro +83 -0
- package/dist/components/dashboard/islands/profile/UpdatePassword.astro +166 -0
- package/dist/components/dashboard/islands/profile/UpdatePasswordFallback.astro +47 -0
- package/dist/components/dashboard/islands/profile/oAuthButtonProviders.d.ts +8 -0
- package/dist/components/dashboard/islands/profile/oAuthButtonProviders.js +35 -0
- package/dist/components/dashboard/islands/sidebar/UserAccount.astro +23 -0
- package/dist/components/dashboard/islands/sidebar/VersionCheck.astro +127 -0
- package/dist/components/dashboard/islands/sidebar/VersionCheckChangelog.astro +107 -0
- package/dist/components/dashboard/islands/user-mgmt/InnerSidebarElement.astro +348 -0
- package/dist/components/dashboard/islands/user-mgmt/RankCheck.astro +49 -0
- package/dist/components/dashboard/islands/user-mgmt/SocialSignin.astro +109 -0
- package/dist/components/dashboard/islands/user-mgmt/UserListItem.astro +60 -0
- package/dist/components/dashboard/sidebar-modals/UserManagementModals.astro +103 -0
- package/dist/components/dashboard/sidebar-modals/VersionModal.astro +267 -0
- package/dist/components/dashboard/sidebarConfig.d.ts +32 -0
- package/dist/components/dashboard/sidebarConfig.js +88 -0
- package/dist/components/default-grid-items/Recently-created-pages.astro +91 -0
- package/dist/components/default-grid-items/Recently-signed-up.astro +71 -0
- package/dist/components/default-grid-items/Recently-updated-pages.astro +96 -0
- package/dist/components/default-grid-items/Totals.astro +107 -0
- package/dist/components/default-grid-items/utils.d.ts +17 -0
- package/dist/components/default-grid-items/utils.js +26 -0
- package/dist/components/image/CustomImage.astro +90 -0
- package/dist/components/user-quick-tools.d.ts +42 -0
- package/dist/components/user-quick-tools.js +312 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.js +4 -0
- package/dist/consts.d.ts +61 -0
- package/dist/consts.js +39 -0
- package/dist/core.d.js +0 -0
- package/dist/core.d.ts +226 -0
- package/dist/db/config.d.ts +4 -0
- package/dist/db/config.js +6 -0
- package/dist/db/tables.js +168 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.js +11 -0
- package/dist/index.d.ts +152 -0
- package/dist/index.js +1179 -0
- package/dist/layouts/auth/AuthLayout.astro +74 -0
- package/dist/layouts/auth/FallbackCanvas.astro +123 -0
- package/dist/layouts/auth/ThemeManager.astro +53 -0
- package/dist/layouts/auth/ThreeCanvasLoader.astro +18 -0
- package/dist/layouts/dashboard/Layout.astro +64 -0
- package/dist/lib/auth/encryption.d.ts +30 -0
- package/dist/lib/auth/encryption.js +39 -0
- package/dist/lib/auth/password.d.ts +27 -0
- package/dist/lib/auth/password.js +42 -0
- package/dist/lib/auth/rate-limit.d.ts +136 -0
- package/dist/lib/auth/rate-limit.js +214 -0
- package/dist/lib/auth/session.d.ts +85 -0
- package/dist/lib/auth/session.js +93 -0
- package/dist/lib/auth/types.d.ts +83 -0
- package/dist/lib/auth/types.js +0 -0
- package/dist/lib/auth/user.d.ts +148 -0
- package/dist/lib/auth/user.js +133 -0
- package/dist/lib/dashboardGrid.d.ts +119 -0
- package/dist/lib/dashboardGrid.js +0 -0
- package/dist/lib/dynamic-sitemap/index.d.ts +42 -0
- package/dist/lib/dynamic-sitemap/index.js +45 -0
- package/dist/lib/dynamic-sitemap/sitemap-index.xml.d.ts +8 -0
- package/dist/lib/dynamic-sitemap/sitemap-index.xml.js +20 -0
- package/dist/lib/dynamic-sitemap/sitemap-index.xml.ts +45 -0
- package/dist/lib/head.d.ts +9 -0
- package/dist/lib/head.js +65 -0
- package/dist/lib/headDefaults.d.ts +18 -0
- package/dist/lib/headDefaults.js +75 -0
- package/dist/lib/i18n/LanguageSelector.astro +114 -0
- package/dist/lib/i18n/client.d.ts +591 -0
- package/dist/lib/i18n/client.js +83 -0
- package/dist/lib/i18n/config.d.ts +16 -0
- package/dist/lib/i18n/config.js +8 -0
- package/dist/lib/i18n/index.d.ts +578 -0
- package/dist/lib/i18n/index.js +63 -0
- package/dist/lib/i18n/translations/de.json +64 -0
- package/dist/lib/i18n/translations/en-us.json +238 -0
- package/dist/lib/i18n/translations/es.json +64 -0
- package/dist/lib/i18n/translations/fr.json +64 -0
- package/dist/lib/index.d.ts +7 -0
- package/dist/lib/index.js +7 -0
- package/dist/lib/jsonUtils.d.ts +2 -0
- package/dist/lib/jsonUtils.js +11 -0
- package/dist/lib/makeAPIRoute.d.ts +45 -0
- package/dist/lib/makeAPIRoute.js +16 -0
- package/dist/lib/makePublicRoute.d.ts +7 -0
- package/dist/lib/makePublicRoute.js +6 -0
- package/dist/lib/pathGenerators.d.ts +20 -0
- package/dist/lib/pathGenerators.js +66 -0
- package/dist/lib/plugins/dashboard-pages.d.ts +71 -0
- package/dist/lib/plugins/dashboard-pages.js +11 -0
- package/dist/lib/plugins/frontend-navigation.d.ts +18 -0
- package/dist/lib/plugins/frontend-navigation.js +39 -0
- package/dist/lib/plugins/index.d.ts +2 -0
- package/dist/lib/plugins/index.js +2 -0
- package/dist/lib/removeLeadingTrailingSlashes.d.ts +7 -0
- package/dist/lib/removeLeadingTrailingSlashes.js +13 -0
- package/dist/lib/renderer/astro-remark.d.ts +13 -0
- package/dist/lib/renderer/astro-remark.js +11 -0
- package/dist/lib/renderer/contentRenderer.d.ts +13 -0
- package/dist/lib/renderer/contentRenderer.js +31 -0
- package/dist/lib/renderer/errors.d.ts +5 -0
- package/dist/lib/renderer/errors.js +25 -0
- package/dist/lib/renderer/markdoc-renderers/markdocHTML.d.ts +3 -0
- package/dist/lib/renderer/markdoc-renderers/markdocHTML.js +14 -0
- package/dist/lib/renderer/markdoc-renderers/markdocReactStatic.d.ts +3 -0
- package/dist/lib/renderer/markdoc-renderers/markdocReactStatic.js +14 -0
- package/dist/lib/renderer/markdoc.d.ts +11 -0
- package/dist/lib/renderer/markdoc.js +28 -0
- package/dist/lib/renderer/mdx.d.ts +10 -0
- package/dist/lib/renderer/mdx.js +37 -0
- package/dist/lib/renderer/runtime.d.ts +8 -0
- package/dist/lib/renderer/runtime.js +30 -0
- package/dist/lib/renderer/shared.d.ts +15 -0
- package/dist/lib/renderer/shared.js +13 -0
- package/dist/lib/renderer/studiocms.d.ts +11 -0
- package/dist/lib/renderer/studiocms.js +22 -0
- package/dist/lib/renderer/types.d.ts +12 -0
- package/dist/lib/renderer/types.js +0 -0
- package/dist/lib/robots/core.d.ts +24 -0
- package/dist/lib/robots/core.js +187 -0
- package/dist/lib/robots/index.d.ts +11 -0
- package/dist/lib/robots/index.js +47 -0
- package/dist/lib/robots/types.d.ts +185 -0
- package/dist/lib/robots/types.js +0 -0
- package/dist/lib/robots/utils.d.ts +22 -0
- package/dist/lib/robots/utils.js +22 -0
- package/dist/lib/routeMap.d.ts +257 -0
- package/dist/lib/routeMap.js +249 -0
- package/dist/lib/urlGen.d.ts +11 -0
- package/dist/lib/urlGen.js +26 -0
- package/dist/lib/webVitals/checkForWebVitalsPlugin.d.ts +18 -0
- package/dist/lib/webVitals/checkForWebVitalsPlugin.js +82 -0
- package/dist/lib/webVitals/consts.d.ts +240 -0
- package/dist/lib/webVitals/consts.js +40 -0
- package/dist/lib/webVitals/dashboard-grid-items/CoreVitals.astro +66 -0
- package/dist/lib/webVitals/dashboard-grid-items/MetricCard.astro +24 -0
- package/dist/lib/webVitals/dashboard-grid-items/SummaryCard.astro +56 -0
- package/dist/lib/webVitals/dashboard-grid-items/metric.css +103 -0
- package/dist/lib/webVitals/dashboard-grid-items/shared.d.ts +29 -0
- package/dist/lib/webVitals/dashboard-grid-items/shared.js +35 -0
- package/dist/lib/webVitals/pages/analytics/body.astro +186 -0
- package/dist/lib/webVitals/pages/analytics/header.astro +42 -0
- package/dist/lib/webVitals/schemas.d.ts +78 -0
- package/dist/lib/webVitals/schemas.js +37 -0
- package/dist/lib/webVitals/types.d.ts +156 -0
- package/dist/lib/webVitals/types.js +0 -0
- package/dist/lib/webVitals/utils/buildDataObject.d.ts +8 -0
- package/dist/lib/webVitals/utils/buildDataObject.js +28 -0
- package/dist/lib/webVitals/utils/buildPageRouteDataObject.d.ts +15 -0
- package/dist/lib/webVitals/utils/buildPageRouteDataObject.js +70 -0
- package/dist/lib/webVitals/utils/buildPerPageDataObject.d.ts +23 -0
- package/dist/lib/webVitals/utils/buildPerPageDataObject.js +209 -0
- package/dist/lib/webVitals/utils/checkDate.d.ts +5 -0
- package/dist/lib/webVitals/utils/checkDate.js +19 -0
- package/dist/lib/webVitals/utils/webVitalsUtils.d.ts +24 -0
- package/dist/lib/webVitals/utils/webVitalsUtils.js +234 -0
- package/dist/lib/webVitals/webVital.d.ts +20 -0
- package/dist/lib/webVitals/webVital.js +40 -0
- package/dist/lib/webVitals/webVitalsRouteSummary.d.ts +19 -0
- package/dist/lib/webVitals/webVitalsRouteSummary.js +59 -0
- package/dist/lib/webVitals/webVitalsSummary.d.ts +19 -0
- package/dist/lib/webVitals/webVitalsSummary.js +49 -0
- package/dist/plugins.d.ts +2 -0
- package/dist/plugins.js +6 -0
- package/dist/renderer.d.js +0 -0
- package/dist/renderer.d.ts +23 -0
- package/dist/routes/api/render.astro +25 -0
- package/dist/routes/auth/api/auth0/callback.d.ts +4 -0
- package/dist/routes/auth/api/auth0/callback.js +117 -0
- package/dist/routes/auth/api/auth0/index.d.ts +4 -0
- package/dist/routes/auth/api/auth0/index.js +36 -0
- package/dist/routes/auth/api/auth0/shared.d.ts +13 -0
- package/dist/routes/auth/api/auth0/shared.js +24 -0
- package/dist/routes/auth/api/discord/callback.d.ts +4 -0
- package/dist/routes/auth/api/discord/callback.js +112 -0
- package/dist/routes/auth/api/discord/index.d.ts +4 -0
- package/dist/routes/auth/api/discord/index.js +36 -0
- package/dist/routes/auth/api/discord/shared.d.ts +12 -0
- package/dist/routes/auth/api/discord/shared.js +17 -0
- package/dist/routes/auth/api/github/callback.d.ts +4 -0
- package/dist/routes/auth/api/github/callback.js +112 -0
- package/dist/routes/auth/api/github/index.d.ts +4 -0
- package/dist/routes/auth/api/github/index.js +36 -0
- package/dist/routes/auth/api/github/shared.d.ts +13 -0
- package/dist/routes/auth/api/github/shared.js +14 -0
- package/dist/routes/auth/api/google/callback.d.ts +4 -0
- package/dist/routes/auth/api/google/callback.js +115 -0
- package/dist/routes/auth/api/google/index.d.ts +4 -0
- package/dist/routes/auth/api/google/index.js +38 -0
- package/dist/routes/auth/api/google/shared.d.ts +12 -0
- package/dist/routes/auth/api/google/shared.js +19 -0
- package/dist/routes/auth/api/login.d.ts +4 -0
- package/dist/routes/auth/api/login.js +46 -0
- package/dist/routes/auth/api/logout.d.ts +5 -0
- package/dist/routes/auth/api/logout.js +55 -0
- package/dist/routes/auth/api/register.d.ts +4 -0
- package/dist/routes/auth/api/register.js +64 -0
- package/dist/routes/auth/api/shared.d.ts +2 -0
- package/dist/routes/auth/api/shared.js +21 -0
- package/dist/routes/auth/login.astro +118 -0
- package/dist/routes/auth/logout.astro +28 -0
- package/dist/routes/auth/signup.astro +124 -0
- package/dist/routes/dashboard/[...pluginPage].astro +88 -0
- package/dist/routes/dashboard/configuration.astro +61 -0
- package/dist/routes/dashboard/content-management/createfolder.astro +83 -0
- package/dist/routes/dashboard/content-management/createpage.astro +86 -0
- package/dist/routes/dashboard/content-management/diff.astro +135 -0
- package/dist/routes/dashboard/content-management/editfolder.astro +67 -0
- package/dist/routes/dashboard/content-management/editpage.astro +71 -0
- package/dist/routes/dashboard/content-management/index.astro +91 -0
- package/dist/routes/dashboard/index.astro +56 -0
- package/dist/routes/dashboard/password-reset.astro +206 -0
- package/dist/routes/dashboard/plugins/[plugin].astro +104 -0
- package/dist/routes/dashboard/profile.astro +87 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/api-tokens.d.ts +5 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/api-tokens.js +90 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/config.d.ts +4 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/config.js +63 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/content/folder.d.ts +6 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/content/folder.js +121 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/content/page.d.ts +6 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/content/page.js +258 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/create-reset-link.d.ts +4 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/create-reset-link.js +59 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/create-user-invite.d.ts +4 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/create-user-invite.js +105 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/create-user.d.ts +4 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/create-user.js +100 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/partials/Editor.astro +61 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/partials/LiveRender.astro +30 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/partials/UserListItems.astro +39 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/plugins/[plugin].d.ts +2 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/plugins/[plugin].js +32 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/profile.d.ts +4 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/profile.js +130 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/reset-password.d.ts +4 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/reset-password.js +105 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/search-list.d.ts +4 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/search-list.js +55 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/users.d.ts +5 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/users.js +92 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/verify-session.d.ts +2 -0
- package/dist/routes/dashboard/studiocms_api/dashboard/verify-session.js +72 -0
- package/dist/routes/dashboard/user-management/edit.astro +631 -0
- package/dist/routes/dashboard/user-management/index.astro +103 -0
- package/dist/routes/error-pages/404.astro +66 -0
- package/dist/routes/firstTimeSetupRoutes/1-start.astro +253 -0
- package/dist/routes/firstTimeSetupRoutes/2-next.astro +208 -0
- package/dist/routes/firstTimeSetupRoutes/3-done.astro +95 -0
- package/dist/routes/firstTimeSetupRoutes/api/step-1.d.ts +2 -0
- package/dist/routes/firstTimeSetupRoutes/api/step-1.js +126 -0
- package/dist/routes/firstTimeSetupRoutes/api/step-2.d.ts +2 -0
- package/dist/routes/firstTimeSetupRoutes/api/step-2.js +110 -0
- package/dist/routes/firstTimeSetupRoutes/components/Layout.astro +41 -0
- package/dist/routes/firstTimeSetupRoutes/components/PageHeader.astro +60 -0
- package/dist/routes/firstTimeSetupRoutes/components/TabItem.astro +44 -0
- package/dist/routes/firstTimeSetupRoutes/components/Tabs.astro +170 -0
- package/dist/routes/firstTimeSetupRoutes/snippets/opt1-astro.config.diff +14 -0
- package/dist/routes/firstTimeSetupRoutes/snippets/opt2-astro.config.diff +9 -0
- package/dist/routes/firstTimeSetupRoutes/snippets/opt2-studiocms.config.diff +5 -0
- package/dist/routes/rest/utils/auth-token.d.ts +17 -0
- package/dist/routes/rest/utils/auth-token.js +31 -0
- package/dist/routes/rest/v1/folders/[id].d.ts +6 -0
- package/dist/routes/rest/v1/folders/[id].js +106 -0
- package/dist/routes/rest/v1/folders/index.d.ts +5 -0
- package/dist/routes/rest/v1/folders/index.js +88 -0
- package/dist/routes/rest/v1/pages/[id]/history/[diffid].d.ts +4 -0
- package/dist/routes/rest/v1/pages/[id]/history/[diffid].js +55 -0
- package/dist/routes/rest/v1/pages/[id]/history/index.d.ts +4 -0
- package/dist/routes/rest/v1/pages/[id]/history/index.js +61 -0
- package/dist/routes/rest/v1/pages/[id]/index.d.ts +6 -0
- package/dist/routes/rest/v1/pages/[id]/index.js +165 -0
- package/dist/routes/rest/v1/pages/index.d.ts +5 -0
- package/dist/routes/rest/v1/pages/index.js +113 -0
- package/dist/routes/rest/v1/public/folders/[id].d.ts +4 -0
- package/dist/routes/rest/v1/public/folders/[id].js +43 -0
- package/dist/routes/rest/v1/public/folders/index.d.ts +4 -0
- package/dist/routes/rest/v1/public/folders/index.js +49 -0
- package/dist/routes/rest/v1/public/pages/[id].d.ts +4 -0
- package/dist/routes/rest/v1/public/pages/[id].js +46 -0
- package/dist/routes/rest/v1/public/pages/index.d.ts +4 -0
- package/dist/routes/rest/v1/public/pages/index.js +61 -0
- package/dist/routes/rest/v1/settings/index.d.ts +5 -0
- package/dist/routes/rest/v1/settings/index.js +75 -0
- package/dist/routes/rest/v1/users/[id].d.ts +6 -0
- package/dist/routes/rest/v1/users/[id].js +212 -0
- package/dist/routes/rest/v1/users/index.d.ts +5 -0
- package/dist/routes/rest/v1/users/index.js +138 -0
- package/dist/routes/sdk/fallback-list-pages.json.d.ts +2 -0
- package/dist/routes/sdk/fallback-list-pages.json.js +19 -0
- package/dist/routes/sdk/fallback-list-pages.json.ts +22 -0
- package/dist/routes/sdk/full-changelog.json.d.ts +16 -0
- package/dist/routes/sdk/full-changelog.json.js +170 -0
- package/dist/routes/sdk/full-changelog.json.ts +224 -0
- package/dist/routes/sdk/list-pages.d.ts +4 -0
- package/dist/routes/sdk/list-pages.js +34 -0
- package/dist/routes/sdk/update-latest-version-cache.d.ts +4 -0
- package/dist/routes/sdk/update-latest-version-cache.js +41 -0
- package/dist/runtime/AstroComponentProxy.d.ts +29 -0
- package/dist/runtime/AstroComponentProxy.js +47 -0
- package/dist/runtime/decoder/decode-codepoint.d.ts +18 -0
- package/dist/runtime/decoder/decode-codepoint.js +58 -0
- package/dist/runtime/decoder/decode-data-html.d.ts +1 -0
- package/dist/runtime/decoder/decode-data-html.js +7 -0
- package/dist/runtime/decoder/decode-data-xml.d.ts +1 -0
- package/dist/runtime/decoder/decode-data-xml.js +7 -0
- package/dist/runtime/decoder/index.d.ts +34 -0
- package/dist/runtime/decoder/index.js +18 -0
- package/dist/runtime/decoder/util.d.ts +208 -0
- package/dist/runtime/decoder/util.js +415 -0
- package/dist/schemas/config/auth.d.ts +175 -0
- package/dist/schemas/config/auth.js +65 -0
- package/dist/schemas/config/componentoverrides.d.ts +17 -0
- package/dist/schemas/config/componentoverrides.js +14 -0
- package/dist/schemas/config/dashboard.d.ts +154 -0
- package/dist/schemas/config/dashboard.js +59 -0
- package/dist/schemas/config/defaultFrontend.d.ts +125 -0
- package/dist/schemas/config/defaultFrontend.js +57 -0
- package/dist/schemas/config/developer.d.ts +15 -0
- package/dist/schemas/config/developer.js +14 -0
- package/dist/schemas/config/imageService.d.ts +13 -0
- package/dist/schemas/config/imageService.js +12 -0
- package/dist/schemas/config/index.d.ts +1153 -0
- package/dist/schemas/config/index.js +95 -0
- package/dist/schemas/config/integrations.d.ts +14 -0
- package/dist/schemas/config/integrations.js +12 -0
- package/dist/schemas/config/markdoc.d.ts +172 -0
- package/dist/schemas/config/markdoc.js +68 -0
- package/dist/schemas/config/mdx.d.ts +455 -0
- package/dist/schemas/config/mdx.js +71 -0
- package/dist/schemas/config/rendererConfig.d.ts +659 -0
- package/dist/schemas/config/rendererConfig.js +51 -0
- package/dist/schemas/config/sdk.d.ts +167 -0
- package/dist/schemas/config/sdk.js +85 -0
- package/dist/schemas/config/studiocms-markdown-remark.d.ts +292 -0
- package/dist/schemas/config/studiocms-markdown-remark.js +63 -0
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.js +2 -0
- package/dist/schemas/plugins/index.d.ts +7373 -0
- package/dist/schemas/plugins/index.js +192 -0
- package/dist/schemas/plugins/shared.d.ts +1752 -0
- package/dist/schemas/plugins/shared.js +221 -0
- package/dist/scripts/formListener.d.ts +16 -0
- package/dist/scripts/formListener.js +46 -0
- package/dist/scripts/three.d.ts +1 -0
- package/dist/scripts/three.js +278 -0
- package/dist/scripts/utils/fitModelToViewport.d.ts +8 -0
- package/dist/scripts/utils/fitModelToViewport.js +19 -0
- package/dist/sdk/StudioCMSVirtualCache.d.ts +283 -0
- package/dist/sdk/StudioCMSVirtualCache.js +685 -0
- package/dist/sdk/cache.d.ts +11 -0
- package/dist/sdk/cache.js +12 -0
- package/dist/sdk/core.d.ts +865 -0
- package/dist/sdk/core.js +1966 -0
- package/dist/sdk/errors.d.ts +21 -0
- package/dist/sdk/errors.js +11 -0
- package/dist/sdk/index.d.ts +371 -0
- package/dist/sdk/index.js +8 -0
- package/dist/sdk/lib/foldertree.d.ts +50 -0
- package/dist/sdk/lib/foldertree.js +123 -0
- package/dist/sdk/lib/generators.d.ts +30 -0
- package/dist/sdk/lib/generators.js +25 -0
- package/dist/sdk/lib/packages.d.ts +8 -0
- package/dist/sdk/lib/packages.js +14 -0
- package/dist/sdk/lib/parsers.d.ts +14 -0
- package/dist/sdk/lib/parsers.js +10 -0
- package/dist/sdk/lib/users.d.ts +19 -0
- package/dist/sdk/lib/users.js +26 -0
- package/dist/sdk/tables.d.ts +1198 -0
- package/dist/sdk/tables.js +55 -0
- package/dist/sdk/types/index.d.ts +175 -0
- package/dist/sdk/types/index.js +0 -0
- package/dist/sdk/types/tableDefs.d.ts +75 -0
- package/dist/sdk/types/tableDefs.js +0 -0
- package/dist/sdk/types/tsAlias.d.ts +155 -0
- package/dist/sdk/types/tsAlias.js +0 -0
- package/dist/sdk/utils/db.d.ts +5 -0
- package/dist/sdk/utils/db.js +15 -0
- package/dist/stubs/auth-lib.d.ts +2 -0
- package/dist/stubs/auth-lib.js +519 -0
- package/dist/stubs/auth-scripts.d.ts +2 -0
- package/dist/stubs/auth-scripts.js +29 -0
- package/dist/stubs/auth-utils.d.ts +2 -0
- package/dist/stubs/auth-utils.js +36 -0
- package/dist/stubs/changelog.d.ts +2 -0
- package/dist/stubs/changelog.js +16 -0
- package/dist/stubs/components.d.ts +2 -0
- package/dist/stubs/components.js +67 -0
- package/dist/stubs/core.d.ts +2 -0
- package/dist/stubs/core.js +49 -0
- package/dist/stubs/i18n-dts.d.ts +2 -0
- package/dist/stubs/i18n-dts.js +117 -0
- package/dist/stubs/images.d.ts +1 -0
- package/dist/stubs/images.js +30 -0
- package/dist/stubs/index.d.ts +1 -0
- package/dist/stubs/index.js +40 -0
- package/dist/stubs/lib.d.ts +2 -0
- package/dist/stubs/lib.js +123 -0
- package/dist/stubs/plugins.d.ts +2 -0
- package/dist/stubs/plugins.js +60 -0
- package/dist/stubs/proxy.d.ts +2 -0
- package/dist/stubs/proxy.js +40 -0
- package/dist/stubs/renderer-config.d.ts +2 -0
- package/dist/stubs/renderer-config.js +18 -0
- package/dist/stubs/renderer-markdownConfig.d.ts +2 -0
- package/dist/stubs/renderer-markdownConfig.js +17 -0
- package/dist/stubs/renderer.d.ts +2 -0
- package/dist/stubs/renderer.js +44 -0
- package/dist/stubs/sdk.d.ts +2 -0
- package/dist/stubs/sdk.js +202 -0
- package/dist/stubs/webVitals.d.ts +2 -0
- package/dist/stubs/webVitals.js +40 -0
- package/dist/styles/404.css +47 -0
- package/dist/styles/SyntaxFont.woff2 +0 -0
- package/dist/styles/authlayout.css +138 -0
- package/dist/styles/dashboard-base.css +493 -0
- package/dist/styles/dashboard-code.css +33 -0
- package/dist/styles/dashboard-diff.css +389 -0
- package/dist/styles/dashboard-tiny-mde.css +224 -0
- package/dist/styles/md-remark-callouts/github.css +56 -0
- package/dist/styles/md-remark-callouts/obsidian.css +66 -0
- package/dist/styles/md-remark-callouts/vitepress.css +58 -0
- package/dist/styles/md-remark-headings.css +48 -0
- package/dist/types.d.ts +43 -0
- package/dist/types.js +0 -0
- package/dist/utils/addAPIRoutes.d.ts +9 -0
- package/dist/utils/addAPIRoutes.js +33 -0
- package/dist/utils/addIntegrationArray.d.ts +24 -0
- package/dist/utils/addIntegrationArray.js +11 -0
- package/dist/utils/addIntegrationArrayWithCheck.d.ts +11 -0
- package/dist/utils/addIntegrationArrayWithCheck.js +24 -0
- package/dist/utils/astroConfigCheck.d.ts +8 -0
- package/dist/utils/astroConfigCheck.js +31 -0
- package/dist/utils/astroEnvConfig.d.ts +45 -0
- package/dist/utils/astroEnvConfig.js +9 -0
- package/dist/utils/authEnvCheck.d.ts +38 -0
- package/dist/utils/authEnvCheck.js +82 -0
- package/dist/utils/changelog.d.ts +1 -0
- package/dist/utils/changelog.js +53 -0
- package/dist/utils/changelogLoader.d.ts +15 -0
- package/dist/utils/changelogLoader.js +104 -0
- package/dist/utils/checkENV.d.ts +27 -0
- package/dist/utils/checkENV.js +115 -0
- package/dist/utils/configManager.d.ts +22 -0
- package/dist/utils/configManager.js +98 -0
- package/dist/utils/configResolver.d.ts +283 -0
- package/dist/utils/configResolver.js +105 -0
- package/dist/utils/defineStudioCMSConfig.d.ts +165 -0
- package/dist/utils/defineStudioCMSConfig.js +6 -0
- package/dist/utils/getLabelForPermissionLevel.d.ts +2 -0
- package/dist/utils/getLabelForPermissionLevel.js +17 -0
- package/dist/utils/injectRouteArray.d.ts +19 -0
- package/dist/utils/injectRouteArray.js +75 -0
- package/dist/utils/integrationLogger.d.ts +7 -0
- package/dist/utils/integrationLogger.js +18 -0
- package/dist/utils/integrations.d.ts +4 -0
- package/dist/utils/integrations.js +32 -0
- package/dist/utils/isDashboardRoute.d.ts +7 -0
- package/dist/utils/isDashboardRoute.js +10 -0
- package/dist/utils/loginBackgrounds/studiocms-blobs-dark.png +0 -0
- package/dist/utils/loginBackgrounds/studiocms-blobs-light.png +0 -0
- package/dist/utils/loginBackgrounds/studiocms-blocks-dark.png +0 -0
- package/dist/utils/loginBackgrounds/studiocms-blocks-light.png +0 -0
- package/dist/utils/loginBackgrounds/studiocms-curves-dark.png +0 -0
- package/dist/utils/loginBackgrounds/studiocms-curves-light.png +0 -0
- package/dist/utils/makePageTitle.d.ts +3 -0
- package/dist/utils/makePageTitle.js +7 -0
- package/dist/utils/pageListPackageLabel.d.ts +4 -0
- package/dist/utils/pageListPackageLabel.js +12 -0
- package/dist/utils/readJson.d.ts +1 -0
- package/dist/utils/readJson.js +7 -0
- package/dist/utils/routeBuilder.d.ts +18 -0
- package/dist/utils/routeBuilder.js +96 -0
- package/dist/utils/safeString.d.ts +1 -0
- package/dist/utils/safeString.js +6 -0
- package/dist/utils/simpleResponse.d.ts +1 -0
- package/dist/utils/simpleResponse.js +29 -0
- package/dist/utils/validImages.d.ts +13 -0
- package/dist/utils/validImages.js +39 -0
- package/dist/virtual.d.js +0 -0
- package/dist/virtual.d.ts +9 -0
- package/package.json +219 -0
- package/studiocms-cli.mjs +13 -0
- package/ui.d.ts +291 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
class RefillingTokenBucket {
|
|
2
|
+
/**
|
|
3
|
+
* The maximum number of tokens that the bucket can hold.
|
|
4
|
+
* @type {number}
|
|
5
|
+
*/
|
|
6
|
+
max;
|
|
7
|
+
/**
|
|
8
|
+
* The interval in seconds at which tokens are refilled.
|
|
9
|
+
* @type {number}
|
|
10
|
+
*/
|
|
11
|
+
refillIntervalSeconds;
|
|
12
|
+
/**
|
|
13
|
+
* Initializes a new instance of the RefillingTokenBucket class.
|
|
14
|
+
*
|
|
15
|
+
* @param {number} max - The maximum number of tokens the bucket can hold.
|
|
16
|
+
* @param {number} refillIntervalSeconds - The refill interval in seconds.
|
|
17
|
+
*/
|
|
18
|
+
constructor(max, refillIntervalSeconds) {
|
|
19
|
+
this.max = max;
|
|
20
|
+
this.refillIntervalSeconds = refillIntervalSeconds;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A map storing individual token buckets associated with specific keys.
|
|
24
|
+
* @private
|
|
25
|
+
*/
|
|
26
|
+
storage = /* @__PURE__ */ new Map();
|
|
27
|
+
/**
|
|
28
|
+
* Checks if there are enough tokens available in the bucket for the specified key and cost.
|
|
29
|
+
*
|
|
30
|
+
* @param {_Key} key - The key associated with the token bucket.
|
|
31
|
+
* @param {number} cost - The number of tokens required.
|
|
32
|
+
* @returns {boolean} - Returns `true` if there are enough tokens; otherwise, `false`.
|
|
33
|
+
*/
|
|
34
|
+
check(key, cost) {
|
|
35
|
+
const bucket = this.storage.get(key) ?? null;
|
|
36
|
+
if (bucket === null) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const refill = Math.floor((now - bucket.refilledAt) / (this.refillIntervalSeconds * 1e3));
|
|
41
|
+
if (refill > 0) {
|
|
42
|
+
return Math.min(bucket.count + refill, this.max) >= cost;
|
|
43
|
+
}
|
|
44
|
+
return bucket.count >= cost;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Consumes tokens from the bucket for the specified key and cost.
|
|
48
|
+
*
|
|
49
|
+
* @param {_Key} key - The key associated with the token bucket.
|
|
50
|
+
* @param {number} cost - The number of tokens to consume.
|
|
51
|
+
* @returns {boolean} - Returns `true` if tokens were successfully consumed; otherwise, `false`.
|
|
52
|
+
*/
|
|
53
|
+
consume(key, cost) {
|
|
54
|
+
let bucket = this.storage.get(key) ?? null;
|
|
55
|
+
const now = Date.now();
|
|
56
|
+
if (bucket === null) {
|
|
57
|
+
bucket = {
|
|
58
|
+
count: this.max - cost,
|
|
59
|
+
refilledAt: now
|
|
60
|
+
};
|
|
61
|
+
this.storage.set(key, bucket);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
const refill = Math.floor((now - bucket.refilledAt) / (this.refillIntervalSeconds * 1e3));
|
|
65
|
+
bucket.count = Math.min(bucket.count + refill, this.max);
|
|
66
|
+
bucket.refilledAt = now;
|
|
67
|
+
if (bucket.count < cost) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
bucket.count -= cost;
|
|
71
|
+
this.storage.set(key, bucket);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
class Throttler {
|
|
76
|
+
/**
|
|
77
|
+
* Array of timeout durations (in seconds) for each consecutive attempt.
|
|
78
|
+
* @type {number[]}
|
|
79
|
+
*/
|
|
80
|
+
timeoutSeconds;
|
|
81
|
+
/**
|
|
82
|
+
* A map storing individual throttling counters associated with specific keys.
|
|
83
|
+
* @private
|
|
84
|
+
*/
|
|
85
|
+
storage = /* @__PURE__ */ new Map();
|
|
86
|
+
/**
|
|
87
|
+
* Initializes a new instance of the Throttler class.
|
|
88
|
+
*
|
|
89
|
+
* @param {number[]} timeoutSeconds - Array of timeout durations in seconds for each consecutive attempt.
|
|
90
|
+
*/
|
|
91
|
+
constructor(timeoutSeconds) {
|
|
92
|
+
this.timeoutSeconds = timeoutSeconds;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Attempts to consume an action for the specified key.
|
|
96
|
+
*
|
|
97
|
+
* @param {_Key} key - The key associated with the throttling counter.
|
|
98
|
+
* @returns {boolean} - Returns `true` if the action is allowed; otherwise, `false`.
|
|
99
|
+
*/
|
|
100
|
+
consume(key) {
|
|
101
|
+
let counter = this.storage.get(key) ?? null;
|
|
102
|
+
const now = Date.now();
|
|
103
|
+
if (counter === null) {
|
|
104
|
+
counter = {
|
|
105
|
+
timeout: 0,
|
|
106
|
+
updatedAt: now
|
|
107
|
+
};
|
|
108
|
+
this.storage.set(key, counter);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
const allowed = now - counter.updatedAt >= this.timeoutSeconds[counter.timeout] * 1e3;
|
|
112
|
+
if (!allowed) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
counter.updatedAt = now;
|
|
116
|
+
counter.timeout = Math.min(counter.timeout + 1, this.timeoutSeconds.length - 1);
|
|
117
|
+
this.storage.set(key, counter);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Resets the throttling counter for a specified key.
|
|
122
|
+
*
|
|
123
|
+
* @param {_Key} key - The key associated with the throttling counter to reset.
|
|
124
|
+
*/
|
|
125
|
+
reset(key) {
|
|
126
|
+
this.storage.delete(key);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
class ExpiringTokenBucket {
|
|
130
|
+
/**
|
|
131
|
+
* The maximum number of tokens the bucket can hold.
|
|
132
|
+
* @type {number}
|
|
133
|
+
*/
|
|
134
|
+
max;
|
|
135
|
+
/**
|
|
136
|
+
* The duration (in seconds) after which tokens in the bucket expire.
|
|
137
|
+
* @type {number}
|
|
138
|
+
*/
|
|
139
|
+
expiresInSeconds;
|
|
140
|
+
/**
|
|
141
|
+
* A map storing individual expiring token buckets associated with specific keys.
|
|
142
|
+
* @private
|
|
143
|
+
*/
|
|
144
|
+
storage = /* @__PURE__ */ new Map();
|
|
145
|
+
/**
|
|
146
|
+
* Initializes a new instance of the ExpiringTokenBucket class.
|
|
147
|
+
*
|
|
148
|
+
* @param {number} max - The maximum number of tokens the bucket can hold.
|
|
149
|
+
* @param {number} expiresInSeconds - The duration in seconds after which tokens expire.
|
|
150
|
+
*/
|
|
151
|
+
constructor(max, expiresInSeconds) {
|
|
152
|
+
this.max = max;
|
|
153
|
+
this.expiresInSeconds = expiresInSeconds;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Checks if there are enough tokens available in the bucket for the specified key and cost.
|
|
157
|
+
*
|
|
158
|
+
* @param {_Key} key - The key associated with the token bucket.
|
|
159
|
+
* @param {number} cost - The number of tokens required.
|
|
160
|
+
* @returns {boolean} - Returns `true` if there are enough tokens or if the tokens have expired; otherwise, `false`.
|
|
161
|
+
*/
|
|
162
|
+
check(key, cost) {
|
|
163
|
+
const bucket = this.storage.get(key) ?? null;
|
|
164
|
+
const now = Date.now();
|
|
165
|
+
if (bucket === null) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
if (now - bucket.createdAt >= this.expiresInSeconds * 1e3) {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
return bucket.count >= cost;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Consumes tokens from the bucket for the specified key and cost.
|
|
175
|
+
*
|
|
176
|
+
* @param {_Key} key - The key associated with the token bucket.
|
|
177
|
+
* @param {number} cost - The number of tokens to consume.
|
|
178
|
+
* @returns {boolean} - Returns `true` if tokens were successfully consumed; otherwise, `false`.
|
|
179
|
+
*/
|
|
180
|
+
consume(key, cost) {
|
|
181
|
+
let bucket = this.storage.get(key) ?? null;
|
|
182
|
+
const now = Date.now();
|
|
183
|
+
if (bucket === null) {
|
|
184
|
+
bucket = {
|
|
185
|
+
count: this.max - cost,
|
|
186
|
+
createdAt: now
|
|
187
|
+
};
|
|
188
|
+
this.storage.set(key, bucket);
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
if (now - bucket.createdAt >= this.expiresInSeconds * 1e3) {
|
|
192
|
+
bucket.count = this.max;
|
|
193
|
+
}
|
|
194
|
+
if (bucket.count < cost) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
bucket.count -= cost;
|
|
198
|
+
this.storage.set(key, bucket);
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Resets the token bucket for a specified key, removing all tokens.
|
|
203
|
+
*
|
|
204
|
+
* @param {_Key} key - The key associated with the token bucket to reset.
|
|
205
|
+
*/
|
|
206
|
+
reset(key) {
|
|
207
|
+
this.storage.delete(key);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
export {
|
|
211
|
+
ExpiringTokenBucket,
|
|
212
|
+
RefillingTokenBucket,
|
|
213
|
+
Throttler
|
|
214
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { tsSessionTableSelect } from 'studiocms:sdk/types';
|
|
2
|
+
import type { APIContext, AstroGlobal } from 'astro';
|
|
3
|
+
import type { SessionValidationResult } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Generates a session token.
|
|
6
|
+
*
|
|
7
|
+
* This function creates a random 20-byte array and encodes it using
|
|
8
|
+
* base32 encoding without padding. The resulting string is used as
|
|
9
|
+
* a session token.
|
|
10
|
+
*
|
|
11
|
+
* @returns {string} The generated session token.
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateSessionToken(): string;
|
|
14
|
+
/**
|
|
15
|
+
* The session expiration time in milliseconds.
|
|
16
|
+
* This value represents 14 days.
|
|
17
|
+
*/
|
|
18
|
+
export declare const sessionExpTime: number;
|
|
19
|
+
/**
|
|
20
|
+
* Generates a new expiration date for a session.
|
|
21
|
+
*
|
|
22
|
+
* @returns {Date} The expiration date calculated by adding the session expiration time to the current date and time.
|
|
23
|
+
*/
|
|
24
|
+
export declare function makeExpirationDate(): Date;
|
|
25
|
+
/**
|
|
26
|
+
* The name of the cookie used to store the authentication session.
|
|
27
|
+
*
|
|
28
|
+
* @constant {string}
|
|
29
|
+
*/
|
|
30
|
+
export declare const sessionCookieName = "auth_session";
|
|
31
|
+
/**
|
|
32
|
+
* Creates a new session for a user.
|
|
33
|
+
*
|
|
34
|
+
* @param token - The token used to create the session.
|
|
35
|
+
* @param userId - The ID of the user for whom the session is being created.
|
|
36
|
+
* @returns A promise that resolves to the created session object.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createSession(token: string, userId: string): Promise<tsSessionTableSelect>;
|
|
39
|
+
/**
|
|
40
|
+
* Validates a session token by checking its existence and expiration in the database.
|
|
41
|
+
* If the session is valid but close to expiration, it extends the session expiration time.
|
|
42
|
+
* If the session is expired, it deletes the session from the database.
|
|
43
|
+
*
|
|
44
|
+
* @param token - The session token to validate.
|
|
45
|
+
* @returns A promise that resolves to an object containing the session and user information.
|
|
46
|
+
* If the session is invalid or expired, both session and user will be null.
|
|
47
|
+
*/
|
|
48
|
+
export declare function validateSessionToken(token: string): Promise<SessionValidationResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Invalidates a session by deleting it from the database.
|
|
51
|
+
*
|
|
52
|
+
* @param sessionId - The unique identifier of the session to be invalidated.
|
|
53
|
+
* @returns A promise that resolves when the session has been successfully deleted.
|
|
54
|
+
*/
|
|
55
|
+
export declare function invalidateSession(sessionId: string): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Sets a session token cookie in the provided API context.
|
|
58
|
+
*
|
|
59
|
+
* @param context - The API context where the cookie will be set.
|
|
60
|
+
* @param token - The session token to be stored in the cookie.
|
|
61
|
+
* @param expiresAt - The expiration date of the cookie.
|
|
62
|
+
*/
|
|
63
|
+
export declare function setSessionTokenCookie(context: APIContext, token: string, expiresAt: Date): void;
|
|
64
|
+
/**
|
|
65
|
+
* Deletes the session token cookie by setting it with an empty value and a max age of 0.
|
|
66
|
+
*
|
|
67
|
+
* @param context - The context in which the cookie is being set. This can be either an APIContext or AstroGlobal.
|
|
68
|
+
*/
|
|
69
|
+
export declare function deleteSessionTokenCookie(context: APIContext | AstroGlobal): void;
|
|
70
|
+
/**
|
|
71
|
+
* Sets an OAuth session token cookie in the given API context.
|
|
72
|
+
*
|
|
73
|
+
* @param context - The API context which contains the cookies object.
|
|
74
|
+
* @param key - The name of the cookie to set.
|
|
75
|
+
* @param value - The value of the cookie to set.
|
|
76
|
+
*/
|
|
77
|
+
export declare function setOAuthSessionTokenCookie(context: APIContext, key: string, value: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* Creates a new user session.
|
|
80
|
+
*
|
|
81
|
+
* @param userId - The ID of the user for whom the session is being created.
|
|
82
|
+
* @param context - The API context which includes request and response objects.
|
|
83
|
+
* @returns A promise that resolves when the session has been successfully created.
|
|
84
|
+
*/
|
|
85
|
+
export declare function createUserSession(userId: string, context: APIContext): Promise<void>;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import studioCMS_SDK from "studiocms:sdk";
|
|
2
|
+
import { sha256 } from "@oslojs/crypto/sha2";
|
|
3
|
+
import { encodeBase32LowerCaseNoPadding, encodeHexLowerCase } from "@oslojs/encoding";
|
|
4
|
+
function generateSessionToken() {
|
|
5
|
+
const bytes = new Uint8Array(20);
|
|
6
|
+
crypto.getRandomValues(bytes);
|
|
7
|
+
const token = encodeBase32LowerCaseNoPadding(bytes);
|
|
8
|
+
return token;
|
|
9
|
+
}
|
|
10
|
+
const sessionExpTime = 1e3 * 60 * 60 * 24 * 14;
|
|
11
|
+
const expTimeHalf = sessionExpTime / 2;
|
|
12
|
+
function makeExpirationDate() {
|
|
13
|
+
return new Date(Date.now() + sessionExpTime);
|
|
14
|
+
}
|
|
15
|
+
const sessionCookieName = "auth_session";
|
|
16
|
+
async function createSession(token, userId) {
|
|
17
|
+
const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));
|
|
18
|
+
const session = {
|
|
19
|
+
id: sessionId,
|
|
20
|
+
userId,
|
|
21
|
+
expiresAt: new Date(Date.now() + sessionExpTime)
|
|
22
|
+
};
|
|
23
|
+
return await studioCMS_SDK.AUTH.session.create(session);
|
|
24
|
+
}
|
|
25
|
+
async function validateSessionToken(token) {
|
|
26
|
+
const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));
|
|
27
|
+
const result = await studioCMS_SDK.AUTH.session.sessionWithUser(sessionId);
|
|
28
|
+
if (result.length < 1) {
|
|
29
|
+
return { session: null, user: null };
|
|
30
|
+
}
|
|
31
|
+
const userSession = result[0];
|
|
32
|
+
if (!userSession) {
|
|
33
|
+
return { session: null, user: null };
|
|
34
|
+
}
|
|
35
|
+
const { user, session } = userSession;
|
|
36
|
+
if (Date.now() >= session.expiresAt.getTime()) {
|
|
37
|
+
await studioCMS_SDK.AUTH.session.delete(session.id);
|
|
38
|
+
return { session: null, user: null };
|
|
39
|
+
}
|
|
40
|
+
if (Date.now() >= session.expiresAt.getTime() - expTimeHalf) {
|
|
41
|
+
session.expiresAt = new Date(Date.now() + sessionExpTime);
|
|
42
|
+
await studioCMS_SDK.AUTH.session.update(session.id, session.expiresAt);
|
|
43
|
+
}
|
|
44
|
+
return { session, user };
|
|
45
|
+
}
|
|
46
|
+
async function invalidateSession(sessionId) {
|
|
47
|
+
await studioCMS_SDK.AUTH.session.delete(sessionId);
|
|
48
|
+
}
|
|
49
|
+
function setSessionTokenCookie(context, token, expiresAt) {
|
|
50
|
+
context.cookies.set(sessionCookieName, token, {
|
|
51
|
+
httpOnly: true,
|
|
52
|
+
sameSite: "lax",
|
|
53
|
+
secure: false,
|
|
54
|
+
expires: expiresAt,
|
|
55
|
+
path: "/"
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function deleteSessionTokenCookie(context) {
|
|
59
|
+
context.cookies.set(sessionCookieName, "", {
|
|
60
|
+
httpOnly: true,
|
|
61
|
+
sameSite: "lax",
|
|
62
|
+
secure: false,
|
|
63
|
+
maxAge: 0,
|
|
64
|
+
path: "/"
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function setOAuthSessionTokenCookie(context, key, value) {
|
|
68
|
+
context.cookies.set(key, value, {
|
|
69
|
+
path: "/",
|
|
70
|
+
secure: false,
|
|
71
|
+
httpOnly: true,
|
|
72
|
+
maxAge: 60 * 10,
|
|
73
|
+
sameSite: "lax"
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async function createUserSession(userId, context) {
|
|
77
|
+
const sessionToken = generateSessionToken();
|
|
78
|
+
await createSession(sessionToken, userId);
|
|
79
|
+
setSessionTokenCookie(context, sessionToken, makeExpirationDate());
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
createSession,
|
|
83
|
+
createUserSession,
|
|
84
|
+
deleteSessionTokenCookie,
|
|
85
|
+
generateSessionToken,
|
|
86
|
+
invalidateSession,
|
|
87
|
+
makeExpirationDate,
|
|
88
|
+
sessionCookieName,
|
|
89
|
+
sessionExpTime,
|
|
90
|
+
setOAuthSessionTokenCookie,
|
|
91
|
+
setSessionTokenCookie,
|
|
92
|
+
validateSessionToken
|
|
93
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { tsOAuthAccountsSelect, tsPermissionsSelect, tsSessionTableSelect, tsUsersSelect } from 'studiocms:sdk/types';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a table of OAuth accounts.
|
|
4
|
+
*
|
|
5
|
+
* @interface OAuthAccountsTable
|
|
6
|
+
* @property {string} provider - The name of the OAuth provider (e.g., Google, Facebook).
|
|
7
|
+
* @property {string} providerUserId - The unique identifier for the user provided by the OAuth provider.
|
|
8
|
+
* @property {string} userId - The unique identifier for the user within the application.
|
|
9
|
+
*/
|
|
10
|
+
export interface OAuthAccountsTable extends tsOAuthAccountsSelect {
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Interface representing a table of user permissions.
|
|
14
|
+
*
|
|
15
|
+
* @property {string} user - The username of the individual.
|
|
16
|
+
* @property {string} rank - The rank or role assigned to the user.
|
|
17
|
+
*/
|
|
18
|
+
export interface PermissionsTable extends tsPermissionsSelect {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Represents the session data for a user.
|
|
22
|
+
*
|
|
23
|
+
* @property {boolean} isLoggedIn - Indicates whether the user is logged in.
|
|
24
|
+
* @property {UserTable | null} user - The user data, or null if no user is logged in.
|
|
25
|
+
* @property {'owner' | 'admin' | 'editor' | 'visitor' | 'unknown'} permissionLevel - The permission level of the user.
|
|
26
|
+
*/
|
|
27
|
+
export type UserSessionData = {
|
|
28
|
+
isLoggedIn: boolean;
|
|
29
|
+
user: tsUsersSelect | null;
|
|
30
|
+
permissionLevel: 'owner' | 'admin' | 'editor' | 'visitor' | 'unknown';
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Represents a user session which includes user information and session details.
|
|
34
|
+
*
|
|
35
|
+
* @property {UserTable} user - The user information.
|
|
36
|
+
* @property {SessionTable} session - The session details.
|
|
37
|
+
*/
|
|
38
|
+
export type UserSession = {
|
|
39
|
+
user: tsUsersSelect;
|
|
40
|
+
session: tsSessionTableSelect;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Represents the result of a session validation.
|
|
44
|
+
*
|
|
45
|
+
* This type can either be a valid `UserSession` or an object indicating
|
|
46
|
+
* an invalid session with both `session` and `user` properties set to `null`.
|
|
47
|
+
*/
|
|
48
|
+
export type SessionValidationResult = UserSession | {
|
|
49
|
+
session: null;
|
|
50
|
+
user: null;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Represents an individual refillable token bucket.
|
|
54
|
+
*
|
|
55
|
+
* @interface RefillBucket
|
|
56
|
+
* @property {number} count - The current token count in the bucket.
|
|
57
|
+
* @property {number} refilledAt - The last timestamp when tokens were refilled.
|
|
58
|
+
*/
|
|
59
|
+
export interface RefillBucket {
|
|
60
|
+
count: number;
|
|
61
|
+
refilledAt: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Represents a bucket with an expiration mechanism.
|
|
65
|
+
*
|
|
66
|
+
* @interface ExpiringBucket
|
|
67
|
+
* @property {number} count - The number of items in the bucket.
|
|
68
|
+
* @property {number} createdAt - The timestamp when the bucket was created.
|
|
69
|
+
*/
|
|
70
|
+
export interface ExpiringBucket {
|
|
71
|
+
count: number;
|
|
72
|
+
createdAt: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Interface representing a throttling counter.
|
|
76
|
+
*
|
|
77
|
+
* @property {number} timeout - The duration (in milliseconds) for which the throttling is applied.
|
|
78
|
+
* @property {number} updatedAt - The timestamp (in milliseconds since epoch) when the throttling counter was last updated.
|
|
79
|
+
*/
|
|
80
|
+
export interface ThrottlingCounter {
|
|
81
|
+
timeout: number;
|
|
82
|
+
updatedAt: number;
|
|
83
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import type { tsUsersInsert, tsUsersSelect } from 'studiocms:sdk/types';
|
|
2
|
+
import type { APIContext, AstroGlobal } from 'astro';
|
|
3
|
+
import type { UserSessionData } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Verifies if the provided username meets the required criteria.
|
|
6
|
+
*
|
|
7
|
+
* The username must:
|
|
8
|
+
* - Be between 3 and 32 characters in length.
|
|
9
|
+
* - Contain only lowercase letters, numbers, hyphens (-), and underscores (_).
|
|
10
|
+
* - Not be considered unsafe.
|
|
11
|
+
*
|
|
12
|
+
* @param username - The username to verify.
|
|
13
|
+
* @returns `true` if the username is valid, `false` otherwise.
|
|
14
|
+
*/
|
|
15
|
+
export declare function verifyUsernameInput(username: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a user avatar URL based on the provided email.
|
|
18
|
+
*
|
|
19
|
+
* This function takes an email address, processes it to generate a unique hash,
|
|
20
|
+
* and returns a URL for the user's avatar using the Libravatar service.
|
|
21
|
+
*
|
|
22
|
+
* @param email - The email address of the user.
|
|
23
|
+
* @returns A promise that resolves to the URL of the user's avatar.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createUserAvatar(email: string): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new local user with the provided details.
|
|
28
|
+
*
|
|
29
|
+
* @param name - The full name of the user.
|
|
30
|
+
* @param username - The username for the user.
|
|
31
|
+
* @param email - The email address of the user.
|
|
32
|
+
* @param password - The password for the user.
|
|
33
|
+
* @returns A promise that resolves to the newly created user record.
|
|
34
|
+
*/
|
|
35
|
+
export declare function createLocalUser(name: string, username: string, email: string, password: string): Promise<tsUsersSelect>;
|
|
36
|
+
/**
|
|
37
|
+
* Creates a new user with OAuth credentials.
|
|
38
|
+
*
|
|
39
|
+
* @param userFields - The fields required to create a new user.
|
|
40
|
+
* @param oAuthFields - The OAuth provider information, including the provider name and provider user ID.
|
|
41
|
+
* @returns The newly created user object or an error object if the creation fails.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createOAuthUser(userFields: tsUsersInsert, oAuthFields: {
|
|
44
|
+
provider: string;
|
|
45
|
+
providerUserId: string;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
name: string;
|
|
48
|
+
username: string;
|
|
49
|
+
email: string | null;
|
|
50
|
+
id: string;
|
|
51
|
+
url: string | null;
|
|
52
|
+
avatar: string | null;
|
|
53
|
+
password: string | null;
|
|
54
|
+
updatedAt: Date | null;
|
|
55
|
+
createdAt: Date | null;
|
|
56
|
+
} | {
|
|
57
|
+
error: string;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* The name of the cookie used for linking a new OAuth account.
|
|
61
|
+
* This constant is used to identify the specific cookie that handles
|
|
62
|
+
* the linking process for new OAuth accounts.
|
|
63
|
+
*/
|
|
64
|
+
export declare const LinkNewOAuthCookieName = "link-new-o-auth";
|
|
65
|
+
/**
|
|
66
|
+
* Updates the password for a user.
|
|
67
|
+
*
|
|
68
|
+
* This function hashes the provided password and updates the user's password
|
|
69
|
+
* in the database with the hashed password.
|
|
70
|
+
*
|
|
71
|
+
* @param userId - The unique identifier of the user whose password is to be updated.
|
|
72
|
+
* @param password - The new password to be set for the user.
|
|
73
|
+
* @returns A promise that resolves when the password has been successfully updated.
|
|
74
|
+
*/
|
|
75
|
+
export declare function updateUserPassword(userId: string, password: string): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Retrieves the password hash for a given user by their user ID.
|
|
78
|
+
*
|
|
79
|
+
* @param userId - The unique identifier of the user whose password hash is to be retrieved.
|
|
80
|
+
* @returns A promise that resolves to the password hash of the user.
|
|
81
|
+
* @throws Will throw an error if the user is not found or if the user does not have a password.
|
|
82
|
+
*/
|
|
83
|
+
export declare function getUserPasswordHash(userId: string): Promise<string>;
|
|
84
|
+
/**
|
|
85
|
+
* Retrieves a user from the database based on their email address.
|
|
86
|
+
*
|
|
87
|
+
* @param email - The email address of the user to retrieve.
|
|
88
|
+
* @returns A promise that resolves to the user data if found, or null if no user is found with the given email.
|
|
89
|
+
*/
|
|
90
|
+
export declare function getUserFromEmail(email: string): Promise<tsUsersSelect | null>;
|
|
91
|
+
/**
|
|
92
|
+
* Retrieves user session data based on the provided Astro context.
|
|
93
|
+
*
|
|
94
|
+
* @param Astro - The Astro global object or API context containing cookies.
|
|
95
|
+
* @returns A promise that resolves to the user session data.
|
|
96
|
+
*
|
|
97
|
+
* The function performs the following steps:
|
|
98
|
+
* 1. Extracts the session token from cookies.
|
|
99
|
+
* 2. If no session token is found, returns an object indicating the user is not logged in.
|
|
100
|
+
* 3. Validates the session token.
|
|
101
|
+
* 4. If the session is invalid, deletes the session token cookie and returns an object indicating the user is not logged in.
|
|
102
|
+
* 5. If the user is not found, returns an object indicating the user is not logged in.
|
|
103
|
+
* 6. Retrieves the user's permission level from the database.
|
|
104
|
+
* 7. Returns an object containing the user's login status, user information, and permission level.
|
|
105
|
+
*/
|
|
106
|
+
export declare function getUserData(Astro: AstroGlobal | APIContext): Promise<UserSessionData>;
|
|
107
|
+
/**
|
|
108
|
+
* An array of available permission ranks for users.
|
|
109
|
+
*
|
|
110
|
+
* The permission ranks are defined as a constant tuple and include the following values:
|
|
111
|
+
* - 'owner': The highest level of permission, typically the creator or primary administrator.
|
|
112
|
+
* - 'admin': A high level of permission, usually for users who manage the system.
|
|
113
|
+
* - 'editor': A mid-level permission, for users who can modify content.
|
|
114
|
+
* - 'visitor': A low-level permission, for users who can view content but not modify it.
|
|
115
|
+
* - 'unknown': A default or fallback permission rank for users with undefined roles.
|
|
116
|
+
*/
|
|
117
|
+
declare const availablePermissionRanks: readonly ["owner", "admin", "editor", "visitor", "unknown"];
|
|
118
|
+
/**
|
|
119
|
+
* Represents the available permission ranks for a user.
|
|
120
|
+
*
|
|
121
|
+
* This type is derived from the `availablePermissionRanks` array,
|
|
122
|
+
* and it includes all the possible values that a user can have as a permission rank.
|
|
123
|
+
*/
|
|
124
|
+
type AvailablePermissionRanks = (typeof availablePermissionRanks)[number];
|
|
125
|
+
/**
|
|
126
|
+
* A mapping of permission ranks to their respective allowed roles.
|
|
127
|
+
*
|
|
128
|
+
* This map defines the hierarchy of permissions, where each rank includes
|
|
129
|
+
* all the roles of the ranks below it. For example, an 'admin' has the roles
|
|
130
|
+
* of both 'owner' and 'admin', while an 'editor' has the roles of 'owner',
|
|
131
|
+
* 'admin', and 'editor'.
|
|
132
|
+
*
|
|
133
|
+
* @property {string[]} owner - The 'owner' rank, which includes only the 'owner' role.
|
|
134
|
+
* @property {string[]} admin - The 'admin' rank, which includes 'owner' and 'admin' roles.
|
|
135
|
+
* @property {string[]} editor - The 'editor' rank, which includes 'owner', 'admin', and 'editor' roles.
|
|
136
|
+
* @property {string[]} visitor - The 'visitor' rank, which includes 'owner', 'admin', 'editor', and 'visitor' roles.
|
|
137
|
+
* @property {string[]} unknown - The 'unknown' rank, which includes all roles: 'owner', 'admin', 'editor', 'visitor', and 'unknown'.
|
|
138
|
+
*/
|
|
139
|
+
export declare const permissionRanksMap: Record<AvailablePermissionRanks, string[]>;
|
|
140
|
+
/**
|
|
141
|
+
* Verifies if the user's permission level meets the required permission rank.
|
|
142
|
+
*
|
|
143
|
+
* @param userData - The session data of the user, which includes their permission level.
|
|
144
|
+
* @param requiredPermission - The required permission rank to be verified against the user's permission level.
|
|
145
|
+
* @returns A promise that resolves to a boolean indicating whether the user's permission level meets the required rank.
|
|
146
|
+
*/
|
|
147
|
+
export declare function verifyUserPermissionLevel(userData: UserSessionData, requiredPermission: AvailablePermissionRanks): Promise<boolean>;
|
|
148
|
+
export {};
|