UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.

166 lines • 7.18 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const controller_1 = __importDefault(require("../../controller")); const permissions_1 = require("../../../types/permissions"); const extract_user_1 = require("../../../util/extract-user"); const create_request_schema_1 = require("../../../openapi/util/create-request-schema"); const create_response_schema_1 = require("../../../openapi/util/create-response-schema"); const PREFIX = '/:projectId/features/:featureName/variants'; const ENV_PREFIX = '/:projectId/features/:featureName/environments/:environment/variants'; class VariantsController extends controller_1.default { constructor(config, { featureToggleService, openApiService, }) { super(config); this.logger = config.getLogger('admin-api/project/variants.ts'); this.featureService = featureToggleService; this.route({ method: 'get', path: PREFIX, permission: permissions_1.NONE, handler: this.getVariants, middleware: [ openApiService.validPath({ tags: ['Features'], operationId: 'getFeatureVariants', responses: { 200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'), }, }), ], }); this.route({ method: 'patch', path: PREFIX, permission: permissions_1.UPDATE_FEATURE_VARIANTS, handler: this.patchVariants, middleware: [ openApiService.validPath({ tags: ['Features'], operationId: 'patchFeatureVariants', requestBody: (0, create_request_schema_1.createRequestSchema)('patchesSchema'), responses: { 200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'), }, }), ], }); this.route({ method: 'put', path: PREFIX, permission: permissions_1.UPDATE_FEATURE_VARIANTS, handler: this.overwriteVariants, middleware: [ openApiService.validPath({ tags: ['Features'], operationId: 'overwriteFeatureVariants', requestBody: (0, create_request_schema_1.createRequestSchema)('variantsSchema'), responses: { 200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'), }, }), ], }); this.route({ method: 'get', path: ENV_PREFIX, permission: permissions_1.NONE, handler: this.getVariantsOnEnv, middleware: [ openApiService.validPath({ tags: ['Features'], operationId: 'getEnvironmentFeatureVariants', responses: { 200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'), }, }), ], }); this.route({ method: 'patch', path: ENV_PREFIX, permission: permissions_1.UPDATE_FEATURE_ENVIRONMENT_VARIANTS, handler: this.patchVariantsOnEnv, middleware: [ openApiService.validPath({ tags: ['Features'], operationId: 'patchEnvironmentsFeatureVariants', requestBody: (0, create_request_schema_1.createRequestSchema)('patchesSchema'), responses: { 200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'), }, }), ], }); this.route({ method: 'put', path: ENV_PREFIX, permission: permissions_1.UPDATE_FEATURE_ENVIRONMENT_VARIANTS, handler: this.overwriteVariantsOnEnv, middleware: [ openApiService.validPath({ tags: ['Features'], operationId: 'overwriteEnvironmentFeatureVariants', requestBody: (0, create_request_schema_1.createRequestSchema)('variantsSchema'), responses: { 200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'), }, }), ], }); } /** * @deprecated - Variants should be fetched from featureService.getVariantsForEnv (since variants are now; since 4.18, connected to environments) * @param req * @param res */ async getVariants(req, res) { const { featureName } = req.params; const variants = await this.featureService.getVariants(featureName); res.status(200).json({ version: 1, variants: variants || [] }); } async patchVariants(req, res) { const { projectId, featureName } = req.params; const userName = (0, extract_user_1.extractUsername)(req); const updatedFeature = await this.featureService.updateVariants(featureName, projectId, req.body, userName); res.status(200).json({ version: 1, variants: updatedFeature.variants, }); } async overwriteVariants(req, res) { const { projectId, featureName } = req.params; const userName = (0, extract_user_1.extractUsername)(req); const updatedFeature = await this.featureService.saveVariants(featureName, projectId, req.body, userName); res.status(200).json({ version: 1, variants: updatedFeature.variants, }); } async getVariantsOnEnv(req, res) { const { featureName, environment } = req.params; const variants = await this.featureService.getVariantsForEnv(featureName, environment); res.status(200).json({ version: 1, variants: variants || [] }); } async patchVariantsOnEnv(req, res) { const { projectId, featureName, environment } = req.params; const userName = (0, extract_user_1.extractUsername)(req); const variants = await this.featureService.updateVariantsOnEnv(featureName, projectId, environment, req.body, userName); res.status(200).json({ version: 1, variants, }); } async overwriteVariantsOnEnv(req, res) { const { featureName, environment, projectId } = req.params; const userName = (0, extract_user_1.extractUsername)(req); const variants = await this.featureService.saveVariantsOnEnv(projectId, featureName, environment, req.body, userName); res.status(200).json({ version: 1, variants: variants, }); } } exports.default = VariantsController; //# sourceMappingURL=variants.js.map