@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,726 @@
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 { logger } from "../../../utils/internal/logger.js";
8
+ import { requestContextService, } from "../../../utils/internal/requestContext.js";
9
+ import { ErrorHandler } from "../../../utils/internal/errorHandler.js";
10
+ import { JsonRpcErrorCode, McpError } from "../../../types-global/errors.js";
11
+ /**
12
+ * Unified parameter processor for SQL parameter validation and binding
13
+ * Handles validation, type conversion, and SQL parameter binding in one streamlined interface
14
+ */
15
+ export class ParameterProcessor {
16
+ /**
17
+ * Process SQL statement with parameter validation and binding
18
+ * @param sql - SQL statement with parameter placeholders
19
+ * @param parameterValues - Parameter values by name
20
+ * @param parameterDefinitions - YAML parameter definitions for validation
21
+ * @param options - Processing options
22
+ * @returns Processed SQL and parameter array with validation results
23
+ */
24
+ static async process(sql, parameterValues, parameterDefinitions = [], options = {}) {
25
+ const context = options.context ||
26
+ requestContextService.createRequestContext({
27
+ operation: "ProcessParameters",
28
+ });
29
+ const { detailedLogging = false, validateSyntax = true, strictTypeValidation = true, } = options;
30
+ return ErrorHandler.tryCatch(async () => {
31
+ // Validate SQL syntax if requested
32
+ if (validateSyntax) {
33
+ this.validateSqlSyntax(sql);
34
+ }
35
+ // Step 1: Apply parameter validation and defaults
36
+ const processedParameters = await this.validateAndProcessParameters(parameterValues, parameterDefinitions, context);
37
+ // Step 2: Detect parameter mode and process SQL
38
+ const mode = this.detectParameterMode(sql);
39
+ if (mode === "template") {
40
+ throw new McpError(JsonRpcErrorCode.ValidationError, "Template mode ({{param}}) is deprecated. Use named parameters (:param) or positional parameters (?) instead.", { sql: sql.substring(0, 100) + "..." });
41
+ }
42
+ let result;
43
+ switch (mode) {
44
+ case "named":
45
+ result = await this.processNamedParameters(sql, processedParameters, context, strictTypeValidation);
46
+ break;
47
+ case "positional":
48
+ result = await this.processPositionalParameters(sql, processedParameters, context, strictTypeValidation);
49
+ break;
50
+ case "hybrid":
51
+ result = await this.processHybridParameters(sql, processedParameters, context, strictTypeValidation);
52
+ break;
53
+ default:
54
+ // No parameters found
55
+ result = {
56
+ sql,
57
+ parameters: [],
58
+ parameterNames: [],
59
+ missingParameters: [],
60
+ mode: "positional",
61
+ stats: {
62
+ originalLength: sql.length,
63
+ processedLength: sql.length,
64
+ namedParametersFound: 0,
65
+ positionalParametersFound: 0,
66
+ parametersConverted: 0,
67
+ },
68
+ };
69
+ }
70
+ // Log processing details
71
+ if (detailedLogging) {
72
+ logger.debug({
73
+ ...context,
74
+ ...result.stats,
75
+ mode: result.mode,
76
+ parameterNames: result.parameterNames,
77
+ missingParameters: result.missingParameters.length > 0
78
+ ? result.missingParameters
79
+ : undefined,
80
+ }, "SQL parameters processed with detailed stats");
81
+ }
82
+ else {
83
+ logger.debug({
84
+ ...context,
85
+ mode: result.mode,
86
+ parameterCount: result.parameters.length,
87
+ parameterNames: result.parameterNames,
88
+ }, "SQL parameters processed");
89
+ }
90
+ return result;
91
+ }, {
92
+ operation: "ProcessParameters",
93
+ context,
94
+ errorCode: JsonRpcErrorCode.ValidationError,
95
+ });
96
+ }
97
+ /**
98
+ * Validate parameters and apply defaults according to YAML definitions
99
+ * @param parameterValues - Raw parameter values
100
+ * @param parameterDefinitions - YAML parameter definitions
101
+ * @param context - Request context
102
+ * @returns Validated and processed parameters
103
+ */
104
+ static async validateAndProcessParameters(parameterValues, parameterDefinitions, context) {
105
+ if (parameterDefinitions.length === 0) {
106
+ return parameterValues;
107
+ }
108
+ const processedParameters = { ...parameterValues };
109
+ const allErrors = [];
110
+ const allWarnings = [];
111
+ // Process each parameter definition
112
+ for (const definition of parameterDefinitions) {
113
+ const value = parameterValues[definition.name];
114
+ const validationResult = this.validateParameter(value, definition);
115
+ if (!validationResult.valid) {
116
+ allErrors.push(...validationResult.errors);
117
+ }
118
+ else {
119
+ allWarnings.push(...validationResult.warnings);
120
+ // Use the validated and converted value
121
+ if (validationResult.value !== undefined) {
122
+ processedParameters[definition.name] = validationResult.value;
123
+ }
124
+ }
125
+ }
126
+ // Report validation errors
127
+ if (allErrors.length > 0) {
128
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Parameter validation failed: ${allErrors.join(", ")}`, { errors: allErrors });
129
+ }
130
+ // Log warnings
131
+ if (allWarnings.length > 0) {
132
+ logger.warning({
133
+ ...context,
134
+ warnings: allWarnings,
135
+ }, "Parameter validation warnings");
136
+ }
137
+ return processedParameters;
138
+ }
139
+ /**
140
+ * Validate and convert parameter value according to YAML definition
141
+ * @param value - Input value to validate
142
+ * @param definition - YAML parameter definition
143
+ * @returns Validation result with converted value
144
+ */
145
+ static validateParameter(value, definition) {
146
+ const result = {
147
+ valid: true,
148
+ errors: [],
149
+ warnings: [],
150
+ };
151
+ try {
152
+ // Handle null/undefined values
153
+ if (value === null || value === undefined) {
154
+ if (definition.required && definition.default === undefined) {
155
+ result.errors.push(`Parameter '${definition.name}' is required but not provided`);
156
+ result.valid = false;
157
+ return result;
158
+ }
159
+ if (definition.default !== undefined) {
160
+ return this.validateParameter(definition.default, {
161
+ ...definition,
162
+ required: false,
163
+ });
164
+ }
165
+ // Allow null/undefined for non-required parameters
166
+ result.value = "";
167
+ return result;
168
+ }
169
+ // Type-specific validation
170
+ switch (definition.type) {
171
+ case "string":
172
+ result.value = this.validateStringParameter(value, definition, result);
173
+ break;
174
+ case "integer":
175
+ result.value = this.validateIntegerParameter(value, definition, result);
176
+ break;
177
+ case "float":
178
+ result.value = this.validateFloatParameter(value, definition, result);
179
+ break;
180
+ case "boolean":
181
+ result.value = this.validateBooleanParameter(value, definition, result);
182
+ break;
183
+ case "array":
184
+ result.value = this.validateArrayParameter(value, definition, result);
185
+ break;
186
+ default:
187
+ result.errors.push(`Unsupported parameter type: ${definition.type}`);
188
+ result.valid = false;
189
+ }
190
+ // Enum validation
191
+ if (result.valid && definition.enum && definition.enum.length > 0) {
192
+ this.validateEnumConstraint(result.value, definition, result);
193
+ }
194
+ result.valid = result.errors.length === 0;
195
+ return result;
196
+ }
197
+ catch (error) {
198
+ result.errors.push(error instanceof Error ? error.message : String(error));
199
+ result.valid = false;
200
+ return result;
201
+ }
202
+ }
203
+ /**
204
+ * Validate string parameter
205
+ */
206
+ static validateStringParameter(value, definition, result) {
207
+ let stringValue;
208
+ if (typeof value === "string") {
209
+ stringValue = value;
210
+ }
211
+ else if (typeof value === "number" || typeof value === "boolean") {
212
+ stringValue = String(value);
213
+ result.warnings.push(`Parameter '${definition.name}' converted from ${typeof value} to string`);
214
+ }
215
+ else {
216
+ result.errors.push(`Parameter '${definition.name}' must be a string, got ${typeof value}`);
217
+ return "";
218
+ }
219
+ // Length validation
220
+ if (definition.minLength !== undefined &&
221
+ stringValue.length < definition.minLength) {
222
+ result.errors.push(`Parameter '${definition.name}' must be at least ${definition.minLength} characters long`);
223
+ }
224
+ if (definition.maxLength !== undefined &&
225
+ stringValue.length > definition.maxLength) {
226
+ result.errors.push(`Parameter '${definition.name}' must be at most ${definition.maxLength} characters long`);
227
+ }
228
+ // Pattern validation
229
+ if (definition.pattern) {
230
+ try {
231
+ const regex = new RegExp(definition.pattern);
232
+ if (!regex.test(stringValue)) {
233
+ result.errors.push(`Parameter '${definition.name}' does not match required pattern: ${definition.pattern}`);
234
+ }
235
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
236
+ }
237
+ catch (error) {
238
+ result.warnings.push(`Invalid pattern for parameter '${definition.name}': ${definition.pattern}`);
239
+ }
240
+ }
241
+ return stringValue;
242
+ }
243
+ /**
244
+ * Validate integer parameter
245
+ */
246
+ static validateIntegerParameter(value, definition, result) {
247
+ let numericValue;
248
+ if (typeof value === "number") {
249
+ if (!Number.isInteger(value)) {
250
+ result.warnings.push(`Parameter '${definition.name}' is a float, converting to integer`);
251
+ numericValue = Math.floor(value);
252
+ }
253
+ else {
254
+ numericValue = value;
255
+ }
256
+ }
257
+ else if (typeof value === "string") {
258
+ const parsed = parseInt(value, 10);
259
+ if (isNaN(parsed)) {
260
+ result.errors.push(`Parameter '${definition.name}' must be a valid integer, got '${value}'`);
261
+ return 0;
262
+ }
263
+ numericValue = parsed;
264
+ result.warnings.push(`Parameter '${definition.name}' converted from string '${value}' to integer ${parsed}`);
265
+ }
266
+ else if (typeof value === "boolean") {
267
+ numericValue = value ? 1 : 0;
268
+ result.warnings.push(`Parameter '${definition.name}' converted from boolean to integer`);
269
+ }
270
+ else {
271
+ result.errors.push(`Parameter '${definition.name}' must be an integer, got ${typeof value}`);
272
+ return 0;
273
+ }
274
+ // Range validation
275
+ if (definition.min !== undefined && numericValue < definition.min) {
276
+ result.errors.push(`Parameter '${definition.name}' must be at least ${definition.min}`);
277
+ }
278
+ if (definition.max !== undefined && numericValue > definition.max) {
279
+ result.errors.push(`Parameter '${definition.name}' must be at most ${definition.max}`);
280
+ }
281
+ return numericValue;
282
+ }
283
+ /**
284
+ * Validate float parameter
285
+ */
286
+ static validateFloatParameter(value, definition, result) {
287
+ let numericValue;
288
+ if (typeof value === "number") {
289
+ numericValue = value;
290
+ }
291
+ else if (typeof value === "string") {
292
+ const parsed = parseFloat(value);
293
+ if (isNaN(parsed)) {
294
+ result.errors.push(`Parameter '${definition.name}' must be a valid number, got '${value}'`);
295
+ return 0;
296
+ }
297
+ numericValue = parsed;
298
+ result.warnings.push(`Parameter '${definition.name}' converted from string '${value}' to float ${parsed}`);
299
+ }
300
+ else if (typeof value === "boolean") {
301
+ numericValue = value ? 1.0 : 0.0;
302
+ result.warnings.push(`Parameter '${definition.name}' converted from boolean to float`);
303
+ }
304
+ else {
305
+ result.errors.push(`Parameter '${definition.name}' must be a number, got ${typeof value}`);
306
+ return 0;
307
+ }
308
+ // Range validation
309
+ if (definition.min !== undefined && numericValue < definition.min) {
310
+ result.errors.push(`Parameter '${definition.name}' must be at least ${definition.min}`);
311
+ }
312
+ if (definition.max !== undefined && numericValue > definition.max) {
313
+ result.errors.push(`Parameter '${definition.name}' must be at most ${definition.max}`);
314
+ }
315
+ return numericValue;
316
+ }
317
+ /**
318
+ * Validate boolean parameter
319
+ */
320
+ static validateBooleanParameter(value, definition, result) {
321
+ let booleanValue;
322
+ if (typeof value === "boolean") {
323
+ booleanValue = value;
324
+ }
325
+ else if (typeof value === "string") {
326
+ const lowerValue = value.toLowerCase();
327
+ if (lowerValue === "true" ||
328
+ lowerValue === "1" ||
329
+ lowerValue === "yes" ||
330
+ lowerValue === "on") {
331
+ booleanValue = true;
332
+ }
333
+ else if (lowerValue === "false" ||
334
+ lowerValue === "0" ||
335
+ lowerValue === "no" ||
336
+ lowerValue === "off") {
337
+ booleanValue = false;
338
+ }
339
+ else {
340
+ result.errors.push(`Parameter '${definition.name}' must be a valid boolean, got '${value}'`);
341
+ return 0;
342
+ }
343
+ result.warnings.push(`Parameter '${definition.name}' converted from string '${value}' to boolean`);
344
+ }
345
+ else if (typeof value === "number") {
346
+ booleanValue = value !== 0;
347
+ result.warnings.push(`Parameter '${definition.name}' converted from number ${value} to boolean`);
348
+ }
349
+ else {
350
+ result.errors.push(`Parameter '${definition.name}' must be a boolean, got ${typeof value}`);
351
+ return 0;
352
+ }
353
+ // Convert boolean to number for DB2 compatibility
354
+ return booleanValue ? 1 : 0;
355
+ }
356
+ /**
357
+ * Validate array parameter
358
+ */
359
+ static validateArrayParameter(value, definition, result) {
360
+ if (!Array.isArray(value)) {
361
+ result.errors.push(`Parameter '${definition.name}' must be an array, got ${typeof value}`);
362
+ return [];
363
+ }
364
+ // Length validation
365
+ if (definition.minLength !== undefined &&
366
+ value.length < definition.minLength) {
367
+ result.errors.push(`Parameter '${definition.name}' must have at least ${definition.minLength} items`);
368
+ }
369
+ if (definition.maxLength !== undefined &&
370
+ value.length > definition.maxLength) {
371
+ result.errors.push(`Parameter '${definition.name}' must have at most ${definition.maxLength} items`);
372
+ }
373
+ // Validate each array item
374
+ const itemType = definition.itemType || "string";
375
+ const convertedArray = [];
376
+ for (let i = 0; i < value.length; i++) {
377
+ const item = value[i];
378
+ const itemDefinition = {
379
+ name: `${definition.name}[${i}]`,
380
+ type: itemType,
381
+ required: true,
382
+ };
383
+ const itemResult = this.validateParameter(item, itemDefinition);
384
+ if (!itemResult.valid) {
385
+ result.errors.push(...itemResult.errors);
386
+ }
387
+ else {
388
+ result.warnings.push(...itemResult.warnings);
389
+ convertedArray.push(itemResult.value);
390
+ }
391
+ }
392
+ return convertedArray;
393
+ }
394
+ /**
395
+ * Validate enum constraint
396
+ */
397
+ static validateEnumConstraint(value, definition, result) {
398
+ if (!definition.enum || definition.enum.length === 0) {
399
+ return;
400
+ }
401
+ // Handle array values
402
+ if (Array.isArray(value)) {
403
+ for (const item of value) {
404
+ if (!definition.enum.includes(item)) {
405
+ result.errors.push(`Parameter '${definition.name}' array item '${item}' is not one of allowed values: ${definition.enum.join(", ")}`);
406
+ }
407
+ }
408
+ }
409
+ else {
410
+ if (!definition.enum.includes(value)) {
411
+ result.errors.push(`Parameter '${definition.name}' value '${value}' is not one of allowed values: ${definition.enum.join(", ")}`);
412
+ }
413
+ }
414
+ }
415
+ /**
416
+ * Detect the parameter mode used in the SQL statement
417
+ * @param sql - SQL statement to analyze
418
+ * @returns Detected parameter mode
419
+ */
420
+ static detectParameterMode(sql) {
421
+ const hasNamedParams = /:(\w+)/g.test(sql);
422
+ const hasPositionalParams = /\?/g.test(sql);
423
+ const hasTemplateParams = /\{\{(\w+)\}\}/g.test(sql);
424
+ if (hasTemplateParams) {
425
+ return "template";
426
+ }
427
+ if (hasNamedParams && hasPositionalParams) {
428
+ return "hybrid";
429
+ }
430
+ if (hasNamedParams) {
431
+ return "named";
432
+ }
433
+ if (hasPositionalParams) {
434
+ return "positional";
435
+ }
436
+ return "positional"; // Default mode
437
+ }
438
+ /**
439
+ * Process named parameters (:param)
440
+ * @param sql - SQL statement with named parameters
441
+ * @param parameterValues - Parameter values by name
442
+ * @param context - Request context
443
+ * @param strictTypeValidation - Whether to enforce strict type validation
444
+ * @returns Processing result
445
+ */
446
+ static async processNamedParameters(sql, parameterValues, context, strictTypeValidation) {
447
+ const namedParamRegex = /:(\w+)/g;
448
+ const matches = [];
449
+ const parameterNames = [];
450
+ const missingParameters = [];
451
+ let match;
452
+ // Find all named parameter matches
453
+ while ((match = namedParamRegex.exec(sql)) !== null) {
454
+ matches.push({
455
+ fullMatch: match[0],
456
+ paramName: match[1],
457
+ position: match.index,
458
+ });
459
+ if (!parameterNames.includes(match[1])) {
460
+ parameterNames.push(match[1]);
461
+ }
462
+ }
463
+ // Convert parameters to BindingValue array in order of appearance
464
+ const parameters = [];
465
+ let processedSql = sql;
466
+ let offset = 0;
467
+ for (const paramMatch of matches) {
468
+ const paramName = paramMatch.paramName;
469
+ // Check if parameter exists in the parameter values
470
+ if (!(paramName in parameterValues)) {
471
+ missingParameters.push(paramName);
472
+ logger.warning({
473
+ ...context,
474
+ availableParams: Object.keys(parameterValues),
475
+ missingParam: paramName,
476
+ }, `Named parameter ':${paramName}' not found in parameter values`);
477
+ continue;
478
+ }
479
+ const paramValue = parameterValues[paramName];
480
+ // Convert and validate parameter value
481
+ const bindingValue = this.convertToBindingValue(paramValue, paramName, strictTypeValidation);
482
+ // Handle array parameters - expand to multiple placeholders
483
+ if (Array.isArray(bindingValue)) {
484
+ // Add each array element as individual parameters
485
+ for (const item of bindingValue) {
486
+ parameters.push(item);
487
+ }
488
+ // Generate multiple ? placeholders for array (?, ?, ?)
489
+ const placeholders = bindingValue.map(() => "?").join(", ");
490
+ // Replace :param with (?, ?, ?)
491
+ const replacePosition = paramMatch.position + offset;
492
+ const beforeReplacement = processedSql.substring(0, replacePosition);
493
+ const afterReplacement = processedSql.substring(replacePosition + paramMatch.fullMatch.length);
494
+ processedSql = beforeReplacement + placeholders + afterReplacement;
495
+ // Update offset for subsequent replacements
496
+ offset += placeholders.length - paramMatch.fullMatch.length;
497
+ logger.debug({
498
+ ...context,
499
+ paramName,
500
+ arrayLength: bindingValue.length,
501
+ placeholders,
502
+ }, `Expanded array parameter to ${bindingValue.length} placeholders`);
503
+ }
504
+ else {
505
+ // Non-array parameter - standard single placeholder
506
+ parameters.push(bindingValue);
507
+ // Replace :param with ? placeholder
508
+ const replacePosition = paramMatch.position + offset;
509
+ const beforeReplacement = processedSql.substring(0, replacePosition);
510
+ const afterReplacement = processedSql.substring(replacePosition + paramMatch.fullMatch.length);
511
+ processedSql = beforeReplacement + "?" + afterReplacement;
512
+ // Update offset for subsequent replacements
513
+ offset += 1 - paramMatch.fullMatch.length;
514
+ }
515
+ }
516
+ return {
517
+ sql: processedSql,
518
+ parameters,
519
+ parameterNames,
520
+ missingParameters,
521
+ mode: "named",
522
+ stats: {
523
+ originalLength: sql.length,
524
+ processedLength: processedSql.length,
525
+ namedParametersFound: matches.length,
526
+ positionalParametersFound: 0,
527
+ parametersConverted: parameters.length,
528
+ },
529
+ };
530
+ }
531
+ /**
532
+ * Process positional parameters (?)
533
+ * @param sql - SQL statement with positional parameters
534
+ * @param parameterValues - Parameter values by name or index
535
+ * @param context - Request context
536
+ * @param strictTypeValidation - Whether to enforce strict type validation
537
+ * @returns Processing result
538
+ */
539
+ static async processPositionalParameters(sql, parameterValues, context, strictTypeValidation) {
540
+ const positionalParamRegex = /\?/g;
541
+ const parameterCount = (sql.match(positionalParamRegex) || []).length;
542
+ // Convert parameters to array in order
543
+ const parameters = [];
544
+ const parameterNames = [];
545
+ const missingParameters = [];
546
+ // Extract parameters using zero-based indexing
547
+ for (let i = 0; i < parameterCount; i++) {
548
+ let paramValue;
549
+ let paramName;
550
+ // Try zero-based index parameter (0, 1, 2, ...)
551
+ if (parameterValues[i.toString()] !== undefined) {
552
+ paramValue = parameterValues[i.toString()];
553
+ paramName = i.toString();
554
+ }
555
+ // Take parameters in order of Object.keys
556
+ else {
557
+ const keys = Object.keys(parameterValues);
558
+ if (i < keys.length) {
559
+ paramName = keys[i];
560
+ paramValue = parameterValues[paramName];
561
+ }
562
+ else {
563
+ paramName = `param_${i}`;
564
+ paramValue = undefined;
565
+ }
566
+ }
567
+ parameterNames.push(paramName);
568
+ if (paramValue === undefined || paramValue === null) {
569
+ missingParameters.push(paramName);
570
+ logger.warning({
571
+ ...context,
572
+ availableParams: Object.keys(parameterValues),
573
+ missingIndex: i,
574
+ }, `Positional parameter at index ${i} not found`);
575
+ continue;
576
+ }
577
+ // Convert and validate parameter value
578
+ const bindingValue = this.convertToBindingValue(paramValue, paramName, strictTypeValidation);
579
+ parameters.push(bindingValue);
580
+ }
581
+ return {
582
+ sql,
583
+ parameters,
584
+ parameterNames,
585
+ missingParameters,
586
+ mode: "positional",
587
+ stats: {
588
+ originalLength: sql.length,
589
+ processedLength: sql.length,
590
+ namedParametersFound: 0,
591
+ positionalParametersFound: parameterCount,
592
+ parametersConverted: parameters.length,
593
+ },
594
+ };
595
+ }
596
+ /**
597
+ * Process hybrid parameters (mix of named and positional)
598
+ * @param sql - SQL statement with mixed parameters
599
+ * @param parameterValues - Parameter values by name
600
+ * @param context - Request context
601
+ * @param strictTypeValidation - Whether to enforce strict type validation
602
+ * @returns Processing result
603
+ */
604
+ static async processHybridParameters(sql, parameterValues, context, strictTypeValidation) {
605
+ logger.warning({
606
+ ...context,
607
+ sql: sql.substring(0, 100) + "...",
608
+ }, "Hybrid parameter mode detected - processing named parameters first");
609
+ // Process named parameters first, then handle any remaining positional ones
610
+ const namedResult = await this.processNamedParameters(sql, parameterValues, context, strictTypeValidation);
611
+ // If there are still ? placeholders, process them as positional
612
+ const positionalParamCount = (namedResult.sql.match(/\?/g) || []).length;
613
+ if (positionalParamCount > namedResult.parameters.length) {
614
+ logger.debug({
615
+ ...context,
616
+ remainingPositional: positionalParamCount - namedResult.parameters.length,
617
+ }, "Processing remaining positional parameters in hybrid mode");
618
+ }
619
+ return {
620
+ ...namedResult,
621
+ mode: "hybrid",
622
+ stats: {
623
+ ...namedResult.stats,
624
+ positionalParametersFound: positionalParamCount,
625
+ },
626
+ };
627
+ }
628
+ /**
629
+ * Convert a parameter value to BindingValue
630
+ * @param value - Parameter value to convert
631
+ * @param paramName - Parameter name for error messages
632
+ * @param strictTypeValidation - Whether to enforce strict type validation
633
+ * @returns Converted BindingValue
634
+ */
635
+ static convertToBindingValue(value, paramName, strictTypeValidation) {
636
+ // BindingValue = string | number | (string | number)[]
637
+ if (value === null || value === undefined) {
638
+ if (strictTypeValidation) {
639
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Parameter '${paramName}' cannot be null or undefined`, { paramName, value });
640
+ }
641
+ return "";
642
+ }
643
+ // Handle arrays
644
+ if (Array.isArray(value)) {
645
+ const convertedArray = value.map((item, index) => {
646
+ if (typeof item === "string" || typeof item === "number") {
647
+ return item;
648
+ }
649
+ if (strictTypeValidation) {
650
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Array parameter '${paramName}[${index}]' must contain only strings or numbers`, { paramName, index, itemType: typeof item, itemValue: item });
651
+ }
652
+ return String(item);
653
+ });
654
+ return convertedArray;
655
+ }
656
+ // Handle primitives
657
+ if (typeof value === "string" || typeof value === "number") {
658
+ return value;
659
+ }
660
+ // Handle booleans
661
+ if (typeof value === "boolean") {
662
+ return value ? 1 : 0; // Convert boolean to number for DB2
663
+ }
664
+ // Handle other types
665
+ if (strictTypeValidation) {
666
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Parameter '${paramName}' must be string, number, boolean, or array of strings/numbers`, { paramName, type: typeof value, value });
667
+ }
668
+ // Convert to string as fallback
669
+ return String(value);
670
+ }
671
+ /**
672
+ * Validate SQL statement syntax for parameter processing
673
+ * @param sql - SQL statement to validate
674
+ * @throws McpError if syntax is invalid
675
+ */
676
+ static validateSqlSyntax(sql) {
677
+ // Check for malformed named parameters
678
+ const malformedNamedParams = sql.match(/:(\d)/g);
679
+ if (malformedNamedParams) {
680
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Invalid named parameter syntax found: ${malformedNamedParams.join(", ")}. Named parameters must start with a letter.`, { malformedParams: malformedNamedParams });
681
+ }
682
+ // Check for unmatched quotes that could affect parameter parsing
683
+ const singleQuotes = (sql.match(/'/g) || []).length;
684
+ const doubleQuotes = (sql.match(/"/g) || []).length;
685
+ if (singleQuotes % 2 !== 0) {
686
+ throw new McpError(JsonRpcErrorCode.ValidationError, "Unmatched single quotes in SQL statement", { singleQuoteCount: singleQuotes });
687
+ }
688
+ if (doubleQuotes % 2 !== 0) {
689
+ throw new McpError(JsonRpcErrorCode.ValidationError, "Unmatched double quotes in SQL statement", { doubleQuoteCount: doubleQuotes });
690
+ }
691
+ }
692
+ /**
693
+ * Extract parameter names from SQL statement
694
+ * @param sql - SQL statement to analyze
695
+ * @returns Array of unique parameter names
696
+ */
697
+ static extractParameterNames(sql) {
698
+ const namedParamRegex = /:(\w+)/g;
699
+ const parameterNames = [];
700
+ let match;
701
+ while ((match = namedParamRegex.exec(sql)) !== null) {
702
+ if (!parameterNames.includes(match[1])) {
703
+ parameterNames.push(match[1]);
704
+ }
705
+ }
706
+ return parameterNames;
707
+ }
708
+ /**
709
+ * Count positional parameters in SQL statement
710
+ * @param sql - SQL statement to analyze
711
+ * @returns Number of ? placeholders
712
+ */
713
+ static countPositionalParameters(sql) {
714
+ return (sql.match(/\?/g) || []).length;
715
+ }
716
+ /**
717
+ * Check if SQL statement has any parameters
718
+ * @param sql - SQL statement to check
719
+ * @returns True if statement contains parameters
720
+ */
721
+ static hasParameters(sql) {
722
+ return (this.detectParameterMode(sql) !== "positional" ||
723
+ this.countPositionalParameters(sql) > 0);
724
+ }
725
+ }
726
+ //# sourceMappingURL=parameterProcessor.js.map