(function () { if (!window.cet || !window.cet.microservices || !window.cet.microservices.apiready) { window.cet = window.cet || {}; cet.microservices = cet.microservices || {}; let apiready = new Promise(function (resolve, reject) { var scriptElement = document.createElement("script"); scriptElement.addEventListener('load', resolve); scriptElement.addEventListener('error', reject); var origin = document.currentScript.src.split('/', 3).join('/'); scriptElement.src = origin + "/provider/ApiProvider.js?8dc3062e1069100"; document.head.appendChild(scriptElement); }); cet.microservices.apiready = apiready; } let selfUrl = document.currentScript.src; cet.microservices.apiready.then(() => { cet.microservices.api.system.addService(selfUrl); }); })(); window.cet = window.cet || {}; window.cet.microservices = window.cet.microservices || {}; cet.microservices.nairobiapi = (function () { const isSafe = true; // in order to call 'safe' api safely, load authapi in a promise: const accessManagementApiReady = isSafe ? cet.microservices.apiready.then(() => { if (cet.accessmanagement) { return Promise.resolve(); } else { return cet.microservices.api.loadApi("/accessmngapi/provider/accessmanagement.js", "apigateway"); } }) : cet.microservices.apiready; const settings = { apiUrl: "/nairobiapi/" }; const isDevEnvironment = (location.host.indexOf('.dev') > 0 || location.host.indexOf('.testing') > 0); const baseURI = new URL(document.currentScript.src).origin; /*------------------------------------------------------------------------------*/ /* Build URL query from the given payload object. */ const buildQueryFromPayload = function (payload) { if (payload && typeof payload === 'object') { var str = []; for (var p in payload) { if (payload.hasOwnProperty(p)) { if (Array.isArray(payload[p])) { for (var i = 0; i < payload[p].length; i++) { str.push(encodeURIComponent(p) + "=" + encodeURIComponent(payload[p][i])); } } else { str.push(encodeURIComponent(p) + "=" + encodeURIComponent(payload[p])); } } } return str.length > 0 ? '?' + str.join('&') : ''; } return ''; }; /*------------------------------------------------------------------------------*/ /* Validate single parameter. */ const validateParameter = function (pName, pValue) { if ((typeof pValue === 'string' && pValue.trim().length === 0) || (Array.isArray(pValue) && pValue.length === 0)) { return pName + ' cannot be empty'; } return ''; }; /*------------------------------------------------------------------------------*/ /* Validate request object. */ const validateRequest = function (request, relevantParameters) { if (!request) { return 'request data is missing'; } for (var i = 0; i < relevantParameters.length; i++) { var param = relevantParameters[i]; var paramParts = param.split('.'); var subRequest = request; if (paramParts.length > 1) { for (var p = 0; p < paramParts.length - 1; p++) { subRequest = subRequest && subRequest[paramParts[p]]; param = paramParts[p + 1]; } } if (!subRequest || !subRequest.hasOwnProperty(param)) { return relevantParameters[i] + ' is missing'; } else { var error = validateParameter(relevantParameters[i], subRequest[param]); if (error) { return error; } } } return ''; }; /*------------------------------------------------------------------------------*/ const processRequest = (request) => { var promise = new Promise(function (resolve, reject) { var validationErrorMsg = request.validationParams ? validateRequest(request.data, request.validationParams) : ''; if (validationErrorMsg) { isDevEnvironment && alert(validationErrorMsg); reject({ 'name': 'ProviderValidationError', 'message': validationErrorMsg }); } else { accessManagementApiReady.then(async () => { try { var result = null; var _cetms = isSafe ? cetms.safe : cetms; if (request.type === 'get') { result = await _cetms.get(request.URL + buildQueryFromPayload(request.data)); } else if (request.type === 'post') { result = await _cetms.post(request.URL, request.data, request.options); } resolve(result); } catch (error) { reject(error); } }).catch(error => { reject(error); }); } }); return promise; }; //#region Site const getLabels = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'Label/GetLabels', data: requestData }); }; const setLabels = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Label/SetLabels', data: requestData }); }; const getPage = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'Pages/GetPage', data: requestData, validationParams: ['language', 'pageKey'] }); }; const setPage = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Pages/SetPage', data: requestData, validationParams: ['lang', 'pageKey'] }); }; //#endregion //#region systemMessages const getMessages = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'SystemMessages/GetMessages', data: requestData, validationParams: ['language'] }); }; const getMessagesByType = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'SystemMessages/GetMessagesByType', data: requestData, validationParams: ['language', 'type'] }); }; const getMessagesByDate = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'SystemMessages/GetMessagesByDate', data: requestData, validationParams: ['language', 'date'] }); }; const setMessage = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'SystemMessages/SetMessage', data: requestData }); }; //#endregion //#region Site const getFiltersItemTypes = () => { return processRequest({ type: 'get', URL: settings.apiUrl + 'Filters/GetFiltersItemTypes', data: {} }); }; //#endregion //#region fileUpload const upload = (requestData) => { var formData = new FormData(); formData.append('container', requestData.container); formData.append('prefix', requestData.prefix); formData.append('uploadFile', requestData.file); return processRequest({ type: 'post', URL: settings.apiUrl + 'FileUpload/Upload', data: formData }); }; const getUrls = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'FileUpload/GetUrls', data: requestData, validationParams: ['container', 'prefix'] }); }; //#endregion //#region banners const getBanners = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Banners/GetBanners', data: requestData }); }; const setBanner = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Banners/SetBanner', data: requestData, validationParams: ['bannerType'] }); }; const setBanners = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Banners/SetBanners', data: requestData }); }; const deleteBanner = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Banners/DeleteBanner', data: requestData, validationParams: ['id'] }); }; //#endregion return { label: { getLabels: getLabels, setLabels: setLabels }, pages: { getPage: getPage, setPage: setPage }, systemMessages: { getMessages: getMessages, getMessagesByType: getMessagesByType, getMessagesByDate: getMessagesByDate, setMessage: setMessage }, filters: { getFiltersItemTypes }, fileUpload: { upload: upload, getUrls: getUrls }, banners: { getBanners: getBanners, setBanner: setBanner, setBanners: setBanners, deleteBanner: deleteBanner } }; })();