unleash-server
Version:
Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.
82 lines • 3.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateApiTokenEnvironment = exports.validateApiToken = exports.mapLegacyTokenWithSecret = exports.mapLegacyToken = exports.mapLegacyProjects = exports.isAllProjects = exports.ApiTokenType = exports.ALL = void 0;
const bad_data_error_1 = __importDefault(require("../../error/bad-data-error"));
exports.ALL = '*';
var ApiTokenType;
(function (ApiTokenType) {
ApiTokenType["CLIENT"] = "client";
ApiTokenType["ADMIN"] = "admin";
ApiTokenType["FRONTEND"] = "frontend";
})(ApiTokenType = exports.ApiTokenType || (exports.ApiTokenType = {}));
const isAllProjects = (projects) => {
return projects && projects.length === 1 && projects[0] === exports.ALL;
};
exports.isAllProjects = isAllProjects;
const mapLegacyProjects = (project, projects) => {
let cleanedProjects;
if (project) {
cleanedProjects = [project];
}
else if (projects) {
cleanedProjects = projects;
if (cleanedProjects.includes('*')) {
cleanedProjects = ['*'];
}
}
else {
throw new bad_data_error_1.default('API tokens must either contain a project or projects field');
}
return cleanedProjects;
};
exports.mapLegacyProjects = mapLegacyProjects;
const mapLegacyToken = (token) => {
const cleanedProjects = (0, exports.mapLegacyProjects)(token.project, token.projects);
return {
username: token.username,
type: token.type,
environment: token.environment,
projects: cleanedProjects,
expiresAt: token.expiresAt,
};
};
exports.mapLegacyToken = mapLegacyToken;
const mapLegacyTokenWithSecret = (token) => {
return {
...(0, exports.mapLegacyToken)(token),
secret: token.secret,
};
};
exports.mapLegacyTokenWithSecret = mapLegacyTokenWithSecret;
const validateApiToken = ({ type, projects, environment, }) => {
if (type === ApiTokenType.ADMIN && !(0, exports.isAllProjects)(projects)) {
throw new bad_data_error_1.default('Admin token cannot be scoped to single project');
}
if (type === ApiTokenType.ADMIN && environment !== exports.ALL) {
throw new bad_data_error_1.default('Admin token cannot be scoped to single environment');
}
if (type === ApiTokenType.CLIENT && environment === exports.ALL) {
throw new bad_data_error_1.default('Client token cannot be scoped to all environments');
}
if (type === ApiTokenType.FRONTEND && environment === exports.ALL) {
throw new bad_data_error_1.default('Frontend token cannot be scoped to all environments');
}
};
exports.validateApiToken = validateApiToken;
const validateApiTokenEnvironment = ({ environment }, environments) => {
if (environment === exports.ALL) {
return;
}
const selectedEnvironment = environments.find((env) => env.name === environment);
if (!selectedEnvironment) {
throw new bad_data_error_1.default(`Environment=${environment} does not exist`);
}
if (!selectedEnvironment.enabled) {
throw new bad_data_error_1.default('Client token cannot be scoped to disabled environments');
}
};
exports.validateApiTokenEnvironment = validateApiTokenEnvironment;
//# sourceMappingURL=api-token.js.map