heimdall-api-platform 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clients/http-client.js +1 -0
- package/dist/commons-cache.js +1 -0
- package/dist/commons-const.js +1 -0
- package/dist/commons-elasticsearch.js +1 -0
- package/dist/commons-errors.js +1 -0
- package/dist/commons-opensearch.js +1 -0
- package/dist/commons-splunk.js +1 -0
- package/dist/commons-util.js +1 -0
- package/dist/default-routes-docs.js +1 -0
- package/dist/default-routes-pos.js +1 -0
- package/dist/default-routes-pre.js +1 -0
- package/dist/environment.js +1 -0
- package/dist/factory/api-gateway.js +1 -0
- package/dist/factory/client-factory.js +1 -0
- package/dist/factory/function-factory.js +1 -0
- package/dist/factory/operation-flow-factory.js +1 -0
- package/dist/factory/server-factory.js +1 -0
- package/dist/factory/transformation-function-factory.js +1 -0
- package/dist/handle-route.js +1 -0
- package/dist/index.js +2 -0
- package/dist/jwt-util.js +1 -0
- package/dist/license/license-service.js +1 -0
- package/dist/models/base-context.js +1 -0
- package/dist/models/elastic-index-data.js +1 -0
- package/dist/models/flow-context.js +1 -0
- package/dist/models/flow-indexed.js +1 -0
- package/dist/models/operation-function-indexed.js +1 -0
- package/dist/models/operation-function-transformation-indexed.js +1 -0
- package/dist/models/operation-http-indexed.js +1 -0
- package/dist/models/operation-mock-indexed.js +1 -0
- package/dist/models/route-context.js +1 -0
- package/dist/models/security-route.js +1 -0
- package/dist/models/service-context.js +1 -0
- package/dist/models/service-group.js +1 -0
- package/dist/models/service-route.js +1 -0
- package/dist/models/splunk-data.js +1 -0
- package/dist/operations/abstract-operation.js +1 -0
- package/dist/operations/function.js +1 -0
- package/dist/operations/http.js +1 -0
- package/dist/operations/mock.js +1 -0
- package/dist/operations/monitor-check.js +1 -0
- package/dist/orchestration-flow.js +1 -0
- package/dist/router.js +1 -0
- package/dist/security-validation.js +1 -0
- package/dist/services/server.js +1 -0
- package/dist/services/template-monitorcheck-route.js +1 -0
- package/package.json +5 -5
- package/lib/clients/http-client.js +0 -296
- package/lib/commons-cache.js +0 -185
- package/lib/commons-const.js +0 -203
- package/lib/commons-elasticsearch.js +0 -49
- package/lib/commons-errors.js +0 -278
- package/lib/commons-opensearch.js +0 -37
- package/lib/commons-splunk.js +0 -105
- package/lib/commons-util.js +0 -669
- package/lib/default-routes-docs.js +0 -141
- package/lib/default-routes-pos.js +0 -111
- package/lib/default-routes-pre.js +0 -151
- package/lib/environment.js +0 -81
- package/lib/factory/api-gateway.js +0 -12
- package/lib/factory/client-factory.js +0 -41
- package/lib/factory/function-factory.js +0 -40
- package/lib/factory/operation-flow-factory.js +0 -64
- package/lib/factory/server-factory.js +0 -15
- package/lib/factory/transformation-function-factory.js +0 -47
- package/lib/handle-route.js +0 -472
- package/lib/index.js +0 -50
- package/lib/jwt-util.js +0 -38
- package/lib/license/license-service.js +0 -27
- package/lib/models/base-context.js +0 -77
- package/lib/models/elastic-index-data.js +0 -76
- package/lib/models/flow-context.js +0 -58
- package/lib/models/flow-indexed.js +0 -62
- package/lib/models/operation-function-indexed.js +0 -22
- package/lib/models/operation-function-transformation-indexed.js +0 -23
- package/lib/models/operation-http-indexed.js +0 -38
- package/lib/models/operation-mock-indexed.js +0 -22
- package/lib/models/route-context.js +0 -69
- package/lib/models/security-route.js +0 -41
- package/lib/models/service-context.js +0 -65
- package/lib/models/service-group.js +0 -15
- package/lib/models/service-route.js +0 -23
- package/lib/models/splunk-data.js +0 -70
- package/lib/operations/abstract-operation.js +0 -73
- package/lib/operations/function.js +0 -143
- package/lib/operations/http.js +0 -286
- package/lib/operations/mock.js +0 -34
- package/lib/operations/monitor-check.js +0 -151
- package/lib/orchestration-flow.js +0 -323
- package/lib/public/redoc.html +0 -152
- package/lib/public/swagger.html +0 -143
- package/lib/router.js +0 -29
- package/lib/security-validation.js +0 -46
- package/lib/services/server.js +0 -211
- package/lib/services/template-monitorcheck-route.js +0 -61
package/dist/router.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
'use strict';const _0x559c8d=_0x5f1d;(function(_0x8fe460,_0x56e154){const _0x524eef=_0x5f1d,_0x4c93e6=_0x8fe460();while(!![]){try{const _0x103b1f=parseInt(_0x524eef(0x121))/0x1+-parseInt(_0x524eef(0x126))/0x2*(-parseInt(_0x524eef(0x12c))/0x3)+parseInt(_0x524eef(0x122))/0x4*(parseInt(_0x524eef(0x12d))/0x5)+parseInt(_0x524eef(0x12e))/0x6+parseInt(_0x524eef(0x132))/0x7+-parseInt(_0x524eef(0x12f))/0x8+-parseInt(_0x524eef(0x130))/0x9;if(_0x103b1f===_0x56e154)break;else _0x4c93e6['push'](_0x4c93e6['shift']());}catch(_0x221b03){_0x4c93e6['push'](_0x4c93e6['shift']());}}}(_0x5d06,0x82e2c));function _0x5f1d(_0xd7915,_0x8a5059){const _0x5d062b=_0x5d06();return _0x5f1d=function(_0x5f1dd1,_0x41a10d){_0x5f1dd1=_0x5f1dd1-0x11f;let _0x10d0ca=_0x5d062b[_0x5f1dd1];if(_0x5f1d['szhBOo']===undefined){var _0x388cce=function(_0x1453b5){const _0x1c09cc='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x493c18='',_0x12cfa4='';for(let _0x3e402f=0x0,_0x5e81ae,_0x475f9d,_0x2e455e=0x0;_0x475f9d=_0x1453b5['charAt'](_0x2e455e++);~_0x475f9d&&(_0x5e81ae=_0x3e402f%0x4?_0x5e81ae*0x40+_0x475f9d:_0x475f9d,_0x3e402f++%0x4)?_0x493c18+=String['fromCharCode'](0xff&_0x5e81ae>>(-0x2*_0x3e402f&0x6)):0x0){_0x475f9d=_0x1c09cc['indexOf'](_0x475f9d);}for(let _0x27eebb=0x0,_0x445d1a=_0x493c18['length'];_0x27eebb<_0x445d1a;_0x27eebb++){_0x12cfa4+='%'+('00'+_0x493c18['charCodeAt'](_0x27eebb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x12cfa4);};_0x5f1d['PMgEhi']=_0x388cce,_0xd7915=arguments,_0x5f1d['szhBOo']=!![];}const _0x5b0433=_0x5d062b[0x0],_0x4008d1=_0x5f1dd1+_0x5b0433,_0x1ac8a4=_0xd7915[_0x4008d1];return!_0x1ac8a4?(_0x10d0ca=_0x5f1d['PMgEhi'](_0x10d0ca),_0xd7915[_0x4008d1]=_0x10d0ca):_0x10d0ca=_0x1ac8a4,_0x10d0ca;},_0x5f1d(_0xd7915,_0x8a5059);}function _0x5d06(){const _0x50461a=['oduXntm4s0Dtz25O','mJK0mJi0ogPKrKDNvW','ote4nJqWoeLhyuXPqG','ChvZAa','nJG4oti5nxrfsKLrBq','ywrKuM91Dgu','DxbSB2fKrMLLBgroyw1L','ndi4ntGYDevktfvA','ngXYt2zgDW','DxbSB2fK','D0zHugy','BxvSDgvY','mJu2nZm0BNfhs3Pt','zxHWB3j0CW','BwvTB3j5u3rVCMfNzq','zw5HyMXLvxbSB2fKzxi','zMLSzq','C2LUz2XL','nNj4thjYDG','nty1odG1qLr1DgPL'];_0x5d06=function(){return _0x50461a;};return _0x5d06();}const multer=require(_0x559c8d(0x125));class Router{constructor(_0x39fb6b){const _0x2a21c3=_0x559c8d,_0xd24b86={'jFBkY':function(_0x25ce67,_0x206bc3){return _0x25ce67(_0x206bc3);}};this['app']=_0x39fb6b;const _0x4c4709=multer[_0x2a21c3(0x128)]();this['upload']=_0xd24b86['jFBkY'](multer,{'storage':_0x4c4709});}[_0x559c8d(0x11f)](_0x507ba9,_0x13989f){const _0x9b7fba=_0x559c8d,_0x2ccaee={'wFaPf':_0x9b7fba(0x12a)},_0x27f6d4=[];_0x507ba9[_0x9b7fba(0x129)]&&_0x27f6d4[_0x9b7fba(0x131)](this[_0x9b7fba(0x123)][_0x9b7fba(0x12b)](_0x507ba9[_0x9b7fba(0x120)]||_0x2ccaee[_0x9b7fba(0x124)])),_0x27f6d4[_0x9b7fba(0x131)]((_0x40ea80,_0x37f1ac,_0x4d9d91)=>{_0x13989f['handleRequest'](_0x40ea80,_0x37f1ac,_0x4d9d91);}),this['app'][_0x507ba9['getMethod']()](_0x507ba9['getPath'](),_0x27f6d4);}}module[_0x559c8d(0x127)]=Router;
|
@@ -0,0 +1 @@
|
|
1
|
+
'use strict';var _0x5bf3e5=_0x1715;(function(_0x47aff6,_0x5a8635){var _0x1ce9a8=_0x1715,_0x224871=_0x47aff6();while(!![]){try{var _0x2115cb=-parseInt(_0x1ce9a8(0x1f1))/0x1*(parseInt(_0x1ce9a8(0x209))/0x2)+parseInt(_0x1ce9a8(0x203))/0x3*(parseInt(_0x1ce9a8(0x1e7))/0x4)+-parseInt(_0x1ce9a8(0x1f5))/0x5+parseInt(_0x1ce9a8(0x1e4))/0x6*(parseInt(_0x1ce9a8(0x1fa))/0x7)+-parseInt(_0x1ce9a8(0x1f9))/0x8*(parseInt(_0x1ce9a8(0x204))/0x9)+-parseInt(_0x1ce9a8(0x1fc))/0xa+parseInt(_0x1ce9a8(0x1e5))/0xb;if(_0x2115cb===_0x5a8635)break;else _0x224871['push'](_0x224871['shift']());}catch(_0x37f9d4){_0x224871['push'](_0x224871['shift']());}}}(_0x83e3,0xa2934));function _0x83e3(){var _0x2bff78=['mtu1nJqWnZzdB2zusMS','DMfSAwrHDgvby2nLC3nuB2TLBG','ngjlwfjisW','C2v0qwnJzxnZvg9Rzw4','sfLJDvm','sennsfi','zgv2AwnLre5b','r1DHrNq','BhLKCxa','C2v0rgv2AwnLre5b','BNzKvuK','C2v0rgv2AwnLuhvIBgLJs2v5rgLZz2vZDa','mtKYn1D4zgrICG','AgvHzgvYCW','zgv2AwnLuhvIBgLJs2v5rgLZz2vZDa','reXftMu','mZG0mJu5meDND3PKtq','C2vYDMLJzq','AMDZv3G','ywnJzxnZvg9Rzw4','ndK5otuXmLv0z0POuq','ndy3nK1YB0zbDa','lI9QD3qTDxrPBa','nJiWnJiWzgvXyMv6','vLD2Ehi','zxHWB3j0CW','DxvPza','C2v0q3vZDg9TzxjvvuLe','v0nSvxO','vuHNsgC','mZK2mti2m3jTDMrPta','mtH1sKzkAKK','AKjws2y','ufnbsNe','twXIvei','C2vJDxjPDhK','mte1nfH2ueviyG','BKTbrhm','tw1ODeu','sfbnAK0','mtaWodzqDejwyMC'];_0x83e3=function(){return _0x2bff78;};return _0x83e3();}var Step=require('step'),jwtUtil=require(_0x5bf3e5(0x1fb)),securityValidation=(function(){var _0x2a49b6=_0x5bf3e5,_0x2ee9a5={'MlbTB':function(_0x2288a0,_0x2b410d){return _0x2288a0(_0x2b410d);},'WClUz':'x-access-token','atiyX':function(_0x160813,_0x2d4a95,_0x53d1a3){return _0x160813(_0x2d4a95,_0x53d1a3);},'nvdUI':function(_0x1521fe,_0x45fc6c,_0x4b4ea0){return _0x1521fe(_0x45fc6c,_0x4b4ea0);},'TsmTN':function(_0x5e0989,_0x3fa4a5){return _0x5e0989===_0x3fa4a5;},'jBVKf':_0x2a49b6(0x1e1),'UHgHg':'nnQZO','lydqp':_0x2a49b6(0x1ea),'VWvxr':function(_0x133e10,_0x4d6937){return _0x133e10!==_0x4d6937;},'DLENe':_0x2a49b6(0x1e9)};function _0x2344be(_0xc07685,_0x5d5f47){var _0x4c0296=_0x2a49b6,_0x59a38b={'GWaFt':function(_0x2477f5,_0x519853){var _0x4e1db1=_0x1715;return _0x2ee9a5[_0x4e1db1(0x207)](_0x2477f5,_0x519853);},'HCQiL':_0x2ee9a5[_0x4c0296(0x201)],'HPMjM':function(_0x52ea91,_0x726cfb,_0xba7d16){return _0x2ee9a5['atiyX'](_0x52ea91,_0x726cfb,_0xba7d16);},'pokJt':function(_0x173641,_0x3a02c7,_0x1529d3){var _0x291b88=_0x4c0296;return _0x2ee9a5[_0x291b88(0x1ef)](_0x173641,_0x3a02c7,_0x1529d3);},'PSAJq':function(_0x3d9200,_0x3337c9){return _0x2ee9a5['TsmTN'](_0x3d9200,_0x3337c9);},'ddvkY':_0x2ee9a5[_0x4c0296(0x205)]};if(_0x2ee9a5['TsmTN'](_0x2ee9a5[_0x4c0296(0x202)],_0x2ee9a5[_0x4c0296(0x1ed)]))_0x9287fe[_0x4c0296(0x208)][_0x4c0296(0x200)](_0x119c6a[_0x4c0296(0x1ff)]),_0x258a86['security'][_0x4c0296(0x1ee)](_0x4df657['deviceDNA']),_0x42be83[_0x4c0296(0x208)][_0x4c0296(0x1f0)](_0x3d2b15[_0x4c0296(0x1f3)]),_0x3f3a7d[_0x4c0296(0x208)][_0x4c0296(0x1e8)](_0xd83478[_0x4c0296(0x1f8)]);else{if(_0xc07685[_0x4c0296(0x1f6)][_0x4c0296(0x208)]){if(_0x2ee9a5[_0x4c0296(0x1fd)](_0x2ee9a5[_0x4c0296(0x1f4)],_0x4c0296(0x1e9))){var _0x341b57={'jgsWx':function(_0x5c07ab,_0x3100e4){var _0x38fce5=_0x4c0296;return _0x59a38b[_0x38fce5(0x1ec)](_0x5c07ab,_0x3100e4);}},_0x41c8fe=_0x35b6b7[_0x4c0296(0x1f2)][_0x59a38b['HCQiL']];_0x59a38b[_0x4c0296(0x1e3)](_0x3b8f12,function(){var _0x4a79d7=_0x4c0296;_0x19e12f[_0x4a79d7(0x1e6)](_0x41c8fe,this);},function(_0x51c101,_0x2dd9ca){var _0x5221cf=_0x4c0296;return!_0x51c101&&_0x201967(_0x48ef0f,_0x2dd9ca),_0x341b57[_0x5221cf(0x1f7)](_0x178430,_0x51c101);});}else{var _0x11ff76=_0xc07685['headers'][_0x2ee9a5['WClUz']];Step(function(){var _0x127e64=_0x4c0296;jwtUtil[_0x127e64(0x1e6)](_0x11ff76,this);},function(_0x168b06,_0x26ed44){var _0x38625d=_0x4c0296,_0x338a83={'wXmYI':function(_0x36fee0,_0xa2bc8d,_0x2dd0b2){return _0x59a38b['pokJt'](_0x36fee0,_0xa2bc8d,_0x2dd0b2);}};return!_0x168b06&&(_0x59a38b[_0x38625d(0x206)](_0x59a38b['ddvkY'],_0x38625d(0x1e2))?_0x338a83['wXmYI'](_0x50ddc9,_0x397a6e,_0x391dcd):_0x59a38b['HPMjM'](_0x4e43e4,_0xc07685,_0x26ed44)),_0x59a38b[_0x38625d(0x1ec)](_0x5d5f47,_0x168b06);});}}else return _0x5d5f47();}}function _0x4e43e4(_0x1df7e5,_0x2f8251){var _0x2b1742=_0x2a49b6;_0x1df7e5[_0x2b1742(0x208)][_0x2b1742(0x200)](_0x2f8251['uuid']),_0x1df7e5[_0x2b1742(0x208)][_0x2b1742(0x1ee)](_0x2f8251[_0x2b1742(0x1eb)]),_0x1df7e5['security'][_0x2b1742(0x1f0)](_0x2f8251[_0x2b1742(0x1f3)]),_0x1df7e5[_0x2b1742(0x208)][_0x2b1742(0x1e8)](_0x2f8251[_0x2b1742(0x1f8)]);}return{'execute':_0x2344be};}());function _0x1715(_0x220842,_0x396093){var _0x83e389=_0x83e3();return _0x1715=function(_0x171561,_0x1fab0c){_0x171561=_0x171561-0x1e1;var _0x607609=_0x83e389[_0x171561];if(_0x1715['IOLWUV']===undefined){var _0x39380d=function(_0x5d089a){var _0x36c772='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x49e2e2='',_0x7d303c='';for(var _0x324534=0x0,_0x245998,_0x35b6b7,_0x3b8f12=0x0;_0x35b6b7=_0x5d089a['charAt'](_0x3b8f12++);~_0x35b6b7&&(_0x245998=_0x324534%0x4?_0x245998*0x40+_0x35b6b7:_0x35b6b7,_0x324534++%0x4)?_0x49e2e2+=String['fromCharCode'](0xff&_0x245998>>(-0x2*_0x324534&0x6)):0x0){_0x35b6b7=_0x36c772['indexOf'](_0x35b6b7);}for(var _0x55830e=0x0,_0x5b2183=_0x49e2e2['length'];_0x55830e<_0x5b2183;_0x55830e++){_0x7d303c+='%'+('00'+_0x49e2e2['charCodeAt'](_0x55830e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x7d303c);};_0x1715['skFFFi']=_0x39380d,_0x220842=arguments,_0x1715['IOLWUV']=!![];}var _0x4b52ee=_0x83e389[0x0],_0x36dcc4=_0x171561+_0x4b52ee,_0x50eb31=_0x220842[_0x36dcc4];return!_0x50eb31?(_0x607609=_0x1715['skFFFi'](_0x607609),_0x220842[_0x36dcc4]=_0x607609):_0x607609=_0x50eb31,_0x607609;},_0x1715(_0x220842,_0x396093);}module[_0x5bf3e5(0x1fe)]=securityValidation;
|
@@ -0,0 +1 @@
|
|
1
|
+
'use strict';const _0x865eac=_0x18a5;(function(_0x79e186,_0x3d3061){const _0x1ca140=_0x18a5,_0x5bad0c=_0x79e186();while(!![]){try{const _0x11a2c8=-parseInt(_0x1ca140(0x208))/0x1*(parseInt(_0x1ca140(0x220))/0x2)+-parseInt(_0x1ca140(0x1bf))/0x3*(-parseInt(_0x1ca140(0x20f))/0x4)+-parseInt(_0x1ca140(0x243))/0x5+-parseInt(_0x1ca140(0x256))/0x6*(-parseInt(_0x1ca140(0x1d8))/0x7)+-parseInt(_0x1ca140(0x20a))/0x8*(-parseInt(_0x1ca140(0x23c))/0x9)+parseInt(_0x1ca140(0x246))/0xa*(-parseInt(_0x1ca140(0x1fb))/0xb)+parseInt(_0x1ca140(0x216))/0xc;if(_0x11a2c8===_0x3d3061)break;else _0x5bad0c['push'](_0x5bad0c['shift']());}catch(_0x5384de){_0x5bad0c['push'](_0x5bad0c['shift']());}}}(_0x3385,0x6b9ca));function _0x18a5(_0x577291,_0x3c3ba0){const _0x338521=_0x3385();return _0x18a5=function(_0x18a5b8,_0x657989){_0x18a5b8=_0x18a5b8-0x1bc;let _0x142753=_0x338521[_0x18a5b8];if(_0x18a5['QpjKQX']===undefined){var _0x321317=function(_0x13680){const _0x5a9a12='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x17ea90='',_0x1d2c87='';for(let _0x5f1ddc=0x0,_0x33871e,_0x12a3d4,_0x5be333=0x0;_0x12a3d4=_0x13680['charAt'](_0x5be333++);~_0x12a3d4&&(_0x33871e=_0x5f1ddc%0x4?_0x33871e*0x40+_0x12a3d4:_0x12a3d4,_0x5f1ddc++%0x4)?_0x17ea90+=String['fromCharCode'](0xff&_0x33871e>>(-0x2*_0x5f1ddc&0x6)):0x0){_0x12a3d4=_0x5a9a12['indexOf'](_0x12a3d4);}for(let _0x15928f=0x0,_0x37de7a=_0x17ea90['length'];_0x15928f<_0x37de7a;_0x15928f++){_0x1d2c87+='%'+('00'+_0x17ea90['charCodeAt'](_0x15928f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1d2c87);};_0x18a5['hGScUt']=_0x321317,_0x577291=arguments,_0x18a5['QpjKQX']=!![];}const _0x311d83=_0x338521[0x0],_0x15a5a9=_0x18a5b8+_0x311d83,_0x4870f6=_0x577291[_0x15a5a9];return!_0x4870f6?(_0x142753=_0x18a5['hGScUt'](_0x142753),_0x577291[_0x15a5a9]=_0x142753):_0x142753=_0x4870f6,_0x142753;},_0x18a5(_0x577291,_0x3c3ba0);}const Util=require('../commons-util'),path=require(_0x865eac(0x254)),express=require(_0x865eac(0x1c9)),ServiceGroup=require(_0x865eac(0x20b)),Router=require(_0x865eac(0x1eb)),ServiceRoute=require(_0x865eac(0x1f0)),HandleRoute=require(_0x865eac(0x1f3)),OrchestrationFlow=require('../orchestration-flow'),commonsCache=require(_0x865eac(0x1ea)),commonsOpenSearch=require(_0x865eac(0x1be)),commonsSplunkInstance=require(_0x865eac(0x202)),ServiceContext=require(_0x865eac(0x228)),templateMonitorCheckRoute=require(_0x865eac(0x1f8)),_=require(_0x865eac(0x21b)),licenseService=require(_0x865eac(0x1ca));function _0x3385(){const _0x57c6bc=['Bg9Jrva','Cg9YDa','y3jLyxrLq2XPzw50','s2T6ve8','u2HQvwG','AgfzCNm','lI4VBw9KzwXZl3nLCNzPy2uTy29UDgv4Da','De5RCLq','w0HLAw1KywXSiefqssbqBgf0zM9YBv0GtgLJzw7dP2eGAw52W6fSAwrHig91igv4CgLYywrHihbHCMeGysbbufbFs0vzicC','cGOGrw52AxjVBM1LBNqG','BgvUz3rO','CvL0vxm','ihbHDgG9','z2j6rvm','q2PUufu','Aw5MBW','v0H3rxe','cGOGr3jVDxbZifnLCNzPy2vZoIa','C2vYDMvYug9YDa','cGOGrMXVD3m6ia','w0HLAw1KywXSiefqssbqBgf0zM9YBv0Gqvbqx0TfwsbUW6nVigrLzMLUAwrHlIa','kYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSGcGO','zxHWB3j0CW','CvLuBhu','zMXVDW','s2TgvK0','ow5XsK5uuq','C0jlB2G','zM9YrwfJAa','ChvZAa','Dg9vChbLCKnHC2u','cGOGsw5Py2LHBgL6yxrPB24GAw4G','CMvKAxndBgLLBNq','mZmWntq0nuzet1LOBG','wNvIs2q','BwfWCgLUz1nLCNzPy2vZ','mtbYA0D4CwW','yMfZzvbHDgG','yxbWBgLJyxrPB24','vfLwCMu','uwvQCfm','yLHxtuK','DMfSAwrHDgu','CM91Dgu','oxWWFdr8nNWXmhW3FdH8mxWYFdv8mW','Exfgywy','AuDtBwW','cGOGAhr0CdOVl2XVy2fSAg9ZDdO','zw52AxjVBM1LBNq','vwTUv3y','Cgf0Aa','r0z3rhO','ndaYwKrYzNvz','r0H5vgK','BNnZwMq','Aw5PDgLHBfrPBwu','cIaRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkYSRkW','lI4Vy29TBw9UCY1VCgvUC2vHCMnO','mJG4CMTgtMvb','l2HLywX0AgnOzwnRlW','lI4VzgvMyxvSDc1YB3v0zxmTzg9JCW','rw0Gy2fZBYbKzsbKW7P2AwrHCYWGzw50CMuGzw0Gy29UDgf0BYbJB20GBYbZDxbVCNrLihtdQwnUAwnVigrHieHLAw1KywXSiefqssbqBgf0zM9YBsaOudrgks4','Bwv0Ag9K','ig1ZiaOk','qvjQq20','CMvKDwnL','DLHhDvm','DMfSAwrHDgvgBg93qw5KrNvUy3rPB25Z','zxHWCMvZCW','lI4VBgLJzw5Zzs9SAwnLBNnLlxnLCNzPy2u','C2vJDxjPDhK','sfbAzfi','tKjtv1y','qsbHCgXPy2hdP8oJBYbUW6nVihbVzguGC2vYigLUAwnPywrHlIa','z2vUzxjHDgvnB25PDg9Yq2HLy2TsB3v0zxm','D1vVB0S','B3bLBLnLyxjJAa','q1LTu2i','mtb8mNW0Fdz8mxWZFdL8ohWWFdD8nq','C3rHz2u9Aw5PDcbTzxrOB2q9u2vYDMvYlNjLz2LZDgvYu2vYDMLJzvjVDxrLCYbZzxj2AwnLr3jVDxa','CMvNAxn0zxjtzxj2AwnLuM91DgvZ','s3fzrLO','se1mAwu','odK2odrjrgPktNe','vMfSAwrHDguGrMXVD3mGyw5KifnLCNzPy2vZ','sgP1qvC','y2T0AfK','BMfTzq','C3bSDw5Rsw5ZDgfUy2u','lI4VzgvMyxvSDc1YB3v0zxmTChjL','ywn0AxzL','uu5qC1y','C3rHCNrtzxj2zxi','DMfSAwrHDgvqyxrO','BgLZDfnLCNzPy2vhCM91Ca','C3rHz2u9Aw5MBYbTzxrOB2q9u2vYDMvYlNjLz2LZDgvYu2vYDMLJzvjVDxrLCYbYB3v0zsbTzxrOB2q9','A2v5CW','D2fYBMLUzW','tgvowNO','CufoExO','rLH4tgm','lI4Vy29TBw9UCY1JywnOzq','lI4VCM91DgvY','yxbW','CgTTENm','BgLJzw5ZzvzHBgLKyxrPB24','BLPSv3G','lI4VBw9KzwXZl3nLCNzPy2uTCM91Dgu','EKf1CLO','C1zmCMO','lI4VAgfUzgXLlxjVDxrL','vNjTrfa','yxbWtMfTzq','yu9mq2G','zgvZy3jPChrPB24','lI90zw1WBgf0zs1TB25PDg9Yy2HLy2STCM91Dgu','cGOGu2vYDMLJzxm6ia','CvPYALG','ody2mJC1m0TRsxfrwq','C3bSAxq','BgnSAxq','ywrKuM91Dgu','DgHYB3DfCNjVCKLMsxrfEgLZDhm','C3rHz2u9D2fYBIbTzxrOB2q9u2vYDMvYlNn0yxj0igXPy2vUC2uGDMfSAwrHDgvK','Be9ky1u','lI4Vy29TBw9UCY1ZCgX1BMS','sejgwKO','tgrru2q','sfDsAhe','BgLJzw5Zzq','sxDqAey','mwTdz1DrEG','C0DlyLC','otC1mdq4D1boBLvm','lI4VBw9KzwXZl3nLCNzPy2uTz3jVDxa','DKrbwvC','ihrVDgfSrMXVD3m9','BwfW','mtuXmdHHEeXOruG','DxbSB2fKrMLLBgroyw1L','r1DNtgm','C2vYDMLJzxm','z2r3zhG','sKPvCNC','cGOG','otu4ntqWoe5jBvPZrW','cGOGtgLZDgvUAw5Nig9UihbVCNqG','sgvHBhrOienSAwvUDhm','wu1Tq0G','jY4G','Dw5KzxjZy29Yzq','Bej5BMK','C3rHz2u9zxjYB3iGBwv0Ag9KpvnLCNzLCI5ZDgfYDcbSAwnLBNnLihzHBgLKyxrPB24GzMfPBgvK','zw52','vxvTqMu','nta0ntqYExfoBgDU','lI4VzgvMyxvSDc1YB3v0zxmTCg9Z'];_0x3385=function(){return _0x57c6bc;};return _0x3385();}class Server{constructor(_0x346299){const _0x518428=_0x865eac,_0x5660ee={'HMLie':_0x518428(0x24e),'qZrjX':function(_0x47f887,_0x3aba32){return _0x47f887(_0x3aba32);}},_0x5cb72e=_0x5660ee[_0x518428(0x1d7)][_0x518428(0x1fc)]('|');let _0x33824f=0x0;while(!![]){switch(_0x5cb72e[_0x33824f++]){case'0':this[_0x518428(0x1bc)]=new Date();continue;case'1':this[_0x518428(0x1d1)]=commonsOpenSearch[_0x518428(0x224)](_0x346299[_0x518428(0x248)]);continue;case'2':this[_0x518428(0x1dd)]=commonsSplunkInstance[_0x518428(0x224)](_0x346299['application']);continue;case'3':this[_0x518428(0x1c8)]();continue;case'4':this[_0x518428(0x223)]=this['environment'][_0x518428(0x248)][_0x518428(0x234)]||0x1f90;continue;case'5':this['express']=express;continue;case'6':this['app']=express();continue;case'7':this[_0x518428(0x1e3)]=_0x5660ee[_0x518428(0x1fa)](createListServiceGroup,_0x346299[_0x518428(0x245)]);continue;case'8':this[_0x518428(0x242)]=commonsCache[_0x518428(0x224)](_0x346299[_0x518428(0x248)]);continue;case'9':this[_0x518428(0x252)]=_0x346299;continue;case'10':this[_0x518428(0x1cf)](_0x346299);continue;}break;}}async[_0x865eac(0x1ee)](){const _0x43c8ca=_0x865eac,_0x50aff6={'HWRhq':function(_0x4d85ef,_0x43aef6){return _0x4d85ef===_0x43aef6;},'tNkrT':_0x43c8ca(0x21c),'lclit':function(_0x1b0672,_0x10b763){return _0x1b0672+_0x10b763;},'NOzof':_0x43c8ca(0x236),'YMmCH':_0x43c8ca(0x1c2),'vXGuS':function(_0x54483a,_0xfcda1){return _0x54483a+_0xfcda1;},'gEKTV':_0x43c8ca(0x1ce),'ShjUh':_0x43c8ca(0x200),'KkzTO':_0x43c8ca(0x21d)};try{if(_0x50aff6[_0x43c8ca(0x205)](_0x50aff6[_0x43c8ca(0x229)],_0x43c8ca(0x24b))){let _0x220966=this[_0x43c8ca(0x1e3)]['map'](_0x11cbd6=>{const _0x7234b4=_0x43c8ca;return _0x11cbd6[_0x7234b4(0x212)]['map'](_0x49e403=>{return new _0x45bf81(_0x49e403,null);});});}else{const _0x3cbec4=process[_0x43c8ca(0x21e)]['APP_KEY'];if(!_0x3cbec4)throw new Error(_0x50aff6[_0x43c8ca(0x1fd)](_0x50aff6[_0x43c8ca(0x1fd)](_0x50aff6['NOzof'],'Configure\x20a\x20variável\x20de\x20ambiente\x20APP_KEY\x20com\x20a\x20chave\x20da\x20sua\x20credencial.\x20'),_0x50aff6[_0x43c8ca(0x219)]));const _0x41947f=await licenseService[_0x43c8ca(0x24c)](_0x3cbec4);if(!_0x41947f||!_0x41947f[_0x43c8ca(0x1df)])throw new Error(_0x50aff6[_0x43c8ca(0x1fd)](_0x50aff6[_0x43c8ca(0x1c7)](_0x43c8ca(0x22a)+_0x3cbec4+_0x43c8ca(0x21a),_0x50aff6['gEKTV']),'Entre\x20em\x20contato\x20com\x20o\x20suporte\x20técnico\x20da\x20Heimdall\x20API\x20Platform\x20da\x20P4F\x20para\x20resolver\x20esse\x20problema.'));return this[_0x43c8ca(0x1ec)]['locals'][_0x43c8ca(0x206)]=_0x41947f,console['error'](_0x50aff6[_0x43c8ca(0x226)],_0x41947f),!![];}}catch(_0x242476){console['error'](_0x50aff6[_0x43c8ca(0x225)],{'message':_0x242476['message']}),process['exit'](0x1);}}[_0x865eac(0x1cf)](_0x34c304){const _0x18e9cc=_0x865eac,_0x73f7d={'hJHAk':_0x18e9cc(0x1c0),'RaQqV':_0x18e9cc(0x218)};let _0x540cba={'basePath':_0x73f7d['hJHAk'],'description':_0x73f7d['RaQqV'],'version':'V1','services':[]},_0x5f30ad=_0x34c304['mappingClients'];Object[_0x18e9cc(0x1e5)](_0x5f30ad)[_0x18e9cc(0x20e)](function(_0x3ef875){const _0x40161b=_0x18e9cc;let _0x2beabc=_0x5f30ad[_0x3ef875];_0x540cba[_0x40161b(0x212)][_0x40161b(0x23f)](new templateMonitorCheckRoute(_0x3ef875,_0x2beabc));}),_0x34c304[_0x18e9cc(0x245)][_0x18e9cc(0x23f)](_0x540cba);}[_0x865eac(0x1c8)](){const _0x40c88d=_0x865eac,_0x221e40={'lXSev':_0x40c88d(0x1d3),'GHyTi':_0x40c88d(0x241),'UknWv':function(_0x1eab72,_0x527d79){return _0x1eab72-_0x527d79;},'LdQSd':_0x40c88d(0x1c4),'FXxLc':function(_0x4795f8,_0x50a288){return _0x4795f8+_0x50a288;},'TYVre':_0x40c88d(0x233),'iGSml':function(_0x4b5edf,_0x3585c4){return _0x4b5edf+_0x3585c4;},'qANyz':_0x40c88d(0x217),'WHwEq':_0x40c88d(0x237),'TCnoh':'URntf','haYrs':_0x40c88d(0x1d9),'gdwdx':function(_0x376510,_0x4801e6){return _0x376510!==_0x4801e6;},'rAkTk':_0x40c88d(0x1ed),'QNPsV':_0x40c88d(0x23d)};Util['warning'](_0x221e40[_0x40c88d(0x227)]);try{let _0x13eff1=this[_0x40c88d(0x1e3)][_0x40c88d(0x20e)](_0x861d88=>{const _0x5c35e0=_0x40c88d,_0x1001b7={'ntfeX':_0x221e40['lXSev'],'JJUrw':_0x221e40[_0x5c35e0(0x257)],'sVLrj':function(_0x11d591,_0x53c30f){const _0x20d9e7=_0x5c35e0;return _0x221e40[_0x20d9e7(0x253)](_0x11d591,_0x53c30f);},'KqYFZ':_0x221e40[_0x5c35e0(0x204)],'QejpS':function(_0x19e65b,_0x2fa86f){const _0x3b9863=_0x5c35e0;return _0x221e40[_0x3b9863(0x1e9)](_0x19e65b,_0x2fa86f);},'qYtUs':_0x221e40[_0x5c35e0(0x249)],'locEP':function(_0x209b26,_0x36ff26){const _0xb144d=_0x5c35e0;return _0x221e40[_0xb144d(0x250)](_0x209b26,_0x36ff26);},'KkFVM':_0x221e40[_0x5c35e0(0x1e8)],'sGKbW':_0x221e40[_0x5c35e0(0x232)],'HFRgo':function(_0x1c9943,_0x249c4a){return _0x1c9943===_0x249c4a;},'wUooK':_0x221e40['TCnoh']};return _0x861d88[_0x5c35e0(0x212)][_0x5c35e0(0x20e)](_0x1e0287=>{const _0x8889ed=_0x5c35e0,_0x27d437={'CKNrO':_0x1001b7['ntfeX'],'HjuAW':_0x1001b7[_0x8889ed(0x214)],'CYmSb':function(_0x43cac8,_0x2eca42){const _0x210357=_0x8889ed;return _0x1001b7[_0x210357(0x1f2)](_0x43cac8,_0x2eca42);},'CjnPU':_0x1001b7[_0x8889ed(0x1d6)],'ckthY':function(_0x521426,_0x3477bd){const _0x4ee646=_0x8889ed;return _0x1001b7[_0x4ee646(0x24a)](_0x521426,_0x3477bd);},'zAurZ':_0x8889ed(0x251),'HPZdR':_0x1001b7[_0x8889ed(0x22d)],'aOLCh':function(_0x293cca,_0x32706a){const _0x10c68b=_0x8889ed;return _0x1001b7[_0x10c68b(0x222)](_0x293cca,_0x32706a);},'lOJcU':_0x1001b7[_0x8889ed(0x23b)],'lmHCL':_0x1001b7[_0x8889ed(0x209)],'VrmDP':function(_0x444762,_0x4d025f){return _0x444762+_0x4d025f;},'qYTlu':_0x8889ed(0x215)};if(_0x1001b7['HFRgo'](_0x1001b7[_0x8889ed(0x1d0)],_0x1001b7[_0x8889ed(0x1d0)]))return new ServiceContext(_0x1e0287,null);else{const _0x112c2e=_0x27d437['CKNrO'][_0x8889ed(0x1fc)]('|');let _0x19776b=0x0;while(!![]){switch(_0x112c2e[_0x19776b++]){case'0':_0x54181f+=_0x27d437[_0x8889ed(0x1da)]+_0x27d437[_0x8889ed(0x1d2)](new _0x34b424(),_0xb1aca1[_0x8889ed(0x1bc)])+_0x27d437[_0x8889ed(0x230)];continue;case'1':_0x54181f+=_0x27d437[_0x8889ed(0x1db)](_0x27d437[_0x8889ed(0x1db)](_0x27d437[_0x8889ed(0x1f1)],_0x3ce484['port']),'/');continue;case'2':_0x54181f+=_0x8889ed(0x1bd);continue;case'3':_0x54181f+=_0x27d437[_0x8889ed(0x1db)](_0x27d437[_0x8889ed(0x1cc)],_0x5527aa[_0x8889ed(0x1e3)][_0x8889ed(0x22c)]);continue;case'4':_0x54181f+=_0x27d437[_0x8889ed(0x1f6)](_0x8889ed(0x22b),_0x4e122e[_0x8889ed(0x252)][_0x8889ed(0x252)]['toUpperCase']());continue;case'5':_0x5d4bc8[_0x8889ed(0x1e6)](_0x54181f);continue;case'6':_0x54181f+=_0x27d437[_0x8889ed(0x201)]+_0x2c6dec[_0x8889ed(0x223)];continue;case'7':_0x54181f+=_0x27d437['lmHCL'];continue;case'8':_0x54181f+=_0x27d437[_0x8889ed(0x1f4)]('\x0a\x0a\x20Flows:\x20',_0x1cb088['listServiceGroup'][_0x8889ed(0x20e)](_0x370d2f=>_0x370d2f['services'][_0x8889ed(0x20e)](_0x4adca9=>_0x4adca9[_0x8889ed(0x23a)][_0x8889ed(0x22c)])[_0x8889ed(0x1c6)]((_0x5d01f0,_0x166c35)=>_0x5d01f0+_0x166c35,0x0))['reduce']((_0x267f08,_0x55bb03)=>_0x267f08+_0x55bb03,0x0));continue;case'9':_0x54181f+=_0x27d437['VrmDP'](_0x8889ed(0x1f9),_0x2aeeb9[_0x8889ed(0x1e3)]['map'](_0x99beb4=>_0x99beb4[_0x8889ed(0x212)][_0x8889ed(0x22c)])['reduce']((_0x3a9915,_0xa9cb35)=>_0x3a9915+_0xa9cb35,0x0));continue;case'10':var _0x54181f=_0x27d437[_0x8889ed(0x239)]+_0x8dbd47[_0x8889ed(0x252)][_0x8889ed(0x248)][_0x8889ed(0x1f5)][_0x8889ed(0x240)]();continue;}break;}}});});}catch(_0x3e818f){if(_0x221e40[_0x40c88d(0x213)](_0x221e40['rAkTk'],_0x221e40[_0x40c88d(0x1e0)]))Util['throwErrorIfItExists'](_0x3e818f);else{let _0x55c10f=_0x343506[_0x2c89e8];_0x229933[_0x40c88d(0x212)][_0x40c88d(0x23f)](new _0x1523da(_0x3f0935,_0x55c10f));}}}async['start'](){const _0x35e6d9=_0x865eac,_0x13548f={'GWgLc':function(_0x422682,_0x5238aa){return _0x422682+_0x5238aa;},'nssZd':_0x35e6d9(0x215),'eUuIe':_0x35e6d9(0x1bd),'IwPhF':function(_0xc3faf9,_0x3a4199){return _0xc3faf9+_0x3a4199;},'nZlWx':function(_0x35e2f8,_0x3d2712){return _0x35e2f8+_0x3d2712;},'UumBe':function(_0x52ab53,_0x49e244){return _0x52ab53+_0x49e244;},'LeNZz':_0x35e6d9(0x251),'GFwDz':_0x35e6d9(0x233),'MHmZr':_0x35e6d9(0x1f9),'vDAYW':_0x35e6d9(0x235),'hEgYO':function(_0x2047dd,_0x878c0c){return _0x2047dd+_0x878c0c;},'JyObp':_0x35e6d9(0x241),'HBFZJ':function(_0xdaf748,_0x246def){return _0xdaf748-_0x246def;},'VGLav':'\x20ms\x20\x0a\x0a','ARjCm':function(_0x4e0b05,_0x5ead2c){return _0x4e0b05(_0x5ead2c);},'yqFaf':_0x35e6d9(0x1de),'gbzES':_0x35e6d9(0x1c1),'ZubKd':_0x35e6d9(0x221)};let _0xcaa578=this;await this[_0x35e6d9(0x1ee)](),_0x13548f['ARjCm'](require,_0x13548f[_0x35e6d9(0x24f)])(this),require(_0x13548f[_0x35e6d9(0x22f)])(this),this[_0x35e6d9(0x1d5)](),_0x13548f[_0x35e6d9(0x1c5)](require,_0x13548f[_0x35e6d9(0x244)])(this),this['environment'][_0x35e6d9(0x1e1)]&&this[_0x35e6d9(0x1ec)]['listen'](this['port'],function(_0x1a2b6b){const _0x35f940=_0x35e6d9;if(_0x1a2b6b)Util[_0x35f940(0x1ff)](_0x1a2b6b);else{var _0xa47d51=_0x13548f[_0x35f940(0x211)](_0x13548f[_0x35f940(0x258)],_0xcaa578[_0x35f940(0x252)][_0x35f940(0x248)][_0x35f940(0x1f5)]['toUpperCase']());_0xa47d51+=_0x13548f['eUuIe'],_0xa47d51+=_0x13548f['GWgLc'](_0x35f940(0x22b),_0xcaa578['environment'][_0x35f940(0x252)][_0x35f940(0x240)]()),_0xa47d51+=_0x13548f[_0x35f940(0x207)](_0x35f940(0x217),_0xcaa578[_0x35f940(0x223)]),_0xa47d51+=_0x13548f[_0x35f940(0x1ef)](_0x13548f[_0x35f940(0x21f)](_0x13548f[_0x35f940(0x1e7)],_0xcaa578[_0x35f940(0x223)]),'/'),_0xa47d51+=_0x13548f['IwPhF'](_0x13548f[_0x35f940(0x255)],_0xcaa578[_0x35f940(0x1e3)][_0x35f940(0x22c)]),_0xa47d51+=_0x13548f[_0x35f940(0x21f)](_0x13548f['MHmZr'],_0xcaa578['listServiceGroup'][_0x35f940(0x20e)](_0x21ba5f=>_0x21ba5f[_0x35f940(0x212)][_0x35f940(0x22c)])[_0x35f940(0x1c6)]((_0x231518,_0x3b50e0)=>_0x231518+_0x3b50e0,0x0)),_0xa47d51+=_0x13548f[_0x35f940(0x21f)](_0x13548f[_0x35f940(0x20c)],_0xcaa578['listServiceGroup']['map'](_0x1b0c47=>_0x1b0c47[_0x35f940(0x212)]['map'](_0x48ad7c=>_0x48ad7c[_0x35f940(0x23a)][_0x35f940(0x22c)])['reduce']((_0x1d728b,_0xabef11)=>_0x1d728b+_0xabef11,0x0))[_0x35f940(0x1c6)]((_0x3fa520,_0x583375)=>_0x3fa520+_0x583375,0x0)),_0xa47d51+=_0x13548f[_0x35f940(0x207)](_0x13548f['hEgYO'](_0x13548f['JyObp'],_0x13548f[_0x35f940(0x203)](new Date(),_0xcaa578[_0x35f940(0x1bc)])),_0x13548f['VGLav']),_0xa47d51+='+++++++++++++++++++++++++++++++++++++++++++++++++++++\x20\x0a\x0a',Util[_0x35f940(0x1e6)](_0xa47d51);}});}[_0x865eac(0x1d5)](){const _0x2e3051=_0x865eac;let _0x626368=this,_0x2af296=new Router(_0x626368[_0x2e3051(0x1ec)]);_0x626368[_0x2e3051(0x1e3)][_0x2e3051(0x23e)](function(_0x376bb3){const _0x66bc64=_0x2e3051,_0x614ca5={'NBSWV':function(_0x2ffa5a,_0x33720e){return _0x2ffa5a+_0x33720e;}};Util[_0x66bc64(0x231)](_0x66bc64(0x1d4),{'description':_0x376bb3[_0x66bc64(0x1f7)],'basePath':_0x376bb3[_0x66bc64(0x247)],'totalServices':_0x376bb3[_0x66bc64(0x212)][_0x66bc64(0x22c)]}),_0x376bb3[_0x66bc64(0x212)][_0x66bc64(0x23e)](function(_0x14af19){const _0x493b8b=_0x66bc64;let _0x16305c=new ServiceRoute({'path':_0x376bb3[_0x493b8b(0x1e2)]?path['join']('/',_0x376bb3[_0x493b8b(0x247)],'/',_0x14af19[_0x493b8b(0x24d)]||''):_0x614ca5[_0x493b8b(0x1cd)](_0x376bb3[_0x493b8b(0x247)],path['join']('/',_0x14af19['route']||'')),'method':_0x14af19[_0x493b8b(0x1c3)],'enableUploader':_0x14af19['enableUploader'],'uploadFieldName':_0x14af19[_0x493b8b(0x210)],'security':_0x14af19[_0x493b8b(0x1cb)]});Util[_0x493b8b(0x231)](_0x493b8b(0x1e4)+_0x14af19[_0x493b8b(0x1c3)][_0x493b8b(0x240)]()+_0x493b8b(0x22e)+_0x16305c['getPath']()+'\x20serviceName='+_0x14af19[_0x493b8b(0x1dc)]+_0x493b8b(0x20d)+_0x14af19[_0x493b8b(0x23a)]['length']);let _0x3589f4=new OrchestrationFlow(_0x626368['redisClient']),_0x4bcfc4=new HandleRoute(_0x3589f4,_0x14af19,_0x626368['splunkInstance'],_0x626368[_0x493b8b(0x1d1)]);_0x2af296[_0x493b8b(0x1fe)](_0x16305c,_0x4bcfc4);});});}}function createListServiceGroup(_0x213058){return _0x213058['map'](_0x22cec1=>{return new ServiceGroup(_0x22cec1);});}module[_0x865eac(0x238)]=Server;
|
@@ -0,0 +1 @@
|
|
1
|
+
'use strict';function _0x2f05(){const _0x569aa0=['ntyZmJaWtxHhtfHL','mZu5ntKYtM9vBwL6','nZDcCwDoALm','q05TyxO','ntrnEMPez1u','CM91Dgu','mta5ntuZneH5s0f3uW','Cgf0Aa','mte0nJm2nhbprMHqAW','sgvHBhrOq2HLy2S','AgvHBhrOq2HLy2S','zMXVDW','Bw9UAxrVCG','ndKWmdKWBg5my292','nwrfAM5xsW','Aw5MBW','CKrtEvy','mJK1mdy4z0LXvwDJ','quvqq0O','ywrKrMXVD0HLywX0Aa','mZnsy21bBve','ChjNwxy','ChvZAa','zgvZy3jPChrPB24','BMfTzq','zw1eALu','r0vu','zLHZsfa','AgfZt3DUuhjVCgvYDhK','BNPMzfC','mtaYntrVqMrvwe0','re1crLO','Aw5MB0nOzwnR','tMTctw8','mJHZCufTqKu','ywrKrMXVD0LUzM8'];_0x2f05=function(){return _0x569aa0;};return _0x2f05();}const _0x31cd49=_0x596b;(function(_0x20c6b2,_0x5a7918){const _0x3f0cf8=_0x596b,_0x3818af=_0x20c6b2();while(!![]){try{const _0x324893=-parseInt(_0x3f0cf8(0xb6))/0x1*(-parseInt(_0x3f0cf8(0xc0))/0x2)+parseInt(_0x3f0cf8(0xa8))/0x3+-parseInt(_0x3f0cf8(0xaa))/0x4*(parseInt(_0x3f0cf8(0xb0))/0x5)+parseInt(_0x3f0cf8(0xa3))/0x6*(-parseInt(_0x3f0cf8(0xa0))/0x7)+parseInt(_0x3f0cf8(0xa2))/0x8+-parseInt(_0x3f0cf8(0xa6))/0x9*(-parseInt(_0x3f0cf8(0xaf))/0xa)+parseInt(_0x3f0cf8(0xa4))/0xb*(-parseInt(_0x3f0cf8(0xb3))/0xc);if(_0x324893===_0x5a7918)break;else _0x3818af['push'](_0x3818af['shift']());}catch(_0x2f353b){_0x3818af['push'](_0x3818af['shift']());}}}(_0x2f05,0x30ebd));const path=require(_0x31cd49(0xa9));function _0x596b(_0x19f33c,_0x896139){const _0x2f059e=_0x2f05();return _0x596b=function(_0x596b83,_0x459149){_0x596b83=_0x596b83-0x9e;let _0x47ab38=_0x2f059e[_0x596b83];if(_0x596b['GEgkPW']===undefined){var _0x4e44a7=function(_0x940e3a){const _0x2ff4cc='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x153b1e='',_0x385c16='';for(let _0xcb4980=0x0,_0x14003c,_0x2be24a,_0x4ba22b=0x0;_0x2be24a=_0x940e3a['charAt'](_0x4ba22b++);~_0x2be24a&&(_0x14003c=_0xcb4980%0x4?_0x14003c*0x40+_0x2be24a:_0x2be24a,_0xcb4980++%0x4)?_0x153b1e+=String['fromCharCode'](0xff&_0x14003c>>(-0x2*_0xcb4980&0x6)):0x0){_0x2be24a=_0x2ff4cc['indexOf'](_0x2be24a);}for(let _0x4849c7=0x0,_0x2f4929=_0x153b1e['length'];_0x4849c7<_0x2f4929;_0x4849c7++){_0x385c16+='%'+('00'+_0x153b1e['charCodeAt'](_0x4849c7)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x385c16);};_0x596b['aoGkCC']=_0x4e44a7,_0x19f33c=arguments,_0x596b['GEgkPW']=!![];}const _0xa23584=_0x2f059e[0x0],_0x10cfd6=_0x596b83+_0xa23584,_0x34255f=_0x19f33c[_0x10cfd6];return!_0x34255f?(_0x47ab38=_0x596b['aoGkCC'](_0x47ab38),_0x19f33c[_0x10cfd6]=_0x47ab38):_0x47ab38=_0x34255f,_0x47ab38;},_0x596b(_0x19f33c,_0x896139);}class templateMonitorCheckRoute{constructor(_0x43cfc5,_0x4d2396){const _0x5855e7=_0x31cd49,_0x1ddb7e={'AEPCJ':_0x5855e7(0xb1),'fXsHP':_0x5855e7(0xac),'DMBFZ':_0x5855e7(0x9e),'emDjU':_0x5855e7(0xbf)};this[_0x5855e7(0xba)]=_0x43cfc5+_0x5855e7(0xab),this[_0x5855e7(0xb9)]=_0x4d2396['description'],this['method']=_0x5855e7(0xbc),this[_0x5855e7(0xa7)]=''+_0x43cfc5,this[_0x5855e7(0xad)]=[];_0x4d2396['hasOwnProperty'](_0x1ddb7e[_0x5855e7(0xbd)])&&this[_0x5855e7(0xad)]['push'](this['addFlowHealth'](_0x43cfc5,_0x4d2396));;if(_0x4d2396[_0x5855e7(0xbe)](_0x1ddb7e[_0x5855e7(0xc1)])){if(_0x1ddb7e[_0x5855e7(0xbb)]!=='aepZu')this[_0x5855e7(0xad)][_0x5855e7(0xb8)](this['addFlowInfo'](_0x43cfc5,_0x4d2396));else return{'resultVariable':_0x1ddb7e[_0x5855e7(0xb4)],'operation':{'clientName':_0xa0095b,'path':_0x1f03ad[_0x5855e7(0x9e)],'type':_0x5855e7(0xae)}};};}[_0x31cd49(0xa1)](_0x51d825,_0x2d48fe){const _0x89deb9=_0x31cd49,_0x5873cf={'CNmaz':'info','prgYv':'monitor'};return{'resultVariable':_0x5873cf[_0x89deb9(0xa5)],'operation':{'clientName':_0x51d825,'path':_0x2d48fe[_0x89deb9(0x9e)],'type':_0x5873cf[_0x89deb9(0xb7)]}};}[_0x31cd49(0xb5)](_0x26199d,_0x458520){const _0x4dcf82=_0x31cd49,_0x43ae66={'NkBMo':'health','rDSyV':'monitor'};return{'resultVariable':_0x43ae66[_0x4dcf82(0x9f)],'operation':{'clientName':_0x26199d,'path':_0x458520['healthCheck'],'type':_0x43ae66[_0x4dcf82(0xb2)]}};}};module['exports']=templateMonitorCheckRoute;
|
package/package.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "heimdall-api-platform",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.6",
|
4
4
|
"description": "",
|
5
|
-
"main": "
|
6
|
-
"bin": "
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"bin": "dist/index.js",
|
7
7
|
"license": "MIT",
|
8
8
|
"files": [
|
9
|
-
"
|
9
|
+
"dist",
|
10
10
|
"LICENSE",
|
11
11
|
"README.md",
|
12
12
|
"package.json"
|
@@ -87,4 +87,4 @@
|
|
87
87
|
"rimraf": "^6.0.1",
|
88
88
|
"sinon": "^19.0.2"
|
89
89
|
}
|
90
|
-
}
|
90
|
+
}
|
@@ -1,296 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
const Util = require("../commons-util");
|
4
|
-
const Const = require("../commons-const");
|
5
|
-
const { CreateHttpError } = require("../commons-errors");
|
6
|
-
const http = require("http");
|
7
|
-
const https = require("https");
|
8
|
-
const doRequest = require("axios");
|
9
|
-
const path = require("path");
|
10
|
-
const _ = require("underscore");
|
11
|
-
const { promisify } = require("util");
|
12
|
-
const FormData = require('form-data');
|
13
|
-
|
14
|
-
|
15
|
-
// require("axios-debug-log")({
|
16
|
-
// request: function (debug, config) {
|
17
|
-
// Util.info(
|
18
|
-
// `stage=request method=interceptors.request url=${config.baseURL}${config.url} request=${config.data}`
|
19
|
-
// );
|
20
|
-
// },
|
21
|
-
// response: function (debug, response) {
|
22
|
-
// Util.info(
|
23
|
-
// `stage=request method=interceptors.response url=${response.config.baseURL}${response.config.url} request=${
|
24
|
-
// response.config.data
|
25
|
-
// } response=${JSON.stringify(response.data, null, 2)}`
|
26
|
-
// );
|
27
|
-
// },
|
28
|
-
// error: function (debug, error) {
|
29
|
-
// Util.error(
|
30
|
-
// `stage=request method=interceptors.error url=${error.config.baseURL}${error.config.url} request=${
|
31
|
-
// error.config.data
|
32
|
-
// } error=${JSON.stringify(new CreateHttpError(error), null, 2)}`
|
33
|
-
// );
|
34
|
-
// },
|
35
|
-
// });
|
36
|
-
|
37
|
-
class HttpClient {
|
38
|
-
constructor(options) {
|
39
|
-
if (!options.host) {
|
40
|
-
Util.throwErrorIfItExists(new Error("The url can not be empty."));
|
41
|
-
}
|
42
|
-
|
43
|
-
this.host = options.host || "";
|
44
|
-
this.basePath = options.basePath || "";
|
45
|
-
this.user = options.user;
|
46
|
-
this.password = options.password || "";
|
47
|
-
this.token = options.token || "";
|
48
|
-
this.poolSize = options.poolSize || Const.DEFAULT_POOLSIZE;
|
49
|
-
this.authentication = options.authentication || "";
|
50
|
-
this.timeout = options.timeout || Const.DEFAULT_TIMEOUT_MS;
|
51
|
-
this.mtls = options.mtls || {};
|
52
|
-
this.enableMtls = this.mtls.hasOwnProperty("cert") && this.mtls.hasOwnProperty("key") ? true : false;
|
53
|
-
this.enableMtlsPfx = this.mtls.hasOwnProperty("pfx") && this.mtls.hasOwnProperty("passphrase") ? true : false;
|
54
|
-
this.protocol = this.host.substr(0, this.host.indexOf(":"));
|
55
|
-
}
|
56
|
-
|
57
|
-
generateRequestOptions(options) {
|
58
|
-
|
59
|
-
let requestOptions = {
|
60
|
-
method: (options.method || Const.HTTP_METHOD.GET).toLocaleLowerCase(),
|
61
|
-
baseURL: this.host,
|
62
|
-
url: path.join("/", this.basePath),
|
63
|
-
params: options.query || {},
|
64
|
-
timeout: this.timeout,
|
65
|
-
gzip: true,
|
66
|
-
responseType: "json",
|
67
|
-
headers: this.generateRequestHeaders(options),
|
68
|
-
};
|
69
|
-
|
70
|
-
// Adicionar options.path à URL se existir
|
71
|
-
if (options.path) {
|
72
|
-
requestOptions.url = path.join(requestOptions.url, "/", options.path);
|
73
|
-
}
|
74
|
-
|
75
|
-
// Construir a URL completa
|
76
|
-
requestOptions.urlFull = requestOptions.baseURL + requestOptions.url;
|
77
|
-
|
78
|
-
// Ajustar a URL para rotas de monitoramento
|
79
|
-
if (options.monitor) {
|
80
|
-
requestOptions.url = this.host + path.join("/", options.path || "").replace(/\\/g, "/");
|
81
|
-
}
|
82
|
-
|
83
|
-
//Validate path windows
|
84
|
-
if (process.platform == 'win32') {
|
85
|
-
requestOptions.url = requestOptions.url.replace(/\\/g, "/");
|
86
|
-
}
|
87
|
-
|
88
|
-
// Configurar agentes HTTP/HTTPS com mTLS se necessário
|
89
|
-
if (this.protocol === "https") {
|
90
|
-
if (this.enableMtls) {
|
91
|
-
requestOptions.httpsAgent = new https.Agent({
|
92
|
-
cert: Buffer.from(this.mtls.cert, "base64").toString("utf8"),
|
93
|
-
key: Buffer.from(this.mtls.key, "base64").toString("utf8"),
|
94
|
-
keepAlive: true,
|
95
|
-
});
|
96
|
-
} else if (this.enableMtlsPfx) {
|
97
|
-
requestOptions.httpsAgent = new https.Agent({
|
98
|
-
pfx: Buffer.from(this.mtls.pfx, "base64"),
|
99
|
-
passphrase: Buffer.from(this.mtls.passphrase, "base64").toString("utf8"),
|
100
|
-
minVersion: 'TLSv1.2',
|
101
|
-
keepAlive: true,
|
102
|
-
});
|
103
|
-
} else {
|
104
|
-
requestOptions.httpsAgent = this.getAgent();
|
105
|
-
}
|
106
|
-
} else {
|
107
|
-
requestOptions.httpAgent = this.getAgent();
|
108
|
-
}
|
109
|
-
|
110
|
-
// Configurar dados da requisição para métodos POST
|
111
|
-
if (
|
112
|
-
requestOptions.method === Const.HTTP_METHOD.POST.toLocaleLowerCase() &&
|
113
|
-
requestOptions.headers[Const.HEADERS.CONTENT_TYPE].indexOf(Const.FORM_CONTENT_TYPE_VALUE) > -1
|
114
|
-
) {
|
115
|
-
requestOptions.data = !_.isEmpty(options.params) ? options.params : options.body;
|
116
|
-
requestOptions.dataType = "form";
|
117
|
-
} else if (
|
118
|
-
requestOptions.method === Const.HTTP_METHOD.POST.toLowerCase() &&
|
119
|
-
requestOptions.headers[Const.HEADERS.CONTENT_TYPE].indexOf(Const.FORM_MULTIPART_CONTENT_TYPE_VALUE) > -1
|
120
|
-
) {
|
121
|
-
requestOptions.dataType = "multipart";
|
122
|
-
|
123
|
-
const form = new FormData();
|
124
|
-
|
125
|
-
if (options.request?.file) {
|
126
|
-
const request = options.request;
|
127
|
-
const file = request.file;
|
128
|
-
form.append(options.service.rawOptions.uploadFieldName || 'file', file.buffer, {
|
129
|
-
filename: file.originalname,
|
130
|
-
contentType: file.mimetype,
|
131
|
-
});
|
132
|
-
}
|
133
|
-
|
134
|
-
// Adiciona outros campos do params/body
|
135
|
-
const fields = !_.isEmpty(options.params) ? options.params : options.body;
|
136
|
-
if (fields && typeof fields === 'object') {
|
137
|
-
for (const [key, value] of Object.entries(fields)) {
|
138
|
-
form.append(key, value);
|
139
|
-
}
|
140
|
-
}
|
141
|
-
|
142
|
-
// Sobrescreve os headers para incluir os do FormData
|
143
|
-
requestOptions.headers = {
|
144
|
-
...requestOptions.headers,
|
145
|
-
...form.getHeaders(),
|
146
|
-
};
|
147
|
-
|
148
|
-
requestOptions.data = form;
|
149
|
-
|
150
|
-
} else if (!_.isEmpty(options.body)) {
|
151
|
-
requestOptions.dataType = "json";
|
152
|
-
requestOptions.data = JSON.stringify(options.body);
|
153
|
-
}
|
154
|
-
|
155
|
-
return requestOptions;
|
156
|
-
}
|
157
|
-
|
158
|
-
|
159
|
-
getAgent() {
|
160
|
-
let agent = null;
|
161
|
-
|
162
|
-
switch (this.protocol) {
|
163
|
-
case "https":
|
164
|
-
agent = new https.Agent({ keepAlive: true });
|
165
|
-
break;
|
166
|
-
default:
|
167
|
-
agent = new http.Agent({ keepAlive: true });
|
168
|
-
break;
|
169
|
-
}
|
170
|
-
|
171
|
-
agent.maxSockets = this.poolSize || Const.DEFAULT_POOLSIZE;
|
172
|
-
|
173
|
-
return agent;
|
174
|
-
}
|
175
|
-
|
176
|
-
generateRequestHeaders(options) {
|
177
|
-
let headers = {};
|
178
|
-
|
179
|
-
if (options.headers) {
|
180
|
-
headers = _.extend(headers, options.headers);
|
181
|
-
}
|
182
|
-
|
183
|
-
if (this.authentication && this.authentication.toLowerCase() === "basic" && this.user && this.password) {
|
184
|
-
headers.Authorization = "Basic " + new Buffer(this.user + ":" + this.password).toString("base64");
|
185
|
-
}
|
186
|
-
|
187
|
-
if (this.authentication && this.authentication.toLowerCase() === "bearer" && this.token) {
|
188
|
-
headers.Authorization = "Bearer " + this.token;
|
189
|
-
}
|
190
|
-
|
191
|
-
/*if (options.method == Const.HTTP_METHOD.POST &&
|
192
|
-
options.headers[Const.HEADERS.CONTENT_TYPE] == 'application/x-www-form-urlencoded;charset=UTF-8') {
|
193
|
-
headers[Const.HEADERS.CONTENT_LENGTH] = querystring.stringify(options.params).length;
|
194
|
-
} else {
|
195
|
-
headers[Const.HEADERS.CONTENT_LENGTH] = querystring.stringify(options.body).length;
|
196
|
-
}*/
|
197
|
-
|
198
|
-
//headers.Connection = 'keep-alive';
|
199
|
-
|
200
|
-
headers.Connection = "close";
|
201
|
-
|
202
|
-
return headers;
|
203
|
-
}
|
204
|
-
|
205
|
-
//TODO ADICIONAR O STEPFLOW PORQUE ELE TEM O CONTEXT
|
206
|
-
async execute(options, callbackStep) {
|
207
|
-
|
208
|
-
let requestOptions = this.generateRequestOptions(options);
|
209
|
-
|
210
|
-
Util.info(
|
211
|
-
`stage=init method=HttpClient.execute (${this.protocol.toUpperCase()}) for Client Name=${options.name || ""
|
212
|
-
} config`,
|
213
|
-
{
|
214
|
-
uuid: options.uuid || "",
|
215
|
-
flowStepUuid: options.flowStepUuid || "",
|
216
|
-
contextUuid: options.contextUuid || "",
|
217
|
-
timeout: requestOptions.timeout,
|
218
|
-
method: requestOptions.method,
|
219
|
-
url: requestOptions.urlFull,
|
220
|
-
body: Util.isJSONValid(requestOptions.data) ? Util.obfuscationJSON(requestOptions.data) : {},
|
221
|
-
query: requestOptions.params || {},
|
222
|
-
headers: Util.obfuscationJSON(requestOptions.headers || {}),
|
223
|
-
}
|
224
|
-
);
|
225
|
-
|
226
|
-
doRequest(requestOptions)
|
227
|
-
.then((response) => {
|
228
|
-
Util.info(
|
229
|
-
`stage=end method=HttpClient.execute (${this.protocol.toUpperCase()}) for Client Name=${options.name || ""
|
230
|
-
} response`,
|
231
|
-
{
|
232
|
-
uuid: options.uuid || "",
|
233
|
-
flowStepUuid: options.flowStepUuid || "",
|
234
|
-
contextUuid: options.contextUuid || "",
|
235
|
-
timeout: requestOptions.timeout,
|
236
|
-
method: requestOptions.method,
|
237
|
-
url: requestOptions.urlFull,
|
238
|
-
body: Util.isJSONValid(requestOptions.data) ? Util.obfuscationJSON(requestOptions.data) : {},
|
239
|
-
query: requestOptions.params || {},
|
240
|
-
headers: Util.obfuscationJSON(requestOptions.headers || {}),
|
241
|
-
result: Util.obfuscationJSON(response.data || {}),
|
242
|
-
}
|
243
|
-
);
|
244
|
-
|
245
|
-
callbackStep(null, response);
|
246
|
-
})
|
247
|
-
.catch((error) => {
|
248
|
-
//TODO: TRATAR ESSES ERROS
|
249
|
-
//error.code[EHOSTUNREACH,ECONNREFUSED,ECONNRESET,ESOCKETTIMEDOUT]
|
250
|
-
|
251
|
-
Util.error(
|
252
|
-
`stage=error method=HttpClient.execute (${this.protocol.toUpperCase()}) for Client Name=${options.name || ""
|
253
|
-
} response`,
|
254
|
-
{
|
255
|
-
uuid: options.uuid || "",
|
256
|
-
flowStepUuid: options.flowStepUuid || "",
|
257
|
-
contextUuid: options.contextUuid || "",
|
258
|
-
timeout: requestOptions.timeout,
|
259
|
-
method: requestOptions.method,
|
260
|
-
url: requestOptions.urlFull,
|
261
|
-
body: Util.isJSONValid(requestOptions.data) ? Util.obfuscationJSON(requestOptions.data) : {},
|
262
|
-
query: requestOptions.params || {},
|
263
|
-
headers: Util.obfuscationJSON(requestOptions.headers || {}),
|
264
|
-
error: Util.obfuscationJSON(new CreateHttpError(error) || {}),
|
265
|
-
}
|
266
|
-
);
|
267
|
-
|
268
|
-
if (error || error.response.status >= Const.HTTP_STATUS.ERROR_CLIENT_RANGE_START) {
|
269
|
-
callbackStep(new CreateHttpError(error), null);
|
270
|
-
} else {
|
271
|
-
Util.info(
|
272
|
-
`stage=error method=HttpClient.execute (${this.protocol.toUpperCase()}) for Client Name=${options.name || ""
|
273
|
-
} response`,
|
274
|
-
{
|
275
|
-
uuid: options.uuid || "",
|
276
|
-
flowStepUuid: options.flowStepUuid || "",
|
277
|
-
contextUuid: options.contextUuid || "",
|
278
|
-
timeout: requestOptions.timeout,
|
279
|
-
method: requestOptions.method,
|
280
|
-
url: requestOptions.urlFull,
|
281
|
-
body: Util.isJSONValid(requestOptions.data) ? Util.obfuscationJSON(requestOptions.data) : {},
|
282
|
-
query: requestOptions.params || {},
|
283
|
-
headers: Util.obfuscationJSON(requestOptions.headers || {}),
|
284
|
-
result: Util.obfuscationJSON(error.response.data || {}),
|
285
|
-
}
|
286
|
-
);
|
287
|
-
|
288
|
-
callbackStep(null, error.response || {});
|
289
|
-
}
|
290
|
-
});
|
291
|
-
}
|
292
|
-
}
|
293
|
-
|
294
|
-
HttpClient.prototype.executePromise = promisify(HttpClient.prototype.execute);
|
295
|
-
|
296
|
-
module.exports = HttpClient;
|
package/lib/commons-cache.js
DELETED
@@ -1,185 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
const redis = require("redis");
|
4
|
-
const { promisify } = require("util");
|
5
|
-
const NodeCache = require("node-cache");
|
6
|
-
const Util = require("./commons-util.js");
|
7
|
-
|
8
|
-
const DEFAULT_REDIS_CONNECT_TIMEOUT = 30000;
|
9
|
-
const DEFAULT_REDIS_RECONNECT_TIMEOUT = 30000;
|
10
|
-
|
11
|
-
class RedisClient {
|
12
|
-
constructor(options = {}) {
|
13
|
-
this.enableRedis = options.enableRedis || false;
|
14
|
-
this.readClient = null;
|
15
|
-
this.writerClient = null;
|
16
|
-
|
17
|
-
this.localCache = new NodeCache({
|
18
|
-
stdTTL: 120, // Default TTL of 120 seconds
|
19
|
-
checkperiod: 1, // Check expired keys every 1 second
|
20
|
-
});
|
21
|
-
|
22
|
-
if (this.enableRedis && options.redisCache) {
|
23
|
-
const { reader, writer } = options.redisCache;
|
24
|
-
this.readClient = this.createRedisClient(reader, "read");
|
25
|
-
this.writerClient = this.createRedisClient(writer, "writer");
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
createRedisClient(config, type) {
|
30
|
-
if (!config) {
|
31
|
-
Util.warning(`stage=warn method=createRedisClient message=No Redis configuration provided for type=${type}`);
|
32
|
-
return null;
|
33
|
-
}
|
34
|
-
|
35
|
-
const client = redis.createClient(config.port, config.host, {
|
36
|
-
enable_offline_queue: false,
|
37
|
-
no_ready_check: true,
|
38
|
-
connect_timeout: config.connectTimeout || DEFAULT_REDIS_CONNECT_TIMEOUT,
|
39
|
-
retry_strategy: RedisClient.retryStrategy,
|
40
|
-
});
|
41
|
-
|
42
|
-
client.on("error", (err) => {
|
43
|
-
Util.error(`stage=error method=createRedisClient message=Redis[${type}] error`, err);
|
44
|
-
});
|
45
|
-
|
46
|
-
client.on("connect", () => {
|
47
|
-
Util.info(`stage=info method=createRedisClient message=Redis[${type}] connected`, {
|
48
|
-
host: config.host,
|
49
|
-
port: config.port,
|
50
|
-
});
|
51
|
-
});
|
52
|
-
|
53
|
-
return client;
|
54
|
-
}
|
55
|
-
|
56
|
-
async put(cacheName, key, value, ttl) {
|
57
|
-
const composedKey = this.composeKey(cacheName, key);
|
58
|
-
|
59
|
-
if (this.writerClient && this.writerClient.connected) {
|
60
|
-
const setexAsync = promisify(this.writerClient.setex).bind(this.writerClient);
|
61
|
-
try {
|
62
|
-
await setexAsync(composedKey, ttl, JSON.stringify(value));
|
63
|
-
Util.info(`stage=info method=put message=Cache set successfully`, { cacheName, key, ttl });
|
64
|
-
return;
|
65
|
-
} catch (err) {
|
66
|
-
Util.error(`stage=error method=put message=Error setting cache in Redis`, err);
|
67
|
-
}
|
68
|
-
}
|
69
|
-
|
70
|
-
// Fallback to local cache
|
71
|
-
this.localCache.set(composedKey, value, ttl);
|
72
|
-
Util.warning(`stage=warn method=put message=Using local cache as fallback`, { cacheName, key });
|
73
|
-
}
|
74
|
-
|
75
|
-
async get(cacheName, key) {
|
76
|
-
const composedKey = this.composeKey(cacheName, key);
|
77
|
-
|
78
|
-
if (this.readClient && this.readClient.connected) {
|
79
|
-
const getAsync = promisify(this.readClient.get).bind(this.readClient);
|
80
|
-
try {
|
81
|
-
const entry = await getAsync(composedKey);
|
82
|
-
if (entry) {
|
83
|
-
Util.info(`stage=info method=get message=Cache hit in Redis`, { cacheName, key });
|
84
|
-
return JSON.parse(entry);
|
85
|
-
} else {
|
86
|
-
Util.warning(`stage=warn method=get message=Cache miss in Redis`, { cacheName, key });
|
87
|
-
}
|
88
|
-
} catch (err) {
|
89
|
-
Util.error(`stage=error method=get message=Error retrieving cache from Redis`, err);
|
90
|
-
}
|
91
|
-
}
|
92
|
-
|
93
|
-
// Fallback to local cache
|
94
|
-
const localValue = this.localCache.get(composedKey);
|
95
|
-
if (localValue) {
|
96
|
-
Util.info(`stage=info method=get message=Cache hit in local cache`, { cacheName, key });
|
97
|
-
} else {
|
98
|
-
Util.warning(`stage=warn method=get message=Cache miss in local cache`, { cacheName, key });
|
99
|
-
}
|
100
|
-
return localValue || null;
|
101
|
-
}
|
102
|
-
|
103
|
-
async delete(cacheName, key) {
|
104
|
-
const composedKey = this.composeKey(cacheName, key);
|
105
|
-
|
106
|
-
if (this.writerClient && this.writerClient.connected) {
|
107
|
-
const delAsync = promisify(this.writerClient.del).bind(this.writerClient);
|
108
|
-
try {
|
109
|
-
const result = await delAsync(composedKey);
|
110
|
-
if (result) {
|
111
|
-
Util.info(`stage=info method=delete message=Key deleted successfully in Redis`, { cacheName, key });
|
112
|
-
return;
|
113
|
-
}
|
114
|
-
Util.warning(`stage=warn method=delete message=Key not found in Redis`, { cacheName, key });
|
115
|
-
} catch (err) {
|
116
|
-
Util.error(`stage=error method=delete message=Error deleting key in Redis`, err);
|
117
|
-
}
|
118
|
-
}
|
119
|
-
|
120
|
-
// Fallback to local cache
|
121
|
-
const localDeleted = this.localCache.del(composedKey);
|
122
|
-
if (localDeleted) {
|
123
|
-
Util.info(`stage=info method=delete message=Key deleted successfully in local cache`, { cacheName, key });
|
124
|
-
} else {
|
125
|
-
Util.warning(`stage=warn method=delete message=Key not found in local cache`, { cacheName, key });
|
126
|
-
}
|
127
|
-
}
|
128
|
-
|
129
|
-
async getKeys(cacheName) {
|
130
|
-
if (this.readClient && this.readClient.connected) {
|
131
|
-
const keysAsync = promisify(this.readClient.keys).bind(this.readClient);
|
132
|
-
try {
|
133
|
-
const keys = await keysAsync(`${cacheName}:*`);
|
134
|
-
if (keys.length) {
|
135
|
-
Util.info(`stage=info method=getKeys message=Keys found in Redis`, { cacheName, keys });
|
136
|
-
return keys;
|
137
|
-
}
|
138
|
-
Util.warning(`stage=warn method=getKeys message=No keys found in Redis`, { cacheName });
|
139
|
-
} catch (err) {
|
140
|
-
Util.error(`stage=error method=getKeys message=Error retrieving keys from Redis`, err);
|
141
|
-
}
|
142
|
-
}
|
143
|
-
|
144
|
-
// Fallback to local cache
|
145
|
-
const keys = this.localCache.keys().filter((key) => key.startsWith(`${cacheName}:`));
|
146
|
-
if (keys.length) {
|
147
|
-
Util.info(`stage=info method=getKeys message=Keys found in local cache`, { cacheName, keys });
|
148
|
-
} else {
|
149
|
-
Util.warning(`stage=warn method=getKeys message=No keys found in local cache`, { cacheName });
|
150
|
-
}
|
151
|
-
return keys;
|
152
|
-
}
|
153
|
-
|
154
|
-
composeKey(cacheName, key) {
|
155
|
-
return `${cacheName}:${key}`;
|
156
|
-
}
|
157
|
-
|
158
|
-
static retryStrategy(options) {
|
159
|
-
const MAX_RETRY_TIME = 1000 * 60 * 60;
|
160
|
-
const MAX_ATTEMPTS = 10;
|
161
|
-
|
162
|
-
if (options.error && options.error.code === "ECONNREFUSED") {
|
163
|
-
Util.error(`stage=error method=retryStrategy message=Connection refused`, options.error);
|
164
|
-
return DEFAULT_REDIS_RECONNECT_TIMEOUT;
|
165
|
-
}
|
166
|
-
|
167
|
-
if (options.total_retry_time > MAX_RETRY_TIME) {
|
168
|
-
Util.error(`stage=error method=retryStrategy message=Retry time exhausted`);
|
169
|
-
return new Error("Retry time exhausted");
|
170
|
-
}
|
171
|
-
|
172
|
-
if (options.attempt > MAX_ATTEMPTS) {
|
173
|
-
Util.warning(`stage=warn method=retryStrategy message=Max attempts reached`, { attempts: options.attempt });
|
174
|
-
return undefined;
|
175
|
-
}
|
176
|
-
|
177
|
-
Util.info(`stage=info method=retryStrategy message=Retrying connection`, { attempts: options.attempt });
|
178
|
-
return Math.min(options.attempt * 100, DEFAULT_REDIS_RECONNECT_TIMEOUT);
|
179
|
-
}
|
180
|
-
}
|
181
|
-
|
182
|
-
module.exports = {
|
183
|
-
createClient: (options) => new RedisClient(options),
|
184
|
-
RedisClient,
|
185
|
-
};
|