@studyportals/bestfit-api-fe-client
Version:
140 lines • 6.29 kB
JavaScript
;
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