unomi-sdk-node
Version:
Node module to interact with unomi.
141 lines (140 loc) • 6.28 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.profileCount = exports.deleteSegment = exports.update = exports.create = exports.get = exports.getAll = void 0;
const connection_1 = require("../utils/connection");
const validation_1 = require("../utils/validation");
function resolveReformatSegment(url, headers) {
return __awaiter(this, void 0, void 0, function* () {
const callObjectPromise = yield connection_1.callUnomi("GET", url, null, headers, 200); // get segment
if (callObjectPromise.statusCode === 200) { // if call success
return new Promise((resolve, reject) => {
resolve(validation_1.reformatSegment(callObjectPromise, callObjectPromise.responseData)); // format segment and return object that needs to be resolved
});
}
else { // call not success
return new Promise((resolve, reject) => {
resolve(callObjectPromise); // object that needs to be resolved
});
}
});
}
/**
* @function getAll
* @param {string} baseUrl
* @param {Record<string, string>} headers
* @param {string} sortOrder
* @param {number} limit
* @param {number} offset
* @returns {FilteredResponse}
*/
function getAll(baseUrl, headers, sortOrder, limit, offset) {
const url = baseUrl + `/cxs/segments?size=${limit}&offset=${offset}&sort=${sortOrder}`; // segment endpoint
return connection_1.callUnomi("GET", url, null, headers, 200); // return result object
}
exports.getAll = getAll;
/**
* @function get
* @param {string} baseUrl
* @param {Record<string, string>} headers
* @param {string} segmentId
* @returns {FilteredResponse}
*/
function get(baseUrl, headers, segmentId) {
const url = baseUrl + `/cxs/segments/${segmentId}`; // segment endpoint
return resolveReformatSegment(url, headers); // return formatted segment
}
exports.get = get;
/**
* @function create
* @param {string} baseUrl
* @param {Record<string, string>} headers
* @param {object} properties
* @returns {FilteredResponse}
*/
function create(baseUrl, headers, params) {
const url = baseUrl + `/cxs/segments`; // segment endpoint
const validatedSegmentObject = validation_1.validateSegmentObject(params, false); // validate given segment
if (validatedSegmentObject.areSubConditionsValid) { // check if subconditions are valid
return connection_1.callUnomi("POST", url, validatedSegmentObject.segmentObject, headers, 204); // return result object
}
else { // subconditions are not valid
return connection_1.callUnomi("POST", url, validatedSegmentObject.segmentObject, headers, 204, validatedSegmentObject.errors); // return result object
}
}
exports.create = create;
/**
* @function update
* @param {string} baseUrl
* @param {Record<string, string>} headers
* @param {object} properties
* @returns {FilteredResponse}
*/
function update(baseUrl, headers, params) {
const url = baseUrl + `/cxs/segments`; // segment endpoint
const validatedSegmentObject = validation_1.validateSegmentObject(params, true); // validate given segment
if (validatedSegmentObject.areSubConditionsValid) { // check if subconditions are valid
return connection_1.callUnomi("POST", url, validatedSegmentObject.segmentObject, headers, 204); // return result object
}
else { // subconditions are not valid
return connection_1.callUnomi("POST", url, validatedSegmentObject.segmentObject, headers, 204, validatedSegmentObject.errors); // return result object
}
}
exports.update = update;
/**
* @function delete
* @param {string} baseUrl
* @param {Record<string, string>} headers
* @param {string} segmentId
* @returns {FilteredResponse}
*/
function deleteSegment(baseUrl, headers, segmentId) {
const url = baseUrl + `/cxs/segments/${segmentId}`; // segment endpoint
return connection_1.callUnomi("DELETE", url, null, headers, 200); // return result object
}
exports.deleteSegment = deleteSegment;
/**
* @function count
* @param {string} baseUrl
* @param {Record<string, string>} headers
* @param {SegmentProfileCountProperties} params
* @returns {FilteredResponse}
*/
function profileCount(baseUrl, headers, params) {
const url = baseUrl + `/context-profile/_count`; // profile endpoint
const validatedParams = validation_1.validateSegmentCountObject(params);
if (validatedParams.isValid) { // check if segments and operator are valid
var query = "";
let segments = validatedParams.segments; // get the validated segments
let operator = validatedParams.operator; // get the validated operator
let queryOperator = " " + operator + " ";
for (let index in segments) { // for every segment
if (query != "") { // for every segment, except for the first one
query += queryOperator; // add the query operator (usually either " AND " or " OR ")
}
query += segments[index]; // add the segment uuid
}
// create the body for the api call
let body = {
query: {
query_string: {
query: query,
default_field: "segments"
}
}
};
return connection_1.callElasticsearch("POST", url, body, headers, 200); // return result object
}
else { // segments or operator are not valid
return connection_1.callElasticsearch("POST", url, null, headers, 200, validatedParams.errors); // return result object
}
}
exports.profileCount = profileCount;