bef5cf9b400b01179141446e949d29b862ee20ad
[motion2.git] / server / services / agi / scripts / index.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 _0x09ba=['join','confidence','googleASR\x20confidence','catch','[%s]\x20%s:%s','name','message','googleDialogflow','textRequest','stringify','source','result','resolvedQuery','actionIncomplete','speech','score','status','code','endConversation','metadata','isFallbackIntent','replace','sessionPath','detectIntent','Dialogflow\x20V2\x20response:','queryResult','allRequiredParamsPresent','diagnosticInfo','fields','boolValue','fulfillmentText','displayName','intent','languageCode','queryText','responseId','intentDetectionConfidence','Tilde\x20ASR\x20transcription','Tilde\x20ASR\x20confidence','polly','awsLex','lex','ispeechTTS','format','%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3','ispeechASR','%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s','sestekNDA','nda','text','channelData','CustomAction','CustomActionData','AudioFromTts','Data','audiofile','dirName','apiai-promise','bluebird','https','path','querystring','request-promise','randomstring','url','parse','util','./google','./sestek','./tilde','../../../config/logger','https://api.ispeech.org/api/rest','protocol','https:','host','WHAT_EVER','get','statusCode','request\x20to\x20','\x20failed,\x20status\x20code\x20=\x20','statusMessage','createWriteStream','info','finish\x20download\x20file','close','error','pipe','end','transcode','wav','error\x20convert','finish\x20to\x20convert','start','resolve','generate','writeFileSync','base64','then','unlink','chmodSync','split','toString','googleCloudTTS','https://texttospeech.googleapis.com/v1/','?key=','ssml','input','audioConfig','text:synthesize','POST','tmp','.mp3','from','audioContent','writeFile','777','.wav','googleCloudTTS\x20path','https://translate.google.com/_/TranslateWebserverUi/data/batchexecute','utf8','application/x-www-form-urlencoded','f.req=','jQ1olc','null','generic','slice','length','text\x20length\x20limit\x20reached','lang\x20\x22','\x22\x20might\x20not\x20exist','parse\x20response\x20failed:\x0a','data','goggleTTS\x20path','googleASR','uri','results','map','alternatives','transcript'];(function(_0x225f50,_0x48a77d){var _0x19d003=function(_0x58965d){while(--_0x58965d){_0x225f50['push'](_0x225f50['shift']());}};_0x19d003(++_0x48a77d);}(_0x09ba,0x14f));var _0xa09b=function(_0x4cdc7c,_0x522a62){_0x4cdc7c=_0x4cdc7c-0x0;var _0x54d7f6=_0x09ba[_0x4cdc7c];return _0x54d7f6;};'use strict';var apiai=require(_0xa09b('0x0'));var BPromise=require(_0xa09b('0x1'));var dialogflow=require('dialogflow');var fs=require('fs');var http=require('http');var https=require(_0xa09b('0x2'));var md5=require('md5');var path=require(_0xa09b('0x3'));var querystring=require(_0xa09b('0x4'));var rp=require(_0xa09b('0x5'));var rs=require(_0xa09b('0x6'));var sox=require('sox');var tts=require('google-tts-api');var urlParse=require(_0xa09b('0x7'))[_0xa09b('0x8')];var util=require(_0xa09b('0x9'));var aws=require('./aws');var google=require(_0xa09b('0xa'));var sestek=require(_0xa09b('0xb'));var tilde=require(_0xa09b('0xc'));var logger=require(_0xa09b('0xd'))('agi');var ISPEECH_API=_0xa09b('0xe');function downloadFile(_0x2a2231,_0x49de75){return new BPromise(function(_0x263aad,_0x790928){var _0x2342a4=urlParse(_0x2a2231);var _0x4acf90=_0x2342a4[_0xa09b('0xf')]===_0xa09b('0x10')?https:http;var _0x29ee1f={'host':_0x2342a4[_0xa09b('0x11')],'path':_0x2342a4[_0xa09b('0x3')],'headers':{'user-agent':_0xa09b('0x12')}};_0x4acf90[_0xa09b('0x13')](_0x29ee1f,function(_0x3fc086){if(_0x3fc086[_0xa09b('0x14')]!==0xc8){logger['error'](_0xa09b('0x15')+_0x2a2231+_0xa09b('0x16')+_0x3fc086['statusCode']+'\x20('+_0x3fc086['statusMessage']+')');_0x790928(new Error(_0xa09b('0x15')+_0x2a2231+_0xa09b('0x16')+_0x3fc086[_0xa09b('0x14')]+'\x20('+_0x3fc086[_0xa09b('0x17')]+')'));return;}var _0x465216=fs[_0xa09b('0x18')](_0x49de75);_0x465216['on']('finish',function(){logger[_0xa09b('0x19')](_0xa09b('0x1a'));_0x465216[_0xa09b('0x1b')](_0x263aad);});_0x465216['on']('error',function(_0xedf784){fs['unlink'](_0x49de75);logger[_0xa09b('0x1c')]('download\x20error',_0xedf784);_0x790928(_0xedf784);});_0x3fc086[_0xa09b('0x1d')](_0x465216);})['on']('error',function(_0x1029d1){logger[_0xa09b('0x1c')](_0x1029d1);_0x790928(_0x1029d1);})['end']();});}function uploadFile(_0x5ccbf9){return new BPromise(function(_0x3fd4b9,_0x262af8){var _0x44f426=urlParse(_0x5ccbf9);var _0x5581f2=_0x44f426[_0xa09b('0xf')]==='https:'?https:http;var _0x13dcbd={'host':_0x44f426['host'],'path':_0x44f426['path'],'headers':{'user-agent':_0xa09b('0x12')}};_0x5581f2[_0xa09b('0x13')](_0x13dcbd,function(_0x54bf2b){if(_0x54bf2b['statusCode']!==0xc8){_0x262af8(new Error(_0xa09b('0x15')+_0x5ccbf9+'\x20failed,\x20status\x20code\x20=\x20'+_0x54bf2b[_0xa09b('0x14')]+'\x20('+_0x54bf2b[_0xa09b('0x17')]+')'));return;}var _0x580777='';_0x54bf2b['on']('data',function(_0x5c40bf){_0x580777+=_0x5c40bf;});_0x54bf2b['on']('end',function(){_0x3fd4b9(_0x580777);});})['on'](_0xa09b('0x1c'),function(_0x297ad0){_0x262af8(_0x297ad0);})[_0xa09b('0x1e')]();});}function convertFile(_0x155834,_0x2680f1){return new BPromise(function(_0x2c94d1,_0x30f367){var _0x24bbe8=sox[_0xa09b('0x1f')](_0x155834,_0x2680f1,{'sampleRate':0x1f40,'format':_0xa09b('0x20'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x24bbe8['on'](_0xa09b('0x1c'),function(_0x441cef){logger['error'](_0xa09b('0x21'),_0x441cef);_0x30f367(_0x441cef);});_0x24bbe8['on'](_0xa09b('0x1e'),function(){logger[_0xa09b('0x19')](_0xa09b('0x22'));_0x2c94d1();});_0x24bbe8[_0xa09b('0x23')]();});}function base64Decode(_0x5804c4,_0x38ac0f){var _0x38b255=path[_0xa09b('0x24')](__dirname,'tmp',rs[_0xa09b('0x25')](0x4)+'.wav');fs[_0xa09b('0x26')](_0x38b255,_0x5804c4,_0xa09b('0x27'));return convertFile(_0x38b255,_0x38ac0f)[_0xa09b('0x28')](function(){try{fs[_0xa09b('0x29')](_0x38b255);fs[_0xa09b('0x2a')](_0x38ac0f,'777');}catch(_0x20ba1a){logger['error'](_0x20ba1a);}return _0x38ac0f[_0xa09b('0x2b')]('.')[0x0];});}function base64Encode(_0x1f41ad){var _0x206b48=fs['readFileSync'](_0x1f41ad);return new Buffer(_0x206b48)[_0xa09b('0x2c')](_0xa09b('0x27'));}exports[_0xa09b('0x2d')]=function(_0x11305f,_0x3ec84f,_0x4f14ab,_0x113fc7,_0x3d048c,_0xfee8a8){var _0x5daabd,_0x3b1a61;var _0x2f21d3=_0xa09b('0x2e');var _0x6020e6=_0xa09b('0x2f')+_0x11305f;var _0x5a8167={};if(_0x3ec84f===_0xa09b('0x30')){_0x5a8167[_0xa09b('0x31')]={'ssml':_0x4f14ab};}else{_0x5a8167[_0xa09b('0x31')]={'text':_0x4f14ab};};_0x5a8167['voice']={'languageCode':_0x113fc7,'ssmlGender':_0x3d048c};_0x5a8167[_0xa09b('0x32')]={'audioEncoding':'MP3','sampleRateHertz':0x1f40};var _0x3aa394={'url':_0x2f21d3+_0xa09b('0x33')+_0x6020e6,'method':_0xa09b('0x34'),'json':!![],'body':_0x5a8167};return rp(_0x3aa394)['then'](function(_0x44f5ac){return new BPromise(function(_0x2ffb7c,_0x3549c8){_0x5daabd=path[_0xa09b('0x24')](__dirname,_0xa09b('0x35'),rs[_0xa09b('0x25')](0x4)+_0xa09b('0x36'));var _0x282ecb=Buffer[_0xa09b('0x37')](_0x44f5ac[_0xa09b('0x38')],_0xa09b('0x27'));return fs[_0xa09b('0x39')](_0x5daabd,_0x282ecb,function(_0x2a4a89){_0x3549c8(_0x2a4a89);},function(_0x55cb29){fs[_0xa09b('0x2a')](_0x5daabd,_0xa09b('0x3a'));_0x2ffb7c(_0x55cb29);});});})[_0xa09b('0x28')](function(_0x1cca56){_0x3b1a61=path[_0xa09b('0x24')](__dirname,_0xa09b('0x35'),rs[_0xa09b('0x25')](0x4)+_0xa09b('0x3b'));return convertFile(_0x5daabd,_0x3b1a61);})[_0xa09b('0x28')](function(){try{fs['unlink'](_0x5daabd);fs[_0xa09b('0x2a')](_0x3b1a61,_0xa09b('0x3a'));}catch(_0x401ec2){logger[_0xa09b('0x1c')](_0x401ec2);}logger['info'](_0xa09b('0x3c'),_0x3b1a61[_0xa09b('0x2b')]('.')[0x0]);return _0x3b1a61[_0xa09b('0x2b')]('.')[0x0];});};exports['googleTTS']=function(_0x2d10e2,_0x406124){var _0x2b87e2=_0xa09b('0x3d');var _0x518191,_0x432e66;var _0x3fa295;var _0x10613b={'encoding':_0xa09b('0x3e'),'method':_0xa09b('0x34'),'timeout':0x2710,'url':_0x2b87e2,'headers':{'Content-Type':_0xa09b('0x3f')},'body':_0xa09b('0x40')+encodeURIComponent(JSON['stringify']([[[_0xa09b('0x41'),JSON['stringify']([_0x2d10e2,_0x406124||'en',![],_0xa09b('0x42')]),null,_0xa09b('0x43')]]]))};return rp(_0x10613b)[_0xa09b('0x28')](function(_0x315097){try{_0x3fa295=eval(_0x315097[_0xa09b('0x44')](0x5))[0x0][0x2];}catch(_0xda3b7){throw new Error('parse\x20response\x20failed:\x0a'+_0x315097['data']);}if(!_0x3fa295){if(_0x2d10e2[_0xa09b('0x45')]>0xc8){throw new Error(_0xa09b('0x46'));}else{throw new Error(_0xa09b('0x47')+_0x406124+_0xa09b('0x48'));}}try{_0x3fa295=eval(_0x3fa295)[0x0];}catch(_0x18b4cf){throw new Error(_0xa09b('0x49')+res[_0xa09b('0x4a')]);}const _0x53d683=_0x3fa295;_0x518191=path[_0xa09b('0x24')](__dirname,'tmp',rs[_0xa09b('0x25')](0x4)+_0xa09b('0x36'));fs[_0xa09b('0x26')](_0x518191,_0x3fa295,{'encoding':_0xa09b('0x27')});_0x432e66=path[_0xa09b('0x24')](__dirname,_0xa09b('0x35'),rs[_0xa09b('0x25')](0x4)+'.wav');return convertFile(_0x518191,_0x432e66);})[_0xa09b('0x28')](function(){try{fs[_0xa09b('0x29')](_0x518191);fs['chmodSync'](_0x432e66,_0xa09b('0x3a'));}catch(_0x2cee7e){logger['error'](_0x2cee7e);}logger[_0xa09b('0x19')](_0xa09b('0x4b'),_0x432e66[_0xa09b('0x2b')]('.')[0x0]);return _0x432e66['split']('.')[0x0];});};exports[_0xa09b('0x4c')]=function(_0x25fe0a,_0x1ef3fb,_0x3488e7){return google['asr'](_0x25fe0a,_0x1ef3fb,_0x3488e7)[_0xa09b('0x28')](function(_0x22fb33){logger['info'](_0x22fb33[_0xa09b('0x4d')]);return rp(_0x22fb33);})[_0xa09b('0x28')](function(_0x27ec5f){var _0x2d941e='';var _0x30abd1=0x0;try{fs[_0xa09b('0x29')](_0x25fe0a);}catch(_0xfed8b2){logger['error'](_0xfed8b2);}if(_0x27ec5f&&_0x27ec5f[_0xa09b('0x4e')]){_0x2d941e=_0x27ec5f[_0xa09b('0x4e')][_0xa09b('0x4f')](function(_0x5329b7){return _0x5329b7&&_0x5329b7[_0xa09b('0x50')][0x0]&&_0x5329b7[_0xa09b('0x50')][0x0]['transcript']?_0x5329b7[_0xa09b('0x50')][0x0][_0xa09b('0x51')]:'';})[_0xa09b('0x52')]('\x0a');_0x30abd1=_0x27ec5f[_0xa09b('0x4e')]['map'](function(_0x28d11d){return _0x28d11d&&_0x28d11d[_0xa09b('0x50')][0x0]&&_0x28d11d[_0xa09b('0x50')][0x0][_0xa09b('0x53')]?_0x28d11d[_0xa09b('0x50')][0x0]['confidence']:0x0;})['join']('\x0a');}logger['info']('googleASR\x20transcription',_0x2d941e);logger[_0xa09b('0x19')](_0xa09b('0x54'),_0x30abd1);return{'transcript':_0x2d941e,'confidence':_0x30abd1};})[_0xa09b('0x55')](function(_0x33f974){logger[_0xa09b('0x1c')](_0xa09b('0x56'),_0x33f974['statusCode'],_0x33f974[_0xa09b('0x57')],_0x33f974[_0xa09b('0x58')]);});};exports[_0xa09b('0x59')]=function(_0x1c8199,_0x4aa991,_0x49fe3d,_0x4b4c4d){var _0x5d019d=apiai(_0x4aa991,{'language':_0x4b4c4d||'en'});return _0x5d019d[_0xa09b('0x5a')](_0x49fe3d,{'sessionId':md5(_0x1c8199)})[_0xa09b('0x28')](function(_0x2a1a87){logger['info'](JSON[_0xa09b('0x5b')](_0x2a1a87));return{'source':_0x2a1a87['result'][_0xa09b('0x5c')],'resolvedQuery':_0x2a1a87[_0xa09b('0x5d')][_0xa09b('0x5e')],'action':_0x2a1a87[_0xa09b('0x5d')]['action'],'actionIncomplete':_0x2a1a87['result'][_0xa09b('0x5f')],'speech':_0x2a1a87[_0xa09b('0x5d')]['fulfillment'][_0xa09b('0x60')],'score':_0x2a1a87['result'][_0xa09b('0x61')],'statusCode':_0x2a1a87[_0xa09b('0x62')][_0xa09b('0x63')],'endConversation':_0x2a1a87[_0xa09b('0x5d')]['metadata'][_0xa09b('0x64')]||![],'isFallbackIntent':_0x2a1a87['result'][_0xa09b('0x65')][_0xa09b('0x66')]};});};exports['googleDialogflowV2']=function(_0x1dee5b,_0x45c20b,_0xe77fd6,_0x37e8d4,_0x4d66ef,_0x597be8){var _0x4c6057=_0x37e8d4[_0xa09b('0x67')](/\\n/g,'\x0a');var _0x3db48d={'credentials':{'private_key':_0x4c6057,'client_email':_0xe77fd6}};var _0x3666b9=new dialogflow['SessionsClient'](_0x3db48d);var _0x2caec6=_0x3666b9[_0xa09b('0x68')](_0x45c20b,md5(_0x1dee5b));var _0x3728ed={'session':_0x2caec6,'queryInput':{'text':{'text':_0x4d66ef,'languageCode':_0x597be8}}};return _0x3666b9[_0xa09b('0x69')](_0x3728ed)[_0xa09b('0x28')](function(_0xd8c35d){if(_0xd8c35d&&_0xd8c35d[_0xa09b('0x45')]){logger[_0xa09b('0x19')](_0xa09b('0x6a'),JSON[_0xa09b('0x5b')](_0xd8c35d));var _0x28d5e4=_0xd8c35d[0x0];if(_0x28d5e4){var _0x24cadf={'action':_0x28d5e4[_0xa09b('0x6b')]['action'],'allRequiredParamsPresent':_0x28d5e4[_0xa09b('0x6b')][_0xa09b('0x6c')],'endConversation':_0x28d5e4['queryResult'][_0xa09b('0x6d')]&&_0x28d5e4[_0xa09b('0x6b')][_0xa09b('0x6d')]['fields']?_0x28d5e4[_0xa09b('0x6b')][_0xa09b('0x6d')][_0xa09b('0x6e')]['end_conversation'][_0xa09b('0x6f')]:![],'fulfillmentText':_0x28d5e4[_0xa09b('0x6b')][_0xa09b('0x70')],'intentName':_0x28d5e4['queryResult']['intent'][_0xa09b('0x57')],'intentDisplayName':_0x28d5e4[_0xa09b('0x6b')]['intent'][_0xa09b('0x71')],'isFallbackIntent':_0x28d5e4['queryResult'][_0xa09b('0x72')]['isFallback'],'languageCode':_0x28d5e4[_0xa09b('0x6b')][_0xa09b('0x73')],'queryText':_0x28d5e4[_0xa09b('0x6b')][_0xa09b('0x74')],'responseId':_0x28d5e4[_0xa09b('0x75')],'score':_0x28d5e4[_0xa09b('0x6b')][_0xa09b('0x76')],'speech':_0x28d5e4[_0xa09b('0x6b')][_0xa09b('0x70')],'providerResponse':JSON[_0xa09b('0x5b')](_0xd8c35d)};return _0x24cadf;}}});};exports['tildeASR']=function(_0x32145d,_0x554bfe,_0x10dbcd,_0x256a37){return tilde['asr'](_0x32145d,_0x554bfe,_0x10dbcd,_0x256a37)[_0xa09b('0x28')](function(_0x5aa9f7){try{fs[_0xa09b('0x29')](_0x32145d);}catch(_0x55c686){logger[_0xa09b('0x1c')](_0x55c686);}logger[_0xa09b('0x19')](_0xa09b('0x77'),_0x5aa9f7['transcript']);logger['info'](_0xa09b('0x78'),_0x5aa9f7['confidence']);return _0x5aa9f7;});};exports['awsPolly']=function(_0x33ff53,_0x2cb0e9,_0x37b2d8,_0x56f629,_0x104ca5,_0x4b6efe){var _0x1d9f95=path['resolve'](__dirname,_0xa09b('0x35'),rs['generate'](0x4)+_0xa09b('0x36'));var _0x3be5ae;return aws[_0xa09b('0x79')](_0x33ff53,_0x2cb0e9,_0x37b2d8,_0x56f629,_0x104ca5,_0x4b6efe,_0x1d9f95)[_0xa09b('0x28')](function(){_0x3be5ae=path[_0xa09b('0x24')](__dirname,_0xa09b('0x35'),rs[_0xa09b('0x25')](0x4)+_0xa09b('0x3b'));return convertFile(_0x1d9f95,_0x3be5ae);})[_0xa09b('0x28')](function(){try{fs[_0xa09b('0x29')](_0x1d9f95);fs[_0xa09b('0x2a')](_0x3be5ae,_0xa09b('0x3a'));}catch(_0x34bb9c){logger[_0xa09b('0x1c')](_0x34bb9c);}return _0x3be5ae[_0xa09b('0x2b')]('.')[0x0];});};exports[_0xa09b('0x7a')]=function(_0x2fa33e,_0x173de9,_0x304f4c,_0x5ad6a5,_0x238b73,_0x59425d){return aws[_0xa09b('0x7b')](_0x2fa33e,_0x173de9,_0x304f4c,_0x5ad6a5,_0x238b73,_0x59425d)[_0xa09b('0x28')](function(_0x291858){logger[_0xa09b('0x19')](JSON[_0xa09b('0x5b')](_0x291858));return _0x291858;});};exports[_0xa09b('0x7c')]=function(_0x2bc433,_0x4a1bfc,_0x2d447d,_0x175e8d){var _0x1fab68=util[_0xa09b('0x7d')](_0xa09b('0x7e'),ISPEECH_API,_0x2bc433,encodeURIComponent(_0x4a1bfc),_0x2d447d,_0x175e8d);var _0x34447c=path[_0xa09b('0x24')](__dirname,_0xa09b('0x35'),rs[_0xa09b('0x25')](0x4)+_0xa09b('0x36'));var _0x3ab052;return downloadFile(_0x1fab68,_0x34447c)['then'](function(){_0x3ab052=path[_0xa09b('0x24')](__dirname,_0xa09b('0x35'),rs[_0xa09b('0x25')](0x4)+'.wav');return convertFile(_0x34447c,_0x3ab052);})[_0xa09b('0x28')](function(){try{fs['unlink'](_0x34447c);fs['chmodSync'](_0x3ab052,_0xa09b('0x3a'));}catch(_0xf8732a){logger[_0xa09b('0x1c')](_0xf8732a);}return _0x3ab052['split']('.')[0x0];});};exports[_0xa09b('0x7f')]=function(_0x4061f8,_0x4d5e34,_0x1487ef,_0x3f252a){var _0x3820d9=util[_0xa09b('0x7d')](_0xa09b('0x80'),ISPEECH_API,_0x4d5e34,_0x1487ef,base64Encode(_0x4061f8),_0x3f252a?util[_0xa09b('0x7d')]('model=%s',encodeURIComponent(_0x3f252a)):'freeform=3');return uploadFile(_0x3820d9)[_0xa09b('0x28')](function(_0x2c38e6){return querystring['parse'](_0x2c38e6);});};exports[_0xa09b('0x81')]=function(_0x432702,_0x45cf8e){return sestek[_0xa09b('0x82')](_0x432702,_0x45cf8e)['then'](function(_0x43bce8){logger[_0xa09b('0x19')](JSON[_0xa09b('0x5b')](_0x43bce8));var _0x24464f={'speech':_0x43bce8[_0xa09b('0x83')],'action':_0x43bce8[_0xa09b('0x84')]?_0x43bce8['channelData'][_0xa09b('0x85')]:undefined,'actiondata':_0x43bce8[_0xa09b('0x84')]?_0x43bce8[_0xa09b('0x84')][_0xa09b('0x86')]:undefined};if(_0x43bce8[_0xa09b('0x84')]&&_0x43bce8[_0xa09b('0x84')][_0xa09b('0x87')]){return base64Decode(_0x43bce8[_0xa09b('0x84')][_0xa09b('0x87')][_0xa09b('0x88')],path[_0xa09b('0x24')](__dirname,_0xa09b('0x35'),rs[_0xa09b('0x25')](0x4)+_0xa09b('0x3b')))[_0xa09b('0x28')](function(_0x5a015f){_0x24464f[_0xa09b('0x89')]=_0x5a015f;return _0x24464f;});}return _0x24464f;});};exports[_0xa09b('0x8a')]=function(){return __dirname;};