@ibm/ibmi-mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/README.md +88 -0
  2. package/dist/config/index.d.ts +100 -0
  3. package/dist/config/index.d.ts.map +1 -0
  4. package/dist/config/index.js +463 -0
  5. package/dist/config/index.js.map +1 -0
  6. package/dist/config/resolver.d.ts +32 -0
  7. package/dist/config/resolver.d.ts.map +1 -0
  8. package/dist/config/resolver.js +60 -0
  9. package/dist/config/resolver.js.map +1 -0
  10. package/dist/ibmi-mcp-server/auth/crypto.d.ts +11 -0
  11. package/dist/ibmi-mcp-server/auth/crypto.d.ts.map +1 -0
  12. package/dist/ibmi-mcp-server/auth/crypto.js +100 -0
  13. package/dist/ibmi-mcp-server/auth/crypto.js.map +1 -0
  14. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.d.ts +28 -0
  15. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.d.ts.map +1 -0
  16. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js +243 -0
  17. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js.map +1 -0
  18. package/dist/ibmi-mcp-server/auth/index.d.ts +9 -0
  19. package/dist/ibmi-mcp-server/auth/index.d.ts.map +1 -0
  20. package/dist/ibmi-mcp-server/auth/index.js +8 -0
  21. package/dist/ibmi-mcp-server/auth/index.js.map +1 -0
  22. package/dist/ibmi-mcp-server/auth/tokenManager.d.ts +86 -0
  23. package/dist/ibmi-mcp-server/auth/tokenManager.d.ts.map +1 -0
  24. package/dist/ibmi-mcp-server/auth/tokenManager.js +214 -0
  25. package/dist/ibmi-mcp-server/auth/tokenManager.js.map +1 -0
  26. package/dist/ibmi-mcp-server/auth/types.d.ts +31 -0
  27. package/dist/ibmi-mcp-server/auth/types.d.ts.map +1 -0
  28. package/dist/ibmi-mcp-server/auth/types.js +5 -0
  29. package/dist/ibmi-mcp-server/auth/types.js.map +1 -0
  30. package/dist/ibmi-mcp-server/index.d.ts +8 -0
  31. package/dist/ibmi-mcp-server/index.d.ts.map +1 -0
  32. package/dist/ibmi-mcp-server/index.js +126 -0
  33. package/dist/ibmi-mcp-server/index.js.map +1 -0
  34. package/dist/ibmi-mcp-server/resources/toolsetsResource/index.d.ts +7 -0
  35. package/dist/ibmi-mcp-server/resources/toolsetsResource/index.d.ts.map +1 -0
  36. package/dist/ibmi-mcp-server/resources/toolsetsResource/index.js +7 -0
  37. package/dist/ibmi-mcp-server/resources/toolsetsResource/index.js.map +1 -0
  38. package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.d.ts +106 -0
  39. package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.d.ts.map +1 -0
  40. package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.js +145 -0
  41. package/dist/ibmi-mcp-server/resources/toolsetsResource/logic.js.map +1 -0
  42. package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.d.ts +16 -0
  43. package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.d.ts.map +1 -0
  44. package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.js +110 -0
  45. package/dist/ibmi-mcp-server/resources/toolsetsResource/registration.js.map +1 -0
  46. package/dist/ibmi-mcp-server/schemas/common.d.ts +174 -0
  47. package/dist/ibmi-mcp-server/schemas/common.d.ts.map +1 -0
  48. package/dist/ibmi-mcp-server/schemas/common.js +119 -0
  49. package/dist/ibmi-mcp-server/schemas/common.js.map +1 -0
  50. package/dist/ibmi-mcp-server/schemas/config.d.ts +858 -0
  51. package/dist/ibmi-mcp-server/schemas/config.d.ts.map +1 -0
  52. package/dist/ibmi-mcp-server/schemas/config.js +248 -0
  53. package/dist/ibmi-mcp-server/schemas/config.js.map +1 -0
  54. package/dist/ibmi-mcp-server/schemas/index.d.ts +12 -0
  55. package/dist/ibmi-mcp-server/schemas/index.d.ts.map +1 -0
  56. package/dist/ibmi-mcp-server/schemas/index.js +20 -0
  57. package/dist/ibmi-mcp-server/schemas/index.js.map +1 -0
  58. package/dist/ibmi-mcp-server/schemas/tools.d.ts +287 -0
  59. package/dist/ibmi-mcp-server/schemas/tools.d.ts.map +1 -0
  60. package/dist/ibmi-mcp-server/schemas/tools.js +167 -0
  61. package/dist/ibmi-mcp-server/schemas/tools.js.map +1 -0
  62. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts +82 -0
  63. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts.map +1 -0
  64. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js +262 -0
  65. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js.map +1 -0
  66. package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts +130 -0
  67. package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts.map +1 -0
  68. package/dist/ibmi-mcp-server/services/baseConnectionPool.js +431 -0
  69. package/dist/ibmi-mcp-server/services/baseConnectionPool.js.map +1 -0
  70. package/dist/ibmi-mcp-server/services/connectionPool.d.ts +60 -0
  71. package/dist/ibmi-mcp-server/services/connectionPool.d.ts.map +1 -0
  72. package/dist/ibmi-mcp-server/services/connectionPool.js +153 -0
  73. package/dist/ibmi-mcp-server/services/connectionPool.js.map +1 -0
  74. package/dist/ibmi-mcp-server/services/securityValidation.d.ts +35 -0
  75. package/dist/ibmi-mcp-server/services/securityValidation.d.ts.map +1 -0
  76. package/dist/ibmi-mcp-server/services/securityValidation.js +93 -0
  77. package/dist/ibmi-mcp-server/services/securityValidation.js.map +1 -0
  78. package/dist/ibmi-mcp-server/services/sourceManager.d.ts +82 -0
  79. package/dist/ibmi-mcp-server/services/sourceManager.d.ts.map +1 -0
  80. package/dist/ibmi-mcp-server/services/sourceManager.js +151 -0
  81. package/dist/ibmi-mcp-server/services/sourceManager.js.map +1 -0
  82. package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts +9 -0
  83. package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts.map +1 -0
  84. package/dist/ibmi-mcp-server/tools/executeSql/index.js +9 -0
  85. package/dist/ibmi-mcp-server/tools/executeSql/index.js.map +1 -0
  86. package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts +51 -0
  87. package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts.map +1 -0
  88. package/dist/ibmi-mcp-server/tools/executeSql/logic.js +179 -0
  89. package/dist/ibmi-mcp-server/tools/executeSql/logic.js.map +1 -0
  90. package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts +52 -0
  91. package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts.map +1 -0
  92. package/dist/ibmi-mcp-server/tools/executeSql/registration.js +161 -0
  93. package/dist/ibmi-mcp-server/tools/executeSql/registration.js.map +1 -0
  94. package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts +13 -0
  95. package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts.map +1 -0
  96. package/dist/ibmi-mcp-server/tools/generateSql/index.js +13 -0
  97. package/dist/ibmi-mcp-server/tools/generateSql/index.js.map +1 -0
  98. package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts +64 -0
  99. package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts.map +1 -0
  100. package/dist/ibmi-mcp-server/tools/generateSql/logic.js +190 -0
  101. package/dist/ibmi-mcp-server/tools/generateSql/logic.js.map +1 -0
  102. package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts +18 -0
  103. package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts.map +1 -0
  104. package/dist/ibmi-mcp-server/tools/generateSql/registration.js +64 -0
  105. package/dist/ibmi-mcp-server/tools/generateSql/registration.js.map +1 -0
  106. package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts +42 -0
  107. package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts.map +1 -0
  108. package/dist/ibmi-mcp-server/utils/cli/argumentParser.js +156 -0
  109. package/dist/ibmi-mcp-server/utils/cli/argumentParser.js.map +1 -0
  110. package/dist/ibmi-mcp-server/utils/cli/index.d.ts +6 -0
  111. package/dist/ibmi-mcp-server/utils/cli/index.d.ts.map +1 -0
  112. package/dist/ibmi-mcp-server/utils/cli/index.js +6 -0
  113. package/dist/ibmi-mcp-server/utils/cli/index.js.map +1 -0
  114. package/dist/ibmi-mcp-server/utils/config/configParser.d.ts +77 -0
  115. package/dist/ibmi-mcp-server/utils/config/configParser.d.ts.map +1 -0
  116. package/dist/ibmi-mcp-server/utils/config/configParser.js +309 -0
  117. package/dist/ibmi-mcp-server/utils/config/configParser.js.map +1 -0
  118. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts +143 -0
  119. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts.map +1 -0
  120. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js +665 -0
  121. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js.map +1 -0
  122. package/dist/ibmi-mcp-server/utils/config/toolConfigCache.d.ts +71 -0
  123. package/dist/ibmi-mcp-server/utils/config/toolConfigCache.d.ts.map +1 -0
  124. package/dist/ibmi-mcp-server/utils/config/toolConfigCache.js +158 -0
  125. package/dist/ibmi-mcp-server/utils/config/toolConfigCache.js.map +1 -0
  126. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts +206 -0
  127. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts.map +1 -0
  128. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js +236 -0
  129. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js.map +1 -0
  130. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts +65 -0
  131. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts.map +1 -0
  132. package/dist/ibmi-mcp-server/utils/config/toolFactory.js +236 -0
  133. package/dist/ibmi-mcp-server/utils/config/toolFactory.js.map +1 -0
  134. package/dist/ibmi-mcp-server/utils/config/toolProcessor.d.ts +175 -0
  135. package/dist/ibmi-mcp-server/utils/config/toolProcessor.d.ts.map +1 -0
  136. package/dist/ibmi-mcp-server/utils/config/toolProcessor.js +460 -0
  137. package/dist/ibmi-mcp-server/utils/config/toolProcessor.js.map +1 -0
  138. package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts +126 -0
  139. package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts.map +1 -0
  140. package/dist/ibmi-mcp-server/utils/config/toolsetManager.js +240 -0
  141. package/dist/ibmi-mcp-server/utils/config/toolsetManager.js.map +1 -0
  142. package/dist/ibmi-mcp-server/utils/config/types.d.ts +74 -0
  143. package/dist/ibmi-mcp-server/utils/config/types.d.ts.map +1 -0
  144. package/dist/ibmi-mcp-server/utils/config/types.js +8 -0
  145. package/dist/ibmi-mcp-server/utils/config/types.js.map +1 -0
  146. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts +116 -0
  147. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts.map +1 -0
  148. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +426 -0
  149. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -0
  150. package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.d.ts +182 -0
  151. package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.d.ts.map +1 -0
  152. package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.js +726 -0
  153. package/dist/ibmi-mcp-server/utils/sql/parameterProcessor.js.map +1 -0
  154. package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.d.ts +90 -0
  155. package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.d.ts.map +1 -0
  156. package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.js +187 -0
  157. package/dist/ibmi-mcp-server/utils/sql/sqlTemplateProcessor.js.map +1 -0
  158. package/dist/index.d.ts +10 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +270 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/mcp-server/constants.d.ts +13 -0
  163. package/dist/mcp-server/constants.d.ts.map +1 -0
  164. package/dist/mcp-server/constants.js +13 -0
  165. package/dist/mcp-server/constants.js.map +1 -0
  166. package/dist/mcp-server/logging/index.d.ts +8 -0
  167. package/dist/mcp-server/logging/index.d.ts.map +1 -0
  168. package/dist/mcp-server/logging/index.js +8 -0
  169. package/dist/mcp-server/logging/index.js.map +1 -0
  170. package/dist/mcp-server/logging/setLevelHandler.d.ts +38 -0
  171. package/dist/mcp-server/logging/setLevelHandler.d.ts.map +1 -0
  172. package/dist/mcp-server/logging/setLevelHandler.js +83 -0
  173. package/dist/mcp-server/logging/setLevelHandler.js.map +1 -0
  174. package/dist/mcp-server/resources/echoResource/index.d.ts +14 -0
  175. package/dist/mcp-server/resources/echoResource/index.d.ts.map +1 -0
  176. package/dist/mcp-server/resources/echoResource/index.js +14 -0
  177. package/dist/mcp-server/resources/echoResource/index.js.map +1 -0
  178. package/dist/mcp-server/resources/echoResource/logic.d.ts +37 -0
  179. package/dist/mcp-server/resources/echoResource/logic.d.ts.map +1 -0
  180. package/dist/mcp-server/resources/echoResource/logic.js +46 -0
  181. package/dist/mcp-server/resources/echoResource/logic.js.map +1 -0
  182. package/dist/mcp-server/resources/echoResource/registration.d.ts +7 -0
  183. package/dist/mcp-server/resources/echoResource/registration.d.ts.map +1 -0
  184. package/dist/mcp-server/resources/echoResource/registration.js +51 -0
  185. package/dist/mcp-server/resources/echoResource/registration.js.map +1 -0
  186. package/dist/mcp-server/resources/index.d.ts +10 -0
  187. package/dist/mcp-server/resources/index.d.ts.map +1 -0
  188. package/dist/mcp-server/resources/index.js +19 -0
  189. package/dist/mcp-server/resources/index.js.map +1 -0
  190. package/dist/mcp-server/resources/utils/resource-utils.d.ts +43 -0
  191. package/dist/mcp-server/resources/utils/resource-utils.d.ts.map +1 -0
  192. package/dist/mcp-server/resources/utils/resource-utils.js +44 -0
  193. package/dist/mcp-server/resources/utils/resource-utils.js.map +1 -0
  194. package/dist/mcp-server/server.d.ts +23 -0
  195. package/dist/mcp-server/server.d.ts.map +1 -0
  196. package/dist/mcp-server/server.js +114 -0
  197. package/dist/mcp-server/server.js.map +1 -0
  198. package/dist/mcp-server/tools/catFactFetcher/index.d.ts +8 -0
  199. package/dist/mcp-server/tools/catFactFetcher/index.d.ts.map +1 -0
  200. package/dist/mcp-server/tools/catFactFetcher/index.js +8 -0
  201. package/dist/mcp-server/tools/catFactFetcher/index.js.map +1 -0
  202. package/dist/mcp-server/tools/catFactFetcher/logic.d.ts +52 -0
  203. package/dist/mcp-server/tools/catFactFetcher/logic.d.ts.map +1 -0
  204. package/dist/mcp-server/tools/catFactFetcher/logic.js +95 -0
  205. package/dist/mcp-server/tools/catFactFetcher/logic.js.map +1 -0
  206. package/dist/mcp-server/tools/catFactFetcher/registration.d.ts +9 -0
  207. package/dist/mcp-server/tools/catFactFetcher/registration.d.ts.map +1 -0
  208. package/dist/mcp-server/tools/catFactFetcher/registration.js +43 -0
  209. package/dist/mcp-server/tools/catFactFetcher/registration.js.map +1 -0
  210. package/dist/mcp-server/tools/echoTool/index.d.ts +13 -0
  211. package/dist/mcp-server/tools/echoTool/index.d.ts.map +1 -0
  212. package/dist/mcp-server/tools/echoTool/index.js +13 -0
  213. package/dist/mcp-server/tools/echoTool/index.js.map +1 -0
  214. package/dist/mcp-server/tools/echoTool/logic.d.ts +69 -0
  215. package/dist/mcp-server/tools/echoTool/logic.d.ts.map +1 -0
  216. package/dist/mcp-server/tools/echoTool/logic.js +119 -0
  217. package/dist/mcp-server/tools/echoTool/logic.js.map +1 -0
  218. package/dist/mcp-server/tools/echoTool/registration.d.ts +9 -0
  219. package/dist/mcp-server/tools/echoTool/registration.d.ts.map +1 -0
  220. package/dist/mcp-server/tools/echoTool/registration.js +45 -0
  221. package/dist/mcp-server/tools/echoTool/registration.js.map +1 -0
  222. package/dist/mcp-server/tools/imageTest/index.d.ts +7 -0
  223. package/dist/mcp-server/tools/imageTest/index.d.ts.map +1 -0
  224. package/dist/mcp-server/tools/imageTest/index.js +7 -0
  225. package/dist/mcp-server/tools/imageTest/index.js.map +1 -0
  226. package/dist/mcp-server/tools/imageTest/logic.d.ts +27 -0
  227. package/dist/mcp-server/tools/imageTest/logic.d.ts.map +1 -0
  228. package/dist/mcp-server/tools/imageTest/logic.js +44 -0
  229. package/dist/mcp-server/tools/imageTest/logic.js.map +1 -0
  230. package/dist/mcp-server/tools/imageTest/registration.d.ts +9 -0
  231. package/dist/mcp-server/tools/imageTest/registration.d.ts.map +1 -0
  232. package/dist/mcp-server/tools/imageTest/registration.js +49 -0
  233. package/dist/mcp-server/tools/imageTest/registration.js.map +1 -0
  234. package/dist/mcp-server/tools/index.d.ts +4 -0
  235. package/dist/mcp-server/tools/index.d.ts.map +1 -0
  236. package/dist/mcp-server/tools/index.js +13 -0
  237. package/dist/mcp-server/tools/index.js.map +1 -0
  238. package/dist/mcp-server/tools/utils/tool-utils.d.ts +43 -0
  239. package/dist/mcp-server/tools/utils/tool-utils.d.ts.map +1 -0
  240. package/dist/mcp-server/tools/utils/tool-utils.js +44 -0
  241. package/dist/mcp-server/tools/utils/tool-utils.js.map +1 -0
  242. package/dist/mcp-server/transports/auth/authFactory.d.ts +11 -0
  243. package/dist/mcp-server/transports/auth/authFactory.d.ts.map +1 -0
  244. package/dist/mcp-server/transports/auth/authFactory.js +46 -0
  245. package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
  246. package/dist/mcp-server/transports/auth/authMiddleware.d.ts +20 -0
  247. package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
  248. package/dist/mcp-server/transports/auth/authMiddleware.js +58 -0
  249. package/dist/mcp-server/transports/auth/authMiddleware.js.map +1 -0
  250. package/dist/mcp-server/transports/auth/index.d.ts +14 -0
  251. package/dist/mcp-server/transports/auth/index.d.ts.map +1 -0
  252. package/dist/mcp-server/transports/auth/index.js +12 -0
  253. package/dist/mcp-server/transports/auth/index.js.map +1 -0
  254. package/dist/mcp-server/transports/auth/lib/authContext.d.ts +34 -0
  255. package/dist/mcp-server/transports/auth/lib/authContext.d.ts.map +1 -0
  256. package/dist/mcp-server/transports/auth/lib/authContext.js +25 -0
  257. package/dist/mcp-server/transports/auth/lib/authContext.js.map +1 -0
  258. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +15 -0
  259. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
  260. package/dist/mcp-server/transports/auth/lib/authTypes.js +9 -0
  261. package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
  262. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +19 -0
  263. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
  264. package/dist/mcp-server/transports/auth/lib/authUtils.js +53 -0
  265. package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
  266. package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts +18 -0
  267. package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts.map +1 -0
  268. package/dist/mcp-server/transports/auth/strategies/authStrategy.js +2 -0
  269. package/dist/mcp-server/transports/auth/strategies/authStrategy.js.map +1 -0
  270. package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.d.ts +21 -0
  271. package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.d.ts.map +1 -0
  272. package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.js +64 -0
  273. package/dist/mcp-server/transports/auth/strategies/ibmiTokenStrategy.js.map +1 -0
  274. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts +8 -0
  275. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
  276. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +118 -0
  277. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
  278. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +8 -0
  279. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
  280. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +118 -0
  281. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -0
  282. package/dist/mcp-server/transports/core/autoTransportManager.d.ts +48 -0
  283. package/dist/mcp-server/transports/core/autoTransportManager.d.ts.map +1 -0
  284. package/dist/mcp-server/transports/core/autoTransportManager.js +57 -0
  285. package/dist/mcp-server/transports/core/autoTransportManager.js.map +1 -0
  286. package/dist/mcp-server/transports/core/baseTransportManager.d.ts +17 -0
  287. package/dist/mcp-server/transports/core/baseTransportManager.d.ts.map +1 -0
  288. package/dist/mcp-server/transports/core/baseTransportManager.js +20 -0
  289. package/dist/mcp-server/transports/core/baseTransportManager.js.map +1 -0
  290. package/dist/mcp-server/transports/core/headerUtils.d.ts +27 -0
  291. package/dist/mcp-server/transports/core/headerUtils.d.ts.map +1 -0
  292. package/dist/mcp-server/transports/core/headerUtils.js +53 -0
  293. package/dist/mcp-server/transports/core/headerUtils.js.map +1 -0
  294. package/dist/mcp-server/transports/core/honoNodeBridge.d.ts +77 -0
  295. package/dist/mcp-server/transports/core/honoNodeBridge.d.ts.map +1 -0
  296. package/dist/mcp-server/transports/core/honoNodeBridge.js +150 -0
  297. package/dist/mcp-server/transports/core/honoNodeBridge.js.map +1 -0
  298. package/dist/mcp-server/transports/core/statefulTransportManager.d.ts +81 -0
  299. package/dist/mcp-server/transports/core/statefulTransportManager.d.ts.map +1 -0
  300. package/dist/mcp-server/transports/core/statefulTransportManager.js +326 -0
  301. package/dist/mcp-server/transports/core/statefulTransportManager.js.map +1 -0
  302. package/dist/mcp-server/transports/core/statelessTransportManager.d.ts +57 -0
  303. package/dist/mcp-server/transports/core/statelessTransportManager.d.ts.map +1 -0
  304. package/dist/mcp-server/transports/core/statelessTransportManager.js +151 -0
  305. package/dist/mcp-server/transports/core/statelessTransportManager.js.map +1 -0
  306. package/dist/mcp-server/transports/core/transportRequest.d.ts +9 -0
  307. package/dist/mcp-server/transports/core/transportRequest.d.ts.map +1 -0
  308. package/dist/mcp-server/transports/core/transportRequest.js +2 -0
  309. package/dist/mcp-server/transports/core/transportRequest.js.map +1 -0
  310. package/dist/mcp-server/transports/core/transportTypes.d.ts +112 -0
  311. package/dist/mcp-server/transports/core/transportTypes.d.ts.map +1 -0
  312. package/dist/mcp-server/transports/core/transportTypes.js +15 -0
  313. package/dist/mcp-server/transports/core/transportTypes.js.map +1 -0
  314. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts +25 -0
  315. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -0
  316. package/dist/mcp-server/transports/http/httpErrorHandler.js +86 -0
  317. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
  318. package/dist/mcp-server/transports/http/httpTransport.d.ts +27 -0
  319. package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
  320. package/dist/mcp-server/transports/http/httpTransport.js +407 -0
  321. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -0
  322. package/dist/mcp-server/transports/http/httpTypes.d.ts +17 -0
  323. package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -0
  324. package/dist/mcp-server/transports/http/httpTypes.js +6 -0
  325. package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
  326. package/dist/mcp-server/transports/http/index.d.ts +8 -0
  327. package/dist/mcp-server/transports/http/index.d.ts.map +1 -0
  328. package/dist/mcp-server/transports/http/index.js +7 -0
  329. package/dist/mcp-server/transports/http/index.js.map +1 -0
  330. package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts +21 -0
  331. package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts.map +1 -0
  332. package/dist/mcp-server/transports/http/mcpTransportMiddleware.js +54 -0
  333. package/dist/mcp-server/transports/http/mcpTransportMiddleware.js.map +1 -0
  334. package/dist/mcp-server/transports/stdio/index.d.ts +6 -0
  335. package/dist/mcp-server/transports/stdio/index.d.ts.map +1 -0
  336. package/dist/mcp-server/transports/stdio/index.js +6 -0
  337. package/dist/mcp-server/transports/stdio/index.js.map +1 -0
  338. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +43 -0
  339. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
  340. package/dist/mcp-server/transports/stdio/stdioTransport.js +71 -0
  341. package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
  342. package/dist/services/duck-db/duckDBConnectionManager.d.ts +55 -0
  343. package/dist/services/duck-db/duckDBConnectionManager.d.ts.map +1 -0
  344. package/dist/services/duck-db/duckDBConnectionManager.js +184 -0
  345. package/dist/services/duck-db/duckDBConnectionManager.js.map +1 -0
  346. package/dist/services/duck-db/duckDBQueryExecutor.d.ts +18 -0
  347. package/dist/services/duck-db/duckDBQueryExecutor.d.ts.map +1 -0
  348. package/dist/services/duck-db/duckDBQueryExecutor.js +115 -0
  349. package/dist/services/duck-db/duckDBQueryExecutor.js.map +1 -0
  350. package/dist/services/duck-db/duckDBService.d.ts +27 -0
  351. package/dist/services/duck-db/duckDBService.d.ts.map +1 -0
  352. package/dist/services/duck-db/duckDBService.js +151 -0
  353. package/dist/services/duck-db/duckDBService.js.map +1 -0
  354. package/dist/services/duck-db/types.d.ts +135 -0
  355. package/dist/services/duck-db/types.d.ts.map +1 -0
  356. package/dist/services/duck-db/types.js +6 -0
  357. package/dist/services/duck-db/types.js.map +1 -0
  358. package/dist/services/llm-providers/openRouterProvider.d.ts +36 -0
  359. package/dist/services/llm-providers/openRouterProvider.d.ts.map +1 -0
  360. package/dist/services/llm-providers/openRouterProvider.js +235 -0
  361. package/dist/services/llm-providers/openRouterProvider.js.map +1 -0
  362. package/dist/services/supabase/supabaseClient.d.ts +25 -0
  363. package/dist/services/supabase/supabaseClient.d.ts.map +1 -0
  364. package/dist/services/supabase/supabaseClient.js +68 -0
  365. package/dist/services/supabase/supabaseClient.js.map +1 -0
  366. package/dist/storage/duckdbExample.d.ts +8 -0
  367. package/dist/storage/duckdbExample.d.ts.map +1 -0
  368. package/dist/storage/duckdbExample.js +197 -0
  369. package/dist/storage/duckdbExample.js.map +1 -0
  370. package/dist/types-global/errors.d.ts +101 -0
  371. package/dist/types-global/errors.d.ts.map +1 -0
  372. package/dist/types-global/errors.js +109 -0
  373. package/dist/types-global/errors.js.map +1 -0
  374. package/dist/utils/formatting/index.d.ts +10 -0
  375. package/dist/utils/formatting/index.d.ts.map +1 -0
  376. package/dist/utils/formatting/index.js +10 -0
  377. package/dist/utils/formatting/index.js.map +1 -0
  378. package/dist/utils/formatting/markdownBuilder.d.ts +348 -0
  379. package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
  380. package/dist/utils/formatting/markdownBuilder.js +501 -0
  381. package/dist/utils/formatting/markdownBuilder.js.map +1 -0
  382. package/dist/utils/formatting/sqlFormattingUtils.d.ts +69 -0
  383. package/dist/utils/formatting/sqlFormattingUtils.d.ts.map +1 -0
  384. package/dist/utils/formatting/sqlFormattingUtils.js +131 -0
  385. package/dist/utils/formatting/sqlFormattingUtils.js.map +1 -0
  386. package/dist/utils/formatting/tableFormatter.d.ts +268 -0
  387. package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
  388. package/dist/utils/formatting/tableFormatter.js +550 -0
  389. package/dist/utils/formatting/tableFormatter.js.map +1 -0
  390. package/dist/utils/index.d.ts +13 -0
  391. package/dist/utils/index.d.ts.map +1 -0
  392. package/dist/utils/index.js +21 -0
  393. package/dist/utils/index.js.map +1 -0
  394. package/dist/utils/internal/asyncContext.d.ts +35 -0
  395. package/dist/utils/internal/asyncContext.d.ts.map +1 -0
  396. package/dist/utils/internal/asyncContext.js +38 -0
  397. package/dist/utils/internal/asyncContext.js.map +1 -0
  398. package/dist/utils/internal/errorHandler.d.ts +95 -0
  399. package/dist/utils/internal/errorHandler.d.ts.map +1 -0
  400. package/dist/utils/internal/errorHandler.js +210 -0
  401. package/dist/utils/internal/errorHandler.js.map +1 -0
  402. package/dist/utils/internal/index.d.ts +12 -0
  403. package/dist/utils/internal/index.d.ts.map +1 -0
  404. package/dist/utils/internal/index.js +12 -0
  405. package/dist/utils/internal/index.js.map +1 -0
  406. package/dist/utils/internal/logger.d.ts +30 -0
  407. package/dist/utils/internal/logger.d.ts.map +1 -0
  408. package/dist/utils/internal/logger.js +228 -0
  409. package/dist/utils/internal/logger.js.map +1 -0
  410. package/dist/utils/internal/logging-helpers.d.ts +49 -0
  411. package/dist/utils/internal/logging-helpers.d.ts.map +1 -0
  412. package/dist/utils/internal/logging-helpers.js +60 -0
  413. package/dist/utils/internal/logging-helpers.js.map +1 -0
  414. package/dist/utils/internal/performance.d.ts +19 -0
  415. package/dist/utils/internal/performance.d.ts.map +1 -0
  416. package/dist/utils/internal/performance.js +110 -0
  417. package/dist/utils/internal/performance.js.map +1 -0
  418. package/dist/utils/internal/requestContext.d.ts +41 -0
  419. package/dist/utils/internal/requestContext.d.ts.map +1 -0
  420. package/dist/utils/internal/requestContext.js +47 -0
  421. package/dist/utils/internal/requestContext.js.map +1 -0
  422. package/dist/utils/metrics/index.d.ts +8 -0
  423. package/dist/utils/metrics/index.d.ts.map +1 -0
  424. package/dist/utils/metrics/index.js +8 -0
  425. package/dist/utils/metrics/index.js.map +1 -0
  426. package/dist/utils/metrics/tokenCounter.d.ts +36 -0
  427. package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
  428. package/dist/utils/metrics/tokenCounter.js +115 -0
  429. package/dist/utils/metrics/tokenCounter.js.map +1 -0
  430. package/dist/utils/network/fetchWithTimeout.d.ts +22 -0
  431. package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
  432. package/dist/utils/network/fetchWithTimeout.js +78 -0
  433. package/dist/utils/network/fetchWithTimeout.js.map +1 -0
  434. package/dist/utils/network/index.d.ts +7 -0
  435. package/dist/utils/network/index.d.ts.map +1 -0
  436. package/dist/utils/network/index.js +6 -0
  437. package/dist/utils/network/index.js.map +1 -0
  438. package/dist/utils/parsing/dateParser.d.ts +73 -0
  439. package/dist/utils/parsing/dateParser.d.ts.map +1 -0
  440. package/dist/utils/parsing/dateParser.js +108 -0
  441. package/dist/utils/parsing/dateParser.js.map +1 -0
  442. package/dist/utils/parsing/index.d.ts +9 -0
  443. package/dist/utils/parsing/index.d.ts.map +1 -0
  444. package/dist/utils/parsing/index.js +9 -0
  445. package/dist/utils/parsing/index.js.map +1 -0
  446. package/dist/utils/parsing/jsonParser.d.ts +83 -0
  447. package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
  448. package/dist/utils/parsing/jsonParser.js +128 -0
  449. package/dist/utils/parsing/jsonParser.js.map +1 -0
  450. package/dist/utils/scheduling/index.d.ts +7 -0
  451. package/dist/utils/scheduling/index.d.ts.map +1 -0
  452. package/dist/utils/scheduling/index.js +7 -0
  453. package/dist/utils/scheduling/index.js.map +1 -0
  454. package/dist/utils/scheduling/scheduler.d.ts +73 -0
  455. package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
  456. package/dist/utils/scheduling/scheduler.js +155 -0
  457. package/dist/utils/scheduling/scheduler.js.map +1 -0
  458. package/dist/utils/security/idGenerator.d.ts +144 -0
  459. package/dist/utils/security/idGenerator.d.ts.map +1 -0
  460. package/dist/utils/security/idGenerator.js +232 -0
  461. package/dist/utils/security/idGenerator.js.map +1 -0
  462. package/dist/utils/security/index.d.ts +10 -0
  463. package/dist/utils/security/index.d.ts.map +1 -0
  464. package/dist/utils/security/index.js +10 -0
  465. package/dist/utils/security/index.js.map +1 -0
  466. package/dist/utils/security/rateLimiter.d.ts +109 -0
  467. package/dist/utils/security/rateLimiter.d.ts.map +1 -0
  468. package/dist/utils/security/rateLimiter.js +202 -0
  469. package/dist/utils/security/rateLimiter.js.map +1 -0
  470. package/dist/utils/security/sanitization.d.ts +185 -0
  471. package/dist/utils/security/sanitization.d.ts.map +1 -0
  472. package/dist/utils/security/sanitization.js +472 -0
  473. package/dist/utils/security/sanitization.js.map +1 -0
  474. package/dist/utils/telemetry/instrumentation.d.ts +8 -0
  475. package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
  476. package/dist/utils/telemetry/instrumentation.js +121 -0
  477. package/dist/utils/telemetry/instrumentation.js.map +1 -0
  478. package/dist/utils/telemetry/semconv.d.ts +16 -0
  479. package/dist/utils/telemetry/semconv.d.ts.map +1 -0
  480. package/dist/utils/telemetry/semconv.js +16 -0
  481. package/dist/utils/telemetry/semconv.js.map +1 -0
  482. package/package.json +161 -0
