mcp-wordpress 1.5.2 → 2.0.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.
- package/README.md +332 -61
- package/dist/cache/CacheInvalidation.d.ts.map +1 -1
- package/dist/cache/CacheInvalidation.js +4 -4
- package/dist/cache/CacheInvalidation.js.map +1 -1
- package/dist/client/MockWordPressClient.d.ts +55 -0
- package/dist/client/MockWordPressClient.d.ts.map +1 -0
- package/dist/client/MockWordPressClient.js +369 -0
- package/dist/client/MockWordPressClient.js.map +1 -0
- package/dist/client/api.d.ts +1 -0
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +26 -60
- package/dist/client/api.js.map +1 -1
- package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
- package/dist/client/managers/AuthenticationManager.js +4 -3
- package/dist/client/managers/AuthenticationManager.js.map +1 -1
- package/dist/config/ConfigurationSchema.d.ts +3 -3
- package/dist/config/ConfigurationSchema.d.ts.map +1 -1
- package/dist/config/ConfigurationSchema.js +7 -24
- package/dist/config/ConfigurationSchema.js.map +1 -1
- package/dist/config/ServerConfiguration.d.ts +8 -0
- package/dist/config/ServerConfiguration.d.ts.map +1 -1
- package/dist/config/ServerConfiguration.js +80 -31
- package/dist/config/ServerConfiguration.js.map +1 -1
- package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
- package/dist/docs/DocumentationGenerator.js +5 -7
- package/dist/docs/DocumentationGenerator.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -29
- package/dist/index.js.map +1 -1
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +3 -11
- package/dist/security/InputValidator.js.map +1 -1
- package/dist/server/ToolRegistry.d.ts +4 -0
- package/dist/server/ToolRegistry.d.ts.map +1 -1
- package/dist/server/ToolRegistry.js +71 -8
- package/dist/server/ToolRegistry.js.map +1 -1
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +8 -3
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/posts.d.ts.map +1 -1
- package/dist/tools/posts.js +287 -20
- package/dist/tools/posts.js.map +1 -1
- package/dist/tools/site.d.ts.map +1 -1
- package/dist/tools/site.js +47 -9
- package/dist/tools/site.js.map +1 -1
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +113 -10
- package/dist/tools/users.js.map +1 -1
- package/dist/utils/enhancedError.d.ts +61 -0
- package/dist/utils/enhancedError.d.ts.map +1 -0
- package/dist/utils/enhancedError.js +221 -0
- package/dist/utils/enhancedError.js.map +1 -0
- package/dist/utils/streaming.d.ts +104 -0
- package/dist/utils/streaming.d.ts.map +1 -0
- package/dist/utils/streaming.js +312 -0
- package/dist/utils/streaming.js.map +1 -0
- package/dist/utils/validation.d.ts +19 -3
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +174 -24
- package/dist/utils/validation.js.map +1 -1
- package/docs/ARCHITECTURE.md +850 -0
- package/docs/CACHING.md +20 -17
- package/docs/CONFIGURATION.md +660 -0
- package/docs/DOCKER.md +61 -60
- package/docs/EVALUATION.md +397 -0
- package/docs/INSTALLATION.md +423 -0
- package/docs/PERFORMANCE_MONITORING.md +17 -15
- package/docs/SECURITY.md +621 -0
- package/docs/SECURITY_TESTING.md +22 -26
- package/docs/TEST_SITE_SETUP.md +136 -0
- package/docs/TROUBLESHOOTING.md +578 -0
- package/docs/api/README.md +76 -91
- package/docs/api/categories/auth.md +0 -2
- package/docs/api/categories/cache.md +0 -2
- package/docs/api/categories/comment.md +0 -2
- package/docs/api/categories/media.md +0 -2
- package/docs/api/categories/page.md +0 -2
- package/docs/api/categories/performance.md +0 -2
- package/docs/api/categories/post.md +0 -2
- package/docs/api/categories/site.md +0 -2
- package/docs/api/categories/taxonomy.md +0 -2
- package/docs/api/categories/user.md +0 -2
- package/docs/api/summary.json +1 -1
- package/docs/api/tools/wp_approve_comment.md +11 -3
- package/docs/api/tools/wp_cache_clear.md +14 -5
- package/docs/api/tools/wp_cache_info.md +14 -5
- package/docs/api/tools/wp_cache_stats.md +14 -5
- package/docs/api/tools/wp_cache_warm.md +14 -5
- package/docs/api/tools/wp_create_application_password.md +11 -3
- package/docs/api/tools/wp_create_category.md +11 -3
- package/docs/api/tools/wp_create_comment.md +14 -5
- package/docs/api/tools/wp_create_page.md +13 -5
- package/docs/api/tools/wp_create_post.md +14 -7
- package/docs/api/tools/wp_create_tag.md +11 -3
- package/docs/api/tools/wp_create_user.md +13 -5
- package/docs/api/tools/wp_delete_application_password.md +11 -3
- package/docs/api/tools/wp_delete_category.md +11 -3
- package/docs/api/tools/wp_delete_comment.md +11 -3
- package/docs/api/tools/wp_delete_media.md +10 -3
- package/docs/api/tools/wp_delete_page.md +10 -3
- package/docs/api/tools/wp_delete_post.md +11 -5
- package/docs/api/tools/wp_delete_tag.md +11 -3
- package/docs/api/tools/wp_delete_user.md +10 -3
- package/docs/api/tools/wp_get_application_passwords.md +11 -3
- package/docs/api/tools/wp_get_auth_status.md +11 -3
- package/docs/api/tools/wp_get_category.md +11 -3
- package/docs/api/tools/wp_get_comment.md +11 -3
- package/docs/api/tools/wp_get_current_user.md +11 -3
- package/docs/api/tools/wp_get_media.md +11 -3
- package/docs/api/tools/wp_get_page.md +11 -3
- package/docs/api/tools/wp_get_page_revisions.md +11 -3
- package/docs/api/tools/wp_get_post.md +12 -5
- package/docs/api/tools/wp_get_post_revisions.md +11 -3
- package/docs/api/tools/wp_get_site_settings.md +10 -3
- package/docs/api/tools/wp_get_tag.md +11 -3
- package/docs/api/tools/wp_get_user.md +11 -3
- package/docs/api/tools/wp_list_categories.md +11 -3
- package/docs/api/tools/wp_list_comments.md +11 -3
- package/docs/api/tools/wp_list_media.md +14 -5
- package/docs/api/tools/wp_list_pages.md +14 -5
- package/docs/api/tools/wp_list_posts.md +15 -7
- package/docs/api/tools/wp_list_tags.md +11 -3
- package/docs/api/tools/wp_list_users.md +11 -3
- package/docs/api/tools/wp_performance_alerts.md +17 -7
- package/docs/api/tools/wp_performance_benchmark.md +17 -7
- package/docs/api/tools/wp_performance_export.md +17 -7
- package/docs/api/tools/wp_performance_history.md +17 -7
- package/docs/api/tools/wp_performance_optimize.md +17 -7
- package/docs/api/tools/wp_performance_stats.md +17 -7
- package/docs/api/tools/wp_search_site.md +11 -3
- package/docs/api/tools/wp_spam_comment.md +11 -3
- package/docs/api/tools/wp_switch_auth_method.md +14 -5
- package/docs/api/tools/wp_test_auth.md +11 -3
- package/docs/api/tools/wp_update_category.md +11 -3
- package/docs/api/tools/wp_update_comment.md +14 -5
- package/docs/api/tools/wp_update_media.md +14 -5
- package/docs/api/tools/wp_update_page.md +13 -5
- package/docs/api/tools/wp_update_post.md +14 -7
- package/docs/api/tools/wp_update_site_settings.md +14 -5
- package/docs/api/tools/wp_update_tag.md +11 -3
- package/docs/api/tools/wp_update_user.md +13 -5
- package/docs/api/tools/wp_upload_media.md +13 -5
- package/docs/api/types/WordPressPost.md +2 -0
- package/docs/code-improvements.md +40 -0
- package/docs/contract-testing.md +1 -1
- package/docs/developer/API_REFERENCE.md +19 -59
- package/docs/developer/ARCHITECTURE.md +8 -11
- package/docs/developer/BUILD_SYSTEM.md +2 -2
- package/docs/developer/CONTRIBUTING.md +3 -5
- package/docs/developer/GITHUB_ACTIONS_SETUP.md +2 -2
- package/docs/developer/MIGRATION_GUIDE.md +5 -6
- package/docs/developer/README.md +2 -1
- package/docs/developer/REFACTORING.md +9 -15
- package/docs/developer/RELEASE_PROCESS.md +4 -3
- package/docs/developer/TESTING.md +2 -2
- package/docs/examples/claude-desktop-config.md +8 -0
- package/docs/integrations/claude-desktop.md +426 -0
- package/docs/integrations/cline.md +537 -0
- package/docs/integrations/vs-code.md +515 -0
- package/docs/releases/COMMUNITY_ANNOUNCEMENT_v1.1.2.md +30 -23
- package/docs/releases/RELEASE_NOTES_v1.1.2.md +7 -6
- package/docs/testing-configurations.md +11 -0
- package/docs/user-guides/DOCKER_NPM_DTX_SETUP.md +3 -2
- package/docs/user-guides/DOCKER_SETUP.md +3 -2
- package/docs/user-guides/DTX_SETUP.md +6 -5
- package/docs/user-guides/DXT_INSTALLATION.md +4 -4
- package/docs/user-guides/NPM_SETUP.md +4 -2
- package/docs/user-guides/NPX_SETUP.md +4 -2
- package/docs/user-guides/SMITHERY_SETUP.md +402 -0
- package/docs/wordpress-rest-api-authentication-troubleshooting.md +45 -42
- package/package.json +12 -2
- package/src/cache/CacheInvalidation.ts +7 -18
- package/src/client/MockWordPressClient.ts +398 -0
- package/src/client/api.ts +77 -237
- package/src/client/managers/AuthenticationManager.ts +19 -56
- package/src/config/ConfigurationSchema.ts +14 -45
- package/src/config/ServerConfiguration.ts +98 -71
- package/src/docs/DocumentationGenerator.ts +39 -123
- package/src/dxt-entry.cjs +4 -1
- package/src/index.ts +35 -54
- package/src/security/InputValidator.ts +15 -57
- package/src/server/ToolRegistry.ts +88 -17
- package/src/tools/auth.ts +15 -22
- package/src/tools/posts.ts +347 -64
- package/src/tools/site.ts +69 -46
- package/src/tools/users.ts +142 -44
- package/src/utils/enhancedError.ts +248 -0
- package/src/utils/streaming.ts +428 -0
- package/src/utils/validation.ts +253 -92
- package/dist/mcp-wordpress-1.5.2.tgz +0 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { WordPressClient } from "./api.js";
|
|
2
|
+
/**
|
|
3
|
+
* Mock WordPress client for CI environments
|
|
4
|
+
* Provides realistic responses without connecting to actual WordPress
|
|
5
|
+
*/
|
|
6
|
+
export class MockWordPressClient extends WordPressClient {
|
|
7
|
+
isMockMode = true;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
super(config);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Override authenticate to not make actual requests
|
|
13
|
+
*/
|
|
14
|
+
async authenticate() {
|
|
15
|
+
console.log("INFO: Mock authentication - skipping actual connection");
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Mock getPosts with realistic data
|
|
20
|
+
*/
|
|
21
|
+
async getPosts(params) {
|
|
22
|
+
const mockPosts = [
|
|
23
|
+
{
|
|
24
|
+
id: 1,
|
|
25
|
+
date: "2024-01-15T10:00:00",
|
|
26
|
+
date_gmt: "2024-01-15T10:00:00",
|
|
27
|
+
guid: { rendered: "https://demo.wordpress.com/?p=1" },
|
|
28
|
+
modified: "2024-01-15T10:00:00",
|
|
29
|
+
modified_gmt: "2024-01-15T10:00:00",
|
|
30
|
+
slug: "hello-world",
|
|
31
|
+
status: "publish",
|
|
32
|
+
type: "post",
|
|
33
|
+
link: "https://demo.wordpress.com/hello-world/",
|
|
34
|
+
title: { rendered: "Hello World - Demo Post" },
|
|
35
|
+
content: { rendered: "<p>This is a demo post for CI testing.</p>" },
|
|
36
|
+
excerpt: { rendered: "<p>This is a demo post for CI testing.</p>" },
|
|
37
|
+
author: 1,
|
|
38
|
+
featured_media: 0,
|
|
39
|
+
comment_status: "open",
|
|
40
|
+
ping_status: "open",
|
|
41
|
+
sticky: false,
|
|
42
|
+
template: "",
|
|
43
|
+
format: "standard",
|
|
44
|
+
meta: [],
|
|
45
|
+
categories: [1],
|
|
46
|
+
tags: [],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 2,
|
|
50
|
+
date: "2024-01-16T12:00:00",
|
|
51
|
+
date_gmt: "2024-01-16T12:00:00",
|
|
52
|
+
guid: { rendered: "https://demo.wordpress.com/?p=2" },
|
|
53
|
+
modified: "2024-01-16T12:00:00",
|
|
54
|
+
modified_gmt: "2024-01-16T12:00:00",
|
|
55
|
+
slug: "sample-post",
|
|
56
|
+
status: "publish",
|
|
57
|
+
type: "post",
|
|
58
|
+
link: "https://demo.wordpress.com/sample-post/",
|
|
59
|
+
title: { rendered: "Sample Post for Testing" },
|
|
60
|
+
content: { rendered: "<p>This is another demo post with sample content.</p>" },
|
|
61
|
+
excerpt: { rendered: "<p>This is another demo post with sample content.</p>" },
|
|
62
|
+
author: 1,
|
|
63
|
+
featured_media: 0,
|
|
64
|
+
comment_status: "open",
|
|
65
|
+
ping_status: "open",
|
|
66
|
+
sticky: false,
|
|
67
|
+
template: "",
|
|
68
|
+
format: "standard",
|
|
69
|
+
meta: [],
|
|
70
|
+
categories: [1],
|
|
71
|
+
tags: [1],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: 3,
|
|
75
|
+
date: "2024-01-17T14:30:00",
|
|
76
|
+
date_gmt: "2024-01-17T14:30:00",
|
|
77
|
+
guid: { rendered: "https://demo.wordpress.com/?p=3" },
|
|
78
|
+
modified: "2024-01-17T14:30:00",
|
|
79
|
+
modified_gmt: "2024-01-17T14:30:00",
|
|
80
|
+
slug: "latest-news",
|
|
81
|
+
status: "publish",
|
|
82
|
+
type: "post",
|
|
83
|
+
link: "https://demo.wordpress.com/latest-news/",
|
|
84
|
+
title: { rendered: "Latest News Update" },
|
|
85
|
+
content: { rendered: "<p>This is the latest news update for demonstration.</p>" },
|
|
86
|
+
excerpt: { rendered: "<p>This is the latest news update for demonstration.</p>" },
|
|
87
|
+
author: 1,
|
|
88
|
+
featured_media: 0,
|
|
89
|
+
comment_status: "open",
|
|
90
|
+
ping_status: "open",
|
|
91
|
+
sticky: false,
|
|
92
|
+
template: "",
|
|
93
|
+
format: "standard",
|
|
94
|
+
meta: [],
|
|
95
|
+
categories: [1, 2],
|
|
96
|
+
tags: [1, 2],
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
// Apply basic filtering based on params
|
|
100
|
+
let filteredPosts = mockPosts;
|
|
101
|
+
if (params?.per_page) {
|
|
102
|
+
filteredPosts = filteredPosts.slice(0, parseInt(params.per_page.toString()));
|
|
103
|
+
}
|
|
104
|
+
return filteredPosts;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Mock getPost with realistic data
|
|
108
|
+
*/
|
|
109
|
+
async getPost(id) {
|
|
110
|
+
if (id === 999999) {
|
|
111
|
+
throw new Error("Invalid post ID.");
|
|
112
|
+
}
|
|
113
|
+
const mockPost = {
|
|
114
|
+
id: id,
|
|
115
|
+
date: "2024-01-15T10:00:00",
|
|
116
|
+
date_gmt: "2024-01-15T10:00:00",
|
|
117
|
+
guid: { rendered: `https://demo.wordpress.com/?p=${id}` },
|
|
118
|
+
modified: "2024-01-15T10:00:00",
|
|
119
|
+
modified_gmt: "2024-01-15T10:00:00",
|
|
120
|
+
slug: `demo-post-${id}`,
|
|
121
|
+
status: "publish",
|
|
122
|
+
type: "post",
|
|
123
|
+
link: `https://demo.wordpress.com/demo-post-${id}/`,
|
|
124
|
+
title: { rendered: `Demo Post ${id}` },
|
|
125
|
+
content: { rendered: `<p>This is demo content for post ${id}.</p>` },
|
|
126
|
+
excerpt: { rendered: `<p>This is demo content for post ${id}.</p>` },
|
|
127
|
+
author: 1,
|
|
128
|
+
featured_media: 0,
|
|
129
|
+
comment_status: "open",
|
|
130
|
+
ping_status: "open",
|
|
131
|
+
sticky: false,
|
|
132
|
+
template: "",
|
|
133
|
+
format: "standard",
|
|
134
|
+
meta: [],
|
|
135
|
+
categories: [1],
|
|
136
|
+
tags: [],
|
|
137
|
+
};
|
|
138
|
+
return mockPost;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Mock getCurrentUser with realistic data
|
|
142
|
+
*/
|
|
143
|
+
async getCurrentUser() {
|
|
144
|
+
const mockUser = {
|
|
145
|
+
id: 1,
|
|
146
|
+
name: "CI Demo User",
|
|
147
|
+
username: "ci-demo-user",
|
|
148
|
+
first_name: "CI",
|
|
149
|
+
last_name: "Demo",
|
|
150
|
+
slug: "ci-demo-user",
|
|
151
|
+
email: "demo@example.com",
|
|
152
|
+
url: "https://demo.wordpress.com",
|
|
153
|
+
description: "Demo user for CI testing",
|
|
154
|
+
link: "https://demo.wordpress.com/author/ci-demo-user/",
|
|
155
|
+
locale: "en_US",
|
|
156
|
+
nickname: "CI Demo",
|
|
157
|
+
registered_date: "2024-01-01T00:00:00+00:00",
|
|
158
|
+
roles: ["administrator"],
|
|
159
|
+
capabilities: {
|
|
160
|
+
read: true,
|
|
161
|
+
level_0: true,
|
|
162
|
+
level_1: true,
|
|
163
|
+
level_2: true,
|
|
164
|
+
level_3: true,
|
|
165
|
+
level_4: true,
|
|
166
|
+
level_5: true,
|
|
167
|
+
level_6: true,
|
|
168
|
+
level_7: true,
|
|
169
|
+
level_8: true,
|
|
170
|
+
level_9: true,
|
|
171
|
+
level_10: true,
|
|
172
|
+
delete_others_pages: true,
|
|
173
|
+
delete_others_posts: true,
|
|
174
|
+
delete_pages: true,
|
|
175
|
+
delete_posts: true,
|
|
176
|
+
delete_private_pages: true,
|
|
177
|
+
delete_private_posts: true,
|
|
178
|
+
delete_published_pages: true,
|
|
179
|
+
delete_published_posts: true,
|
|
180
|
+
edit_dashboard: true,
|
|
181
|
+
edit_others_pages: true,
|
|
182
|
+
edit_others_posts: true,
|
|
183
|
+
edit_pages: true,
|
|
184
|
+
edit_posts: true,
|
|
185
|
+
edit_private_pages: true,
|
|
186
|
+
edit_private_posts: true,
|
|
187
|
+
edit_published_pages: true,
|
|
188
|
+
edit_published_posts: true,
|
|
189
|
+
edit_theme_options: true,
|
|
190
|
+
export: true,
|
|
191
|
+
import: true,
|
|
192
|
+
list_users: true,
|
|
193
|
+
manage_categories: true,
|
|
194
|
+
manage_links: true,
|
|
195
|
+
manage_options: true,
|
|
196
|
+
moderate_comments: true,
|
|
197
|
+
promote_users: true,
|
|
198
|
+
publish_pages: true,
|
|
199
|
+
publish_posts: true,
|
|
200
|
+
read_private_pages: true,
|
|
201
|
+
read_private_posts: true,
|
|
202
|
+
remove_users: true,
|
|
203
|
+
switch_themes: true,
|
|
204
|
+
upload_files: true,
|
|
205
|
+
customize: true,
|
|
206
|
+
delete_site: true,
|
|
207
|
+
},
|
|
208
|
+
extra_capabilities: {
|
|
209
|
+
administrator: true,
|
|
210
|
+
},
|
|
211
|
+
avatar_urls: {
|
|
212
|
+
"24": "https://secure.gravatar.com/avatar/example?s=24&d=mm&r=g",
|
|
213
|
+
"48": "https://secure.gravatar.com/avatar/example?s=48&d=mm&r=g",
|
|
214
|
+
"96": "https://secure.gravatar.com/avatar/example?s=96&d=mm&r=g",
|
|
215
|
+
},
|
|
216
|
+
meta: [],
|
|
217
|
+
};
|
|
218
|
+
return mockUser;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Mock getSiteSettings with realistic data
|
|
222
|
+
*/
|
|
223
|
+
async getSiteSettings() {
|
|
224
|
+
const mockSettings = {
|
|
225
|
+
title: "Demo WordPress Site",
|
|
226
|
+
description: "A demonstration site for CI testing",
|
|
227
|
+
url: "https://demo.wordpress.com",
|
|
228
|
+
email: "admin@demo.wordpress.com",
|
|
229
|
+
timezone: "UTC",
|
|
230
|
+
date_format: "F j, Y",
|
|
231
|
+
time_format: "g:i a",
|
|
232
|
+
start_of_week: 1,
|
|
233
|
+
language: "en_US",
|
|
234
|
+
use_smilies: true,
|
|
235
|
+
default_category: 1,
|
|
236
|
+
default_post_format: "0",
|
|
237
|
+
posts_per_page: 10,
|
|
238
|
+
default_ping_status: "open",
|
|
239
|
+
default_comment_status: "open",
|
|
240
|
+
};
|
|
241
|
+
return mockSettings;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Mock createPost
|
|
245
|
+
*/
|
|
246
|
+
async createPost(data) {
|
|
247
|
+
const mockPost = {
|
|
248
|
+
id: Math.floor(Math.random() * 1000) + 100,
|
|
249
|
+
date: new Date().toISOString(),
|
|
250
|
+
date_gmt: new Date().toISOString(),
|
|
251
|
+
guid: { rendered: `https://demo.wordpress.com/?p=${Math.floor(Math.random() * 1000) + 100}` },
|
|
252
|
+
modified: new Date().toISOString(),
|
|
253
|
+
modified_gmt: new Date().toISOString(),
|
|
254
|
+
slug: data.title?.toLowerCase().replace(/\s+/g, "-") || "new-post",
|
|
255
|
+
status: data.status || "publish",
|
|
256
|
+
type: "post",
|
|
257
|
+
link: `https://demo.wordpress.com/${data.title?.toLowerCase().replace(/\s+/g, "-") || "new-post"}/`,
|
|
258
|
+
title: { rendered: data.title || "New Post" },
|
|
259
|
+
content: { rendered: data.content || "<p>New post content</p>" },
|
|
260
|
+
excerpt: { rendered: data.excerpt || "<p>New post excerpt</p>" },
|
|
261
|
+
author: 1,
|
|
262
|
+
featured_media: 0,
|
|
263
|
+
comment_status: "open",
|
|
264
|
+
ping_status: "open",
|
|
265
|
+
sticky: false,
|
|
266
|
+
template: "",
|
|
267
|
+
format: "standard",
|
|
268
|
+
meta: [],
|
|
269
|
+
categories: [1],
|
|
270
|
+
tags: [],
|
|
271
|
+
};
|
|
272
|
+
return mockPost;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Mock updatePost
|
|
276
|
+
*/
|
|
277
|
+
async updatePost(data) {
|
|
278
|
+
const mockPost = {
|
|
279
|
+
id: data.id,
|
|
280
|
+
date: "2024-01-15T10:00:00",
|
|
281
|
+
date_gmt: "2024-01-15T10:00:00",
|
|
282
|
+
guid: { rendered: `https://demo.wordpress.com/?p=${data.id}` },
|
|
283
|
+
modified: new Date().toISOString(),
|
|
284
|
+
modified_gmt: new Date().toISOString(),
|
|
285
|
+
slug: data.title?.toLowerCase().replace(/\s+/g, "-") || `post-${data.id}`,
|
|
286
|
+
status: data.status || "publish",
|
|
287
|
+
type: "post",
|
|
288
|
+
link: `https://demo.wordpress.com/${data.title?.toLowerCase().replace(/\s+/g, "-") || `post-${data.id}`}/`,
|
|
289
|
+
title: { rendered: data.title || `Updated Post ${data.id}` },
|
|
290
|
+
content: { rendered: data.content || "<p>Updated content</p>" },
|
|
291
|
+
excerpt: { rendered: data.excerpt || "<p>Updated excerpt</p>" },
|
|
292
|
+
author: 1,
|
|
293
|
+
featured_media: 0,
|
|
294
|
+
comment_status: "open",
|
|
295
|
+
ping_status: "open",
|
|
296
|
+
sticky: false,
|
|
297
|
+
template: "",
|
|
298
|
+
format: "standard",
|
|
299
|
+
meta: [],
|
|
300
|
+
categories: [1],
|
|
301
|
+
tags: [],
|
|
302
|
+
};
|
|
303
|
+
return mockPost;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Mock search
|
|
307
|
+
*/
|
|
308
|
+
async search(query, types, subtype) {
|
|
309
|
+
if (!query) {
|
|
310
|
+
return [];
|
|
311
|
+
}
|
|
312
|
+
return [
|
|
313
|
+
{
|
|
314
|
+
id: 1,
|
|
315
|
+
title: `Search Result for "${query}"`,
|
|
316
|
+
url: `https://demo.wordpress.com/search-result-1/`,
|
|
317
|
+
type: "post",
|
|
318
|
+
subtype: "post",
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
id: 2,
|
|
322
|
+
title: `Another result for "${query}"`,
|
|
323
|
+
url: `https://demo.wordpress.com/search-result-2/`,
|
|
324
|
+
type: "post",
|
|
325
|
+
subtype: "post",
|
|
326
|
+
},
|
|
327
|
+
];
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Mock deletePost
|
|
331
|
+
*/
|
|
332
|
+
async deletePost(id, force = false) {
|
|
333
|
+
return {
|
|
334
|
+
deleted: true,
|
|
335
|
+
previous: {
|
|
336
|
+
id,
|
|
337
|
+
date: "2024-01-15T10:00:00",
|
|
338
|
+
date_gmt: "2024-01-15T10:00:00",
|
|
339
|
+
guid: { rendered: `https://demo.wordpress.com/?p=${id}` },
|
|
340
|
+
modified: "2024-01-15T10:00:00",
|
|
341
|
+
modified_gmt: "2024-01-15T10:00:00",
|
|
342
|
+
slug: `deleted-post-${id}`,
|
|
343
|
+
status: "trash",
|
|
344
|
+
type: "post",
|
|
345
|
+
link: `https://demo.wordpress.com/deleted-post-${id}/`,
|
|
346
|
+
title: { rendered: `Deleted Post ${id}` },
|
|
347
|
+
content: { rendered: `<p>This post was deleted.</p>` },
|
|
348
|
+
excerpt: { rendered: `<p>This post was deleted.</p>` },
|
|
349
|
+
author: 1,
|
|
350
|
+
featured_media: 0,
|
|
351
|
+
comment_status: "open",
|
|
352
|
+
ping_status: "open",
|
|
353
|
+
sticky: false,
|
|
354
|
+
template: "",
|
|
355
|
+
format: "standard",
|
|
356
|
+
meta: [],
|
|
357
|
+
categories: [1],
|
|
358
|
+
tags: [],
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Override getSiteUrl to return mock URL
|
|
364
|
+
*/
|
|
365
|
+
getSiteUrl() {
|
|
366
|
+
return "https://demo.wordpress.com";
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=MockWordPressClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockWordPressClient.js","sourceRoot":"","sources":["../../src/client/MockWordPressClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAW3C;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAC9C,UAAU,GAAG,IAAI,CAAC;IAE1B,YAAY,MAA6B;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAwB;QACrC,MAAM,SAAS,GAAoB;YACjC;gBACE,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,EAAE,QAAQ,EAAE,iCAAiC,EAAE;gBACrD,QAAQ,EAAE,qBAAqB;gBAC/B,YAAY,EAAE,qBAAqB;gBACnC,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,yCAAyC;gBAC/C,KAAK,EAAE,EAAE,QAAQ,EAAE,yBAAyB,EAAE;gBAC9C,OAAO,EAAE,EAAE,QAAQ,EAAE,4CAA4C,EAAE;gBACnE,OAAO,EAAE,EAAE,QAAQ,EAAE,4CAA4C,EAAE;gBACnE,MAAM,EAAE,CAAC;gBACT,cAAc,EAAE,CAAC;gBACjB,cAAc,EAAE,MAAM;gBACtB,WAAW,EAAE,MAAM;gBACnB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,CAAC,CAAC,CAAC;gBACf,IAAI,EAAE,EAAE;aACT;YACD;gBACE,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,EAAE,QAAQ,EAAE,iCAAiC,EAAE;gBACrD,QAAQ,EAAE,qBAAqB;gBAC/B,YAAY,EAAE,qBAAqB;gBACnC,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,yCAAyC;gBAC/C,KAAK,EAAE,EAAE,QAAQ,EAAE,yBAAyB,EAAE;gBAC9C,OAAO,EAAE,EAAE,QAAQ,EAAE,uDAAuD,EAAE;gBAC9E,OAAO,EAAE,EAAE,QAAQ,EAAE,uDAAuD,EAAE;gBAC9E,MAAM,EAAE,CAAC;gBACT,cAAc,EAAE,CAAC;gBACjB,cAAc,EAAE,MAAM;gBACtB,WAAW,EAAE,MAAM;gBACnB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,CAAC,CAAC,CAAC;gBACf,IAAI,EAAE,CAAC,CAAC,CAAC;aACV;YACD;gBACE,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,EAAE,QAAQ,EAAE,iCAAiC,EAAE;gBACrD,QAAQ,EAAE,qBAAqB;gBAC/B,YAAY,EAAE,qBAAqB;gBACnC,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,yCAAyC;gBAC/C,KAAK,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE;gBACzC,OAAO,EAAE,EAAE,QAAQ,EAAE,0DAA0D,EAAE;gBACjF,OAAO,EAAE,EAAE,QAAQ,EAAE,0DAA0D,EAAE;gBACjF,MAAM,EAAE,CAAC;gBACT,cAAc,EAAE,CAAC;gBACjB,cAAc,EAAE,MAAM;gBACtB,WAAW,EAAE,MAAM;gBACnB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aACb;SACF,CAAC;QAEF,wCAAwC;QACxC,IAAI,aAAa,GAAG,SAAS,CAAC;QAC9B,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrB,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,qBAAqB;YAC/B,IAAI,EAAE,EAAE,QAAQ,EAAE,iCAAiC,EAAE,EAAE,EAAE;YACzD,QAAQ,EAAE,qBAAqB;YAC/B,YAAY,EAAE,qBAAqB;YACnC,IAAI,EAAE,aAAa,EAAE,EAAE;YACvB,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,wCAAwC,EAAE,GAAG;YACnD,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE;YACtC,OAAO,EAAE,EAAE,QAAQ,EAAE,oCAAoC,EAAE,OAAO,EAAE;YACpE,OAAO,EAAE,EAAE,QAAQ,EAAE,oCAAoC,EAAE,OAAO,EAAE;YACpE,MAAM,EAAE,CAAC;YACT,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,MAAM;YACtB,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,CAAC,CAAC,CAAC;YACf,IAAI,EAAE,EAAE;SACT,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,CAAC;YACL,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,cAAc;YACxB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,kBAAkB;YACzB,GAAG,EAAE,4BAA4B;YACjC,WAAW,EAAE,0BAA0B;YACvC,IAAI,EAAE,iDAAiD;YACvD,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,SAAS;YACnB,eAAe,EAAE,2BAA2B;YAC5C,KAAK,EAAE,CAAC,eAAe,CAAC;YACxB,YAAY,EAAE;gBACZ,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,mBAAmB,EAAE,IAAI;gBACzB,mBAAmB,EAAE,IAAI;gBACzB,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;gBAClB,oBAAoB,EAAE,IAAI;gBAC1B,oBAAoB,EAAE,IAAI;gBAC1B,sBAAsB,EAAE,IAAI;gBAC5B,sBAAsB,EAAE,IAAI;gBAC5B,cAAc,EAAE,IAAI;gBACpB,iBAAiB,EAAE,IAAI;gBACvB,iBAAiB,EAAE,IAAI;gBACvB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,IAAI;gBACxB,kBAAkB,EAAE,IAAI;gBACxB,oBAAoB,EAAE,IAAI;gBAC1B,oBAAoB,EAAE,IAAI;gBAC1B,kBAAkB,EAAE,IAAI;gBACxB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI;gBAChB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,IAAI;gBACpB,iBAAiB,EAAE,IAAI;gBACvB,aAAa,EAAE,IAAI;gBACnB,aAAa,EAAE,IAAI;gBACnB,aAAa,EAAE,IAAI;gBACnB,kBAAkB,EAAE,IAAI;gBACxB,kBAAkB,EAAE,IAAI;gBACxB,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;aAClB;YACD,kBAAkB,EAAE;gBAClB,aAAa,EAAE,IAAI;aACpB;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,0DAA0D;gBAChE,IAAI,EAAE,0DAA0D;gBAChE,IAAI,EAAE,0DAA0D;aACjE;YACD,IAAI,EAAE,EAAE;SACT,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,YAAY,GAA0B;YAC1C,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,qCAAqC;YAClD,GAAG,EAAE,4BAA4B;YACjC,KAAK,EAAE,0BAA0B;YACjC,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,QAAQ;YACrB,WAAW,EAAE,OAAO;YACpB,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,CAAC;YACnB,mBAAmB,EAAE,GAAG;YACxB,cAAc,EAAE,EAAE;YAClB,mBAAmB,EAAE,MAAM;YAC3B,sBAAsB,EAAE,MAAM;SAC/B,CAAC;QAEF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAuB;QACtC,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG;YAC1C,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAClC,IAAI,EAAE,EAAE,QAAQ,EAAE,iCAAiC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,EAAE;YAC7F,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAClC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,UAAU;YAClE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;YAChC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,8BAA8B,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,UAAU,GAAG;YACnG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE;YAC7C,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,yBAAyB,EAAE;YAChE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,yBAAyB,EAAE;YAChE,MAAM,EAAE,CAAC;YACT,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,MAAM;YACtB,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,CAAC,CAAC,CAAC;YACf,IAAI,EAAE,EAAE;SACT,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAuB;QACtC,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,qBAAqB;YAC/B,IAAI,EAAE,EAAE,QAAQ,EAAE,iCAAiC,IAAI,CAAC,EAAE,EAAE,EAAE;YAC9D,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAClC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,EAAE;YACzE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;YAChC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,8BAA8B,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,EAAE,GAAG;YAC1G,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,IAAI,gBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE;YAC5D,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,wBAAwB,EAAE;YAC/D,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,wBAAwB,EAAE;YAC/D,MAAM,EAAE,CAAC;YACT,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,MAAM;YACtB,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,CAAC,CAAC,CAAC;YACf,IAAI,EAAE,EAAE;SACT,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,KAAgB,EAAE,OAAgB;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL;gBACE,EAAE,EAAE,CAAC;gBACL,KAAK,EAAE,sBAAsB,KAAK,GAAG;gBACrC,GAAG,EAAE,6CAA6C;gBAClD,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;aAChB;YACD;gBACE,EAAE,EAAE,CAAC;gBACL,KAAK,EAAE,uBAAuB,KAAK,GAAG;gBACtC,GAAG,EAAE,6CAA6C;gBAClD,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;aAChB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,KAAK,GAAG,KAAK;QACxC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE;gBACR,EAAE;gBACF,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,EAAE,QAAQ,EAAE,iCAAiC,EAAE,EAAE,EAAE;gBACzD,QAAQ,EAAE,qBAAqB;gBAC/B,YAAY,EAAE,qBAAqB;gBACnC,IAAI,EAAE,gBAAgB,EAAE,EAAE;gBAC1B,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,2CAA2C,EAAE,GAAG;gBACtD,KAAK,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAAE;gBACzC,OAAO,EAAE,EAAE,QAAQ,EAAE,+BAA+B,EAAE;gBACtD,OAAO,EAAE,EAAE,QAAQ,EAAE,+BAA+B,EAAE;gBACtD,MAAM,EAAE,CAAC;gBACT,cAAc,EAAE,CAAC;gBACjB,cAAc,EAAE,MAAM;gBACtB,WAAW,EAAE,MAAM;gBACnB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,CAAC,CAAC,CAAC;gBACf,IAAI,EAAE,EAAE;aACT;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,4BAA4B,CAAC;IACtC,CAAC;CACF"}
|
package/dist/client/api.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare class WordPressClient implements IWordPressClient {
|
|
|
20
20
|
get config(): WordPressClientConfig;
|
|
21
21
|
get isAuthenticated(): boolean;
|
|
22
22
|
get stats(): ClientStats;
|
|
23
|
+
getSiteUrl(): string;
|
|
23
24
|
private getAuthFromEnv;
|
|
24
25
|
private validateConfig;
|
|
25
26
|
initialize(): Promise<void>;
|
package/dist/client/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EAGrB,UAAU,EACV,cAAc,EACd,WAAW,EACZ,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"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"}
|
package/dist/client/api.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import FormData from "form-data";
|
|
7
7
|
import * as fs from "fs";
|
|
8
8
|
import * as path from "path";
|
|
9
|
-
import { WordPressAPIError, AuthenticationError, RateLimitError
|
|
9
|
+
import { WordPressAPIError, AuthenticationError, RateLimitError } from "../types/client.js";
|
|
10
10
|
import { debug, logError, startTimer } from "../utils/debug.js";
|
|
11
11
|
export class WordPressClient {
|
|
12
12
|
baseUrl;
|
|
@@ -23,10 +23,8 @@ export class WordPressClient {
|
|
|
23
23
|
constructor(options = {}) {
|
|
24
24
|
this.baseUrl = options.baseUrl || process.env.WORDPRESS_SITE_URL || "";
|
|
25
25
|
this.apiUrl = "";
|
|
26
|
-
this.timeout =
|
|
27
|
-
|
|
28
|
-
this.maxRetries =
|
|
29
|
-
options.maxRetries || parseInt(process.env.WORDPRESS_MAX_RETRIES || "3");
|
|
26
|
+
this.timeout = options.timeout || parseInt(process.env.WORDPRESS_TIMEOUT || "30000");
|
|
27
|
+
this.maxRetries = options.maxRetries || parseInt(process.env.WORDPRESS_MAX_RETRIES || "3");
|
|
30
28
|
// Authentication configuration
|
|
31
29
|
this.auth = options.auth || this.getAuthFromEnv();
|
|
32
30
|
// Rate limiting
|
|
@@ -57,12 +55,13 @@ export class WordPressClient {
|
|
|
57
55
|
get stats() {
|
|
58
56
|
return { ...this._stats };
|
|
59
57
|
}
|
|
58
|
+
getSiteUrl() {
|
|
59
|
+
return this.baseUrl;
|
|
60
|
+
}
|
|
60
61
|
getAuthFromEnv() {
|
|
61
62
|
const authMethod = process.env.WORDPRESS_AUTH_METHOD;
|
|
62
63
|
// Use explicit auth method if set
|
|
63
|
-
if (authMethod === "app-password" &&
|
|
64
|
-
process.env.WORDPRESS_USERNAME &&
|
|
65
|
-
process.env.WORDPRESS_APP_PASSWORD) {
|
|
64
|
+
if (authMethod === "app-password" && process.env.WORDPRESS_USERNAME && process.env.WORDPRESS_APP_PASSWORD) {
|
|
66
65
|
return {
|
|
67
66
|
method: "app-password",
|
|
68
67
|
username: process.env.WORDPRESS_USERNAME,
|
|
@@ -78,9 +77,7 @@ export class WordPressClient {
|
|
|
78
77
|
};
|
|
79
78
|
}
|
|
80
79
|
// Try JWT
|
|
81
|
-
if (process.env.WORDPRESS_JWT_SECRET &&
|
|
82
|
-
process.env.WORDPRESS_USERNAME &&
|
|
83
|
-
process.env.WORDPRESS_PASSWORD) {
|
|
80
|
+
if (process.env.WORDPRESS_JWT_SECRET && process.env.WORDPRESS_USERNAME && process.env.WORDPRESS_PASSWORD) {
|
|
84
81
|
return {
|
|
85
82
|
method: "jwt",
|
|
86
83
|
secret: process.env.WORDPRESS_JWT_SECRET,
|
|
@@ -106,9 +103,7 @@ export class WordPressClient {
|
|
|
106
103
|
return {
|
|
107
104
|
method: "basic",
|
|
108
105
|
username: process.env.WORDPRESS_USERNAME || "",
|
|
109
|
-
password: process.env.WORDPRESS_PASSWORD ||
|
|
110
|
-
process.env.WORDPRESS_APP_PASSWORD ||
|
|
111
|
-
"",
|
|
106
|
+
password: process.env.WORDPRESS_PASSWORD || process.env.WORDPRESS_APP_PASSWORD || "",
|
|
112
107
|
};
|
|
113
108
|
}
|
|
114
109
|
validateConfig() {
|
|
@@ -210,10 +205,7 @@ export class WordPressClient {
|
|
|
210
205
|
* Authenticate using Basic/Application Password
|
|
211
206
|
*/
|
|
212
207
|
async authenticateWithBasic() {
|
|
213
|
-
const hasCredentials = this.auth.username &&
|
|
214
|
-
(this.auth.method === "app-password"
|
|
215
|
-
? this.auth.appPassword
|
|
216
|
-
: this.auth.password);
|
|
208
|
+
const hasCredentials = this.auth.username && (this.auth.method === "app-password" ? this.auth.appPassword : this.auth.password);
|
|
217
209
|
if (!hasCredentials) {
|
|
218
210
|
const methodName = this.auth.method === "app-password" ? "Application Password" : "Basic";
|
|
219
211
|
const passwordField = this.auth.method === "app-password" ? "app password" : "password";
|
|
@@ -280,9 +272,7 @@ export class WordPressClient {
|
|
|
280
272
|
this._stats.totalRequests++;
|
|
281
273
|
// Handle endpoint properly - remove leading slash if present to avoid double slashes
|
|
282
274
|
const cleanEndpoint = endpoint.replace(/^\/+/, "");
|
|
283
|
-
const url = endpoint.startsWith("http")
|
|
284
|
-
? endpoint
|
|
285
|
-
: `${this.apiUrl}/${cleanEndpoint}`;
|
|
275
|
+
const url = endpoint.startsWith("http") ? endpoint : `${this.apiUrl}/${cleanEndpoint}`;
|
|
286
276
|
const headers = {
|
|
287
277
|
"Content-Type": "application/json",
|
|
288
278
|
"User-Agent": "MCP-WordPress/1.0.0",
|
|
@@ -302,8 +292,7 @@ export class WordPressClient {
|
|
|
302
292
|
};
|
|
303
293
|
// Add body for POST/PUT/PATCH requests
|
|
304
294
|
if (data && ["POST", "PUT", "PATCH"].includes(method)) {
|
|
305
|
-
if (data instanceof FormData ||
|
|
306
|
-
(data && typeof data.append === "function")) {
|
|
295
|
+
if (data instanceof FormData || (data && typeof data.append === "function")) {
|
|
307
296
|
// For FormData, check if it has getHeaders method (form-data package)
|
|
308
297
|
if (data && typeof data.getHeaders === "function") {
|
|
309
298
|
// Use headers from form-data package
|
|
@@ -341,12 +330,10 @@ export class WordPressClient {
|
|
|
341
330
|
let errorMessage;
|
|
342
331
|
try {
|
|
343
332
|
const errorData = JSON.parse(errorText);
|
|
344
|
-
errorMessage =
|
|
345
|
-
errorData.message || errorData.error || `HTTP ${response.status}`;
|
|
333
|
+
errorMessage = errorData.message || errorData.error || `HTTP ${response.status}`;
|
|
346
334
|
}
|
|
347
335
|
catch {
|
|
348
|
-
errorMessage =
|
|
349
|
-
errorText || `HTTP ${response.status}: ${response.statusText}`;
|
|
336
|
+
errorMessage = errorText || `HTTP ${response.status}: ${response.statusText}`;
|
|
350
337
|
}
|
|
351
338
|
// Handle rate limiting
|
|
352
339
|
if (response.status === 429) {
|
|
@@ -354,17 +341,14 @@ export class WordPressClient {
|
|
|
354
341
|
throw new RateLimitError(errorMessage, Date.now() + 60000);
|
|
355
342
|
}
|
|
356
343
|
// Handle permission errors specifically for uploads
|
|
357
|
-
if (response.status === 403 &&
|
|
358
|
-
endpoint.includes("media") &&
|
|
359
|
-
method === "POST") {
|
|
344
|
+
if (response.status === 403 && endpoint.includes("media") && method === "POST") {
|
|
360
345
|
throw new AuthenticationError("Media upload blocked: WordPress REST API media uploads appear to be disabled or restricted by a plugin/security policy. " +
|
|
361
346
|
`Error: ${errorMessage}. ` +
|
|
362
347
|
"Common causes: W3 Total Cache, security plugins, or custom REST API restrictions. " +
|
|
363
348
|
"Please check WordPress admin settings or contact your system administrator.", this.auth.method);
|
|
364
349
|
}
|
|
365
350
|
// Handle general upload permission errors
|
|
366
|
-
if (errorMessage.includes("Beiträge zu erstellen") &&
|
|
367
|
-
endpoint.includes("media")) {
|
|
351
|
+
if (errorMessage.includes("Beiträge zu erstellen") && endpoint.includes("media")) {
|
|
368
352
|
throw new AuthenticationError(`WordPress REST API media upload restriction detected: ${errorMessage}. ` +
|
|
369
353
|
"This typically indicates that media uploads via REST API are disabled by WordPress configuration, " +
|
|
370
354
|
"a security plugin (like W3 Total Cache, Borlabs Cookie), or server policy. " +
|
|
@@ -406,8 +390,7 @@ export class WordPressClient {
|
|
|
406
390
|
lastError = new Error(`Request timeout after ${requestTimeout}ms`);
|
|
407
391
|
}
|
|
408
392
|
// Handle network errors
|
|
409
|
-
if (lastError.message.includes("socket hang up") ||
|
|
410
|
-
lastError.message.includes("ECONNRESET")) {
|
|
393
|
+
if (lastError.message.includes("socket hang up") || lastError.message.includes("ECONNRESET")) {
|
|
411
394
|
lastError = new Error(`Network connection lost during upload: ${lastError.message}`);
|
|
412
395
|
}
|
|
413
396
|
debug.log(`Request failed (attempt ${attempt + 1}): ${lastError.message}`);
|
|
@@ -430,8 +413,7 @@ export class WordPressClient {
|
|
|
430
413
|
updateAverageResponseTime(duration) {
|
|
431
414
|
const totalSuccessful = this._stats.successfulRequests;
|
|
432
415
|
this._stats.averageResponseTime =
|
|
433
|
-
(this._stats.averageResponseTime * (totalSuccessful - 1) + duration) /
|
|
434
|
-
totalSuccessful;
|
|
416
|
+
(this._stats.averageResponseTime * (totalSuccessful - 1) + duration) / totalSuccessful;
|
|
435
417
|
this._stats.lastRequestTime = Date.now();
|
|
436
418
|
}
|
|
437
419
|
// HTTP method helpers
|
|
@@ -453,9 +435,7 @@ export class WordPressClient {
|
|
|
453
435
|
// WordPress API Methods
|
|
454
436
|
// Posts
|
|
455
437
|
async getPosts(params) {
|
|
456
|
-
const queryString = params
|
|
457
|
-
? "?" + new URLSearchParams(params).toString()
|
|
458
|
-
: "";
|
|
438
|
+
const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
|
|
459
439
|
return this.get(`posts${queryString}`);
|
|
460
440
|
}
|
|
461
441
|
async getPost(id, context = "view") {
|
|
@@ -476,9 +456,7 @@ export class WordPressClient {
|
|
|
476
456
|
}
|
|
477
457
|
// Pages
|
|
478
458
|
async getPages(params) {
|
|
479
|
-
const queryString = params
|
|
480
|
-
? "?" + new URLSearchParams(params).toString()
|
|
481
|
-
: "";
|
|
459
|
+
const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
|
|
482
460
|
return this.get(`pages${queryString}`);
|
|
483
461
|
}
|
|
484
462
|
async getPage(id, context = "view") {
|
|
@@ -499,9 +477,7 @@ export class WordPressClient {
|
|
|
499
477
|
}
|
|
500
478
|
// Media
|
|
501
479
|
async getMedia(params) {
|
|
502
|
-
const queryString = params
|
|
503
|
-
? "?" + new URLSearchParams(params).toString()
|
|
504
|
-
: "";
|
|
480
|
+
const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
|
|
505
481
|
return this.get(`media${queryString}`);
|
|
506
482
|
}
|
|
507
483
|
async getMediaItem(id, context = "view") {
|
|
@@ -562,9 +538,7 @@ export class WordPressClient {
|
|
|
562
538
|
}
|
|
563
539
|
// Users
|
|
564
540
|
async getUsers(params) {
|
|
565
|
-
const queryString = params
|
|
566
|
-
? "?" + new URLSearchParams(params).toString()
|
|
567
|
-
: "";
|
|
541
|
+
const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
|
|
568
542
|
return this.get(`users${queryString}`);
|
|
569
543
|
}
|
|
570
544
|
async getUser(id, context = "view") {
|
|
@@ -578,9 +552,7 @@ export class WordPressClient {
|
|
|
578
552
|
return this.put(`users/${id}`, updateData);
|
|
579
553
|
}
|
|
580
554
|
async deleteUser(id, reassign) {
|
|
581
|
-
const params = reassign
|
|
582
|
-
? `?reassign=${reassign}&force=true`
|
|
583
|
-
: "?force=true";
|
|
555
|
+
const params = reassign ? `?reassign=${reassign}&force=true` : "?force=true";
|
|
584
556
|
return this.delete(`users/${id}${params}`);
|
|
585
557
|
}
|
|
586
558
|
async getCurrentUser() {
|
|
@@ -588,9 +560,7 @@ export class WordPressClient {
|
|
|
588
560
|
}
|
|
589
561
|
// Comments
|
|
590
562
|
async getComments(params) {
|
|
591
|
-
const queryString = params
|
|
592
|
-
? "?" + new URLSearchParams(params).toString()
|
|
593
|
-
: "";
|
|
563
|
+
const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
|
|
594
564
|
return this.get(`comments${queryString}`);
|
|
595
565
|
}
|
|
596
566
|
async getComment(id, context = "view") {
|
|
@@ -619,9 +589,7 @@ export class WordPressClient {
|
|
|
619
589
|
}
|
|
620
590
|
// Taxonomies
|
|
621
591
|
async getCategories(params) {
|
|
622
|
-
const queryString = params
|
|
623
|
-
? "?" + new URLSearchParams(params).toString()
|
|
624
|
-
: "";
|
|
592
|
+
const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
|
|
625
593
|
return this.get(`categories${queryString}`);
|
|
626
594
|
}
|
|
627
595
|
async getCategory(id) {
|
|
@@ -638,9 +606,7 @@ export class WordPressClient {
|
|
|
638
606
|
return this.delete(`categories/${id}?force=${force}`);
|
|
639
607
|
}
|
|
640
608
|
async getTags(params) {
|
|
641
|
-
const queryString = params
|
|
642
|
-
? "?" + new URLSearchParams(params).toString()
|
|
643
|
-
: "";
|
|
609
|
+
const queryString = params ? "?" + new URLSearchParams(params).toString() : "";
|
|
644
610
|
return this.get(`tags${queryString}`);
|
|
645
611
|
}
|
|
646
612
|
async getTag(id) {
|