UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

61 lines 2.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.canCreateSavedViewGroupTokenPolicy = void 0; const constants_js_1 = require("../../../../core/constants.js"); const authErrors_js_1 = require("../../../domain/authErrors.js"); const projects_js_1 = require("../../../fragments/projects.js"); const savedViews_js_1 = require("../../../fragments/savedViews.js"); const result_1 = require("true-myth/result"); const canCreateSavedViewGroupTokenPolicy = (loaders) => async ({ userId, projectId, savedViewGroupId }) => { const canUseSavedViews = await (0, savedViews_js_1.ensureCanAccessSavedViewGroupFragment)(loaders)({ userId, projectId, savedViewGroupId, access: 'write' }); if (canUseSavedViews.isErr) return (0, result_1.err)(canUseSavedViews.error); const env = await loaders.getEnv(); const project = await loaders.getProject({ projectId }); if (!!project?.workspaceId && env.FF_WORKSPACES_MODULE_ENABLED) { // Ensure owner-level access and valid plan const ensuredProjectRole = await (0, projects_js_1.ensureImplicitProjectMemberWithWriteAccessFragment)(loaders)({ userId, projectId, role: constants_js_1.Roles.Stream.Owner }); if (ensuredProjectRole.isErr) { return (0, result_1.err)(ensuredProjectRole.error); } const plan = await loaders.getWorkspacePlan({ workspaceId: project.workspaceId }); switch (plan?.name) { case 'academia': case 'enterprise': case 'pro': case 'proUnlimited': case 'proUnlimitedInvoiced': case 'team': case 'teamUnlimited': case 'teamUnlimitedInvoiced': case 'unlimited': return (0, result_1.ok)(); case 'free': default: return (0, result_1.err)(new authErrors_js_1.WorkspacePlanNoFeatureAccessError()); } } else { // Ensure project owner const isProjectOwner = await (0, projects_js_1.ensureMinimumProjectRoleFragment)(loaders)({ userId: userId, projectId, role: constants_js_1.Roles.Stream.Owner }); if (isProjectOwner.isErr) { return (0, result_1.err)(isProjectOwner.error); } return (0, result_1.ok)(); } }; exports.canCreateSavedViewGroupTokenPolicy = canCreateSavedViewGroupTokenPolicy; //# sourceMappingURL=canCreateSavedViewGroupToken.js.map