mcp-wordpress 2.5.1 → 2.5.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 (289) hide show
  1. package/package.json +1 -1
  2. package/dist/src/cache/CacheInvalidation.d.ts +0 -120
  3. package/dist/src/cache/CacheInvalidation.d.ts.map +0 -1
  4. package/dist/src/cache/CacheInvalidation.js +0 -355
  5. package/dist/src/cache/CacheInvalidation.js.map +0 -1
  6. package/dist/src/cache/CacheManager.d.ts +0 -149
  7. package/dist/src/cache/CacheManager.d.ts.map +0 -1
  8. package/dist/src/cache/CacheManager.js +0 -326
  9. package/dist/src/cache/CacheManager.js.map +0 -1
  10. package/dist/src/cache/HttpCacheWrapper.d.ts +0 -122
  11. package/dist/src/cache/HttpCacheWrapper.d.ts.map +0 -1
  12. package/dist/src/cache/HttpCacheWrapper.js +0 -283
  13. package/dist/src/cache/HttpCacheWrapper.js.map +0 -1
  14. package/dist/src/cache/index.d.ts +0 -12
  15. package/dist/src/cache/index.d.ts.map +0 -1
  16. package/dist/src/cache/index.js +0 -9
  17. package/dist/src/cache/index.js.map +0 -1
  18. package/dist/src/client/CachedWordPressClient.d.ts +0 -174
  19. package/dist/src/client/CachedWordPressClient.d.ts.map +0 -1
  20. package/dist/src/client/CachedWordPressClient.js +0 -345
  21. package/dist/src/client/CachedWordPressClient.js.map +0 -1
  22. package/dist/src/client/MockWordPressClient.d.ts +0 -56
  23. package/dist/src/client/MockWordPressClient.d.ts.map +0 -1
  24. package/dist/src/client/MockWordPressClient.js +0 -371
  25. package/dist/src/client/MockWordPressClient.js.map +0 -1
  26. package/dist/src/client/api.d.ts +0 -235
  27. package/dist/src/client/api.d.ts.map +0 -1
  28. package/dist/src/client/api.js +0 -896
  29. package/dist/src/client/api.js.map +0 -1
  30. package/dist/src/client/auth.d.ts +0 -121
  31. package/dist/src/client/auth.d.ts.map +0 -1
  32. package/dist/src/client/auth.js +0 -429
  33. package/dist/src/client/auth.js.map +0 -1
  34. package/dist/src/client/managers/AuthenticationManager.d.ts +0 -92
  35. package/dist/src/client/managers/AuthenticationManager.d.ts.map +0 -1
  36. package/dist/src/client/managers/AuthenticationManager.js +0 -369
  37. package/dist/src/client/managers/AuthenticationManager.js.map +0 -1
  38. package/dist/src/client/managers/BaseManager.d.ts +0 -22
  39. package/dist/src/client/managers/BaseManager.d.ts.map +0 -1
  40. package/dist/src/client/managers/BaseManager.js +0 -53
  41. package/dist/src/client/managers/BaseManager.js.map +0 -1
  42. package/dist/src/client/managers/RequestManager.d.ts +0 -47
  43. package/dist/src/client/managers/RequestManager.d.ts.map +0 -1
  44. package/dist/src/client/managers/RequestManager.js +0 -193
  45. package/dist/src/client/managers/RequestManager.js.map +0 -1
  46. package/dist/src/client/managers/index.d.ts +0 -8
  47. package/dist/src/client/managers/index.d.ts.map +0 -1
  48. package/dist/src/client/managers/index.js +0 -8
  49. package/dist/src/client/managers/index.js.map +0 -1
  50. package/dist/src/config/Config.d.ts +0 -155
  51. package/dist/src/config/Config.d.ts.map +0 -1
  52. package/dist/src/config/Config.js +0 -215
  53. package/dist/src/config/Config.js.map +0 -1
  54. package/dist/src/config/ConfigurationSchema.d.ts +0 -281
  55. package/dist/src/config/ConfigurationSchema.d.ts.map +0 -1
  56. package/dist/src/config/ConfigurationSchema.js +0 -205
  57. package/dist/src/config/ConfigurationSchema.js.map +0 -1
  58. package/dist/src/config/ServerConfiguration.d.ts +0 -47
  59. package/dist/src/config/ServerConfiguration.d.ts.map +0 -1
  60. package/dist/src/config/ServerConfiguration.js +0 -255
  61. package/dist/src/config/ServerConfiguration.js.map +0 -1
  62. package/dist/src/docs/DocumentationGenerator.d.ts +0 -185
  63. package/dist/src/docs/DocumentationGenerator.d.ts.map +0 -1
  64. package/dist/src/docs/DocumentationGenerator.js +0 -777
  65. package/dist/src/docs/DocumentationGenerator.js.map +0 -1
  66. package/dist/src/docs/MarkdownFormatter.d.ts +0 -84
  67. package/dist/src/docs/MarkdownFormatter.d.ts.map +0 -1
  68. package/dist/src/docs/MarkdownFormatter.js +0 -458
  69. package/dist/src/docs/MarkdownFormatter.js.map +0 -1
  70. package/dist/src/docs/index.d.ts +0 -8
  71. package/dist/src/docs/index.d.ts.map +0 -1
  72. package/dist/src/docs/index.js +0 -7
  73. package/dist/src/docs/index.js.map +0 -1
  74. package/dist/src/dxt-entry.d.ts +0 -6
  75. package/dist/src/dxt-entry.d.ts.map +0 -1
  76. package/dist/src/dxt-entry.js +0 -39
  77. package/dist/src/dxt-entry.js.map +0 -1
  78. package/dist/src/index.d.ts +0 -18
  79. package/dist/src/index.d.ts.map +0 -1
  80. package/dist/src/index.js +0 -143
  81. package/dist/src/index.js.map +0 -1
  82. package/dist/src/performance/MetricsCollector.d.ts +0 -145
  83. package/dist/src/performance/MetricsCollector.d.ts.map +0 -1
  84. package/dist/src/performance/MetricsCollector.js +0 -368
  85. package/dist/src/performance/MetricsCollector.js.map +0 -1
  86. package/dist/src/performance/PerformanceAnalytics.d.ts +0 -168
  87. package/dist/src/performance/PerformanceAnalytics.d.ts.map +0 -1
  88. package/dist/src/performance/PerformanceAnalytics.js +0 -570
  89. package/dist/src/performance/PerformanceAnalytics.js.map +0 -1
  90. package/dist/src/performance/PerformanceMonitor.d.ts +0 -203
  91. package/dist/src/performance/PerformanceMonitor.d.ts.map +0 -1
  92. package/dist/src/performance/PerformanceMonitor.js +0 -478
  93. package/dist/src/performance/PerformanceMonitor.js.map +0 -1
  94. package/dist/src/performance/index.d.ts +0 -11
  95. package/dist/src/performance/index.d.ts.map +0 -1
  96. package/dist/src/performance/index.js +0 -8
  97. package/dist/src/performance/index.js.map +0 -1
  98. package/dist/src/security/AISecurityScanner.d.ts +0 -176
  99. package/dist/src/security/AISecurityScanner.d.ts.map +0 -1
  100. package/dist/src/security/AISecurityScanner.js +0 -655
  101. package/dist/src/security/AISecurityScanner.js.map +0 -1
  102. package/dist/src/security/AutomatedRemediation.d.ts +0 -146
  103. package/dist/src/security/AutomatedRemediation.d.ts.map +0 -1
  104. package/dist/src/security/AutomatedRemediation.js +0 -566
  105. package/dist/src/security/AutomatedRemediation.js.map +0 -1
  106. package/dist/src/security/InputValidator.d.ts +0 -219
  107. package/dist/src/security/InputValidator.d.ts.map +0 -1
  108. package/dist/src/security/InputValidator.js +0 -295
  109. package/dist/src/security/InputValidator.js.map +0 -1
  110. package/dist/src/security/SecurityCIPipeline.d.ts +0 -213
  111. package/dist/src/security/SecurityCIPipeline.d.ts.map +0 -1
  112. package/dist/src/security/SecurityCIPipeline.js +0 -693
  113. package/dist/src/security/SecurityCIPipeline.js.map +0 -1
  114. package/dist/src/security/SecurityConfig.d.ts +0 -129
  115. package/dist/src/security/SecurityConfig.d.ts.map +0 -1
  116. package/dist/src/security/SecurityConfig.js +0 -266
  117. package/dist/src/security/SecurityConfig.js.map +0 -1
  118. package/dist/src/security/SecurityConfigManager.d.ts +0 -294
  119. package/dist/src/security/SecurityConfigManager.d.ts.map +0 -1
  120. package/dist/src/security/SecurityConfigManager.js +0 -558
  121. package/dist/src/security/SecurityConfigManager.js.map +0 -1
  122. package/dist/src/security/SecurityMonitoring.d.ts +0 -245
  123. package/dist/src/security/SecurityMonitoring.d.ts.map +0 -1
  124. package/dist/src/security/SecurityMonitoring.js +0 -598
  125. package/dist/src/security/SecurityMonitoring.js.map +0 -1
  126. package/dist/src/security/SecurityReviewer.d.ts +0 -168
  127. package/dist/src/security/SecurityReviewer.d.ts.map +0 -1
  128. package/dist/src/security/SecurityReviewer.js +0 -686
  129. package/dist/src/security/SecurityReviewer.js.map +0 -1
  130. package/dist/src/security/index.d.ts +0 -183
  131. package/dist/src/security/index.d.ts.map +0 -1
  132. package/dist/src/security/index.js +0 -218
  133. package/dist/src/security/index.js.map +0 -1
  134. package/dist/src/server/ConnectionTester.d.ts +0 -32
  135. package/dist/src/server/ConnectionTester.d.ts.map +0 -1
  136. package/dist/src/server/ConnectionTester.js +0 -135
  137. package/dist/src/server/ConnectionTester.js.map +0 -1
  138. package/dist/src/server/ToolRegistry.d.ts +0 -50
  139. package/dist/src/server/ToolRegistry.d.ts.map +0 -1
  140. package/dist/src/server/ToolRegistry.js +0 -219
  141. package/dist/src/server/ToolRegistry.js.map +0 -1
  142. package/dist/src/server.d.ts +0 -7
  143. package/dist/src/server.d.ts.map +0 -1
  144. package/dist/src/server.js +0 -7
  145. package/dist/src/server.js.map +0 -1
  146. package/dist/src/tools/BaseToolManager.d.ts +0 -62
  147. package/dist/src/tools/BaseToolManager.d.ts.map +0 -1
  148. package/dist/src/tools/BaseToolManager.js +0 -195
  149. package/dist/src/tools/BaseToolManager.js.map +0 -1
  150. package/dist/src/tools/auth.d.ts +0 -50
  151. package/dist/src/tools/auth.d.ts.map +0 -1
  152. package/dist/src/tools/auth.js +0 -133
  153. package/dist/src/tools/auth.js.map +0 -1
  154. package/dist/src/tools/cache.d.ts +0 -260
  155. package/dist/src/tools/cache.d.ts.map +0 -1
  156. package/dist/src/tools/cache.js +0 -232
  157. package/dist/src/tools/cache.js.map +0 -1
  158. package/dist/src/tools/comments.d.ts +0 -33
  159. package/dist/src/tools/comments.d.ts.map +0 -1
  160. package/dist/src/tools/comments.js +0 -235
  161. package/dist/src/tools/comments.js.map +0 -1
  162. package/dist/src/tools/index.d.ts +0 -11
  163. package/dist/src/tools/index.d.ts.map +0 -1
  164. package/dist/src/tools/index.js +0 -11
  165. package/dist/src/tools/index.js.map +0 -1
  166. package/dist/src/tools/media.d.ts +0 -70
  167. package/dist/src/tools/media.d.ts.map +0 -1
  168. package/dist/src/tools/media.js +0 -248
  169. package/dist/src/tools/media.js.map +0 -1
  170. package/dist/src/tools/pages.d.ts +0 -32
  171. package/dist/src/tools/pages.d.ts.map +0 -1
  172. package/dist/src/tools/pages.js +0 -215
  173. package/dist/src/tools/pages.js.map +0 -1
  174. package/dist/src/tools/performance.d.ts +0 -73
  175. package/dist/src/tools/performance.d.ts.map +0 -1
  176. package/dist/src/tools/performance.js +0 -922
  177. package/dist/src/tools/performance.js.map +0 -1
  178. package/dist/src/tools/posts/PostHandlers.d.ts +0 -46
  179. package/dist/src/tools/posts/PostHandlers.d.ts.map +0 -1
  180. package/dist/src/tools/posts/PostHandlers.js +0 -400
  181. package/dist/src/tools/posts/PostHandlers.js.map +0 -1
  182. package/dist/src/tools/posts/PostToolDefinitions.d.ts +0 -37
  183. package/dist/src/tools/posts/PostToolDefinitions.d.ts.map +0 -1
  184. package/dist/src/tools/posts/PostToolDefinitions.js +0 -236
  185. package/dist/src/tools/posts/PostToolDefinitions.js.map +0 -1
  186. package/dist/src/tools/posts/index.d.ts +0 -138
  187. package/dist/src/tools/posts/index.d.ts.map +0 -1
  188. package/dist/src/tools/posts/index.js +0 -163
  189. package/dist/src/tools/posts/index.js.map +0 -1
  190. package/dist/src/tools/posts.d.ts +0 -15
  191. package/dist/src/tools/posts.d.ts.map +0 -1
  192. package/dist/src/tools/posts.js +0 -16
  193. package/dist/src/tools/posts.js.map +0 -1
  194. package/dist/src/tools/site.d.ts +0 -32
  195. package/dist/src/tools/site.d.ts.map +0 -1
  196. package/dist/src/tools/site.js +0 -234
  197. package/dist/src/tools/site.js.map +0 -1
  198. package/dist/src/tools/taxonomies.d.ts +0 -36
  199. package/dist/src/tools/taxonomies.d.ts.map +0 -1
  200. package/dist/src/tools/taxonomies.js +0 -286
  201. package/dist/src/tools/taxonomies.js.map +0 -1
  202. package/dist/src/tools/users.d.ts +0 -33
  203. package/dist/src/tools/users.d.ts.map +0 -1
  204. package/dist/src/tools/users.js +0 -308
  205. package/dist/src/tools/users.js.map +0 -1
  206. package/dist/src/types/client.d.ts +0 -223
  207. package/dist/src/types/client.d.ts.map +0 -1
  208. package/dist/src/types/client.js +0 -97
  209. package/dist/src/types/client.js.map +0 -1
  210. package/dist/src/types/enhanced.d.ts +0 -237
  211. package/dist/src/types/enhanced.d.ts.map +0 -1
  212. package/dist/src/types/enhanced.js +0 -49
  213. package/dist/src/types/enhanced.js.map +0 -1
  214. package/dist/src/types/index.d.ts +0 -160
  215. package/dist/src/types/index.d.ts.map +0 -1
  216. package/dist/src/types/index.js +0 -14
  217. package/dist/src/types/index.js.map +0 -1
  218. package/dist/src/types/mcp.d.ts +0 -178
  219. package/dist/src/types/mcp.d.ts.map +0 -1
  220. package/dist/src/types/mcp.js +0 -7
  221. package/dist/src/types/mcp.js.map +0 -1
  222. package/dist/src/types/requests.d.ts +0 -322
  223. package/dist/src/types/requests.d.ts.map +0 -1
  224. package/dist/src/types/requests.js +0 -8
  225. package/dist/src/types/requests.js.map +0 -1
  226. package/dist/src/types/tools.d.ts +0 -506
  227. package/dist/src/types/tools.d.ts.map +0 -1
  228. package/dist/src/types/tools.js +0 -8
  229. package/dist/src/types/tools.js.map +0 -1
  230. package/dist/src/types/wordpress.d.ts +0 -471
  231. package/dist/src/types/wordpress.d.ts.map +0 -1
  232. package/dist/src/types/wordpress.js +0 -14
  233. package/dist/src/types/wordpress.js.map +0 -1
  234. package/dist/src/utils/debug.d.ts +0 -71
  235. package/dist/src/utils/debug.d.ts.map +0 -1
  236. package/dist/src/utils/debug.js +0 -235
  237. package/dist/src/utils/debug.js.map +0 -1
  238. package/dist/src/utils/enhancedError.d.ts +0 -61
  239. package/dist/src/utils/enhancedError.d.ts.map +0 -1
  240. package/dist/src/utils/enhancedError.js +0 -221
  241. package/dist/src/utils/enhancedError.js.map +0 -1
  242. package/dist/src/utils/error.d.ts +0 -17
  243. package/dist/src/utils/error.d.ts.map +0 -1
  244. package/dist/src/utils/error.js +0 -108
  245. package/dist/src/utils/error.js.map +0 -1
  246. package/dist/src/utils/logger.d.ts +0 -106
  247. package/dist/src/utils/logger.d.ts.map +0 -1
  248. package/dist/src/utils/logger.js +0 -280
  249. package/dist/src/utils/logger.js.map +0 -1
  250. package/dist/src/utils/streaming.d.ts +0 -104
  251. package/dist/src/utils/streaming.d.ts.map +0 -1
  252. package/dist/src/utils/streaming.js +0 -331
  253. package/dist/src/utils/streaming.js.map +0 -1
  254. package/dist/src/utils/toolWrapper.d.ts +0 -42
  255. package/dist/src/utils/toolWrapper.d.ts.map +0 -1
  256. package/dist/src/utils/toolWrapper.js +0 -101
  257. package/dist/src/utils/toolWrapper.js.map +0 -1
  258. package/dist/src/utils/validation/core.d.ts +0 -21
  259. package/dist/src/utils/validation/core.d.ts.map +0 -1
  260. package/dist/src/utils/validation/core.js +0 -71
  261. package/dist/src/utils/validation/core.js.map +0 -1
  262. package/dist/src/utils/validation/index.d.ts +0 -25
  263. package/dist/src/utils/validation/index.d.ts.map +0 -1
  264. package/dist/src/utils/validation/index.js +0 -29
  265. package/dist/src/utils/validation/index.js.map +0 -1
  266. package/dist/src/utils/validation/network.d.ts +0 -19
  267. package/dist/src/utils/validation/network.d.ts.map +0 -1
  268. package/dist/src/utils/validation/network.js +0 -93
  269. package/dist/src/utils/validation/network.js.map +0 -1
  270. package/dist/src/utils/validation/rateLimit.d.ts +0 -21
  271. package/dist/src/utils/validation/rateLimit.d.ts.map +0 -1
  272. package/dist/src/utils/validation/rateLimit.js +0 -43
  273. package/dist/src/utils/validation/rateLimit.js.map +0 -1
  274. package/dist/src/utils/validation/security.d.ts +0 -29
  275. package/dist/src/utils/validation/security.d.ts.map +0 -1
  276. package/dist/src/utils/validation/security.js +0 -327
  277. package/dist/src/utils/validation/security.js.map +0 -1
  278. package/dist/src/utils/validation/wordpress.d.ts +0 -31
  279. package/dist/src/utils/validation/wordpress.d.ts.map +0 -1
  280. package/dist/src/utils/validation/wordpress.js +0 -146
  281. package/dist/src/utils/validation/wordpress.js.map +0 -1
  282. package/dist/src/utils/validation.d.ts +0 -15
  283. package/dist/src/utils/validation.d.ts.map +0 -1
  284. package/dist/src/utils/validation.js +0 -27
  285. package/dist/src/utils/validation.js.map +0 -1
  286. package/dist/tests/vitest.setup.d.ts +0 -6
  287. package/dist/tests/vitest.setup.d.ts.map +0 -1
  288. package/dist/tests/vitest.setup.js +0 -39
  289. package/dist/tests/vitest.setup.js.map +0 -1
