@speckle/shared
Version:
Shared code between various Speckle JS packages
82 lines • 3.74 kB
TypeScript
import { WorkspaceRoles } from '../../core/constants.js';
import { WorkspaceLimits } from './limits.js';
import { PaidWorkspacePlans, UnpaidWorkspacePlans, WorkspacePlanBillingIntervals, WorkspacePlans } from './plans.js';
import type { MaybeNullOrUndefined } from '../../core/helpers/utilityTypes.js';
/**
* WORKSPACE FEATURES
*/
export declare const WorkspacePlanFeatures: {
readonly AutomateBeta: "automateBeta";
readonly DomainDiscoverability: "domainDiscoverability";
readonly DomainSecurity: "domainBasedSecurityPolicies";
readonly SSO: "oidcSso";
readonly CustomDataRegion: "workspaceDataRegionSpecificity";
readonly HideSpeckleBranding: "hideSpeckleBranding";
};
export type WorkspacePlanFeatures = (typeof WorkspacePlanFeatures)[keyof typeof WorkspacePlanFeatures];
export declare const WorkspacePlanFeaturesMetadata: {
readonly automateBeta: {
readonly displayName: "Automate beta access";
readonly description: "Run custom automations on every new model version";
};
readonly domainDiscoverability: {
readonly displayName: "Domain discoverability";
readonly description: "Allow people to discover your workspace if they use a verified company email";
};
readonly domainBasedSecurityPolicies: {
readonly displayName: "Domain protection";
readonly description: "Require workspace members to use a verified company email";
};
readonly oidcSso: {
readonly displayName: "Single Sign-On (SSO)";
readonly description: "Require workspace members to authenticate with your SSO provider";
};
readonly workspaceDataRegionSpecificity: {
readonly displayName: "Custom data residency";
readonly description: "Store your data in EU, UK, North America, or Asia Pacific";
};
readonly hideSpeckleBranding: {
readonly displayName: "Customised viewer";
readonly description: "Hide the Speckle branding in embedded viewer";
};
};
/**
* PLAN CONFIG - PRICES & FEATURES
*/
export type WorkspacePlanPriceStructure = {
[interval in WorkspacePlanBillingIntervals]: {
[role in WorkspaceRoles]: number;
};
};
export type WorkspacePlanConfig<Plan extends WorkspacePlans = WorkspacePlans> = {
plan: Plan;
features: readonly WorkspacePlanFeatures[];
limits: WorkspaceLimits;
};
export declare const WorkspacePaidPlanConfigs: {
[plan in PaidWorkspacePlans]: WorkspacePlanConfig<plan>;
};
export declare const WorkspaceUnpaidPlanConfigs: {
[plan in UnpaidWorkspacePlans]: WorkspacePlanConfig<plan>;
};
export declare const WorkspacePlanConfigs: {
teamUnlimitedInvoiced: WorkspacePlanConfig<"teamUnlimitedInvoiced">;
proUnlimitedInvoiced: WorkspacePlanConfig<"proUnlimitedInvoiced">;
enterprise: WorkspacePlanConfig<"enterprise">;
unlimited: WorkspacePlanConfig<"unlimited">;
academia: WorkspacePlanConfig<"academia">;
free: WorkspacePlanConfig<"free">;
team: WorkspacePlanConfig<"team">;
teamUnlimited: WorkspacePlanConfig<"teamUnlimited">;
pro: WorkspacePlanConfig<"pro">;
proUnlimited: WorkspacePlanConfig<"proUnlimited">;
};
/**
* Checks if a workspace exceeds its plan limits for projects and models
*/
export declare const workspaceExceedsPlanLimit: (plan: MaybeNullOrUndefined<WorkspacePlans>, projectCount: MaybeNullOrUndefined<number>, modelCount: MaybeNullOrUndefined<number>) => boolean;
/**
* Checks if a workspace reached its plan limits for projects and models
*/
export declare const workspaceReachedPlanLimit: (plan: MaybeNullOrUndefined<WorkspacePlans>, projectCount: MaybeNullOrUndefined<number>, modelCount: MaybeNullOrUndefined<number>) => boolean;
//# sourceMappingURL=features.d.ts.map