mcp-wordpress 2.5.0 → 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 (318) hide show
  1. package/README.md +19 -15
  2. package/bin/status.js +1 -1
  3. package/dist/config/ServerConfiguration.d.ts.map +1 -1
  4. package/dist/config/ServerConfiguration.js +23 -2
  5. package/dist/config/ServerConfiguration.js.map +1 -1
  6. package/dist/src/cache/CacheInvalidation.d.ts +120 -0
  7. package/dist/src/cache/CacheInvalidation.d.ts.map +1 -0
  8. package/dist/src/cache/CacheInvalidation.js +355 -0
  9. package/dist/src/cache/CacheInvalidation.js.map +1 -0
  10. package/dist/src/cache/CacheManager.d.ts +149 -0
  11. package/dist/src/cache/CacheManager.d.ts.map +1 -0
  12. package/dist/src/cache/CacheManager.js +326 -0
  13. package/dist/src/cache/CacheManager.js.map +1 -0
  14. package/dist/src/cache/HttpCacheWrapper.d.ts +122 -0
  15. package/dist/src/cache/HttpCacheWrapper.d.ts.map +1 -0
  16. package/dist/src/cache/HttpCacheWrapper.js +283 -0
  17. package/dist/src/cache/HttpCacheWrapper.js.map +1 -0
  18. package/dist/src/cache/index.d.ts +12 -0
  19. package/dist/src/cache/index.d.ts.map +1 -0
  20. package/dist/src/cache/index.js +9 -0
  21. package/dist/src/cache/index.js.map +1 -0
  22. package/dist/src/client/CachedWordPressClient.d.ts +174 -0
  23. package/dist/src/client/CachedWordPressClient.d.ts.map +1 -0
  24. package/dist/src/client/CachedWordPressClient.js +345 -0
  25. package/dist/src/client/CachedWordPressClient.js.map +1 -0
  26. package/dist/src/client/MockWordPressClient.d.ts +56 -0
  27. package/dist/src/client/MockWordPressClient.d.ts.map +1 -0
  28. package/dist/src/client/MockWordPressClient.js +371 -0
  29. package/dist/src/client/MockWordPressClient.js.map +1 -0
  30. package/dist/src/client/api.d.ts +235 -0
  31. package/dist/src/client/api.d.ts.map +1 -0
  32. package/dist/src/client/api.js +896 -0
  33. package/dist/src/client/api.js.map +1 -0
  34. package/dist/src/client/auth.d.ts +121 -0
  35. package/dist/src/client/auth.d.ts.map +1 -0
  36. package/dist/src/client/auth.js +429 -0
  37. package/dist/src/client/auth.js.map +1 -0
  38. package/dist/src/client/managers/AuthenticationManager.d.ts +92 -0
  39. package/dist/src/client/managers/AuthenticationManager.d.ts.map +1 -0
  40. package/dist/src/client/managers/AuthenticationManager.js +369 -0
  41. package/dist/src/client/managers/AuthenticationManager.js.map +1 -0
  42. package/dist/src/client/managers/BaseManager.d.ts +22 -0
  43. package/dist/src/client/managers/BaseManager.d.ts.map +1 -0
  44. package/dist/src/client/managers/BaseManager.js +53 -0
  45. package/dist/src/client/managers/BaseManager.js.map +1 -0
  46. package/dist/src/client/managers/RequestManager.d.ts +47 -0
  47. package/dist/src/client/managers/RequestManager.d.ts.map +1 -0
  48. package/dist/src/client/managers/RequestManager.js +193 -0
  49. package/dist/src/client/managers/RequestManager.js.map +1 -0
  50. package/dist/src/client/managers/index.d.ts +8 -0
  51. package/dist/src/client/managers/index.d.ts.map +1 -0
  52. package/dist/src/client/managers/index.js +8 -0
  53. package/dist/src/client/managers/index.js.map +1 -0
  54. package/dist/src/config/Config.d.ts +155 -0
  55. package/dist/src/config/Config.d.ts.map +1 -0
  56. package/dist/src/config/Config.js +215 -0
  57. package/dist/src/config/Config.js.map +1 -0
  58. package/dist/src/config/ConfigurationSchema.d.ts +281 -0
  59. package/dist/src/config/ConfigurationSchema.d.ts.map +1 -0
  60. package/dist/src/config/ConfigurationSchema.js +205 -0
  61. package/dist/src/config/ConfigurationSchema.js.map +1 -0
  62. package/dist/src/config/ServerConfiguration.d.ts +47 -0
  63. package/dist/src/config/ServerConfiguration.d.ts.map +1 -0
  64. package/dist/src/config/ServerConfiguration.js +255 -0
  65. package/dist/src/config/ServerConfiguration.js.map +1 -0
  66. package/dist/src/docs/DocumentationGenerator.d.ts +185 -0
  67. package/dist/src/docs/DocumentationGenerator.d.ts.map +1 -0
  68. package/dist/src/docs/DocumentationGenerator.js +777 -0
  69. package/dist/src/docs/DocumentationGenerator.js.map +1 -0
  70. package/dist/src/docs/MarkdownFormatter.d.ts +84 -0
  71. package/dist/src/docs/MarkdownFormatter.d.ts.map +1 -0
  72. package/dist/src/docs/MarkdownFormatter.js +458 -0
  73. package/dist/src/docs/MarkdownFormatter.js.map +1 -0
  74. package/dist/src/docs/index.d.ts +8 -0
  75. package/dist/src/docs/index.d.ts.map +1 -0
  76. package/dist/src/docs/index.js +7 -0
  77. package/dist/src/docs/index.js.map +1 -0
  78. package/dist/src/dxt-entry.d.ts +6 -0
  79. package/dist/src/dxt-entry.d.ts.map +1 -0
  80. package/dist/src/dxt-entry.js +39 -0
  81. package/dist/src/dxt-entry.js.map +1 -0
  82. package/dist/src/index.d.ts +18 -0
  83. package/dist/src/index.d.ts.map +1 -0
  84. package/dist/src/index.js +143 -0
  85. package/dist/src/index.js.map +1 -0
  86. package/dist/src/performance/MetricsCollector.d.ts +145 -0
  87. package/dist/src/performance/MetricsCollector.d.ts.map +1 -0
  88. package/dist/src/performance/MetricsCollector.js +368 -0
  89. package/dist/src/performance/MetricsCollector.js.map +1 -0
  90. package/dist/src/performance/PerformanceAnalytics.d.ts +168 -0
  91. package/dist/src/performance/PerformanceAnalytics.d.ts.map +1 -0
  92. package/dist/src/performance/PerformanceAnalytics.js +570 -0
  93. package/dist/src/performance/PerformanceAnalytics.js.map +1 -0
  94. package/dist/src/performance/PerformanceMonitor.d.ts +203 -0
  95. package/dist/src/performance/PerformanceMonitor.d.ts.map +1 -0
  96. package/dist/src/performance/PerformanceMonitor.js +478 -0
  97. package/dist/src/performance/PerformanceMonitor.js.map +1 -0
  98. package/dist/src/performance/index.d.ts +11 -0
  99. package/dist/src/performance/index.d.ts.map +1 -0
  100. package/dist/src/performance/index.js +8 -0
  101. package/dist/src/performance/index.js.map +1 -0
  102. package/dist/src/security/AISecurityScanner.d.ts +176 -0
  103. package/dist/src/security/AISecurityScanner.d.ts.map +1 -0
  104. package/dist/src/security/AISecurityScanner.js +655 -0
  105. package/dist/src/security/AISecurityScanner.js.map +1 -0
  106. package/dist/src/security/AutomatedRemediation.d.ts +146 -0
  107. package/dist/src/security/AutomatedRemediation.d.ts.map +1 -0
  108. package/dist/src/security/AutomatedRemediation.js +566 -0
  109. package/dist/src/security/AutomatedRemediation.js.map +1 -0
  110. package/dist/src/security/InputValidator.d.ts +219 -0
  111. package/dist/src/security/InputValidator.d.ts.map +1 -0
  112. package/dist/src/security/InputValidator.js +295 -0
  113. package/dist/src/security/InputValidator.js.map +1 -0
  114. package/dist/src/security/SecurityCIPipeline.d.ts +213 -0
  115. package/dist/src/security/SecurityCIPipeline.d.ts.map +1 -0
  116. package/dist/src/security/SecurityCIPipeline.js +693 -0
  117. package/dist/src/security/SecurityCIPipeline.js.map +1 -0
  118. package/dist/src/security/SecurityConfig.d.ts +129 -0
  119. package/dist/src/security/SecurityConfig.d.ts.map +1 -0
  120. package/dist/src/security/SecurityConfig.js +266 -0
  121. package/dist/src/security/SecurityConfig.js.map +1 -0
  122. package/dist/src/security/SecurityConfigManager.d.ts +294 -0
  123. package/dist/src/security/SecurityConfigManager.d.ts.map +1 -0
  124. package/dist/src/security/SecurityConfigManager.js +558 -0
  125. package/dist/src/security/SecurityConfigManager.js.map +1 -0
  126. package/dist/src/security/SecurityMonitoring.d.ts +245 -0
  127. package/dist/src/security/SecurityMonitoring.d.ts.map +1 -0
  128. package/dist/src/security/SecurityMonitoring.js +598 -0
  129. package/dist/src/security/SecurityMonitoring.js.map +1 -0
  130. package/dist/src/security/SecurityReviewer.d.ts +168 -0
  131. package/dist/src/security/SecurityReviewer.d.ts.map +1 -0
  132. package/dist/src/security/SecurityReviewer.js +686 -0
  133. package/dist/src/security/SecurityReviewer.js.map +1 -0
  134. package/dist/src/security/index.d.ts +183 -0
  135. package/dist/src/security/index.d.ts.map +1 -0
  136. package/dist/src/security/index.js +218 -0
  137. package/dist/src/security/index.js.map +1 -0
  138. package/dist/src/server/ConnectionTester.d.ts +32 -0
  139. package/dist/src/server/ConnectionTester.d.ts.map +1 -0
  140. package/dist/src/server/ConnectionTester.js +135 -0
  141. package/dist/src/server/ConnectionTester.js.map +1 -0
  142. package/dist/src/server/ToolRegistry.d.ts +50 -0
  143. package/dist/src/server/ToolRegistry.d.ts.map +1 -0
  144. package/dist/src/server/ToolRegistry.js +219 -0
  145. package/dist/src/server/ToolRegistry.js.map +1 -0
  146. package/dist/src/server.d.ts +7 -0
  147. package/dist/src/server.d.ts.map +1 -0
  148. package/dist/src/server.js +7 -0
  149. package/dist/src/server.js.map +1 -0
  150. package/dist/src/tools/BaseToolManager.d.ts +62 -0
  151. package/dist/src/tools/BaseToolManager.d.ts.map +1 -0
  152. package/dist/src/tools/BaseToolManager.js +195 -0
  153. package/dist/src/tools/BaseToolManager.js.map +1 -0
  154. package/dist/src/tools/auth.d.ts +50 -0
  155. package/dist/src/tools/auth.d.ts.map +1 -0
  156. package/dist/src/tools/auth.js +133 -0
  157. package/dist/src/tools/auth.js.map +1 -0
  158. package/dist/src/tools/cache.d.ts +260 -0
  159. package/dist/src/tools/cache.d.ts.map +1 -0
  160. package/dist/src/tools/cache.js +232 -0
  161. package/dist/src/tools/cache.js.map +1 -0
  162. package/dist/src/tools/comments.d.ts +33 -0
  163. package/dist/src/tools/comments.d.ts.map +1 -0
  164. package/dist/src/tools/comments.js +235 -0
  165. package/dist/src/tools/comments.js.map +1 -0
  166. package/dist/src/tools/index.d.ts +11 -0
  167. package/dist/src/tools/index.d.ts.map +1 -0
  168. package/dist/src/tools/index.js +11 -0
  169. package/dist/src/tools/index.js.map +1 -0
  170. package/dist/src/tools/media.d.ts +70 -0
  171. package/dist/src/tools/media.d.ts.map +1 -0
  172. package/dist/src/tools/media.js +248 -0
  173. package/dist/src/tools/media.js.map +1 -0
  174. package/dist/src/tools/pages.d.ts +32 -0
  175. package/dist/src/tools/pages.d.ts.map +1 -0
  176. package/dist/src/tools/pages.js +215 -0
  177. package/dist/src/tools/pages.js.map +1 -0
  178. package/dist/src/tools/performance.d.ts +73 -0
  179. package/dist/src/tools/performance.d.ts.map +1 -0
  180. package/dist/src/tools/performance.js +922 -0
  181. package/dist/src/tools/performance.js.map +1 -0
  182. package/dist/src/tools/posts/PostHandlers.d.ts +46 -0
  183. package/dist/src/tools/posts/PostHandlers.d.ts.map +1 -0
  184. package/dist/src/tools/posts/PostHandlers.js +400 -0
  185. package/dist/src/tools/posts/PostHandlers.js.map +1 -0
  186. package/dist/src/tools/posts/PostToolDefinitions.d.ts +37 -0
  187. package/dist/src/tools/posts/PostToolDefinitions.d.ts.map +1 -0
  188. package/dist/src/tools/posts/PostToolDefinitions.js +236 -0
  189. package/dist/src/tools/posts/PostToolDefinitions.js.map +1 -0
  190. package/dist/src/tools/posts/index.d.ts +138 -0
  191. package/dist/src/tools/posts/index.d.ts.map +1 -0
  192. package/dist/src/tools/posts/index.js +163 -0
  193. package/dist/src/tools/posts/index.js.map +1 -0
  194. package/dist/src/tools/posts.d.ts +15 -0
  195. package/dist/src/tools/posts.d.ts.map +1 -0
  196. package/dist/src/tools/posts.js +16 -0
  197. package/dist/src/tools/posts.js.map +1 -0
  198. package/dist/src/tools/site.d.ts +32 -0
  199. package/dist/src/tools/site.d.ts.map +1 -0
  200. package/dist/src/tools/site.js +234 -0
  201. package/dist/src/tools/site.js.map +1 -0
  202. package/dist/src/tools/taxonomies.d.ts +36 -0
  203. package/dist/src/tools/taxonomies.d.ts.map +1 -0
  204. package/dist/src/tools/taxonomies.js +286 -0
  205. package/dist/src/tools/taxonomies.js.map +1 -0
  206. package/dist/src/tools/users.d.ts +33 -0
  207. package/dist/src/tools/users.d.ts.map +1 -0
  208. package/dist/src/tools/users.js +308 -0
  209. package/dist/src/tools/users.js.map +1 -0
  210. package/dist/src/types/client.d.ts +223 -0
  211. package/dist/src/types/client.d.ts.map +1 -0
  212. package/dist/src/types/client.js +97 -0
  213. package/dist/src/types/client.js.map +1 -0
  214. package/dist/src/types/enhanced.d.ts +237 -0
  215. package/dist/src/types/enhanced.d.ts.map +1 -0
  216. package/dist/src/types/enhanced.js +49 -0
  217. package/dist/src/types/enhanced.js.map +1 -0
  218. package/dist/src/types/index.d.ts +160 -0
  219. package/dist/src/types/index.d.ts.map +1 -0
  220. package/dist/src/types/index.js +14 -0
  221. package/dist/src/types/index.js.map +1 -0
  222. package/dist/src/types/mcp.d.ts +178 -0
  223. package/dist/src/types/mcp.d.ts.map +1 -0
  224. package/dist/src/types/mcp.js +7 -0
  225. package/dist/src/types/mcp.js.map +1 -0
  226. package/dist/src/types/requests.d.ts +322 -0
  227. package/dist/src/types/requests.d.ts.map +1 -0
  228. package/dist/src/types/requests.js +8 -0
  229. package/dist/src/types/requests.js.map +1 -0
  230. package/dist/src/types/tools.d.ts +506 -0
  231. package/dist/src/types/tools.d.ts.map +1 -0
  232. package/dist/src/types/tools.js +8 -0
  233. package/dist/src/types/tools.js.map +1 -0
  234. package/dist/src/types/wordpress.d.ts +471 -0
  235. package/dist/src/types/wordpress.d.ts.map +1 -0
  236. package/dist/src/types/wordpress.js +14 -0
  237. package/dist/src/types/wordpress.js.map +1 -0
  238. package/dist/src/utils/debug.d.ts +71 -0
  239. package/dist/src/utils/debug.d.ts.map +1 -0
  240. package/dist/src/utils/debug.js +235 -0
  241. package/dist/src/utils/debug.js.map +1 -0
  242. package/dist/src/utils/enhancedError.d.ts +61 -0
  243. package/dist/src/utils/enhancedError.d.ts.map +1 -0
  244. package/dist/src/utils/enhancedError.js +221 -0
  245. package/dist/src/utils/enhancedError.js.map +1 -0
  246. package/dist/src/utils/error.d.ts +17 -0
  247. package/dist/src/utils/error.d.ts.map +1 -0
  248. package/dist/src/utils/error.js +108 -0
  249. package/dist/src/utils/error.js.map +1 -0
  250. package/dist/src/utils/logger.d.ts +106 -0
  251. package/dist/src/utils/logger.d.ts.map +1 -0
  252. package/dist/src/utils/logger.js +280 -0
  253. package/dist/src/utils/logger.js.map +1 -0
  254. package/dist/src/utils/streaming.d.ts +104 -0
  255. package/dist/src/utils/streaming.d.ts.map +1 -0
  256. package/dist/src/utils/streaming.js +331 -0
  257. package/dist/src/utils/streaming.js.map +1 -0
  258. package/dist/src/utils/toolWrapper.d.ts +42 -0
  259. package/dist/src/utils/toolWrapper.d.ts.map +1 -0
  260. package/dist/src/utils/toolWrapper.js +101 -0
  261. package/dist/src/utils/toolWrapper.js.map +1 -0
  262. package/dist/src/utils/validation/core.d.ts +21 -0
  263. package/dist/src/utils/validation/core.d.ts.map +1 -0
  264. package/dist/src/utils/validation/core.js +71 -0
  265. package/dist/src/utils/validation/core.js.map +1 -0
  266. package/dist/src/utils/validation/index.d.ts +25 -0
  267. package/dist/src/utils/validation/index.d.ts.map +1 -0
  268. package/dist/src/utils/validation/index.js +29 -0
  269. package/dist/src/utils/validation/index.js.map +1 -0
  270. package/dist/src/utils/validation/network.d.ts +19 -0
  271. package/dist/src/utils/validation/network.d.ts.map +1 -0
  272. package/dist/src/utils/validation/network.js +93 -0
  273. package/dist/src/utils/validation/network.js.map +1 -0
  274. package/dist/src/utils/validation/rateLimit.d.ts +21 -0
  275. package/dist/src/utils/validation/rateLimit.d.ts.map +1 -0
  276. package/dist/src/utils/validation/rateLimit.js +43 -0
  277. package/dist/src/utils/validation/rateLimit.js.map +1 -0
  278. package/dist/src/utils/validation/security.d.ts +29 -0
  279. package/dist/src/utils/validation/security.d.ts.map +1 -0
  280. package/dist/src/utils/validation/security.js +327 -0
  281. package/dist/src/utils/validation/security.js.map +1 -0
  282. package/dist/src/utils/validation/wordpress.d.ts +31 -0
  283. package/dist/src/utils/validation/wordpress.d.ts.map +1 -0
  284. package/dist/src/utils/validation/wordpress.js +146 -0
  285. package/dist/src/utils/validation/wordpress.js.map +1 -0
  286. package/dist/src/utils/validation.d.ts +15 -0
  287. package/dist/src/utils/validation.d.ts.map +1 -0
  288. package/dist/src/utils/validation.js +27 -0
  289. package/dist/src/utils/validation.js.map +1 -0
  290. package/dist/tests/vitest.setup.d.ts +6 -0
  291. package/dist/tests/vitest.setup.d.ts.map +1 -0
  292. package/dist/tests/vitest.setup.js +39 -0
  293. package/dist/tests/vitest.setup.js.map +1 -0
  294. package/docs/INSTALLATION.md +4 -2
  295. package/docs/TROUBLESHOOTING.md +2 -1
  296. package/docs/developer/TESTING.md +24 -19
  297. package/docs/integrations/claude-desktop.md +9 -4
  298. package/docs/user-guides/DXT_INSTALLATION.md +2 -1
  299. package/package.json +28 -29
  300. package/src/config/ServerConfiguration.ts +22 -2
  301. package/dist/ajv-patch.js +0 -34
  302. package/dist/cache/__tests__/CacheInvalidation.test.d.ts +0 -5
  303. package/dist/cache/__tests__/CacheInvalidation.test.d.ts.map +0 -1
  304. package/dist/cache/__tests__/CacheInvalidation.test.js +0 -238
  305. package/dist/cache/__tests__/CacheInvalidation.test.js.map +0 -1
  306. package/dist/cache/__tests__/CacheManager.test.d.ts +0 -5
  307. package/dist/cache/__tests__/CacheManager.test.d.ts.map +0 -1
  308. package/dist/cache/__tests__/CacheManager.test.js +0 -233
  309. package/dist/cache/__tests__/CacheManager.test.js.map +0 -1
  310. package/dist/cache/__tests__/CachedWordPressClient.test.d.ts +0 -5
  311. package/dist/cache/__tests__/CachedWordPressClient.test.d.ts.map +0 -1
  312. package/dist/cache/__tests__/CachedWordPressClient.test.js +0 -231
  313. package/dist/cache/__tests__/CachedWordPressClient.test.js.map +0 -1
  314. package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts +0 -5
  315. package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts.map +0 -1
  316. package/dist/cache/__tests__/HttpCacheWrapper.test.js +0 -300
  317. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +0 -1
  318. package/dist/dxt-entry.cjs +0 -81
@@ -0,0 +1,193 @@
1
+ /**
2
+ * HTTP Request Manager
3
+ * Handles all HTTP operations, rate limiting, and retries
4
+ */
5
+ import { WordPressAPIError, RateLimitError } from "../../types/client.js";
6
+ import { config } from "../../config/Config.js";
7
+ import { BaseManager } from "./BaseManager.js";
8
+ import { debug, startTimer } from "../../utils/debug.js";
9
+ export class RequestManager extends BaseManager {
10
+ stats;
11
+ lastRequestTime = 0;
12
+ requestInterval;
13
+ authManager;
14
+ constructor(clientConfig, authManager) {
15
+ super(clientConfig);
16
+ this.authManager = authManager;
17
+ this.requestInterval = 60000 / config().security.rateLimit;
18
+ this.stats = {
19
+ totalRequests: 0,
20
+ successfulRequests: 0,
21
+ failedRequests: 0,
22
+ averageResponseTime: 0,
23
+ rateLimitHits: 0,
24
+ authFailures: 0,
25
+ };
26
+ }
27
+ /**
28
+ * Make HTTP request with retry logic and rate limiting
29
+ */
30
+ async request(method, endpoint, data, options = {}) {
31
+ const timer = startTimer();
32
+ try {
33
+ await this.enforceRateLimit();
34
+ const response = await this.makeRequestWithRetry(method, endpoint, data, options);
35
+ this.stats.successfulRequests++;
36
+ this.updateAverageResponseTime(timer.end());
37
+ return response;
38
+ }
39
+ catch (error) {
40
+ this.stats.failedRequests++;
41
+ this.handleError(error, `${method} ${endpoint}`);
42
+ }
43
+ finally {
44
+ this.stats.totalRequests++;
45
+ }
46
+ }
47
+ /**
48
+ * Make request with retry logic
49
+ */
50
+ async makeRequestWithRetry(method, endpoint, data, options = {}) {
51
+ let lastError;
52
+ const maxRetries = options.retries ?? this.config.maxRetries ?? 3;
53
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
54
+ try {
55
+ return await this.makeRequest(method, endpoint, data, options);
56
+ }
57
+ catch (error) {
58
+ lastError = error;
59
+ // Type guard for error-like objects
60
+ const isErrorLike = (err) => {
61
+ return typeof err === "object" && err !== null;
62
+ };
63
+ // Don't retry on authentication errors or client errors
64
+ if ((isErrorLike(error) && error.statusCode && error.statusCode < 500) || attempt === maxRetries) {
65
+ throw error;
66
+ }
67
+ const errorMessage = isErrorLike(error) && error.message ? error.message : String(error);
68
+ debug.log(`Request failed (attempt ${attempt}/${maxRetries}):`, errorMessage);
69
+ // Exponential backoff
70
+ const delay = Math.min(1000 * Math.pow(2, attempt - 1), 5000);
71
+ await new Promise((resolve) => setTimeout(resolve, delay));
72
+ }
73
+ }
74
+ throw lastError;
75
+ }
76
+ /**
77
+ * Make single HTTP request
78
+ */
79
+ async makeRequest(method, endpoint, data, options = {}) {
80
+ const url = this.buildUrl(endpoint);
81
+ const timeout = options.timeout ?? this.config.timeout ?? 30000;
82
+ const controller = new AbortController();
83
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
84
+ try {
85
+ // Get authentication headers
86
+ const authHeaders = await this.authManager.getAuthHeaders();
87
+ const fetchOptions = {
88
+ method,
89
+ headers: {
90
+ "Content-Type": "application/json",
91
+ "User-Agent": "MCP-WordPress/1.1.1",
92
+ ...authHeaders, // Add auth headers before custom headers
93
+ ...options.headers,
94
+ },
95
+ signal: controller.signal,
96
+ };
97
+ if (data && method !== "GET") {
98
+ if (data instanceof FormData ||
99
+ (typeof data === "object" && data && "append" in data && typeof data.append === "function")) {
100
+ // For FormData, don't set Content-Type (let fetch set it with boundary)
101
+ if (fetchOptions.headers &&
102
+ typeof fetchOptions.headers === "object" &&
103
+ "Content-Type" in fetchOptions.headers) {
104
+ delete fetchOptions.headers["Content-Type"];
105
+ }
106
+ fetchOptions.body = data;
107
+ }
108
+ else if (Buffer.isBuffer(data)) {
109
+ // For Buffer data, keep Content-Type from headers
110
+ fetchOptions.body = data;
111
+ }
112
+ else if (typeof data === "string") {
113
+ fetchOptions.body = data;
114
+ }
115
+ else {
116
+ fetchOptions.body = JSON.stringify(data);
117
+ }
118
+ }
119
+ debug.log(`API Request: ${method} ${url}`);
120
+ const response = await fetch(url, fetchOptions);
121
+ if (!response.ok) {
122
+ await this.handleErrorResponse(response);
123
+ }
124
+ const responseData = await response.json();
125
+ return responseData;
126
+ }
127
+ finally {
128
+ clearTimeout(timeoutId);
129
+ }
130
+ }
131
+ /**
132
+ * Handle HTTP error responses
133
+ */
134
+ async handleErrorResponse(response) {
135
+ let errorData = {};
136
+ try {
137
+ const jsonData = await response.json();
138
+ if (typeof jsonData === "object" && jsonData !== null) {
139
+ errorData = jsonData;
140
+ }
141
+ }
142
+ catch {
143
+ // Ignore JSON parsing errors
144
+ }
145
+ const message = (typeof errorData.message === "string" ? errorData.message : undefined) ||
146
+ `HTTP ${response.status}: ${response.statusText}`;
147
+ const code = (typeof errorData.code === "string" ? errorData.code : undefined) || "http_error";
148
+ if (response.status === 429) {
149
+ this.stats.rateLimitHits++;
150
+ throw new RateLimitError(message, Date.now() + 60000); // Retry after 1 minute
151
+ }
152
+ if (response.status === 401 || response.status === 403) {
153
+ this.stats.authFailures++;
154
+ }
155
+ throw new WordPressAPIError(message, response.status, code, errorData);
156
+ }
157
+ /**
158
+ * Build full URL from endpoint
159
+ */
160
+ buildUrl(endpoint) {
161
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
162
+ const apiBase = "/wp-json/wp/v2";
163
+ const cleanEndpoint = endpoint.startsWith("/") ? endpoint : `/${endpoint}`;
164
+ return `${baseUrl}${apiBase}${cleanEndpoint}`;
165
+ }
166
+ /**
167
+ * Enforce rate limiting
168
+ */
169
+ async enforceRateLimit() {
170
+ const now = Date.now();
171
+ const timeSinceLastRequest = now - this.lastRequestTime;
172
+ if (timeSinceLastRequest < this.requestInterval) {
173
+ const delay = this.requestInterval - timeSinceLastRequest;
174
+ await new Promise((resolve) => setTimeout(resolve, delay));
175
+ }
176
+ this.lastRequestTime = Date.now();
177
+ }
178
+ /**
179
+ * Update average response time
180
+ */
181
+ updateAverageResponseTime(responseTime) {
182
+ const totalRequests = this.stats.successfulRequests;
183
+ const currentAverage = this.stats.averageResponseTime;
184
+ this.stats.averageResponseTime = (currentAverage * (totalRequests - 1) + responseTime) / totalRequests;
185
+ }
186
+ /**
187
+ * Get request statistics
188
+ */
189
+ getStats() {
190
+ return { ...this.stats };
191
+ }
192
+ }
193
+ //# sourceMappingURL=RequestManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestManager.js","sourceRoot":"","sources":["../../../../src/client/managers/RequestManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Client Managers Index
3
+ * Exports all manager classes for the WordPress client
4
+ */
5
+ export { BaseManager } from "./BaseManager.js";
6
+ export { AuthenticationManager } from "./AuthenticationManager.js";
7
+ export { RequestManager } from "./RequestManager.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/managers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Client Managers Index
3
+ * Exports all manager classes for the WordPress client
4
+ */
5
+ export { BaseManager } from "./BaseManager.js";
6
+ export { AuthenticationManager } from "./AuthenticationManager.js";
7
+ export { RequestManager } from "./RequestManager.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/client/managers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Centralized Configuration Management
3
+ *
4
+ * Provides typed access to all environment variables and configuration options.
5
+ * Centralizes configuration logic and eliminates scattered process.env access.
6
+ */
7
+ export interface AppConfig {
8
+ readonly wordpress: {
9
+ readonly siteUrl: string | undefined;
10
+ readonly username: string | undefined;
11
+ readonly appPassword: string | undefined;
12
+ readonly password: string | undefined;
13
+ readonly authMethod: string;
14
+ readonly timeout: number;
15
+ readonly maxRetries: number;
16
+ readonly jwtSecret: string | undefined;
17
+ readonly apiKey: string | undefined;
18
+ readonly cookieNonce: string | undefined;
19
+ readonly jwtPassword: string | undefined;
20
+ };
21
+ readonly app: {
22
+ readonly nodeEnv: string;
23
+ readonly isDevelopment: boolean;
24
+ readonly isProduction: boolean;
25
+ readonly isTest: boolean;
26
+ readonly isDXT: boolean;
27
+ readonly isCI: boolean;
28
+ };
29
+ readonly debug: {
30
+ readonly enabled: boolean;
31
+ readonly logLevel: string;
32
+ };
33
+ readonly cache: {
34
+ readonly disabled: boolean;
35
+ readonly ttl: number;
36
+ readonly maxItems: number;
37
+ readonly maxMemoryMB: number;
38
+ };
39
+ readonly security: {
40
+ readonly rateLimitEnabled: boolean;
41
+ readonly rateLimitRequests: number;
42
+ readonly rateLimitWindow: number;
43
+ readonly rateLimit: number;
44
+ readonly strictMode: boolean;
45
+ };
46
+ readonly error: {
47
+ readonly legacyLogsEnabled: boolean;
48
+ };
49
+ readonly testing: {
50
+ readonly coverageTolerance: number;
51
+ readonly skipPactTests: boolean;
52
+ readonly performanceTest: boolean;
53
+ };
54
+ readonly ci: {
55
+ readonly isCI: boolean;
56
+ readonly provider: string | null;
57
+ readonly isGitHubActions: boolean;
58
+ readonly isTravis: boolean;
59
+ readonly isCircleCI: boolean;
60
+ };
61
+ }
62
+ /**
63
+ * Centralized Configuration Class
64
+ *
65
+ * Singleton that provides type-safe access to all configuration values.
66
+ * Replaces scattered process.env access throughout the codebase.
67
+ */
68
+ export declare class Config {
69
+ private static instance;
70
+ private readonly config;
71
+ private constructor();
72
+ /**
73
+ * Get singleton instance
74
+ */
75
+ static getInstance(): Config;
76
+ /**
77
+ * Get configuration object (read-only)
78
+ */
79
+ get(): AppConfig;
80
+ /**
81
+ * Load and validate all configuration from environment
82
+ */
83
+ private loadConfiguration;
84
+ /**
85
+ * Check if a string value should be considered truthy
86
+ * Accepts common truthy string representations
87
+ */
88
+ private isTruthy;
89
+ /**
90
+ * Detect if running in CI environment
91
+ */
92
+ private detectCIEnvironment;
93
+ /**
94
+ * Detect CI provider
95
+ */
96
+ private detectCIProvider;
97
+ /**
98
+ * Should log debug information?
99
+ */
100
+ shouldDebug(): boolean;
101
+ /**
102
+ * Should use caching?
103
+ */
104
+ shouldUseCache(): boolean;
105
+ /**
106
+ * Should log info messages? (not in test or DXT mode)
107
+ */
108
+ shouldLogInfo(): boolean;
109
+ /**
110
+ * Is WordPress configuration complete?
111
+ */
112
+ hasWordPressConfig(): boolean;
113
+ /**
114
+ * Get environment-appropriate timeout for operations
115
+ */
116
+ getOperationTimeout(): number;
117
+ /**
118
+ * Reset singleton (for testing)
119
+ */
120
+ static reset(): void;
121
+ }
122
+ /**
123
+ * Global configuration instance getter
124
+ * Use this throughout the application instead of process.env
125
+ */
126
+ export declare const config: () => AppConfig;
127
+ /**
128
+ * Configuration helper utilities
129
+ */
130
+ export declare const ConfigHelpers: {
131
+ /**
132
+ * Get config instance
133
+ */
134
+ get: () => Config;
135
+ /**
136
+ * Quick environment checks
137
+ */
138
+ isDev: () => boolean;
139
+ isProd: () => boolean;
140
+ isTest: () => boolean;
141
+ isDXT: () => boolean;
142
+ isCI: () => boolean;
143
+ /**
144
+ * Quick feature flags
145
+ */
146
+ shouldDebug: () => boolean;
147
+ shouldUseCache: () => boolean;
148
+ shouldLogInfo: () => boolean;
149
+ hasWordPressConfig: () => boolean;
150
+ /**
151
+ * Get timeout for different operation types
152
+ */
153
+ getTimeout: (type?: "operation" | "upload" | "test") => number;
154
+ };
155
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/config/Config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Centralized Configuration Management
3
+ *
4
+ * Provides typed access to all environment variables and configuration options.
5
+ * Centralizes configuration logic and eliminates scattered process.env access.
6
+ */
7
+ /**
8
+ * Centralized Configuration Class
9
+ *
10
+ * Singleton that provides type-safe access to all configuration values.
11
+ * Replaces scattered process.env access throughout the codebase.
12
+ */
13
+ export class Config {
14
+ static instance = null;
15
+ config;
16
+ constructor() {
17
+ this.config = this.loadConfiguration();
18
+ }
19
+ /**
20
+ * Get singleton instance
21
+ */
22
+ static getInstance() {
23
+ if (!Config.instance) {
24
+ Config.instance = new Config();
25
+ }
26
+ return Config.instance;
27
+ }
28
+ /**
29
+ * Get configuration object (read-only)
30
+ */
31
+ get() {
32
+ return this.config;
33
+ }
34
+ /**
35
+ * Load and validate all configuration from environment
36
+ */
37
+ loadConfiguration() {
38
+ const nodeEnv = process.env.NODE_ENV || "development";
39
+ return {
40
+ wordpress: {
41
+ siteUrl: process.env.WORDPRESS_SITE_URL,
42
+ username: process.env.WORDPRESS_USERNAME,
43
+ appPassword: process.env.WORDPRESS_APP_PASSWORD,
44
+ password: process.env.WORDPRESS_PASSWORD,
45
+ authMethod: process.env.WORDPRESS_AUTH_METHOD || "app-password",
46
+ timeout: parseInt(process.env.WORDPRESS_TIMEOUT || "30000", 10),
47
+ maxRetries: parseInt(process.env.WORDPRESS_MAX_RETRIES || "3", 10),
48
+ jwtSecret: process.env.WORDPRESS_JWT_SECRET,
49
+ apiKey: process.env.WORDPRESS_API_KEY,
50
+ cookieNonce: process.env.WORDPRESS_COOKIE_NONCE,
51
+ jwtPassword: process.env.WORDPRESS_JWT_PASSWORD,
52
+ },
53
+ app: {
54
+ nodeEnv,
55
+ isDevelopment: nodeEnv === "development",
56
+ isProduction: nodeEnv === "production",
57
+ isTest: nodeEnv === "test",
58
+ isDXT: nodeEnv === "dxt",
59
+ isCI: this.detectCIEnvironment(),
60
+ },
61
+ debug: {
62
+ enabled: process.env.DEBUG === "true",
63
+ logLevel: process.env.LOG_LEVEL || "info",
64
+ },
65
+ cache: {
66
+ disabled: this.isTruthy(process.env.CACHE_DISABLED) || this.isTruthy(process.env.DISABLE_CACHE),
67
+ ttl: parseInt(process.env.CACHE_TTL || "300", 10), // 5 minutes default
68
+ maxItems: parseInt(process.env.CACHE_MAX_ITEMS || "1000", 10),
69
+ maxMemoryMB: parseInt(process.env.CACHE_MAX_MEMORY_MB || "50", 10),
70
+ },
71
+ security: {
72
+ rateLimitEnabled: process.env.RATE_LIMIT_ENABLED !== "false",
73
+ rateLimitRequests: parseInt(process.env.RATE_LIMIT_REQUESTS || "100", 10),
74
+ rateLimitWindow: parseInt(process.env.RATE_LIMIT_WINDOW || "60000", 10), // 1 minute
75
+ rateLimit: parseInt(process.env.RATE_LIMIT || "60", 10),
76
+ strictMode: process.env.SECURITY_STRICT_MODE === "true",
77
+ },
78
+ error: {
79
+ legacyLogsEnabled: process.env.LEGACY_ERROR_LOGS !== "0",
80
+ },
81
+ testing: {
82
+ coverageTolerance: parseFloat(process.env.COVERAGE_TOLERANCE || "1.0"),
83
+ skipPactTests: process.env.SKIP_PACT_TESTS === "true",
84
+ performanceTest: process.env.PERFORMANCE_TEST === "true",
85
+ },
86
+ ci: {
87
+ isCI: this.detectCIEnvironment(),
88
+ provider: this.detectCIProvider(),
89
+ isGitHubActions: process.env.GITHUB_ACTIONS === "true",
90
+ isTravis: process.env.TRAVIS === "true",
91
+ isCircleCI: process.env.CIRCLECI === "true",
92
+ },
93
+ };
94
+ }
95
+ /**
96
+ * Check if a string value should be considered truthy
97
+ * Accepts common truthy string representations
98
+ */
99
+ isTruthy(value) {
100
+ if (!value)
101
+ return false;
102
+ const lowerValue = value.trim().toLowerCase();
103
+ return ["true", "1", "yes", "on", "enable", "enabled"].includes(lowerValue);
104
+ }
105
+ /**
106
+ * Detect if running in CI environment
107
+ */
108
+ detectCIEnvironment() {
109
+ return (process.env.CI === "true" ||
110
+ process.env.NODE_ENV === "ci" ||
111
+ process.env.GITHUB_ACTIONS === "true" ||
112
+ process.env.TRAVIS === "true" ||
113
+ process.env.CIRCLECI === "true");
114
+ }
115
+ /**
116
+ * Detect CI provider
117
+ */
118
+ detectCIProvider() {
119
+ if (process.env.GITHUB_ACTIONS === "true")
120
+ return "github-actions";
121
+ if (process.env.TRAVIS === "true")
122
+ return "travis";
123
+ if (process.env.CIRCLECI === "true")
124
+ return "circleci";
125
+ if (process.env.CI === "true")
126
+ return "generic";
127
+ return null;
128
+ }
129
+ // Convenience methods for common checks
130
+ /**
131
+ * Should log debug information?
132
+ */
133
+ shouldDebug() {
134
+ return this.config.debug.enabled && !this.config.app.isDXT;
135
+ }
136
+ /**
137
+ * Should use caching?
138
+ */
139
+ shouldUseCache() {
140
+ return !this.config.cache.disabled;
141
+ }
142
+ /**
143
+ * Should log info messages? (not in test or DXT mode)
144
+ */
145
+ shouldLogInfo() {
146
+ return !this.config.app.isTest && !this.config.app.isDXT;
147
+ }
148
+ /**
149
+ * Is WordPress configuration complete?
150
+ */
151
+ hasWordPressConfig() {
152
+ const wp = this.config.wordpress;
153
+ return !!(wp.siteUrl && wp.username && wp.appPassword);
154
+ }
155
+ /**
156
+ * Get environment-appropriate timeout for operations
157
+ */
158
+ getOperationTimeout() {
159
+ if (this.config.app.isTest)
160
+ return 5000; // 5 seconds in tests
161
+ if (this.config.app.isCI)
162
+ return 30000; // 30 seconds in CI
163
+ return 60000; // 1 minute in development/production
164
+ }
165
+ /**
166
+ * Reset singleton (for testing)
167
+ */
168
+ static reset() {
169
+ Config.instance = null;
170
+ }
171
+ }
172
+ /**
173
+ * Global configuration instance getter
174
+ * Use this throughout the application instead of process.env
175
+ */
176
+ export const config = () => Config.getInstance().get();
177
+ /**
178
+ * Configuration helper utilities
179
+ */
180
+ export const ConfigHelpers = {
181
+ /**
182
+ * Get config instance
183
+ */
184
+ get: () => Config.getInstance(),
185
+ /**
186
+ * Quick environment checks
187
+ */
188
+ isDev: () => config().app.isDevelopment,
189
+ isProd: () => config().app.isProduction,
190
+ isTest: () => config().app.isTest,
191
+ isDXT: () => config().app.isDXT,
192
+ isCI: () => config().app.isCI,
193
+ /**
194
+ * Quick feature flags
195
+ */
196
+ shouldDebug: () => Config.getInstance().shouldDebug(),
197
+ shouldUseCache: () => Config.getInstance().shouldUseCache(),
198
+ shouldLogInfo: () => Config.getInstance().shouldLogInfo(),
199
+ hasWordPressConfig: () => Config.getInstance().hasWordPressConfig(),
200
+ /**
201
+ * Get timeout for different operation types
202
+ */
203
+ getTimeout: (type = "operation") => {
204
+ const instance = Config.getInstance();
205
+ switch (type) {
206
+ case "upload":
207
+ return instance.getOperationTimeout() * 5; // 5x longer for uploads
208
+ case "test":
209
+ return config().app.isCI ? 30000 : 10000;
210
+ default:
211
+ return instance.getOperationTimeout();
212
+ }
213
+ },
214
+ };
215
+ //# sourceMappingURL=Config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.js","sourceRoot":"","sources":["../../../src/config/Config.ts"],"names":[],"mappings":"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"}