unomi-sdk-node
Version:
Node module to interact with unomi.
197 lines (196 loc) • 6.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.allUsedProperties = exports.query = exports.getBySingleProperty = exports.sessions = exports.allProperties = exports.existingProperties = exports.count = exports.deleteProfile = exports.create = exports.get = void 0;
const connection_1 = require("../utils/connection");
const validation_1 = require("../utils/validation");
const profileGetByProperty_1 = require("../queryBuilder/profileGetByProperty");
const defaultProperties = {
consents: {},
itemId: undefined,
itemType: "profile",
mergedWith: null,
properties: undefined,
scores: {},
segments: [],
systemProperties: {},
version: null
};
/**
* @function get
* @param {string} baseUrl
* @param {Record<string, string>} headers
* @param {string} profileId
* @returns {FilteredResponse}
*/
function get(baseUrl, headers, profileId) {
if (!profileId) {
throw new Error(`profileId argument is missing, null or undefined.`);
}
const url = baseUrl + `/cxs/profiles/${profileId}`;
return connection_1.callUnomi("GET", url, null, headers, 200);
}
exports.get = get;
/**
* @function create
* @param {string} baseUrl
* @param {Record<string, string>} auth
* @param {CreateProperties} properties
* @returns {FilteredResponse}
*/
function create(baseUrl, auth, properties) {
const requiredProperties = ["itemId", "properties"];
const propsValidation = validation_1.validateRequiredProps(requiredProperties, properties);
if (!propsValidation.valid) {
throw new Error(`The following properties are missing, null or undefined: ${propsValidation.missing.join(',')}`);
}
const url = baseUrl + `/cxs/profiles`;
return connection_1.callUnomi("POST", url, Object.assign(Object.assign({}, defaultProperties), properties), auth, 204);
}
exports.create = create;
/**
* @function delete
* @param {string} baseUrl
* @param {Record<string, string>} auth
* @param {string} profileId
* @returns {FilteredResponse}
*/
function deleteProfile(baseUrl, auth, profileId) {
if (!profileId) {
throw new Error(`profileId argument is missing, null or undefined.`);
}
const url = baseUrl + `/cxs/profiles/${profileId}`;
return connection_1.callUnomi("DELETE", url, null, auth, 204);
}
exports.deleteProfile = deleteProfile;
/**
* @function count
* @param {string} baseUrl
* @param {Record<string, string>} auth
* @returns {FilteredResponse}
*/
function count(baseUrl, auth) {
const url = baseUrl + `/cxs/profiles/count`;
return connection_1.callUnomi("GET", url, null, auth, 200);
}
exports.count = count;
/**
* @function existingProperties
* @param {string} baseUrl
* @param {Record<string, string>} auth
* @param {ExistingProperties} params
* @returns {FilteredResponse}
*/
function existingProperties(baseUrl, auth, params) {
const requiredProperties = ["tag", "itemType"];
const propsValidation = validation_1.validateRequiredProps(requiredProperties, params);
if (!propsValidation.valid) {
throw new Error(`The following properties are missing, null or undefined: ${propsValidation.missing.join(',')}`);
}
const urlSearchParams = new URLSearchParams(Object.entries(params));
const url = baseUrl + `/cxs/profiles/existingProperties?${urlSearchParams.toString()}`;
return connection_1.callUnomi("GET", url, null, auth, 200);
}
exports.existingProperties = existingProperties;
/**
* @function allProperties
* @param {string} baseUrl
* @param {Record<string, string>} auth
* @returns {FilteredResponse}
*/
function allProperties(baseUrl, auth) {
const url = baseUrl + `/cxs/profiles/properties`;
return connection_1.callUnomi("GET", url, null, auth, 200);
}
exports.allProperties = allProperties;
/**
* @function sessions
* @param {string} baseUrl
* @param {Record<string, string>} auth
* @param {FilteredResponse} profileId
* @returns {FilteredResponse}
*/
function sessions(baseUrl, auth, profileId) {
if (!profileId) {
throw new Error(`Profile ID is not valid. Received: ${profileId}`);
}
const url = baseUrl + `/cxs/profiles/${profileId}/sessions`;
return connection_1.callUnomi("GET", url, null, auth, 200);
}
exports.sessions = sessions;
/**
* @function getByProperty
* @param {string} baseUrl
* @param {Record<string, string>} auth
* @param {GetByProperty} params
* @returns {FilteredResponse}
*/
function getBySingleProperty(baseUrl, auth, params) {
const requiredProperties = ["query", "limit"];
const propsValidation = validation_1.validateRequiredProps(requiredProperties, params);
if (!propsValidation.valid) {
throw new Error(`The following properties are missing, null or undefined: ${propsValidation.missing.join(',')}`);
}
const query = profileGetByProperty_1.queryBuilder(params.query);
const queryparam = {
offset: params.offset || 0,
limit: params.limit || 100,
condition: {
type: "profilePropertyCondition",
parameterValues: {
propertyName: `properties.${query.key}`,
comparisonOperator: query.operator,
propertyValue: query.value
}
},
forceRefresh: params.forceRefresh || false
};
const url = baseUrl + `cxs/profiles/search`;
return connection_1.callUnomi("POST", url, queryparam, auth, 200);
}
exports.getBySingleProperty = getBySingleProperty;
/**
* @function query
* @param {string} baseUrl
* @param {Record<string, string>} auth
* @param {GetByProperty} params
* @param {QueryParams[]} query
* @returns {FilteredResponse}
*/
function query(baseUrl, auth, params, query) {
const subConditions = query.map((queryCond) => {
return {
type: "profilePropertyCondition",
parameterValues: {
propertyName: queryCond.prop,
comparisonOperator: queryCond.operator,
propertyValue: queryCond.value
}
};
});
const fullQuery = {
offset: params.offset || 0,
limit: params.limit || 100,
condition: {
type: "booleanCondition",
parameterValues: {
operator: params.operator || "and",
subConditions
}
},
forceRefresh: params.forceRefresh || true
};
const url = baseUrl + `cxs/profiles/search`;
return connection_1.callUnomi("POST", url, fullQuery, auth, 200);
}
exports.query = query;
/**
* @function allUsedProperties
* @param {string} baseUrl
* @param {Record<string, string>} headers
* @returns {FilteredResponse}
*/
function allUsedProperties(baseUrl, headers) {
const url = baseUrl + `/context-profile`; // profile endpoint
return connection_1.callElasticsearch("GET", url, null, headers, 200); // return result object
}
exports.allUsedProperties = allUsedProperties;