@neverinfamous/mysql-mcp 2.1.0 → 2.3.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 (802) hide show
  1. package/.env.example +14 -4
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +7 -1
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +6 -1
  4. package/.github/dependabot.yml +15 -0
  5. package/.github/pull_request_template.md +5 -0
  6. package/.github/workflows/codeql.yml +41 -42
  7. package/.github/workflows/docker-publish.yml +247 -210
  8. package/.github/workflows/publish-npm.yml +16 -6
  9. package/CHANGELOG.md +357 -22
  10. package/CODE_MODE.md +245 -0
  11. package/CODE_OF_CONDUCT.md +2 -0
  12. package/DOCKER_README.md +250 -161
  13. package/Dockerfile +2 -2
  14. package/README.md +239 -182
  15. package/SECURITY.md +0 -8
  16. package/VERSION +1 -1
  17. package/dist/__tests__/mocks/adapter.d.ts +3 -3
  18. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  19. package/dist/__tests__/mocks/adapter.js +51 -35
  20. package/dist/__tests__/mocks/adapter.js.map +1 -1
  21. package/dist/__tests__/mocks/index.d.ts +4 -4
  22. package/dist/__tests__/mocks/index.d.ts.map +1 -1
  23. package/dist/__tests__/mocks/index.js +2 -2
  24. package/dist/__tests__/mocks/index.js.map +1 -1
  25. package/dist/__tests__/mocks/mysql.d.ts +2 -2
  26. package/dist/__tests__/mocks/mysql.d.ts.map +1 -1
  27. package/dist/__tests__/mocks/mysql.js +14 -14
  28. package/dist/__tests__/mocks/mysql.js.map +1 -1
  29. package/dist/__tests__/setup.d.ts.map +1 -1
  30. package/dist/__tests__/setup.js +7 -7
  31. package/dist/__tests__/setup.js.map +1 -1
  32. package/dist/adapters/DatabaseAdapter.d.ts +2 -2
  33. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  34. package/dist/adapters/DatabaseAdapter.js +69 -40
  35. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  36. package/dist/adapters/mysql/MySQLAdapter.d.ts +14 -4
  37. package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -1
  38. package/dist/adapters/mysql/MySQLAdapter.js +152 -116
  39. package/dist/adapters/mysql/MySQLAdapter.js.map +1 -1
  40. package/dist/adapters/mysql/SchemaManager.d.ts +1 -1
  41. package/dist/adapters/mysql/SchemaManager.d.ts.map +1 -1
  42. package/dist/adapters/mysql/SchemaManager.js +76 -56
  43. package/dist/adapters/mysql/SchemaManager.js.map +1 -1
  44. package/dist/adapters/mysql/index.d.ts +2 -2
  45. package/dist/adapters/mysql/index.js +2 -2
  46. package/dist/adapters/mysql/prompts/backupStrategy.d.ts +1 -1
  47. package/dist/adapters/mysql/prompts/backupStrategy.d.ts.map +1 -1
  48. package/dist/adapters/mysql/prompts/backupStrategy.js +21 -9
  49. package/dist/adapters/mysql/prompts/backupStrategy.js.map +1 -1
  50. package/dist/adapters/mysql/prompts/clusterSetup.d.ts +1 -1
  51. package/dist/adapters/mysql/prompts/clusterSetup.d.ts.map +1 -1
  52. package/dist/adapters/mysql/prompts/clusterSetup.js +3 -3
  53. package/dist/adapters/mysql/prompts/clusterSetup.js.map +1 -1
  54. package/dist/adapters/mysql/prompts/docstoreSetup.d.ts +1 -1
  55. package/dist/adapters/mysql/prompts/docstoreSetup.js +3 -3
  56. package/dist/adapters/mysql/prompts/docstoreSetup.js.map +1 -1
  57. package/dist/adapters/mysql/prompts/eventScheduler.d.ts +1 -1
  58. package/dist/adapters/mysql/prompts/eventScheduler.js +3 -3
  59. package/dist/adapters/mysql/prompts/eventScheduler.js.map +1 -1
  60. package/dist/adapters/mysql/prompts/healthCheck.d.ts +1 -1
  61. package/dist/adapters/mysql/prompts/healthCheck.d.ts.map +1 -1
  62. package/dist/adapters/mysql/prompts/healthCheck.js +10 -6
  63. package/dist/adapters/mysql/prompts/healthCheck.js.map +1 -1
  64. package/dist/adapters/mysql/prompts/index.d.ts +10 -3
  65. package/dist/adapters/mysql/prompts/index.d.ts.map +1 -1
  66. package/dist/adapters/mysql/prompts/index.js +106 -63
  67. package/dist/adapters/mysql/prompts/index.js.map +1 -1
  68. package/dist/adapters/mysql/prompts/indexTuning.d.ts +1 -1
  69. package/dist/adapters/mysql/prompts/indexTuning.d.ts.map +1 -1
  70. package/dist/adapters/mysql/prompts/indexTuning.js +11 -7
  71. package/dist/adapters/mysql/prompts/indexTuning.js.map +1 -1
  72. package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts +1 -1
  73. package/dist/adapters/mysql/prompts/mysqlshSetup.js +4 -4
  74. package/dist/adapters/mysql/prompts/mysqlshSetup.js.map +1 -1
  75. package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts +1 -1
  76. package/dist/adapters/mysql/prompts/proxysqlSetup.js +3 -3
  77. package/dist/adapters/mysql/prompts/proxysqlSetup.js.map +1 -1
  78. package/dist/adapters/mysql/prompts/replicationSetup.d.ts +1 -1
  79. package/dist/adapters/mysql/prompts/replicationSetup.d.ts.map +1 -1
  80. package/dist/adapters/mysql/prompts/replicationSetup.js +13 -7
  81. package/dist/adapters/mysql/prompts/replicationSetup.js.map +1 -1
  82. package/dist/adapters/mysql/prompts/routerSetup.d.ts +1 -1
  83. package/dist/adapters/mysql/prompts/routerSetup.d.ts.map +1 -1
  84. package/dist/adapters/mysql/prompts/routerSetup.js +8 -3
  85. package/dist/adapters/mysql/prompts/routerSetup.js.map +1 -1
  86. package/dist/adapters/mysql/prompts/spatialSetup.d.ts +1 -1
  87. package/dist/adapters/mysql/prompts/spatialSetup.js +3 -3
  88. package/dist/adapters/mysql/prompts/spatialSetup.js.map +1 -1
  89. package/dist/adapters/mysql/prompts/sysSchema.d.ts +1 -1
  90. package/dist/adapters/mysql/prompts/sysSchema.d.ts.map +1 -1
  91. package/dist/adapters/mysql/prompts/sysSchema.js +3 -3
  92. package/dist/adapters/mysql/prompts/sysSchema.js.map +1 -1
  93. package/dist/adapters/mysql/resources/capabilities.d.ts +2 -2
  94. package/dist/adapters/mysql/resources/capabilities.d.ts.map +1 -1
  95. package/dist/adapters/mysql/resources/capabilities.js +19 -16
  96. package/dist/adapters/mysql/resources/capabilities.js.map +1 -1
  97. package/dist/adapters/mysql/resources/cluster.d.ts +2 -2
  98. package/dist/adapters/mysql/resources/cluster.d.ts.map +1 -1
  99. package/dist/adapters/mysql/resources/cluster.js +17 -15
  100. package/dist/adapters/mysql/resources/cluster.js.map +1 -1
  101. package/dist/adapters/mysql/resources/docstore.d.ts +2 -2
  102. package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -1
  103. package/dist/adapters/mysql/resources/docstore.js +12 -12
  104. package/dist/adapters/mysql/resources/docstore.js.map +1 -1
  105. package/dist/adapters/mysql/resources/events.d.ts +2 -2
  106. package/dist/adapters/mysql/resources/events.d.ts.map +1 -1
  107. package/dist/adapters/mysql/resources/events.js +12 -12
  108. package/dist/adapters/mysql/resources/events.js.map +1 -1
  109. package/dist/adapters/mysql/resources/health.d.ts +2 -2
  110. package/dist/adapters/mysql/resources/health.d.ts.map +1 -1
  111. package/dist/adapters/mysql/resources/health.js +36 -32
  112. package/dist/adapters/mysql/resources/health.js.map +1 -1
  113. package/dist/adapters/mysql/resources/index.d.ts +11 -3
  114. package/dist/adapters/mysql/resources/index.d.ts.map +1 -1
  115. package/dist/adapters/mysql/resources/index.js +28 -20
  116. package/dist/adapters/mysql/resources/index.js.map +1 -1
  117. package/dist/adapters/mysql/resources/indexes.d.ts +2 -2
  118. package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -1
  119. package/dist/adapters/mysql/resources/indexes.js +12 -12
  120. package/dist/adapters/mysql/resources/indexes.js.map +1 -1
  121. package/dist/adapters/mysql/resources/innodb.d.ts +2 -2
  122. package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -1
  123. package/dist/adapters/mysql/resources/innodb.js +37 -36
  124. package/dist/adapters/mysql/resources/innodb.js.map +1 -1
  125. package/dist/adapters/mysql/resources/locks.d.ts +2 -2
  126. package/dist/adapters/mysql/resources/locks.d.ts.map +1 -1
  127. package/dist/adapters/mysql/resources/locks.js +14 -14
  128. package/dist/adapters/mysql/resources/locks.js.map +1 -1
  129. package/dist/adapters/mysql/resources/performance.d.ts +2 -2
  130. package/dist/adapters/mysql/resources/performance.d.ts.map +1 -1
  131. package/dist/adapters/mysql/resources/performance.js +30 -29
  132. package/dist/adapters/mysql/resources/performance.js.map +1 -1
  133. package/dist/adapters/mysql/resources/pool.d.ts +2 -2
  134. package/dist/adapters/mysql/resources/pool.d.ts.map +1 -1
  135. package/dist/adapters/mysql/resources/pool.js +9 -9
  136. package/dist/adapters/mysql/resources/pool.js.map +1 -1
  137. package/dist/adapters/mysql/resources/processlist.d.ts +2 -2
  138. package/dist/adapters/mysql/resources/processlist.d.ts.map +1 -1
  139. package/dist/adapters/mysql/resources/processlist.js +9 -9
  140. package/dist/adapters/mysql/resources/processlist.js.map +1 -1
  141. package/dist/adapters/mysql/resources/replication.d.ts +2 -2
  142. package/dist/adapters/mysql/resources/replication.d.ts.map +1 -1
  143. package/dist/adapters/mysql/resources/replication.js +42 -35
  144. package/dist/adapters/mysql/resources/replication.js.map +1 -1
  145. package/dist/adapters/mysql/resources/schema.d.ts +2 -2
  146. package/dist/adapters/mysql/resources/schema.d.ts.map +1 -1
  147. package/dist/adapters/mysql/resources/schema.js +8 -8
  148. package/dist/adapters/mysql/resources/schema.js.map +1 -1
  149. package/dist/adapters/mysql/resources/spatial.d.ts +2 -2
  150. package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -1
  151. package/dist/adapters/mysql/resources/spatial.js +9 -9
  152. package/dist/adapters/mysql/resources/spatial.js.map +1 -1
  153. package/dist/adapters/mysql/resources/status.d.ts +2 -2
  154. package/dist/adapters/mysql/resources/status.d.ts.map +1 -1
  155. package/dist/adapters/mysql/resources/status.js +10 -10
  156. package/dist/adapters/mysql/resources/status.js.map +1 -1
  157. package/dist/adapters/mysql/resources/sysschema.d.ts +2 -2
  158. package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -1
  159. package/dist/adapters/mysql/resources/sysschema.js +10 -10
  160. package/dist/adapters/mysql/resources/sysschema.js.map +1 -1
  161. package/dist/adapters/mysql/resources/tables.d.ts +2 -2
  162. package/dist/adapters/mysql/resources/tables.d.ts.map +1 -1
  163. package/dist/adapters/mysql/resources/tables.js +8 -8
  164. package/dist/adapters/mysql/resources/tables.js.map +1 -1
  165. package/dist/adapters/mysql/resources/variables.d.ts +2 -2
  166. package/dist/adapters/mysql/resources/variables.d.ts.map +1 -1
  167. package/dist/adapters/mysql/resources/variables.js +10 -10
  168. package/dist/adapters/mysql/resources/variables.js.map +1 -1
  169. package/dist/adapters/mysql/tools/admin/backup.d.ts +2 -2
  170. package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -1
  171. package/dist/adapters/mysql/tools/admin/backup.js +193 -101
  172. package/dist/adapters/mysql/tools/admin/backup.js.map +1 -1
  173. package/dist/adapters/mysql/tools/admin/index.d.ts +2 -2
  174. package/dist/adapters/mysql/tools/admin/index.js +6 -6
  175. package/dist/adapters/mysql/tools/admin/index.js.map +1 -1
  176. package/dist/adapters/mysql/tools/admin/maintenance.d.ts +2 -2
  177. package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -1
  178. package/dist/adapters/mysql/tools/admin/maintenance.js +97 -66
  179. package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -1
  180. package/dist/adapters/mysql/tools/admin/monitoring.d.ts +2 -2
  181. package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -1
  182. package/dist/adapters/mysql/tools/admin/monitoring.js +215 -79
  183. package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -1
  184. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts +2 -2
  185. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -1
  186. package/dist/adapters/mysql/tools/cluster/group-replication.js +90 -74
  187. package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -1
  188. package/dist/adapters/mysql/tools/cluster/index.d.ts +2 -2
  189. package/dist/adapters/mysql/tools/cluster/index.js +3 -3
  190. package/dist/adapters/mysql/tools/cluster/index.js.map +1 -1
  191. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts +2 -2
  192. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -1
  193. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +225 -97
  194. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -1
  195. package/dist/adapters/mysql/tools/codemode/index.d.ts +38 -0
  196. package/dist/adapters/mysql/tools/codemode/index.d.ts.map +1 -0
  197. package/dist/adapters/mysql/tools/codemode/index.js +203 -0
  198. package/dist/adapters/mysql/tools/codemode/index.js.map +1 -0
  199. package/dist/adapters/mysql/tools/core.d.ts +2 -2
  200. package/dist/adapters/mysql/tools/core.d.ts.map +1 -1
  201. package/dist/adapters/mysql/tools/core.js +234 -114
  202. package/dist/adapters/mysql/tools/core.js.map +1 -1
  203. package/dist/adapters/mysql/tools/docstore.d.ts +2 -2
  204. package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -1
  205. package/dist/adapters/mysql/tools/docstore.js +252 -117
  206. package/dist/adapters/mysql/tools/docstore.js.map +1 -1
  207. package/dist/adapters/mysql/tools/events.d.ts +2 -2
  208. package/dist/adapters/mysql/tools/events.d.ts.map +1 -1
  209. package/dist/adapters/mysql/tools/events.js +236 -113
  210. package/dist/adapters/mysql/tools/events.js.map +1 -1
  211. package/dist/adapters/mysql/tools/index.d.ts +19 -19
  212. package/dist/adapters/mysql/tools/index.d.ts.map +1 -1
  213. package/dist/adapters/mysql/tools/index.js +19 -19
  214. package/dist/adapters/mysql/tools/index.js.map +1 -1
  215. package/dist/adapters/mysql/tools/json/core.d.ts +2 -2
  216. package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -1
  217. package/dist/adapters/mysql/tools/json/core.js +225 -131
  218. package/dist/adapters/mysql/tools/json/core.js.map +1 -1
  219. package/dist/adapters/mysql/tools/json/enhanced.d.ts +2 -2
  220. package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -1
  221. package/dist/adapters/mysql/tools/json/enhanced.js +274 -163
  222. package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -1
  223. package/dist/adapters/mysql/tools/json/helpers.d.ts +2 -2
  224. package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -1
  225. package/dist/adapters/mysql/tools/json/helpers.js +141 -57
  226. package/dist/adapters/mysql/tools/json/helpers.js.map +1 -1
  227. package/dist/adapters/mysql/tools/json/index.d.ts +2 -2
  228. package/dist/adapters/mysql/tools/json/index.js +6 -6
  229. package/dist/adapters/mysql/tools/json/index.js.map +1 -1
  230. package/dist/adapters/mysql/tools/partitioning.d.ts +2 -2
  231. package/dist/adapters/mysql/tools/partitioning.d.ts.map +1 -1
  232. package/dist/adapters/mysql/tools/partitioning.js +180 -64
  233. package/dist/adapters/mysql/tools/partitioning.js.map +1 -1
  234. package/dist/adapters/mysql/tools/performance/analysis.d.ts +2 -2
  235. package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -1
  236. package/dist/adapters/mysql/tools/performance/analysis.js +184 -101
  237. package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -1
  238. package/dist/adapters/mysql/tools/performance/index.d.ts +2 -2
  239. package/dist/adapters/mysql/tools/performance/index.js +4 -4
  240. package/dist/adapters/mysql/tools/performance/index.js.map +1 -1
  241. package/dist/adapters/mysql/tools/performance/optimization.d.ts +3 -3
  242. package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -1
  243. package/dist/adapters/mysql/tools/performance/optimization.js +229 -77
  244. package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -1
  245. package/dist/adapters/mysql/tools/proxysql.d.ts +2 -2
  246. package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -1
  247. package/dist/adapters/mysql/tools/proxysql.js +213 -125
  248. package/dist/adapters/mysql/tools/proxysql.js.map +1 -1
  249. package/dist/adapters/mysql/tools/replication.d.ts +2 -2
  250. package/dist/adapters/mysql/tools/replication.d.ts.map +1 -1
  251. package/dist/adapters/mysql/tools/replication.js +117 -66
  252. package/dist/adapters/mysql/tools/replication.js.map +1 -1
  253. package/dist/adapters/mysql/tools/roles.d.ts +2 -2
  254. package/dist/adapters/mysql/tools/roles.d.ts.map +1 -1
  255. package/dist/adapters/mysql/tools/roles.js +276 -84
  256. package/dist/adapters/mysql/tools/roles.js.map +1 -1
  257. package/dist/adapters/mysql/tools/router.d.ts +2 -2
  258. package/dist/adapters/mysql/tools/router.d.ts.map +1 -1
  259. package/dist/adapters/mysql/tools/router.js +174 -109
  260. package/dist/adapters/mysql/tools/router.js.map +1 -1
  261. package/dist/adapters/mysql/tools/schema/constraints.d.ts +2 -2
  262. package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -1
  263. package/dist/adapters/mysql/tools/schema/constraints.js +24 -15
  264. package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -1
  265. package/dist/adapters/mysql/tools/schema/index.d.ts +2 -2
  266. package/dist/adapters/mysql/tools/schema/index.d.ts.map +1 -1
  267. package/dist/adapters/mysql/tools/schema/index.js +7 -7
  268. package/dist/adapters/mysql/tools/schema/index.js.map +1 -1
  269. package/dist/adapters/mysql/tools/schema/management.d.ts +2 -2
  270. package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -1
  271. package/dist/adapters/mysql/tools/schema/management.js +99 -42
  272. package/dist/adapters/mysql/tools/schema/management.js.map +1 -1
  273. package/dist/adapters/mysql/tools/schema/routines.d.ts +2 -2
  274. package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -1
  275. package/dist/adapters/mysql/tools/schema/routines.js +36 -19
  276. package/dist/adapters/mysql/tools/schema/routines.js.map +1 -1
  277. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts +2 -2
  278. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -1
  279. package/dist/adapters/mysql/tools/schema/scheduled_events.js +26 -13
  280. package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -1
  281. package/dist/adapters/mysql/tools/schema/triggers.d.ts +2 -2
  282. package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -1
  283. package/dist/adapters/mysql/tools/schema/triggers.js +24 -13
  284. package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -1
  285. package/dist/adapters/mysql/tools/schema/views.d.ts +2 -2
  286. package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -1
  287. package/dist/adapters/mysql/tools/schema/views.js +59 -28
  288. package/dist/adapters/mysql/tools/schema/views.js.map +1 -1
  289. package/dist/adapters/mysql/tools/security/audit.d.ts +2 -2
  290. package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -1
  291. package/dist/adapters/mysql/tools/security/audit.js +61 -55
  292. package/dist/adapters/mysql/tools/security/audit.js.map +1 -1
  293. package/dist/adapters/mysql/tools/security/data-protection.d.ts +2 -2
  294. package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -1
  295. package/dist/adapters/mysql/tools/security/data-protection.js +193 -80
  296. package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -1
  297. package/dist/adapters/mysql/tools/security/encryption.d.ts +2 -2
  298. package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -1
  299. package/dist/adapters/mysql/tools/security/encryption.js +86 -67
  300. package/dist/adapters/mysql/tools/security/encryption.js.map +1 -1
  301. package/dist/adapters/mysql/tools/security/index.d.ts +2 -2
  302. package/dist/adapters/mysql/tools/security/index.js +4 -4
  303. package/dist/adapters/mysql/tools/security/index.js.map +1 -1
  304. package/dist/adapters/mysql/tools/shell/backup.d.ts +1 -1
  305. package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -1
  306. package/dist/adapters/mysql/tools/shell/backup.js +122 -63
  307. package/dist/adapters/mysql/tools/shell/backup.js.map +1 -1
  308. package/dist/adapters/mysql/tools/shell/common.d.ts.map +1 -1
  309. package/dist/adapters/mysql/tools/shell/common.js +61 -37
  310. package/dist/adapters/mysql/tools/shell/common.js.map +1 -1
  311. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts +1 -1
  312. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts.map +1 -1
  313. package/dist/adapters/mysql/tools/shell/data-transfer.js +125 -69
  314. package/dist/adapters/mysql/tools/shell/data-transfer.js.map +1 -1
  315. package/dist/adapters/mysql/tools/shell/index.d.ts +2 -2
  316. package/dist/adapters/mysql/tools/shell/index.js +6 -6
  317. package/dist/adapters/mysql/tools/shell/index.js.map +1 -1
  318. package/dist/adapters/mysql/tools/shell/info.d.ts +1 -1
  319. package/dist/adapters/mysql/tools/shell/info.d.ts.map +1 -1
  320. package/dist/adapters/mysql/tools/shell/info.js +12 -12
  321. package/dist/adapters/mysql/tools/shell/info.js.map +1 -1
  322. package/dist/adapters/mysql/tools/shell/restore.d.ts +1 -1
  323. package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -1
  324. package/dist/adapters/mysql/tools/shell/restore.js +128 -43
  325. package/dist/adapters/mysql/tools/shell/restore.js.map +1 -1
  326. package/dist/adapters/mysql/tools/shell/utilities.d.ts +1 -1
  327. package/dist/adapters/mysql/tools/shell/utilities.d.ts.map +1 -1
  328. package/dist/adapters/mysql/tools/shell/utilities.js +42 -18
  329. package/dist/adapters/mysql/tools/shell/utilities.js.map +1 -1
  330. package/dist/adapters/mysql/tools/spatial/geometry.d.ts +2 -2
  331. package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -1
  332. package/dist/adapters/mysql/tools/spatial/geometry.js +85 -46
  333. package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -1
  334. package/dist/adapters/mysql/tools/spatial/index.d.ts +2 -2
  335. package/dist/adapters/mysql/tools/spatial/index.js +5 -5
  336. package/dist/adapters/mysql/tools/spatial/index.js.map +1 -1
  337. package/dist/adapters/mysql/tools/spatial/operations.d.ts +2 -2
  338. package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -1
  339. package/dist/adapters/mysql/tools/spatial/operations.js +175 -106
  340. package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -1
  341. package/dist/adapters/mysql/tools/spatial/queries.d.ts +2 -2
  342. package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -1
  343. package/dist/adapters/mysql/tools/spatial/queries.js +144 -100
  344. package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -1
  345. package/dist/adapters/mysql/tools/spatial/setup.d.ts +2 -2
  346. package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -1
  347. package/dist/adapters/mysql/tools/spatial/setup.js +122 -34
  348. package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -1
  349. package/dist/adapters/mysql/tools/stats/comparative.d.ts +2 -2
  350. package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -1
  351. package/dist/adapters/mysql/tools/stats/comparative.js +159 -107
  352. package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -1
  353. package/dist/adapters/mysql/tools/stats/descriptive.d.ts +2 -2
  354. package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -1
  355. package/dist/adapters/mysql/tools/stats/descriptive.js +268 -205
  356. package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -1
  357. package/dist/adapters/mysql/tools/stats/index.d.ts +2 -2
  358. package/dist/adapters/mysql/tools/stats/index.js +3 -3
  359. package/dist/adapters/mysql/tools/stats/index.js.map +1 -1
  360. package/dist/adapters/mysql/tools/sysschema/activity.d.ts +2 -2
  361. package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -1
  362. package/dist/adapters/mysql/tools/sysschema/activity.js +23 -23
  363. package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -1
  364. package/dist/adapters/mysql/tools/sysschema/index.d.ts +2 -2
  365. package/dist/adapters/mysql/tools/sysschema/index.js +4 -4
  366. package/dist/adapters/mysql/tools/sysschema/index.js.map +1 -1
  367. package/dist/adapters/mysql/tools/sysschema/performance.d.ts +2 -2
  368. package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -1
  369. package/dist/adapters/mysql/tools/sysschema/performance.js +58 -43
  370. package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -1
  371. package/dist/adapters/mysql/tools/sysschema/resources.d.ts +2 -2
  372. package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -1
  373. package/dist/adapters/mysql/tools/sysschema/resources.js +58 -33
  374. package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -1
  375. package/dist/adapters/mysql/tools/text/fulltext.d.ts +4 -3
  376. package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -1
  377. package/dist/adapters/mysql/tools/text/fulltext.js +214 -55
  378. package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -1
  379. package/dist/adapters/mysql/tools/text/index.d.ts +3 -3
  380. package/dist/adapters/mysql/tools/text/index.d.ts.map +1 -1
  381. package/dist/adapters/mysql/tools/text/index.js +6 -5
  382. package/dist/adapters/mysql/tools/text/index.js.map +1 -1
  383. package/dist/adapters/mysql/tools/text/processing.d.ts +2 -2
  384. package/dist/adapters/mysql/tools/text/processing.d.ts.map +1 -1
  385. package/dist/adapters/mysql/tools/text/processing.js +175 -122
  386. package/dist/adapters/mysql/tools/text/processing.js.map +1 -1
  387. package/dist/adapters/mysql/tools/transactions.d.ts +2 -2
  388. package/dist/adapters/mysql/tools/transactions.d.ts.map +1 -1
  389. package/dist/adapters/mysql/tools/transactions.js +162 -85
  390. package/dist/adapters/mysql/tools/transactions.js.map +1 -1
  391. package/dist/adapters/mysql/types/proxysql-types.d.ts +7 -2
  392. package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -1
  393. package/dist/adapters/mysql/types/proxysql-types.js +52 -30
  394. package/dist/adapters/mysql/types/proxysql-types.js.map +1 -1
  395. package/dist/adapters/mysql/types/router-types.d.ts +1 -1
  396. package/dist/adapters/mysql/types/router-types.js +17 -17
  397. package/dist/adapters/mysql/types/router-types.js.map +1 -1
  398. package/dist/adapters/mysql/types/shell-types.d.ts +1 -2
  399. package/dist/adapters/mysql/types/shell-types.d.ts.map +1 -1
  400. package/dist/adapters/mysql/types/shell-types.js +255 -82
  401. package/dist/adapters/mysql/types/shell-types.js.map +1 -1
  402. package/dist/adapters/mysql/types.d.ts +976 -80
  403. package/dist/adapters/mysql/types.d.ts.map +1 -1
  404. package/dist/adapters/mysql/types.js +1317 -170
  405. package/dist/adapters/mysql/types.js.map +1 -1
  406. package/dist/auth/AuthorizationServerDiscovery.d.ts +1 -1
  407. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -1
  408. package/dist/auth/AuthorizationServerDiscovery.js +16 -14
  409. package/dist/auth/AuthorizationServerDiscovery.js.map +1 -1
  410. package/dist/auth/OAuthResourceServer.d.ts +1 -1
  411. package/dist/auth/OAuthResourceServer.d.ts.map +1 -1
  412. package/dist/auth/OAuthResourceServer.js +4 -4
  413. package/dist/auth/OAuthResourceServer.js.map +1 -1
  414. package/dist/auth/TokenValidator.d.ts +1 -1
  415. package/dist/auth/TokenValidator.d.ts.map +1 -1
  416. package/dist/auth/TokenValidator.js +30 -20
  417. package/dist/auth/TokenValidator.js.map +1 -1
  418. package/dist/auth/errors.d.ts.map +1 -1
  419. package/dist/auth/errors.js +24 -24
  420. package/dist/auth/errors.js.map +1 -1
  421. package/dist/auth/index.d.ts +7 -7
  422. package/dist/auth/index.d.ts.map +1 -1
  423. package/dist/auth/index.js +6 -6
  424. package/dist/auth/index.js.map +1 -1
  425. package/dist/auth/middleware.d.ts +2 -2
  426. package/dist/auth/middleware.d.ts.map +1 -1
  427. package/dist/auth/middleware.js +28 -24
  428. package/dist/auth/middleware.js.map +1 -1
  429. package/dist/auth/scopes.d.ts +2 -2
  430. package/dist/auth/scopes.d.ts.map +1 -1
  431. package/dist/auth/scopes.js +23 -16
  432. package/dist/auth/scopes.js.map +1 -1
  433. package/dist/auth/types.d.ts +2 -2
  434. package/dist/auth/types.d.ts.map +1 -1
  435. package/dist/cli/args.d.ts +1 -1
  436. package/dist/cli/args.d.ts.map +1 -1
  437. package/dist/cli/args.js +82 -68
  438. package/dist/cli/args.js.map +1 -1
  439. package/dist/cli.d.ts +1 -1
  440. package/dist/cli.d.ts.map +1 -1
  441. package/dist/cli.js +44 -34
  442. package/dist/cli.js.map +1 -1
  443. package/dist/codemode/api.d.ts +69 -0
  444. package/dist/codemode/api.d.ts.map +1 -0
  445. package/dist/codemode/api.js +1035 -0
  446. package/dist/codemode/api.js.map +1 -0
  447. package/dist/codemode/index.d.ts +13 -0
  448. package/dist/codemode/index.d.ts.map +1 -0
  449. package/dist/codemode/index.js +17 -0
  450. package/dist/codemode/index.js.map +1 -0
  451. package/dist/codemode/sandbox-factory.d.ts +72 -0
  452. package/dist/codemode/sandbox-factory.d.ts.map +1 -0
  453. package/dist/codemode/sandbox-factory.js +88 -0
  454. package/dist/codemode/sandbox-factory.js.map +1 -0
  455. package/dist/codemode/sandbox.d.ts +96 -0
  456. package/dist/codemode/sandbox.d.ts.map +1 -0
  457. package/dist/codemode/sandbox.js +345 -0
  458. package/dist/codemode/sandbox.js.map +1 -0
  459. package/dist/codemode/security.d.ts +44 -0
  460. package/dist/codemode/security.d.ts.map +1 -0
  461. package/dist/codemode/security.js +149 -0
  462. package/dist/codemode/security.js.map +1 -0
  463. package/dist/codemode/types.d.ts +137 -0
  464. package/dist/codemode/types.d.ts.map +1 -0
  465. package/dist/codemode/types.js +46 -0
  466. package/dist/codemode/types.js.map +1 -0
  467. package/dist/codemode/worker-sandbox.d.ts +82 -0
  468. package/dist/codemode/worker-sandbox.d.ts.map +1 -0
  469. package/dist/codemode/worker-sandbox.js +244 -0
  470. package/dist/codemode/worker-sandbox.js.map +1 -0
  471. package/dist/codemode/worker-script.d.ts +8 -0
  472. package/dist/codemode/worker-script.d.ts.map +1 -0
  473. package/dist/codemode/worker-script.js +113 -0
  474. package/dist/codemode/worker-script.js.map +1 -0
  475. package/dist/constants/ServerInstructions.d.ts +2 -2
  476. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  477. package/dist/constants/ServerInstructions.js +252 -36
  478. package/dist/constants/ServerInstructions.js.map +1 -1
  479. package/dist/filtering/ToolConstants.d.ts +12 -12
  480. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  481. package/dist/filtering/ToolConstants.js +253 -214
  482. package/dist/filtering/ToolConstants.js.map +1 -1
  483. package/dist/filtering/ToolFilter.d.ts +2 -2
  484. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  485. package/dist/filtering/ToolFilter.js +47 -36
  486. package/dist/filtering/ToolFilter.js.map +1 -1
  487. package/dist/index.d.ts +9 -9
  488. package/dist/index.d.ts.map +1 -1
  489. package/dist/index.js +7 -7
  490. package/dist/index.js.map +1 -1
  491. package/dist/logging/McpLogging.d.ts +2 -2
  492. package/dist/logging/McpLogging.d.ts.map +1 -1
  493. package/dist/logging/McpLogging.js +16 -13
  494. package/dist/logging/McpLogging.js.map +1 -1
  495. package/dist/logging/index.d.ts +1 -1
  496. package/dist/logging/index.js +1 -1
  497. package/dist/pool/ConnectionPool.d.ts +3 -3
  498. package/dist/pool/ConnectionPool.d.ts.map +1 -1
  499. package/dist/pool/ConnectionPool.js +30 -26
  500. package/dist/pool/ConnectionPool.js.map +1 -1
  501. package/dist/progress/ProgressReporter.d.ts +1 -1
  502. package/dist/progress/ProgressReporter.d.ts.map +1 -1
  503. package/dist/progress/ProgressReporter.js +5 -5
  504. package/dist/progress/ProgressReporter.js.map +1 -1
  505. package/dist/progress/index.d.ts +1 -1
  506. package/dist/progress/index.d.ts.map +1 -1
  507. package/dist/progress/index.js +1 -1
  508. package/dist/progress/index.js.map +1 -1
  509. package/dist/server/McpServer.d.ts +3 -3
  510. package/dist/server/McpServer.d.ts.map +1 -1
  511. package/dist/server/McpServer.js +58 -53
  512. package/dist/server/McpServer.js.map +1 -1
  513. package/dist/transports/http.d.ts +3 -3
  514. package/dist/transports/http.d.ts.map +1 -1
  515. package/dist/transports/http.js +36 -33
  516. package/dist/transports/http.js.map +1 -1
  517. package/dist/transports/index.d.ts +1 -1
  518. package/dist/transports/index.d.ts.map +1 -1
  519. package/dist/transports/index.js +1 -1
  520. package/dist/transports/index.js.map +1 -1
  521. package/dist/types/index.d.ts +6 -6
  522. package/dist/types/index.d.ts.map +1 -1
  523. package/dist/types/index.js +1 -1
  524. package/dist/types/index.js.map +1 -1
  525. package/dist/types/modules/database.d.ts +1 -1
  526. package/dist/types/modules/database.d.ts.map +1 -1
  527. package/dist/types/modules/errors.d.ts.map +1 -1
  528. package/dist/types/modules/errors.js +15 -15
  529. package/dist/types/modules/errors.js.map +1 -1
  530. package/dist/types/modules/oauth.d.ts +1 -1
  531. package/dist/types/modules/oauth.d.ts.map +1 -1
  532. package/dist/types/modules/query.d.ts +8 -8
  533. package/dist/types/modules/query.d.ts.map +1 -1
  534. package/dist/types/modules/server.d.ts +5 -3
  535. package/dist/types/modules/server.d.ts.map +1 -1
  536. package/dist/types/modules/tools.d.ts +6 -6
  537. package/dist/types/modules/tools.d.ts.map +1 -1
  538. package/dist/utils/logger.d.ts +2 -2
  539. package/dist/utils/logger.d.ts.map +1 -1
  540. package/dist/utils/logger.js +58 -55
  541. package/dist/utils/logger.js.map +1 -1
  542. package/dist/utils/promptGenerator.d.ts +1 -1
  543. package/dist/utils/promptGenerator.d.ts.map +1 -1
  544. package/dist/utils/promptGenerator.js +24 -16
  545. package/dist/utils/promptGenerator.js.map +1 -1
  546. package/dist/utils/validators.d.ts +21 -2
  547. package/dist/utils/validators.d.ts.map +1 -1
  548. package/dist/utils/validators.js +101 -13
  549. package/dist/utils/validators.js.map +1 -1
  550. package/eslint.config.js +117 -81
  551. package/package.json +66 -64
  552. package/releases/release-notes.md +32 -26
  553. package/releases/v2.0.0-release-notes.md +99 -51
  554. package/releases/v2.1.0-release-notes.md +14 -5
  555. package/releases/v2.2.0-release-notes.md +239 -0
  556. package/releases/v2.3.0-release-notes.md +191 -0
  557. package/server.json +1 -1
  558. package/src/__tests__/cli.test.ts +302 -247
  559. package/src/__tests__/index.test.ts +21 -21
  560. package/src/__tests__/mocks/adapter.ts +204 -163
  561. package/src/__tests__/mocks/index.ts +30 -23
  562. package/src/__tests__/mocks/mysql.ts +94 -84
  563. package/src/__tests__/perf.test.ts +207 -203
  564. package/src/__tests__/performance.test.ts +173 -164
  565. package/src/__tests__/setup.ts +26 -21
  566. package/src/adapters/DatabaseAdapter.ts +386 -340
  567. package/src/adapters/__tests__/DatabaseAdapter.test.ts +455 -377
  568. package/src/adapters/mysql/MySQLAdapter.ts +560 -486
  569. package/src/adapters/mysql/SchemaManager.ts +251 -208
  570. package/src/adapters/mysql/__tests__/MySQLAdapter.integration.test.ts +150 -147
  571. package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +590 -477
  572. package/src/adapters/mysql/__tests__/SchemaManager.test.ts +196 -154
  573. package/src/adapters/mysql/index.ts +2 -2
  574. package/src/adapters/mysql/prompts/__tests__/indexTuning.test.ts +33 -26
  575. package/src/adapters/mysql/prompts/__tests__/prompts.test.ts +277 -239
  576. package/src/adapters/mysql/prompts/backupStrategy.ts +29 -17
  577. package/src/adapters/mysql/prompts/clusterSetup.ts +11 -10
  578. package/src/adapters/mysql/prompts/docstoreSetup.ts +10 -10
  579. package/src/adapters/mysql/prompts/eventScheduler.ts +10 -10
  580. package/src/adapters/mysql/prompts/healthCheck.ts +20 -15
  581. package/src/adapters/mysql/prompts/index.ts +202 -145
  582. package/src/adapters/mysql/prompts/indexTuning.ts +22 -17
  583. package/src/adapters/mysql/prompts/mysqlshSetup.ts +11 -11
  584. package/src/adapters/mysql/prompts/proxysqlSetup.ts +10 -10
  585. package/src/adapters/mysql/prompts/replicationSetup.ts +24 -16
  586. package/src/adapters/mysql/prompts/routerSetup.ts +15 -10
  587. package/src/adapters/mysql/prompts/spatialSetup.ts +10 -10
  588. package/src/adapters/mysql/prompts/sysSchema.ts +11 -10
  589. package/src/adapters/mysql/resources/__tests__/capabilities.test.ts +118 -47
  590. package/src/adapters/mysql/resources/__tests__/cluster.test.ts +163 -104
  591. package/src/adapters/mysql/resources/__tests__/docstore.test.ts +88 -81
  592. package/src/adapters/mysql/resources/__tests__/events.test.ts +94 -83
  593. package/src/adapters/mysql/resources/__tests__/health.test.ts +131 -91
  594. package/src/adapters/mysql/resources/__tests__/indexes.test.ts +125 -102
  595. package/src/adapters/mysql/resources/__tests__/innodb.test.ts +86 -62
  596. package/src/adapters/mysql/resources/__tests__/locks.test.ts +142 -104
  597. package/src/adapters/mysql/resources/__tests__/performance.test.ts +81 -58
  598. package/src/adapters/mysql/resources/__tests__/pool.test.ts +45 -40
  599. package/src/adapters/mysql/resources/__tests__/processlist.test.ts +39 -23
  600. package/src/adapters/mysql/resources/__tests__/replication.test.ts +265 -211
  601. package/src/adapters/mysql/resources/__tests__/resources.test.ts +121 -109
  602. package/src/adapters/mysql/resources/__tests__/schema.test.ts +29 -23
  603. package/src/adapters/mysql/resources/__tests__/spatial.test.ts +58 -45
  604. package/src/adapters/mysql/resources/__tests__/status.test.ts +62 -45
  605. package/src/adapters/mysql/resources/__tests__/sysschema.test.ts +99 -60
  606. package/src/adapters/mysql/resources/__tests__/tables.test.ts +41 -32
  607. package/src/adapters/mysql/resources/__tests__/variables.test.ts +77 -49
  608. package/src/adapters/mysql/resources/capabilities.ts +61 -42
  609. package/src/adapters/mysql/resources/cluster.ts +58 -49
  610. package/src/adapters/mysql/resources/docstore.ts +46 -41
  611. package/src/adapters/mysql/resources/events.ts +37 -31
  612. package/src/adapters/mysql/resources/health.ts +98 -74
  613. package/src/adapters/mysql/resources/index.ts +55 -47
  614. package/src/adapters/mysql/resources/indexes.ts +66 -51
  615. package/src/adapters/mysql/resources/innodb.ts +98 -81
  616. package/src/adapters/mysql/resources/locks.ts +43 -40
  617. package/src/adapters/mysql/resources/performance.ts +80 -67
  618. package/src/adapters/mysql/resources/pool.ts +23 -20
  619. package/src/adapters/mysql/resources/processlist.ts +23 -18
  620. package/src/adapters/mysql/resources/replication.ts +124 -105
  621. package/src/adapters/mysql/resources/schema.ts +23 -18
  622. package/src/adapters/mysql/resources/spatial.ts +31 -26
  623. package/src/adapters/mysql/resources/status.ts +27 -22
  624. package/src/adapters/mysql/resources/sysschema.ts +41 -36
  625. package/src/adapters/mysql/resources/tables.ts +23 -18
  626. package/src/adapters/mysql/resources/variables.ts +27 -22
  627. package/src/adapters/mysql/tools/__tests__/cluster.test.ts +419 -311
  628. package/src/adapters/mysql/tools/__tests__/core.test.ts +701 -382
  629. package/src/adapters/mysql/tools/__tests__/docstore.test.ts +782 -413
  630. package/src/adapters/mysql/tools/__tests__/events.test.ts +806 -486
  631. package/src/adapters/mysql/tools/__tests__/json_core.test.ts +326 -259
  632. package/src/adapters/mysql/tools/__tests__/json_enhanced.test.ts +452 -352
  633. package/src/adapters/mysql/tools/__tests__/json_helpers.test.ts +203 -128
  634. package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +576 -340
  635. package/src/adapters/mysql/tools/__tests__/replication.test.ts +796 -390
  636. package/src/adapters/mysql/tools/__tests__/roles.test.ts +423 -166
  637. package/src/adapters/mysql/tools/__tests__/router.test.ts +644 -540
  638. package/src/adapters/mysql/tools/__tests__/security.test.ts +746 -421
  639. package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +246 -173
  640. package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +244 -205
  641. package/src/adapters/mysql/tools/__tests__/spatial.test.ts +443 -298
  642. package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +535 -150
  643. package/src/adapters/mysql/tools/__tests__/stats.test.ts +861 -553
  644. package/src/adapters/mysql/tools/__tests__/transactions.test.ts +452 -263
  645. package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +612 -372
  646. package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +550 -257
  647. package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +549 -352
  648. package/src/adapters/mysql/tools/admin/backup.ts +339 -215
  649. package/src/adapters/mysql/tools/admin/index.ts +46 -46
  650. package/src/adapters/mysql/tools/admin/maintenance.ts +180 -130
  651. package/src/adapters/mysql/tools/admin/monitoring.ts +373 -199
  652. package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +200 -186
  653. package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +399 -95
  654. package/src/adapters/mysql/tools/cluster/group-replication.ts +218 -183
  655. package/src/adapters/mysql/tools/cluster/index.ts +27 -27
  656. package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +413 -251
  657. package/src/adapters/mysql/tools/codemode/index.ts +249 -0
  658. package/src/adapters/mysql/tools/core.ts +425 -285
  659. package/src/adapters/mysql/tools/docstore.ts +478 -276
  660. package/src/adapters/mysql/tools/events.ts +441 -285
  661. package/src/adapters/mysql/tools/index.ts +31 -20
  662. package/src/adapters/mysql/tools/json/__tests__/core.test.ts +456 -199
  663. package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +554 -298
  664. package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +195 -74
  665. package/src/adapters/mysql/tools/json/__tests__/validation.test.ts +106 -72
  666. package/src/adapters/mysql/tools/json/core.ts +368 -263
  667. package/src/adapters/mysql/tools/json/enhanced.ts +368 -229
  668. package/src/adapters/mysql/tools/json/helpers.ts +205 -113
  669. package/src/adapters/mysql/tools/json/index.ts +46 -46
  670. package/src/adapters/mysql/tools/partitioning.ts +289 -140
  671. package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +664 -249
  672. package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +436 -179
  673. package/src/adapters/mysql/tools/performance/analysis.ts +319 -215
  674. package/src/adapters/mysql/tools/performance/index.ts +33 -33
  675. package/src/adapters/mysql/tools/performance/optimization.ts +438 -183
  676. package/src/adapters/mysql/tools/proxysql.ts +462 -320
  677. package/src/adapters/mysql/tools/replication.ts +233 -180
  678. package/src/adapters/mysql/tools/roles.ts +429 -171
  679. package/src/adapters/mysql/tools/router.ts +410 -292
  680. package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +157 -82
  681. package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +226 -101
  682. package/src/adapters/mysql/tools/schema/__tests__/routines.test.ts +80 -35
  683. package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +59 -40
  684. package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +65 -40
  685. package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +146 -77
  686. package/src/adapters/mysql/tools/schema/constraints.ts +61 -42
  687. package/src/adapters/mysql/tools/schema/index.ts +26 -35
  688. package/src/adapters/mysql/tools/schema/management.ts +167 -94
  689. package/src/adapters/mysql/tools/schema/routines.ts +79 -48
  690. package/src/adapters/mysql/tools/schema/scheduled_events.ts +53 -32
  691. package/src/adapters/mysql/tools/schema/triggers.ts +51 -33
  692. package/src/adapters/mysql/tools/schema/views.ts +96 -53
  693. package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +216 -158
  694. package/src/adapters/mysql/tools/security/__tests__/data-protection.test.ts +154 -98
  695. package/src/adapters/mysql/tools/security/__tests__/encryption.test.ts +174 -138
  696. package/src/adapters/mysql/tools/security/audit.ts +213 -193
  697. package/src/adapters/mysql/tools/security/data-protection.ts +342 -198
  698. package/src/adapters/mysql/tools/security/encryption.ts +233 -193
  699. package/src/adapters/mysql/tools/security/index.ts +26 -26
  700. package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +443 -283
  701. package/src/adapters/mysql/tools/shell/__tests__/common.test.ts +183 -130
  702. package/src/adapters/mysql/tools/shell/__tests__/data-transfer.test.ts +516 -353
  703. package/src/adapters/mysql/tools/shell/__tests__/info.test.ts +65 -63
  704. package/src/adapters/mysql/tools/shell/__tests__/restore.test.ts +260 -174
  705. package/src/adapters/mysql/tools/shell/__tests__/utilities.test.ts +161 -143
  706. package/src/adapters/mysql/tools/shell/backup.ts +280 -188
  707. package/src/adapters/mysql/tools/shell/common.ts +203 -153
  708. package/src/adapters/mysql/tools/shell/data-transfer.ts +286 -200
  709. package/src/adapters/mysql/tools/shell/index.ts +29 -29
  710. package/src/adapters/mysql/tools/shell/info.ts +35 -31
  711. package/src/adapters/mysql/tools/shell/restore.ts +236 -121
  712. package/src/adapters/mysql/tools/shell/utilities.ts +86 -45
  713. package/src/adapters/mysql/tools/spatial/__tests__/geometry.test.ts +129 -89
  714. package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +284 -148
  715. package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +340 -245
  716. package/src/adapters/mysql/tools/spatial/geometry.ts +120 -74
  717. package/src/adapters/mysql/tools/spatial/index.ts +33 -33
  718. package/src/adapters/mysql/tools/spatial/operations.ts +254 -171
  719. package/src/adapters/mysql/tools/spatial/queries.ts +221 -165
  720. package/src/adapters/mysql/tools/spatial/setup.ts +180 -73
  721. package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +188 -130
  722. package/src/adapters/mysql/tools/stats/comparative.ts +261 -187
  723. package/src/adapters/mysql/tools/stats/descriptive.ts +414 -322
  724. package/src/adapters/mysql/tools/stats/index.ts +23 -23
  725. package/src/adapters/mysql/tools/sysschema/__tests__/activity.test.ts +99 -71
  726. package/src/adapters/mysql/tools/sysschema/__tests__/io_summary_fix.test.ts +21 -18
  727. package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +149 -108
  728. package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +243 -104
  729. package/src/adapters/mysql/tools/sysschema/activity.ts +72 -64
  730. package/src/adapters/mysql/tools/sysschema/index.ts +24 -24
  731. package/src/adapters/mysql/tools/sysschema/performance.ts +140 -115
  732. package/src/adapters/mysql/tools/sysschema/resources.ts +140 -99
  733. package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +526 -145
  734. package/src/adapters/mysql/tools/text/__tests__/processing.test.ts +452 -193
  735. package/src/adapters/mysql/tools/text/fulltext.ts +327 -123
  736. package/src/adapters/mysql/tools/text/index.ts +32 -30
  737. package/src/adapters/mysql/tools/text/processing.ts +281 -212
  738. package/src/adapters/mysql/tools/transactions.ts +288 -197
  739. package/src/adapters/mysql/types/__tests__/shell-types.test.ts +204 -202
  740. package/src/adapters/mysql/types/proxysql-types.ts +142 -109
  741. package/src/adapters/mysql/types/router-types.ts +36 -36
  742. package/src/adapters/mysql/types/shell-types.ts +280 -94
  743. package/src/adapters/mysql/types.ts +1475 -164
  744. package/src/auth/AuthorizationServerDiscovery.ts +127 -113
  745. package/src/auth/OAuthResourceServer.ts +67 -62
  746. package/src/auth/TokenValidator.ts +136 -119
  747. package/src/auth/__tests__/AuthorizationServerDiscovery.test.ts +295 -274
  748. package/src/auth/__tests__/OAuthResourceServer.test.ts +180 -169
  749. package/src/auth/__tests__/TokenValidator.test.ts +297 -285
  750. package/src/auth/__tests__/errors.test.ts +180 -175
  751. package/src/auth/__tests__/middleware.test.ts +281 -247
  752. package/src/auth/__tests__/scopes.test.ts +136 -134
  753. package/src/auth/errors.ts +56 -56
  754. package/src/auth/index.ts +23 -17
  755. package/src/auth/middleware.ts +161 -139
  756. package/src/auth/scopes.ts +134 -107
  757. package/src/auth/types.ts +155 -155
  758. package/src/cli/__tests__/args.test.ts +241 -216
  759. package/src/cli/__tests__/main.test.ts +191 -158
  760. package/src/cli/args.ts +285 -258
  761. package/src/cli.ts +150 -127
  762. package/src/codemode/api.ts +1224 -0
  763. package/src/codemode/index.ts +51 -0
  764. package/src/codemode/sandbox-factory.ts +146 -0
  765. package/src/codemode/sandbox.ts +450 -0
  766. package/src/codemode/security.ts +188 -0
  767. package/src/codemode/types.ts +194 -0
  768. package/src/codemode/worker-sandbox.ts +326 -0
  769. package/src/codemode/worker-script.ts +144 -0
  770. package/src/constants/ServerInstructions.ts +295 -70
  771. package/src/filtering/ToolConstants.ts +311 -272
  772. package/src/filtering/ToolFilter.ts +254 -220
  773. package/src/filtering/__tests__/ToolFilter.test.ts +469 -396
  774. package/src/index.ts +62 -57
  775. package/src/logging/McpLogging.ts +128 -119
  776. package/src/logging/__tests__/McpLogging.test.ts +223 -223
  777. package/src/logging/index.ts +2 -2
  778. package/src/pool/ConnectionPool.ts +260 -246
  779. package/src/pool/__tests__/ConnectionPool.test.ts +452 -418
  780. package/src/progress/ProgressReporter.ts +123 -123
  781. package/src/progress/__tests__/ProgressReporter.test.ts +235 -229
  782. package/src/progress/index.ts +6 -2
  783. package/src/server/McpServer.ts +305 -285
  784. package/src/server/__tests__/McpServer.test.ts +333 -291
  785. package/src/transports/__tests__/http.test.ts +658 -527
  786. package/src/transports/http.ts +237 -203
  787. package/src/transports/index.ts +6 -2
  788. package/src/types/__tests__/types.test.ts +197 -193
  789. package/src/types/index.ts +49 -37
  790. package/src/types/modules/database.ts +65 -63
  791. package/src/types/modules/errors.ts +41 -37
  792. package/src/types/modules/oauth.ts +46 -46
  793. package/src/types/modules/query.ts +75 -75
  794. package/src/types/modules/server.ts +21 -18
  795. package/src/types/modules/tools.ts +182 -178
  796. package/src/utils/__tests__/logger.test.ts +424 -414
  797. package/src/utils/__tests__/validators.test.ts +250 -165
  798. package/src/utils/logger.ts +344 -330
  799. package/src/utils/promptGenerator.ts +58 -47
  800. package/src/utils/validators.ts +217 -91
  801. package/tsconfig.json +41 -50
  802. package/vitest.config.ts +23 -23
