8b873b455cb122a20e6c42231bf9b5e4fb3438f5
[motion2.git] / server / api / webbar / webbar.controller.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x4bbf=['NotFound','request','then','code','message','catch','User','findOne','agent','all','filter','UserId','sessionId','length','sessionId\x20','\x20not\x20found!','info','originate\x20fired:','body','json','userId','callNumber','callerId','callbackUrl','entityFound:','webbar:originate','originate\x20executed!','hangup','hangup\x20fired:','format','webbar:hangup','hangup\x20executed!','answer','user:%s','answer\x20executed!','hold\x20fired:','webbar:hold','hold\x20executed!','unhold','webbar:unhold','unhold\x20executed!','calls','calls\x20fired:','VoiceChannels','rows','conference\x20fired:','conference\x20executed!','transfer','transfer\x20fired:','transferNumber','transfer\x20executed!','path','lodash','../../mysqldb','../../config/environment','util','bluebird','jayson/promise','client','http','webbarapi','ioredis','redis','defaults','localhost','socket.io-emitter','validate','userId\x20is\x20required','callNumber\x20is\x20required','string','number','sessionId\x20is\x20required','transferNumber\x20is\x20required','stringify','log','handleError:','error','stack','name','send','status'];(function(_0x4b369d,_0x265eb8){var _0x571a98=function(_0x56341a){while(--_0x56341a){_0x4b369d['push'](_0x4b369d['shift']());}};_0x571a98(++_0x265eb8);}(_0x4bbf,0x84));var _0xf4bb=function(_0x4f39dc,_0x3e49e0){_0x4f39dc=_0x4f39dc-0x0;var _0x57abf8=_0x4bbf[_0x4f39dc];return _0x57abf8;};'use strict';var path=require(_0xf4bb('0x0'));var fs=require('fs');var _=require(_0xf4bb('0x1'));var db=require(_0xf4bb('0x2'))['db'];var config=require(_0xf4bb('0x3'));var util=require(_0xf4bb('0x4'));var BPromise=require(_0xf4bb('0x5'));var jayson=require(_0xf4bb('0x6'));var amiClient=jayson[_0xf4bb('0x7')][_0xf4bb('0x8')]({'port':0x232a});var logger=require('../../config/logger')(_0xf4bb('0x9'));var Redis=require(_0xf4bb('0xa'));config[_0xf4bb('0xb')]=_[_0xf4bb('0xc')](config[_0xf4bb('0xb')],{'host':_0xf4bb('0xd'),'port':0x18eb});var io=require(_0xf4bb('0xe'))(new Redis(config[_0xf4bb('0xb')]));var Schema=require(_0xf4bb('0xf'));var originateValidation=new Schema({'userId':{'type':'number','required':[!![],_0xf4bb('0x10')]},'callNumber':{'type':'string','required':[!![],_0xf4bb('0x11')]},'callerId':{'type':'string'},'callbackUrl':{'type':_0xf4bb('0x12')}});var hangupValidation=new Schema({'userId':{'type':'number','required':[!![],_0xf4bb('0x10')]},'sessionId':{'type':_0xf4bb('0x12'),'required':![]}});var answerValidation=new Schema({'userId':{'type':_0xf4bb('0x13'),'required':[!![],_0xf4bb('0x10')]},'sessionId':{'type':_0xf4bb('0x12'),'required':![]}});var transferValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0xf4bb('0x12'),'required':[!![],_0xf4bb('0x14')]},'transferNumber':{'type':_0xf4bb('0x12'),'required':[!![],_0xf4bb('0x15')]}});var holdValidation=new Schema({'userId':{'type':_0xf4bb('0x13'),'required':[!![],_0xf4bb('0x10')]},'sessionId':{'type':_0xf4bb('0x12'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0xf4bb('0x13'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0xf4bb('0x12'),'required':![]}});var callsValidation=new Schema({'userId':{'type':_0xf4bb('0x13'),'required':[!![],'userId\x20is\x20required']}});var conferenceValidation=new Schema({'userId':{'type':_0xf4bb('0x13'),'required':[!![],'userId\x20is\x20required']}});function emit(_0x5de24b,_0x232330,_0x4fb88b){logger['info'](_0x5de24b,_0x232330,JSON[_0xf4bb('0x16')](_0x4fb88b));io['to'](_0x5de24b)['emit'](_0x232330,_0x4fb88b);}function handleError(_0x1a0b22){return function(_0x4686da){console[_0xf4bb('0x17')](_0xf4bb('0x18'),_0x4686da,_0x4686da instanceof RangeError);logger[_0xf4bb('0x19')](_0x4686da[_0xf4bb('0x1a')]);if(_0x4686da instanceof RangeError){if(_0x4686da[_0xf4bb('0x1b')]){delete _0x4686da[_0xf4bb('0x1b')];}_0x1a0b22['status'](0x194)[_0xf4bb('0x1c')](_0x4686da);}else{if(_0x4686da['name']){delete _0x4686da[_0xf4bb('0x1b')];}_0x1a0b22[_0xf4bb('0x1d')](0x1f4)[_0xf4bb('0x1c')](_0x4686da);}};}function checkError(){return function(_0x2bd724){if(!_0x2bd724){throw new RangeError(_0xf4bb('0x1e'));}return _0x2bd724;};}function respondWithRpcPromise(_0x5e2229,_0x109117){return new BPromise(function(_0x3a4948,_0x5b6e79){var _0x560897=amiClient;return _0x560897[_0xf4bb('0x1f')](_0x5e2229,_0x109117)[_0xf4bb('0x20')](function(_0x2570c4){if(_0x2570c4[_0xf4bb('0x19')]){if(_0x2570c4['error'][_0xf4bb('0x21')]===0x1f4){return _0x5b6e79(_0x2570c4['error'][_0xf4bb('0x22')]);}return _0x3a4948(_0x2570c4['error'][_0xf4bb('0x22')]);}else{_0x3a4948(_0x2570c4['result']);}})[_0xf4bb('0x23')](function(_0x4b497b){_0x5b6e79(_0x4b497b);});});}function getAgent(_0x557399){return db[_0xf4bb('0x24')][_0xf4bb('0x25')]({'where':{'id':_0x557399,'role':_0xf4bb('0x26')}})[_0xf4bb('0x20')](checkError());}function getAgentCheckSession(_0x13ae25,_0x39b667){return new BPromise(function(_0x1dc06b,_0x4e102b){var _0x3a9a7c=respondWithRpcPromise('VoiceChannels');var _0x58bc3e=getAgent(_0x13ae25);Promise[_0xf4bb('0x27')]([_0x3a9a7c,_0x58bc3e])[_0xf4bb('0x20')](function(_0x5d65a1){var _0x1a83a5=_0x5d65a1[0x0];var _0x5aae93=_0x5d65a1[0x1];var _0x417376=_[_0xf4bb('0x28')](_0x1a83a5['rows'],function(_0x123b68){return _0x123b68[_0xf4bb('0x29')]==_0x5aae93['id']&&_0x123b68[_0xf4bb('0x2a')]==_0x39b667;});if(_0x417376[_0xf4bb('0x2b')]==0x1){_0x1dc06b(_0x5aae93);}else{_0x4e102b(new RangeError(_0xf4bb('0x2c')+_0x39b667+_0xf4bb('0x2d')));}});});}exports['originate']=function(_0x501c95,_0xa0fb35){logger[_0xf4bb('0x2e')](_0xf4bb('0x2f'),_0x501c95[_0xf4bb('0x30')]);var _0x14c683=originateValidation[_0xf4bb('0xf')](_0x501c95[_0xf4bb('0x30')]);if(_0x14c683[_0xf4bb('0x2b')]>0x0){return _0xa0fb35[_0xf4bb('0x1d')](0x190)[_0xf4bb('0x31')](_0x14c683);}var _0x1aef7c=_0x501c95['body'][_0xf4bb('0x32')];var _0x4f293f=_0x501c95[_0xf4bb('0x30')][_0xf4bb('0x33')];var _0x4bdd5e=_0x501c95[_0xf4bb('0x30')][_0xf4bb('0x34')];var _0x193306=_0x501c95[_0xf4bb('0x30')][_0xf4bb('0x35')];return getAgent(_0x1aef7c)[_0xf4bb('0x20')](function(_0x17617e){logger[_0xf4bb('0x2e')](_0xf4bb('0x36'),_0x17617e[_0xf4bb('0x1b')]);emit(util['format']('user:%s',_0x17617e[_0xf4bb('0x1b')]),_0xf4bb('0x37'),{'callNumber':_0x4f293f,'callerId':_0x4bdd5e,'callbackUrl':_0x193306});return _0xa0fb35['status'](0xc8)[_0xf4bb('0x31')]({'error':![],'message':_0xf4bb('0x38')});})['catch'](handleError(_0xa0fb35));};exports[_0xf4bb('0x39')]=function(_0x5ac5b8,_0x356ebe){logger['info'](_0xf4bb('0x3a'),_0x5ac5b8[_0xf4bb('0x30')]);var _0x1193a3=hangupValidation['validate'](_0x5ac5b8[_0xf4bb('0x30')]);if(_0x1193a3[_0xf4bb('0x2b')]>0x0){return _0x356ebe[_0xf4bb('0x1d')](0x190)[_0xf4bb('0x31')](_0x1193a3);}var _0x4cdf25=_0x5ac5b8[_0xf4bb('0x30')][_0xf4bb('0x32')];var _0x42d1a9=_0x5ac5b8[_0xf4bb('0x30')][_0xf4bb('0x2a')];return getAgent(_0x4cdf25)[_0xf4bb('0x20')](function(_0x3fee2c){logger[_0xf4bb('0x2e')](_0xf4bb('0x36'),_0x3fee2c[_0xf4bb('0x1b')]);emit(util[_0xf4bb('0x3b')]('user:%s',_0x3fee2c[_0xf4bb('0x1b')]),_0xf4bb('0x3c'),{'sessionId':_0x42d1a9});return _0x356ebe[_0xf4bb('0x1d')](0xc8)[_0xf4bb('0x31')]({'error':![],'message':_0xf4bb('0x3d')});})['catch'](handleError(_0x356ebe));};exports[_0xf4bb('0x3e')]=function(_0x266a4d,_0x1fa79f){logger[_0xf4bb('0x2e')]('answer\x20fired:',_0x266a4d[_0xf4bb('0x30')]);var _0x9a43e3=answerValidation['validate'](_0x266a4d[_0xf4bb('0x30')]);if(_0x9a43e3['length']>0x0){return _0x1fa79f[_0xf4bb('0x1d')](0x190)[_0xf4bb('0x31')](_0x9a43e3);}var _0x4d3a6f=_0x266a4d[_0xf4bb('0x30')][_0xf4bb('0x32')];var _0x2cb5ec=_0x266a4d['body'][_0xf4bb('0x2a')];return getAgent(_0x4d3a6f)[_0xf4bb('0x20')](function(_0x2a0f4b){logger[_0xf4bb('0x2e')](_0xf4bb('0x36'),_0x2a0f4b['name']);emit(util[_0xf4bb('0x3b')](_0xf4bb('0x3f'),_0x2a0f4b[_0xf4bb('0x1b')]),'webbar:answer',{'sessionId':_0x2cb5ec});return _0x1fa79f[_0xf4bb('0x1d')](0xc8)['json']({'error':![],'message':_0xf4bb('0x40')});})[_0xf4bb('0x23')](handleError(_0x1fa79f));};exports['hold']=function(_0x915f48,_0x2f9cc2){logger[_0xf4bb('0x2e')](_0xf4bb('0x41'),_0x915f48[_0xf4bb('0x30')]);var _0x4e351d=holdValidation[_0xf4bb('0xf')](_0x915f48[_0xf4bb('0x30')]);if(_0x4e351d[_0xf4bb('0x2b')]>0x0){return _0x2f9cc2[_0xf4bb('0x1d')](0x190)[_0xf4bb('0x31')](_0x4e351d);}var _0x519a98=_0x915f48[_0xf4bb('0x30')][_0xf4bb('0x32')];var _0x1e26e3=_0x915f48[_0xf4bb('0x30')][_0xf4bb('0x2a')];return getAgent(_0x519a98)[_0xf4bb('0x20')](function(_0x146a7d){logger['info']('entityFound:',_0x146a7d['name']);emit(util[_0xf4bb('0x3b')](_0xf4bb('0x3f'),_0x146a7d[_0xf4bb('0x1b')]),_0xf4bb('0x42'),{'sessionId':_0x1e26e3});return _0x2f9cc2[_0xf4bb('0x1d')](0xc8)[_0xf4bb('0x31')]({'error':![],'message':_0xf4bb('0x43')});})[_0xf4bb('0x23')](handleError(_0x2f9cc2));};exports[_0xf4bb('0x44')]=function(_0x16ac67,_0x55086c){logger['info']('unhold\x20fired:',_0x16ac67[_0xf4bb('0x30')]);var _0x2811af=unholdValidation[_0xf4bb('0xf')](_0x16ac67[_0xf4bb('0x30')]);if(_0x2811af[_0xf4bb('0x2b')]>0x0){return _0x55086c[_0xf4bb('0x1d')](0x190)[_0xf4bb('0x31')](_0x2811af);}var _0x19dd0f=_0x16ac67[_0xf4bb('0x30')]['userId'];var _0x2dce35=_0x16ac67[_0xf4bb('0x30')][_0xf4bb('0x2a')];return getAgent(_0x19dd0f)[_0xf4bb('0x20')](function(_0x52cca3){logger[_0xf4bb('0x2e')](_0xf4bb('0x36'),_0x52cca3[_0xf4bb('0x1b')]);emit(util[_0xf4bb('0x3b')](_0xf4bb('0x3f'),_0x52cca3[_0xf4bb('0x1b')]),_0xf4bb('0x45'),{'sessionId':_0x2dce35});return _0x55086c['status'](0xc8)[_0xf4bb('0x31')]({'error':![],'message':_0xf4bb('0x46')});})[_0xf4bb('0x23')](handleError(_0x55086c));};exports[_0xf4bb('0x47')]=function(_0x582d22,_0x5e7fd5){logger[_0xf4bb('0x2e')](_0xf4bb('0x48'),_0x5e7fd5[_0xf4bb('0x30')]);var _0x17a33f=callsValidation['validate'](_0x582d22[_0xf4bb('0x30')]);if(_0x17a33f[_0xf4bb('0x2b')]>0x0){return _0x5e7fd5[_0xf4bb('0x1d')](0x190)[_0xf4bb('0x31')](_0x17a33f);}var _0x542597=_0x582d22[_0xf4bb('0x30')]['userId'];var _0x127991=respondWithRpcPromise(_0xf4bb('0x49'));var _0x48e665=getAgent(_0x542597);return Promise['all']([_0x127991,_0x48e665])[_0xf4bb('0x20')](function(_0x47950d){var _0x282015=_0x47950d[0x0];var _0x54376b=_0x47950d[0x1];var _0x18ca7e=_[_0xf4bb('0x28')](_0x282015[_0xf4bb('0x4a')],function(_0x547f77){return _0x547f77['UserId']==_0x54376b['id'];});return _0x5e7fd5[_0xf4bb('0x1d')](0xc8)['json']({'count':_0x18ca7e[_0xf4bb('0x2b')],'rows':_0x18ca7e});})[_0xf4bb('0x23')](handleError(_0x5e7fd5));};exports['conference']=function(_0x4f0048,_0x32b2c2){logger[_0xf4bb('0x2e')](_0xf4bb('0x4b'),_0x4f0048[_0xf4bb('0x30')]);var _0x2adcff=conferenceValidation['validate'](_0x4f0048['body']);if(_0x2adcff['length']>0x0){return _0x32b2c2['status'](0x190)[_0xf4bb('0x31')](_0x2adcff);}var _0x2c1ebb=_0x4f0048['body'][_0xf4bb('0x32')];return getAgent(_0x2c1ebb)[_0xf4bb('0x20')](function(_0x633f21){logger['info'](_0xf4bb('0x36'),_0x633f21[_0xf4bb('0x1b')]);emit(util[_0xf4bb('0x3b')](_0xf4bb('0x3f'),_0x633f21['name']),'webbar:conference');return _0x32b2c2[_0xf4bb('0x1d')](0xc8)[_0xf4bb('0x31')]({'error':![],'message':_0xf4bb('0x4c')});})['catch'](handleError(_0x32b2c2));};exports[_0xf4bb('0x4d')]=function(_0x3d9ffe,_0x3d91e4){logger['info'](_0xf4bb('0x4e'),_0x3d9ffe[_0xf4bb('0x30')]);var _0x350ee9=transferValidation[_0xf4bb('0xf')](_0x3d9ffe[_0xf4bb('0x30')]);if(_0x350ee9[_0xf4bb('0x2b')]>0x0){return _0x3d91e4[_0xf4bb('0x1d')](0x190)[_0xf4bb('0x31')](_0x350ee9);}var _0x39e2f9=_0x3d9ffe[_0xf4bb('0x30')]['userId'];var _0x40d03c=_0x3d9ffe[_0xf4bb('0x30')][_0xf4bb('0x2a')];var _0x17389d=_0x3d9ffe[_0xf4bb('0x30')][_0xf4bb('0x4f')];return getAgent(_0x39e2f9)[_0xf4bb('0x20')](function(_0x23c0ba){logger[_0xf4bb('0x2e')](_0xf4bb('0x36'),_0x23c0ba[_0xf4bb('0x1b')]);emit(util['format']('user:%s',_0x23c0ba[_0xf4bb('0x1b')]),'webbar:transfer',{'sessionId':_0x40d03c,'transferNumber':_0x17389d});return _0x3d91e4[_0xf4bb('0x1d')](0xc8)[_0xf4bb('0x31')]({'error':![],'message':_0xf4bb('0x50')});})[_0xf4bb('0x23')](handleError(_0x3d91e4));};