@speckle/shared
Version:
Shared code between various Speckle JS packages
52 lines • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.canUpdateEmbedTokensPolicy = void 0;
const result_1 = require("true-myth/result");
const authErrors_js_1 = require("../../domain/authErrors.js");
const projects_js_1 = require("../../fragments/projects.js");
const constants_js_1 = require("../../../core/constants.js");
const canUpdateEmbedTokensPolicy = (loaders) => async ({ userId, projectId }) => {
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.canUpdateEmbedTokensPolicy = canUpdateEmbedTokensPolicy;
//# sourceMappingURL=canUpdateEmbedTokens.js.map