create-entity-app-server 0.1.16 → 0.2.1

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 (49) 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/build.sh +222 -0
  43. package/dist-create/template/scripts/run.sh +25 -6
  44. package/dist-create/template/scripts/service-install.sh +174 -0
  45. package/dist-create/template/scripts/service-remove.sh +102 -0
  46. package/dist-create/template/scripts/update-server.sh +25 -20
  47. package/dist-create/template/system-api.js +1 -1
  48. package/dist-create/template/system.js +1 -1
  49. package/package.json +1 -1
@@ -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(_0x4fb4f1,_0x42f70a){var _0x55d262=_0x5821,_0x5ce359=_0x4fb4f1();while(!![]){try{var _0x14f92a=parseInt(_0x55d262(0xba))/0x1*(-parseInt(_0x55d262(0xb4))/0x2)+parseInt(_0x55d262(0xb3))/0x3+-parseInt(_0x55d262(0xb8))/0x4+parseInt(_0x55d262(0xb6))/0x5+parseInt(_0x55d262(0xbb))/0x6*(-parseInt(_0x55d262(0xb5))/0x7)+parseInt(_0x55d262(0xb9))/0x8*(parseInt(_0x55d262(0xb2))/0x9)+-parseInt(_0x55d262(0xb7))/0xa;if(_0x14f92a===_0x42f70a)break;else _0x5ce359['push'](_0x5ce359['shift']());}catch(_0x3a2dc0){_0x5ce359['push'](_0x5ce359['shift']());}}}(_0x9971,0x692ce));function _0x5821(_0x85b53a,_0x52271e){_0x85b53a=_0x85b53a-0xb2;var _0x9971f=_0x9971();var _0x58211e=_0x9971f[_0x85b53a];if(_0x5821['oySoMb']===undefined){var _0x2e9062=function(_0x43f00e){var _0x179803='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x230f06='',_0x2124ae='';for(var _0x5634b9=0x0,_0x1eae41,_0x5ad6b2,_0x2382ba=0x0;_0x5ad6b2=_0x43f00e['charAt'](_0x2382ba++);~_0x5ad6b2&&(_0x1eae41=_0x5634b9%0x4?_0x1eae41*0x40+_0x5ad6b2:_0x5ad6b2,_0x5634b9++%0x4)?_0x230f06+=String['fromCharCode'](0xff&_0x1eae41>>(-0x2*_0x5634b9&0x6)):0x0){_0x5ad6b2=_0x179803['indexOf'](_0x5ad6b2);}for(var _0x3838f3=0x0,_0x493172=_0x230f06['length'];_0x3838f3<_0x493172;_0x3838f3++){_0x2124ae+='%'+('00'+_0x230f06['charCodeAt'](_0x3838f3)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2124ae);};_0x5821['piMcao']=_0x2e9062,_0x5821['QDqxND']={},_0x5821['oySoMb']=!![];}var _0x2b85a3=_0x9971f[0x0],_0x182250=_0x85b53a+_0x2b85a3,_0x5e30c9=_0x5821['QDqxND'][_0x182250];return!_0x5e30c9?(_0x58211e=_0x5821['piMcao'](_0x58211e),_0x5821['QDqxND'][_0x182250]=_0x58211e):_0x58211e=_0x5e30c9,_0x58211e;}function _0x9971(){var _0x5b09e7=['nda4oty3mhjKs3rpAa','mtiYotm3nMriDfHlyW','nJrTzgTgCKC','n25OBKHsBq','nK9rteDVta','mtCZndKZCKn0Dvnj','mJa4odeYm2T2B0PVDa','nZuWotHgteDSswq','mtu0mdq0muLgBKzdrG','mZG5odC5mefAyu5NDW'];_0x9971=function(){return _0x5b09e7;};return _0x9971();}
@@ -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(_0x559947,_0x1c801f){var _0x207f50=_0x2bdf,_0x1ed4f4=_0x559947();while(!![]){try{var _0x4ef844=-parseInt(_0x207f50(0x1ee))/0x1+parseInt(_0x207f50(0x1ec))/0x2*(parseInt(_0x207f50(0x1f1))/0x3)+-parseInt(_0x207f50(0x1ea))/0x4*(parseInt(_0x207f50(0x1ef))/0x5)+parseInt(_0x207f50(0x1ed))/0x6*(parseInt(_0x207f50(0x1f4))/0x7)+-parseInt(_0x207f50(0x1f2))/0x8+-parseInt(_0x207f50(0x1eb))/0x9*(-parseInt(_0x207f50(0x1f0))/0xa)+parseInt(_0x207f50(0x1f3))/0xb;if(_0x4ef844===_0x1c801f)break;else _0x1ed4f4['push'](_0x1ed4f4['shift']());}catch(_0x1418a4){_0x1ed4f4['push'](_0x1ed4f4['shift']());}}}(_0x3379,0xe738b));export*from'./config.ts';export*from'./parsed.ts';function _0x2bdf(_0x194bb0,_0x1e9742){_0x194bb0=_0x194bb0-0x1ea;var _0x33790c=_0x3379();var _0x2bdf82=_0x33790c[_0x194bb0];if(_0x2bdf['bMqWHO']===undefined){var _0x5aa455=function(_0x6db3f7){var _0x503ac4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x59c2bb='',_0x10777f='';for(var _0x567b59=0x0,_0xe3e56f,_0x4f93b0,_0x21c96e=0x0;_0x4f93b0=_0x6db3f7['charAt'](_0x21c96e++);~_0x4f93b0&&(_0xe3e56f=_0x567b59%0x4?_0xe3e56f*0x40+_0x4f93b0:_0x4f93b0,_0x567b59++%0x4)?_0x59c2bb+=String['fromCharCode'](0xff&_0xe3e56f>>(-0x2*_0x567b59&0x6)):0x0){_0x4f93b0=_0x503ac4['indexOf'](_0x4f93b0);}for(var _0x33175e=0x0,_0x2b5bff=_0x59c2bb['length'];_0x33175e<_0x2b5bff;_0x33175e++){_0x10777f+='%'+('00'+_0x59c2bb['charCodeAt'](_0x33175e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x10777f);};_0x2bdf['uMrgMm']=_0x5aa455,_0x2bdf['bCpsBg']={},_0x2bdf['bMqWHO']=!![];}var _0xadfb8=_0x33790c[0x0],_0x58fbf5=_0x194bb0+_0xadfb8,_0x2a95ab=_0x2bdf['bCpsBg'][_0x58fbf5];return!_0x2a95ab?(_0x2bdf82=_0x2bdf['uMrgMm'](_0x2bdf82),_0x2bdf['bCpsBg'][_0x58fbf5]=_0x2bdf82):_0x2bdf82=_0x2a95ab,_0x2bdf82;}function _0x3379(){var _0x3833b2=['nKLABwLpAq','mtq0oduYmZjhrNHfu3G','mJyYmtK0ntD4qMHTD2W','mtmYmtzethDvugm','mJy1nZm3mLLAvej4vq','nJqWmZvpA3HsEK8','mtu0mte2ngjjsw1Yqq','ndaYnLzQv3nSsW','mti0mdm2mxvSrKPvsG','mtbRB0n4tgG','mtKWwuPOvgTw'];_0x3379=function(){return _0x3833b2;};return _0x3379();}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(_0xc7d1fe,_0x3071df){var _0x4107d0=_0x22c1,_0x1f1135=_0xc7d1fe();while(!![]){try{var _0xe13e4=-parseInt(_0x4107d0(0xeb))/0x1+parseInt(_0x4107d0(0xed))/0x2*(parseInt(_0x4107d0(0xea))/0x3)+-parseInt(_0x4107d0(0xec))/0x4+-parseInt(_0x4107d0(0xe5))/0x5+parseInt(_0x4107d0(0xe8))/0x6*(-parseInt(_0x4107d0(0xe3))/0x7)+-parseInt(_0x4107d0(0xe7))/0x8*(-parseInt(_0x4107d0(0xe9))/0x9)+parseInt(_0x4107d0(0xe4))/0xa*(parseInt(_0x4107d0(0xe6))/0xb);if(_0xe13e4===_0x3071df)break;else _0x1f1135['push'](_0x1f1135['shift']());}catch(_0x1b523b){_0x1f1135['push'](_0x1f1135['shift']());}}}(_0x2e8e,0x9ca06));function _0x22c1(_0xbabe6a,_0x21df13){_0xbabe6a=_0xbabe6a-0xe3;var _0x2e8e37=_0x2e8e();var _0x22c1d5=_0x2e8e37[_0xbabe6a];if(_0x22c1['GphXng']===undefined){var _0x3b15ac=function(_0x325a76){var _0x19846d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x39633a='',_0x277cda='';for(var _0x3f72c9=0x0,_0x198754,_0x10556e,_0xd8945d=0x0;_0x10556e=_0x325a76['charAt'](_0xd8945d++);~_0x10556e&&(_0x198754=_0x3f72c9%0x4?_0x198754*0x40+_0x10556e:_0x10556e,_0x3f72c9++%0x4)?_0x39633a+=String['fromCharCode'](0xff&_0x198754>>(-0x2*_0x3f72c9&0x6)):0x0){_0x10556e=_0x19846d['indexOf'](_0x10556e);}for(var _0x317ce2=0x0,_0x84979a=_0x39633a['length'];_0x317ce2<_0x84979a;_0x317ce2++){_0x277cda+='%'+('00'+_0x39633a['charCodeAt'](_0x317ce2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x277cda);};_0x22c1['jbABzC']=_0x3b15ac,_0x22c1['QtMOeA']={},_0x22c1['GphXng']=!![];}var _0xcc1533=_0x2e8e37[0x0],_0x2fce78=_0xbabe6a+_0xcc1533,_0x5c194b=_0x22c1['QtMOeA'][_0x2fce78];return!_0x5c194b?(_0x22c1d5=_0x22c1['jbABzC'](_0x22c1d5),_0x22c1['QtMOeA'][_0x2fce78]=_0x22c1d5):_0x22c1d5=_0x5c194b,_0x22c1d5;}function _0x2e8e(){var _0x5bd4d1=['mti3mJm0mKTxCuDVuq','mJiWnJKXAxfLA3jO','mJm4ntm2oe9rA0LbqW','mKjKC1bbrq','nJqZmZq4m2zoq29Vrq','odG2nZqWwLrfzxne','ndiXodKZmfH1sLPmyq','mZqXDxfizKXr','mtzUtvzUqwq','nMvhug5OrG','mJe3odK5CejQAvfP'];_0x2e8e=function(){return _0x5bd4d1;};return _0x2e8e();}
@@ -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 _0x61d4(_0x40b8a4,_0x206f54){_0x40b8a4=_0x40b8a4-0x144;var _0x3ecf55=_0x3ecf();var _0x61d4c5=_0x3ecf55[_0x40b8a4];if(_0x61d4['apVhfR']===undefined){var _0x398121=function(_0x404ed4){var _0x15325d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x18f3b9='',_0x508e3e='';for(var _0x3b6452=0x0,_0x4b9f93,_0x106153,_0x4cd848=0x0;_0x106153=_0x404ed4['charAt'](_0x4cd848++);~_0x106153&&(_0x4b9f93=_0x3b6452%0x4?_0x4b9f93*0x40+_0x106153:_0x106153,_0x3b6452++%0x4)?_0x18f3b9+=String['fromCharCode'](0xff&_0x4b9f93>>(-0x2*_0x3b6452&0x6)):0x0){_0x106153=_0x15325d['indexOf'](_0x106153);}for(var _0x352dfd=0x0,_0x17c812=_0x18f3b9['length'];_0x352dfd<_0x17c812;_0x352dfd++){_0x508e3e+='%'+('00'+_0x18f3b9['charCodeAt'](_0x352dfd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x508e3e);};_0x61d4['oJjjnq']=_0x398121,_0x61d4['jrdPfQ']={},_0x61d4['apVhfR']=!![];}var _0x5f01aa=_0x3ecf55[0x0],_0x430ff2=_0x40b8a4+_0x5f01aa,_0x12e990=_0x61d4['jrdPfQ'][_0x430ff2];return!_0x12e990?(_0x61d4c5=_0x61d4['oJjjnq'](_0x61d4c5),_0x61d4['jrdPfQ'][_0x430ff2]=_0x61d4c5):_0x61d4c5=_0x12e990,_0x61d4c5;}function _0x3ecf(){var _0x3d7e06=['nJq2mMXet0fvDq','ndyYndi1CvnYrM1L','mtfNswzosgu','mJG2m1HWDNfOta','mZy5mtK1m2PlCwvxqW','mZyYody4v1HSBunO','mZzKAhLKEwe','ofrZz3H2ua','nJi0mtKXme1HtfnAqG','mJm1mJnMBfv0txG','ndjws2vLr2m','mJe4mZuWEuL0rMfK'];_0x3ecf=function(){return _0x3d7e06;};return _0x3ecf();}(function(_0x46b6b1,_0x2a859d){var _0x312841=_0x61d4,_0x23e26c=_0x46b6b1();while(!![]){try{var _0x32caca=parseInt(_0x312841(0x148))/0x1+-parseInt(_0x312841(0x145))/0x2*(-parseInt(_0x312841(0x144))/0x3)+parseInt(_0x312841(0x14d))/0x4*(parseInt(_0x312841(0x146))/0x5)+-parseInt(_0x312841(0x147))/0x6*(parseInt(_0x312841(0x14a))/0x7)+-parseInt(_0x312841(0x14e))/0x8*(-parseInt(_0x312841(0x14b))/0x9)+-parseInt(_0x312841(0x14f))/0xa+-parseInt(_0x312841(0x149))/0xb*(parseInt(_0x312841(0x14c))/0xc);if(_0x32caca===_0x2a859d)break;else _0x23e26c['push'](_0x23e26c['shift']());}catch(_0x4030c4){_0x23e26c['push'](_0x23e26c['shift']());}}}(_0x3ecf,0x51e32));
@@ -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 _0x1e94(_0x527cb4,_0x2b2012){_0x527cb4=_0x527cb4-0x170;var _0x116197=_0x1161();var _0x1e94df=_0x116197[_0x527cb4];if(_0x1e94['bamWqT']===undefined){var _0x2c493b=function(_0xf2e0c2){var _0x2d2f44='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x505fe7='',_0x235631='';for(var _0x2ef18e=0x0,_0x2702ae,_0x57bc33,_0x26b503=0x0;_0x57bc33=_0xf2e0c2['charAt'](_0x26b503++);~_0x57bc33&&(_0x2702ae=_0x2ef18e%0x4?_0x2702ae*0x40+_0x57bc33:_0x57bc33,_0x2ef18e++%0x4)?_0x505fe7+=String['fromCharCode'](0xff&_0x2702ae>>(-0x2*_0x2ef18e&0x6)):0x0){_0x57bc33=_0x2d2f44['indexOf'](_0x57bc33);}for(var _0x57b0f1=0x0,_0x45cce0=_0x505fe7['length'];_0x57b0f1<_0x45cce0;_0x57b0f1++){_0x235631+='%'+('00'+_0x505fe7['charCodeAt'](_0x57b0f1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x235631);};_0x1e94['tvsGyK']=_0x2c493b,_0x1e94['Zbjosn']={},_0x1e94['bamWqT']=!![];}var _0x454f61=_0x116197[0x0],_0xa25d0f=_0x527cb4+_0x454f61,_0x1ebe04=_0x1e94['Zbjosn'][_0xa25d0f];return!_0x1ebe04?(_0x1e94df=_0x1e94['tvsGyK'](_0x1e94df),_0x1e94['Zbjosn'][_0xa25d0f]=_0x1e94df):_0x1e94df=_0x1ebe04,_0x1e94df;}(function(_0x4ee732,_0x31806e){var _0x55b327=_0x1e94,_0x9fdf97=_0x4ee732();while(!![]){try{var _0x4c522b=-parseInt(_0x55b327(0x174))/0x1*(parseInt(_0x55b327(0x178))/0x2)+parseInt(_0x55b327(0x17b))/0x3*(-parseInt(_0x55b327(0x176))/0x4)+parseInt(_0x55b327(0x175))/0x5*(-parseInt(_0x55b327(0x170))/0x6)+-parseInt(_0x55b327(0x173))/0x7+parseInt(_0x55b327(0x177))/0x8*(-parseInt(_0x55b327(0x172))/0x9)+-parseInt(_0x55b327(0x171))/0xa*(-parseInt(_0x55b327(0x17a))/0xb)+parseInt(_0x55b327(0x179))/0xc;if(_0x4c522b===_0x31806e)break;else _0x9fdf97['push'](_0x9fdf97['shift']());}catch(_0x174611){_0x9fdf97['push'](_0x9fdf97['shift']());}}}(_0x1161,0xd1980));function _0x1161(){var _0x4a2f17=['nJG4otyZCMjmBw5U','ndm1vxrWCNbu','mtG3nta0ohHmCMPesG','mJmWEeTwCfrH','owr6yMDMuq','mta2mZKWodnpuhjAr3q','mtfYt0jvwuK','nw9tDfrSuq','nZqWvNrhz01V','mtmWnde3mZzIq1jiwey','oda4nZrMrufbC1q','ndaYmJu5ntz6BvHZCNi'];_0x1161=function(){return _0x4a2f17;};return _0x1161();}
@@ -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 _0xbe23(_0x3edc4c,_0x4ae80c){_0x3edc4c=_0x3edc4c-0xe9;const _0x34c23c=_0x34c2();let _0xbe23de=_0x34c23c[_0x3edc4c];if(_0xbe23['dNSqep']===undefined){var _0x45cc4a=function(_0x2483a4){const _0x2454c4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xb2cb5f='',_0x149ae8='';for(let _0x52f7de=0x0,_0x10a242,_0x5b76aa,_0x1401df=0x0;_0x5b76aa=_0x2483a4['charAt'](_0x1401df++);~_0x5b76aa&&(_0x10a242=_0x52f7de%0x4?_0x10a242*0x40+_0x5b76aa:_0x5b76aa,_0x52f7de++%0x4)?_0xb2cb5f+=String['fromCharCode'](0xff&_0x10a242>>(-0x2*_0x52f7de&0x6)):0x0){_0x5b76aa=_0x2454c4['indexOf'](_0x5b76aa);}for(let _0x3ea32a=0x0,_0x52562a=_0xb2cb5f['length'];_0x3ea32a<_0x52562a;_0x3ea32a++){_0x149ae8+='%'+('00'+_0xb2cb5f['charCodeAt'](_0x3ea32a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x149ae8);};_0xbe23['NWrplj']=_0x45cc4a,_0xbe23['JDIcYT']={},_0xbe23['dNSqep']=!![];}const _0xeb3a49=_0x34c23c[0x0],_0x4248c9=_0x3edc4c+_0xeb3a49,_0x4dbe7a=_0xbe23['JDIcYT'][_0x4248c9];return!_0x4dbe7a?(_0xbe23de=_0xbe23['NWrplj'](_0xbe23de),_0xbe23['JDIcYT'][_0x4248c9]=_0xbe23de):_0xbe23de=_0x4dbe7a,_0xbe23de;}(function(_0x42d7ec,_0x3e58c5){const _0x493d62=_0xbe23,_0x2159a5=_0x42d7ec();while(!![]){try{const _0x39d87f=-parseInt(_0x493d62(0xef))/0x1*(parseInt(_0x493d62(0xf2))/0x2)+parseInt(_0x493d62(0xee))/0x3*(-parseInt(_0x493d62(0xec))/0x4)+parseInt(_0x493d62(0xf0))/0x5+-parseInt(_0x493d62(0xf4))/0x6*(parseInt(_0x493d62(0xf6))/0x7)+parseInt(_0x493d62(0xe9))/0x8+parseInt(_0x493d62(0xf3))/0x9*(-parseInt(_0x493d62(0xf1))/0xa)+parseInt(_0x493d62(0xf5))/0xb*(parseInt(_0x493d62(0xeb))/0xc);if(_0x39d87f===_0x3e58c5)break;else _0x2159a5['push'](_0x2159a5['shift']());}catch(_0x4ed93c){_0x2159a5['push'](_0x2159a5['shift']());}}}(_0x34c2,0xbfdab));import{execFile as _0x18e252}from'node:child_process';function _0x34c2(){const _0x30ae72=['ndKWoty0mejNruresW','mZbezhHLCui','mZm0q1Htr2rM','mta4ndC0m2TwtMXOEa','mJC1mtzLrvvUqKO','mtfYy3zUqvG','nZu2r1nOwhvH','odiZnJCYB0Hzruff','D2HPy2G','mZy3ndm3otzNwxrstfy','mZaWmJK5nKPut0X0za','sevLALu','nMvIChvWva','nJaWnhfgy29orq'];_0x34c2=function(){return _0x30ae72;};return _0x34c2();}import{promisify as _0x155539}from'node:util';const t=_0x155539(_0x18e252);export async function which(_0x293bdb){const _0x1478b0=_0xbe23,_0x114c50={'HEejU':function(_0x525641,_0x455977,_0x2a35db){return _0x525641(_0x455977,_0x2a35db);},'RPZyn':_0x1478b0(0xea)};try{return await _0x114c50[_0x1478b0(0xed)](t,_0x114c50['RPZyn'],[_0x293bdb]),!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/build.sh`, `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
  ### 인증 방식