UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

42 lines 1.95 kB
import { err, ok } from 'true-myth/result'; import { DashboardNotFoundError, DashboardProjectsNotEnoughPermissionsError, DashboardsNotEnabledError, WorkspacePlanNoFeatureAccessError } from '../domain/authErrors.js'; import { isWorkspaceFeatureFlagOn, WorkspaceFeatureFlags } from '../../workspaces/index.js'; import { ensureMinimumProjectRoleFragment } from './projects.js'; export const ensureDashboardsEnabledFragment = (loaders) => async () => { const env = await loaders.getEnv(); if (!env.FF_DASHBOARDS_MODULE_ENABLED) return err(new DashboardsNotEnabledError()); return ok(); }; export const ensureWorkspaceDashboardsFeatureAccessFragment = (loaders) => async ({ workspaceId }) => { const plan = await loaders.getWorkspacePlan({ workspaceId }); if (!plan) return err(new WorkspacePlanNoFeatureAccessError()); const isFlagOn = isWorkspaceFeatureFlagOn({ workspaceFeatureFlags: plan.featureFlags, feature: WorkspaceFeatureFlags.dashboards }); if (!isFlagOn) return err(new WorkspacePlanNoFeatureAccessError()); return ok(); }; export const ensureDashboardProjectsReadAccess = (loaders) => async ({ userId, dashboardId }) => { const dashboard = await loaders.getDashboard({ dashboardId }); if (!dashboard) return err(new DashboardNotFoundError()); const allProjectResults = await Promise.all(dashboard.projectIds.map(async (projectId) => { return [ projectId, await ensureMinimumProjectRoleFragment(loaders)({ projectId, userId }) ]; })); const projectAccessErrors = allProjectResults.filter(([, e]) => e.isErr); return projectAccessErrors.length ? err(new DashboardProjectsNotEnoughPermissionsError({ payload: { projectIds: projectAccessErrors.map(([projectId]) => projectId) } })) : ok(); }; //# sourceMappingURL=dashboards.js.map