UNPKG

unomi-sdk-node

Version:

Node module to interact with unomi.

197 lines (196 loc) 6.93 kB
"use strict"; 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;