create-entity-app-server 0.1.15 → 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 (52) hide show
  1. package/bin/create.js +2 -2
  2. package/dist-create/template/.env +2 -2
  3. package/dist-create/template/.env.example +2 -2
  4. package/dist-create/template/.gateway-version +1 -1
  5. package/dist-create/template/app/plugins/ocr/cache.ts +1 -1
  6. package/dist-create/template/app/plugins/ocr/config.ts +1 -1
  7. package/dist-create/template/app/plugins/ocr/direction.ts +1 -1
  8. package/dist-create/template/app/plugins/ocr/dispatch.ts +1 -1
  9. package/dist-create/template/app/plugins/ocr/entity-adapter.ts +1 -1
  10. package/dist-create/template/app/plugins/ocr/errors.ts +1 -1
  11. package/dist-create/template/app/plugins/ocr/handlers.ts +1 -1
  12. package/dist-create/template/app/plugins/ocr/index.ts +1 -1
  13. package/dist-create/template/app/plugins/ocr/llm-parser.ts +1 -1
  14. package/dist-create/template/app/plugins/ocr/parsing-pipeline.ts +1 -1
  15. package/dist-create/template/app/plugins/ocr/pdf-converter.ts +1 -1
  16. package/dist-create/template/app/plugins/ocr/preprocessor.ts +1 -1
  17. package/dist-create/template/app/plugins/ocr/providers/aws.ts +1 -1
  18. package/dist-create/template/app/plugins/ocr/providers/azure.ts +1 -1
  19. package/dist-create/template/app/plugins/ocr/providers/google.ts +1 -1
  20. package/dist-create/template/app/plugins/ocr/providers/index.ts +1 -1
  21. package/dist-create/template/app/plugins/ocr/providers/naver.ts +1 -1
  22. package/dist-create/template/app/plugins/ocr/providers/tesseract.ts +1 -1
  23. package/dist-create/template/app/plugins/ocr/providers/upstage.ts +1 -1
  24. package/dist-create/template/app/plugins/ocr/quota.ts +1 -1
  25. package/dist-create/template/app/plugins/ocr/refiner.ts +1 -1
  26. package/dist-create/template/app/plugins/ocr/routes.ts +1 -1
  27. package/dist-create/template/app/plugins/ocr/service.ts +1 -1
  28. package/dist-create/template/app/plugins/ocr/template-loader.ts +1 -1
  29. package/dist-create/template/app/plugins/ocr/template-matcher.ts +1 -1
  30. package/dist-create/template/app/plugins/ocr/types/config.ts +1 -1
  31. package/dist-create/template/app/plugins/ocr/types/driver.ts +1 -1
  32. package/dist-create/template/app/plugins/ocr/types/index.ts +1 -1
  33. package/dist-create/template/app/plugins/ocr/types/parsed.ts +1 -1
  34. package/dist-create/template/app/plugins/ocr/types/store.ts +1 -1
  35. package/dist-create/template/app/plugins/ocr/types/template.ts +1 -1
  36. package/dist-create/template/app/plugins/ocr/utils.ts +1 -1
  37. package/dist-create/template/app/plugins/smtp/config.ts +41 -1
  38. package/dist-create/template/app/plugins/smtp/handlers.ts +52 -1
  39. package/dist-create/template/app/plugins/smtp/index.ts +33 -1
  40. package/dist-create/template/app/plugins/smtp/routes.ts +19 -1
  41. package/dist-create/template/app/plugins/smtp/types/config.ts +8 -1
  42. package/dist-create/template/app/plugins/smtp/types/index.ts +1 -1
  43. package/dist-create/template/docs/configs.md +12 -14
  44. package/dist-create/template/docs/getting-started.md +5 -3
  45. package/dist-create/template/docs/scripts-guide.md +51 -22
  46. package/dist-create/template/scripts/run.sh +229 -6
  47. package/dist-create/template/scripts/service-install.sh +174 -0
  48. package/dist-create/template/scripts/service-remove.sh +102 -0
  49. package/dist-create/template/scripts/update-server.sh +25 -20
  50. package/dist-create/template/system-api.js +1 -1
  51. package/dist-create/template/system.js +1 -1
  52. package/package.json +1 -1
