@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,441 +1,519 @@
1
1
  /**
2
2
  * mysql-mcp - DatabaseAdapter Unit Tests
3
- *
3
+ *
4
4
  * Tests for the abstract DatabaseAdapter base class methods.
5
5
  */
6
6
 
7
- import { describe, it, expect, vi, beforeEach } from 'vitest';
8
- import { DatabaseAdapter } from '../DatabaseAdapter.js';
9
- import type { DatabaseConfig, QueryResult, HealthStatus, SchemaInfo, TableInfo, AdapterCapabilities, ToolDefinition, ResourceDefinition, PromptDefinition, ToolGroup } from '../../types/index.js';
7
+ import { describe, it, expect, vi, beforeEach } from "vitest";
8
+ import { DatabaseAdapter } from "../DatabaseAdapter.js";
9
+ import type {
10
+ DatabaseConfig,
11
+ QueryResult,
12
+ HealthStatus,
13
+ SchemaInfo,
14
+ TableInfo,
15
+ AdapterCapabilities,
16
+ ToolDefinition,
17
+ ResourceDefinition,
18
+ PromptDefinition,
19
+ ToolGroup,
20
+ } from "../../types/index.js";
10
21
 
11
22
  // Create a concrete implementation for testing
12
23
  class TestAdapter extends DatabaseAdapter {
13
- readonly type = 'mysql' as const;
14
- readonly name = 'Test Adapter';
15
- readonly version = '1.0.0';
16
-
17
- private mockQueryResult: QueryResult = { rows: [], rowsAffected: 0 };
18
- private mockHealth: HealthStatus = { connected: true, latencyMs: 5 };
19
-
20
- async connect(_config: DatabaseConfig): Promise<void> {
21
- this.connected = true;
22
- }
23
-
24
- async disconnect(): Promise<void> {
25
- this.connected = false;
26
- }
27
-
28
- async getHealth(): Promise<HealthStatus> {
29
- return this.mockHealth;
30
- }
31
-
32
- async executeReadQuery(_sql: string, _params?: unknown[]): Promise<QueryResult> {
33
- return this.mockQueryResult;
34
- }
35
-
36
- async executeWriteQuery(_sql: string, _params?: unknown[]): Promise<QueryResult> {
37
- return this.mockQueryResult;
38
- }
39
-
40
- async executeQuery(_sql: string, _params?: unknown[]): Promise<QueryResult> {
41
- return this.mockQueryResult;
42
- }
43
-
44
- async getSchema(): Promise<SchemaInfo> {
45
- return { tables: [], views: [], indexes: [] };
46
- }
47
-
48
- async listTables(): Promise<TableInfo[]> {
49
- return [];
50
- }
51
-
52
- async describeTable(_tableName: string): Promise<TableInfo> {
53
- return { name: 'test', type: 'table', columns: [] };
54
- }
55
-
56
- async listSchemas(): Promise<string[]> {
57
- return ['test'];
58
- }
59
-
60
- getCapabilities(): AdapterCapabilities {
61
- return {
62
- json: true,
63
- fullTextSearch: true,
64
- vector: false,
65
- geospatial: true,
66
- transactions: true,
67
- preparedStatements: true,
68
- connectionPooling: true,
69
- partitioning: true,
70
- replication: true
71
- };
72
- }
24
+ readonly type = "mysql" as const;
25
+ readonly name = "Test Adapter";
26
+ readonly version = "1.0.0";
27
+
28
+ private mockQueryResult: QueryResult = { rows: [], rowsAffected: 0 };
29
+ private mockHealth: HealthStatus = { connected: true, latencyMs: 5 };
30
+
31
+ async connect(_config: DatabaseConfig): Promise<void> {
32
+ this.connected = true;
33
+ }
34
+
35
+ async disconnect(): Promise<void> {
36
+ this.connected = false;
37
+ }
38
+
39
+ async getHealth(): Promise<HealthStatus> {
40
+ return this.mockHealth;
41
+ }
42
+
43
+ async executeReadQuery(
44
+ _sql: string,
45
+ _params?: unknown[],
46
+ ): Promise<QueryResult> {
47
+ return this.mockQueryResult;
48
+ }
49
+
50
+ async executeWriteQuery(
51
+ _sql: string,
52
+ _params?: unknown[],
53
+ ): Promise<QueryResult> {
54
+ return this.mockQueryResult;
55
+ }
56
+
57
+ async executeQuery(_sql: string, _params?: unknown[]): Promise<QueryResult> {
58
+ return this.mockQueryResult;
59
+ }
60
+
61
+ async getSchema(): Promise<SchemaInfo> {
62
+ return { tables: [], views: [], indexes: [] };
63
+ }
64
+
65
+ async listTables(): Promise<TableInfo[]> {
66
+ return [];
67
+ }
68
+
69
+ async describeTable(_tableName: string): Promise<TableInfo> {
70
+ return { name: "test", type: "table", columns: [] };
71
+ }
72
+
73
+ async listSchemas(): Promise<string[]> {
74
+ return ["test"];
75
+ }
76
+
77
+ getCapabilities(): AdapterCapabilities {
78
+ return {
79
+ json: true,
80
+ fullTextSearch: true,
81
+ vector: false,
82
+ geospatial: true,
83
+ transactions: true,
84
+ preparedStatements: true,
85
+ connectionPooling: true,
86
+ partitioning: true,
87
+ replication: true,
88
+ };
89
+ }
90
+
91
+ getSupportedToolGroups(): ToolGroup[] {
92
+ return ["core", "transactions"];
93
+ }
94
+
95
+ getToolDefinitions(): ToolDefinition[] {
96
+ return [
97
+ {
98
+ name: "test_tool",
99
+ title: "Test Tool",
100
+ description: "A test tool",
101
+ group: "core",
102
+ inputSchema: {},
103
+ handler: async () => ({ result: "ok" }),
104
+ },
105
+ ];
106
+ }
107
+
108
+ getResourceDefinitions(): ResourceDefinition[] {
109
+ return [
110
+ {
111
+ uri: "mysql://test",
112
+ name: "Test Resource",
113
+ description: "A test resource",
114
+ handler: async () => ({ data: "test" }),
115
+ },
116
+ ];
117
+ }
118
+
119
+ getPromptDefinitions(): PromptDefinition[] {
120
+ return [
121
+ {
122
+ name: "test_prompt",
123
+ description: "A test prompt",
124
+ handler: async () => "Test prompt output",
125
+ },
126
+ ];
127
+ }
128
+
129
+ setQueryResult(result: QueryResult): void {
130
+ this.mockQueryResult = result;
131
+ }
132
+ }
73
133
 
