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,278 @@
1
+ /**
2
+ * Comprehensive Input Validation and Sanitization System
3
+ * Provides security-focused validation for all MCP tool inputs
4
+ */
5
+ import { z } from 'zod';
6
+ // Common validation patterns
7
+ const URL_PATTERN = /^https?:\/\/[^\s<>'"{}|\\^`\[\]]+$/;
8
+ const EMAIL_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
9
+ const SLUG_PATTERN = /^[a-z0-9-]+$/;
10
+ const SCRIPT_PATTERN = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
11
+ const SQL_INJECTION_PATTERN = /('|(\\')|(;)|(\\x00)|(\\n)|(\\r)|(\\x1a)|(\\x22)|(\\x27)|(\\x5c)|(\\x60))/i;
12
+ /**
13
+ * Security validation schemas
14
+ */
15
+ export const SecuritySchemas = {
16
+ // Safe string with XSS protection
17
+ safeString: z.string()
18
+ .max(10000, 'String too long')
19
+ .refine(val => !SCRIPT_PATTERN.test(val), 'Script tags not allowed')
20
+ .refine(val => !val.includes('javascript:'), 'JavaScript URLs not allowed')
21
+ .refine(val => !val.includes('data:'), 'Data URLs not allowed')
22
+ .refine(val => !val.includes('onerror='), 'Event handlers not allowed')
23
+ .refine(val => !val.includes('onload='), 'Event handlers not allowed')
24
+ .refine(val => !val.includes('onfocus='), 'Event handlers not allowed'),
25
+ // HTML content with basic sanitization
26
+ htmlContent: z.string()
27
+ .max(100000, 'Content too long')
28
+ .refine(val => !SCRIPT_PATTERN.test(val), 'Script tags not allowed')
29
+ .refine(val => !val.includes('javascript:'), 'JavaScript URLs not allowed')
30
+ .refine(val => !val.includes('on[a-z]+='), 'Event handlers not allowed'),
31
+ // URL validation
32
+ url: z.string()
33
+ .url('Invalid URL format')
34
+ .regex(URL_PATTERN, 'URL contains invalid characters')
35
+ .refine(val => !val.includes('javascript:'), 'JavaScript URLs not allowed')
36
+ .refine(val => !val.includes('data:'), 'Data URLs not allowed'),
37
+ // Email validation
38
+ email: z.string()
39
+ .email('Invalid email format')
40
+ .regex(EMAIL_PATTERN, 'Email contains invalid characters')
41
+ .max(254, 'Email too long'),
42
+ // Slug validation (for URLs, usernames, etc.)
43
+ slug: z.string()
44
+ .min(1, 'Slug cannot be empty')
45
+ .max(100, 'Slug too long')
46
+ .regex(SLUG_PATTERN, 'Slug can only contain lowercase letters, numbers, and hyphens'),
47
+ // WordPress post/page content
48
+ wpContent: z.string()
49
+ .max(1000000, 'Content too long')
50
+ .refine(val => !SCRIPT_PATTERN.test(val), 'Script tags not allowed in content')
51
+ .refine(val => !val.includes('javascript:'), 'JavaScript URLs not allowed'),
52
+ // Site ID validation
53
+ siteId: z.string()
54
+ .min(1, 'Site ID cannot be empty')
55
+ .max(50, 'Site ID too long')
56
+ .regex(/^[a-zA-Z0-9\-_]+$/, 'Site ID can only contain letters, numbers, hyphens, and underscores'),
57
+ // WordPress ID (numeric)
58
+ wpId: z.number()
59
+ .int('ID must be an integer')
60
+ .positive('ID must be positive')
61
+ .max(999999999, 'ID too large'),
62
+ // Search query with SQL injection protection
63
+ searchQuery: z.string()
64
+ .max(500, 'Search query too long')
65
+ .refine(val => !SQL_INJECTION_PATTERN.test(val), 'Invalid characters in search query')
66
+ .refine(val => !val.includes('--'), 'SQL comments not allowed')
67
+ .refine(val => !val.includes('/*'), 'SQL comments not allowed'),
68
+ // File path validation
69
+ filePath: z.string()
70
+ .max(500, 'File path too long')
71
+ .refine(val => !val.includes('..'), 'Path traversal not allowed')
72
+ .refine(val => !val.includes('<'), 'Invalid characters in path')
73
+ .refine(val => !val.includes('>'), 'Invalid characters in path'),
74
+ // Password (for display/logging - never log actual passwords)
75
+ passwordMask: z.string()
76
+ .transform(() => '[REDACTED]'),
77
+ // WordPress application password format
78
+ appPassword: z.string()
79
+ .regex(/^[a-zA-Z0-9\s]{24}$/, 'Invalid application password format')
80
+ .transform(val => val.replace(/\s/g, ' ')) // Normalize spaces
81
+ };
82
+ /**
83
+ * Input sanitization functions
84
+ */
85
+ export class InputSanitizer {
86
+ /**
87
+ * Sanitize HTML content by removing dangerous elements
88
+ */
89
+ static sanitizeHtml(input) {
90
+ return input
91
+ .replace(SCRIPT_PATTERN, '') // Remove script tags
92
+ .replace(/javascript:/gi, '') // Remove javascript: URLs
93
+ .replace(/data:/gi, '') // Remove data: URLs
94
+ .replace(/on[a-z]+\s*=/gi, '') // Remove event handlers
95
+ .replace(/<iframe[^>]*>/gi, '') // Remove iframes
96
+ .replace(/<object[^>]*>/gi, '') // Remove objects
97
+ .replace(/<embed[^>]*>/gi, ''); // Remove embeds
98
+ }
99
+ /**
100
+ * Sanitize search queries to prevent SQL injection
101
+ */
102
+ static sanitizeSearchQuery(query) {
103
+ return query
104
+ .replace(/['"\\;]/g, '') // Remove quotes and backslashes
105
+ .replace(/--/g, '') // Remove SQL comments
106
+ .replace(/\/\*/g, '') // Remove SQL comments
107
+ .replace(/\*/g, '') // Remove wildcards
108
+ .trim()
109
+ .substring(0, 500); // Limit length
110
+ }
111
+ /**
112
+ * Sanitize file paths to prevent directory traversal
113
+ */
114
+ static sanitizeFilePath(path) {
115
+ return path
116
+ .replace(/\.\./g, '') // Remove directory traversal
117
+ .replace(/[<>]/g, '') // Remove angle brackets
118
+ .replace(/[|&;$`\\]/g, '') // Remove shell metacharacters
119
+ .trim();
120
+ }
121
+ /**
122
+ * Encode output for safe display
123
+ */
124
+ static encodeOutput(input) {
125
+ return input
126
+ .replace(/&/g, '&amp;')
127
+ .replace(/</g, '&lt;')
128
+ .replace(/>/g, '&gt;')
129
+ .replace(/"/g, '&quot;')
130
+ .replace(/'/g, '&#x27;');
131
+ }
132
+ }
133
+ /**
134
+ * Security validation decorator for tool methods
135
+ */
136
+ export function validateSecurity(schema) {
137
+ return function (target, propertyName, descriptor) {
138
+ const method = descriptor.value;
139
+ descriptor.value = async function (...args) {
140
+ try {
141
+ // Validate input parameters
142
+ const params = args[0] || {};
143
+ const validatedParams = schema.parse(params);
144
+ // Log security validation (without sensitive data)
145
+ console.log(`Security validation passed for ${propertyName}`, {
146
+ timestamp: new Date().toISOString(),
147
+ method: propertyName,
148
+ paramCount: Object.keys(validatedParams).length
149
+ });
150
+ // Call original method with validated params
151
+ return await method.call(this, validatedParams, ...args.slice(1));
152
+ }
153
+ catch (error) {
154
+ // Log security validation failure
155
+ console.error(`Security validation failed for ${propertyName}`, {
156
+ timestamp: new Date().toISOString(),
157
+ method: propertyName,
158
+ error: error instanceof z.ZodError ? error.errors : (error instanceof Error ? error.message : String(error))
159
+ });
160
+ throw new SecurityValidationError(`Security validation failed for ${propertyName}`, error instanceof z.ZodError ? error.errors : [{ message: error instanceof Error ? error.message : String(error) }]);
161
+ }
162
+ };
163
+ return descriptor;
164
+ };
165
+ }
166
+ /**
167
+ * Custom security validation error
168
+ */
169
+ export class SecurityValidationError extends Error {
170
+ errors;
171
+ constructor(message, errors = []) {
172
+ super(message);
173
+ this.name = 'SecurityValidationError';
174
+ this.errors = errors;
175
+ }
176
+ }
177
+ /**
178
+ * Tool-specific validation schemas
179
+ */
180
+ export const ToolSchemas = {
181
+ // Post creation/update
182
+ postData: z.object({
183
+ site: SecuritySchemas.siteId.optional(),
184
+ title: SecuritySchemas.safeString.optional(),
185
+ content: SecuritySchemas.wpContent.optional(),
186
+ excerpt: SecuritySchemas.safeString.optional(),
187
+ status: z.enum(['publish', 'draft', 'private', 'pending']).optional(),
188
+ slug: SecuritySchemas.slug.optional(),
189
+ categories: z.array(SecuritySchemas.wpId).optional(),
190
+ tags: z.array(SecuritySchemas.wpId).optional()
191
+ }),
192
+ // User creation/update
193
+ userData: z.object({
194
+ site: SecuritySchemas.siteId.optional(),
195
+ username: SecuritySchemas.slug,
196
+ email: SecuritySchemas.email,
197
+ password: SecuritySchemas.safeString.optional(),
198
+ roles: z.array(z.string()).optional(),
199
+ firstName: SecuritySchemas.safeString.optional(),
200
+ lastName: SecuritySchemas.safeString.optional()
201
+ }),
202
+ // Search parameters
203
+ searchParams: z.object({
204
+ site: SecuritySchemas.siteId.optional(),
205
+ query: SecuritySchemas.searchQuery,
206
+ type: z.enum(['post', 'page', 'any']).optional(),
207
+ limit: z.number().int().min(1).max(100).optional()
208
+ }),
209
+ // Media upload
210
+ mediaUpload: z.object({
211
+ site: SecuritySchemas.siteId.optional(),
212
+ filename: SecuritySchemas.filePath,
213
+ title: SecuritySchemas.safeString.optional(),
214
+ caption: SecuritySchemas.safeString.optional(),
215
+ description: SecuritySchemas.safeString.optional()
216
+ }),
217
+ // Site settings
218
+ siteSettings: z.object({
219
+ site: SecuritySchemas.siteId.optional(),
220
+ title: SecuritySchemas.safeString.optional(),
221
+ description: SecuritySchemas.safeString.optional(),
222
+ url: SecuritySchemas.url.optional(),
223
+ adminEmail: SecuritySchemas.email.optional()
224
+ }),
225
+ // Generic list parameters
226
+ listParams: z.object({
227
+ site: SecuritySchemas.siteId.optional(),
228
+ page: z.number().int().min(1).max(1000).optional(),
229
+ perPage: z.number().int().min(1).max(100).optional(),
230
+ search: SecuritySchemas.searchQuery.optional(),
231
+ orderBy: z.string().max(50).optional(),
232
+ order: z.enum(['asc', 'desc']).optional()
233
+ }),
234
+ // ID-based operations
235
+ idParams: z.object({
236
+ site: SecuritySchemas.siteId.optional(),
237
+ id: SecuritySchemas.wpId
238
+ })
239
+ };
240
+ /**
241
+ * Rate limiting and DoS protection
242
+ */
243
+ export class SecurityLimiter {
244
+ static requestCounts = new Map();
245
+ static RATE_LIMIT = 1000; // requests per window
246
+ static WINDOW_MS = 60 * 1000; // 1 minute
247
+ /**
248
+ * Check if request is within rate limits
249
+ */
250
+ static checkRateLimit(identifier) {
251
+ const now = Date.now();
252
+ const key = identifier;
253
+ const current = this.requestCounts.get(key);
254
+ if (!current || now > current.resetTime) {
255
+ this.requestCounts.set(key, { count: 1, resetTime: now + this.WINDOW_MS });
256
+ return true;
257
+ }
258
+ if (current.count >= this.RATE_LIMIT) {
259
+ return false;
260
+ }
261
+ current.count++;
262
+ return true;
263
+ }
264
+ /**
265
+ * Clean up expired rate limit entries
266
+ */
267
+ static cleanup() {
268
+ const now = Date.now();
269
+ for (const [key, data] of this.requestCounts.entries()) {
270
+ if (now > data.resetTime) {
271
+ this.requestCounts.delete(key);
272
+ }
273
+ }
274
+ }
275
+ }
276
+ // Start cleanup interval
277
+ setInterval(() => SecurityLimiter.cleanup(), 60000); // Clean up every minute
278
+ //# sourceMappingURL=InputValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputValidator.js","sourceRoot":"","sources":["../../src/security/InputValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Security configuration and constants for MCP WordPress
3
+ */
4
+ export declare const SecurityConfig: {
5
+ rateLimiting: {
6
+ default: {
7
+ windowMs: number;
8
+ maxRequests: number;
9
+ };
10
+ authentication: {
11
+ windowMs: number;
12
+ maxAttempts: number;
13
+ };
14
+ upload: {
15
+ windowMs: number;
16
+ maxRequests: number;
17
+ };
18
+ };
19
+ fileUpload: {
20
+ maxSizeMB: number;
21
+ allowedMimeTypes: string[];
22
+ blockedExtensions: string[];
23
+ };
24
+ validation: {
25
+ maxStringLength: number;
26
+ maxTitleLength: number;
27
+ maxContentLength: number;
28
+ maxExcerptLength: number;
29
+ maxUrlLength: number;
30
+ maxUsernameLength: number;
31
+ minUsernameLength: number;
32
+ maxPasswordLength: number;
33
+ minPasswordLength: number;
34
+ };
35
+ timeouts: {
36
+ default: number;
37
+ upload: number;
38
+ auth: number;
39
+ };
40
+ headers: {
41
+ 'X-Content-Type-Options': string;
42
+ 'X-Frame-Options': string;
43
+ 'X-XSS-Protection': string;
44
+ 'Strict-Transport-Security': string;
45
+ 'Content-Security-Policy': string;
46
+ };
47
+ errorMessages: {
48
+ authentication: string;
49
+ authorization: string;
50
+ validation: string;
51
+ rateLimit: string;
52
+ serverError: string;
53
+ notFound: string;
54
+ };
55
+ logging: {
56
+ excludeFields: string[];
57
+ redactPatterns: RegExp[];
58
+ };
59
+ cache: {
60
+ enabled: boolean;
61
+ maxSize: number;
62
+ defaultTTL: number;
63
+ enableLRU: boolean;
64
+ enableStats: boolean;
65
+ ttlPresets: {
66
+ static: number;
67
+ semiStatic: number;
68
+ dynamic: number;
69
+ session: number;
70
+ realtime: number;
71
+ };
72
+ cacheHeaders: {
73
+ static: string;
74
+ semiStatic: string;
75
+ dynamic: string;
76
+ session: string;
77
+ realtime: string;
78
+ };
79
+ invalidation: {
80
+ enabled: boolean;
81
+ batchSize: number;
82
+ queueTimeout: number;
83
+ enableCascading: boolean;
84
+ };
85
+ cleanup: {
86
+ interval: number;
87
+ maxMemoryMB: number;
88
+ evictionThreshold: number;
89
+ };
90
+ };
91
+ };
92
+ /**
93
+ * Security utility functions
94
+ */
95
+ export declare class SecurityUtils {
96
+ /**
97
+ * Redact sensitive information from objects
98
+ */
99
+ static redactSensitiveData(obj: any): any;
100
+ /**
101
+ * Redact sensitive patterns from strings
102
+ */
103
+ static redactString(str: string): string;
104
+ /**
105
+ * Generate secure random strings
106
+ */
107
+ static generateSecureToken(length?: number): string;
108
+ /**
109
+ * Check if a file extension is allowed
110
+ */
111
+ static isFileExtensionAllowed(filename: string): boolean;
112
+ /**
113
+ * Sanitize log output
114
+ */
115
+ static sanitizeForLog(data: any): any;
116
+ }
117
+ /**
118
+ * Secure error handler that prevents information disclosure
119
+ */
120
+ export declare function createSecureError(error: any, fallbackMessage?: string): Error;
121
+ /**
122
+ * Environment-specific security settings
123
+ */
124
+ export declare function getEnvironmentSecurity(): {
125
+ strictMode: boolean;
126
+ verboseErrors: boolean;
127
+ enforceHttps: boolean;
128
+ };
129
+ //# sourceMappingURL=SecurityConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityConfig.d.ts","sourceRoot":"","sources":["../../src/security/SecurityConfig.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwK1B,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAsBzC;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAUxC;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM;IAgBvD;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKxD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;CAStC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,GAAG,EACV,eAAe,GAAE,MAAiD,GACjE,KAAK,CAeP;AAKD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACrB,CAQF"}