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,205 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schema for WordPress authentication methods
4
+ */
5
+ const AuthMethodSchema = z.enum([
6
+ 'app-password',
7
+ 'jwt',
8
+ 'basic',
9
+ 'api-key',
10
+ 'cookie'
11
+ ]);
12
+ /**
13
+ * Zod schema for URL validation
14
+ */
15
+ const UrlSchema = z
16
+ .string()
17
+ .url('Must be a valid URL')
18
+ .refine((url) => {
19
+ const parsed = new URL(url);
20
+ return parsed.protocol === 'http:' || parsed.protocol === 'https:';
21
+ }, 'URL must use http or https protocol');
22
+ /**
23
+ * Zod schema for WordPress site configuration
24
+ */
25
+ const SiteConfigSchema = z.object({
26
+ WORDPRESS_SITE_URL: UrlSchema,
27
+ WORDPRESS_USERNAME: z
28
+ .string()
29
+ .min(1, 'Username is required')
30
+ .max(60, 'Username must be 60 characters or less')
31
+ .regex(/^[a-zA-Z0-9._@-]+$/, 'Username contains invalid characters'),
32
+ WORDPRESS_APP_PASSWORD: z
33
+ .string()
34
+ .min(1, 'Password is required')
35
+ .refine((password) => {
36
+ // WordPress app passwords are typically 24 characters with spaces
37
+ // But we'll be flexible to support different auth methods
38
+ return password.length >= 8;
39
+ }, 'Password must be at least 8 characters'),
40
+ WORDPRESS_AUTH_METHOD: AuthMethodSchema.optional().default('app-password')
41
+ });
42
+ /**
43
+ * Zod schema for site configuration with metadata
44
+ */
45
+ const SiteSchema = z.object({
46
+ id: z
47
+ .string()
48
+ .min(1, 'Site ID is required')
49
+ .max(50, 'Site ID must be 50 characters or less')
50
+ .regex(/^[a-zA-Z0-9_-]+$/, 'Site ID can only contain letters, numbers, underscores, and hyphens'),
51
+ name: z
52
+ .string()
53
+ .min(1, 'Site name is required')
54
+ .max(100, 'Site name must be 100 characters or less'),
55
+ config: SiteConfigSchema
56
+ });
57
+ /**
58
+ * Zod schema for multi-site configuration file
59
+ */
60
+ const MultiSiteConfigSchema = z.object({
61
+ sites: z
62
+ .array(SiteSchema)
63
+ .min(1, 'At least one site must be configured')
64
+ .max(50, 'Maximum of 50 sites supported')
65
+ .refine((sites) => {
66
+ const ids = sites.map((site) => site.id);
67
+ const uniqueIds = new Set(ids);
68
+ return ids.length === uniqueIds.size;
69
+ }, 'Site IDs must be unique')
70
+ .refine((sites) => {
71
+ const names = sites.map((site) => site.name);
72
+ const uniqueNames = new Set(names);
73
+ return names.length === uniqueNames.size;
74
+ }, 'Site names must be unique')
75
+ .refine((sites) => {
76
+ const urls = sites.map((site) => site.config.WORDPRESS_SITE_URL);
77
+ const uniqueUrls = new Set(urls);
78
+ return urls.length === uniqueUrls.size;
79
+ }, 'Site URLs must be unique')
80
+ });
81
+ /**
82
+ * Zod schema for environment variables (single-site mode)
83
+ */
84
+ const EnvironmentConfigSchema = z.object({
85
+ WORDPRESS_SITE_URL: UrlSchema,
86
+ WORDPRESS_USERNAME: SiteConfigSchema.shape.WORDPRESS_USERNAME,
87
+ WORDPRESS_APP_PASSWORD: SiteConfigSchema.shape.WORDPRESS_APP_PASSWORD,
88
+ WORDPRESS_AUTH_METHOD: AuthMethodSchema.optional().default('app-password'),
89
+ // Optional environment variables
90
+ NODE_ENV: z.enum(['development', 'production', 'test']).optional(),
91
+ DEBUG: z.string().optional(),
92
+ DISABLE_CACHE: z.string().optional(),
93
+ LOG_LEVEL: z.enum(['error', 'warn', 'info', 'debug']).optional()
94
+ });
95
+ /**
96
+ * Zod schema for MCP configuration passed from client
97
+ */
98
+ const McpConfigSchema = z
99
+ .object({
100
+ wordpressSiteUrl: UrlSchema.optional(),
101
+ wordpressUsername: SiteConfigSchema.shape.WORDPRESS_USERNAME.optional(),
102
+ wordpressAppPassword: SiteConfigSchema.shape.WORDPRESS_APP_PASSWORD.optional(),
103
+ wordpressAuthMethod: AuthMethodSchema.optional()
104
+ })
105
+ .optional();
106
+ /**
107
+ * Configuration validation utilities
108
+ */
109
+ export class ConfigurationValidator {
110
+ /**
111
+ * Validate multi-site configuration from JSON file
112
+ */
113
+ static validateMultiSiteConfig(config) {
114
+ try {
115
+ return MultiSiteConfigSchema.parse(config);
116
+ }
117
+ catch (error) {
118
+ if (error instanceof z.ZodError) {
119
+ const messages = error.errors
120
+ .map((err) => `${err.path.join('.')}: ${err.message}`)
121
+ .join('; ');
122
+ throw new Error(`Multi-site configuration validation failed: ${messages}`);
123
+ }
124
+ throw error;
125
+ }
126
+ }
127
+ /**
128
+ * Validate environment configuration for single-site mode
129
+ */
130
+ static validateEnvironmentConfig(env) {
131
+ try {
132
+ return EnvironmentConfigSchema.parse(env);
133
+ }
134
+ catch (error) {
135
+ if (error instanceof z.ZodError) {
136
+ const messages = error.errors
137
+ .map((err) => `${err.path.join('.')}: ${err.message}`)
138
+ .join('; ');
139
+ throw new Error(`Environment configuration validation failed: ${messages}`);
140
+ }
141
+ throw error;
142
+ }
143
+ }
144
+ /**
145
+ * Validate MCP configuration passed from client
146
+ */
147
+ static validateMcpConfig(config) {
148
+ try {
149
+ return McpConfigSchema.parse(config);
150
+ }
151
+ catch (error) {
152
+ if (error instanceof z.ZodError) {
153
+ const messages = error.errors
154
+ .map((err) => `${err.path.join('.')}: ${err.message}`)
155
+ .join('; ');
156
+ throw new Error(`MCP configuration validation failed: ${messages}`);
157
+ }
158
+ throw error;
159
+ }
160
+ }
161
+ /**
162
+ * Validate a single site configuration
163
+ */
164
+ static validateSiteConfig(config) {
165
+ try {
166
+ return SiteSchema.parse(config);
167
+ }
168
+ catch (error) {
169
+ if (error instanceof z.ZodError) {
170
+ const messages = error.errors
171
+ .map((err) => `${err.path.join('.')}: ${err.message}`)
172
+ .join('; ');
173
+ throw new Error(`Site configuration validation failed: ${messages}`);
174
+ }
175
+ throw error;
176
+ }
177
+ }
178
+ /**
179
+ * Check if a configuration file structure is valid without throwing
180
+ */
181
+ static isValidMultiSiteConfig(config) {
182
+ const result = MultiSiteConfigSchema.safeParse(config);
183
+ return result.success;
184
+ }
185
+ /**
186
+ * Check if environment configuration is valid without throwing
187
+ */
188
+ static isValidEnvironmentConfig(env) {
189
+ const result = EnvironmentConfigSchema.safeParse(env);
190
+ return result.success;
191
+ }
192
+ /**
193
+ * Get validation errors without throwing
194
+ */
195
+ static getValidationErrors(schema, data) {
196
+ const result = schema.safeParse(data);
197
+ if (result.success) {
198
+ return [];
199
+ }
200
+ return result.error.errors.map((err) => `${err.path.join('.')}: ${err.message}`);
201
+ }
202
+ }
203
+ // Export schemas for direct use if needed
204
+ export { SiteConfigSchema, SiteSchema, MultiSiteConfigSchema, EnvironmentConfigSchema, McpConfigSchema, AuthMethodSchema, UrlSchema };
205
+ //# sourceMappingURL=ConfigurationSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigurationSchema.js","sourceRoot":"","sources":["../../src/config/ConfigurationSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { WordPressClient } from '../client/api.js';
2
+ import { type SiteType as SiteConfig, type MultiSiteConfigType as MultiSiteConfig, type McpConfigType } from './ConfigurationSchema.js';
3
+ export type { SiteConfig, MultiSiteConfig };
4
+ /**
5
+ * Configuration loader for MCP WordPress Server
6
+ * Handles both single-site (environment variables) and multi-site (JSON config) modes
7
+ */
8
+ export declare class ServerConfiguration {
9
+ private static instance;
10
+ private rootDir;
11
+ private envPath;
12
+ constructor();
13
+ /**
14
+ * Get singleton instance of ServerConfiguration
15
+ */
16
+ static getInstance(): ServerConfiguration;
17
+ /**
18
+ * Load WordPress client configurations
19
+ * Returns a Map of site ID to WordPressClient instances
20
+ */
21
+ loadClientConfigurations(mcpConfig?: McpConfigType): {
22
+ clients: Map<string, WordPressClient>;
23
+ configs: SiteConfig[];
24
+ };
25
+ /**
26
+ * Load multi-site configuration from JSON file
27
+ */
28
+ private loadMultiSiteConfig;
29
+ /**
30
+ * Load single-site configuration from environment variables
31
+ */
32
+ private loadSingleSiteFromEnv;
33
+ /**
34
+ * Get root directory path
35
+ */
36
+ getRootDir(): string;
37
+ }
38
+ //# sourceMappingURL=ServerConfiguration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerConfiguration.d.ts","sourceRoot":"","sources":["../../src/config/ServerConfiguration.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,EAEL,KAAK,QAAQ,IAAI,UAAU,EAC3B,KAAK,mBAAmB,IAAI,eAAe,EAC3C,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;AAE5C;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;;IAYxB;;OAEG;WACW,WAAW,IAAI,mBAAmB;IAOhD;;;OAGG;IACI,wBAAwB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG;QAC1D,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACtC,OAAO,EAAE,UAAU,EAAE,CAAC;KACvB;IAoBD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgF7B;;OAEG;IACI,UAAU,IAAI,MAAM;CAG5B"}
@@ -0,0 +1,158 @@
1
+ import dotenv from 'dotenv';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { WordPressClient } from '../client/api.js';
6
+ import { CachedWordPressClient } from '../client/CachedWordPressClient.js';
7
+ import { getErrorMessage } from '../utils/error.js';
8
+ import { ConfigurationValidator } from './ConfigurationSchema.js';
9
+ /**
10
+ * Configuration loader for MCP WordPress Server
11
+ * Handles both single-site (environment variables) and multi-site (JSON config) modes
12
+ */
13
+ export class ServerConfiguration {
14
+ static instance;
15
+ rootDir;
16
+ envPath;
17
+ constructor() {
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = path.dirname(__filename);
20
+ this.rootDir = path.resolve(__dirname, '../..');
21
+ this.envPath = path.resolve(this.rootDir, '.env');
22
+ // Load environment variables
23
+ dotenv.config({ path: this.envPath });
24
+ }
25
+ /**
26
+ * Get singleton instance of ServerConfiguration
27
+ */
28
+ static getInstance() {
29
+ if (!ServerConfiguration.instance) {
30
+ ServerConfiguration.instance = new ServerConfiguration();
31
+ }
32
+ return ServerConfiguration.instance;
33
+ }
34
+ /**
35
+ * Load WordPress client configurations
36
+ * Returns a Map of site ID to WordPressClient instances
37
+ */
38
+ loadClientConfigurations(mcpConfig) {
39
+ const configPath = path.resolve(this.rootDir, 'mcp-wordpress.config.json');
40
+ if (fs.existsSync(configPath)) {
41
+ if (process.env.NODE_ENV !== 'test') {
42
+ console.error('INFO: Found mcp-wordpress.config.json, loading multi-site configuration.');
43
+ }
44
+ return this.loadMultiSiteConfig(configPath);
45
+ }
46
+ else {
47
+ if (process.env.NODE_ENV !== 'test') {
48
+ console.error('INFO: mcp-wordpress.config.json not found, falling back to environment variables for single-site mode.');
49
+ }
50
+ return this.loadSingleSiteFromEnv(mcpConfig);
51
+ }
52
+ }
53
+ /**
54
+ * Load multi-site configuration from JSON file
55
+ */
56
+ loadMultiSiteConfig(configPath) {
57
+ try {
58
+ const configFile = fs.readFileSync(configPath, 'utf-8');
59
+ const rawConfig = JSON.parse(configFile);
60
+ // Validate configuration using Zod schema
61
+ const config = ConfigurationValidator.validateMultiSiteConfig(rawConfig);
62
+ const clients = new Map();
63
+ const validConfigs = [];
64
+ for (const site of config.sites) {
65
+ const clientConfig = {
66
+ baseUrl: site.config.WORDPRESS_SITE_URL,
67
+ auth: {
68
+ method: site.config.WORDPRESS_AUTH_METHOD || 'app-password',
69
+ username: site.config.WORDPRESS_USERNAME,
70
+ appPassword: site.config.WORDPRESS_APP_PASSWORD
71
+ }
72
+ };
73
+ // Use cached client for better performance
74
+ const client = process.env.DISABLE_CACHE === 'true'
75
+ ? new WordPressClient(clientConfig)
76
+ : new CachedWordPressClient(clientConfig, site.id);
77
+ clients.set(site.id, client);
78
+ validConfigs.push(site);
79
+ if (process.env.NODE_ENV !== 'test') {
80
+ console.error(`INFO: Initialized client for site: ${site.name} (ID: ${site.id})`);
81
+ }
82
+ }
83
+ return { clients, configs: validConfigs };
84
+ }
85
+ catch (error) {
86
+ console.error(`FATAL: Error reading or parsing mcp-wordpress.config.json: ${getErrorMessage(error)}`);
87
+ process.exit(1);
88
+ }
89
+ }
90
+ /**
91
+ * Load single-site configuration from environment variables
92
+ */
93
+ loadSingleSiteFromEnv(mcpConfig) {
94
+ try {
95
+ // Validate MCP config if provided
96
+ const validatedMcpConfig = mcpConfig
97
+ ? ConfigurationValidator.validateMcpConfig(mcpConfig)
98
+ : undefined;
99
+ // Prepare environment configuration for validation
100
+ const envConfig = {
101
+ WORDPRESS_SITE_URL: validatedMcpConfig?.wordpressSiteUrl ||
102
+ process.env.WORDPRESS_SITE_URL,
103
+ WORDPRESS_USERNAME: validatedMcpConfig?.wordpressUsername ||
104
+ process.env.WORDPRESS_USERNAME,
105
+ WORDPRESS_APP_PASSWORD: validatedMcpConfig?.wordpressAppPassword ||
106
+ process.env.WORDPRESS_APP_PASSWORD,
107
+ WORDPRESS_AUTH_METHOD: validatedMcpConfig?.wordpressAuthMethod ||
108
+ process.env.WORDPRESS_AUTH_METHOD ||
109
+ 'app-password',
110
+ NODE_ENV: process.env.NODE_ENV,
111
+ DEBUG: process.env.DEBUG,
112
+ DISABLE_CACHE: process.env.DISABLE_CACHE,
113
+ LOG_LEVEL: process.env.LOG_LEVEL
114
+ };
115
+ // Validate environment configuration using Zod schema
116
+ const validatedConfig = ConfigurationValidator.validateEnvironmentConfig(envConfig);
117
+ const clientConfig = {
118
+ baseUrl: validatedConfig.WORDPRESS_SITE_URL,
119
+ auth: {
120
+ method: validatedConfig.WORDPRESS_AUTH_METHOD,
121
+ username: validatedConfig.WORDPRESS_USERNAME,
122
+ appPassword: validatedConfig.WORDPRESS_APP_PASSWORD
123
+ }
124
+ };
125
+ // Use cached client for better performance
126
+ const client = process.env.DISABLE_CACHE === 'true'
127
+ ? new WordPressClient(clientConfig)
128
+ : new CachedWordPressClient(clientConfig, 'default');
129
+ const clients = new Map();
130
+ clients.set('default', client);
131
+ const siteConfig = {
132
+ id: 'default',
133
+ name: 'Default Site',
134
+ config: {
135
+ WORDPRESS_SITE_URL: validatedConfig.WORDPRESS_SITE_URL,
136
+ WORDPRESS_USERNAME: validatedConfig.WORDPRESS_USERNAME,
137
+ WORDPRESS_APP_PASSWORD: validatedConfig.WORDPRESS_APP_PASSWORD,
138
+ WORDPRESS_AUTH_METHOD: validatedConfig.WORDPRESS_AUTH_METHOD
139
+ }
140
+ };
141
+ console.error('INFO: Initialized client for default site in single-site mode.');
142
+ return { clients, configs: [siteConfig] };
143
+ }
144
+ catch (error) {
145
+ console.error('ERROR: Configuration validation failed for single-site mode.');
146
+ console.error(`Details: ${getErrorMessage(error)}`);
147
+ console.error('Please check your environment variables or MCP configuration.');
148
+ return { clients: new Map(), configs: [] };
149
+ }
150
+ }
151
+ /**
152
+ * Get root directory path
153
+ */
154
+ getRootDir() {
155
+ return this.rootDir;
156
+ }
157
+ }
158
+ //# sourceMappingURL=ServerConfiguration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerConfiguration.js","sourceRoot":"","sources":["../../src/config/ServerConfiguration.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,sBAAsB,EAIvB,MAAM,0BAA0B,CAAC;AAKlC;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAC,QAAQ,CAAsB;IACrC,OAAO,CAAS;IAChB,OAAO,CAAS;IAExB;QACE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAElD,6BAA6B;QAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;YAClC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,mBAAmB,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,wBAAwB,CAAC,SAAyB;QAIvD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QAE3E,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CACX,0EAA0E,CAC3E,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CACX,wGAAwG,CACzG,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,UAAkB;QAI5C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAEzC,0CAA0C;YAC1C,MAAM,MAAM,GAAG,sBAAsB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAEzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;YACnD,MAAM,YAAY,GAAiB,EAAE,CAAC;YAEtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,MAAM,YAAY,GAA0B;oBAC1C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;oBACvC,IAAI,EAAE;wBACJ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,cAAc;wBAC3D,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;wBACxC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB;qBAChD;iBACF,CAAC;gBAEF,2CAA2C;gBAC3C,MAAM,MAAM,GACV,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM;oBAClC,CAAC,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC;oBACnC,CAAC,CAAC,IAAI,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAExB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACpC,OAAO,CAAC,KAAK,CACX,sCAAsC,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,GAAG,CACnE,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,8DAA8D,eAAe,CAAC,KAAK,CAAC,EAAE,CACvF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,SAAyB;QAIrD,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,kBAAkB,GAAG,SAAS;gBAClC,CAAC,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,SAAS,CAAC;gBACrD,CAAC,CAAC,SAAS,CAAC;YAEd,mDAAmD;YACnD,MAAM,SAAS,GAAG;gBAChB,kBAAkB,EAChB,kBAAkB,EAAE,gBAAgB;oBACpC,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBAChC,kBAAkB,EAChB,kBAAkB,EAAE,iBAAiB;oBACrC,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBAChC,sBAAsB,EACpB,kBAAkB,EAAE,oBAAoB;oBACxC,OAAO,CAAC,GAAG,CAAC,sBAAsB;gBACpC,qBAAqB,EACnB,kBAAkB,EAAE,mBAAmB;oBACvC,OAAO,CAAC,GAAG,CAAC,qBAAqB;oBACjC,cAAc;gBAChB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;gBAC9B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK;gBACxB,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;gBACxC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;aACjC,CAAC;YAEF,sDAAsD;YACtD,MAAM,eAAe,GACnB,sBAAsB,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;YAE9D,MAAM,YAAY,GAA0B;gBAC1C,OAAO,EAAE,eAAe,CAAC,kBAAkB;gBAC3C,IAAI,EAAE;oBACJ,MAAM,EAAE,eAAe,CAAC,qBAAqB;oBAC7C,QAAQ,EAAE,eAAe,CAAC,kBAAkB;oBAC5C,WAAW,EAAE,eAAe,CAAC,sBAAsB;iBACpD;aACF,CAAC;YAEF,2CAA2C;YAC3C,MAAM,MAAM,GACV,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM;gBAClC,CAAC,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC;gBACnC,CAAC,CAAC,IAAI,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAE/B,MAAM,UAAU,GAAe;gBAC7B,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE;oBACN,kBAAkB,EAAE,eAAe,CAAC,kBAAkB;oBACtD,kBAAkB,EAAE,eAAe,CAAC,kBAAkB;oBACtD,sBAAsB,EAAE,eAAe,CAAC,sBAAsB;oBAC9D,qBAAqB,EAAE,eAAe,CAAC,qBAAqB;iBAC7D;aACF,CAAC;YAEF,OAAO,CAAC,KAAK,CACX,gEAAgE,CACjE,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,8DAA8D,CAC/D,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,YAAY,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACI,UAAU;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Comprehensive API Documentation Auto-Generation System
3
+ * Extracts documentation from tool classes, types, and WordPress mappings
4
+ */
5
+ export interface DocumentationConfig {
6
+ outputDir: string;
7
+ includeExamples: boolean;
8
+ includeWordPressMapping: boolean;
9
+ generateOpenAPI: boolean;
10
+ generateInteractiveHtml: boolean;
11
+ validateExamples: boolean;
12
+ }
13
+ export interface ToolDocumentation {
14
+ name: string;
15
+ category: string;
16
+ description: string;
17
+ parameters: ParameterDocumentation[];
18
+ examples: ExampleUsage[];
19
+ wordpressEndpoint: string | undefined;
20
+ requiredPermissions: string[] | undefined;
21
+ returnType: string;
22
+ errorCodes: ErrorDocumentation[];
23
+ relatedTools: string[];
24
+ }
25
+ export interface ParameterDocumentation {
26
+ name: string;
27
+ type: string;
28
+ required: boolean;
29
+ description: string;
30
+ defaultValue: any;
31
+ allowedValues: string[] | undefined;
32
+ examples: string[];
33
+ }
34
+ export interface ExampleUsage {
35
+ title: string;
36
+ description: string;
37
+ command: string;
38
+ parameters: Record<string, any>;
39
+ expectedResponse: any;
40
+ errorExample?: {
41
+ scenario: string;
42
+ error: any;
43
+ };
44
+ }
45
+ export interface ErrorDocumentation {
46
+ code: string;
47
+ message: string;
48
+ description: string;
49
+ resolution: string;
50
+ }
51
+ export interface DocumentationOutput {
52
+ tools: ToolDocumentation[];
53
+ categories: CategoryDocumentation[];
54
+ types: TypeDocumentation[];
55
+ openApiSpec: OpenAPISpecification | undefined;
56
+ summary: DocumentationSummary;
57
+ }
58
+ export interface CategoryDocumentation {
59
+ name: string;
60
+ description: string;
61
+ toolCount: number;
62
+ tools: string[];
63
+ usagePatterns: string[];
64
+ }
65
+ export interface TypeDocumentation {
66
+ name: string;
67
+ description: string;
68
+ properties: PropertyDocumentation[];
69
+ examples: any[];
70
+ wordpressSource?: string;
71
+ }
72
+ export interface PropertyDocumentation {
73
+ name: string;
74
+ type: string;
75
+ required: boolean;
76
+ description: string;
77
+ format?: string;
78
+ }
79
+ export interface OpenAPISpecification {
80
+ openapi: string;
81
+ info: any;
82
+ paths: Record<string, any>;
83
+ components: Record<string, any>;
84
+ }
85
+ export interface DocumentationSummary {
86
+ totalTools: number;
87
+ totalCategories: number;
88
+ totalTypes: number;
89
+ lastUpdated: string;
90
+ version: string;
91
+ coverage: {
92
+ toolsWithExamples: number;
93
+ toolsWithWordPressMapping: number;
94
+ typesDocumented: number;
95
+ };
96
+ }
97
+ /**
98
+ * Main Documentation Generator
99
+ */
100
+ export declare class DocumentationGenerator {
101
+ private config;
102
+ private toolCategories;
103
+ private wordpressEndpoints;
104
+ constructor(config?: Partial<DocumentationConfig>);
105
+ /**
106
+ * Generate complete documentation for all tools and types
107
+ */
108
+ generateFullDocumentation(): Promise<DocumentationOutput>;
109
+ /**
110
+ * Extract documentation from all tool classes
111
+ */
112
+ private extractAllToolDocumentation;
113
+ /**
114
+ * Extract documentation for a single tool
115
+ */
116
+ private extractToolDocumentation;
117
+ /**
118
+ * Extract parameter documentation
119
+ */
120
+ private extractParameterDocumentation;
121
+ /**
122
+ * Generate usage examples for tools
123
+ */
124
+ private generateToolExamples;
125
+ /**
126
+ * Generate basic usage example
127
+ */
128
+ private generateBasicExample;
129
+ /**
130
+ * Generate multi-site example
131
+ */
132
+ private generateMultiSiteExample;
133
+ /**
134
+ * Generate advanced example with all parameters
135
+ */
136
+ private generateAdvancedExample;
137
+ /**
138
+ * Generate category documentation
139
+ */
140
+ private generateCategoryDocumentation;
141
+ /**
142
+ * Extract type documentation from TypeScript definitions
143
+ */
144
+ private extractTypeDocumentation;
145
+ /**
146
+ * Generate OpenAPI specification
147
+ */
148
+ private generateOpenAPISpecification;
149
+ /**
150
+ * Write all documentation files
151
+ */
152
+ private writeDocumentationFiles;
153
+ private extractCategoryFromClassName;
154
+ private initializeWordPressMapping;
155
+ private initializeToolCategories;
156
+ private generateDocumentationSummary;
157
+ /**
158
+ * Helper methods for documentation generation
159
+ */
160
+ private getDefaultValue;
161
+ private getAllowedValues;
162
+ private generateParameterExamples;
163
+ private supportsMultiSite;
164
+ private generateExampleValue;
165
+ private generateExpectedResponse;
166
+ private getExampleParameters;
167
+ private getCategoryDescription;
168
+ private generateUsagePatterns;
169
+ private generateWordPressPostExample;
170
+ private generateParameterSchema;
171
+ private convertTypeToJsonSchema;
172
+ private inferReturnType;
173
+ private generateErrorDocumentation;
174
+ private findRelatedTools;
175
+ private getRequiredPermissions;
176
+ /**
177
+ * File writing implementations
178
+ */
179
+ private writeApiOverview;
180
+ private writeToolDocumentation;
181
+ private writeCategoryDocumentation;
182
+ private writeTypeDocumentation;
183
+ }
184
+ //# sourceMappingURL=DocumentationGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentationGenerator.d.ts","sourceRoot":"","sources":["../../src/docs/DocumentationGenerator.ts"],"names":[],"mappings":"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"}