e075e1f8fc8ca3de2ef71dd6329eb256ebcfdd50
[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 _0xfa2b=['send','NotFound','request','result','catch','User','agent','then','filter','UserId','sessionId','sessionId\x20','\x20not\x20found!','originate','originate\x20fired:','body','validate','length','callNumber','callerId','callbackUrl','entityFound:','format','user:%s','webbar:originate','originate\x20executed!','hangup','json','userId','webbar:hangup','hangup\x20executed!','answer','answer\x20fired:','webbar:answer','answer\x20executed!','hold','hold\x20fired:','hold\x20executed!','unhold\x20executed!','calls\x20fired:','VoiceChannels','all','rows','conference','conference\x20fired:','conference\x20executed!','transfer\x20fired:','transferNumber','transfer\x20executed!','path','lodash','../../mysqldb','../../config/environment','util','bluebird','jayson/promise','client','http','../../config/logger','webbarapi','ioredis','redis','defaults','localhost','number','userId\x20is\x20required','string','callNumber\x20is\x20required','sessionId\x20is\x20required','transferNumber\x20is\x20required','info','stringify','log','handleError:','error','stack','name','status'];(function(_0x1d9c51,_0x14082f){var _0x2a6e18=function(_0x10798c){while(--_0x10798c){_0x1d9c51['push'](_0x1d9c51['shift']());}};_0x2a6e18(++_0x14082f);}(_0xfa2b,0x1b7));var _0xbfa2=function(_0x1a6da1,_0x320ce5){_0x1a6da1=_0x1a6da1-0x0;var _0x46b51d=_0xfa2b[_0x1a6da1];return _0x46b51d;};'use strict';var path=require(_0xbfa2('0x0'));var fs=require('fs');var _=require(_0xbfa2('0x1'));var db=require(_0xbfa2('0x2'))['db'];var config=require(_0xbfa2('0x3'));var util=require(_0xbfa2('0x4'));var BPromise=require(_0xbfa2('0x5'));var jayson=require(_0xbfa2('0x6'));var amiClient=jayson[_0xbfa2('0x7')][_0xbfa2('0x8')]({'port':0x232a});var logger=require(_0xbfa2('0x9'))(_0xbfa2('0xa'));var Redis=require(_0xbfa2('0xb'));config[_0xbfa2('0xc')]=_[_0xbfa2('0xd')](config[_0xbfa2('0xc')],{'host':_0xbfa2('0xe'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xbfa2('0xc')]));var Schema=require('validate');var originateValidation=new Schema({'userId':{'type':_0xbfa2('0xf'),'required':[!![],_0xbfa2('0x10')]},'callNumber':{'type':_0xbfa2('0x11'),'required':[!![],_0xbfa2('0x12')]},'callerId':{'type':_0xbfa2('0x11')},'callbackUrl':{'type':_0xbfa2('0x11')}});var hangupValidation=new Schema({'userId':{'type':_0xbfa2('0xf'),'required':[!![],_0xbfa2('0x10')]},'sessionId':{'type':_0xbfa2('0x11'),'required':![]}});var answerValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'sessionId':{'type':'string','required':![]}});var transferValidation=new Schema({'userId':{'type':_0xbfa2('0xf'),'required':[!![],_0xbfa2('0x10')]},'sessionId':{'type':_0xbfa2('0x11'),'required':[!![],_0xbfa2('0x13')]},'transferNumber':{'type':_0xbfa2('0x11'),'required':[!![],_0xbfa2('0x14')]}});var holdValidation=new Schema({'userId':{'type':'number','required':[!![],_0xbfa2('0x10')]},'sessionId':{'type':_0xbfa2('0x11'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0xbfa2('0xf'),'required':[!![],_0xbfa2('0x10')]},'sessionId':{'type':_0xbfa2('0x11'),'required':![]}});var callsValidation=new Schema({'userId':{'type':'number','required':[!![],_0xbfa2('0x10')]}});var conferenceValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']}});function emit(_0xee34b8,_0x55c9fe,_0x560190){logger[_0xbfa2('0x15')](_0xee34b8,_0x55c9fe,JSON[_0xbfa2('0x16')](_0x560190));io['to'](_0xee34b8)['emit'](_0x55c9fe,_0x560190);}function handleError(_0xb9b6a3){return function(_0x12627a){console[_0xbfa2('0x17')](_0xbfa2('0x18'),_0x12627a,_0x12627a instanceof RangeError);logger[_0xbfa2('0x19')](_0x12627a[_0xbfa2('0x1a')]);if(_0x12627a instanceof RangeError){if(_0x12627a[_0xbfa2('0x1b')]){delete _0x12627a['name'];}_0xb9b6a3[_0xbfa2('0x1c')](0x194)[_0xbfa2('0x1d')](_0x12627a);}else{if(_0x12627a[_0xbfa2('0x1b')]){delete _0x12627a['name'];}_0xb9b6a3[_0xbfa2('0x1c')](0x1f4)[_0xbfa2('0x1d')](_0x12627a);}};}function checkError(){return function(_0x4a14a4){if(!_0x4a14a4){throw new RangeError(_0xbfa2('0x1e'));}return _0x4a14a4;};}function respondWithRpcPromise(_0x5278d8,_0x50d9df){return new BPromise(function(_0xc42b51,_0xdb059b){var _0x1ec19f=amiClient;return _0x1ec19f[_0xbfa2('0x1f')](_0x5278d8,_0x50d9df)['then'](function(_0x5bb514){if(_0x5bb514[_0xbfa2('0x19')]){if(_0x5bb514[_0xbfa2('0x19')]['code']===0x1f4){return _0xdb059b(_0x5bb514[_0xbfa2('0x19')]['message']);}return _0xc42b51(_0x5bb514[_0xbfa2('0x19')]['message']);}else{_0xc42b51(_0x5bb514[_0xbfa2('0x20')]);}})[_0xbfa2('0x21')](function(_0x8488e1){_0xdb059b(_0x8488e1);});});}function getAgent(_0x38c5dc){return db[_0xbfa2('0x22')]['findOne']({'where':{'id':_0x38c5dc,'role':_0xbfa2('0x23')}})[_0xbfa2('0x24')](checkError());}function getAgentCheckSession(_0x4f782b,_0x37ec27){return new BPromise(function(_0x14f142,_0x4ccdb5){var _0x2cbc51=respondWithRpcPromise('VoiceChannels');var _0x16bc84=getAgent(_0x4f782b);Promise['all']([_0x2cbc51,_0x16bc84])[_0xbfa2('0x24')](function(_0x596e72){var _0x37ca3a=_0x596e72[0x0];var _0x33e5af=_0x596e72[0x1];var _0x49d563=_[_0xbfa2('0x25')](_0x37ca3a['rows'],function(_0xb95429){return _0xb95429[_0xbfa2('0x26')]==_0x33e5af['id']&&_0xb95429[_0xbfa2('0x27')]==_0x37ec27;});if(_0x49d563['length']==0x1){_0x14f142(_0x33e5af);}else{_0x4ccdb5(new RangeError(_0xbfa2('0x28')+_0x37ec27+_0xbfa2('0x29')));}});});}exports[_0xbfa2('0x2a')]=function(_0x5db6ae,_0x47fd5a){logger['info'](_0xbfa2('0x2b'),_0x5db6ae[_0xbfa2('0x2c')]);var _0x55e318=originateValidation[_0xbfa2('0x2d')](_0x5db6ae[_0xbfa2('0x2c')]);if(_0x55e318[_0xbfa2('0x2e')]>0x0){return _0x47fd5a[_0xbfa2('0x1c')](0x190)['json'](_0x55e318);}var _0x2d20fe=_0x5db6ae[_0xbfa2('0x2c')]['userId'];var _0x63ed08=_0x5db6ae[_0xbfa2('0x2c')][_0xbfa2('0x2f')];var _0xa8eac2=_0x5db6ae[_0xbfa2('0x2c')][_0xbfa2('0x30')];var _0x151855=_0x5db6ae[_0xbfa2('0x2c')][_0xbfa2('0x31')];return getAgent(_0x2d20fe)['then'](function(_0x79c2bd){logger['info'](_0xbfa2('0x32'),_0x79c2bd['name']);emit(util[_0xbfa2('0x33')](_0xbfa2('0x34'),_0x79c2bd[_0xbfa2('0x1b')]),_0xbfa2('0x35'),{'callNumber':_0x63ed08,'callerId':_0xa8eac2,'callbackUrl':_0x151855});return _0x47fd5a[_0xbfa2('0x1c')](0xc8)['json']({'error':![],'message':_0xbfa2('0x36')});})[_0xbfa2('0x21')](handleError(_0x47fd5a));};exports[_0xbfa2('0x37')]=function(_0xf53cdb,_0xa6f846){logger['info']('hangup\x20fired:',_0xf53cdb[_0xbfa2('0x2c')]);var _0x1558a7=hangupValidation[_0xbfa2('0x2d')](_0xf53cdb['body']);if(_0x1558a7['length']>0x0){return _0xa6f846[_0xbfa2('0x1c')](0x190)[_0xbfa2('0x38')](_0x1558a7);}var _0x5f2257=_0xf53cdb['body'][_0xbfa2('0x39')];var _0x1fd877=_0xf53cdb['body'][_0xbfa2('0x27')];return getAgent(_0x5f2257)[_0xbfa2('0x24')](function(_0x2a541a){logger[_0xbfa2('0x15')](_0xbfa2('0x32'),_0x2a541a[_0xbfa2('0x1b')]);emit(util[_0xbfa2('0x33')](_0xbfa2('0x34'),_0x2a541a[_0xbfa2('0x1b')]),_0xbfa2('0x3a'),{'sessionId':_0x1fd877});return _0xa6f846[_0xbfa2('0x1c')](0xc8)[_0xbfa2('0x38')]({'error':![],'message':_0xbfa2('0x3b')});})[_0xbfa2('0x21')](handleError(_0xa6f846));};exports[_0xbfa2('0x3c')]=function(_0xd6f2e7,_0x3f57df){logger['info'](_0xbfa2('0x3d'),_0xd6f2e7[_0xbfa2('0x2c')]);var _0x157a0a=answerValidation[_0xbfa2('0x2d')](_0xd6f2e7[_0xbfa2('0x2c')]);if(_0x157a0a[_0xbfa2('0x2e')]>0x0){return _0x3f57df['status'](0x190)[_0xbfa2('0x38')](_0x157a0a);}var _0x49c967=_0xd6f2e7[_0xbfa2('0x2c')][_0xbfa2('0x39')];var _0x56a917=_0xd6f2e7[_0xbfa2('0x2c')][_0xbfa2('0x27')];return getAgent(_0x49c967)[_0xbfa2('0x24')](function(_0x14669c){logger[_0xbfa2('0x15')]('entityFound:',_0x14669c[_0xbfa2('0x1b')]);emit(util[_0xbfa2('0x33')](_0xbfa2('0x34'),_0x14669c[_0xbfa2('0x1b')]),_0xbfa2('0x3e'),{'sessionId':_0x56a917});return _0x3f57df[_0xbfa2('0x1c')](0xc8)[_0xbfa2('0x38')]({'error':![],'message':_0xbfa2('0x3f')});})['catch'](handleError(_0x3f57df));};exports[_0xbfa2('0x40')]=function(_0xba5a16,_0x4ede82){logger[_0xbfa2('0x15')](_0xbfa2('0x41'),_0xba5a16[_0xbfa2('0x2c')]);var _0x3879ac=holdValidation[_0xbfa2('0x2d')](_0xba5a16[_0xbfa2('0x2c')]);if(_0x3879ac[_0xbfa2('0x2e')]>0x0){return _0x4ede82[_0xbfa2('0x1c')](0x190)[_0xbfa2('0x38')](_0x3879ac);}var _0x59d61b=_0xba5a16[_0xbfa2('0x2c')][_0xbfa2('0x39')];var _0x109aaa=_0xba5a16['body']['sessionId'];return getAgent(_0x59d61b)[_0xbfa2('0x24')](function(_0x51fd07){logger[_0xbfa2('0x15')](_0xbfa2('0x32'),_0x51fd07['name']);emit(util[_0xbfa2('0x33')](_0xbfa2('0x34'),_0x51fd07[_0xbfa2('0x1b')]),'webbar:hold',{'sessionId':_0x109aaa});return _0x4ede82[_0xbfa2('0x1c')](0xc8)['json']({'error':![],'message':_0xbfa2('0x42')});})[_0xbfa2('0x21')](handleError(_0x4ede82));};exports['unhold']=function(_0x3f8e7c,_0x59dc56){logger[_0xbfa2('0x15')]('unhold\x20fired:',_0x3f8e7c[_0xbfa2('0x2c')]);var _0x78bc3b=unholdValidation[_0xbfa2('0x2d')](_0x3f8e7c[_0xbfa2('0x2c')]);if(_0x78bc3b[_0xbfa2('0x2e')]>0x0){return _0x59dc56['status'](0x190)['json'](_0x78bc3b);}var _0x4f1d75=_0x3f8e7c[_0xbfa2('0x2c')][_0xbfa2('0x39')];var _0x221f5a=_0x3f8e7c['body'][_0xbfa2('0x27')];return getAgent(_0x4f1d75)[_0xbfa2('0x24')](function(_0x5d24c1){logger[_0xbfa2('0x15')](_0xbfa2('0x32'),_0x5d24c1['name']);emit(util[_0xbfa2('0x33')](_0xbfa2('0x34'),_0x5d24c1['name']),'webbar:unhold',{'sessionId':_0x221f5a});return _0x59dc56[_0xbfa2('0x1c')](0xc8)['json']({'error':![],'message':_0xbfa2('0x43')});})[_0xbfa2('0x21')](handleError(_0x59dc56));};exports['calls']=function(_0x3b4a49,_0x455fe0){logger[_0xbfa2('0x15')](_0xbfa2('0x44'),_0x455fe0[_0xbfa2('0x2c')]);var _0x28d7c5=callsValidation[_0xbfa2('0x2d')](_0x3b4a49[_0xbfa2('0x2c')]);if(_0x28d7c5[_0xbfa2('0x2e')]>0x0){return _0x455fe0[_0xbfa2('0x1c')](0x190)[_0xbfa2('0x38')](_0x28d7c5);}var _0x229e2a=_0x3b4a49[_0xbfa2('0x2c')][_0xbfa2('0x39')];var _0x4ad53e=respondWithRpcPromise(_0xbfa2('0x45'));var _0x4e43c7=getAgent(_0x229e2a);return Promise[_0xbfa2('0x46')]([_0x4ad53e,_0x4e43c7])[_0xbfa2('0x24')](function(_0x2ec15b){var _0x3885db=_0x2ec15b[0x0];var _0x459451=_0x2ec15b[0x1];var _0x2b05b5=_[_0xbfa2('0x25')](_0x3885db[_0xbfa2('0x47')],function(_0x41749d){return _0x41749d[_0xbfa2('0x26')]==_0x459451['id'];});return _0x455fe0[_0xbfa2('0x1c')](0xc8)['json']({'count':_0x2b05b5[_0xbfa2('0x2e')],'rows':_0x2b05b5});})[_0xbfa2('0x21')](handleError(_0x455fe0));};exports[_0xbfa2('0x48')]=function(_0x26ff5e,_0x56dcc0){logger[_0xbfa2('0x15')](_0xbfa2('0x49'),_0x26ff5e[_0xbfa2('0x2c')]);var _0xd26622=conferenceValidation[_0xbfa2('0x2d')](_0x26ff5e['body']);if(_0xd26622[_0xbfa2('0x2e')]>0x0){return _0x56dcc0[_0xbfa2('0x1c')](0x190)[_0xbfa2('0x38')](_0xd26622);}var _0x2b6617=_0x26ff5e[_0xbfa2('0x2c')][_0xbfa2('0x39')];return getAgent(_0x2b6617)['then'](function(_0x31cc63){logger[_0xbfa2('0x15')](_0xbfa2('0x32'),_0x31cc63[_0xbfa2('0x1b')]);emit(util[_0xbfa2('0x33')]('user:%s',_0x31cc63[_0xbfa2('0x1b')]),'webbar:conference');return _0x56dcc0[_0xbfa2('0x1c')](0xc8)[_0xbfa2('0x38')]({'error':![],'message':_0xbfa2('0x4a')});})[_0xbfa2('0x21')](handleError(_0x56dcc0));};exports['transfer']=function(_0x4d38fc,_0x31a579){logger[_0xbfa2('0x15')](_0xbfa2('0x4b'),_0x4d38fc['body']);var _0x1ab345=transferValidation[_0xbfa2('0x2d')](_0x4d38fc[_0xbfa2('0x2c')]);if(_0x1ab345[_0xbfa2('0x2e')]>0x0){return _0x31a579['status'](0x190)[_0xbfa2('0x38')](_0x1ab345);}var _0x4350b9=_0x4d38fc['body'][_0xbfa2('0x39')];var _0x217ca5=_0x4d38fc[_0xbfa2('0x2c')][_0xbfa2('0x27')];var _0x57239c=_0x4d38fc['body'][_0xbfa2('0x4c')];return getAgent(_0x4350b9)[_0xbfa2('0x24')](function(_0x8de0a6){logger[_0xbfa2('0x15')](_0xbfa2('0x32'),_0x8de0a6['name']);emit(util[_0xbfa2('0x33')](_0xbfa2('0x34'),_0x8de0a6[_0xbfa2('0x1b')]),'webbar:transfer',{'sessionId':_0x217ca5,'transferNumber':_0x57239c});return _0x31a579[_0xbfa2('0x1c')](0xc8)[_0xbfa2('0x38')]({'error':![],'message':_0xbfa2('0x4d')});})[_0xbfa2('0x21')](handleError(_0x31a579));};