UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

192 lines 6.53 kB
import { PaidWorkspacePlans, UnpaidWorkspacePlans } from './plans.js'; /** * WORKSPACE FEATURES */ export const WorkspacePlanFeatures = { // Core features pretty much available to everyone AutomateBeta: 'automateBeta', DomainDiscoverability: 'domainDiscoverability', // Optional/plan specific DomainSecurity: 'domainBasedSecurityPolicies', SSO: 'oidcSso', CustomDataRegion: 'workspaceDataRegionSpecificity', HideSpeckleBranding: 'hideSpeckleBranding' }; export const WorkspacePlanFeaturesMetadata = { [WorkspacePlanFeatures.AutomateBeta]: { displayName: 'Automate beta access', description: 'Run custom automations on every new model version' }, [WorkspacePlanFeatures.DomainDiscoverability]: { displayName: 'Domain discoverability', description: 'Allow people to discover your workspace if they use a verified company email' }, [WorkspacePlanFeatures.DomainSecurity]: { displayName: 'Domain protection', description: 'Require workspace members to use a verified company email' }, [WorkspacePlanFeatures.SSO]: { displayName: 'Single Sign-On (SSO)', description: 'Require workspace members to authenticate with your SSO provider' }, [WorkspacePlanFeatures.CustomDataRegion]: { displayName: 'Custom data residency', description: 'Store your data in EU, UK, North America, or Asia Pacific' }, [WorkspacePlanFeatures.HideSpeckleBranding]: { displayName: 'Customised viewer', description: 'Hide the Speckle branding in embedded viewer' } }; const unlimited = { projectCount: null, modelCount: null, versionsHistory: null, commentHistory: null }; const baseFeatures = [ WorkspacePlanFeatures.AutomateBeta, WorkspacePlanFeatures.DomainDiscoverability ]; export const WorkspacePaidPlanConfigs = { [PaidWorkspacePlans.Team]: { plan: PaidWorkspacePlans.Team, features: [...baseFeatures], limits: { projectCount: 5, modelCount: 25, versionsHistory: { value: 30, unit: 'day' }, commentHistory: { value: 30, unit: 'day' } } }, [PaidWorkspacePlans.TeamUnlimited]: { plan: PaidWorkspacePlans.TeamUnlimited, features: [...baseFeatures], limits: { projectCount: null, modelCount: null, versionsHistory: { value: 30, unit: 'day' }, commentHistory: { value: 30, unit: 'day' } } }, [PaidWorkspacePlans.Pro]: { plan: PaidWorkspacePlans.Pro, features: [ ...baseFeatures, WorkspacePlanFeatures.DomainSecurity, WorkspacePlanFeatures.SSO, WorkspacePlanFeatures.CustomDataRegion, WorkspacePlanFeatures.HideSpeckleBranding ], limits: { projectCount: 10, modelCount: 50, versionsHistory: null, commentHistory: null } }, [PaidWorkspacePlans.ProUnlimited]: { plan: PaidWorkspacePlans.ProUnlimited, features: [ ...baseFeatures, WorkspacePlanFeatures.DomainSecurity, WorkspacePlanFeatures.SSO, WorkspacePlanFeatures.CustomDataRegion, WorkspacePlanFeatures.HideSpeckleBranding ], limits: { projectCount: null, modelCount: null, versionsHistory: null, commentHistory: null } } }; export const WorkspaceUnpaidPlanConfigs = { [UnpaidWorkspacePlans.Enterprise]: { plan: UnpaidWorkspacePlans.Enterprise, features: [ ...baseFeatures, WorkspacePlanFeatures.DomainSecurity, WorkspacePlanFeatures.SSO, WorkspacePlanFeatures.CustomDataRegion, WorkspacePlanFeatures.HideSpeckleBranding ], limits: unlimited }, [UnpaidWorkspacePlans.Unlimited]: { plan: UnpaidWorkspacePlans.Unlimited, features: [ ...baseFeatures, WorkspacePlanFeatures.DomainSecurity, WorkspacePlanFeatures.SSO, WorkspacePlanFeatures.CustomDataRegion, WorkspacePlanFeatures.HideSpeckleBranding ], limits: unlimited }, [UnpaidWorkspacePlans.Academia]: { plan: UnpaidWorkspacePlans.Academia, features: [ ...baseFeatures, WorkspacePlanFeatures.DomainSecurity, WorkspacePlanFeatures.SSO, WorkspacePlanFeatures.CustomDataRegion, WorkspacePlanFeatures.HideSpeckleBranding ], limits: unlimited }, [UnpaidWorkspacePlans.TeamUnlimitedInvoiced]: { ...WorkspacePaidPlanConfigs.teamUnlimited, plan: UnpaidWorkspacePlans.TeamUnlimitedInvoiced }, [UnpaidWorkspacePlans.ProUnlimitedInvoiced]: { ...WorkspacePaidPlanConfigs.proUnlimited, plan: UnpaidWorkspacePlans.ProUnlimitedInvoiced }, [UnpaidWorkspacePlans.Free]: { plan: UnpaidWorkspacePlans.Free, features: baseFeatures, limits: { projectCount: 1, modelCount: 5, versionsHistory: { value: 7, unit: 'day' }, commentHistory: { value: 7, unit: 'day' } } } }; export const WorkspacePlanConfigs = { ...WorkspacePaidPlanConfigs, ...WorkspaceUnpaidPlanConfigs }; /** * Checks if a workspace exceeds its plan limits for projects and models */ export const workspaceExceedsPlanLimit = (plan, projectCount, modelCount) => { if (!plan) return false; const planConfig = WorkspacePlanConfigs[plan]; if (!planConfig) return false; const limits = planConfig.limits; if (!limits.projectCount || !limits.modelCount) return false; if (!projectCount || !modelCount) return false; return projectCount > limits.projectCount || modelCount > limits.modelCount; }; /** * Checks if a workspace reached its plan limits for projects and models */ export const workspaceReachedPlanLimit = (plan, projectCount, modelCount) => { if (!plan) return false; const planConfig = WorkspacePlanConfigs[plan]; if (!planConfig) return false; const limits = planConfig.limits; if (!limits.projectCount || !limits.modelCount) return false; return projectCount === limits.projectCount || modelCount === limits.modelCount; }; //# sourceMappingURL=features.js.map