studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
261 lines (260 loc) • 7.49 kB
JavaScript
import { dashboardConfig } from "studiocms:config";
import { makeAPIRoute } from "./makeAPIRoute.js";
import urlGenFactory from "./urlGen.js";
const { dashboardRouteOverride } = dashboardConfig;
function getSluggedRoute(url, slug) {
return urlGenFactory(true, url + slug, dashboardRouteOverride);
}
function getEditRoute(slug) {
return getSluggedRoute("edit/pages/", slug);
}
function getDeleteRoute(slug) {
return getSluggedRoute("delete/pages/", slug);
}
function makeNonDashboardRoute(route) {
return urlGenFactory(false, route);
}
function makeDashboardRoute(route) {
return urlGenFactory(true, route, dashboardRouteOverride);
}
const authAPIRoute = makeAPIRoute("auth");
const dashboardAPIRoute = makeAPIRoute("dashboard");
const sdkRoute = makeAPIRoute("sdk");
const rendererRoute = makeAPIRoute("renderer");
const StudioCMSRoutes = {
mainLinks: {
/**
* Base URL for the non-dashboard site.
*/
baseSiteURL: makeNonDashboardRoute(),
/**
* URL for the dashboard index.
*/
dashboardIndex: makeDashboardRoute(),
/**
* URL for the user profile page.
*/
userProfile: makeDashboardRoute("profile"),
/**
* URL for the content management page.
*/
contentManagement: makeDashboardRoute("content-management"),
/**
* URL for creating content in the content management page.
*/
contentManagementCreate: makeDashboardRoute("content-management/create"),
/**
* URL for editing content in the content management page.
*/
contentManagementEdit: makeDashboardRoute("content-management/edit"),
/**
* URL for creating a folder in the content management page.
*/
contentManagementFolderCreate: makeDashboardRoute("content-management/create-folder"),
/**
* URL for editing a folder in the content management page.
*/
contentManagementFolderEdit: makeDashboardRoute("content-management/edit-folder"),
/**
* URL for viewing content differences in the content management page.
*/
contentManagementDiff: makeDashboardRoute("content-management/diff"),
/**
* URL for creating a new page.
*/
createPage: makeDashboardRoute("create-page"),
/**
* URL for the site configuration page.
*/
siteConfiguration: makeDashboardRoute("configuration"),
/**
* URL for the smtp configuration page.
*/
smtpConfiguration: makeDashboardRoute("smtp-configuration"),
/**
* URL for the user management page.
*/
userManagement: makeDashboardRoute("user-management"),
/**
* URL for editing user management details.
*/
userManagementEdit: makeDashboardRoute("user-management/edit"),
/**
* URL for the plugins page.
*/
plugins: makeDashboardRoute("plugins/"),
/**
* URL for unverified email page.
*/
unverifiedEmail: makeDashboardRoute("unverified-email"),
passwordReset: makeDashboardRoute("password-reset")
},
authLinks: {
/**
* URL for the login page.
*/
loginURL: makeDashboardRoute("login"),
/**
* URL for the logout page.
*/
logoutURL: makeDashboardRoute("logout"),
/**
* URL for the signup page.
*/
signupURL: makeDashboardRoute("signup"),
/**
* API route for logging in.
*/
loginAPI: authAPIRoute("login"),
/**
* API route for logging out.
*/
logoutAPI: authAPIRoute("logout"),
/**
* API route for registering a new user.
*/
registerAPI: authAPIRoute("register"),
/**
* API route for OAuth authentication.
*
* @param provider - The name of the OAuth provider (e.g., 'github', 'google').
* @returns The complete API route for the specified OAuth provider.
*/
oAuthIndex: (provider) => authAPIRoute(provider),
/**
* API route for OAuth callback.
*/
oAuthCallback: (provider) => authAPIRoute(`${provider}/callback`),
forgotPasswordAPI: authAPIRoute("forgot-password")
},
endpointLinks: {
/**
* API route for searching lists.
*/
searchList: dashboardAPIRoute("search-list"),
partials: {
/**
* API route for live preview box rendering.
*/
livePreviewBox: dashboardAPIRoute("live-render"),
/**
* API route for fetching user list items.
*/
userListItems: dashboardAPIRoute("user-list-items"),
/**
* API route for rendering content.
*/
render: rendererRoute("render"),
/**
* API route for the editor.
*/
editor: dashboardAPIRoute("editor")
},
/**
* API route for fetching configuration.
*/
config: dashboardAPIRoute("config"),
/**
* API route for fetching users.
*/
users: dashboardAPIRoute("users"),
/**
* API route for fetching user profile.
*/
profile: dashboardAPIRoute("profile"),
/**
* API route for creating a password reset link.
*/
createResetLink: dashboardAPIRoute("create-reset-link"),
/**
* API route for resetting password.
*/
resetPassword: dashboardAPIRoute("reset-password"),
content: {
/**
* API route for fetching page content.
*/
page: dashboardAPIRoute("content/page"),
/**
* API route for fetching folder content.
*/
folder: dashboardAPIRoute("content/folder"),
diff: dashboardAPIRoute("content/diff")
},
/**
* API route for fetching plugins.
*/
plugins: dashboardAPIRoute("plugins/"),
newUsers: {
/**
* API route for creating a new user.
*/
create: dashboardAPIRoute("create-user"),
/**
* API route for inviting a new user.
*/
invite: dashboardAPIRoute("create-user-invite")
},
/**
* API route for fetching API tokens.
*/
apiTokens: dashboardAPIRoute("api-tokens"),
/**
* API route for verifying a user session.
*/
verifySession: dashboardAPIRoute("verify-session"),
/**
* API routes for the mailer configuration.
*/
mailer: {
/**
* API route for updating the mailer configuration
*/
config: dashboardAPIRoute("mailer/config"),
/**
* API route for testing the mailer configuration.
*/
testEmail: dashboardAPIRoute("mailer/test-email")
},
verifyEmail: dashboardAPIRoute("verify-email"),
emailNotificationSettingsSite: dashboardAPIRoute("email-notification-settings-site"),
resendVerificationEmail: dashboardAPIRoute("resend-verify-email"),
updateUserNotifications: dashboardAPIRoute("update-user-notifications")
},
sdk: {
/**
* SDK route for listing pages.
*/
pages: sdkRoute("list-pages"),
/**
* SDK route for fetching fallback list of pages.
*/
fallback_pages: sdkRoute("fallback-list-pages.json"),
/**
* SDK route for updating the latest version cache.
*/
updateLatestVersionCache: sdkRoute("update-latest-version-cache"),
/**
* SDK route for the full changelog JSON.
*/
changelog: sdkRoute("full-changelog.json")
},
fts: {
/**
* API route for step 1 of the FTS process.
*/
step1: dashboardAPIRoute("step-1"),
/**
* API route for step 2 of the FTS process.
*/
step2: dashboardAPIRoute("step-2")
}
};
export {
StudioCMSRoutes,
getDeleteRoute,
getEditRoute,
getSluggedRoute,
makeDashboardRoute,
makeNonDashboardRoute
};