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,308 @@
1
+ /**
2
+ * Intelligent caching system for WordPress MCP Server
3
+ * Implements multi-layer caching with TTL, LRU eviction, and site-specific keys
4
+ */
5
+ import * as crypto from 'crypto';
6
+ /**
7
+ * High-performance in-memory cache with TTL and LRU eviction
8
+ */
9
+ export class CacheManager {
10
+ config;
11
+ cache = new Map();
12
+ accessOrder = [];
13
+ stats = {
14
+ hits: 0,
15
+ misses: 0,
16
+ evictions: 0,
17
+ totalSize: 0,
18
+ hitRate: 0
19
+ };
20
+ constructor(config) {
21
+ this.config = config;
22
+ // Start cleanup interval
23
+ this.startCleanupInterval();
24
+ }
25
+ /**
26
+ * Generate cache key with site prefix and parameter hash
27
+ */
28
+ generateKey(siteId, endpoint, params) {
29
+ const baseKey = `${siteId}:${endpoint}`;
30
+ if (!params || Object.keys(params).length === 0) {
31
+ return baseKey;
32
+ }
33
+ // Create deterministic hash of parameters
34
+ const paramHash = crypto
35
+ .createHash('md5')
36
+ .update(JSON.stringify(this.normalizeParams(params)))
37
+ .digest('hex')
38
+ .substring(0, 8);
39
+ return `${baseKey}:${paramHash}`;
40
+ }
41
+ /**
42
+ * Get value from cache if not expired
43
+ */
44
+ get(key) {
45
+ const entry = this.cache.get(key);
46
+ if (!entry) {
47
+ this.stats.misses++;
48
+ this.updateHitRate();
49
+ return null;
50
+ }
51
+ // Check if expired
52
+ if (this.isExpired(entry)) {
53
+ this.cache.delete(key);
54
+ this.removeFromAccessOrder(key);
55
+ this.stats.misses++;
56
+ this.updateHitRate();
57
+ return null;
58
+ }
59
+ // Update access tracking
60
+ entry.accessCount++;
61
+ entry.lastAccessed = Date.now();
62
+ this.updateAccessOrder(key);
63
+ this.stats.hits++;
64
+ this.updateHitRate();
65
+ return entry.value;
66
+ }
67
+ /**
68
+ * Set value in cache with TTL
69
+ */
70
+ set(key, value, ttl = this.config.defaultTTL, etag, lastModified) {
71
+ // Check if we need to evict entries
72
+ if (this.cache.size >= this.config.maxSize && !this.cache.has(key)) {
73
+ this.evictLRU();
74
+ }
75
+ const entry = {
76
+ value,
77
+ timestamp: Date.now(),
78
+ ttl,
79
+ etag,
80
+ lastModified,
81
+ accessCount: 1,
82
+ lastAccessed: Date.now()
83
+ };
84
+ // If updating existing entry, remove from access order first
85
+ if (this.cache.has(key)) {
86
+ this.removeFromAccessOrder(key);
87
+ }
88
+ this.cache.set(key, entry);
89
+ this.accessOrder.push(key);
90
+ this.stats.totalSize = this.cache.size;
91
+ }
92
+ /**
93
+ * Check if cache entry exists and is valid
94
+ */
95
+ has(key) {
96
+ const entry = this.cache.get(key);
97
+ return entry !== undefined && !this.isExpired(entry);
98
+ }
99
+ /**
100
+ * Delete specific cache entry
101
+ */
102
+ delete(key) {
103
+ const existed = this.cache.delete(key);
104
+ if (existed) {
105
+ this.removeFromAccessOrder(key);
106
+ this.stats.totalSize = this.cache.size;
107
+ }
108
+ return existed;
109
+ }
110
+ /**
111
+ * Clear all cache entries
112
+ */
113
+ clear() {
114
+ this.cache.clear();
115
+ this.accessOrder = [];
116
+ this.stats.totalSize = 0;
117
+ }
118
+ /**
119
+ * Clear cache entries for specific site
120
+ */
121
+ clearSite(siteId) {
122
+ let cleared = 0;
123
+ const keysToDelete = [];
124
+ for (const key of this.cache.keys()) {
125
+ if (key.startsWith(`${siteId}:`)) {
126
+ keysToDelete.push(key);
127
+ }
128
+ }
129
+ for (const key of keysToDelete) {
130
+ this.delete(key);
131
+ cleared++;
132
+ }
133
+ return cleared;
134
+ }
135
+ /**
136
+ * Clear cache entries matching pattern
137
+ */
138
+ clearPattern(pattern) {
139
+ let cleared = 0;
140
+ const keysToDelete = [];
141
+ for (const key of this.cache.keys()) {
142
+ if (pattern.test(key)) {
143
+ keysToDelete.push(key);
144
+ }
145
+ }
146
+ for (const key of keysToDelete) {
147
+ this.delete(key);
148
+ cleared++;
149
+ }
150
+ return cleared;
151
+ }
152
+ /**
153
+ * Get cache statistics
154
+ */
155
+ getStats() {
156
+ return { ...this.stats };
157
+ }
158
+ /**
159
+ * Get cache entry with metadata
160
+ */
161
+ getEntry(key) {
162
+ const entry = this.cache.get(key);
163
+ if (!entry || this.isExpired(entry)) {
164
+ return null;
165
+ }
166
+ return { ...entry };
167
+ }
168
+ /**
169
+ * Check if entry supports conditional requests
170
+ */
171
+ supportsConditionalRequest(key) {
172
+ const entry = this.cache.get(key);
173
+ return !!(entry && (entry.etag || entry.lastModified));
174
+ }
175
+ /**
176
+ * Get conditional request headers
177
+ */
178
+ getConditionalHeaders(key) {
179
+ const entry = this.cache.get(key);
180
+ if (!entry)
181
+ return {};
182
+ const headers = {};
183
+ if (entry.etag) {
184
+ headers['If-None-Match'] = entry.etag;
185
+ }
186
+ if (entry.lastModified) {
187
+ headers['If-Modified-Since'] = entry.lastModified;
188
+ }
189
+ return headers;
190
+ }
191
+ /**
192
+ * Check if entry is expired
193
+ */
194
+ isExpired(entry) {
195
+ return Date.now() - entry.timestamp > entry.ttl;
196
+ }
197
+ /**
198
+ * Evict least recently used entry
199
+ */
200
+ evictLRU() {
201
+ if (this.accessOrder.length === 0)
202
+ return;
203
+ const lruKey = this.accessOrder[0];
204
+ this.cache.delete(lruKey);
205
+ this.accessOrder.shift();
206
+ this.stats.evictions++;
207
+ this.stats.totalSize = this.cache.size;
208
+ }
209
+ /**
210
+ * Update access order for LRU tracking
211
+ */
212
+ updateAccessOrder(key) {
213
+ if (!this.config.enableLRU)
214
+ return;
215
+ const index = this.accessOrder.indexOf(key);
216
+ if (index > -1) {
217
+ this.accessOrder.splice(index, 1);
218
+ }
219
+ this.accessOrder.push(key);
220
+ }
221
+ /**
222
+ * Remove key from access order
223
+ */
224
+ removeFromAccessOrder(key) {
225
+ const index = this.accessOrder.indexOf(key);
226
+ if (index > -1) {
227
+ this.accessOrder.splice(index, 1);
228
+ }
229
+ }
230
+ /**
231
+ * Normalize parameters for consistent hashing
232
+ */
233
+ normalizeParams(params) {
234
+ if (typeof params !== 'object' || params === null) {
235
+ return params;
236
+ }
237
+ // Sort object keys for consistent hashing
238
+ const normalized = Array.isArray(params) ? [] : {};
239
+ const keys = Object.keys(params).sort();
240
+ for (const key of keys) {
241
+ normalized[key] = this.normalizeParams(params[key]);
242
+ }
243
+ return normalized;
244
+ }
245
+ /**
246
+ * Update hit rate calculation
247
+ */
248
+ updateHitRate() {
249
+ const total = this.stats.hits + this.stats.misses;
250
+ this.stats.hitRate = total > 0 ? this.stats.hits / total : 0;
251
+ }
252
+ /**
253
+ * Start periodic cleanup of expired entries
254
+ */
255
+ startCleanupInterval() {
256
+ setInterval(() => {
257
+ this.cleanupExpired();
258
+ }, 60000); // Cleanup every minute
259
+ }
260
+ /**
261
+ * Remove expired entries
262
+ */
263
+ cleanupExpired() {
264
+ const now = Date.now();
265
+ const keysToDelete = [];
266
+ for (const [key, entry] of this.cache.entries()) {
267
+ if (now - entry.timestamp > entry.ttl) {
268
+ keysToDelete.push(key);
269
+ }
270
+ }
271
+ for (const key of keysToDelete) {
272
+ this.cache.delete(key);
273
+ this.removeFromAccessOrder(key);
274
+ }
275
+ this.stats.totalSize = this.cache.size;
276
+ }
277
+ }
278
+ /**
279
+ * Cache configuration presets for different data types
280
+ */
281
+ export const CachePresets = {
282
+ // Static data: site settings, user roles
283
+ STATIC: {
284
+ ttl: 4 * 60 * 60 * 1000, // 4 hours
285
+ cacheControl: 'public, max-age=14400'
286
+ },
287
+ // Semi-static: categories, tags, user profiles
288
+ SEMI_STATIC: {
289
+ ttl: 2 * 60 * 60 * 1000, // 2 hours
290
+ cacheControl: 'public, max-age=7200'
291
+ },
292
+ // Dynamic: posts, pages, comments
293
+ DYNAMIC: {
294
+ ttl: 15 * 60 * 1000, // 15 minutes
295
+ cacheControl: 'public, max-age=900'
296
+ },
297
+ // Session: authentication, current user
298
+ SESSION: {
299
+ ttl: 30 * 60 * 1000, // 30 minutes
300
+ cacheControl: 'private, max-age=1800'
301
+ },
302
+ // Fast changing: real-time data
303
+ REALTIME: {
304
+ ttl: 60 * 1000, // 1 minute
305
+ cacheControl: 'public, max-age=60'
306
+ }
307
+ };
308
+ //# sourceMappingURL=CacheManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../../src/cache/CacheManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * HTTP-level caching wrapper with ETags and Cache-Control headers
3
+ * Implements WordPress REST API caching best practices
4
+ */
5
+ import { CacheManager } from './CacheManager.js';
6
+ export interface HttpCacheOptions {
7
+ ttl?: number;
8
+ cacheControl?: string;
9
+ varyHeaders?: string[];
10
+ private?: boolean;
11
+ revalidate?: boolean;
12
+ }
13
+ export interface CachedResponse {
14
+ data: any;
15
+ status: number;
16
+ headers: Record<string, string>;
17
+ etag?: string;
18
+ lastModified?: string;
19
+ cacheControl?: string;
20
+ }
21
+ export interface RequestOptions {
22
+ method: string;
23
+ url: string;
24
+ headers?: Record<string, string>;
25
+ params?: any;
26
+ data?: any;
27
+ }
28
+ /**
29
+ * HTTP caching wrapper that adds intelligent caching to HTTP requests
30
+ */
31
+ export declare class HttpCacheWrapper {
32
+ private cacheManager;
33
+ private siteId;
34
+ constructor(cacheManager: CacheManager, siteId: string);
35
+ /**
36
+ * Execute request with intelligent caching
37
+ */
38
+ request<T = any>(requestFn: () => Promise<{
39
+ data: T;
40
+ status: number;
41
+ headers: Record<string, string>;
42
+ }>, options: RequestOptions, cacheOptions?: HttpCacheOptions): Promise<{
43
+ data: T;
44
+ status: number;
45
+ headers: Record<string, string>;
46
+ cached?: boolean;
47
+ }>;
48
+ /**
49
+ * Invalidate cache for specific endpoint
50
+ */
51
+ invalidate(endpoint: string, params?: any): void;
52
+ /**
53
+ * Invalidate cache entries matching pattern
54
+ */
55
+ invalidatePattern(pattern: string): number;
56
+ /**
57
+ * Invalidate all cache for this site
58
+ */
59
+ invalidateAll(): number;
60
+ /**
61
+ * Pre-warm cache with data
62
+ */
63
+ warm<T>(endpoint: string, data: T, params?: any, cacheOptions?: HttpCacheOptions): void;
64
+ /**
65
+ * Get cache statistics for this site
66
+ */
67
+ getStats(): import("./CacheManager.js").CacheStats;
68
+ /**
69
+ * Generate cache key for request
70
+ */
71
+ private generateCacheKey;
72
+ /**
73
+ * Extract endpoint from full URL
74
+ */
75
+ private extractEndpoint;
76
+ /**
77
+ * Extract headers that affect caching
78
+ */
79
+ private extractCacheableHeaders;
80
+ /**
81
+ * Execute request with modified headers
82
+ */
83
+ private executeRequestWithHeaders;
84
+ /**
85
+ * Cache response and return with cache metadata
86
+ */
87
+ private cacheAndReturn;
88
+ /**
89
+ * Generate ETag for response data
90
+ */
91
+ private generateETag;
92
+ /**
93
+ * Get default TTL based on endpoint type
94
+ */
95
+ private getDefaultTTL;
96
+ /**
97
+ * Get default Cache-Control header based on endpoint
98
+ */
99
+ private getDefaultCacheControl;
100
+ /**
101
+ * Generate cache headers
102
+ */
103
+ private generateCacheHeaders;
104
+ /**
105
+ * Check if endpoint contains static data
106
+ */
107
+ private isStaticEndpoint;
108
+ /**
109
+ * Check if endpoint contains semi-static data
110
+ */
111
+ private isSemiStaticEndpoint;
112
+ /**
113
+ * Check if endpoint is session-related
114
+ */
115
+ private isSessionEndpoint;
116
+ /**
117
+ * Extract endpoint from cache key
118
+ */
119
+ private extractEndpointFromKey;
120
+ }
121
+ //# sourceMappingURL=HttpCacheWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpCacheWrapper.d.ts","sourceRoot":"","sources":["../../src/cache/HttpCacheWrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAG/D,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;gBADN,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM;IAGxB;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,GAAG,EACnB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,EACtF,OAAO,EAAE,cAAc,EACvB,YAAY,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IA4D1F;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI;IAKhD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK1C;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAsBvF;;OAEG;IACH,QAAQ;IAIR;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;YACW,yBAAyB;IASvC;;OAEG;YACW,cAAc;IAkD5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAI/B"}