@@ -1 +1 @@
1
- 'use strict';(function(_0x2767da,_0x4c2400){var _0x337d56=_0x2776,_0x492569=_0x2767da();while(!![]){try{var _0x57a24a=-parseInt(_0x337d56(0x12f))/0x1+parseInt(_0x337d56(0x128))/0x2*(parseInt(_0x337d56(0x130))/0x3)+parseInt(_0x337d56(0x12b))/0x4*(parseInt(_0x337d56(0x129))/0x5)+-parseInt(_0x337d56(0x12a))/0x6*(-parseInt(_0x337d56(0x12d))/0x7)+-parseInt(_0x337d56(0x131))/0x8*(parseInt(_0x337d56(0x127))/0x9)+parseInt(_0x337d56(0x126))/0xa+parseInt(_0x337d56(0x12c))/0xb*(-parseInt(_0x337d56(0x12e))/0xc);if(_0x57a24a===_0x4c2400)break;else _0x492569['push'](_0x492569['shift']());}catch(_0x41bb20){_0x492569['push'](_0x492569['shift']());}}}(_0x1301,0xeeec4));function _0x1301(){var _0x8fb3fd=['mti1nZe0mNndzuLvCq','m0XQrgntta','otG3ndrbshD5u1m','mtaYmdm4mdbbC3P5rgW','otK5EhjYDeLv','mJaWmdi2ohjPy1jUDW','mJa5ndGWEgXYA2fg','mZK1nhfzCeHVtq','mtaWEKjOv1vJ','mti5mtrSrNHhtMK','nZm4nxPMCwHhAW','mtyWofHes0PABG'];_0x1301=function(){return _0x8fb3fd;};return _0x1301();}function _0x2776(_0x2c0bb0,_0x1c4b19){_0x2c0bb0=_0x2c0bb0-0x126;var _0x13017d=_0x1301();var _0x27763f=_0x13017d[_0x2c0bb0];if(_0x2776['FjVCBn']===undefined){var _0x50225d=function(_0xa13520){var _0x237aad='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x5d1a59='',_0x11107b='';for(var _0x480d45=0x0,_0x493407,_0x409fec,_0xe50394=0x0;_0x409fec=_0xa13520['charAt'](_0xe50394++);~_0x409fec&&(_0x493407=_0x480d45%0x4?_0x493407*0x40+_0x409fec:_0x409fec,_0x480d45++%0x4)?_0x5d1a59+=String['fromCharCode'](0xff&_0x493407>>(-0x2*_0x480d45&0x6)):0x0){_0x409fec=_0x237aad['indexOf'](_0x409fec);}for(var _0x488b87=0x0,_0x1aee90=_0x5d1a59['length'];_0x488b87<_0x1aee90;_0x488b87++){_0x11107b+='%'+('00'+_0x5d1a59['charCodeAt'](_0x488b87)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x11107b);};_0x2776['XGkTzi']=_0x50225d,_0x2776['lZzAPu']={},_0x2776['FjVCBn']=!![];}var _0x21b1de=_0x13017d[0x0],_0x5f20b4=_0x2c0bb0+_0x21b1de,_0x47bc65=_0x2776['lZzAPu'][_0x5f20b4];return!_0x47bc65?(_0x27763f=_0x2776['XGkTzi'](_0x27763f),_0x2776['lZzAPu'][_0x5f20b4]=_0x27763f):_0x27763f=_0x47bc65,_0x27763f;}
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(_0x4e02af,_0x313eb5){var _0x3b0d88=_0x4d84,_0x2d8dd2=_0x4e02af();while(!![]){try{var _0x123609=-parseInt(_0x3b0d88(0x8f))/0x1+-parseInt(_0x3b0d88(0x94))/0x2+parseInt(_0x3b0d88(0x95))/0x3+parseInt(_0x3b0d88(0x92))/0x4+-parseInt(_0x3b0d88(0x93))/0x5*(-parseInt(_0x3b0d88(0x90))/0x6)+parseInt(_0x3b0d88(0x91))/0x7+-parseInt(_0x3b0d88(0x8e))/0x8;if(_0x123609===_0x313eb5)break;else _0x2d8dd2['push'](_0x2d8dd2['shift']());}catch(_0x487cf6){_0x2d8dd2['push'](_0x2d8dd2['shift']());}}}(_0x3974,0xc4578));export*from'./config.ts';export*from'./parsed.ts';export*from'./driver.ts';export*from'./template.ts';function _0x3974(){var _0x53538f=['mJCZmZyZoxDxvhrZza','mtuWmJu0ntzqA0n1r20','ntq3nJyXufj4zNvz','mJqZnZjytNv1DhG','nJm3mdqXm1PfzhDkEG','mJe3oty4mhjTvwXKtG','mtm1nvrdv1zlBq','ndCZodCWAePUCMfq'];_0x3974=function(){return _0x53538f;};return _0x3974();}function _0x4d84(_0x2099c9,_0x2f3bdb){_0x2099c9=_0x2099c9-0x8e;var _0x397425=_0x3974();var _0x4d8409=_0x397425[_0x2099c9];if(_0x4d84['ULQHOy']===undefined){var _0x2b0ecd=function(_0x1d22a1){var _0x35c631='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x4a9f9d='',_0x1f7440='';for(var _0x28aa3c=0x0,_0x4ab31d,_0x3fd774,_0x5051d7=0x0;_0x3fd774=_0x1d22a1['charAt'](_0x5051d7++);~_0x3fd774&&(_0x4ab31d=_0x28aa3c%0x4?_0x4ab31d*0x40+_0x3fd774:_0x3fd774,_0x28aa3c++%0x4)?_0x4a9f9d+=String['fromCharCode'](0xff&_0x4ab31d>>(-0x2*_0x28aa3c&0x6)):0x0){_0x3fd774=_0x35c631['indexOf'](_0x3fd774);}for(var _0x4aaa5c=0x0,_0x1c6935=_0x4a9f9d['length'];_0x4aaa5c<_0x1c6935;_0x4aaa5c++){_0x1f7440+='%'+('00'+_0x4a9f9d['charCodeAt'](_0x4aaa5c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1f7440);};_0x4d84['naIebL']=_0x2b0ecd,_0x4d84['PdyEOu']={},_0x4d84['ULQHOy']=!![];}var _0x4893ce=_0x397425[0x0],_0x1da0ff=_0x2099c9+_0x4893ce,_0x5bbf93=_0x4d84['PdyEOu'][_0x1da0ff];return!_0x5bbf93?(_0x4d8409=_0x4d84['naIebL'](_0x4d8409),_0x4d84['PdyEOu'][_0x1da0ff]=_0x4d8409):_0x4d8409=_0x5bbf93,_0x4d8409;}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(_0x343954,_0x323059){var _0x36171b=_0x23d2,_0x46e00f=_0x343954();while(!![]){try{var _0x123521=parseInt(_0x36171b(0x163))/0x1*(parseInt(_0x36171b(0x167))/0x2)+parseInt(_0x36171b(0x164))/0x3*(parseInt(_0x36171b(0x16c))/0x4)+parseInt(_0x36171b(0x168))/0x5+parseInt(_0x36171b(0x166))/0x6*(-parseInt(_0x36171b(0x16d))/0x7)+parseInt(_0x36171b(0x16b))/0x8*(-parseInt(_0x36171b(0x16a))/0x9)+-parseInt(_0x36171b(0x161))/0xa*(parseInt(_0x36171b(0x169))/0xb)+-parseInt(_0x36171b(0x162))/0xc*(-parseInt(_0x36171b(0x165))/0xd);if(_0x123521===_0x323059)break;else _0x46e00f['push'](_0x46e00f['shift']());}catch(_0x3f3837){_0x46e00f['push'](_0x46e00f['shift']());}}}(_0x3073,0xb1cee));function _0x23d2(_0x4b3160,_0x3f9f6f){_0x4b3160=_0x4b3160-0x161;var _0x30732c=_0x3073();var _0x23d25a=_0x30732c[_0x4b3160];if(_0x23d2['aFjKIy']===undefined){var _0x2939db=function(_0x403f72){var _0x22d7d5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x429487='',_0x422056='';for(var _0x3ff827=0x0,_0x40076d,_0x2eb7fd,_0xbd5ced=0x0;_0x2eb7fd=_0x403f72['charAt'](_0xbd5ced++);~_0x2eb7fd&&(_0x40076d=_0x3ff827%0x4?_0x40076d*0x40+_0x2eb7fd:_0x2eb7fd,_0x3ff827++%0x4)?_0x429487+=String['fromCharCode'](0xff&_0x40076d>>(-0x2*_0x3ff827&0x6)):0x0){_0x2eb7fd=_0x22d7d5['indexOf'](_0x2eb7fd);}for(var _0xcc1eba=0x0,_0x3041be=_0x429487['length'];_0xcc1eba<_0x3041be;_0xcc1eba++){_0x422056+='%'+('00'+_0x429487['charCodeAt'](_0xcc1eba)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x422056);};_0x23d2['OlAkKi']=_0x2939db,_0x23d2['plCLKI']={},_0x23d2['aFjKIy']=!![];}var _0x5c53ce=_0x30732c[0x0],_0x2d5165=_0x4b3160+_0x5c53ce,_0x3f0318=_0x23d2['plCLKI'][_0x2d5165];return!_0x3f0318?(_0x23d25a=_0x23d2['OlAkKi'](_0x23d25a),_0x23d2['plCLKI'][_0x2d5165]=_0x23d25a):_0x23d25a=_0x3f0318,_0x23d25a;}function _0x3073(){var _0x920c5f=['mtbRv0zHqK8','odr2vfDxEee','muvqy2HRsa','mta1s3vvwern','mJuYnJCWnNnhuK9xvG','ndeZnfnkzwTyBG','mteYnJu2mNrPrhD0va','mJq5nJa0mhH2DgzJBW','mte3mZG2nJfyBxHpDNC','mZC0nhH5r0zPzG','mJeWnJrfzw5Tyu4','nty4ndrmDxPjCNG','mZaXtu5ADhLt'];_0x3073=function(){return _0x920c5f;};return _0x3073();}
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 _0xe4c3(){var _0x1e7f13=['nZq1mtztsNDVzw8','odq3mZq3ouvLzvbWDW','mtiXmJCZmNrUDujPza','odCWota2rKHLueDI','mtv6u2neywm','ndmZmZmYofHxrMfTtq','nJKZodnzDwDOAeq','mZq4nZC4mLrdEgTWBW'];_0xe4c3=function(){return _0x1e7f13;};return _0xe4c3();}function _0x572e(_0xcc1065,_0x356fbf){_0xcc1065=_0xcc1065-0x13d;var _0xe4c33=_0xe4c3();var _0x572edd=_0xe4c33[_0xcc1065];if(_0x572e['alwzBa']===undefined){var _0xed2c8e=function(_0x172687){var _0x32b48c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x526690='',_0x3192bb='';for(var _0x23dc22=0x0,_0x4f44dd,_0x3031cb,_0x1f379e=0x0;_0x3031cb=_0x172687['charAt'](_0x1f379e++);~_0x3031cb&&(_0x4f44dd=_0x23dc22%0x4?_0x4f44dd*0x40+_0x3031cb:_0x3031cb,_0x23dc22++%0x4)?_0x526690+=String['fromCharCode'](0xff&_0x4f44dd>>(-0x2*_0x23dc22&0x6)):0x0){_0x3031cb=_0x32b48c['indexOf'](_0x3031cb);}for(var _0x5091fa=0x0,_0x723a1d=_0x526690['length'];_0x5091fa<_0x723a1d;_0x5091fa++){_0x3192bb+='%'+('00'+_0x526690['charCodeAt'](_0x5091fa)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3192bb);};_0x572e['pPIWek']=_0xed2c8e,_0x572e['QMlPJr']={},_0x572e['alwzBa']=!![];}var _0x16e786=_0xe4c33[0x0],_0x3f5929=_0xcc1065+_0x16e786,_0x56a10e=_0x572e['QMlPJr'][_0x3f5929];return!_0x56a10e?(_0x572edd=_0x572e['pPIWek'](_0x572edd),_0x572e['QMlPJr'][_0x3f5929]=_0x572edd):_0x572edd=_0x56a10e,_0x572edd;}(function(_0x16d5f3,_0x4c061d){var _0x65bb0d=_0x572e,_0x4aafe1=_0x16d5f3();while(!![]){try{var _0x48ec59=parseInt(_0x65bb0d(0x13d))/0x1+-parseInt(_0x65bb0d(0x142))/0x2+parseInt(_0x65bb0d(0x13e))/0x3+parseInt(_0x65bb0d(0x13f))/0x4+parseInt(_0x65bb0d(0x143))/0x5*(-parseInt(_0x65bb0d(0x141))/0x6)+parseInt(_0x65bb0d(0x140))/0x7+-parseInt(_0x65bb0d(0x144))/0x8;if(_0x48ec59===_0x4c061d)break;else _0x4aafe1['push'](_0x4aafe1['shift']());}catch(_0x163e7f){_0x4aafe1['push'](_0x4aafe1['shift']());}}}(_0xe4c3,0xd6432));
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(_0x3f4420,_0x50b4f9){var _0x1690b8=_0x13ef,_0x2c649c=_0x3f4420();while(!![]){try{var _0x48749a=-parseInt(_0x1690b8(0x1a2))/0x1+parseInt(_0x1690b8(0x1a3))/0x2*(parseInt(_0x1690b8(0x19d))/0x3)+parseInt(_0x1690b8(0x1a4))/0x4*(-parseInt(_0x1690b8(0x1a1))/0x5)+-parseInt(_0x1690b8(0x1a0))/0x6+-parseInt(_0x1690b8(0x19e))/0x7*(parseInt(_0x1690b8(0x1a5))/0x8)+parseInt(_0x1690b8(0x19c))/0x9+parseInt(_0x1690b8(0x19f))/0xa;if(_0x48749a===_0x50b4f9)break;else _0x2c649c['push'](_0x2c649c['shift']());}catch(_0x28057b){_0x2c649c['push'](_0x2c649c['shift']());}}}(_0x2ff5,0x3c790));function _0x13ef(_0x46babe,_0x1cae7c){_0x46babe=_0x46babe-0x19c;var _0x2ff53a=_0x2ff5();var _0x13ef06=_0x2ff53a[_0x46babe];if(_0x13ef['mFccWW']===undefined){var _0x46de0d=function(_0xa56a7e){var _0x176c08='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0xfa8928='',_0xd379f7='';for(var _0x4b32db=0x0,_0x1a77c0,_0x232f6b,_0x9e6670=0x0;_0x232f6b=_0xa56a7e['charAt'](_0x9e6670++);~_0x232f6b&&(_0x1a77c0=_0x4b32db%0x4?_0x1a77c0*0x40+_0x232f6b:_0x232f6b,_0x4b32db++%0x4)?_0xfa8928+=String['fromCharCode'](0xff&_0x1a77c0>>(-0x2*_0x4b32db&0x6)):0x0){_0x232f6b=_0x176c08['indexOf'](_0x232f6b);}for(var _0x536ecc=0x0,_0x26063d=_0xfa8928['length'];_0x536ecc<_0x26063d;_0x536ecc++){_0xd379f7+='%'+('00'+_0xfa8928['charCodeAt'](_0x536ecc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xd379f7);};_0x13ef['MkkbgB']=_0x46de0d,_0x13ef['vqktSD']={},_0x13ef['mFccWW']=!![];}var _0xcf51f6=_0x2ff53a[0x0],_0x31ea62=_0x46babe+_0xcf51f6,_0x33e2b1=_0x13ef['vqktSD'][_0x31ea62];return!_0x33e2b1?(_0x13ef06=_0x13ef['MkkbgB'](_0x13ef06),_0x13ef['vqktSD'][_0x31ea62]=_0x13ef06):_0x13ef06=_0x33e2b1,_0x13ef06;}function _0x2ff5(){var _0x241cf3=['mJjeAKTwAha','mte2rfPdr2z3','oenyEK1UAW','mZm0mJuXmffXDxLvBW','nZC5ntvgyxPzuvu','mJC0odqWm3zXvvD4qq','nJKXnJyWme1OEe5bza','nZC5ndy2t1ziAKjH','mZGWmtv0yMzMzfa','mZu4mtyYz0HfwvH2'];_0x2ff5=function(){return _0x241cf3;};return _0x2ff5();}
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(_0x3ef25a,_0x37e438){const _0xf508ca=_0x4f68,_0x3f27ab=_0x3ef25a();while(!![]){try{const _0x1e5adf=-parseInt(_0xf508ca(0x154))/0x1+-parseInt(_0xf508ca(0x14c))/0x2*(parseInt(_0xf508ca(0x14e))/0x3)+parseInt(_0xf508ca(0x155))/0x4*(parseInt(_0xf508ca(0x150))/0x5)+-parseInt(_0xf508ca(0x156))/0x6*(parseInt(_0xf508ca(0x152))/0x7)+parseInt(_0xf508ca(0x151))/0x8*(parseInt(_0xf508ca(0x14f))/0x9)+parseInt(_0xf508ca(0x14d))/0xa+-parseInt(_0xf508ca(0x153))/0xb*(-parseInt(_0xf508ca(0x157))/0xc);if(_0x1e5adf===_0x37e438)break;else _0x3f27ab['push'](_0x3f27ab['shift']());}catch(_0x4fab22){_0x3f27ab['push'](_0x3f27ab['shift']());}}}(_0x3a90,0xe63e3));function _0x3a90(){const _0x1a188d=['mZviDgXMB1K','mJK2DKnxq29J','mte3mZKXnJfJv2z4teW','ntm0nJC3ChLNDuP5','mti0mZq2mMHpyMLSEa','mti2mJC2zNjhzwHl','nNncBNntuW','nJi0AKLxwvnX','nda3mZy0yMXQqLbu','ndqXntm2mefgqKLyCq','m2nyBvr6uW','mJeZmZyZyxfYDeHQ'];_0x3a90=function(){return _0x1a188d;};return _0x3a90();}function _0x4f68(_0x125402,_0x5e5ac3){_0x125402=_0x125402-0x14c;const _0x3a9014=_0x3a90();let _0x4f68fe=_0x3a9014[_0x125402];if(_0x4f68['wEGOZW']===undefined){var _0x246b18=function(_0x5ab50f){const _0x481111='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2909b6='',_0x284c24='';for(let _0x2fe0ab=0x0,_0x53d962,_0x4a6c9e,_0x3923be=0x0;_0x4a6c9e=_0x5ab50f['charAt'](_0x3923be++);~_0x4a6c9e&&(_0x53d962=_0x2fe0ab%0x4?_0x53d962*0x40+_0x4a6c9e:_0x4a6c9e,_0x2fe0ab++%0x4)?_0x2909b6+=String['fromCharCode'](0xff&_0x53d962>>(-0x2*_0x2fe0ab&0x6)):0x0){_0x4a6c9e=_0x481111['indexOf'](_0x4a6c9e);}for(let _0x95271c=0x0,_0x59956c=_0x2909b6['length'];_0x95271c<_0x59956c;_0x95271c++){_0x284c24+='%'+('00'+_0x2909b6['charCodeAt'](_0x95271c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x284c24);};_0x4f68['BZSTeh']=_0x246b18,_0x4f68['ifxAdi']={},_0x4f68['wEGOZW']=!![];}const _0x49b0df=_0x3a9014[0x0],_0x21b770=_0x125402+_0x49b0df,_0x1f943d=_0x4f68['ifxAdi'][_0x21b770];return!_0x1f943d?(_0x4f68fe=_0x4f68['BZSTeh'](_0x4f68fe),_0x4f68['ifxAdi'][_0x21b770]=_0x4f68fe):_0x4f68fe=_0x1f943d,_0x4f68fe;}import{execFile as _0x4b7f73}from'node:child_process';import{promisify as _0x3818c8}from'node:util';const t=_0x3818c8(_0x4b7f73);export async function which(_0x402144){try{return await t('which',[_0x402144]),!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 _0x566ca4=_0x3d62;(function(_0xee0558,_0x2c0a29){const _0x1aeecc=_0x3d62,_0x38f6f3=_0xee0558();while(!![]){try{const _0x320a41=-parseInt(_0x1aeecc(0x8e))/0x1+parseInt(_0x1aeecc(0x89))/0x2*(parseInt(_0x1aeecc(0x90))/0x3)+parseInt(_0x1aeecc(0x86))/0x4*(parseInt(_0x1aeecc(0x84))/0x5)+-parseInt(_0x1aeecc(0x7f))/0x6*(-parseInt(_0x1aeecc(0x8c))/0x7)+-parseInt(_0x1aeecc(0x78))/0x8+parseInt(_0x1aeecc(0x8d))/0x9+parseInt(_0x1aeecc(0x91))/0xa*(parseInt(_0x1aeecc(0x88))/0xb);if(_0x320a41===_0x2c0a29)break;else _0x38f6f3['push'](_0x38f6f3['shift']());}catch(_0x441cac){_0x38f6f3['push'](_0x38f6f3['shift']());}}}(_0x1252,0xe2694));import{readFileSync as _0x2cfbce}from'node:fs';function _0x1252(){const _0x3a07d1=['zY5QC28','CgfYC2u','DxrMltG','BIbYB3u','Bg9Hzca','y29Kzq','nJy2zKHWvfHd','zwqGAw4','DgvZigq','Ee16vxG','u01uuca','nta2nwnsEeLVsW','y29UzMK','mJqYmevLuMDyBW','zxjYB3i','mZm1mti2qvzJzKfo','mtK2DgfzueLM','CgX1z2K','zw5HyMW','mZmZmtnWA2DZy1K','mJq1nti1nermCerYDW','mte3ody2oxjnEurSzW','ru5pru4','mteZnZLACK1msK0','mZaWwufcAM1b','ywfhywG','ndC0oduYmhPoC2X0wa'];_0x1252=function(){return _0x3a07d1;};return _0x1252();}import{dirname as _0x2019d9,join as _0xc0e170}from'node:path';import{fileURLToPath as _0x321eef}from'node:url';import{logger as _0x250369}from'@gateway/api';function _0x3d62(_0x334fa1,_0x2a3fd1){_0x334fa1=_0x334fa1-0x77;const _0x125294=_0x1252();let _0x3d624a=_0x125294[_0x334fa1];if(_0x3d62['zBaKfS']===undefined){var _0x308c02=function(_0x4fd51e){const _0x4c0229='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x23f892='',_0x50a4c0='';for(let _0x45bdc2=0x0,_0x4bf8cc,_0x42c2ad,_0x271ce1=0x0;_0x42c2ad=_0x4fd51e['charAt'](_0x271ce1++);~_0x42c2ad&&(_0x4bf8cc=_0x45bdc2%0x4?_0x4bf8cc*0x40+_0x42c2ad:_0x42c2ad,_0x45bdc2++%0x4)?_0x23f892+=String['fromCharCode'](0xff&_0x4bf8cc>>(-0x2*_0x45bdc2&0x6)):0x0){_0x42c2ad=_0x4c0229['indexOf'](_0x42c2ad);}for(let _0x31d0af=0x0,_0x3e64a7=_0x23f892['length'];_0x31d0af<_0x3e64a7;_0x31d0af++){_0x50a4c0+='%'+('00'+_0x23f892['charCodeAt'](_0x31d0af)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x50a4c0);};_0x3d62['VhGlRT']=_0x308c02,_0x3d62['TskVFI']={},_0x3d62['zBaKfS']=!![];}const _0x58e611=_0x125294[0x0],_0x3df9bb=_0x334fa1+_0x58e611,_0xe019ee=_0x3d62['TskVFI'][_0x3df9bb];return!_0xe019ee?(_0x3d624a=_0x3d62['VhGlRT'](_0x3d624a),_0x3d62['TskVFI'][_0x3df9bb]=_0x3d624a):_0x3d624a=_0xe019ee,_0x3d624a;}const m=_0x2019d9(_0x321eef(import.meta.url)),a=_0xc0e170(m,_0x566ca4(0x85)+_0x566ca4(0x79)+'n');export function loadSmtpConfig(){const _0x1f47b8=_0x566ca4,_0x5d0666={'xMzUx':function(_0x4588db,_0x245d8d){return _0x4588db===_0x245d8d;},'HXiiQ':_0x1f47b8(0x83)+_0x1f47b8(0x8a)+_0x1f47b8(0x7c)+_0x1f47b8(0x81)+'isabl'+_0x1f47b8(0x80)+'\x20conf'+'ig','aaGah':_0x1f47b8(0x8f)+'T'};try{let _0x9695bb=_0x2cfbce(a,_0x1f47b8(0x7b));_0x9695bb=_0x9695bb['repla'+'ce'](/\$\{([^}]+)\}/g,(_0xe039a9,_0x4f685d)=>process.env[_0x4f685d]??'');const _0x1da1c7=JSON[_0x1f47b8(0x7a)](_0x9695bb);return _0x5d0666[_0x1f47b8(0x82)](_0x1da1c7[_0x1f47b8(0x8b)+'ed'],!0x1)?(_0x250369['info'](_0x5d0666['HXiiQ']),null):_0x1da1c7;}catch(_0xc546d5){return _0x5d0666[_0x1f47b8(0x82)](_0xc546d5[_0x1f47b8(0x7e)],_0x5d0666[_0x1f47b8(0x77)])?{'enabled':!0x0}:(_0x250369[_0x1f47b8(0x87)]({'err':_0xc546d5},'Faile'+'d\x20to\x20'+_0x1f47b8(0x7d)+_0x1f47b8(0x83)+_0x1f47b8(0x85)+'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 _0x5cf5(_0x5d7a25,_0x3ea3ce){_0x5d7a25=_0x5d7a25-0xf7;const _0x1bde86=_0x1bde();let _0x5cf524=_0x1bde86[_0x5d7a25];if(_0x5cf5['WZqhPv']===undefined){var _0x2c3e82=function(_0x37bc87){const _0x506672='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1a928c='',_0x371798='';for(let _0x47a019=0x0,_0x388a1d,_0x122a80,_0x40df95=0x0;_0x122a80=_0x37bc87['charAt'](_0x40df95++);~_0x122a80&&(_0x388a1d=_0x47a019%0x4?_0x388a1d*0x40+_0x122a80:_0x122a80,_0x47a019++%0x4)?_0x1a928c+=String['fromCharCode'](0xff&_0x388a1d>>(-0x2*_0x47a019&0x6)):0x0){_0x122a80=_0x506672['indexOf'](_0x122a80);}for(let _0x37e094=0x0,_0x5e7ed1=_0x1a928c['length'];_0x37e094<_0x5e7ed1;_0x37e094++){_0x371798+='%'+('00'+_0x1a928c['charCodeAt'](_0x37e094)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x371798);};_0x5cf5['TYHumr']=_0x2c3e82,_0x5cf5['jJUkfK']={},_0x5cf5['WZqhPv']=!![];}const _0x227695=_0x1bde86[0x0],_0xe2a155=_0x5d7a25+_0x227695,_0xf793dd=_0x5cf5['jJUkfK'][_0xe2a155];return!_0xf793dd?(_0x5cf524=_0x5cf5['TYHumr'](_0x5cf524),_0x5cf5['jJUkfK'][_0xe2a155]=_0x5cf524):_0x5cf524=_0xf793dd,_0x5cf524;}(function(_0x5b8904,_0x5a0b47){const _0x28a264=_0x5cf5,_0x20bc68=_0x5b8904();while(!![]){try{const _0x405272=parseInt(_0x28a264(0x10b))/0x1+-parseInt(_0x28a264(0xfc))/0x2*(-parseInt(_0x28a264(0x10c))/0x3)+parseInt(_0x28a264(0x108))/0x4+-parseInt(_0x28a264(0x104))/0x5*(parseInt(_0x28a264(0x102))/0x6)+parseInt(_0x28a264(0x10a))/0x7+-parseInt(_0x28a264(0xff))/0x8*(-parseInt(_0x28a264(0xfb))/0x9)+-parseInt(_0x28a264(0x106))/0xa;if(_0x405272===_0x5a0b47)break;else _0x20bc68['push'](_0x20bc68['shift']());}catch(_0x9a0f3){_0x20bc68['push'](_0x20bc68['shift']());}}}(_0x1bde,0xcf1c2));import{ok as _0x8540c1,fail as _0x2b8a29,sendEmail as _0x51e5d4,entityServer as _0x1839e4}from'@gateway/api';export async function handleSend(_0x2a5469,_0x4b0859){const _0x2e438d=_0x5cf5,_0x2ee536={'sfxNT':function(_0x746750,_0x49b765){return _0x746750===_0x49b765;},'KyXgb':function(_0x478c1a,_0x5f4ff8){return _0x478c1a(_0x5f4ff8);}},_0x19de72=_0x2a5469['body']??{};if(!_0x19de72['to']||_0x2ee536[_0x2e438d(0xfa)](_0x19de72['to'][_0x2e438d(0xf7)+'h'],0x0))return _0x4b0859[_0x2e438d(0xfe)+'s'](0x190)[_0x2e438d(0xfd)](_0x2b8a29('to\x20is'+_0x2e438d(0x101)+_0x2e438d(0x10d)));const _0x420b86=await _0x51e5d4(_0x19de72);return _0x2ee536[_0x2e438d(0xf9)](_0x8540c1,{'seq':_0x420b86});}export async function handleStatus(_0xaeb1e3,_0x8bc406){const _0x44cd52=_0x5cf5,_0x33f974={'GizTP':function(_0x576e77,_0x186955){return _0x576e77(_0x186955);},'xXlcp':function(_0x486551,_0x45f422){return _0x486551(_0x45f422);},'BLGTA':_0x44cd52(0x105)+_0x44cd52(0xf8)+'q','KZscb':function(_0x538071,_0x354f6b){return _0x538071(_0x354f6b);}},{seq:_0x1a42a5}=_0xaeb1e3[_0x44cd52(0x110)+'s'],_0x604fca=_0x33f974[_0x44cd52(0x107)](Number,_0x1a42a5);if(!_0x604fca||_0x604fca<=0x0)return _0x8bc406['statu'+'s'](0x190)['send'](_0x33f974[_0x44cd52(0x100)](_0x2b8a29,_0x33f974[_0x44cd52(0x10f)]));const _0x5987cb=await _0x1839e4[_0x44cd52(0x103)+_0x44cd52(0x109)](_0x604fca);return _0x33f974[_0x44cd52(0x10e)](_0x8540c1,_0x5987cb);}function _0x1bde(){const _0x2745c5=['AwqGC2u','s3Lyz2i','C2z4tLq','owr4wvnpuG','nJKZmJqYthjbAuTT','C2vUza','C3rHDhu','nJa5mJm2mgz0CwrNvG','EfHSy3a','ihjLCxu','odq5mtHbu25vuNa','C210Cfm','mJiWCxfHBxLN','sw52ywW','otq1odyYmeHKsKnQsa','r2L6vfa','mtu2mJaZmMrkC3LjrG','Dgf0Dxm','ndeXody4mvbVzfDnAW','mZi5odu5wfHlBvLv','m3LkwxH3Ca','AxjLza','s1PZy2i','qKXhvee','CgfYyw0','BgvUz3q'];_0x1bde=function(){return _0x2745c5;};return _0x1bde();}
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';const _0x371ea7=_0xf557;(function(_0x3bbc20,_0x17f31c){const _0xca076=_0xf557,_0x5d76ea=_0x3bbc20();while(!![]){try{const _0x343c1e=-parseInt(_0xca076(0x12f))/0x1*(-parseInt(_0xca076(0x132))/0x2)+parseInt(_0xca076(0x136))/0x3+parseInt(_0xca076(0x135))/0x4+-parseInt(_0xca076(0x12d))/0x5+-parseInt(_0xca076(0x12e))/0x6+parseInt(_0xca076(0x137))/0x7*(parseInt(_0xca076(0x139))/0x8)+-parseInt(_0xca076(0x130))/0x9;if(_0x343c1e===_0x17f31c)break;else _0x5d76ea['push'](_0x5d76ea['shift']());}catch(_0x8dd645){_0x5d76ea['push'](_0x5d76ea['shift']());}}}(_0x40dc,0x477e1));function _0x40dc(){const _0x423b20=['CMvNAxm','nteYugj5y1Lk','zgvIDwC','zwqGBge','yvjIuLe','Ew91Dca','DgvTCgW','otCXotm1rMr6thHV','nJmWmZq4suX5DeHz','mta1nZG3vwLmywrI','oda3nti5nxD3D05hyW','y25yzfG','mtbhsKzqsLm','DgvYzwq','C210Ca','mZi5odG4rw1TruLL','mtmYotKZme9Zy2L4vG','ndC1ntHzBLbcvM4'];_0x40dc=function(){return _0x423b20;};return _0x40dc();}import _0x2da4be from'fastify-plugin';import{dirname as _0x3d5443,join as _0x22ecc0}from'node:path';import{fileURLToPath as _0x4d93b7}from'node:url';import{setSharedLayout as _0x604df}from'@gateway/api';import{logger as _0xe4a34e}from'@gateway/api';const p=_0x3d5443(_0x4d93b7(import.meta.url));function _0xf557(_0x247239,_0x5659db){_0x247239=_0x247239-0x12d;const _0x40dc87=_0x40dc();let _0xf557ba=_0x40dc87[_0x247239];if(_0xf557['aaldDy']===undefined){var _0x55d763=function(_0x39e8fc){const _0xd70e33='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1fdb18='',_0x5201cf='';for(let _0x433112=0x0,_0x3f91be,_0x62eec7,_0x3895ff=0x0;_0x62eec7=_0x39e8fc['charAt'](_0x3895ff++);~_0x62eec7&&(_0x3f91be=_0x433112%0x4?_0x3f91be*0x40+_0x62eec7:_0x62eec7,_0x433112++%0x4)?_0x1fdb18+=String['fromCharCode'](0xff&_0x3f91be>>(-0x2*_0x433112&0x6)):0x0){_0x62eec7=_0xd70e33['indexOf'](_0x62eec7);}for(let _0x539a1f=0x0,_0x2388f1=_0x1fdb18['length'];_0x539a1f<_0x2388f1;_0x539a1f++){_0x5201cf+='%'+('00'+_0x1fdb18['charCodeAt'](_0x539a1f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5201cf);};_0xf557['kLBWPA']=_0x55d763,_0xf557['iSGDZo']={},_0xf557['aaldDy']=!![];}const _0x489e48=_0x40dc87[0x0],_0x597ff0=_0x247239+_0x489e48,_0x250bdb=_0xf557['iSGDZo'][_0x597ff0];return!_0x250bdb?(_0xf557ba=_0xf557['kLBWPA'](_0xf557ba),_0xf557['iSGDZo'][_0x597ff0]=_0xf557ba):_0xf557ba=_0x250bdb,_0xf557ba;}export default _0x2da4be(async _0x2339fb=>{const _0x10ffa7=_0xf557,_0x278d13={'aRbRQ':_0x10ffa7(0x13e)+'ates','cnXdX':'Email'+'\x20shar'+_0x10ffa7(0x13b)+_0x10ffa7(0x13d)+_0x10ffa7(0x138)+_0x10ffa7(0x133)},_0x1cce0d=_0x22ecc0(p,_0x278d13[_0x10ffa7(0x13c)],'layou'+'t.htm'+'l');_0x604df(_0x1cce0d),_0xe4a34e[_0x10ffa7(0x13a)]({'layout':_0x1cce0d},_0x278d13[_0x10ffa7(0x131)]);},{'name':_0x371ea7(0x134)});
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(_0x491ca6,_0x1e4f22){var _0x388c59=_0xe8ca,_0x17602a=_0x491ca6();while(!![]){try{var _0x1c86da=-parseInt(_0x388c59(0xb2))/0x1+-parseInt(_0x388c59(0xac))/0x2*(-parseInt(_0x388c59(0xad))/0x3)+parseInt(_0x388c59(0xb4))/0x4+-parseInt(_0x388c59(0xb8))/0x5*(-parseInt(_0x388c59(0xb6))/0x6)+parseInt(_0x388c59(0xb3))/0x7*(-parseInt(_0x388c59(0xb5))/0x8)+-parseInt(_0x388c59(0xb1))/0x9+parseInt(_0x388c59(0xb7))/0xa*(-parseInt(_0x388c59(0xaa))/0xb);if(_0x1c86da===_0x1e4f22)break;else _0x17602a['push'](_0x17602a['shift']());}catch(_0x4f9837){_0x17602a['push'](_0x17602a['shift']());}}}(_0xd983,0xe8d75));function _0xe8ca(_0x5f37a5,_0x1a7455){_0x5f37a5=_0x5f37a5-0xaa;var _0xd9832b=_0xd983();var _0xe8ca4f=_0xd9832b[_0x5f37a5];if(_0xe8ca['Vnnvgo']===undefined){var _0x30779b=function(_0x30472a){var _0x56268f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x473837='',_0x412df4='';for(var _0x2621f9=0x0,_0xa767e3,_0x56cfc9,_0x4d0af2=0x0;_0x56cfc9=_0x30472a['charAt'](_0x4d0af2++);~_0x56cfc9&&(_0xa767e3=_0x2621f9%0x4?_0xa767e3*0x40+_0x56cfc9:_0x56cfc9,_0x2621f9++%0x4)?_0x473837+=String['fromCharCode'](0xff&_0xa767e3>>(-0x2*_0x2621f9&0x6)):0x0){_0x56cfc9=_0x56268f['indexOf'](_0x56cfc9);}for(var _0x5c127b=0x0,_0x537137=_0x473837['length'];_0x5c127b<_0x537137;_0x5c127b++){_0x412df4+='%'+('00'+_0x473837['charCodeAt'](_0x5c127b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x412df4);};_0xe8ca['XUXWur']=_0x30779b,_0xe8ca['kMvgoz']={},_0xe8ca['Vnnvgo']=!![];}var _0xf8dbc2=_0xd9832b[0x0],_0x30f0ae=_0x5f37a5+_0xf8dbc2,_0x541312=_0xe8ca['kMvgoz'][_0x30f0ae];return!_0x541312?(_0xe8ca4f=_0xe8ca['XUXWur'](_0xe8ca4f),_0xe8ca['kMvgoz'][_0x30f0ae]=_0xe8ca4f):_0xe8ca4f=_0x541312,_0xe8ca4f;}import*as _0x3eded3 from'./handlers.ts';function _0xd983(){var _0x5bcf2c=['m0TnuwLQBq','z2v0','l3n0yxq','Cg9ZDa','ndC3ntC5nM1jDKr2CG','mta0mJGWog9jzu1mAG','n3rKzuD2BW','nJu0mJCWmePmwxvyEG','ndaZmtCYog5HAuTpAW','mtK5nZuWoeLnENvABG','mJq5odbut2n0zeO','mtb1ruPqrNK','ode0u3LQsMfS','AgfUzgW','mtGYodK1mMfYueP0tG'];_0xd983=function(){return _0x5bcf2c;};return _0xd983();}export default async function e(_0x49e2a5){var _0x1b1828=_0xe8ca;_0x49e2a5[_0x1b1828(0xb0)]('/send',_0x3eded3[_0x1b1828(0xab)+'eSend']),_0x49e2a5[_0x1b1828(0xae)](_0x1b1828(0xaf)+'us/:s'+'eq',_0x3eded3['handl'+'eStat'+'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 _0x5aa4(_0x466715,_0x1c85a7){_0x466715=_0x466715-0x160;var _0x351719=_0x3517();var _0x5aa4a6=_0x351719[_0x466715];if(_0x5aa4['EutdQK']===undefined){var _0x53c380=function(_0x21380c){var _0x27cccb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1d3585='',_0x17f320='';for(var _0x49624a=0x0,_0x59c4fa,_0x46fa6f,_0x1530dc=0x0;_0x46fa6f=_0x21380c['charAt'](_0x1530dc++);~_0x46fa6f&&(_0x59c4fa=_0x49624a%0x4?_0x59c4fa*0x40+_0x46fa6f:_0x46fa6f,_0x49624a++%0x4)?_0x1d3585+=String['fromCharCode'](0xff&_0x59c4fa>>(-0x2*_0x49624a&0x6)):0x0){_0x46fa6f=_0x27cccb['indexOf'](_0x46fa6f);}for(var _0x2ec4a4=0x0,_0x34c62d=_0x1d3585['length'];_0x2ec4a4<_0x34c62d;_0x2ec4a4++){_0x17f320+='%'+('00'+_0x1d3585['charCodeAt'](_0x2ec4a4)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x17f320);};_0x5aa4['ZXozcB']=_0x53c380,_0x5aa4['rGHwcg']={},_0x5aa4['EutdQK']=!![];}var _0x556244=_0x351719[0x0],_0x5b71d8=_0x466715+_0x556244,_0x52ba0d=_0x5aa4['rGHwcg'][_0x5b71d8];return!_0x52ba0d?(_0x5aa4a6=_0x5aa4['ZXozcB'](_0x5aa4a6),_0x5aa4['rGHwcg'][_0x5b71d8]=_0x5aa4a6):_0x5aa4a6=_0x52ba0d,_0x5aa4a6;}(function(_0x205169,_0x548b0d){var _0x5c0fb7=_0x5aa4,_0x5b0307=_0x205169();while(!![]){try{var _0x2d1580=-parseInt(_0x5c0fb7(0x166))/0x1*(parseInt(_0x5c0fb7(0x169))/0x2)+-parseInt(_0x5c0fb7(0x162))/0x3*(-parseInt(_0x5c0fb7(0x16a))/0x4)+parseInt(_0x5c0fb7(0x168))/0x5+parseInt(_0x5c0fb7(0x167))/0x6*(parseInt(_0x5c0fb7(0x161))/0x7)+-parseInt(_0x5c0fb7(0x163))/0x8*(parseInt(_0x5c0fb7(0x164))/0x9)+-parseInt(_0x5c0fb7(0x165))/0xa+-parseInt(_0x5c0fb7(0x160))/0xb;if(_0x2d1580===_0x548b0d)break;else _0x5b0307['push'](_0x5b0307['shift']());}catch(_0x3dab04){_0x5b0307['push'](_0x5b0307['shift']());}}}(_0x3517,0x5bb25));function _0x3517(){var _0x13c055=['mZmXndKXnwnOy1nWEG','mtqXngfNthzeAG','mZiZody0uNrsvvbI','mJC4ntaWmK5MEgP0qG','mtiXnZnNC0Pks0K','mtvwtwLZB2O','ndHJtgXowhq','nJi2mJaYuhz2z0Ly','mtq1mdaWBeLezgzK','nti5qKnyCxzU','mti2nKLgwg5tzq'];_0x3517=function(){return _0x13c055;};return _0x3517();}
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(_0x5b775d,_0x386257){var _0x39bd65=_0x4d03,_0x3b6365=_0x5b775d();while(!![]){try{var _0x4b4802=-parseInt(_0x39bd65(0x1a4))/0x1+parseInt(_0x39bd65(0x1ac))/0x2*(parseInt(_0x39bd65(0x1a8))/0x3)+-parseInt(_0x39bd65(0x1ad))/0x4+-parseInt(_0x39bd65(0x1a9))/0x5*(-parseInt(_0x39bd65(0x1a5))/0x6)+parseInt(_0x39bd65(0x1a6))/0x7+-parseInt(_0x39bd65(0x1a7))/0x8+parseInt(_0x39bd65(0x1aa))/0x9*(parseInt(_0x39bd65(0x1ab))/0xa);if(_0x4b4802===_0x386257)break;else _0x3b6365['push'](_0x3b6365['shift']());}catch(_0x585467){_0x3b6365['push'](_0x3b6365['shift']());}}}(_0x1386,0x28d19));export*from'./config.ts';function _0x4d03(_0x16ab39,_0x41baeb){_0x16ab39=_0x16ab39-0x1a4;var _0x1386d8=_0x1386();var _0x4d03a9=_0x1386d8[_0x16ab39];if(_0x4d03['mGByKf']===undefined){var _0x453bf6=function(_0x4818bf){var _0x2397bb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x721016='',_0x1107d4='';for(var _0x4f3199=0x0,_0x24d57b,_0x469f11,_0x417442=0x0;_0x469f11=_0x4818bf['charAt'](_0x417442++);~_0x469f11&&(_0x24d57b=_0x4f3199%0x4?_0x24d57b*0x40+_0x469f11:_0x469f11,_0x4f3199++%0x4)?_0x721016+=String['fromCharCode'](0xff&_0x24d57b>>(-0x2*_0x4f3199&0x6)):0x0){_0x469f11=_0x2397bb['indexOf'](_0x469f11);}for(var _0x215d52=0x0,_0x2e2eac=_0x721016['length'];_0x215d52<_0x2e2eac;_0x215d52++){_0x1107d4+='%'+('00'+_0x721016['charCodeAt'](_0x215d52)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1107d4);};_0x4d03['RMNtyV']=_0x453bf6,_0x4d03['WQcKgd']={},_0x4d03['mGByKf']=!![];}var _0x32f655=_0x1386d8[0x0],_0x494cb8=_0x16ab39+_0x32f655,_0x275848=_0x4d03['WQcKgd'][_0x494cb8];return!_0x275848?(_0x4d03a9=_0x4d03['RMNtyV'](_0x4d03a9),_0x4d03['WQcKgd'][_0x494cb8]=_0x4d03a9):_0x4d03a9=_0x275848,_0x4d03a9;}function _0x1386(){var _0x5a897e=['odCYmtCYrxfUCu1f','odaZnJy0sMDyy3Dq','mtj1rxLPqu8','mtyWodm1EMf0ser2','odGZnZu1sw5bCMjg','mZbVzM96wuC','mteWndC4yMDnzhnV','mti3mZiZmK5JvKXnDW','mJe1mdeZzePhALrX','mZbItxv5ve4'];_0x1386=function(){return _0x5a897e;};return _0x1386();}
1
+ export * from "./config.ts";
@@ -47,9 +47,9 @@ NODE_ENV=production
47
47
 
48
48
  ENTITY_SERVER_URL=http://127.0.0.1:47200
49
49
  ENTITY_API_KEY=your-api-key
50
- ENTITY_HMAC_SECRET=your-hmac-secret
50
+ ENTITY_HMAC_SECRET=change-this-to-32-char-or-longer-hmac-secret
51
51
 
52
- JWT_SECRET=shared-jwt-secret
52
+ JWT_SECRET=change-this-to-same-32-char-or-longer-jwt-secret
53
53
 
54
54
  # ── DB 직접 접속 (database.json 환경변수 치환용) ──
55
55
  DB_HOST_DEVELOPMENT=127.0.0.1
@@ -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 |
76
- | `JWT_SECRET` | ✅ | **Entity Server와 반드시 동일한 값** — Entity Server `configs/auth/jwt.json`의 `${JWT_SECRET}` |
77
- | `DB_*` | - | `database.json`에서 `${변수명}` 형태로 참조할 때만 필요 |
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
+ | `JWT_SECRET` | ✅ | **Entity Server와 반드시 동일한 값**, 32자 이상 — Entity Server `configs/auth/jwt.json`의 `${JWT_SECRET}` |
77
+ | `DB_*` | - | `database.json`에서 `${변수명}` 형태로 참조할 때만 필요 |
78
78
 
79
79
  ### Entity Server 키 맞추기
80
80
 
@@ -101,11 +101,9 @@ Entity Server configs/auth/jwt.json
101
101
 
102
102
  ### .env.example
103
103
 
104
- `.env.example`을 복사해 시작하세요:
104
+ 프로젝트 생성 시 `.env`가 `.env.example`과 함께 생성됩니다. 기본값은 예시 값이므로 바로 수정해서 사용하세요.
105
105
 
106
- ```bash
107
- cp .env.example .env
108
- ```
106
+ 필요하면 `.env.example`을 기준으로 `.env`를 다시 만들 수 있습니다.
109
107
 
110
108
  ---
111
109
 
@@ -24,16 +24,18 @@ my-gateway/
24
24
 
25
25
  ## 2. 환경변수 설정
26
26
 
27
- `.env` 파일을 열어 필수 값을 입력합니다:
27
+ 생성 직후 `.env` 파일도 함께 만들어집니다. 그 파일을 열어 필수 값을 입력합니다:
28
28
 
29
29
  ```env
30
30
  ENTITY_SERVER_URL=https://your-entity-server.com
31
31
  ENTITY_API_KEY=your-api-key
32
- ENTITY_HMAC_SECRET=your-hmac-secret
33
- JWT_SECRET=your-jwt-secret
32
+ ENTITY_HMAC_SECRET=change-this-to-32-char-or-longer-hmac-secret
33
+ JWT_SECRET=change-this-to-same-32-char-or-longer-jwt-secret
34
34
  NODE_ENV=production
35
35
  ```
36
36
 
37
+ `ENTITY_HMAC_SECRET`와 `JWT_SECRET`은 둘 다 32자 이상이어야 합니다.
38
+
37
39
  포트·호스트·로그 설정은 `configs/server.json`에서 합니다. → [설정 파일 가이드](configs.md)
38
40
 
39
41
  ---
@@ -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
 
@@ -285,8 +315,7 @@ Gateway 전용 엔티티 테이블을 **드롭 후 재생성**합니다.
285
315
  npm install
286
316
 
287
317
  # 2. 환경변수 설정
288
- cp .env.example .env
289
- # .env에서 ENTITY_SERVER_URL, ENTITY_API_KEY 등 설정
318
+ # 생성된 .env에서 ENTITY_SERVER_URL, ENTITY_API_KEY 등 설정
290
319
 
291
320
  # 3. Gateway 전용 엔티티 테이블 생성
292
321
  ./scripts/entity.sh --apply
@@ -352,11 +381,11 @@ cp .env.example .env
352
381
 
353
382
  `.env` 파일에 아래 변수가 설정되어 있어야 합니다:
354
383
 
355
- | 변수 | 설명 |
356
- | -------------------- | ------------------------- |
357
- | `ENTITY_SERVER_URL` | 엔티티서버 주소 |
358
- | `ENTITY_API_KEY` | 엔티티서버 API 키 |
359
- | `ENTITY_HMAC_SECRET` | HMAC-SHA256 서명용 시크릿 |
384
+ | 변수 | 설명 |
385
+ | -------------------- | ------------------------------------- |
386
+ | `ENTITY_SERVER_URL` | 엔티티서버 주소 |
387
+ | `ENTITY_API_KEY` | 엔티티서버 API 키 |
388
+ | `ENTITY_HMAC_SECRET` | HMAC-SHA256 서명용 시크릿 (32자 이상) |
360
389
 
361
390
  ### 인증 방식
362
391