UNPKG

@codecovevienna/gittt-cli

Version:

Tracking time with CLI into a git repository

105 lines (104 loc) 5 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MultipieHelper = exports.DEFAULT_ROLE = void 0; const axios_1 = __importDefault(require("axios")); const _1 = require("."); const moment_1 = __importDefault(require("moment")); exports.DEFAULT_ROLE = '?'; class MultipieHelper { constructor() { this.getValidRoles = (project, record, oldRole) => __awaiter(this, void 0, void 0, function* () { let roles = [ { name: oldRole || exports.DEFAULT_ROLE, value: oldRole || exports.DEFAULT_ROLE, } ]; const configHelper = _1.ConfigHelper.getInstance(); const links = yield configHelper.findLinksByProject(project, 'Multipie'); if (links.length > 1) { throw new Error(`Multiple multipie links found for "${project.name}"`); } // check if everything is configured const link = links[0]; if (!link.rolesEndpoint) { throw new Error(`No roles endpoint set in link for "${project.name}".`); } const rolesFromApi = yield this.getRolesFromApi(link, record); // merge roles with default roles // so if we have an oldRole that is not in the rolesFromApi it will be available afterwards roles = [ ...roles .filter(choice => !rolesFromApi .map(multipieApiRole => multipieApiRole.role) .includes(choice.name)), ...rolesFromApi .map(multipieApiRole => ({ name: multipieApiRole.role, value: multipieApiRole.role })) ]; return roles; }); this.getRolesFromApi = (link, record) => __awaiter(this, void 0, void 0, function* () { const multipieLink = link; const authHelper = new _1.AuthHelper(); let authorizationHeader = ""; if (multipieLink.username) { // Legacy flow _1.LogHelper.debug("Found username parameter in link configuration, using legacy auth method"); authorizationHeader = authHelper.getLegacyAuth(multipieLink); } else { const multipieAuth = authHelper.getAuthClient(multipieLink); const { refreshToken } = multipieLink; if (!refreshToken) { throw new Error(`Unable to find refresh token for this project, please login via 'gittt link'`); } const offlineToken = yield multipieAuth.createToken("", refreshToken, {}); _1.LogHelper.debug(`Refreshing token to get access token`); const refreshedToken = yield offlineToken.refresh(); _1.LogHelper.debug(`Got access token`); authorizationHeader = `Bearer ${refreshedToken.accessToken}`; } const rolesUrl = `${link.rolesEndpoint}?project=${link.projectName}&time=${(0, moment_1.default)(record.end) .format('YYYY-MM-DDTHH:mm:ss')}`; try { _1.LogHelper.debug(`Loading roles from ${rolesUrl}`); const rolesResult = yield axios_1.default .get(rolesUrl, { headers: { "Authorization": authorizationHeader, "Cache-Control": "no-cache", "Content-Type": "application/json", }, }); const { data } = rolesResult; if (!data.success) { return []; } return data.data || []; } catch (err) { delete err.config; delete err.request; delete err.response; _1.LogHelper.debug("Loading roles request failed", err); throw new Error("Loading roles request failed"); } }); } } exports.MultipieHelper = MultipieHelper;