UNPKG

@studyportals/bestfit-api-fe-client

Version:
140 lines 6.29 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BestFitAPIClient = void 0; const enumerations_1 = require("./enumerations"); class BestFitAPIClient { constructor(environment, jwtSigner) { this.environment = environment; this.jwtSigner = jwtSigner; } calculateScore(studyIds, determinants, experimentVariation) { return __awaiter(this, void 0, void 0, function* () { return this.fetchResult(studyIds, determinants, 'calculate', experimentVariation); }); } breakdownCalculation(studyIds, determinants, experimentVariation) { return __awaiter(this, void 0, void 0, function* () { return this.fetchResult(studyIds, determinants, 'breakdown', experimentVariation); }); } determineAdvice(studyIds, determinants, experimentVariation) { return __awaiter(this, void 0, void 0, function* () { return this.fetchResult(studyIds, determinants, 'advice', experimentVariation); }); } getCombinedResult(studyIds, determinants, experimentVariation) { return __awaiter(this, void 0, void 0, function* () { return this.fetchResult(studyIds, determinants, 'combined', experimentVariation); }); } fetchResult(studyIds, determinants, endpoint, experimentVariation) { return __awaiter(this, void 0, void 0, function* () { const bestFitAPIURL = this.constructURL(endpoint); const response = yield fetch(bestFitAPIURL, yield this.createFetchConfigurations(studyIds, determinants, experimentVariation)); if (!response.ok) { throw new Error(response.statusText); } const body = yield response.json(); if (body.failed === true) { throw new Error(body.errorMsg); } return this.translateResult(body.result); }); } constructURL(endpoint) { if (this.environment === enumerations_1.BestFitEnvironment.PRODUCTION) { return `https://bestfit-api.prtl.co/v4/${endpoint}`; } return `https://bestfit-api.${this.environment}.prtl.co/${endpoint}`; } createFetchConfigurations(studyIds, determinants, experimentVariation) { return __awaiter(this, void 0, void 0, function* () { const body = { studyIds, determinants, }; if (experimentVariation || experimentVariation === 0) { body.experimentVariation = experimentVariation; } return this.jwtSigner.signFetchRequest({ method: 'POST', mode: 'cors', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(body), }); }); } translateResult(result) { const studiesMap = new Map(); Object.keys(result).forEach((study) => { let studyResult = result[study]; const determinantMap = this.extractDeterminantMap(studyResult); studiesMap.set(Number(study), determinantMap); }); return studiesMap; } extractDeterminantMap(studyResult) { const determinantMap = new Map(); Object.keys(studyResult).forEach((determinant) => { let determinantResult = studyResult[determinant]; const bestFitResult = this.extractBestFitResult(determinantResult); determinantMap.set(Number(determinant), bestFitResult); }); return determinantMap; } extractBestFitResult(determinantResult) { const bestFitResult = {}; if (determinantResult.advice) { bestFitResult.advice = this.extractAdvice(determinantResult); } if (determinantResult.breakdown) { bestFitResult.breakdown = this.extractBreakdown(determinantResult); } if (determinantResult.score !== undefined) { bestFitResult.score = determinantResult.score; } if (determinantResult.requirementCompleteness) { bestFitResult.requirementCompleteness = this.extractRequirementCompleteness(determinantResult); } if (determinantResult.qualificationCompleteness) { bestFitResult.qualificationCompleteness = this.extractQualificationCompleteness(determinantResult); } return bestFitResult; } extractAdvice(determinantResult) { const adviceMap = new Map(); Object.keys(determinantResult.advice).forEach((adviceDeterminant) => { adviceMap.set(Number(adviceDeterminant), determinantResult.advice[adviceDeterminant]); }); return adviceMap; } extractBreakdown(determinantResult) { return this.extractMapFromDeterminantResult(determinantResult.breakdown); } extractQualificationCompleteness(determinantResult) { return this.extractMapFromDeterminantResult(determinantResult.qualificationCompleteness); } extractRequirementCompleteness(determinantResult) { return this.extractMapFromDeterminantResult(determinantResult.requirementCompleteness); } extractMapFromDeterminantResult(determinantResultArray) { const map = new Map(); Object.keys(determinantResultArray).forEach((determinant) => { map.set(Number(determinant), determinantResultArray[determinant]); }); return map; } } exports.BestFitAPIClient = BestFitAPIClient; //# sourceMappingURL=bestfit-api-client.js.map