51be965a1395f5fcf91aa5baeadce3d37b5468c3
[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 _0xad95=['send','NotFound','request','message','result','catch','findOne','then','VoiceChannels','filter','UserId','sessionId','length','originate','body','json','userId','callNumber','callerId','callbackUrl','entityFound:','user:%s','originate\x20executed!','hangup','format','webbar:hangup','hangup\x20executed!','answer\x20fired:','webbar:answer','answer\x20executed!','hold\x20fired:','webbar:hold','hold\x20executed!','unhold','unhold\x20fired:','webbar:unhold','rows','conference','conference\x20fired:','conference\x20executed!','transfer','transfer\x20fired:','transferNumber','webbar:transfer','transfer\x20executed!','path','lodash','../../mysqldb','bluebird','jayson/promise','../../config/logger','redis','localhost','socket.io-emitter','validate','userId\x20is\x20required','string','number','sessionId\x20is\x20required','info','stringify','log','handleError:','error','stack','name','status'];(function(_0xec2abd,_0x4eafef){var _0x52487c=function(_0x2ca3b5){while(--_0x2ca3b5){_0xec2abd['push'](_0xec2abd['shift']());}};_0x52487c(++_0x4eafef);}(_0xad95,0x70));var _0x5ad9=function(_0x3f0c59,_0x9438da){_0x3f0c59=_0x3f0c59-0x0;var _0x261a68=_0xad95[_0x3f0c59];return _0x261a68;};'use strict';var path=require(_0x5ad9('0x0'));var fs=require('fs');var _=require(_0x5ad9('0x1'));var db=require(_0x5ad9('0x2'))['db'];var config=require('../../config/environment');var util=require('util');var BPromise=require(_0x5ad9('0x3'));var jayson=require(_0x5ad9('0x4'));var amiClient=jayson['client']['http']({'port':0x232a});var logger=require(_0x5ad9('0x5'))('webbarapi');var Redis=require('ioredis');config['redis']=_['defaults'](config[_0x5ad9('0x6')],{'host':_0x5ad9('0x7'),'port':0x18eb});var io=require(_0x5ad9('0x8'))(new Redis(config[_0x5ad9('0x6')]));var Schema=require(_0x5ad9('0x9'));var originateValidation=new Schema({'userId':{'type':'number','required':[!![],_0x5ad9('0xa')]},'callNumber':{'type':'string','required':[!![],'callNumber\x20is\x20required']},'callerId':{'type':_0x5ad9('0xb')},'callbackUrl':{'type':_0x5ad9('0xb')}});var hangupValidation=new Schema({'userId':{'type':_0x5ad9('0xc'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x5ad9('0xb'),'required':![]}});var answerValidation=new Schema({'userId':{'type':_0x5ad9('0xc'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x5ad9('0xb'),'required':![]}});var transferValidation=new Schema({'userId':{'type':_0x5ad9('0xc'),'required':[!![],_0x5ad9('0xa')]},'sessionId':{'type':_0x5ad9('0xb'),'required':[!![],_0x5ad9('0xd')]},'transferNumber':{'type':_0x5ad9('0xb'),'required':[!![],'transferNumber\x20is\x20required']}});var holdValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x5ad9('0xb'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x5ad9('0xc'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x5ad9('0xb'),'required':![]}});var callsValidation=new Schema({'userId':{'type':_0x5ad9('0xc'),'required':[!![],_0x5ad9('0xa')]}});var conferenceValidation=new Schema({'userId':{'type':_0x5ad9('0xc'),'required':[!![],_0x5ad9('0xa')]}});function emit(_0x32b0bd,_0x112d44,_0x321c78){logger[_0x5ad9('0xe')](_0x32b0bd,_0x112d44,JSON[_0x5ad9('0xf')](_0x321c78));io['to'](_0x32b0bd)['emit'](_0x112d44,_0x321c78);}function handleError(_0x1c0b8e){return function(_0x54f392){console[_0x5ad9('0x10')](_0x5ad9('0x11'),_0x54f392,_0x54f392 instanceof RangeError);logger[_0x5ad9('0x12')](_0x54f392[_0x5ad9('0x13')]);if(_0x54f392 instanceof RangeError){if(_0x54f392[_0x5ad9('0x14')]){delete _0x54f392[_0x5ad9('0x14')];}_0x1c0b8e[_0x5ad9('0x15')](0x194)['send'](_0x54f392);}else{if(_0x54f392[_0x5ad9('0x14')]){delete _0x54f392['name'];}_0x1c0b8e['status'](0x1f4)[_0x5ad9('0x16')](_0x54f392);}};}function checkError(){return function(_0x545268){if(!_0x545268){throw new RangeError(_0x5ad9('0x17'));}return _0x545268;};}function respondWithRpcPromise(_0x36a2e9,_0x13e38c){return new BPromise(function(_0xebbe63,_0x1274f7){var _0x57b2ba=amiClient;return _0x57b2ba[_0x5ad9('0x18')](_0x36a2e9,_0x13e38c)['then'](function(_0x807b05){if(_0x807b05['error']){if(_0x807b05['error']['code']===0x1f4){return _0x1274f7(_0x807b05[_0x5ad9('0x12')][_0x5ad9('0x19')]);}return _0xebbe63(_0x807b05[_0x5ad9('0x12')][_0x5ad9('0x19')]);}else{_0xebbe63(_0x807b05[_0x5ad9('0x1a')]);}})[_0x5ad9('0x1b')](function(_0x11d919){_0x1274f7(_0x11d919);});});}function getAgent(_0x4fd73e){return db['User'][_0x5ad9('0x1c')]({'where':{'id':_0x4fd73e,'role':'agent'}})[_0x5ad9('0x1d')](checkError());}function getAgentCheckSession(_0x584de3,_0x346f35){return new BPromise(function(_0x55a0e4,_0x58a156){var _0x243f82=respondWithRpcPromise(_0x5ad9('0x1e'));var _0x49b3df=getAgent(_0x584de3);Promise['all']([_0x243f82,_0x49b3df])[_0x5ad9('0x1d')](function(_0x129804){var _0x1b6faf=_0x129804[0x0];var _0x2ad078=_0x129804[0x1];var _0xe06a1d=_[_0x5ad9('0x1f')](_0x1b6faf['rows'],function(_0x132ec6){return _0x132ec6[_0x5ad9('0x20')]==_0x2ad078['id']&&_0x132ec6[_0x5ad9('0x21')]==_0x346f35;});if(_0xe06a1d[_0x5ad9('0x22')]==0x1){_0x55a0e4(_0x2ad078);}else{_0x58a156(new RangeError('sessionId\x20'+_0x346f35+'\x20not\x20found!'));}});});}exports[_0x5ad9('0x23')]=function(_0xe044cf,_0x4afceb){logger['info']('originate\x20fired:',_0xe044cf[_0x5ad9('0x24')]);var _0x15365b=originateValidation['validate'](_0xe044cf[_0x5ad9('0x24')]);if(_0x15365b[_0x5ad9('0x22')]>0x0){return _0x4afceb[_0x5ad9('0x15')](0x190)[_0x5ad9('0x25')](_0x15365b);}var _0x4daf7b=_0xe044cf['body'][_0x5ad9('0x26')];var _0x433728=_0xe044cf[_0x5ad9('0x24')][_0x5ad9('0x27')];var _0x211426=_0xe044cf['body'][_0x5ad9('0x28')];var _0x4091b8=_0xe044cf[_0x5ad9('0x24')][_0x5ad9('0x29')];return getAgent(_0x4daf7b)[_0x5ad9('0x1d')](function(_0x1f67d4){logger['info'](_0x5ad9('0x2a'),_0x1f67d4[_0x5ad9('0x14')]);emit(util['format'](_0x5ad9('0x2b'),_0x1f67d4[_0x5ad9('0x14')]),'webbar:originate',{'callNumber':_0x433728,'callerId':_0x211426,'callbackUrl':_0x4091b8});return _0x4afceb[_0x5ad9('0x15')](0xc8)[_0x5ad9('0x25')]({'error':![],'message':_0x5ad9('0x2c')});})['catch'](handleError(_0x4afceb));};exports[_0x5ad9('0x2d')]=function(_0x1815cc,_0x1f8b9b){logger[_0x5ad9('0xe')]('hangup\x20fired:',_0x1815cc[_0x5ad9('0x24')]);var _0xf3301a=hangupValidation[_0x5ad9('0x9')](_0x1815cc[_0x5ad9('0x24')]);if(_0xf3301a[_0x5ad9('0x22')]>0x0){return _0x1f8b9b[_0x5ad9('0x15')](0x190)[_0x5ad9('0x25')](_0xf3301a);}var _0x9219c6=_0x1815cc[_0x5ad9('0x24')]['userId'];var _0x46fc19=_0x1815cc[_0x5ad9('0x24')][_0x5ad9('0x21')];return getAgent(_0x9219c6)[_0x5ad9('0x1d')](function(_0x2a9e3b){logger['info'](_0x5ad9('0x2a'),_0x2a9e3b[_0x5ad9('0x14')]);emit(util[_0x5ad9('0x2e')]('user:%s',_0x2a9e3b[_0x5ad9('0x14')]),_0x5ad9('0x2f'),{'sessionId':_0x46fc19});return _0x1f8b9b[_0x5ad9('0x15')](0xc8)['json']({'error':![],'message':_0x5ad9('0x30')});})['catch'](handleError(_0x1f8b9b));};exports['answer']=function(_0x77689e,_0x34d201){logger[_0x5ad9('0xe')](_0x5ad9('0x31'),_0x77689e['body']);var _0x526fda=answerValidation[_0x5ad9('0x9')](_0x77689e['body']);if(_0x526fda[_0x5ad9('0x22')]>0x0){return _0x34d201['status'](0x190)[_0x5ad9('0x25')](_0x526fda);}var _0x5c5a7a=_0x77689e[_0x5ad9('0x24')][_0x5ad9('0x26')];var _0x6b2fa7=_0x77689e[_0x5ad9('0x24')][_0x5ad9('0x21')];return getAgent(_0x5c5a7a)[_0x5ad9('0x1d')](function(_0x76e642){logger[_0x5ad9('0xe')](_0x5ad9('0x2a'),_0x76e642['name']);emit(util[_0x5ad9('0x2e')](_0x5ad9('0x2b'),_0x76e642[_0x5ad9('0x14')]),_0x5ad9('0x32'),{'sessionId':_0x6b2fa7});return _0x34d201[_0x5ad9('0x15')](0xc8)['json']({'error':![],'message':_0x5ad9('0x33')});})['catch'](handleError(_0x34d201));};exports['hold']=function(_0x4cccab,_0x2c094c){logger[_0x5ad9('0xe')](_0x5ad9('0x34'),_0x4cccab['body']);var _0x39db4b=holdValidation[_0x5ad9('0x9')](_0x4cccab[_0x5ad9('0x24')]);if(_0x39db4b[_0x5ad9('0x22')]>0x0){return _0x2c094c['status'](0x190)[_0x5ad9('0x25')](_0x39db4b);}var _0x420677=_0x4cccab[_0x5ad9('0x24')][_0x5ad9('0x26')];var _0x4fdbb6=_0x4cccab[_0x5ad9('0x24')][_0x5ad9('0x21')];return getAgent(_0x420677)[_0x5ad9('0x1d')](function(_0x1e03f){logger[_0x5ad9('0xe')](_0x5ad9('0x2a'),_0x1e03f[_0x5ad9('0x14')]);emit(util['format'](_0x5ad9('0x2b'),_0x1e03f['name']),_0x5ad9('0x35'),{'sessionId':_0x4fdbb6});return _0x2c094c[_0x5ad9('0x15')](0xc8)[_0x5ad9('0x25')]({'error':![],'message':_0x5ad9('0x36')});})[_0x5ad9('0x1b')](handleError(_0x2c094c));};exports[_0x5ad9('0x37')]=function(_0xa0f426,_0x2c3945){logger[_0x5ad9('0xe')](_0x5ad9('0x38'),_0xa0f426[_0x5ad9('0x24')]);var _0x2457aa=unholdValidation[_0x5ad9('0x9')](_0xa0f426[_0x5ad9('0x24')]);if(_0x2457aa[_0x5ad9('0x22')]>0x0){return _0x2c3945['status'](0x190)[_0x5ad9('0x25')](_0x2457aa);}var _0x349d5f=_0xa0f426[_0x5ad9('0x24')][_0x5ad9('0x26')];var _0x1c4f6e=_0xa0f426[_0x5ad9('0x24')][_0x5ad9('0x21')];return getAgent(_0x349d5f)[_0x5ad9('0x1d')](function(_0x518072){logger[_0x5ad9('0xe')]('entityFound:',_0x518072[_0x5ad9('0x14')]);emit(util[_0x5ad9('0x2e')](_0x5ad9('0x2b'),_0x518072['name']),_0x5ad9('0x39'),{'sessionId':_0x1c4f6e});return _0x2c3945[_0x5ad9('0x15')](0xc8)[_0x5ad9('0x25')]({'error':![],'message':'unhold\x20executed!'});})[_0x5ad9('0x1b')](handleError(_0x2c3945));};exports['calls']=function(_0x4e2bbb,_0x4071aa){logger[_0x5ad9('0xe')]('calls\x20fired:',_0x4071aa['body']);var _0xbda89a=callsValidation[_0x5ad9('0x9')](_0x4e2bbb[_0x5ad9('0x24')]);if(_0xbda89a[_0x5ad9('0x22')]>0x0){return _0x4071aa[_0x5ad9('0x15')](0x190)[_0x5ad9('0x25')](_0xbda89a);}var _0x23bddf=_0x4e2bbb[_0x5ad9('0x24')][_0x5ad9('0x26')];var _0x5b5997=respondWithRpcPromise(_0x5ad9('0x1e'));var _0x3b233f=getAgent(_0x23bddf);return Promise['all']([_0x5b5997,_0x3b233f])[_0x5ad9('0x1d')](function(_0x3f3121){var _0x375af6=_0x3f3121[0x0];var _0x574260=_0x3f3121[0x1];var _0x2f3d04=_[_0x5ad9('0x1f')](_0x375af6[_0x5ad9('0x3a')],function(_0x8030a9){return _0x8030a9[_0x5ad9('0x20')]==_0x574260['id'];});return _0x4071aa[_0x5ad9('0x15')](0xc8)[_0x5ad9('0x25')]({'count':_0x2f3d04[_0x5ad9('0x22')],'rows':_0x2f3d04});})['catch'](handleError(_0x4071aa));};exports[_0x5ad9('0x3b')]=function(_0x4305b5,_0x1e9658){logger[_0x5ad9('0xe')](_0x5ad9('0x3c'),_0x4305b5[_0x5ad9('0x24')]);var _0x313205=conferenceValidation[_0x5ad9('0x9')](_0x4305b5[_0x5ad9('0x24')]);if(_0x313205[_0x5ad9('0x22')]>0x0){return _0x1e9658[_0x5ad9('0x15')](0x190)[_0x5ad9('0x25')](_0x313205);}var _0x515d96=_0x4305b5[_0x5ad9('0x24')][_0x5ad9('0x26')];return getAgent(_0x515d96)[_0x5ad9('0x1d')](function(_0x2bc55c){logger['info'](_0x5ad9('0x2a'),_0x2bc55c['name']);emit(util[_0x5ad9('0x2e')](_0x5ad9('0x2b'),_0x2bc55c[_0x5ad9('0x14')]),'webbar:conference');return _0x1e9658[_0x5ad9('0x15')](0xc8)[_0x5ad9('0x25')]({'error':![],'message':_0x5ad9('0x3d')});})[_0x5ad9('0x1b')](handleError(_0x1e9658));};exports[_0x5ad9('0x3e')]=function(_0x196bf8,_0x5f53aa){logger[_0x5ad9('0xe')](_0x5ad9('0x3f'),_0x196bf8['body']);var _0x12e253=transferValidation[_0x5ad9('0x9')](_0x196bf8['body']);if(_0x12e253[_0x5ad9('0x22')]>0x0){return _0x5f53aa[_0x5ad9('0x15')](0x190)['json'](_0x12e253);}var _0x2899b4=_0x196bf8[_0x5ad9('0x24')][_0x5ad9('0x26')];var _0x5ac26f=_0x196bf8[_0x5ad9('0x24')][_0x5ad9('0x21')];var _0x32f972=_0x196bf8[_0x5ad9('0x24')][_0x5ad9('0x40')];return getAgent(_0x2899b4)['then'](function(_0x5152aa){logger['info']('entityFound:',_0x5152aa['name']);emit(util['format']('user:%s',_0x5152aa[_0x5ad9('0x14')]),_0x5ad9('0x41'),{'sessionId':_0x5ac26f,'transferNumber':_0x32f972});return _0x5f53aa[_0x5ad9('0x15')](0xc8)[_0x5ad9('0x25')]({'error':![],'message':_0x5ad9('0x42')});})[_0x5ad9('0x1b')](handleError(_0x5f53aa));};