mcp-wordpress 2.4.2 → 2.5.1

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 (653) hide show
  1. package/README.md +124 -54
  2. package/bin/status.js +1 -1
  3. package/dist/cache/CacheInvalidation.d.ts +3 -1
  4. package/dist/cache/CacheInvalidation.d.ts.map +1 -1
  5. package/dist/cache/CacheInvalidation.js +10 -4
  6. package/dist/cache/CacheInvalidation.js.map +1 -1
  7. package/dist/cache/CacheManager.d.ts +3 -2
  8. package/dist/cache/CacheManager.d.ts.map +1 -1
  9. package/dist/cache/CacheManager.js +11 -3
  10. package/dist/cache/CacheManager.js.map +1 -1
  11. package/dist/cache/HttpCacheWrapper.d.ts +7 -6
  12. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
  13. package/dist/cache/HttpCacheWrapper.js +8 -5
  14. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  15. package/dist/cache/index.d.ts +3 -3
  16. package/dist/cache/index.d.ts.map +1 -1
  17. package/dist/cache/index.js +1 -1
  18. package/dist/cache/index.js.map +1 -1
  19. package/dist/client/CachedWordPressClient.d.ts +23 -9
  20. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  21. package/dist/client/CachedWordPressClient.js +4 -1
  22. package/dist/client/CachedWordPressClient.js.map +1 -1
  23. package/dist/client/MockWordPressClient.d.ts +2 -1
  24. package/dist/client/MockWordPressClient.d.ts.map +1 -1
  25. package/dist/client/MockWordPressClient.js +3 -1
  26. package/dist/client/MockWordPressClient.js.map +1 -1
  27. package/dist/client/api.d.ts +17 -13
  28. package/dist/client/api.d.ts.map +1 -1
  29. package/dist/client/api.js +135 -30
  30. package/dist/client/api.js.map +1 -1
  31. package/dist/client/auth.d.ts.map +1 -1
  32. package/dist/client/auth.js +2 -3
  33. package/dist/client/auth.js.map +1 -1
  34. package/dist/client/managers/AuthenticationManager.d.ts +55 -2
  35. package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
  36. package/dist/client/managers/AuthenticationManager.js +269 -71
  37. package/dist/client/managers/AuthenticationManager.js.map +1 -1
  38. package/dist/client/managers/BaseManager.d.ts +3 -3
  39. package/dist/client/managers/BaseManager.d.ts.map +1 -1
  40. package/dist/client/managers/BaseManager.js +11 -5
  41. package/dist/client/managers/BaseManager.js.map +1 -1
  42. package/dist/client/managers/RequestManager.d.ts +2 -2
  43. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  44. package/dist/client/managers/RequestManager.js +25 -12
  45. package/dist/client/managers/RequestManager.js.map +1 -1
  46. package/dist/config/Config.d.ts +155 -0
  47. package/dist/config/Config.d.ts.map +1 -0
  48. package/dist/config/Config.js +215 -0
  49. package/dist/config/Config.js.map +1 -0
  50. package/dist/config/ConfigurationSchema.d.ts +21 -21
  51. package/dist/config/ConfigurationSchema.d.ts.map +1 -1
  52. package/dist/config/ConfigurationSchema.js +19 -2
  53. package/dist/config/ConfigurationSchema.js.map +1 -1
  54. package/dist/config/ServerConfiguration.d.ts +2 -1
  55. package/dist/config/ServerConfiguration.d.ts.map +1 -1
  56. package/dist/config/ServerConfiguration.js +73 -43
  57. package/dist/config/ServerConfiguration.js.map +1 -1
  58. package/dist/docs/DocumentationGenerator.d.ts +9 -8
  59. package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
  60. package/dist/docs/DocumentationGenerator.js +10 -7
  61. package/dist/docs/DocumentationGenerator.js.map +1 -1
  62. package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
  63. package/dist/docs/MarkdownFormatter.js +3 -2
  64. package/dist/docs/MarkdownFormatter.js.map +1 -1
  65. package/dist/dxt-entry.js +15 -14
  66. package/dist/dxt-entry.js.map +1 -1
  67. package/dist/index.d.ts +3 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +37 -21
  70. package/dist/index.js.map +1 -1
  71. package/dist/performance/MetricsCollector.d.ts +13 -7
  72. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  73. package/dist/performance/MetricsCollector.js +69 -27
  74. package/dist/performance/MetricsCollector.js.map +1 -1
  75. package/dist/performance/PerformanceAnalytics.d.ts +8 -2
  76. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
  77. package/dist/performance/PerformanceAnalytics.js +17 -47
  78. package/dist/performance/PerformanceAnalytics.js.map +1 -1
  79. package/dist/performance/PerformanceMonitor.d.ts +2 -1
  80. package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
  81. package/dist/performance/PerformanceMonitor.js +12 -13
  82. package/dist/performance/PerformanceMonitor.js.map +1 -1
  83. package/dist/performance/index.d.ts +2 -2
  84. package/dist/performance/index.d.ts.map +1 -1
  85. package/dist/security/AISecurityScanner.d.ts +1 -0
  86. package/dist/security/AISecurityScanner.d.ts.map +1 -1
  87. package/dist/security/AISecurityScanner.js +22 -12
  88. package/dist/security/AISecurityScanner.js.map +1 -1
  89. package/dist/security/AutomatedRemediation.d.ts +4 -3
  90. package/dist/security/AutomatedRemediation.d.ts.map +1 -1
  91. package/dist/security/AutomatedRemediation.js +46 -15
  92. package/dist/security/AutomatedRemediation.js.map +1 -1
  93. package/dist/security/InputValidator.d.ts +13 -9
  94. package/dist/security/InputValidator.d.ts.map +1 -1
  95. package/dist/security/InputValidator.js +4 -2
  96. package/dist/security/InputValidator.js.map +1 -1
  97. package/dist/security/SecurityCIPipeline.d.ts +1 -1
  98. package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
  99. package/dist/security/SecurityCIPipeline.js +38 -29
  100. package/dist/security/SecurityCIPipeline.js.map +1 -1
  101. package/dist/security/SecurityConfig.d.ts +3 -3
  102. package/dist/security/SecurityConfig.d.ts.map +1 -1
  103. package/dist/security/SecurityConfig.js +13 -9
  104. package/dist/security/SecurityConfig.js.map +1 -1
  105. package/dist/security/SecurityConfigManager.d.ts +2 -2
  106. package/dist/security/SecurityConfigManager.d.ts.map +1 -1
  107. package/dist/security/SecurityConfigManager.js +20 -15
  108. package/dist/security/SecurityConfigManager.js.map +1 -1
  109. package/dist/security/SecurityMonitoring.d.ts +2 -2
  110. package/dist/security/SecurityMonitoring.d.ts.map +1 -1
  111. package/dist/security/SecurityMonitoring.js +19 -17
  112. package/dist/security/SecurityMonitoring.js.map +1 -1
  113. package/dist/security/SecurityReviewer.d.ts.map +1 -1
  114. package/dist/security/SecurityReviewer.js +10 -7
  115. package/dist/security/SecurityReviewer.js.map +1 -1
  116. package/dist/security/index.d.ts +24 -23
  117. package/dist/security/index.d.ts.map +1 -1
  118. package/dist/security/index.js +52 -23
  119. package/dist/security/index.js.map +1 -1
  120. package/dist/server/ConnectionTester.d.ts +12 -4
  121. package/dist/server/ConnectionTester.d.ts.map +1 -1
  122. package/dist/server/ConnectionTester.js +96 -22
  123. package/dist/server/ConnectionTester.js.map +1 -1
  124. package/dist/server/ToolRegistry.d.ts +2 -2
  125. package/dist/server/ToolRegistry.d.ts.map +1 -1
  126. package/dist/server/ToolRegistry.js +10 -5
  127. package/dist/server/ToolRegistry.js.map +1 -1
  128. package/dist/src/cache/CacheInvalidation.d.ts +120 -0
  129. package/dist/src/cache/CacheInvalidation.d.ts.map +1 -0
  130. package/dist/src/cache/CacheInvalidation.js +355 -0
  131. package/dist/src/cache/CacheInvalidation.js.map +1 -0
  132. package/dist/src/cache/CacheManager.d.ts +149 -0
  133. package/dist/src/cache/CacheManager.d.ts.map +1 -0
  134. package/dist/src/cache/CacheManager.js +326 -0
  135. package/dist/src/cache/CacheManager.js.map +1 -0
  136. package/dist/src/cache/HttpCacheWrapper.d.ts +122 -0
  137. package/dist/src/cache/HttpCacheWrapper.d.ts.map +1 -0
  138. package/dist/src/cache/HttpCacheWrapper.js +283 -0
  139. package/dist/src/cache/HttpCacheWrapper.js.map +1 -0
  140. package/dist/src/cache/index.d.ts +12 -0
  141. package/dist/src/cache/index.d.ts.map +1 -0
  142. package/dist/src/cache/index.js +9 -0
  143. package/dist/src/cache/index.js.map +1 -0
  144. package/dist/src/client/CachedWordPressClient.d.ts +174 -0
  145. package/dist/src/client/CachedWordPressClient.d.ts.map +1 -0
  146. package/dist/src/client/CachedWordPressClient.js +345 -0
  147. package/dist/src/client/CachedWordPressClient.js.map +1 -0
  148. package/dist/src/client/MockWordPressClient.d.ts +56 -0
  149. package/dist/src/client/MockWordPressClient.d.ts.map +1 -0
  150. package/dist/src/client/MockWordPressClient.js +371 -0
  151. package/dist/src/client/MockWordPressClient.js.map +1 -0
  152. package/dist/src/client/api.d.ts +235 -0
  153. package/dist/src/client/api.d.ts.map +1 -0
  154. package/dist/src/client/api.js +896 -0
  155. package/dist/src/client/api.js.map +1 -0
  156. package/dist/src/client/auth.d.ts +121 -0
  157. package/dist/src/client/auth.d.ts.map +1 -0
  158. package/dist/src/client/auth.js +429 -0
  159. package/dist/src/client/auth.js.map +1 -0
  160. package/dist/src/client/managers/AuthenticationManager.d.ts +92 -0
  161. package/dist/src/client/managers/AuthenticationManager.d.ts.map +1 -0
  162. package/dist/src/client/managers/AuthenticationManager.js +369 -0
  163. package/dist/src/client/managers/AuthenticationManager.js.map +1 -0
  164. package/dist/src/client/managers/BaseManager.d.ts +22 -0
  165. package/dist/src/client/managers/BaseManager.d.ts.map +1 -0
  166. package/dist/src/client/managers/BaseManager.js +53 -0
  167. package/dist/src/client/managers/BaseManager.js.map +1 -0
  168. package/dist/src/client/managers/RequestManager.d.ts +47 -0
  169. package/dist/src/client/managers/RequestManager.d.ts.map +1 -0
  170. package/dist/src/client/managers/RequestManager.js +193 -0
  171. package/dist/src/client/managers/RequestManager.js.map +1 -0
  172. package/dist/src/client/managers/index.d.ts +8 -0
  173. package/dist/src/client/managers/index.d.ts.map +1 -0
  174. package/dist/src/client/managers/index.js +8 -0
  175. package/dist/src/client/managers/index.js.map +1 -0
  176. package/dist/src/config/Config.d.ts +155 -0
  177. package/dist/src/config/Config.d.ts.map +1 -0
  178. package/dist/src/config/Config.js +215 -0
  179. package/dist/src/config/Config.js.map +1 -0
  180. package/dist/src/config/ConfigurationSchema.d.ts +281 -0
  181. package/dist/src/config/ConfigurationSchema.d.ts.map +1 -0
  182. package/dist/src/config/ConfigurationSchema.js +205 -0
  183. package/dist/src/config/ConfigurationSchema.js.map +1 -0
  184. package/dist/src/config/ServerConfiguration.d.ts +47 -0
  185. package/dist/src/config/ServerConfiguration.d.ts.map +1 -0
  186. package/dist/src/config/ServerConfiguration.js +255 -0
  187. package/dist/src/config/ServerConfiguration.js.map +1 -0
  188. package/dist/src/docs/DocumentationGenerator.d.ts +185 -0
  189. package/dist/src/docs/DocumentationGenerator.d.ts.map +1 -0
  190. package/dist/src/docs/DocumentationGenerator.js +777 -0
  191. package/dist/src/docs/DocumentationGenerator.js.map +1 -0
  192. package/dist/src/docs/MarkdownFormatter.d.ts +84 -0
  193. package/dist/src/docs/MarkdownFormatter.d.ts.map +1 -0
  194. package/dist/src/docs/MarkdownFormatter.js +458 -0
  195. package/dist/src/docs/MarkdownFormatter.js.map +1 -0
  196. package/dist/src/docs/index.d.ts +8 -0
  197. package/dist/src/docs/index.d.ts.map +1 -0
  198. package/dist/src/docs/index.js +7 -0
  199. package/dist/src/docs/index.js.map +1 -0
  200. package/dist/src/dxt-entry.d.ts +6 -0
  201. package/dist/src/dxt-entry.d.ts.map +1 -0
  202. package/dist/src/dxt-entry.js +39 -0
  203. package/dist/src/dxt-entry.js.map +1 -0
  204. package/dist/src/index.d.ts +18 -0
  205. package/dist/src/index.d.ts.map +1 -0
  206. package/dist/src/index.js +143 -0
  207. package/dist/src/index.js.map +1 -0
  208. package/dist/src/performance/MetricsCollector.d.ts +145 -0
  209. package/dist/src/performance/MetricsCollector.d.ts.map +1 -0
  210. package/dist/src/performance/MetricsCollector.js +368 -0
  211. package/dist/src/performance/MetricsCollector.js.map +1 -0
  212. package/dist/src/performance/PerformanceAnalytics.d.ts +168 -0
  213. package/dist/src/performance/PerformanceAnalytics.d.ts.map +1 -0
  214. package/dist/src/performance/PerformanceAnalytics.js +570 -0
  215. package/dist/src/performance/PerformanceAnalytics.js.map +1 -0
  216. package/dist/src/performance/PerformanceMonitor.d.ts +203 -0
  217. package/dist/src/performance/PerformanceMonitor.d.ts.map +1 -0
  218. package/dist/src/performance/PerformanceMonitor.js +478 -0
  219. package/dist/src/performance/PerformanceMonitor.js.map +1 -0
  220. package/dist/src/performance/index.d.ts +11 -0
  221. package/dist/src/performance/index.d.ts.map +1 -0
  222. package/dist/src/performance/index.js +8 -0
  223. package/dist/src/performance/index.js.map +1 -0
  224. package/dist/src/security/AISecurityScanner.d.ts +176 -0
  225. package/dist/src/security/AISecurityScanner.d.ts.map +1 -0
  226. package/dist/src/security/AISecurityScanner.js +655 -0
  227. package/dist/src/security/AISecurityScanner.js.map +1 -0
  228. package/dist/src/security/AutomatedRemediation.d.ts +146 -0
  229. package/dist/src/security/AutomatedRemediation.d.ts.map +1 -0
  230. package/dist/src/security/AutomatedRemediation.js +566 -0
  231. package/dist/src/security/AutomatedRemediation.js.map +1 -0
  232. package/dist/src/security/InputValidator.d.ts +219 -0
  233. package/dist/src/security/InputValidator.d.ts.map +1 -0
  234. package/dist/src/security/InputValidator.js +295 -0
  235. package/dist/src/security/InputValidator.js.map +1 -0
  236. package/dist/src/security/SecurityCIPipeline.d.ts +213 -0
  237. package/dist/src/security/SecurityCIPipeline.d.ts.map +1 -0
  238. package/dist/src/security/SecurityCIPipeline.js +693 -0
  239. package/dist/src/security/SecurityCIPipeline.js.map +1 -0
  240. package/dist/src/security/SecurityConfig.d.ts +129 -0
  241. package/dist/src/security/SecurityConfig.d.ts.map +1 -0
  242. package/dist/src/security/SecurityConfig.js +266 -0
  243. package/dist/src/security/SecurityConfig.js.map +1 -0
  244. package/dist/src/security/SecurityConfigManager.d.ts +294 -0
  245. package/dist/src/security/SecurityConfigManager.d.ts.map +1 -0
  246. package/dist/src/security/SecurityConfigManager.js +558 -0
  247. package/dist/src/security/SecurityConfigManager.js.map +1 -0
  248. package/dist/src/security/SecurityMonitoring.d.ts +245 -0
  249. package/dist/src/security/SecurityMonitoring.d.ts.map +1 -0
  250. package/dist/src/security/SecurityMonitoring.js +598 -0
  251. package/dist/src/security/SecurityMonitoring.js.map +1 -0
  252. package/dist/src/security/SecurityReviewer.d.ts +168 -0
  253. package/dist/src/security/SecurityReviewer.d.ts.map +1 -0
  254. package/dist/src/security/SecurityReviewer.js +686 -0
  255. package/dist/src/security/SecurityReviewer.js.map +1 -0
  256. package/dist/src/security/index.d.ts +183 -0
  257. package/dist/src/security/index.d.ts.map +1 -0
  258. package/dist/src/security/index.js +218 -0
  259. package/dist/src/security/index.js.map +1 -0
  260. package/dist/src/server/ConnectionTester.d.ts +32 -0
  261. package/dist/src/server/ConnectionTester.d.ts.map +1 -0
  262. package/dist/src/server/ConnectionTester.js +135 -0
  263. package/dist/src/server/ConnectionTester.js.map +1 -0
  264. package/dist/src/server/ToolRegistry.d.ts +50 -0
  265. package/dist/src/server/ToolRegistry.d.ts.map +1 -0
  266. package/dist/src/server/ToolRegistry.js +219 -0
  267. package/dist/src/server/ToolRegistry.js.map +1 -0
  268. package/dist/src/server.d.ts +7 -0
  269. package/dist/src/server.d.ts.map +1 -0
  270. package/dist/src/server.js +7 -0
  271. package/dist/src/server.js.map +1 -0
  272. package/dist/src/tools/BaseToolManager.d.ts +62 -0
  273. package/dist/src/tools/BaseToolManager.d.ts.map +1 -0
  274. package/dist/src/tools/BaseToolManager.js +195 -0
  275. package/dist/src/tools/BaseToolManager.js.map +1 -0
  276. package/dist/src/tools/auth.d.ts +50 -0
  277. package/dist/src/tools/auth.d.ts.map +1 -0
  278. package/dist/src/tools/auth.js +133 -0
  279. package/dist/src/tools/auth.js.map +1 -0
  280. package/dist/src/tools/cache.d.ts +260 -0
  281. package/dist/src/tools/cache.d.ts.map +1 -0
  282. package/dist/src/tools/cache.js +232 -0
  283. package/dist/src/tools/cache.js.map +1 -0
  284. package/dist/src/tools/comments.d.ts +33 -0
  285. package/dist/src/tools/comments.d.ts.map +1 -0
  286. package/dist/src/tools/comments.js +235 -0
  287. package/dist/src/tools/comments.js.map +1 -0
  288. package/dist/src/tools/index.d.ts +11 -0
  289. package/dist/src/tools/index.d.ts.map +1 -0
  290. package/dist/src/tools/index.js +11 -0
  291. package/dist/src/tools/index.js.map +1 -0
  292. package/dist/src/tools/media.d.ts +70 -0
  293. package/dist/src/tools/media.d.ts.map +1 -0
  294. package/dist/src/tools/media.js +248 -0
  295. package/dist/src/tools/media.js.map +1 -0
  296. package/dist/src/tools/pages.d.ts +32 -0
  297. package/dist/src/tools/pages.d.ts.map +1 -0
  298. package/dist/src/tools/pages.js +215 -0
  299. package/dist/src/tools/pages.js.map +1 -0
  300. package/dist/src/tools/performance.d.ts +73 -0
  301. package/dist/src/tools/performance.d.ts.map +1 -0
  302. package/dist/src/tools/performance.js +922 -0
  303. package/dist/src/tools/performance.js.map +1 -0
  304. package/dist/src/tools/posts/PostHandlers.d.ts +46 -0
  305. package/dist/src/tools/posts/PostHandlers.d.ts.map +1 -0
  306. package/dist/src/tools/posts/PostHandlers.js +400 -0
  307. package/dist/src/tools/posts/PostHandlers.js.map +1 -0
  308. package/dist/src/tools/posts/PostToolDefinitions.d.ts +37 -0
  309. package/dist/src/tools/posts/PostToolDefinitions.d.ts.map +1 -0
  310. package/dist/src/tools/posts/PostToolDefinitions.js +236 -0
  311. package/dist/src/tools/posts/PostToolDefinitions.js.map +1 -0
  312. package/dist/src/tools/posts/index.d.ts +138 -0
  313. package/dist/src/tools/posts/index.d.ts.map +1 -0
  314. package/dist/src/tools/posts/index.js +163 -0
  315. package/dist/src/tools/posts/index.js.map +1 -0
  316. package/dist/src/tools/posts.d.ts +15 -0
  317. package/dist/src/tools/posts.d.ts.map +1 -0
  318. package/dist/src/tools/posts.js +16 -0
  319. package/dist/src/tools/posts.js.map +1 -0
  320. package/dist/src/tools/site.d.ts +32 -0
  321. package/dist/src/tools/site.d.ts.map +1 -0
  322. package/dist/src/tools/site.js +234 -0
  323. package/dist/src/tools/site.js.map +1 -0
  324. package/dist/src/tools/taxonomies.d.ts +36 -0
  325. package/dist/src/tools/taxonomies.d.ts.map +1 -0
  326. package/dist/src/tools/taxonomies.js +286 -0
  327. package/dist/src/tools/taxonomies.js.map +1 -0
  328. package/dist/src/tools/users.d.ts +33 -0
  329. package/dist/src/tools/users.d.ts.map +1 -0
  330. package/dist/src/tools/users.js +308 -0
  331. package/dist/src/tools/users.js.map +1 -0
  332. package/dist/src/types/client.d.ts +223 -0
  333. package/dist/src/types/client.d.ts.map +1 -0
  334. package/dist/src/types/client.js +97 -0
  335. package/dist/src/types/client.js.map +1 -0
  336. package/dist/src/types/enhanced.d.ts +237 -0
  337. package/dist/src/types/enhanced.d.ts.map +1 -0
  338. package/dist/src/types/enhanced.js +49 -0
  339. package/dist/src/types/enhanced.js.map +1 -0
  340. package/dist/src/types/index.d.ts +160 -0
  341. package/dist/src/types/index.d.ts.map +1 -0
  342. package/dist/src/types/index.js +14 -0
  343. package/dist/src/types/index.js.map +1 -0
  344. package/dist/src/types/mcp.d.ts +178 -0
  345. package/dist/src/types/mcp.d.ts.map +1 -0
  346. package/dist/src/types/mcp.js +7 -0
  347. package/dist/src/types/mcp.js.map +1 -0
  348. package/dist/src/types/requests.d.ts +322 -0
  349. package/dist/src/types/requests.d.ts.map +1 -0
  350. package/dist/src/types/requests.js +8 -0
  351. package/dist/src/types/requests.js.map +1 -0
  352. package/dist/src/types/tools.d.ts +506 -0
  353. package/dist/src/types/tools.d.ts.map +1 -0
  354. package/dist/src/types/tools.js +8 -0
  355. package/dist/src/types/tools.js.map +1 -0
  356. package/dist/src/types/wordpress.d.ts +471 -0
  357. package/dist/src/types/wordpress.d.ts.map +1 -0
  358. package/dist/src/types/wordpress.js +14 -0
  359. package/dist/src/types/wordpress.js.map +1 -0
  360. package/dist/src/utils/debug.d.ts +71 -0
  361. package/dist/src/utils/debug.d.ts.map +1 -0
  362. package/dist/src/utils/debug.js +235 -0
  363. package/dist/src/utils/debug.js.map +1 -0
  364. package/dist/src/utils/enhancedError.d.ts +61 -0
  365. package/dist/src/utils/enhancedError.d.ts.map +1 -0
  366. package/dist/src/utils/enhancedError.js +221 -0
  367. package/dist/src/utils/enhancedError.js.map +1 -0
  368. package/dist/src/utils/error.d.ts +17 -0
  369. package/dist/src/utils/error.d.ts.map +1 -0
  370. package/dist/src/utils/error.js +108 -0
  371. package/dist/src/utils/error.js.map +1 -0
  372. package/dist/src/utils/logger.d.ts +106 -0
  373. package/dist/src/utils/logger.d.ts.map +1 -0
  374. package/dist/src/utils/logger.js +280 -0
  375. package/dist/src/utils/logger.js.map +1 -0
  376. package/dist/src/utils/streaming.d.ts +104 -0
  377. package/dist/src/utils/streaming.d.ts.map +1 -0
  378. package/dist/src/utils/streaming.js +331 -0
  379. package/dist/src/utils/streaming.js.map +1 -0
  380. package/dist/src/utils/toolWrapper.d.ts +42 -0
  381. package/dist/src/utils/toolWrapper.d.ts.map +1 -0
  382. package/dist/src/utils/toolWrapper.js +101 -0
  383. package/dist/src/utils/toolWrapper.js.map +1 -0
  384. package/dist/src/utils/validation/core.d.ts +21 -0
  385. package/dist/src/utils/validation/core.d.ts.map +1 -0
  386. package/dist/src/utils/validation/core.js +71 -0
  387. package/dist/src/utils/validation/core.js.map +1 -0
  388. package/dist/src/utils/validation/index.d.ts +25 -0
  389. package/dist/src/utils/validation/index.d.ts.map +1 -0
  390. package/dist/src/utils/validation/index.js +29 -0
  391. package/dist/src/utils/validation/index.js.map +1 -0
  392. package/dist/src/utils/validation/network.d.ts +19 -0
  393. package/dist/src/utils/validation/network.d.ts.map +1 -0
  394. package/dist/src/utils/validation/network.js +93 -0
  395. package/dist/src/utils/validation/network.js.map +1 -0
  396. package/dist/src/utils/validation/rateLimit.d.ts +21 -0
  397. package/dist/src/utils/validation/rateLimit.d.ts.map +1 -0
  398. package/dist/src/utils/validation/rateLimit.js +43 -0
  399. package/dist/src/utils/validation/rateLimit.js.map +1 -0
  400. package/dist/src/utils/validation/security.d.ts +29 -0
  401. package/dist/src/utils/validation/security.d.ts.map +1 -0
  402. package/dist/src/utils/validation/security.js +327 -0
  403. package/dist/src/utils/validation/security.js.map +1 -0
  404. package/dist/src/utils/validation/wordpress.d.ts +31 -0
  405. package/dist/src/utils/validation/wordpress.d.ts.map +1 -0
  406. package/dist/src/utils/validation/wordpress.js +146 -0
  407. package/dist/src/utils/validation/wordpress.js.map +1 -0
  408. package/dist/src/utils/validation.d.ts +15 -0
  409. package/dist/src/utils/validation.d.ts.map +1 -0
  410. package/dist/src/utils/validation.js +27 -0
  411. package/dist/src/utils/validation.js.map +1 -0
  412. package/dist/tests/vitest.setup.d.ts +6 -0
  413. package/dist/tests/vitest.setup.d.ts.map +1 -0
  414. package/dist/tests/vitest.setup.js +39 -0
  415. package/dist/tests/vitest.setup.js.map +1 -0
  416. package/dist/tools/BaseToolManager.d.ts +47 -11
  417. package/dist/tools/BaseToolManager.d.ts.map +1 -1
  418. package/dist/tools/BaseToolManager.js +168 -29
  419. package/dist/tools/BaseToolManager.js.map +1 -1
  420. package/dist/tools/auth.d.ts +16 -10
  421. package/dist/tools/auth.d.ts.map +1 -1
  422. package/dist/tools/auth.js +3 -2
  423. package/dist/tools/auth.js.map +1 -1
  424. package/dist/tools/cache.d.ts +30 -30
  425. package/dist/tools/cache.d.ts.map +1 -1
  426. package/dist/tools/cache.js +1 -6
  427. package/dist/tools/cache.js.map +1 -1
  428. package/dist/tools/comments.d.ts +20 -20
  429. package/dist/tools/comments.d.ts.map +1 -1
  430. package/dist/tools/comments.js +16 -9
  431. package/dist/tools/comments.js.map +1 -1
  432. package/dist/tools/media.d.ts +18 -16
  433. package/dist/tools/media.d.ts.map +1 -1
  434. package/dist/tools/media.js +16 -15
  435. package/dist/tools/media.js.map +1 -1
  436. package/dist/tools/pages.d.ts +19 -17
  437. package/dist/tools/pages.d.ts.map +1 -1
  438. package/dist/tools/pages.js +16 -12
  439. package/dist/tools/pages.js.map +1 -1
  440. package/dist/tools/performance.d.ts +11 -1
  441. package/dist/tools/performance.d.ts.map +1 -1
  442. package/dist/tools/performance.js +67 -34
  443. package/dist/tools/performance.js.map +1 -1
  444. package/dist/tools/posts/PostHandlers.d.ts +46 -0
  445. package/dist/tools/posts/PostHandlers.d.ts.map +1 -0
  446. package/dist/tools/posts/PostHandlers.js +400 -0
  447. package/dist/tools/posts/PostHandlers.js.map +1 -0
  448. package/dist/tools/posts/PostToolDefinitions.d.ts +37 -0
  449. package/dist/tools/posts/PostToolDefinitions.d.ts.map +1 -0
  450. package/dist/tools/posts/PostToolDefinitions.js +236 -0
  451. package/dist/tools/posts/PostToolDefinitions.js.map +1 -0
  452. package/dist/tools/posts/index.d.ts +138 -0
  453. package/dist/tools/posts/index.d.ts.map +1 -0
  454. package/dist/tools/posts/index.js +163 -0
  455. package/dist/tools/posts/index.js.map +1 -0
  456. package/dist/tools/posts.d.ts +10 -246
  457. package/dist/tools/posts.d.ts.map +1 -1
  458. package/dist/tools/posts.js +11 -723
  459. package/dist/tools/posts.js.map +1 -1
  460. package/dist/tools/site.d.ts +19 -18
  461. package/dist/tools/site.d.ts.map +1 -1
  462. package/dist/tools/site.js +14 -10
  463. package/dist/tools/site.js.map +1 -1
  464. package/dist/tools/taxonomies.d.ts +23 -24
  465. package/dist/tools/taxonomies.d.ts.map +1 -1
  466. package/dist/tools/taxonomies.js +24 -18
  467. package/dist/tools/taxonomies.js.map +1 -1
  468. package/dist/tools/users.d.ts +20 -15
  469. package/dist/tools/users.d.ts.map +1 -1
  470. package/dist/tools/users.js +12 -8
  471. package/dist/tools/users.js.map +1 -1
  472. package/dist/types/client.d.ts +48 -41
  473. package/dist/types/client.d.ts.map +1 -1
  474. package/dist/types/client.js +30 -5
  475. package/dist/types/client.js.map +1 -1
  476. package/dist/types/enhanced.d.ts +237 -0
  477. package/dist/types/enhanced.d.ts.map +1 -0
  478. package/dist/types/enhanced.js +49 -0
  479. package/dist/types/enhanced.js.map +1 -0
  480. package/dist/types/index.d.ts +15 -12
  481. package/dist/types/index.d.ts.map +1 -1
  482. package/dist/types/index.js +2 -0
  483. package/dist/types/index.js.map +1 -1
  484. package/dist/types/mcp.d.ts +12 -12
  485. package/dist/types/mcp.d.ts.map +1 -1
  486. package/dist/types/requests.d.ts +322 -0
  487. package/dist/types/requests.d.ts.map +1 -0
  488. package/dist/types/requests.js +8 -0
  489. package/dist/types/requests.js.map +1 -0
  490. package/dist/types/tools.d.ts +506 -0
  491. package/dist/types/tools.d.ts.map +1 -0
  492. package/dist/types/tools.js +8 -0
  493. package/dist/types/tools.js.map +1 -0
  494. package/dist/types/wordpress.d.ts +43 -15
  495. package/dist/types/wordpress.d.ts.map +1 -1
  496. package/dist/types/wordpress.js +8 -1
  497. package/dist/types/wordpress.js.map +1 -1
  498. package/dist/utils/debug.d.ts +19 -11
  499. package/dist/utils/debug.d.ts.map +1 -1
  500. package/dist/utils/debug.js +46 -10
  501. package/dist/utils/debug.js.map +1 -1
  502. package/dist/utils/enhancedError.d.ts +8 -8
  503. package/dist/utils/enhancedError.d.ts.map +1 -1
  504. package/dist/utils/enhancedError.js.map +1 -1
  505. package/dist/utils/error.d.ts +2 -4
  506. package/dist/utils/error.d.ts.map +1 -1
  507. package/dist/utils/error.js +42 -5
  508. package/dist/utils/error.js.map +1 -1
  509. package/dist/utils/logger.d.ts +106 -0
  510. package/dist/utils/logger.d.ts.map +1 -0
  511. package/dist/utils/logger.js +280 -0
  512. package/dist/utils/logger.js.map +1 -0
  513. package/dist/utils/streaming.d.ts +9 -9
  514. package/dist/utils/streaming.d.ts.map +1 -1
  515. package/dist/utils/streaming.js +71 -52
  516. package/dist/utils/streaming.js.map +1 -1
  517. package/dist/utils/toolWrapper.d.ts +9 -7
  518. package/dist/utils/toolWrapper.d.ts.map +1 -1
  519. package/dist/utils/toolWrapper.js.map +1 -1
  520. package/dist/utils/validation/core.d.ts +21 -0
  521. package/dist/utils/validation/core.d.ts.map +1 -0
  522. package/dist/utils/validation/core.js +71 -0
  523. package/dist/utils/validation/core.js.map +1 -0
  524. package/dist/utils/validation/index.d.ts +25 -0
  525. package/dist/utils/validation/index.d.ts.map +1 -0
  526. package/dist/utils/validation/index.js +29 -0
  527. package/dist/utils/validation/index.js.map +1 -0
  528. package/dist/utils/validation/network.d.ts +19 -0
  529. package/dist/utils/validation/network.d.ts.map +1 -0
  530. package/dist/utils/validation/network.js +93 -0
  531. package/dist/utils/validation/network.js.map +1 -0
  532. package/dist/utils/validation/rateLimit.d.ts +21 -0
  533. package/dist/utils/validation/rateLimit.d.ts.map +1 -0
  534. package/dist/utils/validation/rateLimit.js +43 -0
  535. package/dist/utils/validation/rateLimit.js.map +1 -0
  536. package/dist/utils/validation/security.d.ts +29 -0
  537. package/dist/utils/validation/security.d.ts.map +1 -0
  538. package/dist/utils/validation/security.js +327 -0
  539. package/dist/utils/validation/security.js.map +1 -0
  540. package/dist/utils/validation/wordpress.d.ts +31 -0
  541. package/dist/utils/validation/wordpress.d.ts.map +1 -0
  542. package/dist/utils/validation/wordpress.js +146 -0
  543. package/dist/utils/validation/wordpress.js.map +1 -0
  544. package/dist/utils/validation.d.ts +13 -82
  545. package/dist/utils/validation.d.ts.map +1 -1
  546. package/dist/utils/validation.js +25 -343
  547. package/dist/utils/validation.js.map +1 -1
  548. package/docs/BADGE_UPDATES.md +132 -0
  549. package/docs/CI_CD_IMPROVEMENTS.md +191 -0
  550. package/docs/INCREMENTAL_COVERAGE.md +183 -0
  551. package/docs/INSTALLATION.md +4 -2
  552. package/docs/TROUBLESHOOTING.md +2 -1
  553. package/docs/api/README.md +3 -1
  554. package/docs/api/openapi.json +5 -1
  555. package/docs/api/summary.json +1 -1
  556. package/docs/api/tools/wp_create_post.md +12 -14
  557. package/docs/developer/TESTING.md +24 -19
  558. package/docs/examples/claude-desktop-config.md +1 -1
  559. package/docs/examples/docker-production.md +100 -93
  560. package/docs/examples/multi-site-setup.md +5 -4
  561. package/docs/examples/single-site-setup.md +3 -4
  562. package/docs/examples/use-case-workflows.md +4 -5
  563. package/docs/integrations/claude-desktop.md +39 -34
  564. package/docs/integrations/cline.md +4 -4
  565. package/docs/integrations/vs-code.md +9 -8
  566. package/docs/user-guides/DXT_INSTALLATION.md +2 -1
  567. package/docs/user-guides/SMITHERY_SETUP.md +10 -10
  568. package/package.json +57 -39
  569. package/src/cache/CacheInvalidation.ts +12 -5
  570. package/src/cache/CacheManager.ts +18 -15
  571. package/src/cache/HttpCacheWrapper.ts +30 -59
  572. package/src/cache/__tests__/HttpCacheWrapper.test.ts +6 -5
  573. package/src/cache/index.ts +3 -14
  574. package/src/client/CachedWordPressClient.ts +32 -30
  575. package/src/client/MockWordPressClient.ts +4 -2
  576. package/src/client/api.ts +186 -64
  577. package/src/client/auth.ts +15 -40
  578. package/src/client/managers/AuthenticationManager.ts +337 -77
  579. package/src/client/managers/BaseManager.ts +18 -30
  580. package/src/client/managers/RequestManager.ts +39 -44
  581. package/src/config/Config.ts +308 -0
  582. package/src/config/ConfigurationSchema.ts +23 -2
  583. package/src/config/ServerConfiguration.ts +73 -49
  584. package/src/docs/DocumentationGenerator.ts +50 -39
  585. package/src/docs/MarkdownFormatter.ts +19 -29
  586. package/src/dxt-entry.cjs +26 -16
  587. package/src/dxt-entry.ts +17 -27
  588. package/src/index.ts +42 -28
  589. package/src/performance/MetricsCollector.ts +108 -86
  590. package/src/performance/PerformanceAnalytics.ts +69 -164
  591. package/src/performance/PerformanceMonitor.ts +32 -47
  592. package/src/performance/index.ts +2 -10
  593. package/src/security/AISecurityScanner.ts +22 -12
  594. package/src/security/AutomatedRemediation.ts +49 -18
  595. package/src/security/InputValidator.ts +9 -6
  596. package/src/security/SecurityCIPipeline.ts +53 -37
  597. package/src/security/SecurityConfig.ts +22 -22
  598. package/src/security/SecurityConfigManager.ts +23 -19
  599. package/src/security/SecurityMonitoring.ts +24 -21
  600. package/src/security/SecurityReviewer.ts +10 -7
  601. package/src/security/index.ts +64 -29
  602. package/src/server/ConnectionTester.ts +120 -31
  603. package/src/server/ToolRegistry.ts +31 -21
  604. package/src/tools/BaseToolManager.ts +286 -33
  605. package/src/tools/auth.ts +20 -8
  606. package/src/tools/cache.ts +5 -15
  607. package/src/tools/comments.ts +34 -48
  608. package/src/tools/media.ts +41 -53
  609. package/src/tools/pages.ts +32 -54
  610. package/src/tools/performance.ts +141 -176
  611. package/src/tools/posts/PostHandlers.ts +474 -0
  612. package/src/tools/posts/PostToolDefinitions.ts +250 -0
  613. package/src/tools/posts/index.ts +192 -0
  614. package/src/tools/posts.ts +24 -780
  615. package/src/tools/site.ts +34 -19
  616. package/src/tools/taxonomies.ts +41 -57
  617. package/src/tools/users.ts +28 -16
  618. package/src/types/client.ts +114 -138
  619. package/src/types/enhanced.ts +318 -0
  620. package/src/types/index.ts +51 -30
  621. package/src/types/mcp.ts +20 -42
  622. package/src/types/requests.ts +378 -0
  623. package/src/types/tools.ts +608 -0
  624. package/src/types/wordpress.ts +56 -34
  625. package/src/utils/debug.ts +77 -59
  626. package/src/utils/enhancedError.ts +8 -8
  627. package/src/utils/error.ts +53 -31
  628. package/src/utils/logger.ts +351 -0
  629. package/src/utils/streaming.ts +86 -68
  630. package/src/utils/toolWrapper.ts +10 -12
  631. package/src/utils/validation/core.ts +108 -0
  632. package/src/utils/validation/index.ts +36 -0
  633. package/src/utils/validation/network.ts +132 -0
  634. package/src/utils/validation/rateLimit.ts +54 -0
  635. package/src/utils/validation/security.ts +361 -0
  636. package/src/utils/validation/wordpress.ts +180 -0
  637. package/src/utils/validation.ts +47 -470
  638. package/dist/cache/__tests__/CacheInvalidation.test.d.ts +0 -5
  639. package/dist/cache/__tests__/CacheInvalidation.test.d.ts.map +0 -1
  640. package/dist/cache/__tests__/CacheInvalidation.test.js +0 -238
  641. package/dist/cache/__tests__/CacheInvalidation.test.js.map +0 -1
  642. package/dist/cache/__tests__/CacheManager.test.d.ts +0 -5
  643. package/dist/cache/__tests__/CacheManager.test.d.ts.map +0 -1
  644. package/dist/cache/__tests__/CacheManager.test.js +0 -233
  645. package/dist/cache/__tests__/CacheManager.test.js.map +0 -1
  646. package/dist/cache/__tests__/CachedWordPressClient.test.d.ts +0 -5
  647. package/dist/cache/__tests__/CachedWordPressClient.test.d.ts.map +0 -1
  648. package/dist/cache/__tests__/CachedWordPressClient.test.js +0 -231
  649. package/dist/cache/__tests__/CachedWordPressClient.test.js.map +0 -1
  650. package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts +0 -5
  651. package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts.map +0 -1
  652. package/dist/cache/__tests__/HttpCacheWrapper.test.js +0 -299
  653. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +0 -1