74
- getSupportedToolGroups(): ToolGroup[] {
75
- return ['core', 'transactions'];
76
- }
134
+ describe("DatabaseAdapter", () => {
135
+ let adapter: TestAdapter;
77
136
 
78
- getToolDefinitions(): ToolDefinition[] {
79
- return [
80
- {
81
- name: 'test_tool',
82
- title: 'Test Tool',
83
- description: 'A test tool',
84
- group: 'core',
85
- inputSchema: {},
86
- handler: async () => ({ result: 'ok' })
87
- }
88
- ];
89
- }
90
-
91
- getResourceDefinitions(): ResourceDefinition[] {
92
- return [
93
- {
94
- uri: 'mysql://test',
95
- name: 'Test Resource',
96
- description: 'A test resource',
97
- handler: async () => ({ data: 'test' })
98
- }
99
- ];
100
- }
101
-
102
- getPromptDefinitions(): PromptDefinition[] {
103
- return [
104
- {
105
- name: 'test_prompt',
106
- description: 'A test prompt',
107
- handler: async () => 'Test prompt output'
108
- }
109
- ];
110
- }
111
-
112
- setQueryResult(result: QueryResult): void {
113
- this.mockQueryResult = result;
114
- }
115
- }
137
+ beforeEach(() => {
138
+ adapter = new TestAdapter();
139
+ });
116
140
 
117
- describe('DatabaseAdapter', () => {
118
- let adapter: TestAdapter;
141
+ describe("connection state", () => {
142
+ it("should start disconnected", () => {
143
+ expect(adapter.isConnected()).toBe(false);
144
+ });
119
145
 
120
- beforeEach(() => {
121
- adapter = new TestAdapter();
146
+ it("should be connected after connect()", async () => {
147
+ await adapter.connect({
148
+ type: "mysql",
149
+ host: "localhost",
150
+ port: 3306,
151
+ database: "test",
152
+ username: "root",
153
+ password: "",
154
+ });
155
+ expect(adapter.isConnected()).toBe(true);
122
156
  });
123
157
 
124
- describe('connection state', () => {
125
- it('should start disconnected', () => {
126
- expect(adapter.isConnected()).toBe(false);
127
- });
158
+ it("should be disconnected after disconnect()", async () => {
159
+ await adapter.connect({
160
+ type: "mysql",
161
+ host: "localhost",
162
+ port: 3306,
163
+ database: "test",
164
+ username: "root",
165
+ password: "",
166
+ });
167
+ await adapter.disconnect();
168
+ expect(adapter.isConnected()).toBe(false);
169
+ });
170
+ });
128
171
 
129
- it('should be connected after connect()', async () => {
130
- await adapter.connect({ type: 'mysql', host: 'localhost', port: 3306, database: 'test', username: 'root', password: '' });
131
- expect(adapter.isConnected()).toBe(true);
132
- });
172
+ describe("adapter info", () => {
173
+ it("should return correct type", () => {
174
+ expect(adapter.type).toBe("mysql");
175
+ });
133
176
 
134
- it('should be disconnected after disconnect()', async () => {
135
- await adapter.connect({ type: 'mysql', host: 'localhost', port: 3306, database: 'test', username: 'root', password: '' });
136
- await adapter.disconnect();
137
- expect(adapter.isConnected()).toBe(false);
138
- });
177
+ it("should return correct name", () => {
178
+ expect(adapter.name).toBe("Test Adapter");
139
179
  });
140
180
 
141
- describe('adapter info', () => {
142
- it('should return correct type', () => {
143
- expect(adapter.type).toBe('mysql');
144
- });
181
+ it("should return correct version", () => {
182
+ expect(adapter.version).toBe("1.0.0");
183
+ });
145
184
 
146
- it('should return correct name', () => {
147
- expect(adapter.name).toBe('Test Adapter');
148
- });
185
+ it("should return adapter info object", () => {
186
+ const info = adapter.getInfo();
187
+ expect(info["type"]).toBe("mysql");
188
+ expect(info["name"]).toBe("Test Adapter");
189
+ expect(info["version"]).toBe("1.0.0");
190
+ expect(info["connected"]).toBe(false);
191
+ });
192
+ });
193
+
194
+ describe("capabilities", () => {
195
+ it("should return capabilities", () => {
196
+ const caps = adapter.getCapabilities();
197
+ expect(caps.json).toBe(true);
198
+ expect(caps.fullTextSearch).toBe(true);
199
+ expect(caps.transactions).toBe(true);
200
+ });
149
201
 
150
- it('should return correct version', () => {
151
- expect(adapter.version).toBe('1.0.0');
152
- });
202
+ it("should return supported tool groups", () => {
203
+ const groups = adapter.getSupportedToolGroups();
204
+ expect(groups).toContain("core");
205
+ expect(groups).toContain("transactions");
206
+ });
207
+ });
153
208
 
154
- it('should return adapter info object', () => {
155
- const info = adapter.getInfo();
156
- expect(info['type']).toBe('mysql');
157
- expect(info['name']).toBe('Test Adapter');
158
- expect(info['version']).toBe('1.0.0');
159
- expect(info['connected']).toBe(false);
160
- });
209
+ describe("definitions", () => {
210
+ it("should return tool definitions", () => {
211
+ const tools = adapter.getToolDefinitions();
212
+ expect(tools.length).toBeGreaterThan(0);
213
+ expect(tools[0]?.name).toBe("test_tool");
161
214
  });
162
215
 
163
- describe('capabilities', () => {
164
- it('should return capabilities', () => {
165
- const caps = adapter.getCapabilities();
166
- expect(caps.json).toBe(true);
167
- expect(caps.fullTextSearch).toBe(true);
168
- expect(caps.transactions).toBe(true);
169
- });
216
+ it("should return resource definitions", () => {
217
+ const resources = adapter.getResourceDefinitions();
218
+ expect(resources.length).toBeGreaterThan(0);
219
+ expect(resources[0]?.uri).toBe("mysql://test");
220
+ });
170
221
 
171
- it('should return supported tool groups', () => {
172
- const groups = adapter.getSupportedToolGroups();
173
- expect(groups).toContain('core');
174
- expect(groups).toContain('transactions');
175
- });
222
+ it("should return prompt definitions", () => {
223
+ const prompts = adapter.getPromptDefinitions();
224
+ expect(prompts.length).toBeGreaterThan(0);
225
+ expect(prompts[0]?.name).toBe("test_prompt");
176
226
  });
227
+ });
177
228
 
178
- describe('definitions', () => {
179
- it('should return tool definitions', () => {
180
- const tools = adapter.getToolDefinitions();
181
- expect(tools.length).toBeGreaterThan(0);
182
- expect(tools[0]?.name).toBe('test_tool');
183
- });
229
+ describe("request context", () => {
230
+ it("should create context with default request id", () => {
231
+ const context = adapter.createContext();
232
+ expect(context.requestId).toBeTruthy();
233
+ });
184
234
 
185
- it('should return resource definitions', () => {
186
- const resources = adapter.getResourceDefinitions();
187
- expect(resources.length).toBeGreaterThan(0);
188
- expect(resources[0]?.uri).toBe('mysql://test');
189
- });
235
+ it("should create context with specified request id", () => {
236
+ const context = adapter.createContext("test-request-123");
237
+ expect(context.requestId).toBe("test-request-123");
238
+ });
239
+ });
190
240
 
191
- it('should return prompt definitions', () => {
192
- const prompts = adapter.getPromptDefinitions();
193
- expect(prompts.length).toBeGreaterThan(0);
194
- expect(prompts[0]?.name).toBe('test_prompt');
195
- });
241
+ describe("query validation", () => {
242
+ it("should allow SELECT queries in read-only mode", () => {
243
+ expect(() =>
244
+ adapter.validateQuery("SELECT * FROM users", true),
245
+ ).not.toThrow();
196
246
  });
197
247
 
198
- describe('request context', () => {
199
- it('should create context with default request id', () => {
200
- const context = adapter.createContext();
201
- expect(context.requestId).toBeTruthy();
202
- });
248
+ it("should reject INSERT in read-only mode", () => {
249
+ expect(() =>
250
+ adapter.validateQuery("INSERT INTO users VALUES (1)", true),
251
+ ).toThrow();
252
+ });
203
253
 
204
- it('should create context with specified request id', () => {
205
- const context = adapter.createContext('test-request-123');
206
- expect(context.requestId).toBe('test-request-123');
207
- });
254
+ it("should reject UPDATE in read-only mode", () => {
255
+ expect(() =>
256
+ adapter.validateQuery('UPDATE users SET name = "test"', true),
257
+ ).toThrow();
208
258
  });
209
259
 
210
- describe('query validation', () => {
211
- it('should allow SELECT queries in read-only mode', () => {
212
- expect(() => adapter.validateQuery('SELECT * FROM users', true)).not.toThrow();
213
- });
260
+ it("should reject DELETE in read-only mode", () => {
261
+ expect(() =>
262
+ adapter.validateQuery("DELETE FROM users WHERE id = 1", true),
263
+ ).toThrow();
264
+ });
214
265
 
215
- it('should reject INSERT in read-only mode', () => {
216
- expect(() => adapter.validateQuery('INSERT INTO users VALUES (1)', true)).toThrow();
217
- });
266
+ it("should reject DROP in read-only mode", () => {
267
+ expect(() => adapter.validateQuery("DROP TABLE users", true)).toThrow();
268
+ });
218
269
 
219
- it('should reject UPDATE in read-only mode', () => {
220
- expect(() => adapter.validateQuery('UPDATE users SET name = "test"', true)).toThrow();
221
- });
270
+ it("should allow write queries in non-read-only mode", () => {
271
+ expect(() =>
272
+ adapter.validateQuery("INSERT INTO users VALUES (1)", false),
273
+ ).not.toThrow();
274
+ });
222
275
 
223
- it('should reject DELETE in read-only mode', () => {
224
- expect(() => adapter.validateQuery('DELETE FROM users WHERE id = 1', true)).toThrow();
225
- });
276
+ it("should reject dangerous patterns", () => {
277
+ expect(() =>
278
+ adapter.validateQuery("SELECT * FROM users; DROP TABLE users", false),
279
+ ).toThrow();
280
+ });
226
281
 
227
- it('should reject DROP in read-only mode', () => {
228
- expect(() => adapter.validateQuery('DROP TABLE users', true)).toThrow();
229
- });
282
+ it("should reject CREATE in read-only mode", () => {
283
+ expect(() =>
284
+ adapter.validateQuery("CREATE TABLE test (id INT)", true),
285
+ ).toThrow();
286
+ });
230
287
 
231
- it('should allow write queries in non-read-only mode', () => {
232
- expect(() => adapter.validateQuery('INSERT INTO users VALUES (1)', false)).not.toThrow();
233
- });
288
+ it("should reject ALTER in read-only mode", () => {
289
+ expect(() =>
290
+ adapter.validateQuery(
291
+ "ALTER TABLE users ADD column email VARCHAR(255)",
292
+ true,
293
+ ),
294
+ ).toThrow();
295
+ });
234
296
 
235
- it('should reject dangerous patterns', () => {
236
- expect(() => adapter.validateQuery('SELECT * FROM users; DROP TABLE users', false)).toThrow();
237
- });
297
+ it("should reject TRUNCATE in read-only mode", () => {
298
+ expect(() =>
299
+ adapter.validateQuery("TRUNCATE TABLE users", true),
300
+ ).toThrow();
301
+ });
238
302
 
239
- it('should reject CREATE in read-only mode', () => {
240
- expect(() => adapter.validateQuery('CREATE TABLE test (id INT)', true)).toThrow();
241
- });
303
+ it("should reject REPLACE in read-only mode", () => {
304
+ expect(() =>
305
+ adapter.validateQuery('REPLACE INTO users VALUES (1, "test")', true),
306
+ ).toThrow();
307
+ });
242
308
 
243
- it('should reject ALTER in read-only mode', () => {
244
- expect(() => adapter.validateQuery('ALTER TABLE users ADD column email VARCHAR(255)', true)).toThrow();
245
- });
309
+ it("should reject GRANT in read-only mode", () => {
310
+ expect(() =>
311
+ adapter.validateQuery("GRANT SELECT ON users TO user1", true),
312
+ ).toThrow();
313
+ });
246
314
 
247
- it('should reject TRUNCATE in read-only mode', () => {
248
- expect(() => adapter.validateQuery('TRUNCATE TABLE users', true)).toThrow();
249
- });
315
+ it("should reject REVOKE in read-only mode", () => {
316
+ expect(() =>
317
+ adapter.validateQuery("REVOKE SELECT ON users FROM user1", true),
318
+ ).toThrow();
319
+ });
250
320
 
251
- it('should reject REPLACE in read-only mode', () => {
252
- expect(() => adapter.validateQuery('REPLACE INTO users VALUES (1, "test")', true)).toThrow();
253
- });
321
+ it("should reject empty query", () => {
322
+ expect(() => adapter.validateQuery("", true)).toThrow(
323
+ "Query must be a non-empty string",
324
+ );
325
+ });
254
326
 
255
- it('should reject GRANT in read-only mode', () => {
256
- expect(() => adapter.validateQuery('GRANT SELECT ON users TO user1', true)).toThrow();
257
- });
327
+ it("should reject non-string query", () => {
328
+ expect(() => adapter.validateQuery(null as never, true)).toThrow();
329
+ });
258
330
 
259
- it('should reject REVOKE in read-only mode', () => {
260
- expect(() => adapter.validateQuery('REVOKE SELECT ON users FROM user1', true)).toThrow();
261
- });
331
+ it("should reject SQL comment injection patterns", () => {
332
+ expect(() =>
333
+ adapter.validateQuery("SELECT * FROM users --", false),
334
+ ).toThrow();
335
+ });
262
336
 
263
- it('should reject empty query', () => {
264
- expect(() => adapter.validateQuery('', true)).toThrow('Query must be a non-empty string');
265
- });
337
+ it("should reject dangerous DELETE pattern", () => {
338
+ expect(() =>
339
+ adapter.validateQuery("SELECT 1; DELETE FROM users", false),
340
+ ).toThrow();
341
+ });
266
342
 
267
- it('should reject non-string query', () => {
268
- expect(() => adapter.validateQuery(null as never, true)).toThrow();
269
- });
343
+ it("should reject dangerous TRUNCATE pattern", () => {
344
+ expect(() =>
345
+ adapter.validateQuery("SELECT 1; TRUNCATE users", false),
346
+ ).toThrow();
347
+ });
270
348
 
271
- it('should reject SQL comment injection patterns', () => {
272
- expect(() => adapter.validateQuery('SELECT * FROM users --', false)).toThrow();
273
- });
349
+ it("should reject dangerous INSERT pattern", () => {
350
+ expect(() =>
351
+ adapter.validateQuery("SELECT 1; INSERT INTO logs VALUES (1)", false),
352
+ ).toThrow();
353
+ });
274
354
 
275
- it('should reject dangerous DELETE pattern', () => {
276
- expect(() => adapter.validateQuery('SELECT 1; DELETE FROM users', false)).toThrow();
277
- });
355
+ it("should reject dangerous UPDATE pattern", () => {
356
+ expect(() =>
357
+ adapter.validateQuery("SELECT 1; UPDATE users SET x=1", false),
358
+ ).toThrow();
359
+ });
360
+ });
278
361
 
279
- it('should reject dangerous TRUNCATE pattern', () => {
280
- expect(() => adapter.validateQuery('SELECT 1; TRUNCATE users', false)).toThrow();
281
- });
362
+ describe("MCP registration", () => {
363
+ let mockServer: {
364
+ registerTool: ReturnType<typeof vi.fn>;
365
+ registerResource: ReturnType<typeof vi.fn>;
366
+ registerPrompt: ReturnType<typeof vi.fn>;
367
+ };
282
368
 
283
- it('should reject dangerous INSERT pattern', () => {
284
- expect(() => adapter.validateQuery('SELECT 1; INSERT INTO logs VALUES (1)', false)).toThrow();
285
- });
369
+ beforeEach(() => {
370
+ mockServer = {
371
+ registerTool: vi.fn(),
372
+ registerResource: vi.fn(),
373
+ registerPrompt: vi.fn(),
374
+ };
375
+ });
286
376
 
287
- it('should reject dangerous UPDATE pattern', () => {
288
- expect(() => adapter.validateQuery('SELECT 1; UPDATE users SET x=1', false)).toThrow();
289
- });
377
+ describe("registerTools", () => {
378
+ it("should register enabled tools with server", () => {
379
+ const enabledTools = new Set(["test_tool"]);
380
+ adapter.registerTools(mockServer as never, enabledTools);
381
+ expect(mockServer.registerTool).toHaveBeenCalled();
382
+ });
383
+
384
+ it("should not register tools not in enabled set", () => {
385
+ const enabledTools = new Set(["other_tool"]);
386
+ adapter.registerTools(mockServer as never, enabledTools);
387
+ expect(mockServer.registerTool).not.toHaveBeenCalled();
388
+ });
389
+
390
+ it("should pass tool name and options to server", () => {
391
+ const enabledTools = new Set(["test_tool"]);
392
+ adapter.registerTools(mockServer as never, enabledTools);
393
+
394
+ expect(mockServer.registerTool).toHaveBeenCalledWith(
395
+ "test_tool",
396
+ expect.objectContaining({
397
+ description: "A test tool",
398
+ title: "Test Tool",
399
+ }),
400
+ expect.any(Function),
401
+ );
402
+ });
403
+ });
404
+
405
+ describe("registerResources", () => {
406
+ it("should register all resources with server", () => {
407
+ adapter.registerResources(mockServer as never);
408
+ expect(mockServer.registerResource).toHaveBeenCalled();
409
+ });
410
+
411
+ it("should pass resource name and uri to server", () => {
412
+ adapter.registerResources(mockServer as never);
413
+
414
+ expect(mockServer.registerResource).toHaveBeenCalledWith(
415
+ "Test Resource",
416
+ "mysql://test",
417
+ expect.anything(),
418
+ expect.any(Function),
419
+ );
420
+ });
290
421
  });
291
422
 
292
- describe('MCP registration', () => {
293
- let mockServer: {
294
- registerTool: ReturnType<typeof vi.fn>;
295
- registerResource: ReturnType<typeof vi.fn>;
296
- registerPrompt: ReturnType<typeof vi.fn>;
423
+ describe("registerPrompts", () => {
424
+ it("should register all prompts with server", () => {
425
+ adapter.registerPrompts(mockServer as never);
426
+ expect(mockServer.registerPrompt).toHaveBeenCalled();
427
+ });
428
+
429
+ it("should pass prompt name and description to server", () => {
430
+ adapter.registerPrompts(mockServer as never);
431
+
432
+ expect(mockServer.registerPrompt).toHaveBeenCalledWith(
433
+ "test_prompt",
434
+ expect.objectContaining({
435
+ description: "A test prompt",
436
+ }),
437
+ expect.any(Function),
438
+ );
439
+ });
440
+
441
+ it("should handle prompts with arguments", () => {
442
+ const promptWithArgs: PromptDefinition = {
443
+ name: "arg_prompt",
444
+ description: "desc",
445
+ arguments: [
446
+ { name: "required_arg", description: "req", required: true },
447
+ { name: "optional_arg", description: "opt", required: false },
448
+ ],
449
+ handler: async () => "result",
297
450
  };
298
451
 
299
- beforeEach(() => {
300
- mockServer = {
301
- registerTool: vi.fn(),
302
- registerResource: vi.fn(),
303
- registerPrompt: vi.fn()
304
- };
305
- });
452
+ vi.spyOn(adapter, "getPromptDefinitions").mockReturnValue([
453
+ promptWithArgs,
454
+ ]);
455
+ adapter.registerPrompts(mockServer as never);
456
+
457
+ expect(mockServer.registerPrompt).toHaveBeenCalledWith(
458
+ "arg_prompt",
459
+ expect.objectContaining({
460
+ description: "desc",
461
+ argsSchema: expect.objectContaining({
462
+ required_arg: expect.anything(),
463
+ optional_arg: expect.anything(),
464
+ }),
465
+ }),
466
+ expect.any(Function),
467
+ );
468
+ });
469
+ });
306
470
 
307
- describe('registerTools', () => {
308
- it('should register enabled tools with server', () => {
309
- const enabledTools = new Set(['test_tool']);
310
- adapter.registerTools(mockServer as never, enabledTools);
311
- expect(mockServer.registerTool).toHaveBeenCalled();
312
- });
313
-
314
- it('should not register tools not in enabled set', () => {
315
- const enabledTools = new Set(['other_tool']);
316
- adapter.registerTools(mockServer as never, enabledTools);
317
- expect(mockServer.registerTool).not.toHaveBeenCalled();
318
- });
319
-
320
- it('should pass tool name and options to server', () => {
321
- const enabledTools = new Set(['test_tool']);
322
- adapter.registerTools(mockServer as never, enabledTools);
323
-
324
- expect(mockServer.registerTool).toHaveBeenCalledWith(
325
- 'test_tool',
326
- expect.objectContaining({
327
- description: 'A test tool',
328
- title: 'Test Tool'
329
- }),
330
- expect.any(Function)
331
- );
332
- });
333
- });
471
+ describe("handler execution", () => {
472
+ it("should execute tool handler when called", async () => {
473
+ adapter.registerTools(mockServer as never, new Set(["test_tool"]));
474
+ // registerTool now takes 3 args: name, options, handler
475
+ const handler = mockServer.registerTool.mock.calls[0][2] as Function;
334
476
 
335
- describe('registerResources', () => {
336
- it('should register all resources with server', () => {
337
- adapter.registerResources(mockServer as never);
338
- expect(mockServer.registerResource).toHaveBeenCalled();
339
- });
340
-
341
- it('should pass resource name and uri to server', () => {
342
- adapter.registerResources(mockServer as never);
343
-
344
- expect(mockServer.registerResource).toHaveBeenCalledWith(
345
- 'Test Resource',
346
- 'mysql://test',
347
- expect.anything(),
348
- expect.any(Function)
349
- );
350
- });
477
+ const result = await handler({});
478
+ expect(result).toEqual({
479
+ content: [
480
+ { type: "text", text: JSON.stringify({ result: "ok" }, null, 2) },
481
+ ],
351
482
  });
483
+ });
352
484
 
485
+ it("should execute resource handler when called", async () => {
486
+ adapter.registerResources(mockServer as never);
487
+ const handler = mockServer.registerResource.mock
488
+ .calls[0][3] as Function;
353
489
 
354
- describe('registerPrompts', () => {
355
- it('should register all prompts with server', () => {
356
- adapter.registerPrompts(mockServer as never);
357
- expect(mockServer.registerPrompt).toHaveBeenCalled();
358
- });
359
-
360
- it('should pass prompt name and description to server', () => {
361
- adapter.registerPrompts(mockServer as never);
362
-
363
- expect(mockServer.registerPrompt).toHaveBeenCalledWith(
364
- 'test_prompt',
365
- expect.objectContaining({
366
- description: 'A test prompt'
367
- }),
368
- expect.any(Function)
369
- );
370
- });
371
-
372
- it('should handle prompts with arguments', () => {
373
- const promptWithArgs: PromptDefinition = {
374
- name: 'arg_prompt',
375
- description: 'desc',
376
- arguments: [
377
- { name: 'required_arg', description: 'req', required: true },
378
- { name: 'optional_arg', description: 'opt', required: false }
379
- ],
380
- handler: async () => 'result'
381
- };
382
-
383
- vi.spyOn(adapter, 'getPromptDefinitions').mockReturnValue([promptWithArgs]);
384
- adapter.registerPrompts(mockServer as never);
385
-
386
- expect(mockServer.registerPrompt).toHaveBeenCalledWith(
387
- 'arg_prompt',
388
- expect.objectContaining({
389
- description: 'desc',
390
- argsSchema: expect.objectContaining({
391
- required_arg: expect.anything(),
392
- optional_arg: expect.anything()
393
- })
394
- }),
395
- expect.any(Function)
396
- );
397
- });
398
- });
399
-
400
- describe('handler execution', () => {
401
- it('should execute tool handler when called', async () => {
402
- adapter.registerTools(mockServer as never, new Set(['test_tool']));
403
- // registerTool now takes 3 args: name, options, handler
404
- const handler = mockServer.registerTool.mock.calls[0][2] as Function;
405
-
406
- const result = await handler({});
407
- expect(result).toEqual({
408
- content: [{ type: 'text', text: JSON.stringify({ result: 'ok' }, null, 2) }]
409
- });
410
- });
411
-
412
- it('should execute resource handler when called', async () => {
413
- adapter.registerResources(mockServer as never);
414
- const handler = mockServer.registerResource.mock.calls[0][3] as Function;
415
-
416
- const result = await handler(new URL('mysql://test'));
417
- expect(result).toEqual({
418
- contents: [{
419
- uri: 'mysql://test',
420
- mimeType: 'application/json',
421
- text: JSON.stringify({ data: 'test' }, null, 2)
422
- }]
423
- });
424
- });
425
-
426
- it('should execute prompt handler when called', async () => {
427
- adapter.registerPrompts(mockServer as never);
428
- // registerPrompt takes 3 args: name, options, handler
429
- const handler = mockServer.registerPrompt.mock.calls[0][2] as Function;
430
-
431
- const result = await handler({});
432
- expect(result).toEqual({
433
- messages: [{
434
- role: 'user',
435
- content: { type: 'text', text: 'Test prompt output' }
436
- }]
437
- });
438
- });
490
+ const result = await handler(new URL("mysql://test"));
491
+ expect(result).toEqual({
492
+ contents: [
493
+ {
494
+ uri: "mysql://test",
495
+ mimeType: "application/json",
496
+ text: JSON.stringify({ data: "test" }, null, 2),
497
+ },
498
+ ],
499
+ });
500
+ });
501
+
502
+ it("should execute prompt handler when called", async () => {
503
+ adapter.registerPrompts(mockServer as never);
504
+ // registerPrompt takes 3 args: name, options, handler
505
+ const handler = mockServer.registerPrompt.mock.calls[0][2] as Function;
506
+
507
+ const result = await handler({});
508
+ expect(result).toEqual({
509
+ messages: [
510
+ {
511
+ role: "user",
512
+ content: { type: "text", text: "Test prompt output" },
513
+ },
514
+ ],
439
515
  });
516
+ });
440
517
  });
518
+ });
441
519
  });