mcp-wordpress 1.2.2 → 1.3.0

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 (251) hide show
  1. package/README.md +210 -182
  2. package/dist/cache/CacheInvalidation.d.ts +3 -3
  3. package/dist/cache/CacheInvalidation.d.ts.map +1 -1
  4. package/dist/cache/CacheInvalidation.js +119 -119
  5. package/dist/cache/CacheInvalidation.js.map +1 -1
  6. package/dist/cache/CacheManager.d.ts +5 -0
  7. package/dist/cache/CacheManager.d.ts.map +1 -1
  8. package/dist/cache/CacheManager.js +26 -16
  9. package/dist/cache/CacheManager.js.map +1 -1
  10. package/dist/cache/HttpCacheWrapper.d.ts +1 -1
  11. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
  12. package/dist/cache/HttpCacheWrapper.js +29 -29
  13. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  14. package/dist/cache/__tests__/CacheInvalidation.test.js +96 -94
  15. package/dist/cache/__tests__/CacheInvalidation.test.js.map +1 -1
  16. package/dist/cache/__tests__/CacheManager.test.js +113 -113
  17. package/dist/cache/__tests__/CacheManager.test.js.map +1 -1
  18. package/dist/cache/__tests__/CachedWordPressClient.test.js +102 -99
  19. package/dist/cache/__tests__/CachedWordPressClient.test.js.map +1 -1
  20. package/dist/cache/__tests__/HttpCacheWrapper.test.js +98 -95
  21. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
  22. package/dist/cache/index.d.ts +7 -7
  23. package/dist/cache/index.d.ts.map +1 -1
  24. package/dist/cache/index.js +4 -4
  25. package/dist/cache/index.js.map +1 -1
  26. package/dist/client/CachedWordPressClient.d.ts +4 -4
  27. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  28. package/dist/client/CachedWordPressClient.js +55 -51
  29. package/dist/client/CachedWordPressClient.js.map +1 -1
  30. package/dist/client/api.d.ts +10 -10
  31. package/dist/client/api.js +158 -158
  32. package/dist/client/api.js.map +1 -1
  33. package/dist/client/auth.d.ts +2 -2
  34. package/dist/client/auth.js +72 -72
  35. package/dist/client/managers/AuthenticationManager.d.ts +2 -2
  36. package/dist/client/managers/AuthenticationManager.js +46 -46
  37. package/dist/client/managers/BaseManager.d.ts +1 -1
  38. package/dist/client/managers/BaseManager.js +9 -9
  39. package/dist/client/managers/RequestManager.d.ts +5 -3
  40. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  41. package/dist/client/managers/RequestManager.js +39 -19
  42. package/dist/client/managers/RequestManager.js.map +1 -1
  43. package/dist/client/managers/index.d.ts +3 -3
  44. package/dist/client/managers/index.js +3 -3
  45. package/dist/config/ConfigurationSchema.d.ts +2 -2
  46. package/dist/config/ConfigurationSchema.d.ts.map +1 -1
  47. package/dist/config/ConfigurationSchema.js +40 -40
  48. package/dist/config/ConfigurationSchema.js.map +1 -1
  49. package/dist/config/ServerConfiguration.d.ts +2 -2
  50. package/dist/config/ServerConfiguration.js +35 -35
  51. package/dist/config/ServerConfiguration.js.map +1 -1
  52. package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
  53. package/dist/docs/DocumentationGenerator.js +296 -255
  54. package/dist/docs/DocumentationGenerator.js.map +1 -1
  55. package/dist/docs/MarkdownFormatter.d.ts +1 -1
  56. package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
  57. package/dist/docs/MarkdownFormatter.js +60 -51
  58. package/dist/docs/MarkdownFormatter.js.map +1 -1
  59. package/dist/docs/index.d.ts +3 -3
  60. package/dist/docs/index.d.ts.map +1 -1
  61. package/dist/docs/index.js +2 -2
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +16 -16
  64. package/dist/index.js.map +1 -1
  65. package/dist/mcp-wordpress-1.3.0.tgz +0 -0
  66. package/dist/performance/MetricsCollector.d.ts +3 -3
  67. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  68. package/dist/performance/MetricsCollector.js +33 -27
  69. package/dist/performance/MetricsCollector.js.map +1 -1
  70. package/dist/performance/PerformanceAnalytics.d.ts +12 -12
  71. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
  72. package/dist/performance/PerformanceAnalytics.js +200 -154
  73. package/dist/performance/PerformanceAnalytics.js.map +1 -1
  74. package/dist/performance/PerformanceMonitor.d.ts +5 -5
  75. package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
  76. package/dist/performance/PerformanceMonitor.js +53 -52
  77. package/dist/performance/PerformanceMonitor.js.map +1 -1
  78. package/dist/performance/index.d.ts +6 -6
  79. package/dist/performance/index.d.ts.map +1 -1
  80. package/dist/performance/index.js +3 -3
  81. package/dist/security/InputValidator.d.ts +1 -1
  82. package/dist/security/InputValidator.d.ts.map +1 -1
  83. package/dist/security/InputValidator.js +111 -88
  84. package/dist/security/InputValidator.js.map +1 -1
  85. package/dist/security/SecurityConfig.d.ts +5 -5
  86. package/dist/security/SecurityConfig.js +92 -92
  87. package/dist/security/SecurityConfig.js.map +1 -1
  88. package/dist/server/ConnectionTester.d.ts +1 -1
  89. package/dist/server/ConnectionTester.d.ts.map +1 -1
  90. package/dist/server/ConnectionTester.js +4 -4
  91. package/dist/server/ConnectionTester.js.map +1 -1
  92. package/dist/server/ToolRegistry.d.ts +2 -2
  93. package/dist/server/ToolRegistry.d.ts.map +1 -1
  94. package/dist/server/ToolRegistry.js +35 -32
  95. package/dist/server/ToolRegistry.js.map +1 -1
  96. package/dist/server.d.ts +2 -2
  97. package/dist/server.js +2 -2
  98. package/dist/tools/BaseToolManager.js +5 -5
  99. package/dist/tools/auth.d.ts +2 -2
  100. package/dist/tools/auth.d.ts.map +1 -1
  101. package/dist/tools/auth.js +32 -31
  102. package/dist/tools/auth.js.map +1 -1
  103. package/dist/tools/cache.d.ts +1 -1
  104. package/dist/tools/cache.d.ts.map +1 -1
  105. package/dist/tools/cache.js +71 -71
  106. package/dist/tools/cache.js.map +1 -1
  107. package/dist/tools/comments.d.ts +2 -2
  108. package/dist/tools/comments.d.ts.map +1 -1
  109. package/dist/tools/comments.js +79 -79
  110. package/dist/tools/comments.js.map +1 -1
  111. package/dist/tools/index.d.ts +10 -10
  112. package/dist/tools/index.js +10 -10
  113. package/dist/tools/media.d.ts +2 -2
  114. package/dist/tools/media.js +80 -80
  115. package/dist/tools/pages.d.ts +2 -2
  116. package/dist/tools/pages.d.ts.map +1 -1
  117. package/dist/tools/pages.js +75 -75
  118. package/dist/tools/pages.js.map +1 -1
  119. package/dist/tools/performance.d.ts +1 -1
  120. package/dist/tools/performance.d.ts.map +1 -1
  121. package/dist/tools/performance.js +311 -287
  122. package/dist/tools/performance.js.map +1 -1
  123. package/dist/tools/posts.d.ts +2 -2
  124. package/dist/tools/posts.d.ts.map +1 -1
  125. package/dist/tools/posts.js +94 -94
  126. package/dist/tools/posts.js.map +1 -1
  127. package/dist/tools/site.d.ts +2 -2
  128. package/dist/tools/site.d.ts.map +1 -1
  129. package/dist/tools/site.js +60 -60
  130. package/dist/tools/site.js.map +1 -1
  131. package/dist/tools/taxonomies.d.ts +2 -2
  132. package/dist/tools/taxonomies.js +89 -89
  133. package/dist/tools/users.d.ts +2 -2
  134. package/dist/tools/users.js +68 -68
  135. package/dist/tools/users.js.map +1 -1
  136. package/dist/types/client.d.ts +13 -13
  137. package/dist/types/client.d.ts.map +1 -1
  138. package/dist/types/client.js +12 -12
  139. package/dist/types/client.js.map +1 -1
  140. package/dist/types/index.d.ts +19 -19
  141. package/dist/types/index.d.ts.map +1 -1
  142. package/dist/types/index.js +3 -3
  143. package/dist/types/mcp.d.ts +7 -7
  144. package/dist/types/wordpress.d.ts +21 -21
  145. package/dist/types/wordpress.d.ts.map +1 -1
  146. package/dist/utils/debug.d.ts +2 -2
  147. package/dist/utils/debug.js +28 -28
  148. package/dist/utils/error.d.ts.map +1 -1
  149. package/dist/utils/error.js +13 -13
  150. package/dist/utils/error.js.map +1 -1
  151. package/dist/utils/toolWrapper.d.ts.map +1 -1
  152. package/dist/utils/toolWrapper.js +5 -5
  153. package/dist/utils/toolWrapper.js.map +1 -1
  154. package/dist/utils/validation.d.ts.map +1 -1
  155. package/dist/utils/validation.js +41 -31
  156. package/dist/utils/validation.js.map +1 -1
  157. package/docs/CACHING.md +36 -2
  158. package/docs/DOCKER.md +24 -18
  159. package/docs/PERFORMANCE_MONITORING.md +49 -1
  160. package/docs/SECURITY_TESTING.md +30 -1
  161. package/docs/api/README.md +9 -1
  162. package/docs/api/summary.json +1 -1
  163. package/docs/contract-testing.md +24 -3
  164. package/docs/developer/GITHUB_ACTIONS_SETUP.md +8 -2
  165. package/docs/developer/MAINTENANCE.md +29 -3
  166. package/docs/developer/MIGRATION_GUIDE.md +13 -1
  167. package/docs/developer/NPM_AUTH_SETUP.md +13 -2
  168. package/docs/developer/REFACTORING.md +31 -1
  169. package/docs/releases/COMMUNITY_ANNOUNCEMENT_v1.1.2.md +18 -7
  170. package/docs/releases/RELEASE_NOTES_v1.1.2.md +31 -5
  171. package/docs/user-guides/DOCKER_SETUP.md +264 -0
  172. package/docs/user-guides/DTX_SETUP.md +327 -0
  173. package/docs/user-guides/NPM_SETUP.md +109 -0
  174. package/docs/user-guides/NPX_SETUP.md +281 -0
  175. package/docs/wordpress-rest-api-authentication-troubleshooting.md +13 -2
  176. package/package.json +27 -8
  177. package/src/cache/CacheInvalidation.ts +140 -132
  178. package/src/cache/CacheManager.ts +40 -29
  179. package/src/cache/HttpCacheWrapper.ts +105 -68
  180. package/src/cache/__tests__/CacheInvalidation.test.ts +123 -118
  181. package/src/cache/__tests__/CacheManager.test.ts +156 -152
  182. package/src/cache/__tests__/CachedWordPressClient.test.ts +131 -116
  183. package/src/cache/__tests__/HttpCacheWrapper.test.ts +118 -115
  184. package/src/cache/index.ts +13 -13
  185. package/src/client/CachedWordPressClient.ts +90 -80
  186. package/src/client/api.ts +205 -205
  187. package/src/client/auth.ts +80 -80
  188. package/src/client/managers/AuthenticationManager.ts +61 -61
  189. package/src/client/managers/BaseManager.ts +11 -11
  190. package/src/client/managers/RequestManager.ts +79 -47
  191. package/src/client/managers/index.ts +3 -3
  192. package/src/config/ConfigurationSchema.ts +44 -44
  193. package/src/config/ServerConfiguration.ts +39 -39
  194. package/src/docs/DocumentationGenerator.ts +402 -295
  195. package/src/docs/MarkdownFormatter.ts +94 -69
  196. package/src/docs/index.ts +4 -4
  197. package/src/index.ts +24 -21
  198. package/src/performance/MetricsCollector.ts +90 -58
  199. package/src/performance/PerformanceAnalytics.ts +386 -262
  200. package/src/performance/PerformanceMonitor.ts +152 -118
  201. package/src/performance/index.ts +9 -9
  202. package/src/security/InputValidator.ts +148 -91
  203. package/src/security/SecurityConfig.ts +94 -94
  204. package/src/server/ConnectionTester.ts +21 -15
  205. package/src/server/ToolRegistry.ts +64 -51
  206. package/src/server.ts +2 -2
  207. package/src/tools/BaseToolManager.ts +6 -6
  208. package/src/tools/auth.ts +42 -37
  209. package/src/tools/cache.ts +85 -81
  210. package/src/tools/comments.ts +93 -91
  211. package/src/tools/index.ts +10 -10
  212. package/src/tools/media.ts +89 -89
  213. package/src/tools/pages.ts +89 -87
  214. package/src/tools/performance.ts +443 -352
  215. package/src/tools/posts.ts +109 -107
  216. package/src/tools/site.ts +86 -77
  217. package/src/tools/taxonomies.ts +102 -102
  218. package/src/tools/users.ts +77 -77
  219. package/src/types/client.ts +157 -60
  220. package/src/types/index.ts +49 -27
  221. package/src/types/mcp.ts +15 -15
  222. package/src/types/wordpress.ts +57 -29
  223. package/src/utils/debug.ts +37 -37
  224. package/src/utils/error.ts +47 -25
  225. package/src/utils/toolWrapper.ts +12 -8
  226. package/src/utils/validation.ts +116 -65
  227. package/dist/client/WordPressClient.d.ts +0 -81
  228. package/dist/client/WordPressClient.d.ts.map +0 -1
  229. package/dist/client/WordPressClient.js +0 -354
  230. package/dist/client/WordPressClient.js.map +0 -1
  231. package/dist/performance/AnomalyDetector.d.ts +0 -63
  232. package/dist/performance/AnomalyDetector.d.ts.map +0 -1
  233. package/dist/performance/AnomalyDetector.js +0 -222
  234. package/dist/performance/AnomalyDetector.js.map +0 -1
  235. package/dist/performance/BenchmarkAnalyzer.d.ts +0 -67
  236. package/dist/performance/BenchmarkAnalyzer.d.ts.map +0 -1
  237. package/dist/performance/BenchmarkAnalyzer.js +0 -301
  238. package/dist/performance/BenchmarkAnalyzer.js.map +0 -1
  239. package/dist/performance/TrendAnalyzer.d.ts +0 -69
  240. package/dist/performance/TrendAnalyzer.d.ts.map +0 -1
  241. package/dist/performance/TrendAnalyzer.js +0 -203
  242. package/dist/performance/TrendAnalyzer.js.map +0 -1
  243. package/dist/tools/BaseToolClass.d.ts +0 -76
  244. package/dist/tools/BaseToolClass.d.ts.map +0 -1
  245. package/dist/tools/BaseToolClass.js +0 -104
  246. package/dist/tools/BaseToolClass.js.map +0 -1
  247. package/dist/tools/base.d.ts +0 -37
  248. package/dist/tools/base.d.ts.map +0 -1
  249. package/dist/tools/base.js +0 -60
  250. package/dist/tools/base.js.map +0 -1
  251. package/docs/user-guides/CLAUDE_DESKTOP_SETUP.md +0 -187
