@sparrowai/sparrow-mcp 1.0.11 → 1.1.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.
- package/.agent/skills/README.md +67 -0
- package/.agent/skills/sparrow-comprehensive-security/SKILL.md +141 -0
- package/.agent/skills/sparrow-fix-vulnerabilities/SKILL.md +101 -0
- package/.agent/skills/sparrow-full-audit/SKILL.md +103 -0
- package/.agent/skills/sparrow-mcp-test/SKILL.md +199 -0
- package/.agent/skills/sparrow-quick-scan/SKILL.md +91 -0
- package/.agent/skills/sparrow-sca-check/SKILL.md +126 -0
- package/README.md +65 -0
- package/bin/sparrow-mcp-test.cjs +29 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/scripts/mcp-test/mcp-client.d.ts +39 -0
- package/dist/scripts/mcp-test/mcp-client.js +1 -0
- package/dist/scripts/test-runner/standalone-test.d.ts +1 -0
- package/dist/scripts/test-runner/standalone-test.js +1 -0
- package/dist/src/config/appConfig.js +1 -0
- package/dist/src/config/constants.d.ts +45 -0
- package/dist/src/config/constants.js +1 -0
- package/dist/src/controllers/__tests__/analysis.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/analysis.controller.test.js +1 -0
- package/dist/src/controllers/__tests__/sast.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/sast.controller.test.js +1 -0
- package/dist/src/controllers/__tests__/sca.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/sca.controller.test.js +1 -0
- package/dist/src/controllers/__tests__/security.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/security.controller.test.js +1 -0
- package/dist/src/controllers/__tests__/system.controller.test.d.ts +1 -0
- package/dist/src/controllers/__tests__/system.controller.test.js +1 -0
- package/dist/src/controllers/analysis.controller.d.ts +150 -0
- package/dist/src/controllers/analysis.controller.js +1 -0
- package/dist/src/controllers/sast.controller.d.ts +109 -0
- package/dist/src/controllers/sast.controller.js +1 -0
- package/dist/src/controllers/sca.controller.d.ts +119 -0
- package/dist/src/controllers/sca.controller.js +1 -0
- package/dist/src/controllers/security.controller.d.ts +30 -0
- package/dist/src/controllers/security.controller.js +1 -0
- package/dist/src/controllers/system.controller.d.ts +2 -0
- package/dist/src/controllers/system.controller.js +1 -0
- package/dist/src/schemas/tool.schemas.d.ts +51 -0
- package/dist/src/schemas/tool.schemas.js +1 -0
- package/dist/src/server.js +2 -0
- package/dist/src/services/__tests__/checker.service.test.d.ts +1 -0
- package/dist/src/services/__tests__/checker.service.test.js +1 -0
- package/dist/src/services/__tests__/llm.service.test.d.ts +1 -0
- package/dist/src/services/__tests__/llm.service.test.js +1 -0
- package/dist/src/services/__tests__/s3.service.test.d.ts +1 -0
- package/dist/src/services/__tests__/s3.service.test.js +1 -0
- package/dist/src/services/__tests__/sparrow.service.test.d.ts +1 -0
- package/dist/src/services/__tests__/sparrow.service.test.js +1 -0
- package/dist/{services → src/services}/analysis.service.d.ts +32 -10
- package/dist/src/services/analysis.service.js +1 -0
- package/dist/src/services/checker.service.d.ts +21 -0
- package/dist/src/services/checker.service.js +1 -0
- package/dist/src/services/llm/AnthropicProvider.d.ts +7 -0
- package/dist/src/services/llm/AnthropicProvider.js +1 -0
- package/dist/src/services/llm/BedrockProvider.d.ts +7 -0
- package/dist/src/services/llm/BedrockProvider.js +1 -0
- package/dist/src/services/llm/GeminiProvider.d.ts +7 -0
- package/dist/src/services/llm/GeminiProvider.js +1 -0
- package/dist/src/services/llm/LLMFactory.d.ts +4 -0
- package/dist/src/services/llm/LLMFactory.js +1 -0
- package/dist/src/services/llm/LLMProvider.d.ts +3 -0
- package/dist/src/services/llm/LLMProvider.js +1 -0
- package/dist/src/services/llm/OllamaProvider.d.ts +7 -0
- package/dist/src/services/llm/OllamaProvider.js +1 -0
- package/dist/src/services/llm/OpenAIProvider.d.ts +7 -0
- package/dist/src/services/llm/OpenAIProvider.js +1 -0
- package/dist/{services → src/services}/llm.service.d.ts +1 -2
- package/dist/src/services/llm.service.js +1 -0
- package/dist/src/services/s3.service.d.ts +33 -0
- package/dist/src/services/s3.service.js +1 -0
- package/dist/{services → src/services}/sparrow.service.d.ts +3 -15
- package/dist/src/services/sparrow.service.js +1 -0
- package/dist/src/types/types.d.ts +186 -0
- package/dist/src/types/types.js +1 -0
- package/dist/src/utils/__tests__/crypto.util.test.d.ts +1 -0
- package/dist/src/utils/__tests__/crypto.util.test.js +1 -0
- package/dist/src/utils/__tests__/diff.util.test.d.ts +1 -0
- package/dist/src/utils/__tests__/diff.util.test.js +1 -0
- package/dist/src/utils/__tests__/fileManager.test.d.ts +1 -0
- package/dist/src/utils/__tests__/fileManager.test.js +1 -0
- package/dist/src/utils/__tests__/fileManagerSecure.test.d.ts +1 -0
- package/dist/src/utils/__tests__/fileManagerSecure.test.js +1 -0
- package/dist/src/utils/__tests__/logger.test.d.ts +1 -0
- package/dist/src/utils/__tests__/logger.test.js +1 -0
- package/dist/src/utils/crypto.util.d.ts +3 -0
- package/dist/src/utils/crypto.util.js +1 -0
- package/dist/src/utils/diff.util.js +1 -0
- package/dist/src/utils/fileManager.d.ts +7 -0
- package/dist/src/utils/fileManager.js +1 -0
- package/dist/src/utils/fileManagerSecure.d.ts +8 -0
- package/dist/src/utils/fileManagerSecure.js +1 -0
- package/dist/src/utils/logger.js +1 -0
- package/package.json +28 -7
- package/test-cases-example.md +97 -0
- package/dist/config/appConfig.js +0 -1
- package/dist/server.js +0 -2
- package/dist/services/analysis.service.js +0 -1
- package/dist/services/llm.service.js +0 -1
- package/dist/services/s3.service.d.ts +0 -75
- package/dist/services/s3.service.js +0 -1
- package/dist/services/sparrow.service.js +0 -1
- package/dist/types/types.d.ts +0 -100
- package/dist/types/types.js +0 -1
- package/dist/utils/crypto.util.d.ts +0 -36
- package/dist/utils/crypto.util.js +0 -1
- package/dist/utils/diff.util.js +0 -1
- package/dist/utils/logger.js +0 -1
- /package/dist/{config → src/config}/appConfig.d.ts +0 -0
- /package/dist/{server.d.ts → src/server.d.ts} +0 -0
- /package/dist/{utils → src/utils}/diff.util.d.ts +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
package/dist/server.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
const a1_0xd5bbd1=a1_0x2f45;(function(_0x56a44d,_0x346fa4){const _0xda79a8=a1_0x2f45,_0x2bb337=_0x56a44d();while(!![]){try{const _0x261f3e=-parseInt(_0xda79a8(0x533))/0x1*(parseInt(_0xda79a8(0x42c))/0x2)+parseInt(_0xda79a8(0x445))/0x3*(-parseInt(_0xda79a8(0x6e5))/0x4)+-parseInt(_0xda79a8(0x3e5))/0x5*(parseInt(_0xda79a8(0x329))/0x6)+parseInt(_0xda79a8(0x586))/0x7*(-parseInt(_0xda79a8(0x2e0))/0x8)+-parseInt(_0xda79a8(0x3cc))/0x9+-parseInt(_0xda79a8(0x655))/0xa*(parseInt(_0xda79a8(0x3d2))/0xb)+parseInt(_0xda79a8(0x5f7))/0xc*(parseInt(_0xda79a8(0x23a))/0xd);if(_0x261f3e===_0x346fa4)break;else _0x2bb337['push'](_0x2bb337['shift']());}catch(_0xce59a1){_0x2bb337['push'](_0x2bb337['shift']());}}}(a1_0x560c,0x8c73b));function a1_0x2f45(_0x5aa9aa,_0x196716){_0x5aa9aa=_0x5aa9aa-0x1de;const _0x2aa097=a1_0x560c();let _0x3b1a01=_0x2aa097[_0x5aa9aa];return _0x3b1a01;}const a1_0x4840b5=(function(){let _0x5c7634=!![];return function(_0x533a39,_0x3448b7){const _0x3e3a6b=_0x5c7634?function(){const _0x382bf6=a1_0x2f45;if(_0x3448b7){const _0x3e1083=_0x3448b7[_0x382bf6(0x610)](_0x533a39,arguments);return _0x3448b7=null,_0x3e1083;}}:function(){};return _0x5c7634=![],_0x3e3a6b;};}()),a1_0x3b1a01=a1_0x4840b5(this,function(){const _0x323b01=a1_0x2f45,_0xcb48ef={};_0xcb48ef[_0x323b01(0x585)]=_0x323b01(0x2f2)+'+$';const _0x3cf52d=_0xcb48ef;return a1_0x3b1a01[_0x323b01(0x55c)]()[_0x323b01(0x290)]('(((.+)+)+)'+'+$')[_0x323b01(0x55c)]()[_0x323b01(0x27b)+'r'](a1_0x3b1a01)[_0x323b01(0x290)](_0x3cf52d['qZDvy']);});a1_0x3b1a01();import{McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{z}from'zod';import{AnalysisService}from'./services/analysis.service.js';import{logger}from'./utils/logger.js';import a1_0x424d0b from'path';import a1_0xb25a37 from'fs';import{fileURLToPath}from'url';function a1_0x560c(){const _0x2e6d67=['#\x20일반적인\x20워크플','Progress\x20t','L\x22:\x20\x22https','도\x20기본\x20분석\x20기능','값**:\x0a-\x20`an','ysis_progr','_analysis_','ration\x20ser','s`로\x20결과\x20확인\x0a','SPARROW_AP','\x20수신\x0a\x0a###\x204','array','으로\x20처리됩니다.\x0a','\x20\x20-\x20진행률:\x200','version','sis_progre','파싱]\x20→\x20[LLM','\x0a-\x20Result:','`:\x20전처리\x20중\x0a-','ocations\x20-','result','sparrowai/','Upload\x20a\x20Z','\x20Results\x0a\x0a','\x0a\x0a##\x20Analy','ity','l\x20filename','lt`\x20필드를\x20확인','전한\x20코드\x20(Oll','r\x20analysis','IP\x20file\x20to','일**\x20(<\x201MB','code\x0a\x0a분석\x20결','de`\x20실행\x0a\x0a##','*:\x20SAST\x20보안','is_status','Analysis\x20I','ff\x0a\x0a**참고**','ZIP\x20file\x20p','Initializa','\x0a여러\x20파일을\x20한\x20','TAmBd','황을\x20추적합니다.\x0a','I로부터\x20`anal','overview','://localho','Name\x20of\x20th','\x20다음\x20단계를\x20거칩','YSIS,\x20POST','sId`를\x20가지며,','ysis\x20statu',':\x20파일\x20이름\x0a\x0a*','\x20Security\x20','을\x20실제\x20Ollam','여야\x20함\x0a-\x20`re','설정의\x20`\x22env\x22','mbined.log','모니터링합니다.\x0a\x0a',']\x0a```\x0a\x0a##\x20','t/server.j','\x20string):\x20','이\x20있는지\x20확인\x0a-','**S3\x20스토리지*','k_analysis','인\x0a-\x20Cursor','져옵니다.\x0a\x0a**매','te_secure_','tatus\x20chec','[COMPLETE]','cureCodeFr','oken\x20not\x20p','`은\x20필수입니다.\x0a','\x20request.','to\x20retriev','I\x20생성\x20분석\x20브리','코드를\x20생성합니다.','List\x20of\x20fi','turn\x20the\x20r','RL\x22:\x20\x22http','*\x20(전처리)\x0a\x20\x20','D\x0a-\x20`fileC','EL\x22:\x20\x22gpt-','so\x20support','registerTo','\x20status:\x20','getAnalysi','\x20하나를\x20사용해보기','한\x20코드\x20생성)을\x20','ate\x20secure',':\x0a1.\x20분석\x20결과','연결\x20해제로\x20표시됩','fing.','on\x20request','ipFilePath','청을\x20전송합니다\x0a2','the\x20entire','스에\x20가입\x0a2.\x20대','ded','es\x20origina','lama가\x20없어도\x20','기본\x20분석\x20기능은\x20','all','mand\x20API에\x20','E를\x20완전히\x20재시작','AI\x20기반\x20브리핑*','용\x20예시:**\x0a``','1500uhqLmA','ss`를\x20사용하면\x20','용합니다:\x0a-\x20**','택사항)\x0a분석\x20ID','다음\x20결과\x20중\x20하나','rgs\x22:\x20[\x22C:','`analysisI','\x0a```\x0a\x20\x20\x20\x20\x20','_security\x0a','Progress\x20T','orking\x20dir','되고\x20초기화\x20중\x0a\x20','%\x0a\x0a2.\x20**RE','-30분\x20이상\x0a\x0a*','en\x22,\x0a\x20\x20\x20\x20\x20','\x20Ollama는\x20선','#\x203.\x20진행\x20상황','비교하여\x20diff를','깅\x0a\x0a**참고**:','\x20진행\x20중\x0a-\x20`P','cp\x22:\x20{\x0a\x20\x20\x20','ureCodeBri','\x20있습니다.\x0a\x0a##','**\x0a-\x20`fold','\x20`mcp.json','apply','File\x20name','이어야\x20함\x0a-\x20`g','견된\x20취약점\x20배열\x0a','ath\x20not\x20pr','fOgNn','section','\x0a\x0a##\x20파일\x20크기','urity\x20anal','\x2090%\x0a\x0a6.\x20*','atus`:\x20현재\x20','개변수:**\x0a-\x20`','bilities\x20F','00%\x20(API에서','CJJxb','을\x20실제\x20사용자\x20이','l\x20in\x20milli','기준\x20상대\x20경로)\x0a','Ollama\x20기능(','\x20character','\x20file\x20path','username>\x5c','다.\x0a-\x20**타임아','S`:\x20후처리\x20중\x0a','파일\x20경로\x0a6.\x20(','됨\x0a\x0a**중요**:','Check\x20the\x20','**반환값:**\x0a-','.\x20get_anal','AMA_BASE_U','descriptio','은\x20다음\x20상태를\x20거','세요:\x0a[파일\x20내용','uested:\x20','##\x201.\x20anal','로\x20완료됨\x0a-\x20`F','ompleted\x20s','\x0a\x0a**도구**:\x20','l/lib/node','secureCode','der','1.0.0','\x20The\x20fileP','성화하려면\x20MCP\x20','\x0a\x0a---\x0a\x0a','\x20\x20\x20\x20\x20\x20\x20\x20\x22O','\x0a```\x0a\x0a##\x20S','alysis_res','ompleted.\x0a','체\x20키\x20(업로드된\x20','#\x20전체\x20분석\x20프로','rsor\x20재시작\x0a\x0a','분석\x20브리핑\x20생성\x20','lities`:\x20발','\x20정상적으로\x20작동합','미설정\x20또는\x20실패\x20',':\x20분석\x20실패,\x20결','*COMPLETE*','quest\x20fail','ZIP\x20file\x20s','\x20결과\x20제약\x0a\x0a##','Number`:\x20취','the\x20guide\x20','\x20failed)\x0a-','한\x20코드\x20생성\x20(선','configurat','\x203000)\x0a\x0a**','을\x20S3\x20스토리지에','Folder\x20Sec','42960lWmFLk','파일\x20형식\x0a\x0a현재\x20','태\x20추적**:\x20`t','e\x20generati','\x20file,\x20and','get\x20guide:','\x201:\x20단일\x20파일\x20','YQoBA','`npm\x20root\x20','ama\x20사용\x20시,\x20','FromPaths','PI\x20서비스\x20상태\x20','a**:\x20LLM\x20통','워크\x20연결\x20확인\x0a-','luding\x20vul','s\x20started.','\x20SAST\x20분석이\x20','`\x20모델이\x20설치되어','ess','\x20로컬로\x20설치한\x20경','gress\x20Noti','*:\x20파일\x20업로드/','없으면\x20원본\x20코드\x20','eSecurity','s\x20only\x20pro','\x20\x20\x20\x22sparro','pm\x5c\x5cnode_m','*:\x0a-\x20Ollam','\x20취약점\x20유형\x20식별','E_URL`\x20환경\x20','d\x22:\x20\x22node\x22','pt-oss:20b','Pre-proces','\x20받습니다\x0a2.\x20파','\x0a-\x20`PRE_PR','름\x20다이어그램\x0a\x0a`','d`:\x20분석의\x20고유',':\x20시작\x20준비\x20완료','ested:\x20','코드와\x20취약점\x20정보','\x20추적\x0a`track','Path\x20to\x20th','_API_KEY\x22`','king\x20analy','\x20(선택사항)\x0a\x0a*','sis\x20status','증상**:\x20LLM\x20','\x20of\x20','\x0a\x20\x20\x22mcpSer','\x0aFolder:\x20','s\x20single\x20f','\x20파일**:\x20\x0a\x20\x20','으로\x20추적할\x20수\x20있','Progress\x20n','constraint','FAIL','할\x20폴더의\x20경로\x0a-','get\x20Sparro','\x0a-\x20**대규모\x20파','능은\x20**선택적으로','브리핑\x20생성에\x20실패','\x20있습니다.','is\x20failed:','도록\x20지정할\x20수\x20있','):\x20약\x201-3분\x0a','rted:\x20','th.','D:\x20','tp://local','text','*\x0a-\x20`INIT`','NhbJZ',',\x20`FAIL`,\x20','otificatio','3단계:\x20분석\x20진행','\x20취약점이\x20발견된\x20','*ZIP\x20파일**:','Y\x22:\x20\x22your-','\x0a\x0a**프로세스**','한\x20버전을\x20생성할\x20','*:\x20분석\x20요청이\x20','대한\x20설명\x0a-\x20`d','rly.','ZIP\x20File\x20S','vers\x22:\x20{\x0a\x20','\x0a\x0a###\x203.\x20S','NALYSIS**\x20','progress','analysisBr','ysis\x20reque','g\x20log\x20dire','\x20\x20\x20-\x20`line','.\x20MCP\x20도구\x20중','n\x0a{\x0a\x20\x20\x22mcp','거나\x20Ollama\x20','의\x20경우\x20분석\x20시간','\x20메모리\x20사용량이\x20','택사항)\x0a\x0a다음\x20기','lysisId`\x20(','분석의\x20고유\x20식별자','변수가\x20올바르게\x20설','Generate\x20s','택사항입니다.\x20Ol','Y,\x20PRE_PRO','경우\x20메모리\x20사용량','ided.',':\x20분석\x20중인\x20파일','zipFilePat','정리\x20및\x20포맷팅\x0a\x20','READY','은\x20정상적으로\x20작동','E_PROCESS*','Ready','\x20설정합니다.\x20서버','D\x0a-\x20`inter','e.\x20If\x20not\x20','일**\x20(10-10','파일이나\x20폴더를\x20별','eckerKey`:','\x0a\x0a##\x20Code\x20','`vulnerabi','urity\x20Anal','**위치**:\x20`~','0%\x0a\x0a4.\x20**A','`diff`:\x20변경','로\x20압축합니다\x20(단','Final\x20anal','**:\x20`get_a','ctory)','드/다운로드\x20시간이','로우\x0a\x0a##\x201.\x20','ailed\x20with','P\x20guide\x20re','token','\x0a-\x20Go\x0a-\x20기타','-\x20**MCP\x20SD','확장자\x20필터링**:','vulnerabil','sor\x5cmcp.js','\x20`ANALYSIS','추가하세요.','Ready\x20to\x20s','는\x20설명\x20제공\x0a-\x20','g):\x20`analy','16Poqpua','valid,\x20con','File\x20secur','message','\x20필요합니다.\x0a-\x20','oss:20b\x22,\x0a',',\x20원본\x20코드가\x20그','FAILED','는\x20`failed`','sResults','_URL\x22:\x20\x22ht','Analysis','의\x20이름\x0a\x0a**반환','\x20있는지\x20확인\x0a-\x20','정상\x20작동합니다.','get_sparro','ty`,\x20`anal','\x20request\x20t','s\x22:\x20{\x0a\x20\x20\x20\x20','ple\x20file\x20p','\x22sparrow-m','과를\x20기반으로\x20안전','찾으세요:\x0a\x0a```','y\x20Analysis','\x0a##\x205.\x20ana','-\x20`status`','n\x20progress','nerabiliti','리적\x20상태\x20(`co','ESS`인\x20경우에만','\x20취약점을\x20분석해주','능)\x0a-\x20`POST','aths`\x20(str','\x20안전한\x20코드\x20생성','**파일\x20보안\x20분석','ss\x20notific','me\x20if\x20not\x20','다.\x0a\x0a##\x20동시\x20','\x0a\x20\x20\x20\x20\x20\x20','(HIGH,\x20MED','ated\x20(opti','lama\x20없이도\x20기','Analysis\x20s','sults`\x0a\x0a**','\x20진행\x20상황\x20모니터','ecurity\x20an','니다:\x0a\x0a###\x201','*:\x20분석이\x20너무\x20','\x20`progress','alysis.\x20Al','flow','다.\x0a\x0a**매개변수','*:\x20분석\x20결과를\x20','CP\x20진행\x20알림을\x20','를\x20제공합니다:\x0a\x0a','약점을\x20자동으로\x20분','어도\x20기본\x20분석\x20기',':\x20안전한\x20코드에\x20','wing\x20','\x20단계**:\x0a\x0a1.','결과\x20ZIP\x20파일을','CESS,\x20ANAL','D\x20from\x20the','ons','rrowai/spa','generate\x20s','emand\x20API*','\x20주요\x20기능\x0a\x0a-\x20','올바르게\x20설정되었는','ile\x20analys','older\x20into','시보드에서\x20API\x20',':\x20초기화\x0a-\x20`R','folderPath','\x20the\x20file\x20','를\x20사용하여\x20분석을','\x20\x20\x20↓\x0a[결과\x20반','`:\x20모든\x20로그\x0a\x20','-\x20`logs/co','`\x0a이\x20파일의\x20보안','ecurity\x0a\x0a단','ver.js\x22],\x0a','Content\x20of','resolve','WaNMd','total','Request\x20se','_PROCESS,\x20','태\x20모니터링**:\x20','MCP\x20설정을\x20업데','sStatus','\x20분석\x20요청이\x20수신','**:\x20분석\x20브리핑','\x0a\x0a##\x206.\x20검토','\x20동시에\x20분석하는\x20','Folder\x20sec','dirname','\x0a3.\x20압축된\x20파일','계\x0a\x0a5.\x20**PO','[STOP]\x20Ana','IT`:\x20초기화\x20중','PI\x20키로\x20교체하세','이\x20안전한\x20코드에\x20','is.','합니다:\x0a\x20\x20\x20-\x20','e-generato','ons/progre','\x20Context\x20P','led:','Analysis\x20c','시간\x20추적\x0a-\x20**','분석\x20제약\x0a\x0a-\x20동','s\x20tracking','석\x20준비가\x20완료되고','bvFCY','\x22java\x22,\x20\x22g','\x0a-\x20**중요**:','적\x20number):','Compress\x20a','erPath`\x20(s','ide\x20or\x20a\x20s','ecurity\x20An','analysisId','시\x20동작**:\x0a-\x20','ure_code`\x0a','로그\x20파일\x20모두에\x20','설정\x20시\x20요구사항*','tools','시에\x20여러\x20분석을\x20','ON\x20파일들을\x20파싱','arrow\x20OnDe','우:\x0a\x0a```jso','\x5cAppData\x5c\x5c','to\x20analyze','led:\x20','도구**:\x20`get','져오기\x0a`get_a','content','488046yIZHwP','esult`\x20필드에','status`,\x20`','yze_file_s','사용\x20시에만\x20제공)','의\x20상세\x20결과를\x20가','로\x20등)\x0a3.\x20AP','Multi-File','_file_secu','OCESS`:\x20전처','eBNAj','BASE_URL\x22`','ysis\x20faile','\x20Ollama가\x20없',',\x0a\x20\x20\x20\x20\x20\x20\x22a','#\x20MCP\x20도구\x20사','zipFileNam','안전한\x20코드\x20간의\x20','ecure\x20Code','ssing','본\x20보안\x20분석\x20기능',']\x0a\x20\x20\x20\x20↓\x0a[안','{\x0a\x20\x20\x20\x20\x22spa','\x0a**분석\x20단계:*','*\x0a-\x20`fileC','ty\x20analysi',':\x20여러\x20파일,\x20폴','\x20`generate','l\x20file\x20con','은\x20경우,\x20원본\x20코','sing','ress\x20them\x20','\x20\x20\x20\x20\x20\x20\x22OLL','-\x20`zipFile','rking\x20dire','mkdirSync','sparrowclo','\x20시작\x20대기\x20중\x0a\x20','quested:\x20','\x20`SUCCESS`','\x20based\x20on\x20','\x20\x20\x20\x20\x22args\x22','a\x20file\x20by\x20','\x0aZIP\x20File:',')\x0a\x0a##\x20전체\x20흐','\x20→\x20INIT\x20→\x20','##\x204.\x20분석\x20타','핑)를\x20검색합니다.','sBrief`:\x20A','I_KEY`가\x20올바','Servers\x22:\x20','\x20version','\x20확인합니다.\x0a\x0a*','\x20반환\x0a-\x20안전한\x20','lts\x0a\x0a##\x20Se','\x20`analysis','\x20후처리\x20중\x0a-\x20`','69:11434`)','\x20반환합니다\x0a\x0a**','#\x20분석\x20흐름\x0a\x0a#','확인\x0a-\x20더\x20작은\x20','\x20검토합니다.\x0a\x0a#','선택:\x20안전한\x20코드','elative\x20to','ing):\x20분석\x20I','constructo','\x0aStatus:\x20','yze_folder','요청할\x20수\x20있지만,','ng/creatin','황을\x20모니터링할\x20수','ity\x20Analys','.\x0a\x0a**매개변수:','``\x0a[파일/폴더/','_meta','ODE_ENV\x22:\x20','\x20개요\x0a\x0a스패로우\x20','cure\x20Code\x0a','축되어\x20분석됩니다.','는\x20다음\x20언어를\x20지','E_PROCESS\x20','택사항)\x0a-\x20**S','\x20생성합니다\x0a6.\x20','sis\x20and\x20re','습니다.\x0a\x0a##\x20메','Code\x20Gener','search','\x0a\x0a**반환값**:','석할\x20파일\x20경로\x20목','Generate\x20S','대한\x20브리핑을\x20생성','ss\x0a\x0a실시간\x20알림','다\x0a2.\x20`resu','error.log','\x0a-\x20`analys','AIL`:\x20분석이\x20','name','`과\x20`\x22OLLAM','\x20사용할\x20수\x20있습니','ng\x0a','analyzeFol','nt\x22\x0a\x20\x20\x20\x20\x20\x20','Analysis\x20p','으로\x20분석\x20진행\x20상','\x20설정에서\x20MCP\x20','\x20상태\x20추적\x0a\x0a**','이\x20오래\x20걸리는\x20단','\x20100MB\x0a-\x20*','uccessfull','차이점\x20(unifi','*참고사항**:\x0a-','추적을\x20위한\x20고유\x20','Periodical','is\x20Results','API\x20오류로\x20실패','returns\x20th','-\x20Ollama가\x20','\x0a-\x20Status:','\x20키에\x20충분한\x20권한','cp.json`\x20파','tus:\x20','INIT','\x20있습니다.\x0a3.\x20','STOP','p/dist/ser','\x20분석\x0a-\x20**Wi','tus`:\x20초기\x20상','lysis\x20fail','록\x20(절대\x20경로\x20또','sis\x20Briefi','단계:\x20파일\x20업로드','va\x20(주요\x20지원)','ANALYSIS','3.\x20`get_an','\x0a\x0a-\x20**콘솔**','CodeBrief`','diff','ief','참고**:\x20큰\x20파일','달\x0a2.\x20`trac','ssage`:\x20상태','f\x20an\x20analy','과\x20없음\x0a\x20\x20\x20-\x20','핑\x20(Ollama\x20','curity`에서\x20','t`:\x20실제\x20결과\x20','컬\x20설치의\x20경우\x0a\x0a','원합니다:\x0a-\x20Ja','\x20a\x20ZIP\x20fil','IUM,\x20LOW)\x0a','keys','warn','통해\x20전송되는\x20진행','ror','*\x20(완료)\x0a\x20\x20\x20','tatus\x20upda','.\x20요청에는\x20다음\x20','e\x20folder\x20t','OnDemand\x20A','준비\x20완료\x0a-\x20`P','est\x20securi','\x204.\x20genera','o\x20analyze.','or\x20IDE\x20설정\x0a','트워크\x20및\x20API\x20','tinuing\x20st','128VgqDRt','\x20from\x20a\x20co','ADY**\x20(준비\x20','키\x20획득\x0a3.\x20MC','\x0a\x0a###\x20시나리오','오래\x20걸리거나\x20타임','필요,\x20없으면\x20원본','w\x20MCP\x20tool','\x0a\x0a**매개변수:*','해결\x20방법**:\x0a-','값:**\x0a-\x20`an','nerate_sec','demand-tok','recursive','aths\x20array','ARROW_API_','리핑을\x20생성합니다\x20','parrowai\x5c\x5c','(((.+)+)+)','esults.\x20Re','sparrow-mc','정확한\x20경로를\x20얻으','Folder\x20pat','curity\x0a\x0a전체','한\x20코드를\x20생성합니','Analysis\x20S','2.\x20get_ana','progress\x20o','DuGdr',':\x20분석이\x20성공적으','acking\x20fai','nd\x20origina','provided,\x20','\x20브리핑\x20생성]\x0a\x20','`STOP`:\x20분석','\x20생성]\x20→\x20[LL','ction.','0MB\x0a\x0a###\x202','LYSIS\x20stag','de\x22,\x0a\x20\x20\x20\x20\x20','\x0a\x0a##\x20Disco','반환)\x0a-\x20`sec','Failed\x20to\x20','sing...','generate_s','\x20요청합니다.\x0a\x0a#','in\x20progres','Progress\x20i','vered\x20Vuln','sis.','e`\x20(선택적\x20st','\x20\x20\x20\x22SPARRO','ZIP]\x0a\x20\x20\x20\x20↓','\x0a-\x20Vulnera','INIT,\x20READ','tart\x20analy','rack_analy','working\x20di','fileConten','File\x20paths','seconds\x20(d','\x20방법**:\x0a-\x20`','\x20다운로드\x20가능\x0a\x20','단계:\x20분석\x20요청\x0a','일\x20파일의\x20보안\x20취','\x0a-\x20**진행\x20상황','\x20중지,\x20결과\x20없음','\x20request\x20s',':\x20네트워크\x20연결이','d.sparrowc','he\x20full\x20gu','압축\x20해제하고\x20JS','\x20Protocol\x20','6YvInVu','ess`\x0a\x0a**분석',':\x20Ollama가\x20','o\x20analyze\x20','tring):\x20안전','atus\x20check',':\x0a1.\x20파일\x20내용','석하고\x20안전한\x20코드','M\x20코드\x20생성]\x20→','troublesho','omAnalysis','o\x20current\x20','\x0a분석이\x20완료되면\x20','`./node_mo','alysis\x20fai','100)\x0a-\x20`me','\x0a-\x20`secure','이\x20더\x20오래\x20걸릴\x20','증가할\x20수\x20있습니다',']\x20Analysis','string):\x20생','/ondemand.','크\x20연결\x20확인\x0a\x0a#','ID:\x20','연결에\x20대한\x20오류가','...','rrow-mcp/d','ursor\x20IDE에','-g`를\x20사용하여\x20','%\x0a\x0a3.\x20**PR','\x0a**매개변수:**','isId`:\x20분석\x20','\x0a-\x20분석이\x20`CO','analysis\x20f','\x20→\x20POST_PR','사용하려면\x20설정하세','견된\x20취약점\x20목록\x0a','습니다.\x0a\x0a##\x20네','p://localh','):\x20약\x203-10분','료\x20시\x20최종\x20상태\x0a','한\x20코드\x20자동\x20생성','zip_securi','\x20업로드합니다\x0a4.','가\x20자동으로\x20연결되','ion','\x20\x20\x20-\x20가장\x20시간','\x0aAnalysis\x20','API\x20설정\x0a\x0a1.','P\x20설정에서\x20`SP','_modules/@','_URL`이\x20올바른','nalysis\x20ha','\x22:\x20{\x0a\x20\x20\x20\x20\x20','us\x0a\x0a진행\x20중인\x20','alysis_pro','라\x20각\x20파일에\x20대해','\x20원본\x20코드와\x20생성','니다.\x0a\x0a**반환값','curity\x20ana',':\x20분석\x20ID\x0a\x0a*','\x0a###\x20분석\x20결과','e\x20(absolut','s\x20ID:\x20','error','을\x20적용합니다.\x0a\x0a',':\x20\x22your-on','connect','\x0a#\x20Secure\x20','(`SUCCESS`','.js`를\x20`dis','`json\x0a{\x0a\x20\x20','ess`로\x20진행\x20상','vfvsM','전한\x20코드\x20반환]\x0a','\x20\x20\x20\x20\x20\x20\x22com','ck\x20interva','\x0a\x20\x20\x20-\x20S3\x20객','analyzeMul','oot\x20-g\x0a```','on`\x20(Windo','ken','analysis\x20r','00)','pecific\x20se','gress`:\x20자동','\x20이름\x0a\x0a**반환값','RE_PROCESS','ama\x20serve`','nstall\x20-g`','s`:\x20현재\x20분석\x20','선택사항)\x20LLM을','string','`\x20(string)','되어야\x20합니다.\x0a\x0a','브를\x20한\x20번에\x20분석','e\x20ZIP\x20file','*반환값:**\x0a-\x20','ssing...','must\x20suppo','COMPLETE`:','\x20LLM\x20기능\x20(선','한\x20`analysi','→\x20ANALYSIS','ze_files_s','w\x20OnDemand','를\x20사용하는\x20경우,','ODEL\x22:\x20\x22gp','르고\x20만료되지\x20않았','와\x20원본\x20파일\x20내용','\x0a\x0a###\x205단계:','join','rrow-mcp\x22:','ults`에서\x20제공','\x20**INIT**\x20','or에서\x20Java\x20','서버\x20상태\x20확인\x0a3','\x20\x22OLLAMA_M','ze_file_se','`:\x20현재\x20분석\x20상','결과\x20확인','analyzeZip','\x0a1.\x20Sparro','(초기화)\x0a\x20\x20\x20-','\x20분석이\x20`COMP','\x0a-\x20**소규모\x20파','\x20API에서\x20분석\x20','_secure_co','\x20failed.','jnMAo','es\x20and\x20ana','specified)','W_API_KEY\x22','existsSync','파일은\x20자동으로\x20압','\x20알림을\x20통한\x20분석','providing\x20','\x0a**전제조건**:','코드를\x20작성합니다.','ST_PROCESS','\x20to\x20be\x20cre','저장되므로,\x20동일한','lt`가\x20`SUCC','describe','oken\x20is\x20no','ed\x20diff\x20형식','stored\x20(op','\x20in\x20progre','ontent`\x20(s','ations:\x20','지\x20확인\x0a-\x20API','MCP\x20secure','`:\x20분석\x20진행\x20중','t\x20to\x20gener','rovided','LLAMA_BASE','요.\x0a-\x20전역\x20설치','N/A','\x0a-\x20**Diff\x20','progressTo','`\x20파일\x20저장\x0a2.','\x0a**Ollama\x20','생성된\x20ZIP\x20파일','2362932nBsitE','ecure\x20code','tatus\x20requ','\x20번호\x0a\x20\x20\x20-\x20`','):\x20','\x20storage\x20a','1507jgsrju','(Ollama\x20필요','Unknown\x20er','filePathCo','1.\x20`analyz','ecurity`로\x20','ities','curity`\x20도구','드가\x20그대로\x20반환됩','#\x207.\x20변경\x20사항','s:\x20','bash\x0anpm\x20r','\x20-\x20파일\x20압축\x20해','\x20요청\x0a`analy','(선택사항)\x20원본\x20','nalysis\x20re','\x20-\x20실제\x20SAST','alysis\x20inc','**\x20(후처리)\x0a\x20','5486790JRDzIA','도로\x20분석하는\x20것을','로\x20전역\x20설치한\x20경','\x20file\x20cont','\x20사용하는\x20경우,\x20','\x20not\x20provi','프로젝트에\x20패키지를','\x20정상\x20완료,\x20결과','프로세스**:\x0a1.','\x20-\x20진행률:\x2010','lysis\x20brie','실패\x20시:\x20\x22분석\x20','**안전한\x20코드\x20생','\x20`fileName','식별자\x0a-\x20`sta','E`:\x20분석\x20완료\x0a','리\x20중\x0a-\x20`ANA','CoqHJ','분석\x20브리핑\x20생성*','Security\x20a','le_securit','\x0a-\x20`OLLAMA','lyze_files','정보가\x20포함됩니다:','ows\x20경로의\x20`<','lder_secur','\x0a[분석\x20요청]\x20→','G_LEVEL\x22:\x20','at\x20least\x20o','\x20분석\x20ID\x0a-\x20`','type','-ondemand-','.\x0a-\x20Ollama','\x0aFinal\x20Sta','시에만\x20제공)\x0a-\x20','_BASE_URL\x22','workflow','filePath`:','[SUCCESS]\x20','[FAIL]\x20Ana','\x20설정\x20(아래\x20참조','사용합니다.\x20먼저\x20','p\x5c\x5cdist\x5c\x5cs','ed\x20results','XMUBD','cp.json`\x20(','\x20또는\x20파일\x20경로를','**:\x0a-\x20`sec','\x20`ollama\x20l','-\x20각\x20분석은\x20고유','분석의\x20진행\x20상황을','completed.','values','\x20오류\x0a\x0a**증상*','lysis\x20for\x20','lete\x20prope',':\x20개발\x20중\x20실시간','relative\x20t','약사항**:\x0a-\x20파','\x0a-\x20`READY`','ROW_API_KE','*매개변수:**\x0a-','\x20Briefing\x0a','is\x20Status','합니다.\x0a\x0a**매개','analyze_fo','\x22/usr/loca','(absolute\x20','e_folder_s','results`로\x20','교체하세요\x20(예:\x20','382TgcHnJ','\x0aMCP\x20서버를\x20C','#\x20지원\x20언어\x20및\x20',')\x0a-\x20모델이\x20다운','문제로\x20인한\x20타임아','Analysis\x20i','A_MODEL\x22`은','*:\x0a-\x20`get_','서\x20비동기로\x20처리됩','tring):\x20분석','paths\x20or\x20r','unified\x20di','##\x20예시\x20시나리오','반환된\x20분석\x20ID\x0a','nalysis_pr','합니다\x0a7.\x20결과를','폴더\x20경로\x20전달\x0a2','s`로\x20교체하고\x20프','\x20선택사항)\x0a\x0a##','로그를\x20기록합니다:','안\x20분석의\x20분석\x20I','4.\x20`genera','ted:\x20','ound:\x20','command\x22:\x20','685653GncrWv','사용\x20시에만\x20제공,','}\x0a}\x0a```\x0a\x0a#','ZIP\x20file\x20n','일\x20파일**:\x20최대','0MB):\x20약\x2010','-\x20`COMPLET','[ANALYSIS]','analysis.','실시간으로\x20진행\x20상','username>`','\x20`analyze_','progress`를','업로드]\x0a\x20\x20\x20\x20↓','esults.','ing\x20Sparro','equested:\x20','니다\x0a4.\x20(선택사','링\x0a\x0a##\x20기술\x20스','ame`\x20(선택적\x20','코드\x20생성\x20실패\x20시','valMs`\x20(선택','약점을\x20분석합니다.','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x22','w\x20MCP\x20Guid','tatus)\x0a\x0a분석','드\x0a\x0a##\x20일반적인','analyze_zi','**:\x20Java\x20코','3\x20접근이\x20필요합니','p_security','\x22mcpServer','(분석\x20진행)\x0a\x20\x20','fication.\x20',':20b\x20모델,\x20선','a\x20서버가\x20실행\x20중','ment\x22\x0a\x20\x20\x20\x20','\x20로그\x0a-\x20**로그','칩니다:\x0a-\x20`IN','analyzeFil','token\x22`을\x20실','번에\x20분석합니다.\x20','path\x20or\x20re','ring):\x20ZIP','-\x20`analysi','info','\x20`track_an','\x20Sparrow\x20A','Post-proce','\x0a\x0a##\x205.\x20안전','\x20combined:','반환값:**\x0a-\x20M','의\x20경우,\x20Wind','Ollama\x20인스턴','Get\x20Analys','확인\x20및\x20진행\x20알림','원본\x20파일\x20내용\x0a\x0a','약점을\x20수정한\x20안전','map','분석\x20상태\x0a\x0a##\x20','\x20특징\x0a\x0a1.\x20**','structured','analyze_fi','toUpperCas','\x20제공되는\x20경우)\x0a','\x20(진행률\x20사용\x20가','파일\x20위치)\x0a\x20\x20\x20','isError','이\x20올바른지\x20확인\x20','tatus`:\x20수동','\x20상태에\x20따라\x20업로','s\x20Overview','니다.\x0a-\x20네트워크',':\x20분석할\x20ZIP\x20','completed,','\x20코드\x20생성\x0a5.\x20','parrow\x20OnD','로드되었는지\x20확인:','모든\x20환경\x20변수가\x20','ost:11434`','T`\x20또는\x20`REA','\x20security\x20','://ondeman','loud.ai\x22,\x0a','W_API_URL\x22','자\x20필터,\x20제외\x20경','Name`\x20(선택적','.\x0a4.\x20**LLM','File','\x0aNumber\x20of','LYSIS`:\x20분석',')\x0a7.\x20결과를\x20반','e\x20full\x20gui','ist`\x0a-\x20원격\x20','다중\x20파일\x20분석**','dules/@spa','secure-cod','\x20\x20\x20\x20\x20\x20\x22env','\x20Analysis\x20','`\x20섹션에\x20`\x22LO',':**\x0a-\x20`ana','\x20로컬\x20개발\x20빌드를','length','ity`:\x20심각도\x20','OLLAMA_BAS','Track\x20Anal','\x20크기,\x20복잡도,\x20','alysis','ff\x0a','각\x20파일의\x20결과\x20확','will\x20retry','\x20ZIP으로\x20압축)','\x20분석\x20수행\x0a\x20\x20\x20','POST_PROCE','를\x20반환합니다:\x0a-','s.\x20You\x20can','\x20제한\x0a\x0a-\x20**단','일이\x20올바른\x20위치에','generateSe','tional,\x20us','\x20더\x20오래\x20걸릴\x20수','를\x20추가하세요.\x0a-','File\x20Secur','te\x20via\x20Pro','수\x20있습니다.\x0a\x0a#','is\x20status:','Ollama\x20사용\x20','.\x20`track_a','logs','oting','AlYdZ','ectory)','sted:\x20','\x20적용\x0a제안된\x20안전','\x20큰\x20파일은\x20분석에','Id\x20획득]\x0a\x20\x20\x20','과\x20안전한\x20코드\x20생','lysisId`:\x20','\x20오류\x20로그만\x0a\x0a더','optional','nston**:\x20로','\x20다운로드합니다\x0a4','스를\x20사용하는\x20경우','LLM을\x20선택적으로','\x20\x20-\x20분석\x20결과\x20','\x20연결\x20확인\x0a\x0aMC','\x20사용하여\x20안전한\x20','\x20분석\x20시간은\x20파일','\x20IDE\x20열기\x0a2.','Content','CCESS`여야\x20함','정되어\x20있어야\x20함\x0a','\x20최대\x20100MB\x20','oken\x22,\x0a\x20\x20\x20',',\x20error:\x20','checkerKey','cation','\x0a**macOS/L','\x20`\x22OLLAMA_','h\x20not\x20prov','\x20\x20\x20\x22comman','를\x20다운로드합니다\x20','AqScL','\x20최종\x20결과\x20포함\x20','밀리초)\x20(기본값:','합니다.','\x0a\x0a...\x20(Sho','Sparrow\x20On','터링\x0a3.\x20`get','ss...','order','Brief','substring','#\x20설정\x20가이드\x0a\x0a','COMPLETE','가능한\x20언어\x0a\x0a**','rogress\x20tr','버가\x20Cursor에','는\x20작업\x20디렉토리\x20','ending,\x20pr','.\x0a-\x20`\x22your','*도구**:\x20`ge','toLowerCas','lysis_stat','일\x20파일의\x20경우에도','st:11434\x22,','##\x20Sparrow','보안\x20취약점을\x20분석','xhyAZ','s\x20without\x20','lid,\x20stopp','ecure_code','/.cursor/m','KEY`\x20환경\x20변수',')\x0a-\x20`resul','\x20\x20}\x0a\x20\x20\x20\x20}\x0a','-\x20진행률:\x200-1','\x20사용합니다.\x20Ol',':\x20원본\x20코드\x20반환','\x20식별자\x0a-\x20`st','\x20선택사항입니다.\x20','ame\x20to\x20be\x20','변수:**\x0a-\x20`z','status','PRE_PROCES','ure_code`를','ocessing,\x20','**\x20(1-10MB','Multi-file','el\x20Context','ed:\x20','LLM\x20서비스를\x20사','```\x0a\x0a##\x20주요','\x22NODE_ENV\x22','parrow\x20API','mand\x20API**','\x20{\x0a\x20\x20\x20\x20\x20\x20\x22','}\x0a\x20\x20\x20\x20}\x0a\x20\x20','-\x20분석\x20완료\x0a\x20\x20','\x20API에\x20분석\x20요','get_analys','\x22,\x0a\x20\x20\x20\x20\x20\x20\x20','\x20정보를\x20추출합니다','\x20알림\x0a-\x20분석\x20완','READY\x20→\x20PR','\x20(Result)\x0a','efault:\x2030','##\x20Analysi','Roaming\x5c\x5cn','Log\x20file\x20l','P`:\x20분석이\x20중지',',\x0a\x20\x20\x20\x20\x20\x20\x22e','OLLAMA_MOD','de`:\x20생성된\x20안','다운로드\x0a\x0a**도구','폴더\x20전체\x20분석\x0a\x0a','\x20사용하여\x20분석을\x20','실패함\x0a-\x20`STO','819Bgdtyk','\x20-\x20`logs/e','기능이\x20작동하지\x20않','\x20사용하여\x20분석\x20브','\x0a1.\x20Cursor','%\x0aMessage:','항)\x20LLM이\x20안전','`get_analy','\x22debug\x22`를\x20','security`,','\x20\x22args\x22:\x20[','fileName','방법**:\x0a-\x20`m','는지\x20확인하려면:\x0a',')\x0a\x0a##\x20Curs','n\x20failed\x20(','ile_securi','ile\x20checki','trim','erver.js\x22]','\x20메시지\x0a\x0a##\x203','nv\x22:\x20{\x0a\x20\x20\x20','으로\x20상태\x20확인\x0a-','nalysis\x20pr','eScript**:','할\x20파일의\x20내용\x0a-','t-oss:20b\x22','e_code`에서\x20','ity\x20analys','\x20분석의\x20고유\x20식별','.\x20`analyze','includes','태\x20(보통\x20`INI','\x20연결\x20실패\x0a\x0a**','tages\x20are\x20','r\x20IDE와\x20통합되','**결과\x20캐싱**:','자\x0a-\x20`statu','x)\x20또는\x20`%AP','\x0a```json\x0a{','PDATA%\x5cCur','toString','드]\x20→\x20[취약점\x20','지\x20확인:\x20`oll','\x20환경\x20변수가\x20설정','\x20folder\x20na','PI에\x20대한\x20네트워','_folder_se','ver\x20starte','isId`\x20(str','\x22developme','*상태\x20확인\x20방법*','\x20\x20\x20\x20\x20\x22SPAR','\x20추가로\x20소요될\x20수','\x20\x20\x20\x20\x20\x20\x20\x20\x22N','#\x20분석\x20상태\x20(S','esults\x20req','expired\x20to','대로\x20반환됩니다.\x0a','\x0a\x0a##\x202.\x20분석','임아웃\x0a\x0a**증상*','w-mcp\x22:\x20{\x0a','e.js가\x20설치되어','notificati','k\x20failed:','\x20분석\x20완료','mpleted\x20an','\x20if\x20not\x20sp','he\x20client\x20','o\x22]`).\x0a\x0a##','될\x20때까지\x20대기합니','\x20고려\x0a\x0a##\x20로깅','ud.ai\x22,\x0a\x20\x20','lysis\x20was\x20','\x20분석\x20요청\x20시\x20특','w_mcp_guid','Secure\x20cod','분석\x20진행\x20상황\x20실','분석\x20시작\x0a2.\x20`',':\x20\x22https:/','.\x20[','성**:\x20발견된\x20취','qZDvy','480536VzxYvA','unt','\x20있습니다\x0a-\x20네트','했습니다.\x22\x20메시지','MPLETE\x0a\x20\x20\x20','macOS/Linu','get\x20analys'];a1_0x560c=function(){return _0x2e6d67;};return a1_0x560c();}const a1_0x1986af={};a1_0x1986af['name']=a1_0xd5bbd1(0x4a5)+a1_0xd5bbd1(0x219)+'r',a1_0x1986af[a1_0xd5bbd1(0x59b)]=a1_0xd5bbd1(0x639);const server=new McpServer(a1_0x1986af),analysisService=new AnalysisService();server[a1_0xd5bbd1(0x5e0)+'ol'](a1_0xd5bbd1(0x483)+a1_0xd5bbd1(0x3f9)+'y',{'title':a1_0xd5bbd1(0x4bf)+a1_0xd5bbd1(0x281)+'is','description':a1_0xd5bbd1(0x206)+a1_0xd5bbd1(0x364)+a1_0xd5bbd1(0x41b)+a1_0xd5bbd1(0x264)+a1_0xd5bbd1(0x3b1)+a1_0xd5bbd1(0x5ec)+a1_0xd5bbd1(0x3e8)+'ent.','inputSchema':{'fileContent':z['string']()[a1_0xd5bbd1(0x3b8)](a1_0xd5bbd1(0x202)+a1_0xd5bbd1(0x1fa)+a1_0xd5bbd1(0x235)),'fileName':z['string']()[a1_0xd5bbd1(0x3b8)](a1_0xd5bbd1(0x611))}},async({fileContent:_0xcc0627,fileName:_0x3b299e})=>{const _0x165a58=a1_0xd5bbd1,_0x38725b={};_0x38725b[_0x165a58(0x69c)]=function(_0x471553,_0x104c2a){return _0x471553 instanceof _0x104c2a;};const _0xe4e370=_0x38725b;try{logger['info'](_0x165a58(0x3f8)+_0x165a58(0x3e1)+_0x165a58(0x260)+_0x3b299e);const _0x398eb9={};_0x398eb9[_0x165a58(0x31a)+'t']=_0xcc0627,_0x398eb9[_0x165a58(0x53e)]=_0x3b299e;const _0x29606a=await analysisService[_0x165a58(0x46c)+_0x165a58(0x66c)](_0x398eb9),_0x2c4287={};_0x2c4287['type']=_0x165a58(0x69a),_0x2c4287[_0x165a58(0x69a)]=_0x165a58(0x3f8)+'nalysis\x20ha'+'s\x20started.'+_0x165a58(0x358)+_0x165a58(0x340)+_0x29606a[_0x165a58(0x22a)];const _0x29edc1={};_0x29edc1[_0x165a58(0x22a)]=_0x29606a['analysisId'],_0x29edc1[_0x165a58(0x510)]=_0x29606a[_0x165a58(0x510)];const _0x2c9369={};return _0x2c9369[_0x165a58(0x239)]=[_0x2c4287],_0x2c9369[_0x165a58(0x482)+_0x165a58(0x4da)]=_0x29edc1,_0x2c9369;}catch(_0x3bc57f){return logger['error'](_0x165a58(0x6e7)+_0x165a58(0x54f)+_0x165a58(0x693),_0x3bc57f),{'content':[{'type':'text','text':_0x165a58(0x3f8)+_0x165a58(0x3e1)+_0x165a58(0x64a)+'ed:\x20'+(_0xe4e370[_0x165a58(0x69c)](_0x3bc57f,Error)?_0x3bc57f[_0x165a58(0x6e8)]:'Unknown\x20er'+'ror')}],'structuredContent':{'error':_0x3bc57f instanceof Error?_0x3bc57f[_0x165a58(0x6e8)]:_0x165a58(0x3d4)+_0x165a58(0x2d3)}};}}),server[a1_0xd5bbd1(0x5e0)+'ol'](a1_0xd5bbd1(0x521)+a1_0xd5bbd1(0x5b0),{'title':a1_0xd5bbd1(0x47b)+a1_0xd5bbd1(0x424),'description':a1_0xd5bbd1(0x62a)+a1_0xd5bbd1(0x2fb)+a1_0xd5bbd1(0x2c7)+a1_0xd5bbd1(0x28d)+a1_0xd5bbd1(0x5da)+a1_0xd5bbd1(0x453),'inputSchema':{'analysisId':z['string']()[a1_0xd5bbd1(0x3b8)](a1_0xd5bbd1(0x5b1)+'D')}},async({analysisId:_0x30ce60})=>{const _0x2477a5=a1_0xd5bbd1,_0x5b56c9={};_0x5b56c9['AlYdZ']=_0x2477a5(0x3c6),_0x5b56c9[_0x2477a5(0x3aa)]=_0x2477a5(0x3d4)+_0x2477a5(0x2d3);const _0x361c67=_0x5b56c9;try{logger[_0x2477a5(0x472)](_0x2477a5(0x70f)+_0x2477a5(0x3ce)+_0x2477a5(0x67b)+_0x30ce60);const _0x2a05f7=await analysisService[_0x2477a5(0x5e2)+_0x2477a5(0x20a)](_0x30ce60),_0x5430a9=_0x2a05f7['status']===_0x2477a5(0x4f3)&&_0x2a05f7[_0x2477a5(0x5a1)]?_0x2a05f7['result']:_0x2a05f7['status'],_0x2da3e9={};_0x2da3e9['type']='text',_0x2da3e9[_0x2477a5(0x69a)]=_0x2477a5(0x2f9)+'tatus:\x20'+_0x5430a9+('\x0aProgress:'+'\x20')+(_0x2a05f7[_0x2477a5(0x6ac)]||0x0)+(_0x2477a5(0x538)+'\x20')+(_0x2a05f7[_0x2477a5(0x6e8)]||_0x361c67[_0x2477a5(0x4c7)]);const _0x5005ff={};_0x5005ff[_0x2477a5(0x22a)]=_0x30ce60,_0x5005ff[_0x2477a5(0x510)]=_0x5430a9,_0x5005ff[_0x2477a5(0x5a1)]=_0x2a05f7[_0x2477a5(0x5a1)],_0x5005ff['progress']=_0x2a05f7[_0x2477a5(0x6ac)],_0x5005ff[_0x2477a5(0x6e8)]=_0x2a05f7[_0x2477a5(0x6e8)];const _0x222b1b={};return _0x222b1b[_0x2477a5(0x239)]=[_0x2da3e9],_0x222b1b['structured'+_0x2477a5(0x4da)]=_0x5005ff,_0x222b1b;}catch(_0x5f4466){logger[_0x2477a5(0x369)]('Analysis\x20s'+_0x2477a5(0x5d0)+_0x2477a5(0x573),_0x5f4466);const _0x357e78={};_0x357e78[_0x2477a5(0x403)]=_0x2477a5(0x69a),_0x357e78[_0x2477a5(0x69a)]=_0x2477a5(0x30a)+_0x2477a5(0x58c)+_0x2477a5(0x4c2)+'\x20'+(_0x5f4466 instanceof Error?_0x5f4466[_0x2477a5(0x6e8)]:_0x361c67['jnMAo']);const _0x3922f9={};_0x3922f9[_0x2477a5(0x369)]=_0x5f4466 instanceof Error?_0x5f4466[_0x2477a5(0x6e8)]:_0x2477a5(0x3d4)+_0x2477a5(0x2d3);const _0x3a761c={};return _0x3a761c[_0x2477a5(0x239)]=[_0x357e78],_0x3a761c[_0x2477a5(0x482)+_0x2477a5(0x4da)]=_0x3922f9,_0x3a761c;}}),server['registerTo'+'ol'](a1_0xd5bbd1(0x521)+'is_results',{'title':'Get\x20Analys'+a1_0xd5bbd1(0x2ab),'description':'Get\x20detail'+a1_0xd5bbd1(0x410)+a1_0xd5bbd1(0x2e1)+a1_0xd5bbd1(0x575)+a1_0xd5bbd1(0x3e3)+a1_0xd5bbd1(0x663)+a1_0xd5bbd1(0x700)+a1_0xd5bbd1(0x3ab)+a1_0xd5bbd1(0x3ef)+a1_0xd5bbd1(0x5e8),'inputSchema':{'analysisId':z[a1_0xd5bbd1(0x385)]()[a1_0xd5bbd1(0x3b8)](a1_0xd5bbd1(0x5b1)+'D')}},async({analysisId:_0x51cb72})=>{const _0x4bda2a=a1_0xd5bbd1;try{logger[_0x4bda2a(0x472)]('Analysis\x20r'+_0x4bda2a(0x56b)+_0x4bda2a(0x631)+_0x51cb72);const _0x5f3d74=await analysisService[_0x4bda2a(0x5e2)+_0x4bda2a(0x6ee)](_0x51cb72),_0x311e66=_0x5f3d74[_0x4bda2a(0x5a1)]??_0x5f3d74['status'],_0x5849ab=0x7a120,_0x28036e=(_0x473c0f,_0x52e143)=>{const _0x557375=_0x4bda2a;if(_0x473c0f[_0x557375(0x4ab)]<=_0x52e143)return _0x473c0f;return _0x473c0f['substring'](0x0,_0x52e143)+(_0x557375(0x4eb)+_0x557375(0x1ea)+_0x52e143+_0x557375(0x684)+_0x473c0f['length']+('\x20character'+'s)'));},_0x1bd67c=_0x5f3d74[_0x4bda2a(0x6de)+_0x4bda2a(0x3d8)][_0x4bda2a(0x47f)]((_0x14f80d,_0x563eae)=>_0x563eae+0x1+_0x4bda2a(0x583)+_0x14f80d['severity']+']\x20'+_0x14f80d[_0x4bda2a(0x4e0)]+':\x20'+_0x14f80d[_0x4bda2a(0x62e)+'n'])[_0x4bda2a(0x398)]('\x0a'),_0x21f1ff=('\x0a#\x20Securit'+_0x4bda2a(0x6fc)+_0x4bda2a(0x5a4)+_0x4bda2a(0x528)+_0x4bda2a(0x48c)+'\x0a-\x20Analysi'+_0x4bda2a(0x368)+_0x5f3d74[_0x4bda2a(0x22a)]+(_0x4bda2a(0x2af)+'\x20')+_0x311e66+(_0x4bda2a(0x59e)+'\x20')+(_0x5f3d74[_0x4bda2a(0x5a1)]||_0x4bda2a(0x3c6))+(_0x4bda2a(0x315)+_0x4bda2a(0x61c)+_0x4bda2a(0x443))+_0x5f3d74[_0x4bda2a(0x6de)+_0x4bda2a(0x3d8)][_0x4bda2a(0x4ab)]+(_0x4bda2a(0x5a5)+_0x4bda2a(0x2bb)+_0x4bda2a(0x29d))+_0x28036e(_0x5f3d74[_0x4bda2a(0x6ad)+_0x4bda2a(0x2c3)]||'',_0x5849ab)+(_0x4bda2a(0x308)+_0x4bda2a(0x310)+'erabilitie'+'s\x0a')+_0x28036e(_0x1bd67c,_0x5849ab)+_0x4bda2a(0x70b))[_0x4bda2a(0x545)](),_0x5e2325={'analysisId':_0x5f3d74[_0x4bda2a(0x22a)],'status':_0x311e66,'result':_0x5f3d74[_0x4bda2a(0x5a1)],'vulnerabilities':_0x5f3d74[_0x4bda2a(0x6de)+'ities'],'analysisBrief':_0x5f3d74[_0x4bda2a(0x6ad)+_0x4bda2a(0x2c3)]?_0x28036e(_0x5f3d74['analysisBr'+_0x4bda2a(0x2c3)],_0x5849ab):''},_0x319ccc={};_0x319ccc[_0x4bda2a(0x403)]=_0x4bda2a(0x69a),_0x319ccc[_0x4bda2a(0x69a)]=_0x21f1ff;const _0x329701={};return _0x329701[_0x4bda2a(0x239)]=[_0x319ccc],_0x329701[_0x4bda2a(0x482)+_0x4bda2a(0x4da)]=_0x5e2325,_0x329701;}catch(_0x5162e1){logger['error'](_0x4bda2a(0x30a)+_0x4bda2a(0x58c)+'is\x20results'+':',_0x5162e1);const _0x5d8532=_0x5162e1 instanceof Error?_0x5162e1[_0x4bda2a(0x6e8)]:_0x4bda2a(0x3d4)+'ror',_0x37e935={};_0x37e935[_0x4bda2a(0x403)]='text',_0x37e935['text']='Failed\x20to\x20'+'get\x20analys'+'is\x20results'+':\x20'+_0x5d8532;const _0x325b9b={};_0x325b9b[_0x4bda2a(0x369)]=_0x5d8532;const _0x255654={};return _0x255654['content']=[_0x37e935],_0x255654[_0x4bda2a(0x482)+_0x4bda2a(0x4da)]=_0x325b9b,_0x255654[_0x4bda2a(0x488)]=!![],_0x255654;}}),server[a1_0xd5bbd1(0x5e0)+'ol'](a1_0xd5bbd1(0x30c)+a1_0xd5bbd1(0x504),{'title':a1_0xd5bbd1(0x293)+'ecure\x20Code','description':a1_0xd5bbd1(0x6ba)+a1_0xd5bbd1(0x3cd)+a1_0xd5bbd1(0x262)+a1_0xd5bbd1(0x37b)+a1_0xd5bbd1(0x2f3)+'quires\x20ana'+'lysis\x20ID\x20a'+a1_0xd5bbd1(0x2ff)+a1_0xd5bbd1(0x256)+'tent.','inputSchema':{'analysisId':z[a1_0xd5bbd1(0x385)]()[a1_0xd5bbd1(0x3b8)]('Analysis\x20I'+a1_0xd5bbd1(0x1ee)+'\x20security\x20'+'analysis'),'fileContent':z['string']()[a1_0xd5bbd1(0x3b8)]('Original\x20f'+'ile\x20conten'+a1_0xd5bbd1(0x3c2)+a1_0xd5bbd1(0x5e5)+a1_0xd5bbd1(0x26d))}},async({analysisId:_0x53feb6,fileContent:_0x2da8a9})=>{const _0x2f9d4b=a1_0xd5bbd1,_0x103d7c={'fOgNn':function(_0x1ae665,_0x4a65e0,_0x3a095a){return _0x1ae665(_0x4a65e0,_0x3a095a);},'YQoBA':_0x2f9d4b(0x69a)};try{logger[_0x2f9d4b(0x472)](_0x2f9d4b(0x57f)+_0x2f9d4b(0x658)+_0x2f9d4b(0x5e9)+_0x2f9d4b(0x517)+_0x53feb6);const _0x345b21=await analysisService[_0x2f9d4b(0x4bb)+_0x2f9d4b(0x5d2)+_0x2f9d4b(0x333)](_0x53feb6,_0x2da8a9),_0x3cee03=0x7a120,_0x1a5ff4=(_0x27e504,_0x46aea9)=>{const _0x5411a0=_0x2f9d4b;if(_0x27e504[_0x5411a0(0x4ab)]<=_0x46aea9)return _0x27e504;return _0x27e504[_0x5411a0(0x4f1)](0x0,_0x46aea9)+(_0x5411a0(0x4eb)+_0x5411a0(0x1ea)+_0x46aea9+_0x5411a0(0x684)+_0x27e504[_0x5411a0(0x4ab)]+(_0x5411a0(0x623)+'s)'));},_0x438fb7=(_0x2f9d4b(0x36d)+_0x2f9d4b(0x28f)+'ation\x20Resu'+_0x2f9d4b(0x270)+_0x2f9d4b(0x287)+'```java\x0a'+_0x1a5ff4(_0x345b21[_0x2f9d4b(0x637)],_0x3cee03)+(_0x2f9d4b(0x63e)+_0x2f9d4b(0x24c)+_0x2f9d4b(0x423))+_0x1a5ff4(_0x345b21[_0x2f9d4b(0x637)+'Brief'],_0x3cee03)+(_0x2f9d4b(0x6cc)+'Changes\x20(D'+'iff)\x0a```di'+_0x2f9d4b(0x4b1))+_0x1a5ff4(_0x345b21[_0x2f9d4b(0x2c2)],_0x3cee03)+(_0x2f9d4b(0x5fe)+'\x20'))[_0x2f9d4b(0x545)](),_0x338b47={'analysisId':_0x53feb6,'secureCode':_0x1a5ff4(_0x345b21['secureCode'],_0x3cee03),'secureCodeBrief':_0x103d7c[_0x2f9d4b(0x615)](_0x1a5ff4,_0x345b21['secureCode'+_0x2f9d4b(0x4f0)],_0x3cee03),'diff':_0x1a5ff4(_0x345b21['diff'],_0x3cee03)},_0x2d1620={};_0x2d1620[_0x2f9d4b(0x403)]=_0x103d7c[_0x2f9d4b(0x65c)],_0x2d1620[_0x2f9d4b(0x69a)]=_0x438fb7;const _0x1618cd={};return _0x1618cd[_0x2f9d4b(0x239)]=[_0x2d1620],_0x1618cd[_0x2f9d4b(0x482)+_0x2f9d4b(0x4da)]=_0x338b47,_0x1618cd;}catch(_0xce1596){logger[_0x2f9d4b(0x369)](_0x2f9d4b(0x30a)+_0x2f9d4b(0x1f1)+_0x2f9d4b(0x3cd)+':',_0xce1596);const _0xc8b346=_0xce1596 instanceof Error?_0xce1596[_0x2f9d4b(0x6e8)]:_0x2f9d4b(0x3d4)+_0x2f9d4b(0x2d3),_0x353773={};_0x353773[_0x2f9d4b(0x403)]='text',_0x353773['text']=_0x2f9d4b(0x30a)+_0x2f9d4b(0x1f1)+_0x2f9d4b(0x3cd)+':\x20'+_0xc8b346;const _0x391d75={};_0x391d75[_0x2f9d4b(0x369)]=_0xc8b346;const _0x5792c6={};return _0x5792c6[_0x2f9d4b(0x239)]=[_0x353773],_0x5792c6['structured'+_0x2f9d4b(0x4da)]=_0x391d75,_0x5792c6[_0x2f9d4b(0x488)]=!![],_0x5792c6;}}),server[a1_0xd5bbd1(0x5e0)+'ol']('analyze_fi'+'les_securi'+'ty',{'title':a1_0xd5bbd1(0x241)+a1_0xd5bbd1(0x5c1)+'Analysis','description':'Read\x20multi'+a1_0xd5bbd1(0x6f8)+'aths,\x20comp'+a1_0xd5bbd1(0x259)+'into\x20a\x20ZIP'+a1_0xd5bbd1(0x659)+a1_0xd5bbd1(0x323)+a1_0xd5bbd1(0x712)+a1_0xd5bbd1(0x1e1)+a1_0xd5bbd1(0x5df)+a1_0xd5bbd1(0x687)+a1_0xd5bbd1(0x1f5)+a1_0xd5bbd1(0x217),'inputSchema':{'filePaths':z[a1_0xd5bbd1(0x598)](z[a1_0xd5bbd1(0x385)]())[a1_0xd5bbd1(0x3b8)](a1_0xd5bbd1(0x5d9)+'le\x20paths\x20t'+a1_0xd5bbd1(0x32c)+a1_0xd5bbd1(0x428)+a1_0xd5bbd1(0x436)+a1_0xd5bbd1(0x279)+'\x20current\x20w'+a1_0xd5bbd1(0x601)+a1_0xd5bbd1(0x4c8)),'zipFileName':z[a1_0xd5bbd1(0x385)]()['optional']()[a1_0xd5bbd1(0x3b8)](a1_0xd5bbd1(0x5bb)+a1_0xd5bbd1(0x389)+a1_0xd5bbd1(0x3b5)+a1_0xd5bbd1(0x70d)+'onal)')}},async({filePaths:_0x13e0c5,zipFileName:_0x45f958})=>{const _0x108489=a1_0xd5bbd1;try{if(!_0x13e0c5||_0x13e0c5[_0x108489(0x4ab)]===0x0){const _0x3f15a2={};_0x3f15a2[_0x108489(0x403)]=_0x108489(0x69a),_0x3f15a2[_0x108489(0x69a)]='No\x20files\x20t'+_0x108489(0x2dc)+_0x108489(0x63a)+_0x108489(0x2ee)+'\x20requires\x20'+_0x108489(0x401)+'ne\x20file\x20pa'+_0x108489(0x697);const _0x2845e7={};_0x2845e7['error']=_0x108489(0x31b)+_0x108489(0x3ea)+_0x108489(0x5ee);const _0x429d41={};return _0x429d41[_0x108489(0x239)]=[_0x3f15a2],_0x429d41[_0x108489(0x482)+_0x108489(0x4da)]=_0x2845e7,_0x429d41;}logger[_0x108489(0x472)](_0x108489(0x515)+_0x108489(0x496)+_0x108489(0x37b)+_0x108489(0x455)+_0x13e0c5[_0x108489(0x4ab)]+(_0x108489(0x624)+'s'));const _0xc7af52=await analysisService[_0x108489(0x377)+'tipleFiles'+_0x108489(0x65f)](_0x13e0c5,_0x45f958),_0x4fe7b4=_0x108489(0x3f8)+_0x108489(0x35d)+_0x108489(0x664)+_0x108489(0x49e)+_0x108489(0x624)+'s:\x20'+_0x13e0c5[_0x108489(0x4ab)]+(_0x108489(0x358)+_0x108489(0x340))+_0xc7af52[_0x108489(0x22a)]+_0x108489(0x27c)+_0xc7af52[_0x108489(0x510)],_0x5bcbc6={};_0x5bcbc6[_0x108489(0x403)]=_0x108489(0x69a),_0x5bcbc6[_0x108489(0x69a)]=_0x4fe7b4;const _0xbdefac={};_0xbdefac['analysisId']=_0xc7af52['analysisId'],_0xbdefac[_0x108489(0x510)]=_0xc7af52[_0x108489(0x510)],_0xbdefac[_0x108489(0x3d5)+_0x108489(0x587)]=_0x13e0c5[_0x108489(0x4ab)];const _0x1121f1={};return _0x1121f1['content']=[_0x5bcbc6],_0x1121f1[_0x108489(0x482)+'Content']=_0xbdefac,_0x1121f1;}catch(_0x4f83ee){logger[_0x108489(0x369)](_0x108489(0x515)+_0x108489(0x496)+_0x108489(0x34a)+'ailed:',_0x4f83ee);const _0x5a42bc={};_0x5a42bc[_0x108489(0x403)]='text',_0x5a42bc[_0x108489(0x69a)]='Security\x20a'+_0x108489(0x3e1)+_0x108489(0x64a)+_0x108489(0x517)+(_0x4f83ee instanceof Error?_0x4f83ee[_0x108489(0x6e8)]:_0x108489(0x3d4)+_0x108489(0x2d3));const _0x4d58a3={};_0x4d58a3[_0x108489(0x369)]=_0x4f83ee instanceof Error?_0x4f83ee[_0x108489(0x6e8)]:'Unknown\x20er'+'ror';const _0x3a381c={};return _0x3a381c[_0x108489(0x239)]=[_0x5a42bc],_0x3a381c[_0x108489(0x482)+_0x108489(0x4da)]=_0x4d58a3,_0x3a381c;}}),server[a1_0xd5bbd1(0x5e0)+'ol'](a1_0xd5bbd1(0x460)+a1_0xd5bbd1(0x463),{'title':a1_0xd5bbd1(0x6a8)+a1_0xd5bbd1(0x229)+a1_0xd5bbd1(0x4b0),'description':a1_0xd5bbd1(0x5a3)+a1_0xd5bbd1(0x5ab)+a1_0xd5bbd1(0x3d1)+'nd\x20request'+'\x20security\x20'+a1_0xd5bbd1(0x44d),'inputSchema':{'zipFilePath':z['string']()[a1_0xd5bbd1(0x3b8)](a1_0xd5bbd1(0x67e)+a1_0xd5bbd1(0x389)+'\x20to\x20analyz'+a1_0xd5bbd1(0x367)+'e\x20path\x20or\x20'+a1_0xd5bbd1(0x41e)+a1_0xd5bbd1(0x334)+a1_0xd5bbd1(0x319)+'rectory)'),'zipFileName':z[a1_0xd5bbd1(0x385)]()[a1_0xd5bbd1(0x4d0)]()['describe'](a1_0xd5bbd1(0x448)+a1_0xd5bbd1(0x50e)+a1_0xd5bbd1(0x3bb)+a1_0xd5bbd1(0x4bc)+a1_0xd5bbd1(0x5ef)+a1_0xd5bbd1(0x5a7)+a1_0xd5bbd1(0x576)+'ecified)')}},async({zipFilePath:_0x31962b,zipFileName:_0x3de54c})=>{const _0xca602e=a1_0xd5bbd1,_0x3a3981={};_0x3a3981[_0xca602e(0x501)]=function(_0x28fa9d,_0x1e37ee){return _0x28fa9d instanceof _0x1e37ee;};const _0x5c9cb5=_0x3a3981;try{if(!_0x31962b||_0x31962b[_0xca602e(0x545)]()[_0xca602e(0x4ab)]===0x0){const _0x2c02c3={};_0x2c02c3[_0xca602e(0x403)]=_0xca602e(0x69a),_0x2c02c3[_0xca602e(0x69a)]=_0xca602e(0x5b3)+_0xca602e(0x614)+'ovided.';const _0x387e02={};_0x387e02['error']=_0xca602e(0x5b3)+_0xca602e(0x614)+'ovided';const _0x3714a5={};return _0x3714a5['content']=[_0x2c02c3],_0x3714a5[_0xca602e(0x482)+_0xca602e(0x4da)]=_0x387e02,_0x3714a5;}logger[_0xca602e(0x472)](_0xca602e(0x64b)+_0xca602e(0x712)+'alysis\x20req'+_0xca602e(0x631)+_0x31962b);const _0x380a6e=await analysisService[_0xca602e(0x3a2)+_0xca602e(0x49d)](_0x31962b,_0x3de54c),_0x9ca254=_0xca602e(0x3f8)+'nalysis\x20ha'+_0xca602e(0x664)+_0xca602e(0x265)+'\x20'+_0x31962b+(_0xca602e(0x358)+_0xca602e(0x340))+_0x380a6e[_0xca602e(0x22a)]+_0xca602e(0x27c)+_0x380a6e['status'],_0x29cb84={};_0x29cb84[_0xca602e(0x403)]=_0xca602e(0x69a),_0x29cb84[_0xca602e(0x69a)]=_0x9ca254;const _0x5017ff={};_0x5017ff[_0xca602e(0x22a)]=_0x380a6e[_0xca602e(0x22a)],_0x5017ff[_0xca602e(0x510)]=_0x380a6e[_0xca602e(0x510)],_0x5017ff[_0xca602e(0x6c0)+'h']=_0x31962b;const _0x599181={};return _0x599181[_0xca602e(0x239)]=[_0x29cb84],_0x599181[_0xca602e(0x482)+'Content']=_0x5017ff,_0x599181;}catch(_0x1da38d){logger[_0xca602e(0x369)](_0xca602e(0x64b)+'ecurity\x20an'+_0xca602e(0x337)+_0xca602e(0x21c),_0x1da38d);const _0x3bf03d={};return _0x3bf03d[_0xca602e(0x403)]=_0xca602e(0x69a),_0x3bf03d[_0xca602e(0x69a)]=_0xca602e(0x3f8)+_0xca602e(0x3e1)+_0xca602e(0x64a)+'ed:\x20'+(_0x1da38d instanceof Error?_0x1da38d[_0xca602e(0x6e8)]:'Unknown\x20er'+_0xca602e(0x2d3)),{'content':[_0x3bf03d],'structuredContent':{'error':_0x5c9cb5[_0xca602e(0x501)](_0x1da38d,Error)?_0x1da38d['message']:_0xca602e(0x3d4)+_0xca602e(0x2d3)}};}}),server[a1_0xd5bbd1(0x5e0)+'ol'](a1_0xd5bbd1(0x426)+a1_0xd5bbd1(0x3fe)+a1_0xd5bbd1(0x5a6),{'title':a1_0xd5bbd1(0x654)+a1_0xd5bbd1(0x6ce)+'ysis','description':a1_0xd5bbd1(0x226)+'n\x20entire\x20f'+a1_0xd5bbd1(0x1f6)+a1_0xd5bbd1(0x2ce)+'e\x20and\x20requ'+a1_0xd5bbd1(0x2da)+a1_0xd5bbd1(0x253)+'s.','inputSchema':{'folderPath':z[a1_0xd5bbd1(0x385)]()['describe'](a1_0xd5bbd1(0x67e)+a1_0xd5bbd1(0x2d7)+a1_0xd5bbd1(0x32c)+'(absolute\x20'+a1_0xd5bbd1(0x46f)+'lative\x20to\x20'+'current\x20wo'+a1_0xd5bbd1(0x25c)+a1_0xd5bbd1(0x6d5)),'zipFileName':z['string']()[a1_0xd5bbd1(0x4d0)]()['describe'](a1_0xd5bbd1(0x5bb)+a1_0xd5bbd1(0x389)+a1_0xd5bbd1(0x3b5)+'ated\x20(opti'+'onal,\x20uses'+a1_0xd5bbd1(0x560)+a1_0xd5bbd1(0x709)+a1_0xd5bbd1(0x3ac))}},async({folderPath:_0x47bdc1,zipFileName:_0x6c52d5})=>{const _0xbfc850=a1_0xd5bbd1,_0x40f6f={};_0x40f6f[_0xbfc850(0x204)]=_0xbfc850(0x2f6)+_0xbfc850(0x4e4)+'ided';const _0x1e17d6=_0x40f6f;try{if(!_0x47bdc1||_0x47bdc1[_0xbfc850(0x545)]()[_0xbfc850(0x4ab)]===0x0){const _0x4fe337={};_0x4fe337[_0xbfc850(0x403)]=_0xbfc850(0x69a),_0x4fe337[_0xbfc850(0x69a)]=_0xbfc850(0x2f6)+_0xbfc850(0x4e4)+_0xbfc850(0x6be);const _0x4c942b={};_0x4c942b[_0xbfc850(0x369)]=_0x1e17d6['WaNMd'];const _0x399db3={};return _0x399db3[_0xbfc850(0x239)]=[_0x4fe337],_0x399db3[_0xbfc850(0x482)+_0xbfc850(0x4da)]=_0x4c942b,_0x399db3;}logger[_0xbfc850(0x472)]('Folder\x20sec'+'urity\x20anal'+_0xbfc850(0x6ae)+_0xbfc850(0x4c9)+_0x47bdc1);const _0x2bd2b5=await analysisService[_0xbfc850(0x29e)+_0xbfc850(0x638)](_0x47bdc1,_0x6c52d5),_0x32c5ca=_0xbfc850(0x3f8)+'nalysis\x20ha'+_0xbfc850(0x664)+_0xbfc850(0x686)+_0x47bdc1+(_0xbfc850(0x358)+'ID:\x20')+_0x2bd2b5['analysisId']+_0xbfc850(0x27c)+_0x2bd2b5[_0xbfc850(0x510)],_0x493500={};_0x493500[_0xbfc850(0x403)]=_0xbfc850(0x69a),_0x493500[_0xbfc850(0x69a)]=_0x32c5ca;const _0x539b57={};_0x539b57[_0xbfc850(0x22a)]=_0x2bd2b5[_0xbfc850(0x22a)],_0x539b57['status']=_0x2bd2b5[_0xbfc850(0x510)],_0x539b57[_0xbfc850(0x1f9)]=_0x47bdc1;const _0x3d2ff7={};return _0x3d2ff7[_0xbfc850(0x239)]=[_0x493500],_0x3d2ff7[_0xbfc850(0x482)+_0xbfc850(0x4da)]=_0x539b57,_0x3d2ff7;}catch(_0x162805){logger[_0xbfc850(0x369)](_0xbfc850(0x20f)+_0xbfc850(0x618)+_0xbfc850(0x246)+'d:',_0x162805);const _0x2ed6a6={};_0x2ed6a6[_0xbfc850(0x403)]='text',_0x2ed6a6[_0xbfc850(0x69a)]=_0xbfc850(0x3f8)+'nalysis\x20re'+_0xbfc850(0x64a)+_0xbfc850(0x517)+(_0x162805 instanceof Error?_0x162805[_0xbfc850(0x6e8)]:_0xbfc850(0x3d4)+_0xbfc850(0x2d3));const _0x2f4104={};_0x2f4104[_0xbfc850(0x369)]=_0x162805 instanceof Error?_0x162805[_0xbfc850(0x6e8)]:_0xbfc850(0x3d4)+_0xbfc850(0x2d3);const _0x1a8eb8={};return _0x1a8eb8[_0xbfc850(0x239)]=[_0x2ed6a6],_0x1a8eb8[_0xbfc850(0x482)+_0xbfc850(0x4da)]=_0x2f4104,_0x1a8eb8;}}),server[a1_0xd5bbd1(0x5e0)+'ol']('track_anal'+a1_0xd5bbd1(0x592)+a1_0xd5bbd1(0x667),{'title':a1_0xd5bbd1(0x4ae)+'ysis\x20Progr'+a1_0xd5bbd1(0x667),'description':a1_0xd5bbd1(0x2aa)+'ly\x20check\x20a'+a1_0xd5bbd1(0x54a)+'ogress\x20by\x20'+'analysis\x20I'+'D\x20and\x20upda'+a1_0xd5bbd1(0x4c0)+a1_0xd5bbd1(0x669)+a1_0xd5bbd1(0x466)+a1_0xd5bbd1(0x70f)+a1_0xd5bbd1(0x555)+a1_0xd5bbd1(0x316)+a1_0xd5bbd1(0x6bc)+a1_0xd5bbd1(0x1ed)+a1_0xd5bbd1(0x5bd)+a1_0xd5bbd1(0x207)+'COMPLETE.\x20'+a1_0xd5bbd1(0x30f)+a1_0xd5bbd1(0x66d)+'vided\x20duri'+'ng\x20the\x20ANA'+a1_0xd5bbd1(0x306)+'e.','inputSchema':{'analysisId':z[a1_0xd5bbd1(0x385)]()[a1_0xd5bbd1(0x3b8)](a1_0xd5bbd1(0x5b1)+'D'),'intervalMs':z['number']()[a1_0xd5bbd1(0x4d0)]()[a1_0xd5bbd1(0x3b8)]('Status\x20che'+a1_0xd5bbd1(0x375)+a1_0xd5bbd1(0x620)+a1_0xd5bbd1(0x31c)+a1_0xd5bbd1(0x527)+a1_0xd5bbd1(0x37c))}},async({analysisId:_0x4964ea,intervalMs:intervalMs=0xbb8},_0x29ec58)=>{const _0x291f5e=a1_0xd5bbd1,_0x68e222={'DuGdr':_0x291f5e(0x600)+_0x291f5e(0x5d3)+'rovided.\x20T'+_0x291f5e(0x577)+_0x291f5e(0x38c)+'rt\x20progres'+_0x291f5e(0x220)+'.','bvFCY':_0x291f5e(0x213)+_0x291f5e(0x57c)+'stopped\x20by'+_0x291f5e(0x5d5),'TAmBd':function(_0x1f1c96,_0x4680d6){return _0x1f1c96===_0x4680d6;},'AqScL':function(_0x1bb5f6,_0x136b4c){return _0x1bb5f6===_0x136b4c;},'XMUBD':'ANALYSIS','CoqHJ':'notificati'+_0x291f5e(0x21a)+'ss','eBNAj':function(_0x2dd41f,_0x40ee7d){return _0x2dd41f(_0x40ee7d);}};try{const _0x3f4a60=_0x29ec58[_0x291f5e(0x284)]?.[_0x291f5e(0x3c8)+_0x291f5e(0x37a)];if(!_0x3f4a60){const _0x1abe72={};_0x1abe72[_0x291f5e(0x403)]='text',_0x1abe72[_0x291f5e(0x69a)]=_0x68e222[_0x291f5e(0x2fc)];const _0x5c02bf={};_0x5c02bf['error']=_0x291f5e(0x600)+'oken\x20not\x20p'+_0x291f5e(0x3c3);const _0x5164df={};return _0x5164df[_0x291f5e(0x239)]=[_0x1abe72],_0x5164df[_0x291f5e(0x482)+_0x291f5e(0x4da)]=_0x5c02bf,_0x5164df;}logger['info'](_0x291f5e(0x2a0)+_0x291f5e(0x4f5)+'acking\x20sta'+_0x291f5e(0x696)+_0x4964ea);const _0x2c35b0={};_0x2c35b0['id']='INIT',_0x2c35b0[_0x291f5e(0x29a)]=_0x291f5e(0x5b4)+'tion',_0x2c35b0[_0x291f5e(0x62e)+'n']='Waiting\x20fo'+_0x291f5e(0x5aa)+'\x20to\x20start.',_0x2c35b0[_0x291f5e(0x6ac)]=null,_0x2c35b0[_0x291f5e(0x4ef)]=0x1;const _0x9ad0aa={};_0x9ad0aa['id']=_0x291f5e(0x6c2),_0x9ad0aa[_0x291f5e(0x29a)]=_0x291f5e(0x6c5),_0x9ad0aa[_0x291f5e(0x62e)+'n']=_0x291f5e(0x6e2)+_0x291f5e(0x317)+_0x291f5e(0x311),_0x9ad0aa[_0x291f5e(0x6ac)]=null,_0x9ad0aa['order']=0x2;const _0x92e714={};_0x92e714['id']='PRE_PROCES'+'S',_0x92e714['descriptio'+'n']=_0x291f5e(0x675)+_0x291f5e(0x30b),_0x92e714[_0x291f5e(0x29a)]=_0x291f5e(0x675)+_0x291f5e(0x258),_0x92e714[_0x291f5e(0x6ac)]=null,_0x92e714[_0x291f5e(0x4ef)]=0x3;const _0x477ecc={};_0x477ecc['id']=_0x291f5e(0x2be),_0x477ecc[_0x291f5e(0x62e)+'n']=_0x291f5e(0x431)+_0x291f5e(0x6ff)+_0x291f5e(0x342),_0x477ecc['name']=_0x291f5e(0x6f0),_0x477ecc['progress']=0x0,_0x477ecc[_0x291f5e(0x4ef)]=0x4;const _0x22bd66={};_0x22bd66['id']=_0x291f5e(0x4b6)+'SS',_0x22bd66['descriptio'+'n']=_0x291f5e(0x475)+_0x291f5e(0x38b),_0x22bd66[_0x291f5e(0x29a)]=_0x291f5e(0x475)+_0x291f5e(0x24d),_0x22bd66['progress']=null,_0x22bd66[_0x291f5e(0x4ef)]=0x5;const _0x34b5ef={};_0x34b5ef['id']='COMPLETE',_0x34b5ef[_0x291f5e(0x62e)+'n']=_0x291f5e(0x21d)+_0x291f5e(0x634)+_0x291f5e(0x2a6)+'y.',_0x34b5ef[_0x291f5e(0x29a)]='Complete',_0x34b5ef[_0x291f5e(0x6ac)]=0x64,_0x34b5ef['order']=0x6;const _0x15abbe={};_0x15abbe[_0x291f5e(0x2b3)]=_0x2c35b0,_0x15abbe[_0x291f5e(0x6c2)]=_0x9ad0aa,_0x15abbe[_0x291f5e(0x511)+'S']=_0x92e714,_0x15abbe[_0x291f5e(0x2be)]=_0x477ecc,_0x15abbe['POST_PROCE'+'SS']=_0x22bd66,_0x15abbe[_0x291f5e(0x4f3)]=_0x34b5ef;const _0xf6b733=_0x15abbe;let _0x171a26=Object[_0x291f5e(0x2d0)](_0xf6b733)[_0x291f5e(0x4ab)],_0x14cd31=null,_0x2201b0=0x0,_0x3b256d=!![];const _0x323663=async _0xdf4bfc=>{const _0x495e01=_0x291f5e;if(!_0x3b256d)return![];try{return await _0x29ec58['sendNotifi'+_0x495e01(0x4e1)](_0xdf4bfc),!![];}catch(_0x872976){const _0x3a3cf7=_0x872976 instanceof Error?_0x872976[_0x495e01(0x6e8)]:'Unknown\x20er'+'ror';return _0x3a3cf7[_0x495e01(0x552)]('unknown\x20to'+_0x495e01(0x37a))||_0x3a3cf7[_0x495e01(0x552)]('invalid\x20to'+_0x495e01(0x37a))||_0x3a3cf7[_0x495e01(0x552)](_0x495e01(0x56c)+'ken')||_0x3a3cf7[_0x495e01(0x4fb)+'e']()['includes'](_0x495e01(0x6da))?(_0x3b256d=![],logger[_0x495e01(0x2d1)](_0x495e01(0x58e)+_0x495e01(0x3b9)+'\x20longer\x20va'+_0x495e01(0x503)+'ing\x20progre'+_0x495e01(0x708)+_0x495e01(0x3be)+_0x3a3cf7)):logger[_0x495e01(0x2d1)](_0x495e01(0x68a)+_0x495e01(0x69e)+_0x495e01(0x542)+_0x495e01(0x4b3)+_0x495e01(0x3d0)+_0x3a3cf7),![];}};while(!![]){try{const _0xb75986=await analysisService['getAnalysi'+'sStatus'](_0x4964ea),_0x2ec072=String(_0xb75986['status'])[_0x291f5e(0x484)+'e'](),_0x496649=String(_0xb75986['status'])['toUpperCas'+'e'](),_0x541923=_0x496649===_0x291f5e(0x4f3)&&_0xb75986[_0x291f5e(0x5a1)]?String(_0xb75986['result'])[_0x291f5e(0x484)+'e']():_0x2ec072;if(_0x14cd31!==_0x2ec072){_0x14cd31=_0x2ec072;if(_0x496649===_0x291f5e(0x4f3)||_0x2ec072===_0x291f5e(0x68c)||_0x2ec072===_0x291f5e(0x6ec)){let _0x3e38d3,_0x19279f;if(_0x496649===_0x291f5e(0x4f3)){const _0x4009a0=_0xb75986['result']?String(_0xb75986[_0x291f5e(0x5a1)])[_0x291f5e(0x484)+'e']():undefined;_0x19279f=_0x4009a0||'COMPLETE';if(_0x4009a0==='SUCCESS')_0x3e38d3=_0x291f5e(0x40b)+_0x291f5e(0x21d)+_0x291f5e(0x634)+_0x291f5e(0x2a6)+'y.';else{if(_0x4009a0===_0x291f5e(0x68c))_0x3e38d3=_0x291f5e(0x40c)+_0x291f5e(0x2b9)+'ed\x20to\x20comp'+_0x291f5e(0x41c)+_0x291f5e(0x6a7);else _0x4009a0===_0x291f5e(0x2b5)?_0x3e38d3=_0x68e222[_0x291f5e(0x222)]:(_0x3e38d3=_0x291f5e(0x5d1)+_0x291f5e(0x4a7)+_0x291f5e(0x418),_0x19279f='COMPLETE');}}else _0x3e38d3='['+_0x2ec072+(_0x291f5e(0x33c)+_0x291f5e(0x3a9)),_0x19279f=_0x2ec072;const _0x45fa48={'method':'notificati'+_0x291f5e(0x21a)+'ss','params':{'progressToken':typeof _0x3f4a60===_0x291f5e(0x385)?_0x3f4a60:String(_0x3f4a60),'progress':_0x2ec072===_0x291f5e(0x4f3)?0x64:0x0,'message':_0x3e38d3,'total':0x64}};await _0x323663(_0x45fa48);_0x68e222[_0x291f5e(0x5b6)](_0x496649,_0x291f5e(0x4f3))?logger[_0x291f5e(0x472)](_0x291f5e(0x6d3)+_0x291f5e(0x5bf)+'s\x20updated:'+'\x20'+_0x19279f):logger[_0x291f5e(0x472)]('Analysis\x20f'+_0x291f5e(0x6d8)+_0x291f5e(0x5e1)+_0x19279f);const _0x941dcd={};_0x941dcd['type']=_0x291f5e(0x69a),_0x941dcd[_0x291f5e(0x69a)]=_0x291f5e(0x21d)+_0x291f5e(0x640)+_0x291f5e(0x5b1)+_0x291f5e(0x698)+_0x4964ea+(_0x291f5e(0x406)+_0x291f5e(0x2b2))+_0x19279f;const _0x2cf4f9={};_0x2cf4f9['analysisId']=_0x4964ea,_0x2cf4f9['status']=_0x19279f,_0x2cf4f9[_0x291f5e(0x5a1)]=_0xb75986[_0x291f5e(0x5a1)],_0x2cf4f9['completed']=!![];const _0x542d4b={};return _0x542d4b[_0x291f5e(0x239)]=[_0x941dcd],_0x542d4b['structured'+_0x291f5e(0x4da)]=_0x2cf4f9,_0x542d4b;}const _0x3b2a1b=_0xf6b733[_0x2ec072];if(_0x3b2a1b){const _0x1a4073={};_0x1a4073[_0x291f5e(0x205)]=0x64;const _0x1261a8={'method':_0x291f5e(0x572)+'ons/progre'+'ss','params':{'progressToken':typeof _0x3f4a60==='string'?_0x3f4a60:String(_0x3f4a60),'progress':_0x3b2a1b[_0x291f5e(0x6ac)]!==null?_0x3b2a1b[_0x291f5e(0x6ac)]:_0x68e222['AqScL'](_0x2ec072,_0x68e222[_0x291f5e(0x411)])?_0x2201b0:_0x3b2a1b[_0x291f5e(0x4ef)],'message':'['+_0x3b2a1b['id']+']\x20'+_0x3b2a1b[_0x291f5e(0x62e)+'n'],'total':_0x171a26,..._0x3b2a1b[_0x291f5e(0x6ac)]!==null&&_0x2ec072===_0x68e222[_0x291f5e(0x411)]&&_0x1a4073}};await _0x323663(_0x1261a8),_0x3b256d&&logger[_0x291f5e(0x472)](_0x291f5e(0x70f)+_0x291f5e(0x2d5)+_0x291f5e(0x442)+_0x3b2a1b['id']+'\x20('+_0x3b2a1b[_0x291f5e(0x29a)]+')');}else{const _0x19eb33={'method':_0x68e222[_0x291f5e(0x3f6)],'params':{'progressToken':_0x68e222[_0x291f5e(0x4e7)](typeof _0x3f4a60,_0x291f5e(0x385))?_0x3f4a60:_0x68e222[_0x291f5e(0x244)](String,_0x3f4a60),'progress':0x1,'total':0x1,'message':'['+_0x2ec072+(_0x291f5e(0x33c)+_0x291f5e(0x3bc)+_0x291f5e(0x4ee))}};await _0x323663(_0x19eb33);}}else{if(_0x2ec072===_0x291f5e(0x2be)){if(_0xb75986[_0x291f5e(0x6ac)]!==undefined&&_0xb75986[_0x291f5e(0x6ac)]!==null){_0x2201b0=_0xb75986[_0x291f5e(0x6ac)];const _0x2bb5cb=_0xf6b733[_0x2ec072],_0x2a9002={'method':_0x291f5e(0x572)+_0x291f5e(0x21a)+'ss','params':{'progressToken':typeof _0x3f4a60===_0x291f5e(0x385)?_0x3f4a60:String(_0x3f4a60),'progress':_0x2bb5cb[_0x291f5e(0x4ef)],'total':_0x171a26,'message':_0x291f5e(0x44c)+_0x291f5e(0x4a7)+_0x291f5e(0x30e)+_0x291f5e(0x3dc)+_0x2201b0+'%'}};await _0x323663(_0x2a9002);}}}!_0x3b256d&&logger['info'](_0x291f5e(0x58e)+'oken\x20is\x20in'+_0x291f5e(0x6e6)+_0x291f5e(0x2df)+_0x291f5e(0x32e)+_0x291f5e(0x502)+_0x291f5e(0x572)+_0x291f5e(0x1ef)),await new Promise(_0x4bdf6a=>setTimeout(_0x4bdf6a,intervalMs));}catch(_0x31dbc8){logger[_0x291f5e(0x369)]('Error\x20chec'+_0x291f5e(0x680)+_0x291f5e(0x682)+'\x20('+_0x4964ea+'):',_0x31dbc8),await new Promise(_0x7d2fd4=>setTimeout(_0x7d2fd4,intervalMs));}}}catch(_0x468779){logger[_0x291f5e(0x369)](_0x291f5e(0x2a0)+_0x291f5e(0x4f5)+_0x291f5e(0x2fe)+_0x291f5e(0x21c),_0x468779);const _0x4beed5={};_0x4beed5[_0x291f5e(0x403)]=_0x291f5e(0x69a),_0x4beed5['text']=_0x291f5e(0x2a0)+_0x291f5e(0x4f5)+_0x291f5e(0x2fe)+_0x291f5e(0x236)+(_0x468779 instanceof Error?_0x468779[_0x291f5e(0x6e8)]:_0x291f5e(0x3d4)+_0x291f5e(0x2d3));const _0x5e9eb0={};_0x5e9eb0['error']=_0x468779 instanceof Error?_0x468779[_0x291f5e(0x6e8)]:_0x291f5e(0x3d4)+_0x291f5e(0x2d3);const _0x3a3088={};return _0x3a3088[_0x291f5e(0x239)]=[_0x4beed5],_0x3a3088['structured'+_0x291f5e(0x4da)]=_0x5e9eb0,_0x3a3088[_0x291f5e(0x488)]=!![],_0x3a3088;}}),server[a1_0xd5bbd1(0x5e0)+'ol'](a1_0xd5bbd1(0x6f4)+a1_0xd5bbd1(0x57e)+'e',{'title':'Get\x20Sparro'+a1_0xd5bbd1(0x45d)+'e','description':'Get\x20compre'+'hensive\x20gu'+'ide\x20for\x20us'+a1_0xd5bbd1(0x454)+a1_0xd5bbd1(0x2e7)+a1_0xd5bbd1(0x4b8)+a1_0xd5bbd1(0x6f6)+a1_0xd5bbd1(0x326)+a1_0xd5bbd1(0x228)+a1_0xd5bbd1(0x37d)+a1_0xd5bbd1(0x304),'inputSchema':{'section':z['enum'](['overview','configurat'+'ion','tools',a1_0xd5bbd1(0x68b)+'s',a1_0xd5bbd1(0x1e2),a1_0xd5bbd1(0x409),'troublesho'+a1_0xd5bbd1(0x4c6),a1_0xd5bbd1(0x5f2)])[a1_0xd5bbd1(0x4d0)]()[a1_0xd5bbd1(0x3b8)]('Specific\x20s'+'ection\x20of\x20'+a1_0xd5bbd1(0x64e)+a1_0xd5bbd1(0x5d6)+a1_0xd5bbd1(0x6c8)+a1_0xd5bbd1(0x300)+a1_0xd5bbd1(0x2ad)+a1_0xd5bbd1(0x4a1)+'de.')}},async({section:section=a1_0xd5bbd1(0x5f2)})=>{const _0x10988e=a1_0xd5bbd1,_0x42530e={};_0x42530e[_0x10988e(0x372)]=_0x10988e(0x5f2),_0x42530e[_0x10988e(0x61e)]=_0x10988e(0x69a);const _0x140003=_0x42530e;try{logger[_0x10988e(0x472)]('Sparrow\x20MC'+_0x10988e(0x6d9)+_0x10988e(0x260)+section);const _0x54f9d6={};_0x54f9d6[_0x10988e(0x5b9)]='#\x20스패로우\x20MCP'+_0x10988e(0x286)+'MCP는\x20Curso'+_0x10988e(0x556)+'어\x20코드의\x20보안\x20취'+_0x10988e(0x1e7)+_0x10988e(0x330)+'를\x20생성하는\x20Mod'+_0x10988e(0x516)+_0x10988e(0x328)+'서버입니다.\x0a\x0a##'+_0x10988e(0x1f3)+_0x10988e(0x707)+_0x10988e(0x461)+'드의\x20보안\x20취약점\x20'+'자동\x20분석\x0a-\x20**'+_0x10988e(0x5f5)+_0x10988e(0x1e4)+'쉽게\x20이해할\x20수\x20있'+_0x10988e(0x6e3)+_0x10988e(0x3f1)+_0x10988e(0x584)+_0x10988e(0x47e)+_0x10988e(0x352)+_0x10988e(0x3c7)+'생성**:\x20원본\x20코'+'드와\x20안전한\x20코드\x20'+'간의\x20차이점\x20시각화'+'\x0a-\x20**실시간\x20상'+_0x10988e(0x208)+_0x10988e(0x580)+_0x10988e(0x21e)+_0x10988e(0x4a3)+_0x10988e(0x254)+'더,\x20ZIP\x20아카이'+_0x10988e(0x388)+_0x10988e(0x321)+'\x20추적**:\x20상세한'+_0x10988e(0x3b0)+_0x10988e(0x711)+_0x10988e(0x457)+'택\x0a\x0a-\x20**Typ'+_0x10988e(0x54b)+'\x20주요\x20개발\x20언어\x0a'+_0x10988e(0x6dc)+'K**:\x20Model'+_0x10988e(0x21b)+'rotocol\x20구현'+'\x0a-\x20**Ollam'+_0x10988e(0x661)+'합\x20(gpt-oss'+_0x10988e(0x467)+_0x10988e(0x28b)+_0x10988e(0x491)+_0x10988e(0x1f2)+_0x10988e(0x5af)+_0x10988e(0x2b7)+_0x10988e(0x4d1)+_0x10988e(0x609)+_0x10988e(0x606)+_0x10988e(0x6bb)+_0x10988e(0x70e)+_0x10988e(0x24e)+_0x10988e(0x6c3)+_0x10988e(0x4ea),_0x54f9d6[_0x10988e(0x651)+_0x10988e(0x356)]=_0x10988e(0x4f2)+_0x10988e(0x4ff)+'\x20OnDemand\x20'+_0x10988e(0x359)+'\x20Sparrow\x20O'+'nDemand\x20서비'+_0x10988e(0x5ed)+_0x10988e(0x1f7)+_0x10988e(0x2e3)+_0x10988e(0x35a)+_0x10988e(0x2ef)+_0x10988e(0x506)+_0x10988e(0x40d)+_0x10988e(0x541)+_0x10988e(0x2dd)+_0x10988e(0x42d)+_0x10988e(0x344)+_0x10988e(0x6c6)+'는\x20MCP\x20설정에서'+_0x10988e(0x55f)+_0x10988e(0x387)+_0x10988e(0x6cf)+_0x10988e(0x505)+_0x10988e(0x412)+_0x10988e(0x58b)+_0x10988e(0x559)+_0x10988e(0x55b)+_0x10988e(0x6df)+_0x10988e(0x379)+'ws)\x0a\x0a###\x20로'+_0x10988e(0x2cc)+_0x10988e(0x3eb)+_0x10988e(0x668)+_0x10988e(0x233)+_0x10988e(0x6b2)+_0x10988e(0x26c)+_0x10988e(0x250)+_0x10988e(0x399)+_0x10988e(0x51d)+_0x10988e(0x444)+'\x22node\x22,\x0a\x20\x20'+_0x10988e(0x263)+':\x20[\x22./node'+_0x10988e(0x35b)+_0x10988e(0x5a2)+_0x10988e(0x2f4)+_0x10988e(0x2b6)+'ver.js\x22],\x0a'+_0x10988e(0x4a6)+_0x10988e(0x35e)+_0x10988e(0x313)+_0x10988e(0x3ad)+_0x10988e(0x36b)+_0x10988e(0x2ec)+'en\x22,\x0a\x20\x20\x20\x20\x20'+_0x10988e(0x313)+_0x10988e(0x499)+_0x10988e(0x582)+'/ondemand.'+'sparrowclo'+_0x10988e(0x57b)+_0x10988e(0x25a)+_0x10988e(0x62d)+'RL\x22:\x20\x22http'+_0x10988e(0x5ba)+_0x10988e(0x4fe)+_0x10988e(0x45c)+_0x10988e(0x52d)+_0x10988e(0x5de)+_0x10988e(0x6ea)+'\x20\x20\x20\x20\x20\x20\x20\x20\x22N'+_0x10988e(0x285)+_0x10988e(0x565)+_0x10988e(0x29f)+_0x10988e(0x51e)+_0x10988e(0x447)+'##\x20전역\x20설치의\x20'+'경우\x0a\x0a`npm\x20i'+_0x10988e(0x382)+_0x10988e(0x3e7)+'우,\x20절대\x20경로를\x20'+_0x10988e(0x40e)+'전역\x20설치\x20경로를\x20'+_0x10988e(0x6fb)+_0x10988e(0x3dd)+_0x10988e(0x378)+'\x0a\x0a**Window'+'s\x20예시:**\x0a``'+_0x10988e(0x370)+_0x10988e(0x464)+_0x10988e(0x6f7)+_0x10988e(0x6f9)+_0x10988e(0x60b)+_0x10988e(0x4e5)+_0x10988e(0x673)+_0x10988e(0x248)+_0x10988e(0x5fc)+'\x5c\x5cUsers\x5c\x5c<'+_0x10988e(0x625)+_0x10988e(0x234)+(_0x10988e(0x529)+_0x10988e(0x66f)+'odules\x5c\x5c@s'+_0x10988e(0x2f1)+_0x10988e(0x2f4)+_0x10988e(0x40f)+_0x10988e(0x546)+_0x10988e(0x52c)+_0x10988e(0x548)+_0x10988e(0x567)+_0x10988e(0x421)+_0x10988e(0x6a2)+'ondemand-t'+_0x10988e(0x4de)+'\x20\x20\x20\x20\x20\x22SPAR'+'ROW_API_UR'+_0x10988e(0x58f)+_0x10988e(0x497)+_0x10988e(0x325)+_0x10988e(0x498)+_0x10988e(0x63d)+_0x10988e(0x3c4)+_0x10988e(0x6ef)+_0x10988e(0x699)+'host:11434'+_0x10988e(0x522)+_0x10988e(0x39e)+_0x10988e(0x394)+_0x10988e(0x54d)+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x10988e(0x51a)+':\x20\x22develop'+_0x10988e(0x469)+_0x10988e(0x508)+'\x20\x20}\x0a}\x0a```\x0a'+_0x10988e(0x4e2)+'inux\x20예시:**'+_0x10988e(0x55a)+_0x10988e(0x685)+_0x10988e(0x6a9)+_0x10988e(0x66e)+_0x10988e(0x570)+_0x10988e(0x374)+'mand\x22:\x20\x22no'+_0x10988e(0x307)+_0x10988e(0x53d)+_0x10988e(0x427)+_0x10988e(0x636)+_0x10988e(0x35b)+_0x10988e(0x5a2)+_0x10988e(0x2f4)+'p/dist/ser'+_0x10988e(0x201)+_0x10988e(0x4a6)+_0x10988e(0x35e)+_0x10988e(0x313)+_0x10988e(0x3ad)+_0x10988e(0x36b)+_0x10988e(0x2ec)+_0x10988e(0x605)+_0x10988e(0x313)+'W_API_URL\x22'+_0x10988e(0x582)+_0x10988e(0x33e)+_0x10988e(0x25e)+_0x10988e(0x57b)+_0x10988e(0x25a)+_0x10988e(0x62d)+_0x10988e(0x5db)+_0x10988e(0x5ba)+_0x10988e(0x4fe)+_0x10988e(0x45c)+_0x10988e(0x52d)+_0x10988e(0x5de)+_0x10988e(0x6ea)+_0x10988e(0x569)+_0x10988e(0x285)+_0x10988e(0x565)+_0x10988e(0x29f)+_0x10988e(0x51e)+'}\x0a}\x0a```\x0a\x0a*'+_0x10988e(0x2a8)+_0x10988e(0x4aa)+_0x10988e(0x3e9)+_0x10988e(0x336)+_0x10988e(0x4a4)+_0x10988e(0x1f0)+_0x10988e(0x343)+'ist/server'+_0x10988e(0x36f)+_0x10988e(0x5c8)+_0x10988e(0x43d)+'로젝트\x20루트를\x20가리'+'키는\x20`\x22cwd\x22`'+_0x10988e(0x4be)+'\x20`\x22SPARROW'+_0x10988e(0x67f)+'와\x20`\x22SPARRO'+'W_API_URL\x22'+_0x10988e(0x5d4))+('-\x20`\x22OLLAMA'+_0x10988e(0x408)+_0x10988e(0x29b)+_0x10988e(0x432)+_0x10988e(0x50d)+_0x10988e(0x622)+'분석\x20브리핑,\x20안전'+_0x10988e(0x5e4)+_0x10988e(0x34c)+'요.\x20설정하지\x20않아'+_0x10988e(0x590)+'은\x20정상\x20작동합니다'+_0x10988e(0x405)+_0x10988e(0x393)+_0x10988e(0x4e3)+_0x10988e(0x245)+_0x10988e(0x5c2)+'a\x20서버\x20URL로\x20'+_0x10988e(0x42b)+'원격\x20서버의\x20경우\x20'+'`http://19'+'2.168.30.1'+_0x10988e(0x273)+_0x10988e(0x4f9)+_0x10988e(0x404)+_0x10988e(0x46d)+'제\x20Sparrow\x20'+_0x10988e(0x2d8)+_0x10988e(0x215)+_0x10988e(0x3c5)+_0x10988e(0x479)+_0x10988e(0x3fd)+_0x10988e(0x44f)+_0x10988e(0x61f)+'름으로\x20교체하거나\x20'+_0x10988e(0x65d)+_0x10988e(0x345)+_0x10988e(0x2f5)+'세요.\x0a\x0a##\x20Cu'+_0x10988e(0x643)+_0x10988e(0x209)+'이트한\x20후:\x0a\x0a1.'+_0x10988e(0x60f)+_0x10988e(0x3c9)+'\x20Cursor\x20ID'+_0x10988e(0x5f4)+'\x0a3.\x20MCP\x20서버'+_0x10988e(0x355)+'어야\x20합니다\x0a\x0a##'+_0x10988e(0x4d6)+'P\x20서버가\x20연결되었'+_0x10988e(0x540)+_0x10988e(0x537)+_0x10988e(0x4d9)+'\x20상태\x20표시줄\x20또는'+_0x10988e(0x2a2)+_0x10988e(0x39d)+_0x10988e(0x6b1)+_0x10988e(0x5e3)+'\x20(사용법\x20섹션\x20참'+'조)'),_0x54f9d6[_0x10988e(0x22f)]=_0x10988e(0x249)+'용\x20가이드\x0a\x0a서버는'+'\x20다음\x20MCP\x20도구'+_0x10988e(0x1e6)+_0x10988e(0x632)+_0x10988e(0x23d)+_0x10988e(0x200)+_0x10988e(0x320)+_0x10988e(0x45b)+_0x10988e(0x2e8)+_0x10988e(0x252)+_0x10988e(0x3bd)+'tring):\x20분석'+_0x10988e(0x54c)+_0x10988e(0x3f2)+_0x10988e(0x386)+_0x10988e(0x5c0)+_0x10988e(0x38a)+_0x10988e(0x5fd)+_0x10988e(0x679)+_0x10988e(0x50c)+_0x10988e(0x61a)+'분석\x20상태\x0a\x0a**사'+_0x10988e(0x5f6)+_0x10988e(0x1ff)+_0x10988e(0x703)+_0x10988e(0x630)+_0x10988e(0x5c7)+_0x10988e(0x2fa)+_0x10988e(0x4fc)+_0x10988e(0x35f)+_0x10988e(0x417)+_0x10988e(0x26e)+_0x10988e(0x422)+_0x10988e(0x271)+'Id`\x20(strin'+_0x10988e(0x6e4)+_0x10988e(0x39f)+_0x10988e(0x2ca)+_0x10988e(0x439)+'\x0a**반환값:**\x0a'+_0x10988e(0x6fe)+':\x20현재\x20상태\x20(p'+_0x10988e(0x4f8)+_0x10988e(0x513)+_0x10988e(0x48f)+_0x10988e(0x64f)+_0x10988e(0x1e0)+'`:\x20진행률\x20(0-'+_0x10988e(0x338)+_0x10988e(0x2c6)+_0x10988e(0x547)+_0x10988e(0x62c)+'ysis_resul'+'ts\x0a\x0a완료된\x20분석'+_0x10988e(0x23f)+_0x10988e(0x5ce)+_0x10988e(0x61b)+_0x10988e(0x22a)+_0x10988e(0x386)+_0x10988e(0x365)+_0x10988e(0x38a)+_0x10988e(0x6cd)+_0x10988e(0x645)+_0x10988e(0x34d)+_0x10988e(0x471)+_0x10988e(0x26a)+_0x10988e(0x5d7)+'핑\x20(Ollama\x20'+_0x10988e(0x446)+_0x10988e(0x43e)+_0x10988e(0x2db)+_0x10988e(0x5cf)+_0x10988e(0x5ad)+_0x10988e(0x6fa)+_0x10988e(0x2f8)+_0x10988e(0x1e3)+_0x10988e(0x4a9)+_0x10988e(0x6b7)+'string):\x20보'+_0x10988e(0x440)+_0x10988e(0x5dd)+_0x10988e(0x3bd)+_0x10988e(0x32d)+_0x10988e(0x6a4)+_0x10988e(0x47d)+_0x10988e(0x62b)+'\x20`secureCo'+_0x10988e(0x52e)+_0x10988e(0x5a9)+_0x10988e(0x65e)+_0x10988e(0x66b)+_0x10988e(0x309)+_0x10988e(0x60c)+'ef`:\x20안전한\x20코'+'드에\x20대한\x20설명\x20('+_0x10988e(0x4c3)+_0x10988e(0x407)+_0x10988e(0x6d1)+'\x20사항을\x20보여주는\x20'+(_0x10988e(0x437)+_0x10988e(0x5b2)+_0x10988e(0x32b)+'설정되지\x20않은\x20경우'+_0x10988e(0x6eb)+_0x10988e(0x56d)+_0x10988e(0x6fd)+_0x10988e(0x3fb)+_0x10988e(0x5ff)+_0x10988e(0x5b5)+_0x10988e(0x46e)+_0x10988e(0x3af)+_0x10988e(0x288)+_0x10988e(0x2e8)+'*\x0a-\x20`fileP'+_0x10988e(0x705)+'ing\x20배열):\x20분'+_0x10988e(0x292)+_0x10988e(0x2ba)+_0x10988e(0x4f7)+_0x10988e(0x621)+_0x10988e(0x25b)+_0x10988e(0x49b)+_0x10988e(0x5c9)+_0x10988e(0x3cb)+_0x10988e(0x6f1)+_0x10988e(0x2ea)+'alysisId`:'+_0x10988e(0x550)+_0x10988e(0x558)+_0x10988e(0x383)+'상태\x0a-\x20`file'+'PathCount`'+_0x10988e(0x6bf)+'\x20수\x0a\x0a##\x206.\x20'+_0x10988e(0x460)+'p_security'+'\x0a\x0aZIP\x20파일의\x20'+_0x10988e(0x500)+_0x10988e(0x425)+_0x10988e(0x50f)+_0x10988e(0x5ea)+_0x10988e(0x386)+_0x10988e(0x48e)+'파일의\x20경로\x0a-\x20`'+_0x10988e(0x24a)+_0x10988e(0x312)+_0x10988e(0x470)+'\x20파일의\x20이름\x0a\x0a*'+_0x10988e(0x38a)+_0x10988e(0x5fd)+_0x10988e(0x679)+_0x10988e(0x50c)+_0x10988e(0x61a)+_0x10988e(0x480)+'7.\x20analyze'+_0x10988e(0x562)+_0x10988e(0x2f7)+'\x20폴더의\x20보안\x20취약'+'점을\x20분석합니다.\x20'+'폴더는\x20분석\x20전에\x20'+'자동으로\x20압축됩니다'+_0x10988e(0x282)+_0x10988e(0x60e)+_0x10988e(0x227)+_0x10988e(0x435)+_0x10988e(0x68d)+'\x20`zipFileN'+_0x10988e(0x458)+_0x10988e(0x33d)+'성된\x20ZIP\x20파일의'+_0x10988e(0x37f)+_0x10988e(0x4a9)+_0x10988e(0x4ce)+_0x10988e(0x6b8)+'\x0a-\x20`status'+_0x10988e(0x3a0)+'태\x0a\x0a##\x208.\x20t'+_0x10988e(0x318)+'sis_progre'+_0x10988e(0x295)+_0x10988e(0x2a1)+_0x10988e(0x5b7)+_0x10988e(0x347)+_0x10988e(0x298)+_0x10988e(0x564)+_0x10988e(0x27a)+_0x10988e(0x6c7)+_0x10988e(0x45a)+_0x10988e(0x225)+'\x20상태\x20확인\x20간격('+_0x10988e(0x4e9)+_0x10988e(0x652)+_0x10988e(0x478)+_0x10988e(0x1e5)+_0x10988e(0x2d2)+_0x10988e(0x524)+_0x10988e(0x351)+_0x10988e(0x251)+_0x10988e(0x69b))+(_0x10988e(0x1f8)+'EADY`:\x20시작\x20'+_0x10988e(0x2d9)+_0x10988e(0x380)+_0x10988e(0x59f)+_0x10988e(0x6e0)+_0x10988e(0x3c1)+_0x10988e(0x486)+_0x10988e(0x704)+'_PROCESS`:'+_0x10988e(0x272)+_0x10988e(0x38d)+_0x10988e(0x574)),_0x54f9d6[_0x10988e(0x68b)+'s']='#\x20분석\x20제약\x20사항'+_0x10988e(0x617)+_0x10988e(0x4b9)+_0x10988e(0x449)+_0x10988e(0x2a5)+_0x10988e(0x6a1)+_0x10988e(0x4dd)+'(압축\x20후)\x0a\x0a**'+_0x10988e(0x2c4)+_0x10988e(0x6b4)+_0x10988e(0x33a)+_0x10988e(0x4c1)+_0x10988e(0x42e)+_0x10988e(0x656)+_0x10988e(0x4ec)+'Demand\x20API'+_0x10988e(0x289)+_0x10988e(0x2cd)+_0x10988e(0x2bd)+_0x10988e(0x6db)+_0x10988e(0x665)+_0x10988e(0x4f4)+_0x10988e(0x6dd)+_0x10988e(0x57d)+'정\x20확장자만\x20분석하'+_0x10988e(0x694)+'습니다\x20(예:\x20`['+_0x10988e(0x223)+_0x10988e(0x578)+'\x20분석\x20시간\x20제약\x0a'+_0x10988e(0x3a6)+_0x10988e(0x5ac)+_0x10988e(0x695)+'-\x20**중규모\x20파일'+_0x10988e(0x514)+_0x10988e(0x350)+_0x10988e(0x68f)+_0x10988e(0x6c9)+_0x10988e(0x44a)+_0x10988e(0x604)+'*참고사항**:\x0a-'+_0x10988e(0x4d8)+_0x10988e(0x4af)+'Sparrow\x20AP'+'I\x20서버\x20부하에\x20따'+'라\x20달라질\x20수\x20있습'+_0x10988e(0x48d)+_0x10988e(0x48b)+_0x10988e(0x6d6)+_0x10988e(0x568)+_0x10988e(0x60d)+_0x10988e(0x38e)+_0x10988e(0x6b6)+_0x10988e(0x690)+'**\x20Ollama\x20'+_0x10988e(0x518)+_0x10988e(0x5f9)+_0x10988e(0x3f7)+'*:\x20`get_an'+_0x10988e(0x63f)+_0x10988e(0x39a)+'\x20(선택사항)\x0a-\x20'+'**안전한\x20코드\x20생'+'성**:\x20`gene'+'rate_secur'+_0x10988e(0x54e)+'제공\x20(선택사항)\x0a'+'\x0a**Ollama\x20'+_0x10988e(0x22e)+_0x10988e(0x670)+_0x10988e(0x468)+_0x10988e(0x612)+_0x10988e(0x674)+_0x10988e(0x666)+'\x20있어야\x20함\x0a-\x20`'+_0x10988e(0x4ad)+_0x10988e(0x672)+_0x10988e(0x6b9)+_0x10988e(0x4dc)+_0x10988e(0x3ca)+_0x10988e(0x647)+_0x10988e(0x22b)+_0x10988e(0x644)+_0x10988e(0x3f0)+_0x10988e(0x691)+_0x10988e(0x589)+_0x10988e(0x26f)+_0x10988e(0x459)+_0x10988e(0x50b)+_0x10988e(0x224)+_0x10988e(0x247)+_0x10988e(0x1e8)+'능(취약점\x20탐지)은'+_0x10988e(0x646)+'니다.\x0a\x0a##\x20분석'+_0x10988e(0x64c)+_0x10988e(0x56a)+_0x10988e(0x45e)+_0x10988e(0x62f)+_0x10988e(0x46b)+(_0x10988e(0x214)+_0x10988e(0x420)+_0x10988e(0x67a)+_0x10988e(0x677)+_0x10988e(0x243)+_0x10988e(0x3f5)+_0x10988e(0x49f)+_0x10988e(0x60a)+'OST_PROCES'+_0x10988e(0x627)+_0x10988e(0x44b)+_0x10988e(0x3f4)+_0x10988e(0x366)+_0x10988e(0x526)+_0x10988e(0x335)+_0x10988e(0x5fb)+_0x10988e(0x4b7)+_0x10988e(0x261)+_0x10988e(0x2fd)+_0x10988e(0x633)+_0x10988e(0x299)+_0x10988e(0x532)+_0x10988e(0x52b)+_0x10988e(0x629)+_0x10988e(0x255)+_0x10988e(0x3a8)+'de`는\x20`resu'+_0x10988e(0x3b7)+_0x10988e(0x702)+_0x10988e(0x29c)+_0x10988e(0x70a)+_0x10988e(0x21f)+_0x10988e(0x230)+_0x10988e(0x27e)+'\x20각\x20분석은\x20독립적'+_0x10988e(0x599)+_0x10988e(0x416)+_0x10988e(0x38f)+_0x10988e(0x5be)+'\x20이를\x20통해\x20개별적'+_0x10988e(0x689)+_0x10988e(0x34e)+_0x10988e(0x2de)+'제약\x0a\x0a-\x20**Sp'+'arrow\x20OnDe'+_0x10988e(0x51c)+_0x10988e(0x324)+_0x10988e(0x6e9)+_0x10988e(0x5cb)+_0x10988e(0x66a)+'다운로드를\x20위해\x20S'+_0x10988e(0x462)+_0x10988e(0x626)+'웃**:\x20네트워크\x20'+_0x10988e(0x430)+'웃이\x20발생할\x20수\x20있'+_0x10988e(0x28e)+'모리\x20제약\x0a\x0a-\x20대'+'용량\x20파일\x20분석\x20시'+_0x10988e(0x6b5)+_0x10988e(0x33b)+'.\x0a-\x20여러\x20파일을'+_0x10988e(0x20e)+_0x10988e(0x6bd)+'이\x20더욱\x20증가할\x20수'+_0x10988e(0x692)),_0x54f9d6[_0x10988e(0x1e2)]=_0x10988e(0x275)+_0x10988e(0x642)+'세스\x0a\x0a스패로우\x20M'+'CP의\x20보안\x20분석은'+_0x10988e(0x5bc)+_0x10988e(0x1de)+_0x10988e(0x2bc)+_0x10988e(0x635)+'`analyze_f'+_0x10988e(0x543)+_0x10988e(0x6f5)+'yze_files_'+_0x10988e(0x53c)+_0x10988e(0x450)+_0x10988e(0x353)+_0x10988e(0x6f5)+_0x10988e(0x27d)+'_security`'+_0x10988e(0x6a3)+_0x10988e(0x32f)+_0x10988e(0x413)+_0x10988e(0x676)+'일을\x20ZIP\x20형식으'+_0x10988e(0x6d2)+_0x10988e(0x4fd)+_0x10988e(0x4b4)+_0x10988e(0x211)+_0x10988e(0x653)+_0x10988e(0x354)+'\x20S3\x20객체\x20키를\x20'+'획득합니다\x0a\x0a**제'+_0x10988e(0x41f)+'일\x20크기:\x20최대\x201'+'00MB\x0a-\x20ZIP'+'\x20크기:\x20최대\x2010'+_0x10988e(0x305)+_0x10988e(0x31f)+'\x0a**프로세스**:'+_0x10988e(0x3a3)+_0x10988e(0x392)+_0x10988e(0x520)+_0x10988e(0x5eb)+_0x10988e(0x2d6)+_0x10988e(0x3fc)+_0x10988e(0x376)+_0x10988e(0x641)+_0x10988e(0x487)+'-\x20파일명\x0a\x20\x20\x20-'+'\x20분석\x20옵션\x20(확장'+_0x10988e(0x49a)+_0x10988e(0x240)+_0x10988e(0x5b8)+'ysisId`\x20(또'+'는\x20`request'+'Id`)를\x20받습니다'+_0x10988e(0x291)+_0x10988e(0x298)+_0x10988e(0x348)+_0x10988e(0x2a9)+_0x10988e(0x3f3)+_0x10988e(0x2b8)+_0x10988e(0x553)+_0x10988e(0x495)+'DY`)\x0a\x0a###\x20'+_0x10988e(0x69f)+_0x10988e(0x2a3)+_0x10988e(0x237)+_0x10988e(0x593)+_0x10988e(0x23c)+'track_anal'+'ysis_progr'+_0x10988e(0x32a)+_0x10988e(0x1eb)+_0x10988e(0x39b)+_0x10988e(0x3a4)+_0x10988e(0x20b)+_0x10988e(0x602)+_0x10988e(0x59a)+_0x10988e(0x603)+_0x10988e(0x2e2)+'완료)\x0a\x20\x20\x20-\x20분'+_0x10988e(0x221)+_0x10988e(0x25f)+_0x10988e(0x59a)+_0x10988e(0x346)+_0x10988e(0x6c4)+_0x10988e(0x5dc)+_0x10988e(0x3de)+'제,\x20파싱,\x20전처리'+'\x20작업\x20수행\x0a\x20\x20\x20'+'-\x20진행률:\x20약\x201'+_0x10988e(0x6d0)+_0x10988e(0x6ab)+_0x10988e(0x465)+_0x10988e(0x3e2)+_0x10988e(0x4b5)+_0x10988e(0x509)+_0x10988e(0x61d)+_0x10988e(0x485)+_0x10988e(0x357)+(_0x10988e(0x2a4)+_0x10988e(0x212)+_0x10988e(0x3b4)+_0x10988e(0x3e4)+_0x10988e(0x4d5)+_0x10988e(0x6c1)+'\x20\x20-\x20진행률:\x20약'+_0x10988e(0x619)+_0x10988e(0x649)+_0x10988e(0x2d4)+_0x10988e(0x51f)+_0x10988e(0x3ee)+'0%\x0a\x20\x20\x20-\x20`r'+_0x10988e(0x23b)+_0x10988e(0x4e8)+'(`SUCCESS`'+',\x20`FAIL`,\x20'+'`STOP`)\x0a\x0a*'+_0x10988e(0x566)+_0x10988e(0x433)+'analysis_s'+_0x10988e(0x48a)+_0x10988e(0x549)+_0x10988e(0x473)+_0x10988e(0x360)+_0x10988e(0x37e)+'으로\x20주기적\x20상태\x20'+_0x10988e(0x47c)+_0x10988e(0x597)+'단계:\x20분석\x20결과\x20'+_0x10988e(0x52f)+_0x10988e(0x6d4)+'nalysis_re'+_0x10988e(0x710)+_0x10988e(0x3ed)+_0x10988e(0x3a5)+'LETE`\x20상태가\x20'+_0x10988e(0x579)+_0x10988e(0x296)+_0x10988e(0x5a8)+_0x10988e(0x218)+'`SUCCESS`:'+_0x10988e(0x3ec)+_0x10988e(0x31e)+'\x20\x20-\x20`FAIL`'+_0x10988e(0x648)+_0x10988e(0x2c8)+_0x10988e(0x302)+_0x10988e(0x322)+'\x0a3.\x20Sparro'+'w\x20OnDemand'+_0x10988e(0x3a7)+_0x10988e(0x1ec)+_0x10988e(0x4d2)+'.\x20ZIP\x20파일을\x20'+_0x10988e(0x327)+_0x10988e(0x231)+'합니다\x0a5.\x20취약점'+_0x10988e(0x523)+':\x0a\x20\x20\x20-\x20`ch'+_0x10988e(0x6cb)+_0x10988e(0x671)+'자\x0a\x20\x20\x20-\x20`de'+'scription`'+':\x20취약점\x20설명\x0a\x20'+'\x20\x20-\x20`sever'+_0x10988e(0x4ac)+_0x10988e(0x70c)+_0x10988e(0x2cf)+_0x10988e(0x6b0)+_0x10988e(0x64d)+'약점이\x20발견된\x20라인'+_0x10988e(0x3cf)+_0x10988e(0x40a)+_0x10988e(0x6a0)+_0x10988e(0x628)+_0x10988e(0x384)+_0x10988e(0x536)+_0x10988e(0x2f0)+_0x10988e(0x3d3)+_0x10988e(0x4a0)+'환합니다\x0a\x0a**반환'+_0x10988e(0x591)+'alysisId`:'+_0x10988e(0x402)+'status`:\x20논'+_0x10988e(0x701)+'mpleted`\x20또'+_0x10988e(0x6ed)+_0x10988e(0x507)+_0x10988e(0x2cb)+_0x10988e(0x36e)+_0x10988e(0x69d)+'`STOP`)\x0a-\x20'+_0x10988e(0x6cd)+_0x10988e(0x645)+_0x10988e(0x613)+'-\x20`analysi'+'sBrief`:\x20A'+_0x10988e(0x5d7))+(_0x10988e(0x2c9)+_0x10988e(0x23e)+_0x10988e(0x397)+_0x10988e(0x706)+_0x10988e(0x681)+_0x10988e(0x4fa)+'nerate_sec'+_0x10988e(0x22c)+_0x10988e(0x3b2)+_0x10988e(0x349)+'MPLETE`\x20상태'+_0x10988e(0x5c3)+'sult`가\x20`SU'+_0x10988e(0x4db)+_0x10988e(0x6a3)+_0x10988e(0x5e6)+_0x10988e(0x4e6)+'(4단계와\x20동일)\x0a'+'2.\x20취약점\x20정보를'+'\x20파싱합니다\x0a3.\x20'+_0x10988e(0x3e0)+_0x10988e(0x67c)+'를\x20LLM에\x20전달합'+_0x10988e(0x456)+_0x10988e(0x539)+_0x10988e(0x2f8)+'다\x20(Ollama\x20'+_0x10988e(0x2e6)+'\x20코드\x20반환)\x0a5.'+_0x10988e(0x362)+'된\x20안전한\x20코드를\x20'+_0x10988e(0x608)+_0x10988e(0x28c)+'(선택사항)\x20LLM'+_0x10988e(0x216)+_0x10988e(0x294)+_0x10988e(0x43b)+_0x10988e(0x274)+'참고**:\x20Olla'+'ma가\x20설정되지\x20않'+_0x10988e(0x257)+_0x10988e(0x3da)+_0x10988e(0x363)+_0x10988e(0x414)+'ureCode`:\x20'+'생성된\x20안전한\x20코드'+_0x10988e(0x339)+_0x10988e(0x2c1)+_0x10988e(0x1e9)+_0x10988e(0x6a6)+'iff`:\x20원본과\x20'+_0x10988e(0x24b)+_0x10988e(0x2a7)+_0x10988e(0x3ba)+_0x10988e(0x266)+_0x10988e(0x678)+_0x10988e(0x283)+_0x10988e(0x314)+'\x0a[ZIP\x20압축]\x0a'+'\x20\x20\x20\x20↓\x0a[S3\x20'+_0x10988e(0x452)+_0x10988e(0x3ff)+'\x20[analysis'+_0x10988e(0x4cc)+'\x20↓\x0a[상태\x20추적]'+_0x10988e(0x267)+_0x10988e(0x525)+_0x10988e(0x28a)+_0x10988e(0x390)+_0x10988e(0x34b)+'OCESS\x20→\x20CO'+_0x10988e(0x58a)+'\x20↓\x0a[결과\x20다운로'+_0x10988e(0x55d)+_0x10988e(0x59d)+_0x10988e(0x301)+_0x10988e(0x1fc)+'환]\x0a\x20\x20\x20\x20↓\x0a['+_0x10988e(0x278)+_0x10988e(0x303)+_0x10988e(0x331)+'\x20[Diff\x20생성]'+'\x20→\x20[브리핑\x20생성'+_0x10988e(0x24f)+_0x10988e(0x373)+_0x10988e(0x519)+_0x10988e(0x481)+'비동기\x20처리**:\x20'+'분석은\x20백그라운드에'+_0x10988e(0x434)+'니다.\x0a2.\x20**상'+_0x10988e(0x657)+'rack_analy'+_0x10988e(0x59c)+_0x10988e(0x5f8)+_0x10988e(0x44e)+_0x10988e(0x280)+_0x10988e(0x2b4)+_0x10988e(0x557)+'\x20분석\x20결과는\x20Sp')+(_0x10988e(0x232)+_0x10988e(0x5f3)+_0x10988e(0x3b6)+_0x10988e(0x271)+'Id`로\x20여러\x20번\x20'+'조회할\x20수\x20있습니다'+_0x10988e(0x49c)+'\x20통합\x20(선택사항)'+_0x10988e(0x20c)+_0x10988e(0x4cd)+'성은\x20Ollama\x20'+_0x10988e(0x4d4)+_0x10988e(0x50a)+_0x10988e(0x5f0)+_0x10988e(0x5f1)+_0x10988e(0x6f3)),_0x54f9d6[_0x10988e(0x409)]=_0x10988e(0x58d)+_0x10988e(0x6d7)+'코드\x20작성\x0aCurs'+_0x10988e(0x39c)+_0x10988e(0x3b3)+_0x10988e(0x56e)+_0x10988e(0x3df)+'ze_file_se'+_0x10988e(0x3d9)+_0x10988e(0x1fb)+_0x10988e(0x30d)+_0x10988e(0x607)+_0x10988e(0x67d)+'_analysis_'+_0x10988e(0x451)+_0x10988e(0x531)+_0x10988e(0x5c6)+'##\x204.\x20결과\x20가'+_0x10988e(0x238)+'nalysis_re'+'sults`를\x20사용'+'하여\x20상세\x20결과(취'+'약점\x20및\x20분석\x20브리'+_0x10988e(0x269)+_0x10988e(0x476)+_0x10988e(0x650)+_0x10988e(0x5fa)+_0x10988e(0x396)+'을\x20사용하여\x20`ge'+_0x10988e(0x2eb)+_0x10988e(0x512)+_0x10988e(0x4d7)+_0x10988e(0x5d8)+_0x10988e(0x20d)+'\x0a취약점,\x20안전한\x20'+'코드\x20및\x20diff를'+_0x10988e(0x277)+_0x10988e(0x3db)+_0x10988e(0x4ca)+'한\x20코드\x20변경\x20사항'+_0x10988e(0x36a)+_0x10988e(0x438)+_0x10988e(0x2e4)+_0x10988e(0x65b)+'분석\x20및\x20수정\x0a\x0a1'+_0x10988e(0x551)+_0x10988e(0x242)+'rity`로\x20파일\x20'+_0x10988e(0x581)+'track_anal'+_0x10988e(0x592)+_0x10988e(0x371)+'황\x20모니터링\x0a3.\x20'+_0x10988e(0x53a)+'sis_result'+_0x10988e(0x595)+_0x10988e(0x441)+_0x10988e(0x5cf)+'code`로\x20안전한'+_0x10988e(0x490)+'생성된\x20코드\x20검토\x20'+'및\x20적용\x0a\x0a###\x20'+'시나리오\x202:\x20여러'+'\x20파일\x20일괄\x20분석\x0a'+'\x0a1.\x20`analy'+_0x10988e(0x391)+_0x10988e(0x3d7)+'여러\x20파일\x20경로\x20전'+_0x10988e(0x2c5)+_0x10988e(0x5cc)+'_progress`'+'로\x20진행\x20상황\x20모니'+_0x10988e(0x4ed)+_0x10988e(0x593)+_0x10988e(0x42a)+_0x10988e(0x4b2)+'인\x0a4.\x20필요에\x20따'+_0x10988e(0x361)+_0x10988e(0x255)+_0x10988e(0x3a8)+_0x10988e(0x5ae)+'#\x20시나리오\x203:\x20'+_0x10988e(0x530)+_0x10988e(0x3d6)+_0x10988e(0x429)+_0x10988e(0x3d7)+_0x10988e(0x43c)+_0x10988e(0x4c4)+_0x10988e(0x43a)+'ogress`로\x20진'+'행\x20상황\x20모니터링\x0a'+_0x10988e(0x2bf)+_0x10988e(0x63f)+'ults`로\x20전체\x20'+_0x10988e(0x3a1),_0x54f9d6[_0x10988e(0x332)+_0x10988e(0x4c6)]='#\x20문제\x20해결\x20가이'+_0x10988e(0x45f)+'\x20문제\x0a\x0a###\x201'+'.\x20MCP\x20서버\x20연'+'결\x20안\x20됨\x0a\x0a**증'+'상**:\x20MCP\x20서'+_0x10988e(0x4f6)+'\x20나타나지\x20않거나\x20'+_0x10988e(0x5e7)+'니다.\x0a\x0a**해결\x20'+_0x10988e(0x53f)+_0x10988e(0x2b1)+_0x10988e(0x4ba)+_0x10988e(0x6f2)+_0x10988e(0x493)+_0x10988e(0x1f4)+'지\x20확인\x0a-\x20Nod'+_0x10988e(0x571)+'\x20있고\x20PATH에서'+'\x20접근\x20가능한지\x20확'+_0x10988e(0x5cd)+'\x20IDE를\x20완전히\x20'+'재시작\x0a-\x20Curs'+'or의\x20MCP\x20서버'+'\x20로그에서\x20오류\x20메'+'시지\x20확인\x0a\x0a###'+'\x202.\x20Ollama'+_0x10988e(0x554)+_0x10988e(0x683)+_0x10988e(0x535)+_0x10988e(0x6b3)+_0x10988e(0x341)+'\x20발생합니다.\x0a\x0a*'+'*해결\x20방법**:\x0a'+_0x10988e(0x2ae)+'설치되어\x20실행\x20중인'+_0x10988e(0x55e)+_0x10988e(0x381)+_0x10988e(0x3fa)+'_BASE_URL`'+_0x10988e(0x489)+'(기본값:\x20`htt'+_0x10988e(0x34f)+_0x10988e(0x494)+_0x10988e(0x42f)+_0x10988e(0x492)+_0x10988e(0x415)+_0x10988e(0x4a2)+_0x10988e(0x47a)+_0x10988e(0x4d3)+'\x20방화벽\x20설정\x20확인'+_0x10988e(0x6aa)+_0x10988e(0x51b)+_0x10988e(0x41a)+_0x10988e(0x6a5)+_0x10988e(0x2ac)+'합니다.\x0a\x0a**해결'+_0x10988e(0x31d)+_0x10988e(0x596)+_0x10988e(0x26b)+_0x10988e(0x395)+'는지\x20확인\x0a-\x20`S'+'PARROW_API'+_0x10988e(0x35c)+_0x10988e(0x3bf)+_0x10988e(0x2b0)+_0x10988e(0x5ca)+_0x10988e(0x474)+_0x10988e(0x561)+_0x10988e(0x33f)+_0x10988e(0x268)+_0x10988e(0x56f)+_0x10988e(0x1df)+_0x10988e(0x2e5)+'아웃됩니다.\x0a\x0a**'+_0x10988e(0x2e9)+_0x10988e(0x4cb)+_0x10988e(0x4bd)+_0x10988e(0x588)+_0x10988e(0x662)+_0x10988e(0x474)+_0x10988e(0x660)+_0x10988e(0x276)+_0x10988e(0x6ca)+_0x10988e(0x3e6)+_0x10988e(0x57a)+'\x0a\x0a서버는\x20콘솔과\x20'+_0x10988e(0x22d)+_0x10988e(0x43f)+_0x10988e(0x2c0)+_0x10988e(0x41d)+_0x10988e(0x46a)+_0x10988e(0x688)+_0x10988e(0x1fe)+_0x10988e(0x5c5)+_0x10988e(0x1fd)+_0x10988e(0x534)+'rror.log`:'+_0x10988e(0x4cf)+'\x20자세한\x20로깅을\x20활'+(_0x10988e(0x63b)+_0x10988e(0x5c4)+_0x10988e(0x4a8)+_0x10988e(0x400)+_0x10988e(0x53b)+_0x10988e(0x6e1));const _0x301505=_0x54f9d6;let _0x2fe9e9;section===_0x140003[_0x10988e(0x372)]?_0x2fe9e9=Object[_0x10988e(0x419)](_0x301505)[_0x10988e(0x398)](_0x10988e(0x63c)):_0x2fe9e9=_0x301505[section]||_0x301505[_0x10988e(0x5b9)];const _0x5bd56e={};_0x5bd56e[_0x10988e(0x403)]=_0x10988e(0x69a),_0x5bd56e[_0x10988e(0x69a)]=_0x2fe9e9;const _0x104a6c={};_0x104a6c[_0x10988e(0x616)]=section==='all'?_0x10988e(0x5f2):section,_0x104a6c['guide']=_0x2fe9e9;const _0x1499f5={};return _0x1499f5[_0x10988e(0x239)]=[_0x5bd56e],_0x1499f5[_0x10988e(0x482)+_0x10988e(0x4da)]=_0x104a6c,_0x1499f5;}catch(_0x2e971f){logger['error'](_0x10988e(0x30a)+_0x10988e(0x68e)+'w\x20MCP\x20guid'+'e:',_0x2e971f);const _0x44af41=_0x2e971f instanceof Error?_0x2e971f[_0x10988e(0x6e8)]:_0x10988e(0x3d4)+_0x10988e(0x2d3),_0x2e7e68={};_0x2e7e68[_0x10988e(0x403)]=_0x140003[_0x10988e(0x61e)],_0x2e7e68['text']=_0x10988e(0x30a)+_0x10988e(0x65a)+'\x20'+_0x44af41;const _0x16182f={};_0x16182f[_0x10988e(0x369)]=_0x44af41;const _0x231392={};return _0x231392[_0x10988e(0x239)]=[_0x2e7e68],_0x231392[_0x10988e(0x482)+_0x10988e(0x4da)]=_0x16182f,_0x231392['isError']=!![],_0x231392;}});const transport=new StdioServerTransport();logger[a1_0xd5bbd1(0x472)](a1_0xd5bbd1(0x3c0)+'\x20code\x20gene'+a1_0xd5bbd1(0x594)+a1_0xd5bbd1(0x563)+'d');try{const serverFileDir=a1_0x424d0b[a1_0xd5bbd1(0x210)](fileURLToPath(import.meta.url)),projectRoot=a1_0x424d0b[a1_0xd5bbd1(0x203)](serverFileDir,'..'),logsDir=a1_0x424d0b[a1_0xd5bbd1(0x203)](projectRoot,a1_0xd5bbd1(0x4c5));if(!a1_0xb25a37[a1_0xd5bbd1(0x3ae)](logsDir)){const a1_0x4ffeb8={};a1_0x4ffeb8[a1_0xd5bbd1(0x2ed)]=!![],a1_0xb25a37[a1_0xd5bbd1(0x25d)](logsDir,a1_0x4ffeb8);}const combinedPath=a1_0x424d0b['join'](logsDir,'combined.l'+'og'),errorPath=a1_0x424d0b['join'](logsDir,a1_0xd5bbd1(0x297));logger[a1_0xd5bbd1(0x472)](a1_0xd5bbd1(0x52a)+a1_0xd5bbd1(0x5a0)+a1_0xd5bbd1(0x477)+'\x20'+combinedPath+a1_0xd5bbd1(0x4df)+errorPath);}catch(a1_0x351639){logger[a1_0xd5bbd1(0x2d1)]('Warning\x20wh'+a1_0xd5bbd1(0x544)+a1_0xd5bbd1(0x27f)+a1_0xd5bbd1(0x6af)+'ctory:',a1_0x351639);}await server[a1_0xd5bbd1(0x36c)](transport);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const a2_0xff9577=a2_0x21f9;(function(_0x3d9eaf,_0x11ccd7){const _0x4314f1=a2_0x21f9,_0x4cb2fa=_0x3d9eaf();while(!![]){try{const _0x8efd56=parseInt(_0x4314f1(0x74))/0x1+-parseInt(_0x4314f1(0x10c))/0x2*(-parseInt(_0x4314f1(0x101))/0x3)+-parseInt(_0x4314f1(0xae))/0x4*(parseInt(_0x4314f1(0xea))/0x5)+parseInt(_0x4314f1(0xbe))/0x6+-parseInt(_0x4314f1(0x7a))/0x7*(parseInt(_0x4314f1(0xba))/0x8)+parseInt(_0x4314f1(0x76))/0x9*(-parseInt(_0x4314f1(0xb9))/0xa)+-parseInt(_0x4314f1(0xa2))/0xb*(-parseInt(_0x4314f1(0xa7))/0xc);if(_0x8efd56===_0x11ccd7)break;else _0x4cb2fa['push'](_0x4cb2fa['shift']());}catch(_0x485cfc){_0x4cb2fa['push'](_0x4cb2fa['shift']());}}}(a2_0xc554,0xb80bf));const a2_0x3d3062=(function(){let _0x3a7805=!![];return function(_0x3e5725,_0x14b7a8){const _0x249e62=_0x3a7805?function(){const _0x2a7e48=a2_0x21f9;if(_0x14b7a8){const _0x15dd89=_0x14b7a8[_0x2a7e48(0x10a)](_0x3e5725,arguments);return _0x14b7a8=null,_0x15dd89;}}:function(){};return _0x3a7805=![],_0x249e62;};}()),a2_0x2a4ba3=a2_0x3d3062(this,function(){const _0x127f77=a2_0x21f9;return a2_0x2a4ba3[_0x127f77(0xb1)]()['search'](_0x127f77(0xf8)+'+$')[_0x127f77(0xb1)]()[_0x127f77(0xdd)+'r'](a2_0x2a4ba3)['search'](_0x127f77(0xf8)+'+$');});a2_0x2a4ba3();import{LLMService}from'./llm.service.js';import{SparrowService}from'./sparrow.service.js';import{S3Service}from'./s3.service.js';import{DiffUtil}from'../utils/diff.util.js';import{logger}from'../utils/logger.js';import a2_0x5135b7 from'path';export class AnalysisService{['llmService'];[a2_0xff9577(0xa3)+a2_0xff9577(0xb5)];[a2_0xff9577(0x7d)];constructor(){const _0x5f225f=a2_0xff9577;this[_0x5f225f(0x11b)]=new LLMService(),this[_0x5f225f(0xa3)+'vice']=new SparrowService(),this[_0x5f225f(0x7d)]=new S3Service();}async[a2_0xff9577(0x73)+a2_0xff9577(0xd7)](_0xc98686){const _0xb8f6f=a2_0xff9577,_0x3122c8={};_0x3122c8[_0xb8f6f(0x7c)]=_0xb8f6f(0xc2)+'패:';const _0x14228d=_0x3122c8;try{logger[_0xb8f6f(0x103)]('보안\x20분석\x20시작:\x20'+_0xc98686[_0xb8f6f(0x91)]);const _0x5a2ec4=await this[_0xb8f6f(0x7d)][_0xb8f6f(0x10b)](_0xc98686[_0xb8f6f(0x8b)+'t'],_0xc98686['fileName']);if(!_0x5a2ec4[_0xb8f6f(0xf6)])throw new Error(_0xb8f6f(0x89)+'\x20'+_0x5a2ec4[_0xb8f6f(0xc4)]);const _0x2c96ff={};_0x2c96ff['fileName']=_0xc98686[_0xb8f6f(0x91)],_0x2c96ff[_0xb8f6f(0x8b)+'t']=_0xc98686[_0xb8f6f(0x8b)+'t'],_0x2c96ff[_0xb8f6f(0x97)]=_0x5a2ec4[_0xb8f6f(0x112)];const _0x55ba54=_0x2c96ff,_0x196de9=await this[_0xb8f6f(0xa3)+_0xb8f6f(0xb5)][_0xb8f6f(0xdb)+_0xb8f6f(0xc9)](_0x55ba54);logger[_0xb8f6f(0x103)]('분석\x20요청\x20완료:\x20'+_0x196de9[_0xb8f6f(0xd5)]);const _0x3036ae={};return _0x3036ae[_0xb8f6f(0x10e)]=_0x196de9[_0xb8f6f(0x10e)]||_0x196de9[_0xb8f6f(0xd5)],_0x3036ae[_0xb8f6f(0xca)]=_0x196de9[_0xb8f6f(0xca)],_0x3036ae;}catch(_0x47d893){logger['error'](_0x14228d[_0xb8f6f(0x7c)],_0x47d893);throw _0x47d893;}}async[a2_0xff9577(0xa9)+'sStatus'](_0x28d847){const _0x554cc9=a2_0xff9577,_0x504917={'ybDgJ':function(_0x992eb4,_0x47dfb9){return _0x992eb4(_0x47dfb9);},'nWQIx':_0x554cc9(0xcb),'NFhcA':_0x554cc9(0x113)+_0x554cc9(0xb3)+_0x554cc9(0xd9),'ZXlOI':'분석이\x20완료되었습니'+'다.'};try{const _0x5871c0=await this[_0x554cc9(0xa3)+_0x554cc9(0xb5)][_0x554cc9(0xa9)+_0x554cc9(0xf1)](_0x28d847);let _0x5cd623=_0x5871c0['progress'];if(_0x5cd623===undefined){const _0x30647a=_0x504917[_0x554cc9(0xd8)](String,_0x5871c0[_0x554cc9(0xca)])[_0x554cc9(0xf2)+'e']();if(_0x30647a===_0x504917[_0x554cc9(0xb6)])_0x5cd623=0x64;else{if(_0x30647a==='ANALYSIS')_0x5cd623=undefined;else{if(_0x30647a===_0x554cc9(0x79)||_0x30647a==='READY')_0x5cd623=0x0;else{if(_0x30647a==='PRE_PROCES'+'S')_0x5cd623=0xa;else _0x30647a==='POST_PROCE'+'SS'&&(_0x5cd623=0x5a);}}}}const _0x3a1374=String(_0x5871c0[_0x554cc9(0xca)])[_0x554cc9(0xf2)+'e']();let _0x1db7c0;if(_0x3a1374==='COMPLETE'){const _0x11f7ae=_0x5871c0[_0x554cc9(0x105)]?String(_0x5871c0[_0x554cc9(0x105)])[_0x554cc9(0xf2)+'e']():undefined;if(_0x11f7ae==='SUCCESS')_0x1db7c0='분석이\x20성공적으로\x20'+_0x554cc9(0x93);else{if(_0x11f7ae===_0x554cc9(0x81))_0x1db7c0=_0x504917['NFhcA'];else _0x11f7ae==='STOP'?_0x1db7c0='중지\x20요청을\x20받아\x20'+_0x554cc9(0xd0)+_0x554cc9(0x98):_0x1db7c0=_0x504917[_0x554cc9(0xc1)];}}else{const _0x5a3e30={};_0x5a3e30[_0x554cc9(0x79)]=_0x554cc9(0x102),_0x5a3e30[_0x554cc9(0x94)]=_0x554cc9(0x8c),_0x5a3e30[_0x554cc9(0x99)+'S']=_0x554cc9(0xe9),_0x5a3e30['ANALYSIS']=_0x554cc9(0xe8),_0x5a3e30['POST_PROCE'+'SS']='후처리\x20중입니다.',_0x5a3e30['FAIL']=_0x554cc9(0xe0)+'.',_0x5a3e30[_0x554cc9(0x90)]=_0x554cc9(0xe0)+'.';const _0x118999=_0x5a3e30;_0x1db7c0=_0x118999[_0x3a1374]||'분석이\x20진행\x20중입니'+'다.';}let _0x5f2856=_0x5871c0[_0x554cc9(0xca)];_0x3a1374===_0x554cc9(0xcb)&&_0x5871c0[_0x554cc9(0x105)]&&(_0x5f2856=_0x5871c0['result']);const _0x4c664d={};return _0x4c664d[_0x554cc9(0xca)]=_0x5f2856,_0x4c664d[_0x554cc9(0x105)]=_0x5871c0['result'],_0x4c664d[_0x554cc9(0xd1)]=_0x5cd623,_0x4c664d[_0x554cc9(0xff)]=_0x1db7c0,_0x4c664d;}catch(_0x454fa9){logger[_0x554cc9(0xc4)](_0x554cc9(0x106)+'패:',_0x454fa9);throw _0x454fa9;}}async[a2_0xff9577(0xa9)+'sResults'](_0x4c7dde){const _0x2673c9=a2_0xff9577,_0x12d19d={};_0x12d19d['ghweS']=function(_0x471510,_0x52f036){return _0x471510!==_0x52f036;};const _0xdbaf7b=_0x12d19d;try{logger[_0x2673c9(0x103)](_0x2673c9(0x7b)+_0x4c7dde);const _0x3e0edb=await this[_0x2673c9(0xa3)+_0x2673c9(0xb5)][_0x2673c9(0x117)+_0x2673c9(0x92)+'on'](_0x4c7dde),_0x3dd2ad=_0x3e0edb['result']?String(_0x3e0edb[_0x2673c9(0x105)])[_0x2673c9(0xf2)+'e']():undefined;let _0x2fe8d6;_0x3dd2ad==='FAIL'||_0x3dd2ad==='STOP'?_0x2fe8d6='failed':_0x2fe8d6=_0x2673c9(0x110);const _0x4e80b6=_0x3e0edb['analysisId']||_0x4c7dde;_0xdbaf7b[_0x2673c9(0x121)](_0x4e80b6,_0x4c7dde)&&logger['info']('분석\x20ID\x20변경\x20감'+_0x2673c9(0x7f)+_0x4c7dde+_0x2673c9(0xa6)+_0x4e80b6);logger[_0x2673c9(0x103)](_0x2673c9(0xad)+_0x2673c9(0xa4)+_0x4e80b6);const _0x198064=await this[_0x2673c9(0xa3)+'vice'][_0x2673c9(0xe7)+_0x2673c9(0x6f)+_0x2673c9(0x96)](_0x4e80b6),_0x38c312=this[_0x2673c9(0x119)+_0x2673c9(0xac)](_0x198064),_0x5b03f0=await this[_0x2673c9(0x11b)][_0x2673c9(0x77)+_0x2673c9(0xd2)+'f'](_0x198064),_0x3467d8=_0x5b03f0[_0x2673c9(0xf6)]?_0x5b03f0[_0x2673c9(0xb7)]:_0x2673c9(0x80)+_0x2673c9(0xf5);logger[_0x2673c9(0x103)]('분석\x20결과\x20생성\x20완'+_0x2673c9(0x9f)+_0x38c312[_0x2673c9(0x6c)]+(_0x2673c9(0x72)+_0x2673c9(0x6a))+_0x4e80b6+')');const _0x58b351={};return _0x58b351[_0x2673c9(0x10e)]=_0x4e80b6,_0x58b351['status']=_0x2fe8d6,_0x58b351[_0x2673c9(0x105)]=_0x3dd2ad,_0x58b351[_0x2673c9(0xaf)+_0x2673c9(0xb0)]=_0x38c312,_0x58b351[_0x2673c9(0x9b)+'ief']=_0x3467d8,_0x58b351;}catch(_0x4443cd){logger['error'](_0x2673c9(0x100)+'패:',_0x4443cd);throw _0x4443cd;}}async['generateSe'+a2_0xff9577(0xb4)+'omAnalysis'](_0x19f776,_0x1f1831){const _0x46b261=a2_0xff9577,_0x580920={'Vgode':function(_0x11d913,_0x124cf4){return _0x11d913(_0x124cf4);}};try{logger[_0x46b261(0x103)](_0x46b261(0xd6)+_0x46b261(0xf0)+_0x19f776);const _0x4e9617=await this[_0x46b261(0xa3)+_0x46b261(0xb5)][_0x46b261(0x117)+_0x46b261(0x92)+'on'](_0x19f776),_0x6e12aa=_0x4e9617[_0x46b261(0x105)]?_0x580920['Vgode'](String,_0x4e9617[_0x46b261(0x105)])[_0x46b261(0xf2)+'e']():undefined;if(_0x6e12aa&&_0x6e12aa!==_0x46b261(0x111))throw new Error(_0x46b261(0x116)+_0x46b261(0x8f)+'.\x20result='+_0x6e12aa+(_0x46b261(0x84)+_0x46b261(0x11c)+_0x46b261(0xc6)+'없습니다.)'));const _0x2b6714=_0x4e9617[_0x46b261(0x10e)]||_0x19f776;logger[_0x46b261(0x103)](_0x46b261(0xad)+_0x46b261(0xa4)+_0x2b6714);const _0x5d77e8=await this[_0x46b261(0xa3)+_0x46b261(0xb5)][_0x46b261(0xe7)+_0x46b261(0x6f)+_0x46b261(0x96)](_0x2b6714),_0x5d0228=this[_0x46b261(0x119)+_0x46b261(0xac)](_0x5d77e8),_0x52b5cd=await this[_0x46b261(0x11b)][_0x46b261(0x82)+_0x46b261(0xeb)](_0x1f1831,_0x5d0228),_0x394376=_0x52b5cd[_0x46b261(0xf6)]?_0x52b5cd['content']:_0x1f1831,_0x13b4cb=await this['llmService'][_0x46b261(0x82)+_0x46b261(0xab)+_0x46b261(0x71)](_0x1f1831,_0x394376),_0x3c2acb=_0x13b4cb['success']?_0x13b4cb['content']:'안전한\x20코드\x20브리핑'+'\x20생성에\x20실패했습니'+'다.',_0x19b412=DiffUtil['generateUn'+'ifiedDiff'](_0x1f1831,_0x394376,_0x46b261(0xde));logger[_0x46b261(0x103)](_0x46b261(0xd6)+_0x46b261(0xef)+'\x20'+_0x2b6714+')');const _0x181874={};return _0x181874[_0x46b261(0xcc)]=_0x394376,_0x181874['secureCode'+'Brief']=_0x3c2acb,_0x181874[_0x46b261(0x8a)]=_0x19b412,_0x181874;}catch(_0x406e48){logger[_0x46b261(0xc4)](_0x46b261(0xd6)+_0x46b261(0xce),_0x406e48);throw _0x406e48;}}[a2_0xff9577(0x119)+a2_0xff9577(0xac)](_0x538ecf){const _0x1332a0=a2_0xff9577,_0x3bba54=[];for(const _0x2c571e of _0x538ecf){if(Array[_0x1332a0(0xe3)](_0x2c571e))for(const _0x1fa7ee of _0x2c571e){_0x1fa7ee[_0x1332a0(0x11f)]&&_0x3bba54[_0x1332a0(0xed)]({'checkerKey':_0x1fa7ee[_0x1332a0(0x11f)]||_0x1332a0(0x122),'description':this['buildVulne'+'rabilityDe'+_0x1332a0(0x6d)](_0x1fa7ee),'severity':this['mapSeverit'+_0x1332a0(0x109)](_0x1fa7ee[_0x1332a0(0x118)]),'lineNumber':_0x1fa7ee['lineNumber'],'filePath':_0x1fa7ee[_0x1332a0(0xfa)]&&_0x1fa7ee[_0x1332a0(0xfa)]['length']>0x0?_0x1fa7ee[_0x1332a0(0xfa)][0x0]:undefined});}else{if(_0x2c571e['vulnerabil'+_0x1332a0(0xb0)]&&Array[_0x1332a0(0xe3)](_0x2c571e[_0x1332a0(0xaf)+_0x1332a0(0xb0)]))for(const _0x19f013 of _0x2c571e[_0x1332a0(0xaf)+'ities']){_0x3bba54[_0x1332a0(0xed)]({'checkerKey':_0x19f013[_0x1332a0(0x11f)]||_0x1332a0(0x122),'description':_0x19f013[_0x1332a0(0xe1)+'n']||_0x19f013[_0x1332a0(0xff)]||_0x1332a0(0x83),'severity':this['mapSeverit'+'y'](_0x19f013[_0x1332a0(0xf9)]),'lineNumber':_0x19f013['lineNumber'],'filePath':_0x19f013['filePath']});}}}return _0x3bba54;}[a2_0xff9577(0xf7)+a2_0xff9577(0xe2)+a2_0xff9577(0x6d)](_0x5b7e27){const _0x1cdc14=a2_0xff9577,_0x2a2967={};_0x2a2967[_0x1cdc14(0xf3)]=function(_0x96de14,_0x13fade){return _0x96de14>_0x13fade;};const _0x47bb0f=_0x2a2967,_0xbe0e32=[];_0x5b7e27[_0x1cdc14(0x11f)]&&_0xbe0e32[_0x1cdc14(0xed)](_0x1cdc14(0xfc)+_0x5b7e27[_0x1cdc14(0x11f)]);_0x5b7e27[_0x1cdc14(0xdf)]&&_0xbe0e32[_0x1cdc14(0xed)]('Method:\x20'+_0x5b7e27[_0x1cdc14(0xdf)]);_0x5b7e27[_0x1cdc14(0xfa)]&&_0x5b7e27[_0x1cdc14(0xfa)][_0x1cdc14(0x6c)]>0x0&&_0xbe0e32['push'](_0x1cdc14(0x115)+_0x5b7e27[_0x1cdc14(0xfa)][0x0]);_0x5b7e27[_0x1cdc14(0x104)]&&_0xbe0e32[_0x1cdc14(0xed)](_0x1cdc14(0xdc)+_0x5b7e27[_0x1cdc14(0x104)]);_0x5b7e27[_0x1cdc14(0x118)]&&_0xbe0e32[_0x1cdc14(0xed)](_0x1cdc14(0x11d)+':\x20'+_0x5b7e27[_0x1cdc14(0x118)]);if(_0x5b7e27['contexts']&&Array[_0x1cdc14(0xe3)](_0x5b7e27[_0x1cdc14(0x8e)])){const _0x296671=[];for(const _0x572195 of _0x5b7e27['contexts']){if(_0x572195[_0x1cdc14(0x78)]&&Array[_0x1cdc14(0xe3)](_0x572195['eventMsgs']))for(const _0x3b6496 of _0x572195[_0x1cdc14(0x78)]){if(_0x3b6496[_0x1cdc14(0xb8)]&&Array[_0x1cdc14(0xe3)](_0x3b6496[_0x1cdc14(0xb8)]))for(const _0x50ff1d of _0x3b6496[_0x1cdc14(0xb8)]){_0x50ff1d[_0x1cdc14(0xff)]&&_0x296671[_0x1cdc14(0xed)](_0x50ff1d['message']);}}}_0x47bb0f[_0x1cdc14(0xf3)](_0x296671[_0x1cdc14(0x6c)],0x0)&&_0xbe0e32['push'](_0x1cdc14(0x6e)+_0x296671[_0x1cdc14(0xb2)](';\x20'));}return _0xbe0e32[_0x1cdc14(0x6c)]>0x0?_0xbe0e32[_0x1cdc14(0xb2)](',\x20'):_0x1cdc14(0x87)+'니다.';}[a2_0xff9577(0xbc)+a2_0xff9577(0x109)](_0x2b9ec3){const _0x1f500b=a2_0xff9577,_0xd349c6={};_0xd349c6['KXPwI']='HIGH';const _0x5b35ed=_0xd349c6,_0x25f984=typeof _0x2b9ec3==='string'?parseInt(_0x2b9ec3):_0x2b9ec3;if(_0x25f984<=0x2)return _0x5b35ed[_0x1f500b(0xfe)];else return _0x25f984===0x3?_0x1f500b(0x11a):'LOW';}async[a2_0xff9577(0xe6)+a2_0xff9577(0xc3)+a2_0xff9577(0xd4)](_0x32eb57){const _0x29dcb3=a2_0xff9577;try{logger[_0x29dcb3(0x103)](_0x29dcb3(0x70)+_0x29dcb3(0x9e)+_0x32eb57[_0x29dcb3(0xd3)]['length']+_0x29dcb3(0x108));if(!_0x32eb57['files']||_0x32eb57[_0x29dcb3(0xd3)][_0x29dcb3(0x6c)]===0x0)throw new Error(_0x29dcb3(0xc0)+_0x29dcb3(0x10d));const _0x46568b=await this[_0x29dcb3(0x7d)][_0x29dcb3(0x6b)+_0x29dcb3(0xfd)](_0x32eb57[_0x29dcb3(0xd3)],_0x32eb57[_0x29dcb3(0xc7)+'e']);if(!_0x46568b['success'])throw new Error('파일\x20업로드\x20실패:'+'\x20'+_0x46568b[_0x29dcb3(0xc4)]);const _0x5e16ff=_0x32eb57[_0x29dcb3(0xd3)][0x0]?.[_0x29dcb3(0x91)]||_0x29dcb3(0x107),_0xc8877={};_0xc8877[_0x29dcb3(0x91)]=_0x32eb57[_0x29dcb3(0xc7)+'e']||_0x5e16ff,_0xc8877[_0x29dcb3(0x8b)+'t']='',_0xc8877['s3Key']=_0x46568b['key'];const _0x2508ec=_0xc8877,_0x56d920=await this[_0x29dcb3(0xa3)+_0x29dcb3(0xb5)][_0x29dcb3(0xdb)+_0x29dcb3(0xc9)](_0x2508ec);logger[_0x29dcb3(0x103)]('다중\x20파일\x20분석\x20요'+'청\x20완료:\x20'+_0x56d920[_0x29dcb3(0xd5)]);const _0x541baf={};return _0x541baf[_0x29dcb3(0x10e)]=_0x56d920[_0x29dcb3(0x10e)]||_0x56d920[_0x29dcb3(0xd5)],_0x541baf['status']=_0x56d920['status'],_0x541baf;}catch(_0xf9572c){logger[_0x29dcb3(0xc4)]('다중\x20파일\x20보안\x20분'+'석\x20요청\x20실패:',_0xf9572c);throw _0xf9572c;}}async[a2_0xff9577(0xe6)+a2_0xff9577(0xc3)+a2_0xff9577(0xf4)](_0x2eabe7,_0x574cc0){const _0x3ea83e=a2_0xff9577;try{logger[_0x3ea83e(0x103)](_0x3ea83e(0xda)+_0x3ea83e(0xa8)+_0x3ea83e(0xa4)+_0x2eabe7[_0x3ea83e(0x6c)]+_0x3ea83e(0x9c));if(!_0x2eabe7||_0x2eabe7[_0x3ea83e(0x6c)]===0x0)throw new Error(_0x3ea83e(0xbb)+_0x3ea83e(0xc8));const _0x54d75b=await this[_0x3ea83e(0x7d)][_0x3ea83e(0x10b)+_0x3ea83e(0xa5)](_0x2eabe7,_0x574cc0);if(!_0x54d75b[_0x3ea83e(0xf6)])throw new Error(_0x3ea83e(0x89)+'\x20'+_0x54d75b[_0x3ea83e(0xc4)]);const _0x1594d9=a2_0x5135b7[_0x3ea83e(0x75)](_0x2eabe7[0x0])||'input.zip',_0x57f996={};_0x57f996[_0x3ea83e(0x91)]=_0x574cc0||_0x1594d9,_0x57f996[_0x3ea83e(0x8b)+'t']='',_0x57f996[_0x3ea83e(0x97)]=_0x54d75b[_0x3ea83e(0x112)];const _0x1acebe=_0x57f996,_0x23eab3=await this[_0x3ea83e(0xa3)+_0x3ea83e(0xb5)][_0x3ea83e(0xdb)+'lysis'](_0x1acebe);logger[_0x3ea83e(0x103)](_0x3ea83e(0x88)+_0x3ea83e(0x95)+_0x23eab3['requestId']);const _0xe6ba05={};return _0xe6ba05[_0x3ea83e(0x10e)]=_0x23eab3['analysisId']||_0x23eab3[_0x3ea83e(0xd5)],_0xe6ba05['status']=_0x23eab3['status'],_0xe6ba05;}catch(_0x171537){logger[_0x3ea83e(0xc4)](_0x3ea83e(0x9a)+'안\x20분석\x20요청\x20실패'+':',_0x171537);throw _0x171537;}}async['analyzeZip'+a2_0xff9577(0xe4)](_0x3e46c6,_0x1c9ee6){const _0x40cd5e=a2_0xff9577;try{logger[_0x40cd5e(0x103)](_0x40cd5e(0xaa)+_0x40cd5e(0x114)+_0x3e46c6);if(!_0x3e46c6)throw new Error(_0x40cd5e(0xa0)+_0x40cd5e(0x85)+'다.');const _0x4a8094=await this['s3Service']['uploadZipF'+_0x40cd5e(0xbd)](_0x3e46c6);if(!_0x4a8094['success'])throw new Error('ZIP\x20파일\x20업로드'+_0x40cd5e(0x10f)+_0x4a8094[_0x40cd5e(0xc4)]);const _0x5e7990=_0x1c9ee6||a2_0x5135b7[_0x40cd5e(0x75)](_0x3e46c6)||'input.zip',_0x33ed5e={};_0x33ed5e[_0x40cd5e(0x91)]=_0x5e7990,_0x33ed5e[_0x40cd5e(0x8b)+'t']='',_0x33ed5e[_0x40cd5e(0x97)]=_0x4a8094[_0x40cd5e(0x112)];const _0x4c6de5=_0x33ed5e,_0x46b4a3=await this[_0x40cd5e(0xa3)+_0x40cd5e(0xb5)][_0x40cd5e(0xdb)+_0x40cd5e(0xc9)](_0x4c6de5);logger[_0x40cd5e(0x103)](_0x40cd5e(0xaa)+_0x40cd5e(0xe5)+_0x46b4a3[_0x40cd5e(0xd5)]);const _0x41944f={};return _0x41944f[_0x40cd5e(0x10e)]=_0x46b4a3[_0x40cd5e(0x10e)]||_0x46b4a3[_0x40cd5e(0xd5)],_0x41944f[_0x40cd5e(0xca)]=_0x46b4a3[_0x40cd5e(0xca)],_0x41944f;}catch(_0x4924a0){logger[_0x40cd5e(0xc4)](_0x40cd5e(0xaa)+_0x40cd5e(0xc2)+'패:',_0x4924a0);throw _0x4924a0;}}async[a2_0xff9577(0xc5)+'der'](_0x2b3118,_0x31c105){const _0x108b98=a2_0xff9577;try{logger[_0x108b98(0x103)](_0x108b98(0x9d)+_0x108b98(0x9e)+_0x2b3118);if(!_0x2b3118)throw new Error(_0x108b98(0x120)+_0x108b98(0xbf));const _0x54f6a3=await this['s3Service'][_0x108b98(0xcd)+_0x108b98(0xec)](_0x2b3118,_0x31c105);if(!_0x54f6a3[_0x108b98(0xf6)])throw new Error('폴더\x20압축\x20및\x20업로'+_0x108b98(0x7e)+_0x54f6a3['error']);const _0x1774bd=_0x31c105||a2_0x5135b7[_0x108b98(0x75)](_0x2b3118)||'folder.zip',_0x1b3703={};_0x1b3703['fileName']=_0x1774bd,_0x1b3703[_0x108b98(0x8b)+'t']='',_0x1b3703[_0x108b98(0x97)]=_0x54f6a3[_0x108b98(0x112)];const _0xaf1316=_0x1b3703,_0x519e37=await this[_0x108b98(0xa3)+_0x108b98(0xb5)]['requestAna'+'lysis'](_0xaf1316);logger['info'](_0x108b98(0xcf)+_0x108b98(0x8d)+_0x519e37[_0x108b98(0xd5)]);const _0x4ddcb8={};return _0x4ddcb8[_0x108b98(0x10e)]=_0x519e37[_0x108b98(0x10e)]||_0x519e37[_0x108b98(0xd5)],_0x4ddcb8['status']=_0x519e37[_0x108b98(0xca)],_0x4ddcb8;}catch(_0x2bee35){logger[_0x108b98(0xc4)](_0x108b98(0x9d)+_0x108b98(0x11e),_0x2bee35);throw _0x2bee35;}}[a2_0xff9577(0xbc)+'y'](_0x1f1e23){const _0x489a51=a2_0xff9577,_0x5c11ab={};_0x5c11ab[_0x489a51(0xee)]=_0x489a51(0xee),_0x5c11ab[_0x489a51(0x86)]=_0x489a51(0xee),_0x5c11ab[_0x489a51(0x11a)]=_0x489a51(0x11a),_0x5c11ab['LOW']=_0x489a51(0xfb),_0x5c11ab[_0x489a51(0xa1)]='LOW';const _0x4b3e66=_0x5c11ab;return _0x4b3e66[_0x1f1e23?.['toUpperCas'+'e']()]||'MEDIUM';}}function a2_0x21f9(_0x558a09,_0x5dae26){_0x558a09=_0x558a09-0x6a;const _0x49e9ba=a2_0xc554();let _0x2a4ba3=_0x49e9ba[_0x558a09];return _0x2a4ba3;}function a2_0xc554(){const _0x239c57=['MEDIUM','llmService','\x20아니므로\x20안전한\x20','Risk\x20Level','석\x20요청\x20실패:','checkerKey','폴더\x20경로가\x20제공되','ghweS','UNKNOWN','분석\x20ID:\x20','uploadMult','length','scription','Details:\x20','alysisResu','다중\x20파일\x20보안\x20분','ief','개\x20취약점\x20발견\x20(','analyzeFil','331243WpKmtg','basename','153JtxsJJ','generateAn','eventMsgs','INIT','7bvdBkc','분석\x20결과\x20조회:\x20','EXubZ','s3Service','드\x20실패:\x20','지:\x20원본\x20','분석\x20브리핑\x20생성에','FAIL','generateSe','설명\x20없음','\x20(SUCCESS가','\x20제공되지\x20않았습니','CRITICAL','취약점이\x20발견되었습','파일\x20경로\x20기반\x20분','파일\x20업로드\x20실패:','diff','fileConten','준비\x20중입니다.','청\x20완료:\x20','contexts','완료되지\x20않았습니다','FAILED','fileName','isCompleti','완료되었습니다.','READY','석\x20요청\x20완료:\x20','lts','s3Key','입니다.','PRE_PROCES','파일\x20경로\x20기반\x20보','analysisBr','개\x20파일\x20경로','폴더\x20기반\x20보안\x20분','석\x20시작:\x20','료:\x20','ZIP\x20파일\x20경로가','INFO','23309qDmjmN','sparrowSer','\x20시작:\x20','sFromPaths','\x20->\x20실제\x20','3912crQOXr','중\x20파일\x20보안\x20분석','getAnalysi','ZIP\x20파일\x20기반\x20','cureCodeBr','rabilities','분석\x20결과\x20다운로드','3916lXjOyO','vulnerabil','ities','toString','join','료하지\x20못하고\x20실패','cureCodeFr','vice','nWQIx','content','messages','755190lOOhLs','1624688ZjRVKu','분석할\x20파일\x20경로가','mapSeverit','ile','8326698bsMflC','지\x20않았습니다.','분석할\x20파일이\x20없습','ZXlOI','보안\x20분석\x20요청\x20실','tipleFiles','error','analyzeFol','코드를\x20생성할\x20수\x20','zipFileNam','\x20없습니다.','lysis','status','COMPLETE','secureCode','uploadFold','실패:','폴더\x20기반\x20분석\x20요','분석이\x20중지된\x20상태','progress','alysisBrie','files','Security','requestId','안전한\x20코드\x20생성\x20','eSecurity','ybDgJ','한\x20상태입니다.','파일\x20경로\x20기반\x20다','requestAna','Line:\x20','constructo','code.java','method','분석이\x20실패했습니다','descriptio','rabilityDe','isArray','File','분석\x20요청\x20완료:\x20','analyzeMul','downloadAn','분석\x20중입니다.','전처리\x20중입니다.','1835SwvgDJ','cureCode','erAsZip','push','HIGH','완료\x20(분석\x20ID:','시작:\x20','sStatus','toUpperCas','UOJpn','FromPaths','\x20실패했습니다.','success','buildVulne','(((.+)+)+)','severity','filePaths','LOW','Checker:\x20','ipleFiles','KXPwI','message','분석\x20결과\x20조회\x20실','843KBiuEX','초기화\x20중입니다.','info','lineNumber','result','분석\x20상태\x20조회\x20실','input.zip','개\x20파일','yFromRisk','apply','uploadFile','1354nJtCtt','니다.','analysisId','\x20실패:\x20','completed','SUCCESS','key','분석을\x20올바르게\x20완','보안\x20분석\x20시작:\x20','File:\x20','분석이\x20성공적으로\x20','pollAnalys','risk','parseVulne'];a2_0xc554=function(){return _0x239c57;};return a2_0xc554();}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const a3_0x25f9bd=a3_0xc759;(function(_0x495b78,_0x14d229){const _0x400ef2=a3_0xc759,_0x27d6c2=_0x495b78();while(!![]){try{const _0x15b06b=parseInt(_0x400ef2(0x17a))/0x1+-parseInt(_0x400ef2(0x1b6))/0x2+parseInt(_0x400ef2(0x1d8))/0x3*(-parseInt(_0x400ef2(0x192))/0x4)+-parseInt(_0x400ef2(0x1aa))/0x5*(parseInt(_0x400ef2(0x1f5))/0x6)+parseInt(_0x400ef2(0x200))/0x7*(parseInt(_0x400ef2(0x1a3))/0x8)+parseInt(_0x400ef2(0x1a1))/0x9*(parseInt(_0x400ef2(0x1b2))/0xa)+-parseInt(_0x400ef2(0x1f2))/0xb*(-parseInt(_0x400ef2(0x20d))/0xc);if(_0x15b06b===_0x14d229)break;else _0x27d6c2['push'](_0x27d6c2['shift']());}catch(_0x31e5d6){_0x27d6c2['push'](_0x27d6c2['shift']());}}}(a3_0x1a7c,0xbe653));function a3_0x1a7c(){const _0x2e0efd=['isAxiosErr','70336nhiVER','ror:\x20','constructo','re\x20code\x20ba','nalysis\x20br','is\x20results','Unknown\x20er','t\x20explanat','is\x20running','ring\x20the\x20f','write\x20the\x20','toString','h\x20based\x20on','12gGHLAi','alysisBrie','ver\x20connec','cure\x20code\x20','he\x20server\x20','e:\x0a```java','sed\x20on\x20the','classifica','lama\x20serve',':\x0a\x0aAnalysi','search','nerabiliti','ext):','cureCodeBr','r\x20briefing','1117090iCYJja','response','/api/gener','ror','model','generate\x20L','Ollama\x20ser','that\x20need\x20','hould\x20incl','ions\x20or\x20ad','content','\x0a\x0aRequirem','CGRCV','fing\x20shoul','briefing\x20i','\x20major\x20vul','ractices\x0a4','success','ditional\x20t','\x20code\x0a3.\x20A','ty\x20improve','\x20functiona','message','check\x20if\x20t','14236JgdBCn','00-400\x20cha','baseUrl','Cannot\x20con','ents:\x0a1.\x20G','\x20following','briefing\x20s','iginal\x20Cod','Failed\x20to\x20','wing\x20secur','generate\x20s','Ollama\x20API','\x0a\x0aThe\x20brie','de\x20(withou','n\x20approxim','1562364IIMeSr','de\x20and\x20sec','696znGNfK','cureCode','data','ECONNREFUS','d\x20security','all\x20securi','ease\x20retur','5bENMCF','\x20in\x20Englis','\x20briefing.','n\x20the\x20same','found\x20and\x20','code','ing\x20in\x20Eng','stringify','50tymxng','generateAn','\x20code\x20read','status','681354rpLnYJ','\x0a```\x0a\x0aThe\x20','ty\x20status\x20','d\x20include:','ity\x20best\x20p','rabilities','n\x20only\x20the','timeout','g\x20in\x20appro','ximately\x203','(((.+)+)+)','\x20error:\x20','r.\x20Please\x20','\x20security\x20','verity\x0a2.\x20','LM\x20analysi','ode\x20qualit','racters.','erate\x20secu','ate','re\x20Code:\x0a`','ude:\x0a1.\x20Ma','he\x20briefin','ability\x0a5.','discovered','300\x20charac','se\x20write\x20t','pply\x20secur','\x0a3.\x20Applie','generateSe','ription\x20of','post','e\x20and\x20clea','2.\x20Maintai','1206eIQaPK','Network\x20er','s\x20Results:','s\x20briefing','\x20secure\x20co','assessment','nect\x20to\x20Ol','e\x20original','te\x20a\x20brief','es:\x0a','Please\x20gen','tion\x20timeo','``java\x0a','ixed\x20vulne','ments\x0a2.\x20F','ava\x0a','ollowing\x20o','\x20-\x20','\x0aOriginal\x20','\x20code\x20and\x20','ity\x20improv','ecure\x20code','improvemen','ents\x0a\x0aPlea','apply','Please\x20wri','616099EAwLwC','nts\x20to\x20exp','iefing.','2184006QdoPXE','XXhPV','\x20the\x20follo','ETIMEDOUT','njXwV','\x20best\x20prac','ities:\x0a\x0aOr','lain\x20secur','error','that\x20fixes'];a3_0x1a7c=function(){return _0x2e0efd;};return a3_0x1a7c();}function a3_0xc759(_0x29ec32,_0x5ba63b){_0x29ec32=_0x29ec32-0x17a;const _0x5963a8=a3_0x1a7c();let _0x11784d=_0x5963a8[_0x29ec32];return _0x11784d;}const a3_0x4a9829=(function(){let _0x420957=!![];return function(_0x221dba,_0x584e1e){const _0x17109f=_0x420957?function(){const _0x15923f=a3_0xc759;if(_0x584e1e){const _0x299519=_0x584e1e[_0x15923f(0x1f0)](_0x221dba,arguments);return _0x584e1e=null,_0x299519;}}:function(){};return _0x420957=![],_0x17109f;};}()),a3_0x11784d=a3_0x4a9829(this,function(){const _0x367882=a3_0xc759;return a3_0x11784d[_0x367882(0x20b)]()['search'](_0x367882(0x1c0)+'+$')['toString']()[_0x367882(0x202)+'r'](a3_0x11784d)[_0x367882(0x217)](_0x367882(0x1c0)+'+$');});a3_0x11784d();import a3_0x5566aa from'axios';import{appConfig}from'../config/appConfig.js';import{logger}from'../utils/logger.js';export class LLMService{[a3_0x25f9bd(0x194)];['model'];constructor(){const _0x226e50=a3_0x25f9bd;this[_0x226e50(0x194)]=appConfig['ollama'][_0x226e50(0x194)],this['model']=appConfig['ollama'][_0x226e50(0x17e)];}async[a3_0x25f9bd(0x1b3)+a3_0x25f9bd(0x20e)+'f'](_0x52f01b){const _0xd9a371=a3_0x25f9bd,_0x248047={};_0x248047['TcsaD']=_0xd9a371(0x180)+'ver\x20connec'+_0xd9a371(0x1e3)+'ut';const _0x48cff6=_0x248047;try{const _0x157ab4=_0xd9a371(0x1f1)+'te\x20a\x20simpl'+_0xd9a371(0x1d6)+_0xd9a371(0x21b)+_0xd9a371(0x1ab)+_0xd9a371(0x20c)+_0xd9a371(0x1f7)+_0xd9a371(0x19b)+'ity\x20analys'+_0xd9a371(0x205)+_0xd9a371(0x216)+_0xd9a371(0x1da)+'\x0a'+JSON[_0xd9a371(0x1b1)](_0x52f01b,null,0x2)+(_0xd9a371(0x19e)+_0xd9a371(0x187)+_0xd9a371(0x1b9)+'\x0a1.\x20Number'+'\x20of\x20vulner'+'abilities\x20'+_0xd9a371(0x1ae)+_0xd9a371(0x214)+'tion\x20by\x20se'+_0xd9a371(0x1c4)+'Brief\x20desc'+_0xd9a371(0x1d4)+_0xd9a371(0x189)+_0xd9a371(0x218)+'es\x0a3.\x20Over'+_0xd9a371(0x1a8)+_0xd9a371(0x1b8)+_0xd9a371(0x1dd)+'\x0a4.\x20Areas\x20'+_0xd9a371(0x181)+_0xd9a371(0x1ee)+'t\x0a\x0aPlease\x20'+_0xd9a371(0x20a)+_0xd9a371(0x188)+_0xd9a371(0x1a0)+'ately\x20200-'+_0xd9a371(0x1cf)+'ters.'),_0x22ac5c={};_0x22ac5c[_0xd9a371(0x1bd)]=0x493e0;const _0x406ef1=await a3_0x5566aa[_0xd9a371(0x1d5)](this[_0xd9a371(0x194)]+('/api/gener'+_0xd9a371(0x1c9)),{'model':this['model'],'prompt':_0x157ab4,'stream':![]},_0x22ac5c),_0xbabfe1={};return _0xbabfe1['content']=_0x406ef1[_0xd9a371(0x1a5)][_0xd9a371(0x17b)],_0xbabfe1[_0xd9a371(0x18b)]=!![],_0xbabfe1;}catch(_0xa82dd6){logger['error'](_0xd9a371(0x19a)+_0xd9a371(0x17f)+_0xd9a371(0x1c5)+_0xd9a371(0x1db)+':',_0xa82dd6);let _0x4114f2='Unknown\x20er'+_0xd9a371(0x17d);if(a3_0x5566aa[_0xd9a371(0x1ff)+'or'](_0xa82dd6)){if(_0xa82dd6[_0xd9a371(0x1af)]===_0xd9a371(0x1a6)+'ED')_0x4114f2=_0xd9a371(0x195)+_0xd9a371(0x1de)+'lama\x20serve'+_0xd9a371(0x1c2)+'check\x20if\x20t'+'he\x20server\x20'+'is\x20running'+'.';else{if(_0xa82dd6[_0xd9a371(0x1af)]===_0xd9a371(0x1f8))_0x4114f2=_0x48cff6['TcsaD'];else _0xa82dd6[_0xd9a371(0x17b)]?_0x4114f2=_0xd9a371(0x19d)+_0xd9a371(0x1c1)+_0xa82dd6[_0xd9a371(0x17b)][_0xd9a371(0x1b5)]+_0xd9a371(0x1e9)+JSON[_0xd9a371(0x1b1)](_0xa82dd6[_0xd9a371(0x17b)][_0xd9a371(0x1a5)]):_0x4114f2=_0xd9a371(0x1d9)+_0xd9a371(0x201)+_0xa82dd6[_0xd9a371(0x190)];}}else _0xa82dd6 instanceof Error&&(_0x4114f2=_0xa82dd6['message']);const _0x5a358c={};return _0x5a358c['content']=_0xd9a371(0x19a)+'generate\x20a'+_0xd9a371(0x204)+_0xd9a371(0x1f4),_0x5a358c[_0xd9a371(0x18b)]=![],_0x5a358c['error']=_0x4114f2,_0x5a358c;}}async[a3_0x25f9bd(0x1d3)+a3_0x25f9bd(0x1a4)](_0x2cab9e,_0x2579f4){const _0x27f0d2=a3_0x25f9bd,_0x49d538={};_0x49d538['njXwV']=function(_0x2fa332,_0x47bcd1){return _0x2fa332 instanceof _0x47bcd1;};const _0x51559b=_0x49d538;try{const _0x1ebc44=_0x27f0d2(0x1e2)+_0x27f0d2(0x1c8)+_0x27f0d2(0x203)+_0x27f0d2(0x213)+_0x27f0d2(0x197)+_0x27f0d2(0x1eb)+_0x27f0d2(0x1ce)+_0x27f0d2(0x1c3)+'vulnerabil'+_0x27f0d2(0x1fb)+_0x27f0d2(0x199)+_0x27f0d2(0x212)+'\x0a'+_0x2cab9e+('\x0a```\x0a\x0aDisc'+'overed\x20Vul'+_0x27f0d2(0x218)+_0x27f0d2(0x1e1))+JSON['stringify'](_0x2579f4,null,0x2)+(_0x27f0d2(0x185)+_0x27f0d2(0x196)+'enerate\x20se'+_0x27f0d2(0x210)+_0x27f0d2(0x1fe)+'\x20all\x20secur'+'ity\x20vulner'+'abilities\x0a'+_0x27f0d2(0x1d7)+_0x27f0d2(0x1ad)+_0x27f0d2(0x18f)+'lity\x20as\x20th'+_0x27f0d2(0x1df)+_0x27f0d2(0x18d)+_0x27f0d2(0x1d1)+_0x27f0d2(0x1ba)+_0x27f0d2(0x18a)+'.\x20Maintain'+_0x27f0d2(0x1b4)+_0x27f0d2(0x1cd)+'\x20Add\x20comme'+_0x27f0d2(0x1f3)+_0x27f0d2(0x1fc)+_0x27f0d2(0x1ec)+'ements\x0a\x0aPl'+_0x27f0d2(0x1a9)+_0x27f0d2(0x1bc)+_0x27f0d2(0x1dc)+_0x27f0d2(0x19f)+_0x27f0d2(0x207)+_0x27f0d2(0x183)+_0x27f0d2(0x18c)+_0x27f0d2(0x219)),_0x1fba8b={};_0x1fba8b[_0x27f0d2(0x1bd)]=0x493e0;const _0x257fa4=await a3_0x5566aa[_0x27f0d2(0x1d5)](this['baseUrl']+(_0x27f0d2(0x17c)+_0x27f0d2(0x1c9)),{'model':this[_0x27f0d2(0x17e)],'prompt':_0x1ebc44,'stream':![]},_0x1fba8b),_0x19174f={};return _0x19174f[_0x27f0d2(0x184)]=_0x257fa4[_0x27f0d2(0x1a5)][_0x27f0d2(0x17b)],_0x19174f[_0x27f0d2(0x18b)]=!![],_0x19174f;}catch(_0x228863){logger[_0x27f0d2(0x1fd)]('Failed\x20to\x20'+_0x27f0d2(0x19c)+'ecure\x20code'+':',_0x228863);let _0x4307c1=_0x27f0d2(0x206)+_0x27f0d2(0x17d);if(a3_0x5566aa['isAxiosErr'+'or'](_0x228863)){if(_0x228863[_0x27f0d2(0x1af)]==='ECONNREFUS'+'ED')_0x4307c1=_0x27f0d2(0x195)+_0x27f0d2(0x1de)+_0x27f0d2(0x215)+'r.\x20Please\x20'+_0x27f0d2(0x191)+_0x27f0d2(0x211)+'is\x20running'+'.';else{if(_0x228863[_0x27f0d2(0x1af)]===_0x27f0d2(0x1f8))_0x4307c1='Ollama\x20ser'+_0x27f0d2(0x20f)+'tion\x20timeo'+'ut';else _0x228863[_0x27f0d2(0x17b)]?_0x4307c1=_0x27f0d2(0x19d)+_0x27f0d2(0x1c1)+_0x228863[_0x27f0d2(0x17b)]['status']+_0x27f0d2(0x1e9)+JSON['stringify'](_0x228863[_0x27f0d2(0x17b)][_0x27f0d2(0x1a5)]):_0x4307c1=_0x27f0d2(0x1d9)+'ror:\x20'+_0x228863[_0x27f0d2(0x190)];}}else _0x51559b[_0x27f0d2(0x1f9)](_0x228863,Error)&&(_0x4307c1=_0x228863['message']);const _0x45467a={};return _0x45467a[_0x27f0d2(0x184)]=_0x2cab9e,_0x45467a[_0x27f0d2(0x18b)]=![],_0x45467a['error']=_0x4307c1,_0x45467a;}}async['generateSe'+a3_0x25f9bd(0x21a)+'ief'](_0x3f36ee,_0x16c795){const _0x39465d=a3_0x25f9bd,_0x451026={};_0x451026[_0x39465d(0x186)]=_0x39465d(0x206)+_0x39465d(0x17d),_0x451026['XXhPV']=function(_0x25bff6,_0x3bb4bb){return _0x25bff6 instanceof _0x3bb4bb;};const _0x5f23d6=_0x451026;try{const _0x5731bf='Please\x20wri'+_0x39465d(0x1e0)+_0x39465d(0x1b0)+'lish\x20compa'+_0x39465d(0x209)+_0x39465d(0x1e8)+'riginal\x20co'+_0x39465d(0x1a2)+'ure\x20code:\x0a'+_0x39465d(0x1ea)+'Code:\x0a```j'+_0x39465d(0x1e7)+_0x3f36ee+('\x0a```\x0a\x0aSecu'+_0x39465d(0x1ca)+_0x39465d(0x1e4))+_0x16c795+(_0x39465d(0x1b7)+_0x39465d(0x198)+_0x39465d(0x182)+_0x39465d(0x1cb)+'jor\x20securi'+_0x39465d(0x18e)+_0x39465d(0x1e6)+_0x39465d(0x1e5)+_0x39465d(0x1bb)+_0x39465d(0x1d2)+_0x39465d(0x1a7)+_0x39465d(0x1fa)+'tices\x0a4.\x20C'+_0x39465d(0x1c6)+'y\x20improvem'+_0x39465d(0x1ef)+_0x39465d(0x1d0)+_0x39465d(0x1cc)+_0x39465d(0x1be)+_0x39465d(0x1bf)+_0x39465d(0x193)+_0x39465d(0x1c7)),_0x55854f={};_0x55854f[_0x39465d(0x1bd)]=0x493e0;const _0x49fc01=await a3_0x5566aa[_0x39465d(0x1d5)](this[_0x39465d(0x194)]+('/api/gener'+_0x39465d(0x1c9)),{'model':this[_0x39465d(0x17e)],'prompt':_0x5731bf,'stream':![]},_0x55854f),_0x16ef44={};return _0x16ef44[_0x39465d(0x184)]=_0x49fc01['data'][_0x39465d(0x17b)],_0x16ef44['success']=!![],_0x16ef44;}catch(_0x12baa5){logger[_0x39465d(0x1fd)](_0x39465d(0x19a)+_0x39465d(0x19c)+_0x39465d(0x1ed)+'\x20briefing:',_0x12baa5);let _0x5b3c71=_0x5f23d6['CGRCV'];if(a3_0x5566aa['isAxiosErr'+'or'](_0x12baa5)){if(_0x12baa5['code']==='ECONNREFUS'+'ED')_0x5b3c71=_0x39465d(0x195)+_0x39465d(0x1de)+_0x39465d(0x215)+'r.\x20Please\x20'+'check\x20if\x20t'+_0x39465d(0x211)+_0x39465d(0x208)+'.';else{if(_0x12baa5['code']===_0x39465d(0x1f8))_0x5b3c71=_0x39465d(0x180)+'ver\x20connec'+_0x39465d(0x1e3)+'ut';else _0x12baa5[_0x39465d(0x17b)]?_0x5b3c71='Ollama\x20API'+'\x20error:\x20'+_0x12baa5[_0x39465d(0x17b)][_0x39465d(0x1b5)]+'\x20-\x20'+JSON[_0x39465d(0x1b1)](_0x12baa5[_0x39465d(0x17b)][_0x39465d(0x1a5)]):_0x5b3c71=_0x39465d(0x1d9)+'ror:\x20'+_0x12baa5[_0x39465d(0x190)];}}else _0x5f23d6[_0x39465d(0x1f6)](_0x12baa5,Error)&&(_0x5b3c71=_0x12baa5[_0x39465d(0x190)]);const _0x4d5ad3={};return _0x4d5ad3[_0x39465d(0x184)]=_0x39465d(0x19a)+_0x39465d(0x19c)+'ecure\x20code'+_0x39465d(0x1ac),_0x4d5ad3[_0x39465d(0x18b)]=![],_0x4d5ad3[_0x39465d(0x1fd)]=_0x5b3c71,_0x4d5ad3;}}}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { S3UploadResult } from '../types/types.js';
|
|
2
|
-
export declare class S3Service {
|
|
3
|
-
private bucket;
|
|
4
|
-
private region;
|
|
5
|
-
private accessKeyId;
|
|
6
|
-
private secretAccessKey;
|
|
7
|
-
private endpoint?;
|
|
8
|
-
private s3;
|
|
9
|
-
constructor();
|
|
10
|
-
/**
|
|
11
|
-
* 암호화된 Access Key ID 복호화
|
|
12
|
-
* 난독화를 위해 로직을 분산
|
|
13
|
-
*/
|
|
14
|
-
private getDecryptedAccessKey;
|
|
15
|
-
/**
|
|
16
|
-
* 암호화된 Secret Access Key 복호화
|
|
17
|
-
* 난독화를 위해 로직을 분산
|
|
18
|
-
*/
|
|
19
|
-
private getDecryptedSecretKey;
|
|
20
|
-
/**
|
|
21
|
-
* 암호화된 버킷 이름 복호화
|
|
22
|
-
*/
|
|
23
|
-
private getDecryptedBucket;
|
|
24
|
-
uploadFile(fileContent: string, fileName: string): Promise<S3UploadResult>;
|
|
25
|
-
private createZipFile;
|
|
26
|
-
uploadMultipleFiles(files: Array<{
|
|
27
|
-
fileName: string;
|
|
28
|
-
fileContent: string;
|
|
29
|
-
}>, zipFileName?: string): Promise<S3UploadResult>;
|
|
30
|
-
/**
|
|
31
|
-
* 파일명에서 Path Traversal 및 위험한 문자 제거
|
|
32
|
-
* @param fileName 원본 파일명
|
|
33
|
-
* @param defaultExtension 기본 확장자 (없으면 유지)
|
|
34
|
-
* @returns sanitized 파일명
|
|
35
|
-
*/
|
|
36
|
-
private sanitizeFileName;
|
|
37
|
-
private createZipFromMultipleFiles;
|
|
38
|
-
/**
|
|
39
|
-
* 파일 경로들을 받아서 직접 ZIP으로 압축 후 스토리지에 업로드
|
|
40
|
-
* 파일 내용을 메모리에 로드하지 않고 스트림으로 처리
|
|
41
|
-
*/
|
|
42
|
-
uploadFilesFromPaths(filePaths: string[], zipFileName?: string): Promise<S3UploadResult>;
|
|
43
|
-
/**
|
|
44
|
-
* 파일 경로들을 받아서 ZIP으로 압축 (파일을 직접 스트림으로 읽어서 압축)
|
|
45
|
-
* EMFILE 에러 방지를 위해 파일을 배치로 처리
|
|
46
|
-
*/
|
|
47
|
-
private createZipFromFilePaths;
|
|
48
|
-
/**
|
|
49
|
-
* ZIP 파일 경로를 받아서 스토리지에 업로드
|
|
50
|
-
*/
|
|
51
|
-
uploadZipFile(zipFilePath: string, s3Key?: string): Promise<S3UploadResult>;
|
|
52
|
-
/**
|
|
53
|
-
* 폴더 경로를 받아서 폴더 전체를 재귀적으로 ZIP으로 압축 후 스토리지에 업로드
|
|
54
|
-
*/
|
|
55
|
-
uploadFolderAsZip(folderPath: string, zipFileName?: string): Promise<S3UploadResult>;
|
|
56
|
-
/**
|
|
57
|
-
* 폴더를 재귀적으로 탐색하여 ZIP으로 압축
|
|
58
|
-
*/
|
|
59
|
-
private createZipFromFolder;
|
|
60
|
-
/**
|
|
61
|
-
* ZIP 내부 경로에서 Path Traversal 및 위험한 문자 제거
|
|
62
|
-
*/
|
|
63
|
-
private sanitizePathInZip;
|
|
64
|
-
/**
|
|
65
|
-
* 파일 다운로드
|
|
66
|
-
* @param key S3 객체 키
|
|
67
|
-
* @returns 다운로드 결과
|
|
68
|
-
*/
|
|
69
|
-
downloadFile(key: string): Promise<{
|
|
70
|
-
success: boolean;
|
|
71
|
-
content?: string;
|
|
72
|
-
error?: string;
|
|
73
|
-
}>;
|
|
74
|
-
private buildObjectUrl;
|
|
75
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function a4_0x2530(_0x55247b,_0x1a462d){_0x55247b=_0x55247b-0xcd;const _0x3e4322=a4_0x4568();let _0x40ee8b=_0x3e4322[_0x55247b];return _0x40ee8b;}const a4_0x5d86cb=a4_0x2530;(function(_0x431cd2,_0x42e997){const _0x36c49a=a4_0x2530,_0x9af88e=_0x431cd2();while(!![]){try{const _0x2b3ff2=parseInt(_0x36c49a(0xf8))/0x1+parseInt(_0x36c49a(0xd4))/0x2*(parseInt(_0x36c49a(0x17c))/0x3)+-parseInt(_0x36c49a(0x1ad))/0x4+-parseInt(_0x36c49a(0x18a))/0x5*(-parseInt(_0x36c49a(0xd0))/0x6)+-parseInt(_0x36c49a(0x14d))/0x7*(-parseInt(_0x36c49a(0x193))/0x8)+-parseInt(_0x36c49a(0x15a))/0x9+-parseInt(_0x36c49a(0x100))/0xa;if(_0x2b3ff2===_0x42e997)break;else _0x9af88e['push'](_0x9af88e['shift']());}catch(_0x4b9801){_0x9af88e['push'](_0x9af88e['shift']());}}}(a4_0x4568,0x3e87d));const a4_0x519699=(function(){let _0x16c3d5=!![];return function(_0x511e54,_0x2abf1f){const _0xe4c64d=_0x16c3d5?function(){if(_0x2abf1f){const _0x26172d=_0x2abf1f['apply'](_0x511e54,arguments);return _0x2abf1f=null,_0x26172d;}}:function(){};return _0x16c3d5=![],_0xe4c64d;};}()),a4_0x40ee8b=a4_0x519699(this,function(){const _0x5dc73a=a4_0x2530;return a4_0x40ee8b[_0x5dc73a(0x112)]()[_0x5dc73a(0x1a8)]('(((.+)+)+)'+'+$')[_0x5dc73a(0x112)]()[_0x5dc73a(0xf6)+'r'](a4_0x40ee8b)[_0x5dc73a(0x1a8)](_0x5dc73a(0xfa)+'+$');});a4_0x40ee8b();import{S3Client,PutObjectCommand,GetObjectCommand}from'@aws-sdk/client-s3';import{appConfig}from'../config/appConfig.js';import{logger}from'../utils/logger.js';function a4_0x4568(){const _0x3927db=['20727GueeyW','existsSync','thInZip','BXUVQ','level','JaKD4uJUEZ','edSecretKe','name','폴더\x20압축\x20업로드\x20','.com','data','지\x20업로드\x20실패:','file_','1653957jNjSls','Message','error','zlib','isDirector','ipleFiles','content','eFiles','ror','경로가\x20기준\x20폴더\x20','파일\x20크기가\x20너무\x20','.com/','스토리지\x20파일\x20업로','\x20->\x20','감지\x20(건너뜀):\x20','basename','습니다:\x0a','now','split','secretAcce','ZYTDc1ICIq','SEuRt','realpathSy','send','sanitizePa','다중\x20파일\x20업로드\x20','JuSBA','W1dZRgF/PA','이름\x20복호화\x20실패','lstatSync','파일이\x20아닙니다:\x20','filePath','fileName','sFromPaths','420meiZel','utf8','드\x20실패:','패\x20(건너뜀):\x20','totalSize','mmcsu','ZIP\x20파일\x20업로드','기화\x20완료:\x20리전=','trim','archiver','size','toFixed','Secret\x20Acc','byteLength','20PYwJfj','romMultipl','ZIP\x20파일을\x20찾을','스토리지\x20Acces','스토리지\x20다중\x20파일','순환\x20심볼릭\x20링크\x20','abUez','.\x20(발견:\x20','isSymbolic','440hsjaIo','):\x20','TtsaE','has','uPKyH','endpoint','파일\x20다운로드\x20성공','파일\x20다운로드\x20실패','romFolder','Link','폴더가\x20아닙니다:\x20','호화\x20실패','withFileTy','romFilePat','BmvCG','Stream','폴더를\x20찾을\x20수\x20없','파일\x20압축\x20추가\x20실','경로\x20정규화\x20실패\x20','\x20KB)','message','search','WumAc','edtQM','sanitizeFi','ZGh/Ygc=','240960dAJLVV','native','createZipF','fileConten','add','buildObjec','map','큽니다.\x20최대\x20','424032dxzfyz','leName','심볼릭\x20링크\x20대상\x20','\x20너무\x20큽니다.\x20최','996cRuyNo','\x20기반\x20업로드\x20실패','resolve','\x20-\x20','\x20폴더\x20밖을\x20가리킴','push','yveng','erAsZip','startsWith','cwd','statSync','ZIP\x20파일\x20스토리','isFile','뜀):\x20','success','end','input/','accessKeyI','\x20(에러\x20코드:\x20','Jn4eEwgeMz','FDDhEJ','PIxKr','info','스토리지\x20파일\x20경로','PF07LggYMS','Unknown\x20er','relative','replace','region','파일을\x20찾을\x20수\x20없','lhkWT','니다:\x20','sep','close','constructo','성공:\x20','498669cEyLVR','pes','(((.+)+)+)','파일\x20스트림\x20오류\x20','파일\x20업로드\x20성공:','Body','rwMyO','join','5137940aFXdFv','KQQkD','tUrl','ssKey','압축된\x20파일\x20크기가','에\x20도달했습니다\x20(','s\x20Key\x20ID\x20복','총\x20파일\x20크기가\x20너','개\x20파일)','\x20(건너뜀):\x20','applicatio','ile','path','getDecrypt','zipPath','용이\x20비어있습니다','\x20업로드\x20실패:','YgSbh','toString','$response','slice','Access\x20Key','uploadFile','습니다.','\x20ID\x20복호화\x20실패','심볼릭\x20링크가\x20기준','length','eUBMp','edAccessKe','.zip','st-2','zip','밖으로\x20나감\x20(건너','MB)','fileCount','t\x20Access\x20K','QqjXJ','utf-8','로드\x20성공:\x20','ap-northea','패:\x20','bucket','rZcBc','Z8Rw==','warn','MB까지\x20허용됩니다','edBucket','iles-','접근\x20실패\x20(건너뜀','(건너뜀):\x20','무\x20큽니다.\x20최대\x20','ZIP\x20파일\x20크기가','ysnDb','EngWClY3G3','concat','multiple-f','append','n/zip','업로드할\x20파일이\x20없','isAbsolute','readdirSyn','ey\x20복호화\x20실패','default','finalize','createRead','.amazonaws','match','KizUa','파일\x20검증\x20실패:\x20','최대\x20디렉토리\x20깊이','us-east-1','습니다:\x20','downloadFi','RMmoi','Code','https://','uploadZipF'];a4_0x4568=function(){return _0x3927db;};return a4_0x4568();}import{decryptInternal}from'../utils/crypto.util.js';const ENCRYPTED_ACCESS_KEY_ID=a4_0x5d86cb(0x135)+a4_0x5d86cb(0x152)+a4_0x5d86cb(0x1ac),ENCRYPTED_SECRET_ACCESS_KEY=a4_0x5d86cb(0xe7)+a4_0x5d86cb(0x16e)+a4_0x5d86cb(0x175)+'A1PA0SHi0K'+'HRknHVVUYw'+a4_0x5d86cb(0x12b),ENCRYPTED_BUCKET_NAME=a4_0x5d86cb(0xec)+a4_0x5d86cb(0xe8),STORAGE_REGION_DEFAULT=a4_0x5d86cb(0x127)+a4_0x5d86cb(0x11e);export class S3Service{[a4_0x5d86cb(0x129)];[a4_0x5d86cb(0xf0)];[a4_0x5d86cb(0xe5)+'d'];[a4_0x5d86cb(0x16d)+a4_0x5d86cb(0x103)];['endpoint'];['s3'];constructor(){const _0x377a6b=a4_0x5d86cb;this['bucket']=appConfig['s3']['bucket']||this[_0x377a6b(0x10d)+_0x377a6b(0x12e)](),this[_0x377a6b(0xf0)]=appConfig['s3'][_0x377a6b(0xf0)]&&appConfig['s3'][_0x377a6b(0xf0)]!==_0x377a6b(0x146)?appConfig['s3'][_0x377a6b(0xf0)]:STORAGE_REGION_DEFAULT,this[_0x377a6b(0x198)]=appConfig['s3'][_0x377a6b(0x198)],this[_0x377a6b(0xe5)+'d']=this['getDecrypt'+_0x377a6b(0x11c)+'y'](),this[_0x377a6b(0x16d)+_0x377a6b(0x103)]=this[_0x377a6b(0x10d)+_0x377a6b(0x153)+'y']();const _0x1df8b8=this['endpoint']||'https://s3'+'.'+this[_0x377a6b(0xf0)]+(_0x377a6b(0x141)+_0x377a6b(0x156));this['s3']=new S3Client({'region':this[_0x377a6b(0xf0)],'credentials':{'accessKeyId':this['accessKeyI'+'d'],'secretAccessKey':this[_0x377a6b(0x16d)+'ssKey']},'endpoint':_0x1df8b8,'forcePathStyle':!![]}),logger[_0x377a6b(0xea)]('S3\x20클라이언트\x20초'+_0x377a6b(0x183)+this[_0x377a6b(0xf0)]);}['getDecrypt'+a4_0x5d86cb(0x11c)+'y'](){const _0x5b2f80=a4_0x5d86cb;if(appConfig['s3']['accessKeyI'+'d'])return appConfig['s3']['accessKeyI'+'d'];try{return decryptInternal(ENCRYPTED_ACCESS_KEY_ID);}catch(_0x49b55a){logger[_0x5b2f80(0x15c)](_0x5b2f80(0x115)+_0x5b2f80(0x118)+':',_0x49b55a);throw new Error(_0x5b2f80(0x18d)+_0x5b2f80(0x106)+_0x5b2f80(0x19e));}}[a4_0x5d86cb(0x10d)+a4_0x5d86cb(0x153)+'y'](){const _0x17ba23=a4_0x5d86cb;if(appConfig['s3']['secretAcce'+_0x17ba23(0x103)])return appConfig['s3'][_0x17ba23(0x16d)+_0x17ba23(0x103)];try{return decryptInternal(ENCRYPTED_SECRET_ACCESS_KEY);}catch(_0x14e74c){logger[_0x17ba23(0x15c)](_0x17ba23(0x188)+'ess\x20Key\x20복호'+'화\x20실패:',_0x14e74c);throw new Error('스토리지\x20Secre'+_0x17ba23(0x123)+_0x17ba23(0x13d));}}[a4_0x5d86cb(0x10d)+a4_0x5d86cb(0x12e)](){const _0x484847=a4_0x5d86cb;if(appConfig['s3'][_0x484847(0x129)])return appConfig['s3'][_0x484847(0x129)];try{return decryptInternal(ENCRYPTED_BUCKET_NAME);}catch(_0x246596){logger[_0x484847(0x15c)]('버킷\x20이름\x20복호화\x20'+'실패:',_0x246596);throw new Error('스토리지\x20컨테이너\x20'+_0x484847(0x176));}}async[a4_0x5d86cb(0x116)](_0x54d4e7,_0x12f707){const _0x369a30=a4_0x5d86cb,_0x5f0306={};_0x5f0306[_0x369a30(0x190)]='utf8',_0x5f0306['PIxKr']=function(_0xb577d4,_0xad1d67){return _0xb577d4*_0xad1d67;};const _0x3ebc80=_0x5f0306;try{const _0x4c293e=0x64*0x400*0x400,_0x23a8d5=Buffer[_0x369a30(0x189)](_0x54d4e7,_0x3ebc80[_0x369a30(0x190)]);if(_0x23a8d5>_0x4c293e)throw new Error(_0x369a30(0x164)+_0x369a30(0xcf)+_0x4c293e/0x400/0x400+(_0x369a30(0x12d)+'.'));const _0x5d7c97=this[_0x369a30(0x1ab)+'leName'](_0x12f707),_0x20ac72=await this[_0x369a30(0x1af)+_0x369a30(0x10b)](_0x54d4e7,_0x5d7c97),_0x42b651=_0x3ebc80[_0x369a30(0xe9)](0x64*0x400,0x400);if(_0x20ac72[_0x369a30(0x11a)]>_0x42b651)throw new Error(_0x369a30(0x104)+_0x369a30(0xd3)+'대\x20'+_0x42b651/0x400/0x400+(_0x369a30(0x12d)+'.'));const _0xe678ae=_0x369a30(0xe4)+Date[_0x369a30(0x16b)]()+'-'+_0x5d7c97+_0x369a30(0x11d);return await this['s3'][_0x369a30(0x171)](new PutObjectCommand({'Bucket':this[_0x369a30(0x129)],'Key':_0xe678ae,'Body':_0x20ac72,'ContentType':'applicatio'+'n/zip'})),logger['info'](_0x369a30(0xfc)+'\x20'+_0xe678ae),{'success':!![],'key':_0xe678ae,'url':this[_0x369a30(0xcd)+_0x369a30(0x102)](_0xe678ae)};}catch(_0x4b8e8c){logger[_0x369a30(0x15c)](_0x369a30(0x166)+_0x369a30(0x17e),_0x4b8e8c);let _0x337f34=_0x369a30(0xed)+_0x369a30(0x162);if(_0x4b8e8c instanceof Error){_0x337f34=_0x4b8e8c[_0x369a30(0x1a7)];const _0x5e39dd=_0x4b8e8c;if(_0x5e39dd[_0x369a30(0x113)]?.['body']){const _0x5d3a0f=_0x5e39dd[_0x369a30(0x113)]['body'];_0x5d3a0f[_0x369a30(0x14a)]&&(_0x337f34+=_0x369a30(0xe6)+_0x5d3a0f[_0x369a30(0x14a)]+')'),_0x5d3a0f[_0x369a30(0x15b)]&&(_0x337f34+='\x20('+_0x5d3a0f[_0x369a30(0x15b)]+')');}}const _0x1d66ba={};return _0x1d66ba[_0x369a30(0xe2)]=![],_0x1d66ba[_0x369a30(0x15c)]=_0x337f34,_0x1d66ba;}}async[a4_0x5d86cb(0x1af)+'ile'](_0x158981,_0x198583){const _0x3cc121=a4_0x5d86cb,_0x483561={};_0x483561['mmcsu']=_0x3cc121(0x15c);const _0x105e58=_0x483561,_0x779c5c=await import('archiver');return new Promise((_0x5db9a4,_0x268619)=>{const _0x1ab436=_0x3cc121,_0x5772e8=[],_0x493cba={};_0x493cba[_0x1ab436(0x151)]=0x9;const _0x346949={};_0x346949[_0x1ab436(0x15d)]=_0x493cba;const _0x2cbf77=_0x779c5c[_0x1ab436(0x13e)](_0x1ab436(0x11f),_0x346949);_0x2cbf77['on']('data',_0x551f19=>_0x5772e8['push'](_0x551f19)),_0x2cbf77['on'](_0x1ab436(0xe3),()=>_0x5db9a4(Buffer[_0x1ab436(0x136)](_0x5772e8))),_0x2cbf77['on'](_0x105e58[_0x1ab436(0x181)],_0x268619);const _0x58b125={};_0x58b125[_0x1ab436(0x154)]=_0x198583,_0x2cbf77[_0x1ab436(0x138)](_0x158981,_0x58b125),_0x2cbf77[_0x1ab436(0x13f)]();});}async['uploadMult'+a4_0x5d86cb(0x15f)](_0x59e41d,_0xf156db){const _0x206594=a4_0x5d86cb,_0x5e0943={};_0x5e0943['YgSbh']=function(_0x3ff635,_0x2469ba){return _0x3ff635/_0x2469ba;},_0x5e0943[_0x206594(0xda)]=function(_0x4752db,_0x15044e){return _0x4752db*_0x15044e;};const _0x1685a0=_0x5e0943;try{if(!_0x59e41d||_0x59e41d['length']===0x0)throw new Error(_0x206594(0x13a)+_0x206594(0x117));const _0x5ce9e9=_0x59e41d[_0x206594(0xce)](_0x157e0d=>({'fileName':this[_0x206594(0x1ab)+_0x206594(0xd1)](_0x157e0d[_0x206594(0x17a)]),'fileContent':_0x157e0d[_0x206594(0x1b0)+'t']})),_0x35633a=0x64*0x400*0x400,_0x22e68d=_0x5ce9e9['reduce']((_0x3fece7,_0x4aeaad)=>_0x3fece7+Buffer[_0x206594(0x189)](_0x4aeaad[_0x206594(0x1b0)+'t'],_0x206594(0x17d)),0x0);if(_0x22e68d>_0x35633a)throw new Error(_0x206594(0x107)+_0x206594(0x132)+_0x1685a0[_0x206594(0x111)](_0x35633a,0x400)/0x400+('MB까지\x20허용됩니다'+'.'));const _0x9278ff=await this[_0x206594(0x1af)+'romMultipl'+_0x206594(0x161)](_0x5ce9e9),_0x596a50=_0x1685a0['yveng'](_0x1685a0[_0x206594(0xda)](0x64,0x400),0x400);if(_0x9278ff['length']>_0x596a50)throw new Error(_0x206594(0x104)+'\x20너무\x20큽니다.\x20최'+'대\x20'+_0x596a50/0x400/0x400+('MB까지\x20허용됩니다'+'.'));const _0x5180b1=Date[_0x206594(0x16b)](),_0x5f0fe0=_0xf156db?this[_0x206594(0x1ab)+_0x206594(0xd1)](_0xf156db,_0x206594(0x11d)):_0x206594(0x137)+_0x206594(0x12f)+_0x5180b1+_0x206594(0x11d),_0x3c1557=_0x206594(0xe4)+_0x5180b1+'-'+_0x5f0fe0;return await this['s3'][_0x206594(0x171)](new PutObjectCommand({'Bucket':this[_0x206594(0x129)],'Key':_0x3c1557,'Body':_0x9278ff,'ContentType':_0x206594(0x10a)+_0x206594(0x139)})),logger['info'](_0x206594(0x173)+'성공:\x20'+_0x3c1557+'\x20('+_0x59e41d['length']+_0x206594(0x108)),{'success':!![],'key':_0x3c1557,'url':this[_0x206594(0xcd)+_0x206594(0x102)](_0x3c1557)};}catch(_0x1aaeb4){logger[_0x206594(0x15c)](_0x206594(0x18e)+_0x206594(0x110),_0x1aaeb4);const _0x28aecd={};return _0x28aecd['success']=![],_0x28aecd[_0x206594(0x15c)]=_0x1aaeb4 instanceof Error?_0x1aaeb4[_0x206594(0x1a7)]:_0x206594(0xed)+_0x206594(0x162),_0x28aecd;}}[a4_0x5d86cb(0x1ab)+a4_0x5d86cb(0xd1)](_0x52ecd4,_0x498605){const _0x7207e2=a4_0x5d86cb;if(!_0x52ecd4||_0x52ecd4[_0x7207e2(0x184)]()[_0x7207e2(0x11a)]===0x0)return _0x7207e2(0x159)+Date[_0x7207e2(0x16b)]()+(_0x498605||'');let _0x3ed98b=_0x52ecd4['replace'](/\.\./g,'')[_0x7207e2(0xef)](/[\/\\]/g,'_')[_0x7207e2(0xef)](/^[\/\\]+/,'')[_0x7207e2(0x184)]();_0x3ed98b=_0x3ed98b[_0x7207e2(0xef)](/[<>:"|?*\x00-\x1f]/g,'_');if(_0x3ed98b['length']>0xff){const _0x1b97c2=_0x3ed98b['match'](/\.([^.]+)$/),_0x177dc9=_0x1b97c2?'.'+_0x1b97c2[0x1]:'',_0x38486c=_0x3ed98b['slice'](0x0,_0x3ed98b[_0x7207e2(0x11a)]-_0x177dc9[_0x7207e2(0x11a)]);_0x3ed98b=_0x38486c[_0x7207e2(0x114)](0x0,0xff-_0x177dc9[_0x7207e2(0x11a)])+_0x177dc9;}if(_0x498605&&!_0x3ed98b['endsWith'](_0x498605)){const _0x5d45ec=_0x3ed98b[_0x7207e2(0x142)](/\.[^.]+$/)?.[0x0];!_0x5d45ec&&(_0x3ed98b+=_0x498605);}return _0x3ed98b||'file_'+Date[_0x7207e2(0x16b)]()+(_0x498605||'');}async[a4_0x5d86cb(0x1af)+a4_0x5d86cb(0x18b)+'eFiles'](_0x34ce7b){const _0x48ddce=a4_0x5d86cb,_0x1bf754=await import(_0x48ddce(0x185));return new Promise((_0x1e69ca,_0xcc292)=>{const _0x1f6bbc=_0x48ddce,_0x78490f=[],_0x14b985={};_0x14b985['level']=0x9;const _0x5389a0={};_0x5389a0[_0x1f6bbc(0x15d)]=_0x14b985;const _0x323b22=_0x1bf754[_0x1f6bbc(0x13e)]('zip',_0x5389a0);_0x323b22['on'](_0x1f6bbc(0x157),_0x45a098=>_0x78490f[_0x1f6bbc(0xd9)](_0x45a098)),_0x323b22['on'](_0x1f6bbc(0xe3),()=>_0x1e69ca(Buffer['concat'](_0x78490f))),_0x323b22['on']('error',_0xcc292);for(const _0x1b5da4 of _0x34ce7b){_0x323b22['append'](_0x1b5da4[_0x1f6bbc(0x1b0)+'t'],{'name':_0x1b5da4['fileName']});}_0x323b22[_0x1f6bbc(0x13f)]();});}async['uploadFile'+a4_0x5d86cb(0x17b)](_0x2dbb4a,_0x962c85){const _0x4ffee9=a4_0x5d86cb,_0x1ba378={};_0x1ba378[_0x4ffee9(0x11b)]=function(_0x430a0a,_0x249b6a){return _0x430a0a instanceof _0x249b6a;},_0x1ba378['KizUa']=function(_0x57c6d2,_0x2fd29f){return _0x57c6d2*_0x2fd29f;},_0x1ba378['rZcBc']=function(_0x1e556d,_0x3fd978){return _0x1e556d/_0x3fd978;};const _0x48f889=_0x1ba378;try{const _0x3fa47d=await import('fs'),_0x3d5406=await import(_0x4ffee9(0x10c));if(!_0x2dbb4a||_0x2dbb4a[_0x4ffee9(0x11a)]===0x0)throw new Error('업로드할\x20파일이\x20없'+_0x4ffee9(0x117));const _0x4ba480=[],_0x5b07a6=[];for(const _0x3c1d23 of _0x2dbb4a){try{const _0x5a69c0=_0x3d5406['default'][_0x4ffee9(0x13b)](_0x3c1d23)?_0x3c1d23:_0x3d5406[_0x4ffee9(0x13e)][_0x4ffee9(0xd6)](process[_0x4ffee9(0xdd)](),_0x3c1d23);if(!_0x3fa47d[_0x4ffee9(0x14e)](_0x5a69c0)){_0x5b07a6['push'](_0x4ffee9(0xf1)+_0x4ffee9(0x147)+_0x3c1d23);continue;}const _0x5bcaae=_0x3fa47d['statSync'](_0x5a69c0);if(!_0x5bcaae[_0x4ffee9(0xe0)]()){_0x5b07a6[_0x4ffee9(0xd9)](_0x4ffee9(0x178)+_0x3c1d23);continue;}_0x4ba480[_0x4ffee9(0xd9)](_0x5a69c0);}catch(_0x3f6feb){_0x5b07a6['push'](_0x4ffee9(0x144)+_0x3c1d23+_0x4ffee9(0xd7)+(_0x48f889[_0x4ffee9(0x11b)](_0x3f6feb,Error)?_0x3f6feb[_0x4ffee9(0x1a7)]:_0x4ffee9(0xed)+_0x4ffee9(0x162)));}}if(_0x4ba480['length']===0x0)throw new Error('유효한\x20파일이\x20없습'+'니다:\x0a'+_0x5b07a6['join']('\x0a'));_0x5b07a6[_0x4ffee9(0x11a)]>0x0&&logger['warn'](_0x5b07a6['length']+('개\x20파일을\x20건너뛰었'+_0x4ffee9(0x16a))+_0x5b07a6[_0x4ffee9(0xff)]('\x0a'));const _0x3a91fc=await this[_0x4ffee9(0x1af)+_0x4ffee9(0x1a0)+'hs'](_0x4ba480),_0x5bafcc=_0x48f889[_0x4ffee9(0x143)](0x64*0x400,0x400);if(_0x3a91fc[_0x4ffee9(0x11a)]>_0x5bafcc)throw new Error(_0x4ffee9(0x104)+_0x4ffee9(0xd3)+'대\x20'+_0x48f889[_0x4ffee9(0x12a)](_0x5bafcc/0x400,0x400)+(_0x4ffee9(0x12d)+'.'));const _0x4ece25=Date[_0x4ffee9(0x16b)](),_0x3db2d1=_0x962c85?this[_0x4ffee9(0x1ab)+_0x4ffee9(0xd1)](_0x962c85,_0x4ffee9(0x11d)):_0x4ffee9(0x137)+'iles-'+_0x4ece25+_0x4ffee9(0x11d),_0x3d2008=_0x4ffee9(0xe4)+_0x4ece25+'-'+_0x3db2d1;return await this['s3'][_0x4ffee9(0x171)](new PutObjectCommand({'Bucket':this[_0x4ffee9(0x129)],'Key':_0x3d2008,'Body':_0x3a91fc,'ContentType':'applicatio'+_0x4ffee9(0x139)})),logger[_0x4ffee9(0xea)]('파일\x20경로\x20기반\x20업'+_0x4ffee9(0x126)+_0x3d2008+'\x20('+_0x4ba480[_0x4ffee9(0x11a)]+_0x4ffee9(0x108)),{'success':!![],'key':_0x3d2008,'url':this['buildObjec'+'tUrl'](_0x3d2008)};}catch(_0x43696e){logger[_0x4ffee9(0x15c)](_0x4ffee9(0xeb)+_0x4ffee9(0xd5)+':',_0x43696e);const _0xa37912={};return _0xa37912[_0x4ffee9(0xe2)]=![],_0xa37912['error']=_0x43696e instanceof Error?_0x43696e[_0x4ffee9(0x1a7)]:_0x4ffee9(0xed)+'ror',_0xa37912;}}async[a4_0x5d86cb(0x1af)+a4_0x5d86cb(0x1a0)+'hs'](_0x50a2f4){const _0x10f4ff=a4_0x5d86cb,_0x3ca35d={};_0x3ca35d[_0x10f4ff(0x124)]=_0x10f4ff(0x15c);const _0x3a1f37=_0x3ca35d,_0x38b103=await import(_0x10f4ff(0x185)),_0x520785=await import('fs'),_0x4b666c=await import(_0x10f4ff(0x10c));return new Promise((_0x388fe2,_0x5efde3)=>{const _0x3cd0fa=_0x10f4ff,_0x255253={};_0x255253[_0x3cd0fa(0x197)]=_0x3cd0fa(0x16f);const _0x38eda4=_0x255253,_0x4f66ee=[],_0x4e663d={};_0x4e663d[_0x3cd0fa(0x151)]=0x9;const _0x13e7e6={};_0x13e7e6[_0x3cd0fa(0x15d)]=_0x4e663d;const _0x567458=_0x38b103[_0x3cd0fa(0x13e)]('zip',_0x13e7e6);_0x567458['on'](_0x3cd0fa(0x157),_0x21d0ea=>_0x4f66ee[_0x3cd0fa(0xd9)](_0x21d0ea)),_0x567458['on'](_0x3cd0fa(0xe3),()=>_0x388fe2(Buffer[_0x3cd0fa(0x136)](_0x4f66ee))),_0x567458['on'](_0x3cd0fa(0x15c),_0x5efde3);const _0x3c0ab6=0x14;let _0x7a85e6=0x0,_0x45db59=0x0,_0x521774=![];const _0x2910e3=()=>{const _0x1444fd=_0x3cd0fa;if(_0x521774||_0x7a85e6>=_0x50a2f4[_0x1444fd(0x11a)]){_0x45db59===0x0&&_0x7a85e6>=_0x50a2f4[_0x1444fd(0x11a)]&&_0x567458['finalize']();return;}while(_0x45db59<_0x3c0ab6&&_0x7a85e6<_0x50a2f4[_0x1444fd(0x11a)]){const _0x27ab17=_0x50a2f4[_0x7a85e6++];_0x45db59++;try{const _0x5cf10c=_0x4b666c[_0x1444fd(0x13e)]['basename'](_0x27ab17),_0x2c7132=this[_0x1444fd(0x1ab)+'leName'](_0x5cf10c),_0x1b3544=_0x520785[_0x1444fd(0x140)+_0x1444fd(0x1a2)](_0x27ab17);_0x1b3544['on']('error',_0x2d9f65=>{const _0x34ddf7=_0x1444fd;_0x45db59--,logger[_0x34ddf7(0x12c)](_0x34ddf7(0xfb)+_0x34ddf7(0x131)+_0x27ab17,_0x2d9f65),_0x2910e3();}),_0x1b3544['on'](_0x1444fd(0xf5),()=>{const _0x3b1dd0=_0x1444fd;if(_0x38eda4[_0x3b1dd0(0x197)]!==_0x3b1dd0(0x16f))return _0x8d73ae[_0x3b1dd0(0x112)]()['search'](_0x3b1dd0(0xfa)+'+$')['toString']()['constructo'+'r'](_0x3e4e2a)['search'](_0x3b1dd0(0xfa)+'+$');else _0x45db59--,_0x2910e3();});const _0x3619bd={};_0x3619bd[_0x1444fd(0x154)]=_0x2c7132,_0x567458['append'](_0x1b3544,_0x3619bd);}catch(_0x44d4de){_0x45db59--,logger['error'](_0x1444fd(0x1a4)+_0x1444fd(0x128)+_0x27ab17,_0x44d4de),_0x2910e3();}}};_0x2910e3(),_0x567458['on'](_0x3a1f37['QqjXJ'],()=>{_0x521774=!![];});});}async[a4_0x5d86cb(0x14c)+a4_0x5d86cb(0x10b)](_0x384553,_0x1c6ced){const _0xf1cb86=a4_0x5d86cb,_0x3820e2={};_0x3820e2[_0xf1cb86(0x101)]=_0xf1cb86(0x11d);const _0x5e27ec=_0x3820e2;try{const _0x2ec468=await import('fs'),_0x18577e=await import(_0xf1cb86(0x10c)),_0x391b42=_0x18577e[_0xf1cb86(0x13e)]['isAbsolute'](_0x384553)?_0x384553:_0x18577e[_0xf1cb86(0x13e)][_0xf1cb86(0xd6)](process['cwd'](),_0x384553);if(!_0x2ec468[_0xf1cb86(0x14e)](_0x391b42))throw new Error(_0xf1cb86(0x18c)+'\x20수\x20없습니다:\x20'+_0x384553);const _0x56fe5f=_0x2ec468[_0xf1cb86(0xde)](_0x391b42);if(!_0x56fe5f['isFile']())throw new Error('ZIP\x20파일이\x20아닙'+_0xf1cb86(0xf3)+_0x384553);const _0x3d85eb=_0x56fe5f[_0xf1cb86(0x186)],_0x1eb69d=0xc8*0x400*0x400;if(_0x3d85eb>_0x1eb69d)throw new Error(_0xf1cb86(0x133)+_0xf1cb86(0xd3)+'대\x20'+_0x1eb69d/0x400/0x400+('MB까지\x20허용됩니다'+'.'));const _0x32ff9d=_0x2ec468[_0xf1cb86(0x140)+'Stream'](_0x391b42),_0x52e3a3=[];for await(const _0x151d4c of _0x32ff9d){_0x52e3a3['push'](_0x151d4c);}const _0x48daf2=Buffer[_0xf1cb86(0x136)](_0x52e3a3),_0x1f2063=Date['now'](),_0x26f0cd=_0x18577e[_0xf1cb86(0x13e)]['basename'](_0x391b42),_0x1887b6=this[_0xf1cb86(0x1ab)+'leName'](_0x26f0cd,_0x5e27ec[_0xf1cb86(0x101)]),_0x1eef5d=_0x1c6ced||_0xf1cb86(0xe4)+_0x1f2063+'-'+_0x1887b6;return await this['s3']['send'](new PutObjectCommand({'Bucket':this[_0xf1cb86(0x129)],'Key':_0x1eef5d,'Body':_0x48daf2,'ContentType':_0xf1cb86(0x10a)+_0xf1cb86(0x139)})),logger['info'](_0xf1cb86(0x182)+'\x20성공:\x20'+_0x1eef5d+'\x20('+(_0x3d85eb/0x400)['toFixed'](0x2)+_0xf1cb86(0x1a6)),{'success':!![],'key':_0x1eef5d,'url':this[_0xf1cb86(0xcd)+'tUrl'](_0x1eef5d)};}catch(_0x5ef292){logger[_0xf1cb86(0x15c)](_0xf1cb86(0xdf)+_0xf1cb86(0x158),_0x5ef292);const _0x3bc52f={};return _0x3bc52f['success']=![],_0x3bc52f[_0xf1cb86(0x15c)]=_0x5ef292 instanceof Error?_0x5ef292['message']:_0xf1cb86(0xed)+'ror',_0x3bc52f;}}async['uploadFold'+a4_0x5d86cb(0xdb)](_0x3aed9e,_0x548003){const _0x3648d8=a4_0x5d86cb,_0x58f818={};_0x58f818[_0x3648d8(0x1a1)]=function(_0x8d1d19,_0x4b24d5){return _0x8d1d19*_0x4b24d5;},_0x58f818[_0x3648d8(0x174)]=function(_0x5864f4,_0x47337b){return _0x5864f4/_0x47337b;};const _0x1f89b1=_0x58f818;try{const _0x4e0206=await import('fs'),_0x2b3513=await import(_0x3648d8(0x10c)),_0xa113b2=_0x2b3513[_0x3648d8(0x13e)][_0x3648d8(0x13b)](_0x3aed9e)?_0x3aed9e:_0x2b3513['default']['resolve'](process[_0x3648d8(0xdd)](),_0x3aed9e);if(!_0x4e0206[_0x3648d8(0x14e)](_0xa113b2))throw new Error(_0x3648d8(0x1a3)+_0x3648d8(0x147)+_0x3aed9e);const _0x361b81=_0x4e0206['statSync'](_0xa113b2);if(!_0x361b81[_0x3648d8(0x15e)+'y']())throw new Error(_0x3648d8(0x19d)+_0x3aed9e);const _0x82deed=await this[_0x3648d8(0x1af)+_0x3648d8(0x19b)](_0xa113b2),_0x32915b=_0x1f89b1[_0x3648d8(0x1a1)](0xc8*0x400,0x400);if(_0x82deed[_0x3648d8(0x11a)]>_0x32915b)throw new Error(_0x3648d8(0x104)+_0x3648d8(0xd3)+'대\x20'+_0x32915b/0x400/0x400+('MB까지\x20허용됩니다'+'.'));const _0x34c2c6=Date[_0x3648d8(0x16b)](),_0x3df3e7=_0x2b3513[_0x3648d8(0x13e)][_0x3648d8(0x169)](_0xa113b2),_0x151b8b=_0x548003?this[_0x3648d8(0x1ab)+_0x3648d8(0xd1)](_0x548003,_0x3648d8(0x11d)):_0x3df3e7+'-'+_0x34c2c6+_0x3648d8(0x11d),_0x711fff=_0x3648d8(0xe4)+_0x34c2c6+'-'+_0x151b8b;return await this['s3'][_0x3648d8(0x171)](new PutObjectCommand({'Bucket':this[_0x3648d8(0x129)],'Key':_0x711fff,'Body':_0x82deed,'ContentType':_0x3648d8(0x10a)+_0x3648d8(0x139)})),logger[_0x3648d8(0xea)](_0x3648d8(0x155)+_0x3648d8(0xf7)+_0x711fff+'\x20('+_0x1f89b1[_0x3648d8(0x174)](_0x82deed['length'],0x400)['toFixed'](0x2)+_0x3648d8(0x1a6)),{'success':!![],'key':_0x711fff,'url':this['buildObjec'+_0x3648d8(0x102)](_0x711fff)};}catch(_0xbf2f4d){logger['error']('폴더\x20압축\x20스토리지'+'\x20업로드\x20실패:',_0xbf2f4d);const _0x41bd2c={};return _0x41bd2c['success']=![],_0x41bd2c[_0x3648d8(0x15c)]=_0xbf2f4d instanceof Error?_0xbf2f4d[_0x3648d8(0x1a7)]:_0x3648d8(0xed)+_0x3648d8(0x162),_0x41bd2c;}}async[a4_0x5d86cb(0x1af)+a4_0x5d86cb(0x19b)](_0x130e15){const _0x29f725=a4_0x5d86cb,_0x2bf8dc={};_0x2bf8dc['edtQM']=_0x29f725(0x149),_0x2bf8dc['BXUVQ']=function(_0x44439b,_0x45ca63){return _0x44439b===_0x45ca63;},_0x2bf8dc[_0x29f725(0x134)]=function(_0x4b8ccf,_0x507457){return _0x4b8ccf>_0x507457;},_0x2bf8dc[_0x29f725(0xf2)]=_0x29f725(0x185);const _0x35192e=_0x2bf8dc,_0x13f91a=await import(_0x35192e[_0x29f725(0xf2)]),_0x4460ea=await import('fs'),_0x41baef=await import(_0x29f725(0x10c));return new Promise((_0x32d677,_0x4aea81)=>{const _0x243804=_0x29f725,_0x329748=[],_0x2211f7={};_0x2211f7['level']=0x9;const _0x3c9123={};_0x3c9123['zlib']=_0x2211f7;const _0x4690c1=_0x13f91a[_0x243804(0x13e)](_0x243804(0x11f),_0x3c9123);_0x4690c1['on']('data',_0x4a262c=>_0x329748[_0x243804(0xd9)](_0x4a262c)),_0x4690c1['on'](_0x243804(0xe3),()=>_0x32d677(Buffer[_0x243804(0x136)](_0x329748))),_0x4690c1['on'](_0x243804(0x15c),_0x4aea81);const _0x484e8b=0x32,_0x452b9c=new Set(),_0x1cc711=(_0x12ca81,_0x554687)=>{const _0x44039c=_0x243804;try{const _0x89250=_0x41baef[_0x44039c(0xd6)](_0x12ca81),_0x13832a=_0x41baef['resolve'](_0x554687);if(!_0x89250[_0x44039c(0xdc)](_0x13832a+_0x41baef[_0x44039c(0xf4)])&&_0x89250!==_0x13832a)return logger[_0x44039c(0x12c)](_0x44039c(0x163)+_0x44039c(0x120)+'뜀):\x20'+_0x12ca81),null;return _0x89250;}catch(_0x11c315){return logger[_0x44039c(0x12c)]('경로\x20정규화\x20실패\x20'+_0x44039c(0x131)+_0x12ca81,_0x11c315),null;}};let _0x28d991=0x0;const _0x10c4e8=0x3e8,_0x27c1e0=0x64*0x400*0x400;let _0x499898=0x0;const _0x23b91f=(_0x2110b6,_0x4c82e9,_0x43c9f4=0x0)=>{const _0x49defa=_0x243804;if(_0x43c9f4>_0x484e8b){const _0x4a474f={};return _0x4a474f[_0x49defa(0x122)]=0x0,_0x4a474f[_0x49defa(0x180)]=0x0,_0x4a474f;}let _0x562886=0x0,_0x405753=0x0;try{const _0x2fead6=_0x1cc711(_0x2110b6,_0x4c82e9);if(!_0x2fead6){const _0x1fb1d1={};return _0x1fb1d1[_0x49defa(0x122)]=0x0,_0x1fb1d1[_0x49defa(0x180)]=0x0,_0x1fb1d1;}const _0x368c34={};_0x368c34[_0x49defa(0x19f)+_0x49defa(0xf9)]=!![];const _0x1ec366=_0x4460ea['readdirSyn'+'c'](_0x2fead6,_0x368c34);for(const _0x597372 of _0x1ec366){const _0x4c941e=_0x41baef['join'](_0x2fead6,_0x597372[_0x49defa(0x154)]),_0x2708c1=_0x1cc711(_0x4c941e,_0x4c82e9);if(!_0x2708c1)continue;try{const _0x1b3d44=_0x4460ea[_0x49defa(0x177)](_0x2708c1);if(_0x1b3d44[_0x49defa(0x192)+_0x49defa(0x19c)]())continue;const _0x2a7b27=_0x4460ea[_0x49defa(0xde)](_0x2708c1);if(_0x2a7b27[_0x49defa(0x15e)+'y']()){const _0x1eb794=_0x23b91f(_0x2708c1,_0x4c82e9,_0x43c9f4+0x1);_0x562886+=_0x1eb794[_0x49defa(0x122)],_0x405753+=_0x1eb794[_0x49defa(0x180)];}else{if(_0x2a7b27[_0x49defa(0xe0)]()){if(_0x35192e[_0x49defa(0x1aa)]!==_0x35192e[_0x49defa(0x1aa)]){if(!_0x585215||_0x28e853[_0x49defa(0x184)]()['length']===0x0)return _0x49defa(0x159)+_0x116cb5[_0x49defa(0x16b)]();let _0x3d6cd6=_0x15349e[_0x49defa(0xef)](/\.\./g,'')[_0x49defa(0xef)](/^[\/\\]+/,'')[_0x49defa(0x184)]();_0x3d6cd6=_0x3d6cd6[_0x49defa(0xef)](/\\/g,'/'),_0x3d6cd6=_0x3d6cd6[_0x49defa(0xef)](/[<>:"|?*\x00-\x1f]/g,'_');if(_0x3d6cd6['length']>0x1f4){const _0x110f20=_0x3d6cd6[_0x49defa(0x16c)]('/'),_0x5085e8=_0x110f20[_0x110f20[_0x49defa(0x11a)]-0x1];_0x3d6cd6=_0x110f20[_0x49defa(0x114)](0x0,-0x1)[_0x49defa(0xff)]('/')[_0x49defa(0x114)](0x0,0x1f4-_0x5085e8[_0x49defa(0x11a)])+'/'+_0x5085e8;}return _0x3d6cd6||_0x49defa(0x159)+_0x44db2c[_0x49defa(0x16b)]();}else{_0x562886++,_0x405753+=_0x2a7b27[_0x49defa(0x186)];if(_0x562886>_0x10c4e8||_0x405753>_0x27c1e0){const _0x97af44={};return _0x97af44[_0x49defa(0x122)]=_0x562886,_0x97af44[_0x49defa(0x180)]=_0x405753,_0x97af44;}}}}}catch(_0x489e7d){}}}catch(_0x3c9331){}const _0x5442af={};return _0x5442af[_0x49defa(0x122)]=_0x562886,_0x5442af[_0x49defa(0x180)]=_0x405753,_0x5442af;},_0x1ddf58=_0x41baef[_0x243804(0xd6)](_0x130e15),_0x3ebb43=_0x23b91f(_0x130e15,_0x1ddf58);if(_0x35192e[_0x243804(0x134)](_0x3ebb43['totalSize'],_0x27c1e0)){if('vpUpm'===_0x243804(0x195))try{const _0x32216c=_0x12890d['resolve'](_0x1844d6),_0x1ac0b8=_0x58c5a9['resolve'](_0x1b048c);if(!_0x32216c['startsWith'](_0x1ac0b8+_0x45a7c9[_0x243804(0xf4)])&&_0x32216c!==_0x1ac0b8)return _0x308477[_0x243804(0x12c)](_0x243804(0x163)+'밖으로\x20나감\x20(건너'+_0x243804(0xe1)+_0x2f229b),null;return _0x32216c;}catch(_0x14a553){return _0xf31f3f[_0x243804(0x12c)](_0x243804(0x1a5)+_0x243804(0x131)+_0x505c00,_0x14a553),null;}else{_0x4aea81(new Error(_0x243804(0x107)+'무\x20큽니다.\x20최대\x20'+_0x27c1e0/0x400/0x400+('MB까지\x20허용됩니다'+_0x243804(0x191))+(_0x3ebb43[_0x243804(0x180)]/0x400/0x400)[_0x243804(0x187)](0x2)+_0x243804(0x121)));return;}}const _0x2b148a=[],_0x5f330b=(_0xd5ec59,_0x78f753,_0x1c2f11=0x0)=>{const _0x57f7bd=_0x243804;if(_0x1c2f11>_0x484e8b){logger['warn'](_0x57f7bd(0x145)+_0x57f7bd(0x105)+_0x484e8b+_0x57f7bd(0x194)+_0xd5ec59);return;}try{const _0x1fad45=_0x1cc711(_0xd5ec59,_0x78f753);if(!_0x1fad45)return;const _0x20fae3={};_0x20fae3[_0x57f7bd(0x19f)+_0x57f7bd(0xf9)]=!![];const _0x395607=_0x4460ea[_0x57f7bd(0x13c)+'c'](_0x1fad45,_0x20fae3);for(const _0x4fa065 of _0x395607){const _0x4aa4cb=_0x41baef[_0x57f7bd(0xff)](_0x1fad45,_0x4fa065['name']),_0xe4ef3a=_0x1cc711(_0x4aa4cb,_0x78f753);if(!_0xe4ef3a)continue;try{let _0x9c6f60=_0x4460ea[_0x57f7bd(0x177)](_0xe4ef3a);const _0xb25876=_0x9c6f60[_0x57f7bd(0x192)+_0x57f7bd(0x19c)]();if(_0xb25876){const _0x3e9c42=_0x4460ea[_0x57f7bd(0x170)+'nc'][_0x57f7bd(0x1ae)](_0xe4ef3a),_0x4c65a3=_0x1cc711(_0x3e9c42,_0x78f753);if(!_0x4c65a3){logger[_0x57f7bd(0x12c)](_0x57f7bd(0x119)+_0x57f7bd(0xd8)+_0x57f7bd(0x109)+_0x4aa4cb+_0x57f7bd(0x167)+_0x3e9c42);continue;}const _0x9502df=_0xe4ef3a+'->'+_0x4c65a3;if(_0x452b9c[_0x57f7bd(0x196)](_0x9502df)){logger[_0x57f7bd(0x12c)](_0x57f7bd(0x18f)+_0x57f7bd(0x168)+_0x4aa4cb);continue;}_0x452b9c[_0x57f7bd(0x1b1)](_0x9502df);try{_0x9c6f60=_0x4460ea['statSync'](_0x4c65a3);}catch(_0x50582a){logger[_0x57f7bd(0x12c)](_0x57f7bd(0xd2)+_0x57f7bd(0x130)+_0x57f7bd(0x194)+_0x4aa4cb,_0x50582a);continue;}}const _0x4ab3af=_0x9c6f60;if(_0x4ab3af[_0x57f7bd(0x15e)+'y']()){const _0x294349=_0xb25876?_0x1cc711(_0x4460ea[_0x57f7bd(0x170)+'nc'][_0x57f7bd(0x1ae)](_0xe4ef3a),_0x78f753):_0xe4ef3a;_0x294349&&_0x5f330b(_0x294349,_0x78f753,_0x1c2f11+0x1);}else{if(_0x4ab3af[_0x57f7bd(0xe0)]()){const _0x43aa8d=_0xb25876?_0x1cc711(_0x4460ea[_0x57f7bd(0x170)+'nc'][_0x57f7bd(0x1ae)](_0xe4ef3a),_0x78f753):_0xe4ef3a;if(_0x43aa8d){const _0x4439f9=_0x41baef[_0x57f7bd(0xee)](_0x78f753,_0xe4ef3a),_0x399c47=_0x4439f9['replace'](/\\/g,'/'),_0x39d674=this[_0x57f7bd(0x172)+_0x57f7bd(0x14f)](_0x399c47),_0x4f85e1={};_0x4f85e1[_0x57f7bd(0x179)]=_0x43aa8d,_0x4f85e1[_0x57f7bd(0x10e)]=_0x39d674,_0x2b148a['push'](_0x4f85e1);}}}}catch(_0x4215ac){logger[_0x57f7bd(0x12c)]('파일\x20정보\x20조회\x20실'+_0x57f7bd(0x17f)+_0x4aa4cb,_0x4215ac);}}}catch(_0x59e527){logger[_0x57f7bd(0x15c)]('폴더\x20탐색\x20실패:\x20'+_0xd5ec59,_0x59e527);}};_0x5f330b(_0x1ddf58,_0x1ddf58);const _0x27890c=0x14;let _0x2f41ac=0x0,_0x209ecd=0x0,_0x3fda49=![];const _0x2d9dee=()=>{const _0x138d4c=_0x243804;if(_0x3fda49||_0x2f41ac>=_0x2b148a['length']){_0x35192e[_0x138d4c(0x150)](_0x209ecd,0x0)&&_0x2f41ac>=_0x2b148a[_0x138d4c(0x11a)]&&_0x4690c1[_0x138d4c(0x13f)]();return;}while(_0x209ecd<_0x27890c&&_0x2f41ac<_0x2b148a[_0x138d4c(0x11a)]){const _0x5aeb2d=_0x2b148a[_0x2f41ac++];_0x209ecd++;try{const _0x4e978f=_0x4460ea[_0x138d4c(0x140)+_0x138d4c(0x1a2)](_0x5aeb2d[_0x138d4c(0x179)]);_0x4e978f['on']('error',_0x2c205c=>{const _0x3d65fe=_0x138d4c;_0x209ecd--,logger['warn'](_0x3d65fe(0xfb)+'(건너뜀):\x20'+_0x5aeb2d[_0x3d65fe(0x179)],_0x2c205c),_0x2d9dee();}),_0x4e978f['on'](_0x138d4c(0xf5),()=>{_0x209ecd--,_0x2d9dee();});const _0x6d4fc4={};_0x6d4fc4[_0x138d4c(0x154)]=_0x5aeb2d[_0x138d4c(0x10e)],_0x4690c1['append'](_0x4e978f,_0x6d4fc4);}catch(_0x187cc1){_0x209ecd--,logger[_0x138d4c(0x15c)]('파일\x20압축\x20추가\x20실'+_0x138d4c(0x128)+_0x5aeb2d['filePath'],_0x187cc1),_0x2d9dee();}}};_0x2d9dee(),_0x4690c1['on']('error',()=>{_0x3fda49=!![];});});}['sanitizePa'+a4_0x5d86cb(0x14f)](_0x38e3ac){const _0x5eae59=a4_0x5d86cb,_0x3144da={};_0x3144da[_0x5eae59(0x1a9)]=function(_0x1536a1,_0x22acfb){return _0x1536a1+_0x22acfb;},_0x3144da[_0x5eae59(0xfe)]=function(_0x174dd2,_0x24cf07){return _0x174dd2-_0x24cf07;};const _0x2983fc=_0x3144da;if(!_0x38e3ac||_0x38e3ac[_0x5eae59(0x184)]()[_0x5eae59(0x11a)]===0x0)return _0x5eae59(0x159)+Date[_0x5eae59(0x16b)]();let _0x29edc0=_0x38e3ac[_0x5eae59(0xef)](/\.\./g,'')[_0x5eae59(0xef)](/^[\/\\]+/,'')['trim']();_0x29edc0=_0x29edc0[_0x5eae59(0xef)](/\\/g,'/'),_0x29edc0=_0x29edc0['replace'](/[<>:"|?*\x00-\x1f]/g,'_');if(_0x29edc0['length']>0x1f4){const _0x3132f4=_0x29edc0[_0x5eae59(0x16c)]('/'),_0xb71e0d=_0x3132f4[_0x3132f4[_0x5eae59(0x11a)]-0x1];_0x29edc0=_0x2983fc[_0x5eae59(0x1a9)](_0x3132f4[_0x5eae59(0x114)](0x0,-0x1)['join']('/')['slice'](0x0,_0x2983fc[_0x5eae59(0xfe)](0x1f4,_0xb71e0d[_0x5eae59(0x11a)]))+'/',_0xb71e0d);}return _0x29edc0||_0x5eae59(0x159)+Date[_0x5eae59(0x16b)]();}async[a4_0x5d86cb(0x148)+'le'](_0x17479a){const _0x117c6d=a4_0x5d86cb;try{const _0x2fd423=await this['s3'][_0x117c6d(0x171)](new GetObjectCommand({'Bucket':this['bucket'],'Key':_0x17479a}));if(!_0x2fd423['Body'])throw new Error('다운로드된\x20파일\x20내'+_0x117c6d(0x10f));const _0x42c1eb=[];for await(const _0x8858c9 of _0x2fd423[_0x117c6d(0xfd)]){_0x42c1eb['push'](_0x8858c9);}const _0x35ce6e=Buffer[_0x117c6d(0x136)](_0x42c1eb),_0x462063=_0x35ce6e[_0x117c6d(0x112)](_0x117c6d(0x125));logger['info'](_0x117c6d(0x199)+':\x20'+_0x17479a);const _0x4d5c8f={};return _0x4d5c8f[_0x117c6d(0xe2)]=!![],_0x4d5c8f[_0x117c6d(0x160)]=_0x462063,_0x4d5c8f;}catch(_0xec1f6){logger['error'](_0x117c6d(0x19a)+':',_0xec1f6);const _0xddc786={};return _0xddc786['success']=![],_0xddc786[_0x117c6d(0x15c)]=_0xec1f6 instanceof Error?_0xec1f6['message']:_0x117c6d(0xed)+'ror',_0xddc786;}}[a4_0x5d86cb(0xcd)+a4_0x5d86cb(0x102)](_0x502875){const _0x5f00b8=a4_0x5d86cb;if(this[_0x5f00b8(0x198)]){const _0x563a95=this[_0x5f00b8(0x198)][_0x5f00b8(0xef)](/\/$/,'');return _0x563a95+'/'+this[_0x5f00b8(0x129)]+'/'+_0x502875;}return _0x5f00b8(0x14b)+this['bucket']+'.s3.'+this[_0x5f00b8(0xf0)]+(_0x5f00b8(0x141)+_0x5f00b8(0x165))+_0x502875;}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const a5_0x3c07ea=a5_0x2006;(function(_0xb3dd5e,_0x3420f5){const _0x49cfb0=a5_0x2006,_0x218635=_0xb3dd5e();while(!![]){try{const _0x513415=-parseInt(_0x49cfb0(0x1d6))/0x1*(parseInt(_0x49cfb0(0x21a))/0x2)+parseInt(_0x49cfb0(0x1d8))/0x3+parseInt(_0x49cfb0(0x1f4))/0x4+-parseInt(_0x49cfb0(0x191))/0x5*(-parseInt(_0x49cfb0(0x1ae))/0x6)+parseInt(_0x49cfb0(0x20f))/0x7+-parseInt(_0x49cfb0(0x204))/0x8*(-parseInt(_0x49cfb0(0x218))/0x9)+-parseInt(_0x49cfb0(0x19e))/0xa;if(_0x513415===_0x3420f5)break;else _0x218635['push'](_0x218635['shift']());}catch(_0x4163c7){_0x218635['push'](_0x218635['shift']());}}}(a5_0x41ed,0xd1730));const a5_0x5608f9=(function(){let _0x6698f9=!![];return function(_0x46ff80,_0x4cc700){const _0x3df31e=_0x6698f9?function(){const _0x35c92b=a5_0x2006;if(_0x4cc700){const _0x3d1123=_0x4cc700[_0x35c92b(0x1e6)](_0x46ff80,arguments);return _0x4cc700=null,_0x3d1123;}}:function(){};return _0x6698f9=![],_0x3df31e;};}()),a5_0x2e9858=a5_0x5608f9(this,function(){const _0x33f479=a5_0x2006;return a5_0x2e9858['toString']()['search']('(((.+)+)+)'+'+$')[_0x33f479(0x186)]()[_0x33f479(0x1cb)+'r'](a5_0x2e9858)['search'](_0x33f479(0x1ad)+'+$');});function a5_0x41ed(){const _0x25d794=['분석\x20ID\x20\x27','\x20->\x20실제\x20분석\x20','잘못된\x20요청입니다.','OnDemand\x20분','화\x20실패:','수\x20없음.\x20요청\x20I','getDecrypt','.com','apply','ize','endsWith','패\x20(400):\x20','utf8','object','maxSourceS','st-2','니다.\x20존재하지\x20않','alysis/','A1PA0SHi0K','분석\x20ID\x20추출\x20완','W1dZRgF/PA','docs/**','2837044Hjkqau','스토리지\x20컨테이너\x20','Z8Rw==','/api/v2/an','Sparrow\x20MC','edAccessKe','패\x20(시도\x20','분석\x20ID\x20추출:\x20','LfRCF','개\x20파일','sparrow','memo','분석이\x20실패했습니다','/result','applicatio','sastOption','246976qPPkRc','알\x20수\x20없는\x20오류','호화\x20실패','료:\x20','\x27의\x20결과를\x20찾을\x20','패:\x20','.amazonaws','push','secretAcce','message','WoQIF','1212540QOPZBS','찾을\x20수\x20없습니다','vOzgC','ageInfo','hpujK','Unknown\x20er','entryName','**/dev/**','analysisLi','423CbTQMc','downloadAn','2TwASRh','분석\x20완료:\x20','xist','Aitrd','error','/api/v1/an','response','P\x20요청\x20-\x20','does\x20not\x20e','\x20실패:\x20','arraybuffe','includes','objectStor','\x20실패\x20(400):','sStatus','석\x20요청\x20실패:','warn','s3Key','toString','s\x20Key\x20ID\x20복','FAIL','status','D이거나\x20아직\x20분석','parse','이름\x20복호화\x20실패','D만\x20사용:\x20','us-east-1','length','edSecretKe','5qYDlsR','Bearer\x20','JaKD4uJUEZ','ID\x20','requestAna','스토리지\x20Acces','getRegion','getAnalysi','analysisId','석\x20상태\x20조회\x20실패','ess\x20Key\x20복호','이\x20완료되지\x20않았습','analysisSo','32638480ZYvCgC','toUpperCas','auth','data','fileName','VNkzg','accessKey','/api/v3/an','requestId','progress','processing','분석\x20진행\x20중...','는\x20분석\x20ID이거나','\x20완료:\x20','ror','(((.+)+)+)','5167758KPDfWT','Secret\x20Acc','headers','baseUrl','EngWClY3G3','ion','t\x20Access\x20K','result','존재하지\x20않습니다','get','type','\x27를\x20찾을\x20수\x20없습','\x20ID\x20복호화\x20실패','getEndpoin','endpoint','n/json','alysis/too','region','실패:','post','secretKey','분석\x20상태\x20조회\x20실','not\x20found','edBucket','accessKeyI','getEntries','test/**','NjAVV','\x20실패:','constructo','extensions','Authorizat','요청\x20ID\x20','분석\x20요청\x20실패:\x20','분석\x20결과\x20다운로드','excludedPa','resultVers','https://s3','urce','Jn4eEwgeMz','430838efyQrN','.json','4073496TTuQIi','\x20잘못된\x20ID입니다','getData','info','apiKey','스토리지\x20Secre'];a5_0x41ed=function(){return _0x25d794;};return a5_0x41ed();}a5_0x2e9858();import a5_0x19aa4e from'axios';import a5_0x481b24 from'adm-zip';import{appConfig}from'../config/appConfig.js';function a5_0x2006(_0x62b4a0,_0x56d30b){_0x62b4a0=_0x62b4a0-0x17c;const _0x1a91ef=a5_0x41ed();let _0x2e9858=_0x1a91ef[_0x62b4a0];return _0x2e9858;}import{logger}from'../utils/logger.js';import{decryptInternal}from'../utils/crypto.util.js';const ENCRYPTED_ACCESS_KEY_ID=a5_0x3c07ea(0x1b2)+a5_0x3c07ea(0x193)+'ZGh/Ygc=',ENCRYPTED_SECRET_ACCESS_KEY=a5_0x3c07ea(0x1d5)+'ZYTDc1ICIq'+a5_0x3c07ea(0x1f2)+a5_0x3c07ea(0x1f0)+'HRknHVVUYw'+a5_0x3c07ea(0x1f6),ENCRYPTED_BUCKET_NAME='PF07LggYMS'+'FDDhEJ',STORAGE_REGION_DEFAULT='ap-northea'+a5_0x3c07ea(0x1ed);export class SparrowService{[a5_0x3c07ea(0x1b1)];[a5_0x3c07ea(0x1dc)];constructor(){const _0x2f2e65=a5_0x3c07ea;this['baseUrl']=appConfig[_0x2f2e65(0x1fe)][_0x2f2e65(0x1b1)],this[_0x2f2e65(0x1dc)]=appConfig[_0x2f2e65(0x1fe)][_0x2f2e65(0x1dc)];}['getDecrypt'+a5_0x3c07ea(0x1f9)+'y'](){const _0x2dd6f2=a5_0x3c07ea,_0x459cb5={'SjfoF':function(_0x112598,_0x5c57b3){return _0x112598(_0x5c57b3);}};if(appConfig['s3'][_0x2dd6f2(0x1c6)+'d'])return appConfig['s3'][_0x2dd6f2(0x1c6)+'d'];try{return _0x459cb5['SjfoF'](decryptInternal,ENCRYPTED_ACCESS_KEY_ID);}catch(_0x4bac64){logger['error']('Access\x20Key'+_0x2dd6f2(0x1ba)+':',_0x4bac64);throw new Error(_0x2dd6f2(0x196)+_0x2dd6f2(0x187)+_0x2dd6f2(0x206));}}[a5_0x3c07ea(0x1e4)+'edSecretKe'+'y'](){const _0x5a3fcb=a5_0x3c07ea;if(appConfig['s3'][_0x5a3fcb(0x20c)+'ssKey'])return appConfig['s3'][_0x5a3fcb(0x20c)+'ssKey'];try{return decryptInternal(ENCRYPTED_SECRET_ACCESS_KEY);}catch(_0x2893a8){logger[_0x5a3fcb(0x21e)](_0x5a3fcb(0x1af)+_0x5a3fcb(0x19b)+_0x5a3fcb(0x1e2),_0x2893a8);throw new Error(_0x5a3fcb(0x1dd)+_0x5a3fcb(0x1b4)+'ey\x20복호화\x20실패');}}[a5_0x3c07ea(0x1e4)+'edBucket'](){const _0x543230=a5_0x3c07ea;if(appConfig['s3']['bucket'])return appConfig['s3']['bucket'];try{return decryptInternal(ENCRYPTED_BUCKET_NAME);}catch(_0xd85da2){logger['error']('버킷\x20이름\x20복호화\x20'+_0x543230(0x1c0),_0xd85da2);throw new Error(_0x543230(0x1f5)+_0x543230(0x18c));}}[a5_0x3c07ea(0x197)](){const _0x2cfa95=a5_0x3c07ea;return appConfig['s3'][_0x2cfa95(0x1bf)]&&appConfig['s3'][_0x2cfa95(0x1bf)]!==_0x2cfa95(0x18e)?appConfig['s3'][_0x2cfa95(0x1bf)]:STORAGE_REGION_DEFAULT;}['getEndpoin'+'t'](){const _0x184365=a5_0x3c07ea;return appConfig['s3'][_0x184365(0x1bc)]||_0x184365(0x1d3)+'.'+this[_0x184365(0x197)]()+(_0x184365(0x20a)+_0x184365(0x1e5));}async[a5_0x3c07ea(0x195)+'lysis'](_0x2ea540){const _0x533d79=a5_0x3c07ea;try{const _0x4573d9=this['getDecrypt'+_0x533d79(0x1c5)](),_0xa561de=this[_0x533d79(0x1e4)+'edAccessKe'+'y'](),_0xec64c4=this[_0x533d79(0x1e4)+_0x533d79(0x190)+'y'](),_0x4c0ed2=this[_0x533d79(0x1bb)+'t'](),_0x520b5c={};_0x520b5c[_0x533d79(0x1a4)]=_0xa561de,_0x520b5c[_0x533d79(0x1c2)]=_0xec64c4;const _0x491216={};_0x491216[_0x533d79(0x1d2)+_0x533d79(0x1b3)]=0x2,_0x491216[_0x533d79(0x1ff)]=_0x533d79(0x1f8)+_0x533d79(0x221)+_0x2ea540[_0x533d79(0x1a2)],_0x491216['callbacks']=[],_0x491216[_0x533d79(0x203)+'s']={},_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x1ec)+_0x533d79(0x1e7)]=0x64,_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x19d)+_0x533d79(0x1d4)]={},_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x1cc)]=['*'],_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x1d1)+'th']=[_0x533d79(0x216),_0x533d79(0x1c8),_0x533d79(0x1f3)],_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x19d)+_0x533d79(0x1d4)][_0x533d79(0x1b8)]='OBJECT_STO'+'RAGE',_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x19d)+_0x533d79(0x1d4)][_0x533d79(0x180)+_0x533d79(0x212)]={},_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x19d)+_0x533d79(0x1d4)][_0x533d79(0x180)+_0x533d79(0x212)]['bucket']=_0x4573d9,_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x19d)+_0x533d79(0x1d4)][_0x533d79(0x180)+_0x533d79(0x212)]['endPoint']=_0x4c0ed2,_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x19d)+_0x533d79(0x1d4)][_0x533d79(0x180)+_0x533d79(0x212)][_0x533d79(0x1eb)]=_0x2ea540[_0x533d79(0x185)],_0x491216[_0x533d79(0x203)+'s'][_0x533d79(0x19d)+_0x533d79(0x1d4)][_0x533d79(0x180)+_0x533d79(0x212)][_0x533d79(0x1a0)]=_0x520b5c;const _0x191db5=_0x491216,_0x5dd895=await a5_0x19aa4e[_0x533d79(0x1c1)](this[_0x533d79(0x1b1)]+(_0x533d79(0x21f)+_0x533d79(0x1be)+'l/sast'),_0x191db5,{'headers':{'Authorization':'Bearer\x20'+this[_0x533d79(0x1dc)],'Content-Type':_0x533d79(0x202)+_0x533d79(0x1bd)}});logger[_0x533d79(0x1db)](_0x533d79(0x1e1)+'석\x20요청\x20성공:\x20'+_0x5dd895[_0x533d79(0x1a1)]['requestId']);const _0x369416=_0x5dd895[_0x533d79(0x1a1)][_0x533d79(0x217)+'st']?.[0x0]?.['analysisId']||_0x5dd895[_0x533d79(0x1a1)]['analysisId'];return _0x369416?logger[_0x533d79(0x1db)](_0x533d79(0x1f1)+_0x533d79(0x207)+_0x369416+'\x20(요청\x20ID:\x20'+_0x5dd895[_0x533d79(0x1a1)][_0x533d79(0x1a6)]+')'):logger['warn']('분석\x20ID를\x20찾을\x20'+_0x533d79(0x1e3)+_0x533d79(0x18d)+_0x5dd895[_0x533d79(0x1a1)][_0x533d79(0x1a6)]),{'requestId':_0x5dd895[_0x533d79(0x1a1)][_0x533d79(0x1a6)],'analysisId':_0x369416?String(_0x369416):undefined,'status':_0x5dd895[_0x533d79(0x1a1)][_0x533d79(0x217)+'st']?.[0x0]?.[_0x533d79(0x189)]||_0x5dd895[_0x533d79(0x1a1)][_0x533d79(0x189)],'message':_0x5dd895['data'][_0x533d79(0x20d)]};}catch(_0x57e900){logger[_0x533d79(0x21e)](_0x533d79(0x1e1)+_0x533d79(0x183),_0x57e900);throw new Error(_0x533d79(0x1cf)+(_0x57e900 instanceof Error?_0x57e900[_0x533d79(0x20d)]:'Unknown\x20er'+_0x533d79(0x1ac)));}}async[a5_0x3c07ea(0x198)+'sStatus'](_0x18c1b5){const _0x53d3e1=a5_0x3c07ea,_0x5561de={};_0x5561de['rYytY']=function(_0x924efa,_0x4cba4c){return _0x924efa!==_0x4cba4c;},_0x5561de[_0x53d3e1(0x1a3)]=function(_0x29cd7b,_0x3761e7){return _0x29cd7b instanceof _0x3761e7;},_0x5561de[_0x53d3e1(0x211)]=_0x53d3e1(0x214)+_0x53d3e1(0x1ac);const _0x2dc193=_0x5561de;try{const _0x28794d={};_0x28794d[_0x53d3e1(0x1cd)+_0x53d3e1(0x1b3)]=_0x53d3e1(0x192)+this[_0x53d3e1(0x1dc)];const _0x25f13d=_0x28794d,_0x6a964f=[_0x53d3e1(0x1a5)+'alysis/'+_0x18c1b5,_0x53d3e1(0x1f7)+_0x53d3e1(0x1ef)+_0x18c1b5,_0x53d3e1(0x21f)+_0x53d3e1(0x1ef)+_0x18c1b5];let _0x47b3b8;for(const _0x56b926 of _0x6a964f){try{const _0x1716c5={};_0x1716c5[_0x53d3e1(0x1b0)]=_0x25f13d;const _0x31b527=await a5_0x19aa4e[_0x53d3e1(0x1b7)](''+this['baseUrl']+_0x56b926,_0x1716c5),_0x26a226=_0x31b527[_0x53d3e1(0x1a1)]['analysisLi'+'st']?.[0x0]||_0x31b527['data'],_0x5df681=_0x26a226?.[_0x53d3e1(0x199)]||_0x31b527[_0x53d3e1(0x1a1)][_0x53d3e1(0x199)]||_0x18c1b5;return _0x5df681!==_0x18c1b5&&_0x2dc193['rYytY'](_0x5df681,String(_0x18c1b5))&&logger[_0x53d3e1(0x1db)](_0x53d3e1(0x1fb)+_0x53d3e1(0x1ce)+_0x18c1b5+(_0x53d3e1(0x1df)+_0x53d3e1(0x194))+_0x5df681),{'requestId':String(_0x31b527['data'][_0x53d3e1(0x1a6)]||_0x18c1b5),'analysisId':_0x5df681?String(_0x5df681):undefined,'status':String(_0x26a226?.[_0x53d3e1(0x189)]||_0x31b527['data'][_0x53d3e1(0x189)]||_0x53d3e1(0x1a8)),'result':_0x26a226?.[_0x53d3e1(0x1b5)]||_0x31b527[_0x53d3e1(0x1a1)][_0x53d3e1(0x1b5)]||undefined,'progress':_0x26a226?.[_0x53d3e1(0x1a7)]!==null&&_0x26a226?.['progress']!==undefined?Number(_0x26a226[_0x53d3e1(0x1a7)]):undefined,'downloadUrl':undefined,'vulnerabilities':undefined};}catch(_0x4a69bb){_0x47b3b8=_0x4a69bb;const _0x4a9950=_0x4a69bb?.[_0x53d3e1(0x220)]?.[_0x53d3e1(0x189)];if(_0x4a9950===0x194){if(_0x56b926===_0x6a964f[_0x6a964f[_0x53d3e1(0x18f)]-0x1])throw new Error('분석\x20ID\x20\x27'+_0x18c1b5+(_0x53d3e1(0x1b9)+_0x53d3e1(0x1ee)+_0x53d3e1(0x1aa)+_0x53d3e1(0x1d9)+'.'));continue;}if(_0x4a9950===0x190){const _0x1ca4cc=_0x4a69bb?.[_0x53d3e1(0x220)]?.[_0x53d3e1(0x1a1)]?.['message']||_0x4a69bb?.[_0x53d3e1(0x20d)]||'잘못된\x20요청입니다.';throw new Error(_0x53d3e1(0x1c3)+_0x53d3e1(0x1e9)+_0x1ca4cc);}continue;}}throw _0x2dc193['VNkzg'](_0x47b3b8,Error)?_0x47b3b8:new Error(_0x53d3e1(0x205));}catch(_0x3e8a63){logger['error'](_0x53d3e1(0x1e1)+_0x53d3e1(0x19a)+':',_0x3e8a63);throw new Error(_0x53d3e1(0x1c3)+_0x53d3e1(0x209)+(_0x3e8a63 instanceof Error?_0x3e8a63[_0x53d3e1(0x20d)]:_0x2dc193[_0x53d3e1(0x211)]));}}async[a5_0x3c07ea(0x219)+'alysisResu'+'lts'](_0x50479a){const _0x4eb0c2=a5_0x3c07ea,_0x374af1={};_0x374af1[_0x4eb0c2(0x20e)]=_0x4eb0c2(0x1ea),_0x374af1[_0x4eb0c2(0x213)]=_0x4eb0c2(0x1d0)+_0x4eb0c2(0x1ca),_0x374af1[_0x4eb0c2(0x1c9)]=function(_0x118fac,_0x27a4){return _0x118fac===_0x27a4;};const _0x3d5d53=_0x374af1;try{const _0x277d93=await a5_0x19aa4e['get'](this['baseUrl']+(_0x4eb0c2(0x1f7)+_0x4eb0c2(0x1ef))+_0x50479a+_0x4eb0c2(0x201),{'responseType':_0x4eb0c2(0x17e)+'r','headers':{'Authorization':_0x4eb0c2(0x192)+this['apiKey']}}),_0x31b5f0=new a5_0x481b24(Buffer['from'](_0x277d93[_0x4eb0c2(0x1a1)])),_0x37e090=_0x31b5f0[_0x4eb0c2(0x1c7)](),_0x5ef66a=[];for(const _0x559f6c of _0x37e090){if(_0x559f6c['isDirector'+'y'])continue;if(_0x559f6c[_0x4eb0c2(0x215)][_0x4eb0c2(0x1e8)](_0x4eb0c2(0x1d7)))try{const _0x8a5b3a=_0x559f6c[_0x4eb0c2(0x1da)]()[_0x4eb0c2(0x186)](_0x3d5d53[_0x4eb0c2(0x20e)]),_0xdfd894=JSON[_0x4eb0c2(0x18b)](_0x8a5b3a);_0x5ef66a[_0x4eb0c2(0x20b)](_0xdfd894);}catch(_0x5c93ea){logger[_0x4eb0c2(0x184)]('JSON\x20파싱\x20실패'+':\x20'+_0x559f6c[_0x4eb0c2(0x215)],_0x5c93ea);}}return logger[_0x4eb0c2(0x1db)](_0x4eb0c2(0x1d0)+_0x4eb0c2(0x1ab)+_0x5ef66a[_0x4eb0c2(0x18f)]+_0x4eb0c2(0x1fd)),_0x5ef66a;}catch(_0x3cf5cf){logger['error'](_0x3d5d53[_0x4eb0c2(0x213)],_0x3cf5cf);const _0xef7f93=_0x3cf5cf?.[_0x4eb0c2(0x220)]?.[_0x4eb0c2(0x189)];if(_0xef7f93===0x194)throw new Error(_0x4eb0c2(0x1de)+_0x50479a+(_0x4eb0c2(0x208)+'수\x20없습니다.\x20존재'+'하지\x20않는\x20분석\x20I'+_0x4eb0c2(0x18a)+_0x4eb0c2(0x19c)+'니다.'));else{if(_0x3d5d53[_0x4eb0c2(0x1c9)](_0xef7f93,0x190)){const _0x10ff5e=_0x3cf5cf?.[_0x4eb0c2(0x220)]?.[_0x4eb0c2(0x1a1)]?.['message']||_0x3cf5cf?.[_0x4eb0c2(0x20d)]||_0x4eb0c2(0x1e0);throw new Error(_0x4eb0c2(0x1d0)+_0x4eb0c2(0x181)+'\x20'+_0x10ff5e);}}throw new Error(_0x4eb0c2(0x1d0)+_0x4eb0c2(0x17d)+(_0x3cf5cf instanceof Error?_0x3cf5cf['message']:_0x4eb0c2(0x214)+_0x4eb0c2(0x1ac)));}}async['pollAnalys'+'isCompleti'+'on'](_0x577733,_0xa96ae5=0x3c,_0x453e95=0x1388){const _0x33e57e=a5_0x3c07ea,_0x141035={};_0x141035['Aitrd']=function(_0x5f0e65,_0x585657){return _0x5f0e65<_0x585657;},_0x141035[_0x33e57e(0x1fc)]=function(_0xaeee80,_0x59e01c){return _0xaeee80+_0x59e01c;};const _0x22f0f7=_0x141035;let _0x1e74e2=0x0;while(_0x22f0f7[_0x33e57e(0x21d)](_0x1e74e2,_0xa96ae5)){try{const _0x1713ea=await this[_0x33e57e(0x198)+_0x33e57e(0x182)](_0x577733);if(String(_0x1713ea[_0x33e57e(0x189)])[_0x33e57e(0x19f)+'e']()==='COMPLETE')return logger['info'](_0x33e57e(0x21b)+_0x577733),_0x1713ea;else{if(String(_0x1713ea[_0x33e57e(0x189)])['toUpperCas'+'e']()===_0x33e57e(0x188))throw new Error(_0x33e57e(0x200)+'.');}logger[_0x33e57e(0x1db)](_0x33e57e(0x1a9)+'\x20('+_0x22f0f7['LfRCF'](_0x1e74e2,0x1)+'/'+_0xa96ae5+')'),await new Promise(_0x5a59c9=>setTimeout(_0x5a59c9,_0x453e95)),_0x1e74e2++;}catch(_0x35b1d4){logger['error']('분석\x20상태\x20확인\x20실'+_0x33e57e(0x1fa)+_0x22f0f7['LfRCF'](_0x1e74e2,0x1)+'):',_0x35b1d4);const _0x8ca5b9=_0x35b1d4 instanceof Error?_0x35b1d4[_0x33e57e(0x20d)]:String(_0x35b1d4);if(_0x8ca5b9[_0x33e57e(0x17f)](_0x33e57e(0x1b6))||_0x8ca5b9[_0x33e57e(0x17f)](_0x33e57e(0x210))||_0x8ca5b9[_0x33e57e(0x17f)](_0x33e57e(0x17c)+_0x33e57e(0x21c))||_0x8ca5b9[_0x33e57e(0x17f)](_0x33e57e(0x1c4)))throw _0x35b1d4;_0x1e74e2++;if(_0x1e74e2>=_0xa96ae5)throw _0x35b1d4;await new Promise(_0x4b2428=>setTimeout(_0x4b2428,_0x453e95));}}throw new Error('분석\x20시간\x20초과');}}
|