UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

113 lines 6.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseFeatureFlags = void 0; exports.getFeatureFlags = getFeatureFlags; const _lodash_1 = require("#lodash"); const znv_1 = require("znv"); const zod_1 = require("zod"); // Convenience variable to override below individual feature flags, which has the effect of setting all to 'false' (disabled) // Takes precedence over ENABLE_ALL_FFS const isDisableAllFFsMode = () => ['true', '1'].includes(process.env.DISABLE_ALL_FFS || ''); // Convenience variable to override below individual feature flags, which has the effect of setting all to 'true' (enabled) // This requires a valid Speckle Enterprise Edition license in order to be enabled. // See https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme const isEnableAllFFsMode = () => ['true', '1'].includes(process.env.ENABLE_ALL_FFS || ''); const parseFeatureFlags = (input, options) => { const { forceInputs = true } = options || {}; //INFO // As a convention all feature flags should be prefixed with a FF_ const res = (0, znv_1.parseEnv)(input, { // Enables the automate module. FF_AUTOMATE_MODULE_ENABLED: { schema: zod_1.z.boolean(), description: 'Enables the Automate module. Requires FF_GATEKEEPER_MODULE_ENABLED and FF_WORKSPACES_MODULE_ENABLED to be true. This requires a valid Speckle Enterprise Edition license in order to be enabled, see https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme', defaults: { _: false } }, FF_GENDOAI_MODULE_ENABLED: { schema: zod_1.z.boolean(), description: 'Enables the gendo ai integration', defaults: { _: false } }, // FF_WORKSPACES_MODULE_ENABLED: { schema: zod_1.z.boolean(), description: 'Enables the workspaces module. Requires FF_GATEKEEPER_MODULE_ENABLED to be true. This requires a valid Speckle Enterprise Edition license in order to be enabled, see https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme', defaults: { _: false } }, FF_GATEKEEPER_MODULE_ENABLED: { schema: zod_1.z.boolean(), description: "Enables the 'gatekeeper', required for enabling licensed features. This requires a valid Speckle Enterprise Edition license in order to be enabled, see https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme", defaults: { _: false } }, // This is expected to be disabled in Enterprise and self-hosted deployments, but enabled in app.speckle.systems FF_BILLING_INTEGRATION_ENABLED: { schema: zod_1.z.boolean(), description: 'Enables Stripe billing integration. Requires FF_GATEKEEPER_MODULE_ENABLED and FF_WORKSPACES_MODULE_ENABLED to be true. This requires a valid Speckle Enterprise Edition license in order to be enabled, see https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme', defaults: { _: false } }, FF_WORKSPACES_SSO_ENABLED: { schema: zod_1.z.boolean(), description: 'Enables using dynamic SSO on a per workspace basis. Requires FF_GATEKEEPER_MODULE_ENABLED and FF_WORKSPACES_MODULE_ENABLED to be true. This requires a valid Speckle Enterprise Edition license in order to be enabled, see https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme', defaults: { _: false } }, FF_MULTIPLE_EMAILS_MODULE_ENABLED: { schema: zod_1.z.boolean(), description: 'Allows multiple email addresses to be associated with a single user', defaults: { _: false } }, FF_WORKSPACES_MULTI_REGION_ENABLED: { schema: zod_1.z.boolean(), description: 'Enables workspaces multi region DB support. Requires FF_GATEKEEPER_MODULE_ENABLED and FF_WORKSPACES_MODULE_ENABLED to be true. This requires a valid Speckle Enterprise Edition license in order to be enabled. See https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme', defaults: { _: false } }, // Forces onboarding for all users FF_FORCE_ONBOARDING: { schema: zod_1.z.boolean(), description: 'Forces onboarding flow for all users', defaults: { _: false } }, FF_NO_PERSONAL_EMAILS_ENABLED: { schema: zod_1.z.boolean(), description: 'Enable to not allow personal emails', defaults: { _: false } }, // FF_MOVE_PROJECT_REGION_ENABLED: { schema: zod_1.z.boolean(), description: "Enables endpoint(s) for updating a project's region. Requires FF_WORKSPACES_MULTI_REGION_ENABLED to be true (which indirectly requires FF_GATEKEEPER_MODULE_ENABLED and FF_WORKSPACES_MODULE_ENABLED to be true. This requires a valid Speckle Enterprise Edition license in order to be enabled, see https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme", defaults: { _: false } }, // Enable limits on personal projects FF_PERSONAL_PROJECTS_LIMITS_ENABLED: { schema: zod_1.z.boolean(), description: 'Enables limits on personal projects. Requires FF_GATEKEEPER_MODULE_ENABLED and FF_WORKSPACES_MODULE_ENABLED to be true. This requires a valid Speckle Enterprise Edition license in order to be enabled, see https://github.com/specklesystems/speckle-server?tab=License-1-ov-file#readme', defaults: { _: false } }, // Enables the new file importer FF_NEXT_GEN_FILE_IMPORTER_ENABLED: { schema: zod_1.z.boolean(), description: 'Enables the new file importer.', defaults: { _: false } } }); // Can be used to disable/enable all feature flags for testing purposes if (isDisableAllFFsMode() || isEnableAllFFsMode()) { for (const key of Object.keys(res)) { if (forceInputs && (0, _lodash_1.has)(input, key)) { continue; // skip if we are forcing inputs } ; res[key] = !isDisableAllFFsMode(); // disable takes precedence } } return res; }; exports.parseFeatureFlags = parseFeatureFlags; let parsedFlags; function getFeatureFlags() { //@ts-expect-error this way, the parse function typing is a lot better if (!parsedFlags) parsedFlags = (0, exports.parseFeatureFlags)(process.env, { forceInputs: false }); return parsedFlags; } //# sourceMappingURL=index.js.map