@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,431 @@
1
+ /**
2
+ * @fileoverview Base connection pool abstraction for IBM i connections
3
+ * Provides shared connection pool logic that can be extended by specific implementations
4
+ *
5
+ * @module src/services/baseConnectionPool
6
+ */
7
+ import pkg from "@ibm/mapepire-js";
8
+ const { Pool, getCertificate } = pkg;
9
+ import { ErrorHandler, logger } from "../../utils/internal/index.js";
10
+ import { requestContextService, } from "../../utils/internal/requestContext.js";
11
+ import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
12
+ import { SqlSecurityValidator } from "../utils/security/sqlSecurityValidator.js";
13
+ /**
14
+ * Base connection pool manager that provides shared functionality
15
+ * for all IBM i connection pools in the application
16
+ */
17
+ export class BaseConnectionPool {
18
+ pools = new Map();
19
+ initializationPromises = new Map();
20
+ /**
21
+ * Create a daemon server configuration from connection config
22
+ * @param config - Connection configuration
23
+ * @param context - Request context for logging
24
+ */
25
+ async createDaemonServer(config, context) {
26
+ const server = {
27
+ host: config.host,
28
+ user: config.user,
29
+ password: config.password,
30
+ rejectUnauthorized: !(config.ignoreUnauthorized ?? true),
31
+ };
32
+ // Get SSL certificate if needed
33
+ if (!(config.ignoreUnauthorized ?? true)) {
34
+ logger.debug(context, "Fetching SSL certificate for secure connection");
35
+ const ca = await getCertificate(server);
36
+ server.ca = ca.raw;
37
+ }
38
+ return server;
39
+ }
40
+ /**
41
+ * Initialize a connection pool for the given identifier
42
+ * @param poolId - Unique identifier for the pool
43
+ * @param config - Connection configuration
44
+ * @param context - Request context for logging
45
+ */
46
+ async initializePool(poolId, config, context) {
47
+ // Check if there's already an initialization in progress
48
+ const existingPromise = this.initializationPromises.get(poolId);
49
+ if (existingPromise) {
50
+ logger.debug(context, `Waiting for existing initialization of pool: ${String(poolId)}`);
51
+ return existingPromise;
52
+ }
53
+ let poolState = this.pools.get(poolId);
54
+ if (!poolState) {
55
+ poolState = {
56
+ pool: null,
57
+ isInitialized: false,
58
+ isConnecting: false,
59
+ healthStatus: "unknown",
60
+ config,
61
+ };
62
+ this.pools.set(poolId, poolState);
63
+ }
64
+ // Check if already initialized
65
+ if (poolState.isInitialized && poolState.pool) {
66
+ logger.debug(context, `Pool '${String(poolId)}' already initialized`);
67
+ return;
68
+ }
69
+ // Create initialization promise and store it
70
+ const initPromise = this.performInitialization(poolId, poolState, context);
71
+ this.initializationPromises.set(poolId, initPromise);
72
+ try {
73
+ await initPromise;
74
+ }
75
+ finally {
76
+ // Clean up the promise from the map
77
+ this.initializationPromises.delete(poolId);
78
+ }
79
+ }
80
+ /**
81
+ * Perform the actual initialization of a pool
82
+ * @private
83
+ */
84
+ async performInitialization(poolId, poolState, context) {
85
+ // Double-check if already initialized (in case another thread completed it)
86
+ if (poolState.isInitialized && poolState.pool) {
87
+ return;
88
+ }
89
+ if (poolState.isConnecting) {
90
+ logger.debug(context, `Pool '${String(poolId)}' is already connecting, waiting...`);
91
+ // Wait a bit and check again
92
+ await new Promise((resolve) => setTimeout(resolve, 100));
93
+ if (poolState.isInitialized && poolState.pool) {
94
+ return;
95
+ }
96
+ }
97
+ poolState.isConnecting = true;
98
+ try {
99
+ logger.info({
100
+ ...context,
101
+ host: poolState.config.host,
102
+ port: poolState.config.port || 8471,
103
+ user: poolState.config.user.substring(0, 3) + "***",
104
+ ignoreUnauthorized: poolState.config.ignoreUnauthorized ?? true,
105
+ }, `Initializing connection pool: ${String(poolId).substring(0, 7)}***`);
106
+ // Create daemon server configuration
107
+ const server = await this.createDaemonServer(poolState.config, context);
108
+ // Create and initialize connection pool
109
+ poolState.pool = new Pool({
110
+ creds: server,
111
+ maxSize: poolState.config.maxSize || 10,
112
+ startingSize: poolState.config.startingSize || 2,
113
+ });
114
+ await poolState.pool.init();
115
+ poolState.isInitialized = true;
116
+ poolState.healthStatus = "healthy";
117
+ poolState.lastHealthCheck = new Date();
118
+ logger.info(context, `Connection pool initialized successfully: ${String(poolId).substring(0, 7)}***`);
119
+ }
120
+ catch (error) {
121
+ poolState.isInitialized = false;
122
+ poolState.healthStatus = "unhealthy";
123
+ poolState.pool = null;
124
+ const handledError = ErrorHandler.handleError(error, {
125
+ operation: "performInitialization",
126
+ context,
127
+ errorCode: JsonRpcErrorCode.InitializationFailed,
128
+ critical: true,
129
+ });
130
+ throw handledError;
131
+ }
132
+ finally {
133
+ poolState.isConnecting = false;
134
+ }
135
+ }
136
+ /**
137
+ * Execute a SQL query on a specific pool
138
+ * @param poolId - Pool identifier
139
+ * @param query - SQL query string
140
+ * @param params - Query parameters
141
+ * @param context - Request context for logging
142
+ */
143
+ async executeQuery(poolId, query, params, context, securityConfig) {
144
+ const operationContext = context ||
145
+ requestContextService.createRequestContext({
146
+ operation: "ExecuteQuery",
147
+ poolId: String(poolId),
148
+ });
149
+ return ErrorHandler.tryCatch(async () => {
150
+ const poolState = this.pools.get(poolId);
151
+ if (!poolState) {
152
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Pool '${String(poolId)}' not found. Please register the pool first.`, { poolId: String(poolId) });
153
+ }
154
+ // Ensure pool is initialized
155
+ await this.initializePool(poolId, poolState.config, operationContext);
156
+ if (!poolState.pool) {
157
+ throw new McpError(JsonRpcErrorCode.InternalError, `Connection pool '${String(poolId)}' is not available`, { poolId: String(poolId) });
158
+ }
159
+ // Additional check to ensure pool is properly initialized
160
+ if (!poolState.isInitialized) {
161
+ throw new McpError(JsonRpcErrorCode.InternalError, `Connection pool '${String(poolId)}' is not fully initialized`, {
162
+ poolId: String(poolId),
163
+ isInitialized: poolState.isInitialized,
164
+ isConnecting: poolState.isConnecting,
165
+ });
166
+ }
167
+ logger.debug({
168
+ ...operationContext,
169
+ query: query,
170
+ queryLength: query.length,
171
+ hasParameters: !!params && params.length > 0,
172
+ paramCount: params?.length || 0,
173
+ }, `Executing SQL query on pool: ${String(poolId)}`);
174
+ // Validate parameter types for mapepire compatibility
175
+ if (params && params.length > 0) {
176
+ for (let i = 0; i < params.length; i++) {
177
+ const param = params[i];
178
+ if (param !== null && param !== undefined) {
179
+ const isValidType = typeof param === "string" ||
180
+ typeof param === "number" ||
181
+ (Array.isArray(param) &&
182
+ param.every((item) => typeof item === "string" || typeof item === "number"));
183
+ if (!isValidType) {
184
+ logger.warning({
185
+ ...operationContext,
186
+ paramIndex: i,
187
+ paramType: typeof param,
188
+ paramValue: param,
189
+ }, `Parameter ${i} has invalid type for mapepire binding`);
190
+ }
191
+ }
192
+ }
193
+ }
194
+ // Apply security validation if config is provided
195
+ if (securityConfig) {
196
+ SqlSecurityValidator.validateQuery(query, securityConfig, operationContext);
197
+ }
198
+ const result = await poolState.pool.execute(query, {
199
+ parameters: params,
200
+ });
201
+ logger.debug({
202
+ ...operationContext,
203
+ rowCount: result.data?.length || 0,
204
+ success: result.success,
205
+ sqlReturnCode: result.sql_rc,
206
+ executionTime: result.execution_time,
207
+ }, `Query executed successfully on pool: ${String(poolId)}`);
208
+ // Update health status on successful query
209
+ poolState.healthStatus = "healthy";
210
+ poolState.lastHealthCheck = new Date();
211
+ return result;
212
+ }, {
213
+ operation: "ExecuteQuery",
214
+ context: operationContext,
215
+ errorCode: JsonRpcErrorCode.DatabaseError,
216
+ });
217
+ }
218
+ /**
219
+ * Execute a SQL query with automatic pagination
220
+ * @param poolId - Pool identifier
221
+ * @param query - SQL query string
222
+ * @param params - Query parameters
223
+ * @param context - Request context for logging
224
+ * @param fetchSize - Number of records per fetch
225
+ */
226
+ async executeQueryWithPagination(poolId, query, params, context, fetchSize = 300, securityConfig) {
227
+ const operationContext = context ||
228
+ requestContextService.createRequestContext({
229
+ operation: "ExecuteQueryWithPagination",
230
+ poolId: String(poolId),
231
+ });
232
+ return ErrorHandler.tryCatch(async () => {
233
+ const poolState = this.pools.get(poolId);
234
+ if (!poolState) {
235
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, `Pool '${String(poolId)}' not found`, { poolId: String(poolId) });
236
+ }
237
+ // Ensure pool is initialized
238
+ await this.initializePool(poolId, poolState.config, operationContext);
239
+ if (!poolState.pool) {
240
+ throw new McpError(JsonRpcErrorCode.InternalError, "Connection pool is not available");
241
+ }
242
+ // Apply security validation if config is provided
243
+ if (securityConfig) {
244
+ SqlSecurityValidator.validateQuery(query, securityConfig, operationContext);
245
+ }
246
+ logger.debug({
247
+ ...operationContext,
248
+ queryLength: query.length,
249
+ hasParameters: !!params && params.length > 0,
250
+ paramCount: params?.length || 0,
251
+ fetchSize,
252
+ }, "Executing SQL query with pagination");
253
+ // Create query object with parameters
254
+ const queryObj = poolState.pool.query(query, { parameters: params });
255
+ // Execute initial query
256
+ let result = await queryObj.execute();
257
+ const allData = [];
258
+ if (result.success && result.data) {
259
+ allData.push(...result.data);
260
+ }
261
+ // Fetch more results until done
262
+ let fetchCount = 1;
263
+ while (!result.is_done && fetchCount < 100) {
264
+ // Safety limit
265
+ logger.debug({
266
+ ...operationContext,
267
+ fetchCount,
268
+ currentDataLength: allData.length,
269
+ }, "Fetching more results");
270
+ result = await queryObj.fetchMore(fetchSize);
271
+ if (result.success && result.data) {
272
+ allData.push(...result.data);
273
+ }
274
+ fetchCount++;
275
+ }
276
+ // Close the query
277
+ await queryObj.close();
278
+ logger.debug({
279
+ ...operationContext,
280
+ totalRows: allData.length,
281
+ fetchCount,
282
+ success: result.success,
283
+ sqlReturnCode: result.sql_rc,
284
+ executionTime: result.execution_time,
285
+ }, "Paginated query completed");
286
+ return {
287
+ data: allData,
288
+ success: result.success,
289
+ sql_rc: result.sql_rc,
290
+ execution_time: result.execution_time,
291
+ };
292
+ }, {
293
+ operation: "ExecuteQueryWithPagination",
294
+ context: operationContext,
295
+ errorCode: JsonRpcErrorCode.DatabaseError,
296
+ });
297
+ }
298
+ /**
299
+ * Check the health of a specific pool
300
+ * @param poolId - Pool identifier
301
+ * @param context - Request context for logging
302
+ */
303
+ async checkPoolHealth(poolId, context) {
304
+ const operationContext = context ||
305
+ requestContextService.createRequestContext({
306
+ operation: "CheckPoolHealth",
307
+ poolId: String(poolId),
308
+ });
309
+ const poolState = this.pools.get(poolId);
310
+ if (!poolState) {
311
+ return {
312
+ status: "unknown",
313
+ initialized: false,
314
+ connecting: false,
315
+ };
316
+ }
317
+ try {
318
+ if (!poolState.isInitialized || !poolState.pool) {
319
+ return {
320
+ status: "unknown",
321
+ initialized: false,
322
+ connecting: poolState.isConnecting,
323
+ };
324
+ }
325
+ // Execute a simple query to test connection
326
+ await this.executeQuery(poolId, "SELECT 1 FROM SYSIBM.SYSDUMMY1", [], operationContext);
327
+ poolState.healthStatus = "healthy";
328
+ poolState.lastHealthCheck = new Date();
329
+ logger.debug(operationContext, `Health check passed for pool: ${String(poolId)}`);
330
+ return {
331
+ status: "healthy",
332
+ lastCheck: poolState.lastHealthCheck,
333
+ initialized: true,
334
+ connecting: false,
335
+ };
336
+ }
337
+ catch (error) {
338
+ poolState.healthStatus = "unhealthy";
339
+ const errorMessage = error instanceof Error ? error.message : String(error);
340
+ logger.error({
341
+ ...operationContext,
342
+ error: errorMessage,
343
+ }, `Health check failed for pool: ${String(poolId)}`);
344
+ return {
345
+ status: "unhealthy",
346
+ lastError: errorMessage,
347
+ lastCheck: new Date(),
348
+ initialized: poolState.isInitialized,
349
+ connecting: poolState.isConnecting,
350
+ };
351
+ }
352
+ }
353
+ /**
354
+ * Close a specific pool's connections
355
+ * @param poolId - Pool identifier
356
+ * @param context - Request context for logging
357
+ */
358
+ async closePool(poolId, context) {
359
+ const operationContext = context ||
360
+ requestContextService.createRequestContext({
361
+ operation: "ClosePool",
362
+ poolId: String(poolId),
363
+ });
364
+ const poolState = this.pools.get(poolId);
365
+ if (!poolState || !poolState.pool) {
366
+ return;
367
+ }
368
+ try {
369
+ logger.info(operationContext, `Closing connection pool: ${String(poolId)}`);
370
+ await poolState.pool.end();
371
+ poolState.pool = null;
372
+ poolState.isInitialized = false;
373
+ poolState.healthStatus = "unknown";
374
+ logger.info(operationContext, `Connection pool closed successfully: ${String(poolId)}`);
375
+ }
376
+ catch (error) {
377
+ logger.error({
378
+ ...operationContext,
379
+ error: error instanceof Error ? error.message : String(error),
380
+ }, `Error closing connection pool: ${String(poolId)}`);
381
+ }
382
+ }
383
+ /**
384
+ * Close all connection pools gracefully
385
+
386
+ /**
387
+ * Close all connection pools gracefully
388
+ * @param context - Request context for logging
389
+ */
390
+ async closeAllPools(context) {
391
+ const operationContext = context ||
392
+ requestContextService.createRequestContext({
393
+ operation: "CloseAllPools",
394
+ });
395
+ const closePromises = Array.from(this.pools.keys()).map((poolId) => this.closePool(poolId, operationContext));
396
+ const results = await Promise.allSettled(closePromises);
397
+ logger.info({
398
+ ...operationContext,
399
+ closedCount: results.length,
400
+ }, "All connection pools closed");
401
+ }
402
+ /**
403
+ * Get status of a specific pool
404
+ * @param poolId - Pool identifier
405
+ */
406
+ getPoolStatus(poolId) {
407
+ const poolState = this.pools.get(poolId);
408
+ if (!poolState) {
409
+ return null;
410
+ }
411
+ return {
412
+ initialized: poolState.isInitialized,
413
+ connecting: poolState.isConnecting,
414
+ healthStatus: poolState.healthStatus,
415
+ };
416
+ }
417
+ /**
418
+ * Get list of registered pool identifiers
419
+ */
420
+ getRegisteredPools() {
421
+ return Array.from(this.pools.keys());
422
+ }
423
+ /**
424
+ * Clear all pools (for testing)
425
+ */
426
+ clearAllPools() {
427
+ this.pools.clear();
428
+ this.initializationPromises.clear();
429
+ }
430
+ }
431
+ //# sourceMappingURL=baseConnectionPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseConnectionPool.js","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/services/baseConnectionPool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @fileoverview IBM i connection pool management using mapepire-js
3
+ * This module provides a singleton connection pool for IBM i DB2 database operations.
4
+ * Credentials are provided by the MCP client via environment variables.
5
+ *
6
+ * @module src/services/mapepire/connectionPool
7
+ */
8
+ import { BindingValue, QueryResult } from "@ibm/mapepire-js";
9
+ import { RequestContext } from "../../utils/internal/requestContext.js";
10
+ import { BaseConnectionPool } from "./baseConnectionPool.js";
11
+ declare const IBM_I_POOL_ID: unique symbol;
12
+ /**
13
+ * IBM i connection pool manager with lazy initialization
14
+ * Credentials are provided by MCP client via environment variables
15
+ */
16
+ export declare class IBMiConnectionPool extends BaseConnectionPool<typeof IBM_I_POOL_ID> {
17
+ private static instance;
18
+ /**
19
+ * Get the singleton instance
20
+ */
21
+ private static getInstance;
22
+ /**
23
+ * Initialize the connection pool using credentials from config
24
+ * Called automatically on first query if not already initialized
25
+ */
26
+ private static ensureInitialized;
27
+ /**
28
+ * Execute a SQL query with automatic pagination to fetch all results
29
+ * Uses the query/execute/fetchMore pattern for large result sets
30
+ */
31
+ static executeQueryWithPagination(query: string, params?: BindingValue[], context?: RequestContext, fetchSize?: number): Promise<{
32
+ data: unknown[];
33
+ success: boolean;
34
+ sql_rc?: unknown;
35
+ execution_time?: number;
36
+ }>;
37
+ /**
38
+ * Execute a SQL query against the IBM i database
39
+ * Automatically initializes the pool if not already done
40
+ */
41
+ static executeQuery(query: string, params?: BindingValue[], context?: RequestContext): Promise<QueryResult<unknown>>;
42
+ /**
43
+ * Check the health of the connection pool
44
+ */
45
+ static healthCheck(): Promise<boolean>;
46
+ /**
47
+ * Close the connection pool gracefully
48
+ */
49
+ static close(): Promise<void>;
50
+ /**
51
+ * Get connection pool status for monitoring
52
+ */
53
+ static getStatus(): {
54
+ initialized: boolean;
55
+ connecting: boolean;
56
+ poolExists: boolean;
57
+ };
58
+ }
59
+ export {};
60
+ //# sourceMappingURL=connectionPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionPool.d.ts","sourceRoot":"","sources":["../../../src/ibmi-mcp-server/services/connectionPool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI7D,OAAO,EAEL,cAAc,EACf,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAGjC,QAAA,MAAM,aAAa,eAAgC,CAAC;AAEpD;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,OAAO,aAAa,CACrB;IACC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IAExD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAO1B;;;OAGG;mBACkB,iBAAiB;IA0DtC;;;OAGG;WACU,0BAA0B,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC;QACT,IAAI,EAAE,OAAO,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IAkBF;;;OAGG;WACU,YAAY,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAiBhC;;OAEG;WACU,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAwB5C;;OAEG;WACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;KACrB;CAUF"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * @fileoverview IBM i connection pool management using mapepire-js
3
+ * This module provides a singleton connection pool for IBM i DB2 database operations.
4
+ * Credentials are provided by the MCP client via environment variables.
5
+ *
6
+ * @module src/services/mapepire/connectionPool
7
+ */
8
+ import { config } from "../../config/index.js";
9
+ import { logger } from "../../utils/internal/logger.js";
10
+ import { ErrorHandler } from "../../utils/internal/errorHandler.js";
11
+ import { requestContextService, } from "../../utils/internal/requestContext.js";
12
+ import { JsonRpcErrorCode, McpError } from "../../types-global/errors.js";
13
+ import { BaseConnectionPool, } from "./baseConnectionPool.js";
14
+ // Singleton identifier for the IBM i connection pool
15
+ const IBM_I_POOL_ID = Symbol("ibmi-singleton-pool");
16
+ /**
17
+ * IBM i connection pool manager with lazy initialization
18
+ * Credentials are provided by MCP client via environment variables
19
+ */
20
+ export class IBMiConnectionPool extends BaseConnectionPool {
21
+ static instance;
22
+ /**
23
+ * Get the singleton instance
24
+ */
25
+ static getInstance() {
26
+ if (!this.instance) {
27
+ this.instance = new IBMiConnectionPool();
28
+ }
29
+ return this.instance;
30
+ }
31
+ /**
32
+ * Initialize the connection pool using credentials from config
33
+ * Called automatically on first query if not already initialized
34
+ */
35
+ static async ensureInitialized() {
36
+ const instance = this.getInstance();
37
+ const poolState = instance.pools.get(IBM_I_POOL_ID);
38
+ if (poolState && poolState.isInitialized) {
39
+ return;
40
+ }
41
+ const context = requestContextService.createRequestContext({
42
+ operation: "InitializeIBMiConnectionPool",
43
+ });
44
+ try {
45
+ // Check if DB2i configuration is available
46
+ if (!config.db2i) {
47
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, "DB2i configuration not found. Please ensure DB2i_HOST, DB2i_USER, and DB2i_PASS environment variables are set.", { configSection: "db2i" });
48
+ }
49
+ const { host, user, password, ignoreUnauthorized } = config.db2i;
50
+ logger.info({
51
+ ...context,
52
+ host,
53
+ user: user.substring(0, 3) + "***", // Mask username for security
54
+ ignoreUnauthorized,
55
+ }, "Initializing IBM i connection pool");
56
+ // Convert config to pool connection config
57
+ const poolConfig = {
58
+ host,
59
+ user,
60
+ password,
61
+ ignoreUnauthorized,
62
+ };
63
+ // Initialize the pool using base class
64
+ await instance.initializePool(IBM_I_POOL_ID, poolConfig, context);
65
+ logger.info(context, "IBM i connection pool initialized successfully");
66
+ }
67
+ catch (error) {
68
+ const handledError = ErrorHandler.handleError(error, {
69
+ operation: "InitializeIBMiConnectionPool",
70
+ context,
71
+ errorCode: JsonRpcErrorCode.InitializationFailed,
72
+ critical: true,
73
+ });
74
+ throw handledError;
75
+ }
76
+ }
77
+ /**
78
+ * Execute a SQL query with automatic pagination to fetch all results
79
+ * Uses the query/execute/fetchMore pattern for large result sets
80
+ */
81
+ static async executeQueryWithPagination(query, params, context, fetchSize = 300) {
82
+ const operationContext = context ||
83
+ requestContextService.createRequestContext({
84
+ operation: "ExecuteQueryWithPagination",
85
+ });
86
+ await this.ensureInitialized();
87
+ const instance = this.getInstance();
88
+ return instance.executeQueryWithPagination(IBM_I_POOL_ID, query, params, operationContext, fetchSize);
89
+ }
90
+ /**
91
+ * Execute a SQL query against the IBM i database
92
+ * Automatically initializes the pool if not already done
93
+ */
94
+ static async executeQuery(query, params, context) {
95
+ const operationContext = context ||
96
+ requestContextService.createRequestContext({
97
+ operation: "ExecuteQuery",
98
+ });
99
+ await this.ensureInitialized();
100
+ const instance = this.getInstance();
101
+ return instance.executeQuery(IBM_I_POOL_ID, query, params, operationContext);
102
+ }
103
+ /**
104
+ * Check the health of the connection pool
105
+ */
106
+ static async healthCheck() {
107
+ const context = requestContextService.createRequestContext({
108
+ operation: "ConnectionHealthCheck",
109
+ });
110
+ try {
111
+ await this.ensureInitialized();
112
+ const instance = this.getInstance();
113
+ const health = await instance.checkPoolHealth(IBM_I_POOL_ID, context);
114
+ logger.debug(context, "Connection health check passed");
115
+ return health.status === "healthy";
116
+ }
117
+ catch (error) {
118
+ logger.error({
119
+ ...context,
120
+ error: error instanceof Error ? error.message : String(error),
121
+ }, "Connection health check failed");
122
+ return false;
123
+ }
124
+ }
125
+ /**
126
+ * Close the connection pool gracefully
127
+ */
128
+ static async close() {
129
+ const context = requestContextService.createRequestContext({
130
+ operation: "CloseConnectionPool",
131
+ });
132
+ const instance = this.getInstance();
133
+ const poolState = instance.pools.get(IBM_I_POOL_ID);
134
+ if (poolState && poolState.pool) {
135
+ logger.info(context, "Closing IBM i connection pool");
136
+ await instance.closePool(IBM_I_POOL_ID, context);
137
+ logger.info(context, "IBM i connection pool closed successfully");
138
+ }
139
+ }
140
+ /**
141
+ * Get connection pool status for monitoring
142
+ */
143
+ static getStatus() {
144
+ const instance = this.getInstance();
145
+ const poolStatus = instance.getPoolStatus(IBM_I_POOL_ID);
146
+ return {
147
+ initialized: poolStatus?.initialized ?? false,
148
+ connecting: poolStatus?.connecting ?? false,
149
+ poolExists: poolStatus !== null,
150
+ };
151
+ }
152
+ }
153
+ //# sourceMappingURL=connectionPool.js.map