mcp-wordpress 1.1.7 → 1.2.2

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 (255) hide show
  1. package/README.md +388 -66
  2. package/dist/cache/CacheInvalidation.d.ts +118 -0
  3. package/dist/cache/CacheInvalidation.d.ts.map +1 -0
  4. package/dist/cache/CacheInvalidation.js +349 -0
  5. package/dist/cache/CacheInvalidation.js.map +1 -0
  6. package/dist/cache/CacheManager.d.ts +143 -0
  7. package/dist/cache/CacheManager.d.ts.map +1 -0
  8. package/dist/cache/CacheManager.js +308 -0
  9. package/dist/cache/CacheManager.js.map +1 -0
  10. package/dist/cache/HttpCacheWrapper.d.ts +121 -0
  11. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -0
  12. package/dist/cache/HttpCacheWrapper.js +280 -0
  13. package/dist/cache/HttpCacheWrapper.js.map +1 -0
  14. package/dist/cache/__tests__/CacheInvalidation.test.d.ts +5 -0
  15. package/dist/cache/__tests__/CacheInvalidation.test.d.ts.map +1 -0
  16. package/dist/cache/__tests__/CacheInvalidation.test.js +236 -0
  17. package/dist/cache/__tests__/CacheInvalidation.test.js.map +1 -0
  18. package/dist/cache/__tests__/CacheManager.test.d.ts +5 -0
  19. package/dist/cache/__tests__/CacheManager.test.d.ts.map +1 -0
  20. package/dist/cache/__tests__/CacheManager.test.js +233 -0
  21. package/dist/cache/__tests__/CacheManager.test.js.map +1 -0
  22. package/dist/cache/__tests__/CachedWordPressClient.test.d.ts +5 -0
  23. package/dist/cache/__tests__/CachedWordPressClient.test.d.ts.map +1 -0
  24. package/dist/cache/__tests__/CachedWordPressClient.test.js +228 -0
  25. package/dist/cache/__tests__/CachedWordPressClient.test.js.map +1 -0
  26. package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts +5 -0
  27. package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts.map +1 -0
  28. package/dist/cache/__tests__/HttpCacheWrapper.test.js +296 -0
  29. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -0
  30. package/dist/cache/index.d.ts +12 -0
  31. package/dist/cache/index.d.ts.map +1 -0
  32. package/dist/cache/index.js +9 -0
  33. package/dist/cache/index.js.map +1 -0
  34. package/dist/client/CachedWordPressClient.d.ts +160 -0
  35. package/dist/client/CachedWordPressClient.d.ts.map +1 -0
  36. package/dist/client/CachedWordPressClient.js +338 -0
  37. package/dist/client/CachedWordPressClient.js.map +1 -0
  38. package/dist/client/WordPressClient.d.ts +81 -0
  39. package/dist/client/WordPressClient.d.ts.map +1 -0
  40. package/dist/client/WordPressClient.js +354 -0
  41. package/dist/client/WordPressClient.js.map +1 -0
  42. package/dist/config/ConfigurationSchema.d.ts +281 -0
  43. package/dist/config/ConfigurationSchema.d.ts.map +1 -0
  44. package/dist/config/ConfigurationSchema.js +205 -0
  45. package/dist/config/ConfigurationSchema.js.map +1 -0
  46. package/dist/config/ServerConfiguration.d.ts +38 -0
  47. package/dist/config/ServerConfiguration.d.ts.map +1 -0
  48. package/dist/config/ServerConfiguration.js +158 -0
  49. package/dist/config/ServerConfiguration.js.map +1 -0
  50. package/dist/docs/DocumentationGenerator.d.ts +184 -0
  51. package/dist/docs/DocumentationGenerator.d.ts.map +1 -0
  52. package/dist/docs/DocumentationGenerator.js +735 -0
  53. package/dist/docs/DocumentationGenerator.js.map +1 -0
  54. package/dist/docs/MarkdownFormatter.d.ts +84 -0
  55. package/dist/docs/MarkdownFormatter.d.ts.map +1 -0
  56. package/dist/docs/MarkdownFormatter.js +448 -0
  57. package/dist/docs/MarkdownFormatter.js.map +1 -0
  58. package/dist/docs/index.d.ts +8 -0
  59. package/dist/docs/index.d.ts.map +1 -0
  60. package/dist/docs/index.js +7 -0
  61. package/dist/docs/index.js.map +1 -0
  62. package/dist/index.d.ts +1 -4
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +12 -212
  65. package/dist/index.js.map +1 -1
  66. package/dist/performance/AnomalyDetector.d.ts +63 -0
  67. package/dist/performance/AnomalyDetector.d.ts.map +1 -0
  68. package/dist/performance/AnomalyDetector.js +222 -0
  69. package/dist/performance/AnomalyDetector.js.map +1 -0
  70. package/dist/performance/BenchmarkAnalyzer.d.ts +67 -0
  71. package/dist/performance/BenchmarkAnalyzer.d.ts.map +1 -0
  72. package/dist/performance/BenchmarkAnalyzer.js +301 -0
  73. package/dist/performance/BenchmarkAnalyzer.js.map +1 -0
  74. package/dist/performance/MetricsCollector.d.ts +139 -0
  75. package/dist/performance/MetricsCollector.d.ts.map +1 -0
  76. package/dist/performance/MetricsCollector.js +320 -0
  77. package/dist/performance/MetricsCollector.js.map +1 -0
  78. package/dist/performance/PerformanceAnalytics.d.ts +162 -0
  79. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -0
  80. package/dist/performance/PerformanceAnalytics.js +554 -0
  81. package/dist/performance/PerformanceAnalytics.js.map +1 -0
  82. package/dist/performance/PerformanceMonitor.d.ts +202 -0
  83. package/dist/performance/PerformanceMonitor.d.ts.map +1 -0
  84. package/dist/performance/PerformanceMonitor.js +478 -0
  85. package/dist/performance/PerformanceMonitor.js.map +1 -0
  86. package/dist/performance/TrendAnalyzer.d.ts +69 -0
  87. package/dist/performance/TrendAnalyzer.d.ts.map +1 -0
  88. package/dist/performance/TrendAnalyzer.js +203 -0
  89. package/dist/performance/TrendAnalyzer.js.map +1 -0
  90. package/dist/performance/index.d.ts +11 -0
  91. package/dist/performance/index.d.ts.map +1 -0
  92. package/dist/performance/index.js +8 -0
  93. package/dist/performance/index.js.map +1 -0
  94. package/dist/security/InputValidator.d.ts +215 -0
  95. package/dist/security/InputValidator.d.ts.map +1 -0
  96. package/dist/security/InputValidator.js +278 -0
  97. package/dist/security/InputValidator.js.map +1 -0
  98. package/dist/security/SecurityConfig.d.ts +129 -0
  99. package/dist/security/SecurityConfig.d.ts.map +1 -0
  100. package/dist/security/SecurityConfig.js +262 -0
  101. package/dist/security/SecurityConfig.js.map +1 -0
  102. package/dist/server/ConnectionTester.d.ts +24 -0
  103. package/dist/server/ConnectionTester.d.ts.map +1 -0
  104. package/dist/server/ConnectionTester.js +61 -0
  105. package/dist/server/ConnectionTester.js.map +1 -0
  106. package/dist/server/ToolRegistry.d.ts +46 -0
  107. package/dist/server/ToolRegistry.d.ts.map +1 -0
  108. package/dist/server/ToolRegistry.js +148 -0
  109. package/dist/server/ToolRegistry.js.map +1 -0
  110. package/dist/tools/BaseToolClass.d.ts +76 -0
  111. package/dist/tools/BaseToolClass.d.ts.map +1 -0
  112. package/dist/tools/BaseToolClass.js +104 -0
  113. package/dist/tools/BaseToolClass.js.map +1 -0
  114. package/dist/tools/BaseToolManager.d.ts +26 -0
  115. package/dist/tools/BaseToolManager.d.ts.map +1 -0
  116. package/dist/tools/BaseToolManager.js +56 -0
  117. package/dist/tools/BaseToolManager.js.map +1 -0
  118. package/dist/tools/base.d.ts +37 -0
  119. package/dist/tools/base.d.ts.map +1 -0
  120. package/dist/tools/base.js +60 -0
  121. package/dist/tools/base.js.map +1 -0
  122. package/dist/tools/cache.d.ts +260 -0
  123. package/dist/tools/cache.d.ts.map +1 -0
  124. package/dist/tools/cache.js +237 -0
  125. package/dist/tools/cache.js.map +1 -0
  126. package/dist/tools/index.d.ts +2 -0
  127. package/dist/tools/index.d.ts.map +1 -1
  128. package/dist/tools/index.js +2 -0
  129. package/dist/tools/index.js.map +1 -1
  130. package/dist/tools/performance.d.ts +63 -0
  131. package/dist/tools/performance.d.ts.map +1 -0
  132. package/dist/tools/performance.js +865 -0
  133. package/dist/tools/performance.js.map +1 -0
  134. package/dist/types/client.d.ts +1 -0
  135. package/dist/types/client.d.ts.map +1 -1
  136. package/dist/types/client.js.map +1 -1
  137. package/dist/utils/toolWrapper.d.ts +4 -0
  138. package/dist/utils/toolWrapper.d.ts.map +1 -1
  139. package/dist/utils/toolWrapper.js +11 -0
  140. package/dist/utils/toolWrapper.js.map +1 -1
  141. package/dist/utils/validation.d.ts +68 -0
  142. package/dist/utils/validation.d.ts.map +1 -0
  143. package/dist/utils/validation.js +185 -0
  144. package/dist/utils/validation.js.map +1 -0
  145. package/docs/CACHING.md +340 -0
  146. package/docs/DOCKER.md +451 -0
  147. package/docs/PERFORMANCE_MONITORING.md +471 -0
  148. package/docs/SECURITY_TESTING.md +393 -0
  149. package/docs/api/README.md +200 -0
  150. package/docs/api/categories/auth.md +40 -0
  151. package/docs/api/categories/cache.md +41 -0
  152. package/docs/api/categories/comment.md +44 -0
  153. package/docs/api/categories/media.md +43 -0
  154. package/docs/api/categories/page.md +43 -0
  155. package/docs/api/categories/performance.md +44 -0
  156. package/docs/api/categories/post.md +43 -0
  157. package/docs/api/categories/site.md +43 -0
  158. package/docs/api/categories/taxonomy.md +47 -0
  159. package/docs/api/categories/user.md +43 -0
  160. package/docs/api/openapi.json +3305 -0
  161. package/docs/api/summary.json +12 -0
  162. package/docs/api/tools/wp_approve_comment.md +98 -0
  163. package/docs/api/tools/wp_cache_clear.md +120 -0
  164. package/docs/api/tools/wp_cache_info.md +119 -0
  165. package/docs/api/tools/wp_cache_stats.md +119 -0
  166. package/docs/api/tools/wp_cache_warm.md +119 -0
  167. package/docs/api/tools/wp_create_application_password.md +102 -0
  168. package/docs/api/tools/wp_create_category.md +102 -0
  169. package/docs/api/tools/wp_create_comment.md +128 -0
  170. package/docs/api/tools/wp_create_page.md +135 -0
  171. package/docs/api/tools/wp_create_post.md +147 -0
  172. package/docs/api/tools/wp_create_tag.md +101 -0
  173. package/docs/api/tools/wp_create_user.md +135 -0
  174. package/docs/api/tools/wp_delete_application_password.md +101 -0
  175. package/docs/api/tools/wp_delete_category.md +100 -0
  176. package/docs/api/tools/wp_delete_comment.md +101 -0
  177. package/docs/api/tools/wp_delete_media.md +108 -0
  178. package/docs/api/tools/wp_delete_page.md +108 -0
  179. package/docs/api/tools/wp_delete_post.md +117 -0
  180. package/docs/api/tools/wp_delete_tag.md +100 -0
  181. package/docs/api/tools/wp_delete_user.md +108 -0
  182. package/docs/api/tools/wp_get_application_passwords.md +103 -0
  183. package/docs/api/tools/wp_get_auth_status.md +101 -0
  184. package/docs/api/tools/wp_get_category.md +103 -0
  185. package/docs/api/tools/wp_get_comment.md +103 -0
  186. package/docs/api/tools/wp_get_current_user.md +101 -0
  187. package/docs/api/tools/wp_get_media.md +103 -0
  188. package/docs/api/tools/wp_get_page.md +103 -0
  189. package/docs/api/tools/wp_get_page_revisions.md +103 -0
  190. package/docs/api/tools/wp_get_post.md +112 -0
  191. package/docs/api/tools/wp_get_post_revisions.md +103 -0
  192. package/docs/api/tools/wp_get_site_settings.md +108 -0
  193. package/docs/api/tools/wp_get_tag.md +103 -0
  194. package/docs/api/tools/wp_get_user.md +103 -0
  195. package/docs/api/tools/wp_list_categories.md +111 -0
  196. package/docs/api/tools/wp_list_comments.md +111 -0
  197. package/docs/api/tools/wp_list_media.md +145 -0
  198. package/docs/api/tools/wp_list_pages.md +145 -0
  199. package/docs/api/tools/wp_list_posts.md +156 -0
  200. package/docs/api/tools/wp_list_tags.md +110 -0
  201. package/docs/api/tools/wp_list_users.md +111 -0
  202. package/docs/api/tools/wp_performance_alerts.md +162 -0
  203. package/docs/api/tools/wp_performance_benchmark.md +160 -0
  204. package/docs/api/tools/wp_performance_export.md +162 -0
  205. package/docs/api/tools/wp_performance_history.md +161 -0
  206. package/docs/api/tools/wp_performance_optimize.md +162 -0
  207. package/docs/api/tools/wp_performance_stats.md +160 -0
  208. package/docs/api/tools/wp_search_site.md +99 -0
  209. package/docs/api/tools/wp_spam_comment.md +98 -0
  210. package/docs/api/tools/wp_switch_auth_method.md +122 -0
  211. package/docs/api/tools/wp_test_auth.md +96 -0
  212. package/docs/api/tools/wp_update_category.md +102 -0
  213. package/docs/api/tools/wp_update_comment.md +127 -0
  214. package/docs/api/tools/wp_update_media.md +129 -0
  215. package/docs/api/tools/wp_update_page.md +135 -0
  216. package/docs/api/tools/wp_update_post.md +144 -0
  217. package/docs/api/tools/wp_update_site_settings.md +127 -0
  218. package/docs/api/tools/wp_update_tag.md +102 -0
  219. package/docs/api/tools/wp_update_user.md +134 -0
  220. package/docs/api/tools/wp_upload_media.md +131 -0
  221. package/docs/api/types/WordPressPost.md +39 -0
  222. package/docs/contract-testing.md +183 -0
  223. package/docs/developer/NPM_AUTH_SETUP.md +3 -3
  224. package/docs/wordpress-rest-api-authentication-troubleshooting.md +218 -0
  225. package/package.json +84 -64
  226. package/src/cache/CacheInvalidation.ts +421 -0
  227. package/src/cache/CacheManager.ts +391 -0
  228. package/src/cache/HttpCacheWrapper.ts +372 -0
  229. package/src/cache/__tests__/CacheInvalidation.test.ts +299 -0
  230. package/src/cache/__tests__/CacheManager.test.ts +300 -0
  231. package/src/cache/__tests__/CachedWordPressClient.test.ts +304 -0
  232. package/src/cache/__tests__/HttpCacheWrapper.test.ts +359 -0
  233. package/src/cache/index.ts +26 -0
  234. package/src/client/CachedWordPressClient.ts +442 -0
  235. package/src/config/ConfigurationSchema.ts +246 -0
  236. package/src/config/ServerConfiguration.ts +215 -0
  237. package/src/docs/DocumentationGenerator.ts +952 -0
  238. package/src/docs/MarkdownFormatter.ts +494 -0
  239. package/src/docs/index.ts +21 -0
  240. package/src/index.ts +14 -274
  241. package/src/performance/MetricsCollector.ts +447 -0
  242. package/src/performance/PerformanceAnalytics.ts +762 -0
  243. package/src/performance/PerformanceMonitor.ts +649 -0
  244. package/src/performance/index.ts +28 -0
  245. package/src/security/InputValidator.ts +319 -0
  246. package/src/security/SecurityConfig.ts +301 -0
  247. package/src/server/ConnectionTester.ts +74 -0
  248. package/src/server/ToolRegistry.ts +194 -0
  249. package/src/tools/BaseToolManager.ts +66 -0
  250. package/src/tools/cache.ts +259 -0
  251. package/src/tools/index.ts +2 -0
  252. package/src/tools/performance.ts +948 -0
  253. package/src/types/client.ts +1 -0
  254. package/src/utils/toolWrapper.ts +11 -0
  255. package/src/utils/validation.ts +259 -0