@@ -1,448 +1,482 @@
1
1
  /**
2
2
  * mysql-mcp - ConnectionPool Unit Tests
3
- *
3
+ *
4
4
  * Tests for connection pool initialization, queries, health checks,
5
5
  * and lifecycle management using mocked mysql2.
6
6
  */
7
7
 
8
- import { describe, it, expect, beforeEach, vi } from 'vitest';
9
- import { ConnectionPool } from '../ConnectionPool.js';
10
- import type { ConnectionPoolConfig } from '../ConnectionPool.js';
11
- import mysql from 'mysql2/promise';
8
+ import { describe, it, expect, beforeEach, vi } from "vitest";
9
+ import { ConnectionPool } from "../ConnectionPool.js";
10
+ import type { ConnectionPoolConfig } from "../ConnectionPool.js";
11
+ import mysql from "mysql2/promise";
12
12
 
13
13
  // Mock mysql2/promise
14
- vi.mock('mysql2/promise', () => {
15
- const mockConnection = {
16
- query: vi.fn().mockResolvedValue([[{ version: '8.0.35' }], []]),
17
- execute: vi.fn().mockResolvedValue([[{ id: 1 }], []]),
18
- release: vi.fn(),
19
- ping: vi.fn().mockResolvedValue(undefined)
20
- };
14
+ vi.mock("mysql2/promise", () => {
15
+ const mockConnection = {
16
+ query: vi.fn().mockResolvedValue([[{ version: "8.0.35" }], []]),
17
+ execute: vi.fn().mockResolvedValue([[{ id: 1 }], []]),
18
+ release: vi.fn(),
19
+ ping: vi.fn().mockResolvedValue(undefined),
20
+ };
21
+
22
+ const mockPool = {
23
+ getConnection: vi.fn().mockResolvedValue(mockConnection),
24
+ query: vi.fn().mockResolvedValue([[], []]),
25
+ execute: vi.fn().mockResolvedValue([[], []]),
26
+ end: vi.fn().mockResolvedValue(undefined),
27
+ };
28
+
29
+ return {
30
+ default: {
31
+ createPool: vi.fn().mockReturnValue(mockPool),
32
+ },
33
+ };
34
+ });
21
35
 
22
- const mockPool = {
23
- getConnection: vi.fn().mockResolvedValue(mockConnection),
24
- query: vi.fn().mockResolvedValue([[], []]),
25
- execute: vi.fn().mockResolvedValue([[], []]),
26
- end: vi.fn().mockResolvedValue(undefined)
36
+ describe("ConnectionPool", () => {
37
+ let pool: ConnectionPool;
38
+ let config: ConnectionPoolConfig;
39
+
40
+ beforeEach(() => {
41
+ vi.clearAllMocks();
42
+ config = {
43
+ host: "localhost",
44
+ port: 3306,
45
+ user: "root",
46
+ password: "root",
47
+ database: "testdb",
27
48
  };
49
+ pool = new ConnectionPool(config);
50
+ });
28
51
 
29
- return {
30
- default: {
31
- createPool: vi.fn().mockReturnValue(mockPool)
32
- }
33
- };
34
- });
52
+ describe("constructor", () => {
53
+ it("should create a pool instance", () => {
54
+ expect(pool).toBeInstanceOf(ConnectionPool);
55
+ });
35
56
 
36
- describe('ConnectionPool', () => {
37
- let pool: ConnectionPool;
38
- let config: ConnectionPoolConfig;
39
-
40
- beforeEach(() => {
41
- vi.clearAllMocks();
42
- config = {
43
- host: 'localhost',
44
- port: 3306,
45
- user: 'root',
46
- password: 'root',
47
- database: 'testdb'
48
- };
49
- pool = new ConnectionPool(config);
50
- });
51
-
52
- describe('constructor', () => {
53
- it('should create a pool instance', () => {
54
- expect(pool).toBeInstanceOf(ConnectionPool);
55
- });
56
-
57
- it('should not be initialized by default', () => {
58
- expect(pool.isInitialized()).toBe(false);
59
- });
60
-
61
- it('should not be closing by default', () => {
62
- expect(pool.isClosing()).toBe(false);
63
- });
64
- });
65
-
66
- describe('initialize', () => {
67
- it('should initialize the pool', async () => {
68
- await pool.initialize();
69
- expect(pool.isInitialized()).toBe(true);
70
- });
71
-
72
- it('should not re-initialize if already initialized', async () => {
73
- await pool.initialize();
74
- await pool.initialize(); // Should not throw
75
- expect(pool.isInitialized()).toBe(true);
76
- });
77
- });
78
-
79
- describe('getConnection', () => {
80
- it('should throw if pool not initialized', async () => {
81
- await expect(pool.getConnection()).rejects.toThrow('Connection pool not initialized');
82
- });
83
-
84
- it('should return a connection after initialization', async () => {
85
- await pool.initialize();
86
- const connection = await pool.getConnection();
87
- expect(connection).toBeDefined();
88
- });
89
-
90
- it('should throw if pool is shutting down', async () => {
91
- await pool.initialize();
92
- await pool.shutdown();
93
- await expect(pool.getConnection()).rejects.toThrow();
94
- });
95
- });
96
-
97
- describe('query', () => {
98
- it('should throw if pool not initialized', async () => {
99
- await expect(pool.query('SELECT 1')).rejects.toThrow('Connection pool not initialized');
100
- });
101
-
102
- it('should execute queries after initialization', async () => {
103
- await pool.initialize();
104
- const [rows, _fields] = await pool.query('SELECT 1');
105
- expect(rows).toBeDefined();
106
- });
107
-
108
- it('should track query count', async () => {
109
- await pool.initialize();
110
- await pool.query('SELECT 1');
111
- await pool.query('SELECT 2');
112
- const stats = pool.getStats();
113
- expect(stats.totalQueries).toBe(2);
114
- });
115
- });
116
-
117
- describe('execute', () => {
118
- it('should throw if pool not initialized', async () => {
119
- await expect(pool.execute('SELECT ?', [1])).rejects.toThrow('Connection pool not initialized');
120
- });
121
-
122
- it('should execute prepared statements after initialization', async () => {
123
- await pool.initialize();
124
- const [rows, _fields] = await pool.execute('SELECT ?', [1]);
125
- expect(rows).toBeDefined();
126
- });
127
-
128
- it('should track query count for execute', async () => {
129
- await pool.initialize();
130
- await pool.execute('SELECT 1');
131
- const stats = pool.getStats();
132
- expect(stats.totalQueries).toBe(1);
133
- });
134
- });
135
-
136
- describe('getStats', () => {
137
- it('should return stats even before initialization', () => {
138
- const stats = pool.getStats();
139
- expect(stats).toHaveProperty('total');
140
- expect(stats).toHaveProperty('active');
141
- expect(stats).toHaveProperty('idle');
142
- expect(stats).toHaveProperty('waiting');
143
- expect(stats).toHaveProperty('totalQueries');
144
- });
145
-
146
- it('should track active connections', async () => {
147
- await pool.initialize();
148
- const _conn = await pool.getConnection();
149
- const stats = pool.getStats();
150
- expect(stats.active).toBe(1);
151
- });
152
- });
153
-
154
- describe('releaseConnection', () => {
155
- it('should decrease active count', async () => {
156
- await pool.initialize();
157
- const conn = await pool.getConnection();
158
- expect(pool.getStats().active).toBe(1);
159
- pool.releaseConnection(conn);
160
- expect(pool.getStats().active).toBe(0);
161
- });
162
-
163
- it('should not go below 0 active connections', async () => {
164
- await pool.initialize();
165
- const conn = await pool.getConnection();
166
- pool.releaseConnection(conn);
167
- pool.releaseConnection(conn); // Release twice
168
- expect(pool.getStats().active).toBe(0);
169
- });
170
- });
171
-
172
- describe('checkHealth', () => {
173
- it('should return unhealthy if not initialized', async () => {
174
- const health = await pool.checkHealth();
175
- expect(health.connected).toBe(false);
176
- expect(health.error).toContain('not initialized');
177
- });
178
-
179
- it('should return healthy after initialization', async () => {
180
- await pool.initialize();
181
- const health = await pool.checkHealth();
182
- expect(health.connected).toBe(true);
183
- expect(health.latencyMs).toBeDefined();
184
- expect(health.version).toBe('8.0.35');
185
- });
186
-
187
- it('should include pool stats in health check', async () => {
188
- await pool.initialize();
189
- const health = await pool.checkHealth();
190
- expect(health.poolStats).toBeDefined();
191
- });
192
- });
193
-
194
- describe('shutdown', () => {
195
- it('should do nothing if not initialized', async () => {
196
- await pool.shutdown(); // Should not throw
197
- expect(pool.isInitialized()).toBe(false);
198
- });
199
-
200
- it('should shutdown the pool', async () => {
201
- await pool.initialize();
202
- expect(pool.isInitialized()).toBe(true);
203
- await pool.shutdown();
204
- expect(pool.isClosing()).toBe(true);
205
- });
206
- });
207
-
208
- describe('isInitialized', () => {
209
- it('should return false before initialization', () => {
210
- expect(pool.isInitialized()).toBe(false);
211
- });
212
-
213
- it('should return true after initialization', async () => {
214
- await pool.initialize();
215
- expect(pool.isInitialized()).toBe(true);
216
- });
217
- });
218
-
219
- describe('isClosing', () => {
220
- it('should return false initially', () => {
221
- expect(pool.isClosing()).toBe(false);
222
- });
223
-
224
- it('should return true after shutdown starts', async () => {
225
- await pool.initialize();
226
- await pool.shutdown();
227
- expect(pool.isClosing()).toBe(true);
228
- });
57
+ it("should not be initialized by default", () => {
58
+ expect(pool.isInitialized()).toBe(false);
59
+ });
60
+
61
+ it("should not be closing by default", () => {
62
+ expect(pool.isClosing()).toBe(false);
63
+ });
64
+ });
65
+
66
+ describe("initialize", () => {
67
+ it("should initialize the pool", async () => {
68
+ await pool.initialize();
69
+ expect(pool.isInitialized()).toBe(true);
70
+ });
71
+
72
+ it("should not re-initialize if already initialized", async () => {
73
+ await pool.initialize();
74
+ await pool.initialize(); // Should not throw
75
+ expect(pool.isInitialized()).toBe(true);
76
+ });
77
+ });
78
+
79
+ describe("getConnection", () => {
80
+ it("should throw if pool not initialized", async () => {
81
+ await expect(pool.getConnection()).rejects.toThrow(
82
+ "Connection pool not initialized",
83
+ );
84
+ });
85
+
86
+ it("should return a connection after initialization", async () => {
87
+ await pool.initialize();
88
+ const connection = await pool.getConnection();
89
+ expect(connection).toBeDefined();
90
+ });
91
+
92
+ it("should throw if pool is shutting down", async () => {
93
+ await pool.initialize();
94
+ await pool.shutdown();
95
+ await expect(pool.getConnection()).rejects.toThrow();
96
+ });
97
+ });
98
+
99
+ describe("query", () => {
100
+ it("should throw if pool not initialized", async () => {
101
+ await expect(pool.query("SELECT 1")).rejects.toThrow(
102
+ "Connection pool not initialized",
103
+ );
104
+ });
105
+
106
+ it("should execute queries after initialization", async () => {
107
+ await pool.initialize();
108
+ const [rows, _fields] = await pool.query("SELECT 1");
109
+ expect(rows).toBeDefined();
110
+ });
111
+
112
+ it("should track query count", async () => {
113
+ await pool.initialize();
114
+ await pool.query("SELECT 1");
115
+ await pool.query("SELECT 2");
116
+ const stats = pool.getStats();
117
+ expect(stats.totalQueries).toBe(2);
118
+ });
119
+ });
120
+
121
+ describe("execute", () => {
122
+ it("should throw if pool not initialized", async () => {
123
+ await expect(pool.execute("SELECT ?", [1])).rejects.toThrow(
124
+ "Connection pool not initialized",
125
+ );
126
+ });
127
+
128
+ it("should execute prepared statements after initialization", async () => {
129
+ await pool.initialize();
130
+ const [rows, _fields] = await pool.execute("SELECT ?", [1]);
131
+ expect(rows).toBeDefined();
132
+ });
133
+
134
+ it("should track query count for execute", async () => {
135
+ await pool.initialize();
136
+ await pool.execute("SELECT 1");
137
+ const stats = pool.getStats();
138
+ expect(stats.totalQueries).toBe(1);
139
+ });
140
+ });
141
+
142
+ describe("getStats", () => {
143
+ it("should return stats even before initialization", () => {
144
+ const stats = pool.getStats();
145
+ expect(stats).toHaveProperty("total");
146
+ expect(stats).toHaveProperty("active");
147
+ expect(stats).toHaveProperty("idle");
148
+ expect(stats).toHaveProperty("waiting");
149
+ expect(stats).toHaveProperty("totalQueries");
150
+ });
151
+
152
+ it("should track active connections", async () => {
153
+ await pool.initialize();
154
+ const _conn = await pool.getConnection();
155
+ const stats = pool.getStats();
156
+ expect(stats.active).toBe(1);
157
+ });
158
+ });
159
+
160
+ describe("releaseConnection", () => {
161
+ it("should decrease active count", async () => {
162
+ await pool.initialize();
163
+ const conn = await pool.getConnection();
164
+ expect(pool.getStats().active).toBe(1);
165
+ pool.releaseConnection(conn);
166
+ expect(pool.getStats().active).toBe(0);
229
167
  });
230
- });
231
168
 
232
- describe('ConnectionPool with SSL', () => {
233
- it('should handle boolean SSL config', async () => {
234
- const pool = new ConnectionPool({
235
- host: 'localhost',
236
- port: 3306,
237
- user: 'root',
238
- password: 'root',
239
- database: 'testdb',
240
- ssl: true
241
- });
242
- await pool.initialize();
243
- expect(pool.isInitialized()).toBe(true);
244
- });
245
-
246
- it('should handle boolean SSL config false', async () => {
247
- const pool = new ConnectionPool({
248
- host: 'localhost',
249
- port: 3306,
250
- user: 'root',
251
- password: 'root',
252
- database: 'testdb',
253
- ssl: false
254
- });
255
- await pool.initialize();
256
- expect(pool.isInitialized()).toBe(true);
257
- });
258
-
259
- it('should handle SSL options config', async () => {
260
- const pool = new ConnectionPool({
261
- host: 'localhost',
262
- port: 3306,
263
- user: 'root',
264
- password: 'root',
265
- database: 'testdb',
266
- ssl: { rejectUnauthorized: false }
267
- });
268
- await pool.initialize();
269
- expect(pool.isInitialized()).toBe(true);
169
+ it("should not go below 0 active connections", async () => {
170
+ await pool.initialize();
171
+ const conn = await pool.getConnection();
172
+ pool.releaseConnection(conn);
173
+ pool.releaseConnection(conn); // Release twice
174
+ expect(pool.getStats().active).toBe(0);
270
175
  });
176
+ });
177
+
178
+ describe("checkHealth", () => {
179
+ it("should return unhealthy if not initialized", async () => {
180
+ const health = await pool.checkHealth();
181
+ expect(health.connected).toBe(false);
182
+ expect(health.error).toContain("not initialized");
183
+ });
184
+
185
+ it("should return healthy after initialization", async () => {
186
+ await pool.initialize();
187
+ const health = await pool.checkHealth();
188
+ expect(health.connected).toBe(true);
189
+ expect(health.latencyMs).toBeDefined();
190
+ expect(health.version).toBe("8.0.35");
191
+ });
192
+
193
+ it("should include pool stats in health check", async () => {
194
+ await pool.initialize();
195
+ const health = await pool.checkHealth();
196
+ expect(health.poolStats).toBeDefined();
197
+ });
198
+ });
199
+
200
+ describe("shutdown", () => {
201
+ it("should do nothing if not initialized", async () => {
202
+ await pool.shutdown(); // Should not throw
203
+ expect(pool.isInitialized()).toBe(false);
204
+ });
205
+
206
+ it("should shutdown the pool", async () => {
207
+ await pool.initialize();
208
+ expect(pool.isInitialized()).toBe(true);
209
+ await pool.shutdown();
210
+ expect(pool.isClosing()).toBe(true);
211
+ });
212
+ });
213
+
214
+ describe("isInitialized", () => {
215
+ it("should return false before initialization", () => {
216
+ expect(pool.isInitialized()).toBe(false);
217
+ });
218
+
219
+ it("should return true after initialization", async () => {
220
+ await pool.initialize();
221
+ expect(pool.isInitialized()).toBe(true);
222
+ });
223
+ });
224
+
225
+ describe("isClosing", () => {
226
+ it("should return false initially", () => {
227
+ expect(pool.isClosing()).toBe(false);
228
+ });
229
+
230
+ it("should return true after shutdown starts", async () => {
231
+ await pool.initialize();
232
+ await pool.shutdown();
233
+ expect(pool.isClosing()).toBe(true);
234
+ });
235
+ });
271
236
  });
272
237
 
273
- describe('ConnectionPool with custom pool config', () => {
274
- it('should apply custom connection limit', async () => {
275
- const pool = new ConnectionPool({
276
- host: 'localhost',
277
- port: 3306,
278
- user: 'root',
279
- password: 'root',
280
- database: 'testdb',
281
- pool: {
282
- connectionLimit: 20,
283
- waitForConnections: true,
284
- queueLimit: 10
285
- }
286
- });
287
- await pool.initialize();
288
- const stats = pool.getStats();
289
- expect(stats.total).toBe(20);
238
+ describe("ConnectionPool with SSL", () => {
239
+ it("should handle boolean SSL config", async () => {
240
+ const pool = new ConnectionPool({
241
+ host: "localhost",
242
+ port: 3306,
243
+ user: "root",
244
+ password: "root",
245
+ database: "testdb",
246
+ ssl: true,
247
+ });
248
+ await pool.initialize();
249
+ expect(pool.isInitialized()).toBe(true);
250
+ });
251
+
252
+ it("should handle boolean SSL config false", async () => {
253
+ const pool = new ConnectionPool({
254
+ host: "localhost",
255
+ port: 3306,
256
+ user: "root",
257
+ password: "root",
258
+ database: "testdb",
259
+ ssl: false,
290
260
  });
261
+ await pool.initialize();
262
+ expect(pool.isInitialized()).toBe(true);
263
+ });
264
+
265
+ it("should handle SSL options config", async () => {
266
+ const pool = new ConnectionPool({
267
+ host: "localhost",
268
+ port: 3306,
269
+ user: "root",
270
+ password: "root",
271
+ database: "testdb",
272
+ ssl: { rejectUnauthorized: false },
273
+ });
274
+ await pool.initialize();
275
+ expect(pool.isInitialized()).toBe(true);
276
+ });
291
277
  });
292
278
 
293
- describe('ConnectionPool Error Handling', () => {
294
- it('should handle initialization failure', async () => {
295
- const createPoolSpy = vi.spyOn(mysql, 'createPool');
296
- createPoolSpy.mockImplementationOnce(() => {
297
- throw new Error('Connection refused');
298
- });
299
-
300
- const pool = new ConnectionPool({
301
- host: 'localhost',
302
- port: 3306,
303
- user: 'root',
304
- password: 'root',
305
- database: 'testdb'
306
- });
307
-
308
- await expect(pool.initialize()).rejects.toThrow('Failed to initialize connection pool');
279
+ describe("ConnectionPool with custom pool config", () => {
280
+ it("should apply custom connection limit", async () => {
281
+ const pool = new ConnectionPool({
282
+ host: "localhost",
283
+ port: 3306,
284
+ user: "root",
285
+ password: "root",
286
+ database: "testdb",
287
+ pool: {
288
+ connectionLimit: 20,
289
+ waitForConnections: true,
290
+ queueLimit: 10,
291
+ },
309
292
  });
293
+ await pool.initialize();
294
+ const stats = pool.getStats();
295
+ expect(stats.total).toBe(20);
296
+ });
297
+ });
310
298
 
311
- it('should fail if pool not initialized', async () => {
312
- const pool = new ConnectionPool({
313
- host: 'localhost',
314
- port: 3306,
315
- user: 'root',
316
- password: 'root',
317
- database: 'testdb'
318
- });
319
-
320
- // Skip initialize
321
-
322
- await expect(pool.getConnection()).rejects.toThrow('Connection pool not initialized');
323
- await expect(pool.query('SELECT 1')).rejects.toThrow('Connection pool not initialized');
324
- await expect(pool.execute('SELECT 1')).rejects.toThrow('Connection pool not initialized');
325
- });
326
-
327
- it('should handle getConnection failure', async () => {
328
- const pool = new ConnectionPool({
329
- host: 'localhost',
330
- port: 3306,
331
- user: 'root',
332
- password: 'root',
333
- database: 'testdb'
334
- });
335
- await pool.initialize();
336
-
337
- // Spy on the internal pool's getConnection
338
- // We cast to any to access the private pool property or just rely on the mock factory
339
- const internalPool = (pool as any).pool;
340
- vi.spyOn(internalPool, 'getConnection').mockRejectedValueOnce(new Error('Pool exhausted'));
341
-
342
- await expect(pool.getConnection()).rejects.toThrow('Failed to get connection: Pool exhausted');
343
- });
344
-
345
- it('should handle query failure', async () => {
346
- const pool = new ConnectionPool({
347
- host: 'localhost',
348
- port: 3306,
349
- user: 'root',
350
- password: 'root',
351
- database: 'testdb'
352
- });
353
- await pool.initialize();
354
-
355
- const internalPool = (pool as any).pool;
356
- vi.spyOn(internalPool, 'query').mockRejectedValueOnce(new Error('Query failed'));
357
-
358
- await expect(pool.query('SELECT 1')).rejects.toThrow('Query failed: Query failed');
359
- });
360
-
361
- it('should handle execute failure', async () => {
362
- const pool = new ConnectionPool({
363
- host: 'localhost',
364
- port: 3306,
365
- user: 'root',
366
- password: 'root',
367
- database: 'testdb'
368
- });
369
- await pool.initialize();
370
-
371
- const internalPool = (pool as any).pool;
372
- vi.spyOn(internalPool, 'execute').mockRejectedValueOnce(new Error('Execution failed'));
373
-
374
- await expect(pool.execute('UPDATE users SET name = ?', ['test'])).rejects.toThrow('Execute failed: Execution failed');
375
- });
376
-
377
- it('should fail if shutting down', async () => {
378
- const pool = new ConnectionPool({
379
- host: 'localhost',
380
- port: 3306,
381
- user: 'root',
382
- password: 'root',
383
- database: 'testdb'
384
- });
385
- await pool.initialize();
386
-
387
- // Force shutting down state
388
- (pool as any).isShuttingDown = true;
389
-
390
- await expect(pool.getConnection()).rejects.toThrow('Connection pool is shutting down');
391
- await expect(pool.getConnection()).rejects.toThrow('Connection pool is shutting down');
392
- });
393
-
394
- it('should handle shutdown failure', async () => {
395
- const pool = new ConnectionPool({
396
- host: 'localhost',
397
- port: 3306,
398
- user: 'root',
399
- password: 'root',
400
- database: 'testdb'
401
- });
402
- await pool.initialize();
403
-
404
- const internalPool = (pool as any).pool;
405
- vi.spyOn(internalPool, 'end').mockRejectedValueOnce(new Error('Forced error'));
299
+ describe("ConnectionPool Error Handling", () => {
300
+ it("should handle initialization failure", async () => {
301
+ const createPoolSpy = vi.spyOn(mysql, "createPool");
302
+ createPoolSpy.mockImplementationOnce(() => {
303
+ throw new Error("Connection refused");
304
+ });
406
305
 
407
- await expect(pool.shutdown()).rejects.toThrow('Forced error');
408
- });
306
+ const pool = new ConnectionPool({
307
+ host: "localhost",
308
+ port: 3306,
309
+ user: "root",
310
+ password: "root",
311
+ database: "testdb",
312
+ });
409
313
 
410
- it('should handle releaseConnection failure', async () => {
411
- const pool = new ConnectionPool({
412
- host: 'localhost',
413
- port: 3306,
414
- user: 'root',
415
- password: 'root',
416
- database: 'testdb'
417
- });
418
- await pool.initialize();
314
+ await expect(pool.initialize()).rejects.toThrow(
315
+ "Failed to initialize connection pool",
316
+ );
317
+ });
318
+
319
+ it("should fail if pool not initialized", async () => {
320
+ const pool = new ConnectionPool({
321
+ host: "localhost",
322
+ port: 3306,
323
+ user: "root",
324
+ password: "root",
325
+ database: "testdb",
326
+ });
419
327
 
420
- const connection = await pool.getConnection();
328
+ // Skip initialize
329
+
330
+ await expect(pool.getConnection()).rejects.toThrow(
331
+ "Connection pool not initialized",
332
+ );
333
+ await expect(pool.query("SELECT 1")).rejects.toThrow(
334
+ "Connection pool not initialized",
335
+ );
336
+ await expect(pool.execute("SELECT 1")).rejects.toThrow(
337
+ "Connection pool not initialized",
338
+ );
339
+ });
340
+
341
+ it("should handle getConnection failure", async () => {
342
+ const pool = new ConnectionPool({
343
+ host: "localhost",
344
+ port: 3306,
345
+ user: "root",
346
+ password: "root",
347
+ database: "testdb",
348
+ });
349
+ await pool.initialize();
350
+
351
+ // Spy on the internal pool's getConnection
352
+ // We cast to any to access the private pool property or just rely on the mock factory
353
+ const internalPool = (pool as any).pool;
354
+ vi.spyOn(internalPool, "getConnection").mockRejectedValueOnce(
355
+ new Error("Pool exhausted"),
356
+ );
357
+
358
+ await expect(pool.getConnection()).rejects.toThrow(
359
+ "Failed to get connection: Pool exhausted",
360
+ );
361
+ });
362
+
363
+ it("should handle query failure", async () => {
364
+ const pool = new ConnectionPool({
365
+ host: "localhost",
366
+ port: 3306,
367
+ user: "root",
368
+ password: "root",
369
+ database: "testdb",
370
+ });
371
+ await pool.initialize();
372
+
373
+ const internalPool = (pool as any).pool;
374
+ vi.spyOn(internalPool, "query").mockRejectedValueOnce(
375
+ new Error("Query failed"),
376
+ );
377
+
378
+ await expect(pool.query("SELECT 1")).rejects.toThrow(
379
+ "Query failed: Query failed",
380
+ );
381
+ });
382
+
383
+ it("should handle execute failure", async () => {
384
+ const pool = new ConnectionPool({
385
+ host: "localhost",
386
+ port: 3306,
387
+ user: "root",
388
+ password: "root",
389
+ database: "testdb",
390
+ });
391
+ await pool.initialize();
392
+
393
+ const internalPool = (pool as any).pool;
394
+ vi.spyOn(internalPool, "execute").mockRejectedValueOnce(
395
+ new Error("Execution failed"),
396
+ );
397
+
398
+ await expect(
399
+ pool.execute("UPDATE users SET name = ?", ["test"]),
400
+ ).rejects.toThrow("Execute failed: Execution failed");
401
+ });
402
+
403
+ it("should fail if shutting down", async () => {
404
+ const pool = new ConnectionPool({
405
+ host: "localhost",
406
+ port: 3306,
407
+ user: "root",
408
+ password: "root",
409
+ database: "testdb",
410
+ });
411
+ await pool.initialize();
412
+
413
+ // Force shutting down state
414
+ (pool as any).isShuttingDown = true;
415
+
416
+ await expect(pool.getConnection()).rejects.toThrow(
417
+ "Connection pool is shutting down",
418
+ );
419
+ await expect(pool.getConnection()).rejects.toThrow(
420
+ "Connection pool is shutting down",
421
+ );
422
+ });
423
+
424
+ it("should handle shutdown failure", async () => {
425
+ const pool = new ConnectionPool({
426
+ host: "localhost",
427
+ port: 3306,
428
+ user: "root",
429
+ password: "root",
430
+ database: "testdb",
431
+ });
432
+ await pool.initialize();
433
+
434
+ const internalPool = (pool as any).pool;
435
+ vi.spyOn(internalPool, "end").mockRejectedValueOnce(
436
+ new Error("Forced error"),
437
+ );
438
+
439
+ await expect(pool.shutdown()).rejects.toThrow("Forced error");
440
+ });
441
+
442
+ it("should handle releaseConnection failure", async () => {
443
+ const pool = new ConnectionPool({
444
+ host: "localhost",
445
+ port: 3306,
446
+ user: "root",
447
+ password: "root",
448
+ database: "testdb",
449
+ });
450
+ await pool.initialize();
421
451
 
422
- // Mock release to throw
423
- vi.spyOn(connection, 'release').mockImplementationOnce(() => {
424
- throw new Error('Release failed');
425
- });
426
-
427
- // Should not throw, but log error
428
- pool.releaseConnection(connection);
429
- });
430
-
431
- it('should handle checkHealth failure', async () => {
432
- const pool = new ConnectionPool({
433
- host: 'localhost',
434
- port: 3306,
435
- user: 'root',
436
- password: 'root',
437
- database: 'testdb'
438
- });
439
- await pool.initialize();
452
+ const connection = await pool.getConnection();
440
453
 
441
- const internalPool = (pool as any).pool;
442
- vi.spyOn(internalPool, 'getConnection').mockRejectedValueOnce(new Error('Health check failed'));
454
+ // Mock release to throw
455
+ vi.spyOn(connection, "release").mockImplementationOnce(() => {
456
+ throw new Error("Release failed");
457
+ });
443
458
 
444
- const health = await pool.checkHealth();
445
- expect(health.connected).toBe(false);
446
- expect(health.error).toContain('Health check failed');
459
+ // Should not throw, but log error
460
+ pool.releaseConnection(connection);
461
+ });
462
+
463
+ it("should handle checkHealth failure", async () => {
464
+ const pool = new ConnectionPool({
465
+ host: "localhost",
466
+ port: 3306,
467
+ user: "root",
468
+ password: "root",
469
+ database: "testdb",
447
470
  });
471
+ await pool.initialize();
472
+
473
+ const internalPool = (pool as any).pool;
474
+ vi.spyOn(internalPool, "getConnection").mockRejectedValueOnce(
475
+ new Error("Health check failed"),
476
+ );
477
+
478
+ const health = await pool.checkHealth();
479
+ expect(health.connected).toBe(false);
480
+ expect(health.error).toContain("Health check failed");
481
+ });
448
482
  });