@lovrabet/dataset-mcp-server 1.3.2-beta.1 → 1.3.2-beta.5
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/README.md +116 -126
- package/dist/analyzer/dataset-analyzer.js +1 -1
- package/dist/api/cache.js +1 -1
- package/dist/api/dev-api-client.js +1 -1
- package/dist/auth/constants.js +1 -1
- package/dist/auth/cookie-manager.js +1 -1
- package/dist/auth/session-validator.js +1 -1
- package/dist/config/env.js +1 -0
- package/dist/index.js +1 -1
- package/dist/server.js +1 -1
- package/dist/tools/execute-custom-sql.js +1 -1
- package/dist/tools/generate-sdk-code.js +1 -1
- package/dist/tools/generate-sql-code.js +1 -1
- package/dist/tools/get-dataset-detail.js +1 -1
- package/dist/tools/get-operation-detail.js +1 -1
- package/dist/tools/get-operations.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/list-datasets.js +1 -1
- package/dist/tools/list-sql-queries.js +1 -1
- package/dist/tools/login.js +1 -1
- package/dist/tools/save-or-update-custom-sql.js +1 -1
- package/dist/tools/search-datasets.js +1 -1
- package/dist/tools/validate-sql-content.js +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/mcp-types.js +1 -1
- package/dist/utils/rate-limiter.js +1 -0
- package/dist/utils/sql-parser.js +1 -1
- package/package.json +2 -2
- package/dist/tools/save-custom-sql.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x3d7a23,_0x39b279){const _0x1996c5=a17_0x556c,_0x5100e7=_0x3d7a23();while(!![]){try{const _0x1aba98=parseInt(_0x1996c5(0x159))/0x1+-parseInt(_0x1996c5(0x13f))/0x2*(-parseInt(_0x1996c5(0x156))/0x3)+-parseInt(_0x1996c5(0x15f))/0x4+parseInt(_0x1996c5(0x14a))/0x5+parseInt(_0x1996c5(0x15d))/0x6*(-parseInt(_0x1996c5(0x12d))/0x7)+parseInt(_0x1996c5(0x131))/0x8*(-parseInt(_0x1996c5(0x149))/0x9)+-parseInt(_0x1996c5(0x13c))/0xa;if(_0x1aba98===_0x39b279)break;else _0x5100e7['push'](_0x5100e7['shift']());}catch(_0x44be5c){_0x5100e7['push'](_0x5100e7['shift']());}}}(a17_0x960c,0x740d9));import{DevApiClient}from'../api/dev-api-client.js';function a17_0x556c(_0x2a518f,_0x44dd63){_0x2a518f=_0x2a518f-0x122;const _0x960c0a=a17_0x960c();let _0x556c7f=_0x960c0a[_0x2a518f];return _0x556c7f;}import{getEnvAppCode,getEnvironment}from'../config/env.js';export async function listSqlQueries(_0x5bdf98={}){const _0x2c64ab=a17_0x556c,{appCode:appCode=getEnvAppCode(),cookie:_0x2b3dd1,keyword:_0x242a5c,category:_0x4fd986,sqlCode:_0x4f1daa,sqlName:_0x58879a,pageSize:pageSize=0x3e7,currentPage:currentPage=0x1}=_0x5bdf98;if(!appCode)throw new Error('appCode\x20is\x20required.\x20Provide\x20it\x20as\x20parameter\x20or\x20set\x20LOVRABET_APP_CODE\x20environment\x20variable.');const _0x1b48cf=new DevApiClient({'appCode':appCode,'cookie':_0x2b3dd1}),_0x5f5307=getEnvironment();try{const _0x161322=await _0x1b48cf['getCustomSqlList']({'pageSize':pageSize,'currentPage':currentPage,'sqlCode':_0x4f1daa,'sqlName':_0x58879a}),_0x3f21ac=_0x161322[_0x2c64ab(0x13a)]||_0x161322,_0x4d0edc=_0x3f21ac[_0x2c64ab(0x14d)]||[],_0x12e6c6=_0x3f21ac[_0x2c64ab(0x147)]||_0x4d0edc[_0x2c64ab(0x15c)];let _0x13f3cb=_0x4d0edc[_0x2c64ab(0x144)](_0x5b44a8=>{const _0x57ab85=_0x2c64ab,_0x524b46=_0x5b44a8[_0x57ab85(0x146)]||appCode+'-'+(_0x5b44a8['sqlId']||_0x5b44a8['id']),_0xd1d746=_0x5b44a8[_0x57ab85(0x12a)]||_0x5b44a8['id'];let _0x239276;if(_0x5b44a8['sqlContent']||_0x5b44a8[_0x57ab85(0x137)]){const _0x44f162=_0x5b44a8[_0x57ab85(0x151)]||_0x5b44a8['sql'],_0x3d07dd=_0x44f162[_0x57ab85(0x161)](/[:$]\{?(\w+)\}?/g);if(_0x3d07dd){const _0x45514d=Array['from'](new Set(_0x3d07dd[_0x57ab85(0x144)](_0x31481f=>_0x31481f[_0x57ab85(0x145)](/[:${}]/g,''))));_0x239276=_0x45514d['map'](_0x49b4e0=>{const _0x5485f9=_0x57ab85;let _0x5aa1f7=_0x5485f9(0x129);if(_0x49b4e0[_0x5485f9(0x12f)]()[_0x5485f9(0x12b)]('date')||_0x49b4e0['toLowerCase']()[_0x5485f9(0x12b)]('time'))_0x5aa1f7=_0x5485f9(0x13b);else{if(_0x49b4e0[_0x5485f9(0x12f)]()[_0x5485f9(0x12b)]('id'))_0x5aa1f7=0x7b;else(_0x49b4e0['toLowerCase']()['includes']('limit')||_0x49b4e0[_0x5485f9(0x12f)]()[_0x5485f9(0x12b)](_0x5485f9(0x160)))&&(_0x5aa1f7=0xa);}return{'name':_0x49b4e0,'type':_0x5485f9(0x125),'required':!![],'description':'Parameter:\x20'+_0x49b4e0,'example':_0x5aa1f7};});}}const _0x4e673b=_0x239276&&_0x239276[_0x57ab85(0x15c)]>0x0,_0x1d6765=_0x4e673b?_0x239276[_0x57ab85(0x132)]((_0x48121f,_0x2e6d7b)=>({..._0x48121f,[_0x2e6d7b[_0x57ab85(0x152)]]:_0x2e6d7b[_0x57ab85(0x140)]}),{}):undefined,_0x2e84fc={'typescript':_0x57ab85(0x136)+appCode+_0x57ab85(0x14f)+(_0x5f5307||'online')+'\x27,\x0a});\x0a\x0a//\x20Execute\x20the\x20SQL\x20query:\x20'+(_0x5b44a8[_0x57ab85(0x14b)]||_0x5b44a8[_0x57ab85(0x152)]||'SQL\x20Query')+_0x57ab85(0x133)+_0x524b46+'\x27'+(_0x4e673b?',\x20'+JSON[_0x57ab85(0x124)](_0x1d6765,null,0x2):'')+_0x57ab85(0x15e),'description':_0x57ab85(0x127)+(_0x5b44a8['sqlName']||_0x5b44a8[_0x57ab85(0x152)]||_0x57ab85(0x134)),'important':['SDK\x20returns\x20{\x20execSuccess:\x20boolean,\x20execResult?:\x20any[]\x20}\x20-\x20Always\x20check\x20execSuccess\x20before\x20using\x20execResult','The\x20executeSql\x20method\x20accepts\x20two\x20parameters:\x20sqlCode\x20(string)\x20and\x20optional\x20params\x20(object)',_0x4e673b?'This\x20SQL\x20requires\x20parameters:\x20'+_0x239276[_0x57ab85(0x144)](_0x1c0679=>_0x1c0679[_0x57ab85(0x152)]+'\x20('+_0x1c0679[_0x57ab85(0x142)]+')')['join'](',\x20'):_0x57ab85(0x126),_0x57ab85(0x157),'The\x20execResult\x20contains\x20an\x20array\x20of\x20row\x20objects\x20matching\x20your\x20SQL\x20query\x20structure']},_0x49a5ce={'sqlCode':_0x524b46,'sqlId':_0xd1d746,'name':_0x5b44a8['sqlName']||_0x5b44a8[_0x57ab85(0x152)]||_0x57ab85(0x12e)+_0xd1d746,'description':_0x5b44a8['sqlDesc']||_0x5b44a8[_0x57ab85(0x15a)],'category':_0x5b44a8['category']||_0x5b44a8[_0x57ab85(0x13e)]||_0x57ab85(0x141),'sqlContent':_0x5b44a8[_0x57ab85(0x151)]||_0x5b44a8[_0x57ab85(0x137)],'parameters':_0x239276,'createdTime':_0x5b44a8[_0x57ab85(0x158)]||_0x5b44a8[_0x57ab85(0x14e)],'updatedTime':_0x5b44a8[_0x57ab85(0x150)]||_0x5b44a8[_0x57ab85(0x153)],'codeExample':_0x2e84fc};return _0x49a5ce;});if(_0x242a5c){const _0x21a1de=_0x242a5c[_0x2c64ab(0x12f)]();_0x13f3cb=_0x13f3cb[_0x2c64ab(0x154)](_0x4ed81c=>_0x4ed81c[_0x2c64ab(0x152)][_0x2c64ab(0x12f)]()[_0x2c64ab(0x12b)](_0x21a1de)||_0x4ed81c['description']&&_0x4ed81c[_0x2c64ab(0x15a)]['toLowerCase']()[_0x2c64ab(0x12b)](_0x21a1de)||_0x4ed81c['sqlCode'][_0x2c64ab(0x12f)]()[_0x2c64ab(0x12b)](_0x21a1de)||_0x4ed81c[_0x2c64ab(0x151)]&&_0x4ed81c[_0x2c64ab(0x151)][_0x2c64ab(0x12f)]()['includes'](_0x21a1de));}_0x4fd986&&_0x4fd986!==_0x2c64ab(0x14c)&&(_0x13f3cb=_0x13f3cb[_0x2c64ab(0x154)](_0x3ca4ef=>_0x3ca4ef[_0x2c64ab(0x148)]&&_0x3ca4ef[_0x2c64ab(0x148)][_0x2c64ab(0x12f)]()===_0x4fd986[_0x2c64ab(0x12f)]()));const _0x3aaa75=Math['ceil'](_0x13f3cb[_0x2c64ab(0x15c)]/pageSize),_0x51a598=_0x13f3cb['slice']((currentPage-0x1)*pageSize,currentPage*pageSize),_0x42cd14=_0x51a598[_0x2c64ab(0x15c)]>0x0?_0x51a598[0x0]:null,_0x2b3d43=_0x42cd14?_0x2c64ab(0x12c)+_0x42cd14[_0x2c64ab(0x152)]+_0x2c64ab(0x143)+_0x42cd14[_0x2c64ab(0x146)]+'\x27);\x0aif\x20(!data.execSuccess)\x20{\x0a\x20\x20throw\x20new\x20Error(\x27SQL\x20execution\x20failed\x27);\x0a}\x0aconst\x20results\x20=\x20data.execResult\x20||\x20[];':'';return{'type':_0x2c64ab(0x138),'total':_0x13f3cb['length'],'sqls':_0x51a598,'pagination':{'currentPage':currentPage,'pageSize':pageSize,'totalPages':_0x3aaa75},'usage':{'description':_0x2c64ab(0x155)+_0x13f3cb[_0x2c64ab(0x15c)]+_0x2c64ab(0x122)+appCode+_0x2c64ab(0x135),'important':['IMPORTANT:\x20All\x20SQL\x20queries\x20use\x20the\x20same\x20execution\x20pattern\x20-\x20client.api.executeSql(sqlCode,\x20params)',_0x2c64ab(0x123),_0x2c64ab(0x139),'IMPORTANT:\x20Use\x20try-catch\x20to\x20handle\x20HTTP\x20errors\x20(network\x20issues,\x20auth\x20failures)',_0x2c64ab(0x15b),'Each\x20SQL\x20query\x20above\x20includes\x20a\x20codeExample\x20field\x20with\x20complete\x20TypeScript\x20code\x20ready\x20to\x20use',_0x2c64ab(0x130)],'example':_0x2b3d43||_0x2c64ab(0x13d)}};}catch(_0x496967){throw new Error(_0x2c64ab(0x128)+_0x496967['message']);}}function a17_0x960c(){const _0x4df48e=['createTime','\x27,\x0a\x20\x20env:\x20\x27','updatedTime','sqlContent','name','updateTime','filter','Found\x20','3mnECrP','On\x20HTTP\x20error,\x20SDK\x20throws\x20LovrabetError\x20exception\x20-\x20use\x20try-catch\x20for\x20error\x20handling','createdTime','911783nChLMk','description','IMPORTANT:\x20Business\x20logic\x20errors\x20(SQL\x20failures)\x20are\x20returned\x20in\x20data.execError,\x20not\x20thrown','length','32196IbWVbB',');\x0a\x0a//\x20IMPORTANT:\x20Check\x20execution\x20status\x20before\x20using\x20results\x0aif\x20(!data.execSuccess)\x20{\x0a\x20\x20throw\x20new\x20Error(`SQL\x20execution\x20failed:\x20${data.execError\x20||\x20\x27Unknown\x20error\x27}`);\x0a}\x0a\x0a//\x20Process\x20the\x20results\x0aconst\x20results\x20=\x20data.execResult\x20||\x20[];\x0aconsole.log(`Retrieved\x20${results.length}\x20rows`);\x0a\x0a//\x20Use\x20the\x20data\x0aresults.forEach(row\x20=>\x20{\x0a\x20\x20console.log(row);\x0a});','37740vOErRL','count','match','\x20SQL\x20queries\x20for\x20application\x20','IMPORTANT:\x20Always\x20check\x20data.execSuccess\x20before\x20using\x20data.execResult','stringify','string','This\x20SQL\x20does\x20not\x20require\x20any\x20parameters','Execute\x20SQL\x20query:\x20','Failed\x20to\x20list\x20SQL\x20queries:\x20','value','sqlId','includes','\x0a//\x20Example:\x20Using\x20SQL\x20\x22','273YwdzJr','SQL-','toLowerCase','For\x20more\x20customization,\x20use\x20generate_sql_code\x20tool\x20to\x20get\x20code\x20with\x20type\x20inference','143416LUanwK','reduce','\x0aconst\x20data\x20=\x20await\x20client.api.executeSql(\x27','Custom\x20SQL','.\x20Each\x20SQL\x20includes\x20a\x20complete\x20code\x20example\x20showing\x20how\x20to\x20execute\x20it\x20using\x20the\x20SDK.','import\x20{\x20LovrabetClient\x20}\x20from\x20\x27@lovrabet/sdk\x27;\x0a\x0a//\x20Initialize\x20the\x20SDK\x20client\x0aconst\x20client\x20=\x20new\x20LovrabetClient({\x0a\x20\x20appCode:\x20\x27','sql','sql_list','IMPORTANT:\x20The\x20SDK\x20returns\x20{\x20execSuccess:\x20boolean,\x20execResult?:\x20any[],\x20execError?:\x20string\x20}','data','2024-01-01','8983930NbjPMk','No\x20SQL\x20queries\x20found.\x20Check\x20your\x20appCode\x20and\x20authentication.','sqlType','1286380hmTZmB','example','other','type','\x22\x0aconst\x20data\x20=\x20await\x20client.api.executeSql(\x27','map','replace','sqlCode','total','category','117vWPgHt','1352665QullNX','sqlName','all','tableData'];a17_0x960c=function(){return _0x4df48e;};return a17_0x960c();}
|
package/dist/tools/login.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x1fcdf6,_0x4204f3){const _0x22ff6c=a18_0x475a,_0x236057=_0x1fcdf6();while(!![]){try{const _0x118eac=parseInt(_0x22ff6c(0x156))/0x1+parseInt(_0x22ff6c(0x164))/0x2+-parseInt(_0x22ff6c(0x16e))/0x3*(-parseInt(_0x22ff6c(0x16c))/0x4)+-parseInt(_0x22ff6c(0x15b))/0x5*(parseInt(_0x22ff6c(0x171))/0x6)+parseInt(_0x22ff6c(0x158))/0x7+parseInt(_0x22ff6c(0x174))/0x8+parseInt(_0x22ff6c(0x163))/0x9;if(_0x118eac===_0x4204f3)break;else _0x236057['push'](_0x236057['shift']());}catch(_0x12b630){_0x236057['push'](_0x236057['shift']());}}}(a18_0x16e7,0x2bc4d));import*as a18_0x42b958 from'node:https';import{saveCookie}from'../auth/cookie-manager.js';import{isSessionValid}from'../auth/session-validator.js';import{getUserDomain,getEnvironment}from'../config/env.js';export async function login(_0x3be5e6={}){const _0x375336=a18_0x475a,_0x569eda=getEnvironment();if(await isSessionValid())return{'success':!![],'message':'Already\x20logged\x20in\x20to\x20'+_0x569eda+_0x375336(0x157),'env':_0x569eda};let _0x4a2d8a;try{const _0x2fa46f=await fetch(_0x375336(0x159));_0x4a2d8a=await _0x2fa46f[_0x375336(0x176)]();}catch(_0x55be02){return{'success':![],'message':'Failed\x20to\x20fetch\x20SSL\x20certificates\x20for\x20login\x20server','env':_0x569eda};}return new Promise(_0x327935=>{const _0x95ba3a=_0x375336;let _0x52bd3c=0x0;const _0x4ee1df=a18_0x42b958[_0x95ba3a(0x161)](_0x4a2d8a,async(_0x46ecb7,_0x567564)=>{const _0x340631=_0x95ba3a,_0x10eefc=getUserDomain(),_0x130ac8=_0x46ecb7[_0x340631(0x15a)][_0x340631(0x162)]||'';try{const _0x1438cc=await fetch(_0x10eefc+_0x340631(0x16b),{'headers':{'cookie':_0x130ac8}}),_0xcafc2f=await _0x1438cc[_0x340631(0x176)](),_0x4160c1=_0xcafc2f&&_0xcafc2f[_0x340631(0x179)]&&_0xcafc2f[_0x340631(0x166)];if(_0x4160c1){try{saveCookie(_0x130ac8);}catch(_0x57a18d){const _0xe8c05b=_0x340631(0x15d)+_0x57a18d[_0x340631(0x16d)]+_0x340631(0x170);_0x567564[_0x340631(0x15e)](0x1f4,{'Content-Type':_0x340631(0x165)}),_0x567564[_0x340631(0x168)](_0xe8c05b),_0x4ee1df['close'](),_0x327935({'success':![],'message':_0x340631(0x17a)+_0x57a18d[_0x340631(0x16d)],'env':_0x569eda});return;}const _0x592404=_0x340631(0x16a);_0x567564[_0x340631(0x15e)](0xc8,{'Content-Type':'text/html;\x20charset=utf-8'}),_0x567564[_0x340631(0x168)](_0x592404),_0x4ee1df[_0x340631(0x15f)](),_0x327935({'success':!![],'message':_0x340631(0x173)+_0x569eda+'\x20environment','env':_0x569eda});}else{const _0x289c1d=encodeURIComponent(_0x340631(0x175)+_0x52bd3c);_0x567564['writeHead'](0x12e,{'location':_0x10eefc+_0x340631(0x15c)+_0x289c1d}),_0x567564[_0x340631(0x168)]();}}catch(_0x3f3092){_0x567564[_0x340631(0x15e)](0x1f4,{'Content-Type':_0x340631(0x178)}),_0x567564[_0x340631(0x168)](_0x340631(0x169)),_0x4ee1df['close'](),_0x327935({'success':![],'message':_0x340631(0x16f),'env':_0x569eda});}});_0x4ee1df[_0x95ba3a(0x17c)](0x0,'127.0.0.1',()=>{const _0x56c3f8=_0x95ba3a,_0x3856a1=_0x4ee1df[_0x56c3f8(0x160)]();_0x52bd3c=typeof _0x3856a1===_0x56c3f8(0x17b)&&_0x3856a1?_0x3856a1[_0x56c3f8(0x172)]:0x0;const _0x1d914d='https://dev.lovrabet.com:'+_0x52bd3c;_0x327935({'success':![],'message':_0x56c3f8(0x177)+_0x1d914d,'loginUrl':_0x1d914d,'env':_0x569eda});}),_0x4ee1df['on'](_0x95ba3a(0x167),_0x234764=>{const _0x125259=_0x95ba3a;_0x327935({'success':![],'message':'Login\x20server\x20error:\x20'+_0x234764[_0x125259(0x16d)],'env':_0x569eda});}),setTimeout(()=>{const _0x42057e=_0x95ba3a;_0x4ee1df[_0x42057e(0x15f)](),_0x327935({'success':![],'message':'Login\x20timeout\x20-\x20no\x20response\x20received\x20within\x205\x20minutes','env':_0x569eda});},0x5*0x3c*0x3e8);});}function a18_0x475a(_0x21c69f,_0x1b6d30){_0x21c69f=_0x21c69f-0x156;const _0x16e756=a18_0x16e7();let _0x475a80=_0x16e756[_0x21c69f];return _0x475a80;}function a18_0x16e7(){const _0x13c212=['writeHead','close','address','createServer','cookie','491373jfWwbB','115260TwHefd','text/html;\x20charset=utf-8','user','error','end','Internal\x20server\x20error','<!doctype\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>Login\x20Successful</title></head>\x0a<body>\x0a\x20\x20<div>Login\x20successful!\x20You\x20can\x20close\x20this\x20window\x20and\x20return\x20to\x20your\x20vibe\x20editor.</div>\x0a\x20\x20<script>\x0a\x20\x20\x20\x20setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x20window.close();\x20}\x20catch(e)\x20{}\x0a\x20\x20\x20\x20},\x202000);\x0a\x20\x20</script>\x0a</body>\x0a</html>','/api/auth/get-session','8392feDgeN','message','45akrcza','Login\x20server\x20error','</p>\x0a\x20\x20\x20\x20<p>Please\x20check\x20file\x20permissions\x20for\x20~/.lovrabet/cookie</p>\x0a\x20\x20</div>\x0a</body>\x0a</html>','90798wSwTNl','port','Successfully\x20logged\x20in\x20to\x20','48456vLYhRS','https://dev.lovrabet.com:','json','Please\x20open\x20this\x20URL\x20in\x20your\x20browser\x20to\x20login:\x20','text/plain','session','Login\x20successful\x20but\x20failed\x20to\x20save\x20cookie:\x20','object','listen','200321LAUkRO','\x20environment','1240827vGHyhF','https://g.yuntooai.com/cert/lovrabet-dev.json','headers','115zWJAYJ','/sign-in?redirect=','<!doctype\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>Login\x20Failed</title></head>\x0a<body>\x0a\x20\x20<div\x20style=\x22color:\x20red;\x22>\x0a\x20\x20\x20\x20<h2>Login\x20Successful,\x20but\x20Failed\x20to\x20Save\x20Cookie</h2>\x0a\x20\x20\x20\x20<p>Error:\x20'];a18_0x16e7=function(){return _0x13c212;};return a18_0x16e7();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x7e0eaa,_0x293814){const _0x76630f=a19_0xd4d9,_0x142b92=_0x7e0eaa();while(!![]){try{const _0x161426=-parseInt(_0x76630f(0x135))/0x1*(parseInt(_0x76630f(0x13d))/0x2)+-parseInt(_0x76630f(0x107))/0x3+-parseInt(_0x76630f(0x11f))/0x4+parseInt(_0x76630f(0x12c))/0x5+parseInt(_0x76630f(0x12a))/0x6+-parseInt(_0x76630f(0x114))/0x7+-parseInt(_0x76630f(0x113))/0x8*(-parseInt(_0x76630f(0x12d))/0x9);if(_0x161426===_0x293814)break;else _0x142b92['push'](_0x142b92['shift']());}catch(_0x2dd5e2){_0x142b92['push'](_0x142b92['shift']());}}}(a19_0x3d2c,0x7c50d));import{DevApiClient}from'../api/dev-api-client.js';function a19_0xd4d9(_0x11b233,_0x14d259){_0x11b233=_0x11b233-0x103;const _0x3d2cf2=a19_0x3d2c();let _0xd4d99=_0x3d2cf2[_0x11b233];return _0xd4d99;}import{detectSqlType,parseSqlStructure,generateSqlSummary}from'../utils/sql-parser.js';import{getEnvAppCode,getEnvironment,shouldLog}from'../config/env.js';import{rateLimiters}from'../utils/rate-limiter.js';function a19_0x3d2c(){const _0x1cc50f=['sqlId','⚠️\x20检测到\x20','parameters','execute_custom_sql','Verify\x20database\x20ID\x20is\x20correct','saveUserCustomSql','created','Ensure\x20you\x20are\x20logged\x20in\x20with\x20proper\x20permissions','\x20语句(会修改数据/结构),为安全起见不会自动保存到\x20Lovrabet\x20平台','Failed\x20to\x20','\x20custom\x20SQL','将此\x20SQL\x20保存到本地文件(手动导入到\x20Lovrabet\x20平台)','670263ebrEYh','isDangerous','sqlInfo','\x20语句,不会自动保存到\x20Lovrabet\x20平台','appCode\x20is\x20required.\x20Provide\x20it\x20as\x20parameter\x20or\x20set\x20LOVRABET_APP_CODE\x20environment\x20variable.','isSelectOnly','updated','save','id\x20is\x20required\x20for\x20updating\x20existing\x20SQL.','message','sqlCode','[saveOrUpdateCustomSql]\x20Verification\x20query\x20failed:','8UIkgLA','529704qrnWFm','Confirm\x20the\x20dbId\x20matches\x20the\x20database\x20you\x20want\x20to\x20use','SQL\x20\x22','medium','verified','\x22\x20保存被阻止:\x20','Check\x20database\x20connection\x20and\x20permissions','如果只需要查询数据,请使用\x20SELECT\x20语句','getCustomSqlList','columns','params','2199328vWYUrY','sqlContent','find','sqlContent\x20is\x20required\x20and\x20cannot\x20be\x20empty.','now','generate_sql_code','updatedTime','dbId\x20is\x20required.\x20Get\x20it\x20from\x20get_dataset_detail\x20->\x20basic.database.dbId','修改\x20SQL\x20为\x20SELECT\x20查询','tables','data','2630466VIqbiw','get_dataset_detail','4505415lKfbsW','7689357BVifNx','success','Custom\x20SQL\x20\x22','trim','<dataset-code>','sqlSave','sqlName\x20is\x20required\x20and\x20cannot\x20be\x20empty.','name','167149JwpbnB','warn','high','createdTime','sqlName','Generate\x20SDK\x20code\x20for\x20this\x20SQL','Test\x20the\x20SQL\x20to\x20verify\x20it\x20works\x20correctly','errorMsg','10SksMlw','updateUserCustomSql','updateTime','type'];a19_0x3d2c=function(){return _0x1cc50f;};return a19_0x3d2c();}export async function saveOrUpdateCustomSql(_0x2ea178){const _0x1d0960=a19_0xd4d9,_0x154854=Date[_0x1d0960(0x123)](),{appCode:appCode=getEnvAppCode(),cookie:_0x250d1f,sqlName:_0x1939bd,dbId:_0x35c3e6,sqlContent:_0x5dd43e,id:_0x47e979,verifyAfterSave:verifyAfterSave=!![],validateSchema:validateSchema=![]}=_0x2ea178;if(!appCode)throw new Error(_0x1d0960(0x10b));if(!_0x1939bd||_0x1939bd[_0x1d0960(0x130)]()==='')throw new Error(_0x1d0960(0x133));if(!_0x35c3e6)throw new Error(_0x1d0960(0x126));if(!_0x5dd43e||_0x5dd43e[_0x1d0960(0x130)]()==='')throw new Error(_0x1d0960(0x122));const _0x5390bf=_0x47e979!==undefined&&_0x47e979>0x0;if(_0x5390bf&&!_0x47e979)throw new Error(_0x1d0960(0x10f));const _0x15adc5=detectSqlType(_0x5dd43e),_0x116eb6=parseSqlStructure(_0x5dd43e),_0x21668c=generateSqlSummary(_0x5dd43e),_0xf91a87=_0x1939bd['trim']();if(!_0x15adc5[_0x1d0960(0x10c)]){const _0x1cad86=_0x15adc5[_0x1d0960(0x108)]?_0x1d0960(0x142)+_0x15adc5[_0x1d0960(0x140)]+_0x1d0960(0x103):'检测到\x20'+_0x15adc5[_0x1d0960(0x140)]+_0x1d0960(0x10a);return{'success':![],'action':'blocked','message':_0x1d0960(0x116)+_0xf91a87+_0x1d0960(0x119)+_0x1cad86,'nextSteps':[{'action':_0x1d0960(0x106),'reason':'使用文件写入工具将\x20SQL\x20保存到本地,然后登录\x20Lovrabet\x20平台手动导入','priority':_0x1d0960(0x137)},{'action':_0x1d0960(0x127),'reason':_0x1d0960(0x11b),'priority':_0x1d0960(0x117)}],'parsedStructure':{'tables':_0x116eb6['tables'],'columns':_0x116eb6[_0x1d0960(0x11d)]['length'],'parameters':_0x116eb6[_0x1d0960(0x143)],'summary':_0x21668c},'sqlType':{'type':_0x15adc5['type'],'isSelectOnly':![],'isDangerous':_0x15adc5[_0x1d0960(0x108)],'warning':_0x1cad86}};}const _0x5cdd99=new DevApiClient({'appCode':appCode,'cookie':_0x250d1f}),_0x1482bf=getEnvironment();let _0x347ba0;_0x5390bf?_0x347ba0=await rateLimiters[_0x1d0960(0x132)]['throttle'](()=>_0x5cdd99[_0x1d0960(0x13e)]({'id':_0x47e979,'sqlName':_0xf91a87,'dbId':_0x35c3e6,'sqlContent':_0x5dd43e['trim']()})):_0x347ba0=await rateLimiters['sqlSave']['throttle'](()=>_0x5cdd99[_0x1d0960(0x146)]({'sqlName':_0xf91a87,'dbId':_0x35c3e6,'sqlContent':_0x5dd43e[_0x1d0960(0x130)]()}));const _0x2b5b62=Date[_0x1d0960(0x123)]()-_0x154854;if(!_0x347ba0[_0x1d0960(0x12e)])return{'success':![],'action':_0x5390bf?_0x1d0960(0x10d):_0x1d0960(0x147),'message':_0x347ba0[_0x1d0960(0x110)]||_0x347ba0[_0x1d0960(0x13c)]||_0x1d0960(0x104)+(_0x5390bf?'update':_0x1d0960(0x10e))+_0x1d0960(0x105),'nextSteps':[{'action':_0x1d0960(0x11a),'tool':'login','reason':_0x1d0960(0x148)},{'action':_0x1d0960(0x145),'tool':_0x1d0960(0x12b),'params':{'datasetCode':_0x1d0960(0x131)},'reason':_0x1d0960(0x115)}],'sqlType':{'type':_0x15adc5[_0x1d0960(0x140)],'isSelectOnly':!![],'isDangerous':![]}};const _0x1097b0=_0x347ba0['data']?.[_0x1d0960(0x111)]||_0x347ba0[_0x1d0960(0x129)]?.['code'],_0x4ac1dd=_0x347ba0[_0x1d0960(0x129)]?.[_0x1d0960(0x141)]||_0x347ba0[_0x1d0960(0x129)]?.['id'],_0x2641f8=[{'action':_0x1d0960(0x13b),'tool':_0x1d0960(0x144),'params':{'sqlCode':_0x1097b0||''},'reason':'Execute\x20the\x20SQL\x20to\x20check\x20for\x20runtime\x20errors','priority':'high'},{'action':_0x1d0960(0x13a),'tool':_0x1d0960(0x124),'params':{'sqlCode':_0x1097b0||''},'reason':'Get\x20ready-to-use\x20TypeScript\x20code\x20for\x20your\x20application','priority':_0x1d0960(0x117)}],_0x50528b={'success':!![],'action':_0x5390bf?_0x1d0960(0x10d):_0x1d0960(0x147),'message':_0x5390bf?_0x1d0960(0x12f)+_0xf91a87+'\x22\x20updated\x20successfully\x20('+_0x21668c+')':_0x1d0960(0x12f)+_0xf91a87+'\x22\x20saved\x20successfully\x20('+_0x21668c+')','nextSteps':_0x2641f8,'parsedStructure':{'tables':_0x116eb6[_0x1d0960(0x128)],'columns':_0x116eb6[_0x1d0960(0x11d)]['length'],'parameters':_0x116eb6[_0x1d0960(0x143)],'summary':_0x21668c},'sqlType':{'type':_0x15adc5['type'],'isSelectOnly':!![],'isDangerous':![]},'data':_0x347ba0['data']};if(verifyAfterSave)try{const _0x4d8b60=await _0x5cdd99[_0x1d0960(0x11c)]({'pageSize':0xa,'currentPage':0x1,'sqlName':_0xf91a87}),_0x4cc04a=_0x4d8b60[_0x1d0960(0x129)]?.['tableData']||[],_0x3af9cc=_0x4cc04a[_0x1d0960(0x121)](_0x86f265=>_0x86f265['sqlName']===_0xf91a87||_0x86f265[_0x1d0960(0x134)]===_0xf91a87);_0x3af9cc?(_0x50528b[_0x1d0960(0x118)]={'found':!![],'sqlInfo':{'sqlCode':_0x3af9cc[_0x1d0960(0x111)]||appCode+'-'+(_0x3af9cc[_0x1d0960(0x141)]||_0x3af9cc['id']),'sqlId':_0x3af9cc[_0x1d0960(0x141)]||_0x3af9cc['id'],'id':_0x3af9cc['id'],'name':_0x3af9cc[_0x1d0960(0x139)]||_0x3af9cc[_0x1d0960(0x134)],'sqlContent':_0x3af9cc[_0x1d0960(0x120)]||_0x3af9cc['sql'],'createdTime':_0x3af9cc[_0x1d0960(0x138)]||_0x3af9cc['createTime'],'updatedTime':_0x3af9cc[_0x1d0960(0x125)]||_0x3af9cc[_0x1d0960(0x13f)]}},_0x50528b[_0x1d0960(0x118)][_0x1d0960(0x109)]?.['sqlCode']&&(_0x2641f8[0x0][_0x1d0960(0x11e)]={'sqlCode':_0x50528b[_0x1d0960(0x118)][_0x1d0960(0x109)][_0x1d0960(0x111)]},_0x2641f8[0x1][_0x1d0960(0x11e)]={'sqlCode':_0x50528b[_0x1d0960(0x118)][_0x1d0960(0x109)][_0x1d0960(0x111)]})):_0x50528b['verified']={'found':![]};}catch(_0x4a5a07){shouldLog()&&console[_0x1d0960(0x136)](_0x1d0960(0x112),_0x4a5a07),_0x50528b[_0x1d0960(0x118)]={'found':![]};}return _0x50528b;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0xd61c21,_0x46988d){const _0x4250d1=a20_0x4ede,_0x39eca0=_0xd61c21();while(!![]){try{const _0x52fc2b=-parseInt(_0x4250d1(0x17f))/0x1+-parseInt(_0x4250d1(0x185))/0x2*(-parseInt(_0x4250d1(0x17a))/0x3)+-parseInt(_0x4250d1(0x186))/0x4+-parseInt(_0x4250d1(0x17d))/0x5+-parseInt(_0x4250d1(0x17c))/0x6*(parseInt(_0x4250d1(0x189))/0x7)+-parseInt(_0x4250d1(0x187))/0x8+parseInt(_0x4250d1(0x17e))/0x9;if(_0x52fc2b===_0x46988d)break;else _0x39eca0['push'](_0x39eca0['shift']());}catch(_0x404e6c){_0x39eca0['push'](_0x39eca0['shift']());}}}(a20_0x161d,0xb7772));import{DevApiClient}from'../api/dev-api-client.js';function a20_0x4ede(_0x390d65,_0x4b6dc3){_0x390d65=_0x390d65-0x178;const _0x161ddc=a20_0x161d();let _0x4ede57=_0x161ddc[_0x390d65];return _0x4ede57;}import{DatasetAnalyzer}from'../analyzer/dataset-analyzer.js';import{getEnvAppCode,getEnvironment}from'../config/env.js';export async function searchDatasets(_0x3b6744){const _0x2fcc32=a20_0x4ede,{appCode:appCode=getEnvAppCode(),cookie:_0x16e190,keyword:_0x33481c}=_0x3b6744;if(!appCode)throw new Error(_0x2fcc32(0x181));if(!_0x33481c)throw new Error(_0x2fcc32(0x183));const _0x1a9605=new DevApiClient({'appCode':appCode,'cookie':_0x16e190}),_0x409f78=getEnvironment(),_0xdadce=await _0x1a9605[_0x2fcc32(0x180)](_0x33481c),_0xfa07b3=new DatasetAnalyzer(),_0x15e1fa=_0xfa07b3[_0x2fcc32(0x182)](_0xdadce);return{'appCode':appCode,'env':_0x409f78,'keyword':_0x33481c,'total':_0x15e1fa[_0x2fcc32(0x18a)],'datasets':_0x15e1fa[_0x2fcc32(0x184)][_0x2fcc32(0x178)](_0x3f8e71=>({'id':_0x3f8e71['id'],'name':_0x3f8e71['name'],'code':_0x3f8e71[_0x2fcc32(0x188)],'tableName':_0x3f8e71[_0x2fcc32(0x17b)],'description':_0x3f8e71[_0x2fcc32(0x179)]}))};}function a20_0x161d(){const _0x1709d7=['total','map','description','42WMuTxB','tableName','42HHSXyd','1244895ieSAUJ','50302863ZfJnNq','1244890phmyad','searchDatasets','appCode\x20is\x20required.\x20Provide\x20it\x20as\x20parameter\x20or\x20set\x20LOVRABET_APP_CODE\x20environment\x20variable.','analyzeDatasetList','keyword\x20is\x20required','datasets','18862YksZte','4309080qaEmDc','8550312HcxYht','code','1329839etNwHo'];a20_0x161d=function(){return _0x1709d7;};return a20_0x161d();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x47f1a8,_0x47e248){const _0x171036=a21_0x3f45,_0x476a6e=_0x47f1a8();while(!![]){try{const _0x2f3df1=-parseInt(_0x171036(0xd8))/0x1+parseInt(_0x171036(0xc6))/0x2+parseInt(_0x171036(0xc2))/0x3*(parseInt(_0x171036(0xd9))/0x4)+-parseInt(_0x171036(0xb9))/0x5+-parseInt(_0x171036(0xba))/0x6+parseInt(_0x171036(0xbd))/0x7*(-parseInt(_0x171036(0xbc))/0x8)+parseInt(_0x171036(0xe9))/0x9;if(_0x2f3df1===_0x47e248)break;else _0x476a6e['push'](_0x476a6e['shift']());}catch(_0x3b5e2e){_0x476a6e['push'](_0x476a6e['shift']());}}}(a21_0xd5e9,0x4c27e));function a21_0x3f45(_0x53697f,_0x15b0d4){_0x53697f=_0x53697f-0xaf;const _0xd5e942=a21_0xd5e9();let _0x3f4574=_0xd5e942[_0x53697f];return _0x3f4574;}import{DevApiClient}from'../api/dev-api-client.js';import{detectSqlType,parseSqlStructure,validateSqlContent as a21_0x2b9f8c,generateSqlSummary}from'../utils/sql-parser.js';import{getEnvAppCode,shouldLog}from'../config/env.js';async function fetchSchemaInfo(_0x20abbf,_0x4a490f){const _0x47e273=a21_0x3f45,_0x3ba140=[];for(const _0x31eec4 of _0x20abbf){try{const _0x440925=/^\d+$/['test'](_0x31eec4);let _0x17ce56=_0x31eec4;if(!_0x440925){const _0x4fa305=await _0x4a490f[_0x47e273(0xc7)](),_0x48335c=_0x4fa305[_0x47e273(0xb6)]?.[_0x47e273(0xcd)]||[],_0x34abfe=_0x48335c['find'](_0x5d6d34=>_0x5d6d34[_0x47e273(0xbf)]===_0x31eec4);if(!_0x34abfe)continue;_0x17ce56=String(_0x34abfe['id']);}const _0x1d06fd=await _0x4a490f[_0x47e273(0xd3)](_0x17ce56),_0x1ec65c=_0x1d06fd['data']?.[_0x47e273(0xd4)]||'',_0x3dbfff=_0x1d06fd[_0x47e273(0xb6)]?.[_0x47e273(0xb0)]||[],_0x43a390=_0x3dbfff[_0x47e273(0xc9)](_0x2cef92=>_0x2cef92[_0x47e273(0xbf)]||_0x2cef92[_0x47e273(0xb1)]);_0x1ec65c&&_0x43a390['length']>0x0&&_0x3ba140[_0x47e273(0xd5)]({'tableName':_0x1ec65c,'columns':_0x43a390});}catch(_0x321499){shouldLog()&&console[_0x47e273(0xdc)](_0x47e273(0xd6)+_0x31eec4+':',_0x321499);}}return _0x3ba140;}export async function validateSqlContentTool(_0x46cd21){const _0x2c2443=a21_0x3f45,{appCode:appCode=getEnvAppCode(),cookie:_0x4ce358,sqlContent:_0x5d35fd,dbId:_0x45f221,validateSchemas:validateSchemas=[]}=_0x46cd21;if(!_0x5d35fd||_0x5d35fd[_0x2c2443(0xb3)]()==='')return{'success':![],'message':_0x2c2443(0xcc),'sqlContent':'','parsedStructure':{'tables':[],'columns':[],'parameters':[]},'schemaValidation':{'valid':![]},'sqlType':{'type':_0x2c2443(0xc1),'isSelectOnly':![],'isDangerous':![]},'nextSteps':[{'action':'Provide\x20SQL\x20content\x20to\x20validate','tool':_0x2c2443(0xdf),'reason':_0x2c2443(0xea)}]};const _0x3d5519=detectSqlType(_0x5d35fd),_0x3ab145=parseSqlStructure(_0x5d35fd),_0x4f22a4=generateSqlSummary(_0x5d35fd);let _0x481ac8;if(validateSchemas[_0x2c2443(0xe4)]>0x0&&appCode){const _0x289b93=new DevApiClient({'appCode':appCode,'cookie':_0x4ce358});_0x481ac8=await fetchSchemaInfo(validateSchemas,_0x289b93);}const _0x4c7a08=a21_0x2b9f8c(_0x5d35fd,_0x481ac8?{'tables':_0x481ac8}:undefined),_0x2d31e7=[];if(_0x4c7a08[_0x2c2443(0xb5)]){if(_0x3d5519['isSelectOnly'])_0x45f221?_0x2d31e7[_0x2c2443(0xd5)]({'action':_0x2c2443(0xd0),'tool':_0x2c2443(0xc5),'params':{'sqlName':_0x2c2443(0xc0),'dbId':_0x45f221,'sqlContent':_0x5d35fd},'reason':_0x2c2443(0xe0),'priority':_0x2c2443(0xc8)}):_0x2d31e7[_0x2c2443(0xd5)]({'action':'获取数据库\x20ID\x20以保存\x20SQL','tool':_0x2c2443(0xc4),'params':{'datasetCode':_0x2c2443(0xbb)},'reason':_0x2c2443(0xe7),'priority':_0x2c2443(0xc8)});else{const _0x53edd2=_0x3d5519[_0x2c2443(0xbe)]?_0x2c2443(0xe1)+_0x3d5519[_0x2c2443(0xaf)]+'\x20语句(会修改数据/结构)':_0x2c2443(0xcb)+_0x3d5519[_0x2c2443(0xaf)]+_0x2c2443(0xe6);_0x2d31e7['push']({'action':_0x2c2443(0xc3),'reason':_0x53edd2+_0x2c2443(0xdb),'priority':_0x2c2443(0xc8)});}}else _0x2d31e7['push']({'action':_0x2c2443(0xde),'tool':_0x2c2443(0xdf),'reason':_0x2c2443(0xda),'priority':_0x2c2443(0xc8)});if(!_0x4c7a08[_0x2c2443(0xb5)]&&_0x4c7a08[_0x2c2443(0xd7)]&&_0x4c7a08[_0x2c2443(0xd7)][_0x2c2443(0xe4)]>0x0)for(const _0x2769a9 of _0x4c7a08[_0x2c2443(0xd7)]){if(_0x2769a9[_0x2c2443(0xaf)]===_0x2c2443(0xb2)||_0x2769a9[_0x2c2443(0xaf)]===_0x2c2443(0xe8)){_0x2d31e7[_0x2c2443(0xd5)]({'action':_0x2c2443(0xe3),'tool':_0x2c2443(0xc4),'params':{'datasetCode':'<dataset-code>'},'reason':_0x2769a9[_0x2c2443(0xca)][0x0]?.[_0x2c2443(0xd2)]||_0x2769a9[_0x2c2443(0xb8)],'priority':_0x2c2443(0xdd)});break;}}!_0x4c7a08['valid']&&_0x4c7a08[_0x2c2443(0xd7)]&&_0x4c7a08[_0x2c2443(0xd7)][_0x2c2443(0xd1)](_0x4e0222=>_0x4e0222[_0x2c2443(0xaf)]===_0x2c2443(0xe8))&&_0x2d31e7[_0x2c2443(0xd5)]({'action':_0x2c2443(0xe5),'tool':_0x2c2443(0xce),'reason':'查找正确的表名','priority':_0x2c2443(0xdd)});let _0xa2261='';if(_0x3d5519[_0x2c2443(0xb7)])_0xa2261=_0x4c7a08[_0x2c2443(0xb5)]?'✓\x20SELECT\x20查询':_0x2c2443(0xb4);else _0x3d5519[_0x2c2443(0xbe)]?_0xa2261=_0x2c2443(0xcf)+_0x3d5519[_0x2c2443(0xaf)]+'\x20语句(会修改数据/结构)':_0xa2261=_0x3d5519['type']+_0x2c2443(0xe6);const _0x209442=_0x4c7a08['valid']?'':_0x2c2443(0xe2),_0x41d5a6=_0x4f22a4?'\x20('+_0x4f22a4+')':'',_0x56c7f8=!_0x4c7a08['valid']&&_0x4c7a08[_0x2c2443(0xd7)]?','+_0x4c7a08[_0x2c2443(0xd7)][_0x2c2443(0xe4)]+'\x20个错误':'';return{'success':_0x4c7a08[_0x2c2443(0xb5)]||!![],'message':''+_0xa2261+_0x209442+_0x41d5a6+_0x56c7f8,'sqlContent':_0x5d35fd,'parsedStructure':_0x3ab145,'schemaValidation':{'valid':_0x4c7a08[_0x2c2443(0xb5)],'errors':_0x4c7a08['errors']},'sqlType':_0x3d5519,'nextSteps':_0x2d31e7};}function a21_0xd5e9(){const _0x18d1a3=['map','fixSteps','检测到\x20','SQL\x20content\x20is\x20required','tableData','list_datasets','⚠️\x20','保存此\x20SELECT\x20查询到\x20Lovrabet\x20平台','some','description','getDatasetDetail','tableName','push','[validateSqlContent]\x20Failed\x20to\x20fetch\x20schema\x20for\x20','errors','69412gimARb','4HmSIcZ','请先修复识别出的表/字段错误',',为安全起见建议手动保存。请使用文件写入工具保存,然后手动导入','warn','medium','修复\x20SQL\x20错误后再保存','validate_sql_content','SQL\x20验证通过且为\x20SELECT\x20查询,可以保存到平台','⚠️\x20检测到\x20',',存在错误','获取数据集详情以找到正确的表/字段名','length','列出所有可用的数据集','\x20语句','需要从数据集详情中获取\x20dbId\x20来保存\x20SQL','TABLE_NOT_FOUND','3807342xqClkI','SQL\x20content\x20cannot\x20be\x20empty','type','properties','fieldCode','COLUMN_NOT_FOUND','trim','⚠️\x20SELECT\x20查询存在问题','valid','data','isSelectOnly','typeLabel','219570pZHMYj','1187058htPzGO','<dataset-code>','141264KfozZy','112cBHdEC','isDangerous','code','<sql-name>','UNKNOWN','218883ZdXHrP','将此\x20SQL\x20保存到本地文件(手动导入到\x20Lovrabet\x20平台)','get_dataset_detail','save_or_update_custom_sql','819264jntJXB','getDatasetList','high'];a21_0xd5e9=function(){return _0x18d1a3;};return a21_0xd5e9();}export{validateSqlContentTool as validateSqlContent};
|
package/dist/types/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function a22_0x2ef0(){var _0x4a6143=['22cpJHgY','419732QjedMd','6128843eIXJmz','39kiSKlQ','2550046tWljme','2936988PMAraL','2285ZIidfJ','32ezJfTQ','568396QjaocT','3342xopxru','1618730strWXd'];a22_0x2ef0=function(){return _0x4a6143;};return a22_0x2ef0();}(function(_0x1ef7c5,_0xa0aa2b){var _0x47ac3a=a22_0x4198,_0x4d355a=_0x1ef7c5();while(!![]){try{var _0x5e7b88=-parseInt(_0x47ac3a(0x1f9))/0x1+parseInt(_0x47ac3a(0x1f5))/0x2+parseInt(_0x47ac3a(0x1f4))/0x3*(-parseInt(_0x47ac3a(0x1fd))/0x4)+-parseInt(_0x47ac3a(0x1f7))/0x5*(parseInt(_0x47ac3a(0x1fa))/0x6)+parseInt(_0x47ac3a(0x1fe))/0x7+-parseInt(_0x47ac3a(0x1f8))/0x8*(-parseInt(_0x47ac3a(0x1f6))/0x9)+parseInt(_0x47ac3a(0x1fb))/0xa*(-parseInt(_0x47ac3a(0x1fc))/0xb);if(_0x5e7b88===_0xa0aa2b)break;else _0x4d355a['push'](_0x4d355a['shift']());}catch(_0x23207d){_0x4d355a['push'](_0x4d355a['shift']());}}}(a22_0x2ef0,0xe6bb8));function a22_0x4198(_0x1abf90,_0x9aa8ac){_0x1abf90=_0x1abf90-0x1f4;var _0x2ef000=a22_0x2ef0();var _0x4198c1=_0x2ef000[_0x1abf90];return _0x4198c1;}export{createError,createAuthError,createMissingParamError,createDatasetNotFoundError,createSqlNotFoundError,createSqlValidationError,createStructuredSqlError,fromLovrabetError,SQL_ERROR_TYPE_LABELS}from'./mcp-types.js';
|
package/dist/types/mcp-types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function a23_0x116b(){const _0x48e5e6=['toISOString','severity','UNKNOWN_ERROR','SQL_NOT_FOUND','error','获取数据集详情以确认表名和字段名','code','类型不匹配','DATASET_NOT_FOUND','toolParams','确保\x20SELECT\x20语句格式正确,如:\x20SELECT\x20id,\x20name\x20FROM\x20table\x20WHERE\x20status\x20=\x201','AUTH_REQUIRED','7346siuHXy','784gyzWMB','语法错误','2248218HJqtpU','canAutoFix','5590mnYxCH','检查\x20SQL\x20语法,确保关键字拼写正确、括号匹配','70440NXefen','SQL_VALIDATION_FAILED','list_datasets','description','6372ewrSMd','使用\x20get_dataset_detail\x20工具查看数据集的所有字段','缺少\x20WHERE\x20条件','数据集不存在:\x20','查看所有可用的数据集','suggestions','list_sql_queries','SQL\x20不存在:\x20','location','10PVQzQn','NETWORK_ERROR','SQL_EXECUTION_FAILED','字段名歧义','fixedSql','message','530562ZNVjOz','list_datasets({\x20pageSize:\x20999\x20})','fixSteps','PARAMETER_MISSING','222znlTAZ','API_ERROR','查看所有可用的\x20SQL\x20查询','不安全的查询','<dataset-code>','PARAMETER_INVALID','需要登录才能访问\x20Lovrabet\x20数据。请先使用\x20login\x20工具进行登录。','SYNTAX_ERROR','response','status','push','get_dataset_detail','type','731130CjKdoe'];a23_0x116b=function(){return _0x48e5e6;};return a23_0x116b();}const a23_0x3ee16e=a23_0x294f;(function(_0x9caaa9,_0x39f9b2){const _0x17c8f9=a23_0x294f,_0x15c228=_0x9caaa9();while(!![]){try{const _0x3bdd42=parseInt(_0x17c8f9(0xf7))/0x1+-parseInt(_0x17c8f9(0xd9))/0x2+parseInt(_0x17c8f9(0xdd))/0x3*(-parseInt(_0x17c8f9(0xf8))/0x4)+-parseInt(_0x17c8f9(0xd3))/0x5*(parseInt(_0x17c8f9(0xea))/0x6)+parseInt(_0x17c8f9(0xfa))/0x7+parseInt(_0x17c8f9(0xfe))/0x8+-parseInt(_0x17c8f9(0xca))/0x9*(-parseInt(_0x17c8f9(0xfc))/0xa);if(_0x3bdd42===_0x39f9b2)break;else _0x15c228['push'](_0x15c228['shift']());}catch(_0x3c9c3e){_0x15c228['push'](_0x15c228['shift']());}}}(a23_0x116b,0x332c2));function a23_0x294f(_0x1e76ec,_0x2ae715){_0x1e76ec=_0x1e76ec-0xc7;const _0x116bcb=a23_0x116b();let _0x294fa4=_0x116bcb[_0x1e76ec];return _0x294fa4;}export const SQL_ERROR_TYPE_LABELS={'TABLE_NOT_FOUND':'表不存在','COLUMN_NOT_FOUND':'字段不存在','AMBIGUOUS_COLUMN':a23_0x3ee16e(0xd6),'SYNTAX_ERROR':a23_0x3ee16e(0xf9),'TYPE_MISMATCH':a23_0x3ee16e(0xf2),'MISSING_WHERE_CLAUSE':a23_0x3ee16e(0xcc),'UNSAFE_QUERY':a23_0x3ee16e(0xe0)};export function createError(_0xdc92f2){const _0x242834=a23_0x3ee16e;return{'error':!![],'code':_0xdc92f2[_0x242834(0xf1)],'message':_0xdc92f2[_0x242834(0xd8)],'status':_0xdc92f2[_0x242834(0xe6)],'description':_0xdc92f2[_0x242834(0xc9)],'response':_0xdc92f2[_0x242834(0xe5)],'suggestedAction':_0xdc92f2['suggestedAction'],'recoverable':_0xdc92f2['recoverable']??!![],'timestamp':new Date()[_0x242834(0xeb)]()};}export function createAuthError(){const _0x29c09b=a23_0x3ee16e;return createError({'code':_0x29c09b(0xf6),'message':_0x29c09b(0xe3),'suggestedAction':{'tool':'login','description':'登录到\x20Lovrabet\x20平台','example':'login({\x20env:\x20\x22online\x22\x20})'},'recoverable':!![]});}export function createMissingParamError(_0x5a3a95,_0xd53ed9){const _0x259639=a23_0x3ee16e;return createError({'code':_0x259639(0xdc),'message':'缺少必需参数:\x20'+_0x5a3a95+(_0xd53ed9?'\x20('+_0xd53ed9+')':''),'recoverable':!![]});}export function createDatasetNotFoundError(_0x5ec455){const _0x25b775=a23_0x3ee16e;return createError({'code':_0x25b775(0xf3),'message':_0x25b775(0xcd)+_0x5ec455,'suggestedAction':{'tool':'list_datasets','description':_0x25b775(0xce),'example':_0x25b775(0xda)},'recoverable':!![]});}export function createSqlNotFoundError(_0x217c73){const _0x525350=a23_0x3ee16e;return createError({'code':_0x525350(0xee),'message':_0x525350(0xd1)+_0x217c73,'suggestedAction':{'tool':_0x525350(0xd0),'description':_0x525350(0xdf),'example':'list_sql_queries({\x20pageSize:\x20999\x20})'},'recoverable':!![]});}export function createSqlValidationError(_0x4d2d27){const _0x4269d7=a23_0x3ee16e,_0x3f55b5=_0x4d2d27['fixSteps']['length']>0x0,_0x55df4a=_0x3f55b5?_0x4d2d27['fixSteps'][0x0]:undefined,_0x1b1922={'type':_0x4d2d27['type'],'typeLabel':_0x4d2d27['typeLabel'],'location':_0x4d2d27[_0x4269d7(0xd2)],'severity':_0x4d2d27[_0x4269d7(0xec)],'fixSteps':_0x4d2d27[_0x4269d7(0xdb)],'suggestions':_0x4d2d27[_0x4269d7(0xcf)],'canAutoFix':_0x4d2d27[_0x4269d7(0xfb)],'fixedSql':_0x4d2d27[_0x4269d7(0xd7)]};return createError({'code':_0x4269d7(0xc7),'message':_0x4d2d27['typeLabel']+':\x20'+_0x4d2d27['message'],'status':_0x4d2d27[_0x4269d7(0xe6)],'description':_0x1b1922,'response':_0x4d2d27[_0x4269d7(0xe5)],'suggestedAction':_0x55df4a?{'tool':_0x55df4a['tool'],'description':_0x55df4a[_0x4269d7(0xc9)],'params':_0x55df4a[_0x4269d7(0xf4)],'example':_0x55df4a['example']}:{'tool':_0x4269d7(0xe8),'description':_0x4269d7(0xf0),'params':{'datasetCode':_0x4269d7(0xe1)}},'recoverable':_0x4d2d27[_0x4269d7(0xec)]!==_0x4269d7(0xef)});}export function createStructuredSqlError(_0x3ffecb){const _0x28131b=a23_0x3ee16e,_0x3be79d=SQL_ERROR_TYPE_LABELS[_0x3ffecb['type']],_0x449686=_0x3ffecb[_0x28131b(0xec)]??_0x28131b(0xef),_0x2dc05e=[];if(_0x3ffecb[_0x28131b(0xe9)]==='TABLE_NOT_FOUND')_0x2dc05e[_0x28131b(0xe7)]({'description':'使用\x20list_datasets\x20工具查看所有可用的数据集表名','tool':_0x28131b(0xc8),'toolParams':{'pageSize':0x3e7},'example':'list_datasets({\x20pageSize:\x20999\x20})'});else{if(_0x3ffecb[_0x28131b(0xe9)]==='COLUMN_NOT_FOUND')_0x2dc05e[_0x28131b(0xe7)]({'description':_0x28131b(0xcb),'tool':'get_dataset_detail','toolParams':{'datasetCode':_0x28131b(0xe1)},'example':'get_dataset_detail({\x20datasetCode:\x20\x22customer\x22\x20})'});else _0x3ffecb[_0x28131b(0xe9)]===_0x28131b(0xe4)&&_0x2dc05e['push']({'description':_0x28131b(0xfd),'example':_0x28131b(0xf5)});}return{'type':_0x3ffecb['type'],'typeLabel':_0x3be79d,'location':_0x3ffecb[_0x28131b(0xd2)],'message':_0x3ffecb[_0x28131b(0xd8)],'severity':_0x449686,'fixSteps':_0x3ffecb['fixSteps']??_0x2dc05e,'suggestions':_0x3ffecb[_0x28131b(0xcf)],'canAutoFix':_0x3ffecb[_0x28131b(0xfb)],'fixedSql':_0x3ffecb[_0x28131b(0xd7)],'status':_0x3ffecb[_0x28131b(0xe6)],'response':_0x3ffecb[_0x28131b(0xe5)]};}export function fromLovrabetError(_0x1d6579,_0x4f8e3f){const _0x4ff437=a23_0x3ee16e;return createError({'code':mapSdkCodeToMcpCode(_0x1d6579[_0x4ff437(0xf1)]),'message':_0x1d6579[_0x4ff437(0xd8)],'status':_0x1d6579[_0x4ff437(0xe6)],'description':_0x1d6579[_0x4ff437(0xc9)],'response':_0x1d6579[_0x4ff437(0xe5)],'suggestedAction':_0x4f8e3f,'recoverable':_0x1d6579['status']?_0x1d6579[_0x4ff437(0xe6)]<0x1f4:!![]});}function mapSdkCodeToMcpCode(_0x3108ab){const _0xb06fbb=a23_0x3ee16e;if(!_0x3108ab)return _0xb06fbb(0xed);const _0x5bfbda={'AUTH_REQUIRED':'AUTH_REQUIRED','AUTH_FAILED':_0xb06fbb(0xf6),'UNAUTHORIZED':_0xb06fbb(0xf6),'DATASET_NOT_FOUND':'DATASET_NOT_FOUND','NOT_FOUND':_0xb06fbb(0xf3),'INVALID_PARAMETER':_0xb06fbb(0xe2),'MISSING_PARAMETER':_0xb06fbb(0xdc),'SQL_ERROR':_0xb06fbb(0xd5),'NETWORK_ERROR':_0xb06fbb(0xd4),'API_ERROR':_0xb06fbb(0xde)};return _0x5bfbda[_0x3108ab]||'UNKNOWN_ERROR';}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function a24_0x493a(_0x26bf66,_0x51de13){_0x26bf66=_0x26bf66-0x10f;const _0x28fbd2=a24_0x28fb();let _0x493a5f=_0x28fbd2[_0x26bf66];return _0x493a5f;}const a24_0x12cc34=a24_0x493a;(function(_0x54a4a2,_0x48066d){const _0x4885f0=a24_0x493a,_0x344a1d=_0x54a4a2();while(!![]){try{const _0x59ec6e=-parseInt(_0x4885f0(0x11a))/0x1*(-parseInt(_0x4885f0(0x118))/0x2)+-parseInt(_0x4885f0(0x111))/0x3*(parseInt(_0x4885f0(0x128))/0x4)+-parseInt(_0x4885f0(0x124))/0x5*(-parseInt(_0x4885f0(0x113))/0x6)+-parseInt(_0x4885f0(0x11c))/0x7+-parseInt(_0x4885f0(0x116))/0x8+parseInt(_0x4885f0(0x120))/0x9*(parseInt(_0x4885f0(0x10f))/0xa)+parseInt(_0x4885f0(0x119))/0xb*(parseInt(_0x4885f0(0x110))/0xc);if(_0x59ec6e===_0x48066d)break;else _0x344a1d['push'](_0x344a1d['shift']());}catch(_0x2219a7){_0x344a1d['push'](_0x344a1d['shift']());}}}(a24_0x28fb,0x89676));export class RateLimiter{[a24_0x12cc34(0x127)]=0x0;[a24_0x12cc34(0x12c)]=[];[a24_0x12cc34(0x126)]=![];['options'];constructor(_0x3ca740={}){const _0x37c1c3=a24_0x12cc34;this[_0x37c1c3(0x129)]={'maxOperations':_0x3ca740['maxOperations']??Infinity,'windowMs':_0x3ca740['windowMs']??0x3e8,'delayMs':_0x3ca740['delayMs']??0x7d0};}async[a24_0x12cc34(0x117)](_0x453ed9){return new Promise((_0x431084,_0x165189)=>{const _0x50e053=a24_0x493a;this['queue'][_0x50e053(0x12a)]({'fn':_0x453ed9,'resolve':_0x431084,'reject':_0x165189}),this[_0x50e053(0x11e)]();});}async[a24_0x12cc34(0x11e)](){const _0x1fdd3d=a24_0x12cc34;if(this[_0x1fdd3d(0x126)]||this['queue'][_0x1fdd3d(0x123)]===0x0)return;this[_0x1fdd3d(0x126)]=!![];while(this[_0x1fdd3d(0x12c)][_0x1fdd3d(0x123)]>0x0){const _0x56547d=Date[_0x1fdd3d(0x11f)](),_0x5710ac=_0x56547d-this[_0x1fdd3d(0x127)];if(this[_0x1fdd3d(0x127)]>0x0&&_0x5710ac<this[_0x1fdd3d(0x129)][_0x1fdd3d(0x12d)]){const _0x3872df=this[_0x1fdd3d(0x129)][_0x1fdd3d(0x12d)]-_0x5710ac;await this[_0x1fdd3d(0x11b)](_0x3872df);}const _0x1c9968=this[_0x1fdd3d(0x12c)][_0x1fdd3d(0x121)]();if(!_0x1c9968)break;try{const _0x38a6b7=await _0x1c9968['fn']();_0x1c9968[_0x1fdd3d(0x11d)](_0x38a6b7);}catch(_0x367543){_0x1c9968[_0x1fdd3d(0x114)](_0x367543);}this['lastExecutionTime']=Date['now']();}this[_0x1fdd3d(0x126)]=![];}[a24_0x12cc34(0x11b)](_0x295ed4){return new Promise(_0x37c9bf=>setTimeout(_0x37c9bf,_0x295ed4));}[a24_0x12cc34(0x122)](){const _0x1830b1=a24_0x12cc34;this[_0x1830b1(0x127)]=0x0,this['queue']=[],this[_0x1830b1(0x126)]=![];}[a24_0x12cc34(0x112)](){return this['queue']['length'];}}const globalLimiters=new Map();export function getRateLimiter(_0x5f18ed,_0x32a23d){const _0x25459d=a24_0x12cc34;return!globalLimiters[_0x25459d(0x125)](_0x5f18ed)&&globalLimiters[_0x25459d(0x12b)](_0x5f18ed,new RateLimiter(_0x32a23d)),globalLimiters[_0x25459d(0x115)](_0x5f18ed);}export const rateLimiters={'sqlSave':new RateLimiter({'delayMs':0x3e8}),'api':new RateLimiter({'delayMs':0x1f4}),'fast':new RateLimiter({'delayMs':0xc8})};function a24_0x28fb(){const _0x2fd8ea=['now','1278846enntgy','shift','reset','length','100zeQdEK','has','processing','lastExecutionTime','4EIXgsP','options','push','set','queue','delayMs','20XOoZKd','22452uPEKSV','520791iBHdBB','getQueueLength','37212HxZveb','reject','get','5516800OUTIik','throttle','15054PVzxMT','5093uGQaWT','98XKzCRK','sleep','4103008aVnIwp','resolve','processQueue'];a24_0x28fb=function(){return _0x2fd8ea;};return a24_0x28fb();}
|
package/dist/utils/sql-parser.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(_0xef3225,_0x11e057){const _0x3bba3e=a24_0x4b77,_0x112d64=_0xef3225();while(!![]){try{const _0x402a0a=parseInt(_0x3bba3e(0x1b8))/0x1+parseInt(_0x3bba3e(0x19c))/0x2*(parseInt(_0x3bba3e(0x1cd))/0x3)+-parseInt(_0x3bba3e(0x1a1))/0x4*(parseInt(_0x3bba3e(0x1a5))/0x5)+parseInt(_0x3bba3e(0x1a9))/0x6*(parseInt(_0x3bba3e(0x1d7))/0x7)+parseInt(_0x3bba3e(0x19d))/0x8+-parseInt(_0x3bba3e(0x1df))/0x9*(parseInt(_0x3bba3e(0x1de))/0xa)+parseInt(_0x3bba3e(0x1d3))/0xb*(-parseInt(_0x3bba3e(0x1bc))/0xc);if(_0x402a0a===_0x11e057)break;else _0x112d64['push'](_0x112d64['shift']());}catch(_0x3c91be){_0x112d64['push'](_0x112d64['shift']());}}}(a24_0x5a38,0x5e397));import{createStructuredSqlError}from'../types/mcp-types.js';export function parseSqlStructure(_0x4f5836){const _0x33e21a=a24_0x4b77,_0x9fa466={'tables':[],'columns':[],'parameters':[],'joins':[]};if(!_0x4f5836||typeof _0x4f5836!=='string')return _0x9fa466;const _0xee26e3=_0x4f5836[_0x33e21a(0x1c3)](/#\{[^}]*\}/g,'?')[_0x33e21a(0x1c3)](/\$\{[^}]*\}/g,'?')[_0x33e21a(0x1c3)](/'[^']*'/g,'\x27\x27')['replace'](/--.*$/gm,'')[_0x33e21a(0x1c3)](/\/\*[\s\S]*?\*\//g,''),_0x29a079=_0xee26e3[_0x33e21a(0x1db)](/FROM\s+([^\s,)(]+)/i);if(_0x29a079){const _0x431e76=_0x29a079[0x1][_0x33e21a(0x1c3)](/[`"]/g,'');_0x9fa466[_0x33e21a(0x1b5)][_0x33e21a(0x1a3)](_0x431e76);}const _0x13e9ca=_0xee26e3[_0x33e21a(0x1d4)](/(?:INNER|LEFT|RIGHT|FULL|CROSS)?\s*JOIN\s+([^\s,)(]+)/gi);for(const _0x15b1d7 of _0x13e9ca){const _0x3accdc=_0x15b1d7[0x1]['replace'](/[`"]/g,'');_0x3accdc&&!_0x9fa466[_0x33e21a(0x1b5)]['includes'](_0x3accdc)&&_0x9fa466['tables']['push'](_0x3accdc);}const _0x2edb4e=_0xee26e3[_0x33e21a(0x1db)](/SELECT\s+([\s\S]+?)\s+FROM/i);if(_0x2edb4e){const _0x421ab5=_0x2edb4e[0x1]['trim']();if(_0x421ab5!=='*'){const _0x3cd1be=splitSqlColumns(_0x421ab5);for(const _0x5970ff of _0x3cd1be){const _0x5a59d9=_0x5970ff['trim']();if(_0x5a59d9&&!_0x5a59d9['match'](/^\d+$/)){const _0x4fb743=_0x5a59d9[_0x33e21a(0x1a2)](/\s+AS\s+/i),_0x546705=_0x4fb743[0x0][_0x33e21a(0x1aa)](),_0xd483ee=_0x4fb743[0x1]?.[_0x33e21a(0x1aa)]();if(_0x546705[_0x33e21a(0x1c7)]('.')){const [_0x524954,_0x335218]=_0x546705['split']('.');_0x9fa466[_0x33e21a(0x1d9)]['push']({'table':_0x524954[_0x33e21a(0x1aa)](),'column':_0x335218[_0x33e21a(0x1c3)](/[`"]/g,'')[_0x33e21a(0x1aa)](),'alias':_0xd483ee});}else!_0x546705['includes']('(')&&_0x9fa466[_0x33e21a(0x1d9)]['push']({'table':'','column':_0x546705[_0x33e21a(0x1c3)](/[`"]/g,''),'alias':_0xd483ee});}}}}const _0x59047d=_0xee26e3[_0x33e21a(0x1d4)](/JOIN\s+(\w+)\s+(?:AS\s+)?(\w+)?\s+ON\s+([\w.]+)\s*=\s*([\w.]+)/gi);for(const _0x1024e3 of _0x59047d){const [,,,_0x3e076f,_0x16427c]=_0x1024e3;if(_0x3e076f&&_0x16427c){const [_0x47027e,_0x8d9c30]=_0x3e076f[_0x33e21a(0x1c7)]('.')?_0x3e076f[_0x33e21a(0x1a2)]('.'):['',_0x3e076f],[_0x4d8ec0,_0x19d3fb]=_0x16427c[_0x33e21a(0x1c7)]('.')?_0x16427c[_0x33e21a(0x1a2)]('.'):['',_0x16427c];_0x9fa466[_0x33e21a(0x1c9)]?.[_0x33e21a(0x1a3)]({'leftTable':_0x47027e,'leftColumn':_0x8d9c30,'rightTable':_0x4d8ec0,'rightColumn':_0x19d3fb});}}const _0x2c2363=_0x4f5836[_0x33e21a(0x1d4)](/[#\$]\{(\w+)\}/g),_0x52e44d=new Set();for(const _0xa9f955 of _0x2c2363){const _0x35d1b8=_0xa9f955[0x1];!_0x52e44d[_0x33e21a(0x1c5)](_0x35d1b8)&&(_0x52e44d[_0x33e21a(0x1b7)](_0x35d1b8),_0x9fa466[_0x33e21a(0x1ca)][_0x33e21a(0x1a3)]({'name':_0x35d1b8,'type':inferParamType(_0x35d1b8),'example':getExampleValue(_0x35d1b8)}));}return _0x9fa466;}function splitSqlColumns(_0x33f6ac){const _0x4eb49a=a24_0x4b77,_0x4bfe83=[];let _0x4dce7a='',_0x423703=0x0;for(let _0x4e45b0=0x0;_0x4e45b0<_0x33f6ac['length'];_0x4e45b0++){const _0x337116=_0x33f6ac[_0x4e45b0];if(_0x337116==='(')_0x423703++,_0x4dce7a+=_0x337116;else{if(_0x337116===')')_0x423703--,_0x4dce7a+=_0x337116;else _0x337116===','&&_0x423703===0x0?(_0x4bfe83[_0x4eb49a(0x1a3)](_0x4dce7a),_0x4dce7a=''):_0x4dce7a+=_0x337116;}}return _0x4dce7a&&_0x4bfe83['push'](_0x4dce7a),_0x4bfe83;}function a24_0x4b77(_0x15a056,_0x46c3df){_0x15a056=_0x15a056-0x19a;const _0x5a3870=a24_0x5a38();let _0x4b773e=_0x5a3870[_0x15a056];return _0x4b773e;}function inferParamType(_0xdaabf1){const _0x8892f4=a24_0x4b77,_0x18ab43=_0xdaabf1[_0x8892f4(0x1e8)]();if(_0x18ab43[_0x8892f4(0x1c7)]('id')||_0x18ab43['includes'](_0x8892f4(0x1d8))||_0x18ab43[_0x8892f4(0x1c7)](_0x8892f4(0x1c6))||_0x18ab43['includes'](_0x8892f4(0x1b6))||_0x18ab43[_0x8892f4(0x1c7)](_0x8892f4(0x1e4))||_0x18ab43[_0x8892f4(0x1c7)](_0x8892f4(0x1ce))||_0x18ab43[_0x8892f4(0x1c7)](_0x8892f4(0x1e1))||_0x18ab43['includes'](_0x8892f4(0x19f)))return _0x8892f4(0x1ad);return _0x8892f4(0x1e3);}function getExampleValue(_0x4204b8){const _0x98df27=a24_0x4b77,_0x10eabf=_0x4204b8[_0x98df27(0x1e8)](),_0x5ae7a2=inferParamType(_0x10eabf);if(_0x5ae7a2===_0x98df27(0x1ad)){if(_0x10eabf[_0x98df27(0x1c7)](_0x98df27(0x1c6))||_0x10eabf[_0x98df27(0x1c7)](_0x98df27(0x1d8))||_0x10eabf['includes'](_0x98df27(0x1b6)))return 0xa;if(_0x10eabf[_0x98df27(0x1c7)](_0x98df27(0x1e4)))return 0x1;return 0x7b;}if(_0x10eabf['includes'](_0x98df27(0x1d2))||_0x10eabf[_0x98df27(0x1c7)](_0x98df27(0x1ab)))return _0x98df27(0x1c0);if(_0x10eabf[_0x98df27(0x1c7)](_0x98df27(0x1b2)))return'1';if(_0x10eabf[_0x98df27(0x1c7)](_0x98df27(0x1d6))||_0x10eabf[_0x98df27(0x1c7)](_0x98df27(0x1bb))||_0x10eabf['includes'](_0x98df27(0x1c4)))return'example';return _0x98df27(0x1da);}export function validateIsSelectOnly(_0xe4592b){const _0x26e713=a24_0x4b77;if(!_0xe4592b||typeof _0xe4592b!==_0x26e713(0x1e3))return{'valid':![],'reason':'SQL\x20content\x20cannot\x20be\x20empty'};const _0x3b98f1=_0xe4592b[_0x26e713(0x1c3)](/#\{[^}]*\}/g,'?')[_0x26e713(0x1c3)](/\$\{[^}]*\}/g,'?')[_0x26e713(0x1c3)](/@[^(\s]+(\([^)]*\))?/g,''),_0x348b69=_0x3b98f1[_0x26e713(0x1aa)](),_0x18166c=_0x348b69[_0x26e713(0x1a2)]('\x0a');let _0x595eee='';for(const _0x1e7bf4 of _0x18166c){const _0x27f920=_0x1e7bf4[_0x26e713(0x1aa)]();if(!_0x27f920||_0x27f920[_0x26e713(0x1a4)]('--')||_0x27f920[_0x26e713(0x1a4)]('/*'))continue;_0x595eee=_0x27f920;break;}if(!_0x595eee[_0x26e713(0x1c1)]()[_0x26e713(0x1a4)]('SELECT'))return{'valid':![],'reason':_0x26e713(0x1ac)};const _0x405755=['INSERT\x5cs+INTO',_0x26e713(0x1d1),'DELETE\x5cs+FROM','DROP\x5cs+(TABLE|INDEX|DATABASE)','ALTER\x5cs+(TABLE|DATABASE)',_0x26e713(0x1d0),'TRUNCATE',_0x26e713(0x1a8),_0x26e713(0x1e2),_0x26e713(0x1e9),_0x26e713(0x1cc)],_0x1b21ce=_0x348b69['toUpperCase']();for(const _0x25f2ab of _0x405755){const _0x172954=new RegExp(_0x25f2ab,'i');if(_0x172954[_0x26e713(0x1bf)](_0x1b21ce))return{'valid':![],'reason':_0x26e713(0x1be)+_0x25f2ab[_0x26e713(0x1c3)](_0x26e713(0x1dd),'\x20')+_0x26e713(0x1bd)};}return{'valid':!![]};}function a24_0x5a38(){const _0x3f36db=['2024-01-01','toUpperCase','valid','replace','name','has','limit','includes','字段\x20\x22','joins','parameters','确保\x20SQL\x20语句以\x20SELECT\x20关键字开头','EXECUTE','75trNdmj','num','表\x20\x22','CREATE\x5cs+(TABLE|INDEX|DATABASE|VIEW)','UPDATE\x5cs+\x5cw+\x5cs+SET','date','1075547FCRfEg','matchAll','column','keyword','57547oAFggM','count','columns','value','match','TABLE_NOT_FOUND','\x5c\x5cs+','223180VuEPOF','117XvyxVn','SELECT\x20id,\x20name\x20FROM\x20customer\x20WHERE\x20status\x20=\x201','amount','REVOKE','string','page','Tables:\x20','length','SQL_START','toLowerCase','EXEC','Joins:\x20','Params:\x20','slice','40232KeahCY','2154560UnJRTw','SQL\x20必须以\x20SELECT\x20开头','price','\x22\x20在表\x20\x22','24bPNHmZ','split','push','startsWith','502965uABCnf','\x22\x20中不存在','get','GRANT','414EtisgT','trim','time','Only\x20SELECT\x20queries\x20are\x20allowed.\x20The\x20SQL\x20must\x20start\x20with\x20SELECT\x20(after\x20any\x20comments).','number','filter','tableName','map','join','status','COLUMN_NOT_FOUND','from','tables','size','add','233497llQdZE','table','error','search','36zQssLh','.\x20Only\x20SELECT\x20queries\x20are\x20allowed.','Forbidden\x20keyword\x20detected:\x20','test'];a24_0x5a38=function(){return _0x3f36db;};return a24_0x5a38();}export function extractTableNames(_0x3e9033){const _0x5e1f4f=a24_0x4b77,_0x5bb698=parseSqlStructure(_0x3e9033);return _0x5bb698[_0x5e1f4f(0x1b5)];}export function extractColumnNames(_0x54e8e4){const _0x328005=a24_0x4b77,_0x381600=parseSqlStructure(_0x54e8e4);return _0x381600[_0x328005(0x1d9)][_0x328005(0x1b0)](_0x52a18c=>({'table':_0x52a18c[_0x328005(0x1b9)],'column':_0x52a18c[_0x328005(0x1d5)]}));}export function extractParameters(_0x2adf86){const _0x1087ac=a24_0x4b77,_0x10a7c8=parseSqlStructure(_0x2adf86);return _0x10a7c8[_0x1087ac(0x1ca)];}export function validateSqlContent(_0x42dcba,_0x31a66f){const _0x4162c9=a24_0x4b77,_0x4fbe54=validateIsSelectOnly(_0x42dcba);if(!_0x4fbe54[_0x4162c9(0x1c2)])return{'valid':![],'isSelectOnly':![],'errors':[createStructuredSqlError({'type':'SYNTAX_ERROR','location':_0x4162c9(0x1e7),'message':_0x4fbe54['reason']||_0x4162c9(0x19e),'severity':_0x4162c9(0x1ba),'fixSteps':[{'description':_0x4162c9(0x1cb),'example':_0x4162c9(0x1e0)}]})]};const _0x3209c1=parseSqlStructure(_0x42dcba),_0x3642ff=[];if(_0x31a66f){const _0x30edac=new Map(_0x31a66f['tables']['map'](_0x29926d=>[_0x29926d[_0x4162c9(0x1af)][_0x4162c9(0x1e8)](),_0x29926d[_0x4162c9(0x1d9)]['map'](_0x5b442a=>_0x5b442a[_0x4162c9(0x1e8)]())]));for(const _0x538cb5 of _0x3209c1['tables']){const _0x82d1b8=_0x538cb5['toLowerCase']();if(!_0x30edac['has'](_0x82d1b8)){const _0xa19687=Array['from'](_0x30edac['keys']())[_0x4162c9(0x1ae)](_0xbf6819=>_0xbf6819[_0x4162c9(0x1c7)](_0x82d1b8)||_0x82d1b8['includes'](_0xbf6819));_0x3642ff[_0x4162c9(0x1a3)](createStructuredSqlError({'type':_0x4162c9(0x1dc),'location':_0x538cb5,'message':_0x4162c9(0x1cf)+_0x538cb5+'\x22\x20在数据库\x20schema\x20中不存在','severity':_0x4162c9(0x1ba),'suggestions':_0xa19687[_0x4162c9(0x1e6)]>0x0?_0xa19687:Array[_0x4162c9(0x1b4)](_0x30edac['keys']())}));}}for(const _0x44003b of _0x3209c1[_0x4162c9(0x1d9)]){if(_0x44003b[_0x4162c9(0x1b9)]){const _0x558d21=_0x44003b[_0x4162c9(0x1b9)][_0x4162c9(0x1e8)](),_0x5d1edc=_0x30edac[_0x4162c9(0x1a7)](_0x558d21);if(_0x5d1edc){const _0x30f6f2=_0x44003b[_0x4162c9(0x1d5)][_0x4162c9(0x1e8)]();if(!_0x5d1edc[_0x4162c9(0x1c7)](_0x30f6f2)&&!_0x44003b[_0x4162c9(0x1d5)][_0x4162c9(0x1c7)]('*')){const _0x1ff442=_0x5d1edc[_0x4162c9(0x1ae)](_0x20302b=>_0x20302b[_0x4162c9(0x1c7)](_0x30f6f2)||_0x30f6f2['includes'](_0x20302b));_0x3642ff['push'](createStructuredSqlError({'type':_0x4162c9(0x1b3),'location':_0x44003b[_0x4162c9(0x1b9)]+'.'+_0x44003b[_0x4162c9(0x1d5)],'message':_0x4162c9(0x1c8)+_0x44003b[_0x4162c9(0x1d5)]+_0x4162c9(0x1a0)+_0x44003b[_0x4162c9(0x1b9)]+_0x4162c9(0x1a6),'severity':_0x4162c9(0x1ba),'suggestions':_0x1ff442[_0x4162c9(0x1e6)]>0x0?_0x1ff442:_0x5d1edc[_0x4162c9(0x19b)](0x0,0xa)}));}}}}}return{'valid':_0x3642ff[_0x4162c9(0x1e6)]===0x0,'isSelectOnly':!![],'parsedStructure':_0x3209c1,'errors':_0x3642ff[_0x4162c9(0x1e6)]>0x0?_0x3642ff:undefined};}export function generateSqlSummary(_0x224c28){const _0x3f4ac0=a24_0x4b77,_0x11a443=parseSqlStructure(_0x224c28),_0x272973=[];return _0x11a443[_0x3f4ac0(0x1b5)][_0x3f4ac0(0x1e6)]>0x0&&_0x272973[_0x3f4ac0(0x1a3)](_0x3f4ac0(0x1e5)+_0x11a443['tables'][_0x3f4ac0(0x1b1)](',\x20')),_0x11a443[_0x3f4ac0(0x1ca)][_0x3f4ac0(0x1e6)]>0x0&&_0x272973[_0x3f4ac0(0x1a3)](_0x3f4ac0(0x19a)+_0x11a443[_0x3f4ac0(0x1ca)][_0x3f4ac0(0x1b0)](_0xcee58e=>_0xcee58e[_0x3f4ac0(0x1c4)])[_0x3f4ac0(0x1b1)](',\x20')),_0x11a443[_0x3f4ac0(0x1c9)]&&_0x11a443[_0x3f4ac0(0x1c9)][_0x3f4ac0(0x1e6)]>0x0&&_0x272973[_0x3f4ac0(0x1a3)](_0x3f4ac0(0x1ea)+_0x11a443[_0x3f4ac0(0x1c9)][_0x3f4ac0(0x1e6)]),_0x272973[_0x3f4ac0(0x1e6)]>0x0?_0x272973['join']('\x20|\x20'):'SELECT\x20query';}
|
|
1
|
+
function a25_0x2ae9(){const _0xe8f0a4=['test','price','DDL','\x22\x20在数据库\x20schema\x20中不存在','error','字段\x20\x22','join','name','amount','limit','reason','value','REVOKE','size','Contains\x20data\x20modification\x20keywords','SELECT\x20query','97401ZhPcUt','search','slice','INSERT','matchAll','includes','38583LUdDdH','replace','push','SELECT','DROP','3341046SRjIAL','count','trim','num','TRUNCATE','4796925faaUxK','TABLE_NOT_FOUND','SQL\x20content\x20is\x20empty','1992YrdHyQ','Joins:\x20','parameters','time','table','CREATE','toUpperCase','has','INSERT\x20statement\x20modifies\x20data','\x20|\x20','DELETE\x20statement\x20modifies\x20data','add','GRANT','filter','match','column','startsWith','keyword','date','string','UNKNOWN','split','76cfPGCt','Params:\x20','toLowerCase','1702356gstkxi','tables','length','isSelectOnly','from','joins','get','columns','number','2024-01-01','map','keys','example','\x22\x20在表\x20\x22','2154584SdHTTE','ALTER','5052020OmEAsf'];a25_0x2ae9=function(){return _0xe8f0a4;};return a25_0x2ae9();}(function(_0x43aa85,_0x57ad36){const _0x3d097b=a25_0x2ad3,_0x53b4d6=_0x43aa85();while(!![]){try{const _0x5a093b=-parseInt(_0x3d097b(0xd1))/0x1+parseInt(_0x3d097b(0xce))/0x2*(-parseInt(_0x3d097b(0xa5))/0x3)+parseInt(_0x3d097b(0x92))/0x4+parseInt(_0x3d097b(0x94))/0x5+parseInt(_0x3d097b(0xb0))/0x6+parseInt(_0x3d097b(0xb5))/0x7+-parseInt(_0x3d097b(0xb8))/0x8*(-parseInt(_0x3d097b(0xab))/0x9);if(_0x5a093b===_0x57ad36)break;else _0x53b4d6['push'](_0x53b4d6['shift']());}catch(_0x2b0406){_0x53b4d6['push'](_0x53b4d6['shift']());}}}(a25_0x2ae9,0xe139f));import{createStructuredSqlError}from'../types/mcp-types.js';export function parseSqlStructure(_0x292901){const _0x16a3a1=a25_0x2ad3,_0x4d88c1={'tables':[],'columns':[],'parameters':[],'joins':[]};if(!_0x292901||typeof _0x292901!==_0x16a3a1(0xcb))return _0x4d88c1;const _0xedc756=_0x292901['replace'](/#\{[^}]*\}/g,'?')[_0x16a3a1(0xac)](/\$\{[^}]*\}/g,'?')[_0x16a3a1(0xac)](/'[^']*'/g,'\x27\x27')[_0x16a3a1(0xac)](/--.*$/gm,'')[_0x16a3a1(0xac)](/\/\*[\s\S]*?\*\//g,''),_0x583972=_0xedc756[_0x16a3a1(0xc6)](/FROM\s+([^\s,)(]+)/i);if(_0x583972){const _0x4a58ea=_0x583972[0x1][_0x16a3a1(0xac)](/[`"]/g,'');_0x4d88c1[_0x16a3a1(0xd2)][_0x16a3a1(0xad)](_0x4a58ea);}const _0x52bc05=_0xedc756[_0x16a3a1(0xa9)](/(?:INNER|LEFT|RIGHT|FULL|CROSS)?\s*JOIN\s+([^\s,)(]+)/gi);for(const _0xbbb9ed of _0x52bc05){const _0x13ea74=_0xbbb9ed[0x1][_0x16a3a1(0xac)](/[`"]/g,'');_0x13ea74&&!_0x4d88c1[_0x16a3a1(0xd2)]['includes'](_0x13ea74)&&_0x4d88c1['tables'][_0x16a3a1(0xad)](_0x13ea74);}const _0x174349=_0xedc756[_0x16a3a1(0xc6)](/SELECT\s+([\s\S]+?)\s+FROM/i);if(_0x174349){const _0x12e497=_0x174349[0x1]['trim']();if(_0x12e497!=='*'){const _0xb695e5=splitSqlColumns(_0x12e497);for(const _0x5561f0 of _0xb695e5){const _0x11abe4=_0x5561f0[_0x16a3a1(0xb2)]();if(_0x11abe4&&!_0x11abe4[_0x16a3a1(0xc6)](/^\d+$/)){const _0x547429=_0x11abe4['split'](/\s+AS\s+/i),_0x41fff6=_0x547429[0x0][_0x16a3a1(0xb2)](),_0x59feb1=_0x547429[0x1]?.[_0x16a3a1(0xb2)]();if(_0x41fff6[_0x16a3a1(0xaa)]('.')){const [_0x30380f,_0xec81a1]=_0x41fff6[_0x16a3a1(0xcd)]('.');_0x4d88c1['columns']['push']({'table':_0x30380f[_0x16a3a1(0xb2)](),'column':_0xec81a1[_0x16a3a1(0xac)](/[`"]/g,'')[_0x16a3a1(0xb2)](),'alias':_0x59feb1});}else!_0x41fff6[_0x16a3a1(0xaa)]('(')&&_0x4d88c1['columns'][_0x16a3a1(0xad)]({'table':'','column':_0x41fff6[_0x16a3a1(0xac)](/[`"]/g,''),'alias':_0x59feb1});}}}}const _0x40ee4c=_0xedc756[_0x16a3a1(0xa9)](/JOIN\s+(\w+)\s+(?:AS\s+)?(\w+)?\s+ON\s+([\w.]+)\s*=\s*([\w.]+)/gi);for(const _0x2cb2f8 of _0x40ee4c){const [,,,_0x43175c,_0x22ac21]=_0x2cb2f8;if(_0x43175c&&_0x22ac21){const [_0x5e47dd,_0x1cfed7]=_0x43175c[_0x16a3a1(0xaa)]('.')?_0x43175c[_0x16a3a1(0xcd)]('.'):['',_0x43175c],[_0x267921,_0x46cb39]=_0x22ac21['includes']('.')?_0x22ac21[_0x16a3a1(0xcd)]('.'):['',_0x22ac21];_0x4d88c1['joins']?.['push']({'leftTable':_0x5e47dd,'leftColumn':_0x1cfed7,'rightTable':_0x267921,'rightColumn':_0x46cb39});}}const _0x1ca87a=_0x292901[_0x16a3a1(0xa9)](/[#\$]\{(\w+)\}/g),_0x552d45=new Set();for(const _0xc4f93 of _0x1ca87a){const _0x2ea778=_0xc4f93[0x1];!_0x552d45[_0x16a3a1(0xbf)](_0x2ea778)&&(_0x552d45[_0x16a3a1(0xc3)](_0x2ea778),_0x4d88c1[_0x16a3a1(0xba)][_0x16a3a1(0xad)]({'name':_0x2ea778,'type':inferParamType(_0x2ea778),'example':getExampleValue(_0x2ea778)}));}return _0x4d88c1;}function splitSqlColumns(_0x3612c6){const _0xb235ee=a25_0x2ad3,_0x54a07b=[];let _0x600fd9='',_0x5d8d21=0x0;for(let _0x4d0143=0x0;_0x4d0143<_0x3612c6[_0xb235ee(0xd3)];_0x4d0143++){const _0x41703c=_0x3612c6[_0x4d0143];if(_0x41703c==='(')_0x5d8d21++,_0x600fd9+=_0x41703c;else{if(_0x41703c===')')_0x5d8d21--,_0x600fd9+=_0x41703c;else _0x41703c===','&&_0x5d8d21===0x0?(_0x54a07b['push'](_0x600fd9),_0x600fd9=''):_0x600fd9+=_0x41703c;}}return _0x600fd9&&_0x54a07b[_0xb235ee(0xad)](_0x600fd9),_0x54a07b;}function inferParamType(_0x424827){const _0x24f66c=a25_0x2ad3,_0x377621=_0x424827[_0x24f66c(0xd0)]();if(_0x377621[_0x24f66c(0xaa)]('id')||_0x377621[_0x24f66c(0xaa)](_0x24f66c(0xb1))||_0x377621[_0x24f66c(0xaa)](_0x24f66c(0x9e))||_0x377621[_0x24f66c(0xaa)]('size')||_0x377621['includes']('page')||_0x377621[_0x24f66c(0xaa)](_0x24f66c(0xb3))||_0x377621['includes'](_0x24f66c(0x9d))||_0x377621[_0x24f66c(0xaa)](_0x24f66c(0x96)))return _0x24f66c(0xd9);return'string';}function getExampleValue(_0x9551be){const _0x27050e=a25_0x2ad3,_0x6c429=_0x9551be[_0x27050e(0xd0)](),_0x28dcf6=inferParamType(_0x6c429);if(_0x28dcf6===_0x27050e(0xd9)){if(_0x6c429[_0x27050e(0xaa)](_0x27050e(0x9e))||_0x6c429[_0x27050e(0xaa)](_0x27050e(0xb1))||_0x6c429[_0x27050e(0xaa)](_0x27050e(0xa2)))return 0xa;if(_0x6c429[_0x27050e(0xaa)]('page'))return 0x1;return 0x7b;}if(_0x6c429[_0x27050e(0xaa)](_0x27050e(0xca))||_0x6c429['includes'](_0x27050e(0xbb)))return _0x27050e(0xda);if(_0x6c429[_0x27050e(0xaa)]('status'))return'1';if(_0x6c429[_0x27050e(0xaa)](_0x27050e(0xc9))||_0x6c429['includes'](_0x27050e(0xa6))||_0x6c429[_0x27050e(0xaa)](_0x27050e(0x9c)))return _0x27050e(0x90);return _0x27050e(0xa0);}export function detectSqlType(_0x13f1af){const _0x4ff95f=a25_0x2ad3;if(!_0x13f1af||typeof _0x13f1af!==_0x4ff95f(0xcb))return{'type':_0x4ff95f(0xcc),'isSelectOnly':![],'isDangerous':![],'reason':_0x4ff95f(0xb7)};const _0x2d5246=_0x13f1af['replace'](/#\{[^}]*\}/g,'?')[_0x4ff95f(0xac)](/\$\{[^}]*\}/g,'?')[_0x4ff95f(0xac)](/@[^(\s]+(\([^)]*\))?/g,''),_0x11b8c6=_0x2d5246['trim'](),_0x1b76cc=_0x11b8c6[_0x4ff95f(0xcd)]('\x0a');let _0x1ce94d='';for(const _0x5d5eee of _0x1b76cc){const _0xbaabe4=_0x5d5eee['trim']();if(!_0xbaabe4||_0xbaabe4[_0x4ff95f(0xc8)]('--')||_0xbaabe4['startsWith']('/*'))continue;_0x1ce94d=_0xbaabe4;break;}const _0x7501b4=_0x1ce94d[_0x4ff95f(0xbe)](),_0x51c042=_0x11b8c6[_0x4ff95f(0xbe)]();if(/^WITH\b/[_0x4ff95f(0x95)](_0x7501b4)&&/\bSELECT\b/i[_0x4ff95f(0x95)](_0x51c042)){const _0x43abd2=[/INSERT\s+INTO/i,/UPDATE\s+\w+\s+SET/i,/DELETE\s+FROM/i];for(const _0x2a7762 of _0x43abd2){if(_0x2a7762['test'](_0x51c042))return{'type':_0x4ff95f(0xae),'isSelectOnly':![],'isDangerous':!![],'reason':'CTE\x20contains\x20data\x20modification\x20keywords'};}return{'type':'SELECT','isSelectOnly':!![],'isDangerous':![]};}if(/^SELECT\b/[_0x4ff95f(0x95)](_0x7501b4)){const _0x427904=[/INSERT\s+INTO/i,/UPDATE\s+\w+\s+SET/i,/DELETE\s+FROM/i];for(const _0xa3d6a0 of _0x427904){if(_0xa3d6a0[_0x4ff95f(0x95)](_0x51c042))return{'type':_0x4ff95f(0xae),'isSelectOnly':![],'isDangerous':!![],'reason':_0x4ff95f(0xa3)};}return{'type':'SELECT','isSelectOnly':!![],'isDangerous':![]};}if(/^INSERT\s+INTO\b/[_0x4ff95f(0x95)](_0x7501b4))return{'type':_0x4ff95f(0xa8),'isSelectOnly':![],'isDangerous':!![],'reason':_0x4ff95f(0xc0)};if(/^UPDATE\b/[_0x4ff95f(0x95)](_0x7501b4))return{'type':'UPDATE','isSelectOnly':![],'isDangerous':!![],'reason':'UPDATE\x20statement\x20modifies\x20data'};if(/^DELETE\s+FROM\b/[_0x4ff95f(0x95)](_0x7501b4))return{'type':'DELETE','isSelectOnly':![],'isDangerous':!![],'reason':_0x4ff95f(0xc2)};const _0x360209=[_0x4ff95f(0xaf),_0x4ff95f(0x93),_0x4ff95f(0xbd),_0x4ff95f(0xb4),_0x4ff95f(0xc4),_0x4ff95f(0xa1)];for(const _0x5d4aff of _0x360209){if(_0x7501b4[_0x4ff95f(0xc8)](_0x5d4aff))return{'type':_0x4ff95f(0x97),'isSelectOnly':![],'isDangerous':!![],'reason':_0x5d4aff+'\x20statement\x20modifies\x20schema'};}return{'type':'UNKNOWN','isSelectOnly':![],'isDangerous':![],'reason':'Unknown\x20SQL\x20type'};}export function validateIsSelectOnly(_0x28f228){const _0xfcc1f8=a25_0x2ad3,_0x1f871e=detectSqlType(_0x28f228);return{'valid':_0x1f871e['isSelectOnly'],'reason':_0x1f871e[_0xfcc1f8(0xd4)]?undefined:_0x1f871e[_0xfcc1f8(0x9f)]};}export function extractTableNames(_0x288cd6){const _0x338c12=a25_0x2ad3,_0x499892=parseSqlStructure(_0x288cd6);return _0x499892[_0x338c12(0xd2)];}export function extractColumnNames(_0x531d28){const _0x95dd6d=a25_0x2ad3,_0x3c10dd=parseSqlStructure(_0x531d28);return _0x3c10dd['columns']['map'](_0x29e5ed=>({'table':_0x29e5ed[_0x95dd6d(0xbc)],'column':_0x29e5ed['column']}));}export function extractParameters(_0x17a128){const _0x57f818=a25_0x2ad3,_0x32c142=parseSqlStructure(_0x17a128);return _0x32c142[_0x57f818(0xba)];}function a25_0x2ad3(_0x1c4c2a,_0x2f4830){_0x1c4c2a=_0x1c4c2a-0x8f;const _0x2ae91a=a25_0x2ae9();let _0x2ad3e0=_0x2ae91a[_0x1c4c2a];return _0x2ad3e0;}export function validateSqlContent(_0x99ac8f,_0x3a033c){const _0x51b743=a25_0x2ad3,_0x1a38bd=detectSqlType(_0x99ac8f),_0x436b9c=parseSqlStructure(_0x99ac8f),_0x259b3a=[];if(_0x3a033c){const _0x3f3179=new Map(_0x3a033c[_0x51b743(0xd2)][_0x51b743(0xdb)](_0x25d9bd=>[_0x25d9bd['tableName'][_0x51b743(0xd0)](),_0x25d9bd[_0x51b743(0xd8)][_0x51b743(0xdb)](_0x51eca6=>_0x51eca6[_0x51b743(0xd0)]())]));for(const _0x4a9349 of _0x436b9c[_0x51b743(0xd2)]){const _0x458c55=_0x4a9349[_0x51b743(0xd0)]();if(!_0x3f3179[_0x51b743(0xbf)](_0x458c55)){const _0x282860=Array[_0x51b743(0xd5)](_0x3f3179['keys']())['filter'](_0x5007fe=>_0x5007fe[_0x51b743(0xaa)](_0x458c55)||_0x458c55[_0x51b743(0xaa)](_0x5007fe));_0x259b3a[_0x51b743(0xad)](createStructuredSqlError({'type':_0x51b743(0xb6),'location':_0x4a9349,'message':'表\x20\x22'+_0x4a9349+_0x51b743(0x98),'severity':_0x51b743(0x99),'suggestions':_0x282860['length']>0x0?_0x282860:Array[_0x51b743(0xd5)](_0x3f3179[_0x51b743(0x8f)]())}));}}for(const _0x1bec14 of _0x436b9c[_0x51b743(0xd8)]){if(_0x1bec14[_0x51b743(0xbc)]){const _0x4a8324=_0x1bec14[_0x51b743(0xbc)]['toLowerCase'](),_0x1f4d24=_0x3f3179[_0x51b743(0xd7)](_0x4a8324);if(_0x1f4d24){const _0x1369ac=_0x1bec14[_0x51b743(0xc7)]['toLowerCase']();if(!_0x1f4d24[_0x51b743(0xaa)](_0x1369ac)&&!_0x1bec14[_0x51b743(0xc7)]['includes']('*')){const _0x3b6eb3=_0x1f4d24[_0x51b743(0xc5)](_0x4f46f4=>_0x4f46f4['includes'](_0x1369ac)||_0x1369ac[_0x51b743(0xaa)](_0x4f46f4));_0x259b3a['push'](createStructuredSqlError({'type':'COLUMN_NOT_FOUND','location':_0x1bec14[_0x51b743(0xbc)]+'.'+_0x1bec14[_0x51b743(0xc7)],'message':_0x51b743(0x9a)+_0x1bec14[_0x51b743(0xc7)]+_0x51b743(0x91)+_0x1bec14['table']+'\x22\x20中不存在','severity':_0x51b743(0x99),'suggestions':_0x3b6eb3[_0x51b743(0xd3)]>0x0?_0x3b6eb3:_0x1f4d24[_0x51b743(0xa7)](0x0,0xa)}));}}}}}return{'valid':_0x259b3a[_0x51b743(0xd3)]===0x0,'isSelectOnly':_0x1a38bd['isSelectOnly'],'parsedStructure':_0x436b9c,'errors':_0x259b3a[_0x51b743(0xd3)]>0x0?_0x259b3a:undefined};}export function generateSqlSummary(_0x49ec4d){const _0x198490=a25_0x2ad3,_0x25b4e8=parseSqlStructure(_0x49ec4d),_0x1ffa6d=[];return _0x25b4e8[_0x198490(0xd2)]['length']>0x0&&_0x1ffa6d[_0x198490(0xad)]('Tables:\x20'+_0x25b4e8[_0x198490(0xd2)][_0x198490(0x9b)](',\x20')),_0x25b4e8[_0x198490(0xba)][_0x198490(0xd3)]>0x0&&_0x1ffa6d[_0x198490(0xad)](_0x198490(0xcf)+_0x25b4e8[_0x198490(0xba)]['map'](_0x179d8d=>_0x179d8d[_0x198490(0x9c)])[_0x198490(0x9b)](',\x20')),_0x25b4e8['joins']&&_0x25b4e8[_0x198490(0xd6)][_0x198490(0xd3)]>0x0&&_0x1ffa6d[_0x198490(0xad)](_0x198490(0xb9)+_0x25b4e8['joins'][_0x198490(0xd3)]),_0x1ffa6d['length']>0x0?_0x1ffa6d[_0x198490(0x9b)](_0x198490(0xc1)):_0x198490(0xa4);}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lovrabet/dataset-mcp-server",
|
|
3
|
-
"version": "1.3.2-beta.
|
|
3
|
+
"version": "1.3.2-beta.5",
|
|
4
4
|
"description": "MCP server for Lovrabet Dataset access",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"examples": "npm run example:basic && npm run example:sdk && npm run example:compare"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@lovrabet/dsparser": "
|
|
33
|
+
"@lovrabet/dsparser": "latest",
|
|
34
34
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
35
35
|
"axios": "^1.6.2",
|
|
36
36
|
"dotenv": "^16.3.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function a18_0x57d9(_0x665d35,_0x3439dc){_0x665d35=_0x665d35-0x151;const _0x49fdf0=a18_0x49fd();let _0x57d93a=_0x49fdf0[_0x665d35];return _0x57d93a;}function a18_0x49fd(){const _0x54f7a6=['5475138VCXYgT','getCustomSqlList','sqlId','LOVRABET_ENV','392864BnYnVM','LOVRABET_APP_CODE','DELETE\x5cs+FROM','replace','success','2926932ItlZof','trim','2391537wuDbab','appCode\x20is\x20required.\x20Provide\x20it\x20as\x20parameter\x20or\x20set\x20LOVRABET_APP_CODE\x20environment\x20variable.','sqlContent\x20is\x20required\x20and\x20cannot\x20be\x20empty.','test','SELECT','SQL\x20validation\x20failed:\x20','message','\x5c\x5cs+','sqlName','Forbidden\x20keyword\x20detected:\x20','2079526YQkSKd','dbId\x20is\x20required.\x20Get\x20it\x20from\x20get_dataset_detail\x20->\x20basic.database.dbId','data','NODE_ENV','valid','createdTime','CREATE\x5cs+(TABLE|INDEX|DATABASE|VIEW)','verified','6099280HbwPAx','sqlCode','toUpperCase','233300JHdqux','online','warn','tableData','Custom\x20SQL\x20saved\x20successfully','.\x20Only\x20SELECT\x20queries\x20are\x20allowed.','reason','56Kihaxg','Only\x20SELECT\x20queries\x20are\x20allowed.\x20The\x20SQL\x20must\x20start\x20with\x20SELECT\x20(after\x20any\x20comments).','SQL\x20content\x20cannot\x20be\x20empty','TRUNCATE','INSERT\x5cs+INTO','Failed\x20to\x20save\x20custom\x20SQL','UPDATE\x5cs+\x5cw+\x5cs+SET','name','DROP\x5cs+(TABLE|INDEX|DATABASE)','GRANT','env','saveUserCustomSql'];a18_0x49fd=function(){return _0x54f7a6;};return a18_0x49fd();}(function(_0x4b6212,_0x10c030){const _0x43e6e0=a18_0x57d9,_0x2c970a=_0x4b6212();while(!![]){try{const _0x9fdf22=parseInt(_0x43e6e0(0x170))/0x1+-parseInt(_0x43e6e0(0x165))/0x2+parseInt(_0x43e6e0(0x15b))/0x3+parseInt(_0x43e6e0(0x159))/0x4+-parseInt(_0x43e6e0(0x16d))/0x5+parseInt(_0x43e6e0(0x183))/0x6+-parseInt(_0x43e6e0(0x177))/0x7*(-parseInt(_0x43e6e0(0x154))/0x8);if(_0x9fdf22===_0x10c030)break;else _0x2c970a['push'](_0x2c970a['shift']());}catch(_0x4986ae){_0x2c970a['push'](_0x2c970a['shift']());}}}(a18_0x49fd,0xc542c));import{DevApiClient}from'../api/dev-api-client.js';function validateSelectSql(_0x753599){const _0x18ab11=a18_0x57d9;if(!_0x753599||typeof _0x753599!=='string')return{'valid':![],'reason':_0x18ab11(0x179)};const _0x26b0e5=_0x753599['replace'](/#\{[^}]*\}/g,'?')[_0x18ab11(0x157)](/\$\{[^}]*\}/g,'?')[_0x18ab11(0x157)](/@[^(\s]+(\([^)]*\))?/g,''),_0x54b7ab=_0x26b0e5[_0x18ab11(0x15a)](),_0x15ef9b=_0x54b7ab['split']('\x0a');let _0x2fa824='';for(const _0x4f44a1 of _0x15ef9b){const _0x3d012f=_0x4f44a1[_0x18ab11(0x15a)]();if(!_0x3d012f||_0x3d012f['startsWith']('--')||_0x3d012f['startsWith']('/*'))continue;_0x2fa824=_0x3d012f;break;}if(!_0x2fa824[_0x18ab11(0x16f)]()['startsWith'](_0x18ab11(0x15f)))return{'valid':![],'reason':_0x18ab11(0x178)};const _0x224000=[_0x18ab11(0x17b),_0x18ab11(0x17d),_0x18ab11(0x156),_0x18ab11(0x17f),'ALTER\x5cs+(TABLE|DATABASE)',_0x18ab11(0x16b),_0x18ab11(0x17a),_0x18ab11(0x180),'REVOKE','EXEC','EXECUTE'],_0x26c059=_0x54b7ab[_0x18ab11(0x16f)]();for(const _0x4518b3 of _0x224000){const _0x954053=new RegExp(_0x4518b3,'i');if(_0x954053['test'](_0x26c059))return{'valid':![],'reason':_0x18ab11(0x164)+_0x4518b3[_0x18ab11(0x157)](_0x18ab11(0x162),'\x20')+_0x18ab11(0x175)};}return{'valid':!![]};}export async function saveCustomSql(_0xf9eb16){const _0x3599e1=a18_0x57d9,{appCode:appCode=process[_0x3599e1(0x181)][_0x3599e1(0x155)],cookie:_0x334a8b,env:env=process[_0x3599e1(0x181)][_0x3599e1(0x153)]||_0x3599e1(0x171),sqlName:_0x2b5a51,dbId:_0x53ccc3,sqlContent:_0x161be5,verifyAfterSave:verifyAfterSave=!![]}=_0xf9eb16;if(!appCode)throw new Error(_0x3599e1(0x15c));if(!_0x2b5a51||_0x2b5a51[_0x3599e1(0x15a)]()==='')throw new Error('sqlName\x20is\x20required\x20and\x20cannot\x20be\x20empty.');if(!_0x53ccc3)throw new Error(_0x3599e1(0x166));if(!_0x161be5||_0x161be5[_0x3599e1(0x15a)]()==='')throw new Error(_0x3599e1(0x15d));const _0x518a38=validateSelectSql(_0x161be5);if(!_0x518a38[_0x3599e1(0x169)])throw new Error(_0x3599e1(0x160)+_0x518a38[_0x3599e1(0x176)]);const _0x5d0689=new DevApiClient({'appCode':appCode,'cookie':_0x334a8b,'env':env}),_0xe6a29f=_0x2b5a51[_0x3599e1(0x15a)](),_0x4242df=await _0x5d0689[_0x3599e1(0x182)]({'sqlName':_0xe6a29f,'dbId':_0x53ccc3,'sqlContent':_0x161be5['trim']()});if(!_0x4242df[_0x3599e1(0x158)])return{'success':![],'message':_0x4242df[_0x3599e1(0x161)]||_0x4242df['errorMsg']||_0x3599e1(0x17c)};const _0x54067c={'success':!![],'message':_0x3599e1(0x174),'data':_0x4242df[_0x3599e1(0x167)]};if(verifyAfterSave)try{const _0x15f2ba=await _0x5d0689[_0x3599e1(0x151)]({'pageSize':0xa,'currentPage':0x1,'sqlName':_0xe6a29f}),_0x43eae2=_0x15f2ba[_0x3599e1(0x167)]?.[_0x3599e1(0x173)]||[],_0x63802e=_0x43eae2['find'](_0x29feef=>_0x29feef[_0x3599e1(0x163)]===_0xe6a29f||_0x29feef[_0x3599e1(0x17e)]===_0xe6a29f);_0x63802e?_0x54067c[_0x3599e1(0x16c)]={'found':!![],'sqlInfo':{'sqlCode':_0x63802e[_0x3599e1(0x16e)]||appCode+'-'+(_0x63802e['sqlId']||_0x63802e['id']),'sqlId':_0x63802e[_0x3599e1(0x152)]||_0x63802e['id'],'name':_0x63802e['sqlName']||_0x63802e[_0x3599e1(0x17e)],'sqlContent':_0x63802e['sqlContent']||_0x63802e['sql'],'createdTime':_0x63802e[_0x3599e1(0x16a)]||_0x63802e['createTime']}}:_0x54067c[_0x3599e1(0x16c)]={'found':![]};}catch(_0x3e7c67){process['env'][_0x3599e1(0x168)]!==_0x3599e1(0x15e)&&console[_0x3599e1(0x172)]('[saveCustomSql]\x20Verification\x20query\x20failed:',_0x3e7c67),_0x54067c[_0x3599e1(0x16c)]={'found':![]};}return _0x54067c;}
|