@@ -3,16 +3,16 @@
3
3
  * Manages different authentication methods for WordPress REST API
4
4
  */
5
5
 
6
- import { logger } from '../utils/debug.js';
7
- import { URL } from 'url';
6
+ import { logger } from "../utils/debug.js";
7
+ import { URL } from "url";
8
8
  import type {
9
9
  IAuthProvider,
10
10
  IWordPressClient,
11
11
  AuthMethod,
12
12
  AuthConfig,
13
- AuthenticationError as _AuthenticationError
14
- } from '../types/client.js';
15
- import type { WordPressUser } from '../types/wordpress.js';
13
+ AuthenticationError as _AuthenticationError,
14
+ } from "../types/client.js";
15
+ import type { WordPressUser } from "../types/wordpress.js";
16
16
 
17
17
  export class WordPressAuth {
18
18
  private client: IWordPressClient;
@@ -29,21 +29,21 @@ export class WordPressAuth {
29
29
  async authenticate(): Promise<boolean> {
30
30
  try {
31
31
  switch (this.authType) {
32
- case 'app-password':
32
+ case "app-password":
33
33
  return await this.handleAppPasswordAuth();
34
- case 'jwt':
34
+ case "jwt":
35
35
  return await this.handleJWTAuth();
36
- case 'basic':
36
+ case "basic":
37
37
  return await this.handleBasicAuth();
38
- case 'api-key':
38
+ case "api-key":
39
39
  return await this.handleAPIKeyAuth();
40
- case 'cookie':
40
+ case "cookie":
41
41
  return await this.handleCookieAuth();
42
42
  default:
43
43
  throw new Error(`Unsupported authentication type: ${this.authType}`);
44
44
  }
45
45
  } catch (error) {
46
- logger.error('Authentication failed:', error);
46
+ logger.error("Authentication failed:", error);
47
47
  throw error;
48
48
  }
49
49
  }
@@ -56,8 +56,8 @@ export class WordPressAuth {
56
56
 
57
57
  if (!username || !appPassword) {
58
58
  throw new Error(
59
- 'Application Password authentication requires WORDPRESS_USERNAME and WORDPRESS_APP_PASSWORD. ' +
60
- 'Visit your WordPress admin → Users → Profile → Application Passwords to create one.'
59
+ "Application Password authentication requires WORDPRESS_USERNAME and WORDPRESS_APP_PASSWORD. " +
60
+ "Visit your WordPress admin → Users → Profile → Application Passwords to create one.",
61
61
  );
62
62
  }
63
63
 
@@ -65,12 +65,12 @@ export class WordPressAuth {
65
65
  try {
66
66
  const user = await this.client.getCurrentUser();
67
67
  logger.log(
68
- `✅ Application Password authentication successful for user: ${user.name} (${user.username})`
68
+ `✅ Application Password authentication successful for user: ${user.name} (${user.username})`,
69
69
  );
70
70
  return true;
71
71
  } catch (error) {
72
72
  const message =
73
- 'Application Password authentication failed. Please check your credentials and ensure the application password is valid.';
73
+ "Application Password authentication failed. Please check your credentials and ensure the application password is valid.";
74
74
  logger.error(message, error);
75
75
  throw new Error(message);
76
76
  }
@@ -84,19 +84,19 @@ export class WordPressAuth {
84
84
 
85
85
  if (!username || !password) {
86
86
  throw new Error(
87
- 'Basic authentication requires WORDPRESS_USERNAME and WORDPRESS_PASSWORD'
87
+ "Basic authentication requires WORDPRESS_USERNAME and WORDPRESS_PASSWORD",
88
88
  );
89
89
  }
90
90
 
91
91
  try {
92
92
  const user = await this.client.getCurrentUser();
93
93
  logger.log(
94
- `✅ Basic authentication successful for user: ${user.name} (${user.username})`
94
+ `✅ Basic authentication successful for user: ${user.name} (${user.username})`,
95
95
  );
96
96
  return true;
97
97
  } catch (error) {
98
98
  const message =
99
- 'Basic authentication failed. Please check your username and password.';
99
+ "Basic authentication failed. Please check your username and password.";
100
100
  logger.error(message, error);
101
101
  throw new Error(message);
102
102
  }
@@ -110,8 +110,8 @@ export class WordPressAuth {
110
110
 
111
111
  if (!username || !password || !secret) {
112
112
  throw new Error(
113
- 'JWT authentication requires WORDPRESS_USERNAME, WORDPRESS_PASSWORD, and WORDPRESS_JWT_SECRET. ' +
114
- 'Install and configure the JWT Authentication plugin first.'
113
+ "JWT authentication requires WORDPRESS_USERNAME, WORDPRESS_PASSWORD, and WORDPRESS_JWT_SECRET. " +
114
+ "Install and configure the JWT Authentication plugin first.",
115
115
  );
116
116
  }
117
117
 
@@ -119,12 +119,12 @@ export class WordPressAuth {
119
119
  // The JWT token should be obtained during client authentication
120
120
  const user = await this.client.getCurrentUser();
121
121
  logger.log(
122
- `✅ JWT authentication successful for user: ${user.name} (${user.username})`
122
+ `✅ JWT authentication successful for user: ${user.name} (${user.username})`,
123
123
  );
124
124
  return true;
125
125
  } catch (error) {
126
126
  const message =
127
- 'JWT authentication failed. Please check your credentials and ensure the JWT plugin is installed and configured.';
127
+ "JWT authentication failed. Please check your credentials and ensure the JWT plugin is installed and configured.";
128
128
  logger.error(message, error);
129
129
  throw new Error(message);
130
130
  }
@@ -137,17 +137,17 @@ export class WordPressAuth {
137
137
  const { apiKey } = this.client.config.auth;
138
138
 
139
139
  if (!apiKey) {
140
- throw new Error('API Key authentication requires WORDPRESS_API_KEY');
140
+ throw new Error("API Key authentication requires WORDPRESS_API_KEY");
141
141
  }
142
142
 
143
143
  try {
144
144
  // Test API key by making a simple request
145
145
  await this.client.getSiteInfo();
146
- logger.log('✅ API Key authentication successful');
146
+ logger.log("✅ API Key authentication successful");
147
147
  return true;
148
148
  } catch (error) {
149
149
  const message =
150
- 'API Key authentication failed. Please check your API key.';
150
+ "API Key authentication failed. Please check your API key.";
151
151
  logger.error(message, error);
152
152
  throw new Error(message);
153
153
  }
@@ -161,7 +161,7 @@ export class WordPressAuth {
161
161
 
162
162
  if (!nonce) {
163
163
  logger.warn(
164
- 'Cookie authentication: No nonce provided, authentication may fail for write operations'
164
+ "Cookie authentication: No nonce provided, authentication may fail for write operations",
165
165
  );
166
166
  }
167
167
 
@@ -169,12 +169,12 @@ export class WordPressAuth {
169
169
  // Test with a simple read operation
170
170
  await this.client.getSiteInfo();
171
171
  logger.log(
172
- '✅ Cookie authentication configured (note: write operations may require valid nonce)'
172
+ "✅ Cookie authentication configured (note: write operations may require valid nonce)",
173
173
  );
174
174
  return true;
175
175
  } catch (error) {
176
176
  const message =
177
- 'Cookie authentication failed. Please ensure you are properly logged into WordPress.';
177
+ "Cookie authentication failed. Please ensure you are properly logged into WordPress.";
178
178
  logger.error(message, error);
179
179
  throw new Error(message);
180
180
  }
@@ -185,7 +185,7 @@ export class WordPressAuth {
185
185
  */
186
186
  async refreshAuth(): Promise<boolean> {
187
187
  switch (this.authType) {
188
- case 'jwt':
188
+ case "jwt":
189
189
  return await this.refreshJWTToken();
190
190
  default:
191
191
  logger.log(`Authentication refresh not supported for ${this.authType}`);
@@ -201,7 +201,7 @@ export class WordPressAuth {
201
201
  // Re-authenticate to get a new token
202
202
  return await this.handleJWTAuth();
203
203
  } catch (error) {
204
- logger.error('Failed to refresh JWT token:', error);
204
+ logger.error("Failed to refresh JWT token:", error);
205
205
  return false;
206
206
  }
207
207
  }
@@ -214,7 +214,7 @@ export class WordPressAuth {
214
214
  await this.client.getCurrentUser();
215
215
  return true;
216
216
  } catch (error) {
217
- logger.error('Authentication validation failed:', error);
217
+ logger.error("Authentication validation failed:", error);
218
218
  return false;
219
219
  }
220
220
  }
@@ -233,13 +233,13 @@ export class WordPressAuth {
233
233
  return {
234
234
  authenticated: true,
235
235
  method: this.authType,
236
- user
236
+ user,
237
237
  };
238
238
  } catch (error) {
239
239
  return {
240
240
  authenticated: false,
241
241
  method: this.authType,
242
- error: (error as Error).message
242
+ error: (error as Error).message,
243
243
  };
244
244
  }
245
245
  }
@@ -263,22 +263,22 @@ export class WordPressAuth {
263
263
  const { clientId } = this.client.config.auth;
264
264
 
265
265
  if (!clientId) {
266
- throw new Error('OAuth requires client ID');
266
+ throw new Error("OAuth requires client ID");
267
267
  }
268
268
 
269
269
  const state = this.generateRandomState();
270
- const redirectUri = 'http://localhost:8080/oauth/callback';
270
+ const redirectUri = "http://localhost:8080/oauth/callback";
271
271
 
272
- const authUrl = new URL('/oauth/authorize', this.client.config.baseUrl);
273
- authUrl.searchParams.append('client_id', clientId);
274
- authUrl.searchParams.append('redirect_uri', redirectUri);
275
- authUrl.searchParams.append('response_type', 'code');
276
- authUrl.searchParams.append('state', state);
277
- authUrl.searchParams.append('scope', 'read write');
272
+ const authUrl = new URL("/oauth/authorize", this.client.config.baseUrl);
273
+ authUrl.searchParams.append("client_id", clientId);
274
+ authUrl.searchParams.append("redirect_uri", redirectUri);
275
+ authUrl.searchParams.append("response_type", "code");
276
+ authUrl.searchParams.append("state", state);
277
+ authUrl.searchParams.append("scope", "read write");
278
278
 
279
279
  return {
280
280
  authUrl: authUrl.toString(),
281
- state
281
+ state,
282
282
  };
283
283
  }
284
284
 
@@ -288,7 +288,7 @@ export class WordPressAuth {
288
288
  async completeOAuthFlow(code: string, state: string): Promise<boolean> {
289
289
  // This would implement the OAuth token exchange
290
290
  // For now, this is a placeholder
291
- throw new Error('OAuth flow not yet implemented');
291
+ throw new Error("OAuth flow not yet implemented");
292
292
  }
293
293
 
294
294
  /**
@@ -296,8 +296,8 @@ export class WordPressAuth {
296
296
  */
297
297
  private generateRandomState(length = 32): string {
298
298
  const chars =
299
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
300
- let result = '';
299
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
300
+ let result = "";
301
301
  for (let i = 0; i < length; i++) {
302
302
  result += chars.charAt(Math.floor(Math.random() * chars.length));
303
303
  }
@@ -312,38 +312,38 @@ export class WordPressAuth {
312
312
  const auth = this.client.config.auth;
313
313
 
314
314
  switch (this.authType) {
315
- case 'app-password':
315
+ case "app-password":
316
316
  if (auth.username && auth.appPassword) {
317
317
  const credentials = Buffer.from(
318
- `${auth.username}:${auth.appPassword}`
319
- ).toString('base64');
320
- headers['Authorization'] = `Basic ${credentials}`;
318
+ `${auth.username}:${auth.appPassword}`,
319
+ ).toString("base64");
320
+ headers["Authorization"] = `Basic ${credentials}`;
321
321
  }
322
322
  break;
323
- case 'basic':
323
+ case "basic":
324
324
  if (auth.username && auth.password) {
325
325
  const credentials = Buffer.from(
326
- `${auth.username}:${auth.password}`
327
- ).toString('base64');
328
- headers['Authorization'] = `Basic ${credentials}`;
326
+ `${auth.username}:${auth.password}`,
327
+ ).toString("base64");
328
+ headers["Authorization"] = `Basic ${credentials}`;
329
329
  }
330
330
  break;
331
331
 
332
- case 'jwt':
332
+ case "jwt":
333
333
  if (auth.token) {
334
- headers['Authorization'] = `Bearer ${auth.token}`;
334
+ headers["Authorization"] = `Bearer ${auth.token}`;
335
335
  }
336
336
  break;
337
337
 
338
- case 'api-key':
338
+ case "api-key":
339
339
  if (auth.apiKey) {
340
- headers['X-API-Key'] = auth.apiKey;
340
+ headers["X-API-Key"] = auth.apiKey;
341
341
  }
342
342
  break;
343
343
 
344
- case 'cookie':
344
+ case "cookie":
345
345
  if (auth.nonce) {
346
- headers['X-WP-Nonce'] = auth.nonce;
346
+ headers["X-WP-Nonce"] = auth.nonce;
347
347
  }
348
348
  break;
349
349
  }
@@ -356,20 +356,20 @@ export class WordPressAuth {
356
356
  */
357
357
  requiresSetup(): boolean {
358
358
  switch (this.authType) {
359
- case 'jwt':
359
+ case "jwt":
360
360
  return !this.client.config.auth.secret;
361
- case 'api-key':
361
+ case "api-key":
362
362
  return !this.client.config.auth.apiKey;
363
- case 'app-password':
363
+ case "app-password":
364
364
  return (
365
365
  !this.client.config.auth.username ||
366
366
  !this.client.config.auth.appPassword
367
367
  );
368
- case 'basic':
368
+ case "basic":
369
369
  return (
370
370
  !this.client.config.auth.username || !this.client.config.auth.password
371
371
  );
372
- case 'cookie':
372
+ case "cookie":
373
373
  return false; // Cookie auth can work without additional setup
374
374
  default:
375
375
  return true;
@@ -381,7 +381,7 @@ export class WordPressAuth {
381
381
  */
382
382
  getSetupInstructions(): string {
383
383
  switch (this.authType) {
384
- case 'app-password':
384
+ case "app-password":
385
385
  return `
386
386
  To set up Application Password authentication:
387
387
  1. Log into your WordPress admin dashboard
@@ -393,7 +393,7 @@ To set up Application Password authentication:
393
393
  7. Set WORDPRESS_USERNAME to your WordPress username
394
394
  `;
395
395
 
396
- case 'jwt':
396
+ case "jwt":
397
397
  return `
398
398
  To set up JWT authentication:
399
399
  1. Install the "JWT Authentication for WP REST API" plugin
@@ -403,7 +403,7 @@ To set up JWT authentication:
403
403
  5. Set WORDPRESS_USERNAME and WORDPRESS_PASSWORD
404
404
  `;
405
405
 
406
- case 'api-key':
406
+ case "api-key":
407
407
  return `
408
408
  To set up API Key authentication:
409
409
  1. Install an API Key plugin (varies by plugin)
@@ -411,7 +411,7 @@ To set up API Key authentication:
411
411
  3. Set WORDPRESS_API_KEY environment variable
412
412
  `;
413
413
 
414
- case 'basic':
414
+ case "basic":
415
415
  return `
416
416
  To set up Basic authentication:
417
417
  1. Set WORDPRESS_USERNAME to your WordPress username
@@ -419,14 +419,14 @@ To set up Basic authentication:
419
419
  Note: This method is less secure than Application Passwords
420
420
  `;
421
421
 
422
- case 'cookie':
422
+ case "cookie":
423
423
  return `
424
424
  Cookie authentication is automatically configured when you're logged into WordPress.
425
425
  For write operations, you may need to set WORDPRESS_COOKIE_NONCE.
426
426
  `;
427
427
 
428
428
  default:
429
- return 'No setup instructions available for this authentication method.';
429
+ return "No setup instructions available for this authentication method.";
430
430
  }
431
431
  }
432
432
  }
@@ -436,7 +436,7 @@ For write operations, you may need to set WORDPRESS_COOKIE_NONCE.
436
436
  */
437
437
 
438
438
  export class AppPasswordAuthProvider implements IAuthProvider {
439
- readonly method: AuthMethod = 'app-password';
439
+ readonly method: AuthMethod = "app-password";
440
440
 
441
441
  async authenticate(client: IWordPressClient): Promise<boolean> {
442
442
  const auth = new WordPressAuth(client);
@@ -449,7 +449,7 @@ export class AppPasswordAuthProvider implements IAuthProvider {
449
449
  }
450
450
 
451
451
  export class JWTAuthProvider implements IAuthProvider {
452
- readonly method: AuthMethod = 'jwt';
452
+ readonly method: AuthMethod = "jwt";
453
453
 
454
454
  async authenticate(client: IWordPressClient): Promise<boolean> {
455
455
  const auth = new WordPressAuth(client);
@@ -467,7 +467,7 @@ export class JWTAuthProvider implements IAuthProvider {
467
467
  }
468
468
 
469
469
  export class BasicAuthProvider implements IAuthProvider {
470
- readonly method: AuthMethod = 'basic';
470
+ readonly method: AuthMethod = "basic";
471
471
 
472
472
  async authenticate(client: IWordPressClient): Promise<boolean> {
473
473
  const auth = new WordPressAuth(client);
@@ -480,7 +480,7 @@ export class BasicAuthProvider implements IAuthProvider {
480
480
  }
481
481
 
482
482
  export class APIKeyAuthProvider implements IAuthProvider {
483
- readonly method: AuthMethod = 'api-key';
483
+ readonly method: AuthMethod = "api-key";
484
484
 
485
485
  async authenticate(client: IWordPressClient): Promise<boolean> {
486
486
  const auth = new WordPressAuth(client);
@@ -493,7 +493,7 @@ export class APIKeyAuthProvider implements IAuthProvider {
493
493
  }
494
494
 
495
495
  export class CookieAuthProvider implements IAuthProvider {
496
- readonly method: AuthMethod = 'cookie';
496
+ readonly method: AuthMethod = "cookie";
497
497
 
498
498
  async authenticate(client: IWordPressClient): Promise<boolean> {
499
499
  const auth = new WordPressAuth(client);
@@ -510,15 +510,15 @@ export class CookieAuthProvider implements IAuthProvider {
510
510
  */
511
511
  export function createAuthProvider(method: AuthMethod): IAuthProvider {
512
512
  switch (method) {
513
- case 'app-password':
513
+ case "app-password":
514
514
  return new AppPasswordAuthProvider();
515
- case 'jwt':
515
+ case "jwt":
516
516
  return new JWTAuthProvider();
517
- case 'basic':
517
+ case "basic":
518
518
  return new BasicAuthProvider();
519
- case 'api-key':
519
+ case "api-key":
520
520
  return new APIKeyAuthProvider();
521
- case 'cookie':
521
+ case "cookie":
522
522
  return new CookieAuthProvider();
523
523
  default:
524
524
  throw new Error(`Unsupported authentication method: ${method}`);