package/src/client/api.ts CHANGED
@@ -17,6 +17,7 @@ import type {
17
17
  ClientStats,
18
18
  } from "../types/client.js";
19
19
  import { WordPressAPIError, AuthenticationError, RateLimitError } from "../types/client.js";
20
+ import { config } from "../config/Config.js";
20
21
  import type {
21
22
  WordPressPost,
22
23
  WordPressPage,
@@ -45,16 +46,19 @@ import type {
45
46
  UpdateTagRequest,
46
47
  UploadMediaRequest,
47
48
  UpdateMediaRequest,
49
+ WordPressSiteInfo,
50
+ WordPressSearchResult,
48
51
  } from "../types/wordpress.js";
49
52
  import { debug, logError, startTimer } from "../utils/debug.js";
53
+ import type { QueuedRequest } from "../types/requests.js";
50
54
 
51
55
  /**
52
56
  * WordPress REST API Client
53
- *
57
+ *
54
58
  * A comprehensive client for interacting with the WordPress REST API v2.
55
59
  * Provides full CRUD operations for posts, pages, media, users, comments,
56
60
  * categories, tags, and site settings with robust error handling and performance optimization.
57
- *
61
+ *
58
62
  * Features:
59
63
  * - Multiple authentication methods (App Passwords, JWT, Basic Auth, API Key)
60
64
  * - Automatic retry logic with exponential backoff
@@ -63,7 +67,7 @@ import { debug, logError, startTimer } from "../utils/debug.js";
63
67
  * - Performance monitoring and request statistics
64
68
  * - Caching support for improved performance
65
69
  * - Multi-site configuration support
66
- *
70
+ *
67
71
  * @example
68
72
  * ```typescript
69
73
  * // Initialize with app password authentication
@@ -75,14 +79,14 @@ import { debug, logError, startTimer } from "../utils/debug.js";
75
79
  * password: 'xxxx xxxx xxxx xxxx xxxx xxxx'
76
80
  * }
77
81
  * });
78
- *
82
+ *
79
83
  * // Create a new post
80
84
  * const post = await client.createPost({
81
85
  * title: 'My New Post',
82
86
  * content: '<p>This is the content</p>',
83
87
  * status: 'publish'
84
88
  * });
85
- *
89
+ *
86
90
  * // List posts with filtering
87
91
  * const posts = await client.getPosts({
88
92
  * search: 'WordPress',
@@ -90,7 +94,7 @@ import { debug, logError, startTimer } from "../utils/debug.js";
90
94
  * per_page: 10
91
95
  * });
92
96
  * ```
93
- *
97
+ *
94
98
  * @since 1.0.0
95
99
  * @author MCP WordPress Team
96
100
  * @implements {IWordPressClient}
@@ -101,7 +105,7 @@ export class WordPressClient implements IWordPressClient {
101
105
  private timeout: number;
102
106
  private maxRetries: number;
103
107
  private auth: AuthConfig;
104
- private requestQueue: any[] = [];
108
+ private requestQueue: QueuedRequest[] = [];
105
109
  private lastRequestTime: number = 0;
106
110
  private requestInterval: number;
107
111
  private authenticated: boolean = false;
@@ -110,10 +114,10 @@ export class WordPressClient implements IWordPressClient {
110
114
 
111
115
  /**
112
116
  * Creates a new WordPress API client instance.
113
- *
117
+ *
114
118
  * Initializes the client with configuration options for connecting to a WordPress site.
115
119
  * Supports multiple authentication methods and automatic environment variable detection.
116
- *
120
+ *
117
121
  * @param {Partial<WordPressClientConfig>} [options={}] - Configuration options for the client
118
122
  * @param {string} [options.baseUrl] - WordPress site URL (falls back to WORDPRESS_SITE_URL env var)
119
123
  * @param {number} [options.timeout=30000] - Request timeout in milliseconds
@@ -121,7 +125,7 @@ export class WordPressClient implements IWordPressClient {
121
125
  * @param {AuthConfig} [options.auth] - Authentication configuration (auto-detected from env if not provided)
122
126
  * @param {boolean} [options.enableCache=true] - Whether to enable response caching
123
127
  * @param {number} [options.cacheMaxAge=300000] - Cache max age in milliseconds (5 minutes default)
124
- *
128
+ *
125
129
  * @example
126
130
  * ```typescript
127
131
  * // Basic configuration with app password
@@ -133,11 +137,11 @@ export class WordPressClient implements IWordPressClient {
133
137
  * password: 'xxxx xxxx xxxx xxxx xxxx xxxx'
134
138
  * }
135
139
  * });
136
- *
140
+ *
137
141
  * // Configuration with environment variables
138
142
  * // Set WORDPRESS_SITE_URL, WORDPRESS_USERNAME, WORDPRESS_APP_PASSWORD
139
143
  * const client = new WordPressClient(); // Auto-detects from env
140
- *
144
+ *
141
145
  * // Custom timeout and retry settings
142
146
  * const client = new WordPressClient({
143
147
  * baseUrl: 'https://mysite.com',
@@ -146,22 +150,26 @@ export class WordPressClient implements IWordPressClient {
146
150
  * auth: { method: 'app-password', username: 'user', password: 'pass' }
147
151
  * });
148
152
  * ```
149
- *
153
+ *
150
154
  * @throws {Error} When required configuration is missing or invalid
151
- *
155
+ *
152
156
  * @since 1.0.0
153
157
  */
154
158
  constructor(options: Partial<WordPressClientConfig> = {}) {
155
- this.baseUrl = options.baseUrl || process.env.WORDPRESS_SITE_URL || "";
159
+ const cfg = config();
160
+ const baseUrl = options.baseUrl || cfg.wordpress.siteUrl || "";
161
+
162
+ // Validate and sanitize base URL
163
+ this.baseUrl = this.validateAndSanitizeUrl(baseUrl);
156
164
  this.apiUrl = "";
157
- this.timeout = options.timeout || parseInt(process.env.WORDPRESS_TIMEOUT || "30000");
158
- this.maxRetries = options.maxRetries || parseInt(process.env.WORDPRESS_MAX_RETRIES || "3");
165
+ this.timeout = options.timeout || cfg.wordpress.timeout;
166
+ this.maxRetries = options.maxRetries || cfg.wordpress.maxRetries;
159
167
 
160
168
  // Authentication configuration
161
169
  this.auth = options.auth || this.getAuthFromEnv();
162
170
 
163
171
  // Rate limiting
164
- this.requestInterval = 60000 / parseInt(process.env.RATE_LIMIT || "60");
172
+ this.requestInterval = 60000 / cfg.security.rateLimit;
165
173
 
166
174
  // Initialize stats
167
175
  this._stats = {
@@ -198,58 +206,101 @@ export class WordPressClient implements IWordPressClient {
198
206
  return this.baseUrl;
199
207
  }
200
208
 
209
+ /**
210
+ * Validate and sanitize URL for security
211
+ */
212
+ private validateAndSanitizeUrl(url: string): string {
213
+ if (!url) {
214
+ throw new Error("WordPress site URL is required");
215
+ }
216
+
217
+ try {
218
+ const parsed = new URL(url);
219
+
220
+ // Only allow HTTP/HTTPS protocols
221
+ if (!["http:", "https:"].includes(parsed.protocol)) {
222
+ throw new Error("Only HTTP and HTTPS protocols are allowed");
223
+ }
224
+
225
+ // Prevent localhost/private IP access in production
226
+ if (config().app.isProduction) {
227
+ const hostname = parsed.hostname.toLowerCase();
228
+ if (
229
+ hostname === "localhost" ||
230
+ hostname === "127.0.0.1" ||
231
+ hostname === "::1" ||
232
+ hostname.match(/^10\./) ||
233
+ hostname.match(/^172\.(1[6-9]|2[0-9]|3[01])\./) ||
234
+ hostname.match(/^192\.168\./)
235
+ ) {
236
+ throw new Error("Private/localhost URLs not allowed in production");
237
+ }
238
+ }
239
+
240
+ // Return clean URL without query parameters or fragments
241
+ return `${parsed.protocol}//${parsed.host}${parsed.pathname}`.replace(/\/$/, "");
242
+ } catch (error) {
243
+ if (error instanceof TypeError) {
244
+ throw new Error("Invalid WordPress site URL format");
245
+ }
246
+ throw error;
247
+ }
248
+ }
249
+
201
250
  private getAuthFromEnv(): AuthConfig {
202
- const authMethod = process.env.WORDPRESS_AUTH_METHOD as AuthMethod;
251
+ const cfg = config();
252
+ const wp = cfg.wordpress;
253
+ const authMethod = wp.authMethod as AuthMethod;
203
254
 
204
255
  // Use explicit auth method if set
205
- if (authMethod === "app-password" && process.env.WORDPRESS_USERNAME && process.env.WORDPRESS_APP_PASSWORD) {
256
+ if (authMethod === "app-password" && wp.username && wp.appPassword) {
206
257
  return {
207
258
  method: "app-password",
208
- username: process.env.WORDPRESS_USERNAME,
209
- appPassword: process.env.WORDPRESS_APP_PASSWORD,
259
+ username: wp.username,
260
+ appPassword: wp.appPassword,
210
261
  };
211
262
  }
212
263
 
213
264
  // Try Application Password first (fallback)
214
- if (process.env.WORDPRESS_USERNAME && process.env.WORDPRESS_APP_PASSWORD) {
265
+ if (wp.username && wp.appPassword) {
215
266
  return {
216
267
  method: "app-password",
217
- username: process.env.WORDPRESS_USERNAME,
218
- appPassword: process.env.WORDPRESS_APP_PASSWORD,
268
+ username: wp.username,
269
+ appPassword: wp.appPassword,
219
270
  };
220
271
  }
221
272
 
222
273
  // Try JWT
223
- if (process.env.WORDPRESS_JWT_SECRET && process.env.WORDPRESS_USERNAME && process.env.WORDPRESS_PASSWORD) {
274
+ if (wp.jwtSecret && wp.username && wp.password) {
224
275
  return {
225
276
  method: "jwt",
226
- secret: process.env.WORDPRESS_JWT_SECRET,
227
- username: process.env.WORDPRESS_USERNAME,
228
- password: process.env.WORDPRESS_PASSWORD,
277
+ secret: wp.jwtSecret,
278
+ username: wp.username,
279
+ password: wp.password,
229
280
  };
230
281
  }
231
282
 
232
283
  // Try API Key
233
- if (process.env.WORDPRESS_API_KEY) {
284
+ if (wp.apiKey) {
234
285
  return {
235
286
  method: "api-key",
236
- apiKey: process.env.WORDPRESS_API_KEY,
287
+ apiKey: wp.apiKey,
237
288
  };
238
289
  }
239
290
 
240
291
  // Try Cookie
241
- if (process.env.WORDPRESS_COOKIE_NONCE) {
292
+ if (wp.cookieNonce) {
242
293
  return {
243
294
  method: "cookie",
244
- nonce: process.env.WORDPRESS_COOKIE_NONCE,
295
+ nonce: wp.cookieNonce,
245
296
  };
246
297
  }
247
298
 
248
299
  // Default to basic authentication
249
300
  return {
250
301
  method: "basic",
251
- username: process.env.WORDPRESS_USERNAME || "",
252
- password: process.env.WORDPRESS_PASSWORD || process.env.WORDPRESS_APP_PASSWORD || "",
302
+ username: wp.username || "",
303
+ password: wp.password || wp.appPassword || "",
253
304
  };
254
305
  }
255
306
 
@@ -442,10 +493,10 @@ export class WordPressClient implements IWordPressClient {
442
493
  /**
443
494
  * Make authenticated request to WordPress REST API
444
495
  */
445
- async request<T = any>(
496
+ async request<T = unknown>(
446
497
  method: HTTPMethod,
447
498
  endpoint: string,
448
- data: any = null,
499
+ data: unknown = null,
449
500
  options: RequestOptions = {},
450
501
  ): Promise<T> {
451
502
  const timer = startTimer();
@@ -469,7 +520,7 @@ export class WordPressClient implements IWordPressClient {
469
520
  const requestTimeout = options.timeout || this.timeout;
470
521
  const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
471
522
 
472
- const fetchOptions: any = {
523
+ const fetchOptions: RequestInit & { headers: Record<string, string> } = {
473
524
  ...options, // Spread options first
474
525
  method,
475
526
  headers, // Headers come after to ensure auth headers aren't overridden
@@ -478,17 +529,21 @@ export class WordPressClient implements IWordPressClient {
478
529
 
479
530
  // Add body for POST/PUT/PATCH requests
480
531
  if (data && ["POST", "PUT", "PATCH"].includes(method)) {
481
- if (data instanceof FormData || (data && typeof data.append === "function")) {
532
+ if (
533
+ data instanceof FormData ||
534
+ (typeof data === "object" && data && "append" in data && typeof data.append === "function")
535
+ ) {
482
536
  // For FormData, check if it has getHeaders method (form-data package)
483
- if (data && typeof data.getHeaders === "function") {
537
+ if (typeof (data as { getHeaders?: () => Record<string, string> }).getHeaders === "function") {
484
538
  // Use headers from form-data package
485
- const formHeaders = data.getHeaders();
539
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
540
+ const formHeaders = (data as any).getHeaders();
486
541
  Object.assign(headers, formHeaders);
487
542
  } else {
488
543
  // For native FormData, don't set Content-Type (let fetch set it with boundary)
489
544
  delete headers["Content-Type"];
490
545
  }
491
- fetchOptions.body = data;
546
+ fetchOptions.body = data as FormData;
492
547
  } else if (Buffer.isBuffer(data)) {
493
548
  // For Buffer data (manual multipart), keep Content-Type from headers
494
549
  fetchOptions.body = data;
@@ -550,6 +605,54 @@ export class WordPressClient implements IWordPressClient {
550
605
  );
551
606
  }
552
607
 
608
+ // Fallback for 404 errors - try index.php approach for REST API
609
+ if (response.status === 404 && attempt === 0 && url.includes("/wp-json/wp/v2")) {
610
+ debug.log(`404 on pretty permalinks, trying index.php approach`);
611
+
612
+ // Parse the URL to handle query parameters correctly
613
+ const urlObj = new URL(url);
614
+ const endpoint = urlObj.pathname.replace("/wp-json/wp/v2", "");
615
+ const queryParams = urlObj.searchParams.toString();
616
+
617
+ let fallbackUrl = `${urlObj.origin}/index.php?rest_route=/wp/v2${endpoint}`;
618
+ if (queryParams) {
619
+ fallbackUrl += `&${queryParams}`;
620
+ }
621
+
622
+ try {
623
+ // Create a new timeout for the fallback request
624
+ const fallbackController = new AbortController();
625
+ const fallbackTimeoutId = setTimeout(() => {
626
+ fallbackController.abort();
627
+ }, requestTimeout);
628
+
629
+ const fallbackOptions = { ...fetchOptions, signal: fallbackController.signal };
630
+ const fallbackResponse = await fetch(fallbackUrl, fallbackOptions);
631
+ clearTimeout(fallbackTimeoutId);
632
+
633
+ if (fallbackResponse.ok) {
634
+ const responseText = await fallbackResponse.text();
635
+ if (!responseText) {
636
+ this._stats.successfulRequests++;
637
+ const duration = timer.end();
638
+ this.updateAverageResponseTime(duration);
639
+ return null as T;
640
+ }
641
+
642
+ const result = JSON.parse(responseText);
643
+ this._stats.successfulRequests++;
644
+ const duration = timer.end();
645
+ this.updateAverageResponseTime(duration);
646
+ return result;
647
+ } else {
648
+ // If fallback also fails, continue with original error
649
+ debug.log(`Fallback also failed with status ${fallbackResponse.status}`);
650
+ }
651
+ } catch (fallbackError) {
652
+ debug.log(`Fallback request failed: ${(fallbackError as Error).message}`);
653
+ }
654
+ }
655
+
553
656
  throw new WordPressAPIError(errorMessage, response.status);
554
657
  }
555
658
 
@@ -583,7 +686,7 @@ export class WordPressClient implements IWordPressClient {
583
686
  lastError = error as Error;
584
687
 
585
688
  // Handle timeout errors
586
- if ((error as any).name === "AbortError") {
689
+ if ((error as Error & { name?: string }).name === "AbortError") {
587
690
  lastError = new Error(`Request timeout after ${requestTimeout}ms`);
588
691
  }
589
692
 
@@ -623,23 +726,23 @@ export class WordPressClient implements IWordPressClient {
623
726
  }
624
727
 
625
728
  // HTTP method helpers
626
- async get<T = any>(endpoint: string, options?: RequestOptions): Promise<T> {
729
+ async get<T = unknown>(endpoint: string, options?: RequestOptions): Promise<T> {
627
730
  return this.request<T>("GET", endpoint, null, options);
628
731
  }
629
732
 
630
- async post<T = any>(endpoint: string, data?: any, options?: RequestOptions): Promise<T> {
733
+ async post<T = unknown>(endpoint: string, data?: unknown, options?: RequestOptions): Promise<T> {
631
734
  return this.request<T>("POST", endpoint, data, options);
632
735
  }
633
736
 
634
- async put<T = any>(endpoint: string, data?: any, options?: RequestOptions): Promise<T> {
737
+ async put<T = unknown>(endpoint: string, data?: unknown, options?: RequestOptions): Promise<T> {
635
738
  return this.request<T>("PUT", endpoint, data, options);
636
739
  }
637
740
 
638
- async patch<T = any>(endpoint: string, data?: any, options?: RequestOptions): Promise<T> {
741
+ async patch<T = unknown>(endpoint: string, data?: unknown, options?: RequestOptions): Promise<T> {
639
742
  return this.request<T>("PATCH", endpoint, data, options);
640
743
  }
641
744
 
642
- async delete<T = any>(endpoint: string, options?: RequestOptions): Promise<T> {
745
+ async delete<T = unknown>(endpoint: string, options?: RequestOptions): Promise<T> {
643
746
  return this.request<T>("DELETE", endpoint, null, options);
644
747
  }
645
748
 
@@ -647,7 +750,7 @@ export class WordPressClient implements IWordPressClient {
647
750
 
648
751
  // Posts
649
752
  async getPosts(params?: PostQueryParams): Promise<WordPressPost[]> {
650
- const queryString = params ? "?" + new URLSearchParams(params as any).toString() : "";
753
+ const queryString = params ? "?" + new URLSearchParams(params as Record<string, string>).toString() : "";
651
754
  return this.get<WordPressPost[]>(`posts${queryString}`);
652
755
  }
653
756
 
@@ -674,7 +777,10 @@ export class WordPressClient implements IWordPressClient {
674
777
 
675
778
  // Pages
676
779
  async getPages(params?: PostQueryParams): Promise<WordPressPage[]> {
677
- const queryString = params ? "?" + new URLSearchParams(params as any).toString() : "";
780
+ const normalizedParams = params
781
+ ? Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]))
782
+ : undefined;
783
+ const queryString = normalizedParams ? "?" + new URLSearchParams(normalizedParams).toString() : "";
678
784
  return this.get<WordPressPage[]>(`pages${queryString}`);
679
785
  }
680
786
 
@@ -701,7 +807,10 @@ export class WordPressClient implements IWordPressClient {
701
807
 
702
808
  // Media
703
809
  async getMedia(params?: MediaQueryParams): Promise<WordPressMedia[]> {
704
- const queryString = params ? "?" + new URLSearchParams(params as any).toString() : "";
810
+ const normalizedParams = params
811
+ ? Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]))
812
+ : undefined;
813
+ const queryString = normalizedParams ? "?" + new URLSearchParams(normalizedParams).toString() : "";
705
814
  return this.get<WordPressMedia[]>(`media${queryString}`);
706
815
  }
707
816
 
@@ -781,7 +890,10 @@ export class WordPressClient implements IWordPressClient {
781
890
 
782
891
  // Users
783
892
  async getUsers(params?: UserQueryParams): Promise<WordPressUser[]> {
784
- const queryString = params ? "?" + new URLSearchParams(params as any).toString() : "";
893
+ const normalizedParams = params
894
+ ? Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]))
895
+ : undefined;
896
+ const queryString = normalizedParams ? "?" + new URLSearchParams(normalizedParams).toString() : "";
785
897
  return this.get<WordPressUser[]>(`users${queryString}`);
786
898
  }
787
899
 
@@ -809,7 +921,10 @@ export class WordPressClient implements IWordPressClient {
809
921
 
810
922
  // Comments
811
923
  async getComments(params?: CommentQueryParams): Promise<WordPressComment[]> {
812
- const queryString = params ? "?" + new URLSearchParams(params as any).toString() : "";
924
+ const normalizedParams = params
925
+ ? Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]))
926
+ : undefined;
927
+ const queryString = normalizedParams ? "?" + new URLSearchParams(normalizedParams).toString() : "";
813
928
  return this.get<WordPressComment[]>(`comments${queryString}`);
814
929
  }
815
930
 
@@ -845,8 +960,11 @@ export class WordPressClient implements IWordPressClient {
845
960
  }
846
961
 
847
962
  // Taxonomies
848
- async getCategories(params?: any): Promise<WordPressCategory[]> {
849
- const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
963
+ async getCategories(params?: Record<string, string | number | boolean>): Promise<WordPressCategory[]> {
964
+ const normalizedParams = params
965
+ ? Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]))
966
+ : undefined;
967
+ const queryString = normalizedParams ? "?" + new URLSearchParams(normalizedParams).toString() : "";
850
968
  return this.get<WordPressCategory[]>(`categories${queryString}`);
851
969
  }
852
970
 
@@ -867,8 +985,11 @@ export class WordPressClient implements IWordPressClient {
867
985
  return this.delete(`categories/${id}?force=${force}`);
868
986
  }
869
987
 
870
- async getTags(params?: any): Promise<WordPressTag[]> {
871
- const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
988
+ async getTags(params?: Record<string, string | number | boolean>): Promise<WordPressTag[]> {
989
+ const normalizedParams = params
990
+ ? Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]))
991
+ : undefined;
992
+ const queryString = normalizedParams ? "?" + new URLSearchParams(normalizedParams).toString() : "";
872
993
  return this.get<WordPressTag[]>(`tags${queryString}`);
873
994
  }
874
995
 
@@ -898,7 +1019,7 @@ export class WordPressClient implements IWordPressClient {
898
1019
  return this.post<WordPressSiteSettings>("settings", settings);
899
1020
  }
900
1021
 
901
- async getSiteInfo(): Promise<any> {
1022
+ async getSiteInfo(): Promise<WordPressSiteInfo> {
902
1023
  return this.get("");
903
1024
  }
904
1025
 
@@ -912,7 +1033,7 @@ export class WordPressClient implements IWordPressClient {
912
1033
  name: string,
913
1034
  appId?: string,
914
1035
  ): Promise<WordPressApplicationPassword> {
915
- const data: any = { name };
1036
+ const data: Record<string, unknown> = { name };
916
1037
  if (appId) data.app_id = appId;
917
1038
  return this.post<WordPressApplicationPassword>(`users/${userId}/application-passwords`, data);
918
1039
  }
@@ -922,12 +1043,12 @@ export class WordPressClient implements IWordPressClient {
922
1043
  }
923
1044
 
924
1045
  // Search
925
- async search(query: string, types?: string[], subtype?: string): Promise<any[]> {
1046
+ async search(query: string, types?: string[], subtype?: string): Promise<WordPressSearchResult[]> {
926
1047
  const params = new URLSearchParams({ search: query });
927
1048
  if (types) params.append("type", types.join(","));
928
1049
  if (subtype) params.append("subtype", subtype);
929
1050
 
930
- return this.get<any[]>(`search?${params.toString()}`);
1051
+ return this.get<WordPressSearchResult[]>(`search?${params.toString()}`);
931
1052
  }
932
1053
 
933
1054
  // Utility Methods
@@ -940,7 +1061,7 @@ export class WordPressClient implements IWordPressClient {
940
1061
  }
941
1062
  }
942
1063
 
943
- async getServerInfo(): Promise<Record<string, any>> {
1064
+ async getServerInfo(): Promise<Record<string, unknown>> {
944
1065
  return this.get("");
945
1066
  }
946
1067
 
@@ -948,10 +1069,11 @@ export class WordPressClient implements IWordPressClient {
948
1069
  return /^[a-zA-Z0-9\/\-_]+$/.test(endpoint);
949
1070
  }
950
1071
 
951
- buildUrl(endpoint: string, params?: Record<string, any>): string {
1072
+ buildUrl(endpoint: string, params?: Record<string, unknown>): string {
952
1073
  const url = `${this.apiUrl}/${endpoint.replace(/^\/+/, "")}`;
953
1074
  if (params) {
954
- const searchParams = new URLSearchParams(params);
1075
+ const normalizedParams = Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]));
1076
+ const searchParams = new URLSearchParams(normalizedParams);
955
1077
  return `${url}?${searchParams.toString()}`;
956
1078
  }
957
1079
  return url;
@@ -64,9 +64,7 @@ export class WordPressAuth {
64
64
  // Test the credentials by attempting to get current user
65
65
  try {
66
66
  const user = await this.client.getCurrentUser();
67
- logger.log(
68
- `✅ Application Password authentication successful for user: ${user.name} (${user.username})`,
69
- );
67
+ logger.log(`✅ Application Password authentication successful for user: ${user.name} (${user.username})`);
70
68
  return true;
71
69
  } catch (error) {
72
70
  const message =
@@ -83,20 +81,15 @@ export class WordPressAuth {
83
81
  const { username, password } = this.client.config.auth;
84
82
 
85
83
  if (!username || !password) {
86
- throw new Error(
87
- "Basic authentication requires WORDPRESS_USERNAME and WORDPRESS_PASSWORD",
88
- );
84
+ throw new Error("Basic authentication requires WORDPRESS_USERNAME and WORDPRESS_PASSWORD");
89
85
  }
90
86
 
91
87
  try {
92
88
  const user = await this.client.getCurrentUser();
93
- logger.log(
94
- `✅ Basic authentication successful for user: ${user.name} (${user.username})`,
95
- );
89
+ logger.log(`✅ Basic authentication successful for user: ${user.name} (${user.username})`);
96
90
  return true;
97
91
  } catch (error) {
98
- const message =
99
- "Basic authentication failed. Please check your username and password.";
92
+ const message = "Basic authentication failed. Please check your username and password.";
100
93
  logger.error(message, error);
101
94
  throw new Error(message);
102
95
  }
@@ -118,9 +111,7 @@ export class WordPressAuth {
118
111
  try {
119
112
  // The JWT token should be obtained during client authentication
120
113
  const user = await this.client.getCurrentUser();
121
- logger.log(
122
- `✅ JWT authentication successful for user: ${user.name} (${user.username})`,
123
- );
114
+ logger.log(`✅ JWT authentication successful for user: ${user.name} (${user.username})`);
124
115
  return true;
125
116
  } catch (error) {
126
117
  const message =
@@ -146,8 +137,7 @@ export class WordPressAuth {
146
137
  logger.log("✅ API Key authentication successful");
147
138
  return true;
148
139
  } catch (error) {
149
- const message =
150
- "API Key authentication failed. Please check your API key.";
140
+ const message = "API Key authentication failed. Please check your API key.";
151
141
  logger.error(message, error);
152
142
  throw new Error(message);
153
143
  }
@@ -160,21 +150,16 @@ export class WordPressAuth {
160
150
  const { nonce } = this.client.config.auth;
161
151
 
162
152
  if (!nonce) {
163
- logger.warn(
164
- "Cookie authentication: No nonce provided, authentication may fail for write operations",
165
- );
153
+ logger.warn("Cookie authentication: No nonce provided, authentication may fail for write operations");
166
154
  }
167
155
 
168
156
  try {
169
157
  // Test with a simple read operation
170
158
  await this.client.getSiteInfo();
171
- logger.log(
172
- "✅ Cookie authentication configured (note: write operations may require valid nonce)",
173
- );
159
+ logger.log("✅ Cookie authentication configured (note: write operations may require valid nonce)");
174
160
  return true;
175
161
  } catch (error) {
176
- const message =
177
- "Cookie authentication failed. Please ensure you are properly logged into WordPress.";
162
+ const message = "Cookie authentication failed. Please ensure you are properly logged into WordPress.";
178
163
  logger.error(message, error);
179
164
  throw new Error(message);
180
165
  }
@@ -249,7 +234,7 @@ export class WordPressAuth {
249
234
  */
250
235
  async switchAuthMethod(newConfig: AuthConfig): Promise<boolean> {
251
236
  // Update client configuration
252
- (this.client.config as any).auth = newConfig;
237
+ (this.client.config as { auth: AuthConfig }).auth = newConfig;
253
238
  this.authType = newConfig.method;
254
239
 
255
240
  // Re-authenticate with new method
@@ -295,8 +280,7 @@ export class WordPressAuth {
295
280
  * Generate random state for OAuth
296
281
  */
297
282
  private generateRandomState(length = 32): string {
298
- const chars =
299
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
283
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
300
284
  let result = "";
301
285
  for (let i = 0; i < length; i++) {
302
286
  result += chars.charAt(Math.floor(Math.random() * chars.length));
@@ -314,17 +298,13 @@ export class WordPressAuth {
314
298
  switch (this.authType) {
315
299
  case "app-password":
316
300
  if (auth.username && auth.appPassword) {
317
- const credentials = Buffer.from(
318
- `${auth.username}:${auth.appPassword}`,
319
- ).toString("base64");
301
+ const credentials = Buffer.from(`${auth.username}:${auth.appPassword}`).toString("base64");
320
302
  headers["Authorization"] = `Basic ${credentials}`;
321
303
  }
322
304
  break;
323
305
  case "basic":
324
306
  if (auth.username && auth.password) {
325
- const credentials = Buffer.from(
326
- `${auth.username}:${auth.password}`,
327
- ).toString("base64");
307
+ const credentials = Buffer.from(`${auth.username}:${auth.password}`).toString("base64");
328
308
  headers["Authorization"] = `Basic ${credentials}`;
329
309
  }
330
310
  break;
@@ -361,14 +341,9 @@ export class WordPressAuth {
361
341
  case "api-key":
362
342
  return !this.client.config.auth.apiKey;
363
343
  case "app-password":
364
- return (
365
- !this.client.config.auth.username ||
366
- !this.client.config.auth.appPassword
367
- );
344
+ return !this.client.config.auth.username || !this.client.config.auth.appPassword;
368
345
  case "basic":
369
- return (
370
- !this.client.config.auth.username || !this.client.config.auth.password
371
- );
346
+ return !this.client.config.auth.username || !this.client.config.auth.password;
372
347
  case "cookie":
373
348
  return false; // Cookie auth can work without additional setup
374
349
  default: