8030a4ad185f6f7339fb295f3873365abd8ef060
[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 _0xd6ce=['handleError:','error','stack','name','status','send','NotFound','then','code','message','result','catch','findOne','agent','VoiceChannels','filter','UserId','length','sessionId\x20','\x20not\x20found!','originate','originate\x20fired:','body','validate','json','userId','callerId','callbackUrl','info','entityFound:','format','user:%s','webbar:originate','originate\x20executed!','hangup','hangup\x20fired:','sessionId','webbar:hangup','answer','webbar:answer','hold','hold\x20fired:','webbar:hold','hold\x20executed!','unhold','unhold\x20fired:','webbar:unhold','unhold\x20executed!','calls','all','rows','conference','conference\x20fired:','webbar:conference','conference\x20executed!','transfer\x20fired:','transferNumber','transfer\x20executed!','path','lodash','../../mysqldb','../../config/environment','util','bluebird','jayson/promise','client','webbarapi','ioredis','redis','defaults','socket.io-emitter','userId\x20is\x20required','string','callNumber\x20is\x20required','number','sessionId\x20is\x20required','transferNumber\x20is\x20required','stringify','emit'];(function(_0x40455f,_0x40c86f){var _0x4c55f1=function(_0x2e4754){while(--_0x2e4754){_0x40455f['push'](_0x40455f['shift']());}};_0x4c55f1(++_0x40c86f);}(_0xd6ce,0x127));var _0xed6c=function(_0x356143,_0x3fe68e){_0x356143=_0x356143-0x0;var _0x456b87=_0xd6ce[_0x356143];return _0x456b87;};'use strict';var path=require(_0xed6c('0x0'));var fs=require('fs');var _=require(_0xed6c('0x1'));var db=require(_0xed6c('0x2'))['db'];var config=require(_0xed6c('0x3'));var util=require(_0xed6c('0x4'));var BPromise=require(_0xed6c('0x5'));var jayson=require(_0xed6c('0x6'));var amiClient=jayson[_0xed6c('0x7')]['http']({'port':0x232a});var logger=require('../../config/logger')(_0xed6c('0x8'));var Redis=require(_0xed6c('0x9'));config[_0xed6c('0xa')]=_[_0xed6c('0xb')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0xed6c('0xc'))(new Redis(config[_0xed6c('0xa')]));var Schema=require('validate');var originateValidation=new Schema({'userId':{'type':'number','required':[!![],_0xed6c('0xd')]},'callNumber':{'type':_0xed6c('0xe'),'required':[!![],_0xed6c('0xf')]},'callerId':{'type':_0xed6c('0xe')},'callbackUrl':{'type':'string'}});var hangupValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'sessionId':{'type':'string','required':![]}});var answerValidation=new Schema({'userId':{'type':_0xed6c('0x10'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':'string','required':![]}});var transferValidation=new Schema({'userId':{'type':_0xed6c('0x10'),'required':[!![],_0xed6c('0xd')]},'sessionId':{'type':'string','required':[!![],_0xed6c('0x11')]},'transferNumber':{'type':'string','required':[!![],_0xed6c('0x12')]}});var holdValidation=new Schema({'userId':{'type':_0xed6c('0x10'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0xed6c('0xe'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0xed6c('0x10'),'required':[!![],_0xed6c('0xd')]},'sessionId':{'type':_0xed6c('0xe'),'required':![]}});var callsValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']}});var conferenceValidation=new Schema({'userId':{'type':_0xed6c('0x10'),'required':[!![],_0xed6c('0xd')]}});function emit(_0x156e84,_0x4fbdb5,_0x13c503){logger['info'](_0x156e84,_0x4fbdb5,JSON[_0xed6c('0x13')](_0x13c503));io['to'](_0x156e84)[_0xed6c('0x14')](_0x4fbdb5,_0x13c503);}function handleError(_0x32dac0){return function(_0x1fe8c0){console['log'](_0xed6c('0x15'),_0x1fe8c0,_0x1fe8c0 instanceof RangeError);logger[_0xed6c('0x16')](_0x1fe8c0[_0xed6c('0x17')]);if(_0x1fe8c0 instanceof RangeError){if(_0x1fe8c0['name']){delete _0x1fe8c0[_0xed6c('0x18')];}_0x32dac0[_0xed6c('0x19')](0x194)[_0xed6c('0x1a')](_0x1fe8c0);}else{if(_0x1fe8c0[_0xed6c('0x18')]){delete _0x1fe8c0[_0xed6c('0x18')];}_0x32dac0['status'](0x1f4)[_0xed6c('0x1a')](_0x1fe8c0);}};}function checkError(){return function(_0x4947d6){if(!_0x4947d6){throw new RangeError(_0xed6c('0x1b'));}return _0x4947d6;};}function respondWithRpcPromise(_0x37a9ce,_0x30e605){return new BPromise(function(_0x34faac,_0x49a583){var _0x2fd94b=amiClient;return _0x2fd94b['request'](_0x37a9ce,_0x30e605)[_0xed6c('0x1c')](function(_0x5ea6f4){if(_0x5ea6f4[_0xed6c('0x16')]){if(_0x5ea6f4[_0xed6c('0x16')][_0xed6c('0x1d')]===0x1f4){return _0x49a583(_0x5ea6f4[_0xed6c('0x16')][_0xed6c('0x1e')]);}return _0x34faac(_0x5ea6f4[_0xed6c('0x16')][_0xed6c('0x1e')]);}else{_0x34faac(_0x5ea6f4[_0xed6c('0x1f')]);}})[_0xed6c('0x20')](function(_0x2bb6fc){_0x49a583(_0x2bb6fc);});});}function getAgent(_0xd7f45d){return db['User'][_0xed6c('0x21')]({'where':{'id':_0xd7f45d,'role':_0xed6c('0x22')}})[_0xed6c('0x1c')](checkError());}function getAgentCheckSession(_0x21d91e,_0x953c0d){return new BPromise(function(_0x3574a3,_0x47bdc5){var _0x23ee72=respondWithRpcPromise(_0xed6c('0x23'));var _0x3182ce=getAgent(_0x21d91e);Promise['all']([_0x23ee72,_0x3182ce])['then'](function(_0x531cd0){var _0x5172b2=_0x531cd0[0x0];var _0xb88247=_0x531cd0[0x1];var _0x57e099=_[_0xed6c('0x24')](_0x5172b2['rows'],function(_0x202b96){return _0x202b96[_0xed6c('0x25')]==_0xb88247['id']&&_0x202b96['sessionId']==_0x953c0d;});if(_0x57e099[_0xed6c('0x26')]==0x1){_0x3574a3(_0xb88247);}else{_0x47bdc5(new RangeError(_0xed6c('0x27')+_0x953c0d+_0xed6c('0x28')));}});});}exports[_0xed6c('0x29')]=function(_0x1174ef,_0x10e1e2){logger['info'](_0xed6c('0x2a'),_0x1174ef[_0xed6c('0x2b')]);var _0x5a4230=originateValidation[_0xed6c('0x2c')](_0x1174ef['body']);if(_0x5a4230[_0xed6c('0x26')]>0x0){return _0x10e1e2[_0xed6c('0x19')](0x190)[_0xed6c('0x2d')](_0x5a4230);}var _0x2db97c=_0x1174ef[_0xed6c('0x2b')][_0xed6c('0x2e')];var _0x552fd9=_0x1174ef['body']['callNumber'];var _0x1deec3=_0x1174ef[_0xed6c('0x2b')][_0xed6c('0x2f')];var _0x5b5ba8=_0x1174ef[_0xed6c('0x2b')][_0xed6c('0x30')];return getAgent(_0x2db97c)[_0xed6c('0x1c')](function(_0x4233e5){logger[_0xed6c('0x31')](_0xed6c('0x32'),_0x4233e5[_0xed6c('0x18')]);emit(util[_0xed6c('0x33')](_0xed6c('0x34'),_0x4233e5[_0xed6c('0x18')]),_0xed6c('0x35'),{'callNumber':_0x552fd9,'callerId':_0x1deec3,'callbackUrl':_0x5b5ba8});return _0x10e1e2[_0xed6c('0x19')](0xc8)['json']({'error':![],'message':_0xed6c('0x36')});})[_0xed6c('0x20')](handleError(_0x10e1e2));};exports[_0xed6c('0x37')]=function(_0x246589,_0x53a513){logger[_0xed6c('0x31')](_0xed6c('0x38'),_0x246589[_0xed6c('0x2b')]);var _0x53b784=hangupValidation[_0xed6c('0x2c')](_0x246589['body']);if(_0x53b784[_0xed6c('0x26')]>0x0){return _0x53a513[_0xed6c('0x19')](0x190)[_0xed6c('0x2d')](_0x53b784);}var _0x4f8a7b=_0x246589[_0xed6c('0x2b')][_0xed6c('0x2e')];var _0x48708d=_0x246589[_0xed6c('0x2b')][_0xed6c('0x39')];return getAgent(_0x4f8a7b)[_0xed6c('0x1c')](function(_0x124865){logger[_0xed6c('0x31')](_0xed6c('0x32'),_0x124865[_0xed6c('0x18')]);emit(util[_0xed6c('0x33')](_0xed6c('0x34'),_0x124865[_0xed6c('0x18')]),_0xed6c('0x3a'),{'sessionId':_0x48708d});return _0x53a513[_0xed6c('0x19')](0xc8)[_0xed6c('0x2d')]({'error':![],'message':'hangup\x20executed!'});})[_0xed6c('0x20')](handleError(_0x53a513));};exports[_0xed6c('0x3b')]=function(_0x4a1fa2,_0x141ea3){logger[_0xed6c('0x31')]('answer\x20fired:',_0x4a1fa2['body']);var _0x6bc8dc=answerValidation[_0xed6c('0x2c')](_0x4a1fa2['body']);if(_0x6bc8dc[_0xed6c('0x26')]>0x0){return _0x141ea3[_0xed6c('0x19')](0x190)['json'](_0x6bc8dc);}var _0x5a09c5=_0x4a1fa2[_0xed6c('0x2b')][_0xed6c('0x2e')];var _0x3a9d5d=_0x4a1fa2[_0xed6c('0x2b')]['sessionId'];return getAgent(_0x5a09c5)[_0xed6c('0x1c')](function(_0x3a00e5){logger[_0xed6c('0x31')](_0xed6c('0x32'),_0x3a00e5[_0xed6c('0x18')]);emit(util[_0xed6c('0x33')](_0xed6c('0x34'),_0x3a00e5[_0xed6c('0x18')]),_0xed6c('0x3c'),{'sessionId':_0x3a9d5d});return _0x141ea3['status'](0xc8)[_0xed6c('0x2d')]({'error':![],'message':'answer\x20executed!'});})[_0xed6c('0x20')](handleError(_0x141ea3));};exports[_0xed6c('0x3d')]=function(_0x3743cc,_0x26e663){logger['info'](_0xed6c('0x3e'),_0x3743cc['body']);var _0x3a44f5=holdValidation[_0xed6c('0x2c')](_0x3743cc[_0xed6c('0x2b')]);if(_0x3a44f5[_0xed6c('0x26')]>0x0){return _0x26e663['status'](0x190)[_0xed6c('0x2d')](_0x3a44f5);}var _0x369481=_0x3743cc[_0xed6c('0x2b')][_0xed6c('0x2e')];var _0x43097d=_0x3743cc[_0xed6c('0x2b')][_0xed6c('0x39')];return getAgent(_0x369481)[_0xed6c('0x1c')](function(_0x2475eb){logger[_0xed6c('0x31')](_0xed6c('0x32'),_0x2475eb[_0xed6c('0x18')]);emit(util[_0xed6c('0x33')](_0xed6c('0x34'),_0x2475eb[_0xed6c('0x18')]),_0xed6c('0x3f'),{'sessionId':_0x43097d});return _0x26e663[_0xed6c('0x19')](0xc8)['json']({'error':![],'message':_0xed6c('0x40')});})[_0xed6c('0x20')](handleError(_0x26e663));};exports[_0xed6c('0x41')]=function(_0x3ce893,_0x2301fd){logger[_0xed6c('0x31')](_0xed6c('0x42'),_0x3ce893[_0xed6c('0x2b')]);var _0x5dbe4a=unholdValidation[_0xed6c('0x2c')](_0x3ce893[_0xed6c('0x2b')]);if(_0x5dbe4a[_0xed6c('0x26')]>0x0){return _0x2301fd[_0xed6c('0x19')](0x190)[_0xed6c('0x2d')](_0x5dbe4a);}var _0xaacd00=_0x3ce893['body'][_0xed6c('0x2e')];var _0x347bea=_0x3ce893[_0xed6c('0x2b')][_0xed6c('0x39')];return getAgent(_0xaacd00)['then'](function(_0x3c45e2){logger[_0xed6c('0x31')](_0xed6c('0x32'),_0x3c45e2[_0xed6c('0x18')]);emit(util[_0xed6c('0x33')]('user:%s',_0x3c45e2[_0xed6c('0x18')]),_0xed6c('0x43'),{'sessionId':_0x347bea});return _0x2301fd['status'](0xc8)[_0xed6c('0x2d')]({'error':![],'message':_0xed6c('0x44')});})['catch'](handleError(_0x2301fd));};exports[_0xed6c('0x45')]=function(_0x2bdfea,_0x37b55b){logger[_0xed6c('0x31')]('calls\x20fired:',_0x37b55b[_0xed6c('0x2b')]);var _0x4e8fd8=callsValidation[_0xed6c('0x2c')](_0x2bdfea[_0xed6c('0x2b')]);if(_0x4e8fd8[_0xed6c('0x26')]>0x0){return _0x37b55b[_0xed6c('0x19')](0x190)[_0xed6c('0x2d')](_0x4e8fd8);}var _0x22b113=_0x2bdfea[_0xed6c('0x2b')][_0xed6c('0x2e')];var _0x57af16=respondWithRpcPromise(_0xed6c('0x23'));var _0xcc6ea5=getAgent(_0x22b113);return Promise[_0xed6c('0x46')]([_0x57af16,_0xcc6ea5])[_0xed6c('0x1c')](function(_0xe0639c){var _0x8b133a=_0xe0639c[0x0];var _0xafbbc5=_0xe0639c[0x1];var _0x2ef035=_[_0xed6c('0x24')](_0x8b133a[_0xed6c('0x47')],function(_0x366697){return _0x366697['UserId']==_0xafbbc5['id'];});return _0x37b55b[_0xed6c('0x19')](0xc8)[_0xed6c('0x2d')]({'count':_0x2ef035[_0xed6c('0x26')],'rows':_0x2ef035});})['catch'](handleError(_0x37b55b));};exports[_0xed6c('0x48')]=function(_0x5efd38,_0x4fe11d){logger[_0xed6c('0x31')](_0xed6c('0x49'),_0x5efd38['body']);var _0x6ef78f=conferenceValidation[_0xed6c('0x2c')](_0x5efd38[_0xed6c('0x2b')]);if(_0x6ef78f[_0xed6c('0x26')]>0x0){return _0x4fe11d['status'](0x190)[_0xed6c('0x2d')](_0x6ef78f);}var _0x56d88d=_0x5efd38[_0xed6c('0x2b')]['userId'];return getAgent(_0x56d88d)[_0xed6c('0x1c')](function(_0x13e73e){logger[_0xed6c('0x31')]('entityFound:',_0x13e73e['name']);emit(util[_0xed6c('0x33')](_0xed6c('0x34'),_0x13e73e['name']),_0xed6c('0x4a'));return _0x4fe11d[_0xed6c('0x19')](0xc8)[_0xed6c('0x2d')]({'error':![],'message':_0xed6c('0x4b')});})[_0xed6c('0x20')](handleError(_0x4fe11d));};exports['transfer']=function(_0x4b684b,_0x22ca8f){logger[_0xed6c('0x31')](_0xed6c('0x4c'),_0x4b684b[_0xed6c('0x2b')]);var _0x42d8d8=transferValidation[_0xed6c('0x2c')](_0x4b684b['body']);if(_0x42d8d8['length']>0x0){return _0x22ca8f[_0xed6c('0x19')](0x190)[_0xed6c('0x2d')](_0x42d8d8);}var _0x55dc0b=_0x4b684b[_0xed6c('0x2b')][_0xed6c('0x2e')];var _0x387f00=_0x4b684b[_0xed6c('0x2b')]['sessionId'];var _0x3d88a4=_0x4b684b['body'][_0xed6c('0x4d')];return getAgent(_0x55dc0b)[_0xed6c('0x1c')](function(_0x3daf6e){logger['info'](_0xed6c('0x32'),_0x3daf6e['name']);emit(util[_0xed6c('0x33')]('user:%s',_0x3daf6e[_0xed6c('0x18')]),'webbar:transfer',{'sessionId':_0x387f00,'transferNumber':_0x3d88a4});return _0x22ca8f[_0xed6c('0x19')](0xc8)['json']({'error':![],'message':_0xed6c('0x4e')});})[_0xed6c('0x20')](handleError(_0x22ca8f));};