create-entity-app-server 0.1.16 → 0.2.0

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.
Files changed (48) hide show
  1. package/dist-create/template/.gateway-version +1 -1
  2. package/dist-create/template/app/plugins/ocr/cache.ts +1 -1
  3. package/dist-create/template/app/plugins/ocr/config.ts +1 -1
  4. package/dist-create/template/app/plugins/ocr/direction.ts +1 -1
  5. package/dist-create/template/app/plugins/ocr/dispatch.ts +1 -1
  6. package/dist-create/template/app/plugins/ocr/entity-adapter.ts +1 -1
  7. package/dist-create/template/app/plugins/ocr/errors.ts +1 -1
  8. package/dist-create/template/app/plugins/ocr/handlers.ts +1 -1
  9. package/dist-create/template/app/plugins/ocr/index.ts +1 -1
  10. package/dist-create/template/app/plugins/ocr/llm-parser.ts +1 -1
  11. package/dist-create/template/app/plugins/ocr/parsing-pipeline.ts +1 -1
  12. package/dist-create/template/app/plugins/ocr/pdf-converter.ts +1 -1
  13. package/dist-create/template/app/plugins/ocr/preprocessor.ts +1 -1
  14. package/dist-create/template/app/plugins/ocr/providers/aws.ts +1 -1
  15. package/dist-create/template/app/plugins/ocr/providers/azure.ts +1 -1
  16. package/dist-create/template/app/plugins/ocr/providers/google.ts +1 -1
  17. package/dist-create/template/app/plugins/ocr/providers/index.ts +1 -1
  18. package/dist-create/template/app/plugins/ocr/providers/naver.ts +1 -1
  19. package/dist-create/template/app/plugins/ocr/providers/tesseract.ts +1 -1
  20. package/dist-create/template/app/plugins/ocr/providers/upstage.ts +1 -1
  21. package/dist-create/template/app/plugins/ocr/quota.ts +1 -1
  22. package/dist-create/template/app/plugins/ocr/refiner.ts +1 -1
  23. package/dist-create/template/app/plugins/ocr/routes.ts +1 -1
  24. package/dist-create/template/app/plugins/ocr/service.ts +1 -1
  25. package/dist-create/template/app/plugins/ocr/template-loader.ts +1 -1
  26. package/dist-create/template/app/plugins/ocr/template-matcher.ts +1 -1
  27. package/dist-create/template/app/plugins/ocr/types/config.ts +1 -1
  28. package/dist-create/template/app/plugins/ocr/types/driver.ts +1 -1
  29. package/dist-create/template/app/plugins/ocr/types/index.ts +1 -1
  30. package/dist-create/template/app/plugins/ocr/types/parsed.ts +1 -1
  31. package/dist-create/template/app/plugins/ocr/types/store.ts +1 -1
  32. package/dist-create/template/app/plugins/ocr/types/template.ts +1 -1
  33. package/dist-create/template/app/plugins/ocr/utils.ts +1 -1
  34. package/dist-create/template/app/plugins/smtp/config.ts +41 -1
  35. package/dist-create/template/app/plugins/smtp/handlers.ts +52 -1
  36. package/dist-create/template/app/plugins/smtp/index.ts +33 -1
  37. package/dist-create/template/app/plugins/smtp/routes.ts +19 -1
  38. package/dist-create/template/app/plugins/smtp/types/config.ts +8 -1
  39. package/dist-create/template/app/plugins/smtp/types/index.ts +1 -1
  40. package/dist-create/template/docs/configs.md +7 -7
  41. package/dist-create/template/docs/scripts-guide.md +49 -19
  42. package/dist-create/template/scripts/run.sh +3 -0
  43. package/dist-create/template/scripts/service-install.sh +174 -0
  44. package/dist-create/template/scripts/service-remove.sh +102 -0
  45. package/dist-create/template/scripts/update-server.sh +25 -20
  46. package/dist-create/template/system-api.js +1 -1
  47. package/dist-create/template/system.js +1 -1
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- 'use strict';(function(_0x59067f,_0x24d6da){var _0x4b0fb4=_0x64a5,_0xb96955=_0x59067f();while(!![]){try{var _0x238d85=parseInt(_0x4b0fb4(0x142))/0x1+parseInt(_0x4b0fb4(0x13e))/0x2*(parseInt(_0x4b0fb4(0x143))/0x3)+-parseInt(_0x4b0fb4(0x13b))/0x4+-parseInt(_0x4b0fb4(0x13c))/0x5*(parseInt(_0x4b0fb4(0x13d))/0x6)+-parseInt(_0x4b0fb4(0x141))/0x7+parseInt(_0x4b0fb4(0x13f))/0x8+-parseInt(_0x4b0fb4(0x140))/0x9;if(_0x238d85===_0x24d6da)break;else _0xb96955['push'](_0xb96955['shift']());}catch(_0x202db9){_0xb96955['push'](_0xb96955['shift']());}}}(_0x49ed,0x6aa71));function _0x64a5(_0x5f2f76,_0x3a6ef1){_0x5f2f76=_0x5f2f76-0x13b;var _0x49ed5d=_0x49ed();var _0x64a5de=_0x49ed5d[_0x5f2f76];if(_0x64a5['BHUCLn']===undefined){var _0x3a9658=function(_0x5261bc){var _0x63ab36='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x23b322='',_0x46375d='';for(var _0x483eea=0x0,_0x24cecc,_0x2b8b38,_0x265fc2=0x0;_0x2b8b38=_0x5261bc['charAt'](_0x265fc2++);~_0x2b8b38&&(_0x24cecc=_0x483eea%0x4?_0x24cecc*0x40+_0x2b8b38:_0x2b8b38,_0x483eea++%0x4)?_0x23b322+=String['fromCharCode'](0xff&_0x24cecc>>(-0x2*_0x483eea&0x6)):0x0){_0x2b8b38=_0x63ab36['indexOf'](_0x2b8b38);}for(var _0x4b40ce=0x0,_0x2a76aa=_0x23b322['length'];_0x4b40ce<_0x2a76aa;_0x4b40ce++){_0x46375d+='%'+('00'+_0x23b322['charCodeAt'](_0x4b40ce)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x46375d);};_0x64a5['UGbjvi']=_0x3a9658,_0x64a5['exuOeQ']={},_0x64a5['BHUCLn']=!![];}var _0xe5ee61=_0x49ed5d[0x0],_0x6614de=_0x5f2f76+_0xe5ee61,_0x2ada93=_0x64a5['exuOeQ'][_0x6614de];return!_0x2ada93?(_0x64a5de=_0x64a5['UGbjvi'](_0x64a5de),_0x64a5['exuOeQ'][_0x6614de]=_0x64a5de):_0x64a5de=_0x2ada93,_0x64a5de;}function _0x49ed(){var _0x3b497d=['ndm2ntu2n2jYt213BG','mte5ndC4mxjjrKrryW','ndeYodeZCMndvwft','owjTyvLWtG','nZK3ntm2CxrHvvzA','nw1gvunYrG','ndu1nJK0zu1sAxjz','mZaWmdaYyu9VqMTf','nda0mdG5nNLJzgPruG'];_0x49ed=function(){return _0x3b497d;};return _0x49ed();}
1
+ 'use strict';function _0xa4e3(){var _0x3ca6e2=['nJeXotuXBfj1A3L2','mtyYmZGZme5vEuvHBq','mZmWmdaXnxbpzun4Eq','mZbXtLn2sw4','nZCYotK1nu9js1zbrG','mZe2odu4odHctvv2sKq','mtuZmdK5ofHnAKrhtW','mty0nZu1nKrWDgfbvW'];_0xa4e3=function(){return _0x3ca6e2;};return _0xa4e3();}(function(_0x5568f2,_0x4c8d68){var _0x3117f1=_0x5de0,_0x1e4876=_0x5568f2();while(!![]){try{var _0x12986b=-parseInt(_0x3117f1(0xb8))/0x1+parseInt(_0x3117f1(0xb1))/0x2+-parseInt(_0x3117f1(0xb2))/0x3+parseInt(_0x3117f1(0xb7))/0x4+-parseInt(_0x3117f1(0xb4))/0x5+parseInt(_0x3117f1(0xb3))/0x6*(-parseInt(_0x3117f1(0xb6))/0x7)+parseInt(_0x3117f1(0xb5))/0x8;if(_0x12986b===_0x4c8d68)break;else _0x1e4876['push'](_0x1e4876['shift']());}catch(_0x23d205){_0x1e4876['push'](_0x1e4876['shift']());}}}(_0xa4e3,0xcb5ff));function _0x5de0(_0x486aa7,_0x5d29d8){_0x486aa7=_0x486aa7-0xb1;var _0xa4e373=_0xa4e3();var _0x5de0eb=_0xa4e373[_0x486aa7];if(_0x5de0['cBacYD']===undefined){var _0x473f85=function(_0x45126b){var _0x401241='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x4dacf7='',_0x1e2cf8='';for(var _0x46ec84=0x0,_0x103561,_0x3b79d6,_0x371fdc=0x0;_0x3b79d6=_0x45126b['charAt'](_0x371fdc++);~_0x3b79d6&&(_0x103561=_0x46ec84%0x4?_0x103561*0x40+_0x3b79d6:_0x3b79d6,_0x46ec84++%0x4)?_0x4dacf7+=String['fromCharCode'](0xff&_0x103561>>(-0x2*_0x46ec84&0x6)):0x0){_0x3b79d6=_0x401241['indexOf'](_0x3b79d6);}for(var _0x106487=0x0,_0xaeb9a5=_0x4dacf7['length'];_0x106487<_0xaeb9a5;_0x106487++){_0x1e2cf8+='%'+('00'+_0x4dacf7['charCodeAt'](_0x106487)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1e2cf8);};_0x5de0['NpQUNV']=_0x473f85,_0x5de0['yeKKUY']={},_0x5de0['cBacYD']=!![];}var _0x4987c7=_0xa4e373[0x0],_0x4773f2=_0x486aa7+_0x4987c7,_0x41825d=_0x5de0['yeKKUY'][_0x4773f2];return!_0x41825d?(_0x5de0eb=_0x5de0['NpQUNV'](_0x5de0eb),_0x5de0['yeKKUY'][_0x4773f2]=_0x5de0eb):_0x5de0eb=_0x41825d,_0x5de0eb;}
@@ -1 +1 @@
1
- 'use strict';function _0x5aee(_0x3e095f,_0x2fb62d){_0x3e095f=_0x3e095f-0xe1;var _0x140156=_0x1401();var _0x5aee73=_0x140156[_0x3e095f];if(_0x5aee['vGdqvx']===undefined){var _0x51e678=function(_0x5e1cdf){var _0x345d59='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1830bb='',_0x1d1ec2='';for(var _0x8f4933=0x0,_0x478f69,_0x560016,_0x10e8c0=0x0;_0x560016=_0x5e1cdf['charAt'](_0x10e8c0++);~_0x560016&&(_0x478f69=_0x8f4933%0x4?_0x478f69*0x40+_0x560016:_0x560016,_0x8f4933++%0x4)?_0x1830bb+=String['fromCharCode'](0xff&_0x478f69>>(-0x2*_0x8f4933&0x6)):0x0){_0x560016=_0x345d59['indexOf'](_0x560016);}for(var _0x2bca7a=0x0,_0x561d0a=_0x1830bb['length'];_0x2bca7a<_0x561d0a;_0x2bca7a++){_0x1d1ec2+='%'+('00'+_0x1830bb['charCodeAt'](_0x2bca7a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1d1ec2);};_0x5aee['kYIjmK']=_0x51e678,_0x5aee['bPtepd']={},_0x5aee['vGdqvx']=!![];}var _0x5c4404=_0x140156[0x0],_0x2ff71c=_0x3e095f+_0x5c4404,_0x1d9d8d=_0x5aee['bPtepd'][_0x2ff71c];return!_0x1d9d8d?(_0x5aee73=_0x5aee['kYIjmK'](_0x5aee73),_0x5aee['bPtepd'][_0x2ff71c]=_0x5aee73):_0x5aee73=_0x1d9d8d,_0x5aee73;}(function(_0x1ca77e,_0x90058d){var _0x3439ac=_0x5aee,_0x591fae=_0x1ca77e();while(!![]){try{var _0x12bbb7=parseInt(_0x3439ac(0xe6))/0x1*(-parseInt(_0x3439ac(0xe4))/0x2)+-parseInt(_0x3439ac(0xea))/0x3*(parseInt(_0x3439ac(0xec))/0x4)+parseInt(_0x3439ac(0xe8))/0x5*(parseInt(_0x3439ac(0xe1))/0x6)+parseInt(_0x3439ac(0xe2))/0x7*(parseInt(_0x3439ac(0xe7))/0x8)+-parseInt(_0x3439ac(0xe3))/0x9*(parseInt(_0x3439ac(0xe9))/0xa)+-parseInt(_0x3439ac(0xeb))/0xb+parseInt(_0x3439ac(0xe5))/0xc;if(_0x12bbb7===_0x90058d)break;else _0x591fae['push'](_0x591fae['shift']());}catch(_0x12f824){_0x591fae['push'](_0x591fae['shift']());}}}(_0x1401,0x5021d));function _0x1401(){var _0x15d7d7=['mJu1nJq4D0XQCg9O','odG2mte5nKrUv0vKDG','mLPkEePJyG','ndiXotGXnLjQDxn6sa','ntq3nZC1ChHHwMPQ','ndiZnZy5mhn3swLuvq','mZK5otu3AunUs2zT','ntKWmJCXvej2CMTP','mtzlEej1zgq','mtHPyKPAy1e','n0POv2PKva','ouvmr1HYwa'];_0x1401=function(){return _0x15d7d7;};return _0x1401();}
1
+ 'use strict';(function(_0x20b8b1,_0x9bcc2){var _0x98b45d=_0x435e,_0x497a72=_0x20b8b1();while(!![]){try{var _0x70b3f3=parseInt(_0x98b45d(0xe3))/0x1+-parseInt(_0x98b45d(0xe9))/0x2*(parseInt(_0x98b45d(0xea))/0x3)+parseInt(_0x98b45d(0xe7))/0x4+-parseInt(_0x98b45d(0xe5))/0x5*(parseInt(_0x98b45d(0xe8))/0x6)+-parseInt(_0x98b45d(0xe4))/0x7+parseInt(_0x98b45d(0xe6))/0x8+parseInt(_0x98b45d(0xeb))/0x9;if(_0x70b3f3===_0x9bcc2)break;else _0x497a72['push'](_0x497a72['shift']());}catch(_0x319cff){_0x497a72['push'](_0x497a72['shift']());}}}(_0x4f7a,0xea07c));function _0x435e(_0x4668f3,_0x9312a0){_0x4668f3=_0x4668f3-0xe3;var _0x4f7a4b=_0x4f7a();var _0x435eae=_0x4f7a4b[_0x4668f3];if(_0x435e['COKrYM']===undefined){var _0x61ee57=function(_0x4a4090){var _0x2f815a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x5afaca='',_0x39a48b='';for(var _0x188471=0x0,_0x3a0740,_0x144f8d,_0x165b2d=0x0;_0x144f8d=_0x4a4090['charAt'](_0x165b2d++);~_0x144f8d&&(_0x3a0740=_0x188471%0x4?_0x3a0740*0x40+_0x144f8d:_0x144f8d,_0x188471++%0x4)?_0x5afaca+=String['fromCharCode'](0xff&_0x3a0740>>(-0x2*_0x188471&0x6)):0x0){_0x144f8d=_0x2f815a['indexOf'](_0x144f8d);}for(var _0x4e5ab1=0x0,_0x202bb3=_0x5afaca['length'];_0x4e5ab1<_0x202bb3;_0x4e5ab1++){_0x39a48b+='%'+('00'+_0x5afaca['charCodeAt'](_0x4e5ab1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x39a48b);};_0x435e['zgFKKv']=_0x61ee57,_0x435e['IXcOmU']={},_0x435e['COKrYM']=!![];}var _0x3e1089=_0x4f7a4b[0x0],_0x37e433=_0x4668f3+_0x3e1089,_0x14734e=_0x435e['IXcOmU'][_0x37e433];return!_0x14734e?(_0x435eae=_0x435e['zgFKKv'](_0x435eae),_0x435e['IXcOmU'][_0x37e433]=_0x435eae):_0x435eae=_0x14734e,_0x435eae;}function _0x4f7a(){var _0x2040d4=['otG2ndyWmgTJC0PQsq','mty2mZa2oeTsyNnRva','mtjVEfjdv0W','mtmZmtaYtKT5wwPs','ndjprM1lqKm','mtC2ndyWodrQyw1Qrvi','ndaWmJyYCfL3wwzf','nZeZmdmXmMjwB2Doua','mJC1mJe1nvf0DgDYqq'];_0x4f7a=function(){return _0x2040d4;};return _0x4f7a();}
@@ -1 +1 @@
1
- 'use strict';(function(_0x1425f8,_0x3bbf09){var _0x205378=_0x3ed0,_0x42063d=_0x1425f8();while(!![]){try{var _0x392a4e=parseInt(_0x205378(0x74))/0x1*(-parseInt(_0x205378(0x78))/0x2)+parseInt(_0x205378(0x73))/0x3*(-parseInt(_0x205378(0x7a))/0x4)+-parseInt(_0x205378(0x7c))/0x5+-parseInt(_0x205378(0x7d))/0x6+-parseInt(_0x205378(0x77))/0x7+-parseInt(_0x205378(0x76))/0x8*(parseInt(_0x205378(0x79))/0x9)+-parseInt(_0x205378(0x75))/0xa*(-parseInt(_0x205378(0x7b))/0xb);if(_0x392a4e===_0x3bbf09)break;else _0x42063d['push'](_0x42063d['shift']());}catch(_0x335cb3){_0x42063d['push'](_0x42063d['shift']());}}}(_0x332d,0x26d60));export*from'./config.ts';function _0x3ed0(_0x1ec854,_0xaf29df){_0x1ec854=_0x1ec854-0x73;var _0x332d69=_0x332d();var _0x3ed098=_0x332d69[_0x1ec854];if(_0x3ed0['XShdoo']===undefined){var _0x34cf1b=function(_0x33fe04){var _0x2dca9c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x644b8d='',_0x1710a9='';for(var _0x8f45dd=0x0,_0x25dc3a,_0x122b77,_0x24397d=0x0;_0x122b77=_0x33fe04['charAt'](_0x24397d++);~_0x122b77&&(_0x25dc3a=_0x8f45dd%0x4?_0x25dc3a*0x40+_0x122b77:_0x122b77,_0x8f45dd++%0x4)?_0x644b8d+=String['fromCharCode'](0xff&_0x25dc3a>>(-0x2*_0x8f45dd&0x6)):0x0){_0x122b77=_0x2dca9c['indexOf'](_0x122b77);}for(var _0x9559e=0x0,_0x3ba95a=_0x644b8d['length'];_0x9559e<_0x3ba95a;_0x9559e++){_0x1710a9+='%'+('00'+_0x644b8d['charCodeAt'](_0x9559e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1710a9);};_0x3ed0['CRwTRB']=_0x34cf1b,_0x3ed0['AwnAow']={},_0x3ed0['XShdoo']=!![];}var _0x58914c=_0x332d69[0x0],_0x2a6b4d=_0x1ec854+_0x58914c,_0x25784a=_0x3ed0['AwnAow'][_0x2a6b4d];return!_0x25784a?(_0x3ed098=_0x3ed0['CRwTRB'](_0x3ed098),_0x3ed0['AwnAow'][_0x2a6b4d]=_0x3ed098):_0x3ed098=_0x25784a,_0x3ed098;}export*from'./parsed.ts';export*from'./driver.ts';function _0x332d(){var _0x14e584=['mZGYmxDZtwXiwq','mtiZnte5mtbcDLPvuMW','nJC5nJbLreLPv3G','ntm1ndy1qLPbD25u','odz4yNflELO','mZmZtKXoAKLQ','nte2ote2Eundr3nf','mtfTwLzdrM4','mZi3otaWEeXgq0vu','mte4mtGWogrZAKjusG','nKDkver0Aa'];_0x332d=function(){return _0x14e584;};return _0x332d();}export*from'./template.ts';export*from'./store.ts';
1
+ 'use strict';function _0x39f5(_0x54d33a,_0x34cef6){_0x54d33a=_0x54d33a-0xd9;var _0x2e8032=_0x2e80();var _0x39f5bc=_0x2e8032[_0x54d33a];if(_0x39f5['aqSitj']===undefined){var _0x12c6e9=function(_0x1df15a){var _0x53f8fc='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x12ee89='',_0x2f8604='';for(var _0x46965f=0x0,_0x398d1c,_0x3f2b86,_0x429826=0x0;_0x3f2b86=_0x1df15a['charAt'](_0x429826++);~_0x3f2b86&&(_0x398d1c=_0x46965f%0x4?_0x398d1c*0x40+_0x3f2b86:_0x3f2b86,_0x46965f++%0x4)?_0x12ee89+=String['fromCharCode'](0xff&_0x398d1c>>(-0x2*_0x46965f&0x6)):0x0){_0x3f2b86=_0x53f8fc['indexOf'](_0x3f2b86);}for(var _0xc1e3c3=0x0,_0xd361da=_0x12ee89['length'];_0xc1e3c3<_0xd361da;_0xc1e3c3++){_0x2f8604+='%'+('00'+_0x12ee89['charCodeAt'](_0xc1e3c3)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2f8604);};_0x39f5['hFEvFT']=_0x12c6e9,_0x39f5['hvZdWk']={},_0x39f5['aqSitj']=!![];}var _0x4c4051=_0x2e8032[0x0],_0x466f4f=_0x54d33a+_0x4c4051,_0x450550=_0x39f5['hvZdWk'][_0x466f4f];return!_0x450550?(_0x39f5bc=_0x39f5['hFEvFT'](_0x39f5bc),_0x39f5['hvZdWk'][_0x466f4f]=_0x39f5bc):_0x39f5bc=_0x450550,_0x39f5bc;}(function(_0x2db981,_0xe3f89c){var _0x4039ea=_0x39f5,_0x4df43e=_0x2db981();while(!![]){try{var _0x193d96=-parseInt(_0x4039ea(0xd9))/0x1+parseInt(_0x4039ea(0xde))/0x2+parseInt(_0x4039ea(0xdb))/0x3+parseInt(_0x4039ea(0xdf))/0x4+parseInt(_0x4039ea(0xdd))/0x5+-parseInt(_0x4039ea(0xdc))/0x6+-parseInt(_0x4039ea(0xda))/0x7*(parseInt(_0x4039ea(0xe0))/0x8);if(_0x193d96===_0xe3f89c)break;else _0x4df43e['push'](_0x4df43e['shift']());}catch(_0x3c4b25){_0x4df43e['push'](_0x4df43e['shift']());}}}(_0x2e80,0x4403e));export*from'./config.ts';function _0x2e80(){var _0x89730a=['mZu0mdu2vgDIAKjz','mtKYofDpAwPhqW','mtreBuX5DLC','mZq1nZCXrLn5D3Le','mJq5nda3ngPwqNvhsa','mteWndy4mgrzqu5kyq','ntm1mtK4y1PtruvH','nZiZnJC2A1HmzNPo'];_0x2e80=function(){return _0x89730a;};return _0x2e80();}export*from'./parsed.ts';export*from'./driver.ts';export*from'./template.ts';export*from'./store.ts';
@@ -1 +1 @@
1
- 'use strict';(function(_0x17e654,_0x1ee5b4){var _0x5db1d6=_0xeb4f,_0x4af408=_0x17e654();while(!![]){try{var _0x36ed49=-parseInt(_0x5db1d6(0x1e8))/0x1*(-parseInt(_0x5db1d6(0x1df))/0x2)+-parseInt(_0x5db1d6(0x1e2))/0x3*(parseInt(_0x5db1d6(0x1e3))/0x4)+parseInt(_0x5db1d6(0x1e1))/0x5*(-parseInt(_0x5db1d6(0x1e7))/0x6)+-parseInt(_0x5db1d6(0x1e4))/0x7+-parseInt(_0x5db1d6(0x1e9))/0x8+parseInt(_0x5db1d6(0x1e5))/0x9+-parseInt(_0x5db1d6(0x1e6))/0xa*(-parseInt(_0x5db1d6(0x1e0))/0xb);if(_0x36ed49===_0x1ee5b4)break;else _0x4af408['push'](_0x4af408['shift']());}catch(_0x17ceaa){_0x4af408['push'](_0x4af408['shift']());}}}(_0x5c45,0xc20bf));function _0xeb4f(_0x511ad2,_0x5bfe7e){_0x511ad2=_0x511ad2-0x1df;var _0x5c45ea=_0x5c45();var _0xeb4f43=_0x5c45ea[_0x511ad2];if(_0xeb4f['Jjbncx']===undefined){var _0x9aefc4=function(_0x103b12){var _0x5df47e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x49a09d='',_0x57c319='';for(var _0x15735f=0x0,_0x29d588,_0x4578a2,_0x4a34f=0x0;_0x4578a2=_0x103b12['charAt'](_0x4a34f++);~_0x4578a2&&(_0x29d588=_0x15735f%0x4?_0x29d588*0x40+_0x4578a2:_0x4578a2,_0x15735f++%0x4)?_0x49a09d+=String['fromCharCode'](0xff&_0x29d588>>(-0x2*_0x15735f&0x6)):0x0){_0x4578a2=_0x5df47e['indexOf'](_0x4578a2);}for(var _0x352a32=0x0,_0x584f9f=_0x49a09d['length'];_0x352a32<_0x584f9f;_0x352a32++){_0x57c319+='%'+('00'+_0x49a09d['charCodeAt'](_0x352a32)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x57c319);};_0xeb4f['JUnlCh']=_0x9aefc4,_0xeb4f['VXkJtv']={},_0xeb4f['Jjbncx']=!![];}var _0x57bf2f=_0x5c45ea[0x0],_0x1e5923=_0x511ad2+_0x57bf2f,_0x32f2bf=_0xeb4f['VXkJtv'][_0x1e5923];return!_0x32f2bf?(_0xeb4f43=_0xeb4f['JUnlCh'](_0xeb4f43),_0xeb4f['VXkJtv'][_0x1e5923]=_0xeb4f43):_0xeb4f43=_0x32f2bf,_0xeb4f43;}function _0x5c45(){var _0x113136=['mtK0odKWthrWt1De','mtHxwxrqtxe','mujLCxzbva','mti2ndiYnZjOy1rstxy','mJy3mJeZneTrr3rysG','mtKWm1z5y3zorW','mZi1mZeWBwLgv3rg','mtq3nLzdr1fxuG','nZeXmKLWCMzluW','mtaXmtyZmdjAu2vrtuO','mty0mZi0n0HwDLLQAa'];_0x5c45=function(){return _0x113136;};return _0x5c45();}
1
+ 'use strict';(function(_0x422a5b,_0xd7f40e){var _0x156827=_0x7716,_0x589d72=_0x422a5b();while(!![]){try{var _0x442bfb=parseInt(_0x156827(0x1df))/0x1+-parseInt(_0x156827(0x1da))/0x2+parseInt(_0x156827(0x1dd))/0x3+-parseInt(_0x156827(0x1d9))/0x4+parseInt(_0x156827(0x1de))/0x5+parseInt(_0x156827(0x1db))/0x6*(parseInt(_0x156827(0x1dc))/0x7)+parseInt(_0x156827(0x1d8))/0x8;if(_0x442bfb===_0xd7f40e)break;else _0x589d72['push'](_0x589d72['shift']());}catch(_0xb05455){_0x589d72['push'](_0x589d72['shift']());}}}(_0x1f27,0x64070));function _0x1f27(){var _0x3c4c74=['mtm1nteXmNPAqM5JsW','mJr6BMrpr0W','mJa0mJGXuu90z2rM','otaWmZG3sMTgD211','mtq0odm0nurAy1bxCq','nteWmdKXrLLhC05U','mZiYndq1nLjRBhjTwq','mJeYoty0mfPssMDuqW'];_0x1f27=function(){return _0x3c4c74;};return _0x1f27();}function _0x7716(_0xc4bf4a,_0x20e422){_0xc4bf4a=_0xc4bf4a-0x1d8;var _0x1f273d=_0x1f27();var _0x77163d=_0x1f273d[_0xc4bf4a];if(_0x7716['KPLdgj']===undefined){var _0x36af3a=function(_0x19040e){var _0x5947e2='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x20d315='',_0x4d5e5c='';for(var _0x843a83=0x0,_0x4126d9,_0x10b5af,_0x408b0b=0x0;_0x10b5af=_0x19040e['charAt'](_0x408b0b++);~_0x10b5af&&(_0x4126d9=_0x843a83%0x4?_0x4126d9*0x40+_0x10b5af:_0x10b5af,_0x843a83++%0x4)?_0x20d315+=String['fromCharCode'](0xff&_0x4126d9>>(-0x2*_0x843a83&0x6)):0x0){_0x10b5af=_0x5947e2['indexOf'](_0x10b5af);}for(var _0x367b0c=0x0,_0x80e40b=_0x20d315['length'];_0x367b0c<_0x80e40b;_0x367b0c++){_0x4d5e5c+='%'+('00'+_0x20d315['charCodeAt'](_0x367b0c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4d5e5c);};_0x7716['hghHfX']=_0x36af3a,_0x7716['SnDacF']={},_0x7716['KPLdgj']=!![];}var _0xf1473d=_0x1f273d[0x0],_0x3e3bd3=_0xc4bf4a+_0xf1473d,_0x29c839=_0x7716['SnDacF'][_0x3e3bd3];return!_0x29c839?(_0x77163d=_0x7716['hghHfX'](_0x77163d),_0x7716['SnDacF'][_0x3e3bd3]=_0x77163d):_0x77163d=_0x29c839,_0x77163d;}
@@ -1 +1 @@
1
- 'use strict';(function(_0x3fff0d,_0x1eed95){var _0x22af16=_0x205e,_0x1f05b6=_0x3fff0d();while(!![]){try{var _0x571946=-parseInt(_0x22af16(0xa5))/0x1*(-parseInt(_0x22af16(0xa7))/0x2)+parseInt(_0x22af16(0xa6))/0x3*(parseInt(_0x22af16(0xa8))/0x4)+-parseInt(_0x22af16(0xa2))/0x5+-parseInt(_0x22af16(0xa1))/0x6+-parseInt(_0x22af16(0xa0))/0x7*(-parseInt(_0x22af16(0xa3))/0x8)+parseInt(_0x22af16(0xa4))/0x9+-parseInt(_0x22af16(0xa9))/0xa;if(_0x571946===_0x1eed95)break;else _0x1f05b6['push'](_0x1f05b6['shift']());}catch(_0x5ce4ea){_0x1f05b6['push'](_0x1f05b6['shift']());}}}(_0x5c47,0xa545f));function _0x205e(_0x40bbef,_0x25b3bb){_0x40bbef=_0x40bbef-0xa0;var _0x5c47e3=_0x5c47();var _0x205e37=_0x5c47e3[_0x40bbef];if(_0x205e['ECRUhq']===undefined){var _0x43d06d=function(_0x58a79f){var _0x418186='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x3d23e2='',_0x4dbb9f='';for(var _0x43b0f8=0x0,_0x283010,_0x344367,_0x3b30eb=0x0;_0x344367=_0x58a79f['charAt'](_0x3b30eb++);~_0x344367&&(_0x283010=_0x43b0f8%0x4?_0x283010*0x40+_0x344367:_0x344367,_0x43b0f8++%0x4)?_0x3d23e2+=String['fromCharCode'](0xff&_0x283010>>(-0x2*_0x43b0f8&0x6)):0x0){_0x344367=_0x418186['indexOf'](_0x344367);}for(var _0x586045=0x0,_0x551d1c=_0x3d23e2['length'];_0x586045<_0x551d1c;_0x586045++){_0x4dbb9f+='%'+('00'+_0x3d23e2['charCodeAt'](_0x586045)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4dbb9f);};_0x205e['cLWWZo']=_0x43d06d,_0x205e['TLJgpc']={},_0x205e['ECRUhq']=!![];}var _0x53419e=_0x5c47e3[0x0],_0x144e96=_0x40bbef+_0x53419e,_0x2e91ba=_0x205e['TLJgpc'][_0x144e96];return!_0x2e91ba?(_0x205e37=_0x205e['cLWWZo'](_0x205e37),_0x205e['TLJgpc'][_0x144e96]=_0x205e37):_0x205e37=_0x2e91ba,_0x205e37;}function _0x5c47(){var _0x51cedf=['mtCWndaZm2rOqMPqzq','mtCWnJmXogLlCgziuq','ngjeweD4sG','nZuXoda1mhzVwejAtW','ndu3mJG5zLHMAvn5','nZu2odu5ohrrtef3yG','mta2ndK3nwnOrgTWAG','ndbQExLxEeK','mtaZotG0odnXy2jArwi','muv0uvPotW'];_0x5c47=function(){return _0x51cedf;};return _0x5c47();}
1
+ 'use strict';(function(_0x51b8bc,_0x18eabf){var _0x646bf8=_0x46be,_0x1a700e=_0x51b8bc();while(!![]){try{var _0x2a6c50=parseInt(_0x646bf8(0x131))/0x1+parseInt(_0x646bf8(0x12f))/0x2*(-parseInt(_0x646bf8(0x135))/0x3)+parseInt(_0x646bf8(0x134))/0x4*(-parseInt(_0x646bf8(0x133))/0x5)+parseInt(_0x646bf8(0x138))/0x6*(parseInt(_0x646bf8(0x12e))/0x7)+parseInt(_0x646bf8(0x132))/0x8*(parseInt(_0x646bf8(0x130))/0x9)+parseInt(_0x646bf8(0x139))/0xa*(-parseInt(_0x646bf8(0x137))/0xb)+parseInt(_0x646bf8(0x12d))/0xc*(parseInt(_0x646bf8(0x136))/0xd);if(_0x2a6c50===_0x18eabf)break;else _0x1a700e['push'](_0x1a700e['shift']());}catch(_0x35aeac){_0x1a700e['push'](_0x1a700e['shift']());}}}(_0x5c78,0xb491f));function _0x46be(_0x176027,_0x39611c){_0x176027=_0x176027-0x12d;var _0x5c78e0=_0x5c78();var _0x46befa=_0x5c78e0[_0x176027];if(_0x46be['tIAjHf']===undefined){var _0x48a80a=function(_0x5743bc){var _0x53b002='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x43c75d='',_0x3d5d1b='';for(var _0x9f4716=0x0,_0x45292d,_0x466c97,_0x404fa6=0x0;_0x466c97=_0x5743bc['charAt'](_0x404fa6++);~_0x466c97&&(_0x45292d=_0x9f4716%0x4?_0x45292d*0x40+_0x466c97:_0x466c97,_0x9f4716++%0x4)?_0x43c75d+=String['fromCharCode'](0xff&_0x45292d>>(-0x2*_0x9f4716&0x6)):0x0){_0x466c97=_0x53b002['indexOf'](_0x466c97);}for(var _0x654c3c=0x0,_0x1c398a=_0x43c75d['length'];_0x654c3c<_0x1c398a;_0x654c3c++){_0x3d5d1b+='%'+('00'+_0x43c75d['charCodeAt'](_0x654c3c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3d5d1b);};_0x46be['wIYDzp']=_0x48a80a,_0x46be['wwebqc']={},_0x46be['tIAjHf']=!![];}var _0x4b2ade=_0x5c78e0[0x0],_0x507830=_0x176027+_0x4b2ade,_0x262a3e=_0x46be['wwebqc'][_0x507830];return!_0x262a3e?(_0x46befa=_0x46be['wIYDzp'](_0x46befa),_0x46be['wwebqc'][_0x507830]=_0x46befa):_0x46befa=_0x262a3e,_0x46befa;}function _0x5c78(){var _0x152c9e=['nZy2mdLRBKrwvfG','mtqXmtqXntvdzvDswgm','nNf5BKLKrW','mtbZteTfqM4','ntG5mM1ZwM5dBW','ndKZnZu5n21jD2PQqG','mJm0mtm1ogXhr0z1uW','owPtEvHbBq','ndi0mJCXufnUwgXQ','ndeYntCXmKLgzMjQqG','mty4mtC3nwzHs1reqq','mtzOBhnZtfO','m1n1A1rMwG'];_0x5c78=function(){return _0x152c9e;};return _0x5c78();}
@@ -1 +1 @@
1
- 'use strict';function _0x19de(_0x47ebe3,_0x14a33d){_0x47ebe3=_0x47ebe3-0x72;var _0x2298d3=_0x2298();var _0x19def9=_0x2298d3[_0x47ebe3];if(_0x19de['ZKCePa']===undefined){var _0x3eab02=function(_0x488dd0){var _0x500a01='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x351c70='',_0x11294b='';for(var _0x345b14=0x0,_0x3d48ab,_0x2088f0,_0x2b34e5=0x0;_0x2088f0=_0x488dd0['charAt'](_0x2b34e5++);~_0x2088f0&&(_0x3d48ab=_0x345b14%0x4?_0x3d48ab*0x40+_0x2088f0:_0x2088f0,_0x345b14++%0x4)?_0x351c70+=String['fromCharCode'](0xff&_0x3d48ab>>(-0x2*_0x345b14&0x6)):0x0){_0x2088f0=_0x500a01['indexOf'](_0x2088f0);}for(var _0x5535c2=0x0,_0xc92499=_0x351c70['length'];_0x5535c2<_0xc92499;_0x5535c2++){_0x11294b+='%'+('00'+_0x351c70['charCodeAt'](_0x5535c2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x11294b);};_0x19de['LiEDfC']=_0x3eab02,_0x19de['WWcrfF']={},_0x19de['ZKCePa']=!![];}var _0x5add74=_0x2298d3[0x0],_0x2f963d=_0x47ebe3+_0x5add74,_0x2e77bc=_0x19de['WWcrfF'][_0x2f963d];return!_0x2e77bc?(_0x19def9=_0x19de['LiEDfC'](_0x19def9),_0x19de['WWcrfF'][_0x2f963d]=_0x19def9):_0x19def9=_0x2e77bc,_0x19def9;}(function(_0x7c1d9a,_0x43959e){var _0x2f0a5c=_0x19de,_0x22c210=_0x7c1d9a();while(!![]){try{var _0x510019=-parseInt(_0x2f0a5c(0x72))/0x1+parseInt(_0x2f0a5c(0x7b))/0x2+parseInt(_0x2f0a5c(0x74))/0x3+-parseInt(_0x2f0a5c(0x77))/0x4*(parseInt(_0x2f0a5c(0x75))/0x5)+-parseInt(_0x2f0a5c(0x7a))/0x6+-parseInt(_0x2f0a5c(0x78))/0x7*(-parseInt(_0x2f0a5c(0x79))/0x8)+parseInt(_0x2f0a5c(0x76))/0x9*(parseInt(_0x2f0a5c(0x73))/0xa);if(_0x510019===_0x43959e)break;else _0x22c210['push'](_0x22c210['shift']());}catch(_0x3238fc){_0x22c210['push'](_0x22c210['shift']());}}}(_0x2298,0x92c5b));function _0x2298(){var _0x2eb271=['mtrTChLADNi','mZC4ndG0mgXYtNzVva','nJC4mtm4B1n1EhLw','mJm1mZK4qK9JBMfc','nZy5odi4BungzNnr','mtblCNDStgK','mtaYoduZogj0wgPWDq','mJe0mdbMrhnjq0y','mteWntCZntvKu09VD0W','mta3nMDRt1PLrG'];_0x2298=function(){return _0x2eb271;};return _0x2298();}
1
+ 'use strict';function _0x5e4b(_0x2f2ed9,_0x45c5d1){_0x2f2ed9=_0x2f2ed9-0x12d;var _0x2c0937=_0x2c09();var _0x5e4b4e=_0x2c0937[_0x2f2ed9];if(_0x5e4b['ndtiuc']===undefined){var _0x368bff=function(_0x135528){var _0x129c61='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x4f51a6='',_0x17119c='';for(var _0x4f365b=0x0,_0x1489ed,_0x5bba0d,_0x1b51ed=0x0;_0x5bba0d=_0x135528['charAt'](_0x1b51ed++);~_0x5bba0d&&(_0x1489ed=_0x4f365b%0x4?_0x1489ed*0x40+_0x5bba0d:_0x5bba0d,_0x4f365b++%0x4)?_0x4f51a6+=String['fromCharCode'](0xff&_0x1489ed>>(-0x2*_0x4f365b&0x6)):0x0){_0x5bba0d=_0x129c61['indexOf'](_0x5bba0d);}for(var _0x34e6e1=0x0,_0x29dbfb=_0x4f51a6['length'];_0x34e6e1<_0x29dbfb;_0x34e6e1++){_0x17119c+='%'+('00'+_0x4f51a6['charCodeAt'](_0x34e6e1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x17119c);};_0x5e4b['CSflmT']=_0x368bff,_0x5e4b['WrfTjd']={},_0x5e4b['ndtiuc']=!![];}var _0x1f65cd=_0x2c0937[0x0],_0x4e5a42=_0x2f2ed9+_0x1f65cd,_0x52d970=_0x5e4b['WrfTjd'][_0x4e5a42];return!_0x52d970?(_0x5e4b4e=_0x5e4b['CSflmT'](_0x5e4b4e),_0x5e4b['WrfTjd'][_0x4e5a42]=_0x5e4b4e):_0x5e4b4e=_0x52d970,_0x5e4b4e;}(function(_0xdb81b9,_0x46dfc0){var _0x34e737=_0x5e4b,_0x9f2356=_0xdb81b9();while(!![]){try{var _0x51f06b=-parseInt(_0x34e737(0x135))/0x1+parseInt(_0x34e737(0x130))/0x2+-parseInt(_0x34e737(0x12f))/0x3*(parseInt(_0x34e737(0x131))/0x4)+parseInt(_0x34e737(0x12d))/0x5+parseInt(_0x34e737(0x136))/0x6*(-parseInt(_0x34e737(0x134))/0x7)+-parseInt(_0x34e737(0x132))/0x8*(-parseInt(_0x34e737(0x12e))/0x9)+-parseInt(_0x34e737(0x133))/0xa*(-parseInt(_0x34e737(0x137))/0xb);if(_0x51f06b===_0x46dfc0)break;else _0x9f2356['push'](_0x9f2356['shift']());}catch(_0x419acc){_0x9f2356['push'](_0x9f2356['shift']());}}}(_0x2c09,0xcf295));function _0x2c09(){var _0x5b691e=['mZe4wMDXEunU','mtfVvfjPCwO','nZGZnZqXmgLVEKHswq','nJniB2rnuve','mJG5ota2ohbfs3zqBW','mJi0nda5nKDcB1bpwG','nhfXCe9PzW','mJeYmdCYrNztv2z6','ntqXmdG3mg15ueHqEq','otu3ntnpt3zpuNG','odC2mZa0y1Lbr1rg'];_0x2c09=function(){return _0x5b691e;};return _0x2c09();}
@@ -1 +1 @@
1
- 'use strict';function _0x5f01(_0xbc36ae,_0x140cee){_0xbc36ae=_0xbc36ae-0x10b;const _0x23b92d=_0x23b9();let _0x5f01d8=_0x23b92d[_0xbc36ae];if(_0x5f01['LLCDbY']===undefined){var _0x15866f=function(_0x3fb660){const _0x2f4a96='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x316369='',_0x2e28da='';for(let _0x3481e4=0x0,_0x1059c9,_0x1e610e,_0x45bec5=0x0;_0x1e610e=_0x3fb660['charAt'](_0x45bec5++);~_0x1e610e&&(_0x1059c9=_0x3481e4%0x4?_0x1059c9*0x40+_0x1e610e:_0x1e610e,_0x3481e4++%0x4)?_0x316369+=String['fromCharCode'](0xff&_0x1059c9>>(-0x2*_0x3481e4&0x6)):0x0){_0x1e610e=_0x2f4a96['indexOf'](_0x1e610e);}for(let _0x2e56a7=0x0,_0x414d5b=_0x316369['length'];_0x2e56a7<_0x414d5b;_0x2e56a7++){_0x2e28da+='%'+('00'+_0x316369['charCodeAt'](_0x2e56a7)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2e28da);};_0x5f01['YNUNjQ']=_0x15866f,_0x5f01['QjTgsq']={},_0x5f01['LLCDbY']=!![];}const _0xc78ff6=_0x23b92d[0x0],_0x53bcf4=_0xbc36ae+_0xc78ff6,_0x409a2a=_0x5f01['QjTgsq'][_0x53bcf4];return!_0x409a2a?(_0x5f01d8=_0x5f01['YNUNjQ'](_0x5f01d8),_0x5f01['QjTgsq'][_0x53bcf4]=_0x5f01d8):_0x5f01d8=_0x409a2a,_0x5f01d8;}(function(_0x3133e6,_0x48680d){const _0x2d3d33=_0x5f01,_0x446c4e=_0x3133e6();while(!![]){try{const _0x48a61a=-parseInt(_0x2d3d33(0x116))/0x1+-parseInt(_0x2d3d33(0x10c))/0x2*(-parseInt(_0x2d3d33(0x112))/0x3)+-parseInt(_0x2d3d33(0x10f))/0x4+-parseInt(_0x2d3d33(0x111))/0x5*(-parseInt(_0x2d3d33(0x113))/0x6)+parseInt(_0x2d3d33(0x115))/0x7+parseInt(_0x2d3d33(0x114))/0x8*(parseInt(_0x2d3d33(0x10e))/0x9)+-parseInt(_0x2d3d33(0x110))/0xa;if(_0x48a61a===_0x48680d)break;else _0x446c4e['push'](_0x446c4e['shift']());}catch(_0x2be08d){_0x446c4e['push'](_0x446c4e['shift']());}}}(_0x23b9,0xe2c34));import{execFile as _0x2df85d}from'node:child_process';function _0x23b9(){const _0x6a03d=['D2HPy2G','mtm2mJzTuMvMBe8','tNDKvKm','nZjVDhfMA3m','mtm2odCXnLjIuM1Awq','ndq5mZaYmg5lBurUvW','mJKXodmZmg5SCKLMqW','m3LJBe1ywa','nKrQDeT1zW','mtC2mJyZmLH4CwziAa','otiWnJi2y3DuwhLW','nZy0mZi4whnwCLr2'];_0x23b9=function(){return _0x6a03d;};return _0x23b9();}import{promisify as _0x4c90ef}from'node:util';const t=_0x4c90ef(_0x2df85d);export async function which(_0x4593b3){const _0x498cab=_0x5f01,_0x4d1902={'NwdVC':function(_0x1e61a2,_0x4bf231,_0x5c4f78){return _0x1e61a2(_0x4bf231,_0x5c4f78);}};try{return await _0x4d1902[_0x498cab(0x10d)](t,_0x498cab(0x10b),[_0x4593b3]),!0x0;}catch{return!0x1;}}
1
+ 'use strict';(function(_0xa5a457,_0x556a0b){const _0x57debf=_0x36e4,_0x68cdf9=_0xa5a457();while(!![]){try{const _0x3e0db8=-parseInt(_0x57debf(0xe7))/0x1*(-parseInt(_0x57debf(0xe1))/0x2)+parseInt(_0x57debf(0xe9))/0x3+-parseInt(_0x57debf(0xe8))/0x4*(-parseInt(_0x57debf(0xe2))/0x5)+-parseInt(_0x57debf(0xe0))/0x6*(parseInt(_0x57debf(0xe3))/0x7)+parseInt(_0x57debf(0xde))/0x8+-parseInt(_0x57debf(0xe5))/0x9+parseInt(_0x57debf(0xe6))/0xa*(-parseInt(_0x57debf(0xe4))/0xb);if(_0x3e0db8===_0x556a0b)break;else _0x68cdf9['push'](_0x68cdf9['shift']());}catch(_0x58b7b6){_0x68cdf9['push'](_0x68cdf9['shift']());}}}(_0x25e6,0x31893));import{execFile as _0x3e59d4}from'node:child_process';function _0x36e4(_0xd6df93,_0x100a57){_0xd6df93=_0xd6df93-0xde;const _0x25e6cb=_0x25e6();let _0x36e496=_0x25e6cb[_0xd6df93];if(_0x36e4['dBPubm']===undefined){var _0x36fe5a=function(_0xd2a07a){const _0x252462='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xf99bfe='',_0x792a34='';for(let _0xeefc25=0x0,_0x5e8b9b,_0x47a673,_0x2a316a=0x0;_0x47a673=_0xd2a07a['charAt'](_0x2a316a++);~_0x47a673&&(_0x5e8b9b=_0xeefc25%0x4?_0x5e8b9b*0x40+_0x47a673:_0x47a673,_0xeefc25++%0x4)?_0xf99bfe+=String['fromCharCode'](0xff&_0x5e8b9b>>(-0x2*_0xeefc25&0x6)):0x0){_0x47a673=_0x252462['indexOf'](_0x47a673);}for(let _0x11a645=0x0,_0x44818b=_0xf99bfe['length'];_0x11a645<_0x44818b;_0x11a645++){_0x792a34+='%'+('00'+_0xf99bfe['charCodeAt'](_0x11a645)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x792a34);};_0x36e4['lYBzVM']=_0x36fe5a,_0x36e4['iVmFfh']={},_0x36e4['dBPubm']=!![];}const _0x45d5d1=_0x25e6cb[0x0],_0x4e92f1=_0xd6df93+_0x45d5d1,_0x3f7777=_0x36e4['iVmFfh'][_0x4e92f1];return!_0x3f7777?(_0x36e496=_0x36e4['lYBzVM'](_0x36e496),_0x36e4['iVmFfh'][_0x4e92f1]=_0x36e496):_0x36e496=_0x3f7777,_0x36e496;}import{promisify as _0xbff0e7}from'node:util';function _0x25e6(){const _0x2d281d=['ntC4nZq1uvD1vfP4','D2HPy2G','mte3ntu4ngfIAxreta','vfPRt1m','odrgCMzzD2S','mLL3wuTZEG','mtbczgD4zhu','mtaYndfQCwrlv2G','mtqZAg51zuL3','mJmXmtiYn3DyEuL6vW','nduXndbOsxzgB1y','mtaZnJG3C0fhwgDd','mtKWnJmYuvbXrgXN'];_0x25e6=function(){return _0x2d281d;};return _0x25e6();}const t=_0xbff0e7(_0x3e59d4);export async function which(_0xb3a747){const _0x359875=_0x36e4,_0x351ff7={'TZkOS':function(_0x5d1d95,_0x461f07,_0x5d1dcd){return _0x5d1d95(_0x461f07,_0x5d1dcd);}};try{return await _0x351ff7[_0x359875(0xdf)](t,_0x359875(0xea),[_0xb3a747]),!0x0;}catch{return!0x1;}}
@@ -1 +1,41 @@
1
- 'use strict';const _0xb7c055=_0x561e;(function(_0x4907f1,_0x4d8415){const _0x5352d5=_0x561e,_0x452b22=_0x4907f1();while(!![]){try{const _0x33ef8d=parseInt(_0x5352d5(0x142))/0x1*(-parseInt(_0x5352d5(0x150))/0x2)+parseInt(_0x5352d5(0x13e))/0x3+-parseInt(_0x5352d5(0x13b))/0x4*(parseInt(_0x5352d5(0x152))/0x5)+parseInt(_0x5352d5(0x14f))/0x6+parseInt(_0x5352d5(0x137))/0x7*(parseInt(_0x5352d5(0x144))/0x8)+parseInt(_0x5352d5(0x14c))/0x9*(parseInt(_0x5352d5(0x14a))/0xa)+-parseInt(_0x5352d5(0x148))/0xb;if(_0x33ef8d===_0x4d8415)break;else _0x452b22['push'](_0x452b22['shift']());}catch(_0x31aa09){_0x452b22['push'](_0x452b22['shift']());}}}(_0x5ac0,0x51603));function _0x5ac0(){const _0xeca1e3=['mtzXB29sBfq','AxnHyMW','wvLvDeW','CgX1z2K','mtaXmZqWndDLEfPSDeG','y29UzMK','mJm1mfnZBxLVsG','zxjYB3i','mtu1nZLQyvznD0S','y29Kzq','tvHuzuC','mZyYmdyXmhHItNPXDa','mtrts1nUz0W','zY5QC28','nvPVEhvVCa','CMvWBge','Aw5MBW','mtG0odeXmK9dveDXrG','CgfYC2u','ru5pru4','zcb0BYa','mtu2mtq1nKTdCujRBG','DgvZigq','u01uuca','nJCXotq2DLvRzLjK','BIbYB3u','sxbAt1K','DxrMltG','mty3ntrdA09csM0','zw5HyMW'];_0x5ac0=function(){return _0xeca1e3;};return _0x5ac0();}function _0x561e(_0x4d923e,_0xf79df7){_0x4d923e=_0x4d923e-0x137;const _0x5ac02a=_0x5ac0();let _0x561e4=_0x5ac02a[_0x4d923e];if(_0x561e['bHsVwn']===undefined){var _0x544927=function(_0x5a8ebe){const _0x4bc723='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4de0ba='',_0x1e6a3e='';for(let _0x2a8368=0x0,_0x2f1e40,_0x4e148c,_0x3f892c=0x0;_0x4e148c=_0x5a8ebe['charAt'](_0x3f892c++);~_0x4e148c&&(_0x2f1e40=_0x2a8368%0x4?_0x2f1e40*0x40+_0x4e148c:_0x4e148c,_0x2a8368++%0x4)?_0x4de0ba+=String['fromCharCode'](0xff&_0x2f1e40>>(-0x2*_0x2a8368&0x6)):0x0){_0x4e148c=_0x4bc723['indexOf'](_0x4e148c);}for(let _0x7b628=0x0,_0x5efc30=_0x4de0ba['length'];_0x7b628<_0x5efc30;_0x7b628++){_0x1e6a3e+='%'+('00'+_0x4de0ba['charCodeAt'](_0x7b628)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1e6a3e);};_0x561e['jTgqtd']=_0x544927,_0x561e['gSyxyc']={},_0x561e['bHsVwn']=!![];}const _0x1dc282=_0x5ac02a[0x0],_0x378f21=_0x4d923e+_0x1dc282,_0x3d6daf=_0x561e['gSyxyc'][_0x378f21];return!_0x3d6daf?(_0x561e4=_0x561e['jTgqtd'](_0x561e4),_0x561e['gSyxyc'][_0x378f21]=_0x561e4):_0x561e4=_0x3d6daf,_0x561e4;}import{readFileSync as _0xfee02f}from'node:fs';import{dirname as _0x3a1178,join as _0x169934}from'node:path';import{fileURLToPath as _0x2984b7}from'node:url';import{logger as _0x4eb41c}from'@gateway/api';const m=_0x3a1178(_0x2984b7(import.meta.url)),a=_0x169934(m,_0xb7c055(0x149)+_0xb7c055(0x151)+'n');export function loadSmtpConfig(){const _0x2c03b0=_0xb7c055,_0x510cae={'YYUtL':function(_0x4806eb,_0x154d83,_0x3d8cb6){return _0x4806eb(_0x154d83,_0x3d8cb6);},'vSSYY':_0x2c03b0(0x141),'MXTeG':function(_0x176086,_0x1d1a7c){return _0x176086===_0x1d1a7c;},'IpZOY':_0x2c03b0(0x139)+'T'};try{let _0x4bae3b=_0x510cae[_0x2c03b0(0x146)](_0xfee02f,a,_0x510cae['vSSYY']);_0x4bae3b=_0x4bae3b[_0x2c03b0(0x153)+'ce'](/\$\{([^}]+)\}/g,(_0x3955ad,_0x3b51a8)=>process.env[_0x3b51a8]??'');const _0x2388c9=JSON[_0x2c03b0(0x138)](_0x4bae3b);return _0x510cae[_0x2c03b0(0x14e)](_0x2388c9[_0x2c03b0(0x143)+'ed'],!0x1)?(_0x4eb41c[_0x2c03b0(0x154)](_0x2c03b0(0x13d)+_0x2c03b0(0x147)+_0x2c03b0(0x13f)+_0x2c03b0(0x13c)+_0x2c03b0(0x145)+'ed\x20in'+'\x20conf'+'ig'),null):_0x2388c9;}catch(_0x30b070){return _0x510cae[_0x2c03b0(0x14e)](_0x30b070[_0x2c03b0(0x14d)],_0x510cae[_0x2c03b0(0x140)])?{'enabled':!0x0}:(_0x4eb41c[_0x2c03b0(0x14b)]({'err':_0x30b070},'Faile'+_0x2c03b0(0x13a)+'load\x20'+_0x2c03b0(0x13d)+'confi'+'g'),null);}}
1
+ /**
2
+ * SMTP 플러그인 설정 로더
3
+ */
4
+
5
+ import { readFileSync } from "node:fs";
6
+ import { dirname, join } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { logger } from "@gateway/api";
9
+ import type { SmtpPluginConfig } from "./types/index.ts";
10
+
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ const CONFIG_PATH = join(__dirname, "config.json");
13
+
14
+ /** SMTP 플러그인 설정을 로드한다 */
15
+ export function loadSmtpConfig(): SmtpPluginConfig | null {
16
+ try {
17
+ let raw = readFileSync(CONFIG_PATH, "utf-8");
18
+
19
+ // 환경변수 치환: ${VAR} → process.env.VAR
20
+ raw = raw.replace(
21
+ /\$\{([^}]+)\}/g,
22
+ (_match, name) => process.env[name] ?? "",
23
+ );
24
+
25
+ const cfg: SmtpPluginConfig = JSON.parse(raw);
26
+
27
+ if (cfg.enabled === false) {
28
+ logger.info("SMTP plugin routes disabled in config");
29
+ return null;
30
+ }
31
+
32
+ return cfg;
33
+ } catch (err: unknown) {
34
+ if ((err as NodeJS.ErrnoException).code === "ENOENT") {
35
+ // config.json 없으면 기본값으로 활성화
36
+ return { enabled: true };
37
+ }
38
+ logger.error({ err }, "Failed to load SMTP config");
39
+ return null;
40
+ }
41
+ }
@@ -1 +1,52 @@
1
- 'use strict';function _0x21b8(){const _0xca56db=['odm5mtKYteT0q0Hm','sw52ywW','mtbuvwrSB2u','CgfYyw0','mtHntg1ICuW','C3rHDhu','nZC5ntGWqK54q0X0','mtu2nJe2ovzkB3D2BG','ihjLCxu','t3fTque','AwqGC2u','Dg8GAxm','ndjWrwfkCLK','BgvUz3q','mta5mJmWqKPPD3PK','C2vUza','AxLXEM0','C210Cfm','mZa1otrYuNDTAwu','mZi5otqWzLDtDKLj','Dgf0Dxm','v3nlv3e','yM9KEq','r1jiB1C','vvrNDu4','AxjLza','mZCYnJzwtfPLy3m','mJjmy0TXDxm'];_0x21b8=function(){return _0xca56db;};return _0x21b8();}(function(_0xd8db87,_0x41804b){const _0x1e4d5f=_0x2562,_0x33b8d1=_0xd8db87();while(!![]){try{const _0x4cec2e=-parseInt(_0x1e4d5f(0x97))/0x1+parseInt(_0x1e4d5f(0x88))/0x2*(-parseInt(_0x1e4d5f(0x87))/0x3)+-parseInt(_0x1e4d5f(0x80))/0x4+parseInt(_0x1e4d5f(0x8f))/0x5+parseInt(_0x1e4d5f(0x7f))/0x6*(-parseInt(_0x1e4d5f(0x95))/0x7)+parseInt(_0x1e4d5f(0x89))/0x8*(parseInt(_0x1e4d5f(0x8d))/0x9)+parseInt(_0x1e4d5f(0x8b))/0xa*(parseInt(_0x1e4d5f(0x90))/0xb);if(_0x4cec2e===_0x41804b)break;else _0x33b8d1['push'](_0x33b8d1['shift']());}catch(_0x542c93){_0x33b8d1['push'](_0x33b8d1['shift']());}}}(_0x21b8,0x24696));import{ok as _0x48c2e8,fail as _0xe7f1f6,sendEmail as _0x32480d,entityServer as _0x2d1de1}from'@gateway/api';export async function handleSend(_0x3ff621,_0x308c71){const _0x643e55=_0x2562,_0x4422d3={'iyqzm':function(_0x21b827,_0x39162){return _0x21b827===_0x39162;},'UTguN':function(_0x152ce2,_0x58949f){return _0x152ce2(_0x58949f);},'GRHoW':function(_0x334821,_0x267249){return _0x334821(_0x267249);}},_0x251c3e=_0x3ff621[_0x643e55(0x83)]??{};if(!_0x251c3e['to']||_0x4422d3[_0x643e55(0x99)](_0x251c3e['to'][_0x643e55(0x96)+'h'],0x0))return _0x308c71[_0x643e55(0x8e)+'s'](0x190)[_0x643e55(0x98)](_0xe7f1f6(_0x643e55(0x94)+_0x643e55(0x91)+_0x643e55(0x86)));const _0x3a9b12=await _0x4422d3[_0x643e55(0x85)](_0x32480d,_0x251c3e);return _0x4422d3[_0x643e55(0x84)](_0x48c2e8,{'seq':_0x3a9b12});}function _0x2562(_0x4535c7,_0x325ae2){_0x4535c7=_0x4535c7-0x7f;const _0x21b8e2=_0x21b8();let _0x25626b=_0x21b8e2[_0x4535c7];if(_0x2562['rChySe']===undefined){var _0xbd1a13=function(_0x9fcfc1){const _0x485eb4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x57320d='',_0xcd9c3='';for(let _0x4408ab=0x0,_0x273476,_0x175667,_0x3fad2d=0x0;_0x175667=_0x9fcfc1['charAt'](_0x3fad2d++);~_0x175667&&(_0x273476=_0x4408ab%0x4?_0x273476*0x40+_0x175667:_0x175667,_0x4408ab++%0x4)?_0x57320d+=String['fromCharCode'](0xff&_0x273476>>(-0x2*_0x4408ab&0x6)):0x0){_0x175667=_0x485eb4['indexOf'](_0x175667);}for(let _0x124035=0x0,_0x308183=_0x57320d['length'];_0x124035<_0x308183;_0x124035++){_0xcd9c3+='%'+('00'+_0x57320d['charCodeAt'](_0x124035)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xcd9c3);};_0x2562['YVqkby']=_0xbd1a13,_0x2562['adVWxf']={},_0x2562['rChySe']=!![];}const _0xf7641b=_0x21b8e2[0x0],_0x324db9=_0x4535c7+_0xf7641b,_0xf4cdbb=_0x2562['adVWxf'][_0x324db9];return!_0xf4cdbb?(_0x25626b=_0x2562['YVqkby'](_0x25626b),_0x2562['adVWxf'][_0x324db9]=_0x25626b):_0x25626b=_0xf4cdbb,_0x25626b;}export async function handleStatus(_0x2ad5e7,_0x43cd7d){const _0x3ccb46=_0x2562,_0x54a3c6={'WsKWq':function(_0x2c4011,_0x585e46){return _0x2c4011(_0x585e46);},'OqmAA':function(_0x545898,_0x3b75d2){return _0x545898(_0x3b75d2);}},{seq:_0x221c1e}=_0x2ad5e7[_0x3ccb46(0x8c)+'s'],_0x3d45ec=_0x54a3c6['WsKWq'](Number,_0x221c1e);if(!_0x3d45ec||_0x3d45ec<=0x0)return _0x43cd7d['statu'+'s'](0x190)[_0x3ccb46(0x98)](_0x54a3c6[_0x3ccb46(0x92)](_0xe7f1f6,_0x3ccb46(0x8a)+_0x3ccb46(0x93)+'q'));const _0xd8319d=await _0x2d1de1[_0x3ccb46(0x9a)+_0x3ccb46(0x81)](_0x3d45ec);return _0x54a3c6[_0x3ccb46(0x82)](_0x48c2e8,_0xd8319d);}
1
+ /**
2
+ * SMTP API 핸들러
3
+ *
4
+ * 앱 서버가 직접 처리하는 이유:
5
+ * - 로컬 템플릿(templates/*.html) 렌더링 후 body_html을 완성하여 Go 서버로 전달
6
+ * - 프록시 패스스루로는 앱 서버 로컬 파일에 접근 불가
7
+ *
8
+ * 라우트에 없는 /api/v1/smtp/* 경로는 proxy/register.ts가 Go 서버로 패스스루한다.
9
+ */
10
+
11
+ import type { FastifyRequest, FastifyReply } from "fastify";
12
+ import { ok, fail, sendEmail, entityServer } from "@gateway/api";
13
+ import type { SendEmailParams } from "@gateway/api";
14
+
15
+ // ─── 핸들러 ──────────────────────────────────────────────────────────────────
16
+
17
+ /**
18
+ * POST /api/v1/smtp/send
19
+ *
20
+ * templateName이 지정되면 로컬 templates/ 에서 렌더링 후 Go 서버에 전달.
21
+ * templateName 없이 body_html/body_text만 지정하면 그대로 전달.
22
+ */
23
+ export async function handleSend(request: FastifyRequest, reply: FastifyReply) {
24
+ const params = (request.body ?? {}) as SendEmailParams;
25
+
26
+ if (!params.to || params.to.length === 0) {
27
+ return reply.status(400).send(fail("to is required"));
28
+ }
29
+
30
+ const seq = await sendEmail(params);
31
+ return ok({ seq });
32
+ }
33
+
34
+ /**
35
+ * GET /api/v1/smtp/status/:seq
36
+ *
37
+ * Go 서버에 발송 상태를 조회한다.
38
+ */
39
+ export async function handleStatus(
40
+ request: FastifyRequest,
41
+ reply: FastifyReply,
42
+ ) {
43
+ const { seq } = request.params as { seq: string };
44
+ const seqNum = Number(seq);
45
+
46
+ if (!seqNum || seqNum <= 0) {
47
+ return reply.status(400).send(fail("Invalid seq"));
48
+ }
49
+
50
+ const result = await entityServer.smtpStatus(seqNum);
51
+ return ok(result);
52
+ }
@@ -1 +1,33 @@
1
- 'use strict';(function(_0x4076e2,_0x192565){const _0x85bac2=_0x7c50,_0x48c18e=_0x4076e2();while(!![]){try{const _0x24e9ec=-parseInt(_0x85bac2(0x113))/0x1*(-parseInt(_0x85bac2(0x114))/0x2)+-parseInt(_0x85bac2(0x10b))/0x3*(parseInt(_0x85bac2(0x109))/0x4)+-parseInt(_0x85bac2(0x112))/0x5+-parseInt(_0x85bac2(0x117))/0x6*(parseInt(_0x85bac2(0x119))/0x7)+parseInt(_0x85bac2(0x115))/0x8+-parseInt(_0x85bac2(0x108))/0x9+parseInt(_0x85bac2(0x10e))/0xa;if(_0x24e9ec===_0x192565)break;else _0x48c18e['push'](_0x48c18e['shift']());}catch(_0x2b3a43){_0x48c18e['push'](_0x48c18e['shift']());}}}(_0x3462,0xf1171));import _0x411173 from'fastify-plugin';import{dirname as _0x2e78b4,join as _0x40a481}from'node:path';function _0x3462(){const _0xb1814=['CMvNAxm','ndK4ndu2ndbSv1foqu8','qxHezfK','Bgf5B3u','DgvYzwq','nJC5mJyWnu1Nv0fsyG','mtuWotqXDfzdANfd','mKrPq21ytq','nZaZnda4mgH3B05krW','svzMrLe','mZiYnZa1oenwsgHXzW','zgvIDwC','mJfvsNrWzxq','ihnOyxi','Ew91Dca','Dc5ODg0','odm3odqXnwryD2nysW','ndq5nZeWmeLRCwvsAW','zwqGBge','m1bKwhHwuW','ugfiCvu'];_0x3462=function(){return _0xb1814;};return _0x3462();}import{fileURLToPath as _0x18bed3}from'node:url';import{setSharedLayout as _0x1fa967}from'@gateway/api';import{logger as _0x10729f}from'@gateway/api';function _0x7c50(_0x4e6c64,_0x2f4724){_0x4e6c64=_0x4e6c64-0x108;const _0x346247=_0x3462();let _0x7c50db=_0x346247[_0x4e6c64];if(_0x7c50['jlmJIR']===undefined){var _0x1bc181=function(_0xc3205d){const _0x18f49b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x32ef29='',_0xadd810='';for(let _0x126656=0x0,_0x4a1c80,_0x506410,_0x331fe0=0x0;_0x506410=_0xc3205d['charAt'](_0x331fe0++);~_0x506410&&(_0x4a1c80=_0x126656%0x4?_0x4a1c80*0x40+_0x506410:_0x506410,_0x126656++%0x4)?_0x32ef29+=String['fromCharCode'](0xff&_0x4a1c80>>(-0x2*_0x126656&0x6)):0x0){_0x506410=_0x18f49b['indexOf'](_0x506410);}for(let _0x4702aa=0x0,_0xae0953=_0x32ef29['length'];_0x4702aa<_0xae0953;_0x4702aa++){_0xadd810+='%'+('00'+_0x32ef29['charCodeAt'](_0x4702aa)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xadd810);};_0x7c50['AnKrnI']=_0x1bc181,_0x7c50['XFOwoi']={},_0x7c50['jlmJIR']=!![];}const _0x6904d8=_0x346247[0x0],_0x22d8e7=_0x4e6c64+_0x6904d8,_0x3c9cf3=_0x7c50['XFOwoi'][_0x22d8e7];return!_0x3c9cf3?(_0x7c50db=_0x7c50['AnKrnI'](_0x7c50db),_0x7c50['XFOwoi'][_0x22d8e7]=_0x7c50db):_0x7c50db=_0x3c9cf3,_0x7c50db;}const p=_0x2e78b4(_0x18bed3(import.meta.url));export default _0x411173(async _0x3e1f23=>{const _0x346909=_0x7c50,_0x360427={'PaHqU':function(_0x2ac8e5,_0x383454,_0x59b5b9,_0x4c97b0){return _0x2ac8e5(_0x383454,_0x59b5b9,_0x4c97b0);},'IVfFQ':_0x346909(0x110)+_0x346909(0x11c)+'l','AxDdY':function(_0xb0d69f,_0x5f329f){return _0xb0d69f(_0x5f329f);}},_0x44b7c2=_0x360427[_0x346909(0x10c)](_0x40a481,p,'templ'+'ates',_0x360427[_0x346909(0x116)]);_0x360427[_0x346909(0x10f)](_0x1fa967,_0x44b7c2),_0x10729f[_0x346909(0x118)]({'layout':_0x44b7c2},'Email'+_0x346909(0x11a)+_0x346909(0x10a)+_0x346909(0x11b)+_0x346909(0x10d)+_0x346909(0x111));},{'name':'smtp'});
1
+ /**
2
+ * SMTP 플러그인
3
+ *
4
+ * 앱 서버 내 모든 이메일 발송에 사용할 공유 레이아웃을 등록한다.
5
+ * 알파벳 순 플러그인 로드 중 초기화되며, 이후의 모든 renderTemplate 호출에서
6
+ * plugins/smtp/templates/layout.html 을 공통 래퍼로 사용한다.
7
+ *
8
+ * HTTP 라우트는 routes.ts 에서 등록하며, proxy/register.ts 의 패스스루보다
9
+ * 먼저 처리된다 (system/routes/loader.ts → system/proxy/register.ts 순서).
10
+ *
11
+ * - POST /api/v1/smtp/send → 로컬 템플릿 렌더링 후 Go 서버로 발송
12
+ * - GET /api/v1/smtp/status/:seq → Go 서버에 발송 상태 조회
13
+ *
14
+ * routes.ts에 없는 /api/v1/smtp/* 경로는 Go 서버로 패스스루된다.
15
+ */
16
+
17
+ import fp from "fastify-plugin";
18
+ import type { FastifyInstance } from "fastify";
19
+ import { dirname, join } from "node:path";
20
+ import { fileURLToPath } from "node:url";
21
+ import { setSharedLayout } from "@gateway/api";
22
+ import { logger } from "@gateway/api";
23
+
24
+ const __dirname = dirname(fileURLToPath(import.meta.url));
25
+
26
+ export default fp(
27
+ async (_app: FastifyInstance) => {
28
+ const layoutPath = join(__dirname, "templates", "layout.html");
29
+ setSharedLayout(layoutPath);
30
+ logger.debug({ layout: layoutPath }, "Email shared layout registered");
31
+ },
32
+ { name: "smtp" },
33
+ );
@@ -1 +1,19 @@
1
- 'use strict';function _0x28de(_0x554afe,_0x1e1a70){_0x554afe=_0x554afe-0x1d7;var _0x5243cf=_0x5243();var _0x28de8f=_0x5243cf[_0x554afe];if(_0x28de['bFPMsX']===undefined){var _0xb4bbd5=function(_0x15e31e){var _0x468f1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0xd18d1d='',_0x52dc8d='';for(var _0x107dbb=0x0,_0x19782e,_0x257786,_0xa6f0a2=0x0;_0x257786=_0x15e31e['charAt'](_0xa6f0a2++);~_0x257786&&(_0x19782e=_0x107dbb%0x4?_0x19782e*0x40+_0x257786:_0x257786,_0x107dbb++%0x4)?_0xd18d1d+=String['fromCharCode'](0xff&_0x19782e>>(-0x2*_0x107dbb&0x6)):0x0){_0x257786=_0x468f1['indexOf'](_0x257786);}for(var _0x44597f=0x0,_0x6c8b16=_0xd18d1d['length'];_0x44597f<_0x6c8b16;_0x44597f++){_0x52dc8d+='%'+('00'+_0xd18d1d['charCodeAt'](_0x44597f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x52dc8d);};_0x28de['PWTWRZ']=_0xb4bbd5,_0x28de['CtHHmG']={},_0x28de['bFPMsX']=!![];}var _0x38f4a8=_0x5243cf[0x0],_0x3e6dd0=_0x554afe+_0x38f4a8,_0xad11=_0x28de['CtHHmG'][_0x3e6dd0];return!_0xad11?(_0x28de8f=_0x28de['PWTWRZ'](_0x28de8f),_0x28de['CtHHmG'][_0x3e6dd0]=_0x28de8f):_0x28de8f=_0xad11,_0x28de8f;}(function(_0x34854b,_0x11e49d){var _0x1e9c10=_0x28de,_0x44beaf=_0x34854b();while(!![]){try{var _0x409bdc=parseInt(_0x1e9c10(0x1d7))/0x1*(parseInt(_0x1e9c10(0x1e2))/0x2)+-parseInt(_0x1e9c10(0x1de))/0x3+-parseInt(_0x1e9c10(0x1dc))/0x4+-parseInt(_0x1e9c10(0x1db))/0x5+parseInt(_0x1e9c10(0x1e4))/0x6*(-parseInt(_0x1e9c10(0x1da))/0x7)+parseInt(_0x1e9c10(0x1d9))/0x8+parseInt(_0x1e9c10(0x1dd))/0x9;if(_0x409bdc===_0x11e49d)break;else _0x44beaf['push'](_0x44beaf['shift']());}catch(_0x484143){_0x44beaf['push'](_0x44beaf['shift']());}}}(_0x5243,0x63ace));function _0x5243(){var _0xfa8a36=['mtHcEe1hD1q','mtzoDwnQENe','l3nLBMq','mtuWodeYofDvwMz0yW','mtm4ndqWngLvv21krW','mteWntmXmhLIv0nwBa','mJmWnta5nLHryLD1ua','mtqZndaZmZblrLLjEgS','mJaZnZKWmfL6tLDYwG','AgfUzgW','z2v0','Cg9ZDa','odCWndjhs0rgEee','zvn0yxq'];_0x5243=function(){return _0xfa8a36;};return _0x5243();}import*as _0x48beca from'./handlers.ts';export default async function e(_0x1d23ca){var _0x45e33f=_0x28de;_0x1d23ca[_0x45e33f(0x1e1)](_0x45e33f(0x1d8),_0x48beca[_0x45e33f(0x1df)+'eSend']),_0x1d23ca[_0x45e33f(0x1e0)]('/stat'+'us/:s'+'eq',_0x48beca['handl'+_0x45e33f(0x1e3)+'us']);}
1
+ /**
2
+ * SMTP 라우트 테이블
3
+ * 등록 경로: /api/v1/smtp/*
4
+ *
5
+ * 여기서 처리되지 않는 /api/v1/smtp/* 경로는
6
+ * system/proxy/register.ts 에 의해 Go 서버로 패스스루된다.
7
+ */
8
+
9
+ import type { FastifyInstance } from "fastify";
10
+ import * as h from "./handlers.ts";
11
+
12
+ /** SMTP 라우트를 등록한다 */
13
+ export default async function smtpRoutes(app: FastifyInstance) {
14
+ // POST /api/v1/smtp/send — 로컬 템플릿 렌더링 후 Go 서버로 발송
15
+ app.post("/send", h.handleSend);
16
+
17
+ // GET /api/v1/smtp/status/:seq — 발송 상태 조회
18
+ app.get("/status/:seq", h.handleStatus);
19
+ }
@@ -1 +1,8 @@
1
- 'use strict';(function(_0x430dcc,_0x37cee7){var _0x648380=_0x4480,_0x790833=_0x430dcc();while(!![]){try{var _0x547969=-parseInt(_0x648380(0x15a))/0x1*(-parseInt(_0x648380(0x157))/0x2)+-parseInt(_0x648380(0x151))/0x3+parseInt(_0x648380(0x155))/0x4*(-parseInt(_0x648380(0x154))/0x5)+-parseInt(_0x648380(0x152))/0x6+parseInt(_0x648380(0x156))/0x7+-parseInt(_0x648380(0x158))/0x8+parseInt(_0x648380(0x159))/0x9*(parseInt(_0x648380(0x153))/0xa);if(_0x547969===_0x37cee7)break;else _0x790833['push'](_0x790833['shift']());}catch(_0x336157){_0x790833['push'](_0x790833['shift']());}}}(_0xd96d,0x4b1f3));function _0x4480(_0x1b5c60,_0x232e0f){_0x1b5c60=_0x1b5c60-0x151;var _0xd96d41=_0xd96d();var _0x448031=_0xd96d41[_0x1b5c60];if(_0x4480['AVaCyo']===undefined){var _0x2a5a90=function(_0x67b814){var _0x2b8aba='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x160413='',_0x493892='';for(var _0x2e0713=0x0,_0x157c26,_0x5cbae2,_0x350ec7=0x0;_0x5cbae2=_0x67b814['charAt'](_0x350ec7++);~_0x5cbae2&&(_0x157c26=_0x2e0713%0x4?_0x157c26*0x40+_0x5cbae2:_0x5cbae2,_0x2e0713++%0x4)?_0x160413+=String['fromCharCode'](0xff&_0x157c26>>(-0x2*_0x2e0713&0x6)):0x0){_0x5cbae2=_0x2b8aba['indexOf'](_0x5cbae2);}for(var _0x1f0b9b=0x0,_0x5f2492=_0x160413['length'];_0x1f0b9b<_0x5f2492;_0x1f0b9b++){_0x493892+='%'+('00'+_0x160413['charCodeAt'](_0x1f0b9b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x493892);};_0x4480['uTasIH']=_0x2a5a90,_0x4480['EoxFWp']={},_0x4480['AVaCyo']=!![];}var _0x31df7b=_0xd96d41[0x0],_0x4f6df2=_0x1b5c60+_0x31df7b,_0xa32a7f=_0x4480['EoxFWp'][_0x4f6df2];return!_0xa32a7f?(_0x448031=_0x4480['uTasIH'](_0x448031),_0x4480['EoxFWp'][_0x4f6df2]=_0x448031):_0x448031=_0xa32a7f,_0x448031;}function _0xd96d(){var _0x4934d6=['mtbfs1HqsfO','ndCWsLb0zKD3','mtqZotjMvMv5DM8','ndG1mte0qvrhrMXQ','nJu5mtaYAwvUq1ze','mtCXoduYmeHptwfnEq','otiXnJi0m1vlEvfsua','mxrKwKDnvG','nJqZmtf3txnyEwW','mZi0ndmWmK5KDKLJzq'];_0xd96d=function(){return _0x4934d6;};return _0xd96d();}
1
+ /** plugins/smtp/config.json 스키마 */
2
+ export interface SmtpPluginConfig {
3
+ enabled: boolean; // 라우트 활성화 여부 (false면 routes.ts 등록 안 됨)
4
+
5
+ deploy?: boolean; // 빌드 시 dist에서 제외 여부
6
+
7
+ minify?: boolean; // 빌드 시 난독화 여부
8
+ }
@@ -1 +1 @@
1
- 'use strict';function _0xe622(){var _0x1e9755=['mJC5nJe2mdrpD1vQvMS','mtm2nti0tK9QD3rN','mtzgsMnIzg8','mtbcBKzcqNO','nZi0oda5nK9KBxbQBW','nZa4z25Oq2DY','mtC4mtK4AfHxrfrx','mJi1ngHrrvngDG','mJaXndq3ow55wxruyW','ngDrCePdBa','mJm2ntmWA2DpyxzL'];_0xe622=function(){return _0x1e9755;};return _0xe622();}function _0x608c(_0x4ad223,_0xcf770c){_0x4ad223=_0x4ad223-0x1ee;var _0xe6225a=_0xe622();var _0x608c88=_0xe6225a[_0x4ad223];if(_0x608c['mzagsW']===undefined){var _0x2ee4d4=function(_0xc7fbcf){var _0x5976e0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x50ff95='',_0x25dbf2='';for(var _0x2aab07=0x0,_0x2e6241,_0x30bc84,_0x16b36e=0x0;_0x30bc84=_0xc7fbcf['charAt'](_0x16b36e++);~_0x30bc84&&(_0x2e6241=_0x2aab07%0x4?_0x2e6241*0x40+_0x30bc84:_0x30bc84,_0x2aab07++%0x4)?_0x50ff95+=String['fromCharCode'](0xff&_0x2e6241>>(-0x2*_0x2aab07&0x6)):0x0){_0x30bc84=_0x5976e0['indexOf'](_0x30bc84);}for(var _0x2983e9=0x0,_0x55baea=_0x50ff95['length'];_0x2983e9<_0x55baea;_0x2983e9++){_0x25dbf2+='%'+('00'+_0x50ff95['charCodeAt'](_0x2983e9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x25dbf2);};_0x608c['ECYsSf']=_0x2ee4d4,_0x608c['jtvbBH']={},_0x608c['mzagsW']=!![];}var _0x4ceb8c=_0xe6225a[0x0],_0x2ad51a=_0x4ad223+_0x4ceb8c,_0x228fa1=_0x608c['jtvbBH'][_0x2ad51a];return!_0x228fa1?(_0x608c88=_0x608c['ECYsSf'](_0x608c88),_0x608c['jtvbBH'][_0x2ad51a]=_0x608c88):_0x608c88=_0x228fa1,_0x608c88;}(function(_0x4f1e35,_0x273205){var _0x13d7ba=_0x608c,_0x3ae7f5=_0x4f1e35();while(!![]){try{var _0x5a855e=-parseInt(_0x13d7ba(0x1f5))/0x1*(parseInt(_0x13d7ba(0x1f8))/0x2)+parseInt(_0x13d7ba(0x1f0))/0x3*(-parseInt(_0x13d7ba(0x1f1))/0x4)+-parseInt(_0x13d7ba(0x1ee))/0x5+parseInt(_0x13d7ba(0x1f4))/0x6*(parseInt(_0x13d7ba(0x1f6))/0x7)+-parseInt(_0x13d7ba(0x1f3))/0x8+parseInt(_0x13d7ba(0x1f7))/0x9*(-parseInt(_0x13d7ba(0x1f2))/0xa)+parseInt(_0x13d7ba(0x1ef))/0xb;if(_0x5a855e===_0x273205)break;else _0x3ae7f5['push'](_0x3ae7f5['shift']());}catch(_0x195dd8){_0x3ae7f5['push'](_0x3ae7f5['shift']());}}}(_0xe622,0xd307f));export*from'./config.ts';
1
+ export * from "./config.ts";
@@ -67,14 +67,14 @@ DB_PASSWORD_DEVELOPMENT=password
67
67
 
68
68
  ### 항목 설명
69
69
 
70
- | 항목 | 필수 | 설명 |
71
- | -------------------- | :--: | ---------------------------------------------------------------------------------------------- |
72
- | `NODE_ENV` | ✅ | `development` \| `production` \| `test` |
73
- | `ENTITY_SERVER_URL` | ✅ | Entity Server 주소 — Entity Server의 `server.json` `port`(기본: 47200)와 일치 |
74
- | `ENTITY_API_KEY` | ✅ | Entity Server 관리자 화면에서 발급한 API Key |
75
- | `ENTITY_HMAC_SECRET` | ✅ | API Key 발급 시 함께 제공되는 HMAC Secret, 32자 이상 |
70
+ | 항목 | 필수 | 설명 |
71
+ | -------------------- | :--: | --------------------------------------------------------------------------------------------------------- |
72
+ | `NODE_ENV` | ✅ | `development` \| `production` \| `test` |
73
+ | `ENTITY_SERVER_URL` | ✅ | Entity Server 주소 — Entity Server의 `server.json` `port`(기본: 47200)와 일치 |
74
+ | `ENTITY_API_KEY` | ✅ | Entity Server 관리자 화면에서 발급한 API Key |
75
+ | `ENTITY_HMAC_SECRET` | ✅ | API Key 발급 시 함께 제공되는 HMAC Secret, 32자 이상 |
76
76
  | `JWT_SECRET` | ✅ | **Entity Server와 반드시 동일한 값**, 32자 이상 — Entity Server `configs/auth/jwt.json`의 `${JWT_SECRET}` |
77
- | `DB_*` | - | `database.json`에서 `${변수명}` 형태로 참조할 때만 필요 |
77
+ | `DB_*` | - | `database.json`에서 `${변수명}` 형태로 참조할 때만 필요 |
78
78
 
79
79
  ### Entity Server 키 맞추기
80
80
 
@@ -6,16 +6,18 @@
6
6
 
7
7
  ## 목차
8
8
 
9
- | 스크립트 | 용도 |
10
- | ---------------------------------------- | ------------------------------------- |
11
- | [run.sh](#1-runsh) | 서버 실행 (개발/프로덕션) |
12
- | [build.sh](#2-buildsh) | TypeScript 빌드 + dist/ 패키징 |
13
- | [push.sh](#3-pushsh) | 버전 관리 + Git push |
14
- | [release.sh](#4-releasesh) | 빌드 + 버전업 + push (원스텝) |
15
- | [update-server.sh](#5-update-serversh) | 최신 gateway 코어 업데이트 |
16
- | [entity.sh](#6-entitysh) | Gateway 전용 엔티티 테이블 생성 |
17
- | [reset-all.sh](#7-reset-allsh) | Gateway 전용 엔티티 테이블 초기화 |
18
- | [gen-table-type.sh](#8-gen-table-typesh) | 엔티티 Kysely 테이블 타입 자동 생성 |
9
+ | 스크립트 | 용도 |
10
+ | ------------------------------------------ | ------------------------------------- |
11
+ | [run.sh](#1-runsh) | 서버 실행 (개발/프로덕션) |
12
+ | [build.sh](#2-buildsh) | TypeScript 빌드 + dist/ 패키징 |
13
+ | [push.sh](#3-pushsh) | 버전 관리 + Git push |
14
+ | [release.sh](#4-releasesh) | 빌드 + 버전업 + push (원스텝) |
15
+ | [update-server.sh](#5-update-serversh) | 최신 gateway 코어 업데이트 |
16
+ | [service-install.sh](#6-service-installsh) | systemd 서비스 등록 |
17
+ | [service-remove.sh](#7-service-removesh) | systemd 서비스 제거 |
18
+ | [entity.sh](#8-entitysh) | Gateway 전용 엔티티 테이블 생성 |
19
+ | [reset-all.sh](#9-reset-allsh) | Gateway 전용 엔티티 테이블 초기화 |
20
+ | [gen-table-type.sh](#10-gen-table-typesh) | 엔티티 → Kysely 테이블 타입 자동 생성 |
19
21
 
20
22
  ---
21
23
 
@@ -166,7 +168,7 @@ GitHub PR 기반으로 `현재 브랜치 -> main -> release` 승격을 진행합
166
168
  생성된 Gateway 프로젝트의 코어 파일을 최신 npm 패키지 버전으로 업데이트합니다.
167
169
 
168
170
  ```bash
169
- ./scripts/update-server.sh version # 현재 코어 버전 + 최신 버전 확인
171
+ ./scripts/update-server.sh # 도움말 + 현재 코어 버전 + 최신 버전 확인
170
172
  ./scripts/update-server.sh latest # 최신 버전으로 업데이트
171
173
  ./scripts/update-server.sh 0.0.8 # 특정 버전으로 업데이트
172
174
  ```
@@ -179,7 +181,7 @@ GitHub PR 기반으로 `현재 브랜치 -> main -> release` 승격을 진행합
179
181
 
180
182
  - `system.js`
181
183
  - `system-api.js`
182
- - `scripts/run.sh`, `scripts/entity.sh`, `scripts/reset-all.sh`, `scripts/update-server.sh`
184
+ - `scripts/run.sh`, `scripts/entity.sh`, `scripts/reset-all.sh`, `scripts/update-server.sh`, `scripts/service-install.sh`, `scripts/service-remove.sh`
183
185
  - `docs/`
184
186
  - `tsconfig.json`
185
187
  - `.env.example`
@@ -197,7 +199,35 @@ GitHub PR 기반으로 `현재 브랜치 -> main -> release` 승격을 진행합
197
199
 
198
200
  ---
199
201
 
200
- ## 6) entity.sh
202
+ ## 6) service-install.sh
203
+
204
+ Gateway 프로젝트를 systemd 서비스로 등록합니다.
205
+
206
+ ```bash
207
+ sudo ./scripts/service-install.sh
208
+ sudo ./scripts/service-install.sh --no-start
209
+ ```
210
+
211
+ - 서비스명은 `configs/server.json`의 `namespace`를 기준으로 자동 계산됩니다.
212
+ - 기본값이 `entity-app-server`면 서비스명도 그대로 `entity-app-server`입니다.
213
+ - 실제 실행은 `./scripts/run.sh start`를 사용합니다.
214
+
215
+ ---
216
+
217
+ ## 7) service-remove.sh
218
+
219
+ 등록된 systemd 서비스를 중지하고 제거합니다.
220
+
221
+ ```bash
222
+ sudo ./scripts/service-remove.sh
223
+ ```
224
+
225
+ - 등록된 서비스가 없으면 안내만 출력하고 종료합니다.
226
+ - 다시 등록할 때는 `sudo ./scripts/service-install.sh`를 사용합니다.
227
+
228
+ ---
229
+
230
+ ## 8) entity.sh
201
231
 
202
232
  `entities/` 폴더의 JSON 스키마를 entity-server에 등록(테이블 생성)합니다.
203
233
 
@@ -236,7 +266,7 @@ GitHub PR 기반으로 `현재 브랜치 -> main -> release` 승격을 진행합
236
266
 
237
267
  ---
238
268
 
239
- ## 7) reset-all.sh
269
+ ## 9) reset-all.sh
240
270
 
241
271
  Gateway 전용 엔티티 테이블을 **드롭 후 재생성**합니다.
242
272
 
@@ -266,7 +296,7 @@ Gateway 전용 엔티티 테이블을 **드롭 후 재생성**합니다.
266
296
 
267
297
  ---
268
298
 
269
- ## 8) gen-table-type.sh
299
+ ## 10) gen-table-type.sh
270
300
 
271
301
  엔티티 JSON을 기준으로 Kysely 타입 정의를 생성합니다.
272
302
 
@@ -351,10 +381,10 @@ npm install
351
381
 
352
382
  `.env` 파일에 아래 변수가 설정되어 있어야 합니다:
353
383
 
354
- | 변수 | 설명 |
355
- | -------------------- | ------------------------- |
356
- | `ENTITY_SERVER_URL` | 엔티티서버 주소 |
357
- | `ENTITY_API_KEY` | 엔티티서버 API 키 |
384
+ | 변수 | 설명 |
385
+ | -------------------- | ------------------------------------- |
386
+ | `ENTITY_SERVER_URL` | 엔티티서버 주소 |
387
+ | `ENTITY_API_KEY` | 엔티티서버 API 키 |
358
388
  | `ENTITY_HMAC_SECRET` | HMAC-SHA256 서명용 시크릿 (32자 이상) |
359
389
 
360
390
  ### 인증 방식
@@ -337,6 +337,9 @@ _print_help() {
337
337
 
338
338
  if [ $# -eq 0 ]; then
339
339
  _print_help
340
+ echo ""
341
+ echo "현재 상태:"
342
+ show_status
340
343
  exit 0
341
344
  fi
342
345