@@ -0,0 +1,426 @@
1
+ /**
2
+ * @fileoverview SQL Security Validator for validating SQL queries against security policies
3
+ * Provides both AST-based and regex-based validation with comprehensive security checks
4
+ *
5
+ * @module src/utils/security/sqlSecurityValidator
6
+ */
7
+ import pkg from "node-sql-parser";
8
+ const { Parser } = pkg;
9
+ import { logger } from "../../../utils/internal/logger.js";
10
+ import { JsonRpcErrorCode, McpError } from "../../../types-global/errors.js";
11
+ /**
12
+ * Dangerous SQL operations that should be blocked in read-only mode
13
+ */
14
+ export const DANGEROUS_OPERATIONS = [
15
+ // Data manipulation
16
+ "INSERT",
17
+ "UPDATE",
18
+ "DELETE",
19
+ "REPLACE",
20
+ "MERGE",
21
+ "TRUNCATE",
22
+ // Schema operations
23
+ "DROP",
24
+ "CREATE",
25
+ "ALTER",
26
+ "RENAME",
27
+ // System operations
28
+ "CALL",
29
+ "EXEC",
30
+ "EXECUTE",
31
+ "SET",
32
+ "DECLARE",
33
+ // Security operations
34
+ "GRANT",
35
+ "REVOKE",
36
+ "DENY",
37
+ // Data transfer
38
+ "LOAD",
39
+ "IMPORT",
40
+ "EXPORT",
41
+ "BULK",
42
+ // System control
43
+ "SHUTDOWN",
44
+ "RESTART",
45
+ "KILL",
46
+ "STOP",
47
+ "START",
48
+ // Backup/restore
49
+ "BACKUP",
50
+ "RESTORE",
51
+ "DUMP",
52
+ // Locking
53
+ "LOCK",
54
+ "UNLOCK",
55
+ // Transaction control (in some contexts dangerous)
56
+ "COMMIT",
57
+ "ROLLBACK",
58
+ "SAVEPOINT",
59
+ // IBM i specific
60
+ "QCMDEXC",
61
+ "SQL_EXECUTE_IMMEDIATE",
62
+ ];
63
+ /**
64
+ * Dangerous SQL functions that should be monitored/blocked
65
+ */
66
+ export const DANGEROUS_FUNCTIONS = [
67
+ "SYSTEM",
68
+ "QCMDEXC",
69
+ "SQL_EXECUTE_IMMEDIATE",
70
+ "SQLCMD",
71
+ "LOAD_EXTENSION",
72
+ "EXEC",
73
+ "EXECUTE_IMMEDIATE",
74
+ "EVAL",
75
+ "CONCAT",
76
+ "CHAR",
77
+ "VARCHAR", // Can be used for dynamic SQL construction
78
+ ];
79
+ /**
80
+ * Dangerous SQL patterns that should be detected
81
+ */
82
+ export const DANGEROUS_PATTERNS = [
83
+ // Dynamic SQL patterns
84
+ /\bCONCAT\s*\(/i,
85
+ /\b(CHAR|VARCHAR|CLOB)\s*\(/i,
86
+ // System function patterns
87
+ /\bSYSTEM\s*\(/i,
88
+ /\bLOAD_EXTENSION\s*\(/i,
89
+ /\bQCMDEXC\s*\(/i,
90
+ // Comment-based bypass attempts
91
+ /\/\*.*?(DROP|DELETE|INSERT|UPDATE).*?\*\//i,
92
+ // Multiple statement patterns
93
+ /;\s*(DROP|DELETE|INSERT|UPDATE|CREATE|ALTER)/i,
94
+ // Union-based attacks
95
+ /\bUNION\s+(ALL\s+)?\s*\(\s*(DROP|DELETE|INSERT|UPDATE)/i,
96
+ ];
97
+ /**
98
+ * SQL Security Validator class for comprehensive SQL security validation
99
+ */
100
+ export class SqlSecurityValidator {
101
+ static parser = new Parser();
102
+ /**
103
+ * Validate SQL query against security configuration
104
+ * @param query - SQL query to validate
105
+ * @param securityConfig - Security configuration
106
+ * @param context - Request context for logging
107
+ * @throws {McpError} If validation fails
108
+ */
109
+ static validateQuery(query, securityConfig, context) {
110
+ logger.debug({
111
+ ...context,
112
+ queryLength: query.length,
113
+ readOnly: securityConfig.readOnly,
114
+ maxQueryLength: securityConfig.maxQueryLength,
115
+ }, "Starting SQL security validation");
116
+ // 1. Check query length limit
117
+ this.validateQueryLength(query, securityConfig);
118
+ // 2. Always validate forbidden keywords (regardless of read-only setting)
119
+ this.validateForbiddenKeywords(query, securityConfig, context);
120
+ // 3. If in read-only mode, perform comprehensive write operation validation
121
+ if (securityConfig.readOnly !== false) {
122
+ this.validateReadOnlyRestrictions(query, context);
123
+ }
124
+ logger.debug({
125
+ ...context,
126
+ }, "SQL security validation passed");
127
+ }
128
+ /**
129
+ * Validate query length against configured limits
130
+ * @param query - SQL query to validate
131
+ * @param securityConfig - Security configuration
132
+ * @private
133
+ */
134
+ static validateQueryLength(query, securityConfig) {
135
+ const maxLength = securityConfig.maxQueryLength ?? 10000;
136
+ if (query.length > maxLength) {
137
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Query exceeds maximum length of ${maxLength} characters`, {
138
+ queryLength: query.length,
139
+ maxLength,
140
+ query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
141
+ });
142
+ }
143
+ }
144
+ /**
145
+ * Validate forbidden keywords using both AST and regex approaches
146
+ * @param query - SQL query to validate
147
+ * @param securityConfig - Security configuration
148
+ * @param context - Request context for logging
149
+ * @private
150
+ */
151
+ static validateForbiddenKeywords(query, securityConfig, context) {
152
+ if (!securityConfig.forbiddenKeywords ||
153
+ securityConfig.forbiddenKeywords.length === 0) {
154
+ return;
155
+ }
156
+ // Try AST-based validation first
157
+ const astResult = this.validateForbiddenKeywordsAST(query, securityConfig.forbiddenKeywords, context);
158
+ if (!astResult.isValid) {
159
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Forbidden keywords detected: ${astResult.violations.join(", ")}`, {
160
+ violations: astResult.violations,
161
+ forbiddenKeywords: securityConfig.forbiddenKeywords,
162
+ query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
163
+ });
164
+ }
165
+ // Fallback to regex validation
166
+ const regexResult = this.validateForbiddenKeywordsRegex(query, securityConfig.forbiddenKeywords);
167
+ if (!regexResult.isValid) {
168
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Forbidden keywords detected: ${regexResult.violations.join(", ")}`, {
169
+ violations: regexResult.violations,
170
+ forbiddenKeywords: securityConfig.forbiddenKeywords,
171
+ query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
172
+ });
173
+ }
174
+ }
175
+ /**
176
+ * Validate read-only restrictions using comprehensive validation
177
+ * @param query - SQL query to validate
178
+ * @param context - Request context for logging
179
+ * @private
180
+ */
181
+ static validateReadOnlyRestrictions(query, context) {
182
+ // Try AST-based validation first (more reliable)
183
+ const astResult = this.validateQueryAST(query, context);
184
+ if (!astResult.isValid) {
185
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Write operations detected: ${astResult.violations.join(", ")}`, {
186
+ violations: astResult.violations,
187
+ readOnly: true,
188
+ query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
189
+ });
190
+ }
191
+ // Fallback to regex validation for additional coverage
192
+ const regexResult = this.validateQueryRegex(query, context);
193
+ if (!regexResult.isValid) {
194
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Write operations detected: ${regexResult.violations.join(", ")}`, {
195
+ violations: regexResult.violations,
196
+ readOnly: true,
197
+ query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
198
+ });
199
+ }
200
+ }
201
+ /**
202
+ * Validate SQL query using AST parsing
203
+ * @param query - SQL query to validate
204
+ * @param context - Request context for logging
205
+ * @private
206
+ */
207
+ static validateQueryAST(query, context) {
208
+ const violations = [];
209
+ try {
210
+ const ast = this.parser.astify(query, { database: "mysql" });
211
+ logger.debug({
212
+ ...context,
213
+ astType: Array.isArray(ast) ? "multiple" : "single",
214
+ statementCount: Array.isArray(ast) ? ast.length : 1,
215
+ }, "SQL AST parsed successfully");
216
+ const statements = Array.isArray(ast) ? ast : [ast];
217
+ for (const statement of statements) {
218
+ if (!statement || typeof statement !== "object")
219
+ continue;
220
+ const objStmt = statement;
221
+ const stmtType = String(objStmt.type || "").toUpperCase();
222
+ // 1. Check top-level statement type
223
+ if (stmtType &&
224
+ DANGEROUS_OPERATIONS.includes(stmtType)) {
225
+ violations.push(`Dangerous statement type: ${stmtType}`);
226
+ }
227
+ // 2. Check for dangerous functions anywhere in the AST
228
+ const dangerousFunctions = this.findDangerousFunctionsInAST(statement);
229
+ if (dangerousFunctions.length > 0) {
230
+ violations.push(...dangerousFunctions.map((f) => `Dangerous function: ${f}`));
231
+ }
232
+ // 3. Check for UNION-based attacks
233
+ if (this.hasUnionWithDangerousStatements(statement)) {
234
+ violations.push("UNION with dangerous statements detected");
235
+ }
236
+ }
237
+ return {
238
+ isValid: violations.length === 0,
239
+ violations,
240
+ validationMethod: "ast",
241
+ };
242
+ }
243
+ catch (parseError) {
244
+ logger.warning({
245
+ ...context,
246
+ error: parseError instanceof Error
247
+ ? parseError.message
248
+ : String(parseError),
249
+ queryLength: query.length,
250
+ }, "SQL AST parsing failed, will use regex validation only");
251
+ return {
252
+ isValid: true, // Let regex validation handle it
253
+ violations: [],
254
+ validationMethod: "ast",
255
+ };
256
+ }
257
+ }
258
+ /**
259
+ * Validate SQL query using regex patterns
260
+ * @param query - SQL query to validate
261
+ * @param _context - Request context for logging (unused but kept for consistency)
262
+ * @private
263
+ */
264
+ static validateQueryRegex(query, _context) {
265
+ const violations = [];
266
+ // Check for dangerous operations
267
+ for (const operation of DANGEROUS_OPERATIONS) {
268
+ const pattern = new RegExp(`\\b${operation}\\b`, "i");
269
+ if (pattern.test(query)) {
270
+ violations.push(`Write operation '${operation}' detected`);
271
+ }
272
+ }
273
+ // Check for dangerous patterns
274
+ for (const pattern of DANGEROUS_PATTERNS) {
275
+ if (pattern.test(query)) {
276
+ violations.push(`Dangerous pattern detected: ${pattern.source}`);
277
+ }
278
+ }
279
+ // Check for suspicious function calls
280
+ for (const func of DANGEROUS_FUNCTIONS) {
281
+ const pattern = new RegExp(`\\b${func}\\s*\\(`, "i");
282
+ if (pattern.test(query)) {
283
+ violations.push(`Suspicious function '${func}' detected`);
284
+ }
285
+ }
286
+ return {
287
+ isValid: violations.length === 0,
288
+ violations,
289
+ validationMethod: "regex",
290
+ };
291
+ }
292
+ /**
293
+ * Validate forbidden keywords using AST parsing
294
+ * @param query - SQL query to validate
295
+ * @param forbiddenKeywords - List of forbidden keywords
296
+ * @param context - Request context for logging
297
+ * @private
298
+ */
299
+ static validateForbiddenKeywordsAST(query, forbiddenKeywords, context) {
300
+ const violations = [];
301
+ try {
302
+ const ast = this.parser.astify(query, { database: "mysql" });
303
+ const statements = Array.isArray(ast) ? ast : [ast];
304
+ for (const statement of statements) {
305
+ const foundKeywords = this.findForbiddenKeywordsInAST(statement, forbiddenKeywords);
306
+ violations.push(...foundKeywords.map((k) => `Forbidden keyword: ${k}`));
307
+ }
308
+ }
309
+ catch (parseError) {
310
+ logger.debug({
311
+ ...context,
312
+ error: parseError instanceof Error
313
+ ? parseError.message
314
+ : String(parseError),
315
+ }, "AST parsing failed for forbidden keyword validation");
316
+ }
317
+ return {
318
+ isValid: violations.length === 0,
319
+ violations,
320
+ validationMethod: "ast",
321
+ };
322
+ }
323
+ /**
324
+ * Validate forbidden keywords using regex patterns
325
+ * @param query - SQL query to validate
326
+ * @param forbiddenKeywords - List of forbidden keywords
327
+ * @private
328
+ */
329
+ static validateForbiddenKeywordsRegex(query, forbiddenKeywords) {
330
+ const violations = [];
331
+ for (const keyword of forbiddenKeywords) {
332
+ const pattern = new RegExp(`\\b${keyword.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "i");
333
+ if (pattern.test(query)) {
334
+ violations.push(`Forbidden keyword: ${keyword}`);
335
+ }
336
+ }
337
+ return {
338
+ isValid: violations.length === 0,
339
+ violations,
340
+ validationMethod: "regex",
341
+ };
342
+ }
343
+ /**
344
+ * Find dangerous functions anywhere in the AST
345
+ * @param node - AST node to analyze
346
+ * @private
347
+ */
348
+ static findDangerousFunctionsInAST(node) {
349
+ const violations = [];
350
+ if (!node || typeof node !== "object")
351
+ return violations;
352
+ const objNode = node;
353
+ // Check if this node is a function call
354
+ if (objNode.type === "function" && objNode.name) {
355
+ const funcName = String(objNode.name).toUpperCase();
356
+ if (DANGEROUS_FUNCTIONS.includes(funcName)) {
357
+ violations.push(funcName);
358
+ }
359
+ }
360
+ // Recursively check all properties
361
+ for (const key in objNode) {
362
+ const value = objNode[key];
363
+ if (Array.isArray(value)) {
364
+ value.forEach((item) => violations.push(...this.findDangerousFunctionsInAST(item)));
365
+ }
366
+ else if (typeof value === "object") {
367
+ violations.push(...this.findDangerousFunctionsInAST(value));
368
+ }
369
+ }
370
+ return violations;
371
+ }
372
+ /**
373
+ * Find forbidden keywords anywhere in the AST
374
+ * @param node - AST node to analyze
375
+ * @param forbiddenKeywords - List of forbidden keywords
376
+ * @private
377
+ */
378
+ static findForbiddenKeywordsInAST(node, forbiddenKeywords) {
379
+ const violations = [];
380
+ if (!node || typeof node !== "object")
381
+ return violations;
382
+ const objNode = node;
383
+ // Check string values for forbidden keywords
384
+ for (const key in objNode) {
385
+ const value = objNode[key];
386
+ if (typeof value === "string") {
387
+ for (const keyword of forbiddenKeywords) {
388
+ const pattern = new RegExp(`\\b${keyword.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "i");
389
+ if (pattern.test(value)) {
390
+ violations.push(keyword);
391
+ }
392
+ }
393
+ }
394
+ else if (Array.isArray(value)) {
395
+ value.forEach((item) => violations.push(...this.findForbiddenKeywordsInAST(item, forbiddenKeywords)));
396
+ }
397
+ else if (typeof value === "object") {
398
+ violations.push(...this.findForbiddenKeywordsInAST(value, forbiddenKeywords));
399
+ }
400
+ }
401
+ return violations;
402
+ }
403
+ /**
404
+ * Check for UNION with dangerous statements
405
+ * @param statement - AST statement to check
406
+ * @private
407
+ */
408
+ static hasUnionWithDangerousStatements(statement) {
409
+ if (!statement || typeof statement !== "object")
410
+ return false;
411
+ const stmt = statement;
412
+ // Check if this is a UNION statement
413
+ if (stmt.type === "select" && stmt.union) {
414
+ // Check each part of the union
415
+ const unionParts = Array.isArray(stmt.union) ? stmt.union : [stmt.union];
416
+ for (const part of unionParts) {
417
+ const partObj = part;
418
+ if (partObj.type && String(partObj.type).toUpperCase() !== "SELECT") {
419
+ return true;
420
+ }
421
+ }
422
+ }
423
+ return false;
424
+ }
425
+ }
426
+ //# sourceMappingURL=sqlSecurityValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlSecurityValidator.js","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/security/sqlSecurityValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * @fileoverview Unified parameter processor for SQL parameter validation and binding
3
+ * Combines validation, type conversion, and SQL parameter binding in a single streamlined interface
4
+ *
5
+ * @module src/utils/sql/parameterProcessor
6
+ */
7
+ import { BindingValue } from "@ibm/mapepire-js";
8
+ import { RequestContext } from "../../../utils/internal/requestContext.js";
9
+ import { SqlToolParameter } from "../../schemas/index.js";
10
+ /**
11
+ * Parameter processing mode
12
+ */
13
+ export type ParameterMode = "named" | "positional" | "template" | "hybrid";
14
+ /**
15
+ * Parameter processing options
16
+ */
17
+ export interface ParameterProcessingOptions {
18
+ /** Whether to include detailed logging */
19
+ detailedLogging?: boolean;
20
+ /** Whether to validate parameter syntax */
21
+ validateSyntax?: boolean;
22
+ /** Custom context for logging */
23
+ context?: RequestContext;
24
+ /** Strict type validation */
25
+ strictTypeValidation?: boolean;
26
+ }
27
+ /**
28
+ * Parameter processing result
29
+ */
30
+ export interface ParameterProcessingResult {
31
+ /** Processed SQL string with ? placeholders */
32
+ sql: string;
33
+ /** Parameters in order for binding */
34
+ parameters: BindingValue[];
35
+ /** Parameter names that were found */
36
+ parameterNames: string[];
37
+ /** Parameters that were missing */
38
+ missingParameters: string[];
39
+ /** Detected parameter mode */
40
+ mode: ParameterMode;
41
+ /** Processing statistics */
42
+ stats: {
43
+ originalLength: number;
44
+ processedLength: number;
45
+ namedParametersFound: number;
46
+ positionalParametersFound: number;
47
+ parametersConverted: number;
48
+ };
49
+ }
50
+ /**
51
+ * Parameter validation result
52
+ */
53
+ export interface ValidationResult {
54
+ /** Whether validation passed */
55
+ valid: boolean;
56
+ /** Converted value (if valid) */
57
+ value?: BindingValue;
58
+ /** Validation errors */
59
+ errors: string[];
60
+ /** Validation warnings */
61
+ warnings: string[];
62
+ }
63
+ /**
64
+ * Unified parameter processor for SQL parameter validation and binding
65
+ * Handles validation, type conversion, and SQL parameter binding in one streamlined interface
66
+ */
67
+ export declare class ParameterProcessor {
68
+ /**
69
+ * Process SQL statement with parameter validation and binding
70
+ * @param sql - SQL statement with parameter placeholders
71
+ * @param parameterValues - Parameter values by name
72
+ * @param parameterDefinitions - YAML parameter definitions for validation
73
+ * @param options - Processing options
74
+ * @returns Processed SQL and parameter array with validation results
75
+ */
76
+ static process(sql: string, parameterValues: Record<string, unknown>, parameterDefinitions?: SqlToolParameter[], options?: ParameterProcessingOptions): Promise<ParameterProcessingResult>;
77
+ /**
78
+ * Validate parameters and apply defaults according to YAML definitions
79
+ * @param parameterValues - Raw parameter values
80
+ * @param parameterDefinitions - YAML parameter definitions
81
+ * @param context - Request context
82
+ * @returns Validated and processed parameters
83
+ */
84
+ private static validateAndProcessParameters;
85
+ /**
86
+ * Validate and convert parameter value according to YAML definition
87
+ * @param value - Input value to validate
88
+ * @param definition - YAML parameter definition
89
+ * @returns Validation result with converted value
90
+ */
91
+ private static validateParameter;
92
+ /**
93
+ * Validate string parameter
94
+ */
95
+ private static validateStringParameter;
96
+ /**
97
+ * Validate integer parameter
98
+ */
99
+ private static validateIntegerParameter;
100
+ /**
101
+ * Validate float parameter
102
+ */
103
+ private static validateFloatParameter;
104
+ /**
105
+ * Validate boolean parameter
106
+ */
107
+ private static validateBooleanParameter;
108
+ /**
109
+ * Validate array parameter
110
+ */
111
+ private static validateArrayParameter;
112
+ /**
113
+ * Validate enum constraint
114
+ */
115
+ private static validateEnumConstraint;
116
+ /**
117
+ * Detect the parameter mode used in the SQL statement
118
+ * @param sql - SQL statement to analyze
119
+ * @returns Detected parameter mode
120
+ */
121
+ private static detectParameterMode;
122
+ /**
123
+ * Process named parameters (:param)
124
+ * @param sql - SQL statement with named parameters
125
+ * @param parameterValues - Parameter values by name
126
+ * @param context - Request context
127
+ * @param strictTypeValidation - Whether to enforce strict type validation
128
+ * @returns Processing result
129
+ */
130
+ private static processNamedParameters;
131
+ /**
132
+ * Process positional parameters (?)
133
+ * @param sql - SQL statement with positional parameters
134
+ * @param parameterValues - Parameter values by name or index
135
+ * @param context - Request context
136
+ * @param strictTypeValidation - Whether to enforce strict type validation
137
+ * @returns Processing result
138
+ */
139
+ private static processPositionalParameters;
140
+ /**
141
+ * Process hybrid parameters (mix of named and positional)
142
+ * @param sql - SQL statement with mixed parameters
143
+ * @param parameterValues - Parameter values by name
144
+ * @param context - Request context
145
+ * @param strictTypeValidation - Whether to enforce strict type validation
146
+ * @returns Processing result
147
+ */
148
+ private static processHybridParameters;
149
+ /**
150
+ * Convert a parameter value to BindingValue
151
+ * @param value - Parameter value to convert
152
+ * @param paramName - Parameter name for error messages
153
+ * @param strictTypeValidation - Whether to enforce strict type validation
154
+ * @returns Converted BindingValue
155
+ */
156
+ private static convertToBindingValue;
157
+ /**
158
+ * Validate SQL statement syntax for parameter processing
159
+ * @param sql - SQL statement to validate
160
+ * @throws McpError if syntax is invalid
161
+ */
162
+ private static validateSqlSyntax;
163
+ /**
164
+ * Extract parameter names from SQL statement
165
+ * @param sql - SQL statement to analyze
166
+ * @returns Array of unique parameter names
167
+ */
168
+ static extractParameterNames(sql: string): string[];
169
+ /**
170
+ * Count positional parameters in SQL statement
171
+ * @param sql - SQL statement to analyze
172
+ * @returns Number of ? placeholders
173
+ */
174
+ static countPositionalParameters(sql: string): number;
175
+ /**
176
+ * Check if SQL statement has any parameters
177
+ * @param sql - SQL statement to check
178
+ * @returns True if statement contains parameters
179
+ */
180
+ static hasParameters(sql: string): boolean;
181
+ }
182
+ //# sourceMappingURL=parameterProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameterProcessor.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/sql/parameterProcessor.ts"],"names":[],"mappings":"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"}