@@ -1,29 +0,0 @@
1
- /**
2
- * Validation Utilities - Modular Export Index
3
- *
4
- * This module re-exports all validation functions from their focused modules
5
- * for backward compatibility and convenient imports.
6
- *
7
- * @example
8
- * ```typescript
9
- * // Import all validators (backward compatible)
10
- * import { validateId, validateUrl, validatePostParams } from "./utils/validation";
11
- *
12
- * // Or import from specific modules
13
- * import { validateId } from "./utils/validation/core";
14
- * import { validateUrl } from "./utils/validation/network";
15
- * import { validatePostParams } from "./utils/validation/wordpress";
16
- * ```
17
- */
18
- // Core validators - basic data types
19
- export { validateId, validateString, validateArray } from "./core.js";
20
- // Security validators - file and content safety
21
- export { validateFilePath, validateFileSize, validateMimeType, sanitizeHtml } from "./security.js";
22
- // Network validators - URLs, emails, usernames
23
- export { validateUrl, validateEmail, validateUsername } from "./network.js";
24
- // WordPress-specific validators
25
- export { validatePostStatus, validateSearchQuery, validatePaginationParams, validatePostParams } from "./wordpress.js";
26
- // Rate limiting utilities
27
- export { RateLimiter, authRateLimiter } from "./rateLimit.js";
28
- export { WordPressAPIError } from "../../types/client.js";
29
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEtE,gDAAgD;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnG,+CAA+C;AAC/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5E,gCAAgC;AAChC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEvH,0BAA0B;AAC1B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAI9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Network Validation Utilities
3
- *
4
- * Validation functions for network-related data including URLs, email addresses,
5
- * and username validation with security considerations.
6
- */
7
- /**
8
- * Validates and sanitizes URLs with enhanced edge case handling
9
- */
10
- export declare function validateUrl(url: string, fieldName?: string): string;
11
- /**
12
- * Validates email addresses
13
- */
14
- export declare function validateEmail(email: string): string;
15
- /**
16
- * Validates username format with enhanced security checks
17
- */
18
- export declare function validateUsername(username: string): string;
19
- //# sourceMappingURL=network.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../../src/utils/validation/network.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,MAAM,CAgE1E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsCzD"}
@@ -1,93 +0,0 @@
1
- /**
2
- * Network Validation Utilities
3
- *
4
- * Validation functions for network-related data including URLs, email addresses,
5
- * and username validation with security considerations.
6
- */
7
- import { WordPressAPIError } from "../../types/client.js";
8
- import { config } from "../../config/Config.js";
9
- /**
10
- * Validates and sanitizes URLs with enhanced edge case handling
11
- */
12
- export function validateUrl(url, fieldName = "url") {
13
- // Check for empty or whitespace-only URLs
14
- const trimmedUrl = url.trim();
15
- if (!trimmedUrl) {
16
- throw new WordPressAPIError(`${fieldName} cannot be empty`, 400, "INVALID_PARAMETER");
17
- }
18
- // Remove trailing slashes for consistency
19
- const cleanUrl = trimmedUrl.replace(/\/+$/, "");
20
- // Check for common URL mistakes
21
- if (!cleanUrl.match(/^https?:\/\//i)) {
22
- throw new WordPressAPIError(`Invalid ${fieldName}: must start with http:// or https:// (got "${cleanUrl}")`, 400, "INVALID_PARAMETER");
23
- }
24
- try {
25
- const urlObj = new URL(cleanUrl);
26
- // Only allow http and https protocols
27
- if (!["http:", "https:"].includes(urlObj.protocol)) {
28
- throw new WordPressAPIError(`Invalid ${fieldName}: only HTTP and HTTPS protocols are allowed`, 400, "INVALID_PARAMETER");
29
- }
30
- // Validate hostname
31
- if (!urlObj.hostname || urlObj.hostname.length < 3) {
32
- throw new WordPressAPIError(`Invalid ${fieldName}: hostname is missing or too short`, 400, "INVALID_PARAMETER");
33
- }
34
- // Check for localhost in production
35
- if (config().app.isProduction && (urlObj.hostname === "localhost" || urlObj.hostname === "127.0.0.1")) {
36
- throw new WordPressAPIError(`Invalid ${fieldName}: localhost URLs are not allowed in production`, 400, "INVALID_PARAMETER");
37
- }
38
- // Validate port if present
39
- if (urlObj.port) {
40
- const port = parseInt(urlObj.port);
41
- if (port < 1 || port > 65535) {
42
- throw new WordPressAPIError(`Invalid ${fieldName}: port number must be between 1 and 65535`, 400, "INVALID_PARAMETER");
43
- }
44
- }
45
- return cleanUrl;
46
- }
47
- catch (error) {
48
- if (error instanceof WordPressAPIError) {
49
- throw error;
50
- }
51
- throw new WordPressAPIError(`Invalid ${fieldName}: malformed URL "${cleanUrl}"`, 400, "INVALID_PARAMETER");
52
- }
53
- }
54
- /**
55
- * Validates email addresses
56
- */
57
- export function validateEmail(email) {
58
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
59
- if (!emailRegex.test(email)) {
60
- throw new WordPressAPIError("Invalid email address format", 400, "INVALID_PARAMETER");
61
- }
62
- return email.toLowerCase();
63
- }
64
- /**
65
- * Validates username format with enhanced security checks
66
- */
67
- export function validateUsername(username) {
68
- // Trim and check for empty
69
- const trimmed = username.trim();
70
- if (!trimmed) {
71
- throw new WordPressAPIError("Username cannot be empty", 400, "INVALID_PARAMETER");
72
- }
73
- // WordPress username rules: alphanumeric, space, underscore, hyphen, period, @ symbol
74
- const usernameRegex = /^[a-zA-Z0-9 _.\-@]+$/;
75
- if (!usernameRegex.test(trimmed)) {
76
- throw new WordPressAPIError("Invalid username: can only contain letters, numbers, spaces, and _.-@ symbols", 400, "INVALID_PARAMETER");
77
- }
78
- // Length validation
79
- if (trimmed.length < 3 || trimmed.length > 60) {
80
- throw new WordPressAPIError(`Invalid username: must be between 3 and 60 characters (got ${trimmed.length})`, 400, "INVALID_PARAMETER");
81
- }
82
- // Check for consecutive spaces
83
- if (/\s{2,}/.test(trimmed)) {
84
- throw new WordPressAPIError("Invalid username: cannot contain consecutive spaces", 400, "INVALID_PARAMETER");
85
- }
86
- // Security: Prevent common problematic usernames
87
- const blacklist = ["admin", "root", "wordpress", "wp-admin", "administrator"];
88
- if (blacklist.includes(trimmed.toLowerCase())) {
89
- throw new WordPressAPIError(`Username "${trimmed}" is reserved and cannot be used`, 400, "RESERVED_USERNAME");
90
- }
91
- return trimmed;
92
- }
93
- //# sourceMappingURL=network.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../../src/utils/validation/network.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,YAAoB,KAAK;IAChE,0CAA0C;IAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,iBAAiB,CAAC,GAAG,SAAS,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACxF,CAAC;IAED,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEhD,gCAAgC;IAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,iBAAiB,CACzB,WAAW,SAAS,+CAA+C,QAAQ,IAAI,EAC/E,GAAG,EACH,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEjC,sCAAsC;QACtC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,iBAAiB,CACzB,WAAW,SAAS,6CAA6C,EACjE,GAAG,EACH,mBAAmB,CACpB,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,iBAAiB,CAAC,WAAW,SAAS,oCAAoC,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAClH,CAAC;QAED,oCAAoC;QACpC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,iBAAiB,CACzB,WAAW,SAAS,gDAAgD,EACpE,GAAG,EACH,mBAAmB,CACpB,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;gBAC7B,MAAM,IAAI,iBAAiB,CACzB,WAAW,SAAS,2CAA2C,EAC/D,GAAG,EACH,mBAAmB,CACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACvC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,iBAAiB,CAAC,WAAW,SAAS,oBAAoB,QAAQ,GAAG,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,UAAU,GAAG,4BAA4B,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,iBAAiB,CAAC,8BAA8B,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,2BAA2B;IAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CAAC,0BAA0B,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACpF,CAAC;IAED,sFAAsF;IACtF,MAAM,aAAa,GAAG,sBAAsB,CAAC;IAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,iBAAiB,CACzB,+EAA+E,EAC/E,GAAG,EACH,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,iBAAiB,CACzB,8DAA8D,OAAO,CAAC,MAAM,GAAG,EAC/E,GAAG,EACH,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,iBAAiB,CAAC,qDAAqD,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC/G,CAAC;IAED,iDAAiD;IACjD,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAC9E,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,iBAAiB,CAAC,aAAa,OAAO,kCAAkC,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAChH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Rate Limiting Utilities
3
- *
4
- * Simple in-memory rate limiting for authentication and API requests.
5
- * For production, consider using Redis or similar distributed cache.
6
- */
7
- /**
8
- * Rate limiting tracker (simple in-memory implementation)
9
- * For production, use Redis or similar
10
- */
11
- declare class RateLimiter {
12
- private maxAttempts;
13
- private windowMs;
14
- private attempts;
15
- constructor(maxAttempts?: number, windowMs?: number);
16
- check(identifier: string): void;
17
- reset(identifier: string): void;
18
- }
19
- export declare const authRateLimiter: RateLimiter;
20
- export { RateLimiter };
21
- //# sourceMappingURL=rateLimit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../../../src/utils/validation/rateLimit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,cAAM,WAAW;IAIb,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;IAJlB,OAAO,CAAC,QAAQ,CAAgE;gBAGtE,WAAW,GAAE,MAAU,EACvB,QAAQ,GAAE,MAAc;IAGlC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAwB/B,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAGhC;AAGD,eAAO,MAAM,eAAe,aAA6B,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Rate Limiting Utilities
3
- *
4
- * Simple in-memory rate limiting for authentication and API requests.
5
- * For production, consider using Redis or similar distributed cache.
6
- */
7
- import { WordPressAPIError } from "../../types/client.js";
8
- /**
9
- * Rate limiting tracker (simple in-memory implementation)
10
- * For production, use Redis or similar
11
- */
12
- class RateLimiter {
13
- maxAttempts;
14
- windowMs;
15
- attempts = new Map();
16
- constructor(maxAttempts = 5, windowMs = 60000) {
17
- this.maxAttempts = maxAttempts;
18
- this.windowMs = windowMs;
19
- }
20
- check(identifier) {
21
- const now = Date.now();
22
- const record = this.attempts.get(identifier);
23
- if (!record || record.resetTime < now) {
24
- this.attempts.set(identifier, {
25
- count: 1,
26
- resetTime: now + this.windowMs,
27
- });
28
- return;
29
- }
30
- if (record.count >= this.maxAttempts) {
31
- const waitTime = Math.ceil((record.resetTime - now) / 1000);
32
- throw new WordPressAPIError(`Rate limit exceeded. Please wait ${waitTime} seconds before trying again.`, 429, "RATE_LIMIT_EXCEEDED");
33
- }
34
- record.count++;
35
- }
36
- reset(identifier) {
37
- this.attempts.delete(identifier);
38
- }
39
- }
40
- // Export a default rate limiter for authentication attempts
41
- export const authRateLimiter = new RateLimiter(5, 300000); // 5 attempts per 5 minutes
42
- export { RateLimiter };
43
- //# sourceMappingURL=rateLimit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../../src/utils/validation/rateLimit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW;IAIL;IACA;IAJF,QAAQ,GAAsD,IAAI,GAAG,EAAE,CAAC;IAEhF,YACU,cAAsB,CAAC,EACvB,WAAmB,KAAK;QADxB,gBAAW,GAAX,WAAW,CAAY;QACvB,aAAQ,GAAR,QAAQ,CAAgB;IAC/B,CAAC;IAEJ,KAAK,CAAC,UAAkB;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC5B,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ;aAC/B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5D,MAAM,IAAI,iBAAiB,CACzB,oCAAoC,QAAQ,+BAA+B,EAC3E,GAAG,EACH,qBAAqB,CACtB,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAkB;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;CACF;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,2BAA2B;AAEtF,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Security Validation Utilities
3
- *
4
- * Validation functions focused on security concerns including file path validation,
5
- * file size limits, MIME type validation, and HTML sanitization.
6
- */
7
- /**
8
- * Validates and sanitizes file paths to prevent directory traversal
9
- */
10
- export declare function validateFilePath(userPath: string, allowedBasePath: string): string;
11
- /**
12
- * Validates file size
13
- */
14
- export declare function validateFileSize(sizeInBytes: number, maxSizeInMB?: number): void;
15
- /**
16
- * Validates MIME types for file uploads
17
- */
18
- export declare function validateMimeType(mimeType: string, allowedTypes: string[]): void;
19
- /**
20
- * Sanitizes HTML content to prevent XSS attacks using a whitelist-based approach
21
- *
22
- * This implementation satisfies GitHub Advanced Security requirements by:
23
- * 1. Using character-by-character parsing instead of potentially vulnerable regex patterns
24
- * 2. Implementing a strict whitelist of allowed elements and attributes
25
- * 3. Properly handling all edge cases that bypass traditional regex sanitization
26
- * 4. Providing complete protection against script injection, event handlers, and dangerous protocols
27
- */
28
- export declare function sanitizeHtml(html: string): string;
29
- //# sourceMappingURL=security.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../../src/utils/validation/security.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAWlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,GAAE,MAAW,GAAG,IAAI,CAKpF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAQ/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2HjD"}
@@ -1,327 +0,0 @@
1
- /**
2
- * Security Validation Utilities
3
- *
4
- * Validation functions focused on security concerns including file path validation,
5
- * file size limits, MIME type validation, and HTML sanitization.
6
- */
7
- import * as path from "path";
8
- import { WordPressAPIError } from "../../types/client.js";
9
- /**
10
- * Validates and sanitizes file paths to prevent directory traversal
11
- */
12
- export function validateFilePath(userPath, allowedBasePath) {
13
- // Normalize the path to remove ../ and other dangerous patterns
14
- const normalizedPath = path.normalize(userPath);
15
- const resolvedPath = path.resolve(allowedBasePath, normalizedPath);
16
- // Ensure the resolved path is within the allowed directory
17
- if (!resolvedPath.startsWith(path.resolve(allowedBasePath))) {
18
- throw new WordPressAPIError("Invalid file path: access denied", 403, "PATH_TRAVERSAL_ATTEMPT");
19
- }
20
- return resolvedPath;
21
- }
22
- /**
23
- * Validates file size
24
- */
25
- export function validateFileSize(sizeInBytes, maxSizeInMB = 10) {
26
- const maxSizeInBytes = maxSizeInMB * 1024 * 1024;
27
- if (sizeInBytes > maxSizeInBytes) {
28
- throw new WordPressAPIError(`File size exceeds maximum allowed size of ${maxSizeInMB}MB`, 413, "FILE_TOO_LARGE");
29
- }
30
- }
31
- /**
32
- * Validates MIME types for file uploads
33
- */
34
- export function validateMimeType(mimeType, allowedTypes) {
35
- if (!allowedTypes.includes(mimeType)) {
36
- throw new WordPressAPIError(`Invalid file type: ${mimeType}. Allowed types: ${allowedTypes.join(", ")}`, 415, "UNSUPPORTED_MEDIA_TYPE");
37
- }
38
- }
39
- /**
40
- * Sanitizes HTML content to prevent XSS attacks using a whitelist-based approach
41
- *
42
- * This implementation satisfies GitHub Advanced Security requirements by:
43
- * 1. Using character-by-character parsing instead of potentially vulnerable regex patterns
44
- * 2. Implementing a strict whitelist of allowed elements and attributes
45
- * 3. Properly handling all edge cases that bypass traditional regex sanitization
46
- * 4. Providing complete protection against script injection, event handlers, and dangerous protocols
47
- */
48
- export function sanitizeHtml(html) {
49
- if (!html || typeof html !== "string") {
50
- return "";
51
- }
52
- // Whitelist of allowed HTML elements (safe for WordPress content)
53
- const allowedElements = new Set([
54
- "p",
55
- "br",
56
- "strong",
57
- "b",
58
- "em",
59
- "i",
60
- "u",
61
- "span",
62
- "div",
63
- "h1",
64
- "h2",
65
- "h3",
66
- "h4",
67
- "h5",
68
- "h6",
69
- "ul",
70
- "ol",
71
- "li",
72
- "dl",
73
- "dt",
74
- "dd",
75
- "blockquote",
76
- "pre",
77
- "code",
78
- "a",
79
- "img",
80
- "table",
81
- "thead",
82
- "tbody",
83
- "tfoot",
84
- "tr",
85
- "td",
86
- "th",
87
- "hr",
88
- ]);
89
- // Whitelist of allowed attributes per element
90
- const allowedAttributes = {
91
- a: new Set(["href", "title", "target"]),
92
- img: new Set(["src", "alt", "title", "width", "height"]),
93
- div: new Set(["class", "id"]),
94
- span: new Set(["class", "id"]),
95
- p: new Set(["class", "id"]),
96
- h1: new Set(["class", "id"]),
97
- h2: new Set(["class", "id"]),
98
- h3: new Set(["class", "id"]),
99
- h4: new Set(["class", "id"]),
100
- h5: new Set(["class", "id"]),
101
- h6: new Set(["class", "id"]),
102
- table: new Set(["class", "id"]),
103
- td: new Set(["class", "id", "colspan", "rowspan"]),
104
- th: new Set(["class", "id", "colspan", "rowspan"]),
105
- };
106
- // Safe URL protocols
107
- const safeProtocols = new Set(["http:", "https:", "mailto:", "tel:", "ftp:"]);
108
- let result = "";
109
- let i = 0;
110
- while (i < html.length) {
111
- if (html[i] === "<") {
112
- // Found a potential HTML tag
113
- const tagMatch = parseHtmlTag(html, i);
114
- if (tagMatch) {
115
- const { tagName, attributes, isClosing, isSelfClosing, endIndex } = tagMatch;
116
- // Check if this is an allowed element
117
- if (allowedElements.has(tagName.toLowerCase())) {
118
- // Build sanitized tag
119
- let sanitizedTag = "<";
120
- if (isClosing)
121
- sanitizedTag += "/";
122
- sanitizedTag += tagName.toLowerCase();
123
- // Process attributes if not a closing tag
124
- if (!isClosing && attributes.length > 0) {
125
- const allowedAttrs = allowedAttributes[tagName.toLowerCase()] || new Set();
126
- for (const attr of attributes) {
127
- if (allowedAttrs.has(attr.name.toLowerCase())) {
128
- // Additional validation for URL attributes
129
- if ((attr.name.toLowerCase() === "href" || attr.name.toLowerCase() === "src") && attr.value) {
130
- if (isValidUrl(attr.value, safeProtocols)) {
131
- sanitizedTag += ` ${attr.name.toLowerCase()}="${escapeAttributeValue(attr.value)}"`;
132
- }
133
- }
134
- else if (attr.value !== null) {
135
- // Other safe attributes
136
- sanitizedTag += ` ${attr.name.toLowerCase()}="${escapeAttributeValue(attr.value)}"`;
137
- }
138
- }
139
- }
140
- }
141
- if (isSelfClosing)
142
- sanitizedTag += " /";
143
- sanitizedTag += ">";
144
- result += sanitizedTag;
145
- }
146
- // If element not allowed, skip the entire tag
147
- i = endIndex;
148
- }
149
- else {
150
- // Not a valid tag, treat as text
151
- result += escapeHtmlChar(html[i]);
152
- i++;
153
- }
154
- }
155
- else {
156
- // Regular text content
157
- result += escapeHtmlChar(html[i]);
158
- i++;
159
- }
160
- }
161
- // Final cleanup: normalize whitespace
162
- return result.replace(/\s+/g, " ").trim();
163
- }
164
- /**
165
- * Parses an HTML tag starting at the given position
166
- * Returns tag information or null if not a valid tag
167
- */
168
- function parseHtmlTag(html, startIndex) {
169
- if (html[startIndex] !== "<")
170
- return null;
171
- let i = startIndex + 1;
172
- let isClosing = false;
173
- // Skip whitespace
174
- while (i < html.length && /\s/.test(html[i]))
175
- i++;
176
- // Check for closing tag
177
- if (i < html.length && html[i] === "/") {
178
- isClosing = true;
179
- i++;
180
- while (i < html.length && /\s/.test(html[i]))
181
- i++;
182
- }
183
- // Parse tag name
184
- const tagNameStart = i;
185
- while (i < html.length && /[a-zA-Z0-9]/.test(html[i]))
186
- i++;
187
- if (i === tagNameStart)
188
- return null; // No valid tag name
189
- const tagName = html.substring(tagNameStart, i);
190
- const attributes = [];
191
- // Parse attributes (only for opening tags)
192
- if (!isClosing) {
193
- while (i < html.length && html[i] !== ">") {
194
- // Skip whitespace
195
- while (i < html.length && /\s/.test(html[i]))
196
- i++;
197
- if (i >= html.length || html[i] === ">")
198
- break;
199
- // Check for self-closing
200
- if (html[i] === "/") {
201
- i++;
202
- while (i < html.length && /\s/.test(html[i]))
203
- i++;
204
- if (i < html.length && html[i] === ">") {
205
- return {
206
- tagName,
207
- attributes,
208
- isClosing: false,
209
- isSelfClosing: true,
210
- endIndex: i + 1,
211
- };
212
- }
213
- break;
214
- }
215
- // Parse attribute name
216
- const attrNameStart = i;
217
- while (i < html.length && /[a-zA-Z0-9-_]/.test(html[i]))
218
- i++;
219
- if (i === attrNameStart)
220
- break; // Invalid attribute name
221
- const attrName = html.substring(attrNameStart, i);
222
- let attrValue = null;
223
- // Skip whitespace
224
- while (i < html.length && /\s/.test(html[i]))
225
- i++;
226
- // Check for attribute value
227
- if (i < html.length && html[i] === "=") {
228
- i++;
229
- while (i < html.length && /\s/.test(html[i]))
230
- i++;
231
- if (i < html.length) {
232
- if (html[i] === '"' || html[i] === "'") {
233
- // Quoted value
234
- const quote = html[i];
235
- i++;
236
- const valueStart = i;
237
- while (i < html.length && html[i] !== quote)
238
- i++;
239
- if (i < html.length) {
240
- attrValue = html.substring(valueStart, i);
241
- i++; // Skip closing quote
242
- }
243
- }
244
- else {
245
- // Unquoted value
246
- const valueStart = i;
247
- while (i < html.length && !/[\s>]/.test(html[i]))
248
- i++;
249
- attrValue = html.substring(valueStart, i);
250
- }
251
- }
252
- }
253
- attributes.push({ name: attrName, value: attrValue });
254
- }
255
- }
256
- // Find closing >
257
- while (i < html.length && html[i] !== ">")
258
- i++;
259
- if (i >= html.length)
260
- return null; // Unclosed tag
261
- return {
262
- tagName,
263
- attributes,
264
- isClosing,
265
- isSelfClosing: false,
266
- endIndex: i + 1,
267
- };
268
- }
269
- /**
270
- * Validates URL safety
271
- */
272
- function isValidUrl(url, safeProtocols) {
273
- if (!url || typeof url !== "string")
274
- return false;
275
- // Remove whitespace
276
- url = url.trim();
277
- if (!url)
278
- return false;
279
- // Allow relative URLs
280
- if (url.startsWith("/") || url.startsWith("./") || url.startsWith("../")) {
281
- return true;
282
- }
283
- // Allow fragment URLs
284
- if (url.startsWith("#")) {
285
- return true;
286
- }
287
- // Check protocol
288
- const protocolMatch = url.match(/^([a-z][a-z0-9+.-]*:)/i);
289
- if (protocolMatch) {
290
- return safeProtocols.has(protocolMatch[1].toLowerCase());
291
- }
292
- // No protocol specified, treat as relative
293
- return true;
294
- }
295
- /**
296
- * Escapes attribute values
297
- */
298
- function escapeAttributeValue(value) {
299
- if (!value)
300
- return "";
301
- return value
302
- .replace(/&/g, "&amp;")
303
- .replace(/"/g, "&quot;")
304
- .replace(/'/g, "&#39;")
305
- .replace(/</g, "&lt;")
306
- .replace(/>/g, "&gt;");
307
- }
308
- /**
309
- * Escapes individual HTML characters
310
- */
311
- function escapeHtmlChar(char) {
312
- switch (char) {
313
- case "&":
314
- return "&amp;";
315
- case "<":
316
- return "&lt;";
317
- case ">":
318
- return "&gt;";
319
- case '"':
320
- return "&quot;";
321
- case "'":
322
- return "&#39;";
323
- default:
324
- return char;
325
- }
326
- }
327
- //# sourceMappingURL=security.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../src/utils/validation/security.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- /**
2
- * WordPress-Specific Validation Utilities
3
- *
4
- * Validation functions specific to WordPress data structures including post parameters,
5
- * pagination, search queries, and status validation.
6
- */
7
- /**
8
- * Validates WordPress post status values
9
- */
10
- export declare function validatePostStatus(status: string): string;
11
- /**
12
- * Validates and sanitizes search queries
13
- */
14
- export declare function validateSearchQuery(query: string): string;
15
- /**
16
- * Validates pagination parameters as a set
17
- */
18
- export declare function validatePaginationParams(params: {
19
- page?: unknown;
20
- per_page?: unknown;
21
- offset?: unknown;
22
- }): {
23
- page?: number;
24
- per_page?: number;
25
- offset?: number;
26
- };
27
- /**
28
- * Validates complex post creation parameters
29
- */
30
- export declare function validatePostParams(params: unknown): Record<string, unknown>;
31
- //# sourceMappingURL=wordpress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wordpress.d.ts","sourceRoot":"","sources":["../../../../src/utils/validation/wordpress.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBzD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG;IAC1G,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAiDA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0E3E"}