@@ -0,0 +1,280 @@
1
+ /**
2
+ * HTTP-level caching wrapper with ETags and Cache-Control headers
3
+ * Implements WordPress REST API caching best practices
4
+ */
5
+ import { CachePresets } from './CacheManager.js';
6
+ import * as crypto from 'crypto';
7
+ /**
8
+ * HTTP caching wrapper that adds intelligent caching to HTTP requests
9
+ */
10
+ export class HttpCacheWrapper {
11
+ cacheManager;
12
+ siteId;
13
+ constructor(cacheManager, siteId) {
14
+ this.cacheManager = cacheManager;
15
+ this.siteId = siteId;
16
+ }
17
+ /**
18
+ * Execute request with intelligent caching
19
+ */
20
+ async request(requestFn, options, cacheOptions) {
21
+ // Only cache GET requests
22
+ if (options.method.toUpperCase() !== 'GET') {
23
+ return await requestFn();
24
+ }
25
+ const cacheKey = this.generateCacheKey(options);
26
+ const cachedEntry = this.cacheManager.getEntry(cacheKey);
27
+ // Check for conditional request support
28
+ if (cachedEntry && this.cacheManager.supportsConditionalRequest(cacheKey)) {
29
+ const conditionalHeaders = this.cacheManager.getConditionalHeaders(cacheKey);
30
+ // Add conditional headers to request
31
+ const requestWithHeaders = {
32
+ ...options,
33
+ headers: {
34
+ ...options.headers,
35
+ ...conditionalHeaders
36
+ }
37
+ };
38
+ try {
39
+ const response = await this.executeRequestWithHeaders(requestFn, requestWithHeaders);
40
+ // 304 Not Modified - return cached data
41
+ if (response.status === 304) {
42
+ return {
43
+ data: cachedEntry.value.data,
44
+ status: 200,
45
+ headers: cachedEntry.value.headers,
46
+ cached: true
47
+ };
48
+ }
49
+ // Content changed - update cache
50
+ return await this.cacheAndReturn(response, cacheKey, cacheOptions);
51
+ }
52
+ catch (error) {
53
+ // If conditional request fails, try without conditions
54
+ console.warn('Conditional request failed, falling back to regular request:', error);
55
+ }
56
+ }
57
+ // Check for valid cached response
58
+ const cached = this.cacheManager.get(cacheKey);
59
+ if (cached) {
60
+ return {
61
+ data: cached.data,
62
+ status: cached.status,
63
+ headers: cached.headers,
64
+ cached: true
65
+ };
66
+ }
67
+ // Execute fresh request
68
+ const response = await requestFn();
69
+ return await this.cacheAndReturn(response, cacheKey, cacheOptions);
70
+ }
71
+ /**
72
+ * Invalidate cache for specific endpoint
73
+ */
74
+ invalidate(endpoint, params) {
75
+ const cacheKey = this.cacheManager.generateKey(this.siteId, endpoint, params);
76
+ this.cacheManager.delete(cacheKey);
77
+ }
78
+ /**
79
+ * Invalidate cache entries matching pattern
80
+ */
81
+ invalidatePattern(pattern) {
82
+ const regex = new RegExp(`${this.siteId}:${pattern}`);
83
+ return this.cacheManager.clearPattern(regex);
84
+ }
85
+ /**
86
+ * Invalidate all cache for this site
87
+ */
88
+ invalidateAll() {
89
+ return this.cacheManager.clearSite(this.siteId);
90
+ }
91
+ /**
92
+ * Pre-warm cache with data
93
+ */
94
+ warm(endpoint, data, params, cacheOptions) {
95
+ const cacheKey = this.cacheManager.generateKey(this.siteId, endpoint, params);
96
+ const ttl = cacheOptions?.ttl || this.getDefaultTTL(endpoint);
97
+ const cachedResponse = {
98
+ data,
99
+ status: 200,
100
+ headers: this.generateCacheHeaders(cacheOptions, endpoint),
101
+ etag: this.generateETag(data),
102
+ lastModified: new Date().toUTCString(),
103
+ cacheControl: cacheOptions?.cacheControl || this.getDefaultCacheControl(endpoint)
104
+ };
105
+ this.cacheManager.set(cacheKey, cachedResponse, ttl, cachedResponse.etag, cachedResponse.lastModified);
106
+ }
107
+ /**
108
+ * Get cache statistics for this site
109
+ */
110
+ getStats() {
111
+ return this.cacheManager.getStats();
112
+ }
113
+ /**
114
+ * Generate cache key for request
115
+ */
116
+ generateCacheKey(options) {
117
+ const endpoint = this.extractEndpoint(options.url);
118
+ return this.cacheManager.generateKey(this.siteId, endpoint, {
119
+ ...options.params,
120
+ // Include relevant headers that affect response
121
+ ...this.extractCacheableHeaders(options.headers)
122
+ });
123
+ }
124
+ /**
125
+ * Extract endpoint from full URL
126
+ */
127
+ extractEndpoint(url) {
128
+ // Extract the path after /wp-json/wp/v2/
129
+ const match = url.match(/\/wp-json\/wp\/v2\/(.+?)(?:\?|$)/);
130
+ return match ? match[1] : url;
131
+ }
132
+ /**
133
+ * Extract headers that affect caching
134
+ */
135
+ extractCacheableHeaders(headers) {
136
+ if (!headers)
137
+ return {};
138
+ const cacheableHeaders = {};
139
+ const relevantHeaders = ['accept', 'accept-language', 'authorization'];
140
+ for (const header of relevantHeaders) {
141
+ if (headers[header]) {
142
+ cacheableHeaders[header] = headers[header];
143
+ }
144
+ }
145
+ return cacheableHeaders;
146
+ }
147
+ /**
148
+ * Execute request with modified headers
149
+ */
150
+ async executeRequestWithHeaders(requestFn, options) {
151
+ // This is a simplified approach - in practice, you'd need to modify the actual request
152
+ // The actual implementation would depend on your HTTP client (axios, fetch, etc.)
153
+ return await requestFn();
154
+ }
155
+ /**
156
+ * Cache response and return with cache metadata
157
+ */
158
+ async cacheAndReturn(response, cacheKey, cacheOptions) {
159
+ // Don't cache error responses (unless specifically configured)
160
+ if (response.status >= 400) {
161
+ return response;
162
+ }
163
+ const endpoint = this.extractEndpointFromKey(cacheKey);
164
+ const ttl = cacheOptions?.ttl || this.getDefaultTTL(endpoint);
165
+ // Generate ETags and cache headers
166
+ const etag = this.generateETag(response.data);
167
+ const lastModified = new Date().toUTCString();
168
+ const cacheControl = cacheOptions?.cacheControl || this.getDefaultCacheControl(endpoint);
169
+ const cachedResponse = {
170
+ data: response.data,
171
+ status: response.status,
172
+ headers: {
173
+ ...response.headers,
174
+ 'etag': etag,
175
+ 'last-modified': lastModified,
176
+ 'cache-control': cacheControl
177
+ },
178
+ etag,
179
+ lastModified,
180
+ cacheControl
181
+ };
182
+ // Store in cache
183
+ this.cacheManager.set(cacheKey, cachedResponse, ttl, etag, lastModified);
184
+ return {
185
+ data: response.data,
186
+ status: response.status,
187
+ headers: cachedResponse.headers,
188
+ cached: false
189
+ };
190
+ }
191
+ /**
192
+ * Generate ETag for response data
193
+ */
194
+ generateETag(data) {
195
+ const hash = crypto
196
+ .createHash('md5')
197
+ .update(JSON.stringify(data))
198
+ .digest('hex');
199
+ return `"${hash}"`;
200
+ }
201
+ /**
202
+ * Get default TTL based on endpoint type
203
+ */
204
+ getDefaultTTL(endpoint) {
205
+ // Static data endpoints
206
+ if (this.isStaticEndpoint(endpoint)) {
207
+ return CachePresets.STATIC.ttl;
208
+ }
209
+ // Semi-static data endpoints
210
+ if (this.isSemiStaticEndpoint(endpoint)) {
211
+ return CachePresets.SEMI_STATIC.ttl;
212
+ }
213
+ // Session/auth endpoints
214
+ if (this.isSessionEndpoint(endpoint)) {
215
+ return CachePresets.SESSION.ttl;
216
+ }
217
+ // Default to dynamic for posts, comments, etc.
218
+ return CachePresets.DYNAMIC.ttl;
219
+ }
220
+ /**
221
+ * Get default Cache-Control header based on endpoint
222
+ */
223
+ getDefaultCacheControl(endpoint) {
224
+ if (this.isStaticEndpoint(endpoint)) {
225
+ return CachePresets.STATIC.cacheControl;
226
+ }
227
+ if (this.isSemiStaticEndpoint(endpoint)) {
228
+ return CachePresets.SEMI_STATIC.cacheControl;
229
+ }
230
+ if (this.isSessionEndpoint(endpoint)) {
231
+ return CachePresets.SESSION.cacheControl;
232
+ }
233
+ return CachePresets.DYNAMIC.cacheControl;
234
+ }
235
+ /**
236
+ * Generate cache headers
237
+ */
238
+ generateCacheHeaders(options, endpoint) {
239
+ const headers = {};
240
+ if (options?.cacheControl) {
241
+ headers['cache-control'] = options.cacheControl;
242
+ }
243
+ else if (endpoint) {
244
+ headers['cache-control'] = this.getDefaultCacheControl(endpoint);
245
+ }
246
+ if (options?.varyHeaders?.length) {
247
+ headers['vary'] = options.varyHeaders.join(', ');
248
+ }
249
+ return headers;
250
+ }
251
+ /**
252
+ * Check if endpoint contains static data
253
+ */
254
+ isStaticEndpoint(endpoint) {
255
+ const staticEndpoints = ['settings', 'types', 'statuses'];
256
+ return staticEndpoints.some(pattern => endpoint.includes(pattern));
257
+ }
258
+ /**
259
+ * Check if endpoint contains semi-static data
260
+ */
261
+ isSemiStaticEndpoint(endpoint) {
262
+ const semiStaticEndpoints = ['categories', 'tags', 'users', 'taxonomies'];
263
+ return semiStaticEndpoints.some(pattern => endpoint.includes(pattern));
264
+ }
265
+ /**
266
+ * Check if endpoint is session-related
267
+ */
268
+ isSessionEndpoint(endpoint) {
269
+ const sessionEndpoints = ['users/me', 'application-passwords'];
270
+ return sessionEndpoints.some(pattern => endpoint.includes(pattern));
271
+ }
272
+ /**
273
+ * Extract endpoint from cache key
274
+ */
275
+ extractEndpointFromKey(cacheKey) {
276
+ const parts = cacheKey.split(':');
277
+ return parts[1] || '';
278
+ }
279
+ }
280
+ //# sourceMappingURL=HttpCacheWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpCacheWrapper.js","sourceRoot":"","sources":["../../src/cache/HttpCacheWrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for CacheInvalidation
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=CacheInvalidation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheInvalidation.test.d.ts","sourceRoot":"","sources":["../../../src/cache/__tests__/CacheInvalidation.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Tests for CacheInvalidation
3
+ */
4
+ import { CacheManager } from '../CacheManager.js';
5
+ import { HttpCacheWrapper } from '../HttpCacheWrapper.js';
6
+ import { CacheInvalidation, WordPressCachePatterns } from '../CacheInvalidation.js';
7
+ describe('CacheInvalidation', () => {
8
+ let cacheManager;
9
+ let httpCache;
10
+ let cacheInvalidation;
11
+ beforeEach(() => {
12
+ cacheManager = new CacheManager({
13
+ maxSize: 100,
14
+ defaultTTL: 10000,
15
+ enableLRU: true,
16
+ enableStats: true
17
+ });
18
+ httpCache = new HttpCacheWrapper(cacheManager, 'test-site');
19
+ cacheInvalidation = new CacheInvalidation(httpCache);
20
+ });
21
+ afterEach(() => {
22
+ cacheManager.clear();
23
+ });
24
+ describe('Default Invalidation Rules', () => {
25
+ test('should have default rules for posts', () => {
26
+ const rules = cacheInvalidation.getRules();
27
+ expect(rules.posts).toBeDefined();
28
+ expect(rules.posts.length).toBeGreaterThan(0);
29
+ const createRule = rules.posts.find(r => r.trigger === 'create');
30
+ expect(createRule).toBeDefined();
31
+ expect(createRule?.patterns).toContain('posts');
32
+ expect(createRule?.immediate).toBe(true);
33
+ expect(createRule?.cascade).toBe(true);
34
+ });
35
+ test('should have default rules for categories', () => {
36
+ const rules = cacheInvalidation.getRules();
37
+ expect(rules.categories).toBeDefined();
38
+ const updateRule = rules.categories.find(r => r.trigger === 'update');
39
+ expect(updateRule).toBeDefined();
40
+ expect(updateRule?.patterns).toContain('categories/\\d+');
41
+ expect(updateRule?.cascade).toBe(true);
42
+ });
43
+ test('should have default rules for users', () => {
44
+ const rules = cacheInvalidation.getRules();
45
+ expect(rules.users).toBeDefined();
46
+ const deleteRule = rules.users.find(r => r.trigger === 'delete');
47
+ expect(deleteRule).toBeDefined();
48
+ expect(deleteRule?.patterns).toContain('users');
49
+ });
50
+ });
51
+ describe('Custom Invalidation Rules', () => {
52
+ test('should register custom invalidation rules', () => {
53
+ const customRule = {
54
+ trigger: 'update',
55
+ patterns: ['custom-endpoint.*'],
56
+ immediate: true
57
+ };
58
+ cacheInvalidation.registerRule('custom', customRule);
59
+ const rules = cacheInvalidation.getRules();
60
+ expect(rules.custom).toBeDefined();
61
+ expect(rules.custom).toContain(customRule);
62
+ });
63
+ test('should support multiple rules per resource', () => {
64
+ const rule1 = {
65
+ trigger: 'create',
66
+ patterns: ['test.*'],
67
+ immediate: true
68
+ };
69
+ const rule2 = {
70
+ trigger: 'update',
71
+ patterns: ['test/\\d+'],
72
+ immediate: false
73
+ };
74
+ cacheInvalidation.registerRule('test', rule1);
75
+ cacheInvalidation.registerRule('test', rule2);
76
+ const rules = cacheInvalidation.getRules();
77
+ expect(rules.test).toHaveLength(2);
78
+ expect(rules.test).toContain(rule1);
79
+ expect(rules.test).toContain(rule2);
80
+ });
81
+ });
82
+ describe('Event Processing', () => {
83
+ test('should process invalidation events', async () => {
84
+ // Pre-populate cache with some test data
85
+ httpCache.warm('posts', [{ id: 1 }, { id: 2 }]);
86
+ httpCache.warm('posts/1', { id: 1, title: 'Test Post' });
87
+ httpCache.warm('categories', [{ id: 1 }]);
88
+ expect(cacheManager.getStats().totalSize).toBe(3);
89
+ // Trigger post creation event
90
+ await cacheInvalidation.trigger({
91
+ type: 'create',
92
+ resource: 'posts',
93
+ id: 3,
94
+ siteId: 'test-site',
95
+ timestamp: Date.now()
96
+ });
97
+ // Should invalidate posts listings but not specific post
98
+ const stats = cacheManager.getStats();
99
+ expect(stats.totalSize).toBeLessThan(3);
100
+ });
101
+ test('should process events in queue order', async () => {
102
+ const processedEvents = [];
103
+ // Mock the invalidation process to track order
104
+ const originalInvalidatePattern = httpCache.invalidatePattern;
105
+ httpCache.invalidatePattern = jest.fn().mockImplementation((pattern) => {
106
+ processedEvents.push(pattern);
107
+ return originalInvalidatePattern.call(httpCache, pattern);
108
+ });
109
+ // Queue multiple events
110
+ await Promise.all([
111
+ cacheInvalidation.trigger({
112
+ type: 'create',
113
+ resource: 'posts',
114
+ siteId: 'test-site',
115
+ timestamp: Date.now()
116
+ }),
117
+ cacheInvalidation.trigger({
118
+ type: 'update',
119
+ resource: 'categories',
120
+ siteId: 'test-site',
121
+ timestamp: Date.now()
122
+ })
123
+ ]);
124
+ expect(processedEvents.length).toBeGreaterThan(0);
125
+ });
126
+ test('should handle resource invalidation by type', async () => {
127
+ httpCache.warm('posts', [{ id: 1 }]);
128
+ httpCache.warm('posts/1', { id: 1 });
129
+ expect(cacheManager.getStats().totalSize).toBe(2);
130
+ await cacheInvalidation.invalidateResource('posts', 1, 'update');
131
+ // Should clear specific post and related caches
132
+ const stats = cacheManager.getStats();
133
+ expect(stats.totalSize).toBeLessThan(2);
134
+ });
135
+ });
136
+ describe('Pattern Matching', () => {
137
+ test('should replace placeholders in patterns', async () => {
138
+ // Pre-populate cache
139
+ httpCache.warm('posts/123', { id: 123 });
140
+ httpCache.warm('posts/456', { id: 456 });
141
+ httpCache.warm('pages/123', { id: 123 });
142
+ expect(cacheManager.getStats().totalSize).toBe(3);
143
+ // Trigger event with specific ID
144
+ await cacheInvalidation.trigger({
145
+ type: 'update',
146
+ resource: 'posts',
147
+ id: 123,
148
+ siteId: 'test-site',
149
+ timestamp: Date.now()
150
+ });
151
+ // Should only invalidate posts/123, not posts/456 or pages/123
152
+ const remainingKeys = [];
153
+ for (const [key] of cacheManager.cache.entries()) {
154
+ remainingKeys.push(key);
155
+ }
156
+ expect(remainingKeys).not.toContain(expect.stringContaining('posts'));
157
+ });
158
+ });
159
+ describe('Statistics', () => {
160
+ test('should track invalidation statistics', () => {
161
+ const stats = cacheInvalidation.getStats();
162
+ expect(stats).toHaveProperty('queueSize');
163
+ expect(stats).toHaveProperty('rulesCount');
164
+ expect(stats).toHaveProperty('processing');
165
+ expect(typeof stats.queueSize).toBe('number');
166
+ expect(typeof stats.rulesCount).toBe('number');
167
+ expect(typeof stats.processing).toBe('boolean');
168
+ expect(stats.rulesCount).toBeGreaterThan(0);
169
+ });
170
+ test('should clear rules', () => {
171
+ const initialStats = cacheInvalidation.getStats();
172
+ expect(initialStats.rulesCount).toBeGreaterThan(0);
173
+ cacheInvalidation.clearRules();
174
+ const clearedStats = cacheInvalidation.getStats();
175
+ expect(clearedStats.rulesCount).toBe(0);
176
+ });
177
+ });
178
+ });
179
+ describe('WordPressCachePatterns', () => {
180
+ let cacheManager;
181
+ let httpCache;
182
+ beforeEach(() => {
183
+ cacheManager = new CacheManager({
184
+ maxSize: 100,
185
+ defaultTTL: 10000,
186
+ enableLRU: true,
187
+ enableStats: true
188
+ });
189
+ httpCache = new HttpCacheWrapper(cacheManager, 'test-site');
190
+ });
191
+ afterEach(() => {
192
+ cacheManager.clear();
193
+ });
194
+ test('should invalidate content-related caches', () => {
195
+ // Pre-populate cache
196
+ httpCache.warm('posts', []);
197
+ httpCache.warm('pages', []);
198
+ httpCache.warm('comments', []);
199
+ httpCache.warm('categories', []);
200
+ expect(cacheManager.getStats().totalSize).toBe(4);
201
+ const invalidated = WordPressCachePatterns.invalidateContent(httpCache);
202
+ expect(invalidated).toBeGreaterThan(0);
203
+ // Should invalidate posts, pages, comments but not categories
204
+ expect(cacheManager.getStats().totalSize).toBeLessThan(4);
205
+ });
206
+ test('should invalidate taxonomy-related caches', () => {
207
+ httpCache.warm('categories', []);
208
+ httpCache.warm('tags', []);
209
+ httpCache.warm('posts', []);
210
+ expect(cacheManager.getStats().totalSize).toBe(3);
211
+ const invalidated = WordPressCachePatterns.invalidateTaxonomies(httpCache);
212
+ expect(invalidated).toBeGreaterThan(0);
213
+ // Should invalidate categories and tags but not posts
214
+ expect(cacheManager.getStats().totalSize).toBeLessThan(3);
215
+ });
216
+ test('should invalidate user-related caches', () => {
217
+ httpCache.warm('users', []);
218
+ httpCache.warm('users/me', {});
219
+ httpCache.warm('posts', []);
220
+ expect(cacheManager.getStats().totalSize).toBe(3);
221
+ const invalidated = WordPressCachePatterns.invalidateUsers(httpCache);
222
+ expect(invalidated).toBeGreaterThan(0);
223
+ // Should invalidate user caches but not posts
224
+ expect(cacheManager.getStats().totalSize).toBeLessThan(3);
225
+ });
226
+ test('should invalidate all caches', () => {
227
+ httpCache.warm('posts', []);
228
+ httpCache.warm('categories', []);
229
+ httpCache.warm('users', []);
230
+ expect(cacheManager.getStats().totalSize).toBe(3);
231
+ const invalidated = WordPressCachePatterns.invalidateAll(httpCache);
232
+ expect(invalidated).toBe(3);
233
+ expect(cacheManager.getStats().totalSize).toBe(0);
234
+ });
235
+ });
236
+ //# sourceMappingURL=CacheInvalidation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheInvalidation.test.js","sourceRoot":"","sources":["../../../src/cache/__tests__/CacheInvalidation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for CacheManager
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=CacheManager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheManager.test.d.ts","sourceRoot":"","sources":["../../../src/cache/__tests__/CacheManager.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}