(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.index = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o { const initFunction = services[service.name]; if (initFunction) { let actualInit = (callback) => { initFunction(service, log, callback); }; if (initWrapper) { actualInit = initWrapper(actualInit, service.name); } tasks.push(actualInit); } }); async.parallel(tasks, callback); } exports.init = init; },{"./services/LPSService":2,"./utils/ServiceOwner":3,"async":undefined,"jibo-log":undefined,"xmlhttprequest":undefined}],2:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const async = require("async"); const jibo_client_framework_1 = require("jibo-client-framework"); let log; let lpsData = {}; lpsData.motionData = { cameras: [], entities: [], ts: [0, 0] }; lpsData.audioData = { entities: [], ts: [0, 0] }; let httpUrl; let lpsServiceUrl; let motionSocket; let audioSocket; let _demandDetectQueue = []; let _demandDetectRedetect = false; class lps { static get httpUrl() { return httpUrl; } static get motionData() { return lpsData.motionData; } static get audioData() { return lpsData.audioData; } } exports.lps = lps; (function (lps) { function getClosestVisualEntity() { let entity; if (lpsData.motionData !== undefined && lpsData.motionData.entities !== undefined && lpsData.motionData.entities.length > 0) { entity = lpsData.motionData.entities[0]; } return entity; } lps.getClosestVisualEntity = getClosestVisualEntity; function getVisualEntityById(id) { let entity; for (let i = 0; i < lpsData.motionData.entities.length; i++) { let itr = lpsData.motionData.entities[i]; if (itr && (itr.id === id)) { entity = itr; break; } } return entity; } lps.getVisualEntityById = getVisualEntityById; function getClosestAudibleEntity() { let entity; if (lpsData.audioData !== undefined && lpsData.audioData.entities !== undefined && lpsData.audioData.entities.length > 0) { entity = lpsData.audioData.entities[0]; } return entity; } lps.getClosestAudibleEntity = getClosestAudibleEntity; function getAudibleEntityById(id) { let entity; for (let i = 0; i < lpsData.audioData.entities.length; i++) { let itr = lpsData.audioData.entities[i]; if (itr && (itr.id === id)) { entity = itr; break; } } return entity; } lps.getAudibleEntityById = getAudibleEntityById; function getCameraParameters(cameraID, cb) { if (httpUrl === undefined) { cb('Identity service is not initialized', null); return; } let params = {}; params.cameraId = cameraID; let request = new XMLHttpRequest(); request.open("GET", httpUrl + '/lps/camera/calibration?cameraId=' + cameraID, true); request.onreadystatechange = () => { if (request.readyState === 4) { if (request.status >= 200 && request.status <= 299) { try { const data = JSON.parse(request.response); cb(null, data); } catch (e) { const errorData = 'Response is not JSON.'; cb(errorData, null); } } else { let msg = 'LPS service unavailable:'; if (request.statusText !== undefined && request.statusText !== "") { msg += request.statusText; } let errorData = null; if (request.response) { try { errorData = JSON.parse(request.response); } catch (e) { errorData = 'Response is not JSON.'; } } cb(msg, errorData); } } }; request.send(); } lps.getCameraParameters = getCameraParameters; function getFaces(cameraID, cb, kind, initTracks = false) { if (httpUrl === undefined) { cb('Identity service is not initialized', null); return; } let params = {}; params.camera_id = cameraID; params.kind = kind; params.init_tracks = initTracks; let request = new XMLHttpRequest(); request.open("POST", httpUrl + '/lps/faces', true); request.onreadystatechange = () => { if (request.readyState === 4) { if (request.status >= 200 && request.status <= 299) { try { const data = JSON.parse(request.response); cb(null, data); } catch (e) { const errorData = 'Response is not JSON.'; cb(errorData, null); } } else { let msg = 'LPS service unavailable:'; if (request.statusText !== undefined && request.statusText !== "") { msg += request.statusText; } let errorData = null; if (request.response) { try { errorData = JSON.parse(request.response); } catch (e) { errorData = 'Response is not JSON.'; } } cb(msg, errorData); } } }; request.send(JSON.stringify(params)); } lps.getFaces = getFaces; function demandDetect(cameraID, redetect, cb) { log.debug("demandDetect", cameraID, redetect); if (!!_demandDetectQueue.length) { if (_demandDetectRedetect === redetect) { _demandDetectQueue.push(cb); return; } else { cb('Cannot Demand Detect while call with redetect:' + _demandDetectRedetect + ' is in progress', null); return; } } _demandDetectRedetect = redetect; _demandDetectQueue.push(cb); if (httpUrl === undefined) { _clearDemandDetectCallbacks('LPS service is not initialized', null); return; } const data = { 'camera_id': cameraID, 'roi': { 'left': 0, 'top': 0, 'right': 640, 'bottom': 360 }, 'redetect': redetect }; const request = new XMLHttpRequest(); request.open('POST', httpUrl + '/lps/demand_detect', true); request.onreadystatechange = () => { if (request.readyState === 4) { if (request.status >= 200 && request.status <= 299) { if (request.response) { let response = {}; try { response = JSON.parse(request.response); _clearDemandDetectCallbacks(null, response.detections); } catch (e) { cb(e, null); } } else { _clearDemandDetectCallbacks('No data received from LPS demand detection', null); } } else { let msg = 'Demand Detect failure:'; if (request.statusText !== undefined && request.statusText !== '') { msg += request.statusText; } _clearDemandDetectCallbacks(msg, null); } } }; request.send(JSON.stringify(data)); } lps.demandDetect = demandDetect; function _clearDemandDetectCallbacks(err, data) { _demandDetectQueue.forEach((callback) => { callback(err, data); }); _demandDetectQueue = []; } lps._clearDemandDetectCallbacks = _clearDemandDetectCallbacks; function readBarcode(cb) { if (httpUrl === undefined) { cb('Barcode service is not initialized', null); return; } let request = new XMLHttpRequest(); request.open("GET", httpUrl + '/lps/barcode', true); request.onreadystatechange = () => { if (request.readyState === 4) { if (request.status >= 200 && request.status <= 299) { if (request.response) { let response = JSON.parse(request.response); cb(null, response.barcodes); } else { cb('No data received from barcode service', null); } } else { let msg = 'Barcode service unavailable'; if (request.statusText !== undefined && request.statusText !== "") { msg = request.statusText; } cb(msg, null); } } }; request.send(); } lps.readBarcode = readBarcode; function setPresence(presenceData, cb) { if (httpUrl === undefined) { cb('LPS Service is not initialized', null); return; } let request = new XMLHttpRequest(); request.open("POST", httpUrl + '/lps/presence', true); request.onreadystatechange = () => { if (request.readyState === 4) { if (request.status >= 200 && request.status <= 299) { if (request.response) { const response = JSON.parse(request.response); cb(null, response); } else { cb('No data received from barcode service', null); } } else { let msg = 'Failed to set presence'; if (request.statusText !== undefined && request.statusText !== "") { msg += request.statusText; } cb(msg, null); } } }; request.send(JSON.stringify(presenceData)); } lps.setPresence = setPresence; function init(service, parentLog, cb) { log = parentLog.createChild('LPS'); lpsServiceUrl = "ws:" + service.host + ":" + service.port; httpUrl = "http://" + service.host + ":" + service.port; async.parallel([ _createMotionSocket, _createAudioSocket ], cb); } lps.init = init; function _createMotionSocket(cb) { motionSocket = new jibo_client_framework_1.WSClient(lpsServiceUrl + "/lps/visual_awareness"); motionSocket.on('error', () => { console.error(`Error opening visual awareness socket at ${lpsServiceUrl}/visual_awareness`); }); motionSocket.on('message', (data) => { lpsData.motionData = data; }); cb(); } lps._createMotionSocket = _createMotionSocket; function _createAudioSocket(cb) { audioSocket = new jibo_client_framework_1.WSClient(lpsServiceUrl + "/lps/audible_awareness"); audioSocket.on('error', () => { console.error(`Error opening audible awareness socket at ${lpsServiceUrl}/audible_awareness`); }); audioSocket.on('message', (data) => { lpsData.audioData = data; }); cb(); } lps._createAudioSocket = _createAudioSocket; })(lps = exports.lps || (exports.lps = {})); },{"async":undefined,"jibo-client-framework":undefined}],3:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class ServiceOwner { static init(owner) { this._owner = owner; } } exports.ServiceOwner = ServiceOwner; },{}]},{},[1])(1) }); //# sourceMappingURL